@granularjs/ui 0.1.0 → 0.1.1

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/theme/styles.js", "../src/theme/theme.js", "../src/utils.js", "../src/components/Button.js", "../src/components/Text.js", "../src/components/Title.js", "../src/components/Container.js", "../src/components/Stack.js", "../src/components/Group.js", "../src/components/Card.js", "../src/components/Badge.js", "../src/components/TextInput.js", "../src/components/Textarea.js", "../src/components/NumberField.js", "../src/components/NumberInput.js", "../src/components/Modal.js", "../src/theme/icons.js", "../src/components/Loading.js", "../src/components/Checkbox.js", "../src/components/Switch.js", "../src/components/Select.js", "../src/components/Tabs.js", "../src/components/Table.js", "../src/components/Accordion.js", "../src/components/Tooltip.js", "../src/components/Menu.js", "../src/components/Drawer.js", "../src/components/Notification.js", "../src/components/Divider.js", "../src/components/Paper.js", "../src/components/Alert.js", "../src/components/Avatar.js", "../src/components/Kbd.js", "../src/components/Code.js", "../src/components/Blockquote.js", "../src/components/SimpleGrid.js", "../src/components/List.js", "../src/components/Anchor.js", "../src/components/Image.js", "../src/components/Icon.js", "../src/components/Progress.js", "../src/components/Slider.js", "../src/components/Skeleton.js", "../src/components/Chip.js", "../src/components/SegmentedControl.js", "../src/components/Pagination.js", "../src/components/Radio.js", "../src/components/RadioGroup.js", "../src/components/Breadcrumbs.js", "../src/components/Center.js", "../src/components/Space.js", "../src/components/Collapse.js", "../src/components/ActionIcon.js", "../src/components/Popover.js", "../src/components/HoverCard.js", "../src/components/Affix.js", "../src/components/Fieldset.js", "../src/components/AppBar.js", "../src/components/Sidebar.js", "../src/components/Timeline.js", "../src/components/Stepper.js", "../src/components/Rating.js", "../src/components/Tag.js", "../src/components/Calendar.js", "../src/components/MultiSelect.js", "../src/components/ToastStack.js", "../src/components/DatePicker.js", "../src/components/Notifications.js", "../src/components/RangeSlider.js", "../src/components/DateInput.js", "../src/components/Popper.js", "../src/components/PasswordInput.js", "../src/components/SearchInput.js", "../src/components/CopyButton.js", "../src/components/ProgressRing.js", "../src/components/Toast.js", "../src/components/SelectSearch.js", "../src/components/SwitchGroup.js", "../src/components/RangePicker.js", "../src/components/Flex.js", "../src/components/NavLink.js", "../src/components/Indicator.js", "../src/components/Burger.js", "../src/components/LoadingOverlay.js", "../src/components/Grid.js", "../src/components/Col.js", "../src/components/ScrollArea.js", "../src/components/PinInput.js", "../src/components/CheckboxGroup.js", "../src/components/AvatarGroup.js", "../src/components/BadgeGroup.js", "../src/components/GridTable.js", "../src/components/BottomBar.js", "../src/components/EventCalendar.js", "../src/hooks/useDisclosure.js", "../src/index.js"],
4
- "sourcesContent": ["const STYLE_ID = 'granular-ui-styles';\n\nconst poppins400 = new URL('./fonts/Poppins-400.ttf', import.meta.url).href;\nconst poppins500 = new URL('./fonts/Poppins-500.ttf', import.meta.url).href;\nconst poppins600 = new URL('./fonts/Poppins-600.ttf', import.meta.url).href;\nconst poppins700 = new URL('./fonts/Poppins-700.ttf', import.meta.url).href;\n\nconst arimo400 = new URL('./fonts/Arimo-400.ttf', import.meta.url).href;\nconst arimo500 = new URL('./fonts/Arimo-500.ttf', import.meta.url).href;\nconst arimo600 = new URL('./fonts/Arimo-600.ttf', import.meta.url).href;\nconst arimo700 = new URL('./fonts/Arimo-700.ttf', import.meta.url).href;\n\nconst inter400 = new URL('./fonts/Inter-400.woff2', import.meta.url).href;\nconst inter500 = new URL('./fonts/Inter-500.woff2', import.meta.url).href;\nconst inter600 = new URL('./fonts/Inter-600.woff2', import.meta.url).href;\nconst inter700 = new URL('./fonts/Inter-700.woff2', import.meta.url).href;\n\nconst css = `\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url('${poppins400}') format('truetype');\n}\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url('${poppins500}') format('truetype');\n}\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url('${poppins600}') format('truetype');\n}\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url('${poppins700}') format('truetype');\n}\n\n@font-face {\n font-family: 'Arimo';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url('${arimo400}') format('truetype');\n}\n@font-face {\n font-family: 'Arimo';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url('${arimo500}') format('truetype');\n}\n@font-face {\n font-family: 'Arimo';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url('${arimo600}') format('truetype');\n}\n@font-face {\n font-family: 'Arimo';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url('${arimo700}') format('truetype');\n}\n\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url('${inter400}') format('woff2');\n}\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url('${inter500}') format('woff2');\n}\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url('${inter600}') format('woff2');\n}\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url('${inter700}') format('woff2');\n}\n\n:root {\n /* Color scales - base colors */\n --g-ui-white: #ffffff;\n --g-ui-black: #000000;\n \n --g-ui-gray-50: #f9fafb;\n --g-ui-gray-100: #f2f4f7;\n --g-ui-gray-200: #e4e7ec;\n --g-ui-gray-300: #cdd1d9;\n --g-ui-gray-400: #98a2b3;\n --g-ui-gray-500: #667085;\n --g-ui-gray-600: #475467;\n --g-ui-gray-700: #344054;\n --g-ui-gray-800: #1d2939;\n --g-ui-gray-900: #101828;\n --g-ui-gray-950: #0c111d;\n \n --g-ui-red-50: #fef3f2;\n --g-ui-red-100: #fee4e2;\n --g-ui-red-200: #fecdca;\n --g-ui-red-300: #fda29b;\n --g-ui-red-400: #f97066;\n --g-ui-red-500: #f04438;\n --g-ui-red-600: #d92d20;\n --g-ui-red-700: #b42318;\n --g-ui-red-800: #912018;\n --g-ui-red-900: #7a271a;\n --g-ui-red-950: #55160c;\n \n --g-ui-orange-50: #fff6ed;\n --g-ui-orange-100: #ffead5;\n --g-ui-orange-200: #fddcab;\n --g-ui-orange-300: #feb273;\n --g-ui-orange-400: #fd853a;\n --g-ui-orange-500: #ef6820;\n --g-ui-orange-600: #e04f16;\n --g-ui-orange-700: #b93815;\n --g-ui-orange-800: #932f19;\n --g-ui-orange-900: #7a2e0e;\n --g-ui-orange-950: #511c10;\n \n --g-ui-green-50: #ecfdf3;\n --g-ui-green-100: #dcfae6;\n --g-ui-green-200: #abefc6;\n --g-ui-green-300: #75e0a7;\n --g-ui-green-400: #47cd89;\n --g-ui-green-500: #17b26a;\n --g-ui-green-600: #079455;\n --g-ui-green-700: #067647;\n --g-ui-green-800: #085d3a;\n --g-ui-green-900: #074d31;\n --g-ui-green-950: #053321;\n \n --g-ui-blue-50: #eff8ff;\n --g-ui-blue-100: #d1e9ff;\n --g-ui-blue-200: #b2ddff;\n --g-ui-blue-300: #84caff;\n --g-ui-blue-400: #53b1fd;\n --g-ui-blue-500: #2e90fa;\n --g-ui-blue-600: #1570ef;\n --g-ui-blue-700: #175cd3;\n --g-ui-blue-800: #1849a9;\n --g-ui-blue-900: #194185;\n --g-ui-blue-950: #102a56;\n \n --g-ui-yellow-50: #fefbe8;\n --g-ui-yellow-100: #fef7c3;\n --g-ui-yellow-200: #feee95;\n --g-ui-yellow-300: #fde272;\n --g-ui-yellow-400: #fac515;\n --g-ui-yellow-500: #eaaa08;\n --g-ui-yellow-600: #ca8504;\n --g-ui-yellow-700: #a15c07;\n --g-ui-yellow-800: #854a0e;\n --g-ui-yellow-900: #713b12;\n --g-ui-yellow-950: #422006;\n \n --g-ui-teal-50: #f0fdf9;\n --g-ui-teal-100: #ccfbef;\n --g-ui-teal-200: #99f6e0;\n --g-ui-teal-300: #5fe9d0;\n --g-ui-teal-400: #2ed3b7;\n --g-ui-teal-500: #15b79e;\n --g-ui-teal-600: #0e9384;\n --g-ui-teal-700: #107569;\n --g-ui-teal-800: #125d56;\n --g-ui-teal-900: #134e48;\n --g-ui-teal-950: #0a2926;\n \n --g-ui-purple-50: #f4f3ff;\n --g-ui-purple-100: #ebe9fe;\n --g-ui-purple-200: #d9d6fe;\n --g-ui-purple-300: #bdb4fe;\n --g-ui-purple-400: #9b8afb;\n --g-ui-purple-500: #7a5af8;\n --g-ui-purple-600: #6938ef;\n --g-ui-purple-700: #5925dc;\n --g-ui-purple-800: #4a1fb8;\n --g-ui-purple-900: #3e1c96;\n --g-ui-purple-950: #27115a;\n \n --g-ui-pink-50: #fdf2fa;\n --g-ui-pink-100: #fce7f6;\n --g-ui-pink-200: #fcceee;\n --g-ui-pink-300: #faa7e0;\n --g-ui-pink-400: #f670c7;\n --g-ui-pink-500: #ee46bc;\n --g-ui-pink-600: #dd2590;\n --g-ui-pink-700: #c11574;\n --g-ui-pink-800: #9e165f;\n --g-ui-pink-900: #851651;\n --g-ui-pink-950: #4e0d30;\n \n --g-ui-cyan-50: #ecfdff;\n --g-ui-cyan-100: #cff9fe;\n --g-ui-cyan-200: #a5f0fc;\n --g-ui-cyan-300: #67e3f9;\n --g-ui-cyan-400: #22ccee;\n --g-ui-cyan-500: #06aed4;\n --g-ui-cyan-600: #088ab2;\n --g-ui-cyan-700: #0e7090;\n --g-ui-cyan-800: #155b75;\n --g-ui-cyan-900: #164c63;\n --g-ui-cyan-950: #0d2d3a;\n \n /* Semantic colors - Dark theme (default) */\n --g-ui-bg: var(--g-ui-gray-950);\n --g-ui-bg-subtle: var(--g-ui-gray-900);\n --g-ui-bg-muted: var(--g-ui-gray-800);\n --g-ui-bg-emphasized: var(--g-ui-gray-700);\n --g-ui-bg-inverted: var(--g-ui-gray-50);\n --g-ui-bg-panel: var(--g-ui-gray-900);\n --g-ui-bg-error: var(--g-ui-red-950);\n --g-ui-bg-warning: var(--g-ui-orange-950);\n --g-ui-bg-success: var(--g-ui-green-950);\n --g-ui-bg-info: var(--g-ui-blue-950);\n \n --g-ui-fg: var(--g-ui-gray-50);\n --g-ui-fg-muted: var(--g-ui-gray-400);\n --g-ui-fg-subtle: var(--g-ui-gray-500);\n --g-ui-fg-inverted: var(--g-ui-gray-950);\n --g-ui-fg-error: var(--g-ui-red-400);\n --g-ui-fg-warning: var(--g-ui-orange-300);\n --g-ui-fg-success: var(--g-ui-green-400);\n --g-ui-fg-info: var(--g-ui-blue-400);\n \n --g-ui-border: var(--g-ui-gray-700);\n --g-ui-border-subtle: var(--g-ui-gray-900);\n --g-ui-border-muted: var(--g-ui-gray-800);\n --g-ui-border-emphasized: var(--g-ui-gray-600);\n --g-ui-border-inverted: var(--g-ui-gray-200);\n --g-ui-border-error: var(--g-ui-red-400);\n --g-ui-border-warning: var(--g-ui-orange-400);\n --g-ui-border-success: var(--g-ui-green-400);\n --g-ui-border-info: var(--g-ui-blue-400);\n \n /* Gray semantic */\n --g-ui-gray-contrast: var(--g-ui-gray-950);\n --g-ui-gray-fg: var(--g-ui-gray-200);\n --g-ui-gray-subtle: var(--g-ui-gray-800);\n --g-ui-gray-muted: var(--g-ui-gray-700);\n --g-ui-gray-emphasized: var(--g-ui-gray-600);\n --g-ui-gray-solid: var(--g-ui-gray-50);\n --g-ui-gray-focus-ring: var(--g-ui-gray-400);\n --g-ui-gray-border: var(--g-ui-gray-700);\n \n /* Red semantic */\n --g-ui-red-contrast: white;\n --g-ui-red-fg: var(--g-ui-red-300);\n --g-ui-red-subtle: var(--g-ui-red-900);\n --g-ui-red-muted: var(--g-ui-red-800);\n --g-ui-red-emphasized: var(--g-ui-red-700);\n --g-ui-red-solid: var(--g-ui-red-600);\n --g-ui-red-focus-ring: var(--g-ui-red-500);\n --g-ui-red-border: var(--g-ui-red-400);\n \n /* Orange semantic */\n --g-ui-orange-contrast: black;\n --g-ui-orange-fg: var(--g-ui-orange-300);\n --g-ui-orange-subtle: var(--g-ui-orange-900);\n --g-ui-orange-muted: var(--g-ui-orange-800);\n --g-ui-orange-emphasized: var(--g-ui-orange-700);\n --g-ui-orange-solid: var(--g-ui-orange-500);\n --g-ui-orange-focus-ring: var(--g-ui-orange-500);\n --g-ui-orange-border: var(--g-ui-orange-400);\n \n /* Green semantic */\n --g-ui-green-contrast: white;\n --g-ui-green-fg: var(--g-ui-green-300);\n --g-ui-green-subtle: var(--g-ui-green-900);\n --g-ui-green-muted: var(--g-ui-green-800);\n --g-ui-green-emphasized: var(--g-ui-green-700);\n --g-ui-green-solid: var(--g-ui-green-600);\n --g-ui-green-focus-ring: var(--g-ui-green-500);\n --g-ui-green-border: var(--g-ui-green-400);\n \n /* Blue semantic */\n --g-ui-blue-contrast: white;\n --g-ui-blue-fg: var(--g-ui-blue-300);\n --g-ui-blue-subtle: var(--g-ui-blue-900);\n --g-ui-blue-muted: var(--g-ui-blue-800);\n --g-ui-blue-emphasized: var(--g-ui-blue-700);\n --g-ui-blue-solid: var(--g-ui-blue-600);\n --g-ui-blue-focus-ring: var(--g-ui-blue-500);\n --g-ui-blue-border: var(--g-ui-blue-400);\n \n /* Yellow semantic */\n --g-ui-yellow-contrast: black;\n --g-ui-yellow-fg: var(--g-ui-yellow-300);\n --g-ui-yellow-subtle: var(--g-ui-yellow-900);\n --g-ui-yellow-muted: var(--g-ui-yellow-800);\n --g-ui-yellow-emphasized: var(--g-ui-yellow-700);\n --g-ui-yellow-solid: var(--g-ui-yellow-300);\n --g-ui-yellow-focus-ring: var(--g-ui-yellow-500);\n --g-ui-yellow-border: var(--g-ui-yellow-500);\n \n /* Teal semantic */\n --g-ui-teal-contrast: white;\n --g-ui-teal-fg: var(--g-ui-teal-300);\n --g-ui-teal-subtle: var(--g-ui-teal-900);\n --g-ui-teal-muted: var(--g-ui-teal-800);\n --g-ui-teal-emphasized: var(--g-ui-teal-700);\n --g-ui-teal-solid: var(--g-ui-teal-600);\n --g-ui-teal-focus-ring: var(--g-ui-teal-500);\n --g-ui-teal-border: var(--g-ui-teal-400);\n \n /* Purple semantic */\n --g-ui-purple-contrast: white;\n --g-ui-purple-fg: var(--g-ui-purple-300);\n --g-ui-purple-subtle: var(--g-ui-purple-900);\n --g-ui-purple-muted: var(--g-ui-purple-800);\n --g-ui-purple-emphasized: var(--g-ui-purple-700);\n --g-ui-purple-solid: var(--g-ui-purple-600);\n --g-ui-purple-focus-ring: var(--g-ui-purple-500);\n --g-ui-purple-border: var(--g-ui-purple-400);\n \n /* Pink semantic */\n --g-ui-pink-contrast: white;\n --g-ui-pink-fg: var(--g-ui-pink-300);\n --g-ui-pink-subtle: var(--g-ui-pink-900);\n --g-ui-pink-muted: var(--g-ui-pink-800);\n --g-ui-pink-emphasized: var(--g-ui-pink-700);\n --g-ui-pink-solid: var(--g-ui-pink-600);\n --g-ui-pink-focus-ring: var(--g-ui-pink-500);\n --g-ui-pink-border: var(--g-ui-pink-400);\n \n /* Cyan semantic */\n --g-ui-cyan-contrast: white;\n --g-ui-cyan-fg: var(--g-ui-cyan-300);\n --g-ui-cyan-subtle: var(--g-ui-cyan-900);\n --g-ui-cyan-muted: var(--g-ui-cyan-800);\n --g-ui-cyan-emphasized: var(--g-ui-cyan-700);\n --g-ui-cyan-solid: var(--g-ui-cyan-600);\n --g-ui-cyan-focus-ring: var(--g-ui-cyan-500);\n --g-ui-cyan-border: var(--g-ui-cyan-400);\n \n /* Primary (indigo #6366f1 - Linear inspired) */\n --g-ui-primary: #6366f1;\n --g-ui-primary-hover: #818cf8;\n --g-ui-primary-active: #4f46e5;\n --g-ui-primary-subtle: rgba(99, 102, 241, 0.1);\n --g-ui-primary-muted: rgba(99, 102, 241, 0.2);\n --g-ui-primary-emphasized: rgba(99, 102, 241, 0.3);\n --g-ui-primary-fg: var(--g-ui-white);\n \n /* Aliases for common usage */\n --g-ui-success: var(--g-ui-green-500);\n --g-ui-danger: var(--g-ui-red-500);\n --g-ui-warning: var(--g-ui-yellow-500);\n --g-ui-info: var(--g-ui-cyan-500);\n \n /* Shadows - Dark theme (dual-layer, Linear/Vercel inspired) */\n --g-ui-shadow-xs: 0px 1px 2px rgba(0, 0, 0, 0.48);\n --g-ui-shadow-sm: 0px 1px 3px rgba(0, 0, 0, 0.48), 0px 1px 2px rgba(0, 0, 0, 0.32);\n --g-ui-shadow-md: 0px 4px 8px -2px rgba(0, 0, 0, 0.48), 0px 2px 4px -2px rgba(0, 0, 0, 0.32);\n --g-ui-shadow-lg: 0px 12px 16px -4px rgba(0, 0, 0, 0.48), 0px 4px 6px -2px rgba(0, 0, 0, 0.24);\n --g-ui-shadow-xl: 0px 20px 24px -4px rgba(0, 0, 0, 0.48), 0px 8px 8px -4px rgba(0, 0, 0, 0.24);\n --g-ui-shadow-2xl: 0px 24px 48px -12px rgba(0, 0, 0, 0.64);\n \n /* Legacy (compatibility) */\n --g-ui-text: var(--g-ui-fg);\n --g-ui-muted: var(--g-ui-fg-muted);\n --g-ui-surface: var(--g-ui-bg-panel);\n --g-ui-primary-strong: var(--g-ui-primary-active);\n --g-ui-shadow: var(--g-ui-shadow-md);\n \n /* Misc */\n --g-ui-radius: 4px;\n --g-ui-font: 'Inter', 'Arimo', 'Poppins', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n --g-ui-space-2: 2px;\n --g-ui-space-3: 3px;\n --g-ui-space-4: 4px;\n --g-ui-space-5: 5px;\n --g-ui-space-6: 6px;\n --g-ui-space-7: 7px;\n --g-ui-space-8: 8px;\n --g-ui-space-9: 9px;\n --g-ui-space-10: 10px;\n --g-ui-space-12: 12px;\n --g-ui-space-13: 13px;\n --g-ui-space-14: 14px;\n --g-ui-space-15: 15px;\n --g-ui-space-16: 16px;\n --g-ui-space-18: 18px;\n --g-ui-space-20: 20px;\n --g-ui-space-22: 22px;\n --g-ui-space-24: 24px;\n --g-ui-space-26: 26px;\n --g-ui-space-28: 28px;\n --g-ui-space-30: 30px;\n --g-ui-space-32: 32px;\n --g-ui-space-36: 36px;\n --g-ui-space-38: 38px;\n --g-ui-space-40: 40px;\n --g-ui-container-padding: var(--g-ui-space-16);\n}\n\n.g-ui-theme-dark {\n --g-ui-bg: var(--g-ui-gray-950);\n --g-ui-bg-subtle: var(--g-ui-gray-800);\n --g-ui-bg-muted: var(--g-ui-gray-700);\n --g-ui-bg-emphasized: var(--g-ui-gray-600);\n --g-ui-bg-inverted: var(--g-ui-gray-50);\n --g-ui-bg-panel: var(--g-ui-gray-900);\n \n --g-ui-fg: var(--g-ui-gray-50);\n --g-ui-fg-muted: var(--g-ui-gray-400);\n --g-ui-fg-subtle: var(--g-ui-gray-500);\n --g-ui-fg-inverted: var(--g-ui-gray-950);\n \n --g-ui-border: var(--g-ui-gray-700);\n --g-ui-border-subtle: var(--g-ui-gray-900);\n --g-ui-border-muted: var(--g-ui-gray-800);\n --g-ui-border-emphasized: var(--g-ui-gray-600);\n \n /* Gray semantic */\n --g-ui-gray-contrast: var(--g-ui-gray-950);\n --g-ui-gray-subtle: var(--g-ui-gray-800);\n --g-ui-gray-muted: var(--g-ui-gray-700);\n --g-ui-gray-emphasized: var(--g-ui-gray-600);\n --g-ui-gray-solid: var(--g-ui-gray-50);\n --g-ui-gray-border: var(--g-ui-gray-700);\n \n /* Primary (dark mode) */\n --g-ui-primary-hover: #818cf8;\n --g-ui-primary-active: #4f46e5;\n \n --g-ui-shadow-xs: 0px 1px 2px rgba(0, 0, 0, 0.48);\n --g-ui-shadow-sm: 0px 1px 3px rgba(0, 0, 0, 0.48), 0px 1px 2px rgba(0, 0, 0, 0.32);\n --g-ui-shadow-md: 0px 4px 8px -2px rgba(0, 0, 0, 0.48), 0px 2px 4px -2px rgba(0, 0, 0, 0.32);\n --g-ui-shadow-lg: 0px 12px 16px -4px rgba(0, 0, 0, 0.48), 0px 4px 6px -2px rgba(0, 0, 0, 0.24);\n --g-ui-shadow-xl: 0px 20px 24px -4px rgba(0, 0, 0, 0.48), 0px 8px 8px -4px rgba(0, 0, 0, 0.24);\n --g-ui-shadow-2xl: 0px 24px 48px -12px rgba(0, 0, 0, 0.64);\n}\n\n.g-ui-theme-light {\n /* Semantic colors - Light theme */\n --g-ui-bg: var(--g-ui-white);\n --g-ui-bg-subtle: var(--g-ui-gray-50);\n --g-ui-bg-muted: var(--g-ui-gray-100);\n --g-ui-bg-emphasized: var(--g-ui-gray-200);\n --g-ui-bg-inverted: var(--g-ui-gray-950);\n --g-ui-bg-panel: var(--g-ui-white);\n --g-ui-bg-error: var(--g-ui-red-50);\n --g-ui-bg-warning: var(--g-ui-orange-50);\n --g-ui-bg-success: var(--g-ui-green-50);\n --g-ui-bg-info: var(--g-ui-blue-50);\n \n --g-ui-fg: var(--g-ui-gray-900);\n --g-ui-fg-muted: var(--g-ui-gray-600);\n --g-ui-fg-subtle: var(--g-ui-gray-400);\n --g-ui-fg-inverted: var(--g-ui-gray-50);\n --g-ui-fg-error: var(--g-ui-red-600);\n --g-ui-fg-warning: var(--g-ui-orange-600);\n --g-ui-fg-success: var(--g-ui-green-600);\n --g-ui-fg-info: var(--g-ui-blue-600);\n \n /* Legacy override for light theme */\n --g-ui-text: var(--g-ui-fg);\n --g-ui-muted: var(--g-ui-fg-muted);\n \n --g-ui-border: var(--g-ui-gray-200);\n --g-ui-border-subtle: var(--g-ui-gray-100);\n --g-ui-border-muted: var(--g-ui-gray-200);\n --g-ui-border-emphasized: var(--g-ui-gray-300);\n --g-ui-border-inverted: var(--g-ui-gray-800);\n --g-ui-border-error: var(--g-ui-red-300);\n --g-ui-border-warning: var(--g-ui-orange-300);\n --g-ui-border-success: var(--g-ui-green-300);\n --g-ui-border-info: var(--g-ui-blue-300);\n \n /* Gray semantic */\n --g-ui-gray-contrast: var(--g-ui-gray-50);\n --g-ui-gray-fg: var(--g-ui-gray-700);\n --g-ui-gray-subtle: var(--g-ui-gray-50);\n --g-ui-gray-muted: var(--g-ui-gray-100);\n --g-ui-gray-emphasized: var(--g-ui-gray-200);\n --g-ui-gray-solid: var(--g-ui-gray-900);\n --g-ui-gray-focus-ring: var(--g-ui-gray-400);\n --g-ui-gray-border: var(--g-ui-gray-200);\n \n /* Red semantic */\n --g-ui-red-contrast: white;\n --g-ui-red-fg: var(--g-ui-red-600);\n --g-ui-red-subtle: var(--g-ui-red-50);\n --g-ui-red-muted: var(--g-ui-red-100);\n --g-ui-red-emphasized: var(--g-ui-red-200);\n --g-ui-red-solid: var(--g-ui-red-600);\n --g-ui-red-focus-ring: var(--g-ui-red-500);\n --g-ui-red-border: var(--g-ui-red-300);\n \n /* Orange semantic */\n --g-ui-orange-contrast: white;\n --g-ui-orange-fg: var(--g-ui-orange-600);\n --g-ui-orange-subtle: var(--g-ui-orange-50);\n --g-ui-orange-muted: var(--g-ui-orange-100);\n --g-ui-orange-emphasized: var(--g-ui-orange-200);\n --g-ui-orange-solid: var(--g-ui-orange-600);\n --g-ui-orange-focus-ring: var(--g-ui-orange-500);\n --g-ui-orange-border: var(--g-ui-orange-300);\n \n /* Green semantic */\n --g-ui-green-contrast: white;\n --g-ui-green-fg: var(--g-ui-green-600);\n --g-ui-green-subtle: var(--g-ui-green-50);\n --g-ui-green-muted: var(--g-ui-green-100);\n --g-ui-green-emphasized: var(--g-ui-green-200);\n --g-ui-green-solid: var(--g-ui-green-600);\n --g-ui-green-focus-ring: var(--g-ui-green-500);\n --g-ui-green-border: var(--g-ui-green-300);\n \n /* Blue semantic */\n --g-ui-blue-contrast: white;\n --g-ui-blue-fg: var(--g-ui-blue-600);\n --g-ui-blue-subtle: var(--g-ui-blue-50);\n --g-ui-blue-muted: var(--g-ui-blue-100);\n --g-ui-blue-emphasized: var(--g-ui-blue-200);\n --g-ui-blue-solid: var(--g-ui-blue-600);\n --g-ui-blue-focus-ring: var(--g-ui-blue-500);\n --g-ui-blue-border: var(--g-ui-blue-300);\n \n /* Yellow semantic */\n --g-ui-yellow-contrast: black;\n --g-ui-yellow-fg: var(--g-ui-yellow-700);\n --g-ui-yellow-subtle: var(--g-ui-yellow-50);\n --g-ui-yellow-muted: var(--g-ui-yellow-100);\n --g-ui-yellow-emphasized: var(--g-ui-yellow-200);\n --g-ui-yellow-solid: var(--g-ui-yellow-400);\n --g-ui-yellow-focus-ring: var(--g-ui-yellow-500);\n --g-ui-yellow-border: var(--g-ui-yellow-300);\n \n /* Teal semantic */\n --g-ui-teal-contrast: white;\n --g-ui-teal-fg: var(--g-ui-teal-600);\n --g-ui-teal-subtle: var(--g-ui-teal-50);\n --g-ui-teal-muted: var(--g-ui-teal-100);\n --g-ui-teal-emphasized: var(--g-ui-teal-200);\n --g-ui-teal-solid: var(--g-ui-teal-600);\n --g-ui-teal-focus-ring: var(--g-ui-teal-500);\n --g-ui-teal-border: var(--g-ui-teal-300);\n \n /* Purple semantic */\n --g-ui-purple-contrast: white;\n --g-ui-purple-fg: var(--g-ui-purple-600);\n --g-ui-purple-subtle: var(--g-ui-purple-50);\n --g-ui-purple-muted: var(--g-ui-purple-100);\n --g-ui-purple-emphasized: var(--g-ui-purple-200);\n --g-ui-purple-solid: var(--g-ui-purple-600);\n --g-ui-purple-focus-ring: var(--g-ui-purple-500);\n --g-ui-purple-border: var(--g-ui-purple-300);\n \n /* Pink semantic */\n --g-ui-pink-contrast: white;\n --g-ui-pink-fg: var(--g-ui-pink-600);\n --g-ui-pink-subtle: var(--g-ui-pink-50);\n --g-ui-pink-muted: var(--g-ui-pink-100);\n --g-ui-pink-emphasized: var(--g-ui-pink-200);\n --g-ui-pink-solid: var(--g-ui-pink-600);\n --g-ui-pink-focus-ring: var(--g-ui-pink-500);\n --g-ui-pink-border: var(--g-ui-pink-300);\n \n /* Cyan semantic */\n --g-ui-cyan-contrast: white;\n --g-ui-cyan-fg: var(--g-ui-cyan-600);\n --g-ui-cyan-subtle: var(--g-ui-cyan-50);\n --g-ui-cyan-muted: var(--g-ui-cyan-100);\n --g-ui-cyan-emphasized: var(--g-ui-cyan-200);\n --g-ui-cyan-solid: var(--g-ui-cyan-600);\n --g-ui-cyan-focus-ring: var(--g-ui-cyan-500);\n --g-ui-cyan-border: var(--g-ui-cyan-300);\n \n /* Primary overrides for light theme */\n --g-ui-primary-hover: #4f46e5;\n --g-ui-primary-active: #4338ca;\n --g-ui-primary-subtle: rgba(99, 102, 241, 0.06);\n --g-ui-primary-muted: rgba(99, 102, 241, 0.12);\n --g-ui-primary-emphasized: rgba(99, 102, 241, 0.2);\n \n /* Shadows - Light theme (dual-layer, Untitled UI inspired) */\n --g-ui-shadow-xs: 0px 1px 2px rgba(16, 24, 40, 0.05);\n --g-ui-shadow-sm: 0px 1px 3px rgba(16, 24, 40, 0.1), 0px 1px 2px rgba(16, 24, 40, 0.06);\n --g-ui-shadow-md: 0px 4px 8px -2px rgba(16, 24, 40, 0.1), 0px 2px 4px -2px rgba(16, 24, 40, 0.06);\n --g-ui-shadow-lg: 0px 12px 16px -4px rgba(16, 24, 40, 0.08), 0px 4px 6px -2px rgba(16, 24, 40, 0.03);\n --g-ui-shadow-xl: 0px 20px 24px -4px rgba(16, 24, 40, 0.08), 0px 8px 8px -4px rgba(16, 24, 40, 0.03);\n --g-ui-shadow-2xl: 0px 24px 48px -12px rgba(16, 24, 40, 0.18);\n}\nbody {\n margin: 0;\n padding: 0;\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n font-family: var(--g-ui-font);\n font-size: 14px;\n}\n\n.g-ui-reset {\n font-family: var(--g-ui-font);\n color: var(--g-ui-text);\n}\n\n.g-ui-text {\n font-family: var(--g-ui-font);\n font-weight: 400;\n color: var(--g-ui-text);\n}\n.g-ui-text-size-xs { font-size: 12px; line-height: 1.4; }\n.g-ui-text-size-sm { font-size: 14px; line-height: 1.45; }\n.g-ui-text-size-md { font-size: 16px; line-height: 1.5; }\n.g-ui-text-size-lg { font-size: 18px; line-height: 1.55; }\n.g-ui-text-size-xl { font-size: 20px; line-height: 1.6; }\n.g-ui-text-weight-400 { font-weight: 400; }\n.g-ui-text-weight-500 { font-weight: 500; }\n.g-ui-text-weight-600 { font-weight: 600; }\n.g-ui-text-weight-700 { font-weight: 700; }\n.g-ui-text-dimmed { color: var(--g-ui-muted); }\n.g-ui-text-muted { color: var(--g-ui-muted); }\n.g-ui-text-primary { color: var(--g-ui-primary); }\n.g-ui-text-success { color: var(--g-ui-success); }\n.g-ui-text-danger { color: var(--g-ui-danger); }\n.g-ui-text-align-left { text-align: left; }\n.g-ui-text-align-center { text-align: center; }\n.g-ui-text-align-right { text-align: right; }\n\n.g-ui-title {\n font-family: var(--g-ui-font);\n color: var(--g-ui-text);\n margin: 0;\n font-weight: 700;\n}\n.g-ui-title-order-1 { font-size: 38px; }\n.g-ui-title-order-2 { font-size: 32px; }\n.g-ui-title-order-3 { font-size: 28px; }\n.g-ui-title-order-4 { font-size: 22px; }\n.g-ui-title-order-5 { font-size: 18px; }\n.g-ui-title-order-6 { font-size: 16px; }\n\n.g-ui-stack {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-stack-gap, 0);\n}\n.g-ui-gap-none { gap: 0; }\n.g-ui-gap-xs { gap: var(--g-ui-space-4); }\n.g-ui-gap-sm { gap: var(--g-ui-space-8); }\n.g-ui-gap-md { gap: var(--g-ui-space-12); }\n.g-ui-gap-lg { gap: var(--g-ui-space-16); }\n.g-ui-gap-xl { gap: var(--g-ui-space-20); }\n.g-ui-align-start { align-items: flex-start; }\n.g-ui-align-center { align-items: center; }\n.g-ui-align-end { align-items: flex-end; }\n.g-ui-justify-start { justify-content: flex-start; }\n.g-ui-justify-center { justify-content: center; }\n.g-ui-justify-end { justify-content: flex-end; }\n.g-ui-justify-between { justify-content: space-between; }\n\n.g-ui-group {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n}\n.g-ui-no-wrap { flex-wrap: nowrap; }\n\n.g-ui-container {\n width: 100%;\n margin: 0 auto;\n padding: 0 var(--g-ui-container-padding, var(--g-ui-space-16));\n box-sizing: border-box;\n}\n.g-ui-container-size-xs { max-width: 540px; }\n.g-ui-container-size-sm { max-width: 720px; }\n.g-ui-container-size-md { max-width: 960px; }\n.g-ui-container-size-lg { max-width: 1140px; }\n.g-ui-container-size-xl { max-width: 1320px; }\n.g-ui-container-fluid { max-width: 100%; }\n\n.g-ui-card {\n background: var(--g-ui-surface);\n border-radius: var(--g-ui-radius);\n box-shadow: none;\n border: 1px solid var(--g-ui-border);\n}\n.g-ui-card-border-default { border: 1px solid var(--g-ui-border); }\n.g-ui-card-border-none { border: none; }\n.g-ui-card-border-light { border: 1px solid var(--g-ui-border-light); }\n.g-ui-card-border-dark { border: 1px solid var(--g-ui-border-dark); }\n.g-ui-card-border-primary { border: 1px solid var(--g-ui-primary); }\n.g-ui-card-border-success { border: 1px solid var(--g-ui-success); }\n.g-ui-card-border-danger { border: 1px solid var(--g-ui-danger); }\n.g-ui-card-border-warning { border: 1px solid var(--g-ui-warning); }\n.g-ui-card-border-info { border: 1px solid var(--g-ui-info); }\n.g-ui-card-border-subtle { border: 1px solid var(--g-ui-border-subtle); }\n.g-ui-card-border-emphasized { border: 1px solid var(--g-ui-border-emphasized); }\n.g-ui-card-border-inverted { border: 1px solid var(--g-ui-border-inverted); }\n.g-ui-card-border-error { border: 1px solid var(--g-ui-border-error); }\n.g-ui-card-border-warning { border: 1px solid var(--g-ui-border-warning); }\n.g-ui-card-border-success { border: 1px solid var(--g-ui-border-success); }\n.g-ui-card-border-info { border: 1px solid var(--g-ui-border-info); }\n\n.g-ui-card-padding-xs { padding: var(--g-ui-space-10); }\n.g-ui-card-padding-sm { padding: var(--g-ui-space-14); }\n.g-ui-card-padding-md { padding: var(--g-ui-space-18); }\n.g-ui-card-padding-lg { padding: var(--g-ui-space-24); }\n.g-ui-card-radius-sm { border-radius: 8px; }\n.g-ui-card-radius-md { border-radius: 10px; }\n.g-ui-card-radius-lg { border-radius: 14px; }\n.g-ui-card-shadow-none { box-shadow: none; }\n.g-ui-card-shadow-sm { box-shadow: var(--g-ui-shadow-sm); }\n.g-ui-card-shadow-md { box-shadow: var(--g-ui-shadow-md); }\n.g-ui-card-shadow-lg { box-shadow: var(--g-ui-shadow-lg); }\n.g-ui-card-title {\n margin-bottom: var(--g-ui-space-8);\n font-weight: 600;\n font-size: 16px;\n color: var(--g-ui-text);\n}\n.g-ui-card-content {\n color: var(--g-ui-muted);\n margin-bottom: var(--g-ui-space-10);\n}\n.g-ui-card-actions {\n position:relative;\n margin-top: var(--g-ui-space-10);\n display: flex;\n justify-content: flex-end;\n gap: var(--g-ui-space-8);\n border-top: 1px solid var(--g-ui-border);\n box-sizing: border-box;\n}\n\n.g-ui-card-padding-xs .g-ui-card-title, .g-ui-card-padding-xs .g-ui-card-content { margin-bottom: var(--g-ui-space-10); }\n.g-ui-card-padding-sm .g-ui-card-title, .g-ui-card-padding-sm .g-ui-card-content { margin-bottom: var(--g-ui-space-14); }\n.g-ui-card-padding-md .g-ui-card-title, .g-ui-card-padding-md .g-ui-card-content { margin-bottom: var(--g-ui-space-18); }\n.g-ui-card-padding-lg .g-ui-card-title, .g-ui-card-padding-lg .g-ui-card-content { margin-bottom: var(--g-ui-space-24); }\n\n.g-ui-card-padding-xs .g-ui-card-actions { left: calc(0px - var(--g-ui-space-10)); width: calc(100% + var(--g-ui-space-10) + var(--g-ui-space-10)); padding: var(--g-ui-space-10) var(--g-ui-space-10) 0 var(--g-ui-space-10); }\n.g-ui-card-padding-sm .g-ui-card-actions { left: calc(0px - var(--g-ui-space-14)); width: calc(100% + var(--g-ui-space-14) + var(--g-ui-space-14)); padding: var(--g-ui-space-14) var(--g-ui-space-14) 0 var(--g-ui-space-14); }\n.g-ui-card-padding-md .g-ui-card-actions { left: calc(0px - var(--g-ui-space-18)); width: calc(100% + var(--g-ui-space-18) + var(--g-ui-space-18)); padding: var(--g-ui-space-18) var(--g-ui-space-18) 0 var(--g-ui-space-18); }\n.g-ui-card-padding-lg .g-ui-card-actions { left: calc(0px - var(--g-ui-space-24)); width: calc(100% + var(--g-ui-space-24) + var(--g-ui-space-24)); padding: var(--g-ui-space-24) var(--g-ui-space-24) 0 var(--g-ui-space-24); }\n\n.g-ui-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n border-radius: 999px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.25px;\n white-space: nowrap;\n}\n.g-ui-badge-size-xs { font-size: 9px; height: 16px; padding: 0 var(--g-ui-space-6); }\n.g-ui-badge-size-sm { font-size: 10px; height: 18px; padding: 0 var(--g-ui-space-8); }\n.g-ui-badge-size-md { font-size: 11px; height: 20px; padding: 0 var(--g-ui-space-10); }\n.g-ui-badge-size-lg { font-size: 13px; height: 26px; padding: 0 var(--g-ui-space-12); }\n.g-ui-badge-size-xl { font-size: 16px; height: 32px; padding: 0 var(--g-ui-space-16); }\n.g-ui-badge-variant-filled {\n background: var(--g-ui-primary);\n color: var(--g-ui-primary-fg);\n border: 1px solid transparent;\n}\n.g-ui-badge-variant-light {\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-primary);\n border: 1px solid var(--g-ui-primary-muted);\n}\n.g-ui-badge-variant-outline {\n background: transparent;\n color: var(--g-ui-primary);\n border: 1px solid var(--g-ui-primary);\n}\n.g-ui-badge-variant-dot {\n background: transparent;\n color: var(--g-ui-text);\n border: 1px solid var(--g-ui-border);\n}\n.g-ui-badge-dot {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n}\n.g-ui-badge-dot::before {\n content: '';\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--g-ui-success);\n}\n\n.g-ui-button {\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n font-weight: 600;\n transition: transform .08s ease, background .12s ease, border .12s ease, color .12s ease;\n line-height: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n.g-ui-button:active { transform: translateY(1px); }\n.g-ui-button:disabled { opacity: 0.6; cursor: not-allowed; }\n.g-ui-button-full { width: 100%; }\n.g-ui-button-loading { opacity: 0.8; }\n.g-ui-button-section-left { margin-right: var(--g-ui-space-8); display: inline-flex; }\n.g-ui-button-section-right { margin-left: var(--g-ui-space-8); display: inline-flex; }\n.g-ui-button-variant-filled { background: var(--g-ui-primary); color: var(--g-ui-primary-fg); border: 1px solid transparent; }\n.g-ui-button-variant-light { background: var(--g-ui-primary-subtle); color: var(--g-ui-primary); border: 1px solid var(--g-ui-primary-muted); }\n.g-ui-button-variant-outline { background: transparent; color: var(--g-ui-primary); border: 1px solid var(--g-ui-primary); }\n.g-ui-button-variant-subtle { background: transparent; color: var(--g-ui-text); border: 1px solid var(--g-ui-border); }\n.g-ui-button-variant-transparent { background: transparent; color: var(--g-ui-text); border: 1px solid transparent; }\n.g-ui-button-variant-filled:hover { background: var(--g-ui-primary-hover); }\n.g-ui-button-variant-light:hover { background: var(--g-ui-primary-muted); }\n.g-ui-button-variant-outline:hover { background: var(--g-ui-primary-subtle); }\n.g-ui-button-variant-subtle:hover { background: var(--g-ui-bg-muted); }\n.g-ui-button-variant-transparent:hover { background: var(--g-ui-bg-muted); }\n.g-ui-button-size-xs { font-size: 12px; height: 30px; padding: 0 var(--g-ui-space-8); }\n.g-ui-button-size-sm { font-size: 13px; height: 36px; padding: 0 var(--g-ui-space-10); }\n.g-ui-button-size-md { font-size: 14px; height: 42px; padding: 0 var(--g-ui-space-10); }\n.g-ui-button-size-lg { font-size: 15px; height: 50px; padding: 0 var(--g-ui-space-11); }\n.g-ui-button-size-xl { font-size: 16px; height: 60px; padding: 0 var(--g-ui-space-12); }\n\n.g-ui-input-wrapper {\n width: 100%;\n border-radius: 8px;\n border: 1px solid var(--g-ui-border);\n background: var(--g-ui-surface);\n color: var(--g-ui-text);\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n padding: 0 var(--g-ui-space-12);\n box-sizing: border-box;\n}\n.g-ui-input-wrapper:focus-within {\n border-color: var(--g-ui-primary);\n}\n.g-ui-input {\n width: 100%;\n border: 0;\n background: transparent;\n color: inherit;\n padding: 0;\n height: 100%;\n font-size: inherit;\n}\n.g-ui-input:focus,\n.g-ui-input:focus-within {\n outline: none;\n}\n.g-ui-input::placeholder {\n color: var(--g-ui-muted);\n transition: opacity .12s ease;\n}\n.g-ui-input:focus::placeholder {\n opacity: 0.5;\n}\n.g-ui-input-section {\n display: inline-flex;\n align-items: center;\n color: var(--g-ui-muted);\n}\n.g-ui-input-error {\n border-color: var(--g-ui-danger);\n}\n.g-ui-input-size-xs { font-size: 12px; height: 30px; padding: 0 var(--g-ui-space-10); }\n.g-ui-input-size-sm { font-size: 13px; height: 36px; padding: 0 var(--g-ui-space-12); }\n.g-ui-input-size-md { font-size: 14px; height: 42px; padding: 0 var(--g-ui-space-14); }\n.g-ui-input-size-lg { font-size: 15px; height: 50px; padding: 0 var(--g-ui-space-16); }\n.g-ui-input-size-xl { font-size: 16px; height: 60px; padding: 0 var(--g-ui-space-20); }\n.g-ui-text-input {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-6);\n}\n.g-ui-text-input-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--g-ui-text);\n}\n.g-ui-text-input-description {\n font-size: 12px;\n color: var(--g-ui-muted);\n}\n.g-ui-text-input-error-text {\n font-size: 12px;\n color: var(--g-ui-danger);\n}\n.g-ui-date-input-popover .g-ui-popover-dropdown {\n padding: 0;\n border-width:0;\n}\n\n.g-ui-modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0,0,0,0.6);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 999;\n}\n.g-ui-modal-overlay-light { background: rgba(0,0,0,0.4); }\n.g-ui-modal-overlay-normal { background: rgba(0,0,0,0.6); }\n.g-ui-modal-overlay-dark { background: rgba(0,0,0,0.8); }\n.g-ui-modal-centered { align-items: center; justify-content: center; }\n.g-ui-modal-top { align-items: flex-start; justify-content: center; padding-top: var(--g-ui-space-40); }\n.g-ui-modal-position-top-left { align-items: flex-start; justify-content: flex-start; padding: var(--g-ui-space-40) var(--g-ui-space-20); }\n.g-ui-modal-position-top-center { align-items: flex-start; justify-content: center; padding: var(--g-ui-space-40) var(--g-ui-space-20); }\n.g-ui-modal-position-top-right { align-items: flex-start; justify-content: flex-end; padding: var(--g-ui-space-40) var(--g-ui-space-20); }\n.g-ui-modal-position-center-left { align-items: center; justify-content: flex-start; padding: var(--g-ui-space-20); }\n.g-ui-modal-position-center { align-items: center; justify-content: center; padding: var(--g-ui-space-20); }\n.g-ui-modal-position-center-right { align-items: center; justify-content: flex-end; padding: var(--g-ui-space-20); }\n.g-ui-modal-position-bottom-left { align-items: flex-end; justify-content: flex-start; padding: var(--g-ui-space-20); padding-bottom: var(--g-ui-space-40); }\n.g-ui-modal-position-bottom-center { align-items: flex-end; justify-content: center; padding: var(--g-ui-space-20); padding-bottom: var(--g-ui-space-40); }\n.g-ui-modal-position-bottom-right { align-items: flex-end; justify-content: flex-end; padding: var(--g-ui-space-20); padding-bottom: var(--g-ui-space-40); }\n.g-ui-modal {\n background: var(--g-ui-bg);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: 8px;\n padding: var(--g-ui-space-16);\n min-width: 320px;\n max-width: 780px;\n box-shadow: var(--g-ui-shadow-lg);\n}\n.g-ui-modal-size-sm { width: 380px; }\n.g-ui-modal-size-md { width: 440px; }\n.g-ui-modal-size-lg { width: 620px; }\n.g-ui-modal-size-xl { width: 780px; }\n.g-ui-modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: var(--g-ui-space-12);\n}\n.g-ui-modal-title { font-weight: 700; }\n.g-ui-modal-close {\n padding: 0;\n width: 28px;\n height: 28px;\n}\n.g-ui-modal-close svg {\n width: 16px;\n height: 16px;\n fill: currentColor;\n}\n\n.g-ui-checkbox {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-6);\n box-sizing: border-box;\n}\n.g-ui-checkbox-control {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-10);\n cursor: pointer;\n}\n.g-ui-checkbox-indeterminate,\n.g-ui-checkbox-checked {\n position:absolute;\n color: var(--g-ui-primary-fg);\n fill: var(--g-ui-primary-fg);\n}\n.g-ui-checkbox-indeterminate svg,\n.g-ui-checkbox-checked svg {\n fill: var(--g-ui-primary-fg);\n}\n.g-ui-checkbox-input {\n appearance: none;\n width: var(--g-ui-control-size, 16px);\n height: var(--g-ui-control-size, 16px);\n border: 1px solid var(--g-ui-border);\n border-radius: 4px;\n background: var(--g-ui-bg);\n position: relative;\n transition: background-color .12s ease, border-color .12s ease;\n}\n.g-ui-checkbox-input:focus-visible {\n outline: 2px solid var(--g-ui-primary);\n outline-offset: 2px;\n}\n.g-ui-checkbox-input:checked {\n background: var(--g-ui-primary);\n border-color: var(--g-ui-primary);\n}\n.g-ui-checkbox-input:indeterminate {\n background: var(--g-ui-primary);\n border-color: var(--g-ui-primary);\n}\n\n.g-ui-checkbox-label { font-size: 14px; }\n.g-ui-checkbox-description { font-size: 12px; color: var(--g-ui-muted); }\n.g-ui-checkbox-size-xs { --g-ui-control-size: 16px; --g-ui-control-inner-offset: 4px; }\n.g-ui-checkbox-size-sm { --g-ui-control-size: 20px; --g-ui-control-inner-offset: 5px; }\n.g-ui-checkbox-size-md { --g-ui-control-size: 24px; --g-ui-control-inner-offset: 6px; }\n.g-ui-checkbox-size-lg { --g-ui-control-size: 30px; --g-ui-control-inner-offset: 7px; }\n.g-ui-checkbox-size-xl { --g-ui-control-size: 36px; --g-ui-control-inner-offset: 8px; }\n\n.g-ui-checkbox-size-xs .g-ui-checkbox-indeterminate { top: 2px;left:4px; }\n.g-ui-checkbox-size-xs .g-ui-checkbox-indeterminate svg { width: 16px; height: 16px; }\n.g-ui-checkbox-size-sm .g-ui-checkbox-indeterminate { top:3px; left:4px; }\n.g-ui-checkbox-size-sm .g-ui-checkbox-indeterminate svg { width: 20px; height:20px; }\n.g-ui-checkbox-size-md .g-ui-checkbox-indeterminate { top:3px; left:4px; }\n.g-ui-checkbox-size-md .g-ui-checkbox-indeterminate svg { width: 24px; height: 24px; }\n.g-ui-checkbox-size-lg .g-ui-checkbox-indeterminate { top:4px; left:5px; }\n.g-ui-checkbox-size-lg .g-ui-checkbox-indeterminate svg { width: 28px; height: 28px; }\n.g-ui-checkbox-size-xl .g-ui-checkbox-indeterminate { top:5px; left:6px; }\n.g-ui-checkbox-size-xl .g-ui-checkbox-indeterminate svg { width: 32px; height: 32px; }\n\n.g-ui-checkbox-size-xs .g-ui-checkbox-checked { top: 2px;left:4px; }\n.g-ui-checkbox-size-xs .g-ui-checkbox-checked svg { width: 16px; height: 16px; }\n.g-ui-checkbox-size-sm .g-ui-checkbox-checked { top:3px; left:4px; }\n.g-ui-checkbox-size-sm .g-ui-checkbox-checked svg { width: 20px; height:20px; }\n.g-ui-checkbox-size-md .g-ui-checkbox-checked { top:3px; left:4px; }\n.g-ui-checkbox-size-md .g-ui-checkbox-checked svg { width: 24px; height: 24px; }\n.g-ui-checkbox-size-lg .g-ui-checkbox-checked { top:4px; left:5px; }\n.g-ui-checkbox-size-lg .g-ui-checkbox-checked svg { width: 28px; height: 28px; }\n.g-ui-checkbox-size-xl .g-ui-checkbox-checked { top:5px; left:6px; }\n.g-ui-checkbox-size-xl .g-ui-checkbox-checked svg { width: 32px; height: 32px; }\n\n.g-ui-switch {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-10);\n cursor: pointer;\n}\n.g-ui-switch-input {\n appearance: none;\n width: var(--g-ui-switch-width, 36px);\n height: var(--g-ui-switch-height, 20px);\n border-radius: 999px;\n background: var(--g-ui-bg-muted);\n border: 1px solid var(--g-ui-border);\n position: relative;\n transition: background .15s ease, border .15s ease;\n}\n.g-ui-switch-input:focus-visible {\n outline: 2px solid var(--g-ui-primary);\n outline-offset: 2px;\n}\n.g-ui-switch-input::after {\n content: '';\n position: absolute;\n width: var(--g-ui-switch-thumb, 14px);\n height: var(--g-ui-switch-thumb, 14px);\n border-radius: 50%;\n background: #fff;\n top: var(--g-ui-switch-offset, 2px);\n left: var(--g-ui-switch-offset, 2px);\n transition: transform .15s ease;\n}\n.g-ui-switch-input:checked {\n background: var(--g-ui-primary);\n border-color: var(--g-ui-primary);\n}\n.g-ui-switch-input:checked::after {\n transform: translateX(calc(var(--g-ui-switch-width, 36px) - var(--g-ui-switch-thumb, 14px) - (var(--g-ui-switch-offset, 2px) * 2)));\n}\n.g-ui-switch-label { font-size: 14px; }\n.g-ui-switch-size-xs { --g-ui-switch-width: 32px; --g-ui-switch-height: 16px; --g-ui-switch-thumb: 12px; --g-ui-switch-offset: 2px; }\n.g-ui-switch-size-sm { --g-ui-switch-width: 38px; --g-ui-switch-height: 20px; --g-ui-switch-thumb: 14px; --g-ui-switch-offset: 3px; }\n.g-ui-switch-size-md { --g-ui-switch-width: 46px; --g-ui-switch-height: 24px; --g-ui-switch-thumb: 18px; --g-ui-switch-offset: 3px; }\n.g-ui-switch-size-lg { --g-ui-switch-width: 56px; --g-ui-switch-height: 30px; --g-ui-switch-thumb: 22px; --g-ui-switch-offset: 4px; }\n.g-ui-switch-size-xl { --g-ui-switch-width: 72px; --g-ui-switch-height: 36px; --g-ui-switch-thumb: 28px; --g-ui-switch-offset: 4px; }\n\n.g-ui-select-root {\n position: relative;\n width: 100%;\n}\n.g-ui-select {\n flex: 1;\n display: flex;\n align-items: center;\n min-height: 100%;\n cursor: pointer;\n color: var(--g-ui-text);\n font-size: inherit;\n}\n.g-ui-select-value {\n flex: 1;\n}\n.g-ui-select-placeholder {\n color: var(--g-ui-muted);\n}\n.g-ui-select-caret {\n color: var(--g-ui-muted);\n font-size: 12px;\n}\n.g-ui-select-dropdown {\n position: absolute;\n top: calc(100% + var(--g-ui-space-6));\n left: 0;\n right: 0;\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n background: var(--g-ui-bg);\n box-shadow: var(--g-ui-shadow-sm);\n padding: var(--g-ui-space-6);\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-4);\n z-index: 60;\n max-height: 240px;\n overflow: auto;\n}\n.g-ui-select-item {\n padding: var(--g-ui-space-6) var(--g-ui-space-8);\n border-radius: 6px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n}\n.g-ui-select-item:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-select-item-active {\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-primary);\n}\n.g-ui-select-item-disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n.g-ui-select-item-disabled:hover {\n background: transparent;\n}\n.g-ui-select-size-xs { font-size: 12px; height: 30px; padding: 0 var(--g-ui-space-10); }\n.g-ui-select-size-sm { font-size: 13px; height: 36px; padding: 0 var(--g-ui-space-12); }\n.g-ui-select-size-md { font-size: 14px; height: 42px; padding: 0 var(--g-ui-space-14); }\n.g-ui-select-size-lg { font-size: 15px; height: 50px; padding: 0 var(--g-ui-space-16); }\n.g-ui-select-size-xl { font-size: 16px; height: 60px; padding: 0 var(--g-ui-space-20); }\n\n.g-ui-tabs { display: flex; flex-direction: column; }\n.g-ui-tabs-list { display: flex; flex-wrap: wrap; gap: 0; }\n.g-ui-tabs-tab {\n position: relative;\n padding: var(--g-ui-space-8) var(--g-ui-space-16);\n font-size: 13px;\n line-height: 1;\n display: flex;\n align-items: center;\n cursor: pointer;\n background: transparent;\n border: 0;\n color: var(--g-ui-text);\n margin-bottom: calc(0px - var(--g-ui-space-2));\n}\n.g-ui-tabs-panel { padding-top: var(--g-ui-space-12); }\n.g-ui-tabs-variant-default .g-ui-tabs-list {\n border-bottom: 2px solid var(--g-ui-border-muted);\n}\n.g-ui-tabs-variant-default .g-ui-tabs-tab {\n border-bottom: 2px solid var(--g-ui-border-muted);\n border-radius: 4px 4px 0 0;\n}\n.g-ui-tabs-variant-default .g-ui-tabs-tab:hover {\n background: var(--g-ui-bg-muted);\n}\n.g-ui-tabs-variant-default .g-ui-tabs-tab-active {\n border-color: var(--g-ui-primary);\n color: var(--g-ui-primary);\n}\n.g-ui-tabs-variant-outline .g-ui-tabs-list {\n border-bottom: 1px solid var(--g-ui-border-muted);\n}\n.g-ui-tabs-variant-outline .g-ui-tabs-tab {\n border: 1px solid transparent;\n border-bottom: 0;\n border-radius: 8px 8px 0 0;\n}\n.g-ui-tabs-variant-outline .g-ui-tabs-tab-active {\n border-color: var(--g-ui-border);\n background: var(--g-ui-bg);\n color: var(--g-ui-primary);\n}\n.g-ui-tabs-variant-pills .g-ui-tabs-list {\n gap: var(--g-ui-space-8);\n}\n.g-ui-tabs-variant-pills .g-ui-tabs-tab {\n border-radius: 8px;\n background: transparent;\n}\n.g-ui-tabs-variant-pills .g-ui-tabs-tab:hover {\n background: var(--g-ui-bg-muted);\n}\n.g-ui-tabs-variant-pills .g-ui-tabs-tab-active {\n background: var(--g-ui-primary);\n color: var(--g-ui-primary-fg);\n}\n\n.g-ui-table {\n width: 100%;\n border-collapse: collapse;\n color: var(--g-ui-text);\n font-size: 13px;\n}\n.g-ui-table-with-border {\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n overflow: hidden;\n}\n.g-ui-table th,\n.g-ui-table td {\n border-bottom: 1px solid var(--g-ui-border-muted);\n padding: var(--g-ui-space-10) var(--g-ui-space-12);\n text-align: left;\n}\n.g-ui-table th {\n font-weight: 500;\n color: var(--g-ui-muted);\n}\n.g-ui-table-column-borders th,\n.g-ui-table-column-borders td {\n border-right: 1px solid var(--g-ui-border);\n}\n.g-ui-table-column-borders th:last-child,\n.g-ui-table-column-borders td:last-child {\n border-right: 0;\n}\n.g-ui-table-striped tbody tr:nth-child(odd) { background: var(--g-ui-bg-subtle); }\n.g-ui-table-hover tbody tr:hover { background: var(--g-ui-bg-muted); }\n\n.g-ui-accordion {\n width: calc(100%);\n display: flex; \n flex-direction: column; \n border-bottom: 1px solid var(--g-ui-border);\n}\n.g-ui-accordion-header {\n box-sizing: border-box;\n padding: var(--g-ui-space-12) var(--g-ui-space-15);\n font-size: 14px;\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n justify-content: flex-start;\n cursor: pointer;\n}\n.g-ui-accordion-content {\n padding: var(--g-ui-space-12);\n}\n\n.g-ui-tooltip {\n position: relative;\n display: inline-flex;\n}\n.g-ui-tooltip-content {\n position: absolute;\n bottom: calc(100% + var(--g-ui-space-8));\n left: 50%;\n transform: translateX(-50%);\n background: var(--g-ui-gray-900);\n color: var(--g-ui-gray-50);\n border: 0;\n padding: var(--g-ui-space-6) var(--g-ui-space-10);\n border-radius: 6px;\n font-size: 12px;\n white-space: nowrap;\n opacity: 0;\n pointer-events: none;\n transition: opacity .12s ease, transform .12s ease;\n}\n.g-ui-tooltip:hover .g-ui-tooltip-content {\n opacity: 1;\n transform: translateX(-50%) translateY(-2px);\n}\n\n.g-ui-menu {\n position: relative;\n display: inline-flex;\n}\n.g-ui-menu-dropdown {\n position: fixed;\n right: 0;\n width:10px;\n min-width: 180px;\n background: var(--g-ui-surface);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n box-shadow: var(--g-ui-shadow-sm);\n padding: var(--g-ui-space-4);\n z-index: 10000;\n}\n.g-ui-menu-left { left: 0; right: auto; }\n.g-ui-menu-center { left: 50%; right: auto; transform: translateX(-50%); }\n.g-ui-menu-right { right: 0; left: auto; }\n.g-ui-menu-item {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n padding: var(--g-ui-space-6) var(--g-ui-space-12);\n border-radius: 8px;\n cursor: pointer;\n color: var(--g-ui-text);\n font-size: 13px;\n}\n.g-ui-menu-item:hover { background: var(--g-ui-bg-subtle); }\n\n.g-ui-menu-overlay {\n position: fixed;\n top:0;\n left:0;\n right:0;\n bottom:0;\n inset: 0;\n z-index: 9999;\n}\n\n.g-ui-drawer-overlay {\n position: fixed;\n inset: 0;\n z-index: 998;\n}\n.g-ui-drawer-overlay-normal { background: rgba(0,0,0,0.6); }\n.g-ui-drawer-overlay-light { background: rgba(0,0,0,0.4); }\n.g-ui-drawer-overlay-dark { background: rgba(0,0,0,0.8); }\n.g-ui-drawer {\n position: fixed;\n top: 0;\n bottom: 0;\n width: 320px;\n background: var(--g-ui-bg);\n border-left: 1px solid var(--g-ui-border-muted);\n box-shadow: var(--g-ui-shadow-lg);\n z-index: 999;\n padding: var(--g-ui-space-16);\n}\n.g-ui-drawer-right { right: 0; }\n.g-ui-drawer-left { left: 0; border-left: 0; border-right: 1px solid var(--g-ui-border-muted); }\n.g-ui-drawer-size-sm { width: 380px; }\n.g-ui-drawer-size-md { width: 440px; }\n.g-ui-drawer-size-lg { width: 620px; }\n.g-ui-drawer-size-xl { width: 780px; }\n\n.g-ui-notification {\n border-radius: var(--g-ui-radius);\n padding: var(--g-ui-space-10) var(--g-ui-space-12) var(--g-ui-space-10) var(--g-ui-space-22);\n background: var(--g-ui-surface);\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n box-shadow: var(--g-ui-shadow-lg);\n position: relative;\n overflow: hidden;\n}\n.g-ui-notification-bordered {\n border: 1px solid var(--g-ui-border);\n}\n.g-ui-notification::before {\n content: '';\n position: absolute;\n left: 4px;\n top: 4px;\n bottom: 4px;\n width: 6px;\n border-radius: 999px;\n background: var(--g-ui-primary);\n}\n.g-ui-notification-with-icon::before {\n display: none;\n}\n.g-ui-notification-body {\n flex: 1;\n overflow: hidden;\n}\n.g-ui-notification-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 999px;\n background: var(--g-ui-primary);\n color: var(--g-ui-primary-fg);\n}\n.g-ui-notification-loader { margin-right: var(--g-ui-space-8); }\n.g-ui-notification-close {\n margin-left: auto;\n border: 0;\n background: transparent;\n color: var(--g-ui-muted);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n}\n.g-ui-notification-close span {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n}\n.g-ui-notification-close svg{\n width: 24px;\n height: 24px;\n}\n\n.g-ui-notification-title { font-weight: 500; font-size: 13px; line-height: 1.35; }\n.g-ui-notification-primary::before { background: var(--g-ui-primary); }\n.g-ui-notification-blue::before { background: var(--g-ui-blue-500); }\n.g-ui-notification-success::before { background: var(--g-ui-success); }\n.g-ui-notification-danger::before { background: var(--g-ui-danger); }\n.g-ui-notification-primary .g-ui-notification-icon { background: var(--g-ui-primary); }\n.g-ui-notification-blue .g-ui-notification-icon { background: var(--g-ui-blue-500); }\n.g-ui-notification-success .g-ui-notification-icon { background: var(--g-ui-success); }\n.g-ui-notification-danger .g-ui-notification-icon { background: var(--g-ui-danger); }\n\n.g-ui-divider {\n width: 100%;\n border: 0;\n height: 1px;\n background: var(--g-ui-border);\n margin-top: var(--g-ui-space-9);\n margin-bottom: var(--g-ui-space-9);\n}\n.g-ui-divider-size-xs { height: 1px; }\n.g-ui-divider-size-sm { height: 2px; }\n.g-ui-divider-size-md { height: 3px; }\n.g-ui-divider-size-lg { height: 4px; }\n.g-ui-divider-size-xl { height: 5px; }\n.g-ui-divider.label {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-10);\n color: var(--g-ui-muted);\n font-size: 12px;\n background: transparent;\n}\n.g-ui-divider.label::before,\n.g-ui-divider.label::after {\n content: '';\n height: 1px;\n flex: 1;\n background: var(--g-ui-border);\n}\n.g-ui-divider-label-left.label::before { flex: 0 0 12px; }\n.g-ui-divider-label-right.label::after { flex: 0 0 12px; }\n.g-ui-divider-label-text {\n color: var(--g-ui-muted);\n font-size: 12px;\n padding: 0 var(--g-ui-space-10);\n position: relative;\n z-index: 1;\n}\n.g-ui-divider-vertical {\n width: 1px;\n height: 100%;\n background: var(--g-ui-border);\n margin: 0 var(--g-ui-space-10);\n}\n\n.g-ui-paper {\n background: var(--g-ui-surface);\n border: 0;\n border-radius: 10px;\n}\n\n.g-ui-textarea {\n min-height: 120px;\n resize: vertical;\n padding: var(--g-ui-space-8) 0;\n height: auto;\n}\n.g-ui-input-multiline {\n align-items: stretch;\n padding: 0 var(--g-ui-space-12);\n height: auto;\n}\n.g-ui-input-multiline .g-ui-input {\n padding: var(--g-ui-space-8) 0;\n height: auto;\n}\n.g-ui-number-field {\n width: 100%;\n}\n.g-ui-number-field-controls {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-2);\n margin-left: auto;\n}\n.g-ui-number-field-control {\n width: 18px;\n height: 18px;\n border-radius: 6px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--g-ui-border);\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n cursor: pointer;\n user-select: none;\n font-size: 12px;\n line-height: 1;\n}\n.g-ui-number-field-control:hover {\n background: var(--g-ui-bg-subtle);\n}\n\n.g-ui-alert {\n border-radius: var(--g-ui-radius);\n border: 1px solid transparent;\n padding: var(--g-ui-space-16);\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-primary);\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-6);\n}\n.g-ui-alert-header {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n}\n.g-ui-alert-icon {\n display: inline-flex;\n align-items: center;\n width: 20px;\n height: 20px;\n margin-right: var(--g-ui-space-8);\n}\n.g-ui-alert-close {\n margin-left: auto;\n border: 0;\n background: transparent;\n color: var(--g-ui-muted);\n cursor: pointer;\n}\n.g-ui-alert-title { font-weight: 700; }\n.g-ui-alert-primary { background: var(--g-ui-primary-subtle); color: var(--g-ui-primary); border-color: transparent; }\n.g-ui-alert-blue { background: var(--g-ui-blue-subtle); color: var(--g-ui-blue-fg); border-color: transparent; }\n.g-ui-alert-success { background: var(--g-ui-green-subtle); color: var(--g-ui-green-fg); border-color: transparent; }\n.g-ui-alert-danger { background: var(--g-ui-red-subtle); color: var(--g-ui-red-fg); border-color: transparent; }\n.g-ui-alert-warning { background: var(--g-ui-orange-subtle); color: var(--g-ui-orange-fg); border-color: transparent; }\n\n.g-ui-avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n background: var(--g-ui-bg-muted);\n color: var(--g-ui-text);\n overflow: hidden;\n border: 1px solid var(--g-ui-border);\n font-weight: 600;\n}\n.g-ui-avatar-size-xs { width: 16px; height: 16px; font-size: 8px; }\n.g-ui-avatar-size-sm { width: 26px; height: 26px; font-size: 10px; }\n.g-ui-avatar-size-md { width: 38px; height: 38px; font-size: 13px; }\n.g-ui-avatar-size-lg { width: 56px; height: 56px; font-size: 18px; }\n.g-ui-avatar-size-xl { width: 84px; height: 84px; font-size: 24px; }\n\n.g-ui-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n line-height: 1;\n}\n.g-ui-icon-size-xs { font-size: 14px; }\n.g-ui-icon-size-sm { font-size: 18px; }\n.g-ui-icon-size-md { font-size: 22px; }\n.g-ui-icon-size-lg { font-size: 28px; }\n.g-ui-icon-size-xl { font-size: 36px; }\n.g-ui-icon-color-primary { color: var(--g-ui-primary); }\n.g-ui-icon-color-success { color: var(--g-ui-green-500); }\n.g-ui-icon-color-warning { color: var(--g-ui-yellow-500); }\n.g-ui-icon-color-error { color: var(--g-ui-red-500); }\n.g-ui-icon-color-muted { color: var(--g-ui-fg-muted); }\n.g-ui-avatar-img { width: 100%; height: 100%; object-fit: cover; }\n\n.g-ui-kbd {\n display: inline-flex;\n align-items: center;\n padding: var(--g-ui-space-2) var(--g-ui-space-6);\n border-radius: 6px;\n border: 1px solid var(--g-ui-border-muted);\n border-bottom-width: 3px;\n background: var(--g-ui-bg-muted);\n font-size: 12px;\n color: var(--g-ui-text);\n}\n\n.g-ui-code {\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n background: var(--g-ui-bg-muted);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n padding: var(--g-ui-space-2) var(--g-ui-space-6);\n font-size: 11px;\n color: var(--g-ui-text);\n}\n\n.g-ui-blockquote {\n border-left: 5px solid var(--g-ui-primary);\n padding: var(--g-ui-space-24) var(--g-ui-space-38);\n background: var(--g-ui-bg-muted);\n color: var(--g-ui-text);\n border-radius: 4px;\n}\n\n.g-ui-grid {\n display: grid;\n}\n.g-ui-grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }\n.g-ui-grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n.g-ui-grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n.g-ui-grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }\n.g-ui-grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }\n.g-ui-grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }\n\n.g-ui-list {\n margin: 0;\n color: var(--g-ui-text);\n list-style: none;\n padding-left: 0;\n}\n.g-ui-list-item {\n list-style: none;\n padding: var(--g-ui-space-6) 0;\n}\n.g-ui-list-item-border {\n border-bottom: 1px solid var(--g-ui-border-muted);\n}\n.g-ui-list-item-section {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n.g-ui-list-item-shell {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-10);\n grid-column: 2;\n flex-wrap: wrap;\n}\n.g-ui-list-item-content {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-2);\n flex: 1;\n}\n.g-ui-list-item-title {\n font-weight: 600;\n}\n.g-ui-list-item-body {\n color: var(--g-ui-muted);\n}\n.g-ui-list-unordered { padding-left: 0; }\n.g-ui-list-ordered { padding-left: 0; counter-reset: g-ui-list; }\n.g-ui-list-none { padding-left: 0; }\n.g-ui-list-unordered > li,\n.g-ui-list-ordered > li {\n display: grid;\n grid-template-columns: max-content 1fr;\n column-gap: var(--g-ui-space-8);\n align-items: center;\n}\n.g-ui-list-ordered > li:not(.g-ui-list-nested-item) { counter-increment: g-ui-list; }\n.g-ui-list-unordered > li:not(.g-ui-list-nested-item)::before,\n.g-ui-list-ordered > li:not(.g-ui-list-nested-item)::before {\n grid-column: 1;\n align-self: flex-start;\n justify-self: end;\n color: currentColor;\n}\n.g-ui-list-unordered > li:not(.g-ui-list-nested-item)::before {\n content: '\u2022';\n}\n.g-ui-list-ordered > li:not(.g-ui-list-nested-item)::before {\n content: counters(g-ui-list, '.') '.';\n}\n.g-ui-list-nested-item {\n list-style: none;\n padding-left: 0;\n grid-template-columns: 1fr;\n column-gap: 0;\n}\n.g-ui-list-nested-item::before {\n content: none;\n}\n.g-ui-list-unordered > li > :not(.g-ui-list-item-shell),\n.g-ui-list-ordered > li > :not(.g-ui-list-item-shell) {\n grid-column: 2;\n}\n.g-ui-list > li > .g-ui-list {\n grid-column: 2;\n margin-top: var(--g-ui-space-6);\n}\n.g-ui-list-item-shell > .g-ui-list {\n flex-basis: 100%;\n margin-left: 0;\n}\n.g-ui-list .g-ui-list {\n margin-left: var(--g-ui-space-12);\n}\n.g-ui-list .g-ui-list-unordered,\n.g-ui-list .g-ui-list-ordered {\n padding-left: 0;\n}\n.g-ui-list-with-padding { padding-left: var(--g-ui-space-36); }\n.g-ui-list-size-xs { font-size: 12px; line-height: 1.4; }\n.g-ui-list-size-sm { font-size: 13px; line-height: 1.45; }\n.g-ui-list-size-md { font-size: 14px; line-height: 1.5; }\n.g-ui-list-size-lg { font-size: 16px; line-height: 1.6; }\n.g-ui-list-size-xl { font-size: 18px; line-height: 1.65; }\n\n.g-ui-anchor {\n color: var(--g-ui-primary);\n text-decoration: none;\n}\n.g-ui-anchor:hover { text-decoration: underline; }\n\n.g-ui-image {\n max-width: 100%;\n border-radius: var(--g-ui-radius);\n}\n\n.g-ui-progress {\n width: 100%;\n height: 8px;\n border-radius: 999px;\n background: var(--g-ui-bg-muted);\n border: 0;\n overflow: hidden;\n}\n.g-ui-progress-bar {\n height: 100%;\n background: var(--g-ui-primary);\n}\n.g-ui-progress-size-xs { height: 3px; }\n.g-ui-progress-size-sm { height: 5px; }\n.g-ui-progress-size-md { height: 8px; }\n.g-ui-progress-size-lg { height: 12px; }\n.g-ui-progress-size-xl { height: 16px; }\n.g-ui-progress-0 .g-ui-progress-bar { width: 0%; }\n.g-ui-progress-5 .g-ui-progress-bar { width: 5%; }\n.g-ui-progress-10 .g-ui-progress-bar { width: 10%; }\n.g-ui-progress-15 .g-ui-progress-bar { width: 15%; }\n.g-ui-progress-20 .g-ui-progress-bar { width: 20%; }\n.g-ui-progress-25 .g-ui-progress-bar { width: 25%; }\n.g-ui-progress-30 .g-ui-progress-bar { width: 30%; }\n.g-ui-progress-35 .g-ui-progress-bar { width: 35%; }\n.g-ui-progress-40 .g-ui-progress-bar { width: 40%; }\n.g-ui-progress-45 .g-ui-progress-bar { width: 45%; }\n.g-ui-progress-50 .g-ui-progress-bar { width: 50%; }\n.g-ui-progress-55 .g-ui-progress-bar { width: 55%; }\n.g-ui-progress-60 .g-ui-progress-bar { width: 60%; }\n.g-ui-progress-65 .g-ui-progress-bar { width: 65%; }\n.g-ui-progress-70 .g-ui-progress-bar { width: 70%; }\n.g-ui-progress-75 .g-ui-progress-bar { width: 75%; }\n.g-ui-progress-80 .g-ui-progress-bar { width: 80%; }\n.g-ui-progress-85 .g-ui-progress-bar { width: 85%; }\n.g-ui-progress-90 .g-ui-progress-bar { width: 90%; }\n.g-ui-progress-95 .g-ui-progress-bar { width: 95%; }\n.g-ui-progress-100 .g-ui-progress-bar { width: 100%; }\n.g-ui-progress-success .g-ui-progress-bar { background: var(--g-ui-success); }\n.g-ui-progress-danger .g-ui-progress-bar { background: var(--g-ui-danger); }\n\n.g-ui-slider {\n width: 100%;\n --g-ui-slider-size: 8px;\n height: calc(var(--g-ui-slider-size) * 2);\n padding: 0 var(--g-ui-slider-size);\n display: flex;\n align-items: center;\n position: relative;\n}\n.g-ui-range-slider {\n width: 100%;\n --g-ui-slider-size: 8px;\n height: calc(var(--g-ui-slider-size) * 2);\n padding: 0 var(--g-ui-slider-size);\n display: flex;\n align-items: center;\n position: relative;\n}\n.g-ui-slider-track {\n position: relative;\n width: 100%;\n height: var(--g-ui-slider-size);\n border-radius: 999px;\n background: var(--g-ui-bg-emphasized);\n}\n.g-ui-slider-bar {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n background: var(--g-ui-primary);\n border-radius: 999px;\n}\n.g-ui-slider-thumb {\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n width: calc(var(--g-ui-slider-size) * 2);\n height: calc(var(--g-ui-slider-size) * 2);\n border-radius: 50%;\n background: var(--g-ui-surface);\n border: 4px solid var(--g-ui-primary);\n cursor: pointer;\n}\n.g-ui-slider-marks {\n position: absolute;\n top: calc(100% + var(--g-ui-space-10));\n left:10px;\n right:15px;\n height: 18px;\n box-sizing: border-box;\n padding: 0 var(--g-ui-slider-size);\n}\n.g-ui-slider-mark {\n position: absolute;\n top: 0;\n transform: translateX(-50%);\n}\n.g-ui-slider-mark-label {\n font-size: 11px;\n color: var(--g-ui-muted);\n}\n\n.g-ui-slider-disabled .g-ui-slider-track { background: var(--g-ui-border); }\n.g-ui-slider-disabled .g-ui-slider-bar { background: var(--g-ui-border-emphasized); }\n.g-ui-slider-disabled .g-ui-slider-thumb { cursor: not-allowed; opacity: 0.6; }\n.g-ui-slider-size-xs { --g-ui-slider-size: 4px; }\n.g-ui-slider-size-sm { --g-ui-slider-size: 6px; }\n.g-ui-slider-size-md { --g-ui-slider-size: 8px; }\n.g-ui-slider-size-lg { --g-ui-slider-size: 10px; }\n.g-ui-slider-size-xl { --g-ui-slider-size: 12px; }\n\n.g-ui-skeleton {\n background: var(--g-ui-border-muted);\n animation: g-ui-skeleton-fade 1.5s ease-in-out infinite;\n border-radius: 4px;\n}\n@keyframes g-ui-skeleton-fade { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }\n\n.g-ui-chip {\n display: inline-flex;\n align-items: center;\n border: 1px solid transparent;\n border-radius: 999px;\n cursor: pointer;\n background: transparent;\n color: var(--g-ui-text);\n}\n.g-ui-chip-active {\n background: var(--g-ui-primary);\n border-color: transparent;\n color: var(--g-ui-primary-fg);\n}\n.g-ui-chip-size-xs { font-size: 12px; height: 20px; padding: 0 var(--g-ui-space-6); }\n.g-ui-chip-size-sm { font-size: 13px; height: 21px; padding: 0 var(--g-ui-space-5); }\n.g-ui-chip-size-md { font-size: 14px; height: 22px; padding: 0 var(--g-ui-space-6); }\n.g-ui-chip-size-lg { font-size: 15px; height: 23px; padding: 0 var(--g-ui-space-7); }\n.g-ui-chip-size-xl { font-size: 16px; height: 24px; padding: 0 var(--g-ui-space-8); }\n.g-ui-chip-variant-filled { background: var(--g-ui-bg-muted); color: var(--g-ui-text); border-color: transparent; }\n.g-ui-chip-variant-light { background: var(--g-ui-bg-muted); color: var(--g-ui-text); border-color: transparent; }\n.g-ui-chip-variant-outline { background: var(--g-ui-surface); color: var(--g-ui-text); border-color: var(--g-ui-border); }\n.g-ui-chip-variant-filled.g-ui-chip-active,\n.g-ui-chip-variant-light.g-ui-chip-active,\n.g-ui-chip-variant-outline.g-ui-chip-active {\n background: var(--g-ui-primary);\n border-color: transparent;\n color: var(--g-ui-primary-fg);\n}\n\n.g-ui-segmented {\n display: inline-flex;\n border-radius: 10px;\n overflow: hidden;\n padding: var(--g-ui-space-4);\n background: var(--g-ui-bg-muted);\n}\n.g-ui-segmented-item {\n padding: var(--g-ui-space-4) var(--g-ui-space-14);\n cursor: pointer;\n background: transparent;\n color: var(--g-ui-text);\n border-radius: 8px;\n}\n.g-ui-segmented-active {\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n}\n.g-ui-segmented-size-xs .g-ui-segmented-item { padding: var(--g-ui-space-2) var(--g-ui-space-6); font-size: 12px; }\n.g-ui-segmented-size-sm .g-ui-segmented-item { padding: var(--g-ui-space-3) var(--g-ui-space-10); font-size: 13px; }\n.g-ui-segmented-size-md .g-ui-segmented-item { padding: var(--g-ui-space-4) var(--g-ui-space-14); font-size: 14px; }\n.g-ui-segmented-size-lg .g-ui-segmented-item { padding: var(--g-ui-space-7) var(--g-ui-space-16); font-size: 15px; }\n.g-ui-segmented-size-xl .g-ui-segmented-item { padding: var(--g-ui-space-10) var(--g-ui-space-20); font-size: 16px; }\n\n.g-ui-pagination {\n display: inline-flex;\n gap: var(--g-ui-space-6);\n align-items: center;\n}\n.g-ui-pagination-item {\n min-width: 32px;\n height: 32px;\n border-radius: 8px;\n border: 1px solid var(--g-ui-border-muted);\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n cursor: pointer;\n font-size: 14px;\n}\n.g-ui-pagination-item-active {\n background: var(--g-ui-primary);\n border-color: var(--g-ui-primary);\n color: var(--g-ui-primary-fg);\n}\n.g-ui-pagination-item.g-ui-pagination-item-active:hover{\n background: var(--g-ui-primary-hover);\n border-color: var(--g-ui-primary-hover);\n color: var(--g-ui-primary-fg);\n}\n.g-ui-pagination-item:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-pagination-size-xs .g-ui-pagination-item { min-width: 22px; height: 22px; font-size: 12px; }\n.g-ui-pagination-size-sm .g-ui-pagination-item { min-width: 26px; height: 26px; font-size: 12px; }\n.g-ui-pagination-size-md .g-ui-pagination-item { min-width: 32px; height: 32px; font-size: 14px; }\n.g-ui-pagination-size-lg .g-ui-pagination-item { min-width: 38px; height: 38px; font-size: 15px; }\n.g-ui-pagination-size-xl .g-ui-pagination-item { min-width: 44px; height: 44px; font-size: 16px; }\n\n.g-ui-timeline {\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.g-ui-timeline-item {\n display: grid;\n grid-template-columns: 28px 1fr;\n gap: var(--g-ui-space-16);\n align-items: start;\n position: relative;\n padding-bottom: var(--g-ui-space-24);\n}\n.g-ui-timeline-item:last-child {\n padding-bottom: 0;\n}\n.g-ui-timeline-item::before {\n content: '';\n position: absolute;\n left: 8px;\n top: 20px;\n bottom: 0;\n width: 4px;\n background: var(--g-ui-border-muted);\n}\n.g-ui-timeline-item:last-child::before {\n display: none;\n}\n.g-ui-timeline-dot {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--g-ui-bg);\n border: 4px solid var(--g-ui-primary);\n margin-top: 0;\n position: relative;\n z-index: 1;\n}\n.g-ui-timeline-content {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-4);\n}\n.g-ui-timeline-title { font-weight: 600; }\n.g-ui-timeline-desc { color: var(--g-ui-muted); font-size: 13px; }\n\n.g-ui-stepper {\n display: flex;\n gap: var(--g-ui-space-12);\n align-items: center;\n}\n.g-ui-stepper-item {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n}\n.g-ui-stepper-index {\n width: 42px;\n height: 42px;\n border-radius: 50%;\n border: 1px solid var(--g-ui-border-muted);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n font-weight: 600;\n background: var(--g-ui-bg);\n}\n.g-ui-stepper-active .g-ui-stepper-index {\n background: var(--g-ui-primary-subtle);\n border-color: var(--g-ui-primary);\n color: var(--g-ui-primary);\n}\n.g-ui-stepper-label { font-size: 14px; font-weight: 500; }\n\n.g-ui-rating {\n display: inline-flex;\n gap: var(--g-ui-space-2);\n}\n.g-ui-rating-item {\n cursor: pointer;\n color: var(--g-ui-border);\n}\n.g-ui-rating-item-active {\n color: var(--g-ui-primary);\n}\n.g-ui-rating-size-xs { font-size: 14px; }\n.g-ui-rating-size-sm { font-size: 18px; }\n.g-ui-rating-size-md { font-size: 20px; }\n.g-ui-rating-size-lg { font-size: 28px; }\n.g-ui-rating-size-xl { font-size: 32px; }\n\n.g-ui-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: 999px;\n padding: var(--g-ui-space-4) var(--g-ui-space-10);\n font-size: 12px;\n color: var(--g-ui-text);\n background: var(--g-ui-bg);\n}\n\n\n.g-ui-calendar {\n width: 100%;\n border: 1px solid var(--g-ui-border);\n border-radius: var(--g-ui-radius);\n background: var(--g-ui-bg);\n padding: var(--g-ui-space-12);\n}\n.g-ui-calendar-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--g-ui-space-10);\n}\n.g-ui-calendar-title-group {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n}\n.g-ui-calendar-title-button {\n border: 0;\n background: transparent;\n padding: var(--g-ui-space-2) var(--g-ui-space-6);\n border-radius: 6px;\n font-weight: 500;\n font-size: 14px;\n color: var(--g-ui-text);\n cursor: pointer;\n}\n.g-ui-calendar-title-button:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-calendar-title {\n font-weight: 500;\n font-size: 14px;\n}\n.g-ui-calendar-nav-icon svg {\n width: 14px;\n height: 14px;\n fill: currentColor;\n}\n\n\n.g-ui-calendar-size-xs { width: 220px; }\n.g-ui-calendar-size-sm { width: 260px; }\n.g-ui-calendar-size-md { width: 300px; }\n.g-ui-calendar-size-lg { width: 370px; }\n.g-ui-calendar-size-xl { width: 420px; }\n\n.g-ui-calendar-size-xs .g-ui-calendar-grid { gap: var(--g-ui-space-2); }\n.g-ui-calendar-size-sm .g-ui-calendar-grid { gap: var(--g-ui-space-4); }\n.g-ui-calendar-size-md .g-ui-calendar-grid { gap: var(--g-ui-space-6); }\n.g-ui-calendar-size-lg .g-ui-calendar-grid { gap: var(--g-ui-space-8); }\n.g-ui-calendar-size-xl .g-ui-calendar-grid { gap: var(--g-ui-space-10); }\n\n.g-ui-calendar-size-xs .g-ui-calendar-cell { width: 26px; height: 26px; font-size: 12px; }\n.g-ui-calendar-size-sm .g-ui-calendar-cell { width: 30px; height: 30px; font-size: 13px; }\n.g-ui-calendar-size-md .g-ui-calendar-cell { width: 34px; height: 34px; font-size: 14px; }\n.g-ui-calendar-size-lg .g-ui-calendar-cell { width: 42px; height: 34px; font-size: 16px; }\n.g-ui-calendar-size-xl .g-ui-calendar-cell { width: 48px; height: 38px; font-size: 18px; }\n\n\n.g-ui-calendar-grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: var(--g-ui-space-6);\n}\n.g-ui-calendar-cell {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--g-ui-text);\n}\n.g-ui-calendar-cell:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-calendar-cell-muted {\n color: var(--g-ui-muted);\n}\n.g-ui-calendar-cell-active,\n.g-ui-calendar-cell-active:hover {\n background: var(--g-ui-primary);\n color: var(--g-ui-primary-fg);\n}\n\n/* EventCalendar */\n.g-ui-event-calendar {\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: 480px;\n background: var(--g-ui-bg);\n border: 1px solid var(--g-ui-border);\n border-radius: var(--g-ui-radius);\n overflow: hidden;\n}\n.g-ui-event-calendar-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: var(--g-ui-space-10);\n padding: var(--g-ui-space-12) var(--g-ui-space-16);\n border-bottom: 1px solid var(--g-ui-border);\n background: var(--g-ui-bg);\n}\n.g-ui-event-calendar-nav-group {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-4);\n}\n.g-ui-event-calendar-nav {\n border-radius: 8px;\n}\n.g-ui-event-calendar-today {\n margin-left: var(--g-ui-space-8);\n}\n.g-ui-event-calendar-today-icon {\n margin-right: var(--g-ui-space-6);\n}\n.g-ui-event-calendar-title {\n font-weight: 600;\n font-size: 18px;\n color: var(--g-ui-text);\n min-width: 200px;\n text-align: center;\n}\n.g-ui-event-calendar-actions {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n}\n.g-ui-event-calendar-view-option {\n padding: var(--g-ui-space-6) var(--g-ui-space-12);\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--g-ui-text);\n cursor: pointer;\n background: transparent;\n border: 1px solid transparent;\n}\n.g-ui-event-calendar-view-option:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-event-calendar-view-option-active {\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-primary);\n}\n.g-ui-event-calendar-create-btn {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n}\n.g-ui-event-calendar-month {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.g-ui-event-calendar-weekdays {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n padding: var(--g-ui-space-8) var(--g-ui-space-16);\n border-bottom: 1px solid var(--g-ui-border);\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.02em;\n color: var(--g-ui-muted);\n}\n.g-ui-event-calendar-weekday {\n text-align: center;\n}\n.g-ui-event-calendar-month-grid {\n flex: 1;\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n grid-auto-rows: minmax(100px, 1fr);\n gap: 1px;\n padding: var(--g-ui-space-8);\n background: var(--g-ui-border);\n overflow: auto;\n}\n.g-ui-event-calendar-month-cell {\n background: var(--g-ui-bg);\n min-height: 100px;\n display: flex;\n flex-direction: column;\n padding: var(--g-ui-space-4);\n}\n.g-ui-event-calendar-month-cell-outside {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-event-calendar-month-cell-today {\n background: var(--g-ui-primary-subtle);\n}\n.g-ui-event-calendar-month-cell-header {\n flex-shrink: 0;\n font-size: 13px;\n font-weight: 500;\n color: var(--g-ui-text);\n cursor: pointer;\n padding: var(--g-ui-space-2) 0;\n border-radius: 4px;\n margin: -2px 0;\n}\n.g-ui-event-calendar-month-cell-header:hover {\n background: var(--g-ui-bg-muted);\n}\n.g-ui-event-calendar-month-cell-events {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-height: 0;\n overflow: hidden;\n}\n.g-ui-event-calendar-month-event {\n font-size: 12px;\n padding: 2px 6px;\n border-radius: 4px;\n border-left: 3px solid var(--g-ui-primary);\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-text);\n cursor: pointer;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.g-ui-event-calendar-month-event:hover {\n opacity: 0.9;\n}\n.g-ui-event-calendar-month-more {\n font-size: 11px;\n color: var(--g-ui-primary);\n cursor: pointer;\n padding: 2px 4px;\n margin-top: 2px;\n}\n.g-ui-event-calendar-month-more:hover {\n text-decoration: underline;\n}\n.g-ui-event-calendar-week {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: auto;\n}\n.g-ui-event-calendar-week-days {\n display: grid;\n grid-template-columns: 60px repeat(7, 1fr);\n border-bottom: 1px solid var(--g-ui-border);\n background: var(--g-ui-bg);\n}\n.g-ui-event-calendar-week-day-col {\n padding: var(--g-ui-space-8);\n text-align: center;\n font-size: 12px;\n font-weight: 500;\n color: var(--g-ui-text);\n}\n.g-ui-event-calendar-week-time-col {\n width: 60px;\n flex-shrink: 0;\n font-size: 11px;\n color: var(--g-ui-muted);\n padding: var(--g-ui-space-4);\n}\n.g-ui-event-calendar-week-body {\n display: flex;\n flex: 1;\n min-height: 400px;\n}\n.g-ui-event-calendar-week-body .g-ui-event-calendar-week-time-col {\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.g-ui-event-calendar-week-slot-label {\n height: 48px;\n font-size: 10px;\n color: var(--g-ui-muted);\n display: flex;\n align-items: flex-start;\n padding-top: 2px;\n}\n.g-ui-event-calendar-week-grid-cols {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n flex: 1;\n position: relative;\n border-left: 1px solid var(--g-ui-border);\n}\n.g-ui-event-calendar-week-day-col-body {\n position: relative;\n display: flex;\n flex-direction: column;\n border-right: 1px solid var(--g-ui-border);\n}\n.g-ui-event-calendar-week-slot {\n height: 48px;\n border-bottom: 1px solid var(--g-ui-border-muted);\n cursor: pointer;\n}\n.g-ui-event-calendar-week-slot:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-event-calendar-week-event {\n position: absolute;\n left: 2px;\n right: 2px;\n border-left: 3px solid var(--g-ui-primary);\n background: var(--g-ui-primary-subtle);\n border-radius: 4px;\n padding: 4px 6px;\n overflow: hidden;\n cursor: pointer;\n font-size: 12px;\n color: var(--g-ui-text);\n pointer-events: auto;\n}\n.g-ui-event-calendar-week-event:hover {\n opacity: 0.95;\n}\n.g-ui-event-calendar-week-event-title {\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.g-ui-event-calendar-week-event-time {\n font-size: 10px;\n color: var(--g-ui-muted);\n display: block;\n}\n.g-ui-event-calendar-day {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: auto;\n}\n.g-ui-event-calendar-day-body {\n display: flex;\n flex: 1;\n min-height: 400px;\n}\n.g-ui-event-calendar-day-time-col {\n width: 60px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n font-size: 11px;\n color: var(--g-ui-muted);\n padding: var(--g-ui-space-4);\n border-right: 1px solid var(--g-ui-border);\n}\n.g-ui-event-calendar-day-slot-label {\n height: 48px;\n display: flex;\n align-items: flex-start;\n padding-top: 2px;\n}\n.g-ui-event-calendar-day-slots {\n flex: 1;\n position: relative;\n border-left: 1px solid var(--g-ui-border);\n}\n.g-ui-event-calendar-day-slot {\n height: 48px;\n border-bottom: 1px solid var(--g-ui-border-muted);\n cursor: pointer;\n}\n.g-ui-event-calendar-day-slot:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-event-calendar-day-event {\n position: absolute;\n left: 4px;\n right: 4px;\n border-left: 3px solid var(--g-ui-primary);\n background: var(--g-ui-primary-subtle);\n border-radius: 4px;\n padding: 6px 8px;\n overflow: hidden;\n cursor: pointer;\n font-size: 13px;\n color: var(--g-ui-text);\n}\n.g-ui-event-calendar-day-event:hover {\n opacity: 0.95;\n}\n.g-ui-event-calendar-day-event-title {\n font-weight: 500;\n}\n.g-ui-event-calendar-day-event-time {\n font-size: 11px;\n color: var(--g-ui-muted);\n display: block;\n}\n.g-ui-event-calendar-form {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-12);\n}\n.g-ui-event-calendar-form-row {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-6);\n}\n.g-ui-event-calendar-form-row-inline {\n flex-direction: row;\n flex-wrap: wrap;\n align-items: flex-end;\n gap: var(--g-ui-space-12);\n}\n.g-ui-event-calendar-form-field {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-4);\n min-width: 140px;\n}\n.g-ui-event-calendar-form-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--g-ui-text);\n}\n.g-ui-event-calendar-form-actions {\n display: flex;\n justify-content: flex-end;\n gap: var(--g-ui-space-10);\n margin-top: var(--g-ui-space-8);\n padding-top: var(--g-ui-space-12);\n border-top: 1px solid var(--g-ui-border);\n}\n.g-ui-event-calendar-form-suggestions {\n max-height: 180px;\n overflow-y: auto;\n border: 1px solid var(--g-ui-border);\n border-radius: 8px;\n margin-top: var(--g-ui-space-4);\n background: var(--g-ui-bg);\n}\n.g-ui-event-calendar-form-suggestion-item {\n padding: var(--g-ui-space-10) var(--g-ui-space-12);\n font-size: 14px;\n cursor: pointer;\n border-bottom: 1px solid var(--g-ui-border-muted);\n}\n.g-ui-event-calendar-form-suggestion-item:last-child {\n border-bottom: 0;\n}\n.g-ui-event-calendar-form-suggestion-item:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-event-calendar-form-chips {\n display: flex;\n flex-wrap: wrap;\n gap: var(--g-ui-space-6);\n margin-top: var(--g-ui-space-4);\n}\n.g-ui-event-calendar-form-chip {\n display: inline-flex;\n align-items: center;\n padding: var(--g-ui-space-4) var(--g-ui-space-8);\n border-radius: 6px;\n font-size: 13px;\n background: var(--g-ui-bg-muted);\n color: var(--g-ui-text);\n}\n.g-ui-event-calendar-form-chip-removable {\n cursor: pointer;\n}\n.g-ui-event-calendar-form-chip-removable:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-event-calendar-form-colors {\n display: flex;\n flex-wrap: wrap;\n gap: var(--g-ui-space-6);\n margin-top: var(--g-ui-space-4);\n}\n.g-ui-event-calendar-form-color-swatch {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n cursor: pointer;\n border: 2px solid transparent;\n}\n.g-ui-event-calendar-form-color-swatch:hover {\n transform: scale(1.1);\n}\n.g-ui-event-calendar-form-color-swatch-active {\n border-color: var(--g-ui-text);\n box-shadow: 0 0 0 2px var(--g-ui-bg);\n}\n.g-ui-event-calendar-view-modal {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-12);\n}\n.g-ui-event-calendar-view-modal-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--g-ui-text);\n}\n.g-ui-event-calendar-view-modal-meta {\n font-size: 14px;\n color: var(--g-ui-muted);\n}\n.g-ui-event-calendar-view-modal-date {\n display: block;\n margin-bottom: var(--g-ui-space-4);\n}\n.g-ui-event-calendar-view-modal-field {\n font-size: 14px;\n color: var(--g-ui-text);\n line-height: 1.5;\n}\n.g-ui-event-calendar-view-modal-actions {\n display: flex;\n flex-wrap: wrap;\n gap: var(--g-ui-space-10);\n margin-top: var(--g-ui-space-8);\n padding-top: var(--g-ui-space-12);\n border-top: 1px solid var(--g-ui-border);\n}\n.g-ui-event-calendar-view-modal-delete {\n color: var(--g-ui-danger);\n}\n.g-ui-event-calendar-view-modal-delete:hover {\n background: var(--g-ui-danger-subtle);\n}\n\n.g-ui-select-multi-root {\n position: relative;\n width: 100%;\n}\n.g-ui-select-multi {\n width: 100%;\n border-radius: 8px;\n border: 1px solid var(--g-ui-border);\n background: var(--g-ui-surface);\n color: var(--g-ui-text);\n padding: var(--g-ui-space-10) var(--g-ui-space-12);\n min-height: 44px;\n display: flex;\n flex-wrap: wrap;\n gap: var(--g-ui-space-6);\n align-items: center;\n}\n.g-ui-select-multi-placeholder {\n color: var(--g-ui-muted);\n}\n.g-ui-select-multi-input {\n border: 0;\n background: transparent;\n color: var(--g-ui-text);\n min-width: 120px;\n flex: 1;\n}\n.g-ui-select-multi-input:focus {\n outline: none;\n}\n.g-ui-select-multi-size-xs { font-size: 12px; min-height: 30px; padding: var(--g-ui-space-5) var(--g-ui-space-10); }\n.g-ui-select-multi-size-sm { font-size: 13px; min-height: 36px; padding: var(--g-ui-space-6) var(--g-ui-space-12); }\n.g-ui-select-multi-size-md { font-size: 14px; min-height: 42px; padding: var(--g-ui-space-8) var(--g-ui-space-14); }\n.g-ui-select-multi-size-lg { font-size: 15px; min-height: 50px; padding: var(--g-ui-space-10) var(--g-ui-space-16); }\n.g-ui-select-multi-size-xl { font-size: 16px; min-height: 60px; padding: var(--g-ui-space-13) var(--g-ui-space-20); }\n.g-ui-select-tag {\n border: 1px solid var(--g-ui-border);\n border-radius: 999px;\n padding: var(--g-ui-space-2) var(--g-ui-space-8);\n color: var(--g-ui-text);\n}\n.g-ui-select-multi-size-xs .g-ui-select-tag { font-size: 11px; }\n.g-ui-select-multi-size-sm .g-ui-select-tag { font-size: 12px; }\n.g-ui-select-multi-size-md .g-ui-select-tag { font-size: 13px; }\n.g-ui-select-multi-size-lg .g-ui-select-tag { font-size: 14px; }\n.g-ui-select-multi-size-xl .g-ui-select-tag { font-size: 15px; }\n.g-ui-select-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n}\n.g-ui-select-tag-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n}\n.g-ui-select-tag-remove svg {\n width: 12px;\n height: 12px;\n fill: currentColor;\n}\n.g-ui-select-item-check {\n width: 16px;\n height: 16px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--g-ui-primary);\n line-height: 0;\n}\n.g-ui-select-item-check svg {\n width: 14px;\n height: 14px;\n fill: currentColor;\n}\n.g-ui-select-item-label {\n line-height: 1.4;\n}\n\n.g-ui-toast-stack {\n position: fixed;\n right: var(--g-ui-space-20);\n top: var(--g-ui-space-20);\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-12);\n z-index: 1001;\n}\n.g-ui-toast {\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n padding: var(--g-ui-space-10) var(--g-ui-space-12);\n background: var(--g-ui-bg);\n min-width: 220px;\n box-shadow: var(--g-ui-shadow-sm);\n}\n.g-ui-toast-title { font-weight: 600; }\n\n.g-ui-tabs-vertical {\n display: grid;\n grid-template-columns: 200px 1fr;\n gap: var(--g-ui-space-16);\n}\n.g-ui-tabs-vertical .g-ui-tabs-list {\n flex-direction: column;\n}\n\n.g-ui-drawer-shadowed {\n box-shadow: var(--g-ui-shadow);\n}\n\n.g-ui-notifications {\n position: fixed;\n right: var(--g-ui-space-20);\n top: var(--g-ui-space-20);\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-10);\n z-index: 1001;\n}\n.g-ui-notifications-position-top-left { top: var(--g-ui-space-20); left: var(--g-ui-space-20); right: auto; }\n.g-ui-notifications-position-top-center { top: var(--g-ui-space-20); left: 50%; right: auto; transform: translateX(-50%); }\n.g-ui-notifications-position-top-right { top: var(--g-ui-space-20); right: var(--g-ui-space-20); left: auto; }\n.g-ui-notifications-position-bottom-left { bottom: var(--g-ui-space-20); left: var(--g-ui-space-20); right: auto; top: auto; flex-direction: column-reverse; }\n.g-ui-notifications-position-bottom-center { bottom: var(--g-ui-space-20); left: 50%; right: auto; top: auto; transform: translateX(-50%); flex-direction: column-reverse; }\n.g-ui-notifications-position-bottom-right { bottom: var(--g-ui-space-20); right: var(--g-ui-space-20); left: auto; top: auto; flex-direction: column-reverse; }\n\n.g-ui-range {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--g-ui-space-10);\n}\n\n.g-ui-input-number {\n width: 100%;\n}\n\n.g-ui-popper {\n position: relative;\n display: inline-flex;\n}\n.g-ui-popper-dropdown {\n position: absolute;\n top: calc(100% + var(--g-ui-space-8));\n left: 0;\n min-width: 220px;\n background: var(--g-ui-bg);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n box-shadow: var(--g-ui-shadow-sm);\n padding: var(--g-ui-space-12) var(--g-ui-space-16);\n z-index: 50;\n}\n\n.g-ui-pill {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n border-radius: 999px;\n border: 1px solid var(--g-ui-border);\n padding: var(--g-ui-space-4) var(--g-ui-space-10);\n font-size: 12px;\n}\n\n.g-ui-pagination-compact .g-ui-pagination-item {\n min-width: 26px;\n height: 26px;\n font-size: 12px;\n}\n\n\n.g-ui-password-toggle {\n border: 0;\n background: transparent;\n color: var(--g-ui-muted);\n cursor: pointer;\n font-size: 12px;\n}\n\n.g-ui-copy-button {\n border: 1px solid var(--g-ui-border-muted);\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n border-radius: 8px;\n padding: var(--g-ui-space-6) var(--g-ui-space-10);\n cursor: pointer;\n font-size: 12px;\n}\n.g-ui-copy-button:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-copy-button-done {\n color: var(--g-ui-success);\n border-color: rgba(18,184,134,0.5);\n}\n\n.g-ui-progress-ring {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 4px solid var(--g-ui-border-muted);\n border-top-color: var(--g-ui-primary);\n animation: g-ui-spin 1s linear infinite;\n}\n.g-ui-progress-ring-size-sm { width: 32px; height: 32px; }\n.g-ui-progress-ring-size-md { width: 48px; height: 48px; }\n.g-ui-progress-ring-size-lg { width: 64px; height: 64px; }\n\n.g-ui-toast-close {\n margin-left: auto;\n border: 0;\n background: transparent;\n color: var(--g-ui-muted);\n cursor: pointer;\n}\n\n.g-ui-toast-row {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n}\n\n.g-ui-select-search {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-8);\n}\n.g-ui-input-size-sm .g-ui-search-input-left-section { width: 16px; height: 16px; }\n.g-ui-input-size-md .g-ui-search-input-left-section { width: 20px; height: 20px; }\n.g-ui-input-size-lg .g-ui-search-input-left-section { width: 24px; height: 24px; }\n.g-ui-input-size-xl .g-ui-search-input-left-section { width: 28px; height: 28px; }\n.g-ui-search-input-left-section {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--g-ui-muted);\n font-size: 16px;\n}\n.g-ui-search-input-left-section svg {\n width: 100%;\n height: 100%;\n fill: inherit;\n}\n\n.g-ui-select-search-input {\n width: 100%;\n border-radius: var(--g-ui-radius);\n border: 1px solid var(--g-ui-border-muted);\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n padding: var(--g-ui-space-8) var(--g-ui-space-10);\n}\n.g-ui-select-search-list {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-6);\n max-height: 160px;\n overflow: auto;\n}\n.g-ui-select-search-item {\n padding: var(--g-ui-space-6) var(--g-ui-space-8);\n border-radius: 8px;\n cursor: pointer;\n}\n.g-ui-select-search-item:hover {\n background: var(--g-ui-bg-subtle);\n}\n\n.g-ui-switch-group {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-8);\n}\n\n.g-ui-segmented-scroll {\n overflow-x: auto;\n max-width: 100%;\n}\n\n.g-ui-range-picker {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--g-ui-space-12);\n}\n\n.g-ui-toast-auto {\n border-color: var(--g-ui-primary);\n}\n\n.g-ui-flex {\n display: flex;\n}\n.g-ui-flex-column { flex-direction: column; }\n.g-ui-flex-row { flex-direction: row; }\n.g-ui-flex-wrap { flex-wrap: wrap; }\n\n.g-ui-navlink-root {\n display: flex;\n flex-direction: column;\n}\n.g-ui-navlink {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n padding: var(--g-ui-space-8) var(--g-ui-space-12);\n border-radius: 0;\n color: var(--g-ui-text);\n text-decoration: none;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n}\n.g-ui-navlink-body {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-2);\n flex: 1;\n}\n.g-ui-navlink-description {\n font-size: 12px;\n color: var(--g-ui-muted);\n font-weight: 400;\n}\n.g-ui-navlink-section {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n.g-ui-navlink-variant-subtle:hover { background: var(--g-ui-bg-subtle); }\n.g-ui-navlink-variant-light:hover { background: var(--g-ui-primary-muted); }\n.g-ui-navlink-variant-filled:hover { background: var(--g-ui-primary-hover); color: var(--g-ui-primary-fg); }\n.g-ui-navlink-active.g-ui-navlink-variant-subtle {\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-primary);\n}\n.g-ui-navlink-active.g-ui-navlink-variant-light {\n background: var(--g-ui-primary-muted);\n color: var(--g-ui-primary);\n}\n.g-ui-navlink-active.g-ui-navlink-variant-filled {\n background: var(--g-ui-primary);\n color: var(--g-ui-primary-fg);\n}\n.g-ui-navlink-disabled {\n opacity: 0.6;\n pointer-events: none;\n}\n.g-ui-navlink-children {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-4);\n}\n.g-ui-navlink-padding-none { padding: 0; }\n.g-ui-navlink-padding-sm { padding: var(--g-ui-space-8); }\n.g-ui-navlink-padding-md { padding: var(--g-ui-space-12); }\n.g-ui-navlink-padding-lg { padding: var(--g-ui-space-16); }\n.g-ui-navlink-padding-xl { padding: var(--g-ui-space-20); }\n.g-ui-navlink-padding-h-sm { padding: var(--g-ui-space-8) var(--g-ui-space-8) ; }\n.g-ui-navlink-padding-h-md { padding: var(--g-ui-space-8) var(--g-ui-space-12) ; }\n.g-ui-navlink-padding-h-lg { padding: var(--g-ui-space-8) var(--g-ui-space-20) ; }\n.g-ui-navlink-padding-h-xl { padding: var(--g-ui-space-8) var(--g-ui-space-24) ; }\n\n.g-ui-indicator {\n position: relative;\n display: inline-flex;\n}\n.g-ui-indicator-badge {\n position: absolute;\n top: -4px;\n right: -4px;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: var(--g-ui-danger);\n border: 2px solid var(--g-ui-bg);\n}\n.g-ui-indicator-size-xs .g-ui-indicator-badge { width: 6px; height: 6px; border-width: 1px; }\n.g-ui-indicator-size-sm .g-ui-indicator-badge { width: 8px; height: 8px; border-width: 2px; }\n.g-ui-indicator-size-md .g-ui-indicator-badge { width: 10px; height: 10px; border-width: 2px; }\n.g-ui-indicator-size-lg .g-ui-indicator-badge { width: 12px; height: 12px; border-width: 2px; }\n.g-ui-indicator-size-xl .g-ui-indicator-badge { width: 14px; height: 14px; border-width: 3px; }\n.g-ui-indicator-position-top-right .g-ui-indicator-badge { top: -4px; right: -4px; bottom: auto; left: auto; }\n.g-ui-indicator-position-top-left .g-ui-indicator-badge { top: -4px; left: -4px; bottom: auto; right: auto; }\n.g-ui-indicator-position-bottom-right .g-ui-indicator-badge { bottom: -4px; right: -4px; top: auto; left: auto; }\n.g-ui-indicator-position-bottom-left .g-ui-indicator-badge { bottom: -4px; left: -4px; top: auto; right: auto; }\n.g-ui-indicator-color-danger .g-ui-indicator-badge { background: var(--g-ui-danger); }\n.g-ui-indicator-color-success .g-ui-indicator-badge { background: var(--g-ui-success); }\n.g-ui-indicator-color-warning .g-ui-indicator-badge { background: var(--g-ui-warning); }\n.g-ui-indicator-color-info .g-ui-indicator-badge { background: var(--g-ui-info); }\n\n.g-ui-burger {\n width: 28px;\n height: 28px;\n position: relative;\n display: inline-block;\n}\n.g-ui-burger span {\n position: absolute;\n left: 0;\n width: 100%;\n height: 2px;\n background: var(--g-ui-text);\n transition: transform .2s ease, opacity .2s ease, top .2s ease;\n}\n.g-ui-burger span:nth-child(1) { top: 6px; }\n.g-ui-burger span:nth-child(2) { top: 13px; }\n.g-ui-burger span:nth-child(3) { top: 20px; }\n.g-ui-burger-open span:nth-child(1) { top: 7px; transform: rotate(45deg); }\n.g-ui-burger-open span:nth-child(2) { opacity: 0; }\n.g-ui-burger-open span:nth-child(3) { top: 7px; transform: rotate(-45deg); }\n\n.g-ui-loading-overlay {\n position: absolute;\n inset: 0;\n background: rgba(15,17,21,0.6);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n}\n\n.g-ui-grid-system {\n display: grid;\n grid-template-columns: repeat(12, minmax(0, 1fr));\n}\n.g-ui-col-span-1 { grid-column: span 1; }\n.g-ui-col-span-2 { grid-column: span 2; }\n.g-ui-col-span-3 { grid-column: span 3; }\n.g-ui-col-span-4 { grid-column: span 4; }\n.g-ui-col-span-5 { grid-column: span 5; }\n.g-ui-col-span-6 { grid-column: span 6; }\n.g-ui-col-span-7 { grid-column: span 7; }\n.g-ui-col-span-8 { grid-column: span 8; }\n.g-ui-col-span-9 { grid-column: span 9; }\n.g-ui-col-span-10 { grid-column: span 10; }\n.g-ui-col-span-11 { grid-column: span 11; }\n.g-ui-col-span-12 { grid-column: span 12; }\n\n.g-ui-scroll-area {\n overflow: auto;\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n background: var(--g-ui-bg);\n padding: 0;\n}\n.g-ui-scroll-area::-webkit-scrollbar { width: 10px; height: 10px; }\n.g-ui-scroll-area::-webkit-scrollbar-track { background: transparent; }\n.g-ui-scroll-area::-webkit-scrollbar-thumb {\n background: color-mix(in srgb, var(--g-ui-muted) 30%, transparent);\n border-radius: 999px;\n}\n.g-ui-scroll-area:hover::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--g-ui-muted) 50%, transparent); }\n.g-ui-scroll-area-sm { max-height: 120px; }\n.g-ui-scroll-area-md { max-height: 200px; }\n.g-ui-scroll-area-lg { max-height: 320px; }\n.g-ui-scroll-area-auto { max-height: auto; }\n\n.g-ui-pin-input {\n display: inline-flex;\n align-items: center;\n cursor: text;\n box-sizing: border-box;\n}\n.g-ui-pin-input-wrapper {\n display: flex;\n gap: var(--g-ui-space-8);\n box-sizing: border-box;\n}\n.g-ui-pin-input-field {\n width: 40px;\n height: 40px;\n padding: 0;\n text-align: center;\n font-size: var(--g-ui-font-md);\n font-weight: 500;\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n outline: none;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n.g-ui-pin-input-field::placeholder {\n color: var(--g-ui-muted);\n opacity: 0.5;\n}\n.g-ui-pin-input-field:focus {\n border-color: var(--g-ui-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--g-ui-primary) 20%, transparent);\n}\n.g-ui-pin-input-field:disabled {\n background: var(--g-ui-bg-subtle);\n color: var(--g-ui-muted);\n cursor: not-allowed;\n}\n.g-ui-pin-input-error {\n border-color: var(--g-ui-danger);\n}\n.g-ui-pin-input-error:focus {\n border-color: var(--g-ui-danger);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--g-ui-danger) 20%, transparent);\n}\n.g-ui-pin-input.g-ui-input-size-xs .g-ui-pin-input-field { width: 28px; height: 28px; font-size: var(--g-ui-font-xs); }\n.g-ui-pin-input.g-ui-input-size-sm .g-ui-pin-input-field { width: 34px; height: 34px; font-size: var(--g-ui-font-sm); }\n.g-ui-pin-input.g-ui-input-size-md .g-ui-pin-input-field { width: 40px; height: 40px; font-size: var(--g-ui-font-md); }\n.g-ui-pin-input.g-ui-input-size-lg .g-ui-pin-input-field { width: 48px; height: 48px; font-size: var(--g-ui-font-lg); }\n.g-ui-pin-input.g-ui-input-size-xl .g-ui-pin-input-field { width: 56px; height: 56px; font-size: var(--g-ui-font-xl); }\n\n.g-ui-checkbox-group {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-8);\n}\n\n.g-ui-avatar-group {\n display: inline-flex;\n align-items: center;\n}\n.g-ui-avatar-group .g-ui-avatar {\n margin-left: calc(0px - var(--g-ui-space-8));\n border: 2px solid var(--g-ui-bg);\n}\n.g-ui-avatar-group .g-ui-avatar:first-child {\n margin-left: 0;\n}\n\n.g-ui-badge-group {\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--g-ui-space-6);\n}\n\n.g-ui-radio {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-6);\n}\n.g-ui-radio-control {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-10);\n cursor: pointer;\n}\n.g-ui-radio-input {\n appearance: none;\n width: var(--g-ui-control-size, 16px);\n height: var(--g-ui-control-size, 16px);\n border-radius: 50%;\n border: 1px solid var(--g-ui-border);\n background: var(--g-ui-bg);\n position: relative;\n transition: background-color .12s ease, border-color .12s ease;\n}\n.g-ui-radio-input:focus-visible {\n outline: 2px solid var(--g-ui-primary);\n outline-offset: 2px;\n}\n.g-ui-radio-input:checked {\n border-color: var(--g-ui-primary);\n}\n.g-ui-radio-input:checked::after {\n content: '';\n position: absolute;\n width: var(--g-ui-control-inner-size, 8px);\n height: var(--g-ui-control-inner-size, 8px);\n border-radius: 50%;\n background: var(--g-ui-primary);\n top: var(--g-ui-control-inner-offset, 3px);\n left: var(--g-ui-control-inner-offset, 3px);\n}\n.g-ui-radio-label { font-size: 14px; }\n.g-ui-radio-description { font-size: 12px; color: var(--g-ui-muted); }\n.g-ui-radio-size-xs { --g-ui-control-size: 16px; --g-ui-control-inner-size: 6px; --g-ui-control-inner-offset: 4px; }\n.g-ui-radio-size-sm { --g-ui-control-size: 20px; --g-ui-control-inner-size: 8px; --g-ui-control-inner-offset: 5px; }\n.g-ui-radio-size-md { --g-ui-control-size: 24px; --g-ui-control-inner-size: 10px; --g-ui-control-inner-offset: 6px; }\n.g-ui-radio-size-lg { --g-ui-control-size: 30px; --g-ui-control-inner-size: 14px; --g-ui-control-inner-offset: 7px; }\n.g-ui-radio-size-xl { --g-ui-control-size: 36px; --g-ui-control-inner-size: 16px; --g-ui-control-inner-offset: 9px; }\n\n.g-ui-breadcrumbs {\n display: inline-flex;\n gap: var(--g-ui-space-8);\n align-items: center;\n color: var(--g-ui-muted);\n font-size: 13px;\n flex-wrap: wrap;\n}\n.g-ui-breadcrumbs-separator { opacity: 0.6; }\n\n.g-ui-center {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.g-ui-space { display: block; width: var(--g-ui-space-16); height: var(--g-ui-space-16); }\n.g-ui-space-xs { width: var(--g-ui-space-8); height: var(--g-ui-space-8); }\n.g-ui-space-sm { width: var(--g-ui-space-12); height: var(--g-ui-space-12); }\n.g-ui-space-md { width: var(--g-ui-space-16); height: var(--g-ui-space-16); }\n.g-ui-space-lg { width: var(--g-ui-space-24); height: var(--g-ui-space-24); }\n.g-ui-space-xl { width: var(--g-ui-space-32); height: var(--g-ui-space-32); }\n\n.g-ui-collapse-hidden { display: none; }\n\n.g-ui-action-icon {\n width: 28px;\n height: 28px;\n border-radius: 8px;\n border: 1px solid var(--g-ui-border);\n background: transparent;\n color: var(--g-ui-text);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n}\n.g-ui-action-icon-size-xs { width: 18px; height: 18px; }\n.g-ui-action-icon-size-sm { width: 22px; height: 22px; }\n.g-ui-action-icon-size-md { width: 28px; height: 28px; }\n.g-ui-action-icon-size-lg { width: 34px; height: 34px; }\n.g-ui-action-icon-size-xl { width: 44px; height: 44px; }\n\n.g-ui-action-icon-size-xs .g-ui-icon { font-size: 12px; }\n.g-ui-action-icon-size-sm .g-ui-icon { font-size: 14px; }\n.g-ui-action-icon-size-md .g-ui-icon { font-size: 16px; }\n.g-ui-action-icon-size-lg .g-ui-icon { font-size: 20px; }\n.g-ui-action-icon-size-xl .g-ui-icon { font-size: 24px; }\n\n.g-ui-action-icon-filled {\n background: var(--g-ui-primary);\n border-color: transparent;\n color: var(--g-ui-primary-fg);\n}\n.g-ui-action-icon-subtle {\n background: transparent;\n border-color: var(--g-ui-border);\n}\n.g-ui-action-icon-light {\n background: var(--g-ui-primary-subtle);\n border-color: var(--g-ui-primary-muted);\n color: var(--g-ui-primary);\n}\n.g-ui-action-icon-outline {\n background: transparent;\n border-color: var(--g-ui-primary);\n color: var(--g-ui-primary);\n}\n.g-ui-action-icon-filled:hover { background: var(--g-ui-primary-hover); }\n.g-ui-action-icon-light:hover { background: var(--g-ui-primary-muted); }\n.g-ui-action-icon-outline:hover { background: var(--g-ui-primary-subtle); }\n.g-ui-action-icon-subtle:hover { background: var(--g-ui-bg-muted); }\n\n.g-ui-popover {\n position: relative;\n display: inline-flex;\n}\n.g-ui-popover-dropdown {\n position: absolute;\n top: calc(100% + var(--g-ui-space-8));\n left: 0;\n min-width: 220px;\n background: var(--g-ui-surface);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: 10px;\n box-shadow: var(--g-ui-shadow-sm);\n padding: var(--g-ui-space-10) var(--g-ui-space-12);\n z-index: 50;\n}\n.g-ui-popover-right { left: auto; right: 0; }\n.g-ui-popover-center { left: 50%; transform: translateX(-50%); }\n\n.g-ui-hover-card {\n position: relative;\n display: inline-flex;\n}\n.g-ui-hover-card-dropdown {\n position: absolute;\n top: calc(100% + var(--g-ui-space-8));\n left: 0;\n min-width: 220px;\n background: var(--g-ui-surface);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n box-shadow: var(--g-ui-shadow-sm);\n padding: var(--g-ui-space-12) var(--g-ui-space-16);\n z-index: 50;\n opacity: 0;\n pointer-events: none;\n transition: opacity .12s ease, transform .12s ease;\n transform: translateY(-4px);\n}\n.g-ui-hover-card:hover .g-ui-hover-card-dropdown {\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0);\n}\n.g-ui-hover-card-right { left: auto; right: 0; }\n.g-ui-hover-card-center { left: 50%; transform: translateX(-50%) translateY(-4px); }\n.g-ui-hover-card:hover .g-ui-hover-card-center { transform: translateX(-50%) translateY(0); }\n\n.g-ui-affix {\n position: fixed;\n z-index: 1000;\n}\n.g-ui-affix-bottom-right { right: var(--g-ui-space-20); bottom: var(--g-ui-space-20); }\n.g-ui-affix-bottom-left { left: var(--g-ui-space-20); bottom: var(--g-ui-space-20); }\n.g-ui-affix-top-right { right: var(--g-ui-space-20); top: var(--g-ui-space-20); }\n.g-ui-affix-top-left { left: var(--g-ui-space-20); top: var(--g-ui-space-20); }\n.g-ui-affix-center-center { left: 50%; top: 50%; transform: translate(-50%, -50%); }\n.g-ui-affix-top-center { left: 50%; top: var(--g-ui-space-20); transform: translateX(-50%); }\n.g-ui-affix-bottom-center { left: 50%; bottom: var(--g-ui-space-20); transform: translateX(-50%); }\n.g-ui-affix-left-center { left: var(--g-ui-space-20); top: 50%; transform: translateY(-50%); }\n.g-ui-affix-right-center { right: var(--g-ui-space-20); top: 50%; transform: translateY(-50%); }\n\n\n.g-ui-fieldset {\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n padding: var(--g-ui-space-14);\n}\n.g-ui-legend {\n padding: 0 var(--g-ui-space-6);\n color: var(--g-ui-muted);\n font-size: 12px;\n}\n\n.g-ui-appbar {\n width: 100%;\n height: 60px;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--g-ui-space-12);\n padding: 0 var(--g-ui-space-16);\n background: var(--g-ui-bg);\n border-bottom: 1px solid var(--g-ui-border);\n z-index: 100;\n position: relative;\n}\n.g-ui-appbar-static { position: static; }\n.g-ui-appbar-sticky { position: sticky; top: 0; }\n.g-ui-appbar-fixed { position: fixed; top: 0; left: 0; right: 0; }\n\n.g-ui-sidebar {\n width: 260px;\n min-width: 260px;\n background: var(--g-ui-bg);\n border-right: 1px solid var(--g-ui-border);\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n}\n.g-ui-sidebar-position-right { border-right: 0; border-left: 1px solid var(--g-ui-border-muted); }\n.g-ui-sidebar-size-sm { width: 220px; min-width: 220px; }\n.g-ui-sidebar-size-md { width: 260px; min-width: 260px; }\n.g-ui-sidebar-size-lg { width: 320px; min-width: 320px; }\n.g-ui-sidebar-size-xl { width: 380px; min-width: 380px; }\n.g-ui-sidebar-min-button { min-width: 38px; width: 38px; }\n.g-ui-sidebar-min-xs { min-width: 48px; width: 48px; }\n.g-ui-sidebar-min-sm { min-width: 64px; width: 64px; }\n.g-ui-sidebar-min-md { min-width: 80px; width: 80px; }\n.g-ui-sidebar-fixed { \n position: relative;\n width: 45px; \n min-width: 45px; \n max-width: 45px;\n height: 100%;\n transition: \n width .22s cubic-bezier(.2,.8,.2,1),\n min-width .22s cubic-bezier(.2,.8,.2,1),\n max-width .22s cubic-bezier(.2,.8,.2,1);\n}\n.g-ui-sidebar-fixed.g-ui-sidebar-size-sm { width: 40px; min-width: 40px; max-width: 40px; }\n.g-ui-sidebar-fixed.g-ui-sidebar-size-md { width: 45px; min-width: 45px; max-width: 45px; }\n.g-ui-sidebar-fixed.g-ui-sidebar-size-lg { width: 50px; min-width: 50px; max-width: 50px; }\n.g-ui-sidebar-fixed.g-ui-sidebar-size-xl { width: 60px; min-width: 60px; max-width: 60px; }\n\n.g-ui-sidebar-fixed-open.g-ui-sidebar-size-sm { width: 220px; min-width: 220px; max-width: 220px; }\n.g-ui-sidebar-fixed-open.g-ui-sidebar-size-md { width: 260px; min-width: 260px; max-width: 260px; }\n.g-ui-sidebar-fixed-open.g-ui-sidebar-size-lg { width: 320px; min-width: 320px; max-width: 320px; }\n.g-ui-sidebar-fixed-open.g-ui-sidebar-size-xl { width: 380px; min-width: 380px; max-width: 380px; }\n\n.g-ui-sidebar-drawer {\n position: fixed;\n top: 0;\n bottom: 0;\n z-index: 999;\n transition: transform .22s cubic-bezier(.2,.8,.2,1), opacity .22s ease;\n opacity: 0;\n transform: translateX(-100%);\n height: 100%;\n min-height: 100vh;\n}\n.g-ui-sidebar-drawer-left.g-ui-sidebar-drawer-open,\n.g-ui-sidebar-drawer-right.g-ui-sidebar-drawer-open {\n opacity: 1;\n transform: translateX(0);\n}\n.g-ui-sidebar-drawer-right {\n right: 0;\n left: auto;\n transform: translateX(100%);\n}\n.g-ui-sidebar-drawer-left {\n left: 0;\n right: auto;\n}\n.g-ui-sidebar-overlay {\n position: fixed;\n inset: 0;\n z-index: 998;\n background: rgba(0,0,0,0.6);\n opacity: 0;\n pointer-events: none;\n transition: opacity .22s ease, backdrop-filter .22s ease;\n backdrop-filter: blur(10px);\n}\n.g-ui-sidebar-overlay-noblur {\n backdrop-filter: none;\n}\n.g-ui-sidebar-overlay-open {\n opacity: 1;\n pointer-events: auto;\n}\n.g-ui-sidebar-title {\n font-weight: 700;\n font-size: 14px;\n color: var(--g-ui-muted);\n text-transform: uppercase;\n letter-spacing: .08em;\n}\n.g-ui-sidebar-item {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-10);\n padding: var(--g-ui-space-8) var(--g-ui-space-12);\n border-radius: 8px;\n cursor: pointer;\n color: var(--g-ui-text);\n text-decoration: none;\n font-size: 14px;\n}\n.g-ui-sidebar-item:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-sidebar-item-active {\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-primary);\n}\n.g-ui-sidebar-item-active:hover { background: var(--g-ui-primary-muted); }\n.g-ui-skeleton-h-xs { height: 8px; }\n.g-ui-skeleton-h-sm { height: 12px; }\n.g-ui-skeleton-h-md { height: 16px; }\n.g-ui-skeleton-h-lg { height: 24px; }\n.g-ui-skeleton-h-xl { height: 32px; }\n.g-ui-skeleton-w-xs { width: 60px; }\n.g-ui-skeleton-w-sm { width: 120px; }\n.g-ui-skeleton-w-md { width: 180px; }\n.g-ui-skeleton-w-lg { width: 240px; }\n.g-ui-skeleton-w-xl { width: 320px; }\n.g-ui-skeleton-w-full { width: 100%; }\n.g-ui-loading {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n.g-ui-spinner {\n border: 3px solid var(--g-ui-border-muted);\n border-top-color: var(--g-ui-primary);\n border-radius: 50%;\n animation: g-ui-spin 1s linear infinite;\n}\n.g-ui-loading-size-xs .g-ui-spinner { width: 14px; height: 14px; }\n.g-ui-loading-size-sm .g-ui-spinner { width: 18px; height: 18px; }\n.g-ui-loading-size-md .g-ui-spinner { width: 22px; height: 22px; }\n.g-ui-loading-size-lg .g-ui-spinner { width: 28px; height: 28px; }\n.g-ui-loading-size-xl .g-ui-spinner { width: 36px; height: 36px; }\n.g-ui-dots::before,\n.g-ui-dots::after {\n content: '';\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--g-ui-primary);\n margin: 0 var(--g-ui-space-3);\n animation: g-ui-bounce 1s infinite ease-in-out;\n}\n.g-ui-dots::after { animation-delay: .2s; }\n.g-ui-loading-size-xs.g-ui-dots::before,\n.g-ui-loading-size-xs.g-ui-dots::after { width: 4px; height: 4px; }\n.g-ui-loading-size-sm.g-ui-dots::before,\n.g-ui-loading-size-sm.g-ui-dots::after { width: 6px; height: 6px; }\n.g-ui-loading-size-md.g-ui-dots::before,\n.g-ui-loading-size-md.g-ui-dots::after { width: 8px; height: 8px; }\n.g-ui-loading-size-lg.g-ui-dots::before,\n.g-ui-loading-size-lg.g-ui-dots::after { width: 10px; height: 10px; }\n.g-ui-loading-size-xl.g-ui-dots::before,\n.g-ui-loading-size-xl.g-ui-dots::after { width: 12px; height: 12px; }\n.g-ui-bars span {\n width: 4px;\n height: 16px;\n background: var(--g-ui-primary);\n margin: 0 var(--g-ui-space-2);\n display: inline-block;\n animation: g-ui-bars 1s infinite ease-in-out;\n}\n.g-ui-bars span:nth-child(2) { animation-delay: .15s; }\n.g-ui-bars span:nth-child(3) { animation-delay: .3s; }\n.g-ui-loading-size-xs.g-ui-bars span { width: 3px; height: 12px; }\n.g-ui-loading-size-sm.g-ui-bars span { width: 4px; height: 14px; }\n.g-ui-loading-size-md.g-ui-bars span { width: 4px; height: 16px; }\n.g-ui-loading-size-lg.g-ui-bars span { width: 5px; height: 20px; }\n.g-ui-loading-size-xl.g-ui-bars span { width: 6px; height: 24px; }\n\n\n.g-ui-grid-table {\n display: grid;\n}\n.g-ui-grid-table-row {\n display: contents;\n}\n.g-ui-grid-table-cell {\n padding: var(--g-ui-space-8);\n border-bottom: 1px solid var(--g-ui-border-muted);\n}\n.g-ui-grid-table-row-header .g-ui-grid-table-cell {\n font-weight: 200;\n}\n.g-ui-grid-table-cell-sortable {\n cursor: pointer;\n user-select: none;\n}\n.g-ui-grid-table-cell-sortable:hover {\n background: var(--g-ui-bg-hover, rgba(0,0,0,0.04));\n}\n.g-ui-grid-table-sort-icon {\n opacity: 0.5;\n}\n.g-ui-grid-table-sticky .g-ui-grid-table-row-header .g-ui-grid-table-cell {\n position: sticky;\n top: 0;\n z-index: 1;\n background: var(--g-ui-bg, #fff);\n}\n\n.g-ui-bottombar {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--g-ui-space-4);\n padding: var(--g-ui-space-4) var(--g-ui-space-8);\n background: var(--g-ui-bg);\n border-top: 1px solid var(--g-ui-border);\n z-index: 100;\n box-sizing: border-box;\n}\n.g-ui-bottombar-grow .g-ui-bottombar-action { flex: 1; }\n\n.g-ui-bottombar-action {\n all: unset;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 2px;\n padding: var(--g-ui-space-6) var(--g-ui-space-12);\n border-radius: var(--g-ui-radius-sm);\n cursor: pointer;\n transition: background 150ms ease, color 150ms ease;\n color: var(--g-ui-text-muted);\n font-size: var(--g-ui-fz-xs);\n min-width: 48px;\n box-sizing: border-box;\n -webkit-tap-highlight-color: transparent;\n user-select: none;\n}\n.g-ui-bottombar-action:hover { background: var(--g-ui-hover); }\n.g-ui-bottombar-action:active { background: var(--g-ui-active); }\n.g-ui-bottombar-action-active { color: var(--g-ui-primary); }\n.g-ui-bottombar-action-active:hover { background: var(--g-ui-primary-light-hover); }\n.g-ui-bottombar-action-disabled {\n opacity: 0.5;\n pointer-events: none;\n cursor: default;\n}\n\n.g-ui-bottombar-action-variant-filled.g-ui-bottombar-action-active {\n background: var(--g-ui-primary);\n color: var(--g-ui-white);\n}\n.g-ui-bottombar-action-variant-filled.g-ui-bottombar-action-active:hover {\n background: var(--g-ui-primary-dark);\n}\n\n.g-ui-bottombar-action-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n line-height: 1;\n}\n.g-ui-bottombar-action-label {\n font-size: 12px;\n line-height: 1.2;\n white-space: nowrap;\n text-align: center;\n}\n\n\n@keyframes g-ui-spin { to { transform: rotate(360deg); } }\n@keyframes g-ui-bounce { 0%, 100% { transform: translateY(0); opacity: .6; } 50% { transform: translateY(-5px); opacity: 1; } }\n@keyframes g-ui-bars { 0%, 100% { transform: scaleY(.6); } 50% { transform: scaleY(1.2); } }\n`;\n\nexport function ensureStyles() {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = css;\n document.head.appendChild(style);\n}\n", "const themeVars = new Set([\n '--g-ui-bg',\n '--g-ui-bg-subtle',\n '--g-ui-bg-muted',\n '--g-ui-bg-emphasized',\n '--g-ui-bg-inverted',\n '--g-ui-bg-panel',\n '--g-ui-fg',\n '--g-ui-fg-muted',\n '--g-ui-fg-subtle',\n '--g-ui-fg-inverted',\n '--g-ui-border',\n '--g-ui-border-subtle',\n '--g-ui-border-emphasized',\n '--g-ui-border-inverted',\n '--g-ui-primary',\n '--g-ui-primary-hover',\n '--g-ui-primary-active',\n '--g-ui-primary-subtle',\n '--g-ui-primary-muted',\n '--g-ui-primary-emphasized',\n '--g-ui-success',\n '--g-ui-success-hover',\n '--g-ui-success-active',\n '--g-ui-success-subtle',\n '--g-ui-success-muted',\n '--g-ui-danger',\n '--g-ui-danger-hover',\n '--g-ui-danger-active',\n '--g-ui-danger-subtle',\n '--g-ui-danger-muted',\n '--g-ui-warning',\n '--g-ui-warning-hover',\n '--g-ui-warning-active',\n '--g-ui-warning-subtle',\n '--g-ui-warning-muted',\n '--g-ui-info',\n '--g-ui-info-hover',\n '--g-ui-info-active',\n '--g-ui-info-subtle',\n '--g-ui-info-muted',\n '--g-ui-shadow-xs',\n '--g-ui-shadow-sm',\n '--g-ui-shadow-md',\n '--g-ui-shadow-lg',\n '--g-ui-shadow-xl',\n '--g-ui-shadow-2xl',\n '--g-ui-radius',\n '--g-ui-font',\n // Legacy\n '--g-ui-surface',\n '--g-ui-text',\n '--g-ui-muted',\n '--g-ui-primary-strong',\n '--g-ui-shadow',\n]);\n\nexport function setThemeVars(vars = {}, target = document?.documentElement) {\n if (!target) return;\n for (const [key, value] of Object.entries(vars)) {\n const cssKey = key.startsWith('--') ? key : `--g-ui-${key}`;\n if (!themeVars.has(cssKey)) continue;\n target.style.setProperty(cssKey, String(value));\n }\n}\n\nexport function setThemeMode(mode = 'dark', target = document?.documentElement) {\n if (!target) return;\n target.classList.remove('g-ui-theme-dark', 'g-ui-theme-light');\n target.classList.add(mode === 'light' ? 'g-ui-theme-light' : 'g-ui-theme-dark');\n}\n", "import { Renderer, isSignal, isState, isStatePath, isComputed, resolve, computed, after, concat } from '@granularjs/core';\n\nfunction isReactive(value) {\n return isSignal(value) || isState(value) || isStatePath(value) || isComputed(value);\n}\n\nexport function cx(...values) {\n return concat(...values, { separator: ' ', filterFalsy: true });\n}\n\nexport function toPx(value) {\n if (value == null || value === '') return undefined;\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport function splitPropsChildren(args, defaults) {\n const props = {};\n const children = [];\n const isPropsObject = (value) =>\n !!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n !Renderer.isRenderable(value) &&\n !Renderer.isDomNode(value) &&\n !isSignal(value) &&\n !isState(value) &&\n !isStatePath(value) &&\n !isComputed(value);\n\n for (const arg of args) {\n if (isPropsObject(arg)) Object.assign(props, arg);\n else children.push(arg);\n }\n if (defaults && typeof defaults === 'object') {\n for (const key of Object.keys(defaults)) {\n if (props[key] === undefined) props[key] = defaults[key];\n }\n }\n return { props: computed(props), rawProps: props, children };\n}\n\nexport function resolveValue(value) {\n return resolve(value);\n}\n\nexport function resolveBool(value) {\n return !!resolve(value);\n}\n\nexport function classVar(prefix, value, fallback) {\n const normalize = (v) => {\n const resolved = resolve(v);\n const finalValue = resolved == null || resolved === '' ? fallback : resolved;\n return finalValue == null || finalValue === '' ? '' : `${prefix}${finalValue}`;\n };\n if (isReactive(value)) {\n return after(value).compute((v) => normalize(v));\n }\n return normalize(value);\n}\n\nexport function classFlag(name, value) {\n if (isReactive(value)) {\n return after(value).compute((v) => (resolve(v) ? name : ''));\n }\n return resolve(value) ? name : '';\n}\n\nexport function classMap(value, map, fallback) {\n const getClass = (v) => map[v] || null;\n if (isReactive(value)) {\n return after(value).compute((v) => getClass(resolve(v ?? fallback)));\n }\n return getClass(resolve(value ?? fallback));\n}\n", "import { Button as HtmlButton, Span, when, after} from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveBool, classVar, classFlag } from '../utils.js';\n\nexport function Button(...args) {\n const { props, children } = splitPropsChildren(args, { variant: 'filled', size: 'md' });\n const {\n variant,\n size,\n fullWidth,\n loading,\n leftSection,\n rightSection,\n className,\n disabled,\n ...rest\n } = props;\n\n const isDisabled = after(disabled, loading).compute(([disabled, loading]) => disabled || loading);\n\n return HtmlButton(\n {\n ...rest,\n disabled: isDisabled,\n className: cx(\n 'g-ui-button',\n classVar('g-ui-button-variant-', variant, 'filled'),\n classVar('g-ui-button-size-', size, 'md'),\n classFlag('g-ui-button-full', fullWidth),\n classFlag('g-ui-button-loading', loading),\n className\n ),\n },\n when(leftSection, () => Span({ className: 'g-ui-button-section-left' }, leftSection)),\n when(loading, () => Span('Loading...'), () => children),\n when(rightSection, () => Span({ className: 'g-ui-button-section-right' }, rightSection))\n );\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag, classMap } from '../utils.js';\n\nexport function Text(...args) {\n const { props, children } = splitPropsChildren(args, { size: 'md' });\n const { size, weight, color, dimmed, align, className, style, ...rest } = props;\n const weightClass = classMap(weight, {\n bold: 'g-ui-text-weight-700',\n semibold: 'g-ui-text-weight-600',\n medium: 'g-ui-text-weight-500',\n 700: 'g-ui-text-weight-700',\n 600: 'g-ui-text-weight-600',\n 500: 'g-ui-text-weight-500',\n 400: 'g-ui-text-weight-400',\n });\n const colorClass = classMap(color, {\n primary: 'g-ui-text-primary',\n success: 'g-ui-text-success',\n danger: 'g-ui-text-danger',\n muted: 'g-ui-text-dimmed',\n });\n const alignClass = classMap(align, {\n center: 'g-ui-text-align-center',\n right: 'g-ui-text-align-right',\n left: 'g-ui-text-align-left',\n });\n return Span(\n {\n ...rest,\n className: cx(\n 'g-ui-text',\n classVar('g-ui-text-size-', size, 'md'),\n classFlag('g-ui-text-dimmed', dimmed),\n weightClass,\n colorClass,\n alignClass,\n className\n ),\n },\n children\n );\n}\n", "import { H1, H2, H3, H4, H5, H6 } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue, classVar } from '../utils.js';\n\nconst map = { 1: H1, 2: H2, 3: H3, 4: H4, 5: H5, 6: H6 };\n\nexport function Title(...args) {\n const { props, children } = splitPropsChildren(args, { order: 2 });\n const { order, className, style, ...rest } = props;\n const orderValue = resolveValue(order) || 2;\n const Tag = map[orderValue] || H2;\n return Tag(\n {\n ...rest,\n className: cx('g-ui-title', classVar('g-ui-title-order-', order, 2), className),\n },\n children\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag } from '../utils.js';\n\nexport function Container(...args) {\n const { props, children } = splitPropsChildren(args, { size: 'md' });\n const { size, fluid, className, style, ...rest } = props;\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-container',\n classFlag('g-ui-container-fluid', fluid),\n classVar('g-ui-container-size-', size, 'md'),\n className\n ),\n },\n children\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classMap } from '../utils.js';\n\nexport function Stack(...args) {\n const { props, children } = splitPropsChildren(args, { gap: 'md' });\n const { gap, align, justify, className, style, ...rest } = props;\n const justifyClass = classMap(justify, {\n between: 'g-ui-justify-between',\n center: 'g-ui-justify-center',\n end: 'g-ui-justify-end',\n start: 'g-ui-justify-start',\n });\n return Div(\n {\n ...rest,\n style,\n className: cx(\n 'g-ui-stack',\n classVar('g-ui-gap-', gap, 'md'),\n classVar('g-ui-align-', align),\n justifyClass,\n className\n ),\n },\n children\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classMap, classFlag } from '../utils.js';\n\nexport function Group(...args) {\n const { props, children } = splitPropsChildren(args, { gap: 'md', align: 'center' });\n const { gap, align, justify, position, noWrap, className, style, ...rest } = props;\n const positionClass = classMap(position, {\n apart: 'g-ui-justify-between',\n center: 'g-ui-justify-center',\n right: 'g-ui-justify-end',\n left: 'g-ui-justify-start',\n });\n return Div(\n {\n ...rest,\n style,\n className: cx(\n 'g-ui-group',\n classVar('g-ui-gap-', gap, 'md'),\n classVar('g-ui-align-', align, 'center'),\n classVar('g-ui-justify-', justify, 'none'),\n positionClass,\n classFlag('g-ui-no-wrap', noWrap),\n className\n ),\n },\n children\n );\n}\n", "import { Div, list, when, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\nimport { Button } from './Button.js';\n\nexport function Card(...args) {\n const { props, children } = splitPropsChildren(args, { padding: 'md', radius: 'md', shadow: 'none', border: 'default' });\n const { title, content, actions, border, padding, radius, shadow, className, style, ...rest } = props;\n\n return Div(\n when(title, () => Div({ className: 'g-ui-card-title' }, title)),\n when(content, () => Div({ className: 'g-ui-card-content' }, content)),\n when(actions, () => Div(\n { className: 'g-ui-card-actions' },\n list(actions, (action) => Button(\n {\n className: 'g-ui-card-action',\n onClick: (e) => action.onClick.get()?.(e),\n leftSection: action.leftSection,\n rightSection: action.rightSection,\n size: after(action.size).compute(s => s || 'sm'),\n variant: after(action.variant).compute(v => v || 'outline'),\n ...(action.props.get() || {}),\n },\n action.label\n ))\n )),\n {\n className: cx(\n 'g-ui-card',\n classVar('g-ui-card-border-', border, 'md'),\n classVar('g-ui-card-padding-', padding, 'md'),\n classVar('g-ui-card-radius-', radius, 'md'),\n classVar('g-ui-card-shadow-', shadow, 'md'),\n className\n ),\n ...rest,\n },\n children\n );\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag, classMap } from '../utils.js';\n\nexport function Badge(...args) {\n const { props, children } = splitPropsChildren(args, { variant: 'filled', size: 'md' });\n const { variant, size, className, dot, style, ...rest } = props;\n const dotClass = classMap(variant, { dot: 'g-ui-badge-dot' });\n return Span(\n {\n ...rest,\n className: cx(\n 'g-ui-badge',\n classVar('g-ui-badge-variant-', variant, 'filled'),\n classVar('g-ui-badge-size-', size, 'md'),\n classFlag('g-ui-badge-dot', dot),\n dotClass,\n className\n ),\n },\n children\n );\n}\n", "import { Div, Input, Textarea as HtmlTextarea, Label, Span, when, state, after, isState } from '@granularjs/core';\nimport { cx, splitPropsChildren, classFlag, classVar, resolveValue, resolveBool } from '../utils.js';\n\nexport function TextInput(...args) {\n const { props, rawProps } = splitPropsChildren(args, { size: 'md' });\n const {\n label,\n description,\n error,\n size,\n leftSection,\n rightSection,\n className,\n inputClassName,\n multiline,\n value: computed_value,\n ...rest\n } = props;\n const { value: raw_value, onChange, onInput, onFocus, onBlur, onKeyDown, onKeyUp, onClick } = rawProps;\n\n const isValueTwoWay = isState(raw_value) && !onChange && !onInput\n const currentState = isValueTwoWay ? raw_value : state(resolveValue(computed_value) ?? '');\n\n after(computed_value).change((next) => {\n if (isValueTwoWay) return;\n currentState.set(resolveValue(next) ?? '');\n });\n\n const handleInput = (ev) => {\n const next = ev?.target?.value ?? '';\n if (next === computed_value.get()) return;\n currentState.set(next);\n onChange?.(ev);\n onInput?.(ev);\n };\n\n const isMultiline = resolveBool(multiline);\n const Control = isMultiline ? HtmlTextarea : Input;\n const finalInputClassName = cx(inputClassName, isMultiline && 'g-ui-textarea');\n\n const input = Control({\n ...rest,\n value: currentState,\n onInput: handleInput,\n onChange: handleInput,\n onFocus,\n onBlur,\n onKeyDown,\n onKeyUp,\n onClick,\n className: cx('g-ui-input', finalInputClassName),\n });\n\n\n return Div(\n { className: cx('g-ui-text-input', className) },\n when(label, () => Label({ className: 'g-ui-text-input-label' }, label)),\n when(description, () => Span({ className: 'g-ui-text-input-description' }, description)),\n Div(\n {\n className: cx(\n 'g-ui-input-wrapper',\n classFlag('g-ui-input-multiline', multiline),\n classVar('g-ui-input-size-', size, 'md'),\n classFlag('g-ui-input-error', error)\n ),\n },\n when(leftSection, () => Div({ className: 'g-ui-input-section' }, leftSection)),\n input,\n when(rightSection, () => Div({ className: 'g-ui-input-section' }, rightSection))\n ),\n when(error, () => Div({ className: 'g-ui-text-input-error-text' }, error))\n );\n}\n", "import { splitPropsChildren } from '../utils.js';\nimport { TextInput } from './TextInput.js';\n\nexport function Textarea(...args) {\n const { props } = splitPropsChildren(args, { size: 'md' });\n const { size, leftSection, rightSection, className, ...rest } = props;\n return TextInput({\n ...rest,\n size,\n className,\n leftSection,\n rightSection,\n multiline: true,\n });\n}\n", "import { cx, splitPropsChildren, resolveValue } from '../utils.js';\nimport { Div, Span, when, after, state } from '@granularjs/core';\nimport { TextInput } from './TextInput.js';\n\nexport function NumberField(...args) {\n const { props, rawProps } = splitPropsChildren(args, {\n size: 'md',\n step: 1,\n allowDecimal: true,\n allowNegative: true,\n clampBehavior: 'blur',\n hideControls: false,\n decimalSeparator: '.',\n thousandSeparator: '',\n format: null,\n prefix: '',\n suffix: '',\n });\n const {\n value,\n min,\n max,\n step,\n size,\n allowDecimal,\n allowNegative,\n decimalSeparator,\n thousandSeparator,\n decimalScale,\n clampBehavior,\n hideControls,\n format,\n locale,\n currency,\n formatOptions,\n prefix,\n suffix,\n leftSection,\n rightSection,\n className,\n onChange: computed_onChange,\n onInput: computed_onInput,\n ...rest\n } = props;\n const { onChange: _onChange, onInput: _onInput, onBlur, onFocus, onKeyDown } = rawProps;\n\n const onChange = (e) => {\n _onChange?.(e.target?.value ?? '');\n _onInput?.(e.target?.value ?? '');\n }\n const onInput = onChange;\n\n const currentState = state('');\n\n const escapeRegExp = (value) => String(value ?? '').replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n const getScale = () => {\n const allowDec = !!resolveValue(allowDecimal);\n if (!allowDec) return 0;\n const resolved = resolveValue(decimalScale);\n if (resolved != null && resolved !== '' && Number.isFinite(Number(resolved))) return Math.max(0, Number(resolved));\n const fmt = resolveValue(format);\n if (fmt === 'currency' || fmt === 'percent') return 2;\n return 0;\n };\n\n const parseNumber = (raw) => {\n const decSep = resolveValue(decimalSeparator) ?? '.';\n const thousSep = resolveValue(thousandSeparator) ?? '';\n let rawValue = String(raw ?? '');\n if (thousSep) {\n rawValue = rawValue.split(thousSep).join('');\n }\n if (!rawValue || rawValue === '-' || rawValue === decSep || rawValue.endsWith(decSep)) return null;\n const normalized = rawValue.replace(decSep, '.');\n const num = Number(normalized);\n if (!Number.isFinite(num)) return null;\n return num;\n };\n\n const addThousandSeparators = (intPart) => {\n const thousSep = resolveValue(thousandSeparator) ?? '';\n if (!thousSep) return intPart;\n return intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousSep);\n };\n\n const formatNumber = (num) => {\n const decSep = resolveValue(decimalSeparator) ?? '.';\n const scale = getScale();\n const numeric = Number(num);\n if (!Number.isFinite(numeric)) return '';\n const sign = numeric < 0 ? '-' : '';\n const abs = Math.abs(numeric);\n let [int, dec = ''] = String(abs).split('.');\n const formattedInt = addThousandSeparators(int);\n if (scale > 0) {\n const trimmed = dec.slice(0, scale).padEnd(scale, '0');\n return `${sign}${formattedInt}${decSep}${trimmed}`;\n }\n return `${sign}${formattedInt}`;\n };\n\n const formatWithIntl = (num, kind) => {\n try {\n const resolvedLocale = resolveValue(locale);\n const resolvedCurrency = resolveValue(currency) ?? 'USD';\n const options = resolveValue(formatOptions) ?? {};\n const scale = getScale();\n const style = kind === 'currency' ? 'currency' : 'decimal';\n const formatter = new Intl.NumberFormat(resolvedLocale, {\n style,\n currency: resolvedCurrency,\n ...(scale > 0 ? { minimumFractionDigits: scale, maximumFractionDigits: scale } : { maximumFractionDigits: 0 }),\n ...options,\n });\n return formatter.format(num);\n } catch {\n return formatNumber(num);\n }\n };\n\n const clampValue = (num) => {\n let next = num;\n const minValue = resolveValue(min);\n const maxValue = resolveValue(max);\n if (minValue != null && Number.isFinite(Number(minValue))) next = Math.max(next, Number(minValue));\n if (maxValue != null && Number.isFinite(Number(maxValue))) next = Math.min(next, Number(maxValue));\n if (!resolveValue(allowNegative) && next < 0) next = 0;\n return next;\n };\n\n const resolveSuffix = () => {\n const suffixValue = resolveValue(suffix) ?? '';\n const fmt = resolveValue(format);\n if (!suffixValue && fmt === 'percent') return '%';\n return suffixValue;\n };\n\n const buildVisual = (raw, sign, fmt) => {\n const prefixValue = resolveValue(prefix) ?? '';\n const suffixValue = resolveSuffix();\n const normalizedRaw = String(raw ?? '').replace(/\\u00A0/g, ' ');\n const normalizedPrefix = String(prefixValue ?? '').replace(/\\u00A0/g, ' ');\n const normalizedSuffix = String(suffixValue ?? '').replace(/\\u00A0/g, ' ');\n const hasPrefix = normalizedPrefix && normalizedRaw.startsWith(normalizedPrefix);\n const hasSuffix = normalizedSuffix && normalizedRaw.endsWith(normalizedSuffix);\n const finalPrefix = hasPrefix ? '' : prefixValue;\n const finalSuffix = hasSuffix ? '' : suffixValue;\n return `${sign ?? ''}${finalPrefix}${raw}${finalSuffix}`;\n };\n\n const makeSanitizedFromDigits = (digitsValue, sign) => {\n const scale = getScale();\n const sep = resolveValue(decimalSeparator) ?? '.';\n const digits = String(digitsValue ?? '').replace(/\\D/g, '');\n const baseDigits = digits || '0';\n const padded = scale > 0 ? baseDigits.padStart(scale + 1, '0') : baseDigits;\n const rawInt = scale > 0 ? padded.slice(0, -scale) : padded;\n const intPart = rawInt.replace(/^0+(?=\\d)/, '') || '0';\n const decPart = scale > 0 ? padded.slice(-scale) : '';\n const sanitized = scale > 0 ? `${intPart}${sep}${decPart}` : intPart;\n return `${sign ?? ''}${sanitized}`;\n };\n\n const stripAffixes = (raw) => {\n const prefixValue = resolveValue(prefix) ?? '';\n const suffixValue = resolveSuffix();\n let out = String(raw ?? '');\n const normalizedPrefix = String(prefixValue ?? '').replace(/\\u00A0/g, ' ');\n const normalizedSuffix = String(suffixValue ?? '').replace(/\\u00A0/g, ' ');\n if (normalizedPrefix) {\n const normalizedOut = out.replace(/\\u00A0/g, ' ');\n if (normalizedOut.startsWith(normalizedPrefix)) out = out.slice(prefixValue.length);\n }\n if (normalizedSuffix) {\n const normalizedOut = out.replace(/\\u00A0/g, ' ');\n if (normalizedOut.endsWith(normalizedSuffix)) out = out.slice(0, -suffixValue.length);\n }\n return out;\n };\n\n const sanitizeFromInput = (rawInput) => {\n const allowNeg = !!resolveValue(allowNegative);\n const body = stripAffixes(rawInput);\n const sign = allowNeg && body.includes('-') ? '-' : '';\n const digits = body.replace(/\\D/g, '');\n let sanitized = makeSanitizedFromDigits(digits, sign);\n if (resolveValue(clampBehavior) === 'strict') {\n const parsed = parseNumber(sanitized);\n if (parsed != null) {\n const clamped = clampValue(parsed);\n const clampedSign = clamped < 0 ? '-' : '';\n sanitized = `${clampedSign}${formatNumber(Math.abs(clamped))}`;\n }\n }\n return sanitized;\n };\n\n const normalizeIncoming = (next) => {\n if (next == null || next === '') return makeSanitizedFromDigits('', '');\n if (typeof next === 'number' && Number.isFinite(next)) {\n const clamped = resolveValue(clampBehavior) === 'strict' ? clampValue(next) : next;\n const sign = clamped < 0 ? '-' : '';\n return `${sign}${formatNumber(Math.abs(clamped))}`;\n }\n const inputText = stripAffixes(next);\n const sep = resolveValue(decimalSeparator) ?? '.';\n const allowNeg = !!resolveValue(allowNegative);\n const sign = allowNeg && String(inputText).includes('-') ? '-' : '';\n const filtered = String(inputText ?? '').replace(new RegExp(`[^0-9${escapeRegExp(sep)}]`, 'g'), '');\n const parsed = parseNumber(`${sign}${filtered}`);\n if (parsed != null) {\n const clamped = resolveValue(clampBehavior) === 'strict' ? clampValue(parsed) : parsed;\n const clampedSign = clamped < 0 ? '-' : '';\n return `${clampedSign}${formatNumber(Math.abs(clamped))}`;\n }\n return sanitizeFromInput(next);\n };\n\n let lastExternalValue = undefined;\n const updateFromExternal = (next) => {\n const resolved = resolveValue(next);\n if (resolved === undefined) return;\n\n const normalized = normalizeIncoming(resolved);\n if (normalized === currentState.get()) return;\n lastExternalValue = normalized;\n currentState.set(normalized);\n };\n\n updateFromExternal(value);\n after(value).change((next) => {\n updateFromExternal(next)\n });\n\n after(currentState).change((next) => {\n if (next === lastExternalValue) {\n lastExternalValue = undefined;\n return;\n }\n lastExternalValue = undefined;\n const parsed = parseNumber(next);\n if (parsed == null) {\n onChange?.(next ?? '');\n return;\n }\n onChange?.(parsed);\n });\n\n const hasRightSection = after(rightSection).compute((next) => next != null && next !== false);\n const showControls = after(hideControls, hasRightSection).compute(([nextHidden, nextRight]) =>\n !resolveValue(nextHidden) && !nextRight\n );\n const inputMode = after(allowDecimal).compute((next) => (resolveValue(next) ? 'decimal' : 'numeric'));\n\n const inputFormat = after(\n format,\n prefix,\n suffix,\n allowDecimal,\n allowNegative,\n decimalSeparator,\n thousandSeparator,\n decimalScale,\n clampBehavior,\n min,\n max,\n locale,\n currency,\n formatOptions\n ).compute(() => ({\n mode: 'both',\n format: (raw) => {\n const sanitized = sanitizeFromInput(raw);\n const fmt = resolveValue(format);\n const allowNeg = !!resolveValue(allowNegative);\n const sign = allowNeg && sanitized.startsWith('-') ? '-' : '';\n const parsed = parseNumber(sanitized);\n let visual = sanitized.replace(sign, '');\n if (parsed != null) {\n const abs = Math.abs(parsed);\n if (typeof fmt === 'function') {\n try {\n visual = fmt(abs);\n } catch {\n visual = formatNumber(abs);\n }\n } else if (fmt === 'currency') {\n visual = formatWithIntl(abs, 'currency');\n } else if (fmt === 'decimal') {\n const resolvedLocale = resolveValue(locale);\n const resolvedOptions = resolveValue(formatOptions);\n visual = resolvedLocale || resolvedOptions ? formatWithIntl(abs, 'decimal') : formatNumber(abs);\n } else if (fmt === 'percent') {\n visual = formatNumber(abs);\n } else {\n visual = formatNumber(abs);\n }\n }\n return { value: sanitized, raw: sanitized, visual: buildVisual(visual, sign, fmt) };\n },\n }));\n\n const stepBy = (direction) => {\n const current = parseNumber(currentState.get());\n const delta = Number(resolveValue(step) ?? 1);\n const base = current == null ? 0 : current;\n const next = clampValue(base + delta * direction);\n currentState.set(formatNumber(next));\n };\n\n const setCaretToEnd = (target) => {\n if (!target || typeof target.setSelectionRange !== 'function') return;\n const setToEnd = () => {\n try {\n const end = String(target.value ?? '').length;\n target.setSelectionRange(end, end);\n } catch { }\n };\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(setToEnd);\n } else {\n setToEnd();\n }\n };\n\n const handleInput = (ev) => {\n onInput?.(ev);\n const target = ev?.target;\n if (!target) return;\n setCaretToEnd(target);\n };\n\n const handleBlur = (ev) => {\n onBlur?.(ev);\n if (resolveValue(clampBehavior) !== 'blur') return;\n const parsed = parseNumber(currentState.get());\n if (parsed == null) return;\n const clamped = clampValue(parsed);\n currentState.set(formatNumber(clamped));\n };\n\n const handleFocus = (ev) => {\n onFocus?.(ev);\n setCaretToEnd(ev?.target);\n };\n\n const handleKeyDown = (ev) => {\n onKeyDown?.(ev);\n const target = ev?.target;\n if (!target) return;\n const prefixValue = resolveValue(prefix) ?? '';\n const suffixValue = resolveSuffix();\n if (suffixValue && typeof target.selectionEnd === 'number') {\n target.selectionEnd = Math.min(target.selectionEnd, String(target.value ?? '').length - suffixValue.length);\n }\n if (prefixValue && typeof target.selectionStart === 'number') {\n target.selectionStart = Math.max(target.selectionStart, prefixValue.length);\n }\n };\n\n const controls = Div(\n { className: 'g-ui-number-field-controls' },\n Span({ className: 'g-ui-number-field-control', onClick: () => stepBy(1) }, '+'),\n Span({ className: 'g-ui-number-field-control', onClick: () => stepBy(-1) }, '\u2212')\n );\n const controlsWrapper = Div({ className: 'g-ui-number-field-controls-wrapper' }, controls);\n const finalRightSection = after(showControls, rightSection).compute(([nextControls, nextRight]) => {\n if (nextControls) return controlsWrapper;\n return nextRight;\n });\n\n return TextInput({\n ...rest,\n size,\n className: cx('g-ui-number-field', className),\n leftSection,\n rightSection: finalRightSection,\n type: 'text',\n inputMode,\n inputClassName: cx('g-ui-input-number'),\n value: currentState,\n format: inputFormat,\n onInput: handleInput,\n onBlur: handleBlur,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n });\n}", "import { NumberField } from './NumberField.js';\n\nexport function NumberInput(...args) {\n return NumberField(...args);\n}\n", "import { Div, Button as HtmlButton, portal, when, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\nimport { closeSvg } from '../theme/icons.js';\n\n\n\nexport function Modal(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { size: 'md', centered: true, overlay: 'normal' });\n const {\n opened,\n title,\n size,\n centered,\n overlay,\n position,\n className,\n style,\n } = props;\n const { onClose } = rawProps;\n const positionClass = after(position, centered).compute(([pos, isCentered]) => {\n const value = pos ?? (isCentered === false ? 'top-center' : 'center');\n return `g-ui-modal-position-${value}`;\n });\n\n return when(opened, () =>\n portal(\n Div(\n {\n className: cx(\n 'g-ui-modal-overlay',\n classVar('g-ui-modal-overlay-', overlay, 'normal'),\n positionClass\n ),\n onClick: (ev) => {\n if (ev.target === ev.currentTarget) onClose?.();\n },\n },\n Div(\n {\n className: cx('g-ui-modal', classVar('g-ui-modal-size-', size, 'md'), className),\n },\n Div(\n { className: 'g-ui-modal-header' },\n when(title, () => Div({ className: 'g-ui-modal-title' }, title)),\n when(onClose, () =>\n HtmlButton(\n {\n type: 'button',\n className: 'g-ui-button g-ui-button-variant-subtle g-ui-button-size-xs g-ui-modal-close',\n onClick: onClose,\n innerHTML: closeSvg,\n }\n )\n )\n ),\n children\n )\n )\n )\n );\n}\n", "export const forwardSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#1f1f1f\"><path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\"/></svg>';\nexport const backwardSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#1f1f1f\"><path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\"/></svg>';\nexport const checkedSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"40px\" viewBox=\"0 -960 960 960\" width=\"40px\" fill=\"#1f1f1f\"><path d=\"M379.33-244 154-469.33 201.67-517l177.66 177.67 378.34-378.34L805.33-670l-426 426Z\"/></svg>';\nexport const indeterminateSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"40px\" viewBox=\"0 -960 960 960\" width=\"40px\" fill=\"#1f1f1f\"><path d=\"M240-446.67v-66.66h480v66.66H240Z\"/></svg>';\nexport const closeSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"40px\" viewBox=\"0 -960 960 960\" width=\"40px\" fill=\"#1f1f1f\"><path d=\"M312-265.33 265.33-312l168-168-168-167L312-693.67l168 168 167-168L693.67-647l-168 167 168 168L647-265.33l-167-168-168 168Z\"/></svg>';\nexport const searchSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#1f1f1f\"><path d=\"M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z\"/></svg>';\nexport const plusSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"currentColor\"><path d=\"M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z\"/></svg>';\nexport const editSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"currentColor\"><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h357l-80 80H200v560h560v-278l80-80v358q0 33-23.5 56.5T760-120H200Zm280-360v-80h240v80H480Zm0 160v-80h320v80H480Zm0 160v-80h320v80H480ZM360-360v-80h80v80h-80Zm0 160v-80h80v80h-80Zm0 160v-80h80v80h-80Zm160-320h280l-36-37 37-37v74H520Zm-160 0h80v-80h-80v80ZM120-600v-160l160-160h160l-80 80H200v240h-80Zm80-240v-80 80Z\"/></svg>';\nexport const deleteSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"currentColor\"><path d=\"M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z\"/></svg>';\nexport const calendarTodaySvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"currentColor\"><path d=\"M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Z\"/></svg>';", "import { Div, Span, after, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Loading(...args) {\n const { props } = splitPropsChildren(args, { variant: 'spinner', size: 'md' });\n const { variant, size, className } = props;\n const isDots = after(variant).compute((next) => next === 'dots');\n const isBars = after(variant).compute((next) => next === 'bars');\n return when(isDots,\n () => Div({\n className: cx('g-ui-loading g-ui-dots', classVar('g-ui-loading-size-', size, 'md'), className),\n }),\n () => when(\n isBars,\n () => Div(\n { className: cx('g-ui-loading g-ui-bars', classVar('g-ui-loading-size-', size, 'md'), className) },\n Span(''),\n Span(''),\n Span('')\n ),\n () => Div(\n {\n className: cx('g-ui-loading', classVar('g-ui-loading-size-', size, 'md'), className),\n },\n Div({ className: 'g-ui-spinner' })\n )\n )\n );\n}\n", "import { Div, Input, Label, Span, when, state, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveBool } from '../utils.js';\nimport { checkedSvg, indeterminateSvg } from '../theme/icons.js';\n\nexport function Checkbox(...args) {\n const { props, rawProps } = splitPropsChildren(args, { size: 'md' });\n const { checked, label, description, size, indeterminate, className, style, inputProps, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveBool(checked));\n\n after(checked).change((next) => {\n if (next == null) return;\n currentState.set(!!next);\n onChange?.(next);\n });\n\n const control = Label(\n { className: 'g-ui-checkbox-control' },\n Input({\n type: 'checkbox',\n indeterminate: indeterminate,\n checked: currentState,\n className: cx(\n 'g-ui-checkbox-input',\n classVar('g-ui-checkbox-size-', size, 'md'),\n inputProps?.className\n ),\n ...rest,\n }),\n when(currentState,\n () => Div({ className: 'g-ui-checkbox-checked', innerHTML: checkedSvg }),\n () => {\n if (!currentState.get() && indeterminate.get()) {\n return Div({ className: 'g-ui-checkbox-indeterminate', innerHTML: indeterminateSvg });\n }\n }\n ),\n when(label, () => Span({ className: 'g-ui-checkbox-label' }, label))\n );\n\n return Div(\n { className: cx('g-ui-checkbox', classVar('g-ui-checkbox-size-', size, 'md'), className) },\n control,\n when(description, () => Span({ className: 'g-ui-checkbox-description' }, description))\n );\n}\n", "import { Input, Label, Span, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Switch(...args) {\n const { props } = splitPropsChildren(args, { size: 'md' });\n const { label, size, className, style, inputProps, ...rest } = props;\n return Label(\n { className: cx('g-ui-switch', classVar('g-ui-switch-size-', size, 'md'), className) },\n Input({\n type: 'checkbox',\n className: cx('g-ui-switch-input', classVar('g-ui-switch-size-', size, 'md'), inputProps?.className),\n ...rest,\n }),\n when(label, () => Span({ className: 'g-ui-switch-label' }, label))\n );\n}\n", "import { Div, Span, when, state, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\n\nexport function Select(...args) {\n const { props, rawProps } = splitPropsChildren(args, { data: [], size: 'md' });\n const { data, value, size, leftSection, rightSection, placeholder, className, ...rest } = props;\n const { onChange } = rawProps;\n const open = state(false);\n const currentState = state(resolveValue(value) ?? '');\n\n after(value).change((next) => {\n const resolved = resolveValue(next);\n if (resolved === undefined) return;\n currentState.set(resolved ?? '');\n });\n\n const selectValue = (next) => {\n currentState.set(next);\n onChange?.(next);\n open.set(false);\n };\n\n const valueClass = after(currentState).compute((current) => {\n if (!current) return 'g-ui-select-placeholder';\n return '';\n });\n const displayLabel = after(currentState).compute((current) => {\n const items = resolveValue(data) ?? [];\n const match = items.find((item) => item.value === current);\n if (current) return match?.label ?? '';\n return placeholder ?? '';\n });\n\n return Div(\n { ...rest, className: cx('g-ui-select-root', className) },\n Div(\n { className: cx('g-ui-input-wrapper', classVar('g-ui-input-size-', size, 'md')) },\n when(leftSection, () => Div({ className: 'g-ui-input-section' }, leftSection)),\n Div(\n {\n className: cx('g-ui-select', valueClass),\n onClick: () => open.set(!open.get()),\n },\n Span({ className: 'g-ui-select-value' }, displayLabel)\n ),\n when(rightSection, () => Div({ className: 'g-ui-input-section' }, rightSection), () =>\n Span({ className: 'g-ui-select-caret' }, '\u25BE')\n )\n ),\n when(open, () =>\n Div(\n { className: 'g-ui-select-dropdown' },\n (resolveValue(data) ?? []).map((item) =>\n Div(\n {\n className: cx(\n 'g-ui-select-item',\n after(currentState).compute((current) => {\n if (current === item.value) return 'g-ui-select-item-active';\n return '';\n })\n ),\n onClick: () => selectValue(item.value),\n },\n item.label\n )\n )\n )\n )\n );\n}\n", "import { Button, Div, state, after, list, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classMap, classVar, resolveValue, resolveBool } from '../utils.js';\n\nexport function Tabs(...args) {\n const { props, rawProps } = splitPropsChildren(args, {\n tabs: [],\n orientation: 'horizontal',\n variant: 'default',\n sticky: true,\n });\n const { value, tabs, orientation, variant, sticky, className, style } = props;\n const { onChange } = rawProps;\n\n const currentState = state(resolveValue(value) ?? resolveValue(tabs)?.[0]?.value ?? '');\n const sentinelNode = state();\n const listNode = state();\n const spacerHeight = state(0);\n const stickyLeft = state(0);\n const stickyWidth = state(0);\n const stickyTop = state(0);\n const isSticky = state(false);\n const lastScrollTop = state(0);\n let listening = false;\n let rafId = null;\n let initScheduled = false;\n const listenerTargets = new Set();\n\n after(value).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(resolved);\n });\n\n const setValue = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n\n const getScrollParents = (node) => {\n const parents = [];\n let current = node?.parentElement;\n while (current) {\n const style = getComputedStyle(current);\n const overflow = `${style.overflow}${style.overflowY}${style.overflowX}`;\n if (/(auto|scroll)/.test(overflow)) {\n parents.push(current);\n }\n current = current.parentElement;\n }\n return parents;\n };\n\n const getScrollRoot = (node) => getScrollParents(node)[0] ?? null;\n\n const getRootTop = (root) => (root ? root.getBoundingClientRect().top : 0);\n\n const getScrollTop = (root) => (root ? root.scrollTop : (window.scrollY || window.pageYOffset || 0));\n\n const getScrollDirection = (current, last) => {\n if (current > last) return 'down';\n if (current < last) return 'up';\n return 'none';\n };\n\n const getNextSticky = (direction, sentinelTop, rootTop, currentSticky) => {\n if (direction === 'down' && sentinelTop < rootTop) return true;\n if (direction === 'up' && sentinelTop >= rootTop) return false;\n return currentSticky;\n };\n\n const updateSticky = () => {\n const sentinelEl = sentinelNode.get();\n const listEl = listNode.get();\n if (!sentinelEl || !listEl) return;\n if (!resolveBool(sticky)) {\n isSticky.set(false);\n spacerHeight.set(0);\n return;\n }\n if (typeof window === 'undefined') return;\n\n const sentinelRect = sentinelEl.getBoundingClientRect();\n const listRect = listEl.getBoundingClientRect();\n const root = getScrollRoot(sentinelEl);\n const rootTop = getRootTop(root);\n const currentScrollTop = getScrollTop(root);\n const direction = getScrollDirection(currentScrollTop, lastScrollTop.get());\n lastScrollTop.set(currentScrollTop);\n\n const nextSticky = getNextSticky(direction, sentinelRect.top, rootTop, isSticky.get());\n\n spacerHeight.set(listRect.height);\n stickyLeft.set(sentinelRect.left);\n stickyWidth.set(sentinelRect.width);\n stickyTop.set(rootTop);\n if (nextSticky !== isSticky.get()) {\n isSticky.set(nextSticky);\n }\n };\n\n const scheduleUpdate = () => {\n if (rafId != null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n updateSticky();\n });\n };\n\n const addListenerTarget = (target) => {\n if (!target || listenerTargets.has(target)) return;\n listenerTargets.add(target);\n target.addEventListener('scroll', scheduleUpdate, { passive: true });\n };\n\n const initListeners = () => {\n if (listening) return;\n const sentinelEl = sentinelNode.get();\n const listEl = listNode.get();\n if (!sentinelEl || !listEl) return;\n if (typeof window === 'undefined') return;\n listening = true;\n updateSticky();\n addListenerTarget(window);\n window.addEventListener('resize', scheduleUpdate);\n getScrollParents(sentinelEl).forEach(addListenerTarget);\n };\n\n after(listNode, sentinelNode, sticky).change(initListeners);\n\n if (!initScheduled && typeof window !== 'undefined') {\n initScheduled = true;\n setTimeout(() => initListeners(), 0);\n }\n\n const stickyStyle = after(isSticky, stickyLeft, stickyWidth, stickyTop).compute((values) => {\n const [active, left, width, top] = values;\n if (!active) {\n return {\n position: 'static',\n top: 'auto',\n left: 'auto',\n width: 'auto',\n zIndex: 'auto',\n background: 'transparent',\n };\n }\n return {\n position: 'fixed',\n top: `${top}px`,\n left: `${left}px`,\n width: `${width}px`,\n background: 'var(--g-ui-surface)',\n zIndex: 100,\n };\n });\n\n const spacerStyle = after(isSticky, spacerHeight).compute((values) => {\n const [active, height] = values;\n return { height: active ? `${height}px` : '0px' };\n });\n\n return Div(\n Div(\n {\n className: cx(\n 'g-ui-tabs',\n classMap(orientation, { vertical: 'g-ui-tabs-vertical' }),\n classVar('g-ui-tabs-variant-', variant, 'default'),\n props.className ?? className\n ),\n },\n Div({ node: sentinelNode }),\n Div({ style: spacerStyle }),\n Div(\n { node: listNode, className: 'g-ui-tabs-list', style: stickyStyle },\n list(tabs, (tab) =>\n Button(\n {\n className: after(currentState, tab.value).compute(([v, tabVal]) =>\n cx('g-ui-tabs-tab', tabVal === v && 'g-ui-tabs-tab-active')\n ),\n onClick: () => setValue(tab.value.get()),\n },\n tab.label\n )\n )\n ),\n Div(\n { className: 'g-ui-tabs-panel' },\n when(currentState, () => tabs.get()?.find((tab) => tab.value === currentState.get())?.content ?? null)\n )\n )\n );\n}\n", "import { Table as HtmlTable, Thead, Tbody, Tr, Th, Td } from '@granularjs/core';\nimport { cx, splitPropsChildren, classFlag } from '../utils.js';\n\nexport function Table(...args) {\n const { props } = splitPropsChildren(args, { headers: [], rows: [] });\n const {\n headers,\n rows,\n striped,\n highlightOnHover,\n withBorder,\n withColumnBorders,\n className,\n style,\n ...rest\n } = props;\n return HtmlTable(\n {\n ...rest,\n className: cx(\n 'g-ui-table',\n classFlag('g-ui-table-striped', striped),\n classFlag('g-ui-table-hover', highlightOnHover),\n classFlag('g-ui-table-with-border', withBorder),\n classFlag('g-ui-table-column-borders', withColumnBorders),\n className\n ),\n },\n headers.length\n ? Thead(Tr(headers.map((header) => Th(header))))\n : null,\n Tbody(\n rows.map((row) =>\n Tr(\n Array.isArray(row)\n ? row.map((cell) => Td(cell))\n : Object.values(row).map((cell) => Td(cell))\n )\n )\n )\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { state, when, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveBool } from '../utils.js';\n\nexport function Accordion(...args) {\n const { props, children } = splitPropsChildren(args, { opened: false });\n const { opened, className, ...rest } = props;\n const openedState = state(resolveBool(opened));\n\n after(opened).change((next) => {\n openedState.set(resolveBool(next));\n });\n\n const toggle = () => {\n openedState.set(!openedState.get());\n };\n\n const header = children[0];\n const content = children[1];\n return Div(\n { ...rest, className: cx('g-ui-accordion', className) },\n Div({ className: 'g-ui-accordion-header', onClick: toggle }, header),\n when(openedState, () => Div({ className: 'g-ui-accordion-content' }, content))\n );\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Tooltip(...args) {\n const { props, children } = splitPropsChildren(args);\n const { label, className, style } = props;\n return Span(\n { className: cx('g-ui-tooltip', className) },\n children,\n Span({ className: 'g-ui-tooltip-content' }, label)\n );\n}\n", "import { Div, when, after, state, portal } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue } from '../utils.js';\n\nexport const menuControlStore = state({ currentOpenState: null })\n\nexport function Menu(...args) {\n const mainNode = state();\n const dropdownNode = state();\n const dropdownStyle = state({});\n const { props, rawProps, children } = splitPropsChildren(args, { position: 'right' });\n const { opened, content, position, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(opened) ?? false);\n after(opened).change((value) => {\n const resolved = resolveValue(value);\n if (resolved == null) return;\n currentState.set(!!resolved);\n if (!!resolved) {\n closeOldSetCurrent()\n }\n });\n\n const closeOldSetCurrent = () => {\n if (menuControlStore.get().currentOpenState === currentState) return;\n menuControlStore.get().currentOpenState?.set(false)\n menuControlStore.set().currentOpenState = currentState;\n }\n\n if (opened.get()) {\n closeOldSetCurrent()\n }\n\n const parsePosition = (value) => {\n const raw = String(value ?? 'right').toLowerCase();\n const parts = raw.split('-').filter(Boolean);\n if (parts.length === 1) {\n const single = parts[0];\n if (single === 'top' || single === 'bottom') return { placement: single, align: 'center' };\n if (single === 'left' || single === 'right') return { placement: 'bottom', align: single };\n if (single === 'center') return { placement: 'bottom', align: 'center' };\n return { placement: 'bottom', align: 'right' };\n }\n const [first, second] = parts;\n if (first === 'top' || first === 'bottom') {\n return { placement: first, align: second || 'center' };\n }\n if (first === 'left' || first === 'right') {\n return { placement: first, align: second || 'center' };\n }\n return { placement: 'bottom', align: 'right' };\n };\n\n const updatePosition = () => {\n const trigger = mainNode.get();\n const dropdown = dropdownNode.get();\n if (!trigger || !dropdown) return;\n if (typeof window === 'undefined') return;\n const rect = trigger.getBoundingClientRect();\n const dropdownRect = dropdown.getBoundingClientRect();\n const positionValue = resolveValue(position) ?? 'right';\n const spaceVar = getComputedStyle(document.documentElement).getPropertyValue('--g-ui-space-20');\n const margin = Number.parseFloat(spaceVar) || 20;\n const viewportWidth = window.innerWidth || 0;\n const viewportHeight = window.innerHeight || 0;\n const maxLeft = Math.max(margin, viewportWidth - dropdownRect.width - margin);\n const maxTop = Math.max(margin, viewportHeight - dropdownRect.height - margin);\n const { placement, align } = parsePosition(positionValue);\n const gap = 8;\n let top = rect.bottom + gap;\n let left = rect.left;\n if (placement === 'top' || placement === 'bottom') {\n top = placement === 'top' ? rect.top - dropdownRect.height - gap : rect.bottom + gap;\n if (align === 'center') {\n left = rect.left + rect.width / 2 - dropdownRect.width / 2;\n } else if (align === 'right') {\n left = rect.right - dropdownRect.width;\n } else {\n left = rect.left;\n }\n } else if (placement === 'left' || placement === 'right') {\n left = placement === 'left' ? rect.left - dropdownRect.width - gap : rect.right + gap;\n if (align === 'center') {\n top = rect.top + rect.height / 2 - dropdownRect.height / 2;\n } else if (align === 'bottom') {\n top = rect.bottom - dropdownRect.height;\n } else {\n top = rect.top;\n }\n }\n left = Math.max(margin, Math.min(left, maxLeft));\n top = Math.max(margin, Math.min(top, maxTop));\n dropdownStyle.set({\n top: `${top}px`,\n left: `${left}px`,\n });\n };\n\n const setOpen = (next) => {\n currentState.set(next);\n onChange?.(next);\n\n if (next) {\n closeOldSetCurrent()\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(() => updatePosition());\n } else {\n setTimeout(() => updatePosition(), 0);\n }\n }\n };\n const toggle = () => setOpen(!currentState.get())\n const close = () => setOpen(false)\n\n return Div(\n { ...rest, node: mainNode, className: cx('g-ui-menu', className) },\n Div({ onClick: toggle }, children),\n when(currentState, () =>\n portal(\n Div(\n Div({ className: 'g-ui-menu-overlay', onClick: close }),\n Div(\n { className: 'g-ui-menu-dropdown', node: dropdownNode, style: dropdownStyle },\n content\n )\n )\n )\n )\n );\n}\n", "import { Div, portal, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classMap } from '../utils.js';\n\nexport function Drawer(...args) {\n const { props, children } = splitPropsChildren(args, {\n position: 'right',\n size: 'md',\n overlay: 'normal',\n shadowed: true,\n });\n const { opened, onClose, position, size, overlay, shadowed, className, style } = props;\n return when(opened, () =>\n portal(\n Div(\n { className: cx('g-ui-drawer-overlay', classVar('g-ui-drawer-overlay-', overlay, 'normal')), onClick: onClose },\n Div(\n {\n className: cx(\n 'g-ui-drawer',\n classMap(shadowed, { true: 'g-ui-drawer-shadowed' }, true),\n classVar('g-ui-drawer-', position, 'right'),\n classVar('g-ui-drawer-size-', size, 'md'),\n className\n ),\n onClick: (ev) => ev.stopPropagation(),\n },\n children\n )\n )\n )\n );\n}\n", "import { Button, Div, Span, when, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveBool } from '../utils.js';\nimport { Loading } from './Loading.js';\nimport { closeSvg } from '../theme/icons.js';\n\nexport function Notification(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { color: 'blue', withCloseButton: true });\n const {\n title,\n color,\n icon,\n loading,\n withCloseButton,\n withBorder,\n className,\n style,\n } = props;\n const { onClose } = rawProps;\n const showLoader = after(icon, loading).compute(([nextIcon, nextLoading]) => !nextIcon && !!nextLoading);\n const withIcon = after(icon, loading).compute(([nextIcon, nextLoading]) => !!nextIcon || !!nextLoading);\n return Div(\n {\n className: cx(\n 'g-ui-notification',\n [withBorder, 'g-ui-notification-bordered'],\n [color, (value) => `g-ui-notification-${value}`],\n [withIcon, 'g-ui-notification-with-icon'],\n className\n ),\n },\n when(icon, () => Span({ className: 'g-ui-notification-icon' }, icon)),\n when(showLoader, () => Loading({ size: 'sm', className: 'g-ui-notification-loader' })),\n Div(\n { className: 'g-ui-notification-body' },\n when(title, () => Div({ className: 'g-ui-notification-title' }, title)),\n children\n ),\n when(withCloseButton, () =>\n Button({ type: 'button', className: 'g-ui-notification-close', onClick: () => onClose?.() }, Span({ innerHTML: closeSvg }))\n )\n );\n}\n", "import { Div, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classFlag, classVar } from '../utils.js';\nimport { Text } from './Text.js';\n\nexport function Divider(...args) {\n const { props } = splitPropsChildren(args, { labelPosition: 'center' });\n const { label, labelPosition, vertical, className, ...rest } = props;\n\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-divider',\n classFlag('label', label),\n classVar('g-ui-divider-label-', labelPosition, 'center'),\n classFlag('g-ui-divider-vertical', vertical),\n className\n ),\n },\n when(label, () => Text({ className: 'g-ui-divider-label-text', size: 'sm' }, label))\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Paper(...args) {\n const { props, children } = splitPropsChildren(args, { padding: 'md', radius: 'md', shadow: 'none' });\n const { padding, radius, shadow, className, ...rest } = props;\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-paper',\n [padding, (value) => `g-ui-card-padding-${value}`],\n [radius, (value) => `g-ui-card-radius-${value}`],\n [shadow, (value) => `g-ui-card-shadow-${value}`],\n className\n ),\n },\n children\n );\n}\n", "import { Button, Div, Span, after, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveBool } from '../utils.js';\n\nexport function Alert(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { color: 'blue' });\n const {\n title,\n color,\n icon,\n withCloseButton,\n className,\n ...rest\n } = props;\n const { onClose } = rawProps;\n\n const hasContent = after(title, withCloseButton).compute(([title, showClose]) => {\n return title || showClose\n });\n const hasIcon = after(icon).compute((icon) => {\n return icon !== undefined\n });\n\n return Div(\n { ...rest, className: cx('g-ui-alert', [color, (value) => `g-ui-alert-${value}`], className) },\n Div(\n { className: 'g-ui-alert-header' },\n when(icon, () => Span({ className: 'g-ui-alert-icon' }, icon)),\n when(title, () => Div({ className: 'g-ui-alert-title' }, title)),\n when(withCloseButton, () => Button({ type: 'button', className: 'g-ui-alert-close', onClick: () => onClose?.() }, '\u00D7'))\n ),\n children\n );\n}\n", "import { Div, Img, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Avatar(...args) {\n const { props, children } = splitPropsChildren(args, { size: 'md', alt: '' });\n const { src, size, alt, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-avatar', [size, (value) => `g-ui-avatar-size-${value}`], className) },\n when(src, () => Img({ className: 'g-ui-avatar-img', src, alt }), () => {\n return children;\n })\n );\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Kbd(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Span({ ...rest, className: cx('g-ui-kbd', className) }, children);\n}\n", "import { Code as HtmlCode } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Code(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return HtmlCode({ ...rest, className: cx('g-ui-code', className) }, children);\n}\n", "import { Blockquote as HtmlBlockquote } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Blockquote(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return HtmlBlockquote({ ...rest, className: cx('g-ui-blockquote', className) }, children);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function SimpleGrid(...args) {\n const { props, children } = splitPropsChildren(args, { cols: 3, gap: 'md' });\n const { cols, gap, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-grid', [gap, (value) => `g-ui-gap-${value}`], [cols, (value) => `g-ui-grid-cols-${value}`], className) },\n children\n );\n}\n", "import { Ul, Ol, Li, Div, Span, after, when, isSignal, isState, isStatePath, isComputed } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag, classMap } from '../utils.js';\n\nexport function List(...args) {\n const { props, children } = splitPropsChildren(args, { type: 'none', size: 'md' });\n const { type, size, withPadding, className, ...rest } = props;\n const typeClass = classMap(type, {\n ordered: 'g-ui-list-ordered',\n unordered: 'g-ui-list-unordered',\n none: 'g-ui-list-none',\n });\n const isOrdered = after(type).compute((next) => next === 'ordered');\n const isListNode = (value) =>\n value && typeof value === 'object' && typeof value.tagName === 'string' &&\n (value.tagName.toLowerCase() === 'ul' || value.tagName.toLowerCase() === 'ol');\n const isListItemNode = (value) =>\n value && typeof value === 'object' && typeof value.tagName === 'string' &&\n value.tagName.toLowerCase() === 'li';\n const wrapChild = (child) => {\n const wrapValue = (value) => {\n if (value == null || value === false) return null;\n if (Array.isArray(value)) return value.map((item) => wrapValue(item));\n if (isListItemNode(value)) return value;\n if (isListNode(value)) return Li({ className: 'g-ui-list-nested-item' }, value);\n return Li(Span({ className: 'g-ui-list-item-shell' }, value));\n };\n if (isSignal(child) || isState(child) || isStatePath(child) || isComputed(child)) {\n return after(child).compute((next) => wrapValue(next));\n }\n return wrapValue(child);\n };\n const listChildren = children.map((child) => wrapChild(child));\n const listProps = {\n ...rest,\n className: cx(\n 'g-ui-list',\n classVar('g-ui-list-size-', size, 'md'),\n classFlag('g-ui-list-with-padding', withPadding),\n typeClass,\n className\n ),\n };\n return when(\n isOrdered,\n () => Ol(listProps, listChildren),\n () => Ul(listProps, listChildren)\n );\n}\n\nexport function ListItem(...args) {\n const { props, children } = splitPropsChildren(args, { withBorder: false });\n const { leftSection, rightSection, title, body, withBorder, className, ...rest } = props;\n const hasStructured = after(title, body).compute(([nextTitle, nextBody]) => !!nextTitle || !!nextBody);\n return Li(\n {\n ...rest,\n className: cx('g-ui-list-item', classFlag('g-ui-list-item-border', withBorder), className),\n },\n Div(\n { className: 'g-ui-list-item-shell' },\n when(leftSection, () => Span({ className: 'g-ui-list-item-section g-ui-list-item-section-left' }, leftSection)),\n when(\n hasStructured,\n () =>\n Div(\n { className: 'g-ui-list-item-content' },\n when(title, () => Div({ className: 'g-ui-list-item-title' }, title)),\n when(body, () => Div({ className: 'g-ui-list-item-body' }, body))\n ),\n () => children\n ),\n when(rightSection, () => Span({ className: 'g-ui-list-item-section g-ui-list-item-section-right' }, rightSection))\n )\n );\n}\n\nList.Item = ListItem;\n", "import { A } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Anchor(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return A({ ...rest, className: cx('g-ui-anchor', className) }, children);\n}\n", "import { Img } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Image(...args) {\n const { props } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Img({ ...rest, className: cx('g-ui-image', className) });\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Icon(...args) {\n const { props, children } = splitPropsChildren(args, { size: 'md' });\n \n return Span(\n {\n ...props,\n className: cx(\n 'g-ui-icon',\n classVar('g-ui-icon-size-', props.size, 'md'),\n classVar('g-ui-icon-color-', props.color),\n props.className\n ),\n },\n ...children\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Progress(...args) {\n const { props } = splitPropsChildren(args, { value: 0, color: 'primary', size: 'md' });\n const { value, color, size, className, ...rest } = props;\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-progress',\n classVar('g-ui-progress-size-', size, 'md'),\n [value, (next) => {\n const pct = Math.max(0, Math.min(100, Number(next) || 0));\n const bucket = Math.round(pct / 5) * 5;\n return `g-ui-progress-${bucket}`;\n }],\n [color, (next) => {\n if (next) return `g-ui-progress-${next}`;\n return '';\n }],\n className\n ),\n },\n Div({ className: 'g-ui-progress-bar' })\n );\n}\n", "import { Div, after, state, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag, resolveBool, resolveValue } from '../utils.js';\n\nexport function Slider(...args) {\n const { props, rawProps } = splitPropsChildren(args, {\n size: 'md',\n min: 0,\n max: 100,\n step: 1,\n });\n const { onChange } = rawProps;\n const {\n value,\n marks,\n size,\n min,\n max,\n step,\n disabled,\n className,\n ...rest\n } = props;\n const currentState = state(resolveValue(value ?? min));\n after(value).change((next) => {\n if (next == null) return;\n currentState.set(resolveValue(next));\n });\n const getBounds = () => {\n const minValue = Number(resolveValue(min));\n const maxValue = Number(resolveValue(max));\n if (!Number.isFinite(minValue) || !Number.isFinite(maxValue)) {\n return { minValue: 0, maxValue: 100 };\n }\n return { minValue: Math.min(minValue, maxValue), maxValue: Math.max(minValue, maxValue) };\n };\n const getStep = () => {\n const stepValue = Number(resolveValue(step));\n if (Number.isFinite(stepValue) && stepValue > 0) return stepValue;\n return 1;\n };\n const setValue = (next) => {\n const { minValue, maxValue } = getBounds();\n const stepValue = getStep();\n const clamped = Math.max(minValue, Math.min(maxValue, Number(next)));\n const stepped = Math.round((clamped - minValue) / stepValue) * stepValue + minValue;\n if (stepped === currentState.get()) return;\n currentState.set(stepped);\n onChange?.(stepped);\n };\n const percent = after(currentState).compute((v) => {\n const { minValue, maxValue } = getBounds();\n const range = maxValue - minValue;\n if (range <= 0) return 0;\n const pct = ((Number(v ?? minValue) - minValue) / range) * 100;\n return Math.max(0, Math.min(100, pct));\n });\n const updateFromEvent = (ev, getRect) => {\n const rect = getRect?.();\n if (!rect || rect.width === 0) return;\n const x = Math.min(Math.max(ev.clientX - rect.left, 0), rect.width);\n const ratio = x / rect.width;\n const { minValue, maxValue } = getBounds();\n setValue(minValue + ratio * (maxValue - minValue));\n };\n const startDrag = (ev) => {\n if (resolveBool(disabled)) return;\n ev.preventDefault?.();\n const trackEl = ev.currentTarget;\n const getRect = () => trackEl.getBoundingClientRect();\n trackEl.setPointerCapture?.(ev.pointerId);\n updateFromEvent(ev, getRect);\n const handleMove = (moveEv) => updateFromEvent(moveEv, getRect);\n const handleUp = () => {\n trackEl.releasePointerCapture?.(ev.pointerId);\n window.removeEventListener('pointermove', handleMove);\n window.removeEventListener('pointerup', handleUp);\n };\n window.addEventListener('pointermove', handleMove);\n window.addEventListener('pointerup', handleUp);\n };\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-slider',\n classVar('g-ui-slider-size-', size, 'md'),\n classFlag('g-ui-slider-disabled', disabled),\n className\n ),\n },\n Div(\n { className: 'g-ui-slider-track', onPointerDown: startDrag },\n Div({\n className: 'g-ui-slider-bar',\n style: after(percent).compute((p) => ({ width: `${p}%` })),\n }),\n Div({\n className: 'g-ui-slider-thumb',\n style: after(percent).compute((p) => ({ left: `${p}%` })),\n })\n ),\n when(marks, () => Div(\n { className: 'g-ui-slider-marks' },\n marks.map((mark) => SliderMark({ mark, getBounds }))\n ))\n );\n}\n\nexport const SliderMark = ({ mark, getBounds }) => {\n const { minValue, maxValue } = getBounds();\n const range = maxValue - minValue;\n\n const value = mark.value ?? mark;\n const label = mark.label ?? String(mark.value) ?? value;\n\n const markValue = Number(value);\n let pct = 0;\n if (range > 0) pct = ((markValue - minValue) / range) * 100;\n return Div(\n {\n className: 'g-ui-slider-mark',\n style: { left: `${Math.max(0, Math.min(100, pct))}%` },\n },\n Div({ className: 'g-ui-slider-mark-label' }, label)\n );\n}\n", "import { Div, after } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Skeleton(...args) {\n const { props } = splitPropsChildren(args, { height: 'md', width: 'full' });\n const { height, width, className, ...rest } = props;\n const customStyle = after(height, width).compute(([h, w]) => {\n const style = {};\n if (!isNaN(h)) style.height = `${h}px`;\n if (!isNaN(w)) style.width = `${w}px`;\n return style;\n });\n\n return Div({\n ...rest,\n style: { width: customStyle.width, height: customStyle.height, ...(rest.style || {}) },\n className: cx(\n 'g-ui-skeleton',\n [height, (value) => `g-ui-skeleton-h-${value}`],\n [width, (value) => `g-ui-skeleton-w-${value}`],\n className\n ),\n });\n}\n", "import { Button, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Chip(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { size: 'md', variant: 'filled' });\n const { checked, size, variant, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(!!checked);\n after(checked).change((next) => {\n if (next == null) return;\n currentState.set(!!next);\n });\n const setChecked = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n return Button(\n {\n ...rest,\n type: 'button',\n className: cx(\n 'g-ui-chip',\n classVar('g-ui-chip-size-', size, 'md'),\n classVar('g-ui-chip-variant-', variant, 'filled'),\n after(currentState).compute((current) => {\n if (current) return 'g-ui-chip-active';\n return '';\n }),\n className\n ),\n onClick: () => setChecked(!currentState.get()),\n },\n children\n );\n}\n", "import { Div, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\n\nexport function SegmentedControl(...args) {\n const { props, rawProps } = splitPropsChildren(args, { data: [], size: 'sm' });\n const { value, data, size, scroll, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(value));\n after(value).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(resolved);\n });\n const setValue = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n return Div(\n { ...rest, className: cx(scroll && 'g-ui-segmented-scroll') },\n Div(\n { className: cx('g-ui-segmented', classVar('g-ui-segmented-size-', size, 'sm'), props.className ?? className) },\n data.map((item) =>\n Div(\n {\n className: cx(\n 'g-ui-segmented-item',\n after(currentState).compute((current) => {\n if (item.value === current) return 'g-ui-segmented-active';\n return '';\n })\n ),\n onClick: () => setValue(item.value),\n },\n item.label\n )\n )\n )\n );\n}\n", "import { Button, Div, state, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\n\nexport function Pagination(...args) {\n const { props, rawProps } = splitPropsChildren(args, { total: 1, size: 'md' });\n const { page, total, size, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(page ?? 1));\n after(page).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(resolved);\n });\n const setPage = (next) => {\n const totalValue = Number(resolveValue(total)) || 1;\n const clamped = Math.max(1, Math.min(totalValue, next));\n currentState.set(clamped);\n onChange?.(clamped);\n };\n const items = [];\n const totalValue = Number(resolveValue(total)) || 1;\n for (let i = 1; i <= totalValue; i += 1) items.push(i);\n return Div(\n {\n ...rest,\n className: cx('g-ui-pagination', classVar('g-ui-pagination-size-', size, 'md'), props.className ?? className),\n },\n Button(\n {\n className: 'g-ui-pagination-item',\n onClick: () => setPage((currentState.get?.() ?? currentState) - 1),\n disabled: after(currentState).compute((v) => v <= 1),\n },\n '<'\n ),\n items.map((i) =>\n Button(\n {\n className: after(currentState).compute((v) =>\n cx('g-ui-pagination-item', i === v && 'g-ui-pagination-item-active')\n ),\n onClick: () => setPage(i),\n },\n String(i)\n )\n ),\n Button(\n {\n className: 'g-ui-pagination-item',\n onClick: () => setPage((currentState.get?.() ?? currentState) + 1),\n disabled: after(currentState).compute((v) => v >= total),\n },\n '>'\n )\n );\n}\n", "import { Div, Input, Label, Span, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Radio(...args) {\n const { props } = splitPropsChildren(args, { size: 'md' });\n const { label, description, size, className, inputProps, ...rest } = props;\n const control = Label(\n { className: 'g-ui-radio-control' },\n Input({\n type: 'radio',\n className: cx('g-ui-radio-input', classVar('g-ui-radio-size-', size, 'md'), inputProps?.className),\n ...rest,\n }),\n when(label, () => Span({ className: 'g-ui-radio-label' }, label))\n );\n\n return Div(\n { className: cx('g-ui-radio', classVar('g-ui-radio-size-', size, 'md'), className) },\n control,\n when(description, () => Span({ className: 'g-ui-radio-description' }, description))\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function RadioGroup(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-stack g-ui-gap-sm', className) }, children);\n}\n", "import { Nav, Span } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Breadcrumbs(...args) {\n const { props, children } = splitPropsChildren(args, { separator: '/' });\n const { separator, className, ...rest } = props;\n const items = [];\n if (Array.isArray(children)) items.push(...children);\n else items.push(children);\n const filtered = items.filter(Boolean);\n const nodes = [];\n filtered.forEach((item, idx) => {\n nodes.push(item);\n if (idx < filtered.length - 1) {\n nodes.push(Span({ className: 'g-ui-breadcrumbs-separator' }, separator));\n }\n });\n return Nav({ ...rest, className: cx('g-ui-breadcrumbs', className) }, nodes);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Center(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-center', className) }, children);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Space(...args) {\n const { props } = splitPropsChildren(args, { size: 'md' });\n const { size, className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-space', [size, (value) => `g-ui-space-${value}`], className) });\n}\n", "import { Div, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Collapse(...args) {\n const { props, children } = splitPropsChildren(args);\n const { opened, className, ...rest } = props;\n return when(opened, () => Div({ ...rest, className: cx('g-ui-collapse', className) }, children));\n}\n", "import { Button } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function ActionIcon(...args) {\n const { props, children } = splitPropsChildren(args, { size: 'md', variant: 'filled' });\n const { size, variant, className, ...rest } = props;\n return Button(\n {\n ...rest,\n type: 'button',\n className: cx(\n 'g-ui-action-icon',\n classVar('g-ui-action-icon-size-', size, 'md'),\n classVar('g-ui-action-icon-', variant, 'filled'),\n className\n ),\n },\n children\n );\n}\n", "import { Div, when, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue } from '../utils.js';\n\nexport function Popover(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { position: 'left' });\n const { opened, position, content, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(opened) ?? false);\n after(opened).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(!!resolved);\n });\n\n const setOpen = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n\n return Div(\n { ...rest, className: cx('g-ui-popover', props.className ?? className) },\n Div({ onClick: () => setOpen(!currentState.get()) }, children),\n when(\n currentState,\n () =>\n Div(\n {\n className: cx(\n 'g-ui-popover-dropdown',\n position === 'right' && 'g-ui-popover-right',\n position === 'center' && 'g-ui-popover-center'\n ),\n },\n content\n )\n )\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function HoverCard(...args) {\n const { props, children } = splitPropsChildren(args, { position: 'left' });\n const { position, content, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-hover-card', className) },\n children,\n Div({\n className: cx(\n 'g-ui-hover-card-dropdown',\n [position, (value) => {\n if (value === 'right') return 'g-ui-hover-card-right';\n return '';\n }],\n [position, (value) => {\n if (value === 'center') return 'g-ui-hover-card-center';\n return '';\n }]\n ),\n }, content)\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Affix(...args) {\n const { props, children } = splitPropsChildren(args, { position: 'bottom-right' });\n const { position, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-affix', [position, (value) => `g-ui-affix-${value}`], className) },\n children\n );\n}\n", "import { Fieldset as HtmlFieldset, Legend, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Fieldset(...args) {\n const { props, children } = splitPropsChildren(args);\n const { legend, className, ...rest } = props;\n return HtmlFieldset(\n { ...rest, className: cx('g-ui-fieldset', className) },\n when(legend, () => Legend({ className: 'g-ui-legend' }, legend)),\n children\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function AppBar(...args) {\n const { props, children } = splitPropsChildren(args, { position: 'sticky' });\n const { position, className, ...rest } = props;\n return Div(\n {\n ...rest,\n className: cx('g-ui-appbar', classVar('g-ui-appbar-', position, 'sticky'), className),\n },\n children\n );\n}\n", "import { Div, portal, after, isSignal, isState, isStatePath, state, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue, resolveBool } from '../utils.js';\n\nexport function Sidebar(...args) {\n const { props, children } = splitPropsChildren(args, {\n position: 'left',\n size: 'md',\n blur: true,\n fixed: false,\n minWidth: 'button',\n });\n \n return when(props.fixed,\n () => FixedSidebar(props, children), \n () => DrawerSidebar(props, children)\n );\n}\n\nconst DrawerSidebar = (props, children)=>{\n const {\n open,\n onClose,\n position,\n size,\n blur,\n fixed,\n minWidth,\n className,\n ...rest\n } = props;\n const mounted = state(false);\n const openState = state(false);\n const transitionMs = 220;\n \n const applyOpen = (next) => {\n if (next) {\n mounted.set(true);\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(() => openState.set(true));\n } else {\n setTimeout(() => openState.set(true), 0);\n }\n return;\n }\n openState.set(false);\n setTimeout(() => mounted.set(false), transitionMs);\n };\n\n applyOpen(!!open.get());\n after(open).change((next) => applyOpen(!!next));\n\n const overlayClass = after(openState, blur).compute((values) => {\n const [open, blur] = values;\n \n return cx(\n 'g-ui-sidebar-overlay',\n open && 'g-ui-sidebar-overlay-open',\n !blur && 'g-ui-sidebar-overlay-noblur'\n )\n });\n\n const drawerClass = after(\n size,\n position,\n openState,\n className\n ).compute((values) => {\n const [size, position, open, className] = values;\n const positionClass = position === 'right'\n ? 'g-ui-sidebar-drawer-right g-ui-sidebar-position-right'\n : 'g-ui-sidebar-drawer-left';\n return cx(\n 'g-ui-sidebar',\n 'g-ui-sidebar-drawer',\n `g-ui-sidebar-size-${size}`,\n positionClass,\n open && 'g-ui-sidebar-drawer-open',\n resolveValue(className)\n )\n });\n\n return when(mounted, () =>\n portal(\n Div({ className: overlayClass, onClick: onClose },\n Div({ className: drawerClass, onClick: (ev) => ev.stopPropagation() },\n children\n )\n )\n )\n )\n}\n\nconst FixedSidebar = (props, children)=>{\n const {\n open,\n position,\n size,\n minWidth,\n className,\n ...rest\n } = props;\n \n const classNameComposition = after(\n size,\n position,\n open,\n minWidth,\n className,\n ).compute((values)=>{\n const [size, position, open, minWidth, className] = values;\n \n const minWidthValue = minWidth || 'button';\n let minWidthClass = null;\n if (minWidthValue === 'button') minWidthClass = 'g-ui-sidebar-min-button';\n else if (minWidthValue === 'xs') minWidthClass = 'g-ui-sidebar-min-xs';\n else if (minWidthValue === 'sm') minWidthClass = 'g-ui-sidebar-min-sm';\n else if (minWidthValue === 'md') minWidthClass = 'g-ui-sidebar-min-md';\n\n const classNameString = cx(\n 'g-ui-sidebar g-ui-sidebar-fixed',\n `g-ui-sidebar-size-${size||'md'}`,\n minWidthClass,\n open && 'g-ui-sidebar-fixed-open',\n className\n );\n return classNameString;\n });\n \n return Div(\n {\n ...rest,\n className: classNameComposition,\n },\n children\n );\n}", "import { Div, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Timeline(...args) {\n const { props } = splitPropsChildren(args, { items: [] });\n const { items, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-timeline', className) },\n items.map((item) =>\n Div(\n { className: 'g-ui-timeline-item' },\n Div({ className: 'g-ui-timeline-dot' }),\n Div(\n { className: 'g-ui-timeline-content' },\n when(item.title, () => Div({ className: 'g-ui-timeline-title' }, item.title)),\n when(item.description, () => Div({ className: 'g-ui-timeline-desc' }, item.description)),\n item.content\n )\n )\n )\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Stepper(...args) {\n const { props } = splitPropsChildren(args, { active: 0, items: [] });\n const { active, items, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-stepper', className) },\n items.map((item, idx) =>\n Div(\n { className: cx('g-ui-stepper-item', [active, (value) => {\n if (idx === value) return 'g-ui-stepper-active';\n return '';\n }]) },\n Div({ className: 'g-ui-stepper-index' }, String(idx + 1)),\n Div({ className: 'g-ui-stepper-label' }, item.label)\n )\n )\n );\n}\n", "import { Span, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\n\nexport function Rating(...args) {\n const { props, rawProps } = splitPropsChildren(args, { value: 0, max: 5, size: 'md' });\n const { value, max, size, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(value));\n after(value).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(resolved);\n });\n const setValue = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n const items = [];\n const maxValue = Number(resolveValue(max)) || 0;\n for (let i = 1; i <= maxValue; i += 1) items.push(i);\n return Span(\n {\n ...rest,\n className: cx('g-ui-rating', classVar('g-ui-rating-size-', size, 'md'), props.className ?? className),\n },\n items.map((i) =>\n Span(\n {\n className: cx(\n 'g-ui-rating-item',\n after(currentState).compute((current) => {\n if (i <= current) return 'g-ui-rating-item-active';\n return '';\n })\n ),\n onClick: () => setValue(i),\n },\n '\u2605'\n )\n )\n );\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Tag(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Span({ ...rest, className: cx('g-ui-tag', className) }, children);\n}\n", "import { Button, Div, state, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue, classVar } from '../utils.js';\nimport { forwardSvg, backwardSvg } from '../theme/icons.js';\nimport { ActionIcon } from './ActionIcon.js';\nimport { Icon } from './Icon.js';\n\nconst weekDays = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n\nexport function Calendar(...args) {\n const { props, rawProps } = splitPropsChildren(args, { size: 'md' });\n const { value, className, size, ...rest } = props;\n const { onChange } = rawProps;\n const resolveDate = (next) => {\n const resolved = resolveValue(next);\n if (resolved instanceof Date) return resolved;\n if (resolved == null) return null;\n const parsed = new Date(resolved);\n if (Number.isNaN(parsed.getTime())) return null;\n return parsed;\n };\n const currentState = state(resolveDate(value) ?? new Date());\n const viewState = state(new Date(currentState.get()));\n\n after(value).change((next) => {\n const resolved = resolveDate(next);\n if (resolved == null) return;\n currentState.set(resolved);\n viewState.set(new Date(resolved));\n });\n\n const createDate = (year, month, day) => {\n const maxDay = new Date(year, month + 1, 0).getDate();\n return new Date(year, month, Math.min(day, maxDay));\n };\n\n const setDate = (day) => {\n const current = viewState.get();\n const next = createDate(current.getFullYear(), current.getMonth(), day);\n currentState.set(next);\n viewState.set(next);\n onChange?.(next);\n };\n\n const shiftMonth = (delta) => {\n const current = viewState.get();\n const next = createDate(current.getFullYear(), current.getMonth() + delta, current.getDate());\n viewState.set(next);\n };\n\n const shiftYear = (delta) => {\n const current = viewState.get();\n const next = createDate(current.getFullYear() + delta, current.getMonth(), current.getDate());\n viewState.set(next);\n };\n\n const monthLabel = after(viewState).compute((current) => current.toLocaleString('default', { month: 'long' }));\n const yearLabel = after(viewState).compute((current) => String(current.getFullYear()));\n const gridCells = after(viewState, currentState).compute(([current, selected]) => {\n const year = current.getFullYear();\n const month = current.getMonth();\n const first = new Date(year, month, 1);\n const start = first.getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const cells = [];\n for (let i = 0; i < start; i += 1) cells.push({ muted: true, label: '' });\n for (let d = 1; d <= daysInMonth; d += 1) cells.push({ label: d });\n return [\n ...weekDays.map((d) => Div({ className: 'g-ui-calendar-cell g-ui-calendar-cell-muted' }, d)),\n ...cells.map((c) =>\n Div(\n {\n className: cx(\n 'g-ui-calendar-cell',\n c.muted && 'g-ui-calendar-cell-muted',\n c.label &&\n selected.getFullYear() === year &&\n selected.getMonth() === month &&\n c.label === selected.getDate() &&\n 'g-ui-calendar-cell-active'\n ),\n onClick: () => c.label && setDate(c.label),\n },\n c.label\n )\n ),\n ];\n });\n\n return Div(\n { ...rest, className: cx('g-ui-calendar', className, classVar('g-ui-calendar-size-', size, 'md')) },\n Div(\n { className: 'g-ui-calendar-header' },\n ActionIcon(\n { size: 'xs', variant: 'subtle', className: 'g-ui-calendar-nav', onClick: () => shiftMonth(-1) },\n Icon({ size: 'sm', className: 'g-ui-calendar-nav-icon', innerHTML: backwardSvg })\n ),\n Div(\n { className: 'g-ui-calendar-title-group' },\n Button({ type: 'button', className: 'g-ui-calendar-title-button', onClick: () => shiftMonth(1) }, monthLabel),\n Button({ type: 'button', className: 'g-ui-calendar-title-button', onClick: () => shiftYear(1) }, yearLabel)\n ),\n ActionIcon(\n { size: 'xs', variant: 'subtle', className: 'g-ui-calendar-nav', onClick: () => shiftMonth(1) },\n Icon({ size: 'sm', className: 'g-ui-calendar-nav-icon', innerHTML: forwardSvg })\n )\n ),\n Div({ className: 'g-ui-calendar-grid' }, gridCells)\n );\n}\n", "import { Div, Span, Input, when, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\nimport { checkedSvg, closeSvg } from '../theme/icons.js';\n\nexport function MultiSelect(...args) {\n const { props, rawProps } = splitPropsChildren(args, { data: [], size: 'md', searchable: true });\n const { value, data, size, className, placeholder, searchable, ...rest } = props;\n const { onChange, onSearchChange } = rawProps;\n const currentState = state(resolveValue(value) ?? []);\n const searchState = state('');\n const openState = state(false);\n const rootNode = state(null);\n\n const normalizeData = (items) => {\n const resolved = resolveValue(items) ?? [];\n return resolved.map((item) => {\n if (typeof item === 'string') return { value: item, label: item };\n if (item && typeof item === 'object') return item;\n return { value: String(item), label: String(item) };\n });\n };\n\n after(value).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(resolved);\n });\n let outsideCleanup = null;\n after(openState).change((next) => {\n if (outsideCleanup) {\n outsideCleanup();\n outsideCleanup = null;\n }\n if (!next) return;\n const handler = (ev) => {\n const root = rootNode.get();\n if (!root) return;\n if (root.contains(ev.target)) return;\n openState.set(false);\n };\n document.addEventListener('mousedown', handler);\n outsideCleanup = () => document.removeEventListener('mousedown', handler);\n });\n after(searchState).change((next) => {\n onSearchChange?.(next);\n });\n\n const toggle = (val) => {\n const selected = currentState.get() ?? [];\n const next = selected.includes(val)\n ? selected.filter((v) => v !== val)\n : selected.concat(val);\n currentState.set(next);\n onChange?.(next);\n };\n\n const normalizedData = after(data).compute((nextData) => normalizeData(nextData));\n const filteredItems = after(normalizedData, searchState).compute(([items, query]) => {\n const q = String(resolveValue(query) ?? '').toLowerCase().trim();\n if (!q) return items;\n return items.filter((item) => String(item.label ?? '').toLowerCase().includes(q));\n });\n const isEmpty = after(currentState, searchState).compute(([nextSelected, query]) => {\n const list = resolveValue(nextSelected) ?? [];\n const q = String(resolveValue(query) ?? '');\n return (!list.length) && !q;\n });\n const isSearchable = after(searchable).compute((next) => !!next);\n\n return Div(\n { ...rest, node: rootNode, className: cx('g-ui-select-multi-root', className) },\n Div(\n {\n className: cx('g-ui-select-multi', classVar('g-ui-select-multi-size-', size, 'md')),\n onClick: () => openState.set(true),\n },\n after(normalizedData, currentState).compute(([items, current]) => {\n const list = resolveValue(current) ?? [];\n return list.map((val) => {\n const match = (items ?? []).find((entry) => entry.value === val);\n const label = match?.label ?? val;\n return Span(\n {\n className: 'g-ui-select-tag',\n },\n Span(\n {\n className: 'g-ui-select-tag-label',\n onClick: (ev) => {\n ev?.stopPropagation?.();\n },\n },\n label\n ),\n Span({\n className: 'g-ui-select-tag-remove',\n innerHTML: closeSvg,\n onClick: (ev) => {\n ev?.stopPropagation?.();\n toggle(val);\n },\n })\n );\n });\n }),\n when(isEmpty, () => Span({ className: 'g-ui-select-multi-placeholder' }, placeholder ?? 'Select...')),\n when(isSearchable, () =>\n Input({\n className: 'g-ui-select-multi-input',\n value: searchState,\n onInput: (ev) => searchState.set(ev.target?.value ?? ''),\n onFocus: () => openState.set(true),\n })\n )\n ),\n when(openState, () =>\n Div(\n { className: 'g-ui-select-dropdown' },\n after(filteredItems).compute((items) => {\n if (!items.length) {\n return Div({ className: 'g-ui-select-item' }, 'Nothing found');\n }\n return items.map((item) =>\n Div(\n {\n className: cx(\n 'g-ui-select-item',\n item.disabled && 'g-ui-select-item-disabled',\n after(currentState).compute((current) => {\n const list = resolveValue(current) ?? [];\n return list.includes(item.value) ? 'g-ui-select-item-active' : '';\n })\n ),\n onClick: () => {\n if (item.disabled) return;\n toggle(item.value);\n },\n },\n Span({\n className: 'g-ui-select-item-check',\n innerHTML: after(currentState).compute((current) => {\n const list = resolveValue(current) ?? [];\n return list.includes(item.value) ? checkedSvg : '';\n }),\n }),\n Span({ className: 'g-ui-select-item-label' }, item.label)\n )\n );\n })\n )\n )\n );\n}\n", "import { Div, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function ToastStack(...args) {\n const { props } = splitPropsChildren(args, { items: [] });\n const { items, className, onClose, timeout, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-toast-stack', className) },\n items.map((item) =>\n Div(\n { className: cx('g-ui-toast', [timeout, 'g-ui-toast-auto']) },\n Div(\n { className: 'g-ui-toast-row' },\n when(item.title, () => Div({ className: 'g-ui-toast-title' }, item.title)),\n when(onClose, () => Div({ className: 'g-ui-toast-close', onClick: () => onClose(item) }, '\u00D7'))\n ),\n item.message\n )\n )\n );\n}\n", "import { Calendar } from './Calendar.js';\nimport { splitPropsChildren } from '../utils.js';\n\nexport function DatePicker(...args) {\n const { props } = splitPropsChildren(args);\n return Calendar(props);\n}\n", "import { Div, when, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\nimport { Notification } from './Notification.js';\n\nexport function Notifications(...args) {\n const { props, rawProps } = splitPropsChildren(args, { items: [], position: 'top-right' });\n const { items, position, className, ...rest } = props;\n const { onRemove } = rawProps;\n const timers = new Map();\n\n const getId = (item, index) => item?.id ?? item?.key ?? index;\n\n const notifications = after(items).compute((nextItems) => {\n const list = resolveValue(nextItems) ?? [];\n const active = new Set();\n list.forEach((item, index) => {\n const id = getId(item, index);\n active.add(id);\n if (item?.autoClose && !timers.has(id)) {\n const timeout = setTimeout(() => {\n timers.delete(id);\n onRemove?.(item);\n }, item.autoClose);\n timers.set(id, timeout);\n }\n });\n for (const [id, handle] of timers.entries()) {\n if (!active.has(id)) {\n clearTimeout(handle);\n timers.delete(id);\n }\n }\n return list.map((item, index) =>\n Notification(\n {\n key: getId(item, index),\n title: item.title,\n color: item.color,\n icon: item.icon,\n loading: item.loading,\n withCloseButton: item.withCloseButton,\n withBorder: item.withBorder,\n onClose: () => {\n item.onClose?.();\n onRemove?.(item);\n },\n },\n item.message ?? item.body ?? item.content ?? item.text\n )\n );\n });\n return Div(\n {\n ...rest,\n className: cx('g-ui-notifications', classVar('g-ui-notifications-position-', position, 'top-right'), className),\n },\n notifications\n );\n}\n", "import { Div, after, state, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag, resolveBool, resolveValue } from '../utils.js';\nimport { SliderMark } from './Slider.js';\n\nexport function RangeSlider(...args) {\n const { props, rawProps } = splitPropsChildren(args, { min: 0, max: 100, step: 1, size: 'md' });\n const { value, marks, min, max, step, size, disabled, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(value ?? [min, max]));\n const getBounds = () => {\n const minValue = Number(resolveValue(min));\n const maxValue = Number(resolveValue(max));\n if (!Number.isFinite(minValue) || !Number.isFinite(maxValue)) {\n return { minValue: 0, maxValue: 100 };\n }\n return { minValue: Math.min(minValue, maxValue), maxValue: Math.max(minValue, maxValue) };\n };\n const getStep = () => {\n const stepValue = Number(resolveValue(step));\n if (Number.isFinite(stepValue) && stepValue > 0) return stepValue;\n return 1;\n };\n const normalize = (vals) => {\n const { minValue, maxValue } = getBounds();\n const stepValue = getStep();\n let list = [minValue, maxValue];\n if (Array.isArray(vals)) list = vals;\n const first = Math.max(minValue, Math.min(maxValue, Number(list[0])));\n const second = Math.max(minValue, Math.min(maxValue, Number(list[1])));\n const low = Math.round(Math.min(first, second) / stepValue) * stepValue;\n const high = Math.round(Math.max(first, second) / stepValue) * stepValue;\n return [low, high];\n };\n after(value).change((next) => {\n if (next == null) return;\n currentState.set(normalize(next));\n });\n const setValue = (next) => {\n const normalized = normalize(next);\n if (\n normalized?.[0] === currentState.get()?.[0] &&\n normalized?.[1] === currentState.get()?.[1]\n ) {\n return;\n }\n currentState.set(normalized);\n onChange?.(normalized);\n };\n const percent = after(currentState).compute((vals) => {\n const { minValue, maxValue } = getBounds();\n const range = maxValue - minValue;\n const [low, high] = normalize(vals);\n if (range <= 0) return { lowPct: 0, highPct: 0 };\n const lowPct = ((low - minValue) / range) * 100;\n const highPct = ((high - minValue) / range) * 100;\n return {\n lowPct: Math.max(0, Math.min(100, lowPct)),\n highPct: Math.max(0, Math.min(100, highPct)),\n };\n });\n const updateFromEvent = (ev, getRect, thumb) => {\n const rect = getRect?.();\n if (!rect || rect.width === 0) return;\n const x = Math.min(Math.max(ev.clientX - rect.left, 0), rect.width);\n const ratio = x / rect.width;\n const { minValue, maxValue } = getBounds();\n const nextValue = minValue + ratio * (maxValue - minValue);\n let current = currentState;\n if (typeof currentState.get === 'function') current = currentState.get();\n const [low, high] = normalize(current);\n if (thumb === 'low') setValue([nextValue, high]);\n else setValue([low, nextValue]);\n };\n const startDrag = (ev, forcedThumb, trackEl) => {\n if (resolveBool(disabled)) return;\n ev.preventDefault?.();\n const track = trackEl || ev.currentTarget;\n const getRect = () => track.getBoundingClientRect();\n const rect = getRect();\n let percentValue = percent;\n if (typeof percent.get === 'function') percentValue = percent.get();\n const { lowPct, highPct } = percentValue;\n const clickPct = ((ev.clientX - rect.left) / rect.width) * 100;\n let thumb = forcedThumb;\n if (!thumb) {\n const isLow = Math.abs(clickPct - lowPct) <= Math.abs(clickPct - highPct);\n thumb = 'high';\n if (isLow) thumb = 'low';\n }\n track.setPointerCapture?.(ev.pointerId);\n updateFromEvent(ev, getRect, thumb);\n const handleMove = (moveEv) => updateFromEvent(moveEv, getRect, thumb);\n const handleUp = () => {\n track.releasePointerCapture?.(ev.pointerId);\n window.removeEventListener('pointermove', handleMove);\n window.removeEventListener('pointerup', handleUp);\n };\n window.addEventListener('pointermove', handleMove);\n window.addEventListener('pointerup', handleUp);\n };\n\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-range-slider',\n classVar('g-ui-slider-size-', size, 'md'),\n classFlag('g-ui-slider-disabled', disabled),\n props.className ?? className\n ),\n },\n Div(\n { className: 'g-ui-slider-track', onPointerDown: (ev) => startDrag(ev) },\n Div({\n className: 'g-ui-slider-bar',\n style: after(percent).compute(({ lowPct, highPct }) => ({\n left: `${lowPct}%`,\n width: `${Math.max(0, highPct - lowPct)}%`,\n })),\n }),\n Div({\n className: 'g-ui-slider-thumb',\n style: after(percent).compute(({ lowPct }) => ({ left: `${lowPct}%` })),\n onPointerDown: (ev) => {\n ev.stopPropagation?.();\n startDrag(ev, 'low', ev.currentTarget.parentElement);\n },\n }),\n Div({\n className: 'g-ui-slider-thumb',\n style: after(percent).compute(({ highPct }) => ({ left: `${highPct}%` })),\n onPointerDown: (ev) => {\n ev.stopPropagation?.();\n startDrag(ev, 'high', ev.currentTarget.parentElement);\n },\n })\n ),\n when(marks, () => Div(\n { className: 'g-ui-slider-marks' },\n marks.map((mark) => SliderMark({ mark, getBounds }))\n ))\n );\n}\n", "import { state, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\nimport { Calendar } from './Calendar.js';\nimport { Popover } from './Popover.js';\nimport { TextInput } from './TextInput.js';\n\nexport function DateInput(...args) {\n const { props, rawProps } = splitPropsChildren(args, { size: 'md', format: { pattern: 'dddd-dd-dd' } });\n const {\n value,\n size,\n calendarSize,\n leftSection,\n rightSection,\n className,\n format,\n minDate,\n maxDate,\n ...rest\n } = props;\n const { onChange } = rawProps;\n\n const resolveDate = (next) => {\n const resolved = resolveValue(next);\n if (resolved instanceof Date) return resolved;\n if (resolved == null || resolved === '') return null;\n const parsed = new Date(resolved);\n if (Number.isNaN(parsed.getTime())) return null;\n return parsed;\n };\n const isSameDay = (left, right) =>\n left &&\n right &&\n left.getFullYear() === right.getFullYear() &&\n left.getMonth() === right.getMonth() &&\n left.getDate() === right.getDate();\n\n const formatDate = (date) => {\n if (!date) return '';\n const year = String(date.getFullYear()).padStart(4, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n };\n\n const parseDate = (text) => {\n const digits = String(text ?? '').replace(/\\D/g, '');\n if (digits.length < 8) return null;\n const year = Number(digits.slice(0, 4));\n const month = Number(digits.slice(4, 6));\n const day = Number(digits.slice(6, 8));\n if (!year || !month || !day) return null;\n const candidate = new Date(year, month - 1, day);\n if (\n candidate.getFullYear() !== year ||\n candidate.getMonth() !== month - 1 ||\n candidate.getDate() !== day\n ) {\n return null;\n }\n const min = resolveDate(minDate);\n if (min && candidate < min) return null;\n const max = resolveDate(maxDate);\n if (max && candidate > max) return null;\n return candidate;\n };\n\n const currentDate = state(resolveDate(value));\n const textValue = state(formatDate(currentDate.get()));\n const opened = state(false);\n\n after(value).change((next) => {\n if (value.get() == next) return;\n const resolved = resolveDate(next);\n if (resolved == null) {\n currentDate.set(null);\n textValue.set('');\n return;\n }\n currentDate.set(resolved);\n textValue.set(formatDate(resolved));\n });\n\n after(textValue).change((next) => {\n const parsed = parseDate(next);\n console.log('parsed', parsed);\n console.log('currentDate', currentDate.get());\n if (!parsed) return;\n if (isSameDay(parsed, currentDate.get())) return;\n currentDate.set(parsed);\n onChange?.(parsed);\n });\n\n const setDate = (next) => {\n if (!next) return;\n if (isSameDay(next, currentDate.get())) return;\n currentDate.set(next);\n textValue.set(formatDate(next));\n onChange?.(next);\n opened.set(false);\n };\n\n return Popover(\n {\n opened,\n onChange: (next) => opened.set(!!next),\n content: Calendar({ size: classVar('', calendarSize, 'xs'), value: currentDate, onChange: setDate }),\n className: 'g-ui-date-input-popover',\n },\n TextInput({\n ...rest,\n size,\n className: cx('g-ui-dateinput', className),\n leftSection,\n rightSection,\n type: 'text',\n inputMode: 'numeric',\n format: format,\n value: textValue,\n onChange: (next) => textValue.set(next),\n })\n );\n}\n", "import { Div, when, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue } from '../utils.js';\n\nexport function Popper(...args) {\n const { props, rawProps, children } = splitPropsChildren(args);\n const { opened, content, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(opened) ?? false);\n after(opened).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(!!resolved);\n });\n\n const setOpen = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n\n return Div(\n { ...rest, className: cx('g-ui-popper', className) },\n Div({ onClick: () => setOpen(!currentState.get()) }, children),\n when(currentState, () => Div({ className: 'g-ui-popper-dropdown' }, content))\n );\n}\n", "import { Button, after, when, state } from '@granularjs/core';\nimport { splitPropsChildren } from '../utils.js';\nimport { TextInput } from './TextInput.js';\n\nexport function PasswordInput(...args) {\n const { props, rawProps } = splitPropsChildren(args, { size: 'md' });\n const { size, className, rightSection, ...rest } = props;\n const { onChange } = rawProps;\n const visible = state(false);\n const inputType = after(visible).compute((next) => {\n if (next) return 'text';\n return 'password';\n });\n const computedRightSection = after(rightSection).compute((next) =>\n next ?? Button(\n { className: 'g-ui-password-toggle', onClick: () => visible.set(!visible.get()) },\n when(visible, () => 'Hide', () => 'Show')\n )\n );\n\n return TextInput({\n ...rest,\n size,\n className,\n onChange,\n rightSection: computedRightSection,\n type: inputType,\n });\n}\n", "import { Span, Div } from '@granularjs/core';\nimport { splitPropsChildren } from '../utils.js';\nimport { searchSvg } from '../theme/icons.js';\nimport { TextInput } from './TextInput.js';\n\nexport function SearchInput(...args) {\n const { props } = splitPropsChildren(args, { size: 'md' });\n const { size, className, ...rest } = props;\n return TextInput({\n ...rest,\n size,\n className,\n leftSection: Div({ className: 'g-ui-search-input-left-section' , innerHTML: searchSvg }),\n type: 'text',\n inputMode: 'search',\n });\n}\n", "import { Button, after, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\nimport { state } from '@granularjs/core';\n\nexport function CopyButton(...args) {\n const { props, children } = splitPropsChildren(args, { value: '', timeout: 1500 });\n const { value, timeout, className, ...rest } = props;\n const copied = state(false);\n const buttonClass = after(copied).compute((next) =>\n cx('g-ui-copy-button', next && 'g-ui-copy-button-done', className)\n );\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(String(value));\n copied.set(true);\n setTimeout(() => copied.set(false), timeout);\n } catch {}\n };\n\n return Button(\n {\n ...rest,\n className: buttonClass,\n onClick: copy,\n type: 'button',\n },\n when(children?.length, () => children, () => when(copied, () => 'Copied', () => 'Copy'))\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function ProgressRing(...args) {\n const { props } = splitPropsChildren(args, { size: 'md' });\n const { size, className, ...rest } = props;\n return Div({\n ...rest,\n className: cx('g-ui-progress-ring', [size, (value) => `g-ui-progress-ring-size-${value}`], className),\n });\n}\n", "import { Div, Button, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Toast(...args) {\n const { props, children } = splitPropsChildren(args);\n const { title, onClose, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-toast', className) },\n Div(\n { className: 'g-ui-toast-row' },\n when(title, () => Div({ className: 'g-ui-toast-title' }, title)),\n when(onClose, () => Button({ className: 'g-ui-toast-close', onClick: onClose }, '\u00D7'))\n ),\n children\n );\n}\n", "import { Div, Span } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\nimport { state } from '@granularjs/core';\nimport { TextInput } from './TextInput.js';\n\nexport function SelectSearch(...args) {\n const { props, rawProps } = splitPropsChildren(args, { data: [] });\n const { data, className, ...rest } = props;\n const { onChange } = rawProps;\n const query = state('');\n\n const items = data.filter((item) =>\n String(item.label || '').toLowerCase().includes(String(query.get()).toLowerCase())\n );\n\n return Div(\n { ...rest, className: cx('g-ui-select-search', className) },\n TextInput({\n inputClassName: 'g-ui-select-search-input',\n placeholder: 'Search...',\n value: query,\n onInput: (ev) => query.set(ev?.target?.value ?? ''),\n }),\n Div(\n { className: 'g-ui-select-search-list' },\n items.map((item) =>\n Div(\n {\n className: 'g-ui-select-search-item',\n onClick: () => onChange?.(item.value),\n },\n item.label\n )\n )\n )\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function SwitchGroup(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-switch-group', className) }, children);\n}\n", "import { Div, state, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue } from '../utils.js';\nimport { TextInput } from './TextInput.js';\n\nexport function RangePicker(...args) {\n const { props, rawProps } = splitPropsChildren(args, { size: 'md' });\n const { value, size, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(value) ?? ['', '']);\n\n after(value).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(resolved);\n });\n\n const setValue = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n\n return Div(\n { ...rest, className: cx('g-ui-range-picker', props.className ?? className) },\n TextInput({\n size,\n type: 'text',\n inputMode: 'numeric',\n value: after(currentState).compute((current) => current?.[0] ?? ''),\n onInput: (ev) => {\n const current = currentState.get() ?? ['', ''];\n setValue([ev.target.value, current[1]]);\n },\n }),\n TextInput({\n size,\n type: 'text',\n inputMode: 'numeric',\n value: after(currentState).compute((current) => current?.[1] ?? ''),\n onInput: (ev) => {\n const current = currentState.get() ?? ['', ''];\n setValue([current[0], ev.target.value]);\n },\n })\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Flex(...args) {\n const { props, children } = splitPropsChildren(args, { align: 'center', direction: 'row' });\n const { direction, wrap, align, justify, gap, className, ...rest } = props;\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-flex',\n [direction, (value) => {\n if (value === 'column') return 'g-ui-flex-column';\n return 'g-ui-flex-row';\n }],\n [wrap, 'g-ui-flex-wrap'],\n [align, (value) => value && `g-ui-align-${value}`],\n [justify, (value) => value && `g-ui-justify-${value}`],\n [gap, (value) => value && `g-ui-gap-${value}`],\n className\n ),\n },\n children\n );\n}\n", "import { A, Div, Span, when, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag, resolveValue, toPx } from '../utils.js';\n\nexport function NavLink(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { variant: 'subtle', childrenOffset: 24 });\n const {\n label,\n description,\n leftSection,\n rightSection,\n active,\n disabled,\n variant,\n childrenOffset,\n opened,\n defaultOpened,\n className,\n padding,\n ...rest\n } = props;\n const { onClick, onChange } = rawProps;\n const hasChildren = children.length > 0;\n const openState = state(resolveValue(opened) ?? resolveValue(defaultOpened) ?? false);\n after(opened).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n openState.set(!!resolved);\n });\n const childrenStyle = after(childrenOffset).compute((next) => ({\n paddingLeft: toPx(resolveValue(next ?? 24)) ?? '24px',\n }));\n\n const handleClick = (ev) => {\n if (resolveValue(disabled)) {\n ev?.preventDefault?.();\n return;\n }\n if (hasChildren) {\n const next = !openState.get();\n openState.set(next);\n onChange?.(next);\n }\n onClick?.(ev);\n };\n\n return Div(\n { className: cx('g-ui-navlink-root', className) },\n A(\n {\n ...rest,\n className: cx(\n 'g-ui-navlink',\n classVar('g-ui-navlink-variant-', variant, 'subtle'),\n classFlag('g-ui-navlink-active', active),\n classFlag('g-ui-navlink-disabled', disabled),\n classVar('g-ui-navlink-padding-', padding, 'md')\n ),\n onClick: handleClick,\n },\n when(leftSection, () => Span({ className: 'g-ui-navlink-section g-ui-navlink-left' }, leftSection)),\n Div(\n { className: 'g-ui-navlink-body' },\n when(label, () => Div({ className: 'g-ui-navlink-label' }, label)),\n when(description, () => Div({ className: 'g-ui-navlink-description' }, description))\n ),\n when(rightSection, () => Span({ className: 'g-ui-navlink-section g-ui-navlink-right' }, rightSection))\n ),\n hasChildren\n ? when(openState, () => Div({ className: 'g-ui-navlink-children', style: childrenStyle }, children))\n : null\n );\n}\n", "import { Div, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Indicator(...args) {\n const { props, children } = splitPropsChildren(args, { show: true, position: 'top-right', color: 'danger', size: 'md' });\n const { show, position, color, size, className, ...rest } = props;\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-indicator',\n classVar('g-ui-indicator-position-', position, 'top-right'),\n classVar('g-ui-indicator-color-', color, 'danger'),\n classVar('g-ui-indicator-size-', size, 'md'),\n className\n ),\n },\n children,\n when(show, () => Div({ className: 'g-ui-indicator-badge' }))\n );\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Burger(...args) {\n const { props } = splitPropsChildren(args);\n const { opened, className, ...rest } = props;\n return Span(\n { ...rest, className: cx('g-ui-burger', [opened, 'g-ui-burger-open'], className) },\n Span(''),\n Span(''),\n Span('')\n );\n}\n", "import { Div, when } from '@granularjs/core';\nimport { splitPropsChildren } from '../utils.js';\nimport { Loading } from './Loading.js';\n\nexport function LoadingOverlay(...args) {\n const { props } = splitPropsChildren(args);\n const { visible, ...rest } = props;\n return when(visible, () => Div({ ...rest, className: 'g-ui-loading-overlay' }, Loading({})));\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Grid(...args) {\n const { props, children } = splitPropsChildren(args, { gap: 'md' });\n const { className, gap, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-grid-system', [gap, (value) => `g-ui-gap-${value}`], className) }, children);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Col(...args) {\n const { props, children } = splitPropsChildren(args, { span: 12 });\n const { span, className, ...rest } = props;\n return Div({ ...rest, className: cx([span, (value) => `g-ui-col-span-${value}`], className) }, children);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function ScrollArea(...args) {\n const { props, children } = splitPropsChildren(args, { size: 'md' });\n const { size, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-scroll-area', [size, (value) => `g-ui-scroll-area-${value}`], className) },\n children\n );\n}\n", "import { Div, Input, after, state, when, list } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\n\nexport function PinInput(...args) {\n const { props, rawProps } = splitPropsChildren(args, {\n length: 4,\n size: 'md',\n type: 'alphanumeric',\n mask: false,\n placeholder: '\u25CB',\n disabled: false,\n error: false,\n oneTimeCode: false,\n });\n\n const {\n length,\n value,\n size,\n type,\n mask,\n placeholder,\n disabled,\n error,\n oneTimeCode,\n className,\n } = props;\n\n const { onChange, onComplete } = rawProps;\n\n const currentLength = state(resolveValue(length) ?? 4);\n const getLength = () => currentLength.get();\n\n after(length).change((next) => {\n const newLen = resolveValue(next) ?? 4;\n const oldLen = currentLength.get();\n if (newLen === oldLen) return;\n currentLength.set(newLen);\n const currentValues = currentState.get();\n const currentNodes = inputNodes.get();\n currentState.set(Array.from({ length: newLen }, (_, i) => currentValues[i] ?? ''));\n inputNodes.set(Array.from({ length: newLen }, (_, i) => currentNodes[i] ?? null));\n });\n\n const inputNodes = state(Array.from({ length: getLength() }, () => null));\n\n const currentState = state(\n Array.from({ length: getLength() }, (_, i) => {\n const initial = resolveValue(value);\n if (typeof initial === 'string') return initial[i] ?? '';\n if (Array.isArray(initial)) return initial[i] ?? '';\n return '';\n })\n );\n\n after(value).change((next) => {\n if (next == null) return;\n const len = getLength();\n if (typeof next === 'string') {\n currentState.set(Array.from({ length: len }, (_, i) => next[i] ?? ''));\n } else if (Array.isArray(next)) {\n currentState.set(Array.from({ length: len }, (_, i) => next[i] ?? ''));\n }\n });\n\n const getValueString = () => currentState.get().join('');\n\n const setValue = (next) => {\n currentState.set(next);\n const str = next.join('');\n onChange?.(str);\n if (next.every((v) => v !== '') && next.length === getLength()) {\n onComplete?.(str);\n }\n };\n\n const focusInput = (index) => {\n const len = getLength();\n const nodes = inputNodes.get();\n if (index >= 0 && index < len && nodes[index]) {\n nodes[index].focus();\n nodes[index].select();\n }\n };\n\n const getTypeRegex = () => {\n const t = resolveValue(type);\n if (t === 'number') return /^[0-9]$/;\n if (t instanceof RegExp) return t;\n return /^[a-zA-Z0-9]$/;\n };\n\n const handleInput = (idx, ev) => {\n const inputValue = ev.target.value;\n const regex = getTypeRegex();\n\n if (inputValue.length > 1) {\n handlePaste(idx, inputValue);\n return;\n }\n\n if (inputValue && !regex.test(inputValue)) {\n ev.target.value = currentState.get()[idx] ?? '';\n return;\n }\n\n const current = currentState.get().slice();\n current[idx] = inputValue;\n setValue(current);\n\n if (inputValue && idx < getLength() - 1) {\n focusInput(idx + 1);\n }\n };\n\n const handlePaste = (startIdx, pastedValue) => {\n const regex = getTypeRegex();\n const chars = pastedValue.split('').filter((c) => regex.test(c));\n const current = currentState.get().slice();\n const len = getLength();\n\n chars.forEach((char, i) => {\n const targetIdx = startIdx + i;\n if (targetIdx < len) {\n current[targetIdx] = char;\n }\n });\n\n setValue(current);\n\n const nextEmpty = current.findIndex((v, i) => i >= startIdx && v === '');\n if (nextEmpty >= 0) {\n focusInput(nextEmpty);\n } else {\n focusInput(Math.min(startIdx + chars.length, len - 1));\n }\n };\n\n const handleKeyDown = (idx, ev) => {\n if (ev.key === 'Backspace') {\n const current = currentState.get().slice();\n if (current[idx] === '' && idx > 0) {\n ev.preventDefault();\n current[idx - 1] = '';\n setValue(current);\n focusInput(idx - 1);\n } else if (current[idx] !== '') {\n current[idx] = '';\n setValue(current);\n }\n } else if (ev.key === 'ArrowLeft' && idx > 0) {\n ev.preventDefault();\n focusInput(idx - 1);\n } else if (ev.key === 'ArrowRight' && idx < getLength() - 1) {\n ev.preventDefault();\n focusInput(idx + 1);\n }\n };\n\n const handleFocus = (idx, ev) => {\n ev.target.select();\n };\n\n const handleContainerClick = () => {\n const current = currentState.get();\n const firstEmpty = current.findIndex((v) => v === '');\n if (firstEmpty >= 0) {\n focusInput(firstEmpty);\n } else {\n focusInput(current.length - 1);\n }\n };\n\n const inputType = after(mask).compute((m) => (resolveValue(m) ? 'password' : 'text'));\n const inputMode = after(type).compute((t) => (resolveValue(t) === 'number' ? 'numeric' : 'text'));\n const autoComplete = after(oneTimeCode).compute((o) => (resolveValue(o) ? 'one-time-code' : 'off'));\n const isDisabled = after(disabled).compute((d) => !!resolveValue(d));\n const hasError = after(error).compute((e) => !!resolveValue(e));\n\n const indices = after(currentLength).compute((len) =>\n Array.from({ length: len }, (_, i) => i)\n );\n\n const renderInput = (idx) =>\n Input({\n className: cx(\n 'g-ui-pin-input-field',\n when(hasError, () => 'g-ui-pin-input-error')\n ),\n type: inputType,\n inputMode,\n autocomplete: autoComplete,\n maxLength: 2,\n placeholder: when(isDisabled, () => '', () => placeholder),\n disabled: isDisabled,\n value: after(currentState, idx).compute(([values, i]) => values[i] ?? ''),\n node: inputNodes[idx.get()],\n onInput: (ev) => handleInput(idx.get(), ev),\n onChange: (ev) => handleInput(idx.get(), ev),\n onKeyDown: (ev) => handleKeyDown(idx.get(), ev),\n onFocus: (ev) => handleFocus(idx.get(), ev),\n });\n\n return Div(\n {\n className: cx(\n 'g-ui-pin-input',\n classVar('g-ui-input-size-', size, 'md'),\n className\n ),\n onClick: handleContainerClick,\n },\n Div(\n { className: 'g-ui-pin-input-wrapper' },\n list(indices, renderInput)\n )\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function CheckboxGroup(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-checkbox-group', className) }, children);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function AvatarGroup(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-avatar-group', className) }, children);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function BadgeGroup(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-badge-group', className) }, children);\n}\n", "import { Div, Span, after, context } from '@granularjs/core';\nimport { splitPropsChildren, cx, classFlag } from '../utils.js';\n\nconst sizeContext = context([]);\nconst tableContext = context({ sort: null, onSort: null });\n\nexport function GridTable(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { sizes: [], sort: null, stickyHeader: false });\n const { className, sizes: sizesProp, sort: sortProp, stickyHeader: stickyProp, ...rest } = props;\n const { onSort } = rawProps;\n\n const sizes = sizeContext.scope(sizesProp.get());\n after(sizesProp).change(v => sizes.set(v));\n\n const table = tableContext.scope({ sort: sortProp.get(), onSort: onSort || null });\n after(sortProp).change(v => table.set().sort = v);\n\n return sizes.serve(table.serve(Div({\n className: cx(\n 'g-ui-grid-table',\n classFlag('g-ui-grid-table-sticky', stickyProp),\n className\n ),\n style: {\n gridTemplateColumns: after(sizes).compute(s =>\n Array.isArray(s) ? s.join(' ') : ''\n ),\n },\n ...rest,\n }, children)));\n}\n\nGridTable.GridRow = (...args) => {\n const { props, children } = splitPropsChildren(args, {});\n const { className, header, ...rest } = props;\n\n return Div(\n {\n className: cx(\n 'g-ui-grid-table-row',\n classFlag('g-ui-grid-table-row-header', header),\n className\n ),\n ...rest,\n },\n ...children\n );\n};\n\nGridTable.GridCell = function (...args) {\n const { props, rawProps, children } = splitPropsChildren(args, {});\n const { className, sort: _sort, ...rest } = props;\n const sortKey = rawProps.sort;\n\n if (sortKey) {\n const table = tableContext.state();\n\n const direction = after(table.sort).compute(s =>\n s?.key === sortKey ? s.direction : null\n );\n\n const handleSort = () => {\n const current = table.get().sort;\n let next;\n if (current?.key === sortKey) {\n next = current.direction === 'asc'\n ? { key: sortKey, direction: 'desc' }\n : null;\n } else {\n next = { key: sortKey, direction: 'asc' };\n }\n table.set().sort = next;\n const { onSort } = table.get();\n if (onSort) onSort(next);\n };\n\n return Div(\n {\n className: cx('g-ui-grid-table-cell', 'g-ui-grid-table-cell-sortable', className),\n onClick: handleSort,\n ...rest,\n },\n children,\n Span({ className: 'g-ui-grid-table-sort-icon' },\n after(direction).compute(d =>\n d === 'asc' ? ' \u2191' : d === 'desc' ? ' \u2193' : ''\n )\n )\n );\n }\n\n return Div(\n {\n className: cx('g-ui-grid-table-cell', className),\n ...rest,\n },\n children\n );\n};", "import { Button, Div, Span, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag } from '../utils.js';\n\nexport function BottomBar(...args) {\n const { props, children } = splitPropsChildren(args, { grow: true });\n const { grow, className, ...rest } = props;\n\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-bottombar',\n classFlag('g-ui-bottombar-grow', grow),\n className\n ),\n },\n children\n );\n}\n\nBottomBar.Action = function BottomBarAction(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { variant: 'subtle' });\n const { icon, label, active, disabled, variant, className, ...rest } = props;\n const { onClick } = rawProps;\n\n return Button(\n {\n ...rest,\n className: cx(\n 'g-ui-bottombar-action',\n classVar('g-ui-bottombar-action-variant-', variant, 'subtle'),\n classFlag('g-ui-bottombar-action-active', active),\n classFlag('g-ui-bottombar-action-disabled', disabled),\n className\n ),\n onClick,\n disabled,\n },\n when(icon, () => Span({ className: 'g-ui-bottombar-action-icon' }, icon)),\n when(label, () => Span({ className: 'g-ui-bottombar-action-label' }, label)),\n children\n );\n};\n", "import {\n Div,\n Button,\n state,\n after,\n when,\n portal,\n Input,\n Label,\n Span,\n} from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue, classVar } from '../utils.js';\nimport { Modal } from './Modal.js';\nimport { ActionIcon } from './ActionIcon.js';\nimport { Icon } from './Icon.js';\nimport { TextInput } from './TextInput.js';\nimport { Textarea } from './Textarea.js';\nimport { Checkbox } from './Checkbox.js';\nimport {\n forwardSvg,\n backwardSvg,\n closeSvg,\n plusSvg,\n editSvg,\n deleteSvg,\n calendarTodaySvg,\n} from '../theme/icons.js';\n\nconst WEEKDAY_LABELS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst VIEW_OPTIONS = [\n { value: 'day', label: 'Day' },\n { value: 'week', label: 'Week' },\n { value: 'month', label: 'Month' },\n];\n\nfunction toDate(v) {\n if (v instanceof Date) return v;\n if (v == null) return null;\n const d = new Date(v);\n return Number.isNaN(d.getTime()) ? null : d;\n}\n\nfunction normalizeEvent(ev) {\n const start = toDate(ev.start);\n const end = toDate(ev.end);\n if (!start || !end) return null;\n return {\n ...ev,\n id: ev.id ?? `${start.getTime()}-${ev.title ?? 'event'}`,\n title: ev.title ?? '',\n start,\n end,\n allDay: !!ev.allDay,\n description: ev.description ?? '',\n location: ev.location ?? '',\n attendees: Array.isArray(ev.attendees) ? ev.attendees : [],\n color: ev.color ?? null,\n };\n}\n\nfunction getEventsInRange(events, rangeStart, rangeEnd) {\n const start = toDate(rangeStart).getTime();\n const end = toDate(rangeEnd).getTime();\n return events\n .map(normalizeEvent)\n .filter(Boolean)\n .filter((ev) => ev.end.getTime() > start && ev.start.getTime() < end);\n}\n\nfunction getEventsForDay(events, day) {\n const d = new Date(day);\n d.setHours(0, 0, 0, 0);\n const start = d.getTime();\n d.setHours(23, 59, 59, 999);\n const end = d.getTime();\n return getEventsInRange(events, start, end);\n}\n\nfunction weekStart(date, firstDayOfWeek) {\n const d = new Date(date);\n const day = d.getDay();\n const diff = (day - firstDayOfWeek + 7) % 7;\n d.setDate(d.getDate() - diff);\n d.setHours(0, 0, 0, 0);\n return d;\n}\n\nfunction formatTime(date, locale = 'default') {\n return date.toLocaleTimeString(locale, { hour: 'numeric', minute: '2-digit', hour12: true });\n}\n\nfunction formatDate(date, locale = 'default') {\n return date.toLocaleDateString(locale, { weekday: 'short', month: 'short', day: 'numeric' });\n}\n\nfunction formatMonthYear(date, locale = 'default') {\n return date.toLocaleDateString(locale, { month: 'long', year: 'numeric' });\n}\n\nfunction formatWeekRange(weekStartDate, locale = 'default') {\n const end = new Date(weekStartDate);\n end.setDate(end.getDate() + 6);\n return `${weekStartDate.toLocaleDateString(locale, { month: 'short', day: 'numeric' })} \u2013 ${end.toLocaleDateString(locale, { month: 'short', day: 'numeric', year: 'numeric' })}`;\n}\n\nfunction timeToPct(date, dayStart, dayEnd) {\n const d = new Date(date);\n const start = new Date(d);\n start.setHours(dayStart, 0, 0, 0);\n const end = new Date(d);\n end.setHours(dayEnd, 0, 0, 0);\n const total = (dayEnd - dayStart) * 60;\n const mins = (d.getTime() - start.getTime()) / 60000;\n return Math.max(0, Math.min(1, mins / total)) * 100;\n}\n\nfunction durationPct(start, end, dayStart, dayEnd) {\n const dayStartMs = new Date(start).setHours(dayStart, 0, 0, 0);\n const dayEndMs = new Date(start).setHours(dayEnd, 0, 0, 0);\n const total = (dayEnd - dayStart) * 60;\n const s = Math.max(start.getTime(), dayStartMs);\n const e = Math.min(end.getTime(), dayEndMs);\n const mins = (e - s) / 60000;\n const top = ((s - dayStartMs) / 60000 / total) * 100;\n const height = (mins / total) * 100;\n return { top, height };\n}\n\nexport function EventCalendar(...args) {\n const { props, rawProps } = splitPropsChildren(args, {\n defaultView: 'month',\n firstDayOfWeek: 0,\n locale: 'default',\n hourSlotDuration: 30,\n minTime: 6,\n maxTime: 22,\n eventCreationColorOptions: [],\n });\n const {\n events: eventsProp = [],\n defaultView,\n firstDayOfWeek,\n locale,\n hourSlotDuration,\n minTime,\n maxTime,\n eventCreationColorOptions,\n className,\n ...rest\n } = props;\n const {\n onCreateEventRequest,\n onViewEventRequest,\n onUpdateEventRequest,\n onRemoveEventRequest,\n eventCreationEmailLookup,\n eventCreationLocationsCallback,\n eventCreationCalendarsCallback,\n onSlotClick,\n onDateRangeChange,\n } = rawProps;\n\n const viewMode = state(resolveValue(defaultView) ?? 'month');\n const currentDate = state(new Date());\n const modalState = state(null);\n const selectedEvent = state(null);\n const createDraft = state({\n title: '',\n start: null,\n end: null,\n allDay: false,\n description: '',\n location: '',\n attendees: [],\n color: null,\n });\n\n const eventsList = after(eventsProp).compute((v) => (Array.isArray(v) ? v : []));\n const viewDate = currentDate.get();\n const weekStartDate = weekStart(viewDate, resolveValue(firstDayOfWeek) ?? 0);\n const dayStart = resolveValue(minTime) ?? 6;\n const dayEnd = resolveValue(maxTime) ?? 22;\n const slotDuration = resolveValue(hourSlotDuration) ?? 30;\n\n const goPrev = () => {\n const d = new Date(currentDate.get());\n if (viewMode.get() === 'month') d.setMonth(d.getMonth() - 1);\n else if (viewMode.get() === 'week') d.setDate(d.getDate() - 7);\n else d.setDate(d.getDate() - 1);\n currentDate.set(d);\n onDateRangeChange?.({ start: d, end: d, view: viewMode.get() });\n };\n\n const goNext = () => {\n const d = new Date(currentDate.get());\n if (viewMode.get() === 'month') d.setMonth(d.getMonth() + 1);\n else if (viewMode.get() === 'week') d.setDate(d.getDate() + 7);\n else d.setDate(d.getDate() + 1);\n currentDate.set(d);\n onDateRangeChange?.({ start: d, end: d, view: viewMode.get() });\n };\n\n const goToday = () => {\n const d = new Date();\n currentDate.set(d);\n onDateRangeChange?.({ start: d, end: d, view: viewMode.get() });\n };\n\n const openCreateModal = (start, end, allDay = false) => {\n const s = start ? new Date(start) : new Date(currentDate.get());\n const e = end ? new Date(end) : new Date(s.getTime() + 60 * 60 * 1000);\n if (allDay) {\n s.setHours(0, 0, 0, 0);\n e.setHours(23, 59, 59, 999);\n }\n createDraft.set({\n title: '',\n start: s,\n end: e,\n allDay,\n description: '',\n location: '',\n attendees: [],\n color: null,\n });\n modalState.set('create');\n };\n\n const openViewModal = (event) => {\n selectedEvent.set(normalizeEvent(event));\n modalState.set('view');\n onViewEventRequest?.(event);\n };\n\n const openEditModal = () => {\n const ev = selectedEvent.get();\n if (!ev) return;\n createDraft.set({\n title: ev.title,\n start: new Date(ev.start),\n end: new Date(ev.end),\n allDay: ev.allDay,\n description: ev.description ?? '',\n location: ev.location ?? '',\n attendees: [...(ev.attendees || [])],\n color: ev.color ?? null,\n });\n modalState.set('edit');\n };\n\n const closeModal = () => {\n modalState.set(null);\n selectedEvent.set(null);\n };\n\n const handleSlotClick = (date, hour, allDay) => {\n if (onSlotClick) {\n onSlotClick({ date, hour, allDay });\n return;\n }\n const start = new Date(date);\n if (allDay) {\n start.setHours(0, 0, 0, 0);\n const end = new Date(start);\n end.setHours(23, 59, 59, 999);\n openCreateModal(start, end, true);\n } else {\n start.setHours(hour, 0, 0, 0);\n const end = new Date(start.getTime() + slotDuration * 60 * 1000);\n openCreateModal(start, end, false);\n }\n };\n\n const handleCreateSubmit = () => {\n const draft = createDraft.get();\n if (!draft.start || !draft.end) return;\n onCreateEventRequest?.(\n {\n title: draft.title,\n start: draft.start,\n end: draft.end,\n allDay: draft.allDay,\n description: draft.description,\n location: draft.location,\n attendees: draft.attendees,\n color: draft.color,\n },\n () => {\n closeModal();\n }\n );\n };\n\n const handleUpdateSubmit = () => {\n const ev = selectedEvent.get();\n const draft = createDraft.get();\n if (!ev || !draft.start || !draft.end) return;\n onUpdateEventRequest?.(\n ev,\n {\n title: draft.title,\n start: draft.start,\n end: draft.end,\n allDay: draft.allDay,\n description: draft.description,\n location: draft.location,\n attendees: draft.attendees,\n color: draft.color,\n },\n () => closeModal()\n );\n };\n\n const handleRemoveRequest = () => {\n const ev = selectedEvent.get();\n if (!ev) return;\n onRemoveEventRequest?.(ev, () => closeModal());\n };\n\n const titleLabel = after(viewMode, currentDate).compute(([view, date]) => {\n if (view === 'month') return formatMonthYear(date, resolveValue(locale));\n if (view === 'week') return formatWeekRange(weekStart(date, resolveValue(firstDayOfWeek) ?? 0), resolveValue(locale));\n return formatDate(date, resolveValue(locale));\n });\n\n const header = Div(\n { className: 'g-ui-event-calendar-header' },\n Div(\n { className: 'g-ui-event-calendar-nav-group' },\n ActionIcon(\n { size: 'sm', variant: 'subtle', onClick: goPrev, className: 'g-ui-event-calendar-nav' },\n Icon({ size: 'sm', innerHTML: backwardSvg })\n ),\n ActionIcon(\n { size: 'sm', variant: 'subtle', onClick: goNext, className: 'g-ui-event-calendar-nav' },\n Icon({ size: 'sm', innerHTML: forwardSvg })\n ),\n Button(\n { type: 'button', variant: 'subtle', size: 'sm', className: 'g-ui-event-calendar-today', onClick: goToday },\n Icon({ size: 'sm', className: 'g-ui-event-calendar-today-icon', innerHTML: calendarTodaySvg }),\n 'Today'\n )\n ),\n Div({ className: 'g-ui-event-calendar-title' }, titleLabel),\n Div(\n { className: 'g-ui-event-calendar-actions' },\n VIEW_OPTIONS.map((opt) =>\n Div(\n {\n className: cx(\n 'g-ui-event-calendar-view-option',\n after(viewMode).compute((v) => (v === opt.value ? 'g-ui-event-calendar-view-option-active' : ''))\n ),\n onClick: () => {\n viewMode.set(opt.value);\n onDateRangeChange?.({ start: currentDate.get(), end: currentDate.get(), view: opt.value });\n },\n },\n opt.label\n )\n ),\n Button(\n {\n type: 'button',\n variant: 'filled',\n size: 'sm',\n className: 'g-ui-event-calendar-create-btn',\n onClick: () => openCreateModal(currentDate.get(), null, false),\n },\n Icon({ size: 'sm', innerHTML: plusSvg }),\n 'Create'\n )\n )\n );\n\n const monthGrid = after(currentDate, eventsList, firstDayOfWeek).compute(([date, events, firstDay]) => {\n const year = date.getFullYear();\n const month = date.getMonth();\n const first = new Date(year, month, 1);\n const startDow = (first.getDay() - (firstDay ?? 0) + 7) % 7;\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const prevMonthDays = new Date(year, month, 0).getDate();\n const rows = [];\n let dayCount = 1;\n let nextMonthDay = 1;\n const totalCells = Math.ceil((startDow + daysInMonth) / 7) * 7;\n const dayCells = [];\n for (let i = 0; i < totalCells; i += 1) {\n let day;\n let isCurrentMonth;\n let dateObj;\n if (i < startDow) {\n day = prevMonthDays - startDow + i + 1;\n dateObj = new Date(year, month - 1, day);\n isCurrentMonth = false;\n } else if (dayCount <= daysInMonth) {\n day = dayCount;\n dateObj = new Date(year, month, day);\n isCurrentMonth = true;\n dayCount += 1;\n } else {\n day = nextMonthDay;\n dateObj = new Date(year, month + 1, day);\n isCurrentMonth = false;\n nextMonthDay += 1;\n }\n const dayEvents = getEventsForDay(events, dateObj);\n const isToday =\n dateObj.getDate() === new Date().getDate() &&\n dateObj.getMonth() === new Date().getMonth() &&\n dateObj.getFullYear() === new Date().getFullYear();\n dayCells.push(\n Div(\n {\n key: dateObj.getTime(),\n className: cx(\n 'g-ui-event-calendar-month-cell',\n !isCurrentMonth && 'g-ui-event-calendar-month-cell-outside',\n isToday && 'g-ui-event-calendar-month-cell-today'\n ),\n },\n Div(\n {\n className: 'g-ui-event-calendar-month-cell-header',\n onClick: () => handleSlotClick(dateObj, 0, true),\n },\n Span({ className: 'g-ui-event-calendar-month-cell-day' }, dateObj.getDate())\n ),\n Div(\n { className: 'g-ui-event-calendar-month-cell-events' },\n dayEvents.slice(0, 3).map((ev) =>\n Div(\n {\n key: ev.id,\n className: 'g-ui-event-calendar-month-event',\n style: ev.color ? { borderLeftColor: ev.color, backgroundColor: `${ev.color}20` } : {},\n onClick: (e) => {\n e.stopPropagation();\n openViewModal(ev);\n },\n },\n ev.title || '(No title)'\n )\n ),\n when(dayEvents.length > 3, () =>\n Div(\n {\n className: 'g-ui-event-calendar-month-more',\n onClick: (e) => {\n e.stopPropagation();\n openViewModal(dayEvents[3]);\n },\n },\n `+${dayEvents.length - 3} more`\n )\n )\n )\n )\n );\n }\n return dayCells;\n });\n\n const monthView = Div(\n { className: 'g-ui-event-calendar-month' },\n Div(\n { className: 'g-ui-event-calendar-weekdays' },\n WEEKDAY_LABELS.map((label) => Div({ key: label, className: 'g-ui-event-calendar-weekday' }, label))\n ),\n Div({ className: 'g-ui-event-calendar-month-grid' }, monthGrid)\n );\n\n const timeSlots = [];\n for (let h = dayStart; h < dayEnd; h += 1) {\n for (let s = 0; s < 60; s += slotDuration) {\n timeSlots.push(h + s / 60);\n }\n }\n\n const weekDays = after(currentDate, firstDayOfWeek).compute(([date, firstDay]) => {\n const start = weekStart(date, firstDay ?? 0);\n const days = [];\n for (let i = 0; i < 7; i += 1) {\n const d = new Date(start);\n d.setDate(d.getDate() + i);\n days.push(d);\n }\n return days;\n });\n\n const weekView = Div(\n { className: 'g-ui-event-calendar-week' },\n after(weekDays).compute((days) =>\n Div(\n { className: 'g-ui-event-calendar-week-days' },\n Div({ className: 'g-ui-event-calendar-week-time-col' }, ''),\n (days || []).map((d) =>\n Div(\n { key: d.getTime(), className: 'g-ui-event-calendar-week-day-col' },\n Div({ className: 'g-ui-event-calendar-week-day-header' }, formatDate(d, resolveValue(locale)))\n )\n )\n )\n ),\n Div({ className: 'g-ui-event-calendar-week-body' },\n Div(\n { className: 'g-ui-event-calendar-week-time-col' },\n timeSlots.map((h) => {\n const hour = Math.floor(h);\n const min = (h - hour) * 60;\n const label = `${hour <= 12 ? hour : hour - 12}:${min === 0 ? '00' : min} ${hour < 12 ? 'AM' : 'PM'}`;\n return Div({ key: h, className: 'g-ui-event-calendar-week-slot-label' }, label);\n })\n ),\n after(weekDays, eventsList).compute(([days, events]) => {\n if (!days || !days.length) return null;\n const rangeStart = days[0];\n const rangeEnd = new Date(days[6]);\n rangeEnd.setHours(23, 59, 59, 999);\n const inRange = getEventsInRange(events, rangeStart, rangeEnd);\n return Div(\n { className: 'g-ui-event-calendar-week-grid-cols' },\n days.map((day) =>\n Div(\n { key: day.getTime(), className: 'g-ui-event-calendar-week-day-col g-ui-event-calendar-week-day-col-body' },\n timeSlots.map((h) =>\n Div({\n key: h,\n className: 'g-ui-event-calendar-week-slot',\n onClick: () => handleSlotClick(day, h, false),\n })\n ),\n inRange\n .filter(\n (ev) =>\n !ev.allDay &&\n ev.start.getDate() === day.getDate() &&\n ev.start.getMonth() === day.getMonth() &&\n ev.start.getFullYear() === day.getFullYear()\n )\n .map((ev) => {\n const { top, height } = durationPct(ev.start, ev.end, dayStart, dayEnd);\n return Div(\n {\n key: ev.id,\n className: 'g-ui-event-calendar-week-event',\n style: {\n top: `${top}%`,\n height: `${height}%`,\n borderLeftColor: ev.color || 'var(--g-ui-primary)',\n },\n onClick: (e) => {\n e.stopPropagation();\n openViewModal(ev);\n },\n },\n Div({ className: 'g-ui-event-calendar-week-event-title' }, ev.title || '(No title)'),\n when(!ev.allDay, () =>\n Span({ className: 'g-ui-event-calendar-week-event-time' }, `${formatTime(ev.start, resolveValue(locale))} \u2013 ${formatTime(ev.end, resolveValue(locale))}`)\n )\n );\n })\n )\n )\n );\n })\n )\n );\n\n const dayView = Div(\n { className: 'g-ui-event-calendar-day' },\n Div(\n { className: 'g-ui-event-calendar-day-body' },\n Div(\n { className: 'g-ui-event-calendar-day-time-col' },\n timeSlots.map((h) => {\n const hour = Math.floor(h);\n const min = (h - hour) * 60;\n const label = `${hour <= 12 ? hour : hour - 12}:${min === 0 ? '00' : min} ${hour < 12 ? 'AM' : 'PM'}`;\n return Div({ key: h, className: 'g-ui-event-calendar-day-slot-label' }, label);\n })\n ),\n Div(\n { className: 'g-ui-event-calendar-day-slots' },\n timeSlots.map((h) =>\n Div({\n key: h,\n className: 'g-ui-event-calendar-day-slot',\n onClick: () => handleSlotClick(currentDate.get(), h, false),\n })\n ),\n after(eventsList, currentDate).compute(([events, day]) => {\n if (!day) return [];\n const dayEvs = getEventsForDay(events, day).filter((e) => !e.allDay);\n return dayEvs.map((ev) => {\n const { top, height } = durationPct(ev.start, ev.end, dayStart, dayEnd);\n return Div(\n {\n key: ev.id,\n className: 'g-ui-event-calendar-day-event',\n style: {\n top: `${top}%`,\n height: `${height}%`,\n borderLeftColor: ev.color || 'var(--g-ui-primary)',\n },\n onClick: (e) => {\n e.stopPropagation();\n openViewModal(ev);\n },\n },\n Div({ className: 'g-ui-event-calendar-day-event-title' }, ev.title || '(No title)'),\n Span({ className: 'g-ui-event-calendar-day-event-time' }, `${formatTime(ev.start, resolveValue(locale))} \u2013 ${formatTime(ev.end, resolveValue(locale))}`)\n );\n });\n })\n )\n )\n );\n\n const createEditForm = (isEdit) => {\n const draft = createDraft.get();\n const today = new Date();\n const defaultStart = draft.start || today;\n const defaultEnd = draft.end || new Date(today.getTime() + 60 * 60 * 1000);\n const titleState = state(draft.title);\n const startDateState = state(defaultStart.toISOString().slice(0, 10));\n const startTimeState = state(\n !draft.allDay && defaultStart ? defaultStart.toTimeString().slice(0, 5) : '09:00'\n );\n const endDateState = state(defaultEnd.toISOString().slice(0, 10));\n const endTimeState = state(\n !draft.allDay && defaultEnd ? defaultEnd.toTimeString().slice(0, 5) : '10:00'\n );\n const allDayState = state(draft.allDay);\n const descState = state(draft.description);\n const locationState = state(draft.location);\n const attendeesState = state(draft.attendees || []);\n const emailLookupQuery = state('');\n const emailLookupResults = state([]);\n const locationOptions = state([]);\n const locationQuery = state('');\n const colorOptions = Array.isArray(eventCreationColorOptions) ? eventCreationColorOptions : [];\n const colorState = state(draft.color);\n\n const applyDraft = () => {\n const start = new Date(startDateState.get() + 'T' + (allDayState.get() ? '00:00:00' : startTimeState.get() + ':00'));\n const end = new Date(endDateState.get() + 'T' + (allDayState.get() ? '23:59:59' : endTimeState.get() + ':00'));\n createDraft.set({\n title: titleState.get(),\n start,\n end,\n allDay: allDayState.get(),\n description: descState.get(),\n location: locationState.get(),\n attendees: attendeesState.get(),\n color: colorState.get(),\n });\n };\n\n const doEmailLookup = (query) => {\n emailLookupQuery.set(query);\n if (!eventCreationEmailLookup || !query.trim()) {\n emailLookupResults.set([]);\n return;\n }\n Promise.resolve(eventCreationEmailLookup(query.trim()))\n .then((list) => emailLookupResults.set(Array.isArray(list) ? list : []))\n .catch(() => emailLookupResults.set([]));\n };\n\n const addAttendee = (item) => {\n const current = attendeesState.get();\n if (current.some((a) => (a.email || a.id) === (item.email || item.id))) return;\n attendeesState.set([...current, { id: item.id, email: item.email ?? item.label, label: item.label }]);\n emailLookupQuery.set('');\n emailLookupResults.set([]);\n };\n\n const removeAttendee = (index) => {\n const next = [...attendeesState.get()];\n next.splice(index, 1);\n attendeesState.set(next);\n };\n\n const loadLocations = () => {\n if (!eventCreationLocationsCallback) return;\n Promise.resolve(eventCreationLocationsCallback(locationQuery.get()))\n .then((list) => locationOptions.set(Array.isArray(list) ? list : []))\n .catch(() => locationOptions.set([]));\n };\n\n return Div(\n { className: 'g-ui-event-calendar-form' },\n Div(\n { className: 'g-ui-event-calendar-form-row' },\n TextInput({\n label: 'Title',\n placeholder: 'Event title',\n value: titleState,\n onInput: (ev) => titleState.set(ev?.target?.value ?? ''),\n })\n ),\n Div(\n { className: 'g-ui-event-calendar-form-row g-ui-event-calendar-form-row-inline' },\n Checkbox({\n label: 'All day',\n checked: allDayState,\n onChange: (v) => allDayState.set(v),\n })\n ),\n Div(\n { className: 'g-ui-event-calendar-form-row g-ui-event-calendar-form-row-inline' },\n Div({ className: 'g-ui-event-calendar-form-field' },\n Label({ className: 'g-ui-event-calendar-form-label' }, 'Start'),\n Input({\n type: 'date',\n className: 'g-ui-input g-ui-input-size-md',\n value: startDateState,\n onInput: (ev) => startDateState.set(ev?.target?.value ?? ''),\n }),\n when(!allDayState, () =>\n Input({\n type: 'time',\n className: 'g-ui-input g-ui-input-size-md',\n value: startTimeState,\n onInput: (ev) => startTimeState.set(ev?.target?.value ?? ''),\n })\n )\n ),\n Div({ className: 'g-ui-event-calendar-form-field' },\n Label({ className: 'g-ui-event-calendar-form-label' }, 'End'),\n Input({\n type: 'date',\n className: 'g-ui-input g-ui-input-size-md',\n value: endDateState,\n onInput: (ev) => endDateState.set(ev?.target?.value ?? ''),\n }),\n when(!allDayState, () =>\n Input({\n type: 'time',\n className: 'g-ui-input g-ui-input-size-md',\n value: endTimeState,\n onInput: (ev) => endTimeState.set(ev?.target?.value ?? ''),\n })\n )\n )\n ),\n when(eventCreationLocationsCallback, () =>\n Div(\n { className: 'g-ui-event-calendar-form-row' },\n Label({ className: 'g-ui-event-calendar-form-label' }, 'Location'),\n TextInput({\n placeholder: 'Search or type location',\n value: locationQuery,\n onInput: (ev) => {\n locationQuery.set(ev?.target?.value ?? '');\n loadLocations();\n },\n onFocus: loadLocations,\n }),\n when(after(locationOptions).compute((o) => o && o.length > 0), () =>\n Div(\n { className: 'g-ui-event-calendar-form-suggestions' },\n locationOptions.get().map((loc) =>\n Div(\n {\n key: loc.id ?? loc.label,\n className: 'g-ui-event-calendar-form-suggestion-item',\n onClick: () => {\n locationState.set(loc.label ?? loc.id);\n locationQuery.set('');\n locationOptions.set([]);\n },\n },\n loc.label ?? loc.id\n )\n )\n )\n ),\n when(after(locationState).compute((v) => !!v), () =>\n Span({ className: 'g-ui-event-calendar-form-chip' }, locationState)\n )\n )\n ),\n when(eventCreationEmailLookup, () =>\n Div(\n { className: 'g-ui-event-calendar-form-row' },\n Label({ className: 'g-ui-event-calendar-form-label' }, 'Add guests'),\n TextInput({\n placeholder: 'Type email to search',\n value: emailLookupQuery,\n onInput: (ev) => doEmailLookup(ev?.target?.value ?? ''),\n }),\n Div(\n { className: 'g-ui-event-calendar-form-chips' },\n attendeesState.get().map((a, i) =>\n Span(\n {\n key: (a.email || a.id) + i,\n className: 'g-ui-event-calendar-form-chip g-ui-event-calendar-form-chip-removable',\n onClick: () => removeAttendee(i),\n },\n a.label || a.email || a.id,\n ' \u00D7'\n )\n )\n ),\n when(after(emailLookupResults).compute((r) => r && r.length > 0), () =>\n Div(\n { className: 'g-ui-event-calendar-form-suggestions' },\n emailLookupResults.get().map((item) =>\n Div(\n {\n key: item.id ?? item.email,\n className: 'g-ui-event-calendar-form-suggestion-item',\n onClick: () => addAttendee(item),\n },\n item.label ?? item.email ?? item.id\n )\n )\n )\n )\n )\n ),\n Div(\n { className: 'g-ui-event-calendar-form-row' },\n Textarea({\n label: 'Description',\n placeholder: 'Add description',\n value: descState,\n onInput: (ev) => descState.set(ev?.target?.value ?? ''),\n })\n ),\n when(colorOptions.length > 0, () =>\n Div(\n { className: 'g-ui-event-calendar-form-row' },\n Label({ className: 'g-ui-event-calendar-form-label' }, 'Color'),\n Div(\n { className: 'g-ui-event-calendar-form-colors' },\n colorOptions.map((opt) =>\n Div(\n {\n key: opt.value ?? opt.id ?? opt,\n className: cx(\n 'g-ui-event-calendar-form-color-swatch',\n after(colorState).compute((c) => (c === (opt.value ?? opt.id ?? opt) ? 'g-ui-event-calendar-form-color-swatch-active' : ''))\n ),\n style: { backgroundColor: opt.color ?? opt.value ?? opt },\n onClick: () => colorState.set(opt.value ?? opt.id ?? opt),\n }\n )\n )\n )\n )\n ),\n Div(\n { className: 'g-ui-event-calendar-form-actions' },\n Button({ variant: 'subtle', onClick: closeModal }, 'Cancel'),\n Button(\n {\n variant: 'filled',\n onClick: () => {\n applyDraft();\n if (isEdit) handleUpdateSubmit();\n else handleCreateSubmit();\n },\n },\n isEdit ? 'Save' : 'Create'\n )\n )\n );\n };\n\n const viewModalContent = () => {\n const ev = selectedEvent.get();\n if (!ev) return null;\n return Div(\n { className: 'g-ui-event-calendar-view-modal' },\n Div({ className: 'g-ui-event-calendar-view-modal-title' }, ev.title || '(No title)'),\n Div(\n { className: 'g-ui-event-calendar-view-modal-meta' },\n ev.allDay\n ? Span({ className: 'g-ui-event-calendar-view-modal-date' }, formatDate(ev.start, resolveValue(locale)) + (ev.start.getTime() !== ev.end.getTime() ? ` \u2013 ${formatDate(ev.end, resolveValue(locale))}` : ''))\n : Span(\n { className: 'g-ui-event-calendar-view-modal-date' },\n `${formatDate(ev.start, resolveValue(locale))} \u00B7 ${formatTime(ev.start, resolveValue(locale))} \u2013 ${formatTime(ev.end, resolveValue(locale))}`\n )\n ),\n when(ev.location, () => Div({ className: 'g-ui-event-calendar-view-modal-field' }, 'Location: ', ev.location)),\n when(ev.description, () => Div({ className: 'g-ui-event-calendar-view-modal-field' }, ev.description)),\n when(ev.attendees?.length, () =>\n Div(\n { className: 'g-ui-event-calendar-view-modal-field' },\n 'Guests: ',\n ev.attendees.map((a) => a.label || a.email || a.id).join(', ')\n )\n ),\n Div(\n { className: 'g-ui-event-calendar-view-modal-actions' },\n Button({ variant: 'subtle', size: 'sm', onClick: openEditModal }, Icon({ size: 'sm', innerHTML: editSvg }), ' Edit'),\n Button(\n { variant: 'subtle', size: 'sm', onClick: handleRemoveRequest, className: 'g-ui-event-calendar-view-modal-delete' },\n Icon({ size: 'sm', innerHTML: deleteSvg }),\n ' Delete'\n ),\n Button({ variant: 'filled', size: 'sm', onClick: closeModal }, 'Close')\n )\n );\n };\n\n return Div(\n { ...rest, className: cx('g-ui-event-calendar', className) },\n header,\n when(\n viewMode,\n (v) => v === 'month',\n () => monthView\n ),\n when(\n viewMode,\n (v) => v === 'week',\n () => weekView\n ),\n when(\n viewMode,\n (v) => v === 'day',\n () => dayView\n ),\n when(\n modalState,\n (m) => m === 'create',\n () =>\n Modal(\n {\n opened: true,\n title: 'New event',\n size: 'lg',\n onClose: closeModal,\n },\n createEditForm(false)\n )\n ),\n when(\n modalState,\n (m) => m === 'view',\n () =>\n Modal(\n {\n opened: true,\n title: 'Event',\n size: 'md',\n onClose: closeModal,\n },\n viewModalContent()\n )\n ),\n when(\n modalState,\n (m) => m === 'edit',\n () =>\n Modal(\n {\n opened: true,\n title: 'Edit event',\n size: 'lg',\n onClose: closeModal,\n },\n createEditForm(true)\n )\n )\n );\n}\n", "import { state } from '@granularjs/core';\n\nexport function useDisclosure(initial = false) {\n const opened = state(!!initial);\n return [\n opened,\n {\n open: () => opened.set(true),\n close: () => opened.set(false),\n toggle: () => opened.set(!opened.get()),\n },\n ];\n}\n", "import { ensureStyles } from './theme/styles.js';\n\nensureStyles();\n\nexport { setThemeVars, setThemeMode } from './theme/theme.js';\nexport { cx } from './utils.js';\nexport { Button } from './components/Button.js';\nexport { Text } from './components/Text.js';\nexport { Title } from './components/Title.js';\nexport { Container } from './components/Container.js';\nexport { Stack } from './components/Stack.js';\nexport { Group } from './components/Group.js';\nexport { Card } from './components/Card.js';\nexport { Badge } from './components/Badge.js';\nexport { TextInput } from './components/TextInput.js';\nexport { Textarea } from './components/Textarea.js';\nexport { NumberInput } from './components/NumberInput.js';\nexport { Modal } from './components/Modal.js';\nexport { Loading } from './components/Loading.js';\nexport { Checkbox } from './components/Checkbox.js';\nexport { Switch } from './components/Switch.js';\nexport { Select } from './components/Select.js';\nexport { Tabs } from './components/Tabs.js';\nexport { Table } from './components/Table.js';\nexport { Accordion } from './components/Accordion.js';\nexport { Tooltip } from './components/Tooltip.js';\nexport { Menu } from './components/Menu.js';\nexport { Drawer } from './components/Drawer.js';\nexport { Notification } from './components/Notification.js';\nexport { Divider } from './components/Divider.js';\nexport { Paper } from './components/Paper.js';\nexport { Alert } from './components/Alert.js';\nexport { Avatar } from './components/Avatar.js';\nexport { Kbd } from './components/Kbd.js';\nexport { Code } from './components/Code.js';\nexport { Blockquote } from './components/Blockquote.js';\nexport { SimpleGrid } from './components/SimpleGrid.js';\nexport { List } from './components/List.js';\nexport { Anchor } from './components/Anchor.js';\nexport { Image } from './components/Image.js';\nexport { Icon } from './components/Icon.js';\nexport { Progress } from './components/Progress.js';\nexport { Slider } from './components/Slider.js';\nexport { Skeleton } from './components/Skeleton.js';\nexport { Chip } from './components/Chip.js';\nexport { SegmentedControl } from './components/SegmentedControl.js';\nexport { Pagination } from './components/Pagination.js';\nexport { Radio } from './components/Radio.js';\nexport { RadioGroup } from './components/RadioGroup.js';\nexport { Breadcrumbs } from './components/Breadcrumbs.js';\nexport { Center } from './components/Center.js';\nexport { Space } from './components/Space.js';\nexport { Collapse } from './components/Collapse.js';\nexport { ActionIcon } from './components/ActionIcon.js';\nexport { Popover } from './components/Popover.js';\nexport { HoverCard } from './components/HoverCard.js';\nexport { Affix } from './components/Affix.js';\nexport { Fieldset } from './components/Fieldset.js';\nexport { AppBar } from './components/AppBar.js';\nexport { Sidebar } from './components/Sidebar.js';\nexport { Timeline } from './components/Timeline.js';\nexport { Stepper } from './components/Stepper.js';\nexport { Rating } from './components/Rating.js';\nexport { Tag } from './components/Tag.js';\nexport { Calendar } from './components/Calendar.js';\nexport { MultiSelect } from './components/MultiSelect.js';\nexport { ToastStack } from './components/ToastStack.js';\nexport { DatePicker } from './components/DatePicker.js';\nexport { Notifications } from './components/Notifications.js';\nexport { RangeSlider } from './components/RangeSlider.js';\nexport { DateInput } from './components/DateInput.js';\nexport { NumberField } from './components/NumberField.js';\nexport { Popper } from './components/Popper.js';\nexport { PasswordInput } from './components/PasswordInput.js';\nexport { SearchInput } from './components/SearchInput.js';\nexport { CopyButton } from './components/CopyButton.js';\nexport { ProgressRing } from './components/ProgressRing.js';\nexport { Toast } from './components/Toast.js';\nexport { SelectSearch } from './components/SelectSearch.js';\nexport { SwitchGroup } from './components/SwitchGroup.js';\nexport { RangePicker } from './components/RangePicker.js';\nexport { Flex } from './components/Flex.js';\nexport { NavLink } from './components/NavLink.js';\nexport { Indicator } from './components/Indicator.js';\nexport { Burger } from './components/Burger.js';\nexport { LoadingOverlay } from './components/LoadingOverlay.js';\nexport { Grid } from './components/Grid.js';\nexport { Col } from './components/Col.js';\nexport { ScrollArea } from './components/ScrollArea.js';\nexport { PinInput } from './components/PinInput.js';\nexport { CheckboxGroup } from './components/CheckboxGroup.js';\nexport { AvatarGroup } from './components/AvatarGroup.js';\nexport { BadgeGroup } from './components/BadgeGroup.js';\nexport { GridTable } from './components/GridTable.js';\nexport { BottomBar } from './components/BottomBar.js';\nexport { EventCalendar } from './components/EventCalendar.js';\nexport { useDisclosure } from './hooks/useDisclosure.js';\n\n"],
5
- "mappings": "AAAA,IAAMA,GAAW,qBAEXC,GAAa,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KACjEC,GAAa,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KACjEC,GAAa,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KACjEC,GAAa,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KAEjEC,GAAW,IAAI,IAAI,wBAAyB,YAAY,GAAG,EAAE,KAC7DC,GAAW,IAAI,IAAI,wBAAyB,YAAY,GAAG,EAAE,KAC7DC,GAAW,IAAI,IAAI,wBAAyB,YAAY,GAAG,EAAE,KAC7DC,GAAW,IAAI,IAAI,wBAAyB,YAAY,GAAG,EAAE,KAE7DC,GAAW,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KAC/DC,GAAW,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KAC/DC,GAAW,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KAC/DC,GAAW,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KAE/DC,GAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMEZ,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOVC,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOVC,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOVC,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQVC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAORC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAORC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAORC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQRC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAORC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAORC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAORC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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",
6
- "names": ["STYLE_ID", "poppins400", "poppins500", "poppins600", "poppins700", "arimo400", "arimo500", "arimo600", "arimo700", "inter400", "inter500", "inter600", "inter700", "css", "ensureStyles", "style", "themeVars", "setThemeVars", "vars", "target", "key", "value", "cssKey", "setThemeMode", "mode", "Renderer", "isSignal", "isState", "isStatePath", "isComputed", "resolve", "computed", "after", "concat", "isReactive", "value", "cx", "values", "toPx", "splitPropsChildren", "args", "defaults", "props", "children", "isPropsObject", "arg", "key", "resolveValue", "resolveBool", "classVar", "prefix", "fallback", "normalize", "v", "resolved", "finalValue", "classFlag", "name", "classMap", "map", "getClass", "HtmlButton", "Span", "when", "after", "Button", "args", "props", "children", "splitPropsChildren", "variant", "size", "fullWidth", "loading", "leftSection", "rightSection", "className", "disabled", "rest", "isDisabled", "after", "HtmlButton", "cx", "classVar", "classFlag", "when", "Span", "Span", "Text", "args", "props", "children", "splitPropsChildren", "size", "weight", "color", "dimmed", "align", "className", "style", "rest", "weightClass", "classMap", "colorClass", "alignClass", "Span", "cx", "classVar", "classFlag", "H1", "H2", "H3", "H4", "H5", "H6", "map", "H1", "H2", "H3", "H4", "H5", "H6", "Title", "args", "props", "children", "splitPropsChildren", "order", "className", "style", "rest", "orderValue", "resolveValue", "cx", "classVar", "Div", "Container", "args", "props", "children", "splitPropsChildren", "size", "fluid", "className", "style", "rest", "Div", "cx", "classFlag", "classVar", "Div", "Stack", "args", "props", "children", "splitPropsChildren", "gap", "align", "justify", "className", "style", "rest", "justifyClass", "classMap", "Div", "cx", "classVar", "Div", "Group", "args", "props", "children", "splitPropsChildren", "gap", "align", "justify", "position", "noWrap", "className", "style", "rest", "positionClass", "classMap", "Div", "cx", "classVar", "classFlag", "Div", "list", "when", "after", "Card", "args", "props", "children", "splitPropsChildren", "title", "content", "actions", "border", "padding", "radius", "shadow", "className", "style", "rest", "Div", "when", "list", "action", "Button", "e", "after", "s", "v", "cx", "classVar", "Span", "Badge", "args", "props", "children", "splitPropsChildren", "variant", "size", "className", "dot", "style", "rest", "dotClass", "classMap", "Span", "cx", "classVar", "classFlag", "Div", "Input", "HtmlTextarea", "Label", "Span", "when", "state", "after", "isState", "TextInput", "args", "props", "rawProps", "splitPropsChildren", "label", "description", "error", "size", "leftSection", "rightSection", "className", "inputClassName", "multiline", "computed_value", "rest", "raw_value", "onChange", "onInput", "onFocus", "onBlur", "onKeyDown", "onKeyUp", "onClick", "isValueTwoWay", "isState", "currentState", "state", "resolveValue", "after", "next", "handleInput", "ev", "isMultiline", "resolveBool", "Control", "HtmlTextarea", "Input", "finalInputClassName", "cx", "input", "Div", "when", "Label", "Span", "classFlag", "classVar", "Textarea", "args", "props", "splitPropsChildren", "size", "leftSection", "rightSection", "className", "rest", "TextInput", "Div", "Span", "after", "state", "NumberField", "args", "props", "rawProps", "splitPropsChildren", "value", "min", "max", "step", "size", "allowDecimal", "allowNegative", "decimalSeparator", "thousandSeparator", "decimalScale", "clampBehavior", "hideControls", "format", "locale", "currency", "formatOptions", "prefix", "suffix", "leftSection", "rightSection", "className", "computed_onChange", "computed_onInput", "rest", "_onChange", "_onInput", "onBlur", "onFocus", "onKeyDown", "onChange", "e", "onInput", "currentState", "state", "escapeRegExp", "getScale", "resolveValue", "resolved", "fmt", "parseNumber", "raw", "decSep", "thousSep", "rawValue", "normalized", "num", "addThousandSeparators", "intPart", "formatNumber", "scale", "numeric", "sign", "abs", "int", "dec", "formattedInt", "trimmed", "formatWithIntl", "kind", "resolvedLocale", "resolvedCurrency", "options", "style", "clampValue", "next", "minValue", "maxValue", "resolveSuffix", "suffixValue", "buildVisual", "prefixValue", "normalizedRaw", "normalizedPrefix", "normalizedSuffix", "hasPrefix", "hasSuffix", "makeSanitizedFromDigits", "digitsValue", "sep", "baseDigits", "padded", "decPart", "sanitized", "stripAffixes", "out", "sanitizeFromInput", "rawInput", "allowNeg", "body", "digits", "parsed", "clamped", "normalizeIncoming", "inputText", "filtered", "lastExternalValue", "updateFromExternal", "after", "hasRightSection", "showControls", "nextHidden", "nextRight", "inputMode", "inputFormat", "visual", "resolvedOptions", "stepBy", "direction", "current", "delta", "setCaretToEnd", "target", "setToEnd", "end", "handleInput", "ev", "handleBlur", "handleFocus", "handleKeyDown", "controls", "Div", "Span", "controlsWrapper", "finalRightSection", "nextControls", "TextInput", "cx", "NumberInput", "args", "NumberField", "Div", "HtmlButton", "portal", "when", "after", "forwardSvg", "backwardSvg", "checkedSvg", "indeterminateSvg", "closeSvg", "searchSvg", "plusSvg", "editSvg", "deleteSvg", "calendarTodaySvg", "Modal", "args", "props", "rawProps", "children", "splitPropsChildren", "opened", "title", "size", "centered", "overlay", "position", "className", "style", "onClose", "positionClass", "after", "pos", "isCentered", "when", "portal", "Div", "cx", "classVar", "ev", "HtmlButton", "closeSvg", "Div", "Span", "after", "when", "Loading", "args", "props", "splitPropsChildren", "variant", "size", "className", "isDots", "after", "next", "isBars", "when", "Div", "cx", "classVar", "Span", "Div", "Input", "Label", "Span", "when", "state", "after", "Checkbox", "args", "props", "rawProps", "splitPropsChildren", "checked", "label", "description", "size", "indeterminate", "className", "style", "inputProps", "rest", "onChange", "currentState", "state", "resolveBool", "after", "next", "control", "Label", "Input", "cx", "classVar", "when", "Div", "checkedSvg", "indeterminateSvg", "Span", "Input", "Label", "Span", "when", "Switch", "args", "props", "splitPropsChildren", "label", "size", "className", "style", "inputProps", "rest", "Label", "cx", "classVar", "Input", "when", "Span", "Div", "Span", "when", "state", "after", "Select", "args", "props", "rawProps", "splitPropsChildren", "data", "value", "size", "leftSection", "rightSection", "placeholder", "className", "rest", "onChange", "open", "state", "currentState", "resolveValue", "after", "next", "resolved", "selectValue", "valueClass", "current", "displayLabel", "match", "item", "Div", "cx", "classVar", "when", "Span", "Button", "Div", "state", "after", "list", "when", "Tabs", "args", "props", "rawProps", "splitPropsChildren", "value", "tabs", "orientation", "variant", "sticky", "className", "style", "onChange", "currentState", "state", "resolveValue", "sentinelNode", "listNode", "spacerHeight", "stickyLeft", "stickyWidth", "stickyTop", "isSticky", "lastScrollTop", "listening", "rafId", "initScheduled", "listenerTargets", "after", "next", "resolved", "setValue", "getScrollParents", "node", "parents", "current", "overflow", "getScrollRoot", "getRootTop", "root", "getScrollTop", "getScrollDirection", "last", "getNextSticky", "direction", "sentinelTop", "rootTop", "currentSticky", "updateSticky", "sentinelEl", "listEl", "resolveBool", "sentinelRect", "listRect", "currentScrollTop", "nextSticky", "scheduleUpdate", "addListenerTarget", "target", "initListeners", "stickyStyle", "values", "active", "left", "width", "top", "spacerStyle", "height", "Div", "cx", "classMap", "classVar", "list", "tab", "Button", "v", "tabVal", "when", "HtmlTable", "Thead", "Tbody", "Tr", "Th", "Td", "Table", "args", "props", "splitPropsChildren", "headers", "rows", "striped", "highlightOnHover", "withBorder", "withColumnBorders", "className", "style", "rest", "HtmlTable", "cx", "classFlag", "Thead", "Tr", "header", "Th", "Tbody", "row", "cell", "Td", "Div", "state", "when", "after", "Accordion", "args", "props", "children", "splitPropsChildren", "opened", "className", "rest", "openedState", "state", "resolveBool", "after", "next", "toggle", "header", "content", "Div", "cx", "when", "Span", "Tooltip", "args", "props", "children", "splitPropsChildren", "label", "className", "style", "Span", "cx", "Div", "when", "after", "state", "portal", "menuControlStore", "state", "Menu", "args", "mainNode", "dropdownNode", "dropdownStyle", "props", "rawProps", "children", "splitPropsChildren", "opened", "content", "position", "className", "rest", "onChange", "currentState", "resolveValue", "after", "value", "resolved", "closeOldSetCurrent", "parsePosition", "parts", "single", "first", "second", "updatePosition", "trigger", "dropdown", "rect", "dropdownRect", "positionValue", "spaceVar", "margin", "viewportWidth", "viewportHeight", "maxLeft", "maxTop", "placement", "align", "gap", "top", "left", "setOpen", "next", "toggle", "close", "Div", "cx", "when", "portal", "Div", "portal", "when", "Drawer", "args", "props", "children", "splitPropsChildren", "opened", "onClose", "position", "size", "overlay", "shadowed", "className", "style", "when", "portal", "Div", "cx", "classVar", "classMap", "ev", "Button", "Div", "Span", "when", "after", "Notification", "args", "props", "rawProps", "children", "splitPropsChildren", "title", "color", "icon", "loading", "withCloseButton", "withBorder", "className", "style", "onClose", "showLoader", "after", "nextIcon", "nextLoading", "withIcon", "Div", "cx", "value", "when", "Span", "Loading", "Button", "closeSvg", "Div", "when", "Divider", "args", "props", "splitPropsChildren", "label", "labelPosition", "vertical", "className", "rest", "Div", "cx", "classFlag", "classVar", "when", "Text", "Div", "Paper", "args", "props", "children", "splitPropsChildren", "padding", "radius", "shadow", "className", "rest", "Div", "cx", "value", "Button", "Div", "Span", "after", "when", "Alert", "args", "props", "rawProps", "children", "splitPropsChildren", "title", "color", "icon", "withCloseButton", "className", "rest", "onClose", "hasContent", "after", "showClose", "hasIcon", "Div", "cx", "value", "when", "Span", "Button", "Div", "Img", "when", "Avatar", "args", "props", "children", "splitPropsChildren", "src", "size", "alt", "className", "rest", "Div", "cx", "value", "when", "Img", "Span", "Kbd", "args", "props", "children", "splitPropsChildren", "className", "rest", "Span", "cx", "HtmlCode", "Code", "args", "props", "children", "splitPropsChildren", "className", "rest", "HtmlCode", "cx", "HtmlBlockquote", "Blockquote", "args", "props", "children", "splitPropsChildren", "className", "rest", "HtmlBlockquote", "cx", "Div", "SimpleGrid", "args", "props", "children", "splitPropsChildren", "cols", "gap", "className", "rest", "Div", "cx", "value", "Ul", "Ol", "Li", "Div", "Span", "after", "when", "isSignal", "isState", "isStatePath", "isComputed", "List", "args", "props", "children", "splitPropsChildren", "type", "size", "withPadding", "className", "rest", "typeClass", "classMap", "isOrdered", "after", "next", "isListNode", "value", "isListItemNode", "wrapChild", "child", "wrapValue", "item", "Li", "Span", "isSignal", "isState", "isStatePath", "isComputed", "listChildren", "listProps", "cx", "classVar", "classFlag", "when", "Ol", "Ul", "ListItem", "leftSection", "rightSection", "title", "body", "withBorder", "hasStructured", "nextTitle", "nextBody", "Div", "A", "Anchor", "args", "props", "children", "splitPropsChildren", "className", "rest", "A", "cx", "Img", "Image", "args", "props", "splitPropsChildren", "className", "rest", "Img", "cx", "Span", "Icon", "args", "props", "children", "splitPropsChildren", "Span", "cx", "classVar", "Div", "Progress", "args", "props", "splitPropsChildren", "value", "color", "size", "className", "rest", "Div", "cx", "classVar", "next", "pct", "Div", "after", "state", "when", "Slider", "args", "props", "rawProps", "splitPropsChildren", "onChange", "value", "marks", "size", "min", "max", "step", "disabled", "className", "rest", "currentState", "state", "resolveValue", "after", "next", "getBounds", "minValue", "maxValue", "getStep", "stepValue", "setValue", "clamped", "stepped", "percent", "v", "range", "pct", "updateFromEvent", "ev", "getRect", "rect", "ratio", "startDrag", "resolveBool", "trackEl", "handleMove", "moveEv", "handleUp", "Div", "cx", "classVar", "classFlag", "p", "when", "mark", "SliderMark", "label", "markValue", "Div", "after", "Skeleton", "args", "props", "splitPropsChildren", "height", "width", "className", "rest", "customStyle", "after", "h", "w", "style", "Div", "cx", "value", "Button", "after", "state", "Chip", "args", "props", "rawProps", "children", "splitPropsChildren", "checked", "size", "variant", "className", "rest", "onChange", "currentState", "state", "after", "next", "setChecked", "Button", "cx", "classVar", "current", "Div", "after", "state", "SegmentedControl", "args", "props", "rawProps", "splitPropsChildren", "value", "data", "size", "scroll", "className", "rest", "onChange", "currentState", "state", "resolveValue", "after", "next", "resolved", "setValue", "Div", "cx", "classVar", "item", "current", "Button", "Div", "state", "after", "Pagination", "args", "props", "rawProps", "splitPropsChildren", "page", "total", "size", "className", "rest", "onChange", "currentState", "state", "resolveValue", "after", "next", "resolved", "setPage", "totalValue", "clamped", "items", "i", "Div", "cx", "classVar", "Button", "v", "Div", "Input", "Label", "Span", "when", "Radio", "args", "props", "splitPropsChildren", "label", "description", "size", "className", "inputProps", "rest", "control", "Label", "Input", "cx", "classVar", "when", "Span", "Div", "Div", "RadioGroup", "args", "props", "children", "splitPropsChildren", "className", "rest", "Div", "cx", "Nav", "Span", "Breadcrumbs", "args", "props", "children", "splitPropsChildren", "separator", "className", "rest", "items", "filtered", "nodes", "item", "idx", "Span", "Nav", "cx", "Div", "Center", "args", "props", "children", "splitPropsChildren", "className", "rest", "Div", "cx", "Div", "Space", "args", "props", "splitPropsChildren", "size", "className", "rest", "Div", "cx", "value", "Div", "when", "Collapse", "args", "props", "children", "splitPropsChildren", "opened", "className", "rest", "when", "Div", "cx", "Button", "ActionIcon", "args", "props", "children", "splitPropsChildren", "size", "variant", "className", "rest", "Button", "cx", "classVar", "Div", "when", "after", "state", "Popover", "args", "props", "rawProps", "children", "splitPropsChildren", "opened", "position", "content", "className", "rest", "onChange", "currentState", "state", "resolveValue", "after", "next", "resolved", "setOpen", "Div", "cx", "when", "Div", "HoverCard", "args", "props", "children", "splitPropsChildren", "position", "content", "className", "rest", "Div", "cx", "value", "Div", "Affix", "args", "props", "children", "splitPropsChildren", "position", "className", "rest", "Div", "cx", "value", "HtmlFieldset", "Legend", "when", "Fieldset", "args", "props", "children", "splitPropsChildren", "legend", "className", "rest", "HtmlFieldset", "cx", "when", "Legend", "Div", "AppBar", "args", "props", "children", "splitPropsChildren", "position", "className", "rest", "Div", "cx", "classVar", "Div", "portal", "after", "state", "when", "Sidebar", "args", "props", "children", "splitPropsChildren", "when", "FixedSidebar", "DrawerSidebar", "open", "onClose", "position", "size", "blur", "fixed", "minWidth", "className", "rest", "mounted", "state", "openState", "transitionMs", "applyOpen", "next", "after", "overlayClass", "values", "cx", "drawerClass", "positionClass", "resolveValue", "portal", "Div", "ev", "classNameComposition", "minWidthValue", "minWidthClass", "Div", "when", "Timeline", "args", "props", "splitPropsChildren", "items", "className", "rest", "Div", "cx", "item", "when", "Div", "Stepper", "args", "props", "splitPropsChildren", "active", "items", "className", "rest", "Div", "cx", "item", "idx", "value", "Span", "after", "state", "Rating", "args", "props", "rawProps", "splitPropsChildren", "value", "max", "size", "className", "rest", "onChange", "currentState", "state", "resolveValue", "after", "next", "resolved", "setValue", "items", "maxValue", "i", "Span", "cx", "classVar", "current", "Span", "Tag", "args", "props", "children", "splitPropsChildren", "className", "rest", "Span", "cx", "Button", "Div", "state", "after", "weekDays", "Calendar", "args", "props", "rawProps", "splitPropsChildren", "value", "className", "size", "rest", "onChange", "resolveDate", "next", "resolved", "resolveValue", "parsed", "currentState", "state", "viewState", "after", "createDate", "year", "month", "day", "maxDay", "setDate", "current", "shiftMonth", "delta", "shiftYear", "monthLabel", "yearLabel", "gridCells", "selected", "start", "daysInMonth", "cells", "i", "d", "Div", "c", "cx", "classVar", "ActionIcon", "Icon", "backwardSvg", "Button", "forwardSvg", "Div", "Span", "Input", "when", "after", "state", "MultiSelect", "args", "props", "rawProps", "splitPropsChildren", "value", "data", "size", "className", "placeholder", "searchable", "rest", "onChange", "onSearchChange", "currentState", "state", "resolveValue", "searchState", "openState", "rootNode", "normalizeData", "items", "item", "after", "next", "resolved", "outsideCleanup", "handler", "ev", "root", "toggle", "val", "selected", "v", "normalizedData", "nextData", "filteredItems", "query", "q", "isEmpty", "nextSelected", "list", "isSearchable", "Div", "cx", "classVar", "current", "label", "entry", "Span", "closeSvg", "when", "Input", "checkedSvg", "Div", "when", "ToastStack", "args", "props", "splitPropsChildren", "items", "className", "onClose", "timeout", "rest", "Div", "cx", "item", "when", "DatePicker", "args", "props", "splitPropsChildren", "Calendar", "Div", "after", "Notifications", "args", "props", "rawProps", "splitPropsChildren", "items", "position", "className", "rest", "onRemove", "timers", "getId", "item", "index", "notifications", "after", "nextItems", "list", "resolveValue", "active", "id", "timeout", "handle", "Notification", "Div", "cx", "classVar", "Div", "after", "state", "when", "RangeSlider", "args", "props", "rawProps", "splitPropsChildren", "value", "marks", "min", "max", "step", "size", "disabled", "className", "rest", "onChange", "currentState", "state", "resolveValue", "getBounds", "minValue", "maxValue", "getStep", "stepValue", "normalize", "vals", "list", "first", "second", "low", "high", "after", "next", "setValue", "normalized", "percent", "range", "lowPct", "highPct", "updateFromEvent", "ev", "getRect", "thumb", "rect", "ratio", "nextValue", "current", "startDrag", "forcedThumb", "trackEl", "resolveBool", "track", "percentValue", "clickPct", "isLow", "handleMove", "moveEv", "handleUp", "Div", "cx", "classVar", "classFlag", "when", "mark", "SliderMark", "state", "after", "DateInput", "args", "props", "rawProps", "splitPropsChildren", "value", "size", "calendarSize", "leftSection", "rightSection", "className", "format", "minDate", "maxDate", "rest", "onChange", "resolveDate", "next", "resolved", "resolveValue", "parsed", "isSameDay", "left", "right", "formatDate", "date", "year", "month", "day", "parseDate", "text", "digits", "candidate", "min", "max", "currentDate", "state", "textValue", "opened", "after", "setDate", "Popover", "Calendar", "classVar", "TextInput", "cx", "Div", "when", "after", "state", "Popper", "args", "props", "rawProps", "children", "splitPropsChildren", "opened", "content", "className", "rest", "onChange", "currentState", "state", "resolveValue", "after", "next", "resolved", "setOpen", "Div", "cx", "when", "Button", "after", "when", "state", "PasswordInput", "args", "props", "rawProps", "splitPropsChildren", "size", "className", "rightSection", "rest", "onChange", "visible", "state", "inputType", "after", "next", "computedRightSection", "Button", "when", "TextInput", "Div", "SearchInput", "args", "props", "splitPropsChildren", "size", "className", "rest", "TextInput", "Div", "searchSvg", "Button", "after", "when", "state", "CopyButton", "args", "props", "children", "splitPropsChildren", "value", "timeout", "className", "rest", "copied", "buttonClass", "after", "next", "cx", "Button", "when", "Div", "ProgressRing", "args", "props", "splitPropsChildren", "size", "className", "rest", "Div", "cx", "value", "Div", "Button", "when", "Toast", "args", "props", "children", "splitPropsChildren", "title", "onClose", "className", "rest", "Div", "cx", "when", "Button", "Div", "state", "SelectSearch", "args", "props", "rawProps", "splitPropsChildren", "data", "className", "rest", "onChange", "query", "state", "items", "item", "Div", "cx", "TextInput", "ev", "Div", "SwitchGroup", "args", "props", "children", "splitPropsChildren", "className", "rest", "Div", "cx", "Div", "state", "after", "RangePicker", "args", "props", "rawProps", "splitPropsChildren", "value", "size", "className", "rest", "onChange", "currentState", "state", "resolveValue", "after", "next", "resolved", "setValue", "Div", "cx", "TextInput", "current", "ev", "Div", "Flex", "args", "props", "children", "splitPropsChildren", "direction", "wrap", "align", "justify", "gap", "className", "rest", "Div", "cx", "value", "A", "Div", "Span", "when", "after", "state", "NavLink", "args", "props", "rawProps", "children", "splitPropsChildren", "label", "description", "leftSection", "rightSection", "active", "disabled", "variant", "childrenOffset", "opened", "defaultOpened", "className", "padding", "rest", "onClick", "onChange", "hasChildren", "openState", "state", "resolveValue", "after", "next", "resolved", "childrenStyle", "toPx", "handleClick", "ev", "Div", "cx", "A", "classVar", "classFlag", "when", "Span", "Div", "when", "Indicator", "args", "props", "children", "splitPropsChildren", "show", "position", "color", "size", "className", "rest", "Div", "cx", "classVar", "when", "Span", "Burger", "args", "props", "splitPropsChildren", "opened", "className", "rest", "Span", "cx", "Div", "when", "LoadingOverlay", "args", "props", "splitPropsChildren", "visible", "rest", "when", "Div", "Loading", "Div", "Grid", "args", "props", "children", "splitPropsChildren", "className", "gap", "rest", "Div", "cx", "value", "Div", "Col", "args", "props", "children", "splitPropsChildren", "span", "className", "rest", "Div", "cx", "value", "Div", "ScrollArea", "args", "props", "children", "splitPropsChildren", "size", "className", "rest", "Div", "cx", "value", "Div", "Input", "after", "state", "when", "list", "PinInput", "args", "props", "rawProps", "splitPropsChildren", "length", "value", "size", "type", "mask", "placeholder", "disabled", "error", "oneTimeCode", "className", "onChange", "onComplete", "currentLength", "state", "resolveValue", "getLength", "after", "next", "newLen", "oldLen", "currentValues", "currentState", "currentNodes", "inputNodes", "_", "i", "initial", "len", "getValueString", "setValue", "str", "v", "focusInput", "index", "nodes", "getTypeRegex", "t", "handleInput", "idx", "ev", "inputValue", "regex", "handlePaste", "current", "startIdx", "pastedValue", "chars", "c", "char", "targetIdx", "nextEmpty", "handleKeyDown", "handleFocus", "handleContainerClick", "firstEmpty", "inputType", "m", "inputMode", "autoComplete", "o", "isDisabled", "d", "hasError", "e", "indices", "renderInput", "Input", "cx", "when", "values", "Div", "classVar", "list", "Div", "CheckboxGroup", "args", "props", "children", "splitPropsChildren", "className", "rest", "Div", "cx", "Div", "AvatarGroup", "args", "props", "children", "splitPropsChildren", "className", "rest", "Div", "cx", "Div", "BadgeGroup", "args", "props", "children", "splitPropsChildren", "className", "rest", "Div", "cx", "Div", "Span", "after", "context", "sizeContext", "context", "tableContext", "GridTable", "args", "props", "rawProps", "children", "splitPropsChildren", "className", "sizesProp", "sortProp", "stickyProp", "rest", "onSort", "sizes", "after", "v", "table", "Div", "cx", "classFlag", "s", "header", "_sort", "sortKey", "direction", "handleSort", "current", "next", "Span", "d", "Button", "Div", "Span", "when", "BottomBar", "args", "props", "children", "splitPropsChildren", "grow", "className", "rest", "Div", "cx", "classFlag", "rawProps", "icon", "label", "active", "disabled", "variant", "onClick", "Button", "classVar", "when", "Span", "Div", "Button", "state", "after", "when", "Input", "Label", "Span", "WEEKDAY_LABELS", "VIEW_OPTIONS", "toDate", "v", "d", "normalizeEvent", "ev", "start", "end", "getEventsInRange", "events", "rangeStart", "rangeEnd", "getEventsForDay", "day", "weekStart", "date", "firstDayOfWeek", "diff", "formatTime", "locale", "formatDate", "formatMonthYear", "formatWeekRange", "weekStartDate", "durationPct", "start", "end", "dayStart", "dayEnd", "dayStartMs", "dayEndMs", "total", "s", "mins", "top", "height", "EventCalendar", "args", "props", "rawProps", "splitPropsChildren", "eventsProp", "defaultView", "firstDayOfWeek", "locale", "hourSlotDuration", "minTime", "maxTime", "eventCreationColorOptions", "className", "rest", "onCreateEventRequest", "onViewEventRequest", "onUpdateEventRequest", "onRemoveEventRequest", "eventCreationEmailLookup", "eventCreationLocationsCallback", "eventCreationCalendarsCallback", "onSlotClick", "onDateRangeChange", "viewMode", "state", "resolveValue", "currentDate", "modalState", "selectedEvent", "createDraft", "eventsList", "after", "v", "viewDate", "weekStartDate", "weekStart", "slotDuration", "goPrev", "d", "goNext", "goToday", "openCreateModal", "allDay", "e", "openViewModal", "event", "normalizeEvent", "openEditModal", "ev", "closeModal", "handleSlotClick", "date", "hour", "handleCreateSubmit", "draft", "handleUpdateSubmit", "handleRemoveRequest", "titleLabel", "view", "formatMonthYear", "formatWeekRange", "formatDate", "header", "Div", "ActionIcon", "Icon", "backwardSvg", "forwardSvg", "Button", "calendarTodaySvg", "VIEW_OPTIONS", "opt", "cx", "plusSvg", "monthGrid", "events", "firstDay", "year", "month", "startDow", "daysInMonth", "prevMonthDays", "rows", "dayCount", "nextMonthDay", "totalCells", "dayCells", "i", "day", "isCurrentMonth", "dateObj", "dayEvents", "getEventsForDay", "isToday", "Span", "when", "monthView", "WEEKDAY_LABELS", "label", "timeSlots", "h", "weekDays", "days", "weekView", "min", "rangeStart", "rangeEnd", "inRange", "getEventsInRange", "formatTime", "dayView", "createEditForm", "isEdit", "today", "defaultStart", "defaultEnd", "titleState", "startDateState", "startTimeState", "endDateState", "endTimeState", "allDayState", "descState", "locationState", "attendeesState", "emailLookupQuery", "emailLookupResults", "locationOptions", "locationQuery", "colorOptions", "colorState", "applyDraft", "doEmailLookup", "query", "list", "addAttendee", "item", "current", "a", "removeAttendee", "index", "next", "loadLocations", "TextInput", "Checkbox", "Label", "Input", "o", "loc", "r", "Textarea", "c", "viewModalContent", "editSvg", "deleteSvg", "m", "Modal", "state", "useDisclosure", "initial", "opened", "ensureStyles"]
4
+ "sourcesContent": ["const STYLE_ID = 'granular-ui-styles';\n\nconst poppins400 = new URL('./fonts/Poppins-400.ttf', import.meta.url).href;\nconst poppins500 = new URL('./fonts/Poppins-500.ttf', import.meta.url).href;\nconst poppins600 = new URL('./fonts/Poppins-600.ttf', import.meta.url).href;\nconst poppins700 = new URL('./fonts/Poppins-700.ttf', import.meta.url).href;\n\nconst arimo400 = new URL('./fonts/Arimo-400.ttf', import.meta.url).href;\nconst arimo500 = new URL('./fonts/Arimo-500.ttf', import.meta.url).href;\nconst arimo600 = new URL('./fonts/Arimo-600.ttf', import.meta.url).href;\nconst arimo700 = new URL('./fonts/Arimo-700.ttf', import.meta.url).href;\n\nconst inter400 = new URL('./fonts/Inter-400.woff2', import.meta.url).href;\nconst inter500 = new URL('./fonts/Inter-500.woff2', import.meta.url).href;\nconst inter600 = new URL('./fonts/Inter-600.woff2', import.meta.url).href;\nconst inter700 = new URL('./fonts/Inter-700.woff2', import.meta.url).href;\n\nconst css = `\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url('${poppins400}') format('truetype');\n}\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url('${poppins500}') format('truetype');\n}\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url('${poppins600}') format('truetype');\n}\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url('${poppins700}') format('truetype');\n}\n\n@font-face {\n font-family: 'Arimo';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url('${arimo400}') format('truetype');\n}\n@font-face {\n font-family: 'Arimo';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url('${arimo500}') format('truetype');\n}\n@font-face {\n font-family: 'Arimo';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url('${arimo600}') format('truetype');\n}\n@font-face {\n font-family: 'Arimo';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url('${arimo700}') format('truetype');\n}\n\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url('${inter400}') format('woff2');\n}\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url('${inter500}') format('woff2');\n}\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url('${inter600}') format('woff2');\n}\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url('${inter700}') format('woff2');\n}\n\n:root {\n /* Color scales - base colors */\n --g-ui-white: #ffffff;\n --g-ui-black: #000000;\n \n --g-ui-gray-50: #f9fafb;\n --g-ui-gray-100: #f2f4f7;\n --g-ui-gray-200: #e4e7ec;\n --g-ui-gray-300: #cdd1d9;\n --g-ui-gray-400: #98a2b3;\n --g-ui-gray-500: #667085;\n --g-ui-gray-600: #475467;\n --g-ui-gray-700: #344054;\n --g-ui-gray-800: #1d2939;\n --g-ui-gray-900: #101828;\n --g-ui-gray-950: #0c111d;\n \n --g-ui-red-50: #fef3f2;\n --g-ui-red-100: #fee4e2;\n --g-ui-red-200: #fecdca;\n --g-ui-red-300: #fda29b;\n --g-ui-red-400: #f97066;\n --g-ui-red-500: #f04438;\n --g-ui-red-600: #d92d20;\n --g-ui-red-700: #b42318;\n --g-ui-red-800: #912018;\n --g-ui-red-900: #7a271a;\n --g-ui-red-950: #55160c;\n \n --g-ui-orange-50: #fff6ed;\n --g-ui-orange-100: #ffead5;\n --g-ui-orange-200: #fddcab;\n --g-ui-orange-300: #feb273;\n --g-ui-orange-400: #fd853a;\n --g-ui-orange-500: #ef6820;\n --g-ui-orange-600: #e04f16;\n --g-ui-orange-700: #b93815;\n --g-ui-orange-800: #932f19;\n --g-ui-orange-900: #7a2e0e;\n --g-ui-orange-950: #511c10;\n \n --g-ui-green-50: #ecfdf3;\n --g-ui-green-100: #dcfae6;\n --g-ui-green-200: #abefc6;\n --g-ui-green-300: #75e0a7;\n --g-ui-green-400: #47cd89;\n --g-ui-green-500: #17b26a;\n --g-ui-green-600: #079455;\n --g-ui-green-700: #067647;\n --g-ui-green-800: #085d3a;\n --g-ui-green-900: #074d31;\n --g-ui-green-950: #053321;\n \n --g-ui-blue-50: #eff8ff;\n --g-ui-blue-100: #d1e9ff;\n --g-ui-blue-200: #b2ddff;\n --g-ui-blue-300: #84caff;\n --g-ui-blue-400: #53b1fd;\n --g-ui-blue-500: #2e90fa;\n --g-ui-blue-600: #1570ef;\n --g-ui-blue-700: #175cd3;\n --g-ui-blue-800: #1849a9;\n --g-ui-blue-900: #194185;\n --g-ui-blue-950: #102a56;\n \n --g-ui-yellow-50: #fefbe8;\n --g-ui-yellow-100: #fef7c3;\n --g-ui-yellow-200: #feee95;\n --g-ui-yellow-300: #fde272;\n --g-ui-yellow-400: #fac515;\n --g-ui-yellow-500: #eaaa08;\n --g-ui-yellow-600: #ca8504;\n --g-ui-yellow-700: #a15c07;\n --g-ui-yellow-800: #854a0e;\n --g-ui-yellow-900: #713b12;\n --g-ui-yellow-950: #422006;\n \n --g-ui-teal-50: #f0fdf9;\n --g-ui-teal-100: #ccfbef;\n --g-ui-teal-200: #99f6e0;\n --g-ui-teal-300: #5fe9d0;\n --g-ui-teal-400: #2ed3b7;\n --g-ui-teal-500: #15b79e;\n --g-ui-teal-600: #0e9384;\n --g-ui-teal-700: #107569;\n --g-ui-teal-800: #125d56;\n --g-ui-teal-900: #134e48;\n --g-ui-teal-950: #0a2926;\n \n --g-ui-purple-50: #f4f3ff;\n --g-ui-purple-100: #ebe9fe;\n --g-ui-purple-200: #d9d6fe;\n --g-ui-purple-300: #bdb4fe;\n --g-ui-purple-400: #9b8afb;\n --g-ui-purple-500: #7a5af8;\n --g-ui-purple-600: #6938ef;\n --g-ui-purple-700: #5925dc;\n --g-ui-purple-800: #4a1fb8;\n --g-ui-purple-900: #3e1c96;\n --g-ui-purple-950: #27115a;\n \n --g-ui-pink-50: #fdf2fa;\n --g-ui-pink-100: #fce7f6;\n --g-ui-pink-200: #fcceee;\n --g-ui-pink-300: #faa7e0;\n --g-ui-pink-400: #f670c7;\n --g-ui-pink-500: #ee46bc;\n --g-ui-pink-600: #dd2590;\n --g-ui-pink-700: #c11574;\n --g-ui-pink-800: #9e165f;\n --g-ui-pink-900: #851651;\n --g-ui-pink-950: #4e0d30;\n \n --g-ui-cyan-50: #ecfdff;\n --g-ui-cyan-100: #cff9fe;\n --g-ui-cyan-200: #a5f0fc;\n --g-ui-cyan-300: #67e3f9;\n --g-ui-cyan-400: #22ccee;\n --g-ui-cyan-500: #06aed4;\n --g-ui-cyan-600: #088ab2;\n --g-ui-cyan-700: #0e7090;\n --g-ui-cyan-800: #155b75;\n --g-ui-cyan-900: #164c63;\n --g-ui-cyan-950: #0d2d3a;\n \n /* Semantic colors - Dark theme (default) */\n --g-ui-bg: var(--g-ui-gray-950);\n --g-ui-bg-subtle: var(--g-ui-gray-900);\n --g-ui-bg-muted: var(--g-ui-gray-800);\n --g-ui-bg-emphasized: var(--g-ui-gray-700);\n --g-ui-bg-inverted: var(--g-ui-gray-50);\n --g-ui-bg-panel: var(--g-ui-gray-900);\n --g-ui-bg-error: var(--g-ui-red-950);\n --g-ui-bg-warning: var(--g-ui-orange-950);\n --g-ui-bg-success: var(--g-ui-green-950);\n --g-ui-bg-info: var(--g-ui-blue-950);\n \n --g-ui-fg: var(--g-ui-gray-50);\n --g-ui-fg-muted: var(--g-ui-gray-400);\n --g-ui-fg-subtle: var(--g-ui-gray-500);\n --g-ui-fg-inverted: var(--g-ui-gray-950);\n --g-ui-fg-error: var(--g-ui-red-400);\n --g-ui-fg-warning: var(--g-ui-orange-300);\n --g-ui-fg-success: var(--g-ui-green-400);\n --g-ui-fg-info: var(--g-ui-blue-400);\n \n --g-ui-border: var(--g-ui-gray-700);\n --g-ui-border-subtle: var(--g-ui-gray-900);\n --g-ui-border-muted: var(--g-ui-gray-800);\n --g-ui-border-emphasized: var(--g-ui-gray-600);\n --g-ui-border-inverted: var(--g-ui-gray-200);\n --g-ui-border-error: var(--g-ui-red-400);\n --g-ui-border-warning: var(--g-ui-orange-400);\n --g-ui-border-success: var(--g-ui-green-400);\n --g-ui-border-info: var(--g-ui-blue-400);\n \n /* Gray semantic */\n --g-ui-gray-contrast: var(--g-ui-gray-950);\n --g-ui-gray-fg: var(--g-ui-gray-200);\n --g-ui-gray-subtle: var(--g-ui-gray-800);\n --g-ui-gray-muted: var(--g-ui-gray-700);\n --g-ui-gray-emphasized: var(--g-ui-gray-600);\n --g-ui-gray-solid: var(--g-ui-gray-50);\n --g-ui-gray-focus-ring: var(--g-ui-gray-400);\n --g-ui-gray-border: var(--g-ui-gray-700);\n \n /* Red semantic */\n --g-ui-red-contrast: white;\n --g-ui-red-fg: var(--g-ui-red-300);\n --g-ui-red-subtle: var(--g-ui-red-900);\n --g-ui-red-muted: var(--g-ui-red-800);\n --g-ui-red-emphasized: var(--g-ui-red-700);\n --g-ui-red-solid: var(--g-ui-red-600);\n --g-ui-red-focus-ring: var(--g-ui-red-500);\n --g-ui-red-border: var(--g-ui-red-400);\n \n /* Orange semantic */\n --g-ui-orange-contrast: black;\n --g-ui-orange-fg: var(--g-ui-orange-300);\n --g-ui-orange-subtle: var(--g-ui-orange-900);\n --g-ui-orange-muted: var(--g-ui-orange-800);\n --g-ui-orange-emphasized: var(--g-ui-orange-700);\n --g-ui-orange-solid: var(--g-ui-orange-500);\n --g-ui-orange-focus-ring: var(--g-ui-orange-500);\n --g-ui-orange-border: var(--g-ui-orange-400);\n \n /* Green semantic */\n --g-ui-green-contrast: white;\n --g-ui-green-fg: var(--g-ui-green-300);\n --g-ui-green-subtle: var(--g-ui-green-900);\n --g-ui-green-muted: var(--g-ui-green-800);\n --g-ui-green-emphasized: var(--g-ui-green-700);\n --g-ui-green-solid: var(--g-ui-green-600);\n --g-ui-green-focus-ring: var(--g-ui-green-500);\n --g-ui-green-border: var(--g-ui-green-400);\n \n /* Blue semantic */\n --g-ui-blue-contrast: white;\n --g-ui-blue-fg: var(--g-ui-blue-300);\n --g-ui-blue-subtle: var(--g-ui-blue-900);\n --g-ui-blue-muted: var(--g-ui-blue-800);\n --g-ui-blue-emphasized: var(--g-ui-blue-700);\n --g-ui-blue-solid: var(--g-ui-blue-600);\n --g-ui-blue-focus-ring: var(--g-ui-blue-500);\n --g-ui-blue-border: var(--g-ui-blue-400);\n \n /* Yellow semantic */\n --g-ui-yellow-contrast: black;\n --g-ui-yellow-fg: var(--g-ui-yellow-300);\n --g-ui-yellow-subtle: var(--g-ui-yellow-900);\n --g-ui-yellow-muted: var(--g-ui-yellow-800);\n --g-ui-yellow-emphasized: var(--g-ui-yellow-700);\n --g-ui-yellow-solid: var(--g-ui-yellow-300);\n --g-ui-yellow-focus-ring: var(--g-ui-yellow-500);\n --g-ui-yellow-border: var(--g-ui-yellow-500);\n \n /* Teal semantic */\n --g-ui-teal-contrast: white;\n --g-ui-teal-fg: var(--g-ui-teal-300);\n --g-ui-teal-subtle: var(--g-ui-teal-900);\n --g-ui-teal-muted: var(--g-ui-teal-800);\n --g-ui-teal-emphasized: var(--g-ui-teal-700);\n --g-ui-teal-solid: var(--g-ui-teal-600);\n --g-ui-teal-focus-ring: var(--g-ui-teal-500);\n --g-ui-teal-border: var(--g-ui-teal-400);\n \n /* Purple semantic */\n --g-ui-purple-contrast: white;\n --g-ui-purple-fg: var(--g-ui-purple-300);\n --g-ui-purple-subtle: var(--g-ui-purple-900);\n --g-ui-purple-muted: var(--g-ui-purple-800);\n --g-ui-purple-emphasized: var(--g-ui-purple-700);\n --g-ui-purple-solid: var(--g-ui-purple-600);\n --g-ui-purple-focus-ring: var(--g-ui-purple-500);\n --g-ui-purple-border: var(--g-ui-purple-400);\n \n /* Pink semantic */\n --g-ui-pink-contrast: white;\n --g-ui-pink-fg: var(--g-ui-pink-300);\n --g-ui-pink-subtle: var(--g-ui-pink-900);\n --g-ui-pink-muted: var(--g-ui-pink-800);\n --g-ui-pink-emphasized: var(--g-ui-pink-700);\n --g-ui-pink-solid: var(--g-ui-pink-600);\n --g-ui-pink-focus-ring: var(--g-ui-pink-500);\n --g-ui-pink-border: var(--g-ui-pink-400);\n \n /* Cyan semantic */\n --g-ui-cyan-contrast: white;\n --g-ui-cyan-fg: var(--g-ui-cyan-300);\n --g-ui-cyan-subtle: var(--g-ui-cyan-900);\n --g-ui-cyan-muted: var(--g-ui-cyan-800);\n --g-ui-cyan-emphasized: var(--g-ui-cyan-700);\n --g-ui-cyan-solid: var(--g-ui-cyan-600);\n --g-ui-cyan-focus-ring: var(--g-ui-cyan-500);\n --g-ui-cyan-border: var(--g-ui-cyan-400);\n \n /* Primary (indigo #6366f1 - Linear inspired) */\n --g-ui-primary: #6366f1;\n --g-ui-primary-hover: #818cf8;\n --g-ui-primary-active: #4f46e5;\n --g-ui-primary-subtle: rgba(99, 102, 241, 0.1);\n --g-ui-primary-muted: rgba(99, 102, 241, 0.2);\n --g-ui-primary-emphasized: rgba(99, 102, 241, 0.3);\n --g-ui-primary-fg: var(--g-ui-white);\n \n /* Aliases for common usage */\n --g-ui-success: var(--g-ui-green-500);\n --g-ui-danger: var(--g-ui-red-500);\n --g-ui-warning: var(--g-ui-yellow-500);\n --g-ui-info: var(--g-ui-cyan-500);\n \n /* Shadows - Dark theme (dual-layer, Linear/Vercel inspired) */\n --g-ui-shadow-xs: 0px 1px 2px rgba(0, 0, 0, 0.48);\n --g-ui-shadow-sm: 0px 1px 3px rgba(0, 0, 0, 0.48), 0px 1px 2px rgba(0, 0, 0, 0.32);\n --g-ui-shadow-md: 0px 4px 8px -2px rgba(0, 0, 0, 0.48), 0px 2px 4px -2px rgba(0, 0, 0, 0.32);\n --g-ui-shadow-lg: 0px 12px 16px -4px rgba(0, 0, 0, 0.48), 0px 4px 6px -2px rgba(0, 0, 0, 0.24);\n --g-ui-shadow-xl: 0px 20px 24px -4px rgba(0, 0, 0, 0.48), 0px 8px 8px -4px rgba(0, 0, 0, 0.24);\n --g-ui-shadow-2xl: 0px 24px 48px -12px rgba(0, 0, 0, 0.64);\n \n /* Legacy (compatibility) */\n --g-ui-text: var(--g-ui-fg);\n --g-ui-muted: var(--g-ui-fg-muted);\n --g-ui-surface: var(--g-ui-bg-panel);\n --g-ui-primary-strong: var(--g-ui-primary-active);\n --g-ui-shadow: var(--g-ui-shadow-md);\n \n /* Misc */\n --g-ui-radius: 4px;\n --g-ui-font: 'Inter', 'Arimo', 'Poppins', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n --g-ui-space-2: 2px;\n --g-ui-space-3: 3px;\n --g-ui-space-4: 4px;\n --g-ui-space-5: 5px;\n --g-ui-space-6: 6px;\n --g-ui-space-7: 7px;\n --g-ui-space-8: 8px;\n --g-ui-space-9: 9px;\n --g-ui-space-10: 10px;\n --g-ui-space-12: 12px;\n --g-ui-space-13: 13px;\n --g-ui-space-14: 14px;\n --g-ui-space-15: 15px;\n --g-ui-space-16: 16px;\n --g-ui-space-18: 18px;\n --g-ui-space-20: 20px;\n --g-ui-space-22: 22px;\n --g-ui-space-24: 24px;\n --g-ui-space-26: 26px;\n --g-ui-space-28: 28px;\n --g-ui-space-30: 30px;\n --g-ui-space-32: 32px;\n --g-ui-space-36: 36px;\n --g-ui-space-38: 38px;\n --g-ui-space-40: 40px;\n --g-ui-container-padding: var(--g-ui-space-16);\n}\n\n.g-ui-theme-dark {\n --g-ui-bg: var(--g-ui-gray-950);\n --g-ui-bg-subtle: var(--g-ui-gray-800);\n --g-ui-bg-muted: var(--g-ui-gray-700);\n --g-ui-bg-emphasized: var(--g-ui-gray-600);\n --g-ui-bg-inverted: var(--g-ui-gray-50);\n --g-ui-bg-panel: var(--g-ui-gray-900);\n \n --g-ui-fg: var(--g-ui-gray-50);\n --g-ui-fg-muted: var(--g-ui-gray-400);\n --g-ui-fg-subtle: var(--g-ui-gray-500);\n --g-ui-fg-inverted: var(--g-ui-gray-950);\n \n --g-ui-border: var(--g-ui-gray-700);\n --g-ui-border-subtle: var(--g-ui-gray-900);\n --g-ui-border-muted: var(--g-ui-gray-800);\n --g-ui-border-emphasized: var(--g-ui-gray-600);\n \n /* Gray semantic */\n --g-ui-gray-contrast: var(--g-ui-gray-950);\n --g-ui-gray-subtle: var(--g-ui-gray-800);\n --g-ui-gray-muted: var(--g-ui-gray-700);\n --g-ui-gray-emphasized: var(--g-ui-gray-600);\n --g-ui-gray-solid: var(--g-ui-gray-50);\n --g-ui-gray-border: var(--g-ui-gray-700);\n \n /* Primary (dark mode) */\n --g-ui-primary-hover: #818cf8;\n --g-ui-primary-active: #4f46e5;\n \n --g-ui-shadow-xs: 0px 1px 2px rgba(0, 0, 0, 0.48);\n --g-ui-shadow-sm: 0px 1px 3px rgba(0, 0, 0, 0.48), 0px 1px 2px rgba(0, 0, 0, 0.32);\n --g-ui-shadow-md: 0px 4px 8px -2px rgba(0, 0, 0, 0.48), 0px 2px 4px -2px rgba(0, 0, 0, 0.32);\n --g-ui-shadow-lg: 0px 12px 16px -4px rgba(0, 0, 0, 0.48), 0px 4px 6px -2px rgba(0, 0, 0, 0.24);\n --g-ui-shadow-xl: 0px 20px 24px -4px rgba(0, 0, 0, 0.48), 0px 8px 8px -4px rgba(0, 0, 0, 0.24);\n --g-ui-shadow-2xl: 0px 24px 48px -12px rgba(0, 0, 0, 0.64);\n}\n\n.g-ui-theme-light {\n /* Semantic colors - Light theme */\n --g-ui-bg: var(--g-ui-white);\n --g-ui-bg-subtle: var(--g-ui-gray-50);\n --g-ui-bg-muted: var(--g-ui-gray-100);\n --g-ui-bg-emphasized: var(--g-ui-gray-200);\n --g-ui-bg-inverted: var(--g-ui-gray-950);\n --g-ui-bg-panel: var(--g-ui-white);\n --g-ui-bg-error: var(--g-ui-red-50);\n --g-ui-bg-warning: var(--g-ui-orange-50);\n --g-ui-bg-success: var(--g-ui-green-50);\n --g-ui-bg-info: var(--g-ui-blue-50);\n \n --g-ui-fg: var(--g-ui-gray-900);\n --g-ui-fg-muted: var(--g-ui-gray-600);\n --g-ui-fg-subtle: var(--g-ui-gray-400);\n --g-ui-fg-inverted: var(--g-ui-gray-50);\n --g-ui-fg-error: var(--g-ui-red-600);\n --g-ui-fg-warning: var(--g-ui-orange-600);\n --g-ui-fg-success: var(--g-ui-green-600);\n --g-ui-fg-info: var(--g-ui-blue-600);\n \n /* Legacy override for light theme */\n --g-ui-text: var(--g-ui-fg);\n --g-ui-muted: var(--g-ui-fg-muted);\n \n --g-ui-border: var(--g-ui-gray-200);\n --g-ui-border-subtle: var(--g-ui-gray-100);\n --g-ui-border-muted: var(--g-ui-gray-200);\n --g-ui-border-emphasized: var(--g-ui-gray-300);\n --g-ui-border-inverted: var(--g-ui-gray-800);\n --g-ui-border-error: var(--g-ui-red-300);\n --g-ui-border-warning: var(--g-ui-orange-300);\n --g-ui-border-success: var(--g-ui-green-300);\n --g-ui-border-info: var(--g-ui-blue-300);\n \n /* Gray semantic */\n --g-ui-gray-contrast: var(--g-ui-gray-50);\n --g-ui-gray-fg: var(--g-ui-gray-700);\n --g-ui-gray-subtle: var(--g-ui-gray-50);\n --g-ui-gray-muted: var(--g-ui-gray-100);\n --g-ui-gray-emphasized: var(--g-ui-gray-200);\n --g-ui-gray-solid: var(--g-ui-gray-900);\n --g-ui-gray-focus-ring: var(--g-ui-gray-400);\n --g-ui-gray-border: var(--g-ui-gray-200);\n \n /* Red semantic */\n --g-ui-red-contrast: white;\n --g-ui-red-fg: var(--g-ui-red-600);\n --g-ui-red-subtle: var(--g-ui-red-50);\n --g-ui-red-muted: var(--g-ui-red-100);\n --g-ui-red-emphasized: var(--g-ui-red-200);\n --g-ui-red-solid: var(--g-ui-red-600);\n --g-ui-red-focus-ring: var(--g-ui-red-500);\n --g-ui-red-border: var(--g-ui-red-300);\n \n /* Orange semantic */\n --g-ui-orange-contrast: white;\n --g-ui-orange-fg: var(--g-ui-orange-600);\n --g-ui-orange-subtle: var(--g-ui-orange-50);\n --g-ui-orange-muted: var(--g-ui-orange-100);\n --g-ui-orange-emphasized: var(--g-ui-orange-200);\n --g-ui-orange-solid: var(--g-ui-orange-600);\n --g-ui-orange-focus-ring: var(--g-ui-orange-500);\n --g-ui-orange-border: var(--g-ui-orange-300);\n \n /* Green semantic */\n --g-ui-green-contrast: white;\n --g-ui-green-fg: var(--g-ui-green-600);\n --g-ui-green-subtle: var(--g-ui-green-50);\n --g-ui-green-muted: var(--g-ui-green-100);\n --g-ui-green-emphasized: var(--g-ui-green-200);\n --g-ui-green-solid: var(--g-ui-green-600);\n --g-ui-green-focus-ring: var(--g-ui-green-500);\n --g-ui-green-border: var(--g-ui-green-300);\n \n /* Blue semantic */\n --g-ui-blue-contrast: white;\n --g-ui-blue-fg: var(--g-ui-blue-600);\n --g-ui-blue-subtle: var(--g-ui-blue-50);\n --g-ui-blue-muted: var(--g-ui-blue-100);\n --g-ui-blue-emphasized: var(--g-ui-blue-200);\n --g-ui-blue-solid: var(--g-ui-blue-600);\n --g-ui-blue-focus-ring: var(--g-ui-blue-500);\n --g-ui-blue-border: var(--g-ui-blue-300);\n \n /* Yellow semantic */\n --g-ui-yellow-contrast: black;\n --g-ui-yellow-fg: var(--g-ui-yellow-700);\n --g-ui-yellow-subtle: var(--g-ui-yellow-50);\n --g-ui-yellow-muted: var(--g-ui-yellow-100);\n --g-ui-yellow-emphasized: var(--g-ui-yellow-200);\n --g-ui-yellow-solid: var(--g-ui-yellow-400);\n --g-ui-yellow-focus-ring: var(--g-ui-yellow-500);\n --g-ui-yellow-border: var(--g-ui-yellow-300);\n \n /* Teal semantic */\n --g-ui-teal-contrast: white;\n --g-ui-teal-fg: var(--g-ui-teal-600);\n --g-ui-teal-subtle: var(--g-ui-teal-50);\n --g-ui-teal-muted: var(--g-ui-teal-100);\n --g-ui-teal-emphasized: var(--g-ui-teal-200);\n --g-ui-teal-solid: var(--g-ui-teal-600);\n --g-ui-teal-focus-ring: var(--g-ui-teal-500);\n --g-ui-teal-border: var(--g-ui-teal-300);\n \n /* Purple semantic */\n --g-ui-purple-contrast: white;\n --g-ui-purple-fg: var(--g-ui-purple-600);\n --g-ui-purple-subtle: var(--g-ui-purple-50);\n --g-ui-purple-muted: var(--g-ui-purple-100);\n --g-ui-purple-emphasized: var(--g-ui-purple-200);\n --g-ui-purple-solid: var(--g-ui-purple-600);\n --g-ui-purple-focus-ring: var(--g-ui-purple-500);\n --g-ui-purple-border: var(--g-ui-purple-300);\n \n /* Pink semantic */\n --g-ui-pink-contrast: white;\n --g-ui-pink-fg: var(--g-ui-pink-600);\n --g-ui-pink-subtle: var(--g-ui-pink-50);\n --g-ui-pink-muted: var(--g-ui-pink-100);\n --g-ui-pink-emphasized: var(--g-ui-pink-200);\n --g-ui-pink-solid: var(--g-ui-pink-600);\n --g-ui-pink-focus-ring: var(--g-ui-pink-500);\n --g-ui-pink-border: var(--g-ui-pink-300);\n \n /* Cyan semantic */\n --g-ui-cyan-contrast: white;\n --g-ui-cyan-fg: var(--g-ui-cyan-600);\n --g-ui-cyan-subtle: var(--g-ui-cyan-50);\n --g-ui-cyan-muted: var(--g-ui-cyan-100);\n --g-ui-cyan-emphasized: var(--g-ui-cyan-200);\n --g-ui-cyan-solid: var(--g-ui-cyan-600);\n --g-ui-cyan-focus-ring: var(--g-ui-cyan-500);\n --g-ui-cyan-border: var(--g-ui-cyan-300);\n \n /* Primary overrides for light theme */\n --g-ui-primary-hover: #4f46e5;\n --g-ui-primary-active: #4338ca;\n --g-ui-primary-subtle: rgba(99, 102, 241, 0.06);\n --g-ui-primary-muted: rgba(99, 102, 241, 0.12);\n --g-ui-primary-emphasized: rgba(99, 102, 241, 0.2);\n \n /* Shadows - Light theme (dual-layer, Untitled UI inspired) */\n --g-ui-shadow-xs: 0px 1px 2px rgba(16, 24, 40, 0.05);\n --g-ui-shadow-sm: 0px 1px 3px rgba(16, 24, 40, 0.1), 0px 1px 2px rgba(16, 24, 40, 0.06);\n --g-ui-shadow-md: 0px 4px 8px -2px rgba(16, 24, 40, 0.1), 0px 2px 4px -2px rgba(16, 24, 40, 0.06);\n --g-ui-shadow-lg: 0px 12px 16px -4px rgba(16, 24, 40, 0.08), 0px 4px 6px -2px rgba(16, 24, 40, 0.03);\n --g-ui-shadow-xl: 0px 20px 24px -4px rgba(16, 24, 40, 0.08), 0px 8px 8px -4px rgba(16, 24, 40, 0.03);\n --g-ui-shadow-2xl: 0px 24px 48px -12px rgba(16, 24, 40, 0.18);\n}\nbody {\n margin: 0;\n padding: 0;\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n font-family: var(--g-ui-font);\n font-size: 14px;\n}\n\n.g-ui-reset {\n font-family: var(--g-ui-font);\n color: var(--g-ui-text);\n}\n\n.g-ui-text {\n font-family: var(--g-ui-font);\n font-weight: 400;\n color: var(--g-ui-text);\n}\n.g-ui-text-size-xs { font-size: 12px; line-height: 1.4; }\n.g-ui-text-size-sm { font-size: 14px; line-height: 1.45; }\n.g-ui-text-size-md { font-size: 16px; line-height: 1.5; }\n.g-ui-text-size-lg { font-size: 18px; line-height: 1.55; }\n.g-ui-text-size-xl { font-size: 20px; line-height: 1.6; }\n.g-ui-text-weight-400 { font-weight: 400; }\n.g-ui-text-weight-500 { font-weight: 500; }\n.g-ui-text-weight-600 { font-weight: 600; }\n.g-ui-text-weight-700 { font-weight: 700; }\n.g-ui-text-dimmed { color: var(--g-ui-muted); }\n.g-ui-text-muted { color: var(--g-ui-muted); }\n.g-ui-text-primary { color: var(--g-ui-primary); }\n.g-ui-text-success { color: var(--g-ui-success); }\n.g-ui-text-danger { color: var(--g-ui-danger); }\n.g-ui-text-align-left { text-align: left; }\n.g-ui-text-align-center { text-align: center; }\n.g-ui-text-align-right { text-align: right; }\n\n.g-ui-title {\n font-family: var(--g-ui-font);\n color: var(--g-ui-text);\n margin: 0;\n font-weight: 700;\n}\n.g-ui-title-order-1 { font-size: 38px; }\n.g-ui-title-order-2 { font-size: 32px; }\n.g-ui-title-order-3 { font-size: 28px; }\n.g-ui-title-order-4 { font-size: 22px; }\n.g-ui-title-order-5 { font-size: 18px; }\n.g-ui-title-order-6 { font-size: 16px; }\n\n.g-ui-stack {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-stack-gap, 0);\n}\n.g-ui-gap-none { gap: 0; }\n.g-ui-gap-xs { gap: var(--g-ui-space-4); }\n.g-ui-gap-sm { gap: var(--g-ui-space-8); }\n.g-ui-gap-md { gap: var(--g-ui-space-12); }\n.g-ui-gap-lg { gap: var(--g-ui-space-16); }\n.g-ui-gap-xl { gap: var(--g-ui-space-20); }\n.g-ui-align-start { align-items: flex-start; }\n.g-ui-align-center { align-items: center; }\n.g-ui-align-end { align-items: flex-end; }\n.g-ui-justify-start { justify-content: flex-start; }\n.g-ui-justify-center { justify-content: center; }\n.g-ui-justify-end { justify-content: flex-end; }\n.g-ui-justify-between { justify-content: space-between; }\n\n.g-ui-group {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n}\n.g-ui-no-wrap { flex-wrap: nowrap; }\n\n.g-ui-container {\n width: 100%;\n margin: 0 auto;\n padding: 0 var(--g-ui-container-padding, var(--g-ui-space-16));\n box-sizing: border-box;\n}\n.g-ui-container-size-xs { max-width: 540px; }\n.g-ui-container-size-sm { max-width: 720px; }\n.g-ui-container-size-md { max-width: 960px; }\n.g-ui-container-size-lg { max-width: 1140px; }\n.g-ui-container-size-xl { max-width: 1320px; }\n.g-ui-container-fluid { max-width: 100%; }\n\n.g-ui-card {\n background: var(--g-ui-surface);\n border-radius: var(--g-ui-radius);\n box-shadow: none;\n border: 1px solid var(--g-ui-border);\n}\n.g-ui-card-border-default { border: 1px solid var(--g-ui-border); }\n.g-ui-card-border-none { border: none; }\n.g-ui-card-border-light { border: 1px solid var(--g-ui-border-light); }\n.g-ui-card-border-dark { border: 1px solid var(--g-ui-border-dark); }\n.g-ui-card-border-primary { border: 1px solid var(--g-ui-primary); }\n.g-ui-card-border-success { border: 1px solid var(--g-ui-success); }\n.g-ui-card-border-danger { border: 1px solid var(--g-ui-danger); }\n.g-ui-card-border-warning { border: 1px solid var(--g-ui-warning); }\n.g-ui-card-border-info { border: 1px solid var(--g-ui-info); }\n.g-ui-card-border-subtle { border: 1px solid var(--g-ui-border-subtle); }\n.g-ui-card-border-emphasized { border: 1px solid var(--g-ui-border-emphasized); }\n.g-ui-card-border-inverted { border: 1px solid var(--g-ui-border-inverted); }\n.g-ui-card-border-error { border: 1px solid var(--g-ui-border-error); }\n.g-ui-card-border-warning { border: 1px solid var(--g-ui-border-warning); }\n.g-ui-card-border-success { border: 1px solid var(--g-ui-border-success); }\n.g-ui-card-border-info { border: 1px solid var(--g-ui-border-info); }\n\n.g-ui-card-padding-xs { padding: var(--g-ui-space-10); }\n.g-ui-card-padding-sm { padding: var(--g-ui-space-14); }\n.g-ui-card-padding-md { padding: var(--g-ui-space-18); }\n.g-ui-card-padding-lg { padding: var(--g-ui-space-24); }\n.g-ui-card-radius-sm { border-radius: 8px; }\n.g-ui-card-radius-md { border-radius: 10px; }\n.g-ui-card-radius-lg { border-radius: 14px; }\n.g-ui-card-shadow-none { box-shadow: none; }\n.g-ui-card-shadow-sm { box-shadow: var(--g-ui-shadow-sm); }\n.g-ui-card-shadow-md { box-shadow: var(--g-ui-shadow-md); }\n.g-ui-card-shadow-lg { box-shadow: var(--g-ui-shadow-lg); }\n.g-ui-card-title {\n margin-bottom: var(--g-ui-space-8);\n font-weight: 600;\n font-size: 16px;\n color: var(--g-ui-text);\n}\n.g-ui-card-content {\n color: var(--g-ui-muted);\n margin-bottom: var(--g-ui-space-10);\n}\n.g-ui-card-actions {\n position:relative;\n margin-top: var(--g-ui-space-10);\n display: flex;\n justify-content: flex-end;\n gap: var(--g-ui-space-8);\n border-top: 1px solid var(--g-ui-border);\n box-sizing: border-box;\n}\n\n.g-ui-card-padding-xs .g-ui-card-title, .g-ui-card-padding-xs .g-ui-card-content { margin-bottom: var(--g-ui-space-10); }\n.g-ui-card-padding-sm .g-ui-card-title, .g-ui-card-padding-sm .g-ui-card-content { margin-bottom: var(--g-ui-space-14); }\n.g-ui-card-padding-md .g-ui-card-title, .g-ui-card-padding-md .g-ui-card-content { margin-bottom: var(--g-ui-space-18); }\n.g-ui-card-padding-lg .g-ui-card-title, .g-ui-card-padding-lg .g-ui-card-content { margin-bottom: var(--g-ui-space-24); }\n\n.g-ui-card-padding-xs .g-ui-card-actions { left: calc(0px - var(--g-ui-space-10)); width: calc(100% + var(--g-ui-space-10) + var(--g-ui-space-10)); padding: var(--g-ui-space-10) var(--g-ui-space-10) 0 var(--g-ui-space-10); }\n.g-ui-card-padding-sm .g-ui-card-actions { left: calc(0px - var(--g-ui-space-14)); width: calc(100% + var(--g-ui-space-14) + var(--g-ui-space-14)); padding: var(--g-ui-space-14) var(--g-ui-space-14) 0 var(--g-ui-space-14); }\n.g-ui-card-padding-md .g-ui-card-actions { left: calc(0px - var(--g-ui-space-18)); width: calc(100% + var(--g-ui-space-18) + var(--g-ui-space-18)); padding: var(--g-ui-space-18) var(--g-ui-space-18) 0 var(--g-ui-space-18); }\n.g-ui-card-padding-lg .g-ui-card-actions { left: calc(0px - var(--g-ui-space-24)); width: calc(100% + var(--g-ui-space-24) + var(--g-ui-space-24)); padding: var(--g-ui-space-24) var(--g-ui-space-24) 0 var(--g-ui-space-24); }\n\n.g-ui-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n border-radius: 999px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.25px;\n white-space: nowrap;\n}\n.g-ui-badge-size-xs { font-size: 9px; height: 16px; padding: 0 var(--g-ui-space-6); }\n.g-ui-badge-size-sm { font-size: 10px; height: 18px; padding: 0 var(--g-ui-space-8); }\n.g-ui-badge-size-md { font-size: 11px; height: 20px; padding: 0 var(--g-ui-space-10); }\n.g-ui-badge-size-lg { font-size: 13px; height: 26px; padding: 0 var(--g-ui-space-12); }\n.g-ui-badge-size-xl { font-size: 16px; height: 32px; padding: 0 var(--g-ui-space-16); }\n.g-ui-badge-variant-filled {\n background: var(--g-ui-primary);\n color: var(--g-ui-primary-fg);\n border: 1px solid transparent;\n}\n.g-ui-badge-variant-light {\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-primary);\n border: 1px solid var(--g-ui-primary-muted);\n}\n.g-ui-badge-variant-outline {\n background: transparent;\n color: var(--g-ui-primary);\n border: 1px solid var(--g-ui-primary);\n}\n.g-ui-badge-variant-dot {\n background: transparent;\n color: var(--g-ui-text);\n border: 1px solid var(--g-ui-border);\n}\n.g-ui-badge-dot {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n}\n.g-ui-badge-dot::before {\n content: '';\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--g-ui-success);\n}\n\n.g-ui-button {\n border: 0;\n border-radius: 8px;\n cursor: pointer;\n font-weight: 600;\n transition: transform .08s ease, background .12s ease, border .12s ease, color .12s ease;\n line-height: 1;\n display: inline-flex;\n align-items: center;\n}\n.g-ui-button:active { transform: translateY(1px); }\n.g-ui-button:disabled { opacity: 0.6; cursor: not-allowed; }\n.g-ui-button-full { width: 100%; }\n.g-ui-button-loading { opacity: 0.8; }\n.g-ui-button-section-left { margin-right: var(--g-ui-space-8); display: inline-flex; }\n.g-ui-button-section-right { margin-left: var(--g-ui-space-8); display: inline-flex; }\n.g-ui-button-variant-filled { background: var(--g-ui-primary); color: var(--g-ui-primary-fg); border: 1px solid transparent; }\n.g-ui-button-variant-light { background: var(--g-ui-primary-subtle); color: var(--g-ui-primary); border: 1px solid var(--g-ui-primary-muted); }\n.g-ui-button-variant-outline { background: transparent; color: var(--g-ui-primary); border: 1px solid var(--g-ui-primary); }\n.g-ui-button-variant-subtle { background: transparent; color: var(--g-ui-text); border: 1px solid var(--g-ui-border); }\n.g-ui-button-variant-transparent { background: transparent; color: var(--g-ui-text); border: 1px solid transparent; }\n.g-ui-button-variant-filled:hover { background: var(--g-ui-primary-hover); }\n.g-ui-button-variant-light:hover { background: var(--g-ui-primary-muted); }\n.g-ui-button-variant-outline:hover { background: var(--g-ui-primary-subtle); }\n.g-ui-button-variant-subtle:hover { background: var(--g-ui-bg-muted); }\n.g-ui-button-variant-transparent:hover { background: var(--g-ui-bg-muted); }\n.g-ui-button-size-xs { font-size: 12px; height: 30px; padding: 0 var(--g-ui-space-8); }\n.g-ui-button-size-sm { font-size: 13px; height: 36px; padding: 0 var(--g-ui-space-10); }\n.g-ui-button-size-md { font-size: 14px; height: 42px; padding: 0 var(--g-ui-space-10); }\n.g-ui-button-size-lg { font-size: 15px; height: 50px; padding: 0 var(--g-ui-space-11); }\n.g-ui-button-size-xl { font-size: 16px; height: 60px; padding: 0 var(--g-ui-space-12); }\n\n.g-ui-input-wrapper {\n width: 100%;\n border-radius: 8px;\n border: 1px solid var(--g-ui-border);\n background: var(--g-ui-surface);\n color: var(--g-ui-text);\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n padding: 0 var(--g-ui-space-12);\n box-sizing: border-box;\n}\n.g-ui-input-wrapper:focus-within {\n border-color: var(--g-ui-primary);\n}\n.g-ui-input {\n width: 100%;\n border: 0;\n background: transparent;\n color: inherit;\n padding: 0;\n height: 100%;\n font-size: inherit;\n}\n.g-ui-input:focus,\n.g-ui-input:focus-within {\n outline: none;\n}\n.g-ui-input::placeholder {\n color: var(--g-ui-muted);\n transition: opacity .12s ease;\n}\n.g-ui-input:focus::placeholder {\n opacity: 0.5;\n}\n.g-ui-input-section {\n display: inline-flex;\n align-items: center;\n color: var(--g-ui-muted);\n}\n.g-ui-input-error {\n border-color: var(--g-ui-danger);\n}\n.g-ui-input-size-xs { font-size: 12px; height: 30px; padding: 0 var(--g-ui-space-10); }\n.g-ui-input-size-sm { font-size: 13px; height: 36px; padding: 0 var(--g-ui-space-12); }\n.g-ui-input-size-md { font-size: 14px; height: 42px; padding: 0 var(--g-ui-space-14); }\n.g-ui-input-size-lg { font-size: 15px; height: 50px; padding: 0 var(--g-ui-space-16); }\n.g-ui-input-size-xl { font-size: 16px; height: 60px; padding: 0 var(--g-ui-space-20); }\n.g-ui-text-input {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-6);\n}\n.g-ui-text-ellipsis {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.g-ui-text-input-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--g-ui-text);\n}\n.g-ui-text-input-description {\n font-size: 12px;\n color: var(--g-ui-muted);\n}\n.g-ui-text-input-error-text {\n font-size: 12px;\n color: var(--g-ui-danger);\n}\n.g-ui-date-input-popover .g-ui-popover-dropdown {\n padding: 0;\n border-width:0;\n}\n\n.g-ui-modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0,0,0,0.6);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 999;\n}\n.g-ui-modal-overlay-light { background: rgba(0,0,0,0.4); }\n.g-ui-modal-overlay-normal { background: rgba(0,0,0,0.6); }\n.g-ui-modal-overlay-dark { background: rgba(0,0,0,0.8); }\n.g-ui-modal-centered { align-items: center; justify-content: center; }\n.g-ui-modal-top { align-items: flex-start; justify-content: center; padding-top: var(--g-ui-space-40); }\n.g-ui-modal-position-top-left { align-items: flex-start; justify-content: flex-start; padding: var(--g-ui-space-40) var(--g-ui-space-20); }\n.g-ui-modal-position-top-center { align-items: flex-start; justify-content: center; padding: var(--g-ui-space-40) var(--g-ui-space-20); }\n.g-ui-modal-position-top-right { align-items: flex-start; justify-content: flex-end; padding: var(--g-ui-space-40) var(--g-ui-space-20); }\n.g-ui-modal-position-center-left { align-items: center; justify-content: flex-start; padding: var(--g-ui-space-20); }\n.g-ui-modal-position-center { align-items: center; justify-content: center; padding: var(--g-ui-space-20); }\n.g-ui-modal-position-center-right { align-items: center; justify-content: flex-end; padding: var(--g-ui-space-20); }\n.g-ui-modal-position-bottom-left { align-items: flex-end; justify-content: flex-start; padding: var(--g-ui-space-20); padding-bottom: var(--g-ui-space-40); }\n.g-ui-modal-position-bottom-center { align-items: flex-end; justify-content: center; padding: var(--g-ui-space-20); padding-bottom: var(--g-ui-space-40); }\n.g-ui-modal-position-bottom-right { align-items: flex-end; justify-content: flex-end; padding: var(--g-ui-space-20); padding-bottom: var(--g-ui-space-40); }\n.g-ui-modal {\n background: var(--g-ui-bg);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: 8px;\n padding: var(--g-ui-space-16);\n min-width: 320px;\n max-width: 780px;\n box-shadow: var(--g-ui-shadow-lg);\n}\n.g-ui-modal-size-sm { width: 380px; }\n.g-ui-modal-size-md { width: 440px; }\n.g-ui-modal-size-lg { width: 620px; }\n.g-ui-modal-size-xl { width: 780px; }\n.g-ui-modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: var(--g-ui-space-12);\n}\n.g-ui-modal-title { font-weight: 700; }\n.g-ui-modal-close {\n padding: 0;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.g-ui-modal-close svg {\n width: 16px;\n height: 16px;\n fill: currentColor;\n}\n\n.g-ui-checkbox {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-6);\n box-sizing: border-box;\n}\n.g-ui-checkbox-control {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-10);\n cursor: pointer;\n}\n.g-ui-checkbox-indeterminate,\n.g-ui-checkbox-checked {\n position:absolute;\n color: var(--g-ui-primary-fg);\n fill: var(--g-ui-primary-fg);\n}\n.g-ui-checkbox-indeterminate svg,\n.g-ui-checkbox-checked svg {\n fill: var(--g-ui-primary-fg);\n}\n.g-ui-checkbox-input {\n appearance: none;\n width: var(--g-ui-control-size, 16px);\n height: var(--g-ui-control-size, 16px);\n border: 1px solid var(--g-ui-border);\n border-radius: 4px;\n background: var(--g-ui-bg);\n position: relative;\n transition: background-color .12s ease, border-color .12s ease;\n cursor: pointer;\n}\n.g-ui-checkbox-input:focus-visible {\n outline: 2px solid var(--g-ui-primary);\n outline-offset: 2px;\n}\n.g-ui-checkbox-input:checked {\n background: var(--g-ui-primary);\n border-color: var(--g-ui-primary);\n}\n.g-ui-checkbox-input:indeterminate {\n background: var(--g-ui-primary);\n border-color: var(--g-ui-primary);\n}\n\n.g-ui-checkbox-label { font-size: 14px; }\n.g-ui-checkbox-description { font-size: 12px; color: var(--g-ui-muted); }\n.g-ui-checkbox-size-xs { --g-ui-control-size: 16px; --g-ui-control-inner-offset: 4px; }\n.g-ui-checkbox-size-sm { --g-ui-control-size: 20px; --g-ui-control-inner-offset: 5px; }\n.g-ui-checkbox-size-md { --g-ui-control-size: 24px; --g-ui-control-inner-offset: 6px; }\n.g-ui-checkbox-size-lg { --g-ui-control-size: 30px; --g-ui-control-inner-offset: 7px; }\n.g-ui-checkbox-size-xl { --g-ui-control-size: 36px; --g-ui-control-inner-offset: 8px; }\n\n.g-ui-checkbox-size-xs .g-ui-checkbox-indeterminate { top: 2px;left:4px; }\n.g-ui-checkbox-size-xs .g-ui-checkbox-indeterminate svg { width: 16px; height: 16px; }\n.g-ui-checkbox-size-sm .g-ui-checkbox-indeterminate { top:3px; left:4px; }\n.g-ui-checkbox-size-sm .g-ui-checkbox-indeterminate svg { width: 20px; height:20px; }\n.g-ui-checkbox-size-md .g-ui-checkbox-indeterminate { top:3px; left:4px; }\n.g-ui-checkbox-size-md .g-ui-checkbox-indeterminate svg { width: 24px; height: 24px; }\n.g-ui-checkbox-size-lg .g-ui-checkbox-indeterminate { top:4px; left:5px; }\n.g-ui-checkbox-size-lg .g-ui-checkbox-indeterminate svg { width: 28px; height: 28px; }\n.g-ui-checkbox-size-xl .g-ui-checkbox-indeterminate { top:5px; left:6px; }\n.g-ui-checkbox-size-xl .g-ui-checkbox-indeterminate svg { width: 32px; height: 32px; }\n\n.g-ui-checkbox-size-xs .g-ui-checkbox-checked { top: 2px;left:4px; }\n.g-ui-checkbox-size-xs .g-ui-checkbox-checked svg { width: 16px; height: 16px; }\n.g-ui-checkbox-size-sm .g-ui-checkbox-checked { top:3px; left:4px; }\n.g-ui-checkbox-size-sm .g-ui-checkbox-checked svg { width: 20px; height:20px; }\n.g-ui-checkbox-size-md .g-ui-checkbox-checked { top:3px; left:4px; }\n.g-ui-checkbox-size-md .g-ui-checkbox-checked svg { width: 24px; height: 24px; }\n.g-ui-checkbox-size-lg .g-ui-checkbox-checked { top:4px; left:5px; }\n.g-ui-checkbox-size-lg .g-ui-checkbox-checked svg { width: 28px; height: 28px; }\n.g-ui-checkbox-size-xl .g-ui-checkbox-checked { top:5px; left:6px; }\n.g-ui-checkbox-size-xl .g-ui-checkbox-checked svg { width: 32px; height: 32px; }\n\n.g-ui-switch {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-10);\n cursor: pointer;\n}\n.g-ui-switch-input {\n appearance: none;\n width: var(--g-ui-switch-width, 36px);\n height: var(--g-ui-switch-height, 20px);\n border-radius: 999px;\n background: var(--g-ui-bg-muted);\n border: 1px solid var(--g-ui-border);\n position: relative;\n transition: background .15s ease, border .15s ease;\n}\n.g-ui-switch-input:focus-visible {\n outline: 2px solid var(--g-ui-primary);\n outline-offset: 2px;\n}\n.g-ui-switch-input::after {\n content: '';\n position: absolute;\n width: var(--g-ui-switch-thumb, 14px);\n height: var(--g-ui-switch-thumb, 14px);\n border-radius: 50%;\n background: #fff;\n top: var(--g-ui-switch-offset, 2px);\n left: var(--g-ui-switch-offset, 2px);\n transition: transform .15s ease;\n}\n.g-ui-switch-input:checked {\n background: var(--g-ui-primary);\n border-color: var(--g-ui-primary);\n}\n.g-ui-switch-input:checked::after {\n transform: translateX(calc(var(--g-ui-switch-width, 36px) - var(--g-ui-switch-thumb, 14px) - (var(--g-ui-switch-offset, 2px) * 2) - 2px));\n}\n.g-ui-switch-label { font-size: 14px; }\n.g-ui-switch-size-xs { --g-ui-switch-width: 32px; --g-ui-switch-height: 16px; --g-ui-switch-thumb: 12px; --g-ui-switch-offset: 1px; }\n.g-ui-switch-size-sm { --g-ui-switch-width: 38px; --g-ui-switch-height: 20px; --g-ui-switch-thumb: 14px; --g-ui-switch-offset: 2px; }\n.g-ui-switch-size-md { --g-ui-switch-width: 46px; --g-ui-switch-height: 24px; --g-ui-switch-thumb: 18px; --g-ui-switch-offset: 2px; }\n.g-ui-switch-size-lg { --g-ui-switch-width: 56px; --g-ui-switch-height: 30px; --g-ui-switch-thumb: 22px; --g-ui-switch-offset: 3px; }\n.g-ui-switch-size-xl { --g-ui-switch-width: 72px; --g-ui-switch-height: 36px; --g-ui-switch-thumb: 28px; --g-ui-switch-offset: 3px; }\n\n.g-ui-select-root {\n position: relative;\n width: 100%;\n}\n.g-ui-select {\n flex: 1;\n display: flex;\n align-items: center;\n min-height: 100%;\n cursor: pointer;\n color: var(--g-ui-text);\n font-size: inherit;\n}\n.g-ui-select-value {\n flex: 1;\n}\n.g-ui-select-placeholder {\n color: var(--g-ui-muted);\n}\n.g-ui-select-caret {\n color: var(--g-ui-muted);\n font-size: 12px;\n}\n.g-ui-select-dropdown {\n position: absolute;\n top: calc(100% + var(--g-ui-space-6));\n left: 0;\n right: 0;\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n background: var(--g-ui-bg);\n box-shadow: var(--g-ui-shadow-sm);\n padding: var(--g-ui-space-6);\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-4);\n z-index: 60;\n max-height: 240px;\n overflow: auto;\n}\n.g-ui-select-item {\n padding: var(--g-ui-space-6) var(--g-ui-space-8);\n border-radius: 6px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n}\n.g-ui-select-item:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-select-item-active {\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-primary);\n}\n.g-ui-select-item-disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n.g-ui-select-item-disabled:hover {\n background: transparent;\n}\n.g-ui-select-size-xs { font-size: 12px; height: 30px; padding: 0 var(--g-ui-space-10); }\n.g-ui-select-size-sm { font-size: 13px; height: 36px; padding: 0 var(--g-ui-space-12); }\n.g-ui-select-size-md { font-size: 14px; height: 42px; padding: 0 var(--g-ui-space-14); }\n.g-ui-select-size-lg { font-size: 15px; height: 50px; padding: 0 var(--g-ui-space-16); }\n.g-ui-select-size-xl { font-size: 16px; height: 60px; padding: 0 var(--g-ui-space-20); }\n\n.g-ui-tabs { display: flex; flex-direction: column; }\n.g-ui-tabs-list { display: flex; flex-wrap: wrap; gap: 0; }\n.g-ui-tabs-tab {\n position: relative;\n padding: var(--g-ui-space-8) var(--g-ui-space-16);\n font-size: 13px;\n line-height: 1;\n display: flex;\n align-items: center;\n cursor: pointer;\n background: transparent;\n border: 0;\n color: var(--g-ui-text);\n margin-bottom: calc(0px - var(--g-ui-space-2));\n}\n.g-ui-tabs-panel { padding-top: var(--g-ui-space-12); }\n.g-ui-tabs-variant-default .g-ui-tabs-list {\n border-bottom: 2px solid var(--g-ui-border-muted);\n}\n.g-ui-tabs-variant-default .g-ui-tabs-tab {\n border-bottom: 2px solid var(--g-ui-border-muted);\n border-radius: 4px 4px 0 0;\n}\n.g-ui-tabs-variant-default .g-ui-tabs-tab:hover {\n background: var(--g-ui-bg-muted);\n}\n.g-ui-tabs-variant-default .g-ui-tabs-tab-active {\n border-color: var(--g-ui-primary);\n color: var(--g-ui-primary);\n}\n.g-ui-tabs-variant-outline .g-ui-tabs-list {\n border-bottom: 1px solid var(--g-ui-border-muted);\n}\n.g-ui-tabs-variant-outline .g-ui-tabs-tab {\n border: 1px solid transparent;\n border-bottom: 0;\n border-radius: 8px 8px 0 0;\n}\n.g-ui-tabs-variant-outline .g-ui-tabs-tab-active {\n border-color: var(--g-ui-border);\n background: var(--g-ui-bg);\n color: var(--g-ui-primary);\n}\n.g-ui-tabs-variant-pills .g-ui-tabs-list {\n gap: var(--g-ui-space-8);\n}\n.g-ui-tabs-variant-pills .g-ui-tabs-tab {\n border-radius: 8px;\n background: transparent;\n}\n.g-ui-tabs-variant-pills .g-ui-tabs-tab:hover {\n background: var(--g-ui-bg-muted);\n}\n.g-ui-tabs-variant-pills .g-ui-tabs-tab-active {\n background: var(--g-ui-primary);\n color: var(--g-ui-primary-fg);\n}\n\n.g-ui-table {\n width: 100%;\n border-collapse: collapse;\n color: var(--g-ui-text);\n font-size: 13px;\n}\n.g-ui-table-with-border {\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n overflow: hidden;\n}\n.g-ui-table th,\n.g-ui-table td {\n border-bottom: 1px solid var(--g-ui-border-muted);\n padding: var(--g-ui-space-10) var(--g-ui-space-12);\n text-align: left;\n}\n.g-ui-table th {\n font-weight: 500;\n color: var(--g-ui-muted);\n}\n.g-ui-table-column-borders th,\n.g-ui-table-column-borders td {\n border-right: 1px solid var(--g-ui-border);\n}\n.g-ui-table-column-borders th:last-child,\n.g-ui-table-column-borders td:last-child {\n border-right: 0;\n}\n.g-ui-table-striped tbody tr:nth-child(odd) { background: var(--g-ui-bg-subtle); }\n.g-ui-table-hover tbody tr:hover { background: var(--g-ui-bg-muted); }\n\n.g-ui-accordion {\n width: calc(100%);\n display: flex; \n flex-direction: column; \n border-bottom: 1px solid var(--g-ui-border);\n}\n.g-ui-accordion-header {\n box-sizing: border-box;\n padding: var(--g-ui-space-12) var(--g-ui-space-15);\n font-size: 14px;\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n justify-content: flex-start;\n cursor: pointer;\n}\n.g-ui-accordion-content {\n padding: var(--g-ui-space-12);\n}\n\n.g-ui-tooltip {\n position: relative;\n display: inline-flex;\n}\n.g-ui-tooltip-content {\n position: absolute;\n bottom: calc(100% + var(--g-ui-space-8));\n left: 50%;\n transform: translateX(-50%);\n background: var(--g-ui-gray-900);\n color: var(--g-ui-gray-50);\n border: 0;\n padding: var(--g-ui-space-6) var(--g-ui-space-10);\n border-radius: 6px;\n font-size: 12px;\n white-space: nowrap;\n opacity: 0;\n pointer-events: none;\n transition: opacity .12s ease, transform .12s ease;\n}\n.g-ui-tooltip:hover .g-ui-tooltip-content {\n opacity: 1;\n transform: translateX(-50%) translateY(-2px);\n}\n\n.g-ui-menu {\n position: relative;\n display: inline-flex;\n}\n.g-ui-menu-dropdown {\n position: fixed;\n right: 0;\n width:10px;\n min-width: 180px;\n background: var(--g-ui-surface);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n box-shadow: var(--g-ui-shadow-sm);\n padding: var(--g-ui-space-4);\n z-index: 10000;\n}\n.g-ui-menu-left { left: 0; right: auto; }\n.g-ui-menu-center { left: 50%; right: auto; transform: translateX(-50%); }\n.g-ui-menu-right { right: 0; left: auto; }\n.g-ui-menu-item {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n padding: var(--g-ui-space-6) var(--g-ui-space-12);\n border-radius: 8px;\n cursor: pointer;\n color: var(--g-ui-text);\n font-size: 13px;\n}\n.g-ui-menu-item:hover { background: var(--g-ui-bg-subtle); }\n\n.g-ui-menu-overlay {\n position: fixed;\n top:0;\n left:0;\n right:0;\n bottom:0;\n inset: 0;\n z-index: 9999;\n}\n\n.g-ui-drawer-overlay {\n position: fixed;\n inset: 0;\n z-index: 998;\n}\n.g-ui-drawer-overlay-normal { background: rgba(0,0,0,0.6); }\n.g-ui-drawer-overlay-light { background: rgba(0,0,0,0.4); }\n.g-ui-drawer-overlay-dark { background: rgba(0,0,0,0.8); }\n.g-ui-drawer {\n position: fixed;\n top: 0;\n bottom: 0;\n width: 320px;\n background: var(--g-ui-bg);\n border-left: 1px solid var(--g-ui-border-muted);\n box-shadow: var(--g-ui-shadow-lg);\n z-index: 999;\n padding: var(--g-ui-space-16);\n}\n.g-ui-drawer-right { right: 0; }\n.g-ui-drawer-left { left: 0; border-left: 0; border-right: 1px solid var(--g-ui-border-muted); }\n.g-ui-drawer-size-sm { width: 380px; }\n.g-ui-drawer-size-md { width: 440px; }\n.g-ui-drawer-size-lg { width: 620px; }\n.g-ui-drawer-size-xl { width: 780px; }\n\n.g-ui-notification {\n border-radius: var(--g-ui-radius);\n padding: var(--g-ui-space-10) var(--g-ui-space-12) var(--g-ui-space-10) var(--g-ui-space-22);\n background: var(--g-ui-surface);\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n box-shadow: var(--g-ui-shadow-lg);\n position: relative;\n overflow: hidden;\n}\n.g-ui-notification-bordered {\n border: 1px solid var(--g-ui-border);\n}\n.g-ui-notification::before {\n content: '';\n position: absolute;\n left: 4px;\n top: 4px;\n bottom: 4px;\n width: 6px;\n border-radius: 999px;\n background: var(--g-ui-primary);\n}\n.g-ui-notification-with-icon::before {\n display: none;\n}\n.g-ui-notification-body {\n flex: 1;\n overflow: hidden;\n}\n.g-ui-notification-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 999px;\n background: var(--g-ui-primary);\n color: var(--g-ui-primary-fg);\n}\n.g-ui-notification-loader { margin-right: var(--g-ui-space-8); }\n.g-ui-notification-close {\n margin-left: auto;\n border: 0;\n background: transparent;\n color: var(--g-ui-muted);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n}\n.g-ui-notification-close span {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n}\n.g-ui-notification-close svg{\n width: 24px;\n height: 24px;\n}\n\n.g-ui-notification-title { font-weight: 500; font-size: 13px; line-height: 1.35; }\n.g-ui-notification-primary::before { background: var(--g-ui-primary); }\n.g-ui-notification-blue::before { background: var(--g-ui-blue-500); }\n.g-ui-notification-success::before { background: var(--g-ui-success); }\n.g-ui-notification-danger::before { background: var(--g-ui-danger); }\n.g-ui-notification-primary .g-ui-notification-icon { background: var(--g-ui-primary); }\n.g-ui-notification-blue .g-ui-notification-icon { background: var(--g-ui-blue-500); }\n.g-ui-notification-success .g-ui-notification-icon { background: var(--g-ui-success); }\n.g-ui-notification-danger .g-ui-notification-icon { background: var(--g-ui-danger); }\n\n.g-ui-divider {\n width: 100%;\n border: 0;\n height: 1px;\n background: var(--g-ui-border);\n margin-top: var(--g-ui-space-9);\n margin-bottom: var(--g-ui-space-9);\n}\n.g-ui-divider-size-xs { height: 1px; }\n.g-ui-divider-size-sm { height: 2px; }\n.g-ui-divider-size-md { height: 3px; }\n.g-ui-divider-size-lg { height: 4px; }\n.g-ui-divider-size-xl { height: 5px; }\n.g-ui-divider.label {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-10);\n color: var(--g-ui-muted);\n font-size: 12px;\n background: transparent;\n}\n.g-ui-divider.label::before,\n.g-ui-divider.label::after {\n content: '';\n height: 1px;\n flex: 1;\n background: var(--g-ui-border);\n}\n.g-ui-divider-label-left.label::before { flex: 0 0 12px; }\n.g-ui-divider-label-right.label::after { flex: 0 0 12px; }\n.g-ui-divider-label-text {\n color: var(--g-ui-muted);\n font-size: 12px;\n padding: 0 var(--g-ui-space-10);\n position: relative;\n z-index: 1;\n}\n.g-ui-divider-vertical {\n width: 1px;\n height: 100%;\n background: var(--g-ui-border);\n margin: 0 var(--g-ui-space-10);\n}\n\n.g-ui-paper {\n background: var(--g-ui-surface);\n border: 0;\n border-radius: 10px;\n}\n\n.g-ui-textarea {\n min-height: 120px;\n resize: vertical;\n padding: var(--g-ui-space-8) 0;\n height: auto;\n}\n.g-ui-input-multiline {\n align-items: stretch;\n padding: 0 var(--g-ui-space-12);\n height: auto;\n}\n.g-ui-input-multiline .g-ui-input {\n padding: var(--g-ui-space-8) 0;\n height: auto;\n}\n.g-ui-number-field {\n width: 100%;\n}\n.g-ui-number-field-controls {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-2);\n margin-left: auto;\n}\n.g-ui-number-field-control {\n width: 18px;\n height: 18px;\n border-radius: 6px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--g-ui-border);\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n cursor: pointer;\n user-select: none;\n font-size: 12px;\n line-height: 1;\n}\n.g-ui-number-field-control:hover {\n background: var(--g-ui-bg-subtle);\n}\n\n.g-ui-alert {\n border-radius: var(--g-ui-radius);\n border: 1px solid transparent;\n padding: var(--g-ui-space-16);\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-primary);\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-6);\n}\n.g-ui-alert-header {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n}\n.g-ui-alert-icon {\n display: inline-flex;\n align-items: center;\n width: 20px;\n height: 20px;\n margin-right: var(--g-ui-space-8);\n}\n.g-ui-alert-close {\n margin-left: auto;\n border: 0;\n background: transparent;\n color: var(--g-ui-muted);\n cursor: pointer;\n}\n.g-ui-alert-title { font-weight: 700; }\n.g-ui-alert-primary { background: var(--g-ui-primary-subtle); color: var(--g-ui-primary); border-color: transparent; }\n.g-ui-alert-blue { background: var(--g-ui-blue-subtle); color: var(--g-ui-blue-fg); border-color: transparent; }\n.g-ui-alert-success { background: var(--g-ui-green-subtle); color: var(--g-ui-green-fg); border-color: transparent; }\n.g-ui-alert-danger { background: var(--g-ui-red-subtle); color: var(--g-ui-red-fg); border-color: transparent; }\n.g-ui-alert-warning { background: var(--g-ui-orange-subtle); color: var(--g-ui-orange-fg); border-color: transparent; }\n\n.g-ui-avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n background: var(--g-ui-bg-muted);\n color: var(--g-ui-text);\n overflow: hidden;\n border: 1px solid var(--g-ui-border);\n font-weight: 600;\n}\n.g-ui-avatar-size-xs { width: 16px; height: 16px; font-size: 8px; }\n.g-ui-avatar-size-sm { width: 26px; height: 26px; font-size: 10px; }\n.g-ui-avatar-size-md { width: 38px; height: 38px; font-size: 13px; }\n.g-ui-avatar-size-lg { width: 56px; height: 56px; font-size: 18px; }\n.g-ui-avatar-size-xl { width: 84px; height: 84px; font-size: 24px; }\n\n.g-ui-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n line-height: 1;\n}\n.g-ui-icon-size-xs { font-size: 14px; }\n.g-ui-icon-size-sm { font-size: 18px; }\n.g-ui-icon-size-md { font-size: 22px; }\n.g-ui-icon-size-lg { font-size: 28px; }\n.g-ui-icon-size-xl { font-size: 36px; }\n.g-ui-icon-color-primary { color: var(--g-ui-primary); }\n.g-ui-icon-color-success { color: var(--g-ui-green-500); }\n.g-ui-icon-color-warning { color: var(--g-ui-yellow-500); }\n.g-ui-icon-color-error { color: var(--g-ui-red-500); }\n.g-ui-icon-color-muted { color: var(--g-ui-fg-muted); }\n.g-ui-avatar-img { width: 100%; height: 100%; object-fit: cover; }\n\n.g-ui-kbd {\n display: inline-flex;\n align-items: center;\n padding: var(--g-ui-space-2) var(--g-ui-space-6);\n border-radius: 6px;\n border: 1px solid var(--g-ui-border-muted);\n border-bottom-width: 3px;\n background: var(--g-ui-bg-muted);\n font-size: 12px;\n color: var(--g-ui-text);\n}\n\n.g-ui-code {\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n background: var(--g-ui-bg-muted);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n padding: var(--g-ui-space-2) var(--g-ui-space-6);\n font-size: 11px;\n color: var(--g-ui-text);\n}\n\n.g-ui-blockquote {\n border-left: 5px solid var(--g-ui-primary);\n padding: var(--g-ui-space-24) var(--g-ui-space-38);\n background: var(--g-ui-bg-muted);\n color: var(--g-ui-text);\n border-radius: 4px;\n}\n\n.g-ui-grid {\n display: grid;\n}\n.g-ui-grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }\n.g-ui-grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n.g-ui-grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n.g-ui-grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }\n.g-ui-grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }\n.g-ui-grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }\n\n.g-ui-list {\n margin: 0;\n color: var(--g-ui-text);\n list-style: none;\n padding-left: 0;\n}\n.g-ui-list-item {\n list-style: none;\n padding: var(--g-ui-space-6) 0;\n}\n.g-ui-list-item-border {\n border-bottom: 1px solid var(--g-ui-border-muted);\n}\n.g-ui-list-item-section {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n.g-ui-list-item-shell {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-10);\n grid-column: 2;\n flex-wrap: wrap;\n}\n.g-ui-list-item-content {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-2);\n flex: 1;\n}\n.g-ui-list-item-title {\n font-weight: 600;\n}\n.g-ui-list-item-body {\n color: var(--g-ui-muted);\n}\n.g-ui-list-unordered { padding-left: 0; }\n.g-ui-list-ordered { padding-left: 0; counter-reset: g-ui-list; }\n.g-ui-list-none { padding-left: 0; }\n.g-ui-list-unordered > li,\n.g-ui-list-ordered > li {\n display: grid;\n grid-template-columns: max-content 1fr;\n column-gap: var(--g-ui-space-8);\n align-items: center;\n}\n.g-ui-list-ordered > li:not(.g-ui-list-nested-item) { counter-increment: g-ui-list; }\n.g-ui-list-unordered > li:not(.g-ui-list-nested-item)::before,\n.g-ui-list-ordered > li:not(.g-ui-list-nested-item)::before {\n grid-column: 1;\n align-self: flex-start;\n justify-self: end;\n color: currentColor;\n}\n.g-ui-list-unordered > li:not(.g-ui-list-nested-item)::before {\n content: '\u2022';\n}\n.g-ui-list-ordered > li:not(.g-ui-list-nested-item)::before {\n content: counters(g-ui-list, '.') '.';\n}\n.g-ui-list-nested-item {\n list-style: none;\n padding-left: 0;\n grid-template-columns: 1fr;\n column-gap: 0;\n}\n.g-ui-list-nested-item::before {\n content: none;\n}\n.g-ui-list-unordered > li > :not(.g-ui-list-item-shell),\n.g-ui-list-ordered > li > :not(.g-ui-list-item-shell) {\n grid-column: 2;\n}\n.g-ui-list > li > .g-ui-list {\n grid-column: 2;\n margin-top: var(--g-ui-space-6);\n}\n.g-ui-list-item-shell > .g-ui-list {\n flex-basis: 100%;\n margin-left: 0;\n}\n.g-ui-list .g-ui-list {\n margin-left: var(--g-ui-space-12);\n}\n.g-ui-list .g-ui-list-unordered,\n.g-ui-list .g-ui-list-ordered {\n padding-left: 0;\n}\n.g-ui-list-with-padding { padding-left: var(--g-ui-space-36); }\n.g-ui-list-size-xs { font-size: 12px; line-height: 1.4; }\n.g-ui-list-size-sm { font-size: 13px; line-height: 1.45; }\n.g-ui-list-size-md { font-size: 14px; line-height: 1.5; }\n.g-ui-list-size-lg { font-size: 16px; line-height: 1.6; }\n.g-ui-list-size-xl { font-size: 18px; line-height: 1.65; }\n\n.g-ui-anchor {\n color: var(--g-ui-primary);\n text-decoration: none;\n}\n.g-ui-anchor:hover { text-decoration: underline; }\n\n.g-ui-image {\n max-width: 100%;\n border-radius: var(--g-ui-radius);\n}\n\n.g-ui-progress {\n width: 100%;\n height: 8px;\n border-radius: 999px;\n background: var(--g-ui-bg-muted);\n border: 0;\n overflow: hidden;\n}\n.g-ui-progress-bar {\n height: 100%;\n background: var(--g-ui-primary);\n}\n.g-ui-progress-size-xs { height: 3px; }\n.g-ui-progress-size-sm { height: 5px; }\n.g-ui-progress-size-md { height: 8px; }\n.g-ui-progress-size-lg { height: 12px; }\n.g-ui-progress-size-xl { height: 16px; }\n.g-ui-progress-0 .g-ui-progress-bar { width: 0%; }\n.g-ui-progress-5 .g-ui-progress-bar { width: 5%; }\n.g-ui-progress-10 .g-ui-progress-bar { width: 10%; }\n.g-ui-progress-15 .g-ui-progress-bar { width: 15%; }\n.g-ui-progress-20 .g-ui-progress-bar { width: 20%; }\n.g-ui-progress-25 .g-ui-progress-bar { width: 25%; }\n.g-ui-progress-30 .g-ui-progress-bar { width: 30%; }\n.g-ui-progress-35 .g-ui-progress-bar { width: 35%; }\n.g-ui-progress-40 .g-ui-progress-bar { width: 40%; }\n.g-ui-progress-45 .g-ui-progress-bar { width: 45%; }\n.g-ui-progress-50 .g-ui-progress-bar { width: 50%; }\n.g-ui-progress-55 .g-ui-progress-bar { width: 55%; }\n.g-ui-progress-60 .g-ui-progress-bar { width: 60%; }\n.g-ui-progress-65 .g-ui-progress-bar { width: 65%; }\n.g-ui-progress-70 .g-ui-progress-bar { width: 70%; }\n.g-ui-progress-75 .g-ui-progress-bar { width: 75%; }\n.g-ui-progress-80 .g-ui-progress-bar { width: 80%; }\n.g-ui-progress-85 .g-ui-progress-bar { width: 85%; }\n.g-ui-progress-90 .g-ui-progress-bar { width: 90%; }\n.g-ui-progress-95 .g-ui-progress-bar { width: 95%; }\n.g-ui-progress-100 .g-ui-progress-bar { width: 100%; }\n.g-ui-progress-success .g-ui-progress-bar { background: var(--g-ui-success); }\n.g-ui-progress-danger .g-ui-progress-bar { background: var(--g-ui-danger); }\n\n.g-ui-slider {\n width: 100%;\n --g-ui-slider-size: 8px;\n height: calc(var(--g-ui-slider-size) * 2);\n padding: 0 var(--g-ui-slider-size);\n display: flex;\n align-items: center;\n position: relative;\n}\n.g-ui-range-slider {\n width: 100%;\n --g-ui-slider-size: 8px;\n height: calc(var(--g-ui-slider-size) * 2);\n padding: 0 var(--g-ui-slider-size);\n display: flex;\n align-items: center;\n position: relative;\n}\n.g-ui-slider-track {\n position: relative;\n width: 100%;\n height: var(--g-ui-slider-size);\n border-radius: 999px;\n background: var(--g-ui-bg-emphasized);\n}\n.g-ui-slider-bar {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n background: var(--g-ui-primary);\n border-radius: 999px;\n}\n.g-ui-slider-thumb {\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n width: calc(var(--g-ui-slider-size) * 2);\n height: calc(var(--g-ui-slider-size) * 2);\n border-radius: 50%;\n background: var(--g-ui-surface);\n border: 4px solid var(--g-ui-primary);\n cursor: pointer;\n}\n.g-ui-slider-marks {\n position: absolute;\n top: calc(100% + var(--g-ui-space-10));\n left:10px;\n right:15px;\n height: 18px;\n box-sizing: border-box;\n padding: 0 var(--g-ui-slider-size);\n}\n.g-ui-slider-mark {\n position: absolute;\n top: 0;\n transform: translateX(-50%);\n}\n.g-ui-slider-mark-label {\n font-size: 11px;\n color: var(--g-ui-muted);\n}\n\n.g-ui-slider-disabled .g-ui-slider-track { background: var(--g-ui-border); }\n.g-ui-slider-disabled .g-ui-slider-bar { background: var(--g-ui-border-emphasized); }\n.g-ui-slider-disabled .g-ui-slider-thumb { cursor: not-allowed; opacity: 0.6; }\n.g-ui-slider-size-xs { --g-ui-slider-size: 4px; }\n.g-ui-slider-size-sm { --g-ui-slider-size: 6px; }\n.g-ui-slider-size-md { --g-ui-slider-size: 8px; }\n.g-ui-slider-size-lg { --g-ui-slider-size: 10px; }\n.g-ui-slider-size-xl { --g-ui-slider-size: 12px; }\n\n.g-ui-skeleton {\n background: var(--g-ui-border-muted);\n animation: g-ui-skeleton-fade 1.5s ease-in-out infinite;\n border-radius: 4px;\n}\n@keyframes g-ui-skeleton-fade { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }\n\n.g-ui-chip {\n display: inline-flex;\n align-items: center;\n border: 1px solid transparent;\n border-radius: 999px;\n cursor: pointer;\n background: transparent;\n color: var(--g-ui-text);\n}\n.g-ui-chip-active {\n background: var(--g-ui-primary);\n border-color: transparent;\n color: var(--g-ui-primary-fg);\n}\n.g-ui-chip-size-xs { font-size: 12px; height: 20px; padding: 0 var(--g-ui-space-6); }\n.g-ui-chip-size-sm { font-size: 13px; height: 21px; padding: 0 var(--g-ui-space-5); }\n.g-ui-chip-size-md { font-size: 14px; height: 22px; padding: 0 var(--g-ui-space-6); }\n.g-ui-chip-size-lg { font-size: 15px; height: 23px; padding: 0 var(--g-ui-space-7); }\n.g-ui-chip-size-xl { font-size: 16px; height: 24px; padding: 0 var(--g-ui-space-8); }\n.g-ui-chip-variant-filled { background: var(--g-ui-bg-muted); color: var(--g-ui-text); border-color: transparent; }\n.g-ui-chip-variant-light { background: var(--g-ui-bg-muted); color: var(--g-ui-text); border-color: transparent; }\n.g-ui-chip-variant-outline { background: var(--g-ui-surface); color: var(--g-ui-text); border-color: var(--g-ui-border); }\n.g-ui-chip-variant-filled.g-ui-chip-active,\n.g-ui-chip-variant-light.g-ui-chip-active,\n.g-ui-chip-variant-outline.g-ui-chip-active {\n background: var(--g-ui-primary);\n border-color: transparent;\n color: var(--g-ui-primary-fg);\n}\n\n.g-ui-segmented {\n display: inline-flex;\n border-radius: 10px;\n overflow: hidden;\n padding: var(--g-ui-space-4);\n background: var(--g-ui-bg-muted);\n}\n.g-ui-segmented-item {\n padding: var(--g-ui-space-4) var(--g-ui-space-14);\n cursor: pointer;\n background: transparent;\n color: var(--g-ui-text);\n border-radius: 8px;\n}\n.g-ui-segmented-active {\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n}\n.g-ui-segmented-size-xs .g-ui-segmented-item { padding: var(--g-ui-space-2) var(--g-ui-space-6); font-size: 12px; }\n.g-ui-segmented-size-sm .g-ui-segmented-item { padding: var(--g-ui-space-3) var(--g-ui-space-10); font-size: 13px; }\n.g-ui-segmented-size-md .g-ui-segmented-item { padding: var(--g-ui-space-4) var(--g-ui-space-14); font-size: 14px; }\n.g-ui-segmented-size-lg .g-ui-segmented-item { padding: var(--g-ui-space-7) var(--g-ui-space-16); font-size: 15px; }\n.g-ui-segmented-size-xl .g-ui-segmented-item { padding: var(--g-ui-space-10) var(--g-ui-space-20); font-size: 16px; }\n\n.g-ui-pagination {\n display: inline-flex;\n gap: var(--g-ui-space-6);\n align-items: center;\n}\n.g-ui-pagination-item {\n min-width: 32px;\n height: 32px;\n border-radius: 8px;\n border: 1px solid var(--g-ui-border-muted);\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n cursor: pointer;\n font-size: 14px;\n}\n.g-ui-pagination-item-active {\n background: var(--g-ui-primary);\n border-color: var(--g-ui-primary);\n color: var(--g-ui-primary-fg);\n}\n.g-ui-pagination-item.g-ui-pagination-item-active:hover{\n background: var(--g-ui-primary-hover);\n border-color: var(--g-ui-primary-hover);\n color: var(--g-ui-primary-fg);\n}\n.g-ui-pagination-item:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-pagination-size-xs .g-ui-pagination-item { min-width: 22px; height: 22px; font-size: 12px; }\n.g-ui-pagination-size-sm .g-ui-pagination-item { min-width: 26px; height: 26px; font-size: 12px; }\n.g-ui-pagination-size-md .g-ui-pagination-item { min-width: 32px; height: 32px; font-size: 14px; }\n.g-ui-pagination-size-lg .g-ui-pagination-item { min-width: 38px; height: 38px; font-size: 15px; }\n.g-ui-pagination-size-xl .g-ui-pagination-item { min-width: 44px; height: 44px; font-size: 16px; }\n\n.g-ui-timeline {\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.g-ui-timeline-item {\n display: grid;\n grid-template-columns: 28px 1fr;\n gap: var(--g-ui-space-16);\n align-items: start;\n position: relative;\n padding-bottom: var(--g-ui-space-24);\n}\n.g-ui-timeline-item:last-child {\n padding-bottom: 0;\n}\n.g-ui-timeline-item::before {\n content: '';\n position: absolute;\n left: 8px;\n top: 20px;\n bottom: 0;\n width: 4px;\n background: var(--g-ui-border-muted);\n}\n.g-ui-timeline-item:last-child::before {\n display: none;\n}\n.g-ui-timeline-dot {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--g-ui-bg);\n border: 4px solid var(--g-ui-primary);\n margin-top: 0;\n position: relative;\n z-index: 1;\n}\n.g-ui-timeline-content {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-4);\n}\n.g-ui-timeline-title { font-weight: 600; }\n.g-ui-timeline-desc { color: var(--g-ui-muted); font-size: 13px; }\n\n.g-ui-stepper {\n display: flex;\n gap: var(--g-ui-space-12);\n align-items: center;\n}\n.g-ui-stepper-item {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n}\n.g-ui-stepper-index {\n width: 42px;\n height: 42px;\n border-radius: 50%;\n border: 1px solid var(--g-ui-border-muted);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n font-weight: 600;\n background: var(--g-ui-bg);\n}\n.g-ui-stepper-active .g-ui-stepper-index {\n background: var(--g-ui-primary-subtle);\n border-color: var(--g-ui-primary);\n color: var(--g-ui-primary);\n}\n.g-ui-stepper-label { font-size: 14px; font-weight: 500; }\n\n.g-ui-rating {\n display: inline-flex;\n gap: var(--g-ui-space-2);\n}\n.g-ui-rating-item {\n cursor: pointer;\n color: var(--g-ui-border);\n}\n.g-ui-rating-item-active {\n color: var(--g-ui-primary);\n}\n.g-ui-rating-size-xs { font-size: 14px; }\n.g-ui-rating-size-sm { font-size: 18px; }\n.g-ui-rating-size-md { font-size: 20px; }\n.g-ui-rating-size-lg { font-size: 28px; }\n.g-ui-rating-size-xl { font-size: 32px; }\n\n.g-ui-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: 999px;\n padding: var(--g-ui-space-4) var(--g-ui-space-10);\n font-size: 12px;\n color: var(--g-ui-text);\n background: var(--g-ui-bg);\n}\n\n\n.g-ui-calendar {\n width: 100%;\n border: 1px solid var(--g-ui-border);\n border-radius: var(--g-ui-radius);\n background: var(--g-ui-bg);\n padding: var(--g-ui-space-12);\n}\n.g-ui-calendar-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--g-ui-space-10);\n}\n.g-ui-calendar-title-group {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n}\n.g-ui-calendar-title-button {\n border: 0;\n background: transparent;\n padding: var(--g-ui-space-2) var(--g-ui-space-6);\n border-radius: 6px;\n font-weight: 500;\n font-size: 14px;\n color: var(--g-ui-text);\n cursor: pointer;\n}\n.g-ui-calendar-title-button:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-calendar-title {\n font-weight: 500;\n font-size: 14px;\n}\n.g-ui-calendar-nav-icon svg {\n width: 14px;\n height: 14px;\n fill: currentColor;\n}\n\n\n.g-ui-calendar-size-xs { width: 220px; }\n.g-ui-calendar-size-sm { width: 260px; }\n.g-ui-calendar-size-md { width: 300px; }\n.g-ui-calendar-size-lg { width: 370px; }\n.g-ui-calendar-size-xl { width: 420px; }\n\n.g-ui-calendar-size-xs .g-ui-calendar-grid { gap: var(--g-ui-space-2); }\n.g-ui-calendar-size-sm .g-ui-calendar-grid { gap: var(--g-ui-space-4); }\n.g-ui-calendar-size-md .g-ui-calendar-grid { gap: var(--g-ui-space-6); }\n.g-ui-calendar-size-lg .g-ui-calendar-grid { gap: var(--g-ui-space-8); }\n.g-ui-calendar-size-xl .g-ui-calendar-grid { gap: var(--g-ui-space-10); }\n\n.g-ui-calendar-size-xs .g-ui-calendar-cell { width: 26px; height: 26px; font-size: 12px; }\n.g-ui-calendar-size-sm .g-ui-calendar-cell { width: 30px; height: 30px; font-size: 13px; }\n.g-ui-calendar-size-md .g-ui-calendar-cell { width: 34px; height: 34px; font-size: 14px; }\n.g-ui-calendar-size-lg .g-ui-calendar-cell { width: 42px; height: 34px; font-size: 16px; }\n.g-ui-calendar-size-xl .g-ui-calendar-cell { width: 48px; height: 38px; font-size: 18px; }\n\n\n.g-ui-calendar-grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: var(--g-ui-space-6);\n}\n.g-ui-calendar-cell {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--g-ui-text);\n}\n.g-ui-calendar-cell:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-calendar-cell-muted {\n color: var(--g-ui-muted);\n}\n.g-ui-calendar-cell-active,\n.g-ui-calendar-cell-active:hover {\n background: var(--g-ui-primary);\n color: var(--g-ui-primary-fg);\n}\n\n/* EventCalendar */\n.g-ui-event-calendar {\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: 480px;\n background: var(--g-ui-bg);\n border: 1px solid var(--g-ui-border);\n border-radius: var(--g-ui-radius);\n overflow: hidden;\n}\n.g-ui-event-calendar-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: var(--g-ui-space-10);\n padding: var(--g-ui-space-12) var(--g-ui-space-16);\n border-bottom: 1px solid var(--g-ui-border);\n background: var(--g-ui-bg);\n}\n.g-ui-event-calendar-nav-group {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-4);\n}\n.g-ui-event-calendar-nav {\n border-radius: 8px;\n}\n.g-ui-event-calendar-today {\n margin-left: var(--g-ui-space-8);\n}\n.g-ui-event-calendar-today-icon {\n margin-right: var(--g-ui-space-6);\n}\n.g-ui-event-calendar-title {\n font-weight: 600;\n font-size: 18px;\n color: var(--g-ui-text);\n min-width: 200px;\n text-align: center;\n}\n.g-ui-event-calendar-actions {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n}\n.g-ui-event-calendar-view-option {\n padding: var(--g-ui-space-6) var(--g-ui-space-12);\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--g-ui-text);\n cursor: pointer;\n background: transparent;\n border: 1px solid transparent;\n}\n.g-ui-event-calendar-view-option:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-event-calendar-view-option-active {\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-primary);\n}\n.g-ui-event-calendar-create-btn {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n}\n.g-ui-event-calendar-month {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.g-ui-event-calendar-weekdays {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n padding: var(--g-ui-space-8) var(--g-ui-space-16);\n border-bottom: 1px solid var(--g-ui-border);\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.02em;\n color: var(--g-ui-muted);\n}\n.g-ui-event-calendar-weekday {\n text-align: center;\n}\n.g-ui-event-calendar-month-grid {\n flex: 1;\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n grid-auto-rows: minmax(100px, 1fr);\n gap: 1px;\n padding: var(--g-ui-space-8);\n background: var(--g-ui-border);\n overflow: auto;\n}\n.g-ui-event-calendar-month-cell {\n background: var(--g-ui-bg);\n min-height: 100px;\n display: flex;\n flex-direction: column;\n padding: var(--g-ui-space-4);\n}\n.g-ui-event-calendar-month-cell-outside {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-event-calendar-month-cell-today {\n background: var(--g-ui-primary-subtle);\n}\n.g-ui-event-calendar-month-cell-header {\n flex-shrink: 0;\n font-size: 13px;\n font-weight: 500;\n color: var(--g-ui-text);\n cursor: pointer;\n padding: var(--g-ui-space-2) 0;\n border-radius: 4px;\n margin: -2px 0;\n}\n.g-ui-event-calendar-month-cell-header:hover {\n background: var(--g-ui-bg-muted);\n}\n.g-ui-event-calendar-month-cell-events {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-height: 0;\n overflow: hidden;\n}\n.g-ui-event-calendar-month-event {\n font-size: 12px;\n padding: 2px 6px;\n border-radius: 4px;\n border-left: 3px solid var(--g-ui-primary);\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-text);\n cursor: pointer;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.g-ui-event-calendar-month-event:hover {\n opacity: 0.9;\n}\n.g-ui-event-calendar-month-more {\n font-size: 11px;\n color: var(--g-ui-primary);\n cursor: pointer;\n padding: 2px 4px;\n margin-top: 2px;\n}\n.g-ui-event-calendar-month-more:hover {\n text-decoration: underline;\n}\n.g-ui-event-calendar-week {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: auto;\n}\n.g-ui-event-calendar-week-days {\n display: grid;\n grid-template-columns: 60px repeat(7, 1fr);\n border-bottom: 1px solid var(--g-ui-border);\n background: var(--g-ui-bg);\n}\n.g-ui-event-calendar-week-day-col {\n padding: var(--g-ui-space-8);\n text-align: center;\n font-size: 12px;\n font-weight: 500;\n color: var(--g-ui-text);\n}\n.g-ui-event-calendar-week-time-col {\n width: 60px;\n flex-shrink: 0;\n font-size: 11px;\n color: var(--g-ui-muted);\n padding: var(--g-ui-space-4);\n}\n.g-ui-event-calendar-week-body {\n display: flex;\n flex: 1;\n min-height: 400px;\n}\n.g-ui-event-calendar-week-body .g-ui-event-calendar-week-time-col {\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.g-ui-event-calendar-week-slot-label {\n height: 48px;\n font-size: 10px;\n color: var(--g-ui-muted);\n display: flex;\n align-items: flex-start;\n padding-top: 2px;\n}\n.g-ui-event-calendar-week-grid-cols {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n flex: 1;\n position: relative;\n border-left: 1px solid var(--g-ui-border);\n}\n.g-ui-event-calendar-week-day-col-body {\n position: relative;\n display: flex;\n flex-direction: column;\n border-right: 1px solid var(--g-ui-border);\n}\n.g-ui-event-calendar-week-slot {\n height: 48px;\n border-bottom: 1px solid var(--g-ui-border-muted);\n cursor: pointer;\n}\n.g-ui-event-calendar-week-slot:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-event-calendar-week-event {\n position: absolute;\n left: 2px;\n right: 2px;\n border-left: 3px solid var(--g-ui-primary);\n background: var(--g-ui-primary-subtle);\n border-radius: 4px;\n padding: 4px 6px;\n overflow: hidden;\n cursor: pointer;\n font-size: 12px;\n color: var(--g-ui-text);\n pointer-events: auto;\n}\n.g-ui-event-calendar-week-event:hover {\n opacity: 0.95;\n}\n.g-ui-event-calendar-week-event-title {\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.g-ui-event-calendar-week-event-time {\n font-size: 10px;\n color: var(--g-ui-muted);\n display: block;\n}\n.g-ui-event-calendar-day {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: auto;\n}\n.g-ui-event-calendar-day-body {\n display: flex;\n flex: 1;\n min-height: 400px;\n}\n.g-ui-event-calendar-day-time-col {\n width: 60px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n font-size: 11px;\n color: var(--g-ui-muted);\n padding: var(--g-ui-space-4);\n border-right: 1px solid var(--g-ui-border);\n}\n.g-ui-event-calendar-day-slot-label {\n height: 48px;\n display: flex;\n align-items: flex-start;\n padding-top: 2px;\n}\n.g-ui-event-calendar-day-slots {\n flex: 1;\n position: relative;\n border-left: 1px solid var(--g-ui-border);\n}\n.g-ui-event-calendar-day-slot {\n height: 48px;\n border-bottom: 1px solid var(--g-ui-border-muted);\n cursor: pointer;\n}\n.g-ui-event-calendar-day-slot:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-event-calendar-day-event {\n position: absolute;\n left: 4px;\n right: 4px;\n border-left: 3px solid var(--g-ui-primary);\n background: var(--g-ui-primary-subtle);\n border-radius: 4px;\n padding: 6px 8px;\n overflow: hidden;\n cursor: pointer;\n font-size: 13px;\n color: var(--g-ui-text);\n}\n.g-ui-event-calendar-day-event:hover {\n opacity: 0.95;\n}\n.g-ui-event-calendar-day-event-title {\n font-weight: 500;\n}\n.g-ui-event-calendar-day-event-time {\n font-size: 11px;\n color: var(--g-ui-muted);\n display: block;\n}\n.g-ui-event-calendar-form {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-12);\n}\n.g-ui-event-calendar-form-row {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-6);\n}\n.g-ui-event-calendar-form-row-inline {\n flex-direction: row;\n flex-wrap: wrap;\n align-items: flex-end;\n gap: var(--g-ui-space-12);\n}\n.g-ui-event-calendar-form-field {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-4);\n min-width: 140px;\n}\n.g-ui-event-calendar-form-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--g-ui-text);\n}\n.g-ui-event-calendar-form-actions {\n display: flex;\n justify-content: flex-end;\n gap: var(--g-ui-space-10);\n margin-top: var(--g-ui-space-8);\n padding-top: var(--g-ui-space-12);\n border-top: 1px solid var(--g-ui-border);\n}\n.g-ui-event-calendar-form-suggestions {\n max-height: 180px;\n overflow-y: auto;\n border: 1px solid var(--g-ui-border);\n border-radius: 8px;\n margin-top: var(--g-ui-space-4);\n background: var(--g-ui-bg);\n}\n.g-ui-event-calendar-form-suggestion-item {\n padding: var(--g-ui-space-10) var(--g-ui-space-12);\n font-size: 14px;\n cursor: pointer;\n border-bottom: 1px solid var(--g-ui-border-muted);\n}\n.g-ui-event-calendar-form-suggestion-item:last-child {\n border-bottom: 0;\n}\n.g-ui-event-calendar-form-suggestion-item:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-event-calendar-form-chips {\n display: flex;\n flex-wrap: wrap;\n gap: var(--g-ui-space-6);\n margin-top: var(--g-ui-space-4);\n}\n.g-ui-event-calendar-form-chip {\n display: inline-flex;\n align-items: center;\n padding: var(--g-ui-space-4) var(--g-ui-space-8);\n border-radius: 6px;\n font-size: 13px;\n background: var(--g-ui-bg-muted);\n color: var(--g-ui-text);\n}\n.g-ui-event-calendar-form-chip-removable {\n cursor: pointer;\n}\n.g-ui-event-calendar-form-chip-removable:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-event-calendar-form-colors {\n display: flex;\n flex-wrap: wrap;\n gap: var(--g-ui-space-6);\n margin-top: var(--g-ui-space-4);\n}\n.g-ui-event-calendar-form-color-swatch {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n cursor: pointer;\n border: 2px solid transparent;\n}\n.g-ui-event-calendar-form-color-swatch:hover {\n transform: scale(1.1);\n}\n.g-ui-event-calendar-form-color-swatch-active {\n border-color: var(--g-ui-text);\n box-shadow: 0 0 0 2px var(--g-ui-bg);\n}\n.g-ui-event-calendar-view-modal {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-12);\n}\n.g-ui-event-calendar-view-modal-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--g-ui-text);\n}\n.g-ui-event-calendar-view-modal-meta {\n font-size: 14px;\n color: var(--g-ui-muted);\n}\n.g-ui-event-calendar-view-modal-date {\n display: block;\n margin-bottom: var(--g-ui-space-4);\n}\n.g-ui-event-calendar-view-modal-field {\n font-size: 14px;\n color: var(--g-ui-text);\n line-height: 1.5;\n}\n.g-ui-event-calendar-view-modal-actions {\n display: flex;\n flex-wrap: wrap;\n gap: var(--g-ui-space-10);\n margin-top: var(--g-ui-space-8);\n padding-top: var(--g-ui-space-12);\n border-top: 1px solid var(--g-ui-border);\n}\n.g-ui-event-calendar-view-modal-delete {\n color: var(--g-ui-danger);\n}\n.g-ui-event-calendar-view-modal-delete:hover {\n background: var(--g-ui-danger-subtle);\n}\n\n.g-ui-select-multi-root {\n position: relative;\n width: 100%;\n}\n.g-ui-select-multi {\n width: 100%;\n border-radius: 8px;\n border: 1px solid var(--g-ui-border);\n background: var(--g-ui-surface);\n color: var(--g-ui-text);\n padding: var(--g-ui-space-10) var(--g-ui-space-12);\n min-height: 44px;\n display: flex;\n flex-wrap: wrap;\n gap: var(--g-ui-space-6);\n align-items: center;\n}\n.g-ui-select-multi-placeholder {\n color: var(--g-ui-muted);\n}\n.g-ui-select-multi-input {\n border: 0;\n background: transparent;\n color: var(--g-ui-text);\n min-width: 120px;\n flex: 1;\n}\n.g-ui-select-multi-input:focus {\n outline: none;\n}\n.g-ui-select-multi-size-xs { font-size: 12px; min-height: 30px; padding: var(--g-ui-space-5) var(--g-ui-space-10); }\n.g-ui-select-multi-size-sm { font-size: 13px; min-height: 36px; padding: var(--g-ui-space-6) var(--g-ui-space-12); }\n.g-ui-select-multi-size-md { font-size: 14px; min-height: 42px; padding: var(--g-ui-space-8) var(--g-ui-space-14); }\n.g-ui-select-multi-size-lg { font-size: 15px; min-height: 50px; padding: var(--g-ui-space-10) var(--g-ui-space-16); }\n.g-ui-select-multi-size-xl { font-size: 16px; min-height: 60px; padding: var(--g-ui-space-13) var(--g-ui-space-20); }\n.g-ui-select-tag {\n border: 1px solid var(--g-ui-border);\n border-radius: 999px;\n padding: var(--g-ui-space-2) var(--g-ui-space-8);\n color: var(--g-ui-text);\n}\n.g-ui-select-multi-size-xs .g-ui-select-tag { font-size: 11px; }\n.g-ui-select-multi-size-sm .g-ui-select-tag { font-size: 12px; }\n.g-ui-select-multi-size-md .g-ui-select-tag { font-size: 13px; }\n.g-ui-select-multi-size-lg .g-ui-select-tag { font-size: 14px; }\n.g-ui-select-multi-size-xl .g-ui-select-tag { font-size: 15px; }\n.g-ui-select-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n}\n.g-ui-select-tag-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n}\n.g-ui-select-tag-remove svg {\n width: 12px;\n height: 12px;\n fill: currentColor;\n}\n.g-ui-select-item-check {\n width: 16px;\n height: 16px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--g-ui-primary);\n line-height: 0;\n}\n.g-ui-select-item-check svg {\n width: 14px;\n height: 14px;\n fill: currentColor;\n}\n.g-ui-select-item-label {\n line-height: 1.4;\n}\n\n.g-ui-toast-stack {\n position: fixed;\n right: var(--g-ui-space-20);\n top: var(--g-ui-space-20);\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-12);\n z-index: 1001;\n}\n.g-ui-toast {\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n padding: var(--g-ui-space-10) var(--g-ui-space-12);\n background: var(--g-ui-bg);\n min-width: 220px;\n box-shadow: var(--g-ui-shadow-sm);\n}\n.g-ui-toast-title { font-weight: 600; }\n\n.g-ui-tabs-vertical {\n display: grid;\n grid-template-columns: 200px 1fr;\n gap: var(--g-ui-space-16);\n}\n.g-ui-tabs-vertical .g-ui-tabs-list {\n flex-direction: column;\n}\n\n.g-ui-drawer-shadowed {\n box-shadow: var(--g-ui-shadow);\n}\n\n.g-ui-notifications {\n position: fixed;\n right: var(--g-ui-space-20);\n top: var(--g-ui-space-20);\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-10);\n z-index: 1001;\n}\n.g-ui-notifications-position-top-left { top: var(--g-ui-space-20); left: var(--g-ui-space-20); right: auto; }\n.g-ui-notifications-position-top-center { top: var(--g-ui-space-20); left: 50%; right: auto; transform: translateX(-50%); }\n.g-ui-notifications-position-top-right { top: var(--g-ui-space-20); right: var(--g-ui-space-20); left: auto; }\n.g-ui-notifications-position-bottom-left { bottom: var(--g-ui-space-20); left: var(--g-ui-space-20); right: auto; top: auto; flex-direction: column-reverse; }\n.g-ui-notifications-position-bottom-center { bottom: var(--g-ui-space-20); left: 50%; right: auto; top: auto; transform: translateX(-50%); flex-direction: column-reverse; }\n.g-ui-notifications-position-bottom-right { bottom: var(--g-ui-space-20); right: var(--g-ui-space-20); left: auto; top: auto; flex-direction: column-reverse; }\n\n.g-ui-range {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--g-ui-space-10);\n}\n\n.g-ui-input-number {\n width: 100%;\n}\n\n.g-ui-popper {\n position: relative;\n display: inline-flex;\n}\n.g-ui-popper-dropdown {\n position: absolute;\n top: calc(100% + var(--g-ui-space-8));\n left: 0;\n min-width: 220px;\n background: var(--g-ui-bg);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n box-shadow: var(--g-ui-shadow-sm);\n padding: var(--g-ui-space-12) var(--g-ui-space-16);\n z-index: 50;\n}\n\n.g-ui-pill {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-6);\n border-radius: 999px;\n border: 1px solid var(--g-ui-border);\n padding: var(--g-ui-space-4) var(--g-ui-space-10);\n font-size: 12px;\n}\n\n.g-ui-pagination-compact .g-ui-pagination-item {\n min-width: 26px;\n height: 26px;\n font-size: 12px;\n}\n\n\n.g-ui-password-toggle {\n border: 0;\n background: transparent;\n color: var(--g-ui-muted);\n cursor: pointer;\n font-size: 12px;\n}\n\n.g-ui-copy-button {\n border: 1px solid var(--g-ui-border-muted);\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n border-radius: 8px;\n padding: var(--g-ui-space-6) var(--g-ui-space-10);\n cursor: pointer;\n font-size: 12px;\n}\n.g-ui-copy-button:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-copy-button-done {\n color: var(--g-ui-success);\n border-color: rgba(18,184,134,0.5);\n}\n\n.g-ui-progress-ring {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 4px solid var(--g-ui-border-muted);\n border-top-color: var(--g-ui-primary);\n animation: g-ui-spin 1s linear infinite;\n}\n.g-ui-progress-ring-size-sm { width: 32px; height: 32px; }\n.g-ui-progress-ring-size-md { width: 48px; height: 48px; }\n.g-ui-progress-ring-size-lg { width: 64px; height: 64px; }\n\n.g-ui-toast-close {\n margin-left: auto;\n border: 0;\n background: transparent;\n color: var(--g-ui-muted);\n cursor: pointer;\n}\n\n.g-ui-toast-row {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n}\n\n.g-ui-select-search {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-8);\n}\n.g-ui-input-size-sm .g-ui-search-input-left-section { width: 16px; height: 16px; }\n.g-ui-input-size-md .g-ui-search-input-left-section { width: 20px; height: 20px; }\n.g-ui-input-size-lg .g-ui-search-input-left-section { width: 24px; height: 24px; }\n.g-ui-input-size-xl .g-ui-search-input-left-section { width: 28px; height: 28px; }\n.g-ui-search-input-left-section {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--g-ui-muted);\n font-size: 16px;\n}\n.g-ui-search-input-left-section svg {\n width: 100%;\n height: 100%;\n fill: inherit;\n}\n\n.g-ui-select-search-input {\n width: 100%;\n border-radius: var(--g-ui-radius);\n border: 1px solid var(--g-ui-border-muted);\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n padding: var(--g-ui-space-8) var(--g-ui-space-10);\n}\n.g-ui-select-search-list {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-6);\n max-height: 160px;\n overflow: auto;\n}\n.g-ui-select-search-item {\n padding: var(--g-ui-space-6) var(--g-ui-space-8);\n border-radius: 8px;\n cursor: pointer;\n}\n.g-ui-select-search-item:hover {\n background: var(--g-ui-bg-subtle);\n}\n\n.g-ui-switch-group {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-8);\n}\n\n.g-ui-segmented-scroll {\n overflow-x: auto;\n max-width: 100%;\n}\n\n.g-ui-range-picker {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--g-ui-space-12);\n}\n\n.g-ui-toast-auto {\n border-color: var(--g-ui-primary);\n}\n\n.g-ui-flex {\n display: flex;\n}\n.g-ui-flex-column { flex-direction: column; }\n.g-ui-flex-row { flex-direction: row; }\n.g-ui-flex-wrap { flex-wrap: wrap; }\n\n.g-ui-navlink-root {\n display: flex;\n flex-direction: column;\n}\n.g-ui-navlink {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-8);\n padding: var(--g-ui-space-8) var(--g-ui-space-12);\n border-radius: 0;\n color: var(--g-ui-text);\n text-decoration: none;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n}\n.g-ui-navlink-body {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-2);\n flex: 1;\n}\n.g-ui-navlink-description {\n font-size: 12px;\n color: var(--g-ui-muted);\n font-weight: 400;\n}\n.g-ui-navlink-section {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n.g-ui-navlink-variant-subtle:hover { background: var(--g-ui-bg-subtle); }\n.g-ui-navlink-variant-light:hover { background: var(--g-ui-primary-muted); }\n.g-ui-navlink-variant-filled:hover { background: var(--g-ui-primary-hover); color: var(--g-ui-primary-fg); }\n.g-ui-navlink-active.g-ui-navlink-variant-subtle {\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-primary);\n}\n.g-ui-navlink-active.g-ui-navlink-variant-light {\n background: var(--g-ui-primary-muted);\n color: var(--g-ui-primary);\n}\n.g-ui-navlink-active.g-ui-navlink-variant-filled {\n background: var(--g-ui-primary);\n color: var(--g-ui-primary-fg);\n}\n.g-ui-navlink-disabled {\n opacity: 0.6;\n pointer-events: none;\n}\n.g-ui-navlink-children {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-4);\n}\n.g-ui-navlink-padding-none { padding: 0; }\n.g-ui-navlink-padding-sm { padding: var(--g-ui-space-8); }\n.g-ui-navlink-padding-md { padding: var(--g-ui-space-12); }\n.g-ui-navlink-padding-lg { padding: var(--g-ui-space-16); }\n.g-ui-navlink-padding-xl { padding: var(--g-ui-space-20); }\n.g-ui-navlink-padding-h-sm { padding: var(--g-ui-space-8) var(--g-ui-space-8) ; }\n.g-ui-navlink-padding-h-md { padding: var(--g-ui-space-8) var(--g-ui-space-12) ; }\n.g-ui-navlink-padding-h-lg { padding: var(--g-ui-space-8) var(--g-ui-space-20) ; }\n.g-ui-navlink-padding-h-xl { padding: var(--g-ui-space-8) var(--g-ui-space-24) ; }\n\n.g-ui-indicator {\n position: relative;\n display: inline-flex;\n}\n.g-ui-indicator-badge {\n position: absolute;\n top: -4px;\n right: -4px;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: var(--g-ui-danger);\n border: 2px solid var(--g-ui-bg);\n}\n.g-ui-indicator-size-xs .g-ui-indicator-badge { width: 6px; height: 6px; border-width: 1px; }\n.g-ui-indicator-size-sm .g-ui-indicator-badge { width: 8px; height: 8px; border-width: 2px; }\n.g-ui-indicator-size-md .g-ui-indicator-badge { width: 10px; height: 10px; border-width: 2px; }\n.g-ui-indicator-size-lg .g-ui-indicator-badge { width: 12px; height: 12px; border-width: 2px; }\n.g-ui-indicator-size-xl .g-ui-indicator-badge { width: 14px; height: 14px; border-width: 3px; }\n.g-ui-indicator-position-top-right .g-ui-indicator-badge { top: -4px; right: -4px; bottom: auto; left: auto; }\n.g-ui-indicator-position-top-left .g-ui-indicator-badge { top: -4px; left: -4px; bottom: auto; right: auto; }\n.g-ui-indicator-position-bottom-right .g-ui-indicator-badge { bottom: -4px; right: -4px; top: auto; left: auto; }\n.g-ui-indicator-position-bottom-left .g-ui-indicator-badge { bottom: -4px; left: -4px; top: auto; right: auto; }\n.g-ui-indicator-color-danger .g-ui-indicator-badge { background: var(--g-ui-danger); }\n.g-ui-indicator-color-success .g-ui-indicator-badge { background: var(--g-ui-success); }\n.g-ui-indicator-color-warning .g-ui-indicator-badge { background: var(--g-ui-warning); }\n.g-ui-indicator-color-info .g-ui-indicator-badge { background: var(--g-ui-info); }\n\n.g-ui-burger {\n width: 28px;\n height: 28px;\n position: relative;\n display: inline-block;\n}\n.g-ui-burger span {\n position: absolute;\n left: 0;\n width: 100%;\n height: 2px;\n background: var(--g-ui-text);\n transition: transform .2s ease, opacity .2s ease, top .2s ease;\n}\n.g-ui-burger span:nth-child(1) { top: 6px; }\n.g-ui-burger span:nth-child(2) { top: 13px; }\n.g-ui-burger span:nth-child(3) { top: 20px; }\n.g-ui-burger-open span:nth-child(1) { top: 7px; transform: rotate(45deg); }\n.g-ui-burger-open span:nth-child(2) { opacity: 0; }\n.g-ui-burger-open span:nth-child(3) { top: 7px; transform: rotate(-45deg); }\n\n.g-ui-loading-overlay {\n position: absolute;\n inset: 0;\n background: rgba(15,17,21,0.6);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n}\n\n.g-ui-grid-system {\n display: grid;\n grid-template-columns: repeat(12, minmax(0, 1fr));\n}\n.g-ui-col-span-1 { grid-column: span 1; }\n.g-ui-col-span-2 { grid-column: span 2; }\n.g-ui-col-span-3 { grid-column: span 3; }\n.g-ui-col-span-4 { grid-column: span 4; }\n.g-ui-col-span-5 { grid-column: span 5; }\n.g-ui-col-span-6 { grid-column: span 6; }\n.g-ui-col-span-7 { grid-column: span 7; }\n.g-ui-col-span-8 { grid-column: span 8; }\n.g-ui-col-span-9 { grid-column: span 9; }\n.g-ui-col-span-10 { grid-column: span 10; }\n.g-ui-col-span-11 { grid-column: span 11; }\n.g-ui-col-span-12 { grid-column: span 12; }\n\n.g-ui-scroll-area {\n overflow: auto;\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n background: var(--g-ui-bg);\n padding: 0;\n}\n.g-ui-scroll-area::-webkit-scrollbar { width: 10px; height: 10px; }\n.g-ui-scroll-area::-webkit-scrollbar-track { background: transparent; }\n.g-ui-scroll-area::-webkit-scrollbar-thumb {\n background: color-mix(in srgb, var(--g-ui-muted) 30%, transparent);\n border-radius: 999px;\n}\n.g-ui-scroll-area:hover::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--g-ui-muted) 50%, transparent); }\n.g-ui-scroll-area-sm { max-height: 120px; }\n.g-ui-scroll-area-md { max-height: 200px; }\n.g-ui-scroll-area-lg { max-height: 320px; }\n.g-ui-scroll-area-auto { max-height: auto; }\n\n.g-ui-pin-input {\n display: inline-flex;\n align-items: center;\n cursor: text;\n box-sizing: border-box;\n}\n.g-ui-pin-input-wrapper {\n display: flex;\n gap: var(--g-ui-space-8);\n box-sizing: border-box;\n}\n.g-ui-pin-input-field {\n width: 40px;\n height: 40px;\n padding: 0;\n text-align: center;\n font-size: var(--g-ui-font-md);\n font-weight: 500;\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n background: var(--g-ui-bg);\n color: var(--g-ui-text);\n outline: none;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n.g-ui-pin-input-field::placeholder {\n color: var(--g-ui-muted);\n opacity: 0.5;\n}\n.g-ui-pin-input-field:focus {\n border-color: var(--g-ui-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--g-ui-primary) 20%, transparent);\n}\n.g-ui-pin-input-field:disabled {\n background: var(--g-ui-bg-subtle);\n color: var(--g-ui-muted);\n cursor: not-allowed;\n}\n.g-ui-pin-input-error {\n border-color: var(--g-ui-danger);\n}\n.g-ui-pin-input-error:focus {\n border-color: var(--g-ui-danger);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--g-ui-danger) 20%, transparent);\n}\n.g-ui-pin-input.g-ui-input-size-xs .g-ui-pin-input-field { width: 28px; height: 28px; font-size: var(--g-ui-font-xs); }\n.g-ui-pin-input.g-ui-input-size-sm .g-ui-pin-input-field { width: 34px; height: 34px; font-size: var(--g-ui-font-sm); }\n.g-ui-pin-input.g-ui-input-size-md .g-ui-pin-input-field { width: 40px; height: 40px; font-size: var(--g-ui-font-md); }\n.g-ui-pin-input.g-ui-input-size-lg .g-ui-pin-input-field { width: 48px; height: 48px; font-size: var(--g-ui-font-lg); }\n.g-ui-pin-input.g-ui-input-size-xl .g-ui-pin-input-field { width: 56px; height: 56px; font-size: var(--g-ui-font-xl); }\n\n.g-ui-checkbox-group {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-8);\n}\n\n.g-ui-avatar-group {\n display: inline-flex;\n align-items: center;\n}\n.g-ui-avatar-group .g-ui-avatar {\n margin-left: calc(0px - var(--g-ui-space-8));\n border: 2px solid var(--g-ui-bg);\n}\n.g-ui-avatar-group .g-ui-avatar:first-child {\n margin-left: 0;\n}\n\n.g-ui-badge-group {\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--g-ui-space-6);\n}\n\n.g-ui-radio {\n display: flex;\n flex-direction: column;\n gap: var(--g-ui-space-6);\n}\n.g-ui-radio-control {\n display: inline-flex;\n align-items: center;\n gap: var(--g-ui-space-10);\n cursor: pointer;\n}\n.g-ui-radio-input {\n appearance: none;\n width: var(--g-ui-control-size, 16px);\n height: var(--g-ui-control-size, 16px);\n border-radius: 50%;\n border: 1px solid var(--g-ui-border);\n background: var(--g-ui-bg);\n position: relative;\n transition: background-color .12s ease, border-color .12s ease;\n}\n.g-ui-radio-input:focus-visible {\n outline: 2px solid var(--g-ui-primary);\n outline-offset: 2px;\n}\n.g-ui-radio-input:checked {\n border-color: var(--g-ui-primary);\n}\n.g-ui-radio-input:checked::after {\n content: '';\n position: absolute;\n width: var(--g-ui-control-inner-size, 8px);\n height: var(--g-ui-control-inner-size, 8px);\n border-radius: 50%;\n background: var(--g-ui-primary);\n top: var(--g-ui-control-inner-offset, 3px);\n left: var(--g-ui-control-inner-offset, 3px);\n}\n.g-ui-radio-label { font-size: 14px; }\n.g-ui-radio-description { font-size: 12px; color: var(--g-ui-muted); }\n.g-ui-radio-size-xs { --g-ui-control-size: 16px; --g-ui-control-inner-size: 6px; --g-ui-control-inner-offset: 4px; }\n.g-ui-radio-size-sm { --g-ui-control-size: 20px; --g-ui-control-inner-size: 8px; --g-ui-control-inner-offset: 5px; }\n.g-ui-radio-size-md { --g-ui-control-size: 24px; --g-ui-control-inner-size: 10px; --g-ui-control-inner-offset: 6px; }\n.g-ui-radio-size-lg { --g-ui-control-size: 30px; --g-ui-control-inner-size: 14px; --g-ui-control-inner-offset: 7px; }\n.g-ui-radio-size-xl { --g-ui-control-size: 36px; --g-ui-control-inner-size: 16px; --g-ui-control-inner-offset: 9px; }\n\n.g-ui-breadcrumbs {\n display: inline-flex;\n gap: var(--g-ui-space-8);\n align-items: center;\n color: var(--g-ui-muted);\n font-size: 13px;\n flex-wrap: wrap;\n}\n.g-ui-breadcrumbs-separator { opacity: 0.6; }\n\n.g-ui-center {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.g-ui-space { display: block; width: var(--g-ui-space-16); height: var(--g-ui-space-16); }\n.g-ui-space-xs { width: var(--g-ui-space-8); height: var(--g-ui-space-8); }\n.g-ui-space-sm { width: var(--g-ui-space-12); height: var(--g-ui-space-12); }\n.g-ui-space-md { width: var(--g-ui-space-16); height: var(--g-ui-space-16); }\n.g-ui-space-lg { width: var(--g-ui-space-24); height: var(--g-ui-space-24); }\n.g-ui-space-xl { width: var(--g-ui-space-32); height: var(--g-ui-space-32); }\n\n.g-ui-collapse-hidden { display: none; }\n\n.g-ui-action-icon {\n width: 28px;\n height: 28px;\n border-radius: 8px;\n border: 1px solid var(--g-ui-border);\n background: transparent;\n color: var(--g-ui-text);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n}\n.g-ui-action-icon-size-xs { width: 18px; height: 18px; }\n.g-ui-action-icon-size-sm { width: 22px; height: 22px; }\n.g-ui-action-icon-size-md { width: 28px; height: 28px; }\n.g-ui-action-icon-size-lg { width: 34px; height: 34px; }\n.g-ui-action-icon-size-xl { width: 44px; height: 44px; }\n\n.g-ui-action-icon-size-xs .g-ui-icon { font-size: 12px; }\n.g-ui-action-icon-size-sm .g-ui-icon { font-size: 14px; }\n.g-ui-action-icon-size-md .g-ui-icon { font-size: 16px; }\n.g-ui-action-icon-size-lg .g-ui-icon { font-size: 20px; }\n.g-ui-action-icon-size-xl .g-ui-icon { font-size: 24px; }\n\n.g-ui-action-icon-filled {\n background: var(--g-ui-primary);\n border-color: transparent;\n color: var(--g-ui-primary-fg);\n}\n.g-ui-action-icon-subtle {\n background: transparent;\n border-color: var(--g-ui-border);\n}\n.g-ui-action-icon-light {\n background: var(--g-ui-primary-subtle);\n border-color: var(--g-ui-primary-muted);\n color: var(--g-ui-primary);\n}\n.g-ui-action-icon-outline {\n background: transparent;\n border-color: var(--g-ui-primary);\n color: var(--g-ui-primary);\n}\n.g-ui-action-icon-filled:hover { background: var(--g-ui-primary-hover); }\n.g-ui-action-icon-light:hover { background: var(--g-ui-primary-muted); }\n.g-ui-action-icon-outline:hover { background: var(--g-ui-primary-subtle); }\n.g-ui-action-icon-subtle:hover { background: var(--g-ui-bg-muted); }\n\n.g-ui-popover {\n position: relative;\n display: inline-flex;\n}\n.g-ui-popover-dropdown {\n position: absolute;\n top: calc(100% + var(--g-ui-space-8));\n left: 0;\n min-width: 220px;\n background: var(--g-ui-surface);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: 10px;\n box-shadow: var(--g-ui-shadow-sm);\n padding: var(--g-ui-space-10) var(--g-ui-space-12);\n z-index: 50;\n}\n.g-ui-popover-right { left: auto; right: 0; }\n.g-ui-popover-center { left: 50%; transform: translateX(-50%); }\n\n.g-ui-hover-card {\n position: relative;\n display: inline-flex;\n}\n.g-ui-hover-card-dropdown {\n position: absolute;\n top: calc(100% + var(--g-ui-space-8));\n left: 0;\n min-width: 220px;\n background: var(--g-ui-surface);\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n box-shadow: var(--g-ui-shadow-sm);\n padding: var(--g-ui-space-12) var(--g-ui-space-16);\n z-index: 50;\n opacity: 0;\n pointer-events: none;\n transition: opacity .12s ease, transform .12s ease;\n transform: translateY(-4px);\n}\n.g-ui-hover-card:hover .g-ui-hover-card-dropdown {\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0);\n}\n.g-ui-hover-card-right { left: auto; right: 0; }\n.g-ui-hover-card-center { left: 50%; transform: translateX(-50%) translateY(-4px); }\n.g-ui-hover-card:hover .g-ui-hover-card-center { transform: translateX(-50%) translateY(0); }\n\n.g-ui-affix {\n position: fixed;\n z-index: 1000;\n}\n.g-ui-affix-bottom-right { right: var(--g-ui-space-20); bottom: var(--g-ui-space-20); }\n.g-ui-affix-bottom-left { left: var(--g-ui-space-20); bottom: var(--g-ui-space-20); }\n.g-ui-affix-top-right { right: var(--g-ui-space-20); top: var(--g-ui-space-20); }\n.g-ui-affix-top-left { left: var(--g-ui-space-20); top: var(--g-ui-space-20); }\n.g-ui-affix-center-center { left: 50%; top: 50%; transform: translate(-50%, -50%); }\n.g-ui-affix-top-center { left: 50%; top: var(--g-ui-space-20); transform: translateX(-50%); }\n.g-ui-affix-bottom-center { left: 50%; bottom: var(--g-ui-space-20); transform: translateX(-50%); }\n.g-ui-affix-left-center { left: var(--g-ui-space-20); top: 50%; transform: translateY(-50%); }\n.g-ui-affix-right-center { right: var(--g-ui-space-20); top: 50%; transform: translateY(-50%); }\n\n\n.g-ui-fieldset {\n border: 1px solid var(--g-ui-border-muted);\n border-radius: var(--g-ui-radius);\n padding: var(--g-ui-space-14);\n}\n.g-ui-legend {\n padding: 0 var(--g-ui-space-6);\n color: var(--g-ui-muted);\n font-size: 12px;\n}\n\n.g-ui-appbar {\n width: 100%;\n height: 60px;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--g-ui-space-12);\n padding: 0 var(--g-ui-space-16);\n background: var(--g-ui-bg);\n border-bottom: 1px solid var(--g-ui-border);\n z-index: 100;\n position: relative;\n}\n.g-ui-appbar-static { position: static; }\n.g-ui-appbar-sticky { position: sticky; top: 0; }\n.g-ui-appbar-fixed { position: fixed; top: 0; left: 0; right: 0; }\n\n.g-ui-sidebar {\n width: 260px;\n min-width: 260px;\n background: var(--g-ui-bg);\n border-right: 1px solid var(--g-ui-border);\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n}\n.g-ui-sidebar-position-right { border-right: 0; border-left: 1px solid var(--g-ui-border-muted); }\n.g-ui-sidebar-size-sm { width: 220px; min-width: 220px; }\n.g-ui-sidebar-size-md { width: 260px; min-width: 260px; }\n.g-ui-sidebar-size-lg { width: 320px; min-width: 320px; }\n.g-ui-sidebar-size-xl { width: 380px; min-width: 380px; }\n.g-ui-sidebar-min-button { min-width: 38px; width: 38px; }\n.g-ui-sidebar-min-xs { min-width: 48px; width: 48px; }\n.g-ui-sidebar-min-sm { min-width: 64px; width: 64px; }\n.g-ui-sidebar-min-md { min-width: 80px; width: 80px; }\n.g-ui-sidebar-fixed { \n position: relative;\n width: 45px; \n min-width: 45px; \n max-width: 45px;\n height: 100%;\n transition: \n width .22s cubic-bezier(.2,.8,.2,1),\n min-width .22s cubic-bezier(.2,.8,.2,1),\n max-width .22s cubic-bezier(.2,.8,.2,1);\n}\n.g-ui-sidebar-fixed.g-ui-sidebar-size-sm { width: 40px; min-width: 40px; max-width: 40px; }\n.g-ui-sidebar-fixed.g-ui-sidebar-size-md { width: 45px; min-width: 45px; max-width: 45px; }\n.g-ui-sidebar-fixed.g-ui-sidebar-size-lg { width: 50px; min-width: 50px; max-width: 50px; }\n.g-ui-sidebar-fixed.g-ui-sidebar-size-xl { width: 60px; min-width: 60px; max-width: 60px; }\n\n.g-ui-sidebar-fixed-open.g-ui-sidebar-size-sm { width: 220px; min-width: 220px; max-width: 220px; }\n.g-ui-sidebar-fixed-open.g-ui-sidebar-size-md { width: 260px; min-width: 260px; max-width: 260px; }\n.g-ui-sidebar-fixed-open.g-ui-sidebar-size-lg { width: 320px; min-width: 320px; max-width: 320px; }\n.g-ui-sidebar-fixed-open.g-ui-sidebar-size-xl { width: 380px; min-width: 380px; max-width: 380px; }\n\n.g-ui-sidebar-drawer {\n position: fixed;\n top: 0;\n bottom: 0;\n z-index: 999;\n transition: transform .22s cubic-bezier(.2,.8,.2,1), opacity .22s ease;\n opacity: 0;\n transform: translateX(-100%);\n height: 100%;\n min-height: 100vh;\n}\n.g-ui-sidebar-drawer-left.g-ui-sidebar-drawer-open,\n.g-ui-sidebar-drawer-right.g-ui-sidebar-drawer-open {\n opacity: 1;\n transform: translateX(0);\n}\n.g-ui-sidebar-drawer-right {\n right: 0;\n left: auto;\n transform: translateX(100%);\n}\n.g-ui-sidebar-drawer-left {\n left: 0;\n right: auto;\n}\n.g-ui-sidebar-overlay {\n position: fixed;\n inset: 0;\n z-index: 998;\n background: rgba(0,0,0,0.6);\n opacity: 0;\n pointer-events: none;\n transition: opacity .22s ease, backdrop-filter .22s ease;\n backdrop-filter: blur(10px);\n}\n.g-ui-sidebar-overlay-noblur {\n backdrop-filter: none;\n}\n.g-ui-sidebar-overlay-open {\n opacity: 1;\n pointer-events: auto;\n}\n.g-ui-sidebar-title {\n font-weight: 700;\n font-size: 14px;\n color: var(--g-ui-muted);\n text-transform: uppercase;\n letter-spacing: .08em;\n}\n.g-ui-sidebar-item {\n display: flex;\n align-items: center;\n gap: var(--g-ui-space-10);\n padding: var(--g-ui-space-8) var(--g-ui-space-12);\n border-radius: 8px;\n cursor: pointer;\n color: var(--g-ui-text);\n text-decoration: none;\n font-size: 14px;\n}\n.g-ui-sidebar-item:hover {\n background: var(--g-ui-bg-subtle);\n}\n.g-ui-sidebar-item-active {\n background: var(--g-ui-primary-subtle);\n color: var(--g-ui-primary);\n}\n.g-ui-sidebar-item-active:hover { background: var(--g-ui-primary-muted); }\n.g-ui-skeleton-h-xs { height: 8px; }\n.g-ui-skeleton-h-sm { height: 12px; }\n.g-ui-skeleton-h-md { height: 16px; }\n.g-ui-skeleton-h-lg { height: 24px; }\n.g-ui-skeleton-h-xl { height: 32px; }\n.g-ui-skeleton-w-xs { width: 60px; }\n.g-ui-skeleton-w-sm { width: 120px; }\n.g-ui-skeleton-w-md { width: 180px; }\n.g-ui-skeleton-w-lg { width: 240px; }\n.g-ui-skeleton-w-xl { width: 320px; }\n.g-ui-skeleton-w-full { width: 100%; }\n.g-ui-loading {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n.g-ui-spinner {\n border: 3px solid var(--g-ui-border-muted);\n border-top-color: var(--g-ui-primary);\n border-radius: 50%;\n animation: g-ui-spin 1s linear infinite;\n}\n.g-ui-loading-size-xs .g-ui-spinner { width: 14px; height: 14px; }\n.g-ui-loading-size-sm .g-ui-spinner { width: 18px; height: 18px; }\n.g-ui-loading-size-md .g-ui-spinner { width: 22px; height: 22px; }\n.g-ui-loading-size-lg .g-ui-spinner { width: 28px; height: 28px; }\n.g-ui-loading-size-xl .g-ui-spinner { width: 36px; height: 36px; }\n.g-ui-dots::before,\n.g-ui-dots::after {\n content: '';\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--g-ui-primary);\n margin: 0 var(--g-ui-space-3);\n animation: g-ui-bounce 1s infinite ease-in-out;\n}\n.g-ui-dots::after { animation-delay: .2s; }\n.g-ui-loading-size-xs.g-ui-dots::before,\n.g-ui-loading-size-xs.g-ui-dots::after { width: 4px; height: 4px; }\n.g-ui-loading-size-sm.g-ui-dots::before,\n.g-ui-loading-size-sm.g-ui-dots::after { width: 6px; height: 6px; }\n.g-ui-loading-size-md.g-ui-dots::before,\n.g-ui-loading-size-md.g-ui-dots::after { width: 8px; height: 8px; }\n.g-ui-loading-size-lg.g-ui-dots::before,\n.g-ui-loading-size-lg.g-ui-dots::after { width: 10px; height: 10px; }\n.g-ui-loading-size-xl.g-ui-dots::before,\n.g-ui-loading-size-xl.g-ui-dots::after { width: 12px; height: 12px; }\n.g-ui-bars span {\n width: 4px;\n height: 16px;\n background: var(--g-ui-primary);\n margin: 0 var(--g-ui-space-2);\n display: inline-block;\n animation: g-ui-bars 1s infinite ease-in-out;\n}\n.g-ui-bars span:nth-child(2) { animation-delay: .15s; }\n.g-ui-bars span:nth-child(3) { animation-delay: .3s; }\n.g-ui-loading-size-xs.g-ui-bars span { width: 3px; height: 12px; }\n.g-ui-loading-size-sm.g-ui-bars span { width: 4px; height: 14px; }\n.g-ui-loading-size-md.g-ui-bars span { width: 4px; height: 16px; }\n.g-ui-loading-size-lg.g-ui-bars span { width: 5px; height: 20px; }\n.g-ui-loading-size-xl.g-ui-bars span { width: 6px; height: 24px; }\n\n\n.g-ui-grid-table {\n display: grid;\n}\n.g-ui-grid-table-row {\n display: contents;\n}\n.g-ui-grid-table-cell {\n padding: var(--g-ui-space-8);\n border-bottom: 1px solid var(--g-ui-border-muted);\n}\n.g-ui-grid-table-row-header .g-ui-grid-table-cell {\n font-weight: 200;\n}\n.g-ui-grid-table-cell-sortable {\n cursor: pointer;\n user-select: none;\n}\n.g-ui-grid-table-cell-sortable:hover {\n background: var(--g-ui-bg-hover, rgba(0,0,0,0.04));\n}\n.g-ui-grid-table-sort-icon {\n opacity: 0.5;\n}\n.g-ui-grid-table-sticky .g-ui-grid-table-row-header .g-ui-grid-table-cell {\n position: sticky;\n top: 0;\n z-index: 1;\n background: var(--g-ui-bg, #fff);\n}\n\n.g-ui-bottombar {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--g-ui-space-4);\n padding: var(--g-ui-space-4) var(--g-ui-space-8);\n background: var(--g-ui-bg);\n border-top: 1px solid var(--g-ui-border);\n z-index: 100;\n box-sizing: border-box;\n}\n.g-ui-bottombar-grow .g-ui-bottombar-action { flex: 1; }\n\n.g-ui-bottombar-action {\n all: unset;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 2px;\n padding: var(--g-ui-space-6) var(--g-ui-space-12);\n border-radius: var(--g-ui-radius-sm);\n cursor: pointer;\n transition: background 150ms ease, color 150ms ease;\n color: var(--g-ui-text-muted);\n font-size: var(--g-ui-fz-xs);\n min-width: 48px;\n box-sizing: border-box;\n -webkit-tap-highlight-color: transparent;\n user-select: none;\n}\n.g-ui-bottombar-action:hover { background: var(--g-ui-hover); }\n.g-ui-bottombar-action:active { background: var(--g-ui-active); }\n.g-ui-bottombar-action-active { color: var(--g-ui-primary); }\n.g-ui-bottombar-action-active:hover { background: var(--g-ui-primary-light-hover); }\n.g-ui-bottombar-action-disabled {\n opacity: 0.5;\n pointer-events: none;\n cursor: default;\n}\n\n.g-ui-bottombar-action-variant-filled.g-ui-bottombar-action-active {\n background: var(--g-ui-primary);\n color: var(--g-ui-white);\n}\n.g-ui-bottombar-action-variant-filled.g-ui-bottombar-action-active:hover {\n background: var(--g-ui-primary-dark);\n}\n\n.g-ui-bottombar-action-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n line-height: 1;\n}\n.g-ui-bottombar-action-label {\n font-size: 12px;\n line-height: 1.2;\n white-space: nowrap;\n text-align: center;\n}\n\n\n@keyframes g-ui-spin { to { transform: rotate(360deg); } }\n@keyframes g-ui-bounce { 0%, 100% { transform: translateY(0); opacity: .6; } 50% { transform: translateY(-5px); opacity: 1; } }\n@keyframes g-ui-bars { 0%, 100% { transform: scaleY(.6); } 50% { transform: scaleY(1.2); } }\n`;\n\nexport function ensureStyles() {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = css;\n document.head.appendChild(style);\n}\n", "const themeVars = new Set([\n '--g-ui-bg',\n '--g-ui-bg-subtle',\n '--g-ui-bg-muted',\n '--g-ui-bg-emphasized',\n '--g-ui-bg-inverted',\n '--g-ui-bg-panel',\n '--g-ui-fg',\n '--g-ui-fg-muted',\n '--g-ui-fg-subtle',\n '--g-ui-fg-inverted',\n '--g-ui-border',\n '--g-ui-border-subtle',\n '--g-ui-border-emphasized',\n '--g-ui-border-inverted',\n '--g-ui-primary',\n '--g-ui-primary-hover',\n '--g-ui-primary-active',\n '--g-ui-primary-subtle',\n '--g-ui-primary-muted',\n '--g-ui-primary-emphasized',\n '--g-ui-success',\n '--g-ui-success-hover',\n '--g-ui-success-active',\n '--g-ui-success-subtle',\n '--g-ui-success-muted',\n '--g-ui-danger',\n '--g-ui-danger-hover',\n '--g-ui-danger-active',\n '--g-ui-danger-subtle',\n '--g-ui-danger-muted',\n '--g-ui-warning',\n '--g-ui-warning-hover',\n '--g-ui-warning-active',\n '--g-ui-warning-subtle',\n '--g-ui-warning-muted',\n '--g-ui-info',\n '--g-ui-info-hover',\n '--g-ui-info-active',\n '--g-ui-info-subtle',\n '--g-ui-info-muted',\n '--g-ui-shadow-xs',\n '--g-ui-shadow-sm',\n '--g-ui-shadow-md',\n '--g-ui-shadow-lg',\n '--g-ui-shadow-xl',\n '--g-ui-shadow-2xl',\n '--g-ui-radius',\n '--g-ui-font',\n // Legacy\n '--g-ui-surface',\n '--g-ui-text',\n '--g-ui-muted',\n '--g-ui-primary-strong',\n '--g-ui-shadow',\n]);\n\nexport function setThemeVars(vars = {}, target = document?.documentElement) {\n if (!target) return;\n for (const [key, value] of Object.entries(vars)) {\n const cssKey = key.startsWith('--') ? key : `--g-ui-${key}`;\n if (!themeVars.has(cssKey)) continue;\n target.style.setProperty(cssKey, String(value));\n }\n}\n\nexport function setThemeMode(mode = 'dark', target = document?.documentElement) {\n if (!target) return;\n target.classList.remove('g-ui-theme-dark', 'g-ui-theme-light');\n target.classList.add(mode === 'light' ? 'g-ui-theme-light' : 'g-ui-theme-dark');\n}\n", "import { Renderer, isSignal, isState, isStatePath, isComputed, resolve, computed, after, concat } from '@granularjs/core';\n\nfunction isReactive(value) {\n return isSignal(value) || isState(value) || isStatePath(value) || isComputed(value);\n}\n\nexport function cx(...values) {\n return concat(...values, { separator: ' ', filterFalsy: true });\n}\n\nexport function toPx(value) {\n if (value == null || value === '') return undefined;\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport function splitPropsChildren(args, defaults) {\n const props = {};\n const children = [];\n const isPropsObject = (value) =>\n !!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n !Renderer.isRenderable(value) &&\n !Renderer.isDomNode(value) &&\n !isSignal(value) &&\n !isState(value) &&\n !isStatePath(value) &&\n !isComputed(value);\n\n for (const arg of args) {\n if (isPropsObject(arg)) Object.assign(props, arg);\n else children.push(arg);\n }\n if (defaults && typeof defaults === 'object') {\n for (const key of Object.keys(defaults)) {\n if (props[key] === undefined) props[key] = defaults[key];\n }\n }\n return { props: computed(props), rawProps: props, children };\n}\n\nexport function resolveValue(value) {\n return resolve(value);\n}\n\nexport function resolveBool(value) {\n return !!resolve(value);\n}\n\nexport function classVar(prefix, value, fallback) {\n const normalize = (v) => {\n const resolved = resolve(v);\n const finalValue = resolved == null || resolved === '' ? fallback : resolved;\n return finalValue == null || finalValue === '' ? '' : `${prefix}${finalValue}`;\n };\n if (isReactive(value)) {\n return after(value).compute((v) => normalize(v));\n }\n return normalize(value);\n}\n\nexport function classFlag(name, value) {\n if (isReactive(value)) {\n return after(value).compute((v) => (resolve(v) ? name : ''));\n }\n return resolve(value) ? name : '';\n}\n\nexport function classMap(value, map, fallback) {\n const getClass = (v) => map[v] || null;\n if (isReactive(value)) {\n return after(value).compute((v) => getClass(resolve(v ?? fallback)));\n }\n return getClass(resolve(value ?? fallback));\n}\n", "import { Button as HtmlButton, Span, when, after} from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveBool, classVar, classFlag } from '../utils.js';\n\nexport function Button(...args) {\n const { props, children } = splitPropsChildren(args, { variant: 'filled', size: 'md', justify: 'center' });\n const {\n variant,\n size,\n fullWidth,\n loading,\n leftSection,\n rightSection,\n className,\n disabled,\n justify,\n ...rest\n } = props;\n\n const isDisabled = after(disabled, loading).compute(([disabled, loading]) => disabled || loading);\n\n return HtmlButton(\n {\n ...rest,\n disabled: isDisabled,\n className: cx(\n 'g-ui-button',\n classVar('g-ui-button-variant-', variant, 'filled'),\n classVar('g-ui-justify-', justify, 'center'),\n classVar('g-ui-button-size-', size, 'md'),\n classFlag('g-ui-button-full', fullWidth),\n classFlag('g-ui-button-loading', loading),\n className\n ),\n },\n when(leftSection, () => Span({ className: 'g-ui-button-section-left' }, leftSection)),\n when(loading, () => Span('Loading...'), () => children),\n when(rightSection, () => Span({ className: 'g-ui-button-section-right' }, rightSection))\n );\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag, classMap } from '../utils.js';\n\nexport function Text(...args) {\n const { props, children } = splitPropsChildren(args, { size: 'md' });\n const { size, weight, color, dimmed, align, ellipsis, className, style, ...rest } = props;\n const weightClass = classMap(weight, {\n bold: 'g-ui-text-weight-700',\n semibold: 'g-ui-text-weight-600',\n medium: 'g-ui-text-weight-500',\n 700: 'g-ui-text-weight-700',\n 600: 'g-ui-text-weight-600',\n 500: 'g-ui-text-weight-500',\n 400: 'g-ui-text-weight-400',\n });\n const colorClass = classMap(color, {\n primary: 'g-ui-text-primary',\n success: 'g-ui-text-success',\n danger: 'g-ui-text-danger',\n muted: 'g-ui-text-dimmed',\n });\n const alignClass = classMap(align, {\n center: 'g-ui-text-align-center',\n right: 'g-ui-text-align-right',\n left: 'g-ui-text-align-left',\n });\n return Span(\n {\n ...rest,\n style,\n className: cx(\n 'g-ui-text',\n classVar('g-ui-text-size-', size, 'md'),\n classFlag('g-ui-text-dimmed', dimmed),\n classFlag('g-ui-text-ellipsis', ellipsis),\n weightClass,\n colorClass,\n alignClass,\n className\n ),\n },\n children\n );\n}\n", "import { H1, H2, H3, H4, H5, H6 } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue, classVar } from '../utils.js';\n\nconst map = { 1: H1, 2: H2, 3: H3, 4: H4, 5: H5, 6: H6 };\n\nexport function Title(...args) {\n const { props, children } = splitPropsChildren(args, { order: 2 });\n const { order, className, style, ...rest } = props;\n const orderValue = resolveValue(order) || 2;\n const Tag = map[orderValue] || H2;\n return Tag(\n {\n ...rest,\n className: cx('g-ui-title', classVar('g-ui-title-order-', order, 2), className),\n },\n children\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag } from '../utils.js';\n\nexport function Container(...args) {\n const { props, children } = splitPropsChildren(args, { size: 'md' });\n const { size, fluid, className, style, ...rest } = props;\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-container',\n classFlag('g-ui-container-fluid', fluid),\n classVar('g-ui-container-size-', size, 'md'),\n className\n ),\n },\n children\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classMap } from '../utils.js';\n\nexport function Stack(...args) {\n const { props, children } = splitPropsChildren(args, { gap: 'md' });\n const { gap, align, justify, className, style, ...rest } = props;\n const justifyClass = classMap(justify, {\n between: 'g-ui-justify-between',\n center: 'g-ui-justify-center',\n end: 'g-ui-justify-end',\n start: 'g-ui-justify-start',\n });\n return Div(\n {\n ...rest,\n style,\n className: cx(\n 'g-ui-stack',\n classVar('g-ui-gap-', gap, 'md'),\n classVar('g-ui-align-', align),\n justifyClass,\n className\n ),\n },\n children\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classMap, classFlag } from '../utils.js';\n\nexport function Group(...args) {\n const { props, children } = splitPropsChildren(args, { gap: 'md', align: 'center' });\n const { gap, align, justify, position, noWrap, className, style, ...rest } = props;\n const positionClass = classMap(position, {\n apart: 'g-ui-justify-between',\n center: 'g-ui-justify-center',\n right: 'g-ui-justify-end',\n left: 'g-ui-justify-start',\n });\n return Div(\n {\n ...rest,\n style,\n className: cx(\n 'g-ui-group',\n classVar('g-ui-gap-', gap, 'md'),\n classVar('g-ui-align-', align, 'center'),\n classVar('g-ui-justify-', justify, 'none'),\n positionClass,\n classFlag('g-ui-no-wrap', noWrap),\n className\n ),\n },\n children\n );\n}\n", "import { Div, list, when, after, Span } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\nimport { Button } from './Button.js';\n\nexport function Card(...args) {\n const { props, children } = splitPropsChildren(args, { padding: 'md', radius: 'md', shadow: 'none', border: 'default' });\n const { title, content, actions, border, padding, radius, shadow, className, style, ...rest } = props;\n\n return Div(\n { style },\n when(title, () => Div({ className: 'g-ui-card-title' }, title)),\n when(content, () => Div({ className: 'g-ui-card-content' }, content)),\n {\n className: cx(\n 'g-ui-card',\n classVar('g-ui-card-border-', border, 'md'),\n classVar('g-ui-card-padding-', padding, 'md'),\n classVar('g-ui-card-radius-', radius, 'md'),\n classVar('g-ui-card-shadow-', shadow, 'md'),\n className\n ),\n ...rest,\n },\n children,\n when(actions, () => Div(\n { className: 'g-ui-card-actions' },\n list(actions, (action) => Button(\n {\n className: 'g-ui-card-action',\n onClick: (e) => action.get().onClick?.(e),\n leftSection: action.leftSection,\n rightSection: action.rightSection,\n size: after(action.size).compute(s => s || 'sm'),\n variant: after(action.variant).compute(v => v || 'outline'),\n ...(action.get().props || {}),\n },\n action.label\n ))\n )),\n );\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag, classMap } from '../utils.js';\n\nexport function Badge(...args) {\n const { props, children } = splitPropsChildren(args, { variant: 'filled', size: 'md' });\n const { variant, size, className, dot, style, ...rest } = props;\n const dotClass = classMap(variant, { dot: 'g-ui-badge-dot' });\n return Span(\n {\n ...rest,\n className: cx(\n 'g-ui-badge',\n classVar('g-ui-badge-variant-', variant, 'filled'),\n classVar('g-ui-badge-size-', size, 'md'),\n classFlag('g-ui-badge-dot', dot),\n dotClass,\n className\n ),\n },\n children\n );\n}\n", "import { Div, Input, Textarea as HtmlTextarea, Label, Span, when, state, after, isState } from '@granularjs/core';\nimport { cx, splitPropsChildren, classFlag, classVar, resolveValue, resolveBool } from '../utils.js';\n\nexport function TextInput(...args) {\n const { props, rawProps } = splitPropsChildren(args, { size: 'md' });\n const {\n label,\n description,\n error,\n size,\n leftSection,\n rightSection,\n className,\n inputClassName,\n multiline,\n value: computed_value,\n ...rest\n } = props;\n const { value: raw_value, onChange, onInput, onFocus, onBlur, onKeyDown, onKeyUp, onClick } = rawProps;\n\n const isValueTwoWay = isState(raw_value) && !onChange && !onInput\n const currentState = isValueTwoWay ? raw_value : state(resolveValue(computed_value) ?? '');\n\n after(computed_value).change((next) => {\n if (isValueTwoWay) return;\n currentState.set(resolveValue(next) ?? '');\n });\n\n const handleInput = (ev) => {\n const next = ev?.target?.value ?? '';\n if (next === computed_value.get()) return;\n currentState.set(next);\n onChange?.(ev);\n onInput?.(ev);\n };\n\n const isMultiline = resolveBool(multiline);\n const Control = isMultiline ? HtmlTextarea : Input;\n const finalInputClassName = cx(inputClassName, isMultiline && 'g-ui-textarea');\n\n const input = Control({\n ...rest,\n value: currentState,\n onInput: handleInput,\n onChange: handleInput,\n onFocus,\n onBlur,\n onKeyDown,\n onKeyUp,\n onClick,\n className: cx('g-ui-input', finalInputClassName),\n });\n\n\n return Div(\n { className: cx('g-ui-text-input', className) },\n when(label, () => Label({ className: 'g-ui-text-input-label' }, label)),\n when(description, () => Span({ className: 'g-ui-text-input-description' }, description)),\n Div(\n {\n className: cx(\n 'g-ui-input-wrapper',\n classFlag('g-ui-input-multiline', multiline),\n classVar('g-ui-input-size-', size, 'md'),\n classFlag('g-ui-input-error', error)\n ),\n },\n when(leftSection, () => Div({ className: 'g-ui-input-section' }, leftSection)),\n input,\n when(rightSection, () => Div({ className: 'g-ui-input-section' }, rightSection))\n ),\n when(error, () => Div({ className: 'g-ui-text-input-error-text' }, error))\n );\n}\n", "import { splitPropsChildren } from '../utils.js';\nimport { TextInput } from './TextInput.js';\n\nexport function Textarea(...args) {\n const { props } = splitPropsChildren(args, { size: 'md' });\n const { size, leftSection, rightSection, className, ...rest } = props;\n return TextInput({\n ...rest,\n size,\n className,\n leftSection,\n rightSection,\n multiline: true,\n });\n}\n", "import { cx, splitPropsChildren, resolveValue } from '../utils.js';\nimport { Div, Span, when, after, state } from '@granularjs/core';\nimport { TextInput } from './TextInput.js';\n\nexport function NumberField(...args) {\n const { props, rawProps } = splitPropsChildren(args, {\n size: 'md',\n step: 1,\n allowDecimal: true,\n allowNegative: true,\n clampBehavior: 'blur',\n hideControls: false,\n decimalSeparator: '.',\n thousandSeparator: '',\n format: null,\n prefix: '',\n suffix: '',\n });\n const {\n value,\n min,\n max,\n step,\n size,\n allowDecimal,\n allowNegative,\n decimalSeparator,\n thousandSeparator,\n decimalScale,\n clampBehavior,\n hideControls,\n format,\n locale,\n currency,\n formatOptions,\n prefix,\n suffix,\n leftSection,\n rightSection,\n className,\n onChange: computed_onChange,\n onInput: computed_onInput,\n ...rest\n } = props;\n const { onChange: _onChange, onInput: _onInput, onBlur, onFocus, onKeyDown } = rawProps;\n\n const onChange = (e) => {\n _onChange?.(e.target?.value ?? '');\n _onInput?.(e.target?.value ?? '');\n }\n const onInput = onChange;\n\n const currentState = state('');\n\n const escapeRegExp = (value) => String(value ?? '').replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n const getScale = () => {\n const allowDec = !!resolveValue(allowDecimal);\n if (!allowDec) return 0;\n const resolved = resolveValue(decimalScale);\n if (resolved != null && resolved !== '' && Number.isFinite(Number(resolved))) return Math.max(0, Number(resolved));\n const fmt = resolveValue(format);\n if (fmt === 'currency' || fmt === 'percent') return 2;\n return 0;\n };\n\n const parseNumber = (raw) => {\n const decSep = resolveValue(decimalSeparator) ?? '.';\n const thousSep = resolveValue(thousandSeparator) ?? '';\n let rawValue = String(raw ?? '');\n if (thousSep) {\n rawValue = rawValue.split(thousSep).join('');\n }\n if (!rawValue || rawValue === '-' || rawValue === decSep || rawValue.endsWith(decSep)) return null;\n const normalized = rawValue.replace(decSep, '.');\n const num = Number(normalized);\n if (!Number.isFinite(num)) return null;\n return num;\n };\n\n const addThousandSeparators = (intPart) => {\n const thousSep = resolveValue(thousandSeparator) ?? '';\n if (!thousSep) return intPart;\n return intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousSep);\n };\n\n const formatNumber = (num) => {\n const decSep = resolveValue(decimalSeparator) ?? '.';\n const scale = getScale();\n const numeric = Number(num);\n if (!Number.isFinite(numeric)) return '';\n const sign = numeric < 0 ? '-' : '';\n const abs = Math.abs(numeric);\n let [int, dec = ''] = String(abs).split('.');\n const formattedInt = addThousandSeparators(int);\n if (scale > 0) {\n const trimmed = dec.slice(0, scale).padEnd(scale, '0');\n return `${sign}${formattedInt}${decSep}${trimmed}`;\n }\n return `${sign}${formattedInt}`;\n };\n\n const formatWithIntl = (num, kind) => {\n try {\n const resolvedLocale = resolveValue(locale);\n const resolvedCurrency = resolveValue(currency) ?? 'USD';\n const options = resolveValue(formatOptions) ?? {};\n const scale = getScale();\n const style = kind === 'currency' ? 'currency' : 'decimal';\n const formatter = new Intl.NumberFormat(resolvedLocale, {\n style,\n currency: resolvedCurrency,\n ...(scale > 0 ? { minimumFractionDigits: scale, maximumFractionDigits: scale } : { maximumFractionDigits: 0 }),\n ...options,\n });\n return formatter.format(num);\n } catch {\n return formatNumber(num);\n }\n };\n\n const clampValue = (num) => {\n let next = num;\n const minValue = resolveValue(min);\n const maxValue = resolveValue(max);\n if (minValue != null && Number.isFinite(Number(minValue))) next = Math.max(next, Number(minValue));\n if (maxValue != null && Number.isFinite(Number(maxValue))) next = Math.min(next, Number(maxValue));\n if (!resolveValue(allowNegative) && next < 0) next = 0;\n return next;\n };\n\n const resolveSuffix = () => {\n const suffixValue = resolveValue(suffix) ?? '';\n const fmt = resolveValue(format);\n if (!suffixValue && fmt === 'percent') return '%';\n return suffixValue;\n };\n\n const buildVisual = (raw, sign, fmt) => {\n const prefixValue = resolveValue(prefix) ?? '';\n const suffixValue = resolveSuffix();\n const normalizedRaw = String(raw ?? '').replace(/\\u00A0/g, ' ');\n const normalizedPrefix = String(prefixValue ?? '').replace(/\\u00A0/g, ' ');\n const normalizedSuffix = String(suffixValue ?? '').replace(/\\u00A0/g, ' ');\n const hasPrefix = normalizedPrefix && normalizedRaw.startsWith(normalizedPrefix);\n const hasSuffix = normalizedSuffix && normalizedRaw.endsWith(normalizedSuffix);\n const finalPrefix = hasPrefix ? '' : prefixValue;\n const finalSuffix = hasSuffix ? '' : suffixValue;\n return `${sign ?? ''}${finalPrefix}${raw}${finalSuffix}`;\n };\n\n const makeSanitizedFromDigits = (digitsValue, sign) => {\n const scale = getScale();\n const sep = resolveValue(decimalSeparator) ?? '.';\n const digits = String(digitsValue ?? '').replace(/\\D/g, '');\n const baseDigits = digits || '0';\n const padded = scale > 0 ? baseDigits.padStart(scale + 1, '0') : baseDigits;\n const rawInt = scale > 0 ? padded.slice(0, -scale) : padded;\n const intPart = rawInt.replace(/^0+(?=\\d)/, '') || '0';\n const decPart = scale > 0 ? padded.slice(-scale) : '';\n const sanitized = scale > 0 ? `${intPart}${sep}${decPart}` : intPart;\n return `${sign ?? ''}${sanitized}`;\n };\n\n const stripAffixes = (raw) => {\n const prefixValue = resolveValue(prefix) ?? '';\n const suffixValue = resolveSuffix();\n let out = String(raw ?? '');\n const normalizedPrefix = String(prefixValue ?? '').replace(/\\u00A0/g, ' ');\n const normalizedSuffix = String(suffixValue ?? '').replace(/\\u00A0/g, ' ');\n if (normalizedPrefix) {\n const normalizedOut = out.replace(/\\u00A0/g, ' ');\n if (normalizedOut.startsWith(normalizedPrefix)) out = out.slice(prefixValue.length);\n }\n if (normalizedSuffix) {\n const normalizedOut = out.replace(/\\u00A0/g, ' ');\n if (normalizedOut.endsWith(normalizedSuffix)) out = out.slice(0, -suffixValue.length);\n }\n return out;\n };\n\n const sanitizeFromInput = (rawInput) => {\n const allowNeg = !!resolveValue(allowNegative);\n const body = stripAffixes(rawInput);\n const sign = allowNeg && body.includes('-') ? '-' : '';\n const digits = body.replace(/\\D/g, '');\n let sanitized = makeSanitizedFromDigits(digits, sign);\n if (resolveValue(clampBehavior) === 'strict') {\n const parsed = parseNumber(sanitized);\n if (parsed != null) {\n const clamped = clampValue(parsed);\n const clampedSign = clamped < 0 ? '-' : '';\n sanitized = `${clampedSign}${formatNumber(Math.abs(clamped))}`;\n }\n }\n return sanitized;\n };\n\n const normalizeIncoming = (next) => {\n if (next == null || next === '') return makeSanitizedFromDigits('', '');\n if (typeof next === 'number' && Number.isFinite(next)) {\n const clamped = resolveValue(clampBehavior) === 'strict' ? clampValue(next) : next;\n const sign = clamped < 0 ? '-' : '';\n return `${sign}${formatNumber(Math.abs(clamped))}`;\n }\n const inputText = stripAffixes(next);\n const sep = resolveValue(decimalSeparator) ?? '.';\n const allowNeg = !!resolveValue(allowNegative);\n const sign = allowNeg && String(inputText).includes('-') ? '-' : '';\n const filtered = String(inputText ?? '').replace(new RegExp(`[^0-9${escapeRegExp(sep)}]`, 'g'), '');\n const parsed = parseNumber(`${sign}${filtered}`);\n if (parsed != null) {\n const clamped = resolveValue(clampBehavior) === 'strict' ? clampValue(parsed) : parsed;\n const clampedSign = clamped < 0 ? '-' : '';\n return `${clampedSign}${formatNumber(Math.abs(clamped))}`;\n }\n return sanitizeFromInput(next);\n };\n\n let lastExternalValue = undefined;\n const updateFromExternal = (next) => {\n const resolved = resolveValue(next);\n if (resolved === undefined) return;\n\n const normalized = normalizeIncoming(resolved);\n if (normalized === currentState.get()) return;\n lastExternalValue = normalized;\n currentState.set(normalized);\n };\n\n updateFromExternal(value);\n after(value).change((next) => {\n updateFromExternal(next)\n });\n\n after(currentState).change((next) => {\n if (next === lastExternalValue) {\n lastExternalValue = undefined;\n return;\n }\n lastExternalValue = undefined;\n const parsed = parseNumber(next);\n if (parsed == null) {\n onChange?.(next ?? '');\n return;\n }\n onChange?.(parsed);\n });\n\n const hasRightSection = after(rightSection).compute((next) => next != null && next !== false);\n const showControls = after(hideControls, hasRightSection).compute(([nextHidden, nextRight]) =>\n !resolveValue(nextHidden) && !nextRight\n );\n const inputMode = after(allowDecimal).compute((next) => (resolveValue(next) ? 'decimal' : 'numeric'));\n\n const inputFormat = after(\n format,\n prefix,\n suffix,\n allowDecimal,\n allowNegative,\n decimalSeparator,\n thousandSeparator,\n decimalScale,\n clampBehavior,\n min,\n max,\n locale,\n currency,\n formatOptions\n ).compute(() => ({\n mode: 'both',\n format: (raw) => {\n const sanitized = sanitizeFromInput(raw);\n const fmt = resolveValue(format);\n const allowNeg = !!resolveValue(allowNegative);\n const sign = allowNeg && sanitized.startsWith('-') ? '-' : '';\n const parsed = parseNumber(sanitized);\n let visual = sanitized.replace(sign, '');\n if (parsed != null) {\n const abs = Math.abs(parsed);\n if (typeof fmt === 'function') {\n try {\n visual = fmt(abs);\n } catch {\n visual = formatNumber(abs);\n }\n } else if (fmt === 'currency') {\n visual = formatWithIntl(abs, 'currency');\n } else if (fmt === 'decimal') {\n const resolvedLocale = resolveValue(locale);\n const resolvedOptions = resolveValue(formatOptions);\n visual = resolvedLocale || resolvedOptions ? formatWithIntl(abs, 'decimal') : formatNumber(abs);\n } else if (fmt === 'percent') {\n visual = formatNumber(abs);\n } else {\n visual = formatNumber(abs);\n }\n }\n return { value: sanitized, raw: sanitized, visual: buildVisual(visual, sign, fmt) };\n },\n }));\n\n const stepBy = (direction) => {\n const current = parseNumber(currentState.get());\n const delta = Number(resolveValue(step) ?? 1);\n const base = current == null ? 0 : current;\n const next = clampValue(base + delta * direction);\n currentState.set(formatNumber(next));\n };\n\n const setCaretToEnd = (target) => {\n if (!target || typeof target.setSelectionRange !== 'function') return;\n const setToEnd = () => {\n try {\n const end = String(target.value ?? '').length;\n target.setSelectionRange(end, end);\n } catch { }\n };\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(setToEnd);\n } else {\n setToEnd();\n }\n };\n\n const handleInput = (ev) => {\n onInput?.(ev);\n const target = ev?.target;\n if (!target) return;\n setCaretToEnd(target);\n };\n\n const handleBlur = (ev) => {\n onBlur?.(ev);\n if (resolveValue(clampBehavior) !== 'blur') return;\n const parsed = parseNumber(currentState.get());\n if (parsed == null) return;\n const clamped = clampValue(parsed);\n currentState.set(formatNumber(clamped));\n };\n\n const handleFocus = (ev) => {\n onFocus?.(ev);\n setCaretToEnd(ev?.target);\n };\n\n const handleKeyDown = (ev) => {\n onKeyDown?.(ev);\n const target = ev?.target;\n if (!target) return;\n const prefixValue = resolveValue(prefix) ?? '';\n const suffixValue = resolveSuffix();\n if (suffixValue && typeof target.selectionEnd === 'number') {\n target.selectionEnd = Math.min(target.selectionEnd, String(target.value ?? '').length - suffixValue.length);\n }\n if (prefixValue && typeof target.selectionStart === 'number') {\n target.selectionStart = Math.max(target.selectionStart, prefixValue.length);\n }\n };\n\n const controls = Div(\n { className: 'g-ui-number-field-controls' },\n Span({ className: 'g-ui-number-field-control', onClick: () => stepBy(1) }, '+'),\n Span({ className: 'g-ui-number-field-control', onClick: () => stepBy(-1) }, '\u2212')\n );\n const controlsWrapper = Div({ className: 'g-ui-number-field-controls-wrapper' }, controls);\n const finalRightSection = after(showControls, rightSection).compute(([nextControls, nextRight]) => {\n if (nextControls) return controlsWrapper;\n return nextRight;\n });\n\n return TextInput({\n ...rest,\n size,\n className: cx('g-ui-number-field', className),\n leftSection,\n rightSection: finalRightSection,\n type: 'text',\n inputMode,\n inputClassName: cx('g-ui-input-number'),\n value: currentState,\n format: inputFormat,\n onInput: handleInput,\n onBlur: handleBlur,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n });\n}", "import { NumberField } from './NumberField.js';\n\nexport function NumberInput(...args) {\n return NumberField(...args);\n}\n", "import { Div, Button as HtmlButton, portal, when, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\nimport { closeSvg } from '../theme/icons.js';\n\n\n\nexport function Modal(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { size: 'md', centered: true, overlay: 'normal' });\n const {\n opened,\n title,\n size,\n centered,\n overlay,\n position,\n className,\n style,\n } = props;\n const { onClose } = rawProps;\n const positionClass = after(position, centered).compute(([pos, isCentered]) => {\n const value = pos ?? (isCentered === false ? 'top-center' : 'center');\n return `g-ui-modal-position-${value}`;\n });\n\n return when(opened, () =>\n portal(\n Div(\n {\n className: cx(\n 'g-ui-modal-overlay',\n classVar('g-ui-modal-overlay-', overlay, 'normal'),\n positionClass\n ),\n onClick: (ev) => {\n if (ev.target === ev.currentTarget) onClose?.();\n },\n },\n Div(\n {\n className: cx('g-ui-modal', classVar('g-ui-modal-size-', size, 'md'), className),\n },\n Div(\n { className: 'g-ui-modal-header' },\n when(title, () => Div({ className: 'g-ui-modal-title' }, title)),\n when(onClose, () =>\n HtmlButton(\n {\n type: 'button',\n className: 'g-ui-button g-ui-button-variant-subtle g-ui-button-size-xs g-ui-modal-close',\n onClick: onClose,\n innerHTML: closeSvg,\n }\n )\n )\n ),\n children\n )\n )\n )\n );\n}\n", "export const forwardSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#1f1f1f\"><path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\"/></svg>';\nexport const backwardSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#1f1f1f\"><path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\"/></svg>';\nexport const checkedSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"40px\" viewBox=\"0 -960 960 960\" width=\"40px\" fill=\"#1f1f1f\"><path d=\"M379.33-244 154-469.33 201.67-517l177.66 177.67 378.34-378.34L805.33-670l-426 426Z\"/></svg>';\nexport const indeterminateSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"40px\" viewBox=\"0 -960 960 960\" width=\"40px\" fill=\"#1f1f1f\"><path d=\"M240-446.67v-66.66h480v66.66H240Z\"/></svg>';\nexport const closeSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"40px\" viewBox=\"0 -960 960 960\" width=\"40px\" fill=\"#1f1f1f\"><path d=\"M312-265.33 265.33-312l168-168-168-167L312-693.67l168 168 167-168L693.67-647l-168 167 168 168L647-265.33l-167-168-168 168Z\"/></svg>';\nexport const searchSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#1f1f1f\"><path d=\"M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z\"/></svg>';\nexport const plusSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"currentColor\"><path d=\"M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z\"/></svg>';\nexport const editSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"currentColor\"><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h357l-80 80H200v560h560v-278l80-80v358q0 33-23.5 56.5T760-120H200Zm280-360v-80h240v80H480Zm0 160v-80h320v80H480Zm0 160v-80h320v80H480ZM360-360v-80h80v80h-80Zm0 160v-80h80v80h-80Zm0 160v-80h80v80h-80Zm160-320h280l-36-37 37-37v74H520Zm-160 0h80v-80h-80v80ZM120-600v-160l160-160h160l-80 80H200v240h-80Zm80-240v-80 80Z\"/></svg>';\nexport const deleteSvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"currentColor\"><path d=\"M280-120q-33 0-56.5-23.5T200-200v-520h-40v-80h200v-40h240v40h200v80h-40v520q0 33-23.5 56.5T680-120H280Zm400-600H280v520h400v-520ZM360-280h80v-360h-80v360Zm160 0h80v-360h-80v360ZM280-720v520-520Z\"/></svg>';\nexport const calendarTodaySvg = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"currentColor\"><path d=\"M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Z\"/></svg>';", "import { Div, Span, after, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Loading(...args) {\n const { props } = splitPropsChildren(args, { variant: 'spinner', size: 'md' });\n const { variant, size, className } = props;\n const isDots = after(variant).compute((next) => next === 'dots');\n const isBars = after(variant).compute((next) => next === 'bars');\n return when(isDots,\n () => Div({\n className: cx('g-ui-loading g-ui-dots', classVar('g-ui-loading-size-', size, 'md'), className),\n }),\n () => when(\n isBars,\n () => Div(\n { className: cx('g-ui-loading g-ui-bars', classVar('g-ui-loading-size-', size, 'md'), className) },\n Span(''),\n Span(''),\n Span('')\n ),\n () => Div(\n {\n className: cx('g-ui-loading', classVar('g-ui-loading-size-', size, 'md'), className),\n },\n Div({ className: 'g-ui-spinner' })\n )\n )\n );\n}\n", "import { Div, Input, Label, Span, when, state, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveBool } from '../utils.js';\nimport { checkedSvg, indeterminateSvg } from '../theme/icons.js';\n\nexport function Checkbox(...args) {\n const { props, rawProps } = splitPropsChildren(args, { size: 'md' });\n const { checked, label, description, size, indeterminate, className, style, inputProps, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveBool(checked));\n\n after(checked).change((next) => {\n if (next == null) return;\n currentState.set(!!next);\n onChange?.(next);\n });\n\n const control = Label(\n { className: 'g-ui-checkbox-control' },\n Input({\n type: 'checkbox',\n indeterminate: indeterminate,\n checked: currentState,\n className: cx(\n 'g-ui-checkbox-input',\n classVar('g-ui-checkbox-size-', size, 'md'),\n inputProps?.className\n ),\n ...rest,\n }),\n when(currentState,\n () => Div({ className: 'g-ui-checkbox-checked', innerHTML: checkedSvg }),\n () => {\n if (!currentState.get() && indeterminate.get()) {\n return Div({ className: 'g-ui-checkbox-indeterminate', innerHTML: indeterminateSvg });\n }\n }\n ),\n when(label, () => Span({ className: 'g-ui-checkbox-label' }, label))\n );\n\n return Div(\n { className: cx('g-ui-checkbox', classVar('g-ui-checkbox-size-', size, 'md'), className) },\n control,\n when(description, () => Span({ className: 'g-ui-checkbox-description' }, description))\n );\n}\n", "import { Input, Label, Span, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Switch(...args) {\n const { props } = splitPropsChildren(args, { size: 'md' });\n const { label, size, className, style, inputProps, ...rest } = props;\n return Label(\n { className: cx('g-ui-switch', classVar('g-ui-switch-size-', size, 'md'), className) },\n Input({\n type: 'checkbox',\n className: cx('g-ui-switch-input', classVar('g-ui-switch-size-', size, 'md'), inputProps?.className),\n ...rest,\n }),\n when(label, () => Span({ className: 'g-ui-switch-label' }, label))\n );\n}\n", "import { Div, Span, when, state, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\n\nexport function Select(...args) {\n const { props, rawProps } = splitPropsChildren(args, { data: [], size: 'md' });\n const { data, value, size, leftSection, rightSection, placeholder, className, ...rest } = props;\n const { onChange } = rawProps;\n const open = state(false);\n const currentState = state(resolveValue(value) ?? '');\n\n after(value).change((next) => {\n const resolved = resolveValue(next);\n if (resolved === undefined) return;\n currentState.set(resolved ?? '');\n });\n\n const selectValue = (next) => {\n currentState.set(next);\n onChange?.(next);\n open.set(false);\n };\n\n const valueClass = after(currentState).compute((current) => {\n if (!current) return 'g-ui-select-placeholder';\n return '';\n });\n const displayLabel = after(currentState).compute((current) => {\n const items = resolveValue(data) ?? [];\n const match = items.find((item) => item.value === current);\n if (current) return match?.label ?? '';\n return placeholder ?? '';\n });\n\n return Div(\n { ...rest, className: cx('g-ui-select-root', className) },\n Div(\n { className: cx('g-ui-input-wrapper', classVar('g-ui-input-size-', size, 'md')) },\n when(leftSection, () => Div({ className: 'g-ui-input-section' }, leftSection)),\n Div(\n {\n className: cx('g-ui-select', valueClass),\n onClick: () => open.set(!open.get()),\n },\n Span({ className: 'g-ui-select-value' }, displayLabel)\n ),\n when(rightSection, () => Div({ className: 'g-ui-input-section' }, rightSection), () =>\n Span({ className: 'g-ui-select-caret' }, '\u25BE')\n )\n ),\n when(open, () =>\n Div(\n { className: 'g-ui-select-dropdown' },\n (resolveValue(data) ?? []).map((item) =>\n Div(\n {\n className: cx(\n 'g-ui-select-item',\n after(currentState).compute((current) => {\n if (current === item.value) return 'g-ui-select-item-active';\n return '';\n })\n ),\n onClick: () => selectValue(item.value),\n },\n item.label\n )\n )\n )\n )\n );\n}\n", "import { Button, Div, state, after, list, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classMap, classVar, resolveValue, resolveBool } from '../utils.js';\n\nexport function Tabs(...args) {\n const { props, rawProps } = splitPropsChildren(args, {\n tabs: [],\n orientation: 'horizontal',\n variant: 'default',\n sticky: true,\n });\n const { value, tabs, orientation, variant, sticky, className, style } = props;\n const { onChange } = rawProps;\n\n const currentState = state(resolveValue(value) ?? resolveValue(tabs)?.[0]?.value ?? '');\n const sentinelNode = state();\n const listNode = state();\n const spacerHeight = state(0);\n const stickyLeft = state(0);\n const stickyWidth = state(0);\n const stickyTop = state(0);\n const isSticky = state(false);\n const lastScrollTop = state(0);\n let listening = false;\n let rafId = null;\n let initScheduled = false;\n const listenerTargets = new Set();\n\n after(value).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(resolved);\n });\n\n const setValue = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n\n const getScrollParents = (node) => {\n const parents = [];\n let current = node?.parentElement;\n while (current) {\n const style = getComputedStyle(current);\n const overflow = `${style.overflow}${style.overflowY}${style.overflowX}`;\n if (/(auto|scroll)/.test(overflow)) {\n parents.push(current);\n }\n current = current.parentElement;\n }\n return parents;\n };\n\n const getScrollRoot = (node) => getScrollParents(node)[0] ?? null;\n\n const getRootTop = (root) => (root ? root.getBoundingClientRect().top : 0);\n\n const getScrollTop = (root) => (root ? root.scrollTop : (window.scrollY || window.pageYOffset || 0));\n\n const getScrollDirection = (current, last) => {\n if (current > last) return 'down';\n if (current < last) return 'up';\n return 'none';\n };\n\n const getNextSticky = (direction, sentinelTop, rootTop, currentSticky) => {\n if (direction === 'down' && sentinelTop < rootTop) return true;\n if (direction === 'up' && sentinelTop >= rootTop) return false;\n return currentSticky;\n };\n\n const updateSticky = () => {\n const sentinelEl = sentinelNode.get();\n const listEl = listNode.get();\n if (!sentinelEl || !listEl) return;\n if (!resolveBool(sticky)) {\n isSticky.set(false);\n spacerHeight.set(0);\n return;\n }\n if (typeof window === 'undefined') return;\n\n const sentinelRect = sentinelEl.getBoundingClientRect();\n const listRect = listEl.getBoundingClientRect();\n const root = getScrollRoot(sentinelEl);\n const rootTop = getRootTop(root);\n const currentScrollTop = getScrollTop(root);\n const direction = getScrollDirection(currentScrollTop, lastScrollTop.get());\n lastScrollTop.set(currentScrollTop);\n\n const nextSticky = getNextSticky(direction, sentinelRect.top, rootTop, isSticky.get());\n\n spacerHeight.set(listRect.height);\n stickyLeft.set(sentinelRect.left);\n stickyWidth.set(sentinelRect.width);\n stickyTop.set(rootTop);\n if (nextSticky !== isSticky.get()) {\n isSticky.set(nextSticky);\n }\n };\n\n const scheduleUpdate = () => {\n if (rafId != null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n updateSticky();\n });\n };\n\n const addListenerTarget = (target) => {\n if (!target || listenerTargets.has(target)) return;\n listenerTargets.add(target);\n target.addEventListener('scroll', scheduleUpdate, { passive: true });\n };\n\n const initListeners = () => {\n if (listening) return;\n const sentinelEl = sentinelNode.get();\n const listEl = listNode.get();\n if (!sentinelEl || !listEl) return;\n if (typeof window === 'undefined') return;\n listening = true;\n updateSticky();\n addListenerTarget(window);\n window.addEventListener('resize', scheduleUpdate);\n getScrollParents(sentinelEl).forEach(addListenerTarget);\n };\n\n after(listNode, sentinelNode, sticky).change(initListeners);\n\n if (!initScheduled && typeof window !== 'undefined') {\n initScheduled = true;\n setTimeout(() => initListeners(), 0);\n }\n\n const stickyStyle = after(isSticky, stickyLeft, stickyWidth, stickyTop).compute((values) => {\n const [active, left, width, top] = values;\n if (!active) {\n return {\n position: 'static',\n top: 'auto',\n left: 'auto',\n width: 'auto',\n zIndex: 'auto',\n background: 'transparent',\n };\n }\n return {\n position: 'fixed',\n top: `${top}px`,\n left: `${left}px`,\n width: `${width}px`,\n background: 'var(--g-ui-surface)',\n zIndex: 100,\n };\n });\n\n const spacerStyle = after(isSticky, spacerHeight).compute((values) => {\n const [active, height] = values;\n return { height: active ? `${height}px` : '0px' };\n });\n\n return Div(\n Div({\n className: cx(\n 'g-ui-tabs',\n classMap(orientation, { vertical: 'g-ui-tabs-vertical' }),\n classVar('g-ui-tabs-variant-', variant, 'default'),\n props.className ?? className\n ),\n },\n Div({ node: sentinelNode }),\n Div({ style: spacerStyle }),\n Div({ node: listNode, className: 'g-ui-tabs-list', style: stickyStyle },\n list(tabs, (tab) =>\n Button(\n {\n className: after(currentState, tab.value).compute(([v, tabVal]) =>\n cx('g-ui-tabs-tab', tabVal === v && 'g-ui-tabs-tab-active')\n ),\n onClick: () => setValue(tab.get().value),\n },\n tab.label\n )\n )\n ),\n Div({ className: 'g-ui-tabs-panel' },\n when(currentState, () => tabs.get()?.find((tab) => tab.value === currentState.get())?.content ?? null)\n )\n )\n );\n}\n", "import { Table as HtmlTable, Thead, Tbody, Tr, Th, Td } from '@granularjs/core';\nimport { cx, splitPropsChildren, classFlag } from '../utils.js';\n\nexport function Table(...args) {\n const { props } = splitPropsChildren(args, { headers: [], rows: [] });\n const {\n headers,\n rows,\n striped,\n highlightOnHover,\n withBorder,\n withColumnBorders,\n className,\n style,\n ...rest\n } = props;\n return HtmlTable(\n {\n ...rest,\n className: cx(\n 'g-ui-table',\n classFlag('g-ui-table-striped', striped),\n classFlag('g-ui-table-hover', highlightOnHover),\n classFlag('g-ui-table-with-border', withBorder),\n classFlag('g-ui-table-column-borders', withColumnBorders),\n className\n ),\n },\n headers.length\n ? Thead(Tr(headers.map((header) => Th(header))))\n : null,\n Tbody(\n rows.map((row) =>\n Tr(\n Array.isArray(row)\n ? row.map((cell) => Td(cell))\n : Object.values(row).map((cell) => Td(cell))\n )\n )\n )\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { state, when, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveBool } from '../utils.js';\n\nexport function Accordion(...args) {\n const { props, children } = splitPropsChildren(args, { opened: false });\n const { opened, className, ...rest } = props;\n const openedState = state(resolveBool(opened));\n\n after(opened).change((next) => {\n openedState.set(resolveBool(next));\n });\n\n const toggle = () => {\n openedState.set(!openedState.get());\n };\n\n const header = children[0];\n const content = children[1];\n return Div(\n { ...rest, className: cx('g-ui-accordion', className) },\n Div({ className: 'g-ui-accordion-header', onClick: toggle }, header),\n when(openedState, () => Div({ className: 'g-ui-accordion-content' }, content))\n );\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Tooltip(...args) {\n const { props, children } = splitPropsChildren(args);\n const { label, className, style } = props;\n return Span(\n { className: cx('g-ui-tooltip', className) },\n children,\n Span({ className: 'g-ui-tooltip-content' }, label)\n );\n}\n", "import { Div, when, after, state, portal } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue } from '../utils.js';\n\nexport const menuControlStore = state({ currentOpenState: null })\n\nexport function Menu(...args) {\n const mainNode = state();\n const dropdownNode = state();\n const dropdownStyle = state({});\n const { props, rawProps, children } = splitPropsChildren(args, { position: 'right' });\n const { opened, content, position, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(opened) ?? false);\n after(opened).change((value) => {\n const resolved = resolveValue(value);\n if (resolved == null) return;\n currentState.set(!!resolved);\n if (!!resolved) {\n closeOldSetCurrent()\n }\n });\n\n const closeOldSetCurrent = () => {\n if (menuControlStore.get().currentOpenState === currentState) return;\n menuControlStore.get().currentOpenState?.set(false)\n menuControlStore.set().currentOpenState = currentState;\n }\n\n if (opened.get()) {\n closeOldSetCurrent()\n }\n\n const parsePosition = (value) => {\n const raw = String(value ?? 'right').toLowerCase();\n const parts = raw.split('-').filter(Boolean);\n if (parts.length === 1) {\n const single = parts[0];\n if (single === 'top' || single === 'bottom') return { placement: single, align: 'center' };\n if (single === 'left' || single === 'right') return { placement: 'bottom', align: single };\n if (single === 'center') return { placement: 'bottom', align: 'center' };\n return { placement: 'bottom', align: 'right' };\n }\n const [first, second] = parts;\n if (first === 'top' || first === 'bottom') {\n return { placement: first, align: second || 'center' };\n }\n if (first === 'left' || first === 'right') {\n return { placement: first, align: second || 'center' };\n }\n return { placement: 'bottom', align: 'right' };\n };\n\n const updatePosition = () => {\n const trigger = mainNode.get();\n const dropdown = dropdownNode.get();\n if (!trigger || !dropdown) return;\n if (typeof window === 'undefined') return;\n const rect = trigger.getBoundingClientRect();\n const dropdownRect = dropdown.getBoundingClientRect();\n const positionValue = resolveValue(position) ?? 'right';\n const spaceVar = getComputedStyle(document.documentElement).getPropertyValue('--g-ui-space-20');\n const margin = Number.parseFloat(spaceVar) || 20;\n const viewportWidth = window.innerWidth || 0;\n const viewportHeight = window.innerHeight || 0;\n const maxLeft = Math.max(margin, viewportWidth - dropdownRect.width - margin);\n const maxTop = Math.max(margin, viewportHeight - dropdownRect.height - margin);\n const { placement, align } = parsePosition(positionValue);\n const gap = 8;\n let top = rect.bottom + gap;\n let left = rect.left;\n if (placement === 'top' || placement === 'bottom') {\n top = placement === 'top' ? rect.top - dropdownRect.height - gap : rect.bottom + gap;\n if (align === 'center') {\n left = rect.left + rect.width / 2 - dropdownRect.width / 2;\n } else if (align === 'right') {\n left = rect.right - dropdownRect.width;\n } else {\n left = rect.left;\n }\n } else if (placement === 'left' || placement === 'right') {\n left = placement === 'left' ? rect.left - dropdownRect.width - gap : rect.right + gap;\n if (align === 'center') {\n top = rect.top + rect.height / 2 - dropdownRect.height / 2;\n } else if (align === 'bottom') {\n top = rect.bottom - dropdownRect.height;\n } else {\n top = rect.top;\n }\n }\n left = Math.max(margin, Math.min(left, maxLeft));\n top = Math.max(margin, Math.min(top, maxTop));\n dropdownStyle.set({\n top: `${top}px`,\n left: `${left}px`,\n });\n };\n\n const setOpen = (next) => {\n currentState.set(next);\n onChange?.(next);\n\n if (next) {\n closeOldSetCurrent()\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(() => updatePosition());\n } else {\n setTimeout(() => updatePosition(), 0);\n }\n }\n };\n const toggle = () => setOpen(!currentState.get())\n const close = () => setOpen(false)\n\n return Div(\n { ...rest, node: mainNode, className: cx('g-ui-menu', className) },\n Div({ onClick: toggle }, children),\n when(currentState, () =>\n portal(\n Div(\n Div({ className: 'g-ui-menu-overlay', onClick: close }),\n Div(\n { className: 'g-ui-menu-dropdown', node: dropdownNode, style: dropdownStyle },\n content\n )\n )\n )\n )\n );\n}\n", "import { Div, portal, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classMap } from '../utils.js';\n\nexport function Drawer(...args) {\n const { props, children } = splitPropsChildren(args, {\n position: 'right',\n size: 'md',\n overlay: 'normal',\n shadowed: true,\n });\n const { opened, onClose, position, size, overlay, shadowed, className, style } = props;\n return when(opened, () =>\n portal(\n Div(\n { className: cx('g-ui-drawer-overlay', classVar('g-ui-drawer-overlay-', overlay, 'normal')), onClick: onClose },\n Div(\n {\n className: cx(\n 'g-ui-drawer',\n classMap(shadowed, { true: 'g-ui-drawer-shadowed' }, true),\n classVar('g-ui-drawer-', position, 'right'),\n classVar('g-ui-drawer-size-', size, 'md'),\n className\n ),\n onClick: (ev) => ev.stopPropagation(),\n },\n children\n )\n )\n )\n );\n}\n", "import { Button, Div, Span, when, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveBool } from '../utils.js';\nimport { Loading } from './Loading.js';\nimport { closeSvg } from '../theme/icons.js';\n\nexport function Notification(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { color: 'blue', withCloseButton: true });\n const {\n title,\n color,\n icon,\n loading,\n withCloseButton,\n withBorder,\n className,\n style,\n } = props;\n const { onClose } = rawProps;\n const showLoader = after(icon, loading).compute(([nextIcon, nextLoading]) => !nextIcon && !!nextLoading);\n const withIcon = after(icon, loading).compute(([nextIcon, nextLoading]) => !!nextIcon || !!nextLoading);\n return Div(\n {\n className: cx(\n 'g-ui-notification',\n [withBorder, 'g-ui-notification-bordered'],\n [color, (value) => `g-ui-notification-${value}`],\n [withIcon, 'g-ui-notification-with-icon'],\n className\n ),\n },\n when(icon, () => Span({ className: 'g-ui-notification-icon' }, icon)),\n when(showLoader, () => Loading({ size: 'sm', className: 'g-ui-notification-loader' })),\n Div(\n { className: 'g-ui-notification-body' },\n when(title, () => Div({ className: 'g-ui-notification-title' }, title)),\n children\n ),\n when(withCloseButton, () =>\n Button({ type: 'button', className: 'g-ui-notification-close', onClick: () => onClose?.() }, Span({ innerHTML: closeSvg }))\n )\n );\n}\n", "import { Div, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classFlag, classVar } from '../utils.js';\nimport { Text } from './Text.js';\n\nexport function Divider(...args) {\n const { props } = splitPropsChildren(args, { labelPosition: 'center' });\n const { label, labelPosition, vertical, className, ...rest } = props;\n\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-divider',\n classFlag('label', label),\n classVar('g-ui-divider-label-', labelPosition, 'center'),\n classFlag('g-ui-divider-vertical', vertical),\n className\n ),\n },\n when(label, () => Text({ className: 'g-ui-divider-label-text', size: 'sm' }, label))\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Paper(...args) {\n const { props, children } = splitPropsChildren(args, { padding: 'md', radius: 'md', shadow: 'none' });\n const { padding, radius, shadow, className, ...rest } = props;\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-paper',\n [padding, (value) => `g-ui-card-padding-${value}`],\n [radius, (value) => `g-ui-card-radius-${value}`],\n [shadow, (value) => `g-ui-card-shadow-${value}`],\n className\n ),\n },\n children\n );\n}\n", "import { Button, Div, Span, after, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveBool } from '../utils.js';\n\nexport function Alert(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { color: 'blue' });\n const {\n title,\n color,\n icon,\n withCloseButton,\n className,\n ...rest\n } = props;\n const { onClose } = rawProps;\n\n const hasContent = after(title, withCloseButton).compute(([title, showClose]) => {\n return title || showClose\n });\n const hasIcon = after(icon).compute((icon) => {\n return icon !== undefined\n });\n\n return Div(\n { ...rest, className: cx('g-ui-alert', [color, (value) => `g-ui-alert-${value}`], className) },\n Div(\n { className: 'g-ui-alert-header' },\n when(icon, () => Span({ className: 'g-ui-alert-icon' }, icon)),\n when(title, () => Div({ className: 'g-ui-alert-title' }, title)),\n when(withCloseButton, () => Button({ type: 'button', className: 'g-ui-alert-close', onClick: () => onClose?.() }, '\u00D7'))\n ),\n children\n );\n}\n", "import { Div, Img, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Avatar(...args) {\n const { props, children } = splitPropsChildren(args, { size: 'md', alt: '' });\n const { src, size, alt, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-avatar', [size, (value) => `g-ui-avatar-size-${value}`], className) },\n when(src, () => Img({ className: 'g-ui-avatar-img', src, alt }), () => {\n return children;\n })\n );\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Kbd(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Span({ ...rest, className: cx('g-ui-kbd', className) }, children);\n}\n", "import { Code as HtmlCode } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Code(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return HtmlCode({ ...rest, className: cx('g-ui-code', className) }, children);\n}\n", "import { Blockquote as HtmlBlockquote } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Blockquote(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return HtmlBlockquote({ ...rest, className: cx('g-ui-blockquote', className) }, children);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function SimpleGrid(...args) {\n const { props, children } = splitPropsChildren(args, { cols: 3, gap: 'md' });\n const { cols, gap, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-grid', [gap, (value) => `g-ui-gap-${value}`], [cols, (value) => `g-ui-grid-cols-${value}`], className) },\n children\n );\n}\n", "import { Ul, Ol, Li, Div, Span, after, when, isSignal, isState, isStatePath, isComputed } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag, classMap } from '../utils.js';\n\nexport function List(...args) {\n const { props, children } = splitPropsChildren(args, { type: 'none', size: 'md' });\n const { type, size, withPadding, className, ...rest } = props;\n const typeClass = classMap(type, {\n ordered: 'g-ui-list-ordered',\n unordered: 'g-ui-list-unordered',\n none: 'g-ui-list-none',\n });\n const isOrdered = after(type).compute((next) => next === 'ordered');\n const isListNode = (value) =>\n value && typeof value === 'object' && typeof value.tagName === 'string' &&\n (value.tagName.toLowerCase() === 'ul' || value.tagName.toLowerCase() === 'ol');\n const isListItemNode = (value) =>\n value && typeof value === 'object' && typeof value.tagName === 'string' &&\n value.tagName.toLowerCase() === 'li';\n const wrapChild = (child) => {\n const wrapValue = (value) => {\n if (value == null || value === false) return null;\n if (Array.isArray(value)) return value.map((item) => wrapValue(item));\n if (isListItemNode(value)) return value;\n if (isListNode(value)) return Li({ className: 'g-ui-list-nested-item' }, value);\n return Li(Span({ className: 'g-ui-list-item-shell' }, value));\n };\n if (isSignal(child) || isState(child) || isStatePath(child) || isComputed(child)) {\n return after(child).compute((next) => wrapValue(next));\n }\n return wrapValue(child);\n };\n const listChildren = children.map((child) => wrapChild(child));\n const listProps = {\n ...rest,\n className: cx(\n 'g-ui-list',\n classVar('g-ui-list-size-', size, 'md'),\n classFlag('g-ui-list-with-padding', withPadding),\n typeClass,\n className\n ),\n };\n return when(\n isOrdered,\n () => Ol(listProps, listChildren),\n () => Ul(listProps, listChildren)\n );\n}\n\nexport function ListItem(...args) {\n const { props, children } = splitPropsChildren(args, { withBorder: false });\n const { leftSection, rightSection, title, body, withBorder, className, ...rest } = props;\n const hasStructured = after(title, body).compute(([nextTitle, nextBody]) => !!nextTitle || !!nextBody);\n return Li(\n {\n ...rest,\n className: cx('g-ui-list-item', classFlag('g-ui-list-item-border', withBorder), className),\n },\n Div(\n { className: 'g-ui-list-item-shell' },\n when(leftSection, () => Span({ className: 'g-ui-list-item-section g-ui-list-item-section-left' }, leftSection)),\n when(\n hasStructured,\n () =>\n Div(\n { className: 'g-ui-list-item-content' },\n when(title, () => Div({ className: 'g-ui-list-item-title' }, title)),\n when(body, () => Div({ className: 'g-ui-list-item-body' }, body))\n ),\n () => children\n ),\n when(rightSection, () => Span({ className: 'g-ui-list-item-section g-ui-list-item-section-right' }, rightSection))\n )\n );\n}\n\nList.Item = ListItem;\n", "import { A } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Anchor(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return A({ ...rest, className: cx('g-ui-anchor', className) }, children);\n}\n", "import { Img } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Image(...args) {\n const { props } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Img({ ...rest, className: cx('g-ui-image', className) });\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Icon(...args) {\n const { props, children } = splitPropsChildren(args, { size: 'md' });\n \n return Span(\n {\n ...props,\n className: cx(\n 'g-ui-icon',\n classVar('g-ui-icon-size-', props.size, 'md'),\n classVar('g-ui-icon-color-', props.color),\n props.className\n ),\n },\n ...children\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Progress(...args) {\n const { props } = splitPropsChildren(args, { value: 0, color: 'primary', size: 'md' });\n const { value, color, size, className, ...rest } = props;\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-progress',\n classVar('g-ui-progress-size-', size, 'md'),\n [value, (next) => {\n const pct = Math.max(0, Math.min(100, Number(next) || 0));\n const bucket = Math.round(pct / 5) * 5;\n return `g-ui-progress-${bucket}`;\n }],\n [color, (next) => {\n if (next) return `g-ui-progress-${next}`;\n return '';\n }],\n className\n ),\n },\n Div({ className: 'g-ui-progress-bar' })\n );\n}\n", "import { Div, after, state, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag, resolveBool, resolveValue } from '../utils.js';\n\nexport function Slider(...args) {\n const { props, rawProps } = splitPropsChildren(args, {\n size: 'md',\n min: 0,\n max: 100,\n step: 1,\n });\n const { onChange } = rawProps;\n const {\n value,\n marks,\n size,\n min,\n max,\n step,\n disabled,\n className,\n ...rest\n } = props;\n const currentState = state(resolveValue(value ?? min));\n after(value).change((next) => {\n if (next == null) return;\n currentState.set(resolveValue(next));\n });\n const getBounds = () => {\n const minValue = Number(resolveValue(min));\n const maxValue = Number(resolveValue(max));\n if (!Number.isFinite(minValue) || !Number.isFinite(maxValue)) {\n return { minValue: 0, maxValue: 100 };\n }\n return { minValue: Math.min(minValue, maxValue), maxValue: Math.max(minValue, maxValue) };\n };\n const getStep = () => {\n const stepValue = Number(resolveValue(step));\n if (Number.isFinite(stepValue) && stepValue > 0) return stepValue;\n return 1;\n };\n const setValue = (next) => {\n const { minValue, maxValue } = getBounds();\n const stepValue = getStep();\n const clamped = Math.max(minValue, Math.min(maxValue, Number(next)));\n const stepped = Math.round((clamped - minValue) / stepValue) * stepValue + minValue;\n if (stepped === currentState.get()) return;\n currentState.set(stepped);\n onChange?.(stepped);\n };\n const percent = after(currentState).compute((v) => {\n const { minValue, maxValue } = getBounds();\n const range = maxValue - minValue;\n if (range <= 0) return 0;\n const pct = ((Number(v ?? minValue) - minValue) / range) * 100;\n return Math.max(0, Math.min(100, pct));\n });\n const updateFromEvent = (ev, getRect) => {\n const rect = getRect?.();\n if (!rect || rect.width === 0) return;\n const x = Math.min(Math.max(ev.clientX - rect.left, 0), rect.width);\n const ratio = x / rect.width;\n const { minValue, maxValue } = getBounds();\n setValue(minValue + ratio * (maxValue - minValue));\n };\n const startDrag = (ev) => {\n if (resolveBool(disabled)) return;\n ev.preventDefault?.();\n const trackEl = ev.currentTarget;\n const getRect = () => trackEl.getBoundingClientRect();\n trackEl.setPointerCapture?.(ev.pointerId);\n updateFromEvent(ev, getRect);\n const handleMove = (moveEv) => updateFromEvent(moveEv, getRect);\n const handleUp = () => {\n trackEl.releasePointerCapture?.(ev.pointerId);\n window.removeEventListener('pointermove', handleMove);\n window.removeEventListener('pointerup', handleUp);\n };\n window.addEventListener('pointermove', handleMove);\n window.addEventListener('pointerup', handleUp);\n };\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-slider',\n classVar('g-ui-slider-size-', size, 'md'),\n classFlag('g-ui-slider-disabled', disabled),\n className\n ),\n },\n Div(\n { className: 'g-ui-slider-track', onPointerDown: startDrag },\n Div({\n className: 'g-ui-slider-bar',\n style: after(percent).compute((p) => ({ width: `${p}%` })),\n }),\n Div({\n className: 'g-ui-slider-thumb',\n style: after(percent).compute((p) => ({ left: `${p}%` })),\n })\n ),\n when(marks, () => Div(\n { className: 'g-ui-slider-marks' },\n marks.map((mark) => SliderMark({ mark, getBounds }))\n ))\n );\n}\n\nexport const SliderMark = ({ mark, getBounds }) => {\n const { minValue, maxValue } = getBounds();\n const range = maxValue - minValue;\n\n const value = mark.value ?? mark;\n const label = mark.label ?? String(mark.value) ?? value;\n\n const markValue = Number(value);\n let pct = 0;\n if (range > 0) pct = ((markValue - minValue) / range) * 100;\n return Div(\n {\n className: 'g-ui-slider-mark',\n style: { left: `${Math.max(0, Math.min(100, pct))}%` },\n },\n Div({ className: 'g-ui-slider-mark-label' }, label)\n );\n}\n", "import { Div, after } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Skeleton(...args) {\n const { props } = splitPropsChildren(args, { height: 'md', width: 'full' });\n const { height, width, className, ...rest } = props;\n const customStyle = after(height, width).compute(([h, w]) => {\n const style = {};\n if (!isNaN(h)) style.height = `${h}px`;\n if (!isNaN(w)) style.width = `${w}px`;\n return style;\n });\n\n return Div({\n ...rest,\n style: { width: customStyle.width, height: customStyle.height, ...(rest.style || {}) },\n className: cx(\n 'g-ui-skeleton',\n [height, (value) => `g-ui-skeleton-h-${value}`],\n [width, (value) => `g-ui-skeleton-w-${value}`],\n className\n ),\n });\n}\n", "import { Button, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Chip(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { size: 'md', variant: 'filled' });\n const { checked, size, variant, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(!!checked);\n after(checked).change((next) => {\n if (next == null) return;\n currentState.set(!!next);\n });\n const setChecked = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n return Button(\n {\n ...rest,\n type: 'button',\n className: cx(\n 'g-ui-chip',\n classVar('g-ui-chip-size-', size, 'md'),\n classVar('g-ui-chip-variant-', variant, 'filled'),\n after(currentState).compute((current) => {\n if (current) return 'g-ui-chip-active';\n return '';\n }),\n className\n ),\n onClick: () => setChecked(!currentState.get()),\n },\n children\n );\n}\n", "import { Div, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\n\nexport function SegmentedControl(...args) {\n const { props, rawProps } = splitPropsChildren(args, { data: [], size: 'sm' });\n const { value, data, size, scroll, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(value));\n after(value).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(resolved);\n });\n const setValue = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n return Div(\n { ...rest, className: cx(scroll && 'g-ui-segmented-scroll') },\n Div(\n { className: cx('g-ui-segmented', classVar('g-ui-segmented-size-', size, 'sm'), props.className ?? className) },\n data.map((item) =>\n Div(\n {\n className: cx(\n 'g-ui-segmented-item',\n after(currentState).compute((current) => {\n if (item.value === current) return 'g-ui-segmented-active';\n return '';\n })\n ),\n onClick: () => setValue(item.value),\n },\n item.label\n )\n )\n )\n );\n}\n", "import { Button, Div, state, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\n\nexport function Pagination(...args) {\n const { props, rawProps } = splitPropsChildren(args, { total: 1, size: 'md' });\n const { page, total, size, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(page ?? 1));\n after(page).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(resolved);\n });\n const setPage = (next) => {\n const totalValue = Number(resolveValue(total)) || 1;\n const clamped = Math.max(1, Math.min(totalValue, next));\n currentState.set(clamped);\n onChange?.(clamped);\n };\n const items = [];\n const totalValue = Number(resolveValue(total)) || 1;\n for (let i = 1; i <= totalValue; i += 1) items.push(i);\n return Div(\n {\n ...rest,\n className: cx('g-ui-pagination', classVar('g-ui-pagination-size-', size, 'md'), props.className ?? className),\n },\n Button(\n {\n className: 'g-ui-pagination-item',\n onClick: () => setPage((currentState.get?.() ?? currentState) - 1),\n disabled: after(currentState).compute((v) => v <= 1),\n },\n '<'\n ),\n items.map((i) =>\n Button(\n {\n className: after(currentState).compute((v) =>\n cx('g-ui-pagination-item', i === v && 'g-ui-pagination-item-active')\n ),\n onClick: () => setPage(i),\n },\n String(i)\n )\n ),\n Button(\n {\n className: 'g-ui-pagination-item',\n onClick: () => setPage((currentState.get?.() ?? currentState) + 1),\n disabled: after(currentState).compute((v) => v >= total),\n },\n '>'\n )\n );\n}\n", "import { Div, Input, Label, Span, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Radio(...args) {\n const { props } = splitPropsChildren(args, { size: 'md' });\n const { label, description, size, className, inputProps, ...rest } = props;\n const control = Label(\n { className: 'g-ui-radio-control' },\n Input({\n type: 'radio',\n className: cx('g-ui-radio-input', classVar('g-ui-radio-size-', size, 'md'), inputProps?.className),\n ...rest,\n }),\n when(label, () => Span({ className: 'g-ui-radio-label' }, label))\n );\n\n return Div(\n { className: cx('g-ui-radio', classVar('g-ui-radio-size-', size, 'md'), className) },\n control,\n when(description, () => Span({ className: 'g-ui-radio-description' }, description))\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function RadioGroup(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-stack g-ui-gap-sm', className) }, children);\n}\n", "import { Nav, Span } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Breadcrumbs(...args) {\n const { props, children } = splitPropsChildren(args, { separator: '/' });\n const { separator, className, ...rest } = props;\n const items = [];\n if (Array.isArray(children)) items.push(...children);\n else items.push(children);\n const filtered = items.filter(Boolean);\n const nodes = [];\n filtered.forEach((item, idx) => {\n nodes.push(item);\n if (idx < filtered.length - 1) {\n nodes.push(Span({ className: 'g-ui-breadcrumbs-separator' }, separator));\n }\n });\n return Nav({ ...rest, className: cx('g-ui-breadcrumbs', className) }, nodes);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Center(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-center', className) }, children);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Space(...args) {\n const { props } = splitPropsChildren(args, { size: 'md' });\n const { size, className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-space', [size, (value) => `g-ui-space-${value}`], className) });\n}\n", "import { Div, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Collapse(...args) {\n const { props, children } = splitPropsChildren(args);\n const { opened, className, ...rest } = props;\n return when(opened, () => Div({ ...rest, className: cx('g-ui-collapse', className) }, children));\n}\n", "import { Button } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function ActionIcon(...args) {\n const { props, children } = splitPropsChildren(args, { size: 'md', variant: 'filled' });\n const { size, variant, className, ...rest } = props;\n return Button(\n {\n ...rest,\n type: 'button',\n className: cx(\n 'g-ui-action-icon',\n classVar('g-ui-action-icon-size-', size, 'md'),\n classVar('g-ui-action-icon-', variant, 'filled'),\n className\n ),\n },\n children\n );\n}\n", "import { Div, when, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue } from '../utils.js';\n\nexport function Popover(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { position: 'left' });\n const { opened, position, content, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(opened) ?? false);\n after(opened).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(!!resolved);\n });\n\n const setOpen = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n\n return Div(\n { ...rest, className: cx('g-ui-popover', props.className ?? className) },\n Div({ onClick: () => setOpen(!currentState.get()) }, children),\n when(\n currentState,\n () =>\n Div(\n {\n className: cx(\n 'g-ui-popover-dropdown',\n position === 'right' && 'g-ui-popover-right',\n position === 'center' && 'g-ui-popover-center'\n ),\n },\n content\n )\n )\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function HoverCard(...args) {\n const { props, children } = splitPropsChildren(args, { position: 'left' });\n const { position, content, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-hover-card', className) },\n children,\n Div({\n className: cx(\n 'g-ui-hover-card-dropdown',\n [position, (value) => {\n if (value === 'right') return 'g-ui-hover-card-right';\n return '';\n }],\n [position, (value) => {\n if (value === 'center') return 'g-ui-hover-card-center';\n return '';\n }]\n ),\n }, content)\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Affix(...args) {\n const { props, children } = splitPropsChildren(args, { position: 'bottom-right' });\n const { position, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-affix', [position, (value) => `g-ui-affix-${value}`], className) },\n children\n );\n}\n", "import { Fieldset as HtmlFieldset, Legend, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Fieldset(...args) {\n const { props, children } = splitPropsChildren(args);\n const { legend, className, ...rest } = props;\n return HtmlFieldset(\n { ...rest, className: cx('g-ui-fieldset', className) },\n when(legend, () => Legend({ className: 'g-ui-legend' }, legend)),\n children\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function AppBar(...args) {\n const { props, children } = splitPropsChildren(args, { position: 'sticky' });\n const { position, className, ...rest } = props;\n return Div(\n {\n ...rest,\n className: cx('g-ui-appbar', classVar('g-ui-appbar-', position, 'sticky'), className),\n },\n children\n );\n}\n", "import { Div, portal, after, isSignal, isState, isStatePath, state, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue, resolveBool } from '../utils.js';\n\nexport function Sidebar(...args) {\n const { props, children } = splitPropsChildren(args, {\n position: 'left',\n size: 'md',\n blur: true,\n fixed: false,\n minWidth: 'button',\n });\n \n return when(props.fixed,\n () => FixedSidebar(props, children), \n () => DrawerSidebar(props, children)\n );\n}\n\nconst DrawerSidebar = (props, children)=>{\n const {\n open,\n onClose,\n position,\n size,\n blur,\n fixed,\n minWidth,\n className,\n ...rest\n } = props;\n const mounted = state(false);\n const openState = state(false);\n const transitionMs = 220;\n \n const applyOpen = (next) => {\n if (next) {\n mounted.set(true);\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(() => openState.set(true));\n } else {\n setTimeout(() => openState.set(true), 0);\n }\n return;\n }\n openState.set(false);\n setTimeout(() => mounted.set(false), transitionMs);\n };\n\n applyOpen(!!open.get());\n after(open).change((next) => applyOpen(!!next));\n\n const overlayClass = after(openState, blur).compute((values) => {\n const [open, blur] = values;\n \n return cx(\n 'g-ui-sidebar-overlay',\n open && 'g-ui-sidebar-overlay-open',\n !blur && 'g-ui-sidebar-overlay-noblur'\n )\n });\n\n const drawerClass = after(\n size,\n position,\n openState,\n className\n ).compute((values) => {\n const [size, position, open, className] = values;\n const positionClass = position === 'right'\n ? 'g-ui-sidebar-drawer-right g-ui-sidebar-position-right'\n : 'g-ui-sidebar-drawer-left';\n return cx(\n 'g-ui-sidebar',\n 'g-ui-sidebar-drawer',\n `g-ui-sidebar-size-${size}`,\n positionClass,\n open && 'g-ui-sidebar-drawer-open',\n resolveValue(className)\n )\n });\n\n return when(mounted, () =>\n portal(\n Div({ className: overlayClass, onClick: onClose },\n Div({ className: drawerClass, onClick: (ev) => ev.stopPropagation() },\n children\n )\n )\n )\n )\n}\n\nconst FixedSidebar = (props, children)=>{\n const {\n open,\n position,\n size,\n minWidth,\n className,\n ...rest\n } = props;\n \n const classNameComposition = after(\n size,\n position,\n open,\n minWidth,\n className,\n ).compute((values)=>{\n const [size, position, open, minWidth, className] = values;\n \n const minWidthValue = minWidth || 'button';\n let minWidthClass = null;\n if (minWidthValue === 'button') minWidthClass = 'g-ui-sidebar-min-button';\n else if (minWidthValue === 'xs') minWidthClass = 'g-ui-sidebar-min-xs';\n else if (minWidthValue === 'sm') minWidthClass = 'g-ui-sidebar-min-sm';\n else if (minWidthValue === 'md') minWidthClass = 'g-ui-sidebar-min-md';\n\n const classNameString = cx(\n 'g-ui-sidebar g-ui-sidebar-fixed',\n `g-ui-sidebar-size-${size||'md'}`,\n minWidthClass,\n open && 'g-ui-sidebar-fixed-open',\n className\n );\n return classNameString;\n });\n \n return Div(\n {\n ...rest,\n className: classNameComposition,\n },\n children\n );\n}", "import { Div, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Timeline(...args) {\n const { props } = splitPropsChildren(args, { items: [] });\n const { items, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-timeline', className) },\n items.map((item) =>\n Div(\n { className: 'g-ui-timeline-item' },\n Div({ className: 'g-ui-timeline-dot' }),\n Div(\n { className: 'g-ui-timeline-content' },\n when(item.title, () => Div({ className: 'g-ui-timeline-title' }, item.title)),\n when(item.description, () => Div({ className: 'g-ui-timeline-desc' }, item.description)),\n item.content\n )\n )\n )\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Stepper(...args) {\n const { props } = splitPropsChildren(args, { active: 0, items: [] });\n const { active, items, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-stepper', className) },\n items.map((item, idx) =>\n Div(\n { className: cx('g-ui-stepper-item', [active, (value) => {\n if (idx === value) return 'g-ui-stepper-active';\n return '';\n }]) },\n Div({ className: 'g-ui-stepper-index' }, String(idx + 1)),\n Div({ className: 'g-ui-stepper-label' }, item.label)\n )\n )\n );\n}\n", "import { Span, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\n\nexport function Rating(...args) {\n const { props, rawProps } = splitPropsChildren(args, { value: 0, max: 5, size: 'md' });\n const { value, max, size, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(value));\n after(value).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(resolved);\n });\n const setValue = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n const items = [];\n const maxValue = Number(resolveValue(max)) || 0;\n for (let i = 1; i <= maxValue; i += 1) items.push(i);\n return Span(\n {\n ...rest,\n className: cx('g-ui-rating', classVar('g-ui-rating-size-', size, 'md'), props.className ?? className),\n },\n items.map((i) =>\n Span(\n {\n className: cx(\n 'g-ui-rating-item',\n after(currentState).compute((current) => {\n if (i <= current) return 'g-ui-rating-item-active';\n return '';\n })\n ),\n onClick: () => setValue(i),\n },\n '\u2605'\n )\n )\n );\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Tag(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Span({ ...rest, className: cx('g-ui-tag', className) }, children);\n}\n", "import { Button, Div, state, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue, classVar } from '../utils.js';\nimport { forwardSvg, backwardSvg } from '../theme/icons.js';\nimport { ActionIcon } from './ActionIcon.js';\nimport { Icon } from './Icon.js';\n\nconst weekDays = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n\nexport function Calendar(...args) {\n const { props, rawProps } = splitPropsChildren(args, { size: 'md' });\n const { value, className, size, ...rest } = props;\n const { onChange } = rawProps;\n const resolveDate = (next) => {\n const resolved = resolveValue(next);\n if (resolved instanceof Date) return resolved;\n if (resolved == null) return null;\n const parsed = new Date(resolved);\n if (Number.isNaN(parsed.getTime())) return null;\n return parsed;\n };\n const currentState = state(resolveDate(value) ?? new Date());\n const viewState = state(new Date(currentState.get()));\n\n after(value).change((next) => {\n const resolved = resolveDate(next);\n if (resolved == null) return;\n currentState.set(resolved);\n viewState.set(new Date(resolved));\n });\n\n const createDate = (year, month, day) => {\n const maxDay = new Date(year, month + 1, 0).getDate();\n return new Date(year, month, Math.min(day, maxDay));\n };\n\n const setDate = (day) => {\n const current = viewState.get();\n const next = createDate(current.getFullYear(), current.getMonth(), day);\n currentState.set(next);\n viewState.set(next);\n onChange?.(next);\n };\n\n const shiftMonth = (delta) => {\n const current = viewState.get();\n const next = createDate(current.getFullYear(), current.getMonth() + delta, current.getDate());\n viewState.set(next);\n };\n\n const shiftYear = (delta) => {\n const current = viewState.get();\n const next = createDate(current.getFullYear() + delta, current.getMonth(), current.getDate());\n viewState.set(next);\n };\n\n const monthLabel = after(viewState).compute((current) => current.toLocaleString('default', { month: 'long' }));\n const yearLabel = after(viewState).compute((current) => String(current.getFullYear()));\n const gridCells = after(viewState, currentState).compute(([current, selected]) => {\n const year = current.getFullYear();\n const month = current.getMonth();\n const first = new Date(year, month, 1);\n const start = first.getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const cells = [];\n for (let i = 0; i < start; i += 1) cells.push({ muted: true, label: '' });\n for (let d = 1; d <= daysInMonth; d += 1) cells.push({ label: d });\n return [\n ...weekDays.map((d) => Div({ className: 'g-ui-calendar-cell g-ui-calendar-cell-muted' }, d)),\n ...cells.map((c) =>\n Div(\n {\n className: cx(\n 'g-ui-calendar-cell',\n c.muted && 'g-ui-calendar-cell-muted',\n c.label &&\n selected.getFullYear() === year &&\n selected.getMonth() === month &&\n c.label === selected.getDate() &&\n 'g-ui-calendar-cell-active'\n ),\n onClick: () => c.label && setDate(c.label),\n },\n c.label\n )\n ),\n ];\n });\n\n return Div(\n { ...rest, className: cx('g-ui-calendar', className, classVar('g-ui-calendar-size-', size, 'md')) },\n Div(\n { className: 'g-ui-calendar-header' },\n ActionIcon(\n { size: 'xs', variant: 'subtle', className: 'g-ui-calendar-nav', onClick: () => shiftMonth(-1) },\n Icon({ size: 'sm', className: 'g-ui-calendar-nav-icon', innerHTML: backwardSvg })\n ),\n Div(\n { className: 'g-ui-calendar-title-group' },\n Button({ type: 'button', className: 'g-ui-calendar-title-button', onClick: () => shiftMonth(1) }, monthLabel),\n Button({ type: 'button', className: 'g-ui-calendar-title-button', onClick: () => shiftYear(1) }, yearLabel)\n ),\n ActionIcon(\n { size: 'xs', variant: 'subtle', className: 'g-ui-calendar-nav', onClick: () => shiftMonth(1) },\n Icon({ size: 'sm', className: 'g-ui-calendar-nav-icon', innerHTML: forwardSvg })\n )\n ),\n Div({ className: 'g-ui-calendar-grid' }, gridCells)\n );\n}\n", "import { Div, Span, Input, when, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\nimport { checkedSvg, closeSvg } from '../theme/icons.js';\n\nexport function MultiSelect(...args) {\n const { props, rawProps } = splitPropsChildren(args, { data: [], size: 'md', searchable: true });\n const { value, data, size, className, placeholder, searchable, ...rest } = props;\n const { onChange, onSearchChange } = rawProps;\n const currentState = state(resolveValue(value) ?? []);\n const searchState = state('');\n const openState = state(false);\n const rootNode = state(null);\n\n const normalizeData = (items) => {\n const resolved = resolveValue(items) ?? [];\n return resolved.map((item) => {\n if (typeof item === 'string') return { value: item, label: item };\n if (item && typeof item === 'object') return item;\n return { value: String(item), label: String(item) };\n });\n };\n\n after(value).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(resolved);\n });\n let outsideCleanup = null;\n after(openState).change((next) => {\n if (outsideCleanup) {\n outsideCleanup();\n outsideCleanup = null;\n }\n if (!next) return;\n const handler = (ev) => {\n const root = rootNode.get();\n if (!root) return;\n if (root.contains(ev.target)) return;\n openState.set(false);\n };\n document.addEventListener('mousedown', handler);\n outsideCleanup = () => document.removeEventListener('mousedown', handler);\n });\n after(searchState).change((next) => {\n onSearchChange?.(next);\n });\n\n const toggle = (val) => {\n const selected = currentState.get() ?? [];\n const next = selected.includes(val)\n ? selected.filter((v) => v !== val)\n : selected.concat(val);\n currentState.set(next);\n onChange?.(next);\n };\n\n const normalizedData = after(data).compute((nextData) => normalizeData(nextData));\n const filteredItems = after(normalizedData, searchState).compute(([items, query]) => {\n const q = String(resolveValue(query) ?? '').toLowerCase().trim();\n if (!q) return items;\n return items.filter((item) => String(item.label ?? '').toLowerCase().includes(q));\n });\n const isEmpty = after(currentState, searchState).compute(([nextSelected, query]) => {\n const list = resolveValue(nextSelected) ?? [];\n const q = String(resolveValue(query) ?? '');\n return (!list.length) && !q;\n });\n const isSearchable = after(searchable).compute((next) => !!next);\n\n return Div(\n { ...rest, node: rootNode, className: cx('g-ui-select-multi-root', className) },\n Div(\n {\n className: cx('g-ui-select-multi', classVar('g-ui-select-multi-size-', size, 'md')),\n onClick: () => openState.set(true),\n },\n after(normalizedData, currentState).compute(([items, current]) => {\n const list = resolveValue(current) ?? [];\n return list.map((val) => {\n const match = (items ?? []).find((entry) => entry.value === val);\n const label = match?.label ?? val;\n return Span(\n {\n className: 'g-ui-select-tag',\n },\n Span(\n {\n className: 'g-ui-select-tag-label',\n onClick: (ev) => {\n ev?.stopPropagation?.();\n },\n },\n label\n ),\n Span({\n className: 'g-ui-select-tag-remove',\n innerHTML: closeSvg,\n onClick: (ev) => {\n ev?.stopPropagation?.();\n toggle(val);\n },\n })\n );\n });\n }),\n when(isEmpty, () => Span({ className: 'g-ui-select-multi-placeholder' }, placeholder ?? 'Select...')),\n when(isSearchable, () =>\n Input({\n className: 'g-ui-select-multi-input',\n value: searchState,\n onInput: (ev) => searchState.set(ev.target?.value ?? ''),\n onFocus: () => openState.set(true),\n })\n )\n ),\n when(openState, () =>\n Div(\n { className: 'g-ui-select-dropdown' },\n after(filteredItems).compute((items) => {\n if (!items.length) {\n return Div({ className: 'g-ui-select-item' }, 'Nothing found');\n }\n return items.map((item) =>\n Div(\n {\n className: cx(\n 'g-ui-select-item',\n item.disabled && 'g-ui-select-item-disabled',\n after(currentState).compute((current) => {\n const list = resolveValue(current) ?? [];\n return list.includes(item.value) ? 'g-ui-select-item-active' : '';\n })\n ),\n onClick: () => {\n if (item.disabled) return;\n toggle(item.value);\n },\n },\n Span({\n className: 'g-ui-select-item-check',\n innerHTML: after(currentState).compute((current) => {\n const list = resolveValue(current) ?? [];\n return list.includes(item.value) ? checkedSvg : '';\n }),\n }),\n Span({ className: 'g-ui-select-item-label' }, item.label)\n )\n );\n })\n )\n )\n );\n}\n", "import { Div, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function ToastStack(...args) {\n const { props } = splitPropsChildren(args, { items: [] });\n const { items, className, onClose, timeout, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-toast-stack', className) },\n items.map((item) =>\n Div(\n { className: cx('g-ui-toast', [timeout, 'g-ui-toast-auto']) },\n Div(\n { className: 'g-ui-toast-row' },\n when(item.title, () => Div({ className: 'g-ui-toast-title' }, item.title)),\n when(onClose, () => Div({ className: 'g-ui-toast-close', onClick: () => onClose(item) }, '\u00D7'))\n ),\n item.message\n )\n )\n );\n}\n", "import { Calendar } from './Calendar.js';\nimport { splitPropsChildren } from '../utils.js';\n\nexport function DatePicker(...args) {\n const { props } = splitPropsChildren(args);\n return Calendar(props);\n}\n", "import { Div, when, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\nimport { Notification } from './Notification.js';\n\nexport function Notifications(...args) {\n const { props, rawProps } = splitPropsChildren(args, { items: [], position: 'top-right' });\n const { items, position, className, ...rest } = props;\n const { onRemove } = rawProps;\n const timers = new Map();\n\n const getId = (item, index) => item?.id ?? item?.key ?? index;\n\n const notifications = after(items).compute((nextItems) => {\n const list = resolveValue(nextItems) ?? [];\n const active = new Set();\n list.forEach((item, index) => {\n const id = getId(item, index);\n active.add(id);\n if (item?.autoClose && !timers.has(id)) {\n const timeout = setTimeout(() => {\n timers.delete(id);\n onRemove?.(item);\n }, item.autoClose);\n timers.set(id, timeout);\n }\n });\n for (const [id, handle] of timers.entries()) {\n if (!active.has(id)) {\n clearTimeout(handle);\n timers.delete(id);\n }\n }\n return list.map((item, index) =>\n Notification(\n {\n key: getId(item, index),\n title: item.title,\n color: item.color,\n icon: item.icon,\n loading: item.loading,\n withCloseButton: item.withCloseButton,\n withBorder: item.withBorder,\n onClose: () => {\n item.onClose?.();\n onRemove?.(item);\n },\n },\n item.message ?? item.body ?? item.content ?? item.text\n )\n );\n });\n return Div(\n {\n ...rest,\n className: cx('g-ui-notifications', classVar('g-ui-notifications-position-', position, 'top-right'), className),\n },\n notifications\n );\n}\n", "import { Div, after, state, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag, resolveBool, resolveValue } from '../utils.js';\nimport { SliderMark } from './Slider.js';\n\nexport function RangeSlider(...args) {\n const { props, rawProps } = splitPropsChildren(args, { min: 0, max: 100, step: 1, size: 'md' });\n const { value, marks, min, max, step, size, disabled, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(value ?? [min, max]));\n const getBounds = () => {\n const minValue = Number(resolveValue(min));\n const maxValue = Number(resolveValue(max));\n if (!Number.isFinite(minValue) || !Number.isFinite(maxValue)) {\n return { minValue: 0, maxValue: 100 };\n }\n return { minValue: Math.min(minValue, maxValue), maxValue: Math.max(minValue, maxValue) };\n };\n const getStep = () => {\n const stepValue = Number(resolveValue(step));\n if (Number.isFinite(stepValue) && stepValue > 0) return stepValue;\n return 1;\n };\n const normalize = (vals) => {\n const { minValue, maxValue } = getBounds();\n const stepValue = getStep();\n let list = [minValue, maxValue];\n if (Array.isArray(vals)) list = vals;\n const first = Math.max(minValue, Math.min(maxValue, Number(list[0])));\n const second = Math.max(minValue, Math.min(maxValue, Number(list[1])));\n const low = Math.round(Math.min(first, second) / stepValue) * stepValue;\n const high = Math.round(Math.max(first, second) / stepValue) * stepValue;\n return [low, high];\n };\n after(value).change((next) => {\n if (next == null) return;\n currentState.set(normalize(next));\n });\n const setValue = (next) => {\n const normalized = normalize(next);\n if (\n normalized?.[0] === currentState.get()?.[0] &&\n normalized?.[1] === currentState.get()?.[1]\n ) {\n return;\n }\n currentState.set(normalized);\n onChange?.(normalized);\n };\n const percent = after(currentState).compute((vals) => {\n const { minValue, maxValue } = getBounds();\n const range = maxValue - minValue;\n const [low, high] = normalize(vals);\n if (range <= 0) return { lowPct: 0, highPct: 0 };\n const lowPct = ((low - minValue) / range) * 100;\n const highPct = ((high - minValue) / range) * 100;\n return {\n lowPct: Math.max(0, Math.min(100, lowPct)),\n highPct: Math.max(0, Math.min(100, highPct)),\n };\n });\n const updateFromEvent = (ev, getRect, thumb) => {\n const rect = getRect?.();\n if (!rect || rect.width === 0) return;\n const x = Math.min(Math.max(ev.clientX - rect.left, 0), rect.width);\n const ratio = x / rect.width;\n const { minValue, maxValue } = getBounds();\n const nextValue = minValue + ratio * (maxValue - minValue);\n let current = currentState;\n if (typeof currentState.get === 'function') current = currentState.get();\n const [low, high] = normalize(current);\n if (thumb === 'low') setValue([nextValue, high]);\n else setValue([low, nextValue]);\n };\n const startDrag = (ev, forcedThumb, trackEl) => {\n if (resolveBool(disabled)) return;\n ev.preventDefault?.();\n const track = trackEl || ev.currentTarget;\n const getRect = () => track.getBoundingClientRect();\n const rect = getRect();\n let percentValue = percent;\n if (typeof percent.get === 'function') percentValue = percent.get();\n const { lowPct, highPct } = percentValue;\n const clickPct = ((ev.clientX - rect.left) / rect.width) * 100;\n let thumb = forcedThumb;\n if (!thumb) {\n const isLow = Math.abs(clickPct - lowPct) <= Math.abs(clickPct - highPct);\n thumb = 'high';\n if (isLow) thumb = 'low';\n }\n track.setPointerCapture?.(ev.pointerId);\n updateFromEvent(ev, getRect, thumb);\n const handleMove = (moveEv) => updateFromEvent(moveEv, getRect, thumb);\n const handleUp = () => {\n track.releasePointerCapture?.(ev.pointerId);\n window.removeEventListener('pointermove', handleMove);\n window.removeEventListener('pointerup', handleUp);\n };\n window.addEventListener('pointermove', handleMove);\n window.addEventListener('pointerup', handleUp);\n };\n\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-range-slider',\n classVar('g-ui-slider-size-', size, 'md'),\n classFlag('g-ui-slider-disabled', disabled),\n props.className ?? className\n ),\n },\n Div(\n { className: 'g-ui-slider-track', onPointerDown: (ev) => startDrag(ev) },\n Div({\n className: 'g-ui-slider-bar',\n style: after(percent).compute(({ lowPct, highPct }) => ({\n left: `${lowPct}%`,\n width: `${Math.max(0, highPct - lowPct)}%`,\n })),\n }),\n Div({\n className: 'g-ui-slider-thumb',\n style: after(percent).compute(({ lowPct }) => ({ left: `${lowPct}%` })),\n onPointerDown: (ev) => {\n ev.stopPropagation?.();\n startDrag(ev, 'low', ev.currentTarget.parentElement);\n },\n }),\n Div({\n className: 'g-ui-slider-thumb',\n style: after(percent).compute(({ highPct }) => ({ left: `${highPct}%` })),\n onPointerDown: (ev) => {\n ev.stopPropagation?.();\n startDrag(ev, 'high', ev.currentTarget.parentElement);\n },\n })\n ),\n when(marks, () => Div(\n { className: 'g-ui-slider-marks' },\n marks.map((mark) => SliderMark({ mark, getBounds }))\n ))\n );\n}\n", "import { state, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\nimport { Calendar } from './Calendar.js';\nimport { Popover } from './Popover.js';\nimport { TextInput } from './TextInput.js';\n\nexport function DateInput(...args) {\n const { props, rawProps } = splitPropsChildren(args, { size: 'md', format: { pattern: 'dddd-dd-dd' } });\n const {\n value,\n size,\n calendarSize,\n leftSection,\n rightSection,\n className,\n format,\n minDate,\n maxDate,\n ...rest\n } = props;\n const { onChange } = rawProps;\n\n const resolveDate = (next) => {\n const resolved = resolveValue(next);\n if (resolved instanceof Date) return resolved;\n if (resolved == null || resolved === '') return null;\n const parsed = new Date(resolved);\n if (Number.isNaN(parsed.getTime())) return null;\n return parsed;\n };\n const isSameDay = (left, right) =>\n left &&\n right &&\n left.getFullYear() === right.getFullYear() &&\n left.getMonth() === right.getMonth() &&\n left.getDate() === right.getDate();\n\n const formatDate = (date) => {\n if (!date) return '';\n const year = String(date.getFullYear()).padStart(4, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n };\n\n const parseDate = (text) => {\n const digits = String(text ?? '').replace(/\\D/g, '');\n if (digits.length < 8) return null;\n const year = Number(digits.slice(0, 4));\n const month = Number(digits.slice(4, 6));\n const day = Number(digits.slice(6, 8));\n if (!year || !month || !day) return null;\n const candidate = new Date(year, month - 1, day);\n if (\n candidate.getFullYear() !== year ||\n candidate.getMonth() !== month - 1 ||\n candidate.getDate() !== day\n ) {\n return null;\n }\n const min = resolveDate(minDate);\n if (min && candidate < min) return null;\n const max = resolveDate(maxDate);\n if (max && candidate > max) return null;\n return candidate;\n };\n\n const currentDate = state(resolveDate(value));\n const textValue = state(formatDate(currentDate.get()));\n const opened = state(false);\n\n after(value).change((next) => {\n if (value.get() == next) return;\n const resolved = resolveDate(next);\n if (resolved == null) {\n currentDate.set(null);\n textValue.set('');\n return;\n }\n currentDate.set(resolved);\n textValue.set(formatDate(resolved));\n });\n\n after(textValue).change((next) => {\n const parsed = parseDate(next);\n console.log('parsed', parsed);\n console.log('currentDate', currentDate.get());\n if (!parsed) return;\n if (isSameDay(parsed, currentDate.get())) return;\n currentDate.set(parsed);\n onChange?.(parsed);\n });\n\n const setDate = (next) => {\n if (!next) return;\n if (isSameDay(next, currentDate.get())) return;\n currentDate.set(next);\n textValue.set(formatDate(next));\n onChange?.(next);\n opened.set(false);\n };\n\n return Popover(\n {\n opened,\n onChange: (next) => opened.set(!!next),\n content: Calendar({ size: classVar('', calendarSize, 'xs'), value: currentDate, onChange: setDate }),\n className: 'g-ui-date-input-popover',\n },\n TextInput({\n ...rest,\n size,\n className: cx('g-ui-dateinput', className),\n leftSection,\n rightSection,\n type: 'text',\n inputMode: 'numeric',\n format: format,\n value: textValue,\n onChange: (next) => textValue.set(next),\n })\n );\n}\n", "import { Div, when, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue } from '../utils.js';\n\nexport function Popper(...args) {\n const { props, rawProps, children } = splitPropsChildren(args);\n const { opened, content, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(opened) ?? false);\n after(opened).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(!!resolved);\n });\n\n const setOpen = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n\n return Div(\n { ...rest, className: cx('g-ui-popper', className) },\n Div({ onClick: () => setOpen(!currentState.get()) }, children),\n when(currentState, () => Div({ className: 'g-ui-popper-dropdown' }, content))\n );\n}\n", "import { Button, after, when, state } from '@granularjs/core';\nimport { splitPropsChildren } from '../utils.js';\nimport { TextInput } from './TextInput.js';\n\nexport function PasswordInput(...args) {\n const { props, rawProps } = splitPropsChildren(args, { size: 'md' });\n const { size, className, rightSection, ...rest } = props;\n const { onChange } = rawProps;\n const visible = state(false);\n const inputType = after(visible).compute((next) => {\n if (next) return 'text';\n return 'password';\n });\n const computedRightSection = after(rightSection).compute((next) =>\n next ?? Button(\n { className: 'g-ui-password-toggle', onClick: () => visible.set(!visible.get()) },\n when(visible, () => 'Hide', () => 'Show')\n )\n );\n\n return TextInput({\n ...rest,\n size,\n className,\n onChange,\n rightSection: computedRightSection,\n type: inputType,\n });\n}\n", "import { Span, Div } from '@granularjs/core';\nimport { splitPropsChildren } from '../utils.js';\nimport { searchSvg } from '../theme/icons.js';\nimport { TextInput } from './TextInput.js';\n\nexport function SearchInput(...args) {\n const { props } = splitPropsChildren(args, { size: 'md' });\n const { size, className, ...rest } = props;\n return TextInput({\n ...rest,\n size,\n className,\n leftSection: Div({ className: 'g-ui-search-input-left-section' , innerHTML: searchSvg }),\n type: 'text',\n inputMode: 'search',\n });\n}\n", "import { Button, after, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\nimport { state } from '@granularjs/core';\n\nexport function CopyButton(...args) {\n const { props, children } = splitPropsChildren(args, { value: '', timeout: 1500 });\n const { value, timeout, className, ...rest } = props;\n const copied = state(false);\n const buttonClass = after(copied).compute((next) =>\n cx('g-ui-copy-button', next && 'g-ui-copy-button-done', className)\n );\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(String(value));\n copied.set(true);\n setTimeout(() => copied.set(false), timeout);\n } catch {}\n };\n\n return Button(\n {\n ...rest,\n className: buttonClass,\n onClick: copy,\n type: 'button',\n },\n when(children?.length, () => children, () => when(copied, () => 'Copied', () => 'Copy'))\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function ProgressRing(...args) {\n const { props } = splitPropsChildren(args, { size: 'md' });\n const { size, className, ...rest } = props;\n return Div({\n ...rest,\n className: cx('g-ui-progress-ring', [size, (value) => `g-ui-progress-ring-size-${value}`], className),\n });\n}\n", "import { Div, Button, when } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Toast(...args) {\n const { props, children } = splitPropsChildren(args);\n const { title, onClose, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-toast', className) },\n Div(\n { className: 'g-ui-toast-row' },\n when(title, () => Div({ className: 'g-ui-toast-title' }, title)),\n when(onClose, () => Button({ className: 'g-ui-toast-close', onClick: onClose }, '\u00D7'))\n ),\n children\n );\n}\n", "import { Div, Span } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\nimport { state } from '@granularjs/core';\nimport { TextInput } from './TextInput.js';\n\nexport function SelectSearch(...args) {\n const { props, rawProps } = splitPropsChildren(args, { data: [] });\n const { data, className, ...rest } = props;\n const { onChange } = rawProps;\n const query = state('');\n\n const items = data.filter((item) =>\n String(item.label || '').toLowerCase().includes(String(query.get()).toLowerCase())\n );\n\n return Div(\n { ...rest, className: cx('g-ui-select-search', className) },\n TextInput({\n inputClassName: 'g-ui-select-search-input',\n placeholder: 'Search...',\n value: query,\n onInput: (ev) => query.set(ev?.target?.value ?? ''),\n }),\n Div(\n { className: 'g-ui-select-search-list' },\n items.map((item) =>\n Div(\n {\n className: 'g-ui-select-search-item',\n onClick: () => onChange?.(item.value),\n },\n item.label\n )\n )\n )\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function SwitchGroup(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-switch-group', className) }, children);\n}\n", "import { Div, state, after } from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue } from '../utils.js';\nimport { TextInput } from './TextInput.js';\n\nexport function RangePicker(...args) {\n const { props, rawProps } = splitPropsChildren(args, { size: 'md' });\n const { value, size, className, ...rest } = props;\n const { onChange } = rawProps;\n const currentState = state(resolveValue(value) ?? ['', '']);\n\n after(value).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n currentState.set(resolved);\n });\n\n const setValue = (next) => {\n currentState.set(next);\n onChange?.(next);\n };\n\n return Div(\n { ...rest, className: cx('g-ui-range-picker', props.className ?? className) },\n TextInput({\n size,\n type: 'text',\n inputMode: 'numeric',\n value: after(currentState).compute((current) => current?.[0] ?? ''),\n onInput: (ev) => {\n const current = currentState.get() ?? ['', ''];\n setValue([ev.target.value, current[1]]);\n },\n }),\n TextInput({\n size,\n type: 'text',\n inputMode: 'numeric',\n value: after(currentState).compute((current) => current?.[1] ?? ''),\n onInput: (ev) => {\n const current = currentState.get() ?? ['', ''];\n setValue([current[0], ev.target.value]);\n },\n })\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Flex(...args) {\n const { props, children } = splitPropsChildren(args, { align: 'center', direction: 'row' });\n const { direction, wrap, align, justify, gap, className, ...rest } = props;\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-flex',\n [direction, (value) => {\n if (value === 'column') return 'g-ui-flex-column';\n return 'g-ui-flex-row';\n }],\n [wrap, 'g-ui-flex-wrap'],\n [align, (value) => value && `g-ui-align-${value}`],\n [justify, (value) => value && `g-ui-justify-${value}`],\n [gap, (value) => value && `g-ui-gap-${value}`],\n className\n ),\n },\n children\n );\n}\n", "import { A, Div, Span, when, after, state } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag, resolveValue, toPx } from '../utils.js';\n\nexport function NavLink(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { variant: 'subtle', childrenOffset: 24 });\n const {\n label,\n description,\n leftSection,\n rightSection,\n active,\n disabled,\n variant,\n childrenOffset,\n opened,\n defaultOpened,\n className,\n padding,\n ...rest\n } = props;\n const { onClick, onChange } = rawProps;\n const hasChildren = children.length > 0;\n const openState = state(resolveValue(opened) ?? resolveValue(defaultOpened) ?? false);\n after(opened).change((next) => {\n const resolved = resolveValue(next);\n if (resolved == null) return;\n openState.set(!!resolved);\n });\n const childrenStyle = after(childrenOffset).compute((next) => ({\n paddingLeft: toPx(resolveValue(next ?? 24)) ?? '24px',\n }));\n\n const handleClick = (ev) => {\n if (resolveValue(disabled)) {\n ev?.preventDefault?.();\n return;\n }\n if (hasChildren) {\n const next = !openState.get();\n openState.set(next);\n onChange?.(next);\n }\n onClick?.(ev);\n };\n\n return Div(\n { className: cx('g-ui-navlink-root', className) },\n A(\n {\n ...rest,\n className: cx(\n 'g-ui-navlink',\n classVar('g-ui-navlink-variant-', variant, 'subtle'),\n classFlag('g-ui-navlink-active', active),\n classFlag('g-ui-navlink-disabled', disabled),\n classVar('g-ui-navlink-padding-', padding, 'md')\n ),\n onClick: handleClick,\n },\n when(leftSection, () => Span({ className: 'g-ui-navlink-section g-ui-navlink-left' }, leftSection)),\n Div(\n { className: 'g-ui-navlink-body' },\n when(label, () => Div({ className: 'g-ui-navlink-label' }, label)),\n when(description, () => Div({ className: 'g-ui-navlink-description' }, description))\n ),\n when(rightSection, () => Span({ className: 'g-ui-navlink-section g-ui-navlink-right' }, rightSection))\n ),\n hasChildren\n ? when(openState, () => Div({ className: 'g-ui-navlink-children', style: childrenStyle }, children))\n : null\n );\n}\n", "import { Div, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar } from '../utils.js';\n\nexport function Indicator(...args) {\n const { props, children } = splitPropsChildren(args, { show: true, position: 'top-right', color: 'danger', size: 'md' });\n const { show, position, color, size, className, ...rest } = props;\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-indicator',\n classVar('g-ui-indicator-position-', position, 'top-right'),\n classVar('g-ui-indicator-color-', color, 'danger'),\n classVar('g-ui-indicator-size-', size, 'md'),\n className\n ),\n },\n children,\n when(show, () => Div({ className: 'g-ui-indicator-badge' }))\n );\n}\n", "import { Span } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Burger(...args) {\n const { props } = splitPropsChildren(args);\n const { opened, className, ...rest } = props;\n return Span(\n { ...rest, className: cx('g-ui-burger', [opened, 'g-ui-burger-open'], className) },\n Span(''),\n Span(''),\n Span('')\n );\n}\n", "import { Div, when } from '@granularjs/core';\nimport { splitPropsChildren } from '../utils.js';\nimport { Loading } from './Loading.js';\n\nexport function LoadingOverlay(...args) {\n const { props } = splitPropsChildren(args);\n const { visible, ...rest } = props;\n return when(visible, () => Div({ ...rest, className: 'g-ui-loading-overlay' }, Loading({})));\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Grid(...args) {\n const { props, children } = splitPropsChildren(args, { gap: 'md' });\n const { className, gap, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-grid-system', [gap, (value) => `g-ui-gap-${value}`], className) }, children);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function Col(...args) {\n const { props, children } = splitPropsChildren(args, { span: 12 });\n const { span, className, ...rest } = props;\n return Div({ ...rest, className: cx([span, (value) => `g-ui-col-span-${value}`], className) }, children);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function ScrollArea(...args) {\n const { props, children } = splitPropsChildren(args, { size: 'md' });\n const { size, className, ...rest } = props;\n return Div(\n { ...rest, className: cx('g-ui-scroll-area', [size, (value) => `g-ui-scroll-area-${value}`], className) },\n children\n );\n}\n", "import { Div, Input, after, state, when, list } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, resolveValue } from '../utils.js';\n\nexport function PinInput(...args) {\n const { props, rawProps } = splitPropsChildren(args, {\n length: 4,\n size: 'md',\n type: 'alphanumeric',\n mask: false,\n placeholder: '\u25CB',\n disabled: false,\n error: false,\n oneTimeCode: false,\n });\n\n const {\n length,\n value,\n size,\n type,\n mask,\n placeholder,\n disabled,\n error,\n oneTimeCode,\n className,\n } = props;\n\n const { onChange, onComplete } = rawProps;\n\n const currentLength = state(resolveValue(length) ?? 4);\n const getLength = () => currentLength.get();\n\n after(length).change((next) => {\n const newLen = resolveValue(next) ?? 4;\n const oldLen = currentLength.get();\n if (newLen === oldLen) return;\n currentLength.set(newLen);\n const currentValues = currentState.get();\n const currentNodes = inputNodes.get();\n currentState.set(Array.from({ length: newLen }, (_, i) => currentValues[i] ?? ''));\n inputNodes.set(Array.from({ length: newLen }, (_, i) => currentNodes[i] ?? null));\n });\n\n const inputNodes = state(Array.from({ length: getLength() }, () => null));\n\n const currentState = state(\n Array.from({ length: getLength() }, (_, i) => {\n const initial = resolveValue(value);\n if (typeof initial === 'string') return initial[i] ?? '';\n if (Array.isArray(initial)) return initial[i] ?? '';\n return '';\n })\n );\n\n after(value).change((next) => {\n if (next == null) return;\n const len = getLength();\n if (typeof next === 'string') {\n currentState.set(Array.from({ length: len }, (_, i) => next[i] ?? ''));\n } else if (Array.isArray(next)) {\n currentState.set(Array.from({ length: len }, (_, i) => next[i] ?? ''));\n }\n });\n\n const getValueString = () => currentState.get().join('');\n\n const setValue = (next) => {\n currentState.set(next);\n const str = next.join('');\n onChange?.(str);\n if (next.every((v) => v !== '') && next.length === getLength()) {\n onComplete?.(str);\n }\n };\n\n const focusInput = (index) => {\n const len = getLength();\n const nodes = inputNodes.get();\n if (index >= 0 && index < len && nodes[index]) {\n nodes[index].focus();\n nodes[index].select();\n }\n };\n\n const getTypeRegex = () => {\n const t = resolveValue(type);\n if (t === 'number') return /^[0-9]$/;\n if (t instanceof RegExp) return t;\n return /^[a-zA-Z0-9]$/;\n };\n\n const handleInput = (idx, ev) => {\n const inputValue = ev.target.value;\n const regex = getTypeRegex();\n\n if (inputValue.length > 1) {\n handlePaste(idx, inputValue);\n return;\n }\n\n if (inputValue && !regex.test(inputValue)) {\n ev.target.value = currentState.get()[idx] ?? '';\n return;\n }\n\n const current = currentState.get().slice();\n current[idx] = inputValue;\n setValue(current);\n\n if (inputValue && idx < getLength() - 1) {\n focusInput(idx + 1);\n }\n };\n\n const handlePaste = (startIdx, pastedValue) => {\n const regex = getTypeRegex();\n const chars = pastedValue.split('').filter((c) => regex.test(c));\n const current = currentState.get().slice();\n const len = getLength();\n\n chars.forEach((char, i) => {\n const targetIdx = startIdx + i;\n if (targetIdx < len) {\n current[targetIdx] = char;\n }\n });\n\n setValue(current);\n\n const nextEmpty = current.findIndex((v, i) => i >= startIdx && v === '');\n if (nextEmpty >= 0) {\n focusInput(nextEmpty);\n } else {\n focusInput(Math.min(startIdx + chars.length, len - 1));\n }\n };\n\n const handleKeyDown = (idx, ev) => {\n if (ev.key === 'Backspace') {\n const current = currentState.get().slice();\n if (current[idx] === '' && idx > 0) {\n ev.preventDefault();\n current[idx - 1] = '';\n setValue(current);\n focusInput(idx - 1);\n } else if (current[idx] !== '') {\n current[idx] = '';\n setValue(current);\n }\n } else if (ev.key === 'ArrowLeft' && idx > 0) {\n ev.preventDefault();\n focusInput(idx - 1);\n } else if (ev.key === 'ArrowRight' && idx < getLength() - 1) {\n ev.preventDefault();\n focusInput(idx + 1);\n }\n };\n\n const handleFocus = (idx, ev) => {\n ev.target.select();\n };\n\n const handleContainerClick = () => {\n const current = currentState.get();\n const firstEmpty = current.findIndex((v) => v === '');\n if (firstEmpty >= 0) {\n focusInput(firstEmpty);\n } else {\n focusInput(current.length - 1);\n }\n };\n\n const inputType = after(mask).compute((m) => (resolveValue(m) ? 'password' : 'text'));\n const inputMode = after(type).compute((t) => (resolveValue(t) === 'number' ? 'numeric' : 'text'));\n const autoComplete = after(oneTimeCode).compute((o) => (resolveValue(o) ? 'one-time-code' : 'off'));\n const isDisabled = after(disabled).compute((d) => !!resolveValue(d));\n const hasError = after(error).compute((e) => !!resolveValue(e));\n\n const indices = after(currentLength).compute((len) =>\n Array.from({ length: len }, (_, i) => i)\n );\n\n const renderInput = (idx) =>\n Input({\n className: cx(\n 'g-ui-pin-input-field',\n when(hasError, () => 'g-ui-pin-input-error')\n ),\n type: inputType,\n inputMode,\n autocomplete: autoComplete,\n maxLength: 2,\n placeholder: when(isDisabled, () => '', () => placeholder),\n disabled: isDisabled,\n value: after(currentState, idx).compute(([values, i]) => values[i] ?? ''),\n node: inputNodes[idx.get()],\n onInput: (ev) => handleInput(idx.get(), ev),\n onChange: (ev) => handleInput(idx.get(), ev),\n onKeyDown: (ev) => handleKeyDown(idx.get(), ev),\n onFocus: (ev) => handleFocus(idx.get(), ev),\n });\n\n return Div(\n {\n className: cx(\n 'g-ui-pin-input',\n classVar('g-ui-input-size-', size, 'md'),\n className\n ),\n onClick: handleContainerClick,\n },\n Div(\n { className: 'g-ui-pin-input-wrapper' },\n list(indices, renderInput)\n )\n );\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function CheckboxGroup(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-checkbox-group', className) }, children);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function AvatarGroup(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-avatar-group', className) }, children);\n}\n", "import { Div } from '@granularjs/core';\nimport { cx, splitPropsChildren } from '../utils.js';\n\nexport function BadgeGroup(...args) {\n const { props, children } = splitPropsChildren(args);\n const { className, ...rest } = props;\n return Div({ ...rest, className: cx('g-ui-badge-group', className) }, children);\n}\n", "import { Div, Span, after, context } from '@granularjs/core';\nimport { splitPropsChildren, cx, classFlag } from '../utils.js';\n\nconst sizeContext = context([]);\nconst tableContext = context({ sort: null, onSort: null });\n\nexport function GridTable(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { sizes: [], sort: null, stickyHeader: false });\n const { className, sizes: sizesProp, sort: sortProp, stickyHeader: stickyProp, ...rest } = props;\n const { onSort } = rawProps;\n\n const sizes = sizeContext.scope(sizesProp.get());\n after(sizesProp).change(v => sizes.set(v));\n\n const table = tableContext.scope({ sort: sortProp.get(), onSort: onSort || null });\n after(sortProp).change(v => table.set().sort = v);\n\n return sizes.serve(table.serve(Div({\n className: cx(\n 'g-ui-grid-table',\n classFlag('g-ui-grid-table-sticky', stickyProp),\n className\n ),\n style: {\n gridTemplateColumns: after(sizes).compute(s =>\n Array.isArray(s) ? s.join(' ') : ''\n ),\n },\n ...rest,\n }, children)));\n}\n\nGridTable.GridRow = (...args) => {\n const { props, children } = splitPropsChildren(args, {});\n const { className, header, ...rest } = props;\n\n return Div(\n {\n className: cx(\n 'g-ui-grid-table-row',\n classFlag('g-ui-grid-table-row-header', header),\n className\n ),\n ...rest,\n },\n ...children\n );\n};\n\nGridTable.GridCell = function (...args) {\n const { props, rawProps, children } = splitPropsChildren(args, {});\n const { className, sort: _sort, ...rest } = props;\n const sortKey = rawProps.sort;\n\n if (sortKey) {\n const table = tableContext.state();\n\n const direction = after(table.sort).compute(s =>\n s?.key === sortKey ? s.direction : null\n );\n\n const handleSort = () => {\n const current = table.get().sort;\n let next;\n if (current?.key === sortKey) {\n next = current.direction === 'asc'\n ? { key: sortKey, direction: 'desc' }\n : null;\n } else {\n next = { key: sortKey, direction: 'asc' };\n }\n table.set().sort = next;\n const { onSort } = table.get();\n if (onSort) onSort(next);\n };\n\n return Div(\n {\n className: cx('g-ui-grid-table-cell', 'g-ui-grid-table-cell-sortable', className),\n onClick: handleSort,\n ...rest,\n },\n children,\n Span({ className: 'g-ui-grid-table-sort-icon' },\n after(direction).compute(d =>\n d === 'asc' ? ' \u2191' : d === 'desc' ? ' \u2193' : ''\n )\n )\n );\n }\n\n return Div(\n {\n className: cx('g-ui-grid-table-cell', className),\n ...rest,\n },\n children\n );\n};", "import { Button, Div, Span, when } from '@granularjs/core';\nimport { cx, splitPropsChildren, classVar, classFlag } from '../utils.js';\n\nexport function BottomBar(...args) {\n const { props, children } = splitPropsChildren(args, { grow: true });\n const { grow, className, ...rest } = props;\n\n return Div(\n {\n ...rest,\n className: cx(\n 'g-ui-bottombar',\n classFlag('g-ui-bottombar-grow', grow),\n className\n ),\n },\n children\n );\n}\n\nBottomBar.Action = function BottomBarAction(...args) {\n const { props, rawProps, children } = splitPropsChildren(args, { variant: 'subtle' });\n const { icon, label, active, disabled, variant, className, ...rest } = props;\n const { onClick } = rawProps;\n\n return Button(\n {\n ...rest,\n className: cx(\n 'g-ui-bottombar-action',\n classVar('g-ui-bottombar-action-variant-', variant, 'subtle'),\n classFlag('g-ui-bottombar-action-active', active),\n classFlag('g-ui-bottombar-action-disabled', disabled),\n className\n ),\n onClick,\n disabled,\n },\n when(icon, () => Span({ className: 'g-ui-bottombar-action-icon' }, icon)),\n when(label, () => Span({ className: 'g-ui-bottombar-action-label' }, label)),\n children\n );\n};\n", "import {\n Div,\n Button,\n state,\n after,\n when,\n portal,\n Input,\n Label,\n Span,\n} from '@granularjs/core';\nimport { cx, splitPropsChildren, resolveValue, classVar } from '../utils.js';\nimport { Modal } from './Modal.js';\nimport { ActionIcon } from './ActionIcon.js';\nimport { Icon } from './Icon.js';\nimport { TextInput } from './TextInput.js';\nimport { Textarea } from './Textarea.js';\nimport { Checkbox } from './Checkbox.js';\nimport {\n forwardSvg,\n backwardSvg,\n closeSvg,\n plusSvg,\n editSvg,\n deleteSvg,\n calendarTodaySvg,\n} from '../theme/icons.js';\n\nconst WEEKDAY_LABELS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst VIEW_OPTIONS = [\n { value: 'day', label: 'Day' },\n { value: 'week', label: 'Week' },\n { value: 'month', label: 'Month' },\n];\n\nfunction toDate(v) {\n if (v instanceof Date) return v;\n if (v == null) return null;\n const d = new Date(v);\n return Number.isNaN(d.getTime()) ? null : d;\n}\n\nfunction normalizeEvent(ev) {\n const start = toDate(ev.start);\n const end = toDate(ev.end);\n if (!start || !end) return null;\n return {\n ...ev,\n id: ev.id ?? `${start.getTime()}-${ev.title ?? 'event'}`,\n title: ev.title ?? '',\n start,\n end,\n allDay: !!ev.allDay,\n description: ev.description ?? '',\n location: ev.location ?? '',\n attendees: Array.isArray(ev.attendees) ? ev.attendees : [],\n color: ev.color ?? null,\n };\n}\n\nfunction getEventsInRange(events, rangeStart, rangeEnd) {\n const start = toDate(rangeStart).getTime();\n const end = toDate(rangeEnd).getTime();\n return events\n .map(normalizeEvent)\n .filter(Boolean)\n .filter((ev) => ev.end.getTime() > start && ev.start.getTime() < end);\n}\n\nfunction getEventsForDay(events, day) {\n const d = new Date(day);\n d.setHours(0, 0, 0, 0);\n const start = d.getTime();\n d.setHours(23, 59, 59, 999);\n const end = d.getTime();\n return getEventsInRange(events, start, end);\n}\n\nfunction weekStart(date, firstDayOfWeek) {\n const d = new Date(date);\n const day = d.getDay();\n const diff = (day - firstDayOfWeek + 7) % 7;\n d.setDate(d.getDate() - diff);\n d.setHours(0, 0, 0, 0);\n return d;\n}\n\nfunction formatTime(date, locale = 'default') {\n return date.toLocaleTimeString(locale, { hour: 'numeric', minute: '2-digit', hour12: true });\n}\n\nfunction formatDate(date, locale = 'default') {\n return date.toLocaleDateString(locale, { weekday: 'short', month: 'short', day: 'numeric' });\n}\n\nfunction formatMonthYear(date, locale = 'default') {\n return date.toLocaleDateString(locale, { month: 'long', year: 'numeric' });\n}\n\nfunction formatWeekRange(weekStartDate, locale = 'default') {\n const end = new Date(weekStartDate);\n end.setDate(end.getDate() + 6);\n return `${weekStartDate.toLocaleDateString(locale, { month: 'short', day: 'numeric' })} \u2013 ${end.toLocaleDateString(locale, { month: 'short', day: 'numeric', year: 'numeric' })}`;\n}\n\nfunction timeToPct(date, dayStart, dayEnd) {\n const d = new Date(date);\n const start = new Date(d);\n start.setHours(dayStart, 0, 0, 0);\n const end = new Date(d);\n end.setHours(dayEnd, 0, 0, 0);\n const total = (dayEnd - dayStart) * 60;\n const mins = (d.getTime() - start.getTime()) / 60000;\n return Math.max(0, Math.min(1, mins / total)) * 100;\n}\n\nfunction durationPct(start, end, dayStart, dayEnd) {\n const dayStartMs = new Date(start).setHours(dayStart, 0, 0, 0);\n const dayEndMs = new Date(start).setHours(dayEnd, 0, 0, 0);\n const total = (dayEnd - dayStart) * 60;\n const s = Math.max(start.getTime(), dayStartMs);\n const e = Math.min(end.getTime(), dayEndMs);\n const mins = (e - s) / 60000;\n const top = ((s - dayStartMs) / 60000 / total) * 100;\n const height = (mins / total) * 100;\n return { top, height };\n}\n\nexport function EventCalendar(...args) {\n const { props, rawProps } = splitPropsChildren(args, {\n defaultView: 'month',\n firstDayOfWeek: 0,\n locale: 'default',\n hourSlotDuration: 30,\n minTime: 6,\n maxTime: 22,\n eventCreationColorOptions: [],\n });\n const {\n events: eventsProp = [],\n defaultView,\n firstDayOfWeek,\n locale,\n hourSlotDuration,\n minTime,\n maxTime,\n eventCreationColorOptions,\n className,\n ...rest\n } = props;\n const {\n onCreateEventRequest,\n onViewEventRequest,\n onUpdateEventRequest,\n onRemoveEventRequest,\n eventCreationEmailLookup,\n eventCreationLocationsCallback,\n eventCreationCalendarsCallback,\n onSlotClick,\n onDateRangeChange,\n } = rawProps;\n\n const viewMode = state(resolveValue(defaultView) ?? 'month');\n const currentDate = state(new Date());\n const modalState = state(null);\n const selectedEvent = state(null);\n const createDraft = state({\n title: '',\n start: null,\n end: null,\n allDay: false,\n description: '',\n location: '',\n attendees: [],\n color: null,\n });\n\n const eventsList = after(eventsProp).compute((v) => (Array.isArray(v) ? v : []));\n const viewDate = currentDate.get();\n const weekStartDate = weekStart(viewDate, resolveValue(firstDayOfWeek) ?? 0);\n const dayStart = resolveValue(minTime) ?? 6;\n const dayEnd = resolveValue(maxTime) ?? 22;\n const slotDuration = resolveValue(hourSlotDuration) ?? 30;\n\n const goPrev = () => {\n const d = new Date(currentDate.get());\n if (viewMode.get() === 'month') d.setMonth(d.getMonth() - 1);\n else if (viewMode.get() === 'week') d.setDate(d.getDate() - 7);\n else d.setDate(d.getDate() - 1);\n currentDate.set(d);\n onDateRangeChange?.({ start: d, end: d, view: viewMode.get() });\n };\n\n const goNext = () => {\n const d = new Date(currentDate.get());\n if (viewMode.get() === 'month') d.setMonth(d.getMonth() + 1);\n else if (viewMode.get() === 'week') d.setDate(d.getDate() + 7);\n else d.setDate(d.getDate() + 1);\n currentDate.set(d);\n onDateRangeChange?.({ start: d, end: d, view: viewMode.get() });\n };\n\n const goToday = () => {\n const d = new Date();\n currentDate.set(d);\n onDateRangeChange?.({ start: d, end: d, view: viewMode.get() });\n };\n\n const openCreateModal = (start, end, allDay = false) => {\n const s = start ? new Date(start) : new Date(currentDate.get());\n const e = end ? new Date(end) : new Date(s.getTime() + 60 * 60 * 1000);\n if (allDay) {\n s.setHours(0, 0, 0, 0);\n e.setHours(23, 59, 59, 999);\n }\n createDraft.set({\n title: '',\n start: s,\n end: e,\n allDay,\n description: '',\n location: '',\n attendees: [],\n color: null,\n });\n modalState.set('create');\n };\n\n const openViewModal = (event) => {\n selectedEvent.set(normalizeEvent(event));\n modalState.set('view');\n onViewEventRequest?.(event);\n };\n\n const openEditModal = () => {\n const ev = selectedEvent.get();\n if (!ev) return;\n createDraft.set({\n title: ev.title,\n start: new Date(ev.start),\n end: new Date(ev.end),\n allDay: ev.allDay,\n description: ev.description ?? '',\n location: ev.location ?? '',\n attendees: [...(ev.attendees || [])],\n color: ev.color ?? null,\n });\n modalState.set('edit');\n };\n\n const closeModal = () => {\n modalState.set(null);\n selectedEvent.set(null);\n };\n\n const handleSlotClick = (date, hour, allDay) => {\n if (onSlotClick) {\n onSlotClick({ date, hour, allDay });\n return;\n }\n const start = new Date(date);\n if (allDay) {\n start.setHours(0, 0, 0, 0);\n const end = new Date(start);\n end.setHours(23, 59, 59, 999);\n openCreateModal(start, end, true);\n } else {\n start.setHours(hour, 0, 0, 0);\n const end = new Date(start.getTime() + slotDuration * 60 * 1000);\n openCreateModal(start, end, false);\n }\n };\n\n const handleCreateSubmit = () => {\n const draft = createDraft.get();\n if (!draft.start || !draft.end) return;\n onCreateEventRequest?.(\n {\n title: draft.title,\n start: draft.start,\n end: draft.end,\n allDay: draft.allDay,\n description: draft.description,\n location: draft.location,\n attendees: draft.attendees,\n color: draft.color,\n },\n () => {\n closeModal();\n }\n );\n };\n\n const handleUpdateSubmit = () => {\n const ev = selectedEvent.get();\n const draft = createDraft.get();\n if (!ev || !draft.start || !draft.end) return;\n onUpdateEventRequest?.(\n ev,\n {\n title: draft.title,\n start: draft.start,\n end: draft.end,\n allDay: draft.allDay,\n description: draft.description,\n location: draft.location,\n attendees: draft.attendees,\n color: draft.color,\n },\n () => closeModal()\n );\n };\n\n const handleRemoveRequest = () => {\n const ev = selectedEvent.get();\n if (!ev) return;\n onRemoveEventRequest?.(ev, () => closeModal());\n };\n\n const titleLabel = after(viewMode, currentDate).compute(([view, date]) => {\n if (view === 'month') return formatMonthYear(date, resolveValue(locale));\n if (view === 'week') return formatWeekRange(weekStart(date, resolveValue(firstDayOfWeek) ?? 0), resolveValue(locale));\n return formatDate(date, resolveValue(locale));\n });\n\n const header = Div(\n { className: 'g-ui-event-calendar-header' },\n Div(\n { className: 'g-ui-event-calendar-nav-group' },\n ActionIcon(\n { size: 'sm', variant: 'subtle', onClick: goPrev, className: 'g-ui-event-calendar-nav' },\n Icon({ size: 'sm', innerHTML: backwardSvg })\n ),\n ActionIcon(\n { size: 'sm', variant: 'subtle', onClick: goNext, className: 'g-ui-event-calendar-nav' },\n Icon({ size: 'sm', innerHTML: forwardSvg })\n ),\n Button(\n { type: 'button', variant: 'subtle', size: 'sm', className: 'g-ui-event-calendar-today', onClick: goToday },\n Icon({ size: 'sm', className: 'g-ui-event-calendar-today-icon', innerHTML: calendarTodaySvg }),\n 'Today'\n )\n ),\n Div({ className: 'g-ui-event-calendar-title' }, titleLabel),\n Div(\n { className: 'g-ui-event-calendar-actions' },\n VIEW_OPTIONS.map((opt) =>\n Div(\n {\n className: cx(\n 'g-ui-event-calendar-view-option',\n after(viewMode).compute((v) => (v === opt.value ? 'g-ui-event-calendar-view-option-active' : ''))\n ),\n onClick: () => {\n viewMode.set(opt.value);\n onDateRangeChange?.({ start: currentDate.get(), end: currentDate.get(), view: opt.value });\n },\n },\n opt.label\n )\n ),\n Button(\n {\n type: 'button',\n variant: 'filled',\n size: 'sm',\n className: 'g-ui-event-calendar-create-btn',\n onClick: () => openCreateModal(currentDate.get(), null, false),\n },\n Icon({ size: 'sm', innerHTML: plusSvg }),\n 'Create'\n )\n )\n );\n\n const monthGrid = after(currentDate, eventsList, firstDayOfWeek).compute(([date, events, firstDay]) => {\n const year = date.getFullYear();\n const month = date.getMonth();\n const first = new Date(year, month, 1);\n const startDow = (first.getDay() - (firstDay ?? 0) + 7) % 7;\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const prevMonthDays = new Date(year, month, 0).getDate();\n const rows = [];\n let dayCount = 1;\n let nextMonthDay = 1;\n const totalCells = Math.ceil((startDow + daysInMonth) / 7) * 7;\n const dayCells = [];\n for (let i = 0; i < totalCells; i += 1) {\n let day;\n let isCurrentMonth;\n let dateObj;\n if (i < startDow) {\n day = prevMonthDays - startDow + i + 1;\n dateObj = new Date(year, month - 1, day);\n isCurrentMonth = false;\n } else if (dayCount <= daysInMonth) {\n day = dayCount;\n dateObj = new Date(year, month, day);\n isCurrentMonth = true;\n dayCount += 1;\n } else {\n day = nextMonthDay;\n dateObj = new Date(year, month + 1, day);\n isCurrentMonth = false;\n nextMonthDay += 1;\n }\n const dayEvents = getEventsForDay(events, dateObj);\n const isToday =\n dateObj.getDate() === new Date().getDate() &&\n dateObj.getMonth() === new Date().getMonth() &&\n dateObj.getFullYear() === new Date().getFullYear();\n dayCells.push(\n Div(\n {\n key: dateObj.getTime(),\n className: cx(\n 'g-ui-event-calendar-month-cell',\n !isCurrentMonth && 'g-ui-event-calendar-month-cell-outside',\n isToday && 'g-ui-event-calendar-month-cell-today'\n ),\n },\n Div(\n {\n className: 'g-ui-event-calendar-month-cell-header',\n onClick: () => handleSlotClick(dateObj, 0, true),\n },\n Span({ className: 'g-ui-event-calendar-month-cell-day' }, dateObj.getDate())\n ),\n Div(\n { className: 'g-ui-event-calendar-month-cell-events' },\n dayEvents.slice(0, 3).map((ev) =>\n Div(\n {\n key: ev.id,\n className: 'g-ui-event-calendar-month-event',\n style: ev.color ? { borderLeftColor: ev.color, backgroundColor: `${ev.color}20` } : {},\n onClick: (e) => {\n e.stopPropagation();\n openViewModal(ev);\n },\n },\n ev.title || '(No title)'\n )\n ),\n when(dayEvents.length > 3, () =>\n Div(\n {\n className: 'g-ui-event-calendar-month-more',\n onClick: (e) => {\n e.stopPropagation();\n openViewModal(dayEvents[3]);\n },\n },\n `+${dayEvents.length - 3} more`\n )\n )\n )\n )\n );\n }\n return dayCells;\n });\n\n const monthView = Div(\n { className: 'g-ui-event-calendar-month' },\n Div(\n { className: 'g-ui-event-calendar-weekdays' },\n WEEKDAY_LABELS.map((label) => Div({ key: label, className: 'g-ui-event-calendar-weekday' }, label))\n ),\n Div({ className: 'g-ui-event-calendar-month-grid' }, monthGrid)\n );\n\n const timeSlots = [];\n for (let h = dayStart; h < dayEnd; h += 1) {\n for (let s = 0; s < 60; s += slotDuration) {\n timeSlots.push(h + s / 60);\n }\n }\n\n const weekDays = after(currentDate, firstDayOfWeek).compute(([date, firstDay]) => {\n const start = weekStart(date, firstDay ?? 0);\n const days = [];\n for (let i = 0; i < 7; i += 1) {\n const d = new Date(start);\n d.setDate(d.getDate() + i);\n days.push(d);\n }\n return days;\n });\n\n const weekView = Div(\n { className: 'g-ui-event-calendar-week' },\n after(weekDays).compute((days) =>\n Div(\n { className: 'g-ui-event-calendar-week-days' },\n Div({ className: 'g-ui-event-calendar-week-time-col' }, ''),\n (days || []).map((d) =>\n Div(\n { key: d.getTime(), className: 'g-ui-event-calendar-week-day-col' },\n Div({ className: 'g-ui-event-calendar-week-day-header' }, formatDate(d, resolveValue(locale)))\n )\n )\n )\n ),\n Div({ className: 'g-ui-event-calendar-week-body' },\n Div(\n { className: 'g-ui-event-calendar-week-time-col' },\n timeSlots.map((h) => {\n const hour = Math.floor(h);\n const min = (h - hour) * 60;\n const label = `${hour <= 12 ? hour : hour - 12}:${min === 0 ? '00' : min} ${hour < 12 ? 'AM' : 'PM'}`;\n return Div({ key: h, className: 'g-ui-event-calendar-week-slot-label' }, label);\n })\n ),\n after(weekDays, eventsList).compute(([days, events]) => {\n if (!days || !days.length) return null;\n const rangeStart = days[0];\n const rangeEnd = new Date(days[6]);\n rangeEnd.setHours(23, 59, 59, 999);\n const inRange = getEventsInRange(events, rangeStart, rangeEnd);\n return Div(\n { className: 'g-ui-event-calendar-week-grid-cols' },\n days.map((day) =>\n Div(\n { key: day.getTime(), className: 'g-ui-event-calendar-week-day-col g-ui-event-calendar-week-day-col-body' },\n timeSlots.map((h) =>\n Div({\n key: h,\n className: 'g-ui-event-calendar-week-slot',\n onClick: () => handleSlotClick(day, h, false),\n })\n ),\n inRange\n .filter(\n (ev) =>\n !ev.allDay &&\n ev.start.getDate() === day.getDate() &&\n ev.start.getMonth() === day.getMonth() &&\n ev.start.getFullYear() === day.getFullYear()\n )\n .map((ev) => {\n const { top, height } = durationPct(ev.start, ev.end, dayStart, dayEnd);\n return Div(\n {\n key: ev.id,\n className: 'g-ui-event-calendar-week-event',\n style: {\n top: `${top}%`,\n height: `${height}%`,\n borderLeftColor: ev.color || 'var(--g-ui-primary)',\n },\n onClick: (e) => {\n e.stopPropagation();\n openViewModal(ev);\n },\n },\n Div({ className: 'g-ui-event-calendar-week-event-title' }, ev.title || '(No title)'),\n when(!ev.allDay, () =>\n Span({ className: 'g-ui-event-calendar-week-event-time' }, `${formatTime(ev.start, resolveValue(locale))} \u2013 ${formatTime(ev.end, resolveValue(locale))}`)\n )\n );\n })\n )\n )\n );\n })\n )\n );\n\n const dayView = Div(\n { className: 'g-ui-event-calendar-day' },\n Div(\n { className: 'g-ui-event-calendar-day-body' },\n Div(\n { className: 'g-ui-event-calendar-day-time-col' },\n timeSlots.map((h) => {\n const hour = Math.floor(h);\n const min = (h - hour) * 60;\n const label = `${hour <= 12 ? hour : hour - 12}:${min === 0 ? '00' : min} ${hour < 12 ? 'AM' : 'PM'}`;\n return Div({ key: h, className: 'g-ui-event-calendar-day-slot-label' }, label);\n })\n ),\n Div(\n { className: 'g-ui-event-calendar-day-slots' },\n timeSlots.map((h) =>\n Div({\n key: h,\n className: 'g-ui-event-calendar-day-slot',\n onClick: () => handleSlotClick(currentDate.get(), h, false),\n })\n ),\n after(eventsList, currentDate).compute(([events, day]) => {\n if (!day) return [];\n const dayEvs = getEventsForDay(events, day).filter((e) => !e.allDay);\n return dayEvs.map((ev) => {\n const { top, height } = durationPct(ev.start, ev.end, dayStart, dayEnd);\n return Div(\n {\n key: ev.id,\n className: 'g-ui-event-calendar-day-event',\n style: {\n top: `${top}%`,\n height: `${height}%`,\n borderLeftColor: ev.color || 'var(--g-ui-primary)',\n },\n onClick: (e) => {\n e.stopPropagation();\n openViewModal(ev);\n },\n },\n Div({ className: 'g-ui-event-calendar-day-event-title' }, ev.title || '(No title)'),\n Span({ className: 'g-ui-event-calendar-day-event-time' }, `${formatTime(ev.start, resolveValue(locale))} \u2013 ${formatTime(ev.end, resolveValue(locale))}`)\n );\n });\n })\n )\n )\n );\n\n const createEditForm = (isEdit) => {\n const draft = createDraft.get();\n const today = new Date();\n const defaultStart = draft.start || today;\n const defaultEnd = draft.end || new Date(today.getTime() + 60 * 60 * 1000);\n const titleState = state(draft.title);\n const startDateState = state(defaultStart.toISOString().slice(0, 10));\n const startTimeState = state(\n !draft.allDay && defaultStart ? defaultStart.toTimeString().slice(0, 5) : '09:00'\n );\n const endDateState = state(defaultEnd.toISOString().slice(0, 10));\n const endTimeState = state(\n !draft.allDay && defaultEnd ? defaultEnd.toTimeString().slice(0, 5) : '10:00'\n );\n const allDayState = state(draft.allDay);\n const descState = state(draft.description);\n const locationState = state(draft.location);\n const attendeesState = state(draft.attendees || []);\n const emailLookupQuery = state('');\n const emailLookupResults = state([]);\n const locationOptions = state([]);\n const locationQuery = state('');\n const colorOptions = Array.isArray(eventCreationColorOptions) ? eventCreationColorOptions : [];\n const colorState = state(draft.color);\n\n const applyDraft = () => {\n const start = new Date(startDateState.get() + 'T' + (allDayState.get() ? '00:00:00' : startTimeState.get() + ':00'));\n const end = new Date(endDateState.get() + 'T' + (allDayState.get() ? '23:59:59' : endTimeState.get() + ':00'));\n createDraft.set({\n title: titleState.get(),\n start,\n end,\n allDay: allDayState.get(),\n description: descState.get(),\n location: locationState.get(),\n attendees: attendeesState.get(),\n color: colorState.get(),\n });\n };\n\n const doEmailLookup = (query) => {\n emailLookupQuery.set(query);\n if (!eventCreationEmailLookup || !query.trim()) {\n emailLookupResults.set([]);\n return;\n }\n Promise.resolve(eventCreationEmailLookup(query.trim()))\n .then((list) => emailLookupResults.set(Array.isArray(list) ? list : []))\n .catch(() => emailLookupResults.set([]));\n };\n\n const addAttendee = (item) => {\n const current = attendeesState.get();\n if (current.some((a) => (a.email || a.id) === (item.email || item.id))) return;\n attendeesState.set([...current, { id: item.id, email: item.email ?? item.label, label: item.label }]);\n emailLookupQuery.set('');\n emailLookupResults.set([]);\n };\n\n const removeAttendee = (index) => {\n const next = [...attendeesState.get()];\n next.splice(index, 1);\n attendeesState.set(next);\n };\n\n const loadLocations = () => {\n if (!eventCreationLocationsCallback) return;\n Promise.resolve(eventCreationLocationsCallback(locationQuery.get()))\n .then((list) => locationOptions.set(Array.isArray(list) ? list : []))\n .catch(() => locationOptions.set([]));\n };\n\n return Div(\n { className: 'g-ui-event-calendar-form' },\n Div(\n { className: 'g-ui-event-calendar-form-row' },\n TextInput({\n label: 'Title',\n placeholder: 'Event title',\n value: titleState,\n onInput: (ev) => titleState.set(ev?.target?.value ?? ''),\n })\n ),\n Div(\n { className: 'g-ui-event-calendar-form-row g-ui-event-calendar-form-row-inline' },\n Checkbox({\n label: 'All day',\n checked: allDayState,\n onChange: (v) => allDayState.set(v),\n })\n ),\n Div(\n { className: 'g-ui-event-calendar-form-row g-ui-event-calendar-form-row-inline' },\n Div({ className: 'g-ui-event-calendar-form-field' },\n Label({ className: 'g-ui-event-calendar-form-label' }, 'Start'),\n Input({\n type: 'date',\n className: 'g-ui-input g-ui-input-size-md',\n value: startDateState,\n onInput: (ev) => startDateState.set(ev?.target?.value ?? ''),\n }),\n when(!allDayState, () =>\n Input({\n type: 'time',\n className: 'g-ui-input g-ui-input-size-md',\n value: startTimeState,\n onInput: (ev) => startTimeState.set(ev?.target?.value ?? ''),\n })\n )\n ),\n Div({ className: 'g-ui-event-calendar-form-field' },\n Label({ className: 'g-ui-event-calendar-form-label' }, 'End'),\n Input({\n type: 'date',\n className: 'g-ui-input g-ui-input-size-md',\n value: endDateState,\n onInput: (ev) => endDateState.set(ev?.target?.value ?? ''),\n }),\n when(!allDayState, () =>\n Input({\n type: 'time',\n className: 'g-ui-input g-ui-input-size-md',\n value: endTimeState,\n onInput: (ev) => endTimeState.set(ev?.target?.value ?? ''),\n })\n )\n )\n ),\n when(eventCreationLocationsCallback, () =>\n Div(\n { className: 'g-ui-event-calendar-form-row' },\n Label({ className: 'g-ui-event-calendar-form-label' }, 'Location'),\n TextInput({\n placeholder: 'Search or type location',\n value: locationQuery,\n onInput: (ev) => {\n locationQuery.set(ev?.target?.value ?? '');\n loadLocations();\n },\n onFocus: loadLocations,\n }),\n when(after(locationOptions).compute((o) => o && o.length > 0), () =>\n Div(\n { className: 'g-ui-event-calendar-form-suggestions' },\n locationOptions.get().map((loc) =>\n Div(\n {\n key: loc.id ?? loc.label,\n className: 'g-ui-event-calendar-form-suggestion-item',\n onClick: () => {\n locationState.set(loc.label ?? loc.id);\n locationQuery.set('');\n locationOptions.set([]);\n },\n },\n loc.label ?? loc.id\n )\n )\n )\n ),\n when(after(locationState).compute((v) => !!v), () =>\n Span({ className: 'g-ui-event-calendar-form-chip' }, locationState)\n )\n )\n ),\n when(eventCreationEmailLookup, () =>\n Div(\n { className: 'g-ui-event-calendar-form-row' },\n Label({ className: 'g-ui-event-calendar-form-label' }, 'Add guests'),\n TextInput({\n placeholder: 'Type email to search',\n value: emailLookupQuery,\n onInput: (ev) => doEmailLookup(ev?.target?.value ?? ''),\n }),\n Div(\n { className: 'g-ui-event-calendar-form-chips' },\n attendeesState.get().map((a, i) =>\n Span(\n {\n key: (a.email || a.id) + i,\n className: 'g-ui-event-calendar-form-chip g-ui-event-calendar-form-chip-removable',\n onClick: () => removeAttendee(i),\n },\n a.label || a.email || a.id,\n ' \u00D7'\n )\n )\n ),\n when(after(emailLookupResults).compute((r) => r && r.length > 0), () =>\n Div(\n { className: 'g-ui-event-calendar-form-suggestions' },\n emailLookupResults.get().map((item) =>\n Div(\n {\n key: item.id ?? item.email,\n className: 'g-ui-event-calendar-form-suggestion-item',\n onClick: () => addAttendee(item),\n },\n item.label ?? item.email ?? item.id\n )\n )\n )\n )\n )\n ),\n Div(\n { className: 'g-ui-event-calendar-form-row' },\n Textarea({\n label: 'Description',\n placeholder: 'Add description',\n value: descState,\n onInput: (ev) => descState.set(ev?.target?.value ?? ''),\n })\n ),\n when(colorOptions.length > 0, () =>\n Div(\n { className: 'g-ui-event-calendar-form-row' },\n Label({ className: 'g-ui-event-calendar-form-label' }, 'Color'),\n Div(\n { className: 'g-ui-event-calendar-form-colors' },\n colorOptions.map((opt) =>\n Div(\n {\n key: opt.value ?? opt.id ?? opt,\n className: cx(\n 'g-ui-event-calendar-form-color-swatch',\n after(colorState).compute((c) => (c === (opt.value ?? opt.id ?? opt) ? 'g-ui-event-calendar-form-color-swatch-active' : ''))\n ),\n style: { backgroundColor: opt.color ?? opt.value ?? opt },\n onClick: () => colorState.set(opt.value ?? opt.id ?? opt),\n }\n )\n )\n )\n )\n ),\n Div(\n { className: 'g-ui-event-calendar-form-actions' },\n Button({ variant: 'subtle', onClick: closeModal }, 'Cancel'),\n Button(\n {\n variant: 'filled',\n onClick: () => {\n applyDraft();\n if (isEdit) handleUpdateSubmit();\n else handleCreateSubmit();\n },\n },\n isEdit ? 'Save' : 'Create'\n )\n )\n );\n };\n\n const viewModalContent = () => {\n const ev = selectedEvent.get();\n if (!ev) return null;\n return Div(\n { className: 'g-ui-event-calendar-view-modal' },\n Div({ className: 'g-ui-event-calendar-view-modal-title' }, ev.title || '(No title)'),\n Div(\n { className: 'g-ui-event-calendar-view-modal-meta' },\n ev.allDay\n ? Span({ className: 'g-ui-event-calendar-view-modal-date' }, formatDate(ev.start, resolveValue(locale)) + (ev.start.getTime() !== ev.end.getTime() ? ` \u2013 ${formatDate(ev.end, resolveValue(locale))}` : ''))\n : Span(\n { className: 'g-ui-event-calendar-view-modal-date' },\n `${formatDate(ev.start, resolveValue(locale))} \u00B7 ${formatTime(ev.start, resolveValue(locale))} \u2013 ${formatTime(ev.end, resolveValue(locale))}`\n )\n ),\n when(ev.location, () => Div({ className: 'g-ui-event-calendar-view-modal-field' }, 'Location: ', ev.location)),\n when(ev.description, () => Div({ className: 'g-ui-event-calendar-view-modal-field' }, ev.description)),\n when(ev.attendees?.length, () =>\n Div(\n { className: 'g-ui-event-calendar-view-modal-field' },\n 'Guests: ',\n ev.attendees.map((a) => a.label || a.email || a.id).join(', ')\n )\n ),\n Div(\n { className: 'g-ui-event-calendar-view-modal-actions' },\n Button({ variant: 'subtle', size: 'sm', onClick: openEditModal }, Icon({ size: 'sm', innerHTML: editSvg }), ' Edit'),\n Button(\n { variant: 'subtle', size: 'sm', onClick: handleRemoveRequest, className: 'g-ui-event-calendar-view-modal-delete' },\n Icon({ size: 'sm', innerHTML: deleteSvg }),\n ' Delete'\n ),\n Button({ variant: 'filled', size: 'sm', onClick: closeModal }, 'Close')\n )\n );\n };\n\n return Div(\n { ...rest, className: cx('g-ui-event-calendar', className) },\n header,\n when(\n viewMode,\n (v) => v === 'month',\n () => monthView\n ),\n when(\n viewMode,\n (v) => v === 'week',\n () => weekView\n ),\n when(\n viewMode,\n (v) => v === 'day',\n () => dayView\n ),\n when(\n modalState,\n (m) => m === 'create',\n () =>\n Modal(\n {\n opened: true,\n title: 'New event',\n size: 'lg',\n onClose: closeModal,\n },\n createEditForm(false)\n )\n ),\n when(\n modalState,\n (m) => m === 'view',\n () =>\n Modal(\n {\n opened: true,\n title: 'Event',\n size: 'md',\n onClose: closeModal,\n },\n viewModalContent()\n )\n ),\n when(\n modalState,\n (m) => m === 'edit',\n () =>\n Modal(\n {\n opened: true,\n title: 'Edit event',\n size: 'lg',\n onClose: closeModal,\n },\n createEditForm(true)\n )\n )\n );\n}\n", "import { state } from '@granularjs/core';\n\nexport function useDisclosure(initial = false) {\n const opened = state(!!initial);\n return [\n opened,\n {\n open: () => opened.set(true),\n close: () => opened.set(false),\n toggle: () => opened.set(!opened.get()),\n },\n ];\n}\n", "import { ensureStyles } from './theme/styles.js';\n\nensureStyles();\n\nexport { setThemeVars, setThemeMode } from './theme/theme.js';\nexport { cx } from './utils.js';\nexport { Button } from './components/Button.js';\nexport { Text } from './components/Text.js';\nexport { Title } from './components/Title.js';\nexport { Container } from './components/Container.js';\nexport { Stack } from './components/Stack.js';\nexport { Group } from './components/Group.js';\nexport { Card } from './components/Card.js';\nexport { Badge } from './components/Badge.js';\nexport { TextInput } from './components/TextInput.js';\nexport { Textarea } from './components/Textarea.js';\nexport { NumberInput } from './components/NumberInput.js';\nexport { Modal } from './components/Modal.js';\nexport { Loading } from './components/Loading.js';\nexport { Checkbox } from './components/Checkbox.js';\nexport { Switch } from './components/Switch.js';\nexport { Select } from './components/Select.js';\nexport { Tabs } from './components/Tabs.js';\nexport { Table } from './components/Table.js';\nexport { Accordion } from './components/Accordion.js';\nexport { Tooltip } from './components/Tooltip.js';\nexport { Menu } from './components/Menu.js';\nexport { Drawer } from './components/Drawer.js';\nexport { Notification } from './components/Notification.js';\nexport { Divider } from './components/Divider.js';\nexport { Paper } from './components/Paper.js';\nexport { Alert } from './components/Alert.js';\nexport { Avatar } from './components/Avatar.js';\nexport { Kbd } from './components/Kbd.js';\nexport { Code } from './components/Code.js';\nexport { Blockquote } from './components/Blockquote.js';\nexport { SimpleGrid } from './components/SimpleGrid.js';\nexport { List } from './components/List.js';\nexport { Anchor } from './components/Anchor.js';\nexport { Image } from './components/Image.js';\nexport { Icon } from './components/Icon.js';\nexport { Progress } from './components/Progress.js';\nexport { Slider } from './components/Slider.js';\nexport { Skeleton } from './components/Skeleton.js';\nexport { Chip } from './components/Chip.js';\nexport { SegmentedControl } from './components/SegmentedControl.js';\nexport { Pagination } from './components/Pagination.js';\nexport { Radio } from './components/Radio.js';\nexport { RadioGroup } from './components/RadioGroup.js';\nexport { Breadcrumbs } from './components/Breadcrumbs.js';\nexport { Center } from './components/Center.js';\nexport { Space } from './components/Space.js';\nexport { Collapse } from './components/Collapse.js';\nexport { ActionIcon } from './components/ActionIcon.js';\nexport { Popover } from './components/Popover.js';\nexport { HoverCard } from './components/HoverCard.js';\nexport { Affix } from './components/Affix.js';\nexport { Fieldset } from './components/Fieldset.js';\nexport { AppBar } from './components/AppBar.js';\nexport { Sidebar } from './components/Sidebar.js';\nexport { Timeline } from './components/Timeline.js';\nexport { Stepper } from './components/Stepper.js';\nexport { Rating } from './components/Rating.js';\nexport { Tag } from './components/Tag.js';\nexport { Calendar } from './components/Calendar.js';\nexport { MultiSelect } from './components/MultiSelect.js';\nexport { ToastStack } from './components/ToastStack.js';\nexport { DatePicker } from './components/DatePicker.js';\nexport { Notifications } from './components/Notifications.js';\nexport { RangeSlider } from './components/RangeSlider.js';\nexport { DateInput } from './components/DateInput.js';\nexport { NumberField } from './components/NumberField.js';\nexport { Popper } from './components/Popper.js';\nexport { PasswordInput } from './components/PasswordInput.js';\nexport { SearchInput } from './components/SearchInput.js';\nexport { CopyButton } from './components/CopyButton.js';\nexport { ProgressRing } from './components/ProgressRing.js';\nexport { Toast } from './components/Toast.js';\nexport { SelectSearch } from './components/SelectSearch.js';\nexport { SwitchGroup } from './components/SwitchGroup.js';\nexport { RangePicker } from './components/RangePicker.js';\nexport { Flex } from './components/Flex.js';\nexport { NavLink } from './components/NavLink.js';\nexport { Indicator } from './components/Indicator.js';\nexport { Burger } from './components/Burger.js';\nexport { LoadingOverlay } from './components/LoadingOverlay.js';\nexport { Grid } from './components/Grid.js';\nexport { Col } from './components/Col.js';\nexport { ScrollArea } from './components/ScrollArea.js';\nexport { PinInput } from './components/PinInput.js';\nexport { CheckboxGroup } from './components/CheckboxGroup.js';\nexport { AvatarGroup } from './components/AvatarGroup.js';\nexport { BadgeGroup } from './components/BadgeGroup.js';\nexport { GridTable } from './components/GridTable.js';\nexport { BottomBar } from './components/BottomBar.js';\nexport { EventCalendar } from './components/EventCalendar.js';\nexport { useDisclosure } from './hooks/useDisclosure.js';\n\n"],
5
+ "mappings": "AAAA,IAAMA,GAAW,qBAEXC,GAAa,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KACjEC,GAAa,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KACjEC,GAAa,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KACjEC,GAAa,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KAEjEC,GAAW,IAAI,IAAI,wBAAyB,YAAY,GAAG,EAAE,KAC7DC,GAAW,IAAI,IAAI,wBAAyB,YAAY,GAAG,EAAE,KAC7DC,GAAW,IAAI,IAAI,wBAAyB,YAAY,GAAG,EAAE,KAC7DC,GAAW,IAAI,IAAI,wBAAyB,YAAY,GAAG,EAAE,KAE7DC,GAAW,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KAC/DC,GAAW,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KAC/DC,GAAW,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KAC/DC,GAAW,IAAI,IAAI,0BAA2B,YAAY,GAAG,EAAE,KAE/DC,GAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMEZ,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOVC,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOVC,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOVC,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQVC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAORC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAORC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAORC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQRC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAORC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAORC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAORC,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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",
6
+ "names": ["STYLE_ID", "poppins400", "poppins500", "poppins600", "poppins700", "arimo400", "arimo500", "arimo600", "arimo700", "inter400", "inter500", "inter600", "inter700", "css", "ensureStyles", "style", "themeVars", "setThemeVars", "vars", "target", "key", "value", "cssKey", "setThemeMode", "mode", "Renderer", "isSignal", "isState", "isStatePath", "isComputed", "resolve", "computed", "after", "concat", "isReactive", "value", "cx", "values", "toPx", "splitPropsChildren", "args", "defaults", "props", "children", "isPropsObject", "arg", "key", "resolveValue", "resolveBool", "classVar", "prefix", "fallback", "normalize", "v", "resolved", "finalValue", "classFlag", "name", "classMap", "map", "getClass", "HtmlButton", "Span", "when", "after", "Button", "args", "props", "children", "splitPropsChildren", "variant", "size", "fullWidth", "loading", "leftSection", "rightSection", "className", "disabled", "justify", "rest", "isDisabled", "after", "HtmlButton", "cx", "classVar", "classFlag", "when", "Span", "Span", "Text", "args", "props", "children", "splitPropsChildren", "size", "weight", "color", "dimmed", "align", "ellipsis", "className", "style", "rest", "weightClass", "classMap", "colorClass", "alignClass", "Span", "cx", "classVar", "classFlag", "H1", "H2", "H3", "H4", "H5", "H6", "map", "H1", "H2", "H3", "H4", "H5", "H6", "Title", "args", "props", "children", "splitPropsChildren", "order", "className", "style", "rest", "orderValue", "resolveValue", "cx", "classVar", "Div", "Container", "args", "props", "children", "splitPropsChildren", "size", "fluid", "className", "style", "rest", "Div", "cx", "classFlag", "classVar", "Div", "Stack", "args", "props", "children", "splitPropsChildren", "gap", "align", "justify", "className", "style", "rest", "justifyClass", "classMap", "Div", "cx", "classVar", "Div", "Group", "args", "props", "children", "splitPropsChildren", "gap", "align", "justify", "position", "noWrap", "className", "style", "rest", "positionClass", "classMap", "Div", "cx", "classVar", "classFlag", "Div", "list", "when", "after", "Card", "args", "props", "children", "splitPropsChildren", "title", "content", "actions", "border", "padding", "radius", "shadow", "className", "style", "rest", "Div", "when", "cx", "classVar", "list", "action", "Button", "e", "after", "s", "v", "Span", "Badge", "args", "props", "children", "splitPropsChildren", "variant", "size", "className", "dot", "style", "rest", "dotClass", "classMap", "Span", "cx", "classVar", "classFlag", "Div", "Input", "HtmlTextarea", "Label", "Span", "when", "state", "after", "isState", "TextInput", "args", "props", "rawProps", "splitPropsChildren", "label", "description", "error", "size", "leftSection", "rightSection", "className", "inputClassName", "multiline", "computed_value", "rest", "raw_value", "onChange", "onInput", "onFocus", "onBlur", "onKeyDown", "onKeyUp", "onClick", "isValueTwoWay", "isState", "currentState", "state", "resolveValue", "after", "next", "handleInput", "ev", "isMultiline", "resolveBool", "Control", "HtmlTextarea", "Input", "finalInputClassName", "cx", "input", "Div", "when", "Label", "Span", "classFlag", "classVar", "Textarea", "args", "props", "splitPropsChildren", "size", "leftSection", "rightSection", "className", "rest", "TextInput", "Div", "Span", "after", "state", "NumberField", "args", "props", "rawProps", "splitPropsChildren", "value", "min", "max", "step", "size", "allowDecimal", "allowNegative", "decimalSeparator", "thousandSeparator", "decimalScale", "clampBehavior", "hideControls", "format", "locale", "currency", "formatOptions", "prefix", "suffix", "leftSection", "rightSection", "className", "computed_onChange", "computed_onInput", "rest", "_onChange", "_onInput", "onBlur", "onFocus", "onKeyDown", "onChange", "e", "onInput", "currentState", "state", "escapeRegExp", "getScale", "resolveValue", "resolved", "fmt", "parseNumber", "raw", "decSep", "thousSep", "rawValue", "normalized", "num", "addThousandSeparators", "intPart", "formatNumber", "scale", "numeric", "sign", "abs", "int", "dec", "formattedInt", "trimmed", "formatWithIntl", "kind", "resolvedLocale", "resolvedCurrency", "options", "style", "clampValue", "next", "minValue", "maxValue", "resolveSuffix", "suffixValue", "buildVisual", "prefixValue", "normalizedRaw", "normalizedPrefix", "normalizedSuffix", "hasPrefix", "hasSuffix", "makeSanitizedFromDigits", "digitsValue", "sep", "baseDigits", "padded", "decPart", "sanitized", "stripAffixes", "out", "sanitizeFromInput", "rawInput", "allowNeg", "body", "digits", "parsed", "clamped", "normalizeIncoming", "inputText", "filtered", "lastExternalValue", "updateFromExternal", "after", "hasRightSection", "showControls", "nextHidden", "nextRight", "inputMode", "inputFormat", "visual", "resolvedOptions", "stepBy", "direction", "current", "delta", "setCaretToEnd", "target", "setToEnd", "end", "handleInput", "ev", "handleBlur", "handleFocus", "handleKeyDown", "controls", "Div", "Span", "controlsWrapper", "finalRightSection", "nextControls", "TextInput", "cx", "NumberInput", "args", "NumberField", "Div", "HtmlButton", "portal", "when", "after", "forwardSvg", "backwardSvg", "checkedSvg", "indeterminateSvg", "closeSvg", "searchSvg", "plusSvg", "editSvg", "deleteSvg", "calendarTodaySvg", "Modal", "args", "props", "rawProps", "children", "splitPropsChildren", "opened", "title", "size", "centered", "overlay", "position", "className", "style", "onClose", "positionClass", "after", "pos", "isCentered", "when", "portal", "Div", "cx", "classVar", "ev", "HtmlButton", "closeSvg", "Div", "Span", "after", "when", "Loading", "args", "props", "splitPropsChildren", "variant", "size", "className", "isDots", "after", "next", "isBars", "when", "Div", "cx", "classVar", "Span", "Div", "Input", "Label", "Span", "when", "state", "after", "Checkbox", "args", "props", "rawProps", "splitPropsChildren", "checked", "label", "description", "size", "indeterminate", "className", "style", "inputProps", "rest", "onChange", "currentState", "state", "resolveBool", "after", "next", "control", "Label", "Input", "cx", "classVar", "when", "Div", "checkedSvg", "indeterminateSvg", "Span", "Input", "Label", "Span", "when", "Switch", "args", "props", "splitPropsChildren", "label", "size", "className", "style", "inputProps", "rest", "Label", "cx", "classVar", "Input", "when", "Span", "Div", "Span", "when", "state", "after", "Select", "args", "props", "rawProps", "splitPropsChildren", "data", "value", "size", "leftSection", "rightSection", "placeholder", "className", "rest", "onChange", "open", "state", "currentState", "resolveValue", "after", "next", "resolved", "selectValue", "valueClass", "current", "displayLabel", "match", "item", "Div", "cx", "classVar", "when", "Span", "Button", "Div", "state", "after", "list", "when", "Tabs", "args", "props", "rawProps", "splitPropsChildren", "value", "tabs", "orientation", "variant", "sticky", "className", "style", "onChange", "currentState", "state", "resolveValue", "sentinelNode", "listNode", "spacerHeight", "stickyLeft", "stickyWidth", "stickyTop", "isSticky", "lastScrollTop", "listening", "rafId", "initScheduled", "listenerTargets", "after", "next", "resolved", "setValue", "getScrollParents", "node", "parents", "current", "overflow", "getScrollRoot", "getRootTop", "root", "getScrollTop", "getScrollDirection", "last", "getNextSticky", "direction", "sentinelTop", "rootTop", "currentSticky", "updateSticky", "sentinelEl", "listEl", "resolveBool", "sentinelRect", "listRect", "currentScrollTop", "nextSticky", "scheduleUpdate", "addListenerTarget", "target", "initListeners", "stickyStyle", "values", "active", "left", "width", "top", "spacerStyle", "height", "Div", "cx", "classMap", "classVar", "list", "tab", "Button", "v", "tabVal", "when", "HtmlTable", "Thead", "Tbody", "Tr", "Th", "Td", "Table", "args", "props", "splitPropsChildren", "headers", "rows", "striped", "highlightOnHover", "withBorder", "withColumnBorders", "className", "style", "rest", "HtmlTable", "cx", "classFlag", "Thead", "Tr", "header", "Th", "Tbody", "row", "cell", "Td", "Div", "state", "when", "after", "Accordion", "args", "props", "children", "splitPropsChildren", "opened", "className", "rest", "openedState", "state", "resolveBool", "after", "next", "toggle", "header", "content", "Div", "cx", "when", "Span", "Tooltip", "args", "props", "children", "splitPropsChildren", "label", "className", "style", "Span", "cx", "Div", "when", "after", "state", "portal", "menuControlStore", "state", "Menu", "args", "mainNode", "dropdownNode", "dropdownStyle", "props", "rawProps", "children", "splitPropsChildren", "opened", "content", "position", "className", "rest", "onChange", "currentState", "resolveValue", "after", "value", "resolved", "closeOldSetCurrent", "parsePosition", "parts", "single", "first", "second", "updatePosition", "trigger", "dropdown", "rect", "dropdownRect", "positionValue", "spaceVar", "margin", "viewportWidth", "viewportHeight", "maxLeft", "maxTop", "placement", "align", "gap", "top", "left", "setOpen", "next", "toggle", "close", "Div", "cx", "when", "portal", "Div", "portal", "when", "Drawer", "args", "props", "children", "splitPropsChildren", "opened", "onClose", "position", "size", "overlay", "shadowed", "className", "style", "when", "portal", "Div", "cx", "classVar", "classMap", "ev", "Button", "Div", "Span", "when", "after", "Notification", "args", "props", "rawProps", "children", "splitPropsChildren", "title", "color", "icon", "loading", "withCloseButton", "withBorder", "className", "style", "onClose", "showLoader", "after", "nextIcon", "nextLoading", "withIcon", "Div", "cx", "value", "when", "Span", "Loading", "Button", "closeSvg", "Div", "when", "Divider", "args", "props", "splitPropsChildren", "label", "labelPosition", "vertical", "className", "rest", "Div", "cx", "classFlag", "classVar", "when", "Text", "Div", "Paper", "args", "props", "children", "splitPropsChildren", "padding", "radius", "shadow", "className", "rest", "Div", "cx", "value", "Button", "Div", "Span", "after", "when", "Alert", "args", "props", "rawProps", "children", "splitPropsChildren", "title", "color", "icon", "withCloseButton", "className", "rest", "onClose", "hasContent", "after", "showClose", "hasIcon", "Div", "cx", "value", "when", "Span", "Button", "Div", "Img", "when", "Avatar", "args", "props", "children", "splitPropsChildren", "src", "size", "alt", "className", "rest", "Div", "cx", "value", "when", "Img", "Span", "Kbd", "args", "props", "children", "splitPropsChildren", "className", "rest", "Span", "cx", "HtmlCode", "Code", "args", "props", "children", "splitPropsChildren", "className", "rest", "HtmlCode", "cx", "HtmlBlockquote", "Blockquote", "args", "props", "children", "splitPropsChildren", "className", "rest", "HtmlBlockquote", "cx", "Div", "SimpleGrid", "args", "props", "children", "splitPropsChildren", "cols", "gap", "className", "rest", "Div", "cx", "value", "Ul", "Ol", "Li", "Div", "Span", "after", "when", "isSignal", "isState", "isStatePath", "isComputed", "List", "args", "props", "children", "splitPropsChildren", "type", "size", "withPadding", "className", "rest", "typeClass", "classMap", "isOrdered", "after", "next", "isListNode", "value", "isListItemNode", "wrapChild", "child", "wrapValue", "item", "Li", "Span", "isSignal", "isState", "isStatePath", "isComputed", "listChildren", "listProps", "cx", "classVar", "classFlag", "when", "Ol", "Ul", "ListItem", "leftSection", "rightSection", "title", "body", "withBorder", "hasStructured", "nextTitle", "nextBody", "Div", "A", "Anchor", "args", "props", "children", "splitPropsChildren", "className", "rest", "A", "cx", "Img", "Image", "args", "props", "splitPropsChildren", "className", "rest", "Img", "cx", "Span", "Icon", "args", "props", "children", "splitPropsChildren", "Span", "cx", "classVar", "Div", "Progress", "args", "props", "splitPropsChildren", "value", "color", "size", "className", "rest", "Div", "cx", "classVar", "next", "pct", "Div", "after", "state", "when", "Slider", "args", "props", "rawProps", "splitPropsChildren", "onChange", "value", "marks", "size", "min", "max", "step", "disabled", "className", "rest", "currentState", "state", "resolveValue", "after", "next", "getBounds", "minValue", "maxValue", "getStep", "stepValue", "setValue", "clamped", "stepped", "percent", "v", "range", "pct", "updateFromEvent", "ev", "getRect", "rect", "ratio", "startDrag", "resolveBool", "trackEl", "handleMove", "moveEv", "handleUp", "Div", "cx", "classVar", "classFlag", "p", "when", "mark", "SliderMark", "label", "markValue", "Div", "after", "Skeleton", "args", "props", "splitPropsChildren", "height", "width", "className", "rest", "customStyle", "after", "h", "w", "style", "Div", "cx", "value", "Button", "after", "state", "Chip", "args", "props", "rawProps", "children", "splitPropsChildren", "checked", "size", "variant", "className", "rest", "onChange", "currentState", "state", "after", "next", "setChecked", "Button", "cx", "classVar", "current", "Div", "after", "state", "SegmentedControl", "args", "props", "rawProps", "splitPropsChildren", "value", "data", "size", "scroll", "className", "rest", "onChange", "currentState", "state", "resolveValue", "after", "next", "resolved", "setValue", "Div", "cx", "classVar", "item", "current", "Button", "Div", "state", "after", "Pagination", "args", "props", "rawProps", "splitPropsChildren", "page", "total", "size", "className", "rest", "onChange", "currentState", "state", "resolveValue", "after", "next", "resolved", "setPage", "totalValue", "clamped", "items", "i", "Div", "cx", "classVar", "Button", "v", "Div", "Input", "Label", "Span", "when", "Radio", "args", "props", "splitPropsChildren", "label", "description", "size", "className", "inputProps", "rest", "control", "Label", "Input", "cx", "classVar", "when", "Span", "Div", "Div", "RadioGroup", "args", "props", "children", "splitPropsChildren", "className", "rest", "Div", "cx", "Nav", "Span", "Breadcrumbs", "args", "props", "children", "splitPropsChildren", "separator", "className", "rest", "items", "filtered", "nodes", "item", "idx", "Span", "Nav", "cx", "Div", "Center", "args", "props", "children", "splitPropsChildren", "className", "rest", "Div", "cx", "Div", "Space", "args", "props", "splitPropsChildren", "size", "className", "rest", "Div", "cx", "value", "Div", "when", "Collapse", "args", "props", "children", "splitPropsChildren", "opened", "className", "rest", "when", "Div", "cx", "Button", "ActionIcon", "args", "props", "children", "splitPropsChildren", "size", "variant", "className", "rest", "Button", "cx", "classVar", "Div", "when", "after", "state", "Popover", "args", "props", "rawProps", "children", "splitPropsChildren", "opened", "position", "content", "className", "rest", "onChange", "currentState", "state", "resolveValue", "after", "next", "resolved", "setOpen", "Div", "cx", "when", "Div", "HoverCard", "args", "props", "children", "splitPropsChildren", "position", "content", "className", "rest", "Div", "cx", "value", "Div", "Affix", "args", "props", "children", "splitPropsChildren", "position", "className", "rest", "Div", "cx", "value", "HtmlFieldset", "Legend", "when", "Fieldset", "args", "props", "children", "splitPropsChildren", "legend", "className", "rest", "HtmlFieldset", "cx", "when", "Legend", "Div", "AppBar", "args", "props", "children", "splitPropsChildren", "position", "className", "rest", "Div", "cx", "classVar", "Div", "portal", "after", "state", "when", "Sidebar", "args", "props", "children", "splitPropsChildren", "when", "FixedSidebar", "DrawerSidebar", "open", "onClose", "position", "size", "blur", "fixed", "minWidth", "className", "rest", "mounted", "state", "openState", "transitionMs", "applyOpen", "next", "after", "overlayClass", "values", "cx", "drawerClass", "positionClass", "resolveValue", "portal", "Div", "ev", "classNameComposition", "minWidthValue", "minWidthClass", "Div", "when", "Timeline", "args", "props", "splitPropsChildren", "items", "className", "rest", "Div", "cx", "item", "when", "Div", "Stepper", "args", "props", "splitPropsChildren", "active", "items", "className", "rest", "Div", "cx", "item", "idx", "value", "Span", "after", "state", "Rating", "args", "props", "rawProps", "splitPropsChildren", "value", "max", "size", "className", "rest", "onChange", "currentState", "state", "resolveValue", "after", "next", "resolved", "setValue", "items", "maxValue", "i", "Span", "cx", "classVar", "current", "Span", "Tag", "args", "props", "children", "splitPropsChildren", "className", "rest", "Span", "cx", "Button", "Div", "state", "after", "weekDays", "Calendar", "args", "props", "rawProps", "splitPropsChildren", "value", "className", "size", "rest", "onChange", "resolveDate", "next", "resolved", "resolveValue", "parsed", "currentState", "state", "viewState", "after", "createDate", "year", "month", "day", "maxDay", "setDate", "current", "shiftMonth", "delta", "shiftYear", "monthLabel", "yearLabel", "gridCells", "selected", "start", "daysInMonth", "cells", "i", "d", "Div", "c", "cx", "classVar", "ActionIcon", "Icon", "backwardSvg", "Button", "forwardSvg", "Div", "Span", "Input", "when", "after", "state", "MultiSelect", "args", "props", "rawProps", "splitPropsChildren", "value", "data", "size", "className", "placeholder", "searchable", "rest", "onChange", "onSearchChange", "currentState", "state", "resolveValue", "searchState", "openState", "rootNode", "normalizeData", "items", "item", "after", "next", "resolved", "outsideCleanup", "handler", "ev", "root", "toggle", "val", "selected", "v", "normalizedData", "nextData", "filteredItems", "query", "q", "isEmpty", "nextSelected", "list", "isSearchable", "Div", "cx", "classVar", "current", "label", "entry", "Span", "closeSvg", "when", "Input", "checkedSvg", "Div", "when", "ToastStack", "args", "props", "splitPropsChildren", "items", "className", "onClose", "timeout", "rest", "Div", "cx", "item", "when", "DatePicker", "args", "props", "splitPropsChildren", "Calendar", "Div", "after", "Notifications", "args", "props", "rawProps", "splitPropsChildren", "items", "position", "className", "rest", "onRemove", "timers", "getId", "item", "index", "notifications", "after", "nextItems", "list", "resolveValue", "active", "id", "timeout", "handle", "Notification", "Div", "cx", "classVar", "Div", "after", "state", "when", "RangeSlider", "args", "props", "rawProps", "splitPropsChildren", "value", "marks", "min", "max", "step", "size", "disabled", "className", "rest", "onChange", "currentState", "state", "resolveValue", "getBounds", "minValue", "maxValue", "getStep", "stepValue", "normalize", "vals", "list", "first", "second", "low", "high", "after", "next", "setValue", "normalized", "percent", "range", "lowPct", "highPct", "updateFromEvent", "ev", "getRect", "thumb", "rect", "ratio", "nextValue", "current", "startDrag", "forcedThumb", "trackEl", "resolveBool", "track", "percentValue", "clickPct", "isLow", "handleMove", "moveEv", "handleUp", "Div", "cx", "classVar", "classFlag", "when", "mark", "SliderMark", "state", "after", "DateInput", "args", "props", "rawProps", "splitPropsChildren", "value", "size", "calendarSize", "leftSection", "rightSection", "className", "format", "minDate", "maxDate", "rest", "onChange", "resolveDate", "next", "resolved", "resolveValue", "parsed", "isSameDay", "left", "right", "formatDate", "date", "year", "month", "day", "parseDate", "text", "digits", "candidate", "min", "max", "currentDate", "state", "textValue", "opened", "after", "setDate", "Popover", "Calendar", "classVar", "TextInput", "cx", "Div", "when", "after", "state", "Popper", "args", "props", "rawProps", "children", "splitPropsChildren", "opened", "content", "className", "rest", "onChange", "currentState", "state", "resolveValue", "after", "next", "resolved", "setOpen", "Div", "cx", "when", "Button", "after", "when", "state", "PasswordInput", "args", "props", "rawProps", "splitPropsChildren", "size", "className", "rightSection", "rest", "onChange", "visible", "state", "inputType", "after", "next", "computedRightSection", "Button", "when", "TextInput", "Div", "SearchInput", "args", "props", "splitPropsChildren", "size", "className", "rest", "TextInput", "Div", "searchSvg", "Button", "after", "when", "state", "CopyButton", "args", "props", "children", "splitPropsChildren", "value", "timeout", "className", "rest", "copied", "buttonClass", "after", "next", "cx", "Button", "when", "Div", "ProgressRing", "args", "props", "splitPropsChildren", "size", "className", "rest", "Div", "cx", "value", "Div", "Button", "when", "Toast", "args", "props", "children", "splitPropsChildren", "title", "onClose", "className", "rest", "Div", "cx", "when", "Button", "Div", "state", "SelectSearch", "args", "props", "rawProps", "splitPropsChildren", "data", "className", "rest", "onChange", "query", "state", "items", "item", "Div", "cx", "TextInput", "ev", "Div", "SwitchGroup", "args", "props", "children", "splitPropsChildren", "className", "rest", "Div", "cx", "Div", "state", "after", "RangePicker", "args", "props", "rawProps", "splitPropsChildren", "value", "size", "className", "rest", "onChange", "currentState", "state", "resolveValue", "after", "next", "resolved", "setValue", "Div", "cx", "TextInput", "current", "ev", "Div", "Flex", "args", "props", "children", "splitPropsChildren", "direction", "wrap", "align", "justify", "gap", "className", "rest", "Div", "cx", "value", "A", "Div", "Span", "when", "after", "state", "NavLink", "args", "props", "rawProps", "children", "splitPropsChildren", "label", "description", "leftSection", "rightSection", "active", "disabled", "variant", "childrenOffset", "opened", "defaultOpened", "className", "padding", "rest", "onClick", "onChange", "hasChildren", "openState", "state", "resolveValue", "after", "next", "resolved", "childrenStyle", "toPx", "handleClick", "ev", "Div", "cx", "A", "classVar", "classFlag", "when", "Span", "Div", "when", "Indicator", "args", "props", "children", "splitPropsChildren", "show", "position", "color", "size", "className", "rest", "Div", "cx", "classVar", "when", "Span", "Burger", "args", "props", "splitPropsChildren", "opened", "className", "rest", "Span", "cx", "Div", "when", "LoadingOverlay", "args", "props", "splitPropsChildren", "visible", "rest", "when", "Div", "Loading", "Div", "Grid", "args", "props", "children", "splitPropsChildren", "className", "gap", "rest", "Div", "cx", "value", "Div", "Col", "args", "props", "children", "splitPropsChildren", "span", "className", "rest", "Div", "cx", "value", "Div", "ScrollArea", "args", "props", "children", "splitPropsChildren", "size", "className", "rest", "Div", "cx", "value", "Div", "Input", "after", "state", "when", "list", "PinInput", "args", "props", "rawProps", "splitPropsChildren", "length", "value", "size", "type", "mask", "placeholder", "disabled", "error", "oneTimeCode", "className", "onChange", "onComplete", "currentLength", "state", "resolveValue", "getLength", "after", "next", "newLen", "oldLen", "currentValues", "currentState", "currentNodes", "inputNodes", "_", "i", "initial", "len", "getValueString", "setValue", "str", "v", "focusInput", "index", "nodes", "getTypeRegex", "t", "handleInput", "idx", "ev", "inputValue", "regex", "handlePaste", "current", "startIdx", "pastedValue", "chars", "c", "char", "targetIdx", "nextEmpty", "handleKeyDown", "handleFocus", "handleContainerClick", "firstEmpty", "inputType", "m", "inputMode", "autoComplete", "o", "isDisabled", "d", "hasError", "e", "indices", "renderInput", "Input", "cx", "when", "values", "Div", "classVar", "list", "Div", "CheckboxGroup", "args", "props", "children", "splitPropsChildren", "className", "rest", "Div", "cx", "Div", "AvatarGroup", "args", "props", "children", "splitPropsChildren", "className", "rest", "Div", "cx", "Div", "BadgeGroup", "args", "props", "children", "splitPropsChildren", "className", "rest", "Div", "cx", "Div", "Span", "after", "context", "sizeContext", "context", "tableContext", "GridTable", "args", "props", "rawProps", "children", "splitPropsChildren", "className", "sizesProp", "sortProp", "stickyProp", "rest", "onSort", "sizes", "after", "v", "table", "Div", "cx", "classFlag", "s", "header", "_sort", "sortKey", "direction", "handleSort", "current", "next", "Span", "d", "Button", "Div", "Span", "when", "BottomBar", "args", "props", "children", "splitPropsChildren", "grow", "className", "rest", "Div", "cx", "classFlag", "rawProps", "icon", "label", "active", "disabled", "variant", "onClick", "Button", "classVar", "when", "Span", "Div", "Button", "state", "after", "when", "Input", "Label", "Span", "WEEKDAY_LABELS", "VIEW_OPTIONS", "toDate", "v", "d", "normalizeEvent", "ev", "start", "end", "getEventsInRange", "events", "rangeStart", "rangeEnd", "getEventsForDay", "day", "weekStart", "date", "firstDayOfWeek", "diff", "formatTime", "locale", "formatDate", "formatMonthYear", "formatWeekRange", "weekStartDate", "durationPct", "start", "end", "dayStart", "dayEnd", "dayStartMs", "dayEndMs", "total", "s", "mins", "top", "height", "EventCalendar", "args", "props", "rawProps", "splitPropsChildren", "eventsProp", "defaultView", "firstDayOfWeek", "locale", "hourSlotDuration", "minTime", "maxTime", "eventCreationColorOptions", "className", "rest", "onCreateEventRequest", "onViewEventRequest", "onUpdateEventRequest", "onRemoveEventRequest", "eventCreationEmailLookup", "eventCreationLocationsCallback", "eventCreationCalendarsCallback", "onSlotClick", "onDateRangeChange", "viewMode", "state", "resolveValue", "currentDate", "modalState", "selectedEvent", "createDraft", "eventsList", "after", "v", "viewDate", "weekStartDate", "weekStart", "slotDuration", "goPrev", "d", "goNext", "goToday", "openCreateModal", "allDay", "e", "openViewModal", "event", "normalizeEvent", "openEditModal", "ev", "closeModal", "handleSlotClick", "date", "hour", "handleCreateSubmit", "draft", "handleUpdateSubmit", "handleRemoveRequest", "titleLabel", "view", "formatMonthYear", "formatWeekRange", "formatDate", "header", "Div", "ActionIcon", "Icon", "backwardSvg", "forwardSvg", "Button", "calendarTodaySvg", "VIEW_OPTIONS", "opt", "cx", "plusSvg", "monthGrid", "events", "firstDay", "year", "month", "startDow", "daysInMonth", "prevMonthDays", "rows", "dayCount", "nextMonthDay", "totalCells", "dayCells", "i", "day", "isCurrentMonth", "dateObj", "dayEvents", "getEventsForDay", "isToday", "Span", "when", "monthView", "WEEKDAY_LABELS", "label", "timeSlots", "h", "weekDays", "days", "weekView", "min", "rangeStart", "rangeEnd", "inRange", "getEventsInRange", "formatTime", "dayView", "createEditForm", "isEdit", "today", "defaultStart", "defaultEnd", "titleState", "startDateState", "startTimeState", "endDateState", "endTimeState", "allDayState", "descState", "locationState", "attendeesState", "emailLookupQuery", "emailLookupResults", "locationOptions", "locationQuery", "colorOptions", "colorState", "applyDraft", "doEmailLookup", "query", "list", "addAttendee", "item", "current", "a", "removeAttendee", "index", "next", "loadLocations", "TextInput", "Checkbox", "Label", "Input", "o", "loc", "r", "Textarea", "c", "viewModalContent", "editSvg", "deleteSvg", "m", "Modal", "state", "useDisclosure", "initial", "opened", "ensureStyles"]
7
7
  }