Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
# Algolia Configuration
# Get these values from your Algolia dashboard: https://www.algolia.com/dashboard

# Your Algolia Application ID
ALGOLIA_APP_ID=YOUR_APP_ID

# Admin API Key (for indexing script only - DO NOT expose this in client code)
ALGOLIA_ADMIN_API_KEY=YOUR_ADMIN_API_KEY

# Search-Only API Key (safe to use in client code)
ALGOLIA_SEARCH_API_KEY=YOUR_SEARCH_API_KEY

# Your Algolia index name
ALGOLIA_INDEX_NAME=typecomposer_docs
175 changes: 175 additions & 0 deletions ALGOLIA_SETUP.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
# Algolia InstantSearch Integration

This documentation provides instructions for setting up and configuring Algolia InstantSearch for the TypeComposer documentation.

## Overview

The TypeComposer docs now include Algolia InstantSearch for fast and relevant search functionality. The search is accessible through:

- **Search button** in the navigation bar
- **Keyboard shortcut**: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- **ESC key** to close the search modal

## Configuration

### 1. Algolia Account Setup

1. Create an account at [Algolia](https://www.algolia.com/)
2. Create a new application or use an existing one
3. Create a new index for your documentation (e.g., `typecomposer_docs`)

### 2. Update Algolia Credentials

Update the following constants in `/src/components/search/AlgoliaSearch.ts`:

```typescript
const ALGOLIA_APP_ID = "YOUR_APP_ID"; // Replace with your Algolia Application ID
const ALGOLIA_SEARCH_API_KEY = "YOUR_SEARCH_API_KEY"; // Replace with your Search-Only API Key
const ALGOLIA_INDEX_NAME = "typecomposer_docs"; // Replace with your index name
```

**Important**: Use the **Search-Only API Key** (not the Admin API Key) for client-side searches.

### 3. Index Your Documentation

To make your documentation searchable, you need to index it in Algolia. There are several ways to do this:

#### Option A: Using Algolia Crawler (Recommended)

1. Go to your Algolia dashboard
2. Navigate to **Data sources** > **Crawler**
3. Create a new crawler with your website URL
4. Configure the crawler to extract:
- `title` - Page title
- `content` - Page content/text
- `path` - Document path for navigation
- `hierarchy` - Document structure (h1, h2, h3, etc.)

#### Option B: Using Algolia DocSearch (For Open Source)

If your project is open source and publicly available, you can apply for [Algolia DocSearch](https://docsearch.algolia.com/) which provides free search for documentation.

#### Option C: Manual Indexing

You can create a script to manually index your MDX content:

```javascript
import algoliasearch from 'algoliasearch';
import fs from 'fs';
import path from 'path';

const client = algoliasearch('YOUR_APP_ID', 'YOUR_ADMIN_API_KEY');
const index = client.initIndex('typecomposer_docs');

// Read and parse your MDX files
const contentDir = './content';
const records = [];

// Process each MDX file
fs.readdirSync(contentDir, { recursive: true }).forEach(file => {
if (file.endsWith('.mdx')) {
const content = fs.readFileSync(path.join(contentDir, file), 'utf-8');

records.push({
objectID: file,
title: extractTitle(content),
content: extractContent(content),
path: file.replace('.mdx', '').replace('/content', '/docs'),
});
}
});

// Upload to Algolia
index.saveObjects(records);
```

## Search Configuration

### Customizing Search Behavior

The search is configured in `/src/components/search/AlgoliaSearch.ts`. You can customize:

- **Number of results**: Change `hitsPerPage` in the `configure` widget
- **Search attributes**: Modify the `searchableAttributes` in your Algolia index settings
- **Faceting**: Add filters for categories, tags, etc.

### Customizing Search UI

The search styles are defined in `/src/components/search/search.scss`. You can customize:

- Modal appearance and positioning
- Search input styling
- Results display format
- Colors to match your theme

### Search Result Template

The search results template is configured in the `hits` widget:

```typescript
templates: {
item: (hit: any, { html, components }: any) => html`
<a href="${`#/docs/${hit.path}`}" class="hit-link">
<div class="hit-title">${components.Highlight({ hit, attribute: "title" })}</div>
<div class="hit-content">${components.Snippet({ hit, attribute: "content" })}</div>
</a>
`,
}
```

Customize this template to change how search results are displayed.

## Features

### Current Features

- βœ… InstantSearch integration with Algolia
- βœ… Modal-based search interface
- βœ… Keyboard shortcuts (⌘K / Ctrl+K)
- βœ… Highlighted search terms
- βœ… Content snippets in results
- βœ… Responsive design
- βœ… Theme-aware styling (dark/light mode)

### Planned Enhancements

- πŸ”„ Autocomplete suggestions
- πŸ”„ Search filters (by category, type)
- πŸ”„ Recent searches
- πŸ”„ Keyboard navigation in results

## Troubleshooting

### Search Not Working

1. **Check credentials**: Ensure `ALGOLIA_APP_ID`, `ALGOLIA_SEARCH_API_KEY`, and `ALGOLIA_INDEX_NAME` are correct
2. **Verify index**: Make sure your Algolia index contains records
3. **Check browser console**: Look for error messages
4. **API Key permissions**: Ensure the Search-Only API Key has the correct permissions

### No Results Found

1. **Index is empty**: Index your documentation content
2. **Attribute configuration**: Ensure `searchableAttributes` in Algolia includes `title` and `content`
3. **Path format**: Verify the `path` field in your records matches the expected format

### Styling Issues

1. **Theme variables**: Ensure CSS variables are defined in `/src/styles/style.scss`
2. **Import order**: Check that search styles are imported after base styles
3. **Specificity**: Some styles may need `!important` to override defaults

## Resources

- [Algolia InstantSearch Documentation](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- [Algolia Dashboard](https://www.algolia.com/dashboard)
- [DocSearch Program](https://docsearch.algolia.com/)
- [Algolia API Reference](https://www.algolia.com/doc/api-reference/)

## Support

For issues or questions:

1. Check the [Algolia community forum](https://discourse.algolia.com/)
2. Review [InstantSearch issues on GitHub](https://github.com/algolia/instantsearch/issues)
3. Open an issue in the TypeComposer docs repository
160 changes: 160 additions & 0 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
# TypeComposer Documentation

Official documentation for [TypeComposer](https://github.com/typecomposer/typecomposer) - a framework for building web and native user interfaces.

## Features

- πŸ“š Comprehensive documentation for TypeComposer framework
- πŸ” **Fast search powered by Algolia InstantSearch**
- 🎨 Dark/Light theme support
- πŸ“± Responsive design
- πŸ’» Interactive playground
- 🎯 Component examples and API reference

## Getting Started

### Prerequisites

- Node.js 18+
- npm or yarn

### Installation

```bash
# Clone the repository
git clone https://github.com/TypeComposer/docs.git
cd docs

# Install dependencies
npm install

# Start development server
npm run dev
```

### Build

```bash
# Build for production
npm run build

# Preview production build
npm run preview
```

## Search Setup

This documentation includes Algolia InstantSearch for fast and relevant search functionality. See [ALGOLIA_SETUP.md](./ALGOLIA_SETUP.md) for detailed setup instructions.

### Quick Setup

1. Copy `.env.example` to `.env`:
```bash
cp .env.example .env
```

2. Update `.env` with your Algolia credentials:
```env
ALGOLIA_APP_ID=your_app_id
ALGOLIA_SEARCH_API_KEY=your_search_api_key
ALGOLIA_INDEX_NAME=typecomposer_docs
```

3. Update credentials in `/src/components/search/AlgoliaSearch.ts`

4. Index your documentation:
```bash
node scripts/index-algolia.js
```

### Using Search

- Click the search icon in the navigation bar
- Or use keyboard shortcut: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- Press `ESC` to close the search modal

## Project Structure

```
docs/
β”œβ”€β”€ content/ # MDX documentation files
β”‚ β”œβ”€β”€ components/ # Component documentation
β”‚ β”œβ”€β”€ elements/ # Element documentation
β”‚ └── layout/ # Layout documentation
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ components/ # UI components
β”‚ β”‚ β”œβ”€β”€ navbar/ # Navigation bar
β”‚ β”‚ β”œβ”€β”€ sidebar/ # Sidebar navigation
β”‚ β”‚ └── search/ # Algolia search components
β”‚ β”œβ”€β”€ pages/ # Page components
β”‚ β”œβ”€β”€ styles/ # Global styles
β”‚ └── utils/ # Utility functions
β”œβ”€β”€ scripts/ # Build and utility scripts
β”‚ └── index-algolia.js # Algolia indexing script
└── public/ # Static assets
```

## Technology Stack

- **Framework**: [TypeComposer](https://github.com/typecomposer/typecomposer)
- **Build Tool**: [Vite](https://vitejs.dev/)
- **Styling**: [Tailwind CSS](https://tailwindcss.com/) + SCSS
- **Search**: [Algolia InstantSearch](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- **Content**: MDX (Markdown + JSX)
- **Syntax Highlighting**: [Highlight.js](https://highlightjs.org/)

## Development

### Adding Documentation

1. Create a new `.mdx` file in the appropriate `content/` subdirectory
2. Add the route in `src/router/router.ts`
3. Update sidebar navigation in `src/assets/data.json`
4. Re-index for search: `node scripts/index-algolia.js`

### Customizing Theme

Theme colors are defined in `src/styles/style.scss`:
- Light theme: `[data-theme="light"]`
- Dark theme: `[data-theme="dark"]`

### Search Customization

Search UI can be customized in:
- `/src/components/search/AlgoliaSearch.ts` - Search logic and widgets
- `/src/components/search/SearchModal.ts` - Modal behavior
- `/src/components/search/search.scss` - Search styles

## Scripts

- `npm run dev` - Start development server
- `npm run build` - Build for production
- `npm run preview` - Preview production build
- `npm run clean` - Clean build cache and restart

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Links

- [TypeComposer Framework](https://github.com/typecomposer/typecomposer)
- [Documentation Website](https://www.typecomposer.io)
- [NPM Package](https://www.npmjs.com/package/typecomposer)
- [Algolia Setup Guide](./ALGOLIA_SETUP.md)

## Support

- πŸ“§ Email: support@typecomposer.io
- πŸ’¬ Discord: [Join our community](https://discord.gg/typecomposer)
- πŸ› Issues: [GitHub Issues](https://github.com/TypeComposer/docs/issues)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
# Algolia Configuration
# Get these values from your Algolia dashboard: https://www.algolia.com/dashboard

# Your Algolia Application ID
ALGOLIA_APP_ID=YOUR_APP_ID

# Admin API Key (for indexing script only - DO NOT expose this in client code)
ALGOLIA_ADMIN_API_KEY=YOUR_ADMIN_API_KEY

# Search-Only API Key (safe to use in client code)
ALGOLIA_SEARCH_API_KEY=YOUR_SEARCH_API_KEY

# Your Algolia index name
ALGOLIA_INDEX_NAME=typecomposer_docs
175 changes: 175 additions & 0 deletions ALGOLIA_SETUP.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
# Algolia InstantSearch Integration

This documentation provides instructions for setting up and configuring Algolia InstantSearch for the TypeComposer documentation.

## Overview

The TypeComposer docs now include Algolia InstantSearch for fast and relevant search functionality. The search is accessible through:

- **Search button** in the navigation bar
- **Keyboard shortcut**: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- **ESC key** to close the search modal

## Configuration

### 1. Algolia Account Setup

1. Create an account at [Algolia](https://www.algolia.com/)
2. Create a new application or use an existing one
3. Create a new index for your documentation (e.g., `typecomposer_docs`)

### 2. Update Algolia Credentials

Update the following constants in `/src/components/search/AlgoliaSearch.ts`:

```typescript
const ALGOLIA_APP_ID = "YOUR_APP_ID"; // Replace with your Algolia Application ID
const ALGOLIA_SEARCH_API_KEY = "YOUR_SEARCH_API_KEY"; // Replace with your Search-Only API Key
const ALGOLIA_INDEX_NAME = "typecomposer_docs"; // Replace with your index name
```

**Important**: Use the **Search-Only API Key** (not the Admin API Key) for client-side searches.

### 3. Index Your Documentation

To make your documentation searchable, you need to index it in Algolia. There are several ways to do this:

#### Option A: Using Algolia Crawler (Recommended)

1. Go to your Algolia dashboard
2. Navigate to **Data sources** > **Crawler**
3. Create a new crawler with your website URL
4. Configure the crawler to extract:
- `title` - Page title
- `content` - Page content/text
- `path` - Document path for navigation
- `hierarchy` - Document structure (h1, h2, h3, etc.)

#### Option B: Using Algolia DocSearch (For Open Source)

If your project is open source and publicly available, you can apply for [Algolia DocSearch](https://docsearch.algolia.com/) which provides free search for documentation.

#### Option C: Manual Indexing

You can create a script to manually index your MDX content:

```javascript
import algoliasearch from 'algoliasearch';
import fs from 'fs';
import path from 'path';

const client = algoliasearch('YOUR_APP_ID', 'YOUR_ADMIN_API_KEY');
const index = client.initIndex('typecomposer_docs');

// Read and parse your MDX files
const contentDir = './content';
const records = [];

// Process each MDX file
fs.readdirSync(contentDir, { recursive: true }).forEach(file => {
if (file.endsWith('.mdx')) {
const content = fs.readFileSync(path.join(contentDir, file), 'utf-8');

records.push({
objectID: file,
title: extractTitle(content),
content: extractContent(content),
path: file.replace('.mdx', '').replace('/content', '/docs'),
});
}
});

// Upload to Algolia
index.saveObjects(records);
```

## Search Configuration

### Customizing Search Behavior

The search is configured in `/src/components/search/AlgoliaSearch.ts`. You can customize:

- **Number of results**: Change `hitsPerPage` in the `configure` widget
- **Search attributes**: Modify the `searchableAttributes` in your Algolia index settings
- **Faceting**: Add filters for categories, tags, etc.

### Customizing Search UI

The search styles are defined in `/src/components/search/search.scss`. You can customize:

- Modal appearance and positioning
- Search input styling
- Results display format
- Colors to match your theme

### Search Result Template

The search results template is configured in the `hits` widget:

```typescript
templates: {
item: (hit: any, { html, components }: any) => html`
<a href="${`#/docs/${hit.path}`}" class="hit-link">
<div class="hit-title">${components.Highlight({ hit, attribute: "title" })}</div>
<div class="hit-content">${components.Snippet({ hit, attribute: "content" })}</div>
</a>
`,
}
```

Customize this template to change how search results are displayed.

## Features

### Current Features

- βœ… InstantSearch integration with Algolia
- βœ… Modal-based search interface
- βœ… Keyboard shortcuts (⌘K / Ctrl+K)
- βœ… Highlighted search terms
- βœ… Content snippets in results
- βœ… Responsive design
- βœ… Theme-aware styling (dark/light mode)

### Planned Enhancements

- πŸ”„ Autocomplete suggestions
- πŸ”„ Search filters (by category, type)
- πŸ”„ Recent searches
- πŸ”„ Keyboard navigation in results

## Troubleshooting

### Search Not Working

1. **Check credentials**: Ensure `ALGOLIA_APP_ID`, `ALGOLIA_SEARCH_API_KEY`, and `ALGOLIA_INDEX_NAME` are correct
2. **Verify index**: Make sure your Algolia index contains records
3. **Check browser console**: Look for error messages
4. **API Key permissions**: Ensure the Search-Only API Key has the correct permissions

### No Results Found

1. **Index is empty**: Index your documentation content
2. **Attribute configuration**: Ensure `searchableAttributes` in Algolia includes `title` and `content`
3. **Path format**: Verify the `path` field in your records matches the expected format

### Styling Issues

1. **Theme variables**: Ensure CSS variables are defined in `/src/styles/style.scss`
2. **Import order**: Check that search styles are imported after base styles
3. **Specificity**: Some styles may need `!important` to override defaults

## Resources

- [Algolia InstantSearch Documentation](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- [Algolia Dashboard](https://www.algolia.com/dashboard)
- [DocSearch Program](https://docsearch.algolia.com/)
- [Algolia API Reference](https://www.algolia.com/doc/api-reference/)

## Support

For issues or questions:

1. Check the [Algolia community forum](https://discourse.algolia.com/)
2. Review [InstantSearch issues on GitHub](https://github.com/algolia/instantsearch/issues)
3. Open an issue in the TypeComposer docs repository
160 changes: 160 additions & 0 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
# TypeComposer Documentation

Official documentation for [TypeComposer](https://github.com/typecomposer/typecomposer) - a framework for building web and native user interfaces.

## Features

- πŸ“š Comprehensive documentation for TypeComposer framework
- πŸ” **Fast search powered by Algolia InstantSearch**
- 🎨 Dark/Light theme support
- πŸ“± Responsive design
- πŸ’» Interactive playground
- 🎯 Component examples and API reference

## Getting Started

### Prerequisites

- Node.js 18+
- npm or yarn

### Installation

```bash
# Clone the repository
git clone https://github.com/TypeComposer/docs.git
cd docs

# Install dependencies
npm install

# Start development server
npm run dev
```

### Build

```bash
# Build for production
npm run build

# Preview production build
npm run preview
```

## Search Setup

This documentation includes Algolia InstantSearch for fast and relevant search functionality. See [ALGOLIA_SETUP.md](./ALGOLIA_SETUP.md) for detailed setup instructions.

### Quick Setup

1. Copy `.env.example` to `.env`:
```bash
cp .env.example .env
```

2. Update `.env` with your Algolia credentials:
```env
ALGOLIA_APP_ID=your_app_id
ALGOLIA_SEARCH_API_KEY=your_search_api_key
ALGOLIA_INDEX_NAME=typecomposer_docs
```

3. Update credentials in `/src/components/search/AlgoliaSearch.ts`

4. Index your documentation:
```bash
node scripts/index-algolia.js
```

### Using Search

- Click the search icon in the navigation bar
- Or use keyboard shortcut: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- Press `ESC` to close the search modal

## Project Structure

```
docs/
β”œβ”€β”€ content/ # MDX documentation files
β”‚ β”œβ”€β”€ components/ # Component documentation
β”‚ β”œβ”€β”€ elements/ # Element documentation
β”‚ └── layout/ # Layout documentation
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ components/ # UI components
β”‚ β”‚ β”œβ”€β”€ navbar/ # Navigation bar
β”‚ β”‚ β”œβ”€β”€ sidebar/ # Sidebar navigation
β”‚ β”‚ └── search/ # Algolia search components
β”‚ β”œβ”€β”€ pages/ # Page components
β”‚ β”œβ”€β”€ styles/ # Global styles
β”‚ └── utils/ # Utility functions
β”œβ”€β”€ scripts/ # Build and utility scripts
β”‚ └── index-algolia.js # Algolia indexing script
└── public/ # Static assets
```

## Technology Stack

- **Framework**: [TypeComposer](https://github.com/typecomposer/typecomposer)
- **Build Tool**: [Vite](https://vitejs.dev/)
- **Styling**: [Tailwind CSS](https://tailwindcss.com/) + SCSS
- **Search**: [Algolia InstantSearch](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- **Content**: MDX (Markdown + JSX)
- **Syntax Highlighting**: [Highlight.js](https://highlightjs.org/)

## Development

### Adding Documentation

1. Create a new `.mdx` file in the appropriate `content/` subdirectory
2. Add the route in `src/router/router.ts`
3. Update sidebar navigation in `src/assets/data.json`
4. Re-index for search: `node scripts/index-algolia.js`

### Customizing Theme

Theme colors are defined in `src/styles/style.scss`:
- Light theme: `[data-theme="light"]`
- Dark theme: `[data-theme="dark"]`

### Search Customization

Search UI can be customized in:
- `/src/components/search/AlgoliaSearch.ts` - Search logic and widgets
- `/src/components/search/SearchModal.ts` - Modal behavior
- `/src/components/search/search.scss` - Search styles

## Scripts

- `npm run dev` - Start development server
- `npm run build` - Build for production
- `npm run preview` - Preview production build
- `npm run clean` - Clean build cache and restart

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Links

- [TypeComposer Framework](https://github.com/typecomposer/typecomposer)
- [Documentation Website](https://www.typecomposer.io)
- [NPM Package](https://www.npmjs.com/package/typecomposer)
- [Algolia Setup Guide](./ALGOLIA_SETUP.md)

## Support

- πŸ“§ Email: support@typecomposer.io
- πŸ’¬ Discord: [Join our community](https://discord.gg/typecomposer)
- πŸ› Issues: [GitHub Issues](https://github.com/TypeComposer/docs/issues)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
# Algolia Configuration
# Get these values from your Algolia dashboard: https://www.algolia.com/dashboard

# Your Algolia Application ID
ALGOLIA_APP_ID=YOUR_APP_ID

# Admin API Key (for indexing script only - DO NOT expose this in client code)
ALGOLIA_ADMIN_API_KEY=YOUR_ADMIN_API_KEY

# Search-Only API Key (safe to use in client code)
ALGOLIA_SEARCH_API_KEY=YOUR_SEARCH_API_KEY

# Your Algolia index name
ALGOLIA_INDEX_NAME=typecomposer_docs
175 changes: 175 additions & 0 deletions ALGOLIA_SETUP.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
# Algolia InstantSearch Integration

This documentation provides instructions for setting up and configuring Algolia InstantSearch for the TypeComposer documentation.

## Overview

The TypeComposer docs now include Algolia InstantSearch for fast and relevant search functionality. The search is accessible through:

- **Search button** in the navigation bar
- **Keyboard shortcut**: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- **ESC key** to close the search modal

## Configuration

### 1. Algolia Account Setup

1. Create an account at [Algolia](https://www.algolia.com/)
2. Create a new application or use an existing one
3. Create a new index for your documentation (e.g., `typecomposer_docs`)

### 2. Update Algolia Credentials

Update the following constants in `/src/components/search/AlgoliaSearch.ts`:

```typescript
const ALGOLIA_APP_ID = "YOUR_APP_ID"; // Replace with your Algolia Application ID
const ALGOLIA_SEARCH_API_KEY = "YOUR_SEARCH_API_KEY"; // Replace with your Search-Only API Key
const ALGOLIA_INDEX_NAME = "typecomposer_docs"; // Replace with your index name
```

**Important**: Use the **Search-Only API Key** (not the Admin API Key) for client-side searches.

### 3. Index Your Documentation

To make your documentation searchable, you need to index it in Algolia. There are several ways to do this:

#### Option A: Using Algolia Crawler (Recommended)

1. Go to your Algolia dashboard
2. Navigate to **Data sources** > **Crawler**
3. Create a new crawler with your website URL
4. Configure the crawler to extract:
- `title` - Page title
- `content` - Page content/text
- `path` - Document path for navigation
- `hierarchy` - Document structure (h1, h2, h3, etc.)

#### Option B: Using Algolia DocSearch (For Open Source)

If your project is open source and publicly available, you can apply for [Algolia DocSearch](https://docsearch.algolia.com/) which provides free search for documentation.

#### Option C: Manual Indexing

You can create a script to manually index your MDX content:

```javascript
import algoliasearch from 'algoliasearch';
import fs from 'fs';
import path from 'path';

const client = algoliasearch('YOUR_APP_ID', 'YOUR_ADMIN_API_KEY');
const index = client.initIndex('typecomposer_docs');

// Read and parse your MDX files
const contentDir = './content';
const records = [];

// Process each MDX file
fs.readdirSync(contentDir, { recursive: true }).forEach(file => {
if (file.endsWith('.mdx')) {
const content = fs.readFileSync(path.join(contentDir, file), 'utf-8');

records.push({
objectID: file,
title: extractTitle(content),
content: extractContent(content),
path: file.replace('.mdx', '').replace('/content', '/docs'),
});
}
});

// Upload to Algolia
index.saveObjects(records);
```

## Search Configuration

### Customizing Search Behavior

The search is configured in `/src/components/search/AlgoliaSearch.ts`. You can customize:

- **Number of results**: Change `hitsPerPage` in the `configure` widget
- **Search attributes**: Modify the `searchableAttributes` in your Algolia index settings
- **Faceting**: Add filters for categories, tags, etc.

### Customizing Search UI

The search styles are defined in `/src/components/search/search.scss`. You can customize:

- Modal appearance and positioning
- Search input styling
- Results display format
- Colors to match your theme

### Search Result Template

The search results template is configured in the `hits` widget:

```typescript
templates: {
item: (hit: any, { html, components }: any) => html`
<a href="${`#/docs/${hit.path}`}" class="hit-link">
<div class="hit-title">${components.Highlight({ hit, attribute: "title" })}</div>
<div class="hit-content">${components.Snippet({ hit, attribute: "content" })}</div>
</a>
`,
}
```

Customize this template to change how search results are displayed.

## Features

### Current Features

- βœ… InstantSearch integration with Algolia
- βœ… Modal-based search interface
- βœ… Keyboard shortcuts (⌘K / Ctrl+K)
- βœ… Highlighted search terms
- βœ… Content snippets in results
- βœ… Responsive design
- βœ… Theme-aware styling (dark/light mode)

### Planned Enhancements

- πŸ”„ Autocomplete suggestions
- πŸ”„ Search filters (by category, type)
- πŸ”„ Recent searches
- πŸ”„ Keyboard navigation in results

## Troubleshooting

### Search Not Working

1. **Check credentials**: Ensure `ALGOLIA_APP_ID`, `ALGOLIA_SEARCH_API_KEY`, and `ALGOLIA_INDEX_NAME` are correct
2. **Verify index**: Make sure your Algolia index contains records
3. **Check browser console**: Look for error messages
4. **API Key permissions**: Ensure the Search-Only API Key has the correct permissions

### No Results Found

1. **Index is empty**: Index your documentation content
2. **Attribute configuration**: Ensure `searchableAttributes` in Algolia includes `title` and `content`
3. **Path format**: Verify the `path` field in your records matches the expected format

### Styling Issues

1. **Theme variables**: Ensure CSS variables are defined in `/src/styles/style.scss`
2. **Import order**: Check that search styles are imported after base styles
3. **Specificity**: Some styles may need `!important` to override defaults

## Resources

- [Algolia InstantSearch Documentation](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- [Algolia Dashboard](https://www.algolia.com/dashboard)
- [DocSearch Program](https://docsearch.algolia.com/)
- [Algolia API Reference](https://www.algolia.com/doc/api-reference/)

## Support

For issues or questions:

1. Check the [Algolia community forum](https://discourse.algolia.com/)
2. Review [InstantSearch issues on GitHub](https://github.com/algolia/instantsearch/issues)
3. Open an issue in the TypeComposer docs repository
160 changes: 160 additions & 0 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
# TypeComposer Documentation

Official documentation for [TypeComposer](https://github.com/typecomposer/typecomposer) - a framework for building web and native user interfaces.

## Features

- πŸ“š Comprehensive documentation for TypeComposer framework
- πŸ” **Fast search powered by Algolia InstantSearch**
- 🎨 Dark/Light theme support
- πŸ“± Responsive design
- πŸ’» Interactive playground
- 🎯 Component examples and API reference

## Getting Started

### Prerequisites

- Node.js 18+
- npm or yarn

### Installation

```bash
# Clone the repository
git clone https://github.com/TypeComposer/docs.git
cd docs

# Install dependencies
npm install

# Start development server
npm run dev
```

### Build

```bash
# Build for production
npm run build

# Preview production build
npm run preview
```

## Search Setup

This documentation includes Algolia InstantSearch for fast and relevant search functionality. See [ALGOLIA_SETUP.md](./ALGOLIA_SETUP.md) for detailed setup instructions.

### Quick Setup

1. Copy `.env.example` to `.env`:
```bash
cp .env.example .env
```

2. Update `.env` with your Algolia credentials:
```env
ALGOLIA_APP_ID=your_app_id
ALGOLIA_SEARCH_API_KEY=your_search_api_key
ALGOLIA_INDEX_NAME=typecomposer_docs
```

3. Update credentials in `/src/components/search/AlgoliaSearch.ts`

4. Index your documentation:
```bash
node scripts/index-algolia.js
```

### Using Search

- Click the search icon in the navigation bar
- Or use keyboard shortcut: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- Press `ESC` to close the search modal

## Project Structure

```
docs/
β”œβ”€β”€ content/ # MDX documentation files
β”‚ β”œβ”€β”€ components/ # Component documentation
β”‚ β”œβ”€β”€ elements/ # Element documentation
β”‚ └── layout/ # Layout documentation
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ components/ # UI components
β”‚ β”‚ β”œβ”€β”€ navbar/ # Navigation bar
β”‚ β”‚ β”œβ”€β”€ sidebar/ # Sidebar navigation
β”‚ β”‚ └── search/ # Algolia search components
β”‚ β”œβ”€β”€ pages/ # Page components
β”‚ β”œβ”€β”€ styles/ # Global styles
β”‚ └── utils/ # Utility functions
β”œβ”€β”€ scripts/ # Build and utility scripts
β”‚ └── index-algolia.js # Algolia indexing script
└── public/ # Static assets
```

## Technology Stack

- **Framework**: [TypeComposer](https://github.com/typecomposer/typecomposer)
- **Build Tool**: [Vite](https://vitejs.dev/)
- **Styling**: [Tailwind CSS](https://tailwindcss.com/) + SCSS
- **Search**: [Algolia InstantSearch](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- **Content**: MDX (Markdown + JSX)
- **Syntax Highlighting**: [Highlight.js](https://highlightjs.org/)

## Development

### Adding Documentation

1. Create a new `.mdx` file in the appropriate `content/` subdirectory
2. Add the route in `src/router/router.ts`
3. Update sidebar navigation in `src/assets/data.json`
4. Re-index for search: `node scripts/index-algolia.js`

### Customizing Theme

Theme colors are defined in `src/styles/style.scss`:
- Light theme: `[data-theme="light"]`
- Dark theme: `[data-theme="dark"]`

### Search Customization

Search UI can be customized in:
- `/src/components/search/AlgoliaSearch.ts` - Search logic and widgets
- `/src/components/search/SearchModal.ts` - Modal behavior
- `/src/components/search/search.scss` - Search styles

## Scripts

- `npm run dev` - Start development server
- `npm run build` - Build for production
- `npm run preview` - Preview production build
- `npm run clean` - Clean build cache and restart

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Links

- [TypeComposer Framework](https://github.com/typecomposer/typecomposer)
- [Documentation Website](https://www.typecomposer.io)
- [NPM Package](https://www.npmjs.com/package/typecomposer)
- [Algolia Setup Guide](./ALGOLIA_SETUP.md)

## Support

- πŸ“§ Email: support@typecomposer.io
- πŸ’¬ Discord: [Join our community](https://discord.gg/typecomposer)
- πŸ› Issues: [GitHub Issues](https://github.com/TypeComposer/docs/issues)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
# Algolia Configuration
# Get these values from your Algolia dashboard: https://www.algolia.com/dashboard

# Your Algolia Application ID
ALGOLIA_APP_ID=YOUR_APP_ID

# Admin API Key (for indexing script only - DO NOT expose this in client code)
ALGOLIA_ADMIN_API_KEY=YOUR_ADMIN_API_KEY

# Search-Only API Key (safe to use in client code)
ALGOLIA_SEARCH_API_KEY=YOUR_SEARCH_API_KEY

# Your Algolia index name
ALGOLIA_INDEX_NAME=typecomposer_docs
175 changes: 175 additions & 0 deletions ALGOLIA_SETUP.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
# Algolia InstantSearch Integration

This documentation provides instructions for setting up and configuring Algolia InstantSearch for the TypeComposer documentation.

## Overview

The TypeComposer docs now include Algolia InstantSearch for fast and relevant search functionality. The search is accessible through:

- **Search button** in the navigation bar
- **Keyboard shortcut**: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- **ESC key** to close the search modal

## Configuration

### 1. Algolia Account Setup

1. Create an account at [Algolia](https://www.algolia.com/)
2. Create a new application or use an existing one
3. Create a new index for your documentation (e.g., `typecomposer_docs`)

### 2. Update Algolia Credentials

Update the following constants in `/src/components/search/AlgoliaSearch.ts`:

```typescript
const ALGOLIA_APP_ID = "YOUR_APP_ID"; // Replace with your Algolia Application ID
const ALGOLIA_SEARCH_API_KEY = "YOUR_SEARCH_API_KEY"; // Replace with your Search-Only API Key
const ALGOLIA_INDEX_NAME = "typecomposer_docs"; // Replace with your index name
```

**Important**: Use the **Search-Only API Key** (not the Admin API Key) for client-side searches.

### 3. Index Your Documentation

To make your documentation searchable, you need to index it in Algolia. There are several ways to do this:

#### Option A: Using Algolia Crawler (Recommended)

1. Go to your Algolia dashboard
2. Navigate to **Data sources** > **Crawler**
3. Create a new crawler with your website URL
4. Configure the crawler to extract:
- `title` - Page title
- `content` - Page content/text
- `path` - Document path for navigation
- `hierarchy` - Document structure (h1, h2, h3, etc.)

#### Option B: Using Algolia DocSearch (For Open Source)

If your project is open source and publicly available, you can apply for [Algolia DocSearch](https://docsearch.algolia.com/) which provides free search for documentation.

#### Option C: Manual Indexing

You can create a script to manually index your MDX content:

```javascript
import algoliasearch from 'algoliasearch';
import fs from 'fs';
import path from 'path';

const client = algoliasearch('YOUR_APP_ID', 'YOUR_ADMIN_API_KEY');
const index = client.initIndex('typecomposer_docs');

// Read and parse your MDX files
const contentDir = './content';
const records = [];

// Process each MDX file
fs.readdirSync(contentDir, { recursive: true }).forEach(file => {
if (file.endsWith('.mdx')) {
const content = fs.readFileSync(path.join(contentDir, file), 'utf-8');

records.push({
objectID: file,
title: extractTitle(content),
content: extractContent(content),
path: file.replace('.mdx', '').replace('/content', '/docs'),
});
}
});

// Upload to Algolia
index.saveObjects(records);
```

## Search Configuration

### Customizing Search Behavior

The search is configured in `/src/components/search/AlgoliaSearch.ts`. You can customize:

- **Number of results**: Change `hitsPerPage` in the `configure` widget
- **Search attributes**: Modify the `searchableAttributes` in your Algolia index settings
- **Faceting**: Add filters for categories, tags, etc.

### Customizing Search UI

The search styles are defined in `/src/components/search/search.scss`. You can customize:

- Modal appearance and positioning
- Search input styling
- Results display format
- Colors to match your theme

### Search Result Template

The search results template is configured in the `hits` widget:

```typescript
templates: {
item: (hit: any, { html, components }: any) => html`
<a href="${`#/docs/${hit.path}`}" class="hit-link">
<div class="hit-title">${components.Highlight({ hit, attribute: "title" })}</div>
<div class="hit-content">${components.Snippet({ hit, attribute: "content" })}</div>
</a>
`,
}
```

Customize this template to change how search results are displayed.

## Features

### Current Features

- βœ… InstantSearch integration with Algolia
- βœ… Modal-based search interface
- βœ… Keyboard shortcuts (⌘K / Ctrl+K)
- βœ… Highlighted search terms
- βœ… Content snippets in results
- βœ… Responsive design
- βœ… Theme-aware styling (dark/light mode)

### Planned Enhancements

- πŸ”„ Autocomplete suggestions
- πŸ”„ Search filters (by category, type)
- πŸ”„ Recent searches
- πŸ”„ Keyboard navigation in results

## Troubleshooting

### Search Not Working

1. **Check credentials**: Ensure `ALGOLIA_APP_ID`, `ALGOLIA_SEARCH_API_KEY`, and `ALGOLIA_INDEX_NAME` are correct
2. **Verify index**: Make sure your Algolia index contains records
3. **Check browser console**: Look for error messages
4. **API Key permissions**: Ensure the Search-Only API Key has the correct permissions

### No Results Found

1. **Index is empty**: Index your documentation content
2. **Attribute configuration**: Ensure `searchableAttributes` in Algolia includes `title` and `content`
3. **Path format**: Verify the `path` field in your records matches the expected format

### Styling Issues

1. **Theme variables**: Ensure CSS variables are defined in `/src/styles/style.scss`
2. **Import order**: Check that search styles are imported after base styles
3. **Specificity**: Some styles may need `!important` to override defaults

## Resources

- [Algolia InstantSearch Documentation](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- [Algolia Dashboard](https://www.algolia.com/dashboard)
- [DocSearch Program](https://docsearch.algolia.com/)
- [Algolia API Reference](https://www.algolia.com/doc/api-reference/)

## Support

For issues or questions:

1. Check the [Algolia community forum](https://discourse.algolia.com/)
2. Review [InstantSearch issues on GitHub](https://github.com/algolia/instantsearch/issues)
3. Open an issue in the TypeComposer docs repository
160 changes: 160 additions & 0 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
# TypeComposer Documentation

Official documentation for [TypeComposer](https://github.com/typecomposer/typecomposer) - a framework for building web and native user interfaces.

## Features

- πŸ“š Comprehensive documentation for TypeComposer framework
- πŸ” **Fast search powered by Algolia InstantSearch**
- 🎨 Dark/Light theme support
- πŸ“± Responsive design
- πŸ’» Interactive playground
- 🎯 Component examples and API reference

## Getting Started

### Prerequisites

- Node.js 18+
- npm or yarn

### Installation

```bash
# Clone the repository
git clone https://github.com/TypeComposer/docs.git
cd docs

# Install dependencies
npm install

# Start development server
npm run dev
```

### Build

```bash
# Build for production
npm run build

# Preview production build
npm run preview
```

## Search Setup

This documentation includes Algolia InstantSearch for fast and relevant search functionality. See [ALGOLIA_SETUP.md](./ALGOLIA_SETUP.md) for detailed setup instructions.

### Quick Setup

1. Copy `.env.example` to `.env`:
```bash
cp .env.example .env
```

2. Update `.env` with your Algolia credentials:
```env
ALGOLIA_APP_ID=your_app_id
ALGOLIA_SEARCH_API_KEY=your_search_api_key
ALGOLIA_INDEX_NAME=typecomposer_docs
```

3. Update credentials in `/src/components/search/AlgoliaSearch.ts`

4. Index your documentation:
```bash
node scripts/index-algolia.js
```

### Using Search

- Click the search icon in the navigation bar
- Or use keyboard shortcut: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- Press `ESC` to close the search modal

## Project Structure

```
docs/
β”œβ”€β”€ content/ # MDX documentation files
β”‚ β”œβ”€β”€ components/ # Component documentation
β”‚ β”œβ”€β”€ elements/ # Element documentation
β”‚ └── layout/ # Layout documentation
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ components/ # UI components
β”‚ β”‚ β”œβ”€β”€ navbar/ # Navigation bar
β”‚ β”‚ β”œβ”€β”€ sidebar/ # Sidebar navigation
β”‚ β”‚ └── search/ # Algolia search components
β”‚ β”œβ”€β”€ pages/ # Page components
β”‚ β”œβ”€β”€ styles/ # Global styles
β”‚ └── utils/ # Utility functions
β”œβ”€β”€ scripts/ # Build and utility scripts
β”‚ └── index-algolia.js # Algolia indexing script
└── public/ # Static assets
```

## Technology Stack

- **Framework**: [TypeComposer](https://github.com/typecomposer/typecomposer)
- **Build Tool**: [Vite](https://vitejs.dev/)
- **Styling**: [Tailwind CSS](https://tailwindcss.com/) + SCSS
- **Search**: [Algolia InstantSearch](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- **Content**: MDX (Markdown + JSX)
- **Syntax Highlighting**: [Highlight.js](https://highlightjs.org/)

## Development

### Adding Documentation

1. Create a new `.mdx` file in the appropriate `content/` subdirectory
2. Add the route in `src/router/router.ts`
3. Update sidebar navigation in `src/assets/data.json`
4. Re-index for search: `node scripts/index-algolia.js`

### Customizing Theme

Theme colors are defined in `src/styles/style.scss`:
- Light theme: `[data-theme="light"]`
- Dark theme: `[data-theme="dark"]`

### Search Customization

Search UI can be customized in:
- `/src/components/search/AlgoliaSearch.ts` - Search logic and widgets
- `/src/components/search/SearchModal.ts` - Modal behavior
- `/src/components/search/search.scss` - Search styles

## Scripts

- `npm run dev` - Start development server
- `npm run build` - Build for production
- `npm run preview` - Preview production build
- `npm run clean` - Clean build cache and restart

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Links

- [TypeComposer Framework](https://github.com/typecomposer/typecomposer)
- [Documentation Website](https://www.typecomposer.io)
- [NPM Package](https://www.npmjs.com/package/typecomposer)
- [Algolia Setup Guide](./ALGOLIA_SETUP.md)

## Support

- πŸ“§ Email: support@typecomposer.io
- πŸ’¬ Discord: [Join our community](https://discord.gg/typecomposer)
- πŸ› Issues: [GitHub Issues](https://github.com/TypeComposer/docs/issues)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
# Algolia Configuration
# Get these values from your Algolia dashboard: https://www.algolia.com/dashboard

# Your Algolia Application ID
ALGOLIA_APP_ID=YOUR_APP_ID

# Admin API Key (for indexing script only - DO NOT expose this in client code)
ALGOLIA_ADMIN_API_KEY=YOUR_ADMIN_API_KEY

# Search-Only API Key (safe to use in client code)
ALGOLIA_SEARCH_API_KEY=YOUR_SEARCH_API_KEY

# Your Algolia index name
ALGOLIA_INDEX_NAME=typecomposer_docs
175 changes: 175 additions & 0 deletions ALGOLIA_SETUP.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
# Algolia InstantSearch Integration

This documentation provides instructions for setting up and configuring Algolia InstantSearch for the TypeComposer documentation.

## Overview

The TypeComposer docs now include Algolia InstantSearch for fast and relevant search functionality. The search is accessible through:

- **Search button** in the navigation bar
- **Keyboard shortcut**: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- **ESC key** to close the search modal

## Configuration

### 1. Algolia Account Setup

1. Create an account at [Algolia](https://www.algolia.com/)
2. Create a new application or use an existing one
3. Create a new index for your documentation (e.g., `typecomposer_docs`)

### 2. Update Algolia Credentials

Update the following constants in `/src/components/search/AlgoliaSearch.ts`:

```typescript
const ALGOLIA_APP_ID = "YOUR_APP_ID"; // Replace with your Algolia Application ID
const ALGOLIA_SEARCH_API_KEY = "YOUR_SEARCH_API_KEY"; // Replace with your Search-Only API Key
const ALGOLIA_INDEX_NAME = "typecomposer_docs"; // Replace with your index name
```

**Important**: Use the **Search-Only API Key** (not the Admin API Key) for client-side searches.

### 3. Index Your Documentation

To make your documentation searchable, you need to index it in Algolia. There are several ways to do this:

#### Option A: Using Algolia Crawler (Recommended)

1. Go to your Algolia dashboard
2. Navigate to **Data sources** > **Crawler**
3. Create a new crawler with your website URL
4. Configure the crawler to extract:
- `title` - Page title
- `content` - Page content/text
- `path` - Document path for navigation
- `hierarchy` - Document structure (h1, h2, h3, etc.)

#### Option B: Using Algolia DocSearch (For Open Source)

If your project is open source and publicly available, you can apply for [Algolia DocSearch](https://docsearch.algolia.com/) which provides free search for documentation.

#### Option C: Manual Indexing

You can create a script to manually index your MDX content:

```javascript
import algoliasearch from 'algoliasearch';
import fs from 'fs';
import path from 'path';

const client = algoliasearch('YOUR_APP_ID', 'YOUR_ADMIN_API_KEY');
const index = client.initIndex('typecomposer_docs');

// Read and parse your MDX files
const contentDir = './content';
const records = [];

// Process each MDX file
fs.readdirSync(contentDir, { recursive: true }).forEach(file => {
if (file.endsWith('.mdx')) {
const content = fs.readFileSync(path.join(contentDir, file), 'utf-8');

records.push({
objectID: file,
title: extractTitle(content),
content: extractContent(content),
path: file.replace('.mdx', '').replace('/content', '/docs'),
});
}
});

// Upload to Algolia
index.saveObjects(records);
```

## Search Configuration

### Customizing Search Behavior

The search is configured in `/src/components/search/AlgoliaSearch.ts`. You can customize:

- **Number of results**: Change `hitsPerPage` in the `configure` widget
- **Search attributes**: Modify the `searchableAttributes` in your Algolia index settings
- **Faceting**: Add filters for categories, tags, etc.

### Customizing Search UI

The search styles are defined in `/src/components/search/search.scss`. You can customize:

- Modal appearance and positioning
- Search input styling
- Results display format
- Colors to match your theme

### Search Result Template

The search results template is configured in the `hits` widget:

```typescript
templates: {
item: (hit: any, { html, components }: any) => html`
<a href="${`#/docs/${hit.path}`}" class="hit-link">
<div class="hit-title">${components.Highlight({ hit, attribute: "title" })}</div>
<div class="hit-content">${components.Snippet({ hit, attribute: "content" })}</div>
</a>
`,
}
```

Customize this template to change how search results are displayed.

## Features

### Current Features

- βœ… InstantSearch integration with Algolia
- βœ… Modal-based search interface
- βœ… Keyboard shortcuts (⌘K / Ctrl+K)
- βœ… Highlighted search terms
- βœ… Content snippets in results
- βœ… Responsive design
- βœ… Theme-aware styling (dark/light mode)

### Planned Enhancements

- πŸ”„ Autocomplete suggestions
- πŸ”„ Search filters (by category, type)
- πŸ”„ Recent searches
- πŸ”„ Keyboard navigation in results

## Troubleshooting

### Search Not Working

1. **Check credentials**: Ensure `ALGOLIA_APP_ID`, `ALGOLIA_SEARCH_API_KEY`, and `ALGOLIA_INDEX_NAME` are correct
2. **Verify index**: Make sure your Algolia index contains records
3. **Check browser console**: Look for error messages
4. **API Key permissions**: Ensure the Search-Only API Key has the correct permissions

### No Results Found

1. **Index is empty**: Index your documentation content
2. **Attribute configuration**: Ensure `searchableAttributes` in Algolia includes `title` and `content`
3. **Path format**: Verify the `path` field in your records matches the expected format

### Styling Issues

1. **Theme variables**: Ensure CSS variables are defined in `/src/styles/style.scss`
2. **Import order**: Check that search styles are imported after base styles
3. **Specificity**: Some styles may need `!important` to override defaults

## Resources

- [Algolia InstantSearch Documentation](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- [Algolia Dashboard](https://www.algolia.com/dashboard)
- [DocSearch Program](https://docsearch.algolia.com/)
- [Algolia API Reference](https://www.algolia.com/doc/api-reference/)

## Support

For issues or questions:

1. Check the [Algolia community forum](https://discourse.algolia.com/)
2. Review [InstantSearch issues on GitHub](https://github.com/algolia/instantsearch/issues)
3. Open an issue in the TypeComposer docs repository
160 changes: 160 additions & 0 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
# TypeComposer Documentation

Official documentation for [TypeComposer](https://github.com/typecomposer/typecomposer) - a framework for building web and native user interfaces.

## Features

- πŸ“š Comprehensive documentation for TypeComposer framework
- πŸ” **Fast search powered by Algolia InstantSearch**
- 🎨 Dark/Light theme support
- πŸ“± Responsive design
- πŸ’» Interactive playground
- 🎯 Component examples and API reference

## Getting Started

### Prerequisites

- Node.js 18+
- npm or yarn

### Installation

```bash
# Clone the repository
git clone https://github.com/TypeComposer/docs.git
cd docs

# Install dependencies
npm install

# Start development server
npm run dev
```

### Build

```bash
# Build for production
npm run build

# Preview production build
npm run preview
```

## Search Setup

This documentation includes Algolia InstantSearch for fast and relevant search functionality. See [ALGOLIA_SETUP.md](./ALGOLIA_SETUP.md) for detailed setup instructions.

### Quick Setup

1. Copy `.env.example` to `.env`:
```bash
cp .env.example .env
```

2. Update `.env` with your Algolia credentials:
```env
ALGOLIA_APP_ID=your_app_id
ALGOLIA_SEARCH_API_KEY=your_search_api_key
ALGOLIA_INDEX_NAME=typecomposer_docs
```

3. Update credentials in `/src/components/search/AlgoliaSearch.ts`

4. Index your documentation:
```bash
node scripts/index-algolia.js
```

### Using Search

- Click the search icon in the navigation bar
- Or use keyboard shortcut: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- Press `ESC` to close the search modal

## Project Structure

```
docs/
β”œβ”€β”€ content/ # MDX documentation files
β”‚ β”œβ”€β”€ components/ # Component documentation
β”‚ β”œβ”€β”€ elements/ # Element documentation
β”‚ └── layout/ # Layout documentation
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ components/ # UI components
β”‚ β”‚ β”œβ”€β”€ navbar/ # Navigation bar
β”‚ β”‚ β”œβ”€β”€ sidebar/ # Sidebar navigation
β”‚ β”‚ └── search/ # Algolia search components
β”‚ β”œβ”€β”€ pages/ # Page components
β”‚ β”œβ”€β”€ styles/ # Global styles
β”‚ └── utils/ # Utility functions
β”œβ”€β”€ scripts/ # Build and utility scripts
β”‚ └── index-algolia.js # Algolia indexing script
└── public/ # Static assets
```

## Technology Stack

- **Framework**: [TypeComposer](https://github.com/typecomposer/typecomposer)
- **Build Tool**: [Vite](https://vitejs.dev/)
- **Styling**: [Tailwind CSS](https://tailwindcss.com/) + SCSS
- **Search**: [Algolia InstantSearch](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- **Content**: MDX (Markdown + JSX)
- **Syntax Highlighting**: [Highlight.js](https://highlightjs.org/)

## Development

### Adding Documentation

1. Create a new `.mdx` file in the appropriate `content/` subdirectory
2. Add the route in `src/router/router.ts`
3. Update sidebar navigation in `src/assets/data.json`
4. Re-index for search: `node scripts/index-algolia.js`

### Customizing Theme

Theme colors are defined in `src/styles/style.scss`:
- Light theme: `[data-theme="light"]`
- Dark theme: `[data-theme="dark"]`

### Search Customization

Search UI can be customized in:
- `/src/components/search/AlgoliaSearch.ts` - Search logic and widgets
- `/src/components/search/SearchModal.ts` - Modal behavior
- `/src/components/search/search.scss` - Search styles

## Scripts

- `npm run dev` - Start development server
- `npm run build` - Build for production
- `npm run preview` - Preview production build
- `npm run clean` - Clean build cache and restart

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Links

- [TypeComposer Framework](https://github.com/typecomposer/typecomposer)
- [Documentation Website](https://www.typecomposer.io)
- [NPM Package](https://www.npmjs.com/package/typecomposer)
- [Algolia Setup Guide](./ALGOLIA_SETUP.md)

## Support

- πŸ“§ Email: support@typecomposer.io
- πŸ’¬ Discord: [Join our community](https://discord.gg/typecomposer)
- πŸ› Issues: [GitHub Issues](https://github.com/TypeComposer/docs/issues)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
# Algolia Configuration
# Get these values from your Algolia dashboard: https://www.algolia.com/dashboard

# Your Algolia Application ID
ALGOLIA_APP_ID=YOUR_APP_ID

# Admin API Key (for indexing script only - DO NOT expose this in client code)
ALGOLIA_ADMIN_API_KEY=YOUR_ADMIN_API_KEY

# Search-Only API Key (safe to use in client code)
ALGOLIA_SEARCH_API_KEY=YOUR_SEARCH_API_KEY

# Your Algolia index name
ALGOLIA_INDEX_NAME=typecomposer_docs
175 changes: 175 additions & 0 deletions ALGOLIA_SETUP.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
# Algolia InstantSearch Integration

This documentation provides instructions for setting up and configuring Algolia InstantSearch for the TypeComposer documentation.

## Overview

The TypeComposer docs now include Algolia InstantSearch for fast and relevant search functionality. The search is accessible through:

- **Search button** in the navigation bar
- **Keyboard shortcut**: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- **ESC key** to close the search modal

## Configuration

### 1. Algolia Account Setup

1. Create an account at [Algolia](https://www.algolia.com/)
2. Create a new application or use an existing one
3. Create a new index for your documentation (e.g., `typecomposer_docs`)

### 2. Update Algolia Credentials

Update the following constants in `/src/components/search/AlgoliaSearch.ts`:

```typescript
const ALGOLIA_APP_ID = "YOUR_APP_ID"; // Replace with your Algolia Application ID
const ALGOLIA_SEARCH_API_KEY = "YOUR_SEARCH_API_KEY"; // Replace with your Search-Only API Key
const ALGOLIA_INDEX_NAME = "typecomposer_docs"; // Replace with your index name
```

**Important**: Use the **Search-Only API Key** (not the Admin API Key) for client-side searches.

### 3. Index Your Documentation

To make your documentation searchable, you need to index it in Algolia. There are several ways to do this:

#### Option A: Using Algolia Crawler (Recommended)

1. Go to your Algolia dashboard
2. Navigate to **Data sources** > **Crawler**
3. Create a new crawler with your website URL
4. Configure the crawler to extract:
- `title` - Page title
- `content` - Page content/text
- `path` - Document path for navigation
- `hierarchy` - Document structure (h1, h2, h3, etc.)

#### Option B: Using Algolia DocSearch (For Open Source)

If your project is open source and publicly available, you can apply for [Algolia DocSearch](https://docsearch.algolia.com/) which provides free search for documentation.

#### Option C: Manual Indexing

You can create a script to manually index your MDX content:

```javascript
import algoliasearch from 'algoliasearch';
import fs from 'fs';
import path from 'path';

const client = algoliasearch('YOUR_APP_ID', 'YOUR_ADMIN_API_KEY');
const index = client.initIndex('typecomposer_docs');

// Read and parse your MDX files
const contentDir = './content';
const records = [];

// Process each MDX file
fs.readdirSync(contentDir, { recursive: true }).forEach(file => {
if (file.endsWith('.mdx')) {
const content = fs.readFileSync(path.join(contentDir, file), 'utf-8');

records.push({
objectID: file,
title: extractTitle(content),
content: extractContent(content),
path: file.replace('.mdx', '').replace('/content', '/docs'),
});
}
});

// Upload to Algolia
index.saveObjects(records);
```

## Search Configuration

### Customizing Search Behavior

The search is configured in `/src/components/search/AlgoliaSearch.ts`. You can customize:

- **Number of results**: Change `hitsPerPage` in the `configure` widget
- **Search attributes**: Modify the `searchableAttributes` in your Algolia index settings
- **Faceting**: Add filters for categories, tags, etc.

### Customizing Search UI

The search styles are defined in `/src/components/search/search.scss`. You can customize:

- Modal appearance and positioning
- Search input styling
- Results display format
- Colors to match your theme

### Search Result Template

The search results template is configured in the `hits` widget:

```typescript
templates: {
item: (hit: any, { html, components }: any) => html`
<a href="${`#/docs/${hit.path}`}" class="hit-link">
<div class="hit-title">${components.Highlight({ hit, attribute: "title" })}</div>
<div class="hit-content">${components.Snippet({ hit, attribute: "content" })}</div>
</a>
`,
}
```

Customize this template to change how search results are displayed.

## Features

### Current Features

- βœ… InstantSearch integration with Algolia
- βœ… Modal-based search interface
- βœ… Keyboard shortcuts (⌘K / Ctrl+K)
- βœ… Highlighted search terms
- βœ… Content snippets in results
- βœ… Responsive design
- βœ… Theme-aware styling (dark/light mode)

### Planned Enhancements

- πŸ”„ Autocomplete suggestions
- πŸ”„ Search filters (by category, type)
- πŸ”„ Recent searches
- πŸ”„ Keyboard navigation in results

## Troubleshooting

### Search Not Working

1. **Check credentials**: Ensure `ALGOLIA_APP_ID`, `ALGOLIA_SEARCH_API_KEY`, and `ALGOLIA_INDEX_NAME` are correct
2. **Verify index**: Make sure your Algolia index contains records
3. **Check browser console**: Look for error messages
4. **API Key permissions**: Ensure the Search-Only API Key has the correct permissions

### No Results Found

1. **Index is empty**: Index your documentation content
2. **Attribute configuration**: Ensure `searchableAttributes` in Algolia includes `title` and `content`
3. **Path format**: Verify the `path` field in your records matches the expected format

### Styling Issues

1. **Theme variables**: Ensure CSS variables are defined in `/src/styles/style.scss`
2. **Import order**: Check that search styles are imported after base styles
3. **Specificity**: Some styles may need `!important` to override defaults

## Resources

- [Algolia InstantSearch Documentation](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- [Algolia Dashboard](https://www.algolia.com/dashboard)
- [DocSearch Program](https://docsearch.algolia.com/)
- [Algolia API Reference](https://www.algolia.com/doc/api-reference/)

## Support

For issues or questions:

1. Check the [Algolia community forum](https://discourse.algolia.com/)
2. Review [InstantSearch issues on GitHub](https://github.com/algolia/instantsearch/issues)
3. Open an issue in the TypeComposer docs repository
160 changes: 160 additions & 0 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
# TypeComposer Documentation

Official documentation for [TypeComposer](https://github.com/typecomposer/typecomposer) - a framework for building web and native user interfaces.

## Features

- πŸ“š Comprehensive documentation for TypeComposer framework
- πŸ” **Fast search powered by Algolia InstantSearch**
- 🎨 Dark/Light theme support
- πŸ“± Responsive design
- πŸ’» Interactive playground
- 🎯 Component examples and API reference

## Getting Started

### Prerequisites

- Node.js 18+
- npm or yarn

### Installation

```bash
# Clone the repository
git clone https://github.com/TypeComposer/docs.git
cd docs

# Install dependencies
npm install

# Start development server
npm run dev
```

### Build

```bash
# Build for production
npm run build

# Preview production build
npm run preview
```

## Search Setup

This documentation includes Algolia InstantSearch for fast and relevant search functionality. See [ALGOLIA_SETUP.md](./ALGOLIA_SETUP.md) for detailed setup instructions.

### Quick Setup

1. Copy `.env.example` to `.env`:
```bash
cp .env.example .env
```

2. Update `.env` with your Algolia credentials:
```env
ALGOLIA_APP_ID=your_app_id
ALGOLIA_SEARCH_API_KEY=your_search_api_key
ALGOLIA_INDEX_NAME=typecomposer_docs
```

3. Update credentials in `/src/components/search/AlgoliaSearch.ts`

4. Index your documentation:
```bash
node scripts/index-algolia.js
```

### Using Search

- Click the search icon in the navigation bar
- Or use keyboard shortcut: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- Press `ESC` to close the search modal

## Project Structure

```
docs/
β”œβ”€β”€ content/ # MDX documentation files
β”‚ β”œβ”€β”€ components/ # Component documentation
β”‚ β”œβ”€β”€ elements/ # Element documentation
β”‚ └── layout/ # Layout documentation
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ components/ # UI components
β”‚ β”‚ β”œβ”€β”€ navbar/ # Navigation bar
β”‚ β”‚ β”œβ”€β”€ sidebar/ # Sidebar navigation
β”‚ β”‚ └── search/ # Algolia search components
β”‚ β”œβ”€β”€ pages/ # Page components
β”‚ β”œβ”€β”€ styles/ # Global styles
β”‚ └── utils/ # Utility functions
β”œβ”€β”€ scripts/ # Build and utility scripts
β”‚ └── index-algolia.js # Algolia indexing script
└── public/ # Static assets
```

## Technology Stack

- **Framework**: [TypeComposer](https://github.com/typecomposer/typecomposer)
- **Build Tool**: [Vite](https://vitejs.dev/)
- **Styling**: [Tailwind CSS](https://tailwindcss.com/) + SCSS
- **Search**: [Algolia InstantSearch](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- **Content**: MDX (Markdown + JSX)
- **Syntax Highlighting**: [Highlight.js](https://highlightjs.org/)

## Development

### Adding Documentation

1. Create a new `.mdx` file in the appropriate `content/` subdirectory
2. Add the route in `src/router/router.ts`
3. Update sidebar navigation in `src/assets/data.json`
4. Re-index for search: `node scripts/index-algolia.js`

### Customizing Theme

Theme colors are defined in `src/styles/style.scss`:
- Light theme: `[data-theme="light"]`
- Dark theme: `[data-theme="dark"]`

### Search Customization

Search UI can be customized in:
- `/src/components/search/AlgoliaSearch.ts` - Search logic and widgets
- `/src/components/search/SearchModal.ts` - Modal behavior
- `/src/components/search/search.scss` - Search styles

## Scripts

- `npm run dev` - Start development server
- `npm run build` - Build for production
- `npm run preview` - Preview production build
- `npm run clean` - Clean build cache and restart

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Links

- [TypeComposer Framework](https://github.com/typecomposer/typecomposer)
- [Documentation Website](https://www.typecomposer.io)
- [NPM Package](https://www.npmjs.com/package/typecomposer)
- [Algolia Setup Guide](./ALGOLIA_SETUP.md)

## Support

- πŸ“§ Email: support@typecomposer.io
- πŸ’¬ Discord: [Join our community](https://discord.gg/typecomposer)
- πŸ› Issues: [GitHub Issues](https://github.com/TypeComposer/docs/issues)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
# Algolia Configuration
# Get these values from your Algolia dashboard: https://www.algolia.com/dashboard

# Your Algolia Application ID
ALGOLIA_APP_ID=YOUR_APP_ID

# Admin API Key (for indexing script only - DO NOT expose this in client code)
ALGOLIA_ADMIN_API_KEY=YOUR_ADMIN_API_KEY

# Search-Only API Key (safe to use in client code)
ALGOLIA_SEARCH_API_KEY=YOUR_SEARCH_API_KEY

# Your Algolia index name
ALGOLIA_INDEX_NAME=typecomposer_docs
175 changes: 175 additions & 0 deletions ALGOLIA_SETUP.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
# Algolia InstantSearch Integration

This documentation provides instructions for setting up and configuring Algolia InstantSearch for the TypeComposer documentation.

## Overview

The TypeComposer docs now include Algolia InstantSearch for fast and relevant search functionality. The search is accessible through:

- **Search button** in the navigation bar
- **Keyboard shortcut**: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- **ESC key** to close the search modal

## Configuration

### 1. Algolia Account Setup

1. Create an account at [Algolia](https://www.algolia.com/)
2. Create a new application or use an existing one
3. Create a new index for your documentation (e.g., `typecomposer_docs`)

### 2. Update Algolia Credentials

Update the following constants in `/src/components/search/AlgoliaSearch.ts`:

```typescript
const ALGOLIA_APP_ID = "YOUR_APP_ID"; // Replace with your Algolia Application ID
const ALGOLIA_SEARCH_API_KEY = "YOUR_SEARCH_API_KEY"; // Replace with your Search-Only API Key
const ALGOLIA_INDEX_NAME = "typecomposer_docs"; // Replace with your index name
```

**Important**: Use the **Search-Only API Key** (not the Admin API Key) for client-side searches.

### 3. Index Your Documentation

To make your documentation searchable, you need to index it in Algolia. There are several ways to do this:

#### Option A: Using Algolia Crawler (Recommended)

1. Go to your Algolia dashboard
2. Navigate to **Data sources** > **Crawler**
3. Create a new crawler with your website URL
4. Configure the crawler to extract:
- `title` - Page title
- `content` - Page content/text
- `path` - Document path for navigation
- `hierarchy` - Document structure (h1, h2, h3, etc.)

#### Option B: Using Algolia DocSearch (For Open Source)

If your project is open source and publicly available, you can apply for [Algolia DocSearch](https://docsearch.algolia.com/) which provides free search for documentation.

#### Option C: Manual Indexing

You can create a script to manually index your MDX content:

```javascript
import algoliasearch from 'algoliasearch';
import fs from 'fs';
import path from 'path';

const client = algoliasearch('YOUR_APP_ID', 'YOUR_ADMIN_API_KEY');
const index = client.initIndex('typecomposer_docs');

// Read and parse your MDX files
const contentDir = './content';
const records = [];

// Process each MDX file
fs.readdirSync(contentDir, { recursive: true }).forEach(file => {
if (file.endsWith('.mdx')) {
const content = fs.readFileSync(path.join(contentDir, file), 'utf-8');

records.push({
objectID: file,
title: extractTitle(content),
content: extractContent(content),
path: file.replace('.mdx', '').replace('/content', '/docs'),
});
}
});

// Upload to Algolia
index.saveObjects(records);
```

## Search Configuration

### Customizing Search Behavior

The search is configured in `/src/components/search/AlgoliaSearch.ts`. You can customize:

- **Number of results**: Change `hitsPerPage` in the `configure` widget
- **Search attributes**: Modify the `searchableAttributes` in your Algolia index settings
- **Faceting**: Add filters for categories, tags, etc.

### Customizing Search UI

The search styles are defined in `/src/components/search/search.scss`. You can customize:

- Modal appearance and positioning
- Search input styling
- Results display format
- Colors to match your theme

### Search Result Template

The search results template is configured in the `hits` widget:

```typescript
templates: {
item: (hit: any, { html, components }: any) => html`
<a href="${`#/docs/${hit.path}`}" class="hit-link">
<div class="hit-title">${components.Highlight({ hit, attribute: "title" })}</div>
<div class="hit-content">${components.Snippet({ hit, attribute: "content" })}</div>
</a>
`,
}
```

Customize this template to change how search results are displayed.

## Features

### Current Features

- βœ… InstantSearch integration with Algolia
- βœ… Modal-based search interface
- βœ… Keyboard shortcuts (⌘K / Ctrl+K)
- βœ… Highlighted search terms
- βœ… Content snippets in results
- βœ… Responsive design
- βœ… Theme-aware styling (dark/light mode)

### Planned Enhancements

- πŸ”„ Autocomplete suggestions
- πŸ”„ Search filters (by category, type)
- πŸ”„ Recent searches
- πŸ”„ Keyboard navigation in results

## Troubleshooting

### Search Not Working

1. **Check credentials**: Ensure `ALGOLIA_APP_ID`, `ALGOLIA_SEARCH_API_KEY`, and `ALGOLIA_INDEX_NAME` are correct
2. **Verify index**: Make sure your Algolia index contains records
3. **Check browser console**: Look for error messages
4. **API Key permissions**: Ensure the Search-Only API Key has the correct permissions

### No Results Found

1. **Index is empty**: Index your documentation content
2. **Attribute configuration**: Ensure `searchableAttributes` in Algolia includes `title` and `content`
3. **Path format**: Verify the `path` field in your records matches the expected format

### Styling Issues

1. **Theme variables**: Ensure CSS variables are defined in `/src/styles/style.scss`
2. **Import order**: Check that search styles are imported after base styles
3. **Specificity**: Some styles may need `!important` to override defaults

## Resources

- [Algolia InstantSearch Documentation](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- [Algolia Dashboard](https://www.algolia.com/dashboard)
- [DocSearch Program](https://docsearch.algolia.com/)
- [Algolia API Reference](https://www.algolia.com/doc/api-reference/)

## Support

For issues or questions:

1. Check the [Algolia community forum](https://discourse.algolia.com/)
2. Review [InstantSearch issues on GitHub](https://github.com/algolia/instantsearch/issues)
3. Open an issue in the TypeComposer docs repository
160 changes: 160 additions & 0 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
# TypeComposer Documentation

Official documentation for [TypeComposer](https://github.com/typecomposer/typecomposer) - a framework for building web and native user interfaces.

## Features

- πŸ“š Comprehensive documentation for TypeComposer framework
- πŸ” **Fast search powered by Algolia InstantSearch**
- 🎨 Dark/Light theme support
- πŸ“± Responsive design
- πŸ’» Interactive playground
- 🎯 Component examples and API reference

## Getting Started

### Prerequisites

- Node.js 18+
- npm or yarn

### Installation

```bash
# Clone the repository
git clone https://github.com/TypeComposer/docs.git
cd docs

# Install dependencies
npm install

# Start development server
npm run dev
```

### Build

```bash
# Build for production
npm run build

# Preview production build
npm run preview
```

## Search Setup

This documentation includes Algolia InstantSearch for fast and relevant search functionality. See [ALGOLIA_SETUP.md](./ALGOLIA_SETUP.md) for detailed setup instructions.

### Quick Setup

1. Copy `.env.example` to `.env`:
```bash
cp .env.example .env
```

2. Update `.env` with your Algolia credentials:
```env
ALGOLIA_APP_ID=your_app_id
ALGOLIA_SEARCH_API_KEY=your_search_api_key
ALGOLIA_INDEX_NAME=typecomposer_docs
```

3. Update credentials in `/src/components/search/AlgoliaSearch.ts`

4. Index your documentation:
```bash
node scripts/index-algolia.js
```

### Using Search

- Click the search icon in the navigation bar
- Or use keyboard shortcut: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- Press `ESC` to close the search modal

## Project Structure

```
docs/
β”œβ”€β”€ content/ # MDX documentation files
β”‚ β”œβ”€β”€ components/ # Component documentation
β”‚ β”œβ”€β”€ elements/ # Element documentation
β”‚ └── layout/ # Layout documentation
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ components/ # UI components
β”‚ β”‚ β”œβ”€β”€ navbar/ # Navigation bar
β”‚ β”‚ β”œβ”€β”€ sidebar/ # Sidebar navigation
β”‚ β”‚ └── search/ # Algolia search components
β”‚ β”œβ”€β”€ pages/ # Page components
β”‚ β”œβ”€β”€ styles/ # Global styles
β”‚ └── utils/ # Utility functions
β”œβ”€β”€ scripts/ # Build and utility scripts
β”‚ └── index-algolia.js # Algolia indexing script
└── public/ # Static assets
```

## Technology Stack

- **Framework**: [TypeComposer](https://github.com/typecomposer/typecomposer)
- **Build Tool**: [Vite](https://vitejs.dev/)
- **Styling**: [Tailwind CSS](https://tailwindcss.com/) + SCSS
- **Search**: [Algolia InstantSearch](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- **Content**: MDX (Markdown + JSX)
- **Syntax Highlighting**: [Highlight.js](https://highlightjs.org/)

## Development

### Adding Documentation

1. Create a new `.mdx` file in the appropriate `content/` subdirectory
2. Add the route in `src/router/router.ts`
3. Update sidebar navigation in `src/assets/data.json`
4. Re-index for search: `node scripts/index-algolia.js`

### Customizing Theme

Theme colors are defined in `src/styles/style.scss`:
- Light theme: `[data-theme="light"]`
- Dark theme: `[data-theme="dark"]`

### Search Customization

Search UI can be customized in:
- `/src/components/search/AlgoliaSearch.ts` - Search logic and widgets
- `/src/components/search/SearchModal.ts` - Modal behavior
- `/src/components/search/search.scss` - Search styles

## Scripts

- `npm run dev` - Start development server
- `npm run build` - Build for production
- `npm run preview` - Preview production build
- `npm run clean` - Clean build cache and restart

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Links

- [TypeComposer Framework](https://github.com/typecomposer/typecomposer)
- [Documentation Website](https://www.typecomposer.io)
- [NPM Package](https://www.npmjs.com/package/typecomposer)
- [Algolia Setup Guide](./ALGOLIA_SETUP.md)

## Support

- πŸ“§ Email: support@typecomposer.io
- πŸ’¬ Discord: [Join our community](https://discord.gg/typecomposer)
- πŸ› Issues: [GitHub Issues](https://github.com/TypeComposer/docs/issues)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
# Algolia Configuration
# Get these values from your Algolia dashboard: https://www.algolia.com/dashboard

# Your Algolia Application ID
ALGOLIA_APP_ID=YOUR_APP_ID

# Admin API Key (for indexing script only - DO NOT expose this in client code)
ALGOLIA_ADMIN_API_KEY=YOUR_ADMIN_API_KEY

# Search-Only API Key (safe to use in client code)
ALGOLIA_SEARCH_API_KEY=YOUR_SEARCH_API_KEY

# Your Algolia index name
ALGOLIA_INDEX_NAME=typecomposer_docs
175 changes: 175 additions & 0 deletions ALGOLIA_SETUP.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
# Algolia InstantSearch Integration

This documentation provides instructions for setting up and configuring Algolia InstantSearch for the TypeComposer documentation.

## Overview

The TypeComposer docs now include Algolia InstantSearch for fast and relevant search functionality. The search is accessible through:

- **Search button** in the navigation bar
- **Keyboard shortcut**: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- **ESC key** to close the search modal

## Configuration

### 1. Algolia Account Setup

1. Create an account at [Algolia](https://www.algolia.com/)
2. Create a new application or use an existing one
3. Create a new index for your documentation (e.g., `typecomposer_docs`)

### 2. Update Algolia Credentials

Update the following constants in `/src/components/search/AlgoliaSearch.ts`:

```typescript
const ALGOLIA_APP_ID = "YOUR_APP_ID"; // Replace with your Algolia Application ID
const ALGOLIA_SEARCH_API_KEY = "YOUR_SEARCH_API_KEY"; // Replace with your Search-Only API Key
const ALGOLIA_INDEX_NAME = "typecomposer_docs"; // Replace with your index name
```

**Important**: Use the **Search-Only API Key** (not the Admin API Key) for client-side searches.

### 3. Index Your Documentation

To make your documentation searchable, you need to index it in Algolia. There are several ways to do this:

#### Option A: Using Algolia Crawler (Recommended)

1. Go to your Algolia dashboard
2. Navigate to **Data sources** > **Crawler**
3. Create a new crawler with your website URL
4. Configure the crawler to extract:
- `title` - Page title
- `content` - Page content/text
- `path` - Document path for navigation
- `hierarchy` - Document structure (h1, h2, h3, etc.)

#### Option B: Using Algolia DocSearch (For Open Source)

If your project is open source and publicly available, you can apply for [Algolia DocSearch](https://docsearch.algolia.com/) which provides free search for documentation.

#### Option C: Manual Indexing

You can create a script to manually index your MDX content:

```javascript
import algoliasearch from 'algoliasearch';
import fs from 'fs';
import path from 'path';

const client = algoliasearch('YOUR_APP_ID', 'YOUR_ADMIN_API_KEY');
const index = client.initIndex('typecomposer_docs');

// Read and parse your MDX files
const contentDir = './content';
const records = [];

// Process each MDX file
fs.readdirSync(contentDir, { recursive: true }).forEach(file => {
if (file.endsWith('.mdx')) {
const content = fs.readFileSync(path.join(contentDir, file), 'utf-8');

records.push({
objectID: file,
title: extractTitle(content),
content: extractContent(content),
path: file.replace('.mdx', '').replace('/content', '/docs'),
});
}
});

// Upload to Algolia
index.saveObjects(records);
```

## Search Configuration

### Customizing Search Behavior

The search is configured in `/src/components/search/AlgoliaSearch.ts`. You can customize:

- **Number of results**: Change `hitsPerPage` in the `configure` widget
- **Search attributes**: Modify the `searchableAttributes` in your Algolia index settings
- **Faceting**: Add filters for categories, tags, etc.

### Customizing Search UI

The search styles are defined in `/src/components/search/search.scss`. You can customize:

- Modal appearance and positioning
- Search input styling
- Results display format
- Colors to match your theme

### Search Result Template

The search results template is configured in the `hits` widget:

```typescript
templates: {
item: (hit: any, { html, components }: any) => html`
<a href="${`#/docs/${hit.path}`}" class="hit-link">
<div class="hit-title">${components.Highlight({ hit, attribute: "title" })}</div>
<div class="hit-content">${components.Snippet({ hit, attribute: "content" })}</div>
</a>
`,
}
```

Customize this template to change how search results are displayed.

## Features

### Current Features

- βœ… InstantSearch integration with Algolia
- βœ… Modal-based search interface
- βœ… Keyboard shortcuts (⌘K / Ctrl+K)
- βœ… Highlighted search terms
- βœ… Content snippets in results
- βœ… Responsive design
- βœ… Theme-aware styling (dark/light mode)

### Planned Enhancements

- πŸ”„ Autocomplete suggestions
- πŸ”„ Search filters (by category, type)
- πŸ”„ Recent searches
- πŸ”„ Keyboard navigation in results

## Troubleshooting

### Search Not Working

1. **Check credentials**: Ensure `ALGOLIA_APP_ID`, `ALGOLIA_SEARCH_API_KEY`, and `ALGOLIA_INDEX_NAME` are correct
2. **Verify index**: Make sure your Algolia index contains records
3. **Check browser console**: Look for error messages
4. **API Key permissions**: Ensure the Search-Only API Key has the correct permissions

### No Results Found

1. **Index is empty**: Index your documentation content
2. **Attribute configuration**: Ensure `searchableAttributes` in Algolia includes `title` and `content`
3. **Path format**: Verify the `path` field in your records matches the expected format

### Styling Issues

1. **Theme variables**: Ensure CSS variables are defined in `/src/styles/style.scss`
2. **Import order**: Check that search styles are imported after base styles
3. **Specificity**: Some styles may need `!important` to override defaults

## Resources

- [Algolia InstantSearch Documentation](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- [Algolia Dashboard](https://www.algolia.com/dashboard)
- [DocSearch Program](https://docsearch.algolia.com/)
- [Algolia API Reference](https://www.algolia.com/doc/api-reference/)

## Support

For issues or questions:

1. Check the [Algolia community forum](https://discourse.algolia.com/)
2. Review [InstantSearch issues on GitHub](https://github.com/algolia/instantsearch/issues)
3. Open an issue in the TypeComposer docs repository
160 changes: 160 additions & 0 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
# TypeComposer Documentation

Official documentation for [TypeComposer](https://github.com/typecomposer/typecomposer) - a framework for building web and native user interfaces.

## Features

- πŸ“š Comprehensive documentation for TypeComposer framework
- πŸ” **Fast search powered by Algolia InstantSearch**
- 🎨 Dark/Light theme support
- πŸ“± Responsive design
- πŸ’» Interactive playground
- 🎯 Component examples and API reference

## Getting Started

### Prerequisites

- Node.js 18+
- npm or yarn

### Installation

```bash
# Clone the repository
git clone https://github.com/TypeComposer/docs.git
cd docs

# Install dependencies
npm install

# Start development server
npm run dev
```

### Build

```bash
# Build for production
npm run build

# Preview production build
npm run preview
```

## Search Setup

This documentation includes Algolia InstantSearch for fast and relevant search functionality. See [ALGOLIA_SETUP.md](./ALGOLIA_SETUP.md) for detailed setup instructions.

### Quick Setup

1. Copy `.env.example` to `.env`:
```bash
cp .env.example .env
```

2. Update `.env` with your Algolia credentials:
```env
ALGOLIA_APP_ID=your_app_id
ALGOLIA_SEARCH_API_KEY=your_search_api_key
ALGOLIA_INDEX_NAME=typecomposer_docs
```

3. Update credentials in `/src/components/search/AlgoliaSearch.ts`

4. Index your documentation:
```bash
node scripts/index-algolia.js
```

### Using Search

- Click the search icon in the navigation bar
- Or use keyboard shortcut: `⌘K` (Mac) or `Ctrl+K` (Windows/Linux)
- Press `ESC` to close the search modal

## Project Structure

```
docs/
β”œβ”€β”€ content/ # MDX documentation files
β”‚ β”œβ”€β”€ components/ # Component documentation
β”‚ β”œβ”€β”€ elements/ # Element documentation
β”‚ └── layout/ # Layout documentation
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ components/ # UI components
β”‚ β”‚ β”œβ”€β”€ navbar/ # Navigation bar
β”‚ β”‚ β”œβ”€β”€ sidebar/ # Sidebar navigation
β”‚ β”‚ └── search/ # Algolia search components
β”‚ β”œβ”€β”€ pages/ # Page components
β”‚ β”œβ”€β”€ styles/ # Global styles
β”‚ └── utils/ # Utility functions
β”œβ”€β”€ scripts/ # Build and utility scripts
β”‚ └── index-algolia.js # Algolia indexing script
└── public/ # Static assets
```

## Technology Stack

- **Framework**: [TypeComposer](https://github.com/typecomposer/typecomposer)
- **Build Tool**: [Vite](https://vitejs.dev/)
- **Styling**: [Tailwind CSS](https://tailwindcss.com/) + SCSS
- **Search**: [Algolia InstantSearch](https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/)
- **Content**: MDX (Markdown + JSX)
- **Syntax Highlighting**: [Highlight.js](https://highlightjs.org/)

## Development

### Adding Documentation

1. Create a new `.mdx` file in the appropriate `content/` subdirectory
2. Add the route in `src/router/router.ts`
3. Update sidebar navigation in `src/assets/data.json`
4. Re-index for search: `node scripts/index-algolia.js`

### Customizing Theme

Theme colors are defined in `src/styles/style.scss`:
- Light theme: `[data-theme="light"]`
- Dark theme: `[data-theme="dark"]`

### Search Customization

Search UI can be customized in:
- `/src/components/search/AlgoliaSearch.ts` - Search logic and widgets
- `/src/components/search/SearchModal.ts` - Modal behavior
- `/src/components/search/search.scss` - Search styles

## Scripts

- `npm run dev` - Start development server
- `npm run build` - Build for production
- `npm run preview` - Preview production build
- `npm run clean` - Clean build cache and restart

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Links

- [TypeComposer Framework](https://github.com/typecomposer/typecomposer)
- [Documentation Website](https://www.typecomposer.io)
- [NPM Package](https://www.npmjs.com/package/typecomposer)
- [Algolia Setup Guide](./ALGOLIA_SETUP.md)

## Support

- πŸ“§ Email: support@typecomposer.io
- πŸ’¬ Discord: [Join our community](https://discord.gg/typecomposer)
- πŸ› Issues: [GitHub Issues](https://github.com/TypeComposer/docs/issues)
Loading