@idealyst/mcp-server 1.2.26 → 1.2.28
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.
- package/dist/chunk-QMHFAEAR.js +17859 -0
- package/dist/chunk-QMHFAEAR.js.map +1 -0
- package/dist/index.cjs +12525 -12645
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3249 -21160
- package/dist/index.js.map +1 -1
- package/dist/tools/index.cjs +17923 -0
- package/dist/tools/index.cjs.map +1 -0
- package/dist/tools/index.d.cts +249 -0
- package/dist/tools/index.d.ts +249 -0
- package/dist/tools/index.js +91 -0
- package/dist/tools/index.js.map +1 -0
- package/package.json +9 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/definitions.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/translate-guides.ts","../src/data/storage-guides.ts","../src/data/packages.ts","../src/data/recipes.ts","../src/data/icons.json","../src/tools/get-types.ts","../src/tools/handlers.ts"],"sourcesContent":["/**\n * Tool Definitions\n *\n * MCP tool schema definitions for all Idealyst tools.\n * These can be used to register tools with an MCP server or other systems.\n */\n\nimport type { ToolDefinition } from \"./types.js\";\n\n// ============================================================================\n// Component Tool Definitions\n// ============================================================================\n\nexport const listComponentsDefinition: ToolDefinition = {\n name: \"list_components\",\n description: \"List all available Idealyst components with brief descriptions\",\n inputSchema: {\n type: \"object\",\n properties: {},\n },\n};\n\nexport const getComponentDocsDefinition: ToolDefinition = {\n name: \"get_component_docs\",\n description:\n \"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:\n \"The name of the component (e.g., 'Button', 'Card', 'Input')\",\n },\n },\n required: [\"component\"],\n },\n};\n\nexport const getComponentExampleDefinition: ToolDefinition = {\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:\n \"Type of example: 'basic', 'variants', 'with-icons', 'interactive'\",\n enum: [\"basic\", \"variants\", \"with-icons\", \"interactive\"],\n },\n },\n required: [\"component\"],\n },\n};\n\nexport const searchComponentsDefinition: ToolDefinition = {\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:\n \"Filter by category: 'layout', 'form', 'display', 'navigation', 'overlay', 'data'\",\n enum: [\"layout\", \"form\", \"display\", \"navigation\", \"overlay\", \"data\"],\n },\n },\n },\n};\n\nexport const getComponentTypesDefinition: ToolDefinition = {\n name: \"get_component_types\",\n description:\n \"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:\n \"The name of the component (e.g., 'Button', 'Card', 'Input')\",\n },\n format: {\n type: \"string\",\n description:\n \"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\nexport const getComponentExamplesTsDefinition: ToolDefinition = {\n name: \"get_component_examples_ts\",\n description:\n \"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// ============================================================================\n// CLI Tool Definitions\n// ============================================================================\n\nexport const getCliUsageDefinition: ToolDefinition = {\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// ============================================================================\n// Icon Tool Definitions\n// ============================================================================\n\nexport const searchIconsDefinition: ToolDefinition = {\n name: \"search_icons\",\n description:\n \"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:\n \"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// ============================================================================\n// Theme Tool Definitions\n// ============================================================================\n\nexport const getThemeTypesDefinition: ToolDefinition = {\n name: \"get_theme_types\",\n description:\n \"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:\n \"Output format: 'typescript', 'json', or 'both' (default: 'both')\",\n enum: [\"typescript\", \"json\", \"both\"],\n },\n },\n },\n};\n\n// ============================================================================\n// Navigation Tool Definitions\n// ============================================================================\n\nexport const getNavigationTypesDefinition: ToolDefinition = {\n name: \"get_navigation_types\",\n description:\n \"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:\n \"Output format: 'typescript', 'json', or 'both' (default: 'both')\",\n enum: [\"typescript\", \"json\", \"both\"],\n },\n },\n },\n};\n\n// ============================================================================\n// Guide Tool Definitions\n// ============================================================================\n\nexport const getTranslateGuideDefinition: ToolDefinition = {\n name: \"get_translate_guide\",\n description:\n \"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:\n \"Topic to get docs for: 'overview', 'runtime-api', 'babel-plugin', 'translation-files', 'examples'\",\n enum: [\n \"overview\",\n \"runtime-api\",\n \"babel-plugin\",\n \"translation-files\",\n \"examples\",\n ],\n },\n },\n required: [\"topic\"],\n },\n};\n\nexport const getStorageGuideDefinition: ToolDefinition = {\n name: \"get_storage_guide\",\n description:\n \"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// ============================================================================\n// Package Tool Definitions\n// ============================================================================\n\nexport const listPackagesDefinition: ToolDefinition = {\n name: \"list_packages\",\n description:\n \"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\nexport const getPackageDocsDefinition: ToolDefinition = {\n name: \"get_package_docs\",\n description:\n \"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:\n \"Package name (e.g., 'camera', 'oauth-client', 'datagrid')\",\n },\n section: {\n type: \"string\",\n description:\n \"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\nexport const searchPackagesDefinition: ToolDefinition = {\n name: \"search_packages\",\n description:\n \"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// ============================================================================\n// Recipe Tool Definitions\n// ============================================================================\n\nexport const listRecipesDefinition: ToolDefinition = {\n name: \"list_recipes\",\n description:\n \"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: [\n \"forms\",\n \"navigation\",\n \"data\",\n \"layout\",\n \"auth\",\n \"settings\",\n \"media\",\n ],\n },\n difficulty: {\n type: \"string\",\n description: \"Filter by difficulty (optional)\",\n enum: [\"beginner\", \"intermediate\", \"advanced\"],\n },\n },\n },\n};\n\nexport const getRecipeDefinition: ToolDefinition = {\n name: \"get_recipe\",\n description:\n \"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:\n \"Recipe ID (e.g., 'login-form', 'settings-screen', 'tab-navigation')\",\n },\n },\n required: [\"recipe\"],\n },\n};\n\nexport const searchRecipesDefinition: ToolDefinition = {\n name: \"search_recipes\",\n description:\n \"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// All Tool Definitions Array\n// ============================================================================\n\n/**\n * Array of all tool definitions.\n * Use this to register all tools with an MCP server.\n */\nexport const toolDefinitions: ToolDefinition[] = [\n // Component tools\n listComponentsDefinition,\n getComponentDocsDefinition,\n getComponentExampleDefinition,\n searchComponentsDefinition,\n getComponentTypesDefinition,\n getComponentExamplesTsDefinition,\n // CLI tools\n getCliUsageDefinition,\n // Icon tools\n searchIconsDefinition,\n // Theme tools\n getThemeTypesDefinition,\n // Navigation tools\n getNavigationTypesDefinition,\n // Guide tools\n getTranslateGuideDefinition,\n getStorageGuideDefinition,\n // Package tools\n listPackagesDefinition,\n getPackageDocsDefinition,\n searchPackagesDefinition,\n // Recipe tools\n listRecipesDefinition,\n getRecipeDefinition,\n searchRecipesDefinition,\n];\n\n/**\n * Map of tool definitions by name.\n * Use this for quick lookup of a specific tool definition.\n */\nexport const toolDefinitionMap: Record<string, ToolDefinition> =\n Object.fromEntries(toolDefinitions.map((tool) => [tool.name, tool]));\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 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","/**\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 markdown: {\n name: \"Markdown\",\n npmName: \"@idealyst/markdown\",\n description:\n \"Cross-platform markdown renderer for React and React Native. Supports GitHub Flavored Markdown with theme integration.\",\n category: \"ui\",\n platforms: [\"web\", \"native\"],\n documentationStatus: \"full\",\n installation: \"yarn add @idealyst/markdown @idealyst/theme\",\n peerDependencies: [\n \"@idealyst/theme\",\n \"react-markdown (web)\",\n \"remark-gfm (web)\",\n \"react-native-markdown-display (native)\",\n ],\n features: [\n \"GitHub Flavored Markdown support\",\n \"Tables, strikethrough, task lists\",\n \"Theme-integrated styling\",\n \"Custom link and image handlers\",\n \"Style overrides per element\",\n \"Cross-platform consistency\",\n ],\n quickStart: `import { Markdown } from '@idealyst/markdown';\n\n<Markdown\n size=\"md\"\n linkIntent=\"primary\"\n linkHandler={{\n onLinkPress: (url) => console.log('Link:', url),\n }}\n>\n{\\`# Hello World\n\nThis is **bold** and _italic_ text.\n\n| Column 1 | Column 2 |\n|----------|----------|\n| Data 1 | Data 2 |\n\\`}\n</Markdown>`,\n apiHighlights: [\n \"Markdown component\",\n \"size prop (xs-xl)\",\n \"linkIntent prop\",\n \"styleOverrides prop\",\n \"linkHandler / imageHandler\",\n ],\n relatedPackages: [\"components\", \"theme\"],\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","/**\n * Tool Handlers\n *\n * Implementation functions for all MCP tools.\n * These handlers can be used directly or through an MCP server.\n */\n\nimport { components } from \"../data/components/index.js\";\nimport { cliCommands } from \"../data/cli-commands.js\";\nimport { translateGuides } from \"../data/translate-guides.js\";\nimport { storageGuides } from \"../data/storage-guides.js\";\nimport {\n packages,\n getPackageSummary,\n getPackagesByCategory,\n searchPackages as searchPackagesData,\n} from \"../data/packages.js\";\nimport {\n recipes,\n getRecipeSummary,\n getRecipesByCategory,\n searchRecipes as searchRecipesData,\n} from \"../data/recipes.js\";\nimport iconsData from \"../data/icons.json\" with { type: \"json\" };\nimport {\n getComponentTypes as getTypesFromFile,\n getThemeTypes as getThemeTypesFromFile,\n getNavigationTypes as getNavigationTypesFromFile,\n getAvailableComponents,\n getComponentExamples as getComponentExamplesFromFile,\n} from \"./get-types.js\";\nimport type {\n ToolResponse,\n ListComponentsArgs,\n GetComponentDocsArgs,\n GetComponentExampleArgs,\n SearchComponentsArgs,\n GetComponentTypesArgs,\n GetComponentExamplesTsArgs,\n GetCliUsageArgs,\n SearchIconsArgs,\n GetThemeTypesArgs,\n GetNavigationTypesArgs,\n GetTranslateGuideArgs,\n GetStorageGuideArgs,\n ListPackagesArgs,\n GetPackageDocsArgs,\n SearchPackagesArgs,\n ListRecipesArgs,\n GetRecipeArgs,\n SearchRecipesArgs,\n} from \"./types.js\";\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Create a standard tool response with text content\n */\nfunction textResponse(text: string): ToolResponse {\n return {\n content: [{ type: \"text\", text }],\n };\n}\n\n/**\n * Create a JSON response\n */\nfunction jsonResponse(data: unknown): ToolResponse {\n return textResponse(JSON.stringify(data, null, 2));\n}\n\n// ============================================================================\n// Component Tool Handlers\n// ============================================================================\n\n/**\n * List all available Idealyst components with brief descriptions\n */\nexport function listComponents(_args: ListComponentsArgs = {}): ToolResponse {\n const componentList = Object.entries(components).map(([name, data]) => ({\n name,\n category: data.category,\n description: data.description,\n }));\n\n return jsonResponse(componentList);\n}\n\n/**\n * Get detailed documentation for a specific component\n */\nexport function getComponentDocs(args: GetComponentDocsArgs): ToolResponse {\n const componentName = args.component;\n const component = components[componentName];\n\n if (!component) {\n return textResponse(\n `Component \"${componentName}\" not found. Available components: ${Object.keys(components).join(\", \")}`\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 textResponse(docs);\n}\n\n/**\n * Get a code example for a specific component\n */\nexport function getComponentExample(args: GetComponentExampleArgs): ToolResponse {\n const componentName = args.component;\n const exampleType = args.example_type || \"basic\";\n const component = components[componentName];\n\n if (!component) {\n return textResponse(`Component \"${componentName}\" not found.`);\n }\n\n const example = component.examples[exampleType] || component.examples.basic;\n\n return textResponse(example);\n}\n\n/**\n * Search for components by name, category, or feature\n */\nexport function searchComponents(args: SearchComponentsArgs = {}): ToolResponse {\n const query = args.query?.toLowerCase() || \"\";\n const category = args.category;\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(\n ([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 jsonResponse(resultList);\n}\n\n/**\n * Get TypeScript type definitions for a component\n */\nexport function getComponentTypes(args: GetComponentTypesArgs): ToolResponse {\n const componentName = args.component;\n const format = args.format || \"both\";\n\n try {\n const result = getTypesFromFile(componentName, format);\n return jsonResponse(result);\n } catch (error) {\n return textResponse(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\n/**\n * Get validated TypeScript examples for a component\n */\nexport function getComponentExamplesTs(args: GetComponentExamplesTsArgs): ToolResponse {\n const componentName = args.component;\n\n try {\n const examples = getComponentExamplesFromFile(componentName);\n if (!examples) {\n return textResponse(\n `No TypeScript examples found for component \"${componentName}\". Available components with examples: ${getAvailableComponents().join(\", \")}`\n );\n }\n\n return textResponse(examples);\n } catch (error) {\n return textResponse(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\n// ============================================================================\n// CLI Tool Handlers\n// ============================================================================\n\n/**\n * Get information about CLI commands and usage\n */\nexport function getCliUsage(args: GetCliUsageArgs = {}): ToolResponse {\n const commandName = args.command;\n\n if (commandName) {\n const command = cliCommands[commandName];\n if (!command) {\n return textResponse(\n `Command \"${commandName}\" not found. Available commands: ${Object.keys(cliCommands).join(\", \")}`\n );\n }\n\n return textResponse(`# ${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 // 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 jsonResponse(allCommands);\n}\n\n// ============================================================================\n// Icon Tool Handlers\n// ============================================================================\n\n/**\n * Search for Material Design Icons\n */\nexport function searchIcons(args: SearchIconsArgs): ToolResponse {\n const query = args.query?.toLowerCase() || \"\";\n const limit = args.limit || 20;\n\n if (!query) {\n return textResponse(\"Please provide a search query.\");\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 jsonResponse(result);\n}\n\n// ============================================================================\n// Theme Tool Handlers\n// ============================================================================\n\n/**\n * Get TypeScript type definitions for theme types\n */\nexport function getThemeTypes(args: GetThemeTypesArgs = {}): ToolResponse {\n const format = args.format || \"both\";\n\n try {\n const result = getThemeTypesFromFile(format);\n return jsonResponse(result);\n } catch (error) {\n return textResponse(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\n// ============================================================================\n// Navigation Tool Handlers\n// ============================================================================\n\n/**\n * Get TypeScript type definitions for navigation types\n */\nexport function getNavigationTypes(args: GetNavigationTypesArgs = {}): ToolResponse {\n const format = args.format || \"both\";\n\n try {\n const result = getNavigationTypesFromFile(format);\n return jsonResponse(result);\n } catch (error) {\n return textResponse(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\n// ============================================================================\n// Guide Tool Handlers\n// ============================================================================\n\n/**\n * Get documentation for the translate package\n */\nexport function getTranslateGuide(args: GetTranslateGuideArgs): ToolResponse {\n const topic = args.topic;\n const uri = `idealyst://translate/${topic}`;\n const guide = translateGuides[uri];\n\n if (!guide) {\n return textResponse(\n `Topic \"${topic}\" not found. Available topics: overview, runtime-api, babel-plugin, translation-files, examples`\n );\n }\n\n return textResponse(guide);\n}\n\n/**\n * Get documentation for the storage package\n */\nexport function getStorageGuide(args: GetStorageGuideArgs): ToolResponse {\n const topic = args.topic;\n const uri = `idealyst://storage/${topic}`;\n const guide = storageGuides[uri];\n\n if (!guide) {\n return textResponse(\n `Topic \"${topic}\" not found. Available topics: overview, api, examples`\n );\n }\n\n return textResponse(guide);\n}\n\n// ============================================================================\n// Package Tool Handlers\n// ============================================================================\n\n/**\n * List all available packages\n */\nexport function listPackages(args: ListPackagesArgs = {}): ToolResponse {\n const category = args.category;\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 jsonResponse(packageList);\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 jsonResponse(grouped);\n}\n\n/**\n * Get detailed documentation for a package\n */\nexport function getPackageDocs(args: GetPackageDocsArgs): ToolResponse {\n const packageName = args.package;\n const section = args.section;\n\n // Handle both formats: \"camera\" and \"@idealyst/camera\"\n const normalizedName = packageName.replace(\"@idealyst/\", \"\").toLowerCase();\n const pkg = packages[normalizedName];\n\n if (!pkg) {\n const availablePackages = Object.keys(packages).join(\", \");\n return textResponse(\n `Package \"${packageName}\" not found. Available packages: ${availablePackages}`\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 textResponse(docs.trim());\n}\n\n/**\n * Search across all packages\n */\nexport function searchPackages(args: SearchPackagesArgs): ToolResponse {\n const query = args.query;\n\n if (!query) {\n return textResponse(\"Please provide a search query.\");\n }\n\n const results = searchPackagesData(query);\n\n if (results.length === 0) {\n return textResponse(\n `No packages found matching \"${query}\". Try searching for: camera, oauth, storage, translate, datagrid, datepicker, navigation, etc.`\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 jsonResponse(resultList);\n}\n\n// ============================================================================\n// Recipe Tool Handlers\n// ============================================================================\n\n/**\n * List all available recipes\n */\nexport function listRecipes(args: ListRecipesArgs = {}): ToolResponse {\n const category = args.category;\n const difficulty = args.difficulty;\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 jsonResponse(grouped);\n }\n\n return jsonResponse(recipeList);\n}\n\n/**\n * Get a complete code recipe\n */\nexport function getRecipe(args: GetRecipeArgs): ToolResponse {\n const recipeId = args.recipe;\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 textResponse(\n `Recipe \"${recipeId}\" not found.\\n\\nAvailable recipes: ${availableRecipes}`\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${\n recipe.tips && recipe.tips.length > 0\n ? `## Tips\n\n${recipe.tips.map((tip) => `- ${tip}`).join(\"\\n\")}`\n : \"\"\n}\n\n${\n recipe.relatedRecipes && recipe.relatedRecipes.length > 0\n ? `## Related Recipes\n\n${recipe.relatedRecipes.map((r) => `- ${r}`).join(\"\\n\")}`\n : \"\"\n}\n`;\n\n return textResponse(output.trim());\n}\n\n/**\n * Search for recipes\n */\nexport function searchRecipes(args: SearchRecipesArgs): ToolResponse {\n const query = args.query;\n\n if (!query) {\n return textResponse(\"Please provide a search query.\");\n }\n\n const results = searchRecipesData(query);\n\n if (results.length === 0) {\n return textResponse(\n `No recipes found matching \"${query}\". Try searching for: login, form, navigation, settings, auth, list, modal, etc.`\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 jsonResponse(resultList);\n}\n\n// ============================================================================\n// Handler Registry\n// ============================================================================\n\n/**\n * Map of all tool handlers by name.\n * Use this for dynamic tool dispatch.\n */\nexport const toolHandlers: Record<string, (args: any) => ToolResponse> = {\n list_components: listComponents,\n get_component_docs: getComponentDocs,\n get_component_example: getComponentExample,\n search_components: searchComponents,\n get_component_types: getComponentTypes,\n get_component_examples_ts: getComponentExamplesTs,\n get_cli_usage: getCliUsage,\n search_icons: searchIcons,\n get_theme_types: getThemeTypes,\n get_navigation_types: getNavigationTypes,\n get_translate_guide: getTranslateGuide,\n get_storage_guide: getStorageGuide,\n list_packages: listPackages,\n get_package_docs: getPackageDocs,\n search_packages: searchPackages,\n list_recipes: listRecipes,\n get_recipe: getRecipe,\n search_recipes: searchRecipes,\n};\n\n/**\n * Call a tool by name with arguments.\n * Returns a tool response or throws if the tool is not found.\n */\nexport function callTool(name: string, args: Record<string, unknown> = {}): ToolResponse {\n const handler = toolHandlers[name];\n\n if (!handler) {\n return textResponse(`Unknown tool: ${name}`);\n }\n\n return handler(args);\n}\n"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;A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A;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,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":["getComponentTypes","getThemeTypes","getNavigationTypes","searchPackages","searchRecipes"]}
|