@app-studio/web 0.8.90 → 0.8.92
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/components/CookieConsent/CookieConsent/CookieConsent.props.d.ts +57 -0
- package/dist/components/CookieConsent/CookieConsent/CookieConsent.state.d.ts +13 -0
- package/dist/components/CookieConsent/CookieConsent/CookieConsent.style.d.ts +68 -0
- package/dist/components/CookieConsent/CookieConsent/CookieConsent.type.d.ts +13 -0
- package/dist/components/CookieConsent/CookieConsent/CookieConsent.view.d.ts +8 -0
- package/dist/components/CookieConsent/CookieConsent.d.ts +3 -0
- package/dist/components/CookieConsent/examples/custom.d.ts +5 -0
- package/dist/components/CookieConsent/examples/default.d.ts +5 -0
- package/dist/components/CookieConsent/examples/index.d.ts +4 -0
- package/dist/components/CookieConsent/examples/positions.d.ts +5 -0
- package/dist/components/CookieConsent/examples/variants.d.ts +5 -0
- package/dist/components/Icon/Icon.d.ts +4 -1
- package/dist/components/Title/Title/Title.props.d.ts +88 -0
- package/dist/components/Title/Title/Title.state.d.ts +10 -0
- package/dist/components/Title/Title/Title.style.d.ts +25 -0
- package/dist/components/Title/Title/Title.type.d.ts +17 -0
- package/dist/components/Title/Title/Title.view.d.ts +4 -0
- package/dist/components/Title/Title/TypewriterEffect.d.ts +17 -0
- package/dist/components/Title/Title/useInView.d.ts +9 -0
- package/dist/components/Title/Title.d.ts +3 -0
- package/dist/components/Title/examples/alternating.d.ts +5 -0
- package/dist/components/Title/examples/animated.d.ts +5 -0
- package/dist/components/Title/examples/custom.d.ts +5 -0
- package/dist/components/Title/examples/default.d.ts +5 -0
- package/dist/components/Title/examples/directAnimation.d.ts +5 -0
- package/dist/components/Title/examples/gradient.d.ts +5 -0
- package/dist/components/Title/examples/hero.d.ts +5 -0
- package/dist/components/Title/examples/highlight.d.ts +5 -0
- package/dist/components/Title/examples/highlightStyles.d.ts +5 -0
- package/dist/components/Title/examples/highlighted.d.ts +5 -0
- package/dist/components/Title/examples/index.d.ts +12 -0
- package/dist/components/Title/examples/responsive.d.ts +5 -0
- package/dist/components/Title/examples/typewriterHighlight.d.ts +5 -0
- package/dist/components/Title/index.d.ts +1 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/pages/cookieConsent.page.d.ts +6 -0
- package/dist/pages/title.page.d.ts +6 -0
- package/dist/web.cjs.development.js +842 -133
- package/dist/web.cjs.development.js.map +1 -1
- package/dist/web.cjs.production.min.js +1 -1
- package/dist/web.cjs.production.min.js.map +1 -1
- package/dist/web.esm.js +839 -135
- package/dist/web.esm.js.map +1 -1
- package/dist/web.umd.development.js +843 -135
- package/dist/web.umd.development.js.map +1 -1
- package/dist/web.umd.production.min.js +1 -1
- package/dist/web.umd.production.min.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.cjs.production.min.js","sources":["../src/utils/id.ts","../src/components/Accordion/Accordion/Accordion.style.ts","../src/components/Accordion/Accordion/Accordion.view.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Accordion/Accordion/Accordion.state.ts","../src/components/Text/Text/Text.style.ts","../src/components/Text/Text/Text.view.tsx","../src/components/Text/Text.tsx","../src/components/Icon/Icon.tsx","../src/components/Alert/Alert/Alert.view.tsx","../src/components/Alert/Alert/Alert.style.tsx","../src/components/AspectRatio/AspectRatio/AspectRatio.view.tsx","../src/components/Avatar/Avatar/Avatar.style.tsx","../src/components/Avatar/Avatar/Avatar.view.tsx","../src/components/Badge/Badge/Badge.style.tsx","../src/components/Badge/Badge/Badge.view.tsx","../src/components/Link/Link/Link.style.ts","../src/components/Link/Link/Link.view.tsx","../src/components/Link/Link.tsx","../src/components/Link/Link/Link.state.ts","../src/components/Loader/Loader/Loader.style.ts","../src/components/Loader/Loader/Loader.view.tsx","../src/components/Loader/Loader.tsx","../src/components/Button/Button/Button.style.ts","../src/components/Button/Button/Button.view.tsx","../src/components/Button/Button.tsx","../src/components/Button/Button/Button.state.ts","../src/components/Card/Card/Card.style.ts","../src/components/Card/Card/Card.context.ts","../src/components/Card/Card/Card.view.tsx","../src/components/Card/Card.tsx","../src/components/Carousel/Carousel/Carousel.state.ts","../src/components/Carousel/Carousel/Carousel.style.ts","../src/components/Carousel/Carousel/Carousel.context.ts","../src/components/Carousel/Carousel/Carousel.view.tsx","../src/components/Carousel/Carousel.tsx","../src/components/Chart/Chart/ChartColors.ts","../src/components/Chart/Chart/Chart.style.ts","../src/components/Chart/Chart/BarChart.tsx","../src/components/Chart/Chart/LineChart.tsx","../src/components/Chart/Chart/PieChart.tsx","../src/components/Chart/Chart/Chart.view.tsx","../src/components/Chart/Chart/Chart.state.ts","../src/components/ContextMenu/ContextMenu/ContextMenu.style.ts","../src/components/ContextMenu/ContextMenu/ContextMenu.view.tsx","../src/components/ContextMenu/ContextMenu.tsx","../src/components/ContextMenu/ContextMenu/ContextMenu.state.ts","../src/components/Form/Select/Select/Select.state.ts","../src/components/Input/HelperText/HelperText.tsx","../src/components/Input/FieldContainer/FieldContainer.tsx","../src/components/Input/Input.style.ts","../src/components/Input/FieldContent/FieldContent.tsx","../src/components/Input/FieldIcons/FieldIcons.tsx","../src/components/Form/Label/Label/Label.style.ts","../src/components/Form/Label/Label/Label.view.tsx","../src/components/Form/Label/Label.tsx","../src/components/Input/FieldLabel/FieldLabel.tsx","../src/components/Input/FieldWrapper/FieldWrapper.tsx","../src/components/Form/Select/Select/Select.style.ts","../src/components/Form/Select/Select/Select.view.tsx","../src/components/Form/Switch/Switch/Switch.state.ts","../src/components/Form/Switch/Switch/Switch.style.ts","../src/components/Form/Switch/Switch/Switch.view.tsx","../src/components/Form/TextArea/TextArea/TextArea.state.ts","../src/components/Form/TextArea/TextArea/TextArea.view.tsx","../src/components/Form/TextField/TextField/TextField.state.ts","../src/components/Form/TextField/TextField/TextField.view.tsx","../src/components/Form/Checkbox/Checkbox/Checkbox.state.ts","../src/components/Form/Checkbox/Checkbox/Checkbox.style.ts","../src/components/Form/Checkbox/Checkbox/Checkbox.view.tsx","../src/components/Form/CountryPicker/CountryPicker/CountryPicker.state.ts","../src/components/Form/CountryPicker/CountryPicker/CountryPicker.style.ts","../src/components/Form/CountryPicker/CountryPicker/CountryPicker.view.tsx","../src/components/Form/DatePicker/DatePicker/DatePicker.state.ts","../src/components/Form/DatePicker/DatePicker/DatePicker.view.tsx","../src/components/Form/Password/Password/Password.state.ts","../src/components/Form/ComboBox/ComboBox/ComboBox.state.ts","../src/components/Form/ComboBox/ComboBox/ComboBox.view.tsx","../src/components/OTPInput/OTPInput/OTPInput.state.ts","../src/components/OTPInput/OTPInput/sync-timeouts.ts","../src/components/OTPInput/OTPInput/OTPInput.view.tsx","../src/components/Formik/Formik.Form.tsx","../src/components/Formik/Formik.Hook.tsx","../src/components/Slider/Slider/Slider.state.ts","../src/components/Slider/Slider/Slider.style.ts","../src/components/Slider/Slider/Slider.view.tsx","../src/components/Message/Message/Message.store.tsx","../src/components/Message/Message/Message.style.ts","../src/components/Message/Message/Message.view.tsx","../src/components/Uploader/Uploader/Uploader.view.tsx","../src/components/Modal/Modal/Modal.store.tsx","../src/components/Modal/Modal/Modal.style.ts","../src/components/Modal/Modal/Modal.view.tsx","../src/components/Modal/Modal.tsx","../src/components/Modal/Modal/Modal.layout.tsx","../src/components/NavigationMenu/NavigationMenu/NavigationMenu.state.ts","../src/components/NavigationMenu/NavigationMenu/NavigationMenu.style.ts","../src/components/NavigationMenu/NavigationMenu/NavigationMenu.view.tsx","../src/components/NavigationMenu/NavigationMenu.tsx","../src/components/Table/Table/Table.context.tsx","../src/components/Table/Table/Table.style.ts","../src/components/Table/Table/Table.view.tsx","../src/components/Table/Table.tsx","../src/components/Tabs/Tabs/Tabs.state.ts","../src/components/Tabs/Tabs/TabHeader.tsx","../src/components/Tabs/Tabs/Tabs.view.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Toggle/Toggle/Toggle.view.tsx","../src/components/Toggle/Toggle.tsx","../src/components/Toggle/Toggle/Toggle.state.ts","../src/components/ToggleGroup/ToggleGroup/ToggleGroup.view.tsx","../src/components/DragAndDrop/DragAndDrop/DragAndDrop.view.tsx","../src/components/DragAndDrop/DragAndDrop.tsx","../src/components/DragAndDrop/DragAndDrop/DragAndDrop.state.ts","../src/components/DropdownMenu/DropdownMenu/DropdownMenu.style.ts","../src/components/DropdownMenu/DropdownMenu/DropdownMenu.view.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/DropdownMenu/DropdownMenu/DropdownMenu.state.ts","../src/components/HoverCard/HoverCard/HoverCard.state.ts","../src/components/HoverCard/HoverCard/HoverCard.view.tsx","../src/components/HoverCard/HoverCard.tsx","../src/components/HoverCard/HoverCard/HoverCard.style.ts","../src/hooks/useRect.ts","../src/components/Menubar/Menubar/Menubar.style.ts","../src/components/Menubar/Menubar/Menubar.view.tsx","../src/components/Menubar/Menubar.tsx","../src/components/Menubar/Menubar/Menubar.state.ts","../src/components/Pagination/Pagination/Pagination.style.ts","../src/components/Pagination/Pagination/Pagination.view.tsx","../src/components/Separator/Separator/Separator.style.ts","../src/components/Separator/Separator/Separator.view.tsx","../src/components/Separator/Separator.tsx","../src/components/Sidebar/Sidebar/Sidebar.style.ts","../src/components/Sidebar/Sidebar/Sidebar.view.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Sidebar/Sidebar/Sidebar.state.ts","../src/components/Resizable/Resizable/Resizable.state.ts","../src/components/Resizable/Resizable/Resizable.style.ts","../src/components/Resizable/Resizable/Resizable.view.tsx","../src/components/Resizable/Resizable.tsx","../src/components/Toast/Toast/Toast.style.ts","../src/components/Toast/Toast/Toast.store.tsx","../src/components/Toast/Toast/Toast.view.tsx","../src/components/Toast/Toast.tsx","../src/components/Command/Command/Command.state.ts","../src/components/Command/Command/Command.style.ts","../src/components/Command/Command/Command.view.tsx","../src/components/Command/Command.tsx","../src/utils/generateId.ts","../src/components/Tooltip/Tooltip/Tooltip.style.ts","../src/components/Tooltip/Tooltip/Tooltip.view.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Tooltip/Tooltip/Tooltip.state.ts","../src/components/Alert/Alert.tsx","../src/components/AspectRatio/AspectRatio.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Avatar/Avatar/Avatar.state.ts","../src/components/Badge/Badge.tsx","../src/components/Chart/Chart.tsx","../src/components/Form/Checkbox/Checkbox.tsx","../src/components/Form/ComboBox/ComboBox.tsx","../src/components/Form/CountryPicker/CountryPicker.tsx","../src/components/Form/DatePicker/DatePicker.tsx","../src/components/File/File.tsx","../src/components/Formik/Formik.Checkbox.tsx","../src/components/Formik/Formik.ComboBox.tsx","../src/components/Formik/Formik.CountryPicker.tsx","../src/components/Formik/Formik.DatePicker.tsx","../src/components/Formik/Formik.OTPInput.tsx","../src/components/Formik/Formik.Password.tsx","../src/components/Formik/Formik.Select.tsx","../src/components/Formik/Formik.Slider.tsx","../src/components/Formik/Formik.Switch.tsx","../src/components/Formik/Formik.TextArea.tsx","../src/components/Formik/Formik.TextField.tsx","../src/components/Message/Message/Message.layout.tsx","../src/components/OTPInput/OTPInput.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Pagination/Pagination/Pagination.state.ts","../src/components/Form/Password/Password.tsx","../src/components/Form/Select/Select.tsx","../src/components/Slider/Slider.tsx","../src/components/Form/Switch/Switch.tsx","../src/components/Form/TextArea/TextArea.tsx","../src/components/Form/TextField/TextField.tsx","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/ToggleGroup/ToggleGroup/ToggleGroup.state.ts","../src/components/Uploader/Uploader.tsx","../src/components/Uploader/Uploader/Uploader.state.tsx","../src/components/Toast/Toast/Toast.hook.ts"],"sourcesContent":["/**\n * Generates a unique ID with an optional prefix\n * @param prefix Optional prefix for the ID\n * @returns A unique string ID\n */\nexport const generateId = (prefix: string = 'id') =>\n `${prefix}-${Math.random().toString(36).substring(2, 9)}`;\n","import { ViewProps } from 'app-studio';\nimport { Shape, Variant } from './Accordion.type';\n\nexport const AccordionShapes: Record<Shape, ViewProps> = {\n sharp: { borderRadius: 0 },\n rounded: { borderRadius: 8 },\n};\n\nexport const AccordionVariants: Record<Variant, ViewProps> = {\n default: {\n backgroundColor: 'transparent',\n borderWidth: 0,\n },\n outline: {\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n },\n filled: {\n backgroundColor: 'color.gray.50',\n },\n};\n","import React, {\n createContext,\n useContext,\n Children,\n cloneElement,\n isValidElement,\n} from 'react';\nimport { View, Horizontal, Vertical, ViewProps } from 'app-studio';\nimport { AccordionContextType } from './Accordion.type';\nimport {\n AccordionTriggerProps,\n AccordionContentProps,\n AccordionItemProps,\n} from './Accordion.props';\nimport { AccordionShapes, AccordionVariants } from './Accordion.style';\n\n// Create context for the Accordion\nconst AccordionContext = createContext<AccordionContextType>({\n expandedItems: [],\n toggleItem: () => {},\n isItemExpanded: () => false,\n type: 'single',\n collapsible: false,\n baseId: '',\n});\n\n// Provider component for the Accordion context\nexport const AccordionProvider: React.FC<{\n children: React.ReactNode;\n value: AccordionContextType;\n}> = ({ children, value }) => {\n return (\n <AccordionContext.Provider value={value}>\n {children}\n </AccordionContext.Provider>\n );\n};\n\n// Hook to use the Accordion context\nexport const useAccordionContext = () => {\n const context = useContext(AccordionContext);\n if (!context) {\n throw new Error(\n 'useAccordionContext must be used within an AccordionProvider'\n );\n }\n return context;\n};\n\n// Accordion Item component\nexport const AccordionItem: React.FC<AccordionItemProps> = ({\n value,\n children,\n isDisabled = false,\n views,\n ...props\n}) => {\n const {\n isItemExpanded,\n baseId,\n //toggleItem\n } = useAccordionContext();\n const isExpanded = isItemExpanded(value);\n\n // Generate unique IDs for ARIA attributes\n const triggerId = `${baseId}-trigger-${value}`;\n const contentId = `${baseId}-content-${value}`;\n\n return (\n <View\n borderWidth={1}\n borderStyle=\"solid\"\n borderColor=\"color.gray.200\"\n marginBottom={8}\n overflow=\"hidden\"\n opacity={isDisabled ? 0.5 : 1}\n pointerEvents={isDisabled ? 'none' : 'auto'}\n data-state={isExpanded ? 'open' : 'closed'}\n data-disabled={isDisabled ? '' : undefined}\n {...views?.item}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n // Pass the necessary props to AccordionTrigger and AccordionContent\n return React.cloneElement(child, {\n ...child.props,\n value,\n isExpanded,\n isDisabled,\n triggerId,\n contentId,\n });\n }\n return child;\n })}\n </View>\n );\n};\n\n// Accordion Trigger component\nexport const AccordionTrigger: React.FC<\n AccordionTriggerProps & {\n value?: string;\n isExpanded?: boolean;\n isDisabled?: boolean;\n triggerId?: string;\n contentId?: string;\n }\n> = ({\n children,\n value,\n isExpanded,\n isDisabled,\n triggerId,\n contentId,\n views,\n asChild = false,\n ...props\n}) => {\n const { toggleItem } = useAccordionContext();\n\n const handleClick = () => {\n if (value && !isDisabled) {\n toggleItem(value);\n }\n };\n\n const triggerProps = {\n id: triggerId,\n 'aria-expanded': isExpanded,\n 'aria-controls': contentId,\n 'aria-disabled': isDisabled,\n 'data-state': isExpanded ? 'open' : 'closed',\n 'data-disabled': isDisabled ? '' : undefined,\n onClick: handleClick,\n padding: 16,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: 'color.white',\n width: '100%',\n ...views?.container,\n ...props,\n };\n\n // If asChild is true, clone the child element and merge props\n if (asChild && isValidElement(children)) {\n const child = Children.only(children);\n return cloneElement(child, { ...triggerProps, ...child.props });\n }\n\n return (\n <Horizontal {...triggerProps}>\n {children}\n <View\n width={24}\n height={24}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n transition=\"transform 0.2s ease\"\n transform={isExpanded ? 'rotate(180deg)' : 'rotate(0deg)'}\n {...views?.icon}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16.59 8.59L12 13.17L7.41 8.59L6 10L12 16L18 10L16.59 8.59Z\"\n fill=\"currentColor\"\n />\n </svg>\n </View>\n </Horizontal>\n );\n};\n\n// Accordion Content component\nexport const AccordionContent: React.FC<\n AccordionContentProps & {\n isExpanded?: boolean;\n isDisabled?: boolean;\n triggerId?: string;\n contentId?: string;\n }\n> = ({\n children,\n isExpanded,\n isDisabled,\n triggerId,\n contentId,\n views,\n ...props\n}) => {\n if (!isExpanded) {\n return null;\n }\n\n return (\n <View\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n padding={16}\n backgroundColor=\"color.white\"\n maxHeight={isExpanded ? '1000px' : '0'}\n transition=\"max-height 0.3s ease-in-out, opacity 0.3s ease-in-out\"\n opacity={1}\n overflow=\"hidden\"\n data-state={isExpanded ? 'open' : 'closed'}\n data-disabled={isDisabled ? '' : undefined}\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// Main Accordion View component\nexport const AccordionView: React.FC<\n {\n children: React.ReactNode;\n shape?: 'sharp' | 'rounded';\n variant?: 'default' | 'outline' | 'filled';\n views?: any;\n baseId: string;\n type: 'single' | 'multiple';\n collapsible: boolean;\n } & ViewProps\n> = ({\n children,\n shape = 'rounded',\n variant = 'default',\n views,\n baseId,\n type,\n collapsible,\n themeMode: elementMode,\n ...props\n}) => {\n return (\n <Vertical\n width=\"100%\"\n data-orientation=\"vertical\"\n {...AccordionShapes[shape]}\n {...AccordionVariants[variant]}\n {...views?.container}\n {...props}\n >\n {children}\n </Vertical>\n );\n};\n","import React from 'react';\nimport {\n AccordionProps,\n AccordionComponentType,\n} from './Accordion/Accordion.props';\nimport { useAccordionState } from './Accordion/Accordion.state';\nimport {\n AccordionProvider,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n AccordionView,\n} from './Accordion/Accordion.view';\n\n/**\n * Accordion component for displaying collapsible content panels.\n *\n * @example\n * ```tsx\n * <Accordion type=\"single\" defaultValue=\"item-1\" collapsible>\n * <Accordion.Item value=\"item-1\">\n * <Accordion.Trigger>Section 1</Accordion.Trigger>\n * <Accordion.Content>Content for section 1</Accordion.Content>\n * </Accordion.Item>\n * <Accordion.Item value=\"item-2\">\n * <Accordion.Trigger>Section 2</Accordion.Trigger>\n * <Accordion.Content>Content for section 2</Accordion.Content>\n * </Accordion.Item>\n * </Accordion>\n * ```\n */\nconst AccordionComponent: React.FC<AccordionProps> = ({\n children,\n type = 'single',\n value,\n defaultValue,\n onValueChange,\n collapsible = false,\n shape = 'rounded',\n variant = 'default',\n views,\n ...props\n}) => {\n // For backward compatibility\n const legacyDefaultValue = Array.isArray(defaultValue)\n ? defaultValue\n : defaultValue\n ? [defaultValue]\n : undefined;\n\n const accordionState = useAccordionState({\n type,\n value,\n defaultValue: defaultValue ?? legacyDefaultValue,\n onValueChange,\n collapsible,\n });\n\n return (\n <AccordionProvider\n value={{\n expandedItems: accordionState.expandedItems,\n toggleItem: accordionState.toggleItem,\n isItemExpanded: accordionState.isItemExpanded,\n type: accordionState.type,\n collapsible: accordionState.collapsible,\n baseId: accordionState.baseId,\n }}\n >\n <AccordionView\n shape={shape}\n variant={variant}\n views={views}\n baseId={accordionState.baseId}\n type={accordionState.type}\n collapsible={accordionState.collapsible}\n {...props}\n >\n {children}\n </AccordionView>\n </AccordionProvider>\n );\n};\n\nexport const Accordion = AccordionComponent as AccordionComponentType;\n\n// Assign the sub-components to the main component\nAccordion.Item = AccordionItem;\nAccordion.Trigger = AccordionTrigger;\nAccordion.Content = AccordionContent;\n","import { useState, useCallback, useMemo, useEffect } from 'react';\nimport { AccordionProps } from './Accordion.props';\nimport { generateId } from '../../../utils/id';\n\nexport const useAccordionState = ({\n type = 'single',\n value: controlledValue,\n defaultValue,\n onValueChange,\n collapsible = false,\n}: Pick<\n AccordionProps,\n 'type' | 'value' | 'defaultValue' | 'onValueChange' | 'collapsible'\n>) => {\n const isControlled = controlledValue !== undefined;\n const initialValue = controlledValue ?? defaultValue;\n\n // Ensure initial value matches the type ('single' needs string/undefined, 'multiple' needs array)\n const getValidInitialValue = () => {\n if (type === 'multiple') {\n return Array.isArray(initialValue)\n ? initialValue\n : initialValue\n ? [initialValue]\n : [];\n }\n // Type 'single'\n return Array.isArray(initialValue) ? initialValue[0] : initialValue;\n };\n\n const [internalValue, setInternalValue] = useState<\n string | string[] | undefined\n >(getValidInitialValue());\n\n // Generate a base ID for ARIA attributes\n const baseId = useMemo(() => generateId('accordion'), []);\n\n // Memoize the value to be used (controlled or internal)\n const selectedValue = isControlled ? controlledValue : internalValue;\n\n // Convert selectedValue to array for internal use\n const expandedItems = useMemo(() => {\n if (selectedValue === undefined) return [];\n return Array.isArray(selectedValue) ? selectedValue : [selectedValue];\n }, [selectedValue]);\n\n // Update internal state if controlled value changes externally\n useEffect(() => {\n if (isControlled) {\n // Ensure the controlled value type matches the accordion type\n if (type === 'multiple' && !Array.isArray(controlledValue)) {\n console.warn(\n `Accordion with type=\"multiple\" received non-array value:`,\n controlledValue\n );\n // Attempt to gracefully handle: use empty array or convert if single string\n setInternalValue(controlledValue ? [String(controlledValue)] : []);\n } else if (type === 'single' && Array.isArray(controlledValue)) {\n console.warn(\n `Accordion with type=\"single\" received array value:`,\n controlledValue\n );\n // Attempt to gracefully handle: use first element or undefined\n setInternalValue(\n controlledValue.length > 0 ? controlledValue[0] : undefined\n );\n } else {\n setInternalValue(controlledValue); // Sync types match\n }\n }\n }, [controlledValue, isControlled, type]);\n\n const toggleItem = useCallback(\n (itemValue: string) => {\n let newValue: string | string[] | undefined;\n\n if (type === 'single') {\n if (selectedValue === itemValue && collapsible) {\n newValue = undefined; // Collapse if collapsible\n } else if (selectedValue !== itemValue) {\n newValue = itemValue; // Open the new one\n } else {\n newValue = selectedValue; // No change if not collapsible and already open\n }\n } else {\n // Type 'multiple'\n const currentValues = Array.isArray(selectedValue) ? selectedValue : [];\n if (currentValues.includes(itemValue)) {\n // Item is open, close it by filtering out\n newValue = currentValues.filter((v) => v !== itemValue);\n } else {\n // Item is closed, open it by adding\n newValue = [...currentValues, itemValue];\n }\n // Ensure empty array instead of undefined for multiple type when all closed\n if (Array.isArray(newValue) && newValue.length === 0) newValue = [];\n }\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n if (onValueChange) {\n onValueChange(newValue);\n }\n },\n [type, selectedValue, collapsible, isControlled, onValueChange]\n );\n\n const isItemExpanded = useCallback(\n (itemValue: string) => {\n return expandedItems.includes(itemValue);\n },\n [expandedItems]\n );\n\n return {\n expandedItems,\n toggleItem,\n isItemExpanded,\n type,\n collapsible,\n baseId,\n };\n};\n","/**\n * Text Styles\n *\n * Defines the styles for the Text component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n */\n\nimport { Headings, Size, TextWeights } from './Text.type';\nimport { ViewProps } from 'app-studio';\n\n/**\n * Heading sizes following typography guidelines\n */\nexport const HeadingSizes: Record<Headings, ViewProps> = {\n h1: {\n fontSize: '36px', // 2.25rem\n lineHeight: '40px', // 2.5rem\n fontWeight: '700', // Bold\n letterSpacing: '-0.02em',\n marginBottom: '24px', // 6 × 4px grid\n },\n h2: {\n fontSize: '30px', // 1.875rem\n lineHeight: '36px', // 2.25rem\n fontWeight: '700', // Bold\n letterSpacing: '-0.02em',\n marginBottom: '20px', // 5 × 4px grid\n },\n h3: {\n fontSize: '24px', // 1.5rem\n lineHeight: '32px', // 2rem\n fontWeight: '600', // Semi-bold\n letterSpacing: '-0.01em',\n marginBottom: '16px', // 4 × 4px grid\n },\n h4: {\n fontSize: '20px', // 1.25rem\n lineHeight: '28px', // 1.75rem\n fontWeight: '600', // Semi-bold\n letterSpacing: '-0.01em',\n marginBottom: '16px', // 4 × 4px grid\n },\n h5: {\n fontSize: '18px', // 1.125rem\n lineHeight: '24px', // 1.5rem\n fontWeight: '600', // Semi-bold\n letterSpacing: '-0.01em',\n marginBottom: '12px', // 3 × 4px grid\n },\n h6: {\n fontSize: '16px', // 1rem\n lineHeight: '24px', // 1.5rem\n fontWeight: '600', // Semi-bold\n letterSpacing: '-0.01em',\n marginBottom: '8px', // 2 × 4px grid\n },\n};\n\n/**\n * Font sizes following typography guidelines\n */\nexport const FontSizes: Record<Size, string> = {\n xs: '12px', // 0.75rem\n sm: '14px', // 0.875rem\n md: '16px', // 1rem (base)\n lg: '18px', // 1.125rem\n xl: '20px', // 1.25rem\n};\n\n/**\n * Line heights following typography guidelines\n */\nexport const LineHeights: Record<Size, string> = {\n xs: '16px', // 1rem\n sm: '20px', // 1.25rem\n md: '24px', // 1.5rem\n lg: '28px', // 1.75rem\n xl: '28px', // 1.75rem\n};\n\n/**\n * Font weights following typography guidelines\n */\nexport const FontWeights: Record<TextWeights, string> = {\n hairline: '100',\n thin: '200',\n light: '300',\n normal: '400',\n medium: '500',\n semiBold: '600',\n bold: '700',\n extraBold: '800',\n black: '900',\n};\n","/**\n * Text View Component\n *\n * Renders text with various styles and states according to the design guidelines.\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Element, View, ViewProps } from 'app-studio';\n\nimport { TextProps } from './Text.props';\nimport {\n HeadingSizes,\n FontSizes,\n LineHeights,\n FontWeights,\n} from './Text.style';\n\ninterface Props extends TextProps {\n views?: {\n container?: ViewProps;\n };\n}\n\ninterface ContentProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n isSub?: boolean;\n isSup?: boolean;\n views?: {\n sup?: ViewProps;\n };\n}\n\ninterface TruncateTextProps extends React.HTMLAttributes<HTMLDivElement> {\n text: string;\n maxLines?: number;\n views?: {\n truncateText?: ViewProps;\n };\n}\n\n/**\n * Renders text content with support for subscript and superscript\n */\nconst TextContent: React.FC<ContentProps> = ({\n children,\n isSub,\n isSup,\n views,\n}) => (\n <>\n {typeof children === 'string' ? (\n <>\n {isSub && (\n <View\n as=\"sub\"\n fontSize=\"75%\"\n lineHeight=\"0\"\n position=\"relative\"\n bottom=\"-0.25em\"\n {...views?.sup}\n >\n {children}\n </View>\n )}\n {isSup && (\n <View\n as=\"sup\"\n fontSize=\"75%\"\n lineHeight=\"0\"\n position=\"relative\"\n top=\"-0.5em\"\n {...views?.sup}\n >\n {children}\n </View>\n )}\n {!isSub && !isSup && <>{children}</>}\n </>\n ) : (\n children\n )}\n </>\n);\n\n// Keep the interface\ninterface TruncateTextProps extends React.HTMLAttributes<HTMLDivElement> {\n text: string;\n maxLines?: number;\n views?: {\n truncateText?: ViewProps;\n };\n}\n\n/**\n * Renders text with truncation after a specified number of lines (JS calculation)\n */\nconst TruncateText: React.FC<TruncateTextProps> = ({\n text,\n maxLines = 1,\n views,\n ...rest // Pass down other HTML attributes\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [truncatedText, setTruncatedText] = useState(text);\n const [isTruncated, setIsTruncated] = useState(false);\n\n useEffect(() => {\n const node = containerRef.current;\n if (!node || !text || maxLines <= 0) {\n setTruncatedText(text ?? '');\n setIsTruncated(false);\n return;\n }\n\n const { overflow, height, maxHeight, lineHeight } = node.style;\n\n node.style.overflow = 'visible';\n node.style.height = 'auto';\n node.style.maxHeight = 'none';\n\n node.innerText = text[0] || 'M';\n let singleLine = node.offsetHeight;\n if (!singleLine) {\n const cs = getComputedStyle(node);\n singleLine =\n cs.lineHeight !== 'normal'\n ? parseFloat(cs.lineHeight)\n : parseFloat(cs.fontSize || '16') * 1.2;\n }\n\n const limit = singleLine * maxLines;\n\n node.innerText = text;\n if (node.offsetHeight <= limit) {\n setTruncatedText(text);\n setIsTruncated(false);\n restore(node);\n return;\n }\n\n let lo = 0;\n let hi = text.length;\n let fit = 0;\n\n while (lo <= hi) {\n const mid = Math.floor((lo + hi) / 2);\n node.innerText = text.slice(0, mid);\n if (node.offsetHeight <= limit) {\n fit = mid;\n lo = mid + 1;\n } else {\n hi = mid - 1;\n }\n }\n\n const finalText =\n fit < text.length\n ? text.slice(0, text.length > fit + 3 ? fit - 3 : fit).trimEnd() + '…'\n : text;\n setTruncatedText(finalText);\n setIsTruncated(fit < text.length);\n restore(node);\n\n function restore(n) {\n n.style.overflow = overflow;\n n.style.height = height;\n n.style.maxHeight = maxHeight;\n n.style.lineHeight = lineHeight;\n }\n }, [text, maxLines]);\n\n return (\n <View\n ref={containerRef}\n overflow=\"hidden\" // Crucial for final display state\n {...views?.truncateText}\n {...rest} // Spread remaining props\n // Add title attribute for accessibility/hover to see full text\n title={isTruncated ? text : undefined}\n >\n {/* Render the text from state */}\n {truncatedText}\n </View>\n );\n};\n\n/**\n * Main Text component that renders text with various styles and states\n */\nconst TextView: React.FC<Props> = ({\n children,\n heading,\n maxLines,\n isItalic = false,\n isUnderlined = false,\n isSub = false,\n isSup = false,\n isStriked = false,\n weight = 'normal',\n size = 'md',\n views,\n ...props\n}) => {\n // Apply heading styles if a heading is specified\n const headingStyles = heading ? HeadingSizes[heading] : {};\n\n // For sub/sup text, use inline display\n const noLineBreak = isSub || isSup ? { display: 'inline' } : {};\n\n // Get font size, line height, and weight from our design system\n const fontSize = FontSizes[size];\n const lineHeight = LineHeights[size];\n const fontWeight = FontWeights[weight];\n\n return (\n <Element\n // Apply typography styles according to design guidelines\n fontSize={fontSize}\n lineHeight={lineHeight}\n fontStyle={isItalic ? 'italic' : 'normal'}\n fontWeight={fontWeight}\n letterSpacing=\"-0.01em\"\n textDecoration={\n isStriked ? 'line-through' : isUnderlined ? 'underline' : 'none'\n }\n // Apply layout styles\n {...noLineBreak}\n // Apply heading styles if specified\n {...headingStyles}\n // Apply any custom props\n {...props}\n // Apply custom container styles\n {...views?.container}\n >\n {maxLines && typeof children === 'string' ? (\n <TruncateText text={children} maxLines={maxLines} />\n ) : (\n <TextContent isSub={isSub} isSup={isSup}>\n {children}\n </TextContent>\n )}\n </Element>\n );\n};\n\nexport default TextView;\n","import React from 'react';\n\nimport { TextProps } from './Text/Text.props';\nimport TextView from './Text/Text.view';\n\nconst TextComponent: React.FC<TextProps & any> = (props) => {\n return <TextView {...props} />;\n};\n\n/**\n * The Text component is a simple component that renders a text string or paragraphs as a DOM element in the UI. It is a <p> tag by default.\n */\nexport const Text = TextComponent;\n","import { useTheme, ViewProps } from 'app-studio';\nimport React from 'react';\nimport { Center } from 'app-studio';\n\n// Base icon interface with added transform and orientation\nexport interface IconProps extends ViewProps {\n color?: string;\n filled?: boolean;\n orientation?: 'left' | 'right' | 'up' | 'down';\n}\n\n// Default wrapper component for consistent sizing and styling\nconst IconWrapper: React.FC<IconProps> = ({\n widthHeight,\n color = 'black',\n transform,\n orientation = 'up',\n children,\n ...rest\n}) => (\n <Center\n widthHeight={widthHeight}\n lineHeight={widthHeight}\n color={color}\n display=\"flex\"\n transform={\n transform\n ? transform\n : orientation === 'left'\n ? 'rotate(-90deg)'\n : orientation === 'right'\n ? 'rotate(90deg)'\n : orientation === 'up'\n ? 'rotate(0deg)'\n : orientation === 'down'\n ? 'rotate(180deg)'\n : 'none'\n }\n {...rest}\n >\n {children}\n </Center>\n);\n\n// Utility function to handle fill and stroke based on 'filled' prop\nconst getSvgProps = (\n filled: boolean,\n color: string,\n strokeWidth: number | string\n) => {\n const { getColor } = useTheme();\n return {\n fill: filled ? getColor(color) : 'none',\n stroke: filled ? 'none' : getColor(color),\n strokeWidth,\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n };\n};\n\nexport const UserIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const HelpIcon = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}: IconProps) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\" />\n </svg>\n </IconWrapper>\n);\n\n// Example Icon Component: ChevronIcon\nexport const ChevronIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12.771 7.115a.829.829 0 0 0-1.2 0L3 15.686l1.2 1.2 7.971-7.971 7.972 7.971 1.2-1.2-8.572-8.571Z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const DragHandleIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <g>\n {/* First column */}\n <circle cx=\"9\" cy=\"6\" r=\"2\" />\n <circle cx=\"9\" cy=\"12\" r=\"2\" />\n <circle cx=\"9\" cy=\"18\" r=\"2\" />\n\n {/* Second column */}\n <circle cx=\"15\" cy=\"6\" r=\"2\" />\n <circle cx=\"15\" cy=\"12\" r=\"2\" />\n <circle cx=\"15\" cy=\"18\" r=\"2\" />\n </g>\n </svg>\n </IconWrapper>\n);\n\n// File Icon Component\nexport const FileIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={filled ? color : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n <polyline\n points=\"14 2 14 8 20 8\"\n fill=\"none\"\n stroke={color}\n strokeWidth={strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\n// Video Icon Component\nexport const VideoIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect\n x=\"2\"\n y=\"4\"\n width=\"20\"\n height=\"16\"\n rx=\"2\"\n ry=\"2\"\n fill={filled ? color : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n <polygon\n points=\"10 8 16 12 10 16 10 8\"\n fill={filled ? (filled ? 'white' : color) : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\n// Image Icon Component\nexport const ImageIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect\n x=\"2\"\n y=\"2\"\n width=\"20\"\n height=\"20\"\n rx=\"2\"\n ry=\"2\"\n fill={filled ? color : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n <circle\n cx=\"8.5\"\n cy=\"8.5\"\n r=\"1.5\"\n fill={filled ? (filled ? 'white' : color) : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n <polyline\n points=\"21 15 16 10 5 21\"\n fill=\"none\"\n stroke={filled ? 'white' : color}\n strokeWidth={strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\nexport const TwitterIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n d=\"M22.46 6.01c-.83.37-1.72.62-2.65.74a4.6 4.6 0 0 0 2.01-2.54 9.2 9.2 0 0 1-2.91 1.11 4.54 4.54 0 0 0-7.75 4.14A12.86 12.86 0 0 1 3.15 4.47a4.54 4.54 0 0 0 1.4 6.06 4.5 4.5 0 0 1-2.06-.57v.06a4.54 4.54 0 0 0 3.64 4.45 4.61 4.61 0 0 1-2.05.08 4.54 4.54 0 0 0 4.23 3.15 9.12 9.12 0 0 1-5.64 1.94c-.37 0-.74-.02-1.1-.07A12.86 12.86 0 0 0 8.21 21c8.38 0 12.96-6.94 12.96-12.96 0-.2 0-.4-.01-.6a9.28 9.28 0 0 0 2.3-2.37z\"\n fill={filled ? color : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\nexport const XIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\"\n fill={filled ? color : 'none'}\n stroke={color}\n strokeWidth={strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\n// Example of a Twitch Icon\nexport const TwitchIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n d=\"M2 2v16h5v4l4-4h5l6-6V2H2zm18 10-3 3h-5l-3 3v-3H4V4h16v8z\"\n fill={filled ? color : 'none'}\n stroke={color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n <path\n d=\"M14 7h2v5h-2V7zm-4 0h2v5H10V7z\"\n fill={filled ? color : 'none'}\n stroke={color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\n// Example of another Icon: CloseIcon\nexport const CloseIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line stroke={color} x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line stroke={color} x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </IconWrapper>\n);\n\nexport const InstagramIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" ry=\"5\"></rect>\n <path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\"></path>\n <line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\"></line>\n </svg>\n </IconWrapper>\n);\n\nexport const YoutubeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n {/* YouTube Play Button Background */}\n <path\n d=\"M21.8 8.001A2.8 2.8 0 0 0 19 5.2C17.793 5 12 5 12 5s-5.793 0-7 0.2a2.8 2.8 0 0 0-2.8 2.8c-0.2 1.207-0.2 3-0.2 3s0 1.793 0.2 3a2.8 2.8 0 0 0 2.8 2.8c1.207 0.2 7 0.2 7 0.2s5.793 0 7-0.2a2.8 2.8 0 0 0 2.8-2.8c0.2-1.207 0.2-3 0.2-3s0-1.793-0.2-3z\"\n fill={filled ? color : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n\n <polygon\n points=\"10 8 10 14 14 10\"\n fill=\"white\" // Ensures the play button is transparent\n stroke={'white'}\n strokeWidth={strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\nexport const FacebookIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n d=\"M22 2H2v20h10v-7h-2v-3h2V9.5a4 4 0 0 1 4-4h3v3h-3a1 1 0 0 0-1 1V12h4l-1 3h-3v7h6V2z\"\n fill={filled ? color : 'none'}\n stroke={color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\nexport const LinkedinIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg viewBox=\"0 0 24 24\" {...getSvgProps(filled, color, strokeWidth)}>\n <path d=\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\"></path>\n <rect x=\"2\" y=\"9\" width=\"4\" height=\"12\"></rect>\n <circle cx=\"4\" cy=\"4\" r=\"2\"></circle>\n </svg>\n </IconWrapper>\n);\n\nexport const ThreadsIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg viewBox=\"0 0 24 24\" {...getSvgProps(filled, color, strokeWidth)}>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n <path\n d=\"M19 7.5c-1.333 -3 -3.667 -4.5 -7 -4.5c-5 0 -8 2.5 -8 9s3.5 9 8 9s7 -3 7\n -5s-1 -5 -7 -5c-2.5 0 -3 1.25 -3 2.5c0 1.5 1 2.5 2.5 2.5c2.5 0 3.5 -1.5\n 3.5 -5s-2 -4 -3 -4s-1.833 .333 -2.5 1\"\n ></path>\n </svg>\n </IconWrapper>\n);\n// Example Refactored Icon: MinusIcon without undefined 'padding' prop\nexport const MinusIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false, // Assuming minus can be filled; adjust as needed\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line stroke={color} x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\" />\n </svg>\n </IconWrapper>\n);\n\n// Example Refactored Icon: InfoIcon with accessibility enhancements\nexport const InfoIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper\n widthHeight={widthHeight}\n color={color}\n {...props}\n aria-label=\"Information\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const PlayIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M8 5v14l11-7z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const PauseIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M6 4h4v16H6V4zm8 0h4v16h-4V4z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const HeartIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M20.84 4.61c-1.54-1.56-4.04-1.56-5.59 0l-.7.72-.7-.72a3.95 3.95 0 0 0-5.59 0c-1.56 1.56-1.56 4.09 0 5.66l6.29 6.36 6.29-6.36c1.56-1.56 1.56-4.09 0-5.66z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const StarIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"></polygon>\n </svg>\n </IconWrapper>\n);\n\nexport const SaveIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\"></path>\n <polyline points=\"17 21 17 13 7 13 7 21\"></polyline>\n <polyline points=\"7 3 7 8 15 8\"></polyline>\n </svg>\n </IconWrapper>\n);\n\nexport const WarningIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M10.29 3.86l-6.6 11.4c-.78 1.36.2 3.1 1.71 3.1h13.2c1.51 0 2.49-1.74 1.71-3.1l-6.6-11.4a2 2 0 0 0-3.42 0z\"></path>\n <line stroke={color} x1=\"12\" y1=\"6\" x2=\"12\" y2=\"13\"></line>\n <line stroke={color} x1=\"12\" y1=\"15\" x2=\"12\" y2=\"15\"></line>\n </svg>\n </IconWrapper>\n);\n\nexport const BatteryIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33v15.33C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V5.33C17 4.6 16.4 4 15.67 4z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const BookmarkIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M17 3H7c-1.1 0-2 .9-2 2v16l7-3 7 3V5c0-1.1-.9-2-2-2z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const CloudIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M18 10h-1.26A8 8 0 109 20h9a5 5 0 000-10z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const CopyIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect>\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const DustBinIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const DeleteIcon = DustBinIcon;\n\nexport const EditIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M18.3785 8.44975L8.9636 17.8648C8.6844 18.144 8.3288 18.3343 7.94161 18.4117L4.99988 19.0001L5.58823 16.0583C5.66566 15.6711 5.85597 15.3155 6.13517 15.0363L15.5501 5.62132M18.3785 8.44975L19.7927 7.03553C20.1832 6.64501 20.1832 6.01184 19.7927 5.62132L18.3785 4.20711C17.988 3.81658 17.3548 3.81658 16.9643 4.20711L15.5501 5.62132M18.3785 8.44975L15.5501 5.62132\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const ErrorIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = true,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line\n x1=\"15\"\n y1=\"9\"\n x2=\"9\"\n y2=\"15\"\n stroke={filled ? 'white' : color}\n ></line>\n <line\n x1=\"9\"\n y1=\"9\"\n x2=\"15\"\n y2=\"15\"\n stroke={filled ? 'white' : color}\n ></line>\n </svg>\n </IconWrapper>\n);\n\nexport const DownloadIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const MenuIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line stroke={color} x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"></line>\n <line stroke={color} x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"></line>\n <line stroke={color} x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\"></line>\n </svg>\n </IconWrapper>\n);\n\nexport const ShareIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <circle cx=\"18\" cy=\"5\" r=\"3\"></circle>\n <circle cx=\"6\" cy=\"12\" r=\"3\"></circle>\n <circle cx=\"18\" cy=\"19\" r=\"3\"></circle>\n <line stroke={color} x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\"></line>\n <line stroke={color} x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\"></line>\n </svg>\n </IconWrapper>\n);\n\nexport const RefreshIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <polyline points=\"23 4 23 10 17 10\"></polyline>\n <path d=\"M20.49 15a9 9 0 1 1-2.13-9.36L23 10\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const PrintIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={'currentColor'}\n strokeWidth=\"1\"\n >\n <path d=\"M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const MagicWandIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = true,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n {/* Main wand - thicker and better positioned */}\n <rect\n x=\"-3\"\n y=\"17\"\n width=\"15\"\n height=\"4\"\n rx=\"1\"\n transform=\"rotate(-40 2 13)\"\n />\n\n {/* Star 1 - larger top right */}\n <path d=\"M17 3L18 6L21 7L18 8L17 11L16 8L13 7L16 6L17 3Z\" />\n\n {/* Star 2 - middle size middle right */}\n <path d=\"M21 9L21.7 11L23.5 12L21.7 13L21 15L20.3 13L18.5 12L20.3 11L21 9Z\" />\n\n {/* Star 3 - smaller bottom right */}\n <path d=\"M16 15L16.7 16.5L18 17L16.7 17.5L16 19L15.3 17.5L14 17L15.3 16.5L16 15Z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const SliderVerticalIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line stroke={color} x1=\"4\" y1=\"21\" x2=\"4\" y2=\"14\"></line>\n <line stroke={color} x1=\"4\" y1=\"10\" x2=\"4\" y2=\"3\"></line>\n <line stroke={color} x1=\"12\" y1=\"21\" x2=\"12\" y2=\"12\"></line>\n <line stroke={color} x1=\"12\" y1=\"8\" x2=\"12\" y2=\"3\"></line>\n <line stroke={color} x1=\"20\" y1=\"21\" x2=\"20\" y2=\"16\"></line>\n <line stroke={color} x1=\"20\" y1=\"12\" x2=\"20\" y2=\"3\"></line>\n <line stroke={color} x1=\"1\" y1=\"14\" x2=\"7\" y2=\"14\"></line>\n <line stroke={color} x1=\"9\" y1=\"8\" x2=\"15\" y2=\"8\"></line>\n <line stroke={color} x1=\"17\" y1=\"16\" x2=\"23\" y2=\"16\"></line>\n </svg>\n </IconWrapper>\n);\n\nexport const PanelIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\" />\n <line x1=\"12\" y1=\"7\" x2=\"17\" y2=\"7\" />\n <line x1=\"12\" y1=\"11\" x2=\"17\" y2=\"11\" />\n <line x1=\"12\" y1=\"15\" x2=\"17\" y2=\"15\" />\n </svg>\n </IconWrapper>\n);\nexport const FilterIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M3 4h18l-7 10v5l-4 2v-7L3 4z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const HomeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8h5z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const LocationIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const LockIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n {filled ? (\n <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n ) : (\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"></rect>\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\"></path>\n <circle cx=\"12\" cy=\"16\" r=\"1.5\"></circle>\n </>\n )}\n </svg>\n </IconWrapper>\n);\n\nexport const MicrophoneIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 1a4 4 0 0 0-4 4v6a4 4 0 0 0 8 0V5a4 4 0 0 0-4-4z\"></path>\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"></path>\n <line stroke={color} x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line>\n <line stroke={color} x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"></line>\n </svg>\n </IconWrapper>\n);\n\nexport const MoonIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const NotificationIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M18 8a6 6 0 0 0-12 0c0 7-3 9-3 9h18s-3-2-3-9\"></path>\n <path d=\"M13.73 21a2 2 0 0 1-3.46 0\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const OpenEyeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 4C7 4 2.73 7.11 1 12c1.73 4.89 6 8 11 8s9.27-3.11 11-8c-1.73-4.89-6-8-11-8zm0 12.5c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const ProfileIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n fill={filled ? color : 'none'}\n d=\"M12 13c-2.67 0-8 1.34-8 4v2c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-2c0-2.66-5.33-4-8-4zm0-9c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z M12 2C9.79 2 8 3.79 8 6s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4z M12 13c-2.67 0-8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z\"\n />{' '}\n </svg>\n </IconWrapper>\n);\n\nexport const SettingsIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M19.4 13c0-.3.1-.6.1-1s0-.7-.1-1l2.1-1.6c.2-.2.2-.4.1-.6l-2-3.5c-.1-.2-.4-.3-.6-.2l-2.5 1c-.5-.4-1.1-.7-1.7-.9l-.4-2.6c0-.2-.3-.4-.5-.4h-4c-.2 0-.5.2-.5.4l-.4 2.6c-.6.2-1.2.5-1.7.9l-2.5-1c-.2-.1-.5 0-.6.2l-2 3.5c-.1.2-.1.4.1.6L4.6 11c0 .3-.1.6-.1 1s0 .7.1 1l-2.1 1.6c-.2.2-.2.4-.1.6l2 3.5c.1.2.4.3.6.2l2.5-1c.5.4 1.1.7 1.7.9l.4 2.6c0 .2.3.4.5.4h4c.2 0 .5-.2.5-.4l.4-2.6c.6-.2 1.2-.5 1.7-.9l2.5 1c.2.1.5 0 .6-.2l2-3.5c.1-.2.1-.4-.1-.6L19.4 13zM12 15.5c-1.9 0-3.5-1.6-3.5-3.5s1.6-3.5 3.5-3.5 3.5 1.6 3.5 3.5-1.6 3.5-3.5 3.5z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const SuccessIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const UnLikeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.14.47-.14.73v2c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2zm4 0v12h4V3h-4z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const ClockIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <polyline points=\"12 6 12 12 16 14\"></polyline>\n </svg>\n </IconWrapper>\n);\n\nexport const CameraIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h3l2-3h8l2 3h3a2 2 0 0 1 2 2z\"></path>\n <circle cx=\"12\" cy=\"13\" r=\"4\"></circle>\n </svg>\n </IconWrapper>\n);\n\nexport const BluetoothIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M17.71 7.71L12 2h-1v7.59L6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 11 14.41V22h1l5.71-5.71-4.3-4.29 4.3-4.29zM13 5.83l1.88 1.88L13 9.59V5.83zm1.88 10.46L13 18.17v-3.76l1.88 1.88z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const LikeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-2z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const UnlockIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n {filled ? (\n <path d=\"M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2z\" />\n ) : (\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"></rect>\n <path d=\"M7 11V7a5 5 0 0 1 9.9-1\"></path>\n <circle cx=\"12\" cy=\"16\" r=\"1.5\"></circle>\n </>\n )}\n </svg>\n </IconWrapper>\n);\n\nexport const WifiIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const UploadIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M7 18a4.6 4.4 0 0 1 0 -9a5 4.5 0 0 1 11 2h1a3.5 3.5 0 0 1 0 7h-1\"></path>\n <path d=\"M9 15l3 -3l3 3\"></path>\n <path d=\"M12 12l0 9\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const SearchIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const CloseEyeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n d=\"M19.7071 5.70711C20.0976 5.31658 20.0976 4.68342 19.7071 4.29289C19.3166 3.90237 18.6834 3.90237 18.2929 4.29289L14.032 8.55382C13.4365 8.20193 12.7418 8 12 8C9.79086 8 8 9.79086 8 12C8 12.7418 8.20193 13.4365 8.55382 14.032L4.29289 18.2929C3.90237 18.6834 3.90237 19.3166 4.29289 19.7071C4.68342 20.0976 5.31658 20.0976 5.70711 19.7071L9.96803 15.4462C10.5635 15.7981 11.2582 16 12 16C14.2091 16 16 14.2091 16 12C16 11.2582 15.7981 10.5635 15.4462 9.96803L19.7071 5.70711ZM12.518 10.0677C12.3528 10.0236 12.1792 10 12 10C10.8954 10 10 10.8954 10 12C10 12.1792 10.0236 12.3528 10.0677 12.518L12.518 10.0677ZM11.482 13.9323L13.9323 11.482C13.9764 11.6472 14 11.8208 14 12C14 13.1046 13.1046 14 12 14C11.8208 14 11.6472 13.9764 11.482 13.9323ZM15.7651 4.8207C14.6287 4.32049 13.3675 4 12 4C9.14754 4 6.75717 5.39462 4.99812 6.90595C3.23268 8.42276 2.00757 10.1376 1.46387 10.9698C1.05306 11.5985 1.05306 12.4015 1.46387 13.0302C1.92276 13.7326 2.86706 15.0637 4.21194 16.3739L5.62626 14.9596C4.4555 13.8229 3.61144 12.6531 3.18002 12C3.6904 11.2274 4.77832 9.73158 6.30147 8.42294C7.87402 7.07185 9.81574 6 12 6C12.7719 6 13.5135 6.13385 14.2193 6.36658L15.7651 4.8207ZM12 18C11.2282 18 10.4866 17.8661 9.78083 17.6334L8.23496 19.1793C9.37136 19.6795 10.6326 20 12 20C14.8525 20 17.2429 18.6054 19.002 17.0941C20.7674 15.5772 21.9925 13.8624 22.5362 13.0302C22.947 12.4015 22.947 11.5985 22.5362 10.9698C22.0773 10.2674 21.133 8.93627 19.7881 7.62611L18.3738 9.04043C19.5446 10.1771 20.3887 11.3469 20.8201 12C20.3097 12.7726 19.2218 14.2684 17.6986 15.5771C16.1261 16.9282 14.1843 18 12 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n </IconWrapper>\n);\n\nexport const ExternalLinkIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(true, color, strokeWidth)}\n >\n <path d=\"M14 3h7v7h-2V5.41l-9.29 9.3-1.42-1.42 9.3-9.29H14V3ZM5 5h5v2H6v11h11v-4h2v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1Z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const PlusIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line stroke={color} x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line stroke={color} x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </IconWrapper>\n);\n\nexport const TickIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M5 13l4 4L19 7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </IconWrapper>\n);\n\nexport const BoldArrowIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 4l7 7h-4v7h-6v-7H5l7-7z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const ArrowIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line stroke={color} x1=\"12\" y1=\"20\" x2=\"12\" y2=\"8\"></line>\n <polyline points=\"6 12 12 6 18 12\"></polyline>\n </svg>\n </IconWrapper>\n);\n\nexport const SpinnerIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" strokeOpacity=\"0.25\"></circle>\n <path d=\"M12 2a10 10 0 0 1 10 10\" strokeOpacity=\"1\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const CalendarIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line stroke={color} x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line stroke={color} x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line stroke={color} x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </IconWrapper>\n);\nexport const SliderIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line x1=\"3\" y1=\"4\" x2=\"10\" y2=\"4\" />\n <line x1=\"14\" y1=\"4\" x2=\"21\" y2=\"4\" />\n <line x1=\"3\" y1=\"12\" x2=\"12\" y2=\"12\" />\n <line x1=\"16\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"20\" x2=\"8\" y2=\"20\" />\n <line x1=\"12\" y1=\"20\" x2=\"21\" y2=\"20\" />\n <line x1=\"10\" y1=\"1\" x2=\"10\" y2=\"7\" />\n <line x1=\"16\" y1=\"9\" x2=\"16\" y2=\"15\" />\n <line x1=\"8\" y1=\"17\" x2=\"8\" y2=\"23\" />\n </svg>\n </IconWrapper>\n);\n\nexport const CropIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M6 2v14a2 2 0 0 0 2 2h14\" />\n <path d=\"M18 22V8a2 2 0 0 0-2-2H2\" />\n </svg>\n </IconWrapper>\n);\n\nexport const ZoomInIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n <line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\" />\n <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" />\n </svg>\n </IconWrapper>\n);\n\nexport const ZoomOutIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" />\n </svg>\n </IconWrapper>\n);\n\nexport const TextIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line x1=\"4\" y1=\"6\" x2=\"20\" y2=\"6\" />\n <line x1=\"12\" y1=\"6\" x2=\"12\" y2=\"18\" />\n <line x1=\"8\" y1=\"18\" x2=\"16\" y2=\"18\" />\n </svg>\n </IconWrapper>\n);\n\nexport const ShapeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect x=\"4\" y=\"8\" width=\"8\" height=\"8\" />\n <circle cx=\"16\" cy=\"16\" r=\"4\" />\n <polygon points=\"16,4 19,8 13,8\" />\n </svg>\n </IconWrapper>\n);\n\nexport const RotateIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <polyline points=\"1 4 1 10 7 10\" />\n <path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\" />\n </svg>\n </IconWrapper>\n);\n\nexport const DocumentIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n </IconWrapper>\n);\n\nexport const ChartIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\" />\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\" />\n <polyline points=\"10 9 9 9 8 9\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\" />\n <polyline points=\"10 9 9 9 8 9\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n </svg>\n </IconWrapper>\n);\n","/**\n * Alert View Component\n *\n * Renders an alert with various styles and states according to the design guidelines.\n */\n\nimport React from 'react';\nimport { View, useTheme } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { Vertical } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { WarningIcon, InfoIcon, ErrorIcon, SuccessIcon } from '../../Icon/Icon';\nimport { AlertProps } from './Alert.props';\nimport { getThemes } from './Alert.style';\n\n/**\n * Alert component that displays important messages to users\n */\nexport const AlertView = ({\n icon,\n title,\n views,\n description,\n variant = 'default',\n themeMode: elementMode,\n ...props\n}: AlertProps) => {\n const { themeMode } = useTheme();\n const currentThemeMode = elementMode || themeMode;\n const themes = getThemes(currentThemeMode);\n // Select the appropriate icon based on the variant\n const getIcon = () => {\n if (icon) return icon;\n\n // Use the theme color directly from themes\n const iconColor = views?.icon?.color ?? themes[variant].icon.color;\n\n const iconProps = {\n size: 20,\n color: iconColor,\n };\n\n switch (variant) {\n case 'info':\n return <InfoIcon {...iconProps} />;\n case 'success':\n return <SuccessIcon {...iconProps} />;\n case 'error':\n return <ErrorIcon {...iconProps} />;\n case 'warning':\n default:\n return <WarningIcon {...iconProps} />;\n }\n };\n\n return (\n <Horizontal\n // Layout properties\n gap={12} // 3 × 4px grid\n padding=\"16px\" // 4 × 4px grid\n flexWrap=\"nowrap\"\n alignItems=\"flex-start\"\n // Visual properties\n borderRadius=\"8px\" // Consistent with design system (rounded-md)\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={themes[variant].container.borderColor}\n backgroundColor={themes[variant].container.backgroundColor}\n boxShadow={themes[variant].container.boxShadow}\n // Animation\n transition=\"all 0.2s ease\"\n // Apply custom container styles and any other props\n {...views?.container}\n {...props}\n >\n {/* Icon */}\n <View alignSelf=\"flex-start\" marginTop=\"2px\" {...views?.icon}>\n {getIcon()}\n </View>\n\n {/* Content */}\n <Vertical gap={8}>\n {' '}\n {/* 2 × 4px grid */}\n {/* Title */}\n <Text\n fontSize=\"16px\"\n fontWeight=\"600\" // Semi-bold\n lineHeight=\"24px\"\n color={themes[variant].content.color}\n {...views?.title}\n >\n {title}\n </Text>\n {/* Description */}\n <Text\n fontSize=\"14px\"\n fontWeight=\"400\" // Regular\n lineHeight=\"20px\"\n color={themes[variant].content.color}\n {...views?.description}\n >\n {description}\n </Text>\n </Vertical>\n </Horizontal>\n );\n};\n","/**\n * Alert Styles\n *\n * Defines the styles for the Alert component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Variant } from './Alert.type';\n\n/**\n * Get theme styles for different alert variants based on theme mode\n */\nexport const getThemes = (\n themeMode: string\n): Record<\n Variant,\n { container: ViewProps; content: ViewProps; icon: ViewProps }\n> => {\n return {\n default: {\n container: {\n backgroundColor: 'color.gray.50',\n borderColor: 'color.gray.200',\n boxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n },\n content: {\n color: 'color.gray.700',\n },\n icon: {\n color: 'color.gray.500',\n },\n },\n info: {\n container: {\n backgroundColor: 'color.blue.50',\n borderColor: 'color.blue.200',\n boxShadow: '0 1px 2px rgba(59, 130, 246, 0.05)',\n },\n content: {\n color: 'color.blue.700',\n },\n icon: {\n color: 'color.blue.500',\n },\n },\n success: {\n container: {\n backgroundColor: 'color.green.50',\n borderColor: 'color.green.200',\n boxShadow: '0 1px 2px rgba(34, 197, 94, 0.05)',\n },\n content: {\n color: 'color.green.700',\n },\n icon: {\n color: 'color.green.500',\n },\n },\n error: {\n container: {\n backgroundColor: 'color.red.50',\n borderColor: 'color.red.200',\n boxShadow: '0 1px 2px rgba(239, 68, 68, 0.05)',\n },\n content: {\n color: 'color.red.700',\n },\n icon: {\n color: 'color.red.500',\n },\n },\n warning: {\n container: {\n backgroundColor: 'color.orange.50',\n borderColor: 'color.orange.200',\n boxShadow: '0 1px 2px rgba(249, 115, 22, 0.05)',\n },\n content: {\n color: 'color.orange.700',\n },\n icon: {\n color: 'color.orange.500',\n },\n },\n };\n};\n\n/**\n * Default themes for backward compatibility\n */\nexport const Themes = getThemes('light');\n","import React from 'react';\nimport { View } from 'app-studio';\nimport { Center } from 'app-studio';\nimport { AspectRatioProps } from './AspectRatio.props';\n\n// Declaration of a functional component named AspectRatioView.\nexport const AspectRatioView = ({\n // Set a default aspect ratio of 16:9 if no ratio is provided as a prop.\n ratio = 16 / 9,\n // children prop used to render enclosed components.\n children,\n views,\n // Spread the rest of the props to inherit additional properties.\n ...props\n}: AspectRatioProps) => (\n <Center\n width={'100%'}\n position=\"relative\"\n overflow=\"hidden\"\n paddingTop={`${(1 / ratio) * 100}%`}\n borderRadius={8}\n {...props}\n {...views?.center}\n >\n <View\n position=\"absolute\"\n top={0}\n right={0}\n bottom={0}\n left={0}\n {...views?.view}\n >\n {children}\n </View>\n </Center>\n);\n","/**\n * Avatar Styles\n *\n * Defines the styles for the Avatar component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Size } from './Avatar.type';\n\n/**\n * Avatar sizes following the 4px grid system\n */\nexport const AvatarSizeMap: Record<Size, number> = {\n xs: 24, // 6 × 4px grid\n sm: 32, // 8 × 4px grid\n md: 48, // 12 × 4px grid\n lg: 64, // 16 × 4px grid\n xl: 80, // 20 × 4px grid\n};\n\n/**\n * Default styles for the Avatar component\n */\nexport const DefaultAvatarStyles = {\n container: {\n borderRadius: '50%',\n overflow: 'hidden',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'transparent',\n backgroundColor: 'color.gray.100',\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\n transition: 'all 0.2s ease',\n } as ViewProps,\n fallback: {\n fontWeight: '500', // Medium weight for better readability\n color: 'color.gray.600',\n } as ViewProps,\n image: {\n objectFit: 'cover',\n transition: 'all 0.2s ease',\n } as ViewProps,\n};\n","/**\n * Avatar View Component\n *\n * Renders an avatar with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Text } from '../../Text/Text';\nimport { Center } from 'app-studio';\nimport { Image } from 'app-studio';\nimport { AvatarViewProps } from './Avatar.props';\nimport { AvatarSizeMap, DefaultAvatarStyles } from './Avatar.style';\n// Declaration of the AvatarView functional component with destructured props from AvatarViewProps.\nexport const AvatarView = ({\n src,\n size = 'md',\n fallback = 'IM',\n views,\n imageError,\n setImageError,\n onClick = () => {},\n}: AvatarViewProps) => {\n // Determines the size of the avatar by mapping the size prop to the predefined AvatarSizeMap.\n const avatarSize = AvatarSizeMap[size];\n // Combine default image styles with custom styles\n const imageStyle: any = {\n ...DefaultAvatarStyles.image,\n ...(views?.image || {}),\n };\n // Start of the JSX returned by the AvatarView component, which uses the Center component as its root element.\n return (\n <Center\n role=\"avatar\"\n width={avatarSize}\n height={avatarSize}\n {...DefaultAvatarStyles.container}\n borderColor={imageError ? 'color.gray.400' : 'transparent'}\n onClick={onClick}\n {...views?.container}\n >\n {!imageError ? (\n <Image\n alt=\"IM\"\n src={src}\n style={imageStyle}\n width={avatarSize}\n height={avatarSize}\n onError={() => setImageError(true)}\n />\n ) : (\n <Text\n size={size}\n {...DefaultAvatarStyles.fallback}\n {...views?.fallback}\n >\n {fallback}\n </Text>\n )}\n </Center>\n );\n};\n","/**\n * Badge Styles\n *\n * Defines the styles for the Badge component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Shape, Size, Variant } from './Badge.type';\n\n/**\n * Badge sizes following the 4px grid system\n */\nexport const BadgeSizes: Record<Size, ViewProps> = {\n xs: {\n // Height: 20px (5 × 4px)\n minWidth: '20px',\n height: '20px',\n padding: '0 6px',\n // Typography\n fontSize: '10px', // Smallest text size\n fontWeight: '500', // Medium weight for better readability\n lineHeight: '20px', // Match height for vertical centering\n },\n sm: {\n // Height: 24px (6 × 4px)\n minWidth: '24px',\n height: '24px',\n padding: '0 8px',\n // Typography\n fontSize: '12px', // text-xs\n fontWeight: '500', // Medium weight\n lineHeight: '24px',\n },\n md: {\n // Height: 28px (7 × 4px)\n minWidth: '28px',\n height: '28px',\n padding: '0 10px',\n // Typography\n fontSize: '14px', // text-sm\n fontWeight: '500', // Medium weight\n lineHeight: '28px',\n },\n lg: {\n // Height: 32px (8 × 4px)\n minWidth: '32px',\n height: '32px',\n padding: '0 12px',\n // Typography\n fontSize: '14px', // text-sm\n fontWeight: '500', // Medium weight\n lineHeight: '32px',\n },\n xl: {\n // Height: 36px (9 × 4px)\n minWidth: '36px',\n height: '36px',\n padding: '0 14px',\n // Typography\n fontSize: '16px', // text-md\n fontWeight: '500', // Medium weight\n lineHeight: '36px',\n },\n};\n\n/**\n * Badge shapes with consistent border radius\n */\nexport const BadgeShapes: Record<Shape, number | string> = {\n sharp: 0,\n rounded: '8px', // Consistent with design system (rounded-md)\n pillShaped: '9999px', // Full rounded for pill shape\n};\n\n/**\n * Badge positions for absolute positioning\n */\nexport const PositionStyles: { [key: string]: React.CSSProperties } = {\n 'top-right': { top: '4px', right: '4px', position: 'absolute' }, // 4px offset (1 × 4px grid)\n 'top-left': { top: '4px', left: '4px', position: 'absolute' },\n 'bottom-right': { bottom: '4px', right: '4px', position: 'absolute' },\n 'bottom-left': { bottom: '4px', left: '4px', position: 'absolute' },\n};\n\n/**\n * Get badge variants with consistent styling based on theme mode\n */\nexport const getBadgeVariants = (\n themeMode: string\n): Record<Variant, ViewProps> => {\n return {\n filled: {\n backgroundColor: 'theme.primary',\n color: 'color.white',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'transparent',\n transition: 'all 0.2s ease',\n },\n outline: {\n backgroundColor: 'transparent',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'theme.primary',\n color: 'theme.primary',\n transition: 'all 0.2s ease',\n },\n link: {\n backgroundColor: 'transparent',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'transparent',\n color: 'theme.primary',\n textDecoration: 'underline',\n textUnderlineOffset: '2px',\n transition: 'all 0.2s ease',\n },\n ghost: {\n backgroundColor: 'transparent',\n color: 'color.gray.500',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'transparent',\n transition: 'all 0.2s ease',\n },\n };\n};\n\n/**\n * Default badge variants for backward compatibility\n */\nexport const BadgeVariants = getBadgeVariants('light');\n","/**\n * Badge View Component\n *\n * Renders a badge with various styles and states according to the design guidelines.\n */\n\nimport React from 'react';\nimport { BadgeProps } from './Badge.props';\nimport {\n BadgeShapes,\n BadgeSizes,\n PositionStyles,\n getBadgeVariants,\n} from './Badge.style';\nimport { Center, useTheme } from 'app-studio';\nimport { Text } from '../../Text/Text';\n// No need to import ViewProps as it's not used directly\n/**\n * Badge View Component\n */\nconst BadgeView: React.FC<BadgeProps> = ({\n content,\n position,\n shape = 'pillShaped',\n variant = 'filled',\n size = 'md',\n views,\n themeMode: elementMode,\n ...props\n}) => {\n const { themeMode } = useTheme();\n const currentThemeMode = elementMode || themeMode;\n const variantStyles = getBadgeVariants(currentThemeMode)[variant];\n // Combine styles for the badge\n const combinedStyles: Record<string, any> = {\n // Base styles\n width: 'fit-content',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'color.black',\n\n // Apply shape, size, and variant styles\n borderRadius: BadgeShapes[shape],\n ...BadgeSizes[size],\n ...variantStyles,\n\n // Apply position styles if provided\n ...(position ? PositionStyles[position] : {}),\n\n // Apply custom container styles\n ...views?.container,\n };\n return (\n <Center role=\"badge\" {...combinedStyles} {...props}>\n <Text\n role=\"badgeText\"\n fontWeight=\"500\" // Medium weight for better readability\n textAlign=\"center\"\n {...views?.text}\n color={combinedStyles.color}\n >\n {content || ''}\n </Text>\n </Center>\n );\n};\nexport default BadgeView;\n","import { Size } from './Link.type';\n// Defines a mapping of various size names (from 'xs' to '6xl') to their respective numeric icon sizes, providing a scalable way to reference icon sizes throughout the component.\nexport const IconSizes: Record<Size, number> = {\n xs: 12,\n sm: 14,\n md: 16,\n lg: 18,\n xl: 20,\n};\n","import React from 'react';\nimport { Link as ReactRouterLink } from 'react-router-dom';\nimport { Horizontal } from 'app-studio';\nimport { ExternalLinkIcon } from '../../Icon/Icon';\nimport { LinkViewProps } from './Link.props';\nimport { IconSizes } from './Link.style';\n// Component definition for 'LinkView', a functional component with props defined by 'LinkViewProps'.\nconst LinkView: React.FC<LinkViewProps> = ({\n children,\n // Default href prop set to root '/', used for navigation target.\n to = '/',\n // Default icon size for links, with 'sm' specifying a small-sized icon.\n iconSize = 'sm',\n // Determines the default underline behavior of the link, set to 'default'.\n underline = 'default',\n // State flag indicating whether the link is being hovered over.\n isHovered = false,\n // Boolean indicating if the link leads to an external resource.\n isExternal = false,\n // Custom styles for the icon and text, provided via a styles object.\n views = { icon: {}, text: {} },\n // Setter function for the hover state, noop function provided by default.\n setIsHovered = () => {},\n ...props\n}) => {\n // Function to handle mouse enter/leave events to toggle hover state.\n const handleHover = () => {\n if (underline === 'hover') setIsHovered(true);\n };\n return (\n <ReactRouterLink\n to={to}\n target={isExternal ? '_blank' : '_self'}\n style={{ textDecoration: 'inherit', color: 'inherit' }}\n >\n <Horizontal\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n gap={3}\n alignItems=\"center\"\n flexWrap=\"nowrap\"\n textDecoration={'none'}\n {...views.text}\n {...props}\n >\n {children}\n {isExternal && <ExternalLinkIcon widthHeight={IconSizes[iconSize]} />}\n </Horizontal>\n </ReactRouterLink>\n );\n};\nexport default LinkView;\n","import React from 'react';\nimport { LinkProps } from './Link/Link.props';\nimport { useLinkState } from './Link/Link.state';\nimport LinkView from './Link/Link.view';\n// Defines the 'LinkComponent' as a functional component with props typed to 'LinkProps'\nconst LinkComponent: React.FC<LinkProps> = (props) => {\n // Gets stateful logic and data necessary for the link component via 'useLinkState' hook\n const linkStates = useLinkState();\n // Renders 'LinkView' component passing down link state and props\n return <LinkView {...linkStates} {...props} />;\n};\n// Exports 'LinkComponent' as 'Link' for use in other parts of the application\nexport const Link = LinkComponent;\n","import { useState } from 'react';\n// This function initializes the Link component's state using the useState hook and exposes its state and setter function.\nexport const useLinkState = () => {\n const [isHovered, setIsHovered] = useState(false);\n return { isHovered, setIsHovered };\n};\n","import { Size, Speed } from './Loader.type';\n// Defines a mapping of spinning speed labels to their respective duration in seconds for the Loader component animations.\nexport const DefaultEllipsisSpeeds: Record<Speed, number> = {\n fast: 0.4,\n normal: 0.6,\n slow: 0.8,\n};\n// Sets up a scale of sizes, mapping size labels to numerical values to be used for Loader component dimensions.\nexport const DefaultSizes: Record<Size, number> = {\n xs: 14,\n sm: 18,\n md: 22,\n lg: 26,\n xl: 30,\n};\n// Specifies a mapping of spinning speed labels to numerical millisecond values, determining the speed of the Loader component's animation cycles.\nexport const DefaultSpeeds: Record<Speed, number> = {\n fast: 50,\n normal: 100,\n slow: 300,\n};\n","import React, { useEffect, useState } from 'react';\nimport { useTheme, View, ViewProps } from 'app-studio';\nimport { Center } from 'app-studio';\n\nimport {\n DefaultSpinnerProps,\n DottedProps,\n LoaderProps,\n QuarterProps,\n} from '../Loader/Loader.props';\n\nimport { DefaultSizes, DefaultSpeeds } from './Loader.style';\n\ninterface Props extends LoaderProps {\n views?: {\n container?: ViewProps;\n text?: ViewProps;\n };\n}\n\nconst DefaultSpinner: React.FC<DefaultSpinnerProps> = ({\n size = 'md',\n speed = 'normal',\n color = 'theme.loading',\n themeMode: elementMode,\n ...props\n}) => {\n const { getColor, themeMode } = useTheme();\n const colorStyle = getColor(color, {\n themeMode: elementMode ? elementMode : themeMode,\n });\n const sizeStyle = typeof size === 'number' ? size : DefaultSizes[size];\n\n const [angle, setAngle] = useState(0);\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n setAngle((prevAngle) => prevAngle + 45);\n }, DefaultSpeeds[speed]);\n\n return () => clearInterval(intervalId);\n }, [speed]);\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={`${sizeStyle}px`}\n height={`${sizeStyle}px`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colorStyle}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ transform: `rotate(${angle}deg)` }}\n {...props}\n >\n <g id=\"SVGRepo_bgCarrier\" strokeWidth=\"0\"></g>\n <g\n id=\"SVGRepo_tracerCarrier\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n ></g>\n <g id=\"SVGRepo_iconCarrier\">\n <path d=\"M21 12a9 9 0 11-6.219-8.56\"></path>\n </g>\n </svg>\n );\n};\n\nconst Dotted: React.FC<DottedProps> = ({\n size = 'md',\n speed = 'normal',\n color = 'theme.loading',\n themeMode: elementMode,\n ...props\n}) => {\n const { getColor, themeMode } = useTheme();\n const colorStyle = getColor(color, {\n themeMode: elementMode ? elementMode : themeMode,\n });\n const sizeStyle = typeof size === 'number' ? size : DefaultSizes[size];\n\n const [angle, setAngle] = useState(0);\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n setAngle((prevAngle) => prevAngle + 45);\n }, DefaultSpeeds[speed]);\n\n return () => clearInterval(intervalId);\n }, [speed]);\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 50 50\"\n width={`${sizeStyle}px`}\n height={`${sizeStyle}px`}\n style={{ transform: `rotate(${angle}deg)` }}\n {...props}\n >\n <circle cx=\"10\" cy=\"25\" r=\"4\" fill={colorStyle} />\n <circle cx=\"25\" cy=\"25\" r=\"4\" fill={colorStyle} />\n <circle cx=\"40\" cy=\"25\" r=\"4\" fill={colorStyle} />\n </svg>\n );\n};\n\nconst Quarter: React.FC<QuarterProps> = ({\n size = 'md',\n speed = 'normal',\n color = 'theme.loading',\n themeMode: elementMode,\n ...props\n}) => {\n const { getColor, themeMode } = useTheme();\n const colorStyle = getColor(color, {\n themeMode: elementMode ? elementMode : themeMode,\n });\n const sizeStyle = typeof size === 'number' ? size : DefaultSizes[size];\n\n const [angle, setAngle] = useState(0);\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n setAngle((prevAngle) => prevAngle + 45);\n }, DefaultSpeeds[speed]);\n\n return () => clearInterval(intervalId);\n }, [speed]);\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 50 50\"\n width={`${sizeStyle}px`}\n height={`${sizeStyle}px`}\n style={{ transform: `rotate(${angle}deg)` }}\n {...props}\n >\n <circle\n cx=\"25\"\n cy=\"25\"\n r=\"20\"\n fill=\"none\"\n stroke={colorStyle}\n strokeWidth=\"5\"\n strokeDasharray=\"1,10\"\n />\n </svg>\n );\n};\nconst LoaderView: React.FC<Props> = ({\n size,\n children,\n textColor,\n loaderColor,\n type = 'default',\n speed = 'normal',\n textPosition = 'right',\n views,\n ...props\n}) => {\n const style = { size, speed, color: loaderColor };\n\n const variants = {\n default: <DefaultSpinner {...style} />,\n dotted: <Dotted {...style} />,\n quarter: <Quarter {...style} />,\n };\n\n return (\n <Center\n gap={10}\n flexDirection={\n textPosition === 'top' || textPosition === 'bottom' ? 'column' : 'row'\n }\n {...props}\n {...views?.container}\n >\n {(textPosition === 'left' || textPosition === 'top') && children && (\n <View color={textColor} {...views?.text}>\n {children}\n </View>\n )}\n {variants[type]}\n {(textPosition === 'right' || textPosition === 'bottom') && children && (\n <View color={textColor} {...views?.text}>\n {children}\n </View>\n )}\n </Center>\n );\n};\n\nexport default LoaderView;\n","import React from 'react';\nimport { LoaderProps } from './Loader/Loader.props';\nimport LoaderView from './Loader/Loader.view';\n// Defines a LoaderComponent as a functional component with props defined by LoaderProps and returns the LoaderView component, passing along any received props.\nconst LoaderComponent: React.FC<LoaderProps> = (props) => (\n // Renders the LoaderView component by spreading the received props, which allows for a clean pass-through of properties.\n <LoaderView {...props} />\n);\n// Exports the LoaderComponent as Loader, making it available for use in other parts of the application.\nexport const Loader = LoaderComponent;\n","/**\n * Button Styles\n *\n * Defines the styles for the Button component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Shape, Size, Variant } from './Button.type';\n\n/**\n * Button sizes following the 4px grid system\n */\nexport const ButtonSizes: Record<Size, ViewProps> = {\n xs: {\n // Height: 24px (6 × 4px)\n minHeight: 4 * 4,\n paddingTop: 2,\n paddingBottom: 2,\n paddingLeft: 4,\n paddingRight: 4,\n // Typography\n\n fontSize: 12, // text-xs\n fontWeight: '500', // medium\n lineHeight: 20,\n letterSpacing: '-0.01em',\n },\n sm: {\n // Height: 32px (8 × 4px)\n minHeight: 6 * 4,\n paddingTop: 6,\n paddingBottom: 6,\n paddingLeft: 12,\n paddingRight: 12,\n // Typography\n\n fontSize: 12, // text-sm\n fontWeight: '500', // medium\n lineHeight: 12,\n letterSpacing: '-0.01em',\n },\n md: {\n // Height: 40px (10 × 4px) - standard height for interactive elements\n minHeight: 8 * 4,\n paddingTop: 8,\n paddingBottom: 8,\n paddingLeft: 16,\n paddingRight: 16,\n // Typography\n\n fontSize: 16, // text-sm/md\n fontWeight: '500', // medium\n lineHeight: 16,\n letterSpacing: '-0.01em',\n },\n lg: {\n minHeight: 10 * 4,\n paddingTop: 10,\n paddingBottom: 10,\n paddingLeft: 20,\n paddingRight: 20,\n // Typography\n\n fontSize: 16, // text-md/lg\n fontWeight: '500', // medium\n lineHeight: 20,\n letterSpacing: '-0.01em',\n },\n xl: {\n // Height: 60px (15 × 4px)\n minHeight: 12 * 4,\n paddingTop: 12,\n paddingBottom: 12,\n paddingLeft: 24,\n paddingRight: 24,\n // Typography\n\n fontSize: 18, // text-lg\n fontWeight: '500', // medium\n lineHeight: 24,\n letterSpacing: '-0.01em',\n },\n};\n\n/**\n * Button shapes with consistent border radius\n */\nexport const ButtonShapes: Record<Shape, number | string> = {\n sharp: 0,\n rounded: 8,\n pillShaped: 999, // Full rounded for pill shape\n};\n\n/**\n * Icon sizes for different button sizes\n */\nexport const IconSizes: Record<Size, ViewProps> = {\n xs: {\n width: 16,\n height: 16,\n padding: 6,\n },\n sm: {\n width: 20,\n height: 20,\n padding: 6,\n },\n md: {\n width: 24,\n height: 24,\n padding: 8,\n },\n lg: {\n width: 24,\n height: 24,\n padding: 12,\n },\n xl: {\n width: 28,\n height: 28,\n padding: 14,\n },\n};\n\nexport const getButtonVariants = (\n color: string,\n isLight: boolean\n): Record<Variant, ViewProps> => ({\n filled: {\n backgroundColor: color,\n color: isLight ? 'color.black' : 'color.white',\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: 'transparent',\n _hover: {\n transform: 'translateY(-1px)',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n },\n _active: {\n transform: 'translateY(-1px)',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n },\n transition: 'all 0.2s ease',\n },\n outline: {\n backgroundColor: 'transparent',\n color: color,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: color,\n _hover: {\n backgroundColor: color,\n color: isLight ? 'light.black' : 'light.white',\n transform: 'translateY(-1px)',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n },\n _active: {\n backgroundColor: color,\n color: isLight ? 'light.black' : 'light.white',\n transform: 'translateY(0)',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n },\n transition: 'all 0.2s ease',\n },\n ghost: {\n backgroundColor: 'transparent',\n color: color,\n borderWidth: 0,\n borderStyle: 'none',\n borderColor: 'transparent',\n _hover: {\n backgroundColor: color,\n color: isLight ? 'light.black' : 'light.white',\n transform: 'translateY(-1px)',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n },\n _active: {\n backgroundColor: color,\n color: isLight ? 'light.black' : 'light.white',\n transform: 'translateY(0)',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n },\n transition: 'all 0.2s ease',\n },\n link: {\n backgroundColor: 'transparent',\n color: isLight ? color : 'light.black',\n borderWidth: 0,\n borderStyle: 'none',\n borderColor: 'transparent',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n _hover: {\n textDecorationThickness: '2px',\n },\n _active: { textDecorationThickness: '2px' },\n transition: 'all 0.2s ease',\n },\n});\n","/**\n * ButtonView component – minimal and design‑system aligned.\n * - Chooses a **main color** with priority: `backgroundColor` → `color` → `theme.primary`.\n * - Uses `getButtonVariants` to derive base/hover/active styles per variant.\n */\n\nimport React, { useMemo } from 'react';\nimport { Element, Horizontal, Vertical, View, useTheme } from 'app-studio';\nimport { Link } from '../../Link/Link';\nimport { Loader } from '../../Loader/Loader';\nimport { ButtonProps } from './Button.props';\nimport {\n ButtonSizes,\n ButtonShapes,\n IconSizes,\n getButtonVariants,\n} from './Button.style';\nimport contrast from 'contrast';\n\nconst ButtonView: React.FC<ButtonProps> = ({\n /* behaviour */\n variant = 'filled',\n size = 'md',\n shape = 'rounded',\n iconPosition = 'left',\n loaderPosition = 'left',\n backgroundColor, // primary candidate for main color\n color, // 2nd candidate for main color (NOT text‑color)\n isAuto,\n isFilled,\n isDisabled,\n isLoading,\n isIconRounded,\n /* content */\n icon,\n children,\n /* nav */\n to,\n isExternal,\n /* misc */\n shadow,\n onClick,\n views = {},\n themeMode: elementMode,\n ...props\n}) => {\n /* theme helpers */\n const { getColor, themeMode } = useTheme();\n const mode = elementMode ?? themeMode;\n\n /* MAIN COLOR – determines the entire palette */\n const mainColorKey = backgroundColor ?? color ?? 'theme.primary';\n const mainTone = getColor(isDisabled ? 'theme.disabled' : mainColorKey, {\n themeMode: mode,\n });\n const tone = contrast(mainTone);\n\n /* variant palette */\n const palette = useMemo(\n () => getButtonVariants(mainTone, tone == 'light'),\n [mainTone, tone]\n );\n const base = palette[variant];\n\n /* layout helpers */\n const Wrapper = ['left', 'right'].includes(iconPosition)\n ? Horizontal\n : Vertical;\n const sizeStyles = ButtonSizes[size];\n const iconPad = isIconRounded ? IconSizes[size] : {};\n\n const content = (\n <Wrapper\n gap={8}\n alignItems=\"center\"\n justifyContent=\"center\"\n color={'inherit'}\n _hover={{\n color: 'inherit',\n }}\n {...sizeStyles}\n {...views?.content}\n >\n {isLoading && loaderPosition === 'left' && (\n <Loader\n size={size === 'xs' || size === 'sm' ? 'sm' : 'md'}\n color={'inherit'}\n _hover={{\n color: 'inherit',\n }}\n {...views?.loader}\n />\n )}\n\n {icon && ['left', 'top'].includes(iconPosition) && !isLoading && (\n <View\n color={'inherit'}\n _hover={{\n color: 'inherit',\n }}\n {...views?.icon}\n >\n {icon}\n </View>\n )}\n\n {children}\n\n {icon && ['right', 'bottom'].includes(iconPosition) && !isLoading && (\n <View\n color={'inherit'}\n _hover={{\n color: 'inherit',\n }}\n {...views?.icon}\n >\n {icon}\n </View>\n )}\n\n {isLoading && loaderPosition === 'right' && (\n <Loader\n size={size === 'xs' || size === 'sm' ? 'sm' : 'md'}\n color={'inherit'}\n _hover={{\n color: 'inherit',\n }}\n {...views?.loader}\n />\n )}\n </Wrapper>\n );\n\n return (\n <Element\n as={variant === 'link' && to ? 'div' : 'button'}\n type={variant === 'link' && to ? undefined : 'button'}\n disabled={Boolean(isDisabled || isLoading)}\n /* sizing */\n {...sizeStyles}\n {...iconPad}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n // width={isAuto ? 'fit-content' : isFilled ? '100%' : undefined}\n /* visuals */\n borderRadius={ButtonShapes[shape]}\n boxShadow={shadow}\n transition=\"all 0.2s ease\"\n cursor={isDisabled ? 'default' : 'pointer'}\n onClick={onClick}\n {...base}\n {...views?.container}\n {...props}\n >\n {to ? (\n <Link\n to={to}\n isExternal={isExternal}\n color={'inherit'}\n textDecoration={'inherit'}\n textDecorationColor={'inherit'} // Link underline color matches text color\n {...views?.link}\n >\n {content}\n </Link>\n ) : (\n content\n )}\n </Element>\n );\n};\n\nexport default ButtonView;\n","import React from 'react';\nimport { ButtonProps } from './Button/Button.props';\nimport { useButtonState } from './Button/Button.state';\n// Importing TypeScript type for button properties to ensure the component receives the correct props.\nimport ButtonView from './Button/Button.view';\n// Importing a custom hook to manage the state specific to the button component.\nconst ButtonComponent: React.FC<ButtonProps> = (props: any) => {\n // Importing the view part of the button, which is presumably a presentational component.\n const { isHovered, setIsHovered } = useButtonState();\n // Defining the button component with generic React Functional Component type augmented with ButtonProps type.\n const handleHover = () => setIsHovered(!isHovered);\n // Destructuring the state and state update function from the custom hook for button state management.\n return (\n // Defines a function to toggle the hover state of the button.\n <ButtonView\n isHovered={isHovered}\n // Rendering the ButtonView component and spreading the received props on it.\n setIsHovered={setIsHovered}\n // Passing the isHovered state and the setIsHovered function to the ButtonView.\n onMouseEnter={handleHover}\n // Binding handleHover function to onMouseEnter and onMouseLeave events to toggle hover effect.\n onMouseLeave={handleHover}\n {...props}\n />\n );\n // Exports the Button component for use in other parts of the application.\n};\nexport const Button = ButtonComponent;\n","import React from 'react';\nexport const useButtonState = () => {\n const [isHovered, setIsHovered] = React.useState(false);\n // This custom react hook 'useButtonState' is defined for managing the state of a button, especially for hover interactions.\n return { isHovered, setIsHovered };\n // The 'setIsHovered' function is used to update the value of 'isHovered' state when the hover status of the button changes.\n // A state variable 'isHovered' is declared with its initial value set to 'false', indicating that the button is not hovered by default.\n};\n// The hook returns an object containing 'isHovered' state and the 'setIsHovered' function to enable state management from the consumer component.\n","/**\n * Card Styles\n *\n * Defines the styles for the Card component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { CardStyles, Shape, Size, Variant } from './Card.type';\n\n/**\n * Card sizes following the 4px grid system\n */\nexport const CardSizes: Record<Size, ViewProps> = {\n sm: {\n padding: '12px', // 3 × 4px grid\n },\n md: {\n padding: '16px', // 4 × 4px grid\n },\n lg: {\n padding: '24px', // 6 × 4px grid\n },\n};\n\n/**\n * Card shapes with consistent border radius\n */\nexport const CardShapes: Record<Shape, number | string> = {\n sharp: 0,\n rounded: '8px', // Consistent with design system (rounded-md)\n pillShaped: '16px', // Larger radius for pill-shaped cards\n};\n\n/**\n * Get card variants with consistent styling based on theme mode\n */\nexport const getCardVariants = (\n themeMode: string\n): Record<Variant, ViewProps> => {\n return {\n default: {\n backgroundColor: 'color.white',\n border: 'none',\n transition: 'all 0.2s ease',\n },\n outlined: {\n backgroundColor: 'color.white',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n transition: 'all 0.2s ease',\n _hover: {\n borderColor: 'color.gray.300',\n },\n },\n elevated: {\n backgroundColor: 'color.white',\n boxShadow: '0px 2px 8px rgba(0, 0, 0, 0.08)',\n border: 'none',\n transition: 'all 0.2s ease',\n _hover: {\n boxShadow: '0px 4px 12px rgba(0, 0, 0, 0.12)',\n transform: 'translateY(-2px)',\n },\n },\n };\n};\n\n/**\n * Default card variants (for backward compatibility)\n */\nexport const CardVariants = getCardVariants('light');\n\n/**\n * Function to get default styles for Card components\n * @param theme - Theme object from useTheme hook\n */\nexport const getDefaultCardStyles = (theme: any): CardStyles => {\n return {\n container: {\n backgroundColor: 'color.white',\n color: 'color.black',\n borderRadius: '8px', // Consistent with design system\n overflow: 'hidden',\n transition: 'all 0.2s ease',\n },\n header: {\n padding: '16px', // 4 × 4px grid\n borderBottomWidth: '1px',\n borderBottomStyle: 'solid',\n borderBottomColor: 'color.gray.200',\n color: 'color.black',\n },\n content: {\n padding: '16px', // 4 × 4px grid\n color: 'color.black',\n },\n footer: {\n padding: '16px', // 4 × 4px grid\n borderTopWidth: '1px',\n borderTopStyle: 'solid',\n borderTopColor: 'color.gray.200',\n },\n };\n};\n","import { createContext, useContext } from 'react';\nimport { CardStyles } from './Card.type';\n\nexport interface CardContextValue {\n styles?: CardStyles;\n}\n\nexport const CardContext = createContext<CardContextValue>({});\n\nexport const useCardContext = () => {\n return useContext(CardContext);\n};\n","import React, { useMemo } from 'react';\nimport { View, useTheme } from 'app-studio';\nimport { Vertical } from 'app-studio';\nimport {\n CardProps,\n CardHeaderProps,\n CardContentProps,\n CardFooterProps,\n} from './Card.props';\nimport {\n CardShapes,\n getCardVariants,\n getDefaultCardStyles,\n} from './Card.style';\nimport { CardContext, useCardContext } from './Card.context';\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({\n children,\n views,\n style,\n themeMode: elementMode,\n ...props\n}) => {\n const theme = useTheme();\n const { styles: contextStyles } = useCardContext();\n const defaultStyles = getDefaultCardStyles(theme).header;\n\n // Merge styles: Default < Context Override < Direct Props/Style\n const mergedProps = {\n ...defaultStyles,\n ...contextStyles?.header,\n ...props,\n style: {\n ...defaultStyles?.style,\n ...contextStyles?.header?.style,\n ...style,\n },\n };\n\n return <View {...mergedProps}>{children}</View>;\n};\n\nexport const CardContent: React.FC<CardContentProps> = ({\n children,\n views,\n style,\n themeMode: elementMode,\n ...props\n}) => {\n const theme = useTheme();\n const { styles: contextStyles } = useCardContext();\n const defaultStyles = getDefaultCardStyles(theme).content;\n\n // Merge styles: Default < Context Override < Direct Props/Style\n const mergedProps = {\n ...defaultStyles,\n ...contextStyles?.content,\n ...props,\n style: {\n ...defaultStyles?.style,\n ...contextStyles?.content?.style,\n ...style,\n },\n };\n\n return <View {...mergedProps}>{children}</View>;\n};\n\nexport const CardFooter: React.FC<CardFooterProps> = ({\n children,\n views,\n style,\n themeMode: elementMode,\n ...props\n}) => {\n const theme = useTheme();\n const { styles: contextStyles } = useCardContext();\n const defaultStyles = getDefaultCardStyles(theme).footer;\n\n // Merge styles: Default < Context Override < Direct Props/Style\n const mergedProps = {\n ...defaultStyles,\n ...contextStyles?.footer,\n ...props,\n style: {\n ...defaultStyles?.style,\n ...contextStyles?.footer?.style,\n ...style,\n },\n };\n\n return <View {...mergedProps}>{children}</View>;\n};\n\nexport const CardView: React.FC<CardProps> = ({\n variant = 'default',\n size = 'md',\n shape = 'rounded',\n children,\n header,\n footer,\n isFullWidth = false,\n views,\n style,\n themeMode: elementMode,\n ...props\n}) => {\n const theme = useTheme();\n const defaultStyles = getDefaultCardStyles(theme);\n\n // Prepare context value, merging default styles with user's `views` overrides\n const contextValue = useMemo(\n () => ({\n styles: {\n container: { ...defaultStyles.container, ...views?.container },\n header: { ...defaultStyles.header, ...views?.header },\n content: { ...defaultStyles.content, ...views?.content },\n footer: { ...defaultStyles.footer, ...views?.footer },\n },\n }),\n [defaultStyles, views]\n );\n\n // Determine if we have explicit Card.Header, Card.Content, Card.Footer components\n // or if we need to wrap children in a default layout\n const hasExplicitStructure = React.Children.toArray(children).some(\n (child) =>\n React.isValidElement(child) &&\n (child.type === CardHeader ||\n child.type === CardContent ||\n child.type === CardFooter)\n );\n\n // Get the appropriate variant styles based on theme mode\n const { themeMode } = theme;\n const currentThemeMode = elementMode || themeMode;\n const variantStyles = getCardVariants(currentThemeMode)[variant];\n\n // Merge styles for the root element\n const mergedRootProps = {\n width: isFullWidth ? '100%' : 'auto',\n borderRadius: CardShapes[shape],\n overflow: 'hidden',\n ...variantStyles,\n ...contextValue.styles.container,\n ...props,\n style: { ...contextValue.styles.container?.style, ...style },\n };\n\n return (\n <CardContext.Provider value={contextValue}>\n <View {...mergedRootProps}>\n {hasExplicitStructure ? (\n children\n ) : (\n <Vertical>\n {header && <CardHeader>{header}</CardHeader>}\n <CardContent>{children}</CardContent>\n {footer && <CardFooter>{footer}</CardFooter>}\n </Vertical>\n )}\n </View>\n </CardContext.Provider>\n );\n};\n","import React from 'react';\nimport { CardProps, CardType } from './Card/Card.props';\nimport {\n CardView,\n CardHeader,\n CardContent,\n CardFooter,\n} from './Card/Card.view';\n\n/**\n * Card component for displaying content in a contained, styled box.\n * Can be used with Card.Header, Card.Content, and Card.Footer for structured layout,\n * or with direct children for simpler usage.\n */\nconst CardComponent: React.FC<CardProps> = (props) => {\n return <CardView {...props} />;\n};\n\nexport const Card = CardComponent as CardType;\n\n// Assign the sub-components to the main component\nCard.Header = CardHeader;\nCard.Content = CardContent;\nCard.Footer = CardFooter;\n","import { useState, useEffect, useCallback, useRef, useMemo } from 'react';\nimport { generateId } from '../../../utils/id';\n\nexport interface CarouselStateProps {\n defaultActiveIndex?: number;\n activeIndex?: number;\n onChange?: (index: number) => void;\n autoPlay?: boolean;\n autoPlayInterval?: number;\n pauseOnHover?: boolean;\n infinite?: boolean;\n totalSlides?: number; // Optional for compound component pattern\n stepIndices?: number[]; // Optional specific indices to navigate to\n}\n\nexport const useCarouselState = ({\n defaultActiveIndex = 0,\n activeIndex: controlledActiveIndex,\n onChange,\n autoPlay = false,\n autoPlayInterval = 3000,\n pauseOnHover = true,\n infinite = true,\n totalSlides: initialTotalSlides,\n stepIndices,\n}: CarouselStateProps) => {\n // For compound component pattern: track slides dynamically\n const slideCountRef = useRef<number>(initialTotalSlides || 0);\n const [totalSlides, setTotalSlides] = useState(initialTotalSlides || 0);\n const slideRegistry = useRef<Set<number>>(new Set());\n const nextSlideId = useRef<number>(0);\n const contentId = useMemo(() => generateId('carousel-content'), []);\n const [activeIndex, setActiveIndex] = useState(\n controlledActiveIndex !== undefined\n ? controlledActiveIndex\n : defaultActiveIndex\n );\n const [isHovered, setIsHovered] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [dragStartX, setDragStartX] = useState(0);\n const [dragStartY, setDragStartY] = useState(0);\n const autoPlayTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n // Update internal state when controlled activeIndex changes\n useEffect(() => {\n if (controlledActiveIndex !== undefined) {\n setActiveIndex(controlledActiveIndex);\n }\n }, [controlledActiveIndex]);\n\n // Handle slide change\n const goToSlide = useCallback(\n (index: number) => {\n let newIndex = index;\n\n // Handle infinite looping\n if (infinite) {\n if (index < 0) {\n newIndex = totalSlides - 1;\n } else if (index >= totalSlides) {\n newIndex = 0;\n }\n } else {\n // Clamp index to valid range\n newIndex = Math.max(0, Math.min(index, totalSlides - 1));\n }\n\n // If stepIndices is provided, find the closest allowed index\n if (stepIndices && stepIndices.length > 0) {\n // If the exact index is in stepIndices, use it\n if (stepIndices.includes(newIndex)) {\n // Index is already valid\n } else {\n // Find the closest step index\n const closestIndex = stepIndices.reduce((prev, curr) => {\n return Math.abs(curr - newIndex) < Math.abs(prev - newIndex)\n ? curr\n : prev;\n });\n newIndex = closestIndex;\n }\n }\n\n if (controlledActiveIndex === undefined) {\n setActiveIndex(newIndex);\n }\n\n if (onChange) {\n onChange(newIndex);\n }\n },\n [controlledActiveIndex, infinite, onChange, totalSlides]\n );\n\n // Go to next slide\n const nextSlide = useCallback(() => {\n goToSlide(activeIndex + 1);\n }, [activeIndex, goToSlide]);\n\n // Go to previous slide\n const prevSlide = useCallback(() => {\n goToSlide(activeIndex - 1);\n }, [activeIndex, goToSlide]);\n\n // Handle auto-play\n useEffect(() => {\n if (autoPlay && !isHovered && !isDragging) {\n autoPlayTimerRef.current = setInterval(() => {\n nextSlide();\n }, autoPlayInterval);\n }\n\n return () => {\n if (autoPlayTimerRef.current) {\n clearInterval(autoPlayTimerRef.current);\n }\n };\n }, [\n autoPlay,\n autoPlayInterval,\n isHovered,\n isDragging,\n nextSlide,\n pauseOnHover,\n ]);\n\n // Handle mouse enter/leave for pause on hover\n const handleMouseEnter = useCallback(() => {\n if (pauseOnHover) {\n setIsHovered(true);\n }\n }, [pauseOnHover]);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n // Handle drag interactions\n const handleDragStart = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n setIsDragging(true);\n\n if ('touches' in e) {\n setDragStartX(e.touches[0].clientX);\n setDragStartY(e.touches[0].clientY);\n } else {\n setDragStartX(e.clientX);\n setDragStartY(e.clientY);\n }\n },\n []\n );\n\n const handleDragMove = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n if (!isDragging) return;\n\n let currentX: number;\n let currentY: number;\n\n if ('touches' in e) {\n currentX = e.touches[0].clientX;\n currentY = e.touches[0].clientY;\n } else {\n currentX = e.clientX;\n currentY = e.clientY;\n }\n\n const diffX = currentX - dragStartX;\n const diffY = currentY - dragStartY;\n\n // Determine if horizontal drag is more significant than vertical\n if (Math.abs(diffX) > Math.abs(diffY) && Math.abs(diffX) > 50) {\n if (diffX > 0) {\n prevSlide();\n } else {\n nextSlide();\n }\n setIsDragging(false);\n }\n },\n [isDragging, dragStartX, dragStartY, nextSlide, prevSlide]\n );\n\n const handleDragEnd = useCallback(() => {\n setIsDragging(false);\n }, []);\n\n // For compound component pattern: register/unregister slides\n const registerSlide = useCallback(() => {\n const id = nextSlideId.current++;\n slideRegistry.current.add(id);\n const newCount = slideRegistry.current.size;\n slideCountRef.current = newCount;\n setTotalSlides(newCount);\n return id;\n }, []);\n\n const unregisterSlide = useCallback(\n (id: number) => {\n slideRegistry.current.delete(id);\n const newCount = slideRegistry.current.size;\n slideCountRef.current = newCount;\n setTotalSlides(newCount);\n\n // Adjust currentIndex if it becomes invalid due to slide removal\n if (newCount > 0 && activeIndex >= newCount) {\n const newIndex = Math.max(0, newCount - 1);\n if (controlledActiveIndex === undefined) {\n setActiveIndex(newIndex);\n }\n if (onChange) {\n onChange(newIndex);\n }\n }\n },\n [activeIndex, controlledActiveIndex, onChange]\n );\n\n // Calculate if we can navigate\n const canGoPrevious = infinite || activeIndex > 0;\n const canGoNext = infinite || activeIndex < totalSlides - 1;\n\n return {\n activeIndex,\n totalSlides,\n goToSlide,\n nextSlide,\n prevSlide,\n canGoNext,\n canGoPrevious,\n handleMouseEnter,\n handleMouseLeave,\n handleDragStart,\n handleDragMove,\n handleDragEnd,\n registerSlide,\n unregisterSlide,\n contentId,\n infinite,\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { IndicatorVariant, CarouselStyles } from './Carousel.type';\n\nexport const IndicatorStyles: Record<IndicatorVariant, ViewProps> = {\n dot: {\n width: '10px',\n height: '10px',\n borderRadius: '50%',\n backgroundColor: 'color.gray.300',\n margin: '0 4px',\n cursor: 'pointer',\n transition: 'background-color 0.3s ease',\n },\n line: {\n width: '20px',\n height: '4px',\n borderRadius: '2px',\n backgroundColor: 'color.gray.300',\n margin: '0 4px',\n cursor: 'pointer',\n transition: 'background-color 0.3s ease',\n },\n number: {\n minWidth: '24px',\n height: '24px',\n borderRadius: '50%',\n backgroundColor: 'color.gray.300',\n margin: '0 4px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '12px',\n transition: 'background-color 0.3s ease',\n },\n};\n\nexport const ActiveIndicatorStyles: Record<IndicatorVariant, ViewProps> = {\n dot: {\n backgroundColor: 'theme.primary',\n },\n line: {\n backgroundColor: 'theme.primary',\n },\n number: {\n backgroundColor: 'theme.primary',\n color: 'color.white',\n },\n};\n\nexport const NavigationButtonStyles: ViewProps = {\n width: '40px',\n height: '40px',\n borderRadius: '50%',\n backgroundColor: 'color.white',\n color: 'color.gray.800',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n boxShadow: '0 2px 5px rgba(0, 0, 0, 0.1)',\n zIndex: 1,\n transition: 'background-color 0.3s ease',\n _hover: {\n backgroundColor: 'color.gray.100',\n },\n};\n\n// Default styles for the compound component pattern\nexport const getDefaultCarouselStyles = (): CarouselStyles => ({\n container: {\n position: 'relative', // Needed for absolute positioning of controls\n overflow: 'hidden', // Clip the content\n },\n content: {\n overflow: 'hidden', // Outer container clips the inner flex container\n width: '100%',\n height: '100%',\n },\n innerContainer: {\n display: 'flex',\n // Basic transition for the slide effect\n transitionProperty: 'transform',\n transitionDuration: '300ms', // Adjust duration as needed\n transitionTimingFunction: 'ease-in-out',\n height: '100%',\n },\n item: {\n flex: '0 0 100%', // Each item takes full width of the content container\n minWidth: 0, // Prevent flex items from expanding based on content\n position: 'relative', // For potential content positioning within the slide\n height: '100%',\n },\n prevButton: {\n position: 'absolute',\n top: '50%',\n left: '16px', // Position from left edge\n transform: 'translateY(-50%)', // Vertically center\n zIndex: 10, // Ensure button is above slides\n ...NavigationButtonStyles,\n },\n nextButton: {\n position: 'absolute',\n top: '50%',\n right: '16px', // Position from right edge\n transform: 'translateY(-50%)', // Vertically center\n zIndex: 10,\n ...NavigationButtonStyles,\n },\n});\n","import { createContext, useContext } from 'react';\nimport { CarouselContextValue } from './Carousel.type';\n\nexport const CarouselContext = createContext<CarouselContextValue | null>(null);\n\nexport const useCarouselContext = () => {\n const context = useContext(CarouselContext);\n if (!context) {\n throw new Error(\n 'Carousel compound components must be used within <Carousel>'\n );\n }\n return context;\n};\n","import React, { useMemo, useEffect, useRef } from 'react';\nimport { View } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Button } from '../../Button/Button';\nimport { ChevronIcon } from '../../Icon/Icon';\nimport {\n CarouselProps,\n CarouselSlideProps,\n CarouselContentProps,\n CarouselItemProps,\n CarouselPreviousProps,\n CarouselNextProps,\n} from './Carousel.props';\nimport { useCarouselState } from './Carousel.state';\nimport {\n IndicatorStyles,\n ActiveIndicatorStyles,\n NavigationButtonStyles,\n getDefaultCarouselStyles,\n} from './Carousel.style';\nimport { CarouselContext, useCarouselContext } from './Carousel.context';\n\nexport const CarouselSlide: React.FC<CarouselSlideProps> = ({\n children,\n isActive,\n views,\n ...props\n}) => {\n return (\n <View\n flexShrink={0}\n width=\"100%\"\n height=\"100%\"\n display={isActive ? 'block' : 'none'}\n {...views}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// --- New Compound Components ---\n\n// CarouselPrevious component\nexport const CarouselPreviousComponent: React.FC<CarouselPreviousProps> = ({\n views,\n children, // Allow custom content/icon\n ...props // Spread remaining ButtonProps\n}) => {\n const {\n goToPrevious,\n canGoPrevious,\n styles: globalStyles,\n } = useCarouselContext();\n const defaultStyles = getDefaultCarouselStyles().prevButton;\n const mergedStyles = {\n ...defaultStyles,\n ...globalStyles?.prevButton,\n ...views?.prevButton,\n };\n\n return (\n <Button\n aria-label=\"Previous slide\"\n onClick={() => goToPrevious()}\n isDisabled={!canGoPrevious}\n {...(mergedStyles as any)} // Apply styles\n {...props} // Spread user props\n >\n {children ?? <ChevronIcon orientation=\"left\" widthHeight={16} />}\n </Button>\n );\n};\n\n// CarouselNext component\nexport const CarouselNextComponent: React.FC<CarouselNextProps> = ({\n views,\n children,\n ...props\n}) => {\n const { goToNext, canGoNext, styles: globalStyles } = useCarouselContext();\n const defaultStyles = getDefaultCarouselStyles().nextButton;\n const mergedStyles = {\n ...defaultStyles,\n ...globalStyles?.nextButton,\n ...views?.nextButton,\n };\n\n return (\n <Button\n aria-label=\"Next slide\"\n onClick={() => goToNext()}\n isDisabled={!canGoNext}\n {...(mergedStyles as any)}\n {...props}\n >\n {children ?? <ChevronIcon orientation=\"right\" widthHeight={16} />}\n </Button>\n );\n};\n\n// CarouselItem component\nexport const CarouselItemComponent: React.FC<CarouselItemProps> = ({\n children,\n views,\n ...props\n}) => {\n const {\n registerSlide,\n unregisterSlide,\n styles: globalStyles,\n } = useCarouselContext();\n const slideIdRef = useRef<number | null>(null);\n\n // Register/unregister slide on mount/unmount\n useEffect(() => {\n const id = registerSlide();\n slideIdRef.current = id;\n return () => {\n if (slideIdRef.current !== null) {\n unregisterSlide(slideIdRef.current);\n }\n };\n }, [registerSlide, unregisterSlide]);\n\n const defaultStyles = getDefaultCarouselStyles().item;\n const mergedStyles = {\n ...defaultStyles,\n ...globalStyles?.item,\n ...views?.item,\n };\n\n return (\n <View\n role=\"group\"\n aria-roledescription=\"slide\"\n {...mergedStyles}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// CarouselContent component\nexport const CarouselContentComponent: React.FC<CarouselContentProps> = ({\n children,\n views,\n style, // User style for outer container\n ...props // User props for outer container\n}) => {\n const {\n currentIndex,\n styles: globalStyles,\n contentId,\n } = useCarouselContext();\n const defaultStyles = getDefaultCarouselStyles();\n\n const mergedContentStyles = {\n ...defaultStyles.content,\n ...globalStyles?.content,\n ...views?.content,\n };\n const mergedInnerStyles = {\n ...defaultStyles.innerContainer,\n ...globalStyles?.innerContainer,\n ...views?.innerContainer,\n };\n\n // Calculate the translation based on the current index\n const translateX = `-${currentIndex * 100}%`;\n\n return (\n // Outer container for overflow: hidden\n <View\n {...mergedContentStyles}\n {...props} // Spread user props onto outer container\n style={{ ...mergedContentStyles?.style, ...style }}\n id={contentId}\n aria-live=\"polite\" // Announce slide changes politely\n >\n {/* Inner container that moves */}\n <View\n {...mergedInnerStyles}\n style={{\n ...mergedInnerStyles?.style,\n transform: `translateX(${translateX})`,\n }}\n >\n {children}\n </View>\n </View>\n );\n};\n\n// --- Legacy View Component ---\n\nexport const CarouselView: React.FC<CarouselProps> = ({\n children,\n defaultActiveIndex = 0,\n activeIndex: controlledActiveIndex,\n onChange,\n showNavigation = true,\n navigationPosition = 'inside',\n prevButton,\n nextButton,\n showIndicators = true,\n indicatorPosition = 'bottom',\n indicatorVariant = 'dot',\n autoPlay = false,\n autoPlayInterval = 3000,\n pauseOnHover = true,\n infinite = true,\n direction = 'horizontal',\n transitionDuration = 300,\n views,\n stepIndices,\n themeMode: elementMode,\n ...props\n}) => {\n // Convert children to array if it's not already\n const slides = useMemo(() => {\n return React.Children.toArray(children);\n }, [children]);\n\n // Use carousel state hook\n const carouselState = useCarouselState({\n defaultActiveIndex,\n activeIndex: controlledActiveIndex,\n onChange,\n autoPlay,\n autoPlayInterval,\n pauseOnHover,\n infinite,\n totalSlides: slides.length,\n });\n\n const {\n activeIndex,\n totalSlides,\n goToSlide,\n nextSlide,\n prevSlide,\n handleMouseEnter,\n handleMouseLeave,\n handleDragStart,\n handleDragMove,\n handleDragEnd,\n } = carouselState;\n\n // Prepare base styles for context\n // const baseStyles = getDefaultCarouselStyles();\n\n // Render navigation buttons\n const renderNavigation = () => {\n if (!showNavigation) return null;\n\n const prevButtonElement = prevButton || (\n <View\n as=\"button\"\n aria-label=\"Previous slide\"\n {...NavigationButtonStyles}\n {...views?.prevButton}\n >\n ❮\n </View>\n );\n\n const nextButtonElement = nextButton || (\n <View\n as=\"button\"\n aria-label=\"Next slide\"\n {...NavigationButtonStyles}\n {...views?.nextButton}\n >\n ❯\n </View>\n );\n\n return (\n <>\n <View\n position=\"absolute\"\n top=\"50%\"\n transform=\"translateY(-50%)\"\n left={navigationPosition === 'inside' ? '10px' : '-40px'}\n onClick={prevSlide}\n cursor={!infinite && activeIndex === 0 ? 'not-allowed' : 'pointer'}\n opacity={!infinite && activeIndex === 0 ? 0.5 : 1}\n >\n {prevButtonElement}\n </View>\n <View\n position=\"absolute\"\n top=\"50%\"\n transform=\"translateY(-50%)\"\n right={navigationPosition === 'inside' ? '10px' : '-40px'}\n onClick={nextSlide}\n cursor={\n !infinite && activeIndex === slides.length - 1\n ? 'not-allowed'\n : 'pointer'\n }\n opacity={!infinite && activeIndex === slides.length - 1 ? 0.5 : 1}\n >\n {nextButtonElement}\n </View>\n </>\n );\n };\n\n // Render indicators\n const renderIndicators = () => {\n if (!showIndicators) return null;\n\n return (\n <Horizontal\n position=\"absolute\"\n left=\"0\"\n right=\"0\"\n justifyContent=\"center\"\n {...(indicatorPosition === 'top'\n ? { top: '10px' }\n : { bottom: '10px' })}\n {...views?.indicators}\n >\n {slides.map((_, index) => (\n <View\n key={index}\n onClick={() => goToSlide(index)}\n cursor=\"pointer\"\n {...IndicatorStyles[indicatorVariant]}\n {...(index === activeIndex\n ? { ...ActiveIndicatorStyles[indicatorVariant] }\n : {})}\n {...views?.indicator}\n {...(index === activeIndex ? views?.activeIndicator : {})}\n >\n {indicatorVariant === 'number' && index + 1}\n </View>\n ))}\n </Horizontal>\n );\n };\n\n // Check if children are using the compound component pattern\n const hasCompoundComponents = useMemo(() => {\n return React.Children.toArray(children).some(\n (child) =>\n React.isValidElement(child) &&\n (child.type === CarouselContentComponent ||\n child.type === CarouselItemComponent ||\n child.type === CarouselPreviousComponent ||\n child.type === CarouselNextComponent)\n );\n }, [children]);\n\n // If using compound components, render with context provider\n if (hasCompoundComponents) {\n return (\n <CarouselContext.Provider\n value={{\n currentIndex: activeIndex,\n totalSlides,\n goToSlide,\n goToNext: nextSlide,\n goToPrevious: prevSlide,\n canGoNext: carouselState.canGoNext,\n canGoPrevious: carouselState.canGoPrevious,\n registerSlide: carouselState.registerSlide,\n unregisterSlide: carouselState.unregisterSlide,\n styles: {\n ...getDefaultCarouselStyles(),\n ...views,\n },\n contentId: carouselState.contentId,\n infinite,\n }}\n >\n <View\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label=\"Carousel\"\n position=\"relative\"\n width=\"100%\"\n height=\"100%\"\n overflow=\"hidden\"\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n </CarouselContext.Provider>\n );\n }\n\n // Legacy rendering\n return (\n <View\n position=\"relative\"\n width=\"100%\"\n height=\"100%\"\n overflow=\"hidden\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onTouchStart={handleDragStart}\n onTouchMove={handleDragMove}\n onTouchEnd={handleDragEnd}\n onMouseDown={handleDragStart}\n onMouseMove={handleDragMove}\n onMouseUp={handleDragEnd}\n {...views?.container}\n {...props}\n >\n <View\n width=\"100%\"\n height=\"100%\"\n position=\"relative\"\n {...views?.slideWrapper}\n >\n {slides.map((slide, index) => (\n <CarouselSlide\n key={index}\n isActive={index === activeIndex}\n index={index}\n views={views?.slide}\n >\n {slide}\n </CarouselSlide>\n ))}\n </View>\n\n {renderNavigation()}\n {renderIndicators()}\n </View>\n );\n};\n","import React from 'react';\nimport { CarouselProps, CarouselType } from './Carousel/Carousel.props';\nimport {\n CarouselView,\n CarouselSlide,\n CarouselContentComponent,\n CarouselItemComponent,\n CarouselPreviousComponent,\n CarouselNextComponent,\n} from './Carousel/Carousel.view';\n\n/**\n * Carousel component for displaying a series of content items that can be navigated through.\n * Supports navigation controls, indicators, auto-play, and touch/mouse interactions.\n *\n * Can be used in two ways:\n * 1. Traditional approach with direct children as slides\n * 2. Compound component pattern with Carousel.Content, Carousel.Item, Carousel.Previous, and Carousel.Next\n */\nconst CarouselComponent: React.FC<CarouselProps> = (props) => {\n return <CarouselView {...props} />;\n};\n\nexport const Carousel = CarouselComponent as CarouselType;\n\n// Assign the sub-components to the main component\nCarousel.Slide = CarouselSlide; // Legacy approach\nCarousel.Content = CarouselContentComponent; // Compound component pattern\nCarousel.Item = CarouselItemComponent; // Compound component pattern\nCarousel.Previous = CarouselPreviousComponent; // Compound component pattern\nCarousel.Next = CarouselNextComponent; // Compound component pattern\n","/**\n * Chart Colors\n *\n * Defines a consistent color scheme for all chart examples.\n * These colors should be used in the same order across all chart types\n * to ensure consistency between the charts and their legends.\n */\n\nexport const CHART_COLORS = {\n // Primary colors for all charts\n blue: 'color.blue.500',\n green: 'color.green.500',\n purple: 'color.purple.500',\n orange: 'color.orange.500',\n red: 'color.red.500',\n\n // Additional colors if needed\n teal: 'color.teal.500',\n pink: 'color.pink.500',\n indigo: 'color.indigo.500',\n yellow: 'color.yellow.500',\n cyan: 'color.cyan.500',\n};\n\n// Default color array for consistent ordering\nexport const DEFAULT_CHART_COLORS = [\n CHART_COLORS.blue,\n CHART_COLORS.green,\n CHART_COLORS.purple,\n CHART_COLORS.orange,\n CHART_COLORS.red,\n CHART_COLORS.teal,\n CHART_COLORS.pink,\n CHART_COLORS.indigo,\n CHART_COLORS.yellow,\n CHART_COLORS.cyan,\n];\n","import { ViewProps } from 'app-studio';\nimport { DEFAULT_CHART_COLORS } from './ChartColors';\n\n// Default colors for chart series\nexport const DEFAULT_COLORS = DEFAULT_CHART_COLORS;\n\n// Default styles for chart container\nexport const ChartContainerStyles: ViewProps = {\n width: '100%',\n height: '100%',\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n};\n\n// Default styles for chart title\nexport const ChartTitleStyles: ViewProps = {\n fontSize: '18px',\n fontWeight: 'bold',\n marginBottom: '16px',\n textAlign: 'center',\n};\n\n// Default styles for chart legend\nexport const ChartLegendStyles: ViewProps = {\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'center',\n marginTop: '16px',\n};\n\n// Default styles for legend items\nexport const LegendItemStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n marginRight: '16px',\n marginBottom: '8px',\n};\n\n// Default styles for legend color indicator\nexport const LegendColorStyles: ViewProps = {\n width: '12px',\n height: '12px',\n borderRadius: '2px',\n marginRight: '6px',\n};\n\n// Default styles for legend text\nexport const LegendTextStyles: ViewProps = {\n fontSize: '14px',\n};\n\n// Default styles for tooltip\nexport const TooltipStyles: ViewProps = {\n position: 'absolute',\n backgroundColor: 'color.white',\n padding: '8px 12px',\n borderRadius: '4px',\n boxShadow: '0 2px 5px rgba(0, 0, 0, 0.1)',\n fontSize: '14px',\n pointerEvents: 'none',\n zIndex: 10,\n};\n\n// Default styles for chart grid\nexport const GridStyles: ViewProps = {\n stroke: 'color.gray.200',\n strokeWidth: '1px',\n};\n\n// Default styles for chart axis\nexport const AxisStyles: ViewProps = {\n stroke: 'color.gray.300',\n strokeWidth: '1px',\n};\n\n// Default styles for axis labels\nexport const AxisLabelStyles: ViewProps = {\n fontSize: '12px',\n fill: 'color.gray.600',\n};\n\n// Default styles for bar chart bars\nexport const BarStyles: ViewProps = {\n rx: '2px',\n ry: '2px',\n cursor: 'pointer',\n transition: 'opacity 0.2s ease',\n _hover: {\n opacity: 0.8,\n },\n};\n\n// Default styles for line chart lines\nexport const LineStyles: ViewProps = {\n strokeWidth: '2px',\n fill: 'none',\n};\n\n// Default styles for line chart points\nexport const PointStyles: ViewProps = {\n r: '4px',\n strokeWidth: '2px',\n stroke: 'white',\n cursor: 'pointer',\n transition: 'r 0.2s ease',\n};\n\n// Default styles for pie chart slices\nexport const PieSliceStyles: ViewProps = {\n strokeWidth: '1px',\n stroke: 'white',\n cursor: 'pointer',\n transition: 'opacity 0.2s ease',\n _hover: {\n opacity: 0.8,\n },\n};\n\n// Default styles for overlay base (shared by loading, error, no data)\nexport const OverlayBaseStyles: ViewProps = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(255, 255, 255, 0.8)',\n borderRadius: '4px',\n zIndex: 10,\n padding: '16px',\n textAlign: 'center',\n};\n\n// Default styles for loading overlay\nexport const LoadingOverlayStyles: ViewProps = {\n ...OverlayBaseStyles,\n};\n\n// Default styles for error overlay\nexport const ErrorOverlayStyles: ViewProps = {\n ...OverlayBaseStyles,\n backgroundColor: 'rgba(255, 235, 238, 0.9)',\n color: 'color.red.700',\n};\n\n// Default styles for no data overlay\nexport const NoDataOverlayStyles: ViewProps = {\n ...OverlayBaseStyles,\n backgroundColor: 'rgba(245, 245, 245, 0.8)',\n color: 'color.gray.600',\n};\n","import React, { useMemo } from 'react';\nimport { useTheme } from 'app-studio';\nimport { ChartData } from './Chart.type';\nimport {\n BarStyles,\n AxisStyles,\n AxisLabelStyles,\n GridStyles,\n} from './Chart.style';\n\ninterface BarChartProps {\n data: ChartData;\n width: number;\n height: number;\n animationProgress: number;\n showGrid?: boolean;\n onBarClick?: (seriesName: string, index: number) => void;\n showTooltip: (x: number, y: number, content: string) => void;\n hideTooltip: () => void;\n views?: any;\n}\n\nexport const BarChart: React.FC<BarChartProps> = ({\n data,\n width,\n height,\n animationProgress,\n showGrid = true,\n onBarClick,\n showTooltip,\n hideTooltip,\n views,\n}) => {\n const { getColor } = useTheme();\n // Calculate chart dimensions\n const padding = { top: 20, right: 20, bottom: 40, left: 50 };\n const chartWidth = width - padding.left - padding.right;\n const chartHeight = height - padding.top - padding.bottom;\n\n // Find the maximum value in the data\n const maxValue = useMemo(() => {\n let max = 0;\n data.series.forEach((series) => {\n series.data.forEach((value) => {\n max = Math.max(max, value);\n });\n });\n return max;\n }, [data]);\n\n // Calculate bar width and spacing\n const barCount = data.labels.length;\n const seriesCount = data.series.length;\n const groupWidth = chartWidth / barCount;\n const barWidth = (groupWidth * 0.8) / seriesCount;\n const barSpacing = (groupWidth * 0.2) / (seriesCount + 1);\n\n // Generate y-axis ticks\n const yAxisTicks = useMemo(() => {\n const tickCount = 5;\n const ticks: any[] = [];\n\n for (let i = 0; i <= tickCount; i++) {\n const value = (maxValue / tickCount) * i;\n ticks.push(value);\n }\n\n return ticks;\n }, [maxValue]);\n\n return (\n <svg width={width} height={height}>\n {/* X-axis */}\n <line\n x1={padding.left}\n y1={height - padding.bottom}\n x2={width - padding.right}\n y2={height - padding.bottom}\n {...AxisStyles}\n {...views?.axis}\n />\n\n {/* Y-axis */}\n <line\n x1={padding.left}\n y1={padding.top}\n x2={padding.left}\n y2={height - padding.bottom}\n {...AxisStyles}\n {...views?.axis}\n />\n\n {/* X-axis labels */}\n {data.labels.map((label, index) => {\n const x = padding.left + (index + 0.5) * groupWidth;\n const y = height - padding.bottom + 20;\n\n return (\n <text\n key={`x-label-${index}`}\n x={x}\n y={y}\n textAnchor=\"middle\"\n {...AxisLabelStyles}\n {...views?.axisLabel}\n >\n {label}\n </text>\n );\n })}\n\n {/* Y-axis labels and grid lines */}\n {yAxisTicks.map((tick, index) => {\n const y = height - padding.bottom - (tick / maxValue) * chartHeight;\n\n return (\n <React.Fragment key={`y-tick-${index}`}>\n <text\n x={padding.left - 10}\n y={y}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n {...AxisLabelStyles}\n {...views?.axisLabel}\n >\n {tick.toFixed(0)}\n </text>\n\n {showGrid && (\n <line\n x1={padding.left}\n y1={y}\n x2={width - padding.right}\n y2={y}\n {...GridStyles}\n {...views?.grid}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* Bars */}\n {data.series.map((series, seriesIndex) => (\n <React.Fragment key={`series-${seriesIndex}`}>\n {series.data.map((value, dataIndex) => {\n const barHeight =\n (value / maxValue) * chartHeight * animationProgress;\n const x =\n padding.left +\n dataIndex * groupWidth +\n barSpacing * (seriesIndex + 1) +\n barWidth * seriesIndex;\n const y = height - padding.bottom - barHeight;\n\n const handleMouseEnter = (e: React.MouseEvent) => {\n const tooltipContent = `${series.name}: ${value}`;\n showTooltip(e.clientX, e.clientY, tooltipContent);\n };\n\n const handleClick = () => {\n if (onBarClick) {\n onBarClick(series.name, dataIndex);\n }\n };\n\n return (\n <rect\n key={`bar-${seriesIndex}-${dataIndex}`}\n x={x}\n y={y}\n width={barWidth}\n height={barHeight}\n fill={series.color ? getColor(series.color) : 'black'}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={hideTooltip}\n onClick={handleClick}\n {...BarStyles}\n {...views?.bar}\n />\n );\n })}\n </React.Fragment>\n ))}\n </svg>\n );\n};\n","import React, { useMemo } from 'react';\nimport { ChartData } from './Chart.type';\nimport {\n LineStyles,\n PointStyles,\n AxisStyles,\n AxisLabelStyles,\n GridStyles,\n} from './Chart.style';\nimport { useTheme } from 'app-studio';\n\ninterface LineChartProps {\n data: ChartData;\n width: number;\n height: number;\n animationProgress: number;\n showGrid?: boolean;\n onPointClick?: (seriesName: string, index: number) => void;\n showTooltip: (x: number, y: number, content: string) => void;\n hideTooltip: () => void;\n views?: any;\n}\n\nexport const LineChart: React.FC<LineChartProps> = ({\n data,\n width,\n height,\n animationProgress,\n showGrid = true,\n onPointClick,\n showTooltip,\n hideTooltip,\n views,\n}) => {\n // Calculate chart dimensions\n const { getColor } = useTheme();\n\n const padding = { top: 20, right: 20, bottom: 40, left: 50 };\n const chartWidth = width - padding.left - padding.right;\n const chartHeight = height - padding.top - padding.bottom;\n\n // Find the maximum value in the data\n const maxValue = useMemo(() => {\n let max = 0;\n data.series.forEach((series) => {\n series.data.forEach((value) => {\n max = Math.max(max, value);\n });\n });\n return max;\n }, [data]);\n\n // Generate y-axis ticks\n const yAxisTicks = useMemo(() => {\n const tickCount = 5;\n const ticks: number[] = [];\n\n for (let i = 0; i <= tickCount; i++) {\n const value: number = (maxValue / tickCount) * i;\n ticks.push(value);\n }\n\n return ticks;\n }, [maxValue]);\n\n // Generate path for each series\n const generatePath = (series: number[]) => {\n const points = series.map((value, index) => {\n const x = padding.left + (index / (data.labels.length - 1)) * chartWidth;\n const y =\n height -\n padding.bottom -\n (value / maxValue) * chartHeight * animationProgress;\n return `${x},${y}`;\n });\n\n return `M ${points.join(' L ')}`;\n };\n\n // Generate area path for each series (for area charts)\n const generateAreaPath = (series: number[]) => {\n const startX = padding.left;\n const endX = padding.left + chartWidth;\n const baseY = height - padding.bottom;\n\n const points = series.map((value, index) => {\n const x = padding.left + (index / (data.labels.length - 1)) * chartWidth;\n const y =\n height -\n padding.bottom -\n (value / maxValue) * chartHeight * animationProgress;\n return `${x},${y}`;\n });\n\n return `M ${startX},${baseY} L ${points.join(' L ')} L ${endX},${baseY} Z`;\n };\n\n return (\n <svg width={width} height={height}>\n {/* X-axis */}\n <line\n x1={padding.left}\n y1={height - padding.bottom}\n x2={width - padding.right}\n y2={height - padding.bottom}\n {...AxisStyles}\n {...views?.axis}\n />\n\n {/* Y-axis */}\n <line\n x1={padding.left}\n y1={padding.top}\n x2={padding.left}\n y2={height - padding.bottom}\n {...AxisStyles}\n {...views?.axis}\n />\n\n {/* X-axis labels */}\n {data.labels.map((label, index) => {\n const x =\n padding.left + (index / (data.labels.length - 1)) * chartWidth;\n const y = height - padding.bottom + 20;\n\n return (\n <text\n key={`x-label-${index}`}\n x={x}\n y={y}\n textAnchor=\"middle\"\n {...AxisLabelStyles}\n {...views?.axisLabel}\n >\n {label}\n </text>\n );\n })}\n\n {/* Y-axis labels and grid lines */}\n {yAxisTicks.map((tick, index) => {\n const y = height - padding.bottom - (tick / maxValue) * chartHeight;\n\n return (\n <React.Fragment key={`y-tick-${index}`}>\n <text\n x={padding.left - 10}\n y={y}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n {...AxisLabelStyles}\n {...views?.axisLabel}\n >\n {tick.toFixed(0)}\n </text>\n\n {showGrid && (\n <line\n x1={padding.left}\n y1={y}\n x2={width - padding.right}\n y2={y}\n {...GridStyles}\n {...views?.grid}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* Lines and points */}\n {data.series.map((series, seriesIndex) => (\n <React.Fragment key={`series-${seriesIndex}`}>\n {/* Area fill (if needed) */}\n <path\n d={generateAreaPath(series.data)}\n fill={series.color ? getColor(series.color) : 'black'}\n opacity={0.1}\n {...views?.area}\n />\n\n {/* Line */}\n <path\n d={generatePath(series.data)}\n stroke={series.color ? getColor(series.color) : 'black'}\n {...LineStyles}\n {...views?.line}\n />\n\n {/* Points */}\n {series.data.map((value, dataIndex) => {\n const x =\n padding.left +\n (dataIndex / (data.labels.length - 1)) * chartWidth;\n const y =\n height -\n padding.bottom -\n (value / maxValue) * chartHeight * animationProgress;\n\n const handleMouseEnter = (e: React.MouseEvent) => {\n const tooltipContent = `${series.name}: ${value}`;\n showTooltip(e.clientX, e.clientY, tooltipContent);\n };\n\n const handleClick = () => {\n if (onPointClick) {\n onPointClick(series.name, dataIndex);\n }\n };\n\n return (\n <circle\n key={`point-${seriesIndex}-${dataIndex}`}\n cx={x}\n cy={y}\n fill={series.color}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={hideTooltip}\n onClick={handleClick}\n {...PointStyles}\n {...views?.point}\n />\n );\n })}\n </React.Fragment>\n ))}\n </svg>\n );\n};\n","import React, { useMemo } from 'react';\nimport { useTheme } from 'app-studio';\nimport { ChartDataPoint } from './Chart.type';\nimport { PieSliceStyles, DEFAULT_COLORS } from './Chart.style';\n\ninterface PieChartProps {\n dataPoints: ChartDataPoint[];\n width: number;\n height: number;\n animationProgress: number;\n isDonut?: boolean;\n onSliceClick?: (dataPoint: ChartDataPoint, index: number) => void;\n showTooltip: (x: number, y: number, content: string) => void;\n hideTooltip: () => void;\n views?: any;\n}\n\nexport const PieChart: React.FC<PieChartProps> = ({\n dataPoints,\n width,\n height,\n animationProgress,\n isDonut = false,\n onSliceClick,\n showTooltip,\n hideTooltip,\n views,\n}) => {\n // Get theme color function\n const { getColor } = useTheme();\n // Calculate chart dimensions\n const size = Math.min(width, height);\n const radius = (size / 2) * 0.8;\n const centerX = width / 2;\n const centerY = height / 2;\n const donutRadius = isDonut ? radius * 0.6 : 0;\n\n // Calculate total value\n const total = useMemo(() => {\n return dataPoints.reduce((sum, point) => sum + point.value, 0);\n }, [dataPoints]);\n\n // Generate pie slices\n const slices = useMemo(() => {\n const result: any[] = [];\n let startAngle = -Math.PI / 2; // Start from top (12 o'clock position)\n\n for (let i = 0; i < dataPoints.length; i++) {\n const value = dataPoints[i].value;\n const percentage = value / total;\n const angle = percentage * 2 * Math.PI * animationProgress;\n const endAngle = startAngle + angle;\n\n // Calculate path\n const startX = centerX + Math.cos(startAngle) * radius;\n const startY = centerY + Math.sin(startAngle) * radius;\n const endX = centerX + Math.cos(endAngle) * radius;\n const endY = centerY + Math.sin(endAngle) * radius;\n\n // For donut chart\n const innerStartX = centerX + Math.cos(startAngle) * donutRadius;\n const innerStartY = centerY + Math.sin(startAngle) * donutRadius;\n const innerEndX = centerX + Math.cos(endAngle) * donutRadius;\n const innerEndY = centerY + Math.sin(endAngle) * donutRadius;\n\n // Create arc flag\n const largeArcFlag = angle > Math.PI ? 1 : 0;\n\n // Create path\n let path;\n\n if (isDonut) {\n // Donut slice path\n path = [\n `M ${startX} ${startY}`,\n `A ${radius} ${radius} 0 ${largeArcFlag} 1 ${endX} ${endY}`,\n `L ${innerEndX} ${innerEndY}`,\n `A ${donutRadius} ${donutRadius} 0 ${largeArcFlag} 0 ${innerStartX} ${innerStartY}`,\n 'Z',\n ].join(' ');\n } else {\n // Regular pie slice path\n path = [\n `M ${centerX} ${centerY}`,\n `L ${startX} ${startY}`,\n `A ${radius} ${radius} 0 ${largeArcFlag} 1 ${endX} ${endY}`,\n 'Z',\n ].join(' ');\n }\n\n // Calculate label position\n const labelAngle = startAngle + angle / 2;\n const labelRadius = radius * 0.7;\n const labelX = centerX + Math.cos(labelAngle) * labelRadius;\n const labelY = centerY + Math.sin(labelAngle) * labelRadius;\n\n // Calculate percentage\n const percentageText = `${(percentage * 100).toFixed(1)}%`;\n\n // Get color from dataPoint, DEFAULT_COLORS, or generate a random one\n const colorValue =\n dataPoints[i].color || DEFAULT_COLORS[i % DEFAULT_COLORS.length];\n // Resolve the color through the theme system\n const resolvedColor = getColor(colorValue);\n\n result.push({\n path,\n color: resolvedColor,\n label: dataPoints[i].label,\n value: dataPoints[i].value,\n percentage: percentageText,\n labelX,\n labelY,\n startAngle,\n endAngle,\n index: i,\n });\n\n startAngle = endAngle;\n }\n\n return result;\n }, [\n dataPoints,\n total,\n radius,\n centerX,\n centerY,\n donutRadius,\n animationProgress,\n isDonut,\n ]);\n\n return (\n <svg width={width} height={height}>\n {/* Pie slices */}\n {slices.map((slice, index) => {\n const handleMouseEnter = (e: React.MouseEvent) => {\n const tooltipContent = `${slice.label}: ${slice.value} (${slice.percentage})`;\n showTooltip(e.clientX, e.clientY, tooltipContent);\n };\n\n const handleClick = () => {\n if (onSliceClick) {\n onSliceClick(dataPoints[slice.index], slice.index);\n }\n };\n\n return (\n <g key={`slice-${index}`}>\n <path\n d={slice.path}\n fill={slice.color}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={hideTooltip}\n onClick={handleClick}\n {...PieSliceStyles}\n {...views?.pie}\n />\n\n {/* Only show labels for slices that are big enough */}\n {slice.endAngle - slice.startAngle > 0.2 && (\n <text\n x={slice.labelX}\n y={slice.labelY}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n fill=\"white\"\n fontSize=\"12px\"\n fontWeight=\"bold\"\n pointerEvents=\"none\"\n >\n {slice.percentage}\n </text>\n )}\n </g>\n );\n })}\n\n {/* Center circle for donut chart */}\n {isDonut && (\n <circle cx={centerX} cy={centerY} r={donutRadius} fill=\"white\" />\n )}\n </svg>\n );\n};\n","import React from 'react';\nimport { View } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { Horizontal } from 'app-studio';\nimport { Center } from 'app-studio';\nimport { Loader } from '../../Loader/Loader';\nimport { ChartProps } from './Chart.props';\nimport { useChartState } from './Chart.state';\nimport {\n ChartContainerStyles,\n ChartTitleStyles,\n ChartLegendStyles,\n LegendItemStyles,\n LegendColorStyles,\n LegendTextStyles,\n TooltipStyles,\n LoadingOverlayStyles,\n ErrorOverlayStyles,\n NoDataOverlayStyles,\n} from './Chart.style';\nimport { BarChart } from './BarChart';\nimport { LineChart } from './LineChart';\nimport { PieChart } from './PieChart';\n\nexport const ChartView: React.FC<ChartProps> = ({\n type,\n data,\n dataPoints,\n title,\n showLegend = true,\n legendPosition = 'bottom',\n showGrid = true,\n showTooltips = true,\n animated = true,\n animationDuration = 500,\n responsive = true,\n aspectRatio = 16 / 9,\n width: propWidth = 200,\n height: propHeight = 200,\n views,\n onDataPointClick,\n onSeriesClick,\n isLoading = false,\n error,\n noData,\n loadingIndicator,\n errorIndicator,\n noDataIndicator,\n 'aria-label': ariaLabel,\n\n themeMode: elementMode,\n ...props\n}) => {\n // Use chart state hook\n const {\n animationProgress,\n tooltip,\n containerRef,\n processedData,\n showTooltip: showTooltipState,\n hideTooltip: hideTooltipState,\n getChartDimensions,\n } = useChartState({\n data,\n dataPoints,\n animated,\n animationDuration,\n showTooltips,\n });\n\n // Get processed data\n const chartData = processedData();\n\n // Calculate dimensions\n const { width: containerWidth, height: containerHeight } =\n getChartDimensions();\n const width = propWidth || containerWidth;\n const height =\n propHeight || (responsive ? containerWidth / aspectRatio : containerHeight);\n\n // Render legend\n const renderLegend = () => {\n if (!showLegend || !chartData) return null;\n\n let items: any[] = [];\n\n if (type === 'pie' || type === 'donut') {\n // For pie/donut charts, use dataPoints\n if (Array.isArray(chartData)) {\n items = chartData as any[];\n }\n } else {\n // For other charts, use data.series\n if (chartData && (chartData as any).series) {\n items = (chartData as any).series;\n }\n }\n\n // If no items to display, don't render the legend\n if (!items || items.length === 0) return null;\n\n return (\n <Horizontal\n flexWrap=\"wrap\"\n justifyContent=\"center\"\n marginTop={legendPosition === 'bottom' ? '16px' : 0}\n marginBottom={legendPosition === 'top' ? '16px' : 0}\n {...ChartLegendStyles}\n {...views?.legend}\n >\n {items.map((item: any, index: number) => (\n <View\n key={`legend-${index}`}\n {...LegendItemStyles}\n {...views?.legendItem}\n >\n <View backgroundColor={item.color} {...LegendColorStyles} />\n <Text {...LegendTextStyles}>{item.name || item.label}</Text>\n </View>\n ))}\n </Horizontal>\n );\n };\n\n // Render chart based on type\n const renderChart = () => {\n if (!chartData) return null;\n\n switch (type) {\n case 'bar':\n return (\n <BarChart\n data={chartData as any}\n width={width as number}\n height={height as number}\n animationProgress={animationProgress}\n showGrid={showGrid}\n onBarClick={onSeriesClick}\n showTooltip={showTooltipState}\n hideTooltip={hideTooltipState}\n views={views}\n />\n );\n case 'line':\n case 'area':\n return (\n <LineChart\n data={chartData as any}\n width={width as number}\n height={height as number}\n animationProgress={animationProgress}\n showGrid={showGrid}\n onPointClick={onSeriesClick}\n showTooltip={showTooltipState}\n hideTooltip={hideTooltipState}\n views={views}\n />\n );\n case 'pie':\n case 'donut':\n return (\n <PieChart\n dataPoints={chartData as any}\n width={width as number}\n height={height as number}\n animationProgress={animationProgress}\n isDonut={type === 'donut'}\n onSliceClick={onDataPointClick}\n showTooltip={showTooltipState}\n hideTooltip={hideTooltipState}\n views={views}\n />\n );\n default:\n return null;\n }\n };\n\n // Render tooltip\n const renderTooltip = () => {\n if (!showTooltips || !tooltip.visible) return null;\n\n return (\n <View\n position=\"fixed\"\n left={`${tooltip.x}px`}\n top={`${tooltip.y - 40}px`}\n {...TooltipStyles}\n {...views?.tooltip}\n >\n {tooltip.content}\n </View>\n );\n };\n\n // Default loading indicator\n const renderLoadingIndicator = () => {\n if (!isLoading) return null;\n\n return (\n <View {...LoadingOverlayStyles} {...views?.loadingOverlay}>\n {loadingIndicator || (\n <Center>\n <Loader size=\"lg\" />\n </Center>\n )}\n </View>\n );\n };\n\n // Default error indicator\n const renderErrorIndicator = () => {\n if (!error) return null;\n\n return (\n <View {...ErrorOverlayStyles} {...views?.errorOverlay}>\n {errorIndicator || (\n <Text fontWeight=\"medium\">\n {typeof error === 'string' ? error : 'An error occurred'}\n </Text>\n )}\n </View>\n );\n };\n\n // Default no data indicator\n const renderNoDataIndicator = () => {\n if (!noData) return null;\n\n return (\n <View {...NoDataOverlayStyles} {...views?.noDataOverlay}>\n {noDataIndicator || (\n <Text>\n {typeof noData === 'string' ? noData : 'No data available'}\n </Text>\n )}\n </View>\n );\n };\n\n // Determine effective aria-label\n const effectiveAriaLabel =\n ariaLabel ?? (typeof title === 'string' ? title : 'Chart');\n\n // Determine if we should show the chart content\n const showChartContent = !error && !isLoading && !noData;\n\n return (\n <View\n ref={containerRef}\n role=\"region\"\n aria-label={effectiveAriaLabel}\n aria-busy={isLoading}\n {...ChartContainerStyles}\n {...views?.container}\n {...props}\n >\n {title && <Text {...ChartTitleStyles}>{title}</Text>}\n\n {/* Only show legend when chart content is visible */}\n {showChartContent && legendPosition === 'top' && renderLegend()}\n\n <View flex={1} width=\"100%\" position=\"relative\" {...views?.chart}>\n {showChartContent && renderChart()}\n\n {/* Render overlays */}\n {renderLoadingIndicator()}\n {renderErrorIndicator()}\n {renderNoDataIndicator()}\n </View>\n\n {/* Only show legend when chart content is visible */}\n {showChartContent && legendPosition === 'bottom' && renderLegend()}\n\n {renderTooltip()}\n </View>\n );\n};\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport { ChartData, ChartDataPoint } from './Chart.type';\nimport { DEFAULT_COLORS } from './Chart.style';\n\nexport interface ChartStateProps {\n data?: ChartData;\n dataPoints?: ChartDataPoint[];\n animated?: boolean;\n animationDuration?: number;\n showTooltips?: boolean;\n}\n\nexport const useChartState = ({\n data,\n dataPoints,\n animated = true,\n animationDuration = 500,\n showTooltips = true,\n}: ChartStateProps) => {\n // State for animation progress (0 to 1)\n const [animationProgress, setAnimationProgress] = useState(animated ? 0 : 1);\n\n // State for tooltip\n const [tooltip, setTooltip] = useState<{\n visible: boolean;\n x: number;\n y: number;\n content: string;\n }>({\n visible: false,\n x: 0,\n y: 0,\n content: '',\n });\n\n // Reference to animation frame\n const animationRef = useRef<number | null>(null);\n\n // Reference to chart container\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Handle animation\n useEffect(() => {\n if (!animated) {\n setAnimationProgress(1);\n return;\n }\n\n const startTime = Date.now();\n\n const animate = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / animationDuration, 1);\n\n setAnimationProgress(progress);\n\n if (progress < 1) {\n animationRef.current = requestAnimationFrame(animate);\n }\n };\n\n animationRef.current = requestAnimationFrame(animate);\n\n return () => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n };\n }, [animated, animationDuration]);\n\n // Process data for charts\n const processedData = useCallback(() => {\n if (data) {\n return {\n ...data,\n series: data.series.map((series, index) => ({\n ...series,\n color: series.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length],\n })),\n };\n }\n\n if (dataPoints) {\n return dataPoints.map((point, index) => ({\n ...point,\n color: point.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length],\n }));\n }\n\n return null;\n }, [data, dataPoints]);\n\n // Handle tooltip show\n const showTooltip = useCallback(\n (x: number, y: number, content: string) => {\n if (!showTooltips) return;\n\n setTooltip({\n visible: true,\n x,\n y,\n content,\n });\n },\n [showTooltips]\n );\n\n // Handle tooltip hide\n const hideTooltip = useCallback(() => {\n setTooltip((prev) => ({\n ...prev,\n visible: false,\n }));\n }, []);\n\n // Calculate chart dimensions\n const getChartDimensions = useCallback(() => {\n if (!containerRef.current) {\n return { width: 0, height: 0 };\n }\n\n const { width, height } = containerRef.current.getBoundingClientRect();\n return { width, height };\n }, []);\n\n return {\n animationProgress,\n tooltip,\n containerRef,\n processedData,\n showTooltip,\n hideTooltip,\n getChartDimensions,\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { Size, Variant, Position, Alignment } from './ContextMenu.type';\n\nexport const ContextMenuSizes: Record<Size, ViewProps> = {\n sm: {\n padding: '6px 8px',\n fontSize: '14px',\n minWidth: '160px',\n },\n md: {\n padding: '8px 12px',\n fontSize: '16px',\n minWidth: '180px',\n },\n lg: {\n padding: '10px 16px',\n fontSize: '18px',\n minWidth: '200px',\n },\n};\n\nexport const ContextMenuVariants: Record<Variant, ViewProps> = {\n default: {\n backgroundColor: 'color.white',\n color: 'color.gray.800',\n },\n filled: {\n backgroundColor: 'color.gray.100',\n color: 'color.gray.800',\n },\n outline: {\n backgroundColor: 'color.white',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n color: 'color.gray.800',\n },\n};\n\nexport const ContextMenuItemStates = {\n hover: {\n backgroundColor: 'color.gray.100',\n },\n active: {\n backgroundColor: 'color.gray.200',\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n};\n\n// Helper function to calculate position based on available space\nexport const calculateMenuPosition = (\n x: number,\n y: number,\n menuWidth: number,\n menuHeight: number,\n windowWidth: number,\n windowHeight: number,\n side: Position = 'right',\n align: Alignment = 'start'\n): { x: number; y: number } => {\n let posX = x;\n let posY = y;\n\n // Adjust horizontal position based on side\n if (side === 'left') {\n posX = x - menuWidth;\n } else if (side === 'right') {\n posX = x;\n } else if (side === 'top' || side === 'bottom') {\n // Adjust horizontal position based on alignment for top/bottom\n if (align === 'center') {\n posX = x - menuWidth / 2;\n } else if (align === 'end') {\n posX = x - menuWidth;\n }\n }\n\n // Adjust vertical position based on side\n if (side === 'top') {\n posY = y - menuHeight;\n } else if (side === 'bottom') {\n posY = y;\n } else if (side === 'left' || side === 'right') {\n // Adjust vertical position based on alignment for left/right\n if (align === 'center') {\n posY = y - menuHeight / 2;\n } else if (align === 'end') {\n posY = y - menuHeight;\n }\n }\n\n // Ensure menu stays within window bounds\n if (posX + menuWidth > windowWidth) {\n posX = windowWidth - menuWidth;\n }\n if (posX < 0) {\n posX = 0;\n }\n if (posY + menuHeight > windowHeight) {\n posY = windowHeight - menuHeight;\n }\n if (posY < 0) {\n posY = 0;\n }\n\n return { x: posX, y: posY };\n};\n","import React, {\n createContext,\n useContext,\n useRef,\n useEffect,\n useState,\n} from 'react';\nimport { View, ViewProps } from 'app-studio';\nimport {\n ContextMenuContextType,\n Size,\n Variant,\n ContextMenuItem as ContextMenuItemType,\n} from './ContextMenu.type';\nimport {\n ContextMenuTriggerProps,\n ContextMenuContentProps,\n ContextMenuItemProps,\n ContextMenuDividerProps,\n ContextMenuSeparatorProps,\n} from './ContextMenu.props';\nimport {\n ContextMenuSizes,\n ContextMenuVariants,\n ContextMenuItemStates,\n calculateMenuPosition,\n} from './ContextMenu.style';\n\n// Create context for the ContextMenu\nconst ContextMenuContext = createContext<ContextMenuContextType>({\n isOpen: false,\n setIsOpen: () => {},\n position: { x: 0, y: 0 },\n setPosition: () => {},\n activeSubmenuId: null,\n setActiveSubmenuId: () => {},\n size: 'md',\n variant: 'default',\n triggerRef: { current: null },\n contentRef: { current: null },\n contentId: 'contextmenu-content',\n closeMenu: () => {},\n openMenu: () => {},\n});\n\n// Provider component for the ContextMenu context\nexport const ContextMenuProvider: React.FC<{\n children: React.ReactNode;\n value: ContextMenuContextType;\n}> = ({ children, value }) => {\n return (\n <ContextMenuContext.Provider value={value}>\n {children}\n </ContextMenuContext.Provider>\n );\n};\n\n// Hook to use the ContextMenu context\nexport const useContextMenuContext = () => {\n const context = useContext(ContextMenuContext);\n if (!context) {\n throw new Error(\n 'useContextMenuContext must be used within a ContextMenuProvider'\n );\n }\n return context;\n};\n\n// ContextMenu Trigger component\nexport const ContextMenuTrigger: React.FC<ContextMenuTriggerProps> = ({\n children,\n disableNativeContextMenu = true,\n asChild = false,\n isDisabled = false,\n views,\n ...props\n}) => {\n const { triggerRef, contentId, openMenu } = useContextMenuContext();\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (isDisabled) return;\n\n if (disableNativeContextMenu) {\n e.preventDefault();\n }\n\n if (openMenu) {\n openMenu(e);\n } else {\n // Fallback to the old way if openMenu is not available\n const { setIsOpen, setPosition } = useContextMenuContext();\n setPosition({ x: e.clientX, y: e.clientY });\n setIsOpen(true);\n }\n };\n\n const triggerProps = {\n ref: triggerRef as React.Ref<any>, // Cast needed for different element types\n onContextMenu: handleContextMenu,\n 'aria-controls': contentId,\n 'aria-haspopup': 'menu' as const, // Indicate it triggers a menu\n 'data-disabled': isDisabled ? '' : undefined,\n // Pass disabled state down if using asChild\n ...(asChild &&\n React.isValidElement(children) &&\n children.props.isDisabled === undefined && { isDisabled }),\n ...views?.container,\n ...props,\n };\n\n if (asChild && React.isValidElement(children)) {\n const child = React.Children.only(children);\n // Need to handle ref merging if child uses its own ref\n return React.cloneElement(child, { ...triggerProps, ...child.props });\n }\n\n // Default: wrap children in a View\n return <View {...triggerProps}>{children}</View>;\n};\n\n// ContextMenu Content component\nexport const ContextMenuContent: React.FC<ContextMenuContentProps> = ({\n items,\n children,\n position,\n side = 'right',\n align = 'start',\n views,\n style, // Capture user-provided style\n ...props\n}) => {\n const {\n isOpen,\n position: contextPosition,\n contentRef,\n contentId,\n variant,\n } = useContextMenuContext();\n\n const menuRef = useRef<HTMLDivElement>(null);\n const [menuPosition, setMenuPosition] = useState({ x: 0, y: 0 });\n\n // Use contentRef if provided, otherwise use local menuRef\n const ref = contentRef || menuRef;\n\n // Calculate the position of the menu\n useEffect(() => {\n if (isOpen && ref.current) {\n const menuWidth = ref.current.offsetWidth;\n const menuHeight = ref.current.offsetHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n\n const pos = position || contextPosition;\n\n const calculatedPosition = calculateMenuPosition(\n pos.x,\n pos.y,\n menuWidth,\n menuHeight,\n windowWidth,\n windowHeight,\n side,\n align\n );\n\n setMenuPosition(calculatedPosition);\n }\n }, [isOpen, contextPosition, position, side, align, ref]);\n\n if (!isOpen) {\n return null;\n }\n\n // Basic positioning - place top-left corner at calculated position\n const positionStyles: React.CSSProperties = {\n position: 'fixed', // Use fixed to position relative to viewport\n top: `${menuPosition.y}px`,\n left: `${menuPosition.x}px`,\n zIndex: 1000,\n transformOrigin: 'top left', // Optional: for animations\n };\n\n return (\n <View\n id={contentId || 'context-menu'}\n ref={ref}\n role=\"menu\"\n tabIndex={-1} // Important for focus management if implemented later\n borderRadius={4}\n boxShadow=\"0px 2px 8px rgba(0, 0, 0, 0.15)\"\n overflow=\"hidden\"\n // Apply default content styles + custom styles + positioning\n style={{ ...positionStyles, ...style }}\n {...ContextMenuVariants[variant]}\n {...views?.menu}\n {...views?.content}\n {...props}\n >\n {items &&\n items.map((item, index) => {\n if (item.divider) {\n return (\n <ContextMenuDivider key={`divider-${index}`} views={views} />\n );\n }\n\n return <ContextMenuItem key={item.id} item={item} views={views} />;\n })}\n {children}\n </View>\n );\n};\n\n// ContextMenu Item component\nexport const ContextMenuItem: React.FC<ContextMenuItemProps> = ({\n item,\n children,\n onSelect,\n isDisabled = false,\n views,\n ...props\n}) => {\n const { activeSubmenuId, setActiveSubmenuId, size, closeMenu } =\n useContextMenuContext();\n\n // For data-driven approach\n if (item) {\n const [isHovered, setIsHovered] = useState(false);\n const hasSubmenu = item.items && item.items.length > 0;\n const isSubmenuActive = activeSubmenuId === item.id;\n const itemRef = useRef<HTMLDivElement>(null);\n const [submenuPosition, setSubmenuPosition] = useState({ x: 0, y: 0 });\n const disabled = item.disabled || isDisabled;\n\n // Handle mouse enter event\n const handleMouseEnter = () => {\n setIsHovered(true);\n if (hasSubmenu) {\n setActiveSubmenuId(item.id);\n }\n };\n\n // Handle mouse leave event\n const handleMouseLeave = () => {\n setIsHovered(false);\n };\n\n // Handle click event\n const handleClick = () => {\n if (disabled) return;\n if (!hasSubmenu && item.onClick) {\n item.onClick();\n if (closeMenu) closeMenu();\n }\n };\n\n // Calculate the position of the submenu\n useEffect(() => {\n if (isSubmenuActive && itemRef.current) {\n const rect = itemRef.current.getBoundingClientRect();\n setSubmenuPosition({\n x: rect.right,\n y: rect.top,\n });\n }\n }, [isSubmenuActive]);\n\n return (\n <View\n ref={itemRef}\n role=\"menuitem\"\n display=\"flex\"\n alignItems=\"center\"\n cursor={disabled ? 'not-allowed' : 'pointer'}\n opacity={disabled ? 0.5 : 1}\n position=\"relative\"\n aria-disabled={disabled}\n data-disabled={disabled ? '' : undefined}\n {...ContextMenuSizes[size]}\n _hover={!disabled ? ContextMenuItemStates.hover : {}}\n backgroundColor={\n isHovered && !disabled ? 'color.gray.100' : 'transparent'\n }\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleClick}\n {...views?.item}\n {...props}\n >\n {item.icon && (\n <View marginRight={8} {...views?.icon}>\n {item.icon}\n </View>\n )}\n\n <View flexGrow={1}>{item.label}</View>\n\n {hasSubmenu && (\n <View marginLeft={8} {...views?.submenuIndicator}>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.59 16.59L13.17 12L8.59 7.41L10 6L16 12L10 18L8.59 16.59Z\"\n fill=\"currentColor\"\n />\n </svg>\n </View>\n )}\n\n {isSubmenuActive && hasSubmenu && (\n <ContextMenuContent\n items={item.items || []}\n position={submenuPosition}\n side=\"right\"\n align=\"start\"\n views={views}\n />\n )}\n </View>\n );\n }\n\n // For compound component pattern\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (!isDisabled) {\n onSelect?.(event); // Call the user's handler first\n if (closeMenu) closeMenu(); // Then close the menu\n }\n };\n\n // Use Button for semantics and interaction state styling\n return (\n <View\n role=\"menuitem\"\n onClick={handleClick}\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n opacity={isDisabled ? 0.5 : 1}\n aria-disabled={isDisabled}\n data-disabled={isDisabled ? '' : undefined}\n {...ContextMenuSizes[size]}\n _hover={!isDisabled ? ContextMenuItemStates.hover : {}}\n {...views?.item}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// ContextMenu Divider component\nexport const ContextMenuDivider: React.FC<ContextMenuDividerProps> = ({\n views,\n ...props\n}) => {\n return (\n <View\n height=\"1px\"\n backgroundColor=\"color.gray.200\"\n margin=\"4px 0\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n {...views?.divider}\n {...props}\n />\n );\n};\n\n// ContextMenu Separator component (alias for Divider with different styling options)\nexport const ContextMenuSeparator: React.FC<ContextMenuSeparatorProps> = ({\n views,\n ...props\n}) => {\n return (\n <View\n height=\"1px\"\n backgroundColor=\"color.gray.200\"\n margin=\"4px 0\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n {...views?.separator}\n {...props}\n />\n );\n};\n\n// Main ContextMenu View component\nexport const ContextMenuView: React.FC<\n {\n children: React.ReactNode;\n items?: ContextMenuItemType[];\n size?: Size;\n variant?: Variant;\n disableNativeContextMenu?: boolean;\n views?: any;\n } & ViewProps\n> = ({\n children,\n items,\n size = 'md',\n variant = 'default',\n disableNativeContextMenu = true,\n views,\n\n themeMode: elementMode,\n ...props\n}) => {\n if (!items || items.length === 0) {\n // If no items are provided, just render the children (for compound component pattern)\n return <>{children}</>;\n }\n\n // For data-driven approach\n return (\n <>\n <ContextMenuTrigger\n disableNativeContextMenu={disableNativeContextMenu}\n views={views}\n {...props}\n >\n {children}\n </ContextMenuTrigger>\n\n <ContextMenuContent items={items} views={views} />\n </>\n );\n};\n","import React from 'react';\nimport {\n ContextMenuProps,\n ContextMenuType,\n} from './ContextMenu/ContextMenu.props';\nimport { useContextMenuState } from './ContextMenu/ContextMenu.state';\nimport {\n ContextMenuProvider,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuDivider,\n ContextMenuSeparator,\n ContextMenuView,\n} from './ContextMenu/ContextMenu.view';\n\n/**\n * ContextMenu component for displaying a custom context menu on right-click.\n * Supports both data-driven approach (with items prop) and compound component pattern.\n */\nconst ContextMenuComponent: React.FC<ContextMenuProps> = ({\n children,\n items,\n size = 'md',\n variant = 'default',\n disableNativeContextMenu = true,\n onOpenChange,\n views,\n ...props\n}) => {\n const state = useContextMenuState({\n size,\n variant,\n onOpenChange,\n });\n\n const {\n isOpen,\n setIsOpen,\n position,\n setPosition,\n activeSubmenuId,\n setActiveSubmenuId,\n triggerRef,\n contentRef,\n contentId,\n openMenu,\n closeMenu,\n } = state;\n\n return (\n <ContextMenuProvider\n value={{\n isOpen,\n setIsOpen,\n position,\n setPosition,\n activeSubmenuId,\n setActiveSubmenuId,\n size,\n variant,\n triggerRef,\n contentRef,\n contentId,\n openMenu,\n closeMenu,\n styles: views,\n }}\n >\n <ContextMenuView\n items={items}\n size={size}\n variant={variant}\n disableNativeContextMenu={disableNativeContextMenu}\n views={views}\n {...props}\n >\n {children}\n </ContextMenuView>\n </ContextMenuProvider>\n );\n};\n\nexport const ContextMenu = ContextMenuComponent as ContextMenuType;\n\n// Assign the sub-components to the main component\nContextMenu.Trigger = ContextMenuTrigger;\nContextMenu.Content = ContextMenuContent;\nContextMenu.Item = ContextMenuItem;\nContextMenu.Divider = ContextMenuDivider;\nContextMenu.Separator = ContextMenuSeparator; // Add the Separator component\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { generateId } from '../../../utils/id';\nimport { Size, Variant } from './ContextMenu.type';\n\nexport const useContextMenuState = (props?: {\n size?: Size;\n variant?: Variant;\n onOpenChange?: (isOpen: boolean) => void;\n}) => {\n const { size, variant, onOpenChange } = props || {};\n const [isOpen, setIsOpen] = useState(false);\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [activeSubmenuId, setActiveSubmenuId] = useState<string | null>(null);\n\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n\n // Unique ID for ARIA\n const contentId = React.useMemo(() => generateId('contextmenu-content'), []);\n\n // Define open and close menu functions\n const openMenu = useCallback(\n (event: React.MouseEvent) => {\n // Set position based on click coordinates\n setPosition({ x: event.clientX, y: event.clientY });\n setIsOpen(true);\n onOpenChange?.(true);\n },\n [onOpenChange]\n );\n\n const closeMenu = useCallback(() => {\n setIsOpen(false);\n setActiveSubmenuId(null);\n onOpenChange?.(false);\n }, [onOpenChange]);\n\n // Close the context menu when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n contentRef.current &&\n !contentRef.current.contains(event.target as Node)\n ) {\n closeMenu();\n }\n };\n\n // Close the context menu when the window is resized\n const handleResize = () => {\n if (isOpen) {\n closeMenu();\n }\n };\n\n // Close the context menu when the escape key is pressed\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n closeMenu();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n window.addEventListener('resize', handleResize);\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n window.removeEventListener('resize', handleResize);\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen, closeMenu]);\n\n return {\n isOpen,\n setIsOpen,\n position,\n setPosition,\n activeSubmenuId,\n setActiveSubmenuId,\n size,\n variant,\n triggerRef,\n contentRef,\n contentId,\n openMenu,\n closeMenu,\n };\n};\n","import React from 'react';\nimport { SelectProps } from './Select.props';\n// Initializes the custom hook 'useSelectState' for managing the state of the Select component\nexport const useSelectState = ({\n placeholder,\n isMulti,\n options,\n}: SelectProps) => {\n // Determines the default value based on the 'placeholder' and 'isMulti' props, setting to an empty array for multi-select or an empty string/single default option\n const defaultValue = placeholder\n ? isMulti\n ? []\n : '' // If there's a placeholder, set default to empty array for multi-select or empty string for single select\n : Array.isArray(options) && options.length > 0\n ? options[0].value\n : ''; // If no placeholder, use the first option value if available, otherwise undefined\n\n // State hook for managing visibility of the Select dropdown, initially set to hidden\n const [hide, setHide] = React.useState(true);\n // State hook for tracking mouse hover status over the Select component\n const [isHovered, setIsHovered] = React.useState(false);\n // State hook for tracking focus status of the Select input field\n const [isFocused, setIsFocused] = React.useState(false);\n // State hook for managing the value(s) selected by the user, initialized with the default value\n const [value, setValue] = React.useState<string | string[]>(defaultValue);\n // State hook for keeping track of the currently highlighted index in the options list\n const [highlightedIndex, setHighlightedIndex] = React.useState<number>(0);\n // Returns an object containing all stateful values and their associated setters to manage the Select component's state\n return {\n value,\n setValue,\n hide,\n setHide,\n isHovered,\n setIsHovered,\n isFocused,\n setIsFocused,\n highlightedIndex,\n setHighlightedIndex,\n };\n};\n// Initializes another custom hook 'useItemState' for managing the hover state of each Select item\nexport const useItemState = () => {\n // State hook for tracking mouse hover status over individual Select item options\n const [isHovered, setIsHovered] = React.useState(false);\n // Returns an object with 'isHovered' state and its associated setter from the 'useItemState' hook, for controlling individual Select item hover state\n return { isHovered, setIsHovered };\n};\n","/**\n * HelperText Component\n *\n * Renders helper text for form fields with appropriate styling\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Text } from '../../Text/Text';\n\nimport { HelperTextProps } from './HelperText.props';\n\nexport const HelperText: React.FC<HelperTextProps> = ({\n children,\n views = { helperText: {} },\n ...props\n}) => (\n <Text\n // Typography properties\n size=\"xs\" // 12px\n fontWeight=\"400\" // Regular weight\n letterSpacing=\"-0.01em\" // Slight negative tracking for modern look\n lineHeight=\"16px\" // 4 × 4px grid\n // Layout properties\n marginVertical={0}\n marginHorizontal={0}\n // Color properties\n color=\"color.gray.500\" // Muted color for helper text\n // Animation\n transition=\"all 0.2s ease\"\n // Apply custom styles\n {...(views['helperText'] as any)}\n {...props}\n >\n {children}\n </Text>\n);\n","/**\n * FieldContainer Component\n *\n * Renders a container for a form field with helper text and error handling\n * according to the design guidelines.\n */\n\nimport React from 'react';\n\nimport { HelperText } from '../HelperText/HelperText';\n\nimport { ContainerProps } from './FieldContainer/FieldContainer.props';\nimport { Text } from '../../Text/Text';\nimport { Vertical } from 'app-studio';\n\nexport const FieldContainer: React.FC<ContainerProps> = ({\n children,\n helperText,\n error = false,\n views,\n ...props\n}) => (\n <Vertical\n // Layout properties\n gap={8} // 2 × 4px grid\n position=\"relative\"\n width=\"100%\"\n // Apply custom props\n {...props}\n {...views?.container}\n >\n {/* Field content */}\n {children}\n\n {/* Helper text (when no error) */}\n {!error && helperText && (\n <HelperText\n marginTop={4} // 1 × 4px grid\n {...views?.helperText}\n >\n {helperText}\n </HelperText>\n )}\n\n {/* Error message */}\n {error && (\n <Text\n size=\"xs\"\n marginTop={4} // 1 × 4px grid\n marginHorizontal={0}\n fontWeight=\"500\" // Medium weight for better readability\n color=\"color.red.500\"\n transition=\"all 0.2s ease\"\n {...views?.error}\n >\n {error}\n </Text>\n )}\n </Vertical>\n);\n","/**\n * Input Styles\n *\n * Defines the styles for input components following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Shape, Size, Variant } from './Input.type';\n\n/**\n * Shape styles for input components with consistent border radius\n */\nexport const Shapes: Record<Shape, ViewProps> = {\n default: {\n borderRadius: '8px', // Consistent with design system (rounded-md)\n },\n sharp: {\n borderRadius: 0,\n },\n rounded: {\n borderRadius: '8px', // Consistent with design system (rounded-md)\n },\n pillShaped: {\n borderRadius: '9999px', // Full rounded for pill shape\n },\n};\n\n/**\n * Label sizes following the 4px grid system\n */\nexport const LabelSizes: Record<Size, string> = {\n xs: '12px', // 3 × 4px grid\n sm: '14px', // 3.5 × 4px grid\n md: '16px', // 4 × 4px grid\n lg: '18px', // 4.5 × 4px grid\n xl: '20px', // 5 × 4px grid\n};\n\n/**\n * Input variants with consistent styling\n */\nexport const InputVariants: Record<Variant, ViewProps> = {\n outline: {\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n backgroundColor: 'color.white',\n transition: 'all 0.2s ease',\n _hover: {\n borderColor: 'color.gray.300',\n },\n _focus: {\n borderColor: 'theme.primary',\n boxShadow: '0 0 0 1px rgba(66, 153, 225, 0.2)',\n },\n },\n default: {\n borderWidth: 0,\n borderBottomWidth: '1px',\n borderBottomStyle: 'solid',\n borderBottomColor: 'color.gray.200',\n borderRadius: 0,\n backgroundColor: 'color.white',\n transition: 'all 0.2s ease',\n _hover: {\n borderBottomColor: 'color.gray.300',\n },\n _focus: {\n borderBottomColor: 'theme.primary',\n },\n },\n none: {\n border: 'none',\n backgroundColor: 'transparent',\n transition: 'all 0.2s ease',\n },\n};\n\n/**\n * Padding for input with label following the 4px grid system\n */\nexport const PadddingWithLabel = {\n paddingTop: '16px', // 4 × 4px grid\n paddingBottom: '8px', // 2 × 4px grid\n paddingLeft: '16px', // 4 × 4px grid\n paddingRight: '16px', // 4 × 4px grid\n};\n\n/**\n * Padding for input without label following the 4px grid system\n */\nexport const PaddingWithoutLabel = {\n paddingTop: '12px', // 3 × 4px grid\n paddingBottom: '12px', // 3 × 4px grid\n paddingLeft: '16px', // 4 × 4px grid\n paddingRight: '16px', // 4 × 4px grid\n};\n","/**\n * FieldContent Component\n *\n * Renders the content area of a form field with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Typography } from 'app-studio';\n\nimport {\n InputVariants,\n PadddingWithLabel,\n PaddingWithoutLabel,\n Shapes,\n} from '../Input.style';\nimport { Horizontal } from 'app-studio';\n\nimport { ContentProps } from './FieldContent/FieldContent.props';\n\nexport const FieldContent: React.FC<ContentProps> = ({\n label,\n shadow,\n children,\n value,\n size = 'md',\n shape = 'default',\n variant = 'default',\n error = false,\n showLabel = false,\n isFocused = false,\n isHovered = false,\n isDisabled = false,\n isReadOnly = false,\n views = { pickerBox: {} },\n ...props\n}) => {\n // Determine if the field is in an interactive state\n const isInteractive = (isHovered || isFocused) && !isDisabled;\n\n // Set the appropriate color based on state\n const color = error\n ? 'color.red.500'\n : isInteractive\n ? 'theme.primary'\n : 'color.gray.300';\n\n return (\n <Horizontal\n // Layout properties\n gap={8} // 2 × 4px grid\n width=\"100%\"\n display=\"flex\"\n flexWrap=\"nowrap\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n marginBottom={8} // 2 × 4px grid\n // Visual properties\n borderStyle=\"solid\"\n borderColor={color}\n backgroundColor=\"color.white\"\n fontSize={Typography.fontSizes[size]}\n // State properties\n cursor={isDisabled ? 'not-allowed' : isReadOnly ? 'auto' : 'text'}\n opacity={isDisabled ? 0.6 : 1}\n // Animation\n transition=\"all 0.2s ease\"\n // Apply conditional padding based on label presence\n {...(showLabel ? PadddingWithLabel : PaddingWithoutLabel)}\n // Apply shadow if provided\n {...shadow}\n // Apply shape, variant, and custom styles\n {...Shapes[shape]}\n {...InputVariants[variant]}\n {...views['box']}\n {...props}\n >\n {children}\n </Horizontal>\n );\n};\n","import React from 'react';\nimport { Center } from 'app-studio';\n\nimport { FieldIconsProps } from './FieldIcons/FieldIcons.props';\n\nexport const FieldIcons: React.FC<FieldIconsProps> = ({\n children,\n ...props\n}) => (\n <Center\n gap={10}\n right={16}\n zIndex={500}\n flexWrap=\"nowrap\"\n position=\"absolute\"\n {...props}\n >\n {children}\n </Center>\n);\n","import { Headings } from './Label.type';\n// Import Headings type definition from Label.type module for type safety and consistency.\nexport const HeadingSizes: Record<Headings, Record<string, number | string>> = {\n // Initialize a constant 'HeadingSizes' to define styles for different heading levels.\n h1: {\n // Use TypeScript's 'Record' utility type to ensure the object matches the shape of 'Headings'.\n fontSize: 96,\n // Define style properties for 'h1' heading tag, including font size, line height, and letter spacing.\n lineHeight: 112,\n letterSpacing: -1.5,\n },\n h2: {\n fontSize: 60,\n // Define style properties for 'h2' heading tag similar to 'h1', but with adjusted values for size and spacing.\n lineHeight: 71,\n letterSpacing: -0.5,\n },\n h3: {\n fontSize: 48,\n // Define style properties for 'h3' heading tag with a standard letter spacing of 0.\n lineHeight: 57,\n letterSpacing: 0,\n },\n h4: {\n fontSize: 34,\n // Provide style properties for 'h4' heading tag, with a slight increase in letter spacing.\n lineHeight: 40,\n letterSpacing: 0.25,\n },\n h5: {\n fontSize: 24,\n // Set the 'h5' heading tag views, opting for no additional letter spacing.\n lineHeight: 28,\n letterSpacing: 0,\n },\n h6: {\n fontSize: 20,\n // Set the 'h6' heading tag views, with the smallest font size and a subtle letter spacing.\n lineHeight: 24,\n letterSpacing: 0.15,\n },\n};\n","import React from 'react';\nimport { Element, Typography } from 'app-studio';\nimport { LabelProps } from './Label.props';\nimport { HeadingSizes } from './Label.style';\nconst LabelView: React.FC<LabelProps> = ({\n children,\n // LabelView is a functional component that utilizes the LabelProps interface for its props.\n heading,\n // The component is deconstructing its properties to apply conditional styles and pass them to the underlying Element.\n isItalic = false,\n isUnderlined = false,\n isStriked = false,\n // Creates a dynamic style object based on the 'heading' prop, if provided, selecting the appropriate size from HeadingSizes.\n weight = 'normal',\n // Returns an Element component with the role of a label, styled dynamically based on incoming props.\n size = 'sm',\n dropDown,\n ...props\n // The fontSize prop for the Element is determined by the 'size' prop passed to LabelView.\n}) => {\n // The fontStyle prop toggles between 'italic' and 'normal' based on the 'isItalic' boolean prop.\n const headingStyles = heading ? HeadingSizes[heading] : {};\n // fontWeight is derived from the Typography module, ensuring consistent font weighting across the app.\n return (\n // textDecoration conditionally applies 'line-through' or 'underline' based on respective boolean props; defaults to 'none' if both are false.\n <Element\n as=\"label\"\n // Spreads any additional style properties from headingStyles into the Element if a heading size is specified.\n width=\"100%\"\n // Spreads the rest of the props to support extensibility of the LabelView component for future use cases.\n fontSize={size}\n // Includes children elements inside the Element, allowing for nested content within the label.\n fontStyle={isItalic ? 'italic' : 'normal'}\n fontWeight={Typography.fontWeights[weight]}\n textDecoration={\n isStriked ? 'line-through' : isUnderlined ? 'underline' : 'none'\n }\n {...headingStyles}\n {...props}\n >\n {children}\n </Element>\n );\n};\nexport default LabelView;\n","import React from 'react';\nimport { LabelProps } from './Label/Label.props';\nimport LabelView from './Label/Label.view';\n// Import custom type 'LabelProps' to type check the properties passed into the Label component.\nconst LabelComponent: React.FC<LabelProps> = (props) => (\n // Import 'LabelView' as a visual component for the label, separating the view from business logic.\n <LabelView {...props} />\n // Define 'LabelComponent' as a functional component that uses React's FC type for type checking and utilizing React features.\n);\n// Pass all properties received by 'LabelComponent' to 'LabelView' using the spread syntax, ensuring it has all props needed for rendering.\nexport const Label = LabelComponent;\n// Export the 'LabelComponent' as 'Label' to be reused throughout the project.\n","/**\n * FieldLabel Component\n *\n * Renders a label for a form field with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Label } from '../../Form/Label/Label';\n\nimport { LabelSizes } from '../Input.style';\n\nimport { LabelProps } from './FieldLabel/FieldLabel.props';\n\nexport const FieldLabel: React.FC<LabelProps> = ({\n children,\n size = 'md',\n error = false,\n color = 'theme.primary',\n views = { label: {} },\n helperText,\n ...props\n}) => (\n <Label\n // Position properties\n top={0} // 2 × 4px grid\n zIndex={-10}\n position=\"absolute\"\n // Typography properties\n fontSize={LabelSizes[size]}\n lineHeight={LabelSizes[size]}\n letterSpacing=\"-0.01em\" // Slight negative tracking for modern look\n whiteSpace=\"nowrap\"\n // Color properties\n color={error ? 'color.red.500' : color}\n // Animation\n transition=\"all 0.2s ease\"\n // Apply custom styles\n {...views['label']}\n {...props}\n >\n {children}\n </Label>\n);\n","/**\n * FieldWrapper Component\n *\n * Renders a wrapper for form field content with appropriate styling\n * according to the design guidelines.\n */\n\nimport React from 'react';\n\nimport { Vertical } from 'app-studio';\n\nimport { WrapperFieldProps } from './FieldWrapper.props';\n\nexport const FieldWrapper: React.FC<WrapperFieldProps> = ({\n children,\n ...props\n}) => (\n <Vertical\n // Layout properties\n width=\"100%\"\n maxWidth=\"100%\"\n position=\"relative\"\n // Apply custom props\n {...props}\n >\n {children}\n </Vertical>\n);\n","/**\n * Select Styles\n *\n * Defines the styles for the Select component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Size } from './Select.type';\n\n/**\n * Size configurations for the Select component\n * Following the 4px grid system\n */\nexport const Sizes: Record<Size, ViewProps> = {\n xs: { height: '24px', width: '24px' }, // 6 × 4px grid\n sm: { height: '32px', width: '32px' }, // 8 × 4px grid\n md: { height: '40px', width: '40px' }, // 10 × 4px grid\n lg: { height: '48px', width: '48px' }, // 12 × 4px grid\n xl: { height: '56px', width: '56px' }, // 14 × 4px grid\n};\n\n/**\n * Icon sizes for the Select component\n * Proportional to the component size\n */\nexport const IconSizes: Record<Size, number> = {\n xs: 12, // 3 × 4px grid\n sm: 16, // 4 × 4px grid\n md: 20, // 5 × 4px grid\n lg: 24, // 6 × 4px grid\n xl: 28, // 7 × 4px grid\n};\n\n/**\n * Dropdown styles for the Select component\n */\nexport const dropdownStyles: ViewProps = {\n // Layout properties\n width: '100%',\n maxHeight: '240px', // 60 × 4px grid\n overflowY: 'auto',\n zIndex: 1000,\n\n // Visual properties\n backgroundColor: 'color.white',\n borderRadius: '8px', // Consistent with design system (rounded-md)\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n\n // Shadow\n boxShadow:\n '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n\n // Animation\n transition: 'all 0.2s ease',\n};\n","import React, { useCallback } from 'react';\nimport { Element } from 'app-studio';\nimport { Typography } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Text } from '../../../Text/Text';\nimport { FieldContainer } from '../../../Input/FieldContainer/FieldContainer';\nimport { FieldContent } from '../../../Input/FieldContent/FieldContent';\nimport { FieldIcons } from '../../../Input/FieldIcons/FieldIcons';\nimport { FieldLabel } from '../../../Input/FieldLabel/FieldLabel';\nimport { FieldWrapper } from '../../../Input/FieldWrapper/FieldWrapper';\nimport { ChevronIcon, CloseIcon } from '../../../Icon/Icon';\nimport {\n DropDownProps,\n HiddenSelectProps,\n ItemProps,\n MultiSelectProps,\n SelectBoxProps,\n SelectViewProps,\n} from './Select.props';\nimport { useItemState } from './Select.state';\nimport { IconSizes } from './Select.style';\n/**\n * Item Component\n *\n * Renders an individual option item in the select dropdown\n */\nconst Item: React.FC<ItemProps> = ({\n isHovered,\n setIsHovered,\n option,\n size = 'md',\n callback = () => {},\n style,\n ...props\n}) => {\n // Handles the click event on an option by invoking the callback with the selected option's value\n const handleOptionClick = (option: string) => callback(option);\n\n // Toggles the hover state on the item\n const handleHover = () => setIsHovered(!isHovered);\n\n return (\n <Element\n as=\"li\"\n // Layout properties\n margin={0}\n paddingVertical={12} // 3 × 4px grid\n paddingHorizontal={16} // 4 × 4px grid\n listStyleType=\"none\"\n // Event handlers\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n onClick={() => handleOptionClick(option.value)}\n // Visual properties\n backgroundColor={isHovered ? 'color.gray.100' : 'transparent'}\n borderRadius=\"4px\" // Subtle rounded corners for items\n // Animation\n transition=\"all 0.15s ease\"\n // Apply custom props\n {...props}\n >\n <Text\n // Typography properties\n fontSize={Typography.fontSizes[size]}\n fontWeight=\"400\" // Regular weight\n lineHeight=\"1.5\"\n // Apply custom styles\n {...style}\n >\n {option.label}\n </Text>\n </Element>\n );\n};\n/**\n * SelectBox Component\n *\n * Renders the main select box with selected value(s)\n */\nconst SelectBox: React.FC<SelectBoxProps> = ({\n size = 'md',\n views = { field: {}, text: {} },\n value,\n isDisabled,\n placeholder,\n removeOption = () => {},\n options,\n}) => {\n /**\n * Styles for the select field\n */\n const fieldStyles = {\n // Layout properties\n margin: 0,\n width: '95%',\n height: '100%',\n border: 'none',\n paddingVertical: 12, // 3 × 4px grid\n paddingHorizontal: 0,\n\n // Typography properties\n fontSize: Typography.fontSizes[size],\n\n fontWeight: '400', // Regular weight\n lineHeight: '1.5',\n letterSpacing: '-0.01em', // Slight negative tracking for modern look\n\n // Visual properties\n backgroundColor: 'transparent',\n color: isDisabled ? 'color.gray.400' : 'color.gray.900',\n\n // State properties\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n\n // Animation\n transition: 'all 0.2s ease',\n\n // Apply custom styles\n ...views['field'],\n ...views['text'],\n };\n const option: any =\n options.length > 0 && options.find((option) => option.value === value);\n return (\n <Text {...fieldStyles}>\n {/* Check if value is an empty string or if value is an array but with no items, then show placeholder */}\n {(value === '' || (Array.isArray(value) && value.length === 0)) &&\n !!placeholder ? (\n placeholder\n ) : (\n <>\n {/* If value is a string, use the option label or value */}\n {typeof value === 'string' ? (\n (option && option.label) ?? value\n ) : // If value is an array and not empty, render MultiSelect options\n Array.isArray(value) && value.length > 0 ? (\n <Horizontal gap={6}>\n {value.map((option) => (\n <MultiSelect\n key={option}\n option={option}\n removeOption={removeOption}\n />\n ))}\n </Horizontal>\n ) : (\n // Handle any other types of value (including objects or unexpected values)\n <span>{value}</span>\n )}\n </>\n )}\n </Text>\n );\n};\nconst HiddenSelect: React.FC<HiddenSelectProps> = ({\n id,\n name,\n value,\n onChange,\n isMulti = false,\n isDisabled = false,\n isReadOnly = false,\n options = [],\n ...props\n}) => {\n const handleChange = (event: any) => {\n if (onChange) onChange(event);\n };\n return (\n <Element\n id={id}\n name={name}\n as=\"select\"\n opacity={0}\n width={0}\n height={0}\n position=\"absolute\"\n value={value}\n disabled={isDisabled}\n readOnly={isReadOnly}\n onChange={handleChange}\n multiple={isMulti}\n {...props}\n >\n {options.length > 0 &&\n options.map((option) => {\n return (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n );\n })}\n </Element>\n );\n};\n/**\n * DropDown Component\n *\n * Renders the dropdown list of options for the select component\n */\nconst DropDown: React.FC<DropDownProps> = ({\n size,\n views = {},\n options,\n callback = () => {},\n highlightedIndex,\n setHighlightedIndex,\n}) => {\n const itemStates = useItemState();\n const handleCallback = (option: string) => callback(option);\n\n // Shadow styles for the dropdown\n const shadow = {\n boxShadow:\n '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n };\n\n return (\n <Element\n as=\"ul\"\n role=\"dropdown\"\n top=\"100%\"\n width=\"100%\"\n display=\"flex\"\n flexDirection=\"column\"\n position=\"absolute\"\n marginTop={8} // 2 × 4px grid\n marginLeft={0}\n marginRight={0}\n marginBottom={0}\n padding={0}\n maxHeight=\"240px\" // 60 × 4px grid\n overflowY=\"auto\"\n zIndex={1000}\n backgroundColor=\"color.white\"\n borderRadius=\"8px\" // Consistent with design system (rounded-md)\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor=\"color.gray.200\"\n transition=\"all 0.2s ease\"\n style={{\n scrollbarWidth: 'thin',\n scrollbarColor: 'rgba(0, 0, 0, 0.2) transparent',\n '&::-webkit-scrollbar': {\n width: '4px',\n },\n '&::-webkit-scrollbar-track': {\n background: 'transparent',\n },\n '&::-webkit-scrollbar-thumb': {\n background: 'rgba(0, 0, 0, 0.2)',\n borderRadius: '4px',\n },\n }}\n {...shadow}\n {...views?.dropDown}\n >\n {options.length > 0 &&\n options.map((option, index) => (\n <Item\n key={option.value}\n size={size}\n style={views['text']}\n option={option}\n callback={handleCallback}\n backgroundColor={\n index === highlightedIndex ? 'color.gray.100' : 'transparent'\n }\n onMouseEnter={() => setHighlightedIndex(index)}\n {...itemStates}\n />\n ))}\n </Element>\n );\n};\n/**\n * MultiSelect Component\n *\n * Renders a selected option in a multi-select component\n */\nexport const MultiSelect: React.FC<MultiSelectProps> = ({\n option,\n size = 'md',\n removeOption = () => {},\n ...props\n}) => {\n const handleClick = () => removeOption(option);\n\n return (\n <Horizontal\n gap={8}\n padding={8}\n alignItems=\"center\"\n borderRadius=\"6px\"\n backgroundColor=\"color.gray.200\"\n fontSize={Typography.fontSizes[size]}\n onClick={(event: any) => event.stopPropagation()}\n transition=\"all 0.2s ease\"\n {...props}\n >\n <Text\n size={size}\n fontWeight=\"500\" // Medium weight\n >\n {option}\n </Text>\n\n <CloseIcon\n role=\"close-button\"\n color=\"inherit\"\n widthHeight={IconSizes[size]}\n onClick={handleClick}\n transition=\"all 0.2s ease\"\n _hover={{\n opacity: 0.7,\n }}\n />\n </Horizontal>\n );\n};\nconst SelectView: React.FC<SelectViewProps> = ({\n id,\n name,\n label,\n value,\n placeholder,\n helperText,\n hide = false,\n error = false,\n isMulti = false,\n isFocused = false,\n isHovered = false,\n isDisabled = false,\n isReadOnly = false,\n options = [],\n shadow = {},\n size = 'md',\n shape = 'default',\n variant = 'default',\n views = {\n text: {},\n icon: {},\n dropDown: {},\n selectBox: {},\n label: {},\n helperText: {},\n },\n onChange = () => {},\n setHide = () => {},\n setValue = () => {},\n setIsHovered = () => {},\n setIsFocused = () => {},\n setHighlightedIndex,\n highlightedIndex,\n ...props\n}) => {\n const showLabel = !!(isFocused && label);\n const handleHover = () => setIsHovered(!isHovered);\n const handleFocus = () => setIsFocused(true);\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (event && event.stopPropagation) event.stopPropagation();\n setHide(!hide);\n setIsFocused(!isFocused);\n };\n const handleCallback = useCallback(\n (option: string) => {\n setHide(!hide);\n if (isMulti && Array.isArray(value)) {\n !value.includes(option) && setValue([...value, option]);\n } else {\n setValue(option);\n }\n if (onChange) onChange(option);\n },\n [hide, isMulti, value]\n );\n const handleRemoveOption = (valueOption: string) => {\n if (Array.isArray(value) && value.includes(valueOption)) {\n const newValue = value.filter((option) => option !== valueOption);\n setValue(newValue.length === 0 ? [] : newValue);\n }\n };\n return (\n <FieldContainer\n role=\"SelectBox\"\n helperText={helperText}\n error={error}\n views={views}\n onClick={isDisabled || isReadOnly ? () => {} : handleClick}\n >\n <FieldContent\n label={label}\n size={size}\n error={error}\n shape={shape}\n views={views}\n shadow={shadow}\n variant={variant}\n value={value}\n color={'theme.primary'}\n isHovered={isHovered}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isFocused={isFocused}\n showLabel={showLabel}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n >\n <FieldWrapper>\n {showLabel && (\n <FieldLabel\n htmlFor={id}\n color={'theme.primary'}\n error={error}\n {...views}\n >\n {label}\n </FieldLabel>\n )}\n <HiddenSelect\n id={id}\n name={name}\n options={options}\n onChange={onChange}\n value={value}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isMulti={isMulti}\n onFocus={handleFocus}\n {...props}\n />\n <SelectBox\n options={options}\n size={size}\n views={views}\n value={value}\n isDisabled={isDisabled}\n placeholder={placeholder}\n removeOption={handleRemoveOption}\n />\n </FieldWrapper>\n <FieldIcons>\n {!isReadOnly && !isDisabled && (\n <>\n {hide ? (\n <ChevronIcon\n color=\"inherit\"\n widthHeight={IconSizes[size]}\n style={views.icon}\n orientation=\"down\"\n />\n ) : (\n <ChevronIcon\n color=\"inherit\"\n orientation=\"up\"\n widthHeight={IconSizes[size]}\n style={views.icon}\n />\n )}\n </>\n )}\n </FieldIcons>\n </FieldContent>\n {!hide && (\n <DropDown\n size={size}\n views={views}\n options={options}\n callback={handleCallback}\n highlightedIndex={highlightedIndex}\n setHighlightedIndex={setHighlightedIndex}\n />\n )}\n </FieldContainer>\n );\n};\nexport default SelectView;\n","import React from 'react';\nimport { SwitchProps } from './Switch.props';\n// This file defines a custom hook for managing the state of a Switch component. It allows tracking whether the switch is hovered, and its on/off state based on 'isDisabled' and 'isChecked' properties.\nexport const useSwitchState = ({ isDisabled, isChecked }: SwitchProps) => {\n const [isHovered, setIsHovered] = React.useState(false);\n const [on, setOn] = React.useState(isDisabled ? !isDisabled : isChecked);\n return { isHovered, setIsHovered, on, setOn };\n};\n","/**\n * Switch Styles\n *\n * Defines the styles for the Switch component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Size } from './Switch.type';\n\n/**\n * Knob (circle) sizes for the Switch component\n * Following the 4px grid system\n */\nexport const KnobSizes: Record<Size, ViewProps> = {\n xs: { height: '12px', width: '12px' }, // 3 × 4px grid\n sm: { height: '16px', width: '16px' }, // 4 × 4px grid\n md: { height: '20px', width: '20px' }, // 5 × 4px grid\n lg: { height: '24px', width: '24px' }, // 6 × 4px grid\n xl: { height: '28px', width: '28px' }, // 7 × 4px grid\n};\n\n/**\n * Slider (track) sizes for the Switch component\n * Following the 4px grid system\n */\nexport const SliderSizes: Record<Size, ViewProps> = {\n xs: {\n height: '24px', // 6 × 4px grid\n width: '40px', // 10 × 4px grid\n },\n sm: {\n height: '28px', // 7 × 4px grid\n width: '48px', // 12 × 4px grid\n },\n md: {\n height: '32px', // 8 × 4px grid\n width: '56px', // 14 × 4px grid\n },\n lg: {\n height: '36px', // 9 × 4px grid\n width: '64px', // 16 × 4px grid\n },\n xl: {\n height: '40px', // 10 × 4px grid\n width: '72px', // 18 × 4px grid\n },\n};\n\n/**\n * Padding for the Switch slider\n * Following the 4px grid system\n */\nexport const SliderPadding: Record<Size, Record<string, number>> = {\n xs: { paddingVertical: 4, paddingHorizontal: 4 }, // 1 × 4px grid\n sm: { paddingVertical: 4, paddingHorizontal: 4 }, // 1 × 4px grid\n md: { paddingVertical: 4, paddingHorizontal: 4 }, // 1 × 4px grid\n lg: { paddingVertical: 4, paddingHorizontal: 4 }, // 1 × 4px grid\n xl: { paddingVertical: 4, paddingHorizontal: 4 }, // 1 × 4px grid\n};\n\n/**\n * Color schemes for the Switch component\n */\nexport const ColorSchemes = {\n // Default colors\n default: {\n active: 'theme.primary',\n inactive: 'color.gray.300',\n knob: 'white',\n disabled: 'color.gray.200',\n },\n // State-specific colors\n states: {\n hover: {\n active: 'color.blue.600',\n inactive: 'color.gray.400',\n },\n focus: {\n active: 'color.blue.600',\n inactive: 'color.gray.400',\n outline: 'rgba(66, 153, 225, 0.6)',\n },\n },\n};\n","/**\n * Switch View Component\n *\n * Renders a switch toggle with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Input } from 'app-studio';\nimport { Label } from '../../../Form/Label/Label';\nimport { View } from 'app-studio';\nimport { Text } from '../../../Text/Text';\nimport { SwitchViewProps } from './Switch.props';\nimport {\n KnobSizes,\n SliderPadding,\n SliderSizes,\n ColorSchemes,\n} from './Switch.style';\nconst SwitchContent = (props: any) => <Input type=\"checkbox\" {...props} />;\nconst SwitchView: React.FC<SwitchViewProps> = ({\n id,\n name,\n label,\n inActiveChild,\n isChecked,\n activeChild,\n labelPosition = 'right',\n shadow = {},\n size = 'sm',\n value = false,\n isHovered = false,\n isDisabled = false,\n isReadOnly = false,\n on,\n setOn,\n onChange,\n setValue = () => {},\n setIsHovered = () => {},\n helperText,\n views = { slider: {}, circle: {}, label: {} },\n ...props\n}) => {\n const handleToggle = (event: any) => {\n if (!isReadOnly) {\n setValue(!value);\n setOn(!on);\n if (onChange) onChange(event.target.checked);\n }\n };\n const handleHover = () => setIsHovered(!isHovered);\n /**\n * Styles for the switch component\n */\n const switchStyle = {\n container: {\n // Layout properties\n gap: 12, // 3 × 4px grid\n display: 'flex',\n height: 'fit-content',\n width: 'fit-content',\n alignItems: 'center',\n\n // Typography properties\n\n // State properties\n cursor: isDisabled ? 'not-allowed' : isReadOnly ? 'default' : 'pointer',\n opacity: isDisabled ? 0.6 : 1,\n\n // Animation\n transition: 'all 0.2s ease',\n\n // Apply custom styles\n ...views.label,\n },\n };\n return (\n <Label\n htmlFor={id}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n {...switchStyle.container}\n {...props}\n >\n <SwitchContent\n id={id}\n name={name}\n opacity={0}\n width={0}\n height={0}\n checked={value}\n onChange={handleToggle}\n disabled={isDisabled}\n readOnly={isReadOnly}\n {...props}\n />\n {/* Label on the left side */}\n {labelPosition === 'left' && label && (\n <Text\n fontWeight=\"500\" // Medium weight for better readability\n color={isDisabled ? 'color.gray.400' : 'color.gray.700'}\n transition=\"all 0.2s ease\"\n >\n {label}\n </Text>\n )}\n\n {/* Switch slider */}\n <View\n // Layout properties\n display=\"flex\"\n alignItems=\"center\"\n justifyContent={\n activeChild ? 'space-between' : value ? 'flex-end' : 'flex-start'\n }\n marginBottom={4} // 1 × 4px grid\n // Visual properties\n borderRadius=\"9999px\" // Full rounded for pill shape\n backgroundColor={\n isDisabled\n ? ColorSchemes.default.disabled\n : value\n ? isHovered\n ? ColorSchemes.states.hover.active\n : ColorSchemes.default.active\n : isHovered\n ? ColorSchemes.states.hover.inactive\n : ColorSchemes.default.inactive\n }\n // State properties\n cursor=\"pointer\"\n // Animation\n transition=\"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\"\n // Apply styles\n {...shadow}\n {...SliderPadding[size]}\n {...SliderSizes[size]}\n {...views['slider']}\n >\n {/* Active content */}\n {activeChild && value && (\n <View\n marginLeft={8} // 2 × 4px grid\n transition=\"all 0.3s ease\"\n >\n {activeChild}\n </View>\n )}\n\n {/* Knob */}\n <View\n borderRadius=\"50%\"\n backgroundColor={ColorSchemes.default.knob}\n boxShadow=\"0 1px 2px rgba(0, 0, 0, 0.1)\"\n transition=\"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\"\n {...KnobSizes[size]}\n {...views['circle']}\n />\n\n {/* Inactive content */}\n {inActiveChild && !value && (\n <View\n marginRight={8} // 2 × 4px grid\n transition=\"all 0.3s ease\"\n >\n {inActiveChild}\n </View>\n )}\n </View>\n\n {/* Label on the right side */}\n {labelPosition === 'right' && label && (\n <Text\n fontWeight=\"500\" // Medium weight for better readability\n color={isDisabled ? 'color.gray.400' : 'color.gray.700'}\n transition=\"all 0.2s ease\"\n >\n {label}\n </Text>\n )}\n </Label>\n );\n};\nexport default SwitchView;\n","import { useMemo, useState } from 'react';\nimport { TextAreaProps } from './TextArea.props';\n// Declaration of the useTextAreaState custom hook for managing the text area component state.\nexport const useTextAreaState = ({\n label,\n placeholder,\n value: defaultValue,\n}: // Initializes the custom hook with properties from TextAreaProps and returns the text area state management functions and values.\nTextAreaProps) => {\n // State hook for the 'hint' value, displaying either the label or placeholder as guidance within the text area.\n const [hint, setHint] = useState(label ?? placeholder);\n // State hook for tracking whether the text area is hovered over.\n const [isHovered, setIsHovered] = useState(false);\n // State hook to manage the current value of the text area, initialized with the default value or an empty string.\n const [value, setValue] = useState(defaultValue || '');\n // State hook to determine if the text area is currently focused.\n const [isFocused, setIsFocused] = useState(false);\n // Memoized callback that sets the hint based on focus state and value presence to ensure proper label or placeholder visibility.\n useMemo(() => {\n setHint(isFocused && !value ? placeholder ?? '' : label ?? placeholder);\n }, [value, isFocused, label, placeholder]);\n return {\n hint,\n setHint,\n isHovered,\n setIsHovered,\n value,\n setValue,\n isFocused,\n setIsFocused,\n };\n // Export of the useTextAreaState hook for external usage.\n};\n","/**\n * TextArea View Component\n *\n * Renders a multi-line text input field with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Element, Typography } from 'app-studio';\nimport {\n FieldContainer,\n FieldContent,\n FieldLabel,\n FieldWrapper,\n} from '../../../Input';\nimport { TextAreaViewProps } from './TextArea.props';\nconst TextAreaView: React.FC<TextAreaViewProps> = ({\n id,\n name,\n hint,\n error,\n value,\n label,\n shadow,\n helperText,\n placeholder,\n size = 'sm',\n shape = 'default',\n variant = 'default',\n isHovered = false,\n isFocused = false,\n isEditable = false,\n isReadOnly = false,\n isDisabled = false,\n isAutoFocus = false,\n isMultiline = false,\n maxRows = 3,\n maxCols = 30,\n onBlur = () => {},\n onChange,\n onFocus,\n setHint = () => {},\n setValue = () => {},\n setIsFocused = () => {},\n setIsHovered = () => {},\n views = { label: {}, helperText: {} },\n ...props\n}) => {\n const showLabel = !!(isFocused && label);\n /**\n * Styles for the textarea field\n */\n const fieldStyles = {\n // Layout properties\n margin: 0,\n paddingVertical: 2, // 3 × 4px grid\n paddingHorizontal: 2,\n width: '100%',\n maxHeight: 'calc(100vh - 100px)',\n height: 'calc(5em)',\n border: 'none',\n resize: 'vertical',\n // Focus state\n on: {\n focus: {\n outline: 'none',\n },\n },\n\n // Typography properties\n fontSize: Typography.fontSizes[size],\n lineHeight: Typography.fontSizes[size] * 1.5, // 1.5 × font size for better readability in multi-line text\n\n letterSpacing: '-0.01em', // Slight negative tracking for modern look\n\n // Visual properties\n backgroundColor: 'transparent',\n color: isDisabled ? 'color.gray.400' : 'color.gray.900',\n\n // State properties\n cursor: isDisabled ? 'not-allowed' : 'text',\n\n // Animation\n transition: 'all 0.2s ease',\n\n // // Dark mode support\n\n // Apply custom field styles\n ...views['field'],\n };\n const handleHover = () => setIsHovered(!isHovered);\n const handleFocus = () => {\n setIsFocused(true);\n if (onFocus) onFocus();\n };\n const handleBlur = (event: any) => {\n onBlur(event);\n setIsFocused(false);\n };\n const handleChange = (\n event: React.ChangeEvent<HTMLInputElement> | string\n ) => {\n if (typeof event === 'string') {\n setValue(event);\n if (onChange) onChange(event);\n } else {\n setValue(event.target.value);\n if (onChange) onChange(event.target.value);\n }\n };\n return (\n <FieldContainer\n helperText={helperText}\n error={error}\n views={views}\n {...props}\n >\n <FieldContent\n label={label}\n size={size}\n error={error}\n shape={shape}\n views={views}\n shadow={shadow}\n variant={variant}\n value={value}\n color={'theme.primary'}\n isHovered={isHovered}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isFocused={isFocused}\n showLabel={showLabel}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n {...views?.content}\n >\n <FieldWrapper {...views?.warper}>\n {showLabel && (\n <FieldLabel\n htmlFor={id}\n color={'theme.primary'}\n error={error}\n {...views?.label}\n >\n {label}\n </FieldLabel>\n )}\n <Element\n as=\"textarea\"\n id={id}\n name={name}\n rows={maxRows}\n cols={maxCols}\n value={value}\n readOnly={isReadOnly}\n disabled={isDisabled}\n autoFocus={isAutoFocus}\n editable={!!isEditable.toString()}\n placeholder={hint}\n onBlur={handleBlur}\n onFocus={handleFocus}\n multiline={!!isMultiline.toString()}\n onChange={handleChange}\n {...fieldStyles}\n {...views?.textarea}\n />\n </FieldWrapper>\n </FieldContent>\n </FieldContainer>\n );\n};\nexport default TextAreaView;\n","import { useMemo, useState } from 'react';\nimport { TextFieldProps } from './TextField.props';\n// Define a custom hook `useTextFieldState` that creates and manages the state of a text field component based on its properties.\nexport const useTextFieldState = ({\n label,\n placeholder,\n value: defaultValue,\n}: TextFieldProps) => {\n // Initialize `hint` state with either the label or placeholder text, using label as a priority if it exists.\n const [hint, setHint] = useState(label ?? placeholder);\n // Set up a boolean state `isFocused` to track if the text field is focused.\n const [isFocused, setIsFocused] = useState(false);\n // Introduce a boolean state `isHovered` for tracking mouse hover status over the text field.\n const [isHovered, setIsHovered] = useState(false);\n // Manage the `value` state that holds the current value of the text field, initialized with defaultValue.\n const [value, setValue] = useState(defaultValue);\n // Use `useMemo` hook to recompute hint text when any dependency changes, updating it based on focus state and presence of value.\n useMemo(() => {\n // Update the `hint` state depending on whether the text field is focused and if value is not present, falling back to placeholder or label.\n setHint(isFocused && !value ? placeholder ?? '' : label ?? placeholder);\n // Specify the dependencies for the `useMemo` hook - updating the `hint` text when value, isFocused, label, or placeholder changes.\n }, [value, isFocused, label, placeholder]);\n // Return an object exposing the states and state setter functions for consumer components to use and manage the text field's UI and behavior.\n return {\n hint,\n setHint,\n isFocused,\n setIsFocused,\n isHovered,\n setIsHovered,\n setValue,\n value,\n };\n};\n","/**\n * TextField View Component\n *\n * Renders a text input field with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Input, Typography, useTheme } from 'app-studio';\nimport { FieldContainer } from '../../../Input/FieldContainer/FieldContainer';\nimport { FieldContent } from '../../../Input/FieldContent/FieldContent';\nimport { FieldIcons } from '../../../Input/FieldIcons/FieldIcons';\nimport { FieldLabel } from '../../../Input/FieldLabel/FieldLabel';\nimport { FieldWrapper } from '../../../Input/FieldWrapper/FieldWrapper';\nimport { CloseIcon } from '../../../Icon/Icon';\nimport { TextFieldViewProps } from './TextField.props';\n\n/**\n * Input component for text fields\n */\nconst TextFieldInput = (props: any) => <Input type=\"text\" {...props} />;\nconst TextFieldView: React.FC<TextFieldViewProps> = ({\n id,\n name,\n label,\n hint,\n value,\n onChange,\n left,\n right,\n helperText,\n placeholder,\n onChangeText,\n shadow = {},\n views = { container: {}, field: {}, label: {}, helperText: {}, text: {} },\n size = 'md',\n shape = 'default',\n variant = 'default',\n error = false,\n isFocused = false,\n isHovered = false,\n isDisabled = false,\n isReadOnly = false,\n isClearable = true,\n isAutoFocus = false,\n setHint = () => {},\n setIsFocused = () => {},\n setIsHovered = () => {},\n setValue = () => {},\n onClick = () => {},\n onFocus,\n onBlur = () => {},\n themeMode: elementMode,\n ...props\n}) => {\n const { getColor, themeMode } = useTheme();\n const IconColor = getColor('color.blueGray.700', {\n themeMode: elementMode ? elementMode : themeMode,\n });\n const showLabel = !!(isFocused && label);\n /**\n * Styles for the input field\n */\n const fieldStyles = {\n // Layout properties\n margin: 0,\n paddingVertical: 8, // 2 × 4px grid\n paddingHorizontal: 0,\n width: '100%',\n height: '100%',\n border: 'none',\n\n // Focus state\n on: {\n focus: {\n outline: 'none',\n },\n },\n\n // Typography properties\n fontSize: Typography.fontSizes[size],\n lineHeight: Typography.fontSizes[size],\n\n letterSpacing: '-0.01em', // Slight negative tracking for modern look\n\n // Visual properties\n backgroundColor: 'transparent',\n color: isDisabled ? 'color.gray.400' : 'color.gray.900',\n\n // State properties\n cursor: isDisabled ? 'not-allowed' : 'text',\n\n // Animation\n transition: 'all 0.2s ease',\n\n // Apply custom field styles\n ...views['field'],\n };\n const handleFocus = () => {\n setIsFocused(true);\n if (onFocus) onFocus();\n };\n const handleHover = () => setIsHovered(!isHovered);\n const handleBlur = (event: any) => {\n if (onBlur) onBlur(event);\n setIsFocused(false);\n };\n const handleChange = (\n event: React.ChangeEvent<HTMLInputElement> | string\n ) => {\n if (typeof event === 'string') {\n setValue(event);\n if (onChangeText) onChangeText(event);\n if (onChange) onChange(event);\n } else {\n setValue(event.target.value);\n if (onChangeText) onChangeText(event.target.value);\n if (onChange) onChange(event.target.value);\n }\n };\n const handleClear = () => {\n setValue('');\n if (onChange) {\n onBlur({ target: { name } });\n if (onChangeText) onChangeText('');\n if (onChange) onChange('');\n }\n if (typeof document === 'undefined' && onChangeText) onChangeText('');\n };\n return (\n <FieldContainer helperText={helperText} error={error} views={views}>\n <FieldContent\n label={label}\n size={size}\n error={error}\n shape={shape}\n views={views}\n shadow={shadow}\n variant={variant}\n value={value}\n color={'theme.primary'}\n isHovered={isHovered}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isFocused={isFocused}\n showLabel={showLabel}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n >\n {left}\n <FieldWrapper>\n {showLabel && (\n <FieldLabel\n htmlFor={id}\n color={'theme.primary'}\n error={error}\n {...views}\n >\n {label}\n </FieldLabel>\n )}\n <TextFieldInput\n id={id}\n name={name}\n readOnly={isReadOnly}\n disabled={isDisabled}\n autoFocus={isAutoFocus}\n placeholder={hint}\n onFocus={handleFocus}\n onBlur={handleBlur}\n autoComplete=\"off\"\n {...fieldStyles}\n {...props}\n onChange={handleChange}\n value={value}\n />\n </FieldWrapper>\n {isClearable && value && !isReadOnly && !isDisabled && (\n <FieldIcons>\n <CloseIcon\n widthHeight={Typography.fontSizes[size]}\n color={IconColor}\n onClick={handleClear}\n />\n </FieldIcons>\n )}\n {right}\n </FieldContent>\n </FieldContainer>\n );\n};\nexport default TextFieldView;\n","import React from 'react';\n\nimport { CheckboxProps } from './Checkbox.props';\n\nexport const useCheckboxState = ({\n defaultIsSelected = false,\n}: CheckboxProps) => {\n const [isHovered, setIsHovered] = React.useState(false);\n const [isSelected, setIsSelected] =\n React.useState<boolean>(defaultIsSelected);\n\n return {\n isHovered,\n setIsHovered,\n isSelected,\n setIsSelected,\n };\n};\n","/**\n * Checkbox Styles\n *\n * Defines the styles for the Checkbox component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Size, Variant } from './Checkbox.type';\n\n/**\n * Size configurations for the Checkbox component\n * Following the 4px grid system\n */\nexport const Sizes: Record<Size, ViewProps> = {\n xs: { height: '16px', width: '16px' }, // 4 × 4px grid\n sm: { height: '20px', width: '20px' }, // 5 × 4px grid\n md: { height: '24px', width: '24px' }, // 6 × 4px grid\n lg: { height: '28px', width: '28px' }, // 7 × 4px grid\n xl: { height: '32px', width: '32px' }, // 8 × 4px grid\n};\n\n/**\n * Icon sizes for the Checkbox component\n * Proportional to the component size\n */\nexport const IconSizes: Record<Size, number> = {\n xs: 10, // 2.5 × 4px grid\n sm: 14, // 3.5 × 4px grid\n md: 16, // 4 × 4px grid\n lg: 20, // 5 × 4px grid\n xl: 24, // 6 × 4px grid\n};\n\n/**\n * Variant styles for the Checkbox component\n */\nexport const VariantStyles: Record<Variant, ViewProps> = {\n selected: {\n backgroundColor: 'theme.primary',\n borderColor: 'theme.primary',\n color: 'color.white',\n },\n unselected: {\n backgroundColor: 'color.white',\n borderWidth: '2px',\n borderStyle: 'solid',\n borderColor: 'color.gray.300',\n color: 'color.black',\n },\n indeterminate: {\n backgroundColor: 'theme.primary',\n borderColor: 'theme.primary',\n color: 'color.white',\n },\n};\n\n/**\n * State styles for the Checkbox component\n */\nexport const StateStyles = {\n hover: {\n selected: {\n backgroundColor: 'color.blue.600',\n borderColor: 'color.blue.600',\n },\n unselected: {\n borderColor: 'color.gray.400',\n },\n indeterminate: {\n backgroundColor: 'color.blue.600',\n borderColor: 'color.blue.600',\n },\n },\n disabled: {\n selected: {\n backgroundColor: 'color.gray.300',\n borderColor: 'color.gray.300',\n opacity: 0.6,\n },\n unselected: {\n borderColor: 'color.gray.300',\n opacity: 0.6,\n },\n indeterminate: {\n backgroundColor: 'color.gray.300',\n borderColor: 'color.gray.300',\n opacity: 0.6,\n },\n },\n error: {\n selected: {\n backgroundColor: 'color.red.500',\n borderColor: 'color.red.500',\n },\n unselected: {\n borderColor: 'color.red.500',\n },\n indeterminate: {\n backgroundColor: 'color.red.500',\n borderColor: 'color.red.500',\n },\n },\n};\n","/**\n * Checkbox View Component\n *\n * Renders a checkbox with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Typography } from 'app-studio';\n\nimport { Center } from 'app-studio';\nimport { Label } from '../../../Form/Label/Label';\nimport { TickIcon, MinusIcon } from '../../../Icon/Icon';\n\nimport { CheckboxViewProps } from './Checkbox.props';\nimport { IconSizes, Sizes, VariantStyles, StateStyles } from './Checkbox.style';\nimport { Text } from '../../../Text/Text';\nimport { Horizontal } from 'app-studio';\nimport { Vertical } from 'app-studio';\n\nconst CheckboxView: React.FC<CheckboxViewProps> = ({\n id,\n icon,\n name,\n label,\n isChecked,\n onChange,\n onValueChange,\n shadow = {},\n labelPosition = 'right',\n size = 'md',\n error = false,\n isSelected = false,\n isHovered = false,\n isDisabled = false,\n isReadOnly = false,\n isIndeterminate = false,\n defaultIsSelected = false,\n setIsSelected = () => {},\n setIsHovered = () => {},\n views = { checkbox: {}, label: {} },\n infoText,\n helperText,\n ...props\n}) => {\n const handleHover = () => setIsHovered(!isHovered);\n\n const handleChange = () => {\n if (!isReadOnly && !isDisabled) {\n if (setIsSelected) setIsSelected(!isSelected);\n if (onChange) onChange(!isChecked);\n if (onValueChange) onValueChange(!isChecked);\n }\n };\n\n /**\n * Determine the variant based on component state\n */\n const variant = isIndeterminate\n ? 'indeterminate'\n : isChecked || isSelected\n ? 'selected'\n : 'unselected';\n\n /**\n * Apply state-specific styles\n */\n const stateStyle = error\n ? StateStyles.error[variant]\n : isDisabled\n ? StateStyles.disabled[variant]\n : isHovered\n ? StateStyles.hover[variant]\n : {};\n\n /**\n * Styles for the checkbox component\n */\n const checkboxStyle = {\n container: {\n // Layout properties\n gap: 8, // 2 × 4px grid\n display: 'flex',\n height: 'fit-content',\n flexDirection: 'column',\n width: 'fit-content',\n\n // Typography properties\n\n // Visual properties\n color: error\n ? 'color.red.600'\n : isDisabled\n ? 'color.gray.400'\n : 'color.gray.700',\n\n // State properties\n cursor: isDisabled ? 'not-allowed' : isReadOnly ? 'default' : 'pointer',\n opacity: isDisabled ? 0.6 : 1,\n\n // Animation\n transition: 'all 0.2s ease',\n\n // Apply custom styles\n ...views['label'],\n },\n checkbox: {\n // Base variant styles\n ...VariantStyles[variant],\n\n // State-specific styles\n ...stateStyle,\n\n // Visual properties\n borderRadius: '4px', // Consistent with design system\n\n // Size properties\n ...Sizes[size],\n\n // Animation\n transition: 'all 0.2s ease',\n\n // Apply shadow and custom styles\n ...shadow,\n ...views['checkbox'],\n },\n };\n\n return (\n <Label\n htmlFor={id}\n as=\"div\"\n onClick={handleChange}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n size={Typography.fontSizes[size]}\n {...checkboxStyle.container}\n {...props}\n >\n <Vertical gap={8}>\n {' '}\n {/* 2 × 4px grid */}\n <Horizontal gap={12} alignItems=\"center\">\n {' '}\n {/* 3 × 4px grid */}\n {/* Label on the left side */}\n {labelPosition === 'left' && label && (\n <Text\n size={size}\n fontWeight=\"500\" // Medium weight for better readability\n {...views?.label}\n >\n {label}\n </Text>\n )}\n {/* Checkbox */}\n <Center {...checkboxStyle.checkbox}>\n {isIndeterminate ? (\n <MinusIcon\n widthHeight={IconSizes[size]}\n color=\"white\"\n transition=\"all 0.2s ease\"\n />\n ) : (\n (isChecked || isSelected) &&\n (icon ?? (\n <TickIcon\n widthHeight={IconSizes[size]}\n color=\"white\"\n transition=\"all 0.2s ease\"\n />\n ))\n )}\n </Center>\n {/* Label on the right side */}\n {labelPosition === 'right' && label && (\n <Text\n size={size}\n fontWeight=\"500\" // Medium weight for better readability\n {...views?.label}\n >\n {label}\n </Text>\n )}\n </Horizontal>\n {/* Info text */}\n {infoText && (\n <Text\n marginLeft={labelPosition === 'left' ? 0 : 36} // 9 × 4px grid\n color=\"color.gray.500\"\n size=\"sm\"\n fontWeight=\"400\" // Regular weight\n lineHeight=\"1.5\"\n {...views?.infoText}\n >\n {infoText}\n </Text>\n )}\n </Vertical>\n\n {/* Error message */}\n {error && (\n <Text\n size=\"xs\"\n marginTop={4} // 1 × 4px grid\n marginHorizontal={0}\n color=\"color.red.500\"\n fontWeight=\"500\" // Medium weight for better readability\n transition=\"all 0.2s ease\"\n >\n {error}\n </Text>\n )}\n </Label>\n );\n};\n\nexport default CheckboxView;\n","import React from 'react';\nimport countryList from '../countries.json';\nimport { CountryPickerProps } from './CountryPicker.props';\nimport { Country } from './CountryPicker.type';\n// Defines a custom hook for managing the CountryPicker component's state, including options from a country list, selected value, and UI states for hiding, focus, and hover.\nexport const useCountryPickerState = ({ placeholder }: CountryPickerProps) => {\n const [newOptions, setNewOptions] =\n React.useState<Array<Country>>(countryList);\n const [value, setValue] = React.useState<string>(\n placeholder ?? countryList[0].name\n );\n const [hide, setHide] = React.useState(true);\n const [isFocused, setIsFocused] = React.useState(false);\n const [isHovered, setIsHovered] = React.useState(false);\n return {\n hide,\n setHide,\n newOptions,\n setNewOptions,\n isHovered,\n setIsHovered,\n isFocused,\n setIsFocused,\n value,\n setValue,\n };\n};\n","import { Size } from './CountryPicker.type';\n// Defines the size of icons based on predefined size categories to maintain design consistency.\nexport const IconSizes: Record<Size, number> = {\n xs: 8,\n sm: 10,\n md: 12,\n lg: 14,\n xl: 16,\n};\n// Maps predefined size categories to specific numerical values to standardize label sizes throughout the component.\nexport const LabelSizes: Record<Size, number> = {\n xs: 8,\n sm: 10,\n md: 12,\n lg: 14,\n xl: 16,\n};\n","import React, { useState } from 'react';\nimport { Element, Input, Typography, useTheme } from 'app-studio';\nimport {\n FieldContainer,\n FieldContent,\n FieldIcons,\n FieldLabel,\n FieldWrapper,\n} from '../../../Input';\n\nimport countryList from '../countries.json';\nimport {\n CountryPickerViewProps,\n DropDownItemProps,\n CountryPickerDropDownProps,\n} from './CountryPicker.props';\nimport { IconSizes } from './CountryPicker.style';\nimport { Country } from './CountryPicker.type';\nimport { ChevronIcon } from '../../../Icon/Icon';\nconst CountryList: React.FC<CountryPickerDropDownProps> = ({\n size,\n ...props\n}) => <Element as=\"ul\" {...props} />;\nconst CountrySelector: React.FC<any> = (props) => (\n <Input type=\"country\" {...props} />\n);\nconst CountryItem: React.FC<DropDownItemProps> = ({ size, ...props }) => (\n <Element as=\"li\" {...props} />\n);\nexport const DropDownItem: React.FC<DropDownItemProps> = ({\n option,\n size = 'md',\n callback = () => {},\n views = { text: {} },\n}) => {\n const [isHovered, setIsHovered] = useState(false);\n const handleOptionClick = (event: any) => {\n if (event && event.stopPropagation) event.stopPropagation();\n callback(option);\n };\n const handleHover = () => setIsHovered(!isHovered);\n return (\n <CountryItem\n margin={0}\n role=\"DropDownItem\"\n listStyleType=\"none\"\n fontWeight=\"normal\"\n paddingVertical={6}\n paddingHorizontal={12}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n onClick={handleOptionClick}\n fontSize={Typography.fontSizes[size]}\n backgroundColor={isHovered ? 'trueGray.100' : 'transparent'}\n {...views['text']}\n >\n {option}\n </CountryItem>\n );\n};\nexport const DropDown: React.FC<CountryPickerDropDownProps> = ({\n size,\n views = { dropDown: {} },\n options = [],\n callback = () => {},\n}) => {\n const handleCallback = (option: string) => callback(option);\n return (\n <CountryList\n role=\"dropDown\"\n margin={0}\n padding={0}\n top=\"100%\"\n width=\"100%\"\n display=\"flex\"\n zIndex={1000}\n overflow=\"auto\"\n maxHeight=\"300px\"\n borderRadius={4}\n position=\"absolute\"\n flexDirection=\"column\"\n backgroundColor=\"color.white\"\n boxShadow=\"rgba(0, 0, 0, 0.07) 0px 1px 1px, rgba(0, 0, 0, 0.07) 0px 2px 2px, rgba(0, 0, 0, 0.07) 0px 4px 4px, rgba(0, 0, 0, 0.07) 0px 8px 8px, rgba(0, 0, 0, 0.07) 0px 16px 16px\"\n {...views['dropDown']}\n >\n {options.map((option: Country) => (\n <DropDownItem\n key={option.code}\n size={size}\n option={option.name}\n callback={handleCallback}\n {...views['text']}\n />\n ))}\n </CountryList>\n );\n};\nexport const CountryPickerView: React.FC<CountryPickerViewProps> = ({\n id,\n name,\n label,\n value,\n placeholder,\n helperText,\n hide = false,\n error = false,\n isHovered = false,\n isFocused = false,\n isAutoFocus = false,\n isDisabled = false,\n isReadOnly = false,\n shadow = {},\n newOptions = [],\n size = 'md',\n variant = 'default',\n shape = 'default',\n onChange,\n onBlur = () => {},\n setHide = () => {},\n setNewOptions = () => {},\n setIsHovered = () => {},\n setIsFocused = () => {},\n setValue = () => {},\n views = {\n text: {},\n icon: {},\n label: {},\n dropDown: {},\n helperText: {},\n },\n themeMode: elementMode,\n ...props\n}) => {\n const { getColor, themeMode } = useTheme();\n const IconColor = getColor('color.blueGray.700', {\n themeMode: elementMode ? elementMode : themeMode,\n });\n const handleHover = () => setIsHovered(!isHovered);\n const handleFocus = () => setIsFocused(true);\n const handleCallback = (option: string) => {\n setHide(!hide);\n setValue(option);\n if (onChange) onChange(option);\n };\n const handleClick = () => {\n if (!isDisabled && !isReadOnly) {\n setHide(!hide);\n }\n };\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const valueCountry = event.target.value;\n const filteredCountries = countryList.filter((country) =>\n country.name.toLowerCase().startsWith(valueCountry.toLowerCase())\n );\n if (hide) setHide(false);\n setNewOptions(filteredCountries);\n if (onChange) onChange(valueCountry);\n };\n const handleBlur = (event: any) => {\n onBlur(event);\n setIsFocused(false);\n };\n // Show label if it exists and either the field is focused or has a value\n const showLabel = !!(label && (isFocused || value));\n const fieldStyles = {\n margin: 0,\n paddingVertical: 8,\n paddingHorizontal: 0,\n width: '100%',\n heigth: '100%',\n border: 'none',\n on: { focus: { outline: 'none' } },\n fontSize: Typography.fontSizes[size],\n backgroundColor: 'transparent',\n color: isDisabled ? 'color.trueGray.600' : 'color.blueGray.700',\n cursor: isDisabled ? 'not-allowed' : isReadOnly ? 'auto' : 'pointer',\n ...views['field'],\n };\n return (\n <FieldContainer\n helperText={helperText}\n error={error}\n views={views}\n onClick={handleClick}\n >\n <FieldContent\n label={label}\n size={size}\n error={error}\n shape={shape}\n views={views}\n shadow={shadow}\n variant={variant}\n value={value}\n color={'theme.primary'}\n isHovered={isHovered}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isFocused={isFocused}\n showLabel={showLabel}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n >\n <FieldWrapper>\n {showLabel && (\n <FieldLabel\n htmlFor={id}\n color={'theme.primary'}\n error={error}\n {...views}\n >\n {label}\n </FieldLabel>\n )}\n <CountrySelector\n id={id}\n name={name}\n placeholder={placeholder}\n readOnly={isReadOnly}\n disabled={isDisabled}\n autoFocus={isAutoFocus}\n onBlur={handleBlur}\n onFocus={handleFocus}\n {...fieldStyles}\n {...props}\n value={value}\n onChange={handleChange}\n />\n </FieldWrapper>\n <FieldIcons>\n {hide ? (\n <ChevronIcon\n orientation=\"down\"\n widthHeight={IconSizes[size]}\n color={IconColor}\n style={views['icon']}\n />\n ) : (\n <ChevronIcon\n orientation=\"up\"\n widthHeight={IconSizes[size]}\n color={IconColor}\n style={views['icon']}\n />\n )}\n </FieldIcons>\n </FieldContent>\n {!hide && (\n <DropDown\n size={size}\n views={views}\n options={newOptions}\n callback={handleCallback}\n />\n )}\n </FieldContainer>\n );\n};\n","import React from 'react';\nimport format from 'date-fns/format';\n\nexport const useDatePickerState = () => {\n const [isHovered, setIsHovered] = React.useState(false);\n const [isFocused, setIsFocused] = React.useState(false);\n const [date, setDate] = React.useState(format(new Date(), 'yyyy-MM-dd'));\n\n return {\n date,\n setDate,\n isHovered,\n setIsHovered,\n isFocused,\n setIsFocused,\n };\n};\n","import React from 'react';\nimport { Input, Typography } from 'app-studio';\nimport { FieldContainer } from '../../../Input/FieldContainer/FieldContainer';\nimport { FieldContent } from '../../../Input/FieldContent/FieldContent';\nimport { FieldLabel } from '../../../Input/FieldLabel/FieldLabel';\nimport { FieldWrapper } from '../../../Input/FieldWrapper/FieldWrapper';\n\nimport { DatePickerViewProps } from './DatePicker.props';\n\nconst DatePickerContent = (props: any) => <Input type=\"date\" {...props} />;\n\nconst DatePickerView: React.FC<DatePickerViewProps> = ({\n id,\n icon,\n name,\n label,\n date,\n children,\n helperText,\n shadow = {},\n size = 'md',\n variant = 'default',\n shape = 'default',\n views = { container: {}, label: {}, helperText: {}, text: {}, field: {} },\n error = false,\n isHovered = false,\n isFocused = false,\n isDisabled = false,\n isReadOnly = false,\n setDate = () => {},\n setIsFocused = () => {},\n setIsHovered = () => {},\n onChange,\n onChangeText,\n ...props\n}) => {\n const showLabel = !!(isFocused && label);\n\n const handleHover = () => setIsHovered(!isHovered);\n const handleFocus = () => setIsFocused(true);\n\n const handleDateChange = (event: any) => {\n if (typeof event === 'string') {\n setDate(event);\n if (onChangeText) onChangeText(event);\n } else {\n setDate(event.target.value);\n if (onChange) onChange(event.target.value);\n }\n };\n\n const fieldStyles = {\n margin: 0,\n paddingVertical: 8,\n paddingHorizontal: 0,\n width: '100%',\n heigth: '100%',\n border: 'none',\n on: {\n focus: {\n outline: 'none',\n backgroundColor: 'transparent',\n },\n },\n fontSize: Typography.fontSizes[size],\n backgroundColor: 'transparent',\n color: isDisabled ? 'color.trueGray.600' : 'color.blueGray.700',\n cursor: isDisabled ? 'not-allowed' : isReadOnly ? 'auto' : 'pointer',\n ...views['field'],\n };\n\n return (\n <FieldContainer helperText={helperText} error={error} views={views}>\n <FieldContent\n label={label}\n size={size}\n error={error}\n shape={shape}\n views={views}\n shadow={shadow}\n color={'theme.primary'}\n variant={variant}\n value={date}\n isHovered={isHovered}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isFocused={isFocused}\n showLabel={showLabel}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n >\n <FieldWrapper>\n {showLabel && (\n <FieldLabel\n htmlFor={id}\n color={'theme.primary'}\n error={error}\n {...views}\n >\n {label}\n </FieldLabel>\n )}\n <DatePickerContent\n id={id}\n name={name}\n onFocus={handleFocus}\n disabled={isDisabled}\n readOnly={isReadOnly}\n {...fieldStyles}\n {...props}\n {...(onChangeText && { onChangeText: handleDateChange })}\n onChange={handleDateChange}\n />\n </FieldWrapper>\n </FieldContent>\n </FieldContainer>\n );\n};\n\nexport default DatePickerView;\n","import { useState } from 'react';\nimport { PasswordProps } from './Password.props';\nimport { useTextFieldState } from '../../TextField/TextField/TextField.state';\n\nexport const usePasswordState = (props: PasswordProps) => {\n const textFieldStates = useTextFieldState(props);\n const [isVisible, setIsVisible] = useState(false);\n\n return { isVisible, setIsVisible, ...props, ...textFieldStates };\n};\n","import { useState } from 'react';\nimport { ComboBoxItem, ComboBoxStateActions } from './ComboBox.props';\n// Defines the useComboBoxState hook with parameters for the list of items and optional placeholder texts.\nexport const useComboBoxState = (\n items: ComboBoxItem[],\n placeholder?: string,\n searchPlaceholder?: string\n): ComboBoxStateActions => {\n // State hook for filtered items with initial state set to the items passed to the hook.\n const [filteredItems, setFilteredItems] = useState<ComboBoxItem[]>(items);\n // State hook to track the selected item with an initial state based on the placeholder or the first item.\n const [selectedItem, setSelectedItem] = useState<ComboBoxItem>(\n placeholder ? { value: placeholder, label: placeholder } : items[0]\n );\n // State hook for highlighted index in the dropdown list, initialized to 0.\n const [highlightedIndex, setHighlightedIndex] = useState<number>(0);\n // State hook for search query with an initial state based on the searchPlaceholder or empty string.\n const [searchQuery, setSearchQuery] = useState<string>(\n searchPlaceholder ?? ''\n );\n // State hook to manage dropdown visibility, starts as false (hidden).\n const [isDropdownVisible, setIsDropdownVisible] = useState(false);\n // Start of object returned by the useComboBoxState hook containing all state and state updater functions.\n return {\n filteredItems,\n setFilteredItems,\n selectedItem,\n setSelectedItem,\n highlightedIndex,\n setHighlightedIndex,\n searchQuery,\n setSearchQuery,\n isDropdownVisible,\n setIsDropdownVisible,\n // End of the return statement of the useComboBoxState hook, encapsulating all the state and setState actions for ComboBox.\n };\n};\n","import React, { useEffect } from 'react';\nimport { View, Horizontal } from 'app-studio';\nimport { ComboBoxItem, ComboBoxViewProps } from './ComboBox.props';\nimport { Text } from '../../../Text/Text';\nimport TextField from '../../../Form/TextField/TextField/TextField.view';\nimport { SearchIcon, TickIcon } from '../../../Icon/Icon';\n\n// Defines the functional component 'ComboBoxView' with destructured props.\nconst ComboBoxView: React.FC<ComboBoxViewProps> = ({\n placeholder,\n items,\n showTick = true,\n onSelect,\n searchEnabled = true,\n left,\n right,\n label,\n filteredItems,\n setSelectedItem,\n selectedItem,\n highlightedIndex,\n setHighlightedIndex,\n searchQuery,\n setSearchQuery,\n setFilteredItems,\n views,\n isDropdownVisible,\n setIsDropdownVisible,\n // Collects all further props not destructured explicitly.\n ...props\n}) => {\n // Sets up an effect to handle clicking outside the dropdown to close it.\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const path = event.composedPath();\n const isOutside = !path.some(\n (element: any) => element?.id === 'combobox-dropdown'\n );\n if (isOutside) {\n setIsDropdownVisible(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n // Defines 'handleSearch' to filter items based on the user's query.\n const handleSearch = (query: string) => {\n setSearchQuery(query);\n if (query === '') {\n setFilteredItems(items);\n } else {\n const filtered = items.filter((item) =>\n item.label.toLowerCase().includes(query.toLowerCase())\n );\n setFilteredItems(filtered);\n }\n setHighlightedIndex(0);\n };\n // Defines 'handleSelect' to handle item selection and close the dropdown.\n const handleSelect = (item: ComboBoxItem) => {\n setSelectedItem(item);\n onSelect?.(item);\n setIsDropdownVisible(false);\n };\n // Starts the JSX returned by the component representing the combobox.\n return (\n <Horizontal\n role=\"combobox\"\n flexWrap=\"nowrap\"\n gap={15}\n alignItems=\"center\"\n width=\"100%\"\n {...props}\n >\n {label && (\n <Text views={views?.label} htmlFor={props.id}>\n {label}\n </Text>\n )}\n <View position=\"relative\">\n <Horizontal\n cursor=\"pointer\"\n backgroundColor=\"color.white\"\n boxShadow=\"rgba(0, 0, 0, 0.16) 0px 1px 4px\"\n padding=\"12px\"\n display=\"flex\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n justifyContent=\"space-between\"\n minWidth={300}\n flexWrap=\"nowrap\"\n {...views?.container}\n >\n <Horizontal\n gap={15}\n alignItems=\"center\"\n position=\"relative\"\n width=\"100%\"\n onClick={() => setIsDropdownVisible(!isDropdownVisible)}\n {...views?.labelContainer}\n >\n {left}\n <Text\n weight=\"medium\"\n flexGrow={1}\n color=\"color.gray.800\"\n {...views?.label}\n >\n {selectedItem.label}\n </Text>\n </Horizontal>\n {right}\n {isDropdownVisible && (\n <View\n id=\"combobox-dropdown\"\n position=\"absolute\"\n backgroundColor=\"color.white\"\n boxShadow=\"rgba(0, 0 ,0 ,0.16) 0px 1px 4px\"\n width=\"100%\"\n overflowY=\"auto\"\n zIndex={10000}\n bottom={-8}\n left={0}\n transform=\"translateY(100%)\"\n marginTop=\"4px\"\n borderRadius=\"4px\"\n {...views?.dropdown}\n >\n {searchEnabled && (\n <TextField\n id={props.id}\n name={props.name}\n width=\"100%\"\n type=\"search\"\n value={searchQuery}\n onChange={(value) => handleSearch(value)}\n hint={placeholder}\n isClearable={false}\n left={<SearchIcon widthHeight={12} />}\n views={{\n container: {\n width: '100%',\n padding: '6px 12px',\n borderBottom:\n filteredItems.length > 0\n ? '1px solid #ccc'\n : '1px solid transparent',\n ...views?.text,\n },\n }}\n />\n )}\n {filteredItems.length > 0 && (\n <View margin={0} padding={4}>\n {filteredItems.map((item, index) => (\n <Horizontal\n justifyContent=\"space-between\"\n key={item.value}\n padding=\"12px\"\n cursor=\"pointer\"\n borderRadius={4}\n backgroundColor={\n index === highlightedIndex\n ? 'color.gray.100'\n : 'transparent'\n }\n onMouseEnter={() => setHighlightedIndex(index)}\n onClick={() => handleSelect(item)}\n {...views?.item}\n >\n <Text>{item.label}</Text>\n <>\n {item.icon && item.icon}\n {item.value === selectedItem.value &&\n showTick &&\n !item.icon && <TickIcon widthHeight={20} />}\n </>\n </Horizontal>\n ))}\n </View>\n )}\n </View>\n )}\n </Horizontal>\n </View>\n </Horizontal>\n );\n};\nexport default ComboBoxView;\n","import {\n useState,\n useRef,\n useEffect,\n useCallback,\n ClipboardEvent,\n KeyboardEvent,\n ChangeEvent,\n} from 'react';\nimport { OTPInputProps } from './OTPInput.props';\nimport { syncTimeouts } from './sync-timeouts';\n\nexport const useOTPInputState = ({\n value: controlledValue,\n defaultValue = '',\n length = 6,\n onChange,\n onChangeText,\n onComplete,\n onKeyDown,\n onKeyPress,\n onBlur,\n onFocus,\n isReadOnly,\n isDisabled,\n pattern,\n stepValues,\n pasteTransformer,\n}: OTPInputProps) => {\n // Determine if component is controlled\n const isControlled = controlledValue !== undefined;\n const initialValue = isControlled ? controlledValue : defaultValue;\n\n // State for the OTP value\n const [value, setInternalValue] = useState<string>(\n initialValue?.slice(0, length) || ''\n );\n\n // State for focus and hover\n const [isFocused, setIsFocused] = useState<boolean>(false);\n const [isHovered, setIsHovered] = useState<boolean>(false);\n\n // State for selection tracking\n const [mirrorSelectionStart, setMirrorSelectionStart] = useState<\n number | null\n >(null);\n const [mirrorSelectionEnd, setMirrorSelectionEnd] = useState<number | null>(\n null\n );\n\n // Refs\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const initialLoadRef = useRef({\n value,\n onChange: onChange || (() => {}),\n isIOS:\n typeof window !== 'undefined' &&\n window?.CSS?.supports?.('-webkit-touch-callout', 'none'),\n });\n const inputMetadataRef = useRef<{\n prev: [number | null, number | null, 'none' | 'forward' | 'backward'];\n }>({\n prev: [null, null, 'none' as 'none' | 'forward' | 'backward'],\n });\n\n // Create regexp for validation\n const regexp = pattern\n ? typeof pattern === 'string'\n ? new RegExp(pattern)\n : pattern\n : null;\n\n // Sync with controlled value\n useEffect(() => {\n if (isControlled && controlledValue !== value) {\n setInternalValue(controlledValue?.slice(0, length) || '');\n }\n }, [isControlled, controlledValue, length, value]);\n\n // Handle value changes with completion check\n const setValue = useCallback(\n (newValue: string) => {\n // If step values are provided, find the closest step\n let valueToSet = newValue;\n\n if (stepValues && stepValues.length > 0 && newValue) {\n // Convert to number for comparison\n const numValue = parseInt(newValue, 10);\n if (!isNaN(numValue)) {\n // Find the closest step value\n let closest = stepValues[0];\n let minDiff = Math.abs(numValue - closest);\n\n for (let i = 1; i < stepValues.length; i++) {\n const diff = Math.abs(numValue - stepValues[i]);\n if (diff < minDiff) {\n minDiff = diff;\n closest = stepValues[i];\n }\n }\n\n // Convert back to string\n valueToSet = closest.toString();\n }\n }\n\n // Always update internal state for both controlled and uncontrolled components\n setInternalValue(valueToSet);\n\n // Call onChange if provided\n if (onChange) {\n onChange(valueToSet);\n }\n\n // Call onChangeText if provided\n if (onChangeText) {\n onChangeText(valueToSet);\n }\n\n // Check if the OTP is complete and call onComplete if provided\n if (onComplete && valueToSet.length === length) {\n onComplete(valueToSet);\n }\n },\n [onChange, onChangeText, onComplete, length, stepValues]\n );\n\n // Set up input ref\n const setInputRef = useCallback((ref: HTMLInputElement | null) => {\n // We can't directly assign to inputRef.current, so we use this workaround\n if (ref && inputRef.current !== ref) {\n // Store the reference without directly assigning\n Object.defineProperty(inputRef, 'current', {\n value: ref,\n writable: true,\n });\n }\n }, []);\n\n // Event handlers\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const newValue = e.currentTarget.value.slice(0, length);\n if (newValue.length > 0 && regexp && !regexp.test(newValue)) {\n e.preventDefault();\n return;\n }\n\n // Always update the value\n setValue(newValue);\n\n // Update the input field value directly to ensure it's always in sync\n if (inputRef.current) {\n inputRef.current.value = newValue;\n }\n },\n [length, regexp, setValue, inputRef]\n );\n\n const handleFocus = useCallback(() => {\n if (inputRef.current) {\n const start = Math.min(inputRef.current.value.length, length - 1);\n const end = inputRef.current.value.length;\n inputRef.current?.setSelectionRange(start, end);\n setMirrorSelectionStart(start);\n setMirrorSelectionEnd(end);\n }\n setIsFocused(true);\n }, [length]);\n\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const handleKeyDown = useCallback((_: KeyboardEvent<HTMLInputElement>) => {\n // Handle special keys like backspace, arrows, etc.\n // This is handled by the browser for the single input\n if (onKeyDown) {\n onKeyDown(_);\n }\n }, []);\n\n const handleKeyPress = useCallback((e: KeyboardEvent<HTMLInputElement>) => {\n // Handle key press events\n // This is handled by the browser for the single input\n if (onKeyPress) {\n onKeyPress(e);\n }\n }, []);\n\n const handlePaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n const input = inputRef.current;\n if (!e.clipboardData || !input) {\n return;\n }\n\n const _content = e.clipboardData.getData('text/plain');\n const content = pasteTransformer ? pasteTransformer(_content) : _content;\n e.preventDefault();\n\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n const isReplacing = start !== end;\n\n const newValueUncapped = isReplacing\n ? value.slice(0, start) + content + value.slice(end) // Replacing\n : value.slice(0, start) + content + value.slice(start); // Inserting\n const newValue = newValueUncapped.slice(0, length);\n\n if (newValue.length > 0 && regexp && !regexp.test(newValue)) {\n return;\n }\n\n // Always update both the input value and the state\n input.value = newValue;\n setValue(newValue);\n\n // Also update the internal state directly to ensure consistency\n setInternalValue(newValue);\n\n const _start = Math.min(newValue.length, length - 1);\n const _end = newValue.length;\n\n input.setSelectionRange(_start, _end);\n setMirrorSelectionStart(_start);\n setMirrorSelectionEnd(_end);\n },\n [length, pasteTransformer, regexp, setValue, value, setInternalValue]\n );\n\n // Effects for selection tracking and other behaviors\n useEffect(() => {\n const input = inputRef.current;\n const container = containerRef.current;\n\n if (!input || !container) {\n return;\n }\n\n // Sync input value\n if (\n initialLoadRef.current.value !== input.value &&\n initialLoadRef.current.onChange\n ) {\n initialLoadRef.current.onChange(input.value);\n }\n\n // Previous selection\n inputMetadataRef.current.prev = [\n input.selectionStart,\n input.selectionEnd,\n input.selectionDirection as 'none' | 'forward' | 'backward',\n ];\n\n function onDocumentSelectionChange() {\n if (document.activeElement !== input) {\n setMirrorSelectionStart(null);\n setMirrorSelectionEnd(null);\n return;\n }\n\n // Aliases\n const _s = input?.selectionStart ?? null;\n const _e = input?.selectionEnd ?? null;\n const _dir = input?.selectionDirection ?? null;\n const _ml = input?.maxLength ?? 0;\n const _val = input?.value ?? '';\n const _prev = inputMetadataRef.current.prev;\n\n // Algorithm\n let start = -1;\n let end = -1;\n let direction: 'forward' | 'backward' | 'none' = 'none';\n if (_val.length !== 0 && _s !== null && _e !== null) {\n const isSingleCaret = _s === _e;\n const isInsertMode = _s === _val.length && _val.length < _ml;\n\n if (isSingleCaret && !isInsertMode) {\n const c = _s;\n if (c === 0) {\n start = 0;\n end = 1;\n direction = 'forward';\n } else if (c === _ml) {\n start = c - 1;\n end = c;\n direction = 'backward';\n } else if (_ml > 1 && _val.length > 1) {\n let offset = 0;\n if (_prev[0] !== null && _prev[1] !== null) {\n direction = c < _prev[1] ? 'backward' : 'forward';\n const wasPreviouslyInserting =\n _prev[0] === _prev[1] && _prev[0] < _ml;\n if (direction === 'backward' && !wasPreviouslyInserting) {\n offset = -1;\n }\n }\n\n start = offset + c;\n end = offset + c + 1;\n }\n }\n\n if (start !== -1 && end !== -1 && start !== end && inputRef.current) {\n inputRef.current.setSelectionRange(start, end, direction);\n }\n }\n\n // Finally, update the state\n const s = start !== -1 ? start : _s;\n const e = end !== -1 ? end : _e;\n const dir = direction !== 'none' ? direction : _dir;\n setMirrorSelectionStart(s);\n setMirrorSelectionEnd(e);\n // Store the previous selection value\n inputMetadataRef.current.prev = [\n s,\n e,\n dir as 'none' | 'forward' | 'backward',\n ];\n }\n\n document.addEventListener('selectionchange', onDocumentSelectionChange, {\n capture: true,\n });\n\n // Set initial mirror state\n onDocumentSelectionChange();\n document.activeElement === input && setIsFocused(true);\n\n // Track root height\n const updateRootHeight = () => {\n if (container) {\n container.style.setProperty('--root-height', `${input.clientHeight}px`);\n }\n };\n updateRootHeight();\n const resizeObserver = new (window as any).ResizeObserver(updateRootHeight);\n resizeObserver.observe(input);\n\n return () => {\n document.removeEventListener(\n 'selectionchange',\n onDocumentSelectionChange,\n { capture: true }\n );\n resizeObserver.disconnect();\n };\n }, []);\n\n // Effects for updating selection state\n useEffect(() => {\n syncTimeouts(() => {\n // Forcefully remove :autofill state\n inputRef.current?.dispatchEvent(new Event('input'));\n\n // Update the selection state\n const s = inputRef.current?.selectionStart;\n const e = inputRef.current?.selectionEnd;\n const dir = inputRef.current?.selectionDirection;\n if (s !== null && e !== null && s !== undefined && e !== undefined) {\n setMirrorSelectionStart(s);\n setMirrorSelectionEnd(e);\n inputMetadataRef.current.prev = [\n s,\n e,\n (dir as 'none' | 'forward' | 'backward') || 'none',\n ];\n }\n });\n }, [value, isFocused]);\n\n return {\n value,\n setValue,\n isFocused,\n setIsFocused,\n isHovered,\n setIsHovered,\n inputRef,\n containerRef,\n mirrorSelectionStart,\n mirrorSelectionEnd,\n setMirrorSelectionStart,\n setMirrorSelectionEnd,\n setInputRef,\n handleChange,\n handleFocus,\n handleBlur,\n handleKeyDown,\n handleKeyPress,\n handlePaste,\n };\n};\n","export function syncTimeouts(cb: (...args: any[]) => unknown): any[] {\n const t1 = setTimeout(cb, 0); // For faster machines\n const t2 = setTimeout(cb, 10);\n const t3 = setTimeout(cb, 50);\n return [t1, t2, t3];\n}\n","import React, { useEffect, createContext } from 'react';\nimport { Input, useTheme } from 'app-studio';\nimport { FieldContainer } from '../../Input/FieldContainer/FieldContainer';\nimport { FieldContent } from '../../Input/FieldContent/FieldContent';\nimport { FieldLabel } from '../../Input/FieldLabel/FieldLabel';\nimport { Horizontal } from 'app-studio';\nimport { View } from 'app-studio';\nimport { OTPInputViewProps } from './OTPInput.props';\n\n// Create a context for OTP input slots\nexport const OTPInputContext = createContext<{\n slots: Array<{\n char: string | null;\n placeholderChar: string | null;\n isActive: boolean;\n hasFakeCaret: boolean;\n }>;\n isFocused: boolean;\n isHovering: boolean;\n}>({ slots: [], isFocused: false, isHovering: false });\n\n// CSS for noscript fallback\nconst NOSCRIPT_CSS_FALLBACK = `\n@keyframes blink {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0; }\n}\n\n[data-input-otp] {\n --nojs-bg: white !important;\n --nojs-fg: black !important;\n\n background-color: var(--nojs-bg) !important;\n color: var(--nojs-fg) !important;\n caret-color: var(--nojs-fg) !important;\n letter-spacing: .25em !important;\n text-align: center !important;\n border: 1px solid var(--nojs-fg) !important;\n border-radius: 4px !important;\n width: 100% !important;\n}\n`;\n\n// Helper function to safely insert CSS rules\nfunction safeInsertRule(sheet: CSSStyleSheet, rule: string) {\n try {\n sheet.insertRule(rule);\n } catch {\n console.error('input-otp could not insert CSS rule:', rule);\n }\n}\n\nconst OTPInputView: React.FC<\n OTPInputViewProps & {\n setInputRef: (ref: HTMLInputElement | null) => void;\n inputRef: React.RefObject<HTMLInputElement>;\n containerRef: React.RefObject<HTMLDivElement>;\n mirrorSelectionStart: number | null;\n mirrorSelectionEnd: number | null;\n setMirrorSelectionStart: (value: number | null) => void;\n setMirrorSelectionEnd: (value: number | null) => void;\n handlePaste: (e: React.ClipboardEvent<HTMLInputElement>) => void;\n handleChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n handleFocus: () => void;\n handleBlur: () => void;\n handleKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n stepValues?: number[];\n handleKeyPress: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n }\n> = ({\n id,\n name,\n label,\n value = '',\n length = 6,\n onChange,\n onChangeText,\n onComplete,\n helperText,\n placeholder = '',\n shadow,\n views = {},\n size = 'md',\n shape = 'rounded',\n variant = 'outline',\n gap = 8,\n type = 'text',\n error = false,\n isFocused = false,\n isHovered = false,\n isDisabled = false,\n isReadOnly = false,\n isAutoFocus = false,\n setValue,\n setIsFocused,\n setIsHovered,\n inputRef,\n containerRef,\n mirrorSelectionStart,\n mirrorSelectionEnd,\n setMirrorSelectionStart,\n setMirrorSelectionEnd,\n handlePaste,\n handleChange,\n handleFocus,\n handleBlur,\n handleKeyDown,\n handleKeyPress,\n secureTextEntry,\n isFirstColumn,\n stepValues,\n setInputRef,\n onBlur = () => {},\n onClick = () => {},\n onFocus = () => {},\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ...props\n}) => {\n useTheme(); // Initialize theme context\n const showLabel = !!label;\n\n // Create context value for slots\n const contextValue = React.useMemo(() => {\n return {\n slots: Array.from({ length }).map((_, slotIdx) => {\n const isActive =\n isFocused &&\n mirrorSelectionStart !== null &&\n mirrorSelectionEnd !== null &&\n ((mirrorSelectionStart === mirrorSelectionEnd &&\n slotIdx === mirrorSelectionStart) ||\n (slotIdx >= mirrorSelectionStart && slotIdx < mirrorSelectionEnd));\n\n const char = value[slotIdx] !== undefined ? value[slotIdx] : null;\n const placeholderChar =\n value[0] !== undefined ? null : placeholder?.[slotIdx] ?? null;\n\n return {\n char,\n placeholderChar,\n isActive,\n hasFakeCaret: isActive && char === null,\n };\n }),\n isFocused,\n isHovering: !isDisabled && isHovered,\n };\n }, [\n isFocused,\n isHovered,\n isDisabled,\n length,\n mirrorSelectionEnd,\n mirrorSelectionStart,\n placeholder,\n value,\n ]);\n\n // Auto-focus the input on mount\n useEffect(() => {\n if (isAutoFocus && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isAutoFocus, inputRef]);\n\n // Add CSS styles for OTP input\n useEffect(() => {\n if (!document.getElementById('input-otp-style')) {\n const styleEl = document.createElement('style');\n styleEl.id = 'input-otp-style';\n document.head.appendChild(styleEl);\n\n if (styleEl.sheet) {\n const autofillStyles =\n 'background: transparent !important; color: transparent !important; border-color: transparent !important; opacity: 0 !important; box-shadow: none !important; -webkit-box-shadow: none !important; -webkit-text-fill-color: transparent !important;';\n\n // Add blink animation\n safeInsertRule(\n styleEl.sheet,\n `@keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } }`\n );\n\n safeInsertRule(\n styleEl.sheet,\n '[data-input-otp]::selection { background: transparent !important; color: transparent !important; }'\n );\n safeInsertRule(\n styleEl.sheet,\n `[data-input-otp]:autofill { ${autofillStyles} }`\n );\n safeInsertRule(\n styleEl.sheet,\n `[data-input-otp]:-webkit-autofill { ${autofillStyles} }`\n );\n // iOS\n safeInsertRule(\n styleEl.sheet,\n `@supports (-webkit-touch-callout: none) { [data-input-otp] { letter-spacing: -.6em !important; font-weight: 100 !important; font-stretch: ultra-condensed; font-optical-sizing: none !important; left: -1px !important; right: 1px !important; } }`\n );\n // PWM badges\n safeInsertRule(\n styleEl.sheet,\n `[data-input-otp] + * { pointer-events: all !important; }`\n );\n }\n }\n }, []);\n\n // Render the OTP input slots\n const renderSlots = () => {\n return (\n <Horizontal\n gap={gap}\n width=\"100%\"\n justifyContent=\"center\"\n minHeight={\n size === 'xs'\n ? '32px'\n : size === 'sm'\n ? '36px'\n : size === 'md'\n ? '40px'\n : size === 'lg'\n ? '48px'\n : '56px'\n }\n {...views.container}\n >\n {contextValue.slots.map((slot, index) => (\n <FieldContent\n key={`${id || name}-${index}`}\n size={size}\n error={error}\n shape={shape}\n views={views}\n variant={variant}\n value={slot.char || ''}\n color={'theme.primary'}\n isHovered={isHovered}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isFocused={slot.isActive}\n showLabel={false}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n justifyContent=\"center\"\n alignItems=\"center\"\n width=\"100%\"\n position=\"relative\"\n height={\n size === 'xs'\n ? '32px'\n : size === 'sm'\n ? '36px'\n : size === 'md'\n ? '40px'\n : size === 'lg'\n ? '48px'\n : '56px'\n }\n {...views.container}\n >\n {slot.char ? (\n <View\n textAlign=\"center\"\n fontSize={\n size === 'xs'\n ? '14px'\n : size === 'sm'\n ? '16px'\n : size === 'md'\n ? '18px'\n : size === 'lg'\n ? '20px'\n : '24px'\n }\n fontWeight=\"medium\"\n {...views.text}\n >\n {type === 'password' ? '•' : slot.char}\n </View>\n ) : slot.placeholderChar ? (\n <View\n textAlign=\"center\"\n fontSize={\n size === 'xs'\n ? '14px'\n : size === 'sm'\n ? '16px'\n : size === 'md'\n ? '18px'\n : size === 'lg'\n ? '20px'\n : '24px'\n }\n color=\"color.gray.400\"\n opacity={0.5}\n {...views.text}\n >\n {slot.placeholderChar}\n </View>\n ) : null}\n {slot.hasFakeCaret && (\n <View\n position=\"absolute\"\n width=\"2px\"\n height=\"60%\"\n backgroundColor=\"theme.primary\"\n animation=\"blink 1s step-start infinite\"\n style={{\n animationName: 'blink',\n animationDuration: '1s',\n animationIterationCount: 'infinite',\n animationTimingFunction: 'step-start',\n }}\n />\n )}\n </FieldContent>\n ))}\n </Horizontal>\n );\n };\n\n // Input style for the hidden input\n const inputStyle: React.CSSProperties = {\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n textAlign: 'center',\n opacity: '1',\n color: 'transparent',\n pointerEvents: 'all',\n background: 'transparent',\n caretColor: 'transparent',\n border: '0 solid transparent',\n outline: '0 solid transparent',\n boxShadow: 'none',\n lineHeight: '1',\n letterSpacing: '-.5em',\n fontSize: 'var(--root-height)',\n fontFamily: 'monospace',\n fontVariantNumeric: 'tabular-nums',\n };\n\n return (\n <>\n <noscript>\n <style>{NOSCRIPT_CSS_FALLBACK}</style>\n </noscript>\n\n <FieldContainer\n helperText={helperText}\n error={error}\n views={views}\n {...props}\n >\n {showLabel && (\n <FieldLabel\n htmlFor={id}\n color={'theme.primary'}\n error={error}\n {...views.label}\n >\n {label}\n </FieldLabel>\n )}\n\n <View\n ref={containerRef}\n data-input-otp-container\n position=\"relative\"\n cursor={isDisabled ? 'default' : 'text'}\n userSelect=\"none\"\n pointerEvents=\"none\"\n >\n <OTPInputContext.Provider value={contextValue}>\n {renderSlots()}\n </OTPInputContext.Provider>\n\n <View position=\"absolute\" inset={0} pointerEvents=\"none\">\n <Input\n ref={(ref) => setInputRef(ref as any)}\n data-input-otp\n data-input-otp-placeholder-shown={value.length === 0 || undefined}\n data-input-otp-mss={mirrorSelectionStart}\n data-input-otp-mse={mirrorSelectionEnd}\n id={id || name}\n name={name}\n type={type === 'password' ? 'password' : 'text'}\n inputMode={type !== 'password' ? 'numeric' : undefined}\n pattern=\"[0-9]*\"\n maxLength={length}\n readOnly={isReadOnly}\n disabled={isDisabled}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onClick={onClick}\n onMouseOver={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n autoComplete=\"one-time-code\"\n aria-label={`OTP input with ${length} digits`}\n style={inputStyle}\n {...views.input}\n />\n </View>\n </View>\n </FieldContainer>\n </>\n );\n};\n\nexport default OTPInputView;\n","import React, { createContext, useContext, useRef, useEffect } from 'react';\nimport { FormikConfig, useFormikContext } from 'formik';\nimport { Form as $Form } from 'app-studio';\n\nexport const debounce: (...args: any) => void = (\n func: (...args: any) => void,\n timeout = 300\n) => {\n let timer: any;\n return (...args: any) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n func(...args);\n }, timeout);\n };\n};\n\ninterface CustomFormProps<T> extends FormikConfig<T> {\n autoFocus?: boolean;\n initFocus?: string;\n}\n\ninterface FocusContextType {\n active: boolean;\n focusNextInput: (name: string) => void;\n setInputRef: (name: string, ref: HTMLInputElement | null) => void;\n handleSubmitEditing: (name: string) => void;\n getReturnKeyType: (name: string) => 'next' | 'done';\n}\n\ninterface CustomFormProps<T> extends FormikConfig<T> {\n autoFocus?: boolean;\n initFocus?: string;\n}\n\ninterface FocusContextType {\n active: boolean;\n focusNextInput: (name: string) => void;\n setInputRef: (name: string, ref: HTMLInputElement | null) => void;\n}\n\nconst FocusContext = createContext<FocusContextType>({\n active: false,\n focusNextInput: () => {},\n setInputRef: () => {},\n handleSubmitEditing: () => {},\n getReturnKeyType: () => 'next',\n});\n\nexport const useFormFocus = () => useContext(FocusContext);\n\nexport const FormikForm = <T extends {}>({\n children,\n autoFocus = false,\n initFocus,\n onChange = () => {},\n ...props\n}: CustomFormProps<T> & any) => {\n const formik: any = useFormikContext();\n useEffect(() => {\n onChange(formik.values);\n }, [formik.values]);\n\n const inputRefs = useRef<Record<string, HTMLInputElement | null>>({});\n const inputNames = useRef<string[]>([]);\n\n const setInputRef = (name: string, ref: HTMLInputElement | null) => {\n inputRefs.current[name] = ref;\n if (!inputNames.current.includes(name)) {\n inputNames.current.push(name);\n }\n };\n\n const focusNextInput = (currentName: string) => {\n if (autoFocus) {\n const currentIndex = inputNames.current.indexOf(currentName);\n const nextIndex = currentIndex + 1;\n if (nextIndex < inputNames.current.length) {\n inputRefs.current[inputNames.current[nextIndex]]?.focus();\n } else if (formik.onSubmit) {\n formik.onSubmit(formik.values);\n }\n }\n };\n\n const contextValue = {\n active: autoFocus,\n focusNextInput,\n setInputRef,\n handleSubmitEditing: focusNextInput,\n getReturnKeyType: (name: string) =>\n inputNames.current.indexOf(name) === inputNames.current.length - 1\n ? 'done'\n : 'next',\n };\n\n useEffect(() => {\n if (autoFocus) {\n if (initFocus && inputRefs.current[initFocus]) {\n inputRefs.current[initFocus]?.focus();\n } else if (inputNames.current[0]) {\n inputRefs.current[inputNames.current[0]]?.focus();\n }\n }\n }, [autoFocus, initFocus]);\n\n return (\n <FocusContext.Provider value={contextValue}>\n <$Form {...props}>{children}</$Form>\n </FocusContext.Provider>\n );\n};\n","import React from 'react';\nimport { useFormikContext, FormikValues, getIn } from 'formik';\n\nimport { useFormFocus } from './Formik.Form';\n\nconst getInputTypeProps = (type: string) => {\n switch (type) {\n case 'email':\n return {\n autoCorrect: 'off',\n // keyboardType: 'email-address',\n inputMode: 'email',\n autoCapitalize: 'none',\n };\n case 'password':\n return {\n autoCorrect: 'off',\n secureTextEntry: true,\n autoCapitalize: 'none',\n };\n case 'digits':\n return {\n // keyboardType: 'phone-pad',\n inputMode: 'tel',\n };\n case 'numeric':\n return {\n // keyboardType: 'phone-pad',\n inputMode: 'numeric',\n };\n case 'name':\n return {\n autoCorrect: 'off',\n };\n default:\n return {};\n }\n};\nexport const useFormikInput = ({ name, type, ...props }: any) => {\n const focus = useFormFocus();\n const {\n touched,\n errors,\n submitCount,\n values,\n setFieldTouched,\n setFieldValue,\n } = useFormikContext<FormikValues>();\n\n const onChangeText = (text: string) => {\n setFieldValue(name, text);\n props.onChangeText?.(text);\n };\n\n const onChange = (value: any) => {\n setFieldValue(name, value);\n props.onChange?.(value);\n };\n\n const handleBlur = () => {\n setFieldTouched(name, true);\n };\n\n const handleKeyPress = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n focus.focusNextInput(name);\n }\n };\n\n const isText = ['text', 'password', 'email', 'digits'].includes(type);\n const error =\n getIn(touched, name) || submitCount > 0 ? getIn(errors, name) : undefined;\n const value = getIn(values, name);\n\n return {\n ...getInputTypeProps(type),\n ...props,\n value,\n error,\n onBlur: handleBlur,\n onKeyPress: handleKeyPress,\n ...(isText ? { onChangeText } : { onChange }),\n ...(focus.active ? { handleKeyPress } : {}),\n };\n};\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { SliderProps } from './Slider.props';\n\n// Clamp value between min and max\nconst clamp = (value: number, min: number, max: number) =>\n Math.min(Math.max(value, min), max);\n\n// Calculate value based on position, track dimensions, min, max, step\nconst calculateValue = (\n position: number,\n trackRect: DOMRect,\n min: number,\n max: number,\n step: number,\n orientation: 'horizontal' | 'vertical',\n stepValues?: number[]\n): number => {\n const range = max - min;\n let percentage: number;\n\n if (orientation === 'horizontal') {\n const trackLength = trackRect.width;\n const relativePosition = position - trackRect.left;\n percentage = clamp(relativePosition / trackLength, 0, 1);\n } else {\n // Vertical: top is max, bottom is min (reversed from the provided code)\n const trackLength = trackRect.height;\n const relativePosition = trackRect.bottom - position; // Y position relative to track bottom\n percentage = clamp(relativePosition / trackLength, 0, 1);\n }\n\n // If stepValues are provided, find the closest value in the array\n if (stepValues && stepValues.length > 0) {\n const rawValue = min + percentage * range;\n\n // Find the closest value in stepValues\n let closestValue = stepValues[0];\n let minDistance = Math.abs(rawValue - closestValue);\n\n for (let i = 1; i < stepValues.length; i++) {\n const distance = Math.abs(rawValue - stepValues[i]);\n if (distance < minDistance) {\n minDistance = distance;\n closestValue = stepValues[i];\n }\n }\n\n return closestValue;\n } else {\n // Use regular step logic\n const rawValue = min + percentage * range;\n const steppedValue = Math.round(rawValue / step) * step;\n // Final clamp to ensure step rounding doesn't exceed bounds\n return clamp(steppedValue, min, max);\n }\n};\n\nexport const useSliderState = ({\n min = 0,\n max = 100,\n step = 1,\n value: controlledValue = 0,\n defaultValue,\n onChange,\n onDrag,\n orientation = 'horizontal',\n isDisabled = false,\n stepValues,\n}: SliderProps) => {\n const initialValue = clamp(controlledValue ?? defaultValue ?? min, min, max);\n const [internalValue, setInternalValue] = useState(initialValue);\n const [isDragging, setIsDragging] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n\n const trackRef = useRef<HTMLDivElement>(null);\n const thumbRef = useRef<HTMLDivElement>(null);\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n // Update internal state if controlled value changes\n useEffect(() => {\n if (isControlled) {\n setInternalValue(clamp(controlledValue, min, max));\n }\n }, [controlledValue, isControlled, min, max]);\n\n const updateValue = useCallback(\n (newValue: number) => {\n const clampedValue = clamp(newValue, min, max);\n if (!isControlled) {\n setInternalValue(clampedValue);\n }\n if (onChange && clampedValue !== currentValue) {\n onChange(clampedValue);\n }\n if (isDragging && onDrag) {\n onDrag(clampedValue);\n }\n },\n [isControlled, min, max, onChange, currentValue, isDragging, onDrag]\n );\n\n const handleInteraction = useCallback(\n (event: MouseEvent | TouchEvent | React.MouseEvent | React.TouchEvent) => {\n if (isDisabled || !trackRef.current) return;\n\n const trackRect = trackRef.current.getBoundingClientRect();\n let position: number;\n\n if ('touches' in event) {\n position =\n orientation === 'horizontal'\n ? event.touches[0].clientX\n : event.touches[0].clientY;\n } else {\n position = orientation === 'horizontal' ? event.clientX : event.clientY;\n }\n\n const newValue = calculateValue(\n position,\n trackRect,\n min,\n max,\n step,\n orientation,\n stepValues\n );\n updateValue(newValue);\n },\n [min, max, step, orientation, updateValue, isDisabled, stepValues]\n );\n\n const handleMouseDown = useCallback(\n (event: React.MouseEvent | React.TouchEvent) => {\n if (isDisabled) return;\n event.preventDefault(); // Prevent text selection during drag\n setIsDragging(true);\n handleInteraction(event); // Update value immediately on click/touch\n\n const handleMouseMove = (moveEvent: MouseEvent | TouchEvent) => {\n handleInteraction(moveEvent);\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.removeEventListener('touchmove', handleMouseMove);\n document.removeEventListener('touchend', handleMouseUp);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n document.addEventListener('touchmove', handleMouseMove);\n document.addEventListener('touchend', handleMouseUp);\n },\n [handleInteraction, isDisabled]\n );\n\n // Allow clicking directly on the track\n const handleTrackMouseDown = useCallback(\n (event: React.MouseEvent | React.TouchEvent) => {\n // Prevent triggering if click is on the thumb itself\n if (thumbRef.current && thumbRef.current.contains(event.target as Node)) {\n return;\n }\n handleMouseDown(event);\n },\n [handleMouseDown]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (isDisabled) return;\n let newValue = currentValue;\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = currentValue - step;\n break;\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = currentValue + step;\n break;\n case 'Home':\n newValue = min;\n break;\n case 'End':\n newValue = max;\n break;\n default:\n return; // Exit if key is not handled\n }\n event.preventDefault(); // Prevent page scroll\n updateValue(newValue);\n },\n [currentValue, min, max, step, updateValue, isDisabled]\n );\n\n const range = max - min;\n const thumbPositionPercent =\n range === 0 ? 0 : ((currentValue - min) / range) * 100;\n\n return {\n currentValue,\n isDragging,\n isHovered,\n setIsHovered,\n trackRef,\n thumbRef,\n handleThumbMouseDown: handleMouseDown,\n handleTrackMouseDown,\n handleKeyDown,\n thumbPositionPercent,\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { Orientation, Shape, Size, Variant } from './Slider.type';\n\nexport const SliderSizes: Record<Size, ViewProps> = {\n xs: {\n height: 4,\n width: '100%',\n },\n sm: {\n height: 6,\n width: '100%',\n },\n md: {\n height: 8,\n width: '100%',\n },\n lg: {\n height: 10,\n width: '100%',\n },\n xl: {\n height: 12,\n width: '100%',\n },\n};\n\nexport const ThumbSizes: Record<Size, ViewProps> = {\n xs: {\n width: 12,\n height: 12,\n },\n sm: {\n width: 16,\n height: 16,\n },\n md: {\n width: 20,\n height: 20,\n },\n lg: {\n width: 24,\n height: 24,\n },\n xl: {\n width: 28,\n height: 28,\n },\n};\n\nexport const SliderShapes: Record<Shape, number | string> = {\n sharp: 0,\n rounded: 4,\n pillShaped: 24,\n};\n\nexport const getSlider = (themeMode: string): Record<Variant, ViewProps> => {\n return {\n default: {\n backgroundColor: 'color.blueGray.200',\n },\n outline: {\n backgroundColor: 'transparent',\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: 'color.blueGray.300',\n },\n };\n // Add dark mode conditional styling here\n};\n\n// For backward compatibility\nexport const SliderVariants = getSlider('light');\n\n// Maps Size enum to track height/width and thumb size for the new implementation\nexport const EnhancedSliderSizes: Record<\n Size,\n { trackCrossAxisSize: number; thumbSize: number }\n> = {\n xs: { trackCrossAxisSize: 4, thumbSize: 12 },\n sm: { trackCrossAxisSize: 6, thumbSize: 16 },\n md: { trackCrossAxisSize: 8, thumbSize: 20 },\n lg: { trackCrossAxisSize: 10, thumbSize: 24 },\n xl: { trackCrossAxisSize: 12, thumbSize: 28 },\n};\n\n// Basic styles for horizontal and vertical orientation\nexport const OrientationStyles: Record<Orientation, ViewProps> = {\n horizontal: {\n width: '100%',\n minWidth: '120px', // Ensure a minimum clickable area\n height: 'auto', // Height determined by track/thumb size + padding\n flexDirection: 'row',\n paddingVertical: 8, // Add padding for easier thumb interaction\n },\n vertical: {\n height: '100%',\n minHeight: '120px', // Ensure a minimum clickable area\n width: 'auto', // Width determined by track/thumb size + padding\n flexDirection: 'column-reverse', // Place track visually bottom-to-top\n paddingHorizontal: 8, // Add padding for easier thumb interaction\n },\n};\n","import React from 'react';\nimport { View, Text, useTheme, Center, Vertical, Horizontal } from 'app-studio';\nimport { HelperText } from '../../Input/HelperText/HelperText';\nimport { SliderViewProps } from './Slider.props';\nimport {\n SliderSizes,\n SliderShapes,\n SliderVariants,\n ThumbSizes,\n EnhancedSliderSizes,\n OrientationStyles,\n} from './Slider.style';\n\nexport const SliderView: React.FC<SliderViewProps> = ({\n min = 0,\n max = 100,\n step = 1,\n currentValue,\n stepValues,\n shape = 'rounded',\n size = 'md',\n variant = 'default',\n orientation = 'horizontal',\n isDisabled = false,\n showValue = false,\n showTooltip = false,\n backgroundColor = 'theme.primary',\n label,\n helperText,\n themeMode: elementMode,\n shadow = {},\n isDragging,\n isHovered,\n setIsHovered,\n trackRef,\n thumbRef,\n handleThumbMouseDown,\n handleTrackMouseDown,\n handleKeyDown,\n thumbPositionPercent,\n ariaLabel = 'Slider',\n views = {\n container: {},\n track: {},\n progress: {},\n filledTrack: {},\n thumb: {},\n label: {},\n valueLabel: {},\n stepMarks: {},\n tooltip: {},\n },\n ...props\n}) => {\n const { getColor, themeMode } = useTheme();\n const themeColor = getColor(backgroundColor, {\n themeMode: elementMode || themeMode,\n });\n const disabledColor = getColor('theme.disabled', {\n themeMode: elementMode || themeMode,\n });\n const trackColor = getColor(\n SliderVariants[variant].backgroundColor as string,\n { themeMode: elementMode || themeMode }\n );\n\n const isVertical = orientation === 'vertical';\n const { trackCrossAxisSize, thumbSize } = EnhancedSliderSizes[size] || {\n trackCrossAxisSize: SliderSizes[size].height as number,\n thumbSize: (ThumbSizes[size].width as number) || 16,\n };\n\n // For backward compatibility with the old implementation\n const legacyView = (\n <Vertical width=\"100%\" gap={8} {...views.container} {...props}>\n {label && (\n <Horizontal justifyContent=\"space-between\" alignItems=\"center\">\n <Text fontSize={14} fontWeight={500} {...views.label}>\n {label}\n </Text>\n {showValue && (\n <Text\n fontSize={14}\n color=\"color.blueGray.500\"\n {...views.valueLabel}\n >\n {currentValue}\n </Text>\n )}\n </Horizontal>\n )}\n\n <View\n ref={trackRef}\n position=\"relative\"\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n opacity={isDisabled ? 0.6 : 1}\n onMouseDown={handleTrackMouseDown}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...SliderSizes[size]}\n borderRadius={SliderShapes[shape]}\n backgroundColor={trackColor}\n {...SliderVariants[variant]}\n {...shadow}\n {...views.track}\n >\n {/* Step markers */}\n {stepValues && stepValues.length > 0 && (\n <>\n {stepValues.map((stepValue) => {\n const stepPercentage = ((stepValue - min) / (max - min)) * 100;\n return (\n <View\n key={stepValue}\n position=\"absolute\"\n top=\"50%\"\n left={`${stepPercentage}%`}\n transform=\"translate(-50%, -50%)\"\n width={4}\n height={4}\n borderRadius=\"50%\"\n backgroundColor={isDisabled ? disabledColor : themeColor}\n zIndex={1}\n {...views.stepMarks}\n />\n );\n })}\n </>\n )}\n\n {/* Progress bar */}\n <View\n position=\"absolute\"\n top={0}\n left={0}\n height=\"100%\"\n width={`${thumbPositionPercent}%`}\n backgroundColor={isDisabled ? disabledColor : themeColor}\n borderRadius={SliderShapes[shape]}\n transition=\"width 0.1s ease-in-out\"\n {...views.progress}\n {...views.filledTrack}\n />\n\n {/* Thumb */}\n <View\n ref={thumbRef}\n role=\"slider\"\n tabIndex={isDisabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n aria-orientation={orientation}\n aria-disabled={isDisabled}\n aria-label={ariaLabel}\n position=\"absolute\"\n top=\"50%\"\n left={`${thumbPositionPercent}%`}\n borderRadius=\"50%\"\n backgroundColor=\"color.white\"\n boxShadow=\"0 2px 4px rgba(0, 0, 0, 0.2)\"\n border={`2px solid ${isDisabled ? disabledColor : themeColor}`}\n transition={isDragging ? 'none' : 'transform 0.1s ease-in-out'}\n transform={\n isHovered\n ? 'translate(-50%, -50%) scale(1.1)'\n : 'translate(-50%, -50%)'\n }\n zIndex={2}\n onMouseDown={handleThumbMouseDown}\n onTouchStart={handleThumbMouseDown}\n onKeyDown={handleKeyDown}\n {...ThumbSizes[size]}\n {...views.thumb}\n >\n {/* Tooltip */}\n {showTooltip && (isHovered || isDragging) && (\n <View\n position=\"absolute\"\n bottom=\"100%\"\n left=\"50%\"\n transform=\"translateX(-50%)\"\n marginBottom={8}\n padding=\"4px 8px\"\n backgroundColor=\"color.black\"\n color=\"color.white\"\n borderRadius={4}\n fontSize={12}\n whiteSpace=\"nowrap\"\n zIndex={3}\n {...views.tooltip}\n >\n <Text {...views.tooltip?.text}>\n {currentValue?.toFixed(step < 1 ? 1 : 0)}\n </Text>\n </View>\n )}\n </View>\n </View>\n\n {helperText && <HelperText>{helperText}</HelperText>}\n </Vertical>\n );\n\n // Enhanced view with vertical support and other features\n const enhancedView = (\n <Center\n // Use Center to easily manage orientation layout\n {...OrientationStyles[orientation]}\n position=\"relative\" // Needed for absolute positioning of thumb/tooltip\n onMouseEnter={() => !isDisabled && setIsHovered(true)}\n onMouseLeave={() => !isDisabled && setIsHovered(false)}\n {...props} // Spread remaining view props\n {...views?.container}\n >\n {label && (\n <Horizontal\n justifyContent=\"space-between\"\n alignItems=\"center\"\n marginBottom={8}\n width=\"100%\"\n >\n <Text fontSize={14} fontWeight={500} {...views.label}>\n {label}\n </Text>\n {showValue && (\n <Text\n fontSize={14}\n color=\"color.blueGray.500\"\n {...views.valueLabel}\n >\n {currentValue}\n </Text>\n )}\n </Horizontal>\n )}\n\n <View\n ref={trackRef}\n position=\"relative\"\n borderRadius={trackCrossAxisSize / 2}\n backgroundColor={isDisabled ? disabledColor : trackColor}\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n width={isVertical ? `${trackCrossAxisSize}px` : '100%'}\n height={isVertical ? '100%' : `${trackCrossAxisSize}px`}\n onMouseDown={handleTrackMouseDown}\n onTouchStart={handleTrackMouseDown}\n {...views?.track}\n >\n {/* Step markers */}\n {stepValues && stepValues.length > 0 && (\n <>\n {stepValues.map((stepValue) => {\n const stepPercentage = ((stepValue - min) / (max - min)) * 100;\n return (\n <View\n key={stepValue}\n position=\"absolute\"\n width={4}\n height={4}\n borderRadius=\"50%\"\n backgroundColor={isDisabled ? disabledColor : themeColor}\n zIndex={1}\n {...(isVertical\n ? {\n bottom: `${stepPercentage}%`,\n left: '50%',\n transform: 'translate(-50%, 50%)',\n }\n : {\n left: `${stepPercentage}%`,\n top: '50%',\n transform: 'translate(-50%, -50%)',\n })}\n {...views.stepMarks}\n />\n );\n })}\n </>\n )}\n\n <View\n position=\"absolute\"\n borderRadius={trackCrossAxisSize / 2}\n backgroundColor={isDisabled ? disabledColor : themeColor}\n {...(isVertical\n ? {\n bottom: 0,\n left: 0,\n width: '100%',\n height: `${thumbPositionPercent}%`,\n }\n : {\n top: 0,\n left: 0,\n height: '100%',\n width: `${thumbPositionPercent}%`,\n })}\n {...views?.filledTrack}\n {...views?.progress} // For backward compatibility\n />\n\n <View\n ref={thumbRef}\n role=\"slider\"\n tabIndex={isDisabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n aria-orientation={orientation}\n aria-disabled={isDisabled}\n aria-label={ariaLabel}\n position=\"absolute\"\n width={`${thumbSize}px`}\n height={`${thumbSize}px`}\n borderRadius=\"50%\"\n backgroundColor={isDisabled ? disabledColor : themeColor}\n border={`2px solid ${getColor('color.white')}`}\n boxShadow=\"0 1px 3px rgba(0, 0, 0, 0.2)\"\n cursor={isDisabled ? 'not-allowed' : 'grab'}\n transform={isVertical ? 'translateX(-50%)' : 'translateY(-50%)'}\n zIndex={2}\n transition={isDragging ? 'none' : 'left 0.1s, bottom 0.1s'}\n {...(isVertical\n ? {\n left: '50%',\n bottom: `${thumbPositionPercent}%`,\n }\n : {\n top: '50%',\n left: `${thumbPositionPercent}%`,\n })}\n onMouseDown={handleThumbMouseDown}\n onTouchStart={handleThumbMouseDown}\n onKeyDown={handleKeyDown}\n {...views?.thumb}\n >\n {showTooltip && (isHovered || isDragging) && (\n <View\n position=\"absolute\"\n padding=\"4px 8px\"\n backgroundColor={getColor('color.black')}\n color={getColor('color.white')}\n borderRadius=\"4px\"\n fontSize=\"12px\"\n whiteSpace=\"nowrap\"\n zIndex={3}\n {...(isVertical\n ? {\n left: '100%',\n marginLeft: '8px',\n bottom: '0',\n transform: 'translateY(50%)',\n }\n : {\n bottom: '100%',\n left: '50%',\n marginBottom: '8px',\n transform: 'translateX(-50%)',\n })}\n {...views?.tooltip}\n >\n <Text {...views?.tooltip?.text}>\n {currentValue?.toFixed(step < 1 ? 1 : 0)}\n </Text>\n </View>\n )}\n </View>\n </View>\n\n {helperText && <HelperText marginTop={8}>{helperText}</HelperText>}\n </Center>\n );\n\n // Use the enhanced view if orientation is vertical or showTooltip is true\n // Otherwise use the legacy view for backward compatibility\n return isVertical || showTooltip ? enhancedView : legacyView;\n};\n","import { create } from 'zustand';\nimport { MessageState } from './Message.props';\nimport { MessageType, ShowMessageType } from './Message.type';\n\n// Create your store with the initial state and actions.\nexport const useMessageStore = create<MessageState>((set) => ({\n // initial state\n visible: false,\n title: '',\n subtitle: '',\n variant: 'info',\n isClosable: false,\n views: {},\n action: () => {},\n actionText: '',\n showIcon: false,\n timeout: 3000,\n show: (\n variant,\n title = '',\n subtitle = '',\n isClosable,\n views,\n action,\n actionText,\n showIcon,\n timeout\n ) =>\n set({\n visible: true,\n variant,\n title,\n subtitle,\n isClosable,\n views,\n action,\n actionText,\n showIcon,\n timeout,\n }),\n\n hide: () => set({ visible: false }),\n}));\n\nexport const showMessage = (\n variant: MessageType,\n title?: string,\n subtitle?: string,\n props?: ShowMessageType\n) => {\n useMessageStore\n .getState()\n .show(\n variant,\n title,\n subtitle,\n props?.isClosable,\n props?.views,\n props?.action,\n props?.actionText,\n props?.showIcon,\n props?.timeout\n );\n};\n\nexport const hideMessage = () => {\n useMessageStore.getState().hide();\n};\n","import { ViewProps } from 'app-studio';\nimport { MessageType, Shape, Size } from './Message.type';\n\nexport const ContainerShapes: Record<Shape, ViewProps> = {\n sharp: { borderRadius: 0 },\n rounded: { borderRadius: 4 },\n};\n\nexport const HeaderIconSizes: Record<Size, number> = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 24,\n xl: 28,\n};\n\nexport const Themes: Record<MessageType, any> = {\n info: {\n container: {\n backgroundColor: 'color.blue.200',\n border: 'color.blue.400',\n },\n icon: {\n color: 'color.blue.500',\n name: 'InformationIcon',\n },\n content: {\n color: 'color.blue.500',\n },\n close: {\n color: 'color.blue.500',\n name: 'CloseIcon',\n },\n },\n success: {\n container: {\n backgroundColor: 'color.green.200',\n border: 'color.green.400',\n },\n icon: {\n color: 'color.green.500',\n name: 'SuccessIcon',\n },\n content: {\n color: 'color.green.500',\n },\n close: {\n color: 'color.green.500',\n name: 'CloseIcon',\n },\n },\n error: {\n container: {\n backgroundColor: 'color.red.200',\n border: 'color.red.400',\n },\n icon: {\n color: 'color.red.500',\n name: 'ErrrorIcon',\n },\n content: {\n color: 'color.red.500',\n },\n close: {\n color: 'color.red.500',\n name: 'CloseIcon',\n },\n },\n warning: {\n container: {\n backgroundColor: 'color.orange.200',\n border: 'color.orange.400',\n },\n icon: {\n color: 'color.orange.500',\n name: 'ErrrorIcon',\n },\n content: {\n color: 'color.orange.500',\n },\n close: {\n color: 'color.orange.500',\n name: 'CloseIcon',\n },\n },\n};\n","import React, { useEffect } from 'react';\nimport { Vertical } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { View } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { Themes } from './Message.style';\nimport { MessageProps } from './Message.props';\nimport {\n CloseIcon,\n WarningIcon,\n SuccessIcon,\n ErrorIcon,\n InfoIcon,\n} from '../../Icon/Icon';\n\nexport const MessageView = ({\n variant,\n hide,\n title,\n subtitle,\n theme,\n action,\n actionText,\n showIcon = false,\n isClosable = false,\n timeout = 3000,\n views,\n}: MessageProps) => {\n useEffect(() => {\n if (timeout && !isClosable) {\n const timeId = setTimeout(() => {\n // After 3 seconds set the show value to false\n hide();\n }, timeout);\n\n return () => {\n clearTimeout(timeId);\n };\n }\n\n return;\n }, []);\n\n const Theme = theme ?? Themes;\n const showAction = !!(action && actionText);\n\n const containerStyle = {\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: 8,\n borderColor: `${Theme[variant].container.border}`,\n };\n\n const iconColor = {\n info: '#3b82f6',\n success: '#4ade80',\n warning: '#f97316',\n error: '#ef4444',\n }[variant];\n\n const iconComponent = {\n info: <InfoIcon widthHeight={24} color={iconColor} {...views?.icon} />,\n success: (\n <SuccessIcon widthHeight={24} color={iconColor} {...views?.icon} />\n ),\n warning: (\n <WarningIcon widthHeight={24} color={iconColor} {...views?.icon} />\n ),\n error: <ErrorIcon widthHeight={24} color={iconColor} {...views?.icon} />,\n }[variant];\n\n const isShowIcon = showIcon && iconComponent;\n\n return (\n <Horizontal\n role=\"messageContent\"\n gap={16}\n width={400}\n // safe={true}\n flexWrap=\"nowrap\"\n position={'relative'}\n alignItems=\"center\"\n padding=\"14px 24px 14px 14px\"\n color={`${Theme[variant].content.color}`}\n backgroundColor={`${Theme[variant].container.backgroundColor}`}\n onClick={\n isClosable\n ? () => {}\n : () => {\n hide();\n }\n }\n {...containerStyle}\n {...views?.container}\n >\n {isShowIcon && iconComponent}\n <Vertical gap={8} width=\"100%\">\n <Text size=\"md\" weight=\"semiBold\" {...views?.title}>\n {title}\n </Text>\n {subtitle && (\n <Text size=\"sm\" {...views?.subtitle}>\n {subtitle}\n </Text>\n )}\n </Vertical>\n {showAction && (\n <Text\n marginRight={10}\n onClick={action}\n padding=\"6px 10px\"\n whiteSpace=\"nowrap\"\n {...containerStyle}\n {...views?.actionText}\n >\n {actionText}\n </Text>\n )}\n {isClosable && (\n <View\n position=\"absolute\"\n zIndex={10000}\n right={8}\n top={6}\n onClick={() => {\n hide();\n }}\n {...views?.closingIcon?.container}\n >\n <CloseIcon\n widthHeight={18}\n color={iconColor}\n {...views?.closingIcon?.icon}\n />\n </View>\n )}\n </Horizontal>\n );\n};\n","import React from 'react';\nimport { View, Text, Image, Horizontal, Center } from 'app-studio';\nimport { UploadIcon } from '../../Icon/Icon';\nimport { UploadStateProps, UploadViewProps } from './Uploader.props';\n\nexport const UploadView: React.FC<UploadViewProps & UploadStateProps> = ({\n accept,\n isLoading = false,\n progress = 0,\n icon,\n text,\n previewUrl,\n thumbnailUrl,\n errorMessage,\n fileInputRef,\n videoRef,\n selectedFile,\n handleFileChange,\n handleClick,\n containerProps,\n errorMessageProps,\n progressProps,\n videoProps,\n imageProps,\n iconProps,\n textProps,\n fileType,\n previewUrl: externalPreviewUrl,\n renderError = ({\n errorMessage,\n errorMessageProps,\n themeMode: elementMode,\n }) => (\n <Text\n color=\"red\"\n fontSize={12}\n marginTop={8}\n {...errorMessageProps}\n {...views?.text}\n >\n {errorMessage}\n </Text>\n ),\n renderText = ({ text, textProps }) => (\n <Text marginTop={8} {...textProps} {...views?.text}>\n {text}\n </Text>\n ),\n renderFile = ({ selectedFile, textProps }) => {\n return selectedFile ? (\n <Center\n marginTop={8}\n gap={10}\n flexDirection=\"column\"\n {...views?.container}\n >\n <Text maxLines={2} {...textProps} {...views?.text}>\n {selectedFile.name}\n </Text>\n <Text {...textProps} {...views?.text}>\n ({Math.round(selectedFile.size / 1024)} KB)\n </Text>\n </Center>\n ) : null;\n },\n renderVideo = ({\n selectedFile,\n // thumbnailUrl,\n videoRef,\n videoProps,\n // imageProps,\n }) => {\n return (\n <View width=\"100%\" height=\"100%\" position=\"relative\" {...views?.view}>\n <View\n as=\"video\"\n width=\"100%\"\n height=\"100%\"\n src={selectedFile ? URL.createObjectURL(selectedFile) : undefined}\n style={{ objectFit: 'cover' }}\n ref={videoRef}\n {...videoProps}\n {...views?.view}\n />\n </View>\n );\n },\n renderImage = ({ previewUrl, imageProps }) => {\n console.log('Rendering image with URL:', previewUrl);\n return (\n <View width=\"100%\" height=\"100%\" position=\"relative\" {...views?.view}>\n <Image\n src={previewUrl}\n alt=\"Preview\"\n width=\"100%\"\n height=\"100%\"\n objectFit=\"cover\"\n style={{ maxHeight: '100%', maxWidth: '100%' }}\n {...imageProps}\n {...views?.image}\n />\n </View>\n );\n },\n renderProgress = ({ progress, progressProps }) => {\n return (\n <Horizontal\n gap={8}\n alignItems=\"center\"\n {...progressProps}\n {...views?.horizontal}\n >\n <View\n height={4}\n backgroundColor=\"rgba(0,0,0,0.1)\"\n width=\"100%\"\n borderRadius={2}\n {...views?.view}\n >\n <View\n height={4}\n width={`${progress}%`}\n borderRadius={2}\n backgroundColor=\"#000\"\n {...views?.view}\n />\n </View>\n <Text fontSize={12} {...views?.text}>\n {progress}%\n </Text>\n </Horizontal>\n );\n },\n views = {},\n}) => {\n const finalPreviewUrl = externalPreviewUrl || previewUrl;\n\n // Debug log to help troubleshoot\n // console.log('Uploader state:', {\n // fileType,\n // finalPreviewUrl,\n // selectedFile: selectedFile?.name,\n // progress,\n // });\n\n return (\n <Center\n onClick={handleClick}\n cursor=\"pointer\"\n border=\"1px solid rgba(0,0,0,0.1)\"\n borderRadius={8}\n padding={16}\n flexDirection=\"column\"\n overflow=\"hidden\"\n position=\"relative\"\n height={selectedFile && progress === 100 ? '200px' : 'auto'}\n {...containerProps}\n {...views?.container}\n >\n {/* Image Preview */}\n {progress === 100 &&\n fileType === 'image' &&\n finalPreviewUrl &&\n renderImage({ previewUrl: finalPreviewUrl, imageProps })}\n\n {/* Video Preview */}\n {progress === 100 &&\n fileType === 'video' &&\n thumbnailUrl &&\n renderVideo({\n selectedFile,\n thumbnailUrl,\n videoRef,\n videoProps,\n imageProps,\n })}\n\n {/* File Preview */}\n {progress === 100 &&\n fileType === 'file' &&\n selectedFile &&\n renderFile({ selectedFile, textProps })}\n {progress < 100 &&\n (icon || <UploadIcon widthHeight={32} {...iconProps} />)}\n {!selectedFile && text && renderText({ text, textProps })}\n {isLoading && renderProgress({ progress, progressProps })}\n {errorMessage && renderError({ errorMessage, errorMessageProps })}\n <View\n as=\"input\"\n type=\"file\"\n ref={fileInputRef}\n onChange={handleFileChange}\n accept={accept}\n style={{ display: 'none' }}\n {...views?.view}\n />\n </Center>\n );\n};\n","import { create } from 'zustand';\n\nexport interface ModalItem {\n name: string;\n props: any & { isVisible: boolean };\n overlayProps: any;\n}\n\nexport interface ModalState {\n modals: ModalItem[];\n show: (name: string, modalProps?: any, overlayProps?: any) => void;\n hide: (name?: string) => void;\n onShow: (name: string, props?: any) => void;\n onHide: (name?: string) => void;\n setOnShow: (onShow: (name: string, props?: any) => void) => void;\n setOnHide: (onHide: (name?: string) => void) => void;\n}\n\nexport const useModalStore = create<ModalState>((set) => ({\n modals: [],\n onHide: (name?: string) => name,\n onShow: (name: string, props?: any) => ({ name, props }),\n show: (name, modalProps = {}, overlayProps = {}) => {\n set((state: ModalState) => ({\n ...state,\n modals: [\n ...state.modals,\n {\n name,\n props: { ...modalProps, isVisible: true },\n overlayProps,\n },\n ],\n }));\n },\n hide: (name) => {\n set((state: ModalState) => {\n if (!name) {\n // Hide all modals\n return { modals: [] };\n }\n // Hide specific modal by name\n return {\n ...state,\n modals: state.modals.filter((modal) => modal.name !== name),\n };\n });\n },\n setOnHide: (onHide: (name?: string) => void) => {\n set((state: ModalState) => ({ ...state, onHide }));\n },\n setOnShow: (onShow: (name: string, props?: any) => void) => {\n set((state: ModalState) => ({ ...state, onShow }));\n },\n}));\n\nexport const showModal = (\n name: string,\n modalProps: any = {},\n overlayProps: any = {}\n) => {\n useModalStore.getState().show(name, modalProps, overlayProps);\n useModalStore.getState().onShow(name, modalProps);\n};\n\nexport const hideModal = (name?: string) => {\n console.log('hideModal', name);\n useModalStore.getState().onHide(name);\n\n useModalStore.getState().hide(typeof name === 'string' ? name : undefined);\n};\n","/**\n * Modal Styles\n *\n * Defines the styles for the Modal component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Shape, Size } from './Modal.type';\n\n/**\n * Container shape configurations for the Modal component\n * Following the 4px grid system\n */\nexport const ContainerShapes: Record<Shape, ViewProps> = {\n sharp: { borderRadius: 0 },\n rounded: { borderRadius: '8px' }, // 2 × 4px grid\n};\n/**\n * Overlay alignment configurations for the Modal component\n */\nexport const OverlayAlignments: Record<string, ViewProps> = {\n center: { justifyContent: 'center', alignItems: 'center' },\n top: {\n justifyContent: 'center',\n alignItems: 'flex-start',\n }, // 16 × 4px grid\n right: {\n justifyContent: 'flex-end',\n alignItems: 'center',\n }, // 8 × 4px grid\n bottom: {\n justifyContent: 'center',\n alignItems: 'flex-end',\n }, // 16 × 4px grid\n left: {\n justifyContent: 'flex-start',\n alignItems: 'center',\n }, // 8 × 4px grid\n};\n\n/**\n * Header icon size configurations for the Modal component\n * Following the 4px grid system\n */\nexport const HeaderIconSizes: Record<Size, number> = {\n xs: 12, // 3 × 4px grid\n sm: 16, // 4 × 4px grid\n md: 20, // 5 × 4px grid\n lg: 24, // 6 × 4px grid\n xl: 28, // 7 × 4px grid\n};\n\n/**\n * Animation configurations for the Modal component\n */\nexport const ModalAnimations = {\n enter: {\n opacity: [0, 1],\n transform: ['scale(0.95)', 'scale(1)'],\n transition: 'all 0.3s ease-out',\n },\n exit: {\n opacity: [1, 0],\n transform: ['scale(1)', 'scale(0.95)'],\n transition: 'all 0.2s ease-in',\n },\n};\n\n/**\n * Typography configurations for the Modal component\n */\nexport const ModalTypography = {\n title: {\n fontSize: '18px', // 4.5 × 4px grid\n fontWeight: '600', // Semi-bold\n lineHeight: '24px', // 6 × 4px grid\n color: 'color.gray.900',\n },\n body: {\n fontSize: '16px', // 4 × 4px grid\n fontWeight: '400', // Regular\n lineHeight: '24px', // 6 × 4px grid\n color: 'color.gray.700',\n },\n};\n","/**\n * Modal View Component\n *\n * Renders a modal dialog with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { View, Horizontal, ViewProps, Vertical, Center } from 'app-studio';\nimport { CloseIcon } from '../../Icon/Icon';\nimport { hideModal } from './Modal.store';\n\nimport {\n BodyProps,\n ContainerProps,\n FooterProps,\n HeaderProps,\n} from '../Modal/Modal.props';\nimport {\n ContainerShapes,\n OverlayAlignments,\n HeaderIconSizes,\n ModalTypography,\n} from '../Modal/Modal.style';\nimport { Position } from './Modal.type';\n\nexport interface OverlayProps {\n views?: {\n container?: ViewProps;\n view?: ViewProps;\n };\n blur?: number;\n isOpen?: boolean;\n isClosePrevented?: boolean;\n onClose?: () => void;\n position?: Position;\n children?: React.ReactNode;\n}\n\nexport const ModalOverlay: React.FC<OverlayProps & any> = ({\n children,\n blur,\n isOpen = false,\n isClosePrevented = false,\n onClose = () => {},\n position = 'center',\n views,\n ...props\n}) => {\n const handleClick = () => {\n if (!isClosePrevented) onClose();\n };\n\n return (\n <Center\n position=\"fixed\"\n top={0}\n left={0}\n width=\"100%\"\n height=\"100%\"\n zIndex={1000}\n onClick={handleClick}\n visibility={isOpen ? 'visible' : 'hidden'}\n transition=\"all 0.3s ease\"\n {...views?.container}\n >\n <View\n position=\"absolute\"\n top={0}\n left={0}\n zIndex={1000}\n width=\"100vw\"\n height=\"100vh\"\n display=\"flex\"\n backgroundColor=\"color.blackAlpha.500\"\n backdropFilter={blur ? `blur(${blur}px)` : undefined}\n transition=\"all 0.3s ease\"\n onClick={handleClick}\n {...OverlayAlignments[position]}\n {...props}\n {...views?.view}\n >\n {children}\n </View>\n </Center>\n );\n};\n\nexport const ModalContainer: React.FC<ContainerProps> = ({\n children,\n shadow,\n isFullScreen = false,\n shape = 'rounded',\n views,\n isOpen,\n ...props\n}) => {\n const defaultShadow =\n typeof document !== undefined\n ? {\n boxShadow: '0px 4px 16px rgba(0, 0, 0, 0.15)', // Subtle shadow following design system\n }\n : {\n elevation: 5,\n shadowColor: 'rgba(0, 0, 0, 0.15)',\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 1,\n shadowRadius: 16,\n };\n\n const handleClick = (event: any) => {\n if (event && event.stopPropagation) event.stopPropagation();\n };\n return (\n <Vertical\n cursor=\"default\"\n backgroundColor=\"color.white\"\n width={isFullScreen ? '100%' : 600}\n height={isFullScreen ? '100%' : 'fit-content'}\n onClick={handleClick}\n transition=\"all 0.3s ease\"\n {...(shadow ? shadow : defaultShadow)}\n {...ContainerShapes[shape]}\n {...props}\n {...views?.container}\n >\n {children}\n </Vertical>\n );\n};\n\nexport const ModalHeader: React.FC<HeaderProps> = ({\n children,\n buttonColor = 'theme.primary',\n iconSize = 'md',\n buttonPosition = 'right',\n views,\n ...props\n}) => {\n const onClose = props.onClose ? props.onClose : hideModal;\n\n const buttonIcon = (\n <View onClick={onClose}>\n <CloseIcon widthHeight={HeaderIconSizes[iconSize]} color={buttonColor} />\n </View>\n );\n\n return (\n <Horizontal\n justifyContent={buttonPosition === 'none' ? 'center' : 'space-between'}\n alignItems=\"center\"\n paddingVertical={16} // 4×4px grid\n paddingHorizontal={24} // 6×4px grid\n borderBottomWidth=\"1px\"\n borderBottomStyle=\"solid\"\n borderBottomColor=\"color.gray.200\"\n {...props}\n {...views?.header}\n >\n {buttonPosition === 'left' && buttonIcon}\n {children}\n {buttonPosition === 'right' && buttonIcon}\n </Horizontal>\n );\n};\n\nexport const ModalBody: React.FC<BodyProps> = ({\n children,\n views,\n ...props\n}) => {\n return (\n <View\n paddingVertical={16} // 4×4px grid\n paddingHorizontal={24} // 6×4px grid\n fontSize={ModalTypography.body.fontSize}\n fontWeight={ModalTypography.body.fontWeight}\n lineHeight={ModalTypography.body.lineHeight}\n color={ModalTypography.body.color}\n {...props}\n {...views?.view}\n >\n {children}\n </View>\n );\n};\n\nexport const ModalFooter: React.FC<FooterProps> = ({\n children,\n views,\n ...props\n}) => {\n return (\n <Horizontal\n marginTop=\"auto\"\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n paddingVertical={16} // 4×4px grid\n paddingHorizontal={24} // 6×4px grid\n borderTopWidth=\"1px\"\n borderTopStyle=\"solid\"\n borderTopColor=\"color.gray.200\"\n gap={12} // 3×4px grid\n {...props}\n {...views?.container}\n >\n {children}\n </Horizontal>\n );\n};\n","import React from 'react';\n\nimport { ModalType } from './Modal/Modal.props';\nimport {\n ModalBody,\n ModalContainer,\n ModalFooter,\n ModalHeader,\n ModalOverlay,\n} from './Modal/Modal.view';\nimport { ModalLayout } from './Modal/Modal.layout';\n\n/**\n * It is a custom content overlay that appears on top of the main screen.\n */\n// eslint-disable-next-line react/prop-types\nexport const Modal: ModalType = ({ children }) => <>{children}</>;\n\nModal.Overlay = ModalOverlay;\nModal.Container = ModalContainer;\nModal.Header = ModalHeader;\nModal.Body = ModalBody;\nModal.Footer = ModalFooter;\nModal.Layout = ModalLayout;\n\nexport * from './Modal/Modal.store';\n","import React, { Fragment } from 'react';\nimport { ModalState, hideModal, useModalStore } from './Modal.store';\nimport { ModalOverlay } from './Modal.view';\nimport { ModalLayoutProps } from './Modal.props';\n\nexport const ModalLayout = ({\n modals: availableModals,\n onShow,\n onHide,\n}: ModalLayoutProps) => {\n const activeModals = useModalStore((state: ModalState) => state.modals);\n\n if (onShow) {\n useModalStore.getState().setOnShow(onShow);\n }\n\n if (onHide) {\n useModalStore.getState().setOnHide(onHide);\n }\n\n if (activeModals.length === 0) {\n return null;\n }\n\n return (\n <Fragment>\n {activeModals.map((modal: any, index: number) => {\n const ModalComponent = availableModals[modal.name];\n\n if (!ModalComponent) {\n console.error(`${modal.name} modal doesn't exist`);\n return null;\n }\n\n return (\n <ModalOverlay\n key={index}\n isOpen={modal.props.isVisible}\n onClose={() => hideModal(modal.name)}\n blur={5}\n {...modal.overlayProps}\n style={{ zIndex: 1000 + index }}\n >\n <ModalComponent {...modal.props} />\n </ModalOverlay>\n );\n })}\n </Fragment>\n );\n};\n","import { useState } from 'react';\n\nexport const useNavigationMenuState = (\n defaultActiveItemId: string | null = null,\n defaultExpandedItemIds: string[] = []\n) => {\n const [activeItemId, setActiveItemId] = useState<string | null>(\n defaultActiveItemId\n );\n const [expandedItemIds, setExpandedItemIds] = useState<string[]>(\n defaultExpandedItemIds\n );\n\n const toggleExpandedItem = (itemId: string) => {\n setExpandedItemIds((prevExpandedItemIds) => {\n // Check if the item is already expanded\n const isExpanded = prevExpandedItemIds.includes(itemId);\n\n if (isExpanded) {\n // If expanded, remove it from the list\n return prevExpandedItemIds.filter((id) => id !== itemId);\n } else {\n // If not expanded, add it to the list\n return [...prevExpandedItemIds, itemId];\n }\n });\n };\n\n const isItemExpanded = (itemId: string) => {\n return expandedItemIds.includes(itemId);\n };\n\n return {\n activeItemId,\n setActiveItemId,\n expandedItemIds,\n toggleExpandedItem,\n isItemExpanded,\n };\n};\n","/**\n * NavigationMenu Styles\n *\n * Defines the styles for the NavigationMenu component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Orientation, Size, Variant } from './NavigationMenu.type';\n\n/**\n * Size configurations for the NavigationMenu component\n * Following the 4px grid system\n */\nexport const NavigationMenuSizes: Record<Size, ViewProps> = {\n sm: {\n padding: '8px 12px', // 2×4px and 3×4px grid\n fontSize: '14px',\n\n fontWeight: '500', // Medium weight for better readability\n },\n md: {\n padding: '12px 16px', // 3×4px and 4×4px grid\n fontSize: '16px',\n\n fontWeight: '500', // Medium weight for better readability\n },\n lg: {\n padding: '16px 20px', // 4×4px and 5×4px grid\n fontSize: '18px',\n\n fontWeight: '500', // Medium weight for better readability\n },\n};\n\n/**\n * Variant styles for the NavigationMenu component\n */\nexport const NavigationMenuVariants: Record<Variant, ViewProps> = {\n default: {\n backgroundColor: 'transparent',\n color: 'color.gray.800',\n transition: 'all 0.2s ease',\n },\n filled: {\n backgroundColor: 'color.gray.100',\n color: 'color.gray.800',\n transition: 'all 0.2s ease',\n },\n outline: {\n backgroundColor: 'transparent',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n color: 'color.gray.800',\n transition: 'all 0.2s ease',\n },\n};\n\n/**\n * Orientation styles for the NavigationMenu component\n */\nexport const NavigationMenuOrientations: Record<Orientation, ViewProps> = {\n horizontal: {\n flexDirection: 'row',\n gap: '8px', // 2×4px grid\n },\n vertical: {\n flexDirection: 'column',\n gap: '4px', // 1×4px grid\n },\n};\n\n/**\n * State styles for the NavigationMenu items\n */\nexport const NavigationMenuItemStates = {\n active: {\n backgroundColor: 'color.blue.50',\n color: 'color.blue.700',\n fontWeight: '600', // Semi-bold for active items\n borderLeftWidth: 3,\n borderLeftStyle: 'solid' as const,\n borderLeftColor: 'color.blue.600',\n },\n hover: {\n backgroundColor: 'color.gray.100',\n transition: 'background-color 0.2s ease',\n },\n disabled: {\n opacity: 0.6,\n cursor: 'not-allowed',\n },\n};\n\n/**\n * Icon styles for the NavigationMenu component\n */\nexport const NavigationMenuIconStyles = {\n default: {\n color: 'color.gray.500',\n transition: 'color 0.2s ease',\n },\n active: {\n color: 'color.blue.600',\n transition: 'color 0.2s ease',\n },\n};\n","import React, { createContext, useContext } from 'react';\nimport { View, Horizontal, Vertical, ViewProps } from 'app-studio';\nimport {\n NavigationMenuContextType,\n NavigationItem,\n Orientation,\n Size,\n Variant,\n} from './NavigationMenu.type';\nimport {\n NavigationMenuItemProps,\n NavigationMenuListProps,\n NavigationMenuTriggerProps,\n NavigationMenuContentProps,\n} from './NavigationMenu.props';\nimport {\n NavigationMenuSizes,\n NavigationMenuVariants,\n NavigationMenuOrientations,\n NavigationMenuItemStates,\n} from './NavigationMenu.style';\n\n// Create context for the NavigationMenu\nconst NavigationMenuContext = createContext<NavigationMenuContextType>({\n activeItemId: null,\n setActiveItemId: () => {},\n expandedItemIds: [],\n toggleExpandedItem: () => {},\n isItemExpanded: () => false,\n orientation: 'vertical',\n size: 'md',\n variant: 'default',\n});\n\n// Provider component for the NavigationMenu context\nexport const NavigationMenuProvider: React.FC<{\n children: React.ReactNode;\n value: NavigationMenuContextType;\n}> = ({ children, value }) => {\n return (\n <NavigationMenuContext.Provider value={value}>\n {children}\n </NavigationMenuContext.Provider>\n );\n};\n\n// Hook to use the NavigationMenu context\nexport const useNavigationMenuContext = () => {\n const context = useContext(NavigationMenuContext);\n if (!context) {\n throw new Error(\n 'useNavigationMenuContext must be used within a NavigationMenuProvider'\n );\n }\n return context;\n};\n\n// NavigationMenu List component\nexport const NavigationMenuList: React.FC<NavigationMenuListProps> = ({\n children,\n views,\n}) => {\n const { orientation } = useNavigationMenuContext();\n\n const Container = orientation === 'horizontal' ? Horizontal : Vertical;\n\n return (\n <Container\n width=\"100%\"\n {...NavigationMenuOrientations[orientation]}\n transition=\"all 0.2s ease\"\n borderRadius=\"4px\"\n {...views?.container}\n >\n {children}\n </Container>\n );\n};\n\n// Create a context for NavigationMenuItem\nconst NavigationMenuItemContext = createContext<{\n itemValue: string | null;\n isDisabled: boolean;\n}>({ itemValue: null, isDisabled: false });\n\n// Hook to use the NavigationMenuItem context\nexport const useNavigationMenuItemContext = () => {\n const context = useContext(NavigationMenuItemContext);\n if (!context) {\n throw new Error(\n 'useNavigationMenuItemContext must be used within a NavigationMenuItem'\n );\n }\n return context;\n};\n\n// NavigationMenu Item component\nexport const NavigationMenuItem: React.FC<NavigationMenuItemProps> = ({\n item,\n value,\n isDisabled = false,\n children,\n views,\n}) => {\n const {\n activeItemId,\n setActiveItemId,\n orientation,\n size,\n variant,\n onItemActivate,\n } = useNavigationMenuContext();\n\n // Handle both data-driven and compound component patterns\n const itemId = item?.id || value;\n const isActive = activeItemId === itemId;\n const hasSubItems = item?.items && item.items.length > 0;\n const disabled = item?.disabled || isDisabled;\n\n const handleClick = () => {\n if (disabled) return;\n\n if (itemId) {\n setActiveItemId(itemId);\n if (onItemActivate) {\n onItemActivate(itemId);\n }\n }\n };\n\n const Container = orientation === 'horizontal' ? Horizontal : Vertical;\n\n // For compound component pattern\n if (children) {\n return (\n <NavigationMenuItemContext.Provider\n value={{ itemValue: itemId || null, isDisabled: disabled }}\n >\n <View\n width=\"100%\"\n cursor={disabled ? 'not-allowed' : 'pointer'}\n opacity={disabled ? 0.6 : 1}\n borderRadius=\"4px\"\n transition=\"all 0.2s ease\"\n {...NavigationMenuSizes[size]}\n {...NavigationMenuVariants[variant]}\n {...(isActive ? NavigationMenuItemStates.active : {})}\n _hover={!disabled ? NavigationMenuItemStates.hover : {}}\n {...views?.item}\n >\n {children}\n </View>\n </NavigationMenuItemContext.Provider>\n );\n }\n\n // For data-driven pattern with sub-items\n if (hasSubItems && item) {\n return (\n <Container\n width=\"100%\"\n flexDirection={orientation === 'horizontal' ? 'column' : 'column'}\n position=\"relative\"\n {...views?.item}\n >\n <NavigationMenuTrigger\n itemId={item.id}\n disabled={item.disabled}\n views={views}\n >\n {item.icon && (\n <View marginRight={8} {...views?.icon}>\n {item.icon}\n </View>\n )}\n {item.label}\n </NavigationMenuTrigger>\n\n <NavigationMenuContent itemId={item.id}>\n <NavigationMenuList>\n {item.items?.map((subItem) => (\n <NavigationMenuItem key={subItem.id} item={subItem} />\n ))}\n </NavigationMenuList>\n </NavigationMenuContent>\n </Container>\n );\n }\n\n // For data-driven pattern without sub-items\n if (item) {\n return (\n <View\n as={item.href ? 'a' : 'div'}\n to={item.href}\n onClick={handleClick}\n cursor={item.disabled ? 'not-allowed' : 'pointer'}\n opacity={item.disabled ? 0.6 : 1}\n width=\"100%\"\n display=\"flex\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n transition=\"all 0.2s ease\"\n gap=\"8px\"\n {...NavigationMenuSizes[size]}\n {...NavigationMenuVariants[variant]}\n {...(isActive ? NavigationMenuItemStates.active : {})}\n _hover={!item.disabled ? NavigationMenuItemStates.hover : {}}\n {...views?.item}\n >\n {item.icon && (\n <View marginRight={8} {...views?.icon}>\n {item.icon}\n </View>\n )}\n {item.label}\n </View>\n );\n }\n\n return null;\n};\n\n// NavigationMenu Trigger component\nexport const NavigationMenuTrigger: React.FC<NavigationMenuTriggerProps> = ({\n children,\n itemId,\n disabled,\n views,\n}) => {\n const { activeItemId, toggleExpandedItem, isItemExpanded, size, variant } =\n useNavigationMenuContext();\n\n const isActive = activeItemId === itemId;\n const isExpanded = isItemExpanded(itemId);\n\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n if (disabled) return;\n toggleExpandedItem(itemId);\n };\n\n return (\n <View\n onClick={handleClick}\n cursor={disabled ? 'not-allowed' : 'pointer'}\n opacity={disabled ? 0.5 : 1}\n width=\"100%\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n borderRadius={4}\n transition=\"background-color 0.2s ease\"\n {...NavigationMenuSizes[size]}\n {...NavigationMenuVariants[variant]}\n {...(isActive ? NavigationMenuItemStates.active : {})}\n _hover={!disabled ? NavigationMenuItemStates.hover : {}}\n {...views?.trigger}\n >\n <View display=\"flex\" alignItems=\"center\">\n {children}\n </View>\n <View\n transition=\"transform 0.2s ease\"\n transform={isExpanded ? 'rotate(180deg)' : 'rotate(0deg)'}\n {...views?.indicator}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16.59 8.59L12 13.17L7.41 8.59L6 10L12 16L18 10L16.59 8.59Z\"\n fill=\"currentColor\"\n />\n </svg>\n </View>\n </View>\n );\n};\n\n// NavigationMenu Content component\nexport const NavigationMenuContent: React.FC<NavigationMenuContentProps> = ({\n children,\n itemId,\n views,\n}) => {\n const { isItemExpanded, orientation } = useNavigationMenuContext();\n\n const isExpanded = isItemExpanded(itemId);\n\n if (!isExpanded) {\n return null;\n }\n\n return (\n <View\n paddingLeft={orientation === 'vertical' ? 16 : 0}\n paddingTop={orientation === 'horizontal' ? 8 : 0}\n overflow=\"hidden\"\n width=\"100%\"\n position={orientation === 'horizontal' ? 'absolute' : 'relative'}\n backgroundColor={orientation === 'horizontal' ? 'white' : 'transparent'}\n boxShadow={\n orientation === 'horizontal' ? '0 4px 6px rgba(0, 0, 0, 0.1)' : 'none'\n }\n borderRadius={orientation === 'horizontal' ? '4px' : '0'}\n zIndex={orientation === 'horizontal' ? 10 : 1}\n {...views?.container}\n >\n {children}\n </View>\n );\n};\n\n// Main NavigationMenu View component\n// NavigationMenu Link component\nimport { NavigationMenuLinkProps } from './NavigationMenu.props';\n\nexport const NavigationMenuLink: React.FC<NavigationMenuLinkProps> = ({\n href,\n children,\n views,\n ...props\n}) => {\n const { itemValue, isDisabled } = useNavigationMenuItemContext();\n const { activeItemId, setActiveItemId, onItemActivate } =\n useNavigationMenuContext();\n\n const isActive = activeItemId === itemValue;\n\n const handleClick = (e: React.MouseEvent) => {\n if (isDisabled) {\n e.preventDefault();\n return;\n }\n\n if (itemValue) {\n setActiveItemId(itemValue);\n if (onItemActivate) {\n onItemActivate(itemValue);\n }\n }\n\n // Allow the user's onClick handler to run\n if (props.onClick) {\n props.onClick(e);\n }\n };\n\n return (\n <View\n as=\"a\"\n href={isDisabled ? undefined : href}\n onClick={handleClick}\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n opacity={isDisabled ? 0.5 : 1}\n width=\"100%\"\n display=\"flex\"\n alignItems=\"center\"\n aria-current={isActive ? 'page' : undefined}\n aria-disabled={isDisabled}\n data-active={isActive ? '' : undefined}\n data-disabled={isDisabled ? '' : undefined}\n {...(isActive ? { fontWeight: 'bold' } : {})}\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n );\n};\n\nexport const NavigationMenuView: React.FC<\n {\n items?: NavigationItem[];\n orientation: Orientation;\n size: Size;\n variant: Variant;\n views?: any;\n } & ViewProps\n> = ({\n items,\n orientation,\n //size, variant,\n views,\n themeMode: elementMode,\n}) => {\n const Container = orientation === 'horizontal' ? Horizontal : Vertical;\n\n if (!items || items.length === 0) {\n return null;\n }\n\n return (\n <Container\n width=\"100%\"\n {...NavigationMenuOrientations[orientation]}\n {...views?.container}\n >\n <NavigationMenuList views={views}>\n {items.map((item) => (\n <NavigationMenuItem key={item.id} item={item} views={views} />\n ))}\n </NavigationMenuList>\n </Container>\n );\n};\n","import React from 'react';\nimport {\n NavigationMenuProps,\n NavigationMenuType,\n} from './NavigationMenu/NavigationMenu.props';\nimport { useNavigationMenuState } from './NavigationMenu/NavigationMenu.state';\nimport {\n NavigationMenuProvider,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuTrigger,\n NavigationMenuContent,\n NavigationMenuView,\n NavigationMenuLink,\n} from './NavigationMenu/NavigationMenu.view';\n\n/**\n * NavigationMenu component for creating navigation menus with optional nested items.\n * Supports both data-driven approach (with items prop) and compound component pattern.\n */\nconst NavigationMenuComponent: React.FC<NavigationMenuProps> = ({\n items,\n children,\n orientation = 'vertical',\n size = 'md',\n variant = 'default',\n defaultActiveItemId = null,\n defaultExpandedItemIds = [],\n onItemActivate,\n views,\n ...props\n}) => {\n const {\n activeItemId,\n setActiveItemId,\n expandedItemIds,\n toggleExpandedItem,\n isItemExpanded,\n } = useNavigationMenuState(defaultActiveItemId, defaultExpandedItemIds);\n\n return (\n <NavigationMenuProvider\n value={{\n activeItemId,\n setActiveItemId,\n expandedItemIds,\n toggleExpandedItem,\n isItemExpanded,\n orientation,\n size,\n variant,\n onItemActivate,\n }}\n >\n {items ? (\n <NavigationMenuView\n items={items}\n orientation={orientation}\n size={size}\n variant={variant}\n views={views}\n {...props}\n />\n ) : (\n children\n )}\n </NavigationMenuProvider>\n );\n};\n\nexport const NavigationMenu = NavigationMenuComponent as NavigationMenuType;\n\n// Assign the sub-components to the main component\nNavigationMenu.List = NavigationMenuList;\nNavigationMenu.Item = NavigationMenuItem;\nNavigationMenu.Trigger = NavigationMenuTrigger;\nNavigationMenu.Content = NavigationMenuContent;\nNavigationMenu.Link = NavigationMenuLink;\n","import React, { createContext, useContext } from 'react';\nimport { ViewProps } from 'app-studio';\n\nexport type TableViewStyles = {\n table?: ViewProps;\n thead?: ViewProps;\n tfoot?: ViewProps;\n tbody?: ViewProps;\n tr?: ViewProps;\n td?: ViewProps;\n th?: ViewProps;\n caption?: ViewProps;\n};\n\nconst defaultStyles: TableViewStyles = {};\n\ninterface TableContextProps {\n views: TableViewStyles;\n onRowClick?: Function;\n}\n\n// Create a context that includes both styles and the onClick function\nconst TableContext = createContext<TableContextProps>({\n views: defaultStyles,\n onRowClick: () => {}, // Default to undefined if no onClick is passed\n});\n\nexport const TableProvider: React.FC<{\n children: React.ReactNode;\n views?: TableViewStyles;\n onRowClick?: Function; // Accept the onClick prop\n}> = ({ children, views = defaultStyles, onRowClick }) => (\n // Pass both styles and onClick to the context\n <TableContext.Provider value={{ views, onRowClick }}>\n {children}\n </TableContext.Provider>\n);\n\n// Custom hook to consume the context and get the styles and onClick handler\nexport const useTableContext = () => useContext(TableContext);\n","/**\n * Table Styles\n *\n * Defines the styles for the Table component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { TableViewStyles } from './Table.type';\n\n/**\n * Default table styles following the design system\n */\nexport const DefaultTableStyles: TableViewStyles = {\n table: {\n width: '100%',\n\n borderRadius: '8px', // 2 × 4px grid\n overflow: 'hidden',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n border: '1px solid',\n borderColor: 'color.gray.200',\n transition: 'all 0.2s ease',\n },\n thead: {\n backgroundColor: 'color.gray.50',\n borderBottom: '1px solid',\n borderBottomColor: 'color.gray.200',\n },\n th: {\n padding: '12px 16px', // 3 × 4px and 4 × 4px grid\n fontWeight: '600',\n fontSize: '14px',\n color: 'color.gray.700',\n textAlign: 'left',\n },\n td: {\n padding: '12px 16px', // 3 × 4px and 4 × 4px grid\n fontSize: '14px',\n borderBottom: '1px solid',\n borderBottomColor: 'color.gray.100',\n },\n tr: {\n transition: 'background-color 0.2s ease',\n _hover: {\n backgroundColor: 'color.gray.50',\n },\n },\n tfoot: {\n backgroundColor: 'color.gray.50',\n fontWeight: '600',\n borderTop: '2px solid',\n borderTopColor: 'color.gray.200',\n },\n caption: {\n margin: '8px 0', // 2 × 4px grid\n color: 'color.gray.600',\n fontSize: '14px',\n fontStyle: 'italic',\n },\n};\n\n/**\n * Compact table styles\n */\nexport const CompactTableStyles: TableViewStyles = {\n ...DefaultTableStyles,\n th: {\n ...DefaultTableStyles.th,\n padding: '8px 12px', // 2 × 4px and 3 × 4px grid\n fontSize: '12px',\n },\n td: {\n ...DefaultTableStyles.td,\n padding: '8px 12px', // 2 × 4px and 3 × 4px grid\n fontSize: '12px',\n },\n};\n\n/**\n * Striped table styles\n */\nexport const StripedTableStyles: TableViewStyles = {\n ...DefaultTableStyles,\n tr: {\n ...DefaultTableStyles.tr,\n _even: {\n backgroundColor: 'color.gray.50',\n },\n },\n};\n\n/**\n * Bordered table styles\n */\nexport const BorderedTableStyles: TableViewStyles = {\n ...DefaultTableStyles,\n td: {\n ...DefaultTableStyles.td,\n borderRight: '1px solid',\n borderRightColor: 'color.gray.100',\n },\n th: {\n ...DefaultTableStyles.th,\n borderRight: '1px solid',\n borderRightColor: 'color.gray.200',\n },\n};\n\n/**\n * Dark theme table styles\n */\nexport const DarkTableStyles: TableViewStyles = {\n table: {\n ...DefaultTableStyles.table,\n backgroundColor: 'color.gray.800',\n borderColor: 'color.gray.700',\n },\n thead: {\n backgroundColor: 'color.gray.900',\n borderBottomColor: 'color.gray.700',\n },\n th: {\n ...DefaultTableStyles.th,\n color: 'color.gray.100',\n },\n td: {\n ...DefaultTableStyles.td,\n color: 'color.gray.300',\n borderBottomColor: 'color.gray.700',\n },\n tr: {\n ...DefaultTableStyles.tr,\n _hover: {\n backgroundColor: 'color.gray.700',\n },\n },\n tfoot: {\n ...DefaultTableStyles.tfoot,\n backgroundColor: 'color.gray.900',\n borderTopColor: 'color.gray.700',\n },\n caption: {\n ...DefaultTableStyles.caption,\n color: 'color.gray.400',\n },\n};\n","/**\n * Table View Component\n *\n * Renders a table with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Element, ViewProps } from 'app-studio';\nimport { TableViewProps } from './Table.props';\nimport { useTableContext } from './Table.context';\nimport { DefaultTableStyles } from './Table.style';\n\nexport const TableContainer: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"table\"\n borderCollapse=\"collapse\"\n {...DefaultTableStyles.table}\n {...views?.table}\n {...props}\n />\n );\n};\n\nexport const TableHead: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"thead\"\n textAlign=\"left\"\n {...DefaultTableStyles.thead}\n {...views?.thead}\n {...props}\n />\n );\n};\n\nexport const TableHeadCell: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"th\"\n whiteSpace=\"nowrap\"\n {...DefaultTableStyles.th}\n {...views?.th}\n {...props}\n />\n );\n};\n\nexport const TableRow: React.FC<ViewProps> = (props) => {\n const { views, onRowClick } = useTableContext();\n return (\n <Element\n as=\"tr\"\n {...DefaultTableStyles.tr}\n {...views?.tr}\n onClick={onRowClick}\n {...props}\n />\n );\n};\n\nexport const TableCell: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"td\"\n whiteSpace=\"nowrap\"\n fontWeight={props.isFirstColumn ? '500' : '400'}\n {...DefaultTableStyles.td}\n {...views?.td}\n {...props}\n />\n );\n};\n\nexport const TableBody: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"tbody\"\n {...DefaultTableStyles.tbody}\n {...views?.tbody}\n {...props}\n />\n );\n};\n\nexport const TableFooter: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"tfoot\"\n {...DefaultTableStyles.tfoot}\n {...views?.tfoot}\n {...props}\n />\n );\n};\n\nexport const TableCaption: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"caption\"\n {...DefaultTableStyles.caption}\n {...views?.caption}\n {...props}\n />\n );\n};\n\nexport const TableView: React.FC<TableViewProps> = ({\n data,\n columns,\n footer,\n caption,\n themeMode: elementMode,\n}) => {\n return (\n <TableContainer role=\"Table\">\n {caption && <TableCaption>{caption}</TableCaption>}\n <TableHead>\n <TableRow>\n {columns.map((column) => (\n <TableHeadCell key={column.field}>{column.title}</TableHeadCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {data.map((row, index) => (\n <TableRow key={index}>\n {columns.map((column, columnIndex) => (\n <TableCell key={column.field} isFirstColumn={columnIndex === 0}>\n {row[column.field]}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n {footer && (\n <TableFooter>\n <TableRow>\n {footer.map((cell, index) => (\n <TableCell key={index} {...cell.props}>\n {cell.value}\n </TableCell>\n ))}\n </TableRow>\n </TableFooter>\n )}\n </TableContainer>\n );\n};\n","import React from 'react';\nimport {\n TableContainer,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n TableFooter,\n TableCaption,\n TableView,\n TableHeadCell,\n} from './Table/Table.view';\nimport { TableProvider } from './Table/Table.context';\nimport { TableLayoutProps } from './Table/Table.props';\n\nexport const Table = ({ children, views, onClick }: TableLayoutProps) => {\n return (\n <TableProvider views={views} onRowClick={onClick}>\n {children}\n </TableProvider>\n );\n};\n\nTable.Head = TableHead;\nTable.HeadCell = TableHeadCell;\nTable.Body = TableBody;\nTable.Row = TableRow;\nTable.Cell = TableCell;\nTable.Footer = TableFooter;\nTable.Caption = TableCaption;\nTable.Container = TableContainer;\nTable.Template = TableView;\n","import { useState, useEffect } from 'react';\nimport { Tab } from './Tabs.type';\n\n/**\n * Custom hook to manage the state of the active tab.\n * @param propTabs - The array of tab objects provided as props.\n * @param initialTabValue - The optional title of the tab to be initially active.\n * @returns An object containing the current activeTab and a function to update it.\n */\nexport const useTabsState = (\n propTabs: Tab[],\n initialTabValue?: string | number\n) => {\n // Find the initial tab based on initialTabValue, or default to the first tab.\n // Ensure propTabs is not empty before accessing index 0.\n const findInitialTab = (): Tab | undefined => {\n if (!propTabs || propTabs.length === 0) {\n return undefined; // No tabs, no initial active tab\n }\n if (initialTabValue !== undefined) {\n const foundTab = propTabs.find((tab) => tab.title === initialTabValue);\n if (foundTab) {\n return foundTab;\n }\n // Warn if initialTabValue is provided but not found\n // console.warn(\n // `Tabs: initialTabValue \"${initialTabValue}\" not found in tabs. Defaulting to the first tab.`\n // );\n }\n return propTabs[0]; // Default to the first tab\n };\n\n const [activeTab, setActiveTab] = useState<Tab | undefined>(findInitialTab);\n\n // Effect to update the active tab if the initialTabValue prop changes\n // or if the tabs array changes and the current active tab is no longer valid.\n useEffect(() => {\n const newInitialTab = findInitialTab();\n // Update only if the calculated initial tab is different from the current active tab\n // or if the current active tab is no longer in the list (and there are tabs)\n const currentActiveTabStillValid =\n activeTab && propTabs.some((t) => t.title === activeTab.title);\n\n if (\n newInitialTab &&\n (!currentActiveTabStillValid ||\n (initialTabValue !== undefined && activeTab?.title !== initialTabValue))\n ) {\n setActiveTab(newInitialTab);\n } else if (!newInitialTab && activeTab) {\n // Handle case where all tabs are removed\n setActiveTab(undefined);\n }\n }, [propTabs, initialTabValue]); // Rerun when tabs or initial title changes\n\n return {\n activeTab,\n setActiveTab,\n };\n};\n","import React from 'react';\nimport { Element, Text, ViewProps } from 'app-studio';\nimport { Tab } from './Tabs.type';\n\nexport interface TabHeaderProps {\n /** The tab data */\n tab: Tab;\n /** Whether this tab is currently active */\n isActive: boolean;\n /** Handler for when the tab is clicked */\n onClick: () => void;\n /** Position of the icon relative to the text */\n iconPosition?: 'left' | 'right' | 'top' | 'bottom';\n /** Custom styles for the tab header */\n tabStyles?: ViewProps;\n /** Custom styles for the tab text */\n textStyles?: ViewProps;\n}\n\n/**\n * TabHeader component renders a single tab in the tab navigation.\n * It's designed to be a lightweight alternative to using Button components.\n */\nexport const TabHeader: React.FC<TabHeaderProps> = ({\n tab,\n isActive,\n onClick,\n iconPosition = 'left',\n tabStyles,\n textStyles,\n}) => {\n // Base styles for the tab header\n const baseStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '10px 16px',\n cursor: 'pointer',\n borderTopLeftRadius: '4px',\n borderTopRightRadius: '4px',\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: isActive ? 'theme.primary' : 'transparent',\n borderBottomColor: isActive ? 'transparent' : 'color.gray.200',\n backgroundColor: isActive ? 'color.white' : 'transparent',\n color: isActive ? 'theme.primary' : 'color.gray.600',\n fontWeight: 'normal',\n position: 'relative',\n // If active, show a bottom border that matches the background color\n // to create the illusion that the tab is connected to the content\n\n // Hover state\n on: {\n hover: {\n color: 'theme.primary',\n },\n },\n };\n\n // Determine the flex direction based on icon position\n const getFlexDirection = () => {\n switch (iconPosition) {\n case 'top':\n return 'column';\n case 'bottom':\n return 'column-reverse';\n case 'right':\n return 'row-reverse';\n case 'left':\n default:\n return 'row';\n }\n };\n\n // Determine the gap based on icon position\n const getGap = () => {\n return ['top', 'bottom'].includes(iconPosition) ? '4px' : '8px';\n };\n\n return (\n <Element\n as=\"div\"\n role=\"tab\"\n aria-selected={isActive}\n tabIndex={isActive ? 0 : -1}\n {...baseStyles}\n {...tabStyles}\n flexDirection={getFlexDirection()}\n gap={getGap()}\n onClick={onClick}\n data-state={isActive ? 'active' : 'inactive'}\n >\n {tab.icon && <Element>{tab.icon}</Element>}\n <Text {...textStyles}>{tab.title}</Text>\n </Element>\n );\n};\n","import React from 'react';\nimport { View, Horizontal, Vertical } from 'app-studio';\nimport { TabsViewProps } from './Tabs.props';\nimport { TabHeader } from './TabHeader';\n\n/**\n * The presentation component for Tabs. Renders the UI based on props.\n */\nexport const TabsView: React.FC<TabsViewProps> = ({\n tabs = [], // Default to empty array\n activeTab,\n handleTabClick,\n views = {}, // Default to empty object\n renderTab,\n renderContent,\n iconPosition = 'left', // Default to left\n}) => {\n // If there's no active tab (e.g., tabs array is empty), render nothing or a placeholder\n if (!activeTab) {\n // Optionally render a placeholder when no tabs are active/available\n // return <View {...views.container}><Text>No tabs available.</Text></View>;\n return null; // Or simply render nothing\n }\n\n return (\n // Use Vertical layout for overall structure (tabs header above content)\n <Vertical width=\"100%\" height={'100%'} {...views.container}>\n {/* Horizontal layout for the tab headers/buttons */}\n <Horizontal {...views.headerTabs}>\n {tabs.map((tab) => {\n // Determine if the current tab in the loop is the active one\n const isActive = tab.title === activeTab.title;\n // Prepare the onClick handler for this specific tab\n const onClick = () => handleTabClick(tab);\n\n // Use the custom renderTab function if provided\n if (renderTab) {\n return renderTab(tab, isActive, onClick);\n }\n\n // Default rendering for a tab using our custom TabHeader component\n return (\n <TabHeader\n key={tab.title} // Use the unique title as the key\n tab={tab}\n isActive={isActive}\n onClick={onClick}\n iconPosition={iconPosition}\n tabStyles={{\n ...views.tab,\n ...(isActive ? views.activeTab : {}),\n }}\n textStyles={{\n ...views.title,\n ...(isActive ? views.activeText : {}),\n }}\n />\n );\n })}\n </Horizontal>\n\n {/* Content area */}\n <View width={'100%'} height=\"100%\" {...views.content}>\n {/* Use the custom renderContent function if provided */}\n {renderContent\n ? renderContent(activeTab)\n : // Otherwise, render the content property from the active tab object\n activeTab.content}\n </View>\n </Vertical>\n );\n};\n","import React from 'react';\nimport { TabsProps } from './Tabs/Tabs.props';\nimport { useTabsState } from './Tabs/Tabs.state';\nimport { TabsView } from './Tabs/Tabs.view';\nimport { Tab } from './Tabs/Tabs.type'; // Import Tab type\n\n/**\n * Tabs component allows users to navigate between different sections of content.\n * It manages the active tab state and renders the corresponding content.\n */\nconst TabsComponent: React.FC<TabsProps> = ({\n tabs,\n views,\n initialTabValue,\n onTabChange,\n renderTab,\n renderContent,\n iconPosition = 'left',\n}) => {\n // Use the custom hook to manage the active tab state\n const { activeTab, setActiveTab } = useTabsState(tabs, initialTabValue);\n\n // Handler function to change the active tab and trigger the callback\n const handleTabClick = (tab: Tab) => {\n // Only update state and call callback if the clicked tab is different from the current one\n if (activeTab?.title !== tab.title) {\n setActiveTab(tab);\n // Call the onTabChange callback if provided\n if (onTabChange) {\n onTabChange(tab);\n }\n }\n };\n\n // Render the presentation component with the necessary props\n return (\n <TabsView\n tabs={tabs}\n views={views}\n activeTab={activeTab} // Pass the activeTab object from state\n handleTabClick={handleTabClick} // Pass the click handler\n renderTab={renderTab}\n renderContent={renderContent}\n iconPosition={iconPosition}\n />\n );\n};\n\n// Export the component wrapped in React.memo for performance optimization\nexport const Tabs = React.memo(TabsComponent);\n","import React from 'react';\nimport { ViewProps } from 'app-studio';\nimport { ToggleViewProps } from './Toggle.props';\nimport { Center } from 'app-studio';\n\ninterface Props extends ToggleViewProps {\n views?: {\n container?: ViewProps;\n };\n}\n\nconst ToggleView: React.FC<Props> = ({\n children,\n shape = 'rounded',\n variant = 'ghost',\n isHovered,\n setIsHovered,\n isDisabled,\n isToggle,\n setIsToggled,\n onToggle,\n views,\n ...props\n}) => {\n const toggleColor = !isDisabled ? 'color.trueGray.400' : 'theme.disabled';\n const isActive = !!(isToggle || isHovered);\n const toggleVariants: { [key: string]: ViewProps } = {\n outline: {\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: 'color.trueGray.400',\n },\n link: {\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: isActive ? toggleColor : 'transparent',\n textDecoration: 'underline',\n },\n ghost: {},\n };\n\n const handleHover = () => setIsHovered(!isHovered);\n\n const handleToggle = () => {\n if (!isDisabled) {\n setIsToggled((prev) => {\n const newState = !prev;\n if (onToggle) {\n onToggle(newState);\n }\n return newState;\n });\n }\n };\n\n return (\n <Center\n role=\"Toggle\"\n padding={shape === 'pillShaped' ? '10px 12px' : '8px'}\n width=\"fit-content\"\n color={isActive ? 'color.white' : toggleColor}\n backgroundColor={isActive ? toggleColor : 'transparent'}\n onMouseEnter={handleHover}\n onMouseLeave={() => setIsHovered(false)}\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n borderRadius={shape === 'pillShaped' ? '50px' : '8px'}\n onClick={handleToggle}\n {...toggleVariants[variant]}\n {...props}\n {...views?.container}\n >\n {children}\n </Center>\n );\n};\nexport default ToggleView;\n","import React, { useEffect } from 'react';\nimport { ToggleProps } from './Toggle/Toggle.props';\nimport { useToggleState } from './Toggle/Toggle.state';\nimport ToggleView from './Toggle/Toggle.view';\n// Destructuring properties from ToggleProps to be used within the ToggleComponent.\nconst ToggleComponent = ({\n children,\n shape,\n variant,\n isDisabled,\n // Assigning a default value of false to the isToggled property if none is provided.\n isToggled = false,\n onToggle,\n ...props\n}: ToggleProps) => {\n // Initializing toggle state and set state functions using the custom hook useToggleState.\n const { isHovered, setIsHovered, isToggle, setIsToggled } =\n useToggleState(isToggled);\n // Creating an effect that updates the isToggled state whenever the isToggled prop changes.\n useEffect(() => {\n setIsToggled(isToggled);\n }, [isToggled]);\n // Beginning of the JSX block to render the Toggle view component.\n return (\n <ToggleView\n shape={shape}\n variant={variant}\n isDisabled={isDisabled}\n isHovered={isHovered}\n setIsHovered={setIsHovered}\n isToggle={isToggle}\n setIsToggled={setIsToggled}\n onToggle={onToggle}\n {...props}\n >\n {children}\n </ToggleView>\n );\n};\nexport const Toggle = ToggleComponent;\n","import { useState } from 'react';\n// Declares the useToggleState function which takes defaultToggled parameter to initialize the toggle state.\nexport const useToggleState = (defaultToggled: boolean) => {\n // Creates a stateful value isHovered for tracking hover state and a function setIsHovered to update that state, initially false.\n const [isHovered, setIsHovered] = useState(false);\n // Creates a stateful value isToggle to store the current toggle state and a function setIsToggled to modify it, initialized with defaultToggled.\n const [isToggle, setIsToggled] = useState(defaultToggled);\n // Returns an object containing the current states and the functions to update them for external use.\n return { isHovered, setIsHovered, isToggle, setIsToggled };\n};\n","import React, { useCallback } from 'react';\nimport { Horizontal } from 'app-studio';\nimport { Toggle } from '../../Toggle/Toggle';\nimport { ToggleGroupViewProps } from './ToggleGroup.props';\n\n// ToggleGroupView component declaration with destructured properties from props.\nexport const ToggleGroupView = ({\n // Prop 'items' defines the list of toggle elements to be rendered.\n items,\n // Prop 'onToggleChange' is a callback function triggered when the toggle state changes.\n onToggleChange,\n // Prop 'activeToggles' holds the array of active toggle identifiers.\n activeToggles,\n // Prop 'setActiveToggles' is a function to update the active toggle states.\n setActiveToggles,\n // Prop 'shape' with default value 'rounded', determines the shape of the toggle buttons.\n shape = 'rounded',\n // Prop 'variant' with default value 'ghost' represents the visual style variant of the toggles.\n variant = 'ghost',\n views,\n}: ToggleGroupViewProps) => {\n // handleToggle is a memoized callback that handles the toggle state changes.\n const handleToggle = useCallback(\n (id: string, isActive: boolean) => {\n setActiveToggles((prevActiveToggles) => {\n let newActiveToggles;\n if (isActive) {\n newActiveToggles = prevActiveToggles.includes(id)\n ? prevActiveToggles\n : [...prevActiveToggles, id];\n } else {\n newActiveToggles = prevActiveToggles.filter(\n (toggleId) => toggleId !== id\n );\n }\n onToggleChange?.(newActiveToggles);\n return newActiveToggles;\n });\n },\n [onToggleChange, setActiveToggles]\n );\n return (\n <Horizontal role=\"ToggleGroup\" display=\"flex\" gap={5} {...views?.container}>\n {items.map((item: any) => (\n <Toggle\n role={`toggle-${item.id}`}\n key={item.id}\n shape={shape}\n variant={variant}\n isToggled={activeToggles.includes(item.id) || item.isActive}\n onToggle={(state) => handleToggle(item.id, state)}\n isDisabled={item.isDisabled}\n views={views?.toggle}\n >\n {item.value}\n </Toggle>\n ))}\n </Horizontal>\n );\n};\n","import React from 'react';\nimport { View } from 'app-studio';\nimport { DragAndDropViewProps } from './DragAndDrop.props';\n\nexport const DragAndDropView: React.FC<DragAndDropViewProps> = ({\n items,\n renderItem,\n containerProps,\n itemProps,\n draggedIndex,\n itemRefs,\n handleDragStart,\n views,\n themeMode: elementMode,\n}) => (\n <View\n overflow=\"hidden\"\n position=\"relative\"\n {...containerProps}\n {...views?.container}\n >\n {items.map((item, index) => (\n <View\n key={index}\n ref={(el) => (itemRefs.current[index] = el as HTMLDivElement)}\n onMouseDown={(e: React.MouseEvent) => handleDragStart(e, index)}\n onTouchStart={(e: React.TouchEvent) => handleDragStart(e, index)}\n position=\"relative\"\n cursor=\"grab\"\n transition=\"transform 0.2s\"\n backgroundColor={\n draggedIndex === index ? 'color.gray.100' : 'transparent'\n }\n {...itemProps}\n {...views?.item}\n >\n {renderItem ? renderItem(item, index) : item}\n </View>\n ))}\n </View>\n);\n","import React from 'react';\nimport { DragAndDropProps } from './DragAndDrop/DragAndDrop.props';\nimport { useDragAndDropState } from './DragAndDrop/DragAndDrop.state';\nimport { DragAndDropView } from './DragAndDrop/DragAndDrop.view';\n\nexport const DragAndDropComponent: React.FC<DragAndDropProps> = (props) => {\n const { items, draggedIndex, itemRefs, handleDragStart } =\n useDragAndDropState(props);\n\n return (\n <DragAndDropView\n {...props}\n items={items}\n draggedIndex={draggedIndex}\n itemRefs={itemRefs}\n handleDragStart={handleDragStart}\n />\n );\n};\n\nexport const DragAndDrop = DragAndDropComponent;\n","import { useState, useRef, useCallback, useEffect } from 'react';\nimport { DragAndDropProps } from './DragAndDrop.props';\n\nexport const useDragAndDropState = ({\n items: initialItems,\n onChange,\n}: DragAndDropProps) => {\n const [items, setItems] = useState(initialItems);\n const [draggedItem, setDraggedItem] = useState<any>(null);\n const [draggedIndex, setDraggedIndex] = useState<number | null>(null);\n const dragStartPosRef = useRef({ x: 0, y: 0 });\n const itemRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n const handleDragStart = useCallback(\n (e: React.MouseEvent | React.TouchEvent, index: number) => {\n e.preventDefault();\n document.body.style.cursor = 'grabbing';\n\n const clientX =\n 'touches' in e ? e.touches[0].clientX : (e as React.MouseEvent).clientX;\n const clientY =\n 'touches' in e ? e.touches[0].clientY : (e as React.MouseEvent).clientY;\n\n dragStartPosRef.current = { x: clientX, y: clientY };\n setDraggedIndex(index);\n setDraggedItem(items[index]);\n },\n [items]\n );\n\n const handleDragMove = useCallback(\n (e: MouseEvent | TouchEvent) => {\n if (draggedIndex === null) return;\n\n const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX;\n const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY;\n\n const draggedElement = itemRefs.current[draggedIndex];\n if (!draggedElement) return;\n\n const offsetX = clientX - dragStartPosRef.current.x;\n const offsetY = clientY - dragStartPosRef.current.y;\n\n draggedElement.style.transform = `translate(${offsetX}px, ${offsetY}px)`;\n draggedElement.style.zIndex = '1000';\n\n // Find the item being hovered over\n const hoveredIndex = itemRefs.current.findIndex((itemRef, index) => {\n if (!itemRef || index === draggedIndex) return false;\n const rect = itemRef.getBoundingClientRect();\n return clientY >= rect.top && clientY <= rect.bottom;\n });\n\n if (hoveredIndex !== -1 && hoveredIndex !== draggedIndex) {\n const newItems = [...items];\n const [removed] = newItems.splice(draggedIndex, 1);\n newItems.splice(hoveredIndex, 0, removed);\n setItems(newItems);\n setDraggedIndex(hoveredIndex);\n onChange?.(newItems);\n dragStartPosRef.current = { x: clientX, y: clientY };\n }\n },\n [draggedIndex, items, onChange]\n );\n\n const handleDragEnd = useCallback(() => {\n document.body.style.cursor = '';\n\n itemRefs.current.forEach((el) => {\n if (el) {\n el.style.transform = '';\n el.style.zIndex = '';\n }\n });\n\n setDraggedIndex(null);\n setDraggedItem(null);\n }, [draggedIndex]);\n\n useEffect(() => {\n if (draggedIndex !== null) {\n window.addEventListener('mousemove', handleDragMove);\n window.addEventListener('touchmove', handleDragMove);\n window.addEventListener('mouseup', handleDragEnd);\n window.addEventListener('touchend', handleDragEnd);\n }\n\n return () => {\n window.removeEventListener('mousemove', handleDragMove);\n window.removeEventListener('touchmove', handleDragMove);\n window.removeEventListener('mouseup', handleDragEnd);\n window.removeEventListener('touchend', handleDragEnd);\n };\n }, [draggedIndex, handleDragMove, handleDragEnd]);\n\n return {\n items,\n draggedItem,\n draggedIndex,\n itemRefs,\n handleDragStart,\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { Size, Variant, Position, Alignment } from './DropdownMenu.type';\n\nexport const DropdownMenuSizes: Record<Size, ViewProps> = {\n sm: {\n padding: '6px 8px',\n fontSize: '14px',\n minWidth: '160px',\n },\n md: {\n padding: '8px 12px',\n fontSize: '16px',\n minWidth: '180px',\n },\n lg: {\n padding: '10px 16px',\n fontSize: '18px',\n minWidth: '200px',\n },\n};\n\nexport const DropdownMenuVariants: Record<Variant, ViewProps> = {\n default: {\n backgroundColor: 'color.white',\n color: 'color.gray.800',\n },\n filled: {\n backgroundColor: 'color.gray.100',\n color: 'color.gray.800',\n },\n outline: {\n backgroundColor: 'color.white',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n color: 'color.gray.800',\n },\n};\n\nexport const DropdownMenuItemStates = {\n hover: {\n backgroundColor: 'color.gray.100',\n },\n active: {\n backgroundColor: 'color.gray.200',\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n};\n\n// Helper function to calculate position based on side and alignment\nexport const getDropdownPosition = (\n side: Position = 'bottom',\n align: Alignment = 'start'\n): ViewProps => {\n const positions: Record<Position, ViewProps> = {\n top: {\n bottom: '100%',\n marginBottom: '8px',\n ...(align === 'start' && { left: 0 }),\n ...(align === 'center' && { left: '50%', transform: 'translateX(-50%)' }),\n ...(align === 'end' && { right: 0 }),\n },\n right: {\n left: '100%',\n marginLeft: '8px',\n ...(align === 'start' && { top: 0 }),\n ...(align === 'center' && { top: '50%', transform: 'translateY(-50%)' }),\n ...(align === 'end' && { bottom: 0 }),\n },\n bottom: {\n top: '100%',\n marginTop: '8px',\n ...(align === 'start' && { left: 0 }),\n ...(align === 'center' && { left: '50%', transform: 'translateX(-50%)' }),\n ...(align === 'end' && { right: 0 }),\n },\n left: {\n right: '100%',\n marginRight: '8px',\n ...(align === 'start' && { top: 0 }),\n ...(align === 'center' && { top: '50%', transform: 'translateY(-50%)' }),\n ...(align === 'end' && { bottom: 0 }),\n },\n };\n\n return positions[side];\n};\n","import React, { createContext, useContext, useRef, useState } from 'react';\nimport { View, ViewProps } from 'app-studio';\nimport {\n DropdownMenuContextType,\n DropdownMenuItem as DropdownMenuItemType,\n Position,\n Alignment,\n} from './DropdownMenu.type';\nimport {\n DropdownMenuTriggerProps,\n DropdownMenuContentProps,\n DropdownMenuItemProps,\n DropdownMenuDividerProps,\n} from './DropdownMenu.props';\nimport {\n DropdownMenuSizes,\n DropdownMenuVariants,\n DropdownMenuItemStates,\n getDropdownPosition,\n} from './DropdownMenu.style';\n\n// Create context for the DropdownMenu\nconst DropdownMenuContext = createContext<DropdownMenuContextType>({\n isOpen: false,\n setIsOpen: () => {},\n activeSubmenuId: null,\n setActiveSubmenuId: () => {},\n size: 'md',\n variant: 'default',\n});\n\n// Provider component for the DropdownMenu context\nexport const DropdownMenuProvider: React.FC<{\n children: React.ReactNode;\n value: DropdownMenuContextType;\n}> = ({ children, value }) => {\n return (\n <DropdownMenuContext.Provider value={value}>\n {children}\n </DropdownMenuContext.Provider>\n );\n};\n\n// Hook to use the DropdownMenu context\nexport const useDropdownMenuContext = () => {\n const context = useContext(DropdownMenuContext);\n if (!context) {\n throw new Error(\n 'useDropdownMenuContext must be used within a DropdownMenuProvider'\n );\n }\n return context;\n};\n\n// DropdownMenu Trigger component\nexport const DropdownMenuTrigger: React.FC<DropdownMenuTriggerProps> = ({\n children,\n views,\n ...props\n}) => {\n const { isOpen, setIsOpen } = useDropdownMenuContext();\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n setIsOpen(!isOpen);\n };\n\n return (\n <View\n id=\"dropdown-trigger\"\n onClick={handleClick}\n cursor=\"pointer\"\n position=\"relative\"\n display=\"inline-block\"\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// DropdownMenu Content component\nexport const DropdownMenuContent: React.FC<DropdownMenuContentProps> = ({\n items,\n side = 'bottom',\n align = 'start',\n views,\n ...props\n}) => {\n const {\n isOpen, //activeSubmenuId, setActiveSubmenuId, size,\n variant,\n } = useDropdownMenuContext();\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <View\n id=\"dropdown-menu\"\n position=\"absolute\"\n zIndex={1000}\n borderRadius={4}\n boxShadow=\"0px 2px 8px rgba(0, 0, 0, 0.15)\"\n overflow=\"hidden\"\n {...getDropdownPosition(side, align)}\n {...DropdownMenuVariants[variant]}\n {...views?.menu}\n {...props}\n >\n {items.map((item, index) => {\n if (item.divider) {\n return <DropdownMenuDivider key={`divider-${index}`} views={views} />;\n }\n\n return <DropdownMenuItem key={item.id} item={item} views={views} />;\n })}\n </View>\n );\n};\n\n// DropdownMenu Item component\nexport const DropdownMenuItem: React.FC<DropdownMenuItemProps> = ({\n item,\n views,\n ...props\n}) => {\n const {\n activeSubmenuId,\n setActiveSubmenuId,\n size,\n //variant\n } = useDropdownMenuContext();\n\n const [isHovered, setIsHovered] = useState(false);\n const hasSubmenu = item.items && item.items.length > 0;\n const isSubmenuActive = activeSubmenuId === item.id;\n const itemRef = useRef<HTMLDivElement>(null);\n\n // Handle mouse enter event\n const handleMouseEnter = () => {\n setIsHovered(true);\n if (hasSubmenu) {\n setActiveSubmenuId(item.id);\n }\n };\n\n // Handle mouse leave event\n const handleMouseLeave = () => {\n setIsHovered(false);\n };\n\n // Handle click event\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (item.disabled) return;\n if (!hasSubmenu && item.onClick) {\n item.onClick();\n }\n };\n\n return (\n <View\n ref={itemRef}\n display=\"flex\"\n alignItems=\"center\"\n cursor={item.disabled ? 'not-allowed' : 'pointer'}\n opacity={item.disabled ? 0.5 : 1}\n position=\"relative\"\n {...DropdownMenuSizes[size]}\n _hover={!item.disabled ? DropdownMenuItemStates.hover : {}}\n backgroundColor={\n isHovered && !item.disabled ? 'color.gray.100' : 'transparent'\n }\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleClick}\n {...views?.item}\n {...props}\n >\n {item.icon && (\n <View marginRight={8} {...views?.icon}>\n {item.icon}\n </View>\n )}\n\n <View flexGrow={1}>{item.label}</View>\n\n {hasSubmenu && (\n <View marginLeft={8} {...views?.submenuIndicator}>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.59 16.59L13.17 12L8.59 7.41L10 6L16 12L10 18L8.59 16.59Z\"\n fill=\"currentColor\"\n />\n </svg>\n </View>\n )}\n\n {isSubmenuActive && hasSubmenu && (\n <DropdownMenuContent\n items={item.items || []}\n side=\"right\"\n align=\"start\"\n views={views}\n />\n )}\n </View>\n );\n};\n\n// DropdownMenu Divider component\nexport const DropdownMenuDivider: React.FC<DropdownMenuDividerProps> = ({\n views,\n ...props\n}) => {\n return (\n <View\n height=\"1px\"\n backgroundColor=\"color.gray.200\"\n margin=\"4px 0\"\n {...views?.divider}\n {...props}\n />\n );\n};\n\n// Main DropdownMenu View component\nexport const DropdownMenuView: React.FC<\n {\n trigger: React.ReactNode;\n items: DropdownMenuItemType[];\n side?: Position;\n align?: Alignment;\n views?: any;\n } & ViewProps\n> = ({\n trigger,\n items,\n side = 'bottom',\n align = 'start',\n views,\n\n themeMode: elementMode,\n ...props\n}) => {\n return (\n <View\n position=\"relative\"\n display=\"inline-block\"\n {...views?.container}\n {...props}\n >\n <DropdownMenuTrigger views={views}>{trigger}</DropdownMenuTrigger>\n\n <DropdownMenuContent\n items={items}\n side={side}\n align={align}\n views={views}\n />\n </View>\n );\n};\n","import React from 'react';\nimport {\n DropdownMenuProps,\n DropdownMenuType,\n} from './DropdownMenu/DropdownMenu.props';\nimport { useDropdownMenuState } from './DropdownMenu/DropdownMenu.state';\nimport {\n DropdownMenuProvider,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuDivider,\n DropdownMenuView,\n} from './DropdownMenu/DropdownMenu.view';\n\n/**\n * DropdownMenu component for displaying a menu when clicking on a trigger element.\n */\nconst DropdownMenuComponent: React.FC<DropdownMenuProps> = ({\n trigger,\n items,\n size = 'md',\n variant = 'default',\n side = 'bottom',\n align = 'start',\n defaultOpen = false,\n views,\n ...props\n}) => {\n const { isOpen, setIsOpen, activeSubmenuId, setActiveSubmenuId } =\n useDropdownMenuState(defaultOpen);\n\n return (\n <DropdownMenuProvider\n value={{\n isOpen,\n setIsOpen,\n activeSubmenuId,\n setActiveSubmenuId,\n size,\n variant,\n }}\n >\n <DropdownMenuView\n trigger={trigger}\n items={items}\n side={side}\n align={align}\n views={views}\n {...props}\n />\n </DropdownMenuProvider>\n );\n};\n\nexport const DropdownMenu = DropdownMenuComponent as DropdownMenuType;\n\n// Assign the sub-components to the main component\nDropdownMenu.Trigger = DropdownMenuTrigger;\nDropdownMenu.Content = DropdownMenuContent;\nDropdownMenu.Item = DropdownMenuItem;\nDropdownMenu.Divider = DropdownMenuDivider;\n","import { useState, useEffect } from 'react';\n\nexport const useDropdownMenuState = (defaultOpen: boolean = false) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [activeSubmenuId, setActiveSubmenuId] = useState<string | null>(null);\n\n // Close the dropdown menu when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const path = event.composedPath();\n const isOutside = !path.some(\n (element: any) =>\n element?.id === 'dropdown-menu' || element?.id === 'dropdown-trigger'\n );\n if (isOutside && isOpen) {\n setIsOpen(false);\n setActiveSubmenuId(null);\n }\n };\n\n // Close the dropdown menu when the window is resized\n const handleResize = () => {\n if (isOpen) {\n setIsOpen(false);\n setActiveSubmenuId(null);\n }\n };\n\n // Close the dropdown menu when the escape key is pressed\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n setIsOpen(false);\n setActiveSubmenuId(null);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n window.addEventListener('resize', handleResize);\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n window.removeEventListener('resize', handleResize);\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen]);\n\n return {\n isOpen,\n setIsOpen,\n activeSubmenuId,\n setActiveSubmenuId,\n };\n};\n","import { useState, useRef, useCallback, useMemo, useEffect } from 'react';\nimport { HoverCardProps } from './HoverCard.props';\n\n// Generate a unique ID for ARIA attributes\nconst generateId = (prefix: string) =>\n `${prefix}-${Math.random().toString(36).substring(2, 9)}`;\n\nexport const useHoverCardState = ({\n openDelay = 200,\n closeDelay = 300,\n}: Pick<HoverCardProps, 'openDelay' | 'closeDelay'> = {}) => {\n const [isOpen, setIsOpen] = useState(false);\n const openTimerRef = useRef<NodeJS.Timeout | null>(null);\n const closeTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n // Refs for trigger and content elements for positioning\n const triggerRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n\n // Unique IDs for ARIA attributes\n const contentId = useMemo(() => generateId('hovercard-content'), []);\n const triggerId = useMemo(() => generateId('hovercard-trigger'), []);\n\n const clearTimers = useCallback(() => {\n if (openTimerRef.current) {\n clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n const openCard = useCallback(() => {\n clearTimers(); // Clear any pending close\n if (!isOpen) {\n openTimerRef.current = setTimeout(() => {\n setIsOpen(true);\n }, openDelay);\n }\n }, [isOpen, openDelay, clearTimers]);\n\n const closeCard = useCallback(() => {\n clearTimers(); // Clear any pending open\n if (isOpen) {\n closeTimerRef.current = setTimeout(() => {\n setIsOpen(false);\n }, closeDelay);\n }\n }, [isOpen, closeDelay, clearTimers]);\n\n // Function specifically to cancel the close timer (e.g., when mouse enters content)\n const cancelCloseTimer = useCallback(() => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n // Cleanup timers on unmount\n useEffect(() => {\n return () => clearTimers();\n }, [clearTimers]);\n\n return {\n isOpen,\n openCard,\n closeCard,\n cancelCloseTimer,\n triggerRef,\n contentRef,\n contentId,\n triggerId,\n };\n};\n","import React, {\n createContext,\n useContext,\n Children,\n cloneElement,\n isValidElement,\n} from 'react';\nimport { View } from 'app-studio';\nimport { HoverCardContextType } from './HoverCard.type';\nimport {\n HoverCardContentProps,\n HoverCardTriggerProps,\n} from './HoverCard.props';\nimport { getContentPositionStyles } from './HoverCard.style';\nimport { useRect } from '../../../hooks/useRect';\n\n// Create context for the HoverCard\nconst HoverCardContext = createContext<HoverCardContextType>({\n isOpen: false,\n openCard: () => {},\n closeCard: () => {},\n cancelCloseTimer: () => {},\n triggerRef: { current: null },\n contentRef: { current: null },\n contentId: '',\n triggerId: '',\n});\n\nexport const HoverCardProvider: React.FC<{\n children: React.ReactNode;\n value: HoverCardContextType;\n}> = ({ children, value }) => {\n return (\n <HoverCardContext.Provider value={value}>\n {children}\n </HoverCardContext.Provider>\n );\n};\n\nexport const useHoverCardContext = () => {\n const context = useContext(HoverCardContext);\n if (!context) {\n throw new Error(\n 'useHoverCardContext must be used within a HoverCardProvider'\n );\n }\n return context;\n};\n\nexport const HoverCardTrigger: React.FC<HoverCardTriggerProps> = ({\n children,\n views,\n asChild = false,\n ...props\n}) => {\n const { openCard, closeCard, triggerRef, contentId, triggerId } =\n useHoverCardContext();\n\n const handleMouseEnter = () => openCard();\n const handleMouseLeave = () => closeCard();\n const handleFocus = () => openCard(); // For keyboard accessibility\n const handleBlur = () => closeCard(); // For keyboard accessibility\n\n const triggerProps = {\n ref: triggerRef,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onFocus: handleFocus,\n onBlur: handleBlur,\n id: triggerId,\n 'aria-describedby': contentId, // Link trigger to content for screen readers\n ...views?.container,\n ...props,\n };\n\n if (asChild && isValidElement(children)) {\n // Clone the child element and merge props\n const child = Children.only(children);\n return cloneElement(child, { ...triggerProps, ...child.props });\n }\n\n // Default: wrap children in a View\n return (\n <View position=\"relative\" display=\"inline-block\" {...triggerProps}>\n {children}\n </View>\n );\n};\n\nexport const HoverCardContent: React.FC<HoverCardContentProps> = ({\n children,\n views,\n side = 'bottom',\n align = 'center',\n sideOffset = 8,\n style: userStyle, // User provided style override\n backgroundColor = 'white',\n borderRadius = '4px',\n boxShadow = '0px 2px 8px rgba(0, 0, 0, 0.15)',\n padding = '12px',\n minWidth = '200px',\n maxWidth = '300px',\n ...props\n}) => {\n const {\n isOpen,\n cancelCloseTimer,\n closeCard,\n contentRef,\n triggerRef,\n contentId,\n triggerId,\n } = useHoverCardContext();\n\n // Use hook to measure trigger for positioning\n const triggerRect = useRect(triggerRef);\n\n // Calculate position based on trigger dimensions and side prop\n const positionStyles = getContentPositionStyles(\n triggerRect,\n side,\n align,\n sideOffset\n );\n\n const handleMouseEnter = () => cancelCloseTimer(); // Keep card open if mouse enters content\n const handleMouseLeave = () => closeCard();\n\n if (!isOpen) {\n return null; // Don't render content if not open\n }\n\n return (\n <View\n ref={contentRef}\n id={contentId}\n role=\"tooltip\" // Use tooltip role for accessibility\n aria-labelledby={triggerId} // Associate content with trigger\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n backgroundColor={backgroundColor}\n borderRadius={borderRadius}\n boxShadow={boxShadow}\n padding={padding}\n minWidth={minWidth}\n maxWidth={maxWidth}\n zIndex={1000}\n // Combine calculated position styles with user styles\n style={{\n ...positionStyles,\n ...userStyle, // Allow user override\n }}\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n );\n};\n","import React from 'react';\nimport { HoverCardProps, HoverCardType } from './HoverCard/HoverCard.props';\nimport { useHoverCardState } from './HoverCard/HoverCard.state';\nimport {\n HoverCardProvider,\n HoverCardTrigger,\n HoverCardContent,\n} from './HoverCard/HoverCard.view';\nimport { View } from 'app-studio';\n\n/**\n * HoverCard component displays floating content when hovering over a trigger element.\n * Supports configurable open and close delays for a smoother user experience.\n */\nconst HoverCardComponent: React.FC<HoverCardProps> = ({\n children,\n views,\n openDelay,\n closeDelay,\n ...props\n}) => {\n const hoverCardState = useHoverCardState({ openDelay, closeDelay });\n\n return (\n <HoverCardProvider value={hoverCardState}>\n <View\n position=\"relative\"\n display=\"inline-block\"\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n </HoverCardProvider>\n );\n};\n\nexport const HoverCard = HoverCardComponent as HoverCardType;\n\nHoverCard.Trigger = HoverCardTrigger;\nHoverCard.Content = HoverCardContent;\n","import { ViewProps } from 'app-studio';\nimport { CSSProperties } from 'react';\nimport { Alignment, Side } from './HoverCard.type';\n\n// Basic positioning styles for the content\nexport const ContentPositions: Record<\n Side,\n (align: Alignment, sideOffset?: number) => ViewProps\n> = {\n top: (align, sideOffset = 8) => ({\n position: 'absolute',\n bottom: '100%',\n marginBottom: `${sideOffset}px`,\n ...(align === 'start' && { left: 0 }),\n ...(align === 'center' && { left: '50%', transform: 'translateX(-50%)' }),\n ...(align === 'end' && { right: 0 }),\n }),\n right: (align, sideOffset = 8) => ({\n position: 'absolute',\n left: '100%',\n marginLeft: `${sideOffset}px`,\n ...(align === 'start' && { top: 0 }),\n ...(align === 'center' && { top: '50%', transform: 'translateY(-50%)' }),\n ...(align === 'end' && { bottom: 0 }),\n }),\n bottom: (align, sideOffset = 8) => ({\n position: 'absolute',\n top: '100%',\n marginTop: `${sideOffset}px`,\n ...(align === 'start' && { left: 0 }),\n ...(align === 'center' && { left: '50%', transform: 'translateX(-50%)' }),\n ...(align === 'end' && { right: 0 }),\n }),\n left: (align, sideOffset = 8) => ({\n position: 'absolute',\n right: '100%',\n marginRight: `${sideOffset}px`,\n ...(align === 'start' && { top: 0 }),\n ...(align === 'center' && { top: '50%', transform: 'translateY(-50%)' }),\n ...(align === 'end' && { bottom: 0 }),\n }),\n};\n\n// More advanced positioning using element measurements\nexport const getContentPositionStyles = (\n triggerRect: DOMRect | null,\n side: Side = 'bottom',\n align: Alignment = 'center',\n sideOffset: number = 8\n): CSSProperties => {\n if (!triggerRect) {\n return { position: 'absolute', opacity: 0, pointerEvents: 'none' }; // Hide if trigger isn't measured\n }\n\n const styles: CSSProperties = {\n position: 'absolute',\n zIndex: 1000,\n };\n\n // Calculate position based on side and alignment\n switch (side) {\n case 'top':\n styles.bottom = '100%';\n styles.marginBottom = sideOffset;\n if (align === 'start') {\n styles.left = 0;\n } else if (align === 'center') {\n styles.left = '50%';\n styles.transform = 'translateX(-50%)';\n } else if (align === 'end') {\n styles.right = 0;\n }\n break;\n case 'right':\n styles.left = '100%';\n styles.marginLeft = sideOffset;\n if (align === 'start') {\n styles.top = 0;\n } else if (align === 'center') {\n styles.top = '50%';\n styles.transform = 'translateY(-50%)';\n } else if (align === 'end') {\n styles.bottom = 0;\n }\n break;\n case 'bottom':\n styles.top = '100%';\n styles.marginTop = sideOffset;\n if (align === 'start') {\n styles.left = 0;\n } else if (align === 'center') {\n styles.left = '50%';\n styles.transform = 'translateX(-50%)';\n } else if (align === 'end') {\n styles.right = 0;\n }\n break;\n case 'left':\n styles.right = '100%';\n styles.marginRight = sideOffset;\n if (align === 'start') {\n styles.top = 0;\n } else if (align === 'center') {\n styles.top = '50%';\n styles.transform = 'translateY(-50%)';\n } else if (align === 'end') {\n styles.bottom = 0;\n }\n break;\n }\n\n return styles;\n};\n","import { useState, useCallback, useLayoutEffect } from 'react';\n\n/**\n * A hook that returns the DOMRect of an element.\n * @param ref React ref object for the element to measure\n * @returns DOMRect of the element or null if the element is not available\n */\nexport const useRect = <T extends HTMLElement>(\n ref: React.RefObject<T>\n): DOMRect | null => {\n const [rect, setRect] = useState<DOMRect | null>(null);\n\n const updateRect = useCallback(() => {\n if (ref.current) {\n setRect(ref.current.getBoundingClientRect());\n }\n }, [ref]);\n\n useLayoutEffect(() => {\n if (!ref.current) return;\n\n updateRect();\n\n // Update on resize and scroll\n window.addEventListener('resize', updateRect);\n window.addEventListener('scroll', updateRect);\n\n return () => {\n window.removeEventListener('resize', updateRect);\n window.removeEventListener('scroll', updateRect);\n };\n }, [ref, updateRect]);\n\n return rect;\n};\n","import { ViewProps } from 'app-studio';\nimport { Orientation, Size, Variant } from './Menubar.type';\n\nexport const MenubarSizes: Record<Size, ViewProps> = {\n sm: {\n padding: '6px 10px',\n fontSize: '14px',\n },\n md: {\n padding: '8px 12px',\n fontSize: '16px',\n },\n lg: {\n padding: '10px 16px',\n fontSize: '18px',\n },\n};\n\nexport const MenubarVariants: Record<Variant, ViewProps> = {\n default: {\n backgroundColor: 'transparent',\n color: 'color.gray.800',\n },\n filled: {\n backgroundColor: 'color.gray.100',\n color: 'color.gray.800',\n },\n outline: {\n backgroundColor: 'transparent',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n color: 'color.gray.800',\n },\n};\n\nexport const MenubarOrientations: Record<Orientation, ViewProps> = {\n horizontal: {\n flexDirection: 'row',\n },\n vertical: {\n flexDirection: 'column',\n },\n};\n\nexport const MenubarItemStates = {\n active: {\n backgroundColor: 'color.gray.200',\n fontWeight: 'bold',\n },\n hover: {\n backgroundColor: 'color.gray.100',\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n};\n\nexport const getMenubarContentPosition = (\n orientation: Orientation\n): ViewProps => {\n if (orientation === 'horizontal') {\n return {\n top: '100%',\n left: 0,\n };\n }\n\n return {\n top: 0,\n left: '100%',\n };\n};\n","import React, { createContext, useContext } from 'react';\nimport { View, ViewProps } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Vertical } from 'app-studio';\nimport {\n MenubarContextType,\n MenubarItem as MenubarItemType,\n Orientation,\n Size,\n Variant,\n} from './Menubar.type';\nimport {\n MenubarRootProps,\n MenubarMenuProps,\n MenubarTriggerProps,\n MenubarContentProps,\n MenubarItemProps,\n MenubarSeparatorProps,\n} from './Menubar.props';\nimport {\n MenubarSizes,\n MenubarVariants,\n MenubarOrientations,\n MenubarItemStates,\n getMenubarContentPosition,\n} from './Menubar.style';\n\n// Create context for the Menubar\nconst MenubarContext = createContext<MenubarContextType>({\n activeMenuId: null,\n setActiveMenuId: () => {},\n openMenuId: null,\n setOpenMenuId: () => {},\n isMenuOpen: () => false,\n toggleMenu: () => {},\n orientation: 'horizontal',\n size: 'md',\n variant: 'default',\n});\n\n// Hook to use the Menubar context\nexport const useMenubarContext = () => useContext(MenubarContext);\n\n// Provider component for the Menubar context\nexport const MenubarProvider: React.FC<{\n value: MenubarContextType;\n children: React.ReactNode;\n}> = ({ value, children }) => {\n return (\n <MenubarContext.Provider value={value}>{children}</MenubarContext.Provider>\n );\n};\n\n// Menubar Root component\nexport const MenubarRoot: React.FC<MenubarRootProps> = ({\n children,\n orientation = 'horizontal',\n size = 'md',\n variant = 'default',\n views,\n ...props\n}) => {\n const Container = orientation === 'horizontal' ? Horizontal : Vertical;\n\n return (\n <Container\n role=\"menubar\"\n aria-orientation={orientation}\n {...MenubarOrientations[orientation]}\n {...MenubarVariants[variant]}\n {...views?.container}\n {...props}\n >\n {children}\n </Container>\n );\n};\n\n// Menubar Menu component\nexport const MenubarMenu: React.FC<MenubarMenuProps> = ({\n children,\n id,\n disabled = false,\n views,\n}) => {\n const { orientation } = useMenubarContext();\n const Container = orientation === 'horizontal' ? Horizontal : Vertical;\n\n return (\n <Container\n role=\"none\"\n position=\"relative\"\n opacity={disabled ? 0.5 : 1}\n pointerEvents={disabled ? 'none' : 'auto'}\n {...views?.menu}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n // Pass the menuId to MenubarTrigger and MenubarContent\n return React.cloneElement(child, {\n ...child.props,\n menuId: id,\n });\n }\n return child;\n })}\n </Container>\n );\n};\n\n// Menubar Trigger component\nexport const MenubarTrigger: React.FC<MenubarTriggerProps> = ({\n children,\n menuId,\n disabled = false,\n views,\n}) => {\n const { activeMenuId, setActiveMenuId, toggleMenu, isMenuOpen, size } =\n useMenubarContext();\n\n const isActive = activeMenuId === menuId;\n const isOpen = isMenuOpen(menuId);\n\n const handleClick = () => {\n if (disabled) return;\n\n setActiveMenuId(menuId);\n toggleMenu(menuId);\n };\n\n return (\n <View\n id=\"menubar-trigger\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n aria-expanded={isOpen}\n userSelect=\"none\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n {...MenubarSizes[size]}\n {...(isActive ? MenubarItemStates.active : {})}\n {...(disabled ? MenubarItemStates.disabled : {})}\n _hover={!disabled ? MenubarItemStates.hover : {}}\n onClick={handleClick}\n {...views?.trigger}\n >\n {children}\n </View>\n );\n};\n\n// Menubar Content component\nexport const MenubarContent: React.FC<MenubarContentProps> = ({\n children,\n menuId,\n views,\n}) => {\n const { isMenuOpen, orientation } = useMenubarContext();\n\n const isOpen = isMenuOpen(menuId);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <View\n id=\"menubar-content\"\n role=\"menu\"\n position=\"absolute\"\n zIndex={1000}\n minWidth=\"200px\"\n backgroundColor=\"color.white\"\n borderRadius={4}\n boxShadow=\"0px 2px 8px rgba(0, 0, 0, 0.15)\"\n overflow=\"hidden\"\n {...getMenubarContentPosition(orientation)}\n {...views?.content}\n >\n {children}\n </View>\n );\n};\n\n// Menubar Item component\nexport const MenubarItem: React.FC<MenubarItemProps> = ({\n children,\n // id,\n icon,\n disabled = false,\n onClick,\n views,\n}) => {\n const { size } = useMenubarContext();\n\n const handleClick = () => {\n if (disabled || !onClick) return;\n onClick();\n };\n\n return (\n <View\n role=\"menuitem\"\n cursor={disabled ? 'not-allowed' : 'pointer'}\n userSelect=\"none\"\n display=\"flex\"\n alignItems=\"center\"\n opacity={disabled ? 0.5 : 1}\n {...MenubarSizes[size]}\n _hover={!disabled ? MenubarItemStates.hover : {}}\n onClick={handleClick}\n {...views?.item}\n >\n {icon && (\n <View marginRight={8} {...views?.icon}>\n {icon}\n </View>\n )}\n {children}\n </View>\n );\n};\n\n// Menubar Separator component\nexport const MenubarSeparator: React.FC<MenubarSeparatorProps> = ({\n views,\n}) => {\n return (\n <View\n role=\"separator\"\n height=\"1px\"\n backgroundColor=\"color.gray.200\"\n margin=\"4px 0\"\n {...views?.separator}\n />\n );\n};\n\n// Main Menubar View component\nexport const MenubarView: React.FC<\n {\n items: MenubarItemType[];\n orientation: Orientation;\n size: Size;\n variant: Variant;\n views?: any;\n } & ViewProps\n> = ({ items, orientation, size, variant, views, themeMode: elementMode }) => {\n return (\n <MenubarRoot\n orientation={orientation}\n size={size}\n variant={variant}\n views={views}\n >\n {items.map((item) => (\n <MenubarMenu\n key={item.id}\n id={item.id}\n disabled={item.disabled}\n views={views}\n >\n <MenubarTrigger menuId={item.id} views={views}>\n {item.icon && (\n <View marginRight={8} {...views?.icon}>\n {item.icon}\n </View>\n )}\n {item.label}\n </MenubarTrigger>\n\n {item.items && item.items.length > 0 && (\n <MenubarContent menuId={item.id} views={views}>\n {item.items.map((subItem, index) => {\n if (subItem.separator) {\n return (\n <MenubarSeparator\n key={`separator-${index}`}\n views={views}\n />\n );\n }\n\n return (\n <MenubarItem\n key={subItem.id}\n id={subItem.id}\n icon={subItem.icon}\n disabled={subItem.disabled}\n onClick={subItem.onClick}\n views={views}\n >\n {subItem.label}\n </MenubarItem>\n );\n })}\n </MenubarContent>\n )}\n </MenubarMenu>\n ))}\n </MenubarRoot>\n );\n};\n","import React from 'react';\nimport { MenubarProps, MenubarType } from './Menubar/Menubar.props';\nimport { useMenubarState } from './Menubar/Menubar.state';\nimport {\n MenubarProvider,\n MenubarRoot,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarItem,\n MenubarSeparator,\n MenubarView,\n} from './Menubar/Menubar.view';\n\n/**\n * Menubar component for creating horizontal or vertical menu bars with dropdown menus.\n */\nconst MenubarComponent: React.FC<MenubarProps> = ({\n items,\n orientation = 'horizontal',\n size = 'md',\n variant = 'default',\n defaultActiveMenuId = null,\n defaultOpenMenuId = null,\n views,\n ...props\n}) => {\n const {\n activeMenuId,\n setActiveMenuId,\n openMenuId,\n setOpenMenuId,\n isMenuOpen,\n toggleMenu,\n } = useMenubarState(defaultActiveMenuId, defaultOpenMenuId);\n\n return (\n <MenubarProvider\n value={{\n activeMenuId,\n setActiveMenuId,\n openMenuId,\n setOpenMenuId,\n isMenuOpen,\n toggleMenu,\n orientation,\n size,\n variant,\n }}\n >\n <MenubarView\n items={items}\n orientation={orientation}\n size={size}\n variant={variant}\n views={views}\n {...props}\n />\n </MenubarProvider>\n );\n};\n\nexport const Menubar = MenubarComponent as MenubarType;\n\n// Assign the sub-components to the main component\nMenubar.Root = MenubarRoot;\nMenubar.Menu = MenubarMenu;\nMenubar.Trigger = MenubarTrigger;\nMenubar.Content = MenubarContent;\nMenubar.Item = MenubarItem;\nMenubar.Separator = MenubarSeparator;\n","import { useState, useEffect } from 'react';\n\nexport const useMenubarState = (\n defaultActiveMenuId: string | null = null,\n defaultOpenMenuId: string | null = null\n) => {\n const [activeMenuId, setActiveMenuId] = useState<string | null>(\n defaultActiveMenuId\n );\n const [openMenuId, setOpenMenuId] = useState<string | null>(\n defaultOpenMenuId\n );\n\n const isMenuOpen = (menuId: string) => {\n return openMenuId === menuId;\n };\n\n const toggleMenu = (menuId: string) => {\n setOpenMenuId((prevOpenMenuId) => {\n return prevOpenMenuId === menuId ? null : menuId;\n });\n };\n\n // Close the open menu when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const path = event.composedPath();\n const isOutside = !path.some(\n (element: any) =>\n element?.id === 'menubar-content' || element?.id === 'menubar-trigger'\n );\n if (isOutside && openMenuId !== null) {\n setOpenMenuId(null);\n }\n };\n\n // Close the open menu when the escape key is pressed\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && openMenuId !== null) {\n setOpenMenuId(null);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [openMenuId]);\n\n return {\n activeMenuId,\n setActiveMenuId,\n openMenuId,\n setOpenMenuId,\n isMenuOpen,\n toggleMenu,\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { Size, Variant, Shape } from './Pagination.type';\n\nexport const PaginationSizes: Record<Size, ViewProps> = {\n sm: {\n fontSize: '12px',\n padding: '4px 8px',\n minWidth: '28px',\n height: '28px',\n },\n md: {\n fontSize: '14px',\n padding: '6px 12px',\n minWidth: '36px',\n height: '36px',\n },\n lg: {\n fontSize: '16px',\n padding: '8px 16px',\n minWidth: '44px',\n height: '44px',\n },\n};\n\nexport const PaginationVariants: Record<Variant, ViewProps> = {\n default: {\n backgroundColor: 'transparent',\n color: 'color.gray.800',\n _hover: {\n backgroundColor: 'color.gray.100',\n },\n },\n filled: {\n backgroundColor: 'color.gray.100',\n color: 'color.gray.800',\n _hover: {\n backgroundColor: 'color.gray.200',\n },\n },\n outline: {\n backgroundColor: 'transparent',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n color: 'color.gray.800',\n _hover: {\n backgroundColor: 'color.gray.100',\n },\n },\n};\n\nexport const PaginationShapes: Record<Shape, ViewProps> = {\n rounded: {\n borderRadius: '4px',\n },\n square: {\n borderRadius: '0px',\n },\n circular: {\n borderRadius: '50%',\n },\n};\n\nexport const ActivePageButtonStyles: ViewProps = {\n backgroundColor: 'color.blue.500',\n color: 'color.white',\n _hover: {\n backgroundColor: 'color.blue.600',\n },\n};\n\nexport const DisabledButtonStyles: ViewProps = {\n opacity: 0.5,\n cursor: 'not-allowed',\n _hover: {\n backgroundColor: 'transparent',\n },\n};\n","import React from 'react';\nimport { View } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { ChevronIcon } from '../../Icon/Icon';\nimport { PaginationProps } from './Pagination.props';\nimport {\n PaginationSizes,\n PaginationVariants,\n PaginationShapes,\n ActivePageButtonStyles,\n DisabledButtonStyles,\n} from './Pagination.style';\n\nexport const PaginationView: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n pageSize = 10,\n pageSizeOptions = [\n { label: '10 / page', value: 10 },\n { label: '20 / page', value: 20 },\n { label: '50 / page', value: 50 },\n { label: '100 / page', value: 100 },\n ],\n onPageSizeChange,\n showPageSizeSelector = false,\n showPageInfo = true,\n maxPageButtons = 5,\n showFirstLastButtons = false,\n size = 'md',\n variant = 'default',\n shape = 'rounded',\n visiblePageNumbers,\n views,\n ...props\n}) => {\n const handlePageChange = (page: number) => {\n if (page < 1 || page > totalPages || page === currentPage) {\n return;\n }\n onPageChange(page);\n };\n\n const handlePageSizeChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n if (onPageSizeChange) {\n onPageSizeChange(Number(e.target.value));\n }\n };\n\n const renderPageButton = (pageNumber: number | string, index: number) => {\n if (pageNumber === '...') {\n return (\n <View\n key={`ellipsis-${index}`}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n {...PaginationSizes[size]}\n {...views?.ellipsis}\n >\n ...\n </View>\n );\n }\n\n const isCurrentPage = pageNumber === currentPage;\n\n return (\n <View\n key={`page-${pageNumber}`}\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n cursor={isCurrentPage ? 'default' : 'pointer'}\n {...PaginationSizes[size]}\n {...PaginationVariants[variant]}\n {...PaginationShapes[shape]}\n {...(isCurrentPage ? ActivePageButtonStyles : {})}\n onClick={() => handlePageChange(pageNumber as number)}\n aria-label={`Page ${pageNumber}`}\n aria-current={isCurrentPage ? 'page' : undefined}\n {...(isCurrentPage ? views?.activePageButton : views?.pageButton)}\n >\n {pageNumber}\n </View>\n );\n };\n\n return (\n <Horizontal alignItems=\"center\" gap={8} {...views?.container} {...props}>\n {/* First page button */}\n {showFirstLastButtons && (\n <View\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n cursor={currentPage === 1 ? 'not-allowed' : 'pointer'}\n {...PaginationSizes[size]}\n {...PaginationVariants[variant]}\n {...PaginationShapes[shape]}\n {...(currentPage === 1 ? DisabledButtonStyles : {})}\n onClick={() => handlePageChange(1)}\n aria-label=\"First page\"\n disabled={currentPage === 1}\n {...views?.navigationButton}\n >\n <ChevronIcon orientation=\"left\" widthHeight={16} />\n <ChevronIcon orientation=\"left\" widthHeight={16} marginLeft=\"-8px\" />\n </View>\n )}\n\n {/* Previous page button */}\n <View\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n cursor={currentPage === 1 ? 'not-allowed' : 'pointer'}\n {...PaginationSizes[size]}\n {...PaginationVariants[variant]}\n {...PaginationShapes[shape]}\n {...(currentPage === 1 ? DisabledButtonStyles : {})}\n onClick={() => handlePageChange(currentPage - 1)}\n aria-label=\"Previous page\"\n disabled={currentPage === 1}\n {...views?.navigationButton}\n >\n <ChevronIcon orientation=\"left\" widthHeight={16} />\n </View>\n\n {/* Page buttons */}\n {visiblePageNumbers.map((pageNumber: number, index: number) =>\n renderPageButton(pageNumber, index)\n )}\n\n {/* Next page button */}\n <View\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n cursor={currentPage === totalPages ? 'not-allowed' : 'pointer'}\n {...PaginationSizes[size]}\n {...PaginationVariants[variant]}\n {...PaginationShapes[shape]}\n {...(currentPage === totalPages ? DisabledButtonStyles : {})}\n onClick={() => handlePageChange(currentPage + 1)}\n aria-label=\"Next page\"\n disabled={currentPage === totalPages}\n {...views?.navigationButton}\n >\n <ChevronIcon orientation=\"right\" widthHeight={16} />\n </View>\n\n {/* Last page button */}\n {showFirstLastButtons && (\n <View\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n cursor={currentPage === totalPages ? 'not-allowed' : 'pointer'}\n {...PaginationSizes[size]}\n {...PaginationVariants[variant]}\n {...PaginationShapes[shape]}\n {...(currentPage === totalPages ? DisabledButtonStyles : {})}\n onClick={() => handlePageChange(totalPages)}\n aria-label=\"Last page\"\n disabled={currentPage === totalPages}\n {...views?.navigationButton}\n >\n <ChevronIcon orientation=\"right\" widthHeight={16} />\n <ChevronIcon orientation=\"right\" widthHeight={16} marginLeft=\"-8px\" />\n </View>\n )}\n\n {/* Page information */}\n {showPageInfo && (\n <Text marginLeft={16} color=\"color.gray.600\" {...views?.pageInfo}>\n Page {currentPage} of {totalPages}\n </Text>\n )}\n\n {/* Page size selector */}\n {showPageSizeSelector && onPageSizeChange && (\n <View\n as=\"select\"\n marginLeft={16}\n padding=\"4px 8px\"\n borderRadius=\"4px\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor=\"color.gray.200\"\n backgroundColor=\"color.white\"\n cursor=\"pointer\"\n value={pageSize}\n onChange={handlePageSizeChange}\n {...views?.pageSizeSelector}\n >\n {pageSizeOptions.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </View>\n )}\n </Horizontal>\n );\n};\n","/**\n * Separator Styles\n *\n * Defines the styles for the Separator component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Orientation, Variant, Thickness } from './Separator.type';\n\n/**\n * Orientation configurations for the Separator component\n */\nexport const SeparatorOrientations: Record<Orientation, ViewProps> = {\n horizontal: {\n width: '100%',\n height: 'auto',\n },\n vertical: {\n width: 'auto',\n height: '100%',\n },\n};\n\n/**\n * Variant configurations for the Separator component\n */\nexport const getSeparator = (themeMode: string): Record<Variant, string> => {\n return {\n solid: 'solid',\n dashed: 'dashed',\n dotted: 'dotted',\n };\n // Add dark mode conditional styling here\n};\n\n// For backward compatibility\nexport const SeparatorVariants = getSeparator('light');\n\n/**\n * Thickness configurations for the Separator component\n * Following the 4px grid system\n */\nexport const SeparatorThicknesses: Record<Thickness, string> = {\n thin: '1px',\n medium: '2px', // 0.5 × 4px grid\n thick: '4px', // 1 × 4px grid\n};\n\n/**\n * Default styles for the Separator component\n */\nexport const DefaultSeparatorStyles = {\n container: {\n transition: 'all 0.2s ease',\n },\n label: {\n fontSize: '14px',\n color: 'color.gray.500',\n paddingHorizontal: '8px', // 2 × 4px grid\n transition: 'all 0.2s ease',\n },\n};\n","/**\n * Separator View Component\n *\n * Renders a separator with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { View } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { useTheme } from 'app-studio';\nimport { SeparatorProps } from './Separator.props';\nimport {\n SeparatorVariants,\n SeparatorThicknesses,\n DefaultSeparatorStyles,\n} from './Separator.style';\n\nexport const SeparatorView: React.FC<SeparatorProps> = ({\n orientation = 'horizontal',\n variant = 'solid',\n thickness = 'thin',\n color,\n spacing = '0px',\n label,\n decorative = false,\n views,\n themeMode: elementMode,\n ...props\n}) => {\n // Access theme if needed for future enhancements\n const { themeMode } = useTheme();\n // Use provided color or default from theme\n const separatorColor = color || 'color.gray.200';\n const borderStyle = SeparatorVariants[variant];\n const borderWidth = SeparatorThicknesses[thickness];\n\n // Set appropriate ARIA attributes based on decorative prop\n const ariaProps = decorative\n ? { 'aria-hidden': 'true' }\n : { role: 'separator', 'aria-orientation': orientation };\n\n // If there's a label, render a horizontal separator with the label in the middle\n if (label && orientation === 'horizontal') {\n return (\n <Horizontal\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"100%\"\n padding={spacing}\n {...ariaProps}\n {...props}\n >\n <View\n height=\"0px\"\n flexGrow={1}\n borderTopWidth={borderWidth}\n borderTopStyle={borderStyle as any}\n borderTopColor={separatorColor}\n {...DefaultSeparatorStyles.container}\n {...views?.container}\n />\n <Text {...DefaultSeparatorStyles.label} {...views?.label}>\n {label}\n </Text>\n <View\n height=\"0px\"\n flexGrow={1}\n borderTopWidth={borderWidth}\n borderTopStyle={borderStyle as any}\n borderTopColor={separatorColor}\n {...DefaultSeparatorStyles.container}\n {...views?.container}\n />\n </Horizontal>\n );\n }\n\n // For horizontal separator without label\n if (orientation === 'horizontal') {\n return (\n <View\n height=\"0px\"\n width=\"100%\"\n borderTopWidth={borderWidth}\n borderTopStyle={borderStyle as any}\n borderTopColor={separatorColor}\n padding={spacing}\n {...DefaultSeparatorStyles.container}\n {...ariaProps}\n {...views?.container}\n {...props}\n />\n );\n }\n\n // For vertical separator\n return (\n <View\n width=\"0px\"\n height=\"100%\"\n borderLeftWidth={borderWidth}\n borderLeftStyle={borderStyle as any}\n borderLeftColor={separatorColor}\n padding={spacing}\n {...DefaultSeparatorStyles.container}\n {...ariaProps}\n {...views?.container}\n {...props}\n />\n );\n};\n","import React from 'react';\nimport { SeparatorProps } from './Separator/Separator.props';\nimport { SeparatorView } from './Separator/Separator.view';\n\n/**\n * Separator component for visually or semantically separating content.\n */\nconst SeparatorComponent: React.FC<SeparatorProps> = (props) => {\n return <SeparatorView {...props} />;\n};\n\nexport const Separator = SeparatorComponent;\n\nexport const Divider = SeparatorComponent;\n","/**\n * Sidebar Styles\n *\n * Defines the styles for the Sidebar component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport {\n Position,\n Size,\n Variant,\n Elevation,\n TransitionPreset,\n} from './Sidebar.type';\n\n/**\n * Size configurations for the Sidebar component\n * Following the 4px grid system\n */\nexport const SidebarSizes: Record<\n Size,\n { expandedWidth: string; collapsedWidth: string }\n> = {\n sm: {\n expandedWidth: '240px', // 60 × 4px grid\n collapsedWidth: '64px', // 16 × 4px grid\n },\n md: {\n expandedWidth: '280px', // 70 × 4px grid\n collapsedWidth: '72px', // 18 × 4px grid\n },\n lg: {\n expandedWidth: '320px', // 80 × 4px grid\n collapsedWidth: '80px', // 20 × 4px grid\n },\n xl: {\n expandedWidth: '360px', // 90 × 4px grid\n collapsedWidth: '88px', // 22 × 4px grid\n },\n};\n\n/**\n * Variant styles for the Sidebar component\n */\nexport const getSidebar = (themeMode: string): Record<Variant, ViewProps> => {\n return {\n default: {\n backgroundColor: 'color.white',\n color: 'color.gray.800',\n\n transition: 'all 0.2s ease',\n },\n filled: {\n backgroundColor: 'color.gray.100',\n color: 'color.gray.800',\n\n transition: 'all 0.2s ease',\n },\n outline: {\n backgroundColor: 'color.white',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n color: 'color.gray.800',\n\n transition: 'all 0.2s ease',\n },\n subtle: {\n backgroundColor: 'color.gray.50',\n color: 'color.gray.800',\n\n transition: 'all 0.2s ease',\n },\n elevated: {\n backgroundColor: 'color.white',\n boxShadow: '0px 4px 8px rgba(0, 0, 0, 0.1)',\n color: 'color.gray.800',\n\n transition: 'all 0.2s ease',\n },\n };\n // Add dark mode conditional styling here\n};\n\n// For backward compatibility\nexport const SidebarVariants = getSidebar('light');\n\n/**\n * Position styles for the Sidebar component\n */\nexport const SidebarPositions: Record<Position, ViewProps> = {\n left: {\n left: 0,\n borderRightWidth: '1px',\n borderRightStyle: 'solid',\n borderRightColor: 'color.gray.200',\n },\n right: {\n right: 0,\n borderLeftWidth: '1px',\n borderLeftStyle: 'solid',\n borderLeftColor: 'color.gray.200',\n },\n};\n\n/**\n * Elevation styles for the Sidebar component\n */\nexport const SidebarElevations: Record<Elevation, ViewProps> = {\n none: {},\n low: {\n boxShadow: '0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24)',\n },\n medium: {\n boxShadow: '0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23)',\n },\n high: {\n boxShadow: '0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23)',\n },\n};\n\n/**\n * Transition presets for the Sidebar component\n */\nexport const SidebarTransitions: Record<TransitionPreset, string> = {\n fast: 'width 0.2s ease, transform 0.2s ease',\n normal: 'width 0.3s ease, transform 0.3s ease',\n slow: 'width 0.5s ease, transform 0.5s ease',\n bounce:\n 'width 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55), transform 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55)',\n};\n\n/**\n * Active item styles for the Sidebar navigation items\n */\nexport const SidebarItemActive: ViewProps = {\n backgroundColor: 'color.blue.50',\n color: 'color.blue.700',\n fontWeight: '600', // Semi-bold for active items\n borderLeftWidth: '3px',\n borderLeftStyle: 'solid',\n borderLeftColor: 'color.blue.600',\n};\n\n/**\n * Hover styles for the Sidebar navigation items\n */\nexport const SidebarItemHover: ViewProps = {\n backgroundColor: 'color.gray.100',\n transition: 'background-color 0.2s ease',\n};\n","import React, { createContext, useContext } from 'react';\nimport { View } from 'app-studio';\nimport { Vertical } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { ChevronIcon } from '../../Icon/Icon';\nimport {\n SidebarProps,\n SidebarHeaderProps,\n SidebarContentProps,\n SidebarFooterProps,\n} from './Sidebar.props';\nimport {\n SidebarSizes,\n SidebarVariants,\n SidebarPositions,\n SidebarElevations,\n SidebarTransitions,\n} from './Sidebar.style';\nimport { SidebarContextType } from './Sidebar.type';\nimport { Badge } from '../../Badge/Badge';\n\n// Create context for the Sidebar\nconst SidebarContext = createContext<SidebarContextType>({\n isExpanded: true,\n toggleExpanded: () => {},\n expand: () => {},\n collapse: () => {},\n position: 'left',\n size: 'md',\n variant: 'default',\n});\n\n// Hook to use the Sidebar context\nexport const useSidebarContext = () => useContext(SidebarContext);\n\n// Provider component for the Sidebar context\nexport const SidebarProvider: React.FC<{\n value: SidebarContextType;\n children: React.ReactNode;\n}> = ({ value, children }) => {\n return (\n <SidebarContext.Provider value={value}>{children}</SidebarContext.Provider>\n );\n};\n\n// Sidebar Header component\nexport const SidebarHeader: React.FC<SidebarHeaderProps> = ({\n children,\n showToggleButton = true,\n views,\n ...props\n}) => {\n const { isExpanded, toggleExpanded, position } = useSidebarContext();\n\n return (\n <Horizontal\n width=\"100%\"\n padding=\"16px\"\n borderBottomWidth=\"1px\"\n borderBottomStyle=\"solid\"\n borderBottomColor=\"color.gray.200\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n {...views?.header}\n {...props}\n >\n {isExpanded ? (\n <Horizontal\n width=\"100%\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n {children}\n {showToggleButton && (\n <View\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"32px\"\n height=\"32px\"\n borderRadius=\"4px\"\n backgroundColor=\"transparent\"\n cursor=\"pointer\"\n _hover={{ backgroundColor: 'color.gray.100' }}\n onClick={toggleExpanded}\n aria-label={isExpanded ? 'Collapse sidebar' : 'Expand sidebar'}\n {...views?.toggleButton}\n >\n <ChevronIcon\n orientation={position === 'left' ? 'left' : 'right'}\n widthHeight={16}\n {...views?.toggleButtonIcon}\n />\n </View>\n )}\n </Horizontal>\n ) : (\n <View\n width=\"100%\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {showToggleButton && (\n <View\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"32px\"\n height=\"32px\"\n borderRadius=\"4px\"\n backgroundColor=\"transparent\"\n cursor=\"pointer\"\n _hover={{ backgroundColor: 'color.gray.100' }}\n onClick={toggleExpanded}\n aria-label={isExpanded ? 'Collapse sidebar' : 'Expand sidebar'}\n {...views?.toggleButton}\n >\n <ChevronIcon\n orientation={position === 'left' ? 'right' : 'left'}\n widthHeight={16}\n {...views?.toggleButtonIcon}\n />\n </View>\n )}\n </View>\n )}\n </Horizontal>\n );\n};\n\n// Sidebar Content component\nexport const SidebarContent: React.FC<SidebarContentProps> = ({\n children,\n views,\n ...props\n}) => {\n const { isExpanded } = useSidebarContext();\n\n return (\n <View\n flex=\"1\"\n width=\"100%\"\n overflowY=\"auto\"\n overflowX=\"hidden\"\n padding={isExpanded ? '16px' : '8px'}\n {...views?.content}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// Sidebar Footer component\nexport const SidebarFooter: React.FC<SidebarFooterProps> = ({\n children,\n views,\n ...props\n}) => {\n const { isExpanded } = useSidebarContext();\n\n return (\n <View\n width=\"100%\"\n padding=\"16px\"\n borderTopWidth=\"1px\"\n borderTopStyle=\"solid\"\n borderTopColor=\"color.gray.200\"\n {...views?.footer}\n {...props}\n >\n {isExpanded ? children : null}\n </View>\n );\n};\n\n// Main Sidebar View component\nexport const SidebarView: React.FC<SidebarProps> = ({\n children,\n position = 'left',\n size = 'md',\n variant = 'default',\n fixed = false,\n hasBackdrop = true,\n // showToggleButton = true,\n expandedWidth,\n collapsedWidth,\n // breakpoint = 768,\n breakpointBehavior = 'overlay',\n elevation = 'none',\n transitionPreset = 'normal',\n ariaLabel = 'Sidebar navigation',\n isExpanded,\n isMobile,\n // toggleExpanded,\n // expand,\n collapse,\n views,\n themeMode: elementMode,\n ...props\n}) => {\n // Determine width based on expanded state and size\n const sizeConfig = SidebarSizes[size];\n const width = isExpanded\n ? expandedWidth || sizeConfig.expandedWidth\n : collapsedWidth || sizeConfig.collapsedWidth;\n\n // Determine if sidebar should be visible based on mobile state and breakpoint behavior\n const isVisible = !isMobile || (isMobile && breakpointBehavior !== 'hide');\n\n // Determine if sidebar should be fixed or absolute based on mobile state and breakpoint behavior\n const position_type =\n fixed || (isMobile && breakpointBehavior === 'overlay')\n ? 'fixed'\n : 'relative';\n\n // Determine if backdrop should be shown\n const showBackdrop =\n hasBackdrop && isMobile && isExpanded && breakpointBehavior === 'overlay';\n\n return (\n <>\n {/* Backdrop */}\n {showBackdrop && (\n <View\n position=\"fixed\"\n top={0}\n left={0}\n width=\"100vw\"\n height=\"100vh\"\n backgroundColor=\"color.blackAlpha.500\"\n zIndex={998}\n onClick={collapse}\n {...views?.backdrop}\n />\n )}\n\n {/* Sidebar */}\n {isVisible && (\n <Vertical\n position={position_type}\n top={0}\n height=\"100vh\"\n width={width}\n zIndex={999}\n transition={SidebarTransitions[transitionPreset]}\n transform={\n isMobile && breakpointBehavior === 'overlay' && !isExpanded\n ? `translateX(${position === 'left' ? '-100%' : '100%'})`\n : 'translateX(0)'\n }\n role=\"navigation\"\n aria-label={ariaLabel}\n {...SidebarVariants[variant]}\n {...SidebarPositions[position]}\n {...SidebarElevations[elevation]}\n {...views?.container}\n {...props}\n >\n {React.Children.map(children, (child) => {\n return child;\n })}\n </Vertical>\n )}\n </>\n );\n};\ninterface SideBarNavItemProps {\n icon: React.ReactNode;\n label: string;\n isActive?: boolean;\n ariaLabel?: string;\n badge?: number;\n}\n\nexport const SideBarNavItem = ({\n icon,\n label,\n isActive = false,\n badge,\n views,\n ariaLabel,\n ...props\n}: SideBarNavItemProps & any) => {\n // Get sidebar context to check if it's expanded\n const { isExpanded } = useSidebarContext();\n\n return (\n <Horizontal\n alignItems=\"center\"\n justifyContent={!isExpanded ? 'center' : undefined}\n gap={12}\n padding=\"8px 12px\"\n borderRadius=\"4px\"\n backgroundColor={isActive ? 'color.blue.50' : 'transparent'}\n color={isActive ? 'color.blue.600' : 'color.gray.700'}\n fontWeight={isActive ? 'bold' : 'normal'}\n cursor=\"pointer\"\n aria-label={ariaLabel}\n on={{\n hover: {\n backgroundColor: isActive ? 'color.blue.50' : 'color.gray.100',\n },\n }}\n {...props}\n >\n {icon}\n {isExpanded && <Text>{label}</Text>}\n {isExpanded && badge && <Badge {...views?.navItemBagde}>{badge}</Badge>}\n </Horizontal>\n );\n};\n","import React from 'react';\nimport { SidebarProps, SidebarType } from './Sidebar/Sidebar.props';\nimport { useSidebarState } from './Sidebar/Sidebar.state';\nimport {\n SidebarProvider,\n SidebarHeader,\n SidebarContent,\n SidebarFooter,\n SidebarView,\n useSidebarContext,\n} from './Sidebar/Sidebar.view';\n\n/**\n * Sidebar component for creating collapsible, themeable and customizable sidebars.\n */\nconst SidebarComponent: React.FC<SidebarProps> = ({\n children,\n position = 'left',\n size = 'md',\n variant = 'default',\n defaultExpanded = true,\n expanded,\n onExpandedChange,\n fixed = false,\n hasBackdrop = true,\n showToggleButton = true,\n expandedWidth,\n collapsedWidth,\n breakpoint = 768,\n breakpointBehavior = 'overlay',\n views,\n ...props\n}) => {\n const { isExpanded, toggleExpanded, expand, collapse, isMobile } =\n useSidebarState(defaultExpanded, expanded, onExpandedChange, breakpoint);\n\n return (\n <SidebarProvider\n value={{\n isExpanded,\n toggleExpanded,\n expand,\n collapse,\n position,\n size,\n variant,\n views,\n }}\n >\n <SidebarView\n position={position}\n size={size}\n variant={variant}\n fixed={fixed}\n hasBackdrop={hasBackdrop}\n showToggleButton={showToggleButton}\n expandedWidth={expandedWidth}\n collapsedWidth={collapsedWidth}\n breakpoint={breakpoint}\n breakpointBehavior={breakpointBehavior}\n isExpanded={isExpanded}\n isMobile={isMobile}\n toggleExpanded={toggleExpanded}\n expand={expand}\n collapse={collapse}\n views={views}\n {...props}\n >\n {children}\n </SidebarView>\n </SidebarProvider>\n );\n};\n\nexport const Sidebar = SidebarComponent as SidebarType;\n\n// Assign the sub-components to the main component\nSidebar.Header = SidebarHeader;\nSidebar.Content = SidebarContent;\nSidebar.Footer = SidebarFooter;\n\n// Expose the context hook for custom components\nSidebar.useContext = useSidebarContext;\n","import { useState, useEffect } from 'react';\n\nexport const useSidebarState = (\n defaultExpanded: boolean = true,\n expanded?: boolean,\n onExpandedChange?: (expanded: boolean) => void,\n breakpoint?: number\n) => {\n const [isExpanded, setIsExpanded] = useState<boolean>(\n expanded !== undefined ? expanded : defaultExpanded\n );\n const [isMobile, setIsMobile] = useState<boolean>(\n breakpoint ? window.innerWidth < breakpoint : false\n );\n\n // Handle controlled expanded state\n useEffect(() => {\n if (expanded !== undefined) {\n setIsExpanded(expanded);\n }\n }, [expanded]);\n\n // Handle window resize for responsive behavior\n useEffect(() => {\n if (!breakpoint) return;\n\n const handleResize = () => {\n const newIsMobile = window.innerWidth < breakpoint;\n setIsMobile(newIsMobile);\n };\n\n window.addEventListener('resize', handleResize);\n handleResize(); // Initial check\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, [breakpoint]);\n\n const toggleExpanded = () => {\n const newExpanded = !isExpanded;\n setIsExpanded(newExpanded);\n if (onExpandedChange) {\n onExpandedChange(newExpanded);\n }\n };\n\n const expand = () => {\n if (!isExpanded) {\n setIsExpanded(true);\n if (onExpandedChange) {\n onExpandedChange(true);\n }\n }\n };\n\n const collapse = () => {\n if (isExpanded) {\n setIsExpanded(false);\n if (onExpandedChange) {\n onExpandedChange(false);\n }\n }\n };\n\n return {\n isExpanded,\n toggleExpanded,\n expand,\n collapse,\n isMobile,\n };\n};\n","import { useState, useRef, useCallback, useEffect } from 'react';\nimport { Orientation, PanelInfo, ResizableStorage } from './Resizable.type';\n\n// Default storage implementation using localStorage\nconst createDefaultStorage = (): ResizableStorage => ({\n getItem: (id: string) => {\n try {\n return localStorage.getItem(`resizable-${id}`);\n } catch (e) {\n console.warn('Failed to access localStorage:', e);\n return null;\n }\n },\n setItem: (id: string, value: string) => {\n try {\n localStorage.setItem(`resizable-${id}`, value);\n } catch (e) {\n console.warn('Failed to write to localStorage:', e);\n }\n },\n});\n\nexport const useResizableState = (\n orientation: Orientation,\n defaultSizes?: (number | string)[],\n onSizesChange?: (sizes: number[]) => void,\n defaultMinSize: number = 50,\n defaultMaxSize: number = Infinity,\n collapsible: boolean = false,\n autoSaveId?: string,\n storage?: ResizableStorage,\n keyboardResizeBy: number = 10\n) => {\n const [isResizing, setIsResizing] = useState(false);\n const [panels, setPanels] = useState<PanelInfo[]>([]);\n const containerRef = useRef<HTMLDivElement>(null);\n const activeHandleRef = useRef<string | null>(null);\n const startPositionRef = useRef<number>(0);\n const startSizesRef = useRef<number[]>([]);\n const storageRef = useRef<ResizableStorage | null>(\n storage || (typeof window !== 'undefined' ? createDefaultStorage() : null)\n );\n\n // Calculate the total size of the container\n const getTotalSize = useCallback(() => {\n if (!containerRef.current) return 0;\n return orientation === 'horizontal'\n ? containerRef.current.offsetWidth\n : containerRef.current.offsetHeight;\n }, [orientation]);\n\n // Load saved panel sizes from storage if autoSaveId is provided\n const loadSavedSizes = useCallback(() => {\n if (!autoSaveId || !storageRef.current) return null;\n\n const savedData = storageRef.current.getItem(autoSaveId);\n if (!savedData) return null;\n\n try {\n const parsed = JSON.parse(savedData);\n if (Array.isArray(parsed.sizes)) {\n return parsed.sizes;\n }\n return null;\n } catch (e) {\n console.warn('Failed to parse saved panel sizes:', e);\n return null;\n }\n }, [autoSaveId]);\n\n // Save panel sizes to storage\n const savePanelSizes = useCallback(() => {\n if (!autoSaveId || !storageRef.current || panels.length === 0) return;\n\n const sizes = panels.map((panel) => ({\n id: panel.id,\n size: panel.size,\n collapsed: panel.collapsed || false,\n }));\n\n storageRef.current.setItem(autoSaveId, JSON.stringify({ sizes }));\n }, [autoSaveId, panels]);\n\n // Register a panel with the resizable container\n const registerPanel = useCallback(\n (\n id: string,\n initialSize: number,\n minSize?: number,\n maxSize?: number,\n panelCollapsible?: boolean\n ) => {\n setPanels((prevPanels) => {\n // Check if panel already exists\n if (prevPanels.some((panel) => panel.id === id)) {\n return prevPanels;\n }\n\n // Add new panel\n return [\n ...prevPanels,\n {\n id,\n size: initialSize,\n minSize: minSize ?? defaultMinSize,\n maxSize: maxSize ?? defaultMaxSize,\n collapsible: panelCollapsible ?? collapsible,\n collapsed: false,\n },\n ];\n });\n },\n [defaultMinSize, defaultMaxSize, collapsible]\n );\n\n // Unregister a panel from the resizable container\n const unregisterPanel = useCallback((id: string) => {\n setPanels((prevPanels) => prevPanels.filter((panel) => panel.id !== id));\n }, []);\n\n // Get the size of a panel\n const getPanelSize = useCallback(\n (id: string) => {\n const panel = panels.find((p) => p.id === id);\n return panel ? panel.size : 0;\n },\n [panels]\n );\n\n // Set the size of a panel\n const setPanelSize = useCallback((id: string, size: number) => {\n setPanels((prevPanels) =>\n prevPanels.map((panel) => (panel.id === id ? { ...panel, size } : panel))\n );\n }, []);\n\n // Check if a panel is collapsed\n const isPanelCollapsed = useCallback(\n (id: string) => {\n const panel = panels.find((p) => p.id === id);\n return panel ? !!panel.collapsed : false;\n },\n [panels]\n );\n\n // Toggle panel collapse state\n const togglePanelCollapse = useCallback((id: string) => {\n setPanels((prevPanels) => {\n const panelIndex = prevPanels.findIndex((p) => p.id === id);\n if (panelIndex === -1) return prevPanels;\n\n const panel = prevPanels[panelIndex];\n if (!panel.collapsible) return prevPanels;\n\n // Store the current size before collapsing\n const updatedPanel = {\n ...panel,\n collapsed: !panel.collapsed,\n };\n\n const newPanels = [...prevPanels];\n newPanels[panelIndex] = updatedPanel;\n\n return newPanels;\n });\n }, []);\n\n // Start resizing\n const startResize = useCallback(\n (handleId: string, clientPosition: number) => {\n activeHandleRef.current = handleId;\n startPositionRef.current = clientPosition;\n startSizesRef.current = panels.map((panel) => panel.size);\n setIsResizing(true);\n },\n [panels]\n );\n\n // Handle resize\n const onResize = useCallback(\n (clientPosition: number) => {\n if (!isResizing || !activeHandleRef.current) return;\n\n const handleId = activeHandleRef.current;\n const delta = clientPosition - startPositionRef.current;\n\n // Find the handle's position in the DOM order\n // This is more reliable than trying to match handle IDs with panel IDs\n let handleIndex = -1;\n\n // Extract numeric part from handle ID if it follows a pattern like 'handle1'\n const handleNumMatch = handleId.match(/\\d+$/);\n if (handleNumMatch) {\n handleIndex = parseInt(handleNumMatch[0], 10) - 1; // Convert to 0-based index\n }\n\n // If we couldn't extract a number, try to find the handle's position\n // by checking if it's between two panels\n if (handleIndex === -1 && panels.length >= 2) {\n // Just use the first handle position as a fallback\n handleIndex = 0;\n }\n\n // Ensure the handle index is valid\n if (handleIndex < 0 || handleIndex >= panels.length - 1) return;\n\n const currentPanel = panels[handleIndex];\n const nextPanel = panels[handleIndex + 1];\n\n // Skip if either panel is collapsed\n if (currentPanel.collapsed || nextPanel.collapsed) return;\n\n // Calculate new sizes\n let newCurrentSize =\n startSizesRef.current[handleIndex] +\n (orientation === 'horizontal' ? delta : delta);\n let newNextSize =\n startSizesRef.current[handleIndex + 1] -\n (orientation === 'horizontal' ? delta : delta);\n\n // Apply constraints\n newCurrentSize = Math.max(\n currentPanel.minSize ?? defaultMinSize,\n Math.min(currentPanel.maxSize ?? defaultMaxSize, newCurrentSize)\n );\n newNextSize = Math.max(\n nextPanel.minSize ?? defaultMinSize,\n Math.min(nextPanel.maxSize ?? defaultMaxSize, newNextSize)\n );\n\n // Update panel sizes\n setPanels((prevPanels) =>\n prevPanels.map((panel, index) => {\n if (index === handleIndex) {\n return { ...panel, size: newCurrentSize };\n }\n if (index === handleIndex + 1) {\n return { ...panel, size: newNextSize };\n }\n return panel;\n })\n );\n },\n [isResizing, panels, orientation, defaultMinSize, defaultMaxSize]\n );\n\n // End resizing\n const endResize = useCallback(() => {\n if (isResizing && onSizesChange) {\n onSizesChange(panels.map((panel) => panel.size));\n }\n activeHandleRef.current = null;\n setIsResizing(false);\n\n // Save panel sizes to storage if autoSaveId is provided\n if (autoSaveId) {\n savePanelSizes();\n }\n }, [isResizing, panels, onSizesChange, autoSaveId, savePanelSizes]);\n\n // Handle keyboard navigation for accessibility\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isResizing || !activeHandleRef.current) return;\n\n const handleId = activeHandleRef.current;\n\n // Find the handle's position in the DOM order using the same logic as onResize\n let handleIndex = -1;\n\n // Extract numeric part from handle ID if it follows a pattern like 'handle1'\n const handleNumMatch = handleId.match(/\\d+$/);\n if (handleNumMatch) {\n handleIndex = parseInt(handleNumMatch[0], 10) - 1; // Convert to 0-based index\n }\n\n // If we couldn't extract a number, try to find the handle's position\n // by checking if it's between two panels\n if (handleIndex === -1 && panels.length >= 2) {\n // Just use the first handle position as a fallback\n handleIndex = 0;\n }\n\n // Ensure the handle index is valid\n if (handleIndex < 0 || handleIndex >= panels.length - 1) return;\n\n let delta = 0;\n\n // Handle arrow keys based on orientation\n if (orientation === 'horizontal') {\n if (e.key === 'ArrowLeft') delta = -keyboardResizeBy;\n if (e.key === 'ArrowRight') delta = keyboardResizeBy;\n // Home and End keys for larger jumps\n if (e.key === 'Home') delta = -100;\n if (e.key === 'End') delta = 100;\n } else {\n if (e.key === 'ArrowUp') delta = -keyboardResizeBy;\n if (e.key === 'ArrowDown') delta = keyboardResizeBy;\n // Home and End keys for larger jumps\n if (e.key === 'Home') delta = -100;\n if (e.key === 'End') delta = 100;\n }\n\n if (delta !== 0) {\n e.preventDefault();\n onResize(startPositionRef.current + delta);\n }\n\n // Handle escape key to cancel resizing\n if (e.key === 'Escape') {\n setPanels((prevPanels) =>\n prevPanels.map((panel, index) => ({\n ...panel,\n size: startSizesRef.current[index],\n }))\n );\n endResize();\n }\n },\n [isResizing, panels, orientation, onResize, endResize, keyboardResizeBy]\n );\n\n // Set up event listeners for mouse/touch events\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isResizing) return;\n const position = orientation === 'horizontal' ? e.clientX : e.clientY;\n onResize(position);\n };\n\n const handleTouchMove = (e: TouchEvent) => {\n if (!isResizing || e.touches.length === 0) return;\n const touch = e.touches[0];\n const position =\n orientation === 'horizontal' ? touch.clientX : touch.clientY;\n onResize(position);\n };\n\n const handleMouseUp = () => {\n if (isResizing) {\n endResize();\n }\n };\n\n if (isResizing) {\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('touchmove', handleTouchMove);\n document.addEventListener('mouseup', handleMouseUp);\n document.addEventListener('touchend', handleMouseUp);\n document.addEventListener('keydown', handleKeyDown);\n\n // Set cursor based on orientation\n document.body.style.cursor =\n orientation === 'horizontal' ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n }\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('touchmove', handleTouchMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.removeEventListener('touchend', handleMouseUp);\n document.removeEventListener('keydown', handleKeyDown);\n\n // Reset cursor\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n };\n }, [isResizing, orientation, onResize, endResize, handleKeyDown]);\n\n // Initialize panel sizes when the component mounts\n useEffect(() => {\n if (panels.length === 0) return;\n\n // Try to load saved sizes first if autoSaveId is provided\n if (autoSaveId) {\n const savedSizes = loadSavedSizes();\n if (savedSizes) {\n // Map saved sizes to panels\n setPanels((prevPanels) => {\n return prevPanels.map((panel) => {\n const savedPanel = savedSizes.find((s: any) => s.id === panel.id);\n if (savedPanel) {\n return {\n ...panel,\n size: savedPanel.size,\n collapsed: savedPanel.collapsed || false,\n };\n }\n return panel;\n });\n });\n return;\n }\n }\n\n // If no saved sizes or defaultSizes, distribute sizes equally\n if (!defaultSizes) {\n const totalSize = getTotalSize();\n const equalSize = totalSize / panels.length;\n\n setPanels((prevPanels) =>\n prevPanels.map((panel) => ({\n ...panel,\n size: equalSize,\n }))\n );\n }\n }, [panels.length, defaultSizes, getTotalSize, autoSaveId, loadSavedSizes]);\n\n // Update panel sizes when defaultSizes changes\n useEffect(() => {\n if (!defaultSizes || defaultSizes.length === 0 || panels.length === 0)\n return;\n\n const totalSize = getTotalSize();\n const newSizes = defaultSizes.map((size) => {\n if (typeof size === 'string' && size.endsWith('%')) {\n return (parseFloat(size) / 100) * totalSize;\n }\n return typeof size === 'number' ? size : parseFloat(size);\n });\n\n setPanels((prevPanels) =>\n prevPanels.map((panel, index) => ({\n ...panel,\n size: index < newSizes.length ? newSizes[index] : panel.size,\n }))\n );\n }, [defaultSizes, panels.length, getTotalSize]);\n\n // Save panel sizes when they change (if autoSaveId is provided)\n useEffect(() => {\n if (panels.length > 0 && autoSaveId && !isResizing) {\n savePanelSizes();\n }\n }, [panels, autoSaveId, isResizing, savePanelSizes]);\n\n return {\n isResizing,\n setIsResizing,\n containerRef,\n panels,\n registerPanel,\n unregisterPanel,\n getPanelSize,\n setPanelSize,\n isPanelCollapsed,\n togglePanelCollapse,\n startResize,\n onResize,\n endResize,\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { Orientation, Size, Variant } from './Resizable.type';\n\nexport const ResizableOrientations: Record<Orientation, ViewProps> = {\n horizontal: {\n flexDirection: 'row',\n },\n vertical: {\n flexDirection: 'column',\n },\n};\n\nexport const getHandleSizeStyles = (\n size: Size,\n orientation: Orientation\n): ViewProps => {\n const sizes = {\n sm: {\n width: orientation === 'horizontal' ? '4px' : '100%',\n height: orientation === 'vertical' ? '4px' : '100%',\n },\n md: {\n width: orientation === 'horizontal' ? '6px' : '100%',\n height: orientation === 'vertical' ? '6px' : '100%',\n },\n lg: {\n width: orientation === 'horizontal' ? '8px' : '100%',\n height: orientation === 'vertical' ? '8px' : '100%',\n },\n };\n\n return sizes[size];\n};\n\nexport const getHandle = (themeMode: string): Record<Variant, ViewProps> => {\n return {\n default: {\n backgroundColor: 'transparent',\n _hover: {\n backgroundColor: 'color.gray.200',\n },\n _active: {\n backgroundColor: 'color.gray.300',\n },\n },\n subtle: {\n backgroundColor: 'transparent',\n _hover: {\n backgroundColor: 'color.gray.100',\n },\n _active: {\n backgroundColor: 'color.gray.200',\n },\n },\n prominent: {\n backgroundColor: 'color.gray.100',\n _hover: {\n backgroundColor: 'color.gray.200',\n },\n _active: {\n backgroundColor: 'color.gray.300',\n },\n },\n };\n // Add dark mode conditional styling here\n};\n\n// For backward compatibility\nexport const HandleVariants = getHandle('light');\n\nexport const HandleIconStyles: Record<Orientation, ViewProps> = {\n horizontal: {\n width: '2px',\n height: '20px',\n backgroundColor: 'color.gray.400',\n margin: '0 1px',\n },\n vertical: {\n width: '20px',\n height: '2px',\n backgroundColor: 'color.gray.400',\n margin: '1px 0',\n },\n};\n","import React, { createContext, useContext, useEffect } from 'react';\nimport { View } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Vertical } from 'app-studio';\nimport {\n ResizableProps,\n ResizablePanelProps,\n ResizableHandleProps,\n} from './Resizable.props';\nimport {\n ResizableOrientations,\n getHandleSizeStyles,\n HandleVariants,\n HandleIconStyles,\n} from './Resizable.style';\nimport { ResizableContextType } from './Resizable.type';\n\n// Create context for the Resizable component\nconst ResizableContext = createContext<ResizableContextType>({\n orientation: 'horizontal',\n size: 'md',\n variant: 'default',\n isResizing: false,\n setIsResizing: () => {},\n registerPanel: () => {},\n unregisterPanel: () => {},\n getPanelSize: () => 0,\n setPanelSize: () => {},\n isPanelCollapsed: () => false,\n togglePanelCollapse: () => {},\n startResize: () => {},\n onResize: () => {},\n endResize: () => {},\n});\n\n// Hook to use the Resizable context\nexport const useResizableContext = () => useContext(ResizableContext);\n\n// Provider component for the Resizable context\nexport const ResizableProvider: React.FC<{\n value: ResizableContextType;\n children: React.ReactNode;\n}> = ({ value, children }) => {\n return (\n <ResizableContext.Provider value={value}>\n {children}\n </ResizableContext.Provider>\n );\n};\n\n// Resizable Panel component\nexport const ResizablePanel: React.FC<ResizablePanelProps> = ({\n children,\n id,\n defaultSize,\n minSize,\n maxSize,\n collapsible,\n defaultCollapsed,\n onCollapseChange,\n views,\n ...props\n}) => {\n const {\n orientation,\n registerPanel,\n unregisterPanel,\n getPanelSize,\n isPanelCollapsed,\n togglePanelCollapse,\n } = useResizableContext();\n\n // Convert percentage to pixels if needed\n const initialSize =\n typeof defaultSize === 'string' && defaultSize.endsWith('%')\n ? 0 // Will be calculated in the state hook\n : typeof defaultSize === 'number'\n ? defaultSize\n : 0;\n\n // Register panel on mount\n useEffect(() => {\n registerPanel(id, initialSize, minSize, maxSize, collapsible);\n return () => unregisterPanel(id);\n }, [\n id,\n initialSize,\n minSize,\n maxSize,\n collapsible,\n registerPanel,\n unregisterPanel,\n ]);\n\n // Get current panel size and collapsed state\n const size = getPanelSize(id);\n const isCollapsed = isPanelCollapsed(id);\n\n // Handle collapse state changes\n useEffect(() => {\n if (onCollapseChange && isCollapsed !== undefined) {\n onCollapseChange(isCollapsed);\n }\n }, [isCollapsed, onCollapseChange]);\n\n // Apply default collapsed state on mount if specified\n useEffect(() => {\n if (collapsible && defaultCollapsed && !isCollapsed) {\n togglePanelCollapse(id);\n }\n }, [id, collapsible, defaultCollapsed, isCollapsed, togglePanelCollapse]);\n\n // If panel is collapsed, render a minimal version\n if (isCollapsed) {\n return (\n <View\n flex=\"0 0 auto\"\n width={orientation === 'horizontal' ? '10px' : '100%'}\n height={orientation === 'vertical' ? '10px' : '100%'}\n backgroundColor=\"color.gray.200\"\n cursor=\"pointer\"\n onClick={() => togglePanelCollapse(id)}\n aria-label={`Expand panel ${id}`}\n role=\"button\"\n tabIndex={0}\n {...views?.collapsedPanel}\n {...props}\n />\n );\n }\n\n return (\n <View\n flex={size > 0 ? '0 0 auto' : '1'}\n width={orientation === 'horizontal' ? `${size}px` : '100%'}\n height={orientation === 'vertical' ? `${size}px` : '100%'}\n overflow=\"auto\"\n {...views?.panel}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// Resizable Handle component\nexport const ResizableHandle: React.FC<ResizableHandleProps> = ({\n id,\n position = 'both',\n disabled = false,\n withVisualIndicator = true,\n withCollapseButton = false,\n collapseTarget,\n views,\n ...props\n}) => {\n const {\n orientation,\n size,\n variant,\n startResize,\n isPanelCollapsed,\n togglePanelCollapse,\n } = useResizableContext();\n\n // Determine which panel to collapse when the collapse button is clicked\n // By default, it's the panel before this handle (if any)\n const getPanelToCollapse = () => {\n if (collapseTarget) return collapseTarget;\n\n // Extract panel index from handle ID (assuming handle IDs follow a pattern like 'handle1')\n const handleNumMatch = id.match(/\\d+$/);\n if (!handleNumMatch) return '';\n\n const handleIndex = parseInt(handleNumMatch[0], 10);\n if (isNaN(handleIndex)) return '';\n\n // Target the panel before this handle\n return `panel${handleIndex}`;\n };\n\n const panelToCollapse = getPanelToCollapse();\n const isTargetPanelCollapsed = isPanelCollapsed(panelToCollapse);\n\n const handleMouseDown = (e: React.MouseEvent) => {\n if (disabled) return;\n e.preventDefault();\n const clientPosition = orientation === 'horizontal' ? e.clientX : e.clientY;\n startResize(id, clientPosition);\n };\n\n const handleTouchStart = (e: React.TouchEvent) => {\n if (disabled || e.touches.length === 0) return;\n e.preventDefault();\n const touch = e.touches[0];\n const clientPosition =\n orientation === 'horizontal' ? touch.clientX : touch.clientY;\n startResize(id, clientPosition);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n const clientPosition = 0; // Starting position for keyboard navigation\n startResize(id, clientPosition);\n }\n };\n\n const handleCollapseClick = (e: React.MouseEvent) => {\n e.stopPropagation(); // Prevent triggering resize\n if (panelToCollapse) {\n togglePanelCollapse(panelToCollapse);\n }\n };\n\n return (\n <View\n role=\"separator\"\n aria-orientation={orientation}\n aria-valuemin={0}\n aria-valuemax={100}\n tabIndex={disabled ? -1 : 0}\n cursor={orientation === 'horizontal' ? 'col-resize' : 'row-resize'}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n position=\"relative\"\n {...getHandleSizeStyles(size, orientation)}\n {...HandleVariants[variant]}\n onMouseDown={handleMouseDown}\n onTouchStart={handleTouchStart}\n onKeyDown={handleKeyDown}\n opacity={disabled ? 0.5 : 1}\n pointerEvents={disabled ? 'none' : 'auto'}\n {...views?.handle}\n {...props}\n >\n {withVisualIndicator && (\n <View\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width={orientation === 'horizontal' ? '100%' : 'auto'}\n height={orientation === 'vertical' ? '100%' : 'auto'}\n pointerEvents=\"none\"\n {...views?.handleIcon}\n >\n {orientation === 'horizontal' ? (\n <Horizontal gap={1}>\n <View {...HandleIconStyles.horizontal} />\n <View {...HandleIconStyles.horizontal} />\n </Horizontal>\n ) : (\n <Vertical gap={1}>\n <View {...HandleIconStyles.vertical} />\n <View {...HandleIconStyles.vertical} />\n </Vertical>\n )}\n </View>\n )}\n\n {withCollapseButton && panelToCollapse && (\n <View\n position=\"absolute\"\n top={orientation === 'horizontal' ? '-20px' : '50%'}\n left={orientation === 'horizontal' ? '50%' : '-20px'}\n transform={\n orientation === 'horizontal'\n ? 'translateX(-50%)'\n : 'translateY(-50%)'\n }\n width=\"16px\"\n height=\"16px\"\n borderRadius=\"full\"\n backgroundColor=\"color.gray.100\"\n border=\"1px solid\"\n borderColor=\"color.gray.300\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n cursor=\"pointer\"\n zIndex={1}\n onClick={handleCollapseClick}\n aria-label={\n isTargetPanelCollapsed\n ? `Expand panel ${panelToCollapse}`\n : `Collapse panel ${panelToCollapse}`\n }\n role=\"button\"\n tabIndex={0}\n pointerEvents=\"auto\"\n _hover={{ backgroundColor: 'color.gray.200' }}\n {...views?.collapseIcon}\n >\n {/* Collapse/expand icon */}\n <View\n width=\"8px\"\n height=\"8px\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {isTargetPanelCollapsed ? (\n /* Expand icon (plus) */\n <Horizontal>\n <View\n width=\"6px\"\n height=\"2px\"\n backgroundColor=\"color.gray.600\"\n />\n <View\n width=\"2px\"\n height=\"6px\"\n backgroundColor=\"color.gray.600\"\n position=\"absolute\"\n />\n </Horizontal>\n ) : (\n /* Collapse icon (minus) */\n <View width=\"6px\" height=\"2px\" backgroundColor=\"color.gray.600\" />\n )}\n </View>\n </View>\n )}\n </View>\n );\n};\n\n// Main Resizable View component\nexport const ResizableView: React.FC<\n ResizableProps & {\n containerRef: React.RefObject<HTMLDivElement>;\n }\n> = ({\n children,\n orientation = 'horizontal',\n size = 'md',\n variant = 'default',\n defaultSizes,\n minSize,\n maxSize,\n collapsible = false,\n containerRef,\n autoSaveId,\n views,\n ...props\n}) => {\n const Container = orientation === 'horizontal' ? Horizontal : Vertical;\n\n return (\n <Container\n ref={containerRef}\n width=\"100%\"\n height=\"100%\"\n position=\"relative\"\n overflow=\"hidden\"\n {...ResizableOrientations[orientation]}\n {...views?.container}\n {...props}\n >\n {children}\n </Container>\n );\n};\n","import React from 'react';\nimport { ResizableProps, ResizableType } from './Resizable/Resizable.props';\nimport { useResizableState } from './Resizable/Resizable.state';\nimport {\n ResizableProvider,\n ResizablePanel,\n ResizableHandle,\n ResizableView,\n} from './Resizable/Resizable.view';\n\n/**\n * Resizable component for creating resizable panel groups and layouts.\n */\nconst ResizableComponent: React.FC<ResizableProps> = ({\n children,\n orientation = 'horizontal',\n size = 'md',\n variant = 'default',\n defaultSizes,\n onSizesChange,\n minSize = 50,\n maxSize,\n collapsible = false,\n autoSaveId,\n storage,\n keyboardResizeBy = 10,\n views,\n ...props\n}) => {\n const {\n isResizing,\n setIsResizing,\n containerRef,\n registerPanel,\n unregisterPanel,\n getPanelSize,\n setPanelSize,\n isPanelCollapsed,\n togglePanelCollapse,\n startResize,\n onResize,\n endResize,\n } = useResizableState(\n orientation,\n defaultSizes,\n onSizesChange,\n minSize,\n maxSize,\n collapsible,\n autoSaveId,\n storage,\n keyboardResizeBy\n );\n\n return (\n <ResizableProvider\n value={{\n orientation,\n size,\n variant,\n isResizing,\n setIsResizing,\n registerPanel,\n unregisterPanel,\n getPanelSize,\n setPanelSize,\n isPanelCollapsed,\n togglePanelCollapse,\n startResize,\n onResize,\n endResize,\n }}\n >\n <ResizableView\n orientation={orientation}\n size={size}\n variant={variant}\n defaultSizes={defaultSizes}\n minSize={minSize}\n maxSize={maxSize}\n collapsible={collapsible}\n autoSaveId={autoSaveId}\n keyboardResizeBy={keyboardResizeBy}\n containerRef={containerRef}\n views={views}\n {...props}\n >\n {children}\n </ResizableView>\n </ResizableProvider>\n );\n};\n\nexport const Resizable = ResizableComponent as ResizableType;\n\n// Assign the sub-components to the main component\nResizable.Panel = ResizablePanel;\nResizable.Handle = ResizableHandle;\n","/**\n * Toast Styles\n *\n * Defines the styles for the Toast component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { ToastPosition, ThemesType } from './Toast.type';\n\n/**\n * Theme configurations for the Toast component\n * Following the design system color palette\n */\nexport const Themes: ThemesType = {\n info: {\n container: {\n backgroundColor: 'color.blue.50',\n border: 'color.blue.300',\n },\n content: {\n color: 'color.blue.700',\n },\n icon: {\n color: 'color.blue.500',\n },\n },\n success: {\n container: {\n backgroundColor: 'color.green.50',\n border: 'color.green.300',\n },\n content: {\n color: 'color.green.700',\n },\n icon: {\n color: 'color.green.500',\n },\n },\n warning: {\n container: {\n backgroundColor: 'color.orange.50',\n border: 'color.orange.300',\n },\n content: {\n color: 'color.orange.700',\n },\n icon: {\n color: 'color.orange.500',\n },\n },\n error: {\n container: {\n backgroundColor: 'color.red.50',\n border: 'color.red.300',\n },\n content: {\n color: 'color.red.700',\n },\n icon: {\n color: 'color.red.500',\n },\n },\n};\n\n/**\n * Animation configurations for the Toast component\n */\nexport const ToastAnimations = {\n enter: {\n opacity: [0, 1],\n transform: ['scale(0.95)', 'scale(1)'],\n transition: 'all 0.3s ease-out',\n },\n exit: {\n opacity: [1, 0],\n transform: ['scale(1)', 'scale(0.95)'],\n transition: 'all 0.2s ease-in',\n },\n};\n\n/**\n * Position configurations for the Toast component\n * Following the 4px grid system\n */\nexport const ToastPositions: Record<ToastPosition, ViewProps> = {\n top: {\n top: '16px', // 4 × 4px grid\n left: '50%',\n transform: 'translateX(-50%)',\n },\n 'top-right': {\n top: '16px', // 4 × 4px grid\n right: '16px', // 4 × 4px grid\n },\n 'top-left': {\n top: '16px', // 4 × 4px grid\n left: '16px', // 4 × 4px grid\n },\n bottom: {\n bottom: '16px', // 4 × 4px grid\n left: '50%',\n transform: 'translateX(-50%)',\n },\n 'bottom-right': {\n bottom: '16px', // 4 × 4px grid\n right: '16px', // 4 × 4px grid\n },\n 'bottom-left': {\n bottom: '16px', // 4 × 4px grid\n left: '16px', // 4 × 4px grid\n },\n};\n","import { create } from 'zustand';\nimport { ToastState } from './Toast.props';\nimport { ToastOptions, ToastVariant } from './Toast.type';\n\n// Generate a unique ID for each toast\nconst generateId = () => Math.random().toString(36).substring(2, 9);\n\n// Create a ref to store timeouts for cleanup\nlet timeouts = new Map<string, NodeJS.Timeout>();\n\n// Create the toast store\nexport const useToastStore = create<ToastState>((set) => ({\n toasts: [],\n add: (variant, title, description, options = {}) => {\n const id = options.id || generateId();\n const toast = {\n id,\n variant,\n title,\n description,\n createdAt: Date.now(),\n isVisible: true, // For animation purposes\n ...options,\n };\n\n set((state: any) => ({\n toasts: [...state.toasts, toast],\n }));\n\n // Set up auto-dismiss timeout if duration is provided\n if (options.duration !== 0) {\n const duration = options.duration || 5000; // Default 5 seconds\n const timerId = setTimeout(() => {\n useToastStore.getState().remove(id);\n }, duration);\n\n // Store the timeout for cleanup\n timeouts.set(id, timerId);\n }\n\n return id;\n },\n remove: (id) => {\n // First set isVisible to false for animation\n set((state) => ({\n toasts: state.toasts.map((toast: any) =>\n toast.id === id ? { ...toast, isVisible: false } : toast\n ),\n }));\n\n // Clear any existing timeout\n if (timeouts.has(id)) {\n clearTimeout(timeouts.get(id)!);\n timeouts.delete(id);\n }\n\n // Then remove after a short delay to allow for animation\n setTimeout(() => {\n set((state) => ({\n toasts: state.toasts.filter((toast) => toast.id !== id),\n }));\n }, 300); // Animation duration\n },\n removeAll: () => {\n // Clear all timeouts\n timeouts.forEach(clearTimeout);\n timeouts.clear();\n\n // Set all toasts to invisible first for animation\n set((state) => ({\n toasts: state.toasts.map((toast) => ({ ...toast, isVisible: false })),\n }));\n\n // Then remove after animation delay\n setTimeout(() => {\n set({ toasts: [] });\n }, 300);\n },\n}));\n\n// Helper functions to show different types of toasts\nexport const showToast = (\n variant: ToastVariant,\n title: string,\n description?: string,\n options?: ToastOptions\n) => {\n return useToastStore.getState().add(variant, title, description, options);\n};\n\nexport const showInfoToast = (\n title: string,\n description?: string,\n options?: ToastOptions\n) => {\n return showToast('info', title, description, options);\n};\n\nexport const showSuccessToast = (\n title: string,\n description?: string,\n options?: ToastOptions\n) => {\n return showToast('success', title, description, options);\n};\n\nexport const showWarningToast = (\n title: string,\n description?: string,\n options?: ToastOptions\n) => {\n return showToast('warning', title, description, options);\n};\n\nexport const showErrorToast = (\n title: string,\n description?: string,\n options?: ToastOptions\n) => {\n return showToast('error', title, description, options);\n};\n\nexport const removeToast = (id: string) => {\n useToastStore.getState().remove(id);\n};\n\nexport const removeAllToasts = () => {\n useToastStore.getState().removeAll();\n};\n","import React from 'react';\nimport { View } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { Vertical } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { InfoIcon, PlayIcon, DustBinIcon, CloseIcon } from '../../Icon/Icon';\nimport { ToastProps, ToastContainerProps } from './Toast.props';\nimport { Themes, ToastPositions } from './Toast.style';\nimport { useToastStore } from './Toast.store';\nimport { ToastPosition } from './Toast.type';\n\n// Individual Toast component\nexport const ToastView: React.FC<ToastProps> = ({\n variant,\n title,\n description,\n onClose,\n isClosable = true,\n action,\n actionText,\n showIcon = true,\n theme,\n views,\n render,\n icon: customIcon,\n id,\n isVisible = true,\n themeMode: elementMode,\n}) => {\n // We don't need the auto-close timer here anymore as it's handled in the store\n\n const Theme = theme ?? Themes;\n\n // Get the appropriate icon based on the variant\n const getIcon = () => {\n // If a custom icon is provided, use it\n if (customIcon !== undefined) {\n return customIcon;\n }\n\n // Otherwise use the default icon based on variant\n switch (variant) {\n case 'info':\n return <InfoIcon widthHeight={20} color={Theme.info.icon.color} />;\n case 'success':\n return <PlayIcon widthHeight={20} color={Theme.success.icon.color} />;\n case 'warning':\n return (\n <InfoIcon\n widthHeight={20}\n color={Theme.warning.icon.color}\n orientation=\"down\"\n />\n );\n case 'error':\n return <DustBinIcon widthHeight={20} color={Theme.error.icon.color} />;\n default:\n return <InfoIcon widthHeight={20} color={Theme.info.icon.color} />;\n }\n };\n\n // If a custom render function is provided, use it\n if (render) {\n return <>{render({ id: id || '', onClose })}</>;\n }\n\n // Determine appropriate ARIA role and live region based on variant\n const ariaRole = variant === 'error' ? 'alert' : 'status';\n const ariaLive =\n variant === 'error' || variant === 'warning' ? 'assertive' : 'polite';\n\n return (\n <Horizontal\n role={ariaRole}\n aria-live={ariaLive}\n aria-atomic=\"true\"\n data-state={isVisible ? 'open' : 'closed'}\n gap={12}\n width=\"100%\"\n maxWidth=\"400px\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderRadius=\"8px\" // 2 × 4px grid\n padding=\"12px 16px\" // 3 × 4px grid and 4 × 4px grid\n alignItems=\"flex-start\"\n position=\"relative\"\n backgroundColor={Theme[variant].container.backgroundColor}\n borderColor={Theme[variant].container.border}\n boxShadow=\"0 4px 12px rgba(0, 0, 0, 0.08)\" // Subtle shadow\n opacity={isVisible ? 1 : 0}\n transform={isVisible ? 'scale(1)' : 'scale(0.95)'}\n transition=\"all 0.3s ease\"\n {...views?.container}\n >\n {showIcon && (\n <View marginTop=\"2px\" {...views?.icon}>\n {getIcon()}\n </View>\n )}\n\n <Vertical gap={4} flex=\"1\">\n <Text\n size=\"md\"\n fontWeight=\"600\" // Semi-bold for better readability\n color={Theme[variant].content.color}\n lineHeight=\"1.4\"\n {...views?.title}\n >\n {title}\n </Text>\n\n {description && (\n <Text\n size=\"sm\"\n color={Theme[variant].content.color}\n fontWeight=\"400\" // Regular weight\n lineHeight=\"1.5\"\n {...views?.description}\n >\n {description}\n </Text>\n )}\n\n {action && actionText && (\n <Text\n size=\"sm\"\n fontWeight=\"600\" // Semi-bold for better readability\n marginTop=\"8px\" // 2 × 4px grid\n cursor=\"pointer\"\n color={Theme[variant].content.color}\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n action();\n }}\n _hover={{ textDecoration: 'underline' }}\n transition=\"all 0.2s ease\"\n {...views?.actionButton}\n >\n {actionText}\n </Text>\n )}\n </Vertical>\n\n {isClosable && (\n <View\n as=\"button\"\n aria-label=\"Close toast\"\n backgroundColor=\"transparent\"\n border=\"none\"\n cursor=\"pointer\"\n padding=\"4px\" // 1 × 4px grid\n marginLeft=\"8px\" // 2 × 4px grid\n marginTop=\"-4px\" // 1 × 4px grid\n marginRight=\"-8px\" // 2 × 4px grid\n borderRadius=\"4px\" // 1 × 4px grid\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onClose();\n }}\n _hover={{ backgroundColor: 'rgba(0, 0, 0, 0.05)' }}\n transition=\"all 0.2s ease\"\n {...views?.closeButton}\n >\n <CloseIcon widthHeight={16} color={Theme[variant].content.color} />\n </View>\n )}\n </Horizontal>\n );\n};\n\n// Toast Container component\nexport const ToastContainer: React.FC<ToastContainerProps> = ({\n position = 'top-right',\n gap = 8,\n limit = 5,\n containerStyle,\n}) => {\n const { toasts, remove } = useToastStore();\n\n // Group toasts by position\n const toastsByPosition = React.useMemo(() => {\n const grouped: Record<ToastPosition, typeof toasts> = {\n top: [],\n 'top-right': [],\n 'top-left': [],\n bottom: [],\n 'bottom-right': [],\n 'bottom-left': [],\n };\n\n // Group toasts by their position or the container's default position\n toasts.forEach((toast: any) => {\n const pos = toast.position || position;\n grouped[pos as ToastPosition].push(toast);\n });\n\n // Apply limits to each position group\n Object.keys(grouped).forEach((pos) => {\n grouped[pos as ToastPosition] = grouped[pos as ToastPosition].slice(\n -limit\n );\n });\n\n return grouped;\n }, [toasts, position, limit]);\n\n // Get toasts for the current position\n const visibleToasts = toastsByPosition[position];\n\n return (\n <View\n position=\"fixed\"\n zIndex={9999}\n display=\"flex\"\n flexDirection={position.includes('bottom') ? 'column-reverse' : 'column'}\n gap={`${gap}px`}\n width=\"fit-content\"\n maxWidth=\"100%\"\n pointerEvents=\"none\"\n {...ToastPositions[position as ToastPosition]}\n style={containerStyle}\n >\n {visibleToasts.map((toast: any) => (\n <View\n key={toast.id}\n pointerEvents=\"auto\"\n animation={\n position.includes('right')\n ? 'slideInRight 0.3s ease-out, fadeIn 0.3s ease-out'\n : position.includes('left')\n ? 'slideInLeft 0.3s ease-out, fadeIn 0.3s ease-out'\n : position.includes('top')\n ? 'slideInDown 0.3s ease-out, fadeIn 0.3s ease-out'\n : 'slideInUp 0.3s ease-out, fadeIn 0.3s ease-out'\n }\n >\n <ToastView\n id={toast.id}\n variant={toast.variant}\n title={toast.title}\n description={toast.description}\n onClose={() => remove(toast.id)}\n isClosable={toast.isClosable}\n action={toast.action}\n actionText={toast.actionText}\n showIcon={toast.showIcon}\n views={toast.views}\n render={toast.render}\n icon={toast.icon}\n isVisible={toast.isVisible}\n />\n </View>\n ))}\n </View>\n );\n};\n","import React from 'react';\nimport { ToastView, ToastContainer } from './Toast/Toast.view';\nimport { ToastProps, ToastContainerProps } from './Toast/Toast.props';\nimport {\n showToast,\n showInfoToast,\n showSuccessToast,\n showWarningToast,\n showErrorToast,\n removeToast,\n removeAllToasts,\n} from './Toast/Toast.store';\nimport { useToast as useToastHook } from './Toast/Toast.hook';\n\n/**\n * Toast component for displaying temporary notifications\n */\nconst ToastComponent: React.FC<ToastProps> = (props) => {\n return <ToastView {...props} />;\n};\n\n// Create a Toast object with static methods\nconst Toast = Object.assign(ToastComponent, {\n Container: (props: ToastContainerProps) => <ToastContainer {...props} />,\n show: showToast,\n info: showInfoToast,\n success: showSuccessToast,\n warning: showWarningToast,\n error: showErrorToast,\n remove: removeToast,\n removeAll: removeAllToasts,\n});\n\n// Export the hook for component usage\nexport const useToast = useToastHook;\n\nexport { Toast };\n","import { useState, useEffect, useCallback, useRef, useMemo } from 'react';\nimport { CommandGroup, CommandItem } from './Command.type';\n\nexport interface CommandStateProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n groups?: CommandGroup[];\n commands?: CommandItem[];\n filter?: (value: string, item: CommandItem) => boolean;\n}\n\n// Default filter function defined outside the hook to avoid recreating it on each render\nconst defaultFilterFn = (value: string, item: CommandItem) => {\n if (!value) return true;\n\n const searchValue = value.toLowerCase();\n const matchesName = item.name.toLowerCase().includes(searchValue);\n const matchesDescription =\n item.description?.toLowerCase().includes(searchValue) || false;\n const matchesKeywords =\n item.keywords?.some((keyword) =>\n keyword.toLowerCase().includes(searchValue)\n ) || false;\n\n return matchesName || matchesDescription || matchesKeywords;\n};\n\nexport const useCommandState = ({\n open,\n onOpenChange,\n groups = [],\n commands = [],\n filter,\n}: CommandStateProps) => {\n // State for search input\n const [search, setSearch] = useState('');\n\n // State for selected item index\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n // Ref for the command list element\n const listRef = useRef<HTMLDivElement>(null);\n\n // Use the provided filter or fall back to the default\n const filterFn = useMemo(() => filter || defaultFilterFn, [filter]);\n\n // Combine and memoize all commands from groups and flat list\n const allCommands = useMemo(() => {\n const groupCommands = groups.flatMap((group) => group.commands);\n return [...groupCommands, ...commands];\n }, [groups, commands]);\n\n // Filter and memoize commands based on search\n const filteredCommands = useMemo(() => {\n if (!search.trim()) return allCommands;\n return allCommands.filter((item) => filterFn(search, item));\n }, [allCommands, search, filterFn]);\n\n // Filter and memoize groups based on search\n const filteredGroups = useMemo(() => {\n if (!search) return groups;\n\n const filterFn = filter || defaultFilterFn;\n return groups\n .map((g) => ({\n ...g,\n commands: g.commands.filter((c) => filterFn(search, c)),\n }))\n .filter((g) => g.commands.length);\n }, [groups, search, filter]);\n\n // Reset selected index when filtered commands change\n useEffect(() => {\n setSelectedIndex(0);\n }, [filteredCommands.length]);\n\n // Handle keyboard navigation\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!open) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setSelectedIndex((prev) =>\n prev < filteredCommands.length - 1 ? prev + 1 : prev\n );\n break;\n case 'ArrowUp':\n e.preventDefault();\n setSelectedIndex((prev) => (prev > 0 ? prev - 1 : prev));\n break;\n case 'Enter':\n e.preventDefault();\n if (filteredCommands[selectedIndex]) {\n filteredCommands[selectedIndex].onSelect();\n onOpenChange(false);\n setSearch('');\n }\n break;\n case 'Escape':\n e.preventDefault();\n onOpenChange(false);\n setSearch('');\n break;\n }\n },\n [open, filteredCommands, selectedIndex, onOpenChange]\n );\n\n // Add keyboard event listener\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleKeyDown]);\n\n // Scroll selected item into view\n useEffect(() => {\n if (listRef.current && open) {\n const selectedElement = listRef.current.querySelector(\n `[data-index=\"${selectedIndex}\"]`\n );\n if (selectedElement) {\n selectedElement.scrollIntoView({ block: 'nearest' });\n }\n }\n }, [selectedIndex, open]);\n\n // Reset state when command palette is opened\n useEffect(() => {\n if (open) {\n setSelectedIndex(0);\n } else {\n // Clear search when closed\n setSearch('');\n }\n }, [open]);\n\n return {\n search,\n setSearch,\n selectedIndex,\n setSelectedIndex,\n filteredCommands,\n filteredGroups,\n listRef,\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { CommandSize, CommandVariant } from './Command.type';\n\nexport const CommandSizes: Record<CommandSize, ViewProps> = {\n sm: {\n width: '400px',\n maxHeight: '300px',\n },\n md: {\n width: '500px',\n maxHeight: '400px',\n },\n lg: {\n width: '600px',\n maxHeight: '500px',\n },\n};\n\nexport const getCommand = (\n themeMode: string\n): Record<CommandVariant, ViewProps> => {\n return {\n default: {\n backgroundColor: 'color.white',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n boxShadow: '0px 4px 20px rgba(0, 0, 0, 0.1)',\n },\n filled: {\n backgroundColor: 'color.gray.50',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n boxShadow: '0px 4px 20px rgba(0, 0, 0, 0.1)',\n },\n outline: {\n backgroundColor: 'color.white',\n borderWidth: '2px',\n borderStyle: 'solid',\n borderColor: 'color.gray.300',\n boxShadow: '0px 4px 20px rgba(0, 0, 0, 0.1)',\n },\n };\n // Add dark mode conditional styling here\n};\n\n// For backward compatibility\nexport const CommandVariants = getCommand('light');\n\nexport const CommandInputStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n padding: '12px 16px',\n borderBottomWidth: '1px',\n borderBottomStyle: 'solid',\n borderBottomColor: 'color.gray.200',\n};\n\nexport const CommandListStyles: ViewProps = {\n overflow: 'auto',\n padding: '8px 0',\n};\n\nexport const CommandGroupStyles: ViewProps = {\n marginBottom: '8px',\n};\n\nexport const CommandGroupHeadingStyles: ViewProps = {\n padding: '8px 16px',\n fontSize: '12px',\n fontWeight: 'bold',\n color: 'color.gray.500',\n textTransform: 'uppercase',\n};\n\nexport const CommandItemStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n padding: '8px 16px',\n cursor: 'pointer',\n userSelect: 'none',\n borderRadius: '4px',\n margin: '0 8px',\n _hover: {\n backgroundColor: 'color.gray.100',\n },\n};\n\nexport const CommandItemSelectedStyles: ViewProps = {\n backgroundColor: 'color.blue.50',\n _hover: {\n backgroundColor: 'color.blue.100',\n },\n};\n\nexport const CommandItemDisabledStyles: ViewProps = {\n opacity: 0.5,\n cursor: 'not-allowed',\n _hover: {\n backgroundColor: 'transparent',\n },\n};\n\nexport const CommandItemIconStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: '12px',\n color: 'color.gray.500',\n};\n\nexport const CommandItemContentStyles: ViewProps = {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n};\n\nexport const CommandItemNameStyles: ViewProps = {\n fontSize: '14px',\n fontWeight: 'medium',\n};\n\nexport const CommandItemDescriptionStyles: ViewProps = {\n fontSize: '12px',\n color: 'color.gray.500',\n marginTop: '2px',\n};\n\nexport const CommandItemShortcutStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n marginLeft: '12px',\n fontSize: '12px',\n color: 'color.gray.500',\n};\n\nexport const CommandEmptyStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '16px',\n color: 'color.gray.500',\n textAlign: 'center',\n};\n\nexport const CommandFooterStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 16px',\n borderTopWidth: '1px',\n borderTopStyle: 'solid',\n borderTopColor: 'color.gray.200',\n fontSize: '12px',\n color: 'color.gray.500',\n};\n","import React, { createContext, useContext, useRef } from 'react';\nimport { View } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { Vertical } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { SearchIcon } from '../../Icon/Icon';\nimport {\n CommandProps,\n CommandInputProps,\n CommandListProps,\n CommandGroupProps,\n CommandItemProps,\n CommandEmptyProps,\n} from './Command.props';\nimport {\n CommandSizes,\n CommandVariants,\n CommandInputStyles,\n CommandListStyles,\n CommandGroupStyles,\n CommandGroupHeadingStyles,\n CommandItemStyles,\n CommandItemSelectedStyles,\n CommandItemDisabledStyles,\n CommandItemIconStyles,\n CommandItemContentStyles,\n CommandItemNameStyles,\n CommandItemDescriptionStyles,\n CommandItemShortcutStyles,\n CommandEmptyStyles,\n CommandFooterStyles,\n} from './Command.style';\nimport { CommandItem as CommandItemInterface } from './Command.type';\n\n// Create context for the Command component\ninterface CommandContextType {\n search: string;\n setSearch: (value: string) => void;\n selectedIndex: number;\n setSelectedIndex: (index: number) => void;\n filteredCommands: CommandItemInterface[];\n onSelect: (item: CommandItemInterface) => void;\n}\n\nconst CommandContext = createContext<CommandContextType>({\n search: '',\n setSearch: () => {},\n selectedIndex: 0,\n setSelectedIndex: () => {},\n filteredCommands: [],\n onSelect: () => {},\n});\n\n// Hook to use the Command context\nexport const useCommandContext = () => useContext(CommandContext);\n\n// Provider component for the Command context\nexport const CommandProvider: React.FC<{\n value: CommandContextType;\n children: React.ReactNode;\n}> = ({ value, children }) => {\n return (\n <CommandContext.Provider value={value}>{children}</CommandContext.Provider>\n );\n};\n\n// Command Input component\nexport const CommandInput: React.FC<CommandInputProps> = ({\n value,\n onValueChange,\n placeholder = 'Type a command or search...',\n views,\n ...props\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Focus input when component mounts\n React.useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n }\n }, []);\n\n return (\n <View {...CommandInputStyles} {...views?.container} {...props}>\n <SearchIcon widthHeight={16} color=\"color.gray.400\" marginRight=\"8px\" />\n <View\n as=\"input\"\n type=\"text\"\n value={value}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n onValueChange(e.target.value)\n }\n placeholder={placeholder}\n width=\"100%\"\n border=\"none\"\n outline=\"none\"\n backgroundColor=\"transparent\"\n fontSize=\"14px\"\n ref={inputRef}\n {...views?.input}\n />\n </View>\n );\n};\n\n// Command List component\nexport const CommandList: React.FC<CommandListProps> = ({\n children,\n views,\n ...props\n}) => {\n return (\n <View {...CommandListStyles} {...views?.container} {...props}>\n {children}\n </View>\n );\n};\n\n// Command Group component\nexport const CommandGroup: React.FC<CommandGroupProps> = ({\n heading,\n children,\n views,\n ...props\n}) => {\n return (\n <View {...CommandGroupStyles} {...views?.container} {...props}>\n <Text {...CommandGroupHeadingStyles} {...views?.heading}>\n {heading}\n </Text>\n {children}\n </View>\n );\n};\n\n// Command Item component\nexport const CommandItem: React.FC<CommandItemProps> = ({\n item,\n selected = false,\n onSelect,\n views,\n ...props\n}) => {\n const handleClick = () => {\n if (!item.disabled && onSelect) {\n onSelect();\n }\n };\n\n return (\n <Horizontal\n {...CommandItemStyles}\n {...(selected ? CommandItemSelectedStyles : {})}\n {...(item.disabled ? CommandItemDisabledStyles : {})}\n onClick={handleClick}\n {...views?.container}\n {...props}\n >\n {item.icon && (\n <View {...CommandItemIconStyles} {...views?.icon}>\n {item.icon}\n </View>\n )}\n <Vertical {...CommandItemContentStyles} {...views?.content}>\n <Text {...CommandItemNameStyles} {...views?.name}>\n {item.name}\n </Text>\n {item.description && (\n <Text {...CommandItemDescriptionStyles} {...views?.description}>\n {item.description}\n </Text>\n )}\n </Vertical>\n {item.shortcut && (\n <Text {...CommandItemShortcutStyles} {...views?.shortcut}>\n {item.shortcut}\n </Text>\n )}\n </Horizontal>\n );\n};\n\n// Command Empty component\nexport const CommandEmpty: React.FC<CommandEmptyProps> = ({\n children = 'No results found.',\n views,\n ...props\n}) => {\n return (\n <View {...CommandEmptyStyles} {...views?.container} {...props}>\n {children}\n </View>\n );\n};\n\n// Main Command View component\nexport const CommandView: React.FC<\n CommandProps & {\n search: string;\n setSearch: (value: string) => void;\n selectedIndex: number;\n setSelectedIndex: (index: number) => void;\n filteredCommands: CommandItemInterface[];\n filteredGroups: any[];\n listRef: React.RefObject<HTMLDivElement>;\n }\n> = ({\n open,\n onOpenChange,\n groups = [],\n commands = [],\n placeholder,\n size = 'md',\n variant = 'default',\n emptyState,\n footer,\n search,\n setSearch,\n selectedIndex,\n setSelectedIndex,\n filteredCommands,\n filteredGroups,\n listRef,\n views,\n filter,\n ...props\n}) => {\n if (!open) return null;\n\n const handleItemSelect = React.useCallback(\n (item: CommandItemInterface) => {\n if (item.disabled) return;\n item.onSelect();\n onOpenChange(false);\n setSearch('');\n },\n [onOpenChange, setSearch]\n );\n\n const handleBackdropClick = React.useCallback(\n (e: React.MouseEvent) =>\n e.target === e.currentTarget && onOpenChange(false),\n [onOpenChange]\n );\n\n const contextValue = React.useMemo(\n () => ({\n search,\n setSearch,\n selectedIndex,\n setSelectedIndex,\n filteredCommands,\n onSelect: handleItemSelect,\n }),\n [\n search,\n selectedIndex,\n filteredCommands,\n handleItemSelect,\n setSearch,\n setSelectedIndex,\n ]\n );\n\n const hasGroups = groups.length > 0;\n // const hasCommands = commands.length > 0;\n const isEmpty = filteredCommands.length === 0;\n\n return (\n <View\n position=\"fixed\"\n top={0}\n left={0}\n right={0}\n bottom={0}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor=\"rgba(0, 0, 0, 0.4)\"\n zIndex={9999}\n onClick={handleBackdropClick}\n {...props}\n >\n <CommandProvider value={contextValue}>\n <View\n borderRadius=\"8px\"\n overflow=\"hidden\"\n display=\"flex\"\n flexDirection=\"column\"\n {...CommandSizes[size]}\n {...CommandVariants[variant]}\n {...views?.container}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <CommandInput\n value={search}\n onValueChange={setSearch}\n placeholder={placeholder}\n views={views?.searchInput}\n />\n\n <View ref={listRef} flex={1} overflow=\"auto\" {...views?.list}>\n {isEmpty ? (\n emptyState ? (\n emptyState\n ) : (\n <CommandEmpty views={views?.empty} />\n )\n ) : hasGroups ? (\n filteredGroups.map((group) => (\n <CommandGroup\n key={group.id}\n heading={group.name}\n views={views?.groupHeading}\n >\n {group.commands.map((item: any) => {\n const commandIndex = filteredCommands.findIndex(\n (cmd) => cmd.id === item.id\n );\n return (\n <CommandItem\n key={item.id}\n item={item}\n selected={commandIndex === selectedIndex}\n onSelect={() => handleItemSelect(item)}\n data-index={commandIndex}\n views={{\n container: views?.item,\n icon: views?.icon,\n content: views?.content,\n name: views?.name,\n description: views?.description,\n shortcut: views?.shortcut,\n }}\n />\n );\n })}\n </CommandGroup>\n ))\n ) : (\n filteredCommands.map((item, index) => (\n <CommandItem\n key={item.id}\n item={item}\n selected={index === selectedIndex}\n onSelect={() => handleItemSelect(item)}\n data-index={index}\n views={{\n container: views?.item,\n icon: views?.icon,\n content: views?.content,\n name: views?.name,\n description: views?.description,\n shortcut: views?.shortcut,\n }}\n />\n ))\n )}\n </View>\n\n {footer && (\n <View {...CommandFooterStyles} {...views?.footer}>\n {footer}\n </View>\n )}\n </View>\n </CommandProvider>\n </View>\n );\n};\n","import React from 'react';\nimport { CommandProps, CommandType } from './Command/Command.props';\nimport { useCommandState } from './Command/Command.state';\nimport {\n CommandView,\n CommandInput,\n CommandList,\n CommandGroup,\n CommandItem as CommandItemView,\n CommandEmpty,\n} from './Command/Command.view';\n\n/**\n * Command component for displaying a command palette with search functionality.\n */\nconst CommandComponent: React.FC<CommandProps> = ({\n open,\n onOpenChange,\n groups = [],\n commands = [],\n placeholder,\n size = 'md',\n variant = 'default',\n filter,\n emptyState,\n footer,\n views,\n ...props\n}) => {\n const {\n search,\n setSearch,\n selectedIndex,\n setSelectedIndex,\n filteredCommands,\n filteredGroups,\n listRef,\n } = useCommandState({\n open,\n onOpenChange,\n groups,\n commands,\n filter,\n });\n\n return (\n <CommandView\n open={open}\n onOpenChange={onOpenChange}\n groups={groups}\n commands={commands}\n placeholder={placeholder}\n size={size}\n variant={variant}\n emptyState={emptyState}\n footer={footer}\n search={search}\n setSearch={setSearch}\n selectedIndex={selectedIndex}\n setSelectedIndex={setSelectedIndex}\n filteredCommands={filteredCommands}\n filteredGroups={filteredGroups}\n listRef={listRef}\n views={views}\n {...props}\n />\n );\n};\n\nexport const Command = CommandComponent as CommandType;\n\n// Assign the sub-components to the main component\nCommand.Input = CommandInput;\nCommand.List = CommandList;\nCommand.Group = CommandGroup;\nCommand.Item = CommandItemView;\nCommand.Empty = CommandEmpty;\n","/**\n * Generates a random ID string\n * @returns A random string that can be used as an ID\n */\nexport const generateId = (): string => {\n return Math.random().toString(36).substring(2, 11);\n};\n","import { ViewProps } from 'app-studio';\nimport { Size, Variant, Position, Alignment } from './Tooltip.type';\n\nexport const TooltipSizes: Record<Size, ViewProps> = {\n sm: {\n padding: '4px 8px',\n fontSize: '12px',\n maxWidth: '200px',\n },\n md: {\n padding: '6px 10px',\n fontSize: '14px',\n maxWidth: '250px',\n },\n lg: {\n padding: '8px 12px',\n fontSize: '16px',\n maxWidth: '300px',\n },\n};\n\nexport const getTooltip = (themeMode: string): Record<Variant, ViewProps> => {\n return {\n default: {\n backgroundColor: 'color.gray.800',\n color: 'color.white',\n },\n light: {\n backgroundColor: 'color.white',\n color: 'color.gray.800',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n },\n dark: {\n backgroundColor: 'color.black',\n color: 'color.white',\n },\n };\n // Add dark mode conditional styling here\n};\n\n// For backward compatibility\nexport const TooltipVariants = getTooltip('light');\n\nexport const getTooltipPositionStyles = (\n position: Position,\n align: Alignment\n): ViewProps => {\n const baseStyles: ViewProps = {\n position: 'absolute',\n zIndex: 1000,\n };\n\n // Position styles\n switch (position) {\n case 'top':\n return {\n ...baseStyles,\n bottom: '100%',\n marginBottom: '8px',\n ...(align === 'start'\n ? { left: '0' }\n : align === 'end'\n ? { right: '0' }\n : { left: '50%', transform: 'translateX(-50%)' }),\n };\n case 'right':\n return {\n ...baseStyles,\n left: '100%',\n marginLeft: '8px',\n ...(align === 'start'\n ? { top: '0' }\n : align === 'end'\n ? { bottom: '0' }\n : { top: '50%', transform: 'translateY(-50%)' }),\n };\n case 'bottom':\n return {\n ...baseStyles,\n top: '100%',\n marginTop: '8px',\n ...(align === 'start'\n ? { left: '0' }\n : align === 'end'\n ? { right: '0' }\n : { left: '50%', transform: 'translateX(-50%)' }),\n };\n case 'left':\n return {\n ...baseStyles,\n right: '100%',\n marginRight: '8px',\n ...(align === 'start'\n ? { top: '0' }\n : align === 'end'\n ? { bottom: '0' }\n : { top: '50%', transform: 'translateY(-50%)' }),\n };\n default:\n return baseStyles;\n }\n};\n\nexport const getArrowStyles = (position: Position): ViewProps => {\n const baseStyles: ViewProps = {\n position: 'absolute',\n width: '8px',\n height: '8px',\n backgroundColor: 'inherit',\n borderStyle: 'inherit',\n borderWidth: 'inherit',\n borderColor: 'inherit',\n transform: 'rotate(45deg)',\n };\n\n switch (position) {\n case 'top':\n return {\n ...baseStyles,\n bottom: '-4px',\n left: '50%',\n marginLeft: '-4px',\n borderTop: 'none',\n borderLeft: 'none',\n };\n case 'right':\n return {\n ...baseStyles,\n left: '-4px',\n top: '50%',\n marginTop: '-4px',\n borderRight: 'none',\n borderTop: 'none',\n };\n case 'bottom':\n return {\n ...baseStyles,\n top: '-4px',\n left: '50%',\n marginLeft: '-4px',\n borderBottom: 'none',\n borderRight: 'none',\n };\n case 'left':\n return {\n ...baseStyles,\n right: '-4px',\n top: '50%',\n marginTop: '-4px',\n borderLeft: 'none',\n borderBottom: 'none',\n };\n default:\n return baseStyles;\n }\n};\n","import React, { createContext, useContext } from 'react';\nimport { View, Text, ViewProps } from 'app-studio';\nimport { TooltipContextType, Position, Alignment } from './Tooltip.type';\nimport { TooltipTriggerProps, TooltipContentProps } from './Tooltip.props';\nimport {\n TooltipSizes,\n TooltipVariants,\n getTooltipPositionStyles,\n getArrowStyles,\n} from './Tooltip.style';\n\n// Create context for the Tooltip\nconst TooltipContext = createContext<TooltipContextType>({\n isOpen: false,\n openTooltip: () => {},\n closeTooltip: () => {},\n triggerRef: { current: null },\n contentRef: { current: null },\n contentId: '',\n triggerId: '',\n});\n\n// Hook to use the Tooltip context\nexport const useTooltipContext = () => useContext(TooltipContext);\n\n// Provider component for the Tooltip context\nexport const TooltipProvider: React.FC<{\n value: TooltipContextType;\n children: React.ReactNode;\n}> = ({ value, children }) => {\n return (\n <TooltipContext.Provider value={value}>{children}</TooltipContext.Provider>\n );\n};\n\n// Tooltip Trigger component\nexport const TooltipTrigger: React.FC<TooltipTriggerProps> = ({\n children,\n views,\n asChild = false,\n ...props\n}) => {\n const { openTooltip, closeTooltip, triggerRef, contentId, triggerId } =\n useTooltipContext();\n\n const handleMouseEnter = () => openTooltip();\n const handleMouseLeave = () => closeTooltip();\n const handleFocus = () => openTooltip(); // For keyboard accessibility\n const handleBlur = () => closeTooltip(); // For keyboard accessibility\n\n const triggerProps = {\n ref: triggerRef,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onFocus: handleFocus,\n onBlur: handleBlur,\n id: triggerId,\n 'aria-describedby': contentId, // Link trigger to content for screen readers\n ...views?.container,\n ...props,\n };\n\n // If asChild is true, clone the child element and pass the props\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, triggerProps);\n }\n\n // Otherwise, wrap the children in a View component\n return (\n <View display=\"inline-block\" {...triggerProps}>\n {children}\n </View>\n );\n};\n\n// Tooltip Content component\nexport const TooltipContent: React.FC<TooltipContentProps> = ({\n children,\n views,\n ...props\n}) => {\n const { isOpen, contentRef, contentId, triggerId } = useTooltipContext();\n\n if (!isOpen) {\n return null; // Don't render content if not open\n }\n\n return (\n <View\n ref={contentRef}\n id={contentId}\n role=\"tooltip\" // Use tooltip role for accessibility\n aria-labelledby={triggerId} // Associate content with trigger\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// Main Tooltip View component\nexport const TooltipView: React.FC<\n {\n content: React.ReactNode;\n children: React.ReactNode;\n position?: Position;\n align?: Alignment;\n size?: string;\n variant?: string;\n showArrow?: boolean;\n views?: any;\n } & Omit<ViewProps, 'position'>\n> = ({\n content,\n children,\n position = 'top',\n align = 'center',\n size = 'md',\n variant = 'default',\n showArrow = true,\n views,\n\n themeMode: elementMode,\n ...props\n}) => {\n const {\n isOpen,\n // openTooltip,\n // closeTooltip,\n // triggerRef,\n contentRef,\n contentId,\n triggerId,\n } = useTooltipContext();\n\n // Get position styles\n const positionStyles = getTooltipPositionStyles(position, align);\n\n // Get arrow styles\n const arrowStyles = showArrow ? getArrowStyles(position) : {};\n\n return (\n <View\n position=\"relative\"\n display=\"inline-block\"\n {...views?.container}\n {...props}\n >\n {/* Trigger */}\n <TooltipTrigger>{children}</TooltipTrigger>\n\n {/* Content */}\n {isOpen && (\n <View\n ref={contentRef}\n id={contentId}\n role=\"tooltip\"\n aria-labelledby={triggerId}\n borderRadius={4}\n boxShadow=\"0px 2px 8px rgba(0, 0, 0, 0.15)\"\n {...TooltipSizes[size as keyof typeof TooltipSizes]}\n {...TooltipVariants[variant as keyof typeof TooltipVariants]}\n {...positionStyles}\n {...views?.content}\n >\n {typeof content === 'string' ? (\n <Text {...views?.text}>{content}</Text>\n ) : (\n content\n )}\n\n {/* Arrow */}\n {showArrow && <View {...arrowStyles} {...views?.arrow} />}\n </View>\n )}\n </View>\n );\n};\n","import React from 'react';\nimport { TooltipProps, TooltipType } from './Tooltip/Tooltip.props';\nimport { useTooltipState } from './Tooltip/Tooltip.state';\nimport {\n TooltipProvider,\n TooltipTrigger,\n TooltipContent,\n TooltipView,\n} from './Tooltip/Tooltip.view';\n\n/**\n * Tooltip component for displaying additional information when hovering over an element.\n * Supports configurable positions, delays, and styling.\n */\nconst TooltipComponent: React.FC<TooltipProps> = ({\n content,\n children,\n position = 'top',\n align = 'center',\n size = 'md',\n variant = 'default',\n openDelay = 200,\n closeDelay = 200,\n showArrow = true,\n defaultOpen = false,\n isDisabled = false,\n views,\n ...props\n}) => {\n const tooltipState = useTooltipState({\n defaultOpen,\n openDelay,\n closeDelay,\n isDisabled,\n });\n\n return (\n <TooltipProvider value={tooltipState}>\n <TooltipView\n content={content}\n position={position}\n align={align}\n size={size}\n variant={variant}\n showArrow={showArrow}\n views={views}\n {...props}\n >\n {children}\n </TooltipView>\n </TooltipProvider>\n );\n};\n\nexport const Tooltip = TooltipComponent as TooltipType;\n\n// Assign the sub-components to the main component\nTooltip.Trigger = TooltipTrigger;\nTooltip.Content = TooltipContent;\n","import { useState, useRef, useCallback, useEffect } from 'react';\nimport { generateId } from '../../../utils/generateId';\n\ninterface TooltipStateProps {\n defaultOpen?: boolean;\n openDelay?: number;\n closeDelay?: number;\n isDisabled?: boolean;\n}\n\nexport const useTooltipState = ({\n defaultOpen = false,\n openDelay = 200,\n closeDelay = 200,\n isDisabled = false,\n}: TooltipStateProps = {}) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLElement>(null);\n const openTimerRef = useRef<NodeJS.Timeout | null>(null);\n const closeTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n // Generate unique IDs for accessibility\n const triggerId = useRef(`tooltip-trigger-${generateId()}`).current;\n const contentId = useRef(`tooltip-content-${generateId()}`).current;\n\n // Open tooltip with delay\n const openTooltip = useCallback(() => {\n if (isDisabled) return;\n\n // Clear any existing close timer\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n\n // Set open timer\n if (!isOpen && !openTimerRef.current) {\n openTimerRef.current = setTimeout(() => {\n setIsOpen(true);\n openTimerRef.current = null;\n }, openDelay);\n }\n }, [isOpen, openDelay, isDisabled]);\n\n // Close tooltip with delay\n const closeTooltip = useCallback(() => {\n // Clear any existing open timer\n if (openTimerRef.current) {\n clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }\n\n // Set close timer\n if (isOpen && !closeTimerRef.current) {\n closeTimerRef.current = setTimeout(() => {\n setIsOpen(false);\n closeTimerRef.current = null;\n }, closeDelay);\n }\n }, [isOpen, closeDelay]);\n\n // Cancel close timer (used when mouse enters content)\n const cancelCloseTimer = useCallback(() => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n // Clean up timers on unmount\n useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n clearTimeout(openTimerRef.current);\n }\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n }\n };\n }, []);\n\n // Close tooltip on ESC key\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen]);\n\n return {\n isOpen,\n openTooltip,\n closeTooltip,\n cancelCloseTimer,\n triggerRef,\n contentRef,\n triggerId,\n contentId,\n };\n};\n","import React from 'react';\nimport { AlertView } from './Alert/Alert.view';\nimport { AlertProps } from './Alert/Alert.props';\n// Definition of the AlertComponent functional component with props.\nconst AlertComponent = (props: AlertProps) => <AlertView {...props} />;\n// Exporting the AlertComponent as 'Alert' for use in other parts of the application.\nexport const Alert = AlertComponent;\n","import React from 'react';\nimport { AspectRatioProps } from './AspectRatio/AspectRatio.props';\nimport { AspectRatioView } from './AspectRatio/AspectRatio.view';\n// Declaration of the AspectRatioComponent functional component with destructured props.\nconst AspectRatioComponent = ({\n ratio,\n children,\n ...props\n}: // Opening of the functional component's body.\nAspectRatioProps) => {\n // Beginning of the return statement in the functional component.\n return (\n <AspectRatioView ratio={ratio} {...props}>\n {children}\n </AspectRatioView>\n );\n};\nexport const AspectRatio = AspectRatioComponent;\n","import React from 'react';\nimport { AvatarProps } from './Avatar/Avatar.props';\nimport { useAvatarState } from './Avatar/Avatar.state';\nimport { AvatarView } from './Avatar/Avatar.view';\n\n// Defines the AvatarComponent functional component with destructured props from AvatarProps type.\nconst AvatarComponent = ({\n src,\n size,\n views,\n fallback,\n onClick,\n}: AvatarProps) => {\n // Uses custom hook useAvatarState to manage the avatar image loading error state.\n const { imageError, setImageError } = useAvatarState();\n // Begins the JSX return block for rendering the AvatarView component.\n return (\n <AvatarView\n src={src}\n size={size}\n views={views}\n fallback={fallback}\n imageError={imageError}\n setImageError={setImageError}\n onClick={onClick}\n />\n );\n // AvatarComponent is a functional component that wraps the AvatarView with added state logic.\n};\n// Exports the AvatarComponent as Avatar for use in other parts of the application.\nexport const Avatar = AvatarComponent;\n","import { useState } from 'react';\n// Defines a state hook for managing avatar image error status, initialized as false.\nexport const useAvatarState = () => {\n const [imageError, setImageError] = useState(false);\n // Provides an object containing the image error state and its setter function.\n return { imageError, setImageError };\n};\n","import React from 'react';\nimport { BadgeProps } from './Badge/Badge.props';\nimport BadgeView from './Badge/Badge.view';\n// Badge component that displays a small indicator, typically used for counts or status\nexport const Badge = (props: BadgeProps) => <BadgeView {...props} />;\n","import React from 'react';\nimport { ChartProps } from './Chart/Chart.props';\nimport { ChartView } from './Chart/Chart.view';\n\n/**\n * Chart component for data visualization.\n * Supports bar, line, area, pie, and donut chart types.\n */\nconst ChartComponent: React.FC<ChartProps> = (props) => {\n return <ChartView {...props} />;\n};\n\nexport const Chart = ChartComponent;\n","import React from 'react';\n\nimport { CheckboxProps } from './Checkbox/Checkbox.props';\nimport { useCheckboxState } from './Checkbox/Checkbox.state';\nimport CheckboxView from './Checkbox/Checkbox.view';\n\nconst CheckboxComponent: React.FC<CheckboxProps> = (props) => {\n const checkboxStates = useCheckboxState(props);\n\n return <CheckboxView {...checkboxStates} {...props} />;\n};\n\n/**\n * Checkbox allows users to select one or more options from a list of choices.\n */\nexport const Checkbox = CheckboxComponent;\n","import React from 'react';\nimport { ComboBoxProps } from './ComboBox/ComboBox.props';\nimport { useComboBoxState } from './ComboBox/ComboBox.state';\nimport ComboBoxView from './ComboBox/ComboBox.view';\n\n// Defines the ComboBoxComponent functional component with ComboBoxProps\nconst ComboBoxComponent: React.FC<ComboBoxProps> = ({\n // Destructures 'id' from component props\n id,\n // Destructures 'name' from component props\n name,\n // Destructures 'items' from component props, used to populate combobox\n items,\n // Destructures 'placeholder' from component props, displayed when no item selected\n placeholder,\n // Destructures 'searchPlaceholder' from component props, used as the search field placeholder\n searchPlaceholder,\n // Destructures the rest of the props not explicitly defined\n ...props\n}) => {\n // Initializes ComboBox state using custom hook with items and placeholders\n const state = useComboBoxState(items, placeholder, searchPlaceholder);\n return (\n // Render ComboBoxView with passed and state props\n <ComboBoxView id={id} name={name} items={items} {...state} {...props} />\n );\n};\n// Exports the ComboBoxComponent as ComboBox\nexport const ComboBox = ComboBoxComponent;\n","import React from 'react';\nimport { CountryPickerProps } from './CountryPicker/CountryPicker.props';\n// Uses the custom hook 'useCountryPickerState' to manage state specific to the CountryPicker component.\nimport { useCountryPickerState } from './CountryPicker/CountryPicker.state';\nimport { CountryPickerView } from './CountryPicker/CountryPicker.view';\n// Defines the CountryPickerComponent as a functional component with type 'React.FC' that takes 'CountryPickerProps' as props.\nconst CountryPickerComponent: React.FC<CountryPickerProps> = (props) => {\n // Invokes the 'useCountryPickerState' hook to obtain state and methods related to country picking functionality.\n const countryPickerStates = useCountryPickerState(props);\n // Renders the CountryPickerView component passing in state and props for dynamic UI representation.\n return <CountryPickerView {...countryPickerStates} {...props} />;\n};\n// Exports the CountryPickerComponent for use in other parts of the application as 'CountryPicker'.\nexport const CountryPicker = CountryPickerComponent;\n","import React from 'react';\n\nimport { DatePickerProps } from './DatePicker/DatePicker.props';\nimport { useDatePickerState } from './DatePicker/DatePicker.state';\nimport DatePickerView from './DatePicker/DatePicker.view';\n\nconst DatePickerComponent: React.FC<DatePickerProps> = (props) => {\n const datePickerStates = useDatePickerState();\n return <DatePickerView {...datePickerStates} {...props} />;\n};\n\n/**\n * Date picker allows users to select a date from a calendar view.\n */\nexport const DatePicker = DatePickerComponent;\n","import React from 'react';\nimport { useTheme, Image, ViewProps, ImageProps } from 'app-studio';\nimport { Center } from 'app-studio';\n\nexport interface FileProps extends ViewProps {\n src: string;\n color?: string;\n views?: {\n container?: ViewProps;\n image?: ImageProps;\n };\n}\n\nexport const FileSVG = ({\n src,\n color,\n views,\n themeMode: elementMode,\n ...props\n}: FileProps) => {\n const { getColor, themeMode } = useTheme();\n\n const Colorprops = color\n ? {\n fill: getColor(color, { themeMode }),\n stroke: getColor(color, { themeMode }),\n }\n : {};\n\n return (\n <Center {...props} {...views?.container}>\n <Image\n {...Colorprops}\n content={'url(\"' + src + '\")'}\n width=\"100%\"\n height=\"100%\"\n {...views?.image}\n />\n </Center>\n );\n};\n\nexport const FileImage = ({\n path,\n ...props\n}: { path: string } & ImageProps) => {\n return <Image src={path} {...props} />;\n};\n","import React from 'react';\n\nimport { CheckboxProps } from '../Form/Checkbox/Checkbox/Checkbox.props';\nimport { useCheckboxState } from '../Form/Checkbox/Checkbox/Checkbox.state';\nimport CheckboxView from '../Form/Checkbox/Checkbox/Checkbox.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst CheckboxComponent: React.FC<CheckboxProps> = (props) => {\n let { value, ...formProps } = useFormikInput(props);\n formProps.isChecked = value;\n const checkboxStates = useCheckboxState(props);\n return <CheckboxView {...checkboxStates} {...formProps} />;\n};\n\n/**\n * Checkbox allows users to select one or more options from a list of choices.\n */\nexport const FormikCheckbox = CheckboxComponent;\n","import React from 'react';\n\nimport { ComboBoxProps } from '../Form/ComboBox/ComboBox/ComboBox.props';\nimport { useComboBoxState } from '../Form/ComboBox/ComboBox/ComboBox.state';\nimport ComboBoxView from '../Form/ComboBox/ComboBox/ComboBox.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst ComboBoxComponent: React.FC<ComboBoxProps> = ({\n items,\n placeholder,\n searchPlaceholder,\n ...props\n}) => {\n const formProps = useFormikInput(props);\n const ComboBoxStates = useComboBoxState(\n items,\n placeholder,\n searchPlaceholder\n );\n\n // Ensure the onChange function from formProps is being called when an item is selected\n const handleSelect = (item: any) => {\n formProps.onChange(item);\n };\n\n return (\n <ComboBoxView {...ComboBoxStates} {...formProps} onSelect={handleSelect} />\n );\n};\n\n/**\n * ComboBox allows users to select one or more options from a list of choices.\n */\nexport const FormikComboBox = ComboBoxComponent;\n","import React from 'react';\n\nimport { CountryPickerProps } from '../Form/CountryPicker/CountryPicker/CountryPicker.props';\nimport { useCountryPickerState } from '../Form/CountryPicker/CountryPicker/CountryPicker.state';\nimport { CountryPickerView } from '../Form/CountryPicker/CountryPicker/CountryPicker.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst CountryPickerComponent: React.FC<CountryPickerProps> = (props) => {\n const formProps = useFormikInput(props);\n const countryPickerStates = useCountryPickerState(props);\n return <CountryPickerView {...countryPickerStates} {...formProps} />;\n};\n\n/**\n * Country picker allows users to select a country from a dropdown list or search field.\n */\nexport const FormikCountryPicker = CountryPickerComponent;\n","import React from 'react';\n\nimport { DatePickerProps } from '../Form/DatePicker/DatePicker/DatePicker.props';\nimport { useDatePickerState } from '../Form/DatePicker/DatePicker/DatePicker.state';\nimport DatePickerView from '../Form/DatePicker/DatePicker/DatePicker.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst DatePickerComponent: React.FC<DatePickerProps> = (props) => {\n const formProps = useFormikInput(props);\n\n const datePickerStates = useDatePickerState();\n return <DatePickerView {...datePickerStates} {...formProps} />;\n};\n\n/**\n * Date picker allows users to select a date from a calendar view.\n */\nexport const FormikDatePicker = DatePickerComponent;\n","import React, { useCallback } from 'react';\nimport { OTPInputProps } from '../OTPInput/OTPInput/OTPInput.props';\nimport { useOTPInputState } from '../OTPInput/OTPInput/OTPInput.state';\nimport OTPInputView from '../OTPInput/OTPInput/OTPInput.view';\nimport { useFormikInput } from './Formik.Hook';\n\n/**\n * FormikOTPInput component for entering one-time passwords or verification codes\n * with Formik integration for form state management.\n */\nconst OTPInputComponent: React.FC<OTPInputProps> = (props: OTPInputProps) => {\n // Get Formik integration props\n const formProps = useFormikInput(props);\n\n // Get OTP input state\n const {\n isFocused,\n setIsFocused,\n isHovered,\n setIsHovered,\n inputRef,\n containerRef,\n mirrorSelectionStart,\n mirrorSelectionEnd,\n setMirrorSelectionStart,\n setMirrorSelectionEnd,\n setInputRef,\n handleFocus,\n handleBlur,\n handleKeyDown,\n handlePaste,\n } = useOTPInputState(props);\n\n // Handle value changes through Formik\n const setValue = useCallback(\n (value: string) => {\n if (formProps.onChange) {\n formProps.onChange(value);\n }\n\n // If onComplete is provided and the value is complete, call it\n if (props.onComplete && value.length === (props.length || 6)) {\n props.onComplete(value);\n }\n\n // Ensure the input field value is updated directly\n if (inputRef.current) {\n inputRef.current.value = value;\n }\n },\n [formProps, props, inputRef]\n );\n\n // Handle input changes\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.currentTarget.value.slice(0, props.length || 6);\n setValue(newValue);\n\n // Ensure the input field value is updated directly\n if (inputRef.current) {\n inputRef.current.value = newValue;\n }\n },\n [props.length, setValue, inputRef]\n );\n\n return (\n <OTPInputView\n {...props}\n {...formProps}\n setValue={setValue}\n isFocused={isFocused}\n setIsFocused={setIsFocused}\n isHovered={isHovered}\n setIsHovered={setIsHovered}\n inputRef={inputRef}\n containerRef={containerRef}\n mirrorSelectionStart={mirrorSelectionStart}\n mirrorSelectionEnd={mirrorSelectionEnd}\n setMirrorSelectionStart={setMirrorSelectionStart}\n setMirrorSelectionEnd={setMirrorSelectionEnd}\n setInputRef={setInputRef}\n handleChange={handleChange}\n handleFocus={handleFocus}\n handleBlur={handleBlur}\n handleKeyDown={handleKeyDown}\n handlePaste={handlePaste}\n stepValues={props.stepValues}\n />\n );\n};\n\n/**\n * OTPInput component for entering one-time passwords or verification codes with Formik integration.\n * Provides multiple input fields for entering digits with auto-focus functionality.\n * Supports step-based input and improved accessibility.\n */\nexport const FormikOTPInput = OTPInputComponent;\n","import React from 'react';\n\nimport { PasswordProps } from '../Form/Password/Password/Password.props';\nimport { usePasswordState } from '../Form/Password/Password/Password.state';\nimport { View } from 'app-studio';\nimport { CloseEyeIcon, OpenEyeIcon } from '../Icon/Icon';\nimport TextFieldView from '../Form/TextField/TextField/TextField.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst PasswordComponent: React.FC<PasswordProps> = ({\n visibleIcon = <OpenEyeIcon widthHeight={14} />,\n hiddenIcon = <CloseEyeIcon widthHeight={14} />,\n ...props\n}) => {\n const formProps = useFormikInput(props);\n\n const { isVisible, setIsVisible, ...passwordProps } =\n usePasswordState(formProps);\n\n return (\n <TextFieldView\n {...passwordProps}\n type={isVisible ? 'text' : 'password'}\n isClearable={false}\n right={\n <View\n onClick={() => {\n if (!props.isDisabled) {\n setIsVisible(!isVisible);\n }\n }}\n >\n {isVisible ? visibleIcon : hiddenIcon}\n </View>\n }\n />\n );\n};\n\n/**\n * To allow users to securely enter sensitive information\n */\nexport const FormikPassword = PasswordComponent;\n","import React from 'react';\n\nimport { SelectProps } from '../Form/Select/Select/Select.props';\nimport { useSelectState } from '../Form/Select/Select/Select.state';\nimport SelectView from '../Form/Select/Select/Select.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst SelectComponent: React.FC<SelectProps> = (props) => {\n let formProps = useFormikInput(props);\n formProps.selected = formProps.value;\n const selectStates = useSelectState(props);\n return <SelectView {...selectStates} {...formProps} />;\n};\n\n/**\n * Select provides a dropdown list of options for the user to choose from.\n */\n\nexport const FormikSelect = SelectComponent;\n","import React from 'react';\n\nimport { SliderProps } from '../Slider/Slider/Slider.props';\nimport { useSliderState } from '../Slider/Slider/Slider.state';\nimport { SliderView } from '../Slider/Slider/Slider.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst SliderComponent: React.FC<SliderProps> = (props) => {\n // Get Formik props (value, onChange, etc.)\n const formProps = useFormikInput(props);\n\n // Get slider state and handlers\n const sliderState = useSliderState({\n ...props,\n value: formProps.value !== undefined ? Number(formProps.value) : undefined,\n onChange: (value: number) => {\n // Call Formik's onChange\n formProps.onChange(value);\n // Call the original onChange if provided\n props.onChange?.(value);\n },\n });\n\n // Render the slider with both Formik props and slider state\n return <SliderView {...props} {...sliderState} {...formProps} />;\n};\n\n/**\n * Slider component integrated with Formik for form state management.\n * Allows users to select a value from a range by moving a handle.\n */\nexport const FormikSlider = SliderComponent;\n","import React from 'react';\n\nimport { SwitchProps } from '../Form/Switch/Switch/Switch.props';\nimport { useSwitchState } from '../Form/Switch/Switch/Switch.state';\nimport SwitchView from '../Form/Switch/Switch/Switch.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst SwitchComponent: React.FC<SwitchProps> = (props) => {\n const formProps = useFormikInput(props);\n const switchStates = useSwitchState(props);\n return <SwitchView {...switchStates} {...formProps} />;\n};\n\nexport const FormikSwitch = SwitchComponent;\n","import React from 'react';\n\nimport { TextAreaProps } from '../Form/TextArea/TextArea/TextArea.props';\nimport { useTextAreaState } from '../Form/TextArea/TextArea/TextArea.state';\nimport TextAreaView from '../Form/TextArea/TextArea/TextArea.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst TextAreaComponent: React.FC<TextAreaProps> = (props) => {\n const formProps = useFormikInput(props);\n const textAreaState = useTextAreaState(props);\n return <TextAreaView {...textAreaState} {...formProps} />;\n};\n\n/**\n * Text Area is an component used to create a multi-line input field.\n */\nexport const FormikTextArea = TextAreaComponent;\n","import React from 'react';\n\nimport { TextFieldProps } from '../Form/TextField/TextField/TextField.props';\nimport { useTextFieldState } from '../Form/TextField/TextField/TextField.state';\nimport TextFieldView from '../Form/TextField/TextField/TextField.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst TextFieldComponent: React.FC<TextFieldProps> = (\n props: TextFieldProps\n) => {\n const formProps = useFormikInput(props);\n const { value, ...textFieldStates } = useTextFieldState(props);\n\n return <TextFieldView {...textFieldStates} {...formProps} />;\n};\n/**\n * TextField is used to capture text data from users.\n */\nexport const FormikTextField = TextFieldComponent;\n","import React from 'react';\nimport { hideMessage, useMessageStore } from './Message.store';\nimport { View } from 'app-studio';\nimport { MessageView } from './Message.view';\nimport { MessageLayoutProps } from './Message.props';\n\nexport const MessageLayout = ({\n container,\n theme,\n position = 'topRight',\n}: MessageLayoutProps) => {\n const {\n visible,\n title,\n variant,\n subtitle,\n isClosable,\n views,\n action,\n actionText,\n showIcon,\n timeout,\n } = useMessageStore();\n\n const toastPosition = {\n topLeft: {\n top: 6,\n left: 8,\n },\n topRight: {\n top: 6,\n right: 8,\n },\n bottomLeft: {\n bottom: 8,\n left: 6,\n },\n bottomRight: {\n bottom: 8,\n right: 6,\n },\n }[position];\n\n // Crée une fonction pour construire le contenu du message\n const renderMessageContent = () => (\n <MessageView\n variant={variant}\n subtitle={subtitle}\n show={visible}\n title={title}\n theme={theme}\n isClosable={isClosable}\n views={views}\n action={action}\n actionText={actionText}\n showIcon={showIcon}\n timeout={timeout}\n hide={() => hideMessage()}\n />\n );\n\n const MessageContainer = container ? (\n React.cloneElement(container, {}, renderMessageContent())\n ) : (\n <View position={'absolute'} zIndex={10000} {...toastPosition}>\n {renderMessageContent()}\n </View>\n );\n\n return visible ? MessageContainer : null;\n};\n","import React from 'react';\nimport { OTPInputProps } from './OTPInput/OTPInput.props';\nimport { useOTPInputState } from './OTPInput/OTPInput.state';\nimport OTPInputView from './OTPInput/OTPInput.view';\n\n/**\n * OTPInput component for entering one-time passwords or verification codes.\n * Provides multiple input fields for entering digits with auto-focus functionality.\n * Supports step-based input and improved accessibility.\n */\nconst OTPInputComponent: React.FC<OTPInputProps> = (props: OTPInputProps) => {\n // Extract the controlled value from props if it exists\n const { value: controlledValue } = props;\n\n const {\n value,\n setValue,\n isFocused,\n setIsFocused,\n isHovered,\n setIsHovered,\n inputRef,\n containerRef,\n mirrorSelectionStart,\n mirrorSelectionEnd,\n setMirrorSelectionStart,\n setMirrorSelectionEnd,\n setInputRef,\n handleChange,\n handleFocus,\n handleBlur,\n handleKeyDown,\n handlePaste,\n handleKeyPress,\n } = useOTPInputState(props);\n\n // Use the controlled value if it exists, otherwise use the internal state value\n const displayValue = controlledValue !== undefined ? controlledValue : value;\n\n return (\n <OTPInputView\n {...props}\n value={displayValue}\n setValue={setValue}\n isFocused={isFocused}\n setIsFocused={setIsFocused}\n isHovered={isHovered}\n setIsHovered={setIsHovered}\n inputRef={inputRef}\n containerRef={containerRef}\n mirrorSelectionStart={mirrorSelectionStart}\n mirrorSelectionEnd={mirrorSelectionEnd}\n setMirrorSelectionStart={setMirrorSelectionStart}\n setMirrorSelectionEnd={setMirrorSelectionEnd}\n setInputRef={setInputRef}\n handleChange={handleChange}\n handleFocus={handleFocus}\n handleBlur={handleBlur}\n handleKeyDown={handleKeyDown}\n handleKeyPress={handleKeyPress}\n handlePaste={handlePaste}\n stepValues={props.stepValues}\n />\n );\n};\n\nexport const OTPInput = OTPInputComponent;\n","import React from 'react';\nimport { PaginationProps } from './Pagination/Pagination.props';\nimport { usePaginationState } from './Pagination/Pagination.state';\nimport { PaginationView } from './Pagination/Pagination.view';\n\n/**\n * Pagination component for navigating through pages of content.\n */\nconst PaginationComponent: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n pageSize = 10,\n pageSizeOptions,\n onPageSizeChange,\n showPageSizeSelector = false,\n showPageInfo = true,\n maxPageButtons = 5,\n showFirstLastButtons = false,\n size = 'md',\n variant = 'default',\n shape = 'rounded',\n views,\n ...props\n}) => {\n const { visiblePageNumbers } = usePaginationState(\n currentPage,\n totalPages,\n maxPageButtons\n );\n\n return (\n <PaginationView\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={onPageChange}\n pageSize={pageSize}\n pageSizeOptions={pageSizeOptions}\n onPageSizeChange={onPageSizeChange}\n showPageSizeSelector={showPageSizeSelector}\n showPageInfo={showPageInfo}\n maxPageButtons={maxPageButtons}\n showFirstLastButtons={showFirstLastButtons}\n size={size}\n variant={variant}\n shape={shape}\n visiblePageNumbers={visiblePageNumbers}\n views={views}\n {...props}\n />\n );\n};\n\nexport const Pagination = PaginationComponent;\n","import { useState, useEffect } from 'react';\n\nexport const usePaginationState = (\n currentPage: number,\n totalPages: number,\n maxPageButtons: number\n) => {\n const [visiblePageNumbers, setVisiblePageNumbers] = useState<\n (number | string)[]\n >([]);\n\n useEffect(() => {\n // Calculate visible page numbers based on current page and max buttons\n const calculateVisiblePageNumbers = () => {\n const pageNumbers: (number | string)[] = [];\n\n if (totalPages <= maxPageButtons) {\n // If total pages is less than or equal to max buttons, show all pages\n for (let i = 1; i <= totalPages; i++) {\n pageNumbers.push(i);\n }\n } else {\n // Always include first page\n pageNumbers.push(1);\n\n // Calculate start and end of visible page range\n let startPage = Math.max(\n 2,\n currentPage - Math.floor((maxPageButtons - 2) / 2)\n );\n let endPage = Math.min(totalPages - 1, startPage + maxPageButtons - 3);\n\n // Adjust if we're near the end\n if (endPage >= totalPages - 1) {\n endPage = totalPages - 1;\n startPage = Math.max(2, endPage - (maxPageButtons - 3));\n }\n\n // Add ellipsis if needed before the range\n if (startPage > 2) {\n pageNumbers.push('...');\n }\n\n // Add the range of pages\n for (let i = startPage; i <= endPage; i++) {\n pageNumbers.push(i);\n }\n\n // Add ellipsis if needed after the range\n if (endPage < totalPages - 1) {\n pageNumbers.push('...');\n }\n\n // Always include last page\n pageNumbers.push(totalPages);\n }\n\n return pageNumbers;\n };\n\n setVisiblePageNumbers(calculateVisiblePageNumbers());\n }, [currentPage, totalPages, maxPageButtons]);\n\n return {\n visiblePageNumbers,\n };\n};\n","import React from 'react';\n\nimport { PasswordProps } from './Password/Password.props';\nimport { usePasswordState } from './Password/Password.state';\nimport { View } from 'app-studio';\nimport { CloseEyeIcon, OpenEyeIcon } from '../../Icon/Icon';\nimport TextFieldView from '../TextField/TextField/TextField.view';\n\nconst PasswordComponent: React.FC<PasswordProps> = ({\n visibleIcon = <OpenEyeIcon widthHeight={14} />,\n hiddenIcon = <CloseEyeIcon widthHeight={14} />,\n ...props\n}) => {\n const { isVisible, setIsVisible, ...passwordProps } = usePasswordState(props);\n\n return (\n <TextFieldView\n {...passwordProps}\n type={isVisible ? 'text' : 'password'}\n isClearable={false}\n right={\n <View\n onClick={() => {\n if (!props.isDisabled) {\n setIsVisible(!isVisible);\n }\n }}\n >\n {isVisible ? visibleIcon : hiddenIcon}\n </View>\n }\n />\n );\n};\n\n/**\n * To allow users to securely enter sensitive information\n */\nexport const Password = PasswordComponent;\n","import React from 'react';\nimport { SelectProps } from './Select/Select.props';\nimport { useSelectState } from './Select/Select.state';\nimport SelectView from './Select/Select.view';\n// Defines a functional component named 'SelectComponent', which is expected to receive 'SelectProps' as properties.\nconst SelectComponent: React.FC<SelectProps> = (props) => {\n // Invokes the 'useSelectState' hook with props to obtain stateful logic for the Select component.\n const selectStates = useSelectState(props);\n // Renders the 'SelectView' component, passing along any states controlled by 'useSelectState' and all properties passed to 'SelectComponent'.\n return <SelectView {...selectStates} {...props} />;\n};\n// Exports 'SelectComponent' as 'Select', making it available for import in other parts of the application.\nexport const Select = SelectComponent;\n","import React from 'react';\nimport { SliderProps } from './Slider/Slider.props';\nimport { useSliderState } from './Slider/Slider.state';\nimport { SliderView } from './Slider/Slider.view';\n\nconst SliderComponent: React.FC<SliderProps> = (props) => {\n // Get state and handlers from the custom hook\n const sliderState = useSliderState(props);\n\n // Render the view component, passing down props and state\n return <SliderView {...props} {...sliderState} />;\n};\n\n/**\n * Slider allows users to select a value from a range by moving a handle.\n */\nexport const Slider = SliderComponent;\n","import React from 'react';\nimport { SwitchProps } from './Switch/Switch.props';\nimport { useSwitchState } from './Switch/Switch.state';\nimport SwitchView from './Switch/Switch.view';\n// Defines the SwitchComponent as a functional component that takes SwitchProps as props.\nconst SwitchComponent: React.FC<SwitchProps> = (props) => {\n // Invokes useSwitchState hook to obtain state for this component, passing props to it.\n const switchStates = useSwitchState(props);\n // Renders the SwitchView component, spreading the switchStates and props to pass all necessary data.\n return <SwitchView {...switchStates} {...props} />;\n};\n// Exports the SwitchComponent as 'Switch' for use in other parts of the application.\nexport const Switch = SwitchComponent;\n","import React from 'react';\nimport { TextAreaProps } from './TextArea/TextArea.props';\nimport { useTextAreaState } from './TextArea/TextArea.state';\nimport TextAreaView from './TextArea/TextArea.view';\n// Defines the TextAreaComponent as a functional component that accepts TextAreaProps for type safety and structure.\nconst TextAreaComponent: React.FC<TextAreaProps> = (props) => {\n // Creates a state for the TextAreaComponent using custom hook useTextAreaState which initializes the state with props.\n const textAreaState = useTextAreaState(props);\n // Renders the TextAreaView component, passing along the state and any received props.\n return <TextAreaView {...textAreaState} {...props} />;\n};\n// Exports the TextAreaComponent as TextArea for use in other parts of the application.\nexport const TextArea = TextAreaComponent;\n","import React from 'react';\nimport { TextFieldProps } from './TextField/TextField.props';\nimport { useTextFieldState } from './TextField/TextField.state';\nimport TextFieldView from './TextField/TextField.view';\nconst TextFieldComponent: React.FC<TextFieldProps> = (\n props: TextFieldProps\n) => {\n // Initializes the 'textFieldStates' with state-management logic and relevant properties from 'useTextFieldState' hook, passing current 'props' as the argument\n const textFieldStates = useTextFieldState(props);\n // Renders the 'TextFieldView' component with the spread attributes from both 'textFieldStates' and 'props' to pass all necessary data\n return <TextFieldView {...textFieldStates} {...props} />;\n};\n// Exports 'TextFieldComponent' as 'TextField' for use in other parts of the application\nexport const TextField = TextFieldComponent;\n","import React from 'react';\nimport { ToggleGroupProps } from './ToggleGroup/ToggleGroup.props';\nimport { useToggleGroupState } from './ToggleGroup/ToggleGroup.state';\nimport { ToggleGroupView } from './ToggleGroup/ToggleGroup.view';\n// Define the functional component with destructured props\nconst ToggleGroupComponent = ({\n // Destructure 'items' prop which represents the group items to toggle\n items,\n // Destructure 'shape' prop to define the shape of the toggle buttons\n shape,\n\n // Destructure 'variant' prop to determine the visual style of the toggle group\n variant,\n // Destructure 'onToggleChange' prop for the callback when toggle state changes\n onToggleChange,\n}: ToggleGroupProps) => {\n // Hook to manage toggle group state, returns active toggles and a setter for it\n const { activeToggles, setActiveToggles } = useToggleGroupState();\n return (\n <ToggleGroupView\n items={items}\n shape={shape}\n variant={variant}\n activeToggles={activeToggles}\n setActiveToggles={setActiveToggles}\n onToggleChange={onToggleChange}\n />\n );\n};\n// Expose the ToggleGroupComponent for import into other modules\nexport const ToggleGroup = ToggleGroupComponent;\n","import { useState } from 'react';\n// Define a custom hook for managing ToggleGroup state\nexport const useToggleGroupState = () => {\n const [activeToggles, setActiveToggles] = useState<string[]>([]);\n return { activeToggles, setActiveToggles };\n};\n","import React from 'react';\nimport { UploadProps } from './Uploader/Uploader.props';\nimport { useUpload } from './Uploader/Uploader.state';\nimport { UploadView } from './Uploader/Uploader.view';\n\nexport const Uploader: React.FC<UploadProps> = ({\n accept = '*/*',\n icon,\n text,\n maxSize,\n onFileSelect,\n validateFile,\n isLoading = false,\n progress = 0,\n fileType,\n ...props\n}: UploadProps) => {\n const {\n previewUrl,\n thumbnailUrl,\n errorMessage,\n videoRef,\n fileInputRef,\n selectedFile,\n handleFileChange,\n handleClick,\n } = useUpload({ accept, maxSize, onFileSelect, validateFile });\n\n // Determine file type based on the selected file's MIME type if not explicitly provided\n const determineFileType = () => {\n if (fileType) return fileType;\n\n if (!selectedFile) return undefined;\n\n if (selectedFile.type.startsWith('image/')) {\n return 'image';\n } else if (selectedFile.type.startsWith('video/')) {\n return 'video';\n } else {\n return 'file';\n }\n };\n\n const detectedFileType = determineFileType();\n\n return (\n <UploadView\n handleClick={handleClick}\n accept={accept}\n isLoading={isLoading}\n progress={progress}\n icon={icon}\n text={text}\n maxSize={maxSize}\n onFileSelect={onFileSelect}\n validateFile={validateFile}\n errorMessage={errorMessage}\n handleFileChange={handleFileChange}\n selectedFile={selectedFile}\n videoRef={videoRef}\n fileInputRef={fileInputRef}\n previewUrl={previewUrl}\n thumbnailUrl={thumbnailUrl}\n fileType={detectedFileType}\n {...props}\n />\n );\n};\n","import React, { useCallback, useRef, useState, useEffect } from 'react';\nimport { UseUploadProps } from '../Uploader/Uploader.props';\nimport { showMessage } from '../../Message/Message';\n\nexport const generateThumbnail = (\n videoFile: File,\n setThumbnailUrl: (url: string) => void\n) => {\n const video = document.createElement('video');\n video.preload = 'metadata';\n\n video.onloadedmetadata = () => {\n video.currentTime = 1;\n };\n\n video.oncanplay = () => {\n const canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n const thumbnailDataUrl = canvas.toDataURL('image/jpeg');\n setThumbnailUrl(thumbnailDataUrl);\n }\n\n URL.revokeObjectURL(video.src);\n };\n\n video.src = URL.createObjectURL(videoFile);\n};\n\nexport const useUpload = ({\n maxSize = 100 * 1024 * 1024, // 100MB default\n onFileSelect,\n validateFile,\n thumbnail,\n onError = (error: string) => {\n showMessage('error', 'Error', error);\n },\n}: UseUploadProps) => {\n const fileInputRef = useRef<HTMLInputElement>(null);\n const videoRef = useRef<HTMLVideoElement>(null);\n const [selectedFile, setSelectedFile] = useState<File | null>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [previewUrl, setPreviewUrl] = useState<string | null>(null);\n const [thumbnailUrl, setThumbnailUrl] = useState<string | null>(\n thumbnail || null\n );\n\n const handleFileChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n setErrorMessage(null);\n\n if (!file) {\n onError('No file selected');\n setErrorMessage('No file selected');\n return;\n }\n\n if (file.size > maxSize) {\n onError(`File exceeds ${Math.round(maxSize / (1024 * 1024))}MB.`);\n setErrorMessage(\n `File exceeds ${Math.round(maxSize / (1024 * 1024))}MB.`\n );\n return;\n }\n\n if (validateFile) {\n const validationError = validateFile(file);\n if (validationError) {\n onError(validationError);\n setErrorMessage(validationError);\n return;\n }\n }\n\n setPreviewUrl(URL.createObjectURL(file));\n\n if (file.type.startsWith('video/')) {\n generateThumbnail(file, setThumbnailUrl);\n }\n\n if (onFileSelect) {\n setSelectedFile(file);\n onFileSelect(file);\n }\n },\n [maxSize, onFileSelect, validateFile]\n );\n\n const handleClick = () => fileInputRef.current?.click();\n\n useEffect(() => {\n return () => {\n if (previewUrl) URL.revokeObjectURL(previewUrl);\n if (thumbnailUrl) URL.revokeObjectURL(thumbnailUrl);\n };\n }, [previewUrl, thumbnailUrl]);\n\n return {\n previewUrl,\n thumbnailUrl,\n errorMessage,\n fileInputRef,\n videoRef,\n selectedFile,\n handleFileChange,\n handleClick,\n };\n};\n","import { ToastOptions, ToastVariant } from './Toast.type';\nimport {\n showToast,\n showInfoToast,\n showSuccessToast,\n showWarningToast,\n showErrorToast,\n removeToast,\n removeAllToasts,\n} from './Toast.store';\n\n/**\n * Hook for using Toast functionality within components\n * @returns Object with methods to show and manage toasts\n */\nexport const useToast = () => {\n return {\n /**\n * Show a toast with the specified variant\n */\n toast: (\n variant: ToastVariant,\n title: string,\n description?: string,\n options?: ToastOptions\n ) => showToast(variant, title, description, options),\n\n /**\n * Show an info toast\n */\n info: (title: string, description?: string, options?: ToastOptions) =>\n showInfoToast(title, description, options),\n\n /**\n * Show a success toast\n */\n success: (title: string, description?: string, options?: ToastOptions) =>\n showSuccessToast(title, description, options),\n\n /**\n * Show a warning toast\n */\n warning: (title: string, description?: string, options?: ToastOptions) =>\n showWarningToast(title, description, options),\n\n /**\n * Show an error toast\n */\n error: (title: string, description?: string, options?: ToastOptions) =>\n showErrorToast(title, description, options),\n\n /**\n * Remove a specific toast by ID\n */\n remove: (id: string) => removeToast(id),\n\n /**\n * Remove all toasts\n */\n removeAll: () => removeAllToasts(),\n };\n};\n"],"names":["generateId","prefix","Math","random","toString","substring","AccordionShapes","sharp","borderRadius","rounded","AccordionVariants","default","backgroundColor","borderWidth","outline","borderStyle","borderColor","filled","AccordionContext","createContext","expandedItems","toggleItem","isItemExpanded","type","collapsible","baseId","AccordionProvider","_ref","children","value","React","Provider","useAccordionContext","context","useContext","Error","AccordionView","_ref5","shape","variant","views","props","_objectWithoutPropertiesLoose","_excluded4","Vertical","width","container","Accordion","defaultValue","onValueChange","_excluded","legacyDefaultValue","Array","isArray","undefined","accordionState","controlledValue","isControlled","initialValue","internalValue","setInternalValue","useState","useMemo","selectedValue","useEffect","console","warn","length","String","useCallback","itemValue","newValue","currentValues","includes","filter","v","useAccordionState","Item","_ref2","isDisabled","isExpanded","triggerId","contentId","View","marginBottom","overflow","opacity","pointerEvents","item","Children","map","child","isValidElement","cloneElement","Object","assign","Trigger","_ref3","asChild","_excluded2","triggerProps","id","aria-expanded","aria-controls","aria-disabled","data-state","data-disabled","onClick","handleClick","padding","cursor","alignItems","justifyContent","only","Horizontal","height","display","transition","transform","icon","viewBox","fill","xmlns","d","Content","_ref4","_excluded3","role","maxHeight","HeadingSizes","h1","fontSize","lineHeight","fontWeight","letterSpacing","h2","h3","h4","h5","h6","FontSizes","xs","sm","md","lg","xl","LineHeights","FontWeights","hairline","thin","light","normal","medium","semiBold","bold","extraBold","black","TextContent","isSub","isSup","as","position","bottom","sup","top","TruncateText","text","maxLines","rest","containerRef","useRef","truncatedText","setTruncatedText","isTruncated","setIsTruncated","node","current","style","innerText","singleLine","offsetHeight","cs","getComputedStyle","parseFloat","limit","restore","lo","hi","fit","mid","floor","slice","finalText","trimEnd","n","ref","truncateText","title","TextView","heading","isItalic","isUnderlined","isStriked","weight","size","Element","fontStyle","textDecoration","Text","IconWrapper","widthHeight","color","orientation","Center","getSvgProps","strokeWidth","getColor","useTheme","stroke","strokeLinecap","strokeLinejoin","UserIcon","focusable","HelpIcon","ChevronIcon","DragHandleIcon","_excluded5","cx","cy","r","FileIcon","_ref6","_excluded6","points","VideoIcon","_ref7","_excluded7","x","y","rx","ry","ImageIcon","_ref8","_excluded8","TwitterIcon","_ref9","_excluded9","XIcon","_ref10","_excluded10","TwitchIcon","_ref11","_excluded11","CloseIcon","_ref12","_excluded12","x1","y1","x2","y2","InstagramIcon","_ref13","_excluded13","YoutubeIcon","_ref14","_excluded14","FacebookIcon","_ref15","_excluded15","LinkedinIcon","_ref16","_excluded16","ThreadsIcon","_ref17","_excluded17","MinusIcon","_ref18","_excluded18","InfoIcon","_ref19","_excluded19","PlayIcon","_ref20","_excluded20","PauseIcon","_ref21","_excluded21","HeartIcon","_ref22","_excluded22","StarIcon","_ref23","_excluded23","SaveIcon","_ref24","_excluded24","WarningIcon","_ref25","_excluded25","BatteryIcon","_ref26","_excluded26","BookmarkIcon","_ref27","_excluded27","CloudIcon","_ref28","_excluded28","CopyIcon","_ref29","_excluded29","DustBinIcon","_ref30","_excluded30","DeleteIcon","EditIcon","_ref31","_excluded31","ErrorIcon","_ref32","_excluded32","DownloadIcon","_ref33","_excluded33","MenuIcon","_ref34","_excluded34","ShareIcon","_ref35","_excluded35","RefreshIcon","_ref36","_excluded36","PrintIcon","_ref37","_excluded37","MagicWandIcon","_ref38","_excluded38","SliderVerticalIcon","_ref39","_excluded39","PanelIcon","_ref40","_excluded40","FilterIcon","_ref41","_excluded41","HomeIcon","_ref42","_excluded42","LocationIcon","_ref43","_excluded43","LockIcon","_ref44","_excluded44","MicrophoneIcon","_ref45","_excluded45","MoonIcon","_ref46","_excluded46","NotificationIcon","_ref47","_excluded47","OpenEyeIcon","_ref48","_excluded48","ProfileIcon","_ref49","_excluded49","SettingsIcon","_ref50","_excluded50","SuccessIcon","_ref51","_excluded51","UnLikeIcon","_ref52","_excluded52","ClockIcon","_ref53","_excluded53","CameraIcon","_ref54","_excluded54","BluetoothIcon","_ref55","_excluded55","LikeIcon","_ref56","_excluded56","UnlockIcon","_ref57","_excluded57","WifiIcon","_ref58","_excluded58","UploadIcon","_ref59","_excluded59","SearchIcon","_ref60","_excluded60","CloseEyeIcon","_ref61","_excluded61","ExternalLinkIcon","_ref62","_excluded62","PlusIcon","_ref63","_excluded63","TickIcon","_ref64","_excluded64","BoldArrowIcon","_ref65","_excluded65","ArrowIcon","_ref66","_excluded66","SpinnerIcon","_ref67","_excluded67","strokeOpacity","CalendarIcon","_ref68","_excluded68","SliderIcon","_ref69","_excluded69","CropIcon","_ref70","_excluded70","ZoomInIcon","_ref71","_excluded71","ZoomOutIcon","_ref72","_excluded72","TextIcon","_ref73","_excluded73","ShapeIcon","_ref74","_excluded74","RotateIcon","_ref75","_excluded75","DocumentIcon","_ref76","_excluded76","ChartIcon","_ref77","_excluded77","AlertView","description","themes","boxShadow","content","info","success","error","warning","gap","flexWrap","alignSelf","marginTop","getIcon","iconProps","_views$icon$color","_views$icon","AspectRatioView","ratio","paddingTop","center","right","left","view","AvatarSizeMap","DefaultAvatarStyles","objectFit","AvatarView","src","fallback","imageError","setImageError","avatarSize","imageStyle","image","Image","alt","onError","BadgeSizes","minWidth","BadgeShapes","pillShaped","PositionStyles","top-right","top-left","bottom-right","bottom-left","BadgeView","combinedStyles","link","textUnderlineOffset","ghost","textAlign","IconSizes","LinkView","to","iconSize","underline","isHovered","isExternal","setIsHovered","handleHover","ReactRouterLink","target","onMouseEnter","onMouseLeave","Link","linkStates","useLinkState","DefaultSizes","DefaultSpeeds","fast","slow","DefaultSpinner","speed","themeMode","elementMode","colorStyle","sizeStyle","angle","setAngle","intervalId","setInterval","prevAngle","clearInterval","Dotted","Quarter","strokeDasharray","LoaderView","textColor","loaderColor","textPosition","variants","dotted","quarter","flexDirection","Loader","ButtonSizes","minHeight","paddingBottom","paddingLeft","paddingRight","ButtonShapes","ButtonView","iconPosition","loaderPosition","isLoading","isIconRounded","shadow","mainColorKey","mainTone","tone","contrast","base","getButtonVariants","isLight","_hover","textDecorationThickness","_active","Wrapper","sizeStyles","iconPad","loader","disabled","Boolean","textDecorationColor","Button","useButtonState","CardShapes","CardContext","useCardContext","CardHeader","styles","contextStyles","defaultStyles","borderBottomWidth","borderBottomStyle","borderBottomColor","mergedProps","header","_contextStyles$header","CardContent","_contextStyles$conten","CardFooter","borderTopWidth","borderTopStyle","borderTopColor","footer","_contextStyles$footer","CardView","isFullWidth","contextValue","hasExplicitStructure","toArray","some","mergedRootProps","border","outlined","elevated","_contextValue$styles$","Card","Header","Footer","IndicatorStyles","dot","margin","line","number","ActiveIndicatorStyles","NavigationButtonStyles","zIndex","getDefaultCarouselStyles","innerContainer","transitionProperty","transitionDuration","transitionTimingFunction","flex","prevButton","nextButton","CarouselContext","useCarouselContext","CarouselSlide","isActive","flexShrink","CarouselPreviousComponent","goToPrevious","canGoPrevious","globalStyles","mergedStyles","CarouselNextComponent","goToNext","canGoNext","CarouselItemComponent","registerSlide","unregisterSlide","slideIdRef","CarouselContentComponent","currentIndex","mergedContentStyles","mergedInnerStyles","translateX","CarouselView","defaultActiveIndex","activeIndex","controlledActiveIndex","onChange","showNavigation","navigationPosition","showIndicators","indicatorPosition","indicatorVariant","autoPlay","autoPlayInterval","pauseOnHover","infinite","direction","slides","carouselState","totalSlides","initialTotalSlides","stepIndices","slideCountRef","setTotalSlides","slideRegistry","Set","nextSlideId","setActiveIndex","isDragging","setIsDragging","dragStartX","setDragStartX","dragStartY","setDragStartY","autoPlayTimerRef","goToSlide","index","newIndex","max","min","closestIndex","reduce","prev","curr","abs","nextSlide","prevSlide","handleMouseEnter","handleMouseLeave","handleDragStart","e","touches","clientX","clientY","handleDragMove","currentX","currentY","diffX","diffY","handleDragEnd","add","newCount","delete","useCarouselState","onTouchStart","onTouchMove","onTouchEnd","onMouseDown","onMouseMove","onMouseUp","slideWrapper","slide","key","renderNavigation","prevButtonElement","nextButtonElement","indicators","_","indicator","activeIndicator","Carousel","Slide","Previous","Next","DEFAULT_COLORS","ChartContainerStyles","ChartTitleStyles","ChartLegendStyles","LegendItemStyles","marginRight","LegendColorStyles","LegendTextStyles","TooltipStyles","GridStyles","AxisStyles","AxisLabelStyles","BarStyles","LineStyles","PointStyles","PieSliceStyles","OverlayBaseStyles","LoadingOverlayStyles","ErrorOverlayStyles","NoDataOverlayStyles","BarChart","data","animationProgress","showGrid","onBarClick","showTooltip","hideTooltip","chartWidth","chartHeight","maxValue","series","forEach","seriesCount","groupWidth","labels","barWidth","barSpacing","yAxisTicks","ticks","i","push","axis","label","textAnchor","axisLabel","tick","Fragment","dominantBaseline","toFixed","grid","seriesIndex","dataIndex","barHeight","name","bar","LineChart","onPointClick","generatePath","join","generateAreaPath","endX","baseY","area","point","PieChart","dataPoints","isDonut","onSliceClick","radius","centerX","centerY","donutRadius","total","sum","slices","result","startAngle","PI","path","percentage","endAngle","startX","cos","startY","sin","endY","innerStartX","innerStartY","innerEndX","innerEndY","largeArcFlag","labelAngle","labelRadius","labelX","labelY","percentageText","resolvedColor","pie","ChartView","showLegend","legendPosition","showTooltips","animated","animationDuration","responsive","aspectRatio","propWidth","propHeight","onDataPointClick","onSeriesClick","noData","loadingIndicator","errorIndicator","noDataIndicator","aria-label","ariaLabel","tooltip","processedData","showTooltipState","hideTooltipState","getChartDimensions","setAnimationProgress","setTooltip","visible","animationRef","startTime","Date","now","animate","elapsed","progress","requestAnimationFrame","cancelAnimationFrame","getBoundingClientRect","useChartState","chartData","containerWidth","containerHeight","renderLegend","items","legend","legendItem","showChartContent","chart","renderChart","loadingOverlay","errorOverlay","noDataOverlay","ContextMenuSizes","ContextMenuVariants","ContextMenuItemStates","hover","active","ContextMenuContext","isOpen","setIsOpen","setPosition","activeSubmenuId","setActiveSubmenuId","triggerRef","contentRef","closeMenu","openMenu","ContextMenuProvider","useContextMenuContext","ContextMenuTrigger","disableNativeContextMenu","onContextMenu","preventDefault","aria-haspopup","ContextMenuContent","side","align","contextPosition","menuRef","menuPosition","setMenuPosition","windowWidth","window","innerWidth","windowHeight","innerHeight","pos","calculatedPosition","menuWidth","menuHeight","posX","posY","calculateMenuPosition","offsetWidth","tabIndex","transformOrigin","menu","divider","ContextMenuDivider","ContextMenuItem","onSelect","hasSubmenu","isSubmenuActive","itemRef","submenuPosition","setSubmenuPosition","rect","flexGrow","marginLeft","submenuIndicator","event","ContextMenuView","ContextMenu","onOpenChange","state","handleClickOutside","contains","handleResize","handleKeyDown","document","addEventListener","removeEventListener","useContextMenuState","Divider","Separator","separator","useSelectState","placeholder","isMulti","options","hide","setHide","isFocused","setIsFocused","setValue","highlightedIndex","setHighlightedIndex","HelperText","helperText","marginVertical","marginHorizontal","FieldContainer","Shapes","LabelSizes","InputVariants","_focus","none","PadddingWithLabel","PaddingWithoutLabel","FieldContent","showLabel","isReadOnly","pickerBox","Typography","fontSizes","FieldIcons","LabelView","fontWeights","Label","FieldLabel","whiteSpace","FieldWrapper","maxWidth","option","callback","paddingVertical","paddingHorizontal","listStyleType","handleOptionClick","SelectBox","field","removeOption","fieldStyles","find","MultiSelect","HiddenSelect","readOnly","multiple","DropDown","itemStates","useItemState","handleCallback","overflowY","scrollbarWidth","scrollbarColor","&::-webkit-scrollbar","&::-webkit-scrollbar-track","background","&::-webkit-scrollbar-thumb","dropDown","stopPropagation","SelectView","selectBox","htmlFor","onFocus","handleFocus","valueOption","useSwitchState","isChecked","on","setOn","KnobSizes","SliderSizes","SliderPadding","SwitchContent","Input","SwitchView","inActiveChild","activeChild","labelPosition","slider","circle","switchStyle","checked","useTextAreaState","hint","setHint","TextAreaView","isEditable","isAutoFocus","isMultiline","maxRows","maxCols","onBlur","resize","focus","warper","rows","cols","autoFocus","editable","multiline","textarea","useTextFieldState","TextFieldInput","TextFieldView","onChangeText","isClearable","IconColor","autoComplete","handleClear","useCheckboxState","defaultIsSelected","isSelected","setIsSelected","Sizes","VariantStyles","selected","unselected","indeterminate","StateStyles","CheckboxView","isIndeterminate","checkbox","infoText","stateStyle","checkboxStyle","handleChange","useCountryPickerState","newOptions","setNewOptions","countryList","CountryList","CountrySelector","CountryItem","DropDownItem","code","CountryPickerView","heigth","valueCountry","filteredCountries","country","toLowerCase","startsWith","useDatePickerState","date","setDate","format","DatePickerContent","DatePickerView","handleDateChange","usePasswordState","textFieldStates","isVisible","setIsVisible","useComboBoxState","searchPlaceholder","filteredItems","setFilteredItems","selectedItem","setSelectedItem","searchQuery","setSearchQuery","isDropdownVisible","setIsDropdownVisible","ComboBoxView","showTick","searchEnabled","composedPath","element","labelContainer","dropdown","TextField","query","filtered","handleSearch","borderBottom","handleSelect","useOTPInputState","onComplete","onKeyDown","onKeyPress","pattern","stepValues","pasteTransformer","mirrorSelectionStart","setMirrorSelectionStart","mirrorSelectionEnd","setMirrorSelectionEnd","inputRef","initialLoadRef","isIOS","_window","CSS","supports","inputMetadataRef","regexp","RegExp","valueToSet","numValue","parseInt","isNaN","closest","minDiff","diff","setInputRef","defineProperty","writable","currentTarget","test","_inputRef$current","start","end","setSelectionRange","handleBlur","handleKeyPress","handlePaste","input","clipboardData","_content","getData","selectionStart","selectionEnd","_start","_end","selectionDirection","onDocumentSelectionChange","capture","activeElement","updateRootHeight","setProperty","clientHeight","resizeObserver","ResizeObserver","observe","disconnect","_s","_input$selectionStart","_e","_input$selectionEnd","_dir","_input$selectionDirec","_ml","_input$maxLength","maxLength","_val","_input$value","_prev","offset","s","dir","cb","_inputRef$current2","dispatchEvent","Event","_inputRef$current3","_inputRef$current4","_inputRef$current5","setTimeout","OTPInputContext","slots","isHovering","safeInsertRule","sheet","rule","insertRule","_unused","OTPInputView","from","slotIdx","char","placeholderChar","_placeholder$slotIdx","hasFakeCaret","getElementById","styleEl","createElement","head","appendChild","autofillStyles","userSelect","slot","animation","animationName","animationIterationCount","animationTimingFunction","inset","inputMode","onPaste","onMouseOver","caretColor","fontFamily","fontVariantNumeric","FocusContext","focusNextInput","handleSubmitEditing","getReturnKeyType","useFormikInput","touched","errors","submitCount","values","setFieldTouched","setFieldValue","useFormikContext","isText","getIn","autoCorrect","autoCapitalize","secureTextEntry","getInputTypeProps","clamp","useSliderState","step","onDrag","trackRef","thumbRef","currentValue","updateValue","clampedValue","handleInteraction","trackRect","calculateValue","range","rawValue","closestValue","minDistance","distance","steppedValue","round","handleMouseDown","handleMouseMove","moveEvent","handleMouseUp","handleTrackMouseDown","handleThumbMouseDown","thumbPositionPercent","ThumbSizes","SliderShapes","SliderVariants","getSlider","EnhancedSliderSizes","trackCrossAxisSize","thumbSize","OrientationStyles","horizontal","vertical","SliderView","showValue","track","filledTrack","thumb","valueLabel","stepMarks","themeColor","disabledColor","trackColor","isVertical","legacyView","stepValue","_views$tooltip","enhancedView","stepPercentage","_views$tooltip2","useMessageStore","create","set","subtitle","isClosable","action","actionText","showIcon","timeout","show","showMessage","getState","hideMessage","Themes","close","MessageView","theme","timeId","clearTimeout","Theme","showAction","containerStyle","iconColor","iconComponent","isShowIcon","_views$closingIcon","closingIcon","_views$closingIcon2","UploadView","accept","previewUrl","thumbnailUrl","errorMessage","fileInputRef","videoRef","selectedFile","handleFileChange","containerProps","errorMessageProps","progressProps","videoProps","imageProps","textProps","fileType","externalPreviewUrl","renderError","renderText","renderFile","renderVideo","URL","createObjectURL","renderImage","log","renderProgress","finalPreviewUrl","useModalStore","modals","onHide","onShow","modalProps","overlayProps","modal","setOnHide","setOnShow","hideModal","ContainerShapes","OverlayAlignments","HeaderIconSizes","ModalOverlay","blur","isClosePrevented","onClose","visibility","backdropFilter","Modal","Overlay","Container","isFullScreen","defaultShadow","elevation","shadowColor","shadowOffset","shadowOpacity","shadowRadius","buttonColor","buttonPosition","buttonIcon","Body","Layout","availableModals","activeModals","ModalComponent","NavigationMenuSizes","NavigationMenuVariants","NavigationMenuOrientations","NavigationMenuItemStates","borderLeftWidth","borderLeftStyle","borderLeftColor","NavigationMenuContext","activeItemId","setActiveItemId","expandedItemIds","toggleExpandedItem","NavigationMenuProvider","useNavigationMenuContext","NavigationMenuList","NavigationMenuItemContext","NavigationMenuItem","_item$items","onItemActivate","itemId","hasSubItems","NavigationMenuTrigger","NavigationMenuContent","subItem","href","trigger","NavigationMenuView","NavigationMenu","defaultActiveItemId","defaultExpandedItemIds","setExpandedItemIds","prevExpandedItemIds","useNavigationMenuState","List","useNavigationMenuItemContext","TableContext","onRowClick","TableProvider","useTableContext","DefaultTableStyles","table","thead","th","td","tr","tfoot","borderTop","caption","TableContainer","borderCollapse","TableHead","TableHeadCell","TableRow","TableCell","isFirstColumn","TableBody","tbody","TableFooter","TableCaption","Table","Head","HeadCell","Row","Cell","Caption","Template","columns","column","row","columnIndex","cell","TabHeader","tab","tabStyles","textStyles","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","getFlexDirection","TabsView","tabs","activeTab","handleTabClick","renderTab","renderContent","headerTabs","activeText","Tabs","memo","initialTabValue","onTabChange","setActiveTab","useTabsState","propTabs","findInitialTab","foundTab","newInitialTab","currentActiveTabStillValid","t","ToggleView","isToggle","setIsToggled","onToggle","toggleColor","handleToggle","newState","Toggle","isToggled","defaultToggled","useToggleState","ToggleGroupView","onToggleChange","activeToggles","setActiveToggles","prevActiveToggles","newActiveToggles","toggleId","toggle","DragAndDropView","renderItem","itemProps","draggedIndex","itemRefs","el","DragAndDropComponent","initialItems","setItems","draggedItem","setDraggedItem","setDraggedIndex","dragStartPosRef","body","draggedElement","hoveredIndex","findIndex","newItems","removed","splice","useDragAndDropState","DragAndDrop","DropdownMenuSizes","DropdownMenuVariants","DropdownMenuItemStates","DropdownMenuContext","DropdownMenuProvider","useDropdownMenuContext","DropdownMenuTrigger","DropdownMenuContent","getDropdownPosition","DropdownMenuDivider","DropdownMenuItem","DropdownMenuView","DropdownMenu","defaultOpen","useDropdownMenuState","HoverCardContext","openCard","closeCard","cancelCloseTimer","HoverCardProvider","useHoverCardContext","HoverCard","openDelay","closeDelay","hoverCardState","_temp","openTimerRef","closeTimerRef","clearTimers","useHoverCardState","aria-describedby","sideOffset","userStyle","positionStyles","triggerRect","getContentPositionStyles","setRect","updateRect","useLayoutEffect","useRect","MenubarSizes","MenubarVariants","MenubarOrientations","MenubarItemStates","MenubarContext","activeMenuId","setActiveMenuId","openMenuId","setOpenMenuId","isMenuOpen","toggleMenu","useMenubarContext","MenubarProvider","MenubarRoot","MenubarMenu","menuId","MenubarTrigger","MenubarContent","getMenubarContentPosition","MenubarItem","MenubarSeparator","MenubarView","Menubar","defaultActiveMenuId","defaultOpenMenuId","prevOpenMenuId","useMenubarState","Root","Menu","PaginationSizes","PaginationVariants","PaginationShapes","square","circular","ActivePageButtonStyles","DisabledButtonStyles","PaginationView","currentPage","totalPages","onPageChange","pageSize","pageSizeOptions","onPageSizeChange","showPageSizeSelector","showPageInfo","maxPageButtons","showFirstLastButtons","visiblePageNumbers","handlePageChange","page","navigationButton","pageNumber","renderPageButton","ellipsis","isCurrentPage","activePageButton","pageButton","pageInfo","Number","pageSizeSelector","SeparatorVariants","solid","dashed","getSeparator","SeparatorThicknesses","thick","DefaultSeparatorStyles","SeparatorView","thickness","spacing","decorative","separatorColor","ariaProps","aria-hidden","aria-orientation","SeparatorComponent","SidebarSizes","expandedWidth","collapsedWidth","SidebarVariants","subtle","getSidebar","SidebarPositions","borderRightWidth","borderRightStyle","borderRightColor","SidebarElevations","low","high","SidebarTransitions","bounce","SidebarContext","toggleExpanded","expand","collapse","useSidebarContext","SidebarProvider","SidebarView","fixed","hasBackdrop","breakpointBehavior","transitionPreset","isMobile","sizeConfig","position_type","backdrop","Sidebar","defaultExpanded","expanded","onExpandedChange","showToggleButton","breakpoint","setIsExpanded","setIsMobile","newIsMobile","newExpanded","useSidebarState","toggleButton","toggleButtonIcon","overflowX","ResizableOrientations","HandleVariants","prominent","getHandle","HandleIconStyles","ResizableContext","isResizing","setIsResizing","registerPanel","unregisterPanel","getPanelSize","setPanelSize","isPanelCollapsed","togglePanelCollapse","startResize","onResize","endResize","useResizableContext","ResizableProvider","ResizableView","Resizable","defaultSizes","onSizesChange","minSize","maxSize","autoSaveId","storage","keyboardResizeBy","defaultMinSize","defaultMaxSize","Infinity","panels","setPanels","activeHandleRef","startPositionRef","startSizesRef","storageRef","getItem","localStorage","setItem","getTotalSize","loadSavedSizes","savedData","parsed","JSON","parse","sizes","savePanelSizes","panel","collapsed","stringify","initialSize","panelCollapsible","prevPanels","p","panelIndex","updatedPanel","newPanels","handleId","clientPosition","delta","handleIndex","handleNumMatch","match","currentPanel","nextPanel","newCurrentSize","newNextSize","_currentPanel$minSize","_currentPanel$maxSize","_nextPanel$minSize","_nextPanel$maxSize","handleTouchMove","touch","savedSizes","savedPanel","equalSize","totalSize","newSizes","endsWith","useResizableState","Panel","defaultSize","defaultCollapsed","onCollapseChange","isCollapsed","collapsedPanel","Handle","withVisualIndicator","withCollapseButton","collapseTarget","panelToCollapse","getPanelToCollapse","isTargetPanelCollapsed","getHandleSizeStyles","handle","handleIcon","collapseIcon","ToastPositions","timeouts","Map","useToastStore","toasts","toast","createdAt","duration","timerId","remove","has","get","removeAll","clear","showToast","showInfoToast","showSuccessToast","showWarningToast","showErrorToast","removeToast","removeAllToasts","ToastView","render","customIcon","actionButton","closeButton","ToastContainer","visibleToasts","grouped","keys","ToastComponent","Toast","defaultFilterFn","searchValue","matchesName","matchesDescription","_item$description","matchesKeywords","_item$keywords","keywords","keyword","CommandSizes","CommandVariants","getCommand","CommandInputStyles","CommandListStyles","CommandGroupStyles","CommandGroupHeadingStyles","textTransform","CommandItemStyles","CommandItemSelectedStyles","CommandItemDisabledStyles","CommandItemIconStyles","CommandItemContentStyles","CommandItemNameStyles","CommandItemDescriptionStyles","CommandItemShortcutStyles","CommandEmptyStyles","CommandFooterStyles","CommandContext","search","setSearch","selectedIndex","setSelectedIndex","filteredCommands","CommandProvider","CommandInput","CommandGroup","CommandItem","shortcut","CommandEmpty","CommandView","open","groups","commands","emptyState","filteredGroups","listRef","handleItemSelect","handleBackdropClick","hasGroups","isEmpty","searchInput","list","empty","group","groupHeading","commandIndex","cmd","Command","filterFn","allCommands","flatMap","trim","g","c","selectedElement","querySelector","scrollIntoView","block","useCommandState","Group","CommandItemView","Empty","TooltipSizes","TooltipVariants","dark","getTooltip","TooltipContext","openTooltip","closeTooltip","useTooltipContext","TooltipProvider","TooltipTrigger","TooltipView","showArrow","getTooltipPositionStyles","baseStyles","arrowStyles","borderLeft","borderRight","getArrowStyles","arrow","Tooltip","tooltipState","useTooltipState","useAvatarState","checkboxStates","countryPickerStates","datePickerStates","Colorprops","_useFormikInput","formProps","ComboBoxStates","initFocus","formik","inputRefs","inputNames","currentName","_inputRefs$current$in","nextIndex","indexOf","onSubmit","_inputRefs$current$in2","_inputRefs$current$in3","$Form","visibleIcon","hiddenIcon","_usePasswordState","passwordProps","selectStates","sliderState","switchStates","textAreaState","toastPosition","topLeft","topRight","bottomLeft","bottomRight","renderMessageContent","MessageContainer","usePaginationState","setVisiblePageNumbers","calculateVisiblePageNumbers","pageNumbers","startPage","endPage","useToggleGroupState","onFileSelect","validateFile","thumbnail","setSelectedFile","setErrorMessage","setPreviewUrl","setThumbnailUrl","file","_event$target$files","files","validationError","generateThumbnail","videoFile","video","preload","onloadedmetadata","currentTime","oncanplay","canvas","videoWidth","videoHeight","ctx","getContext","drawImage","thumbnailDataUrl","toDataURL","revokeObjectURL","_fileInputRef$current","click","useUpload","detectedFileType","useToast"],"mappings":"opDAKO,IAAMA,EAAa,SAACC,GAAqB,gBAArBA,IAAAA,EAAiB,MACvCA,MAAUC,KAAKC,SAASC,SAAS,IAAIC,UAAU,EAAG,ICH1CC,EAA4C,CACvDC,MAAO,CAAEC,aAAc,GACvBC,QAAS,CAAED,aAAc,IAGdE,EAAgD,CAC3DC,QAAS,CACPC,gBAAiB,cACjBC,YAAa,GAEfC,QAAS,CACPD,YAAa,EACbE,YAAa,QACbC,YAAa,kBAEfC,OAAQ,CACNL,gBAAiB,qTCFfM,EAAmBC,gBAAoC,CAC3DC,cAAe,GACfC,WAAYA,OACZC,eAAgBA,KAAM,EACtBC,KAAM,SACNC,aAAa,EACbC,OAAQ,KAIGC,EAGRC,QAACC,SAAEA,EAAQC,MAAEA,GAAOF,EACvB,OACEG,gBAACZ,EAAiBa,UAASF,MAAOA,GAC/BD,IAMMI,EAAsBA,KACjC,IAAMC,EAAUC,aAAWhB,GAC3B,IAAKe,EACH,MAAM,IAAIE,MACR,gEAGJ,OAAOF,GAmLIG,EAUTC,QAACT,SACHA,EAAQU,MACRA,EAAQ,UAASC,QACjBA,EAAU,UAASC,MACnBA,GAMDH,EADII,EAAKC,EAAAL,EAAAM,GAER,OACEb,gBAACc,0BACCC,MAAM,0BACW,YACbvC,EAAgBgC,GAChB5B,EAAkB6B,SAClBC,SAAAA,EAAOM,UACPL,GAEHb,yGC3KMmB,EArDwCpB,QAACC,SACpDA,EAAQL,KACRA,EAAO,SAAQM,MACfA,EAAKmB,aACLA,EAAYC,cACZA,EAAazB,YACbA,GAAc,EAAKc,MACnBA,EAAQ,UAASC,QACjBA,EAAU,UAASC,MACnBA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,GAGFC,EAAqBC,MAAMC,QAAQL,GACrCA,EACAA,EACA,CAACA,QACDM,EAEEC,EC9CyB5B,CAAAA,QAACJ,KAChCA,EAAO,SACPM,MAAO2B,EAAeR,aACtBA,EAAYC,cACZA,EAAazB,YACbA,GAAc,GAIfG,EACO8B,OAAmCH,IAApBE,EACfE,QAAeF,EAAAA,EAAmBR,GAejCW,EAAeC,GAAoBC,WAX3B,aAATtC,EACK6B,MAAMC,QAAQK,GACjBA,EACAA,EACA,CAACA,GACD,GAGCN,MAAMC,QAAQK,GAAgBA,EAAa,GAAKA,GAQnDjC,EAASqC,UAAQ,IAAM9D,EAAW,aAAc,IAGhD+D,EAAgBN,EAAeD,EAAkBG,EAGjDvC,EAAgB0C,UAAQ,SACNR,IAAlBS,EAAoC,GACjCX,MAAMC,QAAQU,GAAiBA,EAAgB,CAACA,GACtD,CAACA,IAGJC,YAAU,KACJP,IAEW,aAATlC,GAAwB6B,MAAMC,QAAQG,GAOtB,WAATjC,GAAqB6B,MAAMC,QAAQG,IAC5CS,QAAQC,0DAENV,GAGFI,EACEJ,EAAgBW,OAAS,EAAIX,EAAgB,QAAKF,IAGpDM,EAAiBJ,IAhBjBS,QAAQC,gEAENV,GAGFI,EAAiBJ,EAAkB,CAACY,OAAOZ,IAAoB,OAclE,CAACA,EAAiBC,EAAclC,IAEnC,IAAMF,EAAagD,cAChBC,IACC,IAAIC,EAEJ,GAAa,WAAThD,EAEAgD,EADER,IAAkBO,GAAa9C,OACtB8B,EACFS,IAAkBO,EAChBA,EAEAP,MAER,CAEL,IAAMS,EAAgBpB,MAAMC,QAAQU,GAAiBA,EAAgB,GAGnEQ,EAFEC,EAAcC,SAASH,GAEdE,EAAcE,OAAQC,GAAMA,IAAML,GAGlC,IAAIE,EAAeF,GAG5BlB,MAAMC,QAAQkB,IAAiC,IAApBA,EAASJ,SAAcI,EAAW,IAG9Dd,GACHG,EAAiBW,GAEftB,GACFA,EAAcsB,IAGlB,CAAChD,EAAMwC,EAAevC,EAAaiC,EAAcR,IAG7C3B,EAAiB+C,cACpBC,GACQlD,EAAcqD,SAASH,GAEhC,CAAClD,IAGH,MAAO,CACLA,cAAAA,EACAC,WAAAA,EACAC,eAAAA,EACAC,KAAAA,EACAC,YAAAA,EACAC,OAAAA,IDvEqBmD,CAAkB,CACvCrD,KAAAA,EACAM,MAAAA,EACAmB,mBAAcA,EAAAA,EAAgBG,EAC9BF,cAAAA,EACAzB,YAAAA,IAGF,OACEM,gBAACJ,GACCG,MAAO,CACLT,cAAemC,EAAenC,cAC9BC,WAAYkC,EAAelC,WAC3BC,eAAgBiC,EAAejC,eAC/BC,KAAMgC,EAAehC,KACrBC,YAAa+B,EAAe/B,YAC5BC,OAAQ8B,EAAe9B,SAGzBK,gBAACM,iBACCE,MAAOA,EACPC,QAASA,EACTC,MAAOA,EACPf,OAAQ8B,EAAe9B,OACvBF,KAAMgC,EAAehC,KACrBC,YAAa+B,EAAe/B,aACxBiB,GAEHb,KASTmB,EAAU8B,KDrCiDC,QAACjD,MAC1DA,EAAKD,SACLA,EAAQmD,WACRA,GAAa,EAAKvC,MAClBA,GAEDsC,EADIrC,EAAKC,EAAAoC,EAAA5B,IAEF5B,eACJA,EAAcG,OACdA,GAEEO,IACEgD,EAAa1D,EAAeO,GAG5BoD,EAAexD,cAAkBI,EACjCqD,EAAezD,cAAkBI,EAEvC,OACEC,gBAACqD,sBACCtE,YAAa,EACbE,YAAY,QACZC,YAAY,iBACZoE,aAAc,EACdC,SAAS,SACTC,QAASP,EAAa,GAAM,EAC5BQ,cAAeR,EAAa,OAAS,oBACzBC,EAAa,OAAS,yBACnBD,EAAa,QAAKzB,SAC7Bd,SAAAA,EAAOgD,KACP/C,GAEHX,EAAM2D,SAASC,IAAI9D,EAAW+D,GACzB7D,EAAM8D,eAAeD,GAEhB7D,EAAM+D,aAAaF,EAAKG,OAAAC,UAC1BJ,EAAMlD,OACTZ,MAAAA,EACAmD,WAAAA,EACAD,WAAAA,EACAE,UAAAA,EACAC,UAAAA,KAGGS,KCNf5C,EAAUiD,QDqBNC,QAACrE,SACHA,EAAQC,MACRA,EAAKmD,WACLA,EAAUD,WACVA,EAAUE,UACVA,EAASC,UACTA,EAAS1C,MACTA,EAAK0D,QACLA,GAAU,GAEXD,EADIxD,EAAKC,EAAAuD,EAAAE,IAEF9E,WAAEA,GAAeW,IAQjBoE,EAAYN,OAAAC,QAChBM,GAAIpB,EACJqB,gBAAiBtB,EACjBuB,gBAAiBrB,EACjBsB,gBAAiBzB,EACjB0B,aAAczB,EAAa,OAAS,SACpC0B,gBAAiB3B,EAAa,QAAKzB,EACnCqD,QAbkBC,KACd/E,IAAUkD,GACZ1D,EAAWQ,IAYbgF,QAAS,GACTC,OAAQ/B,EAAa,cAAgB,UACrCgC,WAAY,SACZC,eAAgB,gBAChBpG,gBAAiB,cACjBiC,MAAO,cACJL,SAAAA,EAAOM,UACPL,GAIL,GAAIyD,GAAWN,iBAAehE,GAAW,CACvC,IAAM+D,EAAQF,WAASwB,KAAKrF,GAC5B,OAAOiE,eAAaF,EAAKG,OAAAC,UAAOK,EAAiBT,EAAMlD,QAGzD,OACEX,gBAACoF,8BAAed,GACbxE,EACDE,gBAACqD,sBACCtC,MAAO,GACPsE,OAAQ,GACRC,QAAQ,OACRL,WAAW,SACXC,eAAe,SACfK,WAAW,sBACXC,UAAWtC,EAAa,iBAAmB,sBACvCxC,SAAAA,EAAO+E,MAEXzF,uBACEe,MAAM,KACNsE,OAAO,KACPK,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAEN5F,wBACE6F,EAAE,8DACFF,KAAK,qBCrFjB1E,EAAU6E,QDqGNC,QAACjG,SACHA,EAAQoD,WACRA,EAAUD,WACVA,EAAUE,UACVA,EAASC,UACTA,EAAS1C,MACTA,GAEDqF,EADIpF,EAAKC,EAAAmF,EAAAC,GAER,OAAK9C,EAKHlD,gBAACqD,sBACCkB,GAAInB,EACJ6C,KAAK,2BACY9C,EACjB4B,QAAS,GACTjG,gBAAgB,cAChBoH,UAAWhD,EAAa,SAAW,IACnCqC,WAAW,wDACX/B,QAAS,EACTD,SAAS,sBACGL,EAAa,OAAS,yBACnBD,EAAa,QAAKzB,SAC7Bd,SAAAA,EAAOM,UACPL,GAEHb,GAnBI,MGzLX,IAAaqG,EAA4C,CACvDC,GAAI,CACFC,SAAU,OACVC,WAAY,OACZC,WAAY,MACZC,cAAe,UACflD,aAAc,QAEhBmD,GAAI,CACFJ,SAAU,OACVC,WAAY,OACZC,WAAY,MACZC,cAAe,UACflD,aAAc,QAEhBoD,GAAI,CACFL,SAAU,OACVC,WAAY,OACZC,WAAY,MACZC,cAAe,UACflD,aAAc,QAEhBqD,GAAI,CACFN,SAAU,OACVC,WAAY,OACZC,WAAY,MACZC,cAAe,UACflD,aAAc,QAEhBsD,GAAI,CACFP,SAAU,OACVC,WAAY,OACZC,WAAY,MACZC,cAAe,UACflD,aAAc,QAEhBuD,GAAI,CACFR,SAAU,OACVC,WAAY,OACZC,WAAY,MACZC,cAAe,UACflD,aAAc,QAOLwD,EAAkC,CAC7CC,GAAI,OACJC,GAAI,OACJC,GAAI,OACJC,GAAI,OACJC,GAAI,QAMOC,EAAoC,CAC/CL,GAAI,OACJC,GAAI,OACJC,GAAI,OACJC,GAAI,OACJC,GAAI,QAMOE,EAA2C,CACtDC,SAAU,MACVC,KAAM,MACNC,MAAO,MACPC,OAAQ,MACRC,OAAQ,MACRC,SAAU,MACVC,KAAM,MACNC,UAAW,MACXC,MAAO,uJCnDHC,EAAsClI,IAAA,IAACC,SAC3CA,EAAQkI,MACRA,EAAKC,MACLA,EAAKvH,MACLA,GACDb,EAAA,OACCG,gCACuB,iBAAbF,EACNE,gCACGgI,GACChI,gBAACqD,sBACC6E,GAAG,MACH7B,SAAS,MACTC,WAAW,IACX6B,SAAS,WACTC,OAAO,iBACH1H,SAAAA,EAAO2H,KAEVvI,GAGJmI,GACCjI,gBAACqD,sBACC6E,GAAG,MACH7B,SAAS,MACTC,WAAW,IACX6B,SAAS,WACTG,IAAI,gBACA5H,SAAAA,EAAO2H,KAEVvI,IAGHkI,IAAUC,GAASjI,gCAAGF,IAG1BA,IAiBAyI,EAA4CvF,QAACwF,KACjDA,EAAIC,SACJA,EAAW,EAAC/H,MACZA,GAEDsC,EADI0F,EAAI9H,EAAAoC,EAAA5B,GAEDuH,EAAeC,SAAuB,OACrCC,EAAeC,GAAoB/G,WAASyG,IAC5CO,EAAaC,GAAkBjH,YAAS,GAmE/C,OAjEAG,YAAU,KACR,IAAM+G,EAAON,EAAaO,QAC1B,IAAKD,IAAST,GAAQC,GAAY,EAGhC,OAFAK,QAAiBN,EAAAA,EAAQ,SACzBQ,GAAe,GAIjB,IAAMzF,SAAEA,EAAQ8B,OAAEA,EAAMa,UAAEA,EAASI,WAAEA,GAAe2C,EAAKE,MAEzDF,EAAKE,MAAM5F,SAAW,UACtB0F,EAAKE,MAAM9D,OAAS,OACpB4D,EAAKE,MAAMjD,UAAY,OAEvB+C,EAAKG,UAAYZ,EAAK,IAAM,IAC5B,IAAIa,EAAaJ,EAAKK,aACtB,IAAKD,EAAY,CACf,IAAME,EAAKC,iBAAiBP,GAC5BI,EACoB,WAAlBE,EAAGjD,WACCmD,WAAWF,EAAGjD,YACoB,IAAlCmD,WAAWF,EAAGlD,UAAY,MAGlC,IAAMqD,EAAQL,EAAaZ,EAG3B,GADAQ,EAAKG,UAAYZ,EACbS,EAAKK,cAAgBI,EAIvB,OAHAZ,EAAiBN,GACjBQ,GAAe,QACfW,EAAQV,GAQV,IAJA,IAAIW,EAAK,EACLC,EAAKrB,EAAKnG,OACVyH,EAAM,EAEHF,GAAMC,GAAI,CACf,IAAME,EAAM3L,KAAK4L,OAAOJ,EAAKC,GAAM,GACnCZ,EAAKG,UAAYZ,EAAKyB,MAAM,EAAGF,GAC3Bd,EAAKK,cAAgBI,GACvBI,EAAMC,EACNH,EAAKG,EAAM,GAEXF,EAAKE,EAAM,EAIf,IAAMG,EACJJ,EAAMtB,EAAKnG,OACPmG,EAAKyB,MAAM,EAAGzB,EAAKnG,OAASyH,EAAM,EAAIA,EAAM,EAAIA,GAAKK,UAAY,IACjE3B,EAKN,SAASmB,EAAQS,GACfA,EAAEjB,MAAM5F,SAAWA,EACnB6G,EAAEjB,MAAM9D,OAASA,EACjB+E,EAAEjB,MAAMjD,UAAYA,EACpBkE,EAAEjB,MAAM7C,WAAaA,EARvBwC,EAAiBoB,GACjBlB,EAAec,EAAMtB,EAAKnG,QAC1BsH,EAAQV,IAQP,CAACT,EAAMC,IAGRzI,gBAACqD,sBACCgH,IAAK1B,EACLpF,SAAS,gBACL7C,SAAAA,EAAO4J,aACP5B,GAEJ6B,MAAOxB,EAAcP,OAAOhH,IAG3BqH,IAQD2B,EAA4BrG,QAACrE,SACjCA,EAAQ2K,QACRA,EAAOhC,SACPA,EAAQiC,SACRA,GAAW,EAAKC,aAChBA,GAAe,EAAK3C,MACpBA,GAAQ,EAAKC,MACbA,GAAQ,EAAK2C,UACbA,GAAY,EAAKC,OACjBA,EAAS,SAAQC,KACjBA,EAAO,KAAIpK,MACXA,GAEDyD,EADIxD,EAAKC,EAAAuD,EAAAE,GAaR,OACErE,gBAAC+K,yBAEC1E,SAPaS,EAAUgE,GAQvBxE,WAPec,EAAY0D,GAQ3BE,UAAWN,EAAW,SAAW,SACjCnE,WARec,EAAYwD,GAS3BrE,cAAc,UACdyE,eACEL,EAAY,eAAiBD,EAAe,YAAc,QAhB5C3C,GAASC,EAAQ,CAAE3C,QAAS,UAAa,GAHvCmF,EAAUtE,EAAasE,GAAW,GA0BhD9J,QAEAD,SAAAA,EAAOM,WAEVyH,GAAgC,iBAAb3I,EAClBE,gBAACuI,GAAaC,KAAM1I,EAAU2I,SAAUA,IAExCzI,gBAAC+H,GAAYC,MAAOA,EAAOC,MAAOA,GAC/BnI,KClOEoL,EAPqCvK,GACzCX,gBAACwK,mBAAa7J,uwHCMjBwK,GAAmCtL,IAAA,IAACuL,YACxCA,EAAWC,MACXA,EAAQ,QAAO7F,UACfA,EAAS8F,YACTA,EAAc,KAAIxL,SAClBA,GAEDD,EADI6I,EAAI9H,EAAAf,EAAAuB,GAAA,OAEPpB,gBAACuL,wBACCH,YAAaA,EACb9E,WAAY8E,EACZC,MAAOA,EACP/F,QAAQ,OACRE,UACEA,IAEoB,SAAhB8F,EACA,iBACgB,UAAhBA,EACA,gBACgB,OAAhBA,EACA,eACgB,SAAhBA,EACA,iBACA,SAEF5C,GAEH5I,IAKC0L,GAAcA,CAClBrM,EACAkM,EACAI,KAEA,IAAMC,SAAEA,GAAaC,aACrB,MAAO,CACLhG,KAAMxG,EAASuM,EAASL,GAAS,OACjCO,OAAQzM,EAAS,OAASuM,EAASL,GACnCI,YAAAA,EACAI,cAAe,QACfC,eAAgB,UAIPC,GAAgC/I,IAAA,IAACoI,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfzI,EADIrC,EAAKC,EAAAoC,EAAAqB,GAAA,OAERrE,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,oIAKDoG,GAAW9H,IAAA,IAACiH,YACvBA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEJtH,EADPxD,EAAKC,EAAAuD,EAAA6B,GAAA,OAERhG,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,oIAMDqG,GAAmCnG,IAAA,IAACqF,YAC/CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEf1F,EADIpF,EAAKC,EAAAmF,EAAAlF,GAAA,OAERb,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,wGAKDsG,GAAsC5L,IAAA,IAAC6K,YAClDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEflL,EADII,EAAKC,EAAAL,EAAA6L,GAAA,OAERpM,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,yBAEEA,0BAAQqM,GAAG,IAAIC,GAAG,IAAIC,EAAE,MACxBvM,0BAAQqM,GAAG,IAAIC,GAAG,KAAKC,EAAE,MACzBvM,0BAAQqM,GAAG,IAAIC,GAAG,KAAKC,EAAE,MAGzBvM,0BAAQqM,GAAG,KAAKC,GAAG,IAAIC,EAAE,MACzBvM,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,MAC1BvM,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,UAOrBC,GAAgCC,IAAA,IAACrB,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfgB,EADI9L,EAAKC,EAAA6L,EAAAC,GAAA,OAER1M,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBACE6F,EAAE,kEACFF,KAAMxG,EAASkM,EAAQ,OACvBO,OAAQzM,EAAS,OAASkM,EAC1BI,YAAatM,EAAS,EAAIsM,IAE5BzL,4BACE2M,OAAO,iBACPhH,KAAK,OACLiG,OAAQP,EACRI,YAAaA,OAORmB,GAAiCC,IAAA,IAACzB,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfoB,EADIlM,EAAKC,EAAAiM,EAAAC,GAAA,OAER9M,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBACE+M,EAAE,IACFC,EAAE,IACFjM,MAAM,KACNsE,OAAO,KACP4H,GAAG,IACHC,GAAG,IACHvH,KAAMxG,EAASkM,EAAQ,OACvBO,OAAQzM,EAAS,OAASkM,EAC1BI,YAAatM,EAAS,EAAIsM,IAE5BzL,2BACE2M,OAAO,wBACPhH,KAAMxG,EAAUA,EAAS,QAAUkM,EAAS,OAC5CO,OAAQzM,EAAS,OAASkM,EAC1BI,YAAatM,EAAS,EAAIsM,OAOrB0B,GAAiCC,IAAA,IAAChC,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEf2B,EADIzM,EAAKC,EAAAwM,EAAAC,GAAA,OAERrN,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBACE+M,EAAE,IACFC,EAAE,IACFjM,MAAM,KACNsE,OAAO,KACP4H,GAAG,IACHC,GAAG,IACHvH,KAAMxG,EAASkM,EAAQ,OACvBO,OAAQzM,EAAS,OAASkM,EAC1BI,YAAatM,EAAS,EAAIsM,IAE5BzL,0BACEqM,GAAG,MACHC,GAAG,MACHC,EAAE,MACF5G,KAAMxG,EAAUA,EAAS,QAAUkM,EAAS,OAC5CO,OAAQzM,EAAS,OAASkM,EAC1BI,YAAatM,EAAS,EAAIsM,IAE5BzL,4BACE2M,OAAO,mBACPhH,KAAK,OACLiG,OAAQzM,EAAS,QAAUkM,EAC3BI,YAAaA,OAMR6B,GAAmCC,IAAA,IAACnC,YAC/CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEf8B,EADI5M,EAAKC,EAAA2M,EAAAC,GAAA,OAERxN,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBACE6F,EAAE,gaACFF,KAAMxG,EAASkM,EAAQ,OACvBO,OAAQzM,EAAS,OAASkM,EAC1BI,YAAatM,EAAS,EAAIsM,OAMrBgC,GAA6BC,IAAA,IAACtC,YACzCA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfiC,EADI/M,EAAKC,EAAA8M,EAAAC,GAAA,OAER3N,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBACE6F,EAAE,8JACFF,KAAMxG,EAASkM,EAAQ,OACvBO,OAAQP,EACRI,YAAaA,OAORmC,GAAkCC,IAAA,IAACzC,YAC9CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfoC,EADIlN,EAAKC,EAAAiN,EAAAC,GAAA,OAER9N,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBACE6F,EAAE,4DACFF,KAAMxG,EAASkM,EAAQ,OACvBO,OAAQP,EACRI,YAAatM,EAAS,EAAIsM,IAE5BzL,wBACE6F,EAAE,iCACFF,KAAMxG,EAASkM,EAAQ,OACvBO,OAAQP,EACRI,YAAatM,EAAS,EAAIsM,OAOrBsC,GAAiCC,IAAA,IAAC5C,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfuC,EADIrN,EAAKC,EAAAoN,EAAAC,GAAA,OAERjO,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM4L,OAAQP,EAAO6C,GAAG,KAAKC,GAAG,IAAIC,GAAG,IAAIC,GAAG,OAC9CrO,wBAAM4L,OAAQP,EAAO6C,GAAG,IAAIC,GAAG,IAAIC,GAAG,KAAKC,GAAG,UAKvCC,GAAqCC,IAAA,IAACnD,YACjDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEf8C,EADI5N,EAAKC,EAAA2N,EAAAC,GAAA,OAERxO,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM+M,EAAE,IAAIC,EAAE,IAAIjM,MAAM,KAAKsE,OAAO,KAAK4H,GAAG,IAAIC,GAAG,MACnDlN,wBAAM6F,EAAE,oDACR7F,wBAAMkO,GAAG,OAAOC,GAAG,MAAMC,GAAG,QAAQC,GAAG,WAKhCI,GAAmCC,IAAA,IAACtD,YAC/CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfiD,EADI/N,EAAKC,EAAA8N,EAAAC,GAAA,OAER3O,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAG/BzL,wBACE6F,EAAE,qPACFF,KAAMxG,EAASkM,EAAQ,OACvBO,OAAQzM,EAAS,OAASkM,EAC1BI,YAAatM,EAAS,EAAIsM,IAG5BzL,2BACE2M,OAAO,mBACPhH,KAAK,QACLiG,OAAQ,QACRH,YAAaA,OAMRmD,GAAoCC,IAAA,IAACzD,YAChDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfoD,EADIlO,EAAKC,EAAAiO,EAAAC,GAAA,OAER9O,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBACE6F,EAAE,sFACFF,KAAMxG,EAASkM,EAAQ,OACvBO,OAAQP,EACRI,YAAatM,EAAS,EAAIsM,OAMrBsD,GAAoCC,IAAA,IAAC5D,YAChDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfuD,EADIrO,EAAKC,EAAAoO,EAAAC,GAAA,OAERjP,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCAAK0F,QAAQ,aAAgB8F,GAAYrM,EAAQkM,EAAOI,IACtDzL,wBAAM6F,EAAE,mFACR7F,wBAAM+M,EAAE,IAAIC,EAAE,IAAIjM,MAAM,IAAIsE,OAAO,OACnCrF,0BAAQqM,GAAG,IAAIC,GAAG,IAAIC,EAAE,SAKjB2C,GAAmCC,IAAA,IAAC/D,YAC/CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEf0D,EADIxO,EAAKC,EAAAuO,EAAAC,GAAA,OAERpP,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCAAK0F,QAAQ,aAAgB8F,GAAYrM,EAAQkM,EAAOI,IACtDzL,wBAAM4L,OAAO,OAAO/F,EAAE,gBAAgBF,KAAK,SAC3C3F,wBACE6F,EAAE,uQAQGwJ,GAAiCC,IAAA,IAAClE,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEf6D,EADI3O,EAAKC,EAAA0O,EAAAC,GAAA,OAERvP,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,OACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM4L,OAAQP,EAAO6C,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,UAMxCmB,GAAgCC,IAAA,IAACrE,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfgE,EADI9O,EAAKC,EAAA6O,EAAAC,GAAA,OAER1P,gBAACmL,kBACCC,YAAaA,EACbC,MAAOA,GACH1K,gBACO,gBAEXX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,wGAKD8J,GAAgCC,IAAA,IAACxE,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfmE,EADIjP,EAAKC,EAAAgP,EAAAC,GAAA,OAER7P,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,qBAKDiK,GAAiCC,IAAA,IAAC3E,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfsE,EADIpP,EAAKC,EAAAmP,EAAAC,GAAA,OAERhQ,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,qCAKDoK,GAAiCC,IAAA,IAAC9E,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfyE,EADIvP,EAAKC,EAAAsP,EAAAC,IAAA,OAERnQ,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,gKAKDuK,GAAgCC,IAAA,IAACjF,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEf4E,EADI1P,EAAKC,EAAAyP,EAAAC,IAAA,OAERtQ,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,2BAAS2M,OAAO,sGAKT4D,GAAgCC,IAAA,IAACpF,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEf+E,EADI7P,EAAKC,EAAA4P,EAAAC,IAAA,OAERzQ,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,oEACR7F,4BAAU2M,OAAO,0BACjB3M,4BAAU2M,OAAO,oBAKV+D,GAAmCC,IAAA,IAACvF,YAC/CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfkF,EADIhQ,EAAKC,EAAA+P,EAAAC,IAAA,OAER5Q,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,8GACR7F,wBAAM4L,OAAQP,EAAO6C,GAAG,KAAKC,GAAG,IAAIC,GAAG,KAAKC,GAAG,OAC/CrO,wBAAM4L,OAAQP,EAAO6C,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,UAKzCwC,GAAmCC,IAAA,IAAC1F,YAC/CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfqF,EADInQ,EAAKC,EAAAkQ,EAAAC,IAAA,OAER/Q,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,uIAKDmL,GAAoCC,IAAA,IAAC7F,YAChDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfwF,EADItQ,EAAKC,EAAAqQ,EAAAC,IAAA,OAERlR,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,4DAKDsL,GAAiCC,IAAA,IAAChG,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEf2F,EADIzQ,EAAKC,EAAAwQ,EAAAC,IAAA,OAERrR,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,iDAKDyL,GAAgCC,IAAA,IAACnG,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEf8F,EADI5Q,EAAKC,EAAA2Q,EAAAC,IAAA,OAERxR,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM+M,EAAE,IAAIC,EAAE,IAAIjM,MAAM,KAAKsE,OAAO,KAAK4H,GAAG,IAAIC,GAAG,MACnDlN,wBAAM6F,EAAE,+DAKD4L,GAAmCC,IAAA,IAACtG,YAC/CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfiG,EADI/Q,EAAKC,EAAA8Q,EAAAC,IAAA,OAER3R,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,qFAKD+L,GAAaH,GAEbI,GAAgCC,IAAA,IAAC1G,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfqG,EADInR,EAAKC,EAAAkR,EAAAC,IAAA,OAER/R,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,mXAKDmM,GAAiCC,IAAA,IAAC7G,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAEV8S,EADItR,EAAKC,EAAAqR,EAAAC,IAAA,OAERlS,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,OAC1BvM,wBACEkO,GAAG,KACHC,GAAG,IACHC,GAAG,IACHC,GAAG,KACHzC,OAAQzM,EAAS,QAAUkM,IAE7BrL,wBACEkO,GAAG,IACHC,GAAG,IACHC,GAAG,KACHC,GAAG,KACHzC,OAAQzM,EAAS,QAAUkM,OAMtB8G,GAAoCC,IAAA,IAAChH,YAChDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEf2G,EADIzR,EAAKC,EAAAwR,EAAAC,IAAA,OAERrS,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,iDAKDyM,GAAgCC,IAAA,IAACnH,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAGVoT,EADI5R,EAAKC,EAAA2R,EAAAC,IAAA,OAERxS,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM4L,OAAQP,EAAO6C,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,OAC/CrO,wBAAM4L,OAAQP,EAAO6C,GAAG,IAAIC,GAAG,IAAIC,GAAG,KAAKC,GAAG,MAC9CrO,wBAAM4L,OAAQP,EAAO6C,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,UAKxCoE,GAAiCC,IAAA,IAACtH,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfiH,EADI/R,EAAKC,EAAA8R,EAAAC,IAAA,OAER3S,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,0BAAQqM,GAAG,KAAKC,GAAG,IAAIC,EAAE,MACzBvM,0BAAQqM,GAAG,IAAIC,GAAG,KAAKC,EAAE,MACzBvM,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,MAC1BvM,wBAAM4L,OAAQP,EAAO6C,GAAG,OAAOC,GAAG,QAAQC,GAAG,QAAQC,GAAG,UACxDrO,wBAAM4L,OAAQP,EAAO6C,GAAG,QAAQC,GAAG,OAAOC,GAAG,OAAOC,GAAG,aAKhDuE,GAAmCC,IAAA,IAACzH,YAC/CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAGV0T,EADIlS,EAAKC,EAAAiS,EAAAC,IAAA,OAER9S,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,4BAAU2M,OAAO,qBACjB3M,wBAAM6F,EAAE,2CAKDkN,GAAiCC,IAAA,IAAC5H,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfuH,EADIrS,EAAKC,EAAAoS,EAAAC,IAAA,OAERjT,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,uBACE0F,QAAQ,YACRC,KAAK,OACLiG,OAAQ,eACRH,YAAY,KAEZzL,wBAAM6F,EAAE,yJAKDqN,GAAqCC,IAAA,IAAC/H,YACjDA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAEVgU,EADIxS,EAAKC,EAAAuS,EAAAC,IAAA,OAERpT,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAG/BzL,wBACE+M,EAAE,KACFC,EAAE,KACFjM,MAAM,KACNsE,OAAO,IACP4H,GAAG,IACHzH,UAAU,qBAIZxF,wBAAM6F,EAAE,oDAGR7F,wBAAM6F,EAAE,sEAGR7F,wBAAM6F,EAAE,+EAKDwN,GAA0CC,IAAA,IAAClI,YACtDA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAGVmU,EADI3S,EAAKC,EAAA0S,EAAAC,IAAA,OAERvT,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM4L,OAAQP,EAAO6C,GAAG,IAAIC,GAAG,KAAKC,GAAG,IAAIC,GAAG,OAC9CrO,wBAAM4L,OAAQP,EAAO6C,GAAG,IAAIC,GAAG,KAAKC,GAAG,IAAIC,GAAG,MAC9CrO,wBAAM4L,OAAQP,EAAO6C,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,OAChDrO,wBAAM4L,OAAQP,EAAO6C,GAAG,KAAKC,GAAG,IAAIC,GAAG,KAAKC,GAAG,MAC/CrO,wBAAM4L,OAAQP,EAAO6C,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,OAChDrO,wBAAM4L,OAAQP,EAAO6C,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,MAChDrO,wBAAM4L,OAAQP,EAAO6C,GAAG,IAAIC,GAAG,KAAKC,GAAG,IAAIC,GAAG,OAC9CrO,wBAAM4L,OAAQP,EAAO6C,GAAG,IAAIC,GAAG,IAAIC,GAAG,KAAKC,GAAG,MAC9CrO,wBAAM4L,OAAQP,EAAO6C,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,UAKzCmF,GAAiCC,IAAA,IAACrI,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAEVsU,EADI9S,EAAKC,EAAA6S,EAAAC,IAAA,OAER1T,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM+M,EAAE,IAAIC,EAAE,IAAIjM,MAAM,KAAKsE,OAAO,KAAK4H,GAAG,MAC5CjN,wBAAMkO,GAAG,IAAIC,GAAG,IAAIC,GAAG,IAAIC,GAAG,OAC9BrO,wBAAMkO,GAAG,KAAKC,GAAG,IAAIC,GAAG,KAAKC,GAAG,MAChCrO,wBAAMkO,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,OACjCrO,wBAAMkO,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,UAI1BsF,GAAkCC,IAAA,IAACxI,YAC9CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfmI,EADIjT,EAAKC,EAAAgT,EAAAC,IAAA,OAER7T,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,oCAKDiO,GAAgCC,IAAA,IAAC3I,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfsI,EADIpT,EAAKC,EAAAmT,EAAAC,IAAA,OAERhU,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,6CAKDoO,GAAoCC,IAAA,IAAC9I,YAChDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfyI,EADIvT,EAAKC,EAAAsT,EAAAC,IAAA,OAERnU,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,kKAKDuO,GAAgCC,IAAA,IAACjJ,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEf4I,EADI1T,EAAKC,EAAAyT,EAAAC,IAAA,OAERtU,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE9BtM,EACCa,wBAAM6F,EAAE,sOAER7F,gCACEA,wBAAM+M,EAAE,IAAIC,EAAE,KAAKjM,MAAM,KAAKsE,OAAO,KAAK4H,GAAG,IAAIC,GAAG,MACpDlN,wBAAM6F,EAAE,6BACR7F,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,YAOvBgI,GAAsCC,IAAA,IAACpJ,YAClDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEf+I,EADI7T,EAAKC,EAAA4T,EAAAC,IAAA,OAERzU,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,yDACR7F,wBAAM6F,EAAE,+BACR7F,wBAAM4L,OAAQP,EAAO6C,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,OAChDrO,wBAAM4L,OAAQP,EAAO6C,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,UAKxCqG,GAAgCC,IAAA,IAACvJ,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfkJ,EADIhU,EAAKC,EAAA+T,EAAAC,IAAA,OAER5U,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,mDAKDgP,GAAwCC,IAAA,IAAC1J,YACpDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfqJ,EADInU,EAAKC,EAAAkU,EAAAC,IAAA,OAER/U,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,iDACR7F,wBAAM6F,EAAE,kCAKDmP,GAAmCC,IAAA,IAAC7J,YAC/CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfwJ,EADItU,EAAKC,EAAAqU,EAAAC,IAAA,OAERlV,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,4MAKDsP,GAAmCC,IAAA,IAAChK,YAC/CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEf2J,EADIzU,EAAKC,EAAAwU,EAAAC,IAAA,OAERrV,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBACE2F,KAAMxG,EAASkM,EAAQ,OACvBxF,EAAE,uPACD,OAKIyP,GAAoCC,IAAA,IAACnK,YAChDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEf8J,EADI5U,EAAKC,EAAA2U,EAAAC,IAAA,OAERxV,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,khBAKD4P,GAAmCC,IAAA,IAACtK,YAC/CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfiK,EADI/U,EAAKC,EAAA8U,EAAAC,IAAA,OAER3V,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,6HAKD+P,GAAkCC,IAAA,IAACzK,YAC9CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfoK,EADIlV,EAAKC,EAAAiV,EAAAC,IAAA,OAER9V,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,4MAKDkQ,GAAiCC,IAAA,IAAC5K,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAGV6W,EADIrV,EAAKC,EAAAoV,EAAAC,IAAA,OAERjW,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,OAC1BvM,4BAAU2M,OAAO,wBAKVuJ,GAAkCC,IAAA,IAAC/K,YAC9CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAGVgX,EADIxV,EAAKC,EAAAuV,EAAAC,IAAA,OAERpW,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,sFACR7F,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,SAKnB8J,GAAqCC,IAAA,IAAClL,YACjDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEf6K,EADI3V,EAAKC,EAAA0V,EAAAC,IAAA,OAERvW,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,uLAKD2Q,GAAgCC,IAAA,IAACrL,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfgL,EADI9V,EAAKC,EAAA6V,EAAAC,IAAA,OAER1W,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,+MAKD8Q,GAAkCC,IAAA,IAACxL,YAC9CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfmL,EADIjW,EAAKC,EAAAgW,EAAAC,IAAA,OAER7W,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE9BtM,EACCa,wBAAM6F,EAAE,2NAER7F,gCACEA,wBAAM+M,EAAE,IAAIC,EAAE,KAAKjM,MAAM,KAAKsE,OAAO,KAAK4H,GAAG,IAAIC,GAAG,MACpDlN,wBAAM6F,EAAE,4BACR7F,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,YAOvBuK,GAAgCC,IAAA,IAAC3L,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfsL,EADIpW,EAAKC,EAAAmW,EAAAC,IAAA,OAERhX,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,+KAKDoR,GAAkCC,IAAA,IAAC9L,YAC9CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfyL,EADIvW,EAAKC,EAAAsW,EAAAC,IAAA,OAERnX,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,qEACR7F,wBAAM6F,EAAE,mBACR7F,wBAAM6F,EAAE,kBAKDuR,GAAkCC,IAAA,IAACjM,YAC9CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAGf4L,EADI1W,EAAKC,EAAAyW,EAAAC,IAAA,OAERtX,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,kPAKD0R,GAAoCC,IAAA,IAACpM,YAChDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEf+L,EADI7W,EAAKC,EAAA4W,EAAAC,IAAA,OAERzX,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBACE6F,EAAE,wjDACFF,KAAK,oBAMA+R,GAAwCC,IAAA,IAACvM,YACpDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEfkM,EADIhX,EAAKC,EAAA+W,EAAAC,IAAA,OAER5X,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,IAAY,EAAMH,EAAOI,IAE7BzL,wBAAM6F,EAAE,kIAKDgS,GAAgCC,IAAA,IAAC1M,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfqM,EADInX,EAAKC,EAAAkX,EAAAC,IAAA,OAER/X,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM4L,OAAQP,EAAO6C,GAAG,KAAKC,GAAG,IAAIC,GAAG,KAAKC,GAAG,OAC/CrO,wBAAM4L,OAAQP,EAAO6C,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,UAKxC2J,GAAgCC,IAAA,IAAC7M,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfwM,EADItX,EAAKC,EAAAqX,EAAAC,IAAA,OAERlY,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,iBAAiBgG,cAAc,QAAQC,eAAe,aAKvDqM,GAAqCC,IAAA,IAAChN,YACjDA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAIsM,YACbA,EAAc,GAEf2M,EADIzX,EAAKC,EAAAwX,EAAAC,IAAA,OAERrY,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,mCAKDyS,GAAiCC,IAAA,IAACnN,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEf8M,EADI5X,EAAKC,EAAA2X,EAAAC,IAAA,OAERxY,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM4L,OAAQP,EAAO6C,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,MAChDrO,4BAAU2M,OAAO,uBAKV8L,GAAmCC,IAAA,IAACtN,YAC/CA,EAAc,GAAEC,MAChBA,EAAQ,eAAclM,OACtBA,GAAS,EAAKsM,YACdA,EAAc,GAEfiN,EADI/X,EAAKC,EAAA8X,EAAAC,IAAA,OAER3Y,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,KAAKqM,cAAc,SAC7C5Y,wBAAM6F,EAAE,0BAA0B+S,cAAc,SAKzCC,GAAoCC,IAAA,IAAC1N,YAChDA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAEV2Z,EADInY,EAAKC,EAAAkY,EAAAC,IAAA,OAER/Y,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM+M,EAAE,IAAIC,EAAE,IAAIjM,MAAM,KAAKsE,OAAO,KAAK4H,GAAG,IAAIC,GAAG,MACnDlN,wBAAM4L,OAAQP,EAAO6C,GAAG,KAAKC,GAAG,IAAIC,GAAG,KAAKC,GAAG,MAC/CrO,wBAAM4L,OAAQP,EAAO6C,GAAG,IAAIC,GAAG,IAAIC,GAAG,IAAIC,GAAG,MAC7CrO,wBAAM4L,OAAQP,EAAO6C,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,UAIxC2K,GAAkCC,IAAA,IAAC7N,YAC9CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAEV8Z,EADItY,EAAKC,EAAAqY,EAAAC,IAAA,OAERlZ,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAMkO,GAAG,IAAIC,GAAG,IAAIC,GAAG,KAAKC,GAAG,MAC/BrO,wBAAMkO,GAAG,KAAKC,GAAG,IAAIC,GAAG,KAAKC,GAAG,MAChCrO,wBAAMkO,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,OAChCrO,wBAAMkO,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,OACjCrO,wBAAMkO,GAAG,IAAIC,GAAG,KAAKC,GAAG,IAAIC,GAAG,OAC/BrO,wBAAMkO,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,OACjCrO,wBAAMkO,GAAG,KAAKC,GAAG,IAAIC,GAAG,KAAKC,GAAG,MAChCrO,wBAAMkO,GAAG,KAAKC,GAAG,IAAIC,GAAG,KAAKC,GAAG,OAChCrO,wBAAMkO,GAAG,IAAIC,GAAG,KAAKC,GAAG,IAAIC,GAAG,UAKxB8K,GAAgCC,IAAA,IAAChO,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAEVia,EADIzY,EAAKC,EAAAwY,EAAAC,IAAA,OAERrZ,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,6BACR7F,wBAAM6F,EAAE,gCAKDyT,GAAkCC,IAAA,IAACnO,YAC9CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAEVoa,EADI5Y,EAAKC,EAAA2Y,EAAAC,IAAA,OAERxZ,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,MAC1BvM,wBAAMkO,GAAG,KAAKC,GAAG,KAAKC,GAAG,QAAQC,GAAG,UACpCrO,wBAAMkO,GAAG,KAAKC,GAAG,IAAIC,GAAG,KAAKC,GAAG,OAChCrO,wBAAMkO,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,UAKzBoL,GAAmCC,IAAA,IAACtO,YAC/CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAEVua,EADI/Y,EAAKC,EAAA8Y,EAAAC,IAAA,OAER3Z,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,MAC1BvM,wBAAMkO,GAAG,KAAKC,GAAG,KAAKC,GAAG,QAAQC,GAAG,UACpCrO,wBAAMkO,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,UAKzBuL,GAAgCC,IAAA,IAACzO,YAC5CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAEV0a,EADIlZ,EAAKC,EAAAiZ,EAAAC,IAAA,OAER9Z,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAMkO,GAAG,IAAIC,GAAG,IAAIC,GAAG,KAAKC,GAAG,MAC/BrO,wBAAMkO,GAAG,KAAKC,GAAG,IAAIC,GAAG,KAAKC,GAAG,OAChCrO,wBAAMkO,GAAG,IAAIC,GAAG,KAAKC,GAAG,KAAKC,GAAG,UAKzB0L,GAAiCC,IAAA,IAAC5O,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAEV6a,EADIrZ,EAAKC,EAAAoZ,EAAAC,IAAA,OAERja,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM+M,EAAE,IAAIC,EAAE,IAAIjM,MAAM,IAAIsE,OAAO,MACnCrF,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,MAC1BvM,2BAAS2M,OAAO,sBAKTuN,GAAkCC,IAAA,IAAC/O,YAC9CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAEVgb,EADIxZ,EAAKC,EAAAuZ,EAAAC,IAAA,OAERpa,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,4BAAU2M,OAAO,kBACjB3M,wBAAM6F,EAAE,yCAKDwU,GAAoCC,IAAA,IAAClP,YAChDA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAEVmb,EADI3Z,EAAKC,EAAA0Z,EAAAC,IAAA,OAERva,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,wBAAM6F,EAAE,oEACR7F,4BAAU2M,OAAO,mBACjB3M,wBAAMkO,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAIC,GAAG,OAChCrO,wBAAMkO,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAIC,GAAG,OAChCrO,4BAAU2M,OAAO,oBAKV6N,GAAiCC,IAAA,IAACrP,YAC7CA,EAAc,GAAEC,MAChBA,EAAQ,eAAcI,YACtBA,EAAc,EAACtM,OACfA,GAAS,GAEVsb,EADI9Z,EAAKC,EAAA6Z,EAAAC,IAAA,OAER1a,gBAACmL,kBAAYC,YAAaA,EAAaC,MAAOA,GAAW1K,GACvDX,qCACE0F,QAAQ,0BACI,QACZsG,UAAU,SACNR,GAAYrM,EAAQkM,EAAOI,IAE/BzL,4BAAU2M,OAAO,mBACjB3M,wBAAMkO,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAIC,GAAG,OAEhCrO,wBAAM6F,EAAE,oEACR7F,wBAAM6F,EAAE,oEACR7F,4BAAU2M,OAAO,iBACjB3M,wBAAMkO,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAIC,GAAG,OAChCrO,wBAAMkO,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAIC,GAAG,OAChCrO,4BAAU2M,OAAO,mBACjB3M,wBAAM6F,EAAE,oEACR7F,4BAAU2M,OAAO,iBACjB3M,wBAAMkO,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAIC,GAAG,iqCC5rDzBsM,GAAY9a,QAAC4F,KACxBA,EAAI8E,MACJA,EAAK7J,MACLA,EAAKka,YACLA,EAAWna,QACXA,EAAU,WAGCZ,EADRc,EAAKC,EAAAf,EAAAuB,IAIFyZ,GAFgBlP,aCJf,CACL9M,QAAS,CACPmC,UAAW,CACTlC,gBAAiB,gBACjBI,YAAa,iBACb4b,UAAW,iCAEbC,QAAS,CACP1P,MAAO,kBAET5F,KAAM,CACJ4F,MAAO,mBAGX2P,KAAM,CACJha,UAAW,CACTlC,gBAAiB,gBACjBI,YAAa,iBACb4b,UAAW,sCAEbC,QAAS,CACP1P,MAAO,kBAET5F,KAAM,CACJ4F,MAAO,mBAGX4P,QAAS,CACPja,UAAW,CACTlC,gBAAiB,iBACjBI,YAAa,kBACb4b,UAAW,qCAEbC,QAAS,CACP1P,MAAO,mBAET5F,KAAM,CACJ4F,MAAO,oBAGX6P,MAAO,CACLla,UAAW,CACTlC,gBAAiB,eACjBI,YAAa,gBACb4b,UAAW,qCAEbC,QAAS,CACP1P,MAAO,iBAET5F,KAAM,CACJ4F,MAAO,kBAGX8P,QAAS,CACPna,UAAW,CACTlC,gBAAiB,kBACjBI,YAAa,mBACb4b,UAAW,sCAEbC,QAAS,CACP1P,MAAO,oBAET5F,KAAM,CACJ4F,MAAO,uBD/Bb,OACErL,gBAACoF,4BAECgW,IAAK,GACLrW,QAAQ,OACRsW,SAAS,SACTpW,WAAW,aAEXvG,aAAa,MACbK,YAAY,MACZE,YAAY,QACZC,YAAa2b,EAAOpa,GAASO,UAAU9B,YACvCJ,gBAAiB+b,EAAOpa,GAASO,UAAUlC,gBAC3Cgc,UAAWD,EAAOpa,GAASO,UAAU8Z,UAErCvV,WAAW,uBAEP7E,SAAAA,EAAOM,UACPL,GAGJX,gBAACqD,sBAAKiY,UAAU,aAAaC,UAAU,aAAU7a,SAAAA,EAAO+E,MA7C5C+V,cACd,GAAI/V,EAAM,OAAOA,EAGjB,IAEMgW,EAAY,CAChB3Q,KAAM,GACNO,aAJaqQ,QAAGhb,UAAKib,EAALjb,EAAO+E,aAAPkW,EAAatQ,OAAKqQ,EAAIb,EAAOpa,GAASgF,KAAK4F,OAO7D,OAAQ5K,GACN,IAAK,OACH,OAAOT,gBAACwP,oBAAaiM,IACvB,IAAK,UACH,OAAOzb,gBAACyV,oBAAgBgG,IAC1B,IAAK,QACH,OAAOzb,gBAACgS,oBAAcyJ,IACxB,IAAK,UACL,QACE,OAAOzb,gBAAC0Q,oBAAgB+K,MA0BvBD,IAIHxb,gBAACc,YAASsa,IAAK,GACZ,IAGDpb,gBAACkL,iBACC7E,SAAS,OACTE,WAAW,MACXD,WAAW,OACX+E,MAAOwP,EAAOpa,GAASsa,QAAQ1P,aAC3B3K,SAAAA,EAAO6J,OAEVA,GAGHvK,gBAACkL,iBACC7E,SAAS,OACTE,WAAW,MACXD,WAAW,OACX+E,MAAOwP,EAAOpa,GAASsa,QAAQ1P,aAC3B3K,SAAAA,EAAOka,aAEVA,sCEhGEgB,GAAkB/b,IAAA,IAACgc,MAE9BA,EAAQ,GAAK,EAAC/b,SAEdA,EAAQY,MACRA,GAGiBb,EADdc,EAAKC,EAAAf,EAAAuB,IAAA,OAERpB,gBAACuL,wBACCxK,MAAO,OACPoH,SAAS,WACT5E,SAAS,SACTuY,WAAgB,EAAID,EAAS,QAC7Bnd,aAAc,GACViC,QACAD,SAAAA,EAAOqb,QAEX/b,gBAACqD,sBACC8E,SAAS,WACTG,IAAK,EACL0T,MAAO,EACP5T,OAAQ,EACR6T,KAAM,SACFvb,SAAAA,EAAOwb,MAEVpc,6BCfMqc,GAAsC,CACjDpV,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,IAMOiV,GACA,CACT1d,aAAc,MACd6E,SAAU,SACVxE,YAAa,MACbE,YAAa,QACbC,YAAa,cACbJ,gBAAiB,iBACjBgc,UAAW,iCACXvV,WAAY,iBATH6W,GAWD,CACR7V,WAAY,MACZ8E,MAAO,kBAbE+Q,GAeJ,CACLC,UAAW,QACX9W,WAAY,iBC/BH+W,GAAazc,QAAC0c,IACzBA,EAAGzR,KACHA,EAAO,KAAI0R,SACXA,EAAW,KAAI9b,MACfA,EAAK+b,WACLA,EAAUC,cACVA,EAAa7X,QACbA,EAAUA,UACMhF,EAEV8c,EAAaR,GAAcrR,GAE3B8R,EAAU5Y,OAAAC,UACXmY,UACC1b,SAAAA,EAAOmc,QAAS,IAGtB,OACE7c,gBAACuL,wBACCtF,KAAK,SACLlF,MAAO4b,EACPtX,OAAQsX,GACJP,IACJld,YAAaud,EAAa,iBAAmB,cAC7C5X,QAASA,SACLnE,SAAAA,EAAOM,WAETyb,EAUAzc,gBAACkL,iBACCJ,KAAMA,GACFsR,SACA1b,SAAAA,EAAO8b,UAEVA,GAdHxc,gBAAC8c,SACCC,IAAI,KACJR,IAAKA,EACLpT,MAAOyT,EACP7b,MAAO4b,EACPtX,OAAQsX,EACRK,QAASA,IAAMN,GAAc,OC/B1BO,GAAsC,CACjDlW,GAAI,CAEFmW,SAAU,OACV7X,OAAQ,OACRN,QAAS,QAETsB,SAAU,OACVE,WAAY,MACZD,WAAY,QAEdU,GAAI,CAEFkW,SAAU,OACV7X,OAAQ,OACRN,QAAS,QAETsB,SAAU,OACVE,WAAY,MACZD,WAAY,QAEdW,GAAI,CAEFiW,SAAU,OACV7X,OAAQ,OACRN,QAAS,SAETsB,SAAU,OACVE,WAAY,MACZD,WAAY,QAEdY,GAAI,CAEFgW,SAAU,OACV7X,OAAQ,OACRN,QAAS,SAETsB,SAAU,OACVE,WAAY,MACZD,WAAY,QAEda,GAAI,CAEF+V,SAAU,OACV7X,OAAQ,OACRN,QAAS,SAETsB,SAAU,OACVE,WAAY,MACZD,WAAY,SAOH6W,GAA8C,CACzD1e,MAAO,EACPE,QAAS,MACTye,WAAY,UAMDC,GAAyD,CACpEC,YAAa,CAAEhV,IAAK,MAAO0T,MAAO,MAAO7T,SAAU,YACnDoV,WAAY,CAAEjV,IAAK,MAAO2T,KAAM,MAAO9T,SAAU,YACjDqV,eAAgB,CAAEpV,OAAQ,MAAO4T,MAAO,MAAO7T,SAAU,YACzDsV,cAAe,CAAErV,OAAQ,MAAO6T,KAAM,MAAO9T,SAAU,oFClEnDuV,GAAkC7d,QAACkb,QACvCA,EAAO5S,SACPA,EAAQ3H,MACRA,EAAQ,aAAYC,QACpBA,EAAU,SAAQqK,KAClBA,EAAO,KAAIpK,MACXA,GAGDb,EADIc,EAAKC,EAAAf,EAAAuB,IAMFuc,GAJgBhS,aAIF3H,OAAAC,QAElBlD,MAAO,cACPuE,QAAS,OACTL,WAAY,SACZC,eAAgB,SAChBpG,gBAAiB,cAGjBJ,aAAcye,GAAY3c,IACvByc,GAAWnS,GDmDT,CACL3L,OAAQ,CACNL,gBAAiB,gBACjBuM,MAAO,cACPtM,YAAa,MACbE,YAAa,QACbC,YAAa,cACbqG,WAAY,iBAEdvG,QAAS,CACPF,gBAAiB,cACjBC,YAAa,MACbE,YAAa,QACbC,YAAa,gBACbmM,MAAO,gBACP9F,WAAY,iBAEdqY,KAAM,CACJ9e,gBAAiB,cACjBC,YAAa,MACbE,YAAa,QACbC,YAAa,cACbmM,MAAO,gBACPJ,eAAgB,YAChB4S,oBAAqB,MACrBtY,WAAY,iBAEduY,MAAO,CACLhf,gBAAiB,cACjBuM,MAAO,iBACPtM,YAAa,MACbE,YAAa,QACbC,YAAa,cACbqG,WAAY,kBChGyC9E,GAgBnD0H,EAAWkV,GAAelV,GAAY,SAGvCzH,SAAAA,EAAOM,YAEZ,OACEhB,gBAACuL,wBAAOtF,KAAK,SAAY0X,EAAoBhd,GAC3CX,gBAACkL,iBACCjF,KAAK,YACLM,WAAW,MACXwX,UAAU,gBACNrd,SAAAA,EAAO8H,MACX6C,MAAOsS,EAAetS,QAErB0P,GAAW,MC5DPiD,GAAkC,CAC7CjX,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,gGCAA8W,GAAoCpe,QAACC,SACzCA,EAAQoe,GAERA,EAAK,IAAGC,SAERA,EAAW,KAAIC,UAEfA,EAAY,UAASC,UAErBA,GAAY,EAAKC,WAEjBA,GAAa,EAAK5d,MAElBA,EAAQ,CAAE+E,KAAM,GAAI+C,KAAM,IAAI+V,aAE9BA,EAAeA,UAEhB1e,EADIc,EAAKC,EAAAf,EAAAuB,IAGFod,EAAcA,KACA,UAAdJ,GAAuBG,GAAa,IAE1C,OACEve,gBAACye,QACCP,GAAIA,EACJQ,OAAQJ,EAAa,SAAW,QAChCnV,MAAO,CAAE8B,eAAgB,UAAWI,MAAO,YAE3CrL,gBAACoF,4BACCuZ,aAAcH,EACdI,aAAcJ,EACdpD,IAAK,EACLnW,WAAW,SACXoW,SAAS,SACTpQ,eAAgB,QACZvK,EAAM8H,KACN7H,GAEHb,EACAwe,GAActe,gBAAC0X,IAAiBtM,YAAa4S,GAAUG,QClCnDU,GAP+Ble,IAE1C,IAAMme,ECLoBC,MAC1B,IAAOV,EAAWE,GAAgBxc,YAAS,GAC3C,MAAO,CAAEsc,UAAAA,EAAWE,aAAAA,IDGDQ,GAEnB,OAAO/e,gBAACie,oBAAaa,EAAgBne,KED1Bqe,GAAqC,CAChDjY,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,IAGO8X,GAAuC,CAClDC,KAAM,GACNzX,OAAQ,IACR0X,KAAM,oNCCFC,GAAgDvf,QAACiL,KACrDA,EAAO,KAAIuU,MACXA,EAAQ,SAAQhU,MAChBA,EAAQ,gBACRiU,UAAWC,GAEZ1f,EADIc,EAAKC,EAAAf,EAAAuB,KAEFsK,SAAEA,EAAQ4T,UAAEA,GAAc3T,aAC1B6T,EAAa9T,EAASL,EAAO,CACjCiU,UAAWC,GAA4BD,IAEnCG,EAA4B,iBAAT3U,EAAoBA,EAAOkU,GAAalU,IAE1D4U,EAAOC,GAAY5d,WAAS,GAUnC,OARAG,YAAU,KACR,IAAM0d,EAAaC,YAAY,KAC7BF,EAAUG,GAAcA,EAAY,KACnCb,GAAcI,IAEjB,MAAO,IAAMU,cAAcH,IAC1B,CAACP,IAGFrf,qCACE4F,MAAM,6BACN7E,MAAU0e,OACVpa,OAAWoa,OACX/Z,QAAQ,YACRC,KAAK,OACLiG,OAAQ4T,EACR/T,YAAY,IACZI,cAAc,QACdC,eAAe,QACf3C,MAAO,CAAE3D,oBAAqBka,WAC1B/e,GAEJX,qBAAGuE,GAAG,oBAAoBkH,YAAY,MACtCzL,qBACEuE,GAAG,wBACHsH,cAAc,QACdC,eAAe,UAEjB9L,qBAAGuE,GAAG,uBACJvE,wBAAM6F,EAAE,kCAMVma,GAAgChd,QAAC8H,KACrCA,EAAO,KAAIuU,MACXA,EAAQ,SAAQhU,MAChBA,EAAQ,gBACRiU,UAAWC,GAEZvc,EADIrC,EAAKC,EAAAoC,EAAAqB,KAEFqH,SAAEA,EAAQ4T,UAAEA,GAAc3T,aAC1B6T,EAAa9T,EAASL,EAAO,CACjCiU,UAAWC,GAA4BD,IAEnCG,EAA4B,iBAAT3U,EAAoBA,EAAOkU,GAAalU,IAE1D4U,EAAOC,GAAY5d,WAAS,GAUnC,OARAG,YAAU,KACR,IAAM0d,EAAaC,YAAY,KAC7BF,EAAUG,GAAcA,EAAY,KACnCb,GAAcI,IAEjB,MAAO,IAAMU,cAAcH,IAC1B,CAACP,IAGFrf,qCACE4F,MAAM,6BACNF,QAAQ,YACR3E,MAAU0e,OACVpa,OAAWoa,OACXtW,MAAO,CAAE3D,oBAAqBka,WAC1B/e,GAEJX,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,IAAI5G,KAAM6Z,IACpCxf,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,IAAI5G,KAAM6Z,IACpCxf,0BAAQqM,GAAG,KAAKC,GAAG,KAAKC,EAAE,IAAI5G,KAAM6Z,MAKpCS,GAAkC9b,QAAC2G,KACvCA,EAAO,KAAIuU,MACXA,EAAQ,SAAQhU,MAChBA,EAAQ,gBACRiU,UAAWC,GAEZpb,EADIxD,EAAKC,EAAAuD,EAAA6B,KAEF0F,SAAEA,EAAQ4T,UAAEA,GAAc3T,aAC1B6T,EAAa9T,EAASL,EAAO,CACjCiU,UAAWC,GAA4BD,IAEnCG,EAA4B,iBAAT3U,EAAoBA,EAAOkU,GAAalU,IAE1D4U,EAAOC,GAAY5d,WAAS,GAUnC,OARAG,YAAU,KACR,IAAM0d,EAAaC,YAAY,KAC7BF,EAAUG,GAAcA,EAAY,KACnCb,GAAcI,IAEjB,MAAO,IAAMU,cAAcH,IAC1B,CAACP,IAGFrf,qCACE4F,MAAM,6BACNF,QAAQ,YACR3E,MAAU0e,OACVpa,OAAWoa,OACXtW,MAAO,CAAE3D,oBAAqBka,WAC1B/e,GAEJX,0BACEqM,GAAG,KACHC,GAAG,KACHC,EAAE,KACF5G,KAAK,OACLiG,OAAQ4T,EACR/T,YAAY,IACZyU,gBAAgB,WAKlBC,GAA8Bpa,QAAC+E,KACnCA,EAAIhL,SACJA,EAAQsgB,UACRA,EAASC,YACTA,EAAW5gB,KACXA,EAAO,UAAS4f,MAChBA,EAAQ,SAAQiB,aAChBA,EAAe,QAAO5f,MACtBA,GAEDqF,EADIpF,EAAKC,EAAAmF,EAAAlF,IAEFsI,EAAQ,CAAE2B,KAAAA,EAAMuU,MAAAA,EAAOhU,MAAOgV,GAE9BE,EAAW,CACf1hB,QAASmB,gBAACof,oBAAmBjW,IAC7BqX,OAAQxgB,gBAACggB,oBAAW7W,IACpBsX,QAASzgB,gBAACigB,oBAAY9W,KAGxB,OACEnJ,gBAACuL,wBACC6P,IAAK,GACLsF,cACmB,QAAjBJ,GAA2C,WAAjBA,EAA4B,SAAW,OAE/D3f,QACAD,SAAAA,EAAOM,YAEQ,SAAjBsf,GAA4C,QAAjBA,IAA2BxgB,GACtDE,gBAACqD,sBAAKgI,MAAO+U,SAAe1f,SAAAA,EAAO8H,MAChC1I,GAGJygB,EAAS9gB,IACS,UAAjB6gB,GAA6C,WAAjBA,IAA8BxgB,GAC1DE,gBAACqD,sBAAKgI,MAAO+U,SAAe1f,SAAAA,EAAO8H,MAChC1I,KCpLE6gB,GALmChgB,GAE9CX,gBAACmgB,oBAAexf,ICWLigB,GAAuC,CAClD7Z,GAAI,CAEF8Z,UAAW,GACX/E,WAAY,EACZgF,cAAe,EACfC,YAAa,EACbC,aAAc,EAGd3a,SAAU,GACVE,WAAY,MACZD,WAAY,GACZE,cAAe,WAEjBQ,GAAI,CAEF6Z,UAAW,GACX/E,WAAY,EACZgF,cAAe,EACfC,YAAa,GACbC,aAAc,GAGd3a,SAAU,GACVE,WAAY,MACZD,WAAY,GACZE,cAAe,WAEjBS,GAAI,CAEF4Z,UAAW,GACX/E,WAAY,EACZgF,cAAe,EACfC,YAAa,GACbC,aAAc,GAGd3a,SAAU,GACVE,WAAY,MACZD,WAAY,GACZE,cAAe,WAEjBU,GAAI,CACF2Z,UAAW,GACX/E,WAAY,GACZgF,cAAe,GACfC,YAAa,GACbC,aAAc,GAGd3a,SAAU,GACVE,WAAY,MACZD,WAAY,GACZE,cAAe,WAEjBW,GAAI,CAEF0Z,UAAW,GACX/E,WAAY,GACZgF,cAAe,GACfC,YAAa,GACbC,aAAc,GAGd3a,SAAU,GACVE,WAAY,MACZD,WAAY,GACZE,cAAe,YAONya,GAA+C,CAC1DxiB,MAAO,EACPE,QAAS,EACTye,WAAY,KAMDY,GAAqC,CAChDjX,GAAI,CACFhG,MAAO,GACPsE,OAAQ,GACRN,QAAS,GAEXiC,GAAI,CACFjG,MAAO,GACPsE,OAAQ,GACRN,QAAS,GAEXkC,GAAI,CACFlG,MAAO,GACPsE,OAAQ,GACRN,QAAS,GAEXmC,GAAI,CACFnG,MAAO,GACPsE,OAAQ,GACRN,QAAS,IAEXoC,GAAI,CACFpG,MAAO,GACPsE,OAAQ,GACRN,QAAS,qOC1GPmc,GAAoCrhB,WAACY,QAEzCA,EAAU,SAAQqK,KAClBA,EAAO,KAAItK,MACXA,EAAQ,UAAS2gB,aACjBA,EAAe,OAAMC,eACrBA,EAAiB,OAAMtiB,gBACvBA,EAAeuM,MACfA,aAGApI,EAAUoe,UACVA,EAASC,cACTA,EAAa7b,KAEbA,EAAI3F,SACJA,EAAQoe,GAERA,EAAEI,WACFA,EAAUiD,OAEVA,EAAM1c,QACNA,EAAOnE,MACPA,EAAQ,GACR4e,UAAWC,GAEZ1f,EADIc,EAAKC,EAAAf,EAAAuB,KAGFsK,SAAEA,EAAQ4T,UAAEA,GAAc3T,aAI1B6V,SAAYxe,QAAGlE,EAAAA,EAAmBuM,GAAKrI,EAAI,gBAC3Cye,EAAW/V,EAASzI,EAAa,iBAAmBue,EAAc,CACtElC,gBALWC,EAAAA,EAAeD,IAOtBoC,EAAOC,EAASF,GAOhBG,EAJU5f,UACd,IDsE6B6f,EAC/BxW,EACAyW,MAEA3iB,OAAQ,CACNL,gBAAiBuM,EACjBA,MAAOyW,EAAU,cAAgB,cACjC/iB,YAAa,EACbE,YAAa,QACbC,YAAa,cACb6iB,OAAQ,CACNvc,UAAW,mBACXyF,eAAgB,YAChB4S,oBAAqB,MACrBmE,wBAAyB,OAE3BC,QAAS,CACPzc,UAAW,mBACXyF,eAAgB,YAChB4S,oBAAqB,MACrBmE,wBAAyB,OAE3Bzc,WAAY,iBAEdvG,QAAS,CACPF,gBAAiB,cACjBuM,MAAOA,EACPtM,YAAa,EACbE,YAAa,QACbC,YAAamM,EACb0W,OAAQ,CACNjjB,gBAAiBuM,EACjBA,MAAOyW,EAAU,cAAgB,cACjCtc,UAAW,mBACXyF,eAAgB,YAChB4S,oBAAqB,MACrBmE,wBAAyB,OAE3BC,QAAS,CACPnjB,gBAAiBuM,EACjBA,MAAOyW,EAAU,cAAgB,cACjCtc,UAAW,gBACXyF,eAAgB,YAChB4S,oBAAqB,MACrBmE,wBAAyB,OAE3Bzc,WAAY,iBAEduY,MAAO,CACLhf,gBAAiB,cACjBuM,MAAOA,EACPtM,YAAa,EACbE,YAAa,OACbC,YAAa,cACb6iB,OAAQ,CACNjjB,gBAAiBuM,EACjBA,MAAOyW,EAAU,cAAgB,cACjCtc,UAAW,mBACXyF,eAAgB,YAChB4S,oBAAqB,MACrBmE,wBAAyB,OAE3BC,QAAS,CACPnjB,gBAAiBuM,EACjBA,MAAOyW,EAAU,cAAgB,cACjCtc,UAAW,gBACXyF,eAAgB,YAChB4S,oBAAqB,MACrBmE,wBAAyB,OAE3Bzc,WAAY,iBAEdqY,KAAM,CACJ9e,gBAAiB,cACjBuM,MAAOyW,EAAUzW,EAAQ,cACzBtM,YAAa,EACbE,YAAa,OACbC,YAAa,cACb+L,eAAgB,YAChB4S,oBAAqB,MACrBmE,wBAAyB,MACzBD,OAAQ,CACNC,wBAAyB,OAE3BC,QAAS,CAAED,wBAAyB,OACpCzc,WAAY,mBC3JNsc,CAAkBJ,EAAkB,SAARC,GAClC,CAACD,EAAUC,IAEQjhB,GAGfyhB,EAAU,CAAC,OAAQ,SAASvf,SAASwe,GACvC/b,aACAtE,WACEqhB,EAAavB,GAAY9V,GACzBsX,EAAUd,EAAgBtD,GAAUlT,GAAQ,GAE5CiQ,EACJ/a,gBAACkiB,iBACC9G,IAAK,EACLnW,WAAW,SACXC,eAAe,SACfmG,MAAO,UACP0W,OAAQ,CACN1W,MAAO,YAEL8W,QACAzhB,SAAAA,EAAOqa,SAEVsG,GAAgC,SAAnBD,GACZphB,gBAAC2gB,kBACC7V,KAAe,OAATA,GAA0B,OAATA,EAAgB,KAAO,KAC9CO,MAAO,UACP0W,OAAQ,CACN1W,MAAO,kBAEL3K,SAAAA,EAAO2hB,SAId5c,GAAQ,CAAC,OAAQ,OAAO9C,SAASwe,KAAkBE,GAClDrhB,gBAACqD,sBACCgI,MAAO,UACP0W,OAAQ,CACN1W,MAAO,kBAEL3K,SAAAA,EAAO+E,MAEVA,GAIJ3F,EAEA2F,GAAQ,CAAC,QAAS,UAAU9C,SAASwe,KAAkBE,GACtDrhB,gBAACqD,sBACCgI,MAAO,UACP0W,OAAQ,CACN1W,MAAO,kBAEL3K,SAAAA,EAAO+E,MAEVA,GAIJ4b,GAAgC,UAAnBD,GACZphB,gBAAC2gB,kBACC7V,KAAe,OAATA,GAA0B,OAATA,EAAgB,KAAO,KAC9CO,MAAO,UACP0W,OAAQ,CACN1W,MAAO,kBAEL3K,SAAAA,EAAO2hB,UAMnB,OACEriB,gBAAC+K,yBACC7C,GAAgB,SAAZzH,GAAsByd,EAAK,MAAQ,SACvCze,KAAkB,SAAZgB,GAAsByd,OAAK1c,EAAY,SAC7C8gB,SAAUC,QAAQtf,GAAcoe,IAE5Bc,EACAC,GACJ9c,QAAQ,OACRL,WAAW,SACXC,eAAe,SAGfxG,aAAcuiB,GAAazgB,GAC3Bsa,UAAWyG,EACXhc,WAAW,gBACXP,OAAQ/B,EAAa,UAAY,UACjC4B,QAASA,GACL+c,QACAlhB,SAAAA,EAAOM,UACPL,GAEHud,EACCle,gBAAC6e,kBACCX,GAAIA,EACJI,WAAYA,EACZjT,MAAO,UACPJ,eAAgB,UAChBuX,oBAAqB,iBACjB9hB,SAAAA,EAAOkd,MAEV7C,GAGHA,IC5IK0H,GArBmC9hB,IAE9C,IAAM0d,UAAEA,EAASE,aAAEA,GCPSmE,MAC5B,IAAOrE,EAAWE,GAAgBve,EAAM+B,UAAS,GAEjD,MAAO,CAAEsc,UAAAA,EAAWE,aAAAA,IDIgBmE,GAE9BlE,EAAcA,IAAMD,GAAcF,GAExC,OAEEre,gBAACkhB,kBACC7C,UAAWA,EAEXE,aAAcA,EAEdI,aAAcH,EAEdI,aAAcJ,GACV7d,KEUGgiB,GAA6C,CACxDlkB,MAAO,EACPE,QAAS,MACTye,WAAY,QC5BDwF,GAAcvjB,gBAAgC,IAE9CwjB,GAAiBA,IACrBziB,aAAWwiB,6OCMPE,GAAwCjjB,WAACC,SACpDA,EAAQqJ,MAERA,GAGDtJ,EADIc,EAAKC,EAAAf,EAAAuB,KAGA2hB,OAAQC,IADFrX,aACoBkX,MAC5BI,EFkEI,CACNle,QAAS,OACTme,kBAAmB,MACnBC,kBAAmB,QACnBC,kBAAmB,iBACnB/X,MAAO,eEpELgY,EAAWrf,OAAAC,UACZgf,QACAD,SAAAA,EAAeM,OACf3iB,GACHwI,MAAKnF,OAAAC,gBACAgf,SAAAA,EAAe9Z,YACf6Z,UAAaO,EAAbP,EAAeM,eAAfC,EAAuBpa,MACvBA,KAIP,OAAOnJ,gBAACqD,wBAASggB,GAAcvjB,IAGpB0jB,GAA0CxgB,WAAClD,SACtDA,EAAQqJ,MAERA,GAGDnG,EADIrC,EAAKC,EAAAoC,EAAAqB,KAGA0e,OAAQC,IADFrX,aACoBkX,MAC5BI,EF+CK,CACPle,QAAS,OACTsG,MAAO,eE9CLgY,EAAWrf,OAAAC,UACZgf,QACAD,SAAAA,EAAejI,QACfpa,GACHwI,MAAKnF,OAAAC,gBACAgf,SAAAA,EAAe9Z,YACf6Z,UAAaS,EAAbT,EAAejI,gBAAf0I,EAAwBta,MACxBA,KAIP,OAAOnJ,gBAACqD,wBAASggB,GAAcvjB,IAGpB4jB,GAAwCvf,WAACrE,SACpDA,EAAQqJ,MAERA,GAGDhF,EADIxD,EAAKC,EAAAuD,EAAA6B,KAGA+c,OAAQC,IADFrX,aACoBkX,MAC5BI,EFyBI,CACNle,QAAS,OACT4e,eAAgB,MAChBC,eAAgB,QAChBC,eAAgB,kBE1BdR,EAAWrf,OAAAC,UACZgf,QACAD,SAAAA,EAAec,OACfnjB,GACHwI,MAAKnF,OAAAC,gBACAgf,SAAAA,EAAe9Z,YACf6Z,UAAae,EAAbf,EAAec,eAAfC,EAAuB5a,MACvBA,KAIP,OAAOnJ,gBAACqD,wBAASggB,GAAcvjB,IAGpBkkB,GAAgCje,WAACtF,QAC5CA,EAAU,UAASqK,KACnBA,EAAO,KAAItK,MACXA,EAAQ,UAASV,SACjBA,EAAQwjB,OACRA,EAAMQ,OACNA,EAAMG,YACNA,GAAc,EAAKvjB,MACnBA,EAAKyI,MACLA,GAGDpD,EADIpF,EAAKC,EAAAmF,EAAAlF,IAGFoiB,GADQtX,aFxBP,CACL3K,UAAW,CACTlC,gBAAiB,cACjBuM,MAAO,cACP3M,aAAc,MACd6E,SAAU,SACVgC,WAAY,iBAEd+d,OAAQ,CACNve,QAAS,OACTme,kBAAmB,MACnBC,kBAAmB,QACnBC,kBAAmB,iBACnB/X,MAAO,eAET0P,QAAS,CACPhW,QAAS,OACTsG,MAAO,eAETyY,OAAQ,CACN/e,QAAS,OACT4e,eAAgB,MAChBC,eAAgB,QAChBC,eAAgB,oBEKdK,EAAeliB,UACnB,MACE+gB,OAAQ,CACN/hB,UAASgD,OAAAC,UAAOgf,EAAcjiB,gBAAcN,SAAAA,EAAOM,WACnDsiB,OAAMtf,OAAAC,UAAOgf,EAAcK,aAAW5iB,SAAAA,EAAO4iB,QAC7CvI,QAAO/W,OAAAC,UAAOgf,EAAclI,cAAYra,SAAAA,EAAOqa,SAC/C+I,OAAM9f,OAAAC,UAAOgf,EAAca,aAAWpjB,SAAAA,EAAOojB,WAGjD,CAACb,EAAeviB,IAKZyjB,EAAuBnkB,EAAM2D,SAASygB,QAAQtkB,GAAUukB,KAC3DxgB,GACC7D,EAAM8D,eAAeD,KACpBA,EAAMpE,OAASqjB,IACdjf,EAAMpE,OAAS+jB,IACf3f,EAAMpE,OAASikB,KASfY,EAAetgB,OAAAC,QACnBlD,MAAOkjB,EAAc,OAAS,OAC9BvlB,aAAcikB,GAAWniB,GACzB+C,SAAU,UFlGL,CACL1E,QAAS,CACPC,gBAAiB,cACjBylB,OAAQ,OACRhf,WAAY,iBAEdif,SAAU,CACR1lB,gBAAiB,cACjBC,YAAa,MACbE,YAAa,QACbC,YAAa,iBACbqG,WAAY,gBACZwc,OAAQ,CACN7iB,YAAa,mBAGjBulB,SAAU,CACR3lB,gBAAiB,cACjBgc,UAAW,kCACXyJ,OAAQ,OACRhf,WAAY,gBACZwc,OAAQ,CACNjH,UAAW,mCACXtV,UAAW,sBEqEuC/E,GAQnDyjB,EAAanB,OAAO/hB,UACpBL,GACHwI,MAAKnF,OAAAC,iBAAAygB,EAAOR,EAAanB,OAAO/hB,kBAApB0jB,EAA+Bvb,MAAUA,KAGvD,OACEnJ,gBAAC4iB,GAAY3iB,UAASF,MAAOmkB,GAC3BlkB,gBAACqD,wBAASihB,GACPH,EACCrkB,EAEAE,gBAACc,gBACEwiB,GAAUtjB,gBAAC8iB,QAAYQ,GACxBtjB,gBAACwjB,QAAa1jB,GACbgkB,GAAU9jB,gBAAC0jB,QAAYI,OC5IvBa,GAJ+BhkB,GACnCX,gBAACgkB,oBAAarjB,IAMvBgkB,GAAKC,OAAS9B,GACd6B,GAAK7e,QAAU0d,GACfmB,GAAKE,OAASnB,GCRP,ICZMoB,GAAuD,CAClEC,IAAK,CACHhkB,MAAO,OACPsE,OAAQ,OACR3G,aAAc,MACdI,gBAAiB,iBACjBkmB,OAAQ,QACRhgB,OAAQ,UACRO,WAAY,8BAEd0f,KAAM,CACJlkB,MAAO,OACPsE,OAAQ,MACR3G,aAAc,MACdI,gBAAiB,iBACjBkmB,OAAQ,QACRhgB,OAAQ,UACRO,WAAY,8BAEd2f,OAAQ,CACNhI,SAAU,OACV7X,OAAQ,OACR3G,aAAc,MACdI,gBAAiB,iBACjBkmB,OAAQ,QACRhgB,OAAQ,UACRM,QAAS,OACTL,WAAY,SACZC,eAAgB,SAChBmB,SAAU,OACVd,WAAY,+BAIH4f,GAA6D,CACxEJ,IAAK,CACHjmB,gBAAiB,iBAEnBmmB,KAAM,CACJnmB,gBAAiB,iBAEnBomB,OAAQ,CACNpmB,gBAAiB,gBACjBuM,MAAO,gBAIE+Z,GAAoC,CAC/CrkB,MAAO,OACPsE,OAAQ,OACR3G,aAAc,MACdI,gBAAiB,cACjBuM,MAAO,iBACP/F,QAAS,OACTL,WAAY,SACZC,eAAgB,SAChBF,OAAQ,UACR8V,UAAW,+BACXuK,OAAQ,EACR9f,WAAY,6BACZwc,OAAQ,CACNjjB,gBAAiB,mBAKRwmB,GAA2BA,MACtCtkB,UAAW,CACTmH,SAAU,WACV5E,SAAU,UAEZwX,QAAS,CACPxX,SAAU,SACVxC,MAAO,OACPsE,OAAQ,QAEVkgB,eAAgB,CACdjgB,QAAS,OAETkgB,mBAAoB,YACpBC,mBAAoB,QACpBC,yBAA0B,cAC1BrgB,OAAQ,QAEV3B,KAAM,CACJiiB,KAAM,WACNzI,SAAU,EACV/U,SAAU,WACV9C,OAAQ,QAEVugB,WAAU5hB,OAAAC,QACRkE,SAAU,WACVG,IAAK,MACL2T,KAAM,OACNzW,UAAW,mBACX6f,OAAQ,IACLD,IAELS,WAAU7hB,OAAAC,QACRkE,SAAU,WACVG,IAAK,MACL0T,MAAO,OACPxW,UAAW,mBACX6f,OAAQ,IACLD,MCxGMU,GAAkBzmB,gBAA2C,MAE7D0mB,GAAqBA,KAChC,IAAM5lB,EAAUC,aAAW0lB,IAC3B,IAAK3lB,EACH,MAAM,IAAIE,MACR,+DAGJ,OAAOF,+bCUI6lB,GAA8CnmB,QAACC,SAC1DA,EAAQmmB,SACRA,EAAQvlB,MACRA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,IAER,OACEpB,gBAACqD,sBACC6iB,WAAY,EACZnlB,MAAM,OACNsE,OAAO,OACPC,QAAS2gB,EAAW,QAAU,QAC1BvlB,EACAC,GAEHb,IAQMqmB,GAA6DnjB,QAACtC,MACzEA,EAAKZ,SACLA,GAEDkD,EADIrC,EAAKC,EAAAoC,EAAAqB,KAEF+hB,aACJA,EAAYC,cACZA,EACAtD,OAAQuD,GACNP,KACE9C,EAAgBqC,KAA2BM,WAC3CW,EAAYviB,OAAAC,UACbgf,QACAqD,SAAAA,EAAcV,iBACdllB,SAAAA,EAAOklB,YAGZ,OACE5lB,gBAACyiB,+BACY,iBACX5d,QAASA,IAAMuhB,IACfnjB,YAAaojB,GACRE,EACD5lB,SAEHb,EAAAA,EAAYE,gBAACkM,IAAYZ,YAAY,OAAOF,YAAa,OAMnDob,GAAqDriB,QAACzD,MACjEA,EAAKZ,SACLA,GAEDqE,EADIxD,EAAKC,EAAAuD,EAAA6B,KAEFygB,SAAEA,EAAQC,UAAEA,EAAW3D,OAAQuD,GAAiBP,KAChD9C,EAAgBqC,KAA2BO,WAC3CU,EAAYviB,OAAAC,UACbgf,QACAqD,SAAAA,EAAcT,iBACdnlB,SAAAA,EAAOmlB,YAGZ,OACE7lB,gBAACyiB,+BACY,aACX5d,QAASA,IAAM4hB,IACfxjB,YAAayjB,GACRH,EACD5lB,SAEHb,EAAAA,EAAYE,gBAACkM,IAAYZ,YAAY,QAAQF,YAAa,OAMpDub,GAAqD5gB,QAACjG,SACjEA,EAAQY,MACRA,GAEDqF,EADIpF,EAAKC,EAAAmF,EAAAlF,KAEF+lB,cACJA,EAAaC,gBACbA,EACA9D,OAAQuD,GACNP,KACEe,EAAale,SAAsB,MAGzC1G,YAAU,KACR,IAAMqC,EAAKqiB,IAEX,OADAE,EAAW5d,QAAU3E,EACd,KACsB,OAAvBuiB,EAAW5d,SACb2d,EAAgBC,EAAW5d,WAG9B,CAAC0d,EAAeC,IAEnB,IAAM5D,EAAgBqC,KAA2B5hB,KAC3C6iB,EAAYviB,OAAAC,UACbgf,QACAqD,SAAAA,EAAc5iB,WACdhD,SAAAA,EAAOgD,MAGZ,OACE1D,gBAACqD,sBACC4C,KAAK,+BACgB,SACjBsgB,EACA5lB,GAEHb,IAMMinB,GAA2DxmB,QAACT,SACvEA,EAAQY,MACRA,EAAKyI,MACLA,GAED5I,EADII,EAAKC,EAAAL,EAAA6L,KAEF4a,aACJA,EACAjE,OAAQuD,EAAYljB,UACpBA,GACE2iB,KACE9C,EAAgBqC,KAEhB2B,EAAmBjjB,OAAAC,UACpBgf,EAAclI,cACduL,SAAAA,EAAcvL,cACdra,SAAAA,EAAOqa,SAENmM,EAAiBljB,OAAAC,UAClBgf,EAAcsC,qBACde,SAAAA,EAAcf,qBACd7kB,SAAAA,EAAO6kB,gBAIN4B,MAAgC,IAAfH,MAEvB,OAEEhnB,gBAACqD,wBACK4jB,EACAtmB,GACJwI,MAAKnF,OAAAC,gBAAOgjB,SAAAA,EAAqB9d,MAAUA,GAC3C5E,GAAInB,cACM,WAGVpD,gBAACqD,wBACK6jB,GACJ/d,MAAKnF,OAAAC,gBACAijB,SAAAA,EAAmB/d,OACtB3D,wBAAyB2hB,UAG1BrnB,KAQIsnB,GAAwC3a,QAAC3M,SACpDA,EAAQunB,mBACRA,EAAqB,EACrBC,YAAaC,EAAqBC,SAClCA,EAAQC,eACRA,GAAiB,EAAIC,mBACrBA,EAAqB,SAAQ9B,WAC7BA,EAAUC,WACVA,EAAU8B,eACVA,GAAiB,EAAIC,kBACrBA,EAAoB,SAAQC,iBAC5BA,EAAmB,MAAKC,SACxBA,GAAW,EAAKC,iBAChBA,EAAmB,IAAIC,aACvBA,GAAe,EAAIC,SACnBA,GAAW,EAAIC,UACfA,EAAY,aAAYzC,mBACxBA,EAAqB,IAAG/kB,MACxBA,GAID+L,EADI9L,EAAKC,EAAA6L,EAAAC,IAGFyb,EAASnmB,UAAQ,IACdhC,EAAM2D,SAASygB,QAAQtkB,GAC7B,CAACA,IAGEsoB,EHpNwBvoB,CAAAA,QAACwnB,mBAC/BA,EAAqB,EACrBC,YAAaC,EAAqBC,SAClCA,EAAQM,SACRA,GAAW,EAAKC,iBAChBA,EAAmB,IAAIC,aACvBA,GAAe,EAAIC,SACnBA,GAAW,EACXI,YAAaC,EAAkBC,YAC/BA,GACmB1oB,EAEb2oB,EAAgB5f,SAAe0f,GAAsB,IACpDD,EAAaI,GAAkB1mB,WAASumB,GAAsB,GAC/DI,EAAgB9f,SAAoB,IAAI+f,KACxCC,EAAchgB,SAAe,GAC7BxF,EAAYpB,UAAQ,IAAM9D,EAAW,oBAAqB,KACzDopB,EAAauB,GAAkB9mB,gBACVP,IAA1B+lB,EACIA,EACAF,IAEChJ,EAAWE,GAAgBxc,YAAS,IACpC+mB,EAAYC,GAAiBhnB,YAAS,IACtCinB,EAAYC,GAAiBlnB,WAAS,IACtCmnB,EAAYC,GAAiBpnB,WAAS,GACvCqnB,EAAmBxgB,SAA8B,MAGvD1G,YAAU,UACsBV,IAA1B+lB,GACFsB,EAAetB,IAEhB,CAACA,IAGJ,IAAM8B,EAAY9mB,cACf+mB,IACC,IAAIC,EAAWD,EAef,GAZIrB,EACEqB,EAAQ,EACVC,EAAWlB,EAAc,EAChBiB,GAASjB,IAClBkB,EAAW,GAIbA,EAAWnrB,KAAKorB,IAAI,EAAGprB,KAAKqrB,IAAIH,EAAOjB,EAAc,IAInDE,GAAeA,EAAYlmB,OAAS,EAEtC,GAAIkmB,EAAY5lB,SAAS4mB,QAElB,CAEL,IAAMG,EAAenB,EAAYoB,OAAO,CAACC,EAAMC,IACtCzrB,KAAK0rB,IAAID,EAAON,GAAYnrB,KAAK0rB,IAAIF,EAAOL,GAC/CM,EACAD,GAENL,EAAWG,OAIeloB,IAA1B+lB,GACFsB,EAAeU,GAGb/B,GACFA,EAAS+B,IAGb,CAAChC,EAAuBU,EAAUT,EAAUa,IAIxC0B,EAAYxnB,cAAY,KAC5B8mB,EAAU/B,EAAc,IACvB,CAACA,EAAa+B,IAGXW,EAAYznB,cAAY,KAC5B8mB,EAAU/B,EAAc,IACvB,CAACA,EAAa+B,IAGjBnnB,YAAU,MACJ4lB,GAAazJ,GAAcyK,IAC7BM,EAAiBlgB,QAAU2W,YAAY,KACrCkK,KACChC,IAGE,KACDqB,EAAiBlgB,SACnB6W,cAAcqJ,EAAiBlgB,WAGlC,CACD4e,EACAC,EACA1J,EACAyK,EACAiB,EACA/B,IAIF,IAAMiC,EAAmB1nB,cAAY,KAC/BylB,GACFzJ,GAAa,IAEd,CAACyJ,IAEEkC,EAAmB3nB,cAAY,KACnCgc,GAAa,IACZ,IAGG4L,EAAkB5nB,cACrB6nB,IACCrB,GAAc,GAEV,YAAaqB,GACfnB,EAAcmB,EAAEC,QAAQ,GAAGC,SAC3BnB,EAAciB,EAAEC,QAAQ,GAAGE,WAE3BtB,EAAcmB,EAAEE,SAChBnB,EAAciB,EAAEG,WAGpB,IAGIC,EAAiBjoB,cACpB6nB,IACC,GAAKtB,EAAL,CAEA,IAAI2B,EACAC,EAEA,YAAaN,GACfK,EAAWL,EAAEC,QAAQ,GAAGC,QACxBI,EAAWN,EAAEC,QAAQ,GAAGE,UAExBE,EAAWL,EAAEE,QACbI,EAAWN,EAAEG,SAGf,IAAMI,EAAQF,EAAWzB,EACnB4B,EAAQF,EAAWxB,EAGrB9qB,KAAK0rB,IAAIa,GAASvsB,KAAK0rB,IAAIc,IAAUxsB,KAAK0rB,IAAIa,GAAS,KACrDA,EAAQ,EACVX,IAEAD,IAEFhB,GAAc,MAGlB,CAACD,EAAYE,EAAYE,EAAYa,EAAWC,IAG5Ca,EAAgBtoB,cAAY,KAChCwmB,GAAc,IACb,IAGGnC,EAAgBrkB,cAAY,KAChC,IAAMgC,EAAKqkB,EAAY1f,UACvBwf,EAAcxf,QAAQ4hB,IAAIvmB,GAC1B,IAAMwmB,EAAWrC,EAAcxf,QAAQ4B,KAGvC,OAFA0d,EAActf,QAAU6hB,EACxBtC,EAAesC,GACRxmB,GACN,IAEGsiB,EAAkBtkB,cACrBgC,IACCmkB,EAAcxf,QAAQ8hB,OAAOzmB,GAC7B,IAAMwmB,EAAWrC,EAAcxf,QAAQ4B,KAKvC,GAJA0d,EAActf,QAAU6hB,EACxBtC,EAAesC,GAGXA,EAAW,GAAKzD,GAAeyD,EAAU,CAC3C,IAAMxB,EAAWnrB,KAAKorB,IAAI,EAAGuB,EAAW,QACVvpB,IAA1B+lB,GACFsB,EAAeU,GAEb/B,GACFA,EAAS+B,KAIf,CAACjC,EAAaC,EAAuBC,IAOvC,MAAO,CACLF,YAAAA,EACAe,YAAAA,EACAgB,UAAAA,EACAU,UAAAA,EACAC,UAAAA,EACAtD,UARgBuB,GAAYX,EAAce,EAAc,EASxDhC,cAVoB4B,GAAYX,EAAc,EAW9C2C,iBAAAA,EACAC,iBAAAA,EACAC,gBAAAA,EACAK,eAAAA,EACAK,cAAAA,EACAjE,cAAAA,EACAC,gBAAAA,EACAzjB,UAAAA,EACA6kB,SAAAA,IGZoBgD,CAAiB,CACrC5D,mBAAAA,EACAC,YAAaC,EACbC,SAAAA,EACAM,SAAAA,EACAC,iBAAAA,EACAC,aAAAA,EACAC,SAAAA,EACAI,YAAaF,EAAO9lB,UAGhBilB,YACJA,EAAWe,YACXA,EAAWgB,UACXA,EAASU,UACTA,EAASC,UACTA,EAASC,iBACTA,EAAgBC,iBAChBA,EAAgBC,gBAChBA,EAAeK,eACfA,EAAcK,cACdA,GACEzC,EA8GJ,OAZ8BpmB,UAAQ,IAC7BhC,EAAM2D,SAASygB,QAAQtkB,GAAUukB,KACrCxgB,GACC7D,EAAM8D,eAAeD,KACpBA,EAAMpE,OAASsnB,IACdljB,EAAMpE,OAASknB,IACf9iB,EAAMpE,OAAS0mB,IACftiB,EAAMpE,OAAS+mB,KAEpB,CAAC1mB,IAKAE,gBAAC8lB,GAAgB7lB,UACfF,MAAO,CACLinB,aAAcM,EACde,YAAAA,EACAgB,UAAAA,EACA5C,SAAUsD,EACV3D,aAAc4D,EACdtD,UAAW0B,EAAc1B,UACzBL,cAAe+B,EAAc/B,cAC7BO,cAAewB,EAAcxB,cAC7BC,gBAAiBuB,EAAcvB,gBAC/B9D,OAAM/e,OAAAC,UACDqhB,KACA5kB,GAEL0C,UAAWglB,EAAchlB,UACzB6kB,SAAAA,IAGFjoB,gBAACqD,sBACC4C,KAAK,gCACgB,wBACV,WACXkC,SAAS,WACTpH,MAAM,OACNsE,OAAO,OACP9B,SAAS,gBACL7C,SAAAA,EAAOM,UACPL,GAEHb,IAQPE,gBAACqD,sBACC8E,SAAS,WACTpH,MAAM,OACNsE,OAAO,OACP9B,SAAS,SACTob,aAAcsL,EACdrL,aAAcsL,EACdgB,aAAcf,EACdgB,YAAaX,EACbY,WAAYP,EACZQ,YAAalB,EACbmB,YAAad,EACbe,UAAWV,SACPnqB,SAAAA,EAAOM,UACPL,GAEJX,gBAACqD,sBACCtC,MAAM,OACNsE,OAAO,OACP8C,SAAS,kBACLzH,SAAAA,EAAO8qB,cAEVrD,EAAOvkB,IAAI,CAAC6nB,EAAOnC,IAClBtpB,gBAACgmB,IACC0F,IAAKpC,EACLrD,SAAUqD,IAAUhC,EACpBgC,MAAOA,EACP5oB,YAAOA,SAAAA,EAAO+qB,OAEbA,KA7KcE,MACvB,IAAKlE,EAAgB,OAAO,KAE5B,IAAMmE,EAAoBhG,GACxB5lB,gBAACqD,sBACC6E,GAAG,sBACQ,kBACPkd,SACA1kB,SAAAA,EAAOklB,iBAMTiG,EAAoBhG,GACxB7lB,gBAACqD,sBACC6E,GAAG,sBACQ,cACPkd,SACA1kB,SAAAA,EAAOmlB,iBAMf,OACE7lB,gCACEA,gBAACqD,QACC8E,SAAS,WACTG,IAAI,MACJ9C,UAAU,mBACVyW,KAA6B,WAAvByL,EAAkC,OAAS,QACjD7iB,QAASmlB,EACThlB,OAASijB,GAA4B,IAAhBX,EAAoC,UAAhB,cACzC9jB,QAAUykB,GAA4B,IAAhBX,EAA0B,EAAN,IAEzCsE,GAEH5rB,gBAACqD,QACC8E,SAAS,WACTG,IAAI,MACJ9C,UAAU,mBACVwW,MAA8B,WAAvB0L,EAAkC,OAAS,QAClD7iB,QAASklB,EACT/kB,OACGijB,GAAYX,IAAgBa,EAAO9lB,OAAS,EAEzC,UADA,cAGNmB,QAAUykB,GAAYX,IAAgBa,EAAO9lB,OAAS,EAAU,EAAN,IAEzDwpB,KA+HJF,GAvHEhE,EAGH3nB,gBAACoF,4BACC+C,SAAS,WACT8T,KAAK,IACLD,MAAM,IACN9W,eAAe,UACY,QAAtB0iB,EACD,CAAEtf,IAAK,QACP,CAAEF,OAAQ,cACV1H,SAAAA,EAAOorB,YAEV3D,EAAOvkB,IAAI,CAACmoB,EAAGzC,IACdtpB,gBAACqD,sBACCqoB,IAAKpC,EACLzkB,QAASA,IAAMwkB,EAAUC,GACzBtkB,OAAO,WACH8f,GAAgB+C,GACfyB,IAAUhC,EAAWtjB,OAAAC,UACjBkhB,GAAsB0C,IAC3B,SACAnnB,SAAAA,EAAOsrB,UACN1C,IAAUhC,QAAc5mB,SAAAA,EAAOurB,gBAAkB,IAEhC,WAArBpE,GAAiCyB,EAAQ,KAzBtB,OCnSnB4C,GAJuCvrB,GAC3CX,gBAAConB,oBAAiBzmB,IAM3BurB,GAASC,MAAQnG,GACjBkG,GAASpmB,QAAUihB,GACnBmF,GAASnpB,KAAO4jB,GAChBuF,GAASE,SAAWjG,GACpB+F,GAASG,KAAO7F,GCtBhB,ICJa8F,GDqBuB,CAf5B,iBACC,kBACC,mBACA,mBACH,gBAGC,iBACA,iBACE,mBACA,mBACF,kBCdKC,GAAkC,CAC7CxrB,MAAO,OACPsE,OAAQ,OACR8C,SAAU,WACV7C,QAAS,OACTob,cAAe,UAIJ8L,GAA8B,CACzCnmB,SAAU,OACVE,WAAY,OACZjD,aAAc,OACdya,UAAW,UAIA0O,GAA+B,CAC1CnnB,QAAS,OACT+V,SAAU,OACVnW,eAAgB,SAChBqW,UAAW,QAIAmR,GAA8B,CACzCpnB,QAAS,OACTL,WAAY,SACZ0nB,YAAa,OACbrpB,aAAc,OAIHspB,GAA+B,CAC1C7rB,MAAO,OACPsE,OAAQ,OACR3G,aAAc,MACdiuB,YAAa,OAIFE,GAA8B,CACzCxmB,SAAU,QAICymB,GAA2B,CACtC3kB,SAAU,WACVrJ,gBAAiB,cACjBiG,QAAS,WACTrG,aAAc,MACdoc,UAAW,+BACXzU,SAAU,OACV5C,cAAe,OACf4hB,OAAQ,IAIG0H,GAAwB,CACnCnhB,OAAQ,iBACRH,YAAa,OAIFuhB,GAAwB,CACnCphB,OAAQ,iBACRH,YAAa,OAIFwhB,GAA6B,CACxC5mB,SAAU,OACVV,KAAM,kBAIKunB,GAAuB,CAClCjgB,GAAI,MACJC,GAAI,MACJlI,OAAQ,UACRO,WAAY,oBACZwc,OAAQ,CACNve,QAAS,KAKA2pB,GAAwB,CACnC1hB,YAAa,MACb9F,KAAM,QAIKynB,GAAyB,CACpC7gB,EAAG,MACHd,YAAa,MACbG,OAAQ,QACR5G,OAAQ,UACRO,WAAY,eAID8nB,GAA4B,CACvC5hB,YAAa,MACbG,OAAQ,QACR5G,OAAQ,UACRO,WAAY,oBACZwc,OAAQ,CACNve,QAAS,KAKA8pB,GAA+B,CAC1CnlB,SAAU,WACVG,IAAK,EACL2T,KAAM,EACND,MAAO,EACP5T,OAAQ,EACR9C,QAAS,OACTL,WAAY,SACZC,eAAgB,SAChBpG,gBAAiB,2BACjBJ,aAAc,MACd2mB,OAAQ,GACRtgB,QAAS,OACTgZ,UAAW,UAIAwP,GAAoBvpB,OAAAC,UAC5BqpB,IAIQE,GAAkBxpB,OAAAC,UAC1BqpB,IACHxuB,gBAAiB,2BACjBuM,MAAO,kBAIIoiB,GAAmBzpB,OAAAC,UAC3BqpB,IACHxuB,gBAAiB,2BACjBuM,MAAO,mBClIIqiB,GAAoC7tB,QAAC8tB,KAChDA,EAAI5sB,MACJA,EAAKsE,OACLA,EAAMuoB,kBACNA,EAAiBC,SACjBA,GAAW,EAAIC,WACfA,EAAUC,YACVA,EAAWC,YACXA,EAAWttB,MACXA,GACDb,GACO6L,SAAEA,GAAaC,aAGfsiB,EAAaltB,EADqC,GAAtB,GAE5BmtB,EAAc7oB,EAFG,GAAuB,GAKxC8oB,EAAWnsB,UAAQ,KACvB,IAAIwnB,EAAM,EAMV,OALAmE,EAAKS,OAAOC,QAASD,IACnBA,EAAOT,KAAKU,QAAStuB,IACnBypB,EAAMprB,KAAKorB,IAAIA,EAAKzpB,OAGjBypB,GACN,CAACmE,IAIEW,EAAcX,EAAKS,OAAO/rB,OAC1BksB,EAAaN,EAFFN,EAAKa,OAAOnsB,OAGvBosB,EAAyB,GAAbF,EAAoBD,EAChCI,EAA2B,GAAbH,GAAqBD,EAAc,GAGjDK,EAAa3sB,UAAQ,KAIzB,IAHA,IACM4sB,EAAe,GAEZC,EAAI,EAAGA,GAHE,EAGcA,IAE9BD,EAAME,KADSX,EAJC,EAIuBU,GAIzC,OAAOD,GACN,CAACT,IAEJ,OACEnuB,uBAAKe,MAAOA,EAAOsE,OAAQA,GAEzBrF,sCACEkO,GAvCkD,GAwClDC,GAAI9I,EAxCoC,GAyCxC+I,GAAIrN,EAzCwB,GA0C5BsN,GAAIhJ,EA1CoC,IA2CpC2nB,SACAtsB,SAAAA,EAAOquB,OAIb/uB,sCACEkO,GAjDkD,GAkDlDC,GAlDiB,GAmDjBC,GAnDkD,GAoDlDC,GAAIhJ,EApDoC,IAqDpC2nB,SACAtsB,SAAAA,EAAOquB,OAIZpB,EAAKa,OAAO5qB,IAAI,CAACorB,EAAO1F,IAKrBtpB,sCACE0rB,eAAgBpC,EAChBvc,EAjE8C,IA2DxBuc,EAAQ,IAAOiF,EAOrCvhB,EANM3H,EA5D8B,GA4DJ,GAOhC4pB,WAAW,UACPhC,SACAvsB,SAAAA,EAAOwuB,WAEVF,IAMNL,EAAW/qB,IAAI,CAACurB,EAAM7F,KACrB,IAAMtc,EAAI3H,EA9E8B,GA8EH8pB,EAAOhB,EAAYD,EAExD,OACEluB,gBAACA,EAAMovB,UAAS1D,cAAepC,GAC7BtpB,sCACE+M,EAAGhI,GACHiI,EAAGA,EACHiiB,WAAW,MACXI,iBAAiB,UACbpC,SACAvsB,SAAAA,EAAOwuB,WAEVC,EAAKG,QAAQ,IAGfzB,GACC7tB,sCACEkO,GA/F0C,GAgG1CC,GAAInB,EACJoB,GAAIrN,EAjGgB,GAkGpBsN,GAAIrB,GACA+f,SACArsB,SAAAA,EAAO6uB,UAQpB5B,EAAKS,OAAOxqB,IAAI,CAACwqB,EAAQoB,IACxBxvB,gBAACA,EAAMovB,UAAS1D,cAAe8D,GAC5BpB,EAAOT,KAAK/pB,IAAI,CAAC7D,EAAO0vB,KACvB,IAAMC,EACH3vB,EAAQouB,EAAYD,EAAcN,EAmBrC,OACE5tB,sCACE0rB,WAAY8D,MAAeC,EAC3B1iB,EAtI0C,GAmH5C0iB,EAAYlB,EACZG,GAAcc,EAAc,GAC5Bf,EAAWe,EAkBTxiB,EAjBM3H,EAtH0B,GAsHAqqB,EAkBhC3uB,MAAO0tB,EACPppB,OAAQqqB,EACR/pB,KAAMyoB,EAAO/iB,MAAQK,EAAS0iB,EAAO/iB,OAAS,QAC9CsT,aAnBsByL,IAExB2D,EAAY3D,EAAEE,QAASF,EAAEG,QADC6D,EAAOuB,UAAS5vB,IAmBxC6e,aAAcoP,EACdnpB,QAhBgBC,KACdgpB,GACFA,EAAWM,EAAOuB,KAAMF,KAepBvC,SACAxsB,SAAAA,EAAOkvB,YC3JdC,GAAsChwB,QAAC8tB,KAClDA,EAAI5sB,MACJA,EAAKsE,OACLA,EAAMuoB,kBACNA,EAAiBC,SACjBA,GAAW,EAAIiC,aACfA,EAAY/B,YACZA,EAAWC,YACXA,EAAWttB,MACXA,GACDb,GAEO6L,SAAEA,GAAaC,aAGfsiB,EAAaltB,EADqC,GAAtB,GAE5BmtB,EAAc7oB,EAFG,GAAuB,GAKxC8oB,EAAWnsB,UAAQ,KACvB,IAAIwnB,EAAM,EAMV,OALAmE,EAAKS,OAAOC,QAASD,IACnBA,EAAOT,KAAKU,QAAStuB,IACnBypB,EAAMprB,KAAKorB,IAAIA,EAAKzpB,OAGjBypB,GACN,CAACmE,IAGEgB,EAAa3sB,UAAQ,KAIzB,IAHA,IACM4sB,EAAkB,GAEfC,EAAI,EAAGA,GAHE,EAGcA,IAE9BD,EAAME,KADiBX,EAJP,EAI+BU,GAIjD,OAAOD,GACN,CAACT,IAGE4B,EAAgB3B,QACLA,EAAOxqB,IAAI,CAAC7D,EAAOupB,IA9BoB,GA+B1BA,GAASqE,EAAKa,OAAOnsB,OAAS,GAAM4rB,OAE5D5oB,EAjCwC,GAmCvCtF,EAAQouB,EAAYD,EAAcN,IAIpBoC,KAAK,OAIpBC,EAAoB7B,IACxB,IACM8B,EA7CgD,GA6C1BjC,EACtBkC,EAAQ9qB,EA9C8B,GAyD5C,cAAsB8qB,QATP/B,EAAOxqB,IAAI,CAAC7D,EAAOupB,IAhDoB,GAiD1BA,GAASqE,EAAKa,OAAOnsB,OAAS,GAAM4rB,OAE5D5oB,EAnDwC,GAqDvCtF,EAAQouB,EAAYD,EAAcN,IAICoC,KAAK,aAAYE,MAAQC,QAGnE,OACEnwB,uBAAKe,MAAOA,EAAOsE,OAAQA,GAEzBrF,sCACEkO,GAhEkD,GAiElDC,GAAI9I,EAjEoC,GAkExC+I,GAAIrN,EAlEwB,GAmE5BsN,GAAIhJ,EAnEoC,IAoEpC2nB,SACAtsB,SAAAA,EAAOquB,OAIb/uB,sCACEkO,GA1EkD,GA2ElDC,GA3EiB,GA4EjBC,GA5EkD,GA6ElDC,GAAIhJ,EA7EoC,IA8EpC2nB,SACAtsB,SAAAA,EAAOquB,OAIZpB,EAAKa,OAAO5qB,IAAI,CAACorB,EAAO1F,IAMrBtpB,sCACE0rB,eAAgBpC,EAChBvc,EA3F8C,GAqFhCuc,GAASqE,EAAKa,OAAOnsB,OAAS,GAAM4rB,EAOlDjhB,EANM3H,EAtF8B,GAsFJ,GAOhC4pB,WAAW,UACPhC,SACAvsB,SAAAA,EAAOwuB,WAEVF,IAMNL,EAAW/qB,IAAI,CAACurB,EAAM7F,KACrB,IAAMtc,EAAI3H,EAxG8B,GAwGH8pB,EAAOhB,EAAYD,EAExD,OACEluB,gBAACA,EAAMovB,UAAS1D,cAAepC,GAC7BtpB,sCACE+M,EAAGhI,GACHiI,EAAGA,EACHiiB,WAAW,MACXI,iBAAiB,UACbpC,SACAvsB,SAAAA,EAAOwuB,WAEVC,EAAKG,QAAQ,IAGfzB,GACC7tB,sCACEkO,GAzH0C,GA0H1CC,GAAInB,EACJoB,GAAIrN,EA3HgB,GA4HpBsN,GAAIrB,GACA+f,SACArsB,SAAAA,EAAO6uB,UAQpB5B,EAAKS,OAAOxqB,IAAI,CAACwqB,EAAQoB,IACxBxvB,gBAACA,EAAMovB,UAAS1D,cAAe8D,GAE7BxvB,sCACE6F,EAAGoqB,EAAiB7B,EAAOT,MAC3BhoB,KAAMyoB,EAAO/iB,MAAQK,EAAS0iB,EAAO/iB,OAAS,QAC9C7H,QAAS,UACL9C,SAAAA,EAAO0vB,OAIbpwB,sCACE6F,EAAGkqB,EAAa3B,EAAOT,MACvB/hB,OAAQwiB,EAAO/iB,MAAQK,EAAS0iB,EAAO/iB,OAAS,SAC5C8hB,SACAzsB,SAAAA,EAAOukB,OAIZmJ,EAAOT,KAAK/pB,IAAI,CAAC7D,EAAO0vB,IAqBrBzvB,wCACE0rB,aAAc8D,MAAeC,EAC7BpjB,GAhL0C,GA4J3CojB,GAAa9B,EAAKa,OAAOnsB,OAAS,GAAM4rB,EAqBvC3hB,GAnBFjH,EA9JkC,GAgKjCtF,EAAQouB,EAAYD,EAAcN,EAkBjCjoB,KAAMyoB,EAAO/iB,MACbsT,aAjBsByL,IAExB2D,EAAY3D,EAAEE,QAASF,EAAEG,QADC6D,EAAOuB,UAAS5vB,IAiBxC6e,aAAcoP,EACdnpB,QAdgBC,KACdgrB,GACFA,EAAa1B,EAAOuB,KAAMF,KAatBrC,SACA1sB,SAAAA,EAAO2vB,aC3MdC,GAAoCzwB,QAAC0wB,WAChDA,EAAUxvB,MACVA,EAAKsE,OACLA,EAAMuoB,kBACNA,EAAiB4C,QACjBA,GAAU,EAAKC,aACfA,EAAY1C,YACZA,EAAWC,YACXA,EAAWttB,MACXA,GACDb,GAEO6L,SAAEA,GAAaC,aAGf+kB,EADOtyB,KAAKqrB,IAAI1oB,EAAOsE,GACN,EAAK,GACtBsrB,EAAU5vB,EAAQ,EAClB6vB,EAAUvrB,EAAS,EACnBwrB,EAAcL,EAAmB,GAATE,EAAe,EAGvCI,EAAQ9uB,UAAQ,IACbuuB,EAAW5G,OAAO,CAACoH,EAAKV,IAAUU,EAAMV,EAAMtwB,MAAO,GAC3D,CAACwwB,IAGES,EAAShvB,UAAQ,KAIrB,IAHA,IAAMivB,EAAgB,GAClBC,GAAc9yB,KAAK+yB,GAAK,EAEnBtC,EAAI,EAAGA,EAAI0B,EAAWluB,OAAQwsB,IAAK,CAC1C,IAqBIuC,EApBEC,EADQd,EAAW1B,GAAG9uB,MACD+wB,EACrBpR,EAAqB,EAAb2R,EAAiBjzB,KAAK+yB,GAAKvD,EACnC0D,EAAWJ,EAAaxR,EAGxB6R,EAASZ,EAAUvyB,KAAKozB,IAAIN,GAAcR,EAC1Ce,EAASb,EAAUxyB,KAAKszB,IAAIR,GAAcR,EAC1CR,EAAOS,EAAUvyB,KAAKozB,IAAIF,GAAYZ,EACtCiB,EAAOf,EAAUxyB,KAAKszB,IAAIJ,GAAYZ,EAGtCkB,EAAcjB,EAAUvyB,KAAKozB,IAAIN,GAAcL,EAC/CgB,EAAcjB,EAAUxyB,KAAKszB,IAAIR,GAAcL,EAC/CiB,EAAYnB,EAAUvyB,KAAKozB,IAAIF,GAAYT,EAC3CkB,EAAYnB,EAAUxyB,KAAKszB,IAAIJ,GAAYT,EAG3CmB,EAAetS,EAAQthB,KAAK+yB,GAAK,EAAI,EAOzCC,EAFEZ,EAEK,MACAe,MAAUE,OACVf,MAAUA,QAAYsB,QAAkB9B,MAAQyB,OAChDG,MAAaC,OACblB,MAAeA,QAAiBmB,QAAkBJ,MAAeC,EACtE,KACA7B,KAAK,KAGA,MACAW,MAAWC,OACXW,MAAUE,OACVf,MAAUA,QAAYsB,QAAkB9B,MAAQyB,EACrD,KACA3B,KAAK,KAIT,IAAMiC,EAAaf,EAAaxR,EAAQ,EAClCwS,EAAuB,GAATxB,EACdyB,EAASxB,EAAUvyB,KAAKozB,IAAIS,GAAcC,EAC1CE,EAASxB,EAAUxyB,KAAKszB,IAAIO,GAAcC,EAG1CG,GAAkC,IAAbhB,GAAkB/B,QAAQ,OAM/CgD,EAAgB5mB,EAFpB6kB,EAAW1B,GAAGxjB,OAASihB,GAAeuC,EAAIvC,GAAejqB,SAI3D4uB,EAAOnC,KAAK,CACVsC,KAAAA,EACA/lB,MAAOinB,EACPtD,MAAOuB,EAAW1B,GAAGG,MACrBjvB,MAAOwwB,EAAW1B,GAAG9uB,MACrBsxB,WAAYgB,EACZF,OAAAA,EACAC,OAAAA,EACAlB,WAAAA,EACAI,SAAAA,EACAhI,MAAOuF,IAGTqC,EAAaI,EAGf,OAAOL,GACN,CACDV,EACAO,EACAJ,EACAC,EACAC,EACAC,EACAjD,EACA4C,IAGF,OACExwB,uBAAKe,MAAOA,EAAOsE,OAAQA,GAExB2rB,EAAOptB,IAAI,CAACqG,EAAOqf,IAahBtpB,qBAAG0rB,aAAcpC,GACftpB,sCACE6F,EAAGoE,EAAMmnB,KACTzrB,KAAMsE,EAAMoB,MACZsT,aAhBoByL,IAExB2D,EAAY3D,EAAEE,QAASF,EAAEG,QADCtgB,EAAM+kB,WAAU/kB,EAAMlK,WAAUkK,EAAMonB,iBAgB5DzS,aAAcoP,EACdnpB,QAbcC,KACd2rB,GACFA,EAAaF,EAAWtmB,EAAMqf,OAAQrf,EAAMqf,SAYtC+D,SACA3sB,SAAAA,EAAO6xB,MAIZtoB,EAAMqnB,SAAWrnB,EAAMinB,WAAa,IACnClxB,wBACE+M,EAAG9C,EAAMkoB,OACTnlB,EAAG/C,EAAMmoB,OACTnD,WAAW,SACXI,iBAAiB,SACjB1pB,KAAK,QACLU,SAAS,OACTE,WAAW,OACX9C,cAAc,QAEbwG,EAAMonB,cAQhBb,GACCxwB,0BAAQqM,GAAIskB,EAASrkB,GAAIskB,EAASrkB,EAAGskB,EAAalrB,KAAK,8UC7JlD6sB,GAAkC3yB,QAACJ,KAC9CA,EAAIkuB,KACJA,EAAI4C,WACJA,EAAUhmB,MACVA,EAAKkoB,WACLA,GAAa,EAAIC,eACjBA,EAAiB,SAAQ7E,SACzBA,GAAW,EAAI8E,aACfA,GAAe,EAAIC,SACnBA,GAAW,EAAIC,kBACfA,EAAoB,IAAGC,WACvBA,GAAa,EAAIC,YACjBA,EAAc,GAAK,EACnBhyB,MAAOiyB,EAAY,IACnB3tB,OAAQ4tB,EAAa,IAAGvyB,MACxBA,EAAKwyB,iBACLA,EAAgBC,cAChBA,EAAa9R,UACbA,GAAY,EAAKnG,MACjBA,EAAKkY,OACLA,EAAMC,iBACNA,EAAgBC,eAChBA,EAAcC,gBACdA,EACAC,aAAcC,GAIf5zB,EADIc,EAAKC,EAAAf,EAAAuB,KAGFwsB,kBACJA,EAAiB8F,QACjBA,EAAO/qB,aACPA,EAAYgrB,cACZA,EACA5F,YAAa6F,EACb5F,YAAa6F,EAAgBC,mBAC7BA,GCjDyBj0B,CAAAA,QAAC8tB,KAC5BA,EAAI4C,WACJA,EAAUqC,SACVA,GAAW,EAAIC,kBACfA,EAAoB,IAAGF,aACvBA,GAAe,GACC9yB,GAET+tB,EAAmBmG,GAAwBhyB,WAAS6wB,EAAW,EAAI,IAGnEc,EAASM,GAAcjyB,WAK3B,CACDkyB,SAAS,EACTlnB,EAAG,EACHC,EAAG,EACH+N,QAAS,KAILmZ,EAAetrB,SAAsB,MAGrCD,EAAeC,SAAuB,MAG5C1G,YAAU,KACR,GAAK0wB,EAAL,CAKA,IAAMuB,EAAYC,KAAKC,MAEjBC,EAAUA,KACd,IAAMC,EAAUH,KAAKC,MAAQF,EACvBK,EAAWp2B,KAAKqrB,IAAI8K,EAAU1B,EAAmB,GAEvDkB,EAAqBS,GAEjBA,EAAW,IACbN,EAAahrB,QAAUurB,sBAAsBH,KAMjD,OAFAJ,EAAahrB,QAAUurB,sBAAsBH,GAEtC,KACDJ,EAAahrB,SACfwrB,qBAAqBR,EAAahrB,UArBpC6qB,EAAqB,IAwBtB,CAACnB,EAAUC,IAGd,IAAMc,EAAgBpxB,cAAY,IAC5BorB,EACF3pB,OAAAC,UACK0pB,GACHS,OAAQT,EAAKS,OAAOxqB,IAAI,CAACwqB,EAAQ9E,IAAKtlB,OAAAC,UACjCmqB,GACH/iB,MAAO+iB,EAAO/iB,OAASihB,GAAehD,EAAQgD,GAAejqB,aAK/DkuB,EACKA,EAAW3sB,IAAI,CAACysB,EAAO/G,IAAKtlB,OAAAC,UAC9BosB,GACHhlB,MAAOglB,EAAMhlB,OAASihB,GAAehD,EAAQgD,GAAejqB,WAIzD,KACN,CAACsrB,EAAM4C,IAGJxC,EAAcxrB,cAClB,CAACwK,EAAWC,EAAW+N,KAChB4X,GAELqB,EAAW,CACTC,SAAS,EACTlnB,EAAAA,EACAC,EAAAA,EACA+N,QAAAA,KAGJ,CAAC4X,IAIG3E,EAAczrB,cAAY,KAC9ByxB,EAAYpK,GAAI5lB,OAAAC,UACX2lB,GACHqK,SAAS,MAEV,IAGGH,EAAqBvxB,cAAY,KACrC,IAAKoG,EAAaO,QAChB,MAAO,CAAEnI,MAAO,EAAGsE,OAAQ,GAG7B,IAAMtE,MAAEA,EAAKsE,OAAEA,GAAWsD,EAAaO,QAAQyrB,wBAC/C,MAAO,CAAE5zB,MAAAA,EAAOsE,OAAAA,IACf,IAEH,MAAO,CACLuoB,kBAAAA,EACA8F,QAAAA,EACA/qB,aAAAA,EACAgrB,cAAAA,EACA5F,YAAAA,EACAC,YAAAA,EACA8F,mBAAAA,IDtEEc,CAAc,CAChBjH,KAAAA,EACA4C,WAAAA,EACAqC,SAAAA,EACAC,kBAAAA,EACAF,aAAAA,IAIIkC,EAAYlB,KAGV5yB,MAAO+zB,EAAgBzvB,OAAQ0vB,GACrCjB,IACI/yB,EAAQiyB,GAAa8B,EACrBzvB,EACJ4tB,IAAeH,EAAagC,EAAiB/B,EAAcgC,GAGvDC,EAAeA,KACnB,IAAKvC,IAAeoC,EAAW,OAAO,KAEtC,IAAII,EAAe,GAenB,MAba,QAATx1B,GAA2B,UAATA,EAEhB6B,MAAMC,QAAQszB,KAChBI,EAAQJ,GAINA,GAAcA,EAAkBzG,SAClC6G,EAASJ,EAAkBzG,QAK1B6G,GAA0B,IAAjBA,EAAM5yB,OAGlBrC,gBAACoF,4BACCiW,SAAS,OACTnW,eAAe,SACfqW,UAA8B,WAAnBmX,EAA8B,OAAS,EAClDpvB,aAAiC,QAAnBovB,EAA2B,OAAS,GAC9CjG,SACA/rB,SAAAA,EAAOw0B,QAEVD,EAAMrxB,IAAI,CAACF,EAAW4lB,IACrBtpB,gBAACqD,sBACCqoB,cAAepC,GACXoD,SACAhsB,SAAAA,EAAOy0B,YAEXn1B,gBAACqD,sBAAKvE,gBAAiB4E,EAAK2H,OAAWuhB,KACvC5sB,gBAACkL,mBAAS2hB,IAAmBnpB,EAAKisB,MAAQjsB,EAAKsrB,UAlBd,MAkJrCoG,GAAoBla,IAAUmG,IAAc+R,EAElD,OACEpzB,gBAACqD,sBACCgH,IAAK1B,EACL1C,KAAK,4BARPwtB,EAAAA,EAA+B,iBAAVlpB,EAAqBA,EAAQ,oBAUrC8W,GACPkL,SACA7rB,SAAAA,EAAOM,UACPL,GAEH4J,GAASvK,gBAACkL,mBAASshB,IAAmBjiB,GAGtC6qB,GAAuC,QAAnB1C,GAA4BsC,IAEjDh1B,gBAACqD,sBAAKsiB,KAAM,EAAG5kB,MAAM,OAAOoH,SAAS,kBAAezH,SAAAA,EAAO20B,OACxDD,GA1IaE,MAClB,IAAKT,EAAW,OAAO,KAEvB,OAAQp1B,GACN,IAAK,MACH,OACEO,gBAAC0tB,IACCC,KAAMkH,EACN9zB,MAAOA,EACPsE,OAAQA,EACRuoB,kBAAmBA,EACnBC,SAAUA,EACVC,WAAYqF,EACZpF,YAAa6F,EACb5F,YAAa6F,EACbnzB,MAAOA,IAGb,IAAK,OACL,IAAK,OACH,OACEV,gBAAC6vB,IACClC,KAAMkH,EACN9zB,MAAOA,EACPsE,OAAQA,EACRuoB,kBAAmBA,EACnBC,SAAUA,EACViC,aAAcqD,EACdpF,YAAa6F,EACb5F,YAAa6F,EACbnzB,MAAOA,IAGb,IAAK,MACL,IAAK,QACH,OACEV,gBAACswB,IACCC,WAAYsE,EACZ9zB,MAAOA,EACPsE,OAAQA,EACRuoB,kBAAmBA,EACnB4C,QAAkB,UAAT/wB,EACTgxB,aAAcyC,EACdnF,YAAa6F,EACb5F,YAAa6F,EACbnzB,MAAOA,IAGb,QACE,OAAO,OAyFc40B,GAlEpBjU,EAGHrhB,gBAACqD,wBAASkqB,SAA0B7sB,SAAAA,EAAO60B,gBACxClC,GACCrzB,gBAACuL,cACCvL,gBAAC2gB,IAAO7V,KAAK,SANE,KAelBoQ,EAGHlb,gBAACqD,wBAASmqB,SAAwB9sB,SAAAA,EAAO80B,cACtClC,GACCtzB,gBAACkL,GAAK3E,WAAW,UACG,iBAAV2U,EAAqBA,EAAQ,sBAN1B,KAedkY,EAGHpzB,gBAACqD,wBAASoqB,SAAyB/sB,SAAAA,EAAO+0B,eACvClC,GACCvzB,gBAACkL,OACoB,iBAAXkoB,EAAsBA,EAAS,sBAN3B,MA6CjBgC,GAAuC,WAAnB1C,GAA+BsC,IA5FjDrC,GAAiBe,EAAQO,QAG5Bj0B,gBAACqD,sBACC8E,SAAS,QACT8T,KAASyX,EAAQ3mB,OACjBzE,IAAQorB,EAAQ1mB,EAAI,SAChB8f,SACApsB,SAAAA,EAAOgzB,SAEVA,EAAQ3Y,SAViC,OEjLrC2a,GAA4C,CACvD1uB,GAAI,CACFjC,QAAS,UACTsB,SAAU,OACV6W,SAAU,SAEZjW,GAAI,CACFlC,QAAS,WACTsB,SAAU,OACV6W,SAAU,SAEZhW,GAAI,CACFnC,QAAS,YACTsB,SAAU,OACV6W,SAAU,UAIDyY,GAAkD,CAC7D92B,QAAS,CACPC,gBAAiB,cACjBuM,MAAO,kBAETlM,OAAQ,CACNL,gBAAiB,iBACjBuM,MAAO,kBAETrM,QAAS,CACPF,gBAAiB,cACjBC,YAAa,MACbE,YAAa,QACbC,YAAa,iBACbmM,MAAO,mBAIEuqB,GAAwB,CACnCC,MAAO,CACL/2B,gBAAiB,kBAEnBg3B,OAAQ,CACNh3B,gBAAiB,kBAEnBwjB,SAAU,CACR9e,QAAS,GACTwB,OAAQ,qUCnBN+wB,GAAqB12B,gBAAsC,CAC/D22B,QAAQ,EACRC,UAAWA,OACX9tB,SAAU,CAAE4E,EAAG,EAAGC,EAAG,GACrBkpB,YAAaA,OACbC,gBAAiB,KACjBC,mBAAoBA,OACpBtrB,KAAM,KACNrK,QAAS,UACT41B,WAAY,CAAEntB,QAAS,MACvBotB,WAAY,CAAEptB,QAAS,MACvB9F,UAAW,sBACXmzB,UAAWA,OACXC,SAAUA,SAICC,GAGR52B,QAACC,SAAEA,EAAQC,MAAEA,GAAOF,EACvB,OACEG,gBAAC+1B,GAAmB91B,UAASF,MAAOA,GACjCD,IAMM42B,GAAwBA,KACnC,IAAMv2B,EAAUC,aAAW21B,IAC3B,IAAK51B,EACH,MAAM,IAAIE,MACR,mEAGJ,OAAOF,GAIIw2B,GAAwD3zB,QAAClD,SACpEA,EAAQ82B,yBACRA,GAA2B,EAAIxyB,QAC/BA,GAAU,EAAKnB,WACfA,GAAa,EAAKvC,MAClBA,GAEDsC,EADIrC,EAAKC,EAAAoC,EAAA5B,KAEFi1B,WAAEA,EAAUjzB,UAAEA,EAASozB,SAAEA,GAAaE,KAmBtCpyB,EAAYN,OAAAC,QAChBoG,IAAKgsB,EACLQ,cAnByBzM,IACzB,IAAInnB,EAMJ,GAJI2zB,GACFxM,EAAE0M,iBAGAN,EACFA,EAASpM,OACJ,CAEL,IAAM6L,UAAEA,EAASC,YAAEA,GAAgBQ,KACnCR,EAAY,CAAEnpB,EAAGqd,EAAEE,QAAStd,EAAGod,EAAEG,UACjC0L,GAAU,KAOZxxB,gBAAiBrB,EACjB2zB,gBAAiB,OACjBnyB,gBAAiB3B,EAAa,QAAKzB,GAE/B4C,GACFpE,EAAM8D,eAAehE,SACS0B,IAA9B1B,EAASa,MAAMsC,YAA4B,CAAEA,WAAAA,SAC5CvC,SAAAA,EAAOM,UACPL,GAGL,GAAIyD,GAAWpE,EAAM8D,eAAehE,GAAW,CAC7C,IAAM+D,EAAQ7D,EAAM2D,SAASwB,KAAKrF,GAElC,OAAOE,EAAM+D,aAAaF,EAAKG,OAAAC,UAAOK,EAAiBT,EAAMlD,QAI/D,OAAOX,gBAACqD,wBAASiB,GAAexE,IAIrBk3B,GAAwD7yB,QAAC8wB,MACpEA,EAAKn1B,SACLA,EAAQqI,SACRA,EAAQ8uB,KACRA,EAAO,QAAOC,MACdA,EAAQ,QAAOx2B,MACfA,EAAKyI,MACLA,GAEDhF,EADIxD,EAAKC,EAAAuD,EAAAE,KAEF2xB,OACJA,EACA7tB,SAAUgvB,EAAeb,WACzBA,EAAUlzB,UACVA,EAAS3C,QACTA,GACEi2B,KAEEU,EAAUxuB,SAAuB,OAChCyuB,EAAcC,GAAmBv1B,WAAS,CAAEgL,EAAG,EAAGC,EAAG,IAGtD3C,EAAMisB,GAAcc,EA2B1B,OAxBAl1B,YAAU,KACR,GAAI8zB,GAAU3rB,EAAInB,QAAS,CACzB,IAEMquB,EAAcC,OAAOC,WACrBC,EAAeF,OAAOG,YAEtBC,EAAMzvB,GAAYgvB,EAElBU,EDtGyB,SACnC9qB,EACAC,EACA8qB,EACAC,EACAR,EACAG,EACAT,EACAC,YADAD,IAAAA,EAAiB,kBACjBC,IAAAA,EAAmB,SAEnB,IAAIc,EAAOjrB,EACPkrB,EAAOjrB,EA4CX,MAzCa,SAATiqB,EACFe,EAAOjrB,EAAI+qB,EACO,UAATb,EACTe,EAAOjrB,EACW,QAATkqB,GAA2B,WAATA,IAEb,WAAVC,EACFc,EAAOjrB,EAAI+qB,EAAY,EACJ,QAAVZ,IACTc,EAAOjrB,EAAI+qB,IAKF,QAATb,EACFgB,EAAOjrB,EAAI+qB,EACO,WAATd,EACTgB,EAAOjrB,EACW,SAATiqB,GAA4B,UAATA,IAEd,WAAVC,EACFe,EAAOjrB,EAAI+qB,EAAa,EACL,QAAVb,IACTe,EAAOjrB,EAAI+qB,IAKXC,EAAOF,EAAYP,IACrBS,EAAOT,EAAcO,GAEnBE,EAAO,IACTA,EAAO,GAELC,EAAOF,EAAaL,IACtBO,EAAOP,EAAeK,GAEpBE,EAAO,IACTA,EAAO,GAGF,CAAElrB,EAAGirB,EAAMhrB,EAAGirB,GC+CUC,CACzBN,EAAI7qB,EACJ6qB,EAAI5qB,EATY3C,EAAInB,QAAQivB,YACX9tB,EAAInB,QAAQI,aAW7BiuB,EACAG,EACAT,EACAC,GAGFI,EAAgBO,KAEjB,CAAC7B,EAAQmB,EAAiBhvB,EAAU8uB,EAAMC,EAAO7sB,IAE/C2rB,EAcHh2B,gBAACqD,sBACCkB,GAAInB,GAAa,eACjBiH,IAAKA,EACLpE,KAAK,OACLmyB,UAAW,EACX15B,aAAc,EACdoc,UAAU,kCACVvX,SAAS,SAET4F,MAAKnF,OAAAC,UAlBmC,CAC1CkE,SAAU,QACVG,IAAQ+uB,EAAarqB,OACrBiP,KAASob,EAAatqB,OACtBsY,OAAQ,IACRgT,gBAAiB,YAagBlvB,IAC3BwsB,GAAoBl1B,SACpBC,SAAAA,EAAO43B,WACP53B,SAAAA,EAAOqa,QACPpa,GAEHs0B,GACCA,EAAMrxB,IAAI,CAACF,EAAM4lB,IACX5lB,EAAK60B,QAELv4B,gBAACw4B,IAAmB9M,eAAgBpC,EAAS5oB,MAAOA,IAIjDV,gBAACy4B,IAAgB/M,IAAKhoB,EAAKa,GAAIb,KAAMA,EAAMhD,MAAOA,KAE5DZ,GAtCI,MA4CE24B,GAAkD1yB,QAACrC,KAC9DA,EAAI5D,SACJA,EAAQ44B,SACRA,EAAQz1B,WACRA,GAAa,EAAKvC,MAClBA,GAEDqF,EADIpF,EAAKC,EAAAmF,EAAAC,KAEFmwB,gBAAEA,EAAeC,mBAAEA,EAAkBtrB,KAAEA,EAAIyrB,UAAEA,GACjDG,KAGF,GAAIhzB,EAAM,CACR,IAAO2a,EAAWE,GAAgBxc,YAAS,GACrC42B,EAAaj1B,EAAKuxB,OAASvxB,EAAKuxB,MAAM5yB,OAAS,EAC/Cu2B,EAAkBzC,IAAoBzyB,EAAKa,GAC3Cs0B,EAAUjwB,SAAuB,OAChCkwB,EAAiBC,GAAsBh3B,WAAS,CAAEgL,EAAG,EAAGC,EAAG,IAC5DsV,EAAW5e,EAAK4e,UAAYrf,EAmClC,OAVAf,YAAU,KACR,GAAI02B,GAAmBC,EAAQ3vB,QAAS,CACtC,IAAM8vB,EAAOH,EAAQ3vB,QAAQyrB,wBAC7BoE,EAAmB,CACjBhsB,EAAGisB,EAAKhd,MACRhP,EAAGgsB,EAAK1wB,QAGX,CAACswB,IAGF54B,gBAACqD,sBACCgH,IAAKwuB,EACL5yB,KAAK,WACLX,QAAQ,OACRL,WAAW,SACXD,OAAQsd,EAAW,cAAgB,UACnC9e,QAAS8e,EAAW,GAAM,EAC1Bna,SAAS,2BACMma,kBACAA,EAAW,QAAK9gB,GAC3Bk0B,GAAiB5qB,IACrBiX,OAASO,EAAyC,GAA9BsT,GAAsBC,MAC1C/2B,gBACEuf,IAAciE,EAAW,iBAAmB,cAE9C3D,aAhDqBsL,KACvB1L,GAAa,GACToa,GACFvC,EAAmB1yB,EAAKa,KA8CxBqa,aAzCqBsL,KACvB3L,GAAa,IAyCX1Z,QArCgBC,KACdwd,IACCqW,GAAcj1B,EAAKmB,UACtBnB,EAAKmB,UACD0xB,GAAWA,aAkCX71B,SAAAA,EAAOgD,KACP/C,GAEH+C,EAAK+B,MACJzF,gBAACqD,sBAAKspB,YAAa,SAAOjsB,SAAAA,EAAO+E,MAC9B/B,EAAK+B,MAIVzF,gBAACqD,QAAK41B,SAAU,GAAIv1B,EAAKsrB,OAExB2J,GACC34B,gBAACqD,sBAAK61B,WAAY,SAAOx4B,SAAAA,EAAOy4B,kBAC9Bn5B,uBACEe,MAAM,KACNsE,OAAO,KACPK,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAEN5F,wBACE6F,EAAE,8DACFF,KAAK,mBAMZizB,GAAmBD,GAClB34B,gBAACg3B,IACC/B,MAAOvxB,EAAKuxB,OAAS,GACrB9sB,SAAU2wB,EACV7B,KAAK,QACLC,MAAM,QACNx2B,MAAOA,KAgBjB,OACEV,gBAACqD,sBACC4C,KAAK,WACLpB,QAXiBu0B,IACdn2B,UACHy1B,GAAAA,EAAWU,GACP7C,GAAWA,MASfvxB,OAAQ/B,EAAa,cAAgB,UACrCO,QAASP,EAAa,GAAM,kBACbA,kBACAA,EAAa,QAAKzB,GAC7Bk0B,GAAiB5qB,IACrBiX,OAAS9e,EAA2C,GAA9B2yB,GAAsBC,aACxCn1B,SAAAA,EAAOgD,KACP/C,GAEHb,IAMM04B,GAAwDj4B,QAACG,MACpEA,GAEDH,EADII,EAAKC,EAAAL,EAAAM,IAER,OACEb,gBAACqD,sBACCgC,OAAO,MACPvG,gBAAgB,iBAChBkmB,OAAO,QACP/e,KAAK,+BACY,oBACbvF,SAAAA,EAAO63B,QACP53B,KAwBG04B,GASTxsB,QAAC/M,SACHA,EAAQm1B,MACRA,EAAKnqB,KACLA,EAAO,KAAIrK,QACXA,EAAU,UAASm2B,yBACnBA,GAA2B,EAAIl2B,MAC/BA,GAIDmM,EADIlM,EAAKC,EAAAiM,EAAAH,IAER,OAAKuoB,GAA0B,IAAjBA,EAAM5yB,OAOlBrC,gCACEA,gBAAC22B,kBACCC,yBAA0BA,EAC1Bl2B,MAAOA,GACHC,GAEHb,GAGHE,gBAACg3B,IAAmB/B,MAAOA,EAAOv0B,MAAOA,KAdpCV,gCAAGF,+FC3UDw5B,GA/D4Cz5B,QAACC,SACxDA,EAAQm1B,MACRA,EAAKnqB,KACLA,EAAO,KAAIrK,QACXA,EAAU,UAASm2B,yBACnBA,GAA2B,EAAI2C,aAC/BA,EAAY74B,MACZA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,IAEFo4B,EC1B4B74B,CAAAA,IAKlC,IAAMmK,KAAEA,EAAIrK,QAAEA,EAAO84B,aAAEA,GAAiB54B,GAAS,IAC1Cq1B,EAAQC,GAAal0B,YAAS,IAC9BoG,EAAU+tB,GAAen0B,WAAS,CAAEgL,EAAG,EAAGC,EAAG,KAC7CmpB,EAAiBC,GAAsBr0B,WAAwB,MAEhEs0B,EAAaztB,SAAoB,MACjC0tB,EAAa1tB,SAAuB,MAGpCxF,EAAYpD,EAAMgC,QAAQ,IAAM9D,EAAW,uBAAwB,IAGnEs4B,EAAWj0B,cACd62B,IAEClD,EAAY,CAAEnpB,EAAGqsB,EAAM9O,QAAStd,EAAGosB,EAAM7O,UACzC0L,GAAU,SACVsD,GAAAA,GAAe,IAEjB,CAACA,IAGGhD,EAAYh0B,cAAY,KAC5B0zB,GAAU,GACVG,EAAmB,YACnBmD,GAAAA,GAAe,IACd,CAACA,IAsCJ,OAnCAr3B,YAAU,KACR,IAAMu3B,EAAsBL,IAExB9C,EAAWptB,UACVotB,EAAWptB,QAAQwwB,SAASN,EAAM1a,SAEnC6X,KAKEoD,EAAeA,KACf3D,GACFO,KAKEqD,EAAiBR,IACH,WAAdA,EAAM1N,KAAoBsK,GAC5BO,KAQJ,OAJAsD,SAASC,iBAAiB,YAAaL,GACvCjC,OAAOsC,iBAAiB,SAAUH,GAClCE,SAASC,iBAAiB,UAAWF,GAE9B,KACLC,SAASE,oBAAoB,YAAaN,GAC1CjC,OAAOuC,oBAAoB,SAAUJ,GACrCE,SAASE,oBAAoB,UAAWH,KAEzC,CAAC5D,EAAQO,IAEL,CACLP,OAAAA,EACAC,UAAAA,EACA9tB,SAAAA,EACA+tB,YAAAA,EACAC,gBAAAA,EACAC,mBAAAA,EACAtrB,KAAAA,EACArK,QAAAA,EACA41B,WAAAA,EACAC,WAAAA,EACAlzB,UAAAA,EACAozB,SAAAA,EACAD,UAAAA,IDxDYyD,CAAoB,CAChClvB,KAAAA,EACArK,QAAAA,EACA84B,aAAAA,KAGIvD,OACJA,EAAMC,UACNA,EAAS9tB,SACTA,EAAQ+tB,YACRA,EAAWC,gBACXA,EAAeC,mBACfA,EAAkBC,WAClBA,EAAUC,WACVA,EAAUlzB,UACVA,EAASozB,SACTA,EAAQD,UACRA,GACEiD,EAEJ,OACEx5B,gBAACy2B,IACC12B,MAAO,CACLi2B,OAAAA,EACAC,UAAAA,EACA9tB,SAAAA,EACA+tB,YAAAA,EACAC,gBAAAA,EACAC,mBAAAA,EACAtrB,KAAAA,EACArK,QAAAA,EACA41B,WAAAA,EACAC,WAAAA,EACAlzB,UAAAA,EACAozB,SAAAA,EACAD,UAAAA,EACAxT,OAAQriB,IAGVV,gBAACq5B,kBACCpE,MAAOA,EACPnqB,KAAMA,EACNrK,QAASA,EACTm2B,yBAA0BA,EAC1Bl2B,MAAOA,GACHC,GAEHb,KASTw5B,GAAYp1B,QAAUyyB,GACtB2C,GAAYxzB,QAAUkxB,GACtBsC,GAAYv2B,KAAO01B,GACnBa,GAAYW,QAAUzB,GACtBc,GAAYY,UD4R6DztB,QAAC/L,MACxEA,GAED+L,EADI9L,EAAKC,EAAA6L,EAAAL,IAER,OACEpM,gBAACqD,sBACCgC,OAAO,MACPvG,gBAAgB,iBAChBkmB,OAAO,QACP/e,KAAK,+BACY,oBACbvF,SAAAA,EAAOy5B,UACPx5B,4DG/XGy5B,GAAiBv6B,QAACw6B,YAC7BA,EAAWC,QACXA,EAAOC,QACPA,GACY16B,EAENqB,EAAem5B,EACjBC,EACE,GACA,GACFh5B,MAAMC,QAAQg5B,IAAYA,EAAQl4B,OAAS,EAC3Ck4B,EAAQ,GAAGx6B,MACX,IAGGy6B,EAAMC,GAAWz6B,EAAM+B,UAAS,IAEhCsc,EAAWE,GAAgBve,EAAM+B,UAAS,IAE1C24B,EAAWC,GAAgB36B,EAAM+B,UAAS,IAE1ChC,EAAO66B,GAAY56B,EAAM+B,SAA4Bb,IAErD25B,EAAkBC,GAAuB96B,EAAM+B,SAAiB,GAEvE,MAAO,CACLhC,MAAAA,EACA66B,SAAAA,EACAJ,KAAAA,EACAC,QAAAA,EACApc,UAAAA,EACAE,aAAAA,EACAmc,UAAAA,EACAC,aAAAA,EACAE,iBAAAA,EACAC,oBAAAA,4BC1BSC,GAAwCl7B,IAAA,IAACC,SACpDA,EAAQY,MACRA,EAAQ,CAAEs6B,WAAY,KAEvBn7B,EADIc,EAAKC,EAAAf,EAAAuB,IAAA,OAERpB,gBAACkL,iBAECJ,KAAK,KACLvE,WAAW,MACXC,cAAc,UACdF,WAAW,OAEX20B,eAAgB,EAChBC,iBAAkB,EAElB7vB,MAAM,iBAEN9F,WAAW,iBAEN7E,EAAkB,WACnBC,GAEHb,iDCnBQq7B,GAA2Ct7B,IAAA,IAACC,SACvDA,EAAQk7B,WACRA,EAAU9f,MACVA,GAAQ,EAAKxa,MACbA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,IAAA,OAERpB,gBAACc,0BAECsa,IAAK,EACLjT,SAAS,WACTpH,MAAM,QAEFJ,QACAD,SAAAA,EAAOM,WAGVlB,GAGCob,GAAS8f,GACTh7B,gBAAC+6B,kBACCxf,UAAW,SACP7a,SAAAA,EAAOs6B,YAEVA,GAKJ9f,GACClb,gBAACkL,iBACCJ,KAAK,KACLyQ,UAAW,EACX2f,iBAAkB,EAClB30B,WAAW,MACX8E,MAAM,gBACN9F,WAAW,uBACP7E,SAAAA,EAAOwa,OAEVA,KCtCIkgB,GAAmC,CAC9Cv8B,QAAS,CACPH,aAAc,OAEhBD,MAAO,CACLC,aAAc,GAEhBC,QAAS,CACPD,aAAc,OAEhB0e,WAAY,CACV1e,aAAc,WAOL28B,GAAmC,CAC9Ct0B,GAAI,OACJC,GAAI,OACJC,GAAI,OACJC,GAAI,OACJC,GAAI,QAMOm0B,GAA4C,CACvDt8B,QAAS,CACPD,YAAa,MACbE,YAAa,QACbC,YAAa,iBACbJ,gBAAiB,cACjByG,WAAY,gBACZwc,OAAQ,CACN7iB,YAAa,kBAEfq8B,OAAQ,CACNr8B,YAAa,gBACb4b,UAAW,sCAGfjc,QAAS,CACPE,YAAa,EACbmkB,kBAAmB,MACnBC,kBAAmB,QACnBC,kBAAmB,iBACnB1kB,aAAc,EACdI,gBAAiB,cACjByG,WAAY,gBACZwc,OAAQ,CACNqB,kBAAmB,kBAErBmY,OAAQ,CACNnY,kBAAmB,kBAGvBoY,KAAM,CACJjX,OAAQ,OACRzlB,gBAAiB,cACjByG,WAAY,kBAOHk2B,GAAoB,CAC/B3f,WAAY,OACZgF,cAAe,MACfC,YAAa,OACbC,aAAc,QAMH0a,GAAsB,CACjC5f,WAAY,OACZgF,cAAe,OACfC,YAAa,OACbC,aAAc,wJChFH2a,GAAuC97B,QAAC0hB,OAEnDA,EAAMzhB,SACNA,EAAQgL,KAERA,EAAO,KAAItK,MACXA,EAAQ,UAASC,QACjBA,EAAU,UAASya,MACnBA,GAAQ,EAAK0gB,UACbA,GAAY,EAAKlB,UACjBA,GAAY,EAAKrc,UACjBA,GAAY,EAAKpb,WACjBA,GAAa,EAAK44B,WAClBA,GAAa,EAAKn7B,MAClBA,EAAQ,CAAEo7B,UAAW,KAEtBj8B,EADIc,EAAKC,EAAAf,EAAAuB,IAYR,OACEpB,gBAACoF,4BAECgW,IAAK,EACLra,MAAM,OACNuE,QAAQ,OACR+V,SAAS,SACTpW,WAAW,SACXC,eAAe,gBACf5B,aAAc,EAEdrE,YAAY,QACZC,YAlBUgc,EACV,iBAJmBmD,IAAaqc,GAAez3B,EAO/C,iBADA,gBAgBAnE,gBAAgB,cAChBuH,SAAU01B,aAAWC,UAAUlxB,GAE/B9F,OAAQ/B,EAAa,cAAgB44B,EAAa,OAAS,OAC3Dr4B,QAASP,EAAa,GAAM,EAE5BsC,WAAW,iBAENq2B,EAAYH,GAAoBC,GAEjCna,EAEA6Z,GAAO56B,GACP86B,GAAc76B,GACdC,EAAW,IACXC,GAEHb,oBCxEMm8B,GAAwCp8B,IAAA,IAACC,SACpDA,GAEDD,EADIc,EAAKC,EAAAf,EAAAuB,IAAA,OAERpB,gBAACuL,wBACC6P,IAAK,GACLY,MAAO,GACPqJ,OAAQ,IACRhK,SAAS,SACTlT,SAAS,YACLxH,GAEHb,ICfQqG,GAAkE,CAE7EC,GAAI,CAEFC,SAAU,GAEVC,WAAY,IACZE,eAAgB,KAElBC,GAAI,CACFJ,SAAU,GAEVC,WAAY,GACZE,eAAgB,IAElBE,GAAI,CACFL,SAAU,GAEVC,WAAY,GACZE,cAAe,GAEjBG,GAAI,CACFN,SAAU,GAEVC,WAAY,GACZE,cAAe,KAEjBI,GAAI,CACFP,SAAU,GAEVC,WAAY,GACZE,cAAe,GAEjBK,GAAI,CACFR,SAAU,GAEVC,WAAY,GACZE,cAAe,iGCnCb01B,GAAkCr8B,QAACC,SACvCA,EAAQ2K,QAERA,EAAOC,SAEPA,GAAW,EAAKC,aAChBA,GAAe,EAAKC,UACpBA,GAAY,EAAKC,OAEjBA,EAAS,SAAQC,KAEjBA,EAAO,MAIRjL,EAFIc,EAAKC,EAAAf,EAAAuB,IAMR,OAEEpB,gBAAC+K,yBACC7C,GAAG,QAEHnH,MAAM,OAENsF,SAAUyE,EAEVE,UAAWN,EAAW,SAAW,SACjCnE,WAAYw1B,aAAWI,YAAYtxB,GACnCI,eACEL,EAAY,eAAiBD,EAAe,YAAc,QAd1CF,EAAUtE,GAAasE,GAAW,GAiBhD9J,GAEHb,IC9BMs8B,GANiCz7B,GAE5CX,gBAACk8B,oBAAcv7B,gECQJ07B,GAAmCx8B,IAAA,IAACC,SAC/CA,EAAQgL,KACRA,EAAO,KAAIoQ,MACXA,GAAQ,EAAK7P,MACbA,EAAQ,gBAAe3K,MACvBA,EAAQ,CAAEsuB,MAAO,KAGlBnvB,EADIc,EAAKC,EAAAf,EAAAuB,IAAA,OAERpB,gBAACo8B,kBAEC9zB,IAAK,EACL+c,QAAS,GACTld,SAAS,WAET9B,SAAUg1B,GAAWvwB,GACrBxE,WAAY+0B,GAAWvwB,GACvBtE,cAAc,UACd81B,WAAW,SAEXjxB,MAAO6P,EAAQ,gBAAkB7P,EAEjC9F,WAAW,iBAEP7E,EAAa,MACbC,GAEHb,oBC5BQy8B,GAA4C18B,IAAA,IAACC,SACxDA,GAEDD,EADIc,EAAKC,EAAAf,EAAAuB,IAAA,OAERpB,gBAACc,0BAECC,MAAM,OACNy7B,SAAS,OACTr0B,SAAS,YAELxH,GAEHb,ICKQke,GAAkC,CAC7CjX,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,+dCTApE,GAA4BlD,QAACwe,UACjCA,EAASE,aACTA,EAAYke,OACZA,EAAM3xB,KACNA,EAAO,KAAI4xB,SACXA,EAAWA,SAAQvzB,MACnBA,GAEDtJ,EADIc,EAAKC,EAAAf,EAAAuB,IAMFod,EAAcA,IAAMD,GAAcF,GAExC,OACEre,gBAAC+K,yBACC7C,GAAG,KAEH8c,OAAQ,EACR2X,gBAAiB,GACjBC,kBAAmB,GACnBC,cAAc,OAEdle,aAAcH,EACdI,aAAcJ,EACd3Z,QAASA,IAhBc43B,CAAAA,GAAmBC,EAASD,GAgBpCK,CAAkBL,EAAO18B,OAExCjB,gBAAiBuf,EAAY,iBAAmB,cAChD3f,aAAa,MAEb6G,WAAW,kBAEP5E,GAEJX,gBAACkL,iBAEC7E,SAAU01B,aAAWC,UAAUlxB,GAC/BvE,WAAW,MACXD,WAAW,OAEP6C,GAEHszB,EAAOzN,SAUV+N,GAAsC/5B,WAAC8H,KAC3CA,EAAO,KAAIpK,MACXA,EAAQ,CAAEs8B,MAAO,GAAIx0B,KAAM,IAAIzI,MAC/BA,EAAKkD,WACLA,EAAUo3B,YACVA,EAAW4C,aACXA,EAAeA,SAAQ1C,QACvBA,GACDv3B,EAIOk6B,EAAWl5B,OAAAC,QAEf+gB,OAAQ,EACRjkB,MAAO,MACPsE,OAAQ,OACRkf,OAAQ,OACRoY,gBAAiB,GACjBC,kBAAmB,EAGnBv2B,SAAU01B,aAAWC,UAAUlxB,GAE/BvE,WAAY,MACZD,WAAY,MACZE,cAAe,UAGf1H,gBAAiB,cACjBuM,MAAOpI,EAAa,iBAAmB,iBAGvC+B,OAAQ/B,EAAa,cAAgB,UAGrCsC,WAAY,iBAGT7E,EAAa,MACbA,EAAY,MAEX+7B,EACJlC,EAAQl4B,OAAS,GAAKk4B,EAAQ4C,KAAMV,GAAWA,EAAO18B,QAAUA,GAClE,OACEC,gBAACkL,mBAASgyB,IAEI,KAAVn9B,GAAiBuB,MAAMC,QAAQxB,IAA2B,IAAjBA,EAAMsC,SAC/Cg4B,EACAA,EAEAr6B,gCAEoB,iBAAVD,SAAkBoE,EACvBs4B,GAAUA,EAAOzN,OAAK7qB,EAAKpE,EAE9BuB,MAAMC,QAAQxB,IAAUA,EAAMsC,OAAS,EACrCrC,gBAACoF,cAAWgW,IAAK,GACdrb,EAAM6D,IAAK64B,GACVz8B,gBAACo9B,IACC1R,IAAK+Q,EACLA,OAAQA,EACRQ,aAAcA,MAMpBj9B,4BAAOD,MAObs9B,GAA4Ct3B,QAACxB,GACjDA,EAAEorB,KACFA,EAAI5vB,MACJA,EAAKynB,SACLA,EAAQ8S,QACRA,GAAU,EAAKr3B,WACfA,GAAa,EAAK44B,WAClBA,GAAa,EAAKtB,QAClBA,EAAU,IAEXx0B,EADIpF,EAAKC,EAAAmF,EAAA1B,IAKR,OACErE,gBAAC+K,yBACCxG,GAAIA,EACJorB,KAAMA,EACNznB,GAAG,SACH1E,QAAS,EACTzC,MAAO,EACPsE,OAAQ,EACR8C,SAAS,WACTpI,MAAOA,EACPuiB,SAAUrf,EACVq6B,SAAUzB,EACVrU,SAfkB4R,IAChB5R,GAAUA,EAAS4R,IAerBmE,SAAUjD,GACN35B,GAEH45B,EAAQl4B,OAAS,GAChBk4B,EAAQ32B,IAAK64B,GAETz8B,0BAAQ0rB,IAAK+Q,EAAO18B,MAAOA,MAAO08B,EAAO18B,OACtC08B,EAAOzN,UAYhBwO,GAAoCj9B,QAACuK,KACzCA,EAAIpK,MACJA,EAAQ,GAAE65B,QACVA,EAAOmC,SACPA,EAAWA,SAAQ7B,iBACnBA,EAAgBC,oBAChBA,GACDv6B,EACOk9B,EZtKoBC,MAE1B,IAAOrf,EAAWE,GAAgBve,EAAM+B,UAAS,GAEjD,MAAO,CAAEsc,UAAAA,EAAWE,aAAAA,IYkKDmf,GACbC,EAAkBlB,GAAmBC,EAASD,GAQpD,OACEz8B,gBAAC+K,yBACC7C,GAAG,KACHjC,KAAK,WACLqC,IAAI,OACJvH,MAAM,OACNuE,QAAQ,OACRob,cAAc,SACdvY,SAAS,WACToT,UAAW,EACX2d,WAAY,EACZvM,YAAa,EACbrpB,aAAc,EACdyB,QAAS,EACTmB,UAAU,QACV03B,UAAU,OACVvY,OAAQ,IACRvmB,gBAAgB,cAChBJ,aAAa,MACbK,YAAY,MACZE,YAAY,QACZC,YAAY,iBACZqG,WAAW,gBACX4D,MAAO,CACL00B,eAAgB,OAChBC,eAAgB,iCAChBC,uBAAwB,CACtBh9B,MAAO,OAETi9B,6BAA8B,CAC5BC,WAAY,eAEdC,6BAA8B,CAC5BD,WAAY,qBACZv/B,aAAc,SAvCP,CACboc,UACE,+EAyCIpa,SAAAA,EAAOy9B,UAEV5D,EAAQl4B,OAAS,GAChBk4B,EAAQ32B,IAAI,CAAC64B,EAAQnT,IACnBtpB,gBAAC+C,kBACC2oB,IAAK+Q,EAAO18B,MACZ+K,KAAMA,EACN3B,MAAOzI,EAAY,KACnB+7B,OAAQA,EACRC,SAAUiB,EACV7+B,gBACEwqB,IAAUuR,EAAmB,iBAAmB,cAElDlc,aAAcA,IAAMmc,EAAoBxR,IACpCmU,OAWHL,GAA0C3wB,QAACgwB,OACtDA,EAAM3xB,KACNA,EAAO,KAAImyB,aACXA,EAAeA,UAEhBxwB,EADI9L,EAAKC,EAAA6L,EAAAzG,IAIR,OACEhG,gBAACoF,4BACCgW,IAAK,EACLrW,QAAS,EACTE,WAAW,SACXvG,aAAa,MACbI,gBAAgB,iBAChBuH,SAAU01B,aAAWC,UAAUlxB,GAC/BjG,QAAUu0B,GAAeA,EAAMgF,kBAC/B74B,WAAW,iBACP5E,GAEJX,gBAACkL,GACCJ,KAAMA,EACNvE,WAAW,OAEVk2B,GAGHz8B,gBAAC+N,IACC9H,KAAK,eACLoF,MAAM,UACND,YAAa4S,GAAUlT,GACvBjG,QAzBcC,IAAMm4B,EAAaR,GA0BjCl3B,WAAW,gBACXwc,OAAQ,CACNve,QAAS,QAMb66B,GAAwCxxB,QAACtI,GAC7CA,EAAEorB,KACFA,EAAIX,MACJA,EAAKjvB,MACLA,EAAKs6B,YACLA,EAAWW,WACXA,EAAUR,KACVA,GAAO,EAAKtf,MACZA,GAAQ,EAAKof,QACbA,GAAU,EAAKI,UACfA,GAAY,EAAKrc,UACjBA,GAAY,EAAKpb,WACjBA,GAAa,EAAK44B,WAClBA,GAAa,EAAKtB,QAClBA,EAAU,GAAEhZ,OACZA,EAAS,GAAEzW,KACXA,EAAO,KAAItK,MACXA,EAAQ,UAASC,QACjBA,EAAU,UAASC,MACnBA,EAAQ,CACN8H,KAAM,GACN/C,KAAM,GACN04B,SAAU,GACVG,UAAW,GACXtP,MAAO,GACPgM,WAAY,IACbxT,SACDA,EAAWA,SAAQiT,QACnBA,EAAUA,SAAQG,SAClBA,EAAWA,SAAQrc,aACnBA,EAAeA,SAAQoc,aACvBA,EAAeA,SAAQG,oBACvBA,EAAmBD,iBACnBA,GAEDhuB,EADIlM,EAAKC,EAAAiM,EAAAhM,IAEF+6B,KAAelB,IAAa1L,GAC5BxQ,EAAcA,IAAMD,GAAcF,GAOlCsf,EAAiBp7B,cACpBk6B,IACChC,GAASD,GACLF,GAAWh5B,MAAMC,QAAQxB,IAC1BA,EAAM4C,SAAS85B,IAAW7B,EAAS,IAAI76B,EAAO08B,IAE/C7B,EAAS6B,GAEPjV,GAAUA,EAASiV,IAEzB,CAACjC,EAAMF,EAASv6B,IAQlB,OACEC,gBAACm7B,IACCl1B,KAAK,YACL+0B,WAAYA,EACZ9f,MAAOA,EACPxa,MAAOA,EACPmE,QAAS5B,GAAc44B,EAAa,OA7BnBzC,IACfA,GAASA,EAAMgF,iBAAiBhF,EAAMgF,kBAC1C3D,GAASD,GACTG,GAAcD,KA4BZ16B,gBAAC27B,IACC3M,MAAOA,EACPlkB,KAAMA,EACNoQ,MAAOA,EACP1a,MAAOA,EACPE,MAAOA,EACP6gB,OAAQA,EACR9gB,QAASA,EACTV,MAAOA,EACPsL,MAAO,gBACPgT,UAAWA,EACXpb,WAAYA,EACZ44B,WAAYA,EACZnB,UAAWA,EACXkB,UAAWA,EACXjd,aAAcH,EACdI,aAAcJ,GAEdxe,gBAACu8B,QACEX,GACC57B,gBAACq8B,kBACCkC,QAASh6B,EACT8G,MAAO,gBACP6P,MAAOA,GACHxa,GAEHsuB,GAGLhvB,gBAACq9B,kBACC94B,GAAIA,EACJorB,KAAMA,EACN4K,QAASA,EACT/S,SAAUA,EACVznB,MAAOA,EACPkD,WAAYA,EACZ44B,WAAYA,EACZvB,QAASA,EACTkE,QAtEUC,IAAM9D,GAAa,IAuEzBh6B,IAENX,gBAAC+8B,IACCxC,QAASA,EACTzvB,KAAMA,EACNpK,MAAOA,EACPX,MAAOA,EACPkD,WAAYA,EACZo3B,YAAaA,EACb4C,aA9DkByB,IAC1B,GAAIp9B,MAAMC,QAAQxB,IAAUA,EAAM4C,SAAS+7B,GAAc,CACvD,IAAMj8B,EAAW1C,EAAM6C,OAAQ65B,GAAWA,IAAWiC,GACrD9D,EAA6B,IAApBn4B,EAASJ,OAAe,GAAKI,QA8DpCzC,gBAACi8B,SACGJ,IAAe54B,GACfjD,gCAEIA,gBAACkM,GADFsuB,GAEGnvB,MAAM,UACND,YAAa4S,GAAUlT,GACvB3B,MAAOzI,EAAM+E,KACb6F,YAAY,SAIZD,MAAM,UACNC,YAAY,KACZF,YAAa4S,GAAUlT,GACvB3B,MAAOzI,EAAM+E,WAOvB+0B,GACAx6B,gBAACw9B,IACC1yB,KAAMA,EACNpK,MAAOA,EACP65B,QAASA,EACTmC,SAAUiB,EACV9C,iBAAkBA,EAClBC,oBAAqBA,MCndlB6D,GAAiB9+B,QAACoD,WAAEA,EAAU27B,UAAEA,GAAwB/+B,GAC5Dwe,EAAWE,GAAgBve,EAAM+B,UAAS,IAC1C88B,EAAIC,GAAS9+B,EAAM+B,SAASkB,GAAcA,EAAa27B,GAC9D,MAAO,CAAEvgB,UAAAA,EAAWE,aAAAA,EAAcsgB,GAAAA,EAAIC,MAAAA,ICY3BC,GAAqC,CAChDh4B,GAAI,CAAE1B,OAAQ,OAAQtE,MAAO,QAC7BiG,GAAI,CAAE3B,OAAQ,OAAQtE,MAAO,QAC7BkG,GAAI,CAAE5B,OAAQ,OAAQtE,MAAO,QAC7BmG,GAAI,CAAE7B,OAAQ,OAAQtE,MAAO,QAC7BoG,GAAI,CAAE9B,OAAQ,OAAQtE,MAAO,SAOlBi+B,GAAuC,CAClDj4B,GAAI,CACF1B,OAAQ,OACRtE,MAAO,QAETiG,GAAI,CACF3B,OAAQ,OACRtE,MAAO,QAETkG,GAAI,CACF5B,OAAQ,OACRtE,MAAO,QAETmG,GAAI,CACF7B,OAAQ,OACRtE,MAAO,QAEToG,GAAI,CACF9B,OAAQ,OACRtE,MAAO,SAQEk+B,GAAsD,CACjEl4B,GAAI,CAAE41B,gBAAiB,EAAGC,kBAAmB,GAC7C51B,GAAI,CAAE21B,gBAAiB,EAAGC,kBAAmB,GAC7C31B,GAAI,CAAE01B,gBAAiB,EAAGC,kBAAmB,GAC7C11B,GAAI,CAAEy1B,gBAAiB,EAAGC,kBAAmB,GAC7Cz1B,GAAI,CAAEw1B,gBAAiB,EAAGC,kBAAmB,4NC3CzCsC,GAAiBv+B,GAAeX,gBAACm/B,uBAAM1/B,KAAK,YAAekB,IAC3Dy+B,GAAwCv/B,QAAC0E,GAC7CA,EAAEorB,KACFA,EAAIX,MACJA,EAAKqQ,cACLA,EAAaC,YAEbA,EAAWC,cACXA,EAAgB,QAAOhe,OACvBA,EAAS,GAAEzW,KACXA,EAAO,KAAI/K,MACXA,GAAQ,EAAKse,UACbA,GAAY,EAAKpb,WACjBA,GAAa,EAAK44B,WAClBA,GAAa,EAAKgD,GAClBA,EAAEC,MACFA,EAAKtX,SACLA,EAAQoT,SACRA,EAAWA,SAAQrc,aACnBA,EAAeA,SAAQ7d,MAEvBA,EAAQ,CAAE8+B,OAAQ,GAAIC,OAAQ,GAAIzQ,MAAO,KAE1CnvB,EADIc,EAAKC,EAAAf,EAAAuB,IASFod,EAAcA,IAAMD,GAAcF,GAIlCqhB,EAAc,CAClB1+B,UAASgD,OAAAC,QAEPmX,IAAK,GACL9V,QAAS,OACTD,OAAQ,cACRtE,MAAO,cACPkE,WAAY,SAKZD,OAAQ/B,EAAa,cAAgB44B,EAAa,UAAY,UAC9Dr4B,QAASP,EAAa,GAAM,EAG5BsC,WAAY,iBAGT7E,EAAMsuB,QAGb,OACEhvB,gBAACo8B,kBACCmC,QAASh6B,EACToa,aAAcH,EACdI,aAAcJ,GACVkhB,EAAY1+B,UACZL,GAEJX,gBAACk/B,kBACC36B,GAAIA,EACJorB,KAAMA,EACNnsB,QAAS,EACTzC,MAAO,EACPsE,OAAQ,EACRs6B,QAAS5/B,EACTynB,SAhDgB4R,IACfyC,IACHjB,GAAU76B,GACV++B,GAAOD,GACHrX,GAAUA,EAAS4R,EAAM1a,OAAOihB,WA6ClCrd,SAAUrf,EACVq6B,SAAUzB,GACNl7B,IAGa,SAAlB4+B,GAA4BvQ,GAC3BhvB,gBAACkL,GACC3E,WAAW,MACX8E,MAAOpI,EAAa,iBAAmB,iBACvCsC,WAAW,iBAEVypB,GAKLhvB,gBAACqD,sBAECiC,QAAQ,OACRL,WAAW,SACXC,eACEo6B,EAAc,gBAAkBv/B,EAAQ,WAAa,aAEvDuD,aAAc,EAEd5E,aAAa,SACbI,gBACEmE,ED7CI,iBC+CAlD,EACAse,ED3CA,iBARF,gBCsDEA,ED7CE,iBARF,iBC0DNrZ,OAAO,UAEPO,WAAW,yCAEPgc,EACA0d,GAAcn0B,GACdk0B,GAAYl0B,GACZpK,EAAc,QAGjB4+B,GAAev/B,GACdC,gBAACqD,QACC61B,WAAY,EACZ3zB,WAAW,iBAEV+5B,GAKLt/B,gBAACqD,sBACC3E,aAAa,MACbI,gBD/EA,QCgFAgc,UAAU,+BACVvV,WAAW,yCACPw5B,GAAUj0B,GACVpK,EAAc,SAInB2+B,IAAkBt/B,GACjBC,gBAACqD,QACCspB,YAAa,EACbpnB,WAAW,iBAEV85B,IAMY,UAAlBE,GAA6BvQ,GAC5BhvB,gBAACkL,GACC3E,WAAW,MACX8E,MAAOpI,EAAa,iBAAmB,iBACvCsC,WAAW,iBAEVypB,KC9KE4Q,GAAmB//B,QAACmvB,MAC/BA,EAAKqL,YACLA,EACAt6B,MAAOmB,GAEIrB,GAEJggC,EAAMC,GAAW/9B,iBAASitB,EAAAA,EAASqL,IAEnChc,EAAWE,GAAgBxc,YAAS,IAEpChC,EAAO66B,GAAY74B,WAASb,GAAgB,KAE5Cw5B,EAAWC,GAAgB54B,YAAS,GAK3C,OAHAC,UAAQ,KACN89B,EAAQpF,IAAc36B,QAAQs6B,EAAAA,EAAe,SAAKrL,EAAAA,EAASqL,IAC1D,CAACt6B,EAAO26B,EAAW1L,EAAOqL,IACtB,CACLwF,KAAAA,EACAC,QAAAA,EACAzhB,UAAAA,EACAE,aAAAA,EACAxe,MAAAA,EACA66B,SAAAA,EACAF,UAAAA,EACAC,aAAAA,yTCbEoF,GAA4ClgC,QAAC0E,GACjDA,EAAEorB,KACFA,EAAIkQ,KACJA,EAAI3kB,MACJA,EAAKnb,MACLA,EAAKivB,MACLA,EAAKzN,OACLA,EAAMyZ,WACNA,EAAUlwB,KAEVA,EAAO,KAAItK,MACXA,EAAQ,UAASC,QACjBA,EAAU,UAAS4d,UACnBA,GAAY,EAAKqc,UACjBA,GAAY,EAAKsF,WACjBA,GAAa,EAAKnE,WAClBA,GAAa,EAAK54B,WAClBA,GAAa,EAAKg9B,YAClBA,GAAc,EAAKC,YACnBA,GAAc,EAAKC,QACnBA,EAAU,EAACC,QACXA,EAAU,GAAEC,OACZA,EAASA,SAAQ7Y,SACjBA,EAAQgX,QACRA,EAAOsB,QACPA,EAAUA,SAAQlF,SAClBA,EAAWA,SAAQD,aACnBA,EAAeA,SAAQpc,aACvBA,EAAeA,SAAQ7d,MACvBA,EAAQ,CAAEsuB,MAAO,GAAIgM,WAAY,KAElCn7B,EADIc,EAAKC,EAAAf,EAAAuB,IAEFw6B,KAAelB,IAAa1L,GAI5BkO,EAAWl5B,OAAAC,QAEf+gB,OAAQ,EACR2X,gBAAiB,EACjBC,kBAAmB,EACnB77B,MAAO,OACPmF,UAAW,sBACXb,OAAQ,YACRkf,OAAQ,OACR+b,OAAQ,WAERzB,GAAI,CACF0B,MAAO,CACLvhC,QAAS,SAKbqH,SAAU01B,aAAWC,UAAUlxB,GAC/BxE,WAAyC,IAA7By1B,aAAWC,UAAUlxB,GAEjCtE,cAAe,UAGf1H,gBAAiB,cACjBuM,MAAOpI,EAAa,iBAAmB,iBAGvC+B,OAAQ/B,EAAa,cAAgB,OAGrCsC,WAAY,iBAKT7E,EAAa,OAEZ8d,EAAcA,IAAMD,GAAcF,GAoBxC,OACEre,gBAACm7B,kBACCH,WAAYA,EACZ9f,MAAOA,EACPxa,MAAOA,GACHC,GAEJX,gBAAC27B,kBACC3M,MAAOA,EACPlkB,KAAMA,EACNoQ,MAAOA,EACP1a,MAAOA,EACPE,MAAOA,EACP6gB,OAAQA,EACR9gB,QAASA,EACTV,MAAOA,EACPsL,MAAO,gBACPgT,UAAWA,EACXpb,WAAYA,EACZ44B,WAAYA,EACZnB,UAAWA,EACXkB,UAAWA,EACXjd,aAAcH,EACdI,aAAcJ,SACV9d,SAAAA,EAAOqa,SAEX/a,gBAACu8B,0BAAiB77B,SAAAA,EAAO8/B,QACtB5E,GACC57B,gBAACq8B,kBACCkC,QAASh6B,EACT8G,MAAO,gBACP6P,MAAOA,SACHxa,SAAAA,EAAOsuB,OAEVA,GAGLhvB,gBAAC+K,yBACC7C,GAAG,WACH3D,GAAIA,EACJorB,KAAMA,EACN8Q,KAAMN,EACNO,KAAMN,EACNrgC,MAAOA,EACPu9B,SAAUzB,EACVvZ,SAAUrf,EACV09B,UAAWV,EACXW,WAAYZ,EAAW1hC,WACvB+7B,YAAawF,EACbQ,OAhEUjH,IAClBiH,EAAOjH,GACPuB,GAAa,IA+DL6D,QArEUC,KAClB9D,GAAa,GACT6D,GAASA,KAoELqC,YAAaX,EAAY5hC,WACzBkpB,SA9DR4R,IAEqB,iBAAVA,GACTwB,EAASxB,GACL5R,GAAUA,EAAS4R,KAEvBwB,EAASxB,EAAM1a,OAAO3e,OAClBynB,GAAUA,EAAS4R,EAAM1a,OAAO3e,UAwD1Bm9B,QACAx8B,SAAAA,EAAOogC,eCjKVC,GAAoBlhC,QAACmvB,MAChCA,EAAKqL,YACLA,EACAt6B,MAAOmB,GACQrB,GAERggC,EAAMC,GAAW/9B,iBAASitB,EAAAA,EAASqL,IAEnCK,EAAWC,GAAgB54B,YAAS,IAEpCsc,EAAWE,GAAgBxc,YAAS,IAEpChC,EAAO66B,GAAY74B,WAASb,GAQnC,OANAc,UAAQ,KAEN89B,EAAQpF,IAAc36B,QAAQs6B,EAAAA,EAAe,SAAKrL,EAAAA,EAASqL,IAE1D,CAACt6B,EAAO26B,EAAW1L,EAAOqL,IAEtB,CACLwF,KAAAA,EACAC,QAAAA,EACApF,UAAAA,EACAC,aAAAA,EACAtc,UAAAA,EACAE,aAAAA,EACAqc,SAAAA,EACA76B,MAAAA,4UCXEihC,GAAkBrgC,GAAeX,gBAACm/B,uBAAM1/B,KAAK,QAAWkB,IACxDsgC,GAA8CphC,QAAC0E,GACnDA,EAAEorB,KACFA,EAAIX,MACJA,EAAK6Q,KACLA,EAAI9/B,MACJA,EAAKynB,SACLA,EAAQvL,KACRA,EAAID,MACJA,EAAKgf,WACLA,EAAUkG,aAEVA,EAAY3f,OACZA,EAAS,GAAE7gB,MACXA,EAAQ,CAAEM,UAAW,GAAIg8B,MAAO,GAAIhO,MAAO,GAAIgM,WAAY,GAAIxyB,KAAM,IAAIsC,KACzEA,EAAO,KAAItK,MACXA,EAAQ,UAASC,QACjBA,EAAU,UAASya,MACnBA,GAAQ,EAAKwf,UACbA,GAAY,EAAKrc,UACjBA,GAAY,EAAKpb,WACjBA,GAAa,EAAK44B,WAClBA,GAAa,EAAKsF,YAClBA,GAAc,EAAIlB,YAClBA,GAAc,EAAKH,QACnBA,EAAUA,SAAQnF,aAClBA,EAAeA,SAAQpc,aACvBA,EAAeA,SAAQqc,SACvBA,EAAWA,SAAQ/1B,QACnBA,EAAUA,SAAQ25B,QAClBA,EAAO6B,OACPA,EAASA,SACT/gB,UAAWC,GAEZ1f,EADIc,EAAKC,EAAAf,EAAAuB,KAEFsK,SAAEA,EAAQ4T,UAAEA,GAAc3T,aAC1By1B,EAAY11B,EAAS,qBAAsB,CAC/C4T,UAAWC,GAA4BD,IAEnCsc,KAAelB,IAAa1L,GAI5BkO,EAAWl5B,OAAAC,QAEf+gB,OAAQ,EACR2X,gBAAiB,EACjBC,kBAAmB,EACnB77B,MAAO,OACPsE,OAAQ,OACRkf,OAAQ,OAGRsa,GAAI,CACF0B,MAAO,CACLvhC,QAAS,SAKbqH,SAAU01B,aAAWC,UAAUlxB,GAC/BxE,WAAYy1B,aAAWC,UAAUlxB,GAEjCtE,cAAe,UAGf1H,gBAAiB,cACjBuM,MAAOpI,EAAa,iBAAmB,iBAGvC+B,OAAQ/B,EAAa,cAAgB,OAGrCsC,WAAY,iBAGT7E,EAAa,OAMZ8d,EAAcA,IAAMD,GAAcF,GA2BxC,OACEre,gBAACm7B,IAAeH,WAAYA,EAAY9f,MAAOA,EAAOxa,MAAOA,GAC3DV,gBAAC27B,IACC3M,MAAOA,EACPlkB,KAAMA,EACNoQ,MAAOA,EACP1a,MAAOA,EACPE,MAAOA,EACP6gB,OAAQA,EACR9gB,QAASA,EACTV,MAAOA,EACPsL,MAAO,gBACPgT,UAAWA,EACXpb,WAAYA,EACZ44B,WAAYA,EACZnB,UAAWA,EACXkB,UAAWA,EACXjd,aAAcH,EACdI,aAAcJ,GAEbvC,EACDjc,gBAACu8B,QACEX,GACC57B,gBAACq8B,kBACCkC,QAASh6B,EACT8G,MAAO,gBACP6P,MAAOA,GACHxa,GAEHsuB,GAGLhvB,gBAACghC,kBACCz8B,GAAIA,EACJorB,KAAMA,EACN2N,SAAUzB,EACVvZ,SAAUrf,EACV09B,UAAWV,EACX5F,YAAawF,EACbrB,QAtEUC,KAClB9D,GAAa,GACT6D,GAASA,KAqEL6B,OAlEUjH,IACdiH,GAAQA,EAAOjH,GACnBuB,GAAa,IAiEL0G,aAAa,OACTnE,EACAv8B,GACJ6mB,SAjER4R,IAEqB,iBAAVA,GACTwB,EAASxB,GACL8H,GAAcA,EAAa9H,GAC3B5R,GAAUA,EAAS4R,KAEvBwB,EAASxB,EAAM1a,OAAO3e,OAClBmhC,GAAcA,EAAa9H,EAAM1a,OAAO3e,OACxCynB,GAAUA,EAAS4R,EAAM1a,OAAO3e,SAyD9BA,MAAOA,MAGVohC,GAAephC,IAAU87B,IAAe54B,GACvCjD,gBAACi8B,QACCj8B,gBAAC+N,IACC3C,YAAa2wB,aAAWC,UAAUlxB,GAClCO,MAAO+1B,EACPv8B,QA9DQy8B,KAClB1G,EAAS,IACLpT,IACF6Y,EAAO,CAAE3hB,OAAQ,CAAEiR,KAAAA,KACfuR,GAAcA,EAAa,IAC3B1Z,GAAUA,EAAS,KAED,oBAAbqS,UAA4BqH,GAAcA,EAAa,QA2D7DllB,KCtLIulB,GAAmB1hC,QAAC2hC,kBAC/BA,GAAoB,GACN3hC,GACPwe,EAAWE,GAAgBve,EAAM+B,UAAS,IAC1C0/B,EAAYC,GACjB1hC,EAAM+B,SAAkBy/B,GAE1B,MAAO,CACLnjB,UAAAA,EACAE,aAAAA,EACAkjB,WAAAA,EACAC,cAAAA,ICGSC,GAAiC,CAC5C56B,GAAI,CAAE1B,OAAQ,OAAQtE,MAAO,QAC7BiG,GAAI,CAAE3B,OAAQ,OAAQtE,MAAO,QAC7BkG,GAAI,CAAE5B,OAAQ,OAAQtE,MAAO,QAC7BmG,GAAI,CAAE7B,OAAQ,OAAQtE,MAAO,QAC7BoG,GAAI,CAAE9B,OAAQ,OAAQtE,MAAO,SAOlBid,GAAkC,CAC7CjX,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,IAMOy6B,GAA4C,CACvDC,SAAU,CACR/iC,gBAAiB,gBACjBI,YAAa,gBACbmM,MAAO,eAETy2B,WAAY,CACVhjC,gBAAiB,cACjBC,YAAa,MACbE,YAAa,QACbC,YAAa,iBACbmM,MAAO,eAET02B,cAAe,CACbjjC,gBAAiB,gBACjBI,YAAa,gBACbmM,MAAO,gBAOE22B,GAAc,CACzBnM,MAAO,CACLgM,SAAU,CACR/iC,gBAAiB,iBACjBI,YAAa,kBAEf4iC,WAAY,CACV5iC,YAAa,kBAEf6iC,cAAe,CACbjjC,gBAAiB,iBACjBI,YAAa,mBAGjBojB,SAAU,CACRuf,SAAU,CACR/iC,gBAAiB,iBACjBI,YAAa,iBACbsE,QAAS,IAEXs+B,WAAY,CACV5iC,YAAa,iBACbsE,QAAS,IAEXu+B,cAAe,CACbjjC,gBAAiB,iBACjBI,YAAa,iBACbsE,QAAS,KAGb0X,MAAO,CACL2mB,SAAU,CACR/iC,gBAAiB,gBACjBI,YAAa,iBAEf4iC,WAAY,CACV5iC,YAAa,iBAEf6iC,cAAe,CACbjjC,gBAAiB,gBACjBI,YAAa,0RCpFb+iC,GAA4CpiC,QAAC0E,GACjDA,EAAEkB,KACFA,EAAIupB,MAEJA,EAAK4P,UACLA,EAASpX,SACTA,EAAQrmB,cACRA,EAAaogB,OACbA,EAAS,GAAEge,cACXA,EAAgB,QAAOz0B,KACvBA,EAAO,KAAIoQ,MACXA,GAAQ,EAAKumB,WACbA,GAAa,EAAKpjB,UAClBA,GAAY,EAAKpb,WACjBA,GAAa,EAAK44B,WAClBA,GAAa,EAAKqG,gBAClBA,GAAkB,EAAKV,kBACvBA,GAAoB,EAAKE,cACzBA,EAAgBA,SAAQnjB,aACxBA,EAAeA,SAAQ7d,MACvBA,EAAQ,CAAEyhC,SAAU,GAAInT,MAAO,IAAIoT,SACnCA,GAGDviC,EADIc,EAAKC,EAAAf,EAAAuB,IAEFod,EAAcA,IAAMD,GAAcF,GAalC5d,EAAUyhC,EACZ,gBACAtD,GAAa6C,EACb,WACA,aAKEY,EAAannB,EACf8mB,GAAY9mB,MAAMza,GAClBwC,EACA++B,GAAY1f,SAAS7hB,GACrB4d,EACA2jB,GAAYnM,MAAMp1B,GAClB,GAKE6hC,EAAgB,CACpBthC,UAASgD,OAAAC,QAEPmX,IAAK,EACL9V,QAAS,OACTD,OAAQ,cACRqb,cAAe,SACf3f,MAAO,cAKPsK,MAAO6P,EACH,gBACAjY,EACA,iBACA,iBAGJ+B,OAAQ/B,EAAa,cAAgB44B,EAAa,UAAY,UAC9Dr4B,QAASP,EAAa,GAAM,EAG5BsC,WAAY,iBAGT7E,EAAa,OAElByhC,SAAQn+B,OAAAC,UAEH29B,GAAcnhC,GAGd4hC,GAGH3jC,aAAc,OAGXijC,GAAM72B,IAGTvF,WAAY,iBAGTgc,EACA7gB,EAAgB,WAIvB,OACEV,gBAACo8B,kBACCmC,QAASh6B,EACT2D,GAAG,MACHrD,QArFiB09B,KACd1G,GAAe54B,IACdy+B,GAAeA,GAAeD,GAC9Bja,GAAUA,GAAUoX,GACpBz9B,GAAeA,GAAey9B,KAkFlCjgB,aAAcH,EACdI,aAAcJ,EACd1T,KAAMixB,aAAWC,UAAUlxB,IACvBw3B,EAActhC,UACdL,GAEJX,gBAACc,YAASsa,IAAK,GACZ,IAEDpb,gBAACoF,cAAWgW,IAAK,GAAInW,WAAW,UAC7B,IAGkB,SAAlBs6B,GAA4BvQ,GAC3BhvB,gBAACkL,iBACCJ,KAAMA,EACNvE,WAAW,aACP7F,SAAAA,EAAOsuB,OAEVA,GAILhvB,gBAACuL,0BAAW+2B,EAAcH,UACvBD,EACCliC,gBAACqP,IACCjE,YAAa4S,GAAUlT,GACvBO,MAAM,QACN9F,WAAW,mBAGZq5B,GAAa6C,WACbh8B,EAAAA,EACCzF,gBAACgY,IACC5M,YAAa4S,GAAUlT,GACvBO,MAAM,QACN9F,WAAW,oBAMA,UAAlBg6B,GAA6BvQ,GAC5BhvB,gBAACkL,iBACCJ,KAAMA,EACNvE,WAAW,aACP7F,SAAAA,EAAOsuB,OAEVA,IAKNoT,GACCpiC,gBAACkL,iBACCguB,WAA8B,SAAlBqG,EAA2B,EAAI,GAC3Cl0B,MAAM,iBACNP,KAAK,KACLvE,WAAW,MACXD,WAAW,aACP5F,SAAAA,EAAO0hC,UAEVA,IAMNlnB,GACClb,gBAACkL,GACCJ,KAAK,KACLyQ,UAAW,EACX2f,iBAAkB,EAClB7vB,MAAM,gBACN9E,WAAW,MACXhB,WAAW,iBAEV2V,q3cC7MEsnB,GAAwB3iC,QAACw6B,YAAEA,GAAiCx6B,GAChE4iC,EAAYC,GACjB1iC,EAAM+B,SAAyB4gC,KAC1B5iC,EAAO66B,GAAY56B,EAAM+B,eAC9Bs4B,EAAAA,EAAesI,GAAY,GAAGhT,OAEzB6K,EAAMC,GAAWz6B,EAAM+B,UAAS,IAChC24B,EAAWC,GAAgB36B,EAAM+B,UAAS,IAC1Csc,EAAWE,GAAgBve,EAAM+B,UAAS,GACjD,MAAO,CACLy4B,KAAAA,EACAC,QAAAA,EACAgI,WAAAA,EACAC,cAAAA,EACArkB,UAAAA,EACAE,aAAAA,EACAmc,UAAAA,EACAC,aAAAA,EACA56B,MAAAA,EACA66B,SAAAA,ICtBS5c,GAAkC,CAC7CjX,GAAI,EACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,iUCYAy7B,GAAoD/iC,IAAA,IAErDc,EAAKC,EAAAf,EAAAuB,IAAA,OACJpB,gBAAC+K,yBAAQ7C,GAAG,MAASvH,KACrBkiC,GAAkCliC,GACtCX,gBAACm/B,uBAAM1/B,KAAK,WAAckB,IAEtBmiC,GAA2C9/B,IAAA,IAAYrC,EAAKC,EAAAoC,EAAAqB,IAAA,OAChErE,gBAAC+K,yBAAQ7C,GAAG,MAASvH,KAEVoiC,GAA4C5+B,QAACs4B,OACxDA,EAAM3xB,KACNA,EAAO,KAAI4xB,SACXA,EAAWA,SAAQh8B,MACnBA,EAAQ,CAAE8H,KAAM,KACjBrE,GACQka,EAAWE,GAAgBxc,YAAS,GAKrCyc,EAAcA,IAAMD,GAAcF,GACxC,OACEre,gBAAC8iC,kBACC9d,OAAQ,EACR/e,KAAK,eACL42B,cAAc,OACdt2B,WAAW,SACXo2B,gBAAiB,EACjBC,kBAAmB,GACnBje,aAAcH,EACdI,aAAcJ,EACd3Z,QAfuBu0B,IACrBA,GAASA,EAAMgF,iBAAiBhF,EAAMgF,kBAC1C1B,EAASD,IAcPp2B,SAAU01B,aAAWC,UAAUlxB,GAC/BhM,gBAAiBuf,EAAY,eAAiB,eAC1C3d,EAAY,MAEf+7B,IAIMe,GAAiDz3B,QAAC+E,KAC7DA,EAAIpK,MACJA,EAAQ,CAAEy9B,SAAU,IAAI5D,QACxBA,EAAU,GAAEmC,SACZA,EAAWA,UACZ32B,EACO43B,EAAkBlB,GAAmBC,EAASD,GACpD,OACEz8B,gBAAC4iC,kBACC38B,KAAK,WACL+e,OAAQ,EACRjgB,QAAS,EACTuD,IAAI,OACJvH,MAAM,OACNuE,QAAQ,OACR+f,OAAQ,IACR9hB,SAAS,OACT2C,UAAU,QACVxH,aAAc,EACdyJ,SAAS,WACTuY,cAAc,SACd5hB,gBAAgB,cAChBgc,UAAU,yKACNpa,EAAgB,UAEnB65B,EAAQ32B,IAAK64B,GACZz8B,gBAAC+iC,kBACCrX,IAAK+Q,EAAOuG,KACZl4B,KAAMA,EACN2xB,OAAQA,EAAO9M,KACf+M,SAAUiB,GACNj9B,EAAY,UAMbuiC,GAAsD1iC,QAACgE,GAClEA,EAAEorB,KACFA,EAAIX,MACJA,EAAKjvB,MACLA,EAAKs6B,YACLA,EAAWW,WACXA,EAAUR,KACVA,GAAO,EAAKtf,MACZA,GAAQ,EAAKmD,UACbA,GAAY,EAAKqc,UACjBA,GAAY,EAAKuF,YACjBA,GAAc,EAAKh9B,WACnBA,GAAa,EAAK44B,WAClBA,GAAa,EAAKta,OAClBA,EAAS,GAAEkhB,WACXA,EAAa,GAAE33B,KACfA,EAAO,KAAIrK,QACXA,EAAU,UAASD,MACnBA,EAAQ,UAASgnB,SACjBA,EAAQ6Y,OACRA,EAASA,SAAQ5F,QACjBA,EAAUA,SAAQiI,cAClBA,EAAgBA,SAAQnkB,aACxBA,EAAeA,SAAQoc,aACvBA,EAAeA,SAAQC,SACvBA,EAAWA,SAAQl6B,MACnBA,EAAQ,CACN8H,KAAM,GACN/C,KAAM,GACNupB,MAAO,GACPmP,SAAU,GACVnD,WAAY,IAEd1b,UAAWC,GAEZhf,EADII,EAAKC,EAAAL,EAAAyF,KAEF0F,SAAEA,EAAQ4T,UAAEA,GAAc3T,aAC1By1B,EAAY11B,EAAS,qBAAsB,CAC/C4T,UAAWC,GAA4BD,IAEnCd,EAAcA,IAAMD,GAAcF,GA0BlCud,KAAe5M,IAAU0L,IAAa36B,GACtCm9B,EAAWl5B,OAAAC,QACf+gB,OAAQ,EACR2X,gBAAiB,EACjBC,kBAAmB,EACnB77B,MAAO,OACPmiC,OAAQ,OACR3e,OAAQ,OACRsa,GAAI,CAAE0B,MAAO,CAAEvhC,QAAS,SACxBqH,SAAU01B,aAAWC,UAAUlxB,GAC/BhM,gBAAiB,cACjBuM,MAAOpI,EAAa,qBAAuB,qBAC3C+B,OAAQ/B,EAAa,cAAgB44B,EAAa,OAAS,WACxDn7B,EAAa,OAElB,OACEV,gBAACm7B,IACCH,WAAYA,EACZ9f,MAAOA,EACPxa,MAAOA,EACPmE,QAvCgBC,KACb7B,GAAe44B,GAClBpB,GAASD,KAuCTx6B,gBAAC27B,IACC3M,MAAOA,EACPlkB,KAAMA,EACNoQ,MAAOA,EACP1a,MAAOA,EACPE,MAAOA,EACP6gB,OAAQA,EACR9gB,QAASA,EACTV,MAAOA,EACPsL,MAAO,gBACPgT,UAAWA,EACXpb,WAAYA,EACZ44B,WAAYA,EACZnB,UAAWA,EACXkB,UAAWA,EACXjd,aAAcH,EACdI,aAAcJ,GAEdxe,gBAACu8B,QACEX,GACC57B,gBAACq8B,kBACCkC,QAASh6B,EACT8G,MAAO,gBACP6P,MAAOA,GACHxa,GAEHsuB,GAGLhvB,gBAAC6iC,kBACCt+B,GAAIA,EACJorB,KAAMA,EACN0K,YAAaA,EACbiD,SAAUzB,EACVvZ,SAAUrf,EACV09B,UAAWV,EACXI,OA/DUjH,IAClBiH,EAAOjH,GACPuB,GAAa,IA8DL6D,QApFUC,IAAM9D,GAAa,IAqFzBuC,EACAv8B,GACJZ,MAAOA,EACPynB,SA7EY4R,IACpB,IAAM+J,EAAe/J,EAAM1a,OAAO3e,MAC5BqjC,EAAoBT,GAAY//B,OAAQygC,GAC5CA,EAAQ1T,KAAK2T,cAAcC,WAAWJ,EAAaG,gBAEjD9I,GAAMC,GAAQ,GAClBiI,EAAcU,GACV5b,GAAUA,EAAS2b,QAyEnBnjC,gBAACi8B,QAEGj8B,gBAACkM,GADFsuB,GAEGlvB,YAAY,OACZF,YAAa4S,GAAUlT,GACvBO,MAAO+1B,EACPj4B,MAAOzI,EAAY,OAInB4K,YAAY,KACZF,YAAa4S,GAAUlT,GACvBO,MAAO+1B,EACPj4B,MAAOzI,EAAY,UAKzB85B,GACAx6B,gBAACw9B,IACC1yB,KAAMA,EACNpK,MAAOA,EACP65B,QAASkI,EACT/F,SAjHgBD,IACtBhC,GAASD,GACTI,EAAS6B,GACLjV,GAAUA,EAASiV,QC3Id+G,GAAqBA,KAChC,IAAOnlB,EAAWE,GAAgBve,EAAM+B,UAAS,IAC1C24B,EAAWC,GAAgB36B,EAAM+B,UAAS,IAC1C0hC,EAAMC,GAAW1jC,EAAM+B,SAAS4hC,EAAO,IAAIvP,KAAQ,eAE1D,MAAO,CACLqP,KAAAA,EACAC,QAAAA,EACArlB,UAAAA,EACAE,aAAAA,EACAmc,UAAAA,EACAC,aAAAA,yOCLEiJ,GAAqBjjC,GAAeX,gBAACm/B,uBAAM1/B,KAAK,QAAWkB,IAE3DkjC,GAAgDhkC,QAAC0E,GACrDA,EAAEorB,KAEFA,EAAIX,MACJA,EAAKyU,KACLA,EAAIzI,WAEJA,EAAUzZ,OACVA,EAAS,GAAEzW,KACXA,EAAO,KAAIrK,QACXA,EAAU,UAASD,MACnBA,EAAQ,UAASE,MACjBA,EAAQ,CAAEM,UAAW,GAAIguB,MAAO,GAAIgM,WAAY,GAAIxyB,KAAM,GAAIw0B,MAAO,IAAI9hB,MACzEA,GAAQ,EAAKmD,UACbA,GAAY,EAAKqc,UACjBA,GAAY,EAAKz3B,WACjBA,GAAa,EAAK44B,WAClBA,GAAa,EAAK6H,QAClBA,EAAUA,SAAQ/I,aAClBA,EAAeA,SAAQpc,aACvBA,EAAeA,SAAQiJ,SACvBA,EAAQ0Z,aACRA,GAEDrhC,EADIc,EAAKC,EAAAf,EAAAuB,IAEFw6B,KAAelB,IAAa1L,GAE5BxQ,EAAcA,IAAMD,GAAcF,GAGlCylB,EAAoB1K,IACH,iBAAVA,GACTsK,EAAQtK,GACJ8H,GAAcA,EAAa9H,KAE/BsK,EAAQtK,EAAM1a,OAAO3e,OACjBynB,GAAUA,EAAS4R,EAAM1a,OAAO3e,SAIlCm9B,EAAWl5B,OAAAC,QACf+gB,OAAQ,EACR2X,gBAAiB,EACjBC,kBAAmB,EACnB77B,MAAO,OACPmiC,OAAQ,OACR3e,OAAQ,OACRsa,GAAI,CACF0B,MAAO,CACLvhC,QAAS,OACTF,gBAAiB,gBAGrBuH,SAAU01B,aAAWC,UAAUlxB,GAC/BhM,gBAAiB,cACjBuM,MAAOpI,EAAa,qBAAuB,qBAC3C+B,OAAQ/B,EAAa,cAAgB44B,EAAa,OAAS,WACxDn7B,EAAa,OAGlB,OACEV,gBAACm7B,IAAeH,WAAYA,EAAY9f,MAAOA,EAAOxa,MAAOA,GAC3DV,gBAAC27B,IACC3M,MAAOA,EACPlkB,KAAMA,EACNoQ,MAAOA,EACP1a,MAAOA,EACPE,MAAOA,EACP6gB,OAAQA,EACRlW,MAAO,gBACP5K,QAASA,EACTV,MAAO0jC,EACPplB,UAAWA,EACXpb,WAAYA,EACZ44B,WAAYA,EACZnB,UAAWA,EACXkB,UAAWA,EACXjd,aAAcH,EACdI,aAAcJ,GAEdxe,gBAACu8B,QACEX,GACC57B,gBAACq8B,kBACCkC,QAASh6B,EACT8G,MAAO,gBACP6P,MAAOA,GACHxa,GAEHsuB,GAGLhvB,gBAAC4jC,kBACCr/B,GAAIA,EACJorB,KAAMA,EACN6O,QAlEUC,IAAM9D,GAAa,GAmE7BrY,SAAUrf,EACVq6B,SAAUzB,GACNqB,EACAv8B,EACCugC,GAAgB,CAAEA,aAAc4C,IACrCtc,SAAUsc,SC3GTC,GAAoBpjC,IAC/B,IAAMqjC,EAAkBjD,GAAkBpgC,IACnCsjC,EAAWC,GAAgBniC,YAAS,GAE3C,OAAAiC,OAAAC,QAASggC,UAAAA,EAAWC,aAAAA,GAAiBvjC,EAAUqjC,oECLpCG,GAAmBA,CAC9BlP,EACAoF,EACA+J,KAGA,IAAOC,EAAeC,GAAoBviC,WAAyBkzB,IAE5DsP,EAAcC,GAAmBziC,WACtCs4B,EAAc,CAAEt6B,MAAOs6B,EAAarL,MAAOqL,GAAgBpF,EAAM,KAG5D4F,EAAkBC,GAAuB/4B,WAAiB,IAE1D0iC,EAAaC,GAAkB3iC,iBACpCqiC,EAAAA,EAAqB,KAGhBO,EAAmBC,GAAwB7iC,YAAS,GAE3D,MAAO,CACLsiC,cAAAA,EACAC,iBAAAA,EACAC,aAAAA,EACAC,gBAAAA,EACA3J,iBAAAA,EACAC,oBAAAA,EACA2J,YAAAA,EACAC,eAAAA,EACAC,kBAAAA,EACAC,qBAAAA,2RCzBEC,GAA4ChlC,QAACw6B,YACjDA,EAAWpF,MACXA,EAAK6P,SACLA,GAAW,EAAIpM,SACfA,EAAQqM,cACRA,GAAgB,EAAI9oB,KACpBA,EAAID,MACJA,EAAKgT,MACLA,EAAKqV,cACLA,EAAaG,gBACbA,EAAeD,aACfA,EAAY1J,iBACZA,EAAgBC,oBAChBA,EAAmB2J,YACnBA,EAAWC,eACXA,EAAcJ,iBACdA,EAAgB5jC,MAChBA,EAAKikC,kBACLA,EAAiBC,qBACjBA,GAGD/kC,EADIc,EAAKC,EAAAf,EAAAuB,IAoCR,OAjCAc,YAAU,KACR,IAAMu3B,EAAsBL,KACbA,EAAM4L,eACK3gB,KACrB4gB,GAAiC,6BAAhBA,SAAAA,EAAS1gC,MAG3BqgC,GAAqB,IAIzB,OADA/K,SAASC,iBAAiB,YAAaL,GAChC,IAAMI,SAASE,oBAAoB,YAAaN,IACtD,IAsBDz5B,gBAACoF,4BACCa,KAAK,WACLoV,SAAS,SACTD,IAAK,GACLnW,WAAW,SACXlE,MAAM,QACFJ,GAEHquB,GACChvB,gBAACkL,GAAKxK,YAAOA,SAAAA,EAAOsuB,MAAOuP,QAAS59B,EAAM4D,IACvCyqB,GAGLhvB,gBAACqD,QAAK8E,SAAS,YACbnI,gBAACoF,4BACCJ,OAAO,UACPlG,gBAAgB,cAChBgc,UAAU,kCACV/V,QAAQ,OACRO,QAAQ,OACRL,WAAW,SACXvG,aAAa,MACbwG,eAAe,gBACfgY,SAAU,IACV7B,SAAS,gBACL3a,SAAAA,EAAOM,WAEXhB,gBAACoF,4BACCgW,IAAK,GACLnW,WAAW,SACXkD,SAAS,WACTpH,MAAM,OACN8D,QAASA,IAAM+/B,GAAsBD,UACjCjkC,SAAAA,EAAOwkC,gBAEVjpB,EACDjc,gBAACkL,iBACCL,OAAO,SACPouB,SAAU,EACV5tB,MAAM,wBACF3K,SAAAA,EAAOsuB,OAEVuV,EAAavV,QAGjBhT,EACA2oB,GACC3kC,gBAACqD,sBACCkB,GAAG,oBACH4D,SAAS,WACTrJ,gBAAgB,cAChBgc,UAAU,kCACV/Z,MAAM,OACN68B,UAAU,OACVvY,OAAQ,IACRjd,QAAS,EACT6T,KAAM,EACNzW,UAAU,mBACV+V,UAAU,MACV7c,aAAa,aACTgC,SAAAA,EAAOykC,UAEVJ,GACC/kC,gBAAColC,IACC7gC,GAAI5D,EAAM4D,GACVorB,KAAMhvB,EAAMgvB,KACZ5uB,MAAM,OACNtB,KAAK,SACLM,MAAO0kC,EACPjd,SAAWznB,GAzFLslC,CAAAA,IAEpB,GADAX,EAAeW,GACD,KAAVA,EACFf,EAAiBrP,OACZ,CACL,IAAMqQ,EAAWrQ,EAAMryB,OAAQc,GAC7BA,EAAKsrB,MAAMsU,cAAc3gC,SAAS0iC,EAAM/B,gBAE1CgB,EAAiBgB,GAEnBxK,EAAoB,IA+EeyK,CAAaxlC,GAClC8/B,KAAMxF,EACN8G,aAAa,EACbllB,KAAMjc,gBAACoX,IAAWhM,YAAa,KAC/B1K,MAAO,CACLM,UAASgD,OAAAC,QACPlD,MAAO,OACPgE,QAAS,WACTygC,aACEnB,EAAchiC,OAAS,EACnB,iBACA,+BACH3B,SAAAA,EAAO8H,SAKjB67B,EAAchiC,OAAS,GACtBrC,gBAACqD,QAAK2hB,OAAQ,EAAGjgB,QAAS,GACvBs/B,EAAczgC,IAAI,CAACF,EAAM4lB,IACxBtpB,gBAACoF,4BACCF,eAAe,gBACfwmB,IAAKhoB,EAAK3D,MACVgF,QAAQ,OACRC,OAAO,UACPtG,aAAc,EACdI,gBACEwqB,IAAUuR,EACN,iBACA,cAENlc,aAAcA,IAAMmc,EAAoBxR,GACxCzkB,QAASA,IA5GPnB,CAAAA,IACpB8gC,EAAgB9gC,SAChBg1B,GAAAA,EAAWh1B,GACXkhC,GAAqB,IAyGYa,CAAa/hC,UACxBhD,SAAAA,EAAOgD,MAEX1D,gBAACkL,OAAMxH,EAAKsrB,OACZhvB,gCACG0D,EAAK+B,MAAQ/B,EAAK+B,KAClB/B,EAAK3D,QAAUwkC,EAAaxkC,OAC3B+kC,IACCphC,EAAK+B,MAAQzF,gBAACgY,IAAS5M,YAAa,yECnKlDs6B,GAAmB7lC,WAC9BE,MAAO2B,EAAeR,aACtBA,EAAe,GAAEmB,OACjBA,EAAS,EAACmlB,SACVA,EAAQ0Z,aACRA,EAAYyE,WACZA,EAAUC,UACVA,EAASC,WACTA,EAIUC,QACVA,EAAOC,WACPA,EAAUC,iBACVA,GACcnmC,EAER8B,OAAmCH,IAApBE,EACfE,EAAeD,EAAeD,EAAkBR,GAG/CnB,EAAO+B,GAAoBC,kBAChCH,SAAAA,EAAcqI,MAAM,EAAG5H,KAAW,KAI7Bq4B,EAAWC,GAAgB54B,YAAkB,IAC7Csc,EAAWE,GAAgBxc,YAAkB,IAG7CkkC,EAAsBC,GAA2BnkC,WAEtD,OACKokC,EAAoBC,GAAyBrkC,WAClD,MAIIskC,EAAWz9B,SAAyB,MACpCD,EAAeC,SAAuB,MACtC09B,EAAiB19B,SAAO,CAC5B7I,MAAAA,EACAynB,SAAUA,YACV+e,MACoB,oBAAX/O,gBAAsBgP,EAC7BhP,gBAAMgP,EAANA,EAAQC,YAARD,EAAaE,gBAAbF,EAAaE,SAAW,wBAAyB,WAE/CC,EAAmB/9B,SAEtB,CACDghB,KAAM,CAAC,KAAM,KAAM,UAIfgd,EAASd,EACQ,iBAAZA,EACL,IAAIe,OAAOf,GACXA,EACF,KAGJ5jC,YAAU,KACJP,GAAgBD,IAAoB3B,GACtC+B,SAAiBJ,SAAAA,EAAiBuI,MAAM,EAAG5H,KAAW,KAEvD,CAACV,EAAcD,EAAiBW,EAAQtC,IAG3C,IAAM66B,EAAWr4B,cACdE,IAEC,IAAIqkC,EAAarkC,EAEjB,GAAIsjC,GAAcA,EAAW1jC,OAAS,GAAKI,EAAU,CAEnD,IAAMskC,EAAWC,SAASvkC,EAAU,IACpC,IAAKwkC,MAAMF,GAAW,CAKpB,IAHA,IAAIG,EAAUnB,EAAW,GACrBoB,EAAU/oC,KAAK0rB,IAAIid,EAAWG,GAEzBrY,EAAI,EAAGA,EAAIkX,EAAW1jC,OAAQwsB,IAAK,CAC1C,IAAMuY,EAAOhpC,KAAK0rB,IAAIid,EAAWhB,EAAWlX,IACxCuY,EAAOD,IACTA,EAAUC,EACVF,EAAUnB,EAAWlX,IAKzBiY,EAAaI,EAAQ5oC,YAKzBwD,EAAiBglC,GAGbtf,GACFA,EAASsf,GAIP5F,GACFA,EAAa4F,GAIXnB,GAAcmB,EAAWzkC,SAAWA,GACtCsjC,EAAWmB,IAGf,CAACtf,EAAU0Z,EAAcyE,EAAYtjC,EAAQ0jC,IAIzCsB,EAAc9kC,cAAa8H,IAE3BA,GAAOg8B,EAASn9B,UAAYmB,GAE9BrG,OAAOsjC,eAAejB,EAAU,UAAW,CACzCtmC,MAAOsK,EACPk9B,UAAU,KAGb,IAGGhF,EAAehgC,cAClB6nB,IACC,IAAM3nB,EAAW2nB,EAAEod,cAAcznC,MAAMkK,MAAM,EAAG5H,GAC5CI,EAASJ,OAAS,GAAKukC,IAAWA,EAAOa,KAAKhlC,GAChD2nB,EAAE0M,kBAKJ8D,EAASn4B,GAGL4jC,EAASn9B,UACXm9B,EAASn9B,QAAQnJ,MAAQ0C,KAG7B,CAACJ,EAAQukC,EAAQhM,EAAUyL,IAGvB5H,EAAcl8B,cAAY,KAC9B,GAAI8jC,EAASn9B,QAAS,CAAA,IAAAw+B,EACdC,EAAQvpC,KAAKqrB,IAAI4c,EAASn9B,QAAQnJ,MAAMsC,OAAQA,EAAS,GACzDulC,EAAMvB,EAASn9B,QAAQnJ,MAAMsC,cACnCqlC,EAAArB,EAASn9B,UAATw+B,EAAkBG,kBAAkBF,EAAOC,GAC3C1B,EAAwByB,GACxBvB,EAAsBwB,GAExBjN,GAAa,IACZ,CAACt4B,IAEEylC,EAAavlC,cAAY,KAC7Bo4B,GAAa,IACZ,IAEGf,EAAgBr3B,cAAawpB,IAG7B6Z,GACFA,EAAU7Z,IAEX,IAEGgc,EAAiBxlC,cAAa6nB,IAG9Byb,GACFA,EAAWzb,IAEZ,IAEG4d,EAAczlC,cACjB6nB,IACC,IAAM6d,EAAQ5B,EAASn9B,QACvB,GAAKkhB,EAAE8d,eAAkBD,EAAzB,CAIA,IAAME,EAAW/d,EAAE8d,cAAcE,QAAQ,cACnCrtB,EAAUirB,EAAmBA,EAAiBmC,GAAYA,EAChE/d,EAAE0M,iBAEF,IAAM6Q,EAAQM,EAAMI,gBAAkB,EAChCT,EAAMK,EAAMK,cAAgB,EAO5B7lC,GALcklC,IAAUC,EAG1B7nC,EAAMkK,MAAM,EAAG09B,GAAS5sB,EAAUhb,EAAMkK,MAAM29B,GAC9C7nC,EAAMkK,MAAM,EAAG09B,GAAS5sB,EAAUhb,EAAMkK,MAAM09B,IAChB19B,MAAM,EAAG5H,GAE3C,KAAII,EAASJ,OAAS,GAAKukC,IAAWA,EAAOa,KAAKhlC,GAAlD,CAKAwlC,EAAMloC,MAAQ0C,EACdm4B,EAASn4B,GAGTX,EAAiBW,GAEjB,IAAM8lC,EAASnqC,KAAKqrB,IAAIhnB,EAASJ,OAAQA,EAAS,GAC5CmmC,EAAO/lC,EAASJ,OAEtB4lC,EAAMJ,kBAAkBU,EAAQC,GAChCtC,EAAwBqC,GACxBnC,EAAsBoC,MAExB,CAACnmC,EAAQ2jC,EAAkBY,EAAQhM,EAAU76B,EAAO+B,IAiJtD,OA7IAI,YAAU,KACR,IAAM+lC,EAAQ5B,EAASn9B,QACjBlI,EAAY2H,EAAaO,QAE/B,GAAK++B,GAAUjnC,EAAf,CAMEslC,EAAep9B,QAAQnJ,QAAUkoC,EAAMloC,OACvCumC,EAAep9B,QAAQse,UAEvB8e,EAAep9B,QAAQse,SAASygB,EAAMloC,OAIxC4mC,EAAiBz9B,QAAQ0gB,KAAO,CAC9Bqe,EAAMI,eACNJ,EAAMK,aACNL,EAAMQ,oBAuER5O,SAASC,iBAAiB,kBAAmB4O,EAA2B,CACtEC,SAAS,IAIXD,IACA7O,SAAS+O,gBAAkBX,GAAStN,GAAa,GAGjD,IAAMkO,EAAmBA,KACnB7nC,GACFA,EAAUmI,MAAM2/B,YAAY,gBAAoBb,EAAMc,oBAG1DF,IACA,IAAMG,EAAiB,IAAKxR,OAAeyR,eAAeJ,GAG1D,OAFAG,EAAeE,QAAQjB,GAEhB,KACLpO,SAASE,oBACP,kBACA2O,EACA,CAAEC,SAAS,IAEbK,EAAeG,cA5FjB,SAAST,kBACP,GAAI7O,SAAS+O,gBAAkBX,EAG7B,OAFA/B,EAAwB,WACxBE,EAAsB,MAKxB,IAAMgD,SAAEC,QAAGpB,SAAAA,EAAOI,gBAAcgB,EAAI,KAC9BC,SAAEC,QAAGtB,SAAAA,EAAOK,cAAYiB,EAAI,KAC5BC,SAAIC,QAAGxB,SAAAA,EAAOQ,oBAAkBgB,EAAI,KACpCC,SAAGC,QAAG1B,SAAAA,EAAO2B,WAASD,EAAI,EAC1BE,SAAIC,QAAG7B,SAAAA,EAAOloC,OAAK+pC,EAAI,GACvBC,EAAQpD,EAAiBz9B,QAAQ0gB,KAGnC+d,GAAS,EACTC,GAAO,EACP1f,EAA6C,OACjD,GAAoB,IAAhB2hB,EAAKxnC,QAAuB,OAAP+mC,GAAsB,OAAPE,EAAa,CAInD,GAHsBF,IAAOE,KACRF,IAAOS,EAAKxnC,QAAUwnC,EAAKxnC,OAASqnC,GAIvD,GAAU,IADAN,EAERzB,EAAQ,EACRC,EAAM,EACN1f,EAAY,eACP,GALGkhB,IAKOM,EACf/B,EANQyB,EAMI,EACZxB,EAPQwB,EAQRlhB,EAAY,gBACP,GAAIwhB,EAAM,GAAKG,EAAKxnC,OAAS,EAAG,CACrC,IAAI2nC,EAAS,EACI,OAAbD,EAAM,IAA4B,OAAbA,EAAM,KAIX,aAHlB7hB,EAZMkhB,EAYUW,EAAM,GAAK,WAAa,YAEtCA,EAAM,KAAOA,EAAM,IAAMA,EAAM,GAAKL,IAEpCM,GAAU,IAIdrC,EAAQqC,EApBAZ,EAqBRxB,EAAMoC,EArBEZ,EAqBW,GAIR,IAAXzB,IAAyB,IAATC,GAAcD,IAAUC,GAAOvB,EAASn9B,SAC1Dm9B,EAASn9B,QAAQ2+B,kBAAkBF,EAAOC,EAAK1f,GAKnD,IAAM+hB,GAAe,IAAXtC,EAAeA,EAAQyB,EAC3Bhf,GAAa,IAATwd,EAAaA,EAAM0B,EACvBY,EAAoB,SAAdhiB,EAAuBA,EAAYshB,EAC/CtD,EAAwB+D,GACxB7D,EAAsBhc,GAEtBuc,EAAiBz9B,QAAQ0gB,KAAO,CAC9BqgB,EACA7f,EACA8f,KA8BH,IAGHhoC,YAAU,SClWiBioC,EAAAA,EDmWZ,wBAEXC,EAAA/D,EAASn9B,UAATkhC,EAAkBC,cAAc,IAAIC,MAAM,UAG1C,IAAML,SAACM,EAAGlE,EAASn9B,gBAATqhC,EAAkBlC,eACtBje,SAACogB,EAAGnE,EAASn9B,gBAATshC,EAAkBlC,aACtB4B,SAAGO,EAAGpE,EAASn9B,gBAATuhC,EAAkBhC,mBACpB,OAANwB,GAAoB,OAAN7f,QAAoB5oB,IAANyoC,QAAyBzoC,IAAN4oB,IACjD8b,EAAwB+D,GACxB7D,EAAsBhc,GACtBuc,EAAiBz9B,QAAQ0gB,KAAO,CAC9BqgB,EACA7f,EACC8f,GAA2C,UChXzCQ,WAAWP,EAAI,GACfO,WAAWP,EAAI,IACfO,WAAWP,EAAI,KDkXvB,CAACpqC,EAAO26B,IAEJ,CACL36B,MAAAA,EACA66B,SAAAA,EACAF,UAAAA,EACAC,aAAAA,EACAtc,UAAAA,EACAE,aAAAA,EACA8nB,SAAAA,EACA19B,aAAAA,EACAs9B,qBAAAA,EACAE,mBAAAA,EACAD,wBAAAA,EACAE,sBAAAA,EACAiB,YAAAA,EACA9E,aAAAA,EACA9D,YAAAA,EACAqJ,WAAAA,EACAlO,cAAAA,EACAmO,eAAAA,EACAC,YAAAA,mkBEhYS2C,GAAkBtrC,gBAS5B,CAAEurC,MAAO,GAAIlQ,WAAW,EAAOmQ,YAAY,IAyB9C,SAASC,GAAeC,EAAsBC,GAC5C,IACED,EAAME,WAAWD,GACjB,MAAAE,GACA/oC,QAAQ+Y,MAAM,uCAAwC8vB,IAI1D,IAAMG,GAiBFtrC,QAAC0E,GACHA,EAAEorB,KACFA,EAAIX,MACJA,EAAKjvB,MACLA,EAAQ,GAAEsC,OACVA,EAAS,EAAC24B,WAIVA,EAAUX,YACVA,EAAc,GAAE35B,MAEhBA,EAAQ,GAAEoK,KACVA,EAAO,KAAItK,MACXA,EAAQ,UAASC,QACjBA,EAAU,UAAS2a,IACnBA,EAAM,EAAC3b,KACPA,EAAO,OAAMyb,MACbA,GAAQ,EAAKwf,UACbA,GAAY,EAAKrc,UACjBA,GAAY,EAAKpb,WACjBA,GAAa,EAAK44B,WAClBA,GAAa,EAAKoE,YAClBA,GAAc,EAAK1hB,aAGnBA,EAAY8nB,SACZA,EAAQ19B,aACRA,EAAYs9B,qBACZA,EAAoBE,mBACpBA,EAAkB6B,YAGlBA,EAAWzF,aACXA,EAAY9D,YACZA,EAAWqJ,WACXA,EAAUlO,cACVA,EAAayN,YAKbA,EAAWhH,OACXA,EAASA,SAAQx7B,QACjBA,EAAUA,SAAQ25B,QAClBA,EAAUA,UAGX3+B,EADIc,EAAKC,EAAAf,EAAAuB,IAERuK,aACA,IAAMiwB,IAAc5M,EAGd9K,EAAelkB,EAAMgC,QAAQ,KAC1B,CACL4oC,MAAOtpC,MAAM8pC,KAAK,CAAE/oC,OAAAA,IAAUuB,IAAI,CAACmoB,EAAGsf,WAC9BplB,EACJyU,GACyB,OAAzBuL,GACuB,OAAvBE,IACEF,IAAyBE,GACzBkF,IAAYpF,GACXoF,GAAWpF,GAAwBoF,EAAUlF,GAE5CmF,OAA0B9pC,IAAnBzB,EAAMsrC,GAAyBtrC,EAAMsrC,GAAW,KAI7D,MAAO,CACLC,KAAAA,EACAC,qBAJa/pC,IAAbzB,EAAM,GAAmB,YAAIyrC,QAAGnR,SAAAA,EAAcgR,IAAQG,EAAI,KAK1DvlB,SAAAA,EACAwlB,aAAcxlB,GAAqB,OAATqlB,KAG9B5Q,UAAAA,EACAmQ,YAAa5nC,GAAcob,IAE5B,CACDqc,EACArc,EACApb,EACAZ,EACA8jC,EACAF,EACA5L,EACAt6B,IA+LF,OA3LAmC,YAAU,KACJ+9B,GAAeoG,EAASn9B,SAC1Bm9B,EAASn9B,QAAQq3B,SAElB,CAACN,EAAaoG,IAGjBnkC,YAAU,KACR,IAAK23B,SAAS6R,eAAe,mBAAoB,CAC/C,IAAMC,EAAU9R,SAAS+R,cAAc,SAIvC,GAHAD,EAAQpnC,GAAK,kBACbs1B,SAASgS,KAAKC,YAAYH,GAEtBA,EAAQZ,MAAO,CACjB,IAAMgB,EACJ,qPAGFjB,GACEa,EAAQZ,2EAIVD,GACEa,EAAQZ,MACR,sGAEFD,GACEa,EAAQZ,qCACuBgB,QAEjCjB,GACEa,EAAQZ,6CAC+BgB,QAGzCjB,GACEa,EAAQZ,4PAIVD,GACEa,EAAQZ,qEAKb,IA6ID/qC,gCACEA,gCACEA,6fAGFA,gBAACm7B,kBACCH,WAAYA,EACZ9f,MAAOA,EACPxa,MAAOA,GACHC,GAEHi7B,GACC57B,gBAACq8B,kBACCkC,QAASh6B,EACT8G,MAAO,gBACP6P,MAAOA,GACHxa,EAAMsuB,OAETA,GAILhvB,gBAACqD,QACCgH,IAAK1B,gCAELR,SAAS,WACTnD,OAAQ/B,EAAa,UAAY,OACjC+oC,WAAW,OACXvoC,cAAc,QAEdzD,gBAAC2qC,GAAgB1qC,UAASF,MAAOmkB,GAtKrClkB,gBAACoF,4BACCgW,IAAKA,EACLra,MAAM,OACNmE,eAAe,SACf2b,UACW,OAAT/V,EACI,OACS,OAATA,EACA,OACS,OAATA,EACA,OACS,OAATA,EACA,OACA,QAEFpK,EAAMM,WAETkjB,EAAa0mB,MAAMhnC,IAAI,CAACqoC,EAAM3iB,IAC7BtpB,gBAAC27B,kBACCjQ,KAAQnnB,GAAMorB,OAAQrG,EACtBxe,KAAMA,EACNoQ,MAAOA,EACP1a,MAAOA,EACPE,MAAOA,EACPD,QAASA,EACTV,MAAOksC,EAAKX,MAAQ,GACpBjgC,MAAO,gBACPgT,UAAWA,EACXpb,WAAYA,EACZ44B,WAAYA,EACZnB,UAAWuR,EAAKhmB,SAChB2V,WAAW,EACXjd,aAAcA,IAAMJ,GAAa,GACjCK,aAAcA,IAAML,GAAa,GACjCrZ,eAAe,SACfD,WAAW,SACXlE,MAAM,OACNoH,SAAS,WACT9C,OACW,OAATyF,EACI,OACS,OAATA,EACA,OACS,OAATA,EACA,OACS,OAATA,EACA,OACA,QAEFpK,EAAMM,WAETirC,EAAKX,KACJtrC,gBAACqD,sBACC0a,UAAU,SACV1X,SACW,OAATyE,EACI,OACS,OAATA,EACA,OACS,OAATA,EACA,OACS,OAATA,EACA,OACA,OAENvE,WAAW,UACP7F,EAAM8H,MAEA,aAAT/I,EAAsB,IAAMwsC,EAAKX,MAElCW,EAAKV,gBACPvrC,gBAACqD,sBACC0a,UAAU,SACV1X,SACW,OAATyE,EACI,OACS,OAATA,EACA,OACS,OAATA,EACA,OACS,OAATA,EACA,OACA,OAENO,MAAM,iBACN7H,QAAS,IACL9C,EAAM8H,MAETyjC,EAAKV,iBAEN,KACHU,EAAKR,cACJzrC,gBAACqD,QACC8E,SAAS,WACTpH,MAAM,MACNsE,OAAO,MACPvG,gBAAgB,gBAChBotC,UAAU,+BACV/iC,MAAO,CACLgjC,cAAe,QACftZ,kBAAmB,KACnBuZ,wBAAyB,WACzBC,wBAAyB,oBAoEjCrsC,gBAACqD,QAAK8E,SAAS,WAAWmkC,MAAO,EAAG7oC,cAAc,QAChDzD,gBAACm/B,uBACC90B,IAAMA,GAAQg9B,EAAYh9B,0DAEyB,IAAjBtK,EAAMsC,aAAgBb,uBACpCykC,uBACAE,EACpB5hC,GAAIA,GAAMorB,EACVA,KAAMA,EACNlwB,KAAe,aAATA,EAAsB,WAAa,OACzC8sC,UAAoB,aAAT9sC,EAAsB,eAAY+B,EAC7CskC,QAAQ,SACR8D,UAAWvnC,EACXi7B,SAAUzB,EACVvZ,SAAUrf,EACVo3B,YAAaA,EACbt6B,MAAOA,EACPynB,SAAU+a,EACVqD,UAAWhM,EACX4S,QAASxE,EACTxJ,QAASC,EACT4B,OAAQyH,EACRjjC,QAASA,EACT4nC,YAAaA,IAAMluB,GAAa,GAChCK,aAAcA,IAAML,GAAa,GACjC8iB,aAAa,+CACiBh/B,YAC9B8G,MApF4B,CACtChB,SAAU,WACVmkC,MAAO,EACPvrC,MAAO,OACPsE,OAAQ,OACRC,QAAS,OACTyY,UAAW,SACXva,QAAS,IACT6H,MAAO,cACP5H,cAAe,MACfw6B,WAAY,cACZyO,WAAY,cACZnoB,OAAQ,sBACRvlB,QAAS,sBACT8b,UAAW,OACXxU,WAAY,IACZE,cAAe,QACfH,SAAU,qBACVsmC,WAAY,YACZC,mBAAoB,iBAkENlsC,EAAMunC,gEChXlB4E,GAAextC,gBAAgC,CACnDy2B,QAAQ,EACRgX,eAAgBA,OAChBzF,YAAaA,OACb0F,oBAAqBA,OACrBC,iBAAkBA,IAAM,4BCRbC,GAAiBptC,QAAC8vB,KAAEA,EAAIlwB,KAAEA,GAAqBI,EAAZc,EAAKC,EAAAf,EAAAuB,IAC7Cm/B,EDU0BngC,aAAWysC,KCTrCK,QACJA,EAAOC,OACPA,EAAMC,YACNA,EAAWC,OACXA,EAAMC,gBACNA,EAAeC,cACfA,GACEC,qBAgBEzF,EAAkB3d,IACR,UAAVA,EAAEsB,MACJtB,EAAE0M,iBACFyJ,EAAMuM,eAAend,KAInB8d,EAAS,CAAC,OAAQ,WAAY,QAAS,UAAU9qC,SAASlD,GAC1Dyb,EACJwyB,QAAMR,EAASvd,IAASyd,EAAc,EAAIM,QAAMP,EAAQxd,QAAQnuB,EAC5DzB,EAAQ2tC,QAAML,EAAQ1d,GAE5B,OAAA3rB,OAAAC,UAtEyBxE,CAAAA,IACzB,OAAQA,GACN,IAAK,QACH,MAAO,CACLkuC,YAAa,MAEbpB,UAAW,QACXqB,eAAgB,QAEpB,IAAK,WACH,MAAO,CACLD,YAAa,MACbE,iBAAiB,EACjBD,eAAgB,QAEpB,IAAK,SACH,MAAO,CAELrB,UAAW,OAEf,IAAK,UACH,MAAO,CAELA,UAAW,WAEf,IAAK,OACH,MAAO,CACLoB,YAAa,OAEjB,QACE,MAAO,KAyCNG,CAAkBruC,GAClBkB,GACHZ,MAAAA,EACAmb,MAAAA,EACAmlB,OArBiByH,KACjBwF,EAAgB3d,GAAM,IAqBtBkW,WAAYkC,GACR0F,EAAS,CAAEvM,aAjCK14B,IACpB+kC,EAAc5d,EAAMnnB,SACpB7H,EAAMugC,cAANvgC,EAAMugC,aAAe14B,KA+BW,CAAEgf,SA5BlBznB,IAChBwtC,EAAc5d,EAAM5vB,SACpBY,EAAM6mB,UAAN7mB,EAAM6mB,SAAWznB,KA2BbwgC,EAAMzK,OAAS,CAAEiS,eAAAA,GAAmB,8IC/EtCgG,GAAQA,CAAChuC,EAAe0pB,EAAaD,IACzCprB,KAAKqrB,IAAIrrB,KAAKorB,IAAIzpB,EAAO0pB,GAAMD,GAoDpBwkB,GAAiBnuC,WAAC4pB,IAC7BA,EAAM,EAACD,IACPA,EAAM,IAAGykB,KACTA,EAAO,EACPluC,MAAO2B,EAAkB,EAACR,aAC1BA,EAAYsmB,SACZA,EAAQ0mB,OACRA,EAAM5iC,YACNA,EAAc,aAAYrI,WAC1BA,GAAa,EAAK8iC,WAClBA,GACYlmC,EACN+B,EAAemsC,UAAK/qC,QAACtB,EAAAA,EAAmBR,GAAY8B,EAAIymB,EAAKA,EAAKD,IACjE3nB,EAAeC,GAAoBC,WAASH,IAC5CknB,EAAYC,GAAiBhnB,YAAS,IACtCsc,EAAWE,GAAgBxc,YAAS,GAErCosC,EAAWvlC,SAAuB,MAClCwlC,EAAWxlC,SAAuB,MAClCjH,OAAmCH,IAApBE,EACf2sC,EAAe1sC,EAAeD,EAAkBG,EAGtDK,YAAU,KACJP,GACFG,EAAiBisC,GAAMrsC,EAAiB+nB,EAAKD,KAE9C,CAAC9nB,EAAiBC,EAAc8nB,EAAKD,IAExC,IAAM8kB,EAAc/rC,cACjBE,IACC,IAAM8rC,EAAeR,GAAMtrC,EAAUgnB,EAAKD,GACrC7nB,GACHG,EAAiBysC,GAEf/mB,GAAY+mB,IAAiBF,GAC/B7mB,EAAS+mB,GAEPzlB,GAAcolB,GAChBA,EAAOK,IAGX,CAAC5sC,EAAc8nB,EAAKD,EAAKhC,EAAU6mB,EAAcvlB,EAAYolB,IAGzDM,EAAoBjsC,cACvB62B,IACC,IAAIn2B,GAAekrC,EAASjlC,QAA5B,CAEA,IAAMulC,EAAYN,EAASjlC,QAAQyrB,wBAY7BlyB,EA9GWisC,EACrBvmC,EACAsmC,EACAhlB,EACAD,EACAykB,EACA3iC,EACAy6B,KAEA,IACI1U,EADEsd,EAAQnlB,EAAMC,EAepB,GATE4H,EAAa0c,GAHK,eAAhBziC,GAEuBnD,EAAWsmC,EAAUxyB,MAD1BwyB,EAAU1tC,OAML0tC,EAAUrmC,OAASD,GADxBsmC,EAAUppC,OAHqB,EAAG,GASpD0gC,GAAcA,EAAW1jC,OAAS,EAAG,CAOvC,IANA,IAAMusC,EAAWnlB,EAAM4H,EAAasd,EAGhCE,EAAe9I,EAAW,GAC1B+I,EAAc1wC,KAAK0rB,IAAI8kB,EAAWC,GAE7BhgB,EAAI,EAAGA,EAAIkX,EAAW1jC,OAAQwsB,IAAK,CAC1C,IAAMkgB,EAAW3wC,KAAK0rB,IAAI8kB,EAAW7I,EAAWlX,IAC5CkgB,EAAWD,IACbA,EAAcC,EACdF,EAAe9I,EAAWlX,IAI9B,OAAOggB,EAGP,IACMG,EAAe5wC,KAAK6wC,OADTxlB,EAAM4H,EAAasd,GACOV,GAAQA,EAEnD,OAAOF,GAAMiB,EAAcvlB,EAAKD,IAiEbklB,CATb,YAAatV,EAEG,eAAhB9tB,EACI8tB,EAAM/O,QAAQ,GAAGC,QACjB8O,EAAM/O,QAAQ,GAAGE,QAEI,eAAhBjf,EAA+B8tB,EAAM9O,QAAU8O,EAAM7O,QAKhEkkB,EACAhlB,EACAD,EACAykB,EACA3iC,EACAy6B,GAEFuI,EAAY7rC,KAEd,CAACgnB,EAAKD,EAAKykB,EAAM3iC,EAAagjC,EAAarrC,EAAY8iC,IAGnDmJ,EAAkB3sC,cACrB62B,IACC,IAAIn2B,EAAJ,CACAm2B,EAAMtC,iBACN/N,GAAc,GACdylB,EAAkBpV,GAElB,IAAM+V,EAAmBC,IACvBZ,EAAkBY,IAGdC,EAAgBA,KACpBtmB,GAAc,GACd8Q,SAASE,oBAAoB,YAAaoV,GAC1CtV,SAASE,oBAAoB,UAAWsV,GACxCxV,SAASE,oBAAoB,YAAaoV,GAC1CtV,SAASE,oBAAoB,WAAYsV,IAG3CxV,SAASC,iBAAiB,YAAaqV,GACvCtV,SAASC,iBAAiB,UAAWuV,GACrCxV,SAASC,iBAAiB,YAAaqV,GACvCtV,SAASC,iBAAiB,WAAYuV,KAExC,CAACb,EAAmBvrC,IAIhBqsC,EAAuB/sC,cAC1B62B,IAEKgV,EAASllC,SAAWklC,EAASllC,QAAQwwB,SAASN,EAAM1a,SAGxDwwB,EAAgB9V,IAElB,CAAC8V,IAGGtV,EAAgBr3B,cACnB62B,IACC,IAAIn2B,EAAJ,CACA,IAAIR,EAAW4rC,EACf,OAAQjV,EAAM1N,KACZ,IAAK,YACL,IAAK,YACHjpB,EAAW4rC,EAAeJ,EAC1B,MACF,IAAK,aACL,IAAK,UACHxrC,EAAW4rC,EAAeJ,EAC1B,MACF,IAAK,OACHxrC,EAAWgnB,EACX,MACF,IAAK,MACHhnB,EAAW+mB,EACX,MACF,QACE,OAEJ4P,EAAMtC,iBACNwX,EAAY7rC,KAEd,CAAC4rC,EAAc5kB,EAAKD,EAAKykB,EAAMK,EAAarrC,IAGxC0rC,EAAQnlB,EAAMC,EAIpB,MAAO,CACL4kB,aAAAA,EACAvlB,WAAAA,EACAzK,UAAAA,EACAE,aAAAA,EACA4vB,SAAAA,EACAC,SAAAA,EACAmB,qBAAsBL,EACtBI,qBAAAA,EACA1V,cAAAA,EACA4V,qBAZU,IAAVb,EAAc,GAAMN,EAAe5kB,GAAOklB,EAAS,MCtM1C3P,GAAuC,CAClDj4B,GAAI,CACF1B,OAAQ,EACRtE,MAAO,QAETiG,GAAI,CACF3B,OAAQ,EACRtE,MAAO,QAETkG,GAAI,CACF5B,OAAQ,EACRtE,MAAO,QAETmG,GAAI,CACF7B,OAAQ,GACRtE,MAAO,QAEToG,GAAI,CACF9B,OAAQ,GACRtE,MAAO,SAIE0uC,GAAsC,CACjD1oC,GAAI,CACFhG,MAAO,GACPsE,OAAQ,IAEV2B,GAAI,CACFjG,MAAO,GACPsE,OAAQ,IAEV4B,GAAI,CACFlG,MAAO,GACPsE,OAAQ,IAEV6B,GAAI,CACFnG,MAAO,GACPsE,OAAQ,IAEV8B,GAAI,CACFpG,MAAO,GACPsE,OAAQ,KAICqqC,GAA+C,CAC1DjxC,MAAO,EACPE,QAAS,EACTye,WAAY,IAmBDuyB,GAhBarwB,CAAAA,IACjB,CACLzgB,QAAS,CACPC,gBAAiB,sBAEnBE,QAAS,CACPF,gBAAiB,cACjBC,YAAa,EACbE,YAAa,QACbC,YAAa,wBAOW0wC,GAGjBC,GAGT,CACF9oC,GAAI,CAAE+oC,mBAAoB,EAAGC,UAAW,IACxC/oC,GAAI,CAAE8oC,mBAAoB,EAAGC,UAAW,IACxC9oC,GAAI,CAAE6oC,mBAAoB,EAAGC,UAAW,IACxC7oC,GAAI,CAAE4oC,mBAAoB,GAAIC,UAAW,IACzC5oC,GAAI,CAAE2oC,mBAAoB,GAAIC,UAAW,KAI9BC,GAAoD,CAC/DC,WAAY,CACVlvC,MAAO,OACPmc,SAAU,QACV7X,OAAQ,OACRqb,cAAe,MACfic,gBAAiB,GAEnBuT,SAAU,CACR7qC,OAAQ,OACRwb,UAAW,QACX9f,MAAO,OACP2f,cAAe,iBACfkc,kBAAmB,yWCtFVuT,GAAwCtwC,aAAC4pB,IACpDA,EAAM,EAACD,IACPA,EAAM,IAAGykB,KACTA,EAAO,EAACI,aACRA,EAAYtI,WACZA,EAAUvlC,MACVA,EAAQ,UAASsK,KACjBA,EAAO,KAAIrK,QACXA,EAAU,UAAS6K,YACnBA,EAAc,aAAYrI,WAC1BA,GAAa,EAAKmtC,UAClBA,GAAY,EAAKriB,YACjBA,GAAc,EAAKjvB,gBACnBA,EAAkB,gBAAekwB,MACjCA,EAAKgM,WACLA,EACA1b,UAAWC,EAAWgC,OACtBA,EAAS,GAAEuH,WACXA,EAAUzK,UACVA,EAASE,aACTA,EAAY4vB,SACZA,EAAQC,SACRA,EAAQmB,qBACRA,EAAoBD,qBACpBA,EAAoB1V,cACpBA,EAAa4V,qBACbA,EAAoB/b,UACpBA,EAAY,SAAQ/yB,MACpBA,EAAQ,CACNM,UAAW,GACXqvC,MAAO,GACP7b,SAAU,GACV8b,YAAa,GACbC,MAAO,GACPvhB,MAAO,GACPwhB,WAAY,GACZC,UAAW,GACX/c,QAAS,KAGZ7zB,EADIc,EAAKC,EAAAf,EAAAuB,KAEFsK,SAAEA,EAAQ4T,UAAEA,GAAc3T,aAC1B+kC,EAAahlC,EAAS5M,EAAiB,CAC3CwgB,UAAWC,GAAeD,IAEtBqxB,EAAgBjlC,EAAS,iBAAkB,CAC/C4T,UAAWC,GAAeD,IAEtBsxB,EAAallC,EACjBikC,GAAelvC,GAAS3B,gBACxB,CAAEwgB,UAAWC,GAAeD,IAGxBuxB,EAA6B,aAAhBvlC,GACbwkC,mBAAEA,EAAkBC,UAAEA,GAAcF,GAAoB/kC,IAAS,CACrEglC,mBAAoB9Q,GAAYl0B,GAAMzF,OACtC0qC,UAAYN,GAAW3kC,GAAM/J,OAAoB,IAI7C+vC,EACJ9wC,gBAACc,0BAASC,MAAM,OAAOqa,IAAK,GAAO1a,EAAMM,UAAeL,GACrDquB,GACChvB,gBAACoF,cAAWF,eAAe,gBAAgBD,WAAW,UACpDjF,gBAACkL,sBAAK7E,SAAU,GAAIE,WAAY,KAAS7F,EAAMsuB,OAC5CA,GAEFohB,GACCpwC,gBAACkL,sBACC7E,SAAU,GACVgF,MAAM,sBACF3K,EAAM8vC,YAETnC,IAMTruC,gBAACqD,sBACCgH,IAAK8jC,EACLhmC,SAAS,WACTnD,OAAQ/B,EAAa,cAAgB,UACrCO,QAASP,EAAa,GAAM,EAC5BooB,YAAaikB,EACb3wB,aAAcA,IAAMJ,GAAa,GACjCK,aAAcA,IAAML,GAAa,IAC7BygB,GAAYl0B,IAChBpM,aAAcgxC,GAAalvC,GAC3B1B,gBAAiB8xC,GACbjB,GAAelvC,GACf8gB,EACA7gB,EAAM2vC,OAGTtK,GAAcA,EAAW1jC,OAAS,GACjCrC,gCACG+lC,EAAWniC,IAAKmtC,GAGb/wC,gBAACqD,sBACCqoB,IAAKqlB,EACL5oC,SAAS,WACTG,IAAI,MACJ2T,MANqB80B,EAAYtnB,IAAQD,EAAMC,GAAQ,QAOvDjkB,UAAU,wBACVzE,MAAO,EACPsE,OAAQ,EACR3G,aAAa,MACbI,gBAAiBmE,EAAa0tC,EAAgBD,EAC9CrrB,OAAQ,GACJ3kB,EAAM+vC,cAQpBzwC,gBAACqD,sBACC8E,SAAS,WACTG,IAAK,EACL2T,KAAM,EACN5W,OAAO,OACPtE,MAAUyuC,MACV1wC,gBAAiBmE,EAAa0tC,EAAgBD,EAC9ChyC,aAAcgxC,GAAalvC,GAC3B+E,WAAW,0BACP7E,EAAM8zB,SACN9zB,EAAM4vC,cAIZtwC,gBAACqD,sBACCgH,IAAK+jC,EACLnoC,KAAK,SACLmyB,SAAUn1B,GAAc,EAAI,kBACbwmB,kBACAD,kBACA6kB,qBACG/iC,kBACHrI,eACHwwB,EACZtrB,SAAS,WACTG,IAAI,MACJ2T,KAASuzB,MACT9wC,aAAa,MACbI,gBAAgB,cAChBgc,UAAU,+BACVyJ,qBAAqBthB,EAAa0tC,EAAgBD,GAClDnrC,WAAYujB,EAAa,OAAS,6BAClCtjB,UACE6Y,EACI,mCACA,wBAENgH,OAAQ,EACRgG,YAAakkB,EACbrkB,aAAcqkB,EACd3J,UAAWhM,GACP6V,GAAW3kC,GACXpK,EAAM6vC,OAGTxiB,IAAgB1P,GAAayK,IAC5B9oB,gBAACqD,sBACC8E,SAAS,WACTC,OAAO,OACP6T,KAAK,MACLzW,UAAU,mBACVlC,aAAc,EACdyB,QAAQ,UACRjG,gBAAgB,cAChBuM,MAAM,cACN3M,aAAc,EACd2H,SAAU,GACVi2B,WAAW,SACXjX,OAAQ,GACJ3kB,EAAMgzB,SAEV1zB,gBAACkL,iCAASxK,EAAMgzB,gBAANsd,EAAexoC,YACtB6lC,SAAAA,EAAc/e,QAAQ2e,EAAO,EAAI,EAAI,OAO/CjT,GAAch7B,gBAAC+6B,QAAYC,IAK1BiW,EACJjxC,gBAACuL,0BAEKykC,GAAkB1kC,IACtBnD,SAAS,WACTwW,aAAcA,KAAO1b,GAAcsb,GAAa,GAChDK,aAAcA,KAAO3b,GAAcsb,GAAa,IAC5C5d,QACAD,SAAAA,EAAOM,WAEVguB,GACChvB,gBAACoF,cACCF,eAAe,gBACfD,WAAW,SACX3B,aAAc,EACdvC,MAAM,QAENf,gBAACkL,sBAAK7E,SAAU,GAAIE,WAAY,KAAS7F,EAAMsuB,OAC5CA,GAEFohB,GACCpwC,gBAACkL,sBACC7E,SAAU,GACVgF,MAAM,sBACF3K,EAAM8vC,YAETnC,IAMTruC,gBAACqD,sBACCgH,IAAK8jC,EACLhmC,SAAS,WACTzJ,aAAcoxC,EAAqB,EACnChxC,gBAAiBmE,EAAa0tC,EAAgBC,EAC9C5rC,OAAQ/B,EAAa,cAAgB,UACrClC,MAAO8vC,EAAgBf,OAAyB,OAChDzqC,OAAQwrC,EAAa,OAAYf,OACjCzkB,YAAaikB,EACbpkB,aAAcokB,SACV5uC,SAAAA,EAAO2vC,OAGVtK,GAAcA,EAAW1jC,OAAS,GACjCrC,gCACG+lC,EAAWniC,IAAKmtC,IACf,IAAMG,GAAmBH,EAAYtnB,IAAQD,EAAMC,GAAQ,IAC3D,OACEzpB,gBAACqD,sBACCqoB,IAAKqlB,EACL5oC,SAAS,WACTpH,MAAO,EACPsE,OAAQ,EACR3G,aAAa,MACbI,gBAAiBmE,EAAa0tC,EAAgBD,EAC9CrrB,OAAQ,GACHwrB,EACD,CACEzoC,OAAW8oC,MACXj1B,KAAM,MACNzW,UAAW,wBAEb,CACEyW,KAASi1B,MACT5oC,IAAK,MACL9C,UAAW,yBAEb9E,EAAM+vC,eAOpBzwC,gBAACqD,sBACC8E,SAAS,WACTzJ,aAAcoxC,EAAqB,EACnChxC,gBAAiBmE,EAAa0tC,EAAgBD,GACzCG,EACD,CACEzoC,OAAQ,EACR6T,KAAM,EACNlb,MAAO,OACPsE,OAAWmqC,OAEb,CACElnC,IAAK,EACL2T,KAAM,EACN5W,OAAQ,OACRtE,MAAUyuC,aAEZ9uC,SAAAA,EAAO4vC,kBACP5vC,SAAAA,EAAO8zB,WAGbx0B,gBAACqD,sBACCgH,IAAK+jC,EACLnoC,KAAK,SACLmyB,SAAUn1B,GAAc,EAAI,kBACbwmB,kBACAD,kBACA6kB,qBACG/iC,kBACHrI,eACHwwB,EACZtrB,SAAS,WACTpH,MAAUgvC,OACV1qC,OAAW0qC,OACXrxC,aAAa,MACbI,gBAAiBmE,EAAa0tC,EAAgBD,EAC9CnsB,oBAAqB7Y,EAAS,eAC9BoP,UAAU,+BACV9V,OAAQ/B,EAAa,cAAgB,OACrCuC,UAAWqrC,EAAa,mBAAqB,mBAC7CxrB,OAAQ,EACR9f,WAAYujB,EAAa,OAAS,0BAC7B+nB,EACD,CACE50B,KAAM,MACN7T,OAAWonC,OAEb,CACElnC,IAAK,MACL2T,KAASuzB,QAEfnkB,YAAakkB,EACbrkB,aAAcqkB,EACd3J,UAAWhM,SACPl5B,SAAAA,EAAO6vC,OAEVxiB,IAAgB1P,GAAayK,IAC5B9oB,gBAACqD,sBACC8E,SAAS,WACTpD,QAAQ,UACRjG,gBAAiB4M,EAAS,eAC1BL,MAAOK,EAAS,eAChBhN,aAAa,MACb2H,SAAS,OACTi2B,WAAW,SACXjX,OAAQ,GACHwrB,EACD,CACE50B,KAAM,OACNid,WAAY,MACZ9wB,OAAQ,IACR5C,UAAW,mBAEb,CACE4C,OAAQ,OACR6T,KAAM,MACN3Y,aAAc,MACdkC,UAAW,0BAEb9E,SAAAA,EAAOgzB,SAEX1zB,gBAACkL,8BAASxK,UAAKywC,EAALzwC,EAAOgzB,gBAAPyd,EAAgB3oC,YACvB6lC,SAAAA,EAAc/e,QAAQ2e,EAAO,EAAI,EAAI,OAO/CjT,GAAch7B,gBAAC+6B,IAAWxf,UAAW,GAAIyf,IAM9C,OAAO6V,GAAc9iB,EAAckjB,EAAeH,GCpXvCM,GAAkBC,SAAsBC,KAEnDrd,SAAS,EACT1pB,MAAO,GACPgnC,SAAU,GACV9wC,QAAS,OACT+wC,YAAY,EACZ9wC,MAAO,GACP+wC,OAAQA,OACRC,WAAY,GACZC,UAAU,EACVC,QAAS,IACTC,KAAM,SACJpxC,EACA8J,EACAgnC,EACAC,EACA9wC,EACA+wC,EACAC,EACAC,EACAC,GANa,gBADbrnC,IAAAA,EAAQ,aACRgnC,IAAAA,EAAW,IAQXD,EAAI,CACFrd,SAAS,EACTxzB,QAAAA,EACA8J,MAAAA,EACAgnC,SAAAA,EACAC,WAAAA,EACA9wC,MAAAA,EACA+wC,OAAAA,EACAC,WAAAA,EACAC,SAAAA,EACAC,QAAAA,KAGJpX,KAAMA,IAAM8W,EAAI,CAAErd,SAAS,OAGhB6d,GAAcA,CACzBrxC,EACA8J,EACAgnC,EACA5wC,KAEAywC,GACGW,WACAF,KACCpxC,EACA8J,EACAgnC,QACA5wC,SAAAA,EAAO6wC,iBACP7wC,SAAAA,EAAOD,YACPC,SAAAA,EAAO8wC,aACP9wC,SAAAA,EAAO+wC,iBACP/wC,SAAAA,EAAOgxC,eACPhxC,SAAAA,EAAOixC,UAIAI,GAAcA,KACzBZ,GAAgBW,WAAWvX,QClDhByX,GAAmC,CAC9Cj3B,KAAM,CACJha,UAAW,CACTlC,gBAAiB,iBACjBylB,OAAQ,kBAEV9e,KAAM,CACJ4F,MAAO,iBACPskB,KAAM,mBAER5U,QAAS,CACP1P,MAAO,kBAET6mC,MAAO,CACL7mC,MAAO,iBACPskB,KAAM,cAGV1U,QAAS,CACPja,UAAW,CACTlC,gBAAiB,kBACjBylB,OAAQ,mBAEV9e,KAAM,CACJ4F,MAAO,kBACPskB,KAAM,eAER5U,QAAS,CACP1P,MAAO,mBAET6mC,MAAO,CACL7mC,MAAO,kBACPskB,KAAM,cAGVzU,MAAO,CACLla,UAAW,CACTlC,gBAAiB,gBACjBylB,OAAQ,iBAEV9e,KAAM,CACJ4F,MAAO,gBACPskB,KAAM,cAER5U,QAAS,CACP1P,MAAO,iBAET6mC,MAAO,CACL7mC,MAAO,gBACPskB,KAAM,cAGVxU,QAAS,CACPna,UAAW,CACTlC,gBAAiB,mBACjBylB,OAAQ,oBAEV9e,KAAM,CACJ4F,MAAO,mBACPskB,KAAM,cAER5U,QAAS,CACP1P,MAAO,oBAET6mC,MAAO,CACL7mC,MAAO,mBACPskB,KAAM,eCnECwiB,GAActyC,aAACY,QAC1BA,EAAO+5B,KACPA,EAAIjwB,MACJA,EAAKgnC,SACLA,EAAQa,MACRA,EAAKX,OACLA,EAAMC,WACNA,EAAUC,SACVA,GAAW,EAAKH,WAChBA,GAAa,EAAKI,QAClBA,EAAU,IAAIlxC,MACdA,GACab,EACbqC,YAAU,KACR,GAAI0vC,IAAYJ,EAAY,CAC1B,IAAMa,EAAS3H,WAAW,KAExBlQ,KACCoX,GAEH,MAAO,KACLU,aAAaD,MAKhB,IAEH,IAAME,QAAQH,EAAAA,EAASH,GACjBO,KAAgBf,IAAUC,GAE1Be,EAAiB,CACrB1zC,YAAa,EACbE,YAAa,QACbP,aAAc,EACdQ,eAAgBqzC,EAAM9xC,GAASO,UAAUujB,QAGrCmuB,EAAY,CAChB13B,KAAM,UACNC,QAAS,UACTE,QAAS,UACTD,MAAO,WACPza,GAEIkyC,EAAgB,CACpB33B,KAAMhb,gBAACwP,kBAASpE,YAAa,GAAIC,MAAOqnC,SAAehyC,SAAAA,EAAO+E,OAC9DwV,QACEjb,gBAACyV,kBAAYrK,YAAa,GAAIC,MAAOqnC,SAAehyC,SAAAA,EAAO+E,OAE7D0V,QACEnb,gBAAC0Q,kBAAYtF,YAAa,GAAIC,MAAOqnC,SAAehyC,SAAAA,EAAO+E,OAE7DyV,MAAOlb,gBAACgS,kBAAU5G,YAAa,GAAIC,MAAOqnC,SAAehyC,SAAAA,EAAO+E,QAChEhF,GAEImyC,EAAajB,GAAYgB,EAE/B,OACE3yC,gBAACoF,4BACCa,KAAK,iBACLmV,IAAK,GACLra,MAAO,IAEPsa,SAAS,SACTlT,SAAU,WACVlD,WAAW,SACXF,QAAQ,sBACRsG,SAAUknC,EAAM9xC,GAASsa,QAAQ1P,MACjCvM,mBAAoByzC,EAAM9xC,GAASO,UAAUlC,gBAC7C+F,QACE2sC,EACI,OACA,KACEhX,MAGJiY,QACA/xC,SAAAA,EAAOM,WAEV4xC,GAAcD,EACf3yC,gBAACc,YAASsa,IAAK,EAAGra,MAAM,QACtBf,gBAACkL,iBAAKJ,KAAK,KAAKD,OAAO,kBAAenK,SAAAA,EAAO6J,OAC1CA,GAEFgnC,GACCvxC,gBAACkL,iBAAKJ,KAAK,YAASpK,SAAAA,EAAO6wC,UACxBA,IAINiB,GACCxyC,gBAACkL,iBACCyhB,YAAa,GACb9nB,QAAS4sC,EACT1sC,QAAQ,WACRu3B,WAAW,UACPmW,QACA/xC,SAAAA,EAAOgxC,YAEVA,GAGJF,GACCxxC,gBAACqD,sBACC8E,SAAS,WACTkd,OAAQ,IACRrJ,MAAO,EACP1T,IAAK,EACLzD,QAASA,KACP21B,YAEE95B,UAAKmyC,EAALnyC,EAAOoyC,oBAAPD,EAAoB7xC,WAExBhB,gBAAC+N,kBACC3C,YAAa,GACbC,MAAOqnC,SACHhyC,UAAKqyC,EAALryC,EAAOoyC,oBAAPC,EAAoBttC,UC/HvButC,GAA2DnzC,QAACozC,OACvEA,EAAM5xB,UACNA,GAAY,EAAKmT,SACjBA,EAAW,EAAC/uB,KACZA,EAAI+C,KACJA,EAAI0qC,WACJA,EAAUC,aACVA,EAAYC,aACZA,EAAYC,aACZA,EAAYC,SACZA,EAAQC,aACRA,EAAYC,iBACZA,EAAgB1uC,YAChBA,EAAW2uC,eACXA,EAAcC,kBACdA,EAAiBC,cACjBA,EAAaC,WACbA,EAAUC,WACVA,EAAUp4B,UACVA,EAASq4B,UACTA,EAASC,SACTA,EACAb,WAAYc,EAAkBC,YAC9BA,EAAcjxC,CAAAA,IAAA,IAACowC,aACbA,EAAYM,kBACZA,GAED1wC,EAAA,OACChD,gBAACkL,sBACCG,MAAM,MACNhF,SAAU,GACVkV,UAAW,GACPm4B,QACAhzC,SAAAA,EAAO8H,MAEV4qC,KAEJc,WACDA,EAAa/vC,CAAAA,IAAA,IAACqE,KAAEA,EAAIsrC,UAAEA,GAAW3vC,EAAA,OAC/BnE,gBAACkL,sBAAKqQ,UAAW,GAAOu4B,QAAepzC,SAAAA,EAAO8H,MAC3CA,KAEJ2rC,WACDA,EAAapuC,CAAAA,QAACwtC,aAAEA,EAAYO,UAAEA,GAAW/tC,EACvC,OAAOwtC,EACLvzC,gBAACuL,wBACCgQ,UAAW,EACXH,IAAK,GACLsF,cAAc,gBACVhgB,SAAAA,EAAOM,WAEXhB,gBAACkL,sBAAKzC,SAAU,GAAOqrC,QAAepzC,SAAAA,EAAO8H,MAC1C+qC,EAAa5jB,MAEhB3vB,gBAACkL,wBAAS4oC,QAAepzC,SAAAA,EAAO8H,UAC5BpK,KAAK6wC,MAAMsE,EAAazoC,KAAO,eAGnC,OACLspC,YACDA,EAAc7zC,CAAAA,QAACgzC,aACbA,EAAYD,SAEZA,EAAQM,WACRA,GAEDrzC,EACC,OACEP,gBAACqD,sBAAKtC,MAAM,OAAOsE,OAAO,OAAO8C,SAAS,kBAAezH,SAAAA,EAAOwb,MAC9Dlc,gBAACqD,sBACC6E,GAAG,QACHnH,MAAM,OACNsE,OAAO,OACPkX,IAAKg3B,EAAec,IAAIC,gBAAgBf,QAAgB/xC,EACxD2H,MAAO,CAAEkT,UAAW,SACpBhS,IAAKipC,GACDM,QACAlzC,SAAAA,EAAOwb,UAIlBq4B,YACDA,EAAc9nC,CAAAA,QAACymC,WAAEA,EAAUW,WAAEA,GAAYpnC,EAEvC,OADAtK,QAAQqyC,IAAI,4BAA6BtB,GAEvClzC,gBAACqD,sBAAKtC,MAAM,OAAOsE,OAAO,OAAO8C,SAAS,kBAAezH,SAAAA,EAAOwb,MAC9Dlc,gBAAC8c,uBACCP,IAAK22B,EACLn2B,IAAI,UACJhc,MAAM,OACNsE,OAAO,OACPgX,UAAU,QACVlT,MAAO,CAAEjD,UAAW,OAAQs2B,SAAU,SAClCqX,QACAnzC,SAAAA,EAAOmc,WAIlB43B,eACDA,EAAiB5nC,CAAAA,QAAC2nB,SAAEA,EAAQmf,cAAEA,GAAe9mC,EAC3C,OACE7M,gBAACoF,4BACCgW,IAAK,EACLnW,WAAW,UACP0uC,QACAjzC,SAAAA,EAAOuvC,YAEXjwC,gBAACqD,sBACCgC,OAAQ,EACRvG,gBAAgB,kBAChBiC,MAAM,OACNrC,aAAc,SACVgC,SAAAA,EAAOwb,MAEXlc,gBAACqD,sBACCgC,OAAQ,EACRtE,MAAUyzB,MACV91B,aAAc,EACdI,gBAAgB,cACZ4B,SAAAA,EAAOwb,QAGflc,gBAACkL,sBAAK7E,SAAU,UAAQ3F,SAAAA,EAAO8H,MAC5BgsB,UAIR9zB,MACDA,EAAQ,IACTb,EACO60C,EAAkBV,GAAsBd,EAU9C,OACElzC,gBAACuL,wBACC1G,QAASC,EACTE,OAAO,UACPuf,OAAO,4BACP7lB,aAAc,EACdqG,QAAS,GACT2b,cAAc,SACdnd,SAAS,SACT4E,SAAS,WACT9C,OAAQkuC,GAA6B,MAAb/e,EAAmB,QAAU,QACjDif,QACA/yC,SAAAA,EAAOM,WAGG,MAAbwzB,GACc,UAAbuf,GACAW,GACAH,EAAY,CAAErB,WAAYwB,EAAiBb,WAAAA,IAG/B,MAAbrf,GACc,UAAbuf,GACAZ,GACAiB,EAAY,CACVb,aAAAA,EACAJ,aAAAA,EACAG,SAAAA,EACAM,WAAAA,EACAC,WAAAA,IAIU,MAAbrf,GACc,SAAbuf,GACAR,GACAY,EAAW,CAAEZ,aAAAA,EAAcO,UAAAA,IAC5Btf,EAAW,MACT/uB,GAAQzF,gBAACiX,kBAAW7L,YAAa,IAAQqQ,MAC1C83B,GAAgB/qC,GAAQ0rC,EAAW,CAAE1rC,KAAAA,EAAMsrC,UAAAA,IAC5CzyB,GAAaozB,EAAe,CAAEjgB,SAAAA,EAAUmf,cAAAA,IACxCP,GAAgBa,EAAY,CAAEb,aAAAA,EAAcM,kBAAAA,IAC7C1zC,gBAACqD,sBACC6E,GAAG,QACHzI,KAAK,OACL4K,IAAKgpC,EACL7rB,SAAUgsB,EACVP,OAAQA,EACR9pC,MAAO,CAAE7D,QAAS,eACd5E,SAAAA,EAAOwb,+GChLNy4B,GAAgBtD,SAAoBC,KAC/CsD,OAAQ,GACRC,OAASllB,GAAkBA,EAC3BmlB,OAAQA,CAACnlB,EAAchvB,MAAmBgvB,KAAAA,EAAMhvB,MAAAA,IAChDkxC,KAAM,SAACliB,EAAMolB,EAAiBC,YAAjBD,IAAAA,EAAa,aAAIC,IAAAA,EAAe,IAC3C1D,EAAK9X,GAAiBx1B,OAAAC,UACjBu1B,GACHob,OAAQ,IACHpb,EAAMob,OACT,CACEjlB,KAAAA,EACAhvB,MAAKqD,OAAAC,UAAO8wC,GAAY9Q,WAAW,IACnC+Q,aAAAA,QAKRxa,KAAO7K,IACL2hB,EAAK9X,GACE7J,EAKL3rB,OAAAC,UACKu1B,GACHob,OAAQpb,EAAMob,OAAOhyC,OAAQqyC,GAAUA,EAAMtlB,OAASA,KAL/C,CAAEilB,OAAQ,MASvBM,UAAYL,IACVvD,EAAK9X,GAAiBx1B,OAAAC,UAAWu1B,GAAOqb,OAAAA,MAE1CM,UAAYL,IACVxD,EAAK9X,GAAiBx1B,OAAAC,UAAWu1B,GAAOsb,OAAAA,SAa/BM,GAAazlB,IACxBxtB,QAAQqyC,IAAI,YAAa7kB,GACzBglB,GAAc5C,WAAW8C,OAAOllB,GAEhCglB,GAAc5C,WAAWvX,KAAqB,iBAAT7K,EAAoBA,OAAOnuB,ICnDrD6zC,GAA4C,CACvD52C,MAAO,CAAEC,aAAc,GACvBC,QAAS,CAAED,aAAc,QAKd42C,GAA+C,CAC1Dv5B,OAAQ,CAAE7W,eAAgB,SAAUD,WAAY,UAChDqD,IAAK,CACHpD,eAAgB,SAChBD,WAAY,cAEd+W,MAAO,CACL9W,eAAgB,WAChBD,WAAY,UAEdmD,OAAQ,CACNlD,eAAgB,SAChBD,WAAY,YAEdgX,KAAM,CACJ/W,eAAgB,aAChBD,WAAY,WAQHswC,GAAwC,CACnDxuC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,uQCfOquC,GAA6C31C,QAACC,SACzDA,EAAQ21C,KACRA,EAAIzf,OACJA,GAAS,EAAK0f,iBACdA,GAAmB,EAAKC,QACxBA,EAAUA,SAAQxtC,SAClBA,EAAW,SAAQzH,MACnBA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,IAEF0D,EAAcA,KACb4wC,GAAkBC,KAGzB,OACE31C,gBAACuL,wBACCpD,SAAS,QACTG,IAAK,EACL2T,KAAM,EACNlb,MAAM,OACNsE,OAAO,OACPggB,OAAQ,IACRxgB,QAASC,EACT8wC,WAAY5f,EAAS,UAAY,SACjCzwB,WAAW,uBACP7E,SAAAA,EAAOM,WAEXhB,gBAACqD,sBACC8E,SAAS,WACTG,IAAK,EACL2T,KAAM,EACNoJ,OAAQ,IACRtkB,MAAM,QACNsE,OAAO,QACPC,QAAQ,OACRxG,gBAAgB,uBAChB+2C,eAAgBJ,UAAeA,aAAYj0C,EAC3C+D,WAAW,gBACXV,QAASC,GACLwwC,GAAkBntC,GAClBxH,QACAD,SAAAA,EAAOwb,MAEVpc,KClEIg2C,GAAmBj2C,IAAA,IAACC,SAAEA,GAAUD,EAAA,OAAKG,gCAAGF,IAErDg2C,GAAMC,QAAUP,GAChBM,GAAME,UDqEkDhzC,QAAClD,SACvDA,EAAQyhB,OACRA,EAAM00B,aACNA,GAAe,EAAKz1C,MACpBA,EAAQ,UAASE,MACjBA,GAGDsC,EADIrC,EAAKC,EAAAoC,EAAAqB,IAEF6xC,OACgB10C,WAAbq4B,SACH,CACE/e,UAAW,oCAEb,CACEq7B,UAAW,EACXC,YAAa,sBACbC,aAAc,CAAEt1C,MAAO,EAAGsE,OAAQ,GAClCixC,cAAe,EACfC,aAAc,IAMtB,OACEv2C,gBAACc,0BACCkE,OAAO,UACPlG,gBAAgB,cAChBiC,MAAOk1C,EAAe,OAAS,IAC/B5wC,OAAQ4wC,EAAe,OAAS,cAChCpxC,QATiBu0B,IACfA,GAASA,EAAMgF,iBAAiBhF,EAAMgF,mBASxC74B,WAAW,iBACNgc,GAAkB20B,EACnBb,GAAgB70C,GAChBG,QACAD,SAAAA,EAAOM,WAEVlB,IC1GPg2C,GAAMlxB,OD+G4CzgB,QAACrE,SACjDA,EAAQ02C,YACRA,EAAc,gBAAer4B,SAC7BA,EAAW,KAAIs4B,eACfA,EAAiB,QAAO/1C,MACxBA,GAEDyD,EADIxD,EAAKC,EAAAuD,EAAA6B,IAIF0wC,EACJ12C,gBAACqD,QAAKwB,QAHQlE,EAAMg1C,QAAUh1C,EAAMg1C,QAAUP,IAI5Cp1C,gBAAC+N,IAAU3C,YAAamqC,GAAgBp3B,GAAW9S,MAAOmrC,KAI9D,OACEx2C,gBAACoF,4BACCF,eAAmC,SAAnBuxC,EAA4B,SAAW,gBACvDxxC,WAAW,SACX03B,gBAAiB,GACjBC,kBAAmB,GACnB1Z,kBAAkB,MAClBC,kBAAkB,QAClBC,kBAAkB,kBACdziB,QACAD,SAAAA,EAAO4iB,QAES,SAAnBmzB,GAA6BC,EAC7B52C,EACmB,UAAnB22C,GAA8BC,IC5IrCZ,GAAMa,KDiJwC5wC,QAACjG,SAC7CA,EAAQY,MACRA,GAEDqF,EADIpF,EAAKC,EAAAmF,EAAAlF,IAER,OACEb,gBAACqD,sBACCs5B,gBAAiB,GACjBC,kBAAmB,GACnBv2B,SD3FQ,OC4FRE,WD3FU,MC4FVD,WD3FU,OC4FV+E,MD3FK,kBC4FD1K,QACAD,SAAAA,EAAOwb,MAEVpc,IChKPg2C,GAAMjxB,ODqK4CtkB,QAACT,SACjDA,EAAQY,MACRA,GAEDH,EADII,EAAKC,EAAAL,EAAA6L,IAER,OACEpM,gBAACoF,4BACCmW,UAAU,OACVtW,WAAW,SACXC,eAAe,WACfy3B,gBAAiB,GACjBC,kBAAmB,GACnBjZ,eAAe,MACfC,eAAe,QACfC,eAAe,iBACfzI,IAAK,IACDza,QACAD,SAAAA,EAAOM,WAEVlB,ICvLPg2C,GAAMc,OClBqB/2C,QACzB+0C,OAAQiC,EAAe/B,OACvBA,EAAMD,OACNA,GACiBh1C,EACXi3C,EAAenC,GAAenb,GAAsBA,EAAMob,QAUhE,OARIE,GACFH,GAAc5C,WAAWoD,UAAUL,GAGjCD,GACFF,GAAc5C,WAAWmD,UAAUL,GAGT,IAAxBiC,EAAaz0C,OACR,KAIPrC,gBAACovB,gBACE0nB,EAAalzC,IAAI,CAACqxC,EAAY3rB,KAC7B,IAAMytB,EAAiBF,EAAgB5B,EAAMtlB,MAE7C,OAAKonB,EAMH/2C,gBAACw1C,kBACC9pB,IAAKpC,EACL0M,OAAQif,EAAMt0C,MAAMsjC,UACpB0R,QAASA,IAAMP,GAAUH,EAAMtlB,MAC/B8lB,KAAM,GACFR,EAAMD,cACV7rC,MAAO,CAAEkc,OAAQ,IAAOiE,KAExBtpB,gBAAC+2C,mBAAmB9B,EAAMt0C,UAb5BwB,QAAQ+Y,MAAS+5B,EAAMtlB,6BAChB,UC7BV,ICgBMqnB,GAA+C,CAC1DhwC,GAAI,CACFjC,QAAS,WACTsB,SAAU,OAEVE,WAAY,OAEdU,GAAI,CACFlC,QAAS,YACTsB,SAAU,OAEVE,WAAY,OAEdW,GAAI,CACFnC,QAAS,YACTsB,SAAU,OAEVE,WAAY,QAOH0wC,GAAqD,CAChEp4C,QAAS,CACPC,gBAAiB,cACjBuM,MAAO,iBACP9F,WAAY,iBAEdpG,OAAQ,CACNL,gBAAiB,iBACjBuM,MAAO,iBACP9F,WAAY,iBAEdvG,QAAS,CACPF,gBAAiB,cACjBC,YAAa,MACbE,YAAa,QACbC,YAAa,iBACbmM,MAAO,iBACP9F,WAAY,kBAOH2xC,GAA6D,CACxEjH,WAAY,CACVvvB,cAAe,MACftF,IAAK,OAEP80B,SAAU,CACRxvB,cAAe,SACftF,IAAK,QAOI+7B,GAA2B,CACtCrhB,OAAQ,CACNh3B,gBAAiB,gBACjBuM,MAAO,iBACP9E,WAAY,MACZ6wC,gBAAiB,EACjBC,gBAAiB,QACjBC,gBAAiB,kBAEnBzhB,MAAO,CACL/2B,gBAAiB,iBACjByG,WAAY,8BAEd+c,SAAU,CACR9e,QAAS,GACTwB,OAAQ,+CCxENuyC,GAAwBl4C,gBAAyC,CACrEm4C,aAAc,KACdC,gBAAiBA,OACjBC,gBAAiB,GACjBC,mBAAoBA,OACpBn4C,eAAgBA,KAAM,EACtB8L,YAAa,WACbR,KAAM,KACNrK,QAAS,YAIEm3C,GAGR/3C,QAACC,SAAEA,EAAQC,MAAEA,GAAOF,EACvB,OACEG,gBAACu3C,GAAsBt3C,UAASF,MAAOA,GACpCD,IAMM+3C,GAA2BA,KACtC,IAAM13C,EAAUC,aAAWm3C,IAC3B,IAAKp3C,EACH,MAAM,IAAIE,MACR,yEAGJ,OAAOF,GAII23C,GAAwD90C,QAAClD,SACpEA,EAAQY,MACRA,GACDsC,GACOsI,YAAEA,GAAgBusC,KAIxB,OACE73C,gBAHgC,eAAhBsL,EAA+BlG,aAAatE,0BAI1DC,MAAM,QACFm2C,GAA2B5rC,IAC/B/F,WAAW,gBACX7G,aAAa,aACTgC,SAAAA,EAAOM,WAEVlB,IAMDi4C,GAA4B14C,gBAG/B,CAAEmD,UAAW,KAAMS,YAAY,IAcrB+0C,GAAwD7zC,QA4D1C8zC,GA5D2Cv0C,KACpEA,EAAI3D,MACJA,EAAKkD,WACLA,GAAa,EAAKnD,SAClBA,EAAQY,MACRA,GACDyD,GACOqzC,aACJA,EAAYC,gBACZA,EAAensC,YACfA,EAAWR,KACXA,EAAIrK,QACJA,EAAOy3C,eACPA,GACEL,KAGEM,SAASz0C,SAAAA,EAAMa,KAAMxE,EACrBkmB,EAAWuxB,IAAiBW,EAC5BC,SAAc10C,SAAAA,EAAMuxB,QAASvxB,EAAKuxB,MAAM5yB,OAAS,EACjDigB,SAAW5e,SAAAA,EAAM4e,WAAYrf,EAa7B+yC,EAA4B,eAAhB1qC,EAA+BlG,aAAatE,WAG9D,OAAIhB,EAEAE,gBAAC+3C,GAA0B93C,UACzBF,MAAO,CAAEyC,UAAW21C,GAAU,KAAMl1C,WAAYqf,IAEhDtiB,gBAACqD,sBACCtC,MAAM,OACNiE,OAAQsd,EAAW,cAAgB,UACnC9e,QAAS8e,EAAW,GAAM,EAC1B5jB,aAAa,MACb6G,WAAW,iBACPyxC,GAAoBlsC,GACpBmsC,GAAuBx2C,GACtBwlB,EAAWkxB,GAAyBrhB,OAAS,IAClD/T,OAASO,EAA4C,GAAjC60B,GAAyBthB,aACzCn1B,SAAAA,EAAOgD,MAEV5D,IAOLs4C,GAAe10C,EAEf1D,gBAACg2C,iBACCj1C,MAAM,OACN2f,cAA8C,SAC9CvY,SAAS,kBACLzH,SAAAA,EAAOgD,MAEX1D,gBAACq4C,IACCF,OAAQz0C,EAAKa,GACb+d,SAAU5e,EAAK4e,SACf5hB,MAAOA,GAENgD,EAAK+B,MACJzF,gBAACqD,sBAAKspB,YAAa,SAAOjsB,SAAAA,EAAO+E,MAC9B/B,EAAK+B,MAGT/B,EAAKsrB,OAGRhvB,gBAACs4C,IAAsBH,OAAQz0C,EAAKa,IAClCvE,gBAAC83C,iBACEp0C,EAAKuxB,cAALgjB,EAAYr0C,IAAK20C,GAChBv4C,gBAACg4C,IAAmBtsB,IAAK6sB,EAAQh0C,GAAIb,KAAM60C,QASnD70C,EAEA1D,gBAACqD,sBACC6E,GAAIxE,EAAK80C,KAAO,IAAM,MACtBt6B,GAAIxa,EAAK80C,KACT3zC,QA5EcC,KACdwd,GAEA61B,IACFV,EAAgBU,GACZD,GACFA,EAAeC,KAuEfnzC,OAAQtB,EAAK4e,SAAW,cAAgB,UACxC9e,QAASE,EAAK4e,SAAW,GAAM,EAC/BvhB,MAAM,OACNuE,QAAQ,OACRL,WAAW,SACXvG,aAAa,MACb6G,WAAW,gBACX6V,IAAI,OACA47B,GAAoBlsC,GACpBmsC,GAAuBx2C,GACtBwlB,EAAWkxB,GAAyBrhB,OAAS,IAClD/T,OAASre,EAAK4e,SAA4C,GAAjC60B,GAAyBthB,aAC9Cn1B,SAAAA,EAAOgD,MAEVA,EAAK+B,MACJzF,gBAACqD,sBAAKspB,YAAa,SAAOjsB,SAAAA,EAAO+E,MAC9B/B,EAAK+B,MAGT/B,EAAKsrB,OAKL,MAIIqpB,GAA8DtyC,QAACjG,SAC1EA,EAAQq4C,OACRA,EAAM71B,SACNA,EAAQ5hB,MACRA,GACDqF,GACOyxC,aAAEA,EAAYG,mBAAEA,EAAkBn4C,eAAEA,EAAcsL,KAAEA,EAAIrK,QAAEA,GAC9Do3C,KAEI5xB,EAAWuxB,IAAiBW,EAC5Bj1C,EAAa1D,EAAe24C,GAQlC,OACEn4C,gBAACqD,sBACCwB,QARiBulB,IACnBA,EAAE0M,iBACExU,GACJq1B,EAAmBQ,IAMjBnzC,OAAQsd,EAAW,cAAgB,UACnC9e,QAAS8e,EAAW,GAAM,EAC1BvhB,MAAM,OACNuE,QAAQ,OACRL,WAAW,SACXC,eAAe,gBACfxG,aAAc,EACd6G,WAAW,8BACPyxC,GAAoBlsC,GACpBmsC,GAAuBx2C,GACtBwlB,EAAWkxB,GAAyBrhB,OAAS,IAClD/T,OAASO,EAA4C,GAAjC60B,GAAyBthB,aACzCn1B,SAAAA,EAAO+3C,SAEXz4C,gBAACqD,QAAKiC,QAAQ,OAAOL,WAAW,UAC7BnF,GAEHE,gBAACqD,sBACCkC,WAAW,sBACXC,UAAWtC,EAAa,iBAAmB,sBACvCxC,SAAAA,EAAOsrB,WAEXhsB,uBACEe,MAAM,KACNsE,OAAO,KACPK,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAEN5F,wBACE6F,EAAE,8DACFF,KAAK,qBASJ2yC,GAA8D/3C,QAACT,SAC1EA,EAAQq4C,OACRA,EAAMz3C,MACNA,GACDH,GACOf,eAAEA,EAAc8L,YAAEA,GAAgBusC,KAIxC,OAFmBr4C,EAAe24C,GAOhCn4C,gBAACqD,sBACC0d,YAA6B,aAAhBzV,EAA6B,GAAK,EAC/CwQ,WAA4B,eAAhBxQ,EAA+B,EAAI,EAC/C/H,SAAS,SACTxC,MAAM,OACNoH,SAA0B,eAAhBmD,EAA+B,WAAa,WACtDxM,gBAAiC,eAAhBwM,EAA+B,QAAU,cAC1DwP,UACkB,eAAhBxP,EAA+B,+BAAiC,OAElE5M,aAA8B,eAAhB4M,EAA+B,MAAQ,IACrD+Z,OAAwB,eAAhB/Z,EAA+B,GAAK,SACxC5K,SAAAA,EAAOM,WAEVlB,GAlBI,MAiFE44C,GAQT7rC,QAACooB,MACHA,EAAK3pB,YACLA,EAAW5K,MAEXA,GAEDmM,EAGC,OAAKooB,GAA0B,IAAjBA,EAAM5yB,OAKlBrC,gBAPgC,eAAhBsL,EAA+BlG,aAAatE,0BAQ1DC,MAAM,QACFm2C,GAA2B5rC,SAC3B5K,SAAAA,EAAOM,WAEXhB,gBAAC83C,IAAmBp3C,MAAOA,GACxBu0B,EAAMrxB,IAAKF,GACV1D,gBAACg4C,IAAmBtsB,IAAKhoB,EAAKa,GAAIb,KAAMA,EAAMhD,MAAOA,OAXpD,qICpUEi4C,GAlDkD94C,QAACo1B,MAC9DA,EAAKn1B,SACLA,EAAQwL,YACRA,EAAc,WAAUR,KACxBA,EAAO,KAAIrK,QACXA,EAAU,UAASm4C,oBACnBA,EAAsB,KAAIC,uBAC1BA,EAAyB,GAAEX,eAC3BA,EAAcx3C,MACdA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,KAEFo2C,aACJA,EAAYC,gBACZA,EAAeC,gBACfA,EAAeC,mBACfA,EAAkBn4C,eAClBA,GHnCkC,SACpCo5C,EACAC,YADAD,IAAAA,EAAqC,eACrCC,IAAAA,EAAmC,IAEnC,IAAOrB,EAAcC,GAAmB11C,WACtC62C,IAEKlB,EAAiBoB,GAAsB/2C,WAC5C82C,GAsBF,MAAO,CACLrB,aAAAA,EACAC,gBAAAA,EACAC,gBAAAA,EACAC,mBAvB0BQ,IAC1BW,EAAoBC,GAECA,EAAoBp2C,SAASw1C,GAIvCY,EAAoBn2C,OAAQ2B,GAAOA,IAAO4zC,GAG1C,IAAIY,EAAqBZ,KAcpC34C,eATsB24C,GACfT,EAAgB/0C,SAASw1C,IGS9Ba,CAAuBJ,EAAqBC,GAEhD,OACE74C,gBAAC43C,IACC73C,MAAO,CACLy3C,aAAAA,EACAC,gBAAAA,EACAC,gBAAAA,EACAC,mBAAAA,EACAn4C,eAAAA,EACA8L,YAAAA,EACAR,KAAAA,EACArK,QAAAA,EACAy3C,eAAAA,IAGDjjB,EACCj1B,gBAAC04C,kBACCzjB,MAAOA,EACP3pB,YAAaA,EACbR,KAAMA,EACNrK,QAASA,EACTC,MAAOA,GACHC,IAGNb,IASR64C,GAAeM,KAAOnB,GACtBa,GAAe51C,KAAOi1C,GACtBW,GAAez0C,QAAUm0C,GACzBM,GAAe7yC,QAAUwyC,GACzBK,GAAe95B,KDqPsDpS,QAAC+rC,KACpEA,EAAI14C,SACJA,EAAQY,MACRA,GAED+L,EADI9L,EAAKC,EAAA6L,EAAArL,KAEFoB,UAAEA,EAASS,WAAEA,GAlPuBi2C,MAC1C,IAAM/4C,EAAUC,aAAW23C,IAC3B,IAAK53C,EACH,MAAM,IAAIE,MACR,yEAGJ,OAAOF,GA2O2B+4C,IAC5B1B,aAAEA,EAAYC,gBAAEA,EAAeS,eAAEA,GACrCL,KAEI5xB,EAAWuxB,IAAiBh1C,EAqBlC,OACExC,gBAACqD,sBACC6E,GAAG,IACHswC,KAAMv1C,OAAazB,EAAYg3C,EAC/B3zC,QAvBiBulB,IACfnnB,EACFmnB,EAAE0M,kBAIAt0B,IACFi1C,EAAgBj1C,GACZ01C,GACFA,EAAe11C,IAKf7B,EAAMkE,SACRlE,EAAMkE,QAAQulB,KASdplB,OAAQ/B,EAAa,cAAgB,UACrCO,QAASP,EAAa,GAAM,EAC5BlC,MAAM,OACNuE,QAAQ,OACRL,WAAW,wBACGghB,EAAW,YAASzkB,kBACnByB,gBACFgjB,EAAW,QAAKzkB,kBACdyB,EAAa,QAAKzB,GAC5BykB,EAAW,CAAE1f,WAAY,QAAW,SACrC7F,SAAAA,EAAOM,UACPL,GAEHb,IErWP,IAAMmjB,GAAiC,GAQjCk2B,GAAe95C,gBAAiC,CACpDqB,MAAOuiB,GACPm2B,WAAYA,SAGDC,GAIRx5C,IAAA,IAACC,SAAEA,EAAQY,MAAEA,EAAQuiB,GAAam2B,WAAEA,GAAYv5C,EAAA,OAEnDG,gBAACm5C,GAAal5C,UAASF,MAAO,CAAEW,MAAAA,EAAO04C,WAAAA,IACpCt5C,IAKQw5C,GAAkBA,IAAMl5C,aAAW+4C,ICvBnCI,GAAsC,CACjDC,MAAO,CACLz4C,MAAO,OAEPrC,aAAc,MACd6E,SAAU,SACVuX,UAAW,+BACXyJ,OAAQ,YACRrlB,YAAa,iBACbqG,WAAY,iBAEdk0C,MAAO,CACL36C,gBAAiB,gBACjB0mC,aAAc,YACdpiB,kBAAmB,kBAErBs2B,GAAI,CACF30C,QAAS,YACTwB,WAAY,MACZF,SAAU,OACVgF,MAAO,iBACP0S,UAAW,QAEb47B,GAAI,CACF50C,QAAS,YACTsB,SAAU,OACVm/B,aAAc,YACdpiB,kBAAmB,kBAErBw2B,GAAI,CACFr0C,WAAY,6BACZwc,OAAQ,CACNjjB,gBAAiB,kBAGrB+6C,MAAO,CACL/6C,gBAAiB,gBACjByH,WAAY,MACZuzC,UAAW,YACXj2B,eAAgB,kBAElBk2B,QAAS,CACP/0B,OAAQ,QACR3Z,MAAO,iBACPhF,SAAU,OACV2E,UAAW,WChDFgvC,GAAuCr5C,IAClD,IAAMD,MAAEA,GAAU44C,KAClB,OACEt5C,gBAAC+K,yBACC7C,GAAG,QACH+xC,eAAe,YACXV,GAAmBC,YACnB94C,SAAAA,EAAO84C,MACP74C,KAKGu5C,GAAkCv5C,IAC7C,IAAMD,MAAEA,GAAU44C,KAClB,OACEt5C,gBAAC+K,yBACC7C,GAAG,QACH6V,UAAU,QACNw7B,GAAmBE,YACnB/4C,SAAAA,EAAO+4C,MACP94C,KAKGw5C,GAAsCx5C,IACjD,IAAMD,MAAEA,GAAU44C,KAClB,OACEt5C,gBAAC+K,yBACC7C,GAAG,KACHo0B,WAAW,UACPid,GAAmBG,SACnBh5C,SAAAA,EAAOg5C,GACP/4C,KAKGy5C,GAAiCz5C,IAC5C,IAAMD,MAAEA,EAAK04C,WAAEA,GAAeE,KAC9B,OACEt5C,gBAAC+K,yBACC7C,GAAG,MACCqxC,GAAmBK,SACnBl5C,SAAAA,EAAOk5C,IACX/0C,QAASu0C,GACLz4C,KAKG05C,GAAkC15C,IAC7C,IAAMD,MAAEA,GAAU44C,KAClB,OACEt5C,gBAAC+K,yBACC7C,GAAG,KACHo0B,WAAW,SACX/1B,WAAY5F,EAAM25C,cAAgB,MAAQ,OACtCf,GAAmBI,SACnBj5C,SAAAA,EAAOi5C,GACPh5C,KAKG45C,GAAkC55C,IAC7C,IAAMD,MAAEA,GAAU44C,KAClB,OACEt5C,gBAAC+K,yBACC7C,GAAG,SACCqxC,GAAmBiB,YACnB95C,SAAAA,EAAO85C,MACP75C,KAKG85C,GAAoC95C,IAC/C,IAAMD,MAAEA,GAAU44C,KAClB,OACEt5C,gBAAC+K,yBACC7C,GAAG,SACCqxC,GAAmBM,YACnBn5C,SAAAA,EAAOm5C,MACPl5C,KAKG+5C,GAAqC/5C,IAChD,IAAMD,MAAEA,GAAU44C,KAClB,OACEt5C,gBAAC+K,yBACC7C,GAAG,WACCqxC,GAAmBQ,cACnBr5C,SAAAA,EAAOq5C,QACPp5C,KC/FGg6C,GAAQ96C,QAACC,SAAEA,EAAQY,MAAEA,EAAKmE,QAAEA,GAA2BhF,EAClE,OACEG,gBAACq5C,IAAc34C,MAAOA,EAAO04C,WAAYv0C,GACtC/E,IAKP66C,GAAMC,KAAOV,GACbS,GAAME,SAAWV,GACjBQ,GAAMhE,KAAO4D,GACbI,GAAMG,IAAMV,GACZO,GAAMI,KAAOV,GACbM,GAAM91B,OAAS41B,GACfE,GAAMK,QAAUN,GAChBC,GAAM3E,UAAYgE,GAClBW,GAAMM,SDoF6Cp7C,QAAC8tB,KAClDA,EAAIutB,QACJA,EAAOp3B,OACPA,EAAMi2B,QACNA,GAEDl6C,EACC,OACEG,gBAACg6C,IAAe/zC,KAAK,SAClB8zC,GAAW/5C,gBAAC06C,QAAcX,GAC3B/5C,gBAACk6C,QACCl6C,gBAACo6C,QACEc,EAAQt3C,IAAKu3C,GACZn7C,gBAACm6C,IAAczuB,IAAKyvB,EAAOne,OAAQme,EAAO5wC,UAIhDvK,gBAACu6C,QACE5sB,EAAK/pB,IAAI,CAACw3C,EAAK9xB,IACdtpB,gBAACo6C,IAAS1uB,IAAKpC,GACZ4xB,EAAQt3C,IAAI,CAACu3C,EAAQE,IACpBr7C,gBAACq6C,IAAU3uB,IAAKyvB,EAAOne,MAAOsd,cAA+B,IAAhBe,GAC1CD,EAAID,EAAOne,YAMrBlZ,GACC9jB,gBAACy6C,QACCz6C,gBAACo6C,QACEt2B,EAAOlgB,IAAI,CAAC03C,EAAMhyB,IACjBtpB,gBAACq6C,kBAAU3uB,IAAKpC,GAAWgyB,EAAK36C,OAC7B26C,EAAKv7C,YE3If,ICcMw7C,GAAsC17C,QAAC27C,IAClDA,EAAGv1B,SACHA,EAAQphB,QACRA,EAAOsc,aACPA,EAAe,OAAMs6B,UACrBA,EAASC,WACTA,GACD77C,EAmDC,OACEG,gBAAC+K,yBACC7C,GAAG,MACHjC,KAAK,sBACUggB,EACfmS,SAAUnS,EAAW,GAAK,GAtDA,CAC5B3gB,QAAS,OACTL,WAAY,SACZC,eAAgB,SAChBH,QAAS,YACTC,OAAQ,UACR22C,oBAAqB,MACrBC,qBAAsB,MACtBC,uBAAwB,EACxBC,wBAAyB,EACzB/8C,YAAa,MACbE,YAAa,QACbC,YAAa+mB,EAAW,gBAAkB,cAC1C7C,kBAAmB6C,EAAW,cAAgB,iBAC9CnnB,gBAAiBmnB,EAAW,cAAgB,cAC5C5a,MAAO4a,EAAW,gBAAkB,iBACpC1f,WAAY,SACZ4B,SAAU,WAKV02B,GAAI,CACFhJ,MAAO,CACLxqB,MAAO,mBAgCLowC,GACJ/6B,cA3BqBq7B,MACvB,OAAQ56B,GACN,IAAK,MACH,MAAO,SACT,IAAK,SACH,MAAO,iBACT,IAAK,QACH,MAAO,cACT,IAAK,OACL,QACE,MAAO,QAiBM46B,GACf3gC,IAZK,CAAC,MAAO,UAAUzY,SAASwe,GAAgB,MAAQ,MAaxDtc,QAASA,eACGohB,EAAW,SAAW,aAEjCu1B,EAAI/1C,MAAQzF,gBAAC+K,eAASywC,EAAI/1C,MAC3BzF,gBAACkL,wBAASwwC,GAAaF,EAAIjxC,SCvFpByxC,GAAoCn8C,QAACo8C,KAChDA,EAAO,GAAEC,UACTA,EAASC,eACTA,EAAcz7C,MACdA,EAAQ,GAAE07C,UACVA,EAASC,cACTA,EAAal7B,aACbA,EAAe,QAChBthB,EAEC,OAAKq8C,EAQHl8C,gBAACc,0BAASC,MAAM,OAAOsE,OAAQ,QAAY3E,EAAMM,WAE/ChB,gBAACoF,8BAAe1E,EAAM47C,YACnBL,EAAKr4C,IAAK43C,IAET,IAAMv1B,EAAWu1B,EAAIjxC,QAAU2xC,EAAU3xC,MAEnC1F,EAAUA,IAAMs3C,EAAeX,GAGrC,OAAIY,EACKA,EAAUZ,EAAKv1B,EAAUphB,GAKhC7E,gBAACu7C,IACC7vB,IAAK8vB,EAAIjxC,MACTixC,IAAKA,EACLv1B,SAAUA,EACVphB,QAASA,EACTsc,aAAcA,EACds6B,UAASz3C,OAAAC,UACJvD,EAAM86C,IACLv1B,EAAWvlB,EAAMw7C,UAAY,IAEnCR,WAAU13C,OAAAC,UACLvD,EAAM6J,MACL0b,EAAWvlB,EAAM67C,WAAa,SAQ5Cv8C,gBAACqD,sBAAKtC,MAAO,OAAQsE,OAAO,QAAW3E,EAAMqa,SAE1CshC,EACGA,EAAcH,GAEdA,EAAUnhC,UA9CX,MC4BEyhC,GAAOx8C,EAAMy8C,KAvCiB58C,QAACo8C,KAC1CA,EAAIv7C,MACJA,EAAKg8C,gBACLA,EAAeC,YACfA,EAAWP,UACXA,EAASC,cACTA,EAAal7B,aACbA,EAAe,QAChBthB,GAEOq8C,UAAEA,EAASU,aAAEA,GHXOC,EAC1BC,EACAJ,KAIA,IAAMK,EAAiBA,KACrB,GAAKD,GAAgC,IAApBA,EAASz6C,OAA1B,CAGA,QAAwBb,IAApBk7C,EAA+B,CACjC,IAAMM,EAAWF,EAAS3f,KAAMqe,GAAQA,EAAIjxC,QAAUmyC,GACtD,GAAIM,EACF,OAAOA,EAOX,OAAOF,EAAS,MAGXZ,EAAWU,GAAgB76C,WAA0Bg7C,GAuB5D,OAnBA76C,YAAU,KACR,IAAM+6C,EAAgBF,IAGhBG,EACJhB,GAAaY,EAASz4B,KAAM84B,GAAMA,EAAE5yC,QAAU2xC,EAAU3xC,OAGxD0yC,KACEC,QACqB17C,IAApBk7C,UAAiCR,SAAAA,EAAW3xC,SAAUmyC,GAEzDE,EAAaK,IACHA,GAAiBf,GAE3BU,OAAap7C,IAEd,CAACs7C,EAAUJ,IAEP,CACLR,UAAAA,EACAU,aAAAA,IGrCkCC,CAAaZ,EAAMS,GAevD,OACE18C,gBAACg8C,IACCC,KAAMA,EACNv7C,MAAOA,EACPw7C,UAAWA,EACXC,eAjBoBX,WAElBU,SAAAA,EAAW3xC,SAAUixC,EAAIjxC,QAC3BqyC,EAAapB,GAETmB,GACFA,EAAYnB,KAYdY,UAAWA,EACXC,cAAeA,EACfl7B,aAAcA,6HChCdi8B,GAA8Bv9C,QAACC,SACnCA,EAAQU,MACRA,EAAQ,UAASC,QACjBA,EAAU,QAAO4d,UACjBA,EAASE,aACTA,EAAYtb,WACZA,EAAUo6C,SACVA,EAAQC,aACRA,EAAYC,SACZA,EAAQ78C,MACRA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,IAEFo8C,EAAev6C,EAAoC,iBAAvB,qBAC5BgjB,KAAco3B,IAAYh/B,GA8BhC,OACEre,gBAACuL,wBACCtF,KAAK,SACLlB,QAAmB,eAAVvE,EAAyB,YAAc,MAChDO,MAAM,cACNsK,MAAO4a,EAAW,cAAgBu3B,EAClC1+C,gBAAiBmnB,EAAWu3B,EAAc,cAC1C7+B,aArBgBH,IAAMD,GAAcF,GAsBpCO,aAAcA,IAAML,GAAa,GACjCvZ,OAAQ/B,EAAa,cAAgB,UACrCvE,aAAwB,eAAV8B,EAAyB,OAAS,MAChDqE,QAvBiB44C,KACdx6C,GACHq6C,EAAc1zB,IACZ,IAAM8zB,GAAY9zB,EAIlB,OAHI2zB,GACFA,EAASG,GAEJA,MAxBwC,CACnD1+C,QAAS,CACPD,YAAa,EACbE,YAAa,QACbC,YAAa,sBAEf0e,KAAM,CACJ7e,YAAa,EACbE,YAAa,QACbC,YAAa+mB,EAAWu3B,EAAc,cACtCvyC,eAAgB,aAElB6S,MAAO,IA6Bcrd,GACfE,QACAD,SAAAA,EAAOM,WAEVlB,0EChCM69C,GAlCW99C,QAACC,SACvBA,EAAQU,MACRA,EAAKC,QACLA,EAAOwC,WACPA,EAAU26C,UAEVA,GAAY,EAAKL,SACjBA,GAEY19C,EADTc,EAAKC,EAAAf,EAAAuB,KAGFid,UAAEA,EAASE,aAAEA,EAAY8+B,SAAEA,EAAQC,aAAEA,GCddO,CAAAA,IAE7B,IAAOx/B,EAAWE,GAAgBxc,YAAS,IAEpCs7C,EAAUC,GAAgBv7C,WAAS87C,GAE1C,MAAO,CAAEx/B,UAAAA,EAAWE,aAAAA,EAAc8+B,SAAAA,EAAUC,aAAAA,IDS1CQ,CAAeF,GAMjB,OAJA17C,YAAU,KACRo7C,EAAaM,IACZ,CAACA,IAGF59C,gBAACo9C,kBACC58C,MAAOA,EACPC,QAASA,EACTwC,WAAYA,EACZob,UAAWA,EACXE,aAAcA,EACd8+B,SAAUA,EACVC,aAAcA,EACdC,SAAUA,GACN58C,GAEHb,IE7BMi+C,GAAkBl+C,QAACo1B,MAE9BA,EAAK+oB,eAELA,EAAcC,cAEdA,EAAaC,iBAEbA,EAAgB19C,MAEhBA,EAAQ,UAASC,QAEjBA,EAAU,QAAOC,MACjBA,GACqBb,EAEf49C,EAAel7C,cACnB,CAACgC,EAAY0hB,KACXi4B,EAAkBC,IAChB,IAAIC,EAWJ,OATEA,EADEn4B,EACiBk4B,EAAkBx7C,SAAS4B,GAC1C45C,EACA,IAAIA,EAAmB55C,GAER45C,EAAkBv7C,OAClCy7C,GAAaA,IAAa95C,SAG/By5C,GAAAA,EAAiBI,GACVA,KAGX,CAACJ,EAAgBE,IAEnB,OACEl+C,gBAACoF,4BAAWa,KAAK,cAAcX,QAAQ,OAAO8V,IAAK,SAAO1a,SAAAA,EAAOM,WAC9Di0B,EAAMrxB,IAAKF,GACV1D,gBAAC29C,IACC13C,eAAgBvC,EAAKa,GACrBmnB,IAAKhoB,EAAKa,GACV/D,MAAOA,EACPC,QAASA,EACTm9C,UAAWK,EAAct7C,SAASe,EAAKa,KAAOb,EAAKuiB,SACnDs3B,SAAW/jB,GAAUikB,EAAa/5C,EAAKa,GAAIi1B,GAC3Cv2B,WAAYS,EAAKT,WACjBvC,YAAOA,SAAAA,EAAO49C,QAEb56C,EAAK3D,UClDHw+C,GAAkD1+C,IAAA,IAACo1B,MAC9DA,EAAKupB,WACLA,EAAU/K,eACVA,EAAcgL,UACdA,EAASC,aACTA,EAAYC,SACZA,EAAQx0B,gBACRA,EAAezpB,MACfA,GAEDb,EAAA,OACCG,gBAACqD,sBACCE,SAAS,SACT4E,SAAS,YACLsrC,QACA/yC,SAAAA,EAAOM,WAEVi0B,EAAMrxB,IAAI,CAACF,EAAM4lB,IAChBtpB,gBAACqD,sBACCqoB,IAAKpC,EACLjf,IAAMu0C,GAAQD,EAASz1C,QAAQogB,GAASs1B,EACxCvzB,YAAcjB,GAAwBD,EAAgBC,EAAGd,GACzD4B,aAAed,GAAwBD,EAAgBC,EAAGd,GAC1DnhB,SAAS,WACTnD,OAAO,OACPO,WAAW,iBACXzG,gBACE4/C,IAAiBp1B,EAAQ,iBAAmB,eAE1Cm1B,QACA/9C,SAAAA,EAAOgD,MAEV86C,EAAaA,EAAW96C,EAAM4lB,GAAS5lB,MC/BnCm7C,GAAoDl+C,IAC/D,IAAMs0B,MAAEA,EAAKypB,aAAEA,EAAYC,SAAEA,EAAQx0B,gBAAEA,GCHNtqB,CAAAA,QACjCo1B,MAAO6pB,EAAYt3B,SACnBA,GACiB3nB,GACVo1B,EAAO8pB,GAAYh9C,WAAS+8C,IAC5BE,EAAaC,GAAkBl9C,WAAc,OAC7C28C,EAAcQ,GAAmBn9C,WAAwB,MAC1Do9C,EAAkBv2C,SAAO,CAAEmE,EAAG,EAAGC,EAAG,IACpC2xC,EAAW/1C,SAAkC,IAE7CuhB,EAAkB5nB,cACtB,CAAC6nB,EAAwCd,KACvCc,EAAE0M,iBACF+C,SAASulB,KAAKj2C,MAAMnE,OAAS,WAO7Bm6C,EAAgBj2C,QAAU,CAAE6D,EAJ1B,YAAaqd,EAAIA,EAAEC,QAAQ,GAAGC,QAAWF,EAAuBE,QAI1Btd,EAFtC,YAAaod,EAAIA,EAAEC,QAAQ,GAAGE,QAAWH,EAAuBG,SAGlE20B,EAAgB51B,GAChB21B,EAAehqB,EAAM3L,KAEvB,CAAC2L,IAGGzK,EAAiBjoB,cACpB6nB,IACC,GAAqB,OAAjBs0B,EAAJ,CAEA,IAAMp0B,EAAU,YAAaF,EAAIA,EAAEC,QAAQ,GAAGC,QAAUF,EAAEE,QACpDC,EAAU,YAAaH,EAAIA,EAAEC,QAAQ,GAAGE,QAAUH,EAAEG,QAEpD80B,EAAiBV,EAASz1C,QAAQw1C,GACxC,GAAKW,EAAL,CAKAA,EAAel2C,MAAM3D,wBAHL8kB,EAAU60B,EAAgBj2C,QAAQ6D,WAClCwd,EAAU40B,EAAgBj2C,QAAQ8D,SAGlDqyC,EAAel2C,MAAMkc,OAAS,OAG9B,IAAMi6B,EAAeX,EAASz1C,QAAQq2C,UAAU,CAAC1mB,EAASvP,KACxD,IAAKuP,GAAWvP,IAAUo1B,EAAc,OAAO,EAC/C,IAAM1lB,EAAOH,EAAQlE,wBACrB,OAAOpK,GAAWyO,EAAK1wB,KAAOiiB,GAAWyO,EAAK5wB,SAGhD,IAAsB,IAAlBk3C,GAAuBA,IAAiBZ,EAAc,CACxD,IAAMc,EAAW,IAAIvqB,IACdwqB,GAAWD,EAASE,OAAOhB,EAAc,GAChDc,EAASE,OAAOJ,EAAc,EAAGG,GACjCV,EAASS,GACTN,EAAgBI,SAChB93B,GAAAA,EAAWg4B,GACXL,EAAgBj2C,QAAU,CAAE6D,EAAGud,EAAStd,EAAGud,OAG/C,CAACm0B,EAAczpB,EAAOzN,IAGlBqD,EAAgBtoB,cAAY,KAChCs3B,SAASulB,KAAKj2C,MAAMnE,OAAS,GAE7B25C,EAASz1C,QAAQmlB,QAASuwB,IACpBA,IACFA,EAAGz1C,MAAM3D,UAAY,GACrBo5C,EAAGz1C,MAAMkc,OAAS,MAItB65B,EAAgB,MAChBD,EAAe,OACd,CAACP,IAkBJ,OAhBAx8C,YAAU,KACa,OAAjBw8C,IACFlnB,OAAOsC,iBAAiB,YAAatP,GACrCgN,OAAOsC,iBAAiB,YAAatP,GACrCgN,OAAOsC,iBAAiB,UAAWjP,GACnC2M,OAAOsC,iBAAiB,WAAYjP,IAG/B,KACL2M,OAAOuC,oBAAoB,YAAavP,GACxCgN,OAAOuC,oBAAoB,YAAavP,GACxCgN,OAAOuC,oBAAoB,UAAWlP,GACtC2M,OAAOuC,oBAAoB,WAAYlP,KAExC,CAAC6zB,EAAcl0B,EAAgBK,IAE3B,CACLoK,MAAAA,EACA+pB,YAAAA,EACAN,aAAAA,EACAC,SAAAA,EACAx0B,gBAAAA,ID9FAw1B,CAAoBh/C,GAEtB,OACEX,gBAACu+C,oBACK59C,GACJs0B,MAAOA,EACPypB,aAAcA,EACdC,SAAUA,EACVx0B,gBAAiBA,MAKVy1B,GAAcf,GEjBdgB,GAA6C,CACxD74C,GAAI,CACFjC,QAAS,UACTsB,SAAU,OACV6W,SAAU,SAEZjW,GAAI,CACFlC,QAAS,WACTsB,SAAU,OACV6W,SAAU,SAEZhW,GAAI,CACFnC,QAAS,YACTsB,SAAU,OACV6W,SAAU,UAID4iC,GAAmD,CAC9DjhD,QAAS,CACPC,gBAAiB,cACjBuM,MAAO,kBAETlM,OAAQ,CACNL,gBAAiB,iBACjBuM,MAAO,kBAETrM,QAAS,CACPF,gBAAiB,cACjBC,YAAa,MACbE,YAAa,QACbC,YAAa,iBACbmM,MAAO,mBAIE00C,GAAyB,CACpClqB,MAAO,CACL/2B,gBAAiB,kBAEnBg3B,OAAQ,CACNh3B,gBAAiB,kBAEnBwjB,SAAU,CACR9e,QAAS,GACTwB,OAAQ,uKC1BNg7C,GAAsB3gD,gBAAuC,CACjE22B,QAAQ,EACRC,UAAWA,OACXE,gBAAiB,KACjBC,mBAAoBA,OACpBtrB,KAAM,KACNrK,QAAS,YAIEw/C,GAGRpgD,QAACC,SAAEA,EAAQC,MAAEA,GAAOF,EACvB,OACEG,gBAACggD,GAAoB//C,UAASF,MAAOA,GAClCD,IAMMogD,GAAyBA,KACpC,IAAM//C,EAAUC,aAAW4/C,IAC3B,IAAK7/C,EACH,MAAM,IAAIE,MACR,qEAGJ,OAAOF,GAIIggD,GAA0Dn9C,QAAClD,SACtEA,EAAQY,MACRA,GAEDsC,EADIrC,EAAKC,EAAAoC,EAAA5B,KAEF40B,OAAEA,EAAMC,UAAEA,GAAciqB,KAO9B,OACElgD,gBAACqD,sBACCkB,GAAG,mBACHM,QARiBulB,IACnBA,EAAEgU,kBACFnI,GAAWD,IAOThxB,OAAO,UACPmD,SAAS,WACT7C,QAAQ,sBACJ5E,SAAAA,EAAOM,UACPL,GAEHb,IAMMsgD,GAA0Dj8C,QAAC8wB,MACtEA,EAAKgC,KACLA,EAAO,SAAQC,MACfA,EAAQ,QAAOx2B,MACfA,GAEDyD,EADIxD,EAAKC,EAAAuD,EAAAE,KAEF2xB,OACJA,EAAMv1B,QACNA,GACEy/C,KAEJ,OAAKlqB,EAKHh2B,gBAACqD,sBACCkB,GAAG,gBACH4D,SAAS,WACTkd,OAAQ,IACR3mB,aAAc,EACdoc,UAAU,kCACVvX,SAAS,UDrDoB,SACjC0zB,EACAC,GAiCA,gBAlCAD,IAAAA,EAAiB,mBACjBC,IAAAA,EAAmB,SAE4B,CAC7C5uB,IAAGtE,OAAAC,QACDmE,OAAQ,OACR9E,aAAc,OACA,UAAV4zB,GAAqB,CAAEjb,KAAM,GACnB,WAAVib,GAAsB,CAAEjb,KAAM,MAAOzW,UAAW,oBACtC,QAAV0xB,GAAmB,CAAElb,MAAO,IAElCA,MAAKhY,OAAAC,QACHgY,KAAM,OACNid,WAAY,OACE,UAAVhC,GAAqB,CAAE5uB,IAAK,GAClB,WAAV4uB,GAAsB,CAAE5uB,IAAK,MAAO9C,UAAW,oBACrC,QAAV0xB,GAAmB,CAAE9uB,OAAQ,IAEnCA,OAAMpE,OAAAC,QACJqE,IAAK,OACLiT,UAAW,OACG,UAAV2b,GAAqB,CAAEjb,KAAM,GACnB,WAAVib,GAAsB,CAAEjb,KAAM,MAAOzW,UAAW,oBACtC,QAAV0xB,GAAmB,CAAElb,MAAO,IAElCC,KAAIjY,OAAAC,QACF+X,MAAO,OACP2Q,YAAa,OACC,UAAVuK,GAAqB,CAAE5uB,IAAK,GAClB,WAAV4uB,GAAsB,CAAE5uB,IAAK,MAAO9C,UAAW,oBACrC,QAAV0xB,GAAmB,CAAE9uB,OAAQ,KAIpB6uB,GCmBTopB,CAAoBppB,EAAMC,GAC1B4oB,GAAqBr/C,SACrBC,SAAAA,EAAO43B,KACP33B,GAEHs0B,EAAMrxB,IAAI,CAACF,EAAM4lB,IACZ5lB,EAAK60B,QACAv4B,gBAACsgD,IAAoB50B,eAAgBpC,EAAS5oB,MAAOA,IAGvDV,gBAACugD,IAAiB70B,IAAKhoB,EAAKa,GAAIb,KAAMA,EAAMhD,MAAOA,MArBvD,MA4BE6/C,GAAoDx6C,QAACrC,KAChEA,EAAIhD,MACJA,GAEDqF,EADIpF,EAAKC,EAAAmF,EAAAC,KAEFmwB,gBACJA,EAAeC,mBACfA,EAAkBtrB,KAClBA,GAEEo1C,MAEG7hC,EAAWE,GAAgBxc,YAAS,GACrC42B,EAAaj1B,EAAKuxB,OAASvxB,EAAKuxB,MAAM5yB,OAAS,EAC/Cu2B,EAAkBzC,IAAoBzyB,EAAKa,GAC3Cs0B,EAAUjwB,SAAuB,MAwBvC,OACE5I,gBAACqD,sBACCgH,IAAKwuB,EACLvzB,QAAQ,OACRL,WAAW,SACXD,OAAQtB,EAAK4e,SAAW,cAAgB,UACxC9e,QAASE,EAAK4e,SAAW,GAAM,EAC/Bna,SAAS,YACL03C,GAAkB/0C,IACtBiX,OAASre,EAAK4e,SAA0C,GAA/By9B,GAAuBlqB,MAChD/2B,gBACEuf,IAAc3a,EAAK4e,SAAW,iBAAmB,cAEnD3D,aAlCqBsL,KACvB1L,GAAa,GACToa,GACFvC,EAAmB1yB,EAAKa,KAgCxBqa,aA3BqBsL,KACvB3L,GAAa,IA2BX1Z,QAvBiBulB,IACnBA,EAAEgU,kBACE16B,EAAK4e,WACJqW,GAAcj1B,EAAKmB,SACtBnB,EAAKmB,kBAoBDnE,SAAAA,EAAOgD,KACP/C,GAEH+C,EAAK+B,MACJzF,gBAACqD,sBAAKspB,YAAa,SAAOjsB,SAAAA,EAAO+E,MAC9B/B,EAAK+B,MAIVzF,gBAACqD,QAAK41B,SAAU,GAAIv1B,EAAKsrB,OAExB2J,GACC34B,gBAACqD,sBAAK61B,WAAY,SAAOx4B,SAAAA,EAAOy4B,kBAC9Bn5B,uBACEe,MAAM,OACNsE,OAAO,OACPK,QAAQ,YACRC,KAAK,OACLC,MAAM,8BAEN5F,wBACE6F,EAAE,8DACFF,KAAK,mBAMZizB,GAAmBD,GAClB34B,gBAACogD,IACCnrB,MAAOvxB,EAAKuxB,OAAS,GACrBgC,KAAK,QACLC,MAAM,QACNx2B,MAAOA,MAQJ4/C,GAA0D//C,QAACG,MACtEA,GAEDH,EADII,EAAKC,EAAAL,EAAAM,IAER,OACEb,gBAACqD,sBACCgC,OAAO,MACPvG,gBAAgB,iBAChBkmB,OAAO,eACHtkB,SAAAA,EAAO63B,QACP53B,KAMG6/C,GAQT/zC,QAACgsC,QACHA,EAAOxjB,MACPA,EAAKgC,KACLA,EAAO,SAAQC,MACfA,EAAQ,QAAOx2B,MACfA,GAID+L,EADI9L,EAAKC,EAAA6L,EAAAL,IAER,OACEpM,gBAACqD,sBACC8E,SAAS,WACT7C,QAAQ,sBACJ5E,SAAAA,EAAOM,UACPL,GAEJX,gBAACmgD,IAAoBz/C,MAAOA,GAAQ+3C,GAEpCz4C,gBAACogD,IACCnrB,MAAOA,EACPgC,KAAMA,EACNC,MAAOA,EACPx2B,MAAOA,mFCpNF+/C,GArC8C5gD,QAAC44C,QAC1DA,EAAOxjB,MACPA,EAAKnqB,KACLA,EAAO,KAAIrK,QACXA,EAAU,UAASw2B,KACnBA,EAAO,SAAQC,MACfA,EAAQ,QAAOwpB,YACfA,GAAc,EAAKhgD,MACnBA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,KAEF40B,OAAEA,EAAMC,UAAEA,EAASE,gBAAEA,EAAeC,mBAAEA,GC3BV,SAACsqB,YAAAA,IAAAA,GAAuB,GAC1D,IAAO1qB,EAAQC,GAAal0B,WAAS2+C,IAC9BvqB,EAAiBC,GAAsBr0B,WAAwB,MA2CtE,OAxCAG,YAAU,KACR,IAAMu3B,EAAsBL,KACbA,EAAM4L,eACK3gB,KACrB4gB,GACiB,yBAAhBA,SAAAA,EAAS1gC,KAA0C,4BAAhB0gC,SAAAA,EAAS1gC,MAE/ByxB,IACfC,GAAU,GACVG,EAAmB,QAKjBuD,EAAeA,KACf3D,IACFC,GAAU,GACVG,EAAmB,QAKjBwD,EAAiBR,IACH,WAAdA,EAAM1N,KAAoBsK,IAC5BC,GAAU,GACVG,EAAmB,QAQvB,OAJAyD,SAASC,iBAAiB,YAAaL,GACvCjC,OAAOsC,iBAAiB,SAAUH,GAClCE,SAASC,iBAAiB,UAAWF,GAE9B,KACLC,SAASE,oBAAoB,YAAaN,GAC1CjC,OAAOuC,oBAAoB,SAAUJ,GACrCE,SAASE,oBAAoB,UAAWH,KAEzC,CAAC5D,IAEG,CACLA,OAAAA,EACAC,UAAAA,EACAE,gBAAAA,EACAC,mBAAAA,GDrBAuqB,CAAqBD,GAEvB,OACE1gD,gBAACigD,IACClgD,MAAO,CACLi2B,OAAAA,EACAC,UAAAA,EACAE,gBAAAA,EACAC,mBAAAA,EACAtrB,KAAAA,EACArK,QAAAA,IAGFT,gBAACwgD,kBACC/H,QAASA,EACTxjB,MAAOA,EACPgC,KAAMA,EACNC,MAAOA,EACPx2B,MAAOA,GACHC,MASZ8/C,GAAav8C,QAAUi8C,GACvBM,GAAa36C,QAAUs6C,GACvBK,GAAa19C,KAAOw9C,GACpBE,GAAaxmB,QAAUqmB,GEzDvB,IAAMpiD,GAAcC,GACfA,MAAUC,KAAKC,SAASC,SAAS,IAAIC,UAAU,EAAG,8KCYjDqiD,GAAmBvhD,gBAAoC,CAC3D22B,QAAQ,EACR6qB,SAAUA,OACVC,UAAWA,OACXC,iBAAkBA,OAClB1qB,WAAY,CAAEntB,QAAS,MACvBotB,WAAY,CAAEptB,QAAS,MACvB9F,UAAW,GACXD,UAAW,KAGA69C,GAGRnhD,QAACC,SAAEA,EAAQC,MAAEA,GAAOF,EACvB,OACEG,gBAAC4gD,GAAiB3gD,UAASF,MAAOA,GAC/BD,IAKMmhD,GAAsBA,KACjC,IAAM9gD,EAAUC,aAAWwgD,IAC3B,IAAKzgD,EACH,MAAM,IAAIE,MACR,+DAGJ,OAAOF,oDCTI+gD,GAvBwCrhD,QAACC,SACpDA,EAAQY,MACRA,EAAKygD,UACLA,EAASC,WACTA,GAEDvhD,EADIc,EAAKC,EAAAf,EAAAuB,IAEFigD,EFdyB,SAAHC,OAAIH,UAChCA,EAAY,IAAGC,WACfA,EAAa,gBACuC,GAAEE,GAC/CtrB,EAAQC,GAAal0B,YAAS,GAC/Bw/C,EAAe34C,SAA8B,MAC7C44C,EAAgB54C,SAA8B,MAG9CytB,EAAaztB,SAAuB,MACpC0tB,EAAa1tB,SAAuB,MAGpCxF,EAAYpB,UAAQ,IAAM9D,GAAW,qBAAsB,IAC3DiF,EAAYnB,UAAQ,IAAM9D,GAAW,qBAAsB,IAE3DujD,EAAcl/C,cAAY,KAC1Bg/C,EAAar4C,UACfopC,aAAaiP,EAAar4C,SAC1Bq4C,EAAar4C,QAAU,MAErBs4C,EAAct4C,UAChBopC,aAAakP,EAAct4C,SAC3Bs4C,EAAct4C,QAAU,OAEzB,IAEG23C,EAAWt+C,cAAY,KAC3Bk/C,IACKzrB,IACHurB,EAAar4C,QAAUwhC,WAAW,KAChCzU,GAAU,IACTkrB,KAEJ,CAACnrB,EAAQmrB,EAAWM,IAEjBX,EAAYv+C,cAAY,KAC5Bk/C,IACIzrB,IACFwrB,EAAct4C,QAAUwhC,WAAW,KACjCzU,GAAU,IACTmrB,KAEJ,CAACprB,EAAQorB,EAAYK,IAGlBV,EAAmBx+C,cAAY,KAC/Bi/C,EAAct4C,UAChBopC,aAAakP,EAAct4C,SAC3Bs4C,EAAct4C,QAAU,OAEzB,IAOH,OAJAhH,YAAU,IACD,IAAMu/C,IACZ,CAACA,IAEG,CACLzrB,OAAAA,EACA6qB,SAAAA,EACAC,UAAAA,EACAC,iBAAAA,EACA1qB,WAAAA,EACAC,WAAAA,EACAlzB,UAAAA,EACAD,UAAAA,GEpDqBu+C,CAAkB,CAAEP,UAAAA,EAAWC,WAAAA,IAEtD,OACEphD,gBAACghD,IAAkBjhD,MAAOshD,GACxBrhD,gBAACqD,sBACC8E,SAAS,WACT7C,QAAQ,sBACJ5E,SAAAA,EAAOM,UACPL,GAEHb,KAQTohD,GAAUh9C,QDUuDlB,QAAClD,SAChEA,EAAQY,MACRA,EAAK0D,QACLA,GAAU,GAEXpB,EADIrC,EAAKC,EAAAoC,EAAA5B,KAEFy/C,SAAEA,EAAQC,UAAEA,EAASzqB,WAAEA,EAAUjzB,UAAEA,EAASD,UAAEA,GAClD89C,KAOI38C,EAAYN,OAAAC,QAChBoG,IAAKgsB,EACL1X,aAPuBsL,IAAM42B,IAQ7BjiC,aAPuBsL,IAAM42B,IAQ7BtiB,QAPkBC,IAAMoiB,IAQxBxgB,OAPiByH,IAAMgZ,IAQvBv8C,GAAIpB,EACJw+C,mBAAoBv+C,SACjB1C,SAAAA,EAAOM,UACPL,GAGL,GAAIyD,GAAWN,iBAAehE,GAAW,CAEvC,IAAM+D,EAAQF,WAASwB,KAAKrF,GAC5B,OAAOiE,eAAaF,EAAKG,OAAAC,UAAOK,EAAiBT,EAAMlD,QAIzD,OACEX,gBAACqD,sBAAK8E,SAAS,WAAW7C,QAAQ,gBAAmBhB,GAClDxE,IC5CPohD,GAAUp7C,QDiDuD3B,QAACrE,SAChEA,EAAQY,MACRA,EAAKu2B,KACLA,EAAO,SAAQC,MACfA,EAAQ,SAAQ0qB,WAChBA,EAAa,EACbz4C,MAAO04C,EAAS/iD,gBAChBA,EAAkB,QAAOJ,aACzBA,EAAe,MAAKoc,UACpBA,EAAY,kCAAiC/V,QAC7CA,EAAU,OAAMmY,SAChBA,EAAW,QAAOsf,SAClBA,EAAW,SAEZr4B,EADIxD,EAAKC,EAAAuD,EAAAE,KAEF2xB,OACJA,EAAM+qB,iBACNA,EAAgBD,UAChBA,EAASxqB,WACTA,EAAUD,WACVA,EAAUjzB,UACVA,EAASD,UACTA,GACE89C,KAMEa,EE1EgC,SACtCC,EACA9qB,EACAC,EACA0qB,GAEA,YAJA3qB,IAAAA,EAAa,mBACbC,IAAAA,EAAmB,mBACnB0qB,IAAAA,EAAqB,IAEhBG,EACH,MAAO,CAAE55C,SAAU,WAAY3E,QAAS,EAAGC,cAAe,QAG5D,IAAMsf,EAAwB,CAC5B5a,SAAU,WACVkd,OAAQ,KAIV,OAAQ4R,GACN,IAAK,MACHlU,EAAO3a,OAAS,OAChB2a,EAAOzf,aAAes+C,EACR,UAAV1qB,EACFnU,EAAO9G,KAAO,EACK,WAAVib,GACTnU,EAAO9G,KAAO,MACd8G,EAAOvd,UAAY,oBACA,QAAV0xB,IACTnU,EAAO/G,MAAQ,GAEjB,MACF,IAAK,QACH+G,EAAO9G,KAAO,OACd8G,EAAOmW,WAAa0oB,EACN,UAAV1qB,EACFnU,EAAOza,IAAM,EACM,WAAV4uB,GACTnU,EAAOza,IAAM,MACbya,EAAOvd,UAAY,oBACA,QAAV0xB,IACTnU,EAAO3a,OAAS,GAElB,MACF,IAAK,SACH2a,EAAOza,IAAM,OACbya,EAAOxH,UAAYqmC,EACL,UAAV1qB,EACFnU,EAAO9G,KAAO,EACK,WAAVib,GACTnU,EAAO9G,KAAO,MACd8G,EAAOvd,UAAY,oBACA,QAAV0xB,IACTnU,EAAO/G,MAAQ,GAEjB,MACF,IAAK,OACH+G,EAAO/G,MAAQ,OACf+G,EAAO4J,YAAci1B,EACP,UAAV1qB,EACFnU,EAAOza,IAAM,EACM,WAAV4uB,GACTnU,EAAOza,IAAM,MACbya,EAAOvd,UAAY,oBACA,QAAV0xB,IACTnU,EAAO3a,OAAS,GAKtB,OAAO2a,EFOgBi/B,CG9GvB33C,CAAAA,IAEA,IAAO2uB,EAAMipB,GAAWlgD,WAAyB,MAE3CmgD,EAAa3/C,cAAY,KACzB8H,EAAInB,SACN+4C,EAAQ53C,EAAInB,QAAQyrB,0BAErB,CAACtqB,IAiBJ,OAfA83C,kBAAgB,KACd,GAAK93C,EAAInB,QAQT,OANAg5C,IAGA1qB,OAAOsC,iBAAiB,SAAUooB,GAClC1qB,OAAOsC,iBAAiB,SAAUooB,GAE3B,KACL1qB,OAAOuC,oBAAoB,SAAUmoB,GACrC1qB,OAAOuC,oBAAoB,SAAUmoB,KAEtC,CAAC73C,EAAK63C,IAEFlpB,GHkFaopB,CAAQ/rB,GAK1BY,EACAC,EACA0qB,GAMF,OAAK5rB,EAKHh2B,gBAACqD,sBACCgH,IAAKisB,EACL/xB,GAAInB,EACJ6C,KAAK,4BACY9C,EACjBwb,aAbqBsL,IAAM82B,IAc3BniC,aAbqBsL,IAAM42B,IAc3BhiD,gBAAiBA,EACjBJ,aAAcA,EACdoc,UAAWA,EACX/V,QAASA,EACTmY,SAAUA,EACVsf,SAAUA,EACVnX,OAAQ,IAERlc,MAAKnF,OAAAC,UACA69C,EACAD,UAEDnhD,SAAAA,EAAOM,UACPL,GAEHb,GA1BI,UI9HEuiD,GAAwC,CACnDr7C,GAAI,CACFjC,QAAS,WACTsB,SAAU,QAEZY,GAAI,CACFlC,QAAS,WACTsB,SAAU,QAEZa,GAAI,CACFnC,QAAS,YACTsB,SAAU,SAIDi8C,GAA8C,CACzDzjD,QAAS,CACPC,gBAAiB,cACjBuM,MAAO,kBAETlM,OAAQ,CACNL,gBAAiB,iBACjBuM,MAAO,kBAETrM,QAAS,CACPF,gBAAiB,cACjBC,YAAa,MACbE,YAAa,QACbC,YAAa,iBACbmM,MAAO,mBAIEk3C,GAAsD,CACjEtS,WAAY,CACVvvB,cAAe,OAEjBwvB,SAAU,CACRxvB,cAAe,WAIN8hC,GAAoB,CAC/B1sB,OAAQ,CACNh3B,gBAAiB,iBACjByH,WAAY,QAEdsvB,MAAO,CACL/2B,gBAAiB,kBAEnBwjB,SAAU,CACR9e,QAAS,GACTwB,OAAQ,uEC3BNy9C,GAAiBpjD,gBAAkC,CACvDqjD,aAAc,KACdC,gBAAiBA,OACjBC,WAAY,KACZC,cAAeA,OACfC,WAAYA,KAAM,EAClBC,WAAYA,OACZz3C,YAAa,aACbR,KAAM,KACNrK,QAAS,YAIEuiD,GAAoBA,IAAM5iD,aAAWqiD,IAGrCQ,GAGRpjD,QAACE,MAAEA,EAAKD,SAAEA,GAAUD,EACvB,OACEG,gBAACyiD,GAAexiD,UAASF,MAAOA,GAAQD,IAK/BojD,GAA0ClgD,QAAClD,SACtDA,EAAQwL,YACRA,EAAc,aAAYR,KAC1BA,EAAO,KAAIrK,QACXA,EAAU,UAASC,MACnBA,GAEDsC,EADIrC,EAAKC,EAAAoC,EAAA5B,IAIR,OACEpB,gBAHgC,eAAhBsL,EAA+BlG,aAAatE,0BAI1DmF,KAAK,6BACaqF,GACdi3C,GAAoBj3C,GACpBg3C,GAAgB7hD,SAChBC,SAAAA,EAAOM,UACPL,GAEHb,IAMMqjD,GAA0Ch/C,QAACrE,SACtDA,EAAQyE,GACRA,EAAE+d,SACFA,GAAW,EAAK5hB,MAChBA,GACDyD,GACOmH,YAAEA,GAAgB03C,KAGxB,OACEhjD,gBAHgC,eAAhBsL,EAA+BlG,aAAatE,0BAI1DmF,KAAK,OACLkC,SAAS,WACT3E,QAAS8e,EAAW,GAAM,EAC1B7e,cAAe6e,EAAW,OAAS,cAC/B5hB,SAAAA,EAAO43B,MAEVt4B,EAAM2D,SAASC,IAAI9D,EAAW+D,GACzB7D,EAAM8D,eAAeD,GAEhB7D,EAAM+D,aAAaF,EAAKG,OAAAC,UAC1BJ,EAAMlD,OACTyiD,OAAQ7+C,KAGLV,KAOFw/C,GAAgDt9C,QAACjG,SAC5DA,EAAQsjD,OACRA,EAAM9gC,SACNA,GAAW,EAAK5hB,MAChBA,GACDqF,GACO28C,aAAEA,EAAYC,gBAAEA,EAAeI,WAAEA,EAAUD,WAAEA,EAAUh4C,KAAEA,GAC7Dk4C,KAEI/8B,EAAWy8B,IAAiBU,EAC5BptB,EAAS8sB,EAAWM,GAS1B,OACEpjD,gBAACqD,sBACCkB,GAAG,kBACH0B,KAAK,2BACS,uBACC+vB,EACfgW,WAAW,OACX1mC,QAAQ,OACRL,WAAW,SACXC,eAAe,iBACXm9C,GAAav3C,GACZmb,EAAWu8B,GAAkB1sB,OAAS,GACtCxT,EAAWkgC,GAAkBlgC,SAAW,IAC7CP,OAASO,EAAqC,GAA1BkgC,GAAkB3sB,MACtChxB,QArBgBC,KACdwd,IAEJqgC,EAAgBS,GAChBL,EAAWK,YAkBL1iD,SAAAA,EAAO+3C,SAEV34C,IAMMwjD,GAAgD/iD,QAACT,SAC5DA,EAAQsjD,OACRA,EAAM1iD,MACNA,GACDH,GACOuiD,WAAEA,EAAUx3C,YAAEA,GAAgB03C,KAIpC,OAFeF,EAAWM,GAOxBpjD,gBAACqD,sBACCkB,GAAG,kBACH0B,KAAK,OACLkC,SAAS,WACTkd,OAAQ,IACRnI,SAAS,QACTpe,gBAAgB,cAChBJ,aAAc,EACdoc,UAAU,kCACVvX,SAAS,UDpHb+H,CAAAA,GAEoB,eAAhBA,EACK,CACLhD,IAAK,OACL2T,KAAM,GAIH,CACL3T,IAAK,EACL2T,KAAM,QC0GAsnC,CAA0Bj4C,SAC1B5K,SAAAA,EAAOqa,SAEVjb,GAjBI,MAuBE0jD,GAA0C/2C,QAAC3M,SACtDA,EAAQ2F,KAERA,EAAI6c,SACJA,GAAW,EAAKzd,QAChBA,EAAOnE,MACPA,GACD+L,GACO3B,KAAEA,GAASk4C,KAOjB,OACEhjD,gBAACqD,sBACC4C,KAAK,WACLjB,OAAQsd,EAAW,cAAgB,UACnC0pB,WAAW,OACX1mC,QAAQ,OACRL,WAAW,SACXzB,QAAS8e,EAAW,GAAM,GACtB+/B,GAAav3C,IACjBiX,OAASO,EAAqC,GAA1BkgC,GAAkB3sB,MACtChxB,QAfgBC,MACdwd,GAAazd,GACjBA,YAcMnE,SAAAA,EAAOgD,MAEV+B,GACCzF,gBAACqD,sBAAKspB,YAAa,SAAOjsB,SAAAA,EAAO+E,MAC9BA,GAGJ3F,IAMM2jD,GAAoD52C,QAACnM,MAChEA,GACDmM,EACC,OACE7M,gBAACqD,sBACC4C,KAAK,YACLZ,OAAO,MACPvG,gBAAgB,iBAChBkmB,OAAO,eACHtkB,SAAAA,EAAOy5B,aAMJupB,GAQTt2C,QAAC6nB,MAAEA,EAAK3pB,YAAEA,EAAWR,KAAEA,EAAIrK,QAAEA,EAAOC,MAAEA,GAA+B0M,EACvE,OACEpN,gBAACkjD,IACC53C,YAAaA,EACbR,KAAMA,EACNrK,QAASA,EACTC,MAAOA,GAENu0B,EAAMrxB,IAAKF,GACV1D,gBAACmjD,IACCz3B,IAAKhoB,EAAKa,GACVA,GAAIb,EAAKa,GACT+d,SAAU5e,EAAK4e,SACf5hB,MAAOA,GAEPV,gBAACqjD,IAAeD,OAAQ1/C,EAAKa,GAAI7D,MAAOA,GACrCgD,EAAK+B,MACJzF,gBAACqD,sBAAKspB,YAAa,SAAOjsB,SAAAA,EAAO+E,MAC9B/B,EAAK+B,MAGT/B,EAAKsrB,OAGPtrB,EAAKuxB,OAASvxB,EAAKuxB,MAAM5yB,OAAS,GACjCrC,gBAACsjD,IAAeF,OAAQ1/C,EAAKa,GAAI7D,MAAOA,GACrCgD,EAAKuxB,MAAMrxB,IAAI,CAAC20C,EAASjvB,IACpBivB,EAAQpe,UAERn6B,gBAACyjD,IACC/3B,iBAAkBpC,EAClB5oB,MAAOA,IAMXV,gBAACwjD,IACC93B,IAAK6sB,EAAQh0C,GACbA,GAAIg0C,EAAQh0C,GACZkB,KAAM8yC,EAAQ9yC,KACd6c,SAAUi2B,EAAQj2B,SAClBzd,QAAS0zC,EAAQ1zC,QACjBnE,MAAOA,GAEN63C,EAAQvpB,2GCvOhB20B,GA7CoC9jD,QAACo1B,MAChDA,EAAK3pB,YACLA,EAAc,aAAYR,KAC1BA,EAAO,KAAIrK,QACXA,EAAU,UAASmjD,oBACnBA,EAAsB,KAAIC,kBAC1BA,EAAoB,KAAInjD,MACxBA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,KAEFshD,aACJA,EAAYC,gBACZA,EAAeC,WACfA,EAAUC,cACVA,EAAaC,WACbA,EAAUC,WACVA,GC/B2B,SAC7Ba,EACAC,YADAD,IAAAA,EAAqC,eACrCC,IAAAA,EAAmC,MAEnC,IAAOnB,EAAcC,GAAmB5gD,WACtC6hD,IAEKhB,EAAYC,GAAiB9gD,WAClC8hD,GA0CF,OA5BA3hD,YAAU,KACR,IAAMu3B,EAAsBL,KACbA,EAAM4L,eACK3gB,KACrB4gB,GACiB,2BAAhBA,SAAAA,EAAS1gC,KAA4C,2BAAhB0gC,SAAAA,EAAS1gC,MAElB,OAAfq+C,GACfC,EAAc,OAKZjpB,EAAiBR,IACH,WAAdA,EAAM1N,KAAmC,OAAfk3B,GAC5BC,EAAc,OAOlB,OAHAhpB,SAASC,iBAAiB,YAAaL,GACvCI,SAASC,iBAAiB,UAAWF,GAE9B,KACLC,SAASE,oBAAoB,YAAaN,GAC1CI,SAASE,oBAAoB,UAAWH,KAEzC,CAACgpB,IAEG,CACLF,aAAAA,EACAC,gBAAAA,EACAC,WAAAA,EACAC,cAAAA,EACAC,WA5CkBM,GACXR,IAAeQ,EA4CtBL,WAzCkBK,IAClBP,EAAeiB,GACNA,IAAmBV,EAAS,KAAOA,KDe1CW,CAAgBH,EAAqBC,GAEzC,OACE7jD,gBAACijD,IACCljD,MAAO,CACL2iD,aAAAA,EACAC,gBAAAA,EACAC,WAAAA,EACAC,cAAAA,EACAC,WAAAA,EACAC,WAAAA,EACAz3C,YAAAA,EACAR,KAAAA,EACArK,QAAAA,IAGFT,gBAAC0jD,kBACCzuB,MAAOA,EACP3pB,YAAaA,EACbR,KAAMA,EACNrK,QAASA,EACTC,MAAOA,GACHC,MASZgjD,GAAQK,KAAOd,GACfS,GAAQM,KAAOd,GACfQ,GAAQz/C,QAAUm/C,GAClBM,GAAQ79C,QAAUw9C,GAClBK,GAAQ5gD,KAAOygD,GACfG,GAAQzpB,UAAYupB,OEnEPS,GAA2C,CACtDl9C,GAAI,CACFX,SAAU,OACVtB,QAAS,UACTmY,SAAU,OACV7X,OAAQ,QAEV4B,GAAI,CACFZ,SAAU,OACVtB,QAAS,WACTmY,SAAU,OACV7X,OAAQ,QAEV6B,GAAI,CACFb,SAAU,OACVtB,QAAS,WACTmY,SAAU,OACV7X,OAAQ,SAIC8+C,GAAiD,CAC5DtlD,QAAS,CACPC,gBAAiB,cACjBuM,MAAO,iBACP0W,OAAQ,CACNjjB,gBAAiB,mBAGrBK,OAAQ,CACNL,gBAAiB,iBACjBuM,MAAO,iBACP0W,OAAQ,CACNjjB,gBAAiB,mBAGrBE,QAAS,CACPF,gBAAiB,cACjBC,YAAa,MACbE,YAAa,QACbC,YAAa,iBACbmM,MAAO,iBACP0W,OAAQ,CACNjjB,gBAAiB,oBAKVslD,GAA6C,CACxDzlD,QAAS,CACPD,aAAc,OAEhB2lD,OAAQ,CACN3lD,aAAc,OAEhB4lD,SAAU,CACR5lD,aAAc,QAIL6lD,GAAoC,CAC/CzlD,gBAAiB,iBACjBuM,MAAO,cACP0W,OAAQ,CACNjjB,gBAAiB,mBAIR0lD,GAAkC,CAC7ChhD,QAAS,GACTwB,OAAQ,cACR+c,OAAQ,CACNjjB,gBAAiB,mPC7DR2lD,GAA4C5kD,QAAC6kD,YACxDA,EAAWC,WACXA,EAAUC,aACVA,EAAYC,SACZA,EAAW,GAAEC,gBACbA,EAAkB,CAChB,CAAE91B,MAAO,YAAajvB,MAAO,IAC7B,CAAEivB,MAAO,YAAajvB,MAAO,IAC7B,CAAEivB,MAAO,YAAajvB,MAAO,IAC7B,CAAEivB,MAAO,aAAcjvB,MAAO,MAC/BglD,iBACDA,EAAgBC,qBAChBA,GAAuB,EAAKC,aAC5BA,GAAe,EAAIC,eACnBA,EAAiB,EAACC,qBAClBA,GAAuB,EAAKr6C,KAC5BA,EAAO,KAAIrK,QACXA,EAAU,UAASD,MACnBA,EAAQ,UAAS4kD,mBACjBA,EAAkB1kD,MAClBA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,IAEFikD,EAAoBC,IACpBA,EAAO,GAAKA,EAAOX,GAAcW,IAASZ,GAG9CE,EAAaU,IAiDf,OACEtlD,gBAACoF,4BAAWH,WAAW,SAASmW,IAAK,SAAO1a,SAAAA,EAAOM,UAAeL,GAE/DwkD,GACCnlD,gBAACqD,sBACC6E,GAAG,SACH5C,QAAQ,OACRL,WAAW,SACXC,eAAe,SACfF,OAAwB,IAAhB0/C,EAAoB,cAAgB,WACxCR,GAAgBp5C,GAChBq5C,GAAmB1jD,GACnB2jD,GAAiB5jD,GACA,IAAhBkkD,EAAoBF,GAAuB,IAChD3/C,QAASA,IAAMwgD,EAAiB,gBACrB,aACX/iC,SAA0B,IAAhBoiC,SACNhkD,SAAAA,EAAO6kD,kBAEXvlD,gBAACkM,IAAYZ,YAAY,OAAOF,YAAa,KAC7CpL,gBAACkM,IAAYZ,YAAY,OAAOF,YAAa,GAAI8tB,WAAW,UAKhEl5B,gBAACqD,sBACC6E,GAAG,SACH5C,QAAQ,OACRL,WAAW,SACXC,eAAe,SACfF,OAAwB,IAAhB0/C,EAAoB,cAAgB,WACxCR,GAAgBp5C,GAChBq5C,GAAmB1jD,GACnB2jD,GAAiB5jD,GACA,IAAhBkkD,EAAoBF,GAAuB,IAChD3/C,QAASA,IAAMwgD,EAAiBX,EAAc,gBACnC,gBACXpiC,SAA0B,IAAhBoiC,SACNhkD,SAAAA,EAAO6kD,kBAEXvlD,gBAACkM,IAAYZ,YAAY,OAAOF,YAAa,MAI9Cg6C,EAAmBxhD,IAAI,CAAC4hD,EAAoBl8B,IApFxBm8B,EAACD,EAA6Bl8B,KACrD,GAAmB,QAAfk8B,EACF,OACExlD,gBAACqD,sBACCqoB,gBAAiBpC,EACjBhkB,QAAQ,OACRL,WAAW,SACXC,eAAe,UACXg/C,GAAgBp5C,SAChBpK,SAAAA,EAAOglD,iBAOjB,IAAMC,EAAgBH,IAAed,EAErC,OACE1kD,gBAACqD,sBACCqoB,YAAa85B,EACbt9C,GAAG,SACH5C,QAAQ,OACRL,WAAW,SACXC,eAAe,SACfF,OAAQ2gD,EAAgB,UAAY,WAChCzB,GAAgBp5C,GAChBq5C,GAAmB1jD,GACnB2jD,GAAiB5jD,GAChBmlD,EAAgBpB,GAAyB,IAC9C1/C,QAASA,IAAMwgD,EAAiBG,wBACZA,iBACNG,EAAgB,YAASnkD,GAClCmkD,QAAgBjlD,SAAAA,EAAOklD,uBAAmBllD,SAAAA,EAAOmlD,YAErDL,IAkDDC,CAAiBD,EAAYl8B,IAI/BtpB,gBAACqD,sBACC6E,GAAG,SACH5C,QAAQ,OACRL,WAAW,SACXC,eAAe,SACfF,OAAQ0/C,IAAgBC,EAAa,cAAgB,WACjDT,GAAgBp5C,GAChBq5C,GAAmB1jD,GACnB2jD,GAAiB5jD,GAChBkkD,IAAgBC,EAAaH,GAAuB,IACzD3/C,QAASA,IAAMwgD,EAAiBX,EAAc,gBACnC,YACXpiC,SAAUoiC,IAAgBC,SACtBjkD,SAAAA,EAAO6kD,kBAEXvlD,gBAACkM,IAAYZ,YAAY,QAAQF,YAAa,MAI/C+5C,GACCnlD,gBAACqD,sBACC6E,GAAG,SACH5C,QAAQ,OACRL,WAAW,SACXC,eAAe,SACfF,OAAQ0/C,IAAgBC,EAAa,cAAgB,WACjDT,GAAgBp5C,GAChBq5C,GAAmB1jD,GACnB2jD,GAAiB5jD,GAChBkkD,IAAgBC,EAAaH,GAAuB,IACzD3/C,QAASA,IAAMwgD,EAAiBV,gBACrB,YACXriC,SAAUoiC,IAAgBC,SACtBjkD,SAAAA,EAAO6kD,kBAEXvlD,gBAACkM,IAAYZ,YAAY,QAAQF,YAAa,KAC9CpL,gBAACkM,IAAYZ,YAAY,QAAQF,YAAa,GAAI8tB,WAAW,UAKhE+rB,GACCjlD,gBAACkL,iBAAKguB,WAAY,GAAI7tB,MAAM,wBAAqB3K,SAAAA,EAAOolD,kBAChDpB,SAAiBC,GAK1BK,GAAwBD,GACvB/kD,gBAACqD,sBACC6E,GAAG,SACHgxB,WAAY,GACZn0B,QAAQ,UACRrG,aAAa,MACbK,YAAY,MACZE,YAAY,QACZC,YAAY,iBACZJ,gBAAgB,cAChBkG,OAAO,UACPjF,MAAO8kD,EACPr9B,SA3JsB4C,IACxB26B,GACFA,EAAiBgB,OAAO37B,EAAE1L,OAAO3e,gBA0JzBW,SAAAA,EAAOslD,kBAEVlB,EAAgBlhD,IAAK64B,GACpBz8B,0BAAQ0rB,IAAK+Q,EAAO18B,MAAOA,MAAO08B,EAAO18B,OACtC08B,EAAOzN,yNCpKTi3B,GAVgB3mC,CAAAA,IACpB,CACL4mC,MAAO,QACPC,OAAQ,SACR3lC,OAAQ,WAMqB4lC,GAMpBC,GAAkD,CAC7D9+C,KAAM,MACNG,OAAQ,MACR4+C,MAAO,OAMIC,GACA,CACThhD,WAAY,iBAFHghD,GAIJ,CACLlgD,SAAU,OACVgF,MAAO,iBACPuxB,kBAAmB,MACnBr3B,WAAY,qHC5CHihD,GAA0C3mD,QAACyL,YACtDA,EAAc,aAAY7K,QAC1BA,EAAU,QAAOgmD,UACjBA,EAAY,OAAMp7C,MAClBA,EAAKq7C,QACLA,EAAU,MAAK13B,MACfA,EAAK23B,WACLA,GAAa,EAAKjmD,MAClBA,GAGDb,EADIc,EAAKC,EAAAf,EAAAuB,IAKFwlD,GAFgBj7C,aAECN,GAAS,kBAC1BpM,EAAcgnD,GAAkBxlD,GAChC1B,EAAcsnD,GAAqBI,GAGnCI,EAAYF,EACd,CAAEG,cAAe,QACjB,CAAE7gD,KAAM,YAAa8gD,mBAAoBz7C,GAG7C,OAAI0jB,GAAyB,eAAhB1jB,EAETtL,gBAACoF,4BACCH,WAAW,SACXC,eAAe,SACfnE,MAAM,OACNgE,QAAS2hD,GACLG,EACAlmD,GAEJX,gBAACqD,sBACCgC,OAAO,MACP4zB,SAAU,EACVtV,eAAgB5kB,EAChB6kB,eAAgB3kB,EAChB4kB,eAAgB+iC,GACZL,SACA7lD,SAAAA,EAAOM,YAEbhB,gBAACkL,mBAASq7C,SAAkC7lD,SAAAA,EAAOsuB,OAChDA,GAEHhvB,gBAACqD,sBACCgC,OAAO,MACP4zB,SAAU,EACVtV,eAAgB5kB,EAChB6kB,eAAgB3kB,EAChB4kB,eAAgB+iC,GACZL,SACA7lD,SAAAA,EAAOM,aASfhB,gBAACqD,qBAFe,eAAhBiI,GAGEjG,OAAO,MACPtE,MAAM,OACN4iB,eAAgB5kB,EAChB6kB,eAAgB3kB,EAChB4kB,eAAgB+iC,EAChB7hD,QAAS2hD,IAYX3lD,MAAM,MACNsE,OAAO,OACP+xC,gBAAiBr4C,EACjBs4C,gBAAiBp4C,EACjBq4C,gBAAiBsP,EACjB7hD,QAAS2hD,GAhBHH,GACAM,QACAnmD,SAAAA,EAAOM,UACPL,KCrFNqmD,GAAgDrmD,GAC7CX,gBAACwmD,oBAAkB7lD,IAGfu5B,GAAY8sB,GAEZ/sB,GAAU+sB,GCWVC,GAGT,CACFjgD,GAAI,CACFkgD,cAAe,QACfC,eAAgB,QAElBlgD,GAAI,CACFigD,cAAe,QACfC,eAAgB,QAElBjgD,GAAI,CACFggD,cAAe,QACfC,eAAgB,QAElBhgD,GAAI,CACF+/C,cAAe,QACfC,eAAgB,SAgDPC,GAzCc9nC,CAAAA,IAClB,CACLzgB,QAAS,CACPC,gBAAiB,cACjBuM,MAAO,iBAEP9F,WAAY,iBAEdpG,OAAQ,CACNL,gBAAiB,iBACjBuM,MAAO,iBAEP9F,WAAY,iBAEdvG,QAAS,CACPF,gBAAiB,cACjBC,YAAa,MACbE,YAAa,QACbC,YAAa,iBACbmM,MAAO,iBAEP9F,WAAY,iBAEd8hD,OAAQ,CACNvoD,gBAAiB,gBACjBuM,MAAO,iBAEP9F,WAAY,iBAEdkf,SAAU,CACR3lB,gBAAiB,cACjBgc,UAAW,iCACXzP,MAAO,iBAEP9F,WAAY,mBAOa+hD,GAKlBC,GAAgD,CAC3DtrC,KAAM,CACJA,KAAM,EACNurC,iBAAkB,MAClBC,iBAAkB,QAClBC,iBAAkB,kBAEpB1rC,MAAO,CACLA,MAAO,EACPo7B,gBAAiB,MACjBC,gBAAiB,QACjBC,gBAAiB,mBAORqQ,GAAkD,CAC7DnsB,KAAM,GACNosB,IAAK,CACH9sC,UAAW,0DAEbpT,OAAQ,CACNoT,UAAW,0DAEb+sC,KAAM,CACJ/sC,UAAW,6DAOFgtC,GAAuD,CAClE5oC,KAAM,uCACNzX,OAAQ,uCACR0X,KAAM,uCACN4oC,OACE,+ZC/GEC,GAAiB3oD,gBAAkC,CACvD6D,YAAY,EACZ+kD,eAAgBA,OAChBC,OAAQA,OACRC,SAAUA,OACVhgD,SAAU,OACV2C,KAAM,KACNrK,QAAS,YAIE2nD,GAAoBA,IAAMhoD,aAAW4nD,IAGrCK,GAGRxoD,QAACE,MAAEA,EAAKD,SAAEA,GAAUD,EACvB,OACEG,gBAACgoD,GAAe/nD,UAASF,MAAOA,GAAQD,IA2I/BwoD,GAAsC/nD,QAACT,SAClDA,EAAQqI,SACRA,EAAW,OAAM2C,KACjBA,EAAO,KAAIrK,QACXA,EAAU,UAAS8nD,MACnBA,GAAQ,EAAKC,YACbA,GAAc,EAAItB,cAElBA,EAAaC,eACbA,EAAcsB,mBAEdA,EAAqB,UAAStS,UAC9BA,EAAY,OAAMuS,iBAClBA,EAAmB,SAAQj1B,UAC3BA,EAAY,qBAAoBvwB,WAChCA,EAAUylD,SACVA,EAAQR,SAGRA,EAAQznD,MACRA,GAGDH,EADII,EAAKC,EAAAL,EAAAM,IAGF+nD,EAAa3B,GAAan8C,GAC1B/J,EAAQmC,EACVgkD,GAAiB0B,EAAW1B,cAC5BC,GAAkByB,EAAWzB,eAG3BljB,GAAa0kB,GAAaA,GAAmC,SAAvBF,EAGtCI,EACJN,GAAUI,GAAmC,YAAvBF,EAClB,QACA,WAMN,OACEzoD,gCAHAwoD,GAAeG,GAAYzlD,GAAqC,YAAvBulD,GAMrCzoD,gBAACqD,sBACC8E,SAAS,QACTG,IAAK,EACL2T,KAAM,EACNlb,MAAM,QACNsE,OAAO,QACPvG,gBAAgB,uBAChBumB,OAAQ,IACRxgB,QAASsjD,SACLznD,SAAAA,EAAOooD,WAKd7kB,GACCjkC,gBAACc,0BACCqH,SAAU0gD,EACVvgD,IAAK,EACLjD,OAAO,QACPtE,MAAOA,EACPskB,OAAQ,IACR9f,WAAYuiD,GAAmBY,GAC/BljD,UACEmjD,GAAmC,YAAvBF,IAAqCvlD,iBAClB,SAAbiF,EAAsB,QAAU,YAC9C,gBAENlC,KAAK,0BACOwtB,GACR2zB,GAAgB3mD,GAChB8mD,GAAiBp/C,GACjBw/C,GAAkBxR,SAClBz1C,SAAAA,EAAOM,UACPL,GAEHX,EAAM2D,SAASC,IAAI9D,EAAW+D,GACtBA,sNC9LNklD,GA3DoClpD,QAACC,SAChDA,EAAQqI,SACRA,EAAW,OAAM2C,KACjBA,EAAO,KAAIrK,QACXA,EAAU,UAASuoD,gBACnBA,GAAkB,EAAIC,SACtBA,EAAQC,iBACRA,EAAgBX,MAChBA,GAAQ,EAAKC,YACbA,GAAc,EAAIW,iBAClBA,GAAmB,EAAIjC,cACvBA,EAAaC,eACbA,EAAciC,WACdA,EAAa,IAAGX,mBAChBA,EAAqB,UAAS/nD,MAC9BA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,KAEF8B,WAAEA,EAAU+kD,eAAEA,EAAcC,OAAEA,EAAMC,SAAEA,EAAQQ,SAAEA,GC/BzB,SAC7BK,EACAC,EACAC,EACAE,YAHAJ,IAAAA,GAA2B,GAK3B,IAAO9lD,EAAYmmD,GAAiBtnD,gBACrBP,IAAbynD,EAAyBA,EAAWD,IAE/BL,EAAUW,GAAevnD,aAC9BqnD,GAAa5xB,OAAOC,WAAa2xB,GAqDnC,OAjDAlnD,YAAU,UACSV,IAAbynD,GACFI,EAAcJ,IAEf,CAACA,IAGJ/mD,YAAU,KACR,GAAKknD,EAAL,CAEA,IAAMzvB,EAAeA,KACnB,IAAM4vB,EAAc/xB,OAAOC,WAAa2xB,EACxCE,EAAYC,IAMd,OAHA/xB,OAAOsC,iBAAiB,SAAUH,GAClCA,IAEO,KACLnC,OAAOuC,oBAAoB,SAAUJ,MAEtC,CAACyvB,IA4BG,CACLlmD,WAAAA,EACA+kD,eA5BqBA,KACrB,IAAMuB,GAAetmD,EACrBmmD,EAAcG,GACVN,GACFA,EAAiBM,IAyBnBtB,OArBaA,KACRhlD,IACHmmD,GAAc,GACVH,GACFA,GAAiB,KAkBrBf,SAbeA,KACXjlD,IACFmmD,GAAc,GACVH,GACFA,GAAiB,KAUrBP,SAAAA,GDpCAc,CAAgBT,EAAiBC,EAAUC,EAAkBE,GAE/D,OACEppD,gBAACqoD,IACCtoD,MAAO,CACLmD,WAAAA,EACA+kD,eAAAA,EACAC,OAAAA,EACAC,SAAAA,EACAhgD,SAAAA,EACA2C,KAAAA,EACArK,QAAAA,EACAC,MAAAA,IAGFV,gBAACsoD,kBACCngD,SAAUA,EACV2C,KAAMA,EACNrK,QAASA,EACT8nD,MAAOA,EACPC,YAAaA,EACbW,iBAAkBA,EAClBjC,cAAeA,EACfC,eAAgBA,EAChBiC,WAAYA,EACZX,mBAAoBA,EACpBvlD,WAAYA,EACZylD,SAAUA,EACVV,eAAgBA,EAChBC,OAAQA,EACRC,SAAUA,EACVznD,MAAOA,GACHC,GAEHb,KASTipD,GAAQnkC,OD9BmD5hB,QAAClD,SAC1DA,EAAQqpD,iBACRA,GAAmB,EAAIzoD,MACvBA,GAEDsC,EADIrC,EAAKC,EAAAoC,EAAA5B,KAEF8B,WAAEA,EAAU+kD,eAAEA,EAAc9/C,SAAEA,GAAaigD,KAEjD,OACEpoD,gBAACoF,4BACCrE,MAAM,OACNgE,QAAQ,OACRme,kBAAkB,MAClBC,kBAAkB,QAClBC,kBAAkB,iBAClBne,WAAW,SACXC,eAAe,uBACXxE,SAAAA,EAAO4iB,OACP3iB,GAEHuC,EACClD,gBAACoF,cACCrE,MAAM,OACNkE,WAAW,SACXC,eAAe,iBAEdpF,EACAqpD,GACCnpD,gBAACqD,sBACC6E,GAAG,SACH5C,QAAQ,OACRL,WAAW,SACXC,eAAe,SACfnE,MAAM,OACNsE,OAAO,OACP3G,aAAa,MACbI,gBAAgB,cAChBkG,OAAO,UACP+c,OAAQ,CAAEjjB,gBAAiB,kBAC3B+F,QAASojD,eACG/kD,EAAa,mBAAqB,wBAC1CxC,SAAAA,EAAOgpD,cAEX1pD,gBAACkM,kBACCZ,YAA0B,SAAbnD,EAAsB,OAAS,QAC5CiD,YAAa,UACT1K,SAAAA,EAAOipD,qBAMnB3pD,gBAACqD,QACCtC,MAAM,OACNuE,QAAQ,OACRL,WAAW,SACXC,eAAe,UAEdikD,GACCnpD,gBAACqD,sBACC6E,GAAG,SACH5C,QAAQ,OACRL,WAAW,SACXC,eAAe,SACfnE,MAAM,OACNsE,OAAO,OACP3G,aAAa,MACbI,gBAAgB,cAChBkG,OAAO,UACP+c,OAAQ,CAAEjjB,gBAAiB,kBAC3B+F,QAASojD,eACG/kD,EAAa,mBAAqB,wBAC1CxC,SAAAA,EAAOgpD,cAEX1pD,gBAACkM,kBACCZ,YAA0B,SAAbnD,EAAsB,QAAU,OAC7CiD,YAAa,UACT1K,SAAAA,EAAOipD,uBC9C3BZ,GAAQjjD,QDyDqD3B,QAACrE,SAC5DA,EAAQY,MACRA,GAEDyD,EADIxD,EAAKC,EAAAuD,EAAAE,KAEFnB,WAAEA,GAAeklD,KAEvB,OACEpoD,gBAACqD,sBACCsiB,KAAK,IACL5kB,MAAM,OACN68B,UAAU,OACVgsB,UAAU,SACV7kD,QAAS7B,EAAa,OAAS,aAC3BxC,SAAAA,EAAOqa,QACPpa,GAEHb,ICzEPipD,GAAQlkC,OD+EmD9e,QAACjG,SAC1DA,EAAQY,MACRA,GAEDqF,EADIpF,EAAKC,EAAAmF,EAAAC,KAEF9C,WAAEA,GAAeklD,KAEvB,OACEpoD,gBAACqD,sBACCtC,MAAM,OACNgE,QAAQ,OACR4e,eAAe,MACfC,eAAe,QACfC,eAAe,wBACXnjB,SAAAA,EAAOojB,OACPnjB,GAEHuC,EAAapD,EAAW,OC7F/BipD,GAAQ3oD,WAAagoD,GE9ErB,ICDayB,GAAwD,CACnE5Z,WAAY,CACVvvB,cAAe,OAEjBwvB,SAAU,CACRxvB,cAAe,WA4DNopC,GAlCaxqC,CAAAA,IACjB,CACLzgB,QAAS,CACPC,gBAAiB,cACjBijB,OAAQ,CACNjjB,gBAAiB,kBAEnBmjB,QAAS,CACPnjB,gBAAiB,mBAGrBuoD,OAAQ,CACNvoD,gBAAiB,cACjBijB,OAAQ,CACNjjB,gBAAiB,kBAEnBmjB,QAAS,CACPnjB,gBAAiB,mBAGrBirD,UAAW,CACTjrD,gBAAiB,iBACjBijB,OAAQ,CACNjjB,gBAAiB,kBAEnBmjB,QAAS,CACPnjB,gBAAiB,qBAQKkrD,GAEjBC,GACC,CACVlpD,MAAO,MACPsE,OAAQ,OACRvG,gBAAiB,iBACjBkmB,OAAQ,SALCilC,GAOD,CACRlpD,MAAO,OACPsE,OAAQ,MACRvG,gBAAiB,iBACjBkmB,OAAQ,oWC/DNklC,GAAmB7qD,gBAAoC,CAC3DiM,YAAa,aACbR,KAAM,KACNrK,QAAS,UACT0pD,YAAY,EACZC,cAAeA,OACfC,cAAeA,OACfC,gBAAiBA,OACjBC,aAAcA,IAAM,EACpBC,aAAcA,OACdC,iBAAkBA,KAAM,EACxBC,oBAAqBA,OACrBC,YAAaA,OACbC,SAAUA,OACVC,UAAWA,SAIAC,GAAsBA,IAAM1qD,aAAW8pD,IAGvCa,GAGRlrD,QAACE,MAAEA,EAAKD,SAAEA,GAAUD,EACvB,OACEG,gBAACkqD,GAAiBjqD,UAASF,MAAOA,GAC/BD,IA6RMkrD,GAITjlD,QAACjG,SACHA,EAAQwL,YACRA,EAAc,aAAYR,KAC1BA,EAAO,KAAIrK,QACXA,EAAU,UAASf,YAInBA,GAAc,EAAKiJ,aACnBA,EAAYjI,MAEZA,GAEDqF,EADIpF,EAAKC,EAAAmF,EAAAC,IAIR,OACEhG,gBAHgC,eAAhBsL,EAA+BlG,aAAatE,0BAI1DuJ,IAAK1B,EACL5H,MAAM,OACNsE,OAAO,OACP8C,SAAS,WACT5E,SAAS,UACLsmD,GAAsBv+C,SACtB5K,SAAAA,EAAOM,UACPL,GAEHb,sKC5QMmrD,GAhFwCprD,QAACC,SACpDA,EAAQwL,YACRA,EAAc,aAAYR,KAC1BA,EAAO,KAAIrK,QACXA,EAAU,UAASyqD,aACnBA,EAAYC,cACZA,EAAaC,QACbA,EAAU,GAAEC,QACZA,EAAO3rD,YACPA,GAAc,EAAK4rD,WACnBA,EAAUC,QACVA,EAAOC,iBACPA,EAAmB,GAAE9qD,MACrBA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,KAEF+oD,WACJA,EAAUC,cACVA,EAAazhD,aACbA,EAAY0hD,cACZA,EAAaC,gBACbA,EAAeC,aACfA,EAAYC,aACZA,EAAYC,iBACZA,EAAgBC,oBAChBA,EAAmBC,YACnBA,EAAWC,SACXA,EAAQC,UACRA,GHnB6B,SAC/Bv/C,EACA4/C,EACAC,EACAM,EACAC,EACAhsD,EACA4rD,EACAC,EACAC,YALAC,IAAAA,EAAyB,aACzBC,IAAAA,EAAyBC,mBACzBjsD,IAAAA,GAAuB,YAGvB8rD,IAAAA,EAA2B,IAE3B,IAAOrB,EAAYC,GAAiBroD,YAAS,IACtC6pD,EAAQC,GAAa9pD,WAAsB,IAC5C4G,EAAeC,SAAuB,MACtCkjD,EAAkBljD,SAAsB,MACxCmjD,EAAmBnjD,SAAe,GAClCojD,EAAgBpjD,SAAiB,IACjCqjD,EAAarjD,SACjB2iD,IAA8B,oBAAX/zB,QAnCrB00B,QAAU3nD,IACR,IACE,OAAO4nD,aAAaD,qBAAqB3nD,GACzC,MAAO6lB,GAEP,OADAjoB,QAAQC,KAAK,iCAAkCgoB,GACxC,OAGXgiC,QAASA,CAAC7nD,EAAYxE,KACpB,IACEosD,aAAaC,qBAAqB7nD,EAAMxE,GACxC,MAAOqqB,GACPjoB,QAAQC,KAAK,mCAAoCgoB,MAuBkB,OAIjEiiC,EAAe9pD,cAAY,IAC1BoG,EAAaO,QACK,eAAhBoC,EACH3C,EAAaO,QAAQivB,YACrBxvB,EAAaO,QAAQI,aAHS,EAIjC,CAACgC,IAGEghD,EAAiB/pD,cAAY,KACjC,IAAK+oD,IAAeW,EAAW/iD,QAAS,OAAO,KAE/C,IAAMqjD,EAAYN,EAAW/iD,QAAQgjD,QAAQZ,GAC7C,IAAKiB,EAAW,OAAO,KAEvB,IACE,IAAMC,EAASC,KAAKC,MAAMH,GAC1B,OAAIjrD,MAAMC,QAAQirD,EAAOG,OAChBH,EAAOG,MAET,KACP,MAAOviC,GAEP,OADAjoB,QAAQC,KAAK,qCAAsCgoB,GAC5C,OAER,CAACkhC,IAGEsB,EAAiBrqD,cAAY,KACjC,GAAK+oD,GAAeW,EAAW/iD,SAA6B,IAAlB0iD,EAAOvpD,OAAjD,CAEA,IAAMsqD,EAAQf,EAAOhoD,IAAKipD,KACxBtoD,GAAIsoD,EAAMtoD,GACVuG,KAAM+hD,EAAM/hD,KACZgiD,UAAWD,EAAMC,YAAa,KAGhCb,EAAW/iD,QAAQkjD,QAAQd,EAAYmB,KAAKM,UAAU,CAAEJ,MAAAA,OACvD,CAACrB,EAAYM,IAGVvB,EAAgB9nD,cACpB,CACEgC,EACAyoD,EACA5B,EACAC,EACA4B,KAEApB,EAAWqB,GAELA,EAAW7oC,KAAMwoC,GAAUA,EAAMtoD,KAAOA,GACnC2oD,EAIF,IACFA,EACH,CACE3oD,GAAAA,EACAuG,KAAMkiD,EACN5B,cAASA,EAAAA,EAAWK,EACpBJ,cAASA,EAAAA,EAAWK,EACpBhsD,kBAAautD,EAAAA,EAAoBvtD,EACjCotD,WAAW,MAKnB,CAACrB,EAAgBC,EAAgBhsD,IAI7B4qD,EAAkB/nD,cAAagC,IACnCsnD,EAAWqB,GAAeA,EAAWtqD,OAAQiqD,GAAUA,EAAMtoD,KAAOA,KACnE,IAGGgmD,EAAehoD,cAClBgC,IACC,IAAMsoD,EAAQjB,EAAOzuB,KAAMgwB,GAAMA,EAAE5oD,KAAOA,GAC1C,OAAOsoD,EAAQA,EAAM/hD,KAAO,GAE9B,CAAC8gD,IAIGpB,EAAejoD,cAAY,CAACgC,EAAYuG,KAC5C+gD,EAAWqB,GACTA,EAAWtpD,IAAKipD,GAAWA,EAAMtoD,KAAOA,EAAEP,OAAAC,UAAQ4oD,GAAO/hD,KAAAA,IAAS+hD,KAEnE,IAGGpC,EAAmBloD,cACtBgC,IACC,IAAMsoD,EAAQjB,EAAOzuB,KAAMgwB,GAAMA,EAAE5oD,KAAOA,GAC1C,QAAOsoD,KAAUA,EAAMC,WAEzB,CAAClB,IAIGlB,EAAsBnoD,cAAagC,IACvCsnD,EAAWqB,IACT,IAAME,EAAaF,EAAW3N,UAAW4N,GAAMA,EAAE5oD,KAAOA,GACxD,IAAoB,IAAhB6oD,EAAmB,OAAOF,EAE9B,IAAML,EAAQK,EAAWE,GACzB,IAAKP,EAAMntD,YAAa,OAAOwtD,EAG/B,IAAMG,EAAYrpD,OAAAC,UACb4oD,GACHC,WAAYD,EAAMC,YAGdQ,EAAY,IAAIJ,GAGtB,OAFAI,EAAUF,GAAcC,EAEjBC,KAER,IAGG3C,EAAcpoD,cAClB,CAACgrD,EAAkBC,KACjB1B,EAAgB5iD,QAAUqkD,EAC1BxB,EAAiB7iD,QAAUskD,EAC3BxB,EAAc9iD,QAAU0iD,EAAOhoD,IAAKipD,GAAUA,EAAM/hD,MACpDs/C,GAAc,IAEhB,CAACwB,IAIGhB,EAAWroD,cACdirD,gBACC,GAAKrD,GAAe2B,EAAgB5iD,QAApC,CAEA,IACMukD,EAAQD,EAAiBzB,EAAiB7iD,QAI5CwkD,GAAe,EAGbC,EARW7B,EAAgB5iD,QAQD0kD,MAAM,QAatC,GAZID,IACFD,EAAc1mB,SAAS2mB,EAAe,GAAI,IAAM,IAK7B,IAAjBD,GAAsB9B,EAAOvpD,QAAU,IAEzCqrD,EAAc,KAIZA,EAAc,GAAKA,GAAe9B,EAAOvpD,OAAS,GAAtD,CAEA,IAAMwrD,EAAejC,EAAO8B,GACtBI,EAAYlC,EAAO8B,EAAc,GAGvC,IAAIG,EAAaf,YAAagB,EAAUhB,UAAxC,CAGA,IAAIiB,EACF/B,EAAc9iD,QAAQwkD,GACUD,EAC9BO,EACFhC,EAAc9iD,QAAQwkD,EAAc,GACJD,EAGlCM,EAAiB3vD,KAAKorB,WAAGykC,EACvBJ,EAAazC,SAAO6C,EAAIxC,EACxBrtD,KAAKqrB,WAAGykC,EAACL,EAAaxC,SAAO6C,EAAIxC,EAAgBqC,IAEnDC,EAAc5vD,KAAKorB,WAAG2kC,EACpBL,EAAU1C,SAAO+C,EAAI1C,EACrBrtD,KAAKqrB,WAAG2kC,EAACN,EAAUzC,SAAO+C,EAAI1C,EAAgBsC,IAIhDnC,EAAWqB,GACTA,EAAWtpD,IAAI,CAACipD,EAAOvjC,IACjBA,IAAUokC,EACZ1pD,OAAAC,UAAY4oD,GAAO/hD,KAAMijD,IAEvBzkC,IAAUokC,EAAc,EAC1B1pD,OAAAC,UAAY4oD,GAAO/hD,KAAMkjD,IAEpBnB,QAIb,CAAC1C,EAAYyB,EAAQtgD,EAAamgD,EAAgBC,IAI9Cb,EAAYtoD,cAAY,KACxB4nD,GAAcgB,GAChBA,EAAcS,EAAOhoD,IAAKipD,GAAUA,EAAM/hD,OAE5CghD,EAAgB5iD,QAAU,KAC1BkhD,GAAc,GAGVkB,GACFsB,KAED,CAACzC,EAAYyB,EAAQT,EAAeG,EAAYsB,IAG7ChzB,EAAgBr3B,cACnB6nB,IACC,GAAK+/B,GAAe2B,EAAgB5iD,QAApC,CAEA,IAGIwkD,GAAe,EAGbC,EANW7B,EAAgB5iD,QAMD0kD,MAAM,QAatC,GAZID,IACFD,EAAc1mB,SAAS2mB,EAAe,GAAI,IAAM,IAK7B,IAAjBD,GAAsB9B,EAAOvpD,QAAU,IAEzCqrD,EAAc,KAIZA,EAAc,GAAKA,GAAe9B,EAAOvpD,OAAS,GAAtD,CAEA,IAAIorD,EAAQ,EAGQ,eAAhBniD,GACY,cAAV8e,EAAEsB,MAAqB+hC,GAASjC,GACtB,eAAVphC,EAAEsB,MAAsB+hC,EAAQjC,GAEtB,SAAVphC,EAAEsB,MAAgB+hC,GAAS,KACjB,QAAVrjC,EAAEsB,MAAe+hC,EAAQ,OAEf,YAAVrjC,EAAEsB,MAAmB+hC,GAASjC,GACpB,cAAVphC,EAAEsB,MAAqB+hC,EAAQjC,GAErB,SAAVphC,EAAEsB,MAAgB+hC,GAAS,KACjB,QAAVrjC,EAAEsB,MAAe+hC,EAAQ,MAGjB,IAAVA,IACFrjC,EAAE0M,iBACF8zB,EAASmB,EAAiB7iD,QAAUukD,IAIxB,WAAVrjC,EAAEsB,MACJmgC,EAAWqB,GACTA,EAAWtpD,IAAI,CAACipD,EAAOvjC,IAAKtlB,OAAAC,UACvB4oD,GACH/hD,KAAMkhD,EAAc9iD,QAAQogB,OAGhCuhC,QAGJ,CAACV,EAAYyB,EAAQtgD,EAAas/C,EAAUC,EAAWW,IAuHzD,OAnHAtpD,YAAU,KACR,IAAMitC,EAAmB/kB,IAClB+/B,GAELS,EADiC,eAAhBt/C,EAA+B8e,EAAEE,QAAUF,EAAEG,UAI1D8jC,EAAmBjkC,IACvB,GAAK+/B,GAAmC,IAArB//B,EAAEC,QAAQhoB,OAA7B,CACA,IAAMisD,EAAQlkC,EAAEC,QAAQ,GAGxBugC,EADkB,eAAhBt/C,EAA+BgjD,EAAMhkC,QAAUgkC,EAAM/jC,WAInD8kB,EAAgBA,KAChB8a,GACFU,KAiBJ,OAbIV,IACFtwB,SAASC,iBAAiB,YAAaqV,GACvCtV,SAASC,iBAAiB,YAAau0B,GACvCx0B,SAASC,iBAAiB,UAAWuV,GACrCxV,SAASC,iBAAiB,WAAYuV,GACtCxV,SAASC,iBAAiB,UAAWF,GAGrCC,SAASulB,KAAKj2C,MAAMnE,OACF,eAAhBsG,EAA+B,aAAe,aAChDuuB,SAASulB,KAAKj2C,MAAM6iC,WAAa,QAG5B,KACLnS,SAASE,oBAAoB,YAAaoV,GAC1CtV,SAASE,oBAAoB,YAAas0B,GAC1Cx0B,SAASE,oBAAoB,UAAWsV,GACxCxV,SAASE,oBAAoB,WAAYsV,GACzCxV,SAASE,oBAAoB,UAAWH,GAGxCC,SAASulB,KAAKj2C,MAAMnE,OAAS,GAC7B60B,SAASulB,KAAKj2C,MAAM6iC,WAAa,KAElC,CAACme,EAAY7+C,EAAas/C,EAAUC,EAAWjxB,IAGlD13B,YAAU,KACR,GAAsB,IAAlB0pD,EAAOvpD,OAAX,CAGA,GAAIipD,EAAY,CACd,IAAMiD,EAAajC,IACnB,GAAIiC,EAeF,YAbA1C,EAAWqB,GACFA,EAAWtpD,IAAKipD,IACrB,IAAM2B,EAAaD,EAAWpxB,KAAM8M,GAAWA,EAAE1lC,KAAOsoD,EAAMtoD,IAC9D,OAAIiqD,EACFxqD,OAAAC,UACK4oD,GACH/hD,KAAM0jD,EAAW1jD,KACjBgiD,UAAW0B,EAAW1B,YAAa,IAGhCD,KAQf,IAAK3B,EAAc,CACjB,IACMuD,EADYpC,IACYT,EAAOvpD,OAErCwpD,EAAWqB,GACTA,EAAWtpD,IAAKipD,GAAK7oD,OAAAC,UAChB4oD,GACH/hD,KAAM2jD,SAIX,CAAC7C,EAAOvpD,OAAQ6oD,EAAcmB,EAAcf,EAAYgB,IAG3DpqD,YAAU,KACR,GAAKgpD,GAAwC,IAAxBA,EAAa7oD,QAAkC,IAAlBupD,EAAOvpD,OAAzD,CAGA,IAAMqsD,EAAYrC,IACZsC,EAAWzD,EAAatnD,IAAKkH,GACb,iBAATA,GAAqBA,EAAK8jD,SAAS,KACpCnlD,WAAWqB,GAAQ,IAAO4jD,EAEb,iBAAT5jD,EAAoBA,EAAOrB,WAAWqB,IAGtD+gD,EAAWqB,GACTA,EAAWtpD,IAAI,CAACipD,EAAOvjC,IAAKtlB,OAAAC,UACvB4oD,GACH/hD,KAAMwe,EAAQqlC,EAAStsD,OAASssD,EAASrlC,GAASujC,EAAM/hD,WAG3D,CAACogD,EAAcU,EAAOvpD,OAAQgqD,IAGjCnqD,YAAU,KACJ0pD,EAAOvpD,OAAS,GAAKipD,IAAenB,GACtCyC,KAED,CAAChB,EAAQN,EAAYnB,EAAYyC,IAE7B,CACLzC,WAAAA,EACAC,cAAAA,EACAzhD,aAAAA,EACAijD,OAAAA,EACAvB,cAAAA,EACAC,gBAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,iBAAAA,EACAC,oBAAAA,EACAC,YAAAA,EACAC,SAAAA,EACAC,UAAAA,GGzZEgE,CACFvjD,EACA4/C,EACAC,EACAC,EACAC,EACA3rD,EACA4rD,EACAC,EACAC,GAGF,OACExrD,gBAAC+qD,IACChrD,MAAO,CACLuL,YAAAA,EACAR,KAAAA,EACArK,QAAAA,EACA0pD,WAAAA,EACAC,cAAAA,EACAC,cAAAA,EACAC,gBAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,iBAAAA,EACAC,oBAAAA,EACAC,YAAAA,EACAC,SAAAA,EACAC,UAAAA,IAGF7qD,gBAACgrD,kBACC1/C,YAAaA,EACbR,KAAMA,EACNrK,QAASA,EACTyqD,aAAcA,EACdE,QAASA,EACTC,QAASA,EACT3rD,YAAaA,EACb4rD,WAAYA,EACZE,iBAAkBA,EAClB7iD,aAAcA,EACdjI,MAAOA,GACHC,GAEHb,KASTmrD,GAAU6D,MD7CmD9rD,QAAClD,SAC5DA,EAAQyE,GACRA,EAAEwqD,YACFA,EAAW3D,QACXA,EAAOC,QACPA,EAAO3rD,YACPA,EAAWsvD,iBACXA,EAAgBC,iBAChBA,EAAgBvuD,MAChBA,GAEDsC,EADIrC,EAAKC,EAAAoC,EAAA5B,KAEFkK,YACJA,EAAW++C,cACXA,EAAaC,gBACbA,EAAeC,aACfA,EAAYE,iBACZA,EAAgBC,oBAChBA,GACEI,KAGEkC,EACmB,iBAAhB+B,GAA4BA,EAAYH,SAAS,KACpD,EACuB,iBAAhBG,EACPA,EACA,EAGN7sD,YAAU,KACRmoD,EAAc9lD,EAAIyoD,EAAa5B,EAASC,EAAS3rD,GAC1C,IAAM4qD,EAAgB/lD,IAC5B,CACDA,EACAyoD,EACA5B,EACAC,EACA3rD,EACA2qD,EACAC,IAIF,IAAMx/C,EAAOy/C,EAAahmD,GACpB2qD,EAAczE,EAAiBlmD,GAiBrC,OAdArC,YAAU,KACJ+sD,QAAoCztD,IAAhB0tD,GACtBD,EAAiBC,IAElB,CAACA,EAAaD,IAGjB/sD,YAAU,KACJxC,GAAesvD,IAAqBE,GACtCxE,EAAoBnmD,IAErB,CAACA,EAAI7E,EAAasvD,EAAkBE,EAAaxE,IAGhDwE,EAEAlvD,gBAACqD,sBACCsiB,KAAK,WACL5kB,MAAuB,eAAhBuK,EAA+B,OAAS,OAC/CjG,OAAwB,aAAhBiG,EAA6B,OAAS,OAC9CxM,gBAAgB,iBAChBkG,OAAO,UACPH,QAASA,IAAM6lD,EAAoBnmD,gCACPA,EAC5B0B,KAAK,SACLmyB,SAAU,SACN13B,SAAAA,EAAOyuD,eACPxuD,IAMRX,gBAACqD,sBACCsiB,KAAM7a,EAAO,EAAI,WAAa,IAC9B/J,MAAuB,eAAhBuK,EAAkCR,OAAW,OACpDzF,OAAwB,aAAhBiG,EAAgCR,OAAW,OACnDvH,SAAS,cACL7C,SAAAA,EAAOmsD,MACPlsD,GAEHb,IC3CPmrD,GAAUmE,ODiDqDjrD,QAACI,GAC9DA,EAAE4D,SACFA,EAAW,OAAMma,SACjBA,GAAW,EAAK+sC,oBAChBA,GAAsB,EAAIC,mBAC1BA,GAAqB,EAAKC,eAC1BA,EAAc7uD,MACdA,GAEDyD,EADIxD,EAAKC,EAAAuD,EAAAE,KAEFiH,YACJA,EAAWR,KACXA,EAAIrK,QACJA,EAAOkqD,YACPA,EAAWF,iBACXA,EAAgBC,oBAChBA,GACEI,KAkBE0E,EAdqBC,MACzB,GAAIF,EAAgB,OAAOA,EAG3B,IAAM5B,EAAiBppD,EAAGqpD,MAAM,QAChC,IAAKD,EAAgB,MAAO,GAE5B,IAAMD,EAAc1mB,SAAS2mB,EAAe,GAAI,IAChD,OAAI1mB,MAAMymB,GAAqB,WAGhBA,GAGO+B,GAClBC,EAAyBjF,EAAiB+E,GAkChD,OACExvD,gBAACqD,sBACC4C,KAAK,+BACaqF,kBACH,kBACA,IACf8sB,SAAU9V,GAAY,EAAI,EAC1Btd,OAAwB,eAAhBsG,EAA+B,aAAe,aACtDhG,QAAQ,OACRL,WAAW,SACXC,eAAe,SACfiD,SAAS,YDvNoBwnD,EACjC7kD,EACAQ,KAEc,CACZtE,GAAI,CACFjG,MAAuB,eAAhBuK,EAA+B,MAAQ,OAC9CjG,OAAwB,aAAhBiG,EAA6B,MAAQ,QAE/CrE,GAAI,CACFlG,MAAuB,eAAhBuK,EAA+B,MAAQ,OAC9CjG,OAAwB,aAAhBiG,EAA6B,MAAQ,QAE/CpE,GAAI,CACFnG,MAAuB,eAAhBuK,EAA+B,MAAQ,OAC9CjG,OAAwB,aAAhBiG,EAA6B,MAAQ,SAIpCR,ICqML6kD,CAAoB7kD,EAAMQ,GAC1Bw+C,GAAerpD,IACnB4qB,YA9CqBjB,IACnB9H,IACJ8H,EAAE0M,iBAEF6zB,EAAYpmD,EAD2B,eAAhB+G,EAA+B8e,EAAEE,QAAUF,EAAEG,WA4ClEW,aAxCsBd,IACxB,IAAI9H,GAAiC,IAArB8H,EAAEC,QAAQhoB,OAA1B,CACA+nB,EAAE0M,iBACF,IAAMw3B,EAAQlkC,EAAEC,QAAQ,GAGxBsgC,EAAYpmD,EADM,eAAhB+G,EAA+BgjD,EAAMhkC,QAAUgkC,EAAM/jC,WAoCrDqb,UAhCmBxb,IACjB9H,GACU,UAAV8H,EAAEsB,KAA6B,MAAVtB,EAAEsB,MACzBtB,EAAE0M,iBAEF6zB,EAAYpmD,EADW,KA6BvBf,QAAS8e,EAAW,GAAM,EAC1B7e,cAAe6e,EAAW,OAAS,cAC/B5hB,SAAAA,EAAOkvD,OACPjvD,GAEH0uD,GACCrvD,gBAACqD,sBACCiC,QAAQ,OACRL,WAAW,SACXC,eAAe,SACfnE,MAAuB,eAAhBuK,EAA+B,OAAS,OAC/CjG,OAAwB,aAAhBiG,EAA6B,OAAS,OAC9C7H,cAAc,cACV/C,SAAAA,EAAOmvD,YAEM,eAAhBvkD,EACCtL,gBAACoF,cAAWgW,IAAK,GACfpb,gBAACqD,wBAAS4mD,KACVjqD,gBAACqD,wBAAS4mD,MAGZjqD,gBAACc,YAASsa,IAAK,GACbpb,gBAACqD,wBAAS4mD,KACVjqD,gBAACqD,wBAAS4mD,OAMjBqF,GAAsBE,GACrBxvD,gBAACqD,sBACC8E,SAAS,WACTG,IAAqB,eAAhBgD,EAA+B,QAAU,MAC9C2Q,KAAsB,eAAhB3Q,EAA+B,MAAQ,QAC7C9F,UACkB,eAAhB8F,EACI,mBACA,mBAENvK,MAAM,OACNsE,OAAO,OACP3G,aAAa,OACbI,gBAAgB,iBAChBylB,OAAO,YACPrlB,YAAY,iBACZoG,QAAQ,OACRL,WAAW,SACXC,eAAe,SACfF,OAAO,UACPqgB,OAAQ,EACRxgB,QA1EqBulB,IAC3BA,EAAEgU,kBACEoxB,GACF9E,EAAoB8E,iBAyEdE,kBACoBF,oBACEA,EAExBvpD,KAAK,SACLmyB,SAAU,EACV30B,cAAc,OACdse,OAAQ,CAAEjjB,gBAAiB,yBACvB4B,SAAAA,EAAOovD,cAGX9vD,gBAACqD,QACCtC,MAAM,MACNsE,OAAO,MACPC,QAAQ,OACRL,WAAW,SACXC,eAAe,UAEdwqD,EAEC1vD,gBAACoF,kBACCpF,gBAACqD,QACCtC,MAAM,MACNsE,OAAO,MACPvG,gBAAgB,mBAElBkB,gBAACqD,QACCtC,MAAM,MACNsE,OAAO,MACPvG,gBAAgB,iBAChBqJ,SAAS,cAKbnI,gBAACqD,QAAKtC,MAAM,MAAMsE,OAAO,MAAMvG,gBAAgB,uBE9S7D,IAAamzC,GAAqB,CAChCj3B,KAAM,CACJha,UAAW,CACTlC,gBAAiB,gBACjBylB,OAAQ,kBAEVxJ,QAAS,CACP1P,MAAO,kBAET5F,KAAM,CACJ4F,MAAO,mBAGX4P,QAAS,CACPja,UAAW,CACTlC,gBAAiB,iBACjBylB,OAAQ,mBAEVxJ,QAAS,CACP1P,MAAO,mBAET5F,KAAM,CACJ4F,MAAO,oBAGX8P,QAAS,CACPna,UAAW,CACTlC,gBAAiB,kBACjBylB,OAAQ,oBAEVxJ,QAAS,CACP1P,MAAO,oBAET5F,KAAM,CACJ4F,MAAO,qBAGX6P,MAAO,CACLla,UAAW,CACTlC,gBAAiB,eACjBylB,OAAQ,iBAEVxJ,QAAS,CACP1P,MAAO,iBAET5F,KAAM,CACJ4F,MAAO,mBAyBA0kD,GAAmD,CAC9DznD,IAAK,CACHA,IAAK,OACL2T,KAAM,MACNzW,UAAW,oBAEb8X,YAAa,CACXhV,IAAK,OACL0T,MAAO,QAETuB,WAAY,CACVjV,IAAK,OACL2T,KAAM,QAER7T,OAAQ,CACNA,OAAQ,OACR6T,KAAM,MACNzW,UAAW,oBAEbgY,eAAgB,CACdpV,OAAQ,OACR4T,MAAO,QAETyB,cAAe,CACbrV,OAAQ,OACR6T,KAAM,SC1GN+zC,GAAW,IAAIC,IAGNC,GAAgB7e,SAAoBC,KAC/C6e,OAAQ,GACRrlC,IAAK,SAACrqB,EAAS8J,EAAOqQ,EAAa2f,YAAAA,IAAAA,EAAU,IAC3C,IAAMh2B,EAAKg2B,EAAQh2B,IATEnG,KAAKC,SAASC,SAAS,IAAIC,UAAU,EAAG,GAUvD6xD,EAAKpsD,OAAAC,QACTM,GAAAA,EACA9D,QAAAA,EACA8J,MAAAA,EACAqQ,YAAAA,EACAy1C,UAAWj8B,KAAKC,MAChB4P,WAAW,GACR1J,GAQL,GALA+W,EAAK9X,KACH22B,OAAQ,IAAI32B,EAAM22B,OAAQC,MAIH,IAArB71B,EAAQ+1B,SAAgB,CAC1B,IACMC,EAAU7lB,WAAW,KACzBwlB,GAAcne,WAAWye,OAAOjsD,IAFjBg2B,EAAQ+1B,UAAY,KAMrCN,GAAS1e,IAAI/sC,EAAIgsD,GAGnB,OAAOhsD,GAETisD,OAASjsD,IAEP+sC,EAAK9X,KACH22B,OAAQ32B,EAAM22B,OAAOvsD,IAAKwsD,GACxBA,EAAM7rD,KAAOA,EAAEP,OAAAC,UAAQmsD,GAAOnsB,WAAW,IAAUmsB,MAKnDJ,GAASS,IAAIlsD,KACf+tC,aAAa0d,GAASU,IAAInsD,IAC1ByrD,GAAShlC,OAAOzmB,IAIlBmmC,WAAW,KACT4G,EAAK9X,KACH22B,OAAQ32B,EAAM22B,OAAOvtD,OAAQwtD,GAAUA,EAAM7rD,KAAOA,OAErD,MAELosD,UAAWA,KAETX,GAAS3hC,QAAQikB,cACjB0d,GAASY,QAGTtf,EAAK9X,KACH22B,OAAQ32B,EAAM22B,OAAOvsD,IAAKwsD,GAAKpsD,OAAAC,UAAWmsD,GAAOnsB,WAAW,QAI9DyG,WAAW,KACT4G,EAAI,CAAE6e,OAAQ,MACb,SAKMU,GAAYA,CACvBpwD,EACA8J,EACAqQ,EACA2f,IAEO21B,GAAcne,WAAWjnB,IAAIrqB,EAAS8J,EAAOqQ,EAAa2f,GAGtDu2B,GAAgBA,CAC3BvmD,EACAqQ,EACA2f,IAEOs2B,GAAU,OAAQtmD,EAAOqQ,EAAa2f,GAGlCw2B,GAAmBA,CAC9BxmD,EACAqQ,EACA2f,IAEOs2B,GAAU,UAAWtmD,EAAOqQ,EAAa2f,GAGrCy2B,GAAmBA,CAC9BzmD,EACAqQ,EACA2f,IAEOs2B,GAAU,UAAWtmD,EAAOqQ,EAAa2f,GAGrC02B,GAAiBA,CAC5B1mD,EACAqQ,EACA2f,IAEOs2B,GAAU,QAAStmD,EAAOqQ,EAAa2f,GAGnC22B,GAAe3sD,IAC1B2rD,GAAcne,WAAWye,OAAOjsD,IAGrB4sD,GAAkBA,KAC7BjB,GAAcne,WAAW4e,aCnHdS,GAAkCvxD,QAACY,QAC9CA,EAAO8J,MACPA,EAAKqQ,YACLA,EAAW+6B,QACXA,EAAOnE,WACPA,GAAa,EAAIC,OACjBA,EAAMC,WACNA,EAAUC,SACVA,GAAW,EAAIS,MACfA,EAAK1xC,MACLA,EAAK2wD,OACLA,EACA5rD,KAAM6rD,EAAU/sD,GAChBA,EAAE0/B,UACFA,GAAY,GAEbpkC,EAGO0yC,QAAQH,EAAAA,EAASH,GA+BvB,OAAIof,EACKrxD,gCAAGqxD,EAAO,CAAE9sD,GAAIA,GAAM,GAAIoxC,QAAAA,KASjC31C,gBAACoF,4BACCa,KANyB,UAAZxF,EAAsB,QAAU,qBAEnC,UAAZA,GAAmC,YAAZA,EAAwB,YAAc,uBAM/C,oBACAwjC,EAAY,OAAS,SACjC7oB,IAAK,GACLra,MAAM,OACNy7B,SAAS,QACTz9B,YAAY,MACZE,YAAY,QACZP,aAAa,MACbqG,QAAQ,YACRE,WAAW,aACXkD,SAAS,WACTrJ,gBAAiByzC,EAAM9xC,GAASO,UAAUlC,gBAC1CI,YAAaqzC,EAAM9xC,GAASO,UAAUujB,OACtCzJ,UAAU,iCACVtX,QAASygC,EAAY,EAAI,EACzBz+B,UAAWy+B,EAAY,WAAa,cACpC1+B,WAAW,uBACP7E,SAAAA,EAAOM,WAEV2wC,GACC3xC,gBAACqD,sBAAKkY,UAAU,aAAU7a,SAAAA,EAAO+E,MA7DvB+V,MAEd,QAAmBha,IAAf8vD,EACF,OAAOA,EAIT,OAAQ7wD,GACN,IAAK,OACH,OAAOT,gBAACwP,IAASpE,YAAa,GAAIC,MAAOknC,EAAMv3B,KAAKvV,KAAK4F,QAC3D,IAAK,UACH,OAAOrL,gBAAC2P,IAASvE,YAAa,GAAIC,MAAOknC,EAAMt3B,QAAQxV,KAAK4F,QAC9D,IAAK,UACH,OACErL,gBAACwP,IACCpE,YAAa,GACbC,MAAOknC,EAAMp3B,QAAQ1V,KAAK4F,MAC1BC,YAAY,SAGlB,IAAK,QACH,OAAOtL,gBAACyR,IAAYrG,YAAa,GAAIC,MAAOknC,EAAMr3B,MAAMzV,KAAK4F,QAC/D,QACE,OAAOrL,gBAACwP,IAASpE,YAAa,GAAIC,MAAOknC,EAAMv3B,KAAKvV,KAAK4F,UAuCtDmQ,IAILxb,gBAACc,YAASsa,IAAK,EAAGuK,KAAK,KACrB3lB,gBAACkL,iBACCJ,KAAK,KACLvE,WAAW,MACX8E,MAAOknC,EAAM9xC,GAASsa,QAAQ1P,MAC9B/E,WAAW,aACP5F,SAAAA,EAAO6J,OAEVA,GAGFqQ,GACC5a,gBAACkL,iBACCJ,KAAK,KACLO,MAAOknC,EAAM9xC,GAASsa,QAAQ1P,MAC9B9E,WAAW,MACXD,WAAW,aACP5F,SAAAA,EAAOka,aAEVA,GAIJ62B,GAAUC,GACT1xC,gBAACkL,iBACCJ,KAAK,KACLvE,WAAW,MACXgV,UAAU,MACVvW,OAAO,UACPqG,MAAOknC,EAAM9xC,GAASsa,QAAQ1P,MAC9BxG,QAAUulB,IACRA,EAAEgU,kBACFqT,KAEF1vB,OAAQ,CAAE9W,eAAgB,aAC1B1F,WAAW,uBACP7E,SAAAA,EAAO6wD,cAEV7f,IAKNF,GACCxxC,gBAACqD,sBACC6E,GAAG,sBACQ,cACXpJ,gBAAgB,cAChBylB,OAAO,OACPvf,OAAO,UACPD,QAAQ,MACRm0B,WAAW,MACX3d,UAAU,OACVoR,YAAY,OACZjuB,aAAa,MACbmG,QAAUulB,IACRA,EAAEgU,kBACFuX,KAEF5zB,OAAQ,CAAEjjB,gBAAiB,uBAC3ByG,WAAW,uBACP7E,SAAAA,EAAO8wD,aAEXxxD,gBAAC+N,IAAU3C,YAAa,GAAIC,MAAOknC,EAAM9xC,GAASsa,QAAQ1P,WAQvDomD,GAAgDzuD,QAACmF,SAC5DA,EAAW,YAAWiT,IACtBA,EAAM,EAAC1R,MACPA,EAAQ,EAAC+oC,eACTA,GACDzvC,GACOmtD,OAAEA,EAAMK,OAAEA,GAAWN,KA8BrBwB,EA3BmB1xD,EAAMgC,QAAQ,KACrC,IAAM2vD,EAAgD,CACpDrpD,IAAK,GACLgV,YAAa,GACbC,WAAY,GACZnV,OAAQ,GACRoV,eAAgB,GAChBC,cAAe,IAgBjB,OAZA0yC,EAAO9hC,QAAS+hC,IAEduB,EADYvB,EAAMjoD,UAAYA,GACA2mB,KAAKshC,KAIrCpsD,OAAO4tD,KAAKD,GAAStjC,QAASuJ,IAC5B+5B,EAAQ/5B,GAAwB+5B,EAAQ/5B,GAAsB3tB,OAC3DP,KAIEioD,GACN,CAACxB,EAAQhoD,EAAUuB,IAGiBvB,GAEvC,OACEnI,gBAACqD,sBACC8E,SAAS,QACTkd,OAAQ,KACR/f,QAAQ,OACRob,cAAevY,EAASxF,SAAS,UAAY,iBAAmB,SAChEyY,IAAQA,OACRra,MAAM,cACNy7B,SAAS,OACT/4B,cAAc,QACVssD,GAAe5nD,IACnBgB,MAAOspC,IAENif,EAAc9tD,IAAKwsD,GAClBpwD,gBAACqD,QACCqoB,IAAK0kC,EAAM7rD,GACXd,cAAc,OACdyoC,UACE/jC,EAASxF,SAAS,SACd,mDACAwF,EAASxF,SAAS,QAClB,kDACAwF,EAASxF,SAAS,OAClB,kDACA,iDAGN3C,gBAACoxD,IACC7sD,GAAI6rD,EAAM7rD,GACV9D,QAAS2vD,EAAM3vD,QACf8J,MAAO6lD,EAAM7lD,MACbqQ,YAAaw1C,EAAMx1C,YACnB+6B,QAASA,IAAM6a,EAAOJ,EAAM7rD,IAC5BitC,WAAY4e,EAAM5e,WAClBC,OAAQ2e,EAAM3e,OACdC,WAAY0e,EAAM1e,WAClBC,SAAUye,EAAMze,SAChBjxC,MAAO0vD,EAAM1vD,MACb2wD,OAAQjB,EAAMiB,OACd5rD,KAAM2qD,EAAM3qD,KACZw+B,UAAWmsB,EAAMnsB,gBCxOvB4tB,GAAwClxD,GACrCX,gBAACoxD,oBAAczwD,IAIlBmxD,GAAQ9tD,OAAOC,OAAO4tD,GAAgB,CAC1C7b,UAAYr1C,GAA+BX,gBAACyxD,oBAAmB9wD,IAC/DkxC,KAAMgf,GACN71C,KAAM81C,GACN71C,QAAS81C,GACT51C,QAAS61C,GACT91C,MAAO+1C,GACPT,OAAQU,GACRP,UAAWQ,KClBPY,GAAkBA,CAAChyD,EAAe2D,aACtC,IAAK3D,EAAO,OAAO,EAEnB,IAAMiyD,EAAcjyD,EAAMujC,cACpB2uB,EAAcvuD,EAAKisB,KAAK2T,cAAc3gC,SAASqvD,GAC/CE,UACJC,EAAAzuD,EAAKkX,oBAALu3C,EAAkB7uB,cAAc3gC,SAASqvD,MAAgB,EACrDI,UACJC,EAAA3uD,EAAK4uD,iBAALD,EAAehuC,KAAMkuC,GACnBA,EAAQjvB,cAAc3gC,SAASqvD,OAC5B,EAEP,OAAOC,GAAeC,GAAsBE,GCrBjCI,GAA+C,CAC1DxrD,GAAI,CACFjG,MAAO,QACPmF,UAAW,SAEbe,GAAI,CACFlG,MAAO,QACPmF,UAAW,SAEbgB,GAAI,CACFnG,MAAO,QACPmF,UAAW,UAkCFusD,GA7BXnzC,CAAAA,IAEO,CACLzgB,QAAS,CACPC,gBAAiB,cACjBC,YAAa,MACbE,YAAa,QACbC,YAAa,iBACb4b,UAAW,mCAEb3b,OAAQ,CACNL,gBAAiB,gBACjBC,YAAa,MACbE,YAAa,QACbC,YAAa,iBACb4b,UAAW,mCAEb9b,QAAS,CACPF,gBAAiB,cACjBC,YAAa,MACbE,YAAa,QACbC,YAAa,iBACb4b,UAAW,qCAOc43C,GAElBC,GAAgC,CAC3CrtD,QAAS,OACTL,WAAY,SACZF,QAAS,YACTme,kBAAmB,MACnBC,kBAAmB,QACnBC,kBAAmB,kBAGRwvC,GAA+B,CAC1CrvD,SAAU,OACVwB,QAAS,SAGE8tD,GAAgC,CAC3CvvD,aAAc,OAGHwvD,GAAuC,CAClD/tD,QAAS,WACTsB,SAAU,OACVE,WAAY,OACZ8E,MAAO,iBACP0nD,cAAe,aAGJC,GAA+B,CAC1C1tD,QAAS,OACTL,WAAY,SACZF,QAAS,WACTC,OAAQ,UACRgnC,WAAY,OACZttC,aAAc,MACdsmB,OAAQ,QACRjD,OAAQ,CACNjjB,gBAAiB,mBAIRm0D,GAAuC,CAClDn0D,gBAAiB,gBACjBijB,OAAQ,CACNjjB,gBAAiB,mBAIRo0D,GAAuC,CAClD1vD,QAAS,GACTwB,OAAQ,cACR+c,OAAQ,CACNjjB,gBAAiB,gBAIRq0D,GAAmC,CAC9C7tD,QAAS,OACTL,WAAY,SACZC,eAAgB,SAChBynB,YAAa,OACbthB,MAAO,kBAGI+nD,GAAsC,CACjD9tD,QAAS,OACTob,cAAe,SACfiF,KAAM,GAGK0tC,GAAmC,CAC9ChtD,SAAU,OACVE,WAAY,UAGD+sD,GAA0C,CACrDjtD,SAAU,OACVgF,MAAO,iBACPkQ,UAAW,OAGAg4C,GAAuC,CAClDjuD,QAAS,OACTL,WAAY,SACZi0B,WAAY,OACZ7yB,SAAU,OACVgF,MAAO,kBAGImoD,GAAgC,CAC3CluD,QAAS,OACTL,WAAY,SACZC,eAAgB,SAChBH,QAAS,OACTsG,MAAO,iBACP0S,UAAW,UAGA01C,GAAiC,CAC5CnuD,QAAS,OACTL,WAAY,SACZC,eAAgB,gBAChBH,QAAS,WACT4e,eAAgB,MAChBC,eAAgB,QAChBC,eAAgB,iBAChBxd,SAAU,OACVgF,MAAO,4ZC/GHqoD,GAAiBr0D,gBAAkC,CACvDs0D,OAAQ,GACRC,UAAWA,OACXC,cAAe,EACfC,iBAAkBA,OAClBC,iBAAkB,GAClBr7B,SAAUA,SAOCs7B,GAGRn0D,QAACE,MAAEA,EAAKD,SAAEA,GAAUD,EACvB,OACEG,gBAAC0zD,GAAezzD,UAASF,MAAOA,GAAQD,IAK/Bm0D,GAA4CjxD,QAACjD,MACxDA,EAAKoB,cACLA,EAAak5B,YACbA,EAAc,8BAA6B35B,MAC3CA,GAEDsC,EADIrC,EAAKC,EAAAoC,EAAA5B,IAEFilC,EAAWz9B,SAAyB,MAS1C,OANA5I,EAAMkC,UAAU,KACVmkC,EAASn9B,SACXm9B,EAASn9B,QAAQq3B,SAElB,IAGDvgC,gBAACqD,wBAASsvD,SAAwBjyD,SAAAA,EAAOM,UAAeL,GACtDX,gBAACoX,IAAWhM,YAAa,GAAIC,MAAM,iBAAiBshB,YAAY,QAChE3sB,gBAACqD,sBACC6E,GAAG,QACHzI,KAAK,OACLM,MAAOA,EACPynB,SAAW4C,GACTjpB,EAAcipB,EAAE1L,OAAO3e,OAEzBs6B,YAAaA,EACbt5B,MAAM,OACNwjB,OAAO,OACPvlB,QAAQ,OACRF,gBAAgB,cAChBuH,SAAS,OACTgE,IAAKg8B,SACD3lC,SAAAA,EAAOunC,UAoBNisB,GAA4CnuD,QAAC0E,QACxDA,EAAO3K,SACPA,EAAQY,MACRA,GAEDqF,EADIpF,EAAKC,EAAAmF,EAAAC,IAER,OACEhG,gBAACqD,wBAASwvD,SAAwBnyD,SAAAA,EAAOM,UAAeL,GACtDX,gBAACkL,mBAAS4nD,SAA+BpyD,SAAAA,EAAO+J,SAC7CA,GAEF3K,IAMMq0D,GAA0C5zD,QAACmD,KACtDA,EAAIm+B,SACJA,GAAW,EAAKnJ,SAChBA,EAAQh4B,MACRA,GAEDH,EADII,EAAKC,EAAAL,EAAAM,IAQR,OACEb,gBAACoF,8BACK4tD,GACCnxB,EAAWoxB,GAA4B,GACvCvvD,EAAK4e,SAAW4wC,GAA4B,IACjDruD,QAXgBC,MACbpB,EAAK4e,UAAYoW,GACpBA,YAUIh4B,SAAAA,EAAOM,UACPL,GAEH+C,EAAK+B,MACJzF,gBAACqD,wBAAS8vD,SAA2BzyD,SAAAA,EAAO+E,MACzC/B,EAAK+B,MAGVzF,gBAACc,4BAAasyD,SAA8B1yD,SAAAA,EAAOqa,SACjD/a,gBAACkL,mBAASmoD,SAA2B3yD,SAAAA,EAAOivB,MACzCjsB,EAAKisB,MAEPjsB,EAAKkX,aACJ5a,gBAACkL,mBAASooD,SAAkC5yD,SAAAA,EAAOka,aAChDlX,EAAKkX,cAIXlX,EAAK0wD,UACJp0D,gBAACkL,mBAASqoD,SAA+B7yD,SAAAA,EAAO0zD,UAC7C1wD,EAAK0wD,YAQHC,GAA4C5nD,QAAC3M,SACxDA,EAAW,oBAAmBY,MAC9BA,GAED+L,EADI9L,EAAKC,EAAA6L,EAAAL,IAER,OACEpM,gBAACqD,wBAASmwD,SAAwB9yD,SAAAA,EAAOM,UAAeL,GACrDb,IAMMw0D,GAUTznD,QAAC0nD,KACHA,EAAIh7B,aACJA,EAAYi7B,OACZA,EAAS,GAAEC,SACXA,EAAW,GAAEp6B,YACbA,EAAWvvB,KACXA,EAAO,KAAIrK,QACXA,EAAU,UAASi0D,WACnBA,EAAU5wC,OACVA,EAAM6vC,OACNA,EAAMC,UACNA,EAASC,cACTA,EAAaC,iBACbA,EAAgBC,iBAChBA,EAAgBY,eAChBA,EAAcC,QACdA,EAAOl0D,MACPA,GAGDmM,EADIlM,EAAKC,EAAAiM,EAAAH,IAER,IAAK6nD,EAAM,OAAO,KAElB,IAAMM,EAAmB70D,EAAMuC,YAC5BmB,IACKA,EAAK4e,WACT5e,EAAKg1B,WACLa,GAAa,GACbq6B,EAAU,MAEZ,CAACr6B,EAAcq6B,IAGXkB,EAAsB90D,EAAMuC,YAC/B6nB,GACCA,EAAE1L,SAAW0L,EAAEod,eAAiBjO,GAAa,GAC/C,CAACA,IAGGrV,EAAelkB,EAAMgC,QACzB,MACE2xD,OAAAA,EACAC,UAAAA,EACAC,cAAAA,EACAC,iBAAAA,EACAC,iBAAAA,EACAr7B,SAAUm8B,IAEZ,CACElB,EACAE,EACAE,EACAc,EACAjB,EACAE,IAIEiB,EAAYP,EAAOnyD,OAAS,EAE5B2yD,EAAsC,IAA5BjB,EAAiB1xD,OAEjC,OACErC,gBAACqD,sBACC8E,SAAS,QACTG,IAAK,EACL2T,KAAM,EACND,MAAO,EACP5T,OAAQ,EACR9C,QAAQ,OACRL,WAAW,SACXC,eAAe,SACfpG,gBAAgB,qBAChBumB,OAAQ,KACRxgB,QAASiwD,GACLn0D,GAEJX,gBAACg0D,IAAgBj0D,MAAOmkB,GACtBlkB,gBAACqD,sBACC3E,aAAa,MACb6E,SAAS,SACT+B,QAAQ,OACRob,cAAc,UACV8xC,GAAa1nD,GACb2nD,GAAgBhyD,SAChBC,SAAAA,EAAOM,WACX6D,QAAUulB,GAAwBA,EAAEgU,oBAEpCp+B,gBAACi0D,IACCl0D,MAAO4zD,EACPxyD,cAAeyyD,EACfv5B,YAAaA,EACb35B,YAAOA,SAAAA,EAAOu0D,cAGhBj1D,gBAACqD,sBAAKgH,IAAKuqD,EAASjvC,KAAM,EAAGpiB,SAAS,cAAW7C,SAAAA,EAAOw0D,MACrDF,EACCN,GAGE10D,gBAACq0D,IAAa3zD,YAAOA,SAAAA,EAAOy0D,QAE5BJ,EACFJ,EAAe/wD,IAAKwxD,GAClBp1D,gBAACk0D,IACCxoC,IAAK0pC,EAAM7wD,GACXkG,QAAS2qD,EAAMzlC,KACfjvB,YAAOA,SAAAA,EAAO20D,cAEbD,EAAMX,SAAS7wD,IAAKF,IACnB,IAAM4xD,EAAevB,EAAiBxU,UACnCgW,GAAQA,EAAIhxD,KAAOb,EAAKa,IAE3B,OACEvE,gBAACm0D,IACCzoC,IAAKhoB,EAAKa,GACVb,KAAMA,EACNm+B,SAAUyzB,IAAiBzB,EAC3Bn7B,SAAUA,IAAMm8B,EAAiBnxD,gBACrB4xD,EACZ50D,MAAO,CACLM,gBAAWN,SAAAA,EAAOgD,KAClB+B,WAAM/E,SAAAA,EAAO+E,KACbsV,cAASra,SAAAA,EAAOqa,QAChB4U,WAAMjvB,SAAAA,EAAOivB,KACb/U,kBAAala,SAAAA,EAAOka,YACpBw5C,eAAU1zD,SAAAA,EAAO0zD,gBAQ7BL,EAAiBnwD,IAAI,CAACF,EAAM4lB,IAC1BtpB,gBAACm0D,IACCzoC,IAAKhoB,EAAKa,GACVb,KAAMA,EACNm+B,SAAUvY,IAAUuqC,EACpBn7B,SAAUA,IAAMm8B,EAAiBnxD,gBACrB4lB,EACZ5oB,MAAO,CACLM,gBAAWN,SAAAA,EAAOgD,KAClB+B,WAAM/E,SAAAA,EAAO+E,KACbsV,cAASra,SAAAA,EAAOqa,QAChB4U,WAAMjvB,SAAAA,EAAOivB,KACb/U,kBAAala,SAAAA,EAAOka,YACpBw5C,eAAU1zD,SAAAA,EAAO0zD,cAO1BtwC,GACC9jB,gBAACqD,wBAASowD,SAAyB/yD,SAAAA,EAAOojB,QACvCA,4HCtSF0xC,GAtDoC31D,QAAC00D,KAChDA,EAAIh7B,aACJA,EAAYi7B,OACZA,EAAS,GAAEC,SACXA,EAAW,GAAEp6B,YACbA,EAAWvvB,KACXA,EAAO,KAAIrK,QACXA,EAAU,UAASmC,OACnBA,EAAM8xD,WACNA,EAAU5wC,OACVA,EAAMpjB,MACNA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,KAEFuyD,OACJA,EAAMC,UACNA,EAASC,cACTA,EAAaC,iBACbA,EAAgBC,iBAChBA,EAAgBY,eAChBA,EAAcC,QACdA,GHT2B/0D,CAAAA,QAAC00D,KAC9BA,EAAIh7B,aACJA,EAAYi7B,OACZA,EAAS,GAAEC,SACXA,EAAW,GAAE7xD,OACbA,GACkB/C,GAEX8zD,EAAQC,GAAa7xD,WAAS,KAG9B8xD,EAAeC,GAAoB/xD,WAAS,GAG7C6yD,EAAUhsD,SAAuB,MAGjC6sD,EAAWzzD,UAAQ,IAAMY,GAAUmvD,GAAiB,CAACnvD,IAGrD8yD,EAAc1zD,UAAQ,IAEnB,IADewyD,EAAOmB,QAASP,GAAUA,EAAMX,aACzBA,GAC5B,CAACD,EAAQC,IAGNV,EAAmB/xD,UAAQ,IAC1B2xD,EAAOiC,OACLF,EAAY9yD,OAAQc,GAAS+xD,EAAS9B,EAAQjwD,IAD1BgyD,EAE1B,CAACA,EAAa/B,EAAQ8B,IAGnBd,EAAiB3yD,UAAQ,KAC7B,IAAK2xD,EAAQ,OAAOa,EAEpB,IAAMiB,EAAW7yD,GAAUmvD,GAC3B,OAAOyC,EACJ5wD,IAAKiyD,GAAC7xD,OAAAC,UACF4xD,GACHpB,SAAUoB,EAAEpB,SAAS7xD,OAAQkzD,GAAML,EAAS9B,EAAQmC,OAErDlzD,OAAQizD,GAAMA,EAAEpB,SAASpyD,SAC3B,CAACmyD,EAAQb,EAAQ/wD,IAGpBV,YAAU,KACR4xD,EAAiB,IAChB,CAACC,EAAiB1xD,SAGrB,IAAMu3B,EAAgBr3B,cACnB6nB,IACC,GAAKmqC,EAEL,OAAQnqC,EAAEsB,KACR,IAAK,YACHtB,EAAE0M,iBACFg9B,EAAkBlqC,GAChBA,EAAOmqC,EAAiB1xD,OAAS,EAAIunB,EAAO,EAAIA,GAElD,MACF,IAAK,UACHQ,EAAE0M,iBACFg9B,EAAkBlqC,GAAUA,EAAO,EAAIA,EAAO,EAAIA,GAClD,MACF,IAAK,QACHQ,EAAE0M,iBACEi9B,EAAiBF,KACnBE,EAAiBF,GAAen7B,WAChCa,GAAa,GACbq6B,EAAU,KAEZ,MACF,IAAK,SACHxpC,EAAE0M,iBACFyC,GAAa,GACbq6B,EAAU,MAIhB,CAACW,EAAMR,EAAkBF,EAAet6B,IAiC1C,OA7BAr3B,YAAU,KACR23B,SAASC,iBAAiB,UAAWF,GAC9B,KACLC,SAASE,oBAAoB,UAAWH,KAEzC,CAACA,IAGJ13B,YAAU,KACR,GAAI0yD,EAAQ1rD,SAAWqrD,EAAM,CAC3B,IAAMwB,EAAkBnB,EAAQ1rD,QAAQ8sD,8BACtBnC,QAEdkC,GACFA,EAAgBE,eAAe,CAAEC,MAAO,cAG3C,CAACrC,EAAeU,IAGnBryD,YAAU,KACJqyD,EACFT,EAAiB,GAGjBF,EAAU,KAEX,CAACW,IAEG,CACLZ,OAAAA,EACAC,UAAAA,EACAC,cAAAA,EACAC,iBAAAA,EACAC,iBAAAA,EACAY,eAAAA,EACAC,QAAAA,IG9GEuB,CAAgB,CAClB5B,KAAAA,EACAh7B,aAAAA,EACAi7B,OAAAA,EACAC,SAAAA,EACA7xD,OAAAA,IAGF,OACE5C,gBAACs0D,kBACCC,KAAMA,EACNh7B,aAAcA,EACdi7B,OAAQA,EACRC,SAAUA,EACVp6B,YAAaA,EACbvvB,KAAMA,EACNrK,QAASA,EACTi0D,WAAYA,EACZ5wC,OAAQA,EACR6vC,OAAQA,EACRC,UAAWA,EACXC,cAAeA,EACfC,iBAAkBA,EAClBC,iBAAkBA,EAClBY,eAAgBA,EAChBC,QAASA,EACTl0D,MAAOA,GACHC,KAQV60D,GAAQr2B,MAAQ80B,GAChBuB,GAAQvc,KDkC+C90C,QAACrE,SACtDA,EAAQY,MACRA,GAEDyD,EADIxD,EAAKC,EAAAuD,EAAAE,IAER,OACErE,gBAACqD,wBAASuvD,SAAuBlyD,SAAAA,EAAOM,UAAeL,GACpDb,ICxCP01D,GAAQY,MAAQlC,GAChBsB,GAAQzyD,KAAOszD,GACfb,GAAQc,MAAQjC,GCxEhB,IAAan2D,GAAaA,IACjBE,KAAKC,SAASC,SAAS,IAAIC,UAAU,EAAG,ICFpCg4D,GAAwC,CACnDvvD,GAAI,CACFjC,QAAS,UACTsB,SAAU,OACVm2B,SAAU,SAEZv1B,GAAI,CACFlC,QAAS,WACTsB,SAAU,OACVm2B,SAAU,SAEZt1B,GAAI,CACFnC,QAAS,WACTsB,SAAU,OACVm2B,SAAU,UA0BDg6B,GAtBcl3C,CAAAA,IAClB,CACLzgB,QAAS,CACPC,gBAAiB,iBACjBuM,MAAO,eAET7D,MAAO,CACL1I,gBAAiB,cACjBuM,MAAO,iBACPtM,YAAa,MACbE,YAAa,QACbC,YAAa,kBAEfu3D,KAAM,CACJ33D,gBAAiB,cACjBuM,MAAO,iBAOkBqrD,2JC/BzBC,GAAiBt3D,gBAAkC,CACvD22B,QAAQ,EACR4gC,YAAaA,OACbC,aAAcA,OACdxgC,WAAY,CAAEntB,QAAS,MACvBotB,WAAY,CAAEptB,QAAS,MACvB9F,UAAW,GACXD,UAAW,KAIA2zD,GAAoBA,IAAM12D,aAAWu2D,IAGrCI,GAGRl3D,QAACE,MAAEA,EAAKD,SAAEA,GAAUD,EACvB,OACEG,gBAAC22D,GAAe12D,UAASF,MAAOA,GAAQD,IAK/Bk3D,GAAgDh0D,QAAClD,SAC5DA,EAAQY,MACRA,EAAK0D,QACLA,GAAU,GAEXpB,EADIrC,EAAKC,EAAAoC,EAAA5B,KAEFw1D,YAAEA,EAAWC,aAAEA,EAAYxgC,WAAEA,EAAUjzB,UAAEA,EAASD,UAAEA,GACxD2zD,KAOIxyD,EAAYN,OAAAC,QAChBoG,IAAKgsB,EACL1X,aAPuBsL,IAAM2sC,IAQ7Bh4C,aAPuBsL,IAAM2sC,IAQ7Br4B,QAPkBC,IAAMm4B,IAQxBv2B,OAPiByH,IAAM+uB,IAQvBtyD,GAAIpB,EACJw+C,mBAAoBv+C,SACjB1C,SAAAA,EAAOM,UACPL,GAIL,OAAIyD,GAAWpE,EAAM8D,eAAehE,GAC3BE,EAAM+D,aAAajE,EAAUwE,GAKpCtE,gBAACqD,sBAAKiC,QAAQ,gBAAmBhB,GAC9BxE,IAgCMm3D,GAWTlxD,QAACgV,QACHA,EAAOjb,SACPA,EAAQqI,SACRA,EAAW,MAAK+uB,MAChBA,EAAQ,SAAQpsB,KAChBA,EAAO,KAAIrK,QACXA,EAAU,UAASy2D,UACnBA,GAAY,EAAIx2D,MAChBA,GAIDqF,EADIpF,EAAKC,EAAAmF,EAAAC,KAEFgwB,OACJA,EAAMM,WAINA,EAAUlzB,UACVA,EAASD,UACTA,GACE2zD,KAGEhV,ED5FgCqV,EACtChvD,EACA+uB,KAEA,IAAMkgC,EAAwB,CAC5BjvD,SAAU,WACVkd,OAAQ,KAIV,OAAQld,GACN,IAAK,MACH,OAAAnE,OAAAC,UACKmzD,GACHhvD,OAAQ,OACR9E,aAAc,OACA,UAAV4zB,EACA,CAAEjb,KAAM,KACE,QAAVib,EACA,CAAElb,MAAO,KACT,CAAEC,KAAM,MAAOzW,UAAW,qBAElC,IAAK,QACH,OAAAxB,OAAAC,UACKmzD,GACHn7C,KAAM,OACNid,WAAY,OACE,UAAVhC,EACA,CAAE5uB,IAAK,KACG,QAAV4uB,EACA,CAAE9uB,OAAQ,KACV,CAAEE,IAAK,MAAO9C,UAAW,qBAEjC,IAAK,SACH,OAAAxB,OAAAC,UACKmzD,GACH9uD,IAAK,OACLiT,UAAW,OACG,UAAV2b,EACA,CAAEjb,KAAM,KACE,QAAVib,EACA,CAAElb,MAAO,KACT,CAAEC,KAAM,MAAOzW,UAAW,qBAElC,IAAK,OACH,OAAAxB,OAAAC,UACKmzD,GACHp7C,MAAO,OACP2Q,YAAa,OACC,UAAVuK,EACA,CAAE5uB,IAAK,KACG,QAAV4uB,EACA,CAAE9uB,OAAQ,KACV,CAAEE,IAAK,MAAO9C,UAAW,qBAEjC,QACE,OAAO4xD,ICoCYD,CAAyBhvD,EAAU+uB,GAGpDmgC,EAAcH,EDnCS/uD,CAAAA,IAC7B,IAAMivD,EAAwB,CAC5BjvD,SAAU,WACVpH,MAAO,MACPsE,OAAQ,MACRvG,gBAAiB,UACjBG,YAAa,UACbF,YAAa,UACbG,YAAa,UACbsG,UAAW,iBAGb,OAAQ2C,GACN,IAAK,MACH,OAAAnE,OAAAC,UACKmzD,GACHhvD,OAAQ,OACR6T,KAAM,MACNid,WAAY,OACZ4gB,UAAW,OACXwd,WAAY,SAEhB,IAAK,QACH,OAAAtzD,OAAAC,UACKmzD,GACHn7C,KAAM,OACN3T,IAAK,MACLiT,UAAW,OACXg8C,YAAa,OACbzd,UAAW,SAEf,IAAK,SACH,OAAA91C,OAAAC,UACKmzD,GACH9uD,IAAK,OACL2T,KAAM,MACNid,WAAY,OACZsM,aAAc,OACd+xB,YAAa,SAEjB,IAAK,OACH,OAAAvzD,OAAAC,UACKmzD,GACHp7C,MAAO,OACP1T,IAAK,MACLiT,UAAW,OACX+7C,WAAY,OACZ9xB,aAAc,SAElB,QACE,OAAO4xB,ICfqBI,CAAervD,GAAY,GAE3D,OACEnI,gBAACqD,sBACC8E,SAAS,WACT7C,QAAQ,sBACJ5E,SAAAA,EAAOM,UACPL,GAGJX,gBAACg3D,QAAgBl3D,GAGhBk2B,GACCh2B,gBAACqD,sBACCgH,IAAKisB,EACL/xB,GAAInB,EACJ6C,KAAK,4BACY9C,EACjBzE,aAAc,EACdoc,UAAU,mCACNy7C,GAAazrD,GACb0rD,GAAgB/1D,GAChBqhD,QACAphD,SAAAA,EAAOqa,SAES,iBAAZA,EACN/a,gBAACkL,8BAASxK,SAAAA,EAAO8H,MAAOuS,GAExBA,EAIDm8C,GAAal3D,gBAACqD,wBAASg0D,QAAiB32D,SAAAA,EAAO+2D,iJCvH7CC,GAxCoC73D,QAACkb,QAChDA,EAAOjb,SACPA,EAAQqI,SACRA,EAAW,MAAK+uB,MAChBA,EAAQ,SAAQpsB,KAChBA,EAAO,KAAIrK,QACXA,EAAU,UAAS0gD,UACnBA,EAAY,IAAGC,WACfA,EAAa,IAAG8V,UAChBA,GAAY,EAAIxW,YAChBA,GAAc,EAAKz9C,WACnBA,GAAa,EAAKvC,MAClBA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,IAEFu2D,ECnBuB,SAAHrW,OAAIZ,YAC9BA,GAAc,EAAKS,UACnBA,EAAY,IAAGC,WACfA,EAAa,IAAGn+C,WAChBA,GAAa,cACQ,GAAEq+C,GAChBtrB,EAAQC,GAAal0B,WAAS2+C,GAC/BrqB,EAAaztB,SAAoB,MACjC0tB,EAAa1tB,SAAoB,MACjC24C,EAAe34C,SAA8B,MAC7C44C,EAAgB54C,SAA8B,MAG9CzF,EAAYyF,4BAA0B1K,MAAgBgL,QACtD9F,EAAYwF,4BAA0B1K,MAAgBgL,QAGtD0tD,EAAcr0D,cAAY,KAC1BU,IAGAu+C,EAAct4C,UAChBopC,aAAakP,EAAct4C,SAC3Bs4C,EAAct4C,QAAU,MAIrB8sB,GAAWurB,EAAar4C,UAC3Bq4C,EAAar4C,QAAUwhC,WAAW,KAChCzU,GAAU,GACVsrB,EAAar4C,QAAU,MACtBi4C,MAEJ,CAACnrB,EAAQmrB,EAAWl+C,IAGjB4zD,EAAet0D,cAAY,KAE3Bg/C,EAAar4C,UACfopC,aAAaiP,EAAar4C,SAC1Bq4C,EAAar4C,QAAU,MAIrB8sB,IAAWwrB,EAAct4C,UAC3Bs4C,EAAct4C,QAAUwhC,WAAW,KACjCzU,GAAU,GACVurB,EAAct4C,QAAU,MACvBk4C,KAEJ,CAACprB,EAAQorB,IAGNL,EAAmBx+C,cAAY,KAC/Bi/C,EAAct4C,UAChBopC,aAAakP,EAAct4C,SAC3Bs4C,EAAct4C,QAAU,OAEzB,IA4BH,OAzBAhH,YAAU,IACD,KACDq/C,EAAar4C,SACfopC,aAAaiP,EAAar4C,SAExBs4C,EAAct4C,SAChBopC,aAAakP,EAAct4C,UAG9B,IAGHhH,YAAU,KACR,IAAM03B,EAAiBR,IACH,WAAdA,EAAM1N,KAAoBsK,GAC5BC,GAAU,IAKd,OADA4D,SAASC,iBAAiB,UAAWF,GAC9B,KACLC,SAASE,oBAAoB,UAAWH,KAEzC,CAAC5D,IAEG,CACLA,OAAAA,EACA4gC,YAAAA,EACAC,aAAAA,EACA9V,iBAAAA,EACA1qB,WAAAA,EACAC,WAAAA,EACAnzB,UAAAA,EACAC,UAAAA,GD3EmBw0D,CAAgB,CACnClX,YAAAA,EACAS,UAAAA,EACAC,WAAAA,EACAn+C,WAAAA,IAGF,OACEjD,gBAAC+2D,IAAgBh3D,MAAO43D,GACtB33D,gBAACi3D,kBACCl8C,QAASA,EACT5S,SAAUA,EACV+uB,MAAOA,EACPpsB,KAAMA,EACNrK,QAASA,EACTy2D,UAAWA,EACXx2D,MAAOA,GACHC,GAEHb,KAST43D,GAAQxzD,QAAU8yD,GAClBU,GAAQ5xD,QDkBqD3B,QAACrE,SAC5DA,EAAQY,MACRA,GAEDyD,EADIxD,EAAKC,EAAAuD,EAAAE,KAEF2xB,OAAEA,EAAMM,WAAEA,EAAUlzB,UAAEA,EAASD,UAAEA,GAAc2zD,KAErD,OAAK9gC,EAKHh2B,gBAACqD,sBACCgH,IAAKisB,EACL/xB,GAAInB,EACJ6C,KAAK,4BACY9C,SACbzC,SAAAA,EAAOM,UACPL,GAEHb,GAZI,wCGhFaa,GAAsBX,gBAAC2a,oBAAcha,6CCAhCd,QAACgc,MAC5BA,EAAK/b,SACLA,GAGcD,EAFXc,EAAKC,EAAAf,EAAAuB,IAIR,OACEpB,gBAAC4b,kBAAgBC,MAAOA,GAAWlb,GAChCb,mBCPiBD,QAAC0c,IACvBA,EAAGzR,KACHA,EAAIpK,MACJA,EAAK8b,SACLA,EAAQ3X,QACRA,GACYhF,GAEN4c,WAAEA,EAAUC,cAAEA,GCZQm7C,MAC5B,IAAOp7C,EAAYC,GAAiB3a,YAAS,GAE7C,MAAO,CAAE0a,WAAAA,EAAYC,cAAAA,IDSiBm7C,GAEtC,OACE73D,gBAACsc,IACCC,IAAKA,EACLzR,KAAMA,EACNpK,MAAOA,EACP8b,SAAUA,EACVC,WAAYA,EACZC,cAAeA,EACf7X,QAASA,mBEpBOlE,GAAsBX,gBAAC0d,oBAAc/c,uNCIbA,GACrCX,gBAACwyB,oBAAc7xB,0CCH4BA,IAClD,IAAMm3D,EAAiBv2B,GAAiB5gC,GAExC,OAAOX,gBAACiiC,oBAAiB61B,EAAoBn3D,oICHId,QAAC0E,GAElDA,EAAEorB,KAEFA,EAAIsF,MAEJA,EAAKoF,YAELA,EAAW+J,kBAEXA,GAGDvkC,EADIc,EAAKC,EAAAf,EAAAuB,IAGFo4B,EAAQ2K,GAAiBlP,EAAOoF,EAAa+J,GACnD,OAEEpkC,gBAAC6kC,kBAAatgC,GAAIA,EAAIorB,KAAMA,EAAMsF,MAAOA,GAAWuE,EAAW74B,yFClBLA,IAE5D,IAAMo3D,EAAsBv1B,GAAsB7hC,GAElD,OAAOX,gBAACijC,oBAAsB80B,EAAyBp3D,4CCJDA,IACtD,IAAMq3D,EAAmBx0B,KACzB,OAAOxjC,gBAAC6jC,oBAAmBm0B,EAAsBr3D,iWCkC1BqC,QAACouB,KACxBA,GAE8BpuB,EAD3BrC,EAAKC,EAAAoC,EAAAqB,IAER,OAAOrE,gBAAC8c,uBAAMP,IAAK6U,GAAUzwB,qBAjCRd,QAAC0c,IACtBA,EAAGlR,MACHA,EAAK3K,MACLA,GAGUb,EADPc,EAAKC,EAAAf,EAAAuB,KAEFsK,SAAEA,EAAQ4T,UAAEA,GAAc3T,aAE1BssD,EAAa5sD,EACf,CACE1F,KAAM+F,EAASL,EAAO,CAAEiU,UAAAA,IACxB1T,OAAQF,EAASL,EAAO,CAAEiU,UAAAA,KAE5B,GAEJ,OACEtf,gBAACuL,0BAAW5K,QAAWD,SAAAA,EAAOM,WAC5BhB,gBAAC8c,yBACKm7C,GACJl9C,QAAS,QAAUwB,EAAM,KACzBxb,MAAM,OACNsE,OAAO,cACH3E,SAAAA,EAAOmc,uDC7BiClc,IAClD,IAAAu3D,EAA8BjrB,GAAetsC,IAAzCZ,MAAEA,GAAqBm4D,EAAXC,EAASv3D,EAAAs3D,EAAA92D,IACzB+2D,EAAUv5B,UAAY7+B,EACtB,IAAM+3D,EAAiBv2B,GAAiB5gC,GACxC,OAAOX,gBAACiiC,oBAAiB61B,EAAoBK,4BCJIt4D,QAACo1B,MAClDA,EAAKoF,YACLA,EAAW+J,kBACXA,GAEDvkC,EADIc,EAAKC,EAAAf,EAAAuB,IAEF+2D,EAAYlrB,GAAetsC,GAC3By3D,EAAiBj0B,GACrBlP,EACAoF,EACA+J,GAQF,OACEpkC,gBAAC6kC,oBAAiBuzB,EAAoBD,GAAWz/B,SAL7Bh1B,IACpBy0D,EAAU3wC,SAAS9jB,oCCfuC/C,IAC5D,IAAMw3D,EAAYlrB,GAAetsC,GAC3Bo3D,EAAsBv1B,GAAsB7hC,GAClD,OAAOX,gBAACijC,oBAAsB80B,EAAyBI,8BCHDx3D,IACtD,IAAMw3D,EAAYlrB,GAAetsC,GAE3Bq3D,EAAmBx0B,KACzB,OAAOxjC,gBAAC6jC,oBAAmBm0B,EAAsBG,wBtFwCzBt4D,QAAeC,SACvCA,EAAQ6gC,UACRA,GAAY,EAAK03B,UACjBA,EAAS7wC,SACTA,EAAWA,UAEc3nB,EADtBc,EAAKC,EAAAf,EAAAuB,IAEFk3D,EAAc9qB,qBACpBtrC,YAAU,KACRslB,EAAS8wC,EAAOjrB,SACf,CAACirB,EAAOjrB,SAEX,IAAMkrB,EAAY3vD,SAAgD,IAC5D4vD,EAAa5vD,SAAiB,IAS9BkkC,EAAkB2rB,IACtB,GAAI93B,EAAW,CACb,IAE2C+3B,EADrCC,EADeH,EAAWtvD,QAAQ0vD,QAAQH,GACf,EAC7BE,EAAYH,EAAWtvD,QAAQ7G,cACjCq2D,EAAAH,EAAUrvD,QAAQsvD,EAAWtvD,QAAQyvD,MAArCD,EAAkDn4B,QACzC+3B,EAAOO,UAChBP,EAAOO,SAASP,EAAOjrB,UAKvBnpB,EAAe,CACnB4R,OAAQ6K,EACRmM,eAAAA,EACAzF,YAtBkBA,CAAC1X,EAActlB,KACjCkuD,EAAUrvD,QAAQymB,GAAQtlB,EACrBmuD,EAAWtvD,QAAQvG,SAASgtB,IAC/B6oC,EAAWtvD,QAAQ4lB,KAAKa,IAoB1Bod,oBAAqBD,EACrBE,iBAAmBrd,GACjB6oC,EAAWtvD,QAAQ0vD,QAAQjpC,KAAU6oC,EAAWtvD,QAAQ7G,OAAS,EAC7D,OACA,QAaR,OAVAH,YAAU,KAEyC,IAAA42D,EADjD,GAAIn4B,EACF,GAAI03B,GAAaE,EAAUrvD,QAAQmvD,UACjCS,EAAAP,EAAUrvD,QAAQmvD,KAAlBS,EAA8Bv4B,aACzB,GAAIi4B,EAAWtvD,QAAQ,GAAI,CAAA,IAAA6vD,SAChCA,EAAAR,EAAUrvD,QAAQsvD,EAAWtvD,QAAQ,MAArC6vD,EAA0Cx4B,UAG7C,CAACI,EAAW03B,IAGbr4D,gBAAC6sC,GAAa5sC,UAASF,MAAOmkB,GAC5BlkB,gBAACg5D,wBAAUr4D,GAAQb,4BuFlG2Ba,IAElD,IAAMw3D,EAAYlrB,GAAetsC,IAG3B+5B,UACJA,EAASC,aACTA,EAAYtc,UACZA,EAASE,aACTA,EAAY8nB,SACZA,EAAQ19B,aACRA,EAAYs9B,qBACZA,EAAoBE,mBACpBA,EAAkBD,wBAClBA,EAAuBE,sBACvBA,EAAqBiB,YACrBA,EAAW5I,YACXA,EAAWqJ,WACXA,EAAUlO,cACVA,EAAaoO,YACbA,GACEtC,GAAiB/kC,GAGfi6B,EAAWr4B,cACdxC,IACKo4D,EAAU3wC,UACZ2wC,EAAU3wC,SAASznB,GAIjBY,EAAMglC,YAAc5lC,EAAMsC,UAAY1B,EAAM0B,QAAU,IACxD1B,EAAMglC,WAAW5lC,GAIfsmC,EAASn9B,UACXm9B,EAASn9B,QAAQnJ,MAAQA,IAG7B,CAACo4D,EAAWx3D,EAAO0lC,IAIf9D,EAAehgC,cAClB6nB,IACC,IAAM3nB,EAAW2nB,EAAEod,cAAcznC,MAAMkK,MAAM,EAAGtJ,EAAM0B,QAAU,GAChEu4B,EAASn4B,GAGL4jC,EAASn9B,UACXm9B,EAASn9B,QAAQnJ,MAAQ0C,IAG7B,CAAC9B,EAAM0B,OAAQu4B,EAAUyL,IAG3B,OACErmC,gBAACmrC,oBACKxqC,EACAw3D,GACJv9B,SAAUA,EACVF,UAAWA,EACXC,aAAcA,EACdtc,UAAWA,EACXE,aAAcA,EACd8nB,SAAUA,EACV19B,aAAcA,EACds9B,qBAAsBA,EACtBE,mBAAoBA,EACpBD,wBAAyBA,EACzBE,sBAAuBA,EACvBiB,YAAaA,EACb9E,aAAcA,EACd9D,YAAaA,EACbqJ,WAAYA,EACZlO,cAAeA,EACfoO,YAAaA,EACbjC,WAAYplC,EAAMolC,sCC/E2BlmC,QAACo5D,YAClDA,EAAcj5D,gBAACgV,IAAY5J,YAAa,KAAM8tD,WAC9CA,EAAal5D,gBAACuX,IAAanM,YAAa,MAEzCvL,EADIc,EAAKC,EAAAf,EAAAuB,IAEF+2D,EAAYlrB,GAAetsC,GAEjCw4D,EACEp1B,GAAiBo0B,IADbl0B,UAAEA,EAASC,aAAEA,GAAgCi1B,EAAfC,EAAax4D,EAAAu4D,EAAA90D,IAGjD,OACErE,gBAACihC,oBACKm4B,GACJ35D,KAAMwkC,EAAY,OAAS,WAC3B9C,aAAa,EACbnlB,MACEhc,gBAACqD,QACCwB,QAASA,KACFlE,EAAMsC,YACTihC,GAAcD,KAIjBA,EAAYg1B,EAAcC,4BCzBWv4D,IAC9C,IAAIw3D,EAAYlrB,GAAetsC,GAC/Bw3D,EAAUt2B,SAAWs2B,EAAUp4D,MAC/B,IAAMs5D,EAAej/B,GAAez5B,GACpC,OAAOX,gBAACq+B,oBAAeg7B,EAAkBlB,0BCJKx3D,IAE9C,IAAMw3D,EAAYlrB,GAAetsC,GAG3B24D,EAActrB,GAAchqC,OAAAC,UAC7BtD,GACHZ,WAA2ByB,IAApB22D,EAAUp4D,MAAsBgmD,OAAOoS,EAAUp4D,YAASyB,EACjEgmB,SAAWznB,IAETo4D,EAAU3wC,SAASznB,SAEnBY,EAAM6mB,UAAN7mB,EAAM6mB,SAAWznB,OAKrB,OAAOC,gBAACmwC,oBAAexvC,EAAW24D,EAAiBnB,0BCjBLx3D,IAC9C,IAAMw3D,EAAYlrB,GAAetsC,GAC3B44D,EAAe56B,GAAeh+B,GACpC,OAAOX,gBAACo/B,oBAAem6B,EAAkBpB,4BCHSx3D,IAClD,IAAMw3D,EAAYlrB,GAAetsC,GAC3B64D,EAAgB55B,GAAiBj/B,GACvC,OAAOX,gBAAC+/B,oBAAiBy5B,EAAmBrB,6BCF5Cx3D,IAEA,IAAMw3D,EAAYlrB,GAAetsC,GACfqjC,EAAepjC,EAAKmgC,GAAkBpgC,GAAvBS,IAEjC,OAAOpB,gBAACihC,oBAAkB+C,EAAqBm0B,yXCPpBt4D,QAACmB,UAC5BA,EAASoxC,MACTA,EAAKjqC,SACLA,EAAW,YACQtI,GACbo0B,QACJA,EAAO1pB,MACPA,EAAK9J,QACLA,EAAO8wC,SACPA,EAAQC,WACRA,EAAU9wC,MACVA,EAAK+wC,OACLA,EAAMC,WACNA,EAAUC,SACVA,EAAQC,QACRA,GACER,KAEEqoB,EAAgB,CACpBC,QAAS,CACPpxD,IAAK,EACL2T,KAAM,GAER09C,SAAU,CACRrxD,IAAK,EACL0T,MAAO,GAET49C,WAAY,CACVxxD,OAAQ,EACR6T,KAAM,GAER49C,YAAa,CACXzxD,OAAQ,EACR4T,MAAO,IAET7T,GAGI2xD,EAAuBA,IAC3B95D,gBAACmyC,IACC1xC,QAASA,EACT8wC,SAAUA,EACVM,KAAM5d,EACN1pB,MAAOA,EACP6nC,MAAOA,EACPZ,WAAYA,EACZ9wC,MAAOA,EACP+wC,OAAQA,EACRC,WAAYA,EACZC,SAAUA,EACVC,QAASA,EACTpX,KAAMA,IAAMwX,OAIV+nB,EAAmB/4D,EACvBhB,EAAM+D,aAAa/C,EAAW,GAAI84D,KAElC95D,gBAACqD,sBAAK8E,SAAU,WAAYkd,OAAQ,KAAWo0C,GAC5CK,KAIL,OAAO7lC,EAAU8lC,EAAmB,wLC3Dcp5D,IAElD,IAAQZ,MAAO2B,GAAoBf,GAE7BZ,MACJA,EAAK66B,SACLA,EAAQF,UACRA,EAASC,aACTA,EAAYtc,UACZA,EAASE,aACTA,EAAY8nB,SACZA,EAAQ19B,aACRA,EAAYs9B,qBACZA,EAAoBE,mBACpBA,EAAkBD,wBAClBA,EAAuBE,sBACvBA,EAAqBiB,YACrBA,EAAW9E,aACXA,EAAY9D,YACZA,EAAWqJ,WACXA,EAAUlO,cACVA,EAAaoO,YACbA,EAAWD,eACXA,GACErC,GAAiB/kC,GAKrB,OACEX,gBAACmrC,oBACKxqC,GACJZ,WALqCyB,IAApBE,EAAgCA,EAAkB3B,EAMnE66B,SAAUA,EACVF,UAAWA,EACXC,aAAcA,EACdtc,UAAWA,EACXE,aAAcA,EACd8nB,SAAUA,EACV19B,aAAcA,EACds9B,qBAAsBA,EACtBE,mBAAoBA,EACpBD,wBAAyBA,EACzBE,sBAAuBA,EACvBiB,YAAaA,EACb9E,aAAcA,EACd9D,YAAaA,EACbqJ,WAAYA,EACZlO,cAAeA,EACfmO,eAAgBA,EAChBC,YAAaA,EACbjC,WAAYplC,EAAMolC,yDCrD+BlmC,QAAC6kD,YACtDA,EAAWC,WACXA,EAAUC,aACVA,EAAYC,SACZA,EAAW,GAAEC,gBACbA,EAAeC,iBACfA,EAAgBC,qBAChBA,GAAuB,EAAKC,aAC5BA,GAAe,EAAIC,eACnBA,EAAiB,EAACC,qBAClBA,GAAuB,EAAKr6C,KAC5BA,EAAO,KAAIrK,QACXA,EAAU,UAASD,MACnBA,EAAQ,UAASE,MACjBA,GAEDb,EADIc,EAAKC,EAAAf,EAAAuB,KAEFgkD,mBAAEA,GCvBwB4U,EAChCtV,EACAC,EACAO,KAEA,IAAOE,EAAoB6U,GAAyBl4D,WAElD,IAsDF,OApDAG,YAAU,KAiDR+3D,EA/CoCC,MAClC,IAAMC,EAAmC,GAEzC,GAAIxV,GAAcO,EAEhB,IAAK,IAAIr2B,EAAI,EAAGA,GAAK81B,EAAY91B,IAC/BsrC,EAAYrrC,KAAKD,OAEd,CAELsrC,EAAYrrC,KAAK,GAGjB,IAAIsrC,EAAYh8D,KAAKorB,IACnB,EACAk7B,EAActmD,KAAK4L,OAAOk7C,EAAiB,GAAK,IAE9CmV,EAAUj8D,KAAKqrB,IAAIk7B,EAAa,EAAGyV,EAAYlV,EAAiB,GAGhEmV,GAAW1V,EAAa,IAC1B0V,EAAU1V,EAAa,EACvByV,EAAYh8D,KAAKorB,IAAI,EAAG6wC,GAAWnV,EAAiB,KAIlDkV,EAAY,GACdD,EAAYrrC,KAAK,OAInB,IAAK,IAAID,EAAIurC,EAAWvrC,GAAKwrC,EAASxrC,IACpCsrC,EAAYrrC,KAAKD,GAIfwrC,EAAU1V,EAAa,GACzBwV,EAAYrrC,KAAK,OAInBqrC,EAAYrrC,KAAK61B,GAGnB,OAAOwV,GAGaD,KACrB,CAACxV,EAAaC,EAAYO,IAEtB,CACLE,mBAAAA,IDvC6B4U,CAC7BtV,EACAC,EACAO,GAGF,OACEllD,gBAACykD,kBACCC,YAAaA,EACbC,WAAYA,EACZC,aAAcA,EACdC,SAAUA,EACVC,gBAAiBA,EACjBC,iBAAkBA,EAClBC,qBAAsBA,EACtBC,aAAcA,EACdC,eAAgBA,EAChBC,qBAAsBA,EACtBr6C,KAAMA,EACNrK,QAASA,EACTD,MAAOA,EACP4kD,mBAAoBA,EACpB1kD,MAAOA,GACHC,2CExCyCd,QAACo5D,YAClDA,EAAcj5D,gBAACgV,IAAY5J,YAAa,KAAM8tD,WAC9CA,EAAal5D,gBAACuX,IAAanM,YAAa,MAEzCvL,EADIc,EAAKC,EAAAf,EAAAuB,IAER+3D,EAAsDp1B,GAAiBpjC,IAAjEsjC,UAAEA,EAASC,aAAEA,GAAgCi1B,EAAfC,EAAax4D,EAAAu4D,EAAA90D,IAEjD,OACErE,gBAACihC,oBACKm4B,GACJ35D,KAAMwkC,EAAY,OAAS,WAC3B9C,aAAa,EACbnlB,MACEhc,gBAACqD,QACCwB,QAASA,KACFlE,EAAMsC,YACTihC,GAAcD,KAIjBA,EAAYg1B,EAAcC,2OCvBWv4D,IAE9C,IAAM04D,EAAej/B,GAAez5B,GAEpC,OAAOX,gBAACq+B,oBAAeg7B,EAAkB14D,8HCJKA,IAE9C,IAAM24D,EAActrB,GAAertC,GAGnC,OAAOX,gBAACmwC,oBAAexvC,EAAW24D,0ICLY34D,IAE9C,IAAM44D,EAAe56B,GAAeh+B,GAEpC,OAAOX,gBAACo/B,oBAAem6B,EAAkB54D,sECJSA,IAElD,IAAM64D,EAAgB55B,GAAiBj/B,GAEvC,OAAOX,gBAAC+/B,oBAAiBy5B,EAAmB74D,uBCJ5CA,IAGA,IAAMqjC,EAAkBjD,GAAkBpgC,GAE1C,OAAOX,gBAACihC,oBAAkB+C,EAAqBrjC,2HCLpBd,QAACo1B,MAE5BA,EAAKz0B,MAELA,EAAKC,QAGLA,EAAOu9C,eAEPA,GACiBn+C,GAEXo+C,cAAEA,EAAaC,iBAAEA,GCfUoc,MACjC,IAAOrc,EAAeC,GAAoBn8C,WAAmB,IAC7D,MAAO,CAAEk8C,cAAAA,EAAeC,iBAAAA,IDaoBoc,GAC5C,OACEt6D,gBAAC+9C,IACC9oB,MAAOA,EACPz0B,MAAOA,EACPC,QAASA,EACTw9C,cAAeA,EACfC,iBAAkBA,EAClBF,eAAgBA,wJEpByBn+C,QAACozC,OAC9CA,EAAS,MAAKxtC,KACdA,EAAI+C,KACJA,EAAI6iD,QACJA,EAAOkP,aACPA,EAAYC,aACZA,EAAYn5C,UACZA,GAAY,EAAKmT,SACjBA,EAAW,EAACuf,SACZA,GAEYl0C,EADTc,EAAKC,EAAAf,EAAAuB,KAEF8xC,WACJA,EAAUC,aACVA,EAAYC,aACZA,EAAYE,SACZA,EAAQD,aACRA,EAAYE,aACZA,EAAYC,iBACZA,EAAgB1uC,YAChBA,GCQqBjF,CAAAA,QAACwrD,QACxBA,EAAU,UAAiBkP,aAC3BA,EAAYC,aACZA,EAAYC,UACZA,EAASz9C,QACTA,EAAW9B,CAAAA,IACT42B,GAAY,QAAS,QAAS52B,MAEjBrb,EACTwzC,EAAezqC,SAAyB,MACxC0qC,EAAW1qC,SAAyB,OACnC2qC,EAAcmnB,GAAmB34D,WAAsB,OACvDqxC,EAAcunB,GAAmB54D,WAAwB,OACzDmxC,EAAY0nB,GAAiB74D,WAAwB,OACrDoxC,EAAc0nB,GAAmB94D,WACtC04D,GAAa,MAGTjnB,EAAmBjxC,cACtB62B,UACO0hC,SAAIC,EAAG3hC,EAAM1a,OAAOs8C,cAAbD,EAAqB,GAGlC,GAFAJ,EAAgB,OAEXG,EAGH,OAFA99C,EAAQ,yBACR29C,EAAgB,oBAIlB,GAAIG,EAAKhwD,KAAOugD,EAKd,OAJAruC,kBAAwB5e,KAAK6wC,MAAMoc,uBACnCsP,kBACkBv8D,KAAK6wC,MAAMoc,kBAK/B,GAAImP,EAAc,CAChB,IAAMS,EAAkBT,EAAaM,GACrC,GAAIG,EAGF,OAFAj+C,EAAQi+C,QACRN,EAAgBM,GAKpBL,EAAcvmB,IAAIC,gBAAgBwmB,IAE9BA,EAAKr7D,KAAK8jC,WAAW,WA7EE23B,EAC/BC,EACAN,KAEA,IAAMO,EAAQvhC,SAAS+R,cAAc,SACrCwvB,EAAMC,QAAU,WAEhBD,EAAME,iBAAmB,KACvBF,EAAMG,YAAc,GAGtBH,EAAMI,UAAY,KAChB,IAAMC,EAAS5hC,SAAS+R,cAAc,UACtC6vB,EAAO16D,MAAQq6D,EAAMM,WACrBD,EAAOp2D,OAAS+1D,EAAMO,YAEtB,IAAMC,EAAMH,EAAOI,WAAW,MAC9B,GAAID,EAAK,CACPA,EAAIE,UAAUV,EAAO,EAAG,EAAGK,EAAO16D,MAAO06D,EAAOp2D,QAChD,IAAM02D,EAAmBN,EAAOO,UAAU,cAC1CnB,EAAgBkB,GAGlB1nB,IAAI4nB,gBAAgBb,EAAM7+C,MAG5B6+C,EAAM7+C,IAAM83B,IAAIC,gBAAgB6mB,IAoD1BD,CAAkBJ,EAAMD,GAGtBN,IACFG,EAAgBI,GAChBP,EAAaO,KAGjB,CAACzP,EAASkP,EAAcC,IAY1B,OAPAt4D,YAAU,IACD,KACDgxC,GAAYmB,IAAI4nB,gBAAgB/oB,GAChCC,GAAckB,IAAI4nB,gBAAgB9oB,IAEvC,CAACD,EAAYC,IAET,CACLD,WAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,SAAAA,EACAC,aAAAA,EACAC,iBAAAA,EACA1uC,YAjBkBA,KAAA,IAAAo3D,EAAA,cAAAA,EAAM7oB,EAAanqC,gBAAbgzD,EAAsBC,WDnE5CC,CAAU,CAAEnpB,OAAAA,EAAQoY,QAAAA,EAASkP,aAAAA,EAAcC,aAAAA,IAiBzC6B,EAbAtoB,IAECR,EAEDA,EAAa9zC,KAAK8jC,WAAW,UACxB,QACEgQ,EAAa9zC,KAAK8jC,WAAW,UAC/B,QAEA,YAPT,GAaF,OACEvjC,gBAACgzC,kBACCluC,YAAaA,EACbmuC,OAAQA,EACR5xB,UAAWA,EACXmT,SAAUA,EACV/uB,KAAMA,EACN+C,KAAMA,EACN6iD,QAASA,EACTkP,aAAcA,EACdC,aAAcA,EACdpnB,aAAcA,EACdI,iBAAkBA,EAClBD,aAAcA,EACdD,SAAUA,EACVD,aAAcA,EACdH,WAAYA,EACZC,aAAcA,EACdY,SAAUsoB,GACN17D,mQjGRe,SACvBgvB,EACAolB,EACAC,YADAD,IAAAA,EAAkB,aAClBC,IAAAA,EAAoB,IAEpBL,GAAc5C,WAAWF,KAAKliB,EAAMolB,EAAYC,GAChDL,GAAc5C,WAAW+C,OAAOnlB,EAAMolB,yEmG/ChBunB,KACf,CAILlM,MAAOA,CACL3vD,EACA8J,EACAqQ,EACA2f,IACGs2B,GAAUpwD,EAAS8J,EAAOqQ,EAAa2f,GAK5Cvf,KAAMA,CAACzQ,EAAeqQ,EAAsB2f,IAC1Cu2B,GAAcvmD,EAAOqQ,EAAa2f,GAKpCtf,QAASA,CAAC1Q,EAAeqQ,EAAsB2f,IAC7Cw2B,GAAiBxmD,EAAOqQ,EAAa2f,GAKvCpf,QAASA,CAAC5Q,EAAeqQ,EAAsB2f,IAC7Cy2B,GAAiBzmD,EAAOqQ,EAAa2f,GAKvCrf,MAAOA,CAAC3Q,EAAeqQ,EAAsB2f,IAC3C02B,GAAe1mD,EAAOqQ,EAAa2f,GAKrCi2B,OAASjsD,GAAe2sD,GAAY3sD,GAKpCosD,UAAWA,IAAMQ"}
|
|
1
|
+
{"version":3,"file":"web.cjs.production.min.js","sources":["../src/utils/id.ts","../src/components/Accordion/Accordion/Accordion.style.ts","../src/components/Accordion/Accordion/Accordion.view.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Accordion/Accordion/Accordion.state.ts","../src/components/Text/Text/Text.style.ts","../src/components/Text/Text/Text.view.tsx","../src/components/Text/Text.tsx","../src/components/Icon/Icon.tsx","../src/components/Alert/Alert/Alert.view.tsx","../src/components/Alert/Alert/Alert.style.tsx","../src/components/AspectRatio/AspectRatio/AspectRatio.view.tsx","../src/components/Avatar/Avatar/Avatar.style.tsx","../src/components/Avatar/Avatar/Avatar.view.tsx","../src/components/Badge/Badge/Badge.style.tsx","../src/components/Badge/Badge/Badge.view.tsx","../src/components/Link/Link/Link.style.ts","../src/components/Link/Link/Link.view.tsx","../src/components/Link/Link.tsx","../src/components/Link/Link/Link.state.ts","../src/components/Loader/Loader/Loader.style.ts","../src/components/Loader/Loader/Loader.view.tsx","../src/components/Loader/Loader.tsx","../src/components/Button/Button/Button.style.ts","../src/components/Button/Button/Button.view.tsx","../src/components/Button/Button.tsx","../src/components/Button/Button/Button.state.ts","../src/components/Card/Card/Card.style.ts","../src/components/Card/Card/Card.context.ts","../src/components/Card/Card/Card.view.tsx","../src/components/Card/Card.tsx","../src/components/Carousel/Carousel/Carousel.state.ts","../src/components/Carousel/Carousel/Carousel.style.ts","../src/components/Carousel/Carousel/Carousel.context.ts","../src/components/Carousel/Carousel/Carousel.view.tsx","../src/components/Carousel/Carousel.tsx","../src/components/Chart/Chart/ChartColors.ts","../src/components/Chart/Chart/Chart.style.ts","../src/components/Chart/Chart/BarChart.tsx","../src/components/Chart/Chart/LineChart.tsx","../src/components/Chart/Chart/PieChart.tsx","../src/components/Chart/Chart/Chart.view.tsx","../src/components/Chart/Chart/Chart.state.ts","../src/components/CookieConsent/CookieConsent/CookieConsent.view.tsx","../src/components/CookieConsent/CookieConsent/CookieConsent.state.ts","../src/components/CookieConsent/CookieConsent/CookieConsent.style.ts","../src/components/ContextMenu/ContextMenu/ContextMenu.style.ts","../src/components/ContextMenu/ContextMenu/ContextMenu.view.tsx","../src/components/ContextMenu/ContextMenu.tsx","../src/components/ContextMenu/ContextMenu/ContextMenu.state.ts","../src/components/Form/Select/Select/Select.state.ts","../src/components/Input/HelperText/HelperText.tsx","../src/components/Input/FieldContainer/FieldContainer.tsx","../src/components/Input/Input.style.ts","../src/components/Input/FieldContent/FieldContent.tsx","../src/components/Input/FieldIcons/FieldIcons.tsx","../src/components/Form/Label/Label/Label.style.ts","../src/components/Form/Label/Label/Label.view.tsx","../src/components/Form/Label/Label.tsx","../src/components/Input/FieldLabel/FieldLabel.tsx","../src/components/Input/FieldWrapper/FieldWrapper.tsx","../src/components/Form/Select/Select/Select.style.ts","../src/components/Form/Select/Select/Select.view.tsx","../src/components/Form/Switch/Switch/Switch.state.ts","../src/components/Form/Switch/Switch/Switch.style.ts","../src/components/Form/Switch/Switch/Switch.view.tsx","../src/components/Form/TextArea/TextArea/TextArea.state.ts","../src/components/Form/TextArea/TextArea/TextArea.view.tsx","../src/components/Form/TextField/TextField/TextField.state.ts","../src/components/Form/TextField/TextField/TextField.view.tsx","../src/components/Form/Checkbox/Checkbox/Checkbox.state.ts","../src/components/Form/Checkbox/Checkbox/Checkbox.style.ts","../src/components/Form/Checkbox/Checkbox/Checkbox.view.tsx","../src/components/Form/CountryPicker/CountryPicker/CountryPicker.state.ts","../src/components/Form/CountryPicker/CountryPicker/CountryPicker.style.ts","../src/components/Form/CountryPicker/CountryPicker/CountryPicker.view.tsx","../src/components/Form/DatePicker/DatePicker/DatePicker.state.ts","../src/components/Form/DatePicker/DatePicker/DatePicker.view.tsx","../src/components/Form/Password/Password/Password.state.ts","../src/components/Form/ComboBox/ComboBox/ComboBox.state.ts","../src/components/Form/ComboBox/ComboBox/ComboBox.view.tsx","../src/components/OTPInput/OTPInput/OTPInput.state.ts","../src/components/OTPInput/OTPInput/sync-timeouts.ts","../src/components/OTPInput/OTPInput/OTPInput.view.tsx","../src/components/Formik/Formik.Form.tsx","../src/components/Formik/Formik.Hook.tsx","../src/components/Slider/Slider/Slider.state.ts","../src/components/Slider/Slider/Slider.style.ts","../src/components/Slider/Slider/Slider.view.tsx","../src/components/Message/Message/Message.store.tsx","../src/components/Message/Message/Message.style.ts","../src/components/Message/Message/Message.view.tsx","../src/components/Uploader/Uploader/Uploader.view.tsx","../src/components/Modal/Modal/Modal.store.tsx","../src/components/Modal/Modal/Modal.style.ts","../src/components/Modal/Modal/Modal.view.tsx","../src/components/Modal/Modal.tsx","../src/components/Modal/Modal/Modal.layout.tsx","../src/components/NavigationMenu/NavigationMenu/NavigationMenu.state.ts","../src/components/NavigationMenu/NavigationMenu/NavigationMenu.style.ts","../src/components/NavigationMenu/NavigationMenu/NavigationMenu.view.tsx","../src/components/NavigationMenu/NavigationMenu.tsx","../src/components/Table/Table/Table.context.tsx","../src/components/Table/Table/Table.style.ts","../src/components/Table/Table/Table.view.tsx","../src/components/Table/Table.tsx","../src/components/Tabs/Tabs/Tabs.state.ts","../src/components/Tabs/Tabs/TabHeader.tsx","../src/components/Tabs/Tabs/Tabs.view.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Title/Title/Title.style.ts","../src/components/Title/Title/TypewriterEffect.tsx","../src/components/Title/Title/Title.view.tsx","../src/components/Title/Title/Title.state.ts","../src/components/Toggle/Toggle/Toggle.view.tsx","../src/components/Toggle/Toggle.tsx","../src/components/Toggle/Toggle/Toggle.state.ts","../src/components/ToggleGroup/ToggleGroup/ToggleGroup.view.tsx","../src/components/DragAndDrop/DragAndDrop/DragAndDrop.view.tsx","../src/components/DragAndDrop/DragAndDrop.tsx","../src/components/DragAndDrop/DragAndDrop/DragAndDrop.state.ts","../src/components/DropdownMenu/DropdownMenu/DropdownMenu.style.ts","../src/components/DropdownMenu/DropdownMenu/DropdownMenu.view.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/DropdownMenu/DropdownMenu/DropdownMenu.state.ts","../src/components/HoverCard/HoverCard/HoverCard.state.ts","../src/components/HoverCard/HoverCard/HoverCard.view.tsx","../src/components/HoverCard/HoverCard.tsx","../src/components/HoverCard/HoverCard/HoverCard.style.ts","../src/hooks/useRect.ts","../src/components/Menubar/Menubar/Menubar.style.ts","../src/components/Menubar/Menubar/Menubar.view.tsx","../src/components/Menubar/Menubar.tsx","../src/components/Menubar/Menubar/Menubar.state.ts","../src/components/Pagination/Pagination/Pagination.style.ts","../src/components/Pagination/Pagination/Pagination.view.tsx","../src/components/Separator/Separator/Separator.style.ts","../src/components/Separator/Separator/Separator.view.tsx","../src/components/Separator/Separator.tsx","../src/components/Sidebar/Sidebar/Sidebar.style.ts","../src/components/Sidebar/Sidebar/Sidebar.view.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Sidebar/Sidebar/Sidebar.state.ts","../src/components/Resizable/Resizable/Resizable.state.ts","../src/components/Resizable/Resizable/Resizable.style.ts","../src/components/Resizable/Resizable/Resizable.view.tsx","../src/components/Resizable/Resizable.tsx","../src/components/Toast/Toast/Toast.style.ts","../src/components/Toast/Toast/Toast.store.tsx","../src/components/Toast/Toast/Toast.view.tsx","../src/components/Toast/Toast.tsx","../src/components/Command/Command/Command.state.ts","../src/components/Command/Command/Command.style.ts","../src/components/Command/Command/Command.view.tsx","../src/components/Command/Command.tsx","../src/utils/generateId.ts","../src/components/Tooltip/Tooltip/Tooltip.style.ts","../src/components/Tooltip/Tooltip/Tooltip.view.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Tooltip/Tooltip/Tooltip.state.ts","../src/components/Alert/Alert.tsx","../src/components/AspectRatio/AspectRatio.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Avatar/Avatar/Avatar.state.ts","../src/components/Badge/Badge.tsx","../src/components/Chart/Chart.tsx","../src/components/Form/Checkbox/Checkbox.tsx","../src/components/Form/ComboBox/ComboBox.tsx","../src/components/CookieConsent/CookieConsent.tsx","../src/components/Form/CountryPicker/CountryPicker.tsx","../src/components/Form/DatePicker/DatePicker.tsx","../src/components/File/File.tsx","../src/components/Formik/Formik.Checkbox.tsx","../src/components/Formik/Formik.ComboBox.tsx","../src/components/Formik/Formik.CountryPicker.tsx","../src/components/Formik/Formik.DatePicker.tsx","../src/components/Formik/Formik.OTPInput.tsx","../src/components/Formik/Formik.Password.tsx","../src/components/Formik/Formik.Select.tsx","../src/components/Formik/Formik.Slider.tsx","../src/components/Formik/Formik.Switch.tsx","../src/components/Formik/Formik.TextArea.tsx","../src/components/Formik/Formik.TextField.tsx","../src/components/Message/Message/Message.layout.tsx","../src/components/OTPInput/OTPInput.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Pagination/Pagination/Pagination.state.ts","../src/components/Form/Password/Password.tsx","../src/components/Form/Select/Select.tsx","../src/components/Slider/Slider.tsx","../src/components/Form/Switch/Switch.tsx","../src/components/Form/TextArea/TextArea.tsx","../src/components/Form/TextField/TextField.tsx","../src/components/Title/Title.tsx","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/ToggleGroup/ToggleGroup/ToggleGroup.state.ts","../src/components/Uploader/Uploader.tsx","../src/components/Uploader/Uploader/Uploader.state.tsx","../src/components/Toast/Toast/Toast.hook.ts"],"sourcesContent":["/**\n * Generates a unique ID with an optional prefix\n * @param prefix Optional prefix for the ID\n * @returns A unique string ID\n */\nexport const generateId = (prefix: string = 'id') =>\n `${prefix}-${Math.random().toString(36).substring(2, 9)}`;\n","import { ViewProps } from 'app-studio';\nimport { Shape, Variant } from './Accordion.type';\n\nexport const AccordionShapes: Record<Shape, ViewProps> = {\n sharp: { borderRadius: 0 },\n rounded: { borderRadius: 8 },\n};\n\nexport const AccordionVariants: Record<Variant, ViewProps> = {\n default: {\n backgroundColor: 'transparent',\n borderWidth: 0,\n },\n outline: {\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n },\n filled: {\n backgroundColor: 'color.gray.50',\n },\n};\n","import React, {\n createContext,\n useContext,\n Children,\n cloneElement,\n isValidElement,\n} from 'react';\nimport { View, Horizontal, Vertical, ViewProps } from 'app-studio';\nimport { AccordionContextType } from './Accordion.type';\nimport {\n AccordionTriggerProps,\n AccordionContentProps,\n AccordionItemProps,\n} from './Accordion.props';\nimport { AccordionShapes, AccordionVariants } from './Accordion.style';\n\n// Create context for the Accordion\nconst AccordionContext = createContext<AccordionContextType>({\n expandedItems: [],\n toggleItem: () => {},\n isItemExpanded: () => false,\n type: 'single',\n collapsible: false,\n baseId: '',\n});\n\n// Provider component for the Accordion context\nexport const AccordionProvider: React.FC<{\n children: React.ReactNode;\n value: AccordionContextType;\n}> = ({ children, value }) => {\n return (\n <AccordionContext.Provider value={value}>\n {children}\n </AccordionContext.Provider>\n );\n};\n\n// Hook to use the Accordion context\nexport const useAccordionContext = () => {\n const context = useContext(AccordionContext);\n if (!context) {\n throw new Error(\n 'useAccordionContext must be used within an AccordionProvider'\n );\n }\n return context;\n};\n\n// Accordion Item component\nexport const AccordionItem: React.FC<AccordionItemProps> = ({\n value,\n children,\n isDisabled = false,\n views,\n ...props\n}) => {\n const {\n isItemExpanded,\n baseId,\n //toggleItem\n } = useAccordionContext();\n const isExpanded = isItemExpanded(value);\n\n // Generate unique IDs for ARIA attributes\n const triggerId = `${baseId}-trigger-${value}`;\n const contentId = `${baseId}-content-${value}`;\n\n return (\n <View\n borderWidth={1}\n borderStyle=\"solid\"\n borderColor=\"color.gray.200\"\n marginBottom={8}\n overflow=\"hidden\"\n opacity={isDisabled ? 0.5 : 1}\n pointerEvents={isDisabled ? 'none' : 'auto'}\n data-state={isExpanded ? 'open' : 'closed'}\n data-disabled={isDisabled ? '' : undefined}\n {...views?.item}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n // Pass the necessary props to AccordionTrigger and AccordionContent\n return React.cloneElement(child, {\n ...child.props,\n value,\n isExpanded,\n isDisabled,\n triggerId,\n contentId,\n });\n }\n return child;\n })}\n </View>\n );\n};\n\n// Accordion Trigger component\nexport const AccordionTrigger: React.FC<\n AccordionTriggerProps & {\n value?: string;\n isExpanded?: boolean;\n isDisabled?: boolean;\n triggerId?: string;\n contentId?: string;\n }\n> = ({\n children,\n value,\n isExpanded,\n isDisabled,\n triggerId,\n contentId,\n views,\n asChild = false,\n ...props\n}) => {\n const { toggleItem } = useAccordionContext();\n\n const handleClick = () => {\n if (value && !isDisabled) {\n toggleItem(value);\n }\n };\n\n const triggerProps = {\n id: triggerId,\n 'aria-expanded': isExpanded,\n 'aria-controls': contentId,\n 'aria-disabled': isDisabled,\n 'data-state': isExpanded ? 'open' : 'closed',\n 'data-disabled': isDisabled ? '' : undefined,\n onClick: handleClick,\n padding: 16,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: 'color.white',\n width: '100%',\n ...views?.container,\n ...props,\n };\n\n // If asChild is true, clone the child element and merge props\n if (asChild && isValidElement(children)) {\n const child = Children.only(children);\n return cloneElement(child, { ...triggerProps, ...child.props });\n }\n\n return (\n <Horizontal {...triggerProps}>\n {children}\n <View\n width={24}\n height={24}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n transition=\"transform 0.2s ease\"\n transform={isExpanded ? 'rotate(180deg)' : 'rotate(0deg)'}\n {...views?.icon}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16.59 8.59L12 13.17L7.41 8.59L6 10L12 16L18 10L16.59 8.59Z\"\n fill=\"currentColor\"\n />\n </svg>\n </View>\n </Horizontal>\n );\n};\n\n// Accordion Content component\nexport const AccordionContent: React.FC<\n AccordionContentProps & {\n isExpanded?: boolean;\n isDisabled?: boolean;\n triggerId?: string;\n contentId?: string;\n }\n> = ({\n children,\n isExpanded,\n isDisabled,\n triggerId,\n contentId,\n views,\n ...props\n}) => {\n if (!isExpanded) {\n return null;\n }\n\n return (\n <View\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n padding={16}\n backgroundColor=\"color.white\"\n maxHeight={isExpanded ? '1000px' : '0'}\n transition=\"max-height 0.3s ease-in-out, opacity 0.3s ease-in-out\"\n opacity={1}\n overflow=\"hidden\"\n data-state={isExpanded ? 'open' : 'closed'}\n data-disabled={isDisabled ? '' : undefined}\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// Main Accordion View component\nexport const AccordionView: React.FC<\n {\n children: React.ReactNode;\n shape?: 'sharp' | 'rounded';\n variant?: 'default' | 'outline' | 'filled';\n views?: any;\n baseId: string;\n type: 'single' | 'multiple';\n collapsible: boolean;\n } & ViewProps\n> = ({\n children,\n shape = 'rounded',\n variant = 'default',\n views,\n baseId,\n type,\n collapsible,\n themeMode: elementMode,\n ...props\n}) => {\n return (\n <Vertical\n width=\"100%\"\n data-orientation=\"vertical\"\n {...AccordionShapes[shape]}\n {...AccordionVariants[variant]}\n {...views?.container}\n {...props}\n >\n {children}\n </Vertical>\n );\n};\n","import React from 'react';\nimport {\n AccordionProps,\n AccordionComponentType,\n} from './Accordion/Accordion.props';\nimport { useAccordionState } from './Accordion/Accordion.state';\nimport {\n AccordionProvider,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n AccordionView,\n} from './Accordion/Accordion.view';\n\n/**\n * Accordion component for displaying collapsible content panels.\n *\n * @example\n * ```tsx\n * <Accordion type=\"single\" defaultValue=\"item-1\" collapsible>\n * <Accordion.Item value=\"item-1\">\n * <Accordion.Trigger>Section 1</Accordion.Trigger>\n * <Accordion.Content>Content for section 1</Accordion.Content>\n * </Accordion.Item>\n * <Accordion.Item value=\"item-2\">\n * <Accordion.Trigger>Section 2</Accordion.Trigger>\n * <Accordion.Content>Content for section 2</Accordion.Content>\n * </Accordion.Item>\n * </Accordion>\n * ```\n */\nconst AccordionComponent: React.FC<AccordionProps> = ({\n children,\n type = 'single',\n value,\n defaultValue,\n onValueChange,\n collapsible = false,\n shape = 'rounded',\n variant = 'default',\n views,\n ...props\n}) => {\n // For backward compatibility\n const legacyDefaultValue = Array.isArray(defaultValue)\n ? defaultValue\n : defaultValue\n ? [defaultValue]\n : undefined;\n\n const accordionState = useAccordionState({\n type,\n value,\n defaultValue: defaultValue ?? legacyDefaultValue,\n onValueChange,\n collapsible,\n });\n\n return (\n <AccordionProvider\n value={{\n expandedItems: accordionState.expandedItems,\n toggleItem: accordionState.toggleItem,\n isItemExpanded: accordionState.isItemExpanded,\n type: accordionState.type,\n collapsible: accordionState.collapsible,\n baseId: accordionState.baseId,\n }}\n >\n <AccordionView\n shape={shape}\n variant={variant}\n views={views}\n baseId={accordionState.baseId}\n type={accordionState.type}\n collapsible={accordionState.collapsible}\n {...props}\n >\n {children}\n </AccordionView>\n </AccordionProvider>\n );\n};\n\nexport const Accordion = AccordionComponent as AccordionComponentType;\n\n// Assign the sub-components to the main component\nAccordion.Item = AccordionItem;\nAccordion.Trigger = AccordionTrigger;\nAccordion.Content = AccordionContent;\n","import { useState, useCallback, useMemo, useEffect } from 'react';\nimport { AccordionProps } from './Accordion.props';\nimport { generateId } from '../../../utils/id';\n\nexport const useAccordionState = ({\n type = 'single',\n value: controlledValue,\n defaultValue,\n onValueChange,\n collapsible = false,\n}: Pick<\n AccordionProps,\n 'type' | 'value' | 'defaultValue' | 'onValueChange' | 'collapsible'\n>) => {\n const isControlled = controlledValue !== undefined;\n const initialValue = controlledValue ?? defaultValue;\n\n // Ensure initial value matches the type ('single' needs string/undefined, 'multiple' needs array)\n const getValidInitialValue = () => {\n if (type === 'multiple') {\n return Array.isArray(initialValue)\n ? initialValue\n : initialValue\n ? [initialValue]\n : [];\n }\n // Type 'single'\n return Array.isArray(initialValue) ? initialValue[0] : initialValue;\n };\n\n const [internalValue, setInternalValue] = useState<\n string | string[] | undefined\n >(getValidInitialValue());\n\n // Generate a base ID for ARIA attributes\n const baseId = useMemo(() => generateId('accordion'), []);\n\n // Memoize the value to be used (controlled or internal)\n const selectedValue = isControlled ? controlledValue : internalValue;\n\n // Convert selectedValue to array for internal use\n const expandedItems = useMemo(() => {\n if (selectedValue === undefined) return [];\n return Array.isArray(selectedValue) ? selectedValue : [selectedValue];\n }, [selectedValue]);\n\n // Update internal state if controlled value changes externally\n useEffect(() => {\n if (isControlled) {\n // Ensure the controlled value type matches the accordion type\n if (type === 'multiple' && !Array.isArray(controlledValue)) {\n console.warn(\n `Accordion with type=\"multiple\" received non-array value:`,\n controlledValue\n );\n // Attempt to gracefully handle: use empty array or convert if single string\n setInternalValue(controlledValue ? [String(controlledValue)] : []);\n } else if (type === 'single' && Array.isArray(controlledValue)) {\n console.warn(\n `Accordion with type=\"single\" received array value:`,\n controlledValue\n );\n // Attempt to gracefully handle: use first element or undefined\n setInternalValue(\n controlledValue.length > 0 ? controlledValue[0] : undefined\n );\n } else {\n setInternalValue(controlledValue); // Sync types match\n }\n }\n }, [controlledValue, isControlled, type]);\n\n const toggleItem = useCallback(\n (itemValue: string) => {\n let newValue: string | string[] | undefined;\n\n if (type === 'single') {\n if (selectedValue === itemValue && collapsible) {\n newValue = undefined; // Collapse if collapsible\n } else if (selectedValue !== itemValue) {\n newValue = itemValue; // Open the new one\n } else {\n newValue = selectedValue; // No change if not collapsible and already open\n }\n } else {\n // Type 'multiple'\n const currentValues = Array.isArray(selectedValue) ? selectedValue : [];\n if (currentValues.includes(itemValue)) {\n // Item is open, close it by filtering out\n newValue = currentValues.filter((v) => v !== itemValue);\n } else {\n // Item is closed, open it by adding\n newValue = [...currentValues, itemValue];\n }\n // Ensure empty array instead of undefined for multiple type when all closed\n if (Array.isArray(newValue) && newValue.length === 0) newValue = [];\n }\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n if (onValueChange) {\n onValueChange(newValue);\n }\n },\n [type, selectedValue, collapsible, isControlled, onValueChange]\n );\n\n const isItemExpanded = useCallback(\n (itemValue: string) => {\n return expandedItems.includes(itemValue);\n },\n [expandedItems]\n );\n\n return {\n expandedItems,\n toggleItem,\n isItemExpanded,\n type,\n collapsible,\n baseId,\n };\n};\n","/**\n * Text Styles\n *\n * Defines the styles for the Text component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n */\n\nimport { Headings, Size, TextWeights } from './Text.type';\nimport { ViewProps } from 'app-studio';\n\n/**\n * Heading sizes following typography guidelines\n */\nexport const HeadingSizes: Record<Headings, ViewProps> = {\n h1: {\n fontSize: '36px', // 2.25rem\n lineHeight: '40px', // 2.5rem\n fontWeight: '700', // Bold\n letterSpacing: '-0.02em',\n marginBottom: '24px', // 6 × 4px grid\n },\n h2: {\n fontSize: '30px', // 1.875rem\n lineHeight: '36px', // 2.25rem\n fontWeight: '700', // Bold\n letterSpacing: '-0.02em',\n marginBottom: '20px', // 5 × 4px grid\n },\n h3: {\n fontSize: '24px', // 1.5rem\n lineHeight: '32px', // 2rem\n fontWeight: '600', // Semi-bold\n letterSpacing: '-0.01em',\n marginBottom: '16px', // 4 × 4px grid\n },\n h4: {\n fontSize: '20px', // 1.25rem\n lineHeight: '28px', // 1.75rem\n fontWeight: '600', // Semi-bold\n letterSpacing: '-0.01em',\n marginBottom: '16px', // 4 × 4px grid\n },\n h5: {\n fontSize: '18px', // 1.125rem\n lineHeight: '24px', // 1.5rem\n fontWeight: '600', // Semi-bold\n letterSpacing: '-0.01em',\n marginBottom: '12px', // 3 × 4px grid\n },\n h6: {\n fontSize: '16px', // 1rem\n lineHeight: '24px', // 1.5rem\n fontWeight: '600', // Semi-bold\n letterSpacing: '-0.01em',\n marginBottom: '8px', // 2 × 4px grid\n },\n};\n\n/**\n * Font sizes following typography guidelines\n */\nexport const FontSizes: Record<Size, string> = {\n xs: '12px', // 0.75rem\n sm: '14px', // 0.875rem\n md: '16px', // 1rem (base)\n lg: '18px', // 1.125rem\n xl: '20px', // 1.25rem\n};\n\n/**\n * Line heights following typography guidelines\n */\nexport const LineHeights: Record<Size, string> = {\n xs: '16px', // 1rem\n sm: '20px', // 1.25rem\n md: '24px', // 1.5rem\n lg: '28px', // 1.75rem\n xl: '28px', // 1.75rem\n};\n\n/**\n * Font weights following typography guidelines\n */\nexport const FontWeights: Record<TextWeights, string> = {\n hairline: '100',\n thin: '200',\n light: '300',\n normal: '400',\n medium: '500',\n semiBold: '600',\n bold: '700',\n extraBold: '800',\n black: '900',\n};\n","/**\n * Text View Component\n *\n * Renders text with various styles and states according to the design guidelines.\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Element, Text, View, ViewProps } from 'app-studio';\n\nimport { TextProps } from './Text.props';\nimport {\n HeadingSizes,\n FontSizes,\n LineHeights,\n FontWeights,\n} from './Text.style';\n\ninterface Props extends TextProps {\n views?: {\n container?: ViewProps;\n };\n}\n\ninterface ContentProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n isSub?: boolean;\n isSup?: boolean;\n views?: {\n sup?: ViewProps;\n };\n}\n\ninterface TruncateTextProps extends React.HTMLAttributes<HTMLDivElement> {\n text: string;\n maxLines?: number;\n views?: {\n truncateText?: ViewProps;\n };\n}\n\n/**\n * Renders text content with support for subscript and superscript\n */\nconst TextContent: React.FC<ContentProps> = ({\n children,\n isSub,\n isSup,\n views,\n}) => (\n <>\n {typeof children === 'string' ? (\n <>\n {isSub && (\n <View\n as=\"sub\"\n fontSize=\"75%\"\n lineHeight=\"0\"\n position=\"relative\"\n bottom=\"-0.25em\"\n {...views?.sup}\n >\n {children}\n </View>\n )}\n {isSup && (\n <View\n as=\"sup\"\n fontSize=\"75%\"\n lineHeight=\"0\"\n position=\"relative\"\n top=\"-0.5em\"\n {...views?.sup}\n >\n {children}\n </View>\n )}\n {!isSub && !isSup && <>{children}</>}\n </>\n ) : (\n children\n )}\n </>\n);\n\n// Keep the interface\ninterface TruncateTextProps extends React.HTMLAttributes<HTMLDivElement> {\n text: string;\n maxLines?: number;\n views?: {\n truncateText?: ViewProps;\n };\n}\n\n/**\n * Renders text with truncation after a specified number of lines (JS calculation)\n */\nconst TruncateText: React.FC<TruncateTextProps> = ({\n text,\n maxLines = 1,\n views,\n ...rest // Pass down other HTML attributes\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [truncatedText, setTruncatedText] = useState(text);\n const [isTruncated, setIsTruncated] = useState(false);\n\n useEffect(() => {\n const node = containerRef.current;\n if (!node || !text || maxLines <= 0) {\n setTruncatedText(text ?? '');\n setIsTruncated(false);\n return;\n }\n\n const { overflow, height, maxHeight, lineHeight } = node.style;\n\n node.style.overflow = 'visible';\n node.style.height = 'auto';\n node.style.maxHeight = 'none';\n\n node.innerText = text[0] || 'M';\n let singleLine = node.offsetHeight;\n if (!singleLine) {\n const cs = getComputedStyle(node);\n singleLine =\n cs.lineHeight !== 'normal'\n ? parseFloat(cs.lineHeight)\n : parseFloat(cs.fontSize || '16') * 1.2;\n }\n\n const limit = singleLine * maxLines;\n\n node.innerText = text;\n if (node.offsetHeight <= limit) {\n setTruncatedText(text);\n setIsTruncated(false);\n restore(node);\n return;\n }\n\n let lo = 0;\n let hi = text.length;\n let fit = 0;\n\n while (lo <= hi) {\n const mid = Math.floor((lo + hi) / 2);\n node.innerText = text.slice(0, mid);\n if (node.offsetHeight <= limit) {\n fit = mid;\n lo = mid + 1;\n } else {\n hi = mid - 1;\n }\n }\n\n const finalText =\n fit < text.length\n ? text.slice(0, text.length > fit + 3 ? fit - 3 : fit).trimEnd() + '…'\n : text;\n setTruncatedText(finalText);\n setIsTruncated(fit < text.length);\n restore(node);\n\n function restore(n) {\n n.style.overflow = overflow;\n n.style.height = height;\n n.style.maxHeight = maxHeight;\n n.style.lineHeight = lineHeight;\n }\n }, [text, maxLines]);\n\n return (\n <Text\n ref={containerRef}\n overflow=\"hidden\" // Crucial for final display state\n {...views?.truncateText}\n {...rest} // Spread remaining props\n // Add title attribute for accessibility/hover to see full text\n title={isTruncated ? text : undefined}\n >\n {/* Render the text from state */}\n {truncatedText}\n </Text>\n );\n};\n\n/**\n * Main Text component that renders text with various styles and states\n */\nconst TextView: React.FC<Props> = ({\n children,\n heading,\n maxLines,\n isItalic = false,\n isUnderlined = false,\n isSub = false,\n isSup = false,\n isStriked = false,\n weight = 'normal',\n size = 'md',\n views,\n ...props\n}) => {\n // Apply heading styles if a heading is specified\n const headingStyles = heading ? HeadingSizes[heading] : {};\n\n // For sub/sup text, use inline display\n const noLineBreak = isSub || isSup ? { display: 'inline' } : {};\n\n // Get font size, line height, and weight from our design system\n const fontSize = FontSizes[size];\n const lineHeight = LineHeights[size];\n const fontWeight = FontWeights[weight];\n\n return (\n <Element\n // Apply typography styles according to design guidelines\n fontSize={fontSize}\n lineHeight={lineHeight}\n fontStyle={isItalic ? 'italic' : 'normal'}\n fontWeight={fontWeight}\n letterSpacing=\"-0.01em\"\n textDecoration={\n isStriked ? 'line-through' : isUnderlined ? 'underline' : 'none'\n }\n // Apply layout styles\n {...noLineBreak}\n // Apply heading styles if specified\n {...headingStyles}\n // Apply any custom props\n {...props}\n // Apply custom container styles\n {...views?.container}\n >\n {maxLines && typeof children === 'string' ? (\n <TruncateText text={children} maxLines={maxLines} />\n ) : (\n <TextContent isSub={isSub} isSup={isSup}>\n {children}\n </TextContent>\n )}\n </Element>\n );\n};\n\nexport default TextView;\n","import React from 'react';\n\nimport { TextProps } from './Text/Text.props';\nimport TextView from './Text/Text.view';\n\nconst TextComponent: React.FC<TextProps & any> = (props) => {\n return <TextView {...props} />;\n};\n\n/**\n * The Text component is a simple component that renders a text string or paragraphs as a DOM element in the UI. It is a <p> tag by default.\n */\nexport const Text = TextComponent;\n","import { useTheme, ViewProps } from 'app-studio';\nimport React from 'react';\nimport { Center } from 'app-studio';\n\n// Base icon interface with added transform and orientation\nexport interface IconProps extends ViewProps {\n color?: string;\n filled?: boolean;\n orientation?: 'left' | 'right' | 'up' | 'down';\n}\n\n// Default wrapper component for consistent sizing and styling\nconst IconWrapper: React.FC<IconProps> = ({\n widthHeight,\n color = 'black',\n transform,\n orientation = 'up',\n children,\n ...rest\n}) => (\n <Center\n widthHeight={widthHeight}\n lineHeight={widthHeight}\n color={color}\n display=\"flex\"\n transform={\n transform\n ? transform\n : orientation === 'left'\n ? 'rotate(-90deg)'\n : orientation === 'right'\n ? 'rotate(90deg)'\n : orientation === 'up'\n ? 'rotate(0deg)'\n : orientation === 'down'\n ? 'rotate(180deg)'\n : 'none'\n }\n {...rest}\n >\n {children}\n </Center>\n);\n\n// Utility function to handle fill and stroke based on 'filled' prop\nconst getSvgProps = (\n filled: boolean,\n color: string,\n strokeWidth: number | string\n) => {\n const { getColor } = useTheme();\n return {\n fill: filled ? getColor(color) : 'none',\n stroke: filled ? 'none' : getColor(color),\n strokeWidth,\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n };\n};\n\nexport const UserIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const HelpIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9.09 9a3 3 0 1 1 5.91 1c0 2-3 3-3 3\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"17\" />\n </svg>\n </IconWrapper>\n);\n\n// Example Icon Component: ChevronIcon\nexport const ChevronIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12.771 7.115a.829.829 0 0 0-1.2 0L3 15.686l1.2 1.2 7.971-7.971 7.972 7.971 1.2-1.2-8.572-8.571Z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const DragHandleIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <g>\n {/* First column */}\n <circle cx=\"9\" cy=\"6\" r=\"2\" />\n <circle cx=\"9\" cy=\"12\" r=\"2\" />\n <circle cx=\"9\" cy=\"18\" r=\"2\" />\n\n {/* Second column */}\n <circle cx=\"15\" cy=\"6\" r=\"2\" />\n <circle cx=\"15\" cy=\"12\" r=\"2\" />\n <circle cx=\"15\" cy=\"18\" r=\"2\" />\n </g>\n </svg>\n </IconWrapper>\n);\n\n// File Icon Component\nexport const FileIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={filled ? color : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n <polyline\n points=\"14 2 14 8 20 8\"\n fill=\"none\"\n stroke={color}\n strokeWidth={strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\n// Video Icon Component\nexport const VideoIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect\n x=\"2\"\n y=\"4\"\n width=\"20\"\n height=\"16\"\n rx=\"2\"\n ry=\"2\"\n fill={filled ? color : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n <polygon\n points=\"10 8 16 12 10 16 10 8\"\n fill={filled ? (filled ? 'white' : color) : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\n// Image Icon Component\nexport const ImageIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect\n x=\"2\"\n y=\"2\"\n width=\"20\"\n height=\"20\"\n rx=\"2\"\n ry=\"2\"\n fill={filled ? color : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n <circle\n cx=\"8.5\"\n cy=\"8.5\"\n r=\"1.5\"\n fill={filled ? (filled ? 'white' : color) : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n <polyline\n points=\"21 15 16 10 5 21\"\n fill=\"none\"\n stroke={filled ? 'white' : color}\n strokeWidth={strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\nexport const TwitterIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n d=\"M22.46 6.01c-.83.37-1.72.62-2.65.74a4.6 4.6 0 0 0 2.01-2.54 9.2 9.2 0 0 1-2.91 1.11 4.54 4.54 0 0 0-7.75 4.14A12.86 12.86 0 0 1 3.15 4.47a4.54 4.54 0 0 0 1.4 6.06 4.5 4.5 0 0 1-2.06-.57v.06a4.54 4.54 0 0 0 3.64 4.45 4.61 4.61 0 0 1-2.05.08 4.54 4.54 0 0 0 4.23 3.15 9.12 9.12 0 0 1-5.64 1.94c-.37 0-.74-.02-1.1-.07A12.86 12.86 0 0 0 8.21 21c8.38 0 12.96-6.94 12.96-12.96 0-.2 0-.4-.01-.6a9.28 9.28 0 0 0 2.3-2.37z\"\n fill={filled ? color : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\nexport const XIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\"\n fill={filled ? color : 'none'}\n stroke={color}\n strokeWidth={strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\n// Example of a Twitch Icon\nexport const TwitchIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n d=\"M2 2v16h5v4l4-4h5l6-6V2H2zm18 10-3 3h-5l-3 3v-3H4V4h16v8z\"\n fill={filled ? color : 'none'}\n stroke={color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n <path\n d=\"M14 7h2v5h-2V7zm-4 0h2v5H10V7z\"\n fill={filled ? color : 'none'}\n stroke={color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\n// Example of another Icon: CloseIcon\nexport const CloseIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line stroke={color} x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line stroke={color} x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </IconWrapper>\n);\n\nexport const InstagramIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" ry=\"5\"></rect>\n <path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\"></path>\n <line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\"></line>\n </svg>\n </IconWrapper>\n);\n\nexport const YoutubeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n {/* YouTube Play Button Background */}\n <path\n d=\"M21.8 8.001A2.8 2.8 0 0 0 19 5.2C17.793 5 12 5 12 5s-5.793 0-7 0.2a2.8 2.8 0 0 0-2.8 2.8c-0.2 1.207-0.2 3-0.2 3s0 1.793 0.2 3a2.8 2.8 0 0 0 2.8 2.8c1.207 0.2 7 0.2 7 0.2s5.793 0 7-0.2a2.8 2.8 0 0 0 2.8-2.8c0.2-1.207 0.2-3 0.2-3s0-1.793-0.2-3z\"\n fill={filled ? color : 'none'}\n stroke={filled ? 'none' : color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n\n <polygon\n points=\"10 8 10 14 14 10\"\n fill=\"white\" // Ensures the play button is transparent\n stroke={'white'}\n strokeWidth={strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\nexport const FacebookIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n d=\"M22 2H2v20h10v-7h-2v-3h2V9.5a4 4 0 0 1 4-4h3v3h-3a1 1 0 0 0-1 1V12h4l-1 3h-3v7h6V2z\"\n fill={filled ? color : 'none'}\n stroke={color}\n strokeWidth={filled ? 0 : strokeWidth}\n />\n </svg>\n </IconWrapper>\n);\n\nexport const LinkedinIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg viewBox=\"0 0 24 24\" {...getSvgProps(filled, color, strokeWidth)}>\n <path d=\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\"></path>\n <rect x=\"2\" y=\"9\" width=\"4\" height=\"12\"></rect>\n <circle cx=\"4\" cy=\"4\" r=\"2\"></circle>\n </svg>\n </IconWrapper>\n);\n\nexport const ThreadsIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg viewBox=\"0 0 24 24\" {...getSvgProps(filled, color, strokeWidth)}>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n <path\n d=\"M19 7.5c-1.333 -3 -3.667 -4.5 -7 -4.5c-5 0 -8 2.5 -8 9s3.5 9 8 9s7 -3 7\n -5s-1 -5 -7 -5c-2.5 0 -3 1.25 -3 2.5c0 1.5 1 2.5 2.5 2.5c2.5 0 3.5 -1.5\n 3.5 -5s-2 -4 -3 -4s-1.833 .333 -2.5 1\"\n ></path>\n </svg>\n </IconWrapper>\n);\n// Example Refactored Icon: MinusIcon without undefined 'padding' prop\nexport const MinusIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false, // Assuming minus can be filled; adjust as needed\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line stroke={color} x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\" />\n </svg>\n </IconWrapper>\n);\n\n// Example Refactored Icon: InfoIcon with accessibility enhancements\nexport const InfoIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper\n widthHeight={widthHeight}\n color={color}\n {...props}\n aria-label=\"Information\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const PlayIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M8 5v14l11-7z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const PauseIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M6 4h4v16H6V4zm8 0h4v16h-4V4z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const HeartIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M20.84 4.61c-1.54-1.56-4.04-1.56-5.59 0l-.7.72-.7-.72a3.95 3.95 0 0 0-5.59 0c-1.56 1.56-1.56 4.09 0 5.66l6.29 6.36 6.29-6.36c1.56-1.56 1.56-4.09 0-5.66z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const StarIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"></polygon>\n </svg>\n </IconWrapper>\n);\n\nexport const SaveIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\"></path>\n <polyline points=\"17 21 17 13 7 13 7 21\"></polyline>\n <polyline points=\"7 3 7 8 15 8\"></polyline>\n </svg>\n </IconWrapper>\n);\n\nexport const WarningIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M10.29 3.86l-6.6 11.4c-.78 1.36.2 3.1 1.71 3.1h13.2c1.51 0 2.49-1.74 1.71-3.1l-6.6-11.4a2 2 0 0 0-3.42 0z\"></path>\n <line stroke={color} x1=\"12\" y1=\"6\" x2=\"12\" y2=\"13\"></line>\n <line stroke={color} x1=\"12\" y1=\"15\" x2=\"12\" y2=\"15\"></line>\n </svg>\n </IconWrapper>\n);\n\nexport const BatteryIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33v15.33C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V5.33C17 4.6 16.4 4 15.67 4z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const BookmarkIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M17 3H7c-1.1 0-2 .9-2 2v16l7-3 7 3V5c0-1.1-.9-2-2-2z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const CloudIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M18 10h-1.26A8 8 0 109 20h9a5 5 0 000-10z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const CopyIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect>\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const DustBinIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const DeleteIcon = DustBinIcon;\n\nexport const EditIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M18.3785 8.44975L8.9636 17.8648C8.6844 18.144 8.3288 18.3343 7.94161 18.4117L4.99988 19.0001L5.58823 16.0583C5.66566 15.6711 5.85597 15.3155 6.13517 15.0363L15.5501 5.62132M18.3785 8.44975L19.7927 7.03553C20.1832 6.64501 20.1832 6.01184 19.7927 5.62132L18.3785 4.20711C17.988 3.81658 17.3548 3.81658 16.9643 4.20711L15.5501 5.62132M18.3785 8.44975L15.5501 5.62132\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const ErrorIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = true,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line\n x1=\"15\"\n y1=\"9\"\n x2=\"9\"\n y2=\"15\"\n stroke={filled ? 'white' : color}\n ></line>\n <line\n x1=\"9\"\n y1=\"9\"\n x2=\"15\"\n y2=\"15\"\n stroke={filled ? 'white' : color}\n ></line>\n </svg>\n </IconWrapper>\n);\n\nexport const DownloadIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const MenuIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line stroke={color} x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"></line>\n <line stroke={color} x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"></line>\n <line stroke={color} x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\"></line>\n </svg>\n </IconWrapper>\n);\n\nexport const ShareIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <circle cx=\"18\" cy=\"5\" r=\"3\"></circle>\n <circle cx=\"6\" cy=\"12\" r=\"3\"></circle>\n <circle cx=\"18\" cy=\"19\" r=\"3\"></circle>\n <line stroke={color} x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\"></line>\n <line stroke={color} x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\"></line>\n </svg>\n </IconWrapper>\n);\n\nexport const RefreshIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <polyline points=\"23 4 23 10 17 10\"></polyline>\n <path d=\"M20.49 15a9 9 0 1 1-2.13-9.36L23 10\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const PrintIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={'currentColor'}\n strokeWidth=\"1\"\n >\n <path d=\"M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const MagicWandIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = true,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n {/* Main wand - thicker and better positioned */}\n <rect\n x=\"-3\"\n y=\"17\"\n width=\"15\"\n height=\"4\"\n rx=\"1\"\n transform=\"rotate(-40 2 13)\"\n />\n\n {/* Star 1 - larger top right */}\n <path d=\"M17 3L18 6L21 7L18 8L17 11L16 8L13 7L16 6L17 3Z\" />\n\n {/* Star 2 - middle size middle right */}\n <path d=\"M21 9L21.7 11L23.5 12L21.7 13L21 15L20.3 13L18.5 12L20.3 11L21 9Z\" />\n\n {/* Star 3 - smaller bottom right */}\n <path d=\"M16 15L16.7 16.5L18 17L16.7 17.5L16 19L15.3 17.5L14 17L15.3 16.5L16 15Z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const SliderVerticalIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line stroke={color} x1=\"4\" y1=\"21\" x2=\"4\" y2=\"14\"></line>\n <line stroke={color} x1=\"4\" y1=\"10\" x2=\"4\" y2=\"3\"></line>\n <line stroke={color} x1=\"12\" y1=\"21\" x2=\"12\" y2=\"12\"></line>\n <line stroke={color} x1=\"12\" y1=\"8\" x2=\"12\" y2=\"3\"></line>\n <line stroke={color} x1=\"20\" y1=\"21\" x2=\"20\" y2=\"16\"></line>\n <line stroke={color} x1=\"20\" y1=\"12\" x2=\"20\" y2=\"3\"></line>\n <line stroke={color} x1=\"1\" y1=\"14\" x2=\"7\" y2=\"14\"></line>\n <line stroke={color} x1=\"9\" y1=\"8\" x2=\"15\" y2=\"8\"></line>\n <line stroke={color} x1=\"17\" y1=\"16\" x2=\"23\" y2=\"16\"></line>\n </svg>\n </IconWrapper>\n);\n\nexport const PanelIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M9 3v18\" />\n </svg>\n </IconWrapper>\n);\nexport const FilterIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M3 4h18l-7 10v5l-4 2v-7L3 4z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const HomeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8h5z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const LocationIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const LockIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n {filled ? (\n <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n ) : (\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"></rect>\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\"></path>\n <circle cx=\"12\" cy=\"16\" r=\"1.5\"></circle>\n </>\n )}\n </svg>\n </IconWrapper>\n);\n\nexport const MicrophoneIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 1a4 4 0 0 0-4 4v6a4 4 0 0 0 8 0V5a4 4 0 0 0-4-4z\"></path>\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"></path>\n <line stroke={color} x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line>\n <line stroke={color} x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"></line>\n </svg>\n </IconWrapper>\n);\n\nexport const MoonIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const NotificationIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M18 8a6 6 0 0 0-12 0c0 7-3 9-3 9h18s-3-2-3-9\"></path>\n <path d=\"M13.73 21a2 2 0 0 1-3.46 0\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const OpenEyeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 4C7 4 2.73 7.11 1 12c1.73 4.89 6 8 11 8s9.27-3.11 11-8c-1.73-4.89-6-8-11-8zm0 12.5c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const ProfileIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n fill={filled ? color : 'none'}\n d=\"M12 13c-2.67 0-8 1.34-8 4v2c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-2c0-2.66-5.33-4-8-4zm0-9c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z M12 2C9.79 2 8 3.79 8 6s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4z M12 13c-2.67 0-8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z\"\n />{' '}\n </svg>\n </IconWrapper>\n);\n\nexport const SettingsIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M19.4 13c0-.3.1-.6.1-1s0-.7-.1-1l2.1-1.6c.2-.2.2-.4.1-.6l-2-3.5c-.1-.2-.4-.3-.6-.2l-2.5 1c-.5-.4-1.1-.7-1.7-.9l-.4-2.6c0-.2-.3-.4-.5-.4h-4c-.2 0-.5.2-.5.4l-.4 2.6c-.6.2-1.2.5-1.7.9l-2.5-1c-.2-.1-.5 0-.6.2l-2 3.5c-.1.2-.1.4.1.6L4.6 11c0 .3-.1.6-.1 1s0 .7.1 1l-2.1 1.6c-.2.2-.2.4-.1.6l2 3.5c.1.2.4.3.6.2l2.5-1c.5.4 1.1.7 1.7.9l.4 2.6c0 .2.3.4.5.4h4c.2 0 .5-.2.5-.4l.4-2.6c.6-.2 1.2-.5 1.7-.9l2.5 1c.2.1.5 0 .6-.2l2-3.5c.1-.2.1-.4-.1-.6L19.4 13zM12 15.5c-1.9 0-3.5-1.6-3.5-3.5s1.6-3.5 3.5-3.5 3.5 1.6 3.5 3.5-1.6 3.5-3.5 3.5z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const SuccessIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const UnLikeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.14.47-.14.73v2c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2zm4 0v12h4V3h-4z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const ClockIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <polyline points=\"12 6 12 12 16 14\"></polyline>\n </svg>\n </IconWrapper>\n);\n\nexport const CameraIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h3l2-3h8l2 3h3a2 2 0 0 1 2 2z\"></path>\n <circle cx=\"12\" cy=\"13\" r=\"4\"></circle>\n </svg>\n </IconWrapper>\n);\n\nexport const BluetoothIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M17.71 7.71L12 2h-1v7.59L6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 11 14.41V22h1l5.71-5.71-4.3-4.29 4.3-4.29zM13 5.83l1.88 1.88L13 9.59V5.83zm1.88 10.46L13 18.17v-3.76l1.88 1.88z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const LikeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-2z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const UnlockIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n {filled ? (\n <path d=\"M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2z\" />\n ) : (\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"></rect>\n <path d=\"M7 11V7a5 5 0 0 1 9.9-1\"></path>\n <circle cx=\"12\" cy=\"16\" r=\"1.5\"></circle>\n </>\n )}\n </svg>\n </IconWrapper>\n);\n\nexport const WifiIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const UploadIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M7 18a4.6 4.4 0 0 1 0 -9a5 4.5 0 0 1 11 2h1a3.5 3.5 0 0 1 0 7h-1\"></path>\n <path d=\"M9 15l3 -3l3 3\"></path>\n <path d=\"M12 12l0 9\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const SearchIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const CloseEyeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path\n d=\"M19.7071 5.70711C20.0976 5.31658 20.0976 4.68342 19.7071 4.29289C19.3166 3.90237 18.6834 3.90237 18.2929 4.29289L14.032 8.55382C13.4365 8.20193 12.7418 8 12 8C9.79086 8 8 9.79086 8 12C8 12.7418 8.20193 13.4365 8.55382 14.032L4.29289 18.2929C3.90237 18.6834 3.90237 19.3166 4.29289 19.7071C4.68342 20.0976 5.31658 20.0976 5.70711 19.7071L9.96803 15.4462C10.5635 15.7981 11.2582 16 12 16C14.2091 16 16 14.2091 16 12C16 11.2582 15.7981 10.5635 15.4462 9.96803L19.7071 5.70711ZM12.518 10.0677C12.3528 10.0236 12.1792 10 12 10C10.8954 10 10 10.8954 10 12C10 12.1792 10.0236 12.3528 10.0677 12.518L12.518 10.0677ZM11.482 13.9323L13.9323 11.482C13.9764 11.6472 14 11.8208 14 12C14 13.1046 13.1046 14 12 14C11.8208 14 11.6472 13.9764 11.482 13.9323ZM15.7651 4.8207C14.6287 4.32049 13.3675 4 12 4C9.14754 4 6.75717 5.39462 4.99812 6.90595C3.23268 8.42276 2.00757 10.1376 1.46387 10.9698C1.05306 11.5985 1.05306 12.4015 1.46387 13.0302C1.92276 13.7326 2.86706 15.0637 4.21194 16.3739L5.62626 14.9596C4.4555 13.8229 3.61144 12.6531 3.18002 12C3.6904 11.2274 4.77832 9.73158 6.30147 8.42294C7.87402 7.07185 9.81574 6 12 6C12.7719 6 13.5135 6.13385 14.2193 6.36658L15.7651 4.8207ZM12 18C11.2282 18 10.4866 17.8661 9.78083 17.6334L8.23496 19.1793C9.37136 19.6795 10.6326 20 12 20C14.8525 20 17.2429 18.6054 19.002 17.0941C20.7674 15.5772 21.9925 13.8624 22.5362 13.0302C22.947 12.4015 22.947 11.5985 22.5362 10.9698C22.0773 10.2674 21.133 8.93627 19.7881 7.62611L18.3738 9.04043C19.5446 10.1771 20.3887 11.3469 20.8201 12C20.3097 12.7726 19.2218 14.2684 17.6986 15.5771C16.1261 16.9282 14.1843 18 12 18Z\"\n fill=\"currentColor\"\n />\n </svg>\n </IconWrapper>\n);\n\nexport const ExternalLinkIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(true, color, strokeWidth)}\n >\n <path d=\"M14 3h7v7h-2V5.41l-9.29 9.3-1.42-1.42 9.3-9.29H14V3ZM5 5h5v2H6v11h11v-4h2v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1Z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const PlusIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line stroke={color} x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line stroke={color} x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </IconWrapper>\n);\n\nexport const TickIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M5 13l4 4L19 7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </IconWrapper>\n);\n\nexport const BoldArrowIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = true,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 4l7 7h-4v7h-6v-7H5l7-7z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const ArrowIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line stroke={color} x1=\"12\" y1=\"20\" x2=\"12\" y2=\"8\"></line>\n <polyline points=\"6 12 12 6 18 12\"></polyline>\n </svg>\n </IconWrapper>\n);\n\nexport const SpinnerIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n filled = false,\n strokeWidth = 1,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" strokeOpacity=\"0.25\"></circle>\n <path d=\"M12 2a10 10 0 0 1 10 10\" strokeOpacity=\"1\"></path>\n </svg>\n </IconWrapper>\n);\n\nexport const CalendarIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line stroke={color} x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line stroke={color} x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line stroke={color} x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </IconWrapper>\n);\nexport const SliderIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line x1=\"3\" y1=\"4\" x2=\"10\" y2=\"4\" />\n <line x1=\"14\" y1=\"4\" x2=\"21\" y2=\"4\" />\n <line x1=\"3\" y1=\"12\" x2=\"12\" y2=\"12\" />\n <line x1=\"16\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"20\" x2=\"8\" y2=\"20\" />\n <line x1=\"12\" y1=\"20\" x2=\"21\" y2=\"20\" />\n <line x1=\"10\" y1=\"1\" x2=\"10\" y2=\"7\" />\n <line x1=\"16\" y1=\"9\" x2=\"16\" y2=\"15\" />\n <line x1=\"8\" y1=\"17\" x2=\"8\" y2=\"23\" />\n </svg>\n </IconWrapper>\n);\n\nexport const CropIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M6 2v14a2 2 0 0 0 2 2h14\" />\n <path d=\"M18 22V8a2 2 0 0 0-2-2H2\" />\n </svg>\n </IconWrapper>\n);\n\nexport const ZoomInIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n <line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\" />\n <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" />\n </svg>\n </IconWrapper>\n);\n\nexport const ZoomOutIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" />\n </svg>\n </IconWrapper>\n);\n\nexport const TextIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <line x1=\"4\" y1=\"6\" x2=\"20\" y2=\"6\" />\n <line x1=\"12\" y1=\"6\" x2=\"12\" y2=\"18\" />\n <line x1=\"8\" y1=\"18\" x2=\"16\" y2=\"18\" />\n </svg>\n </IconWrapper>\n);\n\nexport const ShapeIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect x=\"4\" y=\"8\" width=\"8\" height=\"8\" />\n <circle cx=\"16\" cy=\"16\" r=\"4\" />\n <polygon points=\"16,4 19,8 13,8\" />\n </svg>\n </IconWrapper>\n);\n\nexport const RotateIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <polyline points=\"1 4 1 10 7 10\" />\n <path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\" />\n </svg>\n </IconWrapper>\n);\n\nexport const DocumentIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n </IconWrapper>\n);\n\nexport const ChartIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\" />\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\" />\n <polyline points=\"10 9 9 9 8 9\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\" />\n <polyline points=\"10 9 9 9 8 9\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n </svg>\n </IconWrapper>\n);\nexport const GiftIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = false,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <rect x=\"3\" y=\"8\" width=\"18\" height=\"4\" rx=\"1\" />\n <path d=\"M12 8V21\" />\n <path d=\"M3 12v6a3 3 0 0 0 3 3h3V12\" />\n <path d=\"M18 21h-3v-9h6v6a3 3 0 0 1-3 3z\" />\n <path d=\"M12 8c-.5-2.5-4-3-5-1.5S9 10 12 8z\" />\n <path d=\"M12 8c.5-2.5 4-3 5-1.5S15 10 12 8z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const ShieldIcon: React.FC<IconProps> = ({\n widthHeight = 24,\n color = 'currentColor',\n strokeWidth = 1,\n filled = true,\n ...props\n}) => (\n <IconWrapper widthHeight={widthHeight} color={color} {...props}>\n <svg\n viewBox=\"0 0 24 24\"\n aria-hidden=\"false\"\n focusable=\"false\"\n {...getSvgProps(filled, color, strokeWidth)}\n >\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n </svg>\n </IconWrapper>\n);\n\nexport const CheckIcon = TickIcon;\n","/**\n * Alert View Component\n *\n * Renders an alert with various styles and states according to the design guidelines.\n */\n\nimport React from 'react';\nimport { View, useTheme } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { Vertical } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { WarningIcon, InfoIcon, ErrorIcon, SuccessIcon } from '../../Icon/Icon';\nimport { AlertProps } from './Alert.props';\nimport { getThemes } from './Alert.style';\n\n/**\n * Alert component that displays important messages to users\n */\nexport const AlertView = ({\n icon,\n title,\n views,\n description,\n variant = 'default',\n themeMode: elementMode,\n ...props\n}: AlertProps) => {\n const { themeMode } = useTheme();\n const currentThemeMode = elementMode || themeMode;\n const themes = getThemes(currentThemeMode);\n // Select the appropriate icon based on the variant\n const getIcon = () => {\n if (icon) return icon;\n\n // Use the theme color directly from themes\n const iconColor = views?.icon?.color ?? themes[variant].icon.color;\n\n const iconProps = {\n size: 20,\n color: iconColor,\n };\n\n switch (variant) {\n case 'info':\n return <InfoIcon {...iconProps} />;\n case 'success':\n return <SuccessIcon {...iconProps} />;\n case 'error':\n return <ErrorIcon {...iconProps} />;\n case 'warning':\n default:\n return <WarningIcon {...iconProps} />;\n }\n };\n\n return (\n <Horizontal\n // Layout properties\n gap={12} // 3 × 4px grid\n padding=\"16px\" // 4 × 4px grid\n flexWrap=\"nowrap\"\n alignItems=\"flex-start\"\n // Visual properties\n borderRadius=\"8px\" // Consistent with design system (rounded-md)\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={themes[variant].container.borderColor}\n backgroundColor={themes[variant].container.backgroundColor}\n boxShadow={themes[variant].container.boxShadow}\n // Animation\n transition=\"all 0.2s ease\"\n // Apply custom container styles and any other props\n {...views?.container}\n {...props}\n >\n {/* Icon */}\n <View alignSelf=\"flex-start\" marginTop=\"2px\" {...views?.icon}>\n {getIcon()}\n </View>\n\n {/* Content */}\n <Vertical gap={8}>\n {' '}\n {/* 2 × 4px grid */}\n {/* Title */}\n <Text\n fontSize=\"16px\"\n fontWeight=\"600\" // Semi-bold\n lineHeight=\"24px\"\n color={themes[variant].content.color}\n {...views?.title}\n >\n {title}\n </Text>\n {/* Description */}\n <Text\n fontSize=\"14px\"\n fontWeight=\"400\" // Regular\n lineHeight=\"20px\"\n color={themes[variant].content.color}\n {...views?.description}\n >\n {description}\n </Text>\n </Vertical>\n </Horizontal>\n );\n};\n","/**\n * Alert Styles\n *\n * Defines the styles for the Alert component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Variant } from './Alert.type';\n\n/**\n * Get theme styles for different alert variants based on theme mode\n */\nexport const getThemes = (\n themeMode: string\n): Record<\n Variant,\n { container: ViewProps; content: ViewProps; icon: ViewProps }\n> => {\n return {\n default: {\n container: {\n backgroundColor: 'color.gray.50',\n borderColor: 'color.gray.200',\n boxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n },\n content: {\n color: 'color.gray.700',\n },\n icon: {\n color: 'color.gray.500',\n },\n },\n info: {\n container: {\n backgroundColor: 'color.blue.50',\n borderColor: 'color.blue.200',\n boxShadow: '0 1px 2px rgba(59, 130, 246, 0.05)',\n },\n content: {\n color: 'color.blue.700',\n },\n icon: {\n color: 'color.blue.500',\n },\n },\n success: {\n container: {\n backgroundColor: 'color.green.50',\n borderColor: 'color.green.200',\n boxShadow: '0 1px 2px rgba(34, 197, 94, 0.05)',\n },\n content: {\n color: 'color.green.700',\n },\n icon: {\n color: 'color.green.500',\n },\n },\n error: {\n container: {\n backgroundColor: 'color.red.50',\n borderColor: 'color.red.200',\n boxShadow: '0 1px 2px rgba(239, 68, 68, 0.05)',\n },\n content: {\n color: 'color.red.700',\n },\n icon: {\n color: 'color.red.500',\n },\n },\n warning: {\n container: {\n backgroundColor: 'color.orange.50',\n borderColor: 'color.orange.200',\n boxShadow: '0 1px 2px rgba(249, 115, 22, 0.05)',\n },\n content: {\n color: 'color.orange.700',\n },\n icon: {\n color: 'color.orange.500',\n },\n },\n };\n};\n\n/**\n * Default themes for backward compatibility\n */\nexport const Themes = getThemes('light');\n","import React from 'react';\nimport { View } from 'app-studio';\nimport { Center } from 'app-studio';\nimport { AspectRatioProps } from './AspectRatio.props';\n\n// Declaration of a functional component named AspectRatioView.\nexport const AspectRatioView = ({\n // Set a default aspect ratio of 16:9 if no ratio is provided as a prop.\n ratio = 16 / 9,\n // children prop used to render enclosed components.\n children,\n views,\n // Spread the rest of the props to inherit additional properties.\n ...props\n}: AspectRatioProps) => (\n <Center\n width={'100%'}\n position=\"relative\"\n overflow=\"hidden\"\n paddingTop={`${(1 / ratio) * 100}%`}\n borderRadius={8}\n {...props}\n {...views?.center}\n >\n <View\n position=\"absolute\"\n top={0}\n right={0}\n bottom={0}\n left={0}\n {...views?.view}\n >\n {children}\n </View>\n </Center>\n);\n","/**\n * Avatar Styles\n *\n * Defines the styles for the Avatar component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Size } from './Avatar.type';\n\n/**\n * Avatar sizes following the 4px grid system\n */\nexport const AvatarSizeMap: Record<Size, number> = {\n xs: 24, // 6 × 4px grid\n sm: 32, // 8 × 4px grid\n md: 48, // 12 × 4px grid\n lg: 64, // 16 × 4px grid\n xl: 80, // 20 × 4px grid\n};\n\n/**\n * Default styles for the Avatar component\n */\nexport const DefaultAvatarStyles = {\n container: {\n borderRadius: '50%',\n overflow: 'hidden',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'transparent',\n backgroundColor: 'color.gray.100',\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\n transition: 'all 0.2s ease',\n } as ViewProps,\n fallback: {\n fontWeight: '500', // Medium weight for better readability\n color: 'color.gray.600',\n } as ViewProps,\n image: {\n objectFit: 'cover',\n transition: 'all 0.2s ease',\n } as ViewProps,\n};\n","/**\n * Avatar View Component\n *\n * Renders an avatar with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Text } from '../../Text/Text';\nimport { Center } from 'app-studio';\nimport { Image } from 'app-studio';\nimport { AvatarViewProps } from './Avatar.props';\nimport { AvatarSizeMap, DefaultAvatarStyles } from './Avatar.style';\n// Declaration of the AvatarView functional component with destructured props from AvatarViewProps.\nexport const AvatarView = ({\n src,\n size = 'md',\n fallback = 'IM',\n views,\n imageError,\n setImageError,\n onClick = () => {},\n}: AvatarViewProps) => {\n // Determines the size of the avatar by mapping the size prop to the predefined AvatarSizeMap.\n const avatarSize = AvatarSizeMap[size];\n // Combine default image styles with custom styles\n const imageStyle: any = {\n ...DefaultAvatarStyles.image,\n ...(views?.image || {}),\n };\n // Start of the JSX returned by the AvatarView component, which uses the Center component as its root element.\n return (\n <Center\n role=\"avatar\"\n width={avatarSize}\n height={avatarSize}\n {...DefaultAvatarStyles.container}\n borderColor={imageError ? 'color.gray.400' : 'transparent'}\n onClick={onClick}\n {...views?.container}\n >\n {!imageError ? (\n <Image\n alt=\"IM\"\n src={src}\n style={imageStyle}\n width={avatarSize}\n height={avatarSize}\n onError={() => setImageError(true)}\n />\n ) : (\n <Text\n size={size}\n {...DefaultAvatarStyles.fallback}\n {...views?.fallback}\n >\n {fallback}\n </Text>\n )}\n </Center>\n );\n};\n","/**\n * Badge Styles\n *\n * Defines the styles for the Badge component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Shape, Size, Variant } from './Badge.type';\n\n/**\n * Badge sizes following the 4px grid system\n */\nexport const BadgeSizes: Record<Size, ViewProps> = {\n xs: {\n // Height: 20px (5 × 4px)\n minWidth: '20px',\n height: '20px',\n padding: '0 6px',\n // Typography\n fontSize: '10px', // Smallest text size\n fontWeight: '500', // Medium weight for better readability\n lineHeight: '20px', // Match height for vertical centering\n },\n sm: {\n // Height: 24px (6 × 4px)\n minWidth: '24px',\n height: '24px',\n padding: '0 8px',\n // Typography\n fontSize: '12px', // text-xs\n fontWeight: '500', // Medium weight\n lineHeight: '24px',\n },\n md: {\n // Height: 28px (7 × 4px)\n minWidth: '28px',\n height: '28px',\n padding: '0 10px',\n // Typography\n fontSize: '14px', // text-sm\n fontWeight: '500', // Medium weight\n lineHeight: '28px',\n },\n lg: {\n // Height: 32px (8 × 4px)\n minWidth: '32px',\n height: '32px',\n padding: '0 12px',\n // Typography\n fontSize: '14px', // text-sm\n fontWeight: '500', // Medium weight\n lineHeight: '32px',\n },\n xl: {\n // Height: 36px (9 × 4px)\n minWidth: '36px',\n height: '36px',\n padding: '0 14px',\n // Typography\n fontSize: '16px', // text-md\n fontWeight: '500', // Medium weight\n lineHeight: '36px',\n },\n};\n\n/**\n * Badge shapes with consistent border radius\n */\nexport const BadgeShapes: Record<Shape, number | string> = {\n sharp: 0,\n rounded: '8px', // Consistent with design system (rounded-md)\n pillShaped: '9999px', // Full rounded for pill shape\n};\n\n/**\n * Badge positions for absolute positioning\n */\nexport const PositionStyles: { [key: string]: React.CSSProperties } = {\n 'top-right': { top: '4px', right: '4px', position: 'absolute' }, // 4px offset (1 × 4px grid)\n 'top-left': { top: '4px', left: '4px', position: 'absolute' },\n 'bottom-right': { bottom: '4px', right: '4px', position: 'absolute' },\n 'bottom-left': { bottom: '4px', left: '4px', position: 'absolute' },\n};\n\n/**\n * Get badge variants with consistent styling based on theme mode\n */\nexport const getBadgeVariants = (\n themeMode: string\n): Record<Variant, ViewProps> => {\n return {\n filled: {\n backgroundColor: 'theme.primary',\n color: 'color.white',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'transparent',\n transition: 'all 0.2s ease',\n },\n outline: {\n backgroundColor: 'transparent',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'theme.primary',\n color: 'theme.primary',\n transition: 'all 0.2s ease',\n },\n link: {\n backgroundColor: 'transparent',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'transparent',\n color: 'theme.primary',\n textDecoration: 'underline',\n textUnderlineOffset: '2px',\n transition: 'all 0.2s ease',\n },\n ghost: {\n backgroundColor: 'transparent',\n color: 'color.gray.500',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'transparent',\n transition: 'all 0.2s ease',\n },\n };\n};\n\n/**\n * Default badge variants for backward compatibility\n */\nexport const BadgeVariants = getBadgeVariants('light');\n","/**\n * Badge View Component\n *\n * Renders a badge with various styles and states according to the design guidelines.\n */\n\nimport React from 'react';\nimport { BadgeProps } from './Badge.props';\nimport {\n BadgeShapes,\n BadgeSizes,\n PositionStyles,\n getBadgeVariants,\n} from './Badge.style';\nimport { Center, useTheme } from 'app-studio';\nimport { Text } from '../../Text/Text';\n// No need to import ViewProps as it's not used directly\n/**\n * Badge View Component\n */\nconst BadgeView: React.FC<BadgeProps> = ({\n content,\n position,\n shape = 'pillShaped',\n variant = 'filled',\n size = 'md',\n views,\n themeMode: elementMode,\n ...props\n}) => {\n const { themeMode } = useTheme();\n const currentThemeMode = elementMode || themeMode;\n const variantStyles = getBadgeVariants(currentThemeMode)[variant];\n // Combine styles for the badge\n const combinedStyles: Record<string, any> = {\n // Base styles\n width: 'fit-content',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'color.black',\n\n // Apply shape, size, and variant styles\n borderRadius: BadgeShapes[shape],\n ...BadgeSizes[size],\n ...variantStyles,\n\n // Apply position styles if provided\n ...(position ? PositionStyles[position] : {}),\n\n // Apply custom container styles\n ...views?.container,\n };\n return (\n <Center role=\"badge\" {...combinedStyles} {...props}>\n <Text\n role=\"badgeText\"\n fontWeight=\"500\" // Medium weight for better readability\n textAlign=\"center\"\n {...views?.text}\n color={combinedStyles.color}\n >\n {content || ''}\n </Text>\n </Center>\n );\n};\nexport default BadgeView;\n","import { Size } from './Link.type';\n// Defines a mapping of various size names (from 'xs' to '6xl') to their respective numeric icon sizes, providing a scalable way to reference icon sizes throughout the component.\nexport const IconSizes: Record<Size, number> = {\n xs: 12,\n sm: 14,\n md: 16,\n lg: 18,\n xl: 20,\n};\n","import React from 'react';\nimport { Link as ReactRouterLink } from 'react-router-dom';\nimport { Horizontal } from 'app-studio';\nimport { ExternalLinkIcon } from '../../Icon/Icon';\nimport { LinkViewProps } from './Link.props';\nimport { IconSizes } from './Link.style';\n// Component definition for 'LinkView', a functional component with props defined by 'LinkViewProps'.\nconst LinkView: React.FC<LinkViewProps> = ({\n children,\n // Default href prop set to root '/', used for navigation target.\n to = '/',\n // Default icon size for links, with 'sm' specifying a small-sized icon.\n iconSize = 'sm',\n // Determines the default underline behavior of the link, set to 'default'.\n underline = 'default',\n // State flag indicating whether the link is being hovered over.\n isHovered = false,\n // Boolean indicating if the link leads to an external resource.\n isExternal = false,\n // Custom styles for the icon and text, provided via a styles object.\n views = { icon: {}, text: {} },\n // Setter function for the hover state, noop function provided by default.\n setIsHovered = () => {},\n ...props\n}) => {\n // Function to handle mouse enter/leave events to toggle hover state.\n const handleHover = () => {\n if (underline === 'hover') setIsHovered(true);\n };\n return (\n <ReactRouterLink\n to={to}\n target={isExternal ? '_blank' : '_self'}\n style={{ textDecoration: 'inherit', color: 'inherit' }}\n >\n <Horizontal\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n gap={3}\n alignItems=\"center\"\n flexWrap=\"nowrap\"\n textDecoration={'none'}\n {...views.text}\n {...props}\n >\n {children}\n {isExternal && <ExternalLinkIcon widthHeight={IconSizes[iconSize]} />}\n </Horizontal>\n </ReactRouterLink>\n );\n};\nexport default LinkView;\n","import React from 'react';\nimport { LinkProps } from './Link/Link.props';\nimport { useLinkState } from './Link/Link.state';\nimport LinkView from './Link/Link.view';\n// Defines the 'LinkComponent' as a functional component with props typed to 'LinkProps'\nconst LinkComponent: React.FC<LinkProps> = (props) => {\n // Gets stateful logic and data necessary for the link component via 'useLinkState' hook\n const linkStates = useLinkState();\n // Renders 'LinkView' component passing down link state and props\n return <LinkView {...linkStates} {...props} />;\n};\n// Exports 'LinkComponent' as 'Link' for use in other parts of the application\nexport const Link = LinkComponent;\n","import { useState } from 'react';\n// This function initializes the Link component's state using the useState hook and exposes its state and setter function.\nexport const useLinkState = () => {\n const [isHovered, setIsHovered] = useState(false);\n return { isHovered, setIsHovered };\n};\n","import { Size, Speed } from './Loader.type';\n// Defines a mapping of spinning speed labels to their respective duration in seconds for the Loader component animations.\nexport const DefaultEllipsisSpeeds: Record<Speed, number> = {\n fast: 0.4,\n normal: 0.6,\n slow: 0.8,\n};\n// Sets up a scale of sizes, mapping size labels to numerical values to be used for Loader component dimensions.\nexport const DefaultSizes: Record<Size, number> = {\n xs: 14,\n sm: 18,\n md: 22,\n lg: 26,\n xl: 30,\n};\n// Specifies a mapping of spinning speed labels to numerical millisecond values, determining the speed of the Loader component's animation cycles.\nexport const DefaultSpeeds: Record<Speed, number> = {\n fast: 50,\n normal: 100,\n slow: 300,\n};\n","import React, { useEffect, useState } from 'react';\nimport { useTheme, View, ViewProps } from 'app-studio';\nimport { Center } from 'app-studio';\n\nimport {\n DefaultSpinnerProps,\n DottedProps,\n LoaderProps,\n QuarterProps,\n} from '../Loader/Loader.props';\n\nimport { DefaultSizes, DefaultSpeeds } from './Loader.style';\n\ninterface Props extends LoaderProps {\n views?: {\n container?: ViewProps;\n text?: ViewProps;\n };\n}\n\nconst DefaultSpinner: React.FC<DefaultSpinnerProps> = ({\n size = 'md',\n speed = 'normal',\n color = 'theme.loading',\n themeMode: elementMode,\n ...props\n}) => {\n const { getColor, themeMode } = useTheme();\n const colorStyle = getColor(color, {\n themeMode: elementMode ? elementMode : themeMode,\n });\n const sizeStyle = typeof size === 'number' ? size : DefaultSizes[size];\n\n const [angle, setAngle] = useState(0);\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n setAngle((prevAngle) => prevAngle + 45);\n }, DefaultSpeeds[speed]);\n\n return () => clearInterval(intervalId);\n }, [speed]);\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={`${sizeStyle}px`}\n height={`${sizeStyle}px`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colorStyle}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ transform: `rotate(${angle}deg)` }}\n {...props}\n >\n <g id=\"SVGRepo_bgCarrier\" strokeWidth=\"0\"></g>\n <g\n id=\"SVGRepo_tracerCarrier\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n ></g>\n <g id=\"SVGRepo_iconCarrier\">\n <path d=\"M21 12a9 9 0 11-6.219-8.56\"></path>\n </g>\n </svg>\n );\n};\n\nconst Dotted: React.FC<DottedProps> = ({\n size = 'md',\n speed = 'normal',\n color = 'theme.loading',\n themeMode: elementMode,\n ...props\n}) => {\n const { getColor, themeMode } = useTheme();\n const colorStyle = getColor(color, {\n themeMode: elementMode ? elementMode : themeMode,\n });\n const sizeStyle = typeof size === 'number' ? size : DefaultSizes[size];\n\n const [angle, setAngle] = useState(0);\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n setAngle((prevAngle) => prevAngle + 45);\n }, DefaultSpeeds[speed]);\n\n return () => clearInterval(intervalId);\n }, [speed]);\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 50 50\"\n width={`${sizeStyle}px`}\n height={`${sizeStyle}px`}\n style={{ transform: `rotate(${angle}deg)` }}\n {...props}\n >\n <circle cx=\"10\" cy=\"25\" r=\"4\" fill={colorStyle} />\n <circle cx=\"25\" cy=\"25\" r=\"4\" fill={colorStyle} />\n <circle cx=\"40\" cy=\"25\" r=\"4\" fill={colorStyle} />\n </svg>\n );\n};\n\nconst Quarter: React.FC<QuarterProps> = ({\n size = 'md',\n speed = 'normal',\n color = 'theme.loading',\n themeMode: elementMode,\n ...props\n}) => {\n const { getColor, themeMode } = useTheme();\n const colorStyle = getColor(color, {\n themeMode: elementMode ? elementMode : themeMode,\n });\n const sizeStyle = typeof size === 'number' ? size : DefaultSizes[size];\n\n const [angle, setAngle] = useState(0);\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n setAngle((prevAngle) => prevAngle + 45);\n }, DefaultSpeeds[speed]);\n\n return () => clearInterval(intervalId);\n }, [speed]);\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 50 50\"\n width={`${sizeStyle}px`}\n height={`${sizeStyle}px`}\n style={{ transform: `rotate(${angle}deg)` }}\n {...props}\n >\n <circle\n cx=\"25\"\n cy=\"25\"\n r=\"20\"\n fill=\"none\"\n stroke={colorStyle}\n strokeWidth=\"5\"\n strokeDasharray=\"1,10\"\n />\n </svg>\n );\n};\nconst LoaderView: React.FC<Props> = ({\n size,\n children,\n textColor,\n loaderColor,\n type = 'default',\n speed = 'normal',\n textPosition = 'right',\n views,\n ...props\n}) => {\n const style = { size, speed, color: loaderColor };\n\n const variants = {\n default: <DefaultSpinner {...style} />,\n dotted: <Dotted {...style} />,\n quarter: <Quarter {...style} />,\n };\n\n return (\n <Center\n gap={10}\n flexDirection={\n textPosition === 'top' || textPosition === 'bottom' ? 'column' : 'row'\n }\n {...props}\n {...views?.container}\n >\n {(textPosition === 'left' || textPosition === 'top') && children && (\n <View color={textColor} {...views?.text}>\n {children}\n </View>\n )}\n {variants[type]}\n {(textPosition === 'right' || textPosition === 'bottom') && children && (\n <View color={textColor} {...views?.text}>\n {children}\n </View>\n )}\n </Center>\n );\n};\n\nexport default LoaderView;\n","import React from 'react';\nimport { LoaderProps } from './Loader/Loader.props';\nimport LoaderView from './Loader/Loader.view';\n// Defines a LoaderComponent as a functional component with props defined by LoaderProps and returns the LoaderView component, passing along any received props.\nconst LoaderComponent: React.FC<LoaderProps> = (props) => (\n // Renders the LoaderView component by spreading the received props, which allows for a clean pass-through of properties.\n <LoaderView {...props} />\n);\n// Exports the LoaderComponent as Loader, making it available for use in other parts of the application.\nexport const Loader = LoaderComponent;\n","/**\n * Button Styles\n *\n * Defines the styles for the Button component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Shape, Size, Variant } from './Button.type';\n\n/**\n * Button sizes following the 4px grid system\n */\nexport const ButtonSizes: Record<Size, ViewProps> = {\n xs: {\n // Height: 24px (6 × 4px)\n minHeight: 4 * 4,\n paddingTop: 2,\n paddingBottom: 2,\n paddingLeft: 4,\n paddingRight: 4,\n // Typography\n\n fontSize: 12, // text-xs\n fontWeight: '500', // medium\n lineHeight: 20,\n letterSpacing: '-0.01em',\n },\n sm: {\n // Height: 32px (8 × 4px)\n minHeight: 6 * 4,\n paddingTop: 6,\n paddingBottom: 6,\n paddingLeft: 12,\n paddingRight: 12,\n // Typography\n\n fontSize: 12, // text-sm\n fontWeight: '500', // medium\n lineHeight: 12,\n letterSpacing: '-0.01em',\n },\n md: {\n // Height: 40px (10 × 4px) - standard height for interactive elements\n minHeight: 8 * 4,\n paddingTop: 8,\n paddingBottom: 8,\n paddingLeft: 16,\n paddingRight: 16,\n // Typography\n\n fontSize: 16, // text-sm/md\n fontWeight: '500', // medium\n lineHeight: 16,\n letterSpacing: '-0.01em',\n },\n lg: {\n minHeight: 10 * 4,\n paddingTop: 10,\n paddingBottom: 10,\n paddingLeft: 20,\n paddingRight: 20,\n // Typography\n\n fontSize: 16, // text-md/lg\n fontWeight: '500', // medium\n lineHeight: 20,\n letterSpacing: '-0.01em',\n },\n xl: {\n // Height: 60px (15 × 4px)\n minHeight: 12 * 4,\n paddingTop: 12,\n paddingBottom: 12,\n paddingLeft: 24,\n paddingRight: 24,\n // Typography\n\n fontSize: 18, // text-lg\n fontWeight: '500', // medium\n lineHeight: 24,\n letterSpacing: '-0.01em',\n },\n};\n\n/**\n * Button shapes with consistent border radius\n */\nexport const ButtonShapes: Record<Shape, number | string> = {\n sharp: 0,\n rounded: 8,\n pillShaped: 999, // Full rounded for pill shape\n};\n\n/**\n * Icon sizes for different button sizes\n */\nexport const IconSizes: Record<Size, ViewProps> = {\n xs: {\n width: 16,\n height: 16,\n padding: 6,\n },\n sm: {\n width: 20,\n height: 20,\n padding: 6,\n },\n md: {\n width: 24,\n height: 24,\n padding: 8,\n },\n lg: {\n width: 24,\n height: 24,\n padding: 12,\n },\n xl: {\n width: 28,\n height: 28,\n padding: 14,\n },\n};\n\nexport const getButtonVariants = (\n color: string,\n isLight: boolean\n): Record<Variant, ViewProps> => ({\n filled: {\n backgroundColor: color,\n color: isLight ? 'color.black' : 'color.white',\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: 'transparent',\n _hover: {\n transform: 'translateY(-1px)',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n },\n _active: {\n transform: 'translateY(-1px)',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n },\n transition: 'all 0.2s ease',\n },\n outline: {\n backgroundColor: 'transparent',\n color: color,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: color,\n _hover: {\n backgroundColor: color,\n color: isLight ? 'light.black' : 'light.white',\n transform: 'translateY(-1px)',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n },\n _active: {\n backgroundColor: color,\n color: isLight ? 'light.black' : 'light.white',\n transform: 'translateY(0)',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n },\n transition: 'all 0.2s ease',\n },\n ghost: {\n backgroundColor: 'transparent',\n color: color,\n borderWidth: 0,\n borderStyle: 'none',\n borderColor: 'transparent',\n _hover: {\n backgroundColor: color,\n color: isLight ? 'light.black' : 'light.white',\n transform: 'translateY(-1px)',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n },\n _active: {\n backgroundColor: color,\n color: isLight ? 'light.black' : 'light.white',\n transform: 'translateY(0)',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n },\n transition: 'all 0.2s ease',\n },\n link: {\n backgroundColor: 'transparent',\n color: isLight ? color : 'light.black',\n borderWidth: 0,\n borderStyle: 'none',\n borderColor: 'transparent',\n textDecoration: 'underline',\n textUnderlineOffset: '1px',\n textDecorationThickness: '1px',\n _hover: {\n textDecorationThickness: '2px',\n },\n _active: { textDecorationThickness: '2px' },\n transition: 'all 0.2s ease',\n },\n});\n","/**\n * ButtonView component – minimal and design‑system aligned.\n * - Chooses a **main color** with priority: `backgroundColor` → `color` → `theme.primary`.\n * - Uses `getButtonVariants` to derive base/hover/active styles per variant.\n */\n\nimport React, { useMemo } from 'react';\nimport { Element, Horizontal, Vertical, View, useTheme } from 'app-studio';\nimport { Link } from '../../Link/Link';\nimport { Loader } from '../../Loader/Loader';\nimport { ButtonProps } from './Button.props';\nimport {\n ButtonSizes,\n ButtonShapes,\n IconSizes,\n getButtonVariants,\n} from './Button.style';\nimport contrast from 'contrast';\n\nconst ButtonView: React.FC<ButtonProps> = ({\n /* behaviour */\n variant = 'filled',\n size = 'md',\n shape = 'rounded',\n iconPosition = 'left',\n loaderPosition = 'left',\n backgroundColor, // primary candidate for main color\n color, // 2nd candidate for main color (NOT text‑color)\n isAuto,\n isFilled,\n isDisabled,\n isLoading,\n isIconRounded,\n /* content */\n icon,\n children,\n /* nav */\n to,\n isExternal,\n /* misc */\n shadow,\n onClick,\n views = {},\n themeMode: elementMode,\n ...props\n}) => {\n /* theme helpers */\n const { getColor, themeMode } = useTheme();\n const mode = elementMode ?? themeMode;\n\n /* MAIN COLOR – determines the entire palette */\n const mainColorKey = backgroundColor ?? color ?? 'theme.primary';\n const mainTone = getColor(isDisabled ? 'theme.disabled' : mainColorKey, {\n themeMode: mode,\n });\n const tone = contrast(mainTone);\n\n /* variant palette */\n const palette = useMemo(\n () => getButtonVariants(mainTone, tone == 'light'),\n [mainTone, tone]\n );\n const base = palette[variant];\n\n /* layout helpers */\n const Wrapper = ['left', 'right'].includes(iconPosition)\n ? Horizontal\n : Vertical;\n const sizeStyles = ButtonSizes[size];\n const iconPad = isIconRounded ? IconSizes[size] : {};\n\n const content = (\n <Wrapper\n gap={8}\n alignItems=\"center\"\n justifyContent=\"center\"\n color={'inherit'}\n _hover={{\n color: 'inherit',\n }}\n {...sizeStyles}\n {...views?.content}\n >\n {isLoading && loaderPosition === 'left' && (\n <Loader\n size={size === 'xs' || size === 'sm' ? 'sm' : 'md'}\n color={'inherit'}\n _hover={{\n color: 'inherit',\n }}\n {...views?.loader}\n />\n )}\n\n {icon && ['left', 'top'].includes(iconPosition) && !isLoading && (\n <View\n color={'inherit'}\n _hover={{\n color: 'inherit',\n }}\n {...views?.icon}\n >\n {icon}\n </View>\n )}\n\n {children}\n\n {icon && ['right', 'bottom'].includes(iconPosition) && !isLoading && (\n <View\n color={'inherit'}\n _hover={{\n color: 'inherit',\n }}\n {...views?.icon}\n >\n {icon}\n </View>\n )}\n\n {isLoading && loaderPosition === 'right' && (\n <Loader\n size={size === 'xs' || size === 'sm' ? 'sm' : 'md'}\n color={'inherit'}\n _hover={{\n color: 'inherit',\n }}\n {...views?.loader}\n />\n )}\n </Wrapper>\n );\n\n return (\n <Element\n as={variant === 'link' && to ? 'div' : 'button'}\n type={variant === 'link' && to ? undefined : 'button'}\n disabled={Boolean(isDisabled || isLoading)}\n /* sizing */\n {...sizeStyles}\n {...iconPad}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n // width={isAuto ? 'fit-content' : isFilled ? '100%' : undefined}\n /* visuals */\n borderRadius={ButtonShapes[shape]}\n boxShadow={shadow}\n transition=\"all 0.2s ease\"\n cursor={isDisabled ? 'default' : 'pointer'}\n onClick={onClick}\n {...base}\n {...views?.container}\n {...props}\n >\n {to ? (\n <Link\n to={to}\n isExternal={isExternal}\n color={'inherit'}\n textDecoration={'inherit'}\n textDecorationColor={'inherit'} // Link underline color matches text color\n {...views?.link}\n >\n {content}\n </Link>\n ) : (\n content\n )}\n </Element>\n );\n};\n\nexport default ButtonView;\n","import React from 'react';\nimport { ButtonProps } from './Button/Button.props';\nimport { useButtonState } from './Button/Button.state';\n// Importing TypeScript type for button properties to ensure the component receives the correct props.\nimport ButtonView from './Button/Button.view';\n// Importing a custom hook to manage the state specific to the button component.\nconst ButtonComponent: React.FC<ButtonProps> = (props: any) => {\n // Importing the view part of the button, which is presumably a presentational component.\n const { isHovered, setIsHovered } = useButtonState();\n // Defining the button component with generic React Functional Component type augmented with ButtonProps type.\n const handleHover = () => setIsHovered(!isHovered);\n // Destructuring the state and state update function from the custom hook for button state management.\n return (\n // Defines a function to toggle the hover state of the button.\n <ButtonView\n isHovered={isHovered}\n // Rendering the ButtonView component and spreading the received props on it.\n setIsHovered={setIsHovered}\n // Passing the isHovered state and the setIsHovered function to the ButtonView.\n onMouseEnter={handleHover}\n // Binding handleHover function to onMouseEnter and onMouseLeave events to toggle hover effect.\n onMouseLeave={handleHover}\n {...props}\n />\n );\n // Exports the Button component for use in other parts of the application.\n};\nexport const Button = ButtonComponent;\n","import React from 'react';\nexport const useButtonState = () => {\n const [isHovered, setIsHovered] = React.useState(false);\n // This custom react hook 'useButtonState' is defined for managing the state of a button, especially for hover interactions.\n return { isHovered, setIsHovered };\n // The 'setIsHovered' function is used to update the value of 'isHovered' state when the hover status of the button changes.\n // A state variable 'isHovered' is declared with its initial value set to 'false', indicating that the button is not hovered by default.\n};\n// The hook returns an object containing 'isHovered' state and the 'setIsHovered' function to enable state management from the consumer component.\n","/**\n * Card Styles\n *\n * Defines the styles for the Card component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { CardStyles, Shape, Size, Variant } from './Card.type';\n\n/**\n * Card sizes following the 4px grid system\n */\nexport const CardSizes: Record<Size, ViewProps> = {\n sm: {\n padding: '12px', // 3 × 4px grid\n },\n md: {\n padding: '16px', // 4 × 4px grid\n },\n lg: {\n padding: '24px', // 6 × 4px grid\n },\n};\n\n/**\n * Card shapes with consistent border radius\n */\nexport const CardShapes: Record<Shape, number | string> = {\n sharp: 0,\n rounded: '8px', // Consistent with design system (rounded-md)\n pillShaped: '16px', // Larger radius for pill-shaped cards\n};\n\n/**\n * Get card variants with consistent styling based on theme mode\n */\nexport const getCardVariants = (\n themeMode: string\n): Record<Variant, ViewProps> => {\n return {\n default: {\n backgroundColor: 'color.white',\n border: 'none',\n transition: 'all 0.2s ease',\n },\n outlined: {\n backgroundColor: 'color.white',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n transition: 'all 0.2s ease',\n _hover: {\n borderColor: 'color.gray.300',\n },\n },\n elevated: {\n backgroundColor: 'color.white',\n boxShadow: '0px 2px 8px rgba(0, 0, 0, 0.08)',\n border: 'none',\n transition: 'all 0.2s ease',\n _hover: {\n boxShadow: '0px 4px 12px rgba(0, 0, 0, 0.12)',\n transform: 'translateY(-2px)',\n },\n },\n };\n};\n\n/**\n * Default card variants (for backward compatibility)\n */\nexport const CardVariants = getCardVariants('light');\n\n/**\n * Function to get default styles for Card components\n * @param theme - Theme object from useTheme hook\n */\nexport const getDefaultCardStyles = (theme: any): CardStyles => {\n return {\n container: {\n backgroundColor: 'color.white',\n color: 'color.black',\n borderRadius: '8px', // Consistent with design system\n overflow: 'hidden',\n transition: 'all 0.2s ease',\n },\n header: {\n padding: '16px', // 4 × 4px grid\n borderBottomWidth: '1px',\n borderBottomStyle: 'solid',\n borderBottomColor: 'color.gray.200',\n color: 'color.black',\n },\n content: {\n padding: '16px', // 4 × 4px grid\n color: 'color.black',\n },\n footer: {\n padding: '16px', // 4 × 4px grid\n borderTopWidth: '1px',\n borderTopStyle: 'solid',\n borderTopColor: 'color.gray.200',\n },\n };\n};\n","import { createContext, useContext } from 'react';\nimport { CardStyles } from './Card.type';\n\nexport interface CardContextValue {\n styles?: CardStyles;\n}\n\nexport const CardContext = createContext<CardContextValue>({});\n\nexport const useCardContext = () => {\n return useContext(CardContext);\n};\n","import React, { useMemo } from 'react';\nimport { View, useTheme } from 'app-studio';\nimport { Vertical } from 'app-studio';\nimport {\n CardProps,\n CardHeaderProps,\n CardContentProps,\n CardFooterProps,\n} from './Card.props';\nimport {\n CardShapes,\n getCardVariants,\n getDefaultCardStyles,\n} from './Card.style';\nimport { CardContext, useCardContext } from './Card.context';\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({\n children,\n views,\n style,\n themeMode: elementMode,\n ...props\n}) => {\n const theme = useTheme();\n const { styles: contextStyles } = useCardContext();\n const defaultStyles = getDefaultCardStyles(theme).header;\n\n // Merge styles: Default < Context Override < Direct Props/Style\n const mergedProps = {\n ...defaultStyles,\n ...contextStyles?.header,\n ...props,\n style: {\n ...defaultStyles?.style,\n ...contextStyles?.header?.style,\n ...style,\n },\n };\n\n return <View {...mergedProps}>{children}</View>;\n};\n\nexport const CardContent: React.FC<CardContentProps> = ({\n children,\n views,\n style,\n themeMode: elementMode,\n ...props\n}) => {\n const theme = useTheme();\n const { styles: contextStyles } = useCardContext();\n const defaultStyles = getDefaultCardStyles(theme).content;\n\n // Merge styles: Default < Context Override < Direct Props/Style\n const mergedProps = {\n ...defaultStyles,\n ...contextStyles?.content,\n ...props,\n style: {\n ...defaultStyles?.style,\n ...contextStyles?.content?.style,\n ...style,\n },\n };\n\n return <View {...mergedProps}>{children}</View>;\n};\n\nexport const CardFooter: React.FC<CardFooterProps> = ({\n children,\n views,\n style,\n themeMode: elementMode,\n ...props\n}) => {\n const theme = useTheme();\n const { styles: contextStyles } = useCardContext();\n const defaultStyles = getDefaultCardStyles(theme).footer;\n\n // Merge styles: Default < Context Override < Direct Props/Style\n const mergedProps = {\n ...defaultStyles,\n ...contextStyles?.footer,\n ...props,\n style: {\n ...defaultStyles?.style,\n ...contextStyles?.footer?.style,\n ...style,\n },\n };\n\n return <View {...mergedProps}>{children}</View>;\n};\n\nexport const CardView: React.FC<CardProps> = ({\n variant = 'default',\n size = 'md',\n shape = 'rounded',\n children,\n header,\n footer,\n isFullWidth = false,\n views,\n style,\n themeMode: elementMode,\n ...props\n}) => {\n const theme = useTheme();\n const defaultStyles = getDefaultCardStyles(theme);\n\n // Prepare context value, merging default styles with user's `views` overrides\n const contextValue = useMemo(\n () => ({\n styles: {\n container: { ...defaultStyles.container, ...views?.container },\n header: { ...defaultStyles.header, ...views?.header },\n content: { ...defaultStyles.content, ...views?.content },\n footer: { ...defaultStyles.footer, ...views?.footer },\n },\n }),\n [defaultStyles, views]\n );\n\n // Determine if we have explicit Card.Header, Card.Content, Card.Footer components\n // or if we need to wrap children in a default layout\n const hasExplicitStructure = React.Children.toArray(children).some(\n (child) =>\n React.isValidElement(child) &&\n (child.type === CardHeader ||\n child.type === CardContent ||\n child.type === CardFooter)\n );\n\n // Get the appropriate variant styles based on theme mode\n const { themeMode } = theme;\n const currentThemeMode = elementMode || themeMode;\n const variantStyles = getCardVariants(currentThemeMode)[variant];\n\n // Merge styles for the root element\n const mergedRootProps = {\n width: isFullWidth ? '100%' : 'auto',\n borderRadius: CardShapes[shape],\n overflow: 'hidden',\n ...variantStyles,\n ...contextValue.styles.container,\n ...props,\n style: { ...contextValue.styles.container?.style, ...style },\n };\n\n return (\n <CardContext.Provider value={contextValue}>\n <View {...mergedRootProps}>\n {hasExplicitStructure ? (\n children\n ) : (\n <Vertical>\n {header && <CardHeader>{header}</CardHeader>}\n <CardContent>{children}</CardContent>\n {footer && <CardFooter>{footer}</CardFooter>}\n </Vertical>\n )}\n </View>\n </CardContext.Provider>\n );\n};\n","import React from 'react';\nimport { CardProps, CardType } from './Card/Card.props';\nimport {\n CardView,\n CardHeader,\n CardContent,\n CardFooter,\n} from './Card/Card.view';\n\n/**\n * Card component for displaying content in a contained, styled box.\n * Can be used with Card.Header, Card.Content, and Card.Footer for structured layout,\n * or with direct children for simpler usage.\n */\nconst CardComponent: React.FC<CardProps> = (props) => {\n return <CardView {...props} />;\n};\n\nexport const Card = CardComponent as CardType;\n\n// Assign the sub-components to the main component\nCard.Header = CardHeader;\nCard.Content = CardContent;\nCard.Footer = CardFooter;\n","import { useState, useEffect, useCallback, useRef, useMemo } from 'react';\nimport { generateId } from '../../../utils/id';\n\nexport interface CarouselStateProps {\n defaultActiveIndex?: number;\n activeIndex?: number;\n onChange?: (index: number) => void;\n autoPlay?: boolean;\n autoPlayInterval?: number;\n pauseOnHover?: boolean;\n infinite?: boolean;\n totalSlides?: number; // Optional for compound component pattern\n stepIndices?: number[]; // Optional specific indices to navigate to\n}\n\nexport const useCarouselState = ({\n defaultActiveIndex = 0,\n activeIndex: controlledActiveIndex,\n onChange,\n autoPlay = false,\n autoPlayInterval = 3000,\n pauseOnHover = true,\n infinite = true,\n totalSlides: initialTotalSlides,\n stepIndices,\n}: CarouselStateProps) => {\n // For compound component pattern: track slides dynamically\n const slideCountRef = useRef<number>(initialTotalSlides || 0);\n const [totalSlides, setTotalSlides] = useState(initialTotalSlides || 0);\n const slideRegistry = useRef<Set<number>>(new Set());\n const nextSlideId = useRef<number>(0);\n const contentId = useMemo(() => generateId('carousel-content'), []);\n const [activeIndex, setActiveIndex] = useState(\n controlledActiveIndex !== undefined\n ? controlledActiveIndex\n : defaultActiveIndex\n );\n const [isHovered, setIsHovered] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [dragStartX, setDragStartX] = useState(0);\n const [dragStartY, setDragStartY] = useState(0);\n const autoPlayTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n // Update internal state when controlled activeIndex changes\n useEffect(() => {\n if (controlledActiveIndex !== undefined) {\n setActiveIndex(controlledActiveIndex);\n }\n }, [controlledActiveIndex]);\n\n // Handle slide change\n const goToSlide = useCallback(\n (index: number) => {\n let newIndex = index;\n\n // Handle infinite looping\n if (infinite) {\n if (index < 0) {\n newIndex = totalSlides - 1;\n } else if (index >= totalSlides) {\n newIndex = 0;\n }\n } else {\n // Clamp index to valid range\n newIndex = Math.max(0, Math.min(index, totalSlides - 1));\n }\n\n // If stepIndices is provided, find the closest allowed index\n if (stepIndices && stepIndices.length > 0) {\n // If the exact index is in stepIndices, use it\n if (stepIndices.includes(newIndex)) {\n // Index is already valid\n } else {\n // Find the closest step index\n const closestIndex = stepIndices.reduce((prev, curr) => {\n return Math.abs(curr - newIndex) < Math.abs(prev - newIndex)\n ? curr\n : prev;\n });\n newIndex = closestIndex;\n }\n }\n\n if (controlledActiveIndex === undefined) {\n setActiveIndex(newIndex);\n }\n\n if (onChange) {\n onChange(newIndex);\n }\n },\n [controlledActiveIndex, infinite, onChange, totalSlides]\n );\n\n // Go to next slide\n const nextSlide = useCallback(() => {\n goToSlide(activeIndex + 1);\n }, [activeIndex, goToSlide]);\n\n // Go to previous slide\n const prevSlide = useCallback(() => {\n goToSlide(activeIndex - 1);\n }, [activeIndex, goToSlide]);\n\n // Handle auto-play\n useEffect(() => {\n if (autoPlay && !isHovered && !isDragging) {\n autoPlayTimerRef.current = setInterval(() => {\n nextSlide();\n }, autoPlayInterval);\n }\n\n return () => {\n if (autoPlayTimerRef.current) {\n clearInterval(autoPlayTimerRef.current);\n }\n };\n }, [\n autoPlay,\n autoPlayInterval,\n isHovered,\n isDragging,\n nextSlide,\n pauseOnHover,\n ]);\n\n // Handle mouse enter/leave for pause on hover\n const handleMouseEnter = useCallback(() => {\n if (pauseOnHover) {\n setIsHovered(true);\n }\n }, [pauseOnHover]);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n // Handle drag interactions\n const handleDragStart = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n setIsDragging(true);\n\n if ('touches' in e) {\n setDragStartX(e.touches[0].clientX);\n setDragStartY(e.touches[0].clientY);\n } else {\n setDragStartX(e.clientX);\n setDragStartY(e.clientY);\n }\n },\n []\n );\n\n const handleDragMove = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n if (!isDragging) return;\n\n let currentX: number;\n let currentY: number;\n\n if ('touches' in e) {\n currentX = e.touches[0].clientX;\n currentY = e.touches[0].clientY;\n } else {\n currentX = e.clientX;\n currentY = e.clientY;\n }\n\n const diffX = currentX - dragStartX;\n const diffY = currentY - dragStartY;\n\n // Determine if horizontal drag is more significant than vertical\n if (Math.abs(diffX) > Math.abs(diffY) && Math.abs(diffX) > 50) {\n if (diffX > 0) {\n prevSlide();\n } else {\n nextSlide();\n }\n setIsDragging(false);\n }\n },\n [isDragging, dragStartX, dragStartY, nextSlide, prevSlide]\n );\n\n const handleDragEnd = useCallback(() => {\n setIsDragging(false);\n }, []);\n\n // For compound component pattern: register/unregister slides\n const registerSlide = useCallback(() => {\n const id = nextSlideId.current++;\n slideRegistry.current.add(id);\n const newCount = slideRegistry.current.size;\n slideCountRef.current = newCount;\n setTotalSlides(newCount);\n return id;\n }, []);\n\n const unregisterSlide = useCallback(\n (id: number) => {\n slideRegistry.current.delete(id);\n const newCount = slideRegistry.current.size;\n slideCountRef.current = newCount;\n setTotalSlides(newCount);\n\n // Adjust currentIndex if it becomes invalid due to slide removal\n if (newCount > 0 && activeIndex >= newCount) {\n const newIndex = Math.max(0, newCount - 1);\n if (controlledActiveIndex === undefined) {\n setActiveIndex(newIndex);\n }\n if (onChange) {\n onChange(newIndex);\n }\n }\n },\n [activeIndex, controlledActiveIndex, onChange]\n );\n\n // Calculate if we can navigate\n const canGoPrevious = infinite || activeIndex > 0;\n const canGoNext = infinite || activeIndex < totalSlides - 1;\n\n return {\n activeIndex,\n totalSlides,\n goToSlide,\n nextSlide,\n prevSlide,\n canGoNext,\n canGoPrevious,\n handleMouseEnter,\n handleMouseLeave,\n handleDragStart,\n handleDragMove,\n handleDragEnd,\n registerSlide,\n unregisterSlide,\n contentId,\n infinite,\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { IndicatorVariant, CarouselStyles } from './Carousel.type';\n\nexport const IndicatorStyles: Record<IndicatorVariant, ViewProps> = {\n dot: {\n width: '10px',\n height: '10px',\n borderRadius: '50%',\n backgroundColor: 'color.gray.300',\n margin: '0 4px',\n cursor: 'pointer',\n transition: 'background-color 0.3s ease',\n },\n line: {\n width: '20px',\n height: '4px',\n borderRadius: '2px',\n backgroundColor: 'color.gray.300',\n margin: '0 4px',\n cursor: 'pointer',\n transition: 'background-color 0.3s ease',\n },\n number: {\n minWidth: '24px',\n height: '24px',\n borderRadius: '50%',\n backgroundColor: 'color.gray.300',\n margin: '0 4px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '12px',\n transition: 'background-color 0.3s ease',\n },\n};\n\nexport const ActiveIndicatorStyles: Record<IndicatorVariant, ViewProps> = {\n dot: {\n backgroundColor: 'theme.primary',\n },\n line: {\n backgroundColor: 'theme.primary',\n },\n number: {\n backgroundColor: 'theme.primary',\n color: 'color.white',\n },\n};\n\nexport const NavigationButtonStyles: ViewProps = {\n width: '40px',\n height: '40px',\n borderRadius: '50%',\n backgroundColor: 'color.white',\n color: 'color.gray.800',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n boxShadow: '0 2px 5px rgba(0, 0, 0, 0.1)',\n zIndex: 1,\n transition: 'background-color 0.3s ease',\n _hover: {\n backgroundColor: 'color.gray.100',\n },\n};\n\n// Default styles for the compound component pattern\nexport const getDefaultCarouselStyles = (): CarouselStyles => ({\n container: {\n position: 'relative', // Needed for absolute positioning of controls\n overflow: 'hidden', // Clip the content\n },\n content: {\n overflow: 'hidden', // Outer container clips the inner flex container\n width: '100%',\n height: '100%',\n },\n innerContainer: {\n display: 'flex',\n // Basic transition for the slide effect\n transitionProperty: 'transform',\n transitionDuration: '300ms', // Adjust duration as needed\n transitionTimingFunction: 'ease-in-out',\n height: '100%',\n },\n item: {\n flex: '0 0 100%', // Each item takes full width of the content container\n minWidth: 0, // Prevent flex items from expanding based on content\n position: 'relative', // For potential content positioning within the slide\n height: '100%',\n },\n prevButton: {\n position: 'absolute',\n top: '50%',\n left: '16px', // Position from left edge\n transform: 'translateY(-50%)', // Vertically center\n zIndex: 10, // Ensure button is above slides\n ...NavigationButtonStyles,\n },\n nextButton: {\n position: 'absolute',\n top: '50%',\n right: '16px', // Position from right edge\n transform: 'translateY(-50%)', // Vertically center\n zIndex: 10,\n ...NavigationButtonStyles,\n },\n});\n","import { createContext, useContext } from 'react';\nimport { CarouselContextValue } from './Carousel.type';\n\nexport const CarouselContext = createContext<CarouselContextValue | null>(null);\n\nexport const useCarouselContext = () => {\n const context = useContext(CarouselContext);\n if (!context) {\n throw new Error(\n 'Carousel compound components must be used within <Carousel>'\n );\n }\n return context;\n};\n","import React, { useMemo, useEffect, useRef } from 'react';\nimport { View } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Button } from '../../Button/Button';\nimport { ChevronIcon } from '../../Icon/Icon';\nimport {\n CarouselProps,\n CarouselSlideProps,\n CarouselContentProps,\n CarouselItemProps,\n CarouselPreviousProps,\n CarouselNextProps,\n} from './Carousel.props';\nimport { useCarouselState } from './Carousel.state';\nimport {\n IndicatorStyles,\n ActiveIndicatorStyles,\n NavigationButtonStyles,\n getDefaultCarouselStyles,\n} from './Carousel.style';\nimport { CarouselContext, useCarouselContext } from './Carousel.context';\n\nexport const CarouselSlide: React.FC<CarouselSlideProps> = ({\n children,\n isActive,\n views,\n ...props\n}) => {\n return (\n <View\n flexShrink={0}\n width=\"100%\"\n height=\"100%\"\n display={isActive ? 'block' : 'none'}\n {...views}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// --- New Compound Components ---\n\n// CarouselPrevious component\nexport const CarouselPreviousComponent: React.FC<CarouselPreviousProps> = ({\n views,\n children, // Allow custom content/icon\n ...props // Spread remaining ButtonProps\n}) => {\n const {\n goToPrevious,\n canGoPrevious,\n styles: globalStyles,\n } = useCarouselContext();\n const defaultStyles = getDefaultCarouselStyles().prevButton;\n const mergedStyles = {\n ...defaultStyles,\n ...globalStyles?.prevButton,\n ...views?.prevButton,\n };\n\n return (\n <Button\n aria-label=\"Previous slide\"\n onClick={() => goToPrevious()}\n isDisabled={!canGoPrevious}\n {...(mergedStyles as any)} // Apply styles\n {...props} // Spread user props\n >\n {children ?? <ChevronIcon orientation=\"left\" widthHeight={16} />}\n </Button>\n );\n};\n\n// CarouselNext component\nexport const CarouselNextComponent: React.FC<CarouselNextProps> = ({\n views,\n children,\n ...props\n}) => {\n const { goToNext, canGoNext, styles: globalStyles } = useCarouselContext();\n const defaultStyles = getDefaultCarouselStyles().nextButton;\n const mergedStyles = {\n ...defaultStyles,\n ...globalStyles?.nextButton,\n ...views?.nextButton,\n };\n\n return (\n <Button\n aria-label=\"Next slide\"\n onClick={() => goToNext()}\n isDisabled={!canGoNext}\n {...(mergedStyles as any)}\n {...props}\n >\n {children ?? <ChevronIcon orientation=\"right\" widthHeight={16} />}\n </Button>\n );\n};\n\n// CarouselItem component\nexport const CarouselItemComponent: React.FC<CarouselItemProps> = ({\n children,\n views,\n ...props\n}) => {\n const {\n registerSlide,\n unregisterSlide,\n styles: globalStyles,\n } = useCarouselContext();\n const slideIdRef = useRef<number | null>(null);\n\n // Register/unregister slide on mount/unmount\n useEffect(() => {\n const id = registerSlide();\n slideIdRef.current = id;\n return () => {\n if (slideIdRef.current !== null) {\n unregisterSlide(slideIdRef.current);\n }\n };\n }, [registerSlide, unregisterSlide]);\n\n const defaultStyles = getDefaultCarouselStyles().item;\n const mergedStyles = {\n ...defaultStyles,\n ...globalStyles?.item,\n ...views?.item,\n };\n\n return (\n <View\n role=\"group\"\n aria-roledescription=\"slide\"\n {...mergedStyles}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// CarouselContent component\nexport const CarouselContentComponent: React.FC<CarouselContentProps> = ({\n children,\n views,\n style, // User style for outer container\n ...props // User props for outer container\n}) => {\n const {\n currentIndex,\n styles: globalStyles,\n contentId,\n } = useCarouselContext();\n const defaultStyles = getDefaultCarouselStyles();\n\n const mergedContentStyles = {\n ...defaultStyles.content,\n ...globalStyles?.content,\n ...views?.content,\n };\n const mergedInnerStyles = {\n ...defaultStyles.innerContainer,\n ...globalStyles?.innerContainer,\n ...views?.innerContainer,\n };\n\n // Calculate the translation based on the current index\n const translateX = `-${currentIndex * 100}%`;\n\n return (\n // Outer container for overflow: hidden\n <View\n {...mergedContentStyles}\n {...props} // Spread user props onto outer container\n style={{ ...mergedContentStyles?.style, ...style }}\n id={contentId}\n aria-live=\"polite\" // Announce slide changes politely\n >\n {/* Inner container that moves */}\n <View\n {...mergedInnerStyles}\n style={{\n ...mergedInnerStyles?.style,\n transform: `translateX(${translateX})`,\n }}\n >\n {children}\n </View>\n </View>\n );\n};\n\n// --- Legacy View Component ---\n\nexport const CarouselView: React.FC<CarouselProps> = ({\n children,\n defaultActiveIndex = 0,\n activeIndex: controlledActiveIndex,\n onChange,\n showNavigation = true,\n navigationPosition = 'inside',\n prevButton,\n nextButton,\n showIndicators = true,\n indicatorPosition = 'bottom',\n indicatorVariant = 'dot',\n autoPlay = false,\n autoPlayInterval = 3000,\n pauseOnHover = true,\n infinite = true,\n direction = 'horizontal',\n transitionDuration = 300,\n views,\n stepIndices,\n themeMode: elementMode,\n ...props\n}) => {\n // Convert children to array if it's not already\n const slides = useMemo(() => {\n return React.Children.toArray(children);\n }, [children]);\n\n // Use carousel state hook\n const carouselState = useCarouselState({\n defaultActiveIndex,\n activeIndex: controlledActiveIndex,\n onChange,\n autoPlay,\n autoPlayInterval,\n pauseOnHover,\n infinite,\n totalSlides: slides.length,\n });\n\n const {\n activeIndex,\n totalSlides,\n goToSlide,\n nextSlide,\n prevSlide,\n handleMouseEnter,\n handleMouseLeave,\n handleDragStart,\n handleDragMove,\n handleDragEnd,\n } = carouselState;\n\n // Prepare base styles for context\n // const baseStyles = getDefaultCarouselStyles();\n\n // Render navigation buttons\n const renderNavigation = () => {\n if (!showNavigation) return null;\n\n const prevButtonElement = prevButton || (\n <View\n as=\"button\"\n aria-label=\"Previous slide\"\n {...NavigationButtonStyles}\n {...views?.prevButton}\n >\n ❮\n </View>\n );\n\n const nextButtonElement = nextButton || (\n <View\n as=\"button\"\n aria-label=\"Next slide\"\n {...NavigationButtonStyles}\n {...views?.nextButton}\n >\n ❯\n </View>\n );\n\n return (\n <>\n <View\n position=\"absolute\"\n top=\"50%\"\n transform=\"translateY(-50%)\"\n left={navigationPosition === 'inside' ? '10px' : '-40px'}\n onClick={prevSlide}\n cursor={!infinite && activeIndex === 0 ? 'not-allowed' : 'pointer'}\n opacity={!infinite && activeIndex === 0 ? 0.5 : 1}\n >\n {prevButtonElement}\n </View>\n <View\n position=\"absolute\"\n top=\"50%\"\n transform=\"translateY(-50%)\"\n right={navigationPosition === 'inside' ? '10px' : '-40px'}\n onClick={nextSlide}\n cursor={\n !infinite && activeIndex === slides.length - 1\n ? 'not-allowed'\n : 'pointer'\n }\n opacity={!infinite && activeIndex === slides.length - 1 ? 0.5 : 1}\n >\n {nextButtonElement}\n </View>\n </>\n );\n };\n\n // Render indicators\n const renderIndicators = () => {\n if (!showIndicators) return null;\n\n return (\n <Horizontal\n position=\"absolute\"\n left=\"0\"\n right=\"0\"\n justifyContent=\"center\"\n {...(indicatorPosition === 'top'\n ? { top: '10px' }\n : { bottom: '10px' })}\n {...views?.indicators}\n >\n {slides.map((_, index) => (\n <View\n key={index}\n onClick={() => goToSlide(index)}\n cursor=\"pointer\"\n {...IndicatorStyles[indicatorVariant]}\n {...(index === activeIndex\n ? { ...ActiveIndicatorStyles[indicatorVariant] }\n : {})}\n {...views?.indicator}\n {...(index === activeIndex ? views?.activeIndicator : {})}\n >\n {indicatorVariant === 'number' && index + 1}\n </View>\n ))}\n </Horizontal>\n );\n };\n\n // Check if children are using the compound component pattern\n const hasCompoundComponents = useMemo(() => {\n return React.Children.toArray(children).some(\n (child) =>\n React.isValidElement(child) &&\n (child.type === CarouselContentComponent ||\n child.type === CarouselItemComponent ||\n child.type === CarouselPreviousComponent ||\n child.type === CarouselNextComponent)\n );\n }, [children]);\n\n // If using compound components, render with context provider\n if (hasCompoundComponents) {\n return (\n <CarouselContext.Provider\n value={{\n currentIndex: activeIndex,\n totalSlides,\n goToSlide,\n goToNext: nextSlide,\n goToPrevious: prevSlide,\n canGoNext: carouselState.canGoNext,\n canGoPrevious: carouselState.canGoPrevious,\n registerSlide: carouselState.registerSlide,\n unregisterSlide: carouselState.unregisterSlide,\n styles: {\n ...getDefaultCarouselStyles(),\n ...views,\n },\n contentId: carouselState.contentId,\n infinite,\n }}\n >\n <View\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label=\"Carousel\"\n position=\"relative\"\n width=\"100%\"\n height=\"100%\"\n overflow=\"hidden\"\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n </CarouselContext.Provider>\n );\n }\n\n // Legacy rendering\n return (\n <View\n position=\"relative\"\n width=\"100%\"\n height=\"100%\"\n overflow=\"hidden\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onTouchStart={handleDragStart}\n onTouchMove={handleDragMove}\n onTouchEnd={handleDragEnd}\n onMouseDown={handleDragStart}\n onMouseMove={handleDragMove}\n onMouseUp={handleDragEnd}\n {...views?.container}\n {...props}\n >\n <View\n width=\"100%\"\n height=\"100%\"\n position=\"relative\"\n {...views?.slideWrapper}\n >\n {slides.map((slide, index) => (\n <CarouselSlide\n key={index}\n isActive={index === activeIndex}\n index={index}\n views={views?.slide}\n >\n {slide}\n </CarouselSlide>\n ))}\n </View>\n\n {renderNavigation()}\n {renderIndicators()}\n </View>\n );\n};\n","import React from 'react';\nimport { CarouselProps, CarouselType } from './Carousel/Carousel.props';\nimport {\n CarouselView,\n CarouselSlide,\n CarouselContentComponent,\n CarouselItemComponent,\n CarouselPreviousComponent,\n CarouselNextComponent,\n} from './Carousel/Carousel.view';\n\n/**\n * Carousel component for displaying a series of content items that can be navigated through.\n * Supports navigation controls, indicators, auto-play, and touch/mouse interactions.\n *\n * Can be used in two ways:\n * 1. Traditional approach with direct children as slides\n * 2. Compound component pattern with Carousel.Content, Carousel.Item, Carousel.Previous, and Carousel.Next\n */\nconst CarouselComponent: React.FC<CarouselProps> = (props) => {\n return <CarouselView {...props} />;\n};\n\nexport const Carousel = CarouselComponent as CarouselType;\n\n// Assign the sub-components to the main component\nCarousel.Slide = CarouselSlide; // Legacy approach\nCarousel.Content = CarouselContentComponent; // Compound component pattern\nCarousel.Item = CarouselItemComponent; // Compound component pattern\nCarousel.Previous = CarouselPreviousComponent; // Compound component pattern\nCarousel.Next = CarouselNextComponent; // Compound component pattern\n","/**\n * Chart Colors\n *\n * Defines a consistent color scheme for all chart examples.\n * These colors should be used in the same order across all chart types\n * to ensure consistency between the charts and their legends.\n */\n\nexport const CHART_COLORS = {\n // Primary colors for all charts\n blue: 'color.blue.500',\n green: 'color.green.500',\n purple: 'color.purple.500',\n orange: 'color.orange.500',\n red: 'color.red.500',\n\n // Additional colors if needed\n teal: 'color.teal.500',\n pink: 'color.pink.500',\n indigo: 'color.indigo.500',\n yellow: 'color.yellow.500',\n cyan: 'color.cyan.500',\n};\n\n// Default color array for consistent ordering\nexport const DEFAULT_CHART_COLORS = [\n CHART_COLORS.blue,\n CHART_COLORS.green,\n CHART_COLORS.purple,\n CHART_COLORS.orange,\n CHART_COLORS.red,\n CHART_COLORS.teal,\n CHART_COLORS.pink,\n CHART_COLORS.indigo,\n CHART_COLORS.yellow,\n CHART_COLORS.cyan,\n];\n","import { ViewProps } from 'app-studio';\nimport { DEFAULT_CHART_COLORS } from './ChartColors';\n\n// Default colors for chart series\nexport const DEFAULT_COLORS = DEFAULT_CHART_COLORS;\n\n// Default styles for chart container\nexport const ChartContainerStyles: ViewProps = {\n width: '100%',\n height: '100%',\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n};\n\n// Default styles for chart title\nexport const ChartTitleStyles: ViewProps = {\n fontSize: '18px',\n fontWeight: 'bold',\n marginBottom: '16px',\n textAlign: 'center',\n};\n\n// Default styles for chart legend\nexport const ChartLegendStyles: ViewProps = {\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'center',\n marginTop: '16px',\n};\n\n// Default styles for legend items\nexport const LegendItemStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n marginRight: '16px',\n marginBottom: '8px',\n};\n\n// Default styles for legend color indicator\nexport const LegendColorStyles: ViewProps = {\n width: '12px',\n height: '12px',\n borderRadius: '2px',\n marginRight: '6px',\n};\n\n// Default styles for legend text\nexport const LegendTextStyles: ViewProps = {\n fontSize: '14px',\n};\n\n// Default styles for tooltip\nexport const TooltipStyles: ViewProps = {\n position: 'absolute',\n backgroundColor: 'color.white',\n padding: '8px 12px',\n borderRadius: '4px',\n boxShadow: '0 2px 5px rgba(0, 0, 0, 0.1)',\n fontSize: '14px',\n pointerEvents: 'none',\n zIndex: 10,\n};\n\n// Default styles for chart grid\nexport const GridStyles: ViewProps = {\n stroke: 'color.gray.200',\n strokeWidth: '1px',\n};\n\n// Default styles for chart axis\nexport const AxisStyles: ViewProps = {\n stroke: 'color.gray.300',\n strokeWidth: '1px',\n};\n\n// Default styles for axis labels\nexport const AxisLabelStyles: ViewProps = {\n fontSize: '12px',\n fill: 'color.gray.600',\n};\n\n// Default styles for bar chart bars\nexport const BarStyles: ViewProps = {\n rx: '2px',\n ry: '2px',\n cursor: 'pointer',\n transition: 'opacity 0.2s ease',\n _hover: {\n opacity: 0.8,\n },\n};\n\n// Default styles for line chart lines\nexport const LineStyles: ViewProps = {\n strokeWidth: '2px',\n fill: 'none',\n};\n\n// Default styles for line chart points\nexport const PointStyles: ViewProps = {\n r: '4px',\n strokeWidth: '2px',\n stroke: 'white',\n cursor: 'pointer',\n transition: 'r 0.2s ease',\n};\n\n// Default styles for pie chart slices\nexport const PieSliceStyles: ViewProps = {\n strokeWidth: '1px',\n stroke: 'white',\n cursor: 'pointer',\n transition: 'opacity 0.2s ease',\n _hover: {\n opacity: 0.8,\n },\n};\n\n// Default styles for overlay base (shared by loading, error, no data)\nexport const OverlayBaseStyles: ViewProps = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(255, 255, 255, 0.8)',\n borderRadius: '4px',\n zIndex: 10,\n padding: '16px',\n textAlign: 'center',\n};\n\n// Default styles for loading overlay\nexport const LoadingOverlayStyles: ViewProps = {\n ...OverlayBaseStyles,\n};\n\n// Default styles for error overlay\nexport const ErrorOverlayStyles: ViewProps = {\n ...OverlayBaseStyles,\n backgroundColor: 'rgba(255, 235, 238, 0.9)',\n color: 'color.red.700',\n};\n\n// Default styles for no data overlay\nexport const NoDataOverlayStyles: ViewProps = {\n ...OverlayBaseStyles,\n backgroundColor: 'rgba(245, 245, 245, 0.8)',\n color: 'color.gray.600',\n};\n","import React, { useMemo } from 'react';\nimport { useTheme } from 'app-studio';\nimport { ChartData } from './Chart.type';\nimport {\n BarStyles,\n AxisStyles,\n AxisLabelStyles,\n GridStyles,\n} from './Chart.style';\n\ninterface BarChartProps {\n data: ChartData;\n width: number;\n height: number;\n animationProgress: number;\n showGrid?: boolean;\n onBarClick?: (seriesName: string, index: number) => void;\n showTooltip: (x: number, y: number, content: string) => void;\n hideTooltip: () => void;\n views?: any;\n}\n\nexport const BarChart: React.FC<BarChartProps> = ({\n data,\n width,\n height,\n animationProgress,\n showGrid = true,\n onBarClick,\n showTooltip,\n hideTooltip,\n views,\n}) => {\n const { getColor } = useTheme();\n // Calculate chart dimensions\n const padding = { top: 20, right: 20, bottom: 40, left: 50 };\n const chartWidth = width - padding.left - padding.right;\n const chartHeight = height - padding.top - padding.bottom;\n\n // Find the maximum value in the data\n const maxValue = useMemo(() => {\n let max = 0;\n data.series.forEach((series) => {\n series.data.forEach((value) => {\n max = Math.max(max, value);\n });\n });\n return max;\n }, [data]);\n\n // Calculate bar width and spacing\n const barCount = data.labels.length;\n const seriesCount = data.series.length;\n const groupWidth = chartWidth / barCount;\n const barWidth = (groupWidth * 0.8) / seriesCount;\n const barSpacing = (groupWidth * 0.2) / (seriesCount + 1);\n\n // Generate y-axis ticks\n const yAxisTicks = useMemo(() => {\n const tickCount = 5;\n const ticks: any[] = [];\n\n for (let i = 0; i <= tickCount; i++) {\n const value = (maxValue / tickCount) * i;\n ticks.push(value);\n }\n\n return ticks;\n }, [maxValue]);\n\n return (\n <svg width={width} height={height}>\n {/* X-axis */}\n <line\n x1={padding.left}\n y1={height - padding.bottom}\n x2={width - padding.right}\n y2={height - padding.bottom}\n {...AxisStyles}\n {...views?.axis}\n />\n\n {/* Y-axis */}\n <line\n x1={padding.left}\n y1={padding.top}\n x2={padding.left}\n y2={height - padding.bottom}\n {...AxisStyles}\n {...views?.axis}\n />\n\n {/* X-axis labels */}\n {data.labels.map((label, index) => {\n const x = padding.left + (index + 0.5) * groupWidth;\n const y = height - padding.bottom + 20;\n\n return (\n <text\n key={`x-label-${index}`}\n x={x}\n y={y}\n textAnchor=\"middle\"\n {...AxisLabelStyles}\n {...views?.axisLabel}\n >\n {label}\n </text>\n );\n })}\n\n {/* Y-axis labels and grid lines */}\n {yAxisTicks.map((tick, index) => {\n const y = height - padding.bottom - (tick / maxValue) * chartHeight;\n\n return (\n <React.Fragment key={`y-tick-${index}`}>\n <text\n x={padding.left - 10}\n y={y}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n {...AxisLabelStyles}\n {...views?.axisLabel}\n >\n {tick.toFixed(0)}\n </text>\n\n {showGrid && (\n <line\n x1={padding.left}\n y1={y}\n x2={width - padding.right}\n y2={y}\n {...GridStyles}\n {...views?.grid}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* Bars */}\n {data.series.map((series, seriesIndex) => (\n <React.Fragment key={`series-${seriesIndex}`}>\n {series.data.map((value, dataIndex) => {\n const barHeight =\n (value / maxValue) * chartHeight * animationProgress;\n const x =\n padding.left +\n dataIndex * groupWidth +\n barSpacing * (seriesIndex + 1) +\n barWidth * seriesIndex;\n const y = height - padding.bottom - barHeight;\n\n const handleMouseEnter = (e: React.MouseEvent) => {\n const tooltipContent = `${series.name}: ${value}`;\n showTooltip(e.clientX, e.clientY, tooltipContent);\n };\n\n const handleClick = () => {\n if (onBarClick) {\n onBarClick(series.name, dataIndex);\n }\n };\n\n return (\n <rect\n key={`bar-${seriesIndex}-${dataIndex}`}\n x={x}\n y={y}\n width={barWidth}\n height={barHeight}\n fill={series.color ? getColor(series.color) : 'black'}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={hideTooltip}\n onClick={handleClick}\n {...BarStyles}\n {...views?.bar}\n />\n );\n })}\n </React.Fragment>\n ))}\n </svg>\n );\n};\n","import React, { useMemo } from 'react';\nimport { ChartData } from './Chart.type';\nimport {\n LineStyles,\n PointStyles,\n AxisStyles,\n AxisLabelStyles,\n GridStyles,\n} from './Chart.style';\nimport { useTheme } from 'app-studio';\n\ninterface LineChartProps {\n data: ChartData;\n width: number;\n height: number;\n animationProgress: number;\n showGrid?: boolean;\n onPointClick?: (seriesName: string, index: number) => void;\n showTooltip: (x: number, y: number, content: string) => void;\n hideTooltip: () => void;\n views?: any;\n}\n\nexport const LineChart: React.FC<LineChartProps> = ({\n data,\n width,\n height,\n animationProgress,\n showGrid = true,\n onPointClick,\n showTooltip,\n hideTooltip,\n views,\n}) => {\n // Calculate chart dimensions\n const { getColor } = useTheme();\n\n const padding = { top: 20, right: 20, bottom: 40, left: 50 };\n const chartWidth = width - padding.left - padding.right;\n const chartHeight = height - padding.top - padding.bottom;\n\n // Find the maximum value in the data\n const maxValue = useMemo(() => {\n let max = 0;\n data.series.forEach((series) => {\n series.data.forEach((value) => {\n max = Math.max(max, value);\n });\n });\n return max;\n }, [data]);\n\n // Generate y-axis ticks\n const yAxisTicks = useMemo(() => {\n const tickCount = 5;\n const ticks: number[] = [];\n\n for (let i = 0; i <= tickCount; i++) {\n const value: number = (maxValue / tickCount) * i;\n ticks.push(value);\n }\n\n return ticks;\n }, [maxValue]);\n\n // Generate path for each series\n const generatePath = (series: number[]) => {\n const points = series.map((value, index) => {\n const x = padding.left + (index / (data.labels.length - 1)) * chartWidth;\n const y =\n height -\n padding.bottom -\n (value / maxValue) * chartHeight * animationProgress;\n return `${x},${y}`;\n });\n\n return `M ${points.join(' L ')}`;\n };\n\n // Generate area path for each series (for area charts)\n const generateAreaPath = (series: number[]) => {\n const startX = padding.left;\n const endX = padding.left + chartWidth;\n const baseY = height - padding.bottom;\n\n const points = series.map((value, index) => {\n const x = padding.left + (index / (data.labels.length - 1)) * chartWidth;\n const y =\n height -\n padding.bottom -\n (value / maxValue) * chartHeight * animationProgress;\n return `${x},${y}`;\n });\n\n return `M ${startX},${baseY} L ${points.join(' L ')} L ${endX},${baseY} Z`;\n };\n\n return (\n <svg width={width} height={height}>\n {/* X-axis */}\n <line\n x1={padding.left}\n y1={height - padding.bottom}\n x2={width - padding.right}\n y2={height - padding.bottom}\n {...AxisStyles}\n {...views?.axis}\n />\n\n {/* Y-axis */}\n <line\n x1={padding.left}\n y1={padding.top}\n x2={padding.left}\n y2={height - padding.bottom}\n {...AxisStyles}\n {...views?.axis}\n />\n\n {/* X-axis labels */}\n {data.labels.map((label, index) => {\n const x =\n padding.left + (index / (data.labels.length - 1)) * chartWidth;\n const y = height - padding.bottom + 20;\n\n return (\n <text\n key={`x-label-${index}`}\n x={x}\n y={y}\n textAnchor=\"middle\"\n {...AxisLabelStyles}\n {...views?.axisLabel}\n >\n {label}\n </text>\n );\n })}\n\n {/* Y-axis labels and grid lines */}\n {yAxisTicks.map((tick, index) => {\n const y = height - padding.bottom - (tick / maxValue) * chartHeight;\n\n return (\n <React.Fragment key={`y-tick-${index}`}>\n <text\n x={padding.left - 10}\n y={y}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n {...AxisLabelStyles}\n {...views?.axisLabel}\n >\n {tick.toFixed(0)}\n </text>\n\n {showGrid && (\n <line\n x1={padding.left}\n y1={y}\n x2={width - padding.right}\n y2={y}\n {...GridStyles}\n {...views?.grid}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* Lines and points */}\n {data.series.map((series, seriesIndex) => (\n <React.Fragment key={`series-${seriesIndex}`}>\n {/* Area fill (if needed) */}\n <path\n d={generateAreaPath(series.data)}\n fill={series.color ? getColor(series.color) : 'black'}\n opacity={0.1}\n {...views?.area}\n />\n\n {/* Line */}\n <path\n d={generatePath(series.data)}\n stroke={series.color ? getColor(series.color) : 'black'}\n {...LineStyles}\n {...views?.line}\n />\n\n {/* Points */}\n {series.data.map((value, dataIndex) => {\n const x =\n padding.left +\n (dataIndex / (data.labels.length - 1)) * chartWidth;\n const y =\n height -\n padding.bottom -\n (value / maxValue) * chartHeight * animationProgress;\n\n const handleMouseEnter = (e: React.MouseEvent) => {\n const tooltipContent = `${series.name}: ${value}`;\n showTooltip(e.clientX, e.clientY, tooltipContent);\n };\n\n const handleClick = () => {\n if (onPointClick) {\n onPointClick(series.name, dataIndex);\n }\n };\n\n return (\n <circle\n key={`point-${seriesIndex}-${dataIndex}`}\n cx={x}\n cy={y}\n fill={series.color}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={hideTooltip}\n onClick={handleClick}\n {...PointStyles}\n {...views?.point}\n />\n );\n })}\n </React.Fragment>\n ))}\n </svg>\n );\n};\n","import React, { useMemo } from 'react';\nimport { useTheme } from 'app-studio';\nimport { ChartDataPoint } from './Chart.type';\nimport { PieSliceStyles, DEFAULT_COLORS } from './Chart.style';\n\ninterface PieChartProps {\n dataPoints: ChartDataPoint[];\n width: number;\n height: number;\n animationProgress: number;\n isDonut?: boolean;\n onSliceClick?: (dataPoint: ChartDataPoint, index: number) => void;\n showTooltip: (x: number, y: number, content: string) => void;\n hideTooltip: () => void;\n views?: any;\n}\n\nexport const PieChart: React.FC<PieChartProps> = ({\n dataPoints,\n width,\n height,\n animationProgress,\n isDonut = false,\n onSliceClick,\n showTooltip,\n hideTooltip,\n views,\n}) => {\n // Get theme color function\n const { getColor } = useTheme();\n // Calculate chart dimensions\n const size = Math.min(width, height);\n const radius = (size / 2) * 0.8;\n const centerX = width / 2;\n const centerY = height / 2;\n const donutRadius = isDonut ? radius * 0.6 : 0;\n\n // Calculate total value\n const total = useMemo(() => {\n return dataPoints.reduce((sum, point) => sum + point.value, 0);\n }, [dataPoints]);\n\n // Generate pie slices\n const slices = useMemo(() => {\n const result: any[] = [];\n let startAngle = -Math.PI / 2; // Start from top (12 o'clock position)\n\n for (let i = 0; i < dataPoints.length; i++) {\n const value = dataPoints[i].value;\n const percentage = value / total;\n const angle = percentage * 2 * Math.PI * animationProgress;\n const endAngle = startAngle + angle;\n\n // Calculate path\n const startX = centerX + Math.cos(startAngle) * radius;\n const startY = centerY + Math.sin(startAngle) * radius;\n const endX = centerX + Math.cos(endAngle) * radius;\n const endY = centerY + Math.sin(endAngle) * radius;\n\n // For donut chart\n const innerStartX = centerX + Math.cos(startAngle) * donutRadius;\n const innerStartY = centerY + Math.sin(startAngle) * donutRadius;\n const innerEndX = centerX + Math.cos(endAngle) * donutRadius;\n const innerEndY = centerY + Math.sin(endAngle) * donutRadius;\n\n // Create arc flag\n const largeArcFlag = angle > Math.PI ? 1 : 0;\n\n // Create path\n let path;\n\n if (isDonut) {\n // Donut slice path\n path = [\n `M ${startX} ${startY}`,\n `A ${radius} ${radius} 0 ${largeArcFlag} 1 ${endX} ${endY}`,\n `L ${innerEndX} ${innerEndY}`,\n `A ${donutRadius} ${donutRadius} 0 ${largeArcFlag} 0 ${innerStartX} ${innerStartY}`,\n 'Z',\n ].join(' ');\n } else {\n // Regular pie slice path\n path = [\n `M ${centerX} ${centerY}`,\n `L ${startX} ${startY}`,\n `A ${radius} ${radius} 0 ${largeArcFlag} 1 ${endX} ${endY}`,\n 'Z',\n ].join(' ');\n }\n\n // Calculate label position\n const labelAngle = startAngle + angle / 2;\n const labelRadius = radius * 0.7;\n const labelX = centerX + Math.cos(labelAngle) * labelRadius;\n const labelY = centerY + Math.sin(labelAngle) * labelRadius;\n\n // Calculate percentage\n const percentageText = `${(percentage * 100).toFixed(1)}%`;\n\n // Get color from dataPoint, DEFAULT_COLORS, or generate a random one\n const colorValue =\n dataPoints[i].color || DEFAULT_COLORS[i % DEFAULT_COLORS.length];\n // Resolve the color through the theme system\n const resolvedColor = getColor(colorValue);\n\n result.push({\n path,\n color: resolvedColor,\n label: dataPoints[i].label,\n value: dataPoints[i].value,\n percentage: percentageText,\n labelX,\n labelY,\n startAngle,\n endAngle,\n index: i,\n });\n\n startAngle = endAngle;\n }\n\n return result;\n }, [\n dataPoints,\n total,\n radius,\n centerX,\n centerY,\n donutRadius,\n animationProgress,\n isDonut,\n ]);\n\n return (\n <svg width={width} height={height}>\n {/* Pie slices */}\n {slices.map((slice, index) => {\n const handleMouseEnter = (e: React.MouseEvent) => {\n const tooltipContent = `${slice.label}: ${slice.value} (${slice.percentage})`;\n showTooltip(e.clientX, e.clientY, tooltipContent);\n };\n\n const handleClick = () => {\n if (onSliceClick) {\n onSliceClick(dataPoints[slice.index], slice.index);\n }\n };\n\n return (\n <g key={`slice-${index}`}>\n <path\n d={slice.path}\n fill={slice.color}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={hideTooltip}\n onClick={handleClick}\n {...PieSliceStyles}\n {...views?.pie}\n />\n\n {/* Only show labels for slices that are big enough */}\n {slice.endAngle - slice.startAngle > 0.2 && (\n <text\n x={slice.labelX}\n y={slice.labelY}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n fill=\"white\"\n fontSize=\"12px\"\n fontWeight=\"bold\"\n pointerEvents=\"none\"\n >\n {slice.percentage}\n </text>\n )}\n </g>\n );\n })}\n\n {/* Center circle for donut chart */}\n {isDonut && (\n <circle cx={centerX} cy={centerY} r={donutRadius} fill=\"white\" />\n )}\n </svg>\n );\n};\n","import React from 'react';\nimport { View } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { Horizontal } from 'app-studio';\nimport { Center } from 'app-studio';\nimport { Loader } from '../../Loader/Loader';\nimport { ChartProps } from './Chart.props';\nimport { useChartState } from './Chart.state';\nimport {\n ChartContainerStyles,\n ChartTitleStyles,\n ChartLegendStyles,\n LegendItemStyles,\n LegendColorStyles,\n LegendTextStyles,\n TooltipStyles,\n LoadingOverlayStyles,\n ErrorOverlayStyles,\n NoDataOverlayStyles,\n} from './Chart.style';\nimport { BarChart } from './BarChart';\nimport { LineChart } from './LineChart';\nimport { PieChart } from './PieChart';\n\nexport const ChartView: React.FC<ChartProps> = ({\n type,\n data,\n dataPoints,\n title,\n showLegend = true,\n legendPosition = 'bottom',\n showGrid = true,\n showTooltips = true,\n animated = true,\n animationDuration = 500,\n responsive = true,\n aspectRatio = 16 / 9,\n width: propWidth = 200,\n height: propHeight = 200,\n views,\n onDataPointClick,\n onSeriesClick,\n isLoading = false,\n error,\n noData,\n loadingIndicator,\n errorIndicator,\n noDataIndicator,\n 'aria-label': ariaLabel,\n\n themeMode: elementMode,\n ...props\n}) => {\n // Use chart state hook\n const {\n animationProgress,\n tooltip,\n containerRef,\n processedData,\n showTooltip: showTooltipState,\n hideTooltip: hideTooltipState,\n getChartDimensions,\n } = useChartState({\n data,\n dataPoints,\n animated,\n animationDuration,\n showTooltips,\n });\n\n // Get processed data\n const chartData = processedData();\n\n // Calculate dimensions\n const { width: containerWidth, height: containerHeight } =\n getChartDimensions();\n const width = propWidth || containerWidth;\n const height =\n propHeight || (responsive ? containerWidth / aspectRatio : containerHeight);\n\n // Render legend\n const renderLegend = () => {\n if (!showLegend || !chartData) return null;\n\n let items: any[] = [];\n\n if (type === 'pie' || type === 'donut') {\n // For pie/donut charts, use dataPoints\n if (Array.isArray(chartData)) {\n items = chartData as any[];\n }\n } else {\n // For other charts, use data.series\n if (chartData && (chartData as any).series) {\n items = (chartData as any).series;\n }\n }\n\n // If no items to display, don't render the legend\n if (!items || items.length === 0) return null;\n\n return (\n <Horizontal\n flexWrap=\"wrap\"\n justifyContent=\"center\"\n marginTop={legendPosition === 'bottom' ? '16px' : 0}\n marginBottom={legendPosition === 'top' ? '16px' : 0}\n {...ChartLegendStyles}\n {...views?.legend}\n >\n {items.map((item: any, index: number) => (\n <View\n key={`legend-${index}`}\n {...LegendItemStyles}\n {...views?.legendItem}\n >\n <View backgroundColor={item.color} {...LegendColorStyles} />\n <Text {...LegendTextStyles}>{item.name || item.label}</Text>\n </View>\n ))}\n </Horizontal>\n );\n };\n\n // Render chart based on type\n const renderChart = () => {\n if (!chartData) return null;\n\n switch (type) {\n case 'bar':\n return (\n <BarChart\n data={chartData as any}\n width={width as number}\n height={height as number}\n animationProgress={animationProgress}\n showGrid={showGrid}\n onBarClick={onSeriesClick}\n showTooltip={showTooltipState}\n hideTooltip={hideTooltipState}\n views={views}\n />\n );\n case 'line':\n case 'area':\n return (\n <LineChart\n data={chartData as any}\n width={width as number}\n height={height as number}\n animationProgress={animationProgress}\n showGrid={showGrid}\n onPointClick={onSeriesClick}\n showTooltip={showTooltipState}\n hideTooltip={hideTooltipState}\n views={views}\n />\n );\n case 'pie':\n case 'donut':\n return (\n <PieChart\n dataPoints={chartData as any}\n width={width as number}\n height={height as number}\n animationProgress={animationProgress}\n isDonut={type === 'donut'}\n onSliceClick={onDataPointClick}\n showTooltip={showTooltipState}\n hideTooltip={hideTooltipState}\n views={views}\n />\n );\n default:\n return null;\n }\n };\n\n // Render tooltip\n const renderTooltip = () => {\n if (!showTooltips || !tooltip.visible) return null;\n\n return (\n <View\n position=\"fixed\"\n left={`${tooltip.x}px`}\n top={`${tooltip.y - 40}px`}\n {...TooltipStyles}\n {...views?.tooltip}\n >\n {tooltip.content}\n </View>\n );\n };\n\n // Default loading indicator\n const renderLoadingIndicator = () => {\n if (!isLoading) return null;\n\n return (\n <View {...LoadingOverlayStyles} {...views?.loadingOverlay}>\n {loadingIndicator || (\n <Center>\n <Loader size=\"lg\" />\n </Center>\n )}\n </View>\n );\n };\n\n // Default error indicator\n const renderErrorIndicator = () => {\n if (!error) return null;\n\n return (\n <View {...ErrorOverlayStyles} {...views?.errorOverlay}>\n {errorIndicator || (\n <Text fontWeight=\"medium\">\n {typeof error === 'string' ? error : 'An error occurred'}\n </Text>\n )}\n </View>\n );\n };\n\n // Default no data indicator\n const renderNoDataIndicator = () => {\n if (!noData) return null;\n\n return (\n <View {...NoDataOverlayStyles} {...views?.noDataOverlay}>\n {noDataIndicator || (\n <Text>\n {typeof noData === 'string' ? noData : 'No data available'}\n </Text>\n )}\n </View>\n );\n };\n\n // Determine effective aria-label\n const effectiveAriaLabel =\n ariaLabel ?? (typeof title === 'string' ? title : 'Chart');\n\n // Determine if we should show the chart content\n const showChartContent = !error && !isLoading && !noData;\n\n return (\n <View\n ref={containerRef}\n role=\"region\"\n aria-label={effectiveAriaLabel}\n aria-busy={isLoading}\n {...ChartContainerStyles}\n {...views?.container}\n {...props}\n >\n {title && <Text {...ChartTitleStyles}>{title}</Text>}\n\n {/* Only show legend when chart content is visible */}\n {showChartContent && legendPosition === 'top' && renderLegend()}\n\n <View flex={1} width=\"100%\" position=\"relative\" {...views?.chart}>\n {showChartContent && renderChart()}\n\n {/* Render overlays */}\n {renderLoadingIndicator()}\n {renderErrorIndicator()}\n {renderNoDataIndicator()}\n </View>\n\n {/* Only show legend when chart content is visible */}\n {showChartContent && legendPosition === 'bottom' && renderLegend()}\n\n {renderTooltip()}\n </View>\n );\n};\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport { ChartData, ChartDataPoint } from './Chart.type';\nimport { DEFAULT_COLORS } from './Chart.style';\n\nexport interface ChartStateProps {\n data?: ChartData;\n dataPoints?: ChartDataPoint[];\n animated?: boolean;\n animationDuration?: number;\n showTooltips?: boolean;\n}\n\nexport const useChartState = ({\n data,\n dataPoints,\n animated = true,\n animationDuration = 500,\n showTooltips = true,\n}: ChartStateProps) => {\n // State for animation progress (0 to 1)\n const [animationProgress, setAnimationProgress] = useState(animated ? 0 : 1);\n\n // State for tooltip\n const [tooltip, setTooltip] = useState<{\n visible: boolean;\n x: number;\n y: number;\n content: string;\n }>({\n visible: false,\n x: 0,\n y: 0,\n content: '',\n });\n\n // Reference to animation frame\n const animationRef = useRef<number | null>(null);\n\n // Reference to chart container\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Handle animation\n useEffect(() => {\n if (!animated) {\n setAnimationProgress(1);\n return;\n }\n\n const startTime = Date.now();\n\n const animate = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / animationDuration, 1);\n\n setAnimationProgress(progress);\n\n if (progress < 1) {\n animationRef.current = requestAnimationFrame(animate);\n }\n };\n\n animationRef.current = requestAnimationFrame(animate);\n\n return () => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n };\n }, [animated, animationDuration]);\n\n // Process data for charts\n const processedData = useCallback(() => {\n if (data) {\n return {\n ...data,\n series: data.series.map((series, index) => ({\n ...series,\n color: series.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length],\n })),\n };\n }\n\n if (dataPoints) {\n return dataPoints.map((point, index) => ({\n ...point,\n color: point.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length],\n }));\n }\n\n return null;\n }, [data, dataPoints]);\n\n // Handle tooltip show\n const showTooltip = useCallback(\n (x: number, y: number, content: string) => {\n if (!showTooltips) return;\n\n setTooltip({\n visible: true,\n x,\n y,\n content,\n });\n },\n [showTooltips]\n );\n\n // Handle tooltip hide\n const hideTooltip = useCallback(() => {\n setTooltip((prev) => ({\n ...prev,\n visible: false,\n }));\n }, []);\n\n // Calculate chart dimensions\n const getChartDimensions = useCallback(() => {\n if (!containerRef.current) {\n return { width: 0, height: 0 };\n }\n\n const { width, height } = containerRef.current.getBoundingClientRect();\n return { width, height };\n }, []);\n\n return {\n animationProgress,\n tooltip,\n containerRef,\n processedData,\n showTooltip,\n hideTooltip,\n getChartDimensions,\n };\n};\n","import React from 'react';\nimport { View, Horizontal, Vertical, Text, useTheme } from 'app-studio';\nimport { Button } from '../../Button/Button';\nimport { CookieConsentProps } from './CookieConsent.props';\nimport { useCookieConsentState } from './CookieConsent.state';\nimport { getThemes } from './CookieConsent.style';\n\n/**\n * CookieConsent View Component\n *\n * Renders a cookie consent banner with customizable styling, position, and content.\n */\nexport const CookieConsentView: React.FC<CookieConsentProps> = ({\n title = 'Nous utilisons des cookies',\n description = 'Ce site utilise des cookies pour améliorer votre expérience. En continuant à naviguer sur ce site, vous acceptez notre utilisation des cookies conformément à notre politique de confidentialité.',\n acceptButtonText = 'Accepter',\n customizeButtonText = 'Personnaliser',\n position = 'bottom',\n variant = 'default',\n onAccept,\n onCustomize,\n views,\n showCustomizeButton = true,\n cookieExpiration = 365,\n themeMode: propThemeMode,\n ...props\n}) => {\n // Get theme context\n const { themeMode: contextThemeMode } = useTheme();\n\n // Use provided theme mode or fall back to context\n const themeMode = propThemeMode || contextThemeMode || 'light';\n\n // Get state and functions from custom hook\n const { hasConsent, acceptCookies } = useCookieConsentState(cookieExpiration);\n\n // Get theme-based styles\n const themes = getThemes(themeMode);\n const themeStyles = themes[variant];\n\n // If user has already given consent, don't show the banner\n if (hasConsent) {\n return null;\n }\n\n // Handle accept button click\n const handleAccept = () => {\n acceptCookies();\n if (onAccept) {\n onAccept();\n }\n };\n\n // Handle customize button click\n const handleCustomize = () => {\n if (onCustomize) {\n onCustomize();\n }\n };\n\n return (\n <View\n position=\"fixed\"\n left={16}\n right={16}\n zIndex={1000}\n padding={16}\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderRadius={8}\n maxWidth=\"800px\"\n marginX=\"auto\"\n // boxShadow=\"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\"\n {...(position === 'bottom' ? { bottom: 16 } : { top: 16 })}\n {...themeStyles.container}\n {...views?.container}\n {...props}\n >\n <Vertical gap={12} maxWidth={1200} marginX=\"auto\">\n {title && (\n <Text\n fontWeight=\"bold\"\n fontSize={18}\n color=\"color.black\"\n {...views?.title}\n >\n {title}\n </Text>\n )}\n\n {description && (\n <Text fontSize={14} color=\"color.black\" {...views?.description}>\n {typeof description === 'string' ? description : description}\n </Text>\n )}\n\n <Horizontal\n gap={12}\n justifyContent=\"flex-end\"\n marginTop={8}\n {...views?.buttonGroup}\n >\n {showCustomizeButton && (\n <Button\n variant=\"outline\"\n onClick={handleCustomize}\n size=\"sm\"\n {...views?.customizeButton}\n >\n {customizeButtonText}\n </Button>\n )}\n\n <Button\n variant=\"primary\"\n onClick={handleAccept}\n size=\"sm\"\n {...views?.acceptButton}\n >\n {acceptButtonText}\n </Button>\n </Horizontal>\n </Vertical>\n </View>\n );\n};\n","import { useState, useEffect } from 'react';\n\n/**\n * Custom hook to manage cookie consent state\n * @param cookieExpiration Number of days until the cookie expires\n * @returns State and functions for managing cookie consent\n */\nexport const useCookieConsentState = (cookieExpiration: number = 365) => {\n // State for hover effects\n const [isHovered, setIsHovered] = useState(false);\n\n // State for tracking if consent has been given\n const [hasConsent, setHasConsent] = useState<boolean | null>(null);\n\n // Cookie name for storing consent\n const COOKIE_CONSENT_KEY = 'app-studio-cookie-consent';\n\n // Check for existing consent when component mounts\n useEffect(() => {\n const storedConsent = localStorage.getItem(COOKIE_CONSENT_KEY);\n if (storedConsent !== null) {\n setHasConsent(storedConsent === 'true');\n } else {\n setHasConsent(false);\n }\n }, []);\n\n /**\n * Save consent to localStorage with expiration\n */\n const saveConsent = (consent: boolean) => {\n localStorage.setItem(COOKIE_CONSENT_KEY, String(consent));\n\n // Set expiration date\n const expirationDate = new Date();\n expirationDate.setDate(expirationDate.getDate() + cookieExpiration);\n localStorage.setItem(\n `${COOKIE_CONSENT_KEY}-expires`,\n expirationDate.toISOString()\n );\n\n setHasConsent(consent);\n };\n\n /**\n * Accept cookies\n */\n const acceptCookies = () => {\n saveConsent(true);\n };\n\n /**\n * Reset cookie consent (for testing)\n */\n const resetConsent = () => {\n localStorage.removeItem(COOKIE_CONSENT_KEY);\n localStorage.removeItem(`${COOKIE_CONSENT_KEY}-expires`);\n setHasConsent(false);\n };\n\n return {\n isHovered,\n setIsHovered,\n hasConsent,\n acceptCookies,\n resetConsent,\n };\n};\n","/**\n * Get theme-based styles for the CookieConsent component\n */\nexport const getThemes = (themeMode: 'light' | 'dark') => {\n const isDark = themeMode === 'dark';\n\n return {\n default: {\n container: {\n backgroundColor: isDark ? '#1f2937' : '#ffffff',\n borderColor: isDark ? '#374151' : '#e5e7eb',\n boxShadow:\n '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n },\n content: {\n color: isDark ? '#e5e7eb' : '#1f2937',\n },\n acceptButton: {\n backgroundColor: '#3b82f6',\n color: '#ffffff',\n hoverBackgroundColor: '#2563eb',\n },\n customizeButton: {\n backgroundColor: 'transparent',\n color: isDark ? '#e5e7eb' : '#4b5563',\n borderColor: isDark ? '#4b5563' : '#d1d5db',\n hoverBackgroundColor: isDark ? '#374151' : '#f3f4f6',\n },\n },\n info: {\n container: {\n backgroundColor: isDark ? '#1e3a8a' : '#eff6ff',\n borderColor: isDark ? '#1e40af' : '#bfdbfe',\n boxShadow:\n '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n },\n content: {\n color: isDark ? '#bfdbfe' : '#1e40af',\n },\n acceptButton: {\n backgroundColor: '#3b82f6',\n color: '#ffffff',\n hoverBackgroundColor: '#2563eb',\n },\n customizeButton: {\n backgroundColor: 'transparent',\n color: isDark ? '#bfdbfe' : '#1e40af',\n borderColor: isDark ? '#3b82f6' : '#93c5fd',\n hoverBackgroundColor: isDark ? '#1e40af' : '#dbeafe',\n },\n },\n primary: {\n container: {\n backgroundColor: isDark ? '#0c4a6e' : '#f0f9ff',\n borderColor: isDark ? '#0369a1' : '#bae6fd',\n boxShadow:\n '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n },\n content: {\n color: isDark ? '#bae6fd' : '#0369a1',\n },\n acceptButton: {\n backgroundColor: '#0ea5e9',\n color: '#ffffff',\n hoverBackgroundColor: '#0284c7',\n },\n customizeButton: {\n backgroundColor: 'transparent',\n color: isDark ? '#bae6fd' : '#0369a1',\n borderColor: isDark ? '#0ea5e9' : '#7dd3fc',\n hoverBackgroundColor: isDark ? '#0369a1' : '#e0f2fe',\n },\n },\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { Size, Variant, Position, Alignment } from './ContextMenu.type';\n\nexport const ContextMenuSizes: Record<Size, ViewProps> = {\n sm: {\n padding: '6px 8px',\n fontSize: '14px',\n minWidth: '160px',\n },\n md: {\n padding: '8px 12px',\n fontSize: '16px',\n minWidth: '180px',\n },\n lg: {\n padding: '10px 16px',\n fontSize: '18px',\n minWidth: '200px',\n },\n};\n\nexport const ContextMenuVariants: Record<Variant, ViewProps> = {\n default: {\n backgroundColor: 'color.white',\n color: 'color.gray.800',\n },\n filled: {\n backgroundColor: 'color.gray.100',\n color: 'color.gray.800',\n },\n outline: {\n backgroundColor: 'color.white',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n color: 'color.gray.800',\n },\n};\n\nexport const ContextMenuItemStates = {\n hover: {\n backgroundColor: 'color.gray.100',\n },\n active: {\n backgroundColor: 'color.gray.200',\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n};\n\n// Helper function to calculate position based on available space\nexport const calculateMenuPosition = (\n x: number,\n y: number,\n menuWidth: number,\n menuHeight: number,\n windowWidth: number,\n windowHeight: number,\n side: Position = 'right',\n align: Alignment = 'start'\n): { x: number; y: number } => {\n let posX = x;\n let posY = y;\n\n // Adjust horizontal position based on side\n if (side === 'left') {\n posX = x - menuWidth;\n } else if (side === 'right') {\n posX = x;\n } else if (side === 'top' || side === 'bottom') {\n // Adjust horizontal position based on alignment for top/bottom\n if (align === 'center') {\n posX = x - menuWidth / 2;\n } else if (align === 'end') {\n posX = x - menuWidth;\n }\n }\n\n // Adjust vertical position based on side\n if (side === 'top') {\n posY = y - menuHeight;\n } else if (side === 'bottom') {\n posY = y;\n } else if (side === 'left' || side === 'right') {\n // Adjust vertical position based on alignment for left/right\n if (align === 'center') {\n posY = y - menuHeight / 2;\n } else if (align === 'end') {\n posY = y - menuHeight;\n }\n }\n\n // Ensure menu stays within window bounds\n if (posX + menuWidth > windowWidth) {\n posX = windowWidth - menuWidth;\n }\n if (posX < 0) {\n posX = 0;\n }\n if (posY + menuHeight > windowHeight) {\n posY = windowHeight - menuHeight;\n }\n if (posY < 0) {\n posY = 0;\n }\n\n return { x: posX, y: posY };\n};\n","import React, {\n createContext,\n useContext,\n useRef,\n useEffect,\n useState,\n} from 'react';\nimport { View, ViewProps } from 'app-studio';\nimport {\n ContextMenuContextType,\n Size,\n Variant,\n ContextMenuItem as ContextMenuItemType,\n} from './ContextMenu.type';\nimport {\n ContextMenuTriggerProps,\n ContextMenuContentProps,\n ContextMenuItemProps,\n ContextMenuDividerProps,\n ContextMenuSeparatorProps,\n} from './ContextMenu.props';\nimport {\n ContextMenuSizes,\n ContextMenuVariants,\n ContextMenuItemStates,\n calculateMenuPosition,\n} from './ContextMenu.style';\n\n// Create context for the ContextMenu\nconst ContextMenuContext = createContext<ContextMenuContextType>({\n isOpen: false,\n setIsOpen: () => {},\n position: { x: 0, y: 0 },\n setPosition: () => {},\n activeSubmenuId: null,\n setActiveSubmenuId: () => {},\n size: 'md',\n variant: 'default',\n triggerRef: { current: null },\n contentRef: { current: null },\n contentId: 'contextmenu-content',\n closeMenu: () => {},\n openMenu: () => {},\n});\n\n// Provider component for the ContextMenu context\nexport const ContextMenuProvider: React.FC<{\n children: React.ReactNode;\n value: ContextMenuContextType;\n}> = ({ children, value }) => {\n return (\n <ContextMenuContext.Provider value={value}>\n {children}\n </ContextMenuContext.Provider>\n );\n};\n\n// Hook to use the ContextMenu context\nexport const useContextMenuContext = () => {\n const context = useContext(ContextMenuContext);\n if (!context) {\n throw new Error(\n 'useContextMenuContext must be used within a ContextMenuProvider'\n );\n }\n return context;\n};\n\n// ContextMenu Trigger component\nexport const ContextMenuTrigger: React.FC<ContextMenuTriggerProps> = ({\n children,\n disableNativeContextMenu = true,\n asChild = false,\n isDisabled = false,\n views,\n ...props\n}) => {\n const { triggerRef, contentId, openMenu } = useContextMenuContext();\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (isDisabled) return;\n\n if (disableNativeContextMenu) {\n e.preventDefault();\n }\n\n if (openMenu) {\n openMenu(e);\n } else {\n // Fallback to the old way if openMenu is not available\n const { setIsOpen, setPosition } = useContextMenuContext();\n setPosition({ x: e.clientX, y: e.clientY });\n setIsOpen(true);\n }\n };\n\n const triggerProps = {\n ref: triggerRef as React.Ref<any>, // Cast needed for different element types\n onContextMenu: handleContextMenu,\n 'aria-controls': contentId,\n 'aria-haspopup': 'menu' as const, // Indicate it triggers a menu\n 'data-disabled': isDisabled ? '' : undefined,\n // Pass disabled state down if using asChild\n ...(asChild &&\n React.isValidElement(children) &&\n children.props.isDisabled === undefined && { isDisabled }),\n ...views?.container,\n ...props,\n };\n\n if (asChild && React.isValidElement(children)) {\n const child = React.Children.only(children);\n // Need to handle ref merging if child uses its own ref\n return React.cloneElement(child, { ...triggerProps, ...child.props });\n }\n\n // Default: wrap children in a View\n return <View {...triggerProps}>{children}</View>;\n};\n\n// ContextMenu Content component\nexport const ContextMenuContent: React.FC<ContextMenuContentProps> = ({\n items,\n children,\n position,\n side = 'right',\n align = 'start',\n views,\n style, // Capture user-provided style\n ...props\n}) => {\n const {\n isOpen,\n position: contextPosition,\n contentRef,\n contentId,\n variant,\n } = useContextMenuContext();\n\n const menuRef = useRef<HTMLDivElement>(null);\n const [menuPosition, setMenuPosition] = useState({ x: 0, y: 0 });\n\n // Use contentRef if provided, otherwise use local menuRef\n const ref = contentRef || menuRef;\n\n // Calculate the position of the menu\n useEffect(() => {\n if (isOpen && ref.current) {\n const menuWidth = ref.current.offsetWidth;\n const menuHeight = ref.current.offsetHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n\n const pos = position || contextPosition;\n\n const calculatedPosition = calculateMenuPosition(\n pos.x,\n pos.y,\n menuWidth,\n menuHeight,\n windowWidth,\n windowHeight,\n side,\n align\n );\n\n setMenuPosition(calculatedPosition);\n }\n }, [isOpen, contextPosition, position, side, align, ref]);\n\n if (!isOpen) {\n return null;\n }\n\n // Basic positioning - place top-left corner at calculated position\n const positionStyles: React.CSSProperties = {\n position: 'fixed', // Use fixed to position relative to viewport\n top: `${menuPosition.y}px`,\n left: `${menuPosition.x}px`,\n zIndex: 1000,\n transformOrigin: 'top left', // Optional: for animations\n };\n\n return (\n <View\n id={contentId || 'context-menu'}\n ref={ref}\n role=\"menu\"\n tabIndex={-1} // Important for focus management if implemented later\n borderRadius={4}\n boxShadow=\"0px 2px 8px rgba(0, 0, 0, 0.15)\"\n overflow=\"hidden\"\n // Apply default content styles + custom styles + positioning\n style={{ ...positionStyles, ...style }}\n {...ContextMenuVariants[variant]}\n {...views?.menu}\n {...views?.content}\n {...props}\n >\n {items &&\n items.map((item, index) => {\n if (item.divider) {\n return (\n <ContextMenuDivider key={`divider-${index}`} views={views} />\n );\n }\n\n return <ContextMenuItem key={item.id} item={item} views={views} />;\n })}\n {children}\n </View>\n );\n};\n\n// ContextMenu Item component\nexport const ContextMenuItem: React.FC<ContextMenuItemProps> = ({\n item,\n children,\n onSelect,\n isDisabled = false,\n views,\n ...props\n}) => {\n const { activeSubmenuId, setActiveSubmenuId, size, closeMenu } =\n useContextMenuContext();\n\n // For data-driven approach\n if (item) {\n const [isHovered, setIsHovered] = useState(false);\n const hasSubmenu = item.items && item.items.length > 0;\n const isSubmenuActive = activeSubmenuId === item.id;\n const itemRef = useRef<HTMLDivElement>(null);\n const [submenuPosition, setSubmenuPosition] = useState({ x: 0, y: 0 });\n const disabled = item.disabled || isDisabled;\n\n // Handle mouse enter event\n const handleMouseEnter = () => {\n setIsHovered(true);\n if (hasSubmenu) {\n setActiveSubmenuId(item.id);\n }\n };\n\n // Handle mouse leave event\n const handleMouseLeave = () => {\n setIsHovered(false);\n };\n\n // Handle click event\n const handleClick = () => {\n if (disabled) return;\n if (!hasSubmenu && item.onClick) {\n item.onClick();\n if (closeMenu) closeMenu();\n }\n };\n\n // Calculate the position of the submenu\n useEffect(() => {\n if (isSubmenuActive && itemRef.current) {\n const rect = itemRef.current.getBoundingClientRect();\n setSubmenuPosition({\n x: rect.right,\n y: rect.top,\n });\n }\n }, [isSubmenuActive]);\n\n return (\n <View\n ref={itemRef}\n role=\"menuitem\"\n display=\"flex\"\n alignItems=\"center\"\n cursor={disabled ? 'not-allowed' : 'pointer'}\n opacity={disabled ? 0.5 : 1}\n position=\"relative\"\n aria-disabled={disabled}\n data-disabled={disabled ? '' : undefined}\n {...ContextMenuSizes[size]}\n _hover={!disabled ? ContextMenuItemStates.hover : {}}\n backgroundColor={\n isHovered && !disabled ? 'color.gray.100' : 'transparent'\n }\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleClick}\n {...views?.item}\n {...props}\n >\n {item.icon && (\n <View marginRight={8} {...views?.icon}>\n {item.icon}\n </View>\n )}\n\n <View flexGrow={1}>{item.label}</View>\n\n {hasSubmenu && (\n <View marginLeft={8} {...views?.submenuIndicator}>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.59 16.59L13.17 12L8.59 7.41L10 6L16 12L10 18L8.59 16.59Z\"\n fill=\"currentColor\"\n />\n </svg>\n </View>\n )}\n\n {isSubmenuActive && hasSubmenu && (\n <ContextMenuContent\n items={item.items || []}\n position={submenuPosition}\n side=\"right\"\n align=\"start\"\n views={views}\n />\n )}\n </View>\n );\n }\n\n // For compound component pattern\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (!isDisabled) {\n onSelect?.(event); // Call the user's handler first\n if (closeMenu) closeMenu(); // Then close the menu\n }\n };\n\n // Use Button for semantics and interaction state styling\n return (\n <View\n role=\"menuitem\"\n onClick={handleClick}\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n opacity={isDisabled ? 0.5 : 1}\n aria-disabled={isDisabled}\n data-disabled={isDisabled ? '' : undefined}\n {...ContextMenuSizes[size]}\n _hover={!isDisabled ? ContextMenuItemStates.hover : {}}\n {...views?.item}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// ContextMenu Divider component\nexport const ContextMenuDivider: React.FC<ContextMenuDividerProps> = ({\n views,\n ...props\n}) => {\n return (\n <View\n height=\"1px\"\n backgroundColor=\"color.gray.200\"\n margin=\"4px 0\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n {...views?.divider}\n {...props}\n />\n );\n};\n\n// ContextMenu Separator component (alias for Divider with different styling options)\nexport const ContextMenuSeparator: React.FC<ContextMenuSeparatorProps> = ({\n views,\n ...props\n}) => {\n return (\n <View\n height=\"1px\"\n backgroundColor=\"color.gray.200\"\n margin=\"4px 0\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n {...views?.separator}\n {...props}\n />\n );\n};\n\n// Main ContextMenu View component\nexport const ContextMenuView: React.FC<\n {\n children: React.ReactNode;\n items?: ContextMenuItemType[];\n size?: Size;\n variant?: Variant;\n disableNativeContextMenu?: boolean;\n views?: any;\n } & ViewProps\n> = ({\n children,\n items,\n size = 'md',\n variant = 'default',\n disableNativeContextMenu = true,\n views,\n\n themeMode: elementMode,\n ...props\n}) => {\n if (!items || items.length === 0) {\n // If no items are provided, just render the children (for compound component pattern)\n return <>{children}</>;\n }\n\n // For data-driven approach\n return (\n <>\n <ContextMenuTrigger\n disableNativeContextMenu={disableNativeContextMenu}\n views={views}\n {...props}\n >\n {children}\n </ContextMenuTrigger>\n\n <ContextMenuContent items={items} views={views} />\n </>\n );\n};\n","import React from 'react';\nimport {\n ContextMenuProps,\n ContextMenuType,\n} from './ContextMenu/ContextMenu.props';\nimport { useContextMenuState } from './ContextMenu/ContextMenu.state';\nimport {\n ContextMenuProvider,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuDivider,\n ContextMenuSeparator,\n ContextMenuView,\n} from './ContextMenu/ContextMenu.view';\n\n/**\n * ContextMenu component for displaying a custom context menu on right-click.\n * Supports both data-driven approach (with items prop) and compound component pattern.\n */\nconst ContextMenuComponent: React.FC<ContextMenuProps> = ({\n children,\n items,\n size = 'md',\n variant = 'default',\n disableNativeContextMenu = true,\n onOpenChange,\n views,\n ...props\n}) => {\n const state = useContextMenuState({\n size,\n variant,\n onOpenChange,\n });\n\n const {\n isOpen,\n setIsOpen,\n position,\n setPosition,\n activeSubmenuId,\n setActiveSubmenuId,\n triggerRef,\n contentRef,\n contentId,\n openMenu,\n closeMenu,\n } = state;\n\n return (\n <ContextMenuProvider\n value={{\n isOpen,\n setIsOpen,\n position,\n setPosition,\n activeSubmenuId,\n setActiveSubmenuId,\n size,\n variant,\n triggerRef,\n contentRef,\n contentId,\n openMenu,\n closeMenu,\n styles: views,\n }}\n >\n <ContextMenuView\n items={items}\n size={size}\n variant={variant}\n disableNativeContextMenu={disableNativeContextMenu}\n views={views}\n {...props}\n >\n {children}\n </ContextMenuView>\n </ContextMenuProvider>\n );\n};\n\nexport const ContextMenu = ContextMenuComponent as ContextMenuType;\n\n// Assign the sub-components to the main component\nContextMenu.Trigger = ContextMenuTrigger;\nContextMenu.Content = ContextMenuContent;\nContextMenu.Item = ContextMenuItem;\nContextMenu.Divider = ContextMenuDivider;\nContextMenu.Separator = ContextMenuSeparator; // Add the Separator component\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { generateId } from '../../../utils/id';\nimport { Size, Variant } from './ContextMenu.type';\n\nexport const useContextMenuState = (props?: {\n size?: Size;\n variant?: Variant;\n onOpenChange?: (isOpen: boolean) => void;\n}) => {\n const { size, variant, onOpenChange } = props || {};\n const [isOpen, setIsOpen] = useState(false);\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [activeSubmenuId, setActiveSubmenuId] = useState<string | null>(null);\n\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n\n // Unique ID for ARIA\n const contentId = React.useMemo(() => generateId('contextmenu-content'), []);\n\n // Define open and close menu functions\n const openMenu = useCallback(\n (event: React.MouseEvent) => {\n // Set position based on click coordinates\n setPosition({ x: event.clientX, y: event.clientY });\n setIsOpen(true);\n onOpenChange?.(true);\n },\n [onOpenChange]\n );\n\n const closeMenu = useCallback(() => {\n setIsOpen(false);\n setActiveSubmenuId(null);\n onOpenChange?.(false);\n }, [onOpenChange]);\n\n // Close the context menu when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n contentRef.current &&\n !contentRef.current.contains(event.target as Node)\n ) {\n closeMenu();\n }\n };\n\n // Close the context menu when the window is resized\n const handleResize = () => {\n if (isOpen) {\n closeMenu();\n }\n };\n\n // Close the context menu when the escape key is pressed\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n closeMenu();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n window.addEventListener('resize', handleResize);\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n window.removeEventListener('resize', handleResize);\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen, closeMenu]);\n\n return {\n isOpen,\n setIsOpen,\n position,\n setPosition,\n activeSubmenuId,\n setActiveSubmenuId,\n size,\n variant,\n triggerRef,\n contentRef,\n contentId,\n openMenu,\n closeMenu,\n };\n};\n","import React from 'react';\nimport { SelectProps } from './Select.props';\n// Initializes the custom hook 'useSelectState' for managing the state of the Select component\nexport const useSelectState = ({\n placeholder,\n isMulti,\n options,\n}: SelectProps) => {\n // Determines the default value based on the 'placeholder' and 'isMulti' props, setting to an empty array for multi-select or an empty string/single default option\n const defaultValue = placeholder\n ? isMulti\n ? []\n : '' // If there's a placeholder, set default to empty array for multi-select or empty string for single select\n : Array.isArray(options) && options.length > 0\n ? options[0].value\n : ''; // If no placeholder, use the first option value if available, otherwise undefined\n\n // State hook for managing visibility of the Select dropdown, initially set to hidden\n const [hide, setHide] = React.useState(true);\n // State hook for tracking mouse hover status over the Select component\n const [isHovered, setIsHovered] = React.useState(false);\n // State hook for tracking focus status of the Select input field\n const [isFocused, setIsFocused] = React.useState(false);\n // State hook for managing the value(s) selected by the user, initialized with the default value\n const [value, setValue] = React.useState<string | string[]>(defaultValue);\n // State hook for keeping track of the currently highlighted index in the options list\n const [highlightedIndex, setHighlightedIndex] = React.useState<number>(0);\n // Returns an object containing all stateful values and their associated setters to manage the Select component's state\n return {\n value,\n setValue,\n hide,\n setHide,\n isHovered,\n setIsHovered,\n isFocused,\n setIsFocused,\n highlightedIndex,\n setHighlightedIndex,\n };\n};\n// Initializes another custom hook 'useItemState' for managing the hover state of each Select item\nexport const useItemState = () => {\n // State hook for tracking mouse hover status over individual Select item options\n const [isHovered, setIsHovered] = React.useState(false);\n // Returns an object with 'isHovered' state and its associated setter from the 'useItemState' hook, for controlling individual Select item hover state\n return { isHovered, setIsHovered };\n};\n","/**\n * HelperText Component\n *\n * Renders helper text for form fields with appropriate styling\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Text } from '../../Text/Text';\n\nimport { HelperTextProps } from './HelperText.props';\n\nexport const HelperText: React.FC<HelperTextProps> = ({\n children,\n views = { helperText: {} },\n ...props\n}) => (\n <Text\n // Typography properties\n size=\"xs\" // 12px\n fontWeight=\"400\" // Regular weight\n letterSpacing=\"-0.01em\" // Slight negative tracking for modern look\n lineHeight=\"16px\" // 4 × 4px grid\n // Layout properties\n marginVertical={0}\n marginHorizontal={0}\n // Color properties\n color=\"color.gray.500\" // Muted color for helper text\n // Animation\n transition=\"all 0.2s ease\"\n // Apply custom styles\n {...(views['helperText'] as any)}\n {...props}\n >\n {children}\n </Text>\n);\n","/**\n * FieldContainer Component\n *\n * Renders a container for a form field with helper text and error handling\n * according to the design guidelines.\n */\n\nimport React from 'react';\n\nimport { HelperText } from '../HelperText/HelperText';\n\nimport { ContainerProps } from './FieldContainer/FieldContainer.props';\nimport { Text } from '../../Text/Text';\nimport { Vertical } from 'app-studio';\n\nexport const FieldContainer: React.FC<ContainerProps> = ({\n children,\n helperText,\n error = false,\n views,\n ...props\n}) => (\n <Vertical\n // Layout properties\n gap={8} // 2 × 4px grid\n position=\"relative\"\n width=\"100%\"\n // Apply custom props\n {...props}\n {...views?.container}\n >\n {/* Field content */}\n {children}\n\n {/* Helper text (when no error) */}\n {!error && helperText && (\n <HelperText\n marginTop={4} // 1 × 4px grid\n {...views?.helperText}\n >\n {helperText}\n </HelperText>\n )}\n\n {/* Error message */}\n {error && (\n <Text\n size=\"xs\"\n marginTop={4} // 1 × 4px grid\n marginHorizontal={0}\n fontWeight=\"500\" // Medium weight for better readability\n color=\"color.red.500\"\n transition=\"all 0.2s ease\"\n {...views?.error}\n >\n {error}\n </Text>\n )}\n </Vertical>\n);\n","/**\n * Input Styles\n *\n * Defines the styles for input components following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Shape, Size, Variant } from './Input.type';\n\n/**\n * Shape styles for input components with consistent border radius\n */\nexport const Shapes: Record<Shape, ViewProps> = {\n default: {\n borderRadius: '8px', // Consistent with design system (rounded-md)\n },\n sharp: {\n borderRadius: 0,\n },\n rounded: {\n borderRadius: '8px', // Consistent with design system (rounded-md)\n },\n pillShaped: {\n borderRadius: '9999px', // Full rounded for pill shape\n },\n};\n\n/**\n * Label sizes following the 4px grid system\n */\nexport const LabelSizes: Record<Size, string> = {\n xs: '12px', // 3 × 4px grid\n sm: '14px', // 3.5 × 4px grid\n md: '16px', // 4 × 4px grid\n lg: '18px', // 4.5 × 4px grid\n xl: '20px', // 5 × 4px grid\n};\n\n/**\n * Input variants with consistent styling\n */\nexport const InputVariants: Record<Variant, ViewProps> = {\n outline: {\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n backgroundColor: 'color.white',\n transition: 'all 0.2s ease',\n _hover: {\n borderColor: 'color.gray.300',\n },\n _focus: {\n borderColor: 'theme.primary',\n boxShadow: '0 0 0 1px rgba(66, 153, 225, 0.2)',\n },\n },\n default: {\n borderWidth: 0,\n borderBottomWidth: '1px',\n borderBottomStyle: 'solid',\n borderBottomColor: 'color.gray.200',\n borderRadius: 0,\n backgroundColor: 'color.white',\n transition: 'all 0.2s ease',\n _hover: {\n borderBottomColor: 'color.gray.300',\n },\n _focus: {\n borderBottomColor: 'theme.primary',\n },\n },\n none: {\n border: 'none',\n backgroundColor: 'transparent',\n transition: 'all 0.2s ease',\n },\n};\n\n/**\n * Padding for input with label following the 4px grid system\n */\nexport const PadddingWithLabel = {\n paddingTop: '16px', // 4 × 4px grid\n paddingBottom: '8px', // 2 × 4px grid\n paddingLeft: '16px', // 4 × 4px grid\n paddingRight: '16px', // 4 × 4px grid\n};\n\n/**\n * Padding for input without label following the 4px grid system\n */\nexport const PaddingWithoutLabel = {\n paddingTop: '12px', // 3 × 4px grid\n paddingBottom: '12px', // 3 × 4px grid\n paddingLeft: '16px', // 4 × 4px grid\n paddingRight: '16px', // 4 × 4px grid\n};\n","/**\n * FieldContent Component\n *\n * Renders the content area of a form field with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Typography } from 'app-studio';\n\nimport {\n InputVariants,\n PadddingWithLabel,\n PaddingWithoutLabel,\n Shapes,\n} from '../Input.style';\nimport { Horizontal } from 'app-studio';\n\nimport { ContentProps } from './FieldContent/FieldContent.props';\n\nexport const FieldContent: React.FC<ContentProps> = ({\n label,\n shadow,\n children,\n value,\n size = 'md',\n shape = 'default',\n variant = 'default',\n error = false,\n showLabel = false,\n isFocused = false,\n isHovered = false,\n isDisabled = false,\n isReadOnly = false,\n views = { pickerBox: {} },\n ...props\n}) => {\n // Determine if the field is in an interactive state\n const isInteractive = (isHovered || isFocused) && !isDisabled;\n\n // Set the appropriate color based on state\n const color = error\n ? 'color.red.500'\n : isInteractive\n ? 'theme.primary'\n : 'color.gray.300';\n\n return (\n <Horizontal\n // Layout properties\n gap={8} // 2 × 4px grid\n width=\"100%\"\n display=\"flex\"\n flexWrap=\"nowrap\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n marginBottom={8} // 2 × 4px grid\n // Visual properties\n borderStyle=\"solid\"\n borderColor={color}\n backgroundColor=\"color.white\"\n fontSize={Typography.fontSizes[size]}\n // State properties\n cursor={isDisabled ? 'not-allowed' : isReadOnly ? 'auto' : 'text'}\n opacity={isDisabled ? 0.6 : 1}\n // Animation\n transition=\"all 0.2s ease\"\n // Apply conditional padding based on label presence\n {...(showLabel ? PadddingWithLabel : PaddingWithoutLabel)}\n // Apply shadow if provided\n {...shadow}\n // Apply shape, variant, and custom styles\n {...Shapes[shape]}\n {...InputVariants[variant]}\n {...views['box']}\n {...props}\n >\n {children}\n </Horizontal>\n );\n};\n","import React from 'react';\nimport { Center } from 'app-studio';\n\nimport { FieldIconsProps } from './FieldIcons/FieldIcons.props';\n\nexport const FieldIcons: React.FC<FieldIconsProps> = ({\n children,\n ...props\n}) => (\n <Center\n gap={10}\n right={16}\n zIndex={500}\n flexWrap=\"nowrap\"\n position=\"absolute\"\n {...props}\n >\n {children}\n </Center>\n);\n","import { Headings } from './Label.type';\n// Import Headings type definition from Label.type module for type safety and consistency.\nexport const HeadingSizes: Record<Headings, Record<string, number | string>> = {\n // Initialize a constant 'HeadingSizes' to define styles for different heading levels.\n h1: {\n // Use TypeScript's 'Record' utility type to ensure the object matches the shape of 'Headings'.\n fontSize: 96,\n // Define style properties for 'h1' heading tag, including font size, line height, and letter spacing.\n lineHeight: 112,\n letterSpacing: -1.5,\n },\n h2: {\n fontSize: 60,\n // Define style properties for 'h2' heading tag similar to 'h1', but with adjusted values for size and spacing.\n lineHeight: 71,\n letterSpacing: -0.5,\n },\n h3: {\n fontSize: 48,\n // Define style properties for 'h3' heading tag with a standard letter spacing of 0.\n lineHeight: 57,\n letterSpacing: 0,\n },\n h4: {\n fontSize: 34,\n // Provide style properties for 'h4' heading tag, with a slight increase in letter spacing.\n lineHeight: 40,\n letterSpacing: 0.25,\n },\n h5: {\n fontSize: 24,\n // Set the 'h5' heading tag views, opting for no additional letter spacing.\n lineHeight: 28,\n letterSpacing: 0,\n },\n h6: {\n fontSize: 20,\n // Set the 'h6' heading tag views, with the smallest font size and a subtle letter spacing.\n lineHeight: 24,\n letterSpacing: 0.15,\n },\n};\n","import React from 'react';\nimport { Element, Typography } from 'app-studio';\nimport { LabelProps } from './Label.props';\nimport { HeadingSizes } from './Label.style';\nconst LabelView: React.FC<LabelProps> = ({\n children,\n // LabelView is a functional component that utilizes the LabelProps interface for its props.\n heading,\n // The component is deconstructing its properties to apply conditional styles and pass them to the underlying Element.\n isItalic = false,\n isUnderlined = false,\n isStriked = false,\n // Creates a dynamic style object based on the 'heading' prop, if provided, selecting the appropriate size from HeadingSizes.\n weight = 'normal',\n // Returns an Element component with the role of a label, styled dynamically based on incoming props.\n size = 'sm',\n dropDown,\n ...props\n // The fontSize prop for the Element is determined by the 'size' prop passed to LabelView.\n}) => {\n // The fontStyle prop toggles between 'italic' and 'normal' based on the 'isItalic' boolean prop.\n const headingStyles = heading ? HeadingSizes[heading] : {};\n // fontWeight is derived from the Typography module, ensuring consistent font weighting across the app.\n return (\n // textDecoration conditionally applies 'line-through' or 'underline' based on respective boolean props; defaults to 'none' if both are false.\n <Element\n as=\"label\"\n // Spreads any additional style properties from headingStyles into the Element if a heading size is specified.\n width=\"100%\"\n // Spreads the rest of the props to support extensibility of the LabelView component for future use cases.\n fontSize={size}\n // Includes children elements inside the Element, allowing for nested content within the label.\n fontStyle={isItalic ? 'italic' : 'normal'}\n fontWeight={Typography.fontWeights[weight]}\n textDecoration={\n isStriked ? 'line-through' : isUnderlined ? 'underline' : 'none'\n }\n {...headingStyles}\n {...props}\n >\n {children}\n </Element>\n );\n};\nexport default LabelView;\n","import React from 'react';\nimport { LabelProps } from './Label/Label.props';\nimport LabelView from './Label/Label.view';\n// Import custom type 'LabelProps' to type check the properties passed into the Label component.\nconst LabelComponent: React.FC<LabelProps> = (props) => (\n // Import 'LabelView' as a visual component for the label, separating the view from business logic.\n <LabelView {...props} />\n // Define 'LabelComponent' as a functional component that uses React's FC type for type checking and utilizing React features.\n);\n// Pass all properties received by 'LabelComponent' to 'LabelView' using the spread syntax, ensuring it has all props needed for rendering.\nexport const Label = LabelComponent;\n// Export the 'LabelComponent' as 'Label' to be reused throughout the project.\n","/**\n * FieldLabel Component\n *\n * Renders a label for a form field with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Label } from '../../Form/Label/Label';\n\nimport { LabelSizes } from '../Input.style';\n\nimport { LabelProps } from './FieldLabel/FieldLabel.props';\n\nexport const FieldLabel: React.FC<LabelProps> = ({\n children,\n size = 'md',\n error = false,\n color = 'theme.primary',\n views = { label: {} },\n helperText,\n ...props\n}) => (\n <Label\n // Position properties\n top={0} // 2 × 4px grid\n zIndex={-10}\n position=\"absolute\"\n // Typography properties\n fontSize={LabelSizes[size]}\n lineHeight={LabelSizes[size]}\n letterSpacing=\"-0.01em\" // Slight negative tracking for modern look\n whiteSpace=\"nowrap\"\n // Color properties\n color={error ? 'color.red.500' : color}\n // Animation\n transition=\"all 0.2s ease\"\n // Apply custom styles\n {...views['label']}\n {...props}\n >\n {children}\n </Label>\n);\n","/**\n * FieldWrapper Component\n *\n * Renders a wrapper for form field content with appropriate styling\n * according to the design guidelines.\n */\n\nimport React from 'react';\n\nimport { Vertical } from 'app-studio';\n\nimport { WrapperFieldProps } from './FieldWrapper.props';\n\nexport const FieldWrapper: React.FC<WrapperFieldProps> = ({\n children,\n ...props\n}) => (\n <Vertical\n // Layout properties\n width=\"100%\"\n maxWidth=\"100%\"\n position=\"relative\"\n // Apply custom props\n {...props}\n >\n {children}\n </Vertical>\n);\n","/**\n * Select Styles\n *\n * Defines the styles for the Select component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Size } from './Select.type';\n\n/**\n * Size configurations for the Select component\n * Following the 4px grid system\n */\nexport const Sizes: Record<Size, ViewProps> = {\n xs: { height: '24px', width: '24px' }, // 6 × 4px grid\n sm: { height: '32px', width: '32px' }, // 8 × 4px grid\n md: { height: '40px', width: '40px' }, // 10 × 4px grid\n lg: { height: '48px', width: '48px' }, // 12 × 4px grid\n xl: { height: '56px', width: '56px' }, // 14 × 4px grid\n};\n\n/**\n * Icon sizes for the Select component\n * Proportional to the component size\n */\nexport const IconSizes: Record<Size, number> = {\n xs: 12, // 3 × 4px grid\n sm: 16, // 4 × 4px grid\n md: 20, // 5 × 4px grid\n lg: 24, // 6 × 4px grid\n xl: 28, // 7 × 4px grid\n};\n\n/**\n * Dropdown styles for the Select component\n */\nexport const dropdownStyles: ViewProps = {\n // Layout properties\n width: '100%',\n maxHeight: '240px', // 60 × 4px grid\n overflowY: 'auto',\n zIndex: 1000,\n\n // Visual properties\n backgroundColor: 'color.white',\n borderRadius: '8px', // Consistent with design system (rounded-md)\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n\n // Shadow\n boxShadow:\n '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n\n // Animation\n transition: 'all 0.2s ease',\n};\n","import React, { useCallback } from 'react';\nimport { Element } from 'app-studio';\nimport { Typography } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Text } from '../../../Text/Text';\nimport { FieldContainer } from '../../../Input/FieldContainer/FieldContainer';\nimport { FieldContent } from '../../../Input/FieldContent/FieldContent';\nimport { FieldIcons } from '../../../Input/FieldIcons/FieldIcons';\nimport { FieldLabel } from '../../../Input/FieldLabel/FieldLabel';\nimport { FieldWrapper } from '../../../Input/FieldWrapper/FieldWrapper';\nimport { ChevronIcon, CloseIcon } from '../../../Icon/Icon';\nimport {\n DropDownProps,\n HiddenSelectProps,\n ItemProps,\n MultiSelectProps,\n SelectBoxProps,\n SelectViewProps,\n} from './Select.props';\nimport { useItemState } from './Select.state';\nimport { IconSizes } from './Select.style';\n/**\n * Item Component\n *\n * Renders an individual option item in the select dropdown\n */\nconst Item: React.FC<ItemProps> = ({\n isHovered,\n setIsHovered,\n option,\n size = 'md',\n callback = () => {},\n style,\n ...props\n}) => {\n // Handles the click event on an option by invoking the callback with the selected option's value\n const handleOptionClick = (option: string) => callback(option);\n\n // Toggles the hover state on the item\n const handleHover = () => setIsHovered(!isHovered);\n\n return (\n <Element\n as=\"li\"\n // Layout properties\n margin={0}\n paddingVertical={12} // 3 × 4px grid\n paddingHorizontal={16} // 4 × 4px grid\n listStyleType=\"none\"\n // Event handlers\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n onClick={() => handleOptionClick(option.value)}\n // Visual properties\n backgroundColor={isHovered ? 'color.gray.100' : 'transparent'}\n borderRadius=\"4px\" // Subtle rounded corners for items\n // Animation\n transition=\"all 0.15s ease\"\n // Apply custom props\n {...props}\n >\n <Text\n // Typography properties\n fontSize={Typography.fontSizes[size]}\n fontWeight=\"400\" // Regular weight\n lineHeight=\"1.5\"\n // Apply custom styles\n {...style}\n >\n {option.label}\n </Text>\n </Element>\n );\n};\n/**\n * SelectBox Component\n *\n * Renders the main select box with selected value(s)\n */\nconst SelectBox: React.FC<SelectBoxProps> = ({\n size = 'md',\n views = { field: {}, text: {} },\n value,\n isDisabled,\n placeholder,\n removeOption = () => {},\n options,\n}) => {\n /**\n * Styles for the select field\n */\n const fieldStyles = {\n // Layout properties\n margin: 0,\n width: '95%',\n height: '100%',\n border: 'none',\n paddingVertical: 12, // 3 × 4px grid\n paddingHorizontal: 0,\n\n // Typography properties\n fontSize: Typography.fontSizes[size],\n\n fontWeight: '400', // Regular weight\n lineHeight: '1.5',\n letterSpacing: '-0.01em', // Slight negative tracking for modern look\n\n // Visual properties\n backgroundColor: 'transparent',\n color: isDisabled ? 'color.gray.400' : 'color.gray.900',\n\n // State properties\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n\n // Animation\n transition: 'all 0.2s ease',\n\n // Apply custom styles\n ...views['field'],\n ...views['text'],\n };\n const option: any =\n options.length > 0 && options.find((option) => option.value === value);\n return (\n <Text {...fieldStyles}>\n {/* Check if value is an empty string or if value is an array but with no items, then show placeholder */}\n {(value === '' || (Array.isArray(value) && value.length === 0)) &&\n !!placeholder ? (\n placeholder\n ) : (\n <>\n {/* If value is a string, use the option label or value */}\n {typeof value === 'string' ? (\n (option && option.label) ?? value\n ) : // If value is an array and not empty, render MultiSelect options\n Array.isArray(value) && value.length > 0 ? (\n <Horizontal gap={6}>\n {value.map((option) => (\n <MultiSelect\n key={option}\n option={option}\n removeOption={removeOption}\n />\n ))}\n </Horizontal>\n ) : (\n // Handle any other types of value (including objects or unexpected values)\n <span>{value}</span>\n )}\n </>\n )}\n </Text>\n );\n};\nconst HiddenSelect: React.FC<HiddenSelectProps> = ({\n id,\n name,\n value,\n onChange,\n isMulti = false,\n isDisabled = false,\n isReadOnly = false,\n options = [],\n ...props\n}) => {\n const handleChange = (event: any) => {\n if (onChange) onChange(event);\n };\n return (\n <Element\n id={id}\n name={name}\n as=\"select\"\n opacity={0}\n width={0}\n height={0}\n position=\"absolute\"\n value={value}\n disabled={isDisabled}\n readOnly={isReadOnly}\n onChange={handleChange}\n multiple={isMulti}\n {...props}\n >\n {options.length > 0 &&\n options.map((option) => {\n return (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n );\n })}\n </Element>\n );\n};\n/**\n * DropDown Component\n *\n * Renders the dropdown list of options for the select component\n */\nconst DropDown: React.FC<DropDownProps> = ({\n size,\n views = {},\n options,\n callback = () => {},\n highlightedIndex,\n setHighlightedIndex,\n}) => {\n const itemStates = useItemState();\n const handleCallback = (option: string) => callback(option);\n\n // Shadow styles for the dropdown\n const shadow = {\n boxShadow:\n '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n };\n\n return (\n <Element\n as=\"ul\"\n role=\"dropdown\"\n top=\"100%\"\n width=\"100%\"\n display=\"flex\"\n flexDirection=\"column\"\n position=\"absolute\"\n marginTop={8} // 2 × 4px grid\n marginLeft={0}\n marginRight={0}\n marginBottom={0}\n padding={0}\n maxHeight=\"240px\" // 60 × 4px grid\n overflowY=\"auto\"\n zIndex={1000}\n backgroundColor=\"color.white\"\n borderRadius=\"8px\" // Consistent with design system (rounded-md)\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor=\"color.gray.200\"\n transition=\"all 0.2s ease\"\n style={{\n scrollbarWidth: 'thin',\n scrollbarColor: 'rgba(0, 0, 0, 0.2) transparent',\n '&::-webkit-scrollbar': {\n width: '4px',\n },\n '&::-webkit-scrollbar-track': {\n background: 'transparent',\n },\n '&::-webkit-scrollbar-thumb': {\n background: 'rgba(0, 0, 0, 0.2)',\n borderRadius: '4px',\n },\n }}\n {...shadow}\n {...views?.dropDown}\n >\n {options.length > 0 &&\n options.map((option, index) => (\n <Item\n key={option.value}\n size={size}\n style={views['text']}\n option={option}\n callback={handleCallback}\n backgroundColor={\n index === highlightedIndex ? 'color.gray.100' : 'transparent'\n }\n onMouseEnter={() => setHighlightedIndex(index)}\n {...itemStates}\n />\n ))}\n </Element>\n );\n};\n/**\n * MultiSelect Component\n *\n * Renders a selected option in a multi-select component\n */\nexport const MultiSelect: React.FC<MultiSelectProps> = ({\n option,\n size = 'md',\n removeOption = () => {},\n ...props\n}) => {\n const handleClick = () => removeOption(option);\n\n return (\n <Horizontal\n gap={8}\n padding={8}\n alignItems=\"center\"\n borderRadius=\"6px\"\n backgroundColor=\"color.gray.200\"\n fontSize={Typography.fontSizes[size]}\n onClick={(event: any) => event.stopPropagation()}\n transition=\"all 0.2s ease\"\n {...props}\n >\n <Text\n size={size}\n fontWeight=\"500\" // Medium weight\n >\n {option}\n </Text>\n\n <CloseIcon\n role=\"close-button\"\n color=\"inherit\"\n widthHeight={IconSizes[size]}\n onClick={handleClick}\n transition=\"all 0.2s ease\"\n _hover={{\n opacity: 0.7,\n }}\n />\n </Horizontal>\n );\n};\nconst SelectView: React.FC<SelectViewProps> = ({\n id,\n name,\n label,\n value,\n placeholder,\n helperText,\n hide = false,\n error = false,\n isMulti = false,\n isFocused = false,\n isHovered = false,\n isDisabled = false,\n isReadOnly = false,\n options = [],\n shadow = {},\n size = 'md',\n shape = 'default',\n variant = 'default',\n views = {\n text: {},\n icon: {},\n dropDown: {},\n selectBox: {},\n label: {},\n helperText: {},\n },\n onChange = () => {},\n setHide = () => {},\n setValue = () => {},\n setIsHovered = () => {},\n setIsFocused = () => {},\n setHighlightedIndex,\n highlightedIndex,\n ...props\n}) => {\n const showLabel = !!(isFocused && label);\n const handleHover = () => setIsHovered(!isHovered);\n const handleFocus = () => setIsFocused(true);\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (event && event.stopPropagation) event.stopPropagation();\n setHide(!hide);\n setIsFocused(!isFocused);\n };\n const handleCallback = useCallback(\n (option: string) => {\n setHide(!hide);\n if (isMulti && Array.isArray(value)) {\n !value.includes(option) && setValue([...value, option]);\n } else {\n setValue(option);\n }\n if (onChange) onChange(option);\n },\n [hide, isMulti, value]\n );\n const handleRemoveOption = (valueOption: string) => {\n if (Array.isArray(value) && value.includes(valueOption)) {\n const newValue = value.filter((option) => option !== valueOption);\n setValue(newValue.length === 0 ? [] : newValue);\n }\n };\n return (\n <FieldContainer\n role=\"SelectBox\"\n helperText={helperText}\n error={error}\n views={views}\n onClick={isDisabled || isReadOnly ? () => {} : handleClick}\n >\n <FieldContent\n label={label}\n size={size}\n error={error}\n shape={shape}\n views={views}\n shadow={shadow}\n variant={variant}\n value={value}\n color={'theme.primary'}\n isHovered={isHovered}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isFocused={isFocused}\n showLabel={showLabel}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n >\n <FieldWrapper>\n {showLabel && (\n <FieldLabel\n htmlFor={id}\n color={'theme.primary'}\n error={error}\n {...views}\n >\n {label}\n </FieldLabel>\n )}\n <HiddenSelect\n id={id}\n name={name}\n options={options}\n onChange={onChange}\n value={value}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isMulti={isMulti}\n onFocus={handleFocus}\n {...props}\n />\n <SelectBox\n options={options}\n size={size}\n views={views}\n value={value}\n isDisabled={isDisabled}\n placeholder={placeholder}\n removeOption={handleRemoveOption}\n />\n </FieldWrapper>\n <FieldIcons>\n {!isReadOnly && !isDisabled && (\n <>\n {hide ? (\n <ChevronIcon\n color=\"inherit\"\n widthHeight={IconSizes[size]}\n style={views.icon}\n orientation=\"down\"\n />\n ) : (\n <ChevronIcon\n color=\"inherit\"\n orientation=\"up\"\n widthHeight={IconSizes[size]}\n style={views.icon}\n />\n )}\n </>\n )}\n </FieldIcons>\n </FieldContent>\n {!hide && (\n <DropDown\n size={size}\n views={views}\n options={options}\n callback={handleCallback}\n highlightedIndex={highlightedIndex}\n setHighlightedIndex={setHighlightedIndex}\n />\n )}\n </FieldContainer>\n );\n};\nexport default SelectView;\n","import React from 'react';\nimport { SwitchProps } from './Switch.props';\n// This file defines a custom hook for managing the state of a Switch component. It allows tracking whether the switch is hovered, and its on/off state based on 'isDisabled' and 'isChecked' properties.\nexport const useSwitchState = ({ isDisabled, isChecked }: SwitchProps) => {\n const [isHovered, setIsHovered] = React.useState(false);\n const [on, setOn] = React.useState(isDisabled ? !isDisabled : isChecked);\n return { isHovered, setIsHovered, on, setOn };\n};\n","/**\n * Switch Styles\n *\n * Defines the styles for the Switch component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Size } from './Switch.type';\n\n/**\n * Knob (circle) sizes for the Switch component\n * Following the 4px grid system\n */\nexport const KnobSizes: Record<Size, ViewProps> = {\n xs: { height: '12px', width: '12px' }, // 3 × 4px grid\n sm: { height: '16px', width: '16px' }, // 4 × 4px grid\n md: { height: '20px', width: '20px' }, // 5 × 4px grid\n lg: { height: '24px', width: '24px' }, // 6 × 4px grid\n xl: { height: '28px', width: '28px' }, // 7 × 4px grid\n};\n\n/**\n * Slider (track) sizes for the Switch component\n * Following the 4px grid system\n */\nexport const SliderSizes: Record<Size, ViewProps> = {\n xs: {\n height: '24px', // 6 × 4px grid\n width: '40px', // 10 × 4px grid\n },\n sm: {\n height: '28px', // 7 × 4px grid\n width: '48px', // 12 × 4px grid\n },\n md: {\n height: '32px', // 8 × 4px grid\n width: '56px', // 14 × 4px grid\n },\n lg: {\n height: '36px', // 9 × 4px grid\n width: '64px', // 16 × 4px grid\n },\n xl: {\n height: '40px', // 10 × 4px grid\n width: '72px', // 18 × 4px grid\n },\n};\n\n/**\n * Padding for the Switch slider\n * Following the 4px grid system\n */\nexport const SliderPadding: Record<Size, Record<string, number>> = {\n xs: { paddingVertical: 4, paddingHorizontal: 4 }, // 1 × 4px grid\n sm: { paddingVertical: 4, paddingHorizontal: 4 }, // 1 × 4px grid\n md: { paddingVertical: 4, paddingHorizontal: 4 }, // 1 × 4px grid\n lg: { paddingVertical: 4, paddingHorizontal: 4 }, // 1 × 4px grid\n xl: { paddingVertical: 4, paddingHorizontal: 4 }, // 1 × 4px grid\n};\n\n/**\n * Color schemes for the Switch component\n */\nexport const ColorSchemes = {\n // Default colors\n default: {\n active: 'theme.primary',\n inactive: 'color.gray.300',\n knob: 'white',\n disabled: 'color.gray.200',\n },\n // State-specific colors\n states: {\n hover: {\n active: 'color.blue.600',\n inactive: 'color.gray.400',\n },\n focus: {\n active: 'color.blue.600',\n inactive: 'color.gray.400',\n outline: 'rgba(66, 153, 225, 0.6)',\n },\n },\n};\n","/**\n * Switch View Component\n *\n * Renders a switch toggle with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Input } from 'app-studio';\nimport { Label } from '../../../Form/Label/Label';\nimport { View } from 'app-studio';\nimport { Text } from '../../../Text/Text';\nimport { SwitchViewProps } from './Switch.props';\nimport {\n KnobSizes,\n SliderPadding,\n SliderSizes,\n ColorSchemes,\n} from './Switch.style';\nconst SwitchContent = (props: any) => <Input type=\"checkbox\" {...props} />;\nconst SwitchView: React.FC<SwitchViewProps> = ({\n id,\n name,\n label,\n inActiveChild,\n isChecked,\n activeChild,\n labelPosition = 'right',\n shadow = {},\n size = 'sm',\n value = false,\n isHovered = false,\n isDisabled = false,\n isReadOnly = false,\n on,\n setOn,\n onChange,\n setValue = () => {},\n setIsHovered = () => {},\n helperText,\n views = { slider: {}, circle: {}, label: {} },\n ...props\n}) => {\n const handleToggle = (event: any) => {\n if (!isReadOnly) {\n setValue(!value);\n setOn(!on);\n if (onChange) onChange(event.target.checked);\n }\n };\n const handleHover = () => setIsHovered(!isHovered);\n /**\n * Styles for the switch component\n */\n const switchStyle = {\n container: {\n // Layout properties\n gap: 12, // 3 × 4px grid\n display: 'flex',\n height: 'fit-content',\n width: 'fit-content',\n alignItems: 'center',\n\n // Typography properties\n\n // State properties\n cursor: isDisabled ? 'not-allowed' : isReadOnly ? 'default' : 'pointer',\n opacity: isDisabled ? 0.6 : 1,\n\n // Animation\n transition: 'all 0.2s ease',\n\n // Apply custom styles\n ...views.label,\n },\n };\n return (\n <Label\n htmlFor={id}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n {...switchStyle.container}\n {...props}\n >\n <SwitchContent\n id={id}\n name={name}\n opacity={0}\n width={0}\n height={0}\n checked={value}\n onChange={handleToggle}\n disabled={isDisabled}\n readOnly={isReadOnly}\n {...props}\n />\n {/* Label on the left side */}\n {labelPosition === 'left' && label && (\n <Text\n fontWeight=\"500\" // Medium weight for better readability\n color={isDisabled ? 'color.gray.400' : 'color.gray.700'}\n transition=\"all 0.2s ease\"\n >\n {label}\n </Text>\n )}\n\n {/* Switch slider */}\n <View\n // Layout properties\n display=\"flex\"\n alignItems=\"center\"\n justifyContent={\n activeChild ? 'space-between' : value ? 'flex-end' : 'flex-start'\n }\n marginBottom={4} // 1 × 4px grid\n // Visual properties\n borderRadius=\"9999px\" // Full rounded for pill shape\n backgroundColor={\n isDisabled\n ? ColorSchemes.default.disabled\n : value\n ? isHovered\n ? ColorSchemes.states.hover.active\n : ColorSchemes.default.active\n : isHovered\n ? ColorSchemes.states.hover.inactive\n : ColorSchemes.default.inactive\n }\n // State properties\n cursor=\"pointer\"\n // Animation\n transition=\"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\"\n // Apply styles\n {...shadow}\n {...SliderPadding[size]}\n {...SliderSizes[size]}\n {...views['slider']}\n >\n {/* Active content */}\n {activeChild && value && (\n <View\n marginLeft={8} // 2 × 4px grid\n transition=\"all 0.3s ease\"\n >\n {activeChild}\n </View>\n )}\n\n {/* Knob */}\n <View\n borderRadius=\"50%\"\n backgroundColor={ColorSchemes.default.knob}\n boxShadow=\"0 1px 2px rgba(0, 0, 0, 0.1)\"\n transition=\"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\"\n {...KnobSizes[size]}\n {...views['circle']}\n />\n\n {/* Inactive content */}\n {inActiveChild && !value && (\n <View\n marginRight={8} // 2 × 4px grid\n transition=\"all 0.3s ease\"\n >\n {inActiveChild}\n </View>\n )}\n </View>\n\n {/* Label on the right side */}\n {labelPosition === 'right' && label && (\n <Text\n fontWeight=\"500\" // Medium weight for better readability\n color={isDisabled ? 'color.gray.400' : 'color.gray.700'}\n transition=\"all 0.2s ease\"\n >\n {label}\n </Text>\n )}\n </Label>\n );\n};\nexport default SwitchView;\n","import { useMemo, useState } from 'react';\nimport { TextAreaProps } from './TextArea.props';\n// Declaration of the useTextAreaState custom hook for managing the text area component state.\nexport const useTextAreaState = ({\n label,\n placeholder,\n value: defaultValue,\n}: // Initializes the custom hook with properties from TextAreaProps and returns the text area state management functions and values.\nTextAreaProps) => {\n // State hook for the 'hint' value, displaying either the label or placeholder as guidance within the text area.\n const [hint, setHint] = useState(label ?? placeholder);\n // State hook for tracking whether the text area is hovered over.\n const [isHovered, setIsHovered] = useState(false);\n // State hook to manage the current value of the text area, initialized with the default value or an empty string.\n const [value, setValue] = useState(defaultValue || '');\n // State hook to determine if the text area is currently focused.\n const [isFocused, setIsFocused] = useState(false);\n // Memoized callback that sets the hint based on focus state and value presence to ensure proper label or placeholder visibility.\n useMemo(() => {\n setHint(isFocused && !value ? placeholder ?? '' : label ?? placeholder);\n }, [value, isFocused, label, placeholder]);\n return {\n hint,\n setHint,\n isHovered,\n setIsHovered,\n value,\n setValue,\n isFocused,\n setIsFocused,\n };\n // Export of the useTextAreaState hook for external usage.\n};\n","/**\n * TextArea View Component\n *\n * Renders a multi-line text input field with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Element, Typography } from 'app-studio';\nimport {\n FieldContainer,\n FieldContent,\n FieldLabel,\n FieldWrapper,\n} from '../../../Input';\nimport { TextAreaViewProps } from './TextArea.props';\nconst TextAreaView: React.FC<TextAreaViewProps> = ({\n id,\n name,\n hint,\n error,\n value,\n label,\n shadow,\n helperText,\n placeholder,\n size = 'sm',\n shape = 'default',\n variant = 'default',\n isHovered = false,\n isFocused = false,\n isEditable = false,\n isReadOnly = false,\n isDisabled = false,\n isAutoFocus = false,\n isMultiline = false,\n maxRows = 3,\n maxCols = 30,\n onBlur = () => {},\n onChange,\n onFocus,\n setHint = () => {},\n setValue = () => {},\n setIsFocused = () => {},\n setIsHovered = () => {},\n views = { label: {}, helperText: {} },\n ...props\n}) => {\n const showLabel = !!(isFocused && label);\n /**\n * Styles for the textarea field\n */\n const fieldStyles = {\n // Layout properties\n margin: 0,\n paddingVertical: 2, // 3 × 4px grid\n paddingHorizontal: 2,\n width: '100%',\n maxHeight: 'calc(100vh - 100px)',\n height: 'calc(5em)',\n border: 'none',\n resize: 'vertical',\n // Focus state\n on: {\n focus: {\n outline: 'none',\n },\n },\n\n // Typography properties\n fontSize: Typography.fontSizes[size],\n lineHeight: Typography.fontSizes[size] * 1.5, // 1.5 × font size for better readability in multi-line text\n\n letterSpacing: '-0.01em', // Slight negative tracking for modern look\n\n // Visual properties\n backgroundColor: 'transparent',\n color: isDisabled ? 'color.gray.400' : 'color.gray.900',\n\n // State properties\n cursor: isDisabled ? 'not-allowed' : 'text',\n\n // Animation\n transition: 'all 0.2s ease',\n\n // // Dark mode support\n\n // Apply custom field styles\n ...views['field'],\n };\n const handleHover = () => setIsHovered(!isHovered);\n const handleFocus = () => {\n setIsFocused(true);\n if (onFocus) onFocus();\n };\n const handleBlur = (event: any) => {\n onBlur(event);\n setIsFocused(false);\n };\n const handleChange = (\n event: React.ChangeEvent<HTMLInputElement> | string\n ) => {\n if (typeof event === 'string') {\n setValue(event);\n if (onChange) onChange(event);\n } else {\n setValue(event.target.value);\n if (onChange) onChange(event.target.value);\n }\n };\n return (\n <FieldContainer\n helperText={helperText}\n error={error}\n views={views}\n {...props}\n >\n <FieldContent\n label={label}\n size={size}\n error={error}\n shape={shape}\n views={views}\n shadow={shadow}\n variant={variant}\n value={value}\n color={'theme.primary'}\n isHovered={isHovered}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isFocused={isFocused}\n showLabel={showLabel}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n {...views?.content}\n >\n <FieldWrapper {...views?.warper}>\n {showLabel && (\n <FieldLabel\n htmlFor={id}\n color={'theme.primary'}\n error={error}\n {...views?.label}\n >\n {label}\n </FieldLabel>\n )}\n <Element\n as=\"textarea\"\n id={id}\n name={name}\n rows={maxRows}\n cols={maxCols}\n value={value}\n readOnly={isReadOnly}\n disabled={isDisabled}\n autoFocus={isAutoFocus}\n editable={!!isEditable.toString()}\n placeholder={hint}\n onBlur={handleBlur}\n onFocus={handleFocus}\n multiline={!!isMultiline.toString()}\n onChange={handleChange}\n {...fieldStyles}\n {...views?.textarea}\n />\n </FieldWrapper>\n </FieldContent>\n </FieldContainer>\n );\n};\nexport default TextAreaView;\n","import { useMemo, useState } from 'react';\nimport { TextFieldProps } from './TextField.props';\n// Define a custom hook `useTextFieldState` that creates and manages the state of a text field component based on its properties.\nexport const useTextFieldState = ({\n label,\n placeholder,\n value: defaultValue,\n}: TextFieldProps) => {\n // Initialize `hint` state with either the label or placeholder text, using label as a priority if it exists.\n const [hint, setHint] = useState(label ?? placeholder);\n // Set up a boolean state `isFocused` to track if the text field is focused.\n const [isFocused, setIsFocused] = useState(false);\n // Introduce a boolean state `isHovered` for tracking mouse hover status over the text field.\n const [isHovered, setIsHovered] = useState(false);\n // Manage the `value` state that holds the current value of the text field, initialized with defaultValue.\n const [value, setValue] = useState(defaultValue);\n // Use `useMemo` hook to recompute hint text when any dependency changes, updating it based on focus state and presence of value.\n useMemo(() => {\n // Update the `hint` state depending on whether the text field is focused and if value is not present, falling back to placeholder or label.\n setHint(isFocused && !value ? placeholder ?? '' : label ?? placeholder);\n // Specify the dependencies for the `useMemo` hook - updating the `hint` text when value, isFocused, label, or placeholder changes.\n }, [value, isFocused, label, placeholder]);\n // Return an object exposing the states and state setter functions for consumer components to use and manage the text field's UI and behavior.\n return {\n hint,\n setHint,\n isFocused,\n setIsFocused,\n isHovered,\n setIsHovered,\n setValue,\n value,\n };\n};\n","/**\n * TextField View Component\n *\n * Renders a text input field with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Input, Typography, useTheme } from 'app-studio';\nimport { FieldContainer } from '../../../Input/FieldContainer/FieldContainer';\nimport { FieldContent } from '../../../Input/FieldContent/FieldContent';\nimport { FieldIcons } from '../../../Input/FieldIcons/FieldIcons';\nimport { FieldLabel } from '../../../Input/FieldLabel/FieldLabel';\nimport { FieldWrapper } from '../../../Input/FieldWrapper/FieldWrapper';\nimport { CloseIcon } from '../../../Icon/Icon';\nimport { TextFieldViewProps } from './TextField.props';\n\n/**\n * Input component for text fields\n */\nconst TextFieldInput = (props: any) => <Input type=\"text\" {...props} />;\nconst TextFieldView: React.FC<TextFieldViewProps> = ({\n id,\n name,\n label,\n hint,\n value,\n onChange,\n left,\n right,\n helperText,\n placeholder,\n onChangeText,\n shadow = {},\n views = { container: {}, field: {}, label: {}, helperText: {}, text: {} },\n size = 'md',\n shape = 'default',\n variant = 'default',\n error = false,\n isFocused = false,\n isHovered = false,\n isDisabled = false,\n isReadOnly = false,\n isClearable = true,\n isAutoFocus = false,\n setHint = () => {},\n setIsFocused = () => {},\n setIsHovered = () => {},\n setValue = () => {},\n onClick = () => {},\n onFocus,\n onBlur = () => {},\n themeMode: elementMode,\n ...props\n}) => {\n const { getColor, themeMode } = useTheme();\n const IconColor = getColor('color.blueGray.700', {\n themeMode: elementMode ? elementMode : themeMode,\n });\n const showLabel = !!(isFocused && label);\n /**\n * Styles for the input field\n */\n const fieldStyles = {\n // Layout properties\n margin: 0,\n paddingVertical: 8, // 2 × 4px grid\n paddingHorizontal: 0,\n width: '100%',\n height: '100%',\n border: 'none',\n\n // Focus state\n on: {\n focus: {\n outline: 'none',\n },\n },\n\n // Typography properties\n fontSize: Typography.fontSizes[size],\n lineHeight: Typography.fontSizes[size],\n\n letterSpacing: '-0.01em', // Slight negative tracking for modern look\n\n // Visual properties\n backgroundColor: 'transparent',\n color: isDisabled ? 'color.gray.400' : 'color.gray.900',\n\n // State properties\n cursor: isDisabled ? 'not-allowed' : 'text',\n\n // Animation\n transition: 'all 0.2s ease',\n\n // Apply custom field styles\n ...views['field'],\n };\n const handleFocus = () => {\n setIsFocused(true);\n if (onFocus) onFocus();\n };\n const handleHover = () => setIsHovered(!isHovered);\n const handleBlur = (event: any) => {\n if (onBlur) onBlur(event);\n setIsFocused(false);\n };\n const handleChange = (\n event: React.ChangeEvent<HTMLInputElement> | string\n ) => {\n if (typeof event === 'string') {\n setValue(event);\n if (onChangeText) onChangeText(event);\n if (onChange) onChange(event);\n } else {\n setValue(event.target.value);\n if (onChangeText) onChangeText(event.target.value);\n if (onChange) onChange(event.target.value);\n }\n };\n const handleClear = () => {\n setValue('');\n if (onChange) {\n onBlur({ target: { name } });\n if (onChangeText) onChangeText('');\n if (onChange) onChange('');\n }\n if (typeof document === 'undefined' && onChangeText) onChangeText('');\n };\n return (\n <FieldContainer helperText={helperText} error={error} views={views}>\n <FieldContent\n label={label}\n size={size}\n error={error}\n shape={shape}\n views={views}\n shadow={shadow}\n variant={variant}\n value={value}\n color={'theme.primary'}\n isHovered={isHovered}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isFocused={isFocused}\n showLabel={showLabel}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n >\n {left}\n <FieldWrapper>\n {showLabel && (\n <FieldLabel\n htmlFor={id}\n color={'theme.primary'}\n error={error}\n {...views}\n >\n {label}\n </FieldLabel>\n )}\n <TextFieldInput\n id={id}\n name={name}\n readOnly={isReadOnly}\n disabled={isDisabled}\n autoFocus={isAutoFocus}\n placeholder={hint}\n onFocus={handleFocus}\n onBlur={handleBlur}\n autoComplete=\"off\"\n {...fieldStyles}\n {...props}\n onChange={handleChange}\n value={value}\n />\n </FieldWrapper>\n {isClearable && value && !isReadOnly && !isDisabled && (\n <FieldIcons>\n <CloseIcon\n widthHeight={Typography.fontSizes[size]}\n color={IconColor}\n onClick={handleClear}\n />\n </FieldIcons>\n )}\n {right}\n </FieldContent>\n </FieldContainer>\n );\n};\nexport default TextFieldView;\n","import React from 'react';\n\nimport { CheckboxProps } from './Checkbox.props';\n\nexport const useCheckboxState = ({\n defaultIsSelected = false,\n}: CheckboxProps) => {\n const [isHovered, setIsHovered] = React.useState(false);\n const [isSelected, setIsSelected] =\n React.useState<boolean>(defaultIsSelected);\n\n return {\n isHovered,\n setIsHovered,\n isSelected,\n setIsSelected,\n };\n};\n","/**\n * Checkbox Styles\n *\n * Defines the styles for the Checkbox component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Size, Variant } from './Checkbox.type';\n\n/**\n * Size configurations for the Checkbox component\n * Following the 4px grid system\n */\nexport const Sizes: Record<Size, ViewProps> = {\n xs: { height: '16px', width: '16px' }, // 4 × 4px grid\n sm: { height: '20px', width: '20px' }, // 5 × 4px grid\n md: { height: '24px', width: '24px' }, // 6 × 4px grid\n lg: { height: '28px', width: '28px' }, // 7 × 4px grid\n xl: { height: '32px', width: '32px' }, // 8 × 4px grid\n};\n\n/**\n * Icon sizes for the Checkbox component\n * Proportional to the component size\n */\nexport const IconSizes: Record<Size, number> = {\n xs: 10, // 2.5 × 4px grid\n sm: 14, // 3.5 × 4px grid\n md: 16, // 4 × 4px grid\n lg: 20, // 5 × 4px grid\n xl: 24, // 6 × 4px grid\n};\n\n/**\n * Variant styles for the Checkbox component\n */\nexport const VariantStyles: Record<Variant, ViewProps> = {\n selected: {\n backgroundColor: 'theme.primary',\n borderColor: 'theme.primary',\n color: 'color.white',\n },\n unselected: {\n backgroundColor: 'color.white',\n borderWidth: '2px',\n borderStyle: 'solid',\n borderColor: 'color.gray.300',\n color: 'color.black',\n },\n indeterminate: {\n backgroundColor: 'theme.primary',\n borderColor: 'theme.primary',\n color: 'color.white',\n },\n};\n\n/**\n * State styles for the Checkbox component\n */\nexport const StateStyles = {\n hover: {\n selected: {\n backgroundColor: 'color.blue.600',\n borderColor: 'color.blue.600',\n },\n unselected: {\n borderColor: 'color.gray.400',\n },\n indeterminate: {\n backgroundColor: 'color.blue.600',\n borderColor: 'color.blue.600',\n },\n },\n disabled: {\n selected: {\n backgroundColor: 'color.gray.300',\n borderColor: 'color.gray.300',\n opacity: 0.6,\n },\n unselected: {\n borderColor: 'color.gray.300',\n opacity: 0.6,\n },\n indeterminate: {\n backgroundColor: 'color.gray.300',\n borderColor: 'color.gray.300',\n opacity: 0.6,\n },\n },\n error: {\n selected: {\n backgroundColor: 'color.red.500',\n borderColor: 'color.red.500',\n },\n unselected: {\n borderColor: 'color.red.500',\n },\n indeterminate: {\n backgroundColor: 'color.red.500',\n borderColor: 'color.red.500',\n },\n },\n};\n","/**\n * Checkbox View Component\n *\n * Renders a checkbox with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Typography } from 'app-studio';\n\nimport { Center } from 'app-studio';\nimport { Label } from '../../../Form/Label/Label';\nimport { TickIcon, MinusIcon } from '../../../Icon/Icon';\n\nimport { CheckboxViewProps } from './Checkbox.props';\nimport { IconSizes, Sizes, VariantStyles, StateStyles } from './Checkbox.style';\nimport { Text } from '../../../Text/Text';\nimport { Horizontal } from 'app-studio';\nimport { Vertical } from 'app-studio';\n\nconst CheckboxView: React.FC<CheckboxViewProps> = ({\n id,\n icon,\n name,\n label,\n isChecked,\n onChange,\n onValueChange,\n shadow = {},\n labelPosition = 'right',\n size = 'md',\n error = false,\n isSelected = false,\n isHovered = false,\n isDisabled = false,\n isReadOnly = false,\n isIndeterminate = false,\n defaultIsSelected = false,\n setIsSelected = () => {},\n setIsHovered = () => {},\n views = { checkbox: {}, label: {} },\n infoText,\n helperText,\n ...props\n}) => {\n const handleHover = () => setIsHovered(!isHovered);\n\n const handleChange = () => {\n if (!isReadOnly && !isDisabled) {\n if (setIsSelected) setIsSelected(!isSelected);\n if (onChange) onChange(!isChecked);\n if (onValueChange) onValueChange(!isChecked);\n }\n };\n\n /**\n * Determine the variant based on component state\n */\n const variant = isIndeterminate\n ? 'indeterminate'\n : isChecked || isSelected\n ? 'selected'\n : 'unselected';\n\n /**\n * Apply state-specific styles\n */\n const stateStyle = error\n ? StateStyles.error[variant]\n : isDisabled\n ? StateStyles.disabled[variant]\n : isHovered\n ? StateStyles.hover[variant]\n : {};\n\n /**\n * Styles for the checkbox component\n */\n const checkboxStyle = {\n container: {\n // Layout properties\n gap: 8, // 2 × 4px grid\n display: 'flex',\n height: 'fit-content',\n flexDirection: 'column',\n width: 'fit-content',\n\n // Typography properties\n\n // Visual properties\n color: error\n ? 'color.red.600'\n : isDisabled\n ? 'color.gray.400'\n : 'color.gray.700',\n\n // State properties\n cursor: isDisabled ? 'not-allowed' : isReadOnly ? 'default' : 'pointer',\n opacity: isDisabled ? 0.6 : 1,\n\n // Animation\n transition: 'all 0.2s ease',\n\n // Apply custom styles\n ...views['label'],\n },\n checkbox: {\n // Base variant styles\n ...VariantStyles[variant],\n\n // State-specific styles\n ...stateStyle,\n\n // Visual properties\n borderRadius: '4px', // Consistent with design system\n\n // Size properties\n ...Sizes[size],\n\n // Animation\n transition: 'all 0.2s ease',\n\n // Apply shadow and custom styles\n ...shadow,\n ...views['checkbox'],\n },\n };\n\n return (\n <Label\n htmlFor={id}\n as=\"div\"\n onClick={handleChange}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n size={Typography.fontSizes[size]}\n {...checkboxStyle.container}\n {...props}\n >\n <Vertical gap={8}>\n {' '}\n {/* 2 × 4px grid */}\n <Horizontal gap={12} alignItems=\"center\">\n {' '}\n {/* 3 × 4px grid */}\n {/* Label on the left side */}\n {labelPosition === 'left' && label && (\n <Text\n size={size}\n fontWeight=\"500\" // Medium weight for better readability\n {...views?.label}\n >\n {label}\n </Text>\n )}\n {/* Checkbox */}\n <Center {...checkboxStyle.checkbox}>\n {isIndeterminate ? (\n <MinusIcon\n widthHeight={IconSizes[size]}\n color=\"white\"\n transition=\"all 0.2s ease\"\n />\n ) : (\n (isChecked || isSelected) &&\n (icon ?? (\n <TickIcon\n widthHeight={IconSizes[size]}\n color=\"white\"\n transition=\"all 0.2s ease\"\n />\n ))\n )}\n </Center>\n {/* Label on the right side */}\n {labelPosition === 'right' && label && (\n <Text\n size={size}\n fontWeight=\"500\" // Medium weight for better readability\n {...views?.label}\n >\n {label}\n </Text>\n )}\n </Horizontal>\n {/* Info text */}\n {infoText && (\n <Text\n marginLeft={labelPosition === 'left' ? 0 : 36} // 9 × 4px grid\n color=\"color.gray.500\"\n size=\"sm\"\n fontWeight=\"400\" // Regular weight\n lineHeight=\"1.5\"\n {...views?.infoText}\n >\n {infoText}\n </Text>\n )}\n </Vertical>\n\n {/* Error message */}\n {error && (\n <Text\n size=\"xs\"\n marginTop={4} // 1 × 4px grid\n marginHorizontal={0}\n color=\"color.red.500\"\n fontWeight=\"500\" // Medium weight for better readability\n transition=\"all 0.2s ease\"\n >\n {error}\n </Text>\n )}\n </Label>\n );\n};\n\nexport default CheckboxView;\n","import React from 'react';\nimport countryList from '../countries.json';\nimport { CountryPickerProps } from './CountryPicker.props';\nimport { Country } from './CountryPicker.type';\n// Defines a custom hook for managing the CountryPicker component's state, including options from a country list, selected value, and UI states for hiding, focus, and hover.\nexport const useCountryPickerState = ({ placeholder }: CountryPickerProps) => {\n const [newOptions, setNewOptions] =\n React.useState<Array<Country>>(countryList);\n const [value, setValue] = React.useState<string>(\n placeholder ?? countryList[0].name\n );\n const [hide, setHide] = React.useState(true);\n const [isFocused, setIsFocused] = React.useState(false);\n const [isHovered, setIsHovered] = React.useState(false);\n return {\n hide,\n setHide,\n newOptions,\n setNewOptions,\n isHovered,\n setIsHovered,\n isFocused,\n setIsFocused,\n value,\n setValue,\n };\n};\n","import { Size } from './CountryPicker.type';\n// Defines the size of icons based on predefined size categories to maintain design consistency.\nexport const IconSizes: Record<Size, number> = {\n xs: 8,\n sm: 10,\n md: 12,\n lg: 14,\n xl: 16,\n};\n// Maps predefined size categories to specific numerical values to standardize label sizes throughout the component.\nexport const LabelSizes: Record<Size, number> = {\n xs: 8,\n sm: 10,\n md: 12,\n lg: 14,\n xl: 16,\n};\n","import React, { useState } from 'react';\nimport { Element, Input, Typography, useTheme } from 'app-studio';\nimport {\n FieldContainer,\n FieldContent,\n FieldIcons,\n FieldLabel,\n FieldWrapper,\n} from '../../../Input';\n\nimport countryList from '../countries.json';\nimport {\n CountryPickerViewProps,\n DropDownItemProps,\n CountryPickerDropDownProps,\n} from './CountryPicker.props';\nimport { IconSizes } from './CountryPicker.style';\nimport { Country } from './CountryPicker.type';\nimport { ChevronIcon } from '../../../Icon/Icon';\nconst CountryList: React.FC<CountryPickerDropDownProps> = ({\n size,\n ...props\n}) => <Element as=\"ul\" {...props} />;\nconst CountrySelector: React.FC<any> = (props) => (\n <Input type=\"country\" {...props} />\n);\nconst CountryItem: React.FC<DropDownItemProps> = ({ size, ...props }) => (\n <Element as=\"li\" {...props} />\n);\nexport const DropDownItem: React.FC<DropDownItemProps> = ({\n option,\n size = 'md',\n callback = () => {},\n views = { text: {} },\n}) => {\n const [isHovered, setIsHovered] = useState(false);\n const handleOptionClick = (event: any) => {\n if (event && event.stopPropagation) event.stopPropagation();\n callback(option);\n };\n const handleHover = () => setIsHovered(!isHovered);\n return (\n <CountryItem\n margin={0}\n role=\"DropDownItem\"\n listStyleType=\"none\"\n fontWeight=\"normal\"\n paddingVertical={6}\n paddingHorizontal={12}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n onClick={handleOptionClick}\n fontSize={Typography.fontSizes[size]}\n backgroundColor={isHovered ? 'trueGray.100' : 'transparent'}\n {...views['text']}\n >\n {option}\n </CountryItem>\n );\n};\nexport const DropDown: React.FC<CountryPickerDropDownProps> = ({\n size,\n views = { dropDown: {} },\n options = [],\n callback = () => {},\n}) => {\n const handleCallback = (option: string) => callback(option);\n return (\n <CountryList\n role=\"dropDown\"\n margin={0}\n padding={0}\n top=\"100%\"\n width=\"100%\"\n display=\"flex\"\n zIndex={1000}\n overflow=\"auto\"\n maxHeight=\"300px\"\n borderRadius={4}\n position=\"absolute\"\n flexDirection=\"column\"\n backgroundColor=\"color.white\"\n boxShadow=\"rgba(0, 0, 0, 0.07) 0px 1px 1px, rgba(0, 0, 0, 0.07) 0px 2px 2px, rgba(0, 0, 0, 0.07) 0px 4px 4px, rgba(0, 0, 0, 0.07) 0px 8px 8px, rgba(0, 0, 0, 0.07) 0px 16px 16px\"\n {...views['dropDown']}\n >\n {options.map((option: Country) => (\n <DropDownItem\n key={option.code}\n size={size}\n option={option.name}\n callback={handleCallback}\n {...views['text']}\n />\n ))}\n </CountryList>\n );\n};\nexport const CountryPickerView: React.FC<CountryPickerViewProps> = ({\n id,\n name,\n label,\n value,\n placeholder,\n helperText,\n hide = false,\n error = false,\n isHovered = false,\n isFocused = false,\n isAutoFocus = false,\n isDisabled = false,\n isReadOnly = false,\n shadow = {},\n newOptions = [],\n size = 'md',\n variant = 'default',\n shape = 'default',\n onChange,\n onBlur = () => {},\n setHide = () => {},\n setNewOptions = () => {},\n setIsHovered = () => {},\n setIsFocused = () => {},\n setValue = () => {},\n views = {\n text: {},\n icon: {},\n label: {},\n dropDown: {},\n helperText: {},\n },\n themeMode: elementMode,\n ...props\n}) => {\n const { getColor, themeMode } = useTheme();\n const IconColor = getColor('color.blueGray.700', {\n themeMode: elementMode ? elementMode : themeMode,\n });\n const handleHover = () => setIsHovered(!isHovered);\n const handleFocus = () => setIsFocused(true);\n const handleCallback = (option: string) => {\n setHide(!hide);\n setValue(option);\n if (onChange) onChange(option);\n };\n const handleClick = () => {\n if (!isDisabled && !isReadOnly) {\n setHide(!hide);\n }\n };\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const valueCountry = event.target.value;\n const filteredCountries = countryList.filter((country) =>\n country.name.toLowerCase().startsWith(valueCountry.toLowerCase())\n );\n if (hide) setHide(false);\n setNewOptions(filteredCountries);\n if (onChange) onChange(valueCountry);\n };\n const handleBlur = (event: any) => {\n onBlur(event);\n setIsFocused(false);\n };\n // Show label if it exists and either the field is focused or has a value\n const showLabel = !!(label && (isFocused || value));\n const fieldStyles = {\n margin: 0,\n paddingVertical: 8,\n paddingHorizontal: 0,\n width: '100%',\n heigth: '100%',\n border: 'none',\n on: { focus: { outline: 'none' } },\n fontSize: Typography.fontSizes[size],\n backgroundColor: 'transparent',\n color: isDisabled ? 'color.trueGray.600' : 'color.blueGray.700',\n cursor: isDisabled ? 'not-allowed' : isReadOnly ? 'auto' : 'pointer',\n ...views['field'],\n };\n return (\n <FieldContainer\n helperText={helperText}\n error={error}\n views={views}\n onClick={handleClick}\n >\n <FieldContent\n label={label}\n size={size}\n error={error}\n shape={shape}\n views={views}\n shadow={shadow}\n variant={variant}\n value={value}\n color={'theme.primary'}\n isHovered={isHovered}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isFocused={isFocused}\n showLabel={showLabel}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n >\n <FieldWrapper>\n {showLabel && (\n <FieldLabel\n htmlFor={id}\n color={'theme.primary'}\n error={error}\n {...views}\n >\n {label}\n </FieldLabel>\n )}\n <CountrySelector\n id={id}\n name={name}\n placeholder={placeholder}\n readOnly={isReadOnly}\n disabled={isDisabled}\n autoFocus={isAutoFocus}\n onBlur={handleBlur}\n onFocus={handleFocus}\n {...fieldStyles}\n {...props}\n value={value}\n onChange={handleChange}\n />\n </FieldWrapper>\n <FieldIcons>\n {hide ? (\n <ChevronIcon\n orientation=\"down\"\n widthHeight={IconSizes[size]}\n color={IconColor}\n style={views['icon']}\n />\n ) : (\n <ChevronIcon\n orientation=\"up\"\n widthHeight={IconSizes[size]}\n color={IconColor}\n style={views['icon']}\n />\n )}\n </FieldIcons>\n </FieldContent>\n {!hide && (\n <DropDown\n size={size}\n views={views}\n options={newOptions}\n callback={handleCallback}\n />\n )}\n </FieldContainer>\n );\n};\n","import React from 'react';\nimport format from 'date-fns/format';\n\nexport const useDatePickerState = () => {\n const [isHovered, setIsHovered] = React.useState(false);\n const [isFocused, setIsFocused] = React.useState(false);\n const [date, setDate] = React.useState(format(new Date(), 'yyyy-MM-dd'));\n\n return {\n date,\n setDate,\n isHovered,\n setIsHovered,\n isFocused,\n setIsFocused,\n };\n};\n","import React from 'react';\nimport { Input, Typography } from 'app-studio';\nimport { FieldContainer } from '../../../Input/FieldContainer/FieldContainer';\nimport { FieldContent } from '../../../Input/FieldContent/FieldContent';\nimport { FieldLabel } from '../../../Input/FieldLabel/FieldLabel';\nimport { FieldWrapper } from '../../../Input/FieldWrapper/FieldWrapper';\n\nimport { DatePickerViewProps } from './DatePicker.props';\n\nconst DatePickerContent = (props: any) => <Input type=\"date\" {...props} />;\n\nconst DatePickerView: React.FC<DatePickerViewProps> = ({\n id,\n icon,\n name,\n label,\n date,\n children,\n helperText,\n shadow = {},\n size = 'md',\n variant = 'default',\n shape = 'default',\n views = { container: {}, label: {}, helperText: {}, text: {}, field: {} },\n error = false,\n isHovered = false,\n isFocused = false,\n isDisabled = false,\n isReadOnly = false,\n setDate = () => {},\n setIsFocused = () => {},\n setIsHovered = () => {},\n onChange,\n onChangeText,\n ...props\n}) => {\n const showLabel = !!(isFocused && label);\n\n const handleHover = () => setIsHovered(!isHovered);\n const handleFocus = () => setIsFocused(true);\n\n const handleDateChange = (event: any) => {\n if (typeof event === 'string') {\n setDate(event);\n if (onChangeText) onChangeText(event);\n } else {\n setDate(event.target.value);\n if (onChange) onChange(event.target.value);\n }\n };\n\n const fieldStyles = {\n margin: 0,\n paddingVertical: 8,\n paddingHorizontal: 0,\n width: '100%',\n heigth: '100%',\n border: 'none',\n on: {\n focus: {\n outline: 'none',\n backgroundColor: 'transparent',\n },\n },\n fontSize: Typography.fontSizes[size],\n backgroundColor: 'transparent',\n color: isDisabled ? 'color.trueGray.600' : 'color.blueGray.700',\n cursor: isDisabled ? 'not-allowed' : isReadOnly ? 'auto' : 'pointer',\n ...views['field'],\n };\n\n return (\n <FieldContainer helperText={helperText} error={error} views={views}>\n <FieldContent\n label={label}\n size={size}\n error={error}\n shape={shape}\n views={views}\n shadow={shadow}\n color={'theme.primary'}\n variant={variant}\n value={date}\n isHovered={isHovered}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isFocused={isFocused}\n showLabel={showLabel}\n onMouseEnter={handleHover}\n onMouseLeave={handleHover}\n >\n <FieldWrapper>\n {showLabel && (\n <FieldLabel\n htmlFor={id}\n color={'theme.primary'}\n error={error}\n {...views}\n >\n {label}\n </FieldLabel>\n )}\n <DatePickerContent\n id={id}\n name={name}\n onFocus={handleFocus}\n disabled={isDisabled}\n readOnly={isReadOnly}\n {...fieldStyles}\n {...props}\n {...(onChangeText && { onChangeText: handleDateChange })}\n onChange={handleDateChange}\n />\n </FieldWrapper>\n </FieldContent>\n </FieldContainer>\n );\n};\n\nexport default DatePickerView;\n","import { useState } from 'react';\nimport { PasswordProps } from './Password.props';\nimport { useTextFieldState } from '../../TextField/TextField/TextField.state';\n\nexport const usePasswordState = (props: PasswordProps) => {\n const textFieldStates = useTextFieldState(props);\n const [isVisible, setIsVisible] = useState(false);\n\n return { isVisible, setIsVisible, ...props, ...textFieldStates };\n};\n","import { useState } from 'react';\nimport { ComboBoxItem, ComboBoxStateActions } from './ComboBox.props';\n// Defines the useComboBoxState hook with parameters for the list of items and optional placeholder texts.\nexport const useComboBoxState = (\n items: ComboBoxItem[],\n placeholder?: string,\n searchPlaceholder?: string\n): ComboBoxStateActions => {\n // State hook for filtered items with initial state set to the items passed to the hook.\n const [filteredItems, setFilteredItems] = useState<ComboBoxItem[]>(items);\n // State hook to track the selected item with an initial state based on the placeholder or the first item.\n const [selectedItem, setSelectedItem] = useState<ComboBoxItem>(\n placeholder ? { value: placeholder, label: placeholder } : items[0]\n );\n // State hook for highlighted index in the dropdown list, initialized to 0.\n const [highlightedIndex, setHighlightedIndex] = useState<number>(0);\n // State hook for search query with an initial state based on the searchPlaceholder or empty string.\n const [searchQuery, setSearchQuery] = useState<string>(\n searchPlaceholder ?? ''\n );\n // State hook to manage dropdown visibility, starts as false (hidden).\n const [isDropdownVisible, setIsDropdownVisible] = useState(false);\n // Start of object returned by the useComboBoxState hook containing all state and state updater functions.\n return {\n filteredItems,\n setFilteredItems,\n selectedItem,\n setSelectedItem,\n highlightedIndex,\n setHighlightedIndex,\n searchQuery,\n setSearchQuery,\n isDropdownVisible,\n setIsDropdownVisible,\n // End of the return statement of the useComboBoxState hook, encapsulating all the state and setState actions for ComboBox.\n };\n};\n","import React, { useEffect } from 'react';\nimport { View, Horizontal } from 'app-studio';\nimport { ComboBoxItem, ComboBoxViewProps } from './ComboBox.props';\nimport { Text } from '../../../Text/Text';\nimport TextField from '../../../Form/TextField/TextField/TextField.view';\nimport { SearchIcon, TickIcon } from '../../../Icon/Icon';\n\n// Defines the functional component 'ComboBoxView' with destructured props.\nconst ComboBoxView: React.FC<ComboBoxViewProps> = ({\n placeholder,\n items,\n showTick = true,\n onSelect,\n searchEnabled = true,\n left,\n right,\n label,\n filteredItems,\n setSelectedItem,\n selectedItem,\n highlightedIndex,\n setHighlightedIndex,\n searchQuery,\n setSearchQuery,\n setFilteredItems,\n views,\n isDropdownVisible,\n setIsDropdownVisible,\n // Collects all further props not destructured explicitly.\n ...props\n}) => {\n // Sets up an effect to handle clicking outside the dropdown to close it.\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const path = event.composedPath();\n const isOutside = !path.some(\n (element: any) => element?.id === 'combobox-dropdown'\n );\n if (isOutside) {\n setIsDropdownVisible(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n // Defines 'handleSearch' to filter items based on the user's query.\n const handleSearch = (query: string) => {\n setSearchQuery(query);\n if (query === '') {\n setFilteredItems(items);\n } else {\n const filtered = items.filter((item) =>\n item.label.toLowerCase().includes(query.toLowerCase())\n );\n setFilteredItems(filtered);\n }\n setHighlightedIndex(0);\n };\n // Defines 'handleSelect' to handle item selection and close the dropdown.\n const handleSelect = (item: ComboBoxItem) => {\n setSelectedItem(item);\n onSelect?.(item);\n setIsDropdownVisible(false);\n };\n // Starts the JSX returned by the component representing the combobox.\n return (\n <Horizontal\n role=\"combobox\"\n flexWrap=\"nowrap\"\n gap={15}\n alignItems=\"center\"\n width=\"100%\"\n {...props}\n >\n {label && (\n <Text views={views?.label} htmlFor={props.id}>\n {label}\n </Text>\n )}\n <View position=\"relative\">\n <Horizontal\n cursor=\"pointer\"\n backgroundColor=\"color.white\"\n boxShadow=\"rgba(0, 0, 0, 0.16) 0px 1px 4px\"\n padding=\"12px\"\n display=\"flex\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n justifyContent=\"space-between\"\n minWidth={300}\n flexWrap=\"nowrap\"\n {...views?.container}\n >\n <Horizontal\n gap={15}\n alignItems=\"center\"\n position=\"relative\"\n width=\"100%\"\n onClick={() => setIsDropdownVisible(!isDropdownVisible)}\n {...views?.labelContainer}\n >\n {left}\n <Text\n weight=\"medium\"\n flexGrow={1}\n color=\"color.gray.800\"\n {...views?.label}\n >\n {selectedItem.label}\n </Text>\n </Horizontal>\n {right}\n {isDropdownVisible && (\n <View\n id=\"combobox-dropdown\"\n position=\"absolute\"\n backgroundColor=\"color.white\"\n boxShadow=\"rgba(0, 0 ,0 ,0.16) 0px 1px 4px\"\n width=\"100%\"\n overflowY=\"auto\"\n zIndex={10000}\n bottom={-8}\n left={0}\n transform=\"translateY(100%)\"\n marginTop=\"4px\"\n borderRadius=\"4px\"\n {...views?.dropdown}\n >\n {searchEnabled && (\n <TextField\n id={props.id}\n name={props.name}\n width=\"100%\"\n type=\"search\"\n value={searchQuery}\n onChange={(value) => handleSearch(value)}\n hint={placeholder}\n isClearable={false}\n left={<SearchIcon widthHeight={12} />}\n views={{\n container: {\n width: '100%',\n padding: '6px 12px',\n borderBottom:\n filteredItems.length > 0\n ? '1px solid #ccc'\n : '1px solid transparent',\n ...views?.text,\n },\n }}\n />\n )}\n {filteredItems.length > 0 && (\n <View margin={0} padding={4}>\n {filteredItems.map((item, index) => (\n <Horizontal\n justifyContent=\"space-between\"\n key={item.value}\n padding=\"12px\"\n cursor=\"pointer\"\n borderRadius={4}\n backgroundColor={\n index === highlightedIndex\n ? 'color.gray.100'\n : 'transparent'\n }\n onMouseEnter={() => setHighlightedIndex(index)}\n onClick={() => handleSelect(item)}\n {...views?.item}\n >\n <Text>{item.label}</Text>\n <>\n {item.icon && item.icon}\n {item.value === selectedItem.value &&\n showTick &&\n !item.icon && <TickIcon widthHeight={20} />}\n </>\n </Horizontal>\n ))}\n </View>\n )}\n </View>\n )}\n </Horizontal>\n </View>\n </Horizontal>\n );\n};\nexport default ComboBoxView;\n","import {\n useState,\n useRef,\n useEffect,\n useCallback,\n ClipboardEvent,\n KeyboardEvent,\n ChangeEvent,\n} from 'react';\nimport { OTPInputProps } from './OTPInput.props';\nimport { syncTimeouts } from './sync-timeouts';\n\nexport const useOTPInputState = ({\n value: controlledValue,\n defaultValue = '',\n length = 6,\n onChange,\n onChangeText,\n onComplete,\n onKeyDown,\n onKeyPress,\n onBlur,\n onFocus,\n isReadOnly,\n isDisabled,\n pattern,\n stepValues,\n pasteTransformer,\n}: OTPInputProps) => {\n // Determine if component is controlled\n const isControlled = controlledValue !== undefined;\n const initialValue = isControlled ? controlledValue : defaultValue;\n\n // State for the OTP value\n const [value, setInternalValue] = useState<string>(\n initialValue?.slice(0, length) || ''\n );\n\n // State for focus and hover\n const [isFocused, setIsFocused] = useState<boolean>(false);\n const [isHovered, setIsHovered] = useState<boolean>(false);\n\n // State for selection tracking\n const [mirrorSelectionStart, setMirrorSelectionStart] = useState<\n number | null\n >(null);\n const [mirrorSelectionEnd, setMirrorSelectionEnd] = useState<number | null>(\n null\n );\n\n // Refs\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const initialLoadRef = useRef({\n value,\n onChange: onChange || (() => {}),\n isIOS:\n typeof window !== 'undefined' &&\n window?.CSS?.supports?.('-webkit-touch-callout', 'none'),\n });\n const inputMetadataRef = useRef<{\n prev: [number | null, number | null, 'none' | 'forward' | 'backward'];\n }>({\n prev: [null, null, 'none' as 'none' | 'forward' | 'backward'],\n });\n\n // Create regexp for validation\n const regexp = pattern\n ? typeof pattern === 'string'\n ? new RegExp(pattern)\n : pattern\n : null;\n\n // Sync with controlled value\n useEffect(() => {\n if (isControlled && controlledValue !== value) {\n setInternalValue(controlledValue?.slice(0, length) || '');\n }\n }, [isControlled, controlledValue, length, value]);\n\n // Handle value changes with completion check\n const setValue = useCallback(\n (newValue: string) => {\n // If step values are provided, find the closest step\n let valueToSet = newValue;\n\n if (stepValues && stepValues.length > 0 && newValue) {\n // Convert to number for comparison\n const numValue = parseInt(newValue, 10);\n if (!isNaN(numValue)) {\n // Find the closest step value\n let closest = stepValues[0];\n let minDiff = Math.abs(numValue - closest);\n\n for (let i = 1; i < stepValues.length; i++) {\n const diff = Math.abs(numValue - stepValues[i]);\n if (diff < minDiff) {\n minDiff = diff;\n closest = stepValues[i];\n }\n }\n\n // Convert back to string\n valueToSet = closest.toString();\n }\n }\n\n // Always update internal state for both controlled and uncontrolled components\n setInternalValue(valueToSet);\n\n // Call onChange if provided\n if (onChange) {\n onChange(valueToSet);\n }\n\n // Call onChangeText if provided\n if (onChangeText) {\n onChangeText(valueToSet);\n }\n\n // Check if the OTP is complete and call onComplete if provided\n if (onComplete && valueToSet.length === length) {\n onComplete(valueToSet);\n }\n },\n [onChange, onChangeText, onComplete, length, stepValues]\n );\n\n // Set up input ref\n const setInputRef = useCallback((ref: HTMLInputElement | null) => {\n // We can't directly assign to inputRef.current, so we use this workaround\n if (ref && inputRef.current !== ref) {\n // Store the reference without directly assigning\n Object.defineProperty(inputRef, 'current', {\n value: ref,\n writable: true,\n });\n }\n }, []);\n\n // Event handlers\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const newValue = e.currentTarget.value.slice(0, length);\n if (newValue.length > 0 && regexp && !regexp.test(newValue)) {\n e.preventDefault();\n return;\n }\n\n // Always update the value\n setValue(newValue);\n\n // Update the input field value directly to ensure it's always in sync\n if (inputRef.current) {\n inputRef.current.value = newValue;\n }\n },\n [length, regexp, setValue, inputRef]\n );\n\n const handleFocus = useCallback(() => {\n if (inputRef.current) {\n const start = Math.min(inputRef.current.value.length, length - 1);\n const end = inputRef.current.value.length;\n inputRef.current?.setSelectionRange(start, end);\n setMirrorSelectionStart(start);\n setMirrorSelectionEnd(end);\n }\n setIsFocused(true);\n }, [length]);\n\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n }, []);\n\n const handleKeyDown = useCallback((_: KeyboardEvent<HTMLInputElement>) => {\n // Handle special keys like backspace, arrows, etc.\n // This is handled by the browser for the single input\n if (onKeyDown) {\n onKeyDown(_);\n }\n }, []);\n\n const handleKeyPress = useCallback((e: KeyboardEvent<HTMLInputElement>) => {\n // Handle key press events\n // This is handled by the browser for the single input\n if (onKeyPress) {\n onKeyPress(e);\n }\n }, []);\n\n const handlePaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n const input = inputRef.current;\n if (!e.clipboardData || !input) {\n return;\n }\n\n const _content = e.clipboardData.getData('text/plain');\n const content = pasteTransformer ? pasteTransformer(_content) : _content;\n e.preventDefault();\n\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n const isReplacing = start !== end;\n\n const newValueUncapped = isReplacing\n ? value.slice(0, start) + content + value.slice(end) // Replacing\n : value.slice(0, start) + content + value.slice(start); // Inserting\n const newValue = newValueUncapped.slice(0, length);\n\n if (newValue.length > 0 && regexp && !regexp.test(newValue)) {\n return;\n }\n\n // Always update both the input value and the state\n input.value = newValue;\n setValue(newValue);\n\n // Also update the internal state directly to ensure consistency\n setInternalValue(newValue);\n\n const _start = Math.min(newValue.length, length - 1);\n const _end = newValue.length;\n\n input.setSelectionRange(_start, _end);\n setMirrorSelectionStart(_start);\n setMirrorSelectionEnd(_end);\n },\n [length, pasteTransformer, regexp, setValue, value, setInternalValue]\n );\n\n // Effects for selection tracking and other behaviors\n useEffect(() => {\n const input = inputRef.current;\n const container = containerRef.current;\n\n if (!input || !container) {\n return;\n }\n\n // Sync input value\n if (\n initialLoadRef.current.value !== input.value &&\n initialLoadRef.current.onChange\n ) {\n initialLoadRef.current.onChange(input.value);\n }\n\n // Previous selection\n inputMetadataRef.current.prev = [\n input.selectionStart,\n input.selectionEnd,\n input.selectionDirection as 'none' | 'forward' | 'backward',\n ];\n\n function onDocumentSelectionChange() {\n if (document.activeElement !== input) {\n setMirrorSelectionStart(null);\n setMirrorSelectionEnd(null);\n return;\n }\n\n // Aliases\n const _s = input?.selectionStart ?? null;\n const _e = input?.selectionEnd ?? null;\n const _dir = input?.selectionDirection ?? null;\n const _ml = input?.maxLength ?? 0;\n const _val = input?.value ?? '';\n const _prev = inputMetadataRef.current.prev;\n\n // Algorithm\n let start = -1;\n let end = -1;\n let direction: 'forward' | 'backward' | 'none' = 'none';\n if (_val.length !== 0 && _s !== null && _e !== null) {\n const isSingleCaret = _s === _e;\n const isInsertMode = _s === _val.length && _val.length < _ml;\n\n if (isSingleCaret && !isInsertMode) {\n const c = _s;\n if (c === 0) {\n start = 0;\n end = 1;\n direction = 'forward';\n } else if (c === _ml) {\n start = c - 1;\n end = c;\n direction = 'backward';\n } else if (_ml > 1 && _val.length > 1) {\n let offset = 0;\n if (_prev[0] !== null && _prev[1] !== null) {\n direction = c < _prev[1] ? 'backward' : 'forward';\n const wasPreviouslyInserting =\n _prev[0] === _prev[1] && _prev[0] < _ml;\n if (direction === 'backward' && !wasPreviouslyInserting) {\n offset = -1;\n }\n }\n\n start = offset + c;\n end = offset + c + 1;\n }\n }\n\n if (start !== -1 && end !== -1 && start !== end && inputRef.current) {\n inputRef.current.setSelectionRange(start, end, direction);\n }\n }\n\n // Finally, update the state\n const s = start !== -1 ? start : _s;\n const e = end !== -1 ? end : _e;\n const dir = direction !== 'none' ? direction : _dir;\n setMirrorSelectionStart(s);\n setMirrorSelectionEnd(e);\n // Store the previous selection value\n inputMetadataRef.current.prev = [\n s,\n e,\n dir as 'none' | 'forward' | 'backward',\n ];\n }\n\n document.addEventListener('selectionchange', onDocumentSelectionChange, {\n capture: true,\n });\n\n // Set initial mirror state\n onDocumentSelectionChange();\n document.activeElement === input && setIsFocused(true);\n\n // Track root height\n const updateRootHeight = () => {\n if (container) {\n container.style.setProperty('--root-height', `${input.clientHeight}px`);\n }\n };\n updateRootHeight();\n const resizeObserver = new (window as any).ResizeObserver(updateRootHeight);\n resizeObserver.observe(input);\n\n return () => {\n document.removeEventListener(\n 'selectionchange',\n onDocumentSelectionChange,\n { capture: true }\n );\n resizeObserver.disconnect();\n };\n }, []);\n\n // Effects for updating selection state\n useEffect(() => {\n syncTimeouts(() => {\n // Forcefully remove :autofill state\n inputRef.current?.dispatchEvent(new Event('input'));\n\n // Update the selection state\n const s = inputRef.current?.selectionStart;\n const e = inputRef.current?.selectionEnd;\n const dir = inputRef.current?.selectionDirection;\n if (s !== null && e !== null && s !== undefined && e !== undefined) {\n setMirrorSelectionStart(s);\n setMirrorSelectionEnd(e);\n inputMetadataRef.current.prev = [\n s,\n e,\n (dir as 'none' | 'forward' | 'backward') || 'none',\n ];\n }\n });\n }, [value, isFocused]);\n\n return {\n value,\n setValue,\n isFocused,\n setIsFocused,\n isHovered,\n setIsHovered,\n inputRef,\n containerRef,\n mirrorSelectionStart,\n mirrorSelectionEnd,\n setMirrorSelectionStart,\n setMirrorSelectionEnd,\n setInputRef,\n handleChange,\n handleFocus,\n handleBlur,\n handleKeyDown,\n handleKeyPress,\n handlePaste,\n };\n};\n","export function syncTimeouts(cb: (...args: any[]) => unknown): any[] {\n const t1 = setTimeout(cb, 0); // For faster machines\n const t2 = setTimeout(cb, 10);\n const t3 = setTimeout(cb, 50);\n return [t1, t2, t3];\n}\n","import React, { useEffect, createContext } from 'react';\nimport { Input, useTheme } from 'app-studio';\nimport { FieldContainer } from '../../Input/FieldContainer/FieldContainer';\nimport { FieldContent } from '../../Input/FieldContent/FieldContent';\nimport { FieldLabel } from '../../Input/FieldLabel/FieldLabel';\nimport { Horizontal } from 'app-studio';\nimport { View } from 'app-studio';\nimport { OTPInputViewProps } from './OTPInput.props';\n\n// Create a context for OTP input slots\nexport const OTPInputContext = createContext<{\n slots: Array<{\n char: string | null;\n placeholderChar: string | null;\n isActive: boolean;\n hasFakeCaret: boolean;\n }>;\n isFocused: boolean;\n isHovering: boolean;\n}>({ slots: [], isFocused: false, isHovering: false });\n\n// CSS for noscript fallback\nconst NOSCRIPT_CSS_FALLBACK = `\n@keyframes blink {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0; }\n}\n\n[data-input-otp] {\n --nojs-bg: white !important;\n --nojs-fg: black !important;\n\n background-color: var(--nojs-bg) !important;\n color: var(--nojs-fg) !important;\n caret-color: var(--nojs-fg) !important;\n letter-spacing: .25em !important;\n text-align: center !important;\n border: 1px solid var(--nojs-fg) !important;\n border-radius: 4px !important;\n width: 100% !important;\n}\n`;\n\n// Helper function to safely insert CSS rules\nfunction safeInsertRule(sheet: CSSStyleSheet, rule: string) {\n try {\n sheet.insertRule(rule);\n } catch {\n console.error('input-otp could not insert CSS rule:', rule);\n }\n}\n\nconst OTPInputView: React.FC<\n OTPInputViewProps & {\n setInputRef: (ref: HTMLInputElement | null) => void;\n inputRef: React.RefObject<HTMLInputElement>;\n containerRef: React.RefObject<HTMLDivElement>;\n mirrorSelectionStart: number | null;\n mirrorSelectionEnd: number | null;\n setMirrorSelectionStart: (value: number | null) => void;\n setMirrorSelectionEnd: (value: number | null) => void;\n handlePaste: (e: React.ClipboardEvent<HTMLInputElement>) => void;\n handleChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n handleFocus: () => void;\n handleBlur: () => void;\n handleKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n stepValues?: number[];\n handleKeyPress: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n }\n> = ({\n id,\n name,\n label,\n value = '',\n length = 6,\n onChange,\n onChangeText,\n onComplete,\n helperText,\n placeholder = '',\n shadow,\n views = {},\n size = 'md',\n shape = 'rounded',\n variant = 'outline',\n gap = 8,\n type = 'text',\n error = false,\n isFocused = false,\n isHovered = false,\n isDisabled = false,\n isReadOnly = false,\n isAutoFocus = false,\n setValue,\n setIsFocused,\n setIsHovered,\n inputRef,\n containerRef,\n mirrorSelectionStart,\n mirrorSelectionEnd,\n setMirrorSelectionStart,\n setMirrorSelectionEnd,\n handlePaste,\n handleChange,\n handleFocus,\n handleBlur,\n handleKeyDown,\n handleKeyPress,\n secureTextEntry,\n isFirstColumn,\n stepValues,\n setInputRef,\n onBlur = () => {},\n onClick = () => {},\n onFocus = () => {},\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ...props\n}) => {\n useTheme(); // Initialize theme context\n const showLabel = !!label;\n\n // Create context value for slots\n const contextValue = React.useMemo(() => {\n return {\n slots: Array.from({ length }).map((_, slotIdx) => {\n const isActive =\n isFocused &&\n mirrorSelectionStart !== null &&\n mirrorSelectionEnd !== null &&\n ((mirrorSelectionStart === mirrorSelectionEnd &&\n slotIdx === mirrorSelectionStart) ||\n (slotIdx >= mirrorSelectionStart && slotIdx < mirrorSelectionEnd));\n\n const char = value[slotIdx] !== undefined ? value[slotIdx] : null;\n const placeholderChar =\n value[0] !== undefined ? null : placeholder?.[slotIdx] ?? null;\n\n return {\n char,\n placeholderChar,\n isActive,\n hasFakeCaret: isActive && char === null,\n };\n }),\n isFocused,\n isHovering: !isDisabled && isHovered,\n };\n }, [\n isFocused,\n isHovered,\n isDisabled,\n length,\n mirrorSelectionEnd,\n mirrorSelectionStart,\n placeholder,\n value,\n ]);\n\n // Auto-focus the input on mount\n useEffect(() => {\n if (isAutoFocus && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isAutoFocus, inputRef]);\n\n // Add CSS styles for OTP input\n useEffect(() => {\n if (!document.getElementById('input-otp-style')) {\n const styleEl = document.createElement('style');\n styleEl.id = 'input-otp-style';\n document.head.appendChild(styleEl);\n\n if (styleEl.sheet) {\n const autofillStyles =\n 'background: transparent !important; color: transparent !important; border-color: transparent !important; opacity: 0 !important; box-shadow: none !important; -webkit-box-shadow: none !important; -webkit-text-fill-color: transparent !important;';\n\n // Add blink animation\n safeInsertRule(\n styleEl.sheet,\n `@keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } }`\n );\n\n safeInsertRule(\n styleEl.sheet,\n '[data-input-otp]::selection { background: transparent !important; color: transparent !important; }'\n );\n safeInsertRule(\n styleEl.sheet,\n `[data-input-otp]:autofill { ${autofillStyles} }`\n );\n safeInsertRule(\n styleEl.sheet,\n `[data-input-otp]:-webkit-autofill { ${autofillStyles} }`\n );\n // iOS\n safeInsertRule(\n styleEl.sheet,\n `@supports (-webkit-touch-callout: none) { [data-input-otp] { letter-spacing: -.6em !important; font-weight: 100 !important; font-stretch: ultra-condensed; font-optical-sizing: none !important; left: -1px !important; right: 1px !important; } }`\n );\n // PWM badges\n safeInsertRule(\n styleEl.sheet,\n `[data-input-otp] + * { pointer-events: all !important; }`\n );\n }\n }\n }, []);\n\n // Render the OTP input slots\n const renderSlots = () => {\n return (\n <Horizontal\n gap={gap}\n width=\"100%\"\n justifyContent=\"center\"\n minHeight={\n size === 'xs'\n ? '32px'\n : size === 'sm'\n ? '36px'\n : size === 'md'\n ? '40px'\n : size === 'lg'\n ? '48px'\n : '56px'\n }\n {...views.container}\n >\n {contextValue.slots.map((slot, index) => (\n <FieldContent\n key={`${id || name}-${index}`}\n size={size}\n error={error}\n shape={shape}\n views={views}\n variant={variant}\n value={slot.char || ''}\n color={'theme.primary'}\n isHovered={isHovered}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isFocused={slot.isActive}\n showLabel={false}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n justifyContent=\"center\"\n alignItems=\"center\"\n width=\"100%\"\n position=\"relative\"\n height={\n size === 'xs'\n ? '32px'\n : size === 'sm'\n ? '36px'\n : size === 'md'\n ? '40px'\n : size === 'lg'\n ? '48px'\n : '56px'\n }\n {...views.container}\n >\n {slot.char ? (\n <View\n textAlign=\"center\"\n fontSize={\n size === 'xs'\n ? '14px'\n : size === 'sm'\n ? '16px'\n : size === 'md'\n ? '18px'\n : size === 'lg'\n ? '20px'\n : '24px'\n }\n fontWeight=\"medium\"\n {...views.text}\n >\n {type === 'password' ? '•' : slot.char}\n </View>\n ) : slot.placeholderChar ? (\n <View\n textAlign=\"center\"\n fontSize={\n size === 'xs'\n ? '14px'\n : size === 'sm'\n ? '16px'\n : size === 'md'\n ? '18px'\n : size === 'lg'\n ? '20px'\n : '24px'\n }\n color=\"color.gray.400\"\n opacity={0.5}\n {...views.text}\n >\n {slot.placeholderChar}\n </View>\n ) : null}\n {slot.hasFakeCaret && (\n <View\n position=\"absolute\"\n width=\"2px\"\n height=\"60%\"\n backgroundColor=\"theme.primary\"\n animation=\"blink 1s step-start infinite\"\n style={{\n animationName: 'blink',\n animationDuration: '1s',\n animationIterationCount: 'infinite',\n animationTimingFunction: 'step-start',\n }}\n />\n )}\n </FieldContent>\n ))}\n </Horizontal>\n );\n };\n\n // Input style for the hidden input\n const inputStyle: React.CSSProperties = {\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n textAlign: 'center',\n opacity: '1',\n color: 'transparent',\n pointerEvents: 'all',\n background: 'transparent',\n caretColor: 'transparent',\n border: '0 solid transparent',\n outline: '0 solid transparent',\n boxShadow: 'none',\n lineHeight: '1',\n letterSpacing: '-.5em',\n fontSize: 'var(--root-height)',\n fontFamily: 'monospace',\n fontVariantNumeric: 'tabular-nums',\n };\n\n return (\n <>\n <noscript>\n <style>{NOSCRIPT_CSS_FALLBACK}</style>\n </noscript>\n\n <FieldContainer\n helperText={helperText}\n error={error}\n views={views}\n {...props}\n >\n {showLabel && (\n <FieldLabel\n htmlFor={id}\n color={'theme.primary'}\n error={error}\n {...views.label}\n >\n {label}\n </FieldLabel>\n )}\n\n <View\n ref={containerRef}\n data-input-otp-container\n position=\"relative\"\n cursor={isDisabled ? 'default' : 'text'}\n userSelect=\"none\"\n pointerEvents=\"none\"\n >\n <OTPInputContext.Provider value={contextValue}>\n {renderSlots()}\n </OTPInputContext.Provider>\n\n <View position=\"absolute\" inset={0} pointerEvents=\"none\">\n <Input\n ref={(ref) => setInputRef(ref as any)}\n data-input-otp\n data-input-otp-placeholder-shown={value.length === 0 || undefined}\n data-input-otp-mss={mirrorSelectionStart}\n data-input-otp-mse={mirrorSelectionEnd}\n id={id || name}\n name={name}\n type={type === 'password' ? 'password' : 'text'}\n inputMode={type !== 'password' ? 'numeric' : undefined}\n pattern=\"[0-9]*\"\n maxLength={length}\n readOnly={isReadOnly}\n disabled={isDisabled}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onClick={onClick}\n onMouseOver={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n autoComplete=\"one-time-code\"\n aria-label={`OTP input with ${length} digits`}\n style={inputStyle}\n {...views.input}\n />\n </View>\n </View>\n </FieldContainer>\n </>\n );\n};\n\nexport default OTPInputView;\n","import React, { createContext, useContext, useRef, useEffect } from 'react';\nimport { FormikConfig, useFormikContext } from 'formik';\nimport { Form as $Form } from 'app-studio';\n\nexport const debounce: (...args: any) => void = (\n func: (...args: any) => void,\n timeout = 300\n) => {\n let timer: any;\n return (...args: any) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n func(...args);\n }, timeout);\n };\n};\n\ninterface CustomFormProps<T> extends FormikConfig<T> {\n autoFocus?: boolean;\n initFocus?: string;\n}\n\ninterface FocusContextType {\n active: boolean;\n focusNextInput: (name: string) => void;\n setInputRef: (name: string, ref: HTMLInputElement | null) => void;\n handleSubmitEditing: (name: string) => void;\n getReturnKeyType: (name: string) => 'next' | 'done';\n}\n\ninterface CustomFormProps<T> extends FormikConfig<T> {\n autoFocus?: boolean;\n initFocus?: string;\n}\n\ninterface FocusContextType {\n active: boolean;\n focusNextInput: (name: string) => void;\n setInputRef: (name: string, ref: HTMLInputElement | null) => void;\n}\n\nconst FocusContext = createContext<FocusContextType>({\n active: false,\n focusNextInput: () => {},\n setInputRef: () => {},\n handleSubmitEditing: () => {},\n getReturnKeyType: () => 'next',\n});\n\nexport const useFormFocus = () => useContext(FocusContext);\n\nexport const FormikForm = <T extends {}>({\n children,\n autoFocus = false,\n initFocus,\n onChange = () => {},\n ...props\n}: CustomFormProps<T> & any) => {\n const formik: any = useFormikContext();\n useEffect(() => {\n onChange(formik.values);\n }, [formik.values]);\n\n const inputRefs = useRef<Record<string, HTMLInputElement | null>>({});\n const inputNames = useRef<string[]>([]);\n\n const setInputRef = (name: string, ref: HTMLInputElement | null) => {\n inputRefs.current[name] = ref;\n if (!inputNames.current.includes(name)) {\n inputNames.current.push(name);\n }\n };\n\n const focusNextInput = (currentName: string) => {\n if (autoFocus) {\n const currentIndex = inputNames.current.indexOf(currentName);\n const nextIndex = currentIndex + 1;\n if (nextIndex < inputNames.current.length) {\n inputRefs.current[inputNames.current[nextIndex]]?.focus();\n } else if (formik.onSubmit) {\n formik.onSubmit(formik.values);\n }\n }\n };\n\n const contextValue = {\n active: autoFocus,\n focusNextInput,\n setInputRef,\n handleSubmitEditing: focusNextInput,\n getReturnKeyType: (name: string) =>\n inputNames.current.indexOf(name) === inputNames.current.length - 1\n ? 'done'\n : 'next',\n };\n\n useEffect(() => {\n if (autoFocus) {\n if (initFocus && inputRefs.current[initFocus]) {\n inputRefs.current[initFocus]?.focus();\n } else if (inputNames.current[0]) {\n inputRefs.current[inputNames.current[0]]?.focus();\n }\n }\n }, [autoFocus, initFocus]);\n\n return (\n <FocusContext.Provider value={contextValue}>\n <$Form {...props}>{children}</$Form>\n </FocusContext.Provider>\n );\n};\n","import React from 'react';\nimport { useFormikContext, FormikValues, getIn } from 'formik';\n\nimport { useFormFocus } from './Formik.Form';\n\nconst getInputTypeProps = (type: string) => {\n switch (type) {\n case 'email':\n return {\n autoCorrect: 'off',\n // keyboardType: 'email-address',\n inputMode: 'email',\n autoCapitalize: 'none',\n };\n case 'password':\n return {\n autoCorrect: 'off',\n secureTextEntry: true,\n autoCapitalize: 'none',\n };\n case 'digits':\n return {\n // keyboardType: 'phone-pad',\n inputMode: 'tel',\n };\n case 'numeric':\n return {\n // keyboardType: 'phone-pad',\n inputMode: 'numeric',\n };\n case 'name':\n return {\n autoCorrect: 'off',\n };\n default:\n return {};\n }\n};\nexport const useFormikInput = ({ name, type, ...props }: any) => {\n const focus = useFormFocus();\n const {\n touched,\n errors,\n submitCount,\n values,\n setFieldTouched,\n setFieldValue,\n } = useFormikContext<FormikValues>();\n\n const onChangeText = (text: string) => {\n setFieldValue(name, text);\n props.onChangeText?.(text);\n };\n\n const onChange = (value: any) => {\n setFieldValue(name, value);\n props.onChange?.(value);\n };\n\n const handleBlur = () => {\n setFieldTouched(name, true);\n };\n\n const handleKeyPress = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n focus.focusNextInput(name);\n }\n };\n\n const isText = ['text', 'password', 'email', 'digits'].includes(type);\n const error =\n getIn(touched, name) || submitCount > 0 ? getIn(errors, name) : undefined;\n const value = getIn(values, name);\n\n return {\n ...getInputTypeProps(type),\n ...props,\n value,\n error,\n onBlur: handleBlur,\n onKeyPress: handleKeyPress,\n ...(isText ? { onChangeText } : { onChange }),\n ...(focus.active ? { handleKeyPress } : {}),\n };\n};\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { SliderProps } from './Slider.props';\n\n// Clamp value between min and max\nconst clamp = (value: number, min: number, max: number) =>\n Math.min(Math.max(value, min), max);\n\n// Calculate value based on position, track dimensions, min, max, step\nconst calculateValue = (\n position: number,\n trackRect: DOMRect,\n min: number,\n max: number,\n step: number,\n orientation: 'horizontal' | 'vertical',\n stepValues?: number[]\n): number => {\n const range = max - min;\n let percentage: number;\n\n if (orientation === 'horizontal') {\n const trackLength = trackRect.width;\n const relativePosition = position - trackRect.left;\n percentage = clamp(relativePosition / trackLength, 0, 1);\n } else {\n // Vertical: top is max, bottom is min (reversed from the provided code)\n const trackLength = trackRect.height;\n const relativePosition = trackRect.bottom - position; // Y position relative to track bottom\n percentage = clamp(relativePosition / trackLength, 0, 1);\n }\n\n // If stepValues are provided, find the closest value in the array\n if (stepValues && stepValues.length > 0) {\n const rawValue = min + percentage * range;\n\n // Find the closest value in stepValues\n let closestValue = stepValues[0];\n let minDistance = Math.abs(rawValue - closestValue);\n\n for (let i = 1; i < stepValues.length; i++) {\n const distance = Math.abs(rawValue - stepValues[i]);\n if (distance < minDistance) {\n minDistance = distance;\n closestValue = stepValues[i];\n }\n }\n\n return closestValue;\n } else {\n // Use regular step logic\n const rawValue = min + percentage * range;\n const steppedValue = Math.round(rawValue / step) * step;\n // Final clamp to ensure step rounding doesn't exceed bounds\n return clamp(steppedValue, min, max);\n }\n};\n\nexport const useSliderState = ({\n min = 0,\n max = 100,\n step = 1,\n value: controlledValue = 0,\n defaultValue,\n onChange,\n onDrag,\n orientation = 'horizontal',\n isDisabled = false,\n stepValues,\n}: SliderProps) => {\n const initialValue = clamp(controlledValue ?? defaultValue ?? min, min, max);\n const [internalValue, setInternalValue] = useState(initialValue);\n const [isDragging, setIsDragging] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n\n const trackRef = useRef<HTMLDivElement>(null);\n const thumbRef = useRef<HTMLDivElement>(null);\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n // Update internal state if controlled value changes\n useEffect(() => {\n if (isControlled) {\n setInternalValue(clamp(controlledValue, min, max));\n }\n }, [controlledValue, isControlled, min, max]);\n\n const updateValue = useCallback(\n (newValue: number) => {\n const clampedValue = clamp(newValue, min, max);\n if (!isControlled) {\n setInternalValue(clampedValue);\n }\n if (onChange && clampedValue !== currentValue) {\n onChange(clampedValue);\n }\n if (isDragging && onDrag) {\n onDrag(clampedValue);\n }\n },\n [isControlled, min, max, onChange, currentValue, isDragging, onDrag]\n );\n\n const handleInteraction = useCallback(\n (event: MouseEvent | TouchEvent | React.MouseEvent | React.TouchEvent) => {\n if (isDisabled || !trackRef.current) return;\n\n const trackRect = trackRef.current.getBoundingClientRect();\n let position: number;\n\n if ('touches' in event) {\n position =\n orientation === 'horizontal'\n ? event.touches[0].clientX\n : event.touches[0].clientY;\n } else {\n position = orientation === 'horizontal' ? event.clientX : event.clientY;\n }\n\n const newValue = calculateValue(\n position,\n trackRect,\n min,\n max,\n step,\n orientation,\n stepValues\n );\n updateValue(newValue);\n },\n [min, max, step, orientation, updateValue, isDisabled, stepValues]\n );\n\n const handleMouseDown = useCallback(\n (event: React.MouseEvent | React.TouchEvent) => {\n if (isDisabled) return;\n event.preventDefault(); // Prevent text selection during drag\n setIsDragging(true);\n handleInteraction(event); // Update value immediately on click/touch\n\n const handleMouseMove = (moveEvent: MouseEvent | TouchEvent) => {\n handleInteraction(moveEvent);\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.removeEventListener('touchmove', handleMouseMove);\n document.removeEventListener('touchend', handleMouseUp);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n document.addEventListener('touchmove', handleMouseMove);\n document.addEventListener('touchend', handleMouseUp);\n },\n [handleInteraction, isDisabled]\n );\n\n // Allow clicking directly on the track\n const handleTrackMouseDown = useCallback(\n (event: React.MouseEvent | React.TouchEvent) => {\n // Prevent triggering if click is on the thumb itself\n if (thumbRef.current && thumbRef.current.contains(event.target as Node)) {\n return;\n }\n handleMouseDown(event);\n },\n [handleMouseDown]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (isDisabled) return;\n let newValue = currentValue;\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = currentValue - step;\n break;\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = currentValue + step;\n break;\n case 'Home':\n newValue = min;\n break;\n case 'End':\n newValue = max;\n break;\n default:\n return; // Exit if key is not handled\n }\n event.preventDefault(); // Prevent page scroll\n updateValue(newValue);\n },\n [currentValue, min, max, step, updateValue, isDisabled]\n );\n\n const range = max - min;\n const thumbPositionPercent =\n range === 0 ? 0 : ((currentValue - min) / range) * 100;\n\n return {\n currentValue,\n isDragging,\n isHovered,\n setIsHovered,\n trackRef,\n thumbRef,\n handleThumbMouseDown: handleMouseDown,\n handleTrackMouseDown,\n handleKeyDown,\n thumbPositionPercent,\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { Orientation, Shape, Size, Variant } from './Slider.type';\n\nexport const SliderSizes: Record<Size, ViewProps> = {\n xs: {\n height: 4,\n width: '100%',\n },\n sm: {\n height: 6,\n width: '100%',\n },\n md: {\n height: 8,\n width: '100%',\n },\n lg: {\n height: 10,\n width: '100%',\n },\n xl: {\n height: 12,\n width: '100%',\n },\n};\n\nexport const ThumbSizes: Record<Size, ViewProps> = {\n xs: {\n width: 12,\n height: 12,\n },\n sm: {\n width: 16,\n height: 16,\n },\n md: {\n width: 20,\n height: 20,\n },\n lg: {\n width: 24,\n height: 24,\n },\n xl: {\n width: 28,\n height: 28,\n },\n};\n\nexport const SliderShapes: Record<Shape, number | string> = {\n sharp: 0,\n rounded: 4,\n pillShaped: 24,\n};\n\nexport const getSlider = (themeMode: string): Record<Variant, ViewProps> => {\n return {\n default: {\n backgroundColor: 'color.blueGray.200',\n },\n outline: {\n backgroundColor: 'transparent',\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: 'color.blueGray.300',\n },\n };\n // Add dark mode conditional styling here\n};\n\n// For backward compatibility\nexport const SliderVariants = getSlider('light');\n\n// Maps Size enum to track height/width and thumb size for the new implementation\nexport const EnhancedSliderSizes: Record<\n Size,\n { trackCrossAxisSize: number; thumbSize: number }\n> = {\n xs: { trackCrossAxisSize: 4, thumbSize: 12 },\n sm: { trackCrossAxisSize: 6, thumbSize: 16 },\n md: { trackCrossAxisSize: 8, thumbSize: 20 },\n lg: { trackCrossAxisSize: 10, thumbSize: 24 },\n xl: { trackCrossAxisSize: 12, thumbSize: 28 },\n};\n\n// Basic styles for horizontal and vertical orientation\nexport const OrientationStyles: Record<Orientation, ViewProps> = {\n horizontal: {\n width: '100%',\n minWidth: '120px', // Ensure a minimum clickable area\n height: 'auto', // Height determined by track/thumb size + padding\n flexDirection: 'row',\n paddingVertical: 8, // Add padding for easier thumb interaction\n },\n vertical: {\n height: '100%',\n minHeight: '120px', // Ensure a minimum clickable area\n width: 'auto', // Width determined by track/thumb size + padding\n flexDirection: 'column-reverse', // Place track visually bottom-to-top\n paddingHorizontal: 8, // Add padding for easier thumb interaction\n },\n};\n","import React from 'react';\nimport { View, Text, useTheme, Center, Vertical, Horizontal } from 'app-studio';\nimport { HelperText } from '../../Input/HelperText/HelperText';\nimport { SliderViewProps } from './Slider.props';\nimport {\n SliderSizes,\n SliderShapes,\n SliderVariants,\n ThumbSizes,\n EnhancedSliderSizes,\n OrientationStyles,\n} from './Slider.style';\n\nexport const SliderView: React.FC<SliderViewProps> = ({\n min = 0,\n max = 100,\n step = 1,\n currentValue,\n stepValues,\n shape = 'rounded',\n size = 'md',\n variant = 'default',\n orientation = 'horizontal',\n isDisabled = false,\n showValue = false,\n showTooltip = false,\n backgroundColor = 'theme.primary',\n label,\n helperText,\n themeMode: elementMode,\n shadow = {},\n isDragging,\n isHovered,\n setIsHovered,\n trackRef,\n thumbRef,\n handleThumbMouseDown,\n handleTrackMouseDown,\n handleKeyDown,\n thumbPositionPercent,\n ariaLabel = 'Slider',\n views = {\n container: {},\n track: {},\n progress: {},\n filledTrack: {},\n thumb: {},\n label: {},\n valueLabel: {},\n stepMarks: {},\n tooltip: {},\n },\n ...props\n}) => {\n const { getColor, themeMode } = useTheme();\n const themeColor = getColor(backgroundColor, {\n themeMode: elementMode || themeMode,\n });\n const disabledColor = getColor('theme.disabled', {\n themeMode: elementMode || themeMode,\n });\n const trackColor = getColor(\n SliderVariants[variant].backgroundColor as string,\n { themeMode: elementMode || themeMode }\n );\n\n const isVertical = orientation === 'vertical';\n const { trackCrossAxisSize, thumbSize } = EnhancedSliderSizes[size] || {\n trackCrossAxisSize: SliderSizes[size].height as number,\n thumbSize: (ThumbSizes[size].width as number) || 16,\n };\n\n // For backward compatibility with the old implementation\n const legacyView = (\n <Vertical width=\"100%\" gap={8} {...views.container} {...props}>\n {label && (\n <Horizontal justifyContent=\"space-between\" alignItems=\"center\">\n <Text fontSize={14} fontWeight={500} {...views.label}>\n {label}\n </Text>\n {showValue && (\n <Text\n fontSize={14}\n color=\"color.blueGray.500\"\n {...views.valueLabel}\n >\n {currentValue}\n </Text>\n )}\n </Horizontal>\n )}\n\n <View\n ref={trackRef}\n position=\"relative\"\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n opacity={isDisabled ? 0.6 : 1}\n onMouseDown={handleTrackMouseDown}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...SliderSizes[size]}\n borderRadius={SliderShapes[shape]}\n backgroundColor={trackColor}\n {...SliderVariants[variant]}\n {...shadow}\n {...views.track}\n >\n {/* Step markers */}\n {stepValues && stepValues.length > 0 && (\n <>\n {stepValues.map((stepValue) => {\n const stepPercentage = ((stepValue - min) / (max - min)) * 100;\n return (\n <View\n key={stepValue}\n position=\"absolute\"\n top=\"50%\"\n left={`${stepPercentage}%`}\n transform=\"translate(-50%, -50%)\"\n width={4}\n height={4}\n borderRadius=\"50%\"\n backgroundColor={isDisabled ? disabledColor : themeColor}\n zIndex={1}\n {...views.stepMarks}\n />\n );\n })}\n </>\n )}\n\n {/* Progress bar */}\n <View\n position=\"absolute\"\n top={0}\n left={0}\n height=\"100%\"\n width={`${thumbPositionPercent}%`}\n backgroundColor={isDisabled ? disabledColor : themeColor}\n borderRadius={SliderShapes[shape]}\n transition=\"width 0.1s ease-in-out\"\n {...views.progress}\n {...views.filledTrack}\n />\n\n {/* Thumb */}\n <View\n ref={thumbRef}\n role=\"slider\"\n tabIndex={isDisabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n aria-orientation={orientation}\n aria-disabled={isDisabled}\n aria-label={ariaLabel}\n position=\"absolute\"\n top=\"50%\"\n left={`${thumbPositionPercent}%`}\n borderRadius=\"50%\"\n backgroundColor=\"color.white\"\n boxShadow=\"0 2px 4px rgba(0, 0, 0, 0.2)\"\n border={`2px solid ${isDisabled ? disabledColor : themeColor}`}\n transition={isDragging ? 'none' : 'transform 0.1s ease-in-out'}\n transform={\n isHovered\n ? 'translate(-50%, -50%) scale(1.1)'\n : 'translate(-50%, -50%)'\n }\n zIndex={2}\n onMouseDown={handleThumbMouseDown}\n onTouchStart={handleThumbMouseDown}\n onKeyDown={handleKeyDown}\n {...ThumbSizes[size]}\n {...views.thumb}\n >\n {/* Tooltip */}\n {showTooltip && (isHovered || isDragging) && (\n <View\n position=\"absolute\"\n bottom=\"100%\"\n left=\"50%\"\n transform=\"translateX(-50%)\"\n marginBottom={8}\n padding=\"4px 8px\"\n backgroundColor=\"color.black\"\n color=\"color.white\"\n borderRadius={4}\n fontSize={12}\n whiteSpace=\"nowrap\"\n zIndex={3}\n {...views.tooltip}\n >\n <Text {...views.tooltip?.text}>\n {currentValue?.toFixed(step < 1 ? 1 : 0)}\n </Text>\n </View>\n )}\n </View>\n </View>\n\n {helperText && <HelperText>{helperText}</HelperText>}\n </Vertical>\n );\n\n // Enhanced view with vertical support and other features\n const enhancedView = (\n <Center\n // Use Center to easily manage orientation layout\n {...OrientationStyles[orientation]}\n position=\"relative\" // Needed for absolute positioning of thumb/tooltip\n onMouseEnter={() => !isDisabled && setIsHovered(true)}\n onMouseLeave={() => !isDisabled && setIsHovered(false)}\n {...props} // Spread remaining view props\n {...views?.container}\n >\n {label && (\n <Horizontal\n justifyContent=\"space-between\"\n alignItems=\"center\"\n marginBottom={8}\n width=\"100%\"\n >\n <Text fontSize={14} fontWeight={500} {...views.label}>\n {label}\n </Text>\n {showValue && (\n <Text\n fontSize={14}\n color=\"color.blueGray.500\"\n {...views.valueLabel}\n >\n {currentValue}\n </Text>\n )}\n </Horizontal>\n )}\n\n <View\n ref={trackRef}\n position=\"relative\"\n borderRadius={trackCrossAxisSize / 2}\n backgroundColor={isDisabled ? disabledColor : trackColor}\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n width={isVertical ? `${trackCrossAxisSize}px` : '100%'}\n height={isVertical ? '100%' : `${trackCrossAxisSize}px`}\n onMouseDown={handleTrackMouseDown}\n onTouchStart={handleTrackMouseDown}\n {...views?.track}\n >\n {/* Step markers */}\n {stepValues && stepValues.length > 0 && (\n <>\n {stepValues.map((stepValue) => {\n const stepPercentage = ((stepValue - min) / (max - min)) * 100;\n return (\n <View\n key={stepValue}\n position=\"absolute\"\n width={4}\n height={4}\n borderRadius=\"50%\"\n backgroundColor={isDisabled ? disabledColor : themeColor}\n zIndex={1}\n {...(isVertical\n ? {\n bottom: `${stepPercentage}%`,\n left: '50%',\n transform: 'translate(-50%, 50%)',\n }\n : {\n left: `${stepPercentage}%`,\n top: '50%',\n transform: 'translate(-50%, -50%)',\n })}\n {...views.stepMarks}\n />\n );\n })}\n </>\n )}\n\n <View\n position=\"absolute\"\n borderRadius={trackCrossAxisSize / 2}\n backgroundColor={isDisabled ? disabledColor : themeColor}\n {...(isVertical\n ? {\n bottom: 0,\n left: 0,\n width: '100%',\n height: `${thumbPositionPercent}%`,\n }\n : {\n top: 0,\n left: 0,\n height: '100%',\n width: `${thumbPositionPercent}%`,\n })}\n {...views?.filledTrack}\n {...views?.progress} // For backward compatibility\n />\n\n <View\n ref={thumbRef}\n role=\"slider\"\n tabIndex={isDisabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n aria-orientation={orientation}\n aria-disabled={isDisabled}\n aria-label={ariaLabel}\n position=\"absolute\"\n width={`${thumbSize}px`}\n height={`${thumbSize}px`}\n borderRadius=\"50%\"\n backgroundColor={isDisabled ? disabledColor : themeColor}\n border={`2px solid ${getColor('color.white')}`}\n boxShadow=\"0 1px 3px rgba(0, 0, 0, 0.2)\"\n cursor={isDisabled ? 'not-allowed' : 'grab'}\n transform={isVertical ? 'translateX(-50%)' : 'translateY(-50%)'}\n zIndex={2}\n transition={isDragging ? 'none' : 'left 0.1s, bottom 0.1s'}\n {...(isVertical\n ? {\n left: '50%',\n bottom: `${thumbPositionPercent}%`,\n }\n : {\n top: '50%',\n left: `${thumbPositionPercent}%`,\n })}\n onMouseDown={handleThumbMouseDown}\n onTouchStart={handleThumbMouseDown}\n onKeyDown={handleKeyDown}\n {...views?.thumb}\n >\n {showTooltip && (isHovered || isDragging) && (\n <View\n position=\"absolute\"\n padding=\"4px 8px\"\n backgroundColor={getColor('color.black')}\n color={getColor('color.white')}\n borderRadius=\"4px\"\n fontSize=\"12px\"\n whiteSpace=\"nowrap\"\n zIndex={3}\n {...(isVertical\n ? {\n left: '100%',\n marginLeft: '8px',\n bottom: '0',\n transform: 'translateY(50%)',\n }\n : {\n bottom: '100%',\n left: '50%',\n marginBottom: '8px',\n transform: 'translateX(-50%)',\n })}\n {...views?.tooltip}\n >\n <Text {...views?.tooltip?.text}>\n {currentValue?.toFixed(step < 1 ? 1 : 0)}\n </Text>\n </View>\n )}\n </View>\n </View>\n\n {helperText && <HelperText marginTop={8}>{helperText}</HelperText>}\n </Center>\n );\n\n // Use the enhanced view if orientation is vertical or showTooltip is true\n // Otherwise use the legacy view for backward compatibility\n return isVertical || showTooltip ? enhancedView : legacyView;\n};\n","import { create } from 'zustand';\nimport { MessageState } from './Message.props';\nimport { MessageType, ShowMessageType } from './Message.type';\n\n// Create your store with the initial state and actions.\nexport const useMessageStore = create<MessageState>((set) => ({\n // initial state\n visible: false,\n title: '',\n subtitle: '',\n variant: 'info',\n isClosable: false,\n views: {},\n action: () => {},\n actionText: '',\n showIcon: false,\n timeout: 3000,\n show: (\n variant,\n title = '',\n subtitle = '',\n isClosable,\n views,\n action,\n actionText,\n showIcon,\n timeout\n ) =>\n set({\n visible: true,\n variant,\n title,\n subtitle,\n isClosable,\n views,\n action,\n actionText,\n showIcon,\n timeout,\n }),\n\n hide: () => set({ visible: false }),\n}));\n\nexport const showMessage = (\n variant: MessageType,\n title?: string,\n subtitle?: string,\n props?: ShowMessageType\n) => {\n useMessageStore\n .getState()\n .show(\n variant,\n title,\n subtitle,\n props?.isClosable,\n props?.views,\n props?.action,\n props?.actionText,\n props?.showIcon,\n props?.timeout\n );\n};\n\nexport const hideMessage = () => {\n useMessageStore.getState().hide();\n};\n","import { ViewProps } from 'app-studio';\nimport { MessageType, Shape, Size } from './Message.type';\n\nexport const ContainerShapes: Record<Shape, ViewProps> = {\n sharp: { borderRadius: 0 },\n rounded: { borderRadius: 4 },\n};\n\nexport const HeaderIconSizes: Record<Size, number> = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 24,\n xl: 28,\n};\n\nexport const Themes: Record<MessageType, any> = {\n info: {\n container: {\n backgroundColor: 'color.blue.200',\n border: 'color.blue.400',\n },\n icon: {\n color: 'color.blue.500',\n name: 'InformationIcon',\n },\n content: {\n color: 'color.blue.500',\n },\n close: {\n color: 'color.blue.500',\n name: 'CloseIcon',\n },\n },\n success: {\n container: {\n backgroundColor: 'color.green.200',\n border: 'color.green.400',\n },\n icon: {\n color: 'color.green.500',\n name: 'SuccessIcon',\n },\n content: {\n color: 'color.green.500',\n },\n close: {\n color: 'color.green.500',\n name: 'CloseIcon',\n },\n },\n error: {\n container: {\n backgroundColor: 'color.red.200',\n border: 'color.red.400',\n },\n icon: {\n color: 'color.red.500',\n name: 'ErrrorIcon',\n },\n content: {\n color: 'color.red.500',\n },\n close: {\n color: 'color.red.500',\n name: 'CloseIcon',\n },\n },\n warning: {\n container: {\n backgroundColor: 'color.orange.200',\n border: 'color.orange.400',\n },\n icon: {\n color: 'color.orange.500',\n name: 'ErrrorIcon',\n },\n content: {\n color: 'color.orange.500',\n },\n close: {\n color: 'color.orange.500',\n name: 'CloseIcon',\n },\n },\n};\n","import React, { useEffect } from 'react';\nimport { Vertical } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { View } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { Themes } from './Message.style';\nimport { MessageProps } from './Message.props';\nimport {\n CloseIcon,\n WarningIcon,\n SuccessIcon,\n ErrorIcon,\n InfoIcon,\n} from '../../Icon/Icon';\n\nexport const MessageView = ({\n variant,\n hide,\n title,\n subtitle,\n theme,\n action,\n actionText,\n showIcon = false,\n isClosable = false,\n timeout = 3000,\n views,\n}: MessageProps) => {\n useEffect(() => {\n if (timeout && !isClosable) {\n const timeId = setTimeout(() => {\n // After 3 seconds set the show value to false\n hide();\n }, timeout);\n\n return () => {\n clearTimeout(timeId);\n };\n }\n\n return;\n }, []);\n\n const Theme = theme ?? Themes;\n const showAction = !!(action && actionText);\n\n const containerStyle = {\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: 8,\n borderColor: `${Theme[variant].container.border}`,\n };\n\n const iconColor = {\n info: '#3b82f6',\n success: '#4ade80',\n warning: '#f97316',\n error: '#ef4444',\n }[variant];\n\n const iconComponent = {\n info: <InfoIcon widthHeight={24} color={iconColor} {...views?.icon} />,\n success: (\n <SuccessIcon widthHeight={24} color={iconColor} {...views?.icon} />\n ),\n warning: (\n <WarningIcon widthHeight={24} color={iconColor} {...views?.icon} />\n ),\n error: <ErrorIcon widthHeight={24} color={iconColor} {...views?.icon} />,\n }[variant];\n\n const isShowIcon = showIcon && iconComponent;\n\n return (\n <Horizontal\n role=\"messageContent\"\n gap={16}\n width={400}\n // safe={true}\n flexWrap=\"nowrap\"\n position={'relative'}\n alignItems=\"center\"\n padding=\"14px 24px 14px 14px\"\n color={`${Theme[variant].content.color}`}\n backgroundColor={`${Theme[variant].container.backgroundColor}`}\n onClick={\n isClosable\n ? () => {}\n : () => {\n hide();\n }\n }\n {...containerStyle}\n {...views?.container}\n >\n {isShowIcon && iconComponent}\n <Vertical gap={8} width=\"100%\">\n <Text size=\"md\" weight=\"semiBold\" {...views?.title}>\n {title}\n </Text>\n {subtitle && (\n <Text size=\"sm\" {...views?.subtitle}>\n {subtitle}\n </Text>\n )}\n </Vertical>\n {showAction && (\n <Text\n marginRight={10}\n onClick={action}\n padding=\"6px 10px\"\n whiteSpace=\"nowrap\"\n {...containerStyle}\n {...views?.actionText}\n >\n {actionText}\n </Text>\n )}\n {isClosable && (\n <View\n position=\"absolute\"\n zIndex={10000}\n right={8}\n top={6}\n onClick={() => {\n hide();\n }}\n {...views?.closingIcon?.container}\n >\n <CloseIcon\n widthHeight={18}\n color={iconColor}\n {...views?.closingIcon?.icon}\n />\n </View>\n )}\n </Horizontal>\n );\n};\n","import React from 'react';\nimport { View, Text, Image, Horizontal, Center } from 'app-studio';\nimport { UploadIcon } from '../../Icon/Icon';\nimport { UploadStateProps, UploadViewProps } from './Uploader.props';\n\nexport const UploadView: React.FC<UploadViewProps & UploadStateProps> = ({\n accept,\n isLoading = false,\n progress = 0,\n icon,\n text,\n previewUrl,\n thumbnailUrl,\n errorMessage,\n fileInputRef,\n videoRef,\n selectedFile,\n handleFileChange,\n handleClick,\n containerProps,\n errorMessageProps,\n progressProps,\n videoProps,\n imageProps,\n iconProps,\n textProps,\n fileType,\n previewUrl: externalPreviewUrl,\n renderError = ({\n errorMessage,\n errorMessageProps,\n themeMode: elementMode,\n }) => (\n <Text\n color=\"red\"\n fontSize={12}\n marginTop={8}\n {...errorMessageProps}\n {...views?.text}\n >\n {errorMessage}\n </Text>\n ),\n renderText = ({ text, textProps }) => (\n <Text marginTop={8} {...textProps} {...views?.text}>\n {text}\n </Text>\n ),\n renderFile = ({ selectedFile, textProps }) => {\n return selectedFile ? (\n <Center\n marginTop={8}\n gap={10}\n flexDirection=\"column\"\n {...views?.container}\n >\n <Text maxLines={2} {...textProps} {...views?.text}>\n {selectedFile.name}\n </Text>\n <Text {...textProps} {...views?.text}>\n ({Math.round(selectedFile.size / 1024)} KB)\n </Text>\n </Center>\n ) : null;\n },\n renderVideo = ({\n selectedFile,\n // thumbnailUrl,\n videoRef,\n videoProps,\n // imageProps,\n }) => {\n return (\n <View width=\"100%\" height=\"100%\" position=\"relative\" {...views?.view}>\n <View\n as=\"video\"\n width=\"100%\"\n height=\"100%\"\n src={selectedFile ? URL.createObjectURL(selectedFile) : undefined}\n style={{ objectFit: 'cover' }}\n ref={videoRef}\n {...videoProps}\n {...views?.view}\n />\n </View>\n );\n },\n renderImage = ({ previewUrl, imageProps }) => {\n console.log('Rendering image with URL:', previewUrl);\n return (\n <View width=\"100%\" height=\"100%\" position=\"relative\" {...views?.view}>\n <Image\n src={previewUrl}\n alt=\"Preview\"\n width=\"100%\"\n height=\"100%\"\n objectFit=\"cover\"\n style={{ maxHeight: '100%', maxWidth: '100%' }}\n {...imageProps}\n {...views?.image}\n />\n </View>\n );\n },\n renderProgress = ({ progress, progressProps }) => {\n return (\n <Horizontal\n gap={8}\n alignItems=\"center\"\n {...progressProps}\n {...views?.horizontal}\n >\n <View\n height={4}\n backgroundColor=\"rgba(0,0,0,0.1)\"\n width=\"100%\"\n borderRadius={2}\n {...views?.view}\n >\n <View\n height={4}\n width={`${progress}%`}\n borderRadius={2}\n backgroundColor=\"#000\"\n {...views?.view}\n />\n </View>\n <Text fontSize={12} {...views?.text}>\n {progress}%\n </Text>\n </Horizontal>\n );\n },\n views = {},\n}) => {\n const finalPreviewUrl = externalPreviewUrl || previewUrl;\n\n // Debug log to help troubleshoot\n // console.log('Uploader state:', {\n // fileType,\n // finalPreviewUrl,\n // selectedFile: selectedFile?.name,\n // progress,\n // });\n\n return (\n <Center\n onClick={handleClick}\n cursor=\"pointer\"\n border=\"1px solid rgba(0,0,0,0.1)\"\n borderRadius={8}\n padding={16}\n flexDirection=\"column\"\n overflow=\"hidden\"\n position=\"relative\"\n height={selectedFile && progress === 100 ? '200px' : 'auto'}\n {...containerProps}\n {...views?.container}\n >\n {/* Image Preview */}\n {progress === 100 &&\n fileType === 'image' &&\n finalPreviewUrl &&\n renderImage({ previewUrl: finalPreviewUrl, imageProps })}\n\n {/* Video Preview */}\n {progress === 100 &&\n fileType === 'video' &&\n thumbnailUrl &&\n renderVideo({\n selectedFile,\n thumbnailUrl,\n videoRef,\n videoProps,\n imageProps,\n })}\n\n {/* File Preview */}\n {progress === 100 &&\n fileType === 'file' &&\n selectedFile &&\n renderFile({ selectedFile, textProps })}\n {progress < 100 &&\n (icon || <UploadIcon widthHeight={32} {...iconProps} />)}\n {!selectedFile && text && renderText({ text, textProps })}\n {isLoading && renderProgress({ progress, progressProps })}\n {errorMessage && renderError({ errorMessage, errorMessageProps })}\n <View\n as=\"input\"\n type=\"file\"\n ref={fileInputRef}\n onChange={handleFileChange}\n accept={accept}\n style={{ display: 'none' }}\n {...views?.view}\n />\n </Center>\n );\n};\n","import { create } from 'zustand';\n\nexport interface ModalItem {\n name: string;\n props: any & { isVisible: boolean };\n overlayProps: any;\n}\n\nexport interface ModalState {\n modals: ModalItem[];\n show: (name: string, modalProps?: any, overlayProps?: any) => void;\n hide: (name?: string) => void;\n onShow: (name: string, props?: any) => void;\n onHide: (name?: string) => void;\n setOnShow: (onShow: (name: string, props?: any) => void) => void;\n setOnHide: (onHide: (name?: string) => void) => void;\n}\n\nexport const useModalStore = create<ModalState>((set) => ({\n modals: [],\n onHide: (name?: string) => name,\n onShow: (name: string, props?: any) => ({ name, props }),\n show: (name, modalProps = {}, overlayProps = {}) => {\n set((state: ModalState) => ({\n ...state,\n modals: [\n ...state.modals,\n {\n name,\n props: { ...modalProps, isVisible: true },\n overlayProps,\n },\n ],\n }));\n },\n hide: (name) => {\n set((state: ModalState) => {\n if (!name) {\n // Hide all modals\n return { modals: [] };\n }\n // Hide specific modal by name\n return {\n ...state,\n modals: state.modals.filter((modal) => modal.name !== name),\n };\n });\n },\n setOnHide: (onHide: (name?: string) => void) => {\n set((state: ModalState) => ({ ...state, onHide }));\n },\n setOnShow: (onShow: (name: string, props?: any) => void) => {\n set((state: ModalState) => ({ ...state, onShow }));\n },\n}));\n\nexport const showModal = (\n name: string,\n modalProps: any = {},\n overlayProps: any = {}\n) => {\n useModalStore.getState().show(name, modalProps, overlayProps);\n useModalStore.getState().onShow(name, modalProps);\n};\n\nexport const hideModal = (name?: string) => {\n console.log('hideModal', name);\n useModalStore.getState().onHide(name);\n\n useModalStore.getState().hide(typeof name === 'string' ? name : undefined);\n};\n","/**\n * Modal Styles\n *\n * Defines the styles for the Modal component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Shape, Size } from './Modal.type';\n\n/**\n * Container shape configurations for the Modal component\n * Following the 4px grid system\n */\nexport const ContainerShapes: Record<Shape, ViewProps> = {\n sharp: { borderRadius: 0 },\n rounded: { borderRadius: '8px' }, // 2 × 4px grid\n};\n/**\n * Overlay alignment configurations for the Modal component\n */\nexport const OverlayAlignments: Record<string, ViewProps> = {\n center: { justifyContent: 'center', alignItems: 'center' },\n top: {\n justifyContent: 'center',\n alignItems: 'flex-start',\n }, // 16 × 4px grid\n right: {\n justifyContent: 'flex-end',\n alignItems: 'center',\n }, // 8 × 4px grid\n bottom: {\n justifyContent: 'center',\n alignItems: 'flex-end',\n }, // 16 × 4px grid\n left: {\n justifyContent: 'flex-start',\n alignItems: 'center',\n }, // 8 × 4px grid\n};\n\n/**\n * Header icon size configurations for the Modal component\n * Following the 4px grid system\n */\nexport const HeaderIconSizes: Record<Size, number> = {\n xs: 12, // 3 × 4px grid\n sm: 16, // 4 × 4px grid\n md: 20, // 5 × 4px grid\n lg: 24, // 6 × 4px grid\n xl: 28, // 7 × 4px grid\n};\n\n/**\n * Animation configurations for the Modal component\n */\nexport const ModalAnimations = {\n enter: {\n opacity: [0, 1],\n transform: ['scale(0.95)', 'scale(1)'],\n transition: 'all 0.3s ease-out',\n },\n exit: {\n opacity: [1, 0],\n transform: ['scale(1)', 'scale(0.95)'],\n transition: 'all 0.2s ease-in',\n },\n};\n\n/**\n * Typography configurations for the Modal component\n */\nexport const ModalTypography = {\n title: {\n fontSize: '18px', // 4.5 × 4px grid\n fontWeight: '600', // Semi-bold\n lineHeight: '24px', // 6 × 4px grid\n color: 'color.gray.900',\n },\n body: {\n fontSize: '16px', // 4 × 4px grid\n fontWeight: '400', // Regular\n lineHeight: '24px', // 6 × 4px grid\n color: 'color.gray.700',\n },\n};\n","/**\n * Modal View Component\n *\n * Renders a modal dialog with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { View, Horizontal, ViewProps, Vertical, Center } from 'app-studio';\nimport { CloseIcon } from '../../Icon/Icon';\nimport { hideModal } from './Modal.store';\n\nimport {\n BodyProps,\n ContainerProps,\n FooterProps,\n HeaderProps,\n} from '../Modal/Modal.props';\nimport {\n ContainerShapes,\n OverlayAlignments,\n HeaderIconSizes,\n ModalTypography,\n} from '../Modal/Modal.style';\nimport { Position } from './Modal.type';\n\nexport interface OverlayProps {\n views?: {\n container?: ViewProps;\n view?: ViewProps;\n };\n blur?: number;\n isOpen?: boolean;\n isClosePrevented?: boolean;\n onClose?: () => void;\n position?: Position;\n children?: React.ReactNode;\n}\n\nexport const ModalOverlay: React.FC<OverlayProps & any> = ({\n children,\n blur,\n isOpen = false,\n isClosePrevented = false,\n onClose = () => {},\n position = 'center',\n views,\n ...props\n}) => {\n const handleClick = () => {\n if (!isClosePrevented) onClose();\n };\n\n return (\n <Center\n position=\"fixed\"\n top={0}\n left={0}\n width=\"100%\"\n height=\"100%\"\n zIndex={1000}\n onClick={handleClick}\n visibility={isOpen ? 'visible' : 'hidden'}\n transition=\"all 0.3s ease\"\n {...views?.container}\n >\n <View\n position=\"absolute\"\n top={0}\n left={0}\n zIndex={1000}\n width=\"100vw\"\n height=\"100vh\"\n display=\"flex\"\n backgroundColor=\"color.blackAlpha.500\"\n backdropFilter={blur ? `blur(${blur}px)` : undefined}\n transition=\"all 0.3s ease\"\n onClick={handleClick}\n {...OverlayAlignments[position]}\n {...props}\n {...views?.view}\n >\n {children}\n </View>\n </Center>\n );\n};\n\nexport const ModalContainer: React.FC<ContainerProps> = ({\n children,\n shadow,\n isFullScreen = false,\n shape = 'rounded',\n views,\n isOpen,\n ...props\n}) => {\n const defaultShadow =\n typeof document !== undefined\n ? {\n boxShadow: '0px 4px 16px rgba(0, 0, 0, 0.15)', // Subtle shadow following design system\n }\n : {\n elevation: 5,\n shadowColor: 'rgba(0, 0, 0, 0.15)',\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 1,\n shadowRadius: 16,\n };\n\n const handleClick = (event: any) => {\n if (event && event.stopPropagation) event.stopPropagation();\n };\n return (\n <Vertical\n cursor=\"default\"\n backgroundColor=\"color.white\"\n width={isFullScreen ? '100%' : 600}\n height={isFullScreen ? '100%' : 'fit-content'}\n onClick={handleClick}\n transition=\"all 0.3s ease\"\n {...(shadow ? shadow : defaultShadow)}\n {...ContainerShapes[shape]}\n {...props}\n {...views?.container}\n >\n {children}\n </Vertical>\n );\n};\n\nexport const ModalHeader: React.FC<HeaderProps> = ({\n children,\n buttonColor = 'theme.primary',\n iconSize = 'md',\n buttonPosition = 'right',\n views,\n ...props\n}) => {\n const onClose = props.onClose ? props.onClose : hideModal;\n\n const buttonIcon = (\n <View onClick={onClose}>\n <CloseIcon widthHeight={HeaderIconSizes[iconSize]} color={buttonColor} />\n </View>\n );\n\n return (\n <Horizontal\n justifyContent={buttonPosition === 'none' ? 'center' : 'space-between'}\n alignItems=\"center\"\n paddingVertical={16} // 4×4px grid\n paddingHorizontal={24} // 6×4px grid\n borderBottomWidth=\"1px\"\n borderBottomStyle=\"solid\"\n borderBottomColor=\"color.gray.200\"\n {...props}\n {...views?.header}\n >\n {buttonPosition === 'left' && buttonIcon}\n {children}\n {buttonPosition === 'right' && buttonIcon}\n </Horizontal>\n );\n};\n\nexport const ModalBody: React.FC<BodyProps> = ({\n children,\n views,\n ...props\n}) => {\n return (\n <View\n paddingVertical={16} // 4×4px grid\n paddingHorizontal={24} // 6×4px grid\n fontSize={ModalTypography.body.fontSize}\n fontWeight={ModalTypography.body.fontWeight}\n lineHeight={ModalTypography.body.lineHeight}\n color={ModalTypography.body.color}\n {...props}\n {...views?.view}\n >\n {children}\n </View>\n );\n};\n\nexport const ModalFooter: React.FC<FooterProps> = ({\n children,\n views,\n ...props\n}) => {\n return (\n <Horizontal\n marginTop=\"auto\"\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n paddingVertical={16} // 4×4px grid\n paddingHorizontal={24} // 6×4px grid\n borderTopWidth=\"1px\"\n borderTopStyle=\"solid\"\n borderTopColor=\"color.gray.200\"\n gap={12} // 3×4px grid\n {...props}\n {...views?.container}\n >\n {children}\n </Horizontal>\n );\n};\n","import React from 'react';\n\nimport { ModalType } from './Modal/Modal.props';\nimport {\n ModalBody,\n ModalContainer,\n ModalFooter,\n ModalHeader,\n ModalOverlay,\n} from './Modal/Modal.view';\nimport { ModalLayout } from './Modal/Modal.layout';\n\n/**\n * It is a custom content overlay that appears on top of the main screen.\n */\n// eslint-disable-next-line react/prop-types\nexport const Modal: ModalType = ({ children }) => <>{children}</>;\n\nModal.Overlay = ModalOverlay;\nModal.Container = ModalContainer;\nModal.Header = ModalHeader;\nModal.Body = ModalBody;\nModal.Footer = ModalFooter;\nModal.Layout = ModalLayout;\n\nexport * from './Modal/Modal.store';\n","import React, { Fragment } from 'react';\nimport { ModalState, hideModal, useModalStore } from './Modal.store';\nimport { ModalOverlay } from './Modal.view';\nimport { ModalLayoutProps } from './Modal.props';\n\nexport const ModalLayout = ({\n modals: availableModals,\n onShow,\n onHide,\n}: ModalLayoutProps) => {\n const activeModals = useModalStore((state: ModalState) => state.modals);\n\n if (onShow) {\n useModalStore.getState().setOnShow(onShow);\n }\n\n if (onHide) {\n useModalStore.getState().setOnHide(onHide);\n }\n\n if (activeModals.length === 0) {\n return null;\n }\n\n return (\n <Fragment>\n {activeModals.map((modal: any, index: number) => {\n const ModalComponent = availableModals[modal.name];\n\n if (!ModalComponent) {\n console.error(`${modal.name} modal doesn't exist`);\n return null;\n }\n\n return (\n <ModalOverlay\n key={index}\n isOpen={modal.props.isVisible}\n onClose={() => hideModal(modal.name)}\n blur={5}\n {...modal.overlayProps}\n style={{ zIndex: 1000 + index }}\n >\n <ModalComponent {...modal.props} />\n </ModalOverlay>\n );\n })}\n </Fragment>\n );\n};\n","import { useState } from 'react';\n\nexport const useNavigationMenuState = (\n defaultActiveItemId: string | null = null,\n defaultExpandedItemIds: string[] = []\n) => {\n const [activeItemId, setActiveItemId] = useState<string | null>(\n defaultActiveItemId\n );\n const [expandedItemIds, setExpandedItemIds] = useState<string[]>(\n defaultExpandedItemIds\n );\n\n const toggleExpandedItem = (itemId: string) => {\n setExpandedItemIds((prevExpandedItemIds) => {\n // Check if the item is already expanded\n const isExpanded = prevExpandedItemIds.includes(itemId);\n\n if (isExpanded) {\n // If expanded, remove it from the list\n return prevExpandedItemIds.filter((id) => id !== itemId);\n } else {\n // If not expanded, add it to the list\n return [...prevExpandedItemIds, itemId];\n }\n });\n };\n\n const isItemExpanded = (itemId: string) => {\n return expandedItemIds.includes(itemId);\n };\n\n return {\n activeItemId,\n setActiveItemId,\n expandedItemIds,\n toggleExpandedItem,\n isItemExpanded,\n };\n};\n","/**\n * NavigationMenu Styles\n *\n * Defines the styles for the NavigationMenu component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Orientation, Size, Variant } from './NavigationMenu.type';\n\n/**\n * Size configurations for the NavigationMenu component\n * Following the 4px grid system\n */\nexport const NavigationMenuSizes: Record<Size, ViewProps> = {\n sm: {\n padding: '8px 12px', // 2×4px and 3×4px grid\n fontSize: '14px',\n\n fontWeight: '500', // Medium weight for better readability\n },\n md: {\n padding: '12px 16px', // 3×4px and 4×4px grid\n fontSize: '16px',\n\n fontWeight: '500', // Medium weight for better readability\n },\n lg: {\n padding: '16px 20px', // 4×4px and 5×4px grid\n fontSize: '18px',\n\n fontWeight: '500', // Medium weight for better readability\n },\n};\n\n/**\n * Variant styles for the NavigationMenu component\n */\nexport const NavigationMenuVariants: Record<Variant, ViewProps> = {\n default: {\n backgroundColor: 'transparent',\n color: 'color.gray.800',\n transition: 'all 0.2s ease',\n },\n filled: {\n backgroundColor: 'color.gray.100',\n color: 'color.gray.800',\n transition: 'all 0.2s ease',\n },\n outline: {\n backgroundColor: 'transparent',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n color: 'color.gray.800',\n transition: 'all 0.2s ease',\n },\n};\n\n/**\n * Orientation styles for the NavigationMenu component\n */\nexport const NavigationMenuOrientations: Record<Orientation, ViewProps> = {\n horizontal: {\n flexDirection: 'row',\n gap: '8px', // 2×4px grid\n },\n vertical: {\n flexDirection: 'column',\n gap: '4px', // 1×4px grid\n },\n};\n\n/**\n * State styles for the NavigationMenu items\n */\nexport const NavigationMenuItemStates = {\n active: {\n backgroundColor: 'color.blue.50',\n color: 'color.blue.700',\n fontWeight: '600', // Semi-bold for active items\n borderLeftWidth: 3,\n borderLeftStyle: 'solid' as const,\n borderLeftColor: 'color.blue.600',\n },\n hover: {\n backgroundColor: 'color.gray.100',\n transition: 'background-color 0.2s ease',\n },\n disabled: {\n opacity: 0.6,\n cursor: 'not-allowed',\n },\n};\n\n/**\n * Icon styles for the NavigationMenu component\n */\nexport const NavigationMenuIconStyles = {\n default: {\n color: 'color.gray.500',\n transition: 'color 0.2s ease',\n },\n active: {\n color: 'color.blue.600',\n transition: 'color 0.2s ease',\n },\n};\n","import React, { createContext, useContext } from 'react';\nimport { View, Horizontal, Vertical, ViewProps } from 'app-studio';\nimport {\n NavigationMenuContextType,\n NavigationItem,\n Orientation,\n Size,\n Variant,\n} from './NavigationMenu.type';\nimport {\n NavigationMenuItemProps,\n NavigationMenuListProps,\n NavigationMenuTriggerProps,\n NavigationMenuContentProps,\n} from './NavigationMenu.props';\nimport {\n NavigationMenuSizes,\n NavigationMenuVariants,\n NavigationMenuOrientations,\n NavigationMenuItemStates,\n} from './NavigationMenu.style';\n\n// Create context for the NavigationMenu\nconst NavigationMenuContext = createContext<NavigationMenuContextType>({\n activeItemId: null,\n setActiveItemId: () => {},\n expandedItemIds: [],\n toggleExpandedItem: () => {},\n isItemExpanded: () => false,\n orientation: 'vertical',\n size: 'md',\n variant: 'default',\n});\n\n// Provider component for the NavigationMenu context\nexport const NavigationMenuProvider: React.FC<{\n children: React.ReactNode;\n value: NavigationMenuContextType;\n}> = ({ children, value }) => {\n return (\n <NavigationMenuContext.Provider value={value}>\n {children}\n </NavigationMenuContext.Provider>\n );\n};\n\n// Hook to use the NavigationMenu context\nexport const useNavigationMenuContext = () => {\n const context = useContext(NavigationMenuContext);\n if (!context) {\n throw new Error(\n 'useNavigationMenuContext must be used within a NavigationMenuProvider'\n );\n }\n return context;\n};\n\n// NavigationMenu List component\nexport const NavigationMenuList: React.FC<NavigationMenuListProps> = ({\n children,\n views,\n}) => {\n const { orientation } = useNavigationMenuContext();\n\n const Container = orientation === 'horizontal' ? Horizontal : Vertical;\n\n return (\n <Container\n width=\"100%\"\n {...NavigationMenuOrientations[orientation]}\n transition=\"all 0.2s ease\"\n borderRadius=\"4px\"\n {...views?.container}\n >\n {children}\n </Container>\n );\n};\n\n// Create a context for NavigationMenuItem\nconst NavigationMenuItemContext = createContext<{\n itemValue: string | null;\n isDisabled: boolean;\n}>({ itemValue: null, isDisabled: false });\n\n// Hook to use the NavigationMenuItem context\nexport const useNavigationMenuItemContext = () => {\n const context = useContext(NavigationMenuItemContext);\n if (!context) {\n throw new Error(\n 'useNavigationMenuItemContext must be used within a NavigationMenuItem'\n );\n }\n return context;\n};\n\n// NavigationMenu Item component\nexport const NavigationMenuItem: React.FC<NavigationMenuItemProps> = ({\n item,\n value,\n isDisabled = false,\n children,\n views,\n}) => {\n const {\n activeItemId,\n setActiveItemId,\n orientation,\n size,\n variant,\n onItemActivate,\n } = useNavigationMenuContext();\n\n // Handle both data-driven and compound component patterns\n const itemId = item?.id || value;\n const isActive = activeItemId === itemId;\n const hasSubItems = item?.items && item.items.length > 0;\n const disabled = item?.disabled || isDisabled;\n\n const handleClick = () => {\n if (disabled) return;\n\n if (itemId) {\n setActiveItemId(itemId);\n if (onItemActivate) {\n onItemActivate(itemId);\n }\n }\n };\n\n const Container = orientation === 'horizontal' ? Horizontal : Vertical;\n\n // For compound component pattern\n if (children) {\n return (\n <NavigationMenuItemContext.Provider\n value={{ itemValue: itemId || null, isDisabled: disabled }}\n >\n <View\n width=\"100%\"\n cursor={disabled ? 'not-allowed' : 'pointer'}\n opacity={disabled ? 0.6 : 1}\n borderRadius=\"4px\"\n transition=\"all 0.2s ease\"\n {...NavigationMenuSizes[size]}\n {...NavigationMenuVariants[variant]}\n {...(isActive ? NavigationMenuItemStates.active : {})}\n _hover={!disabled ? NavigationMenuItemStates.hover : {}}\n {...views?.item}\n >\n {children}\n </View>\n </NavigationMenuItemContext.Provider>\n );\n }\n\n // For data-driven pattern with sub-items\n if (hasSubItems && item) {\n return (\n <Container\n width=\"100%\"\n flexDirection={orientation === 'horizontal' ? 'column' : 'column'}\n position=\"relative\"\n {...views?.item}\n >\n <NavigationMenuTrigger\n itemId={item.id}\n disabled={item.disabled}\n views={views}\n >\n {item.icon && (\n <View marginRight={8} {...views?.icon}>\n {item.icon}\n </View>\n )}\n {item.label}\n </NavigationMenuTrigger>\n\n <NavigationMenuContent itemId={item.id}>\n <NavigationMenuList>\n {item.items?.map((subItem) => (\n <NavigationMenuItem key={subItem.id} item={subItem} />\n ))}\n </NavigationMenuList>\n </NavigationMenuContent>\n </Container>\n );\n }\n\n // For data-driven pattern without sub-items\n if (item) {\n return (\n <View\n as={item.href ? 'a' : 'div'}\n to={item.href}\n onClick={handleClick}\n cursor={item.disabled ? 'not-allowed' : 'pointer'}\n opacity={item.disabled ? 0.6 : 1}\n width=\"100%\"\n display=\"flex\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n transition=\"all 0.2s ease\"\n gap=\"8px\"\n {...NavigationMenuSizes[size]}\n {...NavigationMenuVariants[variant]}\n {...(isActive ? NavigationMenuItemStates.active : {})}\n _hover={!item.disabled ? NavigationMenuItemStates.hover : {}}\n {...views?.item}\n >\n {item.icon && (\n <View marginRight={8} {...views?.icon}>\n {item.icon}\n </View>\n )}\n {item.label}\n </View>\n );\n }\n\n return null;\n};\n\n// NavigationMenu Trigger component\nexport const NavigationMenuTrigger: React.FC<NavigationMenuTriggerProps> = ({\n children,\n itemId,\n disabled,\n views,\n}) => {\n const { activeItemId, toggleExpandedItem, isItemExpanded, size, variant } =\n useNavigationMenuContext();\n\n const isActive = activeItemId === itemId;\n const isExpanded = isItemExpanded(itemId);\n\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n if (disabled) return;\n toggleExpandedItem(itemId);\n };\n\n return (\n <View\n onClick={handleClick}\n cursor={disabled ? 'not-allowed' : 'pointer'}\n opacity={disabled ? 0.5 : 1}\n width=\"100%\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n borderRadius={4}\n transition=\"background-color 0.2s ease\"\n {...NavigationMenuSizes[size]}\n {...NavigationMenuVariants[variant]}\n {...(isActive ? NavigationMenuItemStates.active : {})}\n _hover={!disabled ? NavigationMenuItemStates.hover : {}}\n {...views?.trigger}\n >\n <View display=\"flex\" alignItems=\"center\">\n {children}\n </View>\n <View\n transition=\"transform 0.2s ease\"\n transform={isExpanded ? 'rotate(180deg)' : 'rotate(0deg)'}\n {...views?.indicator}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M16.59 8.59L12 13.17L7.41 8.59L6 10L12 16L18 10L16.59 8.59Z\"\n fill=\"currentColor\"\n />\n </svg>\n </View>\n </View>\n );\n};\n\n// NavigationMenu Content component\nexport const NavigationMenuContent: React.FC<NavigationMenuContentProps> = ({\n children,\n itemId,\n views,\n}) => {\n const { isItemExpanded, orientation } = useNavigationMenuContext();\n\n const isExpanded = isItemExpanded(itemId);\n\n if (!isExpanded) {\n return null;\n }\n\n return (\n <View\n paddingLeft={orientation === 'vertical' ? 16 : 0}\n paddingTop={orientation === 'horizontal' ? 8 : 0}\n overflow=\"hidden\"\n width=\"100%\"\n position={orientation === 'horizontal' ? 'absolute' : 'relative'}\n backgroundColor={orientation === 'horizontal' ? 'white' : 'transparent'}\n boxShadow={\n orientation === 'horizontal' ? '0 4px 6px rgba(0, 0, 0, 0.1)' : 'none'\n }\n borderRadius={orientation === 'horizontal' ? '4px' : '0'}\n zIndex={orientation === 'horizontal' ? 10 : 1}\n {...views?.container}\n >\n {children}\n </View>\n );\n};\n\n// Main NavigationMenu View component\n// NavigationMenu Link component\nimport { NavigationMenuLinkProps } from './NavigationMenu.props';\n\nexport const NavigationMenuLink: React.FC<NavigationMenuLinkProps> = ({\n href,\n children,\n views,\n ...props\n}) => {\n const { itemValue, isDisabled } = useNavigationMenuItemContext();\n const { activeItemId, setActiveItemId, onItemActivate } =\n useNavigationMenuContext();\n\n const isActive = activeItemId === itemValue;\n\n const handleClick = (e: React.MouseEvent) => {\n if (isDisabled) {\n e.preventDefault();\n return;\n }\n\n if (itemValue) {\n setActiveItemId(itemValue);\n if (onItemActivate) {\n onItemActivate(itemValue);\n }\n }\n\n // Allow the user's onClick handler to run\n if (props.onClick) {\n props.onClick(e);\n }\n };\n\n return (\n <View\n as=\"a\"\n href={isDisabled ? undefined : href}\n onClick={handleClick}\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n opacity={isDisabled ? 0.5 : 1}\n width=\"100%\"\n display=\"flex\"\n alignItems=\"center\"\n aria-current={isActive ? 'page' : undefined}\n aria-disabled={isDisabled}\n data-active={isActive ? '' : undefined}\n data-disabled={isDisabled ? '' : undefined}\n {...(isActive ? { fontWeight: 'bold' } : {})}\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n );\n};\n\nexport const NavigationMenuView: React.FC<\n {\n items?: NavigationItem[];\n orientation: Orientation;\n size: Size;\n variant: Variant;\n views?: any;\n } & ViewProps\n> = ({\n items,\n orientation,\n //size, variant,\n views,\n themeMode: elementMode,\n}) => {\n const Container = orientation === 'horizontal' ? Horizontal : Vertical;\n\n if (!items || items.length === 0) {\n return null;\n }\n\n return (\n <Container\n width=\"100%\"\n {...NavigationMenuOrientations[orientation]}\n {...views?.container}\n >\n <NavigationMenuList views={views}>\n {items.map((item) => (\n <NavigationMenuItem key={item.id} item={item} views={views} />\n ))}\n </NavigationMenuList>\n </Container>\n );\n};\n","import React from 'react';\nimport {\n NavigationMenuProps,\n NavigationMenuType,\n} from './NavigationMenu/NavigationMenu.props';\nimport { useNavigationMenuState } from './NavigationMenu/NavigationMenu.state';\nimport {\n NavigationMenuProvider,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuTrigger,\n NavigationMenuContent,\n NavigationMenuView,\n NavigationMenuLink,\n} from './NavigationMenu/NavigationMenu.view';\n\n/**\n * NavigationMenu component for creating navigation menus with optional nested items.\n * Supports both data-driven approach (with items prop) and compound component pattern.\n */\nconst NavigationMenuComponent: React.FC<NavigationMenuProps> = ({\n items,\n children,\n orientation = 'vertical',\n size = 'md',\n variant = 'default',\n defaultActiveItemId = null,\n defaultExpandedItemIds = [],\n onItemActivate,\n views,\n ...props\n}) => {\n const {\n activeItemId,\n setActiveItemId,\n expandedItemIds,\n toggleExpandedItem,\n isItemExpanded,\n } = useNavigationMenuState(defaultActiveItemId, defaultExpandedItemIds);\n\n return (\n <NavigationMenuProvider\n value={{\n activeItemId,\n setActiveItemId,\n expandedItemIds,\n toggleExpandedItem,\n isItemExpanded,\n orientation,\n size,\n variant,\n onItemActivate,\n }}\n >\n {items ? (\n <NavigationMenuView\n items={items}\n orientation={orientation}\n size={size}\n variant={variant}\n views={views}\n {...props}\n />\n ) : (\n children\n )}\n </NavigationMenuProvider>\n );\n};\n\nexport const NavigationMenu = NavigationMenuComponent as NavigationMenuType;\n\n// Assign the sub-components to the main component\nNavigationMenu.List = NavigationMenuList;\nNavigationMenu.Item = NavigationMenuItem;\nNavigationMenu.Trigger = NavigationMenuTrigger;\nNavigationMenu.Content = NavigationMenuContent;\nNavigationMenu.Link = NavigationMenuLink;\n","import React, { createContext, useContext } from 'react';\nimport { ViewProps } from 'app-studio';\n\nexport type TableViewStyles = {\n table?: ViewProps;\n thead?: ViewProps;\n tfoot?: ViewProps;\n tbody?: ViewProps;\n tr?: ViewProps;\n td?: ViewProps;\n th?: ViewProps;\n caption?: ViewProps;\n};\n\nconst defaultStyles: TableViewStyles = {};\n\ninterface TableContextProps {\n views: TableViewStyles;\n onRowClick?: Function;\n}\n\n// Create a context that includes both styles and the onClick function\nconst TableContext = createContext<TableContextProps>({\n views: defaultStyles,\n onRowClick: () => {}, // Default to undefined if no onClick is passed\n});\n\nexport const TableProvider: React.FC<{\n children: React.ReactNode;\n views?: TableViewStyles;\n onRowClick?: Function; // Accept the onClick prop\n}> = ({ children, views = defaultStyles, onRowClick }) => (\n // Pass both styles and onClick to the context\n <TableContext.Provider value={{ views, onRowClick }}>\n {children}\n </TableContext.Provider>\n);\n\n// Custom hook to consume the context and get the styles and onClick handler\nexport const useTableContext = () => useContext(TableContext);\n","/**\n * Table Styles\n *\n * Defines the styles for the Table component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { TableViewStyles } from './Table.type';\n\n/**\n * Default table styles following the design system\n */\nexport const DefaultTableStyles: TableViewStyles = {\n table: {\n width: '100%',\n\n borderRadius: '8px', // 2 × 4px grid\n overflow: 'hidden',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n border: '1px solid',\n borderColor: 'color.gray.200',\n transition: 'all 0.2s ease',\n },\n thead: {\n backgroundColor: 'color.gray.50',\n borderBottom: '1px solid',\n borderBottomColor: 'color.gray.200',\n },\n th: {\n padding: '12px 16px', // 3 × 4px and 4 × 4px grid\n fontWeight: '600',\n fontSize: '14px',\n color: 'color.gray.700',\n textAlign: 'left',\n },\n td: {\n padding: '12px 16px', // 3 × 4px and 4 × 4px grid\n fontSize: '14px',\n borderBottom: '1px solid',\n borderBottomColor: 'color.gray.100',\n },\n tr: {\n transition: 'background-color 0.2s ease',\n _hover: {\n backgroundColor: 'color.gray.50',\n },\n },\n tfoot: {\n backgroundColor: 'color.gray.50',\n fontWeight: '600',\n borderTop: '2px solid',\n borderTopColor: 'color.gray.200',\n },\n caption: {\n margin: '8px 0', // 2 × 4px grid\n color: 'color.gray.600',\n fontSize: '14px',\n fontStyle: 'italic',\n },\n};\n\n/**\n * Compact table styles\n */\nexport const CompactTableStyles: TableViewStyles = {\n ...DefaultTableStyles,\n th: {\n ...DefaultTableStyles.th,\n padding: '8px 12px', // 2 × 4px and 3 × 4px grid\n fontSize: '12px',\n },\n td: {\n ...DefaultTableStyles.td,\n padding: '8px 12px', // 2 × 4px and 3 × 4px grid\n fontSize: '12px',\n },\n};\n\n/**\n * Striped table styles\n */\nexport const StripedTableStyles: TableViewStyles = {\n ...DefaultTableStyles,\n tr: {\n ...DefaultTableStyles.tr,\n _even: {\n backgroundColor: 'color.gray.50',\n },\n },\n};\n\n/**\n * Bordered table styles\n */\nexport const BorderedTableStyles: TableViewStyles = {\n ...DefaultTableStyles,\n td: {\n ...DefaultTableStyles.td,\n borderRight: '1px solid',\n borderRightColor: 'color.gray.100',\n },\n th: {\n ...DefaultTableStyles.th,\n borderRight: '1px solid',\n borderRightColor: 'color.gray.200',\n },\n};\n\n/**\n * Dark theme table styles\n */\nexport const DarkTableStyles: TableViewStyles = {\n table: {\n ...DefaultTableStyles.table,\n backgroundColor: 'color.gray.800',\n borderColor: 'color.gray.700',\n },\n thead: {\n backgroundColor: 'color.gray.900',\n borderBottomColor: 'color.gray.700',\n },\n th: {\n ...DefaultTableStyles.th,\n color: 'color.gray.100',\n },\n td: {\n ...DefaultTableStyles.td,\n color: 'color.gray.300',\n borderBottomColor: 'color.gray.700',\n },\n tr: {\n ...DefaultTableStyles.tr,\n _hover: {\n backgroundColor: 'color.gray.700',\n },\n },\n tfoot: {\n ...DefaultTableStyles.tfoot,\n backgroundColor: 'color.gray.900',\n borderTopColor: 'color.gray.700',\n },\n caption: {\n ...DefaultTableStyles.caption,\n color: 'color.gray.400',\n },\n};\n","/**\n * Table View Component\n *\n * Renders a table with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { Element, ViewProps } from 'app-studio';\nimport { TableViewProps } from './Table.props';\nimport { useTableContext } from './Table.context';\nimport { DefaultTableStyles } from './Table.style';\n\nexport const TableContainer: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"table\"\n borderCollapse=\"collapse\"\n {...DefaultTableStyles.table}\n {...views?.table}\n {...props}\n />\n );\n};\n\nexport const TableHead: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"thead\"\n textAlign=\"left\"\n {...DefaultTableStyles.thead}\n {...views?.thead}\n {...props}\n />\n );\n};\n\nexport const TableHeadCell: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"th\"\n whiteSpace=\"nowrap\"\n {...DefaultTableStyles.th}\n {...views?.th}\n {...props}\n />\n );\n};\n\nexport const TableRow: React.FC<ViewProps> = (props) => {\n const { views, onRowClick } = useTableContext();\n return (\n <Element\n as=\"tr\"\n {...DefaultTableStyles.tr}\n {...views?.tr}\n onClick={onRowClick}\n {...props}\n />\n );\n};\n\nexport const TableCell: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"td\"\n whiteSpace=\"nowrap\"\n fontWeight={props.isFirstColumn ? '500' : '400'}\n {...DefaultTableStyles.td}\n {...views?.td}\n {...props}\n />\n );\n};\n\nexport const TableBody: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"tbody\"\n {...DefaultTableStyles.tbody}\n {...views?.tbody}\n {...props}\n />\n );\n};\n\nexport const TableFooter: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"tfoot\"\n {...DefaultTableStyles.tfoot}\n {...views?.tfoot}\n {...props}\n />\n );\n};\n\nexport const TableCaption: React.FC<ViewProps> = (props) => {\n const { views } = useTableContext();\n return (\n <Element\n as=\"caption\"\n {...DefaultTableStyles.caption}\n {...views?.caption}\n {...props}\n />\n );\n};\n\nexport const TableView: React.FC<TableViewProps> = ({\n data,\n columns,\n footer,\n caption,\n themeMode: elementMode,\n}) => {\n return (\n <TableContainer role=\"Table\">\n {caption && <TableCaption>{caption}</TableCaption>}\n <TableHead>\n <TableRow>\n {columns.map((column) => (\n <TableHeadCell key={column.field}>{column.title}</TableHeadCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {data.map((row, index) => (\n <TableRow key={index}>\n {columns.map((column, columnIndex) => (\n <TableCell key={column.field} isFirstColumn={columnIndex === 0}>\n {row[column.field]}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n {footer && (\n <TableFooter>\n <TableRow>\n {footer.map((cell, index) => (\n <TableCell key={index} {...cell.props}>\n {cell.value}\n </TableCell>\n ))}\n </TableRow>\n </TableFooter>\n )}\n </TableContainer>\n );\n};\n","import React from 'react';\nimport {\n TableContainer,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n TableFooter,\n TableCaption,\n TableView,\n TableHeadCell,\n} from './Table/Table.view';\nimport { TableProvider } from './Table/Table.context';\nimport { TableLayoutProps } from './Table/Table.props';\n\nexport const Table = ({ children, views, onClick }: TableLayoutProps) => {\n return (\n <TableProvider views={views} onRowClick={onClick}>\n {children}\n </TableProvider>\n );\n};\n\nTable.Head = TableHead;\nTable.HeadCell = TableHeadCell;\nTable.Body = TableBody;\nTable.Row = TableRow;\nTable.Cell = TableCell;\nTable.Footer = TableFooter;\nTable.Caption = TableCaption;\nTable.Container = TableContainer;\nTable.Template = TableView;\n","import { useState, useEffect } from 'react';\nimport { Tab } from './Tabs.type';\n\n/**\n * Custom hook to manage the state of the active tab.\n * @param propTabs - The array of tab objects provided as props.\n * @param initialTabValue - The optional title of the tab to be initially active.\n * @returns An object containing the current activeTab and a function to update it.\n */\nexport const useTabsState = (\n propTabs: Tab[],\n initialTabValue?: string | number\n) => {\n // Find the initial tab based on initialTabValue, or default to the first tab.\n // Ensure propTabs is not empty before accessing index 0.\n const findInitialTab = (): Tab | undefined => {\n if (!propTabs || propTabs.length === 0) {\n return undefined; // No tabs, no initial active tab\n }\n if (initialTabValue !== undefined) {\n const foundTab = propTabs.find((tab) => tab.title === initialTabValue);\n if (foundTab) {\n return foundTab;\n }\n // Warn if initialTabValue is provided but not found\n // console.warn(\n // `Tabs: initialTabValue \"${initialTabValue}\" not found in tabs. Defaulting to the first tab.`\n // );\n }\n return propTabs[0]; // Default to the first tab\n };\n\n const [activeTab, setActiveTab] = useState<Tab | undefined>(findInitialTab);\n\n // Effect to update the active tab if the initialTabValue prop changes\n // or if the tabs array changes and the current active tab is no longer valid.\n useEffect(() => {\n const newInitialTab = findInitialTab();\n // Update only if the calculated initial tab is different from the current active tab\n // or if the current active tab is no longer in the list (and there are tabs)\n const currentActiveTabStillValid =\n activeTab && propTabs.some((t) => t.title === activeTab.title);\n\n if (\n newInitialTab &&\n (!currentActiveTabStillValid ||\n (initialTabValue !== undefined && activeTab?.title !== initialTabValue))\n ) {\n setActiveTab(newInitialTab);\n } else if (!newInitialTab && activeTab) {\n // Handle case where all tabs are removed\n setActiveTab(undefined);\n }\n }, [propTabs, initialTabValue]); // Rerun when tabs or initial title changes\n\n return {\n activeTab,\n setActiveTab,\n };\n};\n","import React from 'react';\nimport { Element, Text, ViewProps } from 'app-studio';\nimport { Tab } from './Tabs.type';\n\nexport interface TabHeaderProps {\n /** The tab data */\n tab: Tab;\n /** Whether this tab is currently active */\n isActive: boolean;\n /** Handler for when the tab is clicked */\n onClick: () => void;\n /** Position of the icon relative to the text */\n iconPosition?: 'left' | 'right' | 'top' | 'bottom';\n /** Custom styles for the tab header */\n tabStyles?: ViewProps;\n /** Custom styles for the tab text */\n textStyles?: ViewProps;\n}\n\n/**\n * TabHeader component renders a single tab in the tab navigation.\n * It's designed to be a lightweight alternative to using Button components.\n */\nexport const TabHeader: React.FC<TabHeaderProps> = ({\n tab,\n isActive,\n onClick,\n iconPosition = 'left',\n tabStyles,\n textStyles,\n}) => {\n // Base styles for the tab header\n const baseStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '10px 16px',\n cursor: 'pointer',\n borderTopLeftRadius: '4px',\n borderTopRightRadius: '4px',\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: isActive ? 'theme.primary' : 'transparent',\n borderBottomColor: isActive ? 'transparent' : 'color.gray.200',\n backgroundColor: isActive ? 'color.white' : 'transparent',\n color: isActive ? 'theme.primary' : 'color.gray.600',\n fontWeight: 'normal',\n position: 'relative',\n // If active, show a bottom border that matches the background color\n // to create the illusion that the tab is connected to the content\n\n // Hover state\n on: {\n hover: {\n color: 'theme.primary',\n },\n },\n };\n\n // Determine the flex direction based on icon position\n const getFlexDirection = () => {\n switch (iconPosition) {\n case 'top':\n return 'column';\n case 'bottom':\n return 'column-reverse';\n case 'right':\n return 'row-reverse';\n case 'left':\n default:\n return 'row';\n }\n };\n\n // Determine the gap based on icon position\n const getGap = () => {\n return ['top', 'bottom'].includes(iconPosition) ? '4px' : '8px';\n };\n\n return (\n <Element\n as=\"div\"\n role=\"tab\"\n aria-selected={isActive}\n tabIndex={isActive ? 0 : -1}\n {...baseStyles}\n {...tabStyles}\n flexDirection={getFlexDirection()}\n gap={getGap()}\n onClick={onClick}\n data-state={isActive ? 'active' : 'inactive'}\n >\n {tab.icon && <Element>{tab.icon}</Element>}\n <Text {...textStyles}>{tab.title}</Text>\n </Element>\n );\n};\n","import React from 'react';\nimport { View, Horizontal, Vertical } from 'app-studio';\nimport { TabsViewProps } from './Tabs.props';\nimport { TabHeader } from './TabHeader';\n\n/**\n * The presentation component for Tabs. Renders the UI based on props.\n */\nexport const TabsView: React.FC<TabsViewProps> = ({\n tabs = [], // Default to empty array\n activeTab,\n handleTabClick,\n views = {}, // Default to empty object\n renderTab,\n renderContent,\n iconPosition = 'left', // Default to left\n}) => {\n // If there's no active tab (e.g., tabs array is empty), render nothing or a placeholder\n if (!activeTab) {\n // Optionally render a placeholder when no tabs are active/available\n // return <View {...views.container}><Text>No tabs available.</Text></View>;\n return null; // Or simply render nothing\n }\n\n return (\n // Use Vertical layout for overall structure (tabs header above content)\n <Vertical width=\"100%\" height={'100%'} {...views.container}>\n {/* Horizontal layout for the tab headers/buttons */}\n <Horizontal {...views.headerTabs}>\n {tabs.map((tab) => {\n // Determine if the current tab in the loop is the active one\n const isActive = tab.title === activeTab.title;\n // Prepare the onClick handler for this specific tab\n const onClick = () => handleTabClick(tab);\n\n // Use the custom renderTab function if provided\n if (renderTab) {\n return renderTab(tab, isActive, onClick);\n }\n\n // Default rendering for a tab using our custom TabHeader component\n return (\n <TabHeader\n key={tab.title} // Use the unique title as the key\n tab={tab}\n isActive={isActive}\n onClick={onClick}\n iconPosition={iconPosition}\n tabStyles={{\n ...views.tab,\n ...(isActive ? views.activeTab : {}),\n }}\n textStyles={{\n ...views.title,\n ...(isActive ? views.activeText : {}),\n }}\n />\n );\n })}\n </Horizontal>\n\n {/* Content area */}\n <View width={'100%'} height=\"100%\" {...views.content}>\n {/* Use the custom renderContent function if provided */}\n {renderContent\n ? renderContent(activeTab)\n : // Otherwise, render the content property from the active tab object\n activeTab.content}\n </View>\n </Vertical>\n );\n};\n","import React from 'react';\nimport { TabsProps } from './Tabs/Tabs.props';\nimport { useTabsState } from './Tabs/Tabs.state';\nimport { TabsView } from './Tabs/Tabs.view';\nimport { Tab } from './Tabs/Tabs.type'; // Import Tab type\n\n/**\n * Tabs component allows users to navigate between different sections of content.\n * It manages the active tab state and renders the corresponding content.\n */\nconst TabsComponent: React.FC<TabsProps> = ({\n tabs,\n views,\n initialTabValue,\n onTabChange,\n renderTab,\n renderContent,\n iconPosition = 'left',\n}) => {\n // Use the custom hook to manage the active tab state\n const { activeTab, setActiveTab } = useTabsState(tabs, initialTabValue);\n\n // Handler function to change the active tab and trigger the callback\n const handleTabClick = (tab: Tab) => {\n // Only update state and call callback if the clicked tab is different from the current one\n if (activeTab?.title !== tab.title) {\n setActiveTab(tab);\n // Call the onTabChange callback if provided\n if (onTabChange) {\n onTabChange(tab);\n }\n }\n };\n\n // Render the presentation component with the necessary props\n return (\n <TabsView\n tabs={tabs}\n views={views}\n activeTab={activeTab} // Pass the activeTab object from state\n handleTabClick={handleTabClick} // Pass the click handler\n renderTab={renderTab}\n renderContent={renderContent}\n iconPosition={iconPosition}\n />\n );\n};\n\n// Export the component wrapped in React.memo for performance optimization\nexport const Tabs = React.memo(TabsComponent);\n","import { ViewProps } from 'app-studio';\nimport { TitleSize, HighlightStyle } from './Title.type';\n\n/**\n * Font sizes for different title sizes\n */\nexport const TitleSizes = {\n xs: 16,\n sm: 20,\n md: 24,\n lg: 32,\n xl: 40,\n '2xl': 48,\n '3xl': 56,\n '4xl': 64,\n '5xl': 72,\n '6xl': 80,\n};\n\n/**\n * Line heights for different title sizes\n */\nexport const LineHeights: Record<TitleSize, number> = {\n xs: 24,\n sm: 28,\n md: 32,\n lg: 40,\n xl: 48,\n '2xl': 56,\n '3xl': 64,\n '4xl': 72,\n '5xl': 80,\n '6xl': 88,\n};\n\n/**\n * Default styles for different highlight types\n */\nexport const HighlightStyles: Record<\n HighlightStyle,\n (color: string, secondaryColor?: string) => ViewProps\n> = {\n underline: (color) => ({\n textDecoration: 'underline',\n textDecorationColor: color,\n textDecorationThickness: '4px',\n textUnderlineOffset: '4px',\n }),\n background: (color) => ({\n backgroundColor: color,\n color: 'color.white',\n padding: '0 8px',\n borderRadius: '4px',\n }),\n gradient: (color, secondaryColor) => ({\n background: `linear-gradient(135deg, ${color}, ${secondaryColor || color})`,\n backgroundClip: 'text',\n webkitBackgroundClip: 'text',\n color: 'transparent',\n webkitTextFillColor: 'transparent',\n display: 'inline-block',\n textShadow: 'none',\n }),\n outline: (color) => ({\n webkitTextStroke: `1px ${color}`,\n webkitTextFillColor: 'transparent',\n color: 'transparent',\n textShadow: 'none',\n }),\n glow: (color) => ({\n color: color,\n textShadow: `0 0 10px ${color}80, 0 0 20px ${color}40, 0 0 30px ${color}20`,\n }),\n};\n","import React, { useEffect, useState } from 'react';\nimport { Text } from 'app-studio';\n\ninterface TypewriterEffectProps {\n text: string | string[];\n typingSpeed?: number;\n pauseTime?: number;\n onComplete?: () => void;\n showCursor?: boolean;\n cursorColor?: string;\n textStyle?: React.CSSProperties;\n as?: React.ElementType;\n [key: string]: any;\n}\n\n/**\n * A component that creates a typewriter effect for text\n */\nexport const TypewriterEffect: React.FC<TypewriterEffectProps> = ({\n text,\n typingSpeed = 50,\n pauseTime = 500,\n onComplete,\n showCursor = true,\n cursorColor = 'currentColor',\n textStyle,\n as,\n ...props\n}) => {\n // Convert text to array if it's a string\n const textArray = Array.isArray(text) ? text : [text];\n \n // State for the currently displayed text\n const [displayedText, setDisplayedText] = useState<string[]>(textArray.map(() => ''));\n \n // State to track if typing is complete\n const [isComplete, setIsComplete] = useState(false);\n \n // State to track which text item we're currently typing\n const [currentTextIndex, setCurrentTextIndex] = useState(0);\n \n // State to track the character position within the current text\n const [charIndex, setCharIndex] = useState(0);\n\n useEffect(() => {\n // Reset state when text changes\n setDisplayedText(textArray.map(() => ''));\n setIsComplete(false);\n setCurrentTextIndex(0);\n setCharIndex(0);\n }, [text]);\n\n useEffect(() => {\n // If all text is typed, call onComplete and return\n if (isComplete) {\n if (onComplete) onComplete();\n return;\n }\n\n // Get the current text we're typing\n const currentText = textArray[currentTextIndex];\n \n // If we've typed all characters in the current text\n if (charIndex >= currentText.length) {\n // If we've typed all texts, we're done\n if (currentTextIndex >= textArray.length - 1) {\n setIsComplete(true);\n return;\n }\n \n // Otherwise, move to the next text after a pause\n const timeout = setTimeout(() => {\n setCurrentTextIndex(prev => prev + 1);\n setCharIndex(0);\n }, pauseTime);\n \n return () => clearTimeout(timeout);\n }\n\n // Type the next character\n const timeout = setTimeout(() => {\n setDisplayedText(prev => {\n const newText = [...prev];\n newText[currentTextIndex] = currentText.substring(0, charIndex + 1);\n return newText;\n });\n setCharIndex(prev => prev + 1);\n }, typingSpeed);\n\n return () => clearTimeout(timeout);\n }, [textArray, currentTextIndex, charIndex, isComplete, onComplete, pauseTime, typingSpeed]);\n\n return (\n <>\n {displayedText.map((text, index) => (\n <React.Fragment key={index}>\n {text}\n {showCursor && index === currentTextIndex && !isComplete && (\n <Text\n as=\"span\"\n display=\"inline-block\"\n width=\"0.1em\"\n height=\"1em\"\n backgroundColor={cursorColor}\n style={{\n animation: 'blink 1s step-end infinite',\n verticalAlign: 'text-bottom',\n marginLeft: '1px',\n ...textStyle\n }}\n />\n )}\n </React.Fragment>\n ))}\n </>\n );\n};\n\nexport default TypewriterEffect;\n","import React from 'react';\nimport { Element, Text, useInView, useTheme } from 'app-studio';\nimport { TitleProps } from './Title.props';\nimport { useTitleState } from './Title.state';\nimport { HighlightStyles, LineHeights, TitleSizes } from './Title.style';\nimport TypewriterEffect from './TypewriterEffect';\n\nfunction escapeRegExp(string: string): string {\n return string.replace(/[.*+?^${}()|[\\\\]\\\\/g, '\\\\$&');\n}\n\nconst TitleView: React.FC<TitleProps> = ({\n children,\n highlightText,\n highlightStyle = 'background',\n highlightColor = 'theme.primary',\n highlightSecondaryColor,\n size = 'xl',\n centered = false,\n views,\n highlightAnimate,\n animate,\n highlightTypewriter: propHighlightTypewriter = false,\n highlightTypewriterDuration = 3000,\n ...props\n}) => {\n const { ref, inView } = useInView();\n const { getColor, themeMode: ctxMode } = useTheme();\n const themeMode = props.themeMode || ctxMode;\n\n // Resolve colors, handling both theme colors and direct hex values\n const resolveColorValue = (colorValue: string) => {\n // If it's already a hex color, return it directly\n if (colorValue.startsWith('#')) {\n return colorValue;\n }\n // Otherwise, use the theme's getColor function\n return getColor(colorValue, { themeMode });\n };\n\n const resolvedColor = resolveColorValue(highlightColor);\n const resolvedSecondary = highlightSecondaryColor\n ? resolveColorValue(highlightSecondaryColor)\n : undefined;\n\n const { finalDisplayedText, activeHighlightTarget, highlightTypewriter } =\n useTitleState({\n children,\n highlightText,\n _isInView: inView,\n highlightTypewriter: propHighlightTypewriter,\n highlightTypewriterDuration,\n ...props,\n });\n\n const fontSize = TitleSizes[size];\n const lineHeight = LineHeights[size];\n\n // Get the text to display\n const text =\n typeof finalDisplayedText === 'string'\n ? finalDisplayedText\n : typeof children === 'string'\n ? children\n : '';\n\n if (typeof text === 'string' && activeHighlightTarget) {\n const pattern = new RegExp(\n `(${escapeRegExp(\n Array.isArray(activeHighlightTarget)\n ? activeHighlightTarget.join('|')\n : activeHighlightTarget\n )})`,\n 'gi'\n );\n\n const parts: Array<string | { highlight: boolean; text: string }> = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = pattern.exec(text))) {\n if (match.index > lastIndex) {\n parts.push(text.substring(lastIndex, match.index));\n }\n parts.push({ highlight: true, text: match[0] });\n lastIndex = match.index + match[0].length;\n }\n if (lastIndex < text.length) {\n parts.push(text.substring(lastIndex));\n }\n\n return (\n <Element\n ref={ref}\n as=\"h1\"\n fontSize={fontSize}\n lineHeight={`${lineHeight}px`}\n fontWeight=\"bold\"\n textAlign={centered ? 'center' : 'left'}\n animate={inView ? animate : undefined}\n {...views?.container}\n {...props}\n >\n {parts.map((part, idx) =>\n typeof part === 'string' ? (\n part\n ) : (\n <Text\n key={`${part.text}-${idx}`}\n as=\"span\"\n display=\"inline\"\n animate={inView ? highlightAnimate : undefined}\n {...HighlightStyles[highlightStyle](\n resolvedColor,\n resolvedSecondary\n )}\n {...views?.highlight}\n >\n {highlightTypewriter ? (\n <TypewriterEffect\n text={part.text}\n typingSpeed={Math.max(\n 30,\n highlightTypewriterDuration / (part.text.length * 10)\n )}\n showCursor={true}\n cursorColor=\"currentColor\"\n />\n ) : (\n part.text\n )}\n </Text>\n )\n )}\n </Element>\n );\n }\n\n // If highlightStyle is provided but no highlightText, apply the style to the entire title\n if (highlightStyle && !activeHighlightTarget) {\n return (\n <Element\n ref={ref}\n as=\"h1\"\n fontSize={fontSize}\n lineHeight={`${lineHeight}px`}\n fontWeight=\"bold\"\n textAlign={centered ? 'center' : 'left'}\n animate={inView ? animate : undefined}\n {...views?.container}\n {...props}\n >\n <Text\n as=\"span\"\n display=\"inline\"\n animate={inView ? highlightAnimate : undefined}\n {...HighlightStyles[highlightStyle](resolvedColor, resolvedSecondary)}\n {...views?.highlight}\n >\n {highlightTypewriter ? (\n <TypewriterEffect\n text={text}\n typingSpeed={Math.max(\n 30,\n highlightTypewriterDuration / (text.length * 10)\n )}\n showCursor={true}\n cursorColor=\"currentColor\"\n />\n ) : (\n text\n )}\n </Text>\n </Element>\n );\n }\n\n // Default case - no highlighting\n return (\n <Element\n ref={ref}\n as=\"h1\"\n fontSize={fontSize}\n lineHeight={`${lineHeight}px`}\n fontWeight=\"bold\"\n textAlign={centered ? 'center' : 'left'}\n animate={inView ? animate : undefined}\n {...views?.container}\n {...props}\n >\n {text}\n </Element>\n );\n};\n\nexport default TitleView;\n","import { useEffect, useState } from 'react';\nimport { TitleProps } from './Title.props';\n\n/**\n * Custom hook for managing Title component state\n */\nexport const useTitleState = (props: TitleProps) => {\n const {\n children, // Original children\n _isInView = false,\n alternateHighlightText = [],\n alternateAnimation = false, // Default to false as per prop definition\n alternateDuration = 3000,\n highlightText: initialHighlightText, // Renamed to avoid confusion with the dynamic target\n highlightTypewriter = false,\n highlightTypewriterDuration = 1500,\n } = props;\n\n // State for the final text to be displayed (could be original children or alternating text)\n const [finalDisplayedText, setFinalDisplayedText] =\n useState<React.ReactNode>(children);\n\n // State for the text that should be actively highlighted (could be initialHighlightText or a word from alternateHighlightText)\n const [activeHighlightTarget, setActiveHighlightTarget] = useState<\n string | string[] | undefined\n >(initialHighlightText);\n\n // We don't need state for typewriter text anymore as we're using the TypewriterEffect component\n\n // Handle alternating highlight text animation\n useEffect(() => {\n // If not using alternating animation or conditions not met, reset to initial/non-alternating state\n if (\n !alternateAnimation ||\n alternateHighlightText.length === 0 ||\n !_isInView ||\n typeof children !== 'string' || // Base text must be a string for replacement\n typeof initialHighlightText !== 'string' // Placeholder must be a string\n ) {\n setFinalDisplayedText(children);\n setActiveHighlightTarget(initialHighlightText);\n return () => {};\n }\n\n // Proceed with alternating animation\n const baseText = children as string;\n const placeholder = initialHighlightText as string;\n let currentIndex = 0;\n\n // Function to update the state for alternating text\n const updateAlternatingState = (index: number) => {\n const currentWordToHighlight = alternateHighlightText[index];\n // Replace the placeholder in the baseText with the current alternating word\n const regex = new RegExp(placeholder, 'gi');\n const newContent = baseText.replace(regex, currentWordToHighlight);\n\n setFinalDisplayedText(newContent);\n setActiveHighlightTarget(currentWordToHighlight); // Set the current word as the highlight target\n };\n\n // Set initial alternating state\n updateAlternatingState(currentIndex);\n\n // Create interval to cycle through the alternateHighlightText array\n const interval = setInterval(() => {\n currentIndex = (currentIndex + 1) % alternateHighlightText.length;\n updateAlternatingState(currentIndex);\n }, alternateDuration);\n\n return () => clearInterval(interval);\n }, [\n alternateAnimation,\n alternateHighlightText,\n alternateDuration,\n initialHighlightText, // Depends on the placeholder\n children,\n _isInView,\n ]);\n\n // We don't need a separate effect for typewriter animation anymore\n // as we're using the TypewriterEffect component directly in the view\n\n return {\n finalDisplayedText, // This is the text that TitleView should render\n activeHighlightTarget, // This is the text that TitleView should highlight\n highlightTypewriter, // Whether typewriter effect is enabled\n };\n};\n","import React from 'react';\nimport { ViewProps } from 'app-studio';\nimport { ToggleViewProps } from './Toggle.props';\nimport { Center } from 'app-studio';\n\ninterface Props extends ToggleViewProps {\n views?: {\n container?: ViewProps;\n };\n}\n\nconst ToggleView: React.FC<Props> = ({\n children,\n shape = 'rounded',\n variant = 'ghost',\n isHovered,\n setIsHovered,\n isDisabled,\n isToggle,\n setIsToggled,\n onToggle,\n views,\n ...props\n}) => {\n const toggleColor = !isDisabled ? 'color.trueGray.400' : 'theme.disabled';\n const isActive = !!(isToggle || isHovered);\n const toggleVariants: { [key: string]: ViewProps } = {\n outline: {\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: 'color.trueGray.400',\n },\n link: {\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: isActive ? toggleColor : 'transparent',\n textDecoration: 'underline',\n },\n ghost: {},\n };\n\n const handleHover = () => setIsHovered(!isHovered);\n\n const handleToggle = () => {\n if (!isDisabled) {\n setIsToggled((prev) => {\n const newState = !prev;\n if (onToggle) {\n onToggle(newState);\n }\n return newState;\n });\n }\n };\n\n return (\n <Center\n role=\"Toggle\"\n padding={shape === 'pillShaped' ? '10px 12px' : '8px'}\n width=\"fit-content\"\n color={isActive ? 'color.white' : toggleColor}\n backgroundColor={isActive ? toggleColor : 'transparent'}\n onMouseEnter={handleHover}\n onMouseLeave={() => setIsHovered(false)}\n cursor={isDisabled ? 'not-allowed' : 'pointer'}\n borderRadius={shape === 'pillShaped' ? '50px' : '8px'}\n onClick={handleToggle}\n {...toggleVariants[variant]}\n {...props}\n {...views?.container}\n >\n {children}\n </Center>\n );\n};\nexport default ToggleView;\n","import React, { useEffect } from 'react';\nimport { ToggleProps } from './Toggle/Toggle.props';\nimport { useToggleState } from './Toggle/Toggle.state';\nimport ToggleView from './Toggle/Toggle.view';\n// Destructuring properties from ToggleProps to be used within the ToggleComponent.\nconst ToggleComponent = ({\n children,\n shape,\n variant,\n isDisabled,\n // Assigning a default value of false to the isToggled property if none is provided.\n isToggled = false,\n onToggle,\n ...props\n}: ToggleProps) => {\n // Initializing toggle state and set state functions using the custom hook useToggleState.\n const { isHovered, setIsHovered, isToggle, setIsToggled } =\n useToggleState(isToggled);\n // Creating an effect that updates the isToggled state whenever the isToggled prop changes.\n useEffect(() => {\n setIsToggled(isToggled);\n }, [isToggled]);\n // Beginning of the JSX block to render the Toggle view component.\n return (\n <ToggleView\n shape={shape}\n variant={variant}\n isDisabled={isDisabled}\n isHovered={isHovered}\n setIsHovered={setIsHovered}\n isToggle={isToggle}\n setIsToggled={setIsToggled}\n onToggle={onToggle}\n {...props}\n >\n {children}\n </ToggleView>\n );\n};\nexport const Toggle = ToggleComponent;\n","import { useState } from 'react';\n// Declares the useToggleState function which takes defaultToggled parameter to initialize the toggle state.\nexport const useToggleState = (defaultToggled: boolean) => {\n // Creates a stateful value isHovered for tracking hover state and a function setIsHovered to update that state, initially false.\n const [isHovered, setIsHovered] = useState(false);\n // Creates a stateful value isToggle to store the current toggle state and a function setIsToggled to modify it, initialized with defaultToggled.\n const [isToggle, setIsToggled] = useState(defaultToggled);\n // Returns an object containing the current states and the functions to update them for external use.\n return { isHovered, setIsHovered, isToggle, setIsToggled };\n};\n","import React, { useCallback } from 'react';\nimport { Horizontal } from 'app-studio';\nimport { Toggle } from '../../Toggle/Toggle';\nimport { ToggleGroupViewProps } from './ToggleGroup.props';\n\n// ToggleGroupView component declaration with destructured properties from props.\nexport const ToggleGroupView = ({\n // Prop 'items' defines the list of toggle elements to be rendered.\n items,\n // Prop 'onToggleChange' is a callback function triggered when the toggle state changes.\n onToggleChange,\n // Prop 'activeToggles' holds the array of active toggle identifiers.\n activeToggles,\n // Prop 'setActiveToggles' is a function to update the active toggle states.\n setActiveToggles,\n // Prop 'shape' with default value 'rounded', determines the shape of the toggle buttons.\n shape = 'rounded',\n // Prop 'variant' with default value 'ghost' represents the visual style variant of the toggles.\n variant = 'ghost',\n views,\n}: ToggleGroupViewProps) => {\n // handleToggle is a memoized callback that handles the toggle state changes.\n const handleToggle = useCallback(\n (id: string, isActive: boolean) => {\n setActiveToggles((prevActiveToggles) => {\n let newActiveToggles;\n if (isActive) {\n newActiveToggles = prevActiveToggles.includes(id)\n ? prevActiveToggles\n : [...prevActiveToggles, id];\n } else {\n newActiveToggles = prevActiveToggles.filter(\n (toggleId) => toggleId !== id\n );\n }\n onToggleChange?.(newActiveToggles);\n return newActiveToggles;\n });\n },\n [onToggleChange, setActiveToggles]\n );\n return (\n <Horizontal role=\"ToggleGroup\" display=\"flex\" gap={5} {...views?.container}>\n {items.map((item: any) => (\n <Toggle\n role={`toggle-${item.id}`}\n key={item.id}\n shape={shape}\n variant={variant}\n isToggled={activeToggles.includes(item.id) || item.isActive}\n onToggle={(state) => handleToggle(item.id, state)}\n isDisabled={item.isDisabled}\n views={views?.toggle}\n >\n {item.value}\n </Toggle>\n ))}\n </Horizontal>\n );\n};\n","import React from 'react';\nimport { View } from 'app-studio';\nimport { DragAndDropViewProps } from './DragAndDrop.props';\n\nexport const DragAndDropView: React.FC<DragAndDropViewProps> = ({\n items,\n renderItem,\n containerProps,\n itemProps,\n draggedIndex,\n itemRefs,\n handleDragStart,\n views,\n themeMode: elementMode,\n}) => (\n <View\n overflow=\"hidden\"\n position=\"relative\"\n {...containerProps}\n {...views?.container}\n >\n {items.map((item, index) => (\n <View\n key={index}\n ref={(el) => (itemRefs.current[index] = el as HTMLDivElement)}\n onMouseDown={(e: React.MouseEvent) => handleDragStart(e, index)}\n onTouchStart={(e: React.TouchEvent) => handleDragStart(e, index)}\n position=\"relative\"\n cursor=\"grab\"\n transition=\"transform 0.2s\"\n backgroundColor={\n draggedIndex === index ? 'color.gray.100' : 'transparent'\n }\n {...itemProps}\n {...views?.item}\n >\n {renderItem ? renderItem(item, index) : item}\n </View>\n ))}\n </View>\n);\n","import React from 'react';\nimport { DragAndDropProps } from './DragAndDrop/DragAndDrop.props';\nimport { useDragAndDropState } from './DragAndDrop/DragAndDrop.state';\nimport { DragAndDropView } from './DragAndDrop/DragAndDrop.view';\n\nexport const DragAndDropComponent: React.FC<DragAndDropProps> = (props) => {\n const { items, draggedIndex, itemRefs, handleDragStart } =\n useDragAndDropState(props);\n\n return (\n <DragAndDropView\n {...props}\n items={items}\n draggedIndex={draggedIndex}\n itemRefs={itemRefs}\n handleDragStart={handleDragStart}\n />\n );\n};\n\nexport const DragAndDrop = DragAndDropComponent;\n","import { useState, useRef, useCallback, useEffect } from 'react';\nimport { DragAndDropProps } from './DragAndDrop.props';\n\nexport const useDragAndDropState = ({\n items: initialItems,\n onChange,\n}: DragAndDropProps) => {\n const [items, setItems] = useState(initialItems);\n const [draggedItem, setDraggedItem] = useState<any>(null);\n const [draggedIndex, setDraggedIndex] = useState<number | null>(null);\n const dragStartPosRef = useRef({ x: 0, y: 0 });\n const itemRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n const handleDragStart = useCallback(\n (e: React.MouseEvent | React.TouchEvent, index: number) => {\n e.preventDefault();\n document.body.style.cursor = 'grabbing';\n\n const clientX =\n 'touches' in e ? e.touches[0].clientX : (e as React.MouseEvent).clientX;\n const clientY =\n 'touches' in e ? e.touches[0].clientY : (e as React.MouseEvent).clientY;\n\n dragStartPosRef.current = { x: clientX, y: clientY };\n setDraggedIndex(index);\n setDraggedItem(items[index]);\n },\n [items]\n );\n\n const handleDragMove = useCallback(\n (e: MouseEvent | TouchEvent) => {\n if (draggedIndex === null) return;\n\n const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX;\n const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY;\n\n const draggedElement = itemRefs.current[draggedIndex];\n if (!draggedElement) return;\n\n const offsetX = clientX - dragStartPosRef.current.x;\n const offsetY = clientY - dragStartPosRef.current.y;\n\n draggedElement.style.transform = `translate(${offsetX}px, ${offsetY}px)`;\n draggedElement.style.zIndex = '1000';\n\n // Find the item being hovered over\n const hoveredIndex = itemRefs.current.findIndex((itemRef, index) => {\n if (!itemRef || index === draggedIndex) return false;\n const rect = itemRef.getBoundingClientRect();\n return clientY >= rect.top && clientY <= rect.bottom;\n });\n\n if (hoveredIndex !== -1 && hoveredIndex !== draggedIndex) {\n const newItems = [...items];\n const [removed] = newItems.splice(draggedIndex, 1);\n newItems.splice(hoveredIndex, 0, removed);\n setItems(newItems);\n setDraggedIndex(hoveredIndex);\n onChange?.(newItems);\n dragStartPosRef.current = { x: clientX, y: clientY };\n }\n },\n [draggedIndex, items, onChange]\n );\n\n const handleDragEnd = useCallback(() => {\n document.body.style.cursor = '';\n\n itemRefs.current.forEach((el) => {\n if (el) {\n el.style.transform = '';\n el.style.zIndex = '';\n }\n });\n\n setDraggedIndex(null);\n setDraggedItem(null);\n }, [draggedIndex]);\n\n useEffect(() => {\n if (draggedIndex !== null) {\n window.addEventListener('mousemove', handleDragMove);\n window.addEventListener('touchmove', handleDragMove);\n window.addEventListener('mouseup', handleDragEnd);\n window.addEventListener('touchend', handleDragEnd);\n }\n\n return () => {\n window.removeEventListener('mousemove', handleDragMove);\n window.removeEventListener('touchmove', handleDragMove);\n window.removeEventListener('mouseup', handleDragEnd);\n window.removeEventListener('touchend', handleDragEnd);\n };\n }, [draggedIndex, handleDragMove, handleDragEnd]);\n\n return {\n items,\n draggedItem,\n draggedIndex,\n itemRefs,\n handleDragStart,\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { Size, Variant, Position, Alignment } from './DropdownMenu.type';\n\nexport const DropdownMenuSizes: Record<Size, ViewProps> = {\n sm: {\n padding: '6px 8px',\n fontSize: '14px',\n minWidth: '160px',\n },\n md: {\n padding: '8px 12px',\n fontSize: '16px',\n minWidth: '180px',\n },\n lg: {\n padding: '10px 16px',\n fontSize: '18px',\n minWidth: '200px',\n },\n};\n\nexport const DropdownMenuVariants: Record<Variant, ViewProps> = {\n default: {\n backgroundColor: 'color.white',\n color: 'color.gray.800',\n },\n filled: {\n backgroundColor: 'color.gray.100',\n color: 'color.gray.800',\n },\n outline: {\n backgroundColor: 'color.white',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n color: 'color.gray.800',\n },\n};\n\nexport const DropdownMenuItemStates = {\n hover: {\n backgroundColor: 'color.gray.100',\n },\n active: {\n backgroundColor: 'color.gray.200',\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n};\n\n// Helper function to calculate position based on side and alignment\nexport const getDropdownPosition = (\n side: Position = 'bottom',\n align: Alignment = 'start'\n): ViewProps => {\n const positions: Record<Position, ViewProps> = {\n top: {\n bottom: '100%',\n marginBottom: '8px',\n ...(align === 'start' && { left: 0 }),\n ...(align === 'center' && { left: '50%', transform: 'translateX(-50%)' }),\n ...(align === 'end' && { right: 0 }),\n },\n right: {\n left: '100%',\n marginLeft: '8px',\n ...(align === 'start' && { top: 0 }),\n ...(align === 'center' && { top: '50%', transform: 'translateY(-50%)' }),\n ...(align === 'end' && { bottom: 0 }),\n },\n bottom: {\n top: '100%',\n marginTop: '8px',\n ...(align === 'start' && { left: 0 }),\n ...(align === 'center' && { left: '50%', transform: 'translateX(-50%)' }),\n ...(align === 'end' && { right: 0 }),\n },\n left: {\n right: '100%',\n marginRight: '8px',\n ...(align === 'start' && { top: 0 }),\n ...(align === 'center' && { top: '50%', transform: 'translateY(-50%)' }),\n ...(align === 'end' && { bottom: 0 }),\n },\n };\n\n return positions[side];\n};\n","import React, { createContext, useContext, useRef, useState } from 'react';\nimport { View, ViewProps } from 'app-studio';\nimport {\n DropdownMenuContextType,\n DropdownMenuItem as DropdownMenuItemType,\n Position,\n Alignment,\n} from './DropdownMenu.type';\nimport {\n DropdownMenuTriggerProps,\n DropdownMenuContentProps,\n DropdownMenuItemProps,\n DropdownMenuDividerProps,\n} from './DropdownMenu.props';\nimport {\n DropdownMenuSizes,\n DropdownMenuVariants,\n DropdownMenuItemStates,\n getDropdownPosition,\n} from './DropdownMenu.style';\n\n// Create context for the DropdownMenu\nconst DropdownMenuContext = createContext<DropdownMenuContextType>({\n isOpen: false,\n setIsOpen: () => {},\n activeSubmenuId: null,\n setActiveSubmenuId: () => {},\n size: 'md',\n variant: 'default',\n});\n\n// Provider component for the DropdownMenu context\nexport const DropdownMenuProvider: React.FC<{\n children: React.ReactNode;\n value: DropdownMenuContextType;\n}> = ({ children, value }) => {\n return (\n <DropdownMenuContext.Provider value={value}>\n {children}\n </DropdownMenuContext.Provider>\n );\n};\n\n// Hook to use the DropdownMenu context\nexport const useDropdownMenuContext = () => {\n const context = useContext(DropdownMenuContext);\n if (!context) {\n throw new Error(\n 'useDropdownMenuContext must be used within a DropdownMenuProvider'\n );\n }\n return context;\n};\n\n// DropdownMenu Trigger component\nexport const DropdownMenuTrigger: React.FC<DropdownMenuTriggerProps> = ({\n children,\n views,\n ...props\n}) => {\n const { isOpen, setIsOpen } = useDropdownMenuContext();\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n setIsOpen(!isOpen);\n };\n\n return (\n <View\n id=\"dropdown-trigger\"\n onClick={handleClick}\n cursor=\"pointer\"\n position=\"relative\"\n display=\"inline-block\"\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// DropdownMenu Content component\nexport const DropdownMenuContent: React.FC<DropdownMenuContentProps> = ({\n items,\n side = 'bottom',\n align = 'start',\n views,\n ...props\n}) => {\n const {\n isOpen, //activeSubmenuId, setActiveSubmenuId, size,\n variant,\n } = useDropdownMenuContext();\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <View\n id=\"dropdown-menu\"\n position=\"absolute\"\n zIndex={1000}\n borderRadius={4}\n boxShadow=\"0px 2px 8px rgba(0, 0, 0, 0.15)\"\n overflow=\"hidden\"\n {...getDropdownPosition(side, align)}\n {...DropdownMenuVariants[variant]}\n {...views?.menu}\n {...props}\n >\n {items.map((item, index) => {\n if (item.divider) {\n return <DropdownMenuDivider key={`divider-${index}`} views={views} />;\n }\n\n return <DropdownMenuItem key={item.id} item={item} views={views} />;\n })}\n </View>\n );\n};\n\n// DropdownMenu Item component\nexport const DropdownMenuItem: React.FC<DropdownMenuItemProps> = ({\n item,\n views,\n ...props\n}) => {\n const {\n activeSubmenuId,\n setActiveSubmenuId,\n size,\n //variant\n } = useDropdownMenuContext();\n\n const [isHovered, setIsHovered] = useState(false);\n const hasSubmenu = item.items && item.items.length > 0;\n const isSubmenuActive = activeSubmenuId === item.id;\n const itemRef = useRef<HTMLDivElement>(null);\n\n // Handle mouse enter event\n const handleMouseEnter = () => {\n setIsHovered(true);\n if (hasSubmenu) {\n setActiveSubmenuId(item.id);\n }\n };\n\n // Handle mouse leave event\n const handleMouseLeave = () => {\n setIsHovered(false);\n };\n\n // Handle click event\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (item.disabled) return;\n if (!hasSubmenu && item.onClick) {\n item.onClick();\n }\n };\n\n return (\n <View\n ref={itemRef}\n display=\"flex\"\n alignItems=\"center\"\n cursor={item.disabled ? 'not-allowed' : 'pointer'}\n opacity={item.disabled ? 0.5 : 1}\n position=\"relative\"\n {...DropdownMenuSizes[size]}\n _hover={!item.disabled ? DropdownMenuItemStates.hover : {}}\n backgroundColor={\n isHovered && !item.disabled ? 'color.gray.100' : 'transparent'\n }\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleClick}\n {...views?.item}\n {...props}\n >\n {item.icon && (\n <View marginRight={8} {...views?.icon}>\n {item.icon}\n </View>\n )}\n\n <View flexGrow={1}>{item.label}</View>\n\n {hasSubmenu && (\n <View marginLeft={8} {...views?.submenuIndicator}>\n <svg\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.59 16.59L13.17 12L8.59 7.41L10 6L16 12L10 18L8.59 16.59Z\"\n fill=\"currentColor\"\n />\n </svg>\n </View>\n )}\n\n {isSubmenuActive && hasSubmenu && (\n <DropdownMenuContent\n items={item.items || []}\n side=\"right\"\n align=\"start\"\n views={views}\n />\n )}\n </View>\n );\n};\n\n// DropdownMenu Divider component\nexport const DropdownMenuDivider: React.FC<DropdownMenuDividerProps> = ({\n views,\n ...props\n}) => {\n return (\n <View\n height=\"1px\"\n backgroundColor=\"color.gray.200\"\n margin=\"4px 0\"\n {...views?.divider}\n {...props}\n />\n );\n};\n\n// Main DropdownMenu View component\nexport const DropdownMenuView: React.FC<\n {\n trigger: React.ReactNode;\n items: DropdownMenuItemType[];\n side?: Position;\n align?: Alignment;\n views?: any;\n } & ViewProps\n> = ({\n trigger,\n items,\n side = 'bottom',\n align = 'start',\n views,\n\n themeMode: elementMode,\n ...props\n}) => {\n return (\n <View\n position=\"relative\"\n display=\"inline-block\"\n {...views?.container}\n {...props}\n >\n <DropdownMenuTrigger views={views}>{trigger}</DropdownMenuTrigger>\n\n <DropdownMenuContent\n items={items}\n side={side}\n align={align}\n views={views}\n />\n </View>\n );\n};\n","import React from 'react';\nimport {\n DropdownMenuProps,\n DropdownMenuType,\n} from './DropdownMenu/DropdownMenu.props';\nimport { useDropdownMenuState } from './DropdownMenu/DropdownMenu.state';\nimport {\n DropdownMenuProvider,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuDivider,\n DropdownMenuView,\n} from './DropdownMenu/DropdownMenu.view';\n\n/**\n * DropdownMenu component for displaying a menu when clicking on a trigger element.\n */\nconst DropdownMenuComponent: React.FC<DropdownMenuProps> = ({\n trigger,\n items,\n size = 'md',\n variant = 'default',\n side = 'bottom',\n align = 'start',\n defaultOpen = false,\n views,\n ...props\n}) => {\n const { isOpen, setIsOpen, activeSubmenuId, setActiveSubmenuId } =\n useDropdownMenuState(defaultOpen);\n\n return (\n <DropdownMenuProvider\n value={{\n isOpen,\n setIsOpen,\n activeSubmenuId,\n setActiveSubmenuId,\n size,\n variant,\n }}\n >\n <DropdownMenuView\n trigger={trigger}\n items={items}\n side={side}\n align={align}\n views={views}\n {...props}\n />\n </DropdownMenuProvider>\n );\n};\n\nexport const DropdownMenu = DropdownMenuComponent as DropdownMenuType;\n\n// Assign the sub-components to the main component\nDropdownMenu.Trigger = DropdownMenuTrigger;\nDropdownMenu.Content = DropdownMenuContent;\nDropdownMenu.Item = DropdownMenuItem;\nDropdownMenu.Divider = DropdownMenuDivider;\n","import { useState, useEffect } from 'react';\n\nexport const useDropdownMenuState = (defaultOpen: boolean = false) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [activeSubmenuId, setActiveSubmenuId] = useState<string | null>(null);\n\n // Close the dropdown menu when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const path = event.composedPath();\n const isOutside = !path.some(\n (element: any) =>\n element?.id === 'dropdown-menu' || element?.id === 'dropdown-trigger'\n );\n if (isOutside && isOpen) {\n setIsOpen(false);\n setActiveSubmenuId(null);\n }\n };\n\n // Close the dropdown menu when the window is resized\n const handleResize = () => {\n if (isOpen) {\n setIsOpen(false);\n setActiveSubmenuId(null);\n }\n };\n\n // Close the dropdown menu when the escape key is pressed\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n setIsOpen(false);\n setActiveSubmenuId(null);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n window.addEventListener('resize', handleResize);\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n window.removeEventListener('resize', handleResize);\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen]);\n\n return {\n isOpen,\n setIsOpen,\n activeSubmenuId,\n setActiveSubmenuId,\n };\n};\n","import { useState, useRef, useCallback, useMemo, useEffect } from 'react';\nimport { HoverCardProps } from './HoverCard.props';\n\n// Generate a unique ID for ARIA attributes\nconst generateId = (prefix: string) =>\n `${prefix}-${Math.random().toString(36).substring(2, 9)}`;\n\nexport const useHoverCardState = ({\n openDelay = 200,\n closeDelay = 300,\n}: Pick<HoverCardProps, 'openDelay' | 'closeDelay'> = {}) => {\n const [isOpen, setIsOpen] = useState(false);\n const openTimerRef = useRef<NodeJS.Timeout | null>(null);\n const closeTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n // Refs for trigger and content elements for positioning\n const triggerRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n\n // Unique IDs for ARIA attributes\n const contentId = useMemo(() => generateId('hovercard-content'), []);\n const triggerId = useMemo(() => generateId('hovercard-trigger'), []);\n\n const clearTimers = useCallback(() => {\n if (openTimerRef.current) {\n clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n const openCard = useCallback(() => {\n clearTimers(); // Clear any pending close\n if (!isOpen) {\n openTimerRef.current = setTimeout(() => {\n setIsOpen(true);\n }, openDelay);\n }\n }, [isOpen, openDelay, clearTimers]);\n\n const closeCard = useCallback(() => {\n clearTimers(); // Clear any pending open\n if (isOpen) {\n closeTimerRef.current = setTimeout(() => {\n setIsOpen(false);\n }, closeDelay);\n }\n }, [isOpen, closeDelay, clearTimers]);\n\n // Function specifically to cancel the close timer (e.g., when mouse enters content)\n const cancelCloseTimer = useCallback(() => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n // Cleanup timers on unmount\n useEffect(() => {\n return () => clearTimers();\n }, [clearTimers]);\n\n return {\n isOpen,\n openCard,\n closeCard,\n cancelCloseTimer,\n triggerRef,\n contentRef,\n contentId,\n triggerId,\n };\n};\n","import React, {\n createContext,\n useContext,\n Children,\n cloneElement,\n isValidElement,\n} from 'react';\nimport { View } from 'app-studio';\nimport { HoverCardContextType } from './HoverCard.type';\nimport {\n HoverCardContentProps,\n HoverCardTriggerProps,\n} from './HoverCard.props';\nimport { getContentPositionStyles } from './HoverCard.style';\nimport { useRect } from '../../../hooks/useRect';\n\n// Create context for the HoverCard\nconst HoverCardContext = createContext<HoverCardContextType>({\n isOpen: false,\n openCard: () => {},\n closeCard: () => {},\n cancelCloseTimer: () => {},\n triggerRef: { current: null },\n contentRef: { current: null },\n contentId: '',\n triggerId: '',\n});\n\nexport const HoverCardProvider: React.FC<{\n children: React.ReactNode;\n value: HoverCardContextType;\n}> = ({ children, value }) => {\n return (\n <HoverCardContext.Provider value={value}>\n {children}\n </HoverCardContext.Provider>\n );\n};\n\nexport const useHoverCardContext = () => {\n const context = useContext(HoverCardContext);\n if (!context) {\n throw new Error(\n 'useHoverCardContext must be used within a HoverCardProvider'\n );\n }\n return context;\n};\n\nexport const HoverCardTrigger: React.FC<HoverCardTriggerProps> = ({\n children,\n views,\n asChild = false,\n ...props\n}) => {\n const { openCard, closeCard, triggerRef, contentId, triggerId } =\n useHoverCardContext();\n\n const handleMouseEnter = () => openCard();\n const handleMouseLeave = () => closeCard();\n const handleFocus = () => openCard(); // For keyboard accessibility\n const handleBlur = () => closeCard(); // For keyboard accessibility\n\n const triggerProps = {\n ref: triggerRef,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onFocus: handleFocus,\n onBlur: handleBlur,\n id: triggerId,\n 'aria-describedby': contentId, // Link trigger to content for screen readers\n ...views?.container,\n ...props,\n };\n\n if (asChild && isValidElement(children)) {\n // Clone the child element and merge props\n const child = Children.only(children);\n return cloneElement(child, { ...triggerProps, ...child.props });\n }\n\n // Default: wrap children in a View\n return (\n <View position=\"relative\" display=\"inline-block\" {...triggerProps}>\n {children}\n </View>\n );\n};\n\nexport const HoverCardContent: React.FC<HoverCardContentProps> = ({\n children,\n views,\n side = 'bottom',\n align = 'center',\n sideOffset = 8,\n style: userStyle, // User provided style override\n backgroundColor = 'white',\n borderRadius = '4px',\n boxShadow = '0px 2px 8px rgba(0, 0, 0, 0.15)',\n padding = '12px',\n minWidth = '200px',\n maxWidth = '300px',\n ...props\n}) => {\n const {\n isOpen,\n cancelCloseTimer,\n closeCard,\n contentRef,\n triggerRef,\n contentId,\n triggerId,\n } = useHoverCardContext();\n\n // Use hook to measure trigger for positioning\n const triggerRect = useRect(triggerRef);\n\n // Calculate position based on trigger dimensions and side prop\n const positionStyles = getContentPositionStyles(\n triggerRect,\n side,\n align,\n sideOffset\n );\n\n const handleMouseEnter = () => cancelCloseTimer(); // Keep card open if mouse enters content\n const handleMouseLeave = () => closeCard();\n\n if (!isOpen) {\n return null; // Don't render content if not open\n }\n\n return (\n <View\n ref={contentRef}\n id={contentId}\n role=\"tooltip\" // Use tooltip role for accessibility\n aria-labelledby={triggerId} // Associate content with trigger\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n backgroundColor={backgroundColor}\n borderRadius={borderRadius}\n boxShadow={boxShadow}\n padding={padding}\n minWidth={minWidth}\n maxWidth={maxWidth}\n zIndex={1000}\n // Combine calculated position styles with user styles\n style={{\n ...positionStyles,\n ...userStyle, // Allow user override\n }}\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n );\n};\n","import React from 'react';\nimport { HoverCardProps, HoverCardType } from './HoverCard/HoverCard.props';\nimport { useHoverCardState } from './HoverCard/HoverCard.state';\nimport {\n HoverCardProvider,\n HoverCardTrigger,\n HoverCardContent,\n} from './HoverCard/HoverCard.view';\nimport { View } from 'app-studio';\n\n/**\n * HoverCard component displays floating content when hovering over a trigger element.\n * Supports configurable open and close delays for a smoother user experience.\n */\nconst HoverCardComponent: React.FC<HoverCardProps> = ({\n children,\n views,\n openDelay,\n closeDelay,\n ...props\n}) => {\n const hoverCardState = useHoverCardState({ openDelay, closeDelay });\n\n return (\n <HoverCardProvider value={hoverCardState}>\n <View\n position=\"relative\"\n display=\"inline-block\"\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n </HoverCardProvider>\n );\n};\n\nexport const HoverCard = HoverCardComponent as HoverCardType;\n\nHoverCard.Trigger = HoverCardTrigger;\nHoverCard.Content = HoverCardContent;\n","import { ViewProps } from 'app-studio';\nimport { CSSProperties } from 'react';\nimport { Alignment, Side } from './HoverCard.type';\n\n// Basic positioning styles for the content\nexport const ContentPositions: Record<\n Side,\n (align: Alignment, sideOffset?: number) => ViewProps\n> = {\n top: (align, sideOffset = 8) => ({\n position: 'absolute',\n bottom: '100%',\n marginBottom: `${sideOffset}px`,\n ...(align === 'start' && { left: 0 }),\n ...(align === 'center' && { left: '50%', transform: 'translateX(-50%)' }),\n ...(align === 'end' && { right: 0 }),\n }),\n right: (align, sideOffset = 8) => ({\n position: 'absolute',\n left: '100%',\n marginLeft: `${sideOffset}px`,\n ...(align === 'start' && { top: 0 }),\n ...(align === 'center' && { top: '50%', transform: 'translateY(-50%)' }),\n ...(align === 'end' && { bottom: 0 }),\n }),\n bottom: (align, sideOffset = 8) => ({\n position: 'absolute',\n top: '100%',\n marginTop: `${sideOffset}px`,\n ...(align === 'start' && { left: 0 }),\n ...(align === 'center' && { left: '50%', transform: 'translateX(-50%)' }),\n ...(align === 'end' && { right: 0 }),\n }),\n left: (align, sideOffset = 8) => ({\n position: 'absolute',\n right: '100%',\n marginRight: `${sideOffset}px`,\n ...(align === 'start' && { top: 0 }),\n ...(align === 'center' && { top: '50%', transform: 'translateY(-50%)' }),\n ...(align === 'end' && { bottom: 0 }),\n }),\n};\n\n// More advanced positioning using element measurements\nexport const getContentPositionStyles = (\n triggerRect: DOMRect | null,\n side: Side = 'bottom',\n align: Alignment = 'center',\n sideOffset: number = 8\n): CSSProperties => {\n if (!triggerRect) {\n return { position: 'absolute', opacity: 0, pointerEvents: 'none' }; // Hide if trigger isn't measured\n }\n\n const styles: CSSProperties = {\n position: 'absolute',\n zIndex: 1000,\n };\n\n // Calculate position based on side and alignment\n switch (side) {\n case 'top':\n styles.bottom = '100%';\n styles.marginBottom = sideOffset;\n if (align === 'start') {\n styles.left = 0;\n } else if (align === 'center') {\n styles.left = '50%';\n styles.transform = 'translateX(-50%)';\n } else if (align === 'end') {\n styles.right = 0;\n }\n break;\n case 'right':\n styles.left = '100%';\n styles.marginLeft = sideOffset;\n if (align === 'start') {\n styles.top = 0;\n } else if (align === 'center') {\n styles.top = '50%';\n styles.transform = 'translateY(-50%)';\n } else if (align === 'end') {\n styles.bottom = 0;\n }\n break;\n case 'bottom':\n styles.top = '100%';\n styles.marginTop = sideOffset;\n if (align === 'start') {\n styles.left = 0;\n } else if (align === 'center') {\n styles.left = '50%';\n styles.transform = 'translateX(-50%)';\n } else if (align === 'end') {\n styles.right = 0;\n }\n break;\n case 'left':\n styles.right = '100%';\n styles.marginRight = sideOffset;\n if (align === 'start') {\n styles.top = 0;\n } else if (align === 'center') {\n styles.top = '50%';\n styles.transform = 'translateY(-50%)';\n } else if (align === 'end') {\n styles.bottom = 0;\n }\n break;\n }\n\n return styles;\n};\n","import { useState, useCallback, useLayoutEffect } from 'react';\n\n/**\n * A hook that returns the DOMRect of an element.\n * @param ref React ref object for the element to measure\n * @returns DOMRect of the element or null if the element is not available\n */\nexport const useRect = <T extends HTMLElement>(\n ref: React.RefObject<T>\n): DOMRect | null => {\n const [rect, setRect] = useState<DOMRect | null>(null);\n\n const updateRect = useCallback(() => {\n if (ref.current) {\n setRect(ref.current.getBoundingClientRect());\n }\n }, [ref]);\n\n useLayoutEffect(() => {\n if (!ref.current) return;\n\n updateRect();\n\n // Update on resize and scroll\n window.addEventListener('resize', updateRect);\n window.addEventListener('scroll', updateRect);\n\n return () => {\n window.removeEventListener('resize', updateRect);\n window.removeEventListener('scroll', updateRect);\n };\n }, [ref, updateRect]);\n\n return rect;\n};\n","import { ViewProps } from 'app-studio';\nimport { Orientation, Size, Variant } from './Menubar.type';\n\nexport const MenubarSizes: Record<Size, ViewProps> = {\n sm: {\n padding: '6px 10px',\n fontSize: '14px',\n },\n md: {\n padding: '8px 12px',\n fontSize: '16px',\n },\n lg: {\n padding: '10px 16px',\n fontSize: '18px',\n },\n};\n\nexport const MenubarVariants: Record<Variant, ViewProps> = {\n default: {\n backgroundColor: 'transparent',\n color: 'color.gray.800',\n },\n filled: {\n backgroundColor: 'color.gray.100',\n color: 'color.gray.800',\n },\n outline: {\n backgroundColor: 'transparent',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n color: 'color.gray.800',\n },\n};\n\nexport const MenubarOrientations: Record<Orientation, ViewProps> = {\n horizontal: {\n flexDirection: 'row',\n },\n vertical: {\n flexDirection: 'column',\n },\n};\n\nexport const MenubarItemStates = {\n active: {\n backgroundColor: 'color.gray.200',\n fontWeight: 'bold',\n },\n hover: {\n backgroundColor: 'color.gray.100',\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n};\n\nexport const getMenubarContentPosition = (\n orientation: Orientation\n): ViewProps => {\n if (orientation === 'horizontal') {\n return {\n top: '100%',\n left: 0,\n };\n }\n\n return {\n top: 0,\n left: '100%',\n };\n};\n","import React, { createContext, useContext } from 'react';\nimport { View, ViewProps } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Vertical } from 'app-studio';\nimport {\n MenubarContextType,\n MenubarItem as MenubarItemType,\n Orientation,\n Size,\n Variant,\n} from './Menubar.type';\nimport {\n MenubarRootProps,\n MenubarMenuProps,\n MenubarTriggerProps,\n MenubarContentProps,\n MenubarItemProps,\n MenubarSeparatorProps,\n} from './Menubar.props';\nimport {\n MenubarSizes,\n MenubarVariants,\n MenubarOrientations,\n MenubarItemStates,\n getMenubarContentPosition,\n} from './Menubar.style';\n\n// Create context for the Menubar\nconst MenubarContext = createContext<MenubarContextType>({\n activeMenuId: null,\n setActiveMenuId: () => {},\n openMenuId: null,\n setOpenMenuId: () => {},\n isMenuOpen: () => false,\n toggleMenu: () => {},\n orientation: 'horizontal',\n size: 'md',\n variant: 'default',\n});\n\n// Hook to use the Menubar context\nexport const useMenubarContext = () => useContext(MenubarContext);\n\n// Provider component for the Menubar context\nexport const MenubarProvider: React.FC<{\n value: MenubarContextType;\n children: React.ReactNode;\n}> = ({ value, children }) => {\n return (\n <MenubarContext.Provider value={value}>{children}</MenubarContext.Provider>\n );\n};\n\n// Menubar Root component\nexport const MenubarRoot: React.FC<MenubarRootProps> = ({\n children,\n orientation = 'horizontal',\n size = 'md',\n variant = 'default',\n views,\n ...props\n}) => {\n const Container = orientation === 'horizontal' ? Horizontal : Vertical;\n\n return (\n <Container\n role=\"menubar\"\n aria-orientation={orientation}\n {...MenubarOrientations[orientation]}\n {...MenubarVariants[variant]}\n {...views?.container}\n {...props}\n >\n {children}\n </Container>\n );\n};\n\n// Menubar Menu component\nexport const MenubarMenu: React.FC<MenubarMenuProps> = ({\n children,\n id,\n disabled = false,\n views,\n}) => {\n const { orientation } = useMenubarContext();\n const Container = orientation === 'horizontal' ? Horizontal : Vertical;\n\n return (\n <Container\n role=\"none\"\n position=\"relative\"\n opacity={disabled ? 0.5 : 1}\n pointerEvents={disabled ? 'none' : 'auto'}\n {...views?.menu}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n // Pass the menuId to MenubarTrigger and MenubarContent\n return React.cloneElement(child, {\n ...child.props,\n menuId: id,\n });\n }\n return child;\n })}\n </Container>\n );\n};\n\n// Menubar Trigger component\nexport const MenubarTrigger: React.FC<MenubarTriggerProps> = ({\n children,\n menuId,\n disabled = false,\n views,\n}) => {\n const { activeMenuId, setActiveMenuId, toggleMenu, isMenuOpen, size } =\n useMenubarContext();\n\n const isActive = activeMenuId === menuId;\n const isOpen = isMenuOpen(menuId);\n\n const handleClick = () => {\n if (disabled) return;\n\n setActiveMenuId(menuId);\n toggleMenu(menuId);\n };\n\n return (\n <View\n id=\"menubar-trigger\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n aria-expanded={isOpen}\n userSelect=\"none\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n {...MenubarSizes[size]}\n {...(isActive ? MenubarItemStates.active : {})}\n {...(disabled ? MenubarItemStates.disabled : {})}\n _hover={!disabled ? MenubarItemStates.hover : {}}\n onClick={handleClick}\n {...views?.trigger}\n >\n {children}\n </View>\n );\n};\n\n// Menubar Content component\nexport const MenubarContent: React.FC<MenubarContentProps> = ({\n children,\n menuId,\n views,\n}) => {\n const { isMenuOpen, orientation } = useMenubarContext();\n\n const isOpen = isMenuOpen(menuId);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <View\n id=\"menubar-content\"\n role=\"menu\"\n position=\"absolute\"\n zIndex={1000}\n minWidth=\"200px\"\n backgroundColor=\"color.white\"\n borderRadius={4}\n boxShadow=\"0px 2px 8px rgba(0, 0, 0, 0.15)\"\n overflow=\"hidden\"\n {...getMenubarContentPosition(orientation)}\n {...views?.content}\n >\n {children}\n </View>\n );\n};\n\n// Menubar Item component\nexport const MenubarItem: React.FC<MenubarItemProps> = ({\n children,\n // id,\n icon,\n disabled = false,\n onClick,\n views,\n}) => {\n const { size } = useMenubarContext();\n\n const handleClick = () => {\n if (disabled || !onClick) return;\n onClick();\n };\n\n return (\n <View\n role=\"menuitem\"\n cursor={disabled ? 'not-allowed' : 'pointer'}\n userSelect=\"none\"\n display=\"flex\"\n alignItems=\"center\"\n opacity={disabled ? 0.5 : 1}\n {...MenubarSizes[size]}\n _hover={!disabled ? MenubarItemStates.hover : {}}\n onClick={handleClick}\n {...views?.item}\n >\n {icon && (\n <View marginRight={8} {...views?.icon}>\n {icon}\n </View>\n )}\n {children}\n </View>\n );\n};\n\n// Menubar Separator component\nexport const MenubarSeparator: React.FC<MenubarSeparatorProps> = ({\n views,\n}) => {\n return (\n <View\n role=\"separator\"\n height=\"1px\"\n backgroundColor=\"color.gray.200\"\n margin=\"4px 0\"\n {...views?.separator}\n />\n );\n};\n\n// Main Menubar View component\nexport const MenubarView: React.FC<\n {\n items: MenubarItemType[];\n orientation: Orientation;\n size: Size;\n variant: Variant;\n views?: any;\n } & ViewProps\n> = ({ items, orientation, size, variant, views, themeMode: elementMode }) => {\n return (\n <MenubarRoot\n orientation={orientation}\n size={size}\n variant={variant}\n views={views}\n >\n {items.map((item) => (\n <MenubarMenu\n key={item.id}\n id={item.id}\n disabled={item.disabled}\n views={views}\n >\n <MenubarTrigger menuId={item.id} views={views}>\n {item.icon && (\n <View marginRight={8} {...views?.icon}>\n {item.icon}\n </View>\n )}\n {item.label}\n </MenubarTrigger>\n\n {item.items && item.items.length > 0 && (\n <MenubarContent menuId={item.id} views={views}>\n {item.items.map((subItem, index) => {\n if (subItem.separator) {\n return (\n <MenubarSeparator\n key={`separator-${index}`}\n views={views}\n />\n );\n }\n\n return (\n <MenubarItem\n key={subItem.id}\n id={subItem.id}\n icon={subItem.icon}\n disabled={subItem.disabled}\n onClick={subItem.onClick}\n views={views}\n >\n {subItem.label}\n </MenubarItem>\n );\n })}\n </MenubarContent>\n )}\n </MenubarMenu>\n ))}\n </MenubarRoot>\n );\n};\n","import React from 'react';\nimport { MenubarProps, MenubarType } from './Menubar/Menubar.props';\nimport { useMenubarState } from './Menubar/Menubar.state';\nimport {\n MenubarProvider,\n MenubarRoot,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarItem,\n MenubarSeparator,\n MenubarView,\n} from './Menubar/Menubar.view';\n\n/**\n * Menubar component for creating horizontal or vertical menu bars with dropdown menus.\n */\nconst MenubarComponent: React.FC<MenubarProps> = ({\n items,\n orientation = 'horizontal',\n size = 'md',\n variant = 'default',\n defaultActiveMenuId = null,\n defaultOpenMenuId = null,\n views,\n ...props\n}) => {\n const {\n activeMenuId,\n setActiveMenuId,\n openMenuId,\n setOpenMenuId,\n isMenuOpen,\n toggleMenu,\n } = useMenubarState(defaultActiveMenuId, defaultOpenMenuId);\n\n return (\n <MenubarProvider\n value={{\n activeMenuId,\n setActiveMenuId,\n openMenuId,\n setOpenMenuId,\n isMenuOpen,\n toggleMenu,\n orientation,\n size,\n variant,\n }}\n >\n <MenubarView\n items={items}\n orientation={orientation}\n size={size}\n variant={variant}\n views={views}\n {...props}\n />\n </MenubarProvider>\n );\n};\n\nexport const Menubar = MenubarComponent as MenubarType;\n\n// Assign the sub-components to the main component\nMenubar.Root = MenubarRoot;\nMenubar.Menu = MenubarMenu;\nMenubar.Trigger = MenubarTrigger;\nMenubar.Content = MenubarContent;\nMenubar.Item = MenubarItem;\nMenubar.Separator = MenubarSeparator;\n","import { useState, useEffect } from 'react';\n\nexport const useMenubarState = (\n defaultActiveMenuId: string | null = null,\n defaultOpenMenuId: string | null = null\n) => {\n const [activeMenuId, setActiveMenuId] = useState<string | null>(\n defaultActiveMenuId\n );\n const [openMenuId, setOpenMenuId] = useState<string | null>(\n defaultOpenMenuId\n );\n\n const isMenuOpen = (menuId: string) => {\n return openMenuId === menuId;\n };\n\n const toggleMenu = (menuId: string) => {\n setOpenMenuId((prevOpenMenuId) => {\n return prevOpenMenuId === menuId ? null : menuId;\n });\n };\n\n // Close the open menu when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const path = event.composedPath();\n const isOutside = !path.some(\n (element: any) =>\n element?.id === 'menubar-content' || element?.id === 'menubar-trigger'\n );\n if (isOutside && openMenuId !== null) {\n setOpenMenuId(null);\n }\n };\n\n // Close the open menu when the escape key is pressed\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && openMenuId !== null) {\n setOpenMenuId(null);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [openMenuId]);\n\n return {\n activeMenuId,\n setActiveMenuId,\n openMenuId,\n setOpenMenuId,\n isMenuOpen,\n toggleMenu,\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { Size, Variant, Shape } from './Pagination.type';\n\nexport const PaginationSizes: Record<Size, ViewProps> = {\n sm: {\n fontSize: '12px',\n padding: '4px 8px',\n minWidth: '28px',\n height: '28px',\n },\n md: {\n fontSize: '14px',\n padding: '6px 12px',\n minWidth: '36px',\n height: '36px',\n },\n lg: {\n fontSize: '16px',\n padding: '8px 16px',\n minWidth: '44px',\n height: '44px',\n },\n};\n\nexport const PaginationVariants: Record<Variant, ViewProps> = {\n default: {\n backgroundColor: 'transparent',\n color: 'color.gray.800',\n _hover: {\n backgroundColor: 'color.gray.100',\n },\n },\n filled: {\n backgroundColor: 'color.gray.100',\n color: 'color.gray.800',\n _hover: {\n backgroundColor: 'color.gray.200',\n },\n },\n outline: {\n backgroundColor: 'transparent',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n color: 'color.gray.800',\n _hover: {\n backgroundColor: 'color.gray.100',\n },\n },\n};\n\nexport const PaginationShapes: Record<Shape, ViewProps> = {\n rounded: {\n borderRadius: '4px',\n },\n square: {\n borderRadius: '0px',\n },\n circular: {\n borderRadius: '50%',\n },\n};\n\nexport const ActivePageButtonStyles: ViewProps = {\n backgroundColor: 'color.blue.500',\n color: 'color.white',\n _hover: {\n backgroundColor: 'color.blue.600',\n },\n};\n\nexport const DisabledButtonStyles: ViewProps = {\n opacity: 0.5,\n cursor: 'not-allowed',\n _hover: {\n backgroundColor: 'transparent',\n },\n};\n","import React from 'react';\nimport { View } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { ChevronIcon } from '../../Icon/Icon';\nimport { PaginationProps } from './Pagination.props';\nimport {\n PaginationSizes,\n PaginationVariants,\n PaginationShapes,\n ActivePageButtonStyles,\n DisabledButtonStyles,\n} from './Pagination.style';\n\nexport const PaginationView: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n pageSize = 10,\n pageSizeOptions = [\n { label: '10 / page', value: 10 },\n { label: '20 / page', value: 20 },\n { label: '50 / page', value: 50 },\n { label: '100 / page', value: 100 },\n ],\n onPageSizeChange,\n showPageSizeSelector = false,\n showPageInfo = true,\n maxPageButtons = 5,\n showFirstLastButtons = false,\n size = 'md',\n variant = 'default',\n shape = 'rounded',\n visiblePageNumbers,\n views,\n ...props\n}) => {\n const handlePageChange = (page: number) => {\n if (page < 1 || page > totalPages || page === currentPage) {\n return;\n }\n onPageChange(page);\n };\n\n const handlePageSizeChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n if (onPageSizeChange) {\n onPageSizeChange(Number(e.target.value));\n }\n };\n\n const renderPageButton = (pageNumber: number | string, index: number) => {\n if (pageNumber === '...') {\n return (\n <View\n key={`ellipsis-${index}`}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n {...PaginationSizes[size]}\n {...views?.ellipsis}\n >\n ...\n </View>\n );\n }\n\n const isCurrentPage = pageNumber === currentPage;\n\n return (\n <View\n key={`page-${pageNumber}`}\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n cursor={isCurrentPage ? 'default' : 'pointer'}\n {...PaginationSizes[size]}\n {...PaginationVariants[variant]}\n {...PaginationShapes[shape]}\n {...(isCurrentPage ? ActivePageButtonStyles : {})}\n onClick={() => handlePageChange(pageNumber as number)}\n aria-label={`Page ${pageNumber}`}\n aria-current={isCurrentPage ? 'page' : undefined}\n {...(isCurrentPage ? views?.activePageButton : views?.pageButton)}\n >\n {pageNumber}\n </View>\n );\n };\n\n return (\n <Horizontal alignItems=\"center\" gap={8} {...views?.container} {...props}>\n {/* First page button */}\n {showFirstLastButtons && (\n <View\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n cursor={currentPage === 1 ? 'not-allowed' : 'pointer'}\n {...PaginationSizes[size]}\n {...PaginationVariants[variant]}\n {...PaginationShapes[shape]}\n {...(currentPage === 1 ? DisabledButtonStyles : {})}\n onClick={() => handlePageChange(1)}\n aria-label=\"First page\"\n disabled={currentPage === 1}\n {...views?.navigationButton}\n >\n <ChevronIcon orientation=\"left\" widthHeight={16} />\n <ChevronIcon orientation=\"left\" widthHeight={16} marginLeft=\"-8px\" />\n </View>\n )}\n\n {/* Previous page button */}\n <View\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n cursor={currentPage === 1 ? 'not-allowed' : 'pointer'}\n {...PaginationSizes[size]}\n {...PaginationVariants[variant]}\n {...PaginationShapes[shape]}\n {...(currentPage === 1 ? DisabledButtonStyles : {})}\n onClick={() => handlePageChange(currentPage - 1)}\n aria-label=\"Previous page\"\n disabled={currentPage === 1}\n {...views?.navigationButton}\n >\n <ChevronIcon orientation=\"left\" widthHeight={16} />\n </View>\n\n {/* Page buttons */}\n {visiblePageNumbers.map((pageNumber: number, index: number) =>\n renderPageButton(pageNumber, index)\n )}\n\n {/* Next page button */}\n <View\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n cursor={currentPage === totalPages ? 'not-allowed' : 'pointer'}\n {...PaginationSizes[size]}\n {...PaginationVariants[variant]}\n {...PaginationShapes[shape]}\n {...(currentPage === totalPages ? DisabledButtonStyles : {})}\n onClick={() => handlePageChange(currentPage + 1)}\n aria-label=\"Next page\"\n disabled={currentPage === totalPages}\n {...views?.navigationButton}\n >\n <ChevronIcon orientation=\"right\" widthHeight={16} />\n </View>\n\n {/* Last page button */}\n {showFirstLastButtons && (\n <View\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n cursor={currentPage === totalPages ? 'not-allowed' : 'pointer'}\n {...PaginationSizes[size]}\n {...PaginationVariants[variant]}\n {...PaginationShapes[shape]}\n {...(currentPage === totalPages ? DisabledButtonStyles : {})}\n onClick={() => handlePageChange(totalPages)}\n aria-label=\"Last page\"\n disabled={currentPage === totalPages}\n {...views?.navigationButton}\n >\n <ChevronIcon orientation=\"right\" widthHeight={16} />\n <ChevronIcon orientation=\"right\" widthHeight={16} marginLeft=\"-8px\" />\n </View>\n )}\n\n {/* Page information */}\n {showPageInfo && (\n <Text marginLeft={16} color=\"color.gray.600\" {...views?.pageInfo}>\n Page {currentPage} of {totalPages}\n </Text>\n )}\n\n {/* Page size selector */}\n {showPageSizeSelector && onPageSizeChange && (\n <View\n as=\"select\"\n marginLeft={16}\n padding=\"4px 8px\"\n borderRadius=\"4px\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor=\"color.gray.200\"\n backgroundColor=\"color.white\"\n cursor=\"pointer\"\n value={pageSize}\n onChange={handlePageSizeChange}\n {...views?.pageSizeSelector}\n >\n {pageSizeOptions.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </View>\n )}\n </Horizontal>\n );\n};\n","/**\n * Separator Styles\n *\n * Defines the styles for the Separator component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { Orientation, Variant, Thickness } from './Separator.type';\n\n/**\n * Orientation configurations for the Separator component\n */\nexport const SeparatorOrientations: Record<Orientation, ViewProps> = {\n horizontal: {\n width: '100%',\n height: 'auto',\n },\n vertical: {\n width: 'auto',\n height: '100%',\n },\n};\n\n/**\n * Variant configurations for the Separator component\n */\nexport const getSeparator = (themeMode: string): Record<Variant, string> => {\n return {\n solid: 'solid',\n dashed: 'dashed',\n dotted: 'dotted',\n };\n // Add dark mode conditional styling here\n};\n\n// For backward compatibility\nexport const SeparatorVariants = getSeparator('light');\n\n/**\n * Thickness configurations for the Separator component\n * Following the 4px grid system\n */\nexport const SeparatorThicknesses: Record<Thickness, string> = {\n thin: '1px',\n medium: '2px', // 0.5 × 4px grid\n thick: '4px', // 1 × 4px grid\n};\n\n/**\n * Default styles for the Separator component\n */\nexport const DefaultSeparatorStyles = {\n container: {\n transition: 'all 0.2s ease',\n },\n label: {\n fontSize: '14px',\n color: 'color.gray.500',\n paddingHorizontal: '8px', // 2 × 4px grid\n transition: 'all 0.2s ease',\n },\n};\n","/**\n * Separator View Component\n *\n * Renders a separator with various styles and states\n * according to the design guidelines.\n */\n\nimport React from 'react';\nimport { View } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { useTheme } from 'app-studio';\nimport { SeparatorProps } from './Separator.props';\nimport {\n SeparatorVariants,\n SeparatorThicknesses,\n DefaultSeparatorStyles,\n} from './Separator.style';\n\nexport const SeparatorView: React.FC<SeparatorProps> = ({\n orientation = 'horizontal',\n variant = 'solid',\n thickness = 'thin',\n color,\n spacing = '0px',\n label,\n decorative = false,\n views,\n themeMode: elementMode,\n ...props\n}) => {\n // Access theme if needed for future enhancements\n const { themeMode } = useTheme();\n // Use provided color or default from theme\n const separatorColor = color || 'color.gray.200';\n const borderStyle = SeparatorVariants[variant];\n const borderWidth = SeparatorThicknesses[thickness];\n\n // Set appropriate ARIA attributes based on decorative prop\n const ariaProps = decorative\n ? { 'aria-hidden': 'true' }\n : { role: 'separator', 'aria-orientation': orientation };\n\n // If there's a label, render a horizontal separator with the label in the middle\n if (label && orientation === 'horizontal') {\n return (\n <Horizontal\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"100%\"\n padding={spacing}\n {...ariaProps}\n {...props}\n >\n <View\n height=\"0px\"\n flexGrow={1}\n borderTopWidth={borderWidth}\n borderTopStyle={borderStyle as any}\n borderTopColor={separatorColor}\n {...DefaultSeparatorStyles.container}\n {...views?.container}\n />\n <Text {...DefaultSeparatorStyles.label} {...views?.label}>\n {label}\n </Text>\n <View\n height=\"0px\"\n flexGrow={1}\n borderTopWidth={borderWidth}\n borderTopStyle={borderStyle as any}\n borderTopColor={separatorColor}\n {...DefaultSeparatorStyles.container}\n {...views?.container}\n />\n </Horizontal>\n );\n }\n\n // For horizontal separator without label\n if (orientation === 'horizontal') {\n return (\n <View\n height=\"0px\"\n width=\"100%\"\n borderTopWidth={borderWidth}\n borderTopStyle={borderStyle as any}\n borderTopColor={separatorColor}\n padding={spacing}\n {...DefaultSeparatorStyles.container}\n {...ariaProps}\n {...views?.container}\n {...props}\n />\n );\n }\n\n // For vertical separator\n return (\n <View\n width=\"0px\"\n height=\"100%\"\n borderLeftWidth={borderWidth}\n borderLeftStyle={borderStyle as any}\n borderLeftColor={separatorColor}\n padding={spacing}\n {...DefaultSeparatorStyles.container}\n {...ariaProps}\n {...views?.container}\n {...props}\n />\n );\n};\n","import React from 'react';\nimport { SeparatorProps } from './Separator/Separator.props';\nimport { SeparatorView } from './Separator/Separator.view';\n\n/**\n * Separator component for visually or semantically separating content.\n */\nconst SeparatorComponent: React.FC<SeparatorProps> = (props) => {\n return <SeparatorView {...props} />;\n};\n\nexport const Separator = SeparatorComponent;\n\nexport const Divider = SeparatorComponent;\n","/**\n * Sidebar Styles\n *\n * Defines the styles for the Sidebar component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport {\n Position,\n Size,\n Variant,\n Elevation,\n TransitionPreset,\n} from './Sidebar.type';\n\n/**\n * Size configurations for the Sidebar component\n * Following the 4px grid system\n */\nexport const SidebarSizes: Record<\n Size,\n { expandedWidth: string; collapsedWidth: string }\n> = {\n sm: {\n expandedWidth: '240px', // 60 × 4px grid\n collapsedWidth: '64px', // 16 × 4px grid\n },\n md: {\n expandedWidth: '280px', // 70 × 4px grid\n collapsedWidth: '72px', // 18 × 4px grid\n },\n lg: {\n expandedWidth: '320px', // 80 × 4px grid\n collapsedWidth: '80px', // 20 × 4px grid\n },\n xl: {\n expandedWidth: '360px', // 90 × 4px grid\n collapsedWidth: '88px', // 22 × 4px grid\n },\n};\n\n/**\n * Variant styles for the Sidebar component\n */\nexport const getSidebar = (themeMode: string): Record<Variant, ViewProps> => {\n return {\n default: {\n backgroundColor: 'color.white',\n color: 'color.gray.800',\n\n transition: 'all 0.2s ease',\n },\n filled: {\n backgroundColor: 'color.gray.100',\n color: 'color.gray.800',\n\n transition: 'all 0.2s ease',\n },\n outline: {\n backgroundColor: 'color.white',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n color: 'color.gray.800',\n\n transition: 'all 0.2s ease',\n },\n subtle: {\n backgroundColor: 'color.gray.50',\n color: 'color.gray.800',\n\n transition: 'all 0.2s ease',\n },\n elevated: {\n backgroundColor: 'color.white',\n boxShadow: '0px 4px 8px rgba(0, 0, 0, 0.1)',\n color: 'color.gray.800',\n\n transition: 'all 0.2s ease',\n },\n };\n // Add dark mode conditional styling here\n};\n\n// For backward compatibility\nexport const SidebarVariants = getSidebar('light');\n\n/**\n * Position styles for the Sidebar component\n */\nexport const SidebarPositions: Record<Position, ViewProps> = {\n left: {\n left: 0,\n borderRightWidth: '1px',\n borderRightStyle: 'solid',\n borderRightColor: 'color.gray.200',\n },\n right: {\n right: 0,\n borderLeftWidth: '1px',\n borderLeftStyle: 'solid',\n borderLeftColor: 'color.gray.200',\n },\n};\n\n/**\n * Elevation styles for the Sidebar component\n */\nexport const SidebarElevations: Record<Elevation, ViewProps> = {\n none: {},\n low: {\n boxShadow: '0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24)',\n },\n medium: {\n boxShadow: '0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23)',\n },\n high: {\n boxShadow: '0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23)',\n },\n};\n\n/**\n * Transition presets for the Sidebar component\n */\nexport const SidebarTransitions: Record<TransitionPreset, string> = {\n fast: 'width 0.2s ease, transform 0.2s ease',\n normal: 'width 0.3s ease, transform 0.3s ease',\n slow: 'width 0.5s ease, transform 0.5s ease',\n bounce:\n 'width 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55), transform 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55)',\n};\n\n/**\n * Active item styles for the Sidebar navigation items\n */\nexport const SidebarItemActive: ViewProps = {\n backgroundColor: 'color.blue.50',\n color: 'color.blue.700',\n fontWeight: '600', // Semi-bold for active items\n borderLeftWidth: '3px',\n borderLeftStyle: 'solid',\n borderLeftColor: 'color.blue.600',\n};\n\n/**\n * Hover styles for the Sidebar navigation items\n */\nexport const SidebarItemHover: ViewProps = {\n backgroundColor: 'color.gray.100',\n transition: 'background-color 0.2s ease',\n};\n","import React, { createContext, useContext } from 'react';\nimport { View } from 'app-studio';\nimport { Vertical } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { ChevronIcon } from '../../Icon/Icon';\nimport {\n SidebarProps,\n SidebarHeaderProps,\n SidebarContentProps,\n SidebarFooterProps,\n} from './Sidebar.props';\nimport {\n SidebarSizes,\n SidebarVariants,\n SidebarPositions,\n SidebarElevations,\n SidebarTransitions,\n} from './Sidebar.style';\nimport { SidebarContextType } from './Sidebar.type';\nimport { Badge } from '../../Badge/Badge';\n\n// Create context for the Sidebar\nconst SidebarContext = createContext<SidebarContextType>({\n isExpanded: true,\n toggleExpanded: () => {},\n expand: () => {},\n collapse: () => {},\n position: 'left',\n size: 'md',\n variant: 'default',\n});\n\n// Hook to use the Sidebar context\nexport const useSidebarContext = () => useContext(SidebarContext);\n\n// Provider component for the Sidebar context\nexport const SidebarProvider: React.FC<{\n value: SidebarContextType;\n children: React.ReactNode;\n}> = ({ value, children }) => {\n return (\n <SidebarContext.Provider value={value}>{children}</SidebarContext.Provider>\n );\n};\n\n// Sidebar Header component\nexport const SidebarHeader: React.FC<SidebarHeaderProps> = ({\n children,\n showToggleButton = true,\n views,\n ...props\n}) => {\n const { isExpanded, toggleExpanded, position } = useSidebarContext();\n\n return (\n <Horizontal\n width=\"100%\"\n padding=\"16px\"\n borderBottomWidth=\"1px\"\n borderBottomStyle=\"solid\"\n borderBottomColor=\"color.gray.200\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n {...views?.header}\n {...props}\n >\n {isExpanded ? (\n <Horizontal\n width=\"100%\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n {children}\n {showToggleButton && (\n <View\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"32px\"\n height=\"32px\"\n borderRadius=\"4px\"\n backgroundColor=\"transparent\"\n cursor=\"pointer\"\n _hover={{ backgroundColor: 'color.gray.100' }}\n onClick={toggleExpanded}\n aria-label={isExpanded ? 'Collapse sidebar' : 'Expand sidebar'}\n {...views?.toggleButton}\n >\n <ChevronIcon\n orientation={position === 'left' ? 'left' : 'right'}\n widthHeight={16}\n {...views?.toggleButtonIcon}\n />\n </View>\n )}\n </Horizontal>\n ) : (\n <View\n width=\"100%\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {showToggleButton && (\n <View\n as=\"button\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"32px\"\n height=\"32px\"\n borderRadius=\"4px\"\n backgroundColor=\"transparent\"\n cursor=\"pointer\"\n _hover={{ backgroundColor: 'color.gray.100' }}\n onClick={toggleExpanded}\n aria-label={isExpanded ? 'Collapse sidebar' : 'Expand sidebar'}\n {...views?.toggleButton}\n >\n <ChevronIcon\n orientation={position === 'left' ? 'right' : 'left'}\n widthHeight={16}\n {...views?.toggleButtonIcon}\n />\n </View>\n )}\n </View>\n )}\n </Horizontal>\n );\n};\n\n// Sidebar Content component\nexport const SidebarContent: React.FC<SidebarContentProps> = ({\n children,\n views,\n ...props\n}) => {\n const { isExpanded } = useSidebarContext();\n\n return (\n <View\n flex=\"1\"\n width=\"100%\"\n overflowY=\"auto\"\n overflowX=\"hidden\"\n padding={isExpanded ? '16px' : '8px'}\n {...views?.content}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// Sidebar Footer component\nexport const SidebarFooter: React.FC<SidebarFooterProps> = ({\n children,\n views,\n ...props\n}) => {\n const { isExpanded } = useSidebarContext();\n\n return (\n <View\n width=\"100%\"\n padding=\"16px\"\n borderTopWidth=\"1px\"\n borderTopStyle=\"solid\"\n borderTopColor=\"color.gray.200\"\n {...views?.footer}\n {...props}\n >\n {isExpanded ? children : null}\n </View>\n );\n};\n\n// Main Sidebar View component\nexport const SidebarView: React.FC<SidebarProps> = ({\n children,\n position = 'left',\n size = 'md',\n variant = 'default',\n fixed = false,\n hasBackdrop = true,\n // showToggleButton = true,\n expandedWidth,\n collapsedWidth,\n // breakpoint = 768,\n breakpointBehavior = 'overlay',\n elevation = 'none',\n transitionPreset = 'normal',\n ariaLabel = 'Sidebar navigation',\n isExpanded,\n isMobile,\n // toggleExpanded,\n // expand,\n collapse,\n views,\n themeMode: elementMode,\n ...props\n}) => {\n // Determine width based on expanded state and size\n const sizeConfig = SidebarSizes[size];\n const width = isExpanded\n ? expandedWidth || sizeConfig.expandedWidth\n : collapsedWidth || sizeConfig.collapsedWidth;\n\n // Determine if sidebar should be visible based on mobile state and breakpoint behavior\n const isVisible = !isMobile || (isMobile && breakpointBehavior !== 'hide');\n\n // Determine if sidebar should be fixed or absolute based on mobile state and breakpoint behavior\n const position_type =\n fixed || (isMobile && breakpointBehavior === 'overlay')\n ? 'fixed'\n : 'relative';\n\n // Determine if backdrop should be shown\n const showBackdrop =\n hasBackdrop && isMobile && isExpanded && breakpointBehavior === 'overlay';\n\n return (\n <>\n {/* Backdrop */}\n {showBackdrop && (\n <View\n position=\"fixed\"\n top={0}\n left={0}\n width=\"100vw\"\n height=\"100vh\"\n backgroundColor=\"color.blackAlpha.500\"\n zIndex={998}\n onClick={collapse}\n {...views?.backdrop}\n />\n )}\n\n {/* Sidebar */}\n {isVisible && (\n <Vertical\n position={position_type}\n top={0}\n height=\"100vh\"\n width={width}\n zIndex={999}\n transition={SidebarTransitions[transitionPreset]}\n transform={\n isMobile && breakpointBehavior === 'overlay' && !isExpanded\n ? `translateX(${position === 'left' ? '-100%' : '100%'})`\n : 'translateX(0)'\n }\n role=\"navigation\"\n aria-label={ariaLabel}\n {...SidebarVariants[variant]}\n {...SidebarPositions[position]}\n {...SidebarElevations[elevation]}\n {...views?.container}\n {...props}\n >\n {React.Children.map(children, (child) => {\n return child;\n })}\n </Vertical>\n )}\n </>\n );\n};\ninterface SideBarNavItemProps {\n icon: React.ReactNode;\n label: string;\n isActive?: boolean;\n ariaLabel?: string;\n badge?: number;\n}\n\nexport const SideBarNavItem = ({\n icon,\n label,\n isActive = false,\n badge,\n views,\n ariaLabel,\n ...props\n}: SideBarNavItemProps & any) => {\n // Get sidebar context to check if it's expanded\n const { isExpanded } = useSidebarContext();\n\n return (\n <Horizontal\n alignItems=\"center\"\n justifyContent={!isExpanded ? 'center' : undefined}\n gap={12}\n padding=\"8px 12px\"\n borderRadius=\"4px\"\n backgroundColor={isActive ? 'color.blue.50' : 'transparent'}\n color={isActive ? 'color.blue.600' : 'color.gray.700'}\n fontWeight={isActive ? 'bold' : 'normal'}\n cursor=\"pointer\"\n aria-label={ariaLabel}\n on={{\n hover: {\n backgroundColor: isActive ? 'color.blue.50' : 'color.gray.100',\n },\n }}\n {...props}\n >\n {icon}\n {isExpanded && <Text>{label}</Text>}\n {isExpanded && badge && <Badge {...views?.navItemBagde}>{badge}</Badge>}\n </Horizontal>\n );\n};\n","import React from 'react';\nimport { SidebarProps, SidebarType } from './Sidebar/Sidebar.props';\nimport { useSidebarState } from './Sidebar/Sidebar.state';\nimport {\n SidebarProvider,\n SidebarHeader,\n SidebarContent,\n SidebarFooter,\n SidebarView,\n useSidebarContext,\n} from './Sidebar/Sidebar.view';\n\n/**\n * Sidebar component for creating collapsible, themeable and customizable sidebars.\n */\nconst SidebarComponent: React.FC<SidebarProps> = ({\n children,\n position = 'left',\n size = 'md',\n variant = 'default',\n defaultExpanded = true,\n expanded,\n onExpandedChange,\n fixed = false,\n hasBackdrop = true,\n showToggleButton = true,\n expandedWidth,\n collapsedWidth,\n breakpoint = 768,\n breakpointBehavior = 'overlay',\n views,\n ...props\n}) => {\n const { isExpanded, toggleExpanded, expand, collapse, isMobile } =\n useSidebarState(defaultExpanded, expanded, onExpandedChange, breakpoint);\n\n return (\n <SidebarProvider\n value={{\n isExpanded,\n toggleExpanded,\n expand,\n collapse,\n position,\n size,\n variant,\n views,\n }}\n >\n <SidebarView\n position={position}\n size={size}\n variant={variant}\n fixed={fixed}\n hasBackdrop={hasBackdrop}\n showToggleButton={showToggleButton}\n expandedWidth={expandedWidth}\n collapsedWidth={collapsedWidth}\n breakpoint={breakpoint}\n breakpointBehavior={breakpointBehavior}\n isExpanded={isExpanded}\n isMobile={isMobile}\n toggleExpanded={toggleExpanded}\n expand={expand}\n collapse={collapse}\n views={views}\n {...props}\n >\n {children}\n </SidebarView>\n </SidebarProvider>\n );\n};\n\nexport const Sidebar = SidebarComponent as SidebarType;\n\n// Assign the sub-components to the main component\nSidebar.Header = SidebarHeader;\nSidebar.Content = SidebarContent;\nSidebar.Footer = SidebarFooter;\n\n// Expose the context hook for custom components\nSidebar.useContext = useSidebarContext;\n","import { useState, useEffect } from 'react';\n\nexport const useSidebarState = (\n defaultExpanded: boolean = true,\n expanded?: boolean,\n onExpandedChange?: (expanded: boolean) => void,\n breakpoint?: number\n) => {\n const [isExpanded, setIsExpanded] = useState<boolean>(\n expanded !== undefined ? expanded : defaultExpanded\n );\n const [isMobile, setIsMobile] = useState<boolean>(\n breakpoint ? window.innerWidth < breakpoint : false\n );\n\n // Handle controlled expanded state\n useEffect(() => {\n if (expanded !== undefined) {\n setIsExpanded(expanded);\n }\n }, [expanded]);\n\n // Handle window resize for responsive behavior\n useEffect(() => {\n if (!breakpoint) return;\n\n const handleResize = () => {\n const newIsMobile = window.innerWidth < breakpoint;\n setIsMobile(newIsMobile);\n };\n\n window.addEventListener('resize', handleResize);\n handleResize(); // Initial check\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, [breakpoint]);\n\n const toggleExpanded = () => {\n const newExpanded = !isExpanded;\n setIsExpanded(newExpanded);\n if (onExpandedChange) {\n onExpandedChange(newExpanded);\n }\n };\n\n const expand = () => {\n if (!isExpanded) {\n setIsExpanded(true);\n if (onExpandedChange) {\n onExpandedChange(true);\n }\n }\n };\n\n const collapse = () => {\n if (isExpanded) {\n setIsExpanded(false);\n if (onExpandedChange) {\n onExpandedChange(false);\n }\n }\n };\n\n return {\n isExpanded,\n toggleExpanded,\n expand,\n collapse,\n isMobile,\n };\n};\n","import { useState, useRef, useCallback, useEffect } from 'react';\nimport { Orientation, PanelInfo, ResizableStorage } from './Resizable.type';\n\n// Default storage implementation using localStorage\nconst createDefaultStorage = (): ResizableStorage => ({\n getItem: (id: string) => {\n try {\n return localStorage.getItem(`resizable-${id}`);\n } catch (e) {\n console.warn('Failed to access localStorage:', e);\n return null;\n }\n },\n setItem: (id: string, value: string) => {\n try {\n localStorage.setItem(`resizable-${id}`, value);\n } catch (e) {\n console.warn('Failed to write to localStorage:', e);\n }\n },\n});\n\nexport const useResizableState = (\n orientation: Orientation,\n defaultSizes?: (number | string)[],\n onSizesChange?: (sizes: number[]) => void,\n defaultMinSize: number = 50,\n defaultMaxSize: number = Infinity,\n collapsible: boolean = false,\n autoSaveId?: string,\n storage?: ResizableStorage,\n keyboardResizeBy: number = 10\n) => {\n const [isResizing, setIsResizing] = useState(false);\n const [panels, setPanels] = useState<PanelInfo[]>([]);\n const containerRef = useRef<HTMLDivElement>(null);\n const activeHandleRef = useRef<string | null>(null);\n const startPositionRef = useRef<number>(0);\n const startSizesRef = useRef<number[]>([]);\n const storageRef = useRef<ResizableStorage | null>(\n storage || (typeof window !== 'undefined' ? createDefaultStorage() : null)\n );\n\n // Calculate the total size of the container\n const getTotalSize = useCallback(() => {\n if (!containerRef.current) return 0;\n return orientation === 'horizontal'\n ? containerRef.current.offsetWidth\n : containerRef.current.offsetHeight;\n }, [orientation]);\n\n // Load saved panel sizes from storage if autoSaveId is provided\n const loadSavedSizes = useCallback(() => {\n if (!autoSaveId || !storageRef.current) return null;\n\n const savedData = storageRef.current.getItem(autoSaveId);\n if (!savedData) return null;\n\n try {\n const parsed = JSON.parse(savedData);\n if (Array.isArray(parsed.sizes)) {\n return parsed.sizes;\n }\n return null;\n } catch (e) {\n console.warn('Failed to parse saved panel sizes:', e);\n return null;\n }\n }, [autoSaveId]);\n\n // Save panel sizes to storage\n const savePanelSizes = useCallback(() => {\n if (!autoSaveId || !storageRef.current || panels.length === 0) return;\n\n const sizes = panels.map((panel) => ({\n id: panel.id,\n size: panel.size,\n collapsed: panel.collapsed || false,\n }));\n\n storageRef.current.setItem(autoSaveId, JSON.stringify({ sizes }));\n }, [autoSaveId, panels]);\n\n // Register a panel with the resizable container\n const registerPanel = useCallback(\n (\n id: string,\n initialSize: number,\n minSize?: number,\n maxSize?: number,\n panelCollapsible?: boolean\n ) => {\n setPanels((prevPanels) => {\n // Check if panel already exists\n if (prevPanels.some((panel) => panel.id === id)) {\n return prevPanels;\n }\n\n // Add new panel\n return [\n ...prevPanels,\n {\n id,\n size: initialSize,\n minSize: minSize ?? defaultMinSize,\n maxSize: maxSize ?? defaultMaxSize,\n collapsible: panelCollapsible ?? collapsible,\n collapsed: false,\n },\n ];\n });\n },\n [defaultMinSize, defaultMaxSize, collapsible]\n );\n\n // Unregister a panel from the resizable container\n const unregisterPanel = useCallback((id: string) => {\n setPanels((prevPanels) => prevPanels.filter((panel) => panel.id !== id));\n }, []);\n\n // Get the size of a panel\n const getPanelSize = useCallback(\n (id: string) => {\n const panel = panels.find((p) => p.id === id);\n return panel ? panel.size : 0;\n },\n [panels]\n );\n\n // Set the size of a panel\n const setPanelSize = useCallback((id: string, size: number) => {\n setPanels((prevPanels) =>\n prevPanels.map((panel) => (panel.id === id ? { ...panel, size } : panel))\n );\n }, []);\n\n // Check if a panel is collapsed\n const isPanelCollapsed = useCallback(\n (id: string) => {\n const panel = panels.find((p) => p.id === id);\n return panel ? !!panel.collapsed : false;\n },\n [panels]\n );\n\n // Toggle panel collapse state\n const togglePanelCollapse = useCallback((id: string) => {\n setPanels((prevPanels) => {\n const panelIndex = prevPanels.findIndex((p) => p.id === id);\n if (panelIndex === -1) return prevPanels;\n\n const panel = prevPanels[panelIndex];\n if (!panel.collapsible) return prevPanels;\n\n // Store the current size before collapsing\n const updatedPanel = {\n ...panel,\n collapsed: !panel.collapsed,\n };\n\n const newPanels = [...prevPanels];\n newPanels[panelIndex] = updatedPanel;\n\n return newPanels;\n });\n }, []);\n\n // Start resizing\n const startResize = useCallback(\n (handleId: string, clientPosition: number) => {\n activeHandleRef.current = handleId;\n startPositionRef.current = clientPosition;\n startSizesRef.current = panels.map((panel) => panel.size);\n setIsResizing(true);\n },\n [panels]\n );\n\n // Handle resize\n const onResize = useCallback(\n (clientPosition: number) => {\n if (!isResizing || !activeHandleRef.current) return;\n\n const handleId = activeHandleRef.current;\n const delta = clientPosition - startPositionRef.current;\n\n // Find the handle's position in the DOM order\n // This is more reliable than trying to match handle IDs with panel IDs\n let handleIndex = -1;\n\n // Extract numeric part from handle ID if it follows a pattern like 'handle1'\n const handleNumMatch = handleId.match(/\\d+$/);\n if (handleNumMatch) {\n handleIndex = parseInt(handleNumMatch[0], 10) - 1; // Convert to 0-based index\n }\n\n // If we couldn't extract a number, try to find the handle's position\n // by checking if it's between two panels\n if (handleIndex === -1 && panels.length >= 2) {\n // Just use the first handle position as a fallback\n handleIndex = 0;\n }\n\n // Ensure the handle index is valid\n if (handleIndex < 0 || handleIndex >= panels.length - 1) return;\n\n const currentPanel = panels[handleIndex];\n const nextPanel = panels[handleIndex + 1];\n\n // Skip if either panel is collapsed\n if (currentPanel.collapsed || nextPanel.collapsed) return;\n\n // Calculate new sizes\n let newCurrentSize =\n startSizesRef.current[handleIndex] +\n (orientation === 'horizontal' ? delta : delta);\n let newNextSize =\n startSizesRef.current[handleIndex + 1] -\n (orientation === 'horizontal' ? delta : delta);\n\n // Apply constraints\n newCurrentSize = Math.max(\n currentPanel.minSize ?? defaultMinSize,\n Math.min(currentPanel.maxSize ?? defaultMaxSize, newCurrentSize)\n );\n newNextSize = Math.max(\n nextPanel.minSize ?? defaultMinSize,\n Math.min(nextPanel.maxSize ?? defaultMaxSize, newNextSize)\n );\n\n // Update panel sizes\n setPanels((prevPanels) =>\n prevPanels.map((panel, index) => {\n if (index === handleIndex) {\n return { ...panel, size: newCurrentSize };\n }\n if (index === handleIndex + 1) {\n return { ...panel, size: newNextSize };\n }\n return panel;\n })\n );\n },\n [isResizing, panels, orientation, defaultMinSize, defaultMaxSize]\n );\n\n // End resizing\n const endResize = useCallback(() => {\n if (isResizing && onSizesChange) {\n onSizesChange(panels.map((panel) => panel.size));\n }\n activeHandleRef.current = null;\n setIsResizing(false);\n\n // Save panel sizes to storage if autoSaveId is provided\n if (autoSaveId) {\n savePanelSizes();\n }\n }, [isResizing, panels, onSizesChange, autoSaveId, savePanelSizes]);\n\n // Handle keyboard navigation for accessibility\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isResizing || !activeHandleRef.current) return;\n\n const handleId = activeHandleRef.current;\n\n // Find the handle's position in the DOM order using the same logic as onResize\n let handleIndex = -1;\n\n // Extract numeric part from handle ID if it follows a pattern like 'handle1'\n const handleNumMatch = handleId.match(/\\d+$/);\n if (handleNumMatch) {\n handleIndex = parseInt(handleNumMatch[0], 10) - 1; // Convert to 0-based index\n }\n\n // If we couldn't extract a number, try to find the handle's position\n // by checking if it's between two panels\n if (handleIndex === -1 && panels.length >= 2) {\n // Just use the first handle position as a fallback\n handleIndex = 0;\n }\n\n // Ensure the handle index is valid\n if (handleIndex < 0 || handleIndex >= panels.length - 1) return;\n\n let delta = 0;\n\n // Handle arrow keys based on orientation\n if (orientation === 'horizontal') {\n if (e.key === 'ArrowLeft') delta = -keyboardResizeBy;\n if (e.key === 'ArrowRight') delta = keyboardResizeBy;\n // Home and End keys for larger jumps\n if (e.key === 'Home') delta = -100;\n if (e.key === 'End') delta = 100;\n } else {\n if (e.key === 'ArrowUp') delta = -keyboardResizeBy;\n if (e.key === 'ArrowDown') delta = keyboardResizeBy;\n // Home and End keys for larger jumps\n if (e.key === 'Home') delta = -100;\n if (e.key === 'End') delta = 100;\n }\n\n if (delta !== 0) {\n e.preventDefault();\n onResize(startPositionRef.current + delta);\n }\n\n // Handle escape key to cancel resizing\n if (e.key === 'Escape') {\n setPanels((prevPanels) =>\n prevPanels.map((panel, index) => ({\n ...panel,\n size: startSizesRef.current[index],\n }))\n );\n endResize();\n }\n },\n [isResizing, panels, orientation, onResize, endResize, keyboardResizeBy]\n );\n\n // Set up event listeners for mouse/touch events\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isResizing) return;\n const position = orientation === 'horizontal' ? e.clientX : e.clientY;\n onResize(position);\n };\n\n const handleTouchMove = (e: TouchEvent) => {\n if (!isResizing || e.touches.length === 0) return;\n const touch = e.touches[0];\n const position =\n orientation === 'horizontal' ? touch.clientX : touch.clientY;\n onResize(position);\n };\n\n const handleMouseUp = () => {\n if (isResizing) {\n endResize();\n }\n };\n\n if (isResizing) {\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('touchmove', handleTouchMove);\n document.addEventListener('mouseup', handleMouseUp);\n document.addEventListener('touchend', handleMouseUp);\n document.addEventListener('keydown', handleKeyDown);\n\n // Set cursor based on orientation\n document.body.style.cursor =\n orientation === 'horizontal' ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n }\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('touchmove', handleTouchMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.removeEventListener('touchend', handleMouseUp);\n document.removeEventListener('keydown', handleKeyDown);\n\n // Reset cursor\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n };\n }, [isResizing, orientation, onResize, endResize, handleKeyDown]);\n\n // Initialize panel sizes when the component mounts\n useEffect(() => {\n if (panels.length === 0) return;\n\n // Try to load saved sizes first if autoSaveId is provided\n if (autoSaveId) {\n const savedSizes = loadSavedSizes();\n if (savedSizes) {\n // Map saved sizes to panels\n setPanels((prevPanels) => {\n return prevPanels.map((panel) => {\n const savedPanel = savedSizes.find((s: any) => s.id === panel.id);\n if (savedPanel) {\n return {\n ...panel,\n size: savedPanel.size,\n collapsed: savedPanel.collapsed || false,\n };\n }\n return panel;\n });\n });\n return;\n }\n }\n\n // If no saved sizes or defaultSizes, distribute sizes equally\n if (!defaultSizes) {\n const totalSize = getTotalSize();\n const equalSize = totalSize / panels.length;\n\n setPanels((prevPanels) =>\n prevPanels.map((panel) => ({\n ...panel,\n size: equalSize,\n }))\n );\n }\n }, [panels.length, defaultSizes, getTotalSize, autoSaveId, loadSavedSizes]);\n\n // Update panel sizes when defaultSizes changes\n useEffect(() => {\n if (!defaultSizes || defaultSizes.length === 0 || panels.length === 0)\n return;\n\n const totalSize = getTotalSize();\n const newSizes = defaultSizes.map((size) => {\n if (typeof size === 'string' && size.endsWith('%')) {\n return (parseFloat(size) / 100) * totalSize;\n }\n return typeof size === 'number' ? size : parseFloat(size);\n });\n\n setPanels((prevPanels) =>\n prevPanels.map((panel, index) => ({\n ...panel,\n size: index < newSizes.length ? newSizes[index] : panel.size,\n }))\n );\n }, [defaultSizes, panels.length, getTotalSize]);\n\n // Save panel sizes when they change (if autoSaveId is provided)\n useEffect(() => {\n if (panels.length > 0 && autoSaveId && !isResizing) {\n savePanelSizes();\n }\n }, [panels, autoSaveId, isResizing, savePanelSizes]);\n\n return {\n isResizing,\n setIsResizing,\n containerRef,\n panels,\n registerPanel,\n unregisterPanel,\n getPanelSize,\n setPanelSize,\n isPanelCollapsed,\n togglePanelCollapse,\n startResize,\n onResize,\n endResize,\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { Orientation, Size, Variant } from './Resizable.type';\n\nexport const ResizableOrientations: Record<Orientation, ViewProps> = {\n horizontal: {\n flexDirection: 'row',\n },\n vertical: {\n flexDirection: 'column',\n },\n};\n\nexport const getHandleSizeStyles = (\n size: Size,\n orientation: Orientation\n): ViewProps => {\n const sizes = {\n sm: {\n width: orientation === 'horizontal' ? '4px' : '100%',\n height: orientation === 'vertical' ? '4px' : '100%',\n },\n md: {\n width: orientation === 'horizontal' ? '6px' : '100%',\n height: orientation === 'vertical' ? '6px' : '100%',\n },\n lg: {\n width: orientation === 'horizontal' ? '8px' : '100%',\n height: orientation === 'vertical' ? '8px' : '100%',\n },\n };\n\n return sizes[size];\n};\n\nexport const getHandle = (themeMode: string): Record<Variant, ViewProps> => {\n return {\n default: {\n backgroundColor: 'transparent',\n _hover: {\n backgroundColor: 'color.gray.200',\n },\n _active: {\n backgroundColor: 'color.gray.300',\n },\n },\n subtle: {\n backgroundColor: 'transparent',\n _hover: {\n backgroundColor: 'color.gray.100',\n },\n _active: {\n backgroundColor: 'color.gray.200',\n },\n },\n prominent: {\n backgroundColor: 'color.gray.100',\n _hover: {\n backgroundColor: 'color.gray.200',\n },\n _active: {\n backgroundColor: 'color.gray.300',\n },\n },\n };\n // Add dark mode conditional styling here\n};\n\n// For backward compatibility\nexport const HandleVariants = getHandle('light');\n\nexport const HandleIconStyles: Record<Orientation, ViewProps> = {\n horizontal: {\n width: '2px',\n height: '20px',\n backgroundColor: 'color.gray.400',\n margin: '0 1px',\n },\n vertical: {\n width: '20px',\n height: '2px',\n backgroundColor: 'color.gray.400',\n margin: '1px 0',\n },\n};\n","import React, { createContext, useContext, useEffect } from 'react';\nimport { View } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { Vertical } from 'app-studio';\nimport {\n ResizableProps,\n ResizablePanelProps,\n ResizableHandleProps,\n} from './Resizable.props';\nimport {\n ResizableOrientations,\n getHandleSizeStyles,\n HandleVariants,\n HandleIconStyles,\n} from './Resizable.style';\nimport { ResizableContextType } from './Resizable.type';\n\n// Create context for the Resizable component\nconst ResizableContext = createContext<ResizableContextType>({\n orientation: 'horizontal',\n size: 'md',\n variant: 'default',\n isResizing: false,\n setIsResizing: () => {},\n registerPanel: () => {},\n unregisterPanel: () => {},\n getPanelSize: () => 0,\n setPanelSize: () => {},\n isPanelCollapsed: () => false,\n togglePanelCollapse: () => {},\n startResize: () => {},\n onResize: () => {},\n endResize: () => {},\n});\n\n// Hook to use the Resizable context\nexport const useResizableContext = () => useContext(ResizableContext);\n\n// Provider component for the Resizable context\nexport const ResizableProvider: React.FC<{\n value: ResizableContextType;\n children: React.ReactNode;\n}> = ({ value, children }) => {\n return (\n <ResizableContext.Provider value={value}>\n {children}\n </ResizableContext.Provider>\n );\n};\n\n// Resizable Panel component\nexport const ResizablePanel: React.FC<ResizablePanelProps> = ({\n children,\n id,\n defaultSize,\n minSize,\n maxSize,\n collapsible,\n defaultCollapsed,\n onCollapseChange,\n views,\n ...props\n}) => {\n const {\n orientation,\n registerPanel,\n unregisterPanel,\n getPanelSize,\n isPanelCollapsed,\n togglePanelCollapse,\n } = useResizableContext();\n\n // Convert percentage to pixels if needed\n const initialSize =\n typeof defaultSize === 'string' && defaultSize.endsWith('%')\n ? 0 // Will be calculated in the state hook\n : typeof defaultSize === 'number'\n ? defaultSize\n : 0;\n\n // Register panel on mount\n useEffect(() => {\n registerPanel(id, initialSize, minSize, maxSize, collapsible);\n return () => unregisterPanel(id);\n }, [\n id,\n initialSize,\n minSize,\n maxSize,\n collapsible,\n registerPanel,\n unregisterPanel,\n ]);\n\n // Get current panel size and collapsed state\n const size = getPanelSize(id);\n const isCollapsed = isPanelCollapsed(id);\n\n // Handle collapse state changes\n useEffect(() => {\n if (onCollapseChange && isCollapsed !== undefined) {\n onCollapseChange(isCollapsed);\n }\n }, [isCollapsed, onCollapseChange]);\n\n // Apply default collapsed state on mount if specified\n useEffect(() => {\n if (collapsible && defaultCollapsed && !isCollapsed) {\n togglePanelCollapse(id);\n }\n }, [id, collapsible, defaultCollapsed, isCollapsed, togglePanelCollapse]);\n\n // If panel is collapsed, render a minimal version\n if (isCollapsed) {\n return (\n <View\n flex=\"0 0 auto\"\n width={orientation === 'horizontal' ? '10px' : '100%'}\n height={orientation === 'vertical' ? '10px' : '100%'}\n backgroundColor=\"color.gray.200\"\n cursor=\"pointer\"\n onClick={() => togglePanelCollapse(id)}\n aria-label={`Expand panel ${id}`}\n role=\"button\"\n tabIndex={0}\n {...views?.collapsedPanel}\n {...props}\n />\n );\n }\n\n return (\n <View\n flex={size > 0 ? '0 0 auto' : '1'}\n width={orientation === 'horizontal' ? `${size}px` : '100%'}\n height={orientation === 'vertical' ? `${size}px` : '100%'}\n overflow=\"auto\"\n {...views?.panel}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// Resizable Handle component\nexport const ResizableHandle: React.FC<ResizableHandleProps> = ({\n id,\n position = 'both',\n disabled = false,\n withVisualIndicator = true,\n withCollapseButton = false,\n collapseTarget,\n views,\n ...props\n}) => {\n const {\n orientation,\n size,\n variant,\n startResize,\n isPanelCollapsed,\n togglePanelCollapse,\n } = useResizableContext();\n\n // Determine which panel to collapse when the collapse button is clicked\n // By default, it's the panel before this handle (if any)\n const getPanelToCollapse = () => {\n if (collapseTarget) return collapseTarget;\n\n // Extract panel index from handle ID (assuming handle IDs follow a pattern like 'handle1')\n const handleNumMatch = id.match(/\\d+$/);\n if (!handleNumMatch) return '';\n\n const handleIndex = parseInt(handleNumMatch[0], 10);\n if (isNaN(handleIndex)) return '';\n\n // Target the panel before this handle\n return `panel${handleIndex}`;\n };\n\n const panelToCollapse = getPanelToCollapse();\n const isTargetPanelCollapsed = isPanelCollapsed(panelToCollapse);\n\n const handleMouseDown = (e: React.MouseEvent) => {\n if (disabled) return;\n e.preventDefault();\n const clientPosition = orientation === 'horizontal' ? e.clientX : e.clientY;\n startResize(id, clientPosition);\n };\n\n const handleTouchStart = (e: React.TouchEvent) => {\n if (disabled || e.touches.length === 0) return;\n e.preventDefault();\n const touch = e.touches[0];\n const clientPosition =\n orientation === 'horizontal' ? touch.clientX : touch.clientY;\n startResize(id, clientPosition);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n const clientPosition = 0; // Starting position for keyboard navigation\n startResize(id, clientPosition);\n }\n };\n\n const handleCollapseClick = (e: React.MouseEvent) => {\n e.stopPropagation(); // Prevent triggering resize\n if (panelToCollapse) {\n togglePanelCollapse(panelToCollapse);\n }\n };\n\n return (\n <View\n role=\"separator\"\n aria-orientation={orientation}\n aria-valuemin={0}\n aria-valuemax={100}\n tabIndex={disabled ? -1 : 0}\n cursor={orientation === 'horizontal' ? 'col-resize' : 'row-resize'}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n position=\"relative\"\n {...getHandleSizeStyles(size, orientation)}\n {...HandleVariants[variant]}\n onMouseDown={handleMouseDown}\n onTouchStart={handleTouchStart}\n onKeyDown={handleKeyDown}\n opacity={disabled ? 0.5 : 1}\n pointerEvents={disabled ? 'none' : 'auto'}\n {...views?.handle}\n {...props}\n >\n {withVisualIndicator && (\n <View\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width={orientation === 'horizontal' ? '100%' : 'auto'}\n height={orientation === 'vertical' ? '100%' : 'auto'}\n pointerEvents=\"none\"\n {...views?.handleIcon}\n >\n {orientation === 'horizontal' ? (\n <Horizontal gap={1}>\n <View {...HandleIconStyles.horizontal} />\n <View {...HandleIconStyles.horizontal} />\n </Horizontal>\n ) : (\n <Vertical gap={1}>\n <View {...HandleIconStyles.vertical} />\n <View {...HandleIconStyles.vertical} />\n </Vertical>\n )}\n </View>\n )}\n\n {withCollapseButton && panelToCollapse && (\n <View\n position=\"absolute\"\n top={orientation === 'horizontal' ? '-20px' : '50%'}\n left={orientation === 'horizontal' ? '50%' : '-20px'}\n transform={\n orientation === 'horizontal'\n ? 'translateX(-50%)'\n : 'translateY(-50%)'\n }\n width=\"16px\"\n height=\"16px\"\n borderRadius=\"full\"\n backgroundColor=\"color.gray.100\"\n border=\"1px solid\"\n borderColor=\"color.gray.300\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n cursor=\"pointer\"\n zIndex={1}\n onClick={handleCollapseClick}\n aria-label={\n isTargetPanelCollapsed\n ? `Expand panel ${panelToCollapse}`\n : `Collapse panel ${panelToCollapse}`\n }\n role=\"button\"\n tabIndex={0}\n pointerEvents=\"auto\"\n _hover={{ backgroundColor: 'color.gray.200' }}\n {...views?.collapseIcon}\n >\n {/* Collapse/expand icon */}\n <View\n width=\"8px\"\n height=\"8px\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {isTargetPanelCollapsed ? (\n /* Expand icon (plus) */\n <Horizontal>\n <View\n width=\"6px\"\n height=\"2px\"\n backgroundColor=\"color.gray.600\"\n />\n <View\n width=\"2px\"\n height=\"6px\"\n backgroundColor=\"color.gray.600\"\n position=\"absolute\"\n />\n </Horizontal>\n ) : (\n /* Collapse icon (minus) */\n <View width=\"6px\" height=\"2px\" backgroundColor=\"color.gray.600\" />\n )}\n </View>\n </View>\n )}\n </View>\n );\n};\n\n// Main Resizable View component\nexport const ResizableView: React.FC<\n ResizableProps & {\n containerRef: React.RefObject<HTMLDivElement>;\n }\n> = ({\n children,\n orientation = 'horizontal',\n size = 'md',\n variant = 'default',\n defaultSizes,\n minSize,\n maxSize,\n collapsible = false,\n containerRef,\n autoSaveId,\n views,\n ...props\n}) => {\n const Container = orientation === 'horizontal' ? Horizontal : Vertical;\n\n return (\n <Container\n ref={containerRef}\n width=\"100%\"\n height=\"100%\"\n position=\"relative\"\n overflow=\"hidden\"\n {...ResizableOrientations[orientation]}\n {...views?.container}\n {...props}\n >\n {children}\n </Container>\n );\n};\n","import React from 'react';\nimport { ResizableProps, ResizableType } from './Resizable/Resizable.props';\nimport { useResizableState } from './Resizable/Resizable.state';\nimport {\n ResizableProvider,\n ResizablePanel,\n ResizableHandle,\n ResizableView,\n} from './Resizable/Resizable.view';\n\n/**\n * Resizable component for creating resizable panel groups and layouts.\n */\nconst ResizableComponent: React.FC<ResizableProps> = ({\n children,\n orientation = 'horizontal',\n size = 'md',\n variant = 'default',\n defaultSizes,\n onSizesChange,\n minSize = 50,\n maxSize,\n collapsible = false,\n autoSaveId,\n storage,\n keyboardResizeBy = 10,\n views,\n ...props\n}) => {\n const {\n isResizing,\n setIsResizing,\n containerRef,\n registerPanel,\n unregisterPanel,\n getPanelSize,\n setPanelSize,\n isPanelCollapsed,\n togglePanelCollapse,\n startResize,\n onResize,\n endResize,\n } = useResizableState(\n orientation,\n defaultSizes,\n onSizesChange,\n minSize,\n maxSize,\n collapsible,\n autoSaveId,\n storage,\n keyboardResizeBy\n );\n\n return (\n <ResizableProvider\n value={{\n orientation,\n size,\n variant,\n isResizing,\n setIsResizing,\n registerPanel,\n unregisterPanel,\n getPanelSize,\n setPanelSize,\n isPanelCollapsed,\n togglePanelCollapse,\n startResize,\n onResize,\n endResize,\n }}\n >\n <ResizableView\n orientation={orientation}\n size={size}\n variant={variant}\n defaultSizes={defaultSizes}\n minSize={minSize}\n maxSize={maxSize}\n collapsible={collapsible}\n autoSaveId={autoSaveId}\n keyboardResizeBy={keyboardResizeBy}\n containerRef={containerRef}\n views={views}\n {...props}\n >\n {children}\n </ResizableView>\n </ResizableProvider>\n );\n};\n\nexport const Resizable = ResizableComponent as ResizableType;\n\n// Assign the sub-components to the main component\nResizable.Panel = ResizablePanel;\nResizable.Handle = ResizableHandle;\n","/**\n * Toast Styles\n *\n * Defines the styles for the Toast component following the design guidelines:\n * - Typography: Inter/Geist font, specific sizes/weights\n * - Spacing: 4px grid system\n * - Colors: Neutral palette with semantic colors\n * - Rounded corners: Consistent border radius\n * - Transitions: Subtle animations\n */\n\nimport { ViewProps } from 'app-studio';\nimport { ToastPosition, ThemesType } from './Toast.type';\n\n/**\n * Theme configurations for the Toast component\n * Following the design system color palette\n */\nexport const Themes: ThemesType = {\n info: {\n container: {\n backgroundColor: 'color.blue.50',\n border: 'color.blue.300',\n },\n content: {\n color: 'color.blue.700',\n },\n icon: {\n color: 'color.blue.500',\n },\n },\n success: {\n container: {\n backgroundColor: 'color.green.50',\n border: 'color.green.300',\n },\n content: {\n color: 'color.green.700',\n },\n icon: {\n color: 'color.green.500',\n },\n },\n warning: {\n container: {\n backgroundColor: 'color.orange.50',\n border: 'color.orange.300',\n },\n content: {\n color: 'color.orange.700',\n },\n icon: {\n color: 'color.orange.500',\n },\n },\n error: {\n container: {\n backgroundColor: 'color.red.50',\n border: 'color.red.300',\n },\n content: {\n color: 'color.red.700',\n },\n icon: {\n color: 'color.red.500',\n },\n },\n};\n\n/**\n * Animation configurations for the Toast component\n */\nexport const ToastAnimations = {\n enter: {\n opacity: [0, 1],\n transform: ['scale(0.95)', 'scale(1)'],\n transition: 'all 0.3s ease-out',\n },\n exit: {\n opacity: [1, 0],\n transform: ['scale(1)', 'scale(0.95)'],\n transition: 'all 0.2s ease-in',\n },\n};\n\n/**\n * Position configurations for the Toast component\n * Following the 4px grid system\n */\nexport const ToastPositions: Record<ToastPosition, ViewProps> = {\n top: {\n top: '16px', // 4 × 4px grid\n left: '50%',\n transform: 'translateX(-50%)',\n },\n 'top-right': {\n top: '16px', // 4 × 4px grid\n right: '16px', // 4 × 4px grid\n },\n 'top-left': {\n top: '16px', // 4 × 4px grid\n left: '16px', // 4 × 4px grid\n },\n bottom: {\n bottom: '16px', // 4 × 4px grid\n left: '50%',\n transform: 'translateX(-50%)',\n },\n 'bottom-right': {\n bottom: '16px', // 4 × 4px grid\n right: '16px', // 4 × 4px grid\n },\n 'bottom-left': {\n bottom: '16px', // 4 × 4px grid\n left: '16px', // 4 × 4px grid\n },\n};\n","import { create } from 'zustand';\nimport { ToastState } from './Toast.props';\nimport { ToastOptions, ToastVariant } from './Toast.type';\n\n// Generate a unique ID for each toast\nconst generateId = () => Math.random().toString(36).substring(2, 9);\n\n// Create a ref to store timeouts for cleanup\nlet timeouts = new Map<string, NodeJS.Timeout>();\n\n// Create the toast store\nexport const useToastStore = create<ToastState>((set) => ({\n toasts: [],\n add: (variant, title, description, options = {}) => {\n const id = options.id || generateId();\n const toast = {\n id,\n variant,\n title,\n description,\n createdAt: Date.now(),\n isVisible: true, // For animation purposes\n ...options,\n };\n\n set((state: any) => ({\n toasts: [...state.toasts, toast],\n }));\n\n // Set up auto-dismiss timeout if duration is provided\n if (options.duration !== 0) {\n const duration = options.duration || 5000; // Default 5 seconds\n const timerId = setTimeout(() => {\n useToastStore.getState().remove(id);\n }, duration);\n\n // Store the timeout for cleanup\n timeouts.set(id, timerId);\n }\n\n return id;\n },\n remove: (id) => {\n // First set isVisible to false for animation\n set((state) => ({\n toasts: state.toasts.map((toast: any) =>\n toast.id === id ? { ...toast, isVisible: false } : toast\n ),\n }));\n\n // Clear any existing timeout\n if (timeouts.has(id)) {\n clearTimeout(timeouts.get(id)!);\n timeouts.delete(id);\n }\n\n // Then remove after a short delay to allow for animation\n setTimeout(() => {\n set((state) => ({\n toasts: state.toasts.filter((toast) => toast.id !== id),\n }));\n }, 300); // Animation duration\n },\n removeAll: () => {\n // Clear all timeouts\n timeouts.forEach(clearTimeout);\n timeouts.clear();\n\n // Set all toasts to invisible first for animation\n set((state) => ({\n toasts: state.toasts.map((toast) => ({ ...toast, isVisible: false })),\n }));\n\n // Then remove after animation delay\n setTimeout(() => {\n set({ toasts: [] });\n }, 300);\n },\n}));\n\n// Helper functions to show different types of toasts\nexport const showToast = (\n variant: ToastVariant,\n title: string,\n description?: string,\n options?: ToastOptions\n) => {\n return useToastStore.getState().add(variant, title, description, options);\n};\n\nexport const showInfoToast = (\n title: string,\n description?: string,\n options?: ToastOptions\n) => {\n return showToast('info', title, description, options);\n};\n\nexport const showSuccessToast = (\n title: string,\n description?: string,\n options?: ToastOptions\n) => {\n return showToast('success', title, description, options);\n};\n\nexport const showWarningToast = (\n title: string,\n description?: string,\n options?: ToastOptions\n) => {\n return showToast('warning', title, description, options);\n};\n\nexport const showErrorToast = (\n title: string,\n description?: string,\n options?: ToastOptions\n) => {\n return showToast('error', title, description, options);\n};\n\nexport const removeToast = (id: string) => {\n useToastStore.getState().remove(id);\n};\n\nexport const removeAllToasts = () => {\n useToastStore.getState().removeAll();\n};\n","import React from 'react';\nimport { View } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { Vertical } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { InfoIcon, PlayIcon, DustBinIcon, CloseIcon } from '../../Icon/Icon';\nimport { ToastProps, ToastContainerProps } from './Toast.props';\nimport { Themes, ToastPositions } from './Toast.style';\nimport { useToastStore } from './Toast.store';\nimport { ToastPosition } from './Toast.type';\n\n// Individual Toast component\nexport const ToastView: React.FC<ToastProps> = ({\n variant,\n title,\n description,\n onClose,\n isClosable = true,\n action,\n actionText,\n showIcon = true,\n theme,\n views,\n render,\n icon: customIcon,\n id,\n isVisible = true,\n themeMode: elementMode,\n}) => {\n // We don't need the auto-close timer here anymore as it's handled in the store\n\n const Theme = theme ?? Themes;\n\n // Get the appropriate icon based on the variant\n const getIcon = () => {\n // If a custom icon is provided, use it\n if (customIcon !== undefined) {\n return customIcon;\n }\n\n // Otherwise use the default icon based on variant\n switch (variant) {\n case 'info':\n return <InfoIcon widthHeight={20} color={Theme.info.icon.color} />;\n case 'success':\n return <PlayIcon widthHeight={20} color={Theme.success.icon.color} />;\n case 'warning':\n return (\n <InfoIcon\n widthHeight={20}\n color={Theme.warning.icon.color}\n orientation=\"down\"\n />\n );\n case 'error':\n return <DustBinIcon widthHeight={20} color={Theme.error.icon.color} />;\n default:\n return <InfoIcon widthHeight={20} color={Theme.info.icon.color} />;\n }\n };\n\n // If a custom render function is provided, use it\n if (render) {\n return <>{render({ id: id || '', onClose })}</>;\n }\n\n // Determine appropriate ARIA role and live region based on variant\n const ariaRole = variant === 'error' ? 'alert' : 'status';\n const ariaLive =\n variant === 'error' || variant === 'warning' ? 'assertive' : 'polite';\n\n return (\n <Horizontal\n role={ariaRole}\n aria-live={ariaLive}\n aria-atomic=\"true\"\n data-state={isVisible ? 'open' : 'closed'}\n gap={12}\n width=\"100%\"\n maxWidth=\"400px\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderRadius=\"8px\" // 2 × 4px grid\n padding=\"12px 16px\" // 3 × 4px grid and 4 × 4px grid\n alignItems=\"flex-start\"\n position=\"relative\"\n backgroundColor={Theme[variant].container.backgroundColor}\n borderColor={Theme[variant].container.border}\n boxShadow=\"0 4px 12px rgba(0, 0, 0, 0.08)\" // Subtle shadow\n opacity={isVisible ? 1 : 0}\n transform={isVisible ? 'scale(1)' : 'scale(0.95)'}\n transition=\"all 0.3s ease\"\n {...views?.container}\n >\n {showIcon && (\n <View marginTop=\"2px\" {...views?.icon}>\n {getIcon()}\n </View>\n )}\n\n <Vertical gap={4} flex=\"1\">\n <Text\n size=\"md\"\n fontWeight=\"600\" // Semi-bold for better readability\n color={Theme[variant].content.color}\n lineHeight=\"1.4\"\n {...views?.title}\n >\n {title}\n </Text>\n\n {description && (\n <Text\n size=\"sm\"\n color={Theme[variant].content.color}\n fontWeight=\"400\" // Regular weight\n lineHeight=\"1.5\"\n {...views?.description}\n >\n {description}\n </Text>\n )}\n\n {action && actionText && (\n <Text\n size=\"sm\"\n fontWeight=\"600\" // Semi-bold for better readability\n marginTop=\"8px\" // 2 × 4px grid\n cursor=\"pointer\"\n color={Theme[variant].content.color}\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n action();\n }}\n _hover={{ textDecoration: 'underline' }}\n transition=\"all 0.2s ease\"\n {...views?.actionButton}\n >\n {actionText}\n </Text>\n )}\n </Vertical>\n\n {isClosable && (\n <View\n as=\"button\"\n aria-label=\"Close toast\"\n backgroundColor=\"transparent\"\n border=\"none\"\n cursor=\"pointer\"\n padding=\"4px\" // 1 × 4px grid\n marginLeft=\"8px\" // 2 × 4px grid\n marginTop=\"-4px\" // 1 × 4px grid\n marginRight=\"-8px\" // 2 × 4px grid\n borderRadius=\"4px\" // 1 × 4px grid\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onClose();\n }}\n _hover={{ backgroundColor: 'rgba(0, 0, 0, 0.05)' }}\n transition=\"all 0.2s ease\"\n {...views?.closeButton}\n >\n <CloseIcon widthHeight={16} color={Theme[variant].content.color} />\n </View>\n )}\n </Horizontal>\n );\n};\n\n// Toast Container component\nexport const ToastContainer: React.FC<ToastContainerProps> = ({\n position = 'top-right',\n gap = 8,\n limit = 5,\n containerStyle,\n}) => {\n const { toasts, remove } = useToastStore();\n\n // Group toasts by position\n const toastsByPosition = React.useMemo(() => {\n const grouped: Record<ToastPosition, typeof toasts> = {\n top: [],\n 'top-right': [],\n 'top-left': [],\n bottom: [],\n 'bottom-right': [],\n 'bottom-left': [],\n };\n\n // Group toasts by their position or the container's default position\n toasts.forEach((toast: any) => {\n const pos = toast.position || position;\n grouped[pos as ToastPosition].push(toast);\n });\n\n // Apply limits to each position group\n Object.keys(grouped).forEach((pos) => {\n grouped[pos as ToastPosition] = grouped[pos as ToastPosition].slice(\n -limit\n );\n });\n\n return grouped;\n }, [toasts, position, limit]);\n\n // Get toasts for the current position\n const visibleToasts = toastsByPosition[position];\n\n return (\n <View\n position=\"fixed\"\n zIndex={9999}\n display=\"flex\"\n flexDirection={position.includes('bottom') ? 'column-reverse' : 'column'}\n gap={`${gap}px`}\n width=\"fit-content\"\n maxWidth=\"100%\"\n pointerEvents=\"none\"\n {...ToastPositions[position as ToastPosition]}\n style={containerStyle}\n >\n {visibleToasts.map((toast: any) => (\n <View\n key={toast.id}\n pointerEvents=\"auto\"\n animation={\n position.includes('right')\n ? 'slideInRight 0.3s ease-out, fadeIn 0.3s ease-out'\n : position.includes('left')\n ? 'slideInLeft 0.3s ease-out, fadeIn 0.3s ease-out'\n : position.includes('top')\n ? 'slideInDown 0.3s ease-out, fadeIn 0.3s ease-out'\n : 'slideInUp 0.3s ease-out, fadeIn 0.3s ease-out'\n }\n >\n <ToastView\n id={toast.id}\n variant={toast.variant}\n title={toast.title}\n description={toast.description}\n onClose={() => remove(toast.id)}\n isClosable={toast.isClosable}\n action={toast.action}\n actionText={toast.actionText}\n showIcon={toast.showIcon}\n views={toast.views}\n render={toast.render}\n icon={toast.icon}\n isVisible={toast.isVisible}\n />\n </View>\n ))}\n </View>\n );\n};\n","import React from 'react';\nimport { ToastView, ToastContainer } from './Toast/Toast.view';\nimport { ToastProps, ToastContainerProps } from './Toast/Toast.props';\nimport {\n showToast,\n showInfoToast,\n showSuccessToast,\n showWarningToast,\n showErrorToast,\n removeToast,\n removeAllToasts,\n} from './Toast/Toast.store';\nimport { useToast as useToastHook } from './Toast/Toast.hook';\n\n/**\n * Toast component for displaying temporary notifications\n */\nconst ToastComponent: React.FC<ToastProps> = (props) => {\n return <ToastView {...props} />;\n};\n\n// Create a Toast object with static methods\nconst Toast = Object.assign(ToastComponent, {\n Container: (props: ToastContainerProps) => <ToastContainer {...props} />,\n show: showToast,\n info: showInfoToast,\n success: showSuccessToast,\n warning: showWarningToast,\n error: showErrorToast,\n remove: removeToast,\n removeAll: removeAllToasts,\n});\n\n// Export the hook for component usage\nexport const useToast = useToastHook;\n\nexport { Toast };\n","import { useState, useEffect, useCallback, useRef, useMemo } from 'react';\nimport { CommandGroup, CommandItem } from './Command.type';\n\nexport interface CommandStateProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n groups?: CommandGroup[];\n commands?: CommandItem[];\n filter?: (value: string, item: CommandItem) => boolean;\n}\n\n// Default filter function defined outside the hook to avoid recreating it on each render\nconst defaultFilterFn = (value: string, item: CommandItem) => {\n if (!value) return true;\n\n const searchValue = value.toLowerCase();\n const matchesName = item.name.toLowerCase().includes(searchValue);\n const matchesDescription =\n item.description?.toLowerCase().includes(searchValue) || false;\n const matchesKeywords =\n item.keywords?.some((keyword) =>\n keyword.toLowerCase().includes(searchValue)\n ) || false;\n\n return matchesName || matchesDescription || matchesKeywords;\n};\n\nexport const useCommandState = ({\n open,\n onOpenChange,\n groups = [],\n commands = [],\n filter,\n}: CommandStateProps) => {\n // State for search input\n const [search, setSearch] = useState('');\n\n // State for selected item index\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n // Ref for the command list element\n const listRef = useRef<HTMLDivElement>(null);\n\n // Use the provided filter or fall back to the default\n const filterFn = useMemo(() => filter || defaultFilterFn, [filter]);\n\n // Combine and memoize all commands from groups and flat list\n const allCommands = useMemo(() => {\n const groupCommands = groups.flatMap((group) => group.commands);\n return [...groupCommands, ...commands];\n }, [groups, commands]);\n\n // Filter and memoize commands based on search\n const filteredCommands = useMemo(() => {\n if (!search.trim()) return allCommands;\n return allCommands.filter((item) => filterFn(search, item));\n }, [allCommands, search, filterFn]);\n\n // Filter and memoize groups based on search\n const filteredGroups = useMemo(() => {\n if (!search) return groups;\n\n const filterFn = filter || defaultFilterFn;\n return groups\n .map((g) => ({\n ...g,\n commands: g.commands.filter((c) => filterFn(search, c)),\n }))\n .filter((g) => g.commands.length);\n }, [groups, search, filter]);\n\n // Reset selected index when filtered commands change\n useEffect(() => {\n setSelectedIndex(0);\n }, [filteredCommands.length]);\n\n // Handle keyboard navigation\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!open) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setSelectedIndex((prev) =>\n prev < filteredCommands.length - 1 ? prev + 1 : prev\n );\n break;\n case 'ArrowUp':\n e.preventDefault();\n setSelectedIndex((prev) => (prev > 0 ? prev - 1 : prev));\n break;\n case 'Enter':\n e.preventDefault();\n if (filteredCommands[selectedIndex]) {\n filteredCommands[selectedIndex].onSelect();\n onOpenChange(false);\n setSearch('');\n }\n break;\n case 'Escape':\n e.preventDefault();\n onOpenChange(false);\n setSearch('');\n break;\n }\n },\n [open, filteredCommands, selectedIndex, onOpenChange]\n );\n\n // Add keyboard event listener\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleKeyDown]);\n\n // Scroll selected item into view\n useEffect(() => {\n if (listRef.current && open) {\n const selectedElement = listRef.current.querySelector(\n `[data-index=\"${selectedIndex}\"]`\n );\n if (selectedElement) {\n selectedElement.scrollIntoView({ block: 'nearest' });\n }\n }\n }, [selectedIndex, open]);\n\n // Reset state when command palette is opened\n useEffect(() => {\n if (open) {\n setSelectedIndex(0);\n } else {\n // Clear search when closed\n setSearch('');\n }\n }, [open]);\n\n return {\n search,\n setSearch,\n selectedIndex,\n setSelectedIndex,\n filteredCommands,\n filteredGroups,\n listRef,\n };\n};\n","import { ViewProps } from 'app-studio';\nimport { CommandSize, CommandVariant } from './Command.type';\n\nexport const CommandSizes: Record<CommandSize, ViewProps> = {\n sm: {\n width: '400px',\n maxHeight: '300px',\n },\n md: {\n width: '500px',\n maxHeight: '400px',\n },\n lg: {\n width: '600px',\n maxHeight: '500px',\n },\n};\n\nexport const getCommand = (\n themeMode: string\n): Record<CommandVariant, ViewProps> => {\n return {\n default: {\n backgroundColor: 'color.white',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n boxShadow: '0px 4px 20px rgba(0, 0, 0, 0.1)',\n },\n filled: {\n backgroundColor: 'color.gray.50',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n boxShadow: '0px 4px 20px rgba(0, 0, 0, 0.1)',\n },\n outline: {\n backgroundColor: 'color.white',\n borderWidth: '2px',\n borderStyle: 'solid',\n borderColor: 'color.gray.300',\n boxShadow: '0px 4px 20px rgba(0, 0, 0, 0.1)',\n },\n };\n // Add dark mode conditional styling here\n};\n\n// For backward compatibility\nexport const CommandVariants = getCommand('light');\n\nexport const CommandInputStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n padding: '12px 16px',\n borderBottomWidth: '1px',\n borderBottomStyle: 'solid',\n borderBottomColor: 'color.gray.200',\n};\n\nexport const CommandListStyles: ViewProps = {\n overflow: 'auto',\n padding: '8px 0',\n};\n\nexport const CommandGroupStyles: ViewProps = {\n marginBottom: '8px',\n};\n\nexport const CommandGroupHeadingStyles: ViewProps = {\n padding: '8px 16px',\n fontSize: '12px',\n fontWeight: 'bold',\n color: 'color.gray.500',\n textTransform: 'uppercase',\n};\n\nexport const CommandItemStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n padding: '8px 16px',\n cursor: 'pointer',\n userSelect: 'none',\n borderRadius: '4px',\n margin: '0 8px',\n _hover: {\n backgroundColor: 'color.gray.100',\n },\n};\n\nexport const CommandItemSelectedStyles: ViewProps = {\n backgroundColor: 'color.blue.50',\n _hover: {\n backgroundColor: 'color.blue.100',\n },\n};\n\nexport const CommandItemDisabledStyles: ViewProps = {\n opacity: 0.5,\n cursor: 'not-allowed',\n _hover: {\n backgroundColor: 'transparent',\n },\n};\n\nexport const CommandItemIconStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: '12px',\n color: 'color.gray.500',\n};\n\nexport const CommandItemContentStyles: ViewProps = {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n};\n\nexport const CommandItemNameStyles: ViewProps = {\n fontSize: '14px',\n fontWeight: 'medium',\n};\n\nexport const CommandItemDescriptionStyles: ViewProps = {\n fontSize: '12px',\n color: 'color.gray.500',\n marginTop: '2px',\n};\n\nexport const CommandItemShortcutStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n marginLeft: '12px',\n fontSize: '12px',\n color: 'color.gray.500',\n};\n\nexport const CommandEmptyStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '16px',\n color: 'color.gray.500',\n textAlign: 'center',\n};\n\nexport const CommandFooterStyles: ViewProps = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 16px',\n borderTopWidth: '1px',\n borderTopStyle: 'solid',\n borderTopColor: 'color.gray.200',\n fontSize: '12px',\n color: 'color.gray.500',\n};\n","import React, { createContext, useContext, useRef } from 'react';\nimport { View } from 'app-studio';\nimport { Text } from '../../Text/Text';\nimport { Vertical } from 'app-studio';\nimport { Horizontal } from 'app-studio';\nimport { SearchIcon } from '../../Icon/Icon';\nimport {\n CommandProps,\n CommandInputProps,\n CommandListProps,\n CommandGroupProps,\n CommandItemProps,\n CommandEmptyProps,\n} from './Command.props';\nimport {\n CommandSizes,\n CommandVariants,\n CommandInputStyles,\n CommandListStyles,\n CommandGroupStyles,\n CommandGroupHeadingStyles,\n CommandItemStyles,\n CommandItemSelectedStyles,\n CommandItemDisabledStyles,\n CommandItemIconStyles,\n CommandItemContentStyles,\n CommandItemNameStyles,\n CommandItemDescriptionStyles,\n CommandItemShortcutStyles,\n CommandEmptyStyles,\n CommandFooterStyles,\n} from './Command.style';\nimport { CommandItem as CommandItemInterface } from './Command.type';\n\n// Create context for the Command component\ninterface CommandContextType {\n search: string;\n setSearch: (value: string) => void;\n selectedIndex: number;\n setSelectedIndex: (index: number) => void;\n filteredCommands: CommandItemInterface[];\n onSelect: (item: CommandItemInterface) => void;\n}\n\nconst CommandContext = createContext<CommandContextType>({\n search: '',\n setSearch: () => {},\n selectedIndex: 0,\n setSelectedIndex: () => {},\n filteredCommands: [],\n onSelect: () => {},\n});\n\n// Hook to use the Command context\nexport const useCommandContext = () => useContext(CommandContext);\n\n// Provider component for the Command context\nexport const CommandProvider: React.FC<{\n value: CommandContextType;\n children: React.ReactNode;\n}> = ({ value, children }) => {\n return (\n <CommandContext.Provider value={value}>{children}</CommandContext.Provider>\n );\n};\n\n// Command Input component\nexport const CommandInput: React.FC<CommandInputProps> = ({\n value,\n onValueChange,\n placeholder = 'Type a command or search...',\n views,\n ...props\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Focus input when component mounts\n React.useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n }\n }, []);\n\n return (\n <View {...CommandInputStyles} {...views?.container} {...props}>\n <SearchIcon widthHeight={16} color=\"color.gray.400\" marginRight=\"8px\" />\n <View\n as=\"input\"\n type=\"text\"\n value={value}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n onValueChange(e.target.value)\n }\n placeholder={placeholder}\n width=\"100%\"\n border=\"none\"\n outline=\"none\"\n backgroundColor=\"transparent\"\n fontSize=\"14px\"\n ref={inputRef}\n {...views?.input}\n />\n </View>\n );\n};\n\n// Command List component\nexport const CommandList: React.FC<CommandListProps> = ({\n children,\n views,\n ...props\n}) => {\n return (\n <View {...CommandListStyles} {...views?.container} {...props}>\n {children}\n </View>\n );\n};\n\n// Command Group component\nexport const CommandGroup: React.FC<CommandGroupProps> = ({\n heading,\n children,\n views,\n ...props\n}) => {\n return (\n <View {...CommandGroupStyles} {...views?.container} {...props}>\n <Text {...CommandGroupHeadingStyles} {...views?.heading}>\n {heading}\n </Text>\n {children}\n </View>\n );\n};\n\n// Command Item component\nexport const CommandItem: React.FC<CommandItemProps> = ({\n item,\n selected = false,\n onSelect,\n views,\n ...props\n}) => {\n const handleClick = () => {\n if (!item.disabled && onSelect) {\n onSelect();\n }\n };\n\n return (\n <Horizontal\n {...CommandItemStyles}\n {...(selected ? CommandItemSelectedStyles : {})}\n {...(item.disabled ? CommandItemDisabledStyles : {})}\n onClick={handleClick}\n {...views?.container}\n {...props}\n >\n {item.icon && (\n <View {...CommandItemIconStyles} {...views?.icon}>\n {item.icon}\n </View>\n )}\n <Vertical {...CommandItemContentStyles} {...views?.content}>\n <Text {...CommandItemNameStyles} {...views?.name}>\n {item.name}\n </Text>\n {item.description && (\n <Text {...CommandItemDescriptionStyles} {...views?.description}>\n {item.description}\n </Text>\n )}\n </Vertical>\n {item.shortcut && (\n <Text {...CommandItemShortcutStyles} {...views?.shortcut}>\n {item.shortcut}\n </Text>\n )}\n </Horizontal>\n );\n};\n\n// Command Empty component\nexport const CommandEmpty: React.FC<CommandEmptyProps> = ({\n children = 'No results found.',\n views,\n ...props\n}) => {\n return (\n <View {...CommandEmptyStyles} {...views?.container} {...props}>\n {children}\n </View>\n );\n};\n\n// Main Command View component\nexport const CommandView: React.FC<\n CommandProps & {\n search: string;\n setSearch: (value: string) => void;\n selectedIndex: number;\n setSelectedIndex: (index: number) => void;\n filteredCommands: CommandItemInterface[];\n filteredGroups: any[];\n listRef: React.RefObject<HTMLDivElement>;\n }\n> = ({\n open,\n onOpenChange,\n groups = [],\n commands = [],\n placeholder,\n size = 'md',\n variant = 'default',\n emptyState,\n footer,\n search,\n setSearch,\n selectedIndex,\n setSelectedIndex,\n filteredCommands,\n filteredGroups,\n listRef,\n views,\n filter,\n ...props\n}) => {\n if (!open) return null;\n\n const handleItemSelect = React.useCallback(\n (item: CommandItemInterface) => {\n if (item.disabled) return;\n item.onSelect();\n onOpenChange(false);\n setSearch('');\n },\n [onOpenChange, setSearch]\n );\n\n const handleBackdropClick = React.useCallback(\n (e: React.MouseEvent) =>\n e.target === e.currentTarget && onOpenChange(false),\n [onOpenChange]\n );\n\n const contextValue = React.useMemo(\n () => ({\n search,\n setSearch,\n selectedIndex,\n setSelectedIndex,\n filteredCommands,\n onSelect: handleItemSelect,\n }),\n [\n search,\n selectedIndex,\n filteredCommands,\n handleItemSelect,\n setSearch,\n setSelectedIndex,\n ]\n );\n\n const hasGroups = groups.length > 0;\n // const hasCommands = commands.length > 0;\n const isEmpty = filteredCommands.length === 0;\n\n return (\n <View\n position=\"fixed\"\n top={0}\n left={0}\n right={0}\n bottom={0}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor=\"rgba(0, 0, 0, 0.4)\"\n zIndex={9999}\n onClick={handleBackdropClick}\n {...props}\n >\n <CommandProvider value={contextValue}>\n <View\n borderRadius=\"8px\"\n overflow=\"hidden\"\n display=\"flex\"\n flexDirection=\"column\"\n {...CommandSizes[size]}\n {...CommandVariants[variant]}\n {...views?.container}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <CommandInput\n value={search}\n onValueChange={setSearch}\n placeholder={placeholder}\n views={views?.searchInput}\n />\n\n <View ref={listRef} flex={1} overflow=\"auto\" {...views?.list}>\n {isEmpty ? (\n emptyState ? (\n emptyState\n ) : (\n <CommandEmpty views={views?.empty} />\n )\n ) : hasGroups ? (\n filteredGroups.map((group) => (\n <CommandGroup\n key={group.id}\n heading={group.name}\n views={views?.groupHeading}\n >\n {group.commands.map((item: any) => {\n const commandIndex = filteredCommands.findIndex(\n (cmd) => cmd.id === item.id\n );\n return (\n <CommandItem\n key={item.id}\n item={item}\n selected={commandIndex === selectedIndex}\n onSelect={() => handleItemSelect(item)}\n data-index={commandIndex}\n views={{\n container: views?.item,\n icon: views?.icon,\n content: views?.content,\n name: views?.name,\n description: views?.description,\n shortcut: views?.shortcut,\n }}\n />\n );\n })}\n </CommandGroup>\n ))\n ) : (\n filteredCommands.map((item, index) => (\n <CommandItem\n key={item.id}\n item={item}\n selected={index === selectedIndex}\n onSelect={() => handleItemSelect(item)}\n data-index={index}\n views={{\n container: views?.item,\n icon: views?.icon,\n content: views?.content,\n name: views?.name,\n description: views?.description,\n shortcut: views?.shortcut,\n }}\n />\n ))\n )}\n </View>\n\n {footer && (\n <View {...CommandFooterStyles} {...views?.footer}>\n {footer}\n </View>\n )}\n </View>\n </CommandProvider>\n </View>\n );\n};\n","import React from 'react';\nimport { CommandProps, CommandType } from './Command/Command.props';\nimport { useCommandState } from './Command/Command.state';\nimport {\n CommandView,\n CommandInput,\n CommandList,\n CommandGroup,\n CommandItem as CommandItemView,\n CommandEmpty,\n} from './Command/Command.view';\n\n/**\n * Command component for displaying a command palette with search functionality.\n */\nconst CommandComponent: React.FC<CommandProps> = ({\n open,\n onOpenChange,\n groups = [],\n commands = [],\n placeholder,\n size = 'md',\n variant = 'default',\n filter,\n emptyState,\n footer,\n views,\n ...props\n}) => {\n const {\n search,\n setSearch,\n selectedIndex,\n setSelectedIndex,\n filteredCommands,\n filteredGroups,\n listRef,\n } = useCommandState({\n open,\n onOpenChange,\n groups,\n commands,\n filter,\n });\n\n return (\n <CommandView\n open={open}\n onOpenChange={onOpenChange}\n groups={groups}\n commands={commands}\n placeholder={placeholder}\n size={size}\n variant={variant}\n emptyState={emptyState}\n footer={footer}\n search={search}\n setSearch={setSearch}\n selectedIndex={selectedIndex}\n setSelectedIndex={setSelectedIndex}\n filteredCommands={filteredCommands}\n filteredGroups={filteredGroups}\n listRef={listRef}\n views={views}\n {...props}\n />\n );\n};\n\nexport const Command = CommandComponent as CommandType;\n\n// Assign the sub-components to the main component\nCommand.Input = CommandInput;\nCommand.List = CommandList;\nCommand.Group = CommandGroup;\nCommand.Item = CommandItemView;\nCommand.Empty = CommandEmpty;\n","/**\n * Generates a random ID string\n * @returns A random string that can be used as an ID\n */\nexport const generateId = (): string => {\n return Math.random().toString(36).substring(2, 11);\n};\n","import { ViewProps } from 'app-studio';\nimport { Size, Variant, Position, Alignment } from './Tooltip.type';\n\nexport const TooltipSizes: Record<Size, ViewProps> = {\n sm: {\n padding: '4px 8px',\n fontSize: '12px',\n maxWidth: '200px',\n },\n md: {\n padding: '6px 10px',\n fontSize: '14px',\n maxWidth: '250px',\n },\n lg: {\n padding: '8px 12px',\n fontSize: '16px',\n maxWidth: '300px',\n },\n};\n\nexport const getTooltip = (themeMode: string): Record<Variant, ViewProps> => {\n return {\n default: {\n backgroundColor: 'color.gray.800',\n color: 'color.white',\n },\n light: {\n backgroundColor: 'color.white',\n color: 'color.gray.800',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: 'color.gray.200',\n },\n dark: {\n backgroundColor: 'color.black',\n color: 'color.white',\n },\n };\n // Add dark mode conditional styling here\n};\n\n// For backward compatibility\nexport const TooltipVariants = getTooltip('light');\n\nexport const getTooltipPositionStyles = (\n position: Position,\n align: Alignment\n): ViewProps => {\n const baseStyles: ViewProps = {\n position: 'absolute',\n zIndex: 1000,\n };\n\n // Position styles\n switch (position) {\n case 'top':\n return {\n ...baseStyles,\n bottom: '100%',\n marginBottom: '8px',\n ...(align === 'start'\n ? { left: '0' }\n : align === 'end'\n ? { right: '0' }\n : { left: '50%', transform: 'translateX(-50%)' }),\n };\n case 'right':\n return {\n ...baseStyles,\n left: '100%',\n marginLeft: '8px',\n ...(align === 'start'\n ? { top: '0' }\n : align === 'end'\n ? { bottom: '0' }\n : { top: '50%', transform: 'translateY(-50%)' }),\n };\n case 'bottom':\n return {\n ...baseStyles,\n top: '100%',\n marginTop: '8px',\n ...(align === 'start'\n ? { left: '0' }\n : align === 'end'\n ? { right: '0' }\n : { left: '50%', transform: 'translateX(-50%)' }),\n };\n case 'left':\n return {\n ...baseStyles,\n right: '100%',\n marginRight: '8px',\n ...(align === 'start'\n ? { top: '0' }\n : align === 'end'\n ? { bottom: '0' }\n : { top: '50%', transform: 'translateY(-50%)' }),\n };\n default:\n return baseStyles;\n }\n};\n\nexport const getArrowStyles = (position: Position): ViewProps => {\n const baseStyles: ViewProps = {\n position: 'absolute',\n width: '8px',\n height: '8px',\n backgroundColor: 'inherit',\n borderStyle: 'inherit',\n borderWidth: 'inherit',\n borderColor: 'inherit',\n transform: 'rotate(45deg)',\n };\n\n switch (position) {\n case 'top':\n return {\n ...baseStyles,\n bottom: '-4px',\n left: '50%',\n marginLeft: '-4px',\n borderTop: 'none',\n borderLeft: 'none',\n };\n case 'right':\n return {\n ...baseStyles,\n left: '-4px',\n top: '50%',\n marginTop: '-4px',\n borderRight: 'none',\n borderTop: 'none',\n };\n case 'bottom':\n return {\n ...baseStyles,\n top: '-4px',\n left: '50%',\n marginLeft: '-4px',\n borderBottom: 'none',\n borderRight: 'none',\n };\n case 'left':\n return {\n ...baseStyles,\n right: '-4px',\n top: '50%',\n marginTop: '-4px',\n borderLeft: 'none',\n borderBottom: 'none',\n };\n default:\n return baseStyles;\n }\n};\n","import React, { createContext, useContext } from 'react';\nimport { View, Text, ViewProps } from 'app-studio';\nimport { TooltipContextType, Position, Alignment } from './Tooltip.type';\nimport { TooltipTriggerProps, TooltipContentProps } from './Tooltip.props';\nimport {\n TooltipSizes,\n TooltipVariants,\n getTooltipPositionStyles,\n getArrowStyles,\n} from './Tooltip.style';\n\n// Create context for the Tooltip\nconst TooltipContext = createContext<TooltipContextType>({\n isOpen: false,\n openTooltip: () => {},\n closeTooltip: () => {},\n triggerRef: { current: null },\n contentRef: { current: null },\n contentId: '',\n triggerId: '',\n});\n\n// Hook to use the Tooltip context\nexport const useTooltipContext = () => useContext(TooltipContext);\n\n// Provider component for the Tooltip context\nexport const TooltipProvider: React.FC<{\n value: TooltipContextType;\n children: React.ReactNode;\n}> = ({ value, children }) => {\n return (\n <TooltipContext.Provider value={value}>{children}</TooltipContext.Provider>\n );\n};\n\n// Tooltip Trigger component\nexport const TooltipTrigger: React.FC<TooltipTriggerProps> = ({\n children,\n views,\n asChild = false,\n ...props\n}) => {\n const { openTooltip, closeTooltip, triggerRef, contentId, triggerId } =\n useTooltipContext();\n\n const handleMouseEnter = () => openTooltip();\n const handleMouseLeave = () => closeTooltip();\n const handleFocus = () => openTooltip(); // For keyboard accessibility\n const handleBlur = () => closeTooltip(); // For keyboard accessibility\n\n const triggerProps = {\n ref: triggerRef,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onFocus: handleFocus,\n onBlur: handleBlur,\n id: triggerId,\n 'aria-describedby': contentId, // Link trigger to content for screen readers\n ...views?.container,\n ...props,\n };\n\n // If asChild is true, clone the child element and pass the props\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children, triggerProps);\n }\n\n // Otherwise, wrap the children in a View component\n return (\n <View display=\"inline-block\" {...triggerProps}>\n {children}\n </View>\n );\n};\n\n// Tooltip Content component\nexport const TooltipContent: React.FC<TooltipContentProps> = ({\n children,\n views,\n ...props\n}) => {\n const { isOpen, contentRef, contentId, triggerId } = useTooltipContext();\n\n if (!isOpen) {\n return null; // Don't render content if not open\n }\n\n return (\n <View\n ref={contentRef}\n id={contentId}\n role=\"tooltip\" // Use tooltip role for accessibility\n aria-labelledby={triggerId} // Associate content with trigger\n {...views?.container}\n {...props}\n >\n {children}\n </View>\n );\n};\n\n// Main Tooltip View component\nexport const TooltipView: React.FC<\n {\n content: React.ReactNode;\n children: React.ReactNode;\n position?: Position;\n align?: Alignment;\n size?: string;\n variant?: string;\n showArrow?: boolean;\n views?: any;\n } & Omit<ViewProps, 'position'>\n> = ({\n content,\n children,\n position = 'top',\n align = 'center',\n size = 'md',\n variant = 'default',\n showArrow = true,\n views,\n\n themeMode: elementMode,\n ...props\n}) => {\n const {\n isOpen,\n // openTooltip,\n // closeTooltip,\n // triggerRef,\n contentRef,\n contentId,\n triggerId,\n } = useTooltipContext();\n\n // Get position styles\n const positionStyles = getTooltipPositionStyles(position, align);\n\n // Get arrow styles\n const arrowStyles = showArrow ? getArrowStyles(position) : {};\n\n return (\n <View\n position=\"relative\"\n display=\"inline-block\"\n {...views?.container}\n {...props}\n >\n {/* Trigger */}\n <TooltipTrigger>{children}</TooltipTrigger>\n\n {/* Content */}\n {isOpen && (\n <View\n ref={contentRef}\n id={contentId}\n role=\"tooltip\"\n aria-labelledby={triggerId}\n borderRadius={4}\n boxShadow=\"0px 2px 8px rgba(0, 0, 0, 0.15)\"\n {...TooltipSizes[size as keyof typeof TooltipSizes]}\n {...TooltipVariants[variant as keyof typeof TooltipVariants]}\n {...positionStyles}\n {...views?.content}\n >\n {typeof content === 'string' ? (\n <Text {...views?.text}>{content}</Text>\n ) : (\n content\n )}\n\n {/* Arrow */}\n {showArrow && <View {...arrowStyles} {...views?.arrow} />}\n </View>\n )}\n </View>\n );\n};\n","import React from 'react';\nimport { TooltipProps, TooltipType } from './Tooltip/Tooltip.props';\nimport { useTooltipState } from './Tooltip/Tooltip.state';\nimport {\n TooltipProvider,\n TooltipTrigger,\n TooltipContent,\n TooltipView,\n} from './Tooltip/Tooltip.view';\n\n/**\n * Tooltip component for displaying additional information when hovering over an element.\n * Supports configurable positions, delays, and styling.\n */\nconst TooltipComponent: React.FC<TooltipProps> = ({\n content,\n children,\n position = 'top',\n align = 'center',\n size = 'md',\n variant = 'default',\n openDelay = 200,\n closeDelay = 200,\n showArrow = true,\n defaultOpen = false,\n isDisabled = false,\n views,\n ...props\n}) => {\n const tooltipState = useTooltipState({\n defaultOpen,\n openDelay,\n closeDelay,\n isDisabled,\n });\n\n return (\n <TooltipProvider value={tooltipState}>\n <TooltipView\n content={content}\n position={position}\n align={align}\n size={size}\n variant={variant}\n showArrow={showArrow}\n views={views}\n {...props}\n >\n {children}\n </TooltipView>\n </TooltipProvider>\n );\n};\n\nexport const Tooltip = TooltipComponent as TooltipType;\n\n// Assign the sub-components to the main component\nTooltip.Trigger = TooltipTrigger;\nTooltip.Content = TooltipContent;\n","import { useState, useRef, useCallback, useEffect } from 'react';\nimport { generateId } from '../../../utils/generateId';\n\ninterface TooltipStateProps {\n defaultOpen?: boolean;\n openDelay?: number;\n closeDelay?: number;\n isDisabled?: boolean;\n}\n\nexport const useTooltipState = ({\n defaultOpen = false,\n openDelay = 200,\n closeDelay = 200,\n isDisabled = false,\n}: TooltipStateProps = {}) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLElement>(null);\n const openTimerRef = useRef<NodeJS.Timeout | null>(null);\n const closeTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n // Generate unique IDs for accessibility\n const triggerId = useRef(`tooltip-trigger-${generateId()}`).current;\n const contentId = useRef(`tooltip-content-${generateId()}`).current;\n\n // Open tooltip with delay\n const openTooltip = useCallback(() => {\n if (isDisabled) return;\n\n // Clear any existing close timer\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n\n // Set open timer\n if (!isOpen && !openTimerRef.current) {\n openTimerRef.current = setTimeout(() => {\n setIsOpen(true);\n openTimerRef.current = null;\n }, openDelay);\n }\n }, [isOpen, openDelay, isDisabled]);\n\n // Close tooltip with delay\n const closeTooltip = useCallback(() => {\n // Clear any existing open timer\n if (openTimerRef.current) {\n clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }\n\n // Set close timer\n if (isOpen && !closeTimerRef.current) {\n closeTimerRef.current = setTimeout(() => {\n setIsOpen(false);\n closeTimerRef.current = null;\n }, closeDelay);\n }\n }, [isOpen, closeDelay]);\n\n // Cancel close timer (used when mouse enters content)\n const cancelCloseTimer = useCallback(() => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n // Clean up timers on unmount\n useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n clearTimeout(openTimerRef.current);\n }\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n }\n };\n }, []);\n\n // Close tooltip on ESC key\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen]);\n\n return {\n isOpen,\n openTooltip,\n closeTooltip,\n cancelCloseTimer,\n triggerRef,\n contentRef,\n triggerId,\n contentId,\n };\n};\n","import React from 'react';\nimport { AlertView } from './Alert/Alert.view';\nimport { AlertProps } from './Alert/Alert.props';\n// Definition of the AlertComponent functional component with props.\nconst AlertComponent = (props: AlertProps) => <AlertView {...props} />;\n// Exporting the AlertComponent as 'Alert' for use in other parts of the application.\nexport const Alert = AlertComponent;\n","import React from 'react';\nimport { AspectRatioProps } from './AspectRatio/AspectRatio.props';\nimport { AspectRatioView } from './AspectRatio/AspectRatio.view';\n// Declaration of the AspectRatioComponent functional component with destructured props.\nconst AspectRatioComponent = ({\n ratio,\n children,\n ...props\n}: // Opening of the functional component's body.\nAspectRatioProps) => {\n // Beginning of the return statement in the functional component.\n return (\n <AspectRatioView ratio={ratio} {...props}>\n {children}\n </AspectRatioView>\n );\n};\nexport const AspectRatio = AspectRatioComponent;\n","import React from 'react';\nimport { AvatarProps } from './Avatar/Avatar.props';\nimport { useAvatarState } from './Avatar/Avatar.state';\nimport { AvatarView } from './Avatar/Avatar.view';\n\n// Defines the AvatarComponent functional component with destructured props from AvatarProps type.\nconst AvatarComponent = ({\n src,\n size,\n views,\n fallback,\n onClick,\n}: AvatarProps) => {\n // Uses custom hook useAvatarState to manage the avatar image loading error state.\n const { imageError, setImageError } = useAvatarState();\n // Begins the JSX return block for rendering the AvatarView component.\n return (\n <AvatarView\n src={src}\n size={size}\n views={views}\n fallback={fallback}\n imageError={imageError}\n setImageError={setImageError}\n onClick={onClick}\n />\n );\n // AvatarComponent is a functional component that wraps the AvatarView with added state logic.\n};\n// Exports the AvatarComponent as Avatar for use in other parts of the application.\nexport const Avatar = AvatarComponent;\n","import { useState } from 'react';\n// Defines a state hook for managing avatar image error status, initialized as false.\nexport const useAvatarState = () => {\n const [imageError, setImageError] = useState(false);\n // Provides an object containing the image error state and its setter function.\n return { imageError, setImageError };\n};\n","import React from 'react';\nimport { BadgeProps } from './Badge/Badge.props';\nimport BadgeView from './Badge/Badge.view';\n// Badge component that displays a small indicator, typically used for counts or status\nexport const Badge = (props: BadgeProps) => <BadgeView {...props} />;\n","import React from 'react';\nimport { ChartProps } from './Chart/Chart.props';\nimport { ChartView } from './Chart/Chart.view';\n\n/**\n * Chart component for data visualization.\n * Supports bar, line, area, pie, and donut chart types.\n */\nconst ChartComponent: React.FC<ChartProps> = (props) => {\n return <ChartView {...props} />;\n};\n\nexport const Chart = ChartComponent;\n","import React from 'react';\n\nimport { CheckboxProps } from './Checkbox/Checkbox.props';\nimport { useCheckboxState } from './Checkbox/Checkbox.state';\nimport CheckboxView from './Checkbox/Checkbox.view';\n\nconst CheckboxComponent: React.FC<CheckboxProps> = (props) => {\n const checkboxStates = useCheckboxState(props);\n\n return <CheckboxView {...checkboxStates} {...props} />;\n};\n\n/**\n * Checkbox allows users to select one or more options from a list of choices.\n */\nexport const Checkbox = CheckboxComponent;\n","import React from 'react';\nimport { ComboBoxProps } from './ComboBox/ComboBox.props';\nimport { useComboBoxState } from './ComboBox/ComboBox.state';\nimport ComboBoxView from './ComboBox/ComboBox.view';\n\n// Defines the ComboBoxComponent functional component with ComboBoxProps\nconst ComboBoxComponent: React.FC<ComboBoxProps> = ({\n // Destructures 'id' from component props\n id,\n // Destructures 'name' from component props\n name,\n // Destructures 'items' from component props, used to populate combobox\n items,\n // Destructures 'placeholder' from component props, displayed when no item selected\n placeholder,\n // Destructures 'searchPlaceholder' from component props, used as the search field placeholder\n searchPlaceholder,\n // Destructures the rest of the props not explicitly defined\n ...props\n}) => {\n // Initializes ComboBox state using custom hook with items and placeholders\n const state = useComboBoxState(items, placeholder, searchPlaceholder);\n return (\n // Render ComboBoxView with passed and state props\n <ComboBoxView id={id} name={name} items={items} {...state} {...props} />\n );\n};\n// Exports the ComboBoxComponent as ComboBox\nexport const ComboBox = ComboBoxComponent;\n","import React from 'react';\n\nimport { CookieConsentProps } from './CookieConsent/CookieConsent.props';\nimport { CookieConsentView } from './CookieConsent/CookieConsent.view';\n\n/**\n * CookieConsent Component\n *\n * A component for displaying a cookie consent banner with customizable styling and content.\n *\n * Features:\n * - Customizable title and description\n * - Configurable button text\n * - Multiple visual variants\n * - Position control (top or bottom)\n * - Theme mode support (light or dark)\n * - Custom styling via views prop\n *\n * @example\n * // Basic usage\n * <CookieConsent />\n *\n * @example\n * // With custom text\n * <CookieConsent\n * title=\"Avis de confidentialité\"\n * description=\"Nous utilisons des cookies pour améliorer votre expérience.\"\n * acceptButtonText=\"J'accepte\"\n * />\n *\n * @example\n * // With custom styling and callbacks\n * <CookieConsent\n * variant=\"primary\"\n * position=\"top\"\n * onAccept={() => console.log('Cookies accepted')}\n * onCustomize={() => openPreferencesModal()}\n * views={{\n * container: { backgroundColor: 'color.blue.50' },\n * title: { color: 'color.blue.800' }\n * }}\n * />\n */\nconst CookieConsentComponent: React.FC<CookieConsentProps> = (props) => {\n return <CookieConsentView {...props} />;\n};\n\nexport const CookieConsent = CookieConsentComponent;\n","import React from 'react';\nimport { CountryPickerProps } from './CountryPicker/CountryPicker.props';\n// Uses the custom hook 'useCountryPickerState' to manage state specific to the CountryPicker component.\nimport { useCountryPickerState } from './CountryPicker/CountryPicker.state';\nimport { CountryPickerView } from './CountryPicker/CountryPicker.view';\n// Defines the CountryPickerComponent as a functional component with type 'React.FC' that takes 'CountryPickerProps' as props.\nconst CountryPickerComponent: React.FC<CountryPickerProps> = (props) => {\n // Invokes the 'useCountryPickerState' hook to obtain state and methods related to country picking functionality.\n const countryPickerStates = useCountryPickerState(props);\n // Renders the CountryPickerView component passing in state and props for dynamic UI representation.\n return <CountryPickerView {...countryPickerStates} {...props} />;\n};\n// Exports the CountryPickerComponent for use in other parts of the application as 'CountryPicker'.\nexport const CountryPicker = CountryPickerComponent;\n","import React from 'react';\n\nimport { DatePickerProps } from './DatePicker/DatePicker.props';\nimport { useDatePickerState } from './DatePicker/DatePicker.state';\nimport DatePickerView from './DatePicker/DatePicker.view';\n\nconst DatePickerComponent: React.FC<DatePickerProps> = (props) => {\n const datePickerStates = useDatePickerState();\n return <DatePickerView {...datePickerStates} {...props} />;\n};\n\n/**\n * Date picker allows users to select a date from a calendar view.\n */\nexport const DatePicker = DatePickerComponent;\n","import React from 'react';\nimport { useTheme, Image, ViewProps, ImageProps } from 'app-studio';\nimport { Center } from 'app-studio';\n\nexport interface FileProps extends ViewProps {\n src: string;\n color?: string;\n views?: {\n container?: ViewProps;\n image?: ImageProps;\n };\n}\n\nexport const FileSVG = ({\n src,\n color,\n views,\n themeMode: elementMode,\n ...props\n}: FileProps) => {\n const { getColor, themeMode } = useTheme();\n\n const Colorprops = color\n ? {\n fill: getColor(color, { themeMode }),\n stroke: getColor(color, { themeMode }),\n }\n : {};\n\n return (\n <Center {...props} {...views?.container}>\n <Image\n {...Colorprops}\n content={'url(\"' + src + '\")'}\n width=\"100%\"\n height=\"100%\"\n {...views?.image}\n />\n </Center>\n );\n};\n\nexport const FileImage = ({\n path,\n ...props\n}: { path: string } & ImageProps) => {\n return <Image src={path} {...props} />;\n};\n","import React from 'react';\n\nimport { CheckboxProps } from '../Form/Checkbox/Checkbox/Checkbox.props';\nimport { useCheckboxState } from '../Form/Checkbox/Checkbox/Checkbox.state';\nimport CheckboxView from '../Form/Checkbox/Checkbox/Checkbox.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst CheckboxComponent: React.FC<CheckboxProps> = (props) => {\n let { value, ...formProps } = useFormikInput(props);\n formProps.isChecked = value;\n const checkboxStates = useCheckboxState(props);\n return <CheckboxView {...checkboxStates} {...formProps} />;\n};\n\n/**\n * Checkbox allows users to select one or more options from a list of choices.\n */\nexport const FormikCheckbox = CheckboxComponent;\n","import React from 'react';\n\nimport { ComboBoxProps } from '../Form/ComboBox/ComboBox/ComboBox.props';\nimport { useComboBoxState } from '../Form/ComboBox/ComboBox/ComboBox.state';\nimport ComboBoxView from '../Form/ComboBox/ComboBox/ComboBox.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst ComboBoxComponent: React.FC<ComboBoxProps> = ({\n items,\n placeholder,\n searchPlaceholder,\n ...props\n}) => {\n const formProps = useFormikInput(props);\n const ComboBoxStates = useComboBoxState(\n items,\n placeholder,\n searchPlaceholder\n );\n\n // Ensure the onChange function from formProps is being called when an item is selected\n const handleSelect = (item: any) => {\n formProps.onChange(item);\n };\n\n return (\n <ComboBoxView {...ComboBoxStates} {...formProps} onSelect={handleSelect} />\n );\n};\n\n/**\n * ComboBox allows users to select one or more options from a list of choices.\n */\nexport const FormikComboBox = ComboBoxComponent;\n","import React from 'react';\n\nimport { CountryPickerProps } from '../Form/CountryPicker/CountryPicker/CountryPicker.props';\nimport { useCountryPickerState } from '../Form/CountryPicker/CountryPicker/CountryPicker.state';\nimport { CountryPickerView } from '../Form/CountryPicker/CountryPicker/CountryPicker.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst CountryPickerComponent: React.FC<CountryPickerProps> = (props) => {\n const formProps = useFormikInput(props);\n const countryPickerStates = useCountryPickerState(props);\n return <CountryPickerView {...countryPickerStates} {...formProps} />;\n};\n\n/**\n * Country picker allows users to select a country from a dropdown list or search field.\n */\nexport const FormikCountryPicker = CountryPickerComponent;\n","import React from 'react';\n\nimport { DatePickerProps } from '../Form/DatePicker/DatePicker/DatePicker.props';\nimport { useDatePickerState } from '../Form/DatePicker/DatePicker/DatePicker.state';\nimport DatePickerView from '../Form/DatePicker/DatePicker/DatePicker.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst DatePickerComponent: React.FC<DatePickerProps> = (props) => {\n const formProps = useFormikInput(props);\n\n const datePickerStates = useDatePickerState();\n return <DatePickerView {...datePickerStates} {...formProps} />;\n};\n\n/**\n * Date picker allows users to select a date from a calendar view.\n */\nexport const FormikDatePicker = DatePickerComponent;\n","import React, { useCallback } from 'react';\nimport { OTPInputProps } from '../OTPInput/OTPInput/OTPInput.props';\nimport { useOTPInputState } from '../OTPInput/OTPInput/OTPInput.state';\nimport OTPInputView from '../OTPInput/OTPInput/OTPInput.view';\nimport { useFormikInput } from './Formik.Hook';\n\n/**\n * FormikOTPInput component for entering one-time passwords or verification codes\n * with Formik integration for form state management.\n */\nconst OTPInputComponent: React.FC<OTPInputProps> = (props: OTPInputProps) => {\n // Get Formik integration props\n const formProps = useFormikInput(props);\n\n // Get OTP input state\n const {\n isFocused,\n setIsFocused,\n isHovered,\n setIsHovered,\n inputRef,\n containerRef,\n mirrorSelectionStart,\n mirrorSelectionEnd,\n setMirrorSelectionStart,\n setMirrorSelectionEnd,\n setInputRef,\n handleFocus,\n handleBlur,\n handleKeyDown,\n handlePaste,\n } = useOTPInputState(props);\n\n // Handle value changes through Formik\n const setValue = useCallback(\n (value: string) => {\n if (formProps.onChange) {\n formProps.onChange(value);\n }\n\n // If onComplete is provided and the value is complete, call it\n if (props.onComplete && value.length === (props.length || 6)) {\n props.onComplete(value);\n }\n\n // Ensure the input field value is updated directly\n if (inputRef.current) {\n inputRef.current.value = value;\n }\n },\n [formProps, props, inputRef]\n );\n\n // Handle input changes\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.currentTarget.value.slice(0, props.length || 6);\n setValue(newValue);\n\n // Ensure the input field value is updated directly\n if (inputRef.current) {\n inputRef.current.value = newValue;\n }\n },\n [props.length, setValue, inputRef]\n );\n\n return (\n <OTPInputView\n {...props}\n {...formProps}\n setValue={setValue}\n isFocused={isFocused}\n setIsFocused={setIsFocused}\n isHovered={isHovered}\n setIsHovered={setIsHovered}\n inputRef={inputRef}\n containerRef={containerRef}\n mirrorSelectionStart={mirrorSelectionStart}\n mirrorSelectionEnd={mirrorSelectionEnd}\n setMirrorSelectionStart={setMirrorSelectionStart}\n setMirrorSelectionEnd={setMirrorSelectionEnd}\n setInputRef={setInputRef}\n handleChange={handleChange}\n handleFocus={handleFocus}\n handleBlur={handleBlur}\n handleKeyDown={handleKeyDown}\n handlePaste={handlePaste}\n stepValues={props.stepValues}\n />\n );\n};\n\n/**\n * OTPInput component for entering one-time passwords or verification codes with Formik integration.\n * Provides multiple input fields for entering digits with auto-focus functionality.\n * Supports step-based input and improved accessibility.\n */\nexport const FormikOTPInput = OTPInputComponent;\n","import React from 'react';\n\nimport { PasswordProps } from '../Form/Password/Password/Password.props';\nimport { usePasswordState } from '../Form/Password/Password/Password.state';\nimport { View } from 'app-studio';\nimport { CloseEyeIcon, OpenEyeIcon } from '../Icon/Icon';\nimport TextFieldView from '../Form/TextField/TextField/TextField.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst PasswordComponent: React.FC<PasswordProps> = ({\n visibleIcon = <OpenEyeIcon widthHeight={14} />,\n hiddenIcon = <CloseEyeIcon widthHeight={14} />,\n ...props\n}) => {\n const formProps = useFormikInput(props);\n\n const { isVisible, setIsVisible, ...passwordProps } =\n usePasswordState(formProps);\n\n return (\n <TextFieldView\n {...passwordProps}\n type={isVisible ? 'text' : 'password'}\n isClearable={false}\n right={\n <View\n onClick={() => {\n if (!props.isDisabled) {\n setIsVisible(!isVisible);\n }\n }}\n >\n {isVisible ? visibleIcon : hiddenIcon}\n </View>\n }\n />\n );\n};\n\n/**\n * To allow users to securely enter sensitive information\n */\nexport const FormikPassword = PasswordComponent;\n","import React from 'react';\n\nimport { SelectProps } from '../Form/Select/Select/Select.props';\nimport { useSelectState } from '../Form/Select/Select/Select.state';\nimport SelectView from '../Form/Select/Select/Select.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst SelectComponent: React.FC<SelectProps> = (props) => {\n let formProps = useFormikInput(props);\n formProps.selected = formProps.value;\n const selectStates = useSelectState(props);\n return <SelectView {...selectStates} {...formProps} />;\n};\n\n/**\n * Select provides a dropdown list of options for the user to choose from.\n */\n\nexport const FormikSelect = SelectComponent;\n","import React from 'react';\n\nimport { SliderProps } from '../Slider/Slider/Slider.props';\nimport { useSliderState } from '../Slider/Slider/Slider.state';\nimport { SliderView } from '../Slider/Slider/Slider.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst SliderComponent: React.FC<SliderProps> = (props) => {\n // Get Formik props (value, onChange, etc.)\n const formProps = useFormikInput(props);\n\n // Get slider state and handlers\n const sliderState = useSliderState({\n ...props,\n value: formProps.value !== undefined ? Number(formProps.value) : undefined,\n onChange: (value: number) => {\n // Call Formik's onChange\n formProps.onChange(value);\n // Call the original onChange if provided\n props.onChange?.(value);\n },\n });\n\n // Render the slider with both Formik props and slider state\n return <SliderView {...props} {...sliderState} {...formProps} />;\n};\n\n/**\n * Slider component integrated with Formik for form state management.\n * Allows users to select a value from a range by moving a handle.\n */\nexport const FormikSlider = SliderComponent;\n","import React from 'react';\n\nimport { SwitchProps } from '../Form/Switch/Switch/Switch.props';\nimport { useSwitchState } from '../Form/Switch/Switch/Switch.state';\nimport SwitchView from '../Form/Switch/Switch/Switch.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst SwitchComponent: React.FC<SwitchProps> = (props) => {\n const formProps = useFormikInput(props);\n const switchStates = useSwitchState(props);\n return <SwitchView {...switchStates} {...formProps} />;\n};\n\nexport const FormikSwitch = SwitchComponent;\n","import React from 'react';\n\nimport { TextAreaProps } from '../Form/TextArea/TextArea/TextArea.props';\nimport { useTextAreaState } from '../Form/TextArea/TextArea/TextArea.state';\nimport TextAreaView from '../Form/TextArea/TextArea/TextArea.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst TextAreaComponent: React.FC<TextAreaProps> = (props) => {\n const formProps = useFormikInput(props);\n const textAreaState = useTextAreaState(props);\n return <TextAreaView {...textAreaState} {...formProps} />;\n};\n\n/**\n * Text Area is an component used to create a multi-line input field.\n */\nexport const FormikTextArea = TextAreaComponent;\n","import React from 'react';\n\nimport { TextFieldProps } from '../Form/TextField/TextField/TextField.props';\nimport { useTextFieldState } from '../Form/TextField/TextField/TextField.state';\nimport TextFieldView from '../Form/TextField/TextField/TextField.view';\nimport { useFormikInput } from './Formik.Hook';\n\nconst TextFieldComponent: React.FC<TextFieldProps> = (\n props: TextFieldProps\n) => {\n const formProps = useFormikInput(props);\n const { value, ...textFieldStates } = useTextFieldState(props);\n\n return <TextFieldView {...textFieldStates} {...formProps} />;\n};\n/**\n * TextField is used to capture text data from users.\n */\nexport const FormikTextField = TextFieldComponent;\n","import React from 'react';\nimport { hideMessage, useMessageStore } from './Message.store';\nimport { View } from 'app-studio';\nimport { MessageView } from './Message.view';\nimport { MessageLayoutProps } from './Message.props';\n\nexport const MessageLayout = ({\n container,\n theme,\n position = 'topRight',\n}: MessageLayoutProps) => {\n const {\n visible,\n title,\n variant,\n subtitle,\n isClosable,\n views,\n action,\n actionText,\n showIcon,\n timeout,\n } = useMessageStore();\n\n const toastPosition = {\n topLeft: {\n top: 6,\n left: 8,\n },\n topRight: {\n top: 6,\n right: 8,\n },\n bottomLeft: {\n bottom: 8,\n left: 6,\n },\n bottomRight: {\n bottom: 8,\n right: 6,\n },\n }[position];\n\n // Crée une fonction pour construire le contenu du message\n const renderMessageContent = () => (\n <MessageView\n variant={variant}\n subtitle={subtitle}\n show={visible}\n title={title}\n theme={theme}\n isClosable={isClosable}\n views={views}\n action={action}\n actionText={actionText}\n showIcon={showIcon}\n timeout={timeout}\n hide={() => hideMessage()}\n />\n );\n\n const MessageContainer = container ? (\n React.cloneElement(container, {}, renderMessageContent())\n ) : (\n <View position={'absolute'} zIndex={10000} {...toastPosition}>\n {renderMessageContent()}\n </View>\n );\n\n return visible ? MessageContainer : null;\n};\n","import React from 'react';\nimport { OTPInputProps } from './OTPInput/OTPInput.props';\nimport { useOTPInputState } from './OTPInput/OTPInput.state';\nimport OTPInputView from './OTPInput/OTPInput.view';\n\n/**\n * OTPInput component for entering one-time passwords or verification codes.\n * Provides multiple input fields for entering digits with auto-focus functionality.\n * Supports step-based input and improved accessibility.\n */\nconst OTPInputComponent: React.FC<OTPInputProps> = (props: OTPInputProps) => {\n // Extract the controlled value from props if it exists\n const { value: controlledValue } = props;\n\n const {\n value,\n setValue,\n isFocused,\n setIsFocused,\n isHovered,\n setIsHovered,\n inputRef,\n containerRef,\n mirrorSelectionStart,\n mirrorSelectionEnd,\n setMirrorSelectionStart,\n setMirrorSelectionEnd,\n setInputRef,\n handleChange,\n handleFocus,\n handleBlur,\n handleKeyDown,\n handlePaste,\n handleKeyPress,\n } = useOTPInputState(props);\n\n // Use the controlled value if it exists, otherwise use the internal state value\n const displayValue = controlledValue !== undefined ? controlledValue : value;\n\n return (\n <OTPInputView\n {...props}\n value={displayValue}\n setValue={setValue}\n isFocused={isFocused}\n setIsFocused={setIsFocused}\n isHovered={isHovered}\n setIsHovered={setIsHovered}\n inputRef={inputRef}\n containerRef={containerRef}\n mirrorSelectionStart={mirrorSelectionStart}\n mirrorSelectionEnd={mirrorSelectionEnd}\n setMirrorSelectionStart={setMirrorSelectionStart}\n setMirrorSelectionEnd={setMirrorSelectionEnd}\n setInputRef={setInputRef}\n handleChange={handleChange}\n handleFocus={handleFocus}\n handleBlur={handleBlur}\n handleKeyDown={handleKeyDown}\n handleKeyPress={handleKeyPress}\n handlePaste={handlePaste}\n stepValues={props.stepValues}\n />\n );\n};\n\nexport const OTPInput = OTPInputComponent;\n","import React from 'react';\nimport { PaginationProps } from './Pagination/Pagination.props';\nimport { usePaginationState } from './Pagination/Pagination.state';\nimport { PaginationView } from './Pagination/Pagination.view';\n\n/**\n * Pagination component for navigating through pages of content.\n */\nconst PaginationComponent: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n pageSize = 10,\n pageSizeOptions,\n onPageSizeChange,\n showPageSizeSelector = false,\n showPageInfo = true,\n maxPageButtons = 5,\n showFirstLastButtons = false,\n size = 'md',\n variant = 'default',\n shape = 'rounded',\n views,\n ...props\n}) => {\n const { visiblePageNumbers } = usePaginationState(\n currentPage,\n totalPages,\n maxPageButtons\n );\n\n return (\n <PaginationView\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={onPageChange}\n pageSize={pageSize}\n pageSizeOptions={pageSizeOptions}\n onPageSizeChange={onPageSizeChange}\n showPageSizeSelector={showPageSizeSelector}\n showPageInfo={showPageInfo}\n maxPageButtons={maxPageButtons}\n showFirstLastButtons={showFirstLastButtons}\n size={size}\n variant={variant}\n shape={shape}\n visiblePageNumbers={visiblePageNumbers}\n views={views}\n {...props}\n />\n );\n};\n\nexport const Pagination = PaginationComponent;\n","import { useState, useEffect } from 'react';\n\nexport const usePaginationState = (\n currentPage: number,\n totalPages: number,\n maxPageButtons: number\n) => {\n const [visiblePageNumbers, setVisiblePageNumbers] = useState<\n (number | string)[]\n >([]);\n\n useEffect(() => {\n // Calculate visible page numbers based on current page and max buttons\n const calculateVisiblePageNumbers = () => {\n const pageNumbers: (number | string)[] = [];\n\n if (totalPages <= maxPageButtons) {\n // If total pages is less than or equal to max buttons, show all pages\n for (let i = 1; i <= totalPages; i++) {\n pageNumbers.push(i);\n }\n } else {\n // Always include first page\n pageNumbers.push(1);\n\n // Calculate start and end of visible page range\n let startPage = Math.max(\n 2,\n currentPage - Math.floor((maxPageButtons - 2) / 2)\n );\n let endPage = Math.min(totalPages - 1, startPage + maxPageButtons - 3);\n\n // Adjust if we're near the end\n if (endPage >= totalPages - 1) {\n endPage = totalPages - 1;\n startPage = Math.max(2, endPage - (maxPageButtons - 3));\n }\n\n // Add ellipsis if needed before the range\n if (startPage > 2) {\n pageNumbers.push('...');\n }\n\n // Add the range of pages\n for (let i = startPage; i <= endPage; i++) {\n pageNumbers.push(i);\n }\n\n // Add ellipsis if needed after the range\n if (endPage < totalPages - 1) {\n pageNumbers.push('...');\n }\n\n // Always include last page\n pageNumbers.push(totalPages);\n }\n\n return pageNumbers;\n };\n\n setVisiblePageNumbers(calculateVisiblePageNumbers());\n }, [currentPage, totalPages, maxPageButtons]);\n\n return {\n visiblePageNumbers,\n };\n};\n","import React from 'react';\n\nimport { PasswordProps } from './Password/Password.props';\nimport { usePasswordState } from './Password/Password.state';\nimport { View } from 'app-studio';\nimport { CloseEyeIcon, OpenEyeIcon } from '../../Icon/Icon';\nimport TextFieldView from '../TextField/TextField/TextField.view';\n\nconst PasswordComponent: React.FC<PasswordProps> = ({\n visibleIcon = <OpenEyeIcon widthHeight={14} />,\n hiddenIcon = <CloseEyeIcon widthHeight={14} />,\n ...props\n}) => {\n const { isVisible, setIsVisible, ...passwordProps } = usePasswordState(props);\n\n return (\n <TextFieldView\n {...passwordProps}\n type={isVisible ? 'text' : 'password'}\n isClearable={false}\n right={\n <View\n onClick={() => {\n if (!props.isDisabled) {\n setIsVisible(!isVisible);\n }\n }}\n >\n {isVisible ? visibleIcon : hiddenIcon}\n </View>\n }\n />\n );\n};\n\n/**\n * To allow users to securely enter sensitive information\n */\nexport const Password = PasswordComponent;\n","import React from 'react';\nimport { SelectProps } from './Select/Select.props';\nimport { useSelectState } from './Select/Select.state';\nimport SelectView from './Select/Select.view';\n// Defines a functional component named 'SelectComponent', which is expected to receive 'SelectProps' as properties.\nconst SelectComponent: React.FC<SelectProps> = (props) => {\n // Invokes the 'useSelectState' hook with props to obtain stateful logic for the Select component.\n const selectStates = useSelectState(props);\n // Renders the 'SelectView' component, passing along any states controlled by 'useSelectState' and all properties passed to 'SelectComponent'.\n return <SelectView {...selectStates} {...props} />;\n};\n// Exports 'SelectComponent' as 'Select', making it available for import in other parts of the application.\nexport const Select = SelectComponent;\n","import React from 'react';\nimport { SliderProps } from './Slider/Slider.props';\nimport { useSliderState } from './Slider/Slider.state';\nimport { SliderView } from './Slider/Slider.view';\n\nconst SliderComponent: React.FC<SliderProps> = (props) => {\n // Get state and handlers from the custom hook\n const sliderState = useSliderState(props);\n\n // Render the view component, passing down props and state\n return <SliderView {...props} {...sliderState} />;\n};\n\n/**\n * Slider allows users to select a value from a range by moving a handle.\n */\nexport const Slider = SliderComponent;\n","import React from 'react';\nimport { SwitchProps } from './Switch/Switch.props';\nimport { useSwitchState } from './Switch/Switch.state';\nimport SwitchView from './Switch/Switch.view';\n// Defines the SwitchComponent as a functional component that takes SwitchProps as props.\nconst SwitchComponent: React.FC<SwitchProps> = (props) => {\n // Invokes useSwitchState hook to obtain state for this component, passing props to it.\n const switchStates = useSwitchState(props);\n // Renders the SwitchView component, spreading the switchStates and props to pass all necessary data.\n return <SwitchView {...switchStates} {...props} />;\n};\n// Exports the SwitchComponent as 'Switch' for use in other parts of the application.\nexport const Switch = SwitchComponent;\n","import React from 'react';\nimport { TextAreaProps } from './TextArea/TextArea.props';\nimport { useTextAreaState } from './TextArea/TextArea.state';\nimport TextAreaView from './TextArea/TextArea.view';\n// Defines the TextAreaComponent as a functional component that accepts TextAreaProps for type safety and structure.\nconst TextAreaComponent: React.FC<TextAreaProps> = (props) => {\n // Creates a state for the TextAreaComponent using custom hook useTextAreaState which initializes the state with props.\n const textAreaState = useTextAreaState(props);\n // Renders the TextAreaView component, passing along the state and any received props.\n return <TextAreaView {...textAreaState} {...props} />;\n};\n// Exports the TextAreaComponent as TextArea for use in other parts of the application.\nexport const TextArea = TextAreaComponent;\n","import React from 'react';\nimport { TextFieldProps } from './TextField/TextField.props';\nimport { useTextFieldState } from './TextField/TextField.state';\nimport TextFieldView from './TextField/TextField.view';\nconst TextFieldComponent: React.FC<TextFieldProps> = (\n props: TextFieldProps\n) => {\n // Initializes the 'textFieldStates' with state-management logic and relevant properties from 'useTextFieldState' hook, passing current 'props' as the argument\n const textFieldStates = useTextFieldState(props);\n // Renders the 'TextFieldView' component with the spread attributes from both 'textFieldStates' and 'props' to pass all necessary data\n return <TextFieldView {...textFieldStates} {...props} />;\n};\n// Exports 'TextFieldComponent' as 'TextField' for use in other parts of the application\nexport const TextField = TextFieldComponent;\n","import React from 'react';\n\nimport { TitleProps } from './Title/Title.props';\nimport TitleView from './Title/Title.view';\n\n/**\n * Title Component\n *\n * A component for rendering animated and highlighted titles in hero sections.\n *\n * Features:\n * - Text highlighting with various styles (background, underline, gradient, outline, glow)\n * - Multiple animation options (fade, slide, typewriter, reveal)\n * - Responsive sizing\n * - Customizable styling\n *\n * @example\n * // Basic usage\n * <Title>Welcome to Our Platform</Title>\n *\n * @example\n * // With highlighting\n * <Title highlightText=\"Platform\" highlightStyle=\"background\" highlightColor=\"theme.primary\">\n * Welcome to Our Platform\n * </Title>\n *\n * @example\n * // With animation\n * <Title\n * animation=\"fadeIn\"\n * animationDuration=\"1.5s\"\n * size=\"2xl\"\n * >\n * Animated Title\n * </Title>\n *\n * @example\n * // With multiple highlights\n * <Title\n * highlightText={[\"Amazing\", \"Features\"]}\n * highlightStyle=\"gradient\"\n * highlightColor=\"theme.primary\"\n * highlightSecondaryColor=\"theme.secondary\"\n * >\n * Discover our Amazing Product with Great Features\n * </Title>\n */\nconst TitleComponent: React.FC<TitleProps> = (props) => {\n return <TitleView {...props} />;\n};\n\nexport const Title = TitleComponent;\n","import React from 'react';\nimport { ToggleGroupProps } from './ToggleGroup/ToggleGroup.props';\nimport { useToggleGroupState } from './ToggleGroup/ToggleGroup.state';\nimport { ToggleGroupView } from './ToggleGroup/ToggleGroup.view';\n// Define the functional component with destructured props\nconst ToggleGroupComponent = ({\n // Destructure 'items' prop which represents the group items to toggle\n items,\n // Destructure 'shape' prop to define the shape of the toggle buttons\n shape,\n\n // Destructure 'variant' prop to determine the visual style of the toggle group\n variant,\n // Destructure 'onToggleChange' prop for the callback when toggle state changes\n onToggleChange,\n}: ToggleGroupProps) => {\n // Hook to manage toggle group state, returns active toggles and a setter for it\n const { activeToggles, setActiveToggles } = useToggleGroupState();\n return (\n <ToggleGroupView\n items={items}\n shape={shape}\n variant={variant}\n activeToggles={activeToggles}\n setActiveToggles={setActiveToggles}\n onToggleChange={onToggleChange}\n />\n );\n};\n// Expose the ToggleGroupComponent for import into other modules\nexport const ToggleGroup = ToggleGroupComponent;\n","import { useState } from 'react';\n// Define a custom hook for managing ToggleGroup state\nexport const useToggleGroupState = () => {\n const [activeToggles, setActiveToggles] = useState<string[]>([]);\n return { activeToggles, setActiveToggles };\n};\n","import React from 'react';\nimport { UploadProps } from './Uploader/Uploader.props';\nimport { useUpload } from './Uploader/Uploader.state';\nimport { UploadView } from './Uploader/Uploader.view';\n\nexport const Uploader: React.FC<UploadProps> = ({\n accept = '*/*',\n icon,\n text,\n maxSize,\n onFileSelect,\n validateFile,\n isLoading = false,\n progress = 0,\n fileType,\n ...props\n}: UploadProps) => {\n const {\n previewUrl,\n thumbnailUrl,\n errorMessage,\n videoRef,\n fileInputRef,\n selectedFile,\n handleFileChange,\n handleClick,\n } = useUpload({ accept, maxSize, onFileSelect, validateFile });\n\n // Determine file type based on the selected file's MIME type if not explicitly provided\n const determineFileType = () => {\n if (fileType) return fileType;\n\n if (!selectedFile) return undefined;\n\n if (selectedFile.type.startsWith('image/')) {\n return 'image';\n } else if (selectedFile.type.startsWith('video/')) {\n return 'video';\n } else {\n return 'file';\n }\n };\n\n const detectedFileType = determineFileType();\n\n return (\n <UploadView\n handleClick={handleClick}\n accept={accept}\n isLoading={isLoading}\n progress={progress}\n icon={icon}\n text={text}\n maxSize={maxSize}\n onFileSelect={onFileSelect}\n validateFile={validateFile}\n errorMessage={errorMessage}\n handleFileChange={handleFileChange}\n selectedFile={selectedFile}\n videoRef={videoRef}\n fileInputRef={fileInputRef}\n previewUrl={previewUrl}\n thumbnailUrl={thumbnailUrl}\n fileType={detectedFileType}\n {...props}\n />\n );\n};\n","import React, { useCallback, useRef, useState, useEffect } from 'react';\nimport { UseUploadProps } from '../Uploader/Uploader.props';\nimport { showMessage } from '../../Message/Message';\n\nexport const generateThumbnail = (\n videoFile: File,\n setThumbnailUrl: (url: string) => void\n) => {\n const video = document.createElement('video');\n video.preload = 'metadata';\n\n video.onloadedmetadata = () => {\n video.currentTime = 1;\n };\n\n video.oncanplay = () => {\n const canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n const thumbnailDataUrl = canvas.toDataURL('image/jpeg');\n setThumbnailUrl(thumbnailDataUrl);\n }\n\n URL.revokeObjectURL(video.src);\n };\n\n video.src = URL.createObjectURL(videoFile);\n};\n\nexport const useUpload = ({\n maxSize = 100 * 1024 * 1024, // 100MB default\n onFileSelect,\n validateFile,\n thumbnail,\n onError = (error: string) => {\n showMessage('error', 'Error', error);\n },\n}: UseUploadProps) => {\n const fileInputRef = useRef<HTMLInputElement>(null);\n const videoRef = useRef<HTMLVideoElement>(null);\n const [selectedFile, setSelectedFile] = useState<File | null>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [previewUrl, setPreviewUrl] = useState<string | null>(null);\n const [thumbnailUrl, setThumbnailUrl] = useState<string | null>(\n thumbnail || null\n );\n\n const handleFileChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n setErrorMessage(null);\n\n if (!file) {\n onError('No file selected');\n setErrorMessage('No file selected');\n return;\n }\n\n if (file.size > maxSize) {\n onError(`File exceeds ${Math.round(maxSize / (1024 * 1024))}MB.`);\n setErrorMessage(\n `File exceeds ${Math.round(maxSize / (1024 * 1024))}MB.`\n );\n return;\n }\n\n if (validateFile) {\n const validationError = validateFile(file);\n if (validationError) {\n onError(validationError);\n setErrorMessage(validationError);\n return;\n }\n }\n\n setPreviewUrl(URL.createObjectURL(file));\n\n if (file.type.startsWith('video/')) {\n generateThumbnail(file, setThumbnailUrl);\n }\n\n if (onFileSelect) {\n setSelectedFile(file);\n onFileSelect(file);\n }\n },\n [maxSize, onFileSelect, validateFile]\n );\n\n const handleClick = () => fileInputRef.current?.click();\n\n useEffect(() => {\n return () => {\n if (previewUrl) URL.revokeObjectURL(previewUrl);\n if (thumbnailUrl) URL.revokeObjectURL(thumbnailUrl);\n };\n }, [previewUrl, thumbnailUrl]);\n\n return {\n previewUrl,\n thumbnailUrl,\n errorMessage,\n fileInputRef,\n videoRef,\n selectedFile,\n handleFileChange,\n handleClick,\n };\n};\n","import { ToastOptions, ToastVariant } from './Toast.type';\nimport {\n showToast,\n showInfoToast,\n showSuccessToast,\n showWarningToast,\n showErrorToast,\n removeToast,\n removeAllToasts,\n} from './Toast.store';\n\n/**\n * Hook for using Toast functionality within components\n * @returns Object with methods to show and manage toasts\n */\nexport const useToast = () => {\n return {\n /**\n * Show a toast with the specified variant\n */\n toast: (\n variant: ToastVariant,\n title: string,\n description?: string,\n options?: ToastOptions\n ) => showToast(variant, title, description, options),\n\n /**\n * Show an info toast\n */\n info: (title: string, description?: string, options?: ToastOptions) =>\n showInfoToast(title, description, options),\n\n /**\n * Show a success toast\n */\n success: (title: string, description?: string, options?: ToastOptions) =>\n showSuccessToast(title, description, options),\n\n /**\n * Show a warning toast\n */\n warning: (title: string, description?: string, options?: ToastOptions) =>\n showWarningToast(title, description, options),\n\n /**\n * Show an error toast\n */\n error: (title: string, description?: string, options?: ToastOptions) =>\n showErrorToast(title, description, options),\n\n /**\n * Remove a specific toast by ID\n */\n remove: (id: string) => removeToast(id),\n\n /**\n * Remove all toasts\n */\n removeAll: () => removeAllToasts(),\n };\n};\n"],"names":["generateId","prefix","Math","random","toString","substring","AccordionShapes","sharp","borderRadius","rounded","AccordionVariants","default","backgroundColor","borderWidth","outline","borderStyle","borderColor","filled","AccordionContext","createContext","expandedItems","toggleItem","isItemExpanded","type","collapsible","baseId","AccordionProvider","_ref","children","value","React","Provider","useAccordionContext","context","useContext","Error","AccordionView","_ref5","shape","variant","views","props","_objectWithoutPropertiesLoose","_excluded4","Vertical","width","container","Accordion","defaultValue","onValueChange","_excluded","legacyDefaultValue","Array","isArray","undefined","accordionState","controlledValue","isControlled","initialValue","internalValue","setInternalValue","useState","useMemo","selectedValue","useEffect","console","warn","length","String","useCallback","itemValue","newValue","currentValues","includes","filter","v","useAccordionState","Item","_ref2","isDisabled","isExpanded","triggerId","contentId","View","marginBottom","overflow","opacity","pointerEvents","item","Children","map","child","isValidElement","cloneElement","Object","assign","Trigger","_ref3","asChild","_excluded2","triggerProps","id","aria-expanded","aria-controls","aria-disabled","data-state","data-disabled","onClick","handleClick","padding","cursor","alignItems","justifyContent","only","Horizontal","height","display","transition","transform","icon","viewBox","fill","xmlns","d","Content","_ref4","_excluded3","role","maxHeight","HeadingSizes","h1","fontSize","lineHeight","fontWeight","letterSpacing","h2","h3","h4","h5","h6","FontSizes","xs","sm","md","lg","xl","LineHeights","FontWeights","hairline","thin","light","normal","medium","semiBold","bold","extraBold","black","TextContent","isSub","isSup","as","position","bottom","sup","top","TruncateText","text","maxLines","rest","containerRef","useRef","truncatedText","setTruncatedText","isTruncated","setIsTruncated","node","current","style","innerText","singleLine","offsetHeight","cs","getComputedStyle","parseFloat","limit","restore","lo","hi","fit","mid","floor","slice","finalText","trimEnd","n","Text","ref","truncateText","title","TextView","heading","isItalic","isUnderlined","isStriked","weight","size","Element","fontStyle","textDecoration","IconWrapper","widthHeight","color","orientation","Center","getSvgProps","strokeWidth","getColor","useTheme","stroke","strokeLinecap","strokeLinejoin","UserIcon","focusable","HelpIcon","cx","cy","r","x1","y1","x2","y2","ChevronIcon","DragHandleIcon","_excluded5","FileIcon","_ref6","_excluded6","points","VideoIcon","_ref7","_excluded7","x","y","rx","ry","ImageIcon","_ref8","_excluded8","TwitterIcon","_ref9","_excluded9","XIcon","_ref10","_excluded10","TwitchIcon","_ref11","_excluded11","CloseIcon","_ref12","_excluded12","InstagramIcon","_ref13","_excluded13","YoutubeIcon","_ref14","_excluded14","FacebookIcon","_ref15","_excluded15","LinkedinIcon","_ref16","_excluded16","ThreadsIcon","_ref17","_excluded17","MinusIcon","_ref18","_excluded18","InfoIcon","_ref19","_excluded19","PlayIcon","_ref20","_excluded20","PauseIcon","_ref21","_excluded21","HeartIcon","_ref22","_excluded22","StarIcon","_ref23","_excluded23","SaveIcon","_ref24","_excluded24","WarningIcon","_ref25","_excluded25","BatteryIcon","_ref26","_excluded26","BookmarkIcon","_ref27","_excluded27","CloudIcon","_ref28","_excluded28","CopyIcon","_ref29","_excluded29","DustBinIcon","_ref30","_excluded30","DeleteIcon","EditIcon","_ref31","_excluded31","ErrorIcon","_ref32","_excluded32","DownloadIcon","_ref33","_excluded33","MenuIcon","_ref34","_excluded34","ShareIcon","_ref35","_excluded35","RefreshIcon","_ref36","_excluded36","PrintIcon","_ref37","_excluded37","MagicWandIcon","_ref38","_excluded38","SliderVerticalIcon","_ref39","_excluded39","PanelIcon","_ref40","_excluded40","FilterIcon","_ref41","_excluded41","HomeIcon","_ref42","_excluded42","LocationIcon","_ref43","_excluded43","LockIcon","_ref44","_excluded44","MicrophoneIcon","_ref45","_excluded45","MoonIcon","_ref46","_excluded46","NotificationIcon","_ref47","_excluded47","OpenEyeIcon","_ref48","_excluded48","ProfileIcon","_ref49","_excluded49","SettingsIcon","_ref50","_excluded50","SuccessIcon","_ref51","_excluded51","UnLikeIcon","_ref52","_excluded52","ClockIcon","_ref53","_excluded53","CameraIcon","_ref54","_excluded54","BluetoothIcon","_ref55","_excluded55","LikeIcon","_ref56","_excluded56","UnlockIcon","_ref57","_excluded57","WifiIcon","_ref58","_excluded58","UploadIcon","_ref59","_excluded59","SearchIcon","_ref60","_excluded60","CloseEyeIcon","_ref61","_excluded61","ExternalLinkIcon","_ref62","_excluded62","PlusIcon","_ref63","_excluded63","TickIcon","_ref64","_excluded64","BoldArrowIcon","_ref65","_excluded65","ArrowIcon","_ref66","_excluded66","SpinnerIcon","_ref67","_excluded67","strokeOpacity","CalendarIcon","_ref68","_excluded68","SliderIcon","_ref69","_excluded69","CropIcon","_ref70","_excluded70","ZoomInIcon","_ref71","_excluded71","ZoomOutIcon","_ref72","_excluded72","TextIcon","_ref73","_excluded73","ShapeIcon","_ref74","_excluded74","RotateIcon","_ref75","_excluded75","DocumentIcon","_ref76","_excluded76","ChartIcon","_ref77","_excluded77","GiftIcon","_ref78","_excluded78","ShieldIcon","_ref79","_excluded79","CheckIcon","AlertView","description","themes","boxShadow","content","info","success","error","warning","gap","flexWrap","alignSelf","marginTop","getIcon","iconProps","_views$icon$color","_views$icon","AspectRatioView","ratio","paddingTop","center","right","left","view","AvatarSizeMap","DefaultAvatarStyles","objectFit","AvatarView","src","fallback","imageError","setImageError","avatarSize","imageStyle","image","Image","alt","onError","BadgeSizes","minWidth","BadgeShapes","pillShaped","PositionStyles","top-right","top-left","bottom-right","bottom-left","BadgeView","combinedStyles","link","textUnderlineOffset","ghost","textAlign","IconSizes","LinkView","to","iconSize","underline","isHovered","isExternal","setIsHovered","handleHover","ReactRouterLink","target","onMouseEnter","onMouseLeave","Link","linkStates","useLinkState","DefaultSizes","DefaultSpeeds","fast","slow","DefaultSpinner","speed","themeMode","elementMode","colorStyle","sizeStyle","angle","setAngle","intervalId","setInterval","prevAngle","clearInterval","Dotted","Quarter","strokeDasharray","LoaderView","textColor","loaderColor","textPosition","variants","dotted","quarter","flexDirection","Loader","ButtonSizes","minHeight","paddingBottom","paddingLeft","paddingRight","ButtonShapes","ButtonView","iconPosition","loaderPosition","isLoading","isIconRounded","shadow","mainColorKey","mainTone","tone","contrast","base","getButtonVariants","isLight","_hover","textDecorationThickness","_active","Wrapper","sizeStyles","iconPad","loader","disabled","Boolean","textDecorationColor","Button","useButtonState","CardShapes","CardContext","useCardContext","CardHeader","styles","contextStyles","defaultStyles","borderBottomWidth","borderBottomStyle","borderBottomColor","mergedProps","header","_contextStyles$header","CardContent","_contextStyles$conten","CardFooter","borderTopWidth","borderTopStyle","borderTopColor","footer","_contextStyles$footer","CardView","isFullWidth","contextValue","hasExplicitStructure","toArray","some","mergedRootProps","border","outlined","elevated","_contextValue$styles$","Card","Header","Footer","IndicatorStyles","dot","margin","line","number","ActiveIndicatorStyles","NavigationButtonStyles","zIndex","getDefaultCarouselStyles","innerContainer","transitionProperty","transitionDuration","transitionTimingFunction","flex","prevButton","nextButton","CarouselContext","useCarouselContext","CarouselSlide","isActive","flexShrink","CarouselPreviousComponent","goToPrevious","canGoPrevious","globalStyles","mergedStyles","CarouselNextComponent","goToNext","canGoNext","CarouselItemComponent","registerSlide","unregisterSlide","slideIdRef","CarouselContentComponent","currentIndex","mergedContentStyles","mergedInnerStyles","translateX","CarouselView","defaultActiveIndex","activeIndex","controlledActiveIndex","onChange","showNavigation","navigationPosition","showIndicators","indicatorPosition","indicatorVariant","autoPlay","autoPlayInterval","pauseOnHover","infinite","direction","slides","carouselState","totalSlides","initialTotalSlides","stepIndices","slideCountRef","setTotalSlides","slideRegistry","Set","nextSlideId","setActiveIndex","isDragging","setIsDragging","dragStartX","setDragStartX","dragStartY","setDragStartY","autoPlayTimerRef","goToSlide","index","newIndex","max","min","closestIndex","reduce","prev","curr","abs","nextSlide","prevSlide","handleMouseEnter","handleMouseLeave","handleDragStart","e","touches","clientX","clientY","handleDragMove","currentX","currentY","diffX","diffY","handleDragEnd","add","newCount","delete","useCarouselState","onTouchStart","onTouchMove","onTouchEnd","onMouseDown","onMouseMove","onMouseUp","slideWrapper","slide","key","renderNavigation","prevButtonElement","nextButtonElement","indicators","_","indicator","activeIndicator","Carousel","Slide","Previous","Next","DEFAULT_COLORS","ChartContainerStyles","ChartTitleStyles","ChartLegendStyles","LegendItemStyles","marginRight","LegendColorStyles","LegendTextStyles","TooltipStyles","GridStyles","AxisStyles","AxisLabelStyles","BarStyles","LineStyles","PointStyles","PieSliceStyles","OverlayBaseStyles","LoadingOverlayStyles","ErrorOverlayStyles","NoDataOverlayStyles","BarChart","data","animationProgress","showGrid","onBarClick","showTooltip","hideTooltip","chartWidth","chartHeight","maxValue","series","forEach","seriesCount","groupWidth","labels","barWidth","barSpacing","yAxisTicks","ticks","i","push","axis","label","textAnchor","axisLabel","tick","Fragment","dominantBaseline","toFixed","grid","seriesIndex","dataIndex","barHeight","name","bar","LineChart","onPointClick","generatePath","join","generateAreaPath","endX","baseY","area","point","PieChart","dataPoints","isDonut","onSliceClick","radius","centerX","centerY","donutRadius","total","sum","slices","result","startAngle","PI","path","percentage","endAngle","startX","cos","startY","sin","endY","innerStartX","innerStartY","innerEndX","innerEndY","largeArcFlag","labelAngle","labelRadius","labelX","labelY","percentageText","resolvedColor","pie","ChartView","showLegend","legendPosition","showTooltips","animated","animationDuration","responsive","aspectRatio","propWidth","propHeight","onDataPointClick","onSeriesClick","noData","loadingIndicator","errorIndicator","noDataIndicator","aria-label","ariaLabel","tooltip","processedData","showTooltipState","hideTooltipState","getChartDimensions","setAnimationProgress","setTooltip","visible","animationRef","startTime","Date","now","animate","elapsed","progress","requestAnimationFrame","cancelAnimationFrame","getBoundingClientRect","useChartState","chartData","containerWidth","containerHeight","renderLegend","items","legend","legendItem","showChartContent","chart","renderChart","loadingOverlay","errorOverlay","noDataOverlay","CookieConsentView","acceptButtonText","customizeButtonText","onAccept","onCustomize","showCustomizeButton","cookieExpiration","propThemeMode","contextThemeMode","hasConsent","acceptCookies","setHasConsent","storedConsent","localStorage","getItem","consent","setItem","expirationDate","setDate","getDate","COOKIE_CONSENT_KEY","toISOString","saveConsent","resetConsent","removeItem","useCookieConsentState","isDark","acceptButton","hoverBackgroundColor","customizeButton","primary","getThemes","maxWidth","marginX","buttonGroup","handleCustomize","handleAccept","ContextMenuSizes","ContextMenuVariants","ContextMenuItemStates","hover","active","ContextMenuContext","isOpen","setIsOpen","setPosition","activeSubmenuId","setActiveSubmenuId","triggerRef","contentRef","closeMenu","openMenu","ContextMenuProvider","useContextMenuContext","ContextMenuTrigger","disableNativeContextMenu","onContextMenu","preventDefault","aria-haspopup","ContextMenuContent","side","align","contextPosition","menuRef","menuPosition","setMenuPosition","windowWidth","window","innerWidth","windowHeight","innerHeight","pos","calculatedPosition","menuWidth","menuHeight","posX","posY","calculateMenuPosition","offsetWidth","tabIndex","transformOrigin","menu","divider","ContextMenuDivider","ContextMenuItem","onSelect","hasSubmenu","isSubmenuActive","itemRef","submenuPosition","setSubmenuPosition","rect","flexGrow","marginLeft","submenuIndicator","event","ContextMenuView","ContextMenu","onOpenChange","state","handleClickOutside","contains","handleResize","handleKeyDown","document","addEventListener","removeEventListener","useContextMenuState","Divider","Separator","separator","useSelectState","placeholder","isMulti","options","hide","setHide","isFocused","setIsFocused","setValue","highlightedIndex","setHighlightedIndex","HelperText","helperText","marginVertical","marginHorizontal","FieldContainer","Shapes","LabelSizes","InputVariants","_focus","none","PadddingWithLabel","PaddingWithoutLabel","FieldContent","showLabel","isReadOnly","pickerBox","Typography","fontSizes","FieldIcons","LabelView","fontWeights","Label","FieldLabel","whiteSpace","FieldWrapper","option","callback","paddingVertical","paddingHorizontal","listStyleType","handleOptionClick","SelectBox","field","removeOption","fieldStyles","find","MultiSelect","HiddenSelect","readOnly","multiple","DropDown","itemStates","useItemState","handleCallback","overflowY","scrollbarWidth","scrollbarColor","&::-webkit-scrollbar","&::-webkit-scrollbar-track","background","&::-webkit-scrollbar-thumb","dropDown","stopPropagation","SelectView","selectBox","htmlFor","onFocus","handleFocus","valueOption","useSwitchState","isChecked","on","setOn","KnobSizes","SliderSizes","SliderPadding","SwitchContent","Input","SwitchView","inActiveChild","activeChild","labelPosition","slider","circle","switchStyle","checked","useTextAreaState","hint","setHint","TextAreaView","isEditable","isAutoFocus","isMultiline","maxRows","maxCols","onBlur","resize","focus","warper","rows","cols","autoFocus","editable","multiline","textarea","useTextFieldState","TextFieldInput","TextFieldView","onChangeText","isClearable","IconColor","autoComplete","handleClear","useCheckboxState","defaultIsSelected","isSelected","setIsSelected","Sizes","VariantStyles","selected","unselected","indeterminate","StateStyles","CheckboxView","isIndeterminate","checkbox","infoText","stateStyle","checkboxStyle","handleChange","useCountryPickerState","newOptions","setNewOptions","countryList","CountryList","CountrySelector","CountryItem","DropDownItem","code","CountryPickerView","heigth","valueCountry","filteredCountries","country","toLowerCase","startsWith","useDatePickerState","date","format","DatePickerContent","DatePickerView","handleDateChange","usePasswordState","textFieldStates","isVisible","setIsVisible","useComboBoxState","searchPlaceholder","filteredItems","setFilteredItems","selectedItem","setSelectedItem","searchQuery","setSearchQuery","isDropdownVisible","setIsDropdownVisible","ComboBoxView","showTick","searchEnabled","composedPath","element","labelContainer","dropdown","TextField","query","filtered","handleSearch","borderBottom","handleSelect","useOTPInputState","onComplete","onKeyDown","onKeyPress","pattern","stepValues","pasteTransformer","mirrorSelectionStart","setMirrorSelectionStart","mirrorSelectionEnd","setMirrorSelectionEnd","inputRef","initialLoadRef","isIOS","_window","CSS","supports","inputMetadataRef","regexp","RegExp","valueToSet","numValue","parseInt","isNaN","closest","minDiff","diff","setInputRef","defineProperty","writable","currentTarget","test","_inputRef$current","start","end","setSelectionRange","handleBlur","handleKeyPress","handlePaste","input","clipboardData","_content","getData","selectionStart","selectionEnd","_start","_end","selectionDirection","onDocumentSelectionChange","capture","activeElement","updateRootHeight","setProperty","clientHeight","resizeObserver","ResizeObserver","observe","disconnect","_s","_input$selectionStart","_e","_input$selectionEnd","_dir","_input$selectionDirec","_ml","_input$maxLength","maxLength","_val","_input$value","_prev","offset","s","dir","cb","_inputRef$current2","dispatchEvent","Event","_inputRef$current3","_inputRef$current4","_inputRef$current5","setTimeout","OTPInputContext","slots","isHovering","safeInsertRule","sheet","rule","insertRule","_unused","OTPInputView","from","slotIdx","char","placeholderChar","_placeholder$slotIdx","hasFakeCaret","getElementById","styleEl","createElement","head","appendChild","autofillStyles","userSelect","slot","animation","animationName","animationIterationCount","animationTimingFunction","inset","inputMode","onPaste","onMouseOver","caretColor","fontFamily","fontVariantNumeric","FocusContext","focusNextInput","handleSubmitEditing","getReturnKeyType","useFormikInput","touched","errors","submitCount","values","setFieldTouched","setFieldValue","useFormikContext","isText","getIn","autoCorrect","autoCapitalize","secureTextEntry","getInputTypeProps","clamp","useSliderState","step","onDrag","trackRef","thumbRef","currentValue","updateValue","clampedValue","handleInteraction","trackRect","calculateValue","range","rawValue","closestValue","minDistance","distance","steppedValue","round","handleMouseDown","handleMouseMove","moveEvent","handleMouseUp","handleTrackMouseDown","handleThumbMouseDown","thumbPositionPercent","ThumbSizes","SliderShapes","SliderVariants","getSlider","EnhancedSliderSizes","trackCrossAxisSize","thumbSize","OrientationStyles","horizontal","vertical","SliderView","showValue","track","filledTrack","thumb","valueLabel","stepMarks","themeColor","disabledColor","trackColor","isVertical","legacyView","stepValue","_views$tooltip","enhancedView","stepPercentage","_views$tooltip2","useMessageStore","create","set","subtitle","isClosable","action","actionText","showIcon","timeout","show","showMessage","getState","hideMessage","Themes","close","MessageView","theme","timeId","clearTimeout","Theme","showAction","containerStyle","iconColor","iconComponent","isShowIcon","_views$closingIcon","closingIcon","_views$closingIcon2","UploadView","accept","previewUrl","thumbnailUrl","errorMessage","fileInputRef","videoRef","selectedFile","handleFileChange","containerProps","errorMessageProps","progressProps","videoProps","imageProps","textProps","fileType","externalPreviewUrl","renderError","renderText","renderFile","renderVideo","URL","createObjectURL","renderImage","log","renderProgress","finalPreviewUrl","useModalStore","modals","onHide","onShow","modalProps","overlayProps","modal","setOnHide","setOnShow","hideModal","ContainerShapes","OverlayAlignments","HeaderIconSizes","ModalOverlay","blur","isClosePrevented","onClose","visibility","backdropFilter","Modal","Overlay","Container","isFullScreen","defaultShadow","elevation","shadowColor","shadowOffset","shadowOpacity","shadowRadius","buttonColor","buttonPosition","buttonIcon","Body","Layout","availableModals","activeModals","ModalComponent","NavigationMenuSizes","NavigationMenuVariants","NavigationMenuOrientations","NavigationMenuItemStates","borderLeftWidth","borderLeftStyle","borderLeftColor","NavigationMenuContext","activeItemId","setActiveItemId","expandedItemIds","toggleExpandedItem","NavigationMenuProvider","useNavigationMenuContext","NavigationMenuList","NavigationMenuItemContext","NavigationMenuItem","_item$items","onItemActivate","itemId","hasSubItems","NavigationMenuTrigger","NavigationMenuContent","subItem","href","trigger","NavigationMenuView","NavigationMenu","defaultActiveItemId","defaultExpandedItemIds","setExpandedItemIds","prevExpandedItemIds","useNavigationMenuState","List","useNavigationMenuItemContext","TableContext","onRowClick","TableProvider","useTableContext","DefaultTableStyles","table","thead","th","td","tr","tfoot","borderTop","caption","TableContainer","borderCollapse","TableHead","TableHeadCell","TableRow","TableCell","isFirstColumn","TableBody","tbody","TableFooter","TableCaption","Table","Head","HeadCell","Row","Cell","Caption","Template","columns","column","row","columnIndex","cell","TabHeader","tab","tabStyles","textStyles","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","getFlexDirection","TabsView","tabs","activeTab","handleTabClick","renderTab","renderContent","headerTabs","activeText","Tabs","memo","initialTabValue","onTabChange","setActiveTab","useTabsState","propTabs","findInitialTab","foundTab","newInitialTab","currentActiveTabStillValid","t","TitleSizes","2xl","3xl","4xl","5xl","6xl","HighlightStyles","gradient","secondaryColor","backgroundClip","webkitBackgroundClip","webkitTextFillColor","textShadow","webkitTextStroke","glow","TypewriterEffect","typingSpeed","pauseTime","showCursor","cursorColor","textStyle","textArray","displayedText","setDisplayedText","isComplete","setIsComplete","currentTextIndex","setCurrentTextIndex","charIndex","setCharIndex","currentText","newText","verticalAlign","TitleView","highlightText","highlightStyle","highlightColor","highlightSecondaryColor","centered","highlightAnimate","highlightTypewriter","propHighlightTypewriter","highlightTypewriterDuration","inView","useInView","ctxMode","resolveColorValue","colorValue","resolvedSecondary","finalDisplayedText","activeHighlightTarget","_isInView","alternateHighlightText","alternateAnimation","alternateDuration","initialHighlightText","setFinalDisplayedText","setActiveHighlightTarget","baseText","updateAlternatingState","currentWordToHighlight","regex","newContent","replace","interval","useTitleState","match","parts","lastIndex","exec","highlight","part","idx","ToggleView","isToggle","setIsToggled","onToggle","toggleColor","handleToggle","newState","Toggle","isToggled","defaultToggled","useToggleState","ToggleGroupView","onToggleChange","activeToggles","setActiveToggles","prevActiveToggles","newActiveToggles","toggleId","toggle","DragAndDropView","renderItem","itemProps","draggedIndex","itemRefs","el","DragAndDropComponent","initialItems","setItems","draggedItem","setDraggedItem","setDraggedIndex","dragStartPosRef","body","draggedElement","hoveredIndex","findIndex","newItems","removed","splice","useDragAndDropState","DragAndDrop","DropdownMenuSizes","DropdownMenuVariants","DropdownMenuItemStates","DropdownMenuContext","DropdownMenuProvider","useDropdownMenuContext","DropdownMenuTrigger","DropdownMenuContent","getDropdownPosition","DropdownMenuDivider","DropdownMenuItem","DropdownMenuView","DropdownMenu","defaultOpen","useDropdownMenuState","HoverCardContext","openCard","closeCard","cancelCloseTimer","HoverCardProvider","useHoverCardContext","HoverCard","openDelay","closeDelay","hoverCardState","_temp","openTimerRef","closeTimerRef","clearTimers","useHoverCardState","aria-describedby","sideOffset","userStyle","positionStyles","triggerRect","getContentPositionStyles","setRect","updateRect","useLayoutEffect","useRect","MenubarSizes","MenubarVariants","MenubarOrientations","MenubarItemStates","MenubarContext","activeMenuId","setActiveMenuId","openMenuId","setOpenMenuId","isMenuOpen","toggleMenu","useMenubarContext","MenubarProvider","MenubarRoot","MenubarMenu","menuId","MenubarTrigger","MenubarContent","getMenubarContentPosition","MenubarItem","MenubarSeparator","MenubarView","Menubar","defaultActiveMenuId","defaultOpenMenuId","prevOpenMenuId","useMenubarState","Root","Menu","PaginationSizes","PaginationVariants","PaginationShapes","square","circular","ActivePageButtonStyles","DisabledButtonStyles","PaginationView","currentPage","totalPages","onPageChange","pageSize","pageSizeOptions","onPageSizeChange","showPageSizeSelector","showPageInfo","maxPageButtons","showFirstLastButtons","visiblePageNumbers","handlePageChange","page","navigationButton","pageNumber","renderPageButton","ellipsis","isCurrentPage","activePageButton","pageButton","pageInfo","Number","pageSizeSelector","SeparatorVariants","solid","dashed","getSeparator","SeparatorThicknesses","thick","DefaultSeparatorStyles","SeparatorView","thickness","spacing","decorative","separatorColor","ariaProps","aria-hidden","aria-orientation","SeparatorComponent","SidebarSizes","expandedWidth","collapsedWidth","SidebarVariants","subtle","getSidebar","SidebarPositions","borderRightWidth","borderRightStyle","borderRightColor","SidebarElevations","low","high","SidebarTransitions","bounce","SidebarContext","toggleExpanded","expand","collapse","useSidebarContext","SidebarProvider","SidebarView","fixed","hasBackdrop","breakpointBehavior","transitionPreset","isMobile","sizeConfig","position_type","backdrop","Sidebar","defaultExpanded","expanded","onExpandedChange","showToggleButton","breakpoint","setIsExpanded","setIsMobile","newIsMobile","newExpanded","useSidebarState","toggleButton","toggleButtonIcon","overflowX","ResizableOrientations","HandleVariants","prominent","getHandle","HandleIconStyles","ResizableContext","isResizing","setIsResizing","registerPanel","unregisterPanel","getPanelSize","setPanelSize","isPanelCollapsed","togglePanelCollapse","startResize","onResize","endResize","useResizableContext","ResizableProvider","ResizableView","Resizable","defaultSizes","onSizesChange","minSize","maxSize","autoSaveId","storage","keyboardResizeBy","defaultMinSize","defaultMaxSize","Infinity","panels","setPanels","activeHandleRef","startPositionRef","startSizesRef","storageRef","getTotalSize","loadSavedSizes","savedData","parsed","JSON","parse","sizes","savePanelSizes","panel","collapsed","stringify","initialSize","panelCollapsible","prevPanels","p","panelIndex","updatedPanel","newPanels","handleId","clientPosition","delta","handleIndex","handleNumMatch","currentPanel","nextPanel","newCurrentSize","newNextSize","_currentPanel$minSize","_currentPanel$maxSize","_nextPanel$minSize","_nextPanel$maxSize","handleTouchMove","touch","savedSizes","savedPanel","equalSize","totalSize","newSizes","endsWith","useResizableState","Panel","defaultSize","defaultCollapsed","onCollapseChange","isCollapsed","collapsedPanel","Handle","withVisualIndicator","withCollapseButton","collapseTarget","panelToCollapse","getPanelToCollapse","isTargetPanelCollapsed","getHandleSizeStyles","handle","handleIcon","collapseIcon","ToastPositions","timeouts","Map","useToastStore","toasts","toast","createdAt","duration","timerId","remove","has","get","removeAll","clear","showToast","showInfoToast","showSuccessToast","showWarningToast","showErrorToast","removeToast","removeAllToasts","ToastView","render","customIcon","actionButton","closeButton","ToastContainer","visibleToasts","grouped","keys","ToastComponent","Toast","defaultFilterFn","searchValue","matchesName","matchesDescription","_item$description","matchesKeywords","_item$keywords","keywords","keyword","CommandSizes","CommandVariants","getCommand","CommandInputStyles","CommandListStyles","CommandGroupStyles","CommandGroupHeadingStyles","textTransform","CommandItemStyles","CommandItemSelectedStyles","CommandItemDisabledStyles","CommandItemIconStyles","CommandItemContentStyles","CommandItemNameStyles","CommandItemDescriptionStyles","CommandItemShortcutStyles","CommandEmptyStyles","CommandFooterStyles","CommandContext","search","setSearch","selectedIndex","setSelectedIndex","filteredCommands","CommandProvider","CommandInput","CommandGroup","CommandItem","shortcut","CommandEmpty","CommandView","open","groups","commands","emptyState","filteredGroups","listRef","handleItemSelect","handleBackdropClick","hasGroups","isEmpty","searchInput","list","empty","group","groupHeading","commandIndex","cmd","Command","filterFn","allCommands","flatMap","trim","g","c","selectedElement","querySelector","scrollIntoView","block","useCommandState","Group","CommandItemView","Empty","TooltipSizes","TooltipVariants","dark","getTooltip","TooltipContext","openTooltip","closeTooltip","useTooltipContext","TooltipProvider","TooltipTrigger","TooltipView","showArrow","getTooltipPositionStyles","baseStyles","arrowStyles","borderLeft","borderRight","getArrowStyles","arrow","Tooltip","tooltipState","useTooltipState","useAvatarState","checkboxStates","countryPickerStates","datePickerStates","Colorprops","_useFormikInput","formProps","ComboBoxStates","initFocus","formik","inputRefs","inputNames","currentName","_inputRefs$current$in","nextIndex","indexOf","onSubmit","_inputRefs$current$in2","_inputRefs$current$in3","$Form","visibleIcon","hiddenIcon","_usePasswordState","passwordProps","selectStates","sliderState","switchStates","textAreaState","toastPosition","topLeft","topRight","bottomLeft","bottomRight","renderMessageContent","MessageContainer","usePaginationState","setVisiblePageNumbers","calculateVisiblePageNumbers","pageNumbers","startPage","endPage","useToggleGroupState","onFileSelect","validateFile","thumbnail","setSelectedFile","setErrorMessage","setPreviewUrl","setThumbnailUrl","file","_event$target$files","files","validationError","generateThumbnail","videoFile","video","preload","onloadedmetadata","currentTime","oncanplay","canvas","videoWidth","videoHeight","ctx","getContext","drawImage","thumbnailDataUrl","toDataURL","revokeObjectURL","_fileInputRef$current","click","useUpload","detectedFileType","useToast"],"mappings":"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"}
|