@idealyst/mcp-server 1.2.25 → 1.2.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/data/components/Accordion.ts","../src/data/components/ActivityIndicator.ts","../src/data/components/Alert.ts","../src/data/components/Avatar.ts","../src/data/components/Badge.ts","../src/data/components/Breadcrumb.ts","../src/data/components/Button.ts","../src/data/components/Card.ts","../src/data/components/Checkbox.ts","../src/data/components/Chip.ts","../src/data/components/Dialog.ts","../src/data/components/Divider.ts","../src/data/components/Icon.ts","../src/data/components/Image.ts","../src/data/components/Input.ts","../src/data/components/Link.ts","../src/data/components/List.ts","../src/data/components/Menu.ts","../src/data/components/Popover.ts","../src/data/components/Pressable.ts","../src/data/components/Progress.ts","../src/data/components/RadioButton.ts","../src/data/components/Screen.ts","../src/data/components/Select.ts","../src/data/components/Skeleton.ts","../src/data/components/Slider.ts","../src/data/components/SVGImage.ts","../src/data/components/Switch.ts","../src/data/components/TabBar.ts","../src/data/components/Table.ts","../src/data/components/Tabs.ts","../src/data/components/Text.ts","../src/data/components/TextArea.ts","../src/data/components/Tooltip.ts","../src/data/components/Video.ts","../src/data/components/View.ts","../src/data/components/index.ts","../src/data/cli-commands.ts","../src/data/framework-guides.ts","../src/data/navigation-guides.ts","../src/data/translate-guides.ts","../src/data/storage-guides.ts","../src/data/icon-guide.ts","../src/data/packages.ts","../src/data/recipes.ts","../src/data/icons.json","../src/tools/get-types.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n ListToolsRequestSchema,\n CallToolRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { components } from \"./data/components/index.js\";\nimport { cliCommands } from \"./data/cli-commands.js\";\nimport { frameworkGuides } from \"./data/framework-guides.js\";\nimport { navigationGuides } from \"./data/navigation-guides.js\";\nimport { translateGuides } from \"./data/translate-guides.js\";\nimport { storageGuides } from \"./data/storage-guides.js\";\nimport { iconGuide } from \"./data/icon-guide.js\";\nimport {\n packages,\n getPackageSummary,\n getPackagesByCategory,\n searchPackages,\n} from \"./data/packages.js\";\nimport {\n recipes,\n getRecipeSummary,\n getRecipesByCategory,\n searchRecipes,\n} from \"./data/recipes.js\";\nimport iconsData from \"./data/icons.json\" with { type: \"json\" };\nimport {\n getComponentTypes,\n getThemeTypes,\n getNavigationTypes,\n getAvailableComponents,\n getComponentExamples,\n} from \"./tools/get-types.js\";\n\nconst server = new Server(\n {\n name: \"@idealyst/mcp-server\",\n version: \"1.0.94\",\n },\n {\n capabilities: {\n tools: {},\n resources: {},\n },\n }\n);\n\n// List all available tools\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: \"list_components\",\n description: \"List all available Idealyst components with brief descriptions\",\n inputSchema: {\n type: \"object\",\n properties: {},\n },\n },\n {\n name: \"get_component_docs\",\n description: \"Get detailed documentation for a specific Idealyst component including props, usage, and examples\",\n inputSchema: {\n type: \"object\",\n properties: {\n component: {\n type: \"string\",\n description: \"The name of the component (e.g., 'Button', 'Card', 'Input')\",\n },\n },\n required: [\"component\"],\n },\n },\n {\n name: \"get_component_example\",\n description: \"Get a code example for a specific Idealyst component\",\n inputSchema: {\n type: \"object\",\n properties: {\n component: {\n type: \"string\",\n description: \"The name of the component\",\n },\n example_type: {\n type: \"string\",\n description: \"Type of example: 'basic', 'variants', 'with-icons', 'interactive'\",\n enum: [\"basic\", \"variants\", \"with-icons\", \"interactive\"],\n },\n },\n required: [\"component\"],\n },\n },\n {\n name: \"get_cli_usage\",\n description: \"Get information about Idealyst CLI commands and usage\",\n inputSchema: {\n type: \"object\",\n properties: {\n command: {\n type: \"string\",\n description: \"Specific CLI command to get info about (optional)\",\n },\n },\n },\n },\n {\n name: \"search_components\",\n description: \"Search for components by name, category, or feature\",\n inputSchema: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"Search query\",\n },\n category: {\n type: \"string\",\n description: \"Filter by category: 'layout', 'form', 'display', 'navigation', 'overlay', 'data'\",\n enum: [\"layout\", \"form\", \"display\", \"navigation\", \"overlay\", \"data\"],\n },\n },\n },\n },\n {\n name: \"search_icons\",\n description: \"Search for Material Design Icons by name or keyword. Returns matching icon names from 7,447 available icons.\",\n inputSchema: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"Search term to find icons (e.g., 'home', 'user', 'arrow')\",\n },\n limit: {\n type: \"number\",\n description: \"Maximum number of results to return (default: 20)\",\n },\n },\n required: [\"query\"],\n },\n },\n {\n name: \"get_component_types\",\n description: \"Get TypeScript type definitions for a specific component directly from the source. Returns the actual TypeScript interface and/or JSON schema.\",\n inputSchema: {\n type: \"object\",\n properties: {\n component: {\n type: \"string\",\n description: \"The name of the component (e.g., 'Button', 'Card', 'Input')\",\n },\n format: {\n type: \"string\",\n description: \"Output format: 'typescript' for raw TypeScript definitions, 'json' for parsed schema, 'both' for combined output (default: 'both')\",\n enum: [\"typescript\", \"json\", \"both\"],\n },\n },\n required: [\"component\"],\n },\n },\n {\n name: \"get_theme_types\",\n description: \"Get TypeScript type definitions for theme types (Size, Intent, Color, etc.) directly from @idealyst/theme\",\n inputSchema: {\n type: \"object\",\n properties: {\n format: {\n type: \"string\",\n description: \"Output format: 'typescript', 'json', or 'both' (default: 'both')\",\n enum: [\"typescript\", \"json\", \"both\"],\n },\n },\n },\n },\n {\n name: \"get_navigation_types\",\n description: \"Get TypeScript type definitions for navigation types directly from @idealyst/navigation\",\n inputSchema: {\n type: \"object\",\n properties: {\n format: {\n type: \"string\",\n description: \"Output format: 'typescript', 'json', or 'both' (default: 'both')\",\n enum: [\"typescript\", \"json\", \"both\"],\n },\n },\n },\n },\n {\n name: \"get_component_examples_ts\",\n description: \"Get validated TypeScript example code for a component. These examples are type-checked and guaranteed to compile.\",\n inputSchema: {\n type: \"object\",\n properties: {\n component: {\n type: \"string\",\n description: \"The name of the component (e.g., 'Button', 'Card')\",\n },\n },\n required: [\"component\"],\n },\n },\n {\n name: \"get_translate_guide\",\n description: \"Get documentation for @idealyst/translate internationalization package. Covers runtime API, Babel plugin, translation files, and examples.\",\n inputSchema: {\n type: \"object\",\n properties: {\n topic: {\n type: \"string\",\n description: \"Topic to get docs for: 'overview', 'runtime-api', 'babel-plugin', 'translation-files', 'examples'\",\n enum: [\"overview\", \"runtime-api\", \"babel-plugin\", \"translation-files\", \"examples\"],\n },\n },\n required: [\"topic\"],\n },\n },\n {\n name: \"get_storage_guide\",\n description: \"Get documentation for @idealyst/storage cross-platform storage package. Covers API reference and usage examples.\",\n inputSchema: {\n type: \"object\",\n properties: {\n topic: {\n type: \"string\",\n description: \"Topic to get docs for: 'overview', 'api', 'examples'\",\n enum: [\"overview\", \"api\", \"examples\"],\n },\n },\n required: [\"topic\"],\n },\n },\n {\n name: \"list_packages\",\n description: \"List all available Idealyst packages with descriptions, categories, and documentation status. Use this to discover what packages are available in the framework.\",\n inputSchema: {\n type: \"object\",\n properties: {\n category: {\n type: \"string\",\n description: \"Filter by category (optional)\",\n enum: [\"core\", \"ui\", \"media\", \"data\", \"auth\", \"utility\", \"tooling\"],\n },\n },\n },\n },\n {\n name: \"get_package_docs\",\n description: \"Get detailed documentation for a specific Idealyst package including installation, features, quick start, and API highlights.\",\n inputSchema: {\n type: \"object\",\n properties: {\n package: {\n type: \"string\",\n description: \"Package name (e.g., 'camera', 'oauth-client', 'datagrid')\",\n },\n section: {\n type: \"string\",\n description: \"Specific section to retrieve (optional, returns all if not specified)\",\n enum: [\"overview\", \"installation\", \"features\", \"quickstart\", \"api\"],\n },\n },\n required: [\"package\"],\n },\n },\n {\n name: \"search_packages\",\n description: \"Search across all Idealyst packages by name, description, or features.\",\n inputSchema: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"Search query\",\n },\n },\n required: [\"query\"],\n },\n },\n {\n name: \"list_recipes\",\n description: \"List all available Idealyst recipes (common UI patterns) with descriptions. Recipes provide ready-to-use code examples for building apps.\",\n inputSchema: {\n type: \"object\",\n properties: {\n category: {\n type: \"string\",\n description: \"Filter by category (optional)\",\n enum: [\"forms\", \"navigation\", \"data\", \"layout\", \"auth\", \"settings\", \"media\"],\n },\n difficulty: {\n type: \"string\",\n description: \"Filter by difficulty (optional)\",\n enum: [\"beginner\", \"intermediate\", \"advanced\"],\n },\n },\n },\n },\n {\n name: \"get_recipe\",\n description: \"Get a complete code recipe for a common UI pattern. Returns ready-to-use code with explanation and tips.\",\n inputSchema: {\n type: \"object\",\n properties: {\n recipe: {\n type: \"string\",\n description: \"Recipe ID (e.g., 'login-form', 'settings-screen', 'tab-navigation')\",\n },\n },\n required: [\"recipe\"],\n },\n },\n {\n name: \"search_recipes\",\n description: \"Search for recipes by name, description, category, or required packages.\",\n inputSchema: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"Search query (e.g., 'auth', 'form', 'navigation')\",\n },\n },\n required: [\"query\"],\n },\n },\n ],\n };\n});\n\n// Handle tool calls\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n switch (name) {\n case \"list_components\": {\n const componentList = Object.entries(components).map(([name, data]) => ({\n name,\n category: data.category,\n description: data.description,\n }));\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(componentList, null, 2),\n },\n ],\n };\n }\n\n case \"get_component_docs\": {\n const componentName = args?.component as string;\n const component = components[componentName];\n\n if (!component) {\n return {\n content: [\n {\n type: \"text\",\n text: `Component \"${componentName}\" not found. Available components: ${Object.keys(components).join(\", \")}`,\n },\n ],\n };\n }\n\n const docs = `# ${componentName}\n\n${component.description}\n\n## Category\n${component.category}\n\n## Props\n${component.props}\n\n## Usage Examples\n${component.usage}\n\n## Features\n${component.features.map((f: string) => `- ${f}`).join(\"\\n\")}\n\n## Best Practices\n${component.bestPractices.map((bp: string) => `- ${bp}`).join(\"\\n\")}\n`;\n\n return {\n content: [\n {\n type: \"text\",\n text: docs,\n },\n ],\n };\n }\n\n case \"get_component_example\": {\n const componentName = args?.component as string;\n const exampleType = (args?.example_type as string) || \"basic\";\n const component = components[componentName];\n\n if (!component) {\n return {\n content: [\n {\n type: \"text\",\n text: `Component \"${componentName}\" not found.`,\n },\n ],\n };\n }\n\n const example = component.examples[exampleType] || component.examples.basic;\n\n return {\n content: [\n {\n type: \"text\",\n text: example,\n },\n ],\n };\n }\n\n case \"get_cli_usage\": {\n const commandName = args?.command as string;\n\n if (commandName) {\n const command = cliCommands[commandName];\n if (!command) {\n return {\n content: [\n {\n type: \"text\",\n text: `Command \"${commandName}\" not found. Available commands: ${Object.keys(cliCommands).join(\", \")}`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: `# ${commandName}\n\n${command.description}\n\n## Usage\n\\`\\`\\`bash\n${command.usage}\n\\`\\`\\`\n\n## Options\n${command.options.map((opt: any) => `- \\`${opt.flag}\\`: ${opt.description}`).join(\"\\n\")}\n\n## Examples\n${command.examples.map((ex: string) => `\\`\\`\\`bash\\n${ex}\\n\\`\\`\\``).join(\"\\n\\n\")}\n`,\n },\n ],\n };\n }\n\n // Return all commands\n const allCommands = Object.entries(cliCommands).map(([name, data]) => ({\n name,\n description: data.description,\n usage: data.usage,\n }));\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(allCommands, null, 2),\n },\n ],\n };\n }\n\n case \"search_components\": {\n const query = (args?.query as string)?.toLowerCase() || \"\";\n const category = args?.category as string;\n\n let results = Object.entries(components);\n\n if (category) {\n results = results.filter(([_, data]) => data.category === category);\n }\n\n if (query) {\n results = results.filter(([name, data]) =>\n name.toLowerCase().includes(query) ||\n data.description.toLowerCase().includes(query) ||\n data.features.some((f: string) => f.toLowerCase().includes(query))\n );\n }\n\n const resultList = results.map(([name, data]) => ({\n name,\n category: data.category,\n description: data.description,\n }));\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(resultList, null, 2),\n },\n ],\n };\n }\n\n case \"search_icons\": {\n const query = (args?.query as string)?.toLowerCase() || \"\";\n const limit = (args?.limit as number) || 20;\n\n if (!query) {\n return {\n content: [\n {\n type: \"text\",\n text: \"Please provide a search query.\",\n },\n ],\n };\n }\n\n // Filter icons that match the query\n const matchingIcons = iconsData.icons.filter((icon: string) =>\n icon.toLowerCase().includes(query)\n );\n\n // Limit results\n const limitedResults = matchingIcons.slice(0, limit);\n\n const result = {\n query,\n total: iconsData.total,\n matches: matchingIcons.length,\n returned: limitedResults.length,\n icons: limitedResults,\n };\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n\n case \"get_component_types\": {\n const componentName = args?.component as string;\n const format = (args?.format as 'typescript' | 'json' | 'both') || 'both';\n\n try {\n const result = getComponentTypes(componentName, format);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: \"text\",\n text: `Error: ${error instanceof Error ? error.message : 'Unknown error'}`,\n },\n ],\n };\n }\n }\n\n case \"get_theme_types\": {\n const format = (args?.format as 'typescript' | 'json' | 'both') || 'both';\n\n try {\n const result = getThemeTypes(format);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: \"text\",\n text: `Error: ${error instanceof Error ? error.message : 'Unknown error'}`,\n },\n ],\n };\n }\n }\n\n case \"get_navigation_types\": {\n const format = (args?.format as 'typescript' | 'json' | 'both') || 'both';\n\n try {\n const result = getNavigationTypes(format);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: \"text\",\n text: `Error: ${error instanceof Error ? error.message : 'Unknown error'}`,\n },\n ],\n };\n }\n }\n\n case \"get_component_examples_ts\": {\n const componentName = args?.component as string;\n\n try {\n const examples = getComponentExamples(componentName);\n if (!examples) {\n return {\n content: [\n {\n type: \"text\",\n text: `No TypeScript examples found for component \"${componentName}\". Available components with examples: ${getAvailableComponents().join(', ')}`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: examples,\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: \"text\",\n text: `Error: ${error instanceof Error ? error.message : 'Unknown error'}`,\n },\n ],\n };\n }\n }\n\n case \"get_translate_guide\": {\n const topic = args?.topic as string;\n const uri = `idealyst://translate/${topic}`;\n const guide = translateGuides[uri];\n\n if (!guide) {\n return {\n content: [\n {\n type: \"text\",\n text: `Topic \"${topic}\" not found. Available topics: overview, runtime-api, babel-plugin, translation-files, examples`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: guide,\n },\n ],\n };\n }\n\n case \"get_storage_guide\": {\n const topic = args?.topic as string;\n const uri = `idealyst://storage/${topic}`;\n const guide = storageGuides[uri];\n\n if (!guide) {\n return {\n content: [\n {\n type: \"text\",\n text: `Topic \"${topic}\" not found. Available topics: overview, api, examples`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: guide,\n },\n ],\n };\n }\n\n case \"list_packages\": {\n const category = args?.category as string | undefined;\n\n if (category) {\n // Filter by specific category\n const byCategory = getPackagesByCategory();\n const packageList = (byCategory[category] || []).map((pkg) => ({\n name: pkg.name,\n npmName: pkg.npmName,\n description: pkg.description,\n platforms: pkg.platforms,\n documentationStatus: pkg.documentationStatus,\n }));\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(packageList, null, 2),\n },\n ],\n };\n }\n\n // Return all packages grouped by category\n const allPackages = getPackageSummary();\n const grouped = allPackages.reduce(\n (acc, pkg) => {\n const cat = pkg.category;\n if (!acc[cat]) acc[cat] = [];\n acc[cat].push(pkg);\n return acc;\n },\n {} as Record<string, typeof allPackages>\n );\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(grouped, null, 2),\n },\n ],\n };\n }\n\n case \"get_package_docs\": {\n const packageName = args?.package as string;\n const section = args?.section as string | undefined;\n\n // Handle both formats: \"camera\" and \"@idealyst/camera\"\n const normalizedName = packageName\n .replace(\"@idealyst/\", \"\")\n .toLowerCase();\n const pkg = packages[normalizedName];\n\n if (!pkg) {\n const availablePackages = Object.keys(packages).join(\", \");\n return {\n content: [\n {\n type: \"text\",\n text: `Package \"${packageName}\" not found. Available packages: ${availablePackages}`,\n },\n ],\n };\n }\n\n // Build documentation based on section or return all\n let docs = \"\";\n\n if (!section || section === \"overview\") {\n docs += `# ${pkg.name} (${pkg.npmName})\n\n${pkg.description}\n\n**Category:** ${pkg.category}\n**Platforms:** ${pkg.platforms.join(\", \")}\n**Documentation Status:** ${pkg.documentationStatus}\n\n`;\n }\n\n if (!section || section === \"installation\") {\n docs += `## Installation\n\n\\`\\`\\`bash\n${pkg.installation}\n\\`\\`\\`\n\n`;\n if (pkg.peerDependencies && pkg.peerDependencies.length > 0) {\n docs += `### Peer Dependencies\n${pkg.peerDependencies.map((dep) => `- ${dep}`).join(\"\\n\")}\n\n`;\n }\n }\n\n if (!section || section === \"features\") {\n docs += `## Features\n\n${pkg.features.map((f) => `- ${f}`).join(\"\\n\")}\n\n`;\n }\n\n if (!section || section === \"quickstart\") {\n docs += `## Quick Start\n\n\\`\\`\\`tsx\n${pkg.quickStart}\n\\`\\`\\`\n\n`;\n }\n\n if (!section || section === \"api\") {\n if (pkg.apiHighlights && pkg.apiHighlights.length > 0) {\n docs += `## API Highlights\n\n${pkg.apiHighlights.map((api) => `- \\`${api}\\``).join(\"\\n\")}\n\n`;\n }\n }\n\n if (pkg.relatedPackages && pkg.relatedPackages.length > 0) {\n docs += `## Related Packages\n\n${pkg.relatedPackages.map((rp) => `- @idealyst/${rp}`).join(\"\\n\")}\n`;\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: docs.trim(),\n },\n ],\n };\n }\n\n case \"search_packages\": {\n const query = args?.query as string;\n\n if (!query) {\n return {\n content: [\n {\n type: \"text\",\n text: \"Please provide a search query.\",\n },\n ],\n };\n }\n\n const results = searchPackages(query);\n\n if (results.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: `No packages found matching \"${query}\". Try searching for: camera, oauth, storage, translate, datagrid, datepicker, navigation, etc.`,\n },\n ],\n };\n }\n\n const resultList = results.map((pkg) => ({\n name: pkg.name,\n npmName: pkg.npmName,\n category: pkg.category,\n description: pkg.description,\n platforms: pkg.platforms,\n }));\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(resultList, null, 2),\n },\n ],\n };\n }\n\n case \"list_recipes\": {\n const category = args?.category as string | undefined;\n const difficulty = args?.difficulty as string | undefined;\n\n let recipeList = getRecipeSummary();\n\n // Filter by category\n if (category) {\n recipeList = recipeList.filter((r) => r.category === category);\n }\n\n // Filter by difficulty\n if (difficulty) {\n recipeList = recipeList.filter((r) => r.difficulty === difficulty);\n }\n\n // Group by category for readability\n if (!category) {\n const grouped = recipeList.reduce(\n (acc, recipe) => {\n if (!acc[recipe.category]) acc[recipe.category] = [];\n acc[recipe.category].push(recipe);\n return acc;\n },\n {} as Record<string, typeof recipeList>\n );\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(grouped, null, 2),\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(recipeList, null, 2),\n },\n ],\n };\n }\n\n case \"get_recipe\": {\n const recipeId = args?.recipe as string;\n\n // Normalize the recipe ID (handle both \"login-form\" and \"loginForm\" etc)\n const normalizedId = recipeId.toLowerCase().replace(/\\s+/g, \"-\");\n const recipe = recipes[normalizedId];\n\n if (!recipe) {\n const availableRecipes = Object.keys(recipes).join(\", \");\n return {\n content: [\n {\n type: \"text\",\n text: `Recipe \"${recipeId}\" not found.\\n\\nAvailable recipes: ${availableRecipes}`,\n },\n ],\n };\n }\n\n // Format the recipe as markdown\n const output = `# ${recipe.name}\n\n${recipe.description}\n\n**Category:** ${recipe.category}\n**Difficulty:** ${recipe.difficulty}\n**Required packages:** ${recipe.packages.join(\", \")}\n\n## Code\n\n\\`\\`\\`tsx\n${recipe.code}\n\\`\\`\\`\n\n## Explanation\n\n${recipe.explanation}\n\n${recipe.tips && recipe.tips.length > 0 ? `## Tips\n\n${recipe.tips.map((tip) => `- ${tip}`).join(\"\\n\")}` : \"\"}\n\n${recipe.relatedRecipes && recipe.relatedRecipes.length > 0 ? `## Related Recipes\n\n${recipe.relatedRecipes.map((r) => `- ${r}`).join(\"\\n\")}` : \"\"}\n`;\n\n return {\n content: [\n {\n type: \"text\",\n text: output.trim(),\n },\n ],\n };\n }\n\n case \"search_recipes\": {\n const query = args?.query as string;\n\n if (!query) {\n return {\n content: [\n {\n type: \"text\",\n text: \"Please provide a search query.\",\n },\n ],\n };\n }\n\n const results = searchRecipes(query);\n\n if (results.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: `No recipes found matching \"${query}\". Try searching for: login, form, navigation, settings, auth, list, modal, etc.`,\n },\n ],\n };\n }\n\n const resultList = results.map((recipe) => ({\n id: Object.entries(recipes).find(([_, r]) => r === recipe)?.[0],\n name: recipe.name,\n description: recipe.description,\n category: recipe.category,\n difficulty: recipe.difficulty,\n packages: recipe.packages,\n }));\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(resultList, null, 2),\n },\n ],\n };\n }\n\n default:\n return {\n content: [\n {\n type: \"text\",\n text: `Unknown tool: ${name}`,\n },\n ],\n };\n }\n});\n\n// List available resources\nserver.setRequestHandler(ListResourcesRequestSchema, async () => {\n return {\n resources: [\n {\n uri: \"idealyst://packages/overview\",\n name: \"Idealyst Packages Overview\",\n description: \"Overview of all available @idealyst packages organized by category\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://recipes/overview\",\n name: \"Idealyst Recipes Overview\",\n description: \"Overview of all available code recipes for common UI patterns\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://framework/getting-started\",\n name: \"Getting Started with Idealyst\",\n description: \"Complete guide to setting up and using the Idealyst framework\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://framework/components-overview\",\n name: \"Components Overview\",\n description: \"Overview of all available Idealyst components organized by category\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://framework/theming\",\n name: \"Theming Guide\",\n description: \"Guide to customizing themes in Idealyst\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://framework/cli\",\n name: \"CLI Reference\",\n description: \"Complete reference for the Idealyst CLI\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://navigation/overview\",\n name: \"Navigation System Overview\",\n description: \"Overview of the Idealyst navigation system for cross-platform routing\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://navigation/route-configuration\",\n name: \"Route Configuration\",\n description: \"Learn how to define and structure routes in Idealyst\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://navigation/navigator-types\",\n name: \"Navigator Types\",\n description: \"Guide to stack, tab, drawer, and modal navigators\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://navigation/custom-layouts\",\n name: \"Custom Layouts (Web)\",\n description: \"Creating custom layouts with headers and sidebars for web applications\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://navigation/use-navigator\",\n name: \"useNavigator Hook\",\n description: \"Complete reference for the useNavigator hook API\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://navigation/web-mobile-parity\",\n name: \"Web/Mobile Navigation Parity\",\n description: \"How to achieve native-like navigation UI on web using layout components\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://icons/reference\",\n name: \"Icon Reference Guide\",\n description: \"Complete guide to Material Design Icons with 7,447 available icons, common icons by category, and usage examples\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://translate/overview\",\n name: \"Translation Overview\",\n description: \"Overview of @idealyst/translate internationalization package\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://translate/runtime-api\",\n name: \"Translation Runtime API\",\n description: \"Complete reference for TranslateProvider, useTranslation, useLanguage, and Trans component\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://translate/babel-plugin\",\n name: \"Translation Babel Plugin\",\n description: \"Guide to the Babel plugin for static key extraction and missing translation detection\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://translate/translation-files\",\n name: \"Translation File Format\",\n description: \"Guide to organizing and formatting translation JSON files\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://translate/examples\",\n name: \"Translation Examples\",\n description: \"Complete code examples for common translation patterns\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://storage/overview\",\n name: \"Storage Overview\",\n description: \"Overview of @idealyst/storage cross-platform storage package\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://storage/api\",\n name: \"Storage API Reference\",\n description: \"Complete API reference for @idealyst/storage\",\n mimeType: \"text/markdown\",\n },\n {\n uri: \"idealyst://storage/examples\",\n name: \"Storage Examples\",\n description: \"Complete code examples for common storage patterns\",\n mimeType: \"text/markdown\",\n },\n ],\n };\n});\n\n// Handle resource reads\nserver.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const { uri } = request.params;\n\n // Check all guide sources\n let guide = frameworkGuides[uri] || navigationGuides[uri] || translateGuides[uri] || storageGuides[uri];\n\n // Handle icon reference\n if (uri === \"idealyst://icons/reference\") {\n guide = iconGuide;\n }\n\n // Handle recipes overview\n if (uri === \"idealyst://recipes/overview\") {\n const byCategory = getRecipesByCategory();\n const categoryLabels: Record<string, string> = {\n auth: \"Authentication\",\n forms: \"Forms & Validation\",\n navigation: \"Navigation\",\n data: \"Data & Lists\",\n layout: \"Layout & Modals\",\n settings: \"Settings & Preferences\",\n media: \"Media & Uploads\",\n };\n\n let content = `# Idealyst Recipes\n\nReady-to-use code examples for common UI patterns in Idealyst apps.\n\n`;\n\n for (const [category, recipeList] of Object.entries(byCategory)) {\n content += `## ${categoryLabels[category] || category}\\n\\n`;\n\n for (const recipe of recipeList) {\n const id = Object.entries(recipes).find(([_, r]) => r === recipe)?.[0];\n content += `### ${recipe.name}\n${recipe.description}\n\n- **Difficulty:** ${recipe.difficulty}\n- **Packages:** ${recipe.packages.join(\", \")}\n- **Get recipe:** \\`get_recipe({ recipe: \"${id}\" })\\`\n\n`;\n }\n }\n\n guide = content;\n }\n\n // Handle packages overview\n if (uri === \"idealyst://packages/overview\") {\n const byCategory = getPackagesByCategory();\n const categoryOrder = [\"core\", \"ui\", \"data\", \"media\", \"auth\", \"utility\", \"tooling\"];\n const categoryLabels: Record<string, string> = {\n core: \"Core Packages\",\n ui: \"UI Components\",\n data: \"Data & Storage\",\n media: \"Media & Hardware\",\n auth: \"Authentication\",\n utility: \"Utilities\",\n tooling: \"Developer Tooling\",\n };\n\n let content = `# Idealyst Framework Packages\n\nThe Idealyst Framework provides a comprehensive set of packages for building cross-platform React applications.\n\n`;\n\n for (const category of categoryOrder) {\n const pkgs = byCategory[category];\n if (!pkgs || pkgs.length === 0) continue;\n\n content += `## ${categoryLabels[category] || category}\\n\\n`;\n\n for (const pkg of pkgs) {\n const platforms = pkg.platforms.join(\", \");\n content += `### ${pkg.name} (\\`${pkg.npmName}\\`)\n${pkg.description}\n\n- **Platforms:** ${platforms}\n- **Install:** \\`${pkg.installation}\\`\n\n`;\n }\n }\n\n guide = content;\n }\n\n if (!guide) {\n throw new Error(`Resource not found: ${uri}`);\n }\n\n return {\n contents: [\n {\n uri,\n mimeType: \"text/markdown\",\n text: guide,\n },\n ],\n };\n});\n\n// Start the server\nasync function main() {\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error(\"Idealyst MCP Server running on stdio\");\n}\n\nmain().catch((error) => {\n console.error(\"Fatal error:\", error);\n process.exit(1);\n});\n","export const Accordion = {\n category: \"display\",\n description: \"Expandable/collapsible content sections with spacing variants and support for single or multiple open items\",\n props: `\n- \\`items\\`: AccordionItem[] - Array of accordion items with title and content\n- \\`allowMultiple\\`: boolean - Whether multiple items can be expanded at once\n- \\`defaultExpanded\\`: string[] - Array of item IDs that should be expanded by default\n- \\`type\\`: AccordionType - The visual style variant of the accordion\n- \\`size\\`: AccordionSizeVariant - The size variant of accordion items\n- \\`gap\\`: Size - Space between accordion items ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`padding\\`: Size - Padding on all sides\n- \\`paddingVertical\\`: Size - Top and bottom padding\n- \\`paddingHorizontal\\`: Size - Left and right padding\n- \\`margin\\`: Size - Margin on all sides\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n`,\n features: [\n \"Single or multiple item expansion modes\",\n \"Default expanded items support\",\n \"Three visual variants\",\n \"Three size options\",\n \"Gap variant for spacing between items\",\n \"Padding and margin variants\",\n \"Disabled item state\",\n \"Controlled and uncontrolled modes\",\n ],\n bestPractices: [\n \"Use 'default' variant for standard content organization\",\n \"Use 'separated' variant for distinct sections\",\n \"Set allowMultiple to true for FAQs where users may need to compare answers\",\n \"Keep accordion titles concise and descriptive\",\n \"Use defaultExpanded sparingly to avoid overwhelming users\",\n ],\n usage: `\nimport { Accordion } from '@idealyst/components';\n\nconst items = [\n {\n id: '1',\n title: 'What is Idealyst?',\n content: <Text>Idealyst is a cross-platform React framework...</Text>,\n },\n {\n id: '2',\n title: 'How do I get started?',\n content: <Text>Install the CLI and create a new project...</Text>,\n },\n];\n\n<Accordion\n items={items}\n type=\"bordered\"\n defaultExpanded={['1']}\n/>\n`,\n examples: {\n basic: `import { Accordion, Text } from '@idealyst/components';\n\nconst items = [\n { id: '1', title: 'Section 1', content: <Text>Content 1</Text> },\n { id: '2', title: 'Section 2', content: <Text>Content 2</Text> },\n];\n\n<Accordion items={items} />`,\n\n variants: `import { Accordion, Text } from '@idealyst/components';\n\nconst items = [\n { id: '1', title: 'Item', content: <Text>Content</Text> },\n];\n\n// Different variants\n<Accordion items={items} type=\"default\" />\n<Accordion items={items} type=\"separated\" />\n<Accordion items={items} type=\"bordered\" />`,\n\n \"with-icons\": `import { Accordion, View, Icon, Text } from '@idealyst/components';\n\nconst items = [\n {\n id: '1',\n title: 'Account Settings',\n content: (\n <View spacing=\"sm\">\n <Icon name=\"account\" size=\"md\" />\n <Text>Manage your account preferences</Text>\n </View>\n ),\n },\n];\n\n<Accordion items={items} intent=\"primary\" />`,\n\n interactive: `import { Accordion, Text } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const items = [\n { id: '1', title: 'FAQ 1', content: <Text>Answer 1</Text> },\n { id: '2', title: 'FAQ 2', content: <Text>Answer 2</Text> },\n { id: '3', title: 'FAQ 3', content: <Text>Answer 3</Text> },\n ];\n\n return (\n <Accordion\n items={items}\n allowMultiple\n defaultExpanded={['1']}\n type=\"bordered\"\n />\n );\n}`,\n },\n};\n","export const ActivityIndicator = {\n category: \"feedback\",\n description: \"Loading spinner/indicator for showing ongoing processes or loading states\",\n props: `\n- \\`animating\\`: boolean - Whether the indicator is animating (visible)\n- \\`size\\`: ActivityIndicatorSizeVariant - The size of the indicator\n- \\`intent\\`: ActivityIndicatorIntentVariant - The color/intent of the indicator\n- \\`color\\`: string - Custom color to override intent\n- \\`hidesWhenStopped\\`: boolean - Whether to hide the indicator when not animating\n`,\n features: [\n \"Animated loading spinner\",\n \"Three predefined sizes plus custom numeric size\",\n \"Five intent colors\",\n \"Custom color support\",\n \"Auto-hide when stopped\",\n \"Cross-platform support\",\n ],\n bestPractices: [\n \"Use 'primary' intent for general loading states\",\n \"Use 'sm' size for inline loading indicators\",\n \"Use 'lg' size for full-screen loading overlays\",\n \"Always provide context about what is loading\",\n \"Consider using with overlay for blocking operations\",\n ],\n usage: `\nimport { ActivityIndicator, View, Text } from '@idealyst/components';\n\n<View spacing=\"md\">\n <ActivityIndicator size=\"lg\" intent=\"primary\" />\n <Text>Loading data...</Text>\n</View>\n`,\n examples: {\n basic: `import { ActivityIndicator } from '@idealyst/components';\n\n<ActivityIndicator />`,\n\n variants: `import { ActivityIndicator, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n <ActivityIndicator size=\"sm\" />\n <ActivityIndicator size=\"md\" />\n <ActivityIndicator size=\"lg\" />\n <ActivityIndicator size={48} />\n</View>`,\n\n \"with-icons\": `import { ActivityIndicator, View, Text } from '@idealyst/components';\n\n<View spacing=\"sm\" style={{ alignItems: 'center' }}>\n <ActivityIndicator intent=\"success\" size=\"lg\" />\n <Text>Processing...</Text>\n</View>`,\n\n interactive: `import { ActivityIndicator, Button, View, Text } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [loading, setLoading] = useState(false);\n\n const handleLoad = async () => {\n setLoading(true);\n await new Promise(resolve => setTimeout(resolve, 2000));\n setLoading(false);\n };\n\n return (\n <View spacing=\"md\">\n <Button onPress={handleLoad} disabled={loading}>\n Load Data\n </Button>\n {loading && (\n <View spacing=\"sm\" style={{ alignItems: 'center' }}>\n <ActivityIndicator size=\"lg\" />\n <Text>Loading...</Text>\n </View>\n )}\n </View>\n );\n}`,\n },\n};\n","export const Alert = {\n category: \"feedback\",\n description: \"Message banner for displaying important information, warnings, errors, and success messages\",\n props: `\n- \\`title\\`: string - The title text of the alert\n- \\`message\\`: string - The message text of the alert\n- \\`children\\`: React.ReactNode - Custom content to display (overrides title and message)\n- \\`intent\\`: AlertIntentVariant - The intent/color scheme (success, error, warning, info, neutral)\n- \\`type\\`: AlertType - The visual style variant (filled, outlined, subtle)\n- \\`icon\\`: React.ReactNode - Custom icon to display (overrides default intent icon)\n- \\`showIcon\\`: boolean - Whether to show the icon (defaults to true)\n- \\`dismissible\\`: boolean - Whether the alert can be dismissed with a close button\n- \\`onDismiss\\`: function - Called when the alert is dismissed\n- \\`actions\\`: React.ReactNode - Action buttons to display in the alert\n`,\n features: [\n \"Five intent types with semantic meaning\",\n \"Three visual variants\",\n \"Default icons for each intent\",\n \"Custom icon support\",\n \"Dismissible with close button\",\n \"Action buttons support\",\n \"Title and message or custom children\",\n ],\n bestPractices: [\n \"Use 'error' intent for critical errors requiring immediate attention\",\n \"Use 'warning' intent for important but non-critical information\",\n \"Use 'success' intent for positive confirmations\",\n \"Use 'info' intent for general informational messages\",\n \"Keep alert messages concise and actionable\",\n \"Make alerts dismissible unless they require action\",\n ],\n usage: `\nimport { Alert } from '@idealyst/components';\n\n<Alert\n intent=\"error\"\n title=\"Error\"\n message=\"Failed to save changes. Please try again.\"\n dismissible\n onDismiss={() => setShowAlert(false)}\n/>\n`,\n examples: {\n basic: `import { Alert } from '@idealyst/components';\n\n<Alert\n intent=\"info\"\n message=\"This is an informational message\"\n/>`,\n\n variants: `import { Alert, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n <Alert\n intent=\"success\"\n type=\"filled\"\n message=\"Success message\"\n />\n <Alert\n intent=\"warning\"\n type=\"outlined\"\n message=\"Warning message\"\n />\n <Alert\n intent=\"error\"\n type=\"soft\"\n message=\"Error message\"\n />\n</View>`,\n\n \"with-icons\": `import { Alert, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n <Alert\n intent=\"success\"\n title=\"Success!\"\n message=\"Your changes have been saved\"\n showIcon\n />\n <Alert\n intent=\"error\"\n title=\"Error\"\n message=\"Something went wrong\"\n showIcon\n dismissible\n />\n</View>`,\n\n interactive: `import { Alert, Button, View } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [showAlert, setShowAlert] = useState(false);\n\n return (\n <View spacing=\"md\">\n <Button onPress={() => setShowAlert(true)}>\n Show Alert\n </Button>\n\n {showAlert && (\n <Alert\n intent=\"warning\"\n title=\"Unsaved Changes\"\n message=\"You have unsaved changes that will be lost.\"\n dismissible\n onDismiss={() => setShowAlert(false)}\n actions={\n <View style={{ flexDirection: 'row', gap: 8 }}>\n <Button size=\"sm\" onPress={() => setShowAlert(false)}>\n Cancel\n </Button>\n <Button\n size=\"sm\"\n intent=\"warning\"\n onPress={() => {\n handleSave();\n setShowAlert(false);\n }}\n >\n Save\n </Button>\n </View>\n }\n />\n )}\n </View>\n );\n}`,\n },\n};\n","export const Avatar = {\n category: \"display\",\n description: \"Profile picture or user avatar with fallback text support\",\n props: `\n- \\`src\\`: string | ImageSourcePropType - Image source (URL or require())\n- \\`alt\\`: string - Alt text for the image\n- \\`fallback\\`: string - Fallback text (usually initials)\n- \\`size\\`: AvatarSizeVariant - Size of the avatar\n- \\`shape\\`: AvatarShapeVariant - Shape of the avatar\n- \\`color\\`: AvatarColorVariant - The color scheme of the avatar (for background when no image)\n`,\n features: [\n \"Image display with automatic fallback\",\n \"Fallback text (initials) support\",\n \"Four size options\",\n \"Circle and square shapes\",\n \"Theme color variants for fallback backgrounds\",\n \"Accessible with alt text\",\n ],\n bestPractices: [\n \"Always provide alt text for accessibility\",\n \"Use initials (2 characters) for fallback text\",\n \"Use 'circle' shape for user avatars\",\n \"Use 'square' shape for brands or organizations\",\n \"Choose contrasting colors for fallback backgrounds\",\n ],\n usage: `\nimport { Avatar } from '@idealyst/components';\n\n<Avatar\n src=\"https://example.com/avatar.jpg\"\n alt=\"John Doe\"\n fallback=\"JD\"\n size=\"lg\"\n shape=\"circle\"\n/>\n`,\n examples: {\n basic: `import { Avatar } from '@idealyst/components';\n\n<Avatar\n fallback=\"JD\"\n size=\"md\"\n/>`,\n\n variants: `import { Avatar, View } from '@idealyst/components';\n\n<View style={{ flexDirection: 'row', gap: 8 }}>\n <Avatar fallback=\"SM\" size=\"sm\" />\n <Avatar fallback=\"MD\" size=\"md\" />\n <Avatar fallback=\"LG\" size=\"lg\" />\n <Avatar fallback=\"XL\" size=\"xl\" />\n</View>`,\n\n \"with-icons\": `import { Avatar, View } from '@idealyst/components';\n\n<View style={{ flexDirection: 'row', gap: 8 }}>\n {/* Circle avatars */}\n <Avatar\n src=\"https://i.pravatar.cc/150?img=1\"\n alt=\"User 1\"\n fallback=\"U1\"\n shape=\"circle\"\n />\n\n {/* Square avatars */}\n <Avatar\n src=\"https://i.pravatar.cc/150?img=2\"\n alt=\"User 2\"\n fallback=\"U2\"\n shape=\"square\"\n />\n</View>`,\n\n interactive: `import { Avatar, View, Text } from '@idealyst/components';\n\nfunction UserProfile({ user }) {\n return (\n <View spacing=\"sm\" style={{ alignItems: 'center' }}>\n <Avatar\n src={user.avatar}\n alt={user.name}\n fallback={user.initials}\n size=\"xl\"\n color=\"primary\"\n />\n <Text weight=\"bold\">{user.name}</Text>\n <Text size=\"sm\" color=\"secondary\">{user.email}</Text>\n </View>\n );\n}`,\n },\n};\n","export const Badge = {\ncategory: \"display\",\n description: \"Small status indicator with various styles and colors\",\n props: `\n- \\`children\\`: React.ReactNode - The content to display inside the badge\n- \\`size\\`: BadgeSizeVariant - The size of the badge\n- \\`type\\`: BadgeType - The visual style variant of the badge\n- \\`color\\`: BadgeColorVariant - The color scheme of the badge\n- \\`icon\\`: IconName | React.ReactNode - Icon to display. Can be an icon name or custom component (ReactNode)\n`,\n features: [\n \"Three visual variants\",\n \"Theme palette color support\",\n \"Three sizes\",\n \"Icon support\",\n \"Dot variant for minimal indicators\",\n ],\n bestPractices: [\n \"Use 'dot' variant for minimal status indicators\",\n \"Use 'filled' variant for prominent badges\",\n \"Keep badge content short (numbers or 1-2 words)\",\n \"Use appropriate colors for semantic meaning\",\n ],\n usage: `\nimport { Badge } from '@idealyst/components';\n\n<Badge type=\"filled\" color=\"red\">\n 3\n</Badge>\n`,\n examples: {\n basic: `import { Badge } from '@idealyst/components';\n\n<Badge>New</Badge>`,\n variants: `import { Badge } from '@idealyst/components';\n\n<Badge type=\"filled\" color=\"blue\">5</Badge>\n<Badge type=\"outlined\" color=\"green\">Active</Badge>\n<Badge type=\"dot\" color=\"red\" />`,\n \"with-icons\": `import { Badge } from '@idealyst/components';\n\n<Badge icon=\"star\" color=\"yellow\">\n Featured\n</Badge>`,\n interactive: `import { Badge, Button, View } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [count, setCount] = useState(0);\n\n return (\n <View spacing=\"sm\">\n <Badge type=\"filled\" color=\"red\">\n {count}\n </Badge>\n <Button onPress={() => setCount(count + 1)}>\n Increment\n </Button>\n </View>\n );\n}`,\n }\n};\n","export const Breadcrumb = {\n category: \"navigation\",\n description: \"Navigation aid showing the current location within a hierarchy\",\n props: `\n- \\`items\\`: BreadcrumbItem[] - Array of breadcrumb items\n- \\`separator\\`: React.ReactNode - Custom separator between items (default: '/')\n- \\`maxItems\\`: number - Maximum number of items to show before truncating\n- \\`intent\\`: BreadcrumbIntentVariant - Intent color for links\n- \\`size\\`: BreadcrumbSizeVariant - Size of the breadcrumb text\n- \\`itemStyle\\`: StyleProp<ViewStyle> - Custom item style\n- \\`separatorStyle\\`: StyleProp<TextStyle> - Custom separator style\n- \\`responsive\\`: boolean - Enable responsive collapsing on narrow screens\n- \\`minVisibleItems\\`: number - Minimum number of items to show before collapsing (default: 3)\n`,\n features: [\n \"Icon support with string names or custom components\",\n \"Custom separators\",\n \"Truncation with maxItems\",\n \"Two intent colors\",\n \"Three sizes\",\n \"Disabled items\",\n \"Click handlers for navigation\",\n ],\n bestPractices: [\n \"Keep breadcrumb labels short and clear\",\n \"Last item should represent current page (typically not clickable)\",\n \"Use icons sparingly for visual clarity\",\n \"Set maxItems for deep hierarchies to avoid overflow\",\n \"Use 'neutral' intent for subtle breadcrumbs\",\n ],\n usage: `\nimport { Breadcrumb } from '@idealyst/components';\n\nconst items = [\n { label: 'Home', icon: 'home', onPress: () => navigate('/') },\n { label: 'Products', onPress: () => navigate('/products') },\n { label: 'Electronics', onPress: () => navigate('/products/electronics') },\n { label: 'Laptop' }, // Current page, no onPress\n];\n\n<Breadcrumb items={items} intent=\"primary\" />\n`,\n examples: {\n basic: `import { Breadcrumb } from '@idealyst/components';\n\nconst items = [\n { label: 'Home', onPress: () => console.log('Home') },\n { label: 'Products', onPress: () => console.log('Products') },\n { label: 'Item' },\n];\n\n<Breadcrumb items={items} />`,\n\n variants: `import { Breadcrumb, View } from '@idealyst/components';\n\nconst items = [\n { label: 'Home', onPress: () => {} },\n { label: 'Category', onPress: () => {} },\n { label: 'Item' },\n];\n\n<View spacing=\"md\">\n <Breadcrumb items={items} size=\"sm\" />\n <Breadcrumb items={items} size=\"md\" />\n <Breadcrumb items={items} size=\"lg\" />\n</View>`,\n\n \"with-icons\": `import { Breadcrumb } from '@idealyst/components';\n\nconst items = [\n { label: 'Home', icon: 'home', onPress: () => navigate('/') },\n { label: 'Settings', icon: 'cog', onPress: () => navigate('/settings') },\n { label: 'Profile', icon: 'account' },\n];\n\n<Breadcrumb items={items} intent=\"primary\" />`,\n\n interactive: `import { Breadcrumb } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [path, setPath] = useState(['Home', 'Products', 'Electronics']);\n\n const items = path.map((label, index) => ({\n label,\n onPress: index < path.length - 1\n ? () => setPath(path.slice(0, index + 1))\n : undefined,\n }));\n\n return <Breadcrumb items={items} maxItems={4} />;\n}`,\n },\n};\n","export const Button = {\ncategory: \"form\",\n description: \"Interactive button component with multiple variants, sizes, and icon support\",\n props: `\n- \\`children\\`: React.ReactNode - The text or content to display inside the button\n- \\`title\\`: string - The text title to display inside the button (for web)\n- \\`onPress\\`: function - Called when the button is pressed\n- \\`disabled\\`: boolean - Whether the button is disabled\n- \\`loading\\`: boolean - Whether the button is in a loading state. Shows a spinner and disables interaction.\n- \\`type\\`: ButtonType - The visual style type of the button ('contained' | 'outlined' | 'text')\n- \\`intent\\`: ButtonIntentVariant - The intent/color scheme of the button\n- \\`size\\`: ButtonSizeVariant - The size of the button\n- \\`gradient\\`: ButtonGradient - Optional gradient overlay effect ('darken' | 'lighten'). Only applies to 'contained' type buttons.\n- \\`leftIcon\\`: IconName | React.ReactNode - Icon to display on the left side. Can be an icon name or custom component (ReactNode)\n- \\`rightIcon\\`: IconName | React.ReactNode - Icon to display on the right side. Can be an icon name or custom component (ReactNode)\n`,\n features: [\n \"Three type variants: contained, outlined, text\",\n \"Five intent colors: primary, neutral, success, error, warning\",\n \"Five sizes: xs, sm, md, lg, xl\",\n \"Loading state with spinner (matches text color)\",\n \"Gradient overlay effects (darken/lighten) for contained buttons\",\n \"Left and right icon support with MDI icons or custom React elements\",\n \"Disabled states with visual feedback\",\n \"Cross-platform (React & React Native)\",\n ],\n bestPractices: [\n \"Use 'primary' intent for main actions\",\n \"Use 'contained' variant for prominent actions\",\n \"Use icon names (strings) for consistency with design system\",\n \"Keep button labels concise and action-oriented\",\n \"Use gradient='darken' for a subtle depth effect on hero/CTA buttons\",\n ],\n usage: `\nimport { Button } from '@idealyst/components';\n\n<Button\n type=\"contained\"\n intent=\"primary\"\n leftIcon=\"check\"\n onPress={() => console.log('Pressed')}\n>\n Save Changes\n</Button>\n`,\n examples: {\n basic: `import { Button } from '@idealyst/components';\n\n// Basic button\n<Button onPress={() => console.log('Clicked')}>\n Click Me\n</Button>`,\n variants: `import { Button } from '@idealyst/components';\n\n// Different variants\n<Button type=\"contained\" intent=\"primary\">Contained</Button>\n<Button type=\"outlined\" intent=\"primary\">Outlined</Button>\n<Button type=\"text\" intent=\"primary\">Text</Button>`,\n \"with-icons\": `import { Button } from '@idealyst/components';\n\n// Button with left icon\n<Button leftIcon=\"check\">\n Confirm\n</Button>\n\n// Button with right icon\n<Button rightIcon=\"arrow-right\">\n Next\n</Button>\n\n// Button with both icons\n<Button leftIcon=\"check\" rightIcon=\"arrow-right\">\n Continue\n</Button>`,\n interactive: `import { Button } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [loading, setLoading] = useState(false);\n\n const handlePress = async () => {\n setLoading(true);\n await someAsyncOperation();\n setLoading(false);\n };\n\n return (\n <Button\n loading={loading}\n onPress={handlePress}\n >\n Save\n </Button>\n );\n}`,\n gradient: `import { Button } from '@idealyst/components';\n\n// Gradient overlay adds subtle depth to contained buttons\n<Button type=\"contained\" intent=\"primary\" gradient=\"darken\">\n Darken Effect\n</Button>\n\n<Button type=\"contained\" intent=\"success\" gradient=\"lighten\">\n Lighten Effect\n</Button>\n\n// Gradient with icons\n<Button\n type=\"contained\"\n intent=\"primary\"\n gradient=\"darken\"\n leftIcon=\"rocket-launch\"\n>\n Launch\n</Button>`,\n }\n};\n","export const Card = {\ncategory: \"display\",\n description: \"Container component for grouping related content with spacing variants and visual styles\",\n props: `\n- \\`children\\`: React.ReactNode - The content to display inside the card\n- \\`type\\`: CardType - The visual style variant of the card\n- \\`gap\\`: Size - Space between children ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`padding\\`: Size - Padding on all sides ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`paddingVertical\\`: Size - Top and bottom padding\n- \\`paddingHorizontal\\`: Size - Left and right padding\n- \\`margin\\`: Size - Margin on all sides\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n- \\`radius\\`: CardRadiusVariant - The border radius of the card\n- \\`intent\\`: CardIntentVariant - The intent/color scheme of the card\n- \\`clickable\\`: boolean - Whether the card is clickable\n- \\`onPress\\`: function - Called when the card is pressed (if clickable)\n- \\`disabled\\`: boolean - Whether the card is disabled\n`,\n features: [\n \"Four visual variants\",\n \"Intent-based color schemes\",\n \"Gap variant for spacing between children\",\n \"Padding variants (uniform and directional)\",\n \"Margin variants (uniform and directional)\",\n \"Configurable border radius\",\n \"Clickable with press handler\",\n \"Flexible content container\",\n ],\n bestPractices: [\n \"Use 'elevated' variant for prominent content\",\n \"Group related content within cards\",\n \"Use gap prop for spacing between children\",\n \"Use padding prop for consistent internal spacing\",\n \"Make cards clickable only when they represent an action\",\n ],\n usage: `\nimport { Card, Text } from '@idealyst/components';\n\n<Card type=\"elevated\" padding=\"md\" gap=\"sm\">\n <Text weight=\"bold\">Card Title</Text>\n <Text size=\"sm\">Card content goes here</Text>\n</Card>\n`,\n examples: {\n basic: `import { Card, Text } from '@idealyst/components';\n\n<Card padding=\"md\">\n <Text>Simple card content</Text>\n</Card>`,\n variants: `import { Card, Text } from '@idealyst/components';\n\n<Card type=\"default\" padding=\"md\"><Text>Default</Text></Card>\n<Card type=\"outlined\" padding=\"md\"><Text>Outlined</Text></Card>\n<Card type=\"elevated\" padding=\"md\"><Text>Elevated</Text></Card>\n<Card type=\"filled\" padding=\"md\"><Text>Filled</Text></Card>`,\n \"with-icons\": `import { Card, View, Text, Icon } from '@idealyst/components';\n\n<Card type=\"outlined\" padding=\"md\" gap=\"sm\">\n <Icon name=\"information\" size=\"lg\" />\n <Text>Card with icon header</Text>\n</Card>`,\n interactive: `import { Card, Text } from '@idealyst/components';\n\n<Card\n clickable\n onPress={() => console.log('Card clicked')}\n type=\"outlined\"\n padding=\"md\"\n>\n <Text>Click this card</Text>\n</Card>`,\n }\n};\n","export const Checkbox = {\n category: \"form\",\n description: \"Form checkbox with margin variants for boolean selection, label, and validation support\",\n props: `\n- \\`checked\\`: boolean - Whether the checkbox is checked\n- \\`indeterminate\\`: boolean - Whether the checkbox is in an indeterminate state\n- \\`disabled\\`: boolean - Whether the checkbox is disabled\n- \\`onCheckedChange\\`: function - Called when the checkbox state changes\n- \\`size\\`: CheckboxSizeVariant - The size of the checkbox\n- \\`intent\\`: CheckboxIntentVariant - The intent/color scheme of the checkbox\n- \\`variant\\`: CheckboxVariant - The visual style variant of the checkbox\n- \\`label\\`: string - Label text to display next to the checkbox\n- \\`children\\`: React.ReactNode - Custom label content (ReactNode)\n- \\`required\\`: boolean - Whether the checkbox is required\n- \\`error\\`: string - Error message to display\n- \\`helperText\\`: string - Helper text to display\n- \\`margin\\`: Size - Margin on all sides ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n`,\n features: [\n \"Checked, unchecked, and indeterminate states\",\n \"Label support (string or custom ReactNode)\",\n \"Three sizes\",\n \"Intent-based colors\",\n \"Error and helper text\",\n \"Required field support\",\n \"Accessible with proper ARIA attributes\",\n ],\n bestPractices: [\n \"Always provide a label for accessibility\",\n \"Use indeterminate state for parent checkboxes with partial children selection\",\n \"Show error messages inline\",\n \"Use helperText to clarify checkbox meaning\",\n \"Group related checkboxes visually\",\n ],\n usage: `\nimport { Checkbox } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [checked, setChecked] = useState(false);\n\n return (\n <Checkbox\n checked={checked}\n onCheckedChange={setChecked}\n label=\"Accept terms and conditions\"\n required\n />\n );\n}\n`,\n examples: {\n basic: `import { Checkbox } from '@idealyst/components';\n\n<Checkbox label=\"Subscribe to newsletter\" />`,\n\n variants: `import { Checkbox, View } from '@idealyst/components';\n\n<View spacing=\"sm\">\n <Checkbox label=\"Small\" size=\"sm\" />\n <Checkbox label=\"Medium\" size=\"md\" />\n <Checkbox label=\"Large\" size=\"lg\" />\n</View>`,\n\n \"with-icons\": `import { Checkbox, View } from '@idealyst/components';\n\n<View spacing=\"sm\">\n <Checkbox\n label=\"Enable notifications\"\n intent=\"primary\"\n checked\n />\n <Checkbox\n label=\"Dark mode\"\n intent=\"success\"\n checked\n />\n</View>`,\n\n interactive: `import { Checkbox, View, Text } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [options, setOptions] = useState({\n email: false,\n sms: false,\n push: false,\n });\n\n return (\n <View spacing=\"md\">\n <Text weight=\"bold\">Notification Preferences</Text>\n <Checkbox\n label=\"Email notifications\"\n checked={options.email}\n onCheckedChange={(checked) =>\n setOptions({ ...options, email: checked })\n }\n />\n <Checkbox\n label=\"SMS notifications\"\n checked={options.sms}\n onCheckedChange={(checked) =>\n setOptions({ ...options, sms: checked })\n }\n />\n <Checkbox\n label=\"Push notifications\"\n checked={options.push}\n onCheckedChange={(checked) =>\n setOptions({ ...options, push: checked })\n }\n />\n </View>\n );\n}`,\n },\n};\n","export const Chip = {\ncategory: \"display\",\n description: \"Compact element for tags, filters, and selections with optional delete action\",\n props: `\n- \\`label\\`: string - The text content of the chip\n- \\`type\\`: ChipType - Visual style variant\n- \\`intent\\`: ChipIntent - Color intent/semantic meaning\n- \\`size\\`: ChipSize - Size of the chip\n- \\`icon\\`: IconName | React.ReactNode - Icon to display before the label. Can be an icon name (string) or a custom React element\n- \\`deletable\\`: boolean - Whether the chip can be deleted\n- \\`onDelete\\`: function - Callback when delete button is pressed\n- \\`deleteIcon\\`: IconName | React.ReactNode - Icon to display in the delete button. Defaults to 'close'\n- \\`selectable\\`: boolean - Whether the chip is selectable\n- \\`selected\\`: boolean - Whether the chip is selected (when selectable)\n- \\`onPress\\`: function - Callback when chip is pressed\n- \\`disabled\\`: boolean - Whether the chip is disabled\n`,\n features: [\n \"Three variants: filled, outlined, soft\",\n \"Five intent colors\",\n \"Icon support with MDI icons\",\n \"Deletable with onDelete handler\",\n \"Customizable delete icon (defaults to MDI 'close')\",\n \"Selectable with selected state\",\n \"Three sizes\",\n \"Disabled state\",\n ],\n bestPractices: [\n \"Use for tags, filters, and multi-select options\",\n \"Use deletable chips for removable tags\",\n \"Use selectable chips for filter options\",\n \"Keep chip labels concise\",\n ],\n usage: `\nimport { Chip } from '@idealyst/components';\n\n<Chip\n label=\"React\"\n icon=\"check\"\n deletable\n onDelete={() => removeTag('React')}\n/>\n`,\n examples: {\n basic: `import { Chip } from '@idealyst/components';\n\n<Chip label=\"Tag\" />`,\n variants: `import { Chip } from '@idealyst/components';\n\n<Chip label=\"Filled\" type=\"filled\" intent=\"primary\" />\n<Chip label=\"Outlined\" type=\"outlined\" intent=\"success\" />\n<Chip label=\"Soft\" type=\"soft\" intent=\"warning\" />`,\n \"with-icons\": `import { Chip } from '@idealyst/components';\n\n<Chip label=\"Star\" icon=\"star\" />\n<Chip label=\"Heart\" icon=\"heart\" intent=\"error\" />\n\n// Custom delete icon\n<Chip\n label=\"Custom Delete\"\n deletable\n deleteIcon=\"close-circle\"\n onDelete={() => console.log('deleted')}\n/>\n\n// Alternative delete icons\n<Chip\n label=\"Remove\"\n deletable\n deleteIcon=\"delete\"\n onDelete={() => console.log('deleted')}\n/>`,\n interactive: `import { Chip, View } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [tags, setTags] = useState(['React', 'TypeScript', 'Node.js']);\n\n return (\n <View spacing=\"sm\">\n {tags.map(tag => (\n <Chip\n key={tag}\n label={tag}\n deletable\n onDelete={() => setTags(tags.filter(t => t !== tag))}\n />\n ))}\n </View>\n );\n}`,\n }\n};\n","export const Dialog = {\ncategory: \"overlay\",\n description: \"Modal overlay for focused user interactions and important information\",\n props: `\n- \\`open\\`: boolean - Whether the dialog is open/visible\n- \\`onOpenChange\\`: function - Called when the dialog should be opened or closed\n- \\`title\\`: string - Optional title for the dialog\n- \\`children\\`: React.ReactNode - The content to display inside the dialog\n- \\`size\\`: DialogSizeVariant - The size of the dialog\n- \\`showCloseButton\\`: boolean - Whether to show the close button in the header\n- \\`closeOnBackdropClick\\`: boolean - Whether clicking the backdrop should close the dialog\n- \\`closeOnEscapeKey\\`: boolean - Whether pressing escape key should close the dialog (web only)\n- \\`animationType\\`: DialogAnimationType - Animation type for the dialog (native only)\n`,\n features: [\n \"Controlled open state\",\n \"Multiple sizes including fullscreen\",\n \"Alert variant for important messages\",\n \"Optional close button\",\n \"Backdrop click and Escape key handling\",\n \"Focus trap and accessibility support\",\n ],\n bestPractices: [\n \"Use for actions requiring user attention\",\n \"Keep dialog content focused and concise\",\n \"Provide clear action buttons\",\n \"Use alert variant for critical confirmations\",\n \"Always provide a way to close the dialog\",\n ],\n usage: `\nimport { Dialog, Button, View, Text } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [open, setOpen] = useState(false);\n\n return (\n <>\n <Button onPress={() => setOpen(true)}>\n Open Dialog\n </Button>\n\n <Dialog\n open={open}\n onOpenChange={setOpen}\n title=\"Confirm Action\"\n size=\"md\"\n >\n <View spacing=\"md\">\n <Text>Are you sure you want to proceed?</Text>\n <View style={{ flexDirection: 'row', gap: 8 }}>\n <Button type=\"outlined\" onPress={() => setOpen(false)}>\n Cancel\n </Button>\n <Button onPress={() => { handleConfirm(); setOpen(false); }}>\n Confirm\n </Button>\n </View>\n </View>\n </Dialog>\n </>\n );\n}\n`,\n examples: {\n basic: `import { Dialog, Button, Text } from '@idealyst/components';\n\n<Dialog open={true} onOpenChange={setOpen} title=\"Simple Dialog\">\n <Text>Dialog content here</Text>\n</Dialog>`,\n variants: `import { Dialog, Text } from '@idealyst/components';\n\n// Default dialog\n<Dialog open={open} onOpenChange={setOpen} title=\"Information\">\n <Text>Information content</Text>\n</Dialog>\n\n// Alert dialog\n<Dialog open={open} onOpenChange={setOpen} title=\"Warning\" type=\"alert\">\n <Text>This action cannot be undone</Text>\n</Dialog>`,\n \"with-icons\": `import { Dialog, View, Icon, Text, Button } from '@idealyst/components';\n\n<Dialog open={open} onOpenChange={setOpen} title=\"Delete Item\">\n <View spacing=\"md\">\n <View style={{ alignItems: 'center' }}>\n <Icon name=\"delete\" size=\"xl\" color=\"error\" />\n </View>\n <Text>This action cannot be undone. Continue?</Text>\n <Button intent=\"error\" onPress={handleDelete}>Delete</Button>\n </View>\n</Dialog>`,\n interactive: `import { Dialog, Button, View, Text } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [open, setOpen] = useState(false);\n const [confirmed, setConfirmed] = useState(false);\n\n const handleConfirm = () => {\n setConfirmed(true);\n setOpen(false);\n };\n\n return (\n <View spacing=\"md\">\n <Button onPress={() => setOpen(true)}>\n Open Dialog\n </Button>\n\n {confirmed && <Text>Action confirmed!</Text>}\n\n <Dialog\n open={open}\n onOpenChange={setOpen}\n title=\"Confirm Action\"\n closeOnBackdropClick\n closeOnEscapeKey\n >\n <View spacing=\"md\">\n <Text>Proceed with this action?</Text>\n <View style={{ flexDirection: 'row', gap: 8 }}>\n <Button type=\"outlined\" onPress={() => setOpen(false)}>\n Cancel\n </Button>\n <Button intent=\"primary\" onPress={handleConfirm}>\n Confirm\n </Button>\n </View>\n </View>\n </Dialog>\n </View>\n );\n}`,\n }\n};\n","export const Divider = {\n category: \"layout\",\n description: \"Visual separator for content sections with horizontal or vertical orientation\",\n props: `\n- \\`orientation\\`: DividerOrientationVariant - The orientation of the divider\n- \\`type\\`: DividerType - The visual style type of the divider\n- \\`thickness\\`: DividerThicknessVariant - The thickness of the divider\n- \\`intent\\`: DividerIntentVariant - The color intent of the divider\n- \\`length\\`: DividerLengthVariant - The length of the divider (percentage or fixed)\n- \\`spacing\\`: DividerSpacingVariant - Spacing around the divider\n- \\`children\\`: React.ReactNode - Content to display in the center of the divider (for horizontal dividers)\n`,\n features: [\n \"Horizontal and vertical orientations\",\n \"Three line styles (solid, dashed, dotted)\",\n \"Three thickness options\",\n \"Configurable spacing\",\n \"Text content in center (horizontal)\",\n \"Intent-based colors\",\n ],\n bestPractices: [\n \"Use horizontal dividers to separate vertical content\",\n \"Use vertical dividers in horizontal layouts (toolbars, menus)\",\n \"Keep divider thickness subtle unless emphasizing separation\",\n \"Use 'md' spacing for standard content separation\",\n \"Add text content sparingly for important section breaks\",\n ],\n usage: `\nimport { Divider, View, Text } from '@idealyst/components';\n\n<View spacing=\"md\">\n <Text>Content above</Text>\n <Divider spacing=\"md\" />\n <Text>Content below</Text>\n</View>\n`,\n examples: {\n basic: `import { Divider } from '@idealyst/components';\n\n<Divider />`,\n\n variants: `import { Divider, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n <Divider type=\"solid\" />\n <Divider type=\"dashed\" />\n <Divider type=\"dotted\" />\n</View>`,\n\n \"with-icons\": `import { Divider, View, Text } from '@idealyst/components';\n\n<View spacing=\"lg\">\n <Text>Section 1</Text>\n <Divider spacing=\"md\">\n <Text size=\"sm\" color=\"secondary\">OR</Text>\n </Divider>\n <Text>Section 2</Text>\n</View>`,\n\n interactive: `import { Divider, View, Text } from '@idealyst/components';\n\n<View style={{ flexDirection: 'row', alignItems: 'center', gap: 16 }}>\n <Text>Left</Text>\n <Divider orientation=\"vertical\" thickness=\"medium\" style={{ height: 40 }} />\n <Text>Center</Text>\n <Divider orientation=\"vertical\" thickness=\"medium\" style={{ height: 40 }} />\n <Text>Right</Text>\n</View>`,\n },\n};\n","export const Icon = {\n category: \"display\",\n description: \"Material Design icon display component with size and color variants\",\n props: `\n- \\`name\\`: IconName | 'mdi:\\${IconName}' - The name of the icon to display\n- \\`size\\`: IconSizeVariant - The size variant of the icon\n- \\`color\\`: Color - Predefined color variant based on theme\n- \\`intent\\`: Intent - Intent variant for the icon\n`,\n features: [\n \"Material Design Icons library\",\n \"Five predefined sizes plus custom numeric size\",\n \"Theme color variants\",\n \"Custom color support\",\n \"Accessible with labels\",\n \"Cross-platform support\",\n ],\n bestPractices: [\n \"Use semantic icon names that clearly convey meaning\",\n \"Provide accessibilityLabel for screen readers\",\n \"Use theme color variants for consistency\",\n \"Match icon size to surrounding text size\",\n \"Don't rely solely on icons - provide text labels when possible\",\n ],\n usage: `\nimport { Icon } from '@idealyst/components';\n\n<Icon name=\"home\" size=\"md\" color=\"primary\" />\n`,\n examples: {\n basic: `import { Icon } from '@idealyst/components';\n\n<Icon name=\"star\" size=\"md\" />`,\n\n variants: `import { Icon, View } from '@idealyst/components';\n\n<View style={{ flexDirection: 'row', gap: 8, alignItems: 'center' }}>\n <Icon name=\"check\" size=\"xs\" />\n <Icon name=\"check\" size=\"sm\" />\n <Icon name=\"check\" size=\"md\" />\n <Icon name=\"check\" size=\"lg\" />\n <Icon name=\"check\" size=\"xl\" />\n</View>`,\n\n \"with-icons\": `import { Icon, View, Text } from '@idealyst/components';\n\n<View spacing=\"sm\" style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>\n <Icon name=\"information\" size=\"md\" color=\"primary\" />\n <Text>Informational message with icon</Text>\n</View>`,\n\n interactive: `import { Icon, Button, View } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [favorited, setFavorited] = useState(false);\n\n return (\n <Button\n icon={favorited ? 'heart' : 'heart-outline'}\n intent={favorited ? 'error' : 'neutral'}\n type=\"text\"\n onPress={() => setFavorited(!favorited)}\n >\n {favorited ? 'Favorited' : 'Favorite'}\n </Button>\n );\n}`,\n },\n};\n","export const Image = {\n category: \"media\",\n description: \"Image component with loading states, fallback support, and various object-fit modes\",\n props: `\n- \\`source\\`: ImageSourcePropType | string - The image source URL or source object\n- \\`alt\\`: string - Alternative text for accessibility\n- \\`width\\`: number | string - The width of the image\n- \\`height\\`: number | string - The height of the image\n- \\`aspectRatio\\`: number - The aspect ratio of the image\n- \\`objectFit\\`: ImageObjectFit - How the image should be fitted (cover, contain, fill, none, scale-down)\n- \\`loading\\`: 'lazy' | 'eager' - When to load the image (lazy for below the fold, eager for above)\n- \\`placeholder\\`: React.ReactNode - Content to show while the image is loading\n- \\`fallback\\`: React.ReactNode - Content to show if the image fails to load\n- \\`onLoad\\`: function - Called when the image successfully loads\n- \\`onError\\`: function - Called when the image fails to load\n- \\`borderRadius\\`: number - The border radius of the image\n`,\n features: [\n \"Remote and local image sources\",\n \"Lazy loading support (web)\",\n \"Loading placeholder\",\n \"Error fallback\",\n \"Multiple object-fit modes\",\n \"Aspect ratio control\",\n \"Border radius support\",\n \"Load/error callbacks\",\n ],\n bestPractices: [\n \"Always provide alt text for accessibility\",\n \"Use lazy loading for images below the fold\",\n \"Provide placeholder for better perceived performance\",\n \"Use fallback for graceful error handling\",\n \"Use objectFit: 'cover' for thumbnails\",\n \"Use objectFit: 'contain' to show full image\",\n ],\n usage: `\nimport { Image, ActivityIndicator } from '@idealyst/components';\n\n<Image\n source=\"https://example.com/image.jpg\"\n alt=\"Product photo\"\n width={300}\n height={200}\n objectFit=\"cover\"\n borderRadius={8}\n placeholder={<ActivityIndicator />}\n fallback={<Text>Failed to load</Text>}\n/>\n`,\n examples: {\n basic: `import { Image } from '@idealyst/components';\n\n<Image\n source=\"https://picsum.photos/200/300\"\n alt=\"Random image\"\n width={200}\n height={300}\n/>`,\n\n variants: `import { Image, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n <Image\n source=\"https://picsum.photos/300/200\"\n alt=\"Cover\"\n width={300}\n height={200}\n objectFit=\"cover\"\n />\n <Image\n source=\"https://picsum.photos/300/200\"\n alt=\"Contain\"\n width={300}\n height={200}\n objectFit=\"contain\"\n />\n</View>`,\n\n \"with-icons\": `import { Image, Card, View, Text } from '@idealyst/components';\n\n<Card type=\"outlined\">\n <Image\n source=\"https://picsum.photos/400/250\"\n alt=\"Card image\"\n width=\"100%\"\n aspectRatio={16 / 9}\n objectFit=\"cover\"\n borderRadius={8}\n />\n <View spacing=\"sm\" style={{ padding: 16 }}>\n <Text weight=\"bold\">Image Title</Text>\n <Text size=\"sm\">Description text</Text>\n </View>\n</Card>`,\n\n interactive: `import { Image, ActivityIndicator, Text, View } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [loaded, setLoaded] = useState(false);\n const [error, setError] = useState(false);\n\n return (\n <View spacing=\"sm\">\n <Image\n source=\"https://picsum.photos/300/200\"\n alt=\"Example\"\n width={300}\n height={200}\n onLoad={() => setLoaded(true)}\n onError={() => setError(true)}\n placeholder={<ActivityIndicator />}\n fallback={<Text>Failed to load image</Text>}\n />\n {loaded && <Text color=\"success\">Image loaded!</Text>}\n {error && <Text color=\"error\">Failed to load</Text>}\n </View>\n );\n}`,\n },\n};\n","export const Input = {\ncategory: \"form\",\n description: \"Text input field with icons, password visibility toggle, margin variants, and various input types\",\n props: `\n- \\`value\\`: string - The current value of the input\n- \\`onChangeText\\`: function - Called when the text changes\n- \\`onFocus\\`: function - Called when the input receives focus\n- \\`onBlur\\`: function - Called when the input loses focus\n- \\`placeholder\\`: string - Placeholder text\n- \\`disabled\\`: boolean - Whether the input is disabled\n- \\`inputType\\`: InputInputType - The type of input (affects keyboard type on mobile)\n- \\`secureTextEntry\\`: boolean - Whether to show the password\n- \\`leftIcon\\`: IconName | React.ReactNode - Icon to display on the left side of the input\n- \\`rightIcon\\`: IconName | React.ReactNode - Icon to display on the right side of the input\n- \\`showPasswordToggle\\`: boolean - Show password visibility toggle for password inputs (defaults to true for password type)\n- \\`autoCapitalize\\`: 'none' | 'sentences' | 'words' | 'characters' - Auto-capitalization behavior\n- \\`size\\`: InputSize - Size variant of the input\n- \\`type\\`: InputType - Style variant of the input\n- \\`intent\\`: InputIntent - The intent/color scheme of the input (for focus states, validation, etc.)\n- \\`hasError\\`: boolean - Whether the input has an error state\n- \\`margin\\`: Size - Margin on all sides ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n`,\n features: [\n \"Left and right icon support with MDI icons\",\n \"Password visibility toggle with eye/eye-off icons\",\n \"Multiple input types (text, email, password, number)\",\n \"Five size variants (xs, sm, md, lg, xl)\",\n \"Three style variants (outlined, filled, bare)\",\n \"Intent colors for focus/validation states\",\n \"Disabled and error states\",\n \"Auto-capitalization control\",\n \"Focus and blur event handlers\",\n ],\n bestPractices: [\n \"Use leftIcon for contextual hints (e.g., email icon for email input)\",\n \"Password inputs automatically show visibility toggle\",\n \"Use inputType='email' for email fields to get proper keyboard on mobile\",\n \"Use inputType='number' for numeric input\",\n \"Disable password toggle with showPasswordToggle={false} if needed\",\n ],\n usage: `\nimport { Input } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [email, setEmail] = useState('');\n\n return (\n <Input\n leftIcon=\"email\"\n value={email}\n onChangeText={setEmail}\n placeholder=\"Enter your email\"\n inputType=\"email\"\n />\n );\n}\n`,\n examples: {\n basic: `import { Input } from '@idealyst/components';\n\n<Input\n placeholder=\"Enter username\"\n/>`,\n variants: `import { Input } from '@idealyst/components';\n\n// Small size\n<Input size=\"sm\" placeholder=\"Small input\" />\n\n// Medium size (default)\n<Input size=\"md\" placeholder=\"Medium input\" />\n\n// Large size\n<Input size=\"lg\" placeholder=\"Large input\" />\n\n// Outlined variant\n<Input type=\"outlined\" placeholder=\"Outlined\" />\n\n// Filled variant\n<Input type=\"filled\" placeholder=\"Filled\" />\n\n// Bare variant\n<Input type=\"bare\" placeholder=\"Bare\" />`,\n \"with-icons\": `import { Input } from '@idealyst/components';\n\n// Left icon\n<Input\n leftIcon=\"email\"\n placeholder=\"Email address\"\n inputType=\"email\"\n/>\n\n// Right icon\n<Input\n rightIcon=\"magnify\"\n placeholder=\"Search\"\n/>\n\n// Both icons\n<Input\n leftIcon=\"lock\"\n rightIcon=\"check\"\n placeholder=\"Secure field\"\n/>\n\n// Password with visibility toggle (default)\n<Input\n inputType=\"password\"\n placeholder=\"Password\"\n/>\n\n// Password without visibility toggle\n<Input\n inputType=\"password\"\n showPasswordToggle={false}\n placeholder=\"Password\"\n/>\n\n// Custom icons with password toggle\n<Input\n leftIcon=\"lock\"\n inputType=\"password\"\n placeholder=\"Enter password\"\n/>`,\n interactive: `import { Input } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n\n return (\n <View spacing=\"md\">\n <Input\n leftIcon=\"email\"\n value={email}\n onChangeText={setEmail}\n placeholder=\"Email\"\n inputType=\"email\"\n />\n <Input\n leftIcon=\"lock\"\n value={password}\n onChangeText={setPassword}\n placeholder=\"Password\"\n inputType=\"password\"\n />\n </View>\n );\n}`,\n }\n};\n","export const Link = {\n category: \"navigation\",\n description: \"Navigation component that wraps children in a pressable area and navigates to a specified path when pressed\",\n props: `\n- \\`to\\`: string (required) - The destination path to navigate to\n- \\`vars\\`: Record<string, string> - Variables to substitute in the path (e.g., { id: '123' } for '/user/:id')\n- \\`children\\`: React.ReactNode - Content to render inside the link\n- \\`disabled\\`: boolean - Whether the link is disabled\n- \\`style\\`: StyleProp<ViewStyle> - Style to apply to the link container\n- \\`testID\\`: string - Test ID for testing\n- \\`accessibilityLabel\\`: string - Accessibility label for screen readers\n- \\`onPress\\`: function - Callback fired when the link is pressed (before navigation)\n`,\n features: [\n \"Declarative navigation with path-based routing\",\n \"Path variable substitution for dynamic routes\",\n \"Works with @idealyst/navigation system\",\n \"Disabled state support\",\n \"Custom styling\",\n \"Accessibility support\",\n \"Cross-platform (web and native)\",\n \"onPress callback before navigation\",\n ],\n bestPractices: [\n \"Use for navigation between screens/pages\",\n \"Prefer Link over manual navigator.navigate() for declarative routing\",\n \"Use vars prop for dynamic path parameters\",\n \"Provide accessibilityLabel for screen readers\",\n \"Wrap any content - text, buttons, cards, icons\",\n \"Use disabled prop for conditional navigation\",\n ],\n usage: `\nimport { Link, Text } from '@idealyst/components';\n\n// Basic text link\n<Link to=\"/home\">\n <Text color=\"primary\">Go Home</Text>\n</Link>\n\n// Link with path variables\n<Link to=\"/user/:id\" vars={{ id: '123' }}>\n <Text>View User Profile</Text>\n</Link>\n\n// Link wrapping a button\n<Link to=\"/settings\">\n <Button intent=\"primary\">Settings</Button>\n</Link>\n`,\n examples: {\n basic: `import { Link, Text } from '@idealyst/components';\n\n<Link to=\"/home\">\n <Text color=\"primary\">Go to Home</Text>\n</Link>`,\n\n variants: `import { Link, Text, Button, Card, View, Icon } from '@idealyst/components';\n\n// Text link\n<Link to=\"/about\">\n <Text color=\"primary\">About Us</Text>\n</Link>\n\n// Button link\n<Link to=\"/dashboard\">\n <Button type=\"contained\" intent=\"primary\">\n Go to Dashboard\n </Button>\n</Link>\n\n// Card link\n<Link to=\"/article/1\">\n <Card type=\"outlined\" padding=\"md\">\n <Text weight=\"semibold\">Article Title</Text>\n <Text size=\"sm\" color=\"secondary\">Click to read more...</Text>\n </Card>\n</Link>\n\n// Icon + Text link\n<Link to=\"/notifications\">\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>\n <Icon name=\"bell\" size={20} intent=\"primary\" />\n <Text color=\"primary\">Notifications</Text>\n </View>\n</Link>`,\n\n \"with-icons\": `import { Link, View, Icon, Text } from '@idealyst/components';\n\n// Navigation menu item\n<Link to=\"/settings\">\n <View style={{ flexDirection: 'row', alignItems: 'center', padding: 16, gap: 12 }}>\n <Icon name=\"cog\" size={20} intent=\"primary\" />\n <Text style={{ flex: 1 }}>Settings</Text>\n <Icon name=\"chevron-right\" size={16} color=\"gray.500\" />\n </View>\n</Link>\n\n// Icon-only link\n<Link to=\"/search\" accessibilityLabel=\"Search\">\n <Icon name=\"magnify\" size={24} intent=\"primary\" />\n</Link>`,\n\n interactive: `import { Link, Text, Card, View, Icon } from '@idealyst/components';\n\n// Clickable card with navigation\nfunction ArticleCard({ article }) {\n return (\n <Link\n to=\"/article/:id\"\n vars={{ id: article.id }}\n onPress={() => console.log('Navigating to article:', article.id)}\n >\n <Card type=\"elevated\" padding=\"md\">\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 12 }}>\n <Icon name=\"file-document\" size={24} intent=\"primary\" />\n <View style={{ flex: 1 }}>\n <Text weight=\"semibold\">{article.title}</Text>\n <Text size=\"sm\" color=\"secondary\">{article.excerpt}</Text>\n </View>\n <Icon name=\"chevron-right\" size={20} color=\"gray.500\" />\n </View>\n </Card>\n </Link>\n );\n}\n\n// Disabled link\n<Link to=\"/premium\" disabled>\n <Text color=\"secondary\">Premium Feature (Disabled)</Text>\n</Link>\n\n// Styled link container\n<Link\n to=\"/special\"\n style={{\n backgroundColor: '#e3f2fd',\n padding: 12,\n borderRadius: 8,\n }}\n>\n <Text color=\"primary\">Special Offer</Text>\n</Link>`,\n },\n};\n","export const List = {\ncategory: \"display\",\n description: \"Vertical list container with spacing variants, sections, icons, and interactive items\",\n props: `\n- \\`children\\`: React.ReactNode - List items and sections to display\n- \\`type\\`: ListType - The visual style variant of the list\n- \\`size\\`: ListSizeVariant - The size variant of list items\n- \\`gap\\`: Size - Space between children ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`padding\\`: Size - Padding on all sides\n- \\`paddingVertical\\`: Size - Top and bottom padding\n- \\`paddingHorizontal\\`: Size - Left and right padding\n- \\`margin\\`: Size - Margin on all sides\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n- \\`scrollable\\`: boolean - Whether the list is scrollable\n- \\`maxHeight\\`: number | string - Maximum height of the scrollable list\n`,\n features: [\n \"Three visual variants\",\n \"Configurable item sizes\",\n \"Gap variant for spacing between items\",\n \"Padding and margin variants\",\n \"Leading and trailing elements (icons, badges, etc.)\",\n \"Selected and active states\",\n \"Section grouping with titles\",\n \"Indentation for hierarchy\",\n \"Icon support via string names\",\n ],\n bestPractices: [\n \"Use sections to organize related items\",\n \"Use leading icons for visual categorization\",\n \"Use trailing elements for metadata or actions\",\n \"Keep list items concise and scannable\",\n ],\n usage: `\nimport { List, ListItem, ListSection } from '@idealyst/components';\n\n<List type=\"bordered\">\n <ListSection title=\"Main\">\n <ListItem\n label=\"Dashboard\"\n leading=\"home\"\n onPress={() => navigate('/dashboard')}\n />\n <ListItem\n label=\"Settings\"\n leading=\"cog\"\n onPress={() => navigate('/settings')}\n />\n </ListSection>\n</List>\n`,\n examples: {\n basic: `import { List, ListItem } from '@idealyst/components';\n\n<List type=\"divided\">\n <ListItem label=\"Item 1\" />\n <ListItem label=\"Item 2\" />\n <ListItem label=\"Item 3\" />\n</List>`,\n variants: `import { List, ListItem } from '@idealyst/components';\n\n<List type=\"default\">\n <ListItem label=\"Default\" />\n</List>\n\n<List type=\"bordered\">\n <ListItem label=\"Bordered\" />\n</List>\n\n<List type=\"divided\">\n <ListItem label=\"Divided\" />\n</List>`,\n \"with-icons\": `import { List, ListItem, Badge } from '@idealyst/components';\n\n<List type=\"bordered\">\n <ListItem\n label=\"Notifications\"\n leading=\"bell\"\n trailing={<Badge>3</Badge>}\n />\n <ListItem\n label=\"Messages\"\n leading=\"email\"\n trailing={<Badge>12</Badge>}\n />\n</List>`,\n interactive: `import { List, ListItem } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [selected, setSelected] = useState('home');\n\n return (\n <List type=\"bordered\">\n <ListItem\n label=\"Home\"\n leading=\"home\"\n selected={selected === 'home'}\n onPress={() => setSelected('home')}\n />\n <ListItem\n label=\"Profile\"\n leading=\"account\"\n selected={selected === 'profile'}\n onPress={() => setSelected('profile')}\n />\n </List>\n );\n}`,\n }\n};\n","export const Menu = {\n category: \"overlay\",\n description: \"Contextual menu with list of actions, typically triggered by a button or other element\",\n props: `\n- \\`children\\`: React.ReactNode - The trigger element that opens the menu\n- \\`items\\`: MenuItem[] - Array of menu items to display\n- \\`open\\`: boolean - Whether the menu is currently open (controlled)\n- \\`onOpenChange\\`: function - Called when the menu open state changes\n- \\`placement\\`: MenuPlacement - The placement of the menu relative to the trigger\n- \\`closeOnSelection\\`: boolean - Whether to close the menu when an item is selected\n- \\`size\\`: MenuSizeVariant - The size variant of the menu\n`,\n features: [\n \"Icon support for menu items\",\n \"Intent colors for items\",\n \"Separators between items\",\n \"Disabled items\",\n \"Multiple placement options\",\n \"Auto-close on selection\",\n \"Three size options\",\n ],\n bestPractices: [\n \"Use separators to group related actions\",\n \"Place destructive actions at the bottom with error intent\",\n \"Keep menu items concise (1-3 words)\",\n \"Use icons for visual scanning\",\n \"Close menu after action unless multi-select\",\n ],\n usage: `\nimport { Menu, Button } from '@idealyst/components';\nimport { useState, useRef } from 'react';\n\nfunction Example() {\n const [open, setOpen] = useState(false);\n const buttonRef = useRef(null);\n\n const items = [\n { id: '1', label: 'Edit', icon: 'pencil', onClick: () => handleEdit() },\n { id: '2', label: 'Duplicate', icon: 'content-copy', onClick: () => handleDuplicate() },\n { id: '3', label: 'Delete', icon: 'delete', intent: 'error', onClick: () => handleDelete(), separator: true },\n ];\n\n return (\n <>\n <div ref={buttonRef}>\n <Button onPress={() => setOpen(true)}>Actions</Button>\n </div>\n <Menu\n items={items}\n open={open}\n onOpenChange={setOpen}\n anchor={buttonRef}\n placement=\"bottom-start\"\n />\n </>\n );\n}\n`,\n examples: {\n basic: `import { Menu, Button } from '@idealyst/components';\nimport { useRef, useState } from 'react';\n\nconst buttonRef = useRef(null);\nconst [open, setOpen] = useState(false);\n\nconst items = [\n { id: '1', label: 'Option 1', onClick: () => console.log('1') },\n { id: '2', label: 'Option 2', onClick: () => console.log('2') },\n];\n\n<div ref={buttonRef}>\n <Button onPress={() => setOpen(true)}>Menu</Button>\n</div>\n<Menu items={items} open={open} onOpenChange={setOpen} anchor={buttonRef} />`,\n\n variants: `import { Menu } from '@idealyst/components';\n\n// Different sizes\n<Menu items={items} open={open} onOpenChange={setOpen} anchor={ref} size=\"sm\" />\n<Menu items={items} open={open} onOpenChange={setOpen} anchor={ref} size=\"md\" />\n<Menu items={items} open={open} onOpenChange={setOpen} anchor={ref} size=\"lg\" />`,\n\n \"with-icons\": `import { Menu, Button } from '@idealyst/components';\nimport { useRef, useState } from 'react';\n\nconst items = [\n { id: '1', label: 'Profile', icon: 'account', onClick: () => navigate('/profile') },\n { id: '2', label: 'Settings', icon: 'cog', onClick: () => navigate('/settings') },\n { id: '3', label: 'Logout', icon: 'logout', intent: 'error', onClick: () => logout(), separator: true },\n];\n\n<Menu items={items} open={open} onOpenChange={setOpen} anchor={buttonRef} />`,\n\n interactive: `import { Menu, Button, Text, View } from '@idealyst/components';\nimport { useRef, useState } from 'react';\n\nfunction Example() {\n const [open, setOpen] = useState(false);\n const [selected, setSelected] = useState('');\n const buttonRef = useRef(null);\n\n const items = [\n { id: 'edit', label: 'Edit', icon: 'pencil', onClick: () => setSelected('edit') },\n { id: 'share', label: 'Share', icon: 'share', onClick: () => setSelected('share') },\n { id: 'delete', label: 'Delete', icon: 'delete', intent: 'error', onClick: () => setSelected('delete') },\n ];\n\n return (\n <View spacing=\"md\">\n <div ref={buttonRef}>\n <Button onPress={() => setOpen(true)}>Actions</Button>\n </div>\n <Menu\n items={items}\n open={open}\n onOpenChange={setOpen}\n anchor={buttonRef}\n placement=\"bottom-start\"\n />\n {selected && <Text>Selected: {selected}</Text>}\n </View>\n );\n}`,\n },\n};\n","export const Popover = {\n category: \"overlay\",\n description: \"Floating overlay that displays content anchored to an element, useful for tooltips, menus, and contextual information\",\n props: `\n- \\`open\\`: boolean - Whether the popover is open/visible\n- \\`onOpenChange\\`: function - Called when the popover should be opened or closed\n- \\`anchor\\`: React.ReactNode | React.RefObject<Element> - The anchor element to position the popover relative to Can be a React element or a ref to a DOM element\n- \\`children\\`: React.ReactNode - The content to display inside the popover\n- \\`placement\\`: PopoverPlacement - Preferred placement of the popover relative to anchor\n- \\`offset\\`: number - Distance from the anchor element in pixels\n- \\`closeOnClickOutside\\`: boolean - Whether clicking outside should close the popover\n- \\`closeOnEscapeKey\\`: boolean - Whether pressing escape key should close the popover (web only)\n- \\`showArrow\\`: boolean - Whether to show an arrow pointing to the anchor\n`,\n features: [\n \"12 placement options with smart positioning\",\n \"Automatic repositioning on scroll/resize\",\n \"Click outside to close\",\n \"Escape key to close (web)\",\n \"Optional arrow indicator\",\n \"Offset control\",\n \"Accessible with focus management\",\n ],\n bestPractices: [\n \"Use for contextual information that doesn't require immediate action\",\n \"Keep popover content focused and concise\",\n \"Use arrow to clearly indicate relationship to anchor\",\n \"Allow closing via click outside and Escape key\",\n \"Don't nest popovers\",\n \"Consider using Dialog for critical content\",\n ],\n usage: `\nimport { Popover, Button, View, Text } from '@idealyst/components';\nimport { useState, useRef } from 'react';\n\nfunction Example() {\n const [open, setOpen] = useState(false);\n const buttonRef = useRef(null);\n\n return (\n <>\n <div ref={buttonRef}>\n <Button onPress={() => setOpen(true)}>Show Info</Button>\n </div>\n <Popover\n open={open}\n onOpenChange={setOpen}\n anchor={buttonRef}\n placement=\"bottom\"\n showArrow\n >\n <View spacing=\"sm\" style={{ padding: 16 }}>\n <Text weight=\"bold\">Information</Text>\n <Text>Additional context or help text</Text>\n </View>\n </Popover>\n </>\n );\n}\n`,\n examples: {\n basic: `import { Popover, Button, Text } from '@idealyst/components';\nimport { useState, useRef } from 'react';\n\nconst [open, setOpen] = useState(false);\nconst buttonRef = useRef(null);\n\n<div ref={buttonRef}>\n <Button onPress={() => setOpen(true)}>Open</Button>\n</div>\n<Popover open={open} onOpenChange={setOpen} anchor={buttonRef}>\n <Text>Popover content</Text>\n</Popover>`,\n\n variants: `import { Popover, Button, View } from '@idealyst/components';\n\n// Different placements\n<Popover open={open} onOpenChange={setOpen} anchor={ref} placement=\"top\">\n <View>Top</View>\n</Popover>\n<Popover open={open} onOpenChange={setOpen} anchor={ref} placement=\"bottom-start\">\n <View>Bottom Start</View>\n</Popover>\n<Popover open={open} onOpenChange={setOpen} anchor={ref} placement=\"right-end\">\n <View>Right End</View>\n</Popover>`,\n\n \"with-icons\": `import { Popover, Button, View, Icon, Text } from '@idealyst/components';\nimport { useState, useRef } from 'react';\n\nconst buttonRef = useRef(null);\nconst [open, setOpen] = useState(false);\n\n<div ref={buttonRef}>\n <Button icon=\"help-circle\" type=\"text\" onPress={() => setOpen(true)} />\n</div>\n<Popover open={open} onOpenChange={setOpen} anchor={buttonRef} showArrow>\n <View spacing=\"sm\" style={{ padding: 12, maxWidth: 250 }}>\n <View style={{ flexDirection: 'row', gap: 8, alignItems: 'center' }}>\n <Icon name=\"information\" size=\"md\" color=\"primary\" />\n <Text weight=\"bold\">Help</Text>\n </View>\n <Text size=\"sm\">This feature allows you to...</Text>\n </View>\n</Popover>`,\n\n interactive: `import { Popover, Button, View, Text, Input } from '@idealyst/components';\nimport { useState, useRef } from 'react';\n\nfunction Example() {\n const [open, setOpen] = useState(false);\n const [value, setValue] = useState('');\n const buttonRef = useRef(null);\n\n return (\n <View spacing=\"md\">\n <div ref={buttonRef}>\n <Button onPress={() => setOpen(true)}>Edit Name</Button>\n </div>\n\n <Popover\n open={open}\n onOpenChange={setOpen}\n anchor={buttonRef}\n placement=\"bottom-start\"\n closeOnClickOutside={false}\n >\n <View spacing=\"md\" style={{ padding: 16, minWidth: 250 }}>\n <Text weight=\"bold\">Edit Name</Text>\n <Input\n value={value}\n onChangeText={setValue}\n placeholder=\"Enter name\"\n />\n <View style={{ flexDirection: 'row', gap: 8, justifyContent: 'flex-end' }}>\n <Button\n type=\"outlined\"\n size=\"sm\"\n onPress={() => setOpen(false)}\n >\n Cancel\n </Button>\n <Button\n size=\"sm\"\n onPress={() => {\n handleSave(value);\n setOpen(false);\n }}\n >\n Save\n </Button>\n </View>\n </View>\n </Popover>\n </View>\n );\n}`,\n },\n};\n","export const Pressable = {\n category: \"utility\",\n description: \"Wrapper component that detects various press interactions on children with padding variants\",\n props: `\n- \\`children\\`: React.ReactNode - Content to render inside the pressable area\n- \\`onPress\\`: function - Called when the press gesture is activated\n- \\`onPressIn\\`: function - Called when the press gesture starts\n- \\`onPressOut\\`: function - Called when the press gesture ends\n- \\`disabled\\`: boolean - Whether the pressable is disabled\n- \\`padding\\`: Size - Padding on all sides ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`paddingVertical\\`: Size - Top and bottom padding\n- \\`paddingHorizontal\\`: Size - Left and right padding\n`,\n features: [\n \"Press, press-in, press-out callbacks\",\n \"Disabled state\",\n \"Padding variants (uniform and directional)\",\n \"Accessibility support\",\n \"Custom styling\",\n \"Cross-platform support\",\n \"Touch feedback\",\n ],\n bestPractices: [\n \"Use for custom interactive elements\",\n \"Prefer Button for standard button interactions\",\n \"Provide accessibilityLabel for screen readers\",\n \"Use accessibilityRole for semantic meaning\",\n \"Add visual feedback on press\",\n \"Ensure minimum 44x44px touch target\",\n ],\n usage: `\nimport { Pressable, Text, View } from '@idealyst/components';\n\n<Pressable onPress={() => console.log('Pressed')}>\n <View style={{ padding: 16, backgroundColor: '#f0f0f0' }}>\n <Text>Press me</Text>\n </View>\n</Pressable>\n`,\n examples: {\n basic: `import { Pressable, Text } from '@idealyst/components';\n\n<Pressable onPress={() => console.log('Pressed')}>\n <Text>Tap here</Text>\n</Pressable>`,\n\n variants: `import { Pressable, View, Text } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [pressed, setPressed] = useState(false);\n\n return (\n <Pressable\n onPressIn={() => setPressed(true)}\n onPressOut={() => setPressed(false)}\n >\n <View\n style={{\n padding: 16,\n backgroundColor: pressed ? '#e0e0e0' : '#f5f5f5',\n borderRadius: 8,\n }}\n >\n <Text>{pressed ? 'Pressing...' : 'Press me'}</Text>\n </View>\n </Pressable>\n );\n}`,\n\n \"with-icons\": `import { Pressable, View, Icon, Text } from '@idealyst/components';\n\n<Pressable\n onPress={() => handleAction()}\n accessibilityLabel=\"Perform action\"\n accessibilityRole=\"button\"\n>\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n padding: 12,\n backgroundColor: '#f0f0f0',\n borderRadius: 8,\n }}\n >\n <Icon name=\"star\" size=\"md\" color=\"primary\" />\n <Text>Custom Button</Text>\n </View>\n</Pressable>`,\n\n interactive: `import { Pressable, View, Text, Icon } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction CustomCard() {\n const [selected, setSelected] = useState(false);\n\n return (\n <Pressable\n onPress={() => setSelected(!selected)}\n accessibilityLabel=\"Toggle selection\"\n >\n <View\n style={{\n padding: 16,\n backgroundColor: selected ? '#e3f2fd' : '#fff',\n borderWidth: 2,\n borderColor: selected ? '#2196f3' : '#e0e0e0',\n borderRadius: 8,\n }}\n >\n <View style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>\n <View spacing=\"xs\">\n <Text weight=\"bold\">Custom Card</Text>\n <Text size=\"sm\">Tap to {selected ? 'deselect' : 'select'}</Text>\n </View>\n {selected && (\n <Icon name=\"check-circle\" size=\"lg\" color=\"primary\" />\n )}\n </View>\n </View>\n </Pressable>\n );\n}`,\n },\n};\n","export const Progress = {\n category: \"feedback\",\n description: \"Progress indicator showing completion status of tasks or operations\",\n props: `\n- \\`value\\`: number - The current progress value (0 to max)\n- \\`max\\`: number - The maximum value representing 100% completion\n- \\`variant\\`: ProgressVariant - The visual variant (linear or circular)\n- \\`intent\\`: ProgressIntentVariant - The intent/color scheme of the progress bar\n- \\`size\\`: ProgressSizeVariant - The size variant of the progress indicator\n- \\`indeterminate\\`: boolean - Whether to show indeterminate/loading animation\n- \\`showLabel\\`: boolean - Whether to display the percentage label\n- \\`label\\`: string - Custom label text (overrides percentage)\n- \\`rounded\\`: boolean - Whether to use rounded ends for linear progress\n`,\n features: [\n \"Linear and circular variants\",\n \"Determinate and indeterminate modes\",\n \"Five intent colors\",\n \"Three sizes\",\n \"Percentage label support\",\n \"Custom label text\",\n \"Rounded ends option\",\n ],\n bestPractices: [\n \"Use determinate progress when percentage is known\",\n \"Use indeterminate progress for unknown duration\",\n \"Show label for user feedback\",\n \"Use circular variant for compact spaces\",\n \"Match intent to operation context\",\n ],\n usage: `\nimport { Progress } from '@idealyst/components';\n\n<Progress\n value={65}\n variant=\"linear\"\n intent=\"primary\"\n showLabel\n/>\n`,\n examples: {\n basic: `import { Progress } from '@idealyst/components';\n\n<Progress value={50} />`,\n\n variants: `import { Progress, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n <Progress value={30} variant=\"linear\" intent=\"primary\" />\n <Progress value={60} variant=\"linear\" intent=\"success\" />\n <Progress value={value} variant=\"circular\" size=\"lg\" showLabel />\n</View>`,\n\n \"with-icons\": `import { Progress, View, Text } from '@idealyst/components';\n\n<View spacing=\"sm\">\n <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>\n <Text>Uploading...</Text>\n <Text>{progress}%</Text>\n </View>\n <Progress value={progress} intent=\"primary\" />\n</View>`,\n\n interactive: `import { Progress, Button, View, Text } from '@idealyst/components';\nimport { useState, useEffect } from 'react';\n\nfunction Example() {\n const [progress, setProgress] = useState(0);\n const [running, setRunning] = useState(false);\n\n useEffect(() => {\n if (running && progress < 100) {\n const timer = setTimeout(() => setProgress(progress + 10), 500);\n return () => clearTimeout(timer);\n } else if (progress >= 100) {\n setRunning(false);\n }\n }, [progress, running]);\n\n const handleStart = () => {\n setProgress(0);\n setRunning(true);\n };\n\n return (\n <View spacing=\"md\">\n <Progress value={progress} intent=\"success\" showLabel />\n <Button onPress={handleStart} disabled={running}>\n Start\n </Button>\n </View>\n );\n}`,\n },\n};\n","export const RadioButton = {\n category: \"form\",\n description: \"Radio button with margin variants for single-choice selection within a group\",\n props: `\n- \\`value\\`: string - The value of this radio button option\n- \\`checked\\`: boolean - Whether this radio button is selected\n- \\`onPress\\`: function - Called when the radio button is pressed\n- \\`disabled\\`: boolean - Whether the radio button is disabled\n- \\`label\\`: string - Label text to display next to the radio button\n- \\`size\\`: RadioButtonSizeVariant - The size variant of the radio button\n- \\`intent\\`: RadioButtonIntentVariant - The intent/color scheme of the radio button\n- \\`margin\\`: Size - Margin on all sides ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n`,\n features: [\n \"Single selection within group\",\n \"Horizontal and vertical layouts\",\n \"Label support\",\n \"Three sizes\",\n \"Five intent colors\",\n \"Disabled state (individual or group)\",\n \"Controlled component\",\n ],\n bestPractices: [\n \"Use RadioGroup to manage selection state\",\n \"Always provide labels for accessibility\",\n \"Use for mutually exclusive options (3-5 choices)\",\n \"For 2 options, consider Switch or Checkbox\",\n \"For many options (>5), consider Select\",\n \"Group related options visually\",\n ],\n usage: `\nimport { RadioGroup, RadioButton } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [value, setValue] = useState('option1');\n\n return (\n <RadioGroup value={value} onValueChange={setValue}>\n <RadioButton value=\"option1\" label=\"Option 1\" />\n <RadioButton value=\"option2\" label=\"Option 2\" />\n <RadioButton value=\"option3\" label=\"Option 3\" />\n </RadioGroup>\n );\n}\n`,\n examples: {\n basic: `import { RadioGroup, RadioButton } from '@idealyst/components';\n\n<RadioGroup value={selected} onValueChange={setSelected}>\n <RadioButton value=\"a\" label=\"Choice A\" />\n <RadioButton value=\"b\" label=\"Choice B\" />\n</RadioGroup>`,\n\n variants: `import { RadioGroup, RadioButton, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n {/* Vertical (default) */}\n <RadioGroup value={value} onValueChange={setValue}>\n <RadioButton value=\"1\" label=\"Option 1\" />\n <RadioButton value=\"2\" label=\"Option 2\" />\n </RadioGroup>\n\n {/* Horizontal */}\n <RadioGroup value={value} onValueChange={setValue} orientation=\"horizontal\">\n <RadioButton value=\"1\" label=\"Small\" size=\"sm\" />\n <RadioButton value=\"2\" label=\"Medium\" size=\"md\" />\n <RadioButton value=\"3\" label=\"Large\" size=\"lg\" />\n </RadioGroup>\n</View>`,\n\n \"with-icons\": `import { RadioGroup, RadioButton } from '@idealyst/components';\n\n<RadioGroup value={plan} onValueChange={setPlan}>\n <RadioButton\n value=\"free\"\n label=\"Free Plan\"\n intent=\"neutral\"\n />\n <RadioButton\n value=\"pro\"\n label=\"Pro Plan\"\n intent=\"primary\"\n />\n <RadioButton\n value=\"enterprise\"\n label=\"Enterprise Plan\"\n intent=\"success\"\n />\n</RadioGroup>`,\n\n interactive: `import { RadioGroup, RadioButton, View, Text, Card } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [shipping, setShipping] = useState('standard');\n\n const options = [\n { value: 'standard', label: 'Standard (5-7 days)', price: 'Free' },\n { value: 'express', label: 'Express (2-3 days)', price: '$10' },\n { value: 'overnight', label: 'Overnight', price: '$25' },\n ];\n\n return (\n <View spacing=\"md\">\n <Text weight=\"bold\">Select Shipping Method</Text>\n <RadioGroup value={shipping} onValueChange={setShipping}>\n {options.map((option) => (\n <Card\n key={option.value}\n type={shipping === option.value ? 'outlined' : 'elevated'}\n padding=\"sm\"\n clickable\n onPress={() => setShipping(option.value)}\n >\n <View style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>\n <RadioButton\n value={option.value}\n label={option.label}\n checked={shipping === option.value}\n />\n <Text weight=\"bold\">{option.price}</Text>\n </View>\n </Card>\n ))}\n </RadioGroup>\n </View>\n );\n}`,\n },\n};\n","export const Screen = {\n category: \"layout\",\n description: \"Full-screen container component with spacing variants, background variants, and safe area support\",\n props: `\n- \\`children\\`: React.ReactNode - The content to display inside the screen\n- \\`gap\\`: Size - Space between children ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`padding\\`: Size - Padding on all sides\n- \\`paddingVertical\\`: Size - Top and bottom padding\n- \\`paddingHorizontal\\`: Size - Left and right padding\n- \\`margin\\`: Size - Margin on all sides\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n- \\`background\\`: Surface | 'transparent' - Background variant - controls the background color\n- \\`safeArea\\`: boolean - Safe area padding for mobile devices\n- \\`top\\`: number - Content inset padding for scrollable content (mobile only)\n- \\`bottom\\`: number - Bottom content inset padding for scrollable content\n- \\`left\\`: number - Left content inset padding for scrollable content\n- \\`right\\`: number - Right content inset padding for scrollable content\n- \\`scrollable\\`: boolean - Whether the screen content is scrollable\n`,\n features: [\n \"Four background color variants\",\n \"Gap variant for spacing between children\",\n \"Padding variants (uniform and directional)\",\n \"Margin variants (uniform and directional)\",\n \"Safe area support for notches/home indicators\",\n \"Optional scrollable content\",\n \"Full-screen container\",\n \"Cross-platform support\",\n ],\n bestPractices: [\n \"Use as root container for app screens\",\n \"Enable safeArea for mobile apps\",\n \"Use 'primary' background for main content\",\n \"Use 'inverse' background for dark mode or special screens\",\n \"Combine with View for internal spacing\",\n \"Enable scrollable for long content\",\n ],\n usage: `\nimport { Screen, View, Text } from '@idealyst/components';\n\n<Screen background=\"primary\" padding=\"md\" safeArea>\n <View spacing=\"lg\">\n <Text size=\"xl\" weight=\"bold\">Screen Title</Text>\n <Text>Screen content goes here</Text>\n </View>\n</Screen>\n`,\n examples: {\n basic: `import { Screen, Text } from '@idealyst/components';\n\n<Screen background=\"primary\" padding=\"md\">\n <Text>Basic screen content</Text>\n</Screen>`,\n\n variants: `import { Screen, Text } from '@idealyst/components';\n\n// Different backgrounds\n<Screen background=\"primary\"><Text>Primary</Text></Screen>\n<Screen background=\"secondary\"><Text>Secondary</Text></Screen>\n<Screen background=\"tertiary\"><Text>Tertiary</Text></Screen>\n<Screen background=\"inverse\"><Text>Inverse</Text></Screen>`,\n\n \"with-icons\": `import { Screen, View, Icon, Text } from '@idealyst/components';\n\n<Screen background=\"primary\" padding=\"lg\" safeArea>\n <View spacing=\"md\">\n <View style={{ alignItems: 'center' }}>\n <Icon name=\"check-circle\" size=\"xl\" color=\"success\" />\n </View>\n <Text align=\"center\" size=\"xl\" weight=\"bold\">\n Success!\n </Text>\n <Text align=\"center\">\n Your action was completed successfully\n </Text>\n </View>\n</Screen>`,\n\n interactive: `import { Screen, View, Text, Button } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [darkMode, setDarkMode] = useState(false);\n\n return (\n <Screen\n background={darkMode ? 'inverse' : 'primary'}\n padding=\"md\"\n safeArea\n scrollable\n >\n <View spacing=\"lg\">\n <Text size=\"xl\" weight=\"bold\">\n Settings\n </Text>\n <Button\n onPress={() => setDarkMode(!darkMode)}\n type=\"outlined\"\n >\n Toggle {darkMode ? 'Light' : 'Dark'} Mode\n </Button>\n <Text>\n Current theme: {darkMode ? 'Dark' : 'Light'}\n </Text>\n </View>\n </Screen>\n );\n}`,\n },\n};\n","export const Select = {\n category: \"form\",\n description: \"Dropdown select component with margin variants for choosing from a list of options\",\n props: `\n- \\`options\\`: SelectOption[] - Array of options to display in the select\n- \\`value\\`: string - The currently selected value\n- \\`onValueChange\\`: function - Called when the selected value changes\n- \\`placeholder\\`: string - Placeholder text when no value is selected\n- \\`disabled\\`: boolean - Whether the select is disabled\n- \\`error\\`: boolean - Whether the select shows an error state\n- \\`helperText\\`: string - Helper text to display below the select\n- \\`label\\`: string - Label text to display above the select\n- \\`intent\\`: SelectIntentVariant - The intent/color scheme of the select\n- \\`size\\`: SelectSizeVariant - The size of the select\n- \\`margin\\`: Size - Margin on all sides ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n- \\`searchable\\`: boolean - Whether to show a search/filter input (web only)\n- \\`filterOption\\`: (option: SelectOption, searchTerm: string) => boolean - Custom search filter function (used with searchable)\n- \\`presentationMode\\`: 'dropdown' | 'actionSheet' - Native iOS presentation mode (native only)\n- \\`maxHeight\\`: number - Maximum height for the dropdown content\n`,\n features: [\n \"Single selection from options\",\n \"Searchable dropdown (web)\",\n \"Icon support for options\",\n \"Two visual variants\",\n \"Label and helper text\",\n \"Error state\",\n \"Disabled options\",\n \"Custom filtering\",\n \"Platform-specific presentation modes\",\n ],\n bestPractices: [\n \"Use for 5+ options (use RadioGroup for fewer)\",\n \"Enable searchable for long option lists\",\n \"Provide clear placeholder text\",\n \"Group related options visually\",\n \"Show error states inline with helperText\",\n \"Consider icons for visual categorization\",\n ],\n usage: `\nimport { Select } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [value, setValue] = useState('');\n\n const options = [\n { value: 'us', label: 'United States' },\n { value: 'ca', label: 'Canada' },\n { value: 'uk', label: 'United Kingdom' },\n ];\n\n return (\n <Select\n label=\"Country\"\n options={options}\n value={value}\n onValueChange={setValue}\n placeholder=\"Select a country\"\n />\n );\n}\n`,\n examples: {\n basic: `import { Select } from '@idealyst/components';\n\nconst options = [\n { value: '1', label: 'Option 1' },\n { value: '2', label: 'Option 2' },\n];\n\n<Select options={options} placeholder=\"Choose...\" />`,\n\n variants: `import { Select, View } from '@idealyst/components';\n\nconst options = [{ value: '1', label: 'Option' }];\n\n<View spacing=\"md\">\n <Select options={options} type=\"outlined\" size=\"sm\" />\n <Select options={options} type=\"filled\" size=\"md\" />\n <Select options={options} type=\"outlined\" size=\"lg\" />\n</View>`,\n\n \"with-icons\": `import { Select } from '@idealyst/components';\n\nconst options = [\n { value: 'light', label: 'Light Mode', icon: <Icon name=\"white-balance-sunny\" /> },\n { value: 'dark', label: 'Dark Mode', icon: <Icon name=\"weather-night\" /> },\n { value: 'auto', label: 'Auto', icon: <Icon name=\"brightness-auto\" /> },\n];\n\n<Select\n label=\"Theme\"\n options={options}\n value={theme}\n onValueChange={setTheme}\n/>`,\n\n interactive: `import { Select, View, Text } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [country, setCountry] = useState('');\n const [error, setError] = useState('');\n\n const countries = [\n { value: 'us', label: 'United States' },\n { value: 'ca', label: 'Canada' },\n { value: 'uk', label: 'United Kingdom' },\n { value: 'au', label: 'Australia' },\n ];\n\n const handleChange = (value: string) => {\n setCountry(value);\n setError('');\n };\n\n const handleSubmit = () => {\n if (!country) {\n setError('Please select a country');\n }\n };\n\n return (\n <View spacing=\"md\">\n <Select\n label=\"Country\"\n options={countries}\n value={country}\n onValueChange={handleChange}\n placeholder=\"Select your country\"\n error={!!error}\n helperText={error || 'Choose your country of residence'}\n searchable\n />\n <Button onPress={handleSubmit}>Submit</Button>\n </View>\n );\n}`,\n },\n};\n","export const Skeleton = {\n category: \"feedback\",\n description: \"Loading placeholder that mimics content structure while data loads\",\n props: `\n- \\`width\\`: number | string - Width of the skeleton (number in pixels or string with units)\n- \\`height\\`: number | string - Height of the skeleton (number in pixels or string with units)\n- \\`shape\\`: SkeletonShape - Shape of the skeleton\n- \\`borderRadius\\`: number - Border radius for 'rounded' shape (in pixels)\n- \\`animation\\`: SkeletonAnimation - Animation type\n`,\n features: [\n \"Three shapes: rectangle, circle, rounded\",\n \"Three animation types\",\n \"Configurable dimensions\",\n \"Group component for multiple skeletons\",\n \"Customizable spacing\",\n \"Mimics content structure\",\n ],\n bestPractices: [\n \"Match skeleton shape to actual content\",\n \"Use pulse animation for general loading\",\n \"Use wave animation for feed-like content\",\n \"Show skeleton while data is loading\",\n \"Replace skeleton with actual content smoothly\",\n \"Use SkeletonGroup for consistent layouts\",\n ],\n usage: `\nimport { Skeleton, SkeletonGroup } from '@idealyst/components';\n\n// Single skeleton\n<Skeleton width={200} height={20} shape=\"rounded\" />\n\n// Multiple skeletons\n<SkeletonGroup\n count={3}\n spacing={16}\n skeletonProps={{ width: '100%', height: 60, shape: 'rounded' }}\n/>\n`,\n examples: {\n basic: `import { Skeleton } from '@idealyst/components';\n\n<Skeleton width={150} height={20} />`,\n\n variants: `import { Skeleton, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n <Skeleton width=\"100%\" height={20} shape=\"rectangle\" />\n <Skeleton width={100} height={100} shape=\"circle\" />\n <Skeleton width={200} height={40} shape=\"rounded\" />\n</View>`,\n\n \"with-icons\": `import { Skeleton, View } from '@idealyst/components';\n\n// Mimicking a user card\n<View style={{ flexDirection: 'row', gap: 12, alignItems: 'center' }}>\n <Skeleton width={48} height={48} shape=\"circle\" />\n <View spacing=\"sm\" style={{ flex: 1 }}>\n <Skeleton width=\"60%\" height={16} />\n <Skeleton width=\"40%\" height={14} />\n </View>\n</View>`,\n\n interactive: `import { Skeleton, SkeletonGroup, View, Card, Text, Button } from '@idealyst/components';\nimport { useState, useEffect } from 'react';\n\nfunction Example() {\n const [loading, setLoading] = useState(true);\n const [data, setData] = useState(null);\n\n useEffect(() => {\n setTimeout(() => {\n setData({ title: 'Article Title', content: 'Article content...' });\n setLoading(false);\n }, 2000);\n }, []);\n\n if (loading) {\n return (\n <Card padding=\"md\">\n <View spacing=\"md\">\n <Skeleton width=\"80%\" height={24} shape=\"rounded\" />\n <SkeletonGroup\n count={3}\n skeletonProps={{ width: '100%', height: 16 }}\n />\n </View>\n </Card>\n );\n }\n\n return (\n <Card padding=\"md\">\n <View spacing=\"md\">\n <Text size=\"lg\" weight=\"bold\">{data.title}</Text>\n <Text>{data.content}</Text>\n </View>\n </Card>\n );\n}`,\n },\n};\n","export const Slider = {\n category: \"form\",\n description: \"Input slider with margin variants for selecting numeric values from a range\",\n props: `\n- \\`value\\`: number - The current value of the slider (controlled)\n- \\`defaultValue\\`: number - The default value for uncontrolled usage\n- \\`min\\`: number - The minimum value of the slider range\n- \\`max\\`: number - The maximum value of the slider range\n- \\`step\\`: number - The increment step when moving the slider\n- \\`disabled\\`: boolean - Whether the slider is disabled\n- \\`showValue\\`: boolean - Whether to display the current value\n- \\`showMinMax\\`: boolean - Whether to show min and max labels\n- \\`marks\\`: SliderMark[] - Array of marks to display on the slider track\n- \\`intent\\`: SliderIntentVariant - The intent/color scheme of the slider\n- \\`size\\`: SliderSizeVariant - The size variant of the slider\n- \\`margin\\`: Size - Margin on all sides ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n- \\`icon\\`: IconName | React.ReactNode - Icon to display in the slider thumb\n- \\`onValueChange\\`: function - Called when the slider value changes during dragging\n- \\`onValueCommit\\`: function - Called when the user finishes changing the value (on release)\n`,\n features: [\n \"Controlled and uncontrolled modes\",\n \"Min/max value constraints\",\n \"Step increment\",\n \"Custom marks\",\n \"Value display\",\n \"Min/max labels\",\n \"Three sizes\",\n \"Five intent colors\",\n \"Icon support in thumb\",\n \"Change and commit callbacks\",\n ],\n bestPractices: [\n \"Use for continuous numeric values\",\n \"Show current value for user feedback\",\n \"Use marks for important values\",\n \"Set appropriate step size for precision\",\n \"Use onValueCommit for expensive operations\",\n \"Provide min/max labels for context\",\n ],\n usage: `\nimport { Slider } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [value, setValue] = useState(50);\n\n return (\n <Slider\n value={value}\n onValueChange={setValue}\n min={0}\n max={100}\n step={5}\n showValue\n showMinMax\n />\n );\n}\n`,\n examples: {\n basic: `import { Slider } from '@idealyst/components';\n\n<Slider min={0} max={100} defaultValue={50} />`,\n\n variants: `import { Slider, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n <Slider size=\"sm\" value={25} />\n <Slider size=\"md\" value={50} />\n <Slider size=\"lg\" value={75} />\n</View>`,\n\n \"with-icons\": `import { Slider, View, Text, Icon } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction VolumeControl() {\n const [volume, setVolume] = useState(50);\n\n return (\n <View spacing=\"sm\">\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 12 }}>\n <Icon name=\"volume-low\" size=\"md\" />\n <Slider\n value={volume}\n onValueChange={setVolume}\n min={0}\n max={100}\n icon=\"volume-medium\"\n style={{ flex: 1 }}\n />\n <Icon name=\"volume-high\" size=\"md\" />\n </View>\n <Text align=\"center\">{volume}%</Text>\n </View>\n );\n}\n\n// Brightness control with icon in thumb\nfunction BrightnessControl() {\n const [brightness, setBrightness] = useState(75);\n\n return (\n <View spacing=\"sm\">\n <Text>Brightness: {brightness}%</Text>\n <Slider\n value={brightness}\n onValueChange={setBrightness}\n min={0}\n max={100}\n icon=\"brightness-6\"\n intent=\"warning\"\n showMinMax\n />\n </View>\n );\n}`,\n\n interactive: `import { Slider, View, Text, Button } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [price, setPrice] = useState(50);\n\n const marks = [\n { value: 0, label: '$0' },\n { value: 50, label: '$50' },\n { value: 100, label: '$100' },\n ];\n\n return (\n <View spacing=\"md\">\n <Text weight=\"bold\">Price Range: \\${price}</Text>\n <Slider\n value={price}\n onValueChange={setPrice}\n min={0}\n max={100}\n step={5}\n marks={marks}\n showValue\n intent=\"primary\"\n />\n <Button onPress={() => console.log('Filter:', price)}>\n Apply Filter\n </Button>\n </View>\n );\n}`,\n },\n};\n","export const SVGImage = {\n category: \"media\",\n description: \"SVG image component with color, size, and intent support\",\n props: `\n- \\`source\\`: string | { uri: string } | React.FC<SvgProps> - SVG source (local file, URL, or component)\n- \\`width\\`: number | string - Image width\n- \\`height\\`: number | string - Image height\n- \\`size\\`: number | string - Sets both width and height\n- \\`color\\`: string - Custom color override\n- \\`intent\\`: IntentNames - Theme intent color\n- \\`resizeMode\\`: 'contain' | 'cover' | 'stretch' - How SVG fits container\n- \\`style\\`: ViewProps - Additional styles\n`,\n features: [\n \"Multiple source types (file, URL, component)\",\n \"Size and dimension control\",\n \"Color customization\",\n \"Theme intent colors\",\n \"Resize modes\",\n \"Cross-platform support\",\n ],\n bestPractices: [\n \"Use local SVG files for icons and logos\",\n \"Use remote URLs for dynamic SVGs\",\n \"Set explicit size for consistent rendering\",\n \"Use intent colors for theme consistency\",\n \"Prefer 'contain' resizeMode to preserve aspect ratio\",\n \"Optimize SVG files for web performance\",\n ],\n usage: `\nimport { SVGImage } from '@idealyst/components';\nimport LogoIcon from './assets/logo.svg';\n\n// Local SVG file\n<SVGImage source={LogoIcon} size={48} intent=\"primary\" />\n\n// Remote SVG\n<SVGImage\n source={{ uri: 'https://cdn.example.com/icon.svg' }}\n width={32}\n height={32}\n color=\"#FF0000\"\n/>\n`,\n examples: {\n basic: `import { SVGImage } from '@idealyst/components';\nimport Icon from './icon.svg';\n\n<SVGImage source={Icon} size={24} />`,\n\n variants: `import { SVGImage, View } from '@idealyst/components';\nimport Logo from './logo.svg';\n\n<View style={{ flexDirection: 'row', gap: 16, alignItems: 'center' }}>\n <SVGImage source={Logo} size={24} />\n <SVGImage source={Logo} size={32} />\n <SVGImage source={Logo} size={48} />\n <SVGImage source={Logo} size={64} />\n</View>`,\n\n \"with-icons\": `import { SVGImage, View, Text } from '@idealyst/components';\nimport ReactLogo from './react-logo.svg';\n\n<View style={{ flexDirection: 'row', alignItems: 'center', gap: 12 }}>\n <SVGImage source={ReactLogo} size={32} color=\"#61dafb\" />\n <View spacing=\"xs\">\n <Text weight=\"bold\">React Application</Text>\n <Text size=\"sm\">Built with React & React Native</Text>\n </View>\n</View>`,\n\n interactive: `import { SVGImage, View, Button, Text } from '@idealyst/components';\nimport { useState } from 'react';\nimport AppIcon from './app-icon.svg';\n\nfunction Example() {\n const [size, setSize] = useState(48);\n const [intent, setIntent] = useState('primary');\n\n const intents = ['primary', 'neutral', 'success', 'error', 'warning'];\n\n return (\n <View spacing=\"md\" style={{ alignItems: 'center' }}>\n <SVGImage source={AppIcon} size={size} intent={intent} />\n\n <View style={{ flexDirection: 'row', gap: 8 }}>\n <Button size=\"sm\" onPress={() => setSize(Math.max(24, size - 12))}>\n Smaller\n </Button>\n <Button size=\"sm\" onPress={() => setSize(Math.min(96, size + 12))}>\n Larger\n </Button>\n </View>\n\n <View spacing=\"xs\">\n <Text size=\"sm\">Intent:</Text>\n <View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>\n {intents.map((i) => (\n <Button\n key={i}\n size=\"sm\"\n variant={intent === i ? 'contained' : 'outlined'}\n onPress={() => setIntent(i)}\n >\n {i}\n </Button>\n ))}\n </View>\n </View>\n </View>\n );\n}`,\n },\n};\n","export const Switch = {\n category: \"form\",\n description: \"Toggle switch with margin variants for binary on/off states\",\n props: `\n- \\`checked\\`: boolean - Whether the switch is in the on/checked state\n- \\`onCheckedChange\\`: function - Called when the switch state changes\n- \\`disabled\\`: boolean - Whether the switch is disabled\n- \\`label\\`: string - Label text to display next to the switch\n- \\`labelPosition\\`: 'left' | 'right' - Position of the label relative to the switch\n- \\`intent\\`: SwitchIntentVariant - The intent/color scheme of the switch\n- \\`size\\`: SwitchSizeVariant - The size variant of the switch\n- \\`margin\\`: Size - Margin on all sides ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n- \\`enabledIcon\\`: IconName | React.ReactNode - Icon to display when switch is on\n- \\`disabledIcon\\`: IconName | React.ReactNode - Icon to display when switch is off\n`,\n features: [\n \"Binary on/off toggle\",\n \"Label with configurable position\",\n \"Three sizes\",\n \"Five intent colors\",\n \"Custom icons for states\",\n \"Disabled state\",\n \"Animated transition\",\n ],\n bestPractices: [\n \"Use for binary settings (on/off, enabled/disabled)\",\n \"Provide clear labels\",\n \"Use intent colors to indicate state meaning\",\n \"Place label on left for form layouts\",\n \"Use icons sparingly for clarity\",\n \"Immediate effect - no submit button needed\",\n ],\n usage: `\nimport { Switch } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [enabled, setEnabled] = useState(false);\n\n return (\n <Switch\n checked={enabled}\n onCheckedChange={setEnabled}\n label=\"Enable notifications\"\n intent=\"primary\"\n />\n );\n}\n`,\n examples: {\n basic: `import { Switch } from '@idealyst/components';\n\n<Switch label=\"Enable feature\" />`,\n\n variants: `import { Switch, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n <Switch label=\"Small\" size=\"sm\" checked />\n <Switch label=\"Medium\" size=\"md\" checked />\n <Switch label=\"Large\" size=\"lg\" checked />\n</View>`,\n\n \"with-icons\": `import { Switch, View } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [darkMode, setDarkMode] = useState(false);\n\n return (\n <Switch\n checked={darkMode}\n onCheckedChange={setDarkMode}\n label=\"Dark Mode\"\n enabledIcon=\"weather-night\"\n disabledIcon=\"white-balance-sunny\"\n intent=\"primary\"\n />\n );\n}`,\n\n interactive: `import { Switch, View, Text, Card } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction SettingsPanel() {\n const [settings, setSettings] = useState({\n notifications: true,\n location: false,\n analytics: true,\n });\n\n const toggle = (key: string) => {\n setSettings({ ...settings, [key]: !settings[key] });\n };\n\n return (\n <Card type=\"outlined\" padding=\"md\">\n <View spacing=\"md\">\n <Text weight=\"bold\">Privacy Settings</Text>\n\n <Switch\n checked={settings.notifications}\n onCheckedChange={() => toggle('notifications')}\n label=\"Push Notifications\"\n labelPosition=\"left\"\n intent=\"primary\"\n />\n\n <Switch\n checked={settings.location}\n onCheckedChange={() => toggle('location')}\n label=\"Location Services\"\n labelPosition=\"left\"\n intent=\"warning\"\n />\n\n <Switch\n checked={settings.analytics}\n onCheckedChange={() => toggle('analytics')}\n label=\"Analytics & Data\"\n labelPosition=\"left\"\n intent=\"neutral\"\n />\n </View>\n </Card>\n );\n}`,\n },\n};\n","export const TabBar = {\n category: \"navigation\",\n description: \"Tab bar navigation component with icons, layout options, and spacing variants for switching between views or sections\",\n props: `\n- \\`items\\`: TabBarItem[] - Array of tab items to display\n - \\`value\\`: string - Unique identifier for the tab\n - \\`label\\`: string - Display text for the tab\n - \\`icon\\`: ReactNode | ((props: { active: boolean; size: number }) => ReactNode) - Optional icon\n - \\`disabled\\`: boolean - Whether the tab is disabled\n- \\`value\\`: string - The currently selected tab value (controlled)\n- \\`defaultValue\\`: string - The default selected tab for uncontrolled usage\n- \\`onChange\\`: function - Called when the selected tab changes\n- \\`type\\`: 'standard' | 'pills' | 'underline' - The visual style variant\n- \\`size\\`: 'xs' | 'sm' | 'md' | 'lg' | 'xl' - The size variant of the tabs\n- \\`iconPosition\\`: 'left' | 'top' - Position of icon relative to label (default: 'left')\n- \\`justify\\`: 'start' | 'center' | 'equal' | 'space-between' - Layout justification (default: 'start')\n- \\`pillMode\\`: 'light' | 'dark' - Mode for pills variant\n- \\`gap\\`: Size - Space between tabs\n- \\`padding\\`: Size - Padding on all sides\n- \\`paddingVertical\\`: Size - Top and bottom padding\n- \\`paddingHorizontal\\`: Size - Left and right padding\n- \\`margin\\`: Size - Margin on all sides\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n`,\n features: [\n \"Three visual variants (standard, pills, underline)\",\n \"Icon support with render function for active state\",\n \"Icon position: left (horizontal) or top (stacked)\",\n \"Layout justification: start, center, equal, space-between\",\n \"Controlled and uncontrolled modes\",\n \"Five sizes (xs, sm, md, lg, xl)\",\n \"Gap, padding, and margin variants\",\n \"Disabled tabs\",\n ],\n bestPractices: [\n \"Use 'underline' variant for page-level navigation\",\n \"Use 'pills' variant for contained sections\",\n \"Use justify='equal' with iconPosition='top' for bottom navigation style\",\n \"Use icon render function to change color based on active state\",\n \"Keep tab labels short (1-2 words)\",\n \"Use 3-5 tabs for optimal UX\",\n \"Disable tabs when content is unavailable\",\n ],\n usage: `\nimport { TabBar } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [activeTab, setActiveTab] = useState('home');\n\n const items = [\n { value: 'home', label: 'Home' },\n { value: 'profile', label: 'Profile' },\n { value: 'settings', label: 'Settings' },\n ];\n\n return (\n <TabBar\n items={items}\n value={activeTab}\n onChange={setActiveTab}\n type=\"underline\"\n />\n );\n}\n`,\n examples: {\n basic: `import { TabBar } from '@idealyst/components';\n\nconst items = [\n { value: '1', label: 'Tab 1' },\n { value: '2', label: 'Tab 2' },\n];\n\n<TabBar items={items} defaultValue=\"1\" />`,\n\n variants: `import { TabBar, View } from '@idealyst/components';\n\nconst items = [\n { value: 'a', label: 'First' },\n { value: 'b', label: 'Second' },\n];\n\n<View gap=\"md\">\n <TabBar items={items} type=\"standard\" />\n <TabBar items={items} type=\"pills\" />\n <TabBar items={items} type=\"underline\" />\n</View>`,\n\n \"with-icons\": `import { TabBar, View, Icon } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [tab, setTab] = useState('home');\n\n const items = [\n {\n value: 'home',\n label: 'Home',\n icon: ({ active, size }) => (\n <Icon name=\"home\" size={size} color={active ? 'primary' : 'secondary'} />\n ),\n },\n {\n value: 'search',\n label: 'Search',\n icon: ({ active, size }) => (\n <Icon name=\"magnify\" size={size} color={active ? 'primary' : 'secondary'} />\n ),\n },\n {\n value: 'profile',\n label: 'Profile',\n icon: ({ active, size }) => (\n <Icon name=\"account\" size={size} color={active ? 'primary' : 'secondary'} />\n ),\n },\n ];\n\n return (\n <View gap=\"md\">\n {/* Icons on left (default) */}\n <TabBar items={items} value={tab} onChange={setTab} iconPosition=\"left\" />\n\n {/* Icons on top (stacked) */}\n <TabBar items={items} value={tab} onChange={setTab} iconPosition=\"top\" />\n </View>\n );\n}`,\n\n interactive: `import { TabBar, View, Text, Card } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [activeTab, setActiveTab] = useState('personal');\n\n const items = [\n { value: 'personal', label: 'Personal Info' },\n { value: 'security', label: 'Security' },\n { value: 'notifications', label: 'Notifications' },\n { value: 'billing', label: 'Billing', disabled: true },\n ];\n\n const renderContent = () => {\n switch (activeTab) {\n case 'personal':\n return <Text>Personal information settings</Text>;\n case 'security':\n return <Text>Security and privacy settings</Text>;\n case 'notifications':\n return <Text>Notification preferences</Text>;\n default:\n return null;\n }\n };\n\n return (\n <View gap=\"md\">\n <TabBar\n items={items}\n value={activeTab}\n onChange={setActiveTab}\n type=\"pills\"\n />\n <Card type=\"outlined\" padding=\"md\">\n {renderContent()}\n </Card>\n </View>\n );\n}`,\n\n justify: `import { TabBar, View, Text } from '@idealyst/components';\n\nconst items = [\n { value: 'tab1', label: 'Tab 1' },\n { value: 'tab2', label: 'Tab 2' },\n { value: 'tab3', label: 'Tab 3' },\n];\n\n<View gap=\"md\">\n {/* Left aligned (default) */}\n <Text typography=\"caption\">justify=\"start\"</Text>\n <TabBar items={items} justify=\"start\" />\n\n {/* Centered */}\n <Text typography=\"caption\">justify=\"center\"</Text>\n <TabBar items={items} justify=\"center\" />\n\n {/* Full width, equal sized tabs */}\n <Text typography=\"caption\">justify=\"equal\"</Text>\n <TabBar items={items} justify=\"equal\" />\n\n {/* Space between tabs */}\n <Text typography=\"caption\">justify=\"space-between\"</Text>\n <TabBar items={items} justify=\"space-between\" />\n</View>`,\n\n \"bottom-nav\": `import { TabBar, Icon } from '@idealyst/components';\nimport { useState } from 'react';\n\n// Bottom navigation style: full width with stacked icons\nfunction BottomNav() {\n const [tab, setTab] = useState('home');\n\n const items = [\n {\n value: 'home',\n label: 'Home',\n icon: ({ active, size }) => (\n <Icon name=\"home\" size={size} color={active ? 'primary' : 'secondary'} />\n ),\n },\n {\n value: 'search',\n label: 'Search',\n icon: ({ active, size }) => (\n <Icon name=\"magnify\" size={size} color={active ? 'primary' : 'secondary'} />\n ),\n },\n {\n value: 'notifications',\n label: 'Alerts',\n icon: ({ active, size }) => (\n <Icon name=\"bell\" size={size} color={active ? 'primary' : 'secondary'} />\n ),\n },\n {\n value: 'profile',\n label: 'Profile',\n icon: ({ active, size }) => (\n <Icon name=\"account\" size={size} color={active ? 'primary' : 'secondary'} />\n ),\n },\n ];\n\n return (\n <TabBar\n items={items}\n value={tab}\n onChange={setTab}\n justify=\"equal\"\n iconPosition=\"top\"\n />\n );\n}`,\n },\n};\n","export const Table = {\n category: \"data\",\n description: \"Data table component with spacing variants for displaying structured tabular data\",\n props: `\n- \\`columns\\`: TableColumn<T>[] - Column definitions\n - \\`key\\`: string - Unique column key\n - \\`title\\`: string - Column header title\n - \\`dataIndex\\`: string - Key in data object (optional)\n - \\`render\\`: (value, row, index) => ReactNode - Custom cell renderer\n - \\`width\\`: number | string - Column width\n - \\`align\\`: 'left' | 'center' | 'right' - Text alignment\n- \\`data\\`: T[] - Array of data objects\n- \\`variant\\`: 'default' | 'bordered' | 'striped' - Visual style\n- \\`size\\`: 'sm' | 'md' | 'lg' - Cell padding/size\n- \\`gap\\`: Size - Space between table elements ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`padding\\`: Size - Padding on all sides\n- \\`paddingVertical\\`: Size - Top and bottom padding\n- \\`paddingHorizontal\\`: Size - Left and right padding\n- \\`margin\\`: Size - Margin on all sides\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n- \\`stickyHeader\\`: boolean - Keep header fixed on scroll\n- \\`onRowPress\\`: (row: T, index: number) => void - Row click handler\n- \\`style\\`: ViewStyle - Additional styles\n- \\`testID\\`: string - Test identifier\n`,\n features: [\n \"Column-based configuration\",\n \"Custom cell renderers\",\n \"Three visual variants\",\n \"Three sizes\",\n \"Gap, padding, and margin variants\",\n \"Sticky header support\",\n \"Row click handling\",\n \"Column alignment\",\n \"Custom column widths\",\n ],\n bestPractices: [\n \"Use render function for complex cell content\",\n \"Enable stickyHeader for long tables\",\n \"Use 'striped' variant for better readability\",\n \"Set column widths for important columns\",\n \"Keep column count reasonable for mobile\",\n \"Use appropriate size for data density\",\n ],\n usage: `\nimport { Table } from '@idealyst/components';\n\nconst columns = [\n { key: 'name', title: 'Name', dataIndex: 'name' },\n { key: 'email', title: 'Email', dataIndex: 'email' },\n {\n key: 'status',\n title: 'Status',\n render: (_, row) => <Badge>{row.status}</Badge>,\n },\n];\n\nconst data = [\n { id: 1, name: 'John Doe', email: 'john@example.com', status: 'Active' },\n { id: 2, name: 'Jane Smith', email: 'jane@example.com', status: 'Inactive' },\n];\n\n<Table columns={columns} data={data} variant=\"striped\" />\n`,\n examples: {\n basic: `import { Table } from '@idealyst/components';\n\nconst columns = [\n { key: 'id', title: 'ID', dataIndex: 'id' },\n { key: 'name', title: 'Name', dataIndex: 'name' },\n];\n\nconst data = [\n { id: 1, name: 'Item 1' },\n { id: 2, name: 'Item 2' },\n];\n\n<Table columns={columns} data={data} />`,\n\n variants: `import { Table, View } from '@idealyst/components';\n\nconst columns = [{ key: 'name', title: 'Name', dataIndex: 'name' }];\nconst data = [{ name: 'Test' }];\n\n<View spacing=\"md\">\n <Table columns={columns} data={data} variant=\"default\" />\n <Table columns={columns} data={data} variant=\"bordered\" />\n <Table columns={columns} data={data} variant=\"striped\" />\n</View>`,\n\n \"with-icons\": `import { Table, Badge, Icon, View, Text } from '@idealyst/components';\n\nconst columns = [\n {\n key: 'user',\n title: 'User',\n render: (_, row) => (\n <View style={{ flexDirection: 'row', gap: 8, alignItems: 'center' }}>\n <Icon name=\"account-circle\" size=\"sm\" />\n <Text>{row.name}</Text>\n </View>\n ),\n },\n {\n key: 'status',\n title: 'Status',\n render: (_, row) => (\n <Badge color={row.active ? 'green' : 'gray'}>\n {row.active ? 'Active' : 'Inactive'}\n </Badge>\n ),\n },\n];\n\n<Table columns={columns} data={users} />`,\n\n interactive: `import { Table, Button, View, Text } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [selected, setSelected] = useState(null);\n\n const columns = [\n { key: 'id', title: 'ID', dataIndex: 'id', width: 60 },\n { key: 'product', title: 'Product', dataIndex: 'name' },\n { key: 'price', title: 'Price', dataIndex: 'price', align: 'right' },\n {\n key: 'actions',\n title: 'Actions',\n render: (_, row) => (\n <Button\n size=\"sm\"\n variant=\"outlined\"\n onPress={() => setSelected(row)}\n >\n View\n </Button>\n ),\n },\n ];\n\n const data = [\n { id: 1, name: 'Product A', price: '$29.99' },\n { id: 2, name: 'Product B', price: '$49.99' },\n ];\n\n return (\n <View spacing=\"md\">\n <Table\n columns={columns}\n data={data}\n variant=\"bordered\"\n onRowPress={(row) => setSelected(row)}\n />\n {selected && <Text>Selected: {selected.name}</Text>}\n </View>\n );\n}`,\n },\n};\n","export const Tabs = {\n category: \"navigation\",\n description: \"Tabs component with content panels for organizing information into tabbed sections\",\n props: `\nTab Props:\n- \\`value\\`: string - Unique tab identifier\n- \\`label\\`: string - Tab label text\n- \\`disabled\\`: boolean - Whether tab is disabled\n- \\`children\\`: ReactNode - Tab panel content\n\nTabs Props:\n- \\`value\\`: string - Currently active tab value\n- \\`defaultValue\\`: string - Default tab (uncontrolled)\n- \\`onChange\\`: (value: string) => void - Tab change handler\n- \\`variant\\`: 'default' | 'pills' | 'underline' - Visual style\n- \\`size\\`: 'sm' | 'md' | 'lg' - Tab size\n- \\`intent\\`: 'primary' | 'neutral' | 'success' | 'error' | 'warning' - Color scheme\n- \\`style\\`: ViewStyle - Additional styles\n- \\`testID\\`: string - Test identifier\n- \\`children\\`: ReactNode - Tab components\n`,\n features: [\n \"Integrated tab navigation and content panels\",\n \"Three visual variants\",\n \"Controlled and uncontrolled modes\",\n \"Three sizes\",\n \"Five intent colors\",\n \"Disabled tabs\",\n \"Automatic content switching\",\n ],\n bestPractices: [\n \"Use Tabs for content that belongs together\",\n \"Use TabBar for navigation without content management\",\n \"Keep 3-5 tabs for optimal UX\",\n \"Lazy load tab content if heavy\",\n \"Use descriptive tab labels\",\n \"Consider vertical tabs for many options\",\n ],\n usage: `\nimport { Tabs, Tab, Text } from '@idealyst/components';\n\n<Tabs defaultValue=\"tab1\" variant=\"underline\">\n <Tab value=\"tab1\" label=\"Overview\">\n <Text>Overview content</Text>\n </Tab>\n <Tab value=\"tab2\" label=\"Details\">\n <Text>Details content</Text>\n </Tab>\n <Tab value=\"tab3\" label=\"Settings\">\n <Text>Settings content</Text>\n </Tab>\n</Tabs>\n`,\n examples: {\n basic: `import { Tabs, Tab, Text } from '@idealyst/components';\n\n<Tabs defaultValue=\"1\">\n <Tab value=\"1\" label=\"First\">\n <Text>First tab content</Text>\n </Tab>\n <Tab value=\"2\" label=\"Second\">\n <Text>Second tab content</Text>\n </Tab>\n</Tabs>`,\n\n variants: `import { Tabs, Tab, View, Text } from '@idealyst/components';\n\n<View spacing=\"lg\">\n <Tabs defaultValue=\"a\" variant=\"default\">\n <Tab value=\"a\" label=\"Default\"><Text>Content A</Text></Tab>\n <Tab value=\"b\" label=\"Style\"><Text>Content B</Text></Tab>\n </Tabs>\n\n <Tabs defaultValue=\"a\" variant=\"pills\">\n <Tab value=\"a\" label=\"Pills\"><Text>Content A</Text></Tab>\n <Tab value=\"b\" label=\"Style\"><Text>Content B</Text></Tab>\n </Tabs>\n\n <Tabs defaultValue=\"a\" variant=\"underline\">\n <Tab value=\"a\" label=\"Underline\"><Text>Content A</Text></Tab>\n <Tab value=\"b\" label=\"Style\"><Text>Content B</Text></Tab>\n </Tabs>\n</View>`,\n\n \"with-icons\": `import { Tabs, Tab, View, Text, Card } from '@idealyst/components';\n\n<Tabs defaultValue=\"profile\" variant=\"pills\" intent=\"primary\">\n <Tab value=\"profile\" label=\"Profile\">\n <Card padding=\"md\">\n <View spacing=\"md\">\n <Text weight=\"bold\">Profile Settings</Text>\n <Text>Update your profile information</Text>\n </View>\n </Card>\n </Tab>\n <Tab value=\"security\" label=\"Security\">\n <Card padding=\"md\">\n <View spacing=\"md\">\n <Text weight=\"bold\">Security Settings</Text>\n <Text>Manage your security preferences</Text>\n </View>\n </Card>\n </Tab>\n</Tabs>`,\n\n interactive: `import { Tabs, Tab, View, Text, Input, Button } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [activeTab, setActiveTab] = useState('account');\n const [name, setName] = useState('');\n const [email, setEmail] = useState('');\n\n return (\n <Tabs value={activeTab} onChange={setActiveTab} variant=\"underline\">\n <Tab value=\"account\" label=\"Account\">\n <View spacing=\"md\" style={{ padding: 16 }}>\n <Text weight=\"bold\">Account Information</Text>\n <Input\n label=\"Name\"\n value={name}\n onChangeText={setName}\n placeholder=\"Enter your name\"\n />\n <Input\n label=\"Email\"\n value={email}\n onChangeText={setEmail}\n placeholder=\"Enter your email\"\n />\n <Button intent=\"primary\">Save Changes</Button>\n </View>\n </Tab>\n\n <Tab value=\"privacy\" label=\"Privacy\">\n <View spacing=\"md\" style={{ padding: 16 }}>\n <Text weight=\"bold\">Privacy Settings</Text>\n <Text>Manage your privacy preferences here</Text>\n </View>\n </Tab>\n\n <Tab value=\"notifications\" label=\"Notifications\">\n <View spacing=\"md\" style={{ padding: 16 }}>\n <Text weight=\"bold\">Notification Preferences</Text>\n <Text>Configure how you receive notifications</Text>\n </View>\n </Tab>\n </Tabs>\n );\n}`,\n },\n};\n","export const Text = {\n category: \"typography\",\n description: \"Styled text component with typography variants, weight, color, and spacing options\",\n props: `\n- \\`children\\`: React.ReactNode - The text content to display\n- \\`typography\\`: Typography - The typography variant (h1, h2, h3, h4, h5, h6, body1, body2, caption). Sets fontSize, lineHeight, and fontWeight automatically.\n- \\`weight\\`: TextWeightVariant - Override the weight ('light' | 'normal' | 'medium' | 'semibold' | 'bold')\n- \\`color\\`: TextColorVariant - The color of the text (theme text colors)\n- \\`align\\`: TextAlignVariant - Text alignment ('left' | 'center' | 'right')\n- \\`gap\\`: Size - Space between nested elements ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`padding\\`: Size - Padding on all sides\n- \\`paddingVertical\\`: Size - Top and bottom padding\n- \\`paddingHorizontal\\`: Size - Left and right padding\n`,\n features: [\n \"Semantic typography variants (headings h1-h6, body1, body2, caption)\",\n \"Typography automatically sets fontSize, lineHeight, fontWeight\",\n \"Weight can be overridden independently\",\n \"Theme color variants\",\n \"Three alignment options\",\n \"Gap variant for nested elements\",\n \"Padding variants (uniform and directional)\",\n \"Cross-platform support\",\n \"Inherits parent text styles\",\n ],\n bestPractices: [\n \"Use semantic typography variants (h1-h6 for headings, body1/body2 for content, caption for small text)\",\n \"Override weight only when needed - typography variants include sensible defaults\",\n \"Prefer theme colors over custom colors\",\n \"Use 'left' alignment for body text\",\n \"Use 'center' for short, important text\",\n \"Use padding prop for text blocks that need internal spacing\",\n \"Nest Text components for mixed styles\",\n ],\n usage: `\nimport { Text } from '@idealyst/components';\n\n<Text typography=\"h1\" color=\"primary\">\n Main Heading\n</Text>\n\n<Text typography=\"body1\" color=\"secondary\">\n Body text with normal weight\n</Text>\n\n<Text typography=\"caption\" color=\"tertiary\">\n Small caption text\n</Text>\n`,\n examples: {\n basic: `import { Text } from '@idealyst/components';\n\n<Text>Simple text content</Text>`,\n\n variants: `import { Text, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n <Text typography=\"h1\">Heading 1</Text>\n <Text typography=\"h2\">Heading 2</Text>\n <Text typography=\"h3\">Heading 3</Text>\n <Text typography=\"body1\">Body text (default)</Text>\n <Text typography=\"body2\">Smaller body text</Text>\n <Text typography=\"caption\">Caption text</Text>\n</View>`,\n\n \"with-icons\": `import { Text, View, Icon } from '@idealyst/components';\n\n<View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>\n <Icon name=\"check-circle\" color=\"success\" />\n <Text color=\"success\" weight=\"medium\">\n Verified Account\n </Text>\n</View>`,\n\n interactive: `import { Text, View, Button } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [count, setCount] = useState(0);\n\n return (\n <View spacing=\"md\">\n <Text typography=\"h2\" weight=\"bold\" align=\"center\">\n Counter: {count}\n </Text>\n\n <View style={{ flexDirection: 'row', gap: 8, justifyContent: 'center' }}>\n <Button onPress={() => setCount(count - 1)}>-</Button>\n <Button onPress={() => setCount(count + 1)}>+</Button>\n </View>\n\n <Text typography=\"body2\" color=\"secondary\" align=\"center\">\n Click buttons to change the count\n </Text>\n </View>\n );\n}`,\n },\n};\n","export const TextArea = {\n category: \"form\",\n description: \"Multi-line text input field with margin variants for longer text content\",\n props: `\n- \\`value\\`: string - The current value of the textarea (controlled)\n- \\`defaultValue\\`: string - The default value for uncontrolled usage\n- \\`onChange\\`: function - Called when the text content changes\n- \\`placeholder\\`: string - Placeholder text shown when empty\n- \\`disabled\\`: boolean - Whether the textarea is disabled\n- \\`rows\\`: number - Initial number of visible text rows\n- \\`minHeight\\`: number - Minimum height in pixels\n- \\`maxHeight\\`: number - Maximum height in pixels\n- \\`autoGrow\\`: boolean - Whether to automatically grow height to fit content\n- \\`maxLength\\`: number - Maximum number of characters allowed\n- \\`label\\`: string - Label text displayed above the textarea\n- \\`error\\`: string - Error message to display\n- \\`helperText\\`: string - Helper text displayed below the textarea\n- \\`resize\\`: TextAreaResizeVariant - How the textarea can be resized (none, vertical, horizontal, both)\n- \\`showCharacterCount\\`: boolean - Whether to show the character count\n- \\`intent\\`: TextAreaIntentVariant - The intent/color scheme (for validation states)\n- \\`size\\`: TextAreaSizeVariant - The size variant of the textarea\n- \\`margin\\`: Size - Margin on all sides ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n- \\`textareaStyle\\`: StyleProp<TextStyle> - Additional custom styles for the textarea element\n`,\n features: [\n \"Multi-line text input\",\n \"Auto-grow to fit content\",\n \"Character count display\",\n \"Min/max height constraints\",\n \"Max length validation\",\n \"Label and helper text\",\n \"Error state\",\n \"Resize control (web)\",\n \"Three sizes\",\n ],\n bestPractices: [\n \"Always provide a label\",\n \"Use helperText to guide users\",\n \"Set maxLength to prevent excessive input\",\n \"Show character count for limited fields\",\n \"Use autoGrow for dynamic content\",\n \"Set minHeight for comfortable input area\",\n \"Show inline error messages\",\n ],\n usage: `\nimport { TextArea } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [text, setText] = useState('');\n\n return (\n <TextArea\n label=\"Description\"\n value={text}\n onChange={setText}\n placeholder=\"Enter a detailed description\"\n rows={4}\n maxLength={500}\n showCharacterCount\n helperText=\"Provide as much detail as possible\"\n />\n );\n}\n`,\n examples: {\n basic: `import { TextArea } from '@idealyst/components';\n\n<TextArea\n label=\"Message\"\n placeholder=\"Enter your message\"\n rows={4}\n/>`,\n\n variants: `import { TextArea, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n <TextArea label=\"Small\" size=\"sm\" rows={3} />\n <TextArea label=\"Medium\" size=\"md\" rows={4} />\n <TextArea label=\"Large\" size=\"lg\" rows={5} />\n</View>`,\n\n \"with-icons\": `import { TextArea, View, Text } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [feedback, setFeedback] = useState('');\n const maxLength = 200;\n\n return (\n <View spacing=\"sm\">\n <TextArea\n label=\"Feedback\"\n value={feedback}\n onChange={setFeedback}\n placeholder=\"Share your thoughts...\"\n maxLength={maxLength}\n showCharacterCount\n autoGrow\n minHeight={100}\n maxHeight={300}\n />\n <Text size=\"sm\" color=\"secondary\">\n {feedback.length}/{maxLength} characters\n </Text>\n </View>\n );\n}`,\n\n interactive: `import { TextArea, View, Button, Text } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [message, setMessage] = useState('');\n const [error, setError] = useState('');\n const [submitted, setSubmitted] = useState(false);\n\n const handleSubmit = () => {\n if (message.trim().length < 10) {\n setError('Message must be at least 10 characters');\n return;\n }\n setError('');\n setSubmitted(true);\n // Submit logic here\n };\n\n if (submitted) {\n return <Text color=\"success\">Message submitted successfully!</Text>;\n }\n\n return (\n <View spacing=\"md\">\n <TextArea\n label=\"Your Message\"\n value={message}\n onChange={(val) => {\n setMessage(val);\n setError('');\n }}\n placeholder=\"Type your message here...\"\n rows={5}\n maxLength={500}\n showCharacterCount\n error={error}\n helperText={error || 'Minimum 10 characters required'}\n autoGrow\n />\n <Button intent=\"primary\" onPress={handleSubmit}>\n Submit\n </Button>\n </View>\n );\n}`,\n },\n};\n","export const Tooltip = {\n category: \"overlay\",\n description: \"Contextual tooltip that displays information on hover or focus\",\n props: `\n- \\`content\\`: string | React.ReactNode - The tooltip content to display\n- \\`children\\`: React.ReactNode - The element that triggers the tooltip on hover/focus\n- \\`placement\\`: TooltipPlacement - The placement of the tooltip relative to the trigger\n- \\`delay\\`: number - Delay in milliseconds before showing the tooltip\n- \\`intent\\`: TooltipIntentVariant - The intent/color scheme of the tooltip\n- \\`size\\`: TooltipSizeVariant - The size variant of the tooltip\n`,\n features: [\n \"Hover and focus triggers\",\n \"Four placement options\",\n \"Configurable delay\",\n \"Five intent colors\",\n \"Three sizes\",\n \"String or custom content\",\n \"Auto-positioning on overflow\",\n ],\n bestPractices: [\n \"Keep tooltip content concise\",\n \"Use for supplementary information only\",\n \"Don't hide critical information in tooltips\",\n \"Ensure tooltips are keyboard accessible\",\n \"Use appropriate placement to avoid obscuring content\",\n \"Add small delay to prevent flashing\",\n ],\n usage: `\nimport { Tooltip, Button } from '@idealyst/components';\n\n<Tooltip content=\"Click to save your changes\" placement=\"top\">\n <Button icon=\"content-save\">Save</Button>\n</Tooltip>\n`,\n examples: {\n basic: `import { Tooltip, Button } from '@idealyst/components';\n\n<Tooltip content=\"This is a tooltip\">\n <Button>Hover me</Button>\n</Tooltip>`,\n\n variants: `import { Tooltip, Button, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n <Tooltip content=\"Top placement\" placement=\"top\">\n <Button>Top</Button>\n </Tooltip>\n <Tooltip content=\"Bottom placement\" placement=\"bottom\">\n <Button>Bottom</Button>\n </Tooltip>\n <Tooltip content=\"Left placement\" placement=\"left\">\n <Button>Left</Button>\n </Tooltip>\n <Tooltip content=\"Right placement\" placement=\"right\">\n <Button>Right</Button>\n </Tooltip>\n</View>`,\n\n \"with-icons\": `import { Tooltip, Icon, Text, View } from '@idealyst/components';\n\n<View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>\n <Text>Need help?</Text>\n <Tooltip\n content=\"Click here for assistance\"\n placement=\"right\"\n intent=\"primary\"\n >\n <Icon name=\"help-circle\" size=\"md\" color=\"primary\" />\n </Tooltip>\n</View>`,\n\n interactive: `import { Tooltip, Button, View, Text } from '@idealyst/components';\n\nfunction ActionButtons() {\n return (\n <View spacing=\"sm\">\n <View style={{ flexDirection: 'row', gap: 8 }}>\n <Tooltip content=\"Save your work\" placement=\"top\" delay={500}>\n <Button icon=\"content-save\" type=\"contained\" intent=\"primary\">\n Save\n </Button>\n </Tooltip>\n\n <Tooltip content=\"Undo last action\" placement=\"top\" delay={500}>\n <Button icon=\"undo\" type=\"outlined\">\n Undo\n </Button>\n </Tooltip>\n\n <Tooltip content=\"Delete selected items\" placement=\"top\" intent=\"error\" delay={500}>\n <Button icon=\"delete\" type=\"outlined\" intent=\"error\">\n Delete\n </Button>\n </Tooltip>\n </View>\n\n <Text size=\"sm\" color=\"secondary\">\n Hover over buttons to see tooltips\n </Text>\n </View>\n );\n}`,\n },\n};\n","export const Video = {\n category: \"media\",\n description: \"Video player component with playback controls and event handlers\",\n props: `\n- \\`source\\`: VideoSource | string - The video source URL or source object with uri and type\n- \\`poster\\`: string - URL of the poster image to display before playback\n- \\`width\\`: number | string - The width of the video player\n- \\`height\\`: number | string - The height of the video player\n- \\`aspectRatio\\`: number - The aspect ratio of the video (e.g., 16/9, 4/3)\n- \\`controls\\`: boolean - Whether to show native playback controls\n- \\`autoPlay\\`: boolean - Whether to automatically start playing when loaded\n- \\`loop\\`: boolean - Whether to loop the video playback\n- \\`muted\\`: boolean - Whether to mute the audio\n- \\`playsInline\\`: boolean - Whether to play inline on mobile devices (prevents fullscreen)\n- \\`preload\\`: 'auto' | 'metadata' | 'none' - How much of the video to preload\n- \\`onLoad\\`: function - Called when the video has loaded\n- \\`onError\\`: function - Called when an error occurs during playback\n- \\`onPlay\\`: function - Called when the video starts playing\n- \\`onPause\\`: function - Called when the video is paused\n- \\`onEnd\\`: function - Called when the video playback ends\n- \\`onProgress\\`: function - Called periodically during playback with progress information\n- \\`borderRadius\\`: number - The border radius of the video player\n`,\n features: [\n \"Remote and local video sources\",\n \"Poster image support\",\n \"Playback controls\",\n \"Auto-play and loop\",\n \"Multiple event callbacks\",\n \"Progress tracking\",\n \"Aspect ratio control\",\n \"Border radius support\",\n ],\n bestPractices: [\n \"Always provide a poster image\",\n \"Use appropriate video formats for cross-platform\",\n \"Enable controls for user control\",\n \"Avoid autoPlay with audio (UX best practice)\",\n \"Use playsInline for better mobile experience\",\n \"Provide onError fallback\",\n \"Set explicit dimensions or aspect ratio\",\n \"Use preload: 'metadata' for better performance\",\n ],\n usage: `\nimport { Video } from '@idealyst/components';\n\n<Video\n source={{ uri: 'https://example.com/video.mp4', type: 'video/mp4' }}\n poster=\"https://example.com/poster.jpg\"\n width=\"100%\"\n aspectRatio={16/9}\n controls\n playsInline\n onLoad={() => console.log('Video loaded')}\n onError={(error) => console.error('Video error:', error)}\n/>\n`,\n examples: {\n basic: `import { Video } from '@idealyst/components';\n\n<Video\n source=\"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\"\n width={640}\n height={360}\n controls\n/>`,\n\n variants: `import { Video, View } from '@idealyst/components';\n\n<View spacing=\"md\">\n {/* With controls */}\n <Video\n source={{ uri: 'https://example.com/video.mp4' }}\n width=\"100%\"\n aspectRatio={16/9}\n controls\n />\n\n {/* Auto-play, looped, muted */}\n <Video\n source={{ uri: 'https://example.com/video.mp4' }}\n width=\"100%\"\n aspectRatio={16/9}\n autoPlay\n loop\n muted\n controls={false}\n />\n</View>`,\n\n \"with-icons\": `import { Video, Card, View, Text } from '@idealyst/components';\n\n<Card type=\"elevated\" padding=\"none\">\n <Video\n source=\"https://example.com/video.mp4\"\n poster=\"https://example.com/poster.jpg\"\n width=\"100%\"\n aspectRatio={16/9}\n controls\n borderRadius={8}\n />\n <View spacing=\"sm\" style={{ padding: 16 }}>\n <Text weight=\"bold\">Video Title</Text>\n <Text size=\"sm\">Video description and details</Text>\n </View>\n</Card>`,\n\n interactive: `import { Video, View, Text, Button } from '@idealyst/components';\nimport { useState, useRef } from 'react';\n\nfunction Example() {\n const [playing, setPlaying] = useState(false);\n const [progress, setProgress] = useState(0);\n const videoRef = useRef(null);\n\n const handleProgress = ({ currentTime, playableDuration }) => {\n if (playableDuration > 0) {\n setProgress((currentTime / playableDuration) * 100);\n }\n };\n\n return (\n <View spacing=\"md\">\n <Video\n ref={videoRef}\n source={{ uri: 'https://example.com/video.mp4' }}\n poster=\"https://example.com/poster.jpg\"\n width=\"100%\"\n aspectRatio={16/9}\n controls\n playsInline\n onPlay={() => setPlaying(true)}\n onPause={() => setPlaying(false)}\n onEnd={() => {\n setPlaying(false);\n setProgress(0);\n }}\n onProgress={handleProgress}\n onError={(error) => console.error('Video error:', error)}\n />\n\n <View spacing=\"sm\">\n <Text>\n Status: {playing ? 'Playing' : 'Paused'} | Progress: {progress.toFixed(1)}%\n </Text>\n\n <View style={{ flexDirection: 'row', gap: 8 }}>\n <Button\n size=\"sm\"\n type=\"outlined\"\n onPress={() => videoRef.current?.play()}\n >\n Play\n </Button>\n <Button\n size=\"sm\"\n type=\"outlined\"\n onPress={() => videoRef.current?.pause()}\n >\n Pause\n </Button>\n </View>\n </View>\n </View>\n );\n}`,\n },\n};\n","export const View = {\n category: \"layout\",\n description: \"Container component with spacing variants (gap, padding, margin) and background variants\",\n props: `\n- \\`children\\`: React.ReactNode - The content to display inside the view\n- \\`gap\\`: Size - Space between children ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`padding\\`: Size - Padding on all sides ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`paddingVertical\\`: Size - Top and bottom padding\n- \\`paddingHorizontal\\`: Size - Left and right padding\n- \\`margin\\`: Size - Margin on all sides ('xs' | 'sm' | 'md' | 'lg' | 'xl')\n- \\`marginVertical\\`: Size - Top and bottom margin\n- \\`marginHorizontal\\`: Size - Left and right margin\n- \\`background\\`: ViewBackgroundVariant - Background variant (Surface | 'transparent')\n- \\`radius\\`: ViewRadiusVariant - Border radius variant ('xs' | 'sm' | 'md' | 'lg' | 'xl' | 'none')\n- \\`border\\`: ViewBorderVariant - Border variant ('none' | 'thin' | 'thick')\n- \\`scrollable\\`: boolean - Enable scrollable content (uses ScrollView on native, overflow:auto on web)\n- \\`testID\\`: string - Test ID for testing\n`,\n features: [\n \"Flexible layout container\",\n \"Gap variant for spacing between children\",\n \"Padding variants (uniform and directional)\",\n \"Margin variants (uniform and directional)\",\n \"Surface-based background variants\",\n \"Border radius variants\",\n \"Border support with thin/thick options\",\n \"Scrollable content support\",\n \"Flexbox-based layout\",\n ],\n bestPractices: [\n \"Use View for all layout containers\",\n \"Use gap prop for consistent spacing between children\",\n \"Use padding prop instead of style for consistent spacing\",\n \"Use margin variants for spacing between containers\",\n \"Prefer Size variants over numeric values\",\n \"Combine with Screen for full-screen layouts\",\n \"Use background variants for semantic surface colors\",\n ],\n usage: `\nimport { View, Text, Button } from '@idealyst/components';\n\n<View background=\"primary\" radius=\"md\" padding=\"md\" gap=\"sm\">\n <Text size=\"lg\" weight=\"bold\">Card Title</Text>\n <Text>Card content with consistent spacing</Text>\n <Button>Action</Button>\n</View>\n`,\n examples: {\n basic: `import { View, Text } from '@idealyst/components';\n\n<View gap=\"md\">\n <Text>Item 1</Text>\n <Text>Item 2</Text>\n <Text>Item 3</Text>\n</View>`,\n\n variants: `import { View, Text } from '@idealyst/components';\n\n<View gap=\"lg\">\n <View radius=\"sm\" padding=\"sm\" gap=\"xs\">\n <Text>Small padding container</Text>\n <Text>Second item</Text>\n </View>\n\n <View background=\"secondary\" radius=\"md\" padding=\"md\" gap=\"sm\">\n <Text>Medium padding container</Text>\n <Text>Second item</Text>\n </View>\n\n <View background=\"inverted\" radius=\"lg\" padding=\"lg\" gap=\"md\">\n <Text>Large padding container</Text>\n <Text color=\"inverted\">Second item</Text>\n </View>\n</View>`,\n\n \"with-icons\": `import { View, Icon, Text } from '@idealyst/components';\n\n<View\n background=\"tertiary\"\n radius=\"md\"\n border=\"thin\"\n padding=\"md\"\n>\n <View style={{ flexDirection: 'row', alignItems: 'center' }} gap=\"sm\">\n <Icon name=\"information-outline\" size=\"lg\" color=\"primary\" />\n <View style={{ flex: 1 }} gap=\"xs\">\n <Text weight=\"bold\">Important Information</Text>\n <Text size=\"sm\">This is an informational message</Text>\n </View>\n </View>\n</View>`,\n\n interactive: `import { View, Text, Button, Card } from '@idealyst/components';\nimport { useState } from 'react';\n\nfunction Example() {\n const [items, setItems] = useState(['Item 1', 'Item 2']);\n\n const addItem = () => {\n setItems([...items, \\`Item \\${items.length + 1}\\`]);\n };\n\n return (\n <View padding=\"md\" gap=\"lg\">\n <Card type=\"outlined\" padding=\"md\">\n <View gap=\"md\">\n <Text weight=\"bold\">Dynamic List</Text>\n <View gap=\"sm\">\n {items.map((item, index) => (\n <View\n key={index}\n background=\"primary\"\n radius=\"sm\"\n padding=\"sm\"\n >\n <Text>{item}</Text>\n </View>\n ))}\n </View>\n <Button onPress={addItem} type=\"outlined\">\n Add Item\n </Button>\n </View>\n </Card>\n </View>\n );\n}`,\n },\n};\n","// Component documentation exports\nexport { Accordion } from './Accordion.js';\nexport { ActivityIndicator } from './ActivityIndicator.js';\nexport { Alert } from './Alert.js';\nexport { Avatar } from './Avatar.js';\nexport { Badge } from './Badge.js';\nexport { Breadcrumb } from './Breadcrumb.js';\nexport { Button } from './Button.js';\nexport { Card } from './Card.js';\nexport { Checkbox } from './Checkbox.js';\nexport { Chip } from './Chip.js';\nexport { Dialog } from './Dialog.js';\nexport { Divider } from './Divider.js';\nexport { Icon } from './Icon.js';\nexport { Image } from './Image.js';\nexport { Input } from './Input.js';\nexport { Link } from './Link.js';\nexport { List } from './List.js';\nexport { Menu } from './Menu.js';\nexport { Popover } from './Popover.js';\nexport { Pressable } from './Pressable.js';\nexport { Progress } from './Progress.js';\nexport { RadioButton } from './RadioButton.js';\nexport { Screen } from './Screen.js';\nexport { Select } from './Select.js';\nexport { Skeleton } from './Skeleton.js';\nexport { Slider } from './Slider.js';\nexport { SVGImage } from './SVGImage.js';\nexport { Switch } from './Switch.js';\nexport { TabBar } from './TabBar.js';\nexport { Table } from './Table.js';\nexport { Tabs } from './Tabs.js';\nexport { Text } from './Text.js';\nexport { TextArea } from './TextArea.js';\nexport { Tooltip } from './Tooltip.js';\nexport { Video } from './Video.js';\nexport { View } from './View.js';\n\n// Collect all components into a single object\nimport { Accordion } from './Accordion.js';\nimport { ActivityIndicator } from './ActivityIndicator.js';\nimport { Alert } from './Alert.js';\nimport { Avatar } from './Avatar.js';\nimport { Badge } from './Badge.js';\nimport { Breadcrumb } from './Breadcrumb.js';\nimport { Button } from './Button.js';\nimport { Card } from './Card.js';\nimport { Checkbox } from './Checkbox.js';\nimport { Chip } from './Chip.js';\nimport { Dialog } from './Dialog.js';\nimport { Divider } from './Divider.js';\nimport { Icon } from './Icon.js';\nimport { Image } from './Image.js';\nimport { Input } from './Input.js';\nimport { Link } from './Link.js';\nimport { List } from './List.js';\nimport { Menu } from './Menu.js';\nimport { Popover } from './Popover.js';\nimport { Pressable } from './Pressable.js';\nimport { Progress } from './Progress.js';\nimport { RadioButton } from './RadioButton.js';\nimport { Screen } from './Screen.js';\nimport { Select } from './Select.js';\nimport { Skeleton } from './Skeleton.js';\nimport { Slider } from './Slider.js';\nimport { SVGImage } from './SVGImage.js';\nimport { Switch } from './Switch.js';\nimport { TabBar } from './TabBar.js';\nimport { Table } from './Table.js';\nimport { Tabs } from './Tabs.js';\nimport { Text } from './Text.js';\nimport { TextArea } from './TextArea.js';\nimport { Tooltip } from './Tooltip.js';\nimport { Video } from './Video.js';\nimport { View } from './View.js';\n\nexport const components: Record<string, any> = {\n Accordion,\n ActivityIndicator,\n Alert,\n Avatar,\n Badge,\n Breadcrumb,\n Button,\n Card,\n Checkbox,\n Chip,\n Dialog,\n Divider,\n Icon,\n Image,\n Input,\n Link,\n List,\n Menu,\n Popover,\n Pressable,\n Progress,\n RadioButton,\n Screen,\n Select,\n Skeleton,\n Slider,\n SVGImage,\n Switch,\n TabBar,\n Table,\n Tabs,\n Text,\n TextArea,\n Tooltip,\n Video,\n View,\n};\n","export const cliCommands: Record<string, any> = {\n init: {\n description: \"Initialize a new Idealyst workspace with monorepo structure\",\n usage: \"idealyst init <workspace-name> [options]\",\n options: [\n {\n flag: \"workspace-name\",\n description: \"Name for the new workspace (required)\",\n },\n {\n flag: \"--git\",\n description: \"Initialize git repository (default: true)\",\n },\n {\n flag: \"--install\",\n description: \"Install dependencies after creation (default: true)\",\n },\n ],\n examples: [\n \"idealyst init my-app\",\n \"idealyst init my-company-workspace --no-git\",\n ],\n },\n\n create: {\n description: \"Create a new package within the Idealyst workspace\",\n usage: \"idealyst create <name> --type <type> [options]\",\n options: [\n {\n flag: \"name\",\n description: \"Name for the new package (required)\",\n },\n {\n flag: \"--type\",\n description: \"Package type: web | native | api | database | shared (required)\",\n },\n {\n flag: \"--app-name\",\n description: \"Display name for native app (required for native type)\",\n },\n {\n flag: \"--with-trpc\",\n description: \"Include tRPC setup (for web/native)\",\n },\n {\n flag: \"--no-trpc\",\n description: \"Exclude tRPC setup (for web/native)\",\n },\n ],\n examples: [\n \"idealyst create web --type web --with-trpc\",\n \"idealyst create mobile --type native --app-name \\\"My App\\\" --with-trpc\",\n \"idealyst create api --type api\",\n \"idealyst create database --type database\",\n \"idealyst create shared --type shared\",\n ],\n },\n\n dev: {\n description: \"Start development server for a package\",\n usage: \"cd packages/<name> && yarn dev\",\n options: [\n {\n flag: \"--port\",\n description: \"Port number for dev server (web only)\",\n },\n ],\n examples: [\n \"cd packages/web && yarn dev\",\n \"cd packages/native && yarn dev\",\n ],\n },\n\n build: {\n description: \"Build a package for production\",\n usage: \"cd packages/<name> && yarn build\",\n options: [],\n examples: [\n \"cd packages/web && yarn build\",\n \"cd packages/api && yarn build\",\n ],\n },\n\n test: {\n description: \"Run tests for packages\",\n usage: \"yarn test [options]\",\n options: [\n {\n flag: \"--watch\",\n description: \"Run tests in watch mode\",\n },\n {\n flag: \"--coverage\",\n description: \"Generate coverage report\",\n },\n ],\n examples: [\n \"yarn test\",\n \"yarn test:watch\",\n \"yarn test:coverage\",\n ],\n },\n};\n","export const frameworkGuides: Record<string, string> = {\n \"idealyst://framework/getting-started\": `# Getting Started with Idealyst\n\nIdealyst is a modern, cross-platform framework for building React and React Native applications with a powerful component library, type-safe APIs, and monorepo tooling.\n\n## Quick Start\n\n### 1. Create a New Workspace\n\n\\`\\`\\`bash\nnpx @idealyst/cli init my-app\ncd my-app\n\\`\\`\\`\n\nThis single command creates a **complete monorepo workspace** with all 5 packages:\n- \\`packages/web/\\` - React web app (Vite)\n- \\`packages/native/\\` - React Native mobile app\n- \\`packages/api/\\` - tRPC API server with GraphQL\n- \\`packages/database/\\` - Prisma database layer\n- \\`packages/shared/\\` - Shared utilities and tRPC client\n\nPlus:\n- Yarn 3 workspace setup\n- TypeScript configuration\n- Jest testing setup\n- Git repository\n- Dev container configuration\n\n### 2. Start Development\n\n\\`\\`\\`bash\n# Start web dev server\ncd packages/web\nyarn dev\n\n# Start native dev (in another terminal)\ncd packages/native\nyarn start\n\n# Start API server (in another terminal)\ncd packages/api\nyarn dev\n\\`\\`\\`\n\n### 3. Configure Babel (Required for Styling)\n\nAdd the Idealyst plugin to your babel.config.js:\n\n\\`\\`\\`javascript\nmodule.exports = {\n presets: ['module:@react-native/babel-preset'],\n plugins: [\n ['@idealyst/theme/plugin', {\n themePath: './src/theme/styles.ts', // Path to your theme file\n }],\n ],\n};\n\\`\\`\\`\n\n## Project Structure\n\n\\`\\`\\`\nmy-app/\n├── packages/\n│ ├── web/ # React web app (Vite)\n│ ├── native/ # React Native app\n│ ├── api/ # tRPC + GraphQL API server\n│ ├── database/ # Prisma database layer\n│ └── shared/ # Shared utilities & tRPC client\n├── package.json\n├── tsconfig.json\n└── yarn.lock\n\\`\\`\\`\n\n## Key Features\n\n- **Cross-Platform Components**: Use the same components for web and native\n- **Type-Safe APIs**: End-to-end type safety with tRPC\n- **Modern Tooling**: Vite, TypeScript, Jest, Prisma\n- **Monorepo Structure**: Share code across packages\n- **Theme System**: Consistent styling with react-native-unistyles\n- **Style Extensions**: Customize component styles at build time\n- **Navigation**: Unified navigation for web and native\n\n## Next Steps\n\n1. Explore the component library: \\`@idealyst/components\\`\n2. Learn the style system: \\`idealyst://framework/style-system\\`\n3. Set up your database schema in \\`packages/database\\`\n4. Define your API routes in \\`packages/api\\`\n5. Build your UI using Idealyst components\n`,\n\n \"idealyst://framework/components-overview\": `# Idealyst Components Overview\n\nIdealyst provides a comprehensive library of cross-platform React components organized into categories.\n\n## Component Categories\n\n### Layout Components\n- **View**: Flex container with spacing system\n- **Screen**: Full-screen container with safe area handling\n- **Divider**: Visual separator with orientation options\n\n### Form Components\n- **Button**: Interactive button with variants, intents, and icons\n- **Input**: Text input with label, validation, and helper text\n- **Checkbox**: Form checkbox with label support\n- **Select**: Dropdown selection component\n- **Switch**: Toggle switch component\n- **RadioButton**: Radio button group\n- **Slider**: Range slider component\n- **TextArea**: Multi-line text input\n\n### Display Components\n- **Text**: Styled text with sizes and weights\n- **Card**: Content container with variants\n- **Badge**: Status indicator\n- **Chip**: Compact element for tags and filters\n- **Avatar**: User profile image\n- **Icon**: MDI icon with theming\n- **Skeleton**: Loading placeholder\n- **Alert**: Notification message\n- **Accordion**: Collapsible content sections\n- **Image**: Cross-platform image component\n- **SVGImage**: SVG image renderer\n- **Video**: Video player component\n\n### Navigation Components\n- **Tabs**: Tab navigation\n- **TabBar**: Bottom tab bar\n- **Breadcrumb**: Breadcrumb navigation\n- **Menu**: Dropdown menu\n- **MenuItem**: Individual menu item\n- **List**: Vertical list with sections\n- **ListItem**: Individual list item\n- **Link**: Navigation link component\n\n### Overlay Components\n- **Dialog**: Modal dialog\n- **Popover**: Contextual overlay\n- **Tooltip**: Hover tooltip\n\n### Feedback Components\n- **Progress**: Progress indicator (linear/circular)\n- **ActivityIndicator**: Loading spinner\n\n### Data Components\n- **Table**: Data table with sorting and filtering\n- **DataGrid**: Advanced data grid\n- **DatePicker**: Date selection component\n- **TimePicker**: Time selection component\n- **DateTimePicker**: Combined date and time picker\n\n## Common Props\n\nMost components share common props:\n- \\`style\\`: Custom styles\n- \\`testID\\`: Test identifier\n- \\`disabled\\`: Disable interaction\n\n### Intent Colors\nComponents support intent-based colors:\n- \\`primary\\`: Main brand actions\n- \\`neutral\\`: Secondary actions\n- \\`success\\`: Positive actions\n- \\`error\\`: Destructive actions\n- \\`warning\\`: Caution actions\n\n### Type/Variant Props\nMany components offer visual type or variant options:\n- Button \\`type\\`: \\`contained\\`, \\`outlined\\`, \\`text\\`\n- Card \\`type\\`: \\`default\\`, \\`outlined\\`, \\`elevated\\`, \\`filled\\`\n- Chip \\`type\\`: \\`filled\\`, \\`outlined\\`, \\`soft\\`\n- Progress \\`variant\\`: \\`linear\\`, \\`circular\\`\n\n### Sizes\nMost components support size variants:\n- \\`sm\\`, \\`md\\`, \\`lg\\`\n- Sometimes 'xs' and 'xl', but varies by component\n\n## Icon Support\n\nComponents with icon support accept:\n- **String icon names**: Material Design Icons\n- **React elements**: Custom icon components\n\nExample:\n\\`\\`\\`tsx\n<Button leftIcon=\"check\">Save</Button>\n<Button leftIcon={<CustomIcon />}>Save</Button>\n<Button rightIcon=\"arrow-right\">Next</Button>\n\\`\\`\\`\n\n## Theming\n\nAll components use the Unistyles theming system:\n- Light and dark mode support\n- Customizable color palettes\n- Responsive breakpoints\n- Platform-specific styles\n\n## Import Pattern\n\n\\`\\`\\`tsx\nimport { Button, Card, Text, View } from '@idealyst/components';\n\\`\\`\\`\n`,\n\n \"idealyst://framework/theming\": `# Theming Guide\n\nIdealyst uses react-native-unistyles for cross-platform theming with full TypeScript support. Themes are created using a fluent builder pattern.\n\n## Theme Builder API\n\nCreate themes using the builder pattern:\n\n\\`\\`\\`typescript\nimport { createTheme } from '@idealyst/theme';\n\nexport const myTheme = createTheme()\n // Add semantic intents\n .addIntent('primary', {\n primary: '#3b82f6', // Main color\n contrast: '#ffffff', // Text on primary background\n light: '#bfdbfe', // Lighter variant\n dark: '#1e40af', // Darker variant\n })\n .addIntent('success', {\n primary: '#22c55e',\n contrast: '#ffffff',\n light: '#a7f3d0',\n dark: '#165e29',\n })\n .addIntent('error', {\n primary: '#ef4444',\n contrast: '#ffffff',\n light: '#fca5a1',\n dark: '#9b2222',\n })\n\n // Add border radii\n .addRadius('none', 0)\n .addRadius('sm', 4)\n .addRadius('md', 8)\n .addRadius('lg', 12)\n\n // Add shadows (cross-platform)\n .addShadow('sm', {\n elevation: 1,\n shadowColor: '#000000',\n shadowOffset: { width: 0, height: 1 },\n shadowOpacity: 0.08,\n shadowRadius: 1,\n boxShadow: '0px 1px 2px rgba(0, 0, 0, 0.1)', // web-only\n })\n\n // Set colors\n .setColors({\n pallet: { /* color palette */ },\n surface: {\n screen: '#ffffff',\n primary: '#ffffff',\n secondary: '#f5f5f5',\n inverse: '#000000',\n },\n text: {\n primary: '#000000',\n secondary: '#333333',\n inverse: '#ffffff',\n },\n border: {\n primary: '#e0e0e0',\n disabled: '#f0f0f0',\n },\n })\n\n // Set component sizes (xs, sm, md, lg, xl)\n .setSizes({\n button: {\n xs: { paddingVertical: 4, paddingHorizontal: 8, minHeight: 24, fontSize: 12 },\n sm: { paddingVertical: 6, paddingHorizontal: 12, minHeight: 32, fontSize: 14 },\n md: { paddingVertical: 8, paddingHorizontal: 16, minHeight: 40, fontSize: 16 },\n lg: { paddingVertical: 10, paddingHorizontal: 20, minHeight: 48, fontSize: 18 },\n xl: { paddingVertical: 12, paddingHorizontal: 24, minHeight: 56, fontSize: 20 },\n },\n // ... other components (chip, badge, icon, input, etc.)\n })\n\n // Set interaction styles\n .setInteraction({\n focusedBackground: 'rgba(59, 130, 246, 0.08)',\n focusBorder: 'rgba(59, 130, 246, 0.3)',\n opacity: { hover: 0.9, active: 0.75, disabled: 0.5 },\n })\n\n // Set responsive breakpoints\n .setBreakpoints({\n xs: 0, // Portrait phones\n sm: 576, // Landscape phones\n md: 768, // Tablets\n lg: 992, // Desktops\n xl: 1200, // Large desktops\n })\n\n .build();\n\\`\\`\\`\n\n## Intent Structure\n\nEach intent defines four color values:\n\n| Property | Purpose |\n|------------|-----------------------------------|\n| \\`primary\\` | Main color used for backgrounds |\n| \\`contrast\\` | Text color on primary background |\n| \\`light\\` | Lighter tint for subtle states |\n| \\`dark\\` | Darker shade for pressed states |\n\n## Extending an Existing Theme\n\nUse \\`fromTheme()\\` to extend a base theme:\n\n\\`\\`\\`typescript\nimport { fromTheme, lightTheme } from '@idealyst/theme';\n\nexport const brandTheme = fromTheme(lightTheme)\n .addIntent('brand', {\n primary: '#6366f1',\n contrast: '#ffffff',\n light: '#818cf8',\n dark: '#4f46e5',\n })\n .build();\n\\`\\`\\`\n\n## Registering Your Theme\n\nFor full TypeScript inference:\n\n\\`\\`\\`typescript\n// src/theme/styles.ts\nexport const myTheme = createTheme()\n // ... builder chain\n .build();\n\n// Register the theme type\ndeclare module '@idealyst/theme' {\n interface RegisteredTheme {\n theme: typeof myTheme;\n }\n}\n\\`\\`\\`\n\n## Using Themes with Unistyles\n\n\\`\\`\\`typescript\nimport { UnistylesRegistry } from 'react-native-unistyles';\nimport { lightTheme, darkTheme } from '@idealyst/theme';\n\nUnistylesRegistry\n .addThemes({\n light: lightTheme,\n dark: darkTheme,\n })\n .addConfig({\n initialTheme: 'light',\n });\n\\`\\`\\`\n\n## Platform-Specific Styles\n\n\\`\\`\\`typescript\nconst styles = StyleSheet.create((theme) => ({\n button: {\n padding: 16,\n\n _web: {\n cursor: 'pointer',\n transition: 'all 0.1s ease',\n _hover: { opacity: 0.9 },\n _active: { opacity: 0.75 },\n },\n\n _native: {\n elevation: 2,\n },\n },\n}));\n\\`\\`\\`\n\n## See Also\n\n- \\`idealyst://framework/style-system\\` - Style definition APIs (defineStyle, extendStyle)\n- \\`idealyst://framework/babel-plugin\\` - Babel plugin configuration\n- \\`idealyst://framework/breakpoints\\` - Responsive breakpoint system\n`,\n\n \"idealyst://framework/cli\": `# Idealyst CLI Reference\n\nThe Idealyst CLI provides commands for creating and managing Idealyst projects.\n\n## Installation\n\n\\`\\`\\`bash\nnpm install -g @idealyst/cli\n# or\nnpx @idealyst/cli <command>\n\\`\\`\\`\n\n## Commands\n\n### init\n\nInitialize a new Idealyst workspace.\n\n\\`\\`\\`bash\nidealyst init <workspace-name> [options]\n\\`\\`\\`\n\n**Arguments:**\n- \\`workspace-name\\`: Name for the workspace directory\n\n**Options:**\n- \\`--git\\`: Initialize git repository (default: true)\n- \\`--no-git\\`: Skip git initialization\n- \\`--install\\`: Install dependencies (default: true)\n- \\`--no-install\\`: Skip dependency installation\n\n**Examples:**\n\\`\\`\\`bash\nidealyst init my-app\nidealyst init my-company-app --no-git\n\\`\\`\\`\n\n**Creates:**\n- Monorepo workspace structure\n- package.json with workspaces\n- TypeScript configuration\n- Jest setup\n- Git repository (optional)\n- Dev container configuration\n\n### create\n\nCreate a new package in the workspace.\n\n\\`\\`\\`bash\nidealyst create <name> --type <type> [options]\n\\`\\`\\`\n\n**Arguments:**\n- \\`name\\`: Package name\n\n**Options:**\n- \\`--type <type>\\`: Package type (required)\n - \\`web\\`: React web app with Vite\n - \\`mobile\\`: React Native mobile app\n - \\`api\\`: tRPC API server\n - \\`shared\\`: Shared utilities library\n- \\`--app-name <name>\\`: Display name for mobile apps (required for mobile)\n- \\`--with-trpc\\`: Include tRPC setup (web/mobile)\n- \\`--no-trpc\\`: Exclude tRPC setup (web/mobile)\n\n**Examples:**\n\\`\\`\\`bash\n# Web app\nidealyst create web --type web --with-trpc\n\n# Mobile app\nidealyst create mobile --type mobile --app-name \"My App\" --with-trpc\n\n# API server\nidealyst create api --type api\n\n# Shared library\nidealyst create shared --type shared\n\\`\\`\\`\n\n**Note:** The database package is automatically created during workspace initialization. Use the \\`init\\` command to create a new workspace with all packages including database.\n\n## Package Types\n\n### Web Package\n- Vite + React 19\n- TypeScript\n- React Router\n- Optional tRPC client\n- @idealyst/components\n- @idealyst/theme\n\n### Mobile Package\n- React Native 0.80\n- TypeScript\n- React Navigation\n- Optional tRPC client\n- @idealyst/components\n- @idealyst/navigation\n\n### API Package\n- tRPC server\n- Express\n- TypeScript\n- CORS enabled\n- WebSocket support\n\n### Database Package\n- Prisma ORM\n- TypeScript\n- Schema definition\n- Migration support\n- Multiple database support\n\n### Shared Package\n- TypeScript library\n- Utility functions\n- Type definitions\n- Shared between packages\n\n## Workspace Commands\n\nRun these from workspace root:\n\n\\`\\`\\`bash\n# Install all dependencies\nyarn install\n\n# Run tests\nyarn test\nyarn test:watch\nyarn test:coverage\n\n# Build all packages\nyarn workspaces foreach run build\n\n# Version management\nyarn version:patch # Bump patch version\nyarn version:minor # Bump minor version\nyarn version:major # Bump major version\n\n# Publish\nyarn publish:all\n\\`\\`\\`\n\n## Package Commands\n\nRun these from package directory:\n\n\\`\\`\\`bash\n# Development\nyarn dev\n\n# Build\nyarn build\n\n# Test\nyarn test\n\n# Type check\nyarn type-check\n\n# Lint\nyarn lint\n\\`\\`\\`\n\n## Project Structure\n\n\\`\\`\\`\nworkspace/\n├── packages/\n│ ├── web/\n│ │ ├── src/\n│ │ ├── public/\n│ │ ├── package.json\n│ │ └── vite.config.ts\n│ ├── mobile/\n│ │ ├── src/\n│ │ ├── android/\n│ │ ├── ios/\n│ │ └── package.json\n│ ├── api/\n│ │ ├── src/\n│ │ ├── trpc/\n│ │ └── package.json\n│ ├── database/\n│ │ ├── prisma/\n│ │ └── package.json\n│ └── shared/\n│ ├── src/\n│ └── package.json\n├── package.json\n├── tsconfig.json\n└── jest.config.js\n\\`\\`\\`\n\n## Best Practices\n\n1. **Use workspaces**: Keep related packages in the same workspace\n2. **Share code**: Use the shared package for utilities\n3. **Type safety**: Enable strict TypeScript\n4. **Testing**: Write tests for critical functionality\n5. **Versioning**: Keep package versions synchronized\n6. **Documentation**: Add README files to packages\n7. **Git**: Use conventional commits\n8. **Dependencies**: Share dependencies across packages when possible\n`,\n\n \"idealyst://framework/spacing-system\": `# Spacing System\n\nIdealyst components use a variant-based spacing system for consistent layouts. Instead of specifying numeric values, you use Size variants (xs, sm, md, lg, xl) that map to theme-defined values.\n\n## Spacing Prop Interfaces\n\nDifferent component types receive different spacing props based on their use case:\n\n### ContainerStyleProps (Layout Containers)\n**Components**: View, Card, Screen, List, Accordion, Table, TabBar\n\n\\`\\`\\`typescript\ninterface ContainerStyleProps {\n gap?: Size; // Space between children\n padding?: Size; // Padding on all sides\n paddingVertical?: Size; // Top and bottom padding\n paddingHorizontal?: Size; // Left and right padding\n margin?: Size; // Margin on all sides\n marginVertical?: Size; // Top and bottom margin\n marginHorizontal?: Size; // Left and right margin\n}\n\\`\\`\\`\n\n### TextSpacingStyleProps (Text Components)\n**Components**: Text\n\n\\`\\`\\`typescript\ninterface TextSpacingStyleProps {\n gap?: Size; // Space between nested elements\n padding?: Size; // Padding on all sides\n paddingVertical?: Size; // Top and bottom padding\n paddingHorizontal?: Size; // Left and right padding\n}\n\\`\\`\\`\n\n### PressableSpacingStyleProps (Interactive Elements)\n**Components**: Pressable\n\n\\`\\`\\`typescript\ninterface PressableSpacingStyleProps {\n padding?: Size; // Padding on all sides\n paddingVertical?: Size; // Top and bottom padding\n paddingHorizontal?: Size; // Left and right padding\n}\n\\`\\`\\`\n\n### FormInputStyleProps (Form Inputs)\n**Components**: Input, Select, TextArea, Checkbox, RadioButton, Switch, Slider\n\n\\`\\`\\`typescript\ninterface FormInputStyleProps {\n margin?: Size; // Margin on all sides\n marginVertical?: Size; // Top and bottom margin\n marginHorizontal?: Size; // Left and right margin\n}\n\\`\\`\\`\n\n## Size Values\n\nSize variants map to theme values:\n\n| Size | Padding | Spacing (Gap) |\n|------|---------|---------------|\n| xs | 4px | 4px |\n| sm | 8px | 8px |\n| md | 16px | 16px |\n| lg | 24px | 24px |\n| xl | 32px | 32px |\n\n## Usage Examples\n\n### Container Spacing\n\n\\`\\`\\`tsx\nimport { View, Card, Text } from '@idealyst/components';\n\n// Gap between children\n<View gap=\"md\">\n <Text>Item 1</Text>\n <Text>Item 2</Text>\n</View>\n\n// Padding inside container\n<Card padding=\"lg\" gap=\"sm\">\n <Text weight=\"bold\">Card Title</Text>\n <Text>Card content</Text>\n</Card>\n\n// Directional padding\n<View paddingVertical=\"md\" paddingHorizontal=\"lg\">\n <Text>Content with different vertical/horizontal padding</Text>\n</View>\n\n// Margin for spacing between containers\n<Card margin=\"md\" padding=\"lg\">\n <Text>Card with margin</Text>\n</Card>\n\\`\\`\\`\n\n### Form Input Spacing\n\n\\`\\`\\`tsx\nimport { Input, Checkbox, View } from '@idealyst/components';\n\n// Use margin to space form fields\n<View>\n <Input placeholder=\"Email\" marginVertical=\"sm\" />\n <Input placeholder=\"Password\" marginVertical=\"sm\" />\n <Checkbox label=\"Remember me\" marginVertical=\"md\" />\n</View>\n\\`\\`\\`\n\n### Combining with Style Prop\n\nThe spacing props work alongside the style prop:\n\n\\`\\`\\`tsx\n<View\n gap=\"md\"\n padding=\"lg\"\n style={{ backgroundColor: '#f5f5f5', borderRadius: 8 }}\n>\n <Text>Content</Text>\n</View>\n\\`\\`\\`\n\n## Custom Components\n\nYou can use the exported builder functions to add spacing variants to custom components:\n\n\\`\\`\\`typescript\nimport { StyleSheet } from 'react-native-unistyles';\nimport { Theme } from '@idealyst/theme';\nimport {\n buildGapVariants,\n buildPaddingVariants,\n buildMarginVariants,\n} from '@idealyst/components';\n\nexport const customStyles = StyleSheet.create((theme: Theme) => ({\n container: {\n variants: {\n gap: buildGapVariants(theme),\n padding: buildPaddingVariants(theme),\n margin: buildMarginVariants(theme),\n },\n },\n}));\n\\`\\`\\`\n\n## Best Practices\n\n1. **Use variants for consistency**: Prefer Size variants over numeric values for consistent spacing across your app\n2. **Gap over margins for children**: Use \\`gap\\` to space children instead of margins on individual items\n3. **Directional props for precision**: Use paddingVertical/paddingHorizontal when you need different spacing\n4. **Form spacing with margin**: Use marginVertical on form inputs to create consistent form layouts\n5. **Combine with theme values**: The variant values come from the theme, ensuring consistency\n`,\n\n \"idealyst://framework/api-overview\": `# API Architecture Overview\n\nIdealyst provides a dual API architecture with both tRPC and GraphQL, giving you flexibility for different use cases.\n\n## When to Use Each\n\n### tRPC (Type-Safe RPC)\n- **Best for**: Internal clients, same-team consumption\n- **Benefits**: End-to-end type safety, no code generation, fast development\n- **Use when**: Your frontend and backend are TypeScript\n\n### GraphQL\n- **Best for**: Public APIs, third-party integrations, mobile apps\n- **Benefits**: Flexible queries, schema documentation, wide ecosystem\n- **Use when**: You need schema introspection or have non-TypeScript clients\n\n## Architecture\n\nBoth APIs run on the same Express server:\n\n\\`\\`\\`\nServer (port 3000)\n├── /trpc/* → tRPC handlers\n├── /graphql → GraphQL Yoga endpoint\n└── Shared context (database, auth)\n\\`\\`\\`\n\n## File Structure\n\n\\`\\`\\`\npackages/api/src/\n├── routers/ # tRPC routers\n│ ├── index.ts # Root router\n│ └── test.ts # Example router\n├── graphql/ # GraphQL setup\n│ ├── builder.ts # Pothos schema builder\n│ ├── index.ts # Yoga server setup\n│ └── types/ # GraphQL type definitions\n│ └── test.ts # Example types\n├── context.ts # Shared context\n├── server.ts # Express server\n└── index.ts # Entry point\n\\`\\`\\`\n\n## Shared Context\n\nBoth APIs share the same context:\n\n\\`\\`\\`typescript\n// context.ts\nexport interface Context {\n db: PrismaClient;\n // Add auth, session, etc.\n}\n\nexport async function createContext(): Promise<Context> {\n return {\n db: prisma,\n };\n}\n\\`\\`\\`\n\n## Client Setup\n\nThe shared package provides clients for both:\n\n\\`\\`\\`typescript\n// In your App component\nimport { createTRPCClient, createGraphQLClient } from '@your-app/shared';\n\n// tRPC - automatic type inference\nconst trpcClient = createTRPCClient({ apiUrl: 'http://localhost:3000/trpc' });\n\n// GraphQL - manual queries with graphql-request\ncreateGraphQLClient({ apiUrl: 'http://localhost:3000/graphql' });\n\\`\\`\\`\n\n## Migration Path\n\nStart with tRPC for rapid development, add GraphQL when you need:\n- Public API documentation\n- Third-party integrations\n- Schema-first development\n- Non-TypeScript clients\n`,\n\n \"idealyst://framework/graphql-setup\": `# GraphQL Setup Guide\n\nIdealyst uses Pothos (code-first schema) with GraphQL Yoga server, integrated with Prisma.\n\n## Server Setup\n\n### 1. Schema Builder (builder.ts)\n\n\\`\\`\\`typescript\nimport SchemaBuilder from '@pothos/core';\nimport PrismaPlugin from '@pothos/plugin-prisma';\nimport type PrismaTypes from './generated';\nimport { prisma } from '@your-app/database';\n\nexport const builder = new SchemaBuilder<{\n PrismaTypes: PrismaTypes;\n Context: { db: typeof prisma };\n}>({\n plugins: [PrismaPlugin],\n prisma: {\n client: prisma,\n },\n});\n\n// Initialize Query and Mutation types\nbuilder.queryType({});\nbuilder.mutationType({});\n\\`\\`\\`\n\n### 2. Generate Prisma Types\n\n\\`\\`\\`bash\n# In packages/api\nnpx prisma generate --generator pothos\n\\`\\`\\`\n\nAdd to your prisma schema:\n\n\\`\\`\\`prisma\ngenerator pothos {\n provider = \"prisma-pothos-types\"\n output = \"../src/graphql/generated.ts\"\n}\n\\`\\`\\`\n\n### 3. Define Types (types/example.ts)\n\n\\`\\`\\`typescript\nimport { builder } from '../builder';\n\n// Object type from Prisma model\nbuilder.prismaObject('Test', {\n fields: (t) => ({\n id: t.exposeID('id'),\n name: t.exposeString('name'),\n message: t.exposeString('message'),\n status: t.exposeString('status'),\n createdAt: t.expose('createdAt', { type: 'DateTime' }),\n }),\n});\n\n// Input type for mutations\nconst CreateTestInput = builder.inputType('CreateTestInput', {\n fields: (t) => ({\n name: t.string({ required: true }),\n message: t.string({ required: true }),\n status: t.string({ required: true }),\n }),\n});\n\n// Query\nbuilder.queryField('tests', (t) =>\n t.prismaField({\n type: ['Test'],\n args: {\n take: t.arg.int(),\n skip: t.arg.int(),\n },\n resolve: async (query, _root, args, ctx) =>\n ctx.db.test.findMany({\n ...query,\n take: args.take ?? 10,\n skip: args.skip ?? 0,\n orderBy: { createdAt: 'desc' },\n }),\n })\n);\n\n// Mutation\nbuilder.mutationField('createTest', (t) =>\n t.prismaField({\n type: 'Test',\n args: {\n input: t.arg({ type: CreateTestInput, required: true }),\n },\n resolve: async (query, _root, args, ctx) =>\n ctx.db.test.create({\n ...query,\n data: args.input,\n }),\n })\n);\n\\`\\`\\`\n\n### 4. Yoga Server (index.ts)\n\n\\`\\`\\`typescript\nimport { createYoga } from 'graphql-yoga';\nimport { builder } from './builder';\nimport './types/test'; // Import all type definitions\n\nexport const yoga = createYoga({\n schema: builder.toSchema(),\n graphqlEndpoint: '/graphql',\n});\n\\`\\`\\`\n\n### 5. Mount in Express (server.ts)\n\n\\`\\`\\`typescript\nimport express from 'express';\nimport { yoga } from './graphql';\n\nconst app = express();\n\n// GraphQL endpoint\napp.use('/graphql', yoga);\n\n// tRPC endpoint\napp.use('/trpc', trpcMiddleware);\n\\`\\`\\`\n\n## Client Setup\n\n### 1. GraphQL Client (shared/src/graphql/client.ts)\n\n\\`\\`\\`typescript\nimport { GraphQLClient } from 'graphql-request';\n\nlet client: GraphQLClient | null = null;\n\nexport function createGraphQLClient(config: { apiUrl: string }) {\n client = new GraphQLClient(config.apiUrl);\n return client;\n}\n\nexport function getGraphQLClient(): GraphQLClient {\n if (!client) throw new Error('GraphQL client not initialized');\n return client;\n}\n\nexport { gql } from 'graphql-request';\n\\`\\`\\`\n\n### 2. Using with React Query\n\n\\`\\`\\`typescript\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { getGraphQLClient, gql } from '../graphql/client';\n\nconst TESTS_QUERY = gql\\`\n query GetTests($take: Int) {\n tests(take: $take) {\n id\n name\n message\n }\n }\n\\`;\n\nconst CREATE_TEST = gql\\`\n mutation CreateTest($input: CreateTestInput!) {\n createTest(input: $input) {\n id\n name\n }\n }\n\\`;\n\n// Query hook\nconst { data, isLoading } = useQuery({\n queryKey: ['graphql', 'tests'],\n queryFn: () => getGraphQLClient().request(TESTS_QUERY, { take: 10 }),\n});\n\n// Mutation hook\nconst queryClient = useQueryClient();\nconst mutation = useMutation({\n mutationFn: (input) => getGraphQLClient().request(CREATE_TEST, { input }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['graphql', 'tests'] });\n },\n});\n\\`\\`\\`\n\n## GraphQL Playground\n\nAccess the GraphQL playground at:\n\\`\\`\\`\nhttp://localhost:3000/graphql\n\\`\\`\\`\n\nFeatures:\n- Schema explorer\n- Query autocompletion\n- Documentation browser\n- Query history\n\n## Best Practices\n\n1. **Use Input Types**: Always use input types for mutations\n2. **Pagination**: Implement cursor-based pagination for lists\n3. **Error Handling**: Use Pothos error types\n4. **Authorization**: Add auth checks in resolvers\n5. **N+1 Prevention**: Use Prisma's query optimization\n`,\n\n \"idealyst://framework/style-system\": `# Style Definition System\n\nIdealyst provides a powerful style definition system with build-time transformations via Babel plugin.\n\n## Overview\n\nThe style system provides:\n- **defineStyle()**: Define base styles for components\n- **extendStyle()**: Merge additional styles with base styles\n- **overrideStyle()**: Completely replace component styles\n- **$iterator pattern**: Expand styles for all theme keys\n\n## defineStyle()\n\nDefine base styles for a component:\n\n\\`\\`\\`typescript\nimport { defineStyle, ThemeStyleWrapper } from '@idealyst/theme';\nimport type { Theme as BaseTheme } from '@idealyst/theme';\n\n// Wrap theme for $iterator support\ntype Theme = ThemeStyleWrapper<BaseTheme>;\n\nexport const buttonStyles = defineStyle('Button', (theme: Theme) => ({\n button: {\n borderRadius: theme.radii.md,\n backgroundColor: theme.intents.primary.primary,\n\n variants: {\n size: {\n // $iterator expands to all size keys (xs, sm, md, lg, xl)\n paddingVertical: theme.sizes.$button.paddingVertical,\n paddingHorizontal: theme.sizes.$button.paddingHorizontal,\n },\n disabled: {\n true: { opacity: 0.5 },\n false: { opacity: 1 },\n },\n },\n },\n text: {\n color: theme.intents.primary.contrast,\n variants: {\n size: {\n fontSize: theme.sizes.$button.fontSize,\n },\n },\n },\n}));\n\\`\\`\\`\n\n## Dynamic Style Functions\n\nFor styles depending on runtime props:\n\n\\`\\`\\`typescript\nexport const buttonStyles = defineStyle('Button', (theme: Theme) => ({\n button: ({ intent = 'primary', type = 'contained' }: ButtonDynamicProps) => ({\n backgroundColor: type === 'contained'\n ? theme.intents[intent].primary\n : 'transparent',\n borderColor: type === 'outlined'\n ? theme.intents[intent].primary\n : 'transparent',\n }),\n}));\n\\`\\`\\`\n\n## Using Styles in Components\n\n\\`\\`\\`typescript\nimport { buttonStyles } from './Button.styles';\n\nconst Button = ({ size = 'md', disabled = false, intent, type }) => {\n // Apply variants\n buttonStyles.useVariants({ size, disabled });\n\n // Static styles - no function call\n const staticStyle = buttonStyles.button;\n\n // Dynamic styles - function call with props\n const dynamicStyle = (buttonStyles.button as any)({ intent, type });\n\n return (\n <TouchableOpacity style={dynamicStyle}>\n <Text style={buttonStyles.text}>Click me</Text>\n </TouchableOpacity>\n );\n};\n\\`\\`\\`\n\n## extendStyle()\n\nMerge additional styles with base component styles:\n\n\\`\\`\\`typescript\n// style-extensions.ts\nimport { extendStyle } from '@idealyst/theme';\n\nextendStyle('Button', (theme) => ({\n button: {\n borderRadius: 9999, // Make all buttons pill-shaped\n },\n text: {\n fontFamily: 'CustomFont',\n },\n}));\n\\`\\`\\`\n\n## overrideStyle()\n\nCompletely replace component styles:\n\n\\`\\`\\`typescript\nimport { overrideStyle } from '@idealyst/theme';\n\noverrideStyle('Button', (theme) => ({\n button: {\n backgroundColor: theme.colors.surface.primary,\n borderWidth: 2,\n borderColor: theme.intents.primary.primary,\n },\n text: {\n color: theme.intents.primary.primary,\n },\n}));\n\\`\\`\\`\n\n## Import Order Matters\n\nExtensions must be imported **before** components:\n\n\\`\\`\\`typescript\n// App.tsx\nimport './style-extensions'; // FIRST - registers extensions\nimport { Button } from '@idealyst/components'; // SECOND - uses extensions\n\\`\\`\\`\n\n## When to Use Each\n\n| API | Use When |\n|-----|----------|\n| \\`defineStyle()\\` | Creating component library styles |\n| \\`extendStyle()\\` | Adding/modifying specific properties |\n| \\`overrideStyle()\\` | Completely custom styling |\n\n## See Also\n\n- \\`idealyst://framework/theming\\` - Theme builder API\n- \\`idealyst://framework/babel-plugin\\` - Plugin configuration\n- \\`idealyst://framework/iterator-pattern\\` - $iterator expansion\n`,\n\n \"idealyst://framework/babel-plugin\": `# Idealyst Babel Plugin\n\nThe Idealyst Babel plugin transforms style definitions at build time.\n\n## Installation\n\nThe plugin is included with \\`@idealyst/theme\\`.\n\n## Configuration\n\n\\`\\`\\`javascript\n// babel.config.js\nmodule.exports = {\n presets: ['module:@react-native/babel-preset'],\n plugins: [\n ['@idealyst/theme/plugin', {\n // REQUIRED: Path to your theme file\n themePath: './src/theme/styles.ts',\n\n // Optional: Enable debug logging\n debug: false,\n verbose: false,\n\n // Optional: Paths to auto-process\n autoProcessPaths: [\n '@idealyst/components',\n '@idealyst/datepicker',\n 'src/',\n ],\n }],\n ],\n};\n\\`\\`\\`\n\n## What the Plugin Does\n\n### 1. Transforms defineStyle() to StyleSheet.create()\n\n**Input:**\n\\`\\`\\`typescript\ndefineStyle('Button', (theme) => ({\n button: { backgroundColor: theme.intents.primary.primary }\n}));\n\\`\\`\\`\n\n**Output:**\n\\`\\`\\`typescript\nStyleSheet.create((theme) => ({\n button: { backgroundColor: theme.intents.primary.primary }\n}));\n\\`\\`\\`\n\n### 2. Expands $iterator Patterns\n\n**Input:**\n\\`\\`\\`typescript\ndefineStyle('Button', (theme) => ({\n button: {\n variants: {\n size: {\n paddingVertical: theme.sizes.$button.paddingVertical,\n },\n },\n },\n}));\n\\`\\`\\`\n\n**Output:**\n\\`\\`\\`typescript\nStyleSheet.create((theme) => ({\n button: {\n variants: {\n size: {\n xs: { paddingVertical: theme.sizes.button.xs.paddingVertical },\n sm: { paddingVertical: theme.sizes.button.sm.paddingVertical },\n md: { paddingVertical: theme.sizes.button.md.paddingVertical },\n lg: { paddingVertical: theme.sizes.button.lg.paddingVertical },\n xl: { paddingVertical: theme.sizes.button.xl.paddingVertical },\n },\n },\n },\n}));\n\\`\\`\\`\n\n### 3. Merges Extensions at Build Time\n\n\\`\\`\\`typescript\n// Extension (processed first)\nextendStyle('Button', (theme) => ({\n button: { borderRadius: 9999 },\n}));\n\n// Base (merges with extension)\ndefineStyle('Button', (theme) => ({\n button: { padding: 16 },\n}));\n\n// Result: { padding: 16, borderRadius: 9999 }\n\\`\\`\\`\n\n### 4. Removes extendStyle/overrideStyle Calls\n\nAfter capturing extension definitions, the plugin removes the calls from the output since all merging happens at build time.\n\n## Theme Analysis\n\nThe plugin statically analyzes your theme file to extract:\n- Intent names (primary, success, error, etc.)\n- Size keys (xs, sm, md, lg, xl)\n- Radius names (none, sm, md, lg)\n- Shadow names (none, sm, md, lg, xl)\n\nThis enables $iterator expansion without runtime overhead.\n\n## Troubleshooting\n\n### Styles Not Applying\n\n1. Verify \\`themePath\\` points to your theme file\n2. Clear bundler cache: \\`yarn start --reset-cache\\`\n3. Check \\`void StyleSheet;\\` marker exists in style files\n\n### Theme Changes Not Detected\n\n1. Restart Metro bundler (theme is analyzed once)\n2. Verify theme exports correctly\n\n### Debug Mode\n\nEnable verbose logging:\n\n\\`\\`\\`javascript\n['@idealyst/theme/plugin', {\n themePath: './src/theme/styles.ts',\n verbose: true,\n}],\n\\`\\`\\`\n`,\n\n \"idealyst://framework/breakpoints\": `# Responsive Breakpoints\n\nIdealyst provides a responsive breakpoint system built on Unistyles v3, enabling width-based responsive styling across web and native platforms.\n\n## Default Breakpoints\n\nThe default themes include 5 breakpoints:\n\n| Breakpoint | Min Width | Target Devices |\n|------------|-----------|----------------|\n| \\`xs\\` | 0px | Portrait phones |\n| \\`sm\\` | 576px | Landscape phones |\n| \\`md\\` | 768px | Tablets |\n| \\`lg\\` | 992px | Desktops |\n| \\`xl\\` | 1200px | Large desktops |\n\n## Defining Breakpoints\n\n### Using setBreakpoints()\n\nSet all breakpoints at once:\n\n\\`\\`\\`typescript\nimport { createTheme } from '@idealyst/theme';\n\nconst theme = createTheme()\n // ... other theme config\n .setBreakpoints({\n xs: 0, // Must have one breakpoint at 0\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n })\n .build();\n\\`\\`\\`\n\n### Using addBreakpoint()\n\nAdd breakpoints individually:\n\n\\`\\`\\`typescript\nimport { fromTheme, lightTheme } from '@idealyst/theme';\n\nconst theme = fromTheme(lightTheme)\n .addBreakpoint('xxl', 1400) // Add extra large breakpoint\n .addBreakpoint('xxxl', 1800) // Add even larger\n .build();\n\\`\\`\\`\n\n## Using Breakpoints in Styles\n\n### In StyleSheet.create()\n\nUse object notation for responsive values:\n\n\\`\\`\\`typescript\nimport { StyleSheet } from 'react-native-unistyles';\n\nconst styles = StyleSheet.create((theme) => ({\n container: {\n // Responsive padding\n padding: {\n xs: 8,\n md: 16,\n xl: 24,\n },\n\n // Responsive flex direction\n flexDirection: {\n xs: 'column',\n md: 'row',\n },\n\n // Responsive gap\n gap: {\n xs: 8,\n sm: 12,\n lg: 16,\n },\n },\n\n text: {\n fontSize: {\n xs: 14,\n md: 16,\n lg: 18,\n },\n },\n}));\n\\`\\`\\`\n\n### Cascading Behavior\n\nValues cascade up - if a breakpoint isn't defined, it uses the nearest smaller one:\n\n\\`\\`\\`typescript\npadding: {\n xs: 8, // Used for xs, sm (no sm defined)\n md: 16, // Used for md, lg (no lg defined)\n xl: 24, // Used for xl\n}\n\\`\\`\\`\n\n## Runtime Utilities\n\n### getCurrentBreakpoint()\n\nGet the current active breakpoint:\n\n\\`\\`\\`typescript\nimport { getCurrentBreakpoint } from '@idealyst/theme';\n\nconst current = getCurrentBreakpoint();\nconsole.log(current); // 'md'\n\\`\\`\\`\n\n### getBreakpoints()\n\nGet all registered breakpoints:\n\n\\`\\`\\`typescript\nimport { getBreakpoints } from '@idealyst/theme';\n\nconst breakpoints = getBreakpoints();\n// { xs: 0, sm: 576, md: 768, lg: 992, xl: 1200 }\n\\`\\`\\`\n\n### isBreakpointUp() / isBreakpointDown()\n\nCheck viewport against breakpoints:\n\n\\`\\`\\`typescript\nimport { isBreakpointUp, isBreakpointDown } from '@idealyst/theme';\n\nif (isBreakpointUp('md')) {\n // Tablet or larger\n}\n\nif (isBreakpointDown('md')) {\n // Mobile only (below tablet)\n}\n\\`\\`\\`\n\n### resolveResponsive()\n\nResolve a responsive value for the current breakpoint:\n\n\\`\\`\\`typescript\nimport { resolveResponsive } from '@idealyst/theme';\n\nconst padding = resolveResponsive({ xs: 8, md: 16, xl: 24 });\n// Returns 8 on mobile, 16 on tablet, 24 on desktop\n\\`\\`\\`\n\n## Responsive Type\n\nThe \\`Responsive<T>\\` type makes any value responsive:\n\n\\`\\`\\`typescript\nimport { Responsive, Size } from '@idealyst/theme';\n\n// Can be either a direct value or breakpoint map\ntype Props = {\n size: Responsive<Size>;\n};\n\n// Both are valid:\n<Component size=\"md\" />\n<Component size={{ xs: 'sm', md: 'lg' }} />\n\\`\\`\\`\n\n### Type Guard\n\nCheck if a value is responsive:\n\n\\`\\`\\`typescript\nimport { isResponsiveValue, Responsive, Size } from '@idealyst/theme';\n\nfunction handleSize(size: Responsive<Size>) {\n if (isResponsiveValue(size)) {\n // size is Partial<Record<Breakpoint, Size>>\n console.log(size.xs, size.md);\n } else {\n // size is Size\n console.log(size);\n }\n}\n\\`\\`\\`\n\n## TypeScript Support\n\nCustom breakpoints are fully typed:\n\n\\`\\`\\`typescript\nconst theme = createTheme()\n .setBreakpoints({\n mobile: 0,\n tablet: 768,\n desktop: 1024,\n })\n .build();\n\n// Register for type inference\ndeclare module '@idealyst/theme' {\n interface CustomThemeRegistry {\n theme: typeof theme;\n }\n}\n\n// Now Breakpoint = 'mobile' | 'tablet' | 'desktop'\nimport { Breakpoint } from '@idealyst/theme';\n\\`\\`\\`\n\n## Unistyles Integration\n\nBreakpoints are automatically registered with Unistyles:\n\n\\`\\`\\`typescript\nimport { UnistylesRegistry } from 'react-native-unistyles';\nimport { lightTheme, darkTheme } from '@idealyst/theme';\n\nUnistylesRegistry\n .addThemes({ light: lightTheme, dark: darkTheme })\n .addBreakpoints(lightTheme.breakpoints) // Register breakpoints\n .addConfig({ initialTheme: 'light' });\n\\`\\`\\`\n\n## Cross-Platform Behavior\n\n- **Web**: Breakpoints convert to CSS media queries automatically\n- **Native**: Uses device screen width (works with tablets, phones, etc.)\n- **Same API**: Write once, works everywhere\n\n## Best Practices\n\n1. **Mobile-first**: Start with \\`xs\\` and add larger breakpoints as needed\n2. **Use cascading**: Don't define every breakpoint - let values cascade\n3. **Consistent breakpoints**: Use the same breakpoints across themes\n4. **Test on devices**: Verify layouts on actual device widths\n5. **Avoid over-responsiveness**: Not everything needs to change per breakpoint\n`,\n\n \"idealyst://framework/iterator-pattern\": `# The $iterator Pattern\n\nThe \\`$iterator\\` pattern allows defining styles once that expand to all keys of a theme object.\n\n## ThemeStyleWrapper\n\nWrap your theme type to enable $iterator properties:\n\n\\`\\`\\`typescript\nimport { ThemeStyleWrapper } from '@idealyst/theme';\nimport type { Theme as BaseTheme } from '@idealyst/theme';\n\ntype Theme = ThemeStyleWrapper<BaseTheme>;\n\\`\\`\\`\n\nThis adds \\`$property\\` versions of iterable theme properties:\n\n| Original Path | $iterator Path |\n|--------------------------|---------------------------|\n| \\`theme.intents.primary\\` | \\`theme.$intents.primary\\` |\n| \\`theme.sizes.button.md\\` | \\`theme.sizes.$button.md\\` |\n\n## Usage Examples\n\n### Expand Intents\n\n\\`\\`\\`typescript\n// Single definition\nvariants: {\n intent: {\n backgroundColor: theme.$intents.light,\n borderColor: theme.$intents.primary,\n },\n}\n\n// Expands to all intent keys (primary, success, error, warning, etc.)\n// Result:\n// intent: {\n// primary: { backgroundColor: theme.intents.primary.light, borderColor: theme.intents.primary.primary },\n// success: { backgroundColor: theme.intents.success.light, borderColor: theme.intents.success.primary },\n// error: { ... },\n// ...\n// }\n\\`\\`\\`\n\n### Expand Sizes\n\n\\`\\`\\`typescript\n// Single definition\nvariants: {\n size: {\n paddingVertical: theme.sizes.$button.paddingVertical,\n fontSize: theme.sizes.$button.fontSize,\n },\n}\n\n// Expands to all size keys (xs, sm, md, lg, xl)\n// Result:\n// size: {\n// xs: { paddingVertical: theme.sizes.button.xs.paddingVertical, fontSize: theme.sizes.button.xs.fontSize },\n// sm: { paddingVertical: theme.sizes.button.sm.paddingVertical, fontSize: theme.sizes.button.sm.fontSize },\n// md: { ... },\n// ...\n// }\n\\`\\`\\`\n\n## Complete Example\n\n\\`\\`\\`typescript\nimport { defineStyle, ThemeStyleWrapper } from '@idealyst/theme';\nimport type { Theme as BaseTheme } from '@idealyst/theme';\n\ntype Theme = ThemeStyleWrapper<BaseTheme>;\n\nexport const chipStyles = defineStyle('Chip', (theme: Theme) => ({\n chip: {\n borderRadius: 999,\n\n variants: {\n // Expand for all sizes\n size: {\n paddingVertical: theme.sizes.$chip.paddingVertical,\n paddingHorizontal: theme.sizes.$chip.paddingHorizontal,\n minHeight: theme.sizes.$chip.minHeight,\n },\n\n // Expand for all intents\n intent: {\n backgroundColor: theme.$intents.light,\n borderColor: theme.$intents.primary,\n },\n },\n },\n\n text: {\n variants: {\n size: {\n fontSize: theme.sizes.$chip.fontSize,\n lineHeight: theme.sizes.$chip.lineHeight,\n },\n\n intent: {\n color: theme.$intents.dark,\n },\n },\n },\n}));\n\\`\\`\\`\n\n## createIteratorStyles()\n\nAlternative to defineStyle for custom components:\n\n\\`\\`\\`typescript\nimport { createIteratorStyles } from '@idealyst/theme';\n\nexport const styles = createIteratorStyles((theme) => ({\n box: {\n variants: {\n intent: {\n backgroundColor: theme.$intents.light,\n },\n },\n },\n}));\n\\`\\`\\`\n\n## Benefits\n\n1. **DRY Code**: Define once, expand to many\n2. **Type Safety**: TypeScript validates iterator properties\n3. **Maintainable**: Adding new sizes/intents to theme auto-expands\n4. **Zero Runtime Cost**: Expansion happens at build time\n`,\n};\n","export const navigationGuides: Record<string, string> = {\n \"idealyst://navigation/overview\": `# Navigation System Overview\n\nThe Idealyst navigation system provides a unified API for both React Native and web applications, handling routing seamlessly across platforms.\n\n## Core Concepts\n\n### Cross-Platform Routing\n- **Mobile (React Native)**: Uses React Navigation for native navigation patterns\n- **Web**: Uses React Router for browser-based routing\n- **Unified API**: Same code works on both platforms\n\n### Route Types\n\nThere are two fundamental route types:\n\n#### 1. Screen Routes\nRenders a component directly to the screen:\n\\`\\`\\`tsx\n{\n path: \"profile\",\n type: 'screen',\n component: ProfileScreen\n}\n\\`\\`\\`\n\n#### 2. Navigator Routes\nWraps child routes with navigation structure:\n\\`\\`\\`tsx\n{\n path: \"/\",\n type: 'navigator',\n layout: 'stack', // or 'tab', 'drawer', 'modal'\n routes: [\n { path: \"home\", type: 'screen', component: HomeScreen },\n { path: \"settings\", type: 'screen', component: SettingsScreen },\n ]\n}\n\\`\\`\\`\n\n## Setup\n\n### Basic Setup\n\n\\`\\`\\`tsx\nimport { NavigatorProvider } from '@idealyst/navigation';\n\nfunction App() {\n return (\n <NavigatorProvider route={appRouter}>\n {/* Content managed by router */}\n </NavigatorProvider>\n );\n}\n\\`\\`\\`\n\n### Quick Start with Examples\n\nUse the pre-built example router for instant working navigation:\n\n\\`\\`\\`tsx\nimport { ExampleNavigationRouter } from '@idealyst/navigation/examples';\n\n<NavigatorProvider route={ExampleNavigationRouter} />\n\\`\\`\\`\n\nThe example router demonstrates:\n- Stack-based navigation structure\n- Custom web layouts with header and sidebar\n- Tab navigation for nested sections\n\n## Platform Differences\n\n### Mobile (React Native)\n- Stack navigator: Native stack navigation with animations\n- Tab navigator: Bottom tab bar\n- Drawer navigator: Side drawer with gestures\n- Modal navigator: Full-screen modal presentation\n\n### Web\n- Stack navigator: Browser history-based routing\n- Tab navigator: Top or side tab navigation\n- All navigators: Use URL paths for routing\n- Custom layouts: Can add headers, sidebars, footers\n\n## Key Features\n\n1. **Type-Safe Navigation**: Full TypeScript support\n2. **Path Parameters**: \\`/user/:id\\` support\n3. **Nested Routes**: Unlimited nesting depth\n4. **Custom Layouts**: Web-specific layout components\n5. **Theme Integration**: Works with @idealyst/theme\n6. **Cross-Platform**: Write once, run everywhere\n`,\n\n \"idealyst://navigation/route-configuration\": `# Route Configuration\n\nLearn how to define and structure routes in your Idealyst application.\n\n## Route Definition\n\n### Screen Route\n\nThe simplest route type - renders a component:\n\n\\`\\`\\`tsx\nimport { RouteParam } from '@idealyst/navigation';\n\nconst route: RouteParam = {\n path: \"profile\",\n type: 'screen',\n component: ProfileScreen,\n options: {\n title: \"User Profile\",\n headerShown: true\n }\n};\n\\`\\`\\`\n\n### Navigator Route\n\nA route that contains child routes:\n\n\\`\\`\\`tsx\nconst route: RouteParam = {\n path: \"/\",\n type: 'navigator',\n layout: 'stack',\n routes: [\n { path: \"home\", type: 'screen', component: HomeScreen },\n { path: \"about\", type: 'screen', component: AboutScreen },\n ],\n options: {\n headerShown: false\n }\n};\n\\`\\`\\`\n\n## Path Configuration\n\n### Basic Paths\n\n\\`\\`\\`tsx\n{ path: \"home\", ... } // Relative: /parent/home\n{ path: \"/home\", ... } // Absolute: /home\n{ path: \"\", ... } // Index route\n\\`\\`\\`\n\n### Path Parameters\n\n\\`\\`\\`tsx\n{\n path: \"user/:id\",\n type: 'screen',\n component: UserScreen\n}\n\n// Navigate with:\nnavigator.navigate({\n path: \"/user/:id\",\n vars: { id: \"123\" }\n});\n\n// Access in component:\nimport { useParams } from '@idealyst/navigation';\n\nconst params = useParams();\nconst userId = params.id;\n\\`\\`\\`\n\n### Optional Parameters\n\n\\`\\`\\`tsx\n{ path: \"search/:query?\" } // query is optional\n\\`\\`\\`\n\n## Screen Options\n\n### Common Options\n\n\\`\\`\\`tsx\ntype ScreenOptions = {\n title?: string; // Screen title\n headerShown?: boolean; // Show/hide header (mobile)\n};\n\\`\\`\\`\n\n### Tab-Specific Options\n\nFor tab navigators:\n\n\\`\\`\\`tsx\ntype TabBarScreenOptions = {\n tabBarIcon?: (props: {\n focused: boolean;\n color: string;\n size: string | number\n }) => React.ReactElement;\n\n tabBarLabel?: string; // Tab label\n tabBarBadge?: string | number; // Badge count\n tabBarVisible?: boolean; // Show/hide tab\n} & ScreenOptions;\n\\`\\`\\`\n\nExample:\n\\`\\`\\`tsx\n{\n path: \"home\",\n type: 'screen',\n component: HomeScreen,\n options: {\n tabBarLabel: \"Home\",\n tabBarIcon: ({ focused, color }) => (\n <Icon name=\"home\" color={color} />\n ),\n tabBarBadge: 5\n }\n}\n\\`\\`\\`\n\n## Navigator Options\n\nOptions for navigator routes:\n\n\\`\\`\\`tsx\ntype NavigatorOptions = {\n headerTitle?: React.ComponentType | React.ReactElement | string;\n headerLeft?: React.ComponentType | React.ReactElement;\n headerBackVisible?: boolean;\n headerRight?: React.ComponentType | React.ReactElement;\n headerShown?: boolean;\n};\n\\`\\`\\`\n\nExample:\n\\`\\`\\`tsx\n{\n path: \"/app\",\n type: 'navigator',\n layout: 'stack',\n routes: [...],\n options: {\n headerTitle: \"My App\",\n headerShown: true,\n headerRight: <UserMenu />\n }\n}\n\\`\\`\\`\n\n## Invalid Route Handling\n\nNavigators can specify how to handle invalid routes:\n\n\\`\\`\\`tsx\nimport { NavigatorParam, NotFoundComponentProps } from '@idealyst/navigation';\n\nconst NotFoundPage = ({ path, params }: NotFoundComponentProps) => (\n <View>\n <Text>Page not found: {path}</Text>\n </View>\n);\n\nconst routes: NavigatorParam = {\n path: \"/\",\n type: 'navigator',\n layout: 'stack',\n // Component to show when route is invalid\n notFoundComponent: NotFoundPage,\n // Handler to redirect or show 404\n onInvalidRoute: (path) => {\n if (path.startsWith('/old-')) {\n return { path: '/new-section', replace: true };\n }\n return undefined; // Show notFoundComponent\n },\n routes: [...]\n};\n\\`\\`\\`\n\nSee the **Invalid Route Handling** guide for complete documentation.\n\n## Nested Routes\n\nCreate hierarchical navigation:\n\n\\`\\`\\`tsx\nconst appRouter: RouteParam = {\n path: \"/\",\n type: 'navigator',\n layout: 'stack',\n routes: [\n {\n path: \"dashboard\",\n type: 'navigator',\n layout: 'tab',\n routes: [\n { path: \"overview\", type: 'screen', component: OverviewScreen },\n { path: \"analytics\", type: 'screen', component: AnalyticsScreen },\n { path: \"reports\", type: 'screen', component: ReportsScreen },\n ]\n },\n {\n path: \"settings\",\n type: 'screen',\n component: SettingsScreen\n },\n ]\n};\n\\`\\`\\`\n\n## Full Path Resolution\n\nFull paths are automatically computed:\n- \\`/dashboard/overview\\`\n- \\`/dashboard/analytics\\`\n- \\`/dashboard/reports\\`\n- \\`/settings\\`\n\n## Best Practices\n\n1. **Use relative paths** for child routes\n2. **Keep nesting shallow** (3 levels max recommended)\n3. **Group related screens** in navigators\n4. **Use meaningful paths** that reflect content\n5. **Define index routes** with empty path\n6. **Set appropriate options** for each screen type\n`,\n\n \"idealyst://navigation/navigator-types\": `# Navigator Types\n\nIdealyst supports four navigator types: stack, tab, drawer, and modal. Each provides different navigation patterns.\n\n## Stack Navigator\n\nLinear, hierarchical navigation - the most common pattern.\n\n### Configuration\n\n\\`\\`\\`tsx\n{\n path: \"/app\",\n type: 'navigator',\n layout: 'stack',\n routes: [\n { path: \"\", type: 'screen', component: HomeScreen },\n { path: \"profile\", type: 'screen', component: ProfileScreen },\n { path: \"settings\", type: 'screen', component: SettingsScreen },\n ]\n}\n\\`\\`\\`\n\n### Platform Behavior\n\n**Mobile:**\n- Native stack navigation with slide animations\n- Hardware back button support\n- Swipe-to-go-back gesture\n\n**Web:**\n- Browser history integration\n- URL updates on navigation\n- Back/forward browser buttons work\n\n### Use Cases\n- Main app navigation\n- Detail views\n- Settings flows\n- Onboarding sequences\n\n## Tab Navigator\n\nSection-based navigation with a tab bar.\n\n### Configuration\n\n\\`\\`\\`tsx\n{\n path: \"/\",\n type: 'navigator',\n layout: 'tab',\n routes: [\n {\n path: \"home\",\n type: 'screen',\n component: HomeScreen,\n options: {\n tabBarLabel: \"Home\",\n tabBarIcon: ({ color }) => <Icon name=\"home\" color={color} />\n }\n },\n {\n path: \"search\",\n type: 'screen',\n component: SearchScreen,\n options: {\n tabBarLabel: \"Search\",\n tabBarIcon: ({ color }) => <Icon name=\"search\" color={color} />\n }\n },\n ]\n}\n\\`\\`\\`\n\n### Platform Behavior\n\n**Mobile:**\n- Bottom tab bar\n- Tab icons and labels\n- Badge support\n- Active tab highlighting\n\n**Web:**\n- Top or side tabs\n- Can use custom layout component\n- URL-based tab switching\n\n### Use Cases\n- Main app sections\n- Content categories\n- Dashboard views\n- Multi-section interfaces\n\n## Drawer Navigator\n\nSide menu navigation, primarily for desktop/tablet.\n\n### Configuration\n\n\\`\\`\\`tsx\n{\n path: \"/\",\n type: 'navigator',\n layout: 'drawer',\n routes: [\n { path: \"dashboard\", type: 'screen', component: DashboardScreen },\n { path: \"users\", type: 'screen', component: UsersScreen },\n { path: \"settings\", type: 'screen', component: SettingsScreen },\n ]\n}\n\\`\\`\\`\n\n### Platform Behavior\n\n**Mobile:**\n- Slide-out drawer\n- Swipe gesture to open\n- Overlay when open\n\n**Web:**\n- Sidebar navigation\n- Can be persistent or overlay\n- Responsive behavior\n\n### Use Cases\n- Admin panels\n- Desktop applications\n- Content management systems\n- Multi-section apps\n\n## Modal Navigator\n\nOverlay navigation for temporary screens.\n\n### Configuration\n\n\\`\\`\\`tsx\n{\n path: \"/modals\",\n type: 'navigator',\n layout: 'modal',\n routes: [\n { path: \"new-post\", type: 'screen', component: NewPostScreen },\n { path: \"edit-profile\", type: 'screen', component: EditProfileScreen },\n ]\n}\n\\`\\`\\`\n\n### Platform Behavior\n\n**Mobile:**\n- Full-screen modal presentation\n- Slide-up animation\n- Close gesture support\n\n**Web:**\n- Overlay modal\n- Background dimming\n- Click-outside to close\n\n### Use Cases\n- Forms and data entry\n- Action confirmations\n- Image viewers\n- Temporary content\n\n## Combining Navigator Types\n\nNavigators can be nested for complex flows:\n\n\\`\\`\\`tsx\nconst appRouter: RouteParam = {\n path: \"/\",\n type: 'navigator',\n layout: 'stack',\n routes: [\n {\n path: \"main\",\n type: 'navigator',\n layout: 'tab',\n routes: [\n { path: \"feed\", type: 'screen', component: FeedScreen },\n { path: \"profile\", type: 'screen', component: ProfileScreen },\n ]\n },\n {\n path: \"modals\",\n type: 'navigator',\n layout: 'modal',\n routes: [\n { path: \"create\", type: 'screen', component: CreateScreen },\n ]\n }\n ]\n};\n\\`\\`\\`\n\n## Choosing the Right Navigator\n\n| Navigator | Mobile | Desktop | Use Case |\n|-----------|--------|---------|----------|\n| **Stack** | ✅ Primary | ✅ Primary | Hierarchical navigation |\n| **Tab** | ✅ Primary | ✅ Secondary | Section-based navigation |\n| **Drawer** | ⚠️ Secondary | ✅ Primary | Menu-based navigation |\n| **Modal** | ✅ Common | ✅ Common | Temporary overlays |\n\n## Best Practices\n\n1. **Use stack for most flows** - It's the most universal pattern\n2. **Limit tab count** - 3-5 tabs maximum for mobile\n3. **Reserve drawers for complex apps** - Best on desktop\n4. **Use modals sparingly** - For focused, temporary tasks\n5. **Consider platform** - What works on mobile may not work on web\n6. **Test navigation flow** - Ensure intuitive user experience\n`,\n\n \"idealyst://navigation/custom-layouts\": `# Custom Layouts (Web Only)\n\nOn web, navigators can use custom layout components to add headers, sidebars, and other UI around route content.\n\n## GeneralLayout Component\n\nThe built-in \\`GeneralLayout\\` provides header and sidebar functionality:\n\n### Basic Usage\n\n\\`\\`\\`tsx\nimport { GeneralLayout } from '@idealyst/navigation';\n\n<GeneralLayout\n header={{\n enabled: true,\n content: <Text>My App</Text>,\n }}\n sidebar={{\n enabled: true,\n content: <NavigationMenu />,\n }}\n>\n {children}\n</GeneralLayout>\n\\`\\`\\`\n\n### Header Configuration\n\n\\`\\`\\`tsx\ntype HeaderConfig = {\n enabled: boolean; // Show/hide header\n height?: number; // Header height (default: 64)\n content?: React.ReactNode; // Header content\n style?: ViewStyle; // Custom styles\n};\n\\`\\`\\`\n\nExample:\n\\`\\`\\`tsx\nheader={{\n enabled: true,\n height: 80,\n content: (\n <View style={{ flexDirection: 'row', justifyContent: 'space-between', padding: 16 }}>\n <Text size=\"lg\" weight=\"bold\">Dashboard</Text>\n <UserMenu />\n </View>\n )\n}}\n\\`\\`\\`\n\n### Sidebar Configuration\n\n\\`\\`\\`tsx\ntype SidebarConfig = {\n enabled: boolean; // Show/hide sidebar\n collapsible?: boolean; // Allow collapse/expand\n position?: 'left' | 'right'; // Sidebar position\n initiallyExpanded?: boolean; // Initial state\n expandedWidth?: number; // Width when expanded (default: 240)\n collapsedWidth?: number; // Width when collapsed (default: 64)\n content?: React.ReactNode; // Sidebar content\n style?: ViewStyle; // Custom styles\n};\n\\`\\`\\`\n\nExample:\n\\`\\`\\`tsx\nsidebar={{\n enabled: true,\n collapsible: true,\n position: 'left',\n initiallyExpanded: true,\n expandedWidth: 280,\n collapsedWidth: 72,\n content: <NavigationSidebar />\n}}\n\\`\\`\\`\n\n## Using Layouts with Navigators\n\n### Stack Navigator with Layout\n\n\\`\\`\\`tsx\nimport { CustomStackLayout } from './layouts/CustomStackLayout';\n\nconst router: NavigatorParam = {\n path: \"/\",\n type: 'navigator',\n layout: 'stack',\n layoutComponent: CustomStackLayout, // Web only!\n routes: [\n { path: \"\", type: 'screen', component: HomeScreen },\n { path: \"about\", type: 'screen', component: AboutScreen },\n ]\n};\n\\`\\`\\`\n\n### Tab Navigator with Layout\n\n\\`\\`\\`tsx\nimport { CustomTabLayout } from './layouts/CustomTabLayout';\n\nconst router: NavigatorParam = {\n path: \"/\",\n type: 'navigator',\n layout: 'tab',\n layoutComponent: CustomTabLayout, // Web only!\n routes: [\n { path: \"feed\", type: 'screen', component: FeedScreen },\n { path: \"profile\", type: 'screen', component: ProfileScreen },\n ]\n};\n\\`\\`\\`\n\n## Creating Custom Layouts\n\n### Stack Layout Component\n\n\\`\\`\\`tsx\nimport { GeneralLayout } from '@idealyst/navigation';\nimport type { StackLayoutProps } from '@idealyst/navigation';\n\nexport const CustomStackLayout: React.FC<StackLayoutProps> = ({\n children,\n options,\n routes,\n currentPath\n}) => {\n return (\n <GeneralLayout\n header={{\n enabled: true,\n content: (\n <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>\n <Text>{options?.headerTitle || 'My App'}</Text>\n {options?.headerRight}\n </View>\n )\n }}\n sidebar={{\n enabled: true,\n collapsible: true,\n content: (\n <NavigationMenu routes={routes} currentPath={currentPath} />\n )\n }}\n >\n {children}\n </GeneralLayout>\n );\n};\n\\`\\`\\`\n\n### Tab Layout Component\n\n\\`\\`\\`tsx\nimport type { TabLayoutProps } from '@idealyst/navigation';\n\nexport const CustomTabLayout: React.FC<TabLayoutProps> = ({\n children,\n routes,\n currentPath\n}) => {\n const navigator = useNavigator();\n\n return (\n <View style={{ flex: 1 }}>\n {/* Custom tab bar */}\n <View style={{ flexDirection: 'row', borderBottom: '1px solid #ccc' }}>\n {routes.map(route => (\n <Pressable\n key={route.path}\n onPress={() => navigator.navigate({ path: route.fullPath, vars: {} })}\n style={{\n padding: 16,\n borderBottom: currentPath === route.fullPath ? '2px solid blue' : 'none'\n }}\n >\n <Text>{route.options?.tabBarLabel || route.path}</Text>\n </Pressable>\n ))}\n </View>\n\n {/* Content */}\n <View style={{ flex: 1 }}>\n {children}\n </View>\n </View>\n );\n};\n\\`\\`\\`\n\n## Layout Props Reference\n\n### StackLayoutProps\n\n\\`\\`\\`tsx\ntype StackLayoutProps = {\n options?: NavigatorOptions; // Navigator options\n routes: RouteWithFullPath[]; // All routes with full paths\n currentPath: string; // Current active path\n children?: React.ReactNode; // Route content\n};\n\\`\\`\\`\n\n### TabLayoutProps\n\n\\`\\`\\`tsx\ntype TabLayoutProps = {\n options?: NavigatorOptions; // Navigator options\n routes: RouteWithFullPath<TabBarScreenOptions>[]; // Tab routes\n currentPath: string; // Current active path\n children?: React.ReactNode; // Route content\n};\n\\`\\`\\`\n\n## Real-World Examples\n\n### Dashboard Layout\n\n\\`\\`\\`tsx\nexport const DashboardLayout: React.FC<StackLayoutProps> = ({\n children,\n routes,\n currentPath\n}) => {\n return (\n <GeneralLayout\n header={{\n enabled: true,\n height: 72,\n content: (\n <View style={{\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: 16\n }}>\n <Text size=\"xl\" weight=\"bold\">Dashboard</Text>\n <View style={{ flexDirection: 'row', gap: 16 }}>\n <NotificationBell />\n <UserAvatar />\n </View>\n </View>\n )\n }}\n sidebar={{\n enabled: true,\n collapsible: true,\n position: 'left',\n expandedWidth: 260,\n content: <DashboardSidebar routes={routes} currentPath={currentPath} />\n }}\n >\n {children}\n </GeneralLayout>\n );\n};\n\\`\\`\\`\n\n### Admin Panel Layout\n\n\\`\\`\\`tsx\nexport const AdminLayout: React.FC<StackLayoutProps> = ({ children }) => {\n return (\n <GeneralLayout\n header={{\n enabled: true,\n content: <AdminHeader />,\n style: { backgroundColor: '#1a1a1a', color: '#fff' }\n }}\n sidebar={{\n enabled: true,\n collapsible: true,\n position: 'left',\n initiallyExpanded: true,\n content: <AdminNavigationMenu />,\n style: { backgroundColor: '#2a2a2a' }\n }}\n >\n <View style={{ padding: 24 }}>\n {children}\n </View>\n </GeneralLayout>\n );\n};\n\\`\\`\\`\n\n## Best Practices\n\n1. **Use GeneralLayout as base** - Don't reinvent header/sidebar logic\n2. **Keep layouts simple** - Complex logic belongs in screens\n3. **Make responsive** - Consider different screen sizes\n4. **Theme-aware** - Use theme colors and spacing\n5. **Accessible** - Ensure keyboard and screen reader support\n6. **Performance** - Memoize layout components when possible\n7. **Consistent** - Use same layout for similar sections\n\n## Platform Considerations\n\n- **Web only**: Layout components only apply to web\n- **Mobile**: Uses native navigation components\n- **Conditional rendering**: Check platform if needed\n- **Testing**: Test both platforms separately\n`,\n\n \"idealyst://navigation/use-navigator\": `# useNavigator Hook\n\nThe \\`useNavigator\\` hook provides navigation functionality and route information within your components.\n\n## Basic Usage\n\n\\`\\`\\`tsx\nimport { useNavigator } from '@idealyst/navigation';\n\nfunction MyComponent() {\n const navigator = useNavigator();\n\n return (\n <Button onPress={() => navigator.navigate({ path: '/profile', vars: {} })}>\n Go to Profile\n </Button>\n );\n}\n\\`\\`\\`\n\n## API Reference\n\n### navigator.navigate()\n\nNavigate to a route:\n\n\\`\\`\\`tsx\nnavigator.navigate({\n path: string;\n vars?: Record<string, string>;\n replace?: boolean; // Replace history entry instead of push\n});\n\\`\\`\\`\n\nExamples:\n\\`\\`\\`tsx\n// Simple navigation\nnavigator.navigate({ path: '/home' });\n\n// With path parameters\nnavigator.navigate({\n path: '/user/:id',\n vars: { id: '123' }\n});\n\n// With query parameters\nnavigator.navigate({\n path: '/search',\n vars: { q: 'react', category: 'tutorial' }\n});\n\n// Replace current history entry (no back navigation to current page)\nnavigator.navigate({\n path: '/dashboard',\n replace: true\n});\n\\`\\`\\`\n\n### Replace vs Push Navigation\n\nBy default, navigation pushes a new entry onto the history stack. Use \\`replace: true\\` when you want to replace the current entry instead:\n\n\\`\\`\\`tsx\n// After login, replace login page in history\nnavigator.navigate({ path: '/dashboard', replace: true });\n\n// Redirect without adding to history\nnavigator.navigate({ path: '/new-location', replace: true });\n\\`\\`\\`\n\n**Use cases for replace:**\n- Post-login redirects (user shouldn't go back to login)\n- After form submission redirects\n- URL canonicalization/normalization\n- Redirect from deprecated routes\n\n## useParams Hook\n\nAccess current route path parameters:\n\n\\`\\`\\`tsx\nimport { useParams } from '@idealyst/navigation';\n\nfunction UserScreen() {\n const params = useParams();\n const userId = params.id; // Path param from /user/:id\n\n return <Text>User ID: {userId}</Text>;\n}\n\\`\\`\\`\n\n## useNavigationState Hook\n\nAccess navigation state passed via the \\`state\\` property:\n\n\\`\\`\\`tsx\nimport { useNavigationState } from '@idealyst/navigation';\n\n// When navigating:\nnavigator.navigate({\n path: '/recording',\n state: { autostart: true, source: 'home' }\n});\n\n// In destination screen:\nfunction RecordingScreen() {\n const { autostart, source } = useNavigationState<{\n autostart?: boolean;\n source?: string;\n }>();\n\n // autostart = true, source = 'home'\n}\n\\`\\`\\`\n\n### Consuming State (Web)\n\nRemove state from URL after reading:\n\n\\`\\`\\`tsx\n// URL: /recording?autostart=true\nconst { autostart } = useNavigationState<{ autostart?: boolean }>({\n consume: ['autostart']\n});\n// autostart = true, URL becomes: /recording (param removed)\n\\`\\`\\`\n\n## useLocation (React Router)\n\nGet the current route path on web:\n\n\\`\\`\\`tsx\nimport { useLocation } from '@idealyst/navigation';\n\nfunction MyComponent() {\n const location = useLocation();\n console.log(location.pathname); // \"/user/123\"\n}\n\\`\\`\\`\n\n### navigator.canGoBack()\n\nCheck if back navigation is available:\n\n\\`\\`\\`tsx\nconst navigator = useNavigator();\n\nif (navigator.canGoBack()) {\n // Show back button\n}\n\\`\\`\\`\n\n**Platform behavior:**\n- **Web**: Returns \\`true\\` if there's a valid parent route in the route hierarchy (e.g., \\`/users/123\\` can go back to \\`/users\\`)\n- **Native**: Uses React Navigation's \\`canGoBack()\\` to check navigation stack\n\n### navigator.goBack()\n\nNavigate back in the route hierarchy:\n\n\\`\\`\\`tsx\n<Button onPress={() => navigator.goBack()}>\n Go Back\n</Button>\n\\`\\`\\`\n\n**Platform behavior:**\n- **Web**: Navigates to the parent route (e.g., \\`/users/123/edit\\` → \\`/users/123\\` → \\`/users\\` → \\`/\\`). Does NOT use browser history - navigates up the route tree.\n- **Native**: Uses React Navigation's \\`goBack()\\` to pop the navigation stack\n\n**Important**: On web, this is NOT browser history back. It navigates to the parent path in the route hierarchy. Use this for \"up\" navigation within your app structure.\n\n## Path Parameters\n\n### Defining Parameters\n\nIn route configuration:\n\\`\\`\\`tsx\n{\n path: \"user/:id\",\n type: 'screen',\n component: UserScreen\n}\n\\`\\`\\`\n\n### Accessing Parameters\n\nIn the screen component:\n\\`\\`\\`tsx\nimport { useParams } from '@idealyst/navigation';\n\nfunction UserScreen() {\n const params = useParams();\n const userId = params.id;\n\n return <Text>User ID: {userId}</Text>;\n}\n\\`\\`\\`\n\n### Multiple Parameters\n\n\\`\\`\\`tsx\nimport { useParams } from '@idealyst/navigation';\n\n// Route: \"post/:postId/comment/:commentId\"\n\n// Navigate:\nnavigator.navigate({\n path: '/post/:postId/comment/:commentId',\n vars: { postId: '42', commentId: '7' }\n});\n\n// Access:\nconst params = useParams();\nconst postId = params.postId;\nconst commentId = params.commentId;\n\\`\\`\\`\n\n## Query Parameters\n\n### Passing Query Params\n\n\\`\\`\\`tsx\nnavigator.navigate({\n path: '/search',\n vars: {\n q: 'typescript',\n category: 'tutorial',\n sort: 'recent'\n }\n});\n\n// Results in: /search?q=typescript&category=tutorial&sort=recent\n\\`\\`\\`\n\n### Reading Query Params\n\n\\`\\`\\`tsx\nimport { useNavigationState } from '@idealyst/navigation';\n\nfunction SearchScreen() {\n // Query params are accessed via useNavigationState on web\n const { q, category, sort } = useNavigationState<{\n q?: string;\n category?: string;\n sort?: string;\n }>();\n\n // Use params...\n}\n\\`\\`\\`\n\n## Navigation Patterns\n\n### Programmatic Navigation\n\nNavigate based on conditions:\n\n\\`\\`\\`tsx\nfunction LoginScreen() {\n const navigator = useNavigator();\n\n const handleLogin = async () => {\n const success = await login(credentials);\n\n if (success) {\n navigator.navigate({ path: '/dashboard', vars: {} });\n }\n };\n\n return <Button onPress={handleLogin}>Login</Button>;\n}\n\\`\\`\\`\n\n### Navigation with Data\n\nPass data through navigation:\n\n\\`\\`\\`tsx\n// List screen\n<Button onPress={() => {\n navigator.navigate({\n path: '/product/:id',\n vars: { id: product.id }\n });\n}}>\n View Product\n</Button>\n\n// Detail screen\nfunction ProductScreen() {\n const params = useParams();\n const productId = params.id;\n\n const product = useProduct(productId);\n // Render product...\n}\n\\`\\`\\`\n\n### Conditional Navigation\n\nNavigate based on user state:\n\n\\`\\`\\`tsx\nfunction ProtectedScreen() {\n const navigator = useNavigator();\n const { user } = useAuth();\n\n useEffect(() => {\n if (!user) {\n navigator.navigate({ path: '/login', vars: {} });\n }\n }, [user]);\n\n return user ? <Content /> : null;\n}\n\\`\\`\\`\n\n## Advanced Usage\n\n### Navigation Guards\n\n\\`\\`\\`tsx\nimport { useNavigator, useLocation } from '@idealyst/navigation';\n\nfunction useAuthGuard() {\n const { navigate } = useNavigator();\n const location = useLocation();\n const { isAuthenticated } = useAuth();\n\n useEffect(() => {\n if (!isAuthenticated && location.pathname !== '/login') {\n navigate({ path: '/login' });\n }\n }, [isAuthenticated, location.pathname]);\n}\n\nfunction App() {\n useAuthGuard();\n return <AppContent />;\n}\n\\`\\`\\`\n\n### Deep Linking\n\nHandle deep links:\n\n\\`\\`\\`tsx\nuseEffect(() => {\n const handleDeepLink = (url: string) => {\n // Parse URL and navigate\n const path = parseDeepLink(url);\n navigator.navigate({ path, vars: {} });\n };\n\n // Add deep link listener\n const subscription = Linking.addEventListener('url', ({ url }) => {\n handleDeepLink(url);\n });\n\n return () => subscription.remove();\n}, []);\n\\`\\`\\`\n\n### Navigation History\n\nTrack navigation history:\n\n\\`\\`\\`tsx\nimport { useLocation } from '@idealyst/navigation';\n\nfunction useNavigationHistory() {\n const location = useLocation();\n const [history, setHistory] = useState<string[]>([]);\n\n useEffect(() => {\n setHistory(prev => [...prev, location.pathname]);\n }, [location.pathname]);\n\n return history;\n}\n\\`\\`\\`\n\n## TypeScript Support\n\nType-safe navigation:\n\n\\`\\`\\`tsx\ntype NavigateParams = {\n path: string;\n vars: Record<string, string>;\n};\n\n// Strongly typed vars\ntype UserRouteVars = {\n id: string;\n tab?: 'posts' | 'comments' | 'likes';\n};\n\n// Usage\nnavigator.navigate({\n path: '/user/:id',\n vars: { id: '123', tab: 'posts' } as UserRouteVars\n});\n\\`\\`\\`\n\n## Platform Differences\n\n### React Native\n- \\`canGoBack()\\` checks React Navigation stack\n- \\`goBack()\\` uses native navigation stack\n- Hardware back button supported\n- Gesture-based navigation\n\n### Web\n- \\`canGoBack()\\` checks for valid parent route in hierarchy\n- \\`goBack()\\` navigates to parent route (NOT browser history)\n- Browser back/forward buttons still work for browser history\n- URL updates automatically\n- Bookmarkable URLs\n\n## Best Practices\n\n1. **Always provide vars** - Even if empty: \\`{}\\`\n2. **Type your routes** - Use TypeScript for safety\n3. **Handle errors** - Check if navigation succeeded\n4. **Avoid navigation in render** - Use effects or handlers\n5. **Clean up listeners** - Remove event listeners on unmount\n6. **Test navigation flow** - Verify all paths work\n7. **Use path params for IDs** - Not query params\n8. **Use query params for filters** - Not path params\n\n## Common Patterns\n\n### Back Navigation\n\n\\`\\`\\`tsx\n// Conditionally show back button\nconst { canGoBack, goBack } = useNavigator();\n\n{canGoBack() && (\n <Button\n icon=\"arrow-left\"\n onPress={goBack}\n >\n Back\n </Button>\n)}\n\\`\\`\\`\n\n### Tab Navigation\n\n\\`\\`\\`tsx\nimport { useNavigator, useLocation } from '@idealyst/navigation';\n\nconst tabs = ['feed', 'search', 'profile'];\n\nfunction TabBar() {\n const { navigate } = useNavigator();\n const location = useLocation();\n\n return (\n <View>\n {tabs.map(tab => (\n <Button\n key={tab}\n onPress={() => navigate({ path: \\`/\\${tab}\\` })}\n type={location.pathname === \\`/\\${tab}\\` ? 'contained' : 'outlined'}\n >\n {tab}\n </Button>\n ))}\n </View>\n );\n}\n\\`\\`\\`\n\n### Modal Navigation\n\n\\`\\`\\`tsx\n<Button onPress={() => {\n navigator.navigate({\n path: '/modal/create-post',\n vars: {}\n });\n}}>\n Create Post\n</Button>\n\n// In modal:\n<Button onPress={() => navigator.goBack()}>\n Close\n</Button>\n\\`\\`\\`\n`,\n\n \"idealyst://navigation/invalid-route-handling\": `# Invalid Route Handling\n\nHandle 404 pages and invalid routes with customizable redirect logic and fallback components.\n\n## Overview\n\nThe navigation system provides two mechanisms for handling invalid routes:\n\n1. **\\`onInvalidRoute\\`** - A handler function that can redirect to a different route\n2. **\\`notFoundComponent\\`** - A fallback component to render when no redirect is specified\n\nThese can be configured at each navigator level and support bubbling up to parent navigators.\n\n## Basic Setup\n\n### Adding a 404 Page\n\n\\`\\`\\`tsx\nimport { NavigatorParam, NotFoundComponentProps } from '@idealyst/navigation';\n\n// 404 Component receives path and params\nconst NotFoundPage = ({ path, params }: NotFoundComponentProps) => (\n <Screen>\n <View style={{ alignItems: 'center', padding: 24 }}>\n <Icon name=\"alert-circle\" size={64} color=\"red\" />\n <Text size=\"xl\">Page Not Found</Text>\n <Text color=\"secondary\">The path \"{path}\" doesn't exist.</Text>\n {params && Object.keys(params).length > 0 && (\n <Text size=\"sm\">Params: {JSON.stringify(params)}</Text>\n )}\n </View>\n </Screen>\n);\n\nconst routes: NavigatorParam = {\n path: \"/\",\n type: 'navigator',\n layout: 'stack',\n notFoundComponent: NotFoundPage,\n routes: [\n { path: \"\", type: 'screen', component: HomeScreen },\n { path: \"about\", type: 'screen', component: AboutScreen },\n ]\n};\n\\`\\`\\`\n\n## NotFoundComponentProps\n\nThe 404 component receives information about the attempted route:\n\n\\`\\`\\`tsx\ntype NotFoundComponentProps = {\n /** The full path that was attempted */\n path: string;\n /** Any route parameters that were parsed from the path */\n params?: Record<string, string>;\n};\n\\`\\`\\`\n\nExample usage:\n\\`\\`\\`tsx\nconst NotFoundPage = ({ path, params }: NotFoundComponentProps) => {\n const { navigate } = useNavigator();\n\n return (\n <Screen>\n <View style={{ padding: 16, gap: 24 }}>\n <Text size=\"xl\">404 - Page Not Found</Text>\n <Text>Attempted: {path}</Text>\n {params?.id && <Text>User ID: {params.id}</Text>}\n <Button onPress={() => navigate({ path: '/', replace: true })}>\n Go Home\n </Button>\n </View>\n </Screen>\n );\n};\n\\`\\`\\`\n\n## Redirect Handler\n\nUse \\`onInvalidRoute\\` to redirect certain invalid paths:\n\n\\`\\`\\`tsx\nconst routes: NavigatorParam = {\n path: \"/\",\n type: 'navigator',\n layout: 'stack',\n notFoundComponent: NotFoundPage,\n onInvalidRoute: (invalidPath) => {\n // Redirect old URLs to new locations\n if (invalidPath.startsWith('/old-blog')) {\n return { path: '/blog', replace: true };\n }\n\n // Redirect legacy paths\n if (invalidPath === '/legacy-dashboard') {\n return { path: '/dashboard', replace: true };\n }\n\n // Return undefined to show notFoundComponent\n return undefined;\n },\n routes: [...]\n};\n\\`\\`\\`\n\n### Handler Return Values\n\nThe \\`onInvalidRoute\\` handler can return:\n\n- **\\`NavigateParams\\`** - Redirect to a different route\n- **\\`undefined\\`** - Show the \\`notFoundComponent\\` (or bubble up)\n\n\\`\\`\\`tsx\ntype NavigateParams = {\n path: string;\n vars?: Record<string, string>;\n replace?: boolean; // Recommended: true for redirects\n};\n\nonInvalidRoute: (path: string) => NavigateParams | undefined\n\\`\\`\\`\n\n## Scoped Handlers (Nested Navigators)\n\nEach navigator can have its own 404 handling:\n\n\\`\\`\\`tsx\n// Settings-specific 404 page\nconst SettingsNotFound = ({ path }: NotFoundComponentProps) => (\n <Screen>\n <View style={{ alignItems: 'center' }}>\n <Icon name=\"cog-off\" size={48} color=\"orange\" />\n <Text>Settings page not found: {path}</Text>\n </View>\n </Screen>\n);\n\n// Nested settings navigator with its own handler\nconst SettingsNavigator: NavigatorParam = {\n path: \"settings\",\n type: 'navigator',\n layout: 'stack',\n notFoundComponent: SettingsNotFound,\n onInvalidRoute: (path) => {\n // Redirect deprecated settings paths\n if (path.includes('legacy-setting')) {\n return { path: '/settings/general', replace: true };\n }\n return undefined; // Show SettingsNotFound\n },\n routes: [\n { path: \"\", type: 'screen', component: SettingsHome },\n { path: \"general\", type: 'screen', component: GeneralSettings },\n { path: \"account\", type: 'screen', component: AccountSettings },\n ]\n};\n\n// Root navigator with global 404\nconst AppRouter: NavigatorParam = {\n path: \"/\",\n type: 'navigator',\n layout: 'stack',\n notFoundComponent: GlobalNotFound, // Fallback for non-settings routes\n routes: [\n { path: \"\", type: 'screen', component: HomeScreen },\n SettingsNavigator, // Has its own 404 handling\n { path: \"about\", type: 'screen', component: AboutScreen },\n ]\n};\n\\`\\`\\`\n\n## Handler Bubbling\n\nInvalid routes bubble up through the navigator hierarchy:\n\n\\`\\`\\`\nInvalid route detected: /settings/invalid-page\n ↓\nCheck /settings navigator's onInvalidRoute\n ↓\n┌─────────────────────────────────────────┐\n│ Returns NavigateParams? │\n│ YES → Redirect to that route │\n│ NO (undefined) → Check notFoundComponent │\n└─────────────────────────────────────────┘\n ↓\nHas notFoundComponent?\n YES → Render it with { path, params }\n NO → Bubble up to parent navigator\n ↓\nNo parent handles it?\n → console.warn(\"No handler for invalid route\")\n\\`\\`\\`\n\n## Platform Behavior\n\n### Web\n\n- Invalid routes trigger the catch-all route at each navigator level\n- The \\`onInvalidRoute\\` handler is called when the 404 route is rendered\n- If handler returns \\`NavigateParams\\`, navigation uses \\`replace: true\\` by default\n- URL stays at the invalid path when showing \\`notFoundComponent\\`\n\n### Mobile (React Native)\n\n- Invalid routes trigger navigation to a hidden 404 screen\n- The handler is called during the \\`navigate()\\` function\n- If handler returns \\`NavigateParams\\`, redirects to that route\n- If no handler/component, logs a warning\n\n## Complete Example\n\n\\`\\`\\`tsx\nimport { NavigatorParam, NotFoundComponentProps } from '@idealyst/navigation';\nimport { Screen, View, Text, Button, Icon, Card } from '@idealyst/components';\n\n// Global 404 - detailed error page\nconst GlobalNotFound = ({ path, params }: NotFoundComponentProps) => {\n const { navigate } = useNavigator();\n\n return (\n <Screen>\n <View style={{ padding: 24, gap: 24, alignItems: 'center', flex: 1, justifyContent: 'center' }}>\n <Icon name=\"alert-circle-outline\" size={64} color=\"red\" />\n <Text size=\"xl\" weight=\"bold\">Page Not Found</Text>\n <Text color=\"secondary\">The page you're looking for doesn't exist.</Text>\n\n <Card style={{ marginTop: 16, padding: 16 }}>\n <Text size=\"sm\" weight=\"semibold\">Attempted path:</Text>\n <Text size=\"sm\" color=\"secondary\">{path}</Text>\n {params && Object.keys(params).length > 0 && (\n <>\n <Text size=\"sm\" weight=\"semibold\" style={{ marginTop: 8 }}>Params:</Text>\n <Text size=\"sm\" color=\"secondary\">{JSON.stringify(params)}</Text>\n </>\n )}\n </Card>\n\n <Button style={{ marginTop: 24 }} onPress={() => navigate({ path: '/', replace: true })}>\n Go Home\n </Button>\n </View>\n </Screen>\n );\n};\n\n// Admin section 404 - simpler style\nconst AdminNotFound = ({ path }: NotFoundComponentProps) => {\n const { navigate } = useNavigator();\n\n return (\n <Screen>\n <View padding={16} style={{ alignItems: 'center' }}>\n <Icon name=\"shield-off\" size={48} color=\"orange\" />\n <Text size=\"lg\">Admin page not found</Text>\n <Button\n type=\"outlined\"\n size=\"sm\"\n onPress={() => navigate({ path: '/admin', replace: true })}\n >\n Back to Admin\n </Button>\n </View>\n </Screen>\n );\n};\n\n// Admin navigator with redirect logic\nconst AdminNavigator: NavigatorParam = {\n path: \"admin\",\n type: 'navigator',\n layout: 'stack',\n notFoundComponent: AdminNotFound,\n onInvalidRoute: (path) => {\n // Redirect old admin paths\n if (path.includes('old-users')) {\n return { path: '/admin/users', replace: true };\n }\n if (path.includes('deprecated')) {\n return { path: '/admin', replace: true };\n }\n return undefined; // Show AdminNotFound\n },\n routes: [\n { path: \"\", type: 'screen', component: AdminDashboard },\n { path: \"users\", type: 'screen', component: AdminUsers },\n { path: \"settings\", type: 'screen', component: AdminSettings },\n ]\n};\n\n// Root app router\nconst AppRouter: NavigatorParam = {\n path: \"/\",\n type: 'navigator',\n layout: 'drawer',\n notFoundComponent: GlobalNotFound,\n onInvalidRoute: (path) => {\n // Global redirects\n if (path === '/home') {\n return { path: '/', replace: true };\n }\n return undefined;\n },\n routes: [\n { path: \"\", type: 'screen', component: HomeScreen },\n AdminNavigator,\n { path: \"about\", type: 'screen', component: AboutScreen },\n { path: \"contact\", type: 'screen', component: ContactScreen },\n ]\n};\n\nexport default AppRouter;\n\\`\\`\\`\n\n## Best Practices\n\n1. **Always provide a root notFoundComponent** - Ensures all invalid routes are handled\n2. **Use scoped handlers for sections** - Different 404 styles for different app areas\n3. **Redirect deprecated URLs** - Use \\`onInvalidRoute\\` to maintain URL compatibility\n4. **Include helpful information** - Show the attempted path and suggest alternatives\n5. **Provide navigation options** - Add buttons to go home or back\n6. **Use \\`replace: true\\` for redirects** - Prevents invalid routes in browser history\n7. **Log unhandled routes** - Monitor for missing pages in production\n\n## TypeScript Types\n\n\\`\\`\\`tsx\nimport {\n NavigatorParam,\n NotFoundComponentProps,\n NavigateParams\n} from '@idealyst/navigation';\n\n// NotFoundComponentProps\ntype NotFoundComponentProps = {\n path: string;\n params?: Record<string, string>;\n};\n\n// Handler signature\ntype InvalidRouteHandler = (invalidPath: string) => NavigateParams | undefined;\n\n// NavigateParams (used by handler return and navigate function)\ntype NavigateParams = {\n path: string;\n vars?: Record<string, string>;\n replace?: boolean;\n};\n\\`\\`\\`\n`,\n\n \"idealyst://navigation/web-mobile-parity\": `# Web/Mobile Navigation Parity\n\nUnderstanding how to achieve the same navigation experience on web that you get for free on mobile.\n\n## The Core Problem\n\nOn **React Native**, you get native navigation UI for free:\n- Stack navigator gives you headers with back buttons\n- Tab navigator gives you a bottom tab bar with icons\n- Drawer navigator gives you a slide-out menu\n\nOn **Web**, you get nothing but URL routing. No headers, no tab bars, no drawers. You must build these yourself using **layout components**.\n\n## The Solution: Layout Components\n\nThe \\`layoutComponent\\` prop on navigators is how you achieve parity. It wraps your route content and provides the navigation UI.\n\n\\`\\`\\`tsx\n{\n path: \"/\",\n type: 'navigator',\n layout: 'stack',\n layoutComponent: MyStackLayout, // <-- This is the key!\n routes: [...]\n}\n\\`\\`\\`\n\n## What Layout Components Receive\n\nEvery layout component receives these props:\n\n\\`\\`\\`tsx\ntype LayoutProps = {\n children: React.ReactNode; // The route content (renders via <Outlet />)\n options?: NavigatorOptions; // headerTitle, headerLeft, headerRight, etc.\n routes: RouteWithFullPath[]; // All child routes with their full paths\n currentPath: string; // Currently active route path\n};\n\\`\\`\\`\n\n**This gives you everything you need to build any navigation UI:**\n- \\`options\\` - What to show in headers\n- \\`routes\\` - What tabs/menu items to render\n- \\`currentPath\\` - Which one is active\n- \\`children\\` - Where to render the screen content\n\n## Stack Navigator Parity\n\n### What Native Gives You\n- Header bar with title\n- Back button (automatic)\n- Right-side actions\n- Smooth transitions\n\n### Web Implementation\n\n\\`\\`\\`tsx\nimport { Outlet } from 'react-router-dom';\nimport { View, Text, IconButton, Pressable } from '@idealyst/components';\nimport { useNavigator } from '@idealyst/navigation';\nimport type { StackLayoutProps } from '@idealyst/navigation';\n\nexport function StackLayout({ options, currentPath }: StackLayoutProps) {\n const { canGoBack, goBack } = useNavigator();\n\n return (\n <View style={{ flex: 1 }}>\n {/* Header - mimics native stack header */}\n {options?.headerShown !== false && (\n <View style={{\n height: 56,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 16,\n borderBottomWidth: 1,\n borderBottomColor: '#e0e0e0',\n backgroundColor: '#fff',\n }}>\n {/* Back button - like native */}\n {options?.headerBackVisible !== false && canGoBack() && (\n <IconButton\n icon=\"arrow-left\"\n onPress={goBack}\n style={{ marginRight: 8 }}\n />\n )}\n\n {/* Left slot */}\n {options?.headerLeft && (\n <View style={{ marginRight: 16 }}>\n {typeof options.headerLeft === 'function'\n ? options.headerLeft({})\n : options.headerLeft}\n </View>\n )}\n\n {/* Title - centered or left-aligned */}\n <View style={{ flex: 1 }}>\n {typeof options?.headerTitle === 'string' ? (\n <Text variant=\"title\">{options.headerTitle}</Text>\n ) : (\n options?.headerTitle\n )}\n </View>\n\n {/* Right slot */}\n {options?.headerRight && (\n <View>\n {typeof options.headerRight === 'function'\n ? options.headerRight({})\n : options.headerRight}\n </View>\n )}\n </View>\n )}\n\n {/* Content area */}\n <View style={{ flex: 1 }}>\n <Outlet />\n </View>\n </View>\n );\n}\n\\`\\`\\`\n\n## Tab Navigator Parity\n\n### What Native Gives You\n- Bottom tab bar\n- Icons for each tab\n- Labels\n- Badge counts\n- Active state highlighting\n\n### Web Implementation\n\n\\`\\`\\`tsx\nimport { Outlet } from 'react-router-dom';\nimport { View, Text, Pressable, Icon, Badge } from '@idealyst/components';\nimport { useNavigator } from '@idealyst/navigation';\nimport type { TabLayoutProps } from '@idealyst/navigation';\n\nexport function TabLayout({ routes, currentPath }: TabLayoutProps) {\n const { navigate } = useNavigator();\n\n return (\n <View style={{ flex: 1 }}>\n {/* Content area */}\n <View style={{ flex: 1 }}>\n <Outlet />\n </View>\n\n {/* Bottom tab bar - mimics native */}\n <View style={{\n height: 56,\n flexDirection: 'row',\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n backgroundColor: '#fff',\n }}>\n {routes.map((route) => {\n const isActive = currentPath === route.fullPath;\n const options = route.options;\n\n return (\n <Pressable\n key={route.fullPath}\n onPress={() => navigate({ path: route.fullPath })}\n style={{\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingVertical: 8,\n }}\n >\n {/* Icon with optional badge */}\n <View style={{ position: 'relative' }}>\n {options?.tabBarIcon?.({\n focused: isActive,\n color: isActive ? '#007AFF' : '#8E8E93',\n size: 24,\n })}\n {options?.tabBarBadge && (\n <Badge\n count={options.tabBarBadge}\n style={{ position: 'absolute', top: -4, right: -8 }}\n />\n )}\n </View>\n\n {/* Label */}\n {options?.tabBarLabel && (\n <Text\n size=\"xs\"\n style={{\n marginTop: 4,\n color: isActive ? '#007AFF' : '#8E8E93',\n }}\n >\n {options.tabBarLabel}\n </Text>\n )}\n </Pressable>\n );\n })}\n </View>\n </View>\n );\n}\n\\`\\`\\`\n\n## Drawer Navigator Parity\n\n### What Native Gives You\n- Slide-out drawer from edge\n- Overlay when open\n- Gesture to open/close\n- Menu items\n\n### Web Implementation\n\nOn web, drawers are typically persistent sidebars. Here's how to build both:\n\n\\`\\`\\`tsx\nimport { Outlet } from 'react-router-dom';\nimport { View, Text, Pressable, Icon } from '@idealyst/components';\nimport { useNavigator } from '@idealyst/navigation';\nimport type { StackLayoutProps } from '@idealyst/navigation';\n\nexport function DrawerLayout({ routes, currentPath, options }: StackLayoutProps) {\n const { navigate } = useNavigator();\n const [isCollapsed, setIsCollapsed] = useState(false);\n\n return (\n <View style={{ flex: 1, flexDirection: 'row' }}>\n {/* Sidebar - always visible on web */}\n <View style={{\n width: isCollapsed ? 64 : 240,\n borderRightWidth: 1,\n borderRightColor: '#e0e0e0',\n backgroundColor: '#f8f8f8',\n transition: 'width 0.2s',\n }}>\n {/* Logo/Header */}\n <View style={{ height: 56, justifyContent: 'center', paddingHorizontal: 16 }}>\n {!isCollapsed && <Text variant=\"title\">My App</Text>}\n </View>\n\n {/* Menu Items */}\n {routes.map((route) => {\n const isActive = currentPath.startsWith(route.fullPath);\n return (\n <Pressable\n key={route.fullPath}\n onPress={() => navigate({ path: route.fullPath })}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n padding: 12,\n backgroundColor: isActive ? 'rgba(0,0,0,0.08)' : 'transparent',\n }}\n >\n <Icon\n name={route.options?.icon || 'circle'}\n size={24}\n color={isActive ? '#007AFF' : '#666'}\n />\n {!isCollapsed && (\n <Text style={{ marginLeft: 12, color: isActive ? '#007AFF' : '#333' }}>\n {route.options?.title || route.path}\n </Text>\n )}\n </Pressable>\n );\n })}\n\n {/* Collapse toggle */}\n <Pressable\n onPress={() => setIsCollapsed(!isCollapsed)}\n style={{ padding: 12, marginTop: 'auto' }}\n >\n <Icon name={isCollapsed ? 'chevron-right' : 'chevron-left'} size={24} />\n </Pressable>\n </View>\n\n {/* Content */}\n <View style={{ flex: 1 }}>\n <Outlet />\n </View>\n </View>\n );\n}\n\\`\\`\\`\n\n## Using GeneralLayout Helper\n\nThe \\`GeneralLayout\\` component simplifies building layouts:\n\n\\`\\`\\`tsx\nimport { GeneralLayout } from '@idealyst/navigation';\n\nexport function AppLayout({ options, routes, currentPath, children }: StackLayoutProps) {\n return (\n <GeneralLayout\n header={{\n enabled: true,\n height: 56,\n content: (\n <View style={{ flexDirection: 'row', alignItems: 'center', flex: 1 }}>\n <Text variant=\"title\">{options?.headerTitle || 'App'}</Text>\n <View style={{ marginLeft: 'auto' }}>{options?.headerRight}</View>\n </View>\n ),\n }}\n sidebar={{\n enabled: true,\n collapsible: true,\n expandedWidth: 240,\n collapsedWidth: 64,\n content: <SidebarMenu routes={routes} currentPath={currentPath} />,\n }}\n >\n {children}\n </GeneralLayout>\n );\n}\n\\`\\`\\`\n\n## Putting It All Together\n\nHere's a complete router setup with web layouts:\n\n\\`\\`\\`tsx\nimport { NavigatorParam } from '@idealyst/navigation';\nimport { StackLayout } from './layouts/StackLayout';\nimport { TabLayout } from './layouts/TabLayout';\n\nconst appRouter: NavigatorParam = {\n path: \"/\",\n type: 'navigator',\n layout: 'stack',\n layoutComponent: StackLayout, // Web header\n options: {\n headerTitle: \"My App\",\n headerRight: <UserMenu />,\n },\n routes: [\n {\n path: \"main\",\n type: 'navigator',\n layout: 'tab',\n layoutComponent: TabLayout, // Web tab bar\n routes: [\n {\n path: \"home\",\n type: 'screen',\n component: HomeScreen,\n options: {\n tabBarLabel: \"Home\",\n tabBarIcon: ({ color }) => <Icon name=\"home\" color={color} />,\n },\n },\n {\n path: \"search\",\n type: 'screen',\n component: SearchScreen,\n options: {\n tabBarLabel: \"Search\",\n tabBarIcon: ({ color }) => <Icon name=\"magnify\" color={color} />,\n },\n },\n ],\n },\n {\n path: \"settings\",\n type: 'screen',\n component: SettingsScreen,\n },\n ],\n};\n\\`\\`\\`\n\n## Key Insights\n\n1. **layoutComponent is web-only** - Native ignores it and uses native navigators\n2. **Same route config, different UI** - Your routes stay the same, layouts differ\n3. **Options are your data source** - headerTitle, tabBarIcon, etc. drive your layout\n4. **routes array is navigation menu** - Use it to build sidebars, tab bars, menus\n5. **currentPath enables active states** - Compare to highlight current item\n6. **Outlet renders children** - From react-router-dom, this is where screen content goes\n\n## Common Patterns\n\n### Responsive Layout\n\\`\\`\\`tsx\nfunction ResponsiveLayout(props: StackLayoutProps) {\n const { width } = useWindowDimensions();\n const isMobile = width < 768;\n\n // Tabs on mobile, drawer on desktop\n return isMobile\n ? <TabLayout {...props} />\n : <DrawerLayout {...props} />;\n}\n\\`\\`\\`\n\n### Nested Headers\n\\`\\`\\`tsx\n// Parent navigator has app header\n// Child navigator has section header\n{\n path: \"/\",\n layoutComponent: AppHeaderLayout,\n routes: [{\n path: \"admin\",\n layoutComponent: AdminSectionHeader, // Adds another header\n routes: [...]\n }]\n}\n\\`\\`\\`\n\n### Hiding Navigation\n\\`\\`\\`tsx\nfunction ConditionalLayout(props: StackLayoutProps) {\n // Hide navigation on certain routes\n if (props.currentPath.includes('/fullscreen')) {\n return <Outlet />; // No chrome\n }\n return <FullLayout {...props} />;\n}\n\\`\\`\\`\n\n## Summary\n\n| Native Gets | Web Needs |\n|-------------|-----------|\n| Stack header | \\`layoutComponent\\` with header UI |\n| Tab bar | \\`layoutComponent\\` with tab buttons |\n| Drawer | \\`layoutComponent\\` with sidebar |\n| Back button | \\`canGoBack()\\` + \\`goBack()\\` |\n| Active states | Compare \\`currentPath\\` to \\`route.fullPath\\` |\n| Screen options | Access via \\`options\\` and \\`route.options\\` |\n\nThe key to web/mobile parity is understanding that **layout components give web everything native navigators provide automatically**.\n`,\n};\n","export const translateGuides: Record<string, string> = {\n \"idealyst://translate/overview\": `# @idealyst/translate Overview\n\nCross-platform internationalization for the Idealyst Framework. Wraps \\`react-i18next\\` with a unified API and includes a Babel plugin for static translation key analysis.\n\n## Core Features\n\n- **Unified API** - Single API for React and React Native\n- **Babel Plugin** - Static extraction of translation keys at build time\n- **Missing Translation Detection** - Automatically detect keys missing translations\n- **Unused Translation Detection** - Find translations not used in code\n- **JSON Report** - Generate detailed reports for CI/CD integration\n- **Namespace Support** - Organize translations with nested namespaces\n- **Pluralization** - Full i18next pluralization support\n- **Interpolation** - Variable interpolation in translations\n- **Rich Text** - Component interpolation with the Trans component\n\n## Installation\n\n\\`\\`\\`bash\nyarn add @idealyst/translate react-i18next i18next\n\\`\\`\\`\n\n## Quick Start\n\n### 1. Create Translation Files\n\n\\`\\`\\`\nlocales/\n├── en/\n│ └── common.json\n└── es/\n └── common.json\n\\`\\`\\`\n\n**locales/en/common.json**\n\\`\\`\\`json\n{\n \"welcome\": {\n \"title\": \"Welcome to Our App\",\n \"greeting\": \"Hello, {{name}}!\"\n },\n \"buttons\": {\n \"submit\": \"Submit\",\n \"cancel\": \"Cancel\"\n }\n}\n\\`\\`\\`\n\n### 2. Set Up the Provider\n\n\\`\\`\\`tsx\nimport { TranslateProvider } from '@idealyst/translate';\nimport en from './locales/en/common.json';\nimport es from './locales/es/common.json';\n\nconst config = {\n defaultLanguage: 'en',\n languages: ['en', 'es'],\n resources: {\n en: { common: en },\n es: { common: es },\n },\n defaultNamespace: 'common',\n};\n\nexport function App() {\n return (\n <TranslateProvider config={config}>\n <MyApp />\n </TranslateProvider>\n );\n}\n\\`\\`\\`\n\n### 3. Use Translations\n\n\\`\\`\\`tsx\nimport { useTranslation } from '@idealyst/translate';\n\nfunction MyComponent() {\n const { t } = useTranslation('common');\n\n return (\n <div>\n <h1>{t('welcome.title')}</h1>\n <p>{t('welcome.greeting', { name: 'John' })}</p>\n <button>{t('buttons.submit')}</button>\n </div>\n );\n}\n\\`\\`\\`\n\n## Key Concepts\n\n### Key Formats\nThe package supports two key formats:\n\n\\`\\`\\`tsx\n// Namespace:key format (i18next standard)\nt('auth:login.title')\n\n// Namespace.key format (first segment is namespace)\nt('auth.login.title')\n\\`\\`\\`\n\n### Namespace Organization\nOrganize translations by domain:\n- \\`common.json\\` - Shared UI strings\n- \\`auth.json\\` - Authentication strings\n- \\`errors.json\\` - Error messages\n- \\`forms.json\\` - Form labels and validation\n`,\n\n \"idealyst://translate/runtime-api\": `# Runtime API Reference\n\nComplete reference for the @idealyst/translate runtime API.\n\n## TranslateProvider\n\nWrap your app with the provider to enable translations:\n\n\\`\\`\\`tsx\nimport { TranslateProvider } from '@idealyst/translate';\n\n<TranslateProvider\n config={{\n defaultLanguage: 'en',\n languages: ['en', 'es', 'fr'],\n resources: {\n en: { common: enCommon, auth: enAuth },\n es: { common: esCommon, auth: esAuth },\n },\n defaultNamespace: 'common',\n fallbackLanguage: 'en',\n debug: false,\n }}\n onInitialized={(i18n) => console.log('i18n ready')}\n onLanguageChanged={(lang) => console.log('Language:', lang)}\n>\n <App />\n</TranslateProvider>\n\\`\\`\\`\n\n### TranslateConfig Options\n\n| Option | Type | Required | Description |\n|--------|------|----------|-------------|\n| \\`defaultLanguage\\` | string | Yes | Default language code |\n| \\`languages\\` | string[] | Yes | Supported language codes |\n| \\`resources\\` | object | No | Pre-loaded translation resources |\n| \\`defaultNamespace\\` | string | No | Default namespace (default: 'translation') |\n| \\`fallbackLanguage\\` | string | No | Fallback when key missing |\n| \\`debug\\` | boolean | No | Enable debug logging |\n\n## useTranslation Hook\n\nThe main hook for accessing translations:\n\n\\`\\`\\`tsx\nimport { useTranslation } from '@idealyst/translate';\n\nfunction Component() {\n const { t, language, languages, ready, i18n } = useTranslation('common');\n\n // Simple translation\n const title = t('welcome.title');\n\n // With interpolation\n const greeting = t('welcome.greeting', { name: 'World' });\n\n // With default value\n const fallback = t('missing.key', { defaultValue: 'Fallback text' });\n\n // With pluralization\n const items = t('items', { count: 5 });\n\n // With context\n const gendered = t('liked', { context: 'male' });\n\n return <div>{title}</div>;\n}\n\\`\\`\\`\n\n### Return Values\n\n| Property | Type | Description |\n|----------|------|-------------|\n| \\`t\\` | function | Translation function |\n| \\`language\\` | string | Current language code |\n| \\`languages\\` | string[] | All available languages |\n| \\`ready\\` | boolean | Whether translations are loaded |\n| \\`i18n\\` | i18n | i18next instance for advanced usage |\n\n### Translation Options\n\n\\`\\`\\`tsx\nt('key', {\n // Default value if key not found\n defaultValue: 'Fallback',\n\n // Interpolation values\n name: 'John',\n count: 5,\n\n // Pluralization count\n count: 3,\n\n // Context for contextual translations\n context: 'male',\n});\n\\`\\`\\`\n\n## useLanguage Hook\n\nFor language management:\n\n\\`\\`\\`tsx\nimport { useLanguage } from '@idealyst/translate';\n\nfunction LanguageControls() {\n const {\n language, // Current: 'en'\n languages, // Available: ['en', 'es', 'fr']\n setLanguage, // Change language\n isSupported, // Check availability\n getDisplayName, // Get 'English', 'Español'\n } = useLanguage();\n\n return (\n <select value={language} onChange={(e) => setLanguage(e.target.value)}>\n {languages.map((lang) => (\n <option key={lang} value={lang}>\n {getDisplayName(lang)}\n </option>\n ))}\n </select>\n );\n}\n\\`\\`\\`\n\n## Trans Component\n\nFor rich text with embedded components:\n\n\\`\\`\\`tsx\nimport { Trans } from '@idealyst/translate';\n\nfunction RichText() {\n return (\n <Trans\n i18nKey=\"common.richText\"\n components={{\n terms: <a href=\"/terms\" />,\n privacy: <a href=\"/privacy\" />,\n bold: <strong />,\n }}\n values={{ name: 'User' }}\n />\n );\n}\n\n// Translation:\n// \"richText\": \"Read our <terms>Terms</terms> and <privacy>Privacy Policy</privacy>\"\n//\n// Renders:\n// Read our <a href=\"/terms\">Terms</a> and <a href=\"/privacy\">Privacy Policy</a>\n\\`\\`\\`\n\n### Trans Props\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| \\`i18nKey\\` | string | Yes | Translation key |\n| \\`ns\\` | string | No | Namespace |\n| \\`components\\` | object | No | Component interpolations |\n| \\`values\\` | object | No | Value interpolations |\n| \\`count\\` | number | No | Pluralization count |\n`,\n\n \"idealyst://translate/babel-plugin\": `# Babel Plugin Reference\n\nThe Babel plugin extracts translation keys at build time and generates reports of missing/unused translations.\n\n## Installation\n\nThe plugin is included with @idealyst/translate. Just configure it in your Babel config.\n\n## Configuration\n\n### babel.config.js\n\n\\`\\`\\`javascript\nmodule.exports = {\n presets: ['@babel/preset-react', '@babel/preset-typescript'],\n plugins: [\n ['@idealyst/translate/plugin', {\n // Required: paths to translation JSON files\n translationFiles: ['./locales/**/*.json'],\n\n // Optional: output path for the report\n reportPath: '.idealyst/translations-report.json',\n\n // Optional: default namespace\n defaultNamespace: 'common',\n\n // Optional: emit console warnings\n emitWarnings: true,\n\n // Optional: fail build on missing translations\n failOnMissing: false,\n\n // Optional: verbose logging\n verbose: false,\n }],\n ],\n};\n\\`\\`\\`\n\n### Vite Configuration\n\n\\`\\`\\`typescript\n// vite.config.ts\nimport { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react';\n\nexport default defineConfig({\n plugins: [\n react({\n babel: {\n plugins: [\n ['@idealyst/translate/plugin', {\n translationFiles: ['./locales/**/*.json'],\n reportPath: '.idealyst/translations-report.json',\n defaultNamespace: 'common',\n }],\n ],\n },\n }),\n ],\n});\n\\`\\`\\`\n\n### React Native Configuration\n\n\\`\\`\\`javascript\n// babel.config.js\nmodule.exports = {\n presets: ['module:@react-native/babel-preset'],\n plugins: [\n ['@idealyst/translate/plugin', {\n translationFiles: ['./locales/**/*.json'],\n reportPath: '.idealyst/translations-report.json',\n defaultNamespace: 'common',\n emitWarnings: true,\n }],\n ],\n};\n\\`\\`\\`\n\n## Plugin Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| \\`translationFiles\\` | string[] | Required | Glob patterns for translation files |\n| \\`reportPath\\` | string | '.idealyst/translations-report.json' | Output path for report |\n| \\`languages\\` | string[] | Auto-detected | Languages to check |\n| \\`defaultNamespace\\` | string | 'translation' | Default namespace |\n| \\`failOnMissing\\` | boolean | false | Fail build if missing |\n| \\`emitWarnings\\` | boolean | true | Console warnings |\n| \\`verbose\\` | boolean | false | Verbose logging |\n\n## What Gets Extracted\n\nThe plugin statically analyzes your code for:\n\n\\`\\`\\`tsx\n// t() function calls\nt('common.key')\nt('namespace:key')\nt('key', { defaultValue: 'Default' })\n\n// i18n.t() method calls\ni18n.t('common.key')\n\n// Trans component\n<Trans i18nKey=\"common.richText\" />\n<Trans i18nKey={\"common.richText\"} />\n\n// Dynamic keys (tracked but marked as dynamic)\nconst key = \\`common.\\${type}\\`;\nt(key); // Marked as isDynamic: true\n\\`\\`\\`\n\n## Report Structure\n\nThe plugin generates a JSON report:\n\n\\`\\`\\`json\n{\n \"timestamp\": \"2026-01-08T12:00:00.000Z\",\n \"totalKeys\": 45,\n \"dynamicKeys\": [\n {\n \"key\": \"<dynamic>\",\n \"file\": \"src/DynamicComponent.tsx\",\n \"line\": 15,\n \"isDynamic\": true\n }\n ],\n \"extractedKeys\": [\n {\n \"key\": \"common.buttons.submit\",\n \"namespace\": \"common\",\n \"localKey\": \"buttons.submit\",\n \"file\": \"src/Form.tsx\",\n \"line\": 42,\n \"column\": 12,\n \"defaultValue\": \"Submit\",\n \"isDynamic\": false\n }\n ],\n \"languages\": [\"en\", \"es\", \"fr\"],\n \"missing\": {\n \"en\": [],\n \"es\": [\n {\n \"key\": \"common.buttons.submit\",\n \"namespace\": \"common\",\n \"usedIn\": [\n { \"file\": \"src/Form.tsx\", \"line\": 42, \"column\": 12 }\n ],\n \"defaultValue\": \"Submit\"\n }\n ]\n },\n \"unused\": {\n \"en\": [\"common.legacy.oldFeature\"]\n },\n \"summary\": {\n \"totalMissing\": 1,\n \"totalUnused\": 1,\n \"coveragePercent\": {\n \"en\": 100,\n \"es\": 98,\n \"fr\": 100\n }\n }\n}\n\\`\\`\\`\n\n## CI/CD Integration\n\n### GitHub Actions\n\n\\`\\`\\`yaml\nname: Translation Check\n\non: [push, pull_request]\n\njobs:\n check-translations:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v3\n - uses: actions/setup-node@v3\n with:\n node-version: '20'\n - run: yarn install\n - run: yarn build\n - name: Check missing translations\n run: |\n MISSING=$(jq '.summary.totalMissing' .idealyst/translations-report.json)\n if [ \"$MISSING\" -gt 0 ]; then\n echo \"Missing translations: $MISSING\"\n jq '.missing' .idealyst/translations-report.json\n exit 1\n fi\n\\`\\`\\`\n\n### Shell Script\n\n\\`\\`\\`bash\n#!/bin/bash\nyarn build\n\nMISSING=$(jq '.summary.totalMissing' .idealyst/translations-report.json)\n\nif [ \"$MISSING\" -gt 0 ]; then\n echo \"ERROR: $MISSING missing translation(s)\"\n jq -r '.missing | to_entries[] | select(.value | length > 0) | \"\\\\(.key): \\\\(.value | length) missing\"' \\\\\n .idealyst/translations-report.json\n exit 1\nfi\n\necho \"All translations present!\"\n\\`\\`\\`\n`,\n\n \"idealyst://translate/translation-files\": `# Translation File Format\n\nGuide to organizing and formatting translation files for @idealyst/translate.\n\n## Directory Structure\n\nOrganize translations by language and namespace:\n\n\\`\\`\\`\nlocales/\n├── en/\n│ ├── common.json # Common UI strings\n│ ├── auth.json # Authentication strings\n│ ├── errors.json # Error messages\n│ └── forms.json # Form labels\n├── es/\n│ ├── common.json\n│ ├── auth.json\n│ ├── errors.json\n│ └── forms.json\n└── fr/\n ├── common.json\n ├── auth.json\n ├── errors.json\n └── forms.json\n\\`\\`\\`\n\n## JSON Format\n\n### Basic Structure\n\n\\`\\`\\`json\n{\n \"simple\": \"Simple text\",\n\n \"nested\": {\n \"keys\": {\n \"work\": \"Like this\"\n }\n }\n}\n\\`\\`\\`\n\n### Interpolation\n\nUse \\`{{variable}}\\` for dynamic values:\n\n\\`\\`\\`json\n{\n \"greeting\": \"Hello, {{name}}!\",\n \"welcome\": \"Welcome back, {{user}}. You have {{count}} messages.\"\n}\n\\`\\`\\`\n\nUsage:\n\\`\\`\\`tsx\nt('greeting', { name: 'John' }) // \"Hello, John!\"\nt('welcome', { user: 'Alice', count: 5 }) // \"Welcome back, Alice. You have 5 messages.\"\n\\`\\`\\`\n\n### Pluralization\n\nAdd \\`_plural\\` suffix for plural forms:\n\n\\`\\`\\`json\n{\n \"item\": \"{{count}} item\",\n \"item_plural\": \"{{count}} items\",\n\n \"message\": \"You have {{count}} new message\",\n \"message_plural\": \"You have {{count}} new messages\"\n}\n\\`\\`\\`\n\nUsage:\n\\`\\`\\`tsx\nt('item', { count: 1 }) // \"1 item\"\nt('item', { count: 5 }) // \"5 items\"\n\\`\\`\\`\n\n### Context\n\nAdd \\`_context\\` suffix for contextual variations:\n\n\\`\\`\\`json\n{\n \"friend\": \"A friend\",\n \"friend_male\": \"A boyfriend\",\n \"friend_female\": \"A girlfriend\"\n}\n\\`\\`\\`\n\nUsage:\n\\`\\`\\`tsx\nt('friend') // \"A friend\"\nt('friend', { context: 'male' }) // \"A boyfriend\"\nt('friend', { context: 'female' }) // \"A girlfriend\"\n\\`\\`\\`\n\n### Rich Text (Trans Component)\n\nUse HTML-like tags for component interpolation:\n\n\\`\\`\\`json\n{\n \"terms\": \"By signing up, you agree to our <terms>Terms of Service</terms> and <privacy>Privacy Policy</privacy>.\",\n \"welcome\": \"Welcome, <bold>{{name}}</bold>! Click <link>here</link> to continue.\"\n}\n\\`\\`\\`\n\nUsage:\n\\`\\`\\`tsx\n<Trans\n i18nKey=\"common.terms\"\n components={{\n terms: <a href=\"/terms\" />,\n privacy: <a href=\"/privacy\" />,\n }}\n/>\n\\`\\`\\`\n\n## Namespace Organization\n\n### common.json - Shared UI\n\\`\\`\\`json\n{\n \"buttons\": {\n \"submit\": \"Submit\",\n \"cancel\": \"Cancel\",\n \"save\": \"Save\",\n \"delete\": \"Delete\",\n \"edit\": \"Edit\"\n },\n \"labels\": {\n \"loading\": \"Loading...\",\n \"error\": \"An error occurred\",\n \"success\": \"Success!\"\n }\n}\n\\`\\`\\`\n\n### auth.json - Authentication\n\\`\\`\\`json\n{\n \"login\": {\n \"title\": \"Sign In\",\n \"email\": \"Email\",\n \"password\": \"Password\",\n \"submit\": \"Sign In\",\n \"forgotPassword\": \"Forgot password?\"\n },\n \"register\": {\n \"title\": \"Create Account\",\n \"submit\": \"Sign Up\"\n },\n \"errors\": {\n \"invalidCredentials\": \"Invalid email or password\",\n \"emailTaken\": \"Email is already registered\"\n }\n}\n\\`\\`\\`\n\n### errors.json - Error Messages\n\\`\\`\\`json\n{\n \"network\": {\n \"offline\": \"You are offline. Please check your connection.\",\n \"timeout\": \"Request timed out. Please try again.\"\n },\n \"validation\": {\n \"required\": \"This field is required\",\n \"email\": \"Please enter a valid email\",\n \"minLength\": \"Must be at least {{min}} characters\"\n },\n \"http\": {\n \"400\": \"Bad request\",\n \"401\": \"Unauthorized\",\n \"403\": \"Forbidden\",\n \"404\": \"Not found\",\n \"500\": \"Server error\"\n }\n}\n\\`\\`\\`\n\n## Best Practices\n\n### 1. Use Descriptive Keys\n\\`\\`\\`json\n// Good\n{\n \"userProfile\": {\n \"editButton\": \"Edit Profile\",\n \"saveSuccess\": \"Profile saved successfully\"\n }\n}\n\n// Avoid\n{\n \"btn1\": \"Edit Profile\",\n \"msg1\": \"Profile saved successfully\"\n}\n\\`\\`\\`\n\n### 2. Group Related Translations\n\\`\\`\\`json\n{\n \"checkout\": {\n \"title\": \"Checkout\",\n \"steps\": {\n \"shipping\": \"Shipping\",\n \"payment\": \"Payment\",\n \"review\": \"Review\"\n },\n \"buttons\": {\n \"next\": \"Continue\",\n \"back\": \"Go Back\",\n \"placeOrder\": \"Place Order\"\n }\n }\n}\n\\`\\`\\`\n\n### 3. Keep Keys Consistent Across Languages\nAll language files should have the same key structure:\n\n\\`\\`\\`json\n// en/common.json\n{ \"greeting\": \"Hello\" }\n\n// es/common.json\n{ \"greeting\": \"Hola\" }\n\n// fr/common.json\n{ \"greeting\": \"Bonjour\" }\n\\`\\`\\`\n\n### 4. Add Comments with Default Values\nThe Babel plugin extracts \\`defaultValue\\` for documentation:\n\n\\`\\`\\`tsx\nt('newFeature.title', { defaultValue: 'New Feature' })\n\\`\\`\\`\n\nThis appears in the report and helps translators understand context.\n`,\n\n \"idealyst://translate/examples\": `# Translation Examples\n\nComplete code examples for common @idealyst/translate patterns.\n\n## Basic App Setup\n\n\\`\\`\\`tsx\n// App.tsx\nimport { TranslateProvider } from '@idealyst/translate';\nimport en from './locales/en/common.json';\nimport es from './locales/es/common.json';\n\nconst config = {\n defaultLanguage: 'en',\n languages: ['en', 'es'],\n resources: {\n en: { common: en },\n es: { common: es },\n },\n defaultNamespace: 'common',\n};\n\nexport function App() {\n return (\n <TranslateProvider config={config}>\n <Navigation />\n </TranslateProvider>\n );\n}\n\\`\\`\\`\n\n## Component with Translations\n\n\\`\\`\\`tsx\n// components/WelcomeScreen.tsx\nimport { View, Text, Button } from '@idealyst/components';\nimport { useTranslation } from '@idealyst/translate';\n\nexport function WelcomeScreen() {\n const { t } = useTranslation('common');\n\n return (\n <View>\n <Text variant=\"h1\">{t('welcome.title')}</Text>\n <Text>{t('welcome.subtitle')}</Text>\n <Button onPress={() => {}}>\n {t('buttons.getStarted')}\n </Button>\n </View>\n );\n}\n\\`\\`\\`\n\n## Language Switcher Component\n\n\\`\\`\\`tsx\n// components/LanguageSwitcher.tsx\nimport { Select } from '@idealyst/components';\nimport { useLanguage } from '@idealyst/translate';\n\nexport function LanguageSwitcher() {\n const { language, languages, setLanguage, getDisplayName } = useLanguage();\n\n const options = languages.map((lang) => ({\n value: lang,\n label: getDisplayName(lang),\n }));\n\n return (\n <Select\n value={language}\n options={options}\n onChange={(value) => setLanguage(value)}\n label=\"Language\"\n />\n );\n}\n\\`\\`\\`\n\n## Form with Validation Messages\n\n\\`\\`\\`tsx\n// components/LoginForm.tsx\nimport { View, Input, Button, Text } from '@idealyst/components';\nimport { useTranslation } from '@idealyst/translate';\nimport { useState } from 'react';\n\nexport function LoginForm() {\n const { t } = useTranslation('auth');\n const [error, setError] = useState<string | null>(null);\n\n const handleSubmit = async () => {\n try {\n // ... login logic\n } catch (e) {\n setError(t('errors.invalidCredentials'));\n }\n };\n\n return (\n <View>\n <Text variant=\"h2\">{t('login.title')}</Text>\n\n <Input\n label={t('login.email')}\n placeholder={t('login.emailPlaceholder')}\n keyboardType=\"email-address\"\n />\n\n <Input\n label={t('login.password')}\n placeholder={t('login.passwordPlaceholder')}\n secureTextEntry\n />\n\n {error && <Text intent=\"error\">{error}</Text>}\n\n <Button onPress={handleSubmit}>\n {t('login.submit')}\n </Button>\n </View>\n );\n}\n\\`\\`\\`\n\n## Pluralization Example\n\n\\`\\`\\`tsx\n// components/NotificationBadge.tsx\nimport { Badge } from '@idealyst/components';\nimport { useTranslation } from '@idealyst/translate';\n\ninterface Props {\n count: number;\n}\n\nexport function NotificationBadge({ count }: Props) {\n const { t } = useTranslation('common');\n\n if (count === 0) return null;\n\n return (\n <Badge intent=\"primary\">\n {t('notifications.count', { count })}\n </Badge>\n );\n}\n\n// Translation file:\n// {\n// \"notifications\": {\n// \"count\": \"{{count}} notification\",\n// \"count_plural\": \"{{count}} notifications\"\n// }\n// }\n\\`\\`\\`\n\n## Rich Text with Trans Component\n\n\\`\\`\\`tsx\n// components/TermsAgreement.tsx\nimport { View, Text, Checkbox } from '@idealyst/components';\nimport { Trans, useTranslation } from '@idealyst/translate';\nimport { Link } from '@idealyst/navigation';\nimport { useState } from 'react';\n\nexport function TermsAgreement() {\n const { t } = useTranslation('auth');\n const [agreed, setAgreed] = useState(false);\n\n return (\n <View>\n <Checkbox\n checked={agreed}\n onChange={setAgreed}\n label={\n <Trans\n i18nKey=\"auth.termsAgreement\"\n components={{\n terms: <Link to=\"/terms\" />,\n privacy: <Link to=\"/privacy\" />,\n }}\n />\n }\n />\n </View>\n );\n}\n\n// Translation file:\n// {\n// \"termsAgreement\": \"I agree to the <terms>Terms of Service</terms> and <privacy>Privacy Policy</privacy>\"\n// }\n\\`\\`\\`\n\n## Persisting Language Preference\n\n\\`\\`\\`tsx\n// hooks/usePersistedLanguage.ts\nimport { useLanguage } from '@idealyst/translate';\nimport { useEffect } from 'react';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\n\nconst LANGUAGE_KEY = '@app/language';\n\nexport function usePersistedLanguage() {\n const { language, setLanguage } = useLanguage();\n\n // Load saved language on mount\n useEffect(() => {\n AsyncStorage.getItem(LANGUAGE_KEY).then((saved) => {\n if (saved) setLanguage(saved);\n });\n }, []);\n\n // Save language when changed\n useEffect(() => {\n AsyncStorage.setItem(LANGUAGE_KEY, language);\n }, [language]);\n\n return { language, setLanguage };\n}\n\\`\\`\\`\n\n## Multiple Namespaces\n\n\\`\\`\\`tsx\n// components/UserProfile.tsx\nimport { useTranslation } from '@idealyst/translate';\n\nexport function UserProfile() {\n // Load multiple namespaces\n const { t } = useTranslation(['common', 'user']);\n\n return (\n <View>\n {/* Use namespace prefix */}\n <Text variant=\"h1\">{t('user:profile.title')}</Text>\n <Button>{t('common:buttons.edit')}</Button>\n </View>\n );\n}\n\\`\\`\\`\n\n## Date and Number Formatting\n\n\\`\\`\\`tsx\n// components/OrderSummary.tsx\nimport { View, Text } from '@idealyst/components';\nimport { useTranslation, useLanguage } from '@idealyst/translate';\n\ninterface Props {\n total: number;\n orderDate: Date;\n}\n\nexport function OrderSummary({ total, orderDate }: Props) {\n const { t } = useTranslation('orders');\n const { language } = useLanguage();\n\n // Format based on current language\n const formattedTotal = new Intl.NumberFormat(language, {\n style: 'currency',\n currency: 'USD',\n }).format(total);\n\n const formattedDate = new Intl.DateTimeFormat(language, {\n dateStyle: 'long',\n }).format(orderDate);\n\n return (\n <View>\n <Text>{t('summary.total', { amount: formattedTotal })}</Text>\n <Text>{t('summary.date', { date: formattedDate })}</Text>\n </View>\n );\n}\n\n// Translation file:\n// {\n// \"summary\": {\n// \"total\": \"Total: {{amount}}\",\n// \"date\": \"Order placed on {{date}}\"\n// }\n// }\n\\`\\`\\`\n`,\n};\n","export const storageGuides: Record<string, string> = {\n \"idealyst://storage/overview\": `# @idealyst/storage Overview\n\nCross-platform storage solution for React and React Native applications. Provides a consistent async API for persistent data storage.\n\n## Features\n\n- **Cross-Platform** - Works seamlessly on React Native and Web\n- **Simple API** - Async/await based with consistent interface\n- **React Native** - Uses MMKV for high-performance storage\n- **Web** - Uses localStorage with proper error handling\n- **TypeScript** - Full type safety and IntelliSense support\n\n## Installation\n\n\\`\\`\\`bash\nyarn add @idealyst/storage\n\n# React Native also needs:\nyarn add react-native-mmkv\ncd ios && pod install\n\\`\\`\\`\n\n## Quick Start\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\n\n// Store string data\nawait storage.setItem('token', 'abc123');\n\n// Store objects (use JSON.stringify)\nawait storage.setItem('user', JSON.stringify({ name: 'John', id: 123 }));\n\n// Retrieve string data\nconst token = await storage.getItem('token');\n\n// Retrieve and parse objects\nconst userData = await storage.getItem('user');\nconst user = userData ? JSON.parse(userData) : null;\n\n// Remove data\nawait storage.removeItem('token');\n\n// Clear all data\nawait storage.clear();\n\n// Get all keys\nconst keys = await storage.getAllKeys();\n\\`\\`\\`\n\n## Import Options\n\n\\`\\`\\`tsx\n// Named import (recommended)\nimport { storage } from '@idealyst/storage';\n\n// Default import\nimport storage from '@idealyst/storage';\n\\`\\`\\`\n\n## Platform Details\n\n- **React Native**: Uses \\`react-native-mmkv\\` for high-performance storage\n- **Web**: Uses browser \\`localStorage\\`\n`,\n\n \"idealyst://storage/api\": `# Storage API Reference\n\nComplete API reference for @idealyst/storage.\n\n## setItem\n\nStore a string value with the given key.\n\n\\`\\`\\`tsx\nawait storage.setItem(key: string, value: string): Promise<void>\n\n// Examples\nawait storage.setItem('token', 'abc123');\nawait storage.setItem('userId', '42');\n\n// For objects, use JSON.stringify\nawait storage.setItem('user', JSON.stringify({ name: 'John', age: 30 }));\nawait storage.setItem('tags', JSON.stringify(['react', 'native']));\nawait storage.setItem('settings', JSON.stringify({ theme: 'dark', notifications: true }));\n\\`\\`\\`\n\n## getItem\n\nRetrieve a string value by key. Returns \\`null\\` if the key doesn't exist.\n\n\\`\\`\\`tsx\nawait storage.getItem(key: string): Promise<string | null>\n\n// Examples\nconst token = await storage.getItem('token');\nconst userId = await storage.getItem('userId');\n\n// For objects, parse the JSON\nconst userData = await storage.getItem('user');\nconst user = userData ? JSON.parse(userData) as User : null;\n\nconst tagsData = await storage.getItem('tags');\nconst tags = tagsData ? JSON.parse(tagsData) as string[] : [];\n\nif (user) {\n console.log(user.name);\n}\n\\`\\`\\`\n\n## removeItem\n\nRemove a specific item from storage.\n\n\\`\\`\\`tsx\nawait storage.removeItem(key: string): Promise<void>\n\n// Examples\nawait storage.removeItem('user');\nawait storage.removeItem('temporaryData');\n\\`\\`\\`\n\n## clear\n\nRemove all items from storage.\n\n\\`\\`\\`tsx\nawait storage.clear(): Promise<void>\n\\`\\`\\`\n\n## getAllKeys\n\nReturns all keys currently in storage.\n\n\\`\\`\\`tsx\nawait storage.getAllKeys(): Promise<string[]>\n\n// Example\nconst keys = await storage.getAllKeys();\nconsole.log('Stored keys:', keys); // ['user', 'settings', 'token']\n\\`\\`\\`\n\n## Helper Pattern for Typed Storage\n\nCreate a typed wrapper for cleaner code:\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\n\n// Helper functions for typed storage\nasync function setObject<T>(key: string, value: T): Promise<void> {\n await storage.setItem(key, JSON.stringify(value));\n}\n\nasync function getObject<T>(key: string): Promise<T | null> {\n const data = await storage.getItem(key);\n return data ? JSON.parse(data) as T : null;\n}\n\n// Usage\ninterface User {\n id: number;\n name: string;\n}\n\nawait setObject<User>('user', { id: 1, name: 'John' });\nconst user = await getObject<User>('user');\n\\`\\`\\`\n`,\n\n \"idealyst://storage/examples\": `# Storage Examples\n\nComplete code examples for common @idealyst/storage patterns.\n\n## User Session Management\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\n\ninterface User {\n id: number;\n name: string;\n email: string;\n}\n\nclass AuthService {\n static async saveUserSession(user: User, token: string) {\n await Promise.all([\n storage.setItem('currentUser', JSON.stringify(user)),\n storage.setItem('authToken', token),\n storage.setItem('loginTime', new Date().toISOString()),\n ]);\n }\n\n static async getUserSession() {\n const userData = await storage.getItem('currentUser');\n const token = await storage.getItem('authToken');\n\n const user = userData ? JSON.parse(userData) as User : null;\n return user && token ? { user, token } : null;\n }\n\n static async clearSession() {\n await Promise.all([\n storage.removeItem('currentUser'),\n storage.removeItem('authToken'),\n storage.removeItem('loginTime'),\n ]);\n }\n}\n\\`\\`\\`\n\n## Settings Management\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\n\ninterface AppSettings {\n theme: 'light' | 'dark';\n notifications: boolean;\n language: string;\n fontSize: number;\n}\n\nconst defaultSettings: AppSettings = {\n theme: 'light',\n notifications: true,\n language: 'en',\n fontSize: 16,\n};\n\nclass SettingsService {\n static async getSettings(): Promise<AppSettings> {\n const data = await storage.getItem('appSettings');\n const stored = data ? JSON.parse(data) as AppSettings : null;\n return stored ? { ...defaultSettings, ...stored } : defaultSettings;\n }\n\n static async updateSettings(newSettings: Partial<AppSettings>) {\n const current = await this.getSettings();\n const updated = { ...current, ...newSettings };\n await storage.setItem('appSettings', JSON.stringify(updated));\n return updated;\n }\n\n static async resetSettings() {\n await storage.setItem('appSettings', JSON.stringify(defaultSettings));\n return defaultSettings;\n }\n}\n\\`\\`\\`\n\n## Cache with Expiration\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\n\ninterface CacheItem<T> {\n data: T;\n timestamp: number;\n expiresIn: number; // milliseconds\n}\n\nclass CacheService {\n static async setCache<T>(key: string, data: T, expiresIn: number = 3600000) {\n const cacheItem: CacheItem<T> = {\n data,\n timestamp: Date.now(),\n expiresIn,\n };\n\n await storage.setItem(\\`cache_\\${key}\\`, JSON.stringify(cacheItem));\n }\n\n static async getCache<T>(key: string): Promise<T | null> {\n const data = await storage.getItem(\\`cache_\\${key}\\`);\n if (!data) return null;\n\n const cacheItem = JSON.parse(data) as CacheItem<T>;\n const isExpired = Date.now() - cacheItem.timestamp > cacheItem.expiresIn;\n\n if (isExpired) {\n await storage.removeItem(\\`cache_\\${key}\\`);\n return null;\n }\n\n return cacheItem.data;\n }\n\n static async clearExpiredCache() {\n const keys = await storage.getAllKeys();\n const cacheKeys = keys.filter(key => key.startsWith('cache_'));\n\n for (const key of cacheKeys) {\n const data = await storage.getItem(key);\n if (data) {\n const cacheItem = JSON.parse(data) as CacheItem<unknown>;\n const isExpired = Date.now() - cacheItem.timestamp > cacheItem.expiresIn;\n if (isExpired) {\n await storage.removeItem(key);\n }\n }\n }\n }\n}\n\\`\\`\\`\n\n## Persisting Language Preference\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\nimport { useLanguage } from '@idealyst/translate';\nimport { useEffect } from 'react';\n\nconst LANGUAGE_KEY = 'app_language';\n\nexport function usePersistedLanguage() {\n const { language, setLanguage } = useLanguage();\n\n // Load saved language on mount\n useEffect(() => {\n storage.getItem(LANGUAGE_KEY).then((saved) => {\n if (saved) setLanguage(saved);\n });\n }, []);\n\n // Save language when changed\n useEffect(() => {\n storage.setItem(LANGUAGE_KEY, language);\n }, [language]);\n\n return { language, setLanguage };\n}\n\\`\\`\\`\n\n## React Hook for Storage\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\nimport { useState, useEffect, useCallback } from 'react';\n\nexport function useStorage<T>(key: string, initialValue: T) {\n const [value, setValue] = useState<T>(initialValue);\n const [loading, setLoading] = useState(true);\n\n // Load value on mount\n useEffect(() => {\n storage.getItem(key).then((stored) => {\n if (stored !== null) {\n setValue(JSON.parse(stored) as T);\n }\n setLoading(false);\n });\n }, [key]);\n\n // Update storage when value changes\n const updateValue = useCallback(async (newValue: T) => {\n setValue(newValue);\n await storage.setItem(key, JSON.stringify(newValue));\n }, [key]);\n\n // Remove from storage\n const removeValue = useCallback(async () => {\n setValue(initialValue);\n await storage.removeItem(key);\n }, [key, initialValue]);\n\n return { value, setValue: updateValue, removeValue, loading };\n}\n\n// Usage\nfunction MyComponent() {\n const { value: theme, setValue: setTheme, loading } = useStorage('theme', 'light');\n\n if (loading) return <ActivityIndicator />;\n\n return (\n <Button onPress={() => setTheme(theme === 'light' ? 'dark' : 'light')}>\n Toggle Theme\n </Button>\n );\n}\n\\`\\`\\`\n\n## Error Handling\n\n\\`\\`\\`tsx\nimport { storage } from '@idealyst/storage';\n\nasync function safeStorageOperation() {\n try {\n await storage.setItem('data', JSON.stringify(largeObject));\n } catch (error) {\n console.error('Storage failed:', error);\n // Handle storage quota exceeded or other errors\n }\n\n // Or with null checking\n const result = await storage.getItem('data');\n if (result === null) {\n // Key doesn't exist or retrieval failed\n console.log('No data found');\n }\n}\n\\`\\`\\`\n\n## Best Practices\n\n1. **Use JSON.stringify/parse** - Storage only accepts strings, so serialize objects\n2. **Handle Nulls** - Always check for null returns from \\`getItem\\`\n3. **Batch Operations** - Use \\`Promise.all\\` for multiple storage operations\n4. **Error Handling** - Wrap storage operations in try-catch blocks for critical data\n5. **Key Naming** - Use consistent, descriptive key names\n6. **Data Size** - Keep stored objects reasonably sized\n7. **Cleanup** - Periodically clean up unused data\n8. **Type Safety** - Create typed wrapper functions for better TypeScript support\n`,\n};\n","export const iconGuide = `# Material Design Icons Reference\n\nIdealyst uses Material Design Icons (@mdi/react) with **7,447 icons** available.\n\n## Icon Usage\n\n### In Components\n\nIcons can be used by providing the icon name as a string:\n\n\\`\\`\\`tsx\nimport { Button, Icon, List, Badge } from '@idealyst/components';\n\n// Button with icon\n<Button icon=\"check\">Save</Button>\n\n// Standalone Icon\n<Icon name=\"home\" size=\"md\" color=\"primary\" />\n\n// List with icons\n<ListItem label=\"Settings\" leading=\"cog\" trailing=\"chevron-right\" />\n\n// Badge with icon\n<Badge icon=\"star\">Featured</Badge>\n\\`\\`\\`\n\n### Icon Properties\n\n\\`\\`\\`tsx\n<Icon\n name=\"home\" // Icon name (required)\n size=\"xs|sm|md|lg|xl|number\" // Icon size\n color=\"primary|secondary|...\" // Theme color\n/>\n\\`\\`\\`\n\n## Common Icons by Category\n\n### Navigation & Actions\n- **home** - Home/dashboard\n- **menu** - Hamburger menu\n- **arrow-left** - Back/previous\n- **arrow-right** - Forward/next\n- **chevron-left** - Small back arrow\n- **chevron-right** - Small forward arrow\n- **chevron-up** - Collapse/up\n- **chevron-down** - Expand/down\n- **close** - Close/dismiss\n- **check** - Confirm/success\n- **plus** - Add/create\n- **minus** - Remove/subtract\n- **delete** - Delete/trash\n- **dots-vertical** - More options (vertical)\n- **dots-horizontal** - More options (horizontal)\n\n### User & Account\n- **account** - User profile\n- **account-circle** - User avatar\n- **account-multiple** - Multiple users/team\n- **account-plus** - Add user\n- **account-minus** - Remove user\n- **account-edit** - Edit profile\n- **account-cog** - User settings\n- **login** - Login/sign in\n- **logout** - Logout/sign out\n- **account-key** - Authentication\n\n### Communication\n- **email** - Email/mail\n- **email-outline** - Email outline variant\n- **message** - Message/chat\n- **message-text** - Text message\n- **message-reply** - Reply to message\n- **phone** - Phone/call\n- **bell** - Notifications\n- **bell-outline** - Notifications outline\n- **comment** - Comment/feedback\n- **forum** - Discussion/forum\n\n### File & Document\n- **file** - Generic file\n- **file-document** - Document\n- **file-pdf** - PDF file\n- **file-image** - Image file\n- **folder** - Folder\n- **folder-open** - Open folder\n- **download** - Download\n- **upload** - Upload\n- **attachment** - Attach file\n- **cloud-upload** - Cloud upload\n- **cloud-download** - Cloud download\n\n### Media\n- **play** - Play media\n- **pause** - Pause media\n- **stop** - Stop media\n- **skip-next** - Next track\n- **skip-previous** - Previous track\n- **volume-high** - High volume\n- **volume-low** - Low volume\n- **volume-off** - Muted\n- **image** - Picture/photo\n- **camera** - Camera\n- **video** - Video\n\n### Edit & Create\n- **pencil** - Edit\n- **pencil-outline** - Edit outline\n- **content-save** - Save\n- **content-copy** - Copy\n- **content-cut** - Cut\n- **content-paste** - Paste\n- **undo** - Undo\n- **redo** - Redo\n- **format-bold** - Bold text\n- **format-italic** - Italic text\n- **format-underline** - Underline text\n\n### Status & Alerts\n- **check-circle** - Success\n- **check-circle-outline** - Success outline\n- **alert** - Warning\n- **alert-circle** - Alert circle\n- **alert-octagon** - Critical alert\n- **information** - Information\n- **information-outline** - Info outline\n- **help-circle** - Help/question\n- **close-circle** - Error\n- **clock** - Time/pending\n\n### UI Elements\n- **magnify** - Search\n- **filter** - Filter\n- **sort** - Sort\n- **tune** - Settings/adjust\n- **cog** - Settings\n- **palette** - Theme/colors\n- **eye** - View/visible\n- **eye-off** - Hidden\n- **heart** - Favorite/like\n- **heart-outline** - Like outline\n- **star** - Star/rating\n- **star-outline** - Star outline\n- **bookmark** - Bookmark\n- **bookmark-outline** - Bookmark outline\n\n### Shopping & Commerce\n- **cart** - Shopping cart\n- **cart-outline** - Cart outline\n- **cash** - Money/payment\n- **credit-card** - Credit card\n- **tag** - Tag/label\n- **sale** - Sale/discount\n- **receipt** - Receipt\n- **store** - Store/shop\n\n### Social\n- **share** - Share\n- **share-variant** - Share variant\n- **thumb-up** - Like/upvote\n- **thumb-down** - Dislike/downvote\n- **emoticon** - Emoji/mood\n- **emoticon-happy** - Happy\n- **emoticon-sad** - Sad\n\n### Location & Map\n- **map** - Map\n- **map-marker** - Location pin\n- **navigation** - Navigation\n- **compass** - Compass\n- **earth** - Globe/world\n\n### Calendar & Time\n- **calendar** - Calendar\n- **calendar-today** - Today\n- **calendar-month** - Month view\n- **clock-outline** - Clock\n- **timer** - Timer\n\n### Device & Hardware\n- **laptop** - Laptop\n- **cellphone** - Mobile phone\n- **tablet** - Tablet\n- **desktop-mac** - Desktop\n- **monitor** - Monitor\n- **printer** - Printer\n- **wifi** - WiFi\n- **bluetooth** - Bluetooth\n\n### Weather\n- **weather-sunny** - Sunny\n- **weather-cloudy** - Cloudy\n- **weather-rainy** - Rainy\n- **weather-snowy** - Snowy\n- **weather-night** - Night\n- **white-balance-sunny** - Light mode\n- **weather-night** - Dark mode\n\n## Finding Icons\n\n### Total Available Icons\n**7,447 icons** from Material Design Icons\n\n### Browse All Icons\nVisit: https://pictogrammers.com/library/mdi/\n\n### Search Patterns\nIcons follow naming patterns:\n- Base name: \\`home\\`, \\`account\\`, \\`file\\`\n- Variants: \\`-outline\\`, \\`-filled\\`, \\`-off\\`, \\`-plus\\`, \\`-minus\\`\n- Combinations: \\`account-plus\\`, \\`file-document-outline\\`\n\n### Common Suffixes\n- **-outline**: Outline version\n- **-off**: Disabled/off state\n- **-plus**: Add/create\n- **-minus**: Remove/subtract\n- **-edit**: Edit action\n- **-check**: Verified/checked\n- **-alert**: Warning state\n\n## Icon Naming Tips\n\n1. **Be Specific**: Use descriptive names\n - ✅ \\`account-circle\\` for user avatar\n - ❌ \\`user\\` (not available)\n\n2. **Check Variants**: Try outline versions\n - \\`email\\` and \\`email-outline\\`\n - \\`heart\\` and \\`heart-outline\\`\n\n3. **Common Prefixes**:\n - \\`account-*\\`: User-related\n - \\`file-*\\`: File-related\n - \\`folder-*\\`: Folder-related\n - \\`arrow-*\\`: Arrows\n - \\`chevron-*\\`: Small arrows\n - \\`content-*\\`: Content actions\n\n4. **Use Hyphens**: Icon names use kebab-case\n - ✅ \\`arrow-left\\`\n - ❌ \\`arrowLeft\\` or \\`arrow_left\\`\n\n## Best Practices\n\n1. **Semantic Meaning**: Choose icons that match their function\n2. **Consistency**: Use the same icon for the same action throughout the app\n3. **Size Appropriately**: Match icon size to context\n4. **Color Purposefully**: Use theme colors for semantic meaning\n5. **Accessibility**: Always provide labels/tooltips for icon-only buttons\n\n## Examples\n\n### Button Icons\n\\`\\`\\`tsx\n<Button icon=\"content-save\">Save</Button>\n<Button icon=\"delete\" intent=\"error\">Delete</Button>\n<Button icon=\"pencil\">Edit</Button>\n<Button icon=\"plus\">Add New</Button>\n\\`\\`\\`\n\n### List Icons\n\\`\\`\\`tsx\n<ListItem label=\"Dashboard\" leading=\"view-dashboard\" />\n<ListItem label=\"Users\" leading=\"account-multiple\" />\n<ListItem label=\"Settings\" leading=\"cog\" />\n<ListItem label=\"Logout\" leading=\"logout\" intent=\"error\" />\n\\`\\`\\`\n\n### Navigation Icons\n\\`\\`\\`tsx\n<Button icon=\"arrow-left\" variant=\"text\">Back</Button>\n<Button icon=\"menu\" variant=\"text\">Menu</Button>\n<Button icon=\"close\" variant=\"text\">Close</Button>\n\\`\\`\\`\n\n### Status Icons\n\\`\\`\\`tsx\n<Icon name=\"check-circle\" color=\"success\" />\n<Icon name=\"alert-circle\" color=\"warning\" />\n<Icon name=\"close-circle\" color=\"error\" />\n<Icon name=\"information-outline\" color=\"primary\" />\n\\`\\`\\`\n`;\n","/**\n * Idealyst Framework Package Registry\n * Central metadata for all @idealyst packages\n */\n\nexport interface PackageInfo {\n name: string;\n npmName: string;\n description: string;\n category: \"core\" | \"ui\" | \"media\" | \"data\" | \"auth\" | \"utility\" | \"tooling\";\n platforms: (\"web\" | \"native\" | \"node\")[];\n documentationStatus: \"full\" | \"partial\" | \"minimal\";\n installation: string;\n peerDependencies?: string[];\n features: string[];\n quickStart: string;\n apiHighlights?: string[];\n relatedPackages?: string[];\n}\n\nexport const packages: Record<string, PackageInfo> = {\n components: {\n name: \"Components\",\n npmName: \"@idealyst/components\",\n description:\n \"Cross-platform React UI components for web and React Native. Includes buttons, cards, inputs, dialogs, and 30+ more components with consistent styling.\",\n category: \"core\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/components @idealyst/theme\",\n peerDependencies: [\"@idealyst/theme\", \"react-native-unistyles\"],\n features: [\n \"36+ production-ready components\",\n \"Consistent API across web and native\",\n \"Theme-aware with automatic dark mode\",\n \"Accessible by default\",\n \"TypeScript-first with full type definitions\",\n \"Tree-shakeable exports\",\n ],\n quickStart: `import { Button, Card, Text } from '@idealyst/components';\n\n<Card>\n <Text variant=\"headline\">Hello World</Text>\n <Button onPress={() => console.log('Pressed!')}>\n Click Me\n </Button>\n</Card>`,\n apiHighlights: [\n \"Button, IconButton, FAB\",\n \"Card, View, Screen\",\n \"Input, Select, Checkbox, Switch\",\n \"Dialog, Popover, Menu\",\n \"Text, Link, Badge, Chip\",\n ],\n relatedPackages: [\"theme\", \"navigation\"],\n },\n\n theme: {\n name: \"Theme\",\n npmName: \"@idealyst/theme\",\n description:\n \"Cross-platform theming system built on react-native-unistyles. Provides colors, typography, spacing, and responsive breakpoints.\",\n category: \"core\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/theme react-native-unistyles\",\n peerDependencies: [\"react-native-unistyles\"],\n features: [\n \"Light and dark theme variants\",\n \"Semantic color tokens (intent-based)\",\n \"Responsive breakpoints\",\n \"Typography scale\",\n \"Spacing and sizing utilities\",\n \"Platform-specific adaptations\",\n ],\n quickStart: `import { UnistylesProvider } from '@idealyst/theme';\n\n<UnistylesProvider>\n <App />\n</UnistylesProvider>`,\n apiHighlights: [\n \"Size: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\",\n \"Intent: 'primary' | 'secondary' | 'success' | 'warning' | 'danger'\",\n \"Color: theme color tokens\",\n \"useStyles() hook for styling\",\n ],\n relatedPackages: [\"components\"],\n },\n\n navigation: {\n name: \"Navigation\",\n npmName: \"@idealyst/navigation\",\n description:\n \"Unified navigation system for web and React Native. Stack, tab, drawer, and modal navigators with type-safe routing.\",\n category: \"core\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/navigation\",\n peerDependencies: [\"@react-navigation/native (native only)\"],\n features: [\n \"Type-safe route definitions\",\n \"Stack, Tab, Drawer, Modal navigators\",\n \"Deep linking support\",\n \"Custom layouts for web (headers, sidebars)\",\n \"useNavigator hook for navigation actions\",\n \"Cross-platform URL handling\",\n ],\n quickStart: `import { Router, useNavigator } from '@idealyst/navigation';\n\nconst routes = {\n home: { path: '/', screen: HomeScreen },\n profile: { path: '/profile/:id', screen: ProfileScreen },\n};\n\n<Router routes={routes} />`,\n apiHighlights: [\n \"Router component\",\n \"useNavigator() hook\",\n \"Route configuration\",\n \"Navigator types (stack, tabs, drawer)\",\n ],\n relatedPackages: [\"components\", \"theme\"],\n },\n\n cli: {\n name: \"CLI\",\n npmName: \"@idealyst/cli\",\n description:\n \"Command-line tool for generating Idealyst projects. Creates monorepo workspaces with web, native, API, and database packages.\",\n category: \"tooling\",\n platforms: [\"node\"],\n documentationStatus: \"full\",\n installation: \"npx @idealyst/cli init my-project\",\n features: [\n \"Monorepo workspace generation\",\n \"React Native app scaffolding\",\n \"Vite-based web app generation\",\n \"tRPC API server template\",\n \"Prisma database layer\",\n \"Shared library template\",\n ],\n quickStart: `# Create a new workspace\nnpx @idealyst/cli init my-app\n\n# Add a native app\ncd my-app\nnpx @idealyst/cli create mobile --type native --app-name \"My App\"\n\n# Add a web app\nnpx @idealyst/cli create web --type web --with-trpc`,\n apiHighlights: [\n \"idealyst init <name>\",\n \"idealyst create <name> --type native|web|api|database|shared\",\n ],\n relatedPackages: [\"components\", \"theme\", \"navigation\"],\n },\n\n storage: {\n name: \"Storage\",\n npmName: \"@idealyst/storage\",\n description:\n \"Cross-platform key-value storage with async API. Uses localStorage on web and AsyncStorage on React Native.\",\n category: \"data\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/storage\",\n peerDependencies: [\"@react-native-async-storage/async-storage (native)\"],\n features: [\n \"Unified API across platforms\",\n \"Async/await interface\",\n \"JSON serialization built-in\",\n \"TypeScript generics for type safety\",\n \"Prefix namespacing\",\n ],\n quickStart: `import { storage } from '@idealyst/storage';\n\n// Store a value\nawait storage.set('user', { name: 'Alice', id: 1 });\n\n// Retrieve a value\nconst user = await storage.get<User>('user');\n\n// Remove a value\nawait storage.remove('user');`,\n apiHighlights: [\n \"storage.get<T>(key)\",\n \"storage.set(key, value)\",\n \"storage.remove(key)\",\n \"storage.clear()\",\n ],\n relatedPackages: [\"oauth-client\", \"config\"],\n },\n\n translate: {\n name: \"Translate\",\n npmName: \"@idealyst/translate\",\n description:\n \"Internationalization (i18n) package with runtime API and Babel plugin for static key extraction.\",\n category: \"utility\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/translate\",\n features: [\n \"TranslateProvider for app-wide i18n\",\n \"useTranslation hook\",\n \"Interpolation support\",\n \"Pluralization\",\n \"Babel plugin for key extraction\",\n \"Missing translation detection\",\n ],\n quickStart: `import { TranslateProvider, useTranslation } from '@idealyst/translate';\n\nfunction App() {\n return (\n <TranslateProvider translations={translations} defaultLanguage=\"en\">\n <MyComponent />\n </TranslateProvider>\n );\n}\n\nfunction MyComponent() {\n const { t } = useTranslation();\n return <Text>{t('greeting', { name: 'World' })}</Text>;\n}`,\n apiHighlights: [\n \"TranslateProvider\",\n \"useTranslation()\",\n \"useLanguage()\",\n \"Trans component\",\n ],\n relatedPackages: [\"components\"],\n },\n\n camera: {\n name: \"Camera\",\n npmName: \"@idealyst/camera\",\n description:\n \"Cross-platform camera component for photo and video capture. Uses react-native-vision-camera on native and MediaDevices API on web.\",\n category: \"media\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"minimal\",\n installation: \"yarn add @idealyst/camera react-native-vision-camera\",\n peerDependencies: [\"react-native-vision-camera (native)\"],\n features: [\n \"Photo capture\",\n \"Video recording\",\n \"Camera switching (front/back)\",\n \"Flash control\",\n \"Zoom support\",\n \"Permission handling\",\n ],\n quickStart: `import { Camera, useCameraPermission } from '@idealyst/camera';\n\nfunction CameraScreen() {\n const { hasPermission, requestPermission } = useCameraPermission();\n\n if (!hasPermission) {\n return <Button onPress={requestPermission}>Grant Permission</Button>;\n }\n\n return (\n <Camera\n onCapture={(photo) => console.log('Photo taken:', photo)}\n />\n );\n}`,\n apiHighlights: [\n \"Camera component\",\n \"useCameraPermission()\",\n \"useCamera()\",\n \"Photo/Video capture callbacks\",\n ],\n relatedPackages: [\"components\", \"storage\"],\n },\n\n microphone: {\n name: \"Microphone\",\n npmName: \"@idealyst/microphone\",\n description:\n \"Cross-platform microphone streaming for real-time audio capture. Provides PCM audio data for processing or streaming.\",\n category: \"media\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"minimal\",\n installation: \"yarn add @idealyst/microphone\",\n peerDependencies: [\"react-native-live-audio-stream (native)\"],\n features: [\n \"Real-time audio streaming\",\n \"PCM audio format\",\n \"Configurable sample rate\",\n \"Permission handling\",\n \"Start/stop controls\",\n \"Audio level monitoring\",\n ],\n quickStart: `import { useMicrophone } from '@idealyst/microphone';\n\nfunction AudioRecorder() {\n const { start, stop, isRecording, audioData } = useMicrophone({\n sampleRate: 16000,\n onAudioData: (pcmData) => {\n // Process or stream audio data\n },\n });\n\n return (\n <Button onPress={isRecording ? stop : start}>\n {isRecording ? 'Stop' : 'Record'}\n </Button>\n );\n}`,\n apiHighlights: [\n \"useMicrophone() hook\",\n \"MicrophoneProvider\",\n \"Audio streaming callbacks\",\n \"Sample rate configuration\",\n ],\n relatedPackages: [\"camera\", \"components\"],\n },\n\n datagrid: {\n name: \"DataGrid\",\n npmName: \"@idealyst/datagrid\",\n description:\n \"High-performance virtualized data grid for large datasets. Supports sorting, filtering, and custom cell rendering.\",\n category: \"data\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"minimal\",\n installation: \"yarn add @idealyst/datagrid @idealyst/components @idealyst/theme\",\n peerDependencies: [\n \"@idealyst/components\",\n \"@idealyst/theme\",\n \"react-window (web)\",\n ],\n features: [\n \"Virtualized rendering for large datasets\",\n \"Column sorting\",\n \"Row selection\",\n \"Custom cell renderers\",\n \"Fixed headers\",\n \"Responsive column sizing\",\n ],\n quickStart: `import { DataGrid } from '@idealyst/datagrid';\n\nconst columns = [\n { key: 'name', header: 'Name', width: 200 },\n { key: 'email', header: 'Email', width: 250 },\n { key: 'status', header: 'Status', width: 100 },\n];\n\n<DataGrid\n data={users}\n columns={columns}\n onRowClick={(row) => console.log('Selected:', row)}\n/>`,\n apiHighlights: [\n \"DataGrid component\",\n \"Column configuration\",\n \"Row selection callbacks\",\n \"Custom cell renderers\",\n ],\n relatedPackages: [\"components\", \"theme\"],\n },\n\n datepicker: {\n name: \"DatePicker\",\n npmName: \"@idealyst/datepicker\",\n description:\n \"Cross-platform date and time picker components. Includes calendar, time picker, and date range selection.\",\n category: \"ui\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"minimal\",\n installation: \"yarn add @idealyst/datepicker @idealyst/theme\",\n peerDependencies: [\"@idealyst/theme\"],\n features: [\n \"Date picker with calendar\",\n \"Time picker\",\n \"Date range selection\",\n \"Min/max date constraints\",\n \"Locale support\",\n \"Customizable styling\",\n ],\n quickStart: `import { DatePicker, TimePicker } from '@idealyst/datepicker';\n\n<DatePicker\n value={selectedDate}\n onChange={setSelectedDate}\n minDate={new Date()}\n/>\n\n<TimePicker\n value={selectedTime}\n onChange={setSelectedTime}\n is24Hour={true}\n/>`,\n apiHighlights: [\n \"DatePicker component\",\n \"TimePicker component\",\n \"DateRangePicker component\",\n \"Calendar component\",\n ],\n relatedPackages: [\"components\", \"theme\"],\n },\n\n \"oauth-client\": {\n name: \"OAuth Client\",\n npmName: \"@idealyst/oauth-client\",\n description:\n \"Universal OAuth2 client for web and React Native. Supports authorization code flow with PKCE.\",\n category: \"auth\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"minimal\",\n installation: \"yarn add @idealyst/oauth-client @idealyst/storage\",\n peerDependencies: [\"@idealyst/storage\"],\n features: [\n \"Authorization code flow with PKCE\",\n \"Token refresh handling\",\n \"Secure token storage\",\n \"Multiple provider support\",\n \"Silent token refresh\",\n \"Logout handling\",\n ],\n quickStart: `import { OAuthClient } from '@idealyst/oauth-client';\n\nconst oauth = new OAuthClient({\n clientId: 'your-client-id',\n authorizationEndpoint: 'https://auth.example.com/authorize',\n tokenEndpoint: 'https://auth.example.com/token',\n redirectUri: 'myapp://callback',\n});\n\n// Start login flow\nawait oauth.login();\n\n// Get access token\nconst token = await oauth.getAccessToken();\n\n// Logout\nawait oauth.logout();`,\n apiHighlights: [\n \"OAuthClient class\",\n \"login() / logout()\",\n \"getAccessToken()\",\n \"Token refresh handling\",\n ],\n relatedPackages: [\"storage\", \"navigation\"],\n },\n\n config: {\n name: \"Config\",\n npmName: \"@idealyst/config\",\n description:\n \"Cross-platform configuration and environment variable support. Type-safe access to env vars on web and native.\",\n category: \"utility\",\n platforms: [\"web\", \"native\", \"node\"],\n documentationStatus: \"minimal\",\n installation: \"yarn add @idealyst/config\",\n peerDependencies: [\"react-native-config (native)\"],\n features: [\n \"Type-safe environment variables\",\n \"Cross-platform API\",\n \"Build-time configuration\",\n \"Vite plugin for web\",\n \"React Native Config integration\",\n \"Default value support\",\n ],\n quickStart: `// config.ts\nimport { defineConfig } from '@idealyst/config';\n\nexport const config = defineConfig({\n API_URL: { required: true },\n DEBUG: { default: 'false' },\n APP_NAME: { default: 'My App' },\n});\n\n// Usage\nimport { config } from './config';\nconsole.log(config.API_URL);`,\n apiHighlights: [\n \"defineConfig()\",\n \"Type-safe config object\",\n \"Vite plugin\",\n \"CLI for generation\",\n ],\n relatedPackages: [\"storage\"],\n },\n\n tooling: {\n name: \"Tooling\",\n npmName: \"@idealyst/tooling\",\n description:\n \"Code analysis and validation utilities for Idealyst Framework. Includes Vite plugins and static analyzers.\",\n category: \"tooling\",\n platforms: [\"node\"],\n documentationStatus: \"minimal\",\n installation: \"yarn add -D @idealyst/tooling\",\n features: [\n \"Component usage analysis\",\n \"Import validation\",\n \"Vite plugin for build-time checks\",\n \"Custom rule definitions\",\n \"Documentation generation\",\n ],\n quickStart: `// vite.config.ts\nimport { idealystPlugin } from '@idealyst/tooling/vite';\n\nexport default {\n plugins: [\n idealystPlugin({\n validateImports: true,\n analyzeUsage: true,\n }),\n ],\n};`,\n apiHighlights: [\n \"idealystPlugin() for Vite\",\n \"analyzeComponent()\",\n \"Custom rule API\",\n ],\n relatedPackages: [\"cli\"],\n },\n\n \"mcp-server\": {\n name: \"MCP Server\",\n npmName: \"@idealyst/mcp-server\",\n description:\n \"Model Context Protocol server providing AI assistants with Idealyst framework documentation, types, and examples.\",\n category: \"tooling\",\n platforms: [\"node\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/mcp-server\",\n features: [\n \"Component documentation\",\n \"Type extraction from source\",\n \"Validated code examples\",\n \"Icon search (7,447 MDI icons)\",\n \"Navigation and theme guides\",\n \"CLI command reference\",\n ],\n quickStart: `// .mcp.json (Claude Code)\n{\n \"mcpServers\": {\n \"idealyst\": {\n \"command\": \"node\",\n \"args\": [\"node_modules/@idealyst/mcp-server/dist/index.js\"]\n }\n }\n}`,\n apiHighlights: [\n \"list_components\",\n \"get_component_docs\",\n \"search_icons\",\n \"get_*_types\",\n ],\n relatedPackages: [\"components\", \"theme\", \"navigation\"],\n },\n};\n\n/**\n * Get all packages grouped by category\n */\nexport function getPackagesByCategory(): Record<string, PackageInfo[]> {\n const grouped: Record<string, PackageInfo[]> = {};\n\n for (const pkg of Object.values(packages)) {\n if (!grouped[pkg.category]) {\n grouped[pkg.category] = [];\n }\n grouped[pkg.category].push(pkg);\n }\n\n return grouped;\n}\n\n/**\n * Get a summary list of all packages\n */\nexport function getPackageSummary(): Array<{\n name: string;\n npmName: string;\n category: string;\n description: string;\n platforms: string[];\n documentationStatus: string;\n}> {\n return Object.entries(packages).map(([key, pkg]) => ({\n name: pkg.name,\n npmName: pkg.npmName,\n category: pkg.category,\n description: pkg.description,\n platforms: pkg.platforms,\n documentationStatus: pkg.documentationStatus,\n }));\n}\n\n/**\n * Search packages by query\n */\nexport function searchPackages(query: string): PackageInfo[] {\n const lowerQuery = query.toLowerCase();\n\n return Object.values(packages).filter(\n (pkg) =>\n pkg.name.toLowerCase().includes(lowerQuery) ||\n pkg.npmName.toLowerCase().includes(lowerQuery) ||\n pkg.description.toLowerCase().includes(lowerQuery) ||\n pkg.features.some((f) => f.toLowerCase().includes(lowerQuery)) ||\n pkg.category.toLowerCase().includes(lowerQuery)\n );\n}\n","/**\n * Idealyst Recipes - Common UI Patterns\n * Ready-to-use code examples for building apps with Idealyst\n */\n\nexport interface Recipe {\n name: string;\n description: string;\n category: \"forms\" | \"navigation\" | \"data\" | \"layout\" | \"auth\" | \"settings\" | \"media\";\n difficulty: \"beginner\" | \"intermediate\" | \"advanced\";\n packages: string[];\n code: string;\n explanation: string;\n tips?: string[];\n relatedRecipes?: string[];\n}\n\nexport const recipes: Record<string, Recipe> = {\n \"login-form\": {\n name: \"Login Form\",\n description: \"A complete login form with email/password validation and error handling\",\n category: \"auth\",\n difficulty: \"beginner\",\n packages: [\"@idealyst/components\", \"@idealyst/theme\"],\n code: `import React, { useState } from 'react';\nimport { Button, Input, Card, Text, View } from '@idealyst/components';\n\ninterface LoginFormProps {\n onSubmit: (email: string, password: string) => Promise<void>;\n onForgotPassword?: () => void;\n}\n\nexport function LoginForm({ onSubmit, onForgotPassword }: LoginFormProps) {\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [errors, setErrors] = useState<{ email?: string; password?: string }>({});\n const [isLoading, setIsLoading] = useState(false);\n const [submitError, setSubmitError] = useState<string | null>(null);\n\n const validate = () => {\n const newErrors: typeof errors = {};\n\n if (!email) {\n newErrors.email = 'Email is required';\n } else if (!/^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$/.test(email)) {\n newErrors.email = 'Please enter a valid email';\n }\n\n if (!password) {\n newErrors.password = 'Password is required';\n } else if (password.length < 8) {\n newErrors.password = 'Password must be at least 8 characters';\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleSubmit = async () => {\n setSubmitError(null);\n\n if (!validate()) return;\n\n setIsLoading(true);\n try {\n await onSubmit(email, password);\n } catch (error) {\n setSubmitError(error instanceof Error ? error.message : 'Login failed');\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <Card padding=\"lg\">\n <Text variant=\"headline\" style={{ marginBottom: 24 }}>\n Sign In\n </Text>\n\n {submitError && (\n <View style={{ marginBottom: 16 }}>\n <Text intent=\"danger\">{submitError}</Text>\n </View>\n )}\n\n <View style={{ gap: 16 }}>\n <Input\n label=\"Email\"\n placeholder=\"you@example.com\"\n value={email}\n onChangeText={setEmail}\n keyboardType=\"email-address\"\n autoCapitalize=\"none\"\n autoComplete=\"email\"\n error={errors.email}\n />\n\n <Input\n label=\"Password\"\n placeholder=\"Enter your password\"\n value={password}\n onChangeText={setPassword}\n secureTextEntry\n autoComplete=\"current-password\"\n error={errors.password}\n />\n\n <Button\n onPress={handleSubmit}\n loading={isLoading}\n disabled={isLoading}\n >\n Sign In\n </Button>\n\n {onForgotPassword && (\n <Button type=\"text\" onPress={onForgotPassword}>\n Forgot Password?\n </Button>\n )}\n </View>\n </Card>\n );\n}`,\n explanation: `This login form demonstrates:\n- Controlled inputs with useState\n- Client-side validation with error messages\n- Loading state during submission\n- Error handling for failed login attempts\n- Proper keyboard types and autocomplete hints for better UX`,\n tips: [\n \"Add onBlur validation for immediate feedback\",\n \"Consider using react-hook-form for complex forms\",\n \"Store tokens securely using @idealyst/storage after successful login\",\n ],\n relatedRecipes: [\"signup-form\", \"forgot-password\", \"protected-route\"],\n },\n\n \"signup-form\": {\n name: \"Signup Form\",\n description: \"User registration form with password confirmation and terms acceptance\",\n category: \"auth\",\n difficulty: \"beginner\",\n packages: [\"@idealyst/components\", \"@idealyst/theme\"],\n code: `import React, { useState } from 'react';\nimport { Button, Input, Card, Text, View, Checkbox, Link } from '@idealyst/components';\n\ninterface SignupFormProps {\n onSubmit: (data: { name: string; email: string; password: string }) => Promise<void>;\n onTermsPress?: () => void;\n}\n\nexport function SignupForm({ onSubmit, onTermsPress }: SignupFormProps) {\n const [name, setName] = useState('');\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [acceptedTerms, setAcceptedTerms] = useState(false);\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [isLoading, setIsLoading] = useState(false);\n\n const validate = () => {\n const newErrors: Record<string, string> = {};\n\n if (!name.trim()) {\n newErrors.name = 'Name is required';\n }\n\n if (!email) {\n newErrors.email = 'Email is required';\n } else if (!/^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$/.test(email)) {\n newErrors.email = 'Please enter a valid email';\n }\n\n if (!password) {\n newErrors.password = 'Password is required';\n } else if (password.length < 8) {\n newErrors.password = 'Password must be at least 8 characters';\n }\n\n if (password !== confirmPassword) {\n newErrors.confirmPassword = 'Passwords do not match';\n }\n\n if (!acceptedTerms) {\n newErrors.terms = 'You must accept the terms and conditions';\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleSubmit = async () => {\n if (!validate()) return;\n\n setIsLoading(true);\n try {\n await onSubmit({ name, email, password });\n } catch (error) {\n setErrors({ submit: error instanceof Error ? error.message : 'Signup failed' });\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <Card padding=\"lg\">\n <Text variant=\"headline\" style={{ marginBottom: 24 }}>\n Create Account\n </Text>\n\n {errors.submit && (\n <View style={{ marginBottom: 16 }}>\n <Text intent=\"danger\">{errors.submit}</Text>\n </View>\n )}\n\n <View style={{ gap: 16 }}>\n <Input\n label=\"Full Name\"\n placeholder=\"John Doe\"\n value={name}\n onChangeText={setName}\n autoComplete=\"name\"\n error={errors.name}\n />\n\n <Input\n label=\"Email\"\n placeholder=\"you@example.com\"\n value={email}\n onChangeText={setEmail}\n keyboardType=\"email-address\"\n autoCapitalize=\"none\"\n autoComplete=\"email\"\n error={errors.email}\n />\n\n <Input\n label=\"Password\"\n placeholder=\"At least 8 characters\"\n value={password}\n onChangeText={setPassword}\n secureTextEntry\n autoComplete=\"new-password\"\n error={errors.password}\n />\n\n <Input\n label=\"Confirm Password\"\n placeholder=\"Confirm your password\"\n value={confirmPassword}\n onChangeText={setConfirmPassword}\n secureTextEntry\n autoComplete=\"new-password\"\n error={errors.confirmPassword}\n />\n\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>\n <Checkbox\n checked={acceptedTerms}\n onCheckedChange={setAcceptedTerms}\n />\n <Text>\n I agree to the{' '}\n <Link onPress={onTermsPress}>Terms and Conditions</Link>\n </Text>\n </View>\n {errors.terms && <Text intent=\"danger\" size=\"sm\">{errors.terms}</Text>}\n\n <Button\n onPress={handleSubmit}\n loading={isLoading}\n disabled={isLoading}\n >\n Create Account\n </Button>\n </View>\n </Card>\n );\n}`,\n explanation: `This signup form includes:\n- Multiple field validation including password matching\n- Terms and conditions checkbox with validation\n- Proper autocomplete hints for password managers\n- Loading and error states`,\n tips: [\n \"Add password strength indicator for better UX\",\n \"Consider email verification flow after signup\",\n \"Use secure password hashing on the backend\",\n ],\n relatedRecipes: [\"login-form\", \"email-verification\"],\n },\n\n \"settings-screen\": {\n name: \"Settings Screen\",\n description: \"App settings screen with toggles, selections, and grouped options\",\n category: \"settings\",\n difficulty: \"beginner\",\n packages: [\"@idealyst/components\", \"@idealyst/theme\", \"@idealyst/storage\"],\n code: `import React, { useState, useEffect } from 'react';\nimport { ScrollView } from 'react-native';\nimport {\n View, Text, Switch, Select, Card, Divider, Icon\n} from '@idealyst/components';\nimport { storage } from '@idealyst/storage';\n\ninterface Settings {\n notifications: boolean;\n emailUpdates: boolean;\n darkMode: boolean;\n language: string;\n fontSize: string;\n}\n\nconst defaultSettings: Settings = {\n notifications: true,\n emailUpdates: false,\n darkMode: false,\n language: 'en',\n fontSize: 'medium',\n};\n\nexport function SettingsScreen() {\n const [settings, setSettings] = useState<Settings>(defaultSettings);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n loadSettings();\n }, []);\n\n const loadSettings = async () => {\n try {\n const saved = await storage.get<Settings>('user-settings');\n if (saved) {\n setSettings(saved);\n }\n } finally {\n setIsLoading(false);\n }\n };\n\n const updateSetting = async <K extends keyof Settings>(\n key: K,\n value: Settings[K]\n ) => {\n const newSettings = { ...settings, [key]: value };\n setSettings(newSettings);\n await storage.set('user-settings', newSettings);\n };\n\n if (isLoading) {\n return <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n <Text>Loading...</Text>\n </View>;\n }\n\n return (\n <ScrollView style={{ flex: 1 }}>\n <View style={{ padding: 16, gap: 16 }}>\n {/* Notifications Section */}\n <Card>\n <Text variant=\"title\" style={{ marginBottom: 16 }}>\n Notifications\n </Text>\n\n <SettingRow\n icon=\"bell\"\n label=\"Push Notifications\"\n description=\"Receive push notifications\"\n >\n <Switch\n checked={settings.notifications}\n onCheckedChange={(v) => updateSetting('notifications', v)}\n />\n </SettingRow>\n\n <Divider />\n\n <SettingRow\n icon=\"email\"\n label=\"Email Updates\"\n description=\"Receive weekly email updates\"\n >\n <Switch\n checked={settings.emailUpdates}\n onCheckedChange={(v) => updateSetting('emailUpdates', v)}\n />\n </SettingRow>\n </Card>\n\n {/* Appearance Section */}\n <Card>\n <Text variant=\"title\" style={{ marginBottom: 16 }}>\n Appearance\n </Text>\n\n <SettingRow\n icon=\"theme-light-dark\"\n label=\"Dark Mode\"\n description=\"Use dark theme\"\n >\n <Switch\n checked={settings.darkMode}\n onCheckedChange={(v) => updateSetting('darkMode', v)}\n />\n </SettingRow>\n\n <Divider />\n\n <SettingRow\n icon=\"format-size\"\n label=\"Font Size\"\n >\n <Select\n value={settings.fontSize}\n onValueChange={(v) => updateSetting('fontSize', v)}\n options={[\n { label: 'Small', value: 'small' },\n { label: 'Medium', value: 'medium' },\n { label: 'Large', value: 'large' },\n ]}\n style={{ width: 120 }}\n />\n </SettingRow>\n </Card>\n\n {/* Language Section */}\n <Card>\n <Text variant=\"title\" style={{ marginBottom: 16 }}>\n Language & Region\n </Text>\n\n <SettingRow\n icon=\"translate\"\n label=\"Language\"\n >\n <Select\n value={settings.language}\n onValueChange={(v) => updateSetting('language', v)}\n options={[\n { label: 'English', value: 'en' },\n { label: 'Spanish', value: 'es' },\n { label: 'French', value: 'fr' },\n { label: 'German', value: 'de' },\n ]}\n style={{ width: 140 }}\n />\n </SettingRow>\n </Card>\n </View>\n </ScrollView>\n );\n}\n\n// Helper component for consistent setting rows\nfunction SettingRow({\n icon,\n label,\n description,\n children\n}: {\n icon: string;\n label: string;\n description?: string;\n children: React.ReactNode;\n}) {\n return (\n <View style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingVertical: 12,\n }}>\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 12, flex: 1 }}>\n <Icon name={icon} size={24} />\n <View style={{ flex: 1 }}>\n <Text>{label}</Text>\n {description && (\n <Text size=\"sm\" style={{ opacity: 0.7 }}>{description}</Text>\n )}\n </View>\n </View>\n {children}\n </View>\n );\n}`,\n explanation: `This settings screen demonstrates:\n- Loading and persisting settings with @idealyst/storage\n- Grouped settings sections with Cards\n- Switch toggles for boolean options\n- Select dropdowns for choices\n- Reusable SettingRow component for consistent layout`,\n tips: [\n \"Consider debouncing saves for rapid toggles\",\n \"Add a 'Reset to Defaults' option\",\n \"Sync settings with backend for cross-device consistency\",\n ],\n relatedRecipes: [\"theme-switcher\", \"profile-screen\"],\n },\n\n \"theme-switcher\": {\n name: \"Theme Switcher\",\n description: \"Toggle between light and dark mode with persistence\",\n category: \"settings\",\n difficulty: \"beginner\",\n packages: [\"@idealyst/components\", \"@idealyst/theme\", \"@idealyst/storage\"],\n code: `import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { UnistylesRuntime } from 'react-native-unistyles';\nimport { storage } from '@idealyst/storage';\nimport { Switch, View, Text, Icon } from '@idealyst/components';\n\ntype ThemeMode = 'light' | 'dark' | 'system';\n\ninterface ThemeContextType {\n mode: ThemeMode;\n setMode: (mode: ThemeMode) => void;\n isDark: boolean;\n}\n\nconst ThemeContext = createContext<ThemeContextType | null>(null);\n\nexport function ThemeProvider({ children }: { children: React.ReactNode }) {\n const [mode, setModeState] = useState<ThemeMode>('system');\n const [isLoaded, setIsLoaded] = useState(false);\n\n useEffect(() => {\n loadTheme();\n }, []);\n\n useEffect(() => {\n if (!isLoaded) return;\n\n // Apply theme based on mode\n if (mode === 'system') {\n UnistylesRuntime.setAdaptiveThemes(true);\n } else {\n UnistylesRuntime.setAdaptiveThemes(false);\n UnistylesRuntime.setTheme(mode);\n }\n }, [mode, isLoaded]);\n\n const loadTheme = async () => {\n const saved = await storage.get<ThemeMode>('theme-mode');\n if (saved) {\n setModeState(saved);\n }\n setIsLoaded(true);\n };\n\n const setMode = async (newMode: ThemeMode) => {\n setModeState(newMode);\n await storage.set('theme-mode', newMode);\n };\n\n const isDark = mode === 'dark' ||\n (mode === 'system' && UnistylesRuntime.colorScheme === 'dark');\n\n if (!isLoaded) return null;\n\n return (\n <ThemeContext.Provider value={{ mode, setMode, isDark }}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within ThemeProvider');\n }\n return context;\n}\n\n// Simple toggle component\nexport function ThemeToggle() {\n const { isDark, setMode } = useTheme();\n\n return (\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 12 }}>\n <Icon name={isDark ? 'weather-night' : 'weather-sunny'} size={24} />\n <Text>Dark Mode</Text>\n <Switch\n checked={isDark}\n onCheckedChange={(checked) => setMode(checked ? 'dark' : 'light')}\n />\n </View>\n );\n}\n\n// Full selector with system option\nexport function ThemeSelector() {\n const { mode, setMode } = useTheme();\n\n return (\n <View style={{ gap: 8 }}>\n <ThemeOption\n label=\"Light\"\n icon=\"weather-sunny\"\n selected={mode === 'light'}\n onPress={() => setMode('light')}\n />\n <ThemeOption\n label=\"Dark\"\n icon=\"weather-night\"\n selected={mode === 'dark'}\n onPress={() => setMode('dark')}\n />\n <ThemeOption\n label=\"System\"\n icon=\"cellphone\"\n selected={mode === 'system'}\n onPress={() => setMode('system')}\n />\n </View>\n );\n}\n\nfunction ThemeOption({\n label,\n icon,\n selected,\n onPress\n}: {\n label: string;\n icon: string;\n selected: boolean;\n onPress: () => void;\n}) {\n return (\n <Pressable onPress={onPress}>\n <View style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n padding: 12,\n borderRadius: 8,\n backgroundColor: selected ? 'rgba(0,0,0,0.1)' : 'transparent',\n }}>\n <Icon name={icon} size={20} />\n <Text>{label}</Text>\n {selected && <Icon name=\"check\" size={20} intent=\"success\" />}\n </View>\n </Pressable>\n );\n}`,\n explanation: `This theme switcher provides:\n- ThemeProvider context for app-wide theme state\n- Persistence with @idealyst/storage\n- Support for light, dark, and system-follow modes\n- Integration with Unistyles runtime\n- Both simple toggle and full selector UI components`,\n tips: [\n \"Wrap your app root with ThemeProvider\",\n \"The system option follows device settings automatically\",\n \"Theme changes are instant with no reload required\",\n ],\n relatedRecipes: [\"settings-screen\"],\n },\n\n \"tab-navigation\": {\n name: \"Tab Navigation\",\n description: \"Bottom tab navigation with icons and badges\",\n category: \"navigation\",\n difficulty: \"beginner\",\n packages: [\"@idealyst/components\", \"@idealyst/navigation\"],\n code: `import React from 'react';\nimport { Router, TabBar } from '@idealyst/navigation';\nimport { Icon, Badge, View } from '@idealyst/components';\n\n// Define your screens\nfunction HomeScreen() {\n return <View><Text>Home</Text></View>;\n}\n\nfunction SearchScreen() {\n return <View><Text>Search</Text></View>;\n}\n\nfunction NotificationsScreen() {\n return <View><Text>Notifications</Text></View>;\n}\n\nfunction ProfileScreen() {\n return <View><Text>Profile</Text></View>;\n}\n\n// Route configuration\nconst routes = {\n home: {\n path: '/',\n screen: HomeScreen,\n options: {\n title: 'Home',\n tabBarIcon: ({ focused }: { focused: boolean }) => (\n <Icon name={focused ? 'home' : 'home-outline'} size={24} />\n ),\n },\n },\n search: {\n path: '/search',\n screen: SearchScreen,\n options: {\n title: 'Search',\n tabBarIcon: ({ focused }: { focused: boolean }) => (\n <Icon name={focused ? 'magnify' : 'magnify'} size={24} />\n ),\n },\n },\n notifications: {\n path: '/notifications',\n screen: NotificationsScreen,\n options: {\n title: 'Notifications',\n tabBarIcon: ({ focused }: { focused: boolean }) => (\n <View>\n <Icon name={focused ? 'bell' : 'bell-outline'} size={24} />\n {/* Show badge when there are unread notifications */}\n <Badge\n count={3}\n style={{ position: 'absolute', top: -4, right: -8 }}\n />\n </View>\n ),\n },\n },\n profile: {\n path: '/profile',\n screen: ProfileScreen,\n options: {\n title: 'Profile',\n tabBarIcon: ({ focused }: { focused: boolean }) => (\n <Icon name={focused ? 'account' : 'account-outline'} size={24} />\n ),\n },\n },\n};\n\nexport function App() {\n return (\n <Router\n routes={routes}\n navigator=\"tabs\"\n tabBarPosition=\"bottom\"\n />\n );\n}`,\n explanation: `This tab navigation setup includes:\n- Four tabs with icons that change when focused\n- Badge on notifications tab for unread count\n- Type-safe route configuration\n- Works on both web and native`,\n tips: [\n \"Use outline/filled icon variants to indicate focus state\",\n \"Keep tab count to 3-5 for best usability\",\n \"Consider hiding tabs on certain screens (like detail views)\",\n ],\n relatedRecipes: [\"drawer-navigation\", \"stack-navigation\", \"protected-route\"],\n },\n\n \"drawer-navigation\": {\n name: \"Drawer Navigation\",\n description: \"Side drawer menu with navigation items and user profile\",\n category: \"navigation\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\", \"@idealyst/navigation\"],\n code: `import React from 'react';\nimport { Router, useNavigator } from '@idealyst/navigation';\nimport { View, Text, Icon, Avatar, Pressable, Divider } from '@idealyst/components';\n\n// Custom drawer content\nfunction DrawerContent() {\n const { navigate, currentRoute } = useNavigator();\n\n const menuItems = [\n { route: 'home', icon: 'home', label: 'Home' },\n { route: 'dashboard', icon: 'view-dashboard', label: 'Dashboard' },\n { route: 'messages', icon: 'message', label: 'Messages' },\n { route: 'settings', icon: 'cog', label: 'Settings' },\n ];\n\n return (\n <View style={{ flex: 1, padding: 16 }}>\n {/* User Profile Header */}\n <View style={{ alignItems: 'center', paddingVertical: 24 }}>\n <Avatar\n source={{ uri: 'https://example.com/avatar.jpg' }}\n size=\"lg\"\n />\n <Text variant=\"title\" style={{ marginTop: 12 }}>John Doe</Text>\n <Text size=\"sm\" style={{ opacity: 0.7 }}>john@example.com</Text>\n </View>\n\n <Divider style={{ marginVertical: 16 }} />\n\n {/* Menu Items */}\n <View style={{ gap: 4 }}>\n {menuItems.map((item) => (\n <DrawerItem\n key={item.route}\n icon={item.icon}\n label={item.label}\n active={currentRoute === item.route}\n onPress={() => navigate(item.route)}\n />\n ))}\n </View>\n\n {/* Footer */}\n <View style={{ marginTop: 'auto' }}>\n <Divider style={{ marginVertical: 16 }} />\n <DrawerItem\n icon=\"logout\"\n label=\"Sign Out\"\n onPress={() => {\n // Handle logout\n }}\n />\n </View>\n </View>\n );\n}\n\nfunction DrawerItem({\n icon,\n label,\n active,\n onPress\n}: {\n icon: string;\n label: string;\n active?: boolean;\n onPress: () => void;\n}) {\n return (\n <Pressable onPress={onPress}>\n <View style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 16,\n padding: 12,\n borderRadius: 8,\n backgroundColor: active ? 'rgba(0,0,0,0.1)' : 'transparent',\n }}>\n <Icon name={icon} size={24} intent={active ? 'primary' : undefined} />\n <Text intent={active ? 'primary' : undefined}>{label}</Text>\n </View>\n </Pressable>\n );\n}\n\n// Route configuration\nconst routes = {\n home: { path: '/', screen: HomeScreen },\n dashboard: { path: '/dashboard', screen: DashboardScreen },\n messages: { path: '/messages', screen: MessagesScreen },\n settings: { path: '/settings', screen: SettingsScreen },\n};\n\nexport function App() {\n return (\n <Router\n routes={routes}\n navigator=\"drawer\"\n drawerContent={DrawerContent}\n />\n );\n}`,\n explanation: `This drawer navigation includes:\n- Custom drawer content with user profile\n- Active state highlighting for current route\n- Grouped menu items with icons\n- Sign out button at the bottom\n- Works on both web (sidebar) and native (slide-out drawer)`,\n tips: [\n \"Add a hamburger menu button to open drawer on native\",\n \"Consider using drawer on tablet/desktop, tabs on mobile\",\n \"Add gesture support for swipe-to-open on native\",\n ],\n relatedRecipes: [\"tab-navigation\", \"stack-navigation\"],\n },\n\n \"protected-route\": {\n name: \"Protected Routes\",\n description: \"Redirect unauthenticated users to login with auth state management\",\n category: \"auth\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/navigation\", \"@idealyst/storage\", \"@idealyst/components\"],\n code: `import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { Router, useNavigator } from '@idealyst/navigation';\nimport { storage } from '@idealyst/storage';\nimport { View, Text, ActivityIndicator } from '@idealyst/components';\n\n// Auth Context\ninterface User {\n id: string;\n email: string;\n name: string;\n}\n\ninterface AuthContextType {\n user: User | null;\n isLoading: boolean;\n login: (email: string, password: string) => Promise<void>;\n logout: () => Promise<void>;\n}\n\nconst AuthContext = createContext<AuthContextType | null>(null);\n\nexport function AuthProvider({ children }: { children: React.ReactNode }) {\n const [user, setUser] = useState<User | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n checkAuth();\n }, []);\n\n const checkAuth = async () => {\n try {\n const token = await storage.get<string>('auth-token');\n if (token) {\n // Validate token and get user data\n const userData = await fetchUser(token);\n setUser(userData);\n }\n } catch (error) {\n // Token invalid or expired\n await storage.remove('auth-token');\n } finally {\n setIsLoading(false);\n }\n };\n\n const login = async (email: string, password: string) => {\n const { token, user } = await apiLogin(email, password);\n await storage.set('auth-token', token);\n setUser(user);\n };\n\n const logout = async () => {\n await storage.remove('auth-token');\n setUser(null);\n };\n\n return (\n <AuthContext.Provider value={{ user, isLoading, login, logout }}>\n {children}\n </AuthContext.Provider>\n );\n}\n\nexport function useAuth() {\n const context = useContext(AuthContext);\n if (!context) {\n throw new Error('useAuth must be used within AuthProvider');\n }\n return context;\n}\n\n// Protected Route Wrapper\nfunction ProtectedRoute({ children }: { children: React.ReactNode }) {\n const { user, isLoading } = useAuth();\n const { navigate } = useNavigator();\n\n useEffect(() => {\n if (!isLoading && !user) {\n navigate('login');\n }\n }, [user, isLoading]);\n\n if (isLoading) {\n return (\n <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n <ActivityIndicator size=\"lg\" />\n </View>\n );\n }\n\n if (!user) {\n return null; // Will redirect\n }\n\n return <>{children}</>;\n}\n\n// Route configuration\nconst routes = {\n login: {\n path: '/login',\n screen: LoginScreen,\n options: { public: true },\n },\n signup: {\n path: '/signup',\n screen: SignupScreen,\n options: { public: true },\n },\n home: {\n path: '/',\n screen: () => (\n <ProtectedRoute>\n <HomeScreen />\n </ProtectedRoute>\n ),\n },\n profile: {\n path: '/profile',\n screen: () => (\n <ProtectedRoute>\n <ProfileScreen />\n </ProtectedRoute>\n ),\n },\n settings: {\n path: '/settings',\n screen: () => (\n <ProtectedRoute>\n <SettingsScreen />\n </ProtectedRoute>\n ),\n },\n};\n\nexport function App() {\n return (\n <AuthProvider>\n <Router routes={routes} />\n </AuthProvider>\n );\n}`,\n explanation: `This protected routes setup includes:\n- AuthProvider context for app-wide auth state\n- Token persistence with @idealyst/storage\n- Loading state while checking authentication\n- Automatic redirect to login for unauthenticated users\n- ProtectedRoute wrapper component for easy use`,\n tips: [\n \"Add token refresh logic for long-lived sessions\",\n \"Consider deep link handling for login redirects\",\n \"Use @idealyst/oauth-client for OAuth flows\",\n ],\n relatedRecipes: [\"login-form\", \"oauth-flow\"],\n },\n\n \"data-list\": {\n name: \"Data List with Pull-to-Refresh\",\n description: \"Scrollable list with pull-to-refresh, loading states, and empty state\",\n category: \"data\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\"],\n code: `import React, { useState, useEffect, useCallback } from 'react';\nimport { FlatList, RefreshControl } from 'react-native';\nimport { View, Text, Card, ActivityIndicator, Button, Icon } from '@idealyst/components';\n\ninterface Item {\n id: string;\n title: string;\n description: string;\n createdAt: string;\n}\n\ninterface DataListProps {\n fetchItems: () => Promise<Item[]>;\n onItemPress?: (item: Item) => void;\n}\n\nexport function DataList({ fetchItems, onItemPress }: DataListProps) {\n const [items, setItems] = useState<Item[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const loadData = useCallback(async (showLoader = true) => {\n if (showLoader) setIsLoading(true);\n setError(null);\n\n try {\n const data = await fetchItems();\n setItems(data);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load data');\n } finally {\n setIsLoading(false);\n setIsRefreshing(false);\n }\n }, [fetchItems]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n const handleRefresh = () => {\n setIsRefreshing(true);\n loadData(false);\n };\n\n // Loading state\n if (isLoading) {\n return (\n <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n <ActivityIndicator size=\"lg\" />\n <Text style={{ marginTop: 16 }}>Loading...</Text>\n </View>\n );\n }\n\n // Error state\n if (error) {\n return (\n <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center', padding: 24 }}>\n <Icon name=\"alert-circle\" size={48} intent=\"danger\" />\n <Text variant=\"title\" style={{ marginTop: 16 }}>Something went wrong</Text>\n <Text style={{ textAlign: 'center', marginTop: 8, opacity: 0.7 }}>\n {error}\n </Text>\n <Button onPress={() => loadData()} style={{ marginTop: 24 }}>\n Try Again\n </Button>\n </View>\n );\n }\n\n // Empty state\n if (items.length === 0) {\n return (\n <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center', padding: 24 }}>\n <Icon name=\"inbox\" size={48} style={{ opacity: 0.5 }} />\n <Text variant=\"title\" style={{ marginTop: 16 }}>No items yet</Text>\n <Text style={{ textAlign: 'center', marginTop: 8, opacity: 0.7 }}>\n Pull down to refresh or check back later\n </Text>\n </View>\n );\n }\n\n return (\n <FlatList\n data={items}\n keyExtractor={(item) => item.id}\n contentContainerStyle={{ padding: 16, gap: 12 }}\n refreshControl={\n <RefreshControl\n refreshing={isRefreshing}\n onRefresh={handleRefresh}\n />\n }\n renderItem={({ item }) => (\n <Card\n onPress={() => onItemPress?.(item)}\n style={{ padding: 16 }}\n >\n <Text variant=\"title\">{item.title}</Text>\n <Text style={{ marginTop: 4, opacity: 0.7 }}>\n {item.description}\n </Text>\n <Text size=\"sm\" style={{ marginTop: 8, opacity: 0.5 }}>\n {new Date(item.createdAt).toLocaleDateString()}\n </Text>\n </Card>\n )}\n />\n );\n}\n\n// Usage example\nfunction MyScreen() {\n const fetchItems = async () => {\n const response = await fetch('/api/items');\n return response.json();\n };\n\n return (\n <DataList\n fetchItems={fetchItems}\n onItemPress={(item) => console.log('Selected:', item)}\n />\n );\n}`,\n explanation: `This data list component handles:\n- Initial loading state with spinner\n- Pull-to-refresh functionality\n- Error state with retry button\n- Empty state with helpful message\n- Efficient FlatList rendering for large lists`,\n tips: [\n \"Add pagination with onEndReached for large datasets\",\n \"Use skeleton loading for smoother perceived performance\",\n \"Consider optimistic updates for better UX\",\n ],\n relatedRecipes: [\"search-filter\", \"infinite-scroll\"],\n },\n\n \"search-filter\": {\n name: \"Search with Filters\",\n description: \"Search input with filter chips and debounced search\",\n category: \"data\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\"],\n code: `import React, { useState, useEffect, useMemo } from 'react';\nimport { ScrollView } from 'react-native';\nimport { View, Input, Chip, Text, Icon } from '@idealyst/components';\n\ninterface SearchFilterProps<T> {\n data: T[];\n searchKeys: (keyof T)[];\n filterOptions: { key: string; label: string; values: string[] }[];\n renderItem: (item: T) => React.ReactNode;\n placeholder?: string;\n}\n\n// Debounce hook\nfunction useDebounce<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nexport function SearchFilter<T extends Record<string, any>>({\n data,\n searchKeys,\n filterOptions,\n renderItem,\n placeholder = 'Search...',\n}: SearchFilterProps<T>) {\n const [searchQuery, setSearchQuery] = useState('');\n const [activeFilters, setActiveFilters] = useState<Record<string, string[]>>({});\n\n const debouncedQuery = useDebounce(searchQuery, 300);\n\n const toggleFilter = (key: string, value: string) => {\n setActiveFilters((prev) => {\n const current = prev[key] || [];\n const updated = current.includes(value)\n ? current.filter((v) => v !== value)\n : [...current, value];\n\n return { ...prev, [key]: updated };\n });\n };\n\n const clearFilters = () => {\n setActiveFilters({});\n setSearchQuery('');\n };\n\n const filteredData = useMemo(() => {\n let result = data;\n\n // Apply search\n if (debouncedQuery) {\n const query = debouncedQuery.toLowerCase();\n result = result.filter((item) =>\n searchKeys.some((key) =>\n String(item[key]).toLowerCase().includes(query)\n )\n );\n }\n\n // Apply filters\n for (const [key, values] of Object.entries(activeFilters)) {\n if (values.length > 0) {\n result = result.filter((item) => values.includes(String(item[key])));\n }\n }\n\n return result;\n }, [data, debouncedQuery, activeFilters, searchKeys]);\n\n const hasActiveFilters =\n searchQuery || Object.values(activeFilters).some((v) => v.length > 0);\n\n return (\n <View style={{ flex: 1 }}>\n {/* Search Input */}\n <View style={{ padding: 16 }}>\n <Input\n placeholder={placeholder}\n value={searchQuery}\n onChangeText={setSearchQuery}\n leftIcon=\"magnify\"\n rightIcon={searchQuery ? 'close' : undefined}\n onRightIconPress={() => setSearchQuery('')}\n />\n </View>\n\n {/* Filter Chips */}\n {filterOptions.map((filter) => (\n <View key={filter.key} style={{ paddingHorizontal: 16, marginBottom: 12 }}>\n <Text size=\"sm\" style={{ marginBottom: 8, opacity: 0.7 }}>\n {filter.label}\n </Text>\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <View style={{ flexDirection: 'row', gap: 8 }}>\n {filter.values.map((value) => (\n <Chip\n key={value}\n selected={(activeFilters[filter.key] || []).includes(value)}\n onPress={() => toggleFilter(filter.key, value)}\n >\n {value}\n </Chip>\n ))}\n </View>\n </ScrollView>\n </View>\n ))}\n\n {/* Results Header */}\n <View style={{\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingHorizontal: 16,\n paddingVertical: 8,\n }}>\n <Text size=\"sm\" style={{ opacity: 0.7 }}>\n {filteredData.length} result{filteredData.length !== 1 ? 's' : ''}\n </Text>\n {hasActiveFilters && (\n <Chip onPress={clearFilters} size=\"sm\">\n <Icon name=\"close\" size={14} /> Clear all\n </Chip>\n )}\n </View>\n\n {/* Results */}\n <ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, gap: 12 }}>\n {filteredData.length === 0 ? (\n <View style={{ alignItems: 'center', paddingVertical: 32 }}>\n <Icon name=\"magnify-close\" size={48} style={{ opacity: 0.5 }} />\n <Text style={{ marginTop: 16 }}>No results found</Text>\n </View>\n ) : (\n filteredData.map((item, index) => (\n <View key={index}>{renderItem(item)}</View>\n ))\n )}\n </ScrollView>\n </View>\n );\n}\n\n// Usage example\nconst products = [\n { id: '1', name: 'iPhone', category: 'Electronics', price: 999 },\n { id: '2', name: 'MacBook', category: 'Electronics', price: 1999 },\n { id: '3', name: 'Desk Chair', category: 'Furniture', price: 299 },\n];\n\nfunction ProductSearch() {\n return (\n <SearchFilter\n data={products}\n searchKeys={['name']}\n filterOptions={[\n { key: 'category', label: 'Category', values: ['Electronics', 'Furniture'] },\n ]}\n renderItem={(product) => (\n <Card>\n <Text>{product.name}</Text>\n <Text>\\${product.price}</Text>\n </Card>\n )}\n />\n );\n}`,\n explanation: `This search and filter component provides:\n- Debounced search input (300ms delay)\n- Multiple filter categories with chips\n- Combined search + filter logic\n- Clear all filters button\n- Result count display\n- Empty state handling`,\n tips: [\n \"Add URL query params sync for shareable filtered views\",\n \"Consider server-side filtering for large datasets\",\n \"Add sort options alongside filters\",\n ],\n relatedRecipes: [\"data-list\", \"infinite-scroll\"],\n },\n\n \"modal-confirmation\": {\n name: \"Confirmation Dialog\",\n description: \"Reusable confirmation modal for destructive actions\",\n category: \"layout\",\n difficulty: \"beginner\",\n packages: [\"@idealyst/components\"],\n code: `import React, { createContext, useContext, useState, useCallback } from 'react';\nimport { Dialog, Button, Text, View, Icon } from '@idealyst/components';\n\ninterface ConfirmOptions {\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n intent?: 'danger' | 'warning' | 'primary';\n icon?: string;\n}\n\ninterface ConfirmContextType {\n confirm: (options: ConfirmOptions) => Promise<boolean>;\n}\n\nconst ConfirmContext = createContext<ConfirmContextType | null>(null);\n\nexport function ConfirmProvider({ children }: { children: React.ReactNode }) {\n const [isOpen, setIsOpen] = useState(false);\n const [options, setOptions] = useState<ConfirmOptions | null>(null);\n const [resolveRef, setResolveRef] = useState<((value: boolean) => void) | null>(null);\n\n const confirm = useCallback((opts: ConfirmOptions): Promise<boolean> => {\n return new Promise((resolve) => {\n setOptions(opts);\n setResolveRef(() => resolve);\n setIsOpen(true);\n });\n }, []);\n\n const handleClose = (confirmed: boolean) => {\n setIsOpen(false);\n resolveRef?.(confirmed);\n // Clean up after animation\n setTimeout(() => {\n setOptions(null);\n setResolveRef(null);\n }, 300);\n };\n\n return (\n <ConfirmContext.Provider value={{ confirm }}>\n {children}\n\n <Dialog open={isOpen} onOpenChange={(open) => !open && handleClose(false)}>\n {options && (\n <View style={{ padding: 24, alignItems: 'center' }}>\n {options.icon && (\n <Icon\n name={options.icon}\n size={48}\n intent={options.intent || 'danger'}\n style={{ marginBottom: 16 }}\n />\n )}\n\n <Text variant=\"headline\" style={{ textAlign: 'center' }}>\n {options.title}\n </Text>\n\n <Text style={{ textAlign: 'center', marginTop: 8, opacity: 0.7 }}>\n {options.message}\n </Text>\n\n <View style={{\n flexDirection: 'row',\n gap: 12,\n marginTop: 24,\n width: '100%',\n }}>\n <Button\n type=\"outlined\"\n onPress={() => handleClose(false)}\n style={{ flex: 1 }}\n >\n {options.cancelLabel || 'Cancel'}\n </Button>\n\n <Button\n intent={options.intent || 'danger'}\n onPress={() => handleClose(true)}\n style={{ flex: 1 }}\n >\n {options.confirmLabel || 'Confirm'}\n </Button>\n </View>\n </View>\n )}\n </Dialog>\n </ConfirmContext.Provider>\n );\n}\n\nexport function useConfirm() {\n const context = useContext(ConfirmContext);\n if (!context) {\n throw new Error('useConfirm must be used within ConfirmProvider');\n }\n return context.confirm;\n}\n\n// Usage example\nfunction DeleteButton({ onDelete }: { onDelete: () => void }) {\n const confirm = useConfirm();\n\n const handleDelete = async () => {\n const confirmed = await confirm({\n title: 'Delete Item?',\n message: 'This action cannot be undone. Are you sure you want to delete this item?',\n confirmLabel: 'Delete',\n cancelLabel: 'Keep',\n intent: 'danger',\n icon: 'delete',\n });\n\n if (confirmed) {\n onDelete();\n }\n };\n\n return (\n <Button intent=\"danger\" type=\"outlined\" onPress={handleDelete}>\n Delete\n </Button>\n );\n}\n\n// Wrap your app\nfunction App() {\n return (\n <ConfirmProvider>\n <MyApp />\n </ConfirmProvider>\n );\n}`,\n explanation: `This confirmation dialog system provides:\n- Async/await API for easy use: \\`if (await confirm({...})) { ... }\\`\n- Customizable title, message, buttons, and icon\n- Intent-based styling (danger, warning, primary)\n- Promise-based resolution\n- Clean context-based architecture`,\n tips: [\n \"Use danger intent for destructive actions\",\n \"Keep messages concise and actionable\",\n \"Consider adding a 'Don't ask again' checkbox for repeated actions\",\n ],\n relatedRecipes: [\"toast-notifications\"],\n },\n\n \"toast-notifications\": {\n name: \"Toast Notifications\",\n description: \"Temporary notification messages that auto-dismiss\",\n category: \"layout\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\"],\n code: `import React, { createContext, useContext, useState, useCallback } from 'react';\nimport { Animated, Pressable } from 'react-native';\nimport { View, Text, Icon } from '@idealyst/components';\n\ntype ToastType = 'success' | 'error' | 'warning' | 'info';\n\ninterface Toast {\n id: string;\n type: ToastType;\n message: string;\n duration?: number;\n}\n\ninterface ToastContextType {\n showToast: (type: ToastType, message: string, duration?: number) => void;\n success: (message: string) => void;\n error: (message: string) => void;\n warning: (message: string) => void;\n info: (message: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextType | null>(null);\n\nconst toastConfig: Record<ToastType, { icon: string; intent: string }> = {\n success: { icon: 'check-circle', intent: 'success' },\n error: { icon: 'alert-circle', intent: 'danger' },\n warning: { icon: 'alert', intent: 'warning' },\n info: { icon: 'information', intent: 'primary' },\n};\n\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\n const [toasts, setToasts] = useState<Toast[]>([]);\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const showToast = useCallback((type: ToastType, message: string, duration = 3000) => {\n const id = Date.now().toString();\n const toast: Toast = { id, type, message, duration };\n\n setToasts((prev) => [...prev, toast]);\n\n if (duration > 0) {\n setTimeout(() => removeToast(id), duration);\n }\n }, [removeToast]);\n\n const contextValue: ToastContextType = {\n showToast,\n success: (msg) => showToast('success', msg),\n error: (msg) => showToast('error', msg),\n warning: (msg) => showToast('warning', msg),\n info: (msg) => showToast('info', msg),\n };\n\n return (\n <ToastContext.Provider value={contextValue}>\n {children}\n\n {/* Toast Container */}\n <View\n style={{\n position: 'absolute',\n top: 60,\n left: 16,\n right: 16,\n zIndex: 9999,\n gap: 8,\n }}\n pointerEvents=\"box-none\"\n >\n {toasts.map((toast) => (\n <ToastItem\n key={toast.id}\n toast={toast}\n onDismiss={() => removeToast(toast.id)}\n />\n ))}\n </View>\n </ToastContext.Provider>\n );\n}\n\nfunction ToastItem({ toast, onDismiss }: { toast: Toast; onDismiss: () => void }) {\n const fadeAnim = React.useRef(new Animated.Value(0)).current;\n const config = toastConfig[toast.type];\n\n React.useEffect(() => {\n Animated.timing(fadeAnim, {\n toValue: 1,\n duration: 200,\n useNativeDriver: true,\n }).start();\n }, []);\n\n return (\n <Animated.View style={{ opacity: fadeAnim, transform: [{ translateY: fadeAnim.interpolate({\n inputRange: [0, 1],\n outputRange: [-20, 0],\n }) }] }}>\n <Pressable onPress={onDismiss}>\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n padding: 16,\n borderRadius: 8,\n backgroundColor: '#1a1a1a',\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.25,\n shadowRadius: 4,\n elevation: 5,\n }}\n >\n <Icon name={config.icon} size={20} intent={config.intent as any} />\n <Text style={{ flex: 1, color: '#fff' }}>{toast.message}</Text>\n <Icon name=\"close\" size={16} style={{ opacity: 0.5 }} />\n </View>\n </Pressable>\n </Animated.View>\n );\n}\n\nexport function useToast() {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within ToastProvider');\n }\n return context;\n}\n\n// Usage example\nfunction SaveButton() {\n const toast = useToast();\n const [isSaving, setIsSaving] = useState(false);\n\n const handleSave = async () => {\n setIsSaving(true);\n try {\n await saveData();\n toast.success('Changes saved successfully!');\n } catch (error) {\n toast.error('Failed to save changes. Please try again.');\n } finally {\n setIsSaving(false);\n }\n };\n\n return (\n <Button onPress={handleSave} loading={isSaving}>\n Save\n </Button>\n );\n}\n\n// Wrap your app\nfunction App() {\n return (\n <ToastProvider>\n <MyApp />\n </ToastProvider>\n );\n}`,\n explanation: `This toast notification system provides:\n- Simple API: \\`toast.success('Message')\\`\n- Four types: success, error, warning, info\n- Auto-dismiss with configurable duration\n- Tap to dismiss\n- Animated entrance\n- Stacking multiple toasts`,\n tips: [\n \"Use success for completed actions, error for failures\",\n \"Keep messages under 50 characters for readability\",\n \"Don't show toasts for every action - use sparingly\",\n ],\n relatedRecipes: [\"modal-confirmation\"],\n },\n\n \"form-with-validation\": {\n name: \"Form with Validation\",\n description: \"Multi-field form with real-time validation and error handling\",\n category: \"forms\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\"],\n code: `import React, { useState } from 'react';\nimport { ScrollView } from 'react-native';\nimport {\n View, Text, Input, Select, Checkbox, Button, Card\n} from '@idealyst/components';\n\n// Validation rules\ntype ValidationRule<T> = {\n validate: (value: T, formData: FormData) => boolean;\n message: string;\n};\n\ninterface FormData {\n name: string;\n email: string;\n phone: string;\n country: string;\n message: string;\n subscribe: boolean;\n}\n\nconst validationRules: Partial<Record<keyof FormData, ValidationRule<any>[]>> = {\n name: [\n { validate: (v) => v.trim().length > 0, message: 'Name is required' },\n { validate: (v) => v.trim().length >= 2, message: 'Name must be at least 2 characters' },\n ],\n email: [\n { validate: (v) => v.length > 0, message: 'Email is required' },\n { validate: (v) => /^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$/.test(v), message: 'Invalid email format' },\n ],\n phone: [\n { validate: (v) => !v || /^[+]?[0-9\\\\s-]{10,}$/.test(v), message: 'Invalid phone number' },\n ],\n country: [\n { validate: (v) => v.length > 0, message: 'Please select a country' },\n ],\n message: [\n { validate: (v) => v.length > 0, message: 'Message is required' },\n { validate: (v) => v.length >= 10, message: 'Message must be at least 10 characters' },\n ],\n};\n\nexport function ContactForm({ onSubmit }: { onSubmit: (data: FormData) => Promise<void> }) {\n const [formData, setFormData] = useState<FormData>({\n name: '',\n email: '',\n phone: '',\n country: '',\n message: '',\n subscribe: false,\n });\n\n const [errors, setErrors] = useState<Partial<Record<keyof FormData, string>>>({});\n const [touched, setTouched] = useState<Partial<Record<keyof FormData, boolean>>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const validateField = (field: keyof FormData, value: any): string | undefined => {\n const rules = validationRules[field];\n if (!rules) return undefined;\n\n for (const rule of rules) {\n if (!rule.validate(value, formData)) {\n return rule.message;\n }\n }\n return undefined;\n };\n\n const validateAll = (): boolean => {\n const newErrors: typeof errors = {};\n let isValid = true;\n\n for (const field of Object.keys(validationRules) as (keyof FormData)[]) {\n const error = validateField(field, formData[field]);\n if (error) {\n newErrors[field] = error;\n isValid = false;\n }\n }\n\n setErrors(newErrors);\n return isValid;\n };\n\n const handleChange = (field: keyof FormData, value: any) => {\n setFormData((prev) => ({ ...prev, [field]: value }));\n\n // Validate on change if field was touched\n if (touched[field]) {\n const error = validateField(field, value);\n setErrors((prev) => ({ ...prev, [field]: error }));\n }\n };\n\n const handleBlur = (field: keyof FormData) => {\n setTouched((prev) => ({ ...prev, [field]: true }));\n const error = validateField(field, formData[field]);\n setErrors((prev) => ({ ...prev, [field]: error }));\n };\n\n const handleSubmit = async () => {\n // Mark all fields as touched\n const allTouched = Object.keys(formData).reduce(\n (acc, key) => ({ ...acc, [key]: true }),\n {}\n );\n setTouched(allTouched);\n\n if (!validateAll()) return;\n\n setIsSubmitting(true);\n try {\n await onSubmit(formData);\n } catch (error) {\n setErrors({\n submit: error instanceof Error ? error.message : 'Submission failed'\n } as any);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n return (\n <ScrollView>\n <Card padding=\"lg\">\n <Text variant=\"headline\" style={{ marginBottom: 24 }}>\n Contact Us\n </Text>\n\n <View style={{ gap: 16 }}>\n <Input\n label=\"Name *\"\n placeholder=\"Your full name\"\n value={formData.name}\n onChangeText={(v) => handleChange('name', v)}\n onBlur={() => handleBlur('name')}\n error={touched.name ? errors.name : undefined}\n />\n\n <Input\n label=\"Email *\"\n placeholder=\"you@example.com\"\n value={formData.email}\n onChangeText={(v) => handleChange('email', v)}\n onBlur={() => handleBlur('email')}\n keyboardType=\"email-address\"\n autoCapitalize=\"none\"\n error={touched.email ? errors.email : undefined}\n />\n\n <Input\n label=\"Phone\"\n placeholder=\"+1 234 567 8900\"\n value={formData.phone}\n onChangeText={(v) => handleChange('phone', v)}\n onBlur={() => handleBlur('phone')}\n keyboardType=\"phone-pad\"\n error={touched.phone ? errors.phone : undefined}\n />\n\n <Select\n label=\"Country *\"\n placeholder=\"Select your country\"\n value={formData.country}\n onValueChange={(v) => handleChange('country', v)}\n options={[\n { label: 'United States', value: 'us' },\n { label: 'United Kingdom', value: 'uk' },\n { label: 'Canada', value: 'ca' },\n { label: 'Australia', value: 'au' },\n { label: 'Other', value: 'other' },\n ]}\n error={touched.country ? errors.country : undefined}\n />\n\n <Input\n label=\"Message *\"\n placeholder=\"How can we help you?\"\n value={formData.message}\n onChangeText={(v) => handleChange('message', v)}\n onBlur={() => handleBlur('message')}\n multiline\n numberOfLines={4}\n error={touched.message ? errors.message : undefined}\n />\n\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>\n <Checkbox\n checked={formData.subscribe}\n onCheckedChange={(v) => handleChange('subscribe', v)}\n />\n <Text>Subscribe to our newsletter</Text>\n </View>\n\n <Button\n onPress={handleSubmit}\n loading={isSubmitting}\n disabled={isSubmitting}\n style={{ marginTop: 8 }}\n >\n Send Message\n </Button>\n </View>\n </Card>\n </ScrollView>\n );\n}`,\n explanation: `This form demonstrates:\n- Field-level validation with custom rules\n- Validation on blur (after first touch)\n- Real-time validation after field is touched\n- Full form validation on submit\n- Error display with touched state tracking\n- Loading state during submission`,\n tips: [\n \"Consider using a form library like react-hook-form for complex forms\",\n \"Add success state/message after submission\",\n \"Implement autosave for long forms\",\n ],\n relatedRecipes: [\"login-form\", \"signup-form\"],\n },\n\n \"image-upload\": {\n name: \"Image Upload\",\n description: \"Image picker with preview, crop option, and upload progress\",\n category: \"media\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\", \"@idealyst/camera\"],\n code: `import React, { useState } from 'react';\nimport { Image } from 'react-native';\nimport { View, Text, Button, Card, Icon, Progress } from '@idealyst/components';\n// Note: You'll need expo-image-picker or react-native-image-picker\n\ninterface ImageUploadProps {\n onUpload: (uri: string) => Promise<string>; // Returns uploaded URL\n currentImage?: string;\n}\n\nexport function ImageUpload({ onUpload, currentImage }: ImageUploadProps) {\n const [imageUri, setImageUri] = useState<string | null>(currentImage || null);\n const [isUploading, setIsUploading] = useState(false);\n const [uploadProgress, setUploadProgress] = useState(0);\n const [error, setError] = useState<string | null>(null);\n\n const pickImage = async () => {\n try {\n // Using expo-image-picker as example\n const result = await ImagePicker.launchImageLibraryAsync({\n mediaTypes: ImagePicker.MediaTypeOptions.Images,\n allowsEditing: true,\n aspect: [1, 1],\n quality: 0.8,\n });\n\n if (!result.canceled && result.assets[0]) {\n setImageUri(result.assets[0].uri);\n setError(null);\n }\n } catch (err) {\n setError('Failed to pick image');\n }\n };\n\n const takePhoto = async () => {\n try {\n const result = await ImagePicker.launchCameraAsync({\n allowsEditing: true,\n aspect: [1, 1],\n quality: 0.8,\n });\n\n if (!result.canceled && result.assets[0]) {\n setImageUri(result.assets[0].uri);\n setError(null);\n }\n } catch (err) {\n setError('Failed to take photo');\n }\n };\n\n const handleUpload = async () => {\n if (!imageUri) return;\n\n setIsUploading(true);\n setUploadProgress(0);\n setError(null);\n\n try {\n // Simulate upload progress\n const progressInterval = setInterval(() => {\n setUploadProgress((prev) => Math.min(prev + 10, 90));\n }, 200);\n\n const uploadedUrl = await onUpload(imageUri);\n\n clearInterval(progressInterval);\n setUploadProgress(100);\n setImageUri(uploadedUrl);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Upload failed');\n } finally {\n setIsUploading(false);\n }\n };\n\n const removeImage = () => {\n setImageUri(null);\n setUploadProgress(0);\n setError(null);\n };\n\n return (\n <Card padding=\"lg\">\n <Text variant=\"title\" style={{ marginBottom: 16 }}>\n Profile Photo\n </Text>\n\n {/* Image Preview */}\n <View style={{ alignItems: 'center', marginBottom: 16 }}>\n {imageUri ? (\n <View style={{ position: 'relative' }}>\n <Image\n source={{ uri: imageUri }}\n style={{\n width: 150,\n height: 150,\n borderRadius: 75,\n }}\n />\n <Pressable\n onPress={removeImage}\n style={{\n position: 'absolute',\n top: 0,\n right: 0,\n backgroundColor: 'rgba(0,0,0,0.6)',\n borderRadius: 12,\n padding: 4,\n }}\n >\n <Icon name=\"close\" size={16} color=\"#fff\" />\n </Pressable>\n </View>\n ) : (\n <View\n style={{\n width: 150,\n height: 150,\n borderRadius: 75,\n backgroundColor: 'rgba(0,0,0,0.1)',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <Icon name=\"account\" size={64} style={{ opacity: 0.3 }} />\n </View>\n )}\n </View>\n\n {/* Upload Progress */}\n {isUploading && (\n <View style={{ marginBottom: 16 }}>\n <Progress value={uploadProgress} />\n <Text size=\"sm\" style={{ textAlign: 'center', marginTop: 4 }}>\n Uploading... {uploadProgress}%\n </Text>\n </View>\n )}\n\n {/* Error Message */}\n {error && (\n <Text intent=\"danger\" style={{ textAlign: 'center', marginBottom: 16 }}>\n {error}\n </Text>\n )}\n\n {/* Action Buttons */}\n <View style={{ gap: 12 }}>\n <View style={{ flexDirection: 'row', gap: 12 }}>\n <Button\n type=\"outlined\"\n onPress={pickImage}\n disabled={isUploading}\n style={{ flex: 1 }}\n >\n <Icon name=\"image\" size={18} /> Gallery\n </Button>\n <Button\n type=\"outlined\"\n onPress={takePhoto}\n disabled={isUploading}\n style={{ flex: 1 }}\n >\n <Icon name=\"camera\" size={18} /> Camera\n </Button>\n </View>\n\n {imageUri && !imageUri.startsWith('http') && (\n <Button\n onPress={handleUpload}\n loading={isUploading}\n disabled={isUploading}\n >\n Upload Photo\n </Button>\n )}\n </View>\n </Card>\n );\n}\n\n// Usage\nfunction ProfileScreen() {\n const uploadImage = async (uri: string): Promise<string> => {\n // Upload to your server/cloud storage\n const formData = new FormData();\n formData.append('image', {\n uri,\n type: 'image/jpeg',\n name: 'photo.jpg',\n } as any);\n\n const response = await fetch('/api/upload', {\n method: 'POST',\n body: formData,\n });\n\n const { url } = await response.json();\n return url;\n };\n\n return (\n <ImageUpload\n currentImage=\"https://example.com/current-avatar.jpg\"\n onUpload={uploadImage}\n />\n );\n}`,\n explanation: `This image upload component provides:\n- Pick from gallery or take photo\n- Image preview with circular crop\n- Upload progress indicator\n- Error handling\n- Remove/replace image option\n- Works with any backend upload API`,\n tips: [\n \"Add image compression before upload to reduce size\",\n \"Consider using a CDN for image hosting\",\n \"Implement retry logic for failed uploads\",\n ],\n relatedRecipes: [\"form-with-validation\"],\n },\n\n \"web-stack-layout\": {\n name: \"Web Stack Layout\",\n description: \"Stack layout for web that mimics native stack navigator with header, back button, and title\",\n category: \"navigation\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\", \"@idealyst/navigation\"],\n code: `import React from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { View, Text, Pressable, Icon } from '@idealyst/components';\nimport { useNavigator } from '@idealyst/navigation';\nimport type { StackLayoutProps, NavigatorOptions } from '@idealyst/navigation';\n\n/**\n * Web Stack Layout - mimics native stack navigator header\n *\n * Features:\n * - Header with title (from options.headerTitle)\n * - Automatic back button when canGoBack() is true\n * - Left and right header slots\n * - Hide header with headerShown: false\n */\nexport function WebStackLayout({ options }: StackLayoutProps) {\n const { canGoBack, goBack } = useNavigator();\n\n const showHeader = options?.headerShown !== false;\n const showBackButton = options?.headerBackVisible !== false && canGoBack();\n\n return (\n <View style={{ flex: 1 }}>\n {/* Header bar - like native stack header */}\n {showHeader && (\n <View style={{\n height: 56,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 8,\n backgroundColor: '#ffffff',\n borderBottomWidth: 1,\n borderBottomColor: '#e0e0e0',\n // Web shadow\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n }}>\n {/* Back button */}\n {showBackButton && (\n <Pressable\n onPress={goBack}\n style={{\n width: 40,\n height: 40,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 20,\n }}\n >\n <Icon name=\"arrow-left\" size={24} />\n </Pressable>\n )}\n\n {/* Left header slot */}\n {options?.headerLeft && (\n <View style={{ marginLeft: 8 }}>\n {renderHeaderComponent(options.headerLeft)}\n </View>\n )}\n\n {/* Title */}\n <View style={{ flex: 1, marginHorizontal: 8 }}>\n {typeof options?.headerTitle === 'string' ? (\n <Text variant=\"title\" numberOfLines={1}>\n {options.headerTitle}\n </Text>\n ) : options?.headerTitle ? (\n renderHeaderComponent(options.headerTitle)\n ) : null}\n </View>\n\n {/* Right header slot */}\n {options?.headerRight && (\n <View>\n {renderHeaderComponent(options.headerRight)}\n </View>\n )}\n </View>\n )}\n\n {/* Content area - Outlet renders child routes */}\n <View style={{ flex: 1 }}>\n <Outlet />\n </View>\n </View>\n );\n}\n\n// Helper to render header components (can be React element or function)\nfunction renderHeaderComponent(\n component: React.ComponentType | React.ReactElement | undefined\n) {\n if (!component) return null;\n if (typeof component === 'function') {\n const Component = component;\n return <Component />;\n }\n return component;\n}\n\n// Usage in router config:\n// {\n// path: \"/\",\n// type: 'navigator',\n// layout: 'stack',\n// layoutComponent: WebStackLayout,\n// options: {\n// headerTitle: \"My App\",\n// headerRight: <UserMenu />,\n// },\n// routes: [...]\n// }`,\n explanation: `This layout mimics the native stack navigator header:\n\n**What it provides:**\n- Fixed header bar at the top (56px height like native)\n- Automatic back button that appears when canGoBack() returns true\n- headerTitle renders as text or custom component\n- headerLeft and headerRight slots for custom actions\n- headerShown: false hides the entire header\n- headerBackVisible: false hides just the back button\n\n**Key insight:** On web, canGoBack() checks if there's a parent route in the hierarchy, not browser history. This matches the native behavior where back goes \"up\" the navigation stack.`,\n tips: [\n \"Use options.headerShown: false for fullscreen content like media players\",\n \"The back button appears automatically - no need to manage visibility\",\n \"headerRight is great for action buttons, user menus, or search\",\n \"Wrap your entire app router with this for consistent headers\",\n ],\n relatedRecipes: [\"web-tab-layout\", \"web-drawer-layout\", \"responsive-navigation\"],\n },\n\n \"web-tab-layout\": {\n name: \"Web Tab Layout\",\n description: \"Tab layout for web that mimics native bottom tab navigator with icons, labels, and badges\",\n category: \"navigation\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\", \"@idealyst/navigation\"],\n code: `import React from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { View, Text, Pressable, Icon, Badge } from '@idealyst/components';\nimport { useNavigator } from '@idealyst/navigation';\nimport type { TabLayoutProps } from '@idealyst/navigation';\n\n/**\n * Web Tab Layout - mimics native bottom tab navigator\n *\n * Features:\n * - Bottom tab bar (like iOS/Android)\n * - Icons from tabBarIcon option\n * - Labels from tabBarLabel option\n * - Badge counts from tabBarBadge option\n * - Active state highlighting\n */\nexport function WebTabLayout({ routes, currentPath }: TabLayoutProps) {\n const { navigate } = useNavigator();\n\n return (\n <View style={{ flex: 1 }}>\n {/* Content area - takes remaining space */}\n <View style={{ flex: 1 }}>\n <Outlet />\n </View>\n\n {/* Bottom tab bar */}\n <View style={{\n height: 56,\n flexDirection: 'row',\n backgroundColor: '#ffffff',\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n // Safe area padding for mobile web\n paddingBottom: 'env(safe-area-inset-bottom, 0px)',\n }}>\n {routes.map((route) => {\n // Check if this tab is active\n const isActive = currentPath === route.fullPath ||\n currentPath.startsWith(route.fullPath + '/');\n\n const tabOptions = route.options;\n const activeColor = '#007AFF';\n const inactiveColor = '#8E8E93';\n\n return (\n <Pressable\n key={route.fullPath}\n onPress={() => navigate({ path: route.fullPath })}\n style={{\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingVertical: 4,\n }}\n >\n {/* Icon container with badge */}\n <View style={{ position: 'relative' }}>\n {tabOptions?.tabBarIcon?.({\n focused: isActive,\n color: isActive ? activeColor : inactiveColor,\n size: 24,\n })}\n\n {/* Badge */}\n {tabOptions?.tabBarBadge != null && (\n <View style={{\n position: 'absolute',\n top: -4,\n right: -12,\n minWidth: 18,\n height: 18,\n borderRadius: 9,\n backgroundColor: '#FF3B30',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 4,\n }}>\n <Text style={{ color: '#fff', fontSize: 10, fontWeight: '600' }}>\n {typeof tabOptions.tabBarBadge === 'number' && tabOptions.tabBarBadge > 99\n ? '99+'\n : tabOptions.tabBarBadge}\n </Text>\n </View>\n )}\n </View>\n\n {/* Label */}\n {tabOptions?.tabBarLabel && (\n <Text\n size=\"xs\"\n style={{\n marginTop: 2,\n color: isActive ? activeColor : inactiveColor,\n fontWeight: isActive ? '600' : '400',\n }}\n >\n {tabOptions.tabBarLabel}\n </Text>\n )}\n </Pressable>\n );\n })}\n </View>\n </View>\n );\n}\n\n// Usage in router config:\n// {\n// path: \"/main\",\n// type: 'navigator',\n// layout: 'tab',\n// layoutComponent: WebTabLayout,\n// routes: [\n// {\n// path: \"home\",\n// type: 'screen',\n// component: HomeScreen,\n// options: {\n// tabBarLabel: \"Home\",\n// tabBarIcon: ({ focused, color }) => (\n// <Icon name={focused ? \"home\" : \"home-outline\"} color={color} />\n// ),\n// },\n// },\n// {\n// path: \"notifications\",\n// type: 'screen',\n// component: NotificationsScreen,\n// options: {\n// tabBarLabel: \"Notifications\",\n// tabBarIcon: ({ color }) => <Icon name=\"bell\" color={color} />,\n// tabBarBadge: 5,\n// },\n// },\n// ],\n// }`,\n explanation: `This layout mimics the native bottom tab bar:\n\n**What routes provide:**\n- \\`route.fullPath\\` - The complete path for navigation\n- \\`route.options.tabBarIcon\\` - Function that receives { focused, color, size }\n- \\`route.options.tabBarLabel\\` - Text label for the tab\n- \\`route.options.tabBarBadge\\` - Badge count (number or string)\n\n**Active state detection:**\n\\`currentPath === route.fullPath\\` - Exact match for active state\nOr use \\`startsWith\\` for nested routes under a tab\n\n**Platform parity:**\n- 56px tab bar height matches iOS/Android\n- Icon + label layout matches native patterns\n- Badge styling matches iOS notification badges\n- Safe area inset for mobile web browsers`,\n tips: [\n \"Use outlined/filled icon variants for focused state (home-outline vs home)\",\n \"Keep tab count to 3-5 for best usability\",\n \"Badge counts over 99 should show '99+' to fit\",\n \"Consider hiding the tab bar on detail screens with conditional rendering\",\n ],\n relatedRecipes: [\"web-stack-layout\", \"tab-navigation\", \"responsive-navigation\"],\n },\n\n \"web-drawer-layout\": {\n name: \"Web Drawer/Sidebar Layout\",\n description: \"Sidebar layout for web that provides persistent navigation menu with collapsible support\",\n category: \"navigation\",\n difficulty: \"intermediate\",\n packages: [\"@idealyst/components\", \"@idealyst/navigation\"],\n code: `import React, { useState } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { View, Text, Pressable, Icon, Avatar } from '@idealyst/components';\nimport { useNavigator } from '@idealyst/navigation';\nimport type { StackLayoutProps } from '@idealyst/navigation';\n\ninterface DrawerLayoutOptions {\n expandedWidth?: number;\n collapsedWidth?: number;\n initiallyCollapsed?: boolean;\n}\n\n/**\n * Web Drawer Layout - persistent sidebar navigation\n *\n * Features:\n * - Collapsible sidebar with smooth animation\n * - Active route highlighting\n * - Icon + label navigation items\n * - User profile section\n * - Works with any navigator layout type\n */\nexport function WebDrawerLayout({\n routes,\n currentPath,\n options,\n}: StackLayoutProps & { drawerOptions?: DrawerLayoutOptions }) {\n const { navigate } = useNavigator();\n const [isCollapsed, setIsCollapsed] = useState(false);\n\n const expandedWidth = 240;\n const collapsedWidth = 64;\n const sidebarWidth = isCollapsed ? collapsedWidth : expandedWidth;\n\n return (\n <View style={{ flex: 1, flexDirection: 'row' }}>\n {/* Sidebar */}\n <View style={{\n width: sidebarWidth,\n backgroundColor: '#1a1a2e',\n transition: 'width 0.2s ease',\n overflow: 'hidden',\n }}>\n {/* Logo / App Header */}\n <View style={{\n height: 64,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 16,\n borderBottomWidth: 1,\n borderBottomColor: 'rgba(255,255,255,0.1)',\n }}>\n <Icon name=\"rocket\" size={28} color=\"#fff\" />\n {!isCollapsed && (\n <Text\n variant=\"title\"\n style={{ color: '#fff', marginLeft: 12 }}\n >\n {options?.headerTitle || 'My App'}\n </Text>\n )}\n </View>\n\n {/* Navigation Items */}\n <View style={{ flex: 1, paddingVertical: 8 }}>\n {routes.map((route) => {\n const isActive = currentPath === route.fullPath ||\n currentPath.startsWith(route.fullPath + '/');\n\n return (\n <Pressable\n key={route.fullPath}\n onPress={() => navigate({ path: route.fullPath })}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 12,\n paddingHorizontal: 16,\n marginHorizontal: 8,\n marginVertical: 2,\n borderRadius: 8,\n backgroundColor: isActive ? 'rgba(255,255,255,0.15)' : 'transparent',\n }}\n >\n <Icon\n name={route.options?.icon || 'circle'}\n size={24}\n color={isActive ? '#fff' : 'rgba(255,255,255,0.6)'}\n />\n {!isCollapsed && (\n <Text\n style={{\n marginLeft: 12,\n color: isActive ? '#fff' : 'rgba(255,255,255,0.6)',\n fontWeight: isActive ? '600' : '400',\n }}\n >\n {route.options?.title || route.path}\n </Text>\n )}\n </Pressable>\n );\n })}\n </View>\n\n {/* User Section (optional) */}\n <View style={{\n padding: 16,\n borderTopWidth: 1,\n borderTopColor: 'rgba(255,255,255,0.1)',\n }}>\n <Pressable\n style={{ flexDirection: 'row', alignItems: 'center' }}\n onPress={() => navigate({ path: '/profile' })}\n >\n <Avatar size=\"sm\" />\n {!isCollapsed && (\n <View style={{ marginLeft: 12 }}>\n <Text style={{ color: '#fff', fontWeight: '500' }}>John Doe</Text>\n <Text size=\"xs\" style={{ color: 'rgba(255,255,255,0.5)' }}>\n View profile\n </Text>\n </View>\n )}\n </Pressable>\n </View>\n\n {/* Collapse Toggle */}\n <Pressable\n onPress={() => setIsCollapsed(!isCollapsed)}\n style={{\n padding: 16,\n borderTopWidth: 1,\n borderTopColor: 'rgba(255,255,255,0.1)',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: isCollapsed ? 'center' : 'flex-start',\n }}\n >\n <Icon\n name={isCollapsed ? 'chevron-right' : 'chevron-left'}\n size={20}\n color=\"rgba(255,255,255,0.6)\"\n />\n {!isCollapsed && (\n <Text style={{ marginLeft: 12, color: 'rgba(255,255,255,0.6)' }}>\n Collapse\n </Text>\n )}\n </Pressable>\n </View>\n\n {/* Main Content */}\n <View style={{ flex: 1, backgroundColor: '#f5f5f5' }}>\n <Outlet />\n </View>\n </View>\n );\n}\n\n// Usage:\n// {\n// path: \"/\",\n// type: 'navigator',\n// layout: 'drawer', // or 'stack' - layout type doesn't matter for web\n// layoutComponent: WebDrawerLayout,\n// options: { headerTitle: \"Dashboard\" },\n// routes: [\n// { path: \"home\", component: Home, options: { title: \"Home\", icon: \"home\" } },\n// { path: \"users\", component: Users, options: { title: \"Users\", icon: \"account-group\" } },\n// { path: \"settings\", component: Settings, options: { title: \"Settings\", icon: \"cog\" } },\n// ],\n// }`,\n explanation: `This sidebar layout is ideal for dashboards and admin panels:\n\n**Route options used:**\n- \\`route.options.title\\` - Menu item label\n- \\`route.options.icon\\` - Material Design Icon name\n\n**Features:**\n- Collapsible sidebar with smooth width transition\n- Active state with background highlight\n- User profile section at bottom\n- Collapse toggle button\n- Dark theme (easily customizable)\n\n**Why this differs from mobile:**\nOn native, a drawer slides over content. On web, a persistent sidebar is more common and user-friendly. This layout provides the web-appropriate pattern while using the same route configuration.`,\n tips: [\n \"Add tooltips on collapsed icons using the title attribute\",\n \"Consider responsive behavior - hide sidebar on mobile, show bottom tabs instead\",\n \"Use the icon option on routes to define sidebar icons\",\n \"The collapse state could be persisted to localStorage\",\n ],\n relatedRecipes: [\"web-stack-layout\", \"responsive-navigation\", \"drawer-navigation\"],\n },\n\n \"responsive-navigation\": {\n name: \"Responsive Navigation Layout\",\n description: \"Layout that switches between bottom tabs on mobile and sidebar on desktop\",\n category: \"navigation\",\n difficulty: \"advanced\",\n packages: [\"@idealyst/components\", \"@idealyst/navigation\"],\n code: `import React, { useState, useEffect } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { View, Text, Pressable, Icon } from '@idealyst/components';\nimport { useNavigator } from '@idealyst/navigation';\nimport type { StackLayoutProps } from '@idealyst/navigation';\n\n// Custom hook for responsive breakpoints\nfunction useResponsive() {\n const [width, setWidth] = useState(\n typeof window !== 'undefined' ? window.innerWidth : 1024\n );\n\n useEffect(() => {\n const handleResize = () => setWidth(window.innerWidth);\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return {\n isMobile: width < 768,\n isTablet: width >= 768 && width < 1024,\n isDesktop: width >= 1024,\n width,\n };\n}\n\n/**\n * Responsive Navigation Layout\n *\n * - Mobile (<768px): Bottom tab bar\n * - Desktop (>=768px): Sidebar navigation\n *\n * Uses the same route configuration for both!\n */\nexport function ResponsiveNavLayout({ routes, currentPath, options }: StackLayoutProps) {\n const { isMobile } = useResponsive();\n\n // Same routes power both layouts\n return isMobile ? (\n <MobileTabBar routes={routes} currentPath={currentPath} />\n ) : (\n <DesktopSidebar routes={routes} currentPath={currentPath} options={options} />\n );\n}\n\n// Mobile: Bottom tab bar\nfunction MobileTabBar({ routes, currentPath }: StackLayoutProps) {\n const { navigate } = useNavigator();\n\n return (\n <View style={{ flex: 1 }}>\n <View style={{ flex: 1 }}>\n <Outlet />\n </View>\n\n <View style={{\n flexDirection: 'row',\n height: 56,\n backgroundColor: '#fff',\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n paddingBottom: 'env(safe-area-inset-bottom, 0px)',\n }}>\n {routes.slice(0, 5).map((route) => {\n const isActive = currentPath.startsWith(route.fullPath);\n return (\n <Pressable\n key={route.fullPath}\n onPress={() => navigate({ path: route.fullPath })}\n style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}\n >\n <Icon\n name={route.options?.icon || 'circle'}\n size={24}\n color={isActive ? '#007AFF' : '#8E8E93'}\n />\n <Text\n size=\"xs\"\n style={{\n marginTop: 2,\n color: isActive ? '#007AFF' : '#8E8E93',\n }}\n >\n {route.options?.tabBarLabel || route.options?.title}\n </Text>\n </Pressable>\n );\n })}\n </View>\n </View>\n );\n}\n\n// Desktop: Sidebar\nfunction DesktopSidebar({ routes, currentPath, options }: StackLayoutProps) {\n const { navigate } = useNavigator();\n const [isCollapsed, setIsCollapsed] = useState(false);\n\n return (\n <View style={{ flex: 1, flexDirection: 'row' }}>\n {/* Sidebar */}\n <View style={{\n width: isCollapsed ? 64 : 240,\n backgroundColor: '#1e1e2d',\n transition: 'width 0.2s',\n }}>\n {/* Header */}\n <View style={{\n height: 64,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 16,\n }}>\n <Icon name=\"rocket\" size={28} color=\"#fff\" />\n {!isCollapsed && (\n <Text style={{ color: '#fff', marginLeft: 12, fontWeight: '600' }}>\n {options?.headerTitle || 'App'}\n </Text>\n )}\n </View>\n\n {/* Nav Items */}\n <View style={{ flex: 1, paddingTop: 8 }}>\n {routes.map((route) => {\n const isActive = currentPath.startsWith(route.fullPath);\n return (\n <Pressable\n key={route.fullPath}\n onPress={() => navigate({ path: route.fullPath })}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n padding: 12,\n marginHorizontal: 8,\n marginVertical: 2,\n borderRadius: 8,\n backgroundColor: isActive ? 'rgba(255,255,255,0.1)' : 'transparent',\n }}\n >\n <Icon\n name={route.options?.icon || 'circle'}\n size={24}\n color={isActive ? '#fff' : 'rgba(255,255,255,0.6)'}\n />\n {!isCollapsed && (\n <Text style={{\n marginLeft: 12,\n color: isActive ? '#fff' : 'rgba(255,255,255,0.6)',\n }}>\n {route.options?.title}\n </Text>\n )}\n </Pressable>\n );\n })}\n </View>\n\n {/* Collapse toggle */}\n <Pressable\n onPress={() => setIsCollapsed(!isCollapsed)}\n style={{ padding: 16 }}\n >\n <Icon\n name={isCollapsed ? 'menu' : 'menu-open'}\n size={24}\n color=\"rgba(255,255,255,0.6)\"\n />\n </Pressable>\n </View>\n\n {/* Content */}\n <View style={{ flex: 1 }}>\n <Outlet />\n </View>\n </View>\n );\n}\n\n// Usage - works with same routes for both mobile and desktop:\n// {\n// path: \"/\",\n// type: 'navigator',\n// layout: 'stack',\n// layoutComponent: ResponsiveNavLayout,\n// options: { headerTitle: \"My App\" },\n// routes: [\n// {\n// path: \"home\",\n// component: HomeScreen,\n// options: {\n// title: \"Home\", // Used by sidebar\n// tabBarLabel: \"Home\", // Used by tab bar\n// icon: \"home\", // Used by both\n// },\n// },\n// {\n// path: \"search\",\n// component: SearchScreen,\n// options: { title: \"Search\", tabBarLabel: \"Search\", icon: \"magnify\" },\n// },\n// // ... more routes\n// ],\n// }`,\n explanation: `This layout automatically adapts to screen size:\n\n**Breakpoint logic:**\n- Mobile (<768px): Bottom tab bar like native apps\n- Desktop (>=768px): Persistent sidebar like web apps\n\n**Key insight:** The same route configuration powers both layouts! Routes define:\n- \\`title\\` - Used by sidebar menu\n- \\`tabBarLabel\\` - Used by tab bar (falls back to title)\n- \\`icon\\` - Used by both\n\n**Why this matters:**\n1. Write routes once, render appropriately per device\n2. Users get the expected pattern for their device\n3. No need for separate mobile/desktop route configs\n4. Smooth transition when resizing browser\n\n**useResponsive hook:**\nCustom hook that tracks window width and provides boolean flags for breakpoints. Could be extended with more breakpoints or use a library like react-responsive.`,\n tips: [\n \"Limit mobile tabs to 5 items max (slice shown in code)\",\n \"Consider adding a 'More' tab that opens a menu for additional items\",\n \"Persist sidebar collapsed state to localStorage\",\n \"Add transition animation when switching between layouts\",\n \"Consider tablet-specific layout (sidebar + different styling)\",\n ],\n relatedRecipes: [\"web-stack-layout\", \"web-tab-layout\", \"web-drawer-layout\"],\n },\n};\n\n/**\n * Get all recipes grouped by category\n */\nexport function getRecipesByCategory(): Record<string, Recipe[]> {\n const grouped: Record<string, Recipe[]> = {};\n\n for (const recipe of Object.values(recipes)) {\n if (!grouped[recipe.category]) {\n grouped[recipe.category] = [];\n }\n grouped[recipe.category].push(recipe);\n }\n\n return grouped;\n}\n\n/**\n * Get a summary list of all recipes\n */\nexport function getRecipeSummary(): Array<{\n id: string;\n name: string;\n description: string;\n category: string;\n difficulty: string;\n packages: string[];\n}> {\n return Object.entries(recipes).map(([id, recipe]) => ({\n id,\n name: recipe.name,\n description: recipe.description,\n category: recipe.category,\n difficulty: recipe.difficulty,\n packages: recipe.packages,\n }));\n}\n\n/**\n * Search recipes by query\n */\nexport function searchRecipes(query: string): Recipe[] {\n const lowerQuery = query.toLowerCase();\n\n return Object.values(recipes).filter(\n (recipe) =>\n recipe.name.toLowerCase().includes(lowerQuery) ||\n recipe.description.toLowerCase().includes(lowerQuery) ||\n recipe.category.toLowerCase().includes(lowerQuery) ||\n recipe.packages.some((p) => p.toLowerCase().includes(lowerQuery))\n );\n}\n","{\n \"total\": 7447,\n \"icons\": [\n \"ab-testing\",\n \"abacus\",\n \"abjad-arabic\",\n \"abjad-hebrew\",\n \"abugida-devanagari\",\n \"abugida-thai\",\n \"access-point\",\n \"access-point-check\",\n \"access-point-minus\",\n \"access-point-network\",\n \"access-point-network-off\",\n \"access-point-off\",\n \"access-point-plus\",\n \"access-point-remove\",\n \"account\",\n \"account-alert\",\n \"account-alert-outline\",\n \"account-arrow-down\",\n \"account-arrow-down-outline\",\n \"account-arrow-left\",\n \"account-arrow-left-outline\",\n \"account-arrow-right\",\n \"account-arrow-right-outline\",\n \"account-arrow-up\",\n \"account-arrow-up-outline\",\n \"account-badge\",\n \"account-badge-outline\",\n \"account-box\",\n \"account-box-edit-outline\",\n \"account-box-minus-outline\",\n \"account-box-multiple\",\n \"account-box-multiple-outline\",\n \"account-box-outline\",\n \"account-box-plus-outline\",\n \"account-cancel\",\n \"account-cancel-outline\",\n \"account-card\",\n \"account-card-outline\",\n \"account-cash\",\n \"account-cash-outline\",\n \"account-check\",\n \"account-check-outline\",\n \"account-child\",\n \"account-child-circle\",\n \"account-child-outline\",\n \"account-circle\",\n \"account-circle-outline\",\n \"account-clock\",\n \"account-clock-outline\",\n \"account-cog\",\n \"account-cog-outline\",\n \"account-convert\",\n \"account-convert-outline\",\n \"account-cowboy-hat\",\n \"account-cowboy-hat-outline\",\n \"account-credit-card\",\n \"account-credit-card-outline\",\n \"account-details\",\n \"account-details-outline\",\n \"account-edit\",\n \"account-edit-outline\",\n \"account-eye\",\n \"account-eye-outline\",\n \"account-file\",\n \"account-file-outline\",\n \"account-file-text\",\n \"account-file-text-outline\",\n \"account-filter\",\n \"account-filter-outline\",\n \"account-group\",\n \"account-group-outline\",\n \"account-hard-hat\",\n \"account-hard-hat-outline\",\n \"account-heart\",\n \"account-heart-outline\",\n \"account-injury\",\n \"account-injury-outline\",\n \"account-key\",\n \"account-key-outline\",\n \"account-lock\",\n \"account-lock-open\",\n \"account-lock-open-outline\",\n \"account-lock-outline\",\n \"account-minus\",\n \"account-minus-outline\",\n \"account-multiple\",\n \"account-multiple-check\",\n \"account-multiple-check-outline\",\n \"account-multiple-minus\",\n \"account-multiple-minus-outline\",\n \"account-multiple-outline\",\n \"account-multiple-plus\",\n \"account-multiple-plus-outline\",\n \"account-multiple-remove\",\n \"account-multiple-remove-outline\",\n \"account-music\",\n \"account-music-outline\",\n \"account-network\",\n \"account-network-off\",\n \"account-network-off-outline\",\n \"account-network-outline\",\n \"account-off\",\n \"account-off-outline\",\n \"account-outline\",\n \"account-plus\",\n \"account-plus-outline\",\n \"account-question\",\n \"account-question-outline\",\n \"account-reactivate\",\n \"account-reactivate-outline\",\n \"account-remove\",\n \"account-remove-outline\",\n \"account-school\",\n \"account-school-outline\",\n \"account-search\",\n \"account-search-outline\",\n \"account-settings\",\n \"account-settings-outline\",\n \"account-star\",\n \"account-star-outline\",\n \"account-supervisor\",\n \"account-supervisor-circle\",\n \"account-supervisor-circle-outline\",\n \"account-supervisor-outline\",\n \"account-switch\",\n \"account-switch-outline\",\n \"account-sync\",\n \"account-sync-outline\",\n \"account-tag\",\n \"account-tag-outline\",\n \"account-tie\",\n \"account-tie-hat\",\n \"account-tie-hat-outline\",\n \"account-tie-outline\",\n \"account-tie-voice\",\n \"account-tie-voice-off\",\n \"account-tie-voice-off-outline\",\n \"account-tie-voice-outline\",\n \"account-tie-woman\",\n \"account-voice\",\n \"account-voice-off\",\n \"account-wrench\",\n \"account-wrench-outline\",\n \"adjust\",\n \"advertisements\",\n \"advertisements-off\",\n \"air-conditioner\",\n \"air-filter\",\n \"air-horn\",\n \"air-humidifier\",\n \"air-humidifier-off\",\n \"air-purifier\",\n \"air-purifier-off\",\n \"airbag\",\n \"airballoon\",\n \"airballoon-outline\",\n \"airplane\",\n \"airplane-alert\",\n \"airplane-check\",\n \"airplane-clock\",\n \"airplane-cog\",\n \"airplane-edit\",\n \"airplane-landing\",\n \"airplane-marker\",\n \"airplane-minus\",\n \"airplane-off\",\n \"airplane-plus\",\n \"airplane-remove\",\n \"airplane-search\",\n \"airplane-settings\",\n \"airplane-takeoff\",\n \"airport\",\n \"alarm\",\n \"alarm-bell\",\n \"alarm-check\",\n \"alarm-light\",\n \"alarm-light-off\",\n \"alarm-light-off-outline\",\n \"alarm-light-outline\",\n \"alarm-multiple\",\n \"alarm-note\",\n \"alarm-note-off\",\n \"alarm-off\",\n \"alarm-panel\",\n \"alarm-panel-outline\",\n \"alarm-plus\",\n \"alarm-snooze\",\n \"album\",\n \"alert\",\n \"alert-box\",\n \"alert-box-outline\",\n \"alert-circle\",\n \"alert-circle-check\",\n \"alert-circle-check-outline\",\n \"alert-circle-outline\",\n \"alert-decagram\",\n \"alert-decagram-outline\",\n \"alert-minus\",\n \"alert-minus-outline\",\n \"alert-octagon\",\n \"alert-octagon-outline\",\n \"alert-octagram\",\n \"alert-octagram-outline\",\n \"alert-outline\",\n \"alert-plus\",\n \"alert-plus-outline\",\n \"alert-remove\",\n \"alert-remove-outline\",\n \"alert-rhombus\",\n \"alert-rhombus-outline\",\n \"alien\",\n \"alien-outline\",\n \"align-horizontal-center\",\n \"align-horizontal-distribute\",\n \"align-horizontal-left\",\n \"align-horizontal-right\",\n \"align-vertical-bottom\",\n \"align-vertical-center\",\n \"align-vertical-distribute\",\n \"align-vertical-top\",\n \"all-inclusive\",\n \"all-inclusive-box\",\n \"all-inclusive-box-outline\",\n \"allergy\",\n \"alpha\",\n \"alpha-a\",\n \"alpha-a-box\",\n \"alpha-a-box-outline\",\n \"alpha-a-circle\",\n \"alpha-a-circle-outline\",\n \"alpha-b\",\n \"alpha-b-box\",\n \"alpha-b-box-outline\",\n \"alpha-b-circle\",\n \"alpha-b-circle-outline\",\n \"alpha-c\",\n \"alpha-c-box\",\n \"alpha-c-box-outline\",\n \"alpha-c-circle\",\n \"alpha-c-circle-outline\",\n \"alpha-d\",\n \"alpha-d-box\",\n \"alpha-d-box-outline\",\n \"alpha-d-circle\",\n \"alpha-d-circle-outline\",\n \"alpha-e\",\n \"alpha-e-box\",\n \"alpha-e-box-outline\",\n \"alpha-e-circle\",\n \"alpha-e-circle-outline\",\n \"alpha-f\",\n \"alpha-f-box\",\n \"alpha-f-box-outline\",\n \"alpha-f-circle\",\n \"alpha-f-circle-outline\",\n \"alpha-g\",\n \"alpha-g-box\",\n \"alpha-g-box-outline\",\n \"alpha-g-circle\",\n \"alpha-g-circle-outline\",\n \"alpha-h\",\n \"alpha-h-box\",\n \"alpha-h-box-outline\",\n \"alpha-h-circle\",\n \"alpha-h-circle-outline\",\n \"alpha-i\",\n \"alpha-i-box\",\n \"alpha-i-box-outline\",\n \"alpha-i-circle\",\n \"alpha-i-circle-outline\",\n \"alpha-j\",\n \"alpha-j-box\",\n \"alpha-j-box-outline\",\n \"alpha-j-circle\",\n \"alpha-j-circle-outline\",\n \"alpha-k\",\n \"alpha-k-box\",\n \"alpha-k-box-outline\",\n \"alpha-k-circle\",\n \"alpha-k-circle-outline\",\n \"alpha-l\",\n \"alpha-l-box\",\n \"alpha-l-box-outline\",\n \"alpha-l-circle\",\n \"alpha-l-circle-outline\",\n \"alpha-m\",\n \"alpha-m-box\",\n \"alpha-m-box-outline\",\n \"alpha-m-circle\",\n \"alpha-m-circle-outline\",\n \"alpha-n\",\n \"alpha-n-box\",\n \"alpha-n-box-outline\",\n \"alpha-n-circle\",\n \"alpha-n-circle-outline\",\n \"alpha-o\",\n \"alpha-o-box\",\n \"alpha-o-box-outline\",\n \"alpha-o-circle\",\n \"alpha-o-circle-outline\",\n \"alpha-p\",\n \"alpha-p-box\",\n \"alpha-p-box-outline\",\n \"alpha-p-circle\",\n \"alpha-p-circle-outline\",\n \"alpha-q\",\n \"alpha-q-box\",\n \"alpha-q-box-outline\",\n \"alpha-q-circle\",\n \"alpha-q-circle-outline\",\n \"alpha-r\",\n \"alpha-r-box\",\n \"alpha-r-box-outline\",\n \"alpha-r-circle\",\n \"alpha-r-circle-outline\",\n \"alpha-s\",\n \"alpha-s-box\",\n \"alpha-s-box-outline\",\n \"alpha-s-circle\",\n \"alpha-s-circle-outline\",\n \"alpha-t\",\n \"alpha-t-box\",\n \"alpha-t-box-outline\",\n \"alpha-t-circle\",\n \"alpha-t-circle-outline\",\n \"alpha-u\",\n \"alpha-u-box\",\n \"alpha-u-box-outline\",\n \"alpha-u-circle\",\n \"alpha-u-circle-outline\",\n \"alpha-v\",\n \"alpha-v-box\",\n \"alpha-v-box-outline\",\n \"alpha-v-circle\",\n \"alpha-v-circle-outline\",\n \"alpha-w\",\n \"alpha-w-box\",\n \"alpha-w-box-outline\",\n \"alpha-w-circle\",\n \"alpha-w-circle-outline\",\n \"alpha-x\",\n \"alpha-x-box\",\n \"alpha-x-box-outline\",\n \"alpha-x-circle\",\n \"alpha-x-circle-outline\",\n \"alpha-y\",\n \"alpha-y-box\",\n \"alpha-y-box-outline\",\n \"alpha-y-circle\",\n \"alpha-y-circle-outline\",\n \"alpha-z\",\n \"alpha-z-box\",\n \"alpha-z-box-outline\",\n \"alpha-z-circle\",\n \"alpha-z-circle-outline\",\n \"alphabet-aurebesh\",\n \"alphabet-cyrillic\",\n \"alphabet-greek\",\n \"alphabet-latin\",\n \"alphabet-piqad\",\n \"alphabet-tengwar\",\n \"alphabetical\",\n \"alphabetical-off\",\n \"alphabetical-variant\",\n \"alphabetical-variant-off\",\n \"altimeter\",\n \"ambulance\",\n \"ammunition\",\n \"ampersand\",\n \"amplifier\",\n \"amplifier-off\",\n \"anchor\",\n \"android\",\n \"android-studio\",\n \"angle-acute\",\n \"angle-obtuse\",\n \"angle-right\",\n \"angular\",\n \"angularjs\",\n \"animation\",\n \"animation-outline\",\n \"animation-play\",\n \"animation-play-outline\",\n \"ansible\",\n \"antenna\",\n \"anvil\",\n \"apache-kafka\",\n \"api\",\n \"api-off\",\n \"apple\",\n \"apple-finder\",\n \"apple-icloud\",\n \"apple-ios\",\n \"apple-keyboard-caps\",\n \"apple-keyboard-command\",\n \"apple-keyboard-control\",\n \"apple-keyboard-option\",\n \"apple-keyboard-shift\",\n \"apple-safari\",\n \"application\",\n \"application-array\",\n \"application-array-outline\",\n \"application-braces\",\n \"application-braces-outline\",\n \"application-brackets\",\n \"application-brackets-outline\",\n \"application-cog\",\n \"application-cog-outline\",\n \"application-edit\",\n \"application-edit-outline\",\n \"application-export\",\n \"application-import\",\n \"application-outline\",\n \"application-parentheses\",\n \"application-parentheses-outline\",\n \"application-settings\",\n \"application-settings-outline\",\n \"application-variable\",\n \"application-variable-outline\",\n \"approximately-equal\",\n \"approximately-equal-box\",\n \"apps\",\n \"apps-box\",\n \"arch\",\n \"archive\",\n \"archive-alert\",\n \"archive-alert-outline\",\n \"archive-arrow-down\",\n \"archive-arrow-down-outline\",\n \"archive-arrow-up\",\n \"archive-arrow-up-outline\",\n \"archive-cancel\",\n \"archive-cancel-outline\",\n \"archive-check\",\n \"archive-check-outline\",\n \"archive-clock\",\n \"archive-clock-outline\",\n \"archive-cog\",\n \"archive-cog-outline\",\n \"archive-edit\",\n \"archive-edit-outline\",\n \"archive-eye\",\n \"archive-eye-outline\",\n \"archive-lock\",\n \"archive-lock-open\",\n \"archive-lock-open-outline\",\n \"archive-lock-outline\",\n \"archive-marker\",\n \"archive-marker-outline\",\n \"archive-minus\",\n \"archive-minus-outline\",\n \"archive-music\",\n \"archive-music-outline\",\n \"archive-off\",\n \"archive-off-outline\",\n \"archive-outline\",\n \"archive-plus\",\n \"archive-plus-outline\",\n \"archive-refresh\",\n \"archive-refresh-outline\",\n \"archive-remove\",\n \"archive-remove-outline\",\n \"archive-search\",\n \"archive-search-outline\",\n \"archive-settings\",\n \"archive-settings-outline\",\n \"archive-star\",\n \"archive-star-outline\",\n \"archive-sync\",\n \"archive-sync-outline\",\n \"arm-flex\",\n \"arm-flex-outline\",\n \"arrange-bring-forward\",\n \"arrange-bring-to-front\",\n \"arrange-send-backward\",\n \"arrange-send-to-back\",\n \"arrow-all\",\n \"arrow-bottom-left\",\n \"arrow-bottom-left-bold-box\",\n \"arrow-bottom-left-bold-box-outline\",\n \"arrow-bottom-left-bold-outline\",\n \"arrow-bottom-left-thick\",\n \"arrow-bottom-left-thin\",\n \"arrow-bottom-left-thin-circle-outline\",\n \"arrow-bottom-right\",\n \"arrow-bottom-right-bold-box\",\n \"arrow-bottom-right-bold-box-outline\",\n \"arrow-bottom-right-bold-outline\",\n \"arrow-bottom-right-thick\",\n \"arrow-bottom-right-thin\",\n \"arrow-bottom-right-thin-circle-outline\",\n \"arrow-collapse\",\n \"arrow-collapse-all\",\n \"arrow-collapse-down\",\n \"arrow-collapse-horizontal\",\n \"arrow-collapse-left\",\n \"arrow-collapse-right\",\n \"arrow-collapse-up\",\n \"arrow-collapse-vertical\",\n \"arrow-decision\",\n \"arrow-decision-auto\",\n \"arrow-decision-auto-outline\",\n \"arrow-decision-outline\",\n \"arrow-down\",\n \"arrow-down-bold\",\n \"arrow-down-bold-box\",\n \"arrow-down-bold-box-outline\",\n \"arrow-down-bold-circle\",\n \"arrow-down-bold-circle-outline\",\n \"arrow-down-bold-hexagon-outline\",\n \"arrow-down-bold-outline\",\n \"arrow-down-box\",\n \"arrow-down-circle\",\n \"arrow-down-circle-outline\",\n \"arrow-down-drop-circle\",\n \"arrow-down-drop-circle-outline\",\n \"arrow-down-left\",\n \"arrow-down-left-bold\",\n \"arrow-down-right\",\n \"arrow-down-right-bold\",\n \"arrow-down-thick\",\n \"arrow-down-thin\",\n \"arrow-down-thin-circle-outline\",\n \"arrow-expand\",\n \"arrow-expand-all\",\n \"arrow-expand-down\",\n \"arrow-expand-horizontal\",\n \"arrow-expand-left\",\n \"arrow-expand-right\",\n \"arrow-expand-up\",\n \"arrow-expand-vertical\",\n \"arrow-horizontal-lock\",\n \"arrow-left\",\n \"arrow-left-bold\",\n \"arrow-left-bold-box\",\n \"arrow-left-bold-box-outline\",\n \"arrow-left-bold-circle\",\n \"arrow-left-bold-circle-outline\",\n \"arrow-left-bold-hexagon-outline\",\n \"arrow-left-bold-outline\",\n \"arrow-left-bottom\",\n \"arrow-left-bottom-bold\",\n \"arrow-left-box\",\n \"arrow-left-circle\",\n \"arrow-left-circle-outline\",\n \"arrow-left-drop-circle\",\n \"arrow-left-drop-circle-outline\",\n \"arrow-left-right\",\n \"arrow-left-right-bold\",\n \"arrow-left-right-bold-outline\",\n \"arrow-left-thick\",\n \"arrow-left-thin\",\n \"arrow-left-thin-circle-outline\",\n \"arrow-left-top\",\n \"arrow-left-top-bold\",\n \"arrow-oscillating\",\n \"arrow-oscillating-off\",\n \"arrow-projectile\",\n \"arrow-projectile-multiple\",\n \"arrow-right\",\n \"arrow-right-bold\",\n \"arrow-right-bold-box\",\n \"arrow-right-bold-box-outline\",\n \"arrow-right-bold-circle\",\n \"arrow-right-bold-circle-outline\",\n \"arrow-right-bold-hexagon-outline\",\n \"arrow-right-bold-outline\",\n \"arrow-right-bottom\",\n \"arrow-right-bottom-bold\",\n \"arrow-right-box\",\n \"arrow-right-circle\",\n \"arrow-right-circle-outline\",\n \"arrow-right-drop-circle\",\n \"arrow-right-drop-circle-outline\",\n \"arrow-right-thick\",\n \"arrow-right-thin\",\n \"arrow-right-thin-circle-outline\",\n \"arrow-right-top\",\n \"arrow-right-top-bold\",\n \"arrow-split-horizontal\",\n \"arrow-split-vertical\",\n \"arrow-top-left\",\n \"arrow-top-left-bold-box\",\n \"arrow-top-left-bold-box-outline\",\n \"arrow-top-left-bold-outline\",\n \"arrow-top-left-bottom-right\",\n \"arrow-top-left-bottom-right-bold\",\n \"arrow-top-left-thick\",\n \"arrow-top-left-thin\",\n \"arrow-top-left-thin-circle-outline\",\n \"arrow-top-right\",\n \"arrow-top-right-bold-box\",\n \"arrow-top-right-bold-box-outline\",\n \"arrow-top-right-bold-outline\",\n \"arrow-top-right-bottom-left\",\n \"arrow-top-right-bottom-left-bold\",\n \"arrow-top-right-thick\",\n \"arrow-top-right-thin\",\n \"arrow-top-right-thin-circle-outline\",\n \"arrow-u-down-left\",\n \"arrow-u-down-left-bold\",\n \"arrow-u-down-right\",\n \"arrow-u-down-right-bold\",\n \"arrow-u-left-bottom\",\n \"arrow-u-left-bottom-bold\",\n \"arrow-u-left-top\",\n \"arrow-u-left-top-bold\",\n \"arrow-u-right-bottom\",\n \"arrow-u-right-bottom-bold\",\n \"arrow-u-right-top\",\n \"arrow-u-right-top-bold\",\n \"arrow-u-up-left\",\n \"arrow-u-up-left-bold\",\n \"arrow-u-up-right\",\n \"arrow-u-up-right-bold\",\n \"arrow-up\",\n \"arrow-up-bold\",\n \"arrow-up-bold-box\",\n \"arrow-up-bold-box-outline\",\n \"arrow-up-bold-circle\",\n \"arrow-up-bold-circle-outline\",\n \"arrow-up-bold-hexagon-outline\",\n \"arrow-up-bold-outline\",\n \"arrow-up-box\",\n \"arrow-up-circle\",\n \"arrow-up-circle-outline\",\n \"arrow-up-down\",\n \"arrow-up-down-bold\",\n \"arrow-up-down-bold-outline\",\n \"arrow-up-drop-circle\",\n \"arrow-up-drop-circle-outline\",\n \"arrow-up-left\",\n \"arrow-up-left-bold\",\n \"arrow-up-right\",\n \"arrow-up-right-bold\",\n \"arrow-up-thick\",\n \"arrow-up-thin\",\n \"arrow-up-thin-circle-outline\",\n \"arrow-vertical-lock\",\n \"artboard\",\n \"artstation\",\n \"aspect-ratio\",\n \"assistant\",\n \"asterisk\",\n \"asterisk-circle-outline\",\n \"at\",\n \"atlassian\",\n \"atm\",\n \"atom\",\n \"atom-variant\",\n \"attachment\",\n \"attachment-check\",\n \"attachment-lock\",\n \"attachment-minus\",\n \"attachment-off\",\n \"attachment-plus\",\n \"attachment-remove\",\n \"atv\",\n \"audio-input-rca\",\n \"audio-input-stereo-minijack\",\n \"audio-input-xlr\",\n \"audio-video\",\n \"audio-video-off\",\n \"augmented-reality\",\n \"aurora\",\n \"auto-download\",\n \"auto-fix\",\n \"auto-mode\",\n \"auto-upload\",\n \"autorenew\",\n \"autorenew-off\",\n \"av-timer\",\n \"awning\",\n \"awning-outline\",\n \"aws\",\n \"axe\",\n \"axe-battle\",\n \"axis\",\n \"axis-arrow\",\n \"axis-arrow-info\",\n \"axis-arrow-lock\",\n \"axis-lock\",\n \"axis-x-arrow\",\n \"axis-x-arrow-lock\",\n \"axis-x-rotate-clockwise\",\n \"axis-x-rotate-counterclockwise\",\n \"axis-x-y-arrow-lock\",\n \"axis-y-arrow\",\n \"axis-y-arrow-lock\",\n \"axis-y-rotate-clockwise\",\n \"axis-y-rotate-counterclockwise\",\n \"axis-z-arrow\",\n \"axis-z-arrow-lock\",\n \"axis-z-rotate-clockwise\",\n \"axis-z-rotate-counterclockwise\",\n \"babel\",\n \"baby\",\n \"baby-bottle\",\n \"baby-bottle-outline\",\n \"baby-buggy\",\n \"baby-buggy-off\",\n \"baby-carriage\",\n \"baby-carriage-off\",\n \"baby-face\",\n \"baby-face-outline\",\n \"backburger\",\n \"backspace\",\n \"backspace-outline\",\n \"backspace-reverse\",\n \"backspace-reverse-outline\",\n \"backup-restore\",\n \"bacteria\",\n \"bacteria-outline\",\n \"badge-account\",\n \"badge-account-alert\",\n \"badge-account-alert-outline\",\n \"badge-account-horizontal\",\n \"badge-account-horizontal-outline\",\n \"badge-account-outline\",\n \"badminton\",\n \"bag-carry-on\",\n \"bag-carry-on-check\",\n \"bag-carry-on-off\",\n \"bag-checked\",\n \"bag-personal\",\n \"bag-personal-off\",\n \"bag-personal-off-outline\",\n \"bag-personal-outline\",\n \"bag-personal-plus\",\n \"bag-personal-plus-outline\",\n \"bag-personal-tag\",\n \"bag-personal-tag-outline\",\n \"bag-suitcase\",\n \"bag-suitcase-off\",\n \"bag-suitcase-off-outline\",\n \"bag-suitcase-outline\",\n \"baguette\",\n \"balcony\",\n \"balloon\",\n \"ballot\",\n \"ballot-outline\",\n \"ballot-recount\",\n \"ballot-recount-outline\",\n \"bandage\",\n \"bank\",\n \"bank-check\",\n \"bank-circle\",\n \"bank-circle-outline\",\n \"bank-minus\",\n \"bank-off\",\n \"bank-off-outline\",\n \"bank-outline\",\n \"bank-plus\",\n \"bank-remove\",\n \"bank-transfer\",\n \"bank-transfer-in\",\n \"bank-transfer-out\",\n \"barcode\",\n \"barcode-off\",\n \"barcode-scan\",\n \"barley\",\n \"barley-off\",\n \"barn\",\n \"barrel\",\n \"barrel-outline\",\n \"baseball\",\n \"baseball-bat\",\n \"baseball-diamond\",\n \"baseball-diamond-outline\",\n \"baseball-outline\",\n \"bash\",\n \"basket\",\n \"basket-check\",\n \"basket-check-outline\",\n \"basket-fill\",\n \"basket-minus\",\n \"basket-minus-outline\",\n \"basket-off\",\n \"basket-off-outline\",\n \"basket-outline\",\n \"basket-plus\",\n \"basket-plus-outline\",\n \"basket-remove\",\n \"basket-remove-outline\",\n \"basket-unfill\",\n \"basketball\",\n \"basketball-hoop\",\n \"basketball-hoop-outline\",\n \"bat\",\n \"bathtub\",\n \"bathtub-outline\",\n \"battery\",\n \"battery-10\",\n \"battery-10-bluetooth\",\n \"battery-20\",\n \"battery-20-bluetooth\",\n \"battery-30\",\n \"battery-30-bluetooth\",\n \"battery-40\",\n \"battery-40-bluetooth\",\n \"battery-50\",\n \"battery-50-bluetooth\",\n \"battery-60\",\n \"battery-60-bluetooth\",\n \"battery-70\",\n \"battery-70-bluetooth\",\n \"battery-80\",\n \"battery-80-bluetooth\",\n \"battery-90\",\n \"battery-90-bluetooth\",\n \"battery-alert\",\n \"battery-alert-bluetooth\",\n \"battery-alert-variant\",\n \"battery-alert-variant-outline\",\n \"battery-arrow-down\",\n \"battery-arrow-down-outline\",\n \"battery-arrow-up\",\n \"battery-arrow-up-outline\",\n \"battery-bluetooth\",\n \"battery-bluetooth-variant\",\n \"battery-charging\",\n \"battery-charging-10\",\n \"battery-charging-100\",\n \"battery-charging-20\",\n \"battery-charging-30\",\n \"battery-charging-40\",\n \"battery-charging-50\",\n \"battery-charging-60\",\n \"battery-charging-70\",\n \"battery-charging-80\",\n \"battery-charging-90\",\n \"battery-charging-high\",\n \"battery-charging-low\",\n \"battery-charging-medium\",\n \"battery-charging-outline\",\n \"battery-charging-wireless\",\n \"battery-charging-wireless-10\",\n \"battery-charging-wireless-20\",\n \"battery-charging-wireless-30\",\n \"battery-charging-wireless-40\",\n \"battery-charging-wireless-50\",\n \"battery-charging-wireless-60\",\n \"battery-charging-wireless-70\",\n \"battery-charging-wireless-80\",\n \"battery-charging-wireless-90\",\n \"battery-charging-wireless-alert\",\n \"battery-charging-wireless-outline\",\n \"battery-check\",\n \"battery-check-outline\",\n \"battery-clock\",\n \"battery-clock-outline\",\n \"battery-heart\",\n \"battery-heart-outline\",\n \"battery-heart-variant\",\n \"battery-high\",\n \"battery-lock\",\n \"battery-lock-open\",\n \"battery-low\",\n \"battery-medium\",\n \"battery-minus\",\n \"battery-minus-outline\",\n \"battery-minus-variant\",\n \"battery-negative\",\n \"battery-off\",\n \"battery-off-outline\",\n \"battery-outline\",\n \"battery-plus\",\n \"battery-plus-outline\",\n \"battery-plus-variant\",\n \"battery-positive\",\n \"battery-remove\",\n \"battery-remove-outline\",\n \"battery-sync\",\n \"battery-sync-outline\",\n \"battery-unknown\",\n \"battery-unknown-bluetooth\",\n \"beach\",\n \"beaker\",\n \"beaker-alert\",\n \"beaker-alert-outline\",\n \"beaker-check\",\n \"beaker-check-outline\",\n \"beaker-minus\",\n \"beaker-minus-outline\",\n \"beaker-outline\",\n \"beaker-plus\",\n \"beaker-plus-outline\",\n \"beaker-question\",\n \"beaker-question-outline\",\n \"beaker-remove\",\n \"beaker-remove-outline\",\n \"bed\",\n \"bed-clock\",\n \"bed-double\",\n \"bed-double-outline\",\n \"bed-empty\",\n \"bed-king\",\n \"bed-king-outline\",\n \"bed-outline\",\n \"bed-queen\",\n \"bed-queen-outline\",\n \"bed-single\",\n \"bed-single-outline\",\n \"bee\",\n \"bee-flower\",\n \"beehive-off-outline\",\n \"beehive-outline\",\n \"beekeeper\",\n \"beer\",\n \"beer-outline\",\n \"bell\",\n \"bell-alert\",\n \"bell-alert-outline\",\n \"bell-badge\",\n \"bell-badge-outline\",\n \"bell-cancel\",\n \"bell-cancel-outline\",\n \"bell-check\",\n \"bell-check-outline\",\n \"bell-circle\",\n \"bell-circle-outline\",\n \"bell-cog\",\n \"bell-cog-outline\",\n \"bell-minus\",\n \"bell-minus-outline\",\n \"bell-off\",\n \"bell-off-outline\",\n \"bell-outline\",\n \"bell-plus\",\n \"bell-plus-outline\",\n \"bell-remove\",\n \"bell-remove-outline\",\n \"bell-ring\",\n \"bell-ring-outline\",\n \"bell-sleep\",\n \"bell-sleep-outline\",\n \"bench\",\n \"bench-back\",\n \"beta\",\n \"betamax\",\n \"biathlon\",\n \"bicycle\",\n \"bicycle-basket\",\n \"bicycle-cargo\",\n \"bicycle-electric\",\n \"bicycle-penny-farthing\",\n \"bike\",\n \"bike-fast\",\n \"bike-pedal\",\n \"bike-pedal-clipless\",\n \"bike-pedal-mountain\",\n \"billboard\",\n \"billiards\",\n \"billiards-rack\",\n \"binoculars\",\n \"bio\",\n \"biohazard\",\n \"bird\",\n \"bitbucket\",\n \"bitcoin\",\n \"black-mesa\",\n \"blender\",\n \"blender-outline\",\n \"blender-software\",\n \"blinds\",\n \"blinds-horizontal\",\n \"blinds-horizontal-closed\",\n \"blinds-open\",\n \"blinds-vertical\",\n \"blinds-vertical-closed\",\n \"block-helper\",\n \"blood-bag\",\n \"bluetooth\",\n \"bluetooth-audio\",\n \"bluetooth-connect\",\n \"bluetooth-off\",\n \"bluetooth-settings\",\n \"bluetooth-transfer\",\n \"blur\",\n \"blur-linear\",\n \"blur-off\",\n \"blur-radial\",\n \"bolt\",\n \"bomb\",\n \"bomb-off\",\n \"bone\",\n \"bone-off\",\n \"book\",\n \"book-account\",\n \"book-account-outline\",\n \"book-alert\",\n \"book-alert-outline\",\n \"book-alphabet\",\n \"book-arrow-down\",\n \"book-arrow-down-outline\",\n \"book-arrow-left\",\n \"book-arrow-left-outline\",\n \"book-arrow-right\",\n \"book-arrow-right-outline\",\n \"book-arrow-up\",\n \"book-arrow-up-outline\",\n \"book-cancel\",\n \"book-cancel-outline\",\n \"book-check\",\n \"book-check-outline\",\n \"book-clock\",\n \"book-clock-outline\",\n \"book-cog\",\n \"book-cog-outline\",\n \"book-cross\",\n \"book-edit\",\n \"book-edit-outline\",\n \"book-education\",\n \"book-education-outline\",\n \"book-heart\",\n \"book-heart-outline\",\n \"book-information-variant\",\n \"book-lock\",\n \"book-lock-open\",\n \"book-lock-open-outline\",\n \"book-lock-outline\",\n \"book-marker\",\n \"book-marker-outline\",\n \"book-minus\",\n \"book-minus-multiple\",\n \"book-minus-multiple-outline\",\n \"book-minus-outline\",\n \"book-multiple\",\n \"book-multiple-outline\",\n \"book-music\",\n \"book-music-outline\",\n \"book-off\",\n \"book-off-outline\",\n \"book-open\",\n \"book-open-blank-variant\",\n \"book-open-blank-variant-outline\",\n \"book-open-outline\",\n \"book-open-page-variant\",\n \"book-open-page-variant-outline\",\n \"book-open-variant\",\n \"book-open-variant-outline\",\n \"book-outline\",\n \"book-play\",\n \"book-play-outline\",\n \"book-plus\",\n \"book-plus-multiple\",\n \"book-plus-multiple-outline\",\n \"book-plus-outline\",\n \"book-refresh\",\n \"book-refresh-outline\",\n \"book-remove\",\n \"book-remove-multiple\",\n \"book-remove-multiple-outline\",\n \"book-remove-outline\",\n \"book-search\",\n \"book-search-outline\",\n \"book-settings\",\n \"book-settings-outline\",\n \"book-sync\",\n \"book-sync-outline\",\n \"book-variant\",\n \"bookmark\",\n \"bookmark-box\",\n \"bookmark-box-multiple\",\n \"bookmark-box-multiple-outline\",\n \"bookmark-box-outline\",\n \"bookmark-check\",\n \"bookmark-check-outline\",\n \"bookmark-minus\",\n \"bookmark-minus-outline\",\n \"bookmark-multiple\",\n \"bookmark-multiple-outline\",\n \"bookmark-music\",\n \"bookmark-music-outline\",\n \"bookmark-off\",\n \"bookmark-off-outline\",\n \"bookmark-outline\",\n \"bookmark-plus\",\n \"bookmark-plus-outline\",\n \"bookmark-remove\",\n \"bookmark-remove-outline\",\n \"bookshelf\",\n \"boom-gate\",\n \"boom-gate-alert\",\n \"boom-gate-alert-outline\",\n \"boom-gate-arrow-down\",\n \"boom-gate-arrow-down-outline\",\n \"boom-gate-arrow-up\",\n \"boom-gate-arrow-up-outline\",\n \"boom-gate-outline\",\n \"boom-gate-up\",\n \"boom-gate-up-outline\",\n \"boombox\",\n \"boomerang\",\n \"bootstrap\",\n \"border-all\",\n \"border-all-variant\",\n \"border-bottom\",\n \"border-bottom-variant\",\n \"border-color\",\n \"border-horizontal\",\n \"border-inside\",\n \"border-left\",\n \"border-left-variant\",\n \"border-none\",\n \"border-none-variant\",\n \"border-outside\",\n \"border-radius\",\n \"border-right\",\n \"border-right-variant\",\n \"border-style\",\n \"border-top\",\n \"border-top-variant\",\n \"border-vertical\",\n \"bottle-soda\",\n \"bottle-soda-classic\",\n \"bottle-soda-classic-outline\",\n \"bottle-soda-outline\",\n \"bottle-tonic\",\n \"bottle-tonic-outline\",\n \"bottle-tonic-plus\",\n \"bottle-tonic-plus-outline\",\n \"bottle-tonic-skull\",\n \"bottle-tonic-skull-outline\",\n \"bottle-wine\",\n \"bottle-wine-outline\",\n \"bow-arrow\",\n \"bow-tie\",\n \"bowl\",\n \"bowl-mix\",\n \"bowl-mix-outline\",\n \"bowl-outline\",\n \"bowling\",\n \"box\",\n \"box-cutter\",\n \"box-cutter-off\",\n \"box-shadow\",\n \"boxing-glove\",\n \"braille\",\n \"brain\",\n \"bread-slice\",\n \"bread-slice-outline\",\n \"bridge\",\n \"briefcase\",\n \"briefcase-account\",\n \"briefcase-account-outline\",\n \"briefcase-arrow-left-right\",\n \"briefcase-arrow-left-right-outline\",\n \"briefcase-arrow-up-down\",\n \"briefcase-arrow-up-down-outline\",\n \"briefcase-check\",\n \"briefcase-check-outline\",\n \"briefcase-clock\",\n \"briefcase-clock-outline\",\n \"briefcase-download\",\n \"briefcase-download-outline\",\n \"briefcase-edit\",\n \"briefcase-edit-outline\",\n \"briefcase-eye\",\n \"briefcase-eye-outline\",\n \"briefcase-minus\",\n \"briefcase-minus-outline\",\n \"briefcase-off\",\n \"briefcase-off-outline\",\n \"briefcase-outline\",\n \"briefcase-plus\",\n \"briefcase-plus-outline\",\n \"briefcase-remove\",\n \"briefcase-remove-outline\",\n \"briefcase-search\",\n \"briefcase-search-outline\",\n \"briefcase-upload\",\n \"briefcase-upload-outline\",\n \"briefcase-variant\",\n \"briefcase-variant-off\",\n \"briefcase-variant-off-outline\",\n \"briefcase-variant-outline\",\n \"brightness-1\",\n \"brightness-2\",\n \"brightness-3\",\n \"brightness-4\",\n \"brightness-5\",\n \"brightness-6\",\n \"brightness-7\",\n \"brightness-auto\",\n \"brightness-percent\",\n \"broadcast\",\n \"broadcast-off\",\n \"broom\",\n \"brush\",\n \"brush-off\",\n \"brush-outline\",\n \"brush-variant\",\n \"bucket\",\n \"bucket-outline\",\n \"buffet\",\n \"bug\",\n \"bug-check\",\n \"bug-check-outline\",\n \"bug-outline\",\n \"bug-pause\",\n \"bug-pause-outline\",\n \"bug-play\",\n \"bug-play-outline\",\n \"bug-stop\",\n \"bug-stop-outline\",\n \"bugle\",\n \"bulkhead-light\",\n \"bulldozer\",\n \"bullet\",\n \"bulletin-board\",\n \"bullhorn\",\n \"bullhorn-outline\",\n \"bullhorn-variant\",\n \"bullhorn-variant-outline\",\n \"bullseye\",\n \"bullseye-arrow\",\n \"bulma\",\n \"bunk-bed\",\n \"bunk-bed-outline\",\n \"bus\",\n \"bus-alert\",\n \"bus-articulated-end\",\n \"bus-articulated-front\",\n \"bus-clock\",\n \"bus-double-decker\",\n \"bus-electric\",\n \"bus-marker\",\n \"bus-multiple\",\n \"bus-school\",\n \"bus-side\",\n \"bus-sign\",\n \"bus-stop\",\n \"bus-stop-covered\",\n \"bus-stop-uncovered\",\n \"bus-wrench\",\n \"butterfly\",\n \"butterfly-outline\",\n \"button-cursor\",\n \"button-pointer\",\n \"cabin-a-frame\",\n \"cable-data\",\n \"cached\",\n \"cactus\",\n \"cake\",\n \"cake-layered\",\n \"cake-variant\",\n \"cake-variant-outline\",\n \"calculator\",\n \"calculator-variant\",\n \"calculator-variant-outline\",\n \"calendar\",\n \"calendar-account\",\n \"calendar-account-outline\",\n \"calendar-alert\",\n \"calendar-alert-outline\",\n \"calendar-arrow-left\",\n \"calendar-arrow-right\",\n \"calendar-badge\",\n \"calendar-badge-outline\",\n \"calendar-blank\",\n \"calendar-blank-multiple\",\n \"calendar-blank-outline\",\n \"calendar-check\",\n \"calendar-check-outline\",\n \"calendar-clock\",\n \"calendar-clock-outline\",\n \"calendar-collapse-horizontal\",\n \"calendar-collapse-horizontal-outline\",\n \"calendar-cursor\",\n \"calendar-cursor-outline\",\n \"calendar-edit\",\n \"calendar-edit-outline\",\n \"calendar-end\",\n \"calendar-end-outline\",\n \"calendar-expand-horizontal\",\n \"calendar-expand-horizontal-outline\",\n \"calendar-export\",\n \"calendar-export-outline\",\n \"calendar-filter\",\n \"calendar-filter-outline\",\n \"calendar-heart\",\n \"calendar-heart-outline\",\n \"calendar-import\",\n \"calendar-import-outline\",\n \"calendar-lock\",\n \"calendar-lock-open\",\n \"calendar-lock-open-outline\",\n \"calendar-lock-outline\",\n \"calendar-minus\",\n \"calendar-minus-outline\",\n \"calendar-month\",\n \"calendar-month-outline\",\n \"calendar-multiple\",\n \"calendar-multiple-check\",\n \"calendar-multiselect\",\n \"calendar-multiselect-outline\",\n \"calendar-outline\",\n \"calendar-plus\",\n \"calendar-plus-outline\",\n \"calendar-question\",\n \"calendar-question-outline\",\n \"calendar-range\",\n \"calendar-range-outline\",\n \"calendar-refresh\",\n \"calendar-refresh-outline\",\n \"calendar-remove\",\n \"calendar-remove-outline\",\n \"calendar-search\",\n \"calendar-search-outline\",\n \"calendar-star\",\n \"calendar-star-four-points\",\n \"calendar-star-outline\",\n \"calendar-start\",\n \"calendar-start-outline\",\n \"calendar-sync\",\n \"calendar-sync-outline\",\n \"calendar-text\",\n \"calendar-text-outline\",\n \"calendar-today\",\n \"calendar-today-outline\",\n \"calendar-week\",\n \"calendar-week-begin\",\n \"calendar-week-begin-outline\",\n \"calendar-week-outline\",\n \"calendar-weekend\",\n \"calendar-weekend-outline\",\n \"call-made\",\n \"call-merge\",\n \"call-missed\",\n \"call-received\",\n \"call-split\",\n \"camcorder\",\n \"camcorder-off\",\n \"camera\",\n \"camera-account\",\n \"camera-burst\",\n \"camera-control\",\n \"camera-document\",\n \"camera-document-off\",\n \"camera-enhance\",\n \"camera-enhance-outline\",\n \"camera-flip\",\n \"camera-flip-outline\",\n \"camera-front\",\n \"camera-front-variant\",\n \"camera-gopro\",\n \"camera-image\",\n \"camera-iris\",\n \"camera-lock\",\n \"camera-lock-open\",\n \"camera-lock-open-outline\",\n \"camera-lock-outline\",\n \"camera-marker\",\n \"camera-marker-outline\",\n \"camera-metering-center\",\n \"camera-metering-matrix\",\n \"camera-metering-partial\",\n \"camera-metering-spot\",\n \"camera-off\",\n \"camera-off-outline\",\n \"camera-outline\",\n \"camera-party-mode\",\n \"camera-plus\",\n \"camera-plus-outline\",\n \"camera-rear\",\n \"camera-rear-variant\",\n \"camera-retake\",\n \"camera-retake-outline\",\n \"camera-switch\",\n \"camera-switch-outline\",\n \"camera-timer\",\n \"camera-wireless\",\n \"camera-wireless-outline\",\n \"campfire\",\n \"cancel\",\n \"candelabra\",\n \"candelabra-fire\",\n \"candle\",\n \"candy\",\n \"candy-off\",\n \"candy-off-outline\",\n \"candy-outline\",\n \"candycane\",\n \"cannabis\",\n \"cannabis-off\",\n \"caps-lock\",\n \"car\",\n \"car-2-plus\",\n \"car-3-plus\",\n \"car-arrow-left\",\n \"car-arrow-right\",\n \"car-back\",\n \"car-battery\",\n \"car-brake-abs\",\n \"car-brake-alert\",\n \"car-brake-fluid-level\",\n \"car-brake-hold\",\n \"car-brake-low-pressure\",\n \"car-brake-parking\",\n \"car-brake-retarder\",\n \"car-brake-temperature\",\n \"car-brake-worn-linings\",\n \"car-child-seat\",\n \"car-clock\",\n \"car-clutch\",\n \"car-cog\",\n \"car-connected\",\n \"car-convertible\",\n \"car-coolant-level\",\n \"car-cruise-control\",\n \"car-defrost-front\",\n \"car-defrost-rear\",\n \"car-door\",\n \"car-door-lock\",\n \"car-door-lock-open\",\n \"car-electric\",\n \"car-electric-outline\",\n \"car-emergency\",\n \"car-esp\",\n \"car-estate\",\n \"car-hatchback\",\n \"car-info\",\n \"car-key\",\n \"car-lifted-pickup\",\n \"car-light-alert\",\n \"car-light-dimmed\",\n \"car-light-fog\",\n \"car-light-high\",\n \"car-limousine\",\n \"car-multiple\",\n \"car-off\",\n \"car-outline\",\n \"car-parking-lights\",\n \"car-pickup\",\n \"car-search\",\n \"car-search-outline\",\n \"car-seat\",\n \"car-seat-cooler\",\n \"car-seat-heater\",\n \"car-select\",\n \"car-settings\",\n \"car-shift-pattern\",\n \"car-side\",\n \"car-speed-limiter\",\n \"car-sports\",\n \"car-tire-alert\",\n \"car-traction-control\",\n \"car-turbocharger\",\n \"car-wash\",\n \"car-windshield\",\n \"car-windshield-outline\",\n \"car-wireless\",\n \"car-wrench\",\n \"carabiner\",\n \"caravan\",\n \"card\",\n \"card-account-details\",\n \"card-account-details-outline\",\n \"card-account-details-star\",\n \"card-account-details-star-outline\",\n \"card-account-mail\",\n \"card-account-mail-outline\",\n \"card-account-phone\",\n \"card-account-phone-outline\",\n \"card-bulleted\",\n \"card-bulleted-off\",\n \"card-bulleted-off-outline\",\n \"card-bulleted-outline\",\n \"card-bulleted-settings\",\n \"card-bulleted-settings-outline\",\n \"card-minus\",\n \"card-minus-outline\",\n \"card-multiple\",\n \"card-multiple-outline\",\n \"card-off\",\n \"card-off-outline\",\n \"card-outline\",\n \"card-plus\",\n \"card-plus-outline\",\n \"card-remove\",\n \"card-remove-outline\",\n \"card-search\",\n \"card-search-outline\",\n \"card-text\",\n \"card-text-outline\",\n \"cards\",\n \"cards-club\",\n \"cards-club-outline\",\n \"cards-diamond\",\n \"cards-diamond-outline\",\n \"cards-heart\",\n \"cards-heart-outline\",\n \"cards-outline\",\n \"cards-playing\",\n \"cards-playing-club\",\n \"cards-playing-club-multiple\",\n \"cards-playing-club-multiple-outline\",\n \"cards-playing-club-outline\",\n \"cards-playing-diamond\",\n \"cards-playing-diamond-multiple\",\n \"cards-playing-diamond-multiple-outline\",\n \"cards-playing-diamond-outline\",\n \"cards-playing-heart\",\n \"cards-playing-heart-multiple\",\n \"cards-playing-heart-multiple-outline\",\n \"cards-playing-heart-outline\",\n \"cards-playing-outline\",\n \"cards-playing-spade\",\n \"cards-playing-spade-multiple\",\n \"cards-playing-spade-multiple-outline\",\n \"cards-playing-spade-outline\",\n \"cards-spade\",\n \"cards-spade-outline\",\n \"cards-variant\",\n \"carrot\",\n \"cart\",\n \"cart-arrow-down\",\n \"cart-arrow-right\",\n \"cart-arrow-up\",\n \"cart-check\",\n \"cart-heart\",\n \"cart-minus\",\n \"cart-off\",\n \"cart-outline\",\n \"cart-percent\",\n \"cart-plus\",\n \"cart-remove\",\n \"cart-variant\",\n \"case-sensitive-alt\",\n \"cash\",\n \"cash-100\",\n \"cash-check\",\n \"cash-clock\",\n \"cash-edit\",\n \"cash-fast\",\n \"cash-lock\",\n \"cash-lock-open\",\n \"cash-marker\",\n \"cash-minus\",\n \"cash-multiple\",\n \"cash-off\",\n \"cash-plus\",\n \"cash-refund\",\n \"cash-register\",\n \"cash-remove\",\n \"cash-sync\",\n \"cassette\",\n \"cast\",\n \"cast-audio\",\n \"cast-audio-variant\",\n \"cast-connected\",\n \"cast-education\",\n \"cast-off\",\n \"cast-variant\",\n \"castle\",\n \"cat\",\n \"cctv\",\n \"cctv-off\",\n \"ceiling-fan\",\n \"ceiling-fan-light\",\n \"ceiling-light\",\n \"ceiling-light-multiple\",\n \"ceiling-light-multiple-outline\",\n \"ceiling-light-outline\",\n \"cellphone\",\n \"cellphone-arrow-down\",\n \"cellphone-arrow-down-variant\",\n \"cellphone-basic\",\n \"cellphone-charging\",\n \"cellphone-check\",\n \"cellphone-cog\",\n \"cellphone-dock\",\n \"cellphone-information\",\n \"cellphone-key\",\n \"cellphone-link\",\n \"cellphone-link-off\",\n \"cellphone-lock\",\n \"cellphone-marker\",\n \"cellphone-message\",\n \"cellphone-message-off\",\n \"cellphone-nfc\",\n \"cellphone-nfc-off\",\n \"cellphone-off\",\n \"cellphone-play\",\n \"cellphone-remove\",\n \"cellphone-screenshot\",\n \"cellphone-settings\",\n \"cellphone-sound\",\n \"cellphone-text\",\n \"cellphone-wireless\",\n \"centos\",\n \"certificate\",\n \"certificate-outline\",\n \"chair-rolling\",\n \"chair-school\",\n \"chandelier\",\n \"charity\",\n \"charity-search\",\n \"chart-arc\",\n \"chart-areaspline\",\n \"chart-areaspline-variant\",\n \"chart-bar\",\n \"chart-bar-stacked\",\n \"chart-bell-curve\",\n \"chart-bell-curve-cumulative\",\n \"chart-box\",\n \"chart-box-multiple\",\n \"chart-box-multiple-outline\",\n \"chart-box-outline\",\n \"chart-box-plus-outline\",\n \"chart-bubble\",\n \"chart-donut\",\n \"chart-donut-variant\",\n \"chart-gantt\",\n \"chart-histogram\",\n \"chart-line\",\n \"chart-line-stacked\",\n \"chart-line-variant\",\n \"chart-multiline\",\n \"chart-multiple\",\n \"chart-pie\",\n \"chart-pie-outline\",\n \"chart-ppf\",\n \"chart-sankey\",\n \"chart-sankey-variant\",\n \"chart-scatter-plot\",\n \"chart-scatter-plot-hexbin\",\n \"chart-timeline\",\n \"chart-timeline-variant\",\n \"chart-timeline-variant-shimmer\",\n \"chart-tree\",\n \"chart-waterfall\",\n \"chat\",\n \"chat-alert\",\n \"chat-alert-outline\",\n \"chat-minus\",\n \"chat-minus-outline\",\n \"chat-outline\",\n \"chat-plus\",\n \"chat-plus-outline\",\n \"chat-processing\",\n \"chat-processing-outline\",\n \"chat-question\",\n \"chat-question-outline\",\n \"chat-remove\",\n \"chat-remove-outline\",\n \"chat-sleep\",\n \"chat-sleep-outline\",\n \"check\",\n \"check-all\",\n \"check-bold\",\n \"check-circle\",\n \"check-circle-outline\",\n \"check-decagram\",\n \"check-decagram-outline\",\n \"check-network\",\n \"check-network-outline\",\n \"check-outline\",\n \"check-underline\",\n \"check-underline-circle\",\n \"check-underline-circle-outline\",\n \"checkbook\",\n \"checkbook-arrow-left\",\n \"checkbook-arrow-right\",\n \"checkbox-blank\",\n \"checkbox-blank-badge\",\n \"checkbox-blank-badge-outline\",\n \"checkbox-blank-circle\",\n \"checkbox-blank-circle-outline\",\n \"checkbox-blank-off\",\n \"checkbox-blank-off-outline\",\n \"checkbox-blank-outline\",\n \"checkbox-intermediate\",\n \"checkbox-intermediate-variant\",\n \"checkbox-marked\",\n \"checkbox-marked-circle\",\n \"checkbox-marked-circle-auto-outline\",\n \"checkbox-marked-circle-minus-outline\",\n \"checkbox-marked-circle-outline\",\n \"checkbox-marked-circle-plus-outline\",\n \"checkbox-marked-outline\",\n \"checkbox-multiple-blank\",\n \"checkbox-multiple-blank-circle\",\n \"checkbox-multiple-blank-circle-outline\",\n \"checkbox-multiple-blank-outline\",\n \"checkbox-multiple-marked\",\n \"checkbox-multiple-marked-circle\",\n \"checkbox-multiple-marked-circle-outline\",\n \"checkbox-multiple-marked-outline\",\n \"checkbox-multiple-outline\",\n \"checkbox-outline\",\n \"checkerboard\",\n \"checkerboard-minus\",\n \"checkerboard-plus\",\n \"checkerboard-remove\",\n \"cheese\",\n \"cheese-off\",\n \"chef-hat\",\n \"chemical-weapon\",\n \"chess-bishop\",\n \"chess-king\",\n \"chess-knight\",\n \"chess-pawn\",\n \"chess-queen\",\n \"chess-rook\",\n \"chevron-double-down\",\n \"chevron-double-left\",\n \"chevron-double-right\",\n \"chevron-double-up\",\n \"chevron-down\",\n \"chevron-down-box\",\n \"chevron-down-box-outline\",\n \"chevron-down-circle\",\n \"chevron-down-circle-outline\",\n \"chevron-left\",\n \"chevron-left-box\",\n \"chevron-left-box-outline\",\n \"chevron-left-circle\",\n \"chevron-left-circle-outline\",\n \"chevron-right\",\n \"chevron-right-box\",\n \"chevron-right-box-outline\",\n \"chevron-right-circle\",\n \"chevron-right-circle-outline\",\n \"chevron-triple-down\",\n \"chevron-triple-left\",\n \"chevron-triple-right\",\n \"chevron-triple-up\",\n \"chevron-up\",\n \"chevron-up-box\",\n \"chevron-up-box-outline\",\n \"chevron-up-circle\",\n \"chevron-up-circle-outline\",\n \"chili-alert\",\n \"chili-alert-outline\",\n \"chili-hot\",\n \"chili-hot-outline\",\n \"chili-medium\",\n \"chili-medium-outline\",\n \"chili-mild\",\n \"chili-mild-outline\",\n \"chili-off\",\n \"chili-off-outline\",\n \"chip\",\n \"church\",\n \"church-outline\",\n \"cigar\",\n \"cigar-off\",\n \"circle\",\n \"circle-box\",\n \"circle-box-outline\",\n \"circle-double\",\n \"circle-edit-outline\",\n \"circle-expand\",\n \"circle-half\",\n \"circle-half-full\",\n \"circle-medium\",\n \"circle-multiple\",\n \"circle-multiple-outline\",\n \"circle-off-outline\",\n \"circle-opacity\",\n \"circle-outline\",\n \"circle-slice-1\",\n \"circle-slice-2\",\n \"circle-slice-3\",\n \"circle-slice-4\",\n \"circle-slice-5\",\n \"circle-slice-6\",\n \"circle-slice-7\",\n \"circle-slice-8\",\n \"circle-small\",\n \"circular-saw\",\n \"city\",\n \"city-switch\",\n \"city-variant\",\n \"city-variant-outline\",\n \"clipboard\",\n \"clipboard-account\",\n \"clipboard-account-outline\",\n \"clipboard-alert\",\n \"clipboard-alert-outline\",\n \"clipboard-arrow-down\",\n \"clipboard-arrow-down-outline\",\n \"clipboard-arrow-left\",\n \"clipboard-arrow-left-outline\",\n \"clipboard-arrow-right\",\n \"clipboard-arrow-right-outline\",\n \"clipboard-arrow-up\",\n \"clipboard-arrow-up-outline\",\n \"clipboard-check\",\n \"clipboard-check-multiple\",\n \"clipboard-check-multiple-outline\",\n \"clipboard-check-outline\",\n \"clipboard-clock\",\n \"clipboard-clock-outline\",\n \"clipboard-edit\",\n \"clipboard-edit-outline\",\n \"clipboard-file\",\n \"clipboard-file-outline\",\n \"clipboard-flow\",\n \"clipboard-flow-outline\",\n \"clipboard-list\",\n \"clipboard-list-outline\",\n \"clipboard-minus\",\n \"clipboard-minus-outline\",\n \"clipboard-multiple\",\n \"clipboard-multiple-outline\",\n \"clipboard-off\",\n \"clipboard-off-outline\",\n \"clipboard-outline\",\n \"clipboard-play\",\n \"clipboard-play-multiple\",\n \"clipboard-play-multiple-outline\",\n \"clipboard-play-outline\",\n \"clipboard-plus\",\n \"clipboard-plus-outline\",\n \"clipboard-pulse\",\n \"clipboard-pulse-outline\",\n \"clipboard-remove\",\n \"clipboard-remove-outline\",\n \"clipboard-search\",\n \"clipboard-search-outline\",\n \"clipboard-text\",\n \"clipboard-text-clock\",\n \"clipboard-text-clock-outline\",\n \"clipboard-text-multiple\",\n \"clipboard-text-multiple-outline\",\n \"clipboard-text-off\",\n \"clipboard-text-off-outline\",\n \"clipboard-text-outline\",\n \"clipboard-text-play\",\n \"clipboard-text-play-outline\",\n \"clipboard-text-search\",\n \"clipboard-text-search-outline\",\n \"clippy\",\n \"clock\",\n \"clock-alert\",\n \"clock-alert-outline\",\n \"clock-check\",\n \"clock-check-outline\",\n \"clock-digital\",\n \"clock-edit\",\n \"clock-edit-outline\",\n \"clock-end\",\n \"clock-fast\",\n \"clock-in\",\n \"clock-minus\",\n \"clock-minus-outline\",\n \"clock-out\",\n \"clock-outline\",\n \"clock-plus\",\n \"clock-plus-outline\",\n \"clock-remove\",\n \"clock-remove-outline\",\n \"clock-star-four-points\",\n \"clock-star-four-points-outline\",\n \"clock-start\",\n \"clock-time-eight\",\n \"clock-time-eight-outline\",\n \"clock-time-eleven\",\n \"clock-time-eleven-outline\",\n \"clock-time-five\",\n \"clock-time-five-outline\",\n \"clock-time-four\",\n \"clock-time-four-outline\",\n \"clock-time-nine\",\n \"clock-time-nine-outline\",\n \"clock-time-one\",\n \"clock-time-one-outline\",\n \"clock-time-seven\",\n \"clock-time-seven-outline\",\n \"clock-time-six\",\n \"clock-time-six-outline\",\n \"clock-time-ten\",\n \"clock-time-ten-outline\",\n \"clock-time-three\",\n \"clock-time-three-outline\",\n \"clock-time-twelve\",\n \"clock-time-twelve-outline\",\n \"clock-time-two\",\n \"clock-time-two-outline\",\n \"close\",\n \"close-box\",\n \"close-box-multiple\",\n \"close-box-multiple-outline\",\n \"close-box-outline\",\n \"close-circle\",\n \"close-circle-multiple\",\n \"close-circle-multiple-outline\",\n \"close-circle-outline\",\n \"close-network\",\n \"close-network-outline\",\n \"close-octagon\",\n \"close-octagon-outline\",\n \"close-outline\",\n \"close-thick\",\n \"closed-caption\",\n \"closed-caption-outline\",\n \"cloud\",\n \"cloud-alert\",\n \"cloud-alert-outline\",\n \"cloud-arrow-down\",\n \"cloud-arrow-down-outline\",\n \"cloud-arrow-left\",\n \"cloud-arrow-left-outline\",\n \"cloud-arrow-right\",\n \"cloud-arrow-right-outline\",\n \"cloud-arrow-up\",\n \"cloud-arrow-up-outline\",\n \"cloud-braces\",\n \"cloud-cancel\",\n \"cloud-cancel-outline\",\n \"cloud-check\",\n \"cloud-check-outline\",\n \"cloud-check-variant\",\n \"cloud-check-variant-outline\",\n \"cloud-circle\",\n \"cloud-circle-outline\",\n \"cloud-clock\",\n \"cloud-clock-outline\",\n \"cloud-cog\",\n \"cloud-cog-outline\",\n \"cloud-download\",\n \"cloud-download-outline\",\n \"cloud-key\",\n \"cloud-key-outline\",\n \"cloud-lock\",\n \"cloud-lock-open\",\n \"cloud-lock-open-outline\",\n \"cloud-lock-outline\",\n \"cloud-minus\",\n \"cloud-minus-outline\",\n \"cloud-off\",\n \"cloud-off-outline\",\n \"cloud-outline\",\n \"cloud-percent\",\n \"cloud-percent-outline\",\n \"cloud-plus\",\n \"cloud-plus-outline\",\n \"cloud-print\",\n \"cloud-print-outline\",\n \"cloud-question\",\n \"cloud-question-outline\",\n \"cloud-refresh\",\n \"cloud-refresh-outline\",\n \"cloud-refresh-variant\",\n \"cloud-refresh-variant-outline\",\n \"cloud-remove\",\n \"cloud-remove-outline\",\n \"cloud-search\",\n \"cloud-search-outline\",\n \"cloud-sync\",\n \"cloud-sync-outline\",\n \"cloud-tags\",\n \"cloud-upload\",\n \"cloud-upload-outline\",\n \"clouds\",\n \"clover\",\n \"clover-outline\",\n \"coach-lamp\",\n \"coach-lamp-variant\",\n \"coat-rack\",\n \"code-array\",\n \"code-block-braces\",\n \"code-block-brackets\",\n \"code-block-parentheses\",\n \"code-block-tags\",\n \"code-braces\",\n \"code-braces-box\",\n \"code-brackets\",\n \"code-equal\",\n \"code-greater-than\",\n \"code-greater-than-or-equal\",\n \"code-json\",\n \"code-less-than\",\n \"code-less-than-or-equal\",\n \"code-not-equal\",\n \"code-not-equal-variant\",\n \"code-parentheses\",\n \"code-parentheses-box\",\n \"code-string\",\n \"code-tags\",\n \"code-tags-check\",\n \"codepen\",\n \"coffee\",\n \"coffee-maker\",\n \"coffee-maker-check\",\n \"coffee-maker-check-outline\",\n \"coffee-maker-outline\",\n \"coffee-off\",\n \"coffee-off-outline\",\n \"coffee-outline\",\n \"coffee-to-go\",\n \"coffee-to-go-outline\",\n \"coffin\",\n \"cog\",\n \"cog-box\",\n \"cog-clockwise\",\n \"cog-counterclockwise\",\n \"cog-off\",\n \"cog-off-outline\",\n \"cog-outline\",\n \"cog-pause\",\n \"cog-pause-outline\",\n \"cog-play\",\n \"cog-play-outline\",\n \"cog-refresh\",\n \"cog-refresh-outline\",\n \"cog-stop\",\n \"cog-stop-outline\",\n \"cog-sync\",\n \"cog-sync-outline\",\n \"cog-transfer\",\n \"cog-transfer-outline\",\n \"cogs\",\n \"collage\",\n \"collapse-all\",\n \"collapse-all-outline\",\n \"color-helper\",\n \"comma\",\n \"comma-box\",\n \"comma-box-outline\",\n \"comma-circle\",\n \"comma-circle-outline\",\n \"comment\",\n \"comment-account\",\n \"comment-account-outline\",\n \"comment-alert\",\n \"comment-alert-outline\",\n \"comment-arrow-left\",\n \"comment-arrow-left-outline\",\n \"comment-arrow-right\",\n \"comment-arrow-right-outline\",\n \"comment-bookmark\",\n \"comment-bookmark-outline\",\n \"comment-check\",\n \"comment-check-outline\",\n \"comment-edit\",\n \"comment-edit-outline\",\n \"comment-eye\",\n \"comment-eye-outline\",\n \"comment-flash\",\n \"comment-flash-outline\",\n \"comment-minus\",\n \"comment-minus-outline\",\n \"comment-multiple\",\n \"comment-multiple-outline\",\n \"comment-off\",\n \"comment-off-outline\",\n \"comment-outline\",\n \"comment-plus\",\n \"comment-plus-outline\",\n \"comment-processing\",\n \"comment-processing-outline\",\n \"comment-question\",\n \"comment-question-outline\",\n \"comment-quote\",\n \"comment-quote-outline\",\n \"comment-remove\",\n \"comment-remove-outline\",\n \"comment-search\",\n \"comment-search-outline\",\n \"comment-text\",\n \"comment-text-multiple\",\n \"comment-text-multiple-outline\",\n \"comment-text-outline\",\n \"compare\",\n \"compare-horizontal\",\n \"compare-remove\",\n \"compare-vertical\",\n \"compass\",\n \"compass-off\",\n \"compass-off-outline\",\n \"compass-outline\",\n \"compass-rose\",\n \"compost\",\n \"cone\",\n \"cone-off\",\n \"connection\",\n \"console\",\n \"console-line\",\n \"console-network\",\n \"console-network-outline\",\n \"consolidate\",\n \"contactless-payment\",\n \"contactless-payment-circle\",\n \"contactless-payment-circle-outline\",\n \"contacts\",\n \"contacts-outline\",\n \"contain\",\n \"contain-end\",\n \"contain-start\",\n \"content-copy\",\n \"content-cut\",\n \"content-duplicate\",\n \"content-paste\",\n \"content-save\",\n \"content-save-alert\",\n \"content-save-alert-outline\",\n \"content-save-all\",\n \"content-save-all-outline\",\n \"content-save-check\",\n \"content-save-check-outline\",\n \"content-save-cog\",\n \"content-save-cog-outline\",\n \"content-save-edit\",\n \"content-save-edit-outline\",\n \"content-save-minus\",\n \"content-save-minus-outline\",\n \"content-save-move\",\n \"content-save-move-outline\",\n \"content-save-off\",\n \"content-save-off-outline\",\n \"content-save-outline\",\n \"content-save-plus\",\n \"content-save-plus-outline\",\n \"content-save-settings\",\n \"content-save-settings-outline\",\n \"contrast\",\n \"contrast-box\",\n \"contrast-circle\",\n \"controller\",\n \"controller-classic\",\n \"controller-classic-outline\",\n \"controller-off\",\n \"cookie\",\n \"cookie-alert\",\n \"cookie-alert-outline\",\n \"cookie-check\",\n \"cookie-check-outline\",\n \"cookie-clock\",\n \"cookie-clock-outline\",\n \"cookie-cog\",\n \"cookie-cog-outline\",\n \"cookie-edit\",\n \"cookie-edit-outline\",\n \"cookie-lock\",\n \"cookie-lock-outline\",\n \"cookie-minus\",\n \"cookie-minus-outline\",\n \"cookie-off\",\n \"cookie-off-outline\",\n \"cookie-outline\",\n \"cookie-plus\",\n \"cookie-plus-outline\",\n \"cookie-refresh\",\n \"cookie-refresh-outline\",\n \"cookie-remove\",\n \"cookie-remove-outline\",\n \"cookie-settings\",\n \"cookie-settings-outline\",\n \"coolant-temperature\",\n \"copyleft\",\n \"copyright\",\n \"cordova\",\n \"corn\",\n \"corn-off\",\n \"cosine-wave\",\n \"counter\",\n \"countertop\",\n \"countertop-outline\",\n \"cow\",\n \"cow-off\",\n \"cpu-32-bit\",\n \"cpu-64-bit\",\n \"cradle\",\n \"cradle-outline\",\n \"crane\",\n \"creation\",\n \"creation-outline\",\n \"creative-commons\",\n \"credit-card\",\n \"credit-card-check\",\n \"credit-card-check-outline\",\n \"credit-card-chip\",\n \"credit-card-chip-outline\",\n \"credit-card-clock\",\n \"credit-card-clock-outline\",\n \"credit-card-edit\",\n \"credit-card-edit-outline\",\n \"credit-card-fast\",\n \"credit-card-fast-outline\",\n \"credit-card-lock\",\n \"credit-card-lock-outline\",\n \"credit-card-marker\",\n \"credit-card-marker-outline\",\n \"credit-card-minus\",\n \"credit-card-minus-outline\",\n \"credit-card-multiple\",\n \"credit-card-multiple-outline\",\n \"credit-card-off\",\n \"credit-card-off-outline\",\n \"credit-card-outline\",\n \"credit-card-plus\",\n \"credit-card-plus-outline\",\n \"credit-card-refresh\",\n \"credit-card-refresh-outline\",\n \"credit-card-refund\",\n \"credit-card-refund-outline\",\n \"credit-card-remove\",\n \"credit-card-remove-outline\",\n \"credit-card-scan\",\n \"credit-card-scan-outline\",\n \"credit-card-search\",\n \"credit-card-search-outline\",\n \"credit-card-settings\",\n \"credit-card-settings-outline\",\n \"credit-card-sync\",\n \"credit-card-sync-outline\",\n \"credit-card-wireless\",\n \"credit-card-wireless-off\",\n \"credit-card-wireless-off-outline\",\n \"credit-card-wireless-outline\",\n \"cricket\",\n \"crop\",\n \"crop-free\",\n \"crop-landscape\",\n \"crop-portrait\",\n \"crop-rotate\",\n \"crop-square\",\n \"cross\",\n \"cross-bolnisi\",\n \"cross-celtic\",\n \"cross-outline\",\n \"crosshairs\",\n \"crosshairs-gps\",\n \"crosshairs-off\",\n \"crosshairs-question\",\n \"crowd\",\n \"crown\",\n \"crown-circle\",\n \"crown-circle-outline\",\n \"crown-outline\",\n \"cryengine\",\n \"crystal-ball\",\n \"cube\",\n \"cube-off\",\n \"cube-off-outline\",\n \"cube-outline\",\n \"cube-scan\",\n \"cube-send\",\n \"cube-unfolded\",\n \"cup\",\n \"cup-off\",\n \"cup-off-outline\",\n \"cup-outline\",\n \"cup-water\",\n \"cupboard\",\n \"cupboard-outline\",\n \"cupcake\",\n \"curling\",\n \"currency-bdt\",\n \"currency-brl\",\n \"currency-btc\",\n \"currency-cny\",\n \"currency-eth\",\n \"currency-eur\",\n \"currency-eur-off\",\n \"currency-fra\",\n \"currency-gbp\",\n \"currency-ils\",\n \"currency-inr\",\n \"currency-jpy\",\n \"currency-krw\",\n \"currency-kzt\",\n \"currency-mnt\",\n \"currency-ngn\",\n \"currency-php\",\n \"currency-rial\",\n \"currency-rub\",\n \"currency-rupee\",\n \"currency-sign\",\n \"currency-thb\",\n \"currency-try\",\n \"currency-twd\",\n \"currency-uah\",\n \"currency-usd\",\n \"currency-usd-off\",\n \"current-ac\",\n \"current-dc\",\n \"cursor-default\",\n \"cursor-default-click\",\n \"cursor-default-click-outline\",\n \"cursor-default-gesture\",\n \"cursor-default-gesture-outline\",\n \"cursor-default-outline\",\n \"cursor-move\",\n \"cursor-pointer\",\n \"cursor-text\",\n \"curtains\",\n \"curtains-closed\",\n \"cylinder\",\n \"cylinder-off\",\n \"dance-ballroom\",\n \"dance-pole\",\n \"data-matrix\",\n \"data-matrix-edit\",\n \"data-matrix-minus\",\n \"data-matrix-plus\",\n \"data-matrix-remove\",\n \"data-matrix-scan\",\n \"database\",\n \"database-alert\",\n \"database-alert-outline\",\n \"database-arrow-down\",\n \"database-arrow-down-outline\",\n \"database-arrow-left\",\n \"database-arrow-left-outline\",\n \"database-arrow-right\",\n \"database-arrow-right-outline\",\n \"database-arrow-up\",\n \"database-arrow-up-outline\",\n \"database-check\",\n \"database-check-outline\",\n \"database-clock\",\n \"database-clock-outline\",\n \"database-cog\",\n \"database-cog-outline\",\n \"database-edit\",\n \"database-edit-outline\",\n \"database-export\",\n \"database-export-outline\",\n \"database-eye\",\n \"database-eye-off\",\n \"database-eye-off-outline\",\n \"database-eye-outline\",\n \"database-import\",\n \"database-import-outline\",\n \"database-lock\",\n \"database-lock-outline\",\n \"database-marker\",\n \"database-marker-outline\",\n \"database-minus\",\n \"database-minus-outline\",\n \"database-off\",\n \"database-off-outline\",\n \"database-outline\",\n \"database-plus\",\n \"database-plus-outline\",\n \"database-refresh\",\n \"database-refresh-outline\",\n \"database-remove\",\n \"database-remove-outline\",\n \"database-search\",\n \"database-search-outline\",\n \"database-settings\",\n \"database-settings-outline\",\n \"database-sync\",\n \"database-sync-outline\",\n \"death-star\",\n \"death-star-variant\",\n \"deathly-hallows\",\n \"debian\",\n \"debug-step-into\",\n \"debug-step-out\",\n \"debug-step-over\",\n \"decagram\",\n \"decagram-outline\",\n \"decimal\",\n \"decimal-comma\",\n \"decimal-comma-decrease\",\n \"decimal-comma-increase\",\n \"decimal-decrease\",\n \"decimal-increase\",\n \"delete\",\n \"delete-alert\",\n \"delete-alert-outline\",\n \"delete-circle\",\n \"delete-circle-outline\",\n \"delete-clock\",\n \"delete-clock-outline\",\n \"delete-empty\",\n \"delete-empty-outline\",\n \"delete-forever\",\n \"delete-forever-outline\",\n \"delete-off\",\n \"delete-off-outline\",\n \"delete-outline\",\n \"delete-restore\",\n \"delete-sweep\",\n \"delete-sweep-outline\",\n \"delete-variant\",\n \"delta\",\n \"desk\",\n \"desk-lamp\",\n \"desk-lamp-off\",\n \"desk-lamp-on\",\n \"deskphone\",\n \"desktop-classic\",\n \"desktop-tower\",\n \"desktop-tower-monitor\",\n \"details\",\n \"dev-to\",\n \"developer-board\",\n \"deviantart\",\n \"devices\",\n \"dharmachakra\",\n \"diabetes\",\n \"dialpad\",\n \"diameter\",\n \"diameter-outline\",\n \"diameter-variant\",\n \"diamond\",\n \"diamond-outline\",\n \"diamond-stone\",\n \"diaper-outline\",\n \"dice-1\",\n \"dice-1-outline\",\n \"dice-2\",\n \"dice-2-outline\",\n \"dice-3\",\n \"dice-3-outline\",\n \"dice-4\",\n \"dice-4-outline\",\n \"dice-5\",\n \"dice-5-outline\",\n \"dice-6\",\n \"dice-6-outline\",\n \"dice-d10\",\n \"dice-d10-outline\",\n \"dice-d12\",\n \"dice-d12-outline\",\n \"dice-d20\",\n \"dice-d20-outline\",\n \"dice-d4\",\n \"dice-d4-outline\",\n \"dice-d6\",\n \"dice-d6-outline\",\n \"dice-d8\",\n \"dice-d8-outline\",\n \"dice-multiple\",\n \"dice-multiple-outline\",\n \"digital-ocean\",\n \"dip-switch\",\n \"directions\",\n \"directions-fork\",\n \"disc\",\n \"disc-alert\",\n \"disc-player\",\n \"dishwasher\",\n \"dishwasher-alert\",\n \"dishwasher-off\",\n \"disqus\",\n \"distribute-horizontal-center\",\n \"distribute-horizontal-left\",\n \"distribute-horizontal-right\",\n \"distribute-vertical-bottom\",\n \"distribute-vertical-center\",\n \"distribute-vertical-top\",\n \"diversify\",\n \"diving\",\n \"diving-flippers\",\n \"diving-helmet\",\n \"diving-scuba\",\n \"diving-scuba-flag\",\n \"diving-scuba-mask\",\n \"diving-scuba-tank\",\n \"diving-scuba-tank-multiple\",\n \"diving-snorkel\",\n \"division\",\n \"division-box\",\n \"dlna\",\n \"dna\",\n \"dns\",\n \"dns-outline\",\n \"dock-bottom\",\n \"dock-left\",\n \"dock-right\",\n \"dock-top\",\n \"dock-window\",\n \"docker\",\n \"doctor\",\n \"dog\",\n \"dog-service\",\n \"dog-side\",\n \"dog-side-off\",\n \"dolby\",\n \"dolly\",\n \"dolphin\",\n \"domain\",\n \"domain-off\",\n \"domain-plus\",\n \"domain-remove\",\n \"domain-switch\",\n \"dome-light\",\n \"domino-mask\",\n \"donkey\",\n \"door\",\n \"door-closed\",\n \"door-closed-cancel\",\n \"door-closed-lock\",\n \"door-open\",\n \"door-sliding\",\n \"door-sliding-lock\",\n \"door-sliding-open\",\n \"doorbell\",\n \"doorbell-video\",\n \"dot-net\",\n \"dots-circle\",\n \"dots-grid\",\n \"dots-hexagon\",\n \"dots-horizontal\",\n \"dots-horizontal-circle\",\n \"dots-horizontal-circle-outline\",\n \"dots-square\",\n \"dots-triangle\",\n \"dots-vertical\",\n \"dots-vertical-circle\",\n \"dots-vertical-circle-outline\",\n \"download\",\n \"download-box\",\n \"download-box-outline\",\n \"download-circle\",\n \"download-circle-outline\",\n \"download-lock\",\n \"download-lock-outline\",\n \"download-multiple\",\n \"download-multiple-outline\",\n \"download-network\",\n \"download-network-outline\",\n \"download-off\",\n \"download-off-outline\",\n \"download-outline\",\n \"drag\",\n \"drag-horizontal\",\n \"drag-horizontal-variant\",\n \"drag-variant\",\n \"drag-vertical\",\n \"drag-vertical-variant\",\n \"drama-masks\",\n \"draw\",\n \"draw-pen\",\n \"drawing\",\n \"drawing-box\",\n \"dresser\",\n \"dresser-outline\",\n \"drone\",\n \"dropbox\",\n \"drupal\",\n \"duck\",\n \"dumbbell\",\n \"dump-truck\",\n \"ear-hearing\",\n \"ear-hearing-loop\",\n \"ear-hearing-off\",\n \"earbuds\",\n \"earbuds-off\",\n \"earbuds-off-outline\",\n \"earbuds-outline\",\n \"earth\",\n \"earth-arrow-down\",\n \"earth-arrow-left\",\n \"earth-arrow-right\",\n \"earth-arrow-up\",\n \"earth-box\",\n \"earth-box-minus\",\n \"earth-box-off\",\n \"earth-box-plus\",\n \"earth-box-remove\",\n \"earth-minus\",\n \"earth-off\",\n \"earth-plus\",\n \"earth-remove\",\n \"egg\",\n \"egg-easter\",\n \"egg-fried\",\n \"egg-off\",\n \"egg-off-outline\",\n \"egg-outline\",\n \"eiffel-tower\",\n \"eight-track\",\n \"eject\",\n \"eject-circle\",\n \"eject-circle-outline\",\n \"eject-outline\",\n \"electric-switch\",\n \"electric-switch-closed\",\n \"electron-framework\",\n \"elephant\",\n \"elevation-decline\",\n \"elevation-rise\",\n \"elevator\",\n \"elevator-down\",\n \"elevator-passenger\",\n \"elevator-passenger-off\",\n \"elevator-passenger-off-outline\",\n \"elevator-passenger-outline\",\n \"elevator-up\",\n \"ellipse\",\n \"ellipse-outline\",\n \"email\",\n \"email-alert\",\n \"email-alert-outline\",\n \"email-arrow-left\",\n \"email-arrow-left-outline\",\n \"email-arrow-right\",\n \"email-arrow-right-outline\",\n \"email-box\",\n \"email-check\",\n \"email-check-outline\",\n \"email-edit\",\n \"email-edit-outline\",\n \"email-fast\",\n \"email-fast-outline\",\n \"email-heart-outline\",\n \"email-lock\",\n \"email-lock-outline\",\n \"email-mark-as-unread\",\n \"email-minus\",\n \"email-minus-outline\",\n \"email-multiple\",\n \"email-multiple-outline\",\n \"email-newsletter\",\n \"email-off\",\n \"email-off-outline\",\n \"email-open\",\n \"email-open-heart-outline\",\n \"email-open-multiple\",\n \"email-open-multiple-outline\",\n \"email-open-outline\",\n \"email-outline\",\n \"email-plus\",\n \"email-plus-outline\",\n \"email-remove\",\n \"email-remove-outline\",\n \"email-seal\",\n \"email-seal-outline\",\n \"email-search\",\n \"email-search-outline\",\n \"email-sync\",\n \"email-sync-outline\",\n \"email-variant\",\n \"ember\",\n \"emby\",\n \"emoticon\",\n \"emoticon-angry\",\n \"emoticon-angry-outline\",\n \"emoticon-confused\",\n \"emoticon-confused-outline\",\n \"emoticon-cool\",\n \"emoticon-cool-outline\",\n \"emoticon-cry\",\n \"emoticon-cry-outline\",\n \"emoticon-dead\",\n \"emoticon-dead-outline\",\n \"emoticon-devil\",\n \"emoticon-devil-outline\",\n \"emoticon-excited\",\n \"emoticon-excited-outline\",\n \"emoticon-frown\",\n \"emoticon-frown-outline\",\n \"emoticon-happy\",\n \"emoticon-happy-outline\",\n \"emoticon-kiss\",\n \"emoticon-kiss-outline\",\n \"emoticon-lol\",\n \"emoticon-lol-outline\",\n \"emoticon-minus\",\n \"emoticon-minus-outline\",\n \"emoticon-neutral\",\n \"emoticon-neutral-outline\",\n \"emoticon-outline\",\n \"emoticon-plus\",\n \"emoticon-plus-outline\",\n \"emoticon-poop\",\n \"emoticon-poop-outline\",\n \"emoticon-remove\",\n \"emoticon-remove-outline\",\n \"emoticon-sad\",\n \"emoticon-sad-outline\",\n \"emoticon-sick\",\n \"emoticon-sick-outline\",\n \"emoticon-tongue\",\n \"emoticon-tongue-outline\",\n \"emoticon-wink\",\n \"emoticon-wink-outline\",\n \"engine\",\n \"engine-off\",\n \"engine-off-outline\",\n \"engine-outline\",\n \"epsilon\",\n \"equal\",\n \"equal-box\",\n \"equalizer\",\n \"equalizer-outline\",\n \"eraser\",\n \"eraser-variant\",\n \"escalator\",\n \"escalator-box\",\n \"escalator-down\",\n \"escalator-up\",\n \"eslint\",\n \"et\",\n \"ethereum\",\n \"ethernet\",\n \"ethernet-cable\",\n \"ethernet-cable-off\",\n \"ethernet-off\",\n \"ev-plug-ccs1\",\n \"ev-plug-ccs2\",\n \"ev-plug-chademo\",\n \"ev-plug-tesla\",\n \"ev-plug-type1\",\n \"ev-plug-type2\",\n \"ev-station\",\n \"evernote\",\n \"excavator\",\n \"exclamation\",\n \"exclamation-thick\",\n \"exit-run\",\n \"exit-to-app\",\n \"expand-all\",\n \"expand-all-outline\",\n \"expansion-card\",\n \"expansion-card-variant\",\n \"exponent\",\n \"exponent-box\",\n \"export\",\n \"export-variant\",\n \"eye\",\n \"eye-arrow-left\",\n \"eye-arrow-left-outline\",\n \"eye-arrow-right\",\n \"eye-arrow-right-outline\",\n \"eye-check\",\n \"eye-check-outline\",\n \"eye-circle\",\n \"eye-circle-outline\",\n \"eye-closed\",\n \"eye-lock\",\n \"eye-lock-open\",\n \"eye-lock-open-outline\",\n \"eye-lock-outline\",\n \"eye-minus\",\n \"eye-minus-outline\",\n \"eye-off\",\n \"eye-off-outline\",\n \"eye-outline\",\n \"eye-plus\",\n \"eye-plus-outline\",\n \"eye-refresh\",\n \"eye-refresh-outline\",\n \"eye-remove\",\n \"eye-remove-outline\",\n \"eye-settings\",\n \"eye-settings-outline\",\n \"eyedropper\",\n \"eyedropper-minus\",\n \"eyedropper-off\",\n \"eyedropper-plus\",\n \"eyedropper-remove\",\n \"eyedropper-variant\",\n \"face-agent\",\n \"face-man\",\n \"face-man-outline\",\n \"face-man-profile\",\n \"face-man-shimmer\",\n \"face-man-shimmer-outline\",\n \"face-mask\",\n \"face-mask-outline\",\n \"face-recognition\",\n \"face-woman\",\n \"face-woman-outline\",\n \"face-woman-profile\",\n \"face-woman-shimmer\",\n \"face-woman-shimmer-outline\",\n \"facebook\",\n \"facebook-gaming\",\n \"facebook-messenger\",\n \"facebook-workplace\",\n \"factory\",\n \"family-tree\",\n \"fan\",\n \"fan-alert\",\n \"fan-auto\",\n \"fan-chevron-down\",\n \"fan-chevron-up\",\n \"fan-clock\",\n \"fan-minus\",\n \"fan-off\",\n \"fan-plus\",\n \"fan-remove\",\n \"fan-speed-1\",\n \"fan-speed-2\",\n \"fan-speed-3\",\n \"fast-forward\",\n \"fast-forward-10\",\n \"fast-forward-15\",\n \"fast-forward-30\",\n \"fast-forward-45\",\n \"fast-forward-5\",\n \"fast-forward-60\",\n \"fast-forward-outline\",\n \"faucet\",\n \"faucet-variant\",\n \"fax\",\n \"feather\",\n \"feature-search\",\n \"feature-search-outline\",\n \"fedora\",\n \"fence\",\n \"fence-electric\",\n \"fencing\",\n \"ferris-wheel\",\n \"ferry\",\n \"file\",\n \"file-account\",\n \"file-account-outline\",\n \"file-alert\",\n \"file-alert-outline\",\n \"file-arrow-left-right\",\n \"file-arrow-left-right-outline\",\n \"file-arrow-up-down\",\n \"file-arrow-up-down-outline\",\n \"file-cabinet\",\n \"file-cad\",\n \"file-cad-box\",\n \"file-cancel\",\n \"file-cancel-outline\",\n \"file-certificate\",\n \"file-certificate-outline\",\n \"file-chart\",\n \"file-chart-check\",\n \"file-chart-check-outline\",\n \"file-chart-outline\",\n \"file-check\",\n \"file-check-outline\",\n \"file-clock\",\n \"file-clock-outline\",\n \"file-cloud\",\n \"file-cloud-outline\",\n \"file-code\",\n \"file-code-outline\",\n \"file-cog\",\n \"file-cog-outline\",\n \"file-compare\",\n \"file-delimited\",\n \"file-delimited-outline\",\n \"file-document\",\n \"file-document-alert\",\n \"file-document-alert-outline\",\n \"file-document-arrow-right\",\n \"file-document-arrow-right-outline\",\n \"file-document-check\",\n \"file-document-check-outline\",\n \"file-document-edit\",\n \"file-document-edit-outline\",\n \"file-document-minus\",\n \"file-document-minus-outline\",\n \"file-document-multiple\",\n \"file-document-multiple-outline\",\n \"file-document-outline\",\n \"file-document-plus\",\n \"file-document-plus-outline\",\n \"file-document-refresh\",\n \"file-document-refresh-outline\",\n \"file-document-remove\",\n \"file-document-remove-outline\",\n \"file-download\",\n \"file-download-outline\",\n \"file-edit\",\n \"file-edit-outline\",\n \"file-excel\",\n \"file-excel-box\",\n \"file-excel-box-outline\",\n \"file-excel-outline\",\n \"file-export\",\n \"file-export-outline\",\n \"file-eye\",\n \"file-eye-outline\",\n \"file-find\",\n \"file-find-outline\",\n \"file-gif-box\",\n \"file-hidden\",\n \"file-image\",\n \"file-image-marker\",\n \"file-image-marker-outline\",\n \"file-image-minus\",\n \"file-image-minus-outline\",\n \"file-image-outline\",\n \"file-image-plus\",\n \"file-image-plus-outline\",\n \"file-image-remove\",\n \"file-image-remove-outline\",\n \"file-import\",\n \"file-import-outline\",\n \"file-jpg-box\",\n \"file-key\",\n \"file-key-outline\",\n \"file-link\",\n \"file-link-outline\",\n \"file-lock\",\n \"file-lock-open\",\n \"file-lock-open-outline\",\n \"file-lock-outline\",\n \"file-marker\",\n \"file-marker-outline\",\n \"file-minus\",\n \"file-minus-outline\",\n \"file-move\",\n \"file-move-outline\",\n \"file-multiple\",\n \"file-multiple-outline\",\n \"file-music\",\n \"file-music-outline\",\n \"file-outline\",\n \"file-pdf-box\",\n \"file-percent\",\n \"file-percent-outline\",\n \"file-phone\",\n \"file-phone-outline\",\n \"file-plus\",\n \"file-plus-outline\",\n \"file-png-box\",\n \"file-powerpoint\",\n \"file-powerpoint-box\",\n \"file-powerpoint-box-outline\",\n \"file-powerpoint-outline\",\n \"file-presentation-box\",\n \"file-question\",\n \"file-question-outline\",\n \"file-refresh\",\n \"file-refresh-outline\",\n \"file-remove\",\n \"file-remove-outline\",\n \"file-replace\",\n \"file-replace-outline\",\n \"file-restore\",\n \"file-restore-outline\",\n \"file-rotate-left\",\n \"file-rotate-left-outline\",\n \"file-rotate-right\",\n \"file-rotate-right-outline\",\n \"file-search\",\n \"file-search-outline\",\n \"file-send\",\n \"file-send-outline\",\n \"file-settings\",\n \"file-settings-outline\",\n \"file-sign\",\n \"file-star\",\n \"file-star-four-points\",\n \"file-star-four-points-outline\",\n \"file-star-outline\",\n \"file-swap\",\n \"file-swap-outline\",\n \"file-sync\",\n \"file-sync-outline\",\n \"file-table\",\n \"file-table-box\",\n \"file-table-box-multiple\",\n \"file-table-box-multiple-outline\",\n \"file-table-box-outline\",\n \"file-table-outline\",\n \"file-tree\",\n \"file-tree-outline\",\n \"file-undo\",\n \"file-undo-outline\",\n \"file-upload\",\n \"file-upload-outline\",\n \"file-video\",\n \"file-video-outline\",\n \"file-word\",\n \"file-word-box\",\n \"file-word-box-outline\",\n \"file-word-outline\",\n \"file-xml-box\",\n \"film\",\n \"filmstrip\",\n \"filmstrip-box\",\n \"filmstrip-box-multiple\",\n \"filmstrip-off\",\n \"filter\",\n \"filter-check\",\n \"filter-check-outline\",\n \"filter-cog\",\n \"filter-cog-outline\",\n \"filter-menu\",\n \"filter-menu-outline\",\n \"filter-minus\",\n \"filter-minus-outline\",\n \"filter-multiple\",\n \"filter-multiple-outline\",\n \"filter-off\",\n \"filter-off-outline\",\n \"filter-outline\",\n \"filter-plus\",\n \"filter-plus-outline\",\n \"filter-remove\",\n \"filter-remove-outline\",\n \"filter-settings\",\n \"filter-settings-outline\",\n \"filter-variant\",\n \"filter-variant-minus\",\n \"filter-variant-plus\",\n \"filter-variant-remove\",\n \"finance\",\n \"find-replace\",\n \"fingerprint\",\n \"fingerprint-off\",\n \"fire\",\n \"fire-alert\",\n \"fire-circle\",\n \"fire-extinguisher\",\n \"fire-hydrant\",\n \"fire-hydrant-alert\",\n \"fire-hydrant-off\",\n \"fire-off\",\n \"fire-station\",\n \"fire-truck\",\n \"firebase\",\n \"firefox\",\n \"fireplace\",\n \"fireplace-off\",\n \"firewire\",\n \"firework\",\n \"firework-off\",\n \"fish\",\n \"fish-off\",\n \"fishbowl\",\n \"fishbowl-outline\",\n \"fit-to-page\",\n \"fit-to-page-outline\",\n \"fit-to-screen\",\n \"fit-to-screen-outline\",\n \"flag\",\n \"flag-checkered\",\n \"flag-minus\",\n \"flag-minus-outline\",\n \"flag-off\",\n \"flag-off-outline\",\n \"flag-outline\",\n \"flag-plus\",\n \"flag-plus-outline\",\n \"flag-remove\",\n \"flag-remove-outline\",\n \"flag-triangle\",\n \"flag-variant\",\n \"flag-variant-minus\",\n \"flag-variant-minus-outline\",\n \"flag-variant-off\",\n \"flag-variant-off-outline\",\n \"flag-variant-outline\",\n \"flag-variant-plus\",\n \"flag-variant-plus-outline\",\n \"flag-variant-remove\",\n \"flag-variant-remove-outline\",\n \"flare\",\n \"flash\",\n \"flash-alert\",\n \"flash-alert-outline\",\n \"flash-auto\",\n \"flash-off\",\n \"flash-off-outline\",\n \"flash-outline\",\n \"flash-red-eye\",\n \"flash-triangle\",\n \"flash-triangle-outline\",\n \"flashlight\",\n \"flashlight-off\",\n \"flask\",\n \"flask-empty\",\n \"flask-empty-minus\",\n \"flask-empty-minus-outline\",\n \"flask-empty-off\",\n \"flask-empty-off-outline\",\n \"flask-empty-outline\",\n \"flask-empty-plus\",\n \"flask-empty-plus-outline\",\n \"flask-empty-remove\",\n \"flask-empty-remove-outline\",\n \"flask-minus\",\n \"flask-minus-outline\",\n \"flask-off\",\n \"flask-off-outline\",\n \"flask-outline\",\n \"flask-plus\",\n \"flask-plus-outline\",\n \"flask-remove\",\n \"flask-remove-outline\",\n \"flask-round-bottom\",\n \"flask-round-bottom-empty\",\n \"flask-round-bottom-empty-outline\",\n \"flask-round-bottom-outline\",\n \"fleur-de-lis\",\n \"flip-horizontal\",\n \"flip-to-back\",\n \"flip-to-front\",\n \"flip-vertical\",\n \"floor-lamp\",\n \"floor-lamp-dual\",\n \"floor-lamp-dual-outline\",\n \"floor-lamp-outline\",\n \"floor-lamp-torchiere\",\n \"floor-lamp-torchiere-outline\",\n \"floor-lamp-torchiere-variant\",\n \"floor-lamp-torchiere-variant-outline\",\n \"floor-plan\",\n \"floppy\",\n \"floppy-variant\",\n \"flower\",\n \"flower-outline\",\n \"flower-pollen\",\n \"flower-pollen-outline\",\n \"flower-poppy\",\n \"flower-tulip\",\n \"flower-tulip-outline\",\n \"focus-auto\",\n \"focus-field\",\n \"focus-field-horizontal\",\n \"focus-field-vertical\",\n \"folder\",\n \"folder-account\",\n \"folder-account-outline\",\n \"folder-alert\",\n \"folder-alert-outline\",\n \"folder-arrow-down\",\n \"folder-arrow-down-outline\",\n \"folder-arrow-left\",\n \"folder-arrow-left-outline\",\n \"folder-arrow-left-right\",\n \"folder-arrow-left-right-outline\",\n \"folder-arrow-right\",\n \"folder-arrow-right-outline\",\n \"folder-arrow-up\",\n \"folder-arrow-up-down\",\n \"folder-arrow-up-down-outline\",\n \"folder-arrow-up-outline\",\n \"folder-cancel\",\n \"folder-cancel-outline\",\n \"folder-check\",\n \"folder-check-outline\",\n \"folder-clock\",\n \"folder-clock-outline\",\n \"folder-cog\",\n \"folder-cog-outline\",\n \"folder-download\",\n \"folder-download-outline\",\n \"folder-edit\",\n \"folder-edit-outline\",\n \"folder-eye\",\n \"folder-eye-outline\",\n \"folder-file\",\n \"folder-file-outline\",\n \"folder-google-drive\",\n \"folder-heart\",\n \"folder-heart-outline\",\n \"folder-hidden\",\n \"folder-home\",\n \"folder-home-outline\",\n \"folder-image\",\n \"folder-information\",\n \"folder-information-outline\",\n \"folder-key\",\n \"folder-key-network\",\n \"folder-key-network-outline\",\n \"folder-key-outline\",\n \"folder-lock\",\n \"folder-lock-open\",\n \"folder-lock-open-outline\",\n \"folder-lock-outline\",\n \"folder-marker\",\n \"folder-marker-outline\",\n \"folder-minus\",\n \"folder-minus-outline\",\n \"folder-move\",\n \"folder-move-outline\",\n \"folder-multiple\",\n \"folder-multiple-image\",\n \"folder-multiple-outline\",\n \"folder-multiple-plus\",\n \"folder-multiple-plus-outline\",\n \"folder-music\",\n \"folder-music-outline\",\n \"folder-network\",\n \"folder-network-outline\",\n \"folder-off\",\n \"folder-off-outline\",\n \"folder-open\",\n \"folder-open-outline\",\n \"folder-outline\",\n \"folder-play\",\n \"folder-play-outline\",\n \"folder-plus\",\n \"folder-plus-outline\",\n \"folder-pound\",\n \"folder-pound-outline\",\n \"folder-question\",\n \"folder-question-outline\",\n \"folder-refresh\",\n \"folder-refresh-outline\",\n \"folder-remove\",\n \"folder-remove-outline\",\n \"folder-search\",\n \"folder-search-outline\",\n \"folder-settings\",\n \"folder-settings-outline\",\n \"folder-star\",\n \"folder-star-multiple\",\n \"folder-star-multiple-outline\",\n \"folder-star-outline\",\n \"folder-swap\",\n \"folder-swap-outline\",\n \"folder-sync\",\n \"folder-sync-outline\",\n \"folder-table\",\n \"folder-table-outline\",\n \"folder-text\",\n \"folder-text-outline\",\n \"folder-upload\",\n \"folder-upload-outline\",\n \"folder-wrench\",\n \"folder-wrench-outline\",\n \"folder-zip\",\n \"folder-zip-outline\",\n \"font-awesome\",\n \"food\",\n \"food-apple\",\n \"food-apple-outline\",\n \"food-croissant\",\n \"food-drumstick\",\n \"food-drumstick-off\",\n \"food-drumstick-off-outline\",\n \"food-drumstick-outline\",\n \"food-fork-drink\",\n \"food-halal\",\n \"food-hot-dog\",\n \"food-kosher\",\n \"food-off\",\n \"food-off-outline\",\n \"food-outline\",\n \"food-steak\",\n \"food-steak-off\",\n \"food-takeout-box\",\n \"food-takeout-box-outline\",\n \"food-turkey\",\n \"food-variant\",\n \"food-variant-off\",\n \"foot-print\",\n \"football\",\n \"football-australian\",\n \"football-helmet\",\n \"forest\",\n \"forest-outline\",\n \"forklift\",\n \"form-dropdown\",\n \"form-select\",\n \"form-textarea\",\n \"form-textbox\",\n \"form-textbox-lock\",\n \"form-textbox-password\",\n \"format-align-bottom\",\n \"format-align-center\",\n \"format-align-justify\",\n \"format-align-left\",\n \"format-align-middle\",\n \"format-align-right\",\n \"format-align-top\",\n \"format-annotation-minus\",\n \"format-annotation-plus\",\n \"format-bold\",\n \"format-clear\",\n \"format-color-fill\",\n \"format-color-highlight\",\n \"format-color-marker-cancel\",\n \"format-color-text\",\n \"format-columns\",\n \"format-float-center\",\n \"format-float-left\",\n \"format-float-none\",\n \"format-float-right\",\n \"format-font\",\n \"format-font-size-decrease\",\n \"format-font-size-increase\",\n \"format-header-1\",\n \"format-header-2\",\n \"format-header-3\",\n \"format-header-4\",\n \"format-header-5\",\n \"format-header-6\",\n \"format-header-decrease\",\n \"format-header-equal\",\n \"format-header-increase\",\n \"format-header-pound\",\n \"format-horizontal-align-center\",\n \"format-horizontal-align-left\",\n \"format-horizontal-align-right\",\n \"format-indent-decrease\",\n \"format-indent-increase\",\n \"format-italic\",\n \"format-letter-case\",\n \"format-letter-case-lower\",\n \"format-letter-case-upper\",\n \"format-letter-ends-with\",\n \"format-letter-matches\",\n \"format-letter-spacing\",\n \"format-letter-spacing-variant\",\n \"format-letter-starts-with\",\n \"format-line-height\",\n \"format-line-spacing\",\n \"format-line-style\",\n \"format-line-weight\",\n \"format-list-bulleted\",\n \"format-list-bulleted-square\",\n \"format-list-bulleted-triangle\",\n \"format-list-bulleted-type\",\n \"format-list-checkbox\",\n \"format-list-checks\",\n \"format-list-group\",\n \"format-list-group-plus\",\n \"format-list-numbered\",\n \"format-list-numbered-rtl\",\n \"format-list-text\",\n \"format-overline\",\n \"format-page-break\",\n \"format-page-split\",\n \"format-paint\",\n \"format-paragraph\",\n \"format-paragraph-spacing\",\n \"format-pilcrow\",\n \"format-pilcrow-arrow-left\",\n \"format-pilcrow-arrow-right\",\n \"format-quote-close\",\n \"format-quote-close-outline\",\n \"format-quote-open\",\n \"format-quote-open-outline\",\n \"format-rotate-90\",\n \"format-section\",\n \"format-size\",\n \"format-strikethrough\",\n \"format-strikethrough-variant\",\n \"format-subscript\",\n \"format-superscript\",\n \"format-text\",\n \"format-text-rotation-angle-down\",\n \"format-text-rotation-angle-up\",\n \"format-text-rotation-down\",\n \"format-text-rotation-down-vertical\",\n \"format-text-rotation-none\",\n \"format-text-rotation-up\",\n \"format-text-rotation-vertical\",\n \"format-text-variant\",\n \"format-text-variant-outline\",\n \"format-text-wrapping-clip\",\n \"format-text-wrapping-overflow\",\n \"format-text-wrapping-wrap\",\n \"format-textbox\",\n \"format-title\",\n \"format-underline\",\n \"format-underline-wavy\",\n \"format-vertical-align-bottom\",\n \"format-vertical-align-center\",\n \"format-vertical-align-top\",\n \"format-wrap-inline\",\n \"format-wrap-square\",\n \"format-wrap-tight\",\n \"format-wrap-top-bottom\",\n \"forum\",\n \"forum-minus\",\n \"forum-minus-outline\",\n \"forum-outline\",\n \"forum-plus\",\n \"forum-plus-outline\",\n \"forum-remove\",\n \"forum-remove-outline\",\n \"forward\",\n \"forwardburger\",\n \"fountain\",\n \"fountain-pen\",\n \"fountain-pen-tip\",\n \"fraction-one-half\",\n \"freebsd\",\n \"french-fries\",\n \"frequently-asked-questions\",\n \"fridge\",\n \"fridge-alert\",\n \"fridge-alert-outline\",\n \"fridge-bottom\",\n \"fridge-industrial\",\n \"fridge-industrial-alert\",\n \"fridge-industrial-alert-outline\",\n \"fridge-industrial-off\",\n \"fridge-industrial-off-outline\",\n \"fridge-industrial-outline\",\n \"fridge-off\",\n \"fridge-off-outline\",\n \"fridge-outline\",\n \"fridge-top\",\n \"fridge-variant\",\n \"fridge-variant-alert\",\n \"fridge-variant-alert-outline\",\n \"fridge-variant-off\",\n \"fridge-variant-off-outline\",\n \"fridge-variant-outline\",\n \"fruit-cherries\",\n \"fruit-cherries-off\",\n \"fruit-citrus\",\n \"fruit-citrus-off\",\n \"fruit-grapes\",\n \"fruit-grapes-outline\",\n \"fruit-pear\",\n \"fruit-pineapple\",\n \"fruit-watermelon\",\n \"fuel\",\n \"fuel-cell\",\n \"fullscreen\",\n \"fullscreen-exit\",\n \"function\",\n \"function-variant\",\n \"furigana-horizontal\",\n \"furigana-vertical\",\n \"fuse\",\n \"fuse-alert\",\n \"fuse-blade\",\n \"fuse-off\",\n \"gamepad\",\n \"gamepad-circle\",\n \"gamepad-circle-down\",\n \"gamepad-circle-left\",\n \"gamepad-circle-outline\",\n \"gamepad-circle-right\",\n \"gamepad-circle-up\",\n \"gamepad-down\",\n \"gamepad-left\",\n \"gamepad-outline\",\n \"gamepad-right\",\n \"gamepad-round\",\n \"gamepad-round-down\",\n \"gamepad-round-left\",\n \"gamepad-round-outline\",\n \"gamepad-round-right\",\n \"gamepad-round-up\",\n \"gamepad-square\",\n \"gamepad-square-outline\",\n \"gamepad-up\",\n \"gamepad-variant\",\n \"gamepad-variant-outline\",\n \"gamma\",\n \"gantry-crane\",\n \"garage\",\n \"garage-alert\",\n \"garage-alert-variant\",\n \"garage-lock\",\n \"garage-open\",\n \"garage-open-variant\",\n \"garage-variant\",\n \"garage-variant-lock\",\n \"gas-burner\",\n \"gas-cylinder\",\n \"gas-station\",\n \"gas-station-in-use\",\n \"gas-station-in-use-outline\",\n \"gas-station-off\",\n \"gas-station-off-outline\",\n \"gas-station-outline\",\n \"gate\",\n \"gate-alert\",\n \"gate-and\",\n \"gate-arrow-left\",\n \"gate-arrow-right\",\n \"gate-buffer\",\n \"gate-nand\",\n \"gate-nor\",\n \"gate-not\",\n \"gate-open\",\n \"gate-or\",\n \"gate-xnor\",\n \"gate-xor\",\n \"gatsby\",\n \"gauge\",\n \"gauge-empty\",\n \"gauge-full\",\n \"gauge-low\",\n \"gavel\",\n \"gender-female\",\n \"gender-male\",\n \"gender-male-female\",\n \"gender-male-female-variant\",\n \"gender-non-binary\",\n \"gender-transgender\",\n \"generator-mobile\",\n \"generator-portable\",\n \"generator-stationary\",\n \"gentoo\",\n \"gesture\",\n \"gesture-double-tap\",\n \"gesture-pinch\",\n \"gesture-spread\",\n \"gesture-swipe\",\n \"gesture-swipe-down\",\n \"gesture-swipe-horizontal\",\n \"gesture-swipe-left\",\n \"gesture-swipe-right\",\n \"gesture-swipe-up\",\n \"gesture-swipe-vertical\",\n \"gesture-tap\",\n \"gesture-tap-box\",\n \"gesture-tap-button\",\n \"gesture-tap-hold\",\n \"gesture-two-double-tap\",\n \"gesture-two-tap\",\n \"ghost\",\n \"ghost-off\",\n \"ghost-off-outline\",\n \"ghost-outline\",\n \"gift\",\n \"gift-off\",\n \"gift-off-outline\",\n \"gift-open\",\n \"gift-open-outline\",\n \"gift-outline\",\n \"git\",\n \"github\",\n \"gitlab\",\n \"glass-cocktail\",\n \"glass-cocktail-off\",\n \"glass-flute\",\n \"glass-fragile\",\n \"glass-mug\",\n \"glass-mug-off\",\n \"glass-mug-variant\",\n \"glass-mug-variant-off\",\n \"glass-pint-outline\",\n \"glass-stange\",\n \"glass-tulip\",\n \"glass-wine\",\n \"glasses\",\n \"globe-light\",\n \"globe-light-outline\",\n \"globe-model\",\n \"gmail\",\n \"gnome\",\n \"go-kart\",\n \"go-kart-track\",\n \"gog\",\n \"gold\",\n \"golf\",\n \"golf-cart\",\n \"golf-tee\",\n \"gondola\",\n \"goodreads\",\n \"google\",\n \"google-ads\",\n \"google-analytics\",\n \"google-assistant\",\n \"google-cardboard\",\n \"google-chrome\",\n \"google-circles\",\n \"google-circles-communities\",\n \"google-circles-extended\",\n \"google-circles-group\",\n \"google-classroom\",\n \"google-cloud\",\n \"google-downasaur\",\n \"google-drive\",\n \"google-earth\",\n \"google-fit\",\n \"google-glass\",\n \"google-hangouts\",\n \"google-keep\",\n \"google-lens\",\n \"google-maps\",\n \"google-my-business\",\n \"google-nearby\",\n \"google-play\",\n \"google-plus\",\n \"google-podcast\",\n \"google-spreadsheet\",\n \"google-street-view\",\n \"google-translate\",\n \"gradient-horizontal\",\n \"gradient-vertical\",\n \"grain\",\n \"graph\",\n \"graph-outline\",\n \"graphql\",\n \"grass\",\n \"grave-stone\",\n \"grease-pencil\",\n \"greater-than\",\n \"greater-than-or-equal\",\n \"greenhouse\",\n \"grid\",\n \"grid-large\",\n \"grid-off\",\n \"grill\",\n \"grill-outline\",\n \"group\",\n \"guitar-acoustic\",\n \"guitar-electric\",\n \"guitar-pick\",\n \"guitar-pick-outline\",\n \"guy-fawkes-mask\",\n \"gymnastics\",\n \"hail\",\n \"hair-dryer\",\n \"hair-dryer-outline\",\n \"halloween\",\n \"hamburger\",\n \"hamburger-check\",\n \"hamburger-minus\",\n \"hamburger-off\",\n \"hamburger-plus\",\n \"hamburger-remove\",\n \"hammer\",\n \"hammer-screwdriver\",\n \"hammer-sickle\",\n \"hammer-wrench\",\n \"hand-back-left\",\n \"hand-back-left-off\",\n \"hand-back-left-off-outline\",\n \"hand-back-left-outline\",\n \"hand-back-right\",\n \"hand-back-right-off\",\n \"hand-back-right-off-outline\",\n \"hand-back-right-outline\",\n \"hand-clap\",\n \"hand-clap-off\",\n \"hand-coin\",\n \"hand-coin-outline\",\n \"hand-cycle\",\n \"hand-extended\",\n \"hand-extended-outline\",\n \"hand-front-left\",\n \"hand-front-left-outline\",\n \"hand-front-right\",\n \"hand-front-right-outline\",\n \"hand-heart\",\n \"hand-heart-outline\",\n \"hand-okay\",\n \"hand-peace\",\n \"hand-peace-variant\",\n \"hand-pointing-down\",\n \"hand-pointing-left\",\n \"hand-pointing-right\",\n \"hand-pointing-up\",\n \"hand-saw\",\n \"hand-wash\",\n \"hand-wash-outline\",\n \"hand-water\",\n \"hand-wave\",\n \"hand-wave-outline\",\n \"handball\",\n \"handcuffs\",\n \"hands-pray\",\n \"handshake\",\n \"handshake-outline\",\n \"hanger\",\n \"hard-hat\",\n \"harddisk\",\n \"harddisk-plus\",\n \"harddisk-remove\",\n \"hat-fedora\",\n \"hazard-lights\",\n \"hdmi-port\",\n \"hdr\",\n \"hdr-off\",\n \"head\",\n \"head-alert\",\n \"head-alert-outline\",\n \"head-check\",\n \"head-check-outline\",\n \"head-cog\",\n \"head-cog-outline\",\n \"head-dots-horizontal\",\n \"head-dots-horizontal-outline\",\n \"head-flash\",\n \"head-flash-outline\",\n \"head-heart\",\n \"head-heart-outline\",\n \"head-lightbulb\",\n \"head-lightbulb-outline\",\n \"head-minus\",\n \"head-minus-outline\",\n \"head-outline\",\n \"head-plus\",\n \"head-plus-outline\",\n \"head-question\",\n \"head-question-outline\",\n \"head-remove\",\n \"head-remove-outline\",\n \"head-snowflake\",\n \"head-snowflake-outline\",\n \"head-sync\",\n \"head-sync-outline\",\n \"headphones\",\n \"headphones-bluetooth\",\n \"headphones-box\",\n \"headphones-off\",\n \"headphones-settings\",\n \"headset\",\n \"headset-dock\",\n \"headset-off\",\n \"heart\",\n \"heart-box\",\n \"heart-box-outline\",\n \"heart-broken\",\n \"heart-broken-outline\",\n \"heart-circle\",\n \"heart-circle-outline\",\n \"heart-cog\",\n \"heart-cog-outline\",\n \"heart-flash\",\n \"heart-half\",\n \"heart-half-full\",\n \"heart-half-outline\",\n \"heart-minus\",\n \"heart-minus-outline\",\n \"heart-multiple\",\n \"heart-multiple-outline\",\n \"heart-off\",\n \"heart-off-outline\",\n \"heart-outline\",\n \"heart-plus\",\n \"heart-plus-outline\",\n \"heart-pulse\",\n \"heart-remove\",\n \"heart-remove-outline\",\n \"heart-search\",\n \"heart-settings\",\n \"heart-settings-outline\",\n \"heat-pump\",\n \"heat-pump-outline\",\n \"heat-wave\",\n \"heating-coil\",\n \"helicopter\",\n \"help\",\n \"help-box\",\n \"help-box-multiple\",\n \"help-box-multiple-outline\",\n \"help-box-outline\",\n \"help-circle\",\n \"help-circle-outline\",\n \"help-network\",\n \"help-network-outline\",\n \"help-rhombus\",\n \"help-rhombus-outline\",\n \"hexadecimal\",\n \"hexagon\",\n \"hexagon-multiple\",\n \"hexagon-multiple-outline\",\n \"hexagon-outline\",\n \"hexagon-slice-1\",\n \"hexagon-slice-2\",\n \"hexagon-slice-3\",\n \"hexagon-slice-4\",\n \"hexagon-slice-5\",\n \"hexagon-slice-6\",\n \"hexagram\",\n \"hexagram-outline\",\n \"high-definition\",\n \"high-definition-box\",\n \"highway\",\n \"hiking\",\n \"history\",\n \"hockey-puck\",\n \"hockey-sticks\",\n \"hololens\",\n \"home\",\n \"home-account\",\n \"home-alert\",\n \"home-alert-outline\",\n \"home-analytics\",\n \"home-assistant\",\n \"home-automation\",\n \"home-battery\",\n \"home-battery-outline\",\n \"home-circle\",\n \"home-circle-outline\",\n \"home-city\",\n \"home-city-outline\",\n \"home-clock\",\n \"home-clock-outline\",\n \"home-edit\",\n \"home-edit-outline\",\n \"home-export-outline\",\n \"home-flood\",\n \"home-floor-0\",\n \"home-floor-1\",\n \"home-floor-2\",\n \"home-floor-3\",\n \"home-floor-a\",\n \"home-floor-b\",\n \"home-floor-g\",\n \"home-floor-l\",\n \"home-floor-negative-1\",\n \"home-group\",\n \"home-group-minus\",\n \"home-group-plus\",\n \"home-group-remove\",\n \"home-heart\",\n \"home-import-outline\",\n \"home-lightbulb\",\n \"home-lightbulb-outline\",\n \"home-lightning-bolt\",\n \"home-lightning-bolt-outline\",\n \"home-lock\",\n \"home-lock-open\",\n \"home-map-marker\",\n \"home-minus\",\n \"home-minus-outline\",\n \"home-modern\",\n \"home-off\",\n \"home-off-outline\",\n \"home-outline\",\n \"home-percent\",\n \"home-percent-outline\",\n \"home-plus\",\n \"home-plus-outline\",\n \"home-remove\",\n \"home-remove-outline\",\n \"home-roof\",\n \"home-search\",\n \"home-search-outline\",\n \"home-silo\",\n \"home-silo-outline\",\n \"home-sound-in\",\n \"home-sound-in-outline\",\n \"home-sound-out\",\n \"home-sound-out-outline\",\n \"home-switch\",\n \"home-switch-outline\",\n \"home-thermometer\",\n \"home-thermometer-outline\",\n \"home-variant\",\n \"home-variant-outline\",\n \"hook\",\n \"hook-off\",\n \"hoop-house\",\n \"hops\",\n \"horizontal-rotate-clockwise\",\n \"horizontal-rotate-counterclockwise\",\n \"horse\",\n \"horse-human\",\n \"horse-variant\",\n \"horse-variant-fast\",\n \"horseshoe\",\n \"hospital\",\n \"hospital-box\",\n \"hospital-box-outline\",\n \"hospital-building\",\n \"hospital-marker\",\n \"hot-tub\",\n \"hours-12\",\n \"hours-24\",\n \"hub\",\n \"hub-outline\",\n \"hubspot\",\n \"hulu\",\n \"human\",\n \"human-baby-changing-table\",\n \"human-cane\",\n \"human-capacity-decrease\",\n \"human-capacity-increase\",\n \"human-child\",\n \"human-dolly\",\n \"human-edit\",\n \"human-female\",\n \"human-female-boy\",\n \"human-female-dance\",\n \"human-female-female\",\n \"human-female-female-child\",\n \"human-female-girl\",\n \"human-greeting\",\n \"human-greeting-proximity\",\n \"human-greeting-variant\",\n \"human-handsdown\",\n \"human-handsup\",\n \"human-male\",\n \"human-male-board\",\n \"human-male-board-poll\",\n \"human-male-boy\",\n \"human-male-child\",\n \"human-male-female\",\n \"human-male-female-child\",\n \"human-male-girl\",\n \"human-male-height\",\n \"human-male-height-variant\",\n \"human-male-male\",\n \"human-male-male-child\",\n \"human-non-binary\",\n \"human-pregnant\",\n \"human-queue\",\n \"human-scooter\",\n \"human-walker\",\n \"human-wheelchair\",\n \"human-white-cane\",\n \"humble-bundle\",\n \"hvac\",\n \"hvac-off\",\n \"hydraulic-oil-level\",\n \"hydraulic-oil-temperature\",\n \"hydro-power\",\n \"hydrogen-station\",\n \"ice-cream\",\n \"ice-cream-off\",\n \"ice-pop\",\n \"id-card\",\n \"identifier\",\n \"ideogram-cjk\",\n \"ideogram-cjk-variant\",\n \"image\",\n \"image-album\",\n \"image-area\",\n \"image-area-close\",\n \"image-auto-adjust\",\n \"image-broken\",\n \"image-broken-variant\",\n \"image-check\",\n \"image-check-outline\",\n \"image-edit\",\n \"image-edit-outline\",\n \"image-filter-black-white\",\n \"image-filter-center-focus\",\n \"image-filter-center-focus-strong\",\n \"image-filter-center-focus-strong-outline\",\n \"image-filter-center-focus-weak\",\n \"image-filter-drama\",\n \"image-filter-drama-outline\",\n \"image-filter-frames\",\n \"image-filter-hdr\",\n \"image-filter-hdr-outline\",\n \"image-filter-none\",\n \"image-filter-tilt-shift\",\n \"image-filter-vintage\",\n \"image-frame\",\n \"image-lock\",\n \"image-lock-outline\",\n \"image-marker\",\n \"image-marker-outline\",\n \"image-minus\",\n \"image-minus-outline\",\n \"image-move\",\n \"image-multiple\",\n \"image-multiple-outline\",\n \"image-off\",\n \"image-off-outline\",\n \"image-outline\",\n \"image-plus\",\n \"image-plus-outline\",\n \"image-refresh\",\n \"image-refresh-outline\",\n \"image-remove\",\n \"image-remove-outline\",\n \"image-search\",\n \"image-search-outline\",\n \"image-size-select-actual\",\n \"image-size-select-large\",\n \"image-size-select-small\",\n \"image-sync\",\n \"image-sync-outline\",\n \"image-text\",\n \"import\",\n \"inbox\",\n \"inbox-arrow-down\",\n \"inbox-arrow-down-outline\",\n \"inbox-arrow-up\",\n \"inbox-arrow-up-outline\",\n \"inbox-full\",\n \"inbox-full-outline\",\n \"inbox-multiple\",\n \"inbox-multiple-outline\",\n \"inbox-outline\",\n \"inbox-remove\",\n \"inbox-remove-outline\",\n \"incognito\",\n \"incognito-circle\",\n \"incognito-circle-off\",\n \"incognito-off\",\n \"induction\",\n \"infinity\",\n \"information\",\n \"information-box\",\n \"information-box-outline\",\n \"information-off\",\n \"information-off-outline\",\n \"information-outline\",\n \"information-slab-box\",\n \"information-slab-box-outline\",\n \"information-slab-circle\",\n \"information-slab-circle-outline\",\n \"information-slab-symbol\",\n \"information-symbol\",\n \"information-variant\",\n \"information-variant-box\",\n \"information-variant-box-outline\",\n \"information-variant-circle\",\n \"information-variant-circle-outline\",\n \"instagram\",\n \"instrument-triangle\",\n \"integrated-circuit-chip\",\n \"invert-colors\",\n \"invert-colors-off\",\n \"invoice\",\n \"invoice-arrow-left\",\n \"invoice-arrow-left-outline\",\n \"invoice-arrow-right\",\n \"invoice-arrow-right-outline\",\n \"invoice-check\",\n \"invoice-check-outline\",\n \"invoice-clock\",\n \"invoice-clock-outline\",\n \"invoice-edit\",\n \"invoice-edit-outline\",\n \"invoice-export-outline\",\n \"invoice-fast\",\n \"invoice-fast-outline\",\n \"invoice-import\",\n \"invoice-import-outline\",\n \"invoice-list\",\n \"invoice-list-outline\",\n \"invoice-minus\",\n \"invoice-minus-outline\",\n \"invoice-multiple\",\n \"invoice-multiple-outline\",\n \"invoice-outline\",\n \"invoice-plus\",\n \"invoice-plus-outline\",\n \"invoice-remove\",\n \"invoice-remove-outline\",\n \"invoice-send\",\n \"invoice-send-outline\",\n \"invoice-text\",\n \"invoice-text-arrow-left\",\n \"invoice-text-arrow-left-outline\",\n \"invoice-text-arrow-right\",\n \"invoice-text-arrow-right-outline\",\n \"invoice-text-check\",\n \"invoice-text-check-outline\",\n \"invoice-text-clock\",\n \"invoice-text-clock-outline\",\n \"invoice-text-edit\",\n \"invoice-text-edit-outline\",\n \"invoice-text-fast\",\n \"invoice-text-fast-outline\",\n \"invoice-text-minus\",\n \"invoice-text-minus-outline\",\n \"invoice-text-multiple\",\n \"invoice-text-multiple-outline\",\n \"invoice-text-outline\",\n \"invoice-text-plus\",\n \"invoice-text-plus-outline\",\n \"invoice-text-remove\",\n \"invoice-text-remove-outline\",\n \"invoice-text-send\",\n \"invoice-text-send-outline\",\n \"iobroker\",\n \"ip\",\n \"ip-network\",\n \"ip-network-outline\",\n \"ip-outline\",\n \"ipod\",\n \"iron\",\n \"iron-board\",\n \"iron-outline\",\n \"island\",\n \"island-variant\",\n \"iv-bag\",\n \"jabber\",\n \"jeepney\",\n \"jellyfish\",\n \"jellyfish-outline\",\n \"jira\",\n \"jquery\",\n \"jsfiddle\",\n \"jump-rope\",\n \"kabaddi\",\n \"kangaroo\",\n \"karate\",\n \"kayaking\",\n \"keg\",\n \"kettle\",\n \"kettle-alert\",\n \"kettle-alert-outline\",\n \"kettle-off\",\n \"kettle-off-outline\",\n \"kettle-outline\",\n \"kettle-pour-over\",\n \"kettle-steam\",\n \"kettle-steam-outline\",\n \"kettlebell\",\n \"key\",\n \"key-alert\",\n \"key-alert-outline\",\n \"key-arrow-right\",\n \"key-chain\",\n \"key-chain-variant\",\n \"key-change\",\n \"key-link\",\n \"key-minus\",\n \"key-outline\",\n \"key-plus\",\n \"key-remove\",\n \"key-star\",\n \"key-variant\",\n \"key-wireless\",\n \"keyboard\",\n \"keyboard-backspace\",\n \"keyboard-caps\",\n \"keyboard-close\",\n \"keyboard-close-outline\",\n \"keyboard-esc\",\n \"keyboard-f1\",\n \"keyboard-f10\",\n \"keyboard-f11\",\n \"keyboard-f12\",\n \"keyboard-f2\",\n \"keyboard-f3\",\n \"keyboard-f4\",\n \"keyboard-f5\",\n \"keyboard-f6\",\n \"keyboard-f7\",\n \"keyboard-f8\",\n \"keyboard-f9\",\n \"keyboard-off\",\n \"keyboard-off-outline\",\n \"keyboard-outline\",\n \"keyboard-return\",\n \"keyboard-settings\",\n \"keyboard-settings-outline\",\n \"keyboard-space\",\n \"keyboard-tab\",\n \"keyboard-tab-reverse\",\n \"keyboard-variant\",\n \"khanda\",\n \"kickstarter\",\n \"kite\",\n \"kite-outline\",\n \"kitesurfing\",\n \"klingon\",\n \"knife\",\n \"knife-military\",\n \"knob\",\n \"koala\",\n \"kodi\",\n \"kubernetes\",\n \"label\",\n \"label-multiple\",\n \"label-multiple-outline\",\n \"label-off\",\n \"label-off-outline\",\n \"label-outline\",\n \"label-percent\",\n \"label-percent-outline\",\n \"label-variant\",\n \"label-variant-outline\",\n \"ladder\",\n \"ladybug\",\n \"lambda\",\n \"lamp\",\n \"lamp-outline\",\n \"lamps\",\n \"lamps-outline\",\n \"lan\",\n \"lan-check\",\n \"lan-connect\",\n \"lan-disconnect\",\n \"lan-pending\",\n \"land-fields\",\n \"land-plots\",\n \"land-plots-circle\",\n \"land-plots-circle-variant\",\n \"land-plots-marker\",\n \"land-rows-horizontal\",\n \"land-rows-vertical\",\n \"landslide\",\n \"landslide-outline\",\n \"language-c\",\n \"language-cpp\",\n \"language-csharp\",\n \"language-css3\",\n \"language-fortran\",\n \"language-go\",\n \"language-haskell\",\n \"language-html5\",\n \"language-java\",\n \"language-javascript\",\n \"language-kotlin\",\n \"language-lua\",\n \"language-markdown\",\n \"language-markdown-outline\",\n \"language-php\",\n \"language-python\",\n \"language-r\",\n \"language-ruby\",\n \"language-ruby-on-rails\",\n \"language-rust\",\n \"language-swift\",\n \"language-typescript\",\n \"language-xaml\",\n \"laptop\",\n \"laptop-account\",\n \"laptop-off\",\n \"laravel\",\n \"laser-pointer\",\n \"lasso\",\n \"lastpass\",\n \"latitude\",\n \"launch\",\n \"lava-lamp\",\n \"layers\",\n \"layers-edit\",\n \"layers-minus\",\n \"layers-off\",\n \"layers-off-outline\",\n \"layers-outline\",\n \"layers-plus\",\n \"layers-remove\",\n \"layers-search\",\n \"layers-search-outline\",\n \"layers-triple\",\n \"layers-triple-outline\",\n \"lead-pencil\",\n \"leaf\",\n \"leaf-circle\",\n \"leaf-circle-outline\",\n \"leaf-maple\",\n \"leaf-maple-off\",\n \"leaf-off\",\n \"leak\",\n \"leak-off\",\n \"lectern\",\n \"led-off\",\n \"led-on\",\n \"led-outline\",\n \"led-strip\",\n \"led-strip-variant\",\n \"led-strip-variant-off\",\n \"led-variant-off\",\n \"led-variant-on\",\n \"led-variant-outline\",\n \"leek\",\n \"less-than\",\n \"less-than-or-equal\",\n \"library\",\n \"library-outline\",\n \"library-shelves\",\n \"license\",\n \"lifebuoy\",\n \"light-flood-down\",\n \"light-flood-up\",\n \"light-recessed\",\n \"light-switch\",\n \"light-switch-off\",\n \"lightbulb\",\n \"lightbulb-alert\",\n \"lightbulb-alert-outline\",\n \"lightbulb-auto\",\n \"lightbulb-auto-outline\",\n \"lightbulb-cfl\",\n \"lightbulb-cfl-off\",\n \"lightbulb-cfl-spiral\",\n \"lightbulb-cfl-spiral-off\",\n \"lightbulb-fluorescent-tube\",\n \"lightbulb-fluorescent-tube-outline\",\n \"lightbulb-group\",\n \"lightbulb-group-off\",\n \"lightbulb-group-off-outline\",\n \"lightbulb-group-outline\",\n \"lightbulb-multiple\",\n \"lightbulb-multiple-off\",\n \"lightbulb-multiple-off-outline\",\n \"lightbulb-multiple-outline\",\n \"lightbulb-night\",\n \"lightbulb-night-outline\",\n \"lightbulb-off\",\n \"lightbulb-off-outline\",\n \"lightbulb-on\",\n \"lightbulb-on-10\",\n \"lightbulb-on-20\",\n \"lightbulb-on-30\",\n \"lightbulb-on-40\",\n \"lightbulb-on-50\",\n \"lightbulb-on-60\",\n \"lightbulb-on-70\",\n \"lightbulb-on-80\",\n \"lightbulb-on-90\",\n \"lightbulb-on-outline\",\n \"lightbulb-outline\",\n \"lightbulb-question\",\n \"lightbulb-question-outline\",\n \"lightbulb-spot\",\n \"lightbulb-spot-off\",\n \"lightbulb-variant\",\n \"lightbulb-variant-outline\",\n \"lighthouse\",\n \"lighthouse-on\",\n \"lightning-bolt\",\n \"lightning-bolt-circle\",\n \"lightning-bolt-outline\",\n \"line-scan\",\n \"lingerie\",\n \"link\",\n \"link-box\",\n \"link-box-outline\",\n \"link-box-variant\",\n \"link-box-variant-outline\",\n \"link-circle\",\n \"link-circle-outline\",\n \"link-edit\",\n \"link-lock\",\n \"link-off\",\n \"link-plus\",\n \"link-variant\",\n \"link-variant-minus\",\n \"link-variant-off\",\n \"link-variant-plus\",\n \"link-variant-remove\",\n \"linkedin\",\n \"linux\",\n \"linux-mint\",\n \"lipstick\",\n \"liquid-spot\",\n \"liquor\",\n \"list-box\",\n \"list-box-outline\",\n \"list-status\",\n \"litecoin\",\n \"loading\",\n \"location-enter\",\n \"location-exit\",\n \"lock\",\n \"lock-alert\",\n \"lock-alert-outline\",\n \"lock-check\",\n \"lock-check-outline\",\n \"lock-clock\",\n \"lock-minus\",\n \"lock-minus-outline\",\n \"lock-off\",\n \"lock-off-outline\",\n \"lock-open\",\n \"lock-open-alert\",\n \"lock-open-alert-outline\",\n \"lock-open-check\",\n \"lock-open-check-outline\",\n \"lock-open-minus\",\n \"lock-open-minus-outline\",\n \"lock-open-outline\",\n \"lock-open-plus\",\n \"lock-open-plus-outline\",\n \"lock-open-remove\",\n \"lock-open-remove-outline\",\n \"lock-open-variant\",\n \"lock-open-variant-outline\",\n \"lock-outline\",\n \"lock-pattern\",\n \"lock-percent\",\n \"lock-percent-open\",\n \"lock-percent-open-outline\",\n \"lock-percent-open-variant\",\n \"lock-percent-open-variant-outline\",\n \"lock-percent-outline\",\n \"lock-plus\",\n \"lock-plus-outline\",\n \"lock-question\",\n \"lock-remove\",\n \"lock-remove-outline\",\n \"lock-reset\",\n \"lock-smart\",\n \"locker\",\n \"locker-multiple\",\n \"login\",\n \"login-variant\",\n \"logout\",\n \"logout-variant\",\n \"longitude\",\n \"looks\",\n \"lotion\",\n \"lotion-outline\",\n \"lotion-plus\",\n \"lotion-plus-outline\",\n \"loupe\",\n \"lumx\",\n \"lungs\",\n \"mace\",\n \"magazine-pistol\",\n \"magazine-rifle\",\n \"magic-staff\",\n \"magnet\",\n \"magnet-on\",\n \"magnify\",\n \"magnify-close\",\n \"magnify-expand\",\n \"magnify-minus\",\n \"magnify-minus-cursor\",\n \"magnify-minus-outline\",\n \"magnify-plus\",\n \"magnify-plus-cursor\",\n \"magnify-plus-outline\",\n \"magnify-remove-cursor\",\n \"magnify-remove-outline\",\n \"magnify-scan\",\n \"mail\",\n \"mailbox\",\n \"mailbox-open\",\n \"mailbox-open-outline\",\n \"mailbox-open-up\",\n \"mailbox-open-up-outline\",\n \"mailbox-outline\",\n \"mailbox-up\",\n \"mailbox-up-outline\",\n \"manjaro\",\n \"map\",\n \"map-check\",\n \"map-check-outline\",\n \"map-clock\",\n \"map-clock-outline\",\n \"map-legend\",\n \"map-marker\",\n \"map-marker-account\",\n \"map-marker-account-outline\",\n \"map-marker-alert\",\n \"map-marker-alert-outline\",\n \"map-marker-check\",\n \"map-marker-check-outline\",\n \"map-marker-circle\",\n \"map-marker-distance\",\n \"map-marker-down\",\n \"map-marker-left\",\n \"map-marker-left-outline\",\n \"map-marker-minus\",\n \"map-marker-minus-outline\",\n \"map-marker-multiple\",\n \"map-marker-multiple-outline\",\n \"map-marker-off\",\n \"map-marker-off-outline\",\n \"map-marker-outline\",\n \"map-marker-path\",\n \"map-marker-plus\",\n \"map-marker-plus-outline\",\n \"map-marker-question\",\n \"map-marker-question-outline\",\n \"map-marker-radius\",\n \"map-marker-radius-outline\",\n \"map-marker-remove\",\n \"map-marker-remove-outline\",\n \"map-marker-remove-variant\",\n \"map-marker-right\",\n \"map-marker-right-outline\",\n \"map-marker-star\",\n \"map-marker-star-outline\",\n \"map-marker-up\",\n \"map-minus\",\n \"map-outline\",\n \"map-plus\",\n \"map-search\",\n \"map-search-outline\",\n \"mapbox\",\n \"margin\",\n \"marker\",\n \"marker-cancel\",\n \"marker-check\",\n \"mastodon\",\n \"material-design\",\n \"material-ui\",\n \"math-compass\",\n \"math-cos\",\n \"math-integral\",\n \"math-integral-box\",\n \"math-log\",\n \"math-norm\",\n \"math-norm-box\",\n \"math-sin\",\n \"math-tan\",\n \"matrix\",\n \"medal\",\n \"medal-outline\",\n \"medical-bag\",\n \"medical-cotton-swab\",\n \"medication\",\n \"medication-outline\",\n \"meditation\",\n \"memory\",\n \"memory-arrow-down\",\n \"menorah\",\n \"menorah-fire\",\n \"menu\",\n \"menu-close\",\n \"menu-down\",\n \"menu-down-outline\",\n \"menu-left\",\n \"menu-left-outline\",\n \"menu-open\",\n \"menu-right\",\n \"menu-right-outline\",\n \"menu-swap\",\n \"menu-swap-outline\",\n \"menu-up\",\n \"menu-up-outline\",\n \"merge\",\n \"message\",\n \"message-alert\",\n \"message-alert-outline\",\n \"message-arrow-left\",\n \"message-arrow-left-outline\",\n \"message-arrow-right\",\n \"message-arrow-right-outline\",\n \"message-badge\",\n \"message-badge-outline\",\n \"message-bookmark\",\n \"message-bookmark-outline\",\n \"message-bulleted\",\n \"message-bulleted-off\",\n \"message-check\",\n \"message-check-outline\",\n \"message-cog\",\n \"message-cog-outline\",\n \"message-draw\",\n \"message-fast\",\n \"message-fast-outline\",\n \"message-flash\",\n \"message-flash-outline\",\n \"message-image\",\n \"message-image-outline\",\n \"message-lock\",\n \"message-lock-outline\",\n \"message-minus\",\n \"message-minus-outline\",\n \"message-off\",\n \"message-off-outline\",\n \"message-outline\",\n \"message-plus\",\n \"message-plus-outline\",\n \"message-processing\",\n \"message-processing-outline\",\n \"message-question\",\n \"message-question-outline\",\n \"message-reply\",\n \"message-reply-outline\",\n \"message-reply-text\",\n \"message-reply-text-outline\",\n \"message-settings\",\n \"message-settings-outline\",\n \"message-star\",\n \"message-star-outline\",\n \"message-text\",\n \"message-text-clock\",\n \"message-text-clock-outline\",\n \"message-text-fast\",\n \"message-text-fast-outline\",\n \"message-text-lock\",\n \"message-text-lock-outline\",\n \"message-text-outline\",\n \"message-video\",\n \"meteor\",\n \"meter-electric\",\n \"meter-electric-outline\",\n \"meter-gas\",\n \"meter-gas-outline\",\n \"metronome\",\n \"metronome-tick\",\n \"micro-sd\",\n \"microphone\",\n \"microphone-message\",\n \"microphone-message-off\",\n \"microphone-minus\",\n \"microphone-off\",\n \"microphone-outline\",\n \"microphone-plus\",\n \"microphone-question\",\n \"microphone-question-outline\",\n \"microphone-settings\",\n \"microphone-variant\",\n \"microphone-variant-off\",\n \"microscope\",\n \"microsoft\",\n \"microsoft-access\",\n \"microsoft-azure\",\n \"microsoft-azure-devops\",\n \"microsoft-bing\",\n \"microsoft-dynamics-365\",\n \"microsoft-edge\",\n \"microsoft-excel\",\n \"microsoft-internet-explorer\",\n \"microsoft-office\",\n \"microsoft-onedrive\",\n \"microsoft-onenote\",\n \"microsoft-outlook\",\n \"microsoft-powerpoint\",\n \"microsoft-sharepoint\",\n \"microsoft-teams\",\n \"microsoft-visual-studio\",\n \"microsoft-visual-studio-code\",\n \"microsoft-windows\",\n \"microsoft-windows-classic\",\n \"microsoft-word\",\n \"microsoft-xbox\",\n \"microsoft-xbox-controller\",\n \"microsoft-xbox-controller-battery-alert\",\n \"microsoft-xbox-controller-battery-charging\",\n \"microsoft-xbox-controller-battery-empty\",\n \"microsoft-xbox-controller-battery-full\",\n \"microsoft-xbox-controller-battery-low\",\n \"microsoft-xbox-controller-battery-medium\",\n \"microsoft-xbox-controller-battery-unknown\",\n \"microsoft-xbox-controller-menu\",\n \"microsoft-xbox-controller-off\",\n \"microsoft-xbox-controller-view\",\n \"microwave\",\n \"microwave-off\",\n \"middleware\",\n \"middleware-outline\",\n \"midi\",\n \"midi-port\",\n \"mine\",\n \"minecraft\",\n \"mini-sd\",\n \"minidisc\",\n \"minus\",\n \"minus-box\",\n \"minus-box-multiple\",\n \"minus-box-multiple-outline\",\n \"minus-box-outline\",\n \"minus-circle\",\n \"minus-circle-multiple\",\n \"minus-circle-multiple-outline\",\n \"minus-circle-off\",\n \"minus-circle-off-outline\",\n \"minus-circle-outline\",\n \"minus-network\",\n \"minus-network-outline\",\n \"minus-thick\",\n \"mirror\",\n \"mirror-rectangle\",\n \"mirror-variant\",\n \"mixed-martial-arts\",\n \"mixed-reality\",\n \"molecule\",\n \"molecule-co\",\n \"molecule-co2\",\n \"monitor\",\n \"monitor-account\",\n \"monitor-arrow-down\",\n \"monitor-arrow-down-variant\",\n \"monitor-cellphone\",\n \"monitor-cellphone-star\",\n \"monitor-dashboard\",\n \"monitor-edit\",\n \"monitor-eye\",\n \"monitor-lock\",\n \"monitor-multiple\",\n \"monitor-off\",\n \"monitor-screenshot\",\n \"monitor-share\",\n \"monitor-shimmer\",\n \"monitor-small\",\n \"monitor-speaker\",\n \"monitor-speaker-off\",\n \"monitor-star\",\n \"monitor-vertical\",\n \"moon-first-quarter\",\n \"moon-full\",\n \"moon-last-quarter\",\n \"moon-new\",\n \"moon-waning-crescent\",\n \"moon-waning-gibbous\",\n \"moon-waxing-crescent\",\n \"moon-waxing-gibbous\",\n \"moped\",\n \"moped-electric\",\n \"moped-electric-outline\",\n \"moped-outline\",\n \"more\",\n \"mortar-pestle\",\n \"mortar-pestle-plus\",\n \"mosque\",\n \"mosque-outline\",\n \"mother-heart\",\n \"mother-nurse\",\n \"motion\",\n \"motion-outline\",\n \"motion-pause\",\n \"motion-pause-outline\",\n \"motion-play\",\n \"motion-play-outline\",\n \"motion-sensor\",\n \"motion-sensor-off\",\n \"motorbike\",\n \"motorbike-electric\",\n \"motorbike-off\",\n \"mouse\",\n \"mouse-bluetooth\",\n \"mouse-left-click\",\n \"mouse-left-click-outline\",\n \"mouse-move-down\",\n \"mouse-move-up\",\n \"mouse-move-vertical\",\n \"mouse-off\",\n \"mouse-outline\",\n \"mouse-right-click\",\n \"mouse-right-click-outline\",\n \"mouse-scroll-wheel\",\n \"mouse-variant\",\n \"mouse-variant-off\",\n \"move-resize\",\n \"move-resize-variant\",\n \"movie\",\n \"movie-check\",\n \"movie-check-outline\",\n \"movie-cog\",\n \"movie-cog-outline\",\n \"movie-edit\",\n \"movie-edit-outline\",\n \"movie-filter\",\n \"movie-filter-outline\",\n \"movie-minus\",\n \"movie-minus-outline\",\n \"movie-off\",\n \"movie-off-outline\",\n \"movie-open\",\n \"movie-open-check\",\n \"movie-open-check-outline\",\n \"movie-open-cog\",\n \"movie-open-cog-outline\",\n \"movie-open-edit\",\n \"movie-open-edit-outline\",\n \"movie-open-minus\",\n \"movie-open-minus-outline\",\n \"movie-open-off\",\n \"movie-open-off-outline\",\n \"movie-open-outline\",\n \"movie-open-play\",\n \"movie-open-play-outline\",\n \"movie-open-plus\",\n \"movie-open-plus-outline\",\n \"movie-open-remove\",\n \"movie-open-remove-outline\",\n \"movie-open-settings\",\n \"movie-open-settings-outline\",\n \"movie-open-star\",\n \"movie-open-star-outline\",\n \"movie-outline\",\n \"movie-play\",\n \"movie-play-outline\",\n \"movie-plus\",\n \"movie-plus-outline\",\n \"movie-remove\",\n \"movie-remove-outline\",\n \"movie-roll\",\n \"movie-search\",\n \"movie-search-outline\",\n \"movie-settings\",\n \"movie-settings-outline\",\n \"movie-star\",\n \"movie-star-outline\",\n \"mower\",\n \"mower-bag\",\n \"mower-bag-on\",\n \"mower-on\",\n \"muffin\",\n \"multicast\",\n \"multimedia\",\n \"multiplication\",\n \"multiplication-box\",\n \"mushroom\",\n \"mushroom-off\",\n \"mushroom-off-outline\",\n \"mushroom-outline\",\n \"music\",\n \"music-accidental-double-flat\",\n \"music-accidental-double-sharp\",\n \"music-accidental-flat\",\n \"music-accidental-natural\",\n \"music-accidental-sharp\",\n \"music-box\",\n \"music-box-multiple\",\n \"music-box-multiple-outline\",\n \"music-box-outline\",\n \"music-circle\",\n \"music-circle-outline\",\n \"music-clef-alto\",\n \"music-clef-bass\",\n \"music-clef-treble\",\n \"music-note\",\n \"music-note-bluetooth\",\n \"music-note-bluetooth-off\",\n \"music-note-eighth\",\n \"music-note-eighth-dotted\",\n \"music-note-half\",\n \"music-note-half-dotted\",\n \"music-note-minus\",\n \"music-note-off\",\n \"music-note-off-outline\",\n \"music-note-outline\",\n \"music-note-plus\",\n \"music-note-quarter\",\n \"music-note-quarter-dotted\",\n \"music-note-sixteenth\",\n \"music-note-sixteenth-dotted\",\n \"music-note-whole\",\n \"music-note-whole-dotted\",\n \"music-off\",\n \"music-rest-eighth\",\n \"music-rest-half\",\n \"music-rest-quarter\",\n \"music-rest-sixteenth\",\n \"music-rest-whole\",\n \"mustache\",\n \"nail\",\n \"nas\",\n \"nativescript\",\n \"nature\",\n \"nature-outline\",\n \"nature-people\",\n \"nature-people-outline\",\n \"navigation\",\n \"navigation-outline\",\n \"navigation-variant\",\n \"navigation-variant-outline\",\n \"near-me\",\n \"necklace\",\n \"needle\",\n \"needle-off\",\n \"netflix\",\n \"network\",\n \"network-off\",\n \"network-off-outline\",\n \"network-outline\",\n \"network-pos\",\n \"network-strength-1\",\n \"network-strength-1-alert\",\n \"network-strength-2\",\n \"network-strength-2-alert\",\n \"network-strength-3\",\n \"network-strength-3-alert\",\n \"network-strength-4\",\n \"network-strength-4-alert\",\n \"network-strength-4-cog\",\n \"network-strength-off\",\n \"network-strength-off-outline\",\n \"network-strength-outline\",\n \"new-box\",\n \"newspaper\",\n \"newspaper-check\",\n \"newspaper-minus\",\n \"newspaper-plus\",\n \"newspaper-remove\",\n \"newspaper-variant\",\n \"newspaper-variant-multiple\",\n \"newspaper-variant-multiple-outline\",\n \"newspaper-variant-outline\",\n \"nfc\",\n \"nfc-search-variant\",\n \"nfc-tap\",\n \"nfc-variant\",\n \"nfc-variant-off\",\n \"ninja\",\n \"nintendo-game-boy\",\n \"nintendo-switch\",\n \"nintendo-wii\",\n \"nintendo-wiiu\",\n \"nix\",\n \"nodejs\",\n \"noodles\",\n \"not-equal\",\n \"not-equal-variant\",\n \"note\",\n \"note-alert\",\n \"note-alert-outline\",\n \"note-check\",\n \"note-check-outline\",\n \"note-edit\",\n \"note-edit-outline\",\n \"note-minus\",\n \"note-minus-outline\",\n \"note-multiple\",\n \"note-multiple-outline\",\n \"note-off\",\n \"note-off-outline\",\n \"note-outline\",\n \"note-plus\",\n \"note-plus-outline\",\n \"note-remove\",\n \"note-remove-outline\",\n \"note-search\",\n \"note-search-outline\",\n \"note-text\",\n \"note-text-outline\",\n \"notebook\",\n \"notebook-check\",\n \"notebook-check-outline\",\n \"notebook-edit\",\n \"notebook-edit-outline\",\n \"notebook-heart\",\n \"notebook-heart-outline\",\n \"notebook-minus\",\n \"notebook-minus-outline\",\n \"notebook-multiple\",\n \"notebook-outline\",\n \"notebook-plus\",\n \"notebook-plus-outline\",\n \"notebook-remove\",\n \"notebook-remove-outline\",\n \"notification-clear-all\",\n \"npm\",\n \"nuke\",\n \"null\",\n \"numeric\",\n \"numeric-0\",\n \"numeric-0-box\",\n \"numeric-0-box-multiple\",\n \"numeric-0-box-multiple-outline\",\n \"numeric-0-box-outline\",\n \"numeric-0-circle\",\n \"numeric-0-circle-outline\",\n \"numeric-1\",\n \"numeric-1-box\",\n \"numeric-1-box-multiple\",\n \"numeric-1-box-multiple-outline\",\n \"numeric-1-box-outline\",\n \"numeric-1-circle\",\n \"numeric-1-circle-outline\",\n \"numeric-10\",\n \"numeric-10-box\",\n \"numeric-10-box-multiple\",\n \"numeric-10-box-multiple-outline\",\n \"numeric-10-box-outline\",\n \"numeric-10-circle\",\n \"numeric-10-circle-outline\",\n \"numeric-2\",\n \"numeric-2-box\",\n \"numeric-2-box-multiple\",\n \"numeric-2-box-multiple-outline\",\n \"numeric-2-box-outline\",\n \"numeric-2-circle\",\n \"numeric-2-circle-outline\",\n \"numeric-3\",\n \"numeric-3-box\",\n \"numeric-3-box-multiple\",\n \"numeric-3-box-multiple-outline\",\n \"numeric-3-box-outline\",\n \"numeric-3-circle\",\n \"numeric-3-circle-outline\",\n \"numeric-4\",\n \"numeric-4-box\",\n \"numeric-4-box-multiple\",\n \"numeric-4-box-multiple-outline\",\n \"numeric-4-box-outline\",\n \"numeric-4-circle\",\n \"numeric-4-circle-outline\",\n \"numeric-5\",\n \"numeric-5-box\",\n \"numeric-5-box-multiple\",\n \"numeric-5-box-multiple-outline\",\n \"numeric-5-box-outline\",\n \"numeric-5-circle\",\n \"numeric-5-circle-outline\",\n \"numeric-6\",\n \"numeric-6-box\",\n \"numeric-6-box-multiple\",\n \"numeric-6-box-multiple-outline\",\n \"numeric-6-box-outline\",\n \"numeric-6-circle\",\n \"numeric-6-circle-outline\",\n \"numeric-7\",\n \"numeric-7-box\",\n \"numeric-7-box-multiple\",\n \"numeric-7-box-multiple-outline\",\n \"numeric-7-box-outline\",\n \"numeric-7-circle\",\n \"numeric-7-circle-outline\",\n \"numeric-8\",\n \"numeric-8-box\",\n \"numeric-8-box-multiple\",\n \"numeric-8-box-multiple-outline\",\n \"numeric-8-box-outline\",\n \"numeric-8-circle\",\n \"numeric-8-circle-outline\",\n \"numeric-9\",\n \"numeric-9-box\",\n \"numeric-9-box-multiple\",\n \"numeric-9-box-multiple-outline\",\n \"numeric-9-box-outline\",\n \"numeric-9-circle\",\n \"numeric-9-circle-outline\",\n \"numeric-9-plus\",\n \"numeric-9-plus-box\",\n \"numeric-9-plus-box-multiple\",\n \"numeric-9-plus-box-multiple-outline\",\n \"numeric-9-plus-box-outline\",\n \"numeric-9-plus-circle\",\n \"numeric-9-plus-circle-outline\",\n \"numeric-negative-1\",\n \"numeric-off\",\n \"numeric-positive-1\",\n \"nut\",\n \"nutrition\",\n \"nuxt\",\n \"oar\",\n \"ocarina\",\n \"oci\",\n \"ocr\",\n \"octagon\",\n \"octagon-outline\",\n \"octagram\",\n \"octagram-edit\",\n \"octagram-edit-outline\",\n \"octagram-minus\",\n \"octagram-minus-outline\",\n \"octagram-outline\",\n \"octagram-plus\",\n \"octagram-plus-outline\",\n \"octahedron\",\n \"octahedron-off\",\n \"odnoklassniki\",\n \"offer\",\n \"office-building\",\n \"office-building-cog\",\n \"office-building-cog-outline\",\n \"office-building-marker\",\n \"office-building-marker-outline\",\n \"office-building-minus\",\n \"office-building-minus-outline\",\n \"office-building-outline\",\n \"office-building-plus\",\n \"office-building-plus-outline\",\n \"office-building-remove\",\n \"office-building-remove-outline\",\n \"oil\",\n \"oil-lamp\",\n \"oil-level\",\n \"oil-temperature\",\n \"om\",\n \"omega\",\n \"one-up\",\n \"onepassword\",\n \"opacity\",\n \"open-in-app\",\n \"open-in-new\",\n \"open-source-initiative\",\n \"openid\",\n \"opera\",\n \"orbit\",\n \"orbit-variant\",\n \"order-alphabetical-ascending\",\n \"order-alphabetical-descending\",\n \"order-bool-ascending\",\n \"order-bool-ascending-variant\",\n \"order-bool-descending\",\n \"order-bool-descending-variant\",\n \"order-numeric-ascending\",\n \"order-numeric-descending\",\n \"origin\",\n \"ornament\",\n \"ornament-variant\",\n \"outdoor-lamp\",\n \"overscan\",\n \"owl\",\n \"pac-man\",\n \"package\",\n \"package-check\",\n \"package-down\",\n \"package-up\",\n \"package-variant\",\n \"package-variant-closed\",\n \"package-variant-closed-check\",\n \"package-variant-closed-minus\",\n \"package-variant-closed-plus\",\n \"package-variant-closed-remove\",\n \"package-variant-minus\",\n \"package-variant-plus\",\n \"package-variant-remove\",\n \"page-first\",\n \"page-last\",\n \"page-layout-body\",\n \"page-layout-footer\",\n \"page-layout-header\",\n \"page-layout-header-footer\",\n \"page-layout-sidebar-left\",\n \"page-layout-sidebar-right\",\n \"page-next\",\n \"page-next-outline\",\n \"page-previous\",\n \"page-previous-outline\",\n \"pail\",\n \"pail-minus\",\n \"pail-minus-outline\",\n \"pail-off\",\n \"pail-off-outline\",\n \"pail-outline\",\n \"pail-plus\",\n \"pail-plus-outline\",\n \"pail-remove\",\n \"pail-remove-outline\",\n \"palette\",\n \"palette-advanced\",\n \"palette-outline\",\n \"palette-swatch\",\n \"palette-swatch-outline\",\n \"palette-swatch-variant\",\n \"palm-tree\",\n \"pan\",\n \"pan-bottom-left\",\n \"pan-bottom-right\",\n \"pan-down\",\n \"pan-horizontal\",\n \"pan-left\",\n \"pan-right\",\n \"pan-top-left\",\n \"pan-top-right\",\n \"pan-up\",\n \"pan-vertical\",\n \"panda\",\n \"pandora\",\n \"panorama\",\n \"panorama-fisheye\",\n \"panorama-horizontal\",\n \"panorama-horizontal-outline\",\n \"panorama-outline\",\n \"panorama-sphere\",\n \"panorama-sphere-outline\",\n \"panorama-variant\",\n \"panorama-variant-outline\",\n \"panorama-vertical\",\n \"panorama-vertical-outline\",\n \"panorama-wide-angle\",\n \"panorama-wide-angle-outline\",\n \"paper-cut-vertical\",\n \"paper-roll\",\n \"paper-roll-outline\",\n \"paperclip\",\n \"paperclip-check\",\n \"paperclip-lock\",\n \"paperclip-minus\",\n \"paperclip-off\",\n \"paperclip-plus\",\n \"paperclip-remove\",\n \"parachute\",\n \"parachute-outline\",\n \"paragliding\",\n \"parking\",\n \"party-popper\",\n \"passport\",\n \"passport-alert\",\n \"passport-biometric\",\n \"passport-cancel\",\n \"passport-check\",\n \"passport-minus\",\n \"passport-plus\",\n \"passport-remove\",\n \"pasta\",\n \"patio-heater\",\n \"patreon\",\n \"pause\",\n \"pause-box\",\n \"pause-box-outline\",\n \"pause-circle\",\n \"pause-circle-outline\",\n \"pause-octagon\",\n \"pause-octagon-outline\",\n \"paw\",\n \"paw-off\",\n \"paw-off-outline\",\n \"paw-outline\",\n \"peace\",\n \"peanut\",\n \"peanut-off\",\n \"peanut-off-outline\",\n \"peanut-outline\",\n \"pen\",\n \"pen-lock\",\n \"pen-minus\",\n \"pen-off\",\n \"pen-plus\",\n \"pen-remove\",\n \"pencil\",\n \"pencil-box\",\n \"pencil-box-multiple\",\n \"pencil-box-multiple-outline\",\n \"pencil-box-outline\",\n \"pencil-circle\",\n \"pencil-circle-outline\",\n \"pencil-lock\",\n \"pencil-lock-outline\",\n \"pencil-minus\",\n \"pencil-minus-outline\",\n \"pencil-off\",\n \"pencil-off-outline\",\n \"pencil-outline\",\n \"pencil-plus\",\n \"pencil-plus-outline\",\n \"pencil-remove\",\n \"pencil-remove-outline\",\n \"pencil-ruler\",\n \"pencil-ruler-outline\",\n \"penguin\",\n \"pentagon\",\n \"pentagon-outline\",\n \"pentagram\",\n \"percent\",\n \"percent-box\",\n \"percent-box-outline\",\n \"percent-circle\",\n \"percent-circle-outline\",\n \"percent-outline\",\n \"periodic-table\",\n \"perspective-less\",\n \"perspective-more\",\n \"ph\",\n \"phone\",\n \"phone-alert\",\n \"phone-alert-outline\",\n \"phone-bluetooth\",\n \"phone-bluetooth-outline\",\n \"phone-cancel\",\n \"phone-cancel-outline\",\n \"phone-check\",\n \"phone-check-outline\",\n \"phone-classic\",\n \"phone-classic-off\",\n \"phone-clock\",\n \"phone-dial\",\n \"phone-dial-outline\",\n \"phone-forward\",\n \"phone-forward-outline\",\n \"phone-hangup\",\n \"phone-hangup-outline\",\n \"phone-in-talk\",\n \"phone-in-talk-outline\",\n \"phone-incoming\",\n \"phone-incoming-outgoing\",\n \"phone-incoming-outgoing-outline\",\n \"phone-incoming-outline\",\n \"phone-lock\",\n \"phone-lock-outline\",\n \"phone-log\",\n \"phone-log-outline\",\n \"phone-message\",\n \"phone-message-outline\",\n \"phone-minus\",\n \"phone-minus-outline\",\n \"phone-missed\",\n \"phone-missed-outline\",\n \"phone-off\",\n \"phone-off-outline\",\n \"phone-outgoing\",\n \"phone-outgoing-outline\",\n \"phone-outline\",\n \"phone-paused\",\n \"phone-paused-outline\",\n \"phone-plus\",\n \"phone-plus-outline\",\n \"phone-refresh\",\n \"phone-refresh-outline\",\n \"phone-remove\",\n \"phone-remove-outline\",\n \"phone-return\",\n \"phone-return-outline\",\n \"phone-ring\",\n \"phone-ring-outline\",\n \"phone-rotate-landscape\",\n \"phone-rotate-portrait\",\n \"phone-settings\",\n \"phone-settings-outline\",\n \"phone-sync\",\n \"phone-sync-outline\",\n \"phone-voip\",\n \"pi\",\n \"pi-box\",\n \"pi-hole\",\n \"piano\",\n \"piano-off\",\n \"pickaxe\",\n \"picture-in-picture-bottom-right\",\n \"picture-in-picture-bottom-right-outline\",\n \"picture-in-picture-top-right\",\n \"picture-in-picture-top-right-outline\",\n \"pier\",\n \"pier-crane\",\n \"pig\",\n \"pig-variant\",\n \"pig-variant-outline\",\n \"piggy-bank\",\n \"piggy-bank-outline\",\n \"pill\",\n \"pill-multiple\",\n \"pill-off\",\n \"pillar\",\n \"pin\",\n \"pin-off\",\n \"pin-off-outline\",\n \"pin-outline\",\n \"pine-tree\",\n \"pine-tree-box\",\n \"pine-tree-fire\",\n \"pine-tree-variant\",\n \"pine-tree-variant-outline\",\n \"pinterest\",\n \"pinwheel\",\n \"pinwheel-outline\",\n \"pipe\",\n \"pipe-disconnected\",\n \"pipe-leak\",\n \"pipe-valve\",\n \"pipe-wrench\",\n \"pirate\",\n \"pistol\",\n \"piston\",\n \"pitchfork\",\n \"pizza\",\n \"plane-car\",\n \"plane-train\",\n \"play\",\n \"play-box\",\n \"play-box-edit-outline\",\n \"play-box-lock\",\n \"play-box-lock-open\",\n \"play-box-lock-open-outline\",\n \"play-box-lock-outline\",\n \"play-box-multiple\",\n \"play-box-multiple-outline\",\n \"play-box-outline\",\n \"play-circle\",\n \"play-circle-outline\",\n \"play-network\",\n \"play-network-outline\",\n \"play-outline\",\n \"play-pause\",\n \"play-protected-content\",\n \"play-speed\",\n \"playlist-check\",\n \"playlist-edit\",\n \"playlist-minus\",\n \"playlist-music\",\n \"playlist-music-outline\",\n \"playlist-play\",\n \"playlist-plus\",\n \"playlist-remove\",\n \"playlist-star\",\n \"plex\",\n \"pliers\",\n \"plus\",\n \"plus-box\",\n \"plus-box-multiple\",\n \"plus-box-multiple-outline\",\n \"plus-box-outline\",\n \"plus-circle\",\n \"plus-circle-multiple\",\n \"plus-circle-multiple-outline\",\n \"plus-circle-outline\",\n \"plus-lock\",\n \"plus-lock-open\",\n \"plus-minus\",\n \"plus-minus-box\",\n \"plus-minus-variant\",\n \"plus-network\",\n \"plus-network-outline\",\n \"plus-outline\",\n \"plus-thick\",\n \"pocket\",\n \"podcast\",\n \"podium\",\n \"podium-bronze\",\n \"podium-gold\",\n \"podium-silver\",\n \"point-of-sale\",\n \"pokeball\",\n \"pokemon-go\",\n \"poker-chip\",\n \"polaroid\",\n \"police-badge\",\n \"police-badge-outline\",\n \"police-station\",\n \"poll\",\n \"polo\",\n \"polymer\",\n \"pool\",\n \"pool-thermometer\",\n \"popcorn\",\n \"post\",\n \"post-lamp\",\n \"post-outline\",\n \"postage-stamp\",\n \"pot\",\n \"pot-mix\",\n \"pot-mix-outline\",\n \"pot-outline\",\n \"pot-steam\",\n \"pot-steam-outline\",\n \"pound\",\n \"pound-box\",\n \"pound-box-outline\",\n \"power\",\n \"power-cycle\",\n \"power-off\",\n \"power-on\",\n \"power-plug\",\n \"power-plug-battery\",\n \"power-plug-battery-outline\",\n \"power-plug-off\",\n \"power-plug-off-outline\",\n \"power-plug-outline\",\n \"power-settings\",\n \"power-sleep\",\n \"power-socket\",\n \"power-socket-au\",\n \"power-socket-ch\",\n \"power-socket-de\",\n \"power-socket-eu\",\n \"power-socket-fr\",\n \"power-socket-it\",\n \"power-socket-jp\",\n \"power-socket-uk\",\n \"power-socket-us\",\n \"power-standby\",\n \"powershell\",\n \"prescription\",\n \"presentation\",\n \"presentation-play\",\n \"pretzel\",\n \"printer\",\n \"printer-3d\",\n \"printer-3d-nozzle\",\n \"printer-3d-nozzle-alert\",\n \"printer-3d-nozzle-alert-outline\",\n \"printer-3d-nozzle-heat\",\n \"printer-3d-nozzle-heat-outline\",\n \"printer-3d-nozzle-off\",\n \"printer-3d-nozzle-off-outline\",\n \"printer-3d-nozzle-outline\",\n \"printer-3d-off\",\n \"printer-alert\",\n \"printer-check\",\n \"printer-eye\",\n \"printer-off\",\n \"printer-off-outline\",\n \"printer-outline\",\n \"printer-pos\",\n \"printer-pos-alert\",\n \"printer-pos-alert-outline\",\n \"printer-pos-cancel\",\n \"printer-pos-cancel-outline\",\n \"printer-pos-check\",\n \"printer-pos-check-outline\",\n \"printer-pos-cog\",\n \"printer-pos-cog-outline\",\n \"printer-pos-edit\",\n \"printer-pos-edit-outline\",\n \"printer-pos-minus\",\n \"printer-pos-minus-outline\",\n \"printer-pos-network\",\n \"printer-pos-network-outline\",\n \"printer-pos-off\",\n \"printer-pos-off-outline\",\n \"printer-pos-outline\",\n \"printer-pos-pause\",\n \"printer-pos-pause-outline\",\n \"printer-pos-play\",\n \"printer-pos-play-outline\",\n \"printer-pos-plus\",\n \"printer-pos-plus-outline\",\n \"printer-pos-refresh\",\n \"printer-pos-refresh-outline\",\n \"printer-pos-remove\",\n \"printer-pos-remove-outline\",\n \"printer-pos-star\",\n \"printer-pos-star-outline\",\n \"printer-pos-stop\",\n \"printer-pos-stop-outline\",\n \"printer-pos-sync\",\n \"printer-pos-sync-outline\",\n \"printer-pos-wrench\",\n \"printer-pos-wrench-outline\",\n \"printer-search\",\n \"printer-settings\",\n \"printer-wireless\",\n \"priority-high\",\n \"priority-low\",\n \"professional-hexagon\",\n \"progress-alert\",\n \"progress-check\",\n \"progress-clock\",\n \"progress-close\",\n \"progress-download\",\n \"progress-helper\",\n \"progress-pencil\",\n \"progress-question\",\n \"progress-star\",\n \"progress-star-four-points\",\n \"progress-tag\",\n \"progress-upload\",\n \"progress-wrench\",\n \"projector\",\n \"projector-off\",\n \"projector-screen\",\n \"projector-screen-off\",\n \"projector-screen-off-outline\",\n \"projector-screen-outline\",\n \"projector-screen-variant\",\n \"projector-screen-variant-off\",\n \"projector-screen-variant-off-outline\",\n \"projector-screen-variant-outline\",\n \"propane-tank\",\n \"propane-tank-outline\",\n \"protocol\",\n \"publish\",\n \"publish-off\",\n \"pulse\",\n \"pump\",\n \"pump-off\",\n \"pumpkin\",\n \"purse\",\n \"purse-outline\",\n \"puzzle\",\n \"puzzle-check\",\n \"puzzle-check-outline\",\n \"puzzle-edit\",\n \"puzzle-edit-outline\",\n \"puzzle-heart\",\n \"puzzle-heart-outline\",\n \"puzzle-minus\",\n \"puzzle-minus-outline\",\n \"puzzle-outline\",\n \"puzzle-plus\",\n \"puzzle-plus-outline\",\n \"puzzle-remove\",\n \"puzzle-remove-outline\",\n \"puzzle-star\",\n \"puzzle-star-outline\",\n \"pyramid\",\n \"pyramid-off\",\n \"qi\",\n \"qqchat\",\n \"qrcode\",\n \"qrcode-edit\",\n \"qrcode-minus\",\n \"qrcode-plus\",\n \"qrcode-remove\",\n \"qrcode-scan\",\n \"quadcopter\",\n \"quality-high\",\n \"quality-low\",\n \"quality-medium\",\n \"queue-first-in-last-out\",\n \"quora\",\n \"rabbit\",\n \"rabbit-variant\",\n \"rabbit-variant-outline\",\n \"racing-helmet\",\n \"racquetball\",\n \"radar\",\n \"radiator\",\n \"radiator-disabled\",\n \"radiator-off\",\n \"radio\",\n \"radio-am\",\n \"radio-fm\",\n \"radio-handheld\",\n \"radio-off\",\n \"radio-tower\",\n \"radioactive\",\n \"radioactive-circle\",\n \"radioactive-circle-outline\",\n \"radioactive-off\",\n \"radiobox-blank\",\n \"radiobox-indeterminate-variant\",\n \"radiobox-marked\",\n \"radiology-box\",\n \"radiology-box-outline\",\n \"radius\",\n \"radius-outline\",\n \"railroad-light\",\n \"rake\",\n \"raspberry-pi\",\n \"raw\",\n \"raw-off\",\n \"ray-end\",\n \"ray-end-arrow\",\n \"ray-start\",\n \"ray-start-arrow\",\n \"ray-start-end\",\n \"ray-start-vertex-end\",\n \"ray-vertex\",\n \"razor-double-edge\",\n \"razor-single-edge\",\n \"react\",\n \"read\",\n \"receipt\",\n \"receipt-clock\",\n \"receipt-clock-outline\",\n \"receipt-outline\",\n \"receipt-send\",\n \"receipt-send-outline\",\n \"receipt-text\",\n \"receipt-text-arrow-left\",\n \"receipt-text-arrow-left-outline\",\n \"receipt-text-arrow-right\",\n \"receipt-text-arrow-right-outline\",\n \"receipt-text-check\",\n \"receipt-text-check-outline\",\n \"receipt-text-clock\",\n \"receipt-text-clock-outline\",\n \"receipt-text-edit\",\n \"receipt-text-edit-outline\",\n \"receipt-text-minus\",\n \"receipt-text-minus-outline\",\n \"receipt-text-outline\",\n \"receipt-text-plus\",\n \"receipt-text-plus-outline\",\n \"receipt-text-remove\",\n \"receipt-text-remove-outline\",\n \"receipt-text-send\",\n \"receipt-text-send-outline\",\n \"record\",\n \"record-circle\",\n \"record-circle-outline\",\n \"record-player\",\n \"record-rec\",\n \"rectangle\",\n \"rectangle-outline\",\n \"recycle\",\n \"recycle-variant\",\n \"reddit\",\n \"redhat\",\n \"redo\",\n \"redo-variant\",\n \"reflect-horizontal\",\n \"reflect-vertical\",\n \"refresh\",\n \"refresh-auto\",\n \"refresh-circle\",\n \"regex\",\n \"registered-trademark\",\n \"reiterate\",\n \"relation-many-to-many\",\n \"relation-many-to-one\",\n \"relation-many-to-one-or-many\",\n \"relation-many-to-only-one\",\n \"relation-many-to-zero-or-many\",\n \"relation-many-to-zero-or-one\",\n \"relation-one-or-many-to-many\",\n \"relation-one-or-many-to-one\",\n \"relation-one-or-many-to-one-or-many\",\n \"relation-one-or-many-to-only-one\",\n \"relation-one-or-many-to-zero-or-many\",\n \"relation-one-or-many-to-zero-or-one\",\n \"relation-one-to-many\",\n \"relation-one-to-one\",\n \"relation-one-to-one-or-many\",\n \"relation-one-to-only-one\",\n \"relation-one-to-zero-or-many\",\n \"relation-one-to-zero-or-one\",\n \"relation-only-one-to-many\",\n \"relation-only-one-to-one\",\n \"relation-only-one-to-one-or-many\",\n \"relation-only-one-to-only-one\",\n \"relation-only-one-to-zero-or-many\",\n \"relation-only-one-to-zero-or-one\",\n \"relation-zero-or-many-to-many\",\n \"relation-zero-or-many-to-one\",\n \"relation-zero-or-many-to-one-or-many\",\n \"relation-zero-or-many-to-only-one\",\n \"relation-zero-or-many-to-zero-or-many\",\n \"relation-zero-or-many-to-zero-or-one\",\n \"relation-zero-or-one-to-many\",\n \"relation-zero-or-one-to-one\",\n \"relation-zero-or-one-to-one-or-many\",\n \"relation-zero-or-one-to-only-one\",\n \"relation-zero-or-one-to-zero-or-many\",\n \"relation-zero-or-one-to-zero-or-one\",\n \"relative-scale\",\n \"reload\",\n \"reload-alert\",\n \"reminder\",\n \"remote\",\n \"remote-desktop\",\n \"remote-off\",\n \"remote-tv\",\n \"remote-tv-off\",\n \"rename\",\n \"rename-box\",\n \"rename-box-outline\",\n \"rename-outline\",\n \"reorder-horizontal\",\n \"reorder-vertical\",\n \"repeat\",\n \"repeat-off\",\n \"repeat-once\",\n \"repeat-variant\",\n \"replay\",\n \"reply\",\n \"reply-all\",\n \"reply-all-outline\",\n \"reply-circle\",\n \"reply-outline\",\n \"reproduction\",\n \"resistor\",\n \"resistor-nodes\",\n \"resize\",\n \"resize-bottom-right\",\n \"responsive\",\n \"restart\",\n \"restart-alert\",\n \"restart-off\",\n \"restore\",\n \"restore-alert\",\n \"rewind\",\n \"rewind-10\",\n \"rewind-15\",\n \"rewind-30\",\n \"rewind-45\",\n \"rewind-5\",\n \"rewind-60\",\n \"rewind-outline\",\n \"rhombus\",\n \"rhombus-medium\",\n \"rhombus-medium-outline\",\n \"rhombus-outline\",\n \"rhombus-split\",\n \"rhombus-split-outline\",\n \"ribbon\",\n \"rice\",\n \"rickshaw\",\n \"rickshaw-electric\",\n \"ring\",\n \"rivet\",\n \"road\",\n \"road-variant\",\n \"robber\",\n \"robot\",\n \"robot-angry\",\n \"robot-angry-outline\",\n \"robot-confused\",\n \"robot-confused-outline\",\n \"robot-dead\",\n \"robot-dead-outline\",\n \"robot-excited\",\n \"robot-excited-outline\",\n \"robot-happy\",\n \"robot-happy-outline\",\n \"robot-industrial\",\n \"robot-industrial-outline\",\n \"robot-love\",\n \"robot-love-outline\",\n \"robot-mower\",\n \"robot-mower-outline\",\n \"robot-off\",\n \"robot-off-outline\",\n \"robot-outline\",\n \"robot-vacuum\",\n \"robot-vacuum-alert\",\n \"robot-vacuum-off\",\n \"robot-vacuum-variant\",\n \"robot-vacuum-variant-alert\",\n \"robot-vacuum-variant-off\",\n \"rocket\",\n \"rocket-launch\",\n \"rocket-launch-outline\",\n \"rocket-outline\",\n \"rodent\",\n \"roller-shade\",\n \"roller-shade-closed\",\n \"roller-skate\",\n \"roller-skate-off\",\n \"rollerblade\",\n \"rollerblade-off\",\n \"rollupjs\",\n \"rolodex\",\n \"rolodex-outline\",\n \"roman-numeral-1\",\n \"roman-numeral-10\",\n \"roman-numeral-2\",\n \"roman-numeral-3\",\n \"roman-numeral-4\",\n \"roman-numeral-5\",\n \"roman-numeral-6\",\n \"roman-numeral-7\",\n \"roman-numeral-8\",\n \"roman-numeral-9\",\n \"room-service\",\n \"room-service-outline\",\n \"rotate-360\",\n \"rotate-3d\",\n \"rotate-3d-variant\",\n \"rotate-left\",\n \"rotate-left-variant\",\n \"rotate-orbit\",\n \"rotate-right\",\n \"rotate-right-variant\",\n \"rounded-corner\",\n \"router\",\n \"router-network\",\n \"router-network-wireless\",\n \"router-wireless\",\n \"router-wireless-off\",\n \"router-wireless-settings\",\n \"routes\",\n \"routes-clock\",\n \"rowing\",\n \"rss\",\n \"rss-box\",\n \"rss-off\",\n \"rug\",\n \"rugby\",\n \"ruler\",\n \"ruler-square\",\n \"ruler-square-compass\",\n \"run\",\n \"run-fast\",\n \"rv-truck\",\n \"sack\",\n \"sack-outline\",\n \"sack-percent\",\n \"safe\",\n \"safe-square\",\n \"safe-square-outline\",\n \"safety-goggles\",\n \"sail-boat\",\n \"sail-boat-sink\",\n \"sale\",\n \"sale-outline\",\n \"salesforce\",\n \"sass\",\n \"satellite\",\n \"satellite-uplink\",\n \"satellite-variant\",\n \"sausage\",\n \"sausage-off\",\n \"saw-blade\",\n \"sawtooth-wave\",\n \"saxophone\",\n \"scale\",\n \"scale-balance\",\n \"scale-bathroom\",\n \"scale-off\",\n \"scale-unbalanced\",\n \"scan-helper\",\n \"scanner\",\n \"scanner-off\",\n \"scatter-plot\",\n \"scatter-plot-outline\",\n \"scent\",\n \"scent-off\",\n \"school\",\n \"school-outline\",\n \"scissors-cutting\",\n \"scooter\",\n \"scooter-electric\",\n \"scoreboard\",\n \"scoreboard-outline\",\n \"screen-rotation\",\n \"screen-rotation-lock\",\n \"screw-flat-top\",\n \"screw-lag\",\n \"screw-machine-flat-top\",\n \"screw-machine-round-top\",\n \"screw-round-top\",\n \"screwdriver\",\n \"script\",\n \"script-outline\",\n \"script-text\",\n \"script-text-key\",\n \"script-text-key-outline\",\n \"script-text-outline\",\n \"script-text-play\",\n \"script-text-play-outline\",\n \"sd\",\n \"seal\",\n \"seal-variant\",\n \"search-web\",\n \"seat\",\n \"seat-flat\",\n \"seat-flat-angled\",\n \"seat-individual-suite\",\n \"seat-legroom-extra\",\n \"seat-legroom-normal\",\n \"seat-legroom-reduced\",\n \"seat-outline\",\n \"seat-passenger\",\n \"seat-recline-extra\",\n \"seat-recline-normal\",\n \"seatbelt\",\n \"security\",\n \"security-network\",\n \"seed\",\n \"seed-off\",\n \"seed-off-outline\",\n \"seed-outline\",\n \"seed-plus\",\n \"seed-plus-outline\",\n \"seesaw\",\n \"segment\",\n \"select\",\n \"select-all\",\n \"select-arrow-down\",\n \"select-arrow-up\",\n \"select-color\",\n \"select-compare\",\n \"select-drag\",\n \"select-group\",\n \"select-inverse\",\n \"select-marker\",\n \"select-multiple\",\n \"select-multiple-marker\",\n \"select-off\",\n \"select-place\",\n \"select-remove\",\n \"select-search\",\n \"selection\",\n \"selection-drag\",\n \"selection-ellipse\",\n \"selection-ellipse-arrow-inside\",\n \"selection-ellipse-remove\",\n \"selection-marker\",\n \"selection-multiple\",\n \"selection-multiple-marker\",\n \"selection-off\",\n \"selection-remove\",\n \"selection-search\",\n \"semantic-web\",\n \"send\",\n \"send-check\",\n \"send-check-outline\",\n \"send-circle\",\n \"send-circle-outline\",\n \"send-clock\",\n \"send-clock-outline\",\n \"send-lock\",\n \"send-lock-outline\",\n \"send-outline\",\n \"send-variant\",\n \"send-variant-clock\",\n \"send-variant-clock-outline\",\n \"send-variant-outline\",\n \"serial-port\",\n \"server\",\n \"server-minus\",\n \"server-minus-outline\",\n \"server-network\",\n \"server-network-off\",\n \"server-network-outline\",\n \"server-off\",\n \"server-outline\",\n \"server-plus\",\n \"server-plus-outline\",\n \"server-remove\",\n \"server-security\",\n \"set-all\",\n \"set-center\",\n \"set-center-right\",\n \"set-left\",\n \"set-left-center\",\n \"set-left-right\",\n \"set-merge\",\n \"set-none\",\n \"set-right\",\n \"set-split\",\n \"set-square\",\n \"set-top-box\",\n \"settings-helper\",\n \"shaker\",\n \"shaker-outline\",\n \"shape\",\n \"shape-circle-plus\",\n \"shape-outline\",\n \"shape-oval-plus\",\n \"shape-plus\",\n \"shape-plus-outline\",\n \"shape-polygon-plus\",\n \"shape-rectangle-plus\",\n \"shape-square-plus\",\n \"shape-square-rounded-plus\",\n \"share\",\n \"share-all\",\n \"share-all-outline\",\n \"share-circle\",\n \"share-off\",\n \"share-off-outline\",\n \"share-outline\",\n \"share-variant\",\n \"share-variant-outline\",\n \"shark\",\n \"shark-fin\",\n \"shark-fin-outline\",\n \"shark-off\",\n \"sheep\",\n \"shield\",\n \"shield-account\",\n \"shield-account-outline\",\n \"shield-account-variant\",\n \"shield-account-variant-outline\",\n \"shield-airplane\",\n \"shield-airplane-outline\",\n \"shield-alert\",\n \"shield-alert-outline\",\n \"shield-bug\",\n \"shield-bug-outline\",\n \"shield-car\",\n \"shield-check\",\n \"shield-check-outline\",\n \"shield-cross\",\n \"shield-cross-outline\",\n \"shield-crown\",\n \"shield-crown-outline\",\n \"shield-edit\",\n \"shield-edit-outline\",\n \"shield-half\",\n \"shield-half-full\",\n \"shield-home\",\n \"shield-home-outline\",\n \"shield-key\",\n \"shield-key-outline\",\n \"shield-link-variant\",\n \"shield-link-variant-outline\",\n \"shield-lock\",\n \"shield-lock-open\",\n \"shield-lock-open-outline\",\n \"shield-lock-outline\",\n \"shield-moon\",\n \"shield-moon-outline\",\n \"shield-off\",\n \"shield-off-outline\",\n \"shield-outline\",\n \"shield-plus\",\n \"shield-plus-outline\",\n \"shield-refresh\",\n \"shield-refresh-outline\",\n \"shield-remove\",\n \"shield-remove-outline\",\n \"shield-search\",\n \"shield-star\",\n \"shield-star-outline\",\n \"shield-sun\",\n \"shield-sun-outline\",\n \"shield-sword\",\n \"shield-sword-outline\",\n \"shield-sync\",\n \"shield-sync-outline\",\n \"shimmer\",\n \"ship-wheel\",\n \"shipping-pallet\",\n \"shoe-ballet\",\n \"shoe-cleat\",\n \"shoe-formal\",\n \"shoe-heel\",\n \"shoe-print\",\n \"shoe-sneaker\",\n \"shopping\",\n \"shopping-music\",\n \"shopping-outline\",\n \"shopping-search\",\n \"shopping-search-outline\",\n \"shore\",\n \"shovel\",\n \"shovel-off\",\n \"shower\",\n \"shower-head\",\n \"shredder\",\n \"shuffle\",\n \"shuffle-disabled\",\n \"shuffle-variant\",\n \"shuriken\",\n \"sickle\",\n \"sigma\",\n \"sigma-lower\",\n \"sign-caution\",\n \"sign-direction\",\n \"sign-direction-minus\",\n \"sign-direction-plus\",\n \"sign-direction-remove\",\n \"sign-language\",\n \"sign-language-outline\",\n \"sign-pole\",\n \"sign-real-estate\",\n \"sign-text\",\n \"sign-yield\",\n \"signal\",\n \"signal-2g\",\n \"signal-3g\",\n \"signal-4g\",\n \"signal-5g\",\n \"signal-cellular-1\",\n \"signal-cellular-2\",\n \"signal-cellular-3\",\n \"signal-cellular-outline\",\n \"signal-distance-variant\",\n \"signal-hspa\",\n \"signal-hspa-plus\",\n \"signal-off\",\n \"signal-variant\",\n \"signature\",\n \"signature-freehand\",\n \"signature-image\",\n \"signature-text\",\n \"silo\",\n \"silo-outline\",\n \"silverware\",\n \"silverware-clean\",\n \"silverware-fork\",\n \"silverware-fork-knife\",\n \"silverware-spoon\",\n \"silverware-variant\",\n \"sim\",\n \"sim-alert\",\n \"sim-alert-outline\",\n \"sim-off\",\n \"sim-off-outline\",\n \"sim-outline\",\n \"simple-icons\",\n \"sina-weibo\",\n \"sine-wave\",\n \"sitemap\",\n \"sitemap-outline\",\n \"size-l\",\n \"size-m\",\n \"size-s\",\n \"size-xl\",\n \"size-xs\",\n \"size-xxl\",\n \"size-xxs\",\n \"size-xxxl\",\n \"skate\",\n \"skate-off\",\n \"skateboard\",\n \"skateboarding\",\n \"skew-less\",\n \"skew-more\",\n \"ski\",\n \"ski-cross-country\",\n \"ski-water\",\n \"skip-backward\",\n \"skip-backward-outline\",\n \"skip-forward\",\n \"skip-forward-outline\",\n \"skip-next\",\n \"skip-next-circle\",\n \"skip-next-circle-outline\",\n \"skip-next-outline\",\n \"skip-previous\",\n \"skip-previous-circle\",\n \"skip-previous-circle-outline\",\n \"skip-previous-outline\",\n \"skull\",\n \"skull-crossbones\",\n \"skull-crossbones-outline\",\n \"skull-outline\",\n \"skull-scan\",\n \"skull-scan-outline\",\n \"skype\",\n \"skype-business\",\n \"slack\",\n \"slash-forward\",\n \"slash-forward-box\",\n \"sledding\",\n \"sleep\",\n \"sleep-off\",\n \"slide\",\n \"slope-downhill\",\n \"slope-uphill\",\n \"slot-machine\",\n \"slot-machine-outline\",\n \"smart-card\",\n \"smart-card-off\",\n \"smart-card-off-outline\",\n \"smart-card-outline\",\n \"smart-card-reader\",\n \"smart-card-reader-outline\",\n \"smog\",\n \"smoke\",\n \"smoke-detector\",\n \"smoke-detector-alert\",\n \"smoke-detector-alert-outline\",\n \"smoke-detector-off\",\n \"smoke-detector-off-outline\",\n \"smoke-detector-outline\",\n \"smoke-detector-variant\",\n \"smoke-detector-variant-alert\",\n \"smoke-detector-variant-off\",\n \"smoking\",\n \"smoking-off\",\n \"smoking-pipe\",\n \"smoking-pipe-off\",\n \"snail\",\n \"snake\",\n \"snapchat\",\n \"snowboard\",\n \"snowflake\",\n \"snowflake-alert\",\n \"snowflake-check\",\n \"snowflake-melt\",\n \"snowflake-off\",\n \"snowflake-thermometer\",\n \"snowflake-variant\",\n \"snowman\",\n \"snowmobile\",\n \"snowshoeing\",\n \"soccer\",\n \"soccer-field\",\n \"social-distance-2-meters\",\n \"social-distance-6-feet\",\n \"sofa\",\n \"sofa-outline\",\n \"sofa-single\",\n \"sofa-single-outline\",\n \"solar-panel\",\n \"solar-panel-large\",\n \"solar-power\",\n \"solar-power-variant\",\n \"solar-power-variant-outline\",\n \"soldering-iron\",\n \"solid\",\n \"sony-playstation\",\n \"sort\",\n \"sort-alphabetical-ascending\",\n \"sort-alphabetical-ascending-variant\",\n \"sort-alphabetical-descending\",\n \"sort-alphabetical-descending-variant\",\n \"sort-alphabetical-variant\",\n \"sort-ascending\",\n \"sort-bool-ascending\",\n \"sort-bool-ascending-variant\",\n \"sort-bool-descending\",\n \"sort-bool-descending-variant\",\n \"sort-calendar-ascending\",\n \"sort-calendar-descending\",\n \"sort-clock-ascending\",\n \"sort-clock-ascending-outline\",\n \"sort-clock-descending\",\n \"sort-clock-descending-outline\",\n \"sort-descending\",\n \"sort-numeric-ascending\",\n \"sort-numeric-ascending-variant\",\n \"sort-numeric-descending\",\n \"sort-numeric-descending-variant\",\n \"sort-numeric-variant\",\n \"sort-reverse-variant\",\n \"sort-variant\",\n \"sort-variant-lock\",\n \"sort-variant-lock-open\",\n \"sort-variant-off\",\n \"sort-variant-remove\",\n \"soundbar\",\n \"soundcloud\",\n \"source-branch\",\n \"source-branch-check\",\n \"source-branch-minus\",\n \"source-branch-plus\",\n \"source-branch-refresh\",\n \"source-branch-remove\",\n \"source-branch-sync\",\n \"source-commit\",\n \"source-commit-end\",\n \"source-commit-end-local\",\n \"source-commit-local\",\n \"source-commit-next-local\",\n \"source-commit-start\",\n \"source-commit-start-next-local\",\n \"source-fork\",\n \"source-merge\",\n \"source-pull\",\n \"source-repository\",\n \"source-repository-multiple\",\n \"soy-sauce\",\n \"soy-sauce-off\",\n \"spa\",\n \"spa-outline\",\n \"space-invaders\",\n \"space-station\",\n \"spade\",\n \"speaker\",\n \"speaker-bluetooth\",\n \"speaker-message\",\n \"speaker-multiple\",\n \"speaker-off\",\n \"speaker-pause\",\n \"speaker-play\",\n \"speaker-stop\",\n \"speaker-wireless\",\n \"spear\",\n \"speedometer\",\n \"speedometer-medium\",\n \"speedometer-slow\",\n \"spellcheck\",\n \"sphere\",\n \"sphere-off\",\n \"spider\",\n \"spider-outline\",\n \"spider-thread\",\n \"spider-web\",\n \"spirit-level\",\n \"spoon-sugar\",\n \"spotify\",\n \"spotlight\",\n \"spotlight-beam\",\n \"spray\",\n \"spray-bottle\",\n \"sprinkler\",\n \"sprinkler-fire\",\n \"sprinkler-variant\",\n \"sprout\",\n \"sprout-outline\",\n \"square\",\n \"square-circle\",\n \"square-circle-outline\",\n \"square-edit-outline\",\n \"square-medium\",\n \"square-medium-outline\",\n \"square-off\",\n \"square-off-outline\",\n \"square-opacity\",\n \"square-outline\",\n \"square-root\",\n \"square-root-box\",\n \"square-rounded\",\n \"square-rounded-badge\",\n \"square-rounded-badge-outline\",\n \"square-rounded-outline\",\n \"square-small\",\n \"square-wave\",\n \"squeegee\",\n \"ssh\",\n \"stack-exchange\",\n \"stack-overflow\",\n \"stackpath\",\n \"stadium\",\n \"stadium-outline\",\n \"stadium-variant\",\n \"stairs\",\n \"stairs-box\",\n \"stairs-down\",\n \"stairs-up\",\n \"stamper\",\n \"standard-definition\",\n \"star\",\n \"star-box\",\n \"star-box-multiple\",\n \"star-box-multiple-outline\",\n \"star-box-outline\",\n \"star-check\",\n \"star-check-outline\",\n \"star-circle\",\n \"star-circle-outline\",\n \"star-cog\",\n \"star-cog-outline\",\n \"star-crescent\",\n \"star-david\",\n \"star-face\",\n \"star-four-points\",\n \"star-four-points-box\",\n \"star-four-points-box-outline\",\n \"star-four-points-circle\",\n \"star-four-points-circle-outline\",\n \"star-four-points-outline\",\n \"star-four-points-small\",\n \"star-half\",\n \"star-half-full\",\n \"star-minus\",\n \"star-minus-outline\",\n \"star-off\",\n \"star-off-outline\",\n \"star-outline\",\n \"star-plus\",\n \"star-plus-outline\",\n \"star-remove\",\n \"star-remove-outline\",\n \"star-settings\",\n \"star-settings-outline\",\n \"star-shooting\",\n \"star-shooting-outline\",\n \"star-three-points\",\n \"star-three-points-outline\",\n \"state-machine\",\n \"steam\",\n \"steering\",\n \"steering-off\",\n \"step-backward\",\n \"step-backward-2\",\n \"step-forward\",\n \"step-forward-2\",\n \"stethoscope\",\n \"sticker\",\n \"sticker-alert\",\n \"sticker-alert-outline\",\n \"sticker-check\",\n \"sticker-check-outline\",\n \"sticker-circle-outline\",\n \"sticker-emoji\",\n \"sticker-minus\",\n \"sticker-minus-outline\",\n \"sticker-outline\",\n \"sticker-plus\",\n \"sticker-plus-outline\",\n \"sticker-remove\",\n \"sticker-remove-outline\",\n \"sticker-text\",\n \"sticker-text-outline\",\n \"stocking\",\n \"stomach\",\n \"stool\",\n \"stool-outline\",\n \"stop\",\n \"stop-circle\",\n \"stop-circle-outline\",\n \"storage-tank\",\n \"storage-tank-outline\",\n \"store\",\n \"store-24-hour\",\n \"store-alert\",\n \"store-alert-outline\",\n \"store-check\",\n \"store-check-outline\",\n \"store-clock\",\n \"store-clock-outline\",\n \"store-cog\",\n \"store-cog-outline\",\n \"store-edit\",\n \"store-edit-outline\",\n \"store-marker\",\n \"store-marker-outline\",\n \"store-minus\",\n \"store-minus-outline\",\n \"store-off\",\n \"store-off-outline\",\n \"store-outline\",\n \"store-plus\",\n \"store-plus-outline\",\n \"store-remove\",\n \"store-remove-outline\",\n \"store-search\",\n \"store-search-outline\",\n \"store-settings\",\n \"store-settings-outline\",\n \"storefront\",\n \"storefront-check\",\n \"storefront-check-outline\",\n \"storefront-edit\",\n \"storefront-edit-outline\",\n \"storefront-minus\",\n \"storefront-minus-outline\",\n \"storefront-outline\",\n \"storefront-plus\",\n \"storefront-plus-outline\",\n \"storefront-remove\",\n \"storefront-remove-outline\",\n \"stove\",\n \"strategy\",\n \"stretch-to-page\",\n \"stretch-to-page-outline\",\n \"string-lights\",\n \"string-lights-off\",\n \"subdirectory-arrow-left\",\n \"subdirectory-arrow-right\",\n \"submarine\",\n \"subtitles\",\n \"subtitles-outline\",\n \"subway\",\n \"subway-alert-variant\",\n \"subway-variant\",\n \"summit\",\n \"sun-angle\",\n \"sun-angle-outline\",\n \"sun-clock\",\n \"sun-clock-outline\",\n \"sun-compass\",\n \"sun-snowflake\",\n \"sun-snowflake-variant\",\n \"sun-thermometer\",\n \"sun-thermometer-outline\",\n \"sun-wireless\",\n \"sun-wireless-outline\",\n \"sunglasses\",\n \"surfing\",\n \"surround-sound\",\n \"surround-sound-2-0\",\n \"surround-sound-2-1\",\n \"surround-sound-3-1\",\n \"surround-sound-5-1\",\n \"surround-sound-5-1-2\",\n \"surround-sound-7-1\",\n \"svg\",\n \"swap-horizontal\",\n \"swap-horizontal-bold\",\n \"swap-horizontal-circle\",\n \"swap-horizontal-circle-outline\",\n \"swap-horizontal-hidden\",\n \"swap-horizontal-variant\",\n \"swap-vertical\",\n \"swap-vertical-bold\",\n \"swap-vertical-circle\",\n \"swap-vertical-circle-outline\",\n \"swap-vertical-variant\",\n \"swim\",\n \"switch\",\n \"sword\",\n \"sword-cross\",\n \"syllabary-hangul\",\n \"syllabary-hiragana\",\n \"syllabary-katakana\",\n \"syllabary-katakana-halfwidth\",\n \"symbol\",\n \"symfony\",\n \"synagogue\",\n \"synagogue-outline\",\n \"sync\",\n \"sync-alert\",\n \"sync-circle\",\n \"sync-off\",\n \"tab\",\n \"tab-minus\",\n \"tab-plus\",\n \"tab-remove\",\n \"tab-search\",\n \"tab-unselected\",\n \"table\",\n \"table-account\",\n \"table-alert\",\n \"table-arrow-down\",\n \"table-arrow-left\",\n \"table-arrow-right\",\n \"table-arrow-up\",\n \"table-border\",\n \"table-cancel\",\n \"table-chair\",\n \"table-check\",\n \"table-clock\",\n \"table-cog\",\n \"table-column\",\n \"table-column-plus-after\",\n \"table-column-plus-before\",\n \"table-column-remove\",\n \"table-column-width\",\n \"table-edit\",\n \"table-eye\",\n \"table-eye-off\",\n \"table-filter\",\n \"table-furniture\",\n \"table-headers-eye\",\n \"table-headers-eye-off\",\n \"table-heart\",\n \"table-key\",\n \"table-large\",\n \"table-large-plus\",\n \"table-large-remove\",\n \"table-lock\",\n \"table-merge-cells\",\n \"table-minus\",\n \"table-multiple\",\n \"table-network\",\n \"table-of-contents\",\n \"table-off\",\n \"table-picnic\",\n \"table-pivot\",\n \"table-plus\",\n \"table-question\",\n \"table-refresh\",\n \"table-remove\",\n \"table-row\",\n \"table-row-height\",\n \"table-row-plus-after\",\n \"table-row-plus-before\",\n \"table-row-remove\",\n \"table-search\",\n \"table-settings\",\n \"table-split-cell\",\n \"table-star\",\n \"table-sync\",\n \"table-tennis\",\n \"tablet\",\n \"tablet-cellphone\",\n \"tablet-dashboard\",\n \"taco\",\n \"tag\",\n \"tag-arrow-down\",\n \"tag-arrow-down-outline\",\n \"tag-arrow-left\",\n \"tag-arrow-left-outline\",\n \"tag-arrow-right\",\n \"tag-arrow-right-outline\",\n \"tag-arrow-up\",\n \"tag-arrow-up-outline\",\n \"tag-check\",\n \"tag-check-outline\",\n \"tag-edit\",\n \"tag-edit-outline\",\n \"tag-faces\",\n \"tag-heart\",\n \"tag-heart-outline\",\n \"tag-hidden\",\n \"tag-minus\",\n \"tag-minus-outline\",\n \"tag-multiple\",\n \"tag-multiple-outline\",\n \"tag-off\",\n \"tag-off-outline\",\n \"tag-outline\",\n \"tag-plus\",\n \"tag-plus-outline\",\n \"tag-remove\",\n \"tag-remove-outline\",\n \"tag-search\",\n \"tag-search-outline\",\n \"tag-text\",\n \"tag-text-outline\",\n \"tailwind\",\n \"tally-mark-1\",\n \"tally-mark-2\",\n \"tally-mark-3\",\n \"tally-mark-4\",\n \"tally-mark-5\",\n \"tangram\",\n \"tank\",\n \"tanker-truck\",\n \"tape-drive\",\n \"tape-measure\",\n \"target\",\n \"target-account\",\n \"target-variant\",\n \"taxi\",\n \"tea\",\n \"tea-outline\",\n \"teamviewer\",\n \"teddy-bear\",\n \"telescope\",\n \"television\",\n \"television-ambient-light\",\n \"television-box\",\n \"television-classic\",\n \"television-classic-off\",\n \"television-guide\",\n \"television-off\",\n \"television-pause\",\n \"television-play\",\n \"television-shimmer\",\n \"television-speaker\",\n \"television-speaker-off\",\n \"television-stop\",\n \"temperature-celsius\",\n \"temperature-fahrenheit\",\n \"temperature-kelvin\",\n \"temple-buddhist\",\n \"temple-buddhist-outline\",\n \"temple-hindu\",\n \"temple-hindu-outline\",\n \"tennis\",\n \"tennis-ball\",\n \"tennis-ball-outline\",\n \"tent\",\n \"terraform\",\n \"terrain\",\n \"test-tube\",\n \"test-tube-empty\",\n \"test-tube-off\",\n \"text\",\n \"text-account\",\n \"text-box\",\n \"text-box-check\",\n \"text-box-check-outline\",\n \"text-box-edit\",\n \"text-box-edit-outline\",\n \"text-box-minus\",\n \"text-box-minus-outline\",\n \"text-box-multiple\",\n \"text-box-multiple-outline\",\n \"text-box-outline\",\n \"text-box-plus\",\n \"text-box-plus-outline\",\n \"text-box-remove\",\n \"text-box-remove-outline\",\n \"text-box-search\",\n \"text-box-search-outline\",\n \"text-long\",\n \"text-recognition\",\n \"text-search\",\n \"text-search-variant\",\n \"text-shadow\",\n \"text-short\",\n \"texture\",\n \"texture-box\",\n \"theater\",\n \"theme-light-dark\",\n \"thermometer\",\n \"thermometer-alert\",\n \"thermometer-auto\",\n \"thermometer-bluetooth\",\n \"thermometer-check\",\n \"thermometer-chevron-down\",\n \"thermometer-chevron-up\",\n \"thermometer-high\",\n \"thermometer-lines\",\n \"thermometer-low\",\n \"thermometer-minus\",\n \"thermometer-off\",\n \"thermometer-plus\",\n \"thermometer-probe\",\n \"thermometer-probe-off\",\n \"thermometer-water\",\n \"thermostat\",\n \"thermostat-auto\",\n \"thermostat-box\",\n \"thermostat-box-auto\",\n \"thermostat-cog\",\n \"thought-bubble\",\n \"thought-bubble-outline\",\n \"thumb-down\",\n \"thumb-down-outline\",\n \"thumb-up\",\n \"thumb-up-outline\",\n \"thumbs-up-down\",\n \"thumbs-up-down-outline\",\n \"ticket\",\n \"ticket-account\",\n \"ticket-confirmation\",\n \"ticket-confirmation-outline\",\n \"ticket-outline\",\n \"ticket-percent\",\n \"ticket-percent-outline\",\n \"tie\",\n \"tilde\",\n \"tilde-off\",\n \"timelapse\",\n \"timeline\",\n \"timeline-alert\",\n \"timeline-alert-outline\",\n \"timeline-check\",\n \"timeline-check-outline\",\n \"timeline-clock\",\n \"timeline-clock-outline\",\n \"timeline-minus\",\n \"timeline-minus-outline\",\n \"timeline-outline\",\n \"timeline-plus\",\n \"timeline-plus-outline\",\n \"timeline-question\",\n \"timeline-question-outline\",\n \"timeline-remove\",\n \"timeline-remove-outline\",\n \"timeline-text\",\n \"timeline-text-outline\",\n \"timer\",\n \"timer-10\",\n \"timer-3\",\n \"timer-alert\",\n \"timer-alert-outline\",\n \"timer-cancel\",\n \"timer-cancel-outline\",\n \"timer-check\",\n \"timer-check-outline\",\n \"timer-cog\",\n \"timer-cog-outline\",\n \"timer-edit\",\n \"timer-edit-outline\",\n \"timer-lock\",\n \"timer-lock-open\",\n \"timer-lock-open-outline\",\n \"timer-lock-outline\",\n \"timer-marker\",\n \"timer-marker-outline\",\n \"timer-minus\",\n \"timer-minus-outline\",\n \"timer-music\",\n \"timer-music-outline\",\n \"timer-off\",\n \"timer-off-outline\",\n \"timer-outline\",\n \"timer-pause\",\n \"timer-pause-outline\",\n \"timer-play\",\n \"timer-play-outline\",\n \"timer-plus\",\n \"timer-plus-outline\",\n \"timer-refresh\",\n \"timer-refresh-outline\",\n \"timer-remove\",\n \"timer-remove-outline\",\n \"timer-sand\",\n \"timer-sand-complete\",\n \"timer-sand-empty\",\n \"timer-sand-full\",\n \"timer-sand-paused\",\n \"timer-settings\",\n \"timer-settings-outline\",\n \"timer-star\",\n \"timer-star-outline\",\n \"timer-stop\",\n \"timer-stop-outline\",\n \"timer-sync\",\n \"timer-sync-outline\",\n \"timetable\",\n \"tire\",\n \"toaster\",\n \"toaster-off\",\n \"toaster-oven\",\n \"toggle-switch\",\n \"toggle-switch-off\",\n \"toggle-switch-off-outline\",\n \"toggle-switch-outline\",\n \"toggle-switch-variant\",\n \"toggle-switch-variant-off\",\n \"toilet\",\n \"toolbox\",\n \"toolbox-outline\",\n \"tools\",\n \"tooltip\",\n \"tooltip-account\",\n \"tooltip-cellphone\",\n \"tooltip-check\",\n \"tooltip-check-outline\",\n \"tooltip-edit\",\n \"tooltip-edit-outline\",\n \"tooltip-image\",\n \"tooltip-image-outline\",\n \"tooltip-minus\",\n \"tooltip-minus-outline\",\n \"tooltip-outline\",\n \"tooltip-plus\",\n \"tooltip-plus-outline\",\n \"tooltip-question\",\n \"tooltip-question-outline\",\n \"tooltip-remove\",\n \"tooltip-remove-outline\",\n \"tooltip-text\",\n \"tooltip-text-outline\",\n \"tooth\",\n \"tooth-outline\",\n \"toothbrush\",\n \"toothbrush-electric\",\n \"toothbrush-paste\",\n \"torch\",\n \"tortoise\",\n \"toslink\",\n \"touch-text-outline\",\n \"tournament\",\n \"tow-truck\",\n \"tower-beach\",\n \"tower-fire\",\n \"town-hall\",\n \"toy-brick\",\n \"toy-brick-marker\",\n \"toy-brick-marker-outline\",\n \"toy-brick-minus\",\n \"toy-brick-minus-outline\",\n \"toy-brick-outline\",\n \"toy-brick-plus\",\n \"toy-brick-plus-outline\",\n \"toy-brick-remove\",\n \"toy-brick-remove-outline\",\n \"toy-brick-search\",\n \"toy-brick-search-outline\",\n \"track-light\",\n \"track-light-off\",\n \"trackpad\",\n \"trackpad-lock\",\n \"tractor\",\n \"tractor-variant\",\n \"trademark\",\n \"traffic-cone\",\n \"traffic-light\",\n \"traffic-light-outline\",\n \"train\",\n \"train-bus\",\n \"train-car\",\n \"train-car-autorack\",\n \"train-car-box\",\n \"train-car-box-full\",\n \"train-car-box-open\",\n \"train-car-caboose\",\n \"train-car-centerbeam\",\n \"train-car-centerbeam-full\",\n \"train-car-container\",\n \"train-car-flatbed\",\n \"train-car-flatbed-car\",\n \"train-car-flatbed-tank\",\n \"train-car-gondola\",\n \"train-car-gondola-full\",\n \"train-car-hopper\",\n \"train-car-hopper-covered\",\n \"train-car-hopper-full\",\n \"train-car-intermodal\",\n \"train-car-passenger\",\n \"train-car-passenger-door\",\n \"train-car-passenger-door-open\",\n \"train-car-passenger-variant\",\n \"train-car-tank\",\n \"train-variant\",\n \"tram\",\n \"tram-side\",\n \"transcribe\",\n \"transcribe-close\",\n \"transfer\",\n \"transfer-down\",\n \"transfer-left\",\n \"transfer-right\",\n \"transfer-up\",\n \"transit-connection\",\n \"transit-connection-horizontal\",\n \"transit-connection-variant\",\n \"transit-detour\",\n \"transit-skip\",\n \"transit-transfer\",\n \"transition\",\n \"transition-masked\",\n \"translate\",\n \"translate-off\",\n \"translate-variant\",\n \"transmission-tower\",\n \"transmission-tower-export\",\n \"transmission-tower-import\",\n \"transmission-tower-off\",\n \"trash-can\",\n \"trash-can-outline\",\n \"tray\",\n \"tray-alert\",\n \"tray-arrow-down\",\n \"tray-arrow-up\",\n \"tray-full\",\n \"tray-minus\",\n \"tray-plus\",\n \"tray-remove\",\n \"treasure-chest\",\n \"treasure-chest-outline\",\n \"tree\",\n \"tree-outline\",\n \"trello\",\n \"trending-down\",\n \"trending-neutral\",\n \"trending-up\",\n \"triangle\",\n \"triangle-down\",\n \"triangle-down-outline\",\n \"triangle-outline\",\n \"triangle-small-down\",\n \"triangle-small-up\",\n \"triangle-wave\",\n \"triforce\",\n \"trophy\",\n \"trophy-award\",\n \"trophy-broken\",\n \"trophy-outline\",\n \"trophy-variant\",\n \"trophy-variant-outline\",\n \"truck\",\n \"truck-alert\",\n \"truck-alert-outline\",\n \"truck-cargo-container\",\n \"truck-check\",\n \"truck-check-outline\",\n \"truck-delivery\",\n \"truck-delivery-outline\",\n \"truck-fast\",\n \"truck-fast-outline\",\n \"truck-flatbed\",\n \"truck-minus\",\n \"truck-minus-outline\",\n \"truck-off-road\",\n \"truck-off-road-off\",\n \"truck-outline\",\n \"truck-plus\",\n \"truck-plus-outline\",\n \"truck-remove\",\n \"truck-remove-outline\",\n \"truck-snowflake\",\n \"truck-trailer\",\n \"trumpet\",\n \"tshirt-crew\",\n \"tshirt-crew-outline\",\n \"tshirt-v\",\n \"tshirt-v-outline\",\n \"tsunami\",\n \"tumble-dryer\",\n \"tumble-dryer-alert\",\n \"tumble-dryer-off\",\n \"tune\",\n \"tune-variant\",\n \"tune-vertical\",\n \"tune-vertical-variant\",\n \"tunnel\",\n \"tunnel-outline\",\n \"turbine\",\n \"turkey\",\n \"turnstile\",\n \"turnstile-outline\",\n \"turtle\",\n \"twitch\",\n \"twitter\",\n \"two-factor-authentication\",\n \"typewriter\",\n \"ubisoft\",\n \"ubuntu\",\n \"ufo\",\n \"ufo-outline\",\n \"ultra-high-definition\",\n \"umbraco\",\n \"umbrella\",\n \"umbrella-beach\",\n \"umbrella-beach-outline\",\n \"umbrella-closed\",\n \"umbrella-closed-outline\",\n \"umbrella-closed-variant\",\n \"umbrella-outline\",\n \"underwear-outline\",\n \"undo\",\n \"undo-variant\",\n \"unfold-less-horizontal\",\n \"unfold-less-vertical\",\n \"unfold-more-horizontal\",\n \"unfold-more-vertical\",\n \"ungroup\",\n \"unicode\",\n \"unicorn\",\n \"unicorn-variant\",\n \"unicycle\",\n \"unity\",\n \"unreal\",\n \"update\",\n \"upload\",\n \"upload-box\",\n \"upload-box-outline\",\n \"upload-circle\",\n \"upload-circle-outline\",\n \"upload-lock\",\n \"upload-lock-outline\",\n \"upload-multiple\",\n \"upload-multiple-outline\",\n \"upload-network\",\n \"upload-network-outline\",\n \"upload-off\",\n \"upload-off-outline\",\n \"upload-outline\",\n \"usb\",\n \"usb-c-port\",\n \"usb-flash-drive\",\n \"usb-flash-drive-outline\",\n \"usb-port\",\n \"vacuum\",\n \"vacuum-outline\",\n \"valve\",\n \"valve-closed\",\n \"valve-open\",\n \"van-passenger\",\n \"van-utility\",\n \"vanish\",\n \"vanish-quarter\",\n \"vanity-light\",\n \"variable\",\n \"variable-box\",\n \"vector-arrange-above\",\n \"vector-arrange-below\",\n \"vector-bezier\",\n \"vector-circle\",\n \"vector-circle-variant\",\n \"vector-combine\",\n \"vector-curve\",\n \"vector-difference\",\n \"vector-difference-ab\",\n \"vector-difference-ba\",\n \"vector-ellipse\",\n \"vector-intersection\",\n \"vector-line\",\n \"vector-link\",\n \"vector-point\",\n \"vector-point-edit\",\n \"vector-point-minus\",\n \"vector-point-plus\",\n \"vector-point-select\",\n \"vector-polygon\",\n \"vector-polygon-variant\",\n \"vector-polyline\",\n \"vector-polyline-edit\",\n \"vector-polyline-minus\",\n \"vector-polyline-plus\",\n \"vector-polyline-remove\",\n \"vector-radius\",\n \"vector-rectangle\",\n \"vector-selection\",\n \"vector-square\",\n \"vector-square-close\",\n \"vector-square-edit\",\n \"vector-square-minus\",\n \"vector-square-open\",\n \"vector-square-plus\",\n \"vector-square-remove\",\n \"vector-triangle\",\n \"vector-union\",\n \"vhs\",\n \"vibrate\",\n \"vibrate-off\",\n \"video\",\n \"video-2d\",\n \"video-3d\",\n \"video-3d-off\",\n \"video-3d-variant\",\n \"video-4k-box\",\n \"video-account\",\n \"video-box\",\n \"video-box-off\",\n \"video-check\",\n \"video-check-outline\",\n \"video-high-definition\",\n \"video-image\",\n \"video-input-antenna\",\n \"video-input-component\",\n \"video-input-hdmi\",\n \"video-input-scart\",\n \"video-input-svideo\",\n \"video-marker\",\n \"video-marker-outline\",\n \"video-minus\",\n \"video-minus-outline\",\n \"video-off\",\n \"video-off-outline\",\n \"video-outline\",\n \"video-plus\",\n \"video-plus-outline\",\n \"video-stabilization\",\n \"video-standard-definition\",\n \"video-switch\",\n \"video-switch-outline\",\n \"video-vintage\",\n \"video-wireless\",\n \"video-wireless-outline\",\n \"view-agenda\",\n \"view-agenda-outline\",\n \"view-array\",\n \"view-array-outline\",\n \"view-carousel\",\n \"view-carousel-outline\",\n \"view-column\",\n \"view-column-outline\",\n \"view-comfy\",\n \"view-comfy-outline\",\n \"view-compact\",\n \"view-compact-outline\",\n \"view-dashboard\",\n \"view-dashboard-edit\",\n \"view-dashboard-edit-outline\",\n \"view-dashboard-outline\",\n \"view-dashboard-variant\",\n \"view-dashboard-variant-outline\",\n \"view-day\",\n \"view-day-outline\",\n \"view-gallery\",\n \"view-gallery-outline\",\n \"view-grid\",\n \"view-grid-compact\",\n \"view-grid-outline\",\n \"view-grid-plus\",\n \"view-grid-plus-outline\",\n \"view-headline\",\n \"view-list\",\n \"view-list-outline\",\n \"view-module\",\n \"view-module-outline\",\n \"view-parallel\",\n \"view-parallel-outline\",\n \"view-quilt\",\n \"view-quilt-outline\",\n \"view-sequential\",\n \"view-sequential-outline\",\n \"view-split-horizontal\",\n \"view-split-vertical\",\n \"view-stream\",\n \"view-stream-outline\",\n \"view-week\",\n \"view-week-outline\",\n \"vimeo\",\n \"violin\",\n \"virtual-reality\",\n \"virus\",\n \"virus-off\",\n \"virus-off-outline\",\n \"virus-outline\",\n \"vlc\",\n \"voicemail\",\n \"volcano\",\n \"volcano-outline\",\n \"volleyball\",\n \"volume-equal\",\n \"volume-high\",\n \"volume-low\",\n \"volume-medium\",\n \"volume-minus\",\n \"volume-mute\",\n \"volume-off\",\n \"volume-plus\",\n \"volume-source\",\n \"volume-variant-off\",\n \"volume-vibrate\",\n \"vote\",\n \"vote-outline\",\n \"vpn\",\n \"vuejs\",\n \"vuetify\",\n \"walk\",\n \"wall\",\n \"wall-fire\",\n \"wall-sconce\",\n \"wall-sconce-flat\",\n \"wall-sconce-flat-outline\",\n \"wall-sconce-flat-variant\",\n \"wall-sconce-flat-variant-outline\",\n \"wall-sconce-outline\",\n \"wall-sconce-round\",\n \"wall-sconce-round-outline\",\n \"wall-sconce-round-variant\",\n \"wall-sconce-round-variant-outline\",\n \"wallet\",\n \"wallet-bifold\",\n \"wallet-bifold-outline\",\n \"wallet-giftcard\",\n \"wallet-membership\",\n \"wallet-outline\",\n \"wallet-plus\",\n \"wallet-plus-outline\",\n \"wallet-travel\",\n \"wallpaper\",\n \"wan\",\n \"wardrobe\",\n \"wardrobe-outline\",\n \"warehouse\",\n \"washing-machine\",\n \"washing-machine-alert\",\n \"washing-machine-off\",\n \"watch\",\n \"watch-export\",\n \"watch-export-variant\",\n \"watch-import\",\n \"watch-import-variant\",\n \"watch-variant\",\n \"watch-vibrate\",\n \"watch-vibrate-off\",\n \"water\",\n \"water-alert\",\n \"water-alert-outline\",\n \"water-boiler\",\n \"water-boiler-alert\",\n \"water-boiler-auto\",\n \"water-boiler-off\",\n \"water-check\",\n \"water-check-outline\",\n \"water-circle\",\n \"water-minus\",\n \"water-minus-outline\",\n \"water-off\",\n \"water-off-outline\",\n \"water-opacity\",\n \"water-outline\",\n \"water-percent\",\n \"water-percent-alert\",\n \"water-plus\",\n \"water-plus-outline\",\n \"water-polo\",\n \"water-pump\",\n \"water-pump-off\",\n \"water-remove\",\n \"water-remove-outline\",\n \"water-sync\",\n \"water-thermometer\",\n \"water-thermometer-outline\",\n \"water-well\",\n \"water-well-outline\",\n \"waterfall\",\n \"watering-can\",\n \"watering-can-outline\",\n \"watermark\",\n \"wave\",\n \"wave-arrow-down\",\n \"wave-arrow-up\",\n \"wave-undercurrent\",\n \"waveform\",\n \"waves\",\n \"waves-arrow-left\",\n \"waves-arrow-right\",\n \"waves-arrow-up\",\n \"waze\",\n \"weather-cloudy\",\n \"weather-cloudy-alert\",\n \"weather-cloudy-arrow-right\",\n \"weather-cloudy-clock\",\n \"weather-dust\",\n \"weather-fog\",\n \"weather-hail\",\n \"weather-hazy\",\n \"weather-hurricane\",\n \"weather-hurricane-outline\",\n \"weather-lightning\",\n \"weather-lightning-rainy\",\n \"weather-moonset\",\n \"weather-moonset-down\",\n \"weather-moonset-up\",\n \"weather-night\",\n \"weather-night-partly-cloudy\",\n \"weather-partly-cloudy\",\n \"weather-partly-lightning\",\n \"weather-partly-rainy\",\n \"weather-partly-snowy\",\n \"weather-partly-snowy-rainy\",\n \"weather-pouring\",\n \"weather-rainy\",\n \"weather-snowy\",\n \"weather-snowy-heavy\",\n \"weather-snowy-rainy\",\n \"weather-sunny\",\n \"weather-sunny-alert\",\n \"weather-sunny-off\",\n \"weather-sunset\",\n \"weather-sunset-down\",\n \"weather-sunset-up\",\n \"weather-tornado\",\n \"weather-windy\",\n \"weather-windy-variant\",\n \"web\",\n \"web-box\",\n \"web-cancel\",\n \"web-check\",\n \"web-clock\",\n \"web-minus\",\n \"web-off\",\n \"web-plus\",\n \"web-refresh\",\n \"web-remove\",\n \"web-sync\",\n \"webcam\",\n \"webcam-off\",\n \"webhook\",\n \"webpack\",\n \"webrtc\",\n \"wechat\",\n \"weight\",\n \"weight-gram\",\n \"weight-kilogram\",\n \"weight-lifter\",\n \"weight-pound\",\n \"whatsapp\",\n \"wheel-barrow\",\n \"wheelchair\",\n \"wheelchair-accessibility\",\n \"whistle\",\n \"whistle-outline\",\n \"white-balance-auto\",\n \"white-balance-incandescent\",\n \"white-balance-iridescent\",\n \"white-balance-sunny\",\n \"widgets\",\n \"widgets-outline\",\n \"wifi\",\n \"wifi-alert\",\n \"wifi-arrow-down\",\n \"wifi-arrow-left\",\n \"wifi-arrow-left-right\",\n \"wifi-arrow-right\",\n \"wifi-arrow-up\",\n \"wifi-arrow-up-down\",\n \"wifi-cancel\",\n \"wifi-check\",\n \"wifi-cog\",\n \"wifi-lock\",\n \"wifi-lock-open\",\n \"wifi-marker\",\n \"wifi-minus\",\n \"wifi-off\",\n \"wifi-plus\",\n \"wifi-refresh\",\n \"wifi-remove\",\n \"wifi-settings\",\n \"wifi-star\",\n \"wifi-strength-1\",\n \"wifi-strength-1-alert\",\n \"wifi-strength-1-lock\",\n \"wifi-strength-1-lock-open\",\n \"wifi-strength-2\",\n \"wifi-strength-2-alert\",\n \"wifi-strength-2-lock\",\n \"wifi-strength-2-lock-open\",\n \"wifi-strength-3\",\n \"wifi-strength-3-alert\",\n \"wifi-strength-3-lock\",\n \"wifi-strength-3-lock-open\",\n \"wifi-strength-4\",\n \"wifi-strength-4-alert\",\n \"wifi-strength-4-lock\",\n \"wifi-strength-4-lock-open\",\n \"wifi-strength-alert-outline\",\n \"wifi-strength-lock-open-outline\",\n \"wifi-strength-lock-outline\",\n \"wifi-strength-off\",\n \"wifi-strength-off-outline\",\n \"wifi-strength-outline\",\n \"wifi-sync\",\n \"wikipedia\",\n \"wind-power\",\n \"wind-power-outline\",\n \"wind-turbine\",\n \"wind-turbine-alert\",\n \"wind-turbine-check\",\n \"window-close\",\n \"window-closed\",\n \"window-closed-variant\",\n \"window-maximize\",\n \"window-minimize\",\n \"window-open\",\n \"window-open-variant\",\n \"window-restore\",\n \"window-shutter\",\n \"window-shutter-alert\",\n \"window-shutter-auto\",\n \"window-shutter-cog\",\n \"window-shutter-open\",\n \"window-shutter-settings\",\n \"windsock\",\n \"wiper\",\n \"wiper-wash\",\n \"wiper-wash-alert\",\n \"wizard-hat\",\n \"wordpress\",\n \"wrap\",\n \"wrap-disabled\",\n \"wrench\",\n \"wrench-check\",\n \"wrench-check-outline\",\n \"wrench-clock\",\n \"wrench-clock-outline\",\n \"wrench-cog\",\n \"wrench-cog-outline\",\n \"wrench-outline\",\n \"xamarin\",\n \"xml\",\n \"xmpp\",\n \"yahoo\",\n \"yeast\",\n \"yin-yang\",\n \"yoga\",\n \"youtube\",\n \"youtube-gaming\",\n \"youtube-studio\",\n \"youtube-subscription\",\n \"youtube-tv\",\n \"yurt\",\n \"z-wave\",\n \"zend\",\n \"zigbee\",\n \"zip-box\",\n \"zip-box-outline\",\n \"zip-disk\",\n \"zodiac-aquarius\",\n \"zodiac-aries\",\n \"zodiac-cancer\",\n \"zodiac-capricorn\",\n \"zodiac-gemini\",\n \"zodiac-leo\",\n \"zodiac-libra\",\n \"zodiac-pisces\",\n \"zodiac-sagittarius\",\n \"zodiac-scorpio\",\n \"zodiac-taurus\",\n \"zodiac-virgo\"\n ]\n}","/**\n * Get Types Tool\n *\n * Returns TypeScript type definitions for Idealyst components, theme, and navigation.\n * Now enhanced with @idealyst/tooling registry data for authoritative prop values.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\ninterface TypesData {\n version: string;\n extractedAt: string;\n components: Record<string, any>;\n theme: Record<string, any>;\n navigation: Record<string, any>;\n // New: Registry data from @idealyst/tooling (single source of truth)\n registry?: {\n components: Record<string, any>;\n themeValues: any;\n };\n}\n\nlet cachedTypes: TypesData | null = null;\n\n/**\n * Load extracted types from JSON file\n */\nfunction loadTypes(): TypesData {\n if (cachedTypes) {\n return cachedTypes;\n }\n\n const typesPath = path.join(__dirname, '../generated/types.json');\n\n if (!fs.existsSync(typesPath)) {\n throw new Error(\n 'Types file not found. Please run \"yarn extract-types\" to generate type definitions.'\n );\n }\n\n const content = fs.readFileSync(typesPath, 'utf-8');\n cachedTypes = JSON.parse(content);\n\n return cachedTypes!;\n}\n\n/**\n * Get component types by name\n */\nexport function getComponentTypes(componentName: string, format: 'typescript' | 'json' | 'both' = 'both') {\n const types = loadTypes();\n const component = types.components[componentName];\n\n if (!component) {\n throw new Error(\n `Component \"${componentName}\" not found. Available components: ${Object.keys(types.components).join(', ')}`\n );\n }\n\n const result: any = {\n component: componentName,\n };\n\n if (format === 'typescript' || format === 'both') {\n result.typescript = formatTypeScriptOutput(component);\n }\n\n if (format === 'json' || format === 'both') {\n result.schema = {\n propsInterface: component.propsInterface,\n props: component.props,\n relatedTypes: component.relatedTypes,\n };\n\n // Include registry data if available (authoritative prop values)\n if (component.registry) {\n result.registry = component.registry;\n }\n }\n\n return result;\n}\n\n/**\n * Get theme types\n */\nexport function getThemeTypes(format: 'typescript' | 'json' | 'both' = 'both') {\n const types = loadTypes();\n\n const result: any = {\n name: 'Theme Types',\n };\n\n if (format === 'typescript' || format === 'both') {\n const tsOutput = Object.entries(types.theme)\n .map(([name, info]: [string, any]) => info.definition)\n .join('\\n\\n');\n result.typescript = tsOutput;\n }\n\n if (format === 'json' || format === 'both') {\n result.schema = types.theme;\n\n // Include authoritative theme values from registry if available\n if (types.registry?.themeValues) {\n result.themeValues = types.registry.themeValues;\n }\n }\n\n return result;\n}\n\n/**\n * Get navigation types\n */\nexport function getNavigationTypes(format: 'typescript' | 'json' | 'both' = 'both') {\n const types = loadTypes();\n\n const result: any = {\n name: 'Navigation Types',\n };\n\n if (format === 'typescript' || format === 'both') {\n const tsOutput = Object.entries(types.navigation)\n .map(([name, definition]) => definition)\n .join('\\n\\n');\n result.typescript = tsOutput;\n }\n\n if (format === 'json' || format === 'both') {\n result.schema = types.navigation;\n }\n\n return result;\n}\n\n/**\n * Format TypeScript output for better readability\n */\nfunction formatTypeScriptOutput(component: any): string {\n const sections: string[] = [];\n\n // Main props interface\n sections.push(`// ${component.propsInterface}`);\n sections.push(component.typeDefinition);\n\n // Related types\n if (Object.keys(component.relatedTypes).length > 0) {\n sections.push('\\n// Related Types');\n for (const [name, definition] of Object.entries(component.relatedTypes)) {\n sections.push(definition as string);\n }\n }\n\n return sections.join('\\n\\n');\n}\n\n/**\n * Get list of all available components\n */\nexport function getAvailableComponents() {\n const types = loadTypes();\n return Object.keys(types.components);\n}\n\n/**\n * Get examples for a component\n */\nexport function getComponentExamples(componentName: string): string | null {\n const examplesPath = path.join(\n __dirname,\n `../../examples/components/${componentName}.examples.tsx`\n );\n\n if (!fs.existsSync(examplesPath)) {\n return null;\n }\n\n return fs.readFileSync(examplesPath, 'utf-8');\n}\n\n/**\n * Get the full component registry from @idealyst/tooling\n * This is the single source of truth for component props and values\n */\nexport function getComponentRegistry() {\n const types = loadTypes();\n return types.registry?.components || {};\n}\n\n/**\n * Get theme values from the registry\n * This is the single source of truth for available intents, sizes, etc.\n */\nexport function getRegistryThemeValues() {\n const types = loadTypes();\n return types.registry?.themeValues || null;\n}\n"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4FxC,4CAA4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoH5C,gCAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6LhC,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiN5B,uCAAuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+JvC,qCAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsFrC,sCAAsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyNtC,qCAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyJrC,qCAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2IrC,oCAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmPpC,yCAAyC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsI3C;;;AC1sDO,IAAM,mBAA2C;AAAA,EACtD,kCAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8FlC,6CAA6C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0O7C,yCAAyC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyNzC,wCAAwC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoTxC,uCAAuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgfvC,gDAAgD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiWhD,2CAA2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6b7C;;;ACpmEO,IAAM,kBAA0C;AAAA,EACrD,iCAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiHjC,oCAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsKpC,qCAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2NrC,0CAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsP1C,iCAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+RnC;;;ACxgCO,IAAM,gBAAwC;AAAA,EACnD,+BAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkE/B,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwG1B,+BAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuPjC;;;AClaO,IAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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E,OAAS;AAAA,EACT,OAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAC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","names":["name"]}