@datatechsolutions/ui 3.8.0 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/astrlabe/index.js +107 -107
- package/dist/astrlabe/index.mjs +3 -3
- package/dist/astrlabe/workflow-canvas.js +3 -3
- package/dist/astrlabe/workflow-canvas.mjs +2 -2
- package/dist/{chunk-KKXI7CPF.mjs → chunk-2E7HYTS7.mjs} +3 -3
- package/dist/{chunk-KKXI7CPF.mjs.map → chunk-2E7HYTS7.mjs.map} +1 -1
- package/dist/{chunk-EWYAM4WJ.mjs → chunk-2ZY3IQ2I.mjs} +3 -3
- package/dist/{chunk-EWYAM4WJ.mjs.map → chunk-2ZY3IQ2I.mjs.map} +1 -1
- package/dist/{chunk-VPFVW7ZF.js → chunk-6E2YH67A.js} +35 -35
- package/dist/{chunk-VPFVW7ZF.js.map → chunk-6E2YH67A.js.map} +1 -1
- package/dist/{chunk-A4A3SQTV.mjs → chunk-6QJI5YOJ.mjs} +3 -3
- package/dist/{chunk-A4A3SQTV.mjs.map → chunk-6QJI5YOJ.mjs.map} +1 -1
- package/dist/{chunk-3X3IYDG6.js → chunk-7AM2SXEF.js} +68 -68
- package/dist/{chunk-3X3IYDG6.js.map → chunk-7AM2SXEF.js.map} +1 -1
- package/dist/{chunk-H37VDL7Y.js → chunk-A2RIX2RK.js} +4 -4
- package/dist/{chunk-H37VDL7Y.js.map → chunk-A2RIX2RK.js.map} +1 -1
- package/dist/{chunk-32DHEVOH.mjs → chunk-ARLYOLSO.mjs} +3 -3
- package/dist/{chunk-32DHEVOH.mjs.map → chunk-ARLYOLSO.mjs.map} +1 -1
- package/dist/{chunk-5YVOLHSW.mjs → chunk-AXBD6OAF.mjs} +4 -4
- package/dist/{chunk-5YVOLHSW.mjs.map → chunk-AXBD6OAF.mjs.map} +1 -1
- package/dist/{chunk-ZP37M2QK.mjs → chunk-BWUFLW5W.mjs} +6 -6
- package/dist/{chunk-ZP37M2QK.mjs.map → chunk-BWUFLW5W.mjs.map} +1 -1
- package/dist/{chunk-HBOORO52.js → chunk-CLTNCBSP.js} +4 -4
- package/dist/{chunk-HBOORO52.js.map → chunk-CLTNCBSP.js.map} +1 -1
- package/dist/{chunk-F35GFICG.js → chunk-CRBGZA6Y.js} +13 -13
- package/dist/{chunk-F35GFICG.js.map → chunk-CRBGZA6Y.js.map} +1 -1
- package/dist/{chunk-7JZFNKJD.js → chunk-DQIEVLA3.js} +35 -35
- package/dist/{chunk-7JZFNKJD.js.map → chunk-DQIEVLA3.js.map} +1 -1
- package/dist/{chunk-57E4TCB2.mjs → chunk-EAIE4QGD.mjs} +3 -3
- package/dist/{chunk-57E4TCB2.mjs.map → chunk-EAIE4QGD.mjs.map} +1 -1
- package/dist/{chunk-5W6LMDXV.mjs → chunk-GQWC4EKE.mjs} +4 -4
- package/dist/{chunk-5W6LMDXV.mjs.map → chunk-GQWC4EKE.mjs.map} +1 -1
- package/dist/{chunk-FKUIVS6I.js → chunk-IVKFXPLO.js} +28 -28
- package/dist/{chunk-FKUIVS6I.js.map → chunk-IVKFXPLO.js.map} +1 -1
- package/dist/{chunk-FNA66TT4.js → chunk-MT66VKLS.js} +163 -219
- package/dist/chunk-MT66VKLS.js.map +1 -0
- package/dist/{chunk-74BU2EBZ.mjs → chunk-OEZ7GAJY.mjs} +6 -6
- package/dist/{chunk-74BU2EBZ.mjs.map → chunk-OEZ7GAJY.mjs.map} +1 -1
- package/dist/{chunk-CZZOCKEA.mjs → chunk-OVQ4MKCV.mjs} +3 -3
- package/dist/{chunk-CZZOCKEA.mjs.map → chunk-OVQ4MKCV.mjs.map} +1 -1
- package/dist/{chunk-WDBVIU7W.mjs → chunk-PD3JLDA5.mjs} +3 -3
- package/dist/{chunk-WDBVIU7W.mjs.map → chunk-PD3JLDA5.mjs.map} +1 -1
- package/dist/{chunk-TJPPZU77.js → chunk-R6GEJBFC.js} +34 -34
- package/dist/{chunk-TJPPZU77.js.map → chunk-R6GEJBFC.js.map} +1 -1
- package/dist/{chunk-Q4QORAMH.js → chunk-RFUSH7WD.js} +10 -10
- package/dist/{chunk-Q4QORAMH.js.map → chunk-RFUSH7WD.js.map} +1 -1
- package/dist/{chunk-VS6PTRQ7.mjs → chunk-SJ6SUS7H.mjs} +3 -3
- package/dist/{chunk-VS6PTRQ7.mjs.map → chunk-SJ6SUS7H.mjs.map} +1 -1
- package/dist/{chunk-E57RZXOR.js → chunk-T4IYOKHR.js} +25 -25
- package/dist/{chunk-E57RZXOR.js.map → chunk-T4IYOKHR.js.map} +1 -1
- package/dist/{chunk-3H5CFLVK.js → chunk-U6VFS3RD.js} +135 -135
- package/dist/{chunk-3H5CFLVK.js.map → chunk-U6VFS3RD.js.map} +1 -1
- package/dist/{chunk-RCHTRG7R.js → chunk-UZIICTIY.js} +55 -55
- package/dist/{chunk-RCHTRG7R.js.map → chunk-UZIICTIY.js.map} +1 -1
- package/dist/{chunk-TCP45Q4B.js → chunk-WJENX6KB.js} +9 -9
- package/dist/{chunk-TCP45Q4B.js.map → chunk-WJENX6KB.js.map} +1 -1
- package/dist/{chunk-PYNXIDG3.mjs → chunk-WS3IJFPW.mjs} +3 -3
- package/dist/{chunk-PYNXIDG3.mjs.map → chunk-WS3IJFPW.mjs.map} +1 -1
- package/dist/{chunk-Q7HRCCFT.js → chunk-ZDXEGSCF.js} +45 -45
- package/dist/{chunk-Q7HRCCFT.js.map → chunk-ZDXEGSCF.js.map} +1 -1
- package/dist/{chunk-PCUINUIC.mjs → chunk-ZQEMKEEH.mjs} +3 -3
- package/dist/{chunk-PCUINUIC.mjs.map → chunk-ZQEMKEEH.mjs.map} +1 -1
- package/dist/{chunk-E6C7MFHJ.mjs → chunk-ZQRUAXGP.mjs} +164 -218
- package/dist/chunk-ZQRUAXGP.mjs.map +1 -0
- package/dist/index.d.mts +43 -42
- package/dist/index.d.ts +43 -42
- package/dist/index.js +662 -670
- package/dist/index.mjs +1 -1
- package/dist/platform/admin/index.js +9 -9
- package/dist/platform/admin/index.mjs +3 -3
- package/dist/platform/agents-workspace.js +6 -6
- package/dist/platform/agents-workspace.mjs +5 -5
- package/dist/platform/app-shell.js +3 -3
- package/dist/platform/app-shell.mjs +2 -2
- package/dist/platform/auth/index.js +21 -21
- package/dist/platform/auth/index.mjs +3 -3
- package/dist/platform/billing/index.js +3 -3
- package/dist/platform/billing/index.mjs +2 -2
- package/dist/platform/impersonation/index.js +3 -3
- package/dist/platform/impersonation/index.mjs +2 -2
- package/dist/platform/index.d.mts +1 -1
- package/dist/platform/index.d.ts +1 -1
- package/dist/platform/index.js +74 -74
- package/dist/platform/index.mjs +17 -17
- package/dist/platform/pages/index.d.mts +93 -4
- package/dist/platform/pages/index.d.ts +93 -4
- package/dist/platform/pages/index.js +1009 -575
- package/dist/platform/pages/index.js.map +1 -1
- package/dist/platform/pages/index.mjs +805 -372
- package/dist/platform/pages/index.mjs.map +1 -1
- package/dist/platform/settings/index.js +6 -6
- package/dist/platform/settings/index.mjs +5 -5
- package/dist/platform/workflow-canvas-shell.js +4 -4
- package/dist/platform/workflow-canvas-shell.mjs +3 -3
- package/package.json +1 -1
- package/dist/chunk-E6C7MFHJ.mjs.map +0 -1
- package/dist/chunk-FNA66TT4.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/hero-block.tsx","../src/components/card.tsx","../src/components/input.tsx","../src/components/sheet.tsx","../src/components/wheel-picker.tsx","../src/components/select.tsx","../src/components/toggle-switch.tsx","../src/components/theme-toggle.tsx","../src/components/metric-card.tsx","../src/types/chart-spec.ts","../src/components/chart-renderer.tsx","../src/components/item-summary.tsx","../src/components/entity-card.tsx","../src/components/status-badge.tsx","../src/components/step-timeline.tsx","../src/components/agent-analysis-card.tsx","../src/components/dashboard-view.tsx","../src/components/input-request-form.tsx","../src/components/streaming-dashboard.tsx","../src/types/dashboard-spec.ts","../src/components/recommendation-card.tsx","../src/components/market-prices-card.tsx","../src/components/hero-section.tsx","../src/components/active-filter-chips.tsx","../src/components/search-bar.tsx","../src/components/info-popover.tsx","../src/components/stat-card.tsx","../src/components/section-header.tsx","../src/lib/utils.ts","../src/components/price-change-badge.tsx","../src/components/pagination.tsx","../src/components/spinner.tsx","../src/components/growth-indicator.tsx","../src/components/segmented-control.tsx","../src/components/page-indicator.tsx","../src/components/safe-area.tsx","../src/components/swipe-action.tsx","../src/hooks/use-pull-to-refresh.tsx","../src/components/pull-to-refresh.tsx","../src/components/edge-swipe-indicator.tsx","../src/components/table.tsx","../src/components/empty-state.tsx","../src/components/dynamic-island.tsx","../src/components/notifications.tsx","../src/components/container.tsx","../src/components/form-field.tsx","../src/components/form-section.tsx","../src/components/list-item.tsx","../src/components/profile-identity-card.tsx","../src/components/glass-modal.tsx","../src/components/text.tsx","../src/components/dialog.tsx","../src/components/chip-picker.tsx","../src/components/copyable-id.tsx","../src/components/feed-item-card.tsx","../src/components/context-menu.tsx","../src/components/date-picker.tsx","../src/components/time-picker.tsx","../src/components/page-heading.tsx","../src/components/form-input.tsx","../src/components/form.tsx","../src/components/form-actions.tsx","../src/components/form-toggle.tsx","../src/components/form-checkbox.tsx","../src/components/base-form.tsx","../src/components/expandable-history-list.tsx","../src/components/boolean-flags-picker.tsx","../src/components/details-popover.tsx","../src/components/step-form-page.tsx","../src/components/step-navigation-buttons.tsx","../src/components/filter-tile-button.tsx","../src/components/dock-skeleton.tsx","../src/components/force-touch-menu.tsx","../src/components/launchpad-grid.tsx","../src/components/skeletons/stat-card-skeleton.tsx","../src/components/skeletons/card-grid-skeleton.tsx","../src/components/skeletons/region-filter-skeleton.tsx","../src/components/skeletons/brand-filter-skeleton.tsx","../src/components/skeletons/analysis-skeleton.tsx","../src/components/skeletons/shimmer.tsx","../src/components/skeletons/section-header-skeleton.tsx","../src/components/cookie-consent.tsx","../src/components/dock.tsx","../src/components/dock-container.tsx","../src/components/navigation-progress.tsx","../src/components/page-loading-state.tsx","../src/components/app-shell.tsx","../src/components/avatar.tsx","../src/components/image-upload.tsx","../src/components/breadcrumb.tsx","../src/components/create-action-button.tsx","../src/components/dev-mode-banner.tsx","../src/components/divider.tsx","../src/components/dynamic-island-confirm.tsx","../src/components/flyout-menu.tsx","../src/components/theme-switch.tsx","../src/components/flyout-quick-actions.tsx","../src/components/flyout-nav-grid.tsx","../src/components/heading.tsx","../src/components/language-switcher.tsx","../src/components/liquid-filter-input.tsx","../src/components/management-surface.tsx","../src/components/month-picker.tsx","../src/components/page-empty-state.tsx","../src/components/page-error-state.tsx","../src/components/branded-loader.tsx","../src/components/app-logo.tsx","../src/components/error-pages.tsx","../src/components/preference-section.tsx","../src/components/fieldset.tsx","../src/components/textarea.tsx","../src/components/selection-card.tsx","../src/components/status-toggle.tsx","../src/components/settings-modal.tsx","../src/icons/windsock-icon.tsx","../src/components/otp-input.tsx","../src/components/password-strength-meter.tsx","../src/components/backup-code-grid.tsx","../src/components/social-login-buttons.tsx","../src/components/hero-panel.tsx","../src/components/auth-layout.tsx","../src/lib/glass-accent.ts","../src/lib/subdivision-theme.ts","../src/components/notification-badge.tsx","../src/components/radiant.tsx","../src/components/category-tab.tsx","../src/components/option-grid.tsx","../src/components/collapsible-grouped-list.tsx","../src/components/geo-map/use-geo-map-state.ts","../src/components/geo-map/geo-map-canvas.tsx","../src/components/geo-map/map-zoom-controls.tsx","../src/components/geo-map/interactive-geo-map.tsx","../src/components/geo-map/geo-map-legend.tsx","../src/lib/themes/brazil.ts","../src/lib/locale-flags.ts","../src/lib/themes/us.ts","../src/lib/themes/canada.ts","../src/lib/themes/mexico.ts","../src/lib/themes/colombia.ts","../src/lib/themes/argentina.ts","../src/lib/themes/chile.ts","../src/lib/themes/peru.ts","../src/lib/themes/germany.ts","../src/lib/themes/france.ts","../src/lib/themes/spain.ts","../src/lib/themes/italy.ts","../src/lib/themes/united-kingdom.ts","../src/lib/themes/portugal.ts","../src/lib/themes/australia.ts","../src/lib/themes/japan.ts","../src/lib/themes/india.ts","../src/lib/themes/south-africa.ts","../src/lib/themes/south-korea.ts","../src/lib/themes/indonesia.ts","../src/lib/themes/thailand.ts","../src/lib/themes/nigeria.ts","../src/lib/themes/egypt.ts","../src/lib/themes/turkey.ts","../src/lib/themes/poland.ts","../src/lib/themes/sweden.ts","../src/lib/themes/norway.ts","../src/lib/themes/netherlands.ts","../src/lib/themes/philippines.ts","../src/lib/themes/new-zealand.ts","../src/lib/country-config.ts","../src/components/data-pagination.tsx","../src/components/page-header.tsx","../src/components/tabs.tsx","../src/components/contact-card.tsx","../src/components/progress-bar.tsx","../src/components/switch.tsx","../src/lib/navigation.ts","../src/components/app-navigation.tsx","../src/stores/platform-shell-store.ts","../src/components/platform-shell.tsx","../src/components/skip-to-content.tsx","../src/_auth/index.ts"],"names":["jsx","ChevronDownIcon","jsxs","Fragment","useId","useState","prefersReducedMotion","motion","useCallback","useTransform","useRef","useMotionValue","useEffect","forwardRef","AnimatePresence","sizeConfig","StatusBadge","CheckIcon","duration","CheckCircleIcon","format","TONE_BLOCK","XMarkIcon","MapIcon","Transition","Dialog","TransitionChild","DialogPanel","colorClasses","sizeClasses","getPageNumbers","colors","useReducedMotion","ArrowTrendingUpIcon","ArrowTrendingDownIcon","clsx","animate","triggerHaptic","createContext","useContext","ExclamationTriangleIcon","InformationCircleIcon","React","CONTAINER_STYLES","DialogBackdrop","sizes","Headless","DialogTitle","createPortal","Popover2","ChevronLeftIcon","ChevronRightIcon","useMemo","isSameDay","startOfDay","Popover3","ClockIcon","Popover4","MagnifyingGlassIcon","LaunchpadIcon","memo","DockItem","TONE_STYLES","AvatarButton","Headless2","ServerStackIcon","TrashIcon","BellIcon","MoonIcon","SunIcon","dateFnsLocales","ptBR","enUS","fr","es","Popover5","Fieldset","Legend","Field","Label","Description","React10","ClipboardDocumentIcon","spring","VALID_CODES","formatCurrency","PageHeader","PageSectionHeader","CardSectionHeader","React16","ContactCard","useTranslations","OfficeCard","ContactSection","React18","Switch","Headless4","GlobeAltIcon","UserCircleIcon","ArrowRightOnRectangleIcon","Suspense"],"mappings":"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CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,EAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,EAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,EAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,EAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,EAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,EAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,EAAA,EAAM,EAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,EAAI,CAAA;AAAA,EACf,EAAA,EAAI,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACf,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","file":"chunk-ZQRUAXGP.mjs","sourcesContent":["import type { ReactNode } from 'react'\n\n/**\n * Shared hero block — the SINGLE primitive for \"eyebrow + icon +\n * title + subtitle\" across the entire product, end to end.\n *\n * There are NO exceptions. Marketing pages, pitch decks, modals,\n * settings, section cards — all of them go through this component.\n * What varies is the `kind` (visual scale + density preset) and a\n * few escape props (iconShape / iconBackground / edit-mode).\n *\n * If a heading-shaped surface needs something HeroBlock can't\n * express, extend HeroBlock — don't fork a new primitive.\n */\nexport interface HeroBlockProps {\n /** Optional uppercase eyebrow above the title. */\n eyebrow?: string\n /** Title text. Required even in edit mode (used as fallback when\n * the controlled input is empty). */\n title: string\n /** When provided, the title renders as an `<input>` styled like\n * the heading — turns the block into an inline editor. */\n onTitleChange?: (next: string) => void\n /** Placeholder text shown in edit mode when title is empty. */\n titlePlaceholder?: string\n /** Optional subtitle below the title. */\n subtitle?: string\n /** Icon element rendered inside the bubble. For avatar-style\n * callers (round shape, own chrome), pass `<Avatar>` and set\n * `iconBackground=\"none\"` so HeroBlock doesn't wrap it again. */\n icon?: ReactNode\n /** Bubble background treatment:\n * - `glass` (default) — neutral glassy square bubble\n * - `gradient` — colored fill square bubble, requires `gradient` prop\n * - `none` — no wrapper at all; caller supplies its own chrome\n * (typically `<Avatar>`, an `<img>` with built-in radius, or\n * an inline icon that doesn't need a container) */\n iconBackground?: 'glass' | 'gradient' | 'none'\n /** Gradient classes for the bubble (used when\n * `iconBackground=\"gradient\"`). */\n gradient?: string\n /** Icon container size — `sm` 9×9, `md` 10×10, `lg` 12×12, `xl`\n * 16×16. */\n iconSize?: 'sm' | 'md' | 'lg' | 'xl'\n /** Optional content pinned to the right of the title row\n * (e.g. a status toggle, action buttons). */\n rightContent?: ReactNode\n /** Heading semantic level (controls the tag rendered + a11y\n * outline). Visual scale is independent — use `kind`. */\n headingLevel?: 'h1' | 'h2' | 'h3'\n /** Visual scale + density preset. Pick by intent, not by HTML:\n * - `section` → tiny header for cards/disclosures\n * - `surface` → page heading / modal sidebar / settings (default)\n * - `banner` → hero card (full-bleed page banner)\n * - `display` → marketing / pitch — massive, font-bold\n *\n * This is the ONLY knob that should control typography size — the\n * same primitive serves every surface in the product. There are\n * no \"marketing exceptions\". */\n kind?: 'section' | 'surface' | 'banner' | 'display'\n /** Element id for the heading (used for `aria-labelledby`). */\n headingId?: string\n /** Extra classes on the outer wrapper. */\n className?: string\n /** Optional free-form content rendered below the hero (description\n * editor, tag input, etc.). */\n children?: ReactNode\n /** Tone — controls default text color. `dark` is for use against\n * dark surfaces (pitch deck slides) where the slate-950 default\n * would be invisible. */\n tone?: 'default' | 'dark'\n}\n\nconst ICON_SIZE_CLASSES = {\n sm: 'h-9 w-9',\n md: 'h-10 w-10',\n lg: 'h-12 w-12',\n xl: 'h-16 w-16',\n} as const\n\n// Typography per `kind`. This is the canonical scale — every\n// consumer of HeroBlock picks from here. No bespoke font sizes\n// anywhere else in the product.\nconst KIND_HEADING_CLASSES = {\n section: 'text-base sm:text-lg font-semibold tracking-tight',\n surface: 'text-2xl font-semibold tracking-tight',\n banner: 'text-2xl sm:text-4xl font-semibold tracking-tight',\n display: 'text-5xl sm:text-6xl lg:text-7xl font-bold tracking-tight leading-[1.05]',\n} as const\n\nconst KIND_SUBTITLE_CLASSES = {\n section: 'mt-1 text-sm',\n surface: 'mt-1 text-sm',\n banner: 'mt-2 max-w-xl text-sm sm:mt-3 sm:text-lg',\n display: 'mt-4 max-w-2xl text-base sm:text-xl',\n} as const\n\n// WCAG 1.4.4: eyebrow stays ≥ 11px so it survives 200% zoom and\n// passes minimum legible size for uppercase + letter-spaced text.\nconst KIND_EYEBROW_CLASSES = {\n section: 'mb-1 text-[11px] font-semibold uppercase tracking-[0.18em]',\n surface: 'mb-2 text-[11px] font-semibold uppercase tracking-[0.22em]',\n banner: 'mb-3 text-xs font-semibold uppercase tracking-[0.22em]',\n display: 'mb-6 text-sm font-semibold uppercase tracking-[0.3em]',\n} as const\n\nconst KIND_ICON_GAP = {\n section: 'gap-3',\n surface: 'gap-3',\n banner: 'gap-4',\n display: 'gap-5',\n} as const\n\nexport function HeroBlock({\n eyebrow,\n title,\n onTitleChange,\n titlePlaceholder,\n subtitle,\n icon,\n iconBackground = 'glass',\n gradient,\n iconSize = 'md',\n rightContent,\n headingLevel = 'h1',\n kind = 'surface',\n headingId,\n className = '',\n children,\n tone = 'default',\n}: HeroBlockProps) {\n const HeadingTag = headingLevel\n const sizeClass = ICON_SIZE_CLASSES[iconSize]\n const headingClass = KIND_HEADING_CLASSES[kind]\n const subtitleClass = KIND_SUBTITLE_CLASSES[kind]\n const eyebrowClass = KIND_EYEBROW_CLASSES[kind]\n const iconGapClass = KIND_ICON_GAP[kind]\n // The glass/gradient bubble is always square — for round avatar\n // chrome the caller passes `iconBackground=\"none\"` + an `<Avatar>`\n // which carries its own circular shape.\n const radiusClass = iconSize === 'sm' ? 'rounded-xl' : 'rounded-2xl'\n\n // Tone-aware colors. Bumped from slate-500 → slate-600 / from\n // white/60 → white/75 so the eyebrow & subtitle pass WCAG 1.4.3\n // (4.5:1) over the glass `bg-white/75` backdrop.\n const titleToneClass = tone === 'dark'\n ? 'text-white'\n : 'text-slate-950 dark:text-white'\n const subtitleToneClass = tone === 'dark'\n ? 'text-white/75'\n : 'text-slate-600 dark:text-slate-300'\n const eyebrowToneClass = tone === 'dark'\n ? 'text-white/75'\n : 'text-slate-600 dark:text-slate-300'\n\n // Resolve the icon container chrome.\n const wrapIcon = (node: ReactNode) => {\n if (iconBackground === 'none') {\n // No wrapper — the caller (e.g. <Avatar>) brings its own\n // chrome. We just clamp the size so layout stays predictable.\n return <span className={`inline-flex shrink-0 items-center justify-center ${sizeClass}`}>{node}</span>\n }\n if (iconBackground === 'gradient' && gradient) {\n return <span className={`inline-flex shrink-0 items-center justify-center ${sizeClass} ${radiusClass} bg-gradient-to-br ${gradient} shadow-lg`}>{node}</span>\n }\n // glass (default)\n return (\n <span className={`inline-flex shrink-0 items-center justify-center ${sizeClass} ${radiusClass} border border-white/60 bg-white/75 shadow-sm backdrop-blur-xl dark:border-white/12 dark:bg-white/8`}>\n {node}\n </span>\n )\n }\n\n return (\n <div className={className}>\n {/* Eyebrow */}\n {eyebrow && (\n <p className={`${eyebrowClass} ${eyebrowToneClass}`}>{eyebrow}</p>\n )}\n\n {/* Icon + title + right-slot row */}\n <div className={`flex items-start ${iconGapClass}`}>\n {icon && wrapIcon(icon)}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-start justify-between gap-3\">\n {onTitleChange ? (\n // WCAG 1.4.11 + 2.4.7: 2px ring at /70 opacity gives ≥3:1\n // contrast against both light and dark surfaces, and the\n // focus indicator is unmistakable.\n <input\n type=\"text\"\n value={title}\n onChange={(event) => onTitleChange(event.target.value)}\n placeholder={titlePlaceholder}\n aria-label={titlePlaceholder ?? 'Title'}\n className={`block w-full truncate rounded-md bg-transparent px-1 -mx-1 outline-none placeholder:text-slate-400 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1 focus-visible:ring-offset-transparent ${titleToneClass} ${headingClass}`}\n />\n ) : (\n <HeadingTag id={headingId} className={`${titleToneClass} ${headingClass}`}>\n {title}\n </HeadingTag>\n )}\n {rightContent && <div className=\"shrink-0\">{rightContent}</div>}\n </div>\n {subtitle && (\n <p className={`${subtitleClass} ${subtitleToneClass}`}>{subtitle}</p>\n )}\n </div>\n </div>\n\n {/* Free-form body for editor variants (description, tags, etc.) */}\n {children && <div className=\"mt-3\">{children}</div>}\n </div>\n )\n}\n","import { useId, useState, type HTMLAttributes, type ReactNode } from 'react'\nimport { motion } from 'framer-motion'\nimport { ChevronDownIcon } from '@heroicons/react/24/outline'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\nimport { HeroBlock } from '@ui/components/hero-block'\n\n// ============================================================================\n// Base Card Components\n// ============================================================================\n\ntype CardProps = HTMLAttributes<HTMLDivElement> & {\n /** Card style variant */\n variant?: \"default\" | \"gradient\" | \"glass\" | \"elevated\"\n /** Enable hover lift animation */\n interactive?: boolean\n /** Enable press animation */\n pressable?: boolean\n /** Click handler (enables pressable automatically) */\n onPress?: () => void\n}\n\nexport function Card({\n className = \"\",\n variant = \"default\",\n interactive = false,\n pressable = false,\n onPress,\n ...props\n}: CardProps) {\n const baseClasses = \"rounded-2xl overflow-hidden\"\n\n const variantClasses = {\n default: \"liquid-surface\",\n gradient: \"liquid-surface bg-gradient-to-br from-white/75 via-white/60 to-sky-50/60 dark:from-slate-800/75 dark:via-slate-900/62 dark:to-slate-950/58\",\n glass: \"liquid-surface-strong\",\n elevated: \"liquid-surface-strong\",\n }\n\n const interactiveClasses = interactive\n ? \"transition-all duration-300 hover:-translate-y-1 hover:shadow-xl cursor-pointer\"\n : \"\"\n\n // If pressable or has onPress, use motion.div with press animation\n if (pressable || onPress) {\n // Omit event handlers that conflict with Framer Motion's event signatures\n const { onDrag, onDragStart, onDragEnd, onAnimationStart, onAnimationEnd, onAnimationIteration, ...restProps } = props\n return (\n <motion.div\n className={`${baseClasses} ${variantClasses[variant]} ${interactiveClasses} ${className}`}\n whileTap={{ scale: 0.98 }}\n whileHover={interactive ? { y: -4, boxShadow: \"0 20px 25px -5px rgb(0 0 0 / 0.1)\" } : undefined}\n transition={{ type: \"spring\", stiffness: 400, damping: 25 }}\n onClick={() => {\n if (onPress) {\n triggerHaptic(\"light\")\n onPress()\n }\n }}\n style={{ cursor: onPress ? \"pointer\" : undefined }}\n {...restProps}\n />\n )\n }\n\n return (\n <div\n className={`${baseClasses} ${variantClasses[variant]} ${interactiveClasses} ${className}`}\n {...props}\n />\n )\n}\n\nexport function CardHeader({ className = \"\", ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={`flex flex-col space-y-1.5 p-4 sm:p-6 ${className}`} {...props} />\n )\n}\n\nexport function CardTitle({ className = \"\", ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return (\n <h3 className={`text-lg font-semibold leading-none tracking-tight text-slate-900 dark:text-white ${className}`} {...props} />\n )\n}\n\nexport function CardDescription({ className = \"\", ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return (\n <p className={`text-sm text-slate-500 dark:text-slate-400 ${className}`} {...props} />\n )\n}\n\nexport function CardContent({ className = \"\", ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={`p-4 sm:p-6 pt-0 ${className}`} {...props} />\n}\n\nexport function CardFooter({ className = \"\", ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={`flex items-center p-4 sm:p-6 pt-0 ${className}`} {...props} />\n )\n}\n\n// Card divider for separating content sections\nexport function CardDivider({ className = \"\" }: { className?: string }) {\n return (\n <div className={`h-px bg-slate-200/60 dark:bg-slate-700/50 mx-4 sm:mx-6 ${className}`} />\n )\n}\n\n// ============================================================================\n// Section Card - Card with styled header (icon + title + subtitle)\n// ============================================================================\n\ntype SectionCardHeaderProps = {\n icon?: ReactNode\n /** Optional uppercase eyebrow above the title — mirrors the\n * HeroBlock eyebrow slot. Use for breadcrumb-style labels\n * (\"WORKSPACE / WORKFLOWS\") or section categorization. */\n eyebrow?: string\n title: string\n subtitle?: string\n /** Gradient classes for the icon background */\n gradient?: string\n /** Optional content on the right side */\n rightContent?: ReactNode\n}\n\ntype SectionCardProps = {\n /** Card header configuration */\n header: SectionCardHeaderProps\n /** Card body content */\n children: ReactNode\n /** Additional className for the card container */\n className?: string\n /** Whether to add padding to the body (default: true) */\n padded?: boolean\n /** Card variant */\n variant?: \"default\" | \"gradient\" | \"glass\" | \"elevated\"\n /** When true, header is clickable and toggles the body open/closed.\n * A chevron is rendered in the header that rotates with state. */\n collapsible?: boolean\n /** When `collapsible`, sets the initial state. Defaults to open. */\n defaultOpen?: boolean\n /** Controlled open state. When provided, the card becomes a\n * controlled component and `defaultOpen` is ignored. */\n open?: boolean\n /** Callback fired when the user toggles the header (controlled or\n * uncontrolled). */\n onOpenChange?: (open: boolean) => void\n // ── HeroSection-style slots (absorbed 2026-05) ───────────────────\n /** Optional top accent gradient stripe — same idiom as HeroSection.\n * Decorative, `aria-hidden`. Passes a Tailwind gradient class string\n * (e.g. \"from-indigo-500 via-purple-500 to-pink-500\"). */\n accentGradient?: string\n /** Optional action buttons pinned to the right of the title row.\n * Equivalent to HeroSection's `actions`. For collapsible cards\n * these stay visible (alongside the chevron). */\n actions?: ReactNode\n /** Optional toolbar (search / filter / create) rendered between\n * the header divider and the card body. */\n toolbar?: ReactNode\n /** Optional badges / pills rendered below the toolbar (e.g. tag\n * cloud, status chips). */\n badges?: ReactNode\n /** HeroBlock typography preset — controls how big the title /\n * subtitle / eyebrow render. Defaults to `section` (compact card\n * header). Set to `banner` for full page-banner cards (same look\n * as the legacy HeroSection); `surface` for modal sidebar style;\n * `display` for marketing hero scale. */\n kind?: 'section' | 'surface' | 'banner' | 'display'\n /** Heading semantic level — controls the rendered h-tag for the\n * card title. Defaults to `h3` to fit inside pages. Use `h1` for\n * page-banner cards where the SectionCard IS the page heading. */\n headingLevel?: 'h1' | 'h2' | 'h3'\n /** Optional content rendered next to the eyebrow (e.g. a tiny\n * entity count \"(12 itens)\" — same role as HeroSection's\n * `labelExtra`). */\n eyebrowExtra?: ReactNode\n}\n\n/**\n * Section Card with shared HeroBlock header (icon bubble + title +\n * subtitle). Used across dashboard pages and modals for consistent\n * section styling. Optionally collapsible.\n */\nexport function SectionCard({\n header,\n children,\n className = \"\",\n padded = true,\n variant = \"default\",\n collapsible = false,\n defaultOpen = true,\n open: controlledOpen,\n onOpenChange,\n accentGradient,\n actions,\n toolbar,\n badges,\n kind = 'section',\n headingLevel = 'h3',\n eyebrowExtra,\n}: SectionCardProps) {\n const { icon, eyebrow, title, subtitle, gradient = \"from-indigo-500 to-purple-600\", rightContent } = header\n // Note: `gradient` prop is ignored for the icon bubble — section\n // card icons render glassy to match pages and modals (single\n // visual vocabulary). Kept on the type for backwards compat.\n void gradient\n\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isOpen = controlledOpen ?? internalOpen\n const setOpen = (next: boolean) => {\n if (controlledOpen === undefined) setInternalOpen(next)\n onOpenChange?.(next)\n }\n\n // Unique id pair for ARIA wiring (aria-controls / aria-labelledby).\n // WCAG 4.1.2: a collapse trigger must point at the region it\n // controls so screen readers can announce both directions.\n const reactId = useId()\n const headingId = `${reactId}-heading`\n const bodyId = `${reactId}-body`\n\n // Chevron rotates when open. Mounted inside the header's right\n // slot so the existing `rightContent` (status pills, action btns)\n // still works — chevron renders to the LEFT of any caller rightContent.\n // `motion-safe:` so reduced-motion users get the instant state swap.\n const chevron = collapsible ? (\n <ChevronDownIcon\n className={`h-4 w-4 shrink-0 text-slate-500 motion-safe:transition-transform motion-safe:duration-200 ${isOpen ? 'rotate-0' : '-rotate-90'}`}\n aria-hidden=\"true\"\n />\n ) : null\n // Right slot composes (in order): caller rightContent → actions →\n // chevron (collapsible-only). All three are optional; the wrapper\n // only renders if at least one is present.\n const hasRightSlot = rightContent || actions || chevron\n const headerRight = hasRightSlot ? (\n <div className=\"flex items-center gap-2\">\n {rightContent}\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n {chevron}\n </div>\n ) : undefined\n\n // Icon size scales with the typography kind so larger banner /\n // display cards don't have a tiny chip-style icon next to a huge\n // title. `section` keeps the compact icon; everything bigger goes\n // to the medium bubble.\n const iconSize = kind === 'section' ? 'sm' : 'md'\n\n // Padding scales with kind too — section cards live inside dense\n // page layouts and want to be tight; banner/display variants stand\n // on their own as a page hero and need real breathing room.\n const sectionPad = 'px-4 sm:px-6 py-4'\n const surfacePad = 'px-5 sm:px-8 py-5'\n const bannerPad = 'px-5 sm:px-8 py-6 sm:py-8'\n const displayPad = 'px-6 sm:px-10 py-8 sm:py-12'\n const headerPadCls =\n kind === 'display' ? displayPad :\n kind === 'banner' ? bannerPad :\n kind === 'surface' ? surfacePad :\n sectionPad\n // Toolbar / body padding mirrors the horizontal header pad so\n // every row of the card visually aligns.\n const bodyPadCls =\n kind === 'display' ? 'p-6 sm:p-10' :\n kind === 'banner' ? 'p-5 sm:p-8' :\n kind === 'surface' ? 'p-5 sm:p-8' :\n 'p-4 sm:p-6'\n const slotXCls =\n kind === 'display' ? 'px-6 sm:px-10' :\n kind === 'banner' ? 'px-5 sm:px-8' :\n kind === 'surface' ? 'px-5 sm:px-8' :\n 'px-4 sm:px-6'\n\n // When the caller supplies an eyebrow + eyebrowExtra, render them\n // as a compound (eyebrow text plus a small adjacent slot — same\n // shape as HeroSection's `label` + `labelExtra`).\n const renderedEyebrow = eyebrow && eyebrowExtra\n ? `${eyebrow}` // HeroBlock eyebrow is a string; we render extra below via a custom layout\n : eyebrow\n\n const headerContent = (\n <HeroBlock\n headingLevel={headingLevel}\n kind={kind}\n iconSize={iconSize}\n iconBackground=\"glass\"\n icon={icon}\n eyebrow={renderedEyebrow}\n title={title}\n subtitle={subtitle}\n rightContent={headerRight}\n headingId={headingId}\n />\n )\n\n return (\n <Card variant={variant} className={className}>\n {/* Accent stripe — same idiom as HeroSection. Decorative, hidden\n from AT because color alone carries no meaning. */}\n {accentGradient && (\n <div\n aria-hidden=\"true\"\n className={`h-1.5 w-full bg-gradient-to-r ${accentGradient}`}\n />\n )}\n {collapsible ? (\n <button\n type=\"button\"\n onClick={() => setOpen(!isOpen)}\n aria-expanded={isOpen}\n aria-controls={bodyId}\n className={`block w-full cursor-pointer text-left transition-colors hover:bg-white/30 dark:hover:bg-white/[0.04] focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-inset ${headerPadCls} ${isOpen ? 'border-b liquid-divider' : ''}`}\n >\n {headerContent}\n </button>\n ) : (\n <div className={`${headerPadCls} border-b liquid-divider`}>\n {headerContent}\n </div>\n )}\n\n {/* Optional toolbar (search/filter/create) — sits between the\n header divider and the body. Padding mirrors the header. */}\n {toolbar && (!collapsible || isOpen) && (\n <div className={`${slotXCls} pt-5`}>{toolbar}</div>\n )}\n\n {/* Optional badges row — below the toolbar, above the body. */}\n {badges && (!collapsible || isOpen) && (\n <div className={`${slotXCls} pt-4 flex flex-wrap items-center gap-2`}>{badges}</div>\n )}\n\n {/* Body — hidden when collapsed. `hidden` attribute (not just\n conditional render) so AT can still associate `aria-controls`\n with the region, and `role=\"region\"` + `aria-labelledby`\n ties it back to the header. */}\n <div\n id={bodyId}\n role={collapsible ? 'region' : undefined}\n aria-labelledby={collapsible ? headingId : undefined}\n hidden={collapsible && !isOpen}\n className={padded ? bodyPadCls : ''}\n >\n {children}\n </div>\n </Card>\n )\n}\n\n// ============================================================================\n// List Card - Card optimized for list items\n// ============================================================================\n\ntype ListCardProps = {\n children: ReactNode\n className?: string\n variant?: \"default\" | \"glass\"\n}\n\nexport function ListCard({ children, className = \"\", variant = \"default\" }: ListCardProps) {\n return (\n <Card variant={variant} className={`divide-y liquid-divider ${className}`}>\n {children}\n </Card>\n )\n}\n\ntype ListCardItemProps = HTMLAttributes<HTMLDivElement> & {\n /** Left content (icon, avatar) */\n leading?: ReactNode\n /** Main content */\n children: ReactNode\n /** Right content (badge, button, chevron) */\n trailing?: ReactNode\n /** Enable press animation */\n pressable?: boolean\n /** Click handler */\n onPress?: () => void\n}\n\nexport function ListCardItem({\n leading,\n children,\n trailing,\n pressable = false,\n onPress,\n className = \"\",\n ...props\n}: ListCardItemProps) {\n const content = (\n <>\n {leading && <div className=\"shrink-0\">{leading}</div>}\n <div className=\"flex-1 min-w-0\">{children}</div>\n {trailing && <div className=\"shrink-0\">{trailing}</div>}\n </>\n )\n\n if (pressable || onPress) {\n // Omit event handlers that conflict with Framer Motion's event signatures\n const { onDrag, onDragStart, onDragEnd, onAnimationStart, onAnimationEnd, onAnimationIteration, ...restProps } = props\n return (\n <motion.div\n className={`flex items-center gap-3 px-4 py-3 cursor-pointer hover:bg-white/35 dark:hover:bg-white/5 transition-colors ${className}`}\n whileTap={{ backgroundColor: \"rgba(0,0,0,0.05)\" }}\n onClick={() => {\n if (onPress) {\n triggerHaptic(\"light\")\n onPress()\n }\n }}\n {...restProps}\n >\n {content}\n </motion.div>\n )\n }\n\n return (\n <div className={`flex items-center gap-3 px-4 py-3 ${className}`} {...props}>\n {content}\n </div>\n )\n}\n\nexport type { SectionCardProps, SectionCardHeaderProps }\n","import { forwardRef, useState, useCallback, useId, type InputHTMLAttributes } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { motion, AnimatePresence, useReducedMotion } from 'framer-motion'\nimport { XMarkIcon, EyeIcon, EyeSlashIcon, CheckCircleIcon } from '@heroicons/react/20/solid'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\nimport { springPresets, getTransition } from '@ui/lib/animations'\n\ntype InputProps = InputHTMLAttributes<HTMLInputElement> & {\n label?: string\n error?: string\n icon?: React.ReactNode\n /** Show clear button when input has value */\n clearable?: boolean\n /** Use floating label style */\n floatingLabel?: boolean\n /** Callback when clear button is clicked */\n onClear?: () => void\n /** Show password toggle for password fields */\n showPasswordToggle?: boolean\n /** Show character counter */\n showCharacterCount?: boolean\n /** Max characters for counter */\n maxCharacters?: number\n /** Show success state */\n success?: boolean\n /** Success message */\n successMessage?: string\n /** Helper text below input */\n helperText?: string\n /** iOS filled style (gray background, no border) */\n variant?: \"default\" | \"filled\"\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className = \"\",\n label,\n error,\n icon,\n type,\n clearable = false,\n floatingLabel = false,\n onClear,\n onFocus,\n onBlur,\n value,\n showPasswordToggle = false,\n showCharacterCount = false,\n maxCharacters,\n success = false,\n successMessage,\n helperText,\n variant = \"default\",\n ...props\n },\n ref\n ) => {\n const t = useTranslations(\"auth\")\n const autoId = useId()\n const inputId = props.id || autoId\n const errorId = `${inputId}-error`\n const helperId = `${inputId}-helper`\n const [isFocused, setIsFocused] = useState(false)\n const [showPassword, setShowPassword] = useState(false)\n const prefersReducedMotion = useReducedMotion()\n const hasValue = value !== undefined && value !== \"\"\n const characterCount = typeof value === \"string\" ? value.length : 0\n const isOverLimit = maxCharacters ? characterCount > maxCharacters : false\n const isFilled = variant === \"filled\"\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true)\n triggerHaptic(\"light\")\n onFocus?.(e)\n },\n [onFocus]\n )\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false)\n onBlur?.(e)\n },\n [onBlur]\n )\n\n const handleClear = useCallback(() => {\n triggerHaptic(\"light\")\n onClear?.()\n }, [onClear])\n\n const togglePassword = useCallback(() => {\n triggerHaptic(\"light\")\n setShowPassword(!showPassword)\n }, [showPassword])\n\n // Determine actual input type for password toggle\n const actualType = type === \"password\" && showPassword ? \"text\" : type\n\n const showClearButton = clearable && hasValue && (isFocused || hasValue)\n const isPasswordField = type === \"password\" && showPasswordToggle\n\n // Base classes with 44px minimum touch target\n const baseClasses = isFilled\n ? `\n liquid-surface h-12 w-full rounded-xl border-0\n px-4 py-3 text-base\n text-slate-900 dark:text-white\n placeholder:text-slate-500 dark:placeholder:text-slate-500\n transition-all duration-200\n disabled:cursor-not-allowed disabled:opacity-50\n `\n : `\n liquid-surface h-11 w-full rounded-xl\n px-3.5 py-2.5 text-base\n text-slate-900 dark:text-white\n placeholder:text-slate-500 dark:placeholder:text-slate-500\n transition-all duration-200\n disabled:cursor-not-allowed disabled:opacity-50\n `\n\n const focusClasses = isFilled\n ? isFocused\n ? \"bg-white/80 dark:bg-slate-900/58 ring-2 ring-ios-blue\"\n : \"\"\n : isFocused\n ? \"border-ios-blue ring-4 ring-ios-blue/10 shadow-[0_0_0_4px_rgba(0,122,255,0.1)]\"\n : \"\"\n\n const errorClasses = isFilled\n ? error\n ? \"ring-2 ring-ios-red bg-red-50/75 dark:bg-red-900/22\"\n : \"\"\n : error\n ? \"border-ios-red ring-4 ring-ios-red/10\"\n : \"\"\n\n const successClasses = success && !error\n ? isFilled\n ? \"ring-2 ring-ios-green\"\n : \"border-ios-green ring-4 ring-ios-green/10\"\n : \"\"\n\n const iconPadding = icon ? \"pl-11\" : \"\"\n // Calculate right padding based on what buttons are shown\n const rightButtons = [showClearButton, isPasswordField, success].filter(Boolean).length\n const clearPadding = rightButtons > 0 ? `pr-${11 + (rightButtons - 1) * 8}` : \"\"\n\n // Helper to render right-side buttons\n const renderRightButtons = () => (\n <div className=\"absolute flex items-center gap-1\" style={{ right: '0.75rem', top: '50%', transform: 'translateY(-50%)' }}>\n {/* Success checkmark */}\n <AnimatePresence>\n {success && !error && (\n <motion.div\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={getTransition(springPresets.bouncy)}\n >\n <CheckCircleIcon className=\"h-5 w-5 text-ios-green dark:text-ios-green-dark\" />\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Password toggle */}\n <AnimatePresence>\n {isPasswordField && (\n <motion.button\n type=\"button\"\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{ duration: 0.15 }}\n onClick={togglePassword}\n className=\"p-2 min-h-[44px] min-w-[44px] flex items-center justify-center rounded-full text-slate-400 hover:text-slate-600 dark:hover:text-slate-300 hover:bg-white/40 dark:hover:bg-white/[0.08] transition-colors\"\n aria-label={showPassword ? t(\"hidePassword\") : t(\"showPassword\")}\n >\n {showPassword ? (\n <EyeSlashIcon className=\"h-5 w-5\" />\n ) : (\n <EyeIcon className=\"h-5 w-5\" />\n )}\n </motion.button>\n )}\n </AnimatePresence>\n\n {/* Clear button */}\n <AnimatePresence>\n {showClearButton && (\n <motion.button\n type=\"button\"\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{ duration: 0.15 }}\n onClick={handleClear}\n className=\"p-2 min-h-[44px] min-w-[44px] flex items-center justify-center rounded-full text-slate-400 hover:text-slate-600 dark:hover:text-slate-300 hover:bg-white/40 dark:hover:bg-white/[0.08] transition-colors\"\n aria-label=\"Clear input\"\n>\n <XMarkIcon className=\"h-5 w-5\" />\n </motion.button>\n )}\n </AnimatePresence>\n </div>\n )\n\n // Helper to render footer (error, success, helper, character count)\n const renderFooter = () => (\n <div className=\"flex items-center justify-between mt-1.5\">\n <div className=\"flex-1\">\n {error && (\n <motion.p\n id={errorId}\n role=\"alert\"\n initial={{ opacity: 0, y: -5 }}\n animate={{ opacity: 1, y: 0 }}\n className=\"text-sm text-ios-red\"\n >\n {error}\n </motion.p>\n )}\n {!error && success && successMessage && (\n <motion.p\n id={helperId}\n initial={{ opacity: 0, y: -5 }}\n animate={{ opacity: 1, y: 0 }}\n className=\"text-sm text-ios-green dark:text-ios-green-dark\"\n >\n {successMessage}\n </motion.p>\n )}\n {!error && !successMessage && helperText && (\n <p id={helperId} className=\"text-sm text-slate-600 dark:text-slate-400\">{helperText}</p>\n )}\n </div>\n {showCharacterCount && (\n <span\n className={`text-xs ml-2 ${\n isOverLimit\n ? \"text-ios-red\"\n : characterCount > 0\n ? \"text-slate-500 dark:text-slate-400\"\n : \"text-slate-400 dark:text-slate-500\"\n }`}\n >\n {characterCount}{maxCharacters ? `/${maxCharacters}` : \"\"}\n </span>\n )}\n </div>\n )\n\n // Floating label styles\n if (floatingLabel && label) {\n return (\n <div className=\"space-y-1\">\n <div className=\"relative\">\n {icon && (\n <div className=\"absolute left-3.5 top-1/2 -translate-y-1/2 text-slate-400 dark:text-slate-500 z-10\">\n {icon}\n </div>\n )}\n\n <input\n type={actualType}\n ref={ref}\n id={inputId}\n value={value}\n onFocus={handleFocus}\n onBlur={handleBlur}\n maxLength={maxCharacters}\n aria-invalid={!!error}\n aria-describedby={error ? errorId : helperText ? helperId : undefined}\n className={`\n ${baseClasses}\n ${focusClasses}\n ${errorClasses}\n ${successClasses}\n ${iconPadding}\n pr-12\n ${className}\n peer pt-6 pb-2\n `}\n placeholder=\" \"\n {...props}\n />\n\n {/* Floating label */}\n {prefersReducedMotion ? (\n <label\n htmlFor={inputId}\n className={`\n absolute left-3.5 pointer-events-none\n text-slate-500 dark:text-slate-400\n transition-all duration-200\n ${icon ? \"left-11\" : \"\"}\n `}\n style={{\n top: hasValue || isFocused ? \"0.5rem\" : \"50%\",\n transform: hasValue || isFocused ? \"none\" : \"translateY(-50%)\",\n fontSize: hasValue || isFocused ? \"0.75rem\" : \"1rem\",\n }}\n >\n {label}\n </label>\n ) : (\n <motion.label\n htmlFor={inputId}\n className={`\n absolute left-3.5 pointer-events-none\n text-slate-500 dark:text-slate-400\n transition-all duration-200\n ${icon ? \"left-11\" : \"\"}\n `}\n initial={false}\n animate={{\n top: hasValue || isFocused ? \"0.5rem\" : \"50%\",\n y: hasValue || isFocused ? 0 : \"-50%\",\n fontSize: hasValue || isFocused ? \"0.75rem\" : \"1rem\",\n }}\n >\n {label}\n </motion.label>\n )}\n\n {renderRightButtons()}\n </div>\n {(error || success || helperText || showCharacterCount) && renderFooter()}\n </div>\n )\n }\n\n // Standard input with label above\n return (\n <div className=\"space-y-1.5\">\n {label && (\n <label htmlFor={inputId} className=\"block text-sm font-medium text-slate-700 dark:text-slate-300\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n {icon && (\n <div className=\"absolute left-3.5 top-1/2 -translate-y-1/2 text-slate-400 dark:text-slate-500\">\n {icon}\n </div>\n )}\n\n <input\n type={actualType}\n ref={ref}\n id={inputId}\n value={value}\n onFocus={handleFocus}\n onBlur={handleBlur}\n maxLength={maxCharacters}\n aria-invalid={!!error}\n aria-describedby={error ? errorId : helperText ? helperId : undefined}\n className={`\n ${baseClasses}\n ${focusClasses}\n ${errorClasses}\n ${successClasses}\n ${iconPadding}\n pr-12\n ${className}\n `}\n {...props}\n />\n\n {renderRightButtons()}\n </div>\n {(error || success || helperText || showCharacterCount) && renderFooter()}\n </div>\n )\n }\n)\n\nInput.displayName = \"Input\"\n\n/**\n * Password Input - Pre-configured input for passwords\n */\nexport const PasswordInput = forwardRef<HTMLInputElement, Omit<InputProps, 'type' | 'showPasswordToggle'>>(\n ({ variant = \"default\", icon, ...props }, ref) => (\n <Input\n ref={ref}\n type=\"password\"\n showPasswordToggle\n variant={variant}\n icon={icon}\n {...props}\n />\n )\n)\n\nPasswordInput.displayName = \"PasswordInput\"\n\n/**\n * Search Input - Pre-configured input for search\n */\nexport const SearchInput = forwardRef<HTMLInputElement, Omit<InputProps, 'type'>>(\n ({ icon, ...props }, ref) => (\n <Input\n ref={ref}\n type=\"search\"\n clearable\n icon={icon || (\n <svg className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n )}\n {...props}\n />\n )\n)\n\nSearchInput.displayName = \"SearchInput\"\n","import { Fragment, useEffect, useRef, useCallback } from 'react'\nimport { Dialog, DialogPanel, DialogTitle, Transition, TransitionChild } from '@headlessui/react'\nimport { motion, useMotionValue, useTransform, PanInfo } from 'framer-motion'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { springPresets } from '@ui/lib/animations'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\n\ntype SheetSide = 'bottom' | 'right'\ntype SheetSize = 'md' | 'lg' | 'xl'\n\ntype SheetProps = {\n /** Whether the sheet is open */\n open: boolean\n /** Callback when sheet should close */\n onClose: () => void\n /** Sheet content */\n children: React.ReactNode\n /** Title for accessibility */\n title?: string\n /** Show drag handle */\n showHandle?: boolean\n /** Snap points as percentages (e.g., ['50%', '90%']) — only for bottom side */\n snapPoints?: string[]\n /** Initial snap point index */\n initialSnap?: number\n /** Which side the sheet slides from */\n side?: SheetSide\n /** Width size for right-side sheet */\n size?: SheetSize\n}\n\nexport function Sheet({\n open,\n onClose,\n children,\n title,\n showHandle = true,\n snapPoints = ['90%'],\n side = 'bottom',\n size = 'md',\n}: SheetProps) {\n const isRight = side === 'right'\n const motionValue = useMotionValue(0)\n const sheetRef = useRef<HTMLDivElement>(null)\n\n // Background opacity based on drag\n const backdropOpacity = useTransform(motionValue, [0, 300], [1, 0])\n\n const handleDragEnd = useCallback(\n (_: MouseEvent | TouchEvent | PointerEvent, info: PanInfo) => {\n const shouldClose = isRight\n ? info.velocity.x > 500 || info.offset.x > 150\n : info.velocity.y > 500 || info.offset.y > 150\n\n if (shouldClose) {\n triggerHaptic('light')\n onClose()\n } else {\n motionValue.set(0)\n }\n },\n [onClose, motionValue, isRight]\n )\n\n // Reset position when opening\n useEffect(() => {\n if (open) {\n motionValue.set(0)\n }\n }, [open, motionValue])\n\n const maxHeight = snapPoints[snapPoints.length - 1]\n const rightSizeClass = size === 'xl'\n ? 'max-w-xl'\n : size === 'lg'\n ? 'max-w-lg'\n : 'max-w-md'\n\n return (\n <Transition show={open} as={Fragment}>\n <Dialog as=\"div\" className=\"relative z-50\" onClose={onClose}>\n {/* Backdrop */}\n <TransitionChild\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <motion.div\n className=\"fixed inset-0 bg-black/40 backdrop-blur-sm\"\n style={{ opacity: backdropOpacity }}\n />\n </TransitionChild>\n\n {/* Sheet container */}\n <div className=\"fixed inset-0 overflow-hidden\">\n <div className=\"absolute inset-0 overflow-hidden\">\n <div\n className={\n isRight\n ? 'pointer-events-none fixed inset-y-0 right-0 flex w-screen max-w-full justify-end'\n : 'pointer-events-none fixed inset-x-0 bottom-0 flex justify-center'\n }\n >\n <TransitionChild\n as={Fragment}\n enter=\"transform transition ease-out duration-300\"\n enterFrom={isRight ? 'translate-x-full' : 'translate-y-full'}\n enterTo={isRight ? 'translate-x-0' : 'translate-y-0'}\n leave=\"transform transition ease-in duration-200\"\n leaveFrom={isRight ? 'translate-x-0' : 'translate-y-0'}\n leaveTo={isRight ? 'translate-x-full' : 'translate-y-full'}\n >\n <DialogPanel\n as={motion.div}\n ref={sheetRef}\n drag={isRight ? 'x' : 'y'}\n dragConstraints={\n isRight\n ? { left: 0, right: 0 }\n : { top: 0, bottom: 0 }\n }\n dragElastic={\n isRight\n ? { left: 0.05, right: 0.5 }\n : { top: 0.05, bottom: 0.5 }\n }\n onDragEnd={handleDragEnd}\n style={isRight ? { x: motionValue } : { y: motionValue }}\n className={\n isRight\n ? `pointer-events-auto w-full ${rightSizeClass} h-full liquid-surface !rounded-none !rounded-l-3xl !shadow-2xl overflow-hidden`\n : `pointer-events-auto w-full max-w-lg liquid-surface !rounded-none !rounded-t-3xl !shadow-2xl overflow-hidden`\n }\n {...(!isRight ? { initial: { height: maxHeight } } : {})}\n >\n {/* Drag handle */}\n {showHandle && !isRight && (\n <div className=\"flex justify-center pt-3 pb-2 cursor-grab active:cursor-grabbing\">\n <div className=\"h-1 w-10 rounded-full bg-slate-400/50 dark:bg-slate-500/50\" />\n </div>\n )}\n\n {/* Title */}\n {title && (\n <DialogTitle className=\"px-6 py-3 text-lg font-semibold text-slate-900 dark:text-white border-b border-white/30 dark:border-white/10\">\n {title}\n </DialogTitle>\n )}\n\n {/* Content */}\n <div\n className=\"overflow-y-auto overscroll-contain\"\n style={isRight ? { height: '100%' } : { maxHeight: `calc(${maxHeight} - 60px)` }}\n >\n {children}\n </div>\n\n {/* Safe area padding for bottom */}\n {!isRight && <div className=\"h-safe-area-inset-bottom\" />}\n </DialogPanel>\n </TransitionChild>\n </div>\n </div>\n </div>\n </Dialog>\n </Transition>\n )\n}\n\n// Action Sheet variant\ntype ActionSheetAction = {\n label: string\n onClick: () => void\n destructive?: boolean\n disabled?: boolean\n}\n\ntype ActionSheetProps = {\n open: boolean\n onClose: () => void\n title?: string\n message?: string\n actions: ActionSheetAction[]\n}\n\nexport function ActionSheet({\n open,\n onClose,\n title,\n message,\n actions,\n}: ActionSheetProps) {\n const tCommon = useTranslations('common')\n\n const handleAction = (action: ActionSheetAction) => {\n if (action.disabled) return\n triggerHaptic('light')\n action.onClick()\n onClose()\n }\n\n return (\n <Sheet open={open} onClose={onClose} showHandle={false}>\n <div className=\"px-4 pt-4 pb-2\">\n {/* Header */}\n {(title || message) && (\n <div className=\"text-center mb-4\">\n {title && (\n <h3 className=\"text-sm font-semibold text-slate-500 dark:text-slate-400\">\n {title}\n </h3>\n )}\n {message && (\n <p className=\"text-sm text-slate-500 dark:text-slate-400 mt-1\">\n {message}\n </p>\n )}\n </div>\n )}\n\n {/* Actions */}\n <div className=\"space-y-2\">\n {actions.map((action, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => handleAction(action)}\n disabled={action.disabled}\n className={`\n w-full py-3 px-4 rounded-xl text-center font-medium\n transition-colors duration-150\n ${action.destructive\n ? 'text-[#FF3B30] bg-[#FF3B30]/10 hover:bg-[#FF3B30]/20'\n : 'text-[#007AFF] bg-[#007AFF]/10 hover:bg-[#007AFF]/20'\n }\n ${action.disabled ? 'opacity-50 cursor-not-allowed' : ''}\n `}\n >\n {action.label}\n </button>\n ))}\n </div>\n\n {/* Cancel button */}\n <button\n type=\"button\"\n onClick={onClose}\n className=\"liquid-surface w-full mt-2 py-3 px-4 rounded-xl text-center font-semibold\n text-slate-700 dark:text-slate-200\n hover:bg-white/45 dark:hover:bg-white/[0.10]\n transition-colors duration-150\n focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1\"\n >\n {tCommon('cancelDelete')}\n </button>\n </div>\n </Sheet>\n )\n}\n","import { useRef, useEffect, useState, useCallback } from 'react'\nimport { motion, useMotionValue, useTransform, animate, MotionValue } from 'framer-motion'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\n\ntype WheelPickerOption = {\n value: string\n label: string\n}\n\ntype WheelPickerProps = {\n /** Options to display */\n options: WheelPickerOption[] | string[]\n /** Currently selected value */\n value: string\n /** Callback when selection changes */\n onChange: (value: string) => void\n /** Number of visible items */\n visibleItems?: number\n /** Item height in pixels */\n itemHeight?: number\n}\n\ntype WheelPickerItemProps = {\n option: WheelPickerOption\n index: number\n y: MotionValue<number>\n itemHeight: number\n containerHeight: number\n isDragging: boolean\n onChange: (value: string) => void\n}\n\nconst ITEM_HEIGHT = 44\n\n/**\n * Individual wheel picker item with transform hooks\n */\nfunction WheelPickerItem({\n option,\n index,\n y,\n itemHeight,\n containerHeight,\n isDragging,\n onChange,\n}: WheelPickerItemProps) {\n // Calculate opacity and scale based on distance from center\n const itemY = useTransform(y, (latestY) => {\n const itemOffset = index * itemHeight + latestY\n const centerOffset = (containerHeight - itemHeight) / 2\n const distance = Math.abs(itemOffset - centerOffset)\n return distance\n })\n\n const opacity = useTransform(itemY, [0, itemHeight, itemHeight * 2], [1, 0.5, 0.3])\n const scale = useTransform(itemY, [0, itemHeight, itemHeight * 2], [1, 0.95, 0.9])\n\n return (\n <motion.div\n key={option.value}\n style={{ opacity, scale }}\n className=\"flex items-center justify-center cursor-grab active:cursor-grabbing\"\n onClick={() => {\n if (!isDragging) {\n triggerHaptic('light')\n onChange(option.value)\n }\n }}\n >\n <div\n className=\"text-center font-medium text-gray-900 dark:text-white select-none\"\n style={{ height: itemHeight, lineHeight: `${itemHeight}px` }}\n >\n {option.label}\n </div>\n </motion.div>\n )\n}\n\nexport function WheelPicker({\n options,\n value,\n onChange,\n visibleItems = 5,\n itemHeight = ITEM_HEIGHT,\n}: WheelPickerProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n const y = useMotionValue(0)\n const [isDragging, setIsDragging] = useState(false)\n\n // Normalize options\n const normalizedOptions: WheelPickerOption[] = options.map((opt) =>\n typeof opt === 'string' ? { value: opt, label: opt } : opt\n )\n\n const selectedIndex = normalizedOptions.findIndex((opt) => opt.value === value)\n const containerHeight = visibleItems * itemHeight\n\n // Calculate initial scroll position\n useEffect(() => {\n if (selectedIndex >= 0 && !isDragging) {\n const targetY = -selectedIndex * itemHeight\n animate(y, targetY, { type: 'spring', stiffness: 300, damping: 30 })\n }\n }, [selectedIndex, itemHeight, y, isDragging])\n\n // Handle drag end - snap to nearest item\n const handleDragEnd = useCallback(() => {\n setIsDragging(false)\n const currentY = y.get()\n const nearestIndex = Math.round(-currentY / itemHeight)\n const clampedIndex = Math.max(0, Math.min(nearestIndex, normalizedOptions.length - 1))\n const targetY = -clampedIndex * itemHeight\n\n animate(y, targetY, {\n type: 'spring',\n stiffness: 400,\n damping: 35,\n onComplete: () => {\n const newValue = normalizedOptions[clampedIndex]?.value\n if (newValue && newValue !== value) {\n triggerHaptic('selection')\n onChange(newValue)\n }\n },\n })\n }, [y, itemHeight, normalizedOptions, value, onChange])\n\n // Handle scroll/drag\n const handleDrag = useCallback(() => {\n if (!isDragging) setIsDragging(true)\n\n const currentY = y.get()\n const currentIndex = Math.round(-currentY / itemHeight)\n\n // Haptic feedback when crossing item boundaries\n if (currentIndex >= 0 && currentIndex < normalizedOptions.length) {\n const expectedY = -currentIndex * itemHeight\n if (Math.abs(currentY - expectedY) < 5) {\n triggerHaptic('selection')\n }\n }\n }, [y, itemHeight, normalizedOptions.length, isDragging])\n\n return (\n <div\n ref={containerRef}\n className=\"relative overflow-hidden\"\n style={{ height: containerHeight }}\n >\n {/* Gradient overlays for fade effect */}\n <div className=\"absolute inset-x-0 top-0 h-16 bg-gradient-to-b from-white dark:from-gray-900 to-transparent z-10 pointer-events-none\" />\n <div className=\"absolute inset-x-0 bottom-0 h-16 bg-gradient-to-t from-white dark:from-gray-900 to-transparent z-10 pointer-events-none\" />\n\n {/* Selection indicator */}\n <div\n className=\"absolute inset-x-4 z-0 rounded-lg bg-white/55 dark:bg-white/[0.08] border border-white/40 dark:border-white/10 backdrop-blur-md shadow-[inset_0_1px_1.5px_rgba(255,255,255,0.45)]\"\n style={{\n top: (containerHeight - itemHeight) / 2,\n height: itemHeight,\n }}\n />\n\n {/* Scrollable options */}\n <motion.div\n drag=\"y\"\n dragConstraints={{\n top: -(normalizedOptions.length - 1) * itemHeight,\n bottom: 0,\n }}\n dragElastic={0.1}\n onDrag={handleDrag}\n onDragEnd={handleDragEnd}\n style={{ y }}\n className=\"absolute inset-x-0\"\n >\n {/* Padding to center first/last items */}\n <div style={{ height: (containerHeight - itemHeight) / 2 }} />\n\n {normalizedOptions.map((option, index) => (\n <WheelPickerItem\n key={option.value}\n option={option}\n index={index}\n y={y}\n itemHeight={itemHeight}\n containerHeight={containerHeight}\n isDragging={isDragging}\n onChange={onChange}\n />\n ))}\n\n {/* Padding to center first/last items */}\n <div style={{ height: (containerHeight - itemHeight) / 2 }} />\n </motion.div>\n </div>\n )\n}\n\n// Multi-column picker (e.g., for date/time)\ntype MultiColumnPickerProps = {\n columns: {\n options: WheelPickerOption[] | string[]\n value: string\n onChange: (value: string) => void\n width: string\n }[]\n}\n\nexport function MultiColumnPicker({ columns }: MultiColumnPickerProps) {\n return (\n <div className=\"flex items-center justify-center gap-0 px-4 py-6\">\n {columns.map((column, index) => (\n <div\n key={index}\n className=\"flex-1\"\n style={{ maxWidth: column.width }}\n >\n <WheelPicker\n options={column.options}\n value={column.value}\n onChange={column.onChange}\n />\n </div>\n ))}\n </div>\n )\n}\n","import { forwardRef, useState, useCallback, type SelectHTMLAttributes } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { ChevronDownIcon, CheckIcon } from '@heroicons/react/20/solid'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\nimport { Sheet } from '@ui/components/sheet'\nimport { WheelPicker } from '@ui/components/wheel-picker'\n\ntype SelectOption = {\n value: string\n label: string\n disabled?: boolean\n}\n\ntype SelectProps = SelectHTMLAttributes<HTMLSelectElement> & {\n label?: string\n error?: string\n /** Options as array of objects or strings */\n options?: SelectOption[] | string[]\n /** Use wheel picker on mobile */\n useMobilePicker?: boolean\n /** Placeholder text */\n placeholder?: string\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n className = \"\",\n label,\n error,\n options = [],\n useMobilePicker = false,\n value,\n onChange,\n placeholder = \"Select...\",\n children,\n disabled,\n onFocus,\n onBlur,\n ...props\n },\n ref\n ) => {\n const [isOpen, setIsOpen] = useState(false)\n const [isFocused, setIsFocused] = useState(false)\n\n // Normalize options\n const normalizedOptions: SelectOption[] = options.map((opt) =>\n typeof opt === \"string\" ? { value: opt, label: opt } : opt\n )\n\n const selectedOption = normalizedOptions.find((opt) => opt.value === String(value))\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLSelectElement>) => {\n setIsFocused(true)\n triggerHaptic(\"light\")\n onFocus?.(e)\n },\n [onFocus]\n )\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLSelectElement>) => {\n setIsFocused(false)\n onBlur?.(e)\n },\n [onBlur]\n )\n\n const handlePickerChange = useCallback(\n (newValue: string) => {\n triggerHaptic(\"selection\")\n // Create a synthetic event for compatibility\n const syntheticEvent = {\n target: { value: newValue },\n currentTarget: { value: newValue },\n } as React.ChangeEvent<HTMLSelectElement>\n onChange?.(syntheticEvent)\n setIsOpen(false)\n },\n [onChange]\n )\n\n const handleOpenPicker = useCallback(() => {\n if (disabled) return\n triggerHaptic(\"light\")\n setIsOpen(true)\n }, [disabled])\n\n // Use the canonical `liquid-surface` chrome — same crystal layers\n // as cards/modals/MetricCard/Pagination — so a Select feels like\n // it belongs to the same family as every other surface. Focus\n // ring is the canonical indigo-500/70 via `.focus-ring`.\n const baseClasses = `\n liquid-surface flex h-11 w-full items-center justify-between\n rounded-xl px-3.5 py-2.5 text-base\n text-slate-900 dark:text-white\n transition-all duration-200\n disabled:cursor-not-allowed disabled:opacity-50\n focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1\n `\n\n // The focus-visible ring is on the element itself (Tailwind class),\n // so we no longer need a JS-driven isFocused border swap. Errors\n // get a red ring layered on top via the same idiom.\n const focusClasses = ''\n const errorClasses = error ? 'ring-2 ring-red-500/60' : ''\n\n // Mobile picker mode\n if (useMobilePicker && normalizedOptions.length > 0) {\n return (\n <div className=\"space-y-1.5\">\n {label && (\n <label className=\"block text-sm font-medium text-slate-700 dark:text-slate-300\">\n {label}\n </label>\n )}\n\n {/* Custom trigger button */}\n <button\n type=\"button\"\n onClick={handleOpenPicker}\n disabled={disabled}\n className={`\n ${baseClasses}\n ${focusClasses}\n ${errorClasses}\n ${className}\n cursor-pointer\n `}\n >\n <span className={selectedOption ? \"\" : \"text-slate-500\"}>\n {selectedOption?.label || placeholder}\n </span>\n <ChevronDownIcon\n className={`h-5 w-5 text-slate-500 transition-transform duration-200\n ${isOpen ? \"rotate-180\" : \"\"}`}\n />\n </button>\n\n {/* Hidden native select for form compatibility */}\n <select\n ref={ref}\n value={value}\n onChange={onChange}\n className=\"sr-only\"\n {...props}\n >\n {normalizedOptions.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))}\n </select>\n\n {/* Mobile sheet with wheel picker */}\n <Sheet open={isOpen} onClose={() => setIsOpen(false)} title={label}>\n <WheelPicker\n options={normalizedOptions}\n value={String(value) || normalizedOptions[0]?.value || \"\"}\n onChange={handlePickerChange}\n />\n <div className=\"px-4 pb-4\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(false)}\n className=\"w-full py-3 rounded-xl bg-ios-blue/90 text-white font-semibold\n hover:bg-ios-blue-hover/95 transition-colors\"\n >\n Done\n </button>\n </div>\n </Sheet>\n\n {error && <p className=\"text-sm text-ios-red\" role=\"alert\" aria-live=\"polite\">{error}</p>}\n </div>\n )\n }\n\n // Standard select with enhanced styling\n return (\n <div className=\"space-y-1.5\">\n {label && (\n <label className=\"block text-sm font-medium text-slate-700 dark:text-slate-300\">\n {label}\n </label>\n )}\n\n <div className=\"relative\">\n <select\n ref={ref}\n value={value}\n onChange={onChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n className={`\n ${baseClasses}\n ${focusClasses}\n ${errorClasses}\n ${className}\n appearance-none cursor-pointer pr-10\n `}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {normalizedOptions.length > 0\n ? normalizedOptions.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))\n : children}\n </select>\n\n {/* Custom chevron */}\n <ChevronDownIcon\n className=\"absolute right-3 top-1/2 -translate-y-1/2 h-5 w-5 text-slate-500 pointer-events-none\"\n />\n </div>\n\n {error && <p className=\"text-sm text-red-700 dark:text-red-300\" role=\"alert\" aria-live=\"polite\">{error}</p>}\n </div>\n )\n }\n)\n\nSelect.displayName = \"Select\"\n\n// Dropdown variant with custom options rendering\ntype DropdownSelectProps = {\n label?: string\n options: SelectOption[]\n value?: string\n onChange: (value: string) => void\n placeholder?: string\n disabled?: boolean\n error?: string\n}\n\nexport function DropdownSelect({\n label,\n options,\n value,\n onChange,\n placeholder = \"Select...\",\n disabled,\n error,\n}: DropdownSelectProps) {\n const [isOpen, setIsOpen] = useState(false)\n\n const selectedOption = options.find((opt) => opt.value === value)\n\n const handleSelect = (optionValue: string) => {\n triggerHaptic(\"selection\")\n onChange(optionValue)\n setIsOpen(false)\n }\n\n return (\n <div className=\"space-y-1.5 relative\">\n {label && (\n <label className=\"block text-sm font-medium text-slate-700 dark:text-slate-300\">\n {label}\n </label>\n )}\n\n <button\n type=\"button\"\n onClick={() => {\n if (!disabled) {\n triggerHaptic(\"light\")\n setIsOpen(!isOpen)\n }\n }}\n disabled={disabled}\n className={`\n flex h-11 w-full items-center justify-between\n rounded-xl border border-white/55 dark:border-white/14\n bg-white/68 dark:bg-slate-900/44 backdrop-blur-xl\n px-3.5 py-2.5 text-base\n text-slate-900 dark:text-white\n shadow-[inset_0_1px_0_rgba(255,255,255,0.88),0_10px_24px_-22px_rgba(15,23,42,0.72)]\n transition-all duration-200\n hover:bg-white/74 dark:hover:bg-slate-900/54\n disabled:cursor-not-allowed disabled:opacity-50\n ${isOpen ? \"border-ios-blue ring-4 ring-ios-blue/10\" : \"\"}\n ${error ? \"border-ios-red ring-4 ring-ios-red/10\" : \"\"}\n `}\n >\n <span className={selectedOption ? \"\" : \"text-slate-500\"}>\n {selectedOption?.label || placeholder}\n </span>\n <motion.div\n animate={{ rotate: isOpen ? 180 : 0 }}\n transition={{ duration: 0.2 }}\n >\n <ChevronDownIcon className=\"h-5 w-5 text-slate-500\" />\n </motion.div>\n </button>\n\n {/* Dropdown menu */}\n <AnimatePresence>\n {isOpen && (\n <>\n {/* Backdrop */}\n <div\n className=\"fixed inset-0 z-40\"\n onClick={() => setIsOpen(false)}\n />\n\n {/* Menu */}\n <motion.div\n initial={{ opacity: 0, y: -10, scale: 0.95 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: -10, scale: 0.95 }}\n transition={{ duration: 0.15 }}\n className=\"absolute z-50 mt-2 w-full\n bg-white/82 dark:bg-slate-900/64 backdrop-blur-2xl\n rounded-xl border border-white/55 dark:border-white/14\n shadow-xl overflow-hidden\"\n >\n <div className=\"max-h-60 overflow-auto py-1\">\n {options.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => handleSelect(option.value)}\n disabled={option.disabled}\n className={`\n w-full flex items-center justify-between px-4 py-3 text-left\n transition-colors duration-150\n ${option.value === value\n ? \"bg-ios-blue/10 text-ios-blue\"\n : \"text-slate-900 dark:text-white hover:bg-white/40 dark:hover:bg-white/[0.08]\"\n }\n ${option.disabled ? \"opacity-50 cursor-not-allowed\" : \"\"}\n `}\n >\n <span className=\"font-medium\">{option.label}</span>\n {option.value === value && (\n <CheckIcon className=\"h-5 w-5 text-ios-blue\" />\n )}\n </button>\n ))}\n </div>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n\n {error && <p className=\"text-sm text-ios-red\" role=\"alert\" aria-live=\"polite\">{error}</p>}\n </div>\n )\n}\n","import { motion } from 'framer-motion'\nimport { springPresets } from '@ui/lib/animations'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\n\nexport type ToggleSwitchColor = 'green' | 'blue' | 'indigo' | 'violet' | 'teal' | 'orange' | 'red'\n\ntype ToggleSwitchProps = {\n /** Whether the toggle is on */\n checked: boolean\n /** Callback when toggle changes */\n onChange: (checked: boolean) => void\n /** Disable the toggle */\n disabled?: boolean\n /** Size variant */\n size?: 'sm' | 'md' | 'lg'\n /** Color when checked (default: green) */\n color?: ToggleSwitchColor\n /** Accessible label */\n label?: string\n}\n\nconst colorStyles: Record<ToggleSwitchColor, { solid: string; glass: string }> = {\n green: { solid: 'bg-[#34C759]', glass: 'bg-emerald-500/80 backdrop-blur-sm' },\n blue: { solid: 'bg-[#007AFF]', glass: 'bg-blue-500/80 backdrop-blur-sm' },\n indigo: { solid: 'bg-indigo-500', glass: 'bg-indigo-500/80 backdrop-blur-sm' },\n violet: { solid: 'bg-violet-500', glass: 'bg-violet-500/80 backdrop-blur-sm' },\n teal: { solid: 'bg-teal-500', glass: 'bg-teal-500/80 backdrop-blur-sm' },\n orange: { solid: 'bg-orange-500', glass: 'bg-orange-500/80 backdrop-blur-sm' },\n red: { solid: 'bg-[#FF3B30]', glass: 'bg-red-500/80 backdrop-blur-sm' },\n}\n\nconst sizes = {\n sm: { track: 'w-10 h-6', thumb: 'h-5 w-5', translateX: 16 },\n md: { track: 'w-[51px] h-[31px]', thumb: 'h-[27px] w-[27px]', translateX: 20 },\n lg: { track: 'w-16 h-9', thumb: 'h-8 w-8', translateX: 28 },\n} as const\n\nexport function ToggleSwitch({\n checked,\n onChange,\n disabled = false,\n size = 'md',\n color = 'green',\n label,\n}: ToggleSwitchProps) {\n const sizeConfig = sizes[size]\n const checkedBg = colorStyles[color].glass\n\n const handleToggle = () => {\n if (disabled) return\n triggerHaptic('light')\n onChange(!checked)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleToggle()\n }\n }\n\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={label}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={`\n relative inline-flex shrink-0 cursor-pointer rounded-full\n transition-colors duration-200 ease-in-out\n focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-2\n ${sizeConfig.track}\n ${checked ? checkedBg : 'bg-gray-200 dark:bg-white/[0.08]'}\n ${disabled ? 'opacity-50 cursor-not-allowed' : ''}\n `}\n >\n {/* No `layout` prop — `animate.x` already drives position, and\n `layout` triggers an animation on every parent re-render (e.g.\n when a tab switch or workflow execution causes ancestors to\n re-render), which made the thumb appear to spuriously animate. */}\n <motion.span\n transition={springPresets.bouncy}\n className={`\n pointer-events-none inline-block rounded-full\n bg-white shadow-lg shadow-black/10\n ring-0\n ${sizeConfig.thumb}\n `}\n style={{\n marginTop: '2px',\n marginLeft: '2px',\n }}\n animate={{\n x: checked ? sizeConfig.translateX : 0,\n }}\n />\n </button>\n )\n}\n\n// Labeled variant for settings\ntype LabeledToggleProps = ToggleSwitchProps & {\n title: string\n description?: string\n}\n\nexport function LabeledToggle({\n title,\n description,\n checked,\n onChange,\n disabled,\n size = 'md',\n color,\n}: LabeledToggleProps) {\n return (\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {title}\n </p>\n {description && (\n <p className=\"text-sm text-gray-500 dark:text-gray-400 mt-0.5\">\n {description}\n </p>\n )}\n </div>\n <ToggleSwitch\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n size={size}\n color={color}\n label={title}\n />\n </div>\n )\n}\n","import { ToggleSwitch } from '@ui/components/toggle-switch'\nimport { motion } from 'framer-motion'\n\ntype ThemeToggleProps = {\n theme: 'light' | 'dark'\n onToggle: () => void\n lightModeLabel?: string\n darkModeLabel?: string\n}\n\nexport function ThemeToggle({\n theme,\n onToggle,\n lightModeLabel = 'Light mode',\n darkModeLabel = 'Dark mode',\n}: ThemeToggleProps) {\n const isDark = theme === \"dark\"\n\n return (\n <div\n className=\"flex items-center gap-2\"\n title={isDark ? lightModeLabel : darkModeLabel}\n >\n <motion.div\n animate={{ opacity: isDark ? 0.4 : 1, scale: isDark ? 0.9 : 1 }}\n transition={{ duration: 0.2 }}\n >\n <SunIcon />\n </motion.div>\n\n <ToggleSwitch\n checked={isDark}\n onChange={onToggle}\n size=\"sm\"\n label={isDark ? lightModeLabel : darkModeLabel}\n />\n\n <motion.div\n animate={{ opacity: isDark ? 1 : 0.4, scale: isDark ? 1 : 0.9 }}\n transition={{ duration: 0.2 }}\n >\n <MoonIcon />\n </motion.div>\n </div>\n )\n}\n\ntype ThemeToggleCompactProps = {\n theme: 'light' | 'dark'\n onToggle: () => void\n lightModeLabel?: string\n darkModeLabel?: string\n}\n\n// Compact version for tight spaces (icon button style)\nexport function ThemeToggleCompact({\n theme,\n onToggle,\n lightModeLabel = 'Light mode',\n darkModeLabel = 'Dark mode',\n}: ThemeToggleCompactProps) {\n return (\n <button\n onClick={onToggle}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-lg\n bg-gray-100 dark:bg-gray-800\n hover:bg-gray-200 dark:hover:bg-gray-700\n transition-colors\"\n title={theme === \"dark\" ? lightModeLabel : darkModeLabel}\n >\n <motion.div\n initial={false}\n animate={{ rotate: theme === \"dark\" ? 0 : 180 }}\n transition={{ type: \"spring\", stiffness: 200, damping: 20 }}\n >\n {theme === \"dark\" ? <SunIcon /> : <MoonIcon />}\n </motion.div>\n </button>\n )\n}\n\nfunction SunIcon() {\n return (\n <svg\n className=\"h-5 w-5 text-amber-500\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\"\n />\n </svg>\n )\n}\n\nfunction MoonIcon() {\n return (\n <svg\n className=\"h-5 w-5 text-indigo-400\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\"\n />\n </svg>\n )\n}\n","import type { ReactNode } from 'react'\n\ntype MetricCardTrend = {\n value: number\n label?: string\n formatValue?: (value: number) => string\n}\n\ntype MetricCardProps = {\n title: string\n value: string | number\n subtitle?: string\n icon?: ReactNode\n trend?: MetricCardTrend\n variant?: 'default' | 'success' | 'warning' | 'danger'\n}\n\nfunction defaultFormatTrendValue(value: number): string {\n const sign = value >= 0 ? '+' : '-'\n return `${sign}${Math.abs(value).toFixed(1)}%`\n}\n\n/**\n * Compact dashboard metric — title + value + optional trend + icon.\n *\n * Visual contract:\n * - Rest: neutral `liquid-surface` (transparent crystal — every\n * variant looks the same so dashboards read as a uniform\n * grid of glass tiles)\n * - Hover: a tinted overlay fades in matching the variant\n * (emerald / amber / red), giving the card an\n * \"illuminated\" feel — same crystal mechanic as buttons\n * - Icon bubble: stays tinted at rest so variants are still\n * distinguishable without hover (a11y: not relying on\n * interaction alone to convey state)\n *\n * This keeps MetricCard part of the same family as StatCard,\n * SectionCard, EntityCard — all neutral glass at rest, all\n * illuminate on engagement.\n */\nexport function MetricCard({\n title,\n value,\n subtitle,\n icon,\n trend,\n variant = 'default',\n}: MetricCardProps) {\n // Hover-only tint overlay. `default` stays neutral on hover too.\n // Group-hover keeps the effect attached to the card root so child\n // elements don't have to re-declare it.\n const hoverTint: Record<string, string> = {\n default: 'group-hover:bg-white/10 dark:group-hover:bg-white/5',\n success: 'group-hover:bg-emerald-500/15 dark:group-hover:bg-emerald-500/20',\n warning: 'group-hover:bg-amber-500/15 dark:group-hover:bg-amber-500/20',\n danger: 'group-hover:bg-red-500/15 dark:group-hover:bg-red-500/20',\n }\n\n // Icon bubble — `default` uses the canonical glass bubble (matches\n // HeroBlock/SectionCard icon treatment). Status variants get a\n // tinted bubble in the matching family so the metric's intent is\n // visible at rest (a11y: signal not gated behind hover).\n const iconStyles: Record<string, string> = {\n default:\n 'border border-white/60 bg-white/75 text-slate-700 ' +\n 'dark:border-white/12 dark:bg-white/8 dark:text-white',\n success: 'bg-emerald-500/20 text-emerald-700 dark:text-emerald-300',\n warning: 'bg-amber-500/20 text-amber-700 dark:text-amber-300',\n danger: 'bg-red-500/20 text-red-700 dark:text-red-300',\n }\n\n const trendColor = trend\n ? trend.value > 0\n ? 'text-emerald-700 dark:text-emerald-400'\n : trend.value < 0\n ? 'text-red-700 dark:text-red-400'\n : 'text-slate-600 dark:text-slate-400'\n : ''\n\n const formatTrend = trend?.formatValue ?? defaultFormatTrendValue\n\n return (\n <div className=\"group liquid-surface relative overflow-hidden rounded-xl p-5 transition-all hover:shadow-lg\">\n {/* Hover overlay — invisible at rest, illuminates on hover.\n motion-safe so reduced-motion users get an instant swap. */}\n <div\n aria-hidden\n className={`pointer-events-none absolute inset-0 transition-colors motion-safe:duration-300 ${hoverTint[variant]}`}\n />\n <div className=\"relative flex items-start justify-between\">\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-slate-600 dark:text-slate-300\">{title}</p>\n {/* Numeric value — bold + tabular-nums is allowed by DS for\n metric displays (same exception that StatCard uses). */}\n <p className=\"text-2xl font-bold tracking-tight tabular-nums text-slate-950 dark:text-white\">\n {value}\n </p>\n {subtitle && (\n <p className=\"text-xs text-slate-600 dark:text-slate-300\">{subtitle}</p>\n )}\n {trend && (\n <div className=\"flex items-center gap-1\">\n <span className={`text-xs font-medium tabular-nums ${trendColor}`}>\n {formatTrend(trend.value)}\n </span>\n {trend.label && (\n <span className=\"text-xs text-slate-600 dark:text-slate-300\">\n {trend.label}\n </span>\n )}\n </div>\n )}\n </div>\n {icon && (\n <div className={`flex h-10 w-10 items-center justify-center rounded-xl shadow-sm backdrop-blur-xl ${iconStyles[variant]}`}>\n {icon}\n </div>\n )}\n </div>\n </div>\n )\n}\n","/**\n * Chart specification produced by astrlabe workflow output nodes and rendered\n * by <ChartRenderer />. The shape is stable and mirrors what agents emit, so\n * any consumer (astrlabe dashboard, kori-erp embed) can render the same\n * payload.\n */\n\nexport type ChartType = 'line' | 'bar' | 'area'\n\nexport type ChartDataPoint = {\n /** X-axis value (typically a date or category). */\n x: string | number\n /** Y-axis value. One per series. Keyed by series name. */\n [seriesName: string]: string | number\n}\n\nexport type ChartSeriesStyle = {\n name: string\n color?: string\n}\n\nexport type ChartSpec = {\n type: ChartType\n title: string\n subtitle?: string\n xAxis: { key: string; label?: string }\n yAxis: { label?: string; unit?: string; domain?: [number, number] }\n series: ChartSeriesStyle[]\n data: ChartDataPoint[]\n annotations?: Array<{ x: string | number; label: string; color?: string }>\n}\n\nexport type SeriesComputed = {\n name: string\n color: string\n values: number[]\n}\n\nconst DEFAULT_COLORS = [\n '#6366f1', // indigo-500\n '#10b981', // emerald-500\n '#f59e0b', // amber-500\n '#ef4444', // red-500\n '#0ea5e9', // sky-500\n '#8b5cf6', // violet-500\n] as const\n\nexport function computeSeries(spec: ChartSpec): SeriesComputed[] {\n return spec.series.map((series, index) => ({\n name: series.name,\n color: series.color ?? DEFAULT_COLORS[index % DEFAULT_COLORS.length] ?? DEFAULT_COLORS[0],\n values: spec.data.map((point) => {\n const raw = point[series.name]\n const num = typeof raw === 'number' ? raw : Number(raw)\n return Number.isFinite(num) ? num : 0\n }),\n }))\n}\n\nexport function computeDomain(spec: ChartSpec, series: SeriesComputed[]): [number, number] {\n if (spec.yAxis.domain) return spec.yAxis.domain\n const allValues = series.flatMap((row) => row.values)\n if (allValues.length === 0) return [0, 1]\n const min = Math.min(...allValues)\n const max = Math.max(...allValues)\n if (min === max) {\n const padded = Math.abs(min) * 0.1 || 1\n return [min - padded, max + padded]\n }\n const padding = (max - min) * 0.1\n return [min - padding, max + padding]\n}\n\n/** Maps a numeric value to an SVG y-coordinate within [0, height]. */\nexport function yScale(value: number, domain: [number, number], height: number): number {\n const [min, max] = domain\n if (max === min) return height / 2\n const normalized = (value - min) / (max - min)\n return height - normalized * height\n}\n\n/** Maps an index to an SVG x-coordinate within [0, width]. */\nexport function xScale(index: number, count: number, width: number): number {\n if (count <= 1) return width / 2\n return (index / (count - 1)) * width\n}\n","import {\n computeDomain,\n computeSeries,\n xScale,\n yScale,\n type ChartSpec,\n type SeriesComputed,\n} from '@ui/types/chart-spec'\n\ntype ChartRendererProps = {\n spec: ChartSpec\n width?: number\n height?: number\n className?: string\n}\n\nconst MARGIN = { top: 24, right: 16, bottom: 32, left: 48 }\n\n/**\n * Renders a ChartSpec as a self-contained SVG chart. Supports line, bar, and\n * area types. Zero runtime dependencies beyond React — every app that imports\n * from `@datatechsolutions/ui` can show the same chart payload produced by\n * an astrlabe agent output.\n */\nexport function ChartRenderer({ spec, width = 640, height = 280, className }: ChartRendererProps) {\n const innerWidth = width - MARGIN.left - MARGIN.right\n const innerHeight = height - MARGIN.top - MARGIN.bottom\n const seriesComputed = computeSeries(spec)\n const domain = computeDomain(spec, seriesComputed)\n const count = spec.data.length\n const yTicks = buildTicks(domain[0], domain[1], 4)\n\n return (\n <figure className={className ?? 'w-full'}>\n <figcaption className=\"mb-2\">\n <h4 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{spec.title}</h4>\n {spec.subtitle && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{spec.subtitle}</p>\n )}\n </figcaption>\n\n <svg\n role=\"img\"\n aria-label={spec.title}\n viewBox={`0 0 ${width} ${height}`}\n className=\"w-full overflow-visible text-slate-600 dark:text-slate-400\"\n >\n <g transform={`translate(${MARGIN.left},${MARGIN.top})`}>\n {yTicks.map((tick) => {\n const y = yScale(tick, domain, innerHeight)\n return (\n <g key={`y-${tick}`}>\n <line x1={0} x2={innerWidth} y1={y} y2={y} stroke=\"currentColor\" strokeOpacity={0.08} />\n <text\n x={-8}\n y={y}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n className=\"fill-current text-[10px] font-mono\"\n >\n {formatTick(tick, spec.yAxis.unit)}\n </text>\n </g>\n )\n })}\n\n <line\n x1={0}\n x2={innerWidth}\n y1={innerHeight}\n y2={innerHeight}\n stroke=\"currentColor\"\n strokeOpacity={0.2}\n />\n\n {count > 0 && renderXLabels(spec.data, count, innerWidth, innerHeight)}\n\n {seriesComputed.map((series, index) =>\n spec.type === 'bar'\n ? renderBars(series, index, seriesComputed.length, count, domain, innerWidth, innerHeight)\n : renderLine(series, spec.type, count, domain, innerWidth, innerHeight),\n )}\n\n {spec.annotations?.map((annotation, index) => {\n const xIndex = spec.data.findIndex((point) => point.x === annotation.x)\n if (xIndex < 0) return null\n const x = xScale(xIndex, count, innerWidth)\n const color = annotation.color ?? '#f43f5e'\n return (\n <g key={`ann-${index}`}>\n <line\n x1={x}\n x2={x}\n y1={0}\n y2={innerHeight}\n stroke={color}\n strokeDasharray=\"4 3\"\n strokeWidth={1}\n />\n <text\n x={x + 4}\n y={10}\n fill={color}\n className=\"text-[10px] font-medium\"\n >\n {annotation.label}\n </text>\n </g>\n )\n })}\n </g>\n </svg>\n\n <ul className=\"mt-2 flex flex-wrap gap-3 text-xs text-slate-600 dark:text-slate-400\">\n {seriesComputed.map((series) => (\n <li key={series.name} className=\"flex items-center gap-1.5\">\n <span\n className=\"inline-block h-2 w-2 rounded-full\"\n style={{ backgroundColor: series.color }}\n aria-hidden\n />\n <span>{series.name}</span>\n </li>\n ))}\n </ul>\n </figure>\n )\n}\n\nfunction buildTicks(min: number, max: number, count: number): number[] {\n if (count <= 1) return [min]\n const step = (max - min) / (count - 1)\n const ticks: number[] = []\n for (let index = 0; index < count; index += 1) {\n ticks.push(min + step * index)\n }\n return ticks\n}\n\nfunction formatTick(value: number, unit?: string): string {\n const formatted = Math.abs(value) >= 1000\n ? value.toFixed(0)\n : value.toFixed(Math.abs(value) < 10 ? 2 : 1)\n return unit ? `${formatted}${unit}` : formatted\n}\n\nfunction renderXLabels(\n data: Array<{ x: string | number }>,\n count: number,\n width: number,\n height: number,\n) {\n const indexes = count > 6\n ? [0, Math.floor(count / 3), Math.floor((2 * count) / 3), count - 1]\n : Array.from({ length: count }, (_, index) => index)\n return indexes.map((index) => {\n const x = xScale(index, count, width)\n const label = String(data[index]?.x ?? '')\n return (\n <text\n key={`x-${index}`}\n x={x}\n y={height + 16}\n textAnchor=\"middle\"\n className=\"fill-current text-[10px] font-mono\"\n >\n {label}\n </text>\n )\n })\n}\n\nfunction renderLine(\n series: SeriesComputed,\n type: ChartSpec['type'],\n count: number,\n domain: [number, number],\n width: number,\n height: number,\n) {\n const points = series.values.map((value, index) => ({\n x: xScale(index, count, width),\n y: yScale(value, domain, height),\n }))\n const linePath = points.reduce((acc, point, index) => (\n index === 0 ? `M${point.x},${point.y}` : `${acc} L${point.x},${point.y}`\n ), '')\n\n const areaPath = type === 'area' && points.length > 0\n ? `${linePath} L${points[points.length - 1]?.x ?? 0},${height} L${points[0]?.x ?? 0},${height} Z`\n : null\n\n return (\n <g key={series.name}>\n {areaPath && <path d={areaPath} fill={series.color} fillOpacity={0.15} />}\n <path d={linePath} stroke={series.color} strokeWidth={2} fill=\"none\" />\n {points.map((point, index) => (\n <circle key={`${series.name}-${index}`} cx={point.x} cy={point.y} r={2.5} fill={series.color} />\n ))}\n </g>\n )\n}\n\nfunction renderBars(\n series: SeriesComputed,\n seriesIndex: number,\n seriesCount: number,\n count: number,\n domain: [number, number],\n width: number,\n height: number,\n) {\n const slot = count > 1 ? width / (count - 1) : width\n const barWidth = Math.max(2, (slot * 0.8) / seriesCount)\n const offset = (seriesCount * barWidth) / 2\n\n return (\n <g key={series.name}>\n {series.values.map((value, index) => {\n const cx = xScale(index, count, width)\n const barX = cx - offset + seriesIndex * barWidth\n const y = yScale(value, domain, height)\n const barHeight = height - y\n return (\n <rect\n key={`${series.name}-${index}`}\n x={barX}\n y={y}\n width={barWidth}\n height={Math.max(0, barHeight)}\n fill={series.color}\n fillOpacity={0.85}\n rx={2}\n />\n )\n })}\n </g>\n )\n}\n","import type { ReactNode } from 'react'\n\nexport interface ItemSummaryMetadata {\n label: string\n value: ReactNode\n}\n\ninterface ItemSummaryProps {\n icon?: ReactNode\n title: ReactNode\n subtitle?: ReactNode\n metadata?: ItemSummaryMetadata[]\n iconContainerClassName?: string\n titleClassName?: string\n subtitleClassName?: string\n metadataContainerClassName?: string\n metadataLabelClassName?: string\n metadataValueClassName?: string\n}\n\nexport function ItemSummary({\n icon,\n title,\n subtitle,\n metadata,\n iconContainerClassName = 'flex size-10 flex-shrink-0 items-center justify-center rounded-lg bg-indigo-100 dark:bg-indigo-900/30',\n titleClassName = 'truncate text-sm font-semibold text-gray-900 dark:text-white',\n subtitleClassName = 'truncate text-xs text-gray-500 dark:text-gray-400',\n metadataContainerClassName = 'mt-2 flex flex-wrap gap-3',\n metadataLabelClassName = 'text-xs text-gray-500 dark:text-gray-400',\n metadataValueClassName = 'text-xs font-medium text-gray-900 dark:text-white',\n}: ItemSummaryProps) {\n return (\n <div className=\"flex flex-1 min-w-0 items-start gap-3\">\n {icon ? <div className={iconContainerClassName}>{icon}</div> : null}\n <div className=\"min-w-0 flex-1\">\n <div className={titleClassName}>{title}</div>\n {subtitle ? <div className={subtitleClassName}>{subtitle}</div> : null}\n {metadata && metadata.length > 0 ? (\n <div className={metadataContainerClassName}>\n {metadata.map((metadataItem, index) => (\n <div key={index} className=\"flex flex-col\">\n <span className={metadataLabelClassName}>{metadataItem.label}</span>\n <span className={metadataValueClassName}>{metadataItem.value}</span>\n </div>\n ))}\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n","/**\n * EntityCard Component\n * ====================\n *\n * Standardized card for all entity pages (stations, products, competitors, users, rules).\n * Single source of truth for card styling: glassmorphism, padding, rounding, hover, status badges.\n */\n\n'use client'\n\nimport type { HTMLAttributes, KeyboardEvent, ReactNode } from 'react'\nimport { useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Card } from '@ui/components/card'\nimport { ItemSummary } from '@ui/components/item-summary'\n\ntype EntityCardDragProps = Pick<\n HTMLAttributes<HTMLDivElement>,\n 'draggable' | 'onDragStart' | 'onDragEnd' | 'onDragOver' | 'onDrop'\n>\n\nexport interface EntityCardProps {\n /** Leading element: icon box, color badge, avatar */\n icon?: ReactNode\n /** Primary title */\n title: ReactNode\n /** Secondary line (ID, email, etc.) */\n subtitle?: ReactNode\n /** Status badge — pass true/false for active/inactive, or a ReactNode for custom */\n status?: boolean | ReactNode\n /** Optional top color accent bar (gradient classes, e.g. \"from-green-500 to-emerald-600\") */\n accentGradient?: string\n /** Card body content (metadata, pills, tags, etc.) */\n children?: ReactNode\n /** Footer actions (edit/delete buttons) — rendered below a border-t divider */\n footer?: ReactNode\n /** Full-card click handler */\n onClick?: () => void\n /** Additional className */\n className?: string\n /** HTML div props for drag-and-drop */\n dragProps?: EntityCardDragProps\n}\n\nfunction isPlainTextTitle(title: ReactNode): title is string | number {\n return typeof title === 'string' || typeof title === 'number'\n}\n\nfunction getTestIdFromTitle(title: ReactNode): string {\n if (isPlainTextTitle(title)) {\n return `entity-card-${String(title).toLowerCase().replace(/\\s+/g, '-')}`\n }\n return 'entity-card'\n}\n\nfunction StatusBadgeInternal({ status }: { status: boolean | ReactNode }) {\n const tCommon = useTranslations('common')\n\n if (typeof status !== 'boolean') {\n return <>{status}</>\n }\n\n // Status pill uses the same crystal-glass mechanic as StatusBadge —\n // /20 tint + /30 border + 700/300 text — so cards stay in the\n // same visual family as the rest of the DS.\n return (\n <span\n role=\"status\"\n className={`shrink-0 inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 text-xs font-semibold backdrop-blur-sm ${\n status\n ? 'border-emerald-500/30 bg-emerald-500/20 text-emerald-700 dark:text-emerald-300'\n : 'border-slate-500/30 bg-slate-500/20 text-slate-700 dark:text-slate-300'\n }`}\n >\n <span className={`h-1.5 w-1.5 rounded-full ${status ? 'bg-emerald-500' : 'bg-slate-500'}`} aria-hidden />\n {status ? tCommon('active') : tCommon('inactive')}\n </span>\n )\n}\n\nexport function EntityCard({\n icon,\n title,\n subtitle,\n status,\n accentGradient,\n children,\n footer,\n onClick,\n className = '',\n dragProps,\n}: EntityCardProps) {\n const isInteractive = Boolean(onClick)\n const plainTextTitle = isPlainTextTitle(title) ? String(title) : undefined\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (onClick && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault()\n onClick()\n }\n },\n [onClick],\n )\n\n return (\n <Card\n role={isInteractive ? 'article' : 'listitem'}\n aria-label={isInteractive ? plainTextTitle : undefined}\n data-testid={getTestIdFromTitle(title)}\n tabIndex={isInteractive ? 0 : undefined}\n onKeyDown={isInteractive ? handleKeyDown : undefined}\n className={`group overflow-hidden transition-all duration-200 hover:-translate-y-0.5 hover:shadow-md ${\n isInteractive ? 'cursor-pointer' : ''\n } ${className}`}\n onPress={onClick}\n pressable={isInteractive}\n {...dragProps}\n >\n {/* Accent gradient bar */}\n {accentGradient && (\n <div className={`h-1.5 w-full bg-gradient-to-r ${accentGradient}`} />\n )}\n\n <div className=\"p-4\">\n {/* Header: Icon + Title/Subtitle + Status */}\n <div className=\"flex items-start justify-between gap-3\">\n <div data-testid=\"entity-card-title\">\n <ItemSummary\n icon={icon}\n title={title}\n subtitle={subtitle ? <span data-testid=\"entity-card-subtitle\">{subtitle}</span> : undefined}\n iconContainerClassName=\"shrink-0\"\n titleClassName={isPlainTextTitle(title) ? 'truncate font-semibold text-slate-900 dark:text-white' : 'font-semibold text-slate-900 dark:text-white'}\n subtitleClassName=\"mt-0.5 text-xs text-slate-500 dark:text-slate-400\"\n />\n </div>\n\n {status !== undefined && (\n <StatusBadgeInternal status={status} />\n )}\n </div>\n\n {/* Body content */}\n {children && (\n <div className=\"mt-3\">\n {children}\n </div>\n )}\n\n {/* Footer with divider — revealed on hover/tap */}\n {footer && (\n <div className=\"liquid-divider mt-3 border-t pt-3 flex gap-2 justify-end opacity-0 transition-opacity duration-200 group-hover:opacity-100 group-focus-within:opacity-100\">\n {footer}\n </div>\n )}\n </div>\n </Card>\n )\n}\n","import { forwardRef, type ComponentType } from 'react'\n\nexport type StatusBadgeTone = 'success' | 'error' | 'warning' | 'info' | 'neutral'\nexport type StatusType =\n | 'pending' | 'approved' | 'rejected'\n | 'active' | 'inactive'\n | 'processing' | 'error' | 'success'\n | string\n\nexport type StatusBadgeConfig = {\n label: string\n icon?: ComponentType<{ className?: string }>\n tone?: StatusBadgeTone\n animateIcon?: boolean\n}\n\ntype LegacyStatusBadgeProps = {\n status: string\n label?: string\n size?: 'sm' | 'md'\n className?: string\n statusConfig?: never\n}\n\ntype ConfigurableStatusBadgeProps = {\n status: string\n statusConfig: Record<string, StatusBadgeConfig>\n label?: string\n size?: 'sm' | 'md'\n className?: string\n}\n\nexport type StatusBadgeProps = LegacyStatusBadgeProps | ConfigurableStatusBadgeProps\n\ntype ToneStyle = {\n container: string\n dot: string\n}\n\n// WCAG 1.4.3: text bumped to the 700 step on light bg / 300 step on\n// dark bg so each combo passes AA 4.5:1 over the /20 tinted surface.\n// Opacity ratios standardized to /20 fill + /30 border across tones.\nconst TONE_STYLES: Record<StatusBadgeTone, ToneStyle> = {\n error: { container: 'border-red-500/30 bg-red-500/20 text-red-700 dark:text-red-300', dot: 'bg-red-500' },\n warning: { container: 'border-amber-500/30 bg-amber-500/20 text-amber-700 dark:text-amber-300', dot: 'bg-amber-500' },\n info: { container: 'border-blue-500/30 bg-blue-500/20 text-blue-700 dark:text-blue-300', dot: 'bg-blue-500' },\n neutral: { container: 'border-slate-500/30 bg-slate-500/20 text-slate-700 dark:text-slate-300', dot: 'bg-slate-500' },\n success: { container: 'border-emerald-500/30 bg-emerald-500/20 text-emerald-700 dark:text-emerald-300', dot: 'bg-emerald-500' },\n}\n\n// Legacy status strings → semantic tones. The legacy API (calling\n// `<StatusBadge status=\"active\" />` without `statusConfig`) still\n// works, but it now resolves through TONE_STYLES instead of the\n// removed hand-rolled bg-yellow-50/border-green-200 palette. Visual\n// output is uniform with the rest of the design system.\nconst LEGACY_STATUS_TO_TONE: Record<string, StatusBadgeTone> = {\n pending: 'warning',\n approved: 'success',\n active: 'success',\n success: 'success',\n rejected: 'error',\n error: 'error',\n inactive: 'neutral',\n processing: 'info',\n}\n\nconst SIZE_STYLES: Record<'sm' | 'md', string> = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-1 text-xs',\n}\n\nexport const StatusBadge = forwardRef<HTMLDivElement, StatusBadgeProps>(function StatusBadge(\n { status, label, size = 'md', className = '', ...props },\n ref\n) {\n // Resolve the tone + label + icon, regardless of which API the caller\n // used. Configurable mode wins; otherwise legacy status maps to tone.\n let tone: StatusBadgeTone\n let resolvedLabel: string\n let IconComponent: ComponentType<{ className?: string }> | undefined\n let animateIcon = false\n\n if ('statusConfig' in props && props.statusConfig) {\n const configuredStatus = props.statusConfig[status]\n if (!configuredStatus) return null\n tone = configuredStatus.tone ?? 'neutral'\n resolvedLabel = label ?? configuredStatus.label\n IconComponent = configuredStatus.icon\n animateIcon = configuredStatus.animateIcon ?? false\n } else {\n tone = LEGACY_STATUS_TO_TONE[status] ?? 'neutral'\n resolvedLabel = label ?? status\n }\n\n const toneStyle = TONE_STYLES[tone]\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={`Status: ${resolvedLabel}`}\n data-testid={`status-badge-${status}`}\n // Stronger glass: backdrop-blur-xl + saturate boost + inset\n // white highlight on top edge + colored drop shadow — mirrors\n // the `liquid-button` crystal treatment so status pills feel\n // like translucent jewels instead of flat colored chips.\n style={{\n backdropFilter: 'blur(12px) saturate(1.5)',\n WebkitBackdropFilter: 'blur(12px) saturate(1.5)',\n boxShadow:\n 'inset 0 1px 1.5px rgba(255,255,255,0.45), 0 1px 3px -1px rgba(15,23,42,0.12)',\n }}\n className={`inline-flex items-center gap-1.5 rounded-full border font-semibold ${SIZE_STYLES[size]} ${toneStyle.container} ${className}`}\n >\n {IconComponent ? (\n <IconComponent className={`h-3 w-3 ${animateIcon ? 'animate-spin motion-reduce:animate-none' : ''}`} />\n ) : (\n <span className={`h-2 w-2 rounded-full ${toneStyle.dot}`} />\n )}\n {resolvedLabel}\n </div>\n )\n})\n","import type { ReactNode } from 'react'\nimport { CheckIcon } from '@heroicons/react/24/solid'\n\nexport type StepTimelineStatus = 'complete' | 'current' | 'upcoming'\n\nexport interface StepTimelineItem {\n id: string\n name: string\n description: string\n status: StepTimelineStatus\n}\n\nexport interface StepTimelineProps<TStep extends StepTimelineItem> {\n steps: TStep[]\n progressLabel: string\n onStepClick?: (stepIndex: number) => void\n renderCompleteContent?: (step: TStep) => ReactNode\n}\n\nfunction classNames(...classes: (string | boolean | undefined)[]) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport function StepTimeline<TStep extends StepTimelineItem>({\n steps,\n progressLabel,\n onStepClick,\n renderCompleteContent,\n}: StepTimelineProps<TStep>) {\n return (\n <div className=\"lg:border-t lg:border-b lg:border-gray-200 dark:lg:border-white/15\">\n <nav aria-label={progressLabel} className=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n <ol\n role=\"list\"\n className=\"overflow-hidden rounded-md lg:flex lg:rounded-none lg:border-r lg:border-l lg:border-gray-200 dark:lg:border-white/15\"\n >\n {steps.map((step, stepIndex) => (\n <li key={step.id} className=\"relative overflow-hidden lg:flex-1\">\n <button\n type=\"button\"\n onClick={() => onStepClick?.(stepIndex)}\n disabled={step.status === 'upcoming'}\n className={classNames(\n step.status === 'upcoming' ? 'cursor-not-allowed' : 'cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800',\n stepIndex === 0 ? 'rounded-t-md border-b-0' : '',\n stepIndex === steps.length - 1 ? 'rounded-b-md border-t-0' : '',\n 'w-full overflow-hidden border border-gray-200 text-left transition-colors lg:border-0 dark:border-white/15'\n )}\n >\n {step.status === 'complete' ? (\n <div className=\"group\">\n <span\n aria-hidden=\"true\"\n className=\"absolute top-0 left-0 h-full w-1 bg-transparent group-hover:bg-gray-200 lg:top-auto lg:bottom-0 lg:h-1 lg:w-full dark:group-hover:bg-white/20\"\n />\n {renderCompleteContent ? (\n renderCompleteContent(step)\n ) : (\n <span className={classNames(stepIndex !== 0 ? 'lg:pl-9' : '', 'flex items-start px-6 py-5 text-sm font-medium')}>\n <span className=\"shrink-0\">\n <span className=\"flex h-9 w-9 items-center justify-center rounded-full bg-blue-600 dark:bg-blue-500\">\n <CheckIcon aria-hidden=\"true\" className=\"h-5 w-5 text-white\" />\n </span>\n </span>\n <span className=\"mt-0.5 ml-4 flex min-w-0 flex-col\">\n <span className=\"text-sm font-medium text-gray-900 dark:text-white\">{step.name}</span>\n <span className=\"text-sm font-medium text-gray-500 dark:text-gray-400\">{step.description}</span>\n </span>\n </span>\n )}\n </div>\n ) : step.status === 'current' ? (\n <div aria-current=\"step\">\n <span\n aria-hidden=\"true\"\n className=\"absolute top-0 left-0 h-full w-1 bg-blue-600 lg:top-auto lg:bottom-0 lg:h-1 lg:w-full dark:bg-blue-500\"\n />\n <span className={classNames(stepIndex !== 0 ? 'lg:pl-9' : '', 'flex items-start px-6 py-5 text-sm font-medium')}>\n <span className=\"shrink-0\">\n <span className=\"flex h-10 w-10 items-center justify-center rounded-full border-2 border-blue-600 dark:border-blue-500\">\n <span className=\"text-blue-600 dark:text-blue-400\">{step.id}</span>\n </span>\n </span>\n <span className=\"mt-0.5 ml-4 flex min-w-0 flex-col\">\n <span className=\"text-sm font-medium text-blue-600 dark:text-blue-400\">{step.name}</span>\n <span className=\"text-sm font-medium text-gray-500 dark:text-gray-400\">{step.description}</span>\n </span>\n </span>\n </div>\n ) : (\n <div className=\"group\">\n <span\n aria-hidden=\"true\"\n className=\"absolute top-0 left-0 h-full w-1 bg-transparent group-hover:bg-gray-200 lg:top-auto lg:bottom-0 lg:h-1 lg:w-full dark:group-hover:bg-white/20\"\n />\n <span className={classNames(stepIndex !== 0 ? 'lg:pl-9' : '', 'flex items-start px-6 py-5 text-sm font-medium')}>\n <span className=\"shrink-0\">\n <span className=\"flex h-10 w-10 items-center justify-center rounded-full border-2 border-gray-300 dark:border-white/15\">\n <span className=\"text-gray-500 dark:text-gray-400\">{step.id}</span>\n </span>\n </span>\n <span className=\"mt-0.5 ml-4 flex min-w-0 flex-col\">\n <span className=\"text-sm font-medium text-gray-500 dark:text-gray-400\">{step.name}</span>\n <span className=\"text-sm font-medium text-gray-500 dark:text-gray-400\">{step.description}</span>\n </span>\n </span>\n </div>\n )}\n\n {stepIndex !== 0 ? (\n <div aria-hidden=\"true\" className=\"absolute inset-0 top-0 left-0 hidden w-3 lg:block\">\n <svg\n fill=\"none\"\n viewBox=\"0 0 12 82\"\n preserveAspectRatio=\"none\"\n className=\"h-full w-full text-gray-200 dark:text-white/15\"\n >\n <path d=\"M0.5 0V31L10.5 41L0.5 51V82\" stroke=\"currentColor\" vectorEffect=\"non-scaling-stroke\" />\n </svg>\n </div>\n ) : null}\n </button>\n </li>\n ))}\n </ol>\n </nav>\n </div>\n )\n}\n","import { CheckCircleIcon } from '@heroicons/react/24/outline'\n\ntype AgentAnalysisCardProps = {\n name: string\n avatar: string\n duration: string\n output: string\n}\n\nexport function AgentAnalysisCard({ name, avatar, duration, output }: AgentAnalysisCardProps) {\n return (\n <div className=\"liquid-surface rounded-xl p-3 transition-all duration-300\">\n <div className=\"flex items-center gap-2 mb-1.5\">\n <img src={avatar} alt=\"\" className=\"h-6 w-6 rounded-lg\" />\n <div className=\"flex-1 min-w-0\">\n {/* Text contrast respects the surrounding surface — works\n on both light and dark grounds (DS AA tokens). */}\n <div className=\"text-[11px] font-semibold text-slate-900 dark:text-white\">{name}</div>\n <div className=\"text-[9px] text-slate-600 dark:text-slate-300\">{duration}</div>\n </div>\n <CheckCircleIcon className=\"h-3.5 w-3.5 text-emerald-600 dark:text-emerald-400 shrink-0\" />\n </div>\n <p className=\"text-[10px] text-slate-700 dark:text-slate-200 leading-relaxed\">{output}</p>\n </div>\n )\n}\n","import { ChartRenderer } from '@ui/components/chart-renderer'\nimport { MetricCard } from '@ui/components/metric-card'\nimport { EntityCard } from '@ui/components/entity-card'\nimport { ItemSummary } from '@ui/components/item-summary'\nimport { StatusBadge } from '@ui/components/status-badge'\nimport { StepTimeline } from '@ui/components/step-timeline'\nimport { AgentAnalysisCard } from '@ui/components/agent-analysis-card'\nimport type {\n DashboardSpec,\n DashboardKpi,\n DashboardTable,\n DashboardSection,\n EntitySectionData,\n NarrativeSectionData,\n LifecycleSectionData,\n ReceiptSectionData,\n ApprovalSectionData,\n FiscalSectionData,\n FeedSectionData,\n ScoreSectionData,\n NoteSectionData,\n InputRequestSectionData,\n SectionTone,\n} from '@ui/types/dashboard-spec'\nimport type { ReactNode } from 'react'\n\ntype DashboardViewProps = {\n spec: DashboardSpec\n className?: string\n /**\n * Optional render-prop for the `input_request` section. The\n * standalone `<DashboardView>` is a pure read-only viewer — it has\n * no runId, no submit endpoint, so it falls back to a summary card.\n * `<StreamingDashboard>` passes a callback here that returns an\n * actual form bound to the run.\n */\n renderInputRequest?: (data: InputRequestSectionData) => ReactNode\n}\n\n/**\n * Pure renderer for a DashboardSpec produced by a workflow's `DashboardOutput`\n * node. Every astrlabe consumer (the workflows app itself, kori-erp) should\n * use this component so the pitch-demo look is identical.\n */\nexport function DashboardView({\n spec,\n className,\n renderInputRequest,\n}: DashboardViewProps) {\n const layout = spec.layout ?? 'grid'\n const hasCharts = (spec.charts?.length ?? 0) > 0\n const chartGrid = layout === 'grid' && (spec.charts?.length ?? 0) > 1\n ? 'grid grid-cols-1 gap-4 lg:grid-cols-2'\n : 'grid grid-cols-1 gap-4'\n\n return (\n <div className={className ?? 'space-y-6'}>\n <header>\n <h2 className=\"text-xl font-semibold text-slate-900 dark:text-slate-100\">{spec.title}</h2>\n {spec.subtitle && (\n <p className=\"mt-1 text-sm text-slate-500 dark:text-slate-400\">{spec.subtitle}</p>\n )}\n </header>\n\n {spec.kpis && spec.kpis.length > 0 && (\n <section className={spec.kpis.length > 3\n ? 'grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4'\n : 'grid grid-cols-1 gap-3 sm:grid-cols-3'}\n >\n {spec.kpis.map((kpi, index) => (\n <KpiCard key={`${kpi.label}-${index}`} kpi={kpi} />\n ))}\n </section>\n )}\n\n {hasCharts && (\n <section className={chartGrid}>\n {spec.charts?.map((chart, index) => (\n <div\n key={`${chart.title}-${index}`}\n className=\"rounded-xl border border-zinc-950/10 bg-white p-4 dark:border-white/10 dark:bg-zinc-900\"\n >\n <ChartRenderer spec={chart} />\n </div>\n ))}\n </section>\n )}\n\n {spec.table && spec.table.rows.length > 0 && (\n <section className=\"rounded-xl border border-zinc-950/10 bg-white dark:border-white/10 dark:bg-zinc-900\">\n {spec.table.title && (\n <h3 className=\"border-b border-zinc-950/10 px-5 py-3 text-sm font-semibold text-slate-900 dark:border-white/10 dark:text-slate-100\">\n {spec.table.title}\n </h3>\n )}\n <DashboardTableView table={spec.table} />\n </section>\n )}\n\n {spec.recommendation && spec.recommendation.trim().length > 0 && (\n <section className=\"rounded-xl border border-indigo-500/20 bg-indigo-500/5 p-4 dark:border-indigo-400/30 dark:bg-indigo-500/10\">\n <h3 className=\"text-sm font-semibold text-indigo-700 dark:text-indigo-300\">Recommendation</h3>\n <p className=\"mt-1 text-sm text-indigo-900 dark:text-indigo-100\">{spec.recommendation}</p>\n </section>\n )}\n\n {spec.sections && spec.sections.length > 0 && (\n <div className=\"space-y-4\">\n {spec.sections.map((section, index) => (\n <DashboardSectionRenderer\n key={`${section.type}-${index}`}\n section={section}\n renderInputRequest={renderInputRequest}\n />\n ))}\n </div>\n )}\n\n {spec.meta && Object.keys(spec.meta).length > 0 && (\n <footer className=\"flex flex-wrap gap-4 text-[10px] text-slate-400 dark:text-slate-500\">\n {Object.entries(spec.meta).map(([key, value]) => (\n <span key={key}>\n <span className=\"font-semibold uppercase tracking-wide\">{key}</span>: {value}\n </span>\n ))}\n </footer>\n )}\n </div>\n )\n}\n\nfunction KpiCard({ kpi }: { kpi: DashboardKpi }) {\n const value = typeof kpi.value === 'number' ? formatNumber(kpi.value) : kpi.value\n const displayValue = kpi.unit ? `${value}${kpi.unit}` : value\n const variant: 'default' | 'success' | 'warning' | 'danger' = kpi.tone ?? 'default'\n\n return (\n <MetricCard\n title={kpi.label}\n value={displayValue}\n variant={variant}\n trend={kpi.deltaPct !== undefined ? { value: kpi.deltaPct } : undefined}\n />\n )\n}\n\nfunction DashboardTableView({ table }: { table: DashboardTable }) {\n return (\n <div className=\"overflow-x-auto\">\n <table className=\"min-w-full divide-y divide-zinc-200 text-sm dark:divide-zinc-700\">\n <thead className=\"bg-zinc-50 dark:bg-zinc-800/50\">\n <tr>\n {table.columns.map((column) => (\n <th\n key={column.key}\n scope=\"col\"\n className={`px-4 py-2 text-xs font-medium uppercase tracking-wide text-slate-500 dark:text-slate-400 ${columnAlign(column.align)}`}\n >\n {column.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-zinc-100 dark:divide-zinc-800\">\n {table.rows.map((row, rowIndex) => (\n <tr key={rowIndex} className=\"hover:bg-zinc-50/70 dark:hover:bg-zinc-800/30\">\n {table.columns.map((column) => {\n const raw = row[column.key] ?? ''\n return (\n <td\n key={column.key}\n className={`px-4 py-2 text-slate-700 dark:text-slate-300 ${columnAlign(column.align)}`}\n >\n {formatCell(raw, column.format)}\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\nfunction columnAlign(align?: 'left' | 'right' | 'center') {\n if (align === 'right') return 'text-right'\n if (align === 'center') return 'text-center'\n return 'text-left'\n}\n\nfunction formatCell(value: string | number | null, format?: 'number' | 'currency' | 'percent' | 'text') {\n if (value === null || value === undefined || value === '') return '—'\n if (format === 'currency' && typeof value === 'number') {\n return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(value)\n }\n if (format === 'percent' && typeof value === 'number') {\n return `${(value * 100).toFixed(1)}%`\n }\n if (format === 'number' && typeof value === 'number') {\n return formatNumber(value)\n }\n return String(value)\n}\n\nfunction formatNumber(value: number) {\n if (Math.abs(value) >= 1000) return new Intl.NumberFormat('en-US').format(Math.round(value))\n return value.toFixed(Math.abs(value) < 10 ? 2 : 1)\n}\n\n// ── Polymorphic section dispatch ────────────────────────────────────────\n//\n// `DashboardSection` is a tagged union. The renderer picks the right\n// component per `type`. Unknown / new types fall through to a `note`\n// rendering so older clients don't crash on a freshly-added vocabulary.\n//\n// All branches reuse existing `@datatechsolutions/ui` components — no\n// new visual primitives in this file. New section types should add to\n// the union in `dashboard-spec.ts` and a branch here.\n\nfunction DashboardSectionRenderer({\n section,\n renderInputRequest,\n}: {\n section: DashboardSection\n renderInputRequest?: (data: InputRequestSectionData) => ReactNode\n}) {\n switch (section.type) {\n case 'entity':\n return <EntitySection data={section.data} />\n case 'narrative':\n return <NarrativeSection data={section.data} />\n case 'lifecycle':\n return <LifecycleSection data={section.data} />\n case 'receipt':\n return <ReceiptSection data={section.data} />\n case 'approval':\n return <ApprovalSection data={section.data} />\n case 'fiscal':\n return <FiscalSection data={section.data} />\n case 'feed':\n return <FeedSection data={section.data} />\n case 'score':\n return <ScoreSection data={section.data} />\n case 'note':\n return <NoteSection data={section.data} />\n case 'input_request':\n // When mounted from a streaming context the parent injects an\n // interactive form. Otherwise render a read-only summary so a\n // historical run viewer still shows what was asked.\n return renderInputRequest\n ? <>{renderInputRequest(section.data)}</>\n : <InputRequestReadOnly data={section.data} />\n default:\n // Exhaustiveness: a future variant added to the union but not\n // wired here lands in this branch and renders as a generic note\n // so the dashboard still shows *something*. The const-cast is\n // just to silence the never-narrowing for the fallback prop.\n return <NoteSection data={{ body: JSON.stringify(section, null, 2), tone: 'info' }} />\n }\n}\n\n/** Read-only fallback for an `input_request` when no submit handler is wired. */\nfunction InputRequestReadOnly({ data }: { data: InputRequestSectionData }) {\n return (\n <section className=\"rounded-xl border border-sky-500/20 bg-sky-500/5 p-4 dark:border-sky-400/30 dark:bg-sky-500/10\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">\n {data.prompt}\n </h3>\n {data.description && (\n <p className=\"mt-1 text-xs text-slate-600 dark:text-slate-400\">\n {data.description}\n </p>\n )}\n <ul className=\"mt-3 space-y-1\">\n {data.fields.map((field) => (\n <li key={field.key} className=\"text-xs\">\n <span className=\"font-medium text-slate-700 dark:text-slate-300\">\n {field.label}\n {field.required && <span className=\"ml-1 text-rose-500\">*</span>}\n </span>\n <span className=\"ml-2 text-slate-500 dark:text-slate-400\">\n ({field.kind})\n </span>\n </li>\n ))}\n </ul>\n <p className=\"mt-3 text-[11px] italic text-slate-500 dark:text-slate-400\">\n Esta requisição requer entrada do operador — abra a run ao vivo para responder.\n </p>\n </section>\n )\n}\n\nfunction EntitySection({ data }: { data: EntitySectionData }) {\n // StatusBadge accepts a `status` (string keying the legacy style table:\n // pending/approved/rejected/active/inactive/processing/error/success)\n // plus an optional `label` override. Map our SectionTone vocabulary\n // onto the closest legacy style — the visual outcome is the same\n // family of greens/yellows/reds.\n const statusKey =\n data.status?.tone === 'success' ? 'success'\n : data.status?.tone === 'danger' ? 'error'\n : data.status?.tone === 'warning' ? 'pending'\n : data.status?.tone === 'info' ? 'processing'\n : 'active'\n return (\n <EntityCard\n title={data.title}\n subtitle={data.subtitle}\n status={\n data.status ? (\n <StatusBadge status={statusKey} label={data.status.label} />\n ) : undefined\n }\n >\n {data.fields && data.fields.length > 0 && (\n <ItemSummary\n title=\"\"\n metadata={data.fields.map((f) => ({ label: f.label, value: String(f.value) }))}\n />\n )}\n </EntityCard>\n )\n}\n\nfunction NarrativeSection({ data }: { data: NarrativeSectionData }) {\n // AgentAnalysisCard is opinionated (small avatar, time, single body).\n // For sections that pass an `agent`, we use it directly; otherwise\n // we fall back to a generic styled block so a workflow that wants\n // a \"summary paragraph\" without an agent identity doesn't have to\n // fabricate one.\n if (data.agent) {\n return (\n <AgentAnalysisCard\n name={data.agent.name}\n avatar={data.agent.avatarUrl ?? ''}\n duration={\n data.durationMs !== undefined\n ? `${(data.durationMs / 1000).toFixed(1)}s`\n : ''\n }\n output={data.body}\n />\n )\n }\n return (\n <section className=\"rounded-xl border border-zinc-950/10 bg-white p-4 dark:border-white/10 dark:bg-zinc-900\">\n {data.title && (\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">\n {data.title}\n </h3>\n )}\n <p className=\"mt-1 whitespace-pre-line text-sm leading-relaxed text-slate-700 dark:text-slate-300\">\n {data.body}\n </p>\n </section>\n )\n}\n\nfunction LifecycleSection({ data }: { data: LifecycleSectionData }) {\n return (\n <section className=\"rounded-xl border border-zinc-950/10 bg-white p-4 dark:border-white/10 dark:bg-zinc-900\">\n {data.title && (\n <h3 className=\"mb-3 text-sm font-semibold text-slate-900 dark:text-slate-100\">\n {data.title}\n </h3>\n )}\n <StepTimeline\n steps={data.steps}\n progressLabel={data.progressLabel ?? data.title ?? 'Progress'}\n />\n </section>\n )\n}\n\nfunction ReceiptSection({ data }: { data: ReceiptSectionData }) {\n const currency = data.currency ?? 'BRL'\n const fmt = (v: string | number) =>\n typeof v === 'number'\n ? new Intl.NumberFormat('pt-BR', { style: 'currency', currency }).format(v)\n : v\n return (\n <section className=\"rounded-xl border border-zinc-950/10 bg-white dark:border-white/10 dark:bg-zinc-900\">\n {data.title && (\n <h3 className=\"border-b border-zinc-950/10 px-5 py-3 text-sm font-semibold text-slate-900 dark:border-white/10 dark:text-slate-100\">\n {data.title}\n </h3>\n )}\n <div className=\"overflow-x-auto\">\n <table className=\"min-w-full divide-y divide-zinc-200 text-sm dark:divide-zinc-700\">\n <thead className=\"bg-zinc-50 dark:bg-zinc-800/50\">\n <tr>\n <th className=\"px-4 py-2 text-left text-xs font-medium uppercase tracking-wide text-slate-500 dark:text-slate-400\">Item</th>\n <th className=\"px-4 py-2 text-right text-xs font-medium uppercase tracking-wide text-slate-500 dark:text-slate-400\">Qtd</th>\n <th className=\"px-4 py-2 text-right text-xs font-medium uppercase tracking-wide text-slate-500 dark:text-slate-400\">Unit.</th>\n <th className=\"px-4 py-2 text-right text-xs font-medium uppercase tracking-wide text-slate-500 dark:text-slate-400\">Total</th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-zinc-100 dark:divide-zinc-800\">\n {data.items.map((item, i) => (\n <tr key={i}>\n <td className=\"px-4 py-2 text-left text-slate-700 dark:text-slate-300\">{item.description}</td>\n <td className=\"px-4 py-2 text-right text-slate-700 dark:text-slate-300\">{item.quantity}</td>\n <td className=\"px-4 py-2 text-right text-slate-700 dark:text-slate-300\">{fmt(item.unitPrice)}</td>\n <td className=\"px-4 py-2 text-right font-medium text-slate-900 dark:text-slate-100\">{fmt(item.total)}</td>\n </tr>\n ))}\n </tbody>\n <tfoot className=\"border-t border-zinc-200 dark:border-zinc-700\">\n {data.subtotal !== undefined && (\n <tr>\n <td colSpan={3} className=\"px-4 py-1.5 text-right text-xs text-slate-500\">Subtotal</td>\n <td className=\"px-4 py-1.5 text-right text-xs text-slate-700 dark:text-slate-300\">{fmt(data.subtotal)}</td>\n </tr>\n )}\n {data.tax !== undefined && (\n <tr>\n <td colSpan={3} className=\"px-4 py-1.5 text-right text-xs text-slate-500\">Tributos</td>\n <td className=\"px-4 py-1.5 text-right text-xs text-slate-700 dark:text-slate-300\">{fmt(data.tax)}</td>\n </tr>\n )}\n <tr>\n <td colSpan={3} className=\"px-4 py-2 text-right text-sm font-semibold text-slate-900 dark:text-slate-100\">Total</td>\n <td className=\"px-4 py-2 text-right text-sm font-semibold text-slate-900 dark:text-slate-100\">{fmt(data.total)}</td>\n </tr>\n </tfoot>\n </table>\n </div>\n </section>\n )\n}\n\nfunction ApprovalSection({ data }: { data: ApprovalSectionData }) {\n const tone =\n data.decision === 'approved' ? 'success'\n : data.decision === 'rejected' ? 'danger'\n : 'warning'\n const accentClasses = TONE_BLOCK[tone]\n return (\n <section className={`rounded-xl border p-4 ${accentClasses}`}>\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n {data.prompt && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{data.prompt}</p>\n )}\n <p className=\"mt-1 text-sm font-semibold capitalize text-slate-900 dark:text-slate-100\">\n {data.decision}\n {data.by?.name && (\n <span className=\"font-normal text-slate-500 dark:text-slate-400\">\n {' '}— {data.by.name}\n </span>\n )}\n </p>\n {data.reason && (\n <p className=\"mt-1 text-xs text-slate-700 dark:text-slate-300\">{data.reason}</p>\n )}\n </div>\n {data.at && (\n <span className=\"shrink-0 text-[10px] uppercase tracking-wide text-slate-500 dark:text-slate-400\">\n {formatTimestamp(data.at)}\n </span>\n )}\n </div>\n </section>\n )\n}\n\nfunction FiscalSection({ data }: { data: FiscalSectionData }) {\n const env = data.environment ?? 'homologation'\n const envLabel =\n env === 'production' ? 'Produção (SEFAZ)' : 'Homologação (sandbox)'\n return (\n <section className=\"rounded-xl border border-emerald-500/20 bg-emerald-500/5 p-4 dark:border-emerald-400/30 dark:bg-emerald-500/10\">\n <h3 className=\"text-sm font-semibold text-emerald-800 dark:text-emerald-200\">\n NF-e emitida\n </h3>\n <dl className=\"mt-2 grid grid-cols-1 gap-x-4 gap-y-1 text-xs sm:grid-cols-2\">\n {data.number && (\n <div>\n <dt className=\"text-emerald-700/70 dark:text-emerald-300/70\">Número</dt>\n <dd className=\"font-medium text-emerald-900 dark:text-emerald-100\">{data.number}</dd>\n </div>\n )}\n {data.accessKey && (\n <div className=\"sm:col-span-2\">\n <dt className=\"text-emerald-700/70 dark:text-emerald-300/70\">Chave de acesso</dt>\n <dd className=\"break-all font-mono text-[11px] text-emerald-900 dark:text-emerald-100\">\n {data.accessKey}\n </dd>\n </div>\n )}\n <div>\n <dt className=\"text-emerald-700/70 dark:text-emerald-300/70\">Ambiente</dt>\n <dd className=\"font-medium text-emerald-900 dark:text-emerald-100\">{envLabel}</dd>\n </div>\n {data.statusUrl && (\n <div className=\"sm:col-span-2\">\n <dt className=\"text-emerald-700/70 dark:text-emerald-300/70\">Status</dt>\n <dd>\n <a\n href={data.statusUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-emerald-900 underline hover:text-emerald-700 dark:text-emerald-100\"\n >\n {data.statusUrl}\n </a>\n </dd>\n </div>\n )}\n </dl>\n </section>\n )\n}\n\nfunction FeedSection({ data }: { data: FeedSectionData }) {\n return (\n <section className=\"rounded-xl border border-zinc-950/10 bg-white p-4 dark:border-white/10 dark:bg-zinc-900\">\n {data.title && (\n <h3 className=\"mb-2 text-sm font-semibold text-slate-900 dark:text-slate-100\">\n {data.title}\n </h3>\n )}\n <ul className=\"space-y-2\">\n {data.items.map((item, index) => (\n <li\n key={index}\n className={`rounded-lg border px-3 py-2 ${TONE_BLOCK[item.tone ?? 'default']}`}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-slate-900 dark:text-slate-100\">{item.title}</p>\n {item.description && (\n <p className=\"mt-0.5 text-xs text-slate-600 dark:text-slate-400\">{item.description}</p>\n )}\n </div>\n {item.timestamp && (\n <span className=\"shrink-0 text-[10px] uppercase tracking-wide text-slate-500 dark:text-slate-400\">\n {formatTimestamp(item.timestamp)}\n </span>\n )}\n </div>\n </li>\n ))}\n </ul>\n </section>\n )\n}\n\nfunction ScoreSection({ data }: { data: ScoreSectionData }) {\n const tone: SectionTone =\n data.score >= 70 ? 'success' : data.score >= 40 ? 'warning' : 'danger'\n const variant: 'default' | 'success' | 'warning' | 'danger' = tone\n return (\n <section className=\"rounded-xl border border-zinc-950/10 bg-white p-4 dark:border-white/10 dark:bg-zinc-900\">\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n <MetricCard\n title={data.label}\n value={`${Math.round(data.score)}`}\n variant={variant}\n />\n <div className=\"sm:col-span-2\">\n {data.qualification && (\n <p className=\"text-sm font-medium capitalize text-slate-900 dark:text-slate-100\">\n {data.qualification}\n </p>\n )}\n {data.reasoning && (\n <p className=\"mt-1 text-xs leading-relaxed text-slate-600 dark:text-slate-400\">\n {data.reasoning}\n </p>\n )}\n </div>\n </div>\n </section>\n )\n}\n\nfunction NoteSection({ data }: { data: NoteSectionData }) {\n const accentClasses = TONE_BLOCK[data.tone ?? 'default']\n return (\n <section className={`rounded-xl border p-4 ${accentClasses}`}>\n {data.title && (\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{data.title}</h3>\n )}\n <p className=\"mt-1 whitespace-pre-line text-sm text-slate-700 dark:text-slate-300\">\n {data.body}\n </p>\n </section>\n )\n}\n\nconst TONE_BLOCK: Record<SectionTone, string> = {\n default: 'border-zinc-950/10 bg-white dark:border-white/10 dark:bg-zinc-900',\n info: 'border-sky-500/20 bg-sky-500/5 dark:border-sky-400/30 dark:bg-sky-500/10',\n success: 'border-emerald-500/20 bg-emerald-500/5 dark:border-emerald-400/30 dark:bg-emerald-500/10',\n warning: 'border-amber-500/20 bg-amber-500/5 dark:border-amber-400/30 dark:bg-amber-500/10',\n danger: 'border-rose-500/20 bg-rose-500/5 dark:border-rose-400/30 dark:bg-rose-500/10',\n}\n\nfunction formatTimestamp(iso: string): string {\n try {\n const dt = new Date(iso)\n if (Number.isNaN(dt.getTime())) return iso\n return dt.toLocaleString('pt-BR', {\n day: '2-digit',\n month: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n })\n } catch {\n return iso\n }\n}\n","import { useState, type FormEvent } from 'react'\nimport { submitApproval } from '@ui/platform/workflow-api-client'\nimport type {\n InputRequestSectionData,\n InputRequestField,\n SectionTone,\n} from '@ui/types/dashboard-spec'\n\ntype InputRequestFormProps = {\n /** Run the paused approval belongs to. Forwarded to `submitApproval`. */\n runId: string\n data: InputRequestSectionData\n /** Called after a successful submission so the parent can refresh. */\n onResolved?: (response: {\n approved: boolean\n payload: Record<string, unknown>\n }) => void\n}\n\n/**\n * Inline form rendered inside a streaming dashboard for an\n * `input_request` section. Captures structured operator input and\n * resolves the paused human_approval node via the existing approvals\n * API — no new endpoint, no new permission gate.\n *\n * Submit semantics:\n * * \"Aprovar\" → POST `{ approved: true, payload: <values> }`. Run\n * resumes; downstream nodes read the form values from\n * `inputs.approvals.<nodeId>.payload`.\n * * \"Rejeitar\" → POST `{ approved: false, reason: <values.reason || ''> }`.\n * Run terminates as failed with the rejection reason.\n *\n * Disables itself once submitted to prevent double-resolution.\n */\nexport function InputRequestForm({\n runId,\n data,\n onResolved,\n}: InputRequestFormProps) {\n const [values, setValues] = useState<Record<string, unknown>>(() =>\n initialValues(data.fields),\n )\n const [submitting, setSubmitting] = useState(false)\n const [resolved, setResolved] = useState<\n null | { approved: boolean; message?: string }\n >(null)\n const [error, setError] = useState<string | null>(null)\n\n async function submit(decision: 'approved' | 'rejected') {\n if (submitting || resolved) return\n setSubmitting(true)\n setError(null)\n try {\n const payload =\n decision === 'approved' ? sanitizeForSubmit(values) : undefined\n const reason =\n decision === 'rejected'\n ? typeof values.reason === 'string'\n ? values.reason\n : 'rejected'\n : undefined\n await submitApproval(runId, data.nodeId, {\n approved: decision === 'approved',\n ...(payload ? { payload } : {}),\n ...(reason ? { reason } : {}),\n })\n setResolved({\n approved: decision === 'approved',\n message:\n decision === 'approved'\n ? 'Aprovado — workflow retomado.'\n : 'Rejeitado — workflow encerrado.',\n })\n onResolved?.({\n approved: decision === 'approved',\n payload: payload ?? {},\n })\n } catch (e) {\n setError(\n e instanceof Error ? e.message : 'Falha ao registrar a decisão.',\n )\n } finally {\n setSubmitting(false)\n }\n }\n\n function onFieldChange(key: string, value: unknown) {\n setValues((prev) => ({ ...prev, [key]: value }))\n }\n\n function onSubmitForm(event: FormEvent) {\n event.preventDefault()\n void submit('approved')\n }\n\n const accentClasses = TONE_BLOCK[data.tone ?? 'info']\n\n return (\n <form\n onSubmit={onSubmitForm}\n className={`rounded-xl border p-4 ${accentClasses}`}\n >\n <div>\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">\n {data.prompt}\n </h3>\n {data.description && (\n <p className=\"mt-1 text-xs text-slate-600 dark:text-slate-400\">\n {data.description}\n </p>\n )}\n </div>\n\n <div className=\"mt-4 space-y-3\">\n {data.fields.map((field) => (\n <FieldInput\n key={field.key}\n field={field}\n value={values[field.key]}\n disabled={submitting || Boolean(resolved)}\n onChange={(value) => onFieldChange(field.key, value)}\n />\n ))}\n </div>\n\n {error && (\n <p className=\"mt-3 text-xs text-rose-700 dark:text-rose-300\">\n {error}\n </p>\n )}\n\n {resolved ? (\n <p className=\"mt-3 text-xs font-medium text-emerald-800 dark:text-emerald-200\">\n {resolved.message}\n </p>\n ) : (\n <div className=\"mt-4 flex flex-wrap items-center justify-end gap-2\">\n {data.rejectLabel !== null && (\n <button\n type=\"button\"\n disabled={submitting}\n onClick={() => submit('rejected')}\n className=\"rounded-md border border-rose-500/30 bg-rose-500/5 px-3 py-1.5 text-sm font-medium text-rose-700 hover:bg-rose-500/10 disabled:opacity-50 dark:text-rose-300\"\n >\n {data.rejectLabel ?? 'Rejeitar'}\n </button>\n )}\n <button\n type=\"submit\"\n disabled={submitting}\n className=\"rounded-md bg-emerald-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-emerald-500 disabled:opacity-50\"\n >\n {submitting ? 'Enviando…' : data.submitLabel ?? 'Aprovar'}\n </button>\n </div>\n )}\n </form>\n )\n}\n\nfunction FieldInput({\n field,\n value,\n disabled,\n onChange,\n}: {\n field: InputRequestField\n value: unknown\n disabled: boolean\n onChange: (next: unknown) => void\n}) {\n const labelEl = (\n <label\n htmlFor={`input-${field.key}`}\n className=\"block text-xs font-medium text-slate-700 dark:text-slate-300\"\n >\n {field.label}\n {field.required && <span className=\"ml-1 text-rose-500\">*</span>}\n </label>\n )\n const helpEl = field.helpText ? (\n <p className=\"mt-1 text-[11px] text-slate-500 dark:text-slate-400\">\n {field.helpText}\n </p>\n ) : null\n\n switch (field.kind) {\n case 'text':\n return (\n <div>\n {labelEl}\n <input\n id={`input-${field.key}`}\n type=\"text\"\n disabled={disabled}\n required={field.required}\n placeholder={field.placeholder}\n value={typeof value === 'string' ? value : ''}\n onChange={(e) => onChange(e.target.value)}\n className={INPUT_CLASSES}\n />\n {helpEl}\n </div>\n )\n case 'number':\n return (\n <div>\n {labelEl}\n <input\n id={`input-${field.key}`}\n type=\"number\"\n disabled={disabled}\n required={field.required}\n placeholder={field.placeholder}\n min={field.min}\n max={field.max}\n step={field.step}\n value={\n typeof value === 'number'\n ? value\n : typeof value === 'string'\n ? value\n : ''\n }\n onChange={(e) => {\n const raw = e.target.value\n onChange(raw === '' ? '' : Number(raw))\n }}\n className={INPUT_CLASSES}\n />\n {helpEl}\n </div>\n )\n case 'textarea':\n return (\n <div>\n {labelEl}\n <textarea\n id={`input-${field.key}`}\n disabled={disabled}\n required={field.required}\n placeholder={field.placeholder}\n rows={field.rows ?? 3}\n value={typeof value === 'string' ? value : ''}\n onChange={(e) => onChange(e.target.value)}\n className={INPUT_CLASSES}\n />\n {helpEl}\n </div>\n )\n case 'select':\n return (\n <div>\n {labelEl}\n <select\n id={`input-${field.key}`}\n disabled={disabled}\n required={field.required}\n value={typeof value === 'string' ? value : ''}\n onChange={(e) => onChange(e.target.value)}\n className={INPUT_CLASSES}\n >\n <option value=\"\" disabled>\n Selecione…\n </option>\n {field.options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n {helpEl}\n </div>\n )\n case 'boolean':\n return (\n <div className=\"flex items-center gap-2\">\n <input\n id={`input-${field.key}`}\n type=\"checkbox\"\n disabled={disabled}\n checked={Boolean(value)}\n onChange={(e) => onChange(e.target.checked)}\n className=\"h-4 w-4 rounded border-zinc-300 text-emerald-600 focus:ring-emerald-500\"\n />\n <label\n htmlFor={`input-${field.key}`}\n className=\"text-xs text-slate-700 dark:text-slate-300\"\n >\n {field.label}\n </label>\n </div>\n )\n default:\n return null\n }\n}\n\nfunction initialValues(fields: InputRequestField[]): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const field of fields) {\n if ('defaultValue' in field && field.defaultValue !== undefined) {\n out[field.key] = field.defaultValue\n } else if (field.kind === 'boolean') {\n out[field.key] = false\n } else {\n out[field.key] = ''\n }\n }\n return out\n}\n\n/** Strip empty strings before submitting so the backend payload is clean. */\nfunction sanitizeForSubmit(\n values: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(values)) {\n if (value === '' || value === undefined) continue\n out[key] = value\n }\n return out\n}\n\nconst INPUT_CLASSES =\n 'mt-1 block w-full rounded-md border border-zinc-300 bg-white px-2.5 py-1.5 text-sm text-slate-900 shadow-sm focus:border-emerald-500 focus:outline-none focus:ring-1 focus:ring-emerald-500 disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-900 dark:text-slate-100'\n\nconst TONE_BLOCK: Record<SectionTone, string> = {\n default: 'border-zinc-950/10 bg-white dark:border-white/10 dark:bg-zinc-900',\n info: 'border-sky-500/20 bg-sky-500/5 dark:border-sky-400/30 dark:bg-sky-500/10',\n success: 'border-emerald-500/20 bg-emerald-500/5 dark:border-emerald-400/30 dark:bg-emerald-500/10',\n warning: 'border-amber-500/20 bg-amber-500/5 dark:border-amber-400/30 dark:bg-amber-500/10',\n danger: 'border-rose-500/20 bg-rose-500/5 dark:border-rose-400/30 dark:bg-rose-500/10',\n}\n","import { useEffect, useRef, useState } from 'react'\nimport { DashboardView } from '@ui/components/dashboard-view'\nimport { InputRequestForm } from '@ui/components/input-request-form'\nimport { StatusBadge } from '@ui/components/status-badge'\nimport type {\n DashboardSection,\n DashboardSpec,\n} from '@ui/types/dashboard-spec'\nimport {\n subscribeToRunEvents,\n type RunEvent,\n} from '@ui/platform/workflow-api-client'\n\n/**\n * Streaming workflow-run dashboard.\n *\n * Subscribes to `/workflow-runs/{runId}/events` (SSE) and renders the\n * dashboard incrementally as the run unfolds:\n *\n * * `node-started` → adds the node to the live timeline as `running`\n * * `node-completed` → marks the node `done` in the timeline, and if\n * it's a `dashboard_output` node merges its\n * sections into the rendered spec\n * * `ui-render` → individual section emitted by an agent's\n * tool-call (Phase 2c) — appended to the spec\n * as it arrives so the dashboard fills in\n * progressively, not at the end\n * * `run-paused` → swaps the timeline indicator to a paused\n * state and surfaces the pause prompt + payload\n * as a section the operator can act on\n * * `run-completed` → seals the timeline; spec is final\n * * `run-failed` → seals the timeline + surfaces the error\n *\n * Drop-in replacement for `<DashboardView>`: when the run already\n * completed (no SSE arrives within the connection window) the component\n * falls back to `initialSpec` (typically the row's `output_variables.dashboard`)\n * so the page works for both live and historical runs.\n */\ntype StreamingDashboardProps = {\n runId: string\n /**\n * Last-known spec from the run row (or `null` if still pending). Used\n * for the historical/completed-run case AND as the seed value before\n * the SSE stream delivers anything.\n */\n initialSpec?: DashboardSpec | null\n /**\n * Run status from the row, when known. Lets us skip subscribing to\n * SSE for already-terminal runs (no point hanging an EventSource\n * open for a `completed` run).\n */\n initialStatus?: RunStatusLike\n className?: string\n}\n\ntype RunStatusLike =\n | 'pending'\n | 'running'\n | 'completed'\n | 'failed'\n | 'cancelled'\n | 'paused_for_approval'\n | 'PENDING'\n | 'RUNNING'\n | 'COMPLETED'\n | 'FAILED'\n | 'CANCELLED'\n | 'PAUSED_FOR_APPROVAL'\n\ntype TimelineEntry = {\n nodeId: string\n nodeType?: string\n status: 'running' | 'done' | 'failed' | 'paused'\n startedAt: string\n finishedAt?: string\n error?: string\n}\n\nexport function StreamingDashboard({\n runId,\n initialSpec,\n initialStatus,\n className,\n}: StreamingDashboardProps) {\n const [spec, setSpec] = useState<DashboardSpec | null>(\n initialSpec ?? null,\n )\n const [timeline, setTimeline] = useState<TimelineEntry[]>([])\n const [phase, setPhase] = useState<RunPhase>(() =>\n derivePhase(initialStatus),\n )\n const [error, setError] = useState<string | null>(null)\n const specRef = useRef<DashboardSpec | null>(initialSpec ?? null)\n\n useEffect(() => {\n // Skip the live subscription for terminal runs — there's nothing\n // more to deliver.\n if (\n phase === 'completed' ||\n phase === 'failed' ||\n phase === 'cancelled'\n ) {\n return\n }\n\n const unsubscribe = subscribeToRunEvents(\n runId,\n (event) => handleEvent(event),\n (err) => {\n // SSE will emit an error when the upstream closes the\n // connection (e.g. run already completed by the time we\n // subscribe). Log at debug level only — the timeline + any\n // initialSpec we have are enough for the user.\n // eslint-disable-next-line no-console\n console.warn('streaming-dashboard sse error', err)\n },\n )\n return unsubscribe\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [runId])\n\n function handleEvent(event: RunEvent) {\n switch (event.type) {\n case 'run-started':\n setPhase('running')\n break\n case 'node-started':\n if (event.nodeId) {\n setTimeline((prev) => upsertTimelineRunning(prev, event))\n }\n break\n case 'node-completed':\n if (event.nodeId) {\n setTimeline((prev) =>\n upsertTimelineDone(prev, event, 'done'),\n )\n mergeNodeOutput(event)\n }\n break\n case 'node-failed':\n if (event.nodeId) {\n setTimeline((prev) =>\n upsertTimelineDone(prev, event, 'failed'),\n )\n }\n break\n case 'run-paused':\n setPhase('paused')\n if (event.nodeId) {\n setTimeline((prev) =>\n upsertTimelineDone(prev, event, 'paused'),\n )\n }\n appendPauseSection(event)\n break\n case 'ui-render':\n // Individual section emitted by an agent tool-call. Append\n // verbatim — the agent owns ordering.\n appendSectionFromEvent(event)\n break\n case 'run-completed':\n setPhase('completed')\n break\n case 'run-failed':\n setPhase('failed')\n setError(\n (event.data?.error as string | undefined) ??\n 'Workflow run failed',\n )\n break\n case 'log':\n default:\n break\n }\n }\n\n function mergeNodeOutput(event: RunEvent) {\n const output = event.data?.outputs as\n | Record<string, unknown>\n | undefined\n if (!output) return\n\n // If the node was a dashboard_output, its output is the full spec;\n // merge that into our rolling spec so the operator sees it as\n // soon as the node lands.\n const candidateSpec = isDashboardSpecLike(output)\n ? (output as DashboardSpec)\n : null\n if (candidateSpec) {\n setSpec((prev) => mergeSpec(prev, candidateSpec))\n specRef.current = mergeSpec(specRef.current, candidateSpec)\n return\n }\n\n // Otherwise, if the output looks like a single section\n // ({ type, data, ... }), append it. Templates that emit per-section\n // events use this shape.\n if (isSectionLike(output)) {\n const section = output as unknown as DashboardSection\n setSpec((prev) => appendSectionToSpec(prev, section))\n specRef.current = appendSectionToSpec(specRef.current, section)\n }\n }\n\n function appendSectionFromEvent(event: RunEvent) {\n const sectionPayload = (event.data?.section ?? event.data) as\n | DashboardSection\n | undefined\n if (!sectionPayload || !sectionPayload.type) return\n setSpec((prev) => appendSectionToSpec(prev, sectionPayload))\n specRef.current = appendSectionToSpec(specRef.current, sectionPayload)\n }\n\n function appendPauseSection(event: RunEvent) {\n const promptValue = event.data?.prompt\n const payloadValue = event.data?.payload\n const prompt = typeof promptValue === 'string' ? promptValue : undefined\n const section: DashboardSection = {\n type: 'note',\n data: {\n title: 'Aguardando aprovação',\n body: prompt\n ? prompt\n : 'O workflow pausou e aguarda decisão do operador.',\n tone: 'warning',\n },\n }\n setSpec((prev) => appendSectionToSpec(prev, section))\n specRef.current = appendSectionToSpec(specRef.current, section)\n // Also surface payload as a follow-up note so the operator has\n // context for the decision.\n if (payloadValue && typeof payloadValue === 'object') {\n const followUp: DashboardSection = {\n type: 'note',\n data: {\n title: 'Contexto',\n body: JSON.stringify(payloadValue, null, 2),\n tone: 'info',\n },\n }\n setSpec((prev) => appendSectionToSpec(prev, followUp))\n specRef.current = appendSectionToSpec(specRef.current, followUp)\n }\n }\n\n return (\n <div className={className ?? 'space-y-6'}>\n <PhaseBadge phase={phase} />\n\n {timeline.length > 0 && (\n <Timeline entries={timeline} />\n )}\n\n {spec && (\n <DashboardView\n spec={spec}\n renderInputRequest={(data) => (\n <InputRequestForm\n runId={runId}\n data={data}\n onResolved={(result) => {\n // Optimistically reflect the resolution in the\n // streaming dashboard. The real run state arrives via\n // the SSE stream a moment later (the backend resumes\n // and re-emits node-completed events for the new run).\n setPhase(result.approved ? 'running' : 'failed')\n }}\n />\n )}\n />\n )}\n\n {!spec && phase !== 'completed' && (\n <div className=\"rounded-xl border border-dashed border-zinc-300 p-8 text-center text-sm text-slate-500 dark:border-zinc-700 dark:text-slate-400\">\n {phase === 'paused'\n ? 'Run paused — aguardando entrada do operador.'\n : 'Aguardando dados do workflow…'}\n </div>\n )}\n\n {error && (\n <section className=\"rounded-xl border border-rose-500/30 bg-rose-500/10 p-4 text-sm text-rose-900 dark:text-rose-100\">\n <p className=\"font-semibold\">Run falhou</p>\n <p className=\"mt-1 whitespace-pre-line text-xs\">{error}</p>\n </section>\n )}\n </div>\n )\n}\n\n// ── Phase indicator ─────────────────────────────────────────────────────\n\ntype RunPhase =\n | 'pending'\n | 'running'\n | 'paused'\n | 'completed'\n | 'failed'\n | 'cancelled'\n\nfunction derivePhase(status: RunStatusLike | undefined): RunPhase {\n switch (String(status ?? '').toLowerCase()) {\n case 'completed':\n return 'completed'\n case 'failed':\n return 'failed'\n case 'cancelled':\n return 'cancelled'\n case 'paused_for_approval':\n return 'paused'\n case 'running':\n return 'running'\n case 'pending':\n case '':\n return 'pending'\n default:\n return 'pending'\n }\n}\n\nfunction PhaseBadge({ phase }: { phase: RunPhase }) {\n const map: Record<RunPhase, { status: string; label: string }> = {\n pending: { status: 'pending', label: 'Pendente' },\n running: { status: 'processing', label: 'Em execução' },\n paused: { status: 'pending', label: 'Aguardando aprovação' },\n completed: { status: 'success', label: 'Concluído' },\n failed: { status: 'error', label: 'Falhou' },\n cancelled: { status: 'inactive', label: 'Cancelado' },\n }\n const entry = map[phase]\n return (\n <div className=\"flex items-center justify-between\">\n <StatusBadge status={entry.status} label={entry.label} />\n </div>\n )\n}\n\n// ── Timeline strip ──────────────────────────────────────────────────────\n\nfunction Timeline({ entries }: { entries: TimelineEntry[] }) {\n return (\n <ol className=\"flex flex-wrap gap-2\">\n {entries.map((entry) => {\n const dotClass =\n entry.status === 'done'\n ? 'bg-emerald-500'\n : entry.status === 'failed'\n ? 'bg-rose-500'\n : entry.status === 'paused'\n ? 'bg-amber-500'\n : 'animate-pulse motion-reduce:animate-none bg-sky-500'\n return (\n <li\n key={entry.nodeId}\n className=\"flex items-center gap-2 rounded-full border border-zinc-950/10 bg-white px-3 py-1 text-xs dark:border-white/10 dark:bg-zinc-900\"\n title={entry.error ?? entry.nodeId}\n >\n <span className={`h-2 w-2 rounded-full ${dotClass}`} />\n <span className=\"font-medium text-slate-700 dark:text-slate-300\">\n {entry.nodeId}\n </span>\n {entry.nodeType && (\n <span className=\"text-[10px] uppercase tracking-wide text-slate-400\">\n {entry.nodeType}\n </span>\n )}\n </li>\n )\n })}\n </ol>\n )\n}\n\n// ── Pure helpers ────────────────────────────────────────────────────────\n\nfunction upsertTimelineRunning(\n prev: TimelineEntry[],\n event: RunEvent,\n): TimelineEntry[] {\n if (!event.nodeId) return prev\n const idx = prev.findIndex((entry) => entry.nodeId === event.nodeId)\n const nodeType =\n typeof event.data?.nodeType === 'string'\n ? (event.data.nodeType as string)\n : undefined\n const fresh: TimelineEntry = {\n nodeId: event.nodeId,\n nodeType,\n status: 'running',\n startedAt: event.timestamp,\n }\n if (idx === -1) return [...prev, fresh]\n const next = [...prev]\n next[idx] = { ...next[idx]!, ...fresh }\n return next\n}\n\nfunction upsertTimelineDone(\n prev: TimelineEntry[],\n event: RunEvent,\n status: TimelineEntry['status'],\n): TimelineEntry[] {\n if (!event.nodeId) return prev\n const idx = prev.findIndex((entry) => entry.nodeId === event.nodeId)\n const nodeType =\n typeof event.data?.nodeType === 'string'\n ? (event.data.nodeType as string)\n : undefined\n const error =\n typeof event.data?.error === 'string'\n ? (event.data.error as string)\n : undefined\n if (idx === -1) {\n return [\n ...prev,\n {\n nodeId: event.nodeId,\n nodeType,\n status,\n startedAt: event.timestamp,\n finishedAt: event.timestamp,\n error,\n },\n ]\n }\n const next = [...prev]\n next[idx] = {\n ...next[idx]!,\n status,\n finishedAt: event.timestamp,\n error: error ?? next[idx]!.error,\n }\n return next\n}\n\nfunction isDashboardSpecLike(value: unknown): value is DashboardSpec {\n if (!value || typeof value !== 'object') return false\n const candidate = value as Record<string, unknown>\n // Either a top-level `title` (the canonical spec) OR a `sections`\n // array (an agent might omit a title and rely on the page header).\n return (\n typeof candidate.title === 'string' ||\n Array.isArray(candidate.sections) ||\n Array.isArray(candidate.kpis) ||\n Array.isArray(candidate.charts) ||\n typeof candidate.recommendation === 'string'\n )\n}\n\nfunction isSectionLike(value: unknown): value is DashboardSection {\n if (!value || typeof value !== 'object') return false\n const candidate = value as Record<string, unknown>\n return typeof candidate.type === 'string' && 'data' in candidate\n}\n\nfunction mergeSpec(\n prev: DashboardSpec | null,\n next: DashboardSpec,\n): DashboardSpec {\n if (!prev) return next\n return {\n ...prev,\n ...next,\n title: next.title ?? prev.title,\n sections: mergeSections(prev.sections, next.sections),\n }\n}\n\nfunction mergeSections(\n a: DashboardSection[] | undefined,\n b: DashboardSection[] | undefined,\n): DashboardSection[] | undefined {\n if (!a && !b) return undefined\n if (!a) return b\n if (!b) return a\n // Deduplicate by stringified content — the dashboard_output node\n // can re-emit if a workflow loops, and we don't want the same card\n // showing up twice.\n const seen = new Set<string>()\n const merged: DashboardSection[] = []\n for (const section of [...a, ...b]) {\n const key = JSON.stringify(section)\n if (seen.has(key)) continue\n seen.add(key)\n merged.push(section)\n }\n return merged\n}\n\nfunction appendSectionToSpec(\n prev: DashboardSpec | null,\n section: DashboardSection,\n): DashboardSpec {\n const base: DashboardSpec = prev ?? { title: '' }\n const sections = base.sections ? [...base.sections, section] : [section]\n return { ...base, sections }\n}\n","import type { ChartSpec } from './chart-spec'\n\n/**\n * A DashboardSpec is the output produced by a `DashboardOutput` node in the\n * astrlabe canvas. It's the data contract between a workflow run and any app\n * (astrlabe, kori-erp) that wants to render the result.\n *\n * Every field is optional except `title` so the authoring UI can build up a\n * dashboard incrementally (just charts, just KPIs, mix-and-match).\n *\n * `sections` is the polymorphic vocabulary the kori templates emit\n * (entity / narrative / lifecycle / receipt / approval / fiscal / feed /\n * score / note) — each renders via a dedicated component from\n * `@datatechsolutions/ui`. The agent picks from this catalog rather than\n * filling a fixed kpi/chart/table mould, which is the first step toward\n * AI generative UI: the LLM emits typed section primitives instead of\n * a single rigid blob.\n */\nexport type DashboardSpec = {\n title: string\n subtitle?: string\n /** One or more charts — rendered top-to-bottom, 2-up on wide screens. */\n charts?: ChartSpec[]\n /** Key metrics shown as large cards at the top. */\n kpis?: DashboardKpi[]\n /** Optional tabular data (station list, sales by region, etc.). */\n table?: DashboardTable\n /** Freeform recommendation from the agent — rendered as a highlighted block. */\n recommendation?: string\n /** Polymorphic section list — agent-driven dashboard generative UI. */\n sections?: DashboardSection[]\n /** Layout hint. Default: 'grid'. */\n layout?: 'grid' | 'stacked'\n /** Extra metadata displayed in the footer (generated at, source datasource id, ...). */\n meta?: Record<string, string>\n}\n\n/**\n * Tagged union of section primitives an agent can emit.\n *\n * Adding a new variant:\n * 1. Add the `{ type: 'foo'; data: FooSectionData }` arm here\n * 2. Add the `data` shape interface below\n * 3. Add a renderer branch in `DashboardView`\n * 4. Document in the agent's systemPrompt so the LLM emits the new type\n *\n * Older clients that don't recognize a new `type` render it via the\n * `note` fallback — no breaking change.\n */\nexport type DashboardSection =\n | { type: 'entity'; data: EntitySectionData }\n | { type: 'narrative'; data: NarrativeSectionData }\n | { type: 'lifecycle'; data: LifecycleSectionData }\n | { type: 'receipt'; data: ReceiptSectionData }\n | { type: 'approval'; data: ApprovalSectionData }\n | { type: 'fiscal'; data: FiscalSectionData }\n | { type: 'feed'; data: FeedSectionData }\n | { type: 'score'; data: ScoreSectionData }\n | { type: 'note'; data: NoteSectionData }\n | { type: 'input_request'; data: InputRequestSectionData }\n\n/** A summarized business object — customer card, invoice card, lead card, etc. */\nexport type EntitySectionData = {\n /** Domain hint — `customer` | `lead` | `invoice` | `sale` | `task` | `opportunity`. */\n entityType?: string\n title: string\n subtitle?: string\n /** Key/value rows shown beneath the title (e.g. CPF, segment, total). */\n fields?: Array<{ label: string; value: string | number }>\n /** Optional status pill (`paid`, `overdue`, `qualified`, …). */\n status?: { label: string; tone?: SectionTone }\n}\n\n/** Free-form agent output — its own thinking, summary, or recommendation. */\nexport type NarrativeSectionData = {\n title?: string\n body: string\n agent?: { name: string; avatarUrl?: string }\n durationMs?: number\n}\n\n/** A multi-step process timeline — sale lifecycle, approval chain, NF-e issue. */\nexport type LifecycleSectionData = {\n title?: string\n /** Mirrors `StepTimelineItem` — steps[].status drives the visual state. */\n steps: Array<{\n id: string\n name: string\n description: string\n status: 'complete' | 'current' | 'upcoming'\n }>\n progressLabel?: string\n}\n\n/** Itemized total — POS receipt, invoice line items, PO lines. */\nexport type ReceiptSectionData = {\n title?: string\n items: Array<{\n description: string\n quantity: number\n unitPrice: string | number\n total: string | number\n }>\n subtotal?: string | number\n tax?: string | number\n total: string | number\n /** ISO 4217 — `BRL`, `USD`. Default `BRL`. */\n currency?: string\n}\n\n/** Snapshot of an operator decision — surfaces at the run viewer + audit. */\nexport type ApprovalSectionData = {\n decision: 'approved' | 'rejected' | 'pending'\n by?: { id?: string; name?: string }\n at?: string\n reason?: string\n prompt?: string\n}\n\n/** NF-e / NFS-e / fiscal document metadata. */\nexport type FiscalSectionData = {\n /** nfe.io issued document id. */\n nfeId?: string\n /** SEFAZ access key (chave de acesso). */\n accessKey?: string\n /** Public URL where the issued doc can be viewed/downloaded. */\n statusUrl?: string\n environment?: 'homologation' | 'production'\n number?: string\n series?: string\n}\n\n/** Activity feed — run events, audit entries, recent actions. */\nexport type FeedSectionData = {\n title?: string\n items: Array<{\n title: string\n description?: string\n /** ISO 8601. */\n timestamp?: string\n tone?: SectionTone\n }>\n}\n\n/** AI-emitted score with qualitative bucket. */\nexport type ScoreSectionData = {\n label: string\n /** 0..100 numeric score. */\n score: number\n /** Bucket — `hot` / `warm` / `cold`, `high` / `medium` / `low`, etc. */\n qualification?: string\n reasoning?: string\n}\n\n/** Catch-all callout (also the fallback for unknown section types). */\nexport type NoteSectionData = {\n title?: string\n body: string\n tone?: SectionTone\n}\n\n/**\n * Interactive form rendered inline on a paused run. The agent (or a\n * `human_approval` node config) emits this to capture structured\n * operator input — credit-limit override, rejection reason, fulfilment\n * carrier choice, …\n *\n * Submission flows through the existing approvals API: when the user\n * clicks the submit button, the form POSTs to\n * `/workflow-runs/{runId}/approvals/{nodeId}` with the field values\n * packaged in `payload`. The backend merges them into\n * `inputs.approvals.<nodeId>.payload` so downstream nodes see them on\n * the next pass.\n */\nexport type InputRequestSectionData = {\n /** Node id this form resolves — matches the paused human_approval node. */\n nodeId: string\n /** Headline explaining what the operator is being asked. */\n prompt: string\n /** Optional secondary explanation. */\n description?: string\n /** Form fields the operator fills before submitting. */\n fields: InputRequestField[]\n /** Submit button copy. Defaults to \"Aprovar\". */\n submitLabel?: string\n /** Reject button copy. Defaults to \"Rejeitar\"; pass null to hide. */\n rejectLabel?: string | null\n /** Tone for the surrounding card. Defaults to `info`. */\n tone?: SectionTone\n}\n\nexport type InputRequestField =\n | InputTextField\n | InputNumberField\n | InputTextareaField\n | InputSelectField\n | InputBooleanField\n\ntype CommonFieldProps = {\n /** Form-state key — also the resulting `payload` key. */\n key: string\n label: string\n required?: boolean\n helpText?: string\n}\n\nexport type InputTextField = CommonFieldProps & {\n kind: 'text'\n placeholder?: string\n defaultValue?: string\n}\n\nexport type InputNumberField = CommonFieldProps & {\n kind: 'number'\n placeholder?: string\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n}\n\nexport type InputTextareaField = CommonFieldProps & {\n kind: 'textarea'\n placeholder?: string\n defaultValue?: string\n rows?: number\n}\n\nexport type InputSelectField = CommonFieldProps & {\n kind: 'select'\n options: Array<{ value: string; label: string }>\n defaultValue?: string\n}\n\nexport type InputBooleanField = CommonFieldProps & {\n kind: 'boolean'\n defaultValue?: boolean\n}\n\nexport type SectionTone =\n | 'default'\n | 'info'\n | 'success'\n | 'warning'\n | 'danger'\n\nexport type DashboardKpi = {\n label: string\n value: string | number\n unit?: string\n /** Optional change indicator (positive = up, negative = down). */\n deltaPct?: number\n tone?: 'default' | 'success' | 'warning' | 'danger'\n}\n\nexport type DashboardTable = {\n title?: string\n columns: Array<{ key: string; label: string; align?: 'left' | 'right' | 'center'; format?: 'number' | 'currency' | 'percent' | 'text' }>\n rows: Array<Record<string, string | number | null>>\n}\n\n/** Result of validating a DashboardSpec — surfaces empty/overloaded dashboards early. */\nexport type DashboardSpecIssue =\n | { kind: 'empty'; message: string }\n | { kind: 'tableColumnMissing'; column: string; message: string }\n | { kind: 'chartSeriesMissing'; chartIndex: number; message: string }\n\nexport function validateDashboardSpec(spec: DashboardSpec): DashboardSpecIssue[] {\n const issues: DashboardSpecIssue[] = []\n\n const hasCharts = (spec.charts?.length ?? 0) > 0\n const hasKpis = (spec.kpis?.length ?? 0) > 0\n const hasTable = (spec.table?.rows.length ?? 0) > 0\n const hasRecommendation = Boolean(spec.recommendation?.trim())\n const hasSections = (spec.sections?.length ?? 0) > 0\n\n if (!hasCharts && !hasKpis && !hasTable && !hasRecommendation && !hasSections) {\n issues.push({ kind: 'empty', message: 'Dashboard has no content (no charts, KPIs, table, recommendation, or sections).' })\n }\n\n spec.charts?.forEach((chart, chartIndex) => {\n if (chart.series.length === 0) {\n issues.push({\n kind: 'chartSeriesMissing',\n chartIndex,\n message: `Chart \"${chart.title}\" has no series.`,\n })\n }\n })\n\n if (spec.table) {\n const columnKeys = new Set(spec.table.columns.map((column) => column.key))\n const reported = new Set<string>()\n for (const row of spec.table.rows) {\n for (const key of Object.keys(row)) {\n if (!columnKeys.has(key) && !reported.has(key)) {\n reported.add(key)\n issues.push({\n kind: 'tableColumnMissing',\n column: key,\n message: `Table row references column \"${key}\" not declared in columns.`,\n })\n }\n }\n }\n }\n\n return issues\n}\n","import {\n RocketLaunchIcon,\n HandThumbUpIcon,\n AdjustmentsHorizontalIcon,\n} from '@heroicons/react/24/outline'\n\ntype RecommendationCardProps = {\n price: string\n delta: string\n confidence: string\n margin: string\n minMax: string\n}\n\n/**\n * AI Recommendation tile — used in landing/pricing demos.\n * Glass shell + accent-tinted glass on action buttons (Approve =\n * emerald, Modify = slate) so the whole card stays in the crystal\n * family. Divider uses `liquid-divider`. Text contrast bumped to\n * 700/300 on light/dark to clear WCAG AA over the glass.\n */\nexport function RecommendationCard({ price, delta, confidence, margin, minMax }: RecommendationCardProps) {\n return (\n <div className=\"liquid-surface rounded-xl p-3.5\">\n <div className=\"mb-2 flex items-center gap-1.5 text-[11px] font-semibold text-slate-600 dark:text-slate-300\">\n <RocketLaunchIcon className=\"h-3.5 w-3.5 text-amber-500\" />\n AI Recommendation\n </div>\n <div className=\"flex items-center gap-2 mb-2\">\n {/* Numeric headline — tabular-nums for alignment, font-bold OK\n per DS rule for metric displays. */}\n <div className=\"text-xl font-bold tabular-nums text-emerald-700 dark:text-emerald-300\">{price}</div>\n <span className=\"rounded-full bg-emerald-500/20 px-1.5 py-0.5 text-[9px] font-semibold text-emerald-700 dark:text-emerald-300\">{delta}</span>\n </div>\n <div className=\"space-y-1.5 mb-2.5\">\n <div className=\"flex items-center justify-between text-[10px]\">\n <span className=\"text-slate-600 dark:text-slate-300\">Confidence</span>\n <span className=\"font-semibold tabular-nums text-blue-700 dark:text-blue-300\">{confidence}</span>\n </div>\n <div className=\"h-1.5 rounded-full bg-white/40 dark:bg-white/10 overflow-hidden\">\n <div className=\"h-full rounded-full bg-gradient-to-r from-blue-500 to-indigo-500\" style={{ width: confidence }} />\n </div>\n <div className=\"flex items-center justify-between text-[10px]\">\n <span className=\"text-slate-600 dark:text-slate-300\">Margin</span>\n <span className=\"font-semibold tabular-nums text-purple-700 dark:text-purple-300\">{margin}</span>\n </div>\n </div>\n <div className=\"flex items-center gap-1.5 mb-2\">\n {/* Approve — emerald glass (same crystal mechanic as\n ios-glass-green's hover state, applied at rest because\n this is an inline action chip, not a primary CTA). */}\n <button\n type=\"button\"\n className=\"rounded-lg px-2.5 py-1 text-[10px] font-semibold transition-colors\n bg-emerald-500/20 text-emerald-700 dark:text-emerald-300\n hover:bg-emerald-500/30 ring-1 ring-inset ring-emerald-500/30\n focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70\"\n >\n <span className=\"flex items-center gap-1\"><HandThumbUpIcon className=\"h-3 w-3\" /> Approve</span>\n </button>\n <button\n type=\"button\"\n className=\"rounded-lg px-2.5 py-1 text-[10px] font-semibold transition-colors\n bg-slate-500/15 text-slate-700 dark:text-slate-200\n hover:bg-slate-500/25 ring-1 ring-inset ring-slate-500/25\n focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70\"\n >\n Modify\n </button>\n </div>\n <div className=\"liquid-divider border-t pt-1.5\">\n <div className=\"flex items-center gap-1.5\">\n <AdjustmentsHorizontalIcon className=\"h-3 w-3 text-purple-600 dark:text-purple-300\" />\n <span className=\"text-[9px] font-medium text-purple-700 dark:text-purple-300\">2 rules · {minMax}</span>\n </div>\n </div>\n </div>\n )\n}\n","import { TableCellsIcon } from '@heroicons/react/24/outline'\n\ntype CompetitorEntry = {\n name: string\n distance: string\n price: string\n change: string\n up: boolean\n}\n\ntype MarketPricesCardProps = {\n competitors: CompetitorEntry[]\n}\n\nexport function MarketPricesCard({ competitors }: MarketPricesCardProps) {\n return (\n <div className=\"liquid-surface rounded-xl p-3.5\">\n <div className=\"mb-2 flex items-center gap-1.5 text-[11px] font-semibold text-slate-700 dark:text-slate-200\">\n <TableCellsIcon className=\"h-3 w-3 text-sky-600 dark:text-sky-400\" />\n Market Prices\n </div>\n <div className=\"space-y-1\">\n {competitors.map((competitor) => (\n <div key={competitor.name} className=\"flex items-center justify-between text-[11px]\">\n <span className=\"text-slate-700 dark:text-slate-200 truncate mr-2\">{competitor.name}</span>\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <span className=\"text-slate-600 dark:text-slate-300\">{competitor.distance}</span>\n <span className=\"font-semibold tabular-nums text-slate-900 dark:text-white\">{competitor.price}</span>\n <span className={`font-semibold tabular-nums ${competitor.up ? 'text-emerald-700 dark:text-emerald-300' : 'text-rose-700 dark:text-rose-300'}`}>{competitor.change}</span>\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import { ReactNode } from 'react'\nimport { SectionCard } from '@ui/components/card'\n\ntype HeroSectionProps = {\n icon: ReactNode\n label: string\n title: string\n subtitle: ReactNode\n /** Optional top accent gradient bar (e.g. \"from-indigo-600 via-purple-600 to-pink-500\") */\n gradient?: string\n /** Optional action buttons to display in the header */\n actions?: ReactNode\n /** Optional toolbar (search/filter/create) rendered below subtitle */\n toolbar?: ReactNode\n /** Optional badges/pills to display below subtitle */\n badges?: ReactNode\n /** Optional extra content next to the label (e.g. entity count) */\n labelExtra?: ReactNode\n children?: ReactNode\n}\n\n/**\n * Page banner — a thin alias of `<SectionCard kind=\"banner\">`. Kept\n * for the 15+ consumers across `apps/*` and `packages/ui/src/platform`\n * that already import it; new code can use `<SectionCard kind=\"banner\">`\n * directly with the exact same slots.\n *\n * Maps:\n * label → header.eyebrow\n * icon/title/subtitle → header\n * gradient → accentGradient\n * actions / toolbar / badges → SectionCard's same-named slots\n * labelExtra → eyebrowExtra\n *\n * `subtitle` is typed as ReactNode (JSX/links allowed); SectionCard\n * accepts only string, so when JSX is passed we render it manually\n * inside `children` and forward only the string portion (if any) as\n * subtitle. That keeps the legacy API intact.\n */\nexport function HeroSection({\n icon,\n label,\n title,\n subtitle,\n gradient,\n actions,\n toolbar,\n badges,\n labelExtra,\n children,\n}: HeroSectionProps) {\n const subtitleIsString = typeof subtitle === 'string'\n\n return (\n <SectionCard\n kind=\"banner\"\n headingLevel=\"h1\"\n variant=\"default\"\n padded\n accentGradient={gradient}\n actions={actions}\n toolbar={toolbar}\n badges={badges}\n eyebrowExtra={labelExtra}\n header={{\n icon,\n eyebrow: label,\n title,\n subtitle: subtitleIsString ? (subtitle as string) : undefined,\n }}\n >\n {/* Subtitle was JSX (not a plain string) — render inline so\n callers can keep links/badges in their subtitle copy. The\n surrounding SectionCard body already supplies banner padding\n (`p-5 sm:p-8`), so we only need typography here. */}\n {!subtitleIsString && subtitle && (\n <p\n data-testid=\"hero-subtitle\"\n className=\"max-w-xl text-sm text-slate-600 dark:text-white/75 sm:text-lg\"\n >\n {subtitle}\n </p>\n )}\n {children && (\n <div className={!subtitleIsString && subtitle ? 'mt-5' : ''}>\n {children}\n </div>\n )}\n </SectionCard>\n )\n}\n","import { AnimatePresence, motion } from 'framer-motion'\nimport { MapIcon, XMarkIcon } from '@heroicons/react/24/outline'\nimport type { ComponentType } from 'react'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\n\nexport interface ActiveFilterChip {\n type: string\n value: string\n label: string\n color?: string\n}\n\nexport interface ActiveFilterChipStyleConfig {\n icon: ComponentType<{ className?: string }>\n className: string\n}\n\ninterface ActiveFilterChipsProps {\n filters: ActiveFilterChip[]\n onRemoveFilter?: (filter: ActiveFilterChip) => void\n styleConfig?: Record<string, ActiveFilterChipStyleConfig>\n}\n\nconst DEFAULT_STYLE_CONFIG: Record<string, ActiveFilterChipStyleConfig> = {\n default: {\n icon: MapIcon,\n className: 'bg-slate-500/15 text-slate-700 dark:text-slate-200',\n },\n}\n\n// Crystal chrome — matches Badge + StatusBadge so all chip-shaped\n// primitives across the DS look identical. inline `style` so the\n// effect survives caller-supplied className overrides.\nconst CRYSTAL_STYLE = {\n backdropFilter: 'blur(12px) saturate(1.5)',\n WebkitBackdropFilter: 'blur(12px) saturate(1.5)',\n boxShadow:\n 'inset 0 1px 1.5px rgba(255,255,255,0.45), 0 1px 3px -1px rgba(15,23,42,0.12)',\n} as const\n\n/**\n * Strip of active filter chips with animated enter/exit. Each chip\n * is a crystal pill (same chrome as `<Badge>` / `<StatusBadge>`)\n * with a leading icon picked from `styleConfig[filter.type]` and an\n * optional `×` remove button.\n */\nexport function ActiveFilterChips({\n filters,\n onRemoveFilter,\n styleConfig = DEFAULT_STYLE_CONFIG,\n}: ActiveFilterChipsProps) {\n return (\n <AnimatePresence mode=\"popLayout\">\n {filters.map((filter) => {\n const config = styleConfig[filter.type] ?? styleConfig.default ?? DEFAULT_STYLE_CONFIG.default\n const IconComponent = config.icon\n const colorClass = filter.color || config.className\n return (\n <motion.span\n key={`${filter.type}-${filter.value}`}\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n layout\n style={CRYSTAL_STYLE}\n className={`inline-flex items-center gap-1.5 rounded-full border border-current/20 px-3 py-1 text-xs font-semibold ${colorClass}`}\n >\n <IconComponent className=\"h-3.5 w-3.5\" aria-hidden />\n {filter.label}\n {onRemoveFilter ? (\n <button\n type=\"button\"\n aria-label={`remover ${filter.label}`}\n onClick={(event) => {\n event.stopPropagation()\n triggerHaptic('light')\n onRemoveFilter(filter)\n }}\n className=\"ml-0.5 inline-flex h-4 w-4 shrink-0 cursor-pointer items-center justify-center rounded-full opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70\"\n >\n <XMarkIcon className=\"h-3 w-3\" />\n </button>\n ) : null}\n </motion.span>\n )\n })}\n </AnimatePresence>\n )\n}\n","import { Fragment, ReactNode, useState, useRef, useCallback } from 'react'\nimport { Dialog, DialogBackdrop, DialogPanel, Transition, TransitionChild } from '@headlessui/react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport {\n MagnifyingGlassIcon,\n XMarkIcon,\n MapIcon,\n BuildingStorefrontIcon,\n ClockIcon,\n FunnelIcon,\n} from '@heroicons/react/24/outline'\nimport {\n ActiveFilterChips,\n type ActiveFilterChipStyleConfig,\n} from '@ui/components/active-filter-chips'\nimport { Button } from '@ui/components/button'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\n\nexport interface ActiveFilter {\n type: string\n value: string\n label: string\n /** Optional custom color class for the pill */\n color?: string\n}\n\n/**\n * Inline strip of crystal pills rendered alongside the search input\n * (e.g. each region the user picked). Same chip API as Badge — keeps\n * the input compact while showing what's currently filtering the\n * results. Set `onRemoveFilter` to render the × on each chip.\n */\nexport type SearchBarFiltersModal = {\n /** Whether the filter modal is open */\n open: boolean\n /** Open the filter modal (called by the trailing Filters button) */\n onOpen: () => void\n /** Close the filter modal (also fires when the backdrop is clicked) */\n onClose: () => void\n /** Modal heading. Defaults to the localized \"Filters\" string. */\n title?: string\n /** Optional small badge on the Filters button + a \"Clear\" action\n * inside the modal footer. Hide the Clear action by leaving\n * `onClear` undefined. */\n count?: number\n onClear?: () => void\n /** Eyebrow row above the modal title — entity + count. */\n context?: { icon?: ReactNode; label: string; countLabel?: string }\n /** The actual filter form rendered inside the modal body. */\n children: ReactNode\n}\n\ntype SearchBarProps = {\n searchTerm: string\n onSearchChange: (value: string) => void\n placeholder?: string\n activeFilters?: ActiveFilter[]\n onRemoveFilter?: (filter: ActiveFilter) => void\n onClearAll?: () => void\n /** Optional content to render at the end of the search bar (inside the input area) */\n endContent?: ReactNode\n /** Sibling content rendered AFTER the search bar — typically CTAs\n * like CreateActionButton or auxiliary buttons. */\n actions?: ReactNode\n /** Remove border and shadow when inside a unified container */\n noBorder?: boolean\n /** Show cancel button on focus */\n showCancelButton?: boolean\n /** Callback when cancel button is clicked */\n onCancel?: () => void\n /** Optional style config for filter chip types */\n filterChipStyleConfig?: Record<string, ActiveFilterChipStyleConfig>\n /** When provided, renders a trailing \"Filters\" button that opens a\n * glass modal with the supplied children — folds the legacy\n * `SearchFilterToolbar` modal pattern into this primitive. */\n filtersModal?: SearchBarFiltersModal\n}\n\nconst defaultFilterTypeConfig: Record<string, ActiveFilterChipStyleConfig> = {\n region: {\n icon: MapIcon,\n className: \"bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-400\",\n },\n brand: {\n icon: BuildingStorefrontIcon,\n className: \"bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400\",\n },\n status: {\n icon: ClockIcon,\n className: \"bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400\",\n },\n category: {\n icon: MapIcon,\n className: \"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400\",\n },\n default: {\n icon: MapIcon,\n className: \"bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300\",\n },\n}\n\n/**\n * Canonical search primitive — glass input + optional active-filter\n * pills + optional trailing actions + optional filter modal. Subsumes\n * the legacy `SearchFilterToolbar` (deleted 2026-05) — pass a\n * `filtersModal` prop to render its Filters button + sheet.\n */\nexport function SearchBar({\n searchTerm,\n onSearchChange,\n placeholder,\n activeFilters = [],\n onRemoveFilter,\n onClearAll,\n endContent,\n actions,\n noBorder = false,\n showCancelButton = false,\n onCancel,\n filterChipStyleConfig,\n filtersModal,\n}: SearchBarProps) {\n const t = useTranslations(\"common\")\n const [isFocused, setIsFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const hasFilters = activeFilters.length > 0 || searchTerm.length > 0\n const defaultPlaceholder = placeholder || t(\"searchPlaceholder\")\n const filtersModalCount = filtersModal?.count ?? 0\n const resolvedFiltersTitle = filtersModal?.title ?? t(\"filters\")\n\n const handleFocus = useCallback(() => {\n setIsFocused(true)\n triggerHaptic(\"light\")\n }, [])\n\n const handleBlur = useCallback(() => {\n // Delay blur to allow cancel button click\n setTimeout(() => setIsFocused(false), 150)\n }, [])\n\n const handleClear = useCallback(() => {\n triggerHaptic(\"light\")\n onSearchChange(\"\")\n inputRef.current?.focus()\n }, [onSearchChange])\n\n const handleCancel = useCallback(() => {\n triggerHaptic(\"light\")\n onSearchChange(\"\")\n setIsFocused(false)\n inputRef.current?.blur()\n onCancel?.()\n }, [onSearchChange, onCancel])\n\n // Container uses the canonical `liquid-surface` chrome — same\n // crystal layers as inputs/selects/cards. Focus state lifts a\n // canonical indigo-500/70 ring so the focus indicator matches\n // every other interactive surface in the DS.\n const containerClasses = noBorder\n ? \"flex flex-wrap items-center gap-2 p-3 bg-transparent\"\n : `liquid-surface flex flex-wrap items-center gap-2 p-3 rounded-2xl\n transition-all duration-200\n ${isFocused ? \"ring-2 ring-indigo-500/70 ring-offset-1\" : \"\"}`\n\n return (\n <>\n <div role=\"search\" data-testid=\"search-toolbar\" className=\"flex items-center gap-2\">\n <motion.div\n className={containerClasses}\n layout\n transition={{ duration: 0.2 }}\n style={{ flex: 1 }}\n >\n {/* Active filter chips */}\n <ActiveFilterChips\n filters={activeFilters}\n onRemoveFilter={onRemoveFilter}\n styleConfig={filterChipStyleConfig ?? defaultFilterTypeConfig}\n />\n\n {/* Search input */}\n <div className=\"flex-1 min-w-[200px] relative\">\n <MagnifyingGlassIcon\n className={`absolute left-3 top-1/2 -translate-y-1/2 h-5 w-5 transition-colors duration-200\n ${isFocused ? \"text-indigo-600 dark:text-indigo-400\" : \"text-slate-400\"}`}\n />\n <input\n ref={inputRef}\n type=\"text\"\n placeholder={activeFilters.length > 0 ? t(\"refineSearch\") : defaultPlaceholder}\n value={searchTerm}\n onChange={(e) => onSearchChange(e.target.value)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n data-testid=\"search-input\"\n className=\"w-full h-11 pl-10 pr-10 text-base bg-transparent\n text-slate-900 dark:text-white\n placeholder:text-slate-400 dark:placeholder:text-slate-500\n focus:outline-none\"\n />\n\n {/* Clear button inside input */}\n <AnimatePresence>\n {searchTerm && (\n <motion.button\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={{ duration: 0.15 }}\n onClick={handleClear}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 p-1.5 rounded-full\n bg-white/40 dark:bg-white/[0.08]\n text-slate-500 dark:text-slate-300\n hover:bg-white/60 dark:hover:bg-white/[0.12]\n transition-colors\"\n >\n <XMarkIcon className=\"h-4 w-4\" />\n </motion.button>\n )}\n </AnimatePresence>\n </div>\n\n {/* End content (optional) */}\n {endContent}\n\n {/* Clear all filters button */}\n {hasFilters && onClearAll && !showCancelButton && (\n <button\n onClick={() => {\n triggerHaptic(\"light\")\n onClearAll()\n }}\n className=\"p-2 rounded-xl text-slate-400 hover:text-slate-600 dark:hover:text-white\n hover:bg-white/40 dark:hover:bg-white/[0.08] transition-colors\"\n title={t(\"clearFilters\")}\n >\n <XMarkIcon className=\"h-5 w-5\" />\n </button>\n )}\n </motion.div>\n\n {/* Trailing Filters button — only rendered when a filtersModal\n descriptor is supplied. Opens the glass modal with the\n caller-supplied filter form. */}\n {filtersModal && (\n <Button\n type=\"button\"\n onClick={filtersModal.onOpen}\n outline\n className=\"h-12\"\n >\n <FunnelIcon className=\"h-4 w-4\" />\n <span>{resolvedFiltersTitle}</span>\n {filtersModalCount > 0 && (\n <span className=\"rounded-full bg-blue-500 px-1.5 py-0.5 text-[10px] font-bold text-white\">\n {filtersModalCount}\n </span>\n )}\n </Button>\n )}\n\n {/* Sibling actions — CTAs that live next to the search bar\n (CreateActionButton, generate-from-template, etc.). */}\n {actions}\n\n {/* Cancel button - appears on focus */}\n <AnimatePresence>\n {showCancelButton && isFocused && (\n <motion.button\n initial={{ opacity: 0, x: -10, width: 0 }}\n animate={{ opacity: 1, x: 0, width: \"auto\" }}\n exit={{ opacity: 0, x: -10, width: 0 }}\n transition={{ duration: 0.2 }}\n onClick={handleCancel}\n className=\"text-indigo-600 dark:text-indigo-400 font-medium whitespace-nowrap px-2\"\n >\n {t(\"cancel\")}\n </motion.button>\n )}\n </AnimatePresence>\n </div>\n\n {/* Filters modal — opens when `filtersModal.open === true`. Same\n glass chrome as GlassModal (Headless UI Dialog + backdrop\n blur), with header/body/footer. Keeps focus trapped inside\n the dialog for AT compliance. */}\n {filtersModal && (\n <Transition show={filtersModal.open} as={Fragment}>\n <Dialog as=\"div\" className=\"relative z-50\" onClose={filtersModal.onClose}>\n <TransitionChild\n as={Fragment}\n enter=\"ease-out duration-200\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-150\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <DialogBackdrop className=\"fixed inset-0 bg-slate-900/35 backdrop-blur-md\" />\n </TransitionChild>\n\n <div className=\"fixed inset-0 overflow-y-auto p-3 sm:p-6\">\n <div className=\"mx-auto flex min-h-full max-w-2xl items-start justify-center pt-[8vh]\">\n <TransitionChild\n as={Fragment}\n enter=\"ease-out duration-250\"\n enterFrom=\"opacity-0 scale-95\"\n enterTo=\"opacity-100 scale-100\"\n leave=\"ease-in duration-180\"\n leaveFrom=\"opacity-100 scale-100\"\n leaveTo=\"opacity-0 scale-95\"\n >\n <DialogPanel className=\"liquid-surface-strong w-full overflow-hidden rounded-2xl\">\n <div className=\"border-b liquid-divider px-5 py-4\">\n {filtersModal.context ? (\n <div className=\"mb-2 flex items-center gap-2 text-slate-600 dark:text-white/70\">\n <span>{filtersModal.context.icon ?? <FunnelIcon className=\"h-3.5 w-3.5\" />}</span>\n <span className=\"text-sm font-medium\">{filtersModal.context.label}</span>\n {filtersModal.context.countLabel ? (\n <span className=\"text-xs text-slate-400 dark:text-white/50\">\n · {filtersModal.context.countLabel}\n </span>\n ) : null}\n </div>\n ) : null}\n <h3 className=\"text-lg font-semibold tracking-tight text-slate-900 dark:text-slate-100\">\n {resolvedFiltersTitle}\n </h3>\n </div>\n\n <div className=\"max-h-[72vh] overflow-y-auto p-4 sm:p-5\">\n <div className=\"space-y-6\">{filtersModal.children}</div>\n </div>\n\n <div className=\"flex items-center justify-end gap-2 border-t liquid-divider p-4\">\n {filtersModal.onClear && filtersModalCount > 0 && (\n <Button\n type=\"button\"\n onClick={filtersModal.onClear}\n outline\n size=\"sm\"\n >\n {t(\"clearFilters\")}\n </Button>\n )}\n <Button\n type=\"button\"\n onClick={filtersModal.onClose}\n color=\"ios-glass-blue\"\n size=\"sm\"\n >\n {t(\"done\")}\n </Button>\n </div>\n </DialogPanel>\n </TransitionChild>\n </div>\n </div>\n </Dialog>\n </Transition>\n )}\n </>\n )\n}\n","import { useId } from 'react'\nimport * as Popover from '@radix-ui/react-popover'\nimport { InformationCircleIcon } from '@heroicons/react/24/outline'\nimport type { ReactNode } from 'react'\n\nexport type InfoPopoverProps = {\n title: string\n content: ReactNode\n triggerLabel?: string\n}\n\nexport function InfoPopover({ title, content, triggerLabel = 'Info' }: InfoPopoverProps) {\n const id = useId()\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <button type=\"button\" aria-label={triggerLabel} className=\"text-gray-400 hover:text-gray-700 dark:hover:text-gray-200\">\n <InformationCircleIcon className=\"h-4 w-4\" />\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content id={id} sideOffset={8} className=\"liquid-surface-strong z-[120] w-80 rounded-xl p-3\">\n <p className=\"text-sm font-semibold text-gray-900 dark:text-white\">{title}</p>\n <div className=\"mt-1.5 text-xs text-gray-600 dark:text-gray-300\">{content}</div>\n <Popover.Arrow className=\"fill-white/50 dark:fill-slate-800/70\" />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n","import { ReactNode } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { XMarkIcon } from '@heroicons/react/24/outline'\nimport { InfoPopover } from '@ui/components/info-popover'\n\ntype ColorVariant = \"emerald\" | \"blue\" | \"amber\" | \"orange\" | \"indigo\" | \"purple\" | \"red\"\n\ntype InfoConfig = {\n title?: string\n content?: string\n blocks?: Array<{ label: string; content: string }>\n}\n\ntype StatCardProps = {\n icon: ReactNode\n value: string | number\n label: string\n /** Optional badge/pill displayed below the label (e.g., month indicator) */\n badge?: string\n /** Optional info popover configuration to show SQL queries */\n info?: InfoConfig\n color?: ColorVariant\n /** Shows a filtered indicator badge */\n isFiltered?: boolean\n /** Shows urgent styling (amber tint) */\n isUrgent?: boolean\n /** Makes the card clickable with active state */\n isActive?: boolean\n /** When true, the value is announced to screen readers as it\n * updates (live dashboards, streaming metrics). Wraps the value\n * in `aria-live=\"polite\" aria-atomic=\"true\"` so the new value\n * is read whole, not character-by-character. WCAG 4.1.3. */\n live?: boolean\n onClick?: () => void\n className?: string\n}\n\nconst colorClasses: Record<\n ColorVariant,\n {\n iconBg: string\n activeGradient: string\n activeRing: string\n valueColor: string\n badgeBg: string\n urgentValueColor?: string\n }\n> = {\n emerald: {\n iconBg: \"bg-emerald-100 text-emerald-600 dark:bg-emerald-900/50 dark:text-emerald-400\",\n activeGradient: \"from-emerald-500 to-teal-600\",\n activeRing: \"ring-emerald-500\",\n valueColor: \"text-slate-900 dark:text-white\",\n badgeBg: \"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/50 dark:text-emerald-300\",\n },\n blue: {\n iconBg: \"bg-blue-100 text-blue-600 dark:bg-blue-900/50 dark:text-blue-400\",\n activeGradient: \"from-blue-500 to-indigo-600\",\n activeRing: \"ring-indigo-500/70\",\n valueColor: \"text-slate-900 dark:text-white\",\n badgeBg: \"bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300\",\n },\n amber: {\n iconBg: \"bg-amber-100 text-amber-600 dark:bg-amber-900/50 dark:text-amber-400\",\n activeGradient: \"from-amber-500 to-orange-600\",\n activeRing: \"ring-amber-500\",\n valueColor: \"text-slate-900 dark:text-white\",\n badgeBg: \"bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300\",\n urgentValueColor: \"text-amber-600 dark:text-amber-400\",\n },\n orange: {\n iconBg: \"bg-orange-100 text-orange-600 dark:bg-orange-900/50 dark:text-orange-400\",\n activeGradient: \"from-orange-500 to-amber-600\",\n activeRing: \"ring-orange-500\",\n valueColor: \"text-slate-900 dark:text-white\",\n badgeBg: \"bg-orange-100 text-orange-700 dark:bg-orange-900/50 dark:text-orange-300\",\n },\n indigo: {\n iconBg: \"bg-indigo-100 text-indigo-600 dark:bg-indigo-900/50 dark:text-indigo-400\",\n activeGradient: \"from-indigo-500 to-blue-600\",\n activeRing: \"ring-indigo-500\",\n valueColor: \"text-slate-900 dark:text-white\",\n badgeBg: \"bg-indigo-100 text-indigo-700 dark:bg-indigo-900/50 dark:text-indigo-300\",\n },\n purple: {\n iconBg: \"bg-purple-100 text-purple-600 dark:bg-purple-900/50 dark:text-purple-400\",\n activeGradient: \"from-purple-500 to-indigo-600\",\n activeRing: \"ring-purple-500\",\n valueColor: \"text-slate-900 dark:text-white\",\n badgeBg: \"bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300\",\n },\n red: {\n iconBg: \"bg-red-100 text-red-600 dark:bg-red-900/50 dark:text-red-400\",\n activeGradient: \"from-red-500 to-rose-600\",\n activeRing: \"ring-red-500\",\n valueColor: \"text-red-600 dark:text-red-400\",\n badgeBg: \"bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300\",\n },\n}\n\n/**\n * Reusable stat card for displaying metrics\n * Used in stats grids across dashboard pages\n */\nexport function StatCard({\n icon,\n value,\n label,\n badge,\n info,\n color = \"indigo\",\n isFiltered = false,\n isUrgent = false,\n isActive = false,\n live = false,\n onClick,\n className = \"\",\n}: StatCardProps) {\n const t = useTranslations(\"common\")\n const colorConfig = colorClasses[color]\n const isClickable = !!onClick\n\n return (\n <div\n role=\"status\"\n aria-label={label}\n data-testid={label ? `stat-card-${label.toLowerCase().replace(/\\s+/g, '-')}` : 'stat-card'}\n onClick={onClick}\n className={`group relative overflow-hidden rounded-xl p-5 transition-all duration-200 ${\n isClickable ? \"cursor-pointer\" : \"\"\n } ${\n isActive\n ? `bg-gradient-to-br ${colorConfig.activeGradient} ring-2 ring-offset-2 ${colorConfig.activeRing} shadow-xl`\n : `liquid-surface hover:shadow-md ${\n isFiltered\n ? \"ring-indigo-300 dark:ring-indigo-500/50\"\n : isUrgent\n ? \"ring-amber-300 dark:ring-amber-500/50\"\n : \"\"\n }`\n } ${className}`}\n >\n {/* Urgent background tint */}\n {isUrgent && !isActive && (\n <div className=\"absolute inset-0 bg-gradient-to-br from-amber-50 to-transparent dark:from-amber-900/20\" />\n )}\n\n <div className=\"relative\">\n {/* Header with icon and badges */}\n <div className=\"flex items-center justify-between\">\n <div\n className={`inline-flex rounded-lg p-2.5 ${\n isActive ? \"bg-white/20 text-white\" : colorConfig.iconBg\n }`}\n >\n {icon}\n </div>\n <div className=\"flex items-center gap-2\">\n {info && !isActive && (\n <InfoPopover\n title={info.title ?? \"\"}\n content={\n info.content\n ? info.content\n : info.blocks\n ? (\n <div className=\"space-y-2\">\n {info.blocks.map((block, index) => (\n <div key={index}>\n <p className=\"font-medium text-slate-700 dark:text-slate-200\">{block.label}</p>\n <pre className=\"whitespace-pre-wrap font-mono text-xs mt-1\">{block.content}</pre>\n </div>\n ))}\n </div>\n )\n : undefined\n }\n />\n )}\n {isActive && (\n <XMarkIcon className=\"h-5 w-5 text-white/75 hover:text-white transition-colors duration-200\" />\n )}\n {!isActive && isFiltered && (\n <span className=\"text-xs font-medium text-indigo-600 dark:text-indigo-400\">\n {t(\"filtered\")}\n </span>\n )}\n </div>\n </div>\n\n {/* Value — `font-bold` is intentional for numeric display\n (per DESIGN_SYSTEM.md, large metric values are allowed\n to use bold for legibility, same as `kind=display`). */}\n <p\n data-testid=\"stat-card-value\"\n {...(live ? { 'aria-live': 'polite', 'aria-atomic': true } : {})}\n className={`mt-4 text-3xl font-bold tracking-tight tabular-nums ${\n isActive\n ? \"text-white\"\n : isUrgent\n ? colorConfig.urgentValueColor || colorConfig.valueColor\n : colorConfig.valueColor\n }`}\n >\n {value}\n </p>\n\n {/* Label */}\n <p\n data-testid=\"stat-card-label\"\n className={`mt-1 text-sm ${\n isActive ? \"text-white/85\" : \"text-slate-600 dark:text-slate-300\"\n }`}\n >\n {label}\n </p>\n\n {/* Optional Badge/Pill */}\n {badge && (\n <span\n className={`mt-2 inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${\n isActive ? \"bg-white/20 text-white\" : colorConfig.badgeBg\n }`}\n >\n {badge}\n </span>\n )}\n </div>\n </div>\n )\n}\n","import { ReactNode } from 'react'\n\ntype SectionHeaderProps = {\n icon: ReactNode\n title: string\n subtitle?: string\n /** Gradient classes for the icon background */\n gradient?: string\n /** Optional content on the right side */\n rightContent?: ReactNode\n}\n\n/**\n * Reusable section header with gradient icon box\n * Used across dashboard pages for consistent section styling\n */\nexport function SectionHeader({\n icon,\n title,\n subtitle,\n gradient = \"from-amber-500 to-orange-600\",\n rightContent,\n}: SectionHeaderProps) {\n return (\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div\n className={`h-10 w-10 rounded-lg bg-gradient-to-br ${gradient} flex items-center justify-center shadow-lg`}\n style={{\n boxShadow: gradient.includes(\"amber\")\n ? \"0 10px 15px -3px rgba(245, 158, 11, 0.25)\"\n : gradient.includes(\"purple\")\n ? \"0 10px 15px -3px rgba(168, 85, 247, 0.25)\"\n : gradient.includes(\"emerald\")\n ? \"0 10px 15px -3px rgba(16, 185, 129, 0.25)\"\n : undefined,\n }}\n >\n {icon}\n </div>\n <div>\n <h2 className=\"text-lg font-semibold text-gray-900 dark:text-white\">\n {title}\n </h2>\n {subtitle && (\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{subtitle}</p>\n )}\n </div>\n </div>\n {rightContent}\n </div>\n )\n}\n","const CURRENCY_LOCALE_MAP: Record<string, string> = {\n BRL: 'pt-BR',\n USD: 'en-US',\n EUR: 'de-DE',\n GBP: 'en-GB',\n ARS: 'es-AR',\n COP: 'es-CO',\n MXN: 'es-MX',\n}\n\nexport function formatCurrency(\n value: number | null | undefined,\n currency: string\n): string {\n if (value === null || value === undefined) return \"—\"\n const locale = CURRENCY_LOCALE_MAP[currency] ?? 'en-US'\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n }).format(value)\n}\n\nexport function formatPercentage(\n value: number | null | undefined,\n locale: string\n): string {\n if (value === null || value === undefined) return \"—\"\n return new Intl.NumberFormat(locale, {\n style: 'percent',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n signDisplay: 'exceptZero',\n }).format(value / 100)\n}\n\nexport function formatDate(\n dateString: string | null | undefined | { value: string },\n options: { showTimezone?: boolean; locale: string }\n): string {\n if (!dateString) return \"—\"\n try {\n // Handle wrapped timestamp format {value: \"2025-01-01T00:00:00.000Z\"}\n const dateValue = typeof dateString === 'object' && 'value' in dateString\n ? dateString.value\n : dateString\n\n if (!dateValue) return \"—\"\n\n const date = new Date(dateValue)\n if (isNaN(date.getTime())) return \"—\"\n\n const locale = options.locale\n\n if (options?.showTimezone) {\n return new Intl.DateTimeFormat(locale, {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n timeZoneName: \"short\",\n }).format(date)\n }\n\n return new Intl.DateTimeFormat(locale, {\n dateStyle: \"short\",\n timeStyle: \"short\",\n }).format(date)\n } catch {\n return \"—\"\n }\n}\n\nexport function getStatusColor(status: string | null): string {\n switch (status) {\n case \"approved\":\n case \"success\":\n return \"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400\"\n case \"approved_with_adjustment\":\n return \"bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400\"\n case \"rejected\":\n case \"error\":\n return \"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400\"\n default:\n return \"bg-zinc-100 text-zinc-700 dark:bg-zinc-800 dark:text-zinc-400\"\n }\n}\n","import { ArrowTrendingUpIcon, ArrowTrendingDownIcon } from '@heroicons/react/24/outline'\nimport { useLocale } from '@ui/lib/i18n-context'\nimport { formatPercentage } from '@ui/lib/utils'\n\ntype PriceChangeBadgeProps = {\n value: number | null\n size?: \"sm\" | \"md\"\n showIcon?: boolean\n className?: string\n}\n\n/**\n * Displays a price change percentage as a colored badge.\n * Green for positive changes, red for negative.\n */\nexport function PriceChangeBadge({\n value,\n size = \"md\",\n showIcon = false,\n className = \"\",\n}: PriceChangeBadgeProps) {\n const locale = useLocale()\n\n if (value === null) return null\n\n const isPositive = value >= 0\n const colorClasses = isPositive\n ? \"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400\"\n : \"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400\"\n\n const sizeClasses = size === \"sm\" ? \"px-2 py-1 text-xs\" : \"px-2.5 py-1 text-xs\"\n const iconClasses = size === \"sm\" ? \"h-3 w-3\" : \"h-3.5 w-3.5\"\n\n return (\n <span\n className={`inline-flex items-center gap-1 rounded-full font-semibold ${colorClasses} ${sizeClasses} ${className}`}\n >\n {showIcon && (\n isPositive\n ? <ArrowTrendingUpIcon className={iconClasses} />\n : <ArrowTrendingDownIcon className={iconClasses} />\n )}\n {!showIcon && isPositive ? \"+\" : \"\"}\n {formatPercentage(value, locale)}\n </span>\n )\n}\n","import { ChevronLeftIcon, ChevronRightIcon } from '@heroicons/react/20/solid'\nimport { useTranslations } from '@ui/lib/i18n-context'\n\ntype PaginationProps = {\n currentPage: number\n totalPages: number\n totalItems: number\n pageSize: number\n onPageChange: (page: number) => void\n className?: string\n}\n\n/**\n * Page pager — consumes the DS glass tokens end-to-end:\n * - wrapper: `liquid-surface-strong` (same chrome as cards / modal hero)\n * - divider: `liquid-divider` (not a raw border-t)\n * - buttons: glass-on-hover, canonical `.focus-ring` (indigo-500/70 2px)\n * - active page: translucent indigo /20 fill + 700/300 text (same\n * contrast budget as Pill / StatusBadge — passes WCAG AA over the\n * tinted surface)\n *\n * Active-page styling sits inside the same row as inactive pages, but\n * uses semantic color tokens instead of a flat solid so the row reads\n * as a single piece of glass with one cell \"lit up\".\n */\nexport function Pagination({\n currentPage,\n totalPages,\n totalItems,\n pageSize,\n onPageChange,\n className = '',\n}: PaginationProps) {\n const t = useTranslations('approvals')\n const tCommon = useTranslations('common')\n\n const from = (currentPage - 1) * pageSize + 1\n const to = Math.min(currentPage * pageSize, totalItems)\n\n const getPageNumbers = (): (number | 'ellipsis')[] => {\n const pages: (number | 'ellipsis')[] = []\n const maxVisible = 7\n\n if (totalPages <= maxVisible) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n pages.push(1)\n if (currentPage > 3) pages.push('ellipsis')\n\n const start = Math.max(2, currentPage - 1)\n const end = Math.min(totalPages - 1, currentPage + 1)\n for (let i = start; i <= end; i++) {\n if (!pages.includes(i)) pages.push(i)\n }\n\n if (currentPage < totalPages - 2) pages.push('ellipsis')\n if (!pages.includes(totalPages)) pages.push(totalPages)\n\n return pages\n }\n\n if (totalPages <= 1) return null\n\n const pageNumbers = getPageNumbers()\n\n // Shared button chrome — glass hover, canonical focus ring, AA text.\n const baseBtn =\n 'relative inline-flex items-center px-3 py-1.5 text-sm font-medium ' +\n 'text-slate-700 dark:text-slate-200 transition-colors ' +\n 'hover:bg-white/40 dark:hover:bg-white/[0.08] ' +\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 ' +\n 'focus-visible:ring-inset disabled:opacity-50 disabled:cursor-not-allowed'\n\n return (\n <div className={`liquid-surface-strong rounded-xl px-4 py-3 sm:px-6 ${className}`}>\n {/* Mobile view */}\n <div className=\"flex flex-1 items-center justify-between sm:hidden\">\n <button\n type=\"button\"\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage === 1}\n className={`${baseBtn} rounded-lg`}\n >\n <ChevronLeftIcon aria-hidden=\"true\" className=\"mr-1 size-4\" />\n {t('previous')}\n </button>\n <span className=\"text-xs text-slate-600 dark:text-slate-300\">\n {currentPage} / {totalPages}\n </span>\n <button\n type=\"button\"\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n className={`${baseBtn} rounded-lg`}\n >\n {t('next')}\n <ChevronRightIcon aria-hidden=\"true\" className=\"ml-1 size-4\" />\n </button>\n </div>\n\n {/* Desktop view */}\n <div className=\"hidden sm:flex sm:flex-1 sm:items-center sm:justify-between\">\n <p className=\"text-sm text-slate-700 dark:text-slate-300\">\n {t('showingRange', { from, to, total: totalItems })}\n </p>\n\n <nav\n aria-label={tCommon('pagination')}\n className=\"inline-flex items-center gap-0.5\"\n >\n {/* Previous */}\n <button\n type=\"button\"\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage === 1}\n className={`${baseBtn} rounded-lg`}\n >\n <span className=\"sr-only\">{t('previous')}</span>\n <ChevronLeftIcon aria-hidden=\"true\" className=\"size-4\" />\n </button>\n\n {/* Page numbers */}\n {pageNumbers.map((page, index) =>\n page === 'ellipsis' ? (\n <span\n key={`ellipsis-${index}`}\n className=\"px-2 text-sm text-slate-500 dark:text-slate-400 select-none\"\n aria-hidden=\"true\"\n >\n …\n </span>\n ) : (\n <button\n key={page}\n type=\"button\"\n onClick={() => onPageChange(page)}\n aria-current={currentPage === page ? 'page' : undefined}\n className={\n currentPage === page\n ? // Active — translucent indigo glass tile, same\n // opacity budget as Pill/StatusBadge (AA contrast).\n 'relative inline-flex items-center rounded-lg ' +\n 'bg-indigo-500/20 px-3 py-1.5 text-sm font-semibold ' +\n 'text-indigo-700 dark:text-indigo-300 ' +\n 'ring-1 ring-inset ring-indigo-500/30 ' +\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70'\n : `${baseBtn} rounded-lg`\n }\n >\n {page}\n </button>\n )\n )}\n\n {/* Next */}\n <button\n type=\"button\"\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n className={`${baseBtn} rounded-lg`}\n >\n <span className=\"sr-only\">{t('next')}</span>\n <ChevronRightIcon aria-hidden=\"true\" className=\"size-4\" />\n </button>\n </nav>\n </div>\n </div>\n )\n}\n","import { clsx } from 'clsx'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { motion, useReducedMotion } from 'framer-motion'\n\ntype SpinnerSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\ntype SpinnerColor = \"primary\" | \"white\" | \"emerald\" | \"current\" | \"blue\" | \"gray\"\ntype SpinnerVariant = \"circle\" | \"dots\" | \"pulse\"\n\ntype SpinnerProps = {\n size?: SpinnerSize\n color?: SpinnerColor\n variant?: SpinnerVariant\n className?: string\n /** Optional label below spinner */\n label?: string\n}\n\nconst sizeConfig: Record<SpinnerSize, { size: string; border: string; dotSize: number }> = {\n xs: { size: \"size-3\", border: \"border-2\", dotSize: 4 },\n sm: { size: \"size-4\", border: \"border-2\", dotSize: 6 },\n md: { size: \"size-6\", border: \"border-2\", dotSize: 8 },\n lg: { size: \"size-8\", border: \"border-[3px]\", dotSize: 10 },\n xl: { size: \"size-12\", border: \"border-[3px]\", dotSize: 12 },\n}\n\nconst colorClasses: Record<SpinnerColor, { track: string; indicator: string; dot: string }> = {\n primary: {\n track: \"border-indigo-200 dark:border-indigo-800\",\n indicator: \"border-t-indigo-600 dark:border-t-indigo-400\",\n dot: \"bg-indigo-600 dark:bg-indigo-400\",\n },\n blue: {\n track: \"border-ios-blue/20\",\n indicator: \"border-t-ios-blue\",\n dot: \"bg-ios-blue\",\n },\n white: {\n track: \"border-white/20\",\n indicator: \"border-t-white\",\n dot: \"bg-white\",\n },\n emerald: {\n track: \"border-emerald-200 dark:border-emerald-800\",\n indicator: \"border-t-emerald-600 dark:border-t-emerald-400\",\n dot: \"bg-emerald-600 dark:bg-emerald-400\",\n },\n gray: {\n track: \"border-slate-200 dark:border-slate-700\",\n indicator: \"border-t-slate-600 dark:border-t-slate-400\",\n dot: \"bg-slate-600 dark:bg-slate-400\",\n },\n current: {\n track: \"border-current/20\",\n indicator: \"border-t-current\",\n dot: \"bg-current\",\n },\n}\n\n// Circle spinner (default)\nfunction CircleSpinner({ size, color, className, ariaLabel }: { size: SpinnerSize; color: SpinnerColor; className?: string; ariaLabel?: string }) {\n const config = sizeConfig[size]\n const colors = colorClasses[color]\n\n return (\n <div\n className={clsx(\n \"rounded-full animate-spin motion-reduce:animate-none\",\n config.size,\n config.border,\n colors.track,\n colors.indicator,\n className\n )}\n role=\"status\"\n aria-label={ariaLabel}\n />\n )\n}\n\n// Dots spinner\nfunction DotsSpinner({ size, color, className, ariaLabel }: { size: SpinnerSize; color: SpinnerColor; className?: string; ariaLabel?: string }) {\n const config = sizeConfig[size]\n const colors = colorClasses[color]\n const prefersReducedMotion = useReducedMotion()\n\n const dotVariants = {\n initial: { scale: 0.8, opacity: 0.4 },\n animate: prefersReducedMotion ? { scale: 1, opacity: 1 } : { scale: 1, opacity: 1 },\n }\n\n return (\n <div className={clsx(\"flex items-center gap-1\", className)} role=\"status\" aria-label={ariaLabel}>\n {[0, 1, 2].map((index) => (\n <motion.div\n key={index}\n className={clsx(\"rounded-full\", colors.dot)}\n style={{\n width: config.dotSize,\n height: config.dotSize,\n }}\n variants={dotVariants}\n initial=\"initial\"\n animate=\"animate\"\n transition={prefersReducedMotion ? { duration: 0 } : {\n duration: 0.5,\n repeat: Infinity,\n repeatType: \"reverse\",\n delay: index * 0.15,\n }}\n />\n ))}\n </div>\n )\n}\n\n// Pulse spinner\nfunction PulseSpinner({ size, color, className, ariaLabel }: { size: SpinnerSize; color: SpinnerColor; className?: string; ariaLabel?: string }) {\n const config = sizeConfig[size]\n const colors = colorClasses[color]\n const prefersReducedMotion = useReducedMotion()\n\n return (\n <div className={clsx(\"relative\", config.size, className)} role=\"status\" aria-label={ariaLabel}>\n <motion.div\n className={clsx(\"absolute inset-0 rounded-full\", colors.dot)}\n animate={prefersReducedMotion ? {} : {\n scale: [1, 1.5, 1],\n opacity: [0.7, 0, 0.7],\n }}\n transition={prefersReducedMotion ? { duration: 0 } : {\n duration: 1.5,\n repeat: Infinity,\n ease: \"easeInOut\",\n }}\n />\n <div className={clsx(\"absolute inset-0 rounded-full\", colors.dot)} />\n </div>\n )\n}\n\nexport function Spinner({\n size = \"sm\",\n color = \"primary\",\n variant = \"circle\",\n className,\n label,\n}: SpinnerProps) {\n const t = useTranslations(\"common\")\n const ariaLabel = label || t(\"loading\")\n\n const SpinnerComponent = {\n circle: CircleSpinner,\n dots: DotsSpinner,\n pulse: PulseSpinner,\n }[variant]\n\n if (label) {\n return (\n <div className=\"flex flex-col items-center gap-2\">\n <SpinnerComponent size={size} color={color} className={className} ariaLabel={ariaLabel} />\n <span className=\"text-sm text-slate-500 dark:text-slate-400\">{label}</span>\n </div>\n )\n }\n\n return (\n <SpinnerComponent\n size={size}\n color={color}\n className={className}\n ariaLabel={ariaLabel}\n />\n )\n}\n\n// Full page loading overlay\ntype LoadingOverlayProps = {\n /** Whether to show the overlay */\n show: boolean\n /** Loading message */\n message?: string\n /** Blur the background */\n blur?: boolean\n}\n\nexport function LoadingOverlay({ show, message, blur = true }: LoadingOverlayProps) {\n if (!show) return null\n\n return (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className={clsx(\n \"fixed inset-0 z-50 flex flex-col items-center justify-center\",\n \"bg-white/80 dark:bg-slate-900/80\",\n blur && \"backdrop-blur-sm\"\n )}\n >\n <Spinner size=\"lg\" color=\"blue\" variant=\"circle\" />\n {message && (\n <p className=\"mt-4 text-slate-600 dark:text-slate-300 font-medium\">\n {message}\n </p>\n )}\n </motion.div>\n )\n}\n\n// Inline loading state for buttons, etc.\ntype InlineSpinnerProps = {\n size?: \"xs\" | \"sm\"\n className?: string\n}\n\nexport function InlineSpinner({ size = \"xs\", className }: InlineSpinnerProps) {\n return <Spinner size={size} color=\"current\" className={className} />\n}\n","import { clsx } from 'clsx'\nimport { ArrowTrendingUpIcon, ArrowTrendingDownIcon } from '@heroicons/react/24/outline'\n\ntype GrowthSize = \"xs\" | \"sm\" | \"md\"\n\ntype GrowthIndicatorProps = {\n value: number\n size?: GrowthSize\n showValue?: boolean\n format?: \"percent\" | \"number\"\n locale?: string\n formatValue?: (value: number, format: \"percent\" | \"number\") => string\n className?: string\n}\n\nconst sizeClasses: Record<GrowthSize, { icon: string; text: string }> = {\n xs: { icon: \"h-2.5 w-2.5\", text: \"text-[10px]\" },\n sm: { icon: \"h-3 w-3\", text: \"text-xs\" },\n md: { icon: \"h-4 w-4\", text: \"text-sm\" },\n}\n\nfunction defaultFormatValue(value: number, format: \"percent\" | \"number\"): string {\n if (format === \"percent\") {\n const sign = value >= 0 ? '+' : '-'\n return `${sign}${Math.abs(value).toFixed(1)}%`\n }\n return `${value > 0 ? \"+\" : \"\"}${value.toLocaleString()}`\n}\n\nexport function GrowthIndicator({\n value,\n size = \"sm\",\n showValue = false,\n format = \"percent\",\n formatValue,\n className\n}: GrowthIndicatorProps) {\n const isPositive = value > 0\n const isNegative = value < 0\n const isNeutral = value === 0\n\n const colorClasses = isPositive\n ? \"text-emerald-500\"\n : isNegative\n ? \"text-red-500\"\n : \"text-gray-500\"\n\n const Icon = isPositive ? ArrowTrendingUpIcon : ArrowTrendingDownIcon\n const { icon: iconClass, text: textClass } = sizeClasses[size]\n\n const formatter = formatValue ?? defaultFormatValue\n const formattedValue = formatter(value, format)\n\n if (isNeutral && !showValue) {\n return null\n }\n\n return (\n <span className={clsx(\"inline-flex items-center gap-0.5\", colorClasses, className)}>\n {!isNeutral && <Icon className={iconClass} />}\n {showValue && <span className={textClass}>{formattedValue}</span>}\n </span>\n )\n}\n","import { useState, useRef, useEffect, useCallback } from 'react'\nimport { motion } from 'framer-motion'\nimport { springPresets } from '@ui/lib/animations'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\n\ntype Segment = {\n value: string\n label: string\n icon?: React.ReactNode\n}\n\ntype SegmentedControlProps = {\n /** Segments to display */\n segments: Segment[] | string[]\n /** Currently selected value */\n value: string\n /** Callback when selection changes */\n onChange: (value: string) => void\n /** Size variant */\n size?: 'sm' | 'md' | 'lg'\n /** Full width */\n fullWidth?: boolean\n /** Disabled state */\n disabled?: boolean\n}\n\nconst sizeStyles = {\n sm: {\n container: 'h-8 p-0.5 text-xs',\n segment: 'px-3 py-1',\n },\n md: {\n container: 'h-10 p-1 text-sm',\n segment: 'px-4 py-1.5',\n },\n lg: {\n container: 'h-12 p-1 text-base',\n segment: 'px-6 py-2',\n },\n}\n\nexport function SegmentedControl({\n segments,\n value,\n onChange,\n size = 'md',\n fullWidth = false,\n disabled = false,\n}: SegmentedControlProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n const [indicatorStyle, setIndicatorStyle] = useState({ left: 0, width: 0 })\n\n // Normalize segments to objects\n const normalizedSegments: Segment[] = segments.map((seg) =>\n typeof seg === 'string' ? { value: seg, label: seg } : seg\n )\n\n const selectedIndex = normalizedSegments.findIndex((seg) => seg.value === value)\n const styles = sizeStyles[size]\n\n // Calculate indicator position\n useEffect(() => {\n if (containerRef.current && selectedIndex >= 0) {\n const container = containerRef.current\n const buttons = container.querySelectorAll('button')\n const selectedButton = buttons[selectedIndex]\n\n if (selectedButton) {\n const containerRect = container.getBoundingClientRect()\n const buttonRect = selectedButton.getBoundingClientRect()\n\n setIndicatorStyle({\n left: buttonRect.left - containerRect.left,\n width: buttonRect.width,\n })\n }\n }\n }, [selectedIndex, segments])\n\n const handleSelect = (segmentValue: string) => {\n if (disabled || segmentValue === value) return\n triggerHaptic('light')\n onChange(segmentValue)\n }\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return\n const currentIndex = normalizedSegments.findIndex((seg) => seg.value === value)\n let nextIndex = -1\n\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n event.preventDefault()\n nextIndex = (currentIndex + 1) % normalizedSegments.length\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n event.preventDefault()\n nextIndex = (currentIndex - 1 + normalizedSegments.length) % normalizedSegments.length\n } else if (event.key === 'Home') {\n event.preventDefault()\n nextIndex = 0\n } else if (event.key === 'End') {\n event.preventDefault()\n nextIndex = normalizedSegments.length - 1\n }\n\n if (nextIndex >= 0) {\n const nextSegment = normalizedSegments[nextIndex]\n onChange(nextSegment.value)\n triggerHaptic('light')\n // Focus the newly selected tab button\n const buttons = containerRef.current?.querySelectorAll('button')\n buttons?.[nextIndex]?.focus()\n }\n },\n [disabled, normalizedSegments, value, onChange],\n )\n\n return (\n <div\n ref={containerRef}\n role=\"tablist\"\n aria-live=\"polite\"\n data-testid=\"segmented-control\"\n onKeyDown={handleKeyDown}\n className={`\n liquid-surface relative inline-flex items-center rounded-xl\n focus-within:ring-2 focus-within:ring-indigo-500/70 focus-within:ring-offset-1\n ${styles.container}\n ${fullWidth ? 'w-full' : ''}\n ${disabled ? 'opacity-50 pointer-events-none' : ''}\n `}\n >\n {/* Animated crystal indicator — full backdrop-blur + saturate +\n inner highlight so the selected tile looks lifted out of the\n glass track. Matches the chrome of Badge / StatusBadge. */}\n <motion.div\n aria-hidden\n className=\"absolute top-1 bottom-1 rounded-lg bg-white/75 dark:bg-white/[0.14] border border-white/60 dark:border-white/15\"\n style={{\n backdropFilter: 'blur(12px) saturate(1.5)',\n WebkitBackdropFilter: 'blur(12px) saturate(1.5)',\n boxShadow:\n 'inset 0 1px 1.5px rgba(255,255,255,0.55), 0 1px 3px -1px rgba(15,23,42,0.12)',\n }}\n initial={false}\n animate={{\n left: indicatorStyle.left,\n width: indicatorStyle.width,\n }}\n transition={springPresets.default}\n />\n\n {/* Segment buttons */}\n {normalizedSegments.map((segment) => {\n const isSelected = segment.value === value\n\n return (\n <button\n key={segment.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n aria-label={segment.label}\n tabIndex={isSelected ? 0 : -1}\n data-testid={`tab-${segment.value}`}\n onClick={() => handleSelect(segment.value)}\n className={`\n relative z-10 flex items-center justify-center gap-1.5\n font-semibold rounded-lg transition-colors duration-150\n focus:outline-none\n ${styles.segment}\n ${fullWidth ? 'flex-1' : ''}\n ${isSelected\n ? 'text-slate-950 dark:text-white'\n : 'text-slate-700 dark:text-slate-300 hover:text-slate-900 dark:hover:text-white'\n }\n `}\n >\n {segment.icon && <span className=\"shrink-0\">{segment.icon}</span>}\n <span>{segment.label}</span>\n </button>\n )\n })}\n </div>\n )\n}\n\n// Compact variant for tight spaces\nexport function CompactSegmentedControl({\n segments,\n value,\n onChange,\n}: Omit<SegmentedControlProps, 'size' | 'fullWidth'>) {\n return (\n <SegmentedControl\n segments={segments}\n value={value}\n onChange={onChange}\n size=\"sm\"\n />\n )\n}\n","import { useTranslations } from '@ui/lib/i18n-context'\nimport { motion } from 'framer-motion'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\n\ntype PageIndicatorProps = {\n /** Total number of pages */\n count: number\n /** Currently active page (0-indexed) */\n active: number\n /** Callback when a dot is clicked */\n onChange?: (index: number) => void\n /** Size variant */\n size?: 'sm' | 'md' | 'lg'\n /** Color variant */\n variant?: 'default' | 'light' | 'dark'\n}\n\nconst sizeConfig = {\n sm: { dot: 6, activeDot: 6, gap: 6 },\n md: { dot: 8, activeDot: 8, gap: 8 },\n lg: { dot: 10, activeDot: 10, gap: 10 },\n}\n\nconst variantConfig = {\n default: {\n active: 'bg-[#007AFF]',\n inactive: 'bg-gray-300 dark:bg-gray-600',\n },\n light: {\n active: 'bg-white',\n inactive: 'bg-white/40',\n },\n dark: {\n active: 'bg-gray-900',\n inactive: 'bg-gray-900/30',\n },\n}\n\nexport function PageIndicator({\n count,\n active,\n onChange,\n size = 'md',\n variant = 'default',\n}: PageIndicatorProps) {\n const t = useTranslations('common')\n const { dot, gap } = sizeConfig[size]\n const colors = variantConfig[variant]\n\n const handleClick = (index: number) => {\n if (onChange && index !== active) {\n triggerHaptic('light')\n onChange(index)\n }\n }\n\n return (\n <div\n className=\"flex items-center justify-center\"\n style={{ gap }}\n role=\"tablist\"\n aria-label={t('pageIndicators')}\n >\n {Array.from({ length: count }, (_, index) => {\n const isActive = index === active\n\n return (\n <motion.button\n key={index}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-label={t('pageNumber', { number: index + 1 })}\n onClick={() => handleClick(index)}\n className={`\n rounded-full transition-colors duration-200\n ${onChange ? 'cursor-pointer' : 'cursor-default'}\n ${isActive ? colors.active : colors.inactive}\n `}\n style={{\n width: dot,\n height: dot,\n }}\n animate={{\n scale: isActive ? 1.2 : 1,\n opacity: isActive ? 1 : 0.5,\n }}\n transition={{\n type: 'spring',\n stiffness: 500,\n damping: 30,\n }}\n whileTap={onChange ? { scale: 0.9 } : undefined}\n />\n )\n })}\n </div>\n )\n}\n\n// Expanding dot variant (active dot is wider)\ntype ExpandingPageIndicatorProps = Omit<PageIndicatorProps, 'size'> & {\n /** Width of active indicator */\n activeWidth?: number\n}\n\nexport function ExpandingPageIndicator({\n count,\n active,\n onChange,\n variant = 'default',\n activeWidth = 24,\n}: ExpandingPageIndicatorProps) {\n const t = useTranslations('common')\n const colors = variantConfig[variant]\n\n const handleClick = (index: number) => {\n if (onChange && index !== active) {\n triggerHaptic('light')\n onChange(index)\n }\n }\n\n return (\n <div\n className=\"flex items-center justify-center gap-2\"\n role=\"tablist\"\n aria-label={t('pageIndicators')}\n >\n {Array.from({ length: count }, (_, index) => {\n const isActive = index === active\n\n return (\n <motion.button\n key={index}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-label={t('pageNumber', { number: index + 1 })}\n onClick={() => handleClick(index)}\n className={`\n h-2 rounded-full transition-colors duration-200\n ${onChange ? 'cursor-pointer' : 'cursor-default'}\n ${isActive ? colors.active : colors.inactive}\n `}\n animate={{\n width: isActive ? activeWidth : 8,\n opacity: isActive ? 1 : 0.5,\n }}\n transition={{\n type: 'spring',\n stiffness: 500,\n damping: 30,\n }}\n whileTap={onChange ? { scale: 0.9 } : undefined}\n />\n )\n })}\n </div>\n )\n}\n\n// Progress indicator variant (shows progress through steps)\ntype ProgressIndicatorProps = {\n /** Total number of steps */\n steps: number\n /** Current step (0-indexed) */\n current: number\n /** Show step numbers */\n showNumbers?: boolean\n}\n\nexport function ProgressIndicator({\n steps,\n current,\n showNumbers = false,\n}: ProgressIndicatorProps) {\n return (\n <div className=\"flex items-center justify-center gap-2\">\n {Array.from({ length: steps }, (_, index) => {\n const isCompleted = index < current\n const isCurrent = index === current\n const isPending = index > current\n\n return (\n <div key={index} className=\"flex items-center\">\n {/* Step dot/number */}\n <motion.div\n className={`\n flex items-center justify-center rounded-full\n ${showNumbers ? 'w-8 h-8 text-sm font-medium' : 'w-3 h-3'}\n ${isCompleted ? 'bg-[#34C759] text-white' : ''}\n ${isCurrent ? 'bg-[#007AFF] text-white ring-4 ring-indigo-500/70/20' : ''}\n ${isPending ? 'bg-gray-200 dark:bg-gray-700 text-gray-500' : ''}\n `}\n animate={{\n scale: isCurrent ? 1.1 : 1,\n }}\n transition={{\n type: 'spring',\n stiffness: 500,\n damping: 30,\n }}\n >\n {showNumbers && (\n isCompleted ? (\n <CheckIcon className=\"w-4 h-4\" />\n ) : (\n index + 1\n )\n )}\n </motion.div>\n\n {/* Connector line */}\n {index < steps - 1 && (\n <div\n className={`\n w-8 h-0.5 mx-1\n ${isCompleted ? 'bg-[#34C759]' : 'bg-gray-200 dark:bg-gray-700'}\n `}\n />\n )}\n </div>\n )\n })}\n </div>\n )\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={3}\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )\n}\n","import { ReactNode } from 'react'\nimport { clsx } from 'clsx'\n\ntype SafeAreaProps = {\n children: ReactNode\n /** Which edges to apply safe area padding */\n edges?: ('top' | 'bottom' | 'left' | 'right')[]\n /** Additional className */\n className?: string\n /** Use as flex container */\n flex?: boolean\n}\n\n/**\n * SafeArea component that respects device safe area insets\n * Uses CSS env() variables for notch/home indicator padding\n */\nexport function SafeArea({\n children,\n edges = ['top', 'bottom'],\n className = '',\n flex = false,\n}: SafeAreaProps) {\n const paddingStyles: Record<string, string> = {}\n\n if (edges.includes('top')) {\n paddingStyles.paddingTop = 'env(safe-area-inset-top, 0px)'\n }\n if (edges.includes('bottom')) {\n paddingStyles.paddingBottom = 'env(safe-area-inset-bottom, 0px)'\n }\n if (edges.includes('left')) {\n paddingStyles.paddingLeft = 'env(safe-area-inset-left, 0px)'\n }\n if (edges.includes('right')) {\n paddingStyles.paddingRight = 'env(safe-area-inset-right, 0px)'\n }\n\n return (\n <div\n className={clsx(flex && 'flex flex-col', className)}\n style={paddingStyles}\n >\n {children}\n </div>\n )\n}\n\n/**\n * SafeAreaView - Full screen container with safe area insets\n * Useful for full-page layouts on mobile\n */\nexport function SafeAreaView({\n children,\n className = '',\n}: {\n children: ReactNode\n className?: string\n}) {\n return (\n <div\n className={clsx('min-h-screen flex flex-col', className)}\n style={{\n paddingTop: 'env(safe-area-inset-top, 0px)',\n paddingBottom: 'env(safe-area-inset-bottom, 0px)',\n paddingLeft: 'env(safe-area-inset-left, 0px)',\n paddingRight: 'env(safe-area-inset-right, 0px)',\n }}\n >\n {children}\n </div>\n )\n}\n\n/**\n * SafeAreaSpacer - Adds spacing for safe area insets\n * Useful for fixed headers/footers\n */\nexport function SafeAreaSpacer({\n position,\n className = '',\n}: {\n position: 'top' | 'bottom'\n className?: string\n}) {\n return (\n <div\n className={className}\n style={{\n height: position === 'top'\n ? 'env(safe-area-inset-top, 0px)'\n : 'env(safe-area-inset-bottom, 0px)',\n }}\n />\n )\n}\n\n/**\n * BottomSafeArea - Fixed bottom container with safe area padding\n * Perfect for bottom navigation or action buttons\n */\nexport function BottomSafeArea({\n children,\n className = '',\n blur = true,\n}: {\n children: ReactNode\n className?: string\n blur?: boolean\n}) {\n return (\n <div\n className={clsx(\n 'fixed bottom-0 inset-x-0 z-40',\n blur && 'bg-white/80 dark:bg-gray-900/80 backdrop-blur-xl border-t border-gray-200/50 dark:border-gray-700/50',\n className\n )}\n style={{\n paddingBottom: 'env(safe-area-inset-bottom, 0px)',\n }}\n >\n {children}\n </div>\n )\n}\n\n/**\n * Hook to get safe area inset values (for JavaScript calculations)\n */\nexport function useSafeAreaInsets() {\n // This would need to be implemented with actual measurements on mount\n // For now, return default values - CSS env() handles the actual values\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }\n}\n\n/**\n * CSS custom properties for safe area insets\n * Add these to your root CSS for easier usage\n */\nexport const safeAreaCSSVars = `\n :root {\n --safe-area-inset-top: env(safe-area-inset-top, 0px);\n --safe-area-inset-bottom: env(safe-area-inset-bottom, 0px);\n --safe-area-inset-left: env(safe-area-inset-left, 0px);\n --safe-area-inset-right: env(safe-area-inset-right, 0px);\n }\n`\n","import { useRef, useState, useCallback, ReactNode } from 'react'\nimport { motion, useMotionValue, useTransform, animate, PanInfo } from 'framer-motion'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\n\ntype SwipeAction = {\n /** Action label */\n label: string\n /** Action icon */\n icon?: ReactNode\n /** Background color */\n color: string\n /** Text color */\n textColor: string\n /** Callback when action is triggered */\n onAction: () => void\n}\n\ntype SwipeableRowProps = {\n /** Row content */\n children: ReactNode\n /** Actions revealed on left swipe */\n leftActions?: SwipeAction[]\n /** Actions revealed on right swipe */\n rightActions?: SwipeAction[]\n /** Width of each action button (default: 80) */\n actionWidth?: number\n /** Threshold to trigger full swipe action (default: 0.5) */\n fullSwipeThreshold?: number\n /** Enable full swipe to trigger first action */\n enableFullSwipe?: boolean\n /** Additional className */\n className?: string\n}\n\nexport function SwipeableRow({\n children,\n leftActions = [],\n rightActions = [],\n actionWidth = 80,\n fullSwipeThreshold = 0.5,\n enableFullSwipe = true,\n className = '',\n}: SwipeableRowProps) {\n const x = useMotionValue(0)\n const containerRef = useRef<HTMLDivElement>(null)\n const [isDragging, setIsDragging] = useState(false)\n const hasTriggeredHaptic = useRef(false)\n\n const leftActionsWidth = leftActions.length * actionWidth\n const rightActionsWidth = rightActions.length * actionWidth\n\n // Calculate constraints\n const leftConstraint = rightActions.length > 0 ? -rightActionsWidth : 0\n const rightConstraint = leftActions.length > 0 ? leftActionsWidth : 0\n\n // Background opacity based on swipe distance\n const leftBgOpacity = useTransform(x, [0, leftActionsWidth], [0, 1])\n const rightBgOpacity = useTransform(x, [-rightActionsWidth, 0], [1, 0])\n\n const handleDragStart = useCallback(() => {\n setIsDragging(true)\n hasTriggeredHaptic.current = false\n }, [])\n\n const handleDrag = useCallback((_: MouseEvent | TouchEvent | PointerEvent, info: PanInfo) => {\n const currentX = x.get()\n\n // Full swipe haptic feedback\n if (enableFullSwipe) {\n const containerWidth = containerRef.current?.offsetWidth || 300\n const fullSwipeDistance = containerWidth * fullSwipeThreshold\n\n if (Math.abs(currentX) >= fullSwipeDistance && !hasTriggeredHaptic.current) {\n triggerHaptic('medium')\n hasTriggeredHaptic.current = true\n } else if (Math.abs(currentX) < fullSwipeDistance && hasTriggeredHaptic.current) {\n hasTriggeredHaptic.current = false\n }\n }\n }, [x, enableFullSwipe, fullSwipeThreshold])\n\n const handleDragEnd = useCallback((_: MouseEvent | TouchEvent | PointerEvent, info: PanInfo) => {\n setIsDragging(false)\n const currentX = x.get()\n const velocity = info.velocity.x\n const containerWidth = containerRef.current?.offsetWidth || 300\n\n // Check for full swipe action\n if (enableFullSwipe) {\n const fullSwipeDistance = containerWidth * fullSwipeThreshold\n\n if (currentX >= fullSwipeDistance && leftActions.length > 0) {\n // Full swipe right - trigger first left action\n triggerHaptic('success')\n animate(x, containerWidth, { type: 'spring', stiffness: 400, damping: 30 })\n setTimeout(() => {\n leftActions[0].onAction()\n animate(x, 0, { type: 'spring', stiffness: 400, damping: 30 })\n }, 200)\n return\n }\n\n if (currentX <= -fullSwipeDistance && rightActions.length > 0) {\n // Full swipe left - trigger first right action\n triggerHaptic('success')\n animate(x, -containerWidth, { type: 'spring', stiffness: 400, damping: 30 })\n setTimeout(() => {\n rightActions[0].onAction()\n animate(x, 0, { type: 'spring', stiffness: 400, damping: 30 })\n }, 200)\n return\n }\n }\n\n // Snap to actions or back to center\n let targetX = 0\n\n if (currentX > actionWidth / 2 || velocity > 500) {\n targetX = leftActionsWidth\n } else if (currentX < -actionWidth / 2 || velocity < -500) {\n targetX = -rightActionsWidth\n }\n\n animate(x, targetX, { type: 'spring', stiffness: 400, damping: 30 })\n }, [x, enableFullSwipe, fullSwipeThreshold, leftActions, rightActions, leftActionsWidth, rightActionsWidth, actionWidth])\n\n const handleActionClick = (action: SwipeAction) => {\n triggerHaptic('light')\n action.onAction()\n animate(x, 0, { type: 'spring', stiffness: 400, damping: 30 })\n }\n\n const closeActions = useCallback(() => {\n animate(x, 0, { type: 'spring', stiffness: 400, damping: 30 })\n }, [x])\n\n return (\n <div ref={containerRef} className={`relative overflow-hidden ${className}`}>\n {/* Left actions (revealed on right swipe) */}\n {leftActions.length > 0 && (\n <motion.div\n className=\"absolute inset-y-0 left-0 flex\"\n style={{ opacity: leftBgOpacity }}\n >\n {leftActions.map((action, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => handleActionClick(action)}\n className=\"flex flex-col items-center justify-center text-sm font-medium\"\n style={{\n width: actionWidth,\n backgroundColor: action.color,\n color: action.textColor,\n }}\n >\n {action.icon && <span className=\"mb-1\">{action.icon}</span>}\n {action.label}\n </button>\n ))}\n </motion.div>\n )}\n\n {/* Right actions (revealed on left swipe) */}\n {rightActions.length > 0 && (\n <motion.div\n className=\"absolute inset-y-0 right-0 flex\"\n style={{ opacity: rightBgOpacity }}\n >\n {rightActions.map((action, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => handleActionClick(action)}\n className=\"flex flex-col items-center justify-center text-sm font-medium\"\n style={{\n width: actionWidth,\n backgroundColor: action.color,\n color: action.textColor,\n }}\n >\n {action.icon && <span className=\"mb-1\">{action.icon}</span>}\n {action.label}\n </button>\n ))}\n </motion.div>\n )}\n\n {/* Main content */}\n <motion.div\n drag=\"x\"\n dragConstraints={{ left: leftConstraint, right: rightConstraint }}\n dragElastic={0.1}\n onDragStart={handleDragStart}\n onDrag={handleDrag}\n onDragEnd={handleDragEnd}\n style={{ x }}\n className=\"relative bg-white dark:bg-gray-800 cursor-grab active:cursor-grabbing\"\n >\n {children}\n </motion.div>\n </div>\n )\n}\n\n// Pre-configured delete action\nexport function DeleteSwipeAction(onDelete: () => void): SwipeAction {\n return {\n label: 'Delete',\n color: '#FF3B30',\n textColor: 'white',\n icon: (\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n ),\n onAction: onDelete,\n }\n}\n\n// Pre-configured archive action\nexport function ArchiveSwipeAction(onArchive: () => void): SwipeAction {\n return {\n label: 'Archive',\n color: '#FF9500',\n textColor: 'white',\n icon: (\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4\" />\n </svg>\n ),\n onAction: onArchive,\n }\n}\n\n// Pre-configured edit action\nexport function EditSwipeAction(onEdit: () => void): SwipeAction {\n return {\n label: 'Edit',\n color: '#007AFF',\n textColor: 'white',\n icon: (\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\" />\n </svg>\n ),\n onAction: onEdit,\n }\n}\n\n// Pre-configured favorite/star action\nexport function FavoriteSwipeAction(onFavorite: () => void, isFavorite = false): SwipeAction {\n return {\n label: isFavorite ? 'Unfave' : 'Favorite',\n color: '#FFCC00',\n textColor: '#000',\n icon: (\n <svg className=\"w-5 h-5\" fill={isFavorite ? 'currentColor' : 'none'} viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z\" />\n </svg>\n ),\n onAction: onFavorite,\n }\n}\n","/**\n * iOS-style pull-to-refresh hook\n * Provides pull-down gesture detection for refreshing content\n */\n\nimport React, { useState, useCallback, useRef, useEffect } from 'react'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\n\ntype PullToRefreshOptions = {\n /** Callback when refresh is triggered */\n onRefresh: () => Promise<void>\n /** Pull distance to trigger refresh (default: 80) */\n threshold?: number\n /** Maximum pull distance (default: 120) */\n maxPull?: number\n /** Enable/disable the hook (default: true) */\n enabled?: boolean\n}\n\ntype PullToRefreshState = {\n /** Current pull distance */\n pullDistance: number\n /** Whether refresh is in progress */\n isRefreshing: boolean\n /** Whether pull threshold is reached */\n canRefresh: boolean\n}\n\nexport function usePullToRefresh(options: PullToRefreshOptions) {\n const {\n onRefresh,\n threshold = 80,\n maxPull = 120,\n enabled = true,\n } = options\n\n const [state, setState] = useState<PullToRefreshState>({\n pullDistance: 0,\n isRefreshing: false,\n canRefresh: false,\n })\n\n const startY = useRef<number | null>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const hasTriggeredHaptic = useRef(false)\n\n const handleTouchStart = useCallback((e: TouchEvent) => {\n if (!enabled || state.isRefreshing) return\n\n // Only activate when scrolled to top\n const container = containerRef.current\n if (container && container.scrollTop > 0) return\n\n startY.current = e.touches[0].clientY\n hasTriggeredHaptic.current = false\n }, [enabled, state.isRefreshing])\n\n const handleTouchMove = useCallback((e: TouchEvent) => {\n if (!enabled || startY.current === null || state.isRefreshing) return\n\n const currentY = e.touches[0].clientY\n const deltaY = currentY - startY.current\n\n // Only allow pulling down\n if (deltaY < 0) {\n setState(prev => ({ ...prev, pullDistance: 0, canRefresh: false }))\n return\n }\n\n // Apply resistance (diminishing returns)\n const resistance = 0.5\n const pullDistance = Math.min(deltaY * resistance, maxPull)\n const canRefresh = pullDistance >= threshold\n\n // Haptic feedback when threshold is crossed\n if (canRefresh && !hasTriggeredHaptic.current) {\n triggerHaptic('medium')\n hasTriggeredHaptic.current = true\n } else if (!canRefresh && hasTriggeredHaptic.current) {\n hasTriggeredHaptic.current = false\n }\n\n setState(prev => ({ ...prev, pullDistance, canRefresh }))\n }, [enabled, state.isRefreshing, threshold, maxPull])\n\n const handleTouchEnd = useCallback(async () => {\n if (!enabled || startY.current === null) return\n\n startY.current = null\n\n if (state.canRefresh && !state.isRefreshing) {\n setState(prev => ({ ...prev, isRefreshing: true, pullDistance: threshold }))\n triggerHaptic('success')\n\n try {\n await onRefresh()\n } finally {\n setState({ pullDistance: 0, isRefreshing: false, canRefresh: false })\n }\n } else {\n setState(prev => ({ ...prev, pullDistance: 0, canRefresh: false }))\n }\n }, [enabled, state.canRefresh, state.isRefreshing, threshold, onRefresh])\n\n useEffect(() => {\n const container = containerRef.current\n if (!container || !enabled) return\n\n container.addEventListener('touchstart', handleTouchStart, { passive: true })\n container.addEventListener('touchmove', handleTouchMove, { passive: true })\n container.addEventListener('touchend', handleTouchEnd, { passive: true })\n\n return () => {\n container.removeEventListener('touchstart', handleTouchStart)\n container.removeEventListener('touchmove', handleTouchMove)\n container.removeEventListener('touchend', handleTouchEnd)\n }\n }, [enabled, handleTouchStart, handleTouchMove, handleTouchEnd])\n\n // Calculate progress (0-1)\n const progress = Math.min(state.pullDistance / threshold, 1)\n\n return {\n containerRef,\n pullDistance: state.pullDistance,\n isRefreshing: state.isRefreshing,\n canRefresh: state.canRefresh,\n progress,\n }\n}\n\n/**\n * Pull-to-refresh indicator component\n */\nexport function PullToRefreshIndicator({\n pullDistance,\n isRefreshing,\n threshold = 80,\n}: {\n pullDistance: number\n isRefreshing: boolean\n threshold?: number\n}) {\n const progress = Math.min(pullDistance / threshold, 1)\n const rotation = progress * 360\n\n if (pullDistance === 0 && !isRefreshing) return null\n\n return (\n <div\n className=\"absolute left-1/2 -translate-x-1/2 z-10 flex items-center justify-center\"\n style={{ top: Math.max(pullDistance - 40, 8) }}\n >\n <div\n className={`\n h-8 w-8 rounded-full bg-white dark:bg-gray-800\n shadow-lg border border-gray-200 dark:border-gray-700\n flex items-center justify-center\n transition-transform duration-200\n `}\n >\n {isRefreshing ? (\n <div className=\"h-5 w-5 animate-spin motion-reduce:animate-none rounded-full border-2 border-gray-300 border-t-blue-500\" />\n ) : (\n <svg\n className=\"h-5 w-5 text-gray-600 dark:text-gray-400\"\n style={{ transform: `rotate(${rotation}deg)` }}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"\n />\n </svg>\n )}\n </div>\n </div>\n )\n}\n","import { ReactNode } from 'react'\nimport { motion } from 'framer-motion'\nimport { usePullToRefresh, PullToRefreshIndicator } from '@ui/hooks/use-pull-to-refresh'\n\ntype PullToRefreshContainerProps = {\n /** Content to wrap */\n children: ReactNode\n /** Callback when refresh is triggered */\n onRefresh: () => Promise<void>\n /** Enable/disable pull-to-refresh (default: true) */\n enabled?: boolean\n /** Pull threshold in pixels (default: 80) */\n threshold?: number\n /** Additional className for the container */\n className?: string\n /** Custom refresh indicator */\n renderIndicator?: (props: {\n pullDistance: number\n isRefreshing: boolean\n progress: number\n }) => ReactNode\n}\n\n/**\n * Pull-to-refresh container component\n * Wraps content and provides iOS-style pull-to-refresh functionality\n */\nexport function PullToRefreshContainer({\n children,\n onRefresh,\n enabled = true,\n threshold = 80,\n className = '',\n renderIndicator,\n}: PullToRefreshContainerProps) {\n const {\n containerRef,\n pullDistance,\n isRefreshing,\n progress,\n } = usePullToRefresh({\n onRefresh,\n threshold,\n enabled,\n })\n\n return (\n <div\n ref={containerRef}\n className={`relative overflow-auto ${className}`}\n >\n {/* Refresh indicator */}\n {renderIndicator ? (\n renderIndicator({ pullDistance, isRefreshing, progress })\n ) : (\n <PullToRefreshIndicator\n pullDistance={pullDistance}\n isRefreshing={isRefreshing}\n threshold={threshold}\n />\n )}\n\n {/* Content with transform when pulling */}\n <motion.div\n animate={{\n y: isRefreshing ? threshold : pullDistance,\n }}\n transition={{\n type: 'spring',\n stiffness: 400,\n damping: 30,\n }}\n >\n {children}\n </motion.div>\n </div>\n )\n}\n\n/**\n * Modern circular progress indicator for pull-to-refresh\n */\nexport function CircularRefreshIndicator({\n pullDistance,\n isRefreshing,\n progress,\n}: {\n pullDistance: number\n isRefreshing: boolean\n progress: number\n}) {\n if (pullDistance === 0 && !isRefreshing) return null\n\n const circumference = 2 * Math.PI * 10 // radius = 10\n const strokeDashoffset = circumference * (1 - progress)\n\n return (\n <div\n className=\"absolute left-1/2 -translate-x-1/2 z-10 flex items-center justify-center\"\n style={{ top: Math.max(pullDistance - 40, 8) }}\n >\n <motion.div\n className=\"h-10 w-10 rounded-full bg-white dark:bg-gray-800 shadow-lg border border-gray-200 dark:border-gray-700 flex items-center justify-center\"\n animate={{\n scale: isRefreshing ? 1 : 0.8 + progress * 0.2,\n opacity: Math.max(progress, isRefreshing ? 1 : 0.5),\n }}\n >\n {isRefreshing ? (\n <motion.div\n className=\"h-5 w-5 rounded-full border-2 border-gray-300 border-t-[#007AFF]\"\n animate={{ rotate: 360 }}\n transition={{ duration: 1, repeat: Infinity, ease: 'linear' }}\n />\n ) : (\n <svg\n className=\"h-6 w-6\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill=\"none\"\n stroke=\"#E5E5EA\"\n strokeWidth=\"2\"\n />\n <motion.circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill=\"none\"\n stroke=\"#007AFF\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={strokeDashoffset}\n transform=\"rotate(-90 12 12)\"\n />\n </svg>\n )}\n </motion.div>\n </div>\n )\n}\n\n/**\n * Simple dot indicator for minimal designs\n */\nexport function DotRefreshIndicator({\n pullDistance,\n isRefreshing,\n}: {\n pullDistance: number\n isRefreshing: boolean\n progress: number\n}) {\n if (pullDistance === 0 && !isRefreshing) return null\n\n return (\n <div\n className=\"absolute left-1/2 -translate-x-1/2 z-10\"\n style={{ top: Math.max(pullDistance - 20, 8) }}\n >\n <div className=\"flex gap-1\">\n {[0, 1, 2].map((i) => (\n <motion.div\n key={i}\n className=\"h-2 w-2 rounded-full bg-[#007AFF]\"\n animate={{\n scale: isRefreshing ? [1, 1.2, 1] : 1,\n opacity: isRefreshing ? 1 : 0.5,\n }}\n transition={{\n duration: 0.5,\n repeat: isRefreshing ? Infinity : 0,\n delay: i * 0.15,\n }}\n />\n ))}\n </div>\n </div>\n )\n}\n","import { useEffect, useState, useRef } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\n\ntype EdgeSwipeIndicatorProps = {\n /** Enable/disable the indicator (default: true) */\n enabled?: boolean\n /** Edge detection zone width in pixels (default: 20) */\n edgeWidth?: number\n /** Threshold to show indicator (default: 30) */\n showThreshold?: number\n}\n\n/**\n * Visual indicator for edge swipe gesture\n * Shows an arrow when user swipes from the left edge\n */\nexport function EdgeSwipeIndicator({\n enabled = true,\n edgeWidth = 20,\n showThreshold = 30,\n}: EdgeSwipeIndicatorProps) {\n const [swipeProgress, setSwipeProgress] = useState(0)\n const [isVisible, setIsVisible] = useState(false)\n const startX = useRef<number | null>(null)\n const isEdgeSwipe = useRef(false)\n\n useEffect(() => {\n if (!enabled) return\n\n const handleTouchStart = (e: TouchEvent) => {\n const touch = e.touches[0]\n if (touch.clientX <= edgeWidth) {\n startX.current = touch.clientX\n isEdgeSwipe.current = true\n }\n }\n\n const handleTouchMove = (e: TouchEvent) => {\n if (!isEdgeSwipe.current || startX.current === null) return\n\n const touch = e.touches[0]\n const deltaX = touch.clientX - startX.current\n\n if (deltaX >= showThreshold) {\n setIsVisible(true)\n // Calculate progress (0-1) up to 100px\n const progress = Math.min(deltaX / 100, 1)\n setSwipeProgress(progress)\n } else {\n setIsVisible(false)\n setSwipeProgress(0)\n }\n }\n\n const handleTouchEnd = () => {\n setIsVisible(false)\n setSwipeProgress(0)\n startX.current = null\n isEdgeSwipe.current = false\n }\n\n window.addEventListener('touchstart', handleTouchStart, { passive: true })\n window.addEventListener('touchmove', handleTouchMove, { passive: true })\n window.addEventListener('touchend', handleTouchEnd, { passive: true })\n window.addEventListener('touchcancel', handleTouchEnd, { passive: true })\n\n return () => {\n window.removeEventListener('touchstart', handleTouchStart)\n window.removeEventListener('touchmove', handleTouchMove)\n window.removeEventListener('touchend', handleTouchEnd)\n window.removeEventListener('touchcancel', handleTouchEnd)\n }\n }, [enabled, edgeWidth, showThreshold])\n\n return (\n <AnimatePresence>\n {isVisible && (\n <motion.div\n initial={{ opacity: 0, x: -20 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -20 }}\n transition={{ duration: 0.15 }}\n className=\"fixed left-0 top-1/2 -translate-y-1/2 z-50 pointer-events-none\"\n >\n <motion.div\n className=\"flex items-center justify-center w-12 h-12 rounded-r-full\n bg-white/90 dark:bg-gray-800/90 backdrop-blur-xl\n shadow-lg border border-gray-200/50 dark:border-gray-700/50\"\n animate={{\n x: swipeProgress * 20,\n scale: 0.9 + swipeProgress * 0.1,\n }}\n >\n <motion.svg\n className=\"w-6 h-6 text-[#007AFF]\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n animate={{\n x: swipeProgress * 5,\n }}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2.5}\n d=\"M15 19l-7-7 7-7\"\n />\n </motion.svg>\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n}\n\n/**\n * Provider component that adds edge swipe navigation to the app\n * Include this at the root of your app layout\n */\nexport function EdgeSwipeProvider({\n children,\n enabled = true,\n onBack,\n}: {\n children: React.ReactNode\n enabled?: boolean\n onBack?: () => void\n}) {\n // Import and use the edge swipe hook\n useEdgeSwipeEffect({ enabled, onBack })\n\n return (\n <>\n <EdgeSwipeIndicator enabled={enabled} />\n {children}\n </>\n )\n}\n\n/**\n * Hook that handles edge swipe navigation\n */\nfunction useEdgeSwipeEffect({\n enabled = true,\n onBack,\n}: {\n enabled?: boolean\n onBack?: () => void\n}) {\n const startX = useRef<number | null>(null)\n const startY = useRef<number | null>(null)\n const isEdgeSwipe = useRef(false)\n\n useEffect(() => {\n if (!enabled) return\n\n const edgeWidth = 20\n const threshold = 100\n\n const handleTouchStart = (e: TouchEvent) => {\n const touch = e.touches[0]\n if (touch.clientX <= edgeWidth) {\n startX.current = touch.clientX\n startY.current = touch.clientY\n isEdgeSwipe.current = true\n }\n }\n\n const handleTouchMove = (e: TouchEvent) => {\n if (!isEdgeSwipe.current || startX.current === null) return\n\n const touch = e.touches[0]\n const deltaX = touch.clientX - startX.current\n const deltaY = Math.abs(touch.clientY - (startY.current ?? 0))\n\n // Cancel if vertical movement is greater\n if (deltaY > deltaX) {\n isEdgeSwipe.current = false\n startX.current = null\n startY.current = null\n }\n }\n\n const handleTouchEnd = async (e: TouchEvent) => {\n if (!isEdgeSwipe.current || startX.current === null) return\n\n const touch = e.changedTouches[0]\n const deltaX = touch.clientX - startX.current\n\n if (deltaX >= threshold) {\n // Trigger haptic\n const { triggerHaptic } = await import('@ui/hooks/use-haptic')\n triggerHaptic('medium')\n\n if (onBack) {\n onBack()\n } else {\n window.history.back()\n }\n }\n\n startX.current = null\n startY.current = null\n isEdgeSwipe.current = false\n }\n\n window.addEventListener('touchstart', handleTouchStart, { passive: true })\n window.addEventListener('touchmove', handleTouchMove, { passive: true })\n window.addEventListener('touchend', handleTouchEnd, { passive: true })\n\n return () => {\n window.removeEventListener('touchstart', handleTouchStart)\n window.removeEventListener('touchmove', handleTouchMove)\n window.removeEventListener('touchend', handleTouchEnd)\n }\n }, [enabled, onBack])\n}\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { createContext, useContext, useState } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { Link } from '@ui/components/link'\nimport { ChevronUpIcon, ChevronDownIcon, ChevronUpDownIcon } from '@heroicons/react/24/outline'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\nimport { springPresets, getTransition } from '@ui/lib/animations'\n\ntype SortDirection = 'asc' | 'desc' | null\n\nconst TableContext = createContext<{\n bleed: boolean\n dense: boolean\n grid: boolean\n striped: boolean\n loading?: boolean\n emptyState?: React.ReactNode\n}>({\n bleed: false,\n dense: false,\n grid: false,\n striped: false,\n loading: false,\n emptyState: undefined,\n})\n\nexport function Table({\n bleed = false,\n dense = false,\n grid = false,\n striped = false,\n loading = false,\n emptyState,\n className,\n children,\n ...props\n}: {\n bleed?: boolean\n dense?: boolean\n grid?: boolean\n striped?: boolean\n /** Show loading skeleton */\n loading?: boolean\n /** Custom empty state component */\n emptyState?: React.ReactNode\n} & React.ComponentPropsWithoutRef<'div'>) {\n return (\n <TableContext.Provider value={{ bleed, dense, grid, striped, loading, emptyState }}>\n <div className=\"flow-root\">\n <div {...props} className={clsx(className, '-mx-(--gutter) overflow-x-auto whitespace-nowrap')}>\n <div className={clsx('inline-block min-w-full align-middle', !bleed && 'sm:px-(--gutter)')}>\n <table className=\"min-w-full text-left text-sm/6 text-slate-950 dark:text-white\">{children}</table>\n </div>\n </div>\n </div>\n </TableContext.Provider>\n )\n}\n\nexport function TableHead({ className, ...props }: React.ComponentPropsWithoutRef<'thead'>) {\n // WCAG 1.4.3: bumped from slate-500 → slate-600 (light) / 400 → 300\n // (dark) so header text passes AA over the glass ground tables\n // commonly sit on.\n return <thead {...props} className={clsx(className, 'text-slate-600 dark:text-slate-300')} />\n}\n\nexport function TableBody(props: React.ComponentPropsWithoutRef<'tbody'>) {\n return <tbody {...props} />\n}\n\nconst TableRowContext = createContext<{ href?: string; target?: string; title?: string }>({\n href: undefined,\n target: undefined,\n title: undefined,\n})\n\nexport function TableRow({\n href,\n target,\n title,\n className,\n ...props\n}: { href?: string; target?: string; title?: string } & React.ComponentPropsWithoutRef<'tr'>) {\n let { striped } = useContext(TableContext)\n\n return (\n <TableRowContext.Provider value={{ href, target, title } as React.ContextType<typeof TableRowContext>}>\n <tr\n {...props}\n className={clsx(\n className,\n href &&\n 'has-[[data-row-link][data-focus]]:outline-2 has-[[data-row-link][data-focus]]:-outline-offset-2 has-[[data-row-link][data-focus]]:outline-indigo-500/70 dark:focus-within:bg-white/2.5',\n striped && 'even:bg-slate-950/2.5 dark:even:bg-white/2.5',\n href && striped && 'hover:bg-slate-950/5 dark:hover:bg-white/5',\n href && !striped && 'hover:bg-slate-950/2.5 dark:hover:bg-white/2.5'\n )}\n />\n </TableRowContext.Provider>\n )\n}\n\nexport function TableHeader({ className, scope, ...props }: React.ComponentPropsWithoutRef<'th'>) {\n let { bleed, grid } = useContext(TableContext)\n\n // WCAG 1.3.1: explicit `scope=\"col\"` (defaulted) so screen readers\n // bind cells to their column header even in nested-header tables.\n // Caller can override (e.g. `scope=\"row\"` for header cells in a\n // row-direction header).\n return (\n <th\n scope={scope ?? 'col'}\n {...props}\n className={clsx(\n className,\n 'border-b border-b-white/20 dark:border-b-white/10 px-4 py-2 font-medium first:pl-(--gutter,--spacing(2)) last:pr-(--gutter,--spacing(2))',\n grid && 'border-l border-l-white/20 first:border-l-0 dark:border-l-white/10',\n !bleed && 'sm:first:pl-1 sm:last:pr-1'\n )}\n />\n )\n}\n\nexport function TableCell({ className, children, ...props }: React.ComponentPropsWithoutRef<'td'>) {\n let { bleed, dense, grid, striped } = useContext(TableContext)\n let { href, target, title } = useContext(TableRowContext)\n let [cellRef, setCellRef] = useState<HTMLElement | null>(null)\n\n return (\n <td\n ref={href ? setCellRef : undefined}\n {...props}\n className={clsx(\n className,\n 'relative px-4 first:pl-(--gutter,--spacing(2)) last:pr-(--gutter,--spacing(2))',\n !striped && 'border-b border-white/20 dark:border-white/[0.08]',\n grid && 'border-l border-l-white/20 first:border-l-0 dark:border-l-white/10',\n dense ? 'py-2.5' : 'py-4',\n !bleed && 'sm:first:pl-1 sm:last:pr-1'\n )}\n >\n {href && (\n <Link\n data-row-link\n href={href}\n target={target}\n aria-label={title}\n tabIndex={cellRef?.previousElementSibling === null ? 0 : -1}\n className=\"absolute inset-0 focus:outline-hidden\"\n />\n )}\n {children}\n </td>\n )\n}\n\n/**\n * Sortable Table Header - iOS style with haptic feedback\n */\nexport function SortableTableHeader({\n className,\n children,\n sortKey,\n currentSort,\n currentDirection,\n onSort,\n ...props\n}: {\n sortKey: string\n currentSort?: string\n currentDirection?: SortDirection\n onSort?: (key: string, direction: SortDirection) => void\n} & React.ComponentPropsWithoutRef<'th'>) {\n let { bleed, grid } = useContext(TableContext)\n const isActive = currentSort === sortKey\n const direction = isActive ? currentDirection : null\n\n const handleSort = () => {\n triggerHaptic('light')\n if (!isActive) {\n onSort?.(sortKey, 'asc')\n } else if (direction === 'asc') {\n onSort?.(sortKey, 'desc')\n } else {\n onSort?.(sortKey, null)\n }\n }\n\n return (\n <th\n {...props}\n onClick={handleSort}\n className={clsx(\n className,\n 'border-b border-b-white/20 dark:border-b-white/10 px-4 py-2 font-medium first:pl-(--gutter,--spacing(2)) last:pr-(--gutter,--spacing(2))',\n grid && 'border-l border-l-white/20 first:border-l-0 dark:border-l-white/10',\n !bleed && 'sm:first:pl-1 sm:last:pr-1',\n 'cursor-pointer select-none hover:bg-white/30 dark:hover:bg-white/[0.06] transition-colors',\n isActive && 'text-[#007AFF] dark:text-[#0A84FF]'\n )}\n >\n <div className=\"flex items-center gap-1.5\">\n <span>{children}</span>\n <motion.span\n initial={false}\n animate={{ opacity: 1 }}\n transition={getTransition(springPresets.stiff)}\n className=\"flex-shrink-0\"\n >\n {direction === 'asc' ? (\n <ChevronUpIcon className=\"h-4 w-4\" />\n ) : direction === 'desc' ? (\n <ChevronDownIcon className=\"h-4 w-4\" />\n ) : (\n <ChevronUpDownIcon className=\"h-4 w-4 opacity-40\" />\n )}\n </motion.span>\n </div>\n </th>\n )\n}\n\n/**\n * Table Skeleton Row - Loading placeholder\n */\nexport function TableSkeletonRow({\n columns = 4,\n className,\n}: {\n columns?: number\n className?: string\n}) {\n const { dense } = useContext(TableContext)\n\n return (\n <tr className={className}>\n {Array.from({ length: columns }).map((_, i) => (\n <td\n key={i}\n className={clsx(\n 'px-4 first:pl-(--gutter,--spacing(2)) last:pr-(--gutter,--spacing(2))',\n 'border-b border-white/20 dark:border-white/[0.08]',\n dense ? 'py-2.5' : 'py-4'\n )}\n >\n <div\n className={clsx(\n 'h-4 rounded bg-slate-200 dark:bg-slate-700 animate-pulse motion-reduce:animate-none',\n i === 0 ? 'w-32' : i === columns - 1 ? 'w-16' : 'w-24'\n )}\n />\n </td>\n ))}\n </tr>\n )\n}\n\n/**\n * Table Skeleton - Multiple loading rows\n */\nexport function TableSkeleton({\n rows = 5,\n columns = 4,\n}: {\n rows?: number\n columns?: number\n}) {\n return (\n <TableBody>\n {Array.from({ length: rows }).map((_, i) => (\n <TableSkeletonRow key={i} columns={columns} />\n ))}\n </TableBody>\n )\n}\n\n/**\n * Table Empty State\n */\nexport function TableEmptyState({\n icon,\n title,\n description,\n action,\n colSpan = 1,\n}: {\n icon?: React.ReactNode\n title: string\n description?: string\n action?: React.ReactNode\n colSpan?: number\n}) {\n return (\n <TableBody>\n <tr>\n <td colSpan={colSpan} className=\"py-16 text-center\">\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={getTransition(springPresets.gentle)}\n className=\"flex flex-col items-center gap-3\"\n >\n {icon && (\n <div className=\"h-12 w-12 rounded-full bg-white/40 dark:bg-white/[0.04] flex items-center justify-center text-slate-400 dark:text-slate-500\">\n {icon}\n </div>\n )}\n <div className=\"space-y-1\">\n <h3 className=\"font-medium text-slate-900 dark:text-white\">{title}</h3>\n {description && (\n <p className=\"text-sm text-slate-500 dark:text-slate-400 max-w-sm\">\n {description}\n </p>\n )}\n </div>\n {action && <div className=\"mt-2\">{action}</div>}\n </motion.div>\n </td>\n </tr>\n </TableBody>\n )\n}\n\n/**\n * Animated Table Row - With enter/exit animations\n */\nexport function AnimatedTableRow({\n href,\n target,\n title,\n className,\n index = 0,\n ...props\n}: {\n href?: string\n target?: string\n title?: string\n index?: number\n} & React.ComponentPropsWithoutRef<'tr'>) {\n let { striped } = useContext(TableContext)\n\n // Omit event handlers that conflict with Framer Motion's event signatures\n const { onDrag, onDragStart, onDragEnd, onAnimationStart, onAnimationEnd, onAnimationIteration, ...restProps } = props\n\n return (\n <TableRowContext.Provider value={{ href, target, title }}>\n <motion.tr\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, x: -20 }}\n transition={{\n ...getTransition(springPresets.gentle),\n delay: index * 0.03,\n }}\n {...restProps}\n className={clsx(\n className,\n href &&\n 'has-[[data-row-link][data-focus]]:outline-2 has-[[data-row-link][data-focus]]:-outline-offset-2 has-[[data-row-link][data-focus]]:outline-indigo-500/70 dark:focus-within:bg-white/2.5',\n striped && 'even:bg-slate-950/2.5 dark:even:bg-white/2.5',\n href && striped && 'hover:bg-slate-950/5 dark:hover:bg-white/5',\n href && !striped && 'hover:bg-slate-950/2.5 dark:hover:bg-white/2.5'\n )}\n />\n </TableRowContext.Provider>\n )\n}\n\n/**\n * Selectable Table Row - With checkbox\n */\nexport function SelectableTableRow({\n selected = false,\n onSelect,\n href,\n target,\n title,\n className,\n children,\n ...props\n}: {\n selected?: boolean\n onSelect?: (selected: boolean) => void\n href?: string\n target?: string\n title?: string\n} & React.ComponentPropsWithoutRef<'tr'>) {\n let { striped, dense } = useContext(TableContext)\n\n const handleSelect = () => {\n triggerHaptic('light')\n onSelect?.(!selected)\n }\n\n return (\n <TableRowContext.Provider value={{ href, target, title }}>\n <tr\n {...props}\n className={clsx(\n className,\n href &&\n 'has-[[data-row-link][data-focus]]:outline-2 has-[[data-row-link][data-focus]]:-outline-offset-2 has-[[data-row-link][data-focus]]:outline-indigo-500/70 dark:focus-within:bg-white/2.5',\n striped && 'even:bg-slate-950/2.5 dark:even:bg-white/2.5',\n href && striped && 'hover:bg-slate-950/5 dark:hover:bg-white/5',\n href && !striped && 'hover:bg-slate-950/2.5 dark:hover:bg-white/2.5',\n selected && 'bg-[#007AFF]/5 dark:bg-[#0A84FF]/10'\n )}\n >\n <td\n className={clsx(\n 'px-4 first:pl-(--gutter,--spacing(2))',\n 'border-b border-white/20 dark:border-white/[0.08]',\n dense ? 'py-2.5' : 'py-4'\n )}\n >\n <motion.button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={selected}\n aria-label=\"Select row\"\n onClick={handleSelect}\n whileTap={{ scale: 0.9 }}\n transition={getTransition(springPresets.stiff)}\n className={clsx(\n 'h-5 w-5 rounded-full border-2 flex items-center justify-center transition-colors',\n selected\n ? 'bg-[#007AFF] dark:bg-[#0A84FF] border-[#007AFF] dark:border-[#0A84FF]'\n : 'border-slate-300 dark:border-slate-600'\n )}\n >\n <AnimatePresence>\n {selected && (\n <motion.svg\n initial={{ scale: 0 }}\n animate={{ scale: 1 }}\n exit={{ scale: 0 }}\n transition={getTransition(springPresets.bouncy)}\n className=\"h-3 w-3 text-white\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </motion.svg>\n )}\n </AnimatePresence>\n </motion.button>\n </td>\n {children}\n </tr>\n </TableRowContext.Provider>\n )\n}\n","import { useState, useCallback } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\nimport { springPresets, getTransition } from '@ui/lib/animations'\nimport { Button } from '@ui/components/button'\nimport {\n ExclamationTriangleIcon,\n WifiIcon,\n ArrowPathIcon,\n ShieldExclamationIcon,\n DocumentMagnifyingGlassIcon,\n FolderOpenIcon,\n ServerStackIcon,\n} from '@heroicons/react/24/outline'\n\ntype EmptyStateProps = {\n /** Main message/title */\n message: string\n /** Optional detailed description */\n description?: string\n /** Optional icon component */\n icon?: React.ComponentType<{ className?: string }>\n /** Optional action button */\n action?: {\n label: string\n onClick: () => void\n }\n /** Visual style variant */\n variant?: \"default\" | \"minimal\" | \"card\"\n}\n\n/**\n * iOS-style empty state component\n * Used when there's no content to display\n */\nexport function EmptyState({\n message,\n description,\n icon: Icon,\n action,\n variant = \"default\",\n}: EmptyStateProps) {\n const handleActionClick = () => {\n triggerHaptic(\"light\")\n action?.onClick()\n }\n\n const containerClasses = {\n default: \"liquid-surface rounded-xl border border-dashed border-white/30 dark:border-white/10\",\n minimal: \"\",\n card: \"liquid-surface rounded-2xl border border-white/20 dark:border-white/10\",\n }\n\n return (\n <div\n className={`px-6 py-12 text-center ${containerClasses[variant]}`}\n >\n {Icon && (\n <motion.div\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={springPresets.bouncy}\n className=\"mx-auto mb-4\"\n >\n <div className=\"inline-flex h-16 w-16 items-center justify-center rounded-full border border-white/60 bg-white/75 shadow-sm backdrop-blur-xl dark:border-white/12 dark:bg-white/8\">\n <Icon className=\"h-8 w-8 text-slate-600 dark:text-slate-300\" />\n </div>\n </motion.div>\n )}\n\n <motion.div\n initial={{ y: 10, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{ ...springPresets.default, delay: 0.1 }}\n >\n <h3 className=\"text-base font-semibold text-slate-900 dark:text-white\">\n {message}\n </h3>\n\n {description && (\n <p className=\"mt-2 text-sm text-slate-500 dark:text-slate-400 max-w-sm mx-auto\">\n {description}\n </p>\n )}\n </motion.div>\n\n {action && (\n <motion.div\n initial={{ y: 10, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{ ...springPresets.default, delay: 0.2 }}\n className=\"mt-6\"\n >\n {/* Production CTA — consumes the canonical Button so hover\n gets the crystal-illuminated glass treatment (DS rule:\n every action must go through <Button>). */}\n <Button color=\"ios-glass-blue\" onClick={handleActionClick}>\n {action.label}\n </Button>\n </motion.div>\n )}\n </div>\n )\n}\n\n/**\n * Error State Component - iOS style with retry logic\n */\ntype ErrorStateProps = {\n /** Error title */\n title?: string\n /** Error message/description */\n message?: string\n /** Error code (optional) */\n errorCode?: string | number\n /** Error type determines icon and styling */\n type?: \"generic\" | \"network\" | \"server\" | \"permission\" | \"notFound\"\n /** Retry callback */\n onRetry?: () => Promise<void> | void\n /** Retry button label */\n retryLabel?: string\n /** Secondary action */\n secondaryAction?: {\n label: string\n onClick: () => void\n }\n /** Show detailed error info toggle */\n showDetails?: boolean\n /** Detailed error info */\n details?: string\n /** Visual variant */\n variant?: \"default\" | \"minimal\" | \"card\" | \"fullscreen\"\n}\n\nconst errorTypeConfig = {\n generic: {\n icon: ExclamationTriangleIcon,\n titleKey: \"genericTitle\" as const,\n messageKey: \"genericMessage\" as const,\n iconBg: \"bg-[#FF3B30]/10 dark:bg-[#FF453A]/20\",\n iconColor: \"text-[#FF3B30] dark:text-[#FF453A]\",\n },\n network: {\n icon: WifiIcon,\n titleKey: \"networkTitle\" as const,\n messageKey: \"networkMessage\" as const,\n iconBg: \"bg-[#FF9500]/10 dark:bg-[#FF9F0A]/20\",\n iconColor: \"text-[#FF9500] dark:text-[#FF9F0A]\",\n },\n server: {\n icon: ServerStackIcon,\n titleKey: \"serverTitle\" as const,\n messageKey: \"serverMessage\" as const,\n iconBg: \"bg-[#FF3B30]/10 dark:bg-[#FF453A]/20\",\n iconColor: \"text-[#FF3B30] dark:text-[#FF453A]\",\n },\n permission: {\n icon: ShieldExclamationIcon,\n titleKey: \"permissionTitle\" as const,\n messageKey: \"permissionMessage\" as const,\n iconBg: \"bg-[#AF52DE]/10 dark:bg-[#BF5AF2]/20\",\n iconColor: \"text-[#AF52DE] dark:text-[#BF5AF2]\",\n },\n notFound: {\n icon: DocumentMagnifyingGlassIcon,\n titleKey: \"notFoundTitle\" as const,\n messageKey: \"notFoundMessage\" as const,\n iconBg: \"bg-white/40 dark:bg-white/[0.04]\",\n iconColor: \"text-slate-400 dark:text-slate-500\",\n },\n}\n\nexport function ErrorState({\n title,\n message,\n errorCode,\n type = \"generic\",\n onRetry,\n retryLabel,\n secondaryAction,\n showDetails = false,\n details,\n variant = \"default\",\n}: ErrorStateProps) {\n const t = useTranslations(\"common.errorState\")\n const [isRetrying, setIsRetrying] = useState(false)\n const [showErrorDetails, setShowErrorDetails] = useState(false)\n\n const config = errorTypeConfig[type]\n const Icon = config.icon\n const resolvedRetryLabel = retryLabel || t(\"tryAgain\")\n\n const handleRetry = useCallback(async () => {\n if (!onRetry || isRetrying) return\n\n setIsRetrying(true)\n triggerHaptic(\"medium\")\n\n try {\n await onRetry()\n } finally {\n setIsRetrying(false)\n }\n }, [onRetry, isRetrying])\n\n const toggleDetails = () => {\n triggerHaptic(\"light\")\n setShowErrorDetails(!showErrorDetails)\n }\n\n const containerClasses = {\n default: \"liquid-surface rounded-xl border border-white/30 dark:border-white/10\",\n minimal: \"\",\n card: \"liquid-surface rounded-2xl border border-white/20 dark:border-white/10\",\n fullscreen: \"fixed inset-0 flex items-center justify-center bg-white dark:bg-slate-900 z-50\",\n }\n\n const content = (\n <div role=\"alert\" className={variant === \"fullscreen\" ? \"\" : `px-6 py-12 text-center ${containerClasses[variant]}`}>\n {/* Icon */}\n <motion.div\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={getTransition(springPresets.bouncy)}\n className=\"mx-auto mb-4\"\n >\n <div className={`inline-flex h-16 w-16 items-center justify-center rounded-full ${config.iconBg}`}>\n <Icon className={`h-8 w-8 ${config.iconColor}`} />\n </div>\n </motion.div>\n\n {/* Title & Message */}\n <motion.div\n initial={{ y: 10, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{ ...getTransition(springPresets.default), delay: 0.1 }}\n >\n <h3 className=\"text-lg font-semibold text-slate-900 dark:text-white\">\n {title || t(config.titleKey)}\n </h3>\n\n <p className=\"mt-2 text-sm text-slate-500 dark:text-slate-400 max-w-sm mx-auto\">\n {message || t(config.messageKey)}\n </p>\n\n {errorCode && (\n <p className=\"mt-2 text-xs text-slate-400 dark:text-slate-500 font-mono\">\n {t(\"errorCode\", { code: errorCode })}\n </p>\n )}\n </motion.div>\n\n {/* Actions */}\n <motion.div\n initial={{ y: 10, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{ ...getTransition(springPresets.default), delay: 0.2 }}\n className=\"mt-6 flex flex-col sm:flex-row items-center justify-center gap-3\"\n >\n {onRetry && (\n <Button\n color=\"ios-glass-blue\"\n onClick={handleRetry}\n disabled={isRetrying}\n loading={isRetrying}\n loadingText={t(\"retrying\")}\n >\n <ArrowPathIcon className=\"h-4 w-4\" />\n {resolvedRetryLabel}\n </Button>\n )}\n\n {secondaryAction && (\n <Button\n plain\n onClick={() => {\n triggerHaptic(\"light\")\n secondaryAction.onClick()\n }}\n >\n {secondaryAction.label}\n </Button>\n )}\n </motion.div>\n\n {/* Error Details Toggle */}\n {showDetails && details && (\n <motion.div\n initial={{ y: 10, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{ ...getTransition(springPresets.default), delay: 0.3 }}\n className=\"mt-6\"\n >\n <button\n onClick={toggleDetails}\n className=\"text-xs text-slate-400 dark:text-slate-500 hover:text-slate-600 dark:hover:text-slate-400 transition-colors\"\n >\n {showErrorDetails ? t(\"hideDetails\") : t(\"showDetails\")}\n </button>\n\n <AnimatePresence>\n {showErrorDetails && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: \"auto\", opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={getTransition(springPresets.gentle)}\n className=\"overflow-hidden\"\n >\n <pre className=\"mt-3 p-3 bg-white/40 dark:bg-white/[0.04] rounded-lg text-xs text-left text-slate-600 dark:text-slate-400 font-mono overflow-x-auto max-h-32\">\n {details}\n </pre>\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n )}\n </div>\n )\n\n if (variant === \"fullscreen\") {\n return (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className={containerClasses.fullscreen}\n >\n <div className=\"px-6 py-12 text-center max-w-md\">{content}</div>\n </motion.div>\n )\n }\n\n return content\n}\n\n/**\n * Offline State - Specialized error state for network issues\n */\nexport function OfflineState({\n onRetry,\n message,\n}: {\n onRetry?: () => Promise<void> | void\n message?: string\n}) {\n const t = useTranslations(\"common.errorState\")\n return (\n <ErrorState\n type=\"network\"\n title={t(\"offlineTitle\")}\n message={message || t(\"offlineMessage\")}\n onRetry={onRetry}\n retryLabel={t(\"retryConnection\")}\n variant=\"card\"\n />\n )\n}\n\n/**\n * No Results State - For empty search/filter results\n */\nexport function NoResultsState({\n searchTerm,\n onClearFilters,\n suggestions,\n}: {\n searchTerm?: string\n onClearFilters?: () => void\n suggestions?: string[]\n}) {\n const t = useTranslations(\"common.emptyState\")\n return (\n <div className=\"liquid-surface rounded-xl px-6 py-12 text-center\">\n <motion.div\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={getTransition(springPresets.bouncy)}\n className=\"mx-auto mb-4\"\n >\n {/* Glass icon bubble — same chrome as HeroBlock's `glass`\n iconBackground (border-white/60 bg-white/75 backdrop-blur\n + shadow-sm). Keeps the icon container family-consistent\n across empty-state / error-state / hero-block / section-card. */}\n <div className=\"inline-flex h-16 w-16 items-center justify-center rounded-full border border-white/60 bg-white/75 shadow-sm backdrop-blur-xl dark:border-white/12 dark:bg-white/8\">\n <DocumentMagnifyingGlassIcon className=\"h-8 w-8 text-slate-600 dark:text-slate-300\" />\n </div>\n </motion.div>\n\n <motion.div\n initial={{ y: 10, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{ ...getTransition(springPresets.default), delay: 0.1 }}\n >\n <h3 className=\"text-lg font-semibold text-slate-900 dark:text-white\">\n {t(\"noResultsFound\")}\n </h3>\n\n {searchTerm && (\n <p className=\"mt-2 text-sm text-slate-500 dark:text-slate-400\">\n {t(\"noResultsFor\", { searchTerm })}\n </p>\n )}\n\n {suggestions && suggestions.length > 0 && (\n <div className=\"mt-4\">\n <p className=\"text-xs text-slate-400 dark:text-slate-500 mb-2\">{t(\"trySuggestions\")}</p>\n <div className=\"flex flex-wrap justify-center gap-2\">\n {suggestions.map((suggestion, index) => (\n <span\n key={index}\n className=\"px-3 py-1 text-xs rounded-full bg-white/40 dark:bg-white/[0.04] text-slate-600 dark:text-slate-400\"\n >\n {suggestion}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {onClearFilters && (\n <motion.div\n initial={{ y: 10, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{ ...getTransition(springPresets.default), delay: 0.2 }}\n className=\"mt-6\"\n >\n <Button\n color=\"ios-glass-blue\"\n onClick={() => {\n triggerHaptic(\"light\")\n onClearFilters()\n }}\n >\n {t(\"clearFilters\")}\n </Button>\n </motion.div>\n )}\n </motion.div>\n </div>\n )\n}\n\n/**\n * No Data State - For when a section has no data yet\n */\nexport function NoDataState({\n title,\n message,\n actionLabel,\n onAction,\n icon: CustomIcon,\n}: {\n title?: string\n message?: string\n actionLabel?: string\n onAction?: () => void\n icon?: React.ComponentType<{ className?: string }>\n}) {\n const t = useTranslations(\"common.emptyState\")\n const Icon = CustomIcon || FolderOpenIcon\n const resolvedTitle = title || t(\"noDataTitle\")\n const resolvedMessage = message || t(\"noDataMessage\")\n const resolvedActionLabel = actionLabel || t(\"createNew\")\n\n return (\n <div className=\"px-6 py-12 text-center liquid-surface rounded-xl border border-dashed border-white/30 dark:border-white/10\">\n <motion.div\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={getTransition(springPresets.bouncy)}\n className=\"mx-auto mb-4\"\n >\n <div className=\"inline-flex h-16 w-16 items-center justify-center rounded-full border border-white/60 bg-white/75 shadow-sm backdrop-blur-xl dark:border-white/12 dark:bg-white/8\">\n <Icon className=\"h-8 w-8 text-slate-600 dark:text-slate-300\" />\n </div>\n </motion.div>\n\n <motion.div\n initial={{ y: 10, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{ ...getTransition(springPresets.default), delay: 0.1 }}\n >\n <h3 className=\"text-base font-semibold text-slate-900 dark:text-white\">\n {resolvedTitle}\n </h3>\n <p className=\"mt-2 text-sm text-slate-500 dark:text-slate-400 max-w-sm mx-auto\">\n {resolvedMessage}\n </p>\n </motion.div>\n\n {onAction && (\n <motion.div\n initial={{ y: 10, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{ ...getTransition(springPresets.default), delay: 0.2 }}\n className=\"mt-6\"\n >\n <Button\n color=\"ios-glass-blue\"\n onClick={() => {\n triggerHaptic(\"light\")\n onAction()\n }}\n >\n {resolvedActionLabel}\n </Button>\n </motion.div>\n )}\n </div>\n )\n}\n","import { useState, useEffect, ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { springPresets } from '@ui/lib/animations'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\n\ntype DynamicIslandState = 'idle' | 'compact' | 'expanded'\n\ntype DynamicIslandPosition = 'center' | 'left' | 'right'\n\ntype DynamicIslandProps = {\n /** Content for idle state (small pill) */\n idleContent?: ReactNode\n /** Content for compact state (slightly larger) */\n compactContent?: ReactNode\n /** Content for expanded state (full size) */\n expandedContent?: ReactNode\n /** Current state */\n state?: DynamicIslandState\n /** Auto-collapse after delay (ms) */\n autoCollapseDelay?: number\n /** Callback when state changes */\n onStateChange?: (state: DynamicIslandState) => void\n /** Horizontal position */\n position?: DynamicIslandPosition\n}\n\nconst sizeVariants = {\n idle: {\n width: 52,\n height: 32,\n borderRadius: 16,\n },\n compact: {\n width: 380,\n height: 56,\n borderRadius: 28,\n },\n expanded: {\n width: 480,\n height: 108,\n borderRadius: 32,\n },\n}\n\nconst positionClasses: Record<DynamicIslandPosition, string> = {\n center: 'fixed top-2 left-1/2 z-[100]',\n left: 'fixed top-2 left-4 z-[100]',\n right: 'fixed top-2 right-4 z-[100]',\n}\n\nexport function DynamicIsland({\n idleContent,\n compactContent,\n expandedContent,\n state = 'idle',\n autoCollapseDelay,\n onStateChange,\n position = 'center',\n}: DynamicIslandProps) {\n const [internalState, setInternalState] = useState<DynamicIslandState>(state)\n\n useEffect(() => {\n setInternalState(state)\n }, [state])\n\n useEffect(() => {\n if (autoCollapseDelay && internalState !== 'idle') {\n const timer = setTimeout(() => {\n setInternalState('idle')\n onStateChange?.('idle')\n }, autoCollapseDelay)\n return () => clearTimeout(timer)\n }\n }, [internalState, autoCollapseDelay, onStateChange])\n\n const handleTap = () => {\n triggerHaptic('light')\n const nextState: DynamicIslandState =\n internalState === 'idle' ? 'compact' :\n internalState === 'compact' ? 'expanded' : 'idle'\n setInternalState(nextState)\n onStateChange?.(nextState)\n }\n\n const currentContent =\n internalState === 'expanded' ? expandedContent :\n internalState === 'compact' ? compactContent : idleContent\n\n return (\n <motion.div\n className={`${positionClasses[position]} cursor-pointer`}\n style={position === 'center' ? { x: '-50%' } : undefined}\n layout\n initial={false}\n animate={sizeVariants[internalState]}\n transition={springPresets.bouncy}\n onClick={handleTap}\n >\n <div className=\"h-full w-full overflow-hidden bg-black rounded-[inherit]\">\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={internalState}\n initial={{ opacity: 0, scale: 0.9 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.9 }}\n transition={{ duration: 0.15 }}\n className=\"h-full w-full flex items-center justify-center p-2 text-white\"\n >\n {currentContent}\n </motion.div>\n </AnimatePresence>\n </div>\n </motion.div>\n )\n}\n\n// ============================================================================\n// Dynamic Island Notification Integration\n// ============================================================================\n\ntype NotificationVariant = 'success' | 'error' | 'info' | 'warning'\n\ntype DynamicIslandNotificationProps = {\n /** Show the notification */\n show: boolean\n /** App icon */\n icon?: ReactNode\n /** App name */\n appName?: string\n /** Notification title */\n title: string\n /** Notification message */\n message?: string\n /** Notification variant for colors */\n variant?: NotificationVariant\n /** Auto-dismiss after delay (ms) */\n dismissAfter?: number\n /** Callback when dismissed */\n onDismiss?: () => void\n /** Horizontal position */\n position?: DynamicIslandPosition\n}\n\n// iOS system colors for Dynamic Island\nconst variantStyles = {\n success: {\n iconBg: 'bg-ios-green',\n accentColor: 'text-ios-green',\n glow: 'shadow-[0_0_20px_rgba(52,199,89,0.3)]',\n },\n error: {\n iconBg: 'bg-ios-red',\n accentColor: 'text-ios-red',\n glow: 'shadow-[0_0_20px_rgba(255,59,48,0.3)]',\n },\n warning: {\n iconBg: 'bg-ios-orange',\n accentColor: 'text-ios-orange',\n glow: 'shadow-[0_0_20px_rgba(255,149,0,0.3)]',\n },\n info: {\n iconBg: 'bg-ios-blue',\n accentColor: 'text-ios-blue',\n glow: 'shadow-[0_0_20px_rgba(0,122,255,0.3)]',\n },\n}\n\nexport function DynamicIslandNotification({\n show,\n icon,\n appName,\n title,\n message,\n variant = 'info',\n dismissAfter = 4000,\n onDismiss,\n position = 'right',\n}: DynamicIslandNotificationProps) {\n const [state, setState] = useState<DynamicIslandState>('idle')\n const styles = variantStyles[variant]\n\n useEffect(() => {\n if (show) {\n // Go directly to expanded state\n setState('expanded')\n triggerHaptic('light')\n\n const collapseTimer = setTimeout(() => {\n setState('idle')\n onDismiss?.()\n }, dismissAfter)\n\n return () => {\n clearTimeout(collapseTimer)\n }\n } else {\n setState('idle')\n }\n }, [show, dismissAfter, onDismiss])\n\n if (!show && state === 'idle') return null\n\n const content = (\n <div data-testid=\"dynamic-island-notification\" role=\"alert\" aria-live=\"assertive\">\n <DynamicIsland\n state={state}\n onStateChange={setState}\n position={position}\n idleContent={\n // Idle: Colored icon pill\n <div className=\"flex items-center justify-center\">\n {icon && (\n <div className={`h-6 w-6 rounded-full ${styles.iconBg} flex items-center justify-center`}>\n <div className=\"h-4 w-4 text-white\">{icon}</div>\n </div>\n )}\n </div>\n }\n compactContent={\n // Compact: Colored icon + title + message preview\n <div className=\"flex items-center gap-3 px-4 w-full\">\n {icon && (\n <div className={`h-8 w-8 rounded-full ${styles.iconBg} flex items-center justify-center shrink-0`}>\n <div className=\"h-5 w-5 text-white\">{icon}</div>\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-semibold truncate\">{title}</p>\n {message && <p className=\"text-xs text-gray-500 truncate\">{message}</p>}\n </div>\n </div>\n }\n expandedContent={\n // Expanded: Full notification with colored icon background\n <div className={`flex items-center gap-4 px-5 w-full h-full`}>\n {icon && (\n <div className={`h-14 w-14 rounded-2xl ${styles.iconBg} flex items-center justify-center shrink-0 ${styles.glow}`}>\n <div className=\"h-8 w-8 text-white\">{icon}</div>\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n {appName && (\n <p className={`text-[11px] uppercase tracking-wide font-medium ${styles.accentColor}`}>{appName}</p>\n )}\n <p className=\"text-[15px] font-semibold leading-tight\">{title}</p>\n {message && (\n <p className=\"text-[13px] text-gray-500 mt-0.5 truncate\">{message}</p>\n )}\n </div>\n </div>\n }\n />\n </div>\n )\n\n // Portal to document.body so the notification escapes any ancestor containers\n // with overflow-hidden, backdrop-blur, or transform that break fixed positioning.\n if (typeof document !== 'undefined') {\n return createPortal(content, document.body)\n }\n\n return content\n}\n","import { createContext, useContext, useState, useCallback, ReactNode } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { CheckCircleIcon, ExclamationCircleIcon, ExclamationTriangleIcon, InformationCircleIcon, BellIcon, XMarkIcon, TrashIcon } from '@heroicons/react/24/outline'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { DynamicIslandNotification } from '@ui/components/dynamic-island'\n\nexport type NotificationType = 'success' | 'error' | 'warning' | 'info'\n\nexport interface Notification {\n id: string\n type: NotificationType\n title: string\n message?: string\n timestamp: Date\n}\n\ntype NotificationContextType = {\n history: Notification[]\n pendingApprovals: Notification[]\n historyOpen: boolean\n addNotification: (notification: Omit<Notification, 'id' | 'timestamp'>) => void\n removeFromHistory: (id: string) => void\n clearHistory: () => void\n openHistory: () => void\n closeHistory: () => void\n success: (title: string, message?: string) => void\n error: (title: string, message?: string) => void\n warning: (title: string, message?: string) => void\n info: (title: string, message?: string) => void\n}\n\nconst NotificationContext = createContext<NotificationContextType | undefined>(undefined)\n\nexport function useNotifications() {\n const notificationContext = useContext(NotificationContext)\n if (!notificationContext) {\n throw new Error('useNotifications must be used within NotificationProvider')\n }\n return notificationContext\n}\n\ntype NotificationProviderProps = {\n children: ReactNode\n appName?: string\n}\n\nexport function NotificationProvider({ children, appName = 'Datatech' }: NotificationProviderProps) {\n const [history, setHistory] = useState<Notification[]>([])\n const [pendingApprovals] = useState<Notification[]>([])\n const [historyOpen, setHistoryOpen] = useState(false)\n const [dynamicIslandNotification, setDynamicIslandNotification] = useState<Notification | null>(null)\n\n const addNotification = useCallback((notification: Omit<Notification, 'id' | 'timestamp'>) => {\n const notificationId = Math.random().toString(36).substring(2, 9)\n const newNotification: Notification = { ...notification, id: notificationId, timestamp: new Date() }\n\n setDynamicIslandNotification(newNotification)\n setHistory((previousHistory) => [newNotification, ...previousHistory].slice(0, 50))\n }, [])\n\n const clearHistory = useCallback(() => {\n setHistory([])\n }, [])\n\n const removeFromHistory = useCallback((notificationId: string) => {\n setHistory((previousHistory) => previousHistory.filter((historyItem) => historyItem.id !== notificationId))\n }, [])\n\n const openHistory = useCallback(() => setHistoryOpen(true), [])\n const closeHistory = useCallback(() => setHistoryOpen(false), [])\n\n const success = useCallback((title: string, message?: string) => {\n addNotification({ type: 'success', title, message })\n }, [addNotification])\n\n const error = useCallback((title: string, message?: string) => {\n addNotification({ type: 'error', title, message })\n }, [addNotification])\n\n const warning = useCallback((title: string, message?: string) => {\n addNotification({ type: 'warning', title, message })\n }, [addNotification])\n\n const info = useCallback((title: string, message?: string) => {\n addNotification({ type: 'info', title, message })\n }, [addNotification])\n\n const getDynamicIslandIcon = (type: NotificationType) => {\n switch (type) {\n case 'success':\n return <CheckCircleIcon className=\"h-full w-full\" />\n case 'error':\n return <ExclamationCircleIcon className=\"h-full w-full\" />\n case 'warning':\n return <ExclamationTriangleIcon className=\"h-full w-full\" />\n case 'info':\n return <InformationCircleIcon className=\"h-full w-full\" />\n }\n }\n\n return (\n <NotificationContext.Provider value={{\n history,\n pendingApprovals,\n historyOpen,\n addNotification,\n removeFromHistory,\n clearHistory,\n openHistory,\n closeHistory,\n success,\n error,\n warning,\n info,\n }}>\n {children}\n\n <div aria-live=\"polite\" role=\"status\">\n {dynamicIslandNotification ? (\n <DynamicIslandNotification\n show\n icon={getDynamicIslandIcon(dynamicIslandNotification.type)}\n appName={appName}\n title={dynamicIslandNotification.title}\n message={dynamicIslandNotification.message}\n variant={dynamicIslandNotification.type}\n dismissAfter={5000}\n onDismiss={() => setDynamicIslandNotification(null)}\n />\n ) : null}\n </div>\n\n <NotificationDrawer\n open={historyOpen}\n history={history}\n onClose={closeHistory}\n onRemove={removeFromHistory}\n onClear={clearHistory}\n />\n </NotificationContext.Provider>\n )\n}\n\nexport function NotificationBellButton() {\n const t = useTranslations('notifications')\n const { history, historyOpen, openHistory } = useNotifications()\n const totalCount = history.length\n\n if (historyOpen) return null\n\n return (\n <button\n type=\"button\"\n onClick={openHistory}\n aria-label={t('title')}\n className=\"relative rounded-lg p-2 text-slate-600 dark:text-slate-300 hover:bg-white/30 hover:text-slate-900 dark:hover:bg-white/10 dark:hover:text-white transition-colors duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-indigo-500/70\"\n >\n <BellIcon className=\"h-5 w-5\" />\n {totalCount > 0 ? (\n <span className=\"absolute top-1 right-1 flex h-2 w-2\">\n <span className=\"animate-ping motion-reduce:animate-none absolute inline-flex h-full w-full rounded-full bg-indigo-400 opacity-75\" />\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-indigo-500\" />\n </span>\n ) : null}\n </button>\n )\n}\n\n/* ── Notification Drawer ─────────────────────────────────────────── */\n\nconst NOTIFICATION_TYPE_STYLES: Record<NotificationType, { icon: typeof CheckCircleIcon; color: string }> = {\n success: { icon: CheckCircleIcon, color: 'text-emerald-500' },\n error: { icon: ExclamationCircleIcon, color: 'text-red-500' },\n warning: { icon: ExclamationTriangleIcon, color: 'text-amber-500' },\n info: { icon: InformationCircleIcon, color: 'text-blue-500' },\n}\n\nfunction formatTimeAgo(date: Date, t: (key: string, params?: Record<string, string | number>) => string): string {\n const seconds = Math.floor((Date.now() - date.getTime()) / 1000)\n if (seconds < 60) return t('justNow')\n const minutes = Math.floor(seconds / 60)\n if (minutes < 60) return t('minutesAgo', { count: minutes })\n const hours = Math.floor(minutes / 60)\n if (hours < 24) return t('hoursAgo', { count: hours })\n return t('daysAgo', { count: Math.floor(hours / 24) })\n}\n\nfunction NotificationDrawer({\n open,\n history,\n onClose,\n onRemove,\n onClear,\n}: {\n open: boolean\n history: Notification[]\n onClose: () => void\n onRemove: (id: string) => void\n onClear: () => void\n}) {\n const t = useTranslations('notifications')\n\n return (\n <AnimatePresence>\n {open ? (\n <>\n <motion.div\n className=\"fixed inset-0 z-[60] bg-black/20 backdrop-blur-[2px]\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={onClose}\n />\n <motion.div\n className=\"liquid-surface-strong fixed right-2 top-2 bottom-2 z-[61] flex w-full max-w-sm flex-col overflow-hidden rounded-2xl\"\n initial={{ x: '110%', opacity: 0.5 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: '110%', opacity: 0.5 }}\n transition={{ type: 'spring', damping: 28, stiffness: 320 }}\n >\n <div className=\"absolute inset-y-0 left-0 w-[3px] bg-gradient-to-b from-amber-400 to-orange-500 opacity-80\" />\n\n <div className=\"flex items-center justify-between px-6 py-5\">\n <div className=\"flex items-center gap-3.5\">\n <div className=\"flex h-11 w-11 items-center justify-center rounded-[14px] bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg shadow-black/20 ring-1 ring-white/25\">\n <BellIcon className=\"h-6 w-6 text-white\" />\n </div>\n <h2 className=\"text-base font-semibold tracking-tight text-slate-950 dark:text-white\">\n {t('title')}\n </h2>\n </div>\n <div className=\"flex items-center gap-1.5\">\n {history.length > 0 ? (\n <button\n type=\"button\"\n onClick={onClear}\n className=\"rounded-xl p-2 text-slate-500 dark:text-slate-300 transition-all hover:bg-white/40 hover:text-slate-700 dark:hover:bg-white/10 dark:hover:text-white active:scale-95 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1\"\n aria-label={t('clearAll')}\n >\n <TrashIcon className=\"h-5 w-5\" />\n </button>\n ) : null}\n <button\n type=\"button\"\n onClick={onClose}\n className=\"rounded-xl p-2 text-slate-500 dark:text-slate-300 transition-all hover:bg-white/40 hover:text-slate-700 dark:hover:bg-white/10 dark:hover:text-white active:scale-95 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1\"\n aria-label={t('close')}\n >\n <XMarkIcon className=\"h-5 w-5\" />\n </button>\n </div>\n </div>\n\n <div className=\"mx-5 h-px bg-gradient-to-r from-transparent via-gray-200/80 to-transparent dark:via-white/10\" />\n\n <div className=\"flex-1 overflow-y-auto px-5 py-4\">\n {history.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <BellIcon className=\"h-12 w-12 text-gray-300 dark:text-gray-600 mb-3\" />\n <p className=\"text-sm font-medium text-gray-400 dark:text-gray-500\">{t('empty')}</p>\n </div>\n ) : (\n <div className=\"space-y-2.5\">\n <AnimatePresence initial={false}>\n {history.map((item) => {\n const style = NOTIFICATION_TYPE_STYLES[item.type]\n const Icon = style.icon\n return (\n <motion.div\n key={item.id}\n layout\n initial={{ opacity: 0, y: -8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, x: 80, transition: { duration: 0.2 } }}\n className=\"liquid-surface group relative flex gap-3 rounded-2xl p-3.5\"\n >\n <div className={`mt-0.5 flex-shrink-0 ${style.color}`}>\n <Icon className=\"h-5 w-5\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 dark:text-white truncate\">\n {item.title}\n </p>\n {item.message ? (\n <p className=\"mt-0.5 text-xs text-gray-500 dark:text-gray-400 line-clamp-2\">\n {item.message}\n </p>\n ) : null}\n <p className=\"mt-1.5 text-[11px] text-gray-400 dark:text-gray-500\">\n {formatTimeAgo(item.timestamp, t)}\n </p>\n </div>\n <button\n type=\"button\"\n onClick={() => onRemove(item.id)}\n className=\"absolute right-2.5 top-2.5 rounded-lg p-1 text-gray-300 opacity-0 transition-all group-hover:opacity-100 group-focus-within:opacity-100 hover:text-gray-500 active:scale-95 dark:text-gray-600 dark:hover:text-gray-400\"\n aria-label={t('dismiss')}\n >\n <XMarkIcon className=\"h-3.5 w-3.5\" />\n </button>\n </motion.div>\n )\n })}\n </AnimatePresence>\n </div>\n )}\n </div>\n </motion.div>\n </>\n ) : null}\n </AnimatePresence>\n )\n}\n","/**\n * Container Component\n * ==================\n *\n * Reusable container with multiple style variants.\n * Eliminates repeated Tailwind class patterns across components.\n */\n\nimport React from 'react'\nimport clsx from 'clsx'\n\nexport type ContainerVariant = 'card' | 'elevated' | 'glass' | 'minimal'\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: ContainerVariant\n children: React.ReactNode\n}\n\n/**\n * Container styles for each variant\n */\nconst CONTAINER_STYLES: Record<ContainerVariant, string> = {\n card: 'bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 shadow-xs hover:shadow-sm transition-shadow',\n elevated: 'bg-white dark:bg-gray-800 rounded-xl shadow-lg hover:shadow-xl transition-shadow',\n glass:\n 'bg-white/70 dark:bg-gray-800/70 backdrop-blur-xl border border-white/20 dark:border-gray-700/50 shadow-lg shadow-black/5',\n minimal: 'rounded-lg'\n}\n\nexport const Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ variant = 'card', className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(CONTAINER_STYLES[variant], className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nContainer.displayName = 'Container'\n","/**\n * FormField Component\n * ==================\n *\n * Standardized form field wrapper with label, error display, and accessibility.\n * Used across all forms (auth, admin, settings).\n */\n\nimport React from 'react'\nimport clsx from 'clsx'\n\nexport interface FormFieldProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: React.ReactNode\n error?: string | null\n required?: boolean\n helperText?: React.ReactNode\n children: React.ReactNode\n htmlFor?: string\n}\n\nexport const FormField = React.forwardRef<HTMLDivElement, FormFieldProps>(\n (\n { label, error, required, helperText, children, htmlFor, className, ...props },\n ref\n ) => {\n return (\n <div ref={ref} className={clsx('space-y-1.5', className)} {...props}>\n {label && (\n <label\n htmlFor={htmlFor}\n className=\"block text-sm font-medium text-gray-900 dark:text-white\"\n >\n {label}\n {required && <span className=\"ml-1 text-red-500\">*</span>}\n </label>\n )}\n\n <div className=\"relative\">{children}</div>\n\n {error && (\n <p className=\"text-sm text-red-500 dark:text-red-400\" role=\"alert\">\n {error}\n </p>\n )}\n\n {helperText && !error && (\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n )}\n </div>\n )\n }\n)\n\nFormField.displayName = 'FormField'\n","/**\n * FormSection Component\n * ====================\n *\n * Section wrapper for grouping related form fields.\n * Provides consistent spacing and optional title/description.\n */\n\nimport React from 'react'\nimport clsx from 'clsx'\n\nexport interface FormSectionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: React.ReactNode\n description?: React.ReactNode\n children: React.ReactNode\n}\n\nexport const FormSection = React.forwardRef<HTMLDivElement, FormSectionProps>(\n ({ title, description, children, className, ...props }, ref) => {\n return (\n <div ref={ref} className={clsx('space-y-4', className)} {...props}>\n {(title || description) && (\n <div className=\"space-y-1\">\n {title && (\n <h3 className=\"text-base font-semibold text-gray-900 dark:text-white\">\n {title}\n </h3>\n )}\n {description && (\n <p className=\"text-sm text-gray-600 dark:text-gray-400\">\n {description}\n </p>\n )}\n </div>\n )}\n <div className=\"space-y-4\">{children}</div>\n </div>\n )\n }\n)\n\nFormSection.displayName = 'FormSection'\n","/**\n * ListItem Component\n * =================\n *\n * Standardized list item with icon, title, metadata, and actions.\n * Replaces repeated card patterns in station, approval, and competitor lists.\n */\n\nimport React from 'react'\nimport clsx from 'clsx'\nimport { ItemSummary } from '@ui/components/item-summary'\n\nexport type ListItemVariant = 'default' | 'compact' | 'card' | 'highlighted'\n\nexport interface ListItemAction {\n label: string\n onClick: () => void\n variant?: 'default' | 'danger'\n disabled?: boolean\n}\n\nexport interface ListItemMetadata {\n label: string\n value: string | React.ReactNode\n}\n\nexport interface ListItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n icon?: React.ReactNode\n title: React.ReactNode\n subtitle?: React.ReactNode\n metadata?: ListItemMetadata[]\n actions?: ListItemAction[]\n variant?: ListItemVariant\n}\n\n// All variants consume the canonical `liquid-surface` chrome so list\n// items belong to the same crystal family as cards/modals/inputs.\n// `highlighted` layers an indigo tint on top (same opacity budget as\n// Pagination's active page + StatusBadge info — passes WCAG AA).\nconst CONTAINER_STYLES: Record<ListItemVariant, string> = {\n default: 'liquid-surface',\n compact: 'bg-transparent',\n card: 'liquid-surface rounded-xl',\n highlighted:\n 'liquid-surface bg-indigo-500/10 dark:bg-indigo-500/15 ring-1 ring-inset ring-indigo-500/30'\n}\n\nconst SPACING_STYLES: Record<ListItemVariant, string> = {\n default: 'p-4',\n compact: 'py-2',\n card: 'p-4',\n highlighted: 'p-4'\n}\n\nexport const ListItem = React.forwardRef<HTMLDivElement, ListItemProps>(\n (\n {\n icon,\n title,\n subtitle,\n metadata,\n actions,\n variant = 'default',\n className,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={clsx(\n 'flex items-start justify-between gap-4 rounded-lg transition-all duration-200',\n CONTAINER_STYLES[variant],\n SPACING_STYLES[variant],\n className\n )}\n {...props}\n >\n <ItemSummary\n icon={icon}\n title={title}\n subtitle={subtitle}\n metadata={metadata}\n />\n\n {/* Actions */}\n {actions && actions.length > 0 && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {actions.map((action, index) => (\n <button\n key={index}\n onClick={action.onClick}\n disabled={action.disabled}\n className={clsx(\n 'px-3 py-1.5 rounded-lg text-xs font-medium transition-colors duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-indigo-500/70 dark:ring-offset-gray-900',\n action.variant === 'danger'\n ? 'text-red-700 dark:text-red-300 hover:bg-red-500/15 dark:hover:bg-red-500/20 disabled:opacity-50'\n : 'text-indigo-700 dark:text-indigo-300 hover:bg-indigo-500/15 dark:hover:bg-indigo-500/20 disabled:opacity-50'\n )}\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n }\n)\n\nListItem.displayName = 'ListItem'\n","interface ProfileIdentityCardProps {\n displayName: string\n profileInitial: string\n avatarUrl?: string\n email?: string\n showEmail: boolean\n role?: string\n}\n\nexport function ProfileIdentityCard({\n displayName,\n profileInitial,\n avatarUrl,\n email,\n showEmail,\n role,\n}: ProfileIdentityCardProps) {\n return (\n <div className=\"rounded-2xl liquid-surface p-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"inline-flex h-12 w-12 items-center justify-center rounded-full bg-indigo-500/20 text-indigo-600 dark:text-indigo-300\">\n {avatarUrl ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img src={avatarUrl} alt={displayName} className=\"h-12 w-12 rounded-full object-cover\" />\n ) : (\n <span className=\"text-lg font-semibold\">{profileInitial}</span>\n )}\n </div>\n <div>\n <div className=\"text-base font-semibold text-slate-900 dark:text-white\">{displayName}</div>\n {showEmail ? <div className=\"text-sm text-slate-500 dark:text-slate-400\">{email ?? ''}</div> : null}\n {role ? (\n <div className=\"mt-1 text-xs font-medium uppercase tracking-wide text-slate-500 dark:text-slate-400\">\n {role}\n </div>\n ) : null}\n </div>\n </div>\n </div>\n )\n}\n","/**\n * GlassModal — Unified Glass Modal with Compound Component API\n * ==============================================================\n *\n * VARIANTS (determined by props + subcomponents):\n *\n * 1. BARE — no `title` → pure Dialog overlay\n * <GlassModal open onClose={fn}>{content}</GlassModal>\n *\n * 2. STANDARD — `title` → hero header + scrollable content + footer\n * <GlassModal open onClose={fn} title=\"Edit\" gradient=\"...\">{content}</GlassModal>\n *\n * 3. FORM — `title` + `showFormFooter` → auto cancel/submit buttons\n * <GlassModal open onClose={fn} title=\"Create\" showFormFooter onSubmit={fn}>{form}</GlassModal>\n *\n * 4. SIDEBAR — `title` + `<GlassModal.Sidebar>` child → sidebar layout\n * <GlassModal open onClose={fn} title=\"Settings\" gradient=\"...\">\n * <GlassModal.Sidebar>\n * <GlassModal.Section id=\"profile\" icon={UserIcon} label=\"Profile\">\n * <ProfileContent />\n * </GlassModal.Section>\n * </GlassModal.Sidebar>\n * </GlassModal>\n */\n\nimport { Dialog, DialogBackdrop, DialogPanel } from '@headlessui/react'\nimport { XMarkIcon } from '@heroicons/react/24/outline'\nimport {\n type ReactNode,\n type ReactElement,\n type FormEvent,\n type ComponentType,\n createContext,\n useContext,\n useState,\n useCallback,\n Children,\n isValidElement,\n} from 'react'\nimport { Button } from '@ui/components/button'\nimport { ProfileIdentityCard } from '@ui/components/profile-identity-card'\nimport { HeroBlock } from '@ui/components/hero-block'\n\n// ════════════════════════════════════════════════════════════════════════\n// Types\n// ════════════════════════════════════════════════════════════════════════\n\nexport type GlassModalSize = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | 'full'\n\n/** Section definition for sidebar nav */\nexport interface GlassModalSection {\n id: string\n label: string\n icon: ComponentType<{ className?: string }>\n group?: string\n badge?: number\n}\n\n/** Identity card for sidebar */\nexport interface GlassModalIdentity {\n displayName: string\n profileInitial: string\n avatarUrl?: string\n email?: string\n role?: string\n showEmail?: boolean\n}\n\n/** Sidebar config (prop-based alternative to subcomponents) */\nexport interface GlassModalSidebar {\n sections: GlassModalSection[]\n activeSectionId: string\n onSectionChange: (sectionId: string) => void\n identity?: GlassModalIdentity\n /** Override the entire identity card with custom content (e.g. an\n * editable form). Takes precedence over `identity` when present —\n * use this when the identity surface needs inline edit\n * affordances instead of the read-only ProfileIdentityCard. */\n identityCard?: ReactNode\n /** Optional element pinned to the top-right of the sidebar header\n * (next to the title). Useful for top-level controls like a\n * status toggle or quick-action that's identity-adjacent but\n * needs higher prominence than a body field. */\n headerExtras?: ReactNode\n footer?: ReactNode\n}\n\nexport interface GlassModalProps {\n open: boolean\n onClose: () => void\n\n // Hero (optional — providing title enables structured layout)\n gradient?: string\n icon?: ReactNode\n label?: string\n title?: string\n subtitle?: string\n headerActions?: ReactNode\n\n // Content\n children: ReactNode\n\n // Footer (standard/form variants)\n footer?: ReactNode\n\n // Form variant\n onSubmit?: (event: FormEvent) => void\n showFormFooter?: boolean\n cancelLabel?: string\n submitLabel?: string\n isLoading?: boolean\n submitDisabled?: boolean\n\n // Sidebar (prop-based alternative — when using subcomponents, omit this)\n sidebar?: GlassModalSidebar\n\n // Layout\n maxWidth?: GlassModalSize\n closeLabel?: string\n className?: string\n zIndex?: string\n\n // Bare mode overrides\n panelClassName?: string\n contentClassName?: string\n\n // Testing\n overlayTestId?: string\n panelTestId?: string\n}\n\n// ════════════════════════════════════════════════════════════════════════\n// Context — shared between GlassModal and subcomponents\n// ════════════════════════════════════════════════════════════════════════\n\ntype SidebarContextValue = {\n activeSectionId: string\n setActiveSectionId: (id: string) => void\n}\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null)\n\n// ════════════════════════════════════════════════════════════════════════\n// Subcomponent types (for slot detection)\n// ════════════════════════════════════════════════════════════════════════\n\nconst SIDEBAR_TYPE = Symbol('GlassModal.Sidebar')\nconst SECTION_TYPE = Symbol('GlassModal.Section')\nconst GROUP_TYPE = Symbol('GlassModal.Group')\nconst IDENTITY_TYPE = Symbol('GlassModal.Identity')\nconst SIDEBAR_FOOTER_TYPE = Symbol('GlassModal.SidebarFooter')\nconst FOOTER_TYPE = Symbol('GlassModal.Footer')\n\n// ════════════════════════════════════════════════════════════════════════\n// Subcomponents\n// ════════════════════════════════════════════════════════════════════════\n\ninterface SectionProps {\n id: string\n icon: ComponentType<{ className?: string }>\n label: string\n badge?: number\n children: ReactNode\n}\n\nfunction Section({ children }: SectionProps) {\n return <>{children}</>\n}\n(Section as unknown as Record<string, symbol>).__type = SECTION_TYPE\n\ninterface GroupProps {\n label: string\n children: ReactNode\n}\n\nfunction Group({ children }: GroupProps) {\n return <>{children}</>\n}\n(Group as unknown as Record<string, symbol>).__type = GROUP_TYPE\n\ninterface IdentityProps {\n name: string\n initial?: string\n avatar?: string\n email?: string\n role?: string\n showEmail?: boolean\n}\n\nfunction Identity(_props: IdentityProps) {\n return null\n}\n(Identity as unknown as Record<string, symbol>).__type = IDENTITY_TYPE\n\nfunction SidebarFooterSlot({ children }: { children: ReactNode }) {\n return <>{children}</>\n}\n(SidebarFooterSlot as unknown as Record<string, symbol>).__type = SIDEBAR_FOOTER_TYPE\n\ninterface SidebarProps {\n /** Default active section ID (first section if not provided) */\n defaultSection?: string\n children: ReactNode\n}\n\nfunction Sidebar(_props: SidebarProps) {\n return null\n}\n(Sidebar as unknown as Record<string, symbol>).__type = SIDEBAR_TYPE\n\nfunction FooterSlot({ children }: { children: ReactNode }) {\n return <>{children}</>\n}\n(FooterSlot as unknown as Record<string, symbol>).__type = FOOTER_TYPE\n\n// ════════════════════════════════════════════════════════════════════════\n// Helpers\n// ════════════════════════════════════════════════════════════════════════\n\nfunction isSlotType(child: ReactElement, type: symbol): boolean {\n return (child.type as unknown as Record<string, symbol>)?.__type === type\n}\n\nfunction findSlot(children: ReactNode, type: symbol): ReactElement | undefined {\n const arr = Children.toArray(children)\n return arr.find((c) => isValidElement(c) && isSlotType(c, type)) as ReactElement | undefined\n}\n\nfunction filterNonSlots(children: ReactNode): ReactNode[] {\n return Children.toArray(children).filter(\n (c) => !(isValidElement(c) && ((c.type as unknown as Record<string, symbol>)?.__type))\n )\n}\n\nconst SIZE_CLASSES: Record<GlassModalSize, string> = {\n sm: 'max-w-sm', md: 'max-w-md', lg: 'max-w-lg', xl: 'max-w-xl',\n '2xl': 'max-w-2xl', '3xl': 'max-w-3xl', '4xl': 'max-w-4xl',\n '5xl': 'max-w-5xl', '6xl': 'max-w-6xl', full: 'max-w-[90vw]',\n}\n\nfunction AccentBar({ gradient, className }: { gradient: string; className?: string }) {\n return <div className={`h-1.5 w-full bg-gradient-to-r ${gradient} ${className ?? ''}`} />\n}\n\nfunction CloseBtn({ onClick, label }: { onClick: () => void; label: string }) {\n return (\n <button\n type=\"button\" onClick={onClick} aria-label={label} data-testid=\"modal-close\"\n className=\"absolute right-4 top-4 z-10 inline-flex h-9 w-9 items-center justify-center rounded-xl text-slate-500 transition hover:bg-white/40 hover:text-slate-700 dark:text-slate-300 dark:hover:bg-white/[0.08] dark:hover:text-white focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-2\"\n >\n <XMarkIcon className=\"h-5 w-5\" />\n </button>\n )\n}\n\n// ════════════════════════════════════════════════════════════════════════\n// Sidebar Layout Renderer\n// ════════════════════════════════════════════════════════════════════════\n\nfunction SidebarLayout({\n sidebarElement,\n gradient,\n icon,\n label,\n title,\n subtitle,\n onClose,\n closeLabel,\n footer,\n className,\n}: {\n sidebarElement: ReactElement<SidebarProps>\n gradient?: string\n icon?: ReactNode\n label?: string\n title: string\n subtitle?: string\n onClose: () => void\n closeLabel: string\n footer?: ReactNode\n className: string\n}) {\n const sidebarChildren = (sidebarElement.props as SidebarProps).children\n const defaultSection = (sidebarElement.props as SidebarProps).defaultSection\n\n // Extract subcomponents from Sidebar children\n const identityEl = findSlot(sidebarChildren, IDENTITY_TYPE)\n const sidebarFooterEl = findSlot(sidebarChildren, SIDEBAR_FOOTER_TYPE)\n\n // Collect sections (possibly nested in Groups)\n type SectionDef = { id: string; icon: ComponentType<{ className?: string }>; label: string; badge?: number; content: ReactNode; group?: string }\n const sections: SectionDef[] = []\n\n function collectSections(node: ReactNode, group?: string) {\n Children.forEach(node, (child) => {\n if (!isValidElement(child)) return\n if (isSlotType(child, GROUP_TYPE)) {\n const groupProps = child.props as GroupProps\n collectSections(groupProps.children, groupProps.label)\n } else if (isSlotType(child, SECTION_TYPE)) {\n const sectionProps = child.props as SectionProps\n sections.push({\n id: sectionProps.id,\n icon: sectionProps.icon,\n label: sectionProps.label,\n badge: sectionProps.badge,\n content: sectionProps.children,\n group,\n })\n }\n })\n }\n collectSections(sidebarChildren)\n\n const [activeSectionId, setActiveSectionId] = useState(defaultSection ?? sections[0]?.id ?? '')\n\n // Group sections for sidebar nav\n type SectionGroup = { label?: string; items: SectionDef[] }\n const groups: SectionGroup[] = []\n for (const section of sections) {\n const lastGroup = groups.at(-1)\n if (!lastGroup || lastGroup.label !== section.group) {\n groups.push({ label: section.group, items: [section] })\n } else {\n lastGroup.items.push(section)\n }\n }\n\n const activeContent = sections.find((s) => s.id === activeSectionId)?.content\n\n const identityProps = identityEl?.props as IdentityProps | undefined\n\n return (\n <SidebarContext.Provider value={{ activeSectionId, setActiveSectionId }}>\n <div className={`relative flex h-[min(94vh,920px)] flex-col lg:flex-row ${className}`}>\n\n {/* ── Sidebar ── */}\n <aside className=\"relative flex w-full shrink-0 flex-col border-b border-white/25 bg-gradient-to-b from-white/40 via-white/20 to-white/10 dark:border-white/8 dark:from-white/[0.06] dark:via-white/[0.03] dark:to-transparent lg:w-80 lg:border-b-0 lg:border-r lg:border-white/20 lg:dark:border-white/8\">\n {gradient && <AccentBar gradient={gradient} className=\"rounded-tl-2xl lg:rounded-tr-none\" />}\n\n <div className=\"mb-5 p-5 pb-0 pr-12\">\n {(icon || label) ? (\n <div className=\"mb-3 flex items-center gap-3\">\n {icon && (\n <div className={`flex h-10 w-10 items-center justify-center rounded-xl shadow-lg ${gradient ? `bg-gradient-to-br ${gradient}` : 'bg-gradient-to-br from-slate-500 to-gray-600'}`}>\n {icon}\n </div>\n )}\n <span className=\"text-[11px] font-semibold uppercase tracking-[0.22em] text-slate-500 dark:text-slate-400\">\n {label ?? 'Settings'}\n </span>\n </div>\n ) : (\n <p className=\"mb-1 text-[11px] font-semibold uppercase tracking-[0.22em] text-slate-500 dark:text-slate-400\">Settings</p>\n )}\n <h2 id=\"modal-title\" className=\"text-2xl font-semibold tracking-tight text-slate-950 dark:text-white\">{title}</h2>\n {subtitle && <p className=\"mt-1.5 text-sm text-slate-600 dark:text-slate-400\">{subtitle}</p>}\n </div>\n\n {identityProps && (\n <div className=\"px-5\">\n <ProfileIdentityCard\n displayName={identityProps.name}\n profileInitial={identityProps.initial ?? identityProps.name.charAt(0).toUpperCase()}\n avatarUrl={identityProps.avatar}\n email={identityProps.email}\n role={identityProps.role}\n showEmail={identityProps.showEmail ?? true}\n />\n </div>\n )}\n\n <nav className=\"mt-5 flex-1 space-y-6 overflow-y-auto px-5 pr-4\" aria-label={title}>\n {groups.map((group) => (\n <div key={group.label ?? group.items.map((s) => s.id).join('-')}>\n {group.label && (\n <p className=\"mb-2 px-1 text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-500 dark:text-slate-500\">\n {group.label}\n </p>\n )}\n <div className=\"space-y-1.5\">\n {group.items.map((section) => {\n const Icon = section.icon\n const isActive = activeSectionId === section.id\n return (\n <button\n key={section.id} type=\"button\"\n onClick={() => setActiveSectionId(section.id)}\n className={`flex w-full items-center gap-3 rounded-2xl px-4 py-3 text-left text-sm font-medium transition-all duration-200 ${\n isActive\n ? 'liquid-surface liquid-surface-active text-slate-950 dark:text-white'\n : 'text-slate-600 hover:bg-white/30 hover:text-slate-950 dark:text-slate-300 dark:hover:bg-white/[0.06] dark:hover:text-white'\n }`}\n >\n <span className=\"inline-flex h-10 w-10 items-center justify-center rounded-2xl bg-white/50 text-slate-600 shadow-sm backdrop-blur-sm dark:bg-white/[0.08] dark:text-slate-300\">\n <Icon className=\"h-5 w-5\" />\n </span>\n <span className=\"flex-1\">{section.label}</span>\n {section.badge != null && section.badge > 0 && (\n <span className=\"inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-indigo-100 px-1.5 text-[10px] font-bold text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300\">\n {section.badge}\n </span>\n )}\n </button>\n )\n })}\n </div>\n </div>\n ))}\n </nav>\n\n {sidebarFooterEl && <div className=\"mt-4 px-5\">{(sidebarFooterEl.props as { children: ReactNode }).children}</div>}\n </aside>\n\n {/* ── Content ── */}\n <section className=\"relative flex min-h-0 flex-1 flex-col\">\n {gradient ? (\n <div className=\"hidden lg:block\"><AccentBar gradient={gradient} /></div>\n ) : (\n <div className=\"absolute inset-x-6 top-0 h-px bg-gradient-to-r from-transparent via-white/50 to-transparent dark:via-white/10\" />\n )}\n <div className={`flex min-h-0 flex-1 flex-col overflow-y-auto px-6 sm:px-8 lg:px-10 ${gradient ? 'pt-8' : 'pt-16'} ${footer ? 'pb-4' : 'pb-8 lg:pb-10'}`}>\n {activeContent}\n </div>\n {footer && (\n <div className=\"border-t border-white/20 px-6 py-4 dark:border-white/10 sm:px-8 lg:px-10\">\n {footer}\n </div>\n )}\n </section>\n\n <CloseBtn onClick={onClose} label={closeLabel} />\n </div>\n </SidebarContext.Provider>\n )\n}\n\n// ════════════════════════════════════════════════════════════════════════\n// Prop-Based Sidebar Layout (for settings-modal.tsx backward compat)\n// ════════════════════════════════════════════════════════════════════════\n\nfunction PropBasedSidebarLayout({\n sidebar, gradient, icon, label, title, subtitle, onClose, closeLabel, footer, children,\n}: {\n sidebar: GlassModalSidebar\n gradient?: string; icon?: ReactNode; label?: string\n title: string; subtitle?: string\n onClose: () => void; closeLabel: string\n footer?: ReactNode; children: ReactNode\n}) {\n const groups: { label?: string; items: GlassModalSection[] }[] = []\n for (const section of sidebar.sections) {\n const lastGroup = groups.at(-1)\n if (!lastGroup || lastGroup.label !== section.group) {\n groups.push({ label: section.group, items: [section] })\n } else {\n lastGroup.items.push(section)\n }\n }\n\n return (\n <div className=\"relative flex h-[min(94vh,920px)] flex-col lg:flex-row\">\n <aside className=\"relative flex w-full shrink-0 flex-col overflow-hidden border-b border-white/25 bg-gradient-to-b from-white/40 via-white/20 to-white/10 dark:border-white/8 dark:from-white/[0.06] dark:via-white/[0.03] dark:to-transparent lg:w-80 lg:border-b-0 lg:border-r lg:border-white/20 lg:dark:border-white/8\">\n {/* Ambient blurred orbs — bring the page-level \"atmosphere\"\n (workflows-page-client and others use the same effect at\n the page bg) into the modal so opening a modal feels like\n zooming into the same space, not switching to a flat\n surface. Subtle opacity / pointer-events-none. */}\n <div aria-hidden className=\"pointer-events-none absolute -left-12 top-12 h-56 w-56 rounded-full bg-indigo-400/15 blur-3xl dark:bg-indigo-500/10\" />\n <div aria-hidden className=\"pointer-events-none absolute -right-16 top-1/3 h-72 w-72 rounded-full bg-fuchsia-400/12 blur-3xl dark:bg-fuchsia-500/8\" />\n <div aria-hidden className=\"pointer-events-none absolute -bottom-20 left-1/4 h-64 w-64 rounded-full bg-violet-400/10 blur-3xl dark:bg-violet-500/8\" />\n {gradient && <AccentBar gradient={gradient} className=\"relative rounded-tl-2xl lg:rounded-tr-none\" />}\n <div className=\"relative mb-5 p-5 pb-0 pr-12\">\n {/* Shared hero block — same typography + icon-bubble\n vocabulary as the page-level `<PageHeading>`, so an edit\n modal and the workspace page read as the same product.\n The `gradient` is intentionally NOT forwarded to the\n bubble — that lives in the AccentBar at the top of the\n sidebar. The icon bubble stays neutral/glassy to match\n page heros. */}\n <HeroBlock\n headingId=\"modal-title\"\n headingLevel=\"h2\"\n eyebrow={label ?? 'Settings'}\n icon={icon}\n title={title}\n subtitle={subtitle}\n rightContent={sidebar.headerExtras}\n />\n </div>\n {sidebar.identityCard ? (\n <div className=\"relative px-5\">{sidebar.identityCard}</div>\n ) : sidebar.identity ? (\n <div className=\"relative px-5\">\n <ProfileIdentityCard\n displayName={sidebar.identity.displayName}\n profileInitial={sidebar.identity.profileInitial}\n avatarUrl={sidebar.identity.avatarUrl}\n email={sidebar.identity.email}\n role={sidebar.identity.role}\n showEmail={sidebar.identity.showEmail ?? true}\n />\n </div>\n ) : null}\n {/* Section nav — skipped entirely when no sections. Callers\n using the identity card as the sole \"tab\" pass an empty\n sections array and the sidebar collapses to header +\n identity + footer. */}\n {sidebar.sections.length > 0 && (\n <nav className=\"relative mt-5 flex-1 space-y-6 overflow-y-auto px-5 pr-4\" aria-label={title}>\n {groups.map((group) => (\n <div key={group.label ?? group.items.map((s) => s.id).join('-')}>\n {group.label && <p className=\"mb-2 px-1 text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-500 dark:text-slate-500\">{group.label}</p>}\n <div className=\"space-y-1.5\">\n {group.items.map((section) => {\n const Icon = section.icon\n const isActive = sidebar.activeSectionId === section.id\n return (\n <button key={section.id} type=\"button\" onClick={() => sidebar.onSectionChange(section.id)}\n className={`flex w-full items-center gap-3 rounded-2xl px-4 py-3 text-left text-sm font-medium transition-all duration-200 ${isActive ? 'liquid-surface liquid-surface-active text-slate-950 dark:text-white' : 'text-slate-600 hover:bg-white/30 hover:text-slate-950 dark:text-slate-300 dark:hover:bg-white/[0.06] dark:hover:text-white'}`}\n >\n <span className=\"inline-flex h-10 w-10 items-center justify-center rounded-2xl bg-white/50 text-slate-600 shadow-sm backdrop-blur-sm dark:bg-white/[0.08] dark:text-slate-300\"><Icon className=\"h-5 w-5\" /></span>\n <span className=\"flex-1\">{section.label}</span>\n {section.badge != null && section.badge > 0 && (\n <span className=\"inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-indigo-100 px-1.5 text-[10px] font-bold text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300\">{section.badge}</span>\n )}\n </button>\n )\n })}\n </div>\n </div>\n ))}\n </nav>\n )}\n {/* spacer pushes footer to bottom when nav is hidden */}\n {sidebar.sections.length === 0 && <div className=\"relative flex-1\" />}\n {sidebar.footer && <div className=\"relative mt-4 px-5\">{sidebar.footer}</div>}\n </aside>\n <section className=\"relative flex min-h-0 flex-1 flex-col\">\n {gradient ? <div className=\"hidden lg:block\"><AccentBar gradient={gradient} /></div> : <div className=\"absolute inset-x-6 top-0 h-px bg-gradient-to-r from-transparent via-white/50 to-transparent dark:via-white/10\" />}\n <div className={`flex min-h-0 flex-1 flex-col overflow-y-auto px-6 sm:px-8 lg:px-10 ${gradient ? 'pt-8' : 'pt-16'} ${footer ? 'pb-4' : 'pb-8 lg:pb-10'}`}>\n {children}\n </div>\n {footer && <div className=\"border-t border-white/20 px-6 py-4 dark:border-white/10 sm:px-8 lg:px-10\">{footer}</div>}\n </section>\n <CloseBtn onClick={onClose} label={closeLabel} />\n </div>\n )\n}\n\n// ════════════════════════════════════════════════════════════════════════\n// Main Component\n// ════════════════════════════════════════════════════════════════════════\n\nexport function GlassModal({\n open, onClose, gradient, icon, label, title, subtitle, headerActions,\n children, footer, onSubmit, showFormFooter, cancelLabel, submitLabel,\n isLoading = false, submitDisabled = false, sidebar,\n maxWidth = '4xl', closeLabel = 'Close', className = '', zIndex = 'z-50',\n panelClassName, contentClassName, overlayTestId, panelTestId,\n}: GlassModalProps) {\n const hasTitle = !!title\n\n // Detect <GlassModal.Sidebar> subcomponent child\n const sidebarElement = Children.toArray(children).find(\n (c) => isValidElement(c) && isSlotType(c as ReactElement, SIDEBAR_TYPE)\n ) as ReactElement<SidebarProps> | undefined\n\n // Detect <GlassModal.Footer> child\n const footerElement = findSlot(children, FOOTER_TYPE)\n const nonSlotChildren = filterNonSlots(children)\n\n const resolvedFooter = footer ?? (footerElement ? (footerElement.props as { children: ReactNode }).children : undefined) ?? (showFormFooter ? (\n <div className=\"flex flex-col sm:flex-row justify-end gap-2 sm:gap-3\">\n <Button type=\"button\" onClick={onClose} disabled={isLoading} outline className=\"w-full sm:w-auto\" data-testid=\"form-modal-cancel\">\n {cancelLabel ?? 'Cancel'}\n </Button>\n <Button type=\"submit\" disabled={submitDisabled} loading={isLoading} loadingText={submitLabel} color=\"ios-glass-blue\" className=\"w-full sm:w-auto\" data-testid=\"form-modal-submit\">\n {submitLabel ?? 'Save'}\n </Button>\n </div>\n ) : undefined)\n\n const handleSubmit = useCallback((event: FormEvent) => { event.preventDefault(); onSubmit?.(event) }, [onSubmit])\n\n // ── BARE variant ──\n if (!hasTitle) {\n return (\n <Dialog open={open} onClose={onClose} className={`relative ${zIndex}`}>\n <DialogBackdrop className=\"fixed inset-0 bg-slate-900/40 backdrop-blur-md dark:bg-black/50\" data-testid={overlayTestId} />\n <div className={contentClassName ?? 'fixed inset-0 flex items-center justify-center overflow-y-auto p-3 sm:p-5 lg:p-6'}>\n <DialogPanel className={panelClassName ?? 'rounded-2xl'} data-testid={panelTestId}>{children}</DialogPanel>\n </div>\n </Dialog>\n )\n }\n\n // ── SIDEBAR variant (prop-based) ──\n if (sidebar && !sidebarElement) {\n return (\n <Dialog open={open} onClose={onClose} className={`relative ${zIndex}`} aria-labelledby=\"modal-title\">\n <DialogBackdrop className=\"fixed inset-0 bg-slate-900/40 backdrop-blur-md dark:bg-black/50\" data-testid={overlayTestId} />\n <div className=\"fixed inset-0 flex items-center justify-center overflow-y-auto p-2 sm:p-4 lg:p-6\">\n <DialogPanel className={`w-full max-w-[90vw] xl:max-w-[1400px] overflow-hidden rounded-2xl liquid-surface-strong shadow-[0_40px_100px_-30px_rgba(0,0,0,0.55)] ${className}`} data-testid={panelTestId}>\n <PropBasedSidebarLayout\n sidebar={sidebar} gradient={gradient} icon={icon} label={label}\n title={title!} subtitle={subtitle} onClose={onClose} closeLabel={closeLabel}\n footer={resolvedFooter}\n >\n {nonSlotChildren}\n </PropBasedSidebarLayout>\n </DialogPanel>\n </div>\n </Dialog>\n )\n }\n\n // ── SIDEBAR variant (subcomponent-based) ──\n if (sidebarElement) {\n return (\n <Dialog open={open} onClose={onClose} className={`relative ${zIndex}`} aria-labelledby=\"modal-title\">\n <DialogBackdrop className=\"fixed inset-0 bg-slate-900/40 backdrop-blur-md dark:bg-black/50\" data-testid={overlayTestId} />\n <div className=\"fixed inset-0 flex items-center justify-center overflow-y-auto p-2 sm:p-4 lg:p-6\">\n <DialogPanel className={`w-full max-w-[90vw] xl:max-w-[1400px] overflow-hidden rounded-2xl liquid-surface-strong shadow-[0_40px_100px_-30px_rgba(0,0,0,0.55)] ${className}`} data-testid={panelTestId}>\n <SidebarLayout\n sidebarElement={sidebarElement}\n gradient={gradient} icon={icon} label={label}\n title={title!} subtitle={subtitle}\n onClose={onClose} closeLabel={closeLabel}\n footer={resolvedFooter} className=\"\"\n />\n </DialogPanel>\n </div>\n </Dialog>\n )\n }\n\n // ── STANDARD / FORM variant ──\n const inner = (\n <>\n {gradient && <AccentBar gradient={gradient} />}\n <div className=\"relative px-5 pb-4 pt-5 sm:px-8 sm:pt-6\">\n <CloseBtn onClick={onClose} label={closeLabel} />\n {(icon || label) && (\n <div className=\"mb-2 flex items-center gap-2 text-slate-600 dark:text-white/70\">\n {icon}\n {label && <span className=\"text-sm font-medium\">{label}</span>}\n </div>\n )}\n <div className=\"flex flex-wrap items-start justify-between gap-3 pr-10\">\n <div>\n <h2 id=\"modal-title\" data-testid=\"modal-title\" className=\"text-xl font-semibold tracking-tight text-slate-950 dark:text-white sm:text-2xl\">{title}</h2>\n {subtitle && <p className=\"mt-1 text-sm text-slate-600 dark:text-slate-300\">{subtitle}</p>}\n </div>\n {headerActions && <div className=\"flex items-center gap-2\">{headerActions}</div>}\n </div>\n </div>\n <div className=\"max-h-[72vh] overflow-y-auto px-5 pb-5 sm:px-8 sm:pb-8\">{nonSlotChildren}</div>\n {resolvedFooter && (\n <div data-testid=\"modal-footer\" className=\"border-t border-white/20 px-5 py-4 dark:border-white/10 sm:px-8\">{resolvedFooter}</div>\n )}\n </>\n )\n\n return (\n <Dialog open={open} onClose={onClose} className={`relative ${zIndex}`} aria-labelledby=\"modal-title\">\n <DialogBackdrop className=\"fixed inset-0 bg-slate-900/40 backdrop-blur-md dark:bg-black/50\" data-testid={overlayTestId} />\n <div className=\"fixed inset-0 overflow-y-auto p-3 sm:p-6\">\n <DialogPanel className={`liquid-surface-strong w-full overflow-hidden rounded-2xl mx-auto mt-[4vh] sm:mt-[8vh] ${SIZE_CLASSES[maxWidth]} ${className}`} data-testid={panelTestId}>\n {onSubmit ? <form onSubmit={handleSubmit}>{inner}</form> : inner}\n </DialogPanel>\n </div>\n </Dialog>\n )\n}\n\n// ════════════════════════════════════════════════════════════════════════\n// Attach subcomponents\n// ════════════════════════════════════════════════════════════════════════\n\nGlassModal.Sidebar = Sidebar\nGlassModal.Section = Section\nGlassModal.Group = Group\nGlassModal.Identity = Identity\nGlassModal.SidebarFooter = SidebarFooterSlot\nGlassModal.Footer = FooterSlot\n","import clsx from 'clsx'\nimport { Link } from '@ui/components/link'\n\nexport function Text({ className, ...props }: React.ComponentPropsWithoutRef<'p'>) {\n return (\n <p\n data-slot=\"text\"\n {...props}\n className={clsx(className, 'text-base/6 text-zinc-500 sm:text-sm/6 dark:text-zinc-400')}\n />\n )\n}\n\nexport function TextLink({ className, ...props }: React.ComponentPropsWithoutRef<typeof Link>) {\n return (\n <Link\n {...props}\n className={clsx(\n className,\n 'text-zinc-950 underline decoration-zinc-950/50 data-hover:decoration-zinc-950 dark:text-white dark:decoration-white/50 dark:data-hover:decoration-white'\n )}\n />\n )\n}\n\nexport function Strong({ className, ...props }: React.ComponentPropsWithoutRef<'strong'>) {\n return <strong {...props} className={clsx(className, 'font-medium text-zinc-950 dark:text-white')} />\n}\n\nexport function Code({ className, ...props }: React.ComponentPropsWithoutRef<'code'>) {\n return (\n <code\n {...props}\n className={clsx(\n className,\n 'rounded-xs border border-zinc-950/10 bg-zinc-950/2.5 px-0.5 text-sm font-medium text-zinc-950 sm:text-[0.8125rem] dark:border-white/20 dark:bg-white/5 dark:text-white'\n )}\n />\n )\n}\n","import type React from 'react'\n\nimport * as Headless from '@headlessui/react'\nimport clsx from 'clsx'\n\nimport { Text } from '@ui/components/text'\n\nconst sizes = {\n xs: 'sm:max-w-xs',\n sm: 'sm:max-w-sm',\n md: 'sm:max-w-md',\n lg: 'sm:max-w-lg',\n xl: 'sm:max-w-xl',\n '2xl': 'sm:max-w-2xl',\n '3xl': 'sm:max-w-3xl',\n '4xl': 'sm:max-w-4xl',\n '5xl': 'sm:max-w-5xl',\n}\n\nexport function Dialog({\n size = 'lg',\n className,\n children,\n ...props\n}: {\n size?: keyof typeof sizes\n className?: string\n children: React.ReactNode\n} & Omit<Headless.DialogProps, 'as' | 'className'>) {\n return (\n <Headless.Dialog {...props}>\n <Headless.DialogBackdrop\n transition\n className=\"fixed inset-0 flex w-screen justify-center overflow-y-auto bg-slate-950/25 backdrop-blur-sm px-2 py-2 transition duration-100 focus:outline-0 data-closed:opacity-0 data-enter:ease-out data-leave:ease-in sm:px-6 sm:py-8 lg:px-8 lg:py-16 dark:bg-slate-950/50\"\n />\n\n <div className=\"fixed inset-0 w-screen overflow-y-auto pt-6 sm:pt-0\">\n <div className=\"grid min-h-full grid-rows-[1fr_auto] justify-items-center sm:grid-rows-[1fr_auto_3fr] sm:p-4\">\n <Headless.DialogPanel\n transition\n className={clsx(\n className,\n sizes[size],\n 'row-start-2 w-full min-w-0 rounded-t-3xl bg-white/80 backdrop-blur-2xl p-(--gutter) shadow-lg ring-1 ring-white/30 [--gutter:--spacing(8)] sm:mb-auto sm:rounded-2xl dark:bg-slate-900/80 dark:ring-white/10 forced-colors:outline',\n 'transition duration-100 will-change-transform data-closed:translate-y-12 data-closed:opacity-0 data-enter:ease-out data-leave:ease-in sm:data-closed:translate-y-0 sm:data-closed:data-enter:scale-95',\n )}\n >\n {children}\n </Headless.DialogPanel>\n </div>\n </div>\n </Headless.Dialog>\n )\n}\n\nexport function DialogTitle({\n className,\n ...props\n}: { className?: string } & Omit<Headless.DialogTitleProps, 'as' | 'className'>) {\n return (\n <Headless.DialogTitle\n {...props}\n className={clsx(\n className,\n 'text-lg/6 font-semibold text-balance text-slate-950 sm:text-base/6 dark:text-white',\n )}\n />\n )\n}\n\nexport function DialogDescription({\n className,\n ...props\n}: { className?: string } & Omit<Headless.DescriptionProps<typeof Text>, 'as' | 'className'>) {\n return (\n <Headless.Description\n as={Text}\n {...props}\n className={clsx(className, 'mt-2 text-pretty')}\n />\n )\n}\n\nexport function DialogBody({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<'div'>) {\n return <div {...props} className={clsx(className, 'mt-6')} />\n}\n\nexport function DialogActions({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={clsx(\n className,\n 'mt-8 flex flex-col-reverse items-center justify-end gap-3 *:w-full sm:flex-row sm:*:w-auto',\n )}\n />\n )\n}\n","export type ChipItemStyle = {\n bg: string\n text: string\n dotColor?: string\n}\n\nexport type ChipItem = {\n id: string\n name: string\n abbreviation?: string\n isActive?: boolean\n style: ChipItemStyle\n}\n\ntype ChipPickerProps = {\n items: ChipItem[]\n selectedIds: string[]\n onChange: (ids: string[]) => void\n isLoading?: boolean\n showActions?: boolean\n loadingLabel?: string\n selectedLabel?: string\n selectAllLabel?: string\n clearLabel?: string\n emptyLabel?: string\n}\n\nexport function ChipPicker({\n items,\n selectedIds,\n onChange,\n isLoading = false,\n showActions = true,\n loadingLabel = \"Loading...\",\n selectedLabel = \"selected\",\n selectAllLabel = \"Select all\",\n clearLabel = \"Clear\",\n emptyLabel = \"No items configured\",\n}: ChipPickerProps) {\n const toggleItem = (itemId: string) => {\n if (selectedIds.includes(itemId)) {\n onChange(selectedIds.filter((id) => id !== itemId))\n } else {\n onChange([...selectedIds, itemId])\n }\n }\n\n const selectAll = () => {\n onChange(items.map((item) => item.id))\n }\n\n const clearAll = () => {\n onChange([])\n }\n\n if (isLoading) {\n return (\n <div className=\"p-4 text-center text-sm text-gray-500 dark:text-gray-400\">\n {loadingLabel}\n </div>\n )\n }\n\n return (\n <div className=\"space-y-3\">\n {showActions && (\n <div className=\"flex items-center justify-between\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n {selectedIds.length} {selectedLabel}\n </p>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={selectAll}\n className=\"text-xs text-blue-500 hover:text-blue-400 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:rounded\"\n >\n {selectAllLabel}\n </button>\n <span className=\"text-gray-400 dark:text-gray-500\">|</span>\n <button\n type=\"button\"\n onClick={clearAll}\n className=\"text-xs text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:rounded\"\n >\n {clearLabel}\n </button>\n </div>\n </div>\n )}\n\n <div className=\"flex flex-wrap gap-2\">\n {items.map((item) => {\n const isSelected = selectedIds.includes(item.id)\n const { style } = item\n\n return (\n <label\n key={item.id}\n className={`inline-flex cursor-pointer items-center gap-2 rounded-full border px-3 py-1.5 text-xs font-medium transition ${\n isSelected\n ? `${style.bg} ${style.text} border-transparent ring-2 ring-offset-1 ring-current`\n : 'border-gray-200 bg-white/70 text-gray-700 hover:border-gray-300 dark:border-white/10 dark:bg-white/5 dark:text-gray-200'\n }`}\n >\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={() => toggleItem(item.id)}\n className=\"sr-only\"\n />\n <span className={`inline-flex h-2 w-2 rounded-full ${isSelected ? 'bg-current opacity-70' : style.bg}`} />\n {item.abbreviation ? `${item.abbreviation} - ${item.name}` : item.name}\n </label>\n )\n })}\n </div>\n\n {items.length === 0 && (\n <div className=\"p-6 text-center text-sm text-gray-500 dark:text-gray-400\">\n {emptyLabel}\n </div>\n )}\n </div>\n )\n}\n","import { useState } from 'react'\nimport { ClipboardDocumentIcon, ClipboardDocumentCheckIcon } from '@heroicons/react/24/outline'\nimport { useTranslations } from '@ui/lib/i18n-context'\n\ninterface CopyableIdProps {\n id: string\n copyValue?: string\n label?: string\n className?: string\n}\n\nconst DEFAULT_COPYABLE_CLASSNAME = 'liquid-surface-strong text-gray-500 dark:text-gray-400'\n\nexport function CopyableId({ id, copyValue, label, className }: CopyableIdProps) {\n const t = useTranslations()\n const [copied, setCopied] = useState(false)\n\n const valueToCopy = copyValue ?? id\n\n const handleCopy = async (e: React.MouseEvent | React.KeyboardEvent) => {\n e.stopPropagation()\n try {\n await navigator.clipboard.writeText(valueToCopy)\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n } catch {\n // Silently fail if clipboard API is not available\n }\n }\n\n const displayId = id.length > 8 ? `${id.slice(0, 8)}...` : id\n\n return (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={handleCopy}\n onKeyDown={(e) => e.key === 'Enter' && handleCopy(e)}\n title={`${t('common.copy')}: ${id}`}\n className={`inline-flex items-center gap-1.5 px-3 py-1 text-xs font-medium rounded-full transition-all duration-200 cursor-pointer hover:opacity-80 ${\n copied\n ? 'bg-emerald-500/20 text-emerald-600 dark:text-emerald-400'\n : className ?? DEFAULT_COPYABLE_CLASSNAME\n }`}\n >\n {copied ? (\n <>\n <ClipboardDocumentCheckIcon className=\"h-3 w-3\" />\n <span>{t('common.copied')}</span>\n </>\n ) : (\n <>\n {label && <span className=\"opacity-70\">{label}:</span>}\n <span className=\"font-mono\">{displayId}</span>\n <ClipboardDocumentIcon className=\"h-3 w-3 opacity-50\" />\n </>\n )}\n </span>\n )\n}\n","import type { ReactNode } from 'react'\n\ninterface FeedItemCardProps {\n children: ReactNode\n className?: string\n}\n\nexport function FeedItemCard({ children, className = '' }: FeedItemCardProps) {\n return (\n <li className={`liquid-surface overflow-hidden rounded-2xl transition-shadow hover:shadow-md ${className}`}>\n {children}\n </li>\n )\n}\n","import { useEffect, useRef } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport type ContextMenuItem = {\n type?: 'item'\n key: string\n label: string\n icon?: React.ComponentType<{ className?: string }>\n onClick: () => void\n danger?: boolean\n disabled?: boolean\n testId?: string\n}\n\nexport type ContextMenuDivider = {\n type: 'divider'\n key: string\n}\n\nexport type ContextMenuEntry = ContextMenuItem | ContextMenuDivider\n\ntype ContextMenuProps = {\n position: { x: number; y: number }\n onClose: () => void\n entries: ContextMenuEntry[]\n minWidthClass?: string\n testId?: string\n}\n\nexport function ContextMenu({\n position,\n onClose,\n entries,\n minWidthClass = 'min-w-[180px]',\n testId,\n}: ContextMenuProps) {\n const menuRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(event.target as HTMLElement)) {\n onClose()\n }\n }\n\n function handleEscapeKey(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n onClose()\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n document.addEventListener('keydown', handleEscapeKey)\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n document.removeEventListener('keydown', handleEscapeKey)\n }\n }, [onClose])\n\n return createPortal(\n <div\n ref={menuRef}\n className={`liquid-surface-strong fixed z-[9999] ${minWidthClass} rounded-xl py-1 shadow-lg`}\n style={{ left: position.x, top: position.y }}\n data-testid={testId}\n >\n {entries.map((entry) => {\n if (entry.type === 'divider') {\n return <div key={entry.key} className=\"my-1 border-t liquid-divider\" />\n }\n\n const IconComponent = entry.icon\n return (\n <button\n key={entry.key}\n type=\"button\"\n onClick={entry.onClick}\n disabled={entry.disabled}\n className={`flex w-full items-center gap-2.5 px-3 py-2 text-left text-sm transition-colors duration-150 focus:outline-none focus-visible:bg-indigo-500/10 focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-indigo-500/40 ${\n entry.disabled\n ? 'cursor-not-allowed text-slate-400 dark:text-slate-600'\n : entry.danger\n ? 'text-red-600 hover:bg-red-500/10 dark:text-red-400 dark:hover:bg-red-500/15'\n : 'text-slate-700 hover:bg-white/45 dark:text-slate-200 dark:hover:bg-white/[0.07]'\n }`}\n data-testid={entry.testId}\n >\n {IconComponent ? <IconComponent className=\"h-4 w-4\" /> : null}\n <span>{entry.label}</span>\n </button>\n )\n })}\n </div>,\n document.body\n )\n}\n","import { useState, useMemo, useCallback } from 'react'\nimport * as Popover from '@radix-ui/react-popover'\nimport { CalendarDaysIcon, ChevronLeftIcon, ChevronRightIcon } from '@heroicons/react/24/outline'\nimport {\n format,\n startOfMonth,\n endOfMonth,\n eachDayOfInterval,\n isSameMonth,\n isSameDay,\n isAfter,\n startOfDay,\n getDay,\n addMonths,\n subMonths,\n} from 'date-fns'\nimport { ptBR, enUS, es, fr } from 'date-fns/locale'\nimport { useLocale, useTranslations } from '@ui/lib/i18n-context'\nimport type { Locale } from 'date-fns'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface DatePickerProps {\n value: Date | null\n onChange: (date: Date | null) => void\n placeholder?: string\n disableFuture?: boolean\n className?: string\n}\n\ntype ViewMode = 'days' | 'year-month'\n\n// ---------------------------------------------------------------------------\n// Locale map\n// ---------------------------------------------------------------------------\n\nconst dateFnsLocales: Record<string, Locale> = {\n 'pt-BR': ptBR,\n en: enUS,\n es: es,\n fr: fr,\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getLocalizedDayNames(locale: Locale): string[] {\n // Build abbreviated day names starting from locale-aware week start\n const baseDate = new Date(2024, 0, 7) // Sunday\n return Array.from({ length: 7 }, (_, i) => {\n const d = new Date(baseDate)\n d.setDate(baseDate.getDate() + i)\n return format(d, 'EEEEEE', { locale })\n })\n}\n\nfunction getLocalizedMonthNames(locale: Locale): string[] {\n return Array.from({ length: 12 }, (_, i) => {\n const date = new Date(2024, i, 1)\n return format(date, 'MMM', { locale })\n })\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function DatePicker({\n value,\n onChange,\n placeholder,\n disableFuture = false,\n className = '',\n}: DatePickerProps) {\n const appLocale = useLocale()\n const t = useTranslations('datePicker')\n const dateFnsLocale = dateFnsLocales[appLocale] ?? ptBR\n\n const [open, setOpen] = useState(false)\n const [viewMode, setViewMode] = useState<ViewMode>('days')\n const [viewDate, setViewDate] = useState<Date>(() => value ?? new Date())\n\n const today = useMemo(() => startOfDay(new Date()), [])\n\n // Localised names\n const dayNames = useMemo(() => getLocalizedDayNames(dateFnsLocale), [dateFnsLocale])\n const monthNames = useMemo(() => getLocalizedMonthNames(dateFnsLocale), [dateFnsLocale])\n\n // Calendar grid days for the current viewDate month\n const calendarDays = useMemo(() => {\n const monthStart = startOfMonth(viewDate)\n const monthEnd = endOfMonth(viewDate)\n const days = eachDayOfInterval({ start: monthStart, end: monthEnd })\n\n // Pad leading blanks so the first day aligns to the correct weekday column\n // (week starts on Sunday = 0)\n const startDow = getDay(monthStart)\n const blanks: (Date | null)[] = Array.from<null>({ length: startDow }).fill(null)\n\n return [...blanks, ...days]\n }, [viewDate])\n\n // ---------------------------------------------------------------------------\n // Handlers\n // ---------------------------------------------------------------------------\n\n const handlePrevMonth = useCallback(() => {\n setViewDate((d) => subMonths(d, 1))\n }, [])\n\n const handleNextMonth = useCallback(() => {\n setViewDate((d) => addMonths(d, 1))\n }, [])\n\n const handleSelectDay = useCallback(\n (day: Date) => {\n onChange(day)\n setOpen(false)\n },\n [onChange],\n )\n\n const handleSelectMonth = useCallback((monthIndex: number) => {\n setViewDate((d) => {\n const next = new Date(d)\n next.setMonth(monthIndex)\n return next\n })\n setViewMode('days')\n }, [])\n\n const handleSelectYear = useCallback((year: number) => {\n setViewDate((d) => {\n const next = new Date(d)\n next.setFullYear(year)\n return next\n })\n }, [])\n\n const isDayDisabled = useCallback(\n (day: Date): boolean => {\n if (!disableFuture) return false\n return isAfter(startOfDay(day), today)\n },\n [disableFuture, today],\n )\n\n // Year range for the year-month picker\n const yearRange = useMemo(() => {\n const currentYear = new Date().getFullYear()\n const start = currentYear - 10\n const end = disableFuture ? currentYear : currentYear + 5\n return Array.from({ length: end - start + 1 }, (_, i) => start + i)\n }, [disableFuture])\n\n // Formatted trigger text\n const displayText = useMemo(() => {\n if (!value) return placeholder ?? t('selectDate')\n return format(value, 'PPP', { locale: dateFnsLocale })\n }, [value, placeholder, t, dateFnsLocale])\n\n const monthYearLabel = useMemo(\n () => format(viewDate, 'MMMM yyyy', { locale: dateFnsLocale }),\n [viewDate, dateFnsLocale],\n )\n\n // Reset view when popover opens\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (nextOpen) {\n setViewDate(value ?? new Date())\n setViewMode('days')\n }\n setOpen(nextOpen)\n },\n [value],\n )\n\n // ---------------------------------------------------------------------------\n // Render\n // ---------------------------------------------------------------------------\n\n return (\n <Popover.Root open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className={`liquid-surface flex items-center gap-2 rounded-xl px-4 h-[44px] text-sm text-slate-900 dark:text-white hover:bg-white/30 dark:hover:bg-white/[0.06] focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1 transition-colors ${className}`}\n >\n <CalendarDaysIcon className=\"h-4 w-4 text-indigo-500\" />\n <span className=\"capitalize whitespace-nowrap\">{displayText}</span>\n </button>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n className=\"liquid-surface-strong z-50 w-[310px] rounded-2xl p-4 animate-in fade-in-0 zoom-in-95\"\n sideOffset={8}\n align=\"start\"\n >\n {viewMode === 'days' ? (\n <>\n {/* Month / Year Header */}\n <div className=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n onClick={handlePrevMonth}\n aria-label={t('previousMonth')}\n className=\"p-1.5 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n >\n <ChevronLeftIcon className=\"h-5 w-5 text-gray-500 dark:text-gray-400\" />\n </button>\n\n <button\n type=\"button\"\n onClick={() => setViewMode('year-month')}\n className=\"px-3 py-1 rounded-lg font-semibold text-gray-900 dark:text-white hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors capitalize\"\n >\n {monthYearLabel}\n </button>\n\n <button\n type=\"button\"\n onClick={handleNextMonth}\n aria-label={t('nextMonth')}\n className=\"p-1.5 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n >\n <ChevronRightIcon className=\"h-5 w-5 text-gray-500 dark:text-gray-400\" />\n </button>\n </div>\n\n {/* Day names header */}\n <div className=\"grid grid-cols-7 gap-0.5 mb-1\">\n {dayNames.map((name, i) => (\n <div\n key={`${name}-${i}`}\n className=\"text-center text-xs font-medium text-gray-400 dark:text-gray-500 uppercase py-1\"\n >\n {name}\n </div>\n ))}\n </div>\n\n {/* Day grid */}\n <div className=\"grid grid-cols-7 gap-0.5\">\n {calendarDays.map((day, index) => {\n if (!day) {\n return <div key={`blank-${index}`} className=\"h-9\" />\n }\n\n const isSelected = value ? isSameDay(day, value) : false\n const isToday = isSameDay(day, today)\n const isCurrentMonth = isSameMonth(day, viewDate)\n const disabled = isDayDisabled(day)\n\n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n disabled={disabled}\n onClick={() => handleSelectDay(day)}\n className={`\n h-9 w-full rounded-lg text-sm font-medium transition-colors\n ${disabled ? 'text-gray-300 dark:text-gray-600 cursor-not-allowed' : ''}\n ${!disabled && !isSelected && isCurrentMonth ? 'text-gray-800 dark:text-gray-200 hover:bg-indigo-500/10 hover:text-indigo-600 dark:hover:text-indigo-400' : ''}\n ${!disabled && !isSelected && !isCurrentMonth ? 'text-gray-400 dark:text-gray-500 hover:bg-gray-100 dark:hover:bg-gray-700' : ''}\n ${isSelected ? 'bg-indigo-500 text-white hover:bg-indigo-600' : ''}\n ${isToday && !isSelected ? 'ring-1 ring-indigo-400 dark:ring-indigo-500' : ''}\n `}\n >\n {format(day, 'd')}\n </button>\n )\n })}\n </div>\n\n {/* Today shortcut */}\n <div className=\"mt-3 pt-3 border-t border-gray-200/60 dark:border-gray-700/60 text-center\">\n <button\n type=\"button\"\n onClick={() => {\n if (!disableFuture || !isAfter(today, today)) {\n handleSelectDay(today)\n }\n }}\n className=\"text-xs font-medium text-indigo-500 hover:text-indigo-600 dark:text-indigo-400 dark:hover:text-indigo-300 transition-colors\"\n >\n {t('today')}\n </button>\n </div>\n </>\n ) : (\n <>\n {/* Year-Month Picker */}\n {/* Year selector */}\n <div className=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n onClick={() => handleSelectYear(viewDate.getFullYear() - 1)}\n aria-label={t('previousYear')}\n className=\"p-1.5 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n >\n <ChevronLeftIcon className=\"h-5 w-5 text-gray-500 dark:text-gray-400\" />\n </button>\n\n <span className=\"font-semibold text-lg text-gray-900 dark:text-white\">\n {viewDate.getFullYear()}\n </span>\n\n <button\n type=\"button\"\n onClick={() => handleSelectYear(viewDate.getFullYear() + 1)}\n aria-label={t('nextYear')}\n className=\"p-1.5 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors\"\n >\n <ChevronRightIcon className=\"h-5 w-5 text-gray-500 dark:text-gray-400\" />\n </button>\n </div>\n\n {/* Month grid */}\n <div className=\"grid grid-cols-3 gap-2\">\n {monthNames.map((name, index) => {\n const isSelectedMonth =\n value &&\n value.getMonth() === index &&\n value.getFullYear() === viewDate.getFullYear()\n\n const isFutureMonth =\n disableFuture &&\n (viewDate.getFullYear() > today.getFullYear() ||\n (viewDate.getFullYear() === today.getFullYear() && index > today.getMonth()))\n\n return (\n <button\n key={name}\n type=\"button\"\n disabled={isFutureMonth}\n onClick={() => handleSelectMonth(index)}\n className={`\n px-2 py-2.5 text-sm rounded-lg transition-colors capitalize font-medium\n ${isFutureMonth ? 'text-gray-300 dark:text-gray-600 cursor-not-allowed' : ''}\n ${!isFutureMonth && isSelectedMonth ? 'bg-indigo-500 text-white' : ''}\n ${!isFutureMonth && !isSelectedMonth ? 'text-gray-700 dark:text-gray-200 hover:bg-indigo-500/10 hover:text-indigo-600 dark:hover:text-indigo-400' : ''}\n `}\n >\n {name}\n </button>\n )\n })}\n </div>\n\n {/* Year quick-jump */}\n <div className=\"mt-4 pt-3 border-t border-gray-200/60 dark:border-gray-700/60\">\n <div className=\"flex flex-wrap gap-1 justify-center\">\n {yearRange.slice(-7).map((year) => (\n <button\n key={year}\n type=\"button\"\n onClick={() => handleSelectYear(year)}\n className={`\n px-2 py-1 text-xs rounded-lg transition-colors\n ${viewDate.getFullYear() === year ? 'bg-indigo-100 dark:bg-indigo-900/50 text-indigo-700 dark:text-indigo-300 font-medium' : 'text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700'}\n `}\n >\n {year}\n </button>\n ))}\n </div>\n </div>\n\n {/* Back to days */}\n <div className=\"mt-3 text-center\">\n <button\n type=\"button\"\n onClick={() => setViewMode('days')}\n className=\"text-xs font-medium text-indigo-500 hover:text-indigo-600 dark:text-indigo-400 dark:hover:text-indigo-300 transition-colors\"\n >\n {t('backToDays')}\n </button>\n </div>\n </>\n )}\n\n <Popover.Arrow className=\"fill-white/70 dark:fill-gray-800/70\" />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n","import { useState, useMemo, useCallback, useRef, useEffect } from 'react'\nimport * as Popover from '@radix-ui/react-popover'\nimport { ClockIcon, CheckIcon } from '@heroicons/react/24/outline'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { startOfDay, isSameDay } from 'date-fns'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface TimeValue {\n hours: number\n minutes: number\n}\n\ninterface TimePickerProps {\n value: TimeValue | null\n onChange: (time: TimeValue) => void\n selectedDate?: Date | null\n placeholder?: string\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max)\n}\n\nfunction padTwo(n: number): string {\n return String(n).padStart(2, '0')\n}\n\nfunction isFutureTime(hours: number, minutes: number): boolean {\n const now = new Date()\n if (hours > now.getHours()) return true\n if (hours === now.getHours() && minutes > now.getMinutes()) return true\n return false\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function TimePicker({\n value,\n onChange,\n selectedDate,\n placeholder,\n className = '',\n}: TimePickerProps) {\n const t = useTranslations('timePicker')\n\n const [open, setOpen] = useState(false)\n const [draftHours, setDraftHours] = useState<number>(value ? value.hours : 0)\n const [draftMinutes, setDraftMinutes] = useState<number>(value ? value.minutes : 0)\n\n const hoursRef = useRef<HTMLInputElement>(null)\n\n // Determine if selectedDate is today (for future-time validation)\n const isToday = useMemo(() => {\n if (!selectedDate) return false\n return isSameDay(startOfDay(selectedDate), startOfDay(new Date()))\n }, [selectedDate])\n\n // Validation: is the current draft a future time?\n const isFuture = useMemo(() => {\n if (!isToday) return false\n return isFutureTime(draftHours, draftMinutes)\n }, [isToday, draftHours, draftMinutes])\n\n // Display text for the trigger button\n const displayText = useMemo(() => {\n if (!value) return placeholder ?? t('selectTime')\n return `${padTwo(value.hours)}:${padTwo(value.minutes)}`\n }, [value, placeholder, t])\n\n // Sync draft state when popover opens\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (nextOpen) {\n setDraftHours(value ? value.hours : 0)\n setDraftMinutes(value ? value.minutes : 0)\n // Auto-focus hours input after open\n setTimeout(() => hoursRef.current?.focus(), 50)\n }\n setOpen(nextOpen)\n },\n [value],\n )\n\n // Focus hours input on open\n useEffect(() => {\n if (open) {\n setTimeout(() => hoursRef.current?.select(), 80)\n }\n }, [open])\n\n // Handlers\n const handleHoursChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value.replace(/\\D/g, '')\n if (raw === '') {\n setDraftHours(0)\n return\n }\n setDraftHours(clamp(parseInt(raw, 10), 0, 23))\n }, [])\n\n const handleMinutesChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value.replace(/\\D/g, '')\n if (raw === '') {\n setDraftMinutes(0)\n return\n }\n setDraftMinutes(clamp(parseInt(raw, 10), 0, 59))\n }, [])\n\n const handleConfirm = useCallback(() => {\n if (isFuture) return\n onChange({ hours: draftHours, minutes: draftMinutes })\n setOpen(false)\n }, [draftHours, draftMinutes, isFuture, onChange])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n handleConfirm()\n }\n },\n [handleConfirm],\n )\n\n // ---------------------------------------------------------------------------\n // Render\n // ---------------------------------------------------------------------------\n\n return (\n <Popover.Root open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className={`liquid-surface flex items-center gap-2 text-sm rounded-xl px-4 h-[44px] text-slate-900 dark:text-white hover:bg-white/30 dark:hover:bg-white/[0.06] focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1 transition-colors duration-200 ${className}`}\n >\n <ClockIcon className=\"h-4 w-4 text-indigo-500\" />\n <span className=\"whitespace-nowrap font-mono\">{displayText}</span>\n </button>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n className=\"liquid-surface-strong z-50 w-[220px] rounded-2xl p-5 shadow-xl animate-in fade-in-0 zoom-in-95\"\n sideOffset={8}\n align=\"start\"\n >\n {/* Time Label */}\n <p className=\"text-xs font-medium text-slate-600 dark:text-slate-300 mb-3 text-center uppercase tracking-wide\">\n {t('setTime')}\n </p>\n\n {/* Hour : Minute Inputs */}\n <div className=\"flex items-center justify-center gap-2\">\n {/* Hours */}\n <div className=\"flex flex-col items-center\">\n <label\n htmlFor=\"time-picker-hours\"\n className=\"text-[10px] font-medium text-slate-500 dark:text-slate-400 mb-1 uppercase\"\n >\n {t('hours')}\n </label>\n <input\n ref={hoursRef}\n id=\"time-picker-hours\"\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={2}\n value={padTwo(draftHours)}\n onChange={handleHoursChange}\n onKeyDown={handleKeyDown}\n aria-label={t('hours')}\n className=\"w-14 h-14 text-center text-2xl font-semibold rounded-xl bg-white/60 dark:bg-white/[0.08] text-slate-900 dark:text-white border border-white/40 dark:border-white/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1 transition-colors duration-200 backdrop-blur-md\"\n />\n </div>\n\n {/* Colon separator */}\n <span className=\"text-2xl font-bold text-slate-400 dark:text-slate-500 mt-4\">:</span>\n\n {/* Minutes */}\n <div className=\"flex flex-col items-center\">\n <label\n htmlFor=\"time-picker-minutes\"\n className=\"text-[10px] font-medium text-slate-500 dark:text-slate-400 mb-1 uppercase\"\n >\n {t('minutes')}\n </label>\n <input\n id=\"time-picker-minutes\"\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={2}\n value={padTwo(draftMinutes)}\n onChange={handleMinutesChange}\n onKeyDown={handleKeyDown}\n aria-label={t('minutes')}\n className=\"w-14 h-14 text-center text-2xl font-semibold rounded-xl bg-white/60 dark:bg-white/[0.08] text-slate-900 dark:text-white border border-white/40 dark:border-white/10 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1 transition-colors duration-200 backdrop-blur-md\"\n />\n </div>\n </div>\n\n {/* Future time warning */}\n {isFuture && (\n <p className=\"mt-2 text-xs text-red-500 dark:text-red-400 text-center\">\n {t('futureTimeNotAllowed')}\n </p>\n )}\n\n {/* Confirm Button */}\n <button\n type=\"button\"\n disabled={isFuture}\n onClick={handleConfirm}\n className={`\n mt-4 w-full flex items-center justify-center gap-2 h-10 rounded-xl text-sm font-medium transition-colors duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1\n ${isFuture\n ? 'bg-white/40 dark:bg-white/[0.06] text-slate-400 dark:text-slate-500 cursor-not-allowed border border-white/30 dark:border-white/10'\n : 'bg-indigo-500 text-white hover:bg-indigo-600 active:bg-indigo-700 shadow-[inset_0_1px_1.5px_rgba(255,255,255,0.4)]'\n }\n `}\n >\n <CheckIcon className=\"h-4 w-4\" />\n {t('confirm')}\n </button>\n\n <Popover.Arrow className=\"fill-white/85 dark:fill-slate-900/85\" />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n","import { Link } from '@ui/components/link'\nimport { ChevronRightIcon } from '@heroicons/react/20/solid'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { HeroBlock } from '@ui/components/hero-block'\nimport type { ReactNode } from 'react'\n\nexport type BreadcrumbItem = {\n name: string\n href: string\n}\n\nexport type MetaItem = {\n icon: ReactNode\n text: string\n}\n\nexport type PageHeadingProps = {\n breadcrumbs?: BreadcrumbItem[]\n /** Optional uppercase eyebrow above the title (matches the modal\n * hero pattern — useful for \"WORKSPACE / WORKFLOWS\" style labels\n * that don't need the full breadcrumbs treatment). */\n eyebrow?: string\n title: string\n subtitle?: string\n icon?: ReactNode\n /** Optional gradient on the icon bubble (`from-X to-Y`). When\n * omitted, the bubble renders neutral / glassy. */\n iconGradient?: string\n meta?: MetaItem[]\n actions?: ReactNode\n}\n\nexport function PageHeading({\n breadcrumbs,\n eyebrow,\n title,\n subtitle,\n icon,\n iconGradient,\n meta,\n actions,\n}: PageHeadingProps) {\n const t = useTranslations('common')\n return (\n <div className=\"mb-6 lg:flex lg:items-start lg:justify-between\">\n <div className=\"min-w-0 flex-1\">\n {breadcrumbs?.length ? (\n <nav aria-label={t('breadcrumb')} className=\"mb-2\">\n <ol className=\"flex items-center gap-2 text-xs text-gray-500 dark:text-gray-400\">\n {breadcrumbs.map((crumb, index) => (\n <li key={`${crumb.href}-${crumb.name}`} className=\"flex items-center gap-2\">\n {index > 0 ? <ChevronRightIcon className=\"h-4 w-4\" aria-hidden=\"true\" /> : null}\n <Link href={crumb.href} className=\"hover:text-gray-800 dark:hover:text-white\">\n {crumb.name}\n </Link>\n </li>\n ))}\n </ol>\n </nav>\n ) : null}\n\n <HeroBlock\n eyebrow={eyebrow}\n icon={icon}\n gradient={iconGradient}\n title={title}\n subtitle={subtitle}\n headingLevel=\"h1\"\n />\n\n {meta?.length ? (\n <div className=\"mt-3 flex flex-wrap items-center gap-3 text-xs text-gray-500 dark:text-gray-400\">\n {meta.map((item, index) => (\n <div key={`${item.text}-${index}`} className=\"inline-flex items-center gap-1.5\">\n {item.icon}\n <span>{item.text}</span>\n </div>\n ))}\n </div>\n ) : null}\n </div>\n\n {actions ? <div className=\"mt-4 lg:ml-4 lg:mt-0\">{actions}</div> : null}\n </div>\n )\n}\n","import type { InputHTMLAttributes, TextareaHTMLAttributes, SelectHTMLAttributes, ReactNode } from 'react'\nimport { useId } from 'react'\n\ntype InputSize = 'sm' | 'md' | 'lg'\n\nexport type BaseFormFieldProps = {\n label?: string\n error?: string\n hint?: string\n required?: boolean\n icon?: ReactNode\n inputSize?: InputSize\n className?: string\n}\n\nexport type FormInputProps = BaseFormFieldProps &\n Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'size'> & {\n onValueChange?: (value: string) => void\n }\n\nexport type FormTextareaProps = BaseFormFieldProps &\n Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'onChange'> & {\n onValueChange?: (value: string) => void\n }\n\nexport type FormSelectProps = BaseFormFieldProps &\n Omit<SelectHTMLAttributes<HTMLSelectElement>, 'onChange' | 'size'> & {\n onValueChange?: (value: string) => void\n options: Array<{ value: string; label: string }>\n }\n\nconst sizeClasses: Record<InputSize, string> = {\n sm: 'h-9 px-3 text-sm',\n md: 'h-11 px-3.5 text-sm',\n lg: 'h-12 px-4 text-base',\n}\n\nconst labelClasses: Record<InputSize, string> = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-sm',\n}\n\nfunction wrapperClass(error?: string) {\n // Canonical focus ring: indigo-500/70 — same token Buttons,\n // Selects, SectionCards use. Error state swaps to red but keeps\n // the same ring geometry so the field doesn't reflow.\n return [\n 'liquid-surface w-full rounded-xl transition-colors duration-200',\n error\n ? 'focus-within:ring-2 focus-within:ring-red-500/60 focus-within:ring-offset-1'\n : 'focus-within:ring-2 focus-within:ring-indigo-500/70 focus-within:ring-offset-1',\n ].join(' ')\n}\n\nfunction FieldMeta({ hint, error, errorId, hintId }: { hint?: string; error?: string; errorId: string; hintId: string }) {\n if (!hint && !error) return null\n return (\n <p\n id={error ? errorId : hintId}\n className={`mt-1.5 text-xs ${error ? 'text-red-700 dark:text-red-300' : 'text-slate-600 dark:text-slate-300'}`}\n {...(error ? { role: 'alert', 'aria-live': 'polite' as const } : {})}\n >\n {error ?? hint}\n </p>\n )\n}\n\nexport function FormInput({\n label,\n error,\n hint,\n required,\n icon,\n inputSize = 'md',\n className = '',\n onValueChange,\n ...props\n}: FormInputProps) {\n const autoId = useId()\n const inputId = props.id ?? autoId\n const errorId = `${inputId}-error`\n const hintId = `${inputId}-hint`\n const describedBy = error ? errorId : hint ? hintId : undefined\n\n return (\n <div data-testid={label ? `field-${label.toLowerCase().replace(/\\s+/g, '-')}` : 'form-field'}>\n {label ? (\n <label htmlFor={inputId} className={`mb-1.5 block font-medium text-slate-700 dark:text-slate-300 ${labelClasses[inputSize]}`}>\n {label}\n {required ? <span className=\"ml-0.5 text-red-500\">*</span> : null}\n </label>\n ) : null}\n <div className={wrapperClass(error)}>\n <div className={`relative flex items-center ${sizeClasses[inputSize]} ${className}`}>\n {icon ? <span className=\"mr-2 text-gray-400 dark:text-gray-500\" aria-hidden=\"true\">{icon}</span> : null}\n <input\n {...props}\n id={inputId}\n required={required}\n aria-invalid={error ? true : false}\n aria-describedby={describedBy}\n className=\"w-full bg-transparent text-gray-900 placeholder:text-slate-500 focus:outline-none dark:text-white dark:placeholder:text-gray-500\"\n onChange={(event) => onValueChange?.(event.target.value)}\n />\n </div>\n </div>\n <FieldMeta hint={hint} error={error} errorId={errorId} hintId={hintId} />\n </div>\n )\n}\n\nexport function FormTextarea({\n label,\n error,\n hint,\n required,\n inputSize = 'md',\n className = '',\n onValueChange,\n ...props\n}: FormTextareaProps) {\n const autoId = useId()\n const inputId = props.id ?? autoId\n const errorId = `${inputId}-error`\n const hintId = `${inputId}-hint`\n const describedBy = error ? errorId : hint ? hintId : undefined\n\n return (\n <div data-testid={label ? `field-${label.toLowerCase().replace(/\\s+/g, '-')}` : 'form-field'}>\n {label ? (\n <label htmlFor={inputId} className={`mb-1.5 block font-medium text-slate-700 dark:text-slate-300 ${labelClasses[inputSize]}`}>\n {label}\n {required ? <span className=\"ml-0.5 text-red-500\">*</span> : null}\n </label>\n ) : null}\n <div className={wrapperClass(error)}>\n <textarea\n {...props}\n id={inputId}\n required={required}\n aria-invalid={error ? true : undefined}\n aria-describedby={describedBy}\n className={`w-full resize-y bg-transparent px-3.5 py-2.5 text-gray-900 placeholder:text-slate-500 focus:outline-none dark:text-white dark:placeholder:text-gray-500 ${className}`}\n onChange={(event) => onValueChange?.(event.target.value)}\n />\n </div>\n <FieldMeta hint={hint} error={error} errorId={errorId} hintId={hintId} />\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// FormPriceInput — currency-prefixed price input with size variants\n// ---------------------------------------------------------------------------\n\ntype PriceSize = 'sm' | 'md' | 'lg' | 'xl'\n\nexport type FormPriceInputProps = Omit<BaseFormFieldProps, 'icon'> & {\n value: string\n onValueChange?: (value: string) => void\n currencySymbol: string\n priceSize?: PriceSize\n step?: string\n placeholder?: string\n colorClass?: string\n disabled?: boolean\n min?: string | number\n max?: string | number\n className?: string\n}\n\nconst priceSizeConfig: Record<PriceSize, { input: string; symbol: string; padding: string }> = {\n sm: { input: 'h-9 text-sm font-semibold', symbol: 'text-xs left-3', padding: 'pl-7 pr-3' },\n md: { input: 'h-11 text-base font-semibold', symbol: 'text-sm font-bold left-3.5', padding: 'pl-10 pr-3.5' },\n lg: { input: 'h-14 text-xl font-bold', symbol: 'text-lg font-bold left-3.5', padding: 'pl-11 pr-4' },\n xl: { input: 'py-3 text-3xl font-bold', symbol: 'text-xl font-bold left-4', padding: 'pl-14 pr-4' },\n}\n\nfunction defaultPriceSize(inputSize: InputSize): PriceSize {\n if (inputSize === 'sm') return 'sm'\n if (inputSize === 'lg') return 'lg'\n return 'md'\n}\n\nexport function FormPriceInput({\n label,\n error,\n hint,\n required,\n inputSize = 'md',\n priceSize,\n currencySymbol,\n value,\n onValueChange,\n step = '0.01',\n placeholder = '0.00',\n colorClass,\n disabled,\n min,\n max,\n className = '',\n}: FormPriceInputProps) {\n const autoId = useId()\n const inputId = autoId\n const errorId = `${inputId}-error`\n const hintId = `${inputId}-hint`\n const describedBy = error ? errorId : hint ? hintId : undefined\n const sizes = priceSizeConfig[priceSize ?? defaultPriceSize(inputSize)]\n\n return (\n <div data-testid={label ? `field-${label.toLowerCase().replace(/\\s+/g, '-')}` : 'form-field'}>\n {label ? (\n <label htmlFor={inputId} className={`mb-1.5 block font-medium text-slate-700 dark:text-slate-300 ${labelClasses[inputSize]}`}>\n {label}\n {required ? <span className=\"ml-0.5 text-red-500\">*</span> : null}\n </label>\n ) : null}\n <div className={wrapperClass(error)}>\n <div className=\"relative\">\n <span\n className={`absolute top-1/2 -translate-y-1/2 text-gray-400 dark:text-gray-500 pointer-events-none select-none ${sizes.symbol}`}\n aria-hidden=\"true\"\n >\n {currencySymbol}\n </span>\n <input\n id={inputId}\n type=\"number\"\n step={step}\n value={value}\n onChange={(event) => onValueChange?.(event.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n min={min}\n max={max}\n aria-invalid={error ? true : false}\n aria-describedby={describedBy}\n aria-label={label ? `${label} in ${currencySymbol}` : undefined}\n className={`w-full bg-transparent tabular-nums ${sizes.input} ${sizes.padding} text-gray-900 placeholder:text-slate-500 focus:outline-none dark:text-white dark:placeholder:text-gray-500 ${colorClass ?? ''} ${className}`}\n />\n </div>\n </div>\n <FieldMeta hint={hint} error={error} errorId={errorId} hintId={hintId} />\n </div>\n )\n}\n\nexport function FormSelect({\n label,\n error,\n hint,\n required,\n inputSize = 'md',\n className = '',\n onValueChange,\n options,\n ...props\n}: FormSelectProps) {\n const autoId = useId()\n const inputId = props.id ?? autoId\n const errorId = `${inputId}-error`\n const hintId = `${inputId}-hint`\n const describedBy = error ? errorId : hint ? hintId : undefined\n\n return (\n <div data-testid={label ? `field-${label.toLowerCase().replace(/\\s+/g, '-')}` : 'form-field'}>\n {label ? (\n <label htmlFor={inputId} className={`mb-1.5 block font-medium text-slate-700 dark:text-slate-300 ${labelClasses[inputSize]}`}>\n {label}\n {required ? <span className=\"ml-0.5 text-red-500\">*</span> : null}\n </label>\n ) : null}\n <div className={wrapperClass(error)}>\n <select\n {...props}\n id={inputId}\n required={required}\n aria-invalid={error ? true : undefined}\n aria-describedby={describedBy}\n className={`w-full bg-transparent ${sizeClasses[inputSize]} text-gray-900 focus:outline-none dark:text-white ${className}`}\n onChange={(event) => onValueChange?.(event.target.value)}\n >\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n <FieldMeta hint={hint} error={error} errorId={errorId} hintId={hintId} />\n </div>\n )\n}\n","import React from 'react'\nimport clsx from 'clsx'\n\nexport type FormProps = React.FormHTMLAttributes<HTMLFormElement> & {\n children: React.ReactNode\n}\n\nexport const Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <form ref={ref} className={clsx(className)} {...props}>\n {children}\n </form>\n )\n }\n)\n\nForm.displayName = 'Form'\n\nexport type FormGridProps = React.HTMLAttributes<HTMLDivElement> & {\n children: React.ReactNode\n}\n\nexport const FormGrid = React.forwardRef<HTMLDivElement, FormGridProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div ref={ref} className={clsx('platform-form-grid', className)} {...props}>\n {children}\n </div>\n )\n }\n)\n\nFormGrid.displayName = 'FormGrid'\n\nexport type InlineFormProps = React.HTMLAttributes<HTMLDivElement> & {\n children: React.ReactNode\n}\n\nexport const InlineForm = React.forwardRef<HTMLDivElement, InlineFormProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div ref={ref} className={clsx('platform-inline-form', className)} {...props}>\n {children}\n </div>\n )\n }\n)\n\nInlineForm.displayName = 'InlineForm'\n\nexport type FormActionsRowProps = React.HTMLAttributes<HTMLDivElement> & {\n children: React.ReactNode\n}\n\nexport const FormActionsRow = React.forwardRef<HTMLDivElement, FormActionsRowProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div ref={ref} className={clsx('platform-form-actions', className)} {...props}>\n {children}\n </div>\n )\n }\n)\n\nFormActionsRow.displayName = 'FormActionsRow'\n","import clsx from 'clsx'\nimport { Button } from '@ui/components/button'\n\nexport type FormActionsProps = {\n cancelLabel: string\n saveLabel: string\n onCancel: () => void\n onSave: () => void\n saveDisabled?: boolean\n className?: string\n}\n\nexport function FormActions({\n cancelLabel,\n saveLabel,\n onCancel,\n onSave,\n saveDisabled = false,\n className,\n}: FormActionsProps) {\n return (\n <div className={clsx('flex justify-end gap-2 border-t border-gray-200 pt-4 dark:border-gray-700', className)}>\n <Button type=\"button\" outline onClick={onCancel}>\n {cancelLabel}\n </Button>\n <Button type=\"button\" onClick={onSave} disabled={saveDisabled}>\n {saveLabel}\n </Button>\n </div>\n )\n}\n","import { ToggleSwitch, type ToggleSwitchColor } from '@ui/components/toggle-switch'\n\n// FormToggle is the form-shaped wrapper around <ToggleSwitch>. Two\n// variants:\n// - `inline` — small label + switch in a row, no chrome (used inside\n// existing forms / settings groups)\n// - `card` — full liquid-surface tile (used as a standalone setting\n// in a list, e.g. \"Notificações\" with description)\n//\n// The actual switch is always ToggleSwitch (which ships role=\"switch\",\n// aria-checked, keyboard handler, focus-visible indigo ring). No\n// duplication of toggle physics here.\n\nexport type FormToggleProps = {\n checked: boolean\n onChange: (checked: boolean) => void\n label?: string\n /** Optional secondary copy (rendered below the label in `card`\n * variant; ignored in `inline` to keep the row compact). */\n description?: string\n disabled?: boolean\n color?: ToggleSwitchColor\n size?: 'sm' | 'md' | 'lg'\n variant?: 'inline' | 'card'\n}\n\nexport function FormToggle({\n checked,\n onChange,\n label,\n description,\n disabled = false,\n color = 'indigo',\n size = 'md',\n variant = 'inline',\n}: FormToggleProps) {\n if (variant === 'card') {\n return (\n <div className=\"liquid-surface flex items-start justify-between rounded-xl px-4 py-3 gap-4\">\n <div className=\"min-w-0 flex-1\">\n {label ? (\n <p className=\"text-sm font-medium text-slate-900 dark:text-white\">{label}</p>\n ) : null}\n {description ? (\n <p className=\"mt-0.5 text-xs text-slate-600 dark:text-slate-300\">{description}</p>\n ) : null}\n </div>\n <ToggleSwitch\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n color={color}\n size={size}\n label={label}\n />\n </div>\n )\n }\n\n return (\n <label className=\"inline-flex items-center gap-2.5\">\n <ToggleSwitch\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n color={color}\n size={size}\n label={label}\n />\n {label ? (\n <span className=\"text-sm text-slate-700 dark:text-slate-300\">{label}</span>\n ) : null}\n </label>\n )\n}\n","import { CheckIcon } from '@heroicons/react/24/solid'\n\nexport type FormCheckboxProps = {\n checked: boolean\n onChange: (checked: boolean) => void\n label: string\n description?: string\n disabled?: boolean\n}\n\n/**\n * Card-style checkbox — the whole row is the click target. Resting\n * state is a `liquid-surface`; checked state lifts to indigo-tinted\n * glass that matches Pagination's active page + StatusBadge info.\n * Indicator square is a glass tile, not a flat fill, so the visual\n * language stays consistent with the rest of the DS.\n */\nexport function FormCheckbox({ checked, onChange, label, description, disabled = false }: FormCheckboxProps) {\n return (\n <label\n className={`\n flex cursor-pointer items-start gap-3 rounded-xl px-3 py-2.5 transition\n ${checked\n ? 'liquid-surface ring-1 ring-inset ring-indigo-500/30 bg-indigo-500/10 dark:bg-indigo-500/15'\n : 'liquid-surface hover:bg-white/5'}\n ${disabled ? 'cursor-not-allowed opacity-50' : ''}\n focus-within:ring-2 focus-within:ring-indigo-500/70 focus-within:ring-offset-1\n `}\n >\n <input\n type=\"checkbox\"\n className=\"sr-only\"\n checked={checked}\n disabled={disabled}\n onChange={(event) => onChange(event.target.checked)}\n />\n {/* Indicator — glass tile with inner highlight when checked */}\n <span\n aria-hidden\n className={`\n mt-0.5 inline-flex h-4 w-4 shrink-0 items-center justify-center rounded\n transition-colors\n ${checked\n ? 'bg-indigo-500/85 text-white shadow-[inset_0_1px_1px_rgba(255,255,255,0.5)]'\n : 'border border-slate-300/80 bg-white/40 dark:border-white/15 dark:bg-white/5'}\n `}\n >\n {checked ? <CheckIcon className=\"h-3 w-3\" /> : null}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium text-slate-900 dark:text-white\">{label}</span>\n {description ? (\n <span className=\"mt-0.5 block text-xs text-slate-600 dark:text-slate-300\">{description}</span>\n ) : null}\n </span>\n </label>\n )\n}\n","import type { FormEvent, ReactNode } from 'react'\nimport { Button } from '@ui/components/button'\n\n// ---------------------------------------------------------------------------\n// Icon color presets\n// ---------------------------------------------------------------------------\n\nconst ICON_COLOR_CLASSES: Record<BaseFormIconColor, string> = {\n blue: 'bg-blue-500/10 dark:bg-blue-500/20 text-blue-600 dark:text-blue-400',\n violet: 'bg-violet-500/10 dark:bg-violet-500/20 text-violet-600 dark:text-violet-400',\n emerald: 'bg-emerald-500/10 dark:bg-emerald-500/20 text-emerald-600 dark:text-emerald-400',\n amber: 'bg-amber-500/10 dark:bg-amber-500/20 text-amber-600 dark:text-amber-400',\n rose: 'bg-rose-500/10 dark:bg-rose-500/20 text-rose-600 dark:text-rose-400',\n indigo: 'bg-indigo-500/10 dark:bg-indigo-500/20 text-indigo-600 dark:text-indigo-400',\n purple: 'bg-purple-500/10 dark:bg-purple-500/20 text-purple-600 dark:text-purple-400',\n red: 'bg-red-500/10 dark:bg-red-500/20 text-red-600 dark:text-red-400',\n green: 'bg-green-500/10 dark:bg-green-500/20 text-green-600 dark:text-green-400',\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type BaseFormIconColor =\n | 'blue'\n | 'violet'\n | 'emerald'\n | 'amber'\n | 'rose'\n | 'indigo'\n | 'purple'\n | 'red'\n | 'green'\n\nexport interface BaseFormProps {\n /** Icon element displayed in the header (e.g. a Heroicon) */\n icon?: ReactNode\n /** Preset color for the icon box background */\n iconColor?: BaseFormIconColor\n /** Custom className for the icon box (overrides iconColor) */\n iconClassName?: string\n /** Form title */\n title?: string\n /** Subtitle shown below the title */\n subtitle?: string\n\n /** Form submit handler */\n onSubmit: (event: FormEvent) => void\n /** Form content (FormInput, FormSelect, etc.) */\n children: ReactNode\n\n /** Label for the submit button */\n submitLabel: string\n /** Label for the cancel button (renders cancel button when provided alongside onCancel) */\n cancelLabel?: string\n /** Cancel callback — renders cancel button when provided */\n onCancel?: () => void\n /** Disables submit button and shows loading state */\n isLoading?: boolean\n /** Disables the submit button */\n submitDisabled?: boolean\n\n /** Show the header section (default: true) */\n showHeader?: boolean\n /** Show the footer buttons (default: true) */\n showFooter?: boolean\n\n /** Extra content rendered after the cancel button */\n footerExtra?: ReactNode\n\n /** Additional className on the <form> element */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function BaseForm({\n icon,\n iconColor = 'blue',\n iconClassName,\n title,\n subtitle,\n onSubmit,\n children,\n submitLabel,\n cancelLabel,\n onCancel,\n isLoading = false,\n submitDisabled = false,\n showHeader = true,\n showFooter = true,\n footerExtra,\n className,\n}: BaseFormProps) {\n const handleSubmit = (event: FormEvent) => {\n event.preventDefault()\n onSubmit(event)\n }\n\n const iconBoxClass =\n iconClassName ?? ICON_COLOR_CLASSES[iconColor]\n\n return (\n <form onSubmit={handleSubmit} className={className ?? 'space-y-5'}>\n {/* Header */}\n {showHeader && title && (\n <>\n <div className=\"flex items-center gap-3\">\n {icon && (\n <div\n className={`flex h-10 w-10 shrink-0 items-center justify-center rounded-xl ${iconBoxClass}`}\n >\n {icon}\n </div>\n )}\n <div>\n <h3 className=\"text-base font-semibold text-gray-900 dark:text-white\">\n {title}\n </h3>\n {subtitle && (\n <p className=\"mt-0.5 text-sm text-gray-500 dark:text-gray-400\">\n {subtitle}\n </p>\n )}\n </div>\n </div>\n <div className=\"h-px bg-gradient-to-r from-transparent via-gray-200/80 to-transparent dark:via-white/10\" />\n </>\n )}\n\n {/* Content */}\n {children}\n\n {/* Footer */}\n {showFooter && (\n <div className=\"flex gap-2 pt-4\">\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n disabled={isLoading || submitDisabled}\n >\n {isLoading && (\n <span className=\"h-4 w-4 animate-spin motion-reduce:animate-none rounded-full border-2 border-white border-t-transparent\" />\n )}\n {submitLabel}\n </Button>\n {onCancel && (\n <Button\n type=\"button\"\n outline\n onClick={onCancel}\n disabled={isLoading}\n >\n {cancelLabel ?? 'Cancel'}\n </Button>\n )}\n {footerExtra}\n </div>\n )}\n </form>\n )\n}\n","import { useState, type ReactNode } from 'react'\n\nexport interface ExpandableHistoryItem {\n id: string\n headerLeft: ReactNode\n headerRight?: ReactNode\n summary?: ReactNode\n details?: ReactNode\n}\n\nexport interface ExpandableHistoryListProps {\n items: ExpandableHistoryItem[]\n loadingLabel: string\n emptyLabel: string\n isLoading?: boolean\n className?: string\n}\n\nexport function ExpandableHistoryList({\n items,\n loadingLabel,\n emptyLabel,\n isLoading = false,\n className = 'space-y-3',\n}: ExpandableHistoryListProps) {\n const [expandedItemId, setExpandedItemId] = useState<string | null>(null)\n\n return (\n <div className={className}>\n {isLoading ? (\n <div className=\"py-6 text-center text-sm text-gray-500 dark:text-gray-400\">{loadingLabel}</div>\n ) : items.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-gray-500 dark:text-gray-400\">{emptyLabel}</div>\n ) : (\n items.map((item) => {\n const isExpanded = expandedItemId === item.id\n return (\n <div key={item.id} className=\"rounded-xl border border-gray-200/80 dark:border-gray-700/80\">\n <button\n type=\"button\"\n onClick={() =>\n setExpandedItemId((previousExpandedItemId) =>\n previousExpandedItemId === item.id ? null : item.id\n )\n }\n className=\"w-full px-4 py-3 text-left hover:bg-gray-50/80 dark:hover:bg-gray-800/40\"\n >\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2\">{item.headerLeft}</div>\n {item.headerRight ? (\n <div className=\"text-xs text-gray-500 dark:text-gray-400\">{item.headerRight}</div>\n ) : null}\n </div>\n {item.summary ? (\n <div className=\"mt-1 text-xs text-gray-500 dark:text-gray-400\">{item.summary}</div>\n ) : null}\n </button>\n\n {isExpanded && item.details ? (\n <div className=\"space-y-3 border-t border-gray-200/80 px-4 py-3 dark:border-gray-700/80\">\n {item.details}\n </div>\n ) : null}\n </div>\n )\n })\n )}\n </div>\n )\n}\n","import { FormCheckbox } from '@ui/components/form-checkbox'\n\nexport type BooleanFlagsPreset = {\n id: string\n label: string\n description?: string\n values: Record<string, boolean>\n}\n\nexport type BooleanFlagsPickerProps = {\n values: Record<string, boolean>\n onChange: (values: Record<string, boolean>) => void\n presets?: BooleanFlagsPreset[]\n selectedPresetId?: string | null\n onPresetChange?: (presetId: string | null) => void\n labels: Record<string, string>\n descriptions?: Record<string, string>\n}\n\nexport function BooleanFlagsPicker({\n values,\n onChange,\n presets = [],\n selectedPresetId,\n onPresetChange,\n labels,\n descriptions,\n}: BooleanFlagsPickerProps) {\n const keys = Object.keys(labels)\n\n return (\n <div className=\"space-y-4\">\n {presets.length > 0 ? (\n <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-2 lg:grid-cols-4\">\n {presets.map((preset) => {\n const isActive = preset.id === selectedPresetId\n return (\n <button\n key={preset.id}\n type=\"button\"\n onClick={() => {\n onChange({ ...preset.values })\n onPresetChange?.(preset.id)\n }}\n className={`rounded-xl border px-3 py-3 text-left transition ${\n isActive\n ? 'border-blue-400/70 bg-blue-50/80 dark:border-blue-500/45 dark:bg-blue-500/12'\n : 'border-white/60 bg-white/70 hover:bg-white/80 dark:border-white/12 dark:bg-white/5 dark:hover:bg-white/10'\n }`}\n >\n <p className=\"text-sm font-semibold text-gray-900 dark:text-white\">{preset.label}</p>\n {preset.description ? (\n <p className=\"mt-1 text-xs text-gray-500 dark:text-gray-400\">{preset.description}</p>\n ) : null}\n </button>\n )\n })}\n </div>\n ) : null}\n\n <div className=\"space-y-2\">\n {keys.map((key) => (\n <FormCheckbox\n key={key}\n checked={values[key]}\n onChange={(checked) => {\n onChange({ ...values, [key]: checked })\n onPresetChange?.(null)\n }}\n label={labels[key]}\n description={descriptions?.[key]}\n />\n ))}\n </div>\n </div>\n )\n}\n","import * as Popover from '@radix-ui/react-popover'\nimport type { ReactNode } from 'react'\nimport { InformationCircleIcon } from '@heroicons/react/24/outline'\n\nexport interface DetailsPopoverActor {\n avatarText: string\n primaryText: string\n secondaryText?: string\n}\n\nexport interface DetailsPopoverComparison {\n label: string\n fromLabel: string\n fromValue: string\n toLabel: string\n toValue: string\n icon?: ReactNode\n}\n\nexport interface DetailsPopoverNote {\n label: string\n value: string\n icon?: ReactNode\n}\n\nexport interface DetailsPopoverProps {\n triggerAriaLabel: string\n headerTitle: string\n headerIcon?: ReactNode\n headerClassName?: string\n actor?: DetailsPopoverActor\n timestamp?: string\n timestampIcon?: ReactNode\n comparison?: DetailsPopoverComparison\n note?: DetailsPopoverNote\n}\n\nexport function DetailsPopover({\n triggerAriaLabel,\n headerTitle,\n headerIcon,\n headerClassName = 'from-gray-50 to-slate-50 text-gray-700 dark:from-slate-800/70 dark:to-slate-800/20 dark:text-slate-200',\n actor,\n timestamp,\n timestampIcon,\n comparison,\n note,\n}: DetailsPopoverProps) {\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className=\"text-emerald-400 hover:text-emerald-300 focus:outline-hidden\"\n aria-label={triggerAriaLabel}\n >\n <InformationCircleIcon className=\"h-4 w-4\" />\n </button>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n className=\"liquid-surface-strong z-50 w-80 overflow-hidden rounded-xl shadow-xl animate-in fade-in-0 zoom-in-95\"\n sideOffset={5}\n align=\"center\"\n >\n <div className={`border-b liquid-divider bg-gradient-to-r px-4 py-3 ${headerClassName}`}>\n <div className=\"flex items-center gap-2\">\n {headerIcon}\n <span className=\"font-semibold\">{headerTitle}</span>\n </div>\n </div>\n\n <div className=\"space-y-4 p-4\">\n {actor ? (\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-indigo-500 to-purple-600 text-sm font-bold text-white shadow-xs\">\n {actor.avatarText}\n </div>\n <div>\n <p className=\"text-sm font-medium text-slate-900 dark:text-white\">{actor.primaryText}</p>\n {actor.secondaryText ? (\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{actor.secondaryText}</p>\n ) : null}\n </div>\n </div>\n ) : null}\n\n {timestamp ? (\n <div className=\"flex items-center gap-2 text-sm\">\n {timestampIcon}\n <span className=\"text-slate-600 dark:text-slate-300\">{timestamp}</span>\n </div>\n ) : null}\n\n {comparison ? (\n <div className=\"border-t liquid-divider pt-2\">\n <div className=\"mb-2 flex items-center gap-2\">\n {comparison.icon}\n <span className=\"text-xs font-medium uppercase tracking-wider text-amber-600 dark:text-amber-400\">\n {comparison.label}\n </span>\n </div>\n <div className=\"flex items-center justify-between text-sm\">\n <div>\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{comparison.fromLabel}</p>\n <p className=\"font-medium text-slate-400 line-through\">{comparison.fromValue}</p>\n </div>\n <div className=\"text-2xl text-slate-300 dark:text-slate-600\">→</div>\n <div>\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{comparison.toLabel}</p>\n <p className=\"font-bold text-emerald-600 dark:text-emerald-400\">{comparison.toValue}</p>\n </div>\n </div>\n </div>\n ) : null}\n\n {note ? (\n <div className=\"border-t liquid-divider pt-2\">\n <div className=\"flex items-start gap-2\">\n {note.icon}\n <div>\n <p className=\"mb-1 text-xs font-medium text-slate-500 dark:text-slate-400\">{note.label}</p>\n <p className=\"text-sm text-slate-700 dark:text-slate-300\">{note.value}</p>\n </div>\n </div>\n </div>\n ) : null}\n </div>\n\n <Popover.Arrow className=\"fill-white/85 dark:fill-slate-900/85\" />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n","import type { ReactNode } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { CheckIcon, XMarkIcon } from '@heroicons/react/24/outline'\nimport { Button } from '@ui/components/button'\n\nexport interface FormStep {\n id: string\n title: string\n description?: string\n icon?: ReactNode\n}\n\nexport interface StepFormPageProps {\n title: string\n subtitle?: string\n label: string\n icon: ReactNode\n gradient?: string\n steps: FormStep[]\n currentStep: number\n onStepChange: (step: number) => void\n onSubmit: () => void\n onCancel: () => void\n isSubmitting?: boolean\n submitLabel?: string\n canAdvance?: boolean\n headerRight?: ReactNode\n children: ReactNode\n}\n\nexport function StepFormPage({\n title,\n subtitle,\n label,\n icon,\n gradient = 'from-indigo-600 via-purple-600 to-pink-500',\n steps,\n currentStep,\n onStepChange,\n onSubmit,\n onCancel,\n isSubmitting = false,\n submitLabel,\n canAdvance = true,\n headerRight,\n children,\n}: StepFormPageProps) {\n const translation = useTranslations('forms')\n\n const isLastStep = currentStep === steps.length - 1\n const isFirstStep = currentStep === 0\n\n const handleBack = () => {\n if (isFirstStep) {\n onCancel()\n } else {\n onStepChange(currentStep - 1)\n }\n }\n\n const handleNext = () => {\n if (isLastStep) {\n onSubmit()\n } else {\n onStepChange(currentStep + 1)\n }\n }\n\n return (\n <div className=\"space-y-6 px-4 py-6 sm:px-6\">\n {/* Hero — liquid-surface glass style matching HeroSection */}\n <div className=\"liquid-surface overflow-hidden rounded-2xl\">\n {/* Accent gradient stripe */}\n {gradient && (\n <div className={`h-1.5 w-full bg-gradient-to-r ${gradient}`} />\n )}\n\n <div className=\"p-5 sm:p-8\">\n {/* Label + Close */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2 text-slate-600 dark:text-white/70\">\n {icon}\n <span className=\"text-sm font-medium\">{label}</span>\n </div>\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"rounded-xl p-2 text-gray-400 transition hover:bg-white/60 dark:hover:bg-white/10\"\n aria-label=\"Close\"\n >\n <XMarkIcon className=\"h-5 w-5\" />\n </button>\n </div>\n\n {/* Title — current step title */}\n <h1 className=\"mt-2 text-2xl font-semibold tracking-tight text-slate-950 dark:text-white sm:text-3xl\">\n {steps[currentStep]?.title ?? title}\n </h1>\n\n {/* Subtitle — current step description */}\n {(steps[currentStep]?.description ?? subtitle) ? (\n <p className=\"mt-2 max-w-xl text-sm text-slate-500 dark:text-white/60 sm:text-base\">\n {steps[currentStep]?.description ?? subtitle}\n </p>\n ) : null}\n\n {/* Step Indicator */}\n <div className=\"mt-6 flex items-center gap-2\">\n {steps.map((step, index) => {\n const isCompleted = index < currentStep\n const isCurrent = index === currentStep\n const isClickable = index < currentStep\n\n return (\n <div key={step.id} className=\"flex flex-1 items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => isClickable ? onStepChange(index) : undefined}\n disabled={!isClickable && !isCurrent}\n className={`flex items-center gap-2 rounded-full px-3 py-1.5 text-xs font-medium transition-all duration-200 ${\n isCurrent\n ? 'bg-blue-500/15 text-blue-700 shadow-sm backdrop-blur-sm dark:bg-blue-500/25 dark:text-blue-300'\n : isCompleted\n ? 'bg-emerald-500/10 text-emerald-700 cursor-pointer hover:bg-emerald-500/20 backdrop-blur-sm dark:bg-emerald-500/20 dark:text-emerald-300'\n : 'bg-slate-500/8 text-slate-400 dark:bg-white/5 dark:text-white/30'\n }`}\n >\n <span className={`flex h-5 w-5 items-center justify-center rounded-full text-[10px] font-bold ${\n isCurrent\n ? 'bg-blue-500 text-white'\n : isCompleted\n ? 'bg-emerald-500 text-white'\n : 'bg-slate-200 text-slate-400 dark:bg-white/10 dark:text-white/30'\n }`}>\n {isCompleted ? (\n <CheckIcon className=\"h-3 w-3\" />\n ) : (\n index + 1\n )}\n </span>\n <span className=\"hidden sm:inline\">{step.title}</span>\n </button>\n\n {index < steps.length - 1 ? (\n <div className={`h-px flex-1 transition-colors duration-200 ${\n index < currentStep\n ? 'bg-emerald-500/30 dark:bg-emerald-500/20'\n : 'bg-slate-200 dark:bg-white/10'\n }`} />\n ) : null}\n </div>\n )\n })}\n </div>\n </div>\n </div>\n\n {/* Step Content + Navigation */}\n <div className=\"liquid-surface rounded-2xl p-6\">\n {headerRight ? (\n <div className=\"mb-4 flex justify-end\">{headerRight}</div>\n ) : null}\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={currentStep}\n initial={{ opacity: 0, x: 20 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -20 }}\n transition={{ duration: 0.2 }}\n >\n {children}\n </motion.div>\n </AnimatePresence>\n\n {/* Navigation — inline with form content */}\n <div className=\"mt-6 flex items-center justify-between border-t border-white/30 pt-5 dark:border-white/10\">\n <Button\n type=\"button\"\n onClick={handleBack}\n outline\n >\n {isFirstStep ? translation('cancel') : translation('previous')}\n </Button>\n\n <Button\n type=\"button\"\n onClick={handleNext}\n color=\"ios-glass-blue\"\n disabled={!canAdvance || isSubmitting}\n loading={isSubmitting}\n loadingText={translation('submitting')}\n >\n {isLastStep\n ? (submitLabel ?? translation('submit'))\n : translation('next')}\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","import type React from 'react'\n\n// ============================================================================\n// StepNavigationButtons\n// ============================================================================\n\nexport interface StepNavigationButtonsProps {\n /** Handler for the back button. If omitted, only the continue button is shown. */\n onBack?: () => void\n /** Whether the form is currently submitting */\n isLoading: boolean\n /** Label for the back button */\n backLabel?: string\n /** Label for the continue/submit button */\n continueLabel: string\n /** Label shown while loading (replaces continueLabel) */\n loadingLabel?: string\n /** Whether to show a spinner alongside the loading label */\n showSpinner?: boolean\n /** Button type for the continue button (defaults to 'submit') */\n type?: 'submit' | 'button'\n /** Click handler for the continue button (only needed when type='button') */\n onContinue?: () => void\n}\n\nconst BACK_BUTTON_CLASSES =\n 'flex-1 px-4 py-3 border border-white/45 dark:border-white/14 bg-white/80 dark:bg-white/5 backdrop-blur-sm text-gray-900 dark:text-white rounded-xl hover:bg-white/90 dark:hover:bg-white/10 disabled:opacity-50 transition-all duration-200 shadow-[inset_0_1px_0_rgba(255,255,255,0.88)]'\n\nconst CONTINUE_BUTTON_CLASSES =\n 'flex-1 px-4 py-3 bg-gradient-to-r from-indigo-600 to-purple-600 hover:from-indigo-700 hover:to-purple-700 disabled:from-gray-400 disabled:to-gray-500 text-white font-semibold rounded-xl transition-all duration-200 shadow-lg shadow-indigo-500/25 disabled:shadow-none'\n\nexport function StepNavigationButtons({\n onBack,\n isLoading,\n backLabel,\n continueLabel,\n loadingLabel,\n showSpinner = false,\n type = 'submit',\n onContinue,\n}: StepNavigationButtonsProps) {\n const displayLabel = isLoading && loadingLabel ? loadingLabel : continueLabel\n\n return (\n <div className={onBack ? 'flex gap-4' : ''}>\n {onBack && backLabel && (\n <button\n type=\"button\"\n onClick={onBack}\n disabled={isLoading}\n className={BACK_BUTTON_CLASSES}\n >\n {backLabel}\n </button>\n )}\n <button\n type={type}\n disabled={isLoading}\n onClick={onContinue}\n className={`${CONTINUE_BUTTON_CLASSES}${!onBack ? ' w-full' : ''}`}\n >\n {isLoading && showSpinner ? (\n <span className=\"flex items-center justify-center gap-2\">\n <span className=\"h-4 w-4 animate-spin motion-reduce:animate-none rounded-full border-2 border-white border-t-transparent\" />\n {displayLabel}\n </span>\n ) : (\n displayLabel\n )}\n </button>\n </div>\n )\n}\n","import type React from 'react'\n\n// ============================================================================\n// Color Map\n// ============================================================================\n\ntype FilterTileColor =\n | 'blue'\n | 'emerald'\n | 'gray'\n | 'amber'\n | 'violet'\n | 'purple'\n | 'orange'\n | 'red'\n | 'indigo'\n | 'cyan'\n | 'teal'\n | 'pink'\n | 'rose'\n | 'green'\n | 'yellow'\n | 'slate'\n | 'sky'\n | 'fuchsia'\n\ninterface ColorTokens {\n activeGradient: string\n activeRing: string\n focusRing: string\n iconInactiveBg: string\n iconInactiveText: string\n}\n\nconst COLOR_MAP: Record<FilterTileColor, ColorTokens> = {\n blue: {\n activeGradient: 'bg-gradient-to-br from-blue-500 to-blue-600 ring-2 ring-indigo-500/70 shadow-lg',\n activeRing: 'ring-indigo-500/70',\n focusRing: 'focus-visible:ring-indigo-500/70',\n iconInactiveBg: 'bg-blue-500/10 dark:bg-blue-500/20',\n iconInactiveText: 'text-blue-600 dark:text-blue-300',\n },\n emerald: {\n activeGradient: 'bg-gradient-to-br from-emerald-500 to-emerald-600 ring-2 ring-emerald-500 shadow-lg',\n activeRing: 'ring-emerald-500',\n focusRing: 'focus-visible:ring-emerald-500',\n iconInactiveBg: 'bg-emerald-500/10 dark:bg-emerald-500/20',\n iconInactiveText: 'text-emerald-600 dark:text-emerald-300',\n },\n gray: {\n activeGradient: 'bg-gradient-to-br from-gray-500 to-gray-600 ring-2 ring-gray-500 shadow-lg',\n activeRing: 'ring-gray-500',\n focusRing: 'focus-visible:ring-gray-500',\n iconInactiveBg: 'bg-gray-500/10 dark:bg-gray-500/20',\n iconInactiveText: 'text-gray-600 dark:text-gray-300',\n },\n amber: {\n activeGradient: 'bg-gradient-to-br from-amber-500 to-amber-600 ring-2 ring-amber-500 shadow-lg',\n activeRing: 'ring-amber-500',\n focusRing: 'focus-visible:ring-amber-500',\n iconInactiveBg: 'bg-amber-500/10 dark:bg-amber-500/20',\n iconInactiveText: 'text-amber-600 dark:text-amber-300',\n },\n violet: {\n activeGradient: 'bg-gradient-to-br from-violet-500 to-violet-600 ring-2 ring-violet-500 shadow-lg',\n activeRing: 'ring-violet-500',\n focusRing: 'focus-visible:ring-violet-500',\n iconInactiveBg: 'bg-violet-500/10 dark:bg-violet-500/20',\n iconInactiveText: 'text-violet-600 dark:text-violet-300',\n },\n purple: {\n activeGradient: 'bg-gradient-to-br from-purple-500 to-purple-600 ring-2 ring-purple-500 shadow-lg',\n activeRing: 'ring-purple-500',\n focusRing: 'focus-visible:ring-purple-500',\n iconInactiveBg: 'bg-purple-500/10 dark:bg-purple-500/20',\n iconInactiveText: 'text-purple-600 dark:text-purple-300',\n },\n orange: {\n activeGradient: 'bg-gradient-to-br from-orange-500 to-orange-600 ring-2 ring-orange-500 shadow-lg',\n activeRing: 'ring-orange-500',\n focusRing: 'focus-visible:ring-orange-500',\n iconInactiveBg: 'bg-orange-500/10 dark:bg-orange-500/20',\n iconInactiveText: 'text-orange-600 dark:text-orange-300',\n },\n red: {\n activeGradient: 'bg-gradient-to-br from-red-500 to-red-600 ring-2 ring-red-500 shadow-lg',\n activeRing: 'ring-red-500',\n focusRing: 'focus-visible:ring-red-500',\n iconInactiveBg: 'bg-red-500/10 dark:bg-red-500/20',\n iconInactiveText: 'text-red-600 dark:text-red-300',\n },\n indigo: {\n activeGradient: 'bg-gradient-to-br from-indigo-500 to-indigo-600 ring-2 ring-indigo-500 shadow-lg',\n activeRing: 'ring-indigo-500',\n focusRing: 'focus-visible:ring-indigo-500',\n iconInactiveBg: 'bg-indigo-500/10 dark:bg-indigo-500/20',\n iconInactiveText: 'text-indigo-600 dark:text-indigo-300',\n },\n cyan: {\n activeGradient: 'bg-gradient-to-br from-cyan-500 to-cyan-600 ring-2 ring-cyan-500 shadow-lg',\n activeRing: 'ring-cyan-500',\n focusRing: 'focus-visible:ring-cyan-500',\n iconInactiveBg: 'bg-cyan-500/10 dark:bg-cyan-500/20',\n iconInactiveText: 'text-cyan-600 dark:text-cyan-300',\n },\n teal: {\n activeGradient: 'bg-gradient-to-br from-teal-500 to-teal-600 ring-2 ring-teal-500 shadow-lg',\n activeRing: 'ring-teal-500',\n focusRing: 'focus-visible:ring-teal-500',\n iconInactiveBg: 'bg-teal-500/10 dark:bg-teal-500/20',\n iconInactiveText: 'text-teal-600 dark:text-teal-300',\n },\n pink: {\n activeGradient: 'bg-gradient-to-br from-pink-500 to-pink-600 ring-2 ring-pink-500 shadow-lg',\n activeRing: 'ring-pink-500',\n focusRing: 'focus-visible:ring-pink-500',\n iconInactiveBg: 'bg-pink-500/10 dark:bg-pink-500/20',\n iconInactiveText: 'text-pink-600 dark:text-pink-300',\n },\n rose: {\n activeGradient: 'bg-gradient-to-br from-rose-500 to-rose-600 ring-2 ring-rose-500 shadow-lg',\n activeRing: 'ring-rose-500',\n focusRing: 'focus-visible:ring-rose-500',\n iconInactiveBg: 'bg-rose-500/10 dark:bg-rose-500/20',\n iconInactiveText: 'text-rose-600 dark:text-rose-300',\n },\n green: {\n activeGradient: 'bg-gradient-to-br from-green-500 to-green-600 ring-2 ring-green-500 shadow-lg',\n activeRing: 'ring-green-500',\n focusRing: 'focus-visible:ring-green-500',\n iconInactiveBg: 'bg-green-500/10 dark:bg-green-500/20',\n iconInactiveText: 'text-green-600 dark:text-green-300',\n },\n yellow: {\n activeGradient: 'bg-gradient-to-br from-yellow-500 to-yellow-600 ring-2 ring-yellow-500 shadow-lg',\n activeRing: 'ring-yellow-500',\n focusRing: 'focus-visible:ring-yellow-500',\n iconInactiveBg: 'bg-yellow-500/10 dark:bg-yellow-500/20',\n iconInactiveText: 'text-yellow-600 dark:text-yellow-300',\n },\n slate: {\n activeGradient: 'bg-gradient-to-br from-slate-500 to-slate-600 ring-2 ring-slate-500 shadow-lg',\n activeRing: 'ring-slate-500',\n focusRing: 'focus-visible:ring-slate-500',\n iconInactiveBg: 'bg-slate-500/10 dark:bg-slate-500/20',\n iconInactiveText: 'text-slate-600 dark:text-slate-300',\n },\n sky: {\n activeGradient: 'bg-gradient-to-br from-sky-500 to-sky-600 ring-2 ring-sky-500 shadow-lg',\n activeRing: 'ring-sky-500',\n focusRing: 'focus-visible:ring-sky-500',\n iconInactiveBg: 'bg-sky-500/10 dark:bg-sky-500/20',\n iconInactiveText: 'text-sky-600 dark:text-sky-300',\n },\n fuchsia: {\n activeGradient: 'bg-gradient-to-br from-fuchsia-500 to-fuchsia-600 ring-2 ring-fuchsia-500 shadow-lg',\n activeRing: 'ring-fuchsia-500',\n focusRing: 'focus-visible:ring-fuchsia-500',\n iconInactiveBg: 'bg-fuchsia-500/10 dark:bg-fuchsia-500/20',\n iconInactiveText: 'text-fuchsia-600 dark:text-fuchsia-300',\n },\n}\n\nconst INACTIVE_CLASSES = 'liquid-surface hover:bg-white/30 dark:hover:bg-white/[0.06]'\n\n// ============================================================================\n// FilterTileButton\n// ============================================================================\n\nexport interface FilterTileButtonProps {\n /** Whether the filter is currently active */\n isActive: boolean\n /** Accent color for the tile */\n color: FilterTileColor\n /** Icon rendered inside the badge (h-5 w-5 recommended) */\n icon: React.ReactNode\n /** Primary label text */\n label: string\n /** Secondary count/description text */\n count: string\n /** Click handler — typically toggles the filter */\n onClick: () => void\n}\n\nexport function FilterTileButton({\n isActive,\n color,\n icon,\n label,\n count,\n onClick,\n}: FilterTileButtonProps) {\n const tokens = COLOR_MAP[color]\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n role=\"checkbox\"\n aria-checked={isActive}\n aria-label={label}\n data-testid={`filter-tile-${label.toLowerCase().replace(/\\s+/g, '-')}`}\n className={`relative overflow-hidden rounded-2xl p-4 text-left transition-all duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 ${tokens.focusRing} dark:ring-offset-gray-900 ${\n isActive ? tokens.activeGradient : INACTIVE_CLASSES\n }`}\n >\n <div\n className={`mb-2 inline-flex h-9 w-9 items-center justify-center rounded-lg ${\n isActive\n ? 'bg-white/20 text-white'\n : `${tokens.iconInactiveBg} ${tokens.iconInactiveText}`\n }`}\n >\n {icon}\n </div>\n <p\n className={`truncate text-sm font-semibold ${\n isActive ? 'text-white' : 'text-slate-900 dark:text-white'\n }`}\n >\n {label}\n </p>\n <p\n className={`mt-1 text-xs ${\n isActive ? 'text-white/80' : 'text-slate-500 dark:text-slate-300'\n }`}\n >\n {count}\n </p>\n </button>\n )\n}\n\n// ============================================================================\n// FilterSectionHeader\n// ============================================================================\n\nexport interface FilterSectionHeaderProps {\n /** Icon rendered inside the badge (h-4 w-4 recommended) */\n icon: React.ReactNode\n /** Accent color for the icon badge */\n color: FilterTileColor\n /** Section label text */\n label: string\n}\n\nconst SECTION_HEADER_COLOR_MAP: Record<FilterTileColor, string> = {\n blue: 'bg-blue-500/10 text-blue-600 dark:bg-blue-500/25 dark:text-blue-300',\n emerald: 'bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/25 dark:text-emerald-300',\n gray: 'bg-gray-500/10 text-gray-600 dark:bg-gray-500/25 dark:text-gray-300',\n amber: 'bg-amber-500/10 text-amber-600 dark:bg-amber-500/25 dark:text-amber-300',\n violet: 'bg-violet-500/10 text-violet-600 dark:bg-violet-500/25 dark:text-violet-300',\n purple: 'bg-purple-500/10 text-purple-600 dark:bg-purple-500/25 dark:text-purple-300',\n orange: 'bg-orange-500/10 text-orange-600 dark:bg-orange-500/25 dark:text-orange-300',\n red: 'bg-red-500/10 text-red-600 dark:bg-red-500/25 dark:text-red-300',\n indigo: 'bg-indigo-500/10 text-indigo-600 dark:bg-indigo-500/25 dark:text-indigo-300',\n cyan: 'bg-cyan-500/10 text-cyan-600 dark:bg-cyan-500/25 dark:text-cyan-300',\n teal: 'bg-teal-500/10 text-teal-600 dark:bg-teal-500/25 dark:text-teal-300',\n pink: 'bg-pink-500/10 text-pink-600 dark:bg-pink-500/25 dark:text-pink-300',\n rose: 'bg-rose-500/10 text-rose-600 dark:bg-rose-500/25 dark:text-rose-300',\n green: 'bg-green-500/10 text-green-600 dark:bg-green-500/25 dark:text-green-300',\n yellow: 'bg-yellow-500/10 text-yellow-600 dark:bg-yellow-500/25 dark:text-yellow-300',\n slate: 'bg-slate-500/10 text-slate-600 dark:bg-slate-500/25 dark:text-slate-300',\n sky: 'bg-sky-500/10 text-sky-600 dark:bg-sky-500/25 dark:text-sky-300',\n fuchsia: 'bg-fuchsia-500/10 text-fuchsia-600 dark:bg-fuchsia-500/25 dark:text-fuchsia-300',\n}\n\nexport function FilterSectionHeader({\n icon,\n color,\n label,\n}: FilterSectionHeaderProps) {\n return (\n <div className=\"flex items-center gap-2\">\n <span\n className={`inline-flex h-8 w-8 items-center justify-center rounded-lg backdrop-blur-sm ${SECTION_HEADER_COLOR_MAP[color]}`}\n >\n {icon}\n </span>\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">\n {label}\n </h3>\n </div>\n )\n}\n\nexport type { FilterTileColor }\n","/**\n * Skeleton placeholder for the Dock component.\n * Shown during Zustand store hydration to prevent layout shift.\n * Matches the Dock's glassmorphism container and item sizing.\n */\n\nconst SKELETON_ITEM_COUNT = 6\nconst SKELETON_CONTEXTUAL_COUNT = 3\n\ntype DockSkeletonProps = {\n className?: string\n}\n\nexport function DockSkeleton({ className = '' }: DockSkeletonProps) {\n return (\n <div\n className={`fixed z-50 pointer-events-none flex items-center justify-center left-1/2 -translate-x-1/2 bottom-5 w-full ${className}`}\n >\n <div className=\"pointer-events-auto relative rounded-2xl border border-white/20 bg-white/70 shadow-xl backdrop-blur-xl backdrop-saturate-150 dark:border-gray-700/50 dark:bg-gray-800/70 dark:shadow-black/50 px-4 py-3\">\n <div className=\"pointer-events-none absolute inset-0 rounded-2xl bg-gradient-to-br from-white/45 via-white/15 to-transparent dark:from-white/10 dark:via-transparent dark:to-transparent\" />\n <div className=\"pointer-events-none absolute inset-x-4 top-0 h-10 rounded-b-[2rem] bg-white/25 blur-xl dark:bg-white/5\" />\n <div className=\"relative z-10 flex flex-row items-center gap-3\">\n {Array.from({ length: SKELETON_ITEM_COUNT }).map((_, index) => (\n <div key={`nav-${index}`} className=\"flex flex-col items-center pb-2.5\">\n <div className=\"shimmer h-12 w-12 rounded-2xl sm:h-14 sm:w-14 border border-white/35 bg-white/30 dark:border-white/15 dark:bg-slate-900/55\" />\n </div>\n ))}\n\n <div className=\"w-px h-10 mx-1 bg-slate-300/70 dark:bg-white/20\" aria-hidden=\"true\" />\n\n {Array.from({ length: SKELETON_CONTEXTUAL_COUNT }).map((_, index) => (\n <div key={`ctx-${index}`} className=\"flex flex-col items-center pb-2.5\">\n <div className=\"shimmer h-12 w-12 rounded-2xl sm:h-14 sm:w-14 border border-white/35 bg-white/30 dark:border-white/15 dark:bg-slate-900/55\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n","import { useState, useRef, useCallback, useEffect, type ReactNode } from 'react'\nimport { useRouter } from '@ui/lib/router-context'\nimport { motion } from 'framer-motion'\n\ntype ForceTouchMenuItem = {\n label: string\n icon?: ReactNode\n href?: string\n onClick?: () => void\n variant?: 'default' | 'danger'\n}\n\ntype ForceTouchMenuProps = {\n children: ReactNode\n items: ForceTouchMenuItem[]\n href?: string\n onTap?: () => void\n openOnClick?: boolean\n className?: string\n}\n\nexport function ForceTouchMenu({\n children,\n items,\n href,\n onTap,\n openOnClick = false,\n className = '',\n}: ForceTouchMenuProps) {\n const router = useRouter()\n const [isOpen, setIsOpen] = useState(false)\n const [isPressed, setIsPressed] = useState(false)\n const longPressTimer = useRef<NodeJS.Timeout | null>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const LONG_PRESS_DURATION = 500\n\n const clearTimer = useCallback(() => {\n if (longPressTimer.current) {\n clearTimeout(longPressTimer.current)\n longPressTimer.current = null\n }\n }, [])\n\n const handlePressStart = useCallback(() => {\n setIsPressed(true)\n\n longPressTimer.current = setTimeout(() => {\n setIsOpen(true)\n setIsPressed(false)\n // Haptic feedback if available\n if (navigator.vibrate) {\n navigator.vibrate(10)\n }\n }, LONG_PRESS_DURATION)\n }, [])\n\n const handlePressEnd = useCallback((e: React.MouseEvent | React.TouchEvent) => {\n clearTimer()\n\n if (!isOpen && isPressed) {\n // Was a short tap\n setIsPressed(false)\n if (openOnClick) {\n e.preventDefault()\n e.stopPropagation()\n setIsOpen(true)\n if (navigator.vibrate) {\n navigator.vibrate(8)\n }\n } else if (onTap) {\n onTap()\n } else if (href) {\n router.push(href)\n }\n }\n setIsPressed(false)\n }, [clearTimer, isOpen, isPressed, openOnClick, onTap, router, href])\n\n const handlePressCancel = useCallback(() => {\n clearTimer()\n setIsPressed(false)\n }, [clearTimer])\n\n const handleContainerClick = useCallback((e: React.MouseEvent) => {\n if (!openOnClick) return\n e.preventDefault()\n e.stopPropagation()\n setIsOpen(true)\n }, [openOnClick])\n\n const handleItemClick = (item: ForceTouchMenuItem) => {\n setIsOpen(false)\n if (item.onClick) {\n item.onClick()\n } else if (item.href) {\n router.push(item.href)\n }\n }\n\n useEffect(() => {\n if (!isOpen) return\n\n const handlePointerDown = (event: MouseEvent) => {\n if (!containerRef.current) return\n if (!containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') setIsOpen(false)\n }\n\n document.addEventListener('mousedown', handlePointerDown)\n document.addEventListener('keydown', handleEscape)\n return () => {\n document.removeEventListener('mousedown', handlePointerDown)\n document.removeEventListener('keydown', handleEscape)\n }\n }, [isOpen])\n\n return (\n <div ref={containerRef} className={`relative select-none ${className}`}>\n <div\n onClickCapture={(e) => {\n if (isOpen) {\n e.preventDefault()\n e.stopPropagation()\n }\n }}\n onClick={handleContainerClick}\n onMouseDown={openOnClick ? undefined : handlePressStart}\n onMouseUp={openOnClick ? undefined : handlePressEnd}\n onMouseLeave={openOnClick ? undefined : handlePressCancel}\n onTouchStart={openOnClick ? undefined : handlePressStart}\n onTouchEnd={openOnClick ? undefined : handlePressEnd}\n onTouchCancel={openOnClick ? undefined : handlePressCancel}\n onContextMenu={(e) => {\n e.preventDefault()\n setIsOpen(true)\n }}\n >\n <motion.div\n animate={{\n scale: isPressed ? 0.92 : isOpen ? 0.95 : 1,\n }}\n transition={{ type: 'spring', stiffness: 400, damping: 25 }}\n >\n {children}\n </motion.div>\n </div>\n\n {isOpen && (\n <motion.div\n initial={{ opacity: 0, y: 6, scale: 0.98 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 4, scale: 0.98 }}\n transition={{ type: 'spring', stiffness: 420, damping: 30 }}\n className=\"absolute left-1/2 top-full z-40 mt-2 w-56 -translate-x-1/2 overflow-hidden rounded-2xl border border-white/65 bg-white/88 shadow-[0_16px_28px_-20px_rgba(15,23,42,0.65)] backdrop-blur-xl dark:border-white/14 dark:bg-slate-900/88 dark:shadow-[0_18px_30px_-20px_rgba(0,0,0,0.8)]\"\n >\n {items.map((item, index) => (\n <button\n key={index}\n onClick={() => handleItemClick(item)}\n className={`flex w-full items-center gap-3 px-4 py-2.5 text-left text-sm font-medium transition-colors ${\n index !== items.length - 1 ? 'border-b border-slate-200/70 dark:border-white/10' : ''\n } ${\n item.variant === 'danger'\n ? 'text-red-600 dark:text-red-400 hover:bg-red-50/80 dark:hover:bg-red-500/12'\n : 'text-slate-700 dark:text-slate-200 hover:bg-slate-100/70 dark:hover:bg-white/8'\n }`}\n >\n {item.icon && <span className=\"h-5 w-5\">{item.icon}</span>}\n {item.label}\n </button>\n ))}\n </motion.div>\n )}\n </div>\n )\n}\n","import { Fragment, type ReactNode, memo, useCallback, useMemo, type ComponentType } from 'react'\nimport { MagnifyingGlassIcon } from '@heroicons/react/24/outline'\nimport { ForceTouchMenu } from '@ui/components/force-touch-menu'\n\n/* ── Exported Types ──────────────────────────────────────────────── */\n\nexport type LaunchpadMenuItem = {\n label: string\n icon?: ReactNode\n href?: string\n onClick?: () => void\n}\n\nexport type LaunchpadItem = {\n id: string\n name: string\n href: string\n icon: ComponentType<{ className?: string }>\n gradient: string\n shadow: string\n badge?: number\n notification?: number\n subtitle?: string\n menuItems: LaunchpadMenuItem[]\n /** When defined, the item triggers this callback instead of navigating via href. */\n onClick?: () => void\n}\n\nexport type LaunchpadUserProfile = {\n name?: string | null\n email?: string | null\n picture?: string | null\n role?: string | null\n}\n\nexport type LaunchpadGridProps = {\n pageItems: LaunchpadItem[]\n actionItems: LaunchpadItem[]\n actionItemIds: ReadonlySet<string>\n pageOrder: string[]\n userProfile?: LaunchpadUserProfile | null\n isHydrated?: boolean\n actionsLabel: string\n onItemClick: (item: LaunchpadItem) => void\n onPrefetch?: (href: string) => void\n className?: string\n}\n\n/* ── Pure Component ──────────────────────────────────────────────── */\n\nexport function LaunchpadGrid({\n pageItems,\n actionItems,\n actionItemIds,\n pageOrder,\n userProfile,\n isHydrated = false,\n actionsLabel,\n onItemClick,\n className,\n}: LaunchpadGridProps) {\n const orderIndex = useMemo(\n () => new Map(pageOrder.map((id, index) => [id, index])),\n [pageOrder]\n )\n\n const orderedItems = useMemo(() => {\n const sortedPages = [...pageItems].sort(\n (a, b) => (orderIndex.get(a.id) ?? 999) - (orderIndex.get(b.id) ?? 999)\n )\n return [...sortedPages, ...actionItems]\n }, [pageItems, actionItems, orderIndex])\n\n const groupedPageItems = orderedItems.filter(item => !actionItemIds.has(item.id))\n const groupedActionItems = orderedItems.filter(item => actionItemIds.has(item.id))\n const allGroupedItems = [...groupedPageItems, ...groupedActionItems]\n const firstActionIndex = groupedActionItems.length > 0 ? groupedPageItems.length : -1\n\n const tileClass =\n 'group relative flex flex-col items-center text-center transition-transform duration-200 hover:-translate-y-0.5'\n\n const getForceTouchItems = useCallback((item: LaunchpadItem): LaunchpadMenuItem[] => {\n if (item.menuItems.length > 0) return item.menuItems\n return [\n {\n label: item.name,\n href: item.href,\n icon: <MagnifyingGlassIcon className=\"h-5 w-5\" />,\n },\n ]\n }, [])\n\n const renderTile = useCallback((item: LaunchpadItem) => (\n <div key={`launchpad-${item.id}`} className=\"flex flex-col items-center\">\n {!actionItemIds.has(item.id) && item.href.startsWith('/') && !item.onClick ? (\n <ForceTouchMenu\n href={item.href}\n items={getForceTouchItems(item)}\n className=\"flex flex-col items-center\"\n >\n <div className={`${tileClass} cursor-pointer`} role=\"button\" tabIndex={0}>\n {item.badge != null && (\n <span className=\"absolute -top-1.5 left-1/2 translate-x-8 lg:translate-x-10 z-10 inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-white/95 px-1.5 text-[10px] font-bold text-blue-700 shadow-sm ring-1 ring-blue-200 dark:bg-slate-900/95 dark:text-blue-300 dark:ring-blue-400/40\">\n {item.badge > 99 ? '99+' : item.badge}\n </span>\n )}\n {item.notification != null && (\n <span className=\"absolute -top-2 right-1/2 translate-x-9 lg:translate-x-11 z-10 flex h-8 min-w-8 items-center justify-center rounded-full bg-red-500 px-2 text-sm font-extrabold text-white shadow-lg ring-2 ring-white/70 dark:ring-slate-900/70\">\n {item.notification > 99 ? '99+' : item.notification}\n </span>\n )}\n <LaunchpadIcon item={item} userProfile={userProfile} isHydrated={isHydrated} />\n <h3 className=\"mt-3 text-sm font-medium text-gray-700 dark:text-gray-300 group-hover:text-gray-900 dark:group-hover:text-white transition-colors\">\n {item.name}\n </h3>\n {item.subtitle && (\n <span className=\"mt-0.5 text-xs text-gray-500 dark:text-gray-400\">\n {item.subtitle}\n </span>\n )}\n </div>\n </ForceTouchMenu>\n ) : (\n <button\n type=\"button\"\n className={tileClass}\n onClick={() => item.onClick ? item.onClick() : onItemClick(item)}\n >\n {item.badge != null && (\n <span className=\"absolute -top-1.5 left-1/2 translate-x-8 lg:translate-x-10 z-10 inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-white/95 px-1.5 text-[10px] font-bold text-blue-700 shadow-sm ring-1 ring-blue-200 dark:bg-slate-900/95 dark:text-blue-300 dark:ring-blue-400/40\">\n {item.badge > 99 ? '99+' : item.badge}\n </span>\n )}\n {item.notification != null && (\n <span className=\"absolute -top-2 right-1/2 translate-x-9 lg:translate-x-11 z-10 flex h-8 min-w-8 items-center justify-center rounded-full bg-red-500 px-2 text-sm font-extrabold text-white shadow-lg ring-2 ring-white/70 dark:ring-slate-900/70\">\n {item.notification > 9 ? '9+' : item.notification}\n </span>\n )}\n <LaunchpadIcon item={item} userProfile={userProfile} isHydrated={isHydrated} />\n <h3 className=\"mt-3 text-sm font-medium text-gray-700 dark:text-gray-300 group-hover:text-gray-900 dark:group-hover:text-white transition-colors\">\n {item.name}\n </h3>\n {item.subtitle && (\n <span className=\"mt-0.5 text-xs text-gray-500 dark:text-gray-400\">\n {item.subtitle}\n </span>\n )}\n </button>\n )}\n </div>\n ), [actionItemIds, getForceTouchItems, tileClass, onItemClick, userProfile, isHydrated])\n\n // iPad-style: unified grid when no action items are passed separately\n const isUnifiedGrid = actionItems.length === 0\n\n return (\n <div className={`mt-12 ${className ?? ''}`}>\n {isUnifiedGrid ? (\n /* Unified grid — all items in equal columns, no divider */\n <div className=\"grid grid-cols-4 gap-6 sm:gap-8 lg:grid-cols-5 xl:grid-cols-6 justify-items-center\">\n {allGroupedItems.map(renderTile)}\n </div>\n ) : (\n /* Split grid — page items + divider + action items */\n <>\n <div className=\"flex flex-wrap justify-center gap-7 lg:gap-8\">\n {groupedPageItems.map(renderTile)}\n </div>\n\n {groupedActionItems.length > 0 && (\n <>\n <div className=\"my-6\">\n <div className=\"h-px w-full bg-slate-300/75 dark:bg-white/20\" />\n <p className=\"mt-2 text-center text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {actionsLabel}\n </p>\n </div>\n <div className=\"flex flex-wrap justify-center gap-7 lg:gap-8\">\n {groupedActionItems.map(renderTile)}\n </div>\n </>\n )}\n </>\n )}\n </div>\n )\n}\n\n/* ── Glassmorphic Icon Tile (private) ────────────────────────────── */\n\nconst LaunchpadIcon = memo(function LaunchpadIcon({\n item,\n userProfile,\n isHydrated,\n}: {\n item: LaunchpadItem\n userProfile?: LaunchpadUserProfile | null\n isHydrated: boolean\n}) {\n const Icon = item.icon\n const profileInitial = isHydrated\n ? userProfile?.name?.trim()?.charAt(0)?.toUpperCase() ?? userProfile?.email?.charAt(0)?.toUpperCase() ?? 'U'\n : 'U'\n const profileBadge = isHydrated\n ? (userProfile?.role ?? '').trim().toUpperCase()\n : ''\n const profileImage = isHydrated ? userProfile?.picture : undefined\n\n return (\n <div className=\"relative\">\n <div\n className=\"relative overflow-hidden flex h-20 w-20 lg:h-24 lg:w-24 items-center justify-center rounded-[22px] border border-white/45 bg-white/35 backdrop-blur-2xl shadow-[inset_0_1px_0_rgba(255,255,255,0.85),0_14px_28px_-20px_rgba(15,23,42,0.65)] transition-all duration-300 group-hover:scale-105 dark:border-white/14 dark:bg-slate-900/42 dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.2),0_16px_30px_-20px_rgba(0,0,0,0.78)]\"\n >\n <div className={`pointer-events-none absolute inset-0 bg-gradient-to-br ${item.gradient} opacity-85 dark:opacity-70`} />\n <div className=\"pointer-events-none absolute inset-0 bg-[linear-gradient(140deg,rgba(255,255,255,0.42)_0%,rgba(255,255,255,0.12)_42%,rgba(255,255,255,0)_100%)]\" />\n {item.id === 'profile' ? (\n profileImage ? (\n <img\n src={profileImage}\n alt={userProfile?.name ?? 'Profile'}\n className=\"relative h-12 w-12 lg:h-14 lg:w-14 rounded-full object-cover ring-2 ring-white/70\"\n />\n ) : (\n <span className=\"relative flex h-12 w-12 lg:h-14 lg:w-14 items-center justify-center rounded-full bg-white/24 text-lg lg:text-xl font-semibold text-white ring-2 ring-white/70\">\n {profileInitial}\n </span>\n )\n ) : (\n <Icon className=\"relative h-10 w-10 lg:h-12 lg:w-12 text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.22)]\" />\n )}\n </div>\n {item.id === 'profile' && profileBadge && (\n <span className=\"absolute -bottom-1 -right-1 inline-flex items-center justify-center rounded-full bg-blue-600 px-2 py-0.5 text-[10px] font-bold leading-none tracking-wide text-white ring-2 ring-white dark:ring-gray-900\">\n {profileBadge}\n </span>\n )}\n </div>\n )\n})\n","interface StatCardSkeletonProps {\n count?: number\n columns?: 3 | 4\n}\n\nexport function StatCardSkeleton({ count = 4, columns = 4 }: StatCardSkeletonProps) {\n const gridClass = columns === 3\n ? 'grid grid-cols-1 sm:grid-cols-3 gap-3'\n : 'grid grid-cols-2 sm:grid-cols-4 gap-3'\n\n return (\n <div className={gridClass} role=\"status\" aria-label=\"Loading statistics\">\n {Array.from({ length: count }).map((_, index) => (\n <div\n key={index}\n className=\"liquid-surface rounded-xl p-4 shadow-sm\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"shimmer h-10 w-10 rounded-lg\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"shimmer h-6 w-24 rounded\" />\n <div className=\"shimmer h-4 w-16 rounded\" />\n </div>\n </div>\n </div>\n ))}\n </div>\n )\n}\n","interface CardGridSkeletonProps {\n count?: number\n columns?: 1 | 2 | 3 | 4\n}\n\nexport function CardGridSkeleton({ count = 8, columns = 4 }: CardGridSkeletonProps) {\n const gridCols = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',\n }\n\n return (\n <div className={`grid ${gridCols[columns]} gap-3`} role=\"status\" aria-label=\"Loading content\">\n {Array.from({ length: count }).map((_, i) => (\n <div\n key={i}\n className=\"rounded-xl border border-gray-200 dark:border-white/10 bg-white dark:bg-gray-800 p-4 shadow-sm\"\n >\n <div className=\"flex items-start gap-3 mb-3\">\n <div className=\"shimmer h-8 w-12 rounded\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"shimmer h-4 w-full rounded\" />\n <div className=\"shimmer h-3 w-3/4 rounded\" />\n </div>\n </div>\n <div className=\"flex items-center gap-2 mb-3\">\n <div className=\"shimmer h-5 w-5 rounded-full\" />\n <div className=\"shimmer h-4 w-20 rounded\" />\n </div>\n <div className=\"pt-3 border-t border-gray-200 dark:border-white/10\">\n <div className=\"shimmer h-3 w-32 rounded\" />\n </div>\n </div>\n ))}\n </div>\n )\n}\n","interface RegionFilterSkeletonProps {\n count?: number\n}\n\nexport function RegionFilterSkeleton({ count = 9 }: RegionFilterSkeletonProps) {\n return (\n <div className=\"grid grid-cols-4 sm:grid-cols-6 lg:grid-cols-9 gap-2\">\n {Array.from({ length: count }).map((_, i) => (\n <div\n key={i}\n className=\"rounded-lg border border-gray-200 dark:border-white/10 bg-white dark:bg-gray-800 p-2 flex flex-col items-center gap-1\"\n >\n <div className=\"shimmer h-6 w-9 rounded\" />\n <div className=\"shimmer h-4 w-6 rounded\" />\n <div className=\"shimmer h-3 w-4 rounded\" />\n </div>\n ))}\n </div>\n )\n}\n","interface BrandFilterSkeletonProps {\n count?: number\n}\n\nexport function BrandFilterSkeleton({ count = 4 }: BrandFilterSkeletonProps) {\n return (\n <div className=\"grid gap-3 grid-cols-2 sm:grid-cols-3 lg:grid-cols-4\">\n {Array.from({ length: count }).map((_, i) => (\n <div\n key={i}\n className=\"rounded-xl border border-gray-200 dark:border-white/10 bg-white dark:bg-gray-800 p-3 flex items-center gap-3\"\n >\n <div className=\"shimmer h-10 w-10 rounded-lg\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"shimmer h-4 w-20 rounded\" />\n <div className=\"shimmer h-3 w-12 rounded\" />\n </div>\n </div>\n ))}\n </div>\n )\n}\n","export function AnalysisSkeleton() {\n return (\n <div className=\"space-y-6\">\n <div className=\"space-y-2\">\n <div className=\"shimmer h-7 w-48 rounded\" />\n <div className=\"shimmer h-4 w-96 rounded\" />\n </div>\n <div className=\"rounded-xl border border-gray-200 dark:border-white/10 bg-white dark:bg-gray-800 p-6 shadow-sm space-y-4\">\n <div className=\"flex items-center gap-2\">\n <div className=\"shimmer h-10 w-32 rounded-lg\" />\n </div>\n <div className=\"space-y-3\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"rounded-lg border border-gray-200 dark:border-white/10 p-4 bg-gray-50/50 dark:bg-gray-900/50\">\n <div className=\"flex items-center gap-3\">\n <div className=\"shimmer h-8 w-8 rounded-lg\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"shimmer h-4 w-24 rounded\" />\n <div className=\"shimmer h-3 w-48 rounded\" />\n </div>\n </div>\n </div>\n ))}\n </div>\n <div className=\"flex gap-2 pt-2\">\n <div className=\"shimmer h-10 w-32 rounded-lg\" />\n <div className=\"shimmer h-10 w-32 rounded-lg\" />\n </div>\n </div>\n </div>\n )\n}\n","/**\n * Base shimmer animation class for skeleton loading\n */\nexport const shimmerClass =\n \"bg-gradient-to-r from-gray-200 via-gray-100 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700 animate-shimmer motion-reduce:animate-none bg-[length:200%_100%]\"\n\nexport const shimmerWhiteClass = \"bg-white/20 animate-pulse motion-reduce:animate-none\"\n","import { shimmerClass } from '@ui/components/skeletons/shimmer'\n\n/**\n * Reusable section header skeleton with icon and title\n */\nexport function SectionHeaderSkeleton() {\n return (\n <div className=\"flex items-center gap-3\">\n <div className={`h-10 w-10 rounded-lg ${shimmerClass}`} />\n <div className=\"space-y-2\">\n <div className={`h-5 w-32 rounded ${shimmerClass}`} />\n <div className={`h-4 w-48 rounded ${shimmerClass}`} />\n </div>\n </div>\n )\n}\n","import { useState, useEffect } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Button } from '@ui/components/button'\n\ntype CookieConsentProps = {\n learnMoreHref?: string\n storageKey?: string\n onAccept?: () => void\n onReject?: () => void\n}\n\nexport function CookieConsent({\n learnMoreHref = '/privacy',\n storageKey = 'cookie-consent',\n onAccept,\n onReject,\n}: CookieConsentProps = {}) {\n const t = useTranslations('common.cookieConsent')\n const [visible, setVisible] = useState(false)\n\n useEffect(() => {\n const consent = localStorage.getItem(storageKey)\n if (!consent) {\n setVisible(true)\n }\n }, [storageKey])\n\n function handleAccept() {\n localStorage.setItem(storageKey, 'accepted')\n setVisible(false)\n onAccept?.()\n }\n\n function handleReject() {\n localStorage.setItem(storageKey, 'rejected')\n setVisible(false)\n onReject?.()\n }\n\n return (\n <AnimatePresence>\n {visible && (\n <motion.div\n initial={{ y: 100, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n exit={{ y: 100, opacity: 0 }}\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n className=\"fixed bottom-0 inset-x-0 z-50 p-4 sm:p-6\"\n data-testid=\"cookie-consent\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={t('ariaLabel')}\n >\n <div className=\"mx-auto max-w-3xl rounded-2xl bg-white/90 dark:bg-gray-800/90 backdrop-blur-xl border border-white/20 dark:border-gray-700/50 shadow-lg shadow-black/5 p-5 sm:p-6\">\n <div className=\"flex flex-col sm:flex-row items-start sm:items-center gap-4\">\n <p className=\"flex-1 text-sm text-gray-700 dark:text-gray-300 leading-relaxed\">\n {t('message')}\n </p>\n <div className=\"flex items-center gap-3 shrink-0\">\n <a\n href={learnMoreHref}\n className=\"text-sm font-medium text-indigo-600 dark:text-indigo-400 hover:text-indigo-500 dark:hover:text-indigo-300 transition-colors duration-200\"\n >\n {t('learnMore')}\n </a>\n <Button onClick={handleReject} outline>\n {t('reject')}\n </Button>\n <Button onClick={handleAccept} color=\"ios-glass-blue\">\n {t('accept')}\n </Button>\n </div>\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n}\n","import { memo, useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport { usePathname, useRouter } from '@ui/lib/router-context'\n\n\nexport type DockMenuItem = {\n label: string\n icon?: ReactNode\n href?: string\n onClick?: () => void\n variant?: 'default' | 'danger'\n}\n\nexport type DockAction = {\n id: string\n icon: React.ComponentType<{ className?: string }>\n label: string\n onClick: () => void\n href?: string\n badge?: number\n active?: boolean\n menuItems: DockMenuItem[]\n /** RGB triplet for accent color (e.g. '59, 130, 246'). Overrides hardcoded getDockAccent. */\n accentRgb?: string\n}\n\ntype DockPosition = 'bottom' | 'top' | 'left' | 'right'\n\ntype DockProps = {\n navigationActions: DockAction[]\n contextualActions: DockAction[]\n position?: DockPosition\n className?: string\n autoHide?: boolean\n}\n\n\ntype DockAccent = {\n icon: string\n bg: string\n dot: string\n rgb: string\n}\n\nfunction accentFromRgb(rgb: string): DockAccent {\n return {\n icon: `text-[rgb(${rgb})]`,\n bg: `bg-[rgba(${rgb},0.12)] dark:bg-[rgba(${rgb},0.2)]`,\n dot: `bg-[rgb(${rgb})]`,\n rgb,\n }\n}\n\nfunction getDockAccent(id: string, accentRgb?: string): DockAccent {\n if (accentRgb) return accentFromRgb(accentRgb)\n if (id === 'stations') {\n return { icon: 'text-blue-600 dark:text-blue-400', bg: 'bg-blue-100 dark:bg-blue-900/35', dot: 'bg-blue-500 dark:bg-blue-400', rgb: '59, 130, 246' }\n }\n if (id === 'approvals' || id === 'approvals-drawer') {\n return { icon: 'text-amber-600 dark:text-amber-400', bg: 'bg-amber-100 dark:bg-amber-900/35', dot: 'bg-amber-500 dark:bg-amber-400', rgb: '245, 158, 11' }\n }\n if (id === 'competitors') {\n return { icon: 'text-orange-900 dark:text-orange-300', bg: 'bg-orange-900/15 dark:bg-orange-900/45', dot: 'bg-orange-700 dark:bg-orange-400', rgb: '146, 64, 14' }\n }\n if (id === 'users') {\n return { icon: 'text-purple-600 dark:text-purple-400', bg: 'bg-purple-100 dark:bg-purple-900/35', dot: 'bg-purple-500 dark:bg-purple-400', rgb: '168, 85, 247' }\n }\n if (id === 'agents' || id === 'workflows') {\n return { icon: 'text-indigo-600 dark:text-indigo-400', bg: 'bg-indigo-100 dark:bg-indigo-900/35', dot: 'bg-indigo-500 dark:bg-indigo-400', rgb: '99, 102, 241' }\n }\n if (id === 'models') {\n return { icon: 'text-sky-600 dark:text-sky-400', bg: 'bg-sky-100 dark:bg-sky-900/35', dot: 'bg-sky-500 dark:bg-sky-400', rgb: '14, 165, 233' }\n }\n if (id === 'rules') {\n return { icon: 'text-emerald-600 dark:text-emerald-400', bg: 'bg-emerald-100 dark:bg-emerald-900/35', dot: 'bg-emerald-500 dark:bg-emerald-400', rgb: '16, 185, 129' }\n }\n if (id === 'subscription') {\n return { icon: 'text-fuchsia-600 dark:text-fuchsia-400', bg: 'bg-fuchsia-100 dark:bg-fuchsia-900/35', dot: 'bg-fuchsia-500 dark:bg-fuchsia-400', rgb: '217, 70, 239' }\n }\n if (id === 'notifications') {\n return { icon: 'text-pink-600 dark:text-pink-400', bg: 'bg-pink-100 dark:bg-pink-900/35', dot: 'bg-pink-500 dark:bg-pink-400', rgb: '236, 72, 153' }\n }\n if (id === 'theme') {\n return { icon: 'text-sky-600 dark:text-sky-400', bg: 'bg-sky-100 dark:bg-sky-900/35', dot: 'bg-sky-500 dark:bg-sky-400', rgb: '14, 165, 233' }\n }\n if (id === 'profile') {\n return { icon: 'text-slate-600 dark:text-slate-300', bg: 'bg-slate-100 dark:bg-slate-800/70', dot: 'bg-slate-500 dark:bg-slate-400', rgb: '100, 116, 139' }\n }\n if (id === 'signout') {\n return { icon: 'text-red-600 dark:text-red-400', bg: 'bg-red-100 dark:bg-red-900/35', dot: 'bg-red-500 dark:bg-red-400', rgb: '239, 68, 68' }\n }\n return { icon: 'text-indigo-600 dark:text-indigo-400', bg: 'bg-indigo-100 dark:bg-indigo-900/35', dot: 'bg-indigo-500 dark:bg-indigo-400', rgb: '99, 102, 241' }\n}\n\nconst AUTO_HIDE_DELAY = 3000\n\nexport function Dock({\n navigationActions,\n contextualActions,\n position = 'bottom',\n className = '',\n autoHide = false,\n}: DockProps) {\n const router = useRouter()\n const pathname = usePathname()\n\n const [isAutoHidden, setIsAutoHidden] = useState(false)\n const autoHideTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null)\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null)\n const [openClickMenuId, setOpenClickMenuId] = useState<string | null>(null)\n const [isTabletViewport, setIsTabletViewport] = useState(false)\n const dockRef = useRef<HTMLDivElement | null>(null)\n const actions = useMemo(\n () => [...navigationActions, ...contextualActions],\n [navigationActions, contextualActions]\n )\n\n // Auto-hide timer management\n const resetAutoHideTimer = useCallback(() => {\n if (!autoHide) return\n if (autoHideTimerRef.current) {\n clearTimeout(autoHideTimerRef.current)\n }\n setIsAutoHidden(false)\n autoHideTimerRef.current = setTimeout(() => {\n setIsAutoHidden(true)\n }, AUTO_HIDE_DELAY)\n }, [autoHide])\n\n useEffect(() => {\n if (!autoHide) {\n setIsAutoHidden(false)\n return\n }\n resetAutoHideTimer()\n return () => {\n if (autoHideTimerRef.current) {\n clearTimeout(autoHideTimerRef.current)\n }\n }\n }, [autoHide, resetAutoHideTimer])\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n const media = window.matchMedia('(min-width: 768px) and (max-width: 1024px)')\n const syncViewport = () => setIsTabletViewport(media.matches)\n syncViewport()\n media.addEventListener('change', syncViewport)\n return () => media.removeEventListener('change', syncViewport)\n }, [])\n\n useEffect(() => {\n const handlePointerDown = (event: MouseEvent) => {\n if (!dockRef.current) return\n const target = event.target as Node\n if (!dockRef.current.contains(target)) {\n setOpenClickMenuId(null)\n setFocusedIndex(null)\n }\n }\n\n document.addEventListener('mousedown', handlePointerDown)\n return () => document.removeEventListener('mousedown', handlePointerDown)\n }, [])\n\n useEffect(() => {\n setFocusedIndex(null)\n setHoveredIndex(null)\n setOpenClickMenuId(null)\n }, [pathname])\n\n const hasActions = actions.length > 0\n\n const containerPositionClass =\n position === 'bottom'\n ? 'left-1/2 -translate-x-1/2 bottom-5 w-full'\n : position === 'top'\n ? 'left-1/2 -translate-x-1/2 top-5 w-full'\n : position === 'left'\n ? 'left-5 top-1/2 -translate-y-1/2'\n : 'right-5 top-1/2 -translate-y-1/2'\n\n const dockOrientationClass = position === 'left' || position === 'right' ? 'flex-col' : 'flex-row'\n const isVerticalDock = position === 'left' || position === 'right'\n const dividerClass =\n position === 'left' || position === 'right'\n ? 'h-px w-10 my-1 bg-neutral-400/20 dark:bg-white/20'\n : 'w-px h-10 mx-1 bg-neutral-400/20 dark:bg-white/20'\n const useTabletScroller = isTabletViewport && !isVerticalDock\n\n const handleMenuItemClick = (item: DockMenuItem) => {\n if (item.onClick) {\n item.onClick()\n return\n }\n\n if (item.href) {\n router.push(item.href)\n }\n }\n\n const getFlyoutPositionClass = () => 'bottom-full left-1/2 mb-3 -translate-x-1/2'\n\n return (\n <div\n className={`fixed z-50 pointer-events-none transition-opacity duration-300 ${!hasActions || isAutoHidden ? 'opacity-0' : 'opacity-100'} ${isAutoHidden ? 'hover:opacity-100' : ''} flex items-center justify-center ${containerPositionClass} ${className}`}\n onMouseEnter={autoHide ? resetAutoHideTimer : undefined}\n onMouseLeave={autoHide ? resetAutoHideTimer : undefined}\n onPointerDown={autoHide ? resetAutoHideTimer : undefined}\n >\n <div\n ref={dockRef}\n className={`pointer-events-auto relative rounded-2xl liquid-surface-strong ${\n isTabletViewport ? 'px-2.5 py-2.5' : 'px-4 py-3'\n } ${isVerticalDock ? '' : 'max-w-[calc(100vw-0.75rem)]'}`}\n >\n <div className=\"pointer-events-none absolute inset-0 rounded-2xl bg-gradient-to-br from-neutral-200/20 via-transparent to-transparent dark:from-white/10 dark:via-transparent dark:to-transparent\" />\n <div className=\"pointer-events-none absolute inset-x-4 top-0 h-10 rounded-b-[2rem] bg-neutral-200/15 blur-xl dark:bg-white/5\" />\n <div\n className={`relative z-10 flex ${dockOrientationClass} items-center ${\n isTabletViewport ? 'gap-2' : 'gap-3'\n } ${\n useTabletScroller\n ? 'max-w-[calc(100vw-2.25rem)] overflow-x-auto [overflow-y:visible] py-1 [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden'\n : ''\n }`}\n >\n {navigationActions.map((action, index) => {\n const hasMenu = !!action.menuItems?.length\n const accent = getDockAccent(action.id, action.accentRgb)\n const FlyoutIcon = action.icon\n\n const dockItem = (\n <DockItem\n key={action.id}\n action={action}\n index={index}\n hoveredIndex={hoveredIndex}\n focusedIndex={focusedIndex}\n onHover={setHoveredIndex}\n compact={isTabletViewport}\n />\n )\n\n if (hasMenu) {\n return (\n <div key={action.id} className=\"relative\">\n <button\n type=\"button\"\n title={action.label}\n onClick={() => {\n setFocusedIndex(index)\n setOpenClickMenuId(null)\n action.onClick()\n }}\n onContextMenu={(event) => {\n event.preventDefault()\n setFocusedIndex(index)\n setOpenClickMenuId(prev => (prev === action.id ? null : action.id))\n }}\n className=\"focus:outline-hidden\"\n >\n {dockItem}\n </button>\n {openClickMenuId === action.id && (\n <div className={`absolute z-50 min-w-[220px] max-w-[calc(100vw-1rem)] ${getFlyoutPositionClass()}`}>\n <div className=\"liquid-surface overflow-hidden rounded-2xl text-sm shadow-xl\">\n <div className=\"border-b border-white/20 px-3 py-2 dark:border-white/10\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {action.label}\n </p>\n </div>\n <div className=\"grid grid-cols-1 gap-y-1 p-2\">\n {action.menuItems.map((item, itemIndex) => (\n <button\n key={`${action.id}-flyout-item-${itemIndex}`}\n type=\"button\"\n onClick={() => handleMenuItemClick(item)}\n className={`group relative flex items-center gap-x-3 rounded-lg px-3 py-2.5 text-left text-sm hover:bg-white/30 dark:hover:bg-white/10 ${\n item.variant === 'danger' ? 'text-red-600 dark:text-red-400' : 'text-gray-700 dark:text-gray-200'\n }`}\n >\n <span className={`flex h-8 w-8 items-center justify-center rounded-lg ${accent.bg} ${accent.icon}`}>\n <FlyoutIcon className=\"h-4 w-4\" />\n </span>\n <span className=\"font-medium\">{item.label}</span>\n </button>\n ))}\n </div>\n </div>\n </div>\n )}\n </div>\n )\n }\n\n return (\n <button\n key={action.id}\n type=\"button\"\n title={action.label}\n onClick={() => {\n setFocusedIndex(index)\n action.onClick()\n }}\n className=\"focus:outline-hidden\"\n >\n {dockItem}\n </button>\n )\n })}\n\n {navigationActions.length > 0 && contextualActions.length > 0 && (\n <div className={dividerClass} aria-hidden=\"true\" />\n )}\n\n {contextualActions.map((action, actionIndex) => {\n const index = navigationActions.length + actionIndex\n const hasMenu = !!action.menuItems?.length\n const accent = getDockAccent(action.id, action.accentRgb)\n const FlyoutIcon = action.icon\n\n const dockItem = (\n <DockItem\n key={action.id}\n action={action}\n index={index}\n hoveredIndex={hoveredIndex}\n focusedIndex={focusedIndex}\n onHover={setHoveredIndex}\n compact={isTabletViewport}\n />\n )\n\n if (hasMenu) {\n return (\n <div key={action.id} className=\"relative\">\n <button\n type=\"button\"\n title={action.label}\n onClick={() => {\n setFocusedIndex(index)\n setOpenClickMenuId(null)\n action.onClick()\n }}\n onContextMenu={(event) => {\n event.preventDefault()\n setFocusedIndex(index)\n setOpenClickMenuId(prev => (prev === action.id ? null : action.id))\n }}\n className=\"focus:outline-hidden\"\n >\n {dockItem}\n </button>\n {openClickMenuId === action.id && (\n <div className={`absolute z-50 min-w-[220px] max-w-[calc(100vw-1rem)] ${getFlyoutPositionClass()}`}>\n <div className=\"liquid-surface overflow-hidden rounded-2xl text-sm shadow-xl\">\n <div className=\"border-b border-white/20 px-3 py-2 dark:border-white/10\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {action.label}\n </p>\n </div>\n <div className=\"grid grid-cols-1 gap-y-1 p-2\">\n {action.menuItems.map((item, itemIndex) => (\n <button\n key={`${action.id}-flyout-item-${itemIndex}`}\n type=\"button\"\n onClick={() => handleMenuItemClick(item)}\n className={`group relative flex items-center gap-x-3 rounded-lg px-3 py-2.5 text-left text-sm hover:bg-white/30 dark:hover:bg-white/10 ${\n item.variant === 'danger' ? 'text-red-600 dark:text-red-400' : 'text-gray-700 dark:text-gray-200'\n }`}\n >\n <span className={`flex h-8 w-8 items-center justify-center rounded-lg ${accent.bg} ${accent.icon}`}>\n <FlyoutIcon className=\"h-4 w-4\" />\n </span>\n <span className=\"font-medium\">{item.label}</span>\n </button>\n ))}\n </div>\n </div>\n </div>\n )}\n </div>\n )\n }\n\n return (\n <button\n key={action.id}\n type=\"button\"\n title={action.label}\n onClick={() => {\n setFocusedIndex(index)\n action.onClick()\n }}\n className=\"focus:outline-hidden\"\n >\n {dockItem}\n </button>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n\nconst DockItem = memo(function DockItem({\n action,\n index,\n hoveredIndex,\n focusedIndex,\n onHover,\n compact = false,\n}: {\n action: DockAction\n index: number\n hoveredIndex: number | null\n focusedIndex: number | null\n onHover: (index: number | null) => void\n compact?: boolean\n}) {\n const Icon = action.icon\n const accent = getDockAccent(action.id, action.accentRgb)\n const activeIndex = hoveredIndex ?? focusedIndex\n const isSelected = !!action.active\n const isInteractiveActive = activeIndex === index\n const isSignOutAction = action.id === 'signout'\n const itemSizeClass = compact ? 'h-11 w-11' : 'h-12 w-12 sm:h-14 sm:w-14'\n const iconSizeClass = compact ? 'h-5 w-5' : 'h-6 w-6 sm:h-7 sm:w-7'\n\n return (\n <div\n onMouseEnter={() => onHover(index)}\n onMouseLeave={() => onHover(null)}\n className=\"relative flex flex-col items-center pb-2.5\"\n title={action.label}\n >\n <div\n className={`relative flex ${itemSizeClass} items-center justify-center rounded-2xl ${\n isSelected\n ? 'liquid-surface liquid-surface-active'\n : isInteractiveActive\n ? `${accent.bg} ring-1 ring-neutral-400/20 dark:ring-white/15`\n : isSignOutAction\n ? 'liquid-button liquid-button-red'\n : 'liquid-button transition-colors'\n }`}\n style={isSelected ? { '--glass-accent': accent.rgb } as React.CSSProperties : undefined}\n >\n {!isInteractiveActive && !isSelected && (\n <div className=\"pointer-events-none absolute inset-0 rounded-2xl bg-gradient-to-br from-neutral-200/15 via-transparent to-transparent dark:from-white/10 dark:via-transparent dark:to-transparent\" />\n )}\n <Icon\n className={`${iconSizeClass} ${\n isSelected || isInteractiveActive\n ? accent.icon\n : 'text-neutral-600 dark:text-neutral-300'\n }`}\n />\n {action.badge && action.badge > 0 && (\n <span className=\"absolute -top-1 -right-1 min-w-[18px] h-[18px] px-1 rounded-full bg-red-500 text-white text-[10px] font-semibold flex items-center justify-center\">\n {action.badge > 99 ? '99+' : action.badge}\n </span>\n )}\n </div>\n {(isInteractiveActive || isSelected) && (\n <span\n className={`pointer-events-none absolute z-20 left-1/2 top-full mt-1 -translate-x-1/2 whitespace-nowrap rounded-md px-2 py-1 text-[11px] font-medium shadow-sm ${\n isSelected\n ? `${accent.bg} ${accent.icon}`\n : 'liquid-surface-strong text-slate-700 dark:text-slate-200'\n }`}\n >\n {action.label}\n </span>\n )}\n </div>\n )\n})\n","import { useEffect, useState } from 'react'\nimport { Dock, type DockAction } from '@ui/components/dock'\nimport { DockSkeleton } from '@ui/components/dock-skeleton'\n\ntype DockContainerProps = {\n navigationActions: DockAction[]\n contextualActions: DockAction[]\n position?: 'left' | 'right' | 'bottom'\n autoHide?: boolean\n enabled?: boolean\n tabletBreakpoint?: number\n className?: string\n}\n\n/**\n * Renders the Dock component with responsive viewport handling and skeleton loading.\n * Shows a skeleton until actions are populated, then transitions to the real Dock.\n * On tablet viewports (below tabletBreakpoint), forces bottom position.\n */\nexport function DockContainer({\n navigationActions,\n contextualActions,\n position = 'left',\n autoHide = false,\n enabled = true,\n tabletBreakpoint = 1024,\n className = 'hidden md:flex',\n}: DockContainerProps) {\n const [isTabletViewport, setIsTabletViewport] = useState(false)\n const [isReady, setIsReady] = useState(false)\n\n const hasActions = navigationActions.length > 0 || contextualActions.length > 0\n\n useEffect(() => {\n if (hasActions) {\n setIsReady(true)\n }\n }, [hasActions])\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const media = window.matchMedia(`(max-width: ${tabletBreakpoint}px)`)\n const syncViewport = () => setIsTabletViewport(media.matches)\n syncViewport()\n media.addEventListener('change', syncViewport)\n\n return () => media.removeEventListener('change', syncViewport)\n }, [tabletBreakpoint])\n\n if (!enabled || !hasActions) return null\n\n if (!isReady) {\n return <DockSkeleton className={className} />\n }\n\n return (\n <Dock\n navigationActions={navigationActions}\n contextualActions={contextualActions}\n position={isTabletViewport ? 'bottom' : position}\n autoHide={autoHide}\n className={className}\n />\n )\n}\n","import { ProgressBar } from 'react-transition-progress'\n\nexport function NavigationProgress() {\n return (\n <ProgressBar className=\"fixed h-1 top-0 z-[200] bg-gradient-to-r from-indigo-500 via-purple-500 to-pink-500 shadow-lg shadow-purple-500/20\" />\n )\n}\n","import { useTranslations } from '@ui/lib/i18n-context'\nimport { Spinner } from '@ui/components/spinner'\nimport clsx from 'clsx'\n\ntype PageLoadingStateProps = {\n label?: string\n compact?: boolean\n}\n\nexport function PageLoadingState({ label, compact = false }: PageLoadingStateProps) {\n const t = useTranslations('common')\n const resolvedLabel = label || t('loading')\n\n return (\n <div\n className={clsx(\n 'flex w-full items-center justify-center',\n compact ? 'py-6' : 'min-h-[calc(100dvh-9rem)] py-0'\n )}\n >\n <div\n className={clsx(\n 'liquid-surface relative overflow-hidden rounded-2xl',\n compact ? 'px-6 py-5' : 'px-10 py-8'\n )}\n >\n <div className=\"pointer-events-none absolute inset-0 bg-[linear-gradient(145deg,rgba(255,255,255,0.34)_0%,rgba(255,255,255,0.08)_40%,rgba(255,255,255,0)_100%)]\" />\n <div className=\"pointer-events-none absolute inset-x-8 top-0 h-px bg-white/85 blur-[0.5px] dark:bg-transparent\" />\n <div className=\"relative flex flex-col items-center gap-3\">\n <Spinner size={compact ? 'sm' : 'lg'} color=\"blue\" variant=\"circle\" />\n <p className=\"text-base font-medium text-slate-600 dark:text-slate-300\">{resolvedLabel}</p>\n </div>\n </div>\n </div>\n )\n}\n","import { Suspense, type ReactNode } from 'react'\nimport { NavigationProgress } from '@ui/components/navigation-progress'\nimport { PageLoadingState } from '@ui/components/page-loading-state'\n\nexport type AppShellProps = {\n children: ReactNode\n navigation: ReactNode\n dock?: ReactNode\n profileDrawer?: ReactNode\n initializers?: ReactNode\n sessionGuard?: ReactNode\n loadingLabel?: string\n}\n\nexport function AppShell({\n children,\n navigation,\n dock,\n profileDrawer,\n initializers,\n sessionGuard,\n loadingLabel = 'Loading...',\n}: AppShellProps) {\n return (\n <>\n {sessionGuard}\n {initializers}\n <NavigationProgress />\n {navigation}\n <Suspense fallback={<PageLoadingState label={loadingLabel} />}>\n {children}\n </Suspense>\n {dock}\n {profileDrawer}\n </>\n )\n}\n","import * as Headless from '@headlessui/react'\nimport clsx from 'clsx'\nimport React, { forwardRef } from 'react'\nimport { TouchTarget } from '@ui/components/button'\nimport { Link } from '@ui/components/link'\n\nexport type AvatarTone =\n | 'slate' | 'indigo' | 'violet' | 'purple' | 'fuchsia'\n | 'rose' | 'red' | 'amber' | 'emerald' | 'teal' | 'sky' | 'blue'\n\ntype AvatarProps = {\n src?: string | null\n square?: boolean\n initials?: string\n alt?: string\n /** Optional color tone. When set, the avatar renders as a glass\n * disc with a translucent tint of the tone (so initials/photo\n * stay readable on top); interactive variants illuminate with\n * the full tone fill on hover. Omit for a neutral glass disc. */\n tone?: AvatarTone\n className?: string\n}\n\n// Tone palette. Each tone has:\n// - `tint` — translucent fill at rest (glass shows through)\n// - `tintHover`— intensified fill on hover (color \"fills in\")\n// - `text` — readable foreground at rest\n// - `textHover`— inverted to white on hover so initials stay legible\n// on the now-saturated tone fill\n// - `glow` — drop-shadow bloom from .liquid-avatar-interactive\n// All rest combinations pass WCAG 1.4.3 AA on glass.\nconst TONE_STYLES: Record<AvatarTone, {\n tint: string; tintHover: string; text: string; textHover: string; glow: string\n}> = {\n slate: { tint: 'bg-slate-500/20', tintHover: 'hover:bg-slate-500/85', text: 'text-slate-700 dark:text-slate-200', textHover: 'hover:text-white', glow: 'rgba(100,116,139,0.55)' },\n indigo: { tint: 'bg-indigo-500/20', tintHover: 'hover:bg-indigo-500/85', text: 'text-indigo-700 dark:text-indigo-200', textHover: 'hover:text-white', glow: 'rgba(99,102,241,0.6)' },\n violet: { tint: 'bg-violet-500/20', tintHover: 'hover:bg-violet-500/85', text: 'text-violet-700 dark:text-violet-200', textHover: 'hover:text-white', glow: 'rgba(139,92,246,0.6)' },\n purple: { tint: 'bg-purple-500/20', tintHover: 'hover:bg-purple-500/85', text: 'text-purple-700 dark:text-purple-200', textHover: 'hover:text-white', glow: 'rgba(168,85,247,0.6)' },\n fuchsia: { tint: 'bg-fuchsia-500/20', tintHover: 'hover:bg-fuchsia-500/85', text: 'text-fuchsia-700 dark:text-fuchsia-200', textHover: 'hover:text-white', glow: 'rgba(217,70,239,0.6)' },\n rose: { tint: 'bg-rose-500/20', tintHover: 'hover:bg-rose-500/85', text: 'text-rose-700 dark:text-rose-200', textHover: 'hover:text-white', glow: 'rgba(244,63,94,0.6)' },\n red: { tint: 'bg-red-500/20', tintHover: 'hover:bg-red-500/85', text: 'text-red-700 dark:text-red-200', textHover: 'hover:text-white', glow: 'rgba(239,68,68,0.6)' },\n amber: { tint: 'bg-amber-500/20', tintHover: 'hover:bg-amber-500/85', text: 'text-amber-700 dark:text-amber-200', textHover: 'hover:text-white', glow: 'rgba(245,158,11,0.6)' },\n emerald: { tint: 'bg-emerald-500/20', tintHover: 'hover:bg-emerald-500/85', text: 'text-emerald-700 dark:text-emerald-200', textHover: 'hover:text-white', glow: 'rgba(16,185,129,0.6)' },\n teal: { tint: 'bg-teal-500/20', tintHover: 'hover:bg-teal-500/85', text: 'text-teal-700 dark:text-teal-200', textHover: 'hover:text-white', glow: 'rgba(20,184,166,0.6)' },\n sky: { tint: 'bg-sky-500/20', tintHover: 'hover:bg-sky-500/85', text: 'text-sky-700 dark:text-sky-200', textHover: 'hover:text-white', glow: 'rgba(14,165,233,0.6)' },\n blue: { tint: 'bg-blue-500/20', tintHover: 'hover:bg-blue-500/85', text: 'text-blue-700 dark:text-blue-200', textHover: 'hover:text-white', glow: 'rgba(59,130,246,0.6)' },\n}\n\n/**\n * Avatar — crystal disc. Glass at rest (via `.liquid-avatar`); when\n * `tone` is set the disc gets a translucent tint of the tone so\n * initials read as colored-on-glass instead of colored-on-solid.\n *\n * For the interactive variant (<AvatarButton>) we layer\n * `.liquid-avatar-interactive` on top — hover lifts the avatar,\n * intensifies the specular sheen, and blooms a tinted glow that\n * matches the tone. Same \"cristal iluminado\" pattern as the buttons.\n */\nexport function Avatar({\n src = null,\n square = false,\n initials,\n alt = '',\n tone,\n className,\n ...props\n}: AvatarProps & React.ComponentPropsWithoutRef<'span'>) {\n const toneCfg = tone ? TONE_STYLES[tone] : null\n return (\n <span\n data-slot=\"avatar\"\n {...props}\n // CSS custom property `--avatar-glow` powers the hover bloom in\n // `.liquid-avatar-interactive`. We set it per-tone so each\n // avatar's hover glow tints to its own color.\n style={\n toneCfg\n ? ({ '--avatar-glow': toneCfg.glow } as React.CSSProperties)\n : undefined\n }\n className={clsx(\n className,\n 'liquid-avatar transition-colors duration-200',\n // Tone tint at rest + intensified fill on hover (\"cristal\n // iluminado\": glass at rest, color floods in on hover, text\n // flips to white for legibility on the saturated fill).\n toneCfg && [toneCfg.tint, toneCfg.tintHover, toneCfg.text, toneCfg.textHover],\n // Basic layout\n 'inline-grid shrink-0 align-middle [--avatar-radius:22%] *:col-start-1 *:row-start-1',\n // Glass hair-line outline\n 'outline outline-1 -outline-offset-1 outline-white/60 dark:outline-white/12',\n // Border radius — the `.liquid-avatar::after` sheen inherits this.\n square\n ? 'rounded-(--avatar-radius) *:rounded-(--avatar-radius)'\n : 'rounded-full *:rounded-full',\n )}\n >\n {initials && (\n <svg\n className=\"size-full fill-current p-[5%] text-[48px] font-semibold uppercase select-none\"\n viewBox=\"0 0 100 100\"\n aria-hidden={alt ? undefined : 'true'}\n >\n {alt && <title>{alt}</title>}\n <text x=\"50%\" y=\"50%\" alignmentBaseline=\"middle\" dominantBaseline=\"middle\" textAnchor=\"middle\" dy=\".125em\">\n {initials}\n </text>\n </svg>\n )}\n {src && <img className=\"size-full object-cover\" src={src} alt={alt} width={40} height={40} />}\n </span>\n )\n}\n\nexport const AvatarButton = forwardRef(function AvatarButton(\n {\n src,\n square = false,\n initials,\n alt,\n tone,\n className,\n ...props\n }: AvatarProps &\n (\n | ({ href?: never } & Omit<Headless.ButtonProps, 'as' | 'className'>)\n | ({ href: string } & Omit<React.ComponentPropsWithoutRef<typeof Link>, 'className'>)\n ),\n ref: React.ForwardedRef<HTMLButtonElement | HTMLAnchorElement>\n) {\n let classes = clsx(\n className,\n 'liquid-avatar-interactive relative inline-grid',\n square ? 'rounded-[20%]' : 'rounded-full',\n 'focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-indigo-500/70',\n )\n\n if (typeof props.href === 'string') {\n return (\n <Link {...(props as React.ComponentPropsWithoutRef<typeof Link>)} className={classes} ref={ref as React.ForwardedRef<HTMLAnchorElement>}>\n <TouchTarget>\n <Avatar src={src} square={square} initials={initials} alt={alt} tone={tone} />\n </TouchTarget>\n </Link>\n )\n }\n\n return (\n <Headless.Button {...(props as Headless.ButtonProps)} className={classes} ref={ref as React.ForwardedRef<HTMLButtonElement>}>\n <TouchTarget>\n <Avatar src={src} square={square} initials={initials} alt={alt} tone={tone} />\n </TouchTarget>\n </Headless.Button>\n )\n})\n","import React, { useState, useRef, useCallback } from 'react'\nimport { CameraIcon, ArrowUpTrayIcon } from '@heroicons/react/24/outline'\nimport { Avatar } from './avatar'\n\nexport interface ImageUploadProps {\n /** Current image URL (S3 key or full URL) */\n src?: string | null\n /** Fallback initials when no image */\n initials?: string\n /** Alt text */\n alt?: string\n /** Size class (default: 'h-20 w-20') */\n sizeClass?: string\n /** Whether to show as square (default: circular) */\n square?: boolean\n /** Allowed MIME types */\n accept?: string\n /** Max file size in bytes (default: 5MB) */\n maxSizeBytes?: number\n /** Called when a file is selected and validated */\n onUpload: (file: File) => Promise<{ success: boolean; key?: string; error?: string }>\n /** Called after successful upload with the new S3 key */\n onUploaded?: (key: string) => void\n /** Hint text below the image */\n hint?: string\n /** Error text for invalid type */\n invalidTypeMessage?: string\n /** Error text for file too large */\n tooLargeMessage?: string\n /** Disabled state */\n disabled?: boolean\n}\n\nexport function ImageUpload({\n src,\n initials,\n alt = 'Upload image',\n sizeClass = 'h-20 w-20',\n square = false,\n accept = 'image/jpeg,image/png,image/webp',\n maxSizeBytes = 5 * 1024 * 1024,\n onUpload,\n onUploaded,\n hint,\n invalidTypeMessage = 'Invalid file type',\n tooLargeMessage = 'File too large',\n disabled = false,\n}: ImageUploadProps) {\n const [preview, setPreview] = useState<string | null>(null)\n const [isUploading, setIsUploading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const acceptSet = new Set(accept.split(',').map((t) => t.trim()))\n\n const handleChange = useCallback(async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0]\n if (!file) return\n\n setError(null)\n\n if (!acceptSet.has(file.type)) {\n setError(invalidTypeMessage)\n return\n }\n if (file.size > maxSizeBytes) {\n setError(tooLargeMessage)\n return\n }\n\n const previewUrl = URL.createObjectURL(file)\n setPreview(previewUrl)\n setIsUploading(true)\n\n try {\n const result = await onUpload(file)\n if (!result.success || !result.key) {\n throw new Error(result.error ?? 'Upload failed')\n }\n onUploaded?.(result.key)\n } catch (uploadError) {\n setError(uploadError instanceof Error ? uploadError.message : 'Upload failed')\n setPreview(null)\n } finally {\n setIsUploading(false)\n if (fileInputRef.current) fileInputRef.current.value = ''\n }\n }, [acceptSet, maxSizeBytes, invalidTypeMessage, tooLargeMessage, onUpload, onUploaded])\n\n const displaySrc = preview ?? src ?? undefined\n const roundedClass = square ? 'rounded-2xl' : 'rounded-full'\n\n return (\n <div className=\"flex flex-col items-center gap-3\">\n {/* Glass container around the avatar */}\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n disabled={disabled || isUploading}\n className=\"group relative cursor-pointer\"\n >\n {/* Glass ring around avatar */}\n <div className={`${roundedClass} p-1 bg-white/60 dark:bg-white/10 backdrop-blur-xl border border-white/40 dark:border-white/15 shadow-[0_4px_16px_-4px_rgba(0,0,0,0.12)] dark:shadow-[0_4px_16px_-4px_rgba(0,0,0,0.4)] transition group-hover:shadow-[0_8px_24px_-6px_rgba(0,0,0,0.18)] dark:group-hover:shadow-[0_8px_24px_-6px_rgba(0,0,0,0.6)]`}>\n <Avatar\n src={displaySrc}\n initials={initials}\n alt={alt}\n square={square}\n className={`${sizeClass} text-2xl`}\n />\n </div>\n\n {/* Hover overlay with glass effect */}\n <div className={`absolute inset-1 flex items-center justify-center ${roundedClass} bg-black/0 backdrop-blur-0 transition-all duration-200 group-hover:bg-black/30 group-hover:backdrop-blur-sm`}>\n {isUploading ? (\n <div className=\"h-6 w-6 animate-spin motion-reduce:animate-none rounded-full border-2 border-white/60 border-t-white drop-shadow-sm\" />\n ) : (\n <div className=\"flex flex-col items-center gap-0.5 opacity-0 transition-all duration-200 group-hover:opacity-100\">\n <CameraIcon className=\"h-6 w-6 text-white drop-shadow-sm\" />\n <ArrowUpTrayIcon className=\"h-3 w-3 text-white/80 drop-shadow-sm\" />\n </div>\n )}\n </div>\n\n {/* Success ring animation */}\n {preview && !isUploading && !error && (\n <div className={`absolute inset-0 ${roundedClass} ring-2 ring-green-500/60 animate-pulse motion-reduce:animate-none`} />\n )}\n </button>\n\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n onChange={handleChange}\n className=\"hidden\"\n />\n\n {error && (\n <p className=\"rounded-lg bg-red-500/10 px-3 py-1.5 text-xs font-medium text-red-600 backdrop-blur-sm dark:text-red-400\">\n {error}\n </p>\n )}\n {hint && !error && (\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {hint}\n </p>\n )}\n </div>\n )\n}\n","import { type ReactNode } from 'react'\nimport { Link } from '@ui/components/link'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { ChevronLeftIcon } from '@heroicons/react/20/solid'\n\nexport interface BreadcrumbPage {\n name: string\n href: string\n current: boolean\n}\n\ntype BreadcrumbProps = {\n pages: BreadcrumbPage[]\n actions?: ReactNode\n centerContent?: ReactNode\n dashboardPath?: string\n}\n\nexport function Breadcrumb({ pages, actions, centerContent, dashboardPath = '/dashboard' }: BreadcrumbProps) {\n const t = useTranslations('common')\n const currentPage = pages.find((page) => page.current) || pages[pages.length - 1]\n const parentPage = pages.length > 1 ? pages[pages.length - 2] : null\n\n return (\n <nav\n aria-label={t('breadcrumb')}\n className=\"liquid-surface-strong sticky top-2 z-30 mx-4 rounded-2xl sm:mx-6 lg:mx-8\"\n >\n <div className=\"grid w-full grid-cols-[1fr_auto_1fr] items-center gap-3 px-4 py-2.5 sm:px-6 lg:px-8\">\n <div className=\"min-w-0\">\n {parentPage ? (\n <Link\n href={parentPage.href}\n className=\"inline-flex max-w-full items-center gap-1 rounded-full px-2 py-1 text-sm font-medium text-slate-600 hover:bg-white/60 dark:text-slate-300 dark:hover:bg-white/10\"\n >\n <ChevronLeftIcon className=\"h-4 w-4 shrink-0\" />\n <span className=\"truncate\">{parentPage.name}</span>\n </Link>\n ) : (\n <Link\n href={dashboardPath}\n className=\"inline-flex items-center gap-1 rounded-full px-2 py-1 text-sm font-medium text-slate-600 hover:bg-white/60 dark:text-slate-300 dark:hover:bg-white/10\"\n >\n <ChevronLeftIcon className=\"h-4 w-4 shrink-0\" />\n <span>{t('home')}</span>\n </Link>\n )}\n </div>\n\n <div className=\"min-w-0 justify-self-center text-center\">\n {centerContent ? (\n centerContent\n ) : (\n <p className=\"truncate text-sm font-semibold text-slate-900 dark:text-white\">\n {currentPage?.name || t('home')}\n </p>\n )}\n </div>\n\n <div className=\"min-w-0 justify-self-end\">\n {actions && <div className=\"flex items-center gap-1.5\">{actions}</div>}\n </div>\n </div>\n </nav>\n )\n}\n","import { PlusCircleIcon } from '@heroicons/react/24/outline'\nimport { Button } from '@ui/components/button'\n\ninterface CreateActionButtonProps {\n label: string\n onClick: () => void\n className?: string\n accent?: string\n mode?: 'responsive' | 'desktop' | 'mobile'\n}\n\nexport function CreateActionButton({\n label,\n onClick,\n className,\n mode = 'responsive',\n}: CreateActionButtonProps) {\n const buttonContent = (\n <Button\n type=\"button\"\n onClick={onClick}\n color=\"ios-glass-blue\"\n className={`h-12 ${className ?? ''}`}\n >\n <PlusCircleIcon className=\"h-4 w-4\" />\n {label}\n </Button>\n )\n\n if (mode === 'desktop') {\n return buttonContent\n }\n\n if (mode === 'mobile') {\n return (\n <div className=\"fixed right-4 bottom-[calc(env(safe-area-inset-bottom)+1rem)] z-[80] md:hidden\">\n {buttonContent}\n </div>\n )\n }\n\n return (\n <>\n <div className=\"hidden md:flex md:items-center md:justify-end\">{buttonContent}</div>\n <div className=\"fixed right-4 bottom-[calc(env(safe-area-inset-bottom)+1rem)] z-[80] md:hidden\">\n {buttonContent}\n </div>\n </>\n )\n}\n","/**\n * Dev Mode Banner\n * ================\n *\n * Shows a warning banner when running in dev mode.\n * Displays the simulated user info, role, detected app, and port for debugging.\n */\n\nimport { useCallback, useState } from 'react'\nimport {\n BeakerIcon,\n EyeDropperIcon,\n WrenchScrewdriverIcon,\n ServerStackIcon,\n GlobeAltIcon,\n} from '@heroicons/react/24/outline'\n\ntype DevModeBannerUser = {\n email?: string\n role?: string\n}\n\ntype DevModeBannerProps = {\n user?: DevModeBannerUser | null\n devModeLabel?: string\n devModeMessage?: string\n}\n\nconst APP_COLORS: Record<string, string> = {\n astrlabe: 'bg-sky-500/30 text-sky-100 ring-sky-400/30',\n windsock: 'bg-indigo-500/30 text-indigo-100 ring-indigo-400/30',\n}\n\nfunction detectApp(): { name: string; port: string; gateway: string } {\n const appName = process.env.NEXT_PUBLIC_APP_NAME\n ?? process.env.NEXT_PUBLIC_AUTH_CLIENT_ID\n ?? 'unknown'\n\n const port = typeof window !== 'undefined' ? window.location.port : ''\n\n const gateway = process.env.NEXT_PUBLIC_API_GATEWAY_URL\n ?? process.env.NEXT_PUBLIC_LAMBDA_CLIENT_BASE\n ?? ''\n\n return { name: appName, port, gateway }\n}\n\nexport function DevModeBanner({\n user,\n devModeLabel = \"DEV\",\n devModeMessage = \"Local development mode\",\n}: DevModeBannerProps) {\n const [glassTest, setGlassTest] = useState(false)\n\n const toggleGlassTest = useCallback(() => {\n const html = document.documentElement\n const next = !glassTest\n html.classList.toggle(\"glass-test\", next)\n setGlassTest(next)\n }, [glassTest])\n\n // Only show when NEXT_PUBLIC_DEV_MODE is enabled\n if (process.env.NEXT_PUBLIC_DEV_MODE !== \"true\") {\n return null\n }\n\n const app = detectApp()\n const appColor = APP_COLORS[app.name] ?? 'bg-white/10 text-violet-200 ring-white/20'\n\n return (\n <div className=\"relative isolate flex items-center gap-x-6 overflow-hidden bg-violet-900/90 dark:bg-violet-950/95 px-6 py-2 sm:px-4\">\n {/* Gradient background effects */}\n <div\n aria-hidden=\"true\"\n className=\"absolute left-[max(-7rem,calc(50%-52rem))] top-1/2 -z-10 -translate-y-1/2 blur-2xl\"\n >\n <div\n style={{\n clipPath:\n 'polygon(74.8% 41.9%, 97.2% 73.2%, 100% 34.9%, 92.5% 0.4%, 87.5% 0%, 75% 28.6%, 58.5% 54.6%, 50.1% 56.8%, 46.9% 44%, 48.3% 17.4%, 24.7% 53.9%, 0% 27.9%, 11.9% 74.2%, 24.9% 54.1%, 68.6% 100%, 74.8% 41.9%)',\n }}\n className=\"aspect-[577/310] w-[36rem] bg-gradient-to-r from-violet-400 to-purple-500 opacity-30\"\n />\n </div>\n\n {/* Content */}\n <div className=\"flex flex-1 flex-wrap items-center justify-between gap-x-4 gap-y-2\">\n <div className=\"flex items-center gap-2 text-violet-50\">\n <BeakerIcon className=\"h-4 w-4 text-violet-300\" />\n <strong className=\"text-xs font-bold tracking-wider\">{devModeLabel}</strong>\n <svg viewBox=\"0 0 2 2\" aria-hidden=\"true\" className=\"mx-1 inline size-0.5 fill-current\">\n <circle r={1} cx={1} cy={1} />\n </svg>\n <span className=\"hidden sm:inline text-xs text-violet-200\">\n {devModeMessage}\n </span>\n </div>\n\n <div className=\"flex items-center gap-2 text-xs\">\n {/* App detection badge */}\n <span className={`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] font-bold ring-1 ring-inset uppercase tracking-wider ${appColor}`}>\n <ServerStackIcon className=\"h-3 w-3\" />\n {app.name}\n </span>\n\n {/* Port */}\n {app.port && (\n <span className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] font-mono bg-white/10 text-violet-200 ring-1 ring-inset ring-white/20\">\n <GlobeAltIcon className=\"h-3 w-3\" />\n :{app.port}\n </span>\n )}\n\n {/* Gateway */}\n {app.gateway && (\n <span className=\"hidden lg:inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] font-mono bg-white/10 text-violet-200 ring-1 ring-inset ring-white/20\">\n gw {app.gateway.replace('http://localhost:', ':')}\n </span>\n )}\n\n {/* User email */}\n {user?.email && (\n <code className=\"px-2 py-0.5 rounded bg-white/10 text-violet-100 text-[10px] font-mono ring-1 ring-inset ring-white/20\">\n {user.email}\n </code>\n )}\n\n {/* User role */}\n {user?.role && (\n <span className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] font-semibold bg-violet-500/30 text-violet-100 ring-1 ring-inset ring-violet-400/30 uppercase\">\n <WrenchScrewdriverIcon className=\"h-3 w-3\" />\n {user.role}\n </span>\n )}\n\n {/* Glass test toggle */}\n <button\n type=\"button\"\n onClick={toggleGlassTest}\n className={`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] font-semibold ring-1 ring-inset transition-colors ${\n glassTest\n ? \"bg-red-500/40 text-red-100 ring-red-400/40\"\n : \"bg-white/10 text-violet-200 ring-white/20 hover:bg-white/15\"\n }`}\n >\n <EyeDropperIcon className=\"h-3 w-3\" />\n Glass\n </button>\n </div>\n </div>\n </div>\n )\n}\n","import clsx from 'clsx'\n\nexport function Divider({\n soft = false,\n className,\n ...props\n}: { soft?: boolean } & React.ComponentPropsWithoutRef<'hr'>) {\n return (\n <hr\n role=\"presentation\"\n {...props}\n className={clsx(\n className,\n 'w-full border-t',\n soft && 'border-zinc-950/5 dark:border-white/5',\n !soft && 'border-zinc-950/10 dark:border-white/10'\n )}\n />\n )\n}\n","/**\n * DynamicIslandConfirm\n * ====================\n *\n * iOS Dynamic Island-style confirmation dialog.\n * Top-positioned black pill with icon, title, and 2-column button layout.\n * Matches the logout warning pattern from auth-context.tsx.\n */\n\n'use client'\n\nimport { type ReactNode, useEffect } from 'react'\nimport { Dialog, DialogPanel } from '@headlessui/react'\nimport { TrashIcon } from '@heroicons/react/24/outline'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype DynamicIslandConfirmProps = {\n open: boolean\n onClose: () => void\n onConfirm: () => void\n title: string\n icon?: ReactNode\n iconBackground?: string\n appName?: string\n confirmLabel?: string\n cancelLabel?: string\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function DynamicIslandConfirm({\n open,\n onClose,\n onConfirm,\n title,\n icon,\n iconBackground = 'bg-ios-red',\n appName = 'App',\n confirmLabel,\n cancelLabel,\n}: DynamicIslandConfirmProps) {\n const resolvedConfirmLabel = confirmLabel ?? 'Confirm'\n const resolvedCancelLabel = cancelLabel ?? 'Cancel'\n\n useEffect(() => {\n if (open) {\n triggerHaptic('warning')\n }\n }, [open])\n\n return (\n <Dialog open={open} onClose={onClose} className=\"relative z-[120]\" aria-labelledby=\"dynamic-island-title\">\n <div className=\"fixed inset-0 bg-black/10 backdrop-blur-[2px]\" />\n <div className=\"fixed inset-0 flex items-start justify-center pt-3 px-4\">\n <DialogPanel className=\"w-full max-w-sm rounded-[28px] bg-black/95 p-3 text-white shadow-2xl\">\n <div className=\"flex items-center gap-3 px-2 py-1\">\n <div className={`h-9 w-9 shrink-0 rounded-xl ${iconBackground} flex items-center justify-center`}>\n {icon ?? <TrashIcon className=\"h-5 w-5 text-white\" />}\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-[11px] uppercase tracking-wide text-gray-500\">{appName}</p>\n <p id=\"dynamic-island-title\" className=\"text-sm font-semibold\">{title}</p>\n </div>\n </div>\n <div className=\"mt-2 grid grid-cols-2 gap-2\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"rounded-xl bg-white/10 px-3 py-3 text-sm font-medium hover:bg-white/15 focus-visible:ring-2 focus-visible:ring-white/70\"\n >\n {resolvedCancelLabel}\n </button>\n <button\n type=\"button\"\n onClick={onConfirm}\n className=\"rounded-xl bg-ios-red px-3 py-3 text-sm font-semibold text-white hover:bg-ios-red-hover focus-visible:ring-2 focus-visible:ring-white/70\"\n >\n {resolvedConfirmLabel}\n </button>\n </div>\n </DialogPanel>\n </div>\n </Dialog>\n )\n}\n","import { Dialog, DialogBackdrop, DialogPanel } from '@headlessui/react'\nimport type { ReactNode } from 'react'\n\ntype FlyoutMenuProps = {\n open: boolean\n onClose: () => void\n title?: ReactNode\n children: ReactNode\n maxWidthClassName?: string\n panelClassName?: string\n}\n\nconst defaultPanelClassName =\n 'overflow-y-auto overscroll-contain rounded-2xl border border-white/65 bg-white/60 text-sm/6 shadow-[inset_0_1px_0_rgba(255,255,255,0.9),0_20px_44px_-24px_rgba(15,23,42,0.45)] backdrop-blur-3xl backdrop-saturate-150 max-h-[calc(100dvh-1rem)] sm:max-h-[calc(100dvh-7.5rem)] dark:border-white/15 dark:bg-white/[0.06] dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.18),0_22px_46px_-24px_rgba(0,0,0,0.8)] dark:-outline-offset-1'\n\nexport function FlyoutMenu({\n open,\n onClose,\n title,\n children,\n maxWidthClassName = 'max-w-4xl',\n panelClassName,\n}: FlyoutMenuProps) {\n return (\n <Dialog open={open} onClose={onClose} className=\"relative z-50\">\n <DialogBackdrop className=\"fixed inset-0 bg-slate-900/35 backdrop-blur-sm dark:bg-black/45\" />\n <div className=\"fixed inset-0 flex items-start justify-center p-2 pt-[max(2.75rem,env(safe-area-inset-top))] sm:p-4 sm:pt-20\">\n <DialogPanel className={`w-screen ${maxWidthClassName} ${panelClassName ?? defaultPanelClassName}`}>\n {title ? (\n <div className=\"p-4\">\n <div className=\"mb-3 flex items-center justify-center\">{title}</div>\n {children}\n </div>\n ) : (\n children\n )}\n </DialogPanel>\n </div>\n </Dialog>\n )\n}\n","type ThemeSwitchProps = {\n checked: boolean\n onChange: () => void\n label: string\n className?: string\n}\n\nexport function ThemeSwitch({ checked, onChange, label, className }: ThemeSwitchProps) {\n return (\n <button\n type=\"button\"\n onClick={(event) => {\n event.stopPropagation()\n onChange()\n }}\n className={`relative inline-flex h-7 w-12 items-center rounded-full border border-white/65 px-1 shadow-[inset_0_1px_0_rgba(255,255,255,0.7)] transition dark:border-white/20 ${\n checked\n ? 'bg-blue-600/95'\n : 'bg-slate-300/85 dark:bg-slate-700/90'\n } ${className ?? ''}`}\n aria-label={label}\n aria-pressed={checked}\n >\n <span\n className={`inline-block h-5 w-5 transform rounded-full shadow transition ${\n checked\n ? 'translate-x-5 bg-white shadow-[0_0_0_2px_rgba(255,255,255,0.2),0_0_10px_rgba(59,130,246,0.45)]'\n : 'translate-x-0 bg-white'\n }`}\n />\n </button>\n )\n}\n","import { useTranslations } from '@ui/lib/i18n-context'\nimport {\n BellIcon,\n SunIcon,\n MoonIcon,\n UserCircleIcon,\n ArrowRightOnRectangleIcon,\n} from '@heroicons/react/24/outline'\nimport { ThemeSwitch } from '@ui/components/theme-switch'\n\ntype FlyoutQuickActionsProps = {\n /** Current resolved theme ('light' | 'dark') */\n resolvedTheme: 'light' | 'dark'\n /** Toggle theme callback */\n onToggleTheme: () => void\n /** Open notification history */\n onNotifications?: () => void\n /** Notification badge count */\n notificationCount?: number\n /** Open user profile */\n onProfile: () => void\n /** User display name for profile button */\n userName?: string\n /** User initials for avatar */\n userInitial?: string\n /** Sign out callback */\n onSignOut: () => void\n /** Close the flyout after action */\n onClose?: () => void\n}\n\nexport function FlyoutQuickActions({\n resolvedTheme,\n onToggleTheme,\n onNotifications,\n notificationCount = 0,\n onProfile,\n userName,\n userInitial,\n onSignOut,\n onClose,\n}: FlyoutQuickActionsProps) {\n const t = useTranslations('common')\n const isDark = resolvedTheme === 'dark'\n\n const handleAction = (action: () => void) => {\n onClose?.()\n action()\n }\n\n return (\n <>\n <div className=\"mx-3 my-3 h-px bg-gradient-to-r from-transparent via-gray-200/80 to-transparent dark:via-white/10\" />\n <div className=\"grid grid-cols-2 gap-1.5 sm:gap-2 px-1\">\n {/* Notifications */}\n {onNotifications ? (\n <button\n type=\"button\"\n onClick={() => handleAction(onNotifications)}\n className=\"liquid-surface m-1 flex items-center justify-center gap-x-2 rounded-xl p-2.5 text-xs font-semibold sm:gap-x-2.5 sm:p-3 sm:text-sm text-slate-900 dark:text-white\"\n >\n <BellIcon className=\"size-5 flex-none text-slate-400 dark:text-slate-500\" />\n <span className=\"truncate\">{t('notifications')}</span>\n {notificationCount > 0 && (\n <span className=\"inline-flex min-w-[18px] items-center justify-center rounded-full bg-red-500 px-1 text-[10px] font-semibold text-white\">\n {notificationCount > 99 ? '99+' : notificationCount}\n </span>\n )}\n </button>\n ) : null}\n\n {/* Theme */}\n <div className=\"liquid-surface m-1 flex items-center justify-center gap-x-2 rounded-xl p-2.5 text-xs font-semibold sm:gap-x-2.5 sm:p-3 sm:text-sm text-slate-900 dark:text-white\">\n {isDark ? (\n <MoonIcon className=\"size-5 flex-none text-slate-400 dark:text-slate-500\" />\n ) : (\n <SunIcon className=\"size-5 flex-none text-slate-400 dark:text-slate-500\" />\n )}\n <span className=\"truncate\">{t('theme')}</span>\n <ThemeSwitch checked={isDark} onChange={onToggleTheme} label={t('theme')} />\n </div>\n\n {/* Profile */}\n <button\n type=\"button\"\n onClick={() => handleAction(onProfile)}\n className=\"liquid-surface m-1 flex items-center justify-center gap-x-2 rounded-xl p-2.5 text-xs font-semibold sm:gap-x-2.5 sm:p-3 sm:text-sm text-slate-900 dark:text-white\"\n >\n {userInitial ? (\n <span className=\"inline-flex h-5 w-5 items-center justify-center rounded-full bg-slate-200 text-[10px] font-semibold text-slate-700 dark:bg-slate-700 dark:text-slate-100\">\n {userInitial}\n </span>\n ) : (\n <UserCircleIcon className=\"size-5 flex-none text-slate-400 dark:text-slate-500\" />\n )}\n <span className=\"truncate\">{userName || t('profile')}</span>\n </button>\n\n {/* Sign out */}\n <button\n type=\"button\"\n onClick={() => handleAction(onSignOut)}\n className=\"liquid-button liquid-button-red m-1 flex items-center justify-center gap-x-2 rounded-xl p-2.5 text-xs font-semibold sm:gap-x-2.5 sm:p-3 sm:text-sm text-red-600 dark:text-red-400\"\n >\n <ArrowRightOnRectangleIcon className=\"size-5 flex-none text-slate-400 dark:text-slate-500\" />\n <span className=\"truncate\">{t('signOut')}</span>\n </button>\n </div>\n </>\n )\n}\n","import { useState, useMemo, type CSSProperties, type ComponentType } from 'react'\nimport { MagnifyingGlassIcon } from '@heroicons/react/24/outline'\nimport { useTranslations } from '@ui/lib/i18n-context'\n\nexport type FlyoutNavItem = {\n id: string\n label: string\n subtitle?: string\n href: string\n icon: ComponentType<{ className?: string }>\n gradient: string\n hoverClass?: string\n /** When defined, triggers this callback instead of navigating via href. */\n onClick?: () => void\n}\n\ntype FlyoutNavGridProps = {\n items: FlyoutNavItem[]\n currentPath: string\n onNavigate: (href: string) => void\n showSearch?: boolean\n /** Function to resolve the glass accent RGB for a given href */\n getAccentRgb?: (href: string) => string\n /** CSS class for the search input focus ring (default \"focus-ring-indigo\") */\n searchFocusRingClass?: string\n}\n\nexport function FlyoutNavGrid({\n items,\n currentPath,\n onNavigate,\n showSearch = true,\n getAccentRgb,\n searchFocusRingClass = 'focus-ring-indigo',\n}: FlyoutNavGridProps) {\n const t = useTranslations('common')\n const [query, setQuery] = useState('')\n\n const isCurrentPath = (href: string) =>\n href === '/dashboard' ? currentPath === '/dashboard' : currentPath.startsWith(href)\n\n const normalizedQuery = query.trim().toLowerCase()\n const filteredItems = useMemo(\n () =>\n normalizedQuery\n ? items.filter((item) =>\n `${item.label} ${item.subtitle ?? ''}`.toLowerCase().includes(normalizedQuery),\n )\n : items,\n [items, normalizedQuery],\n )\n\n return (\n <>\n {/* Search */}\n {showSearch && (\n <div className=\"mb-2 sm:mb-3\">\n <div className=\"relative\">\n <MagnifyingGlassIcon className=\"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400 dark:text-slate-500\" />\n <input\n type=\"text\"\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n placeholder={t('searchPlaceholder')}\n className={`liquid-surface w-full rounded-xl py-1.5 pl-8 pr-2.5 text-xs sm:py-2 sm:pl-9 sm:pr-3 sm:text-sm text-slate-900 outline-none placeholder:text-slate-400 ${searchFocusRingClass} dark:text-white dark:placeholder:text-slate-500`}\n />\n </div>\n </div>\n )}\n\n {/* Navigation grid */}\n <div className=\"grid grid-cols-1 gap-1.5 sm:gap-2 sm:grid-cols-2\">\n {filteredItems.map((item) => {\n const isSelected = isCurrentPath(item.href)\n return (\n <button\n key={item.href}\n type=\"button\"\n onClick={() => item.onClick ? item.onClick() : onNavigate(item.href)}\n className={`group relative flex w-full items-start gap-x-3 sm:gap-x-4 rounded-xl sm:rounded-2xl p-2.5 sm:p-3 text-left transition ${\n isSelected\n ? 'selected liquid-surface liquid-surface-active'\n : `liquid-surface hover:shadow-md ${item.hoverClass ?? ''}`\n }`}\n style={\n isSelected && getAccentRgb\n ? ({ '--glass-accent': getAccentRgb(item.href) } as CSSProperties)\n : undefined\n }\n >\n {/* Icon container with glass effect */}\n <div className=\"relative mt-0.5 flex h-11 w-11 sm:h-14 sm:w-14 flex-none items-center justify-center overflow-hidden rounded-xl sm:rounded-2xl border border-white/40 bg-white/35 shadow-[inset_0_1px_0_rgba(255,255,255,0.85),0_12px_20px_-14px_rgba(15,23,42,0.55)] dark:border-white/14 dark:bg-white/10 dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.2),0_12px_22px_-16px_rgba(0,0,0,0.8)]\">\n <div\n className={`pointer-events-none absolute inset-0 bg-gradient-to-br ${item.gradient} opacity-85 dark:opacity-70`}\n />\n <div className=\"pointer-events-none absolute inset-0 bg-[linear-gradient(140deg,rgba(255,255,255,0.42)_0%,rgba(255,255,255,0.12)_42%,rgba(255,255,255,0)_100%)]\" />\n <item.icon\n aria-hidden=\"true\"\n className=\"relative size-5 sm:size-7 text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.22)]\"\n />\n </div>\n\n {/* Label + subtitle */}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm sm:text-base font-semibold text-slate-900 transition-colors group-hover:text-slate-950 dark:text-white dark:group-hover:text-white break-words whitespace-normal\">\n {item.label}\n </p>\n {item.subtitle && (\n <p className=\"mt-0.5 sm:mt-1 text-[11px] sm:text-xs text-slate-500 dark:text-slate-400 break-words whitespace-normal\">\n {item.subtitle}\n </p>\n )}\n </div>\n </button>\n )\n })}\n </div>\n\n {/* No results */}\n {filteredItems.length === 0 && (\n <p className=\"mt-3 rounded-xl border border-white/60 bg-white/70 px-3 py-2 text-center text-xs text-slate-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-400\">\n {t('noResults')}\n </p>\n )}\n </>\n )\n}\n","import clsx from 'clsx'\n\ntype HeadingProps = { level?: 1 | 2 | 3 | 4 | 5 | 6 } & React.ComponentPropsWithoutRef<\n 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'\n>\n\nexport function Heading({ className, level = 1, ...props }: HeadingProps) {\n let Element: `h${typeof level}` = `h${level}`\n\n return (\n <Element\n {...props}\n className={clsx(className, 'text-2xl/8 font-semibold text-zinc-950 sm:text-xl/8 dark:text-white')}\n />\n )\n}\n\nexport function Subheading({ className, level = 2, ...props }: HeadingProps) {\n let Element: `h${typeof level}` = `h${level}`\n\n return (\n <Element\n {...props}\n className={clsx(className, 'text-base/7 font-semibold text-zinc-950 sm:text-sm/6 dark:text-white')}\n />\n )\n}\n","import { useState } from 'react'\nimport { Dialog, DialogBackdrop, DialogPanel } from '@headlessui/react'\nimport { CheckCircleIcon, LanguageIcon } from '@heroicons/react/24/outline'\n\nexport type LanguageOption = {\n code: string\n label: string\n flag: string\n badge: string\n}\n\ntype LanguageSwitcherProps = {\n languages: LanguageOption[]\n currentLocale: string\n onLocaleChange: (locale: string) => void\n changeLanguageLabel?: string\n}\n\nexport function LanguageSwitcher({\n languages,\n currentLocale,\n onLocaleChange,\n changeLanguageLabel = \"Change language\",\n}: LanguageSwitcherProps) {\n const [open, setOpen] = useState(false)\n\n const handleLanguageChange = (code: string) => {\n onLocaleChange(code)\n setOpen(false)\n }\n\n const currentLanguage = languages.find((language) => language.code === currentLocale) ?? languages[0]\n\n return (\n <>\n <button\n onClick={() => setOpen(true)}\n className=\"inline-flex items-center gap-1.5 h-8 px-2 rounded-lg border border-gray-300 bg-white hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-700 dark:hover:bg-gray-600 transition-colors text-sm\"\n aria-label={changeLanguageLabel}\n >\n <LanguageIcon className=\"h-4 w-4 text-gray-500 dark:text-gray-300\" />\n <span className=\"text-lg leading-none\">{currentLanguage.flag}</span>\n </button>\n\n <Dialog className=\"relative z-50\" open={open} onClose={setOpen}>\n <DialogBackdrop className=\"fixed inset-0 bg-slate-900/35 backdrop-blur-sm\" />\n <div className=\"fixed inset-0 z-50 grid place-items-center p-4\">\n <DialogPanel className=\"w-full max-w-md liquid-surface rounded-2xl border border-white/45 p-4 dark:border-white/12\">\n <h3 className=\"mb-3 text-sm font-semibold uppercase tracking-wide text-slate-600 dark:text-slate-300\">\n {changeLanguageLabel}\n </h3>\n <div className=\"grid grid-cols-4 gap-2\">\n {languages.map((language) => {\n const selected = currentLocale === language.code\n return (\n <button\n key={language.code}\n onClick={() => handleLanguageChange(language.code)}\n className={`relative rounded-xl border px-2 py-2 text-center transition ${\n selected\n ? \"liquid-glass-indigo border-indigo-500/60 text-indigo-700 dark:text-indigo-200\"\n : \"liquid-surface border-white/50 text-slate-700 hover:border-indigo-300 dark:border-white/14 dark:text-slate-200\"\n }`}\n >\n <span className=\"block text-base leading-none\">{language.flag}</span>\n <span className=\"mt-1 block text-[10px] font-semibold\">{language.badge}</span>\n {selected && <CheckCircleIcon className=\"absolute right-1 top-1 h-3.5 w-3.5\" />}\n </button>\n )\n })}\n </div>\n <p className=\"mt-3 text-xs text-slate-500 dark:text-slate-400\">\n {currentLanguage.label} ({currentLocale})\n </p>\n </DialogPanel>\n </div>\n </Dialog>\n </>\n )\n}\n","import { MagnifyingGlassIcon } from '@heroicons/react/24/outline'\n\ntype LiquidFilterInputProps = {\n value: string\n onChange: (value: string) => void\n placeholder: string\n label?: string\n className?: string\n}\n\nexport function LiquidFilterInput({ value, onChange, placeholder, label, className = '' }: LiquidFilterInputProps) {\n return (\n <div className={className}>\n {label && (\n <label className=\"mb-1.5 block text-xs font-medium text-slate-600 dark:text-slate-300\">{label}</label>\n )}\n <div className=\"relative\">\n <MagnifyingGlassIcon className=\"pointer-events-none absolute left-3.5 top-1/2 h-5 w-5 -translate-y-1/2 text-slate-400 dark:text-slate-500\" />\n <input\n type=\"text\"\n value={value}\n onChange={(event) => onChange(event.target.value)}\n placeholder={placeholder}\n className=\"liquid-surface h-12 w-full rounded-xl pl-11 pr-3 text-base text-slate-900 dark:text-white outline-none transition placeholder:text-slate-500 dark:placeholder:text-slate-400 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1\"\n />\n </div>\n </div>\n )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\n\ninterface ManagementSurfaceProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode\n}\n\nexport function ManagementSurface({ children, className = '', ...props }: ManagementSurfaceProps) {\n return (\n <div\n className={`liquid-surface-container rounded-2xl p-4 sm:p-5 ${className}`.trim()}\n {...props}\n >\n <div className=\"space-y-4\">{children}</div>\n </div>\n )\n}\n","import * as React from 'react'\nimport * as Popover from '@radix-ui/react-popover'\nimport { CalendarIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react'\nimport { format, parse, type Locale } from 'date-fns'\nimport { ptBR, enUS, fr, es } from 'date-fns/locale'\nimport { useLocale, useTranslations } from '@ui/lib/i18n-context'\n\ntype MonthPickerProps = {\n value: string // YYYY-MM format\n onChange: (value: string) => void\n availableMonths: string[] // Array of YYYY-MM strings\n placeholder?: string\n /** Remove border and shadow when inside a unified container */\n noBorder?: boolean\n /** Optional custom trigger content (used for card-style triggers) */\n triggerContent?: React.ReactNode\n /** Optional extra classes for trigger button */\n triggerClassName?: string\n /** Optional extra classes for popover content */\n contentClassName?: string\n /** Popover side direction */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n /** Whether popover can auto-flip when space is constrained */\n avoidCollisions?: boolean\n}\n\n// Map next-intl locales to date-fns locales\nconst dateFnsLocales: Record<string, Locale> = {\n \"pt-BR\": ptBR,\n \"en\": enUS,\n \"fr\": fr,\n \"es\": es,\n}\n\n// Generate localized month abbreviations\nfunction getLocalizedMonths(locale: Locale): string[] {\n return Array.from({ length: 12 }, (_, i) => {\n const date = new Date(2024, i, 1)\n return format(date, \"MMM\", { locale })\n })\n}\n\nexport function MonthPicker({\n value,\n onChange,\n availableMonths,\n placeholder,\n noBorder = false,\n triggerContent,\n triggerClassName = \"\",\n contentClassName = \"\",\n side = \"bottom\",\n avoidCollisions = true,\n}: MonthPickerProps) {\n const locale = useLocale()\n const t = useTranslations(\"common\")\n const dateFnsLocale = dateFnsLocales[locale] || ptBR\n const months = React.useMemo(() => getLocalizedMonths(dateFnsLocale), [dateFnsLocale])\n const defaultPlaceholder = t(\"selectMonth\")\n const [open, setOpen] = React.useState(false)\n\n // Get available years from the data\n const availableYears = React.useMemo(() => {\n const years = new Set(availableMonths.map(m => parseInt(m.split(\"-\")[0])))\n return Array.from(years).sort((a, b) => b - a) // Sort descending (newest first)\n }, [availableMonths])\n\n // Current viewing year (default to the year of selected value or first available)\n const [viewYear, setViewYear] = React.useState(() => {\n if (value) return parseInt(value.split(\"-\")[0])\n if (availableYears.length > 0) return availableYears[0]\n return new Date().getFullYear()\n })\n\n // Check if a month is available\n const isMonthAvailable = React.useCallback((year: number, monthIndex: number) => {\n const monthStr = `${year}-${String(monthIndex + 1).padStart(2, \"0\")}`\n return availableMonths.includes(monthStr)\n }, [availableMonths])\n\n // Format display value\n const displayValue = React.useMemo(() => {\n if (!value) return placeholder || defaultPlaceholder\n try {\n const date = parse(value, \"yyyy-MM\", new Date())\n return format(date, \"MMMM yyyy\", { locale: dateFnsLocale })\n } catch {\n return value\n }\n }, [value, placeholder, defaultPlaceholder, dateFnsLocale])\n\n // Handle month selection\n const handleSelectMonth = (monthIndex: number) => {\n const monthStr = `${viewYear}-${String(monthIndex + 1).padStart(2, \"0\")}`\n onChange(monthStr)\n setOpen(false)\n }\n\n // Navigation\n const canGoPrev = availableYears.some(y => y < viewYear)\n const canGoNext = availableYears.some(y => y > viewYear)\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className={\n `${\n noBorder\n ? \"flex items-center justify-center gap-2 text-sm bg-transparent px-4 h-full min-h-[52px] text-slate-900 dark:text-white hover:bg-white/30 dark:hover:bg-white/[0.06] focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1 transition-all duration-200 active:scale-[0.985]\"\n : \"liquid-surface flex items-center justify-center gap-2 text-sm rounded-xl px-4 h-[52px] text-slate-900 dark:text-white hover:bg-white/30 dark:hover:bg-white/[0.06] focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1 transition-all duration-200 active:scale-[0.985]\"\n } ${triggerClassName}`.trim()\n }\n >\n {triggerContent ?? (\n <>\n <CalendarIcon className=\"h-4 w-4 text-indigo-500\" />\n <span className=\"capitalize whitespace-nowrap\">{displayValue}</span>\n </>\n )}\n </button>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n className={`liquid-surface-strong z-50 w-64 rounded-xl p-4 shadow-xl animate-in fade-in-0 zoom-in-95 ${contentClassName}`.trim()}\n sideOffset={5}\n side={side}\n avoidCollisions={avoidCollisions}\n align=\"start\"\n >\n {/* Year Navigation */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n type=\"button\"\n onClick={() => setViewYear(y => y - 1)}\n disabled={!canGoPrev}\n className=\"p-1.5 rounded-lg hover:bg-white/40 dark:hover:bg-white/[0.08] disabled:opacity-30 disabled:cursor-not-allowed transition-colors duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1\"\n >\n <ChevronLeftIcon className=\"h-5 w-5 text-slate-500 dark:text-slate-400\" />\n </button>\n <span className=\"font-semibold text-slate-900 dark:text-white text-lg\">{viewYear}</span>\n <button\n type=\"button\"\n onClick={() => setViewYear(y => y + 1)}\n disabled={!canGoNext}\n className=\"p-1.5 rounded-lg hover:bg-white/40 dark:hover:bg-white/[0.08] disabled:opacity-30 disabled:cursor-not-allowed transition-colors duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1\"\n >\n <ChevronRightIcon className=\"h-5 w-5 text-slate-500 dark:text-slate-400\" />\n </button>\n </div>\n\n {/* Month Grid */}\n <div className=\"grid grid-cols-3 gap-2\">\n {months.map((month, index) => {\n const isAvailable = isMonthAvailable(viewYear, index)\n const monthStr = `${viewYear}-${String(index + 1).padStart(2, \"0\")}`\n const isSelected = value === monthStr\n\n return (\n <button\n key={month}\n type=\"button\"\n onClick={() => isAvailable && handleSelectMonth(index)}\n disabled={!isAvailable}\n className={`\n px-2 py-2.5 text-sm rounded-lg transition-all duration-200 capitalize font-medium focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-indigo-500/70 active:scale-[0.98]\n ${isSelected\n ? \"bg-indigo-500 text-white shadow-[inset_0_1px_1.5px_rgba(255,255,255,0.45)]\"\n : isAvailable\n ? \"text-slate-700 dark:text-slate-200 hover:bg-indigo-500/10 hover:text-indigo-600 dark:hover:text-indigo-400\"\n : \"text-slate-300 dark:text-slate-600 cursor-not-allowed\"\n }\n `}\n >\n {month}\n </button>\n )\n })}\n </div>\n\n {/* Quick navigation to available years */}\n {availableYears.length > 1 && (\n <div className=\"mt-4 pt-3 liquid-divider\">\n <div className=\"flex flex-wrap gap-1 justify-center\">\n {availableYears.map(year => (\n <button\n key={year}\n type=\"button\"\n onClick={() => setViewYear(year)}\n className={`\n px-2 py-1 text-xs rounded-lg transition-colors duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-indigo-500/70\n ${viewYear === year\n ? \"bg-indigo-500/15 dark:bg-indigo-400/20 text-indigo-700 dark:text-indigo-300 font-medium\"\n : \"text-slate-500 dark:text-slate-400 hover:bg-white/40 dark:hover:bg-white/[0.08]\"\n }\n `}\n >\n {year}\n </button>\n ))}\n </div>\n </div>\n )}\n\n <Popover.Arrow className=\"fill-white/85 dark:fill-slate-900/85\" />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n","import {\n type ComponentType,\n} from 'react'\nimport * as HeroIcons from '@heroicons/react/24/outline'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { springPresets } from '@ui/lib/animations'\n\nconst FallbackIcon: ComponentType<{ className?: string }> = ({ className }) => (\n <HeroIcons.FolderOpenIcon className={className} />\n)\n\nfunction getIcon(name: keyof typeof HeroIcons): ComponentType<{ className?: string }> {\n const icon = HeroIcons[name]\n if (icon && (typeof icon === 'function' || typeof icon === 'object')) {\n return icon as ComponentType<{ className?: string }>\n }\n return FallbackIcon\n}\n\nconst ICON_MAP: Record<string, ComponentType<{ className?: string }>> = {\n 'map-pin': getIcon('MapPinIcon'),\n 'check-circle': getIcon('CheckCircleIcon'),\n 'building-storefront': getIcon('BuildingStorefrontIcon'),\n 'shopping-bag': getIcon('ShoppingBagIcon'),\n 'shopping-cart': getIcon('ShoppingCartIcon'),\n 'users': getIcon('UsersIcon'),\n 'user-group': getIcon('UserGroupIcon'),\n 'cpu-chip': getIcon('CpuChipIcon'),\n 'shield-check': getIcon('ShieldCheckIcon'),\n 'credit-card': getIcon('CreditCardIcon'),\n 'currency-dollar': getIcon('CurrencyDollarIcon'),\n 'scale': getIcon('ScaleIcon'),\n 'cube': getIcon('CubeIcon'),\n 'calendar': getIcon('CalendarIcon'),\n 'chart-bar': getIcon('ChartBarIcon'),\n 'document': getIcon('DocumentIcon'),\n 'plus-circle': getIcon('PlusCircleIcon'),\n 'link': getIcon('LinkIcon'),\n 'folder-open': getIcon('FolderOpenIcon'),\n 'beaker': getIcon('BeakerIcon'),\n}\n\nconst ACCENT_MAP: Record<string, { container: string; icon: string }> = {\n 'map-pin': {\n container: 'bg-blue-50/80 dark:bg-blue-900/30 border-blue-100/50 dark:border-blue-800/30',\n icon: 'text-blue-500 dark:text-blue-400',\n },\n 'check-circle': {\n container: 'bg-amber-50/80 dark:bg-amber-900/30 border-amber-100/50 dark:border-amber-800/30',\n icon: 'text-amber-500 dark:text-amber-400',\n },\n 'building-storefront': {\n container: 'bg-amber-50/80 dark:bg-amber-900/30 border-amber-100/50 dark:border-amber-800/30',\n icon: 'text-amber-600 dark:text-amber-400',\n },\n 'shopping-bag': {\n container: 'bg-rose-50/80 dark:bg-rose-900/30 border-rose-100/50 dark:border-rose-800/30',\n icon: 'text-rose-500 dark:text-rose-400',\n },\n 'users': {\n container: 'bg-violet-50/80 dark:bg-violet-900/30 border-violet-100/50 dark:border-violet-800/30',\n icon: 'text-violet-500 dark:text-violet-400',\n },\n 'cpu-chip': {\n container: 'bg-indigo-50/80 dark:bg-indigo-900/30 border-indigo-100/50 dark:border-indigo-800/30',\n icon: 'text-indigo-500 dark:text-indigo-400',\n },\n 'shield-check': {\n container: 'bg-emerald-50/80 dark:bg-emerald-900/30 border-emerald-100/50 dark:border-emerald-800/30',\n icon: 'text-emerald-500 dark:text-emerald-400',\n },\n 'scale': {\n container: 'bg-emerald-50/80 dark:bg-emerald-900/30 border-emerald-100/50 dark:border-emerald-800/30',\n icon: 'text-emerald-500 dark:text-emerald-400',\n },\n 'cube': {\n container: 'bg-sky-50/80 dark:bg-sky-900/30 border-sky-100/50 dark:border-sky-800/30',\n icon: 'text-sky-500 dark:text-sky-400',\n },\n 'credit-card': {\n container: 'bg-fuchsia-50/80 dark:bg-fuchsia-900/30 border-fuchsia-100/50 dark:border-fuchsia-800/30',\n icon: 'text-fuchsia-500 dark:text-fuchsia-400',\n },\n 'shopping-cart': {\n container: 'bg-emerald-50/80 dark:bg-emerald-900/30 border-emerald-100/50 dark:border-emerald-800/30',\n icon: 'text-emerald-500 dark:text-emerald-400',\n },\n 'user-group': {\n container: 'bg-fuchsia-50/80 dark:bg-fuchsia-900/30 border-fuchsia-100/50 dark:border-fuchsia-800/30',\n icon: 'text-fuchsia-500 dark:text-fuchsia-400',\n },\n 'currency-dollar': {\n container: 'bg-green-50/80 dark:bg-green-900/30 border-green-100/50 dark:border-green-800/30',\n icon: 'text-green-500 dark:text-green-400',\n },\n 'calendar': {\n container: 'bg-indigo-50/80 dark:bg-indigo-900/30 border-indigo-100/50 dark:border-indigo-800/30',\n icon: 'text-indigo-500 dark:text-indigo-400',\n },\n 'chart-bar': {\n container: 'bg-purple-50/80 dark:bg-purple-900/30 border-purple-100/50 dark:border-purple-800/30',\n icon: 'text-purple-500 dark:text-purple-400',\n },\n 'document': {\n container: 'bg-cyan-50/80 dark:bg-cyan-900/30 border-cyan-100/50 dark:border-cyan-800/30',\n icon: 'text-cyan-500 dark:text-cyan-400',\n },\n 'plus-circle': {\n container: 'bg-pink-50/80 dark:bg-pink-900/30 border-pink-100/50 dark:border-pink-800/30',\n icon: 'text-pink-500 dark:text-pink-400',\n },\n 'link': {\n container: 'bg-sky-50/80 dark:bg-sky-900/30 border-sky-100/50 dark:border-sky-800/30',\n icon: 'text-sky-500 dark:text-sky-400',\n },\n 'folder-open': {\n container: 'bg-slate-50/80 dark:bg-slate-900/30 border-slate-100/50 dark:border-slate-800/30',\n icon: 'text-slate-500 dark:text-slate-400',\n },\n 'beaker': {\n container: 'bg-emerald-50/80 dark:bg-emerald-900/30 border-emerald-100/50 dark:border-emerald-800/30',\n icon: 'text-emerald-500 dark:text-emerald-400',\n },\n}\n\ntype PageEmptyStateProps = {\n title: string\n message: string\n iconName: string\n /** Override the default icon with a custom React element */\n customIcon?: React.ReactNode\n}\n\nexport function PageEmptyState({ title, message, iconName, customIcon }: PageEmptyStateProps) {\n const Icon = ICON_MAP[iconName] || FallbackIcon\n const accent = ACCENT_MAP[iconName] || ACCENT_MAP['folder-open']\n const prefersReducedMotion = useReducedMotion()\n\n const noMotion = { opacity: 1, scale: 1, y: 0 }\n const noTransition = { duration: 0 }\n\n return (\n <div\n role=\"region\"\n aria-label={title}\n data-testid=\"empty-state\"\n className=\"flex items-center justify-center py-20\"\n >\n <motion.div\n initial={prefersReducedMotion ? false : { opacity: 0, scale: 0.95 }}\n animate={prefersReducedMotion ? noMotion : { opacity: 1, scale: 1 }}\n transition={prefersReducedMotion ? noTransition : springPresets.gentle}\n className=\"liquid-surface w-full max-w-lg rounded-2xl px-8 py-14 text-center\"\n >\n {/* Icon */}\n <motion.div\n initial={prefersReducedMotion ? false : { scale: 0.6, opacity: 0 }}\n animate={prefersReducedMotion ? noMotion : { scale: 1, opacity: 1 }}\n transition={prefersReducedMotion ? noTransition : springPresets.bouncy}\n className=\"mx-auto mb-6\"\n >\n <div className={`inline-flex h-20 w-20 items-center justify-center rounded-full backdrop-blur-md border ${accent.container}`}>\n {customIcon ?? <Icon className={`h-10 w-10 ${accent.icon}`} />}\n </div>\n </motion.div>\n\n {/* Title */}\n <motion.h3\n data-testid=\"empty-state-title\"\n initial={prefersReducedMotion ? false : { y: 12, opacity: 0 }}\n animate={prefersReducedMotion ? noMotion : { y: 0, opacity: 1 }}\n transition={prefersReducedMotion ? noTransition : { ...springPresets.default, delay: 0.1 }}\n className=\"text-xl font-semibold text-gray-900 dark:text-white\"\n >\n {title}\n </motion.h3>\n\n {/* Description */}\n <motion.p\n data-testid=\"empty-state-message\"\n initial={prefersReducedMotion ? false : { y: 12, opacity: 0 }}\n animate={prefersReducedMotion ? noMotion : { y: 0, opacity: 1 }}\n transition={prefersReducedMotion ? noTransition : { ...springPresets.default, delay: 0.15 }}\n className=\"mt-3 text-sm text-gray-500 dark:text-gray-400 max-w-sm mx-auto leading-relaxed\"\n >\n {message}\n </motion.p>\n\n {/* Decorative dots */}\n <motion.div\n initial={prefersReducedMotion ? false : { opacity: 0 }}\n animate={prefersReducedMotion ? noMotion : { opacity: 1 }}\n transition={prefersReducedMotion ? noTransition : { delay: 0.3 }}\n className=\"mt-8 flex items-center justify-center gap-1.5\"\n >\n {[0, 1, 2].map((i) => (\n <motion.div\n key={i}\n initial={prefersReducedMotion ? false : { scale: 0 }}\n animate={prefersReducedMotion ? noMotion : { scale: 1 }}\n transition={prefersReducedMotion ? noTransition : { ...springPresets.bouncy, delay: 0.35 + i * 0.08 }}\n className=\"h-1.5 w-1.5 rounded-full bg-gray-300 dark:bg-gray-600\"\n />\n ))}\n </motion.div>\n </motion.div>\n </div>\n )\n}\n","import { type ReactNode } from 'react'\nimport { ExclamationTriangleIcon } from '@heroicons/react/24/outline'\nimport { motion, useReducedMotion } from 'framer-motion'\nimport { springPresets } from '@ui/lib/animations'\n\ntype PageErrorStateProps = {\n /** HTTP status code (e.g. 500, 502, 503) */\n statusCode?: number\n /** Error title */\n title: string\n /** Error description */\n message: string\n /** Retry callback — renders a retry button when provided */\n onRetry?: () => void\n /** Retry button label */\n retryLabel?: string\n /** Override the default icon with a custom React element */\n customIcon?: ReactNode\n}\n\nexport function PageErrorState({\n statusCode = 500,\n title,\n message,\n onRetry,\n retryLabel = 'Retry',\n customIcon,\n}: PageErrorStateProps) {\n const prefersReducedMotion = useReducedMotion()\n\n const noMotion = { opacity: 1, scale: 1, y: 0 }\n const noTransition = { duration: 0 }\n\n return (\n <div\n role=\"alert\"\n aria-label={title}\n data-testid=\"error-state\"\n className=\"flex w-full items-center justify-center py-20\"\n >\n <motion.div\n initial={prefersReducedMotion ? false : { opacity: 0, scale: 0.95 }}\n animate={prefersReducedMotion ? noMotion : { opacity: 1, scale: 1 }}\n transition={prefersReducedMotion ? noTransition : springPresets.gentle}\n className=\"liquid-surface w-full max-w-2xl rounded-2xl px-12 py-14 text-center\"\n >\n {/* Icon */}\n <motion.div\n initial={prefersReducedMotion ? false : { scale: 0.6, opacity: 0 }}\n animate={prefersReducedMotion ? noMotion : { scale: 1, opacity: 1 }}\n transition={prefersReducedMotion ? noTransition : springPresets.bouncy}\n className=\"mx-auto mb-6\"\n >\n <div className=\"inline-flex h-20 w-20 items-center justify-center rounded-full backdrop-blur-md border bg-red-50/80 dark:bg-red-900/30 border-red-100/50 dark:border-red-800/30\">\n {customIcon ?? <ExclamationTriangleIcon className=\"h-10 w-10 text-red-500 dark:text-red-400\" />}\n </div>\n </motion.div>\n\n {/* Status code */}\n <motion.p\n initial={prefersReducedMotion ? false : { y: 12, opacity: 0 }}\n animate={prefersReducedMotion ? noMotion : { y: 0, opacity: 1 }}\n transition={prefersReducedMotion ? noTransition : { ...springPresets.default, delay: 0.05 }}\n className=\"mb-1 text-sm font-semibold tracking-widest text-red-500 dark:text-red-400\"\n >\n {statusCode}\n </motion.p>\n\n {/* Title */}\n <motion.h3\n data-testid=\"error-state-title\"\n initial={prefersReducedMotion ? false : { y: 12, opacity: 0 }}\n animate={prefersReducedMotion ? noMotion : { y: 0, opacity: 1 }}\n transition={prefersReducedMotion ? noTransition : { ...springPresets.default, delay: 0.1 }}\n className=\"text-xl font-semibold text-gray-900 dark:text-white\"\n >\n {title}\n </motion.h3>\n\n {/* Description */}\n <motion.p\n data-testid=\"error-state-message\"\n initial={prefersReducedMotion ? false : { y: 12, opacity: 0 }}\n animate={prefersReducedMotion ? noMotion : { y: 0, opacity: 1 }}\n transition={prefersReducedMotion ? noTransition : { ...springPresets.default, delay: 0.15 }}\n className=\"mt-3 text-sm text-gray-500 dark:text-gray-400 max-w-sm mx-auto leading-relaxed\"\n >\n {message}\n </motion.p>\n\n {/* Retry button */}\n {onRetry && (\n <motion.div\n initial={prefersReducedMotion ? false : { y: 12, opacity: 0 }}\n animate={prefersReducedMotion ? noMotion : { y: 0, opacity: 1 }}\n transition={prefersReducedMotion ? noTransition : { ...springPresets.default, delay: 0.25 }}\n className=\"mt-8\"\n >\n <button\n type=\"button\"\n onClick={onRetry}\n data-testid=\"error-state-retry\"\n className=\"rounded-xl bg-red-600 px-6 py-2.5 text-sm font-semibold text-white shadow-lg shadow-red-500/20 transition-all hover:bg-red-700 hover:shadow-red-500/30 active:scale-[0.97] dark:bg-red-500 dark:hover:bg-red-600 dark:shadow-red-500/10\"\n >\n {retryLabel}\n </button>\n </motion.div>\n )}\n\n {/* Decorative dots */}\n {!onRetry && (\n <motion.div\n initial={prefersReducedMotion ? false : { opacity: 0 }}\n animate={prefersReducedMotion ? noMotion : { opacity: 1 }}\n transition={prefersReducedMotion ? noTransition : { delay: 0.3 }}\n className=\"mt-8 flex items-center justify-center gap-1.5\"\n >\n {[0, 1, 2].map((i) => (\n <motion.div\n key={i}\n initial={prefersReducedMotion ? false : { scale: 0 }}\n animate={prefersReducedMotion ? noMotion : { scale: 1 }}\n transition={prefersReducedMotion ? noTransition : { ...springPresets.bouncy, delay: 0.35 + i * 0.08 }}\n className=\"h-1.5 w-1.5 rounded-full bg-red-300 dark:bg-red-700\"\n />\n ))}\n </motion.div>\n )}\n </motion.div>\n </div>\n )\n}\n","import { type ReactNode } from 'react'\nimport clsx from 'clsx'\n\ntype BrandedLoaderProps = {\n /** App icon — SVG element or component */\n icon: ReactNode\n /** App name displayed below icon */\n appName: string\n /** Loading label text */\n label?: string\n /** Gradient class for the icon container (e.g. \"from-purple-500 to-blue-500\") */\n gradient?: string\n /** Accent color for the pulse ring (e.g. \"ring-purple-500/30\") */\n accentRing?: string\n /** Full-screen or compact mode */\n compact?: boolean\n /** If true, icon already has its own background (e.g. app SVG with built-in gradient) — skip the gradient container */\n rawIcon?: boolean\n /** Additional class name */\n className?: string\n}\n\n// ── App presets ──────────────────────────────────────────────────────\nexport const WINDSOCK_LOADER = { gradient: 'from-emerald-500 to-teal-600', accentRing: 'ring-emerald-500/30' } as const\nexport const KORI_ERP_LOADER = { gradient: 'from-purple-500 to-violet-600', accentRing: 'ring-purple-500/30' } as const\nexport const WIRE_LOADER = { gradient: 'from-sky-500 to-indigo-600', accentRing: 'ring-indigo-500/30' } as const\n\nexport function BrandedLoader({\n icon,\n appName,\n label,\n gradient = 'from-indigo-500 to-purple-600',\n accentRing = 'ring-indigo-500/30',\n compact = false,\n rawIcon = false,\n className,\n}: BrandedLoaderProps) {\n return (\n <div\n className={clsx(\n 'flex items-center justify-center',\n compact\n ? 'w-full py-8'\n : 'fixed inset-0 z-[9999] h-dvh w-dvw bg-gray-50 dark:bg-[#0b1120]',\n className,\n )}\n >\n <div className=\"flex flex-col items-center gap-6\">\n {/* Animated icon container */}\n <div className=\"relative\">\n {/* Outer pulse ring */}\n <div\n className={clsx(\n 'absolute -inset-3 animate-ping motion-reduce:animate-none rounded-3xl opacity-20',\n `bg-gradient-to-br ${gradient}`,\n )}\n style={{ animationDuration: '2s' }}\n />\n {/* Glow ring */}\n <div\n className={clsx(\n 'absolute -inset-1.5 rounded-[22px] ring-2',\n accentRing,\n 'animate-pulse motion-reduce:animate-none',\n )}\n style={{ animationDuration: '1.5s' }}\n />\n {rawIcon ? (\n /* Raw icon — SVG with its own background, no gradient overlay */\n <div className=\"relative h-24 w-24 rounded-[20px] shadow-lg shadow-black/20 overflow-hidden [&_img]:!h-full [&_img]:!w-full [&_img]:object-cover\">\n {icon}\n </div>\n ) : (\n /* Icon container with gradient background */\n <div\n className={clsx(\n 'relative flex h-24 w-24 items-center justify-center rounded-[20px]',\n `bg-gradient-to-br ${gradient}`,\n 'shadow-lg shadow-black/20',\n )}\n >\n {/* Glass gloss */}\n <div className=\"pointer-events-none absolute inset-0 rounded-[18px] bg-[linear-gradient(145deg,rgba(255,255,255,0.35)_0%,rgba(255,255,255,0.08)_45%,rgba(255,255,255,0)_100%)]\" />\n {/* Icon */}\n <div className=\"relative h-12 w-12 text-white drop-shadow-[0_2px_4px_rgba(0,0,0,0.2)] [&_img]:!h-full [&_img]:!w-full [&_img]:object-contain\">\n {icon}\n </div>\n </div>\n )}\n </div>\n\n {/* App name */}\n <h2\n className={clsx(\n 'bg-clip-text text-xl font-bold tracking-tight text-transparent',\n `bg-gradient-to-r ${gradient}`,\n )}\n >\n {appName}\n </h2>\n\n {/* Loading indicator */}\n {label ? (\n <div className=\"flex items-center gap-2.5\">\n {/* Animated dots */}\n <div className=\"flex gap-1\">\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className={clsx(\n 'h-1.5 w-1.5 rounded-full',\n `bg-gradient-to-br ${gradient}`,\n 'animate-bounce motion-reduce:animate-none',\n )}\n style={{ animationDelay: `${i * 150}ms`, animationDuration: '0.8s' }}\n />\n ))}\n </div>\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{label}</p>\n </div>\n ) : (\n /* Dots only when no label */\n <div className=\"flex gap-1.5\">\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className={clsx(\n 'h-2 w-2 rounded-full',\n `bg-gradient-to-br ${gradient}`,\n 'animate-bounce motion-reduce:animate-none',\n )}\n style={{ animationDelay: `${i * 150}ms`, animationDuration: '0.8s' }}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import type { ComponentType, ReactNode } from 'react'\nimport clsx from 'clsx'\n\ntype AppLogoProps = {\n /** App icon component (heroicon or custom SVG) */\n icon: ComponentType<{ className?: string }>\n /** App name displayed as wordmark */\n appName: string\n /** Gradient class for the icon background (e.g. \"from-purple-500 to-blue-600\") */\n gradient?: string\n /** Size variant */\n size?: 'sm' | 'md' | 'lg'\n /** Additional className */\n className?: string\n /** Custom wordmark element instead of text */\n wordmark?: ReactNode\n}\n\nconst SIZES = {\n sm: { container: 'h-6 w-6 rounded-lg', icon: 'h-3.5 w-3.5', text: 'text-sm', gap: 'gap-1.5' },\n md: { container: 'h-8 w-8 rounded-xl', icon: 'h-4.5 w-4.5', text: 'text-base', gap: 'gap-2' },\n lg: { container: 'h-10 w-10 rounded-xl', icon: 'h-5.5 w-5.5', text: 'text-lg', gap: 'gap-2.5' },\n} as const\n\nexport function AppLogo({\n icon: Icon,\n appName,\n gradient = 'from-indigo-500 to-purple-600',\n size = 'md',\n className,\n wordmark,\n}: AppLogoProps) {\n const s = SIZES[size]\n\n return (\n <div className={clsx('inline-flex items-center', s.gap, className)}>\n {/* Icon badge */}\n <div\n className={clsx(\n 'relative flex flex-none items-center justify-center',\n s.container,\n `bg-gradient-to-br ${gradient}`,\n 'shadow-sm',\n )}\n >\n {/* Glass gloss */}\n <div className=\"pointer-events-none absolute inset-0 rounded-[inherit] bg-[linear-gradient(145deg,rgba(255,255,255,0.35)_0%,rgba(255,255,255,0.08)_45%,rgba(255,255,255,0)_100%)]\" />\n <Icon className={clsx('relative text-white', s.icon)} />\n </div>\n\n {/* Wordmark */}\n {wordmark ?? (\n <span\n className={clsx(\n 'font-bold tracking-tight bg-clip-text text-transparent whitespace-nowrap',\n `bg-gradient-to-r ${gradient}`,\n s.text,\n )}\n >\n {appName}\n </span>\n )}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\n\nexport type AccentColor = 'blue' | 'emerald' | 'purple' | 'indigo'\n\nconst accentColorClasses: Record<AccentColor, string> = {\n blue: 'text-blue-600 dark:text-blue-400',\n emerald: 'text-emerald-600 dark:text-emerald-400',\n purple: 'text-purple-600 dark:text-purple-400',\n indigo: 'text-indigo-600 dark:text-indigo-400',\n}\n\ntype ErrorPageProps = {\n title?: string\n message?: string\n action?: ReactNode\n className?: string\n /** Accent color for the status code number */\n accentColor?: AccentColor\n}\n\nfunction ErrorContainer({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div className={`flex min-h-[70vh] flex-col items-center justify-center px-6 text-center ${className ?? ''}`}>\n {children}\n </div>\n )\n}\n\n// ── 404 Not Found ──────────────────────────────────────────────────────\n\nfunction NotFoundSvg() {\n return (\n <svg viewBox=\"0 0 280 200\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className=\"mb-8 h-48 w-auto\">\n {/* Floor shadow */}\n <ellipse cx=\"140\" cy=\"180\" rx=\"100\" ry=\"8\" className=\"fill-gray-200 dark:fill-gray-800\" />\n {/* Lost astronaut */}\n <g transform=\"translate(100, 40)\">\n {/* Body */}\n <rect x=\"20\" y=\"50\" width=\"40\" height=\"55\" rx=\"12\" className=\"fill-slate-300 dark:fill-slate-600\" />\n {/* Helmet */}\n <circle cx=\"40\" cy=\"35\" r=\"25\" className=\"fill-slate-200 dark:fill-slate-500\" />\n <circle cx=\"40\" cy=\"35\" r=\"18\" className=\"fill-blue-100 dark:fill-blue-900/50\" />\n {/* Visor reflection */}\n <path d=\"M30 28 Q40 22 50 28\" stroke=\"white\" strokeWidth=\"2\" fill=\"none\" opacity=\"0.6\" />\n {/* Confused face */}\n <circle cx=\"35\" cy=\"33\" r=\"2\" className=\"fill-slate-500 dark:fill-slate-300\" />\n <circle cx=\"45\" cy=\"33\" r=\"2\" className=\"fill-slate-500 dark:fill-slate-300\" />\n <path d=\"M34 40 Q40 43 46 40\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" className=\"text-slate-400 dark:text-slate-300\" />\n {/* Arms */}\n <rect x=\"5\" y=\"55\" width=\"15\" height=\"8\" rx=\"4\" className=\"fill-slate-300 dark:fill-slate-600\" transform=\"rotate(-20, 12, 59)\" />\n <rect x=\"60\" y=\"55\" width=\"15\" height=\"8\" rx=\"4\" className=\"fill-slate-300 dark:fill-slate-600\" transform=\"rotate(20, 68, 59)\" />\n {/* Legs */}\n <rect x=\"25\" y=\"100\" width=\"12\" height=\"25\" rx=\"6\" className=\"fill-slate-300 dark:fill-slate-600\" />\n <rect x=\"43\" y=\"100\" width=\"12\" height=\"25\" rx=\"6\" className=\"fill-slate-300 dark:fill-slate-600\" />\n {/* Boots */}\n <rect x=\"22\" y=\"120\" width=\"18\" height=\"10\" rx=\"5\" className=\"fill-slate-400 dark:fill-slate-500\" />\n <rect x=\"40\" y=\"120\" width=\"18\" height=\"10\" rx=\"5\" className=\"fill-slate-400 dark:fill-slate-500\" />\n </g>\n {/* Question marks floating */}\n <text x=\"60\" y=\"50\" className=\"fill-blue-400 dark:fill-blue-500\" fontSize=\"24\" fontWeight=\"bold\" opacity=\"0.6\">?</text>\n <text x=\"200\" y=\"70\" className=\"fill-purple-400 dark:fill-purple-500\" fontSize=\"18\" fontWeight=\"bold\" opacity=\"0.4\">?</text>\n <text x=\"220\" y=\"40\" className=\"fill-indigo-400 dark:fill-indigo-500\" fontSize=\"14\" fontWeight=\"bold\" opacity=\"0.3\">?</text>\n {/* Stars */}\n <circle cx=\"30\" cy=\"30\" r=\"2\" className=\"fill-amber-400\" opacity=\"0.5\" />\n <circle cx=\"250\" cy=\"50\" r=\"1.5\" className=\"fill-amber-400\" opacity=\"0.4\" />\n <circle cx=\"240\" cy=\"90\" r=\"2\" className=\"fill-amber-400\" opacity=\"0.3\" />\n </svg>\n )\n}\n\nexport function NotFoundPage({ title = 'Page not found', message = \"The page you're looking for doesn't exist or has been moved.\", action, className, accentColor = 'blue' }: ErrorPageProps) {\n return (\n <ErrorContainer className={className}>\n <NotFoundSvg />\n <p className={`mb-2 text-sm font-semibold tracking-widest ${accentColorClasses[accentColor]}`}>404</p>\n <h1 className=\"mb-3 text-3xl font-bold text-gray-900 dark:text-white\">{title}</h1>\n <p className=\"mb-8 max-w-md text-gray-500 dark:text-gray-400\">{message}</p>\n {action}\n </ErrorContainer>\n )\n}\n\n// ── 400 Bad Request ────────────────────────────────────────────────────\n\nfunction BadRequestSvg() {\n return (\n <svg viewBox=\"0 0 280 200\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className=\"mb-8 h-48 w-auto\">\n <ellipse cx=\"140\" cy=\"180\" rx=\"100\" ry=\"8\" className=\"fill-gray-200 dark:fill-gray-800\" />\n {/* Broken puzzle pieces */}\n <g transform=\"translate(60, 30)\">\n {/* Piece 1 */}\n <path d=\"M10 40 L50 40 L50 20 C50 20 60 15 60 25 L60 40 L60 80 L40 80 C40 80 35 70 25 70 C15 70 10 80 10 80 L10 40Z\" className=\"fill-orange-200 dark:fill-orange-800/40 text-orange-300 dark:text-orange-700\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n {/* Piece 2 - rotated/displaced */}\n <g transform=\"translate(80, 20) rotate(15)\">\n <path d=\"M0 0 L40 0 L40 20 C40 20 50 25 50 15 L50 0 L50 40 L30 40 C30 40 25 50 15 50 C5 50 0 40 0 40 L0 0Z\" className=\"fill-amber-200 dark:fill-amber-800/40 text-amber-300 dark:text-amber-700\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </g>\n </g>\n {/* Warning triangle */}\n <g transform=\"translate(110, 90)\">\n <path d=\"M30 0 L60 52 L0 52 Z\" className=\"fill-amber-100 dark:fill-amber-900/30 text-amber-400 dark:text-amber-500\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinejoin=\"round\" />\n <text x=\"30\" y=\"42\" textAnchor=\"middle\" className=\"fill-amber-600 dark:fill-amber-400\" fontSize=\"28\" fontWeight=\"bold\">!</text>\n </g>\n {/* Sparks */}\n <line x1=\"85\" y1=\"60\" x2=\"75\" y2=\"50\" className=\"stroke-amber-400\" strokeWidth=\"2\" opacity=\"0.6\" />\n <line x1=\"180\" y1=\"55\" x2=\"190\" y2=\"45\" className=\"stroke-amber-400\" strokeWidth=\"2\" opacity=\"0.5\" />\n <line x1=\"90\" y1=\"75\" x2=\"80\" y2=\"72\" className=\"stroke-orange-400\" strokeWidth=\"2\" opacity=\"0.4\" />\n </svg>\n )\n}\n\nexport function BadRequestPage({ title = 'Bad request', message = 'The request could not be processed. Please check your input and try again.', action, className, accentColor = 'blue' }: ErrorPageProps) {\n return (\n <ErrorContainer className={className}>\n <BadRequestSvg />\n <p className={`mb-2 text-sm font-semibold tracking-widest ${accentColorClasses[accentColor]}`}>400</p>\n <h1 className=\"mb-3 text-3xl font-bold text-gray-900 dark:text-white\">{title}</h1>\n <p className=\"mb-8 max-w-md text-gray-500 dark:text-gray-400\">{message}</p>\n {action}\n </ErrorContainer>\n )\n}\n\n// ── 500 Server Error ───────────────────────────────────────────────────\n\nfunction ServerErrorSvg() {\n return (\n <svg viewBox=\"0 0 280 200\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className=\"mb-8 h-48 w-auto\">\n <ellipse cx=\"140\" cy=\"180\" rx=\"100\" ry=\"8\" className=\"fill-gray-200 dark:fill-gray-800\" />\n {/* Server rack */}\n <g transform=\"translate(90, 25)\">\n <rect x=\"0\" y=\"0\" width=\"100\" height=\"130\" rx=\"8\" className=\"fill-slate-200 dark:fill-slate-700 text-slate-300 dark:text-slate-600\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n {/* Server units */}\n <rect x=\"8\" y=\"10\" width=\"84\" height=\"22\" rx=\"4\" className=\"fill-white dark:fill-slate-600\" />\n <rect x=\"8\" y=\"38\" width=\"84\" height=\"22\" rx=\"4\" className=\"fill-white dark:fill-slate-600\" />\n <rect x=\"8\" y=\"66\" width=\"84\" height=\"22\" rx=\"4\" className=\"fill-red-50 dark:fill-red-900/30\" />\n <rect x=\"8\" y=\"94\" width=\"84\" height=\"22\" rx=\"4\" className=\"fill-white dark:fill-slate-600\" />\n {/* Status lights - green */}\n <circle cx=\"20\" cy=\"21\" r=\"3\" className=\"fill-green-400\" />\n <circle cx=\"20\" cy=\"49\" r=\"3\" className=\"fill-green-400\" />\n {/* Status light - red (error) */}\n <circle cx=\"20\" cy=\"77\" r=\"3\" className=\"fill-red-500\" />\n {/* Status light - green */}\n <circle cx=\"20\" cy=\"105\" r=\"3\" className=\"fill-green-400\" />\n {/* Drive slots */}\n <rect x=\"60\" y=\"16\" width=\"24\" height=\"4\" rx=\"1\" className=\"fill-slate-300 dark:fill-slate-500\" />\n <rect x=\"60\" y=\"44\" width=\"24\" height=\"4\" rx=\"1\" className=\"fill-slate-300 dark:fill-slate-500\" />\n <rect x=\"60\" y=\"72\" width=\"24\" height=\"4\" rx=\"1\" className=\"fill-red-300 dark:fill-red-700\" />\n <rect x=\"60\" y=\"100\" width=\"24\" height=\"4\" rx=\"1\" className=\"fill-slate-300 dark:fill-slate-500\" />\n </g>\n {/* Smoke/steam */}\n <g opacity=\"0.4\">\n <circle cx=\"120\" cy=\"15\" r=\"6\" className=\"fill-slate-300 dark:fill-slate-500\" />\n <circle cx=\"130\" cy=\"8\" r=\"4\" className=\"fill-slate-300 dark:fill-slate-500\" />\n <circle cx=\"150\" cy=\"12\" r=\"5\" className=\"fill-slate-300 dark:fill-slate-500\" />\n <circle cx=\"160\" cy=\"5\" r=\"3\" className=\"fill-slate-300 dark:fill-slate-500\" />\n </g>\n {/* Lightning bolt */}\n <g transform=\"translate(50, 50)\">\n <path d=\"M20 0 L8 18 L16 18 L6 35 L24 14 L16 14 L26 0Z\" className=\"fill-red-400 dark:fill-red-500\" opacity=\"0.7\" />\n </g>\n </svg>\n )\n}\n\nexport function ServerErrorPage({ title = 'Something went wrong', message = 'An unexpected error occurred on the server. Our team has been notified.', action, className, accentColor = 'blue' }: ErrorPageProps) {\n return (\n <ErrorContainer className={className}>\n <ServerErrorSvg />\n <p className={`mb-2 text-sm font-semibold tracking-widest ${accentColorClasses[accentColor]}`}>500</p>\n <h1 className=\"mb-3 text-3xl font-bold text-gray-900 dark:text-white\">{title}</h1>\n <p className=\"mb-8 max-w-md text-gray-500 dark:text-gray-400\">{message}</p>\n {action}\n </ErrorContainer>\n )\n}\n","import type { ReactNode } from 'react'\n\nexport interface PreferenceSectionProps {\n title?: string\n titleIcon?: ReactNode\n children: ReactNode\n className?: string\n}\n\nexport function PreferenceSection({\n title,\n titleIcon,\n children,\n className = '',\n}: PreferenceSectionProps) {\n return (\n <div className={`rounded-2xl liquid-surface p-4 space-y-3 ${className}`}>\n {title ? (\n <div className=\"flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400\">\n {titleIcon}\n {title}\n </div>\n ) : null}\n {children}\n </div>\n )\n}\n","import type React from \"react\";\n\nimport * as Headless from \"@headlessui/react\";\nimport clsx from \"clsx\";\n\nexport function Fieldset({\n className,\n ...props\n}: { className?: string } & Omit<Headless.FieldsetProps, \"as\" | \"className\">) {\n return (\n <Headless.Fieldset\n {...props}\n className={clsx(\n className,\n \"*:data-[slot=text]:mt-1 [&>*+[data-slot=control]]:mt-6\",\n )}\n />\n );\n}\n\nexport function Legend({\n className,\n ...props\n}: { className?: string } & Omit<Headless.LegendProps, \"as\" | \"className\">) {\n return (\n <Headless.Legend\n data-slot=\"legend\"\n {...props}\n className={clsx(\n className,\n \"text-base/6 font-semibold text-zinc-950 data-disabled:opacity-50 sm:text-sm/6 dark:text-white\",\n )}\n />\n );\n}\n\nexport function FieldGroup({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"div\">) {\n return (\n <div\n data-slot=\"control\"\n {...props}\n className={clsx(className, \"space-y-8\")}\n />\n );\n}\n\nexport function Field({\n className,\n ...props\n}: { className?: string } & Omit<Headless.FieldProps, \"as\" | \"className\">) {\n return (\n <Headless.Field\n {...props}\n className={clsx(\n className,\n \"[&>[data-slot=label]+[data-slot=control]]:mt-3\",\n \"[&>[data-slot=label]+[data-slot=description]]:mt-1\",\n \"[&>[data-slot=description]+[data-slot=control]]:mt-3\",\n \"[&>[data-slot=control]+[data-slot=description]]:mt-3\",\n \"[&>[data-slot=control]+[data-slot=error]]:mt-3\",\n \"*:data-[slot=label]:font-medium\",\n )}\n />\n );\n}\n\nexport function Label({\n className,\n ...props\n}: { className?: string } & Omit<Headless.LabelProps, \"as\" | \"className\">) {\n return (\n <Headless.Label\n data-slot=\"label\"\n {...props}\n className={clsx(\n className,\n \"text-base/6 text-zinc-950 select-none data-disabled:opacity-50 sm:text-sm/6 dark:text-white\",\n )}\n />\n );\n}\n\nexport function Description({\n className,\n ...props\n}: { className?: string } & Omit<\n Headless.DescriptionProps,\n \"as\" | \"className\"\n>) {\n return (\n <Headless.Description\n data-slot=\"description\"\n {...props}\n className={clsx(\n className,\n \"text-base/6 text-zinc-500 data-disabled:opacity-50 sm:text-sm/6 dark:text-zinc-400\",\n )}\n />\n );\n}\n\nexport function ErrorMessage({\n className,\n ...props\n}: { className?: string } & Omit<\n Headless.DescriptionProps,\n \"as\" | \"className\"\n>) {\n return (\n <Headless.Description\n data-slot=\"error\"\n {...props}\n className={clsx(\n className,\n \"text-base/6 text-red-600 data-disabled:opacity-50 sm:text-sm/6 dark:text-red-500\",\n )}\n />\n );\n}\n","import * as React from \"react\";\n\nimport clsx from \"clsx\";\n\n/**\n * Multi-line text input — uses the canonical `liquid-surface` chrome\n * (same as Input/Select/Cards) so it sits in the same visual family\n * as every other surface. Focus ring is the canonical indigo-500/70.\n */\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.TextareaHTMLAttributes<HTMLTextAreaElement>\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={clsx(\n \"liquid-surface flex min-h-[80px] w-full rounded-xl px-3 py-2.5 text-sm\",\n \"text-slate-900 dark:text-white outline-none\",\n \"placeholder:text-slate-500 dark:placeholder:text-slate-400\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","import { CheckIcon } from '@heroicons/react/20/solid'\nimport type { ReactNode } from 'react'\n\nexport interface SelectionCardProps {\n selected: boolean\n onClick: () => void\n icon?: ReactNode\n label: string\n className?: string\n}\n\n/**\n * Multi-choice tile — used in grid-style pickers (industry select,\n * persona select, plan select). Same crystal grammar as the rest of\n * the DS:\n * - Rest: `liquid-surface` neutral glass\n * - Hover: glass intensifies via group-hover bg\n * - Selected: indigo-tinted glass + ring-1 + indigo icon + check\n *\n * Tints use the same opacity budget as Pagination's active page +\n * StatusBadge info (bg-indigo-500/15 + ring-indigo-500/30 + text-700)\n * so the visual family stays consistent across the whole DS.\n */\nexport function SelectionCard({\n selected,\n onClick,\n icon,\n label,\n className = '',\n}: SelectionCardProps) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-pressed={selected}\n className={[\n 'liquid-surface group relative flex flex-col items-center gap-2.5 rounded-2xl p-4',\n 'transition-all duration-200',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1',\n selected\n ? 'bg-indigo-500/15 ring-1 ring-inset ring-indigo-500/30 dark:bg-indigo-500/20'\n : 'hover:bg-white/30 dark:hover:bg-white/[0.05]',\n className,\n ].join(' ')}\n >\n {icon ? (\n <span\n className={[\n 'inline-flex items-center justify-center rounded-xl p-2 transition-colors',\n selected\n ? // Selected icon bubble — solid indigo with inner highlight\n 'bg-indigo-500/85 text-white shadow-[inset_0_1px_1px_rgba(255,255,255,0.4)]'\n : // Rest icon bubble — glass (same chrome as HeroBlock)\n 'border border-white/60 bg-white/75 text-slate-700 dark:border-white/12 dark:bg-white/8 dark:text-slate-200',\n ].join(' ')}\n >\n {icon}\n </span>\n ) : null}\n <span\n className={[\n 'text-center text-xs font-medium leading-tight',\n selected\n ? 'text-indigo-700 dark:text-indigo-200'\n : 'text-slate-700 dark:text-slate-300',\n ].join(' ')}\n >\n {label}\n </span>\n {selected ? (\n <span className=\"absolute -right-1 -top-1 flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500 ring-2 ring-white dark:ring-slate-900 shadow-[inset_0_1px_1px_rgba(255,255,255,0.4)]\">\n <CheckIcon className=\"h-3 w-3 text-white\" />\n </span>\n ) : null}\n </button>\n )\n}\n","import type { ReactNode } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { CheckCircleIcon, XCircleIcon } from '@heroicons/react/24/outline'\nimport { ThemeSwitch } from '@ui/components/theme-switch'\n\ninterface StatusToggleProps {\n checked: boolean\n onChange: () => void\n offLabel?: string\n offIcon?: ReactNode\n onLabel?: string\n onIcon?: ReactNode\n className?: string\n}\n\nexport function StatusToggle({\n checked,\n onChange,\n offLabel,\n offIcon,\n onLabel,\n onIcon,\n className,\n}: StatusToggleProps) {\n const translation = useTranslations('common')\n\n const resolvedOffLabel = offLabel ?? translation('inactive')\n const resolvedOnLabel = onLabel ?? translation('active')\n const resolvedOffIcon = offIcon ?? <XCircleIcon className=\"h-4 w-4\" />\n const resolvedOnIcon = onIcon ?? <CheckCircleIcon className=\"h-4 w-4\" />\n\n return (\n <div className={`grid grid-cols-[1fr_auto_1fr] items-center gap-2.5 ${className ?? ''}`}>\n <span className={`inline-flex items-center justify-start gap-1 text-left text-xs text-gray-700 transition-colors dark:text-gray-400 ${\n !checked ? 'font-bold dark:text-white' : 'font-normal'\n }`}>\n {resolvedOffIcon}\n {resolvedOffLabel}\n </span>\n <ThemeSwitch\n checked={checked}\n onChange={onChange}\n label={checked ? resolvedOnLabel : resolvedOffLabel}\n />\n <span className={`inline-flex items-center justify-end gap-1 text-right text-xs text-gray-700 transition-colors dark:text-gray-400 ${\n checked ? 'font-bold dark:text-white' : 'font-normal'\n }`}>\n {resolvedOnIcon}\n {resolvedOnLabel}\n </span>\n </div>\n )\n}\n","import { CheckCircleIcon } from '@heroicons/react/20/solid'\nimport { ClipboardDocumentIcon, LockClosedIcon, UserIcon } from '@heroicons/react/24/outline'\nimport { useCallback, useEffect, useState } from 'react'\nimport type { ComponentType, ReactNode } from 'react'\n\nimport { Button } from '@ui/components/button'\nimport { Description, Field, Label } from '@ui/components/fieldset'\nimport { Textarea } from '@ui/components/textarea'\nimport { Input } from '@ui/components/input'\nimport { SelectionCard } from '@ui/components/selection-card'\nimport { StatusToggle } from '@ui/components/status-toggle'\nimport {\n GlassModal,\n type GlassModalIdentity,\n type GlassModalSection,\n} from '@ui/components/glass-modal'\n\n// ---------------------------------------------------------------------------\n// Field config\n// ---------------------------------------------------------------------------\n\nexport interface SettingsFieldConfig {\n key: string\n label: string\n description?: string\n value: string\n onChange?: (value: string) => void\n placeholder?: string\n type?: 'text' | 'email' | 'password' | 'textarea' | 'url'\n readOnly?: boolean\n copyable?: boolean\n rows?: number\n}\n\n// ---------------------------------------------------------------------------\n// Selection option\n// ---------------------------------------------------------------------------\n\nexport interface SelectionOption {\n value: string\n label: string\n icon: ReactNode\n}\n\n// ---------------------------------------------------------------------------\n// Toggle config — maps to StatusToggle\n// ---------------------------------------------------------------------------\n\nexport interface ToggleConfig {\n key: string\n checked: boolean\n onChange: () => void\n onLabel: string\n onIcon?: ReactNode\n offLabel: string\n offIcon?: ReactNode\n}\n\n// ---------------------------------------------------------------------------\n// Radio group config — dock-position style cards with checkmark\n// ---------------------------------------------------------------------------\n\nexport interface RadioGroupConfig {\n key: string\n legend: string\n value: string\n onChange: (value: string) => void\n options: Array<{ value: string; label: string }>\n columns?: 2 | 3 | 4\n}\n\n// ---------------------------------------------------------------------------\n// Language option — flag + label\n// ---------------------------------------------------------------------------\n\nexport interface LanguageOption {\n code: string\n label: string\n flagSvg?: string\n flagEmoji?: string\n}\n\n// ---------------------------------------------------------------------------\n// Preference group — a titled grid of SelectionCards\n// ---------------------------------------------------------------------------\n\nexport interface PreferenceGroupConfig {\n title: string\n description?: string\n value: string\n onChange: (value: string) => void\n options: SelectionOption[]\n columns?: 2 | 3 | 4\n}\n\n// ---------------------------------------------------------------------------\n// Section configs\n// ---------------------------------------------------------------------------\n\nexport interface WorkspaceSectionConfig {\n title: string\n fields: SettingsFieldConfig[]\n}\n\nexport interface ProfileSectionConfig {\n title: string\n initials: string\n avatarUrl?: string\n avatarGradient?: string\n changeAvatarLabel: string\n onChangeAvatar?: () => void\n fields: SettingsFieldConfig[]\n password?: {\n title: string\n currentLabel: string\n newLabel: string\n confirmLabel: string\n submitLabel: string\n onSubmit: (current: string, newPassword: string, confirm: string) => void\n }\n}\n\nexport interface PreferencesSectionConfig {\n title: string\n description?: string\n\n /** StatusToggle rows (theme, email visibility, etc.) */\n toggles?: ToggleConfig[]\n\n /** Radio card groups (dock position, etc.) */\n radioGroups?: RadioGroupConfig[]\n\n /** Language picker grid */\n languages?: {\n title: string\n titleIcon?: ReactNode\n currentLocale: string\n onLocaleChange: (locale: string) => void\n options: LanguageOption[]\n }\n\n /** SelectionCard grids (legacy/simple pickers) */\n groups?: PreferenceGroupConfig[]\n}\n\n// ---------------------------------------------------------------------------\n// Section definition\n// ---------------------------------------------------------------------------\n\nexport interface SettingsSection {\n id: string\n label: string\n icon: ComponentType<{ className?: string }>\n group?: string\n}\n\n// ---------------------------------------------------------------------------\n// Main props\n// ---------------------------------------------------------------------------\n\nexport interface SettingsModalProps {\n open: boolean\n onClose: () => void\n title: string\n subtitle?: string\n closeLabel?: string\n sidebarFooter?: ReactNode\n initialSection?: string\n\n identity?: GlassModalIdentity\n\n sections: SettingsSection[]\n\n workspace?: WorkspaceSectionConfig\n profile?: ProfileSectionConfig\n preferences?: PreferencesSectionConfig\n\n renderSection?: (sectionId: string) => ReactNode | undefined\n\n placeholderMessage?: string\n\n accessDenied?: {\n title: string\n description: string\n icon?: ReactNode\n }\n\n /** Sign-out button at the bottom of the sidebar */\n signOut?: {\n label: string\n icon?: ReactNode\n onClick: () => void\n }\n}\n\n// ---------------------------------------------------------------------------\n// Internal — glass input class\n// ---------------------------------------------------------------------------\n\nconst GLASS_INPUT =\n 'w-full rounded-xl liquid-surface px-3 py-2.5 text-sm text-slate-900 outline-none placeholder:text-slate-400 focus-ring-indigo dark:text-white dark:placeholder:text-slate-500'\n\n// ---------------------------------------------------------------------------\n// Field renderer\n// ---------------------------------------------------------------------------\n\nfunction FieldRenderer({ field }: { field: SettingsFieldConfig }) {\n if (field.type === 'textarea') {\n return (\n <Field className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-slate-800 dark:text-slate-200\">{field.label}</Label>\n <Textarea\n rows={field.rows ?? 4}\n value={field.value}\n onChange={field.onChange ? (event) => field.onChange?.(event.target.value) : undefined}\n readOnly={field.readOnly}\n placeholder={field.placeholder}\n className={GLASS_INPUT}\n />\n {field.description ? (\n <Description className=\"text-xs text-slate-500 dark:text-slate-400\">{field.description}</Description>\n ) : null}\n </Field>\n )\n }\n\n if (field.readOnly || field.type === 'url') {\n return (\n <Field className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-slate-800 dark:text-slate-200\">{field.label}</Label>\n <div className=\"rounded-xl liquid-surface px-4 py-2.5 text-sm text-blue-600 dark:text-blue-400\">\n {field.value}\n </div>\n {field.description ? (\n <Description className=\"text-xs text-slate-500 dark:text-slate-400\">{field.description}</Description>\n ) : null}\n </Field>\n )\n }\n\n return (\n <Field className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-slate-800 dark:text-slate-200\">{field.label}</Label>\n <div className=\"relative\">\n <Input\n type={field.type ?? 'text'}\n value={field.value}\n onChange={field.onChange ? (event) => field.onChange?.(event.target.value) : undefined}\n readOnly={field.readOnly}\n placeholder={field.placeholder}\n className={[GLASS_INPUT, field.copyable ? 'pr-10' : ''].join(' ')}\n />\n {field.copyable ? (\n <button\n type=\"button\"\n onClick={() => navigator.clipboard.writeText(field.value)}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 rounded-lg p-1.5 text-slate-400 transition hover:bg-white/40 hover:text-slate-700 dark:hover:bg-white/[0.08] dark:hover:text-slate-200\"\n aria-label={`Copy ${field.label}`}\n >\n <ClipboardDocumentIcon className=\"h-4 w-4\" />\n </button>\n ) : null}\n </div>\n {field.description ? (\n <Description className=\"text-xs text-slate-500 dark:text-slate-400\">{field.description}</Description>\n ) : null}\n </Field>\n )\n}\n\nfunction SectionHeading({ title, description }: { title: string; description?: string }) {\n return (\n <div className=\"mb-6\">\n <h2 className=\"text-2xl font-semibold tracking-tight text-slate-950 dark:text-white\">{title}</h2>\n {description ? (\n <p className=\"mt-2 text-sm text-slate-600 dark:text-slate-300\">{description}</p>\n ) : null}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Built-in sections\n// ---------------------------------------------------------------------------\n\nfunction WorkspaceContent({ config }: { config: WorkspaceSectionConfig }) {\n return (\n <div className=\"space-y-6\">\n <SectionHeading title={config.title} />\n {config.fields.map((field) => (\n <FieldRenderer key={field.key} field={field} />\n ))}\n </div>\n )\n}\n\nfunction ProfileContent({ config }: { config: ProfileSectionConfig }) {\n const [currentPassword, setCurrentPassword] = useState('')\n const [newPassword, setNewPassword] = useState('')\n const [confirmPassword, setConfirmPassword] = useState('')\n\n return (\n <div className=\"space-y-6\">\n <SectionHeading title={config.title} />\n\n {/* Avatar */}\n <div className=\"flex items-center gap-4\">\n <div\n className={[\n 'flex h-16 w-16 items-center justify-center rounded-full bg-gradient-to-br ring-2 ring-white/60 dark:ring-white/20',\n config.avatarGradient ?? 'from-purple-500 to-blue-500',\n ].join(' ')}\n >\n {config.avatarUrl ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img src={config.avatarUrl} alt={config.initials} className=\"h-16 w-16 rounded-full object-cover\" />\n ) : (\n <span className=\"text-xl font-bold text-white\">{config.initials}</span>\n )}\n </div>\n <Button color=\"zinc\" onClick={config.onChangeAvatar} className=\"flex items-center gap-2\">\n <UserIcon className=\"h-4 w-4\" />\n {config.changeAvatarLabel}\n </Button>\n </div>\n\n {/* Fields */}\n <div className=\"space-y-4\">\n {config.fields.map((field) => (\n <FieldRenderer key={field.key} field={field} />\n ))}\n </div>\n\n {/* Password */}\n {config.password ? (\n <div className=\"border-t border-white/20 pt-6 dark:border-white/8\">\n <h3 className=\"mb-4 text-lg font-semibold text-slate-900 dark:text-white\">\n {config.password.title}\n </h3>\n <div className=\"space-y-4\">\n <Field className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-slate-800 dark:text-slate-200\">\n {config.password.currentLabel}\n </Label>\n <Input\n type=\"password\"\n value={currentPassword}\n onChange={(event) => setCurrentPassword(event.target.value)}\n placeholder=\"••••••••\"\n className={GLASS_INPUT}\n />\n </Field>\n <Field className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-slate-800 dark:text-slate-200\">\n {config.password.newLabel}\n </Label>\n <Input\n type=\"password\"\n value={newPassword}\n onChange={(event) => setNewPassword(event.target.value)}\n placeholder=\"••••••••\"\n className={GLASS_INPUT}\n />\n </Field>\n <Field className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-slate-800 dark:text-slate-200\">\n {config.password.confirmLabel}\n </Label>\n <Input\n type=\"password\"\n value={confirmPassword}\n onChange={(event) => setConfirmPassword(event.target.value)}\n placeholder=\"••••••••\"\n className={GLASS_INPUT}\n />\n </Field>\n <Button\n color=\"blue\"\n className=\"mt-2\"\n onClick={() => config.password?.onSubmit(currentPassword, newPassword, confirmPassword)}\n >\n {config.password.submitLabel}\n </Button>\n </div>\n </div>\n ) : null}\n </div>\n )\n}\n\nfunction PreferencesContent({ config }: { config: PreferencesSectionConfig }) {\n return (\n <div className=\"space-y-6\">\n <SectionHeading title={config.title} description={config.description} />\n\n {/* Toggles — StatusToggle rows */}\n {config.toggles && config.toggles.length > 0 ? (\n <div className=\"rounded-2xl liquid-surface p-4\">\n <div className=\"space-y-3\">\n {config.toggles.map((toggle) => (\n <StatusToggle\n key={toggle.key}\n checked={toggle.checked}\n onChange={toggle.onChange}\n onLabel={toggle.onLabel}\n onIcon={toggle.onIcon}\n offLabel={toggle.offLabel}\n offIcon={toggle.offIcon}\n />\n ))}\n </div>\n </div>\n ) : null}\n\n {/* Radio groups — dock-position style cards */}\n {config.radioGroups?.map((group) => (\n <div key={group.key} className=\"rounded-2xl liquid-surface p-4\">\n <fieldset>\n <legend className=\"mb-3 text-sm font-medium text-slate-700 dark:text-slate-300\">\n {group.legend}\n </legend>\n <div\n className={`grid gap-2 ${\n group.columns === 3\n ? 'grid-cols-3'\n : group.columns === 4\n ? 'grid-cols-4'\n : 'grid-cols-2'\n }`}\n >\n {group.options.map((option) => {\n const isSelected = group.value === option.value\n return (\n <label\n key={option.value}\n className={[\n 'group relative flex cursor-pointer items-center rounded-xl p-3 transition-all duration-200',\n isSelected\n ? 'liquid-surface liquid-surface-active liquid-glass-indigo'\n : 'liquid-surface hover:shadow-md',\n ].join(' ')}\n >\n <input\n type=\"radio\"\n name={group.key}\n value={option.value}\n checked={isSelected}\n onChange={() => group.onChange(option.value)}\n className=\"absolute inset-0 appearance-none focus:outline-none\"\n />\n <span className=\"block text-xs font-medium text-slate-900 dark:text-white\">\n {option.label}\n </span>\n <CheckCircleIcon\n className={[\n 'ml-auto h-4 w-4 shrink-0 text-indigo-600 dark:text-indigo-400',\n isSelected ? 'visible' : 'invisible',\n ].join(' ')}\n />\n </label>\n )\n })}\n </div>\n </fieldset>\n </div>\n ))}\n\n {/* Language picker */}\n {config.languages ? (\n <div className=\"rounded-2xl liquid-surface p-4\">\n <div className=\"mb-3 flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400\">\n {config.languages.titleIcon}\n {config.languages.title}\n </div>\n <div className=\"grid grid-cols-2 gap-2\">\n {config.languages.options.map((lang) => {\n const isSelected = config.languages?.currentLocale === lang.code\n return (\n <button\n key={lang.code}\n type=\"button\"\n onClick={() => config.languages?.onLocaleChange(lang.code)}\n className={[\n 'rounded-xl px-3 py-2.5 text-left text-sm transition-all duration-200 focus-ring-indigo',\n isSelected\n ? 'liquid-surface liquid-surface-active liquid-glass-indigo text-indigo-700 dark:text-indigo-300'\n : 'liquid-surface hover:shadow-md text-slate-700 dark:text-slate-300',\n ].join(' ')}\n >\n {lang.flagSvg ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img\n src={lang.flagSvg}\n alt={lang.label}\n className=\"mr-2 inline-block h-5 w-5 rounded-full object-cover align-middle\"\n />\n ) : lang.flagEmoji ? (\n <span className=\"mr-2 inline-block align-middle\">{lang.flagEmoji}</span>\n ) : null}\n {lang.label}\n </button>\n )\n })}\n </div>\n </div>\n ) : null}\n\n {/* Selection card groups (legacy/simple) */}\n {config.groups?.map((group) => (\n <div key={group.title} className=\"rounded-2xl liquid-surface p-4 space-y-4\">\n <div>\n <h3 className=\"mb-1 text-sm font-medium text-slate-700 dark:text-slate-200\">\n {group.title}\n </h3>\n {group.description ? (\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{group.description}</p>\n ) : null}\n </div>\n <div\n className={`grid gap-3 ${\n group.columns === 2\n ? 'grid-cols-2'\n : group.columns === 4\n ? 'grid-cols-4'\n : 'grid-cols-3'\n }`}\n >\n {group.options.map((option) => (\n <SelectionCard\n key={option.value}\n selected={group.value === option.value}\n onClick={() => group.onChange(option.value)}\n icon={option.icon}\n label={option.label}\n />\n ))}\n </div>\n </div>\n ))}\n </div>\n )\n}\n\nfunction PlaceholderContent({ message }: { message: string }) {\n return (\n <div className=\"flex h-64 items-center justify-center\">\n <p className=\"text-sm text-slate-500 dark:text-slate-400\">{message}</p>\n </div>\n )\n}\n\nfunction AccessDeniedContent({\n config,\n}: {\n config: { title: string; description: string; icon?: ReactNode }\n}) {\n return (\n <div className=\"flex h-64 flex-col items-center justify-center space-y-4\">\n {config.icon ?? <LockClosedIcon className=\"h-16 w-16 text-slate-400\" />}\n <div className=\"text-center\">\n <p className=\"mb-2 text-lg font-medium text-slate-900 dark:text-white\">{config.title}</p>\n <p className=\"text-sm text-slate-500 dark:text-slate-400\">{config.description}</p>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// SettingsModal\n// ---------------------------------------------------------------------------\n\nexport function SettingsModal({\n open,\n onClose,\n title,\n subtitle,\n closeLabel,\n sidebarFooter,\n initialSection,\n identity,\n sections,\n workspace,\n profile,\n preferences,\n renderSection,\n placeholderMessage = 'Coming soon',\n accessDenied,\n signOut,\n}: SettingsModalProps) {\n const [activeSectionId, setActiveSectionId] = useState(\n () => initialSection ?? sections[0]?.id ?? '',\n )\n\n useEffect(() => {\n if (open) {\n setActiveSectionId(initialSection ?? sections[0]?.id ?? '')\n }\n }, [open, initialSection, sections])\n\n const handleSectionChange = useCallback((sectionId: string) => {\n setActiveSectionId(sectionId)\n }, [])\n\n const dialogSections: GlassModalSection[] = sections.map((section) => ({\n id: section.id,\n label: section.label,\n icon: section.icon,\n group: section.group,\n }))\n\n const renderContent = () => {\n if (accessDenied && !sections.some((section) => section.id === activeSectionId)) {\n return <AccessDeniedContent config={accessDenied} />\n }\n\n if (activeSectionId === 'workspace' && workspace) {\n return <WorkspaceContent config={workspace} />\n }\n if (activeSectionId === 'profile' && profile) {\n return <ProfileContent config={profile} />\n }\n if (activeSectionId === 'preferences' && preferences) {\n return <PreferencesContent config={preferences} />\n }\n\n if (renderSection) {\n const custom = renderSection(activeSectionId)\n if (custom !== undefined) {\n return custom\n }\n }\n\n return <PlaceholderContent message={placeholderMessage} />\n }\n\n const footer = signOut ? (\n <Button type=\"button\" onClick={signOut.onClick} color=\"ios-glass-red\" fullWidth>\n {signOut.icon}\n {signOut.label}\n </Button>\n ) : (\n sidebarFooter\n )\n\n return (\n <GlassModal\n open={open}\n onClose={onClose}\n title={title}\n subtitle={subtitle}\n sidebar={{\n sections: dialogSections,\n activeSectionId,\n onSectionChange: handleSectionChange,\n identity,\n footer: footer,\n }}\n >\n {renderContent()}\n </GlassModal>\n )\n}\n","import * as React from 'react'\nimport type { SVGProps } from 'react'\n\nexport const WindsockIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg width={512} height={512} viewBox=\"0 0 512 512\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <defs>\n <linearGradient id=\"windsock-bg\" x1={48} y1={48} x2={464} y2={464} gradientUnits=\"userSpaceOnUse\">\n <stop offset={0} stopColor=\"#6AA7F0\" />\n <stop offset={1} stopColor=\"#3A74E0\" />\n </linearGradient>\n <linearGradient id=\"windsock-panel\" x1={80} y1={110} x2={432} y2={430} gradientUnits=\"userSpaceOnUse\">\n <stop offset={0} stopColor=\"#3F85D0\" />\n <stop offset={1} stopColor=\"#2B63B3\" />\n </linearGradient>\n <linearGradient id=\"windsock-mast\" x1={94} y1={140} x2={116} y2={420} gradientUnits=\"userSpaceOnUse\">\n <stop offset={0} stopColor=\"#DCE4EF\" />\n <stop offset={1} stopColor=\"#90A3BA\" />\n </linearGradient>\n <filter id=\"windsock-shadow\" x={130} y={130} width={300} height={220} filterUnits=\"userSpaceOnUse\" colorInterpolationFilters=\"sRGB\">\n <feFlood floodOpacity={0} result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\n <feOffset dx={2} dy={8} />\n <feGaussianBlur stdDeviation={5} />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.03 0 0 0 0 0.09 0 0 0 0 0.20 0 0 0 0.35 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow\" result=\"shape\" />\n </filter>\n <clipPath id=\"windsock-clip\">\n <rect x={48} y={48} width={416} height={416} rx={104} />\n </clipPath>\n </defs>\n\n <rect x={48} y={48} width={416} height={416} rx={104} fill=\"url(#windsock-bg)\" />\n\n <g clipPath=\"url(#windsock-clip)\">\n <rect x={80} y={110} width={360} height={340} fill=\"url(#windsock-panel)\" />\n\n <rect x={94} y={144} width={20} height={282} rx={10} fill=\"url(#windsock-mast)\" />\n <circle cx={104} cy={170} r={7} fill=\"#C9D5E4\" />\n <path d=\"M113 170L149 166\" stroke=\"#BDCCDE\" strokeWidth={6} strokeLinecap=\"round\" />\n <path d=\"M113 218L152 200\" stroke=\"#AFC0D4\" strokeWidth={5.5} strokeLinecap=\"round\" />\n <path d=\"M113 218H145\" stroke=\"#BDD0E3\" strokeWidth={6} strokeLinecap=\"round\" />\n\n <g filter=\"url(#windsock-shadow)\">\n <path d=\"M152 161L389 250\" stroke=\"#F4F6F8\" strokeWidth={22} strokeLinecap=\"round\" />\n <path d=\"M152 180L389 280\" stroke=\"#E3D5C4\" strokeWidth={20} strokeLinecap=\"round\" />\n\n <path d=\"M152 159L212 182\" stroke=\"#ED603D\" strokeWidth={20} strokeLinecap=\"butt\" />\n <path d=\"M263 201L318 222\" stroke=\"#ED603D\" strokeWidth={19} strokeLinecap=\"butt\" />\n <path d=\"M360 238L392 250\" stroke=\"#ED603D\" strokeWidth={18} strokeLinecap=\"butt\" />\n <path d=\"M360 271L392 283\" stroke=\"#ED603D\" strokeWidth={18} strokeLinecap=\"butt\" />\n\n <path d=\"M152 161L392 250\" stroke=\"#FAFBFC\" strokeOpacity={0.42} strokeWidth={2.5} />\n <path d=\"M152 180L392 283\" stroke=\"#7A2C16\" strokeOpacity={0.3} strokeWidth={2.5} />\n\n <ellipse cx={151} cy={170} rx={8} ry={10} fill=\"#D5E0ED\" />\n <path d=\"M146 161L152 161L152 180L146 178Z\" fill=\"#C7D5E7\" />\n <path d=\"M146 161L152 161L152 180\" stroke=\"#9FB1C7\" strokeWidth={1.8} />\n </g>\n </g>\n </svg>\n)\n\nexport default WindsockIcon\n","import { useCallback, useRef, useId, type ClipboardEvent, type KeyboardEvent } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\n\nexport interface OtpInputProps {\n /** Number of digits (default: 6) */\n length?: number\n /** Current value */\n value: string\n /** Change handler */\n onChange: (value: string) => void\n /** Called when all digits are filled */\n onComplete?: (code: string) => void\n /** Error message */\n error?: string\n /** Disabled state */\n disabled?: boolean\n /** Auto-focus first input on mount */\n autoFocus?: boolean\n /** Input mode for mobile keyboards */\n inputMode?: 'numeric' | 'text'\n}\n\nexport function OtpInput({\n length = 6,\n value,\n onChange,\n onComplete,\n error,\n disabled = false,\n autoFocus = false,\n inputMode = 'numeric',\n}: OtpInputProps) {\n const t = useTranslations('auth')\n const groupId = useId()\n const inputsRef = useRef<(HTMLInputElement | null)[]>([])\n\n const digits = value.split('').concat(Array(length).fill('')).slice(0, length)\n\n const focusInput = useCallback((index: number) => {\n const clamped = Math.max(0, Math.min(index, length - 1))\n inputsRef.current[clamped]?.focus()\n }, [length])\n\n const handleChange = useCallback(\n (index: number, digit: string) => {\n if (disabled) return\n const char = digit.slice(-1)\n if (inputMode === 'numeric' && !/^\\d$/.test(char)) return\n\n const next = value.split('').concat(Array(length).fill('')).slice(0, length)\n next[index] = char\n const newValue = next.join('').replace(/\\s/g, '')\n\n triggerHaptic('light')\n onChange(newValue)\n\n if (index < length - 1) {\n focusInput(index + 1)\n }\n\n if (newValue.length === length) {\n triggerHaptic('success')\n onComplete?.(newValue)\n }\n },\n [disabled, inputMode, value, length, onChange, focusInput, onComplete],\n )\n\n const handleKeyDown = useCallback(\n (index: number, event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Backspace') {\n event.preventDefault()\n const next = value.split('').concat(Array(length).fill('')).slice(0, length)\n if (next[index]) {\n next[index] = ''\n onChange(next.join('').trimEnd())\n } else if (index > 0) {\n next[index - 1] = ''\n onChange(next.join('').trimEnd())\n focusInput(index - 1)\n }\n triggerHaptic('light')\n } else if (event.key === 'ArrowLeft' && index > 0) {\n event.preventDefault()\n focusInput(index - 1)\n } else if (event.key === 'ArrowRight' && index < length - 1) {\n event.preventDefault()\n focusInput(index + 1)\n }\n },\n [value, length, onChange, focusInput],\n )\n\n const handlePaste = useCallback(\n (event: ClipboardEvent<HTMLInputElement>) => {\n event.preventDefault()\n const pasted = event.clipboardData.getData('text').trim()\n const cleaned = inputMode === 'numeric'\n ? pasted.replace(/\\D/g, '').slice(0, length)\n : pasted.slice(0, length)\n\n if (cleaned.length > 0) {\n onChange(cleaned)\n triggerHaptic('light')\n focusInput(Math.min(cleaned.length, length - 1))\n\n if (cleaned.length === length) {\n triggerHaptic('success')\n onComplete?.(cleaned)\n }\n }\n },\n [inputMode, length, onChange, focusInput, onComplete],\n )\n\n return (\n <div className=\"space-y-2\">\n <div\n role=\"group\"\n aria-label={t('otpGroupLabel')}\n aria-describedby={error ? `${groupId}-error` : undefined}\n className=\"flex justify-center gap-2 sm:gap-3\"\n >\n {digits.map((digit, index) => (\n <input\n key={index}\n ref={(element) => { inputsRef.current[index] = element }}\n type=\"text\"\n inputMode={inputMode}\n maxLength={1}\n value={digit ?? ''}\n disabled={disabled}\n autoFocus={autoFocus && index === 0}\n autoComplete=\"one-time-code\"\n aria-label={t('otpDigitLabel', { current: index + 1, total: length })}\n onChange={(event) => handleChange(index, event.target.value)}\n onKeyDown={(event) => handleKeyDown(index, event)}\n onPaste={handlePaste}\n onFocus={(event) => event.target.select()}\n className={`\n liquid-surface h-12 w-10 sm:h-14 sm:w-12 rounded-xl\n text-center text-xl font-semibold\n text-gray-900 dark:text-white\n transition-all duration-200\n focus:ring-2 focus:ring-ios-blue focus:outline-none\n disabled:cursor-not-allowed disabled:opacity-50\n ${error\n ? 'ring-2 ring-ios-red'\n : digit\n ? 'ring-1 ring-gray-300 dark:ring-white/15'\n : ''\n }\n `}\n />\n ))}\n </div>\n\n {error && (\n <p\n id={`${groupId}-error`}\n role=\"alert\"\n className=\"text-sm text-ios-red text-center\"\n >\n {error}\n </p>\n )}\n </div>\n )\n}\n","import { useMemo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { motion } from 'framer-motion'\nimport { CheckIcon, XMarkIcon } from '@heroicons/react/20/solid'\nimport { springPresets } from '@ui/lib/animations'\n\nexport interface PasswordPolicy {\n minLength?: number\n requireUppercase?: boolean\n requireLowercase?: boolean\n requireNumbers?: boolean\n requireSpecialCharacters?: boolean\n}\n\nexport interface PasswordStrengthMeterProps {\n /** The password to evaluate */\n password: string\n /** Password policy requirements */\n policy?: PasswordPolicy\n /** Show individual requirement checklist */\n showRequirements?: boolean\n}\n\ninterface Requirement {\n labelKey: string\n labelParams?: Record<string, number>\n met: boolean\n}\n\nconst DEFAULT_POLICY: PasswordPolicy = {\n minLength: 8,\n requireUppercase: true,\n requireLowercase: true,\n requireNumbers: true,\n requireSpecialCharacters: false,\n}\n\nconst STRENGTH_COLORS = [\n 'bg-ios-red',\n 'bg-ios-orange',\n 'bg-ios-yellow dark:bg-yellow-400',\n 'bg-ios-green',\n] as const\n\nfunction evaluateRequirements(password: string, policy: PasswordPolicy): Requirement[] {\n const requirements: Requirement[] = []\n\n if (policy.minLength) {\n requirements.push({\n labelKey: 'passwordMinLength',\n labelParams: { count: policy.minLength },\n met: password.length >= policy.minLength,\n })\n }\n if (policy.requireUppercase) {\n requirements.push({ labelKey: 'passwordUppercase', met: /[A-Z]/.test(password) })\n }\n if (policy.requireLowercase) {\n requirements.push({ labelKey: 'passwordLowercase', met: /[a-z]/.test(password) })\n }\n if (policy.requireNumbers) {\n requirements.push({ labelKey: 'passwordNumber', met: /\\d/.test(password) })\n }\n if (policy.requireSpecialCharacters) {\n requirements.push({\n labelKey: 'passwordSpecial',\n met: /[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]/.test(password),\n })\n }\n\n return requirements\n}\n\nfunction computeStrength(password: string, requirements: Requirement[]): number {\n if (password.length === 0) return 0\n\n const metCount = requirements.filter((requirement) => requirement.met).length\n const ratio = requirements.length > 0 ? metCount / requirements.length : 0\n const lengthBonus = Math.min(password.length / 16, 1) * 0.2\n const raw = ratio * 0.8 + lengthBonus\n\n if (raw >= 0.9) return 4\n if (raw >= 0.65) return 3\n if (raw >= 0.4) return 2\n return 1\n}\n\nexport function PasswordStrengthMeter({\n password,\n policy = DEFAULT_POLICY,\n showRequirements = false,\n}: PasswordStrengthMeterProps) {\n const t = useTranslations('auth')\n\n const requirements = useMemo(\n () => evaluateRequirements(password, policy),\n [password, policy],\n )\n\n const strength = useMemo(\n () => computeStrength(password, requirements),\n [password, requirements],\n )\n\n const strengthLabels = [\n t('strengthWeak'),\n t('strengthFair'),\n t('strengthGood'),\n t('strengthStrong'),\n ] as const\n\n if (password.length === 0) return null\n\n return (\n <div className=\"space-y-2\">\n {/* Strength bars */}\n <div className=\"flex items-center gap-2\">\n <div className=\"flex flex-1 gap-1\">\n {Array.from({ length: 4 }, (_, index) => (\n <motion.div\n key={index}\n className={`h-1.5 flex-1 rounded-full ${\n index < strength\n ? STRENGTH_COLORS[strength - 1]\n : 'bg-gray-200 dark:bg-gray-700'\n }`}\n initial={{ scaleX: 0 }}\n animate={{ scaleX: index < strength ? 1 : 0.5 }}\n transition={springPresets.stiff}\n style={{ transformOrigin: 'left' }}\n />\n ))}\n </div>\n <span className={`text-xs font-medium ${\n strength >= 3\n ? 'text-ios-green dark:text-[#30D158]'\n : strength === 2\n ? 'text-ios-orange'\n : 'text-ios-red'\n }`}>\n {strengthLabels[strength - 1]}\n </span>\n </div>\n\n {/* Requirements checklist */}\n {showRequirements && (\n <ul className=\"space-y-1\">\n {requirements.map((requirement) => (\n <motion.li\n key={requirement.labelKey}\n className=\"flex items-center gap-1.5 text-xs\"\n initial={false}\n animate={{ opacity: 1 }}\n >\n {requirement.met ? (\n <CheckIcon className=\"h-3.5 w-3.5 text-ios-green dark:text-[#30D158] shrink-0\" />\n ) : (\n <XMarkIcon className=\"h-3.5 w-3.5 text-gray-400 dark:text-gray-500 shrink-0\" />\n )}\n <span className={\n requirement.met\n ? 'text-gray-600 dark:text-gray-300'\n : 'text-gray-400 dark:text-gray-500'\n }>\n {t(requirement.labelKey, requirement.labelParams)}\n </span>\n </motion.li>\n ))}\n </ul>\n )}\n </div>\n )\n}\n","import { useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Button } from '@ui/components/button'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\nimport { ClipboardDocumentIcon, ArrowDownTrayIcon } from '@heroicons/react/20/solid'\n\nexport interface BackupCodeGridProps {\n /** Array of backup codes */\n codes: string[]\n /** Called when copy-all is clicked */\n onCopyAll?: () => void\n /** Show download button */\n showDownload?: boolean\n /** Whether codes are visible */\n revealed?: boolean\n /** Called when reveal is toggled */\n onReveal?: () => void\n}\n\nexport function BackupCodeGrid({\n codes,\n onCopyAll,\n showDownload = true,\n revealed = true,\n onReveal,\n}: BackupCodeGridProps) {\n const t = useTranslations('auth')\n\n const handleCopyAll = useCallback(async () => {\n const text = codes.join('\\n')\n await navigator.clipboard.writeText(text)\n triggerHaptic('success')\n onCopyAll?.()\n }, [codes, onCopyAll])\n\n const handleDownload = useCallback(() => {\n const text = [\n t('backupCodesFileTitle'),\n '=====================',\n `${t('backupCodesGenerated')}: ${new Date().toISOString()}`,\n '',\n t('backupCodesKeepSafe'),\n '',\n ...codes.map((code, index) => `${String(index + 1).padStart(2, ' ')}. ${code}`),\n ].join('\\n')\n\n const blob = new Blob([text], { type: 'text/plain' })\n const url = URL.createObjectURL(blob)\n const anchor = document.createElement('a')\n anchor.href = url\n anchor.download = 'backup-codes.txt'\n anchor.click()\n URL.revokeObjectURL(url)\n triggerHaptic('success')\n }, [codes, t])\n\n return (\n <div className=\"space-y-3\">\n {/* Code grid — 2 columns, 5 rows */}\n <div className=\"liquid-surface-strong rounded-xl p-4\">\n {!revealed ? (\n <div className=\"flex flex-col items-center justify-center py-8 gap-3\">\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {t('backupCodesHidden')}\n </p>\n {onReveal && (\n <Button outline onClick={onReveal}>\n {t('backupCodesReveal')}\n </Button>\n )}\n </div>\n ) : (\n <div className=\"grid grid-cols-2 gap-2\">\n {codes.map((code, index) => (\n <div\n key={index}\n className=\"flex items-center gap-2 rounded-lg bg-white/50 dark:bg-white/5 px-3 py-2\"\n >\n <span className=\"text-xs text-gray-400 dark:text-gray-500 tabular-nums w-4\">\n {index + 1}.\n </span>\n <code className=\"font-mono text-sm font-medium text-gray-900 dark:text-white tracking-wider\">\n {code}\n </code>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Actions */}\n {revealed && (\n <div className=\"flex gap-2\">\n <Button outline size=\"sm\" onClick={handleCopyAll}>\n <ClipboardDocumentIcon className=\"h-4 w-4\" />\n {t('backupCodesCopyAll')}\n </Button>\n {showDownload && (\n <Button outline size=\"sm\" onClick={handleDownload}>\n <ArrowDownTrayIcon className=\"h-4 w-4\" />\n {t('backupCodesDownload')}\n </Button>\n )}\n </div>\n )}\n </div>\n )\n}\n","import { useTranslations } from '@ui/lib/i18n-context'\nimport { Button } from '@ui/components/button'\n\nexport type SocialProvider = 'google' | 'github' | 'discord' | 'microsoft'\n\nexport interface SocialLoginButtonsProps {\n /** Providers to show */\n providers: SocialProvider[]\n /** Called when a provider button is clicked */\n onProviderClick: (provider: SocialProvider) => void\n /** Layout direction */\n layout?: 'row' | 'column'\n /** Provider currently loading */\n loading?: SocialProvider | null\n /** Disable all buttons */\n disabled?: boolean\n}\n\nconst PROVIDER_ICONS: Record<SocialProvider, React.ReactNode> = {\n google: (\n <svg className=\"h-5 w-5\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z\" fill=\"#4285F4\" />\n <path d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\" fill=\"#34A853\" />\n <path d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18A10.96 10.96 0 0 0 1 12c0 1.77.43 3.45 1.18 4.93l2.85-2.22.81-.62z\" fill=\"#FBBC05\" />\n <path d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" fill=\"#EA4335\" />\n </svg>\n ),\n github: (\n <svg className=\"h-5 w-5\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844a9.59 9.59 0 0 1 2.504.337c1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.02 10.02 0 0 0 22 12.017C22 6.484 17.522 2 12 2z\" />\n </svg>\n ),\n discord: (\n <svg className=\"h-5 w-5\" viewBox=\"0 0 24 24\" fill=\"#5865F2\" aria-hidden=\"true\">\n <path d=\"M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.947 2.418-2.157 2.418z\" />\n </svg>\n ),\n microsoft: (\n <svg className=\"h-5 w-5\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" fill=\"#F25022\" />\n <rect x=\"13\" y=\"1\" width=\"10\" height=\"10\" fill=\"#7FBA00\" />\n <rect x=\"1\" y=\"13\" width=\"10\" height=\"10\" fill=\"#00A4EF\" />\n <rect x=\"13\" y=\"13\" width=\"10\" height=\"10\" fill=\"#FFB900\" />\n </svg>\n ),\n}\n\nconst PROVIDER_LABEL_KEYS: Record<SocialProvider, string> = {\n google: 'continueWithGoogle',\n github: 'continueWithGitHub',\n discord: 'continueWithDiscord',\n microsoft: 'continueWithMicrosoft',\n}\n\nexport function SocialLoginButtons({\n providers,\n onProviderClick,\n layout = 'column',\n loading = null,\n disabled = false,\n}: SocialLoginButtonsProps) {\n const t = useTranslations('auth')\n const isColumn = layout === 'column'\n\n return (\n <div className={`flex ${isColumn ? 'flex-col' : 'flex-row'} gap-2`}>\n {providers.map((provider) => (\n <Button\n key={provider}\n outline\n fullWidth={isColumn}\n disabled={disabled || (loading !== null && loading !== provider)}\n loading={loading === provider}\n onClick={() => onProviderClick(provider)}\n >\n {PROVIDER_ICONS[provider]}\n <span>{t(PROVIDER_LABEL_KEYS[provider])}</span>\n </Button>\n ))}\n </div>\n )\n}\n","/**\n * HeroPanel\n *\n * A generic branded hero panel with liquid-glass aesthetics.\n * Used for split-screen login layouts, landing pages, etc.\n * Renders: logo slot, glass heading card, stat tiles, footer.\n */\n\nexport interface HeroPanelStat {\n value: string\n label: string\n}\n\nexport interface HeroPanelProps {\n logo: React.ReactNode\n title: string\n subtitle: string\n stats: HeroPanelStat[]\n footer?: string\n className?: string\n}\n\nexport function HeroPanel({\n logo,\n title,\n subtitle,\n stats,\n footer,\n className = '',\n}: HeroPanelProps) {\n return (\n <div\n className={[\n 'hidden lg:flex lg:w-1/2 relative overflow-hidden',\n // Light: clean neutral canvas\n 'bg-gradient-to-br from-slate-50 via-white to-slate-100',\n // Dark: deep charcoal\n 'dark:from-slate-950 dark:via-gray-900 dark:to-slate-900',\n className,\n ].join(' ')}\n >\n {/* Ambient glow orbs — subtle color accents */}\n <div className=\"absolute inset-0 pointer-events-none\">\n <div className=\"absolute top-20 left-10 w-72 h-72 rounded-full blur-3xl bg-indigo-200/40 dark:bg-indigo-500/[0.08]\" />\n <div className=\"absolute bottom-20 right-10 w-96 h-96 rounded-full blur-3xl bg-purple-200/30 dark:bg-purple-400/[0.06]\" />\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-64 h-64 rounded-full blur-2xl bg-blue-100/50 dark:bg-blue-500/[0.05]\" />\n </div>\n\n {/* Dot-grid pattern */}\n <div\n className=\"absolute inset-0 pointer-events-none text-slate-400 dark:text-white opacity-[0.06] dark:opacity-[0.03]\"\n style={{\n backgroundImage: 'radial-gradient(circle at 1px 1px, currentColor 1px, transparent 0)',\n backgroundSize: '32px 32px',\n }}\n />\n\n {/* Global light-sweep */}\n <div\n className={[\n 'absolute inset-0 pointer-events-none',\n 'bg-[linear-gradient(140deg,rgba(255,255,255,0.65)_0%,rgba(255,255,255,0.20)_42%,rgba(255,255,255,0)_100%)]',\n 'dark:bg-[linear-gradient(140deg,rgba(255,255,255,0.06)_0%,rgba(255,255,255,0.02)_42%,rgba(255,255,255,0)_100%)]',\n ].join(' ')}\n />\n\n {/* Content */}\n <div className=\"relative flex flex-col justify-between p-10 xl:p-12 w-full\">\n {/* Logo slot */}\n <div>{logo}</div>\n\n {/* Main glass card + stats */}\n <div className=\"space-y-5\">\n {/* Heading card */}\n <div\n className={[\n 'relative overflow-hidden rounded-2xl p-8 xl:p-10',\n // Light glass\n 'border border-white/80 bg-white/55 backdrop-blur-xl',\n 'shadow-[inset_0_1px_0_rgba(255,255,255,0.90),0_22px_44px_-28px_rgba(15,23,42,0.15)]',\n // Dark glass\n 'dark:border-white/[0.10] dark:bg-white/[0.05] dark:backdrop-blur-2xl',\n 'dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.10),0_22px_44px_-28px_rgba(0,0,0,0.50)]',\n ].join(' ')}\n >\n {/* Light reflection overlay */}\n <div\n className={[\n 'pointer-events-none absolute inset-0 rounded-2xl',\n 'bg-[linear-gradient(140deg,rgba(255,255,255,0.75)_0%,rgba(255,255,255,0.25)_34%,rgba(255,255,255,0)_100%)]',\n 'dark:bg-[linear-gradient(140deg,rgba(255,255,255,0.10)_0%,rgba(255,255,255,0.03)_34%,rgba(255,255,255,0)_100%)]',\n ].join(' ')}\n />\n {/* Top edge highlight */}\n <div className=\"pointer-events-none absolute inset-x-8 top-0 h-px bg-white/95 dark:bg-white/20 blur-[0.5px]\" />\n\n <h1 className=\"relative text-4xl xl:text-5xl font-bold leading-tight whitespace-pre-line text-slate-900 dark:text-white\">\n {title}\n </h1>\n <p className=\"relative mt-5 text-base xl:text-lg max-w-md leading-relaxed text-slate-500 dark:text-white/60\">\n {subtitle}\n </p>\n </div>\n\n {/* Liquid glass stat tiles */}\n <div className=\"flex gap-3\">\n {stats.map((stat) => (\n <div\n key={stat.label}\n className={[\n 'relative flex-1 overflow-hidden rounded-xl p-4',\n // Light glass tile\n 'border border-white/70 bg-white/50 backdrop-blur-xl',\n 'shadow-[inset_0_1px_0_rgba(255,255,255,0.85),0_14px_28px_-20px_rgba(15,23,42,0.12)]',\n // Dark glass tile\n 'dark:border-white/[0.10] dark:bg-white/[0.04] dark:backdrop-blur-2xl',\n 'dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.08),0_14px_28px_-20px_rgba(0,0,0,0.45)]',\n ].join(' ')}\n >\n {/* Inner light reflection */}\n <div\n className={[\n 'pointer-events-none absolute inset-0 rounded-xl',\n 'bg-[linear-gradient(140deg,rgba(255,255,255,0.70)_0%,rgba(255,255,255,0.20)_42%,rgba(255,255,255,0)_100%)]',\n 'dark:bg-[linear-gradient(140deg,rgba(255,255,255,0.08)_0%,rgba(255,255,255,0.02)_42%,rgba(255,255,255,0)_100%)]',\n ].join(' ')}\n />\n <p className=\"relative text-2xl xl:text-3xl font-bold text-slate-900 dark:text-white\">{stat.value}</p>\n <p className=\"relative text-xs xl:text-sm mt-0.5 font-medium text-slate-400 dark:text-white/45\">{stat.label}</p>\n </div>\n ))}\n </div>\n </div>\n\n {/* Footer */}\n {footer && (\n <p className=\"text-sm text-slate-400 dark:text-white/25\">\n {footer}\n </p>\n )}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Card } from '@ui/components/card'\nimport { HeroPanel, type HeroPanelProps } from '@ui/components/hero-panel'\n\nexport interface AuthLayoutProps {\n /** Auth form content */\n children: ReactNode\n /** Optional hero panel config for split-screen layout */\n heroPanel?: HeroPanelProps\n /** Card max width (default: md) */\n cardWidth?: 'sm' | 'md' | 'lg'\n /** Optional logo shown above the card */\n logo?: ReactNode\n}\n\nconst WIDTH_CLASSES = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n} as const\n\nexport function AuthLayout({\n children,\n heroPanel,\n cardWidth = 'md',\n logo,\n}: AuthLayoutProps) {\n return (\n <div className=\"flex min-h-screen\">\n {/* Hero panel (hidden on mobile) */}\n {heroPanel && <HeroPanel {...heroPanel} />}\n\n {/* Form side */}\n <div className=\"flex flex-1 items-center justify-center p-6 sm:p-8\">\n <div className={`w-full ${WIDTH_CLASSES[cardWidth]}`}>\n {/* Logo */}\n {logo && (\n <div className=\"mb-6 flex justify-center lg:hidden\">\n {logo}\n </div>\n )}\n\n {/* Card */}\n <Card variant=\"glass\" className=\"p-6 sm:p-8\">\n {children}\n </Card>\n </div>\n </div>\n </div>\n )\n}\n","/**\n * Resolve Tailwind background color tokens to RGB tuples used by liquid glass accents.\n * Accepts tokens like \"bg-blue-500\", \"dark:bg-amber-400\", or combined class strings.\n */\nconst BASE_COLOR_RGB: Record<string, string> = {\n slate: '100, 116, 139',\n gray: '107, 114, 128',\n zinc: '113, 113, 122',\n neutral: '115, 115, 115',\n stone: '120, 113, 108',\n red: '239, 68, 68',\n orange: '249, 115, 22',\n amber: '245, 158, 11',\n yellow: '234, 179, 8',\n lime: '132, 204, 22',\n green: '34, 197, 94',\n emerald: '16, 185, 129',\n teal: '20, 184, 166',\n cyan: '6, 182, 212',\n sky: '14, 165, 233',\n blue: '59, 130, 246',\n indigo: '99, 102, 241',\n violet: '139, 92, 246',\n purple: '168, 85, 247',\n fuchsia: '217, 70, 239',\n pink: '236, 72, 153',\n rose: '244, 63, 94',\n}\n\nconst DEFAULT_GLASS_ACCENT_RGB = '99, 102, 241'\n\nexport function resolveGlassAccentRgb(className: string | undefined, fallback: string = DEFAULT_GLASS_ACCENT_RGB): string {\n if (!className) return fallback\n\n const token = className\n .split(/\\s+/)\n .find((value) => value.includes('bg-') && !value.includes('/'))\n\n if (!token) return fallback\n\n const normalized = token.replace(/^dark:/, '')\n const match = normalized.match(/^bg-([a-z]+)-(\\d{2,3})$/)\n if (!match) return fallback\n\n const color = match[1]\n return BASE_COLOR_RGB[color] ?? fallback\n}\n","/**\n * Subdivision Theme System\n * ========================\n *\n * Registry-based theming for geographic subdivisions (states, provinces, etc.).\n * Consumers register country-specific palettes at startup, then query via\n * generic getSubdivision* functions.\n *\n * No country-specific data is hardcoded here — all data comes from registration.\n */\n\nexport interface SubdivisionColorPalette {\n primary: string\n secondary: string\n text: 'light' | 'dark'\n}\n\nexport interface SubdivisionThemeConfig {\n palettes: Record<string, SubdivisionColorPalette>\n accents?: Record<string, string>\n flagUrlTemplate?: (code: string) => string | null\n}\n\n/** Accent → Tailwind class mappings */\nconst ACCENT_COLOR_MAP: Record<\n string,\n { ring: string; text: string; bg: string; pill: string }\n> = {\n green: {\n ring: 'ring-green-500',\n text: 'text-green-600 dark:text-green-400',\n bg: 'bg-green-500/10',\n pill: 'bg-green-500 text-white',\n },\n blue: {\n ring: 'ring-blue-500',\n text: 'text-blue-600 dark:text-blue-400',\n bg: 'bg-blue-500/10',\n pill: 'bg-blue-500 text-white',\n },\n red: {\n ring: 'ring-red-500',\n text: 'text-red-600 dark:text-red-400',\n bg: 'bg-red-500/10',\n pill: 'bg-red-500 text-white',\n },\n yellow: {\n ring: 'ring-yellow-500',\n text: 'text-yellow-600 dark:text-yellow-400',\n bg: 'bg-yellow-500/10',\n pill: 'bg-yellow-500 text-black',\n },\n pink: {\n ring: 'ring-pink-400',\n text: 'text-pink-600 dark:text-pink-400',\n bg: 'bg-pink-500/10',\n pill: 'bg-pink-400 text-white',\n },\n black: {\n ring: 'ring-gray-900',\n text: 'text-gray-900 dark:text-gray-100',\n bg: 'bg-gray-900/10',\n pill: 'bg-gray-900 text-white',\n },\n white: {\n ring: 'ring-gray-300',\n text: 'text-gray-700 dark:text-gray-300',\n bg: 'bg-white/20 dark:bg-white/10',\n pill: 'bg-white text-gray-900 border border-gray-300',\n },\n gray: {\n ring: 'ring-gray-500',\n text: 'text-gray-600 dark:text-gray-400',\n bg: 'bg-gray-500/10',\n pill: 'bg-gray-500 text-white',\n },\n orange: {\n ring: 'ring-orange-500',\n text: 'text-orange-600 dark:text-orange-400',\n bg: 'bg-orange-500/10',\n pill: 'bg-orange-500 text-white',\n },\n purple: {\n ring: 'ring-purple-500',\n text: 'text-purple-600 dark:text-purple-400',\n bg: 'bg-purple-500/10',\n pill: 'bg-purple-500 text-white',\n },\n}\n\n// ---------- Internal registry ----------\n\nconst themeRegistry = new Map<string, SubdivisionThemeConfig>()\n\n// ---------- Registration ----------\n\nexport function registerSubdivisionTheme(\n countryCode: string,\n config: SubdivisionThemeConfig\n): void {\n themeRegistry.set(countryCode.toUpperCase(), config)\n}\n\n// ---------- Query API ----------\n\nexport function getSubdivisionPalette(\n country: string,\n code: string\n): SubdivisionColorPalette | null {\n const theme = themeRegistry.get(country.toUpperCase())\n if (!theme) return null\n return theme.palettes[code.toUpperCase()] ?? null\n}\n\nexport function getSubdivisionFlagUrl(\n country: string,\n code: string\n): string | null {\n const theme = themeRegistry.get(country.toUpperCase())\n if (!theme?.flagUrlTemplate) return null\n return theme.flagUrlTemplate(code.toUpperCase())\n}\n\nexport function getSubdivisionHexColor(\n country: string,\n code: string\n): string | null {\n const palette = getSubdivisionPalette(country, code)\n return palette?.primary ?? null\n}\n\nexport function getSubdivisionGradient(\n country: string,\n code: string,\n direction: string = '135deg'\n): string | null {\n const palette = getSubdivisionPalette(country, code)\n if (!palette) return null\n return `linear-gradient(${direction}, ${palette.primary}, ${palette.secondary})`\n}\n\nexport function getSubdivisionColors(\n country: string,\n code: string\n): { ring: string; text: string; bg: string; pill: string } | null {\n const accent = getSubdivisionAccent(country, code)\n if (!accent) return null\n return ACCENT_COLOR_MAP[accent] ?? null\n}\n\nexport function getSubdivisionAccent(\n country: string,\n code: string\n): string | null {\n const theme = themeRegistry.get(country.toUpperCase())\n if (!theme?.accents) return null\n return theme.accents[code.toUpperCase()] ?? null\n}\n\nexport function isValidSubdivision(country: string, code: string): boolean {\n const theme = themeRegistry.get(country.toUpperCase())\n if (!theme) return false\n return code.toUpperCase() in theme.palettes\n}\n","export interface NotificationBadgeProps {\n count: number\n className?: string\n /** Localized noun for the badge (\"notifications\", \"mensagens\"…).\n * Used in the sr-only label so the count is announced as\n * \"3 notifications\" instead of just \"3\". WCAG 1.1.1 (color/shape\n * cannot be the only channel — the count needs a textual frame).\n * Defaults to PT-BR. */\n itemLabel?: string\n}\n\nexport function NotificationBadge({ count, className = \"\", itemLabel = \"notificações\" }: NotificationBadgeProps) {\n if (count === 0) return null\n\n const displayCount = count > 99 ? \"99+\" : count.toString()\n // Bumped from text-[10px] → text-[11px] to clear the WCAG 1.4.4\n // minimum legible size for numeric content. Font-bold red-500\n // over white ring still passes 1.4.3.\n return (\n <span\n role=\"status\"\n aria-label={`${count} ${itemLabel}`}\n className={`absolute -top-1 -right-1 flex items-center justify-center min-w-[18px] h-[18px] px-1 text-[11px] font-bold text-white bg-red-600 rounded-full ring-2 ring-white dark:ring-gray-800 ${\n count > 0 ? \"animate-pulse motion-reduce:animate-none\" : \"\"\n } ${className}`}\n >\n <span aria-hidden=\"true\">{displayCount}</span>\n </span>\n )\n}\n","import { motion, useInView, useMotionValue, useSpring, useTransform } from 'framer-motion'\nimport { clsx } from 'clsx'\nimport { useEffect, useRef } from 'react'\n\n/**\n * Text Components\n */\nexport function RadiantHeading({\n className = '',\n as: Element = 'h2',\n dark = false,\n ...props\n}: {\n className?: string\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'\n dark?: boolean\n} & React.ComponentPropsWithoutRef<'h1' | 'h2' | 'h3'>) {\n return (\n <Element\n {...props}\n className={clsx(\n className,\n 'text-4xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-5xl lg:text-6xl',\n )}\n />\n )\n}\n\nexport function RadiantSubheading({\n className = '',\n as: Element = 'h3',\n dark = false,\n ...props\n}: {\n className?: string\n as?: 'h2' | 'h3' | 'h4'\n dark?: boolean\n} & React.ComponentPropsWithoutRef<'h2' | 'h3' | 'h4'>) {\n return (\n <Element\n {...props}\n className={clsx(\n className,\n 'font-semibold text-blue-600 dark:text-blue-400 uppercase tracking-wider text-sm mb-4',\n )}\n />\n )\n}\n\nexport function Lead({\n className = '',\n ...props\n}: React.ComponentPropsWithoutRef<'p'>) {\n return (\n <p\n className={clsx(className, 'text-xl text-gray-600 dark:text-gray-400 leading-relaxed')}\n {...props}\n />\n )\n}\n\n/**\n * Animated Number Component\n */\nexport function AnimatedNumber({\n start,\n end,\n decimals = 0,\n suffix = '',\n}: {\n start: number\n end: number\n decimals?: number\n suffix?: string\n}) {\n const ref = useRef(null)\n const isInView = useInView(ref, { once: true, amount: 0.5 })\n\n const value = useMotionValue(start)\n const spring = useSpring(value, { damping: 30, stiffness: 100 })\n const display = useTransform(spring, (num) => `${num.toFixed(decimals)}${suffix}`)\n\n useEffect(() => {\n value.set(isInView ? end : start)\n }, [start, end, isInView, value])\n\n return <motion.span ref={ref}>{display}</motion.span>\n}\n\n/**\n * Gradient Components\n */\nexport function Gradient({\n className = '',\n ...props\n}: React.ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={clsx(\n className,\n 'bg-gradient-to-r from-blue-400 via-purple-400 to-pink-400 dark:from-blue-600 dark:via-purple-600 dark:to-pink-600',\n )}\n />\n )\n}\n\nexport function GradientBackground() {\n return (\n <div className=\"relative mx-auto max-w-7xl overflow-hidden\">\n {/* Top right gradient */}\n <div\n className={clsx(\n 'absolute -top-40 -right-40 h-80 w-80',\n 'bg-gradient-to-br from-blue-400 to-transparent',\n 'rounded-full blur-3xl opacity-20 dark:opacity-10',\n )}\n />\n {/* Bottom left gradient */}\n <div\n className={clsx(\n 'absolute -bottom-40 -left-40 h-80 w-80',\n 'bg-gradient-to-tr from-purple-400 to-transparent',\n 'rounded-full blur-3xl opacity-20 dark:opacity-10',\n )}\n />\n </div>\n )\n}\n\n/**\n * Bento Card Component\n */\nexport function BentoCard({\n dark = false,\n className = '',\n eyebrow,\n title,\n description,\n graphic,\n fade = [],\n}: {\n dark?: boolean\n className?: string\n eyebrow: React.ReactNode\n title: React.ReactNode\n description: React.ReactNode\n graphic: React.ReactNode\n fade?: ('top' | 'bottom')[]\n}) {\n return (\n <motion.div\n initial=\"idle\"\n whileHover=\"active\"\n variants={{ idle: {}, active: {} }}\n className={clsx(\n className,\n 'group relative flex flex-col overflow-hidden rounded-2xl',\n 'bg-white dark:bg-gray-800 shadow-lg hover:shadow-xl transition-shadow',\n 'border border-gray-200 dark:border-gray-700',\n )}\n >\n <div className=\"relative h-80 shrink-0 overflow-hidden bg-gradient-to-br from-gray-100 to-gray-50 dark:from-gray-700 dark:to-gray-800\">\n {graphic}\n {fade.includes('top') && (\n <div className=\"absolute inset-0 bg-gradient-to-b from-white dark:from-gray-800 to-transparent opacity-40\" />\n )}\n {fade.includes('bottom') && (\n <div className=\"absolute inset-0 bg-gradient-to-t from-white dark:from-gray-800 to-transparent opacity-40\" />\n )}\n </div>\n <div className=\"relative p-8 sm:p-10\">\n <div className=\"text-sm font-semibold text-blue-600 dark:text-blue-400 uppercase tracking-wider mb-2\">\n {eyebrow}\n </div>\n <p className=\"mt-1 text-2xl font-bold tracking-tight text-gray-900 dark:text-white\">\n {title}\n </p>\n <p className=\"mt-3 max-w-xl text-base text-gray-600 dark:text-gray-400 leading-relaxed\">\n {description}\n </p>\n </div>\n </motion.div>\n )\n}\n\n/**\n * Plus Grid Components\n */\nexport function PlusGrid({\n className = '',\n children,\n}: {\n className?: string\n children: React.ReactNode\n}) {\n return (\n <div className={clsx(className, 'space-y-px')}>\n {children}\n </div>\n )\n}\n\nexport function PlusGridRow({\n className = '',\n children,\n}: {\n className?: string\n children: React.ReactNode\n}) {\n return (\n <div\n className={clsx(\n className,\n 'group/row relative isolate grid gap-px',\n )}\n >\n {children}\n </div>\n )\n}\n\nexport function PlusGridItem({\n className = '',\n children,\n}: {\n className?: string\n children: React.ReactNode\n}) {\n return (\n <div className={clsx(className, 'group/item relative')}>\n {children}\n </div>\n )\n}\n\n/**\n * Radiant Stat Card Component\n */\nexport function RadiantStatCard({\n value,\n label,\n gradient = 'from-blue-400 to-blue-600',\n}: {\n value: React.ReactNode\n label: string\n gradient?: string\n}) {\n return (\n <motion.div\n initial={{ opacity: 0, y: 20 }}\n whileInView={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.5 }}\n className={clsx(\n 'group relative rounded-2xl overflow-hidden p-8 sm:p-12',\n `bg-gradient-to-br ${gradient}`,\n 'shadow-lg hover:shadow-xl transition-all duration-300 hover:scale-105',\n )}\n >\n <div className=\"relative z-10\">\n <div className=\"text-4xl sm:text-5xl font-bold text-white mb-2\">\n {value}\n </div>\n <div className=\"text-sm sm:text-base font-medium text-white/80\">\n {label}\n </div>\n </div>\n <div className=\"absolute inset-0 bg-gradient-to-t from-black/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity\" />\n </motion.div>\n )\n}\n\n/**\n * Feature Card with Icon\n */\nexport function FeatureCard({\n icon: Icon,\n title,\n description,\n gradient = 'from-blue-400 to-blue-600',\n}: {\n icon: React.ComponentType<{ className?: string }>\n title: string\n description: string\n gradient?: string\n}) {\n return (\n <motion.div\n initial={{ opacity: 0, y: 20 }}\n whileInView={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.5 }}\n className=\"group relative rounded-2xl overflow-hidden bg-white dark:bg-gray-800 p-8 shadow-md hover:shadow-xl transition-all duration-300 border border-gray-200 dark:border-gray-700\"\n >\n <div className={clsx(\n 'inline-flex rounded-xl p-3 mb-6',\n `bg-gradient-to-br ${gradient}`,\n )}>\n <Icon className=\"h-6 w-6 text-white\" />\n </div>\n <h3 className=\"text-xl font-bold text-gray-900 dark:text-white mb-2\">\n {title}\n </h3>\n <p className=\"text-gray-600 dark:text-gray-400 leading-relaxed\">\n {description}\n </p>\n </motion.div>\n )\n}\n","/**\n * CategoryTab / CategoryTabs / CategoryBadge\n *\n * Generic selectable category tabs with configurable color schemes.\n * Fully domain-agnostic — consumers provide a CategoryTabConfig for each item.\n */\n\nexport interface CategoryTabConfig {\n abbreviation: string\n label: string\n bg: string\n text: string\n selectedBg: string\n selectedText: string\n selectedBorder: string\n dotColor: string\n}\n\nexport interface CategoryTabProps {\n config: CategoryTabConfig\n isSelected: boolean\n onClick: () => void\n className?: string\n}\n\nexport function CategoryTab({\n config,\n isSelected,\n onClick,\n className = \"\",\n}: CategoryTabProps) {\n const baseClasses = \"relative px-4 py-2.5 text-sm font-medium rounded-lg transition-all duration-200 border-2\"\n\n const selectedClasses = `${config.selectedBg} ${config.selectedText} ${config.selectedBorder} shadow-md`\n const unselectedClasses = `bg-gray-50 dark:bg-gray-800/50 ${config.text} border-gray-200 dark:border-gray-700 opacity-60 hover:opacity-100 hover:border-gray-400 dark:hover:border-gray-500`\n\n return (\n <button\n onClick={(event) => {\n event.stopPropagation()\n onClick()\n }}\n className={`${baseClasses} ${isSelected ? selectedClasses : unselectedClasses} ${className}`}\n >\n <span className=\"flex items-center gap-2\">\n {isSelected && (\n <span className={`h-2 w-2 rounded-full ${config.dotColor}`} />\n )}\n <span className=\"font-semibold\">{config.abbreviation}</span>\n <span className=\"hidden sm:inline\">\n {config.label.replace(config.abbreviation, \"\").trim() || config.label}\n </span>\n </span>\n </button>\n )\n}\n\nexport interface CategoryTabsProps {\n items: Array<{\n key: string\n config: CategoryTabConfig\n value?: string\n reactKey?: string\n }>\n selectedKey: string | null\n onSelect: (key: string) => void\n className?: string\n}\n\nexport function CategoryTabs({\n items,\n selectedKey,\n onSelect,\n className = \"\",\n}: CategoryTabsProps) {\n return (\n <div className={`flex flex-wrap gap-3 ${className}`}>\n {items.map((item) => (\n <CategoryTab\n key={item.reactKey ?? item.key}\n config={item.config}\n isSelected={selectedKey === (item.value ?? item.key)}\n onClick={() => onSelect(item.value ?? item.key)}\n />\n ))}\n </div>\n )\n}\n\nexport interface CategoryBadgeProps {\n config: CategoryTabConfig\n size?: \"sm\" | \"md\"\n className?: string\n}\n\nexport function CategoryBadge({\n config,\n size = \"md\",\n className = \"\",\n}: CategoryBadgeProps) {\n const sizeClasses = size === \"sm\"\n ? \"px-2 py-0.5 text-xs\"\n : \"px-2.5 py-1 text-xs\"\n\n return (\n <span\n className={`inline-flex items-center gap-1 font-medium rounded-full ${config.bg} ${config.text} ${sizeClasses} ${className}`}\n >\n <span className={`h-1.5 w-1.5 rounded-full ${config.dotColor}`} />\n {config.abbreviation}\n </span>\n )\n}\n","/**\n * OptionGrid\n *\n * A generic grid of selectable option buttons with icon header.\n * Used for selecting from a set of options (e.g., currencies, countries, themes).\n */\n\nexport interface OptionGridItem {\n code: string\n flag: string\n label: string\n}\n\nexport interface OptionGridProps {\n icon: React.ReactNode\n title: string\n options: OptionGridItem[]\n selected: string\n onSelect: (code: string) => void\n isLoading?: boolean\n columns?: 2 | 3 | 4\n layout?: 'horizontal' | 'vertical'\n className?: string\n}\n\nexport function OptionGrid({\n icon,\n title,\n options,\n selected,\n onSelect,\n isLoading = false,\n columns = 2,\n layout = 'horizontal',\n className = \"\",\n}: OptionGridProps) {\n const columnClass = columns === 2\n ? 'grid-cols-2'\n : columns === 3\n ? 'grid-cols-3'\n : 'grid-cols-4'\n\n const isVertical = layout === 'vertical'\n\n return (\n <div className={`rounded-2xl liquid-surface p-4 ${className}`}>\n <div className=\"mb-2 flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {icon}\n {title}\n </div>\n <div className={`grid ${columnClass} gap-2`}>\n {options.map((option) => {\n const isSelected = selected === option.code\n\n return (\n <button\n key={option.code}\n type=\"button\"\n disabled={isLoading}\n onClick={() => onSelect(option.code)}\n className={`rounded-lg px-${isVertical ? '2' : '3'} py-2 ${isVertical ? 'text-center' : 'text-left'} text-${isVertical ? 'xs' : 'sm'} transition-colors ${\n isSelected\n ? 'liquid-surface liquid-surface-active liquid-glass-indigo text-indigo-700 dark:text-indigo-300'\n : 'liquid-surface hover:shadow-md text-gray-700 dark:text-gray-300'\n } ${isLoading ? 'opacity-50 cursor-not-allowed' : ''}`}\n >\n {isVertical ? (\n <>\n <span className=\"block text-lg mb-0.5\">{option.flag}</span>\n {option.label}\n </>\n ) : (\n <>\n <span className=\"mr-2\">{option.flag}</span>\n {option.label}\n </>\n )}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { ChevronDownIcon } from '@heroicons/react/24/outline'\nimport type { ReactNode } from 'react'\n\nexport interface CollapsibleGroup<TItem, TMeta = undefined> {\n key: string\n items: TItem[]\n header: ReactNode\n meta?: TMeta\n}\n\nexport interface CollapsibleGroupedListProps<TItem, TMeta = undefined> {\n groups: CollapsibleGroup<TItem, TMeta>[]\n renderItem: (item: TItem, group: CollapsibleGroup<TItem, TMeta>) => ReactNode\n getItemKey: (item: TItem) => string\n className?: string\n groupClassName?: (group: CollapsibleGroup<TItem, TMeta>) => string\n}\n\nexport function CollapsibleGroupedList<TItem, TMeta = undefined>({\n groups,\n renderItem,\n getItemKey,\n className,\n groupClassName,\n}: CollapsibleGroupedListProps<TItem, TMeta>) {\n const [collapsedGroups, setCollapsedGroups] = useState<Set<string>>(new Set())\n\n const toggleCollapse = (groupKey: string) => {\n setCollapsedGroups((previousCollapsedGroups) => {\n const nextCollapsedGroups = new Set(previousCollapsedGroups)\n if (nextCollapsedGroups.has(groupKey)) {\n nextCollapsedGroups.delete(groupKey)\n } else {\n nextCollapsedGroups.add(groupKey)\n }\n return nextCollapsedGroups\n })\n }\n\n return (\n <div className={`max-h-[540px] overflow-y-auto rounded-2xl liquid-surface ${className ?? ''}`}>\n <div className=\"space-y-0.5 p-1.5\">\n {groups.map((group) => {\n const isCollapsed = collapsedGroups.has(group.key)\n return (\n <div\n key={group.key}\n className={`overflow-hidden rounded-xl ${groupClassName ? groupClassName(group) : ''}`}\n >\n <button\n type=\"button\"\n onClick={() => toggleCollapse(group.key)}\n className=\"flex w-full items-center gap-2 px-3 py-2 transition-colors duration-200 hover:bg-white/10 dark:hover:bg-white/5\"\n >\n <ChevronDownIcon\n className={`h-3.5 w-3.5 flex-shrink-0 text-slate-400 transition-transform duration-200 ${\n isCollapsed ? '-rotate-90' : ''\n }`}\n />\n <div className=\"min-w-0 flex-1\">{group.header}</div>\n </button>\n\n <div\n className=\"grid transition-all duration-200 ease-in-out\"\n style={{ gridTemplateRows: isCollapsed ? '0fr' : '1fr' }}\n >\n <div className=\"overflow-hidden\">\n <div className=\"space-y-px px-1.5 pb-1.5\">\n {group.items.map((item) => (\n <div key={getItemKey(item)}>{renderItem(item, group)}</div>\n ))}\n </div>\n </div>\n </div>\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n","/**\n * useGeoMapState Hook\n * ===================\n *\n * Centralized state management for an interactive geographic map.\n * Handles zoom, pan, hover, and marker entrance animations.\n * Fully generic — no country-specific data.\n */\n\nimport { useState, useCallback, useMemo, useEffect } from 'react'\n\nconst MIN_ZOOM = 0.8\nconst MAX_ZOOM = 4\nconst ZOOM_STEP = 0.5\n\nexport interface GeoMapRegionData<T = unknown> {\n code: string\n items: T[]\n coordinates: [number, number]\n}\n\nexport interface UseGeoMapStateOptions<T> {\n items: T[]\n getRegionCode: (item: T) => string\n regionCoordinates: Record<string, [number, number]>\n defaultCenter?: [number, number]\n}\n\nexport function useGeoMapState<T>({\n items,\n getRegionCode,\n regionCoordinates,\n defaultCenter = [0, 0],\n}: UseGeoMapStateOptions<T>) {\n const [zoom, setZoom] = useState(1)\n const [center, setCenter] = useState<[number, number]>(defaultCenter)\n const [hoveredRegion, setHoveredRegion] = useState<string | null>(null)\n const [animatedRegions, setAnimatedRegions] = useState<Set<string>>(new Set())\n const [panOffset, setPanOffset] = useState<[number, number]>([0, 0])\n\n const handleZoomIn = useCallback(() => {\n setZoom((previous) => Math.min(previous + ZOOM_STEP, MAX_ZOOM))\n }, [])\n\n const handleZoomOut = useCallback(() => {\n setZoom((previous) => Math.max(previous - ZOOM_STEP, MIN_ZOOM))\n }, [])\n\n const handleMoveEnd = useCallback(\n (position: { coordinates: [number, number]; zoom: number }) => {\n setCenter(position.coordinates)\n setZoom(position.zoom)\n },\n []\n )\n\n const handlePan = useCallback((dx: number, dy: number) => {\n setPanOffset((previous) => [previous[0] + dx, previous[1] + dy])\n }, [])\n\n // Group items by region code\n const regionGroups = useMemo((): GeoMapRegionData<T>[] => {\n const grouped = new Map<string, T[]>()\n\n items.forEach((item) => {\n const code = getRegionCode(item)\n if (!grouped.has(code)) {\n grouped.set(code, [])\n }\n grouped.get(code)!.push(item)\n })\n\n return Array.from(grouped.entries())\n .filter(([code]) => regionCoordinates[code])\n .map(([code, regionItems]) => ({\n code,\n items: regionItems,\n coordinates: regionCoordinates[code],\n }))\n .sort((a, b) => b.items.length - a.items.length)\n }, [items, getRegionCode, regionCoordinates])\n\n const animationCodes = useMemo(\n () => regionGroups.map((regionData) => regionData.code),\n [regionGroups]\n )\n const animationSignature = useMemo(\n () => animationCodes.join('|'),\n [animationCodes]\n )\n\n // Animate markers appearing one by one\n useEffect(() => {\n if (animationCodes.length === 0) return\n\n setAnimatedRegions(new Set())\n\n const timers: ReturnType<typeof setTimeout>[] = []\n animationCodes.forEach((code, index) => {\n const timer = setTimeout(() => {\n setAnimatedRegions((previous) => new Set([...previous, code]))\n }, index * 100)\n timers.push(timer)\n })\n\n return () => timers.forEach(clearTimeout)\n }, [animationSignature])\n\n // Calculate marker size based on item count and zoom level\n const getMarkerSize = useCallback(\n (count: number): number => {\n const baseSize = count >= 10 ? 14 : count >= 5 ? 11 : count >= 2 ? 8 : 6\n return baseSize / Math.sqrt(zoom)\n },\n [zoom]\n )\n\n // Calculate font size based on zoom level\n const getFontSize = useCallback(\n (markerSize: number): string => {\n const baseSize = markerSize > 10 ? 10 : 8\n const scaledSize = baseSize / Math.sqrt(zoom)\n return `${Math.max(scaledSize, 6)}px`\n },\n [zoom]\n )\n\n return {\n zoom,\n setZoom,\n handleZoomIn,\n handleZoomOut,\n handleMoveEnd,\n MIN_ZOOM,\n MAX_ZOOM,\n\n center,\n setCenter,\n panOffset,\n handlePan,\n\n hoveredRegion,\n setHoveredRegion,\n\n animatedRegions,\n\n regionGroups,\n\n getMarkerSize,\n getFontSize,\n }\n}\n","/**\n * GeoMapCanvas Component\n * ======================\n *\n * Core map rendering using SVG + d3-geo.\n * Handles geography rendering, markers, drag-to-pan, and interactions.\n * Zoom and pan are handled via viewBox manipulation for uniform scaling.\n *\n * Fully generic — no country-specific data. GeoJSON URL and region property\n * key are provided via props.\n */\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { geoMercator, geoAlbersUsa, geoPath } from 'd3-geo'\nimport type { GeoMapRegionData } from '@ui/components/geo-map/use-geo-map-state'\n\nconst MAP_DEFAULT_STATE_COLOR = 'rgba(100, 116, 139, 0.35)'\nconst MAP_DEFAULT_MARKER_COLOR = '#6366f1'\n\nconst VIEWBOX_WIDTH = 1000\nconst VIEWBOX_HEIGHT = 500\nconst ALBERS_WIDTH = 960\nconst ALBERS_HEIGHT = 600\n\ntype GeoFeature = {\n type: 'Feature'\n properties?: Record<string, string>\n geometry: GeoJSON.Geometry\n}\n\ntype GeoFeatureCollection = {\n type: 'FeatureCollection'\n features: GeoFeature[]\n}\n\nexport interface GeoMapCanvasProps<T = unknown> {\n regionGroups: GeoMapRegionData<T>[]\n regionColorMap: Map<string, string>\n animatedRegions: Set<string>\n zoom: number\n panOffset: [number, number]\n hoveredRegion: string | null\n onPan: (dx: number, dy: number) => void\n onRegionHover: (code: string | null) => void\n onRegionClick: (code: string) => void\n isRegionActive?: (code: string) => boolean\n getMarkerSize: (count: number) => number\n getFontSize: (markerSize: number) => string\n geoJsonUrl: string\n regionPropertyKey?: string\n projectionType?: 'mercator' | 'albersUsa'\n ariaLabel?: string\n}\n\nfunction GeoMapCanvasInner<T = unknown>(\n {\n regionGroups,\n regionColorMap,\n animatedRegions,\n zoom,\n panOffset,\n hoveredRegion,\n onPan,\n onRegionHover,\n onRegionClick,\n isRegionActive,\n getMarkerSize,\n getFontSize,\n geoJsonUrl,\n regionPropertyKey = 'code',\n projectionType = 'mercator',\n ariaLabel = 'Interactive map',\n }: GeoMapCanvasProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const [geoData, setGeoData] = useState<GeoFeatureCollection | null>(null)\n const svgRef = useRef<SVGSVGElement>(null)\n const dragState = useRef<{\n active: boolean\n startX: number\n startY: number\n lastX: number\n lastY: number\n didDrag: boolean\n } | null>(null)\n\n useEffect(() => {\n let cancelled = false\n\n async function loadGeoData() {\n try {\n const response = await fetch(geoJsonUrl)\n if (!response.ok) return\n const data = (await response.json()) as GeoFeatureCollection\n if (!cancelled) setGeoData(data)\n } catch {\n // Keep map shell rendered even if geography fetch fails.\n }\n }\n\n loadGeoData()\n return () => {\n cancelled = true\n }\n }, [geoJsonUrl])\n\n const handleMouseDown = useCallback(\n (event: React.MouseEvent<SVGSVGElement>) => {\n if (event.button !== 0) return\n dragState.current = {\n active: true,\n startX: event.clientX,\n startY: event.clientY,\n lastX: event.clientX,\n lastY: event.clientY,\n didDrag: false,\n }\n },\n []\n )\n\n const handleMouseMove = useCallback(\n (event: React.MouseEvent<SVGSVGElement>) => {\n if (!dragState.current?.active || !svgRef.current) return\n\n const totalDx = event.clientX - dragState.current.startX\n const totalDy = event.clientY - dragState.current.startY\n\n if (!dragState.current.didDrag) {\n if (Math.abs(totalDx) < 5 && Math.abs(totalDy) < 5) return\n dragState.current.didDrag = true\n }\n\n const dx = event.clientX - dragState.current.lastX\n const dy = event.clientY - dragState.current.lastY\n\n const rect = svgRef.current.getBoundingClientRect()\n const viewBoxWidth = VIEWBOX_WIDTH / zoom\n const scaleRatio = viewBoxWidth / rect.width\n\n onPan(dx * scaleRatio, dy * scaleRatio)\n dragState.current.lastX = event.clientX\n dragState.current.lastY = event.clientY\n },\n [zoom, onPan]\n )\n\n const handleMouseUp = useCallback(() => {\n if (dragState.current) {\n dragState.current.active = false\n }\n }, [])\n\n const wasDragAction = useCallback(() => {\n return dragState.current?.didDrag === true\n }, [])\n\n const getLighterColor = (hexColor: string): string => {\n const r = parseInt(hexColor.slice(1, 3), 16)\n const g = parseInt(hexColor.slice(3, 5), 16)\n const b = parseInt(hexColor.slice(5, 7), 16)\n return `rgba(${r}, ${g}, ${b}, 0.15)`\n }\n\n const lighterColors = useMemo(() => {\n const colors = new Map<string, string>()\n regionColorMap.forEach((color, code) => {\n colors.set(code, getLighterColor(color))\n })\n return colors\n }, [regionColorMap])\n\n const featureCollection = useMemo(() => {\n if (!geoData) return null\n return {\n type: 'FeatureCollection' as const,\n features: geoData.features as unknown as GeoJSON.Feature[],\n }\n }, [geoData])\n\n const projection = useMemo(() => {\n if (!featureCollection) return null\n if (projectionType === 'albersUsa') {\n // geoAlbersUsa is a composite projection with Alaska/Hawaii insets.\n // fitSize and manual scale break the compositing — use defaults (960x500)\n // and just scale the SVG viewbox to match.\n return geoAlbersUsa()\n }\n return geoMercator().fitSize([VIEWBOX_WIDTH, VIEWBOX_HEIGHT], featureCollection)\n }, [featureCollection, projectionType])\n\n const pathGenerator = useMemo(() => {\n if (!projection) return null\n return geoPath(projection)\n }, [projection])\n\n const regionsWithItems = useMemo(() => {\n return new Set(regionGroups.map((regionData) => regionData.code))\n }, [regionGroups])\n\n const hasAnyActiveFilter = useMemo(() => {\n return regionGroups.some((regionData) => isRegionActive?.(regionData.code))\n }, [regionGroups, isRegionActive])\n\n // Compute tight bounding box of all projected features\n const featureBounds = useMemo(() => {\n if (!pathGenerator || !geoData) return null\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity\n for (const feature of geoData.features) {\n const bounds = pathGenerator.bounds(feature as unknown as GeoJSON.Feature)\n if (!bounds || !isFinite(bounds[0][0])) continue\n minX = Math.min(minX, bounds[0][0])\n minY = Math.min(minY, bounds[0][1])\n maxX = Math.max(maxX, bounds[1][0])\n maxY = Math.max(maxY, bounds[1][1])\n }\n if (!isFinite(minX)) return null\n const pad = 15\n return { x: minX - pad, y: minY - pad, width: maxX - minX + pad * 2, height: maxY - minY + pad * 2 }\n }, [pathGenerator, geoData])\n\n const effectiveWidth = featureBounds?.width ?? (projectionType === 'albersUsa' ? ALBERS_WIDTH : VIEWBOX_WIDTH)\n const effectiveHeight = featureBounds?.height ?? (projectionType === 'albersUsa' ? ALBERS_HEIGHT : VIEWBOX_HEIGHT)\n const baseX = featureBounds?.x ?? 0\n const baseY = featureBounds?.y ?? 0\n\n const viewBoxParts = useMemo(() => {\n const width = effectiveWidth / zoom\n const height = effectiveHeight / zoom\n const x = baseX + (effectiveWidth - width) / 2 - panOffset[0]\n const y = baseY + (effectiveHeight - height) / 2 - panOffset[1]\n return { x, y, width, height }\n }, [zoom, panOffset, effectiveWidth, effectiveHeight, baseX, baseY])\n\n const viewBox = `${viewBoxParts.x} ${viewBoxParts.y} ${viewBoxParts.width} ${viewBoxParts.height}`\n\n return (\n <div\n ref={ref}\n className=\"relative w-full h-full overflow-hidden rounded-2xl border border-white/20 dark:border-white/[0.12] shadow-lg shadow-black/5 dark:shadow-black/30\"\n data-testid=\"map-canvas\"\n >\n <svg\n ref={svgRef}\n viewBox={viewBox}\n className=\"w-full h-full cursor-grab active:cursor-grabbing\"\n aria-label={ariaLabel}\n style={{ touchAction: 'none', background: 'transparent' }}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseUp}\n >\n <defs>\n <filter id=\"glow-active\" x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"140%\">\n <feDropShadow dx=\"0\" dy=\"0\" stdDeviation=\"3\" floodColor=\"#fff\" floodOpacity=\"0.6\" />\n </filter>\n <filter id=\"inactive-dim\" x=\"0%\" y=\"0%\" width=\"100%\" height=\"100%\">\n <feColorMatrix type=\"saturate\" values=\"0.3\" />\n </filter>\n <filter id=\"marker-glow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <feDropShadow dx=\"0\" dy=\"0\" stdDeviation=\"4\" floodColor=\"#fff\" floodOpacity=\"0.7\" />\n </filter>\n {/* Inset clip hides projection edge artifacts (AlbersUsa rectangular clip lines) */}\n <clipPath id=\"geo-inset-clip\">\n <rect\n x={viewBoxParts.x + 2}\n y={viewBoxParts.y + 2}\n width={viewBoxParts.width - 4}\n height={viewBoxParts.height - 4}\n />\n </clipPath>\n </defs>\n\n <g clipPath=\"url(#geo-inset-clip)\">\n {geoData && pathGenerator\n ? geoData.features.map((feature, index) => {\n const regionCode = feature.properties?.[regionPropertyKey] || feature.properties?.name || ''\n const hasItems = regionsWithItems.has(regionCode)\n const regionColor = regionColorMap.get(regionCode) ?? MAP_DEFAULT_STATE_COLOR\n const isActive = isRegionActive?.(regionCode)\n const isHovered = hoveredRegion === regionCode\n const isDimmed = hasAnyActiveFilter && !isActive && hasItems\n let pathData = pathGenerator(feature as unknown as GeoJSON.Feature)\n // geoAlbersUsa composite projection inserts clip rectangles into paths\n // (outer viewport + inset viewports for AK/HI). These are axis-aligned\n // rectangles with exactly 3 L commands. Remove them wherever they appear.\n if (pathData && projectionType === 'albersUsa') {\n const subpaths = pathData.split('Z').filter(Boolean)\n const cleaned = subpaths.filter(sub => {\n const lCount = (sub.match(/L/g) || []).length\n if (lCount !== 3) return true\n // 3 L's = 4 points (M + 3L) = rectangle. Verify it's axis-aligned.\n const nums = sub.match(/-?\\d+\\.?\\d*/g)?.map(Number)\n if (!nums || nums.length !== 8) return true\n const [x1,y1,x2,y2,x3,y3,x4,y4] = nums\n // Rectangle: two unique x values and two unique y values\n const xs = new Set([x1,x2,x3,x4])\n const ys = new Set([y1,y2,y3,y4])\n return xs.size !== 2 || ys.size !== 2\n })\n pathData = cleaned.length > 0 ? cleaned.join('Z') + 'Z' : null\n }\n\n if (!pathData) return null\n\n return (\n <path\n key={`${regionCode}-${index}`}\n d={pathData}\n fillRule=\"evenodd\"\n data-region={hasItems ? regionCode : undefined}\n onMouseEnter={() => hasItems && onRegionHover(regionCode)}\n onMouseLeave={() => onRegionHover(null)}\n onClick={() => {\n if (hasItems && !wasDragAction()) {\n onRegionClick(regionCode)\n }\n }}\n fill={\n hasItems\n ? isHovered\n ? regionColor\n : isActive\n ? regionColor\n : lighterColors.get(regionCode) || getLighterColor(regionColor)\n : MAP_DEFAULT_STATE_COLOR\n }\n stroke={isActive ? '#fff' : isDimmed ? 'rgba(148, 163, 184, 0.15)' : 'rgba(148, 163, 184, 0.40)'}\n strokeWidth={(isActive ? 2.5 : 0.5) / zoom}\n filter={isActive ? 'url(#glow-active)' : isDimmed ? 'url(#inactive-dim)' : undefined}\n opacity={isDimmed ? 0.45 : 1}\n style={{\n transition: 'fill 0.3s ease, opacity 0.3s ease',\n cursor: hasItems ? 'pointer' : undefined,\n }}\n />\n )\n })\n : null}\n </g>\n\n {projection\n ? regionGroups.map((regionData) => {\n const point = projection(regionData.coordinates)\n if (!point) return null\n\n const [x, y] = point\n const isAnimated = animatedRegions.has(regionData.code)\n const markerSize = getMarkerSize(regionData.items.length)\n const markerColor = regionColorMap.get(regionData.code) ?? MAP_DEFAULT_MARKER_COLOR\n const isActive = isRegionActive?.(regionData.code)\n const isDimmed = hasAnyActiveFilter && !isActive\n\n return (\n <g\n key={regionData.code}\n transform={`translate(${x}, ${y})`}\n data-region={regionData.code}\n data-testid={`marker-${regionData.code}`}\n onMouseEnter={() => onRegionHover(regionData.code)}\n onMouseLeave={() => onRegionHover(null)}\n onClick={() => {\n if (!wasDragAction()) {\n onRegionClick(regionData.code)\n }\n }}\n >\n <g\n style={{\n transform: isAnimated ? 'scale(1)' : 'scale(0)',\n transformOrigin: '0 0',\n opacity: isAnimated ? (isDimmed ? 0.35 : 1) : 0,\n transition: 'all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1)',\n cursor: 'pointer',\n }}\n filter={isActive ? 'url(#marker-glow)' : undefined}\n >\n {isActive ? (\n <circle\n r={markerSize + 6}\n fill=\"none\"\n stroke=\"#fff\"\n strokeWidth={2}\n opacity={0.8}\n />\n ) : (\n <circle\n r={markerSize + 4}\n fill=\"none\"\n stroke={markerColor}\n strokeWidth={1}\n opacity={isDimmed ? 0 : 0.4}\n className={isDimmed ? undefined : 'animate-ping'}\n style={isDimmed ? undefined : { animationDuration: '2s' }}\n />\n )}\n <circle\n r={markerSize}\n fill={markerColor}\n stroke={isActive ? '#fff' : markerColor}\n strokeWidth={isActive ? 3 : 2}\n className=\"transition-colors\"\n style={{\n filter: isActive ? 'brightness(1.2) saturate(1.3)' : isDimmed ? 'saturate(0.3) brightness(0.8)' : 'none',\n }}\n />\n {regionData.items.length > 1 && (\n <text\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n style={{\n fontFamily: 'system-ui',\n fontSize: getFontSize(markerSize),\n fontWeight: 'bold',\n fill: '#fff',\n pointerEvents: 'none',\n opacity: isDimmed ? 0.5 : 1,\n }}\n >\n {regionData.items.length}\n </text>\n )}\n </g>\n </g>\n )\n })\n : null}\n </svg>\n </div>\n )\n}\n\nexport const GeoMapCanvas = React.forwardRef(GeoMapCanvasInner) as <T = unknown>(\n props: GeoMapCanvasProps<T> & { ref?: React.Ref<HTMLDivElement> }\n) => React.ReactElement | null\n","/**\n * MapZoomControls Component\n * ========================\n *\n * Zoom in/out buttons and zoom level display for the map.\n * Generic — accepts optional labels instead of calling useTranslations.\n */\n\nimport React from 'react'\nimport { PlusIcon, MinusIcon } from '@heroicons/react/24/outline'\n\nexport interface MapZoomControlsProps {\n zoom: number\n minZoom: number\n maxZoom: number\n onZoomIn: () => void\n onZoomOut: () => void\n labels?: { zoomIn?: string; zoomOut?: string }\n}\n\nexport const MapZoomControls = React.forwardRef<HTMLDivElement, MapZoomControlsProps>(\n ({ zoom, minZoom, maxZoom, onZoomIn, onZoomOut, labels }, ref) => {\n return (\n <div\n ref={ref}\n className=\"flex flex-col gap-1\"\n data-testid=\"map-zoom-controls\"\n >\n <button\n onClick={onZoomIn}\n disabled={zoom >= maxZoom}\n className=\"p-2 liquid-surface rounded-lg disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n aria-label={labels?.zoomIn ?? 'Zoom in'}\n data-testid=\"zoom-in-button\"\n >\n <PlusIcon className=\"h-5 w-5 text-gray-700 dark:text-gray-300\" />\n </button>\n <button\n onClick={onZoomOut}\n disabled={zoom <= minZoom}\n className=\"p-2 liquid-surface rounded-lg disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n aria-label={labels?.zoomOut ?? 'Zoom out'}\n data-testid=\"zoom-out-button\"\n >\n <MinusIcon className=\"h-5 w-5 text-gray-700 dark:text-gray-300\" />\n </button>\n <div className=\"mt-1 px-2 py-1 liquid-surface rounded-lg text-center\">\n <span\n className=\"text-xs font-medium text-gray-600 dark:text-gray-400\"\n data-testid=\"zoom-level\"\n >\n {Math.round(zoom * 100)}%\n </span>\n </div>\n </div>\n )\n }\n)\n\nMapZoomControls.displayName = 'MapZoomControls'\n","/**\n * InteractiveGeoMap Component\n * ============================\n *\n * Main orchestrator for an interactive geographic map.\n * Fully generic — works with any country and any data type.\n * Consumers provide GeoJSON, region coordinates, and render props\n * for domain-specific content (hover panels, category breakdowns, etc.).\n */\n\n'use client'\n\nimport React, { useMemo } from 'react'\nimport { useGeoMapState, type UseGeoMapStateOptions } from '@ui/components/geo-map/use-geo-map-state'\nimport { GeoMapCanvas } from '@ui/components/geo-map/geo-map-canvas'\nimport { MapZoomControls } from '@ui/components/geo-map/map-zoom-controls'\n\nexport interface InteractiveGeoMapProps<T = unknown> {\n // Data\n items: T[]\n getRegionCode: (item: T) => string\n regionCoordinates: Record<string, [number, number]>\n defaultCenter?: [number, number]\n\n // Map rendering\n geoJsonUrl: string\n regionPropertyKey?: string\n projectionType?: 'mercator' | 'albersUsa'\n getRegionColor: (code: string) => string\n getFlagUrl?: (code: string) => string | null\n\n // Interaction\n isRegionActive?: (code: string) => boolean\n onRegionToggle?: (code: string) => void\n\n // Hover panel — consumer provides domain-specific content\n renderHoverContent?: (regionCode: string, items: T[]) => React.ReactNode\n\n // Counter label\n formatCounter?: (\n totalItems: number,\n totalRegions: number,\n activeItems?: number,\n activeRegions?: number\n ) => string\n\n // Zoom\n zoomLabels?: { zoomIn?: string; zoomOut?: string }\n\n // A11y\n ariaLabel?: string\n className?: string\n}\n\nfunction InteractiveGeoMapInner<T = unknown>(\n {\n items,\n getRegionCode,\n regionCoordinates,\n defaultCenter,\n geoJsonUrl,\n regionPropertyKey,\n projectionType,\n getRegionColor,\n isRegionActive,\n onRegionToggle,\n renderHoverContent,\n formatCounter,\n zoomLabels,\n ariaLabel,\n className,\n }: InteractiveGeoMapProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const mapStateOptions: UseGeoMapStateOptions<T> = {\n items,\n getRegionCode,\n regionCoordinates,\n defaultCenter,\n }\n\n const mapState = useGeoMapState(mapStateOptions)\n\n const regionColorMap = useMemo(() => {\n const colorMap = new Map<string, string>()\n // Include ALL known regions (not just those with items) so every\n // state/province on the map gets its palette color instead of grey.\n for (const code of Object.keys(regionCoordinates)) {\n colorMap.set(code, getRegionColor(code))\n }\n // Also include any region that has items but might not be in coordinates\n mapState.regionGroups.forEach((regionData) => {\n if (!colorMap.has(regionData.code)) {\n colorMap.set(regionData.code, getRegionColor(regionData.code))\n }\n })\n return colorMap\n }, [regionCoordinates, mapState.regionGroups, getRegionColor])\n\n const handleRegionClick = (code: string) => {\n onRegionToggle?.(code)\n }\n\n // Find hovered region data\n const hoveredRegionData = useMemo(() => {\n if (!mapState.hoveredRegion) return null\n return mapState.regionGroups.find(\n (regionData) => regionData.code === mapState.hoveredRegion\n ) ?? null\n }, [mapState.hoveredRegion, mapState.regionGroups])\n\n // Counter text\n const counterText = useMemo(() => {\n if (!formatCounter) return null\n\n const hasActiveFilter = isRegionActive && mapState.regionGroups.some(\n (regionData) => isRegionActive(regionData.code)\n )\n\n if (hasActiveFilter) {\n const activeRegions = mapState.regionGroups.filter(\n (regionData) => isRegionActive!(regionData.code)\n )\n const activeItemCount = activeRegions.reduce(\n (sum, regionData) => sum + regionData.items.length, 0\n )\n return formatCounter(items.length, mapState.regionGroups.length, activeItemCount, activeRegions.length)\n }\n\n return formatCounter(items.length, mapState.regionGroups.length)\n }, [formatCounter, isRegionActive, mapState.regionGroups, items.length])\n\n return (\n <div\n ref={ref}\n className={`space-y-4 h-full ${className ?? ''}`}\n data-testid=\"interactive-geo-map-container\"\n >\n <div className=\"relative h-full\">\n <GeoMapCanvas<T>\n regionGroups={mapState.regionGroups}\n regionColorMap={regionColorMap}\n animatedRegions={mapState.animatedRegions}\n zoom={mapState.zoom}\n panOffset={mapState.panOffset}\n hoveredRegion={mapState.hoveredRegion}\n onPan={mapState.handlePan}\n onRegionHover={mapState.setHoveredRegion}\n onRegionClick={handleRegionClick}\n isRegionActive={isRegionActive}\n getMarkerSize={mapState.getMarkerSize}\n getFontSize={mapState.getFontSize}\n geoJsonUrl={geoJsonUrl}\n regionPropertyKey={regionPropertyKey}\n projectionType={projectionType}\n ariaLabel={ariaLabel}\n />\n\n {/* Zoom Controls - top right */}\n <div className=\"absolute top-3 right-3 z-10\">\n <MapZoomControls\n zoom={mapState.zoom}\n minZoom={mapState.MIN_ZOOM}\n maxZoom={mapState.MAX_ZOOM}\n onZoomIn={mapState.handleZoomIn}\n onZoomOut={mapState.handleZoomOut}\n labels={zoomLabels}\n />\n </div>\n\n {/* Hovered Region Info — consumer-provided via renderHoverContent */}\n {mapState.hoveredRegion && hoveredRegionData && renderHoverContent && (\n <div className=\"absolute top-3 left-3 z-10 pointer-events-none\">\n {renderHoverContent(mapState.hoveredRegion, hoveredRegionData.items)}\n </div>\n )}\n\n {/* Counter - bottom left */}\n {counterText && (\n <div className=\"absolute bottom-3 left-3 z-10 pointer-events-none\">\n <div className=\"liquid-surface rounded-lg px-3 py-1.5\">\n <span className=\"text-xs font-medium text-gray-600 dark:text-gray-300\">\n {counterText}\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport const InteractiveGeoMap = React.forwardRef(InteractiveGeoMapInner) as <T = unknown>(\n props: InteractiveGeoMapProps<T> & { ref?: React.Ref<HTMLDivElement> }\n) => React.ReactElement | null\n","/**\n * GeoMapLegend Component\n * =====================\n *\n * Displays top regions by item count with their colors and optional flags.\n * Generic — no country-specific logic.\n */\n\nimport React from 'react'\n\nconst DEFAULT_LEGEND_COLOR = '#6366f1'\n\nexport interface GeoMapLegendProps {\n items: Array<{ code: string; count: number }>\n colorMap: Map<string, string>\n getFlagUrl?: (code: string) => string | null\n getLabel?: (code: string) => string\n labels: { title: string; more: string }\n maxItems?: number\n}\n\nexport const GeoMapLegend = React.forwardRef<HTMLDivElement, GeoMapLegendProps>(\n ({ items, colorMap, getFlagUrl, getLabel, labels, maxItems = 5 }, ref) => {\n return (\n <div\n ref={ref}\n className=\"liquid-surface rounded-lg p-3\"\n data-testid=\"map-legend\"\n >\n <h4 className=\"text-xs font-semibold text-gray-700 dark:text-gray-300 mb-2\">\n {labels.title}\n </h4>\n <div className=\"space-y-1.5\">\n {items.slice(0, maxItems).map((item) => {\n const flagUrl = getFlagUrl?.(item.code)\n const regionColor = colorMap.get(item.code) ?? DEFAULT_LEGEND_COLOR\n const displayLabel = getLabel?.(item.code) ?? item.code\n\n return (\n <div\n key={item.code}\n className=\"flex items-center gap-2\"\n data-testid={`legend-item-${item.code}`}\n >\n {flagUrl ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img\n src={flagUrl}\n alt={item.code}\n className=\"w-4 h-4 shadow-sm\"\n />\n ) : (\n <div\n className=\"w-4 h-4 rounded-full\"\n style={{ backgroundColor: regionColor }}\n data-testid={`legend-color-${item.code}`}\n />\n )}\n <span className=\"text-xs text-gray-600 dark:text-gray-400\">\n {displayLabel} ({item.count})\n </span>\n </div>\n )\n })}\n {items.length > maxItems && (\n <div className=\"text-xs text-gray-500 dark:text-gray-400 italic pt-1\">\n +{items.length - maxItems} {labels.more}\n </div>\n )}\n </div>\n </div>\n )\n }\n)\n\nGeoMapLegend.displayName = 'GeoMapLegend'\n","/**\n * Brazil Subdivision Theme Data\n * =============================\n *\n * Reusable Brazilian state palettes, accents, coordinates, macro-regions,\n * and convenience helpers. Does NOT self-register; consumers call\n * `registerSubdivisionTheme('BR', BR_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Brazil state color palettes — from flag colors (flagcolorcodes.com)\n// ---------------------------------------------------------------------------\n\nexport const BRAZIL_STATE_PALETTES: Record<string, SubdivisionColorPalette> = {\n AC: { primary: '#009b43', secondary: '#ffcf44', text: 'light' },\n AL: { primary: '#d9251d', secondary: '#01a2ce', text: 'light' },\n AM: { primary: '#213572', secondary: '#d9251d', text: 'light' },\n AP: { primary: '#213572', secondary: '#009b43', text: 'light' },\n BA: { primary: '#213572', secondary: '#d9251d', text: 'light' },\n CE: { primary: '#009b43', secondary: '#ffcf44', text: 'light' },\n DF: { primary: '#009b43', secondary: '#ffcf44', text: 'light' },\n ES: { primary: '#ea5a8d', secondary: '#01a2ce', text: 'light' },\n GO: { primary: '#009b43', secondary: '#213572', text: 'light' },\n MA: { primary: '#213572', secondary: '#d9251d', text: 'light' },\n MG: { primary: '#d9251d', secondary: '#f0f0f0', text: 'light' },\n MS: { primary: '#009b43', secondary: '#01a2ce', text: 'light' },\n MT: { primary: '#213572', secondary: '#009b43', text: 'light' },\n PA: { primary: '#d9251d', secondary: '#213572', text: 'light' },\n PB: { primary: '#d9251d', secondary: '#1d1d1b', text: 'light' },\n PE: { primary: '#213572', secondary: '#ffcf44', text: 'light' },\n PI: { primary: '#009b43', secondary: '#ffcf44', text: 'light' },\n PR: { primary: '#009b43', secondary: '#213572', text: 'light' },\n RJ: { primary: '#01a2ce', secondary: '#009b43', text: 'light' },\n RN: { primary: '#009b43', secondary: '#01a2ce', text: 'light' },\n RO: { primary: '#213572', secondary: '#009b43', text: 'light' },\n RR: { primary: '#009b43', secondary: '#01a2ce', text: 'light' },\n RS: { primary: '#009b43', secondary: '#d9251d', text: 'light' },\n SC: { primary: '#d9251d', secondary: '#a6ce39', text: 'light' },\n SE: { primary: '#009b43', secondary: '#213572', text: 'light' },\n SP: { primary: '#1d1d1b', secondary: '#d9251d', text: 'light' },\n TO: { primary: '#ef9926', secondary: '#213572', text: 'dark' },\n}\n\n// ---------------------------------------------------------------------------\n// Brazil accent mappings (accent name → Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const BRAZIL_ACCENT_MAP: Record<string, string> = {\n AC: 'green',\n AL: 'red',\n AM: 'blue',\n AP: 'blue',\n BA: 'blue',\n CE: 'green',\n DF: 'green',\n ES: 'pink',\n GO: 'green',\n MA: 'blue',\n MG: 'red',\n MS: 'green',\n MT: 'blue',\n PA: 'red',\n PB: 'red',\n PE: 'blue',\n PI: 'green',\n PR: 'green',\n RJ: 'blue',\n RN: 'green',\n RO: 'blue',\n RR: 'green',\n RS: 'green',\n SC: 'red',\n SE: 'green',\n SP: 'black',\n TO: 'yellow',\n}\n\n// All valid Brazilian UF codes\nconst VALID_UFS = Object.keys(BRAZIL_STATE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const BR_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: BRAZIL_STATE_PALETTES,\n accents: BRAZIL_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_UFS.includes(code) ? `/flags/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Brazil state center coordinates (for map)\n// ---------------------------------------------------------------------------\n\nexport const BRAZIL_STATE_COORDINATES: Record<string, [number, number]> = {\n AC: [-70.0, -9.0],\n AL: [-36.6, -9.5],\n AM: [-64.0, -4.0],\n AP: [-51.0, 1.0],\n BA: [-41.5, -12.5],\n CE: [-39.0, -5.0],\n DF: [-47.9, -15.8],\n ES: [-40.3, -19.5],\n GO: [-49.5, -16.0],\n MA: [-45.0, -5.0],\n MG: [-44.5, -18.5],\n MS: [-55.0, -21.0],\n MT: [-56.0, -13.0],\n PA: [-52.0, -4.0],\n PB: [-36.8, -7.1],\n PE: [-37.5, -8.3],\n PI: [-43.0, -7.5],\n PR: [-51.5, -25.0],\n RJ: [-43.2, -22.5],\n RN: [-36.5, -5.8],\n RO: [-63.0, -11.0],\n RR: [-61.0, 2.0],\n RS: [-53.0, -30.0],\n SC: [-49.5, -27.5],\n SE: [-37.0, -10.5],\n SP: [-48.5, -22.5],\n TO: [-48.0, -10.0],\n}\n\nexport const BRAZIL_MAP_CENTER: [number, number] = [-54, -15]\n\n// ---------------------------------------------------------------------------\n// Brazil macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const BRAZIL_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'sudeste',\n label: '',\n codes: ['SP', 'RJ', 'MG', 'ES'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'sul',\n label: '',\n codes: ['PR', 'SC', 'RS'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'nordeste',\n label: '',\n codes: ['BA', 'PE', 'CE', 'MA', 'PB', 'RN', 'AL', 'SE', 'PI'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'centroOeste',\n label: '',\n codes: ['GO', 'MT', 'MS', 'DF'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n {\n key: 'norte',\n label: '',\n codes: ['PA', 'AM', 'RO', 'TO', 'AC', 'AP', 'RR'],\n gradient: 'from-cyan-500/15 to-sky-500/10 dark:from-cyan-500/20 dark:to-sky-500/15',\n iconColor: 'text-cyan-600 dark:text-cyan-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'BR'\n// ---------------------------------------------------------------------------\n\nexport const getBrazilFlagUrl = (uf: string) => getSubdivisionFlagUrl('BR', uf)\nexport const getBrazilHexColor = (uf: string) => getSubdivisionHexColor('BR', uf)\nexport const getBrazilPalette = (uf: string) => getSubdivisionPalette('BR', uf)\nexport const getBrazilGradient = (uf: string, direction?: string) => getSubdivisionGradient('BR', uf, direction)\nexport const getBrazilColors = (uf: string) => getSubdivisionColors('BR', uf)\nexport const getBrazilAccent = (uf: string) => getSubdivisionAccent('BR', uf)\nexport const isValidBrazilState = (uf: string) => isValidSubdivision('BR', uf)\n","/**\n * Locale Flag SVGs\n * =================\n * Inline data URIs for locale flag icons.\n * Import from @datatechsolutions/shared-domain/i18n to use across all apps.\n */\n\nexport const flag_br = \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%0A%3C!--%20Uploaded%20to%3A%20SVG%20Repo%2C%20www.svgrepo.com%2C%20Generator%3A%20SVG%20Repo%20Mixer%20Tools%20--%3E%0A%3Csvg%20height%3D%22800px%22%20width%3D%22800px%22%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20%0A%09%20viewBox%3D%220%200%20512%20512%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Cpath%20style%3D%22fill%3A%23259245%3B%22%20d%3D%22M395.901%2C7.286H116.099C56.003%2C7.286%2C7.286%2C56.003%2C7.286%2C116.099v279.803%0A%09c0%2C60.095%2C48.717%2C108.812%2C108.812%2C108.812h279.803c60.095%2C0%2C108.812-48.717%2C108.812-108.812V116.099%0A%09C504.714%2C56.003%2C455.997%2C7.286%2C395.901%2C7.286z%22%2F%3E%0A%3Cpath%20d%3D%22M395.901%2C512H116.099C52.082%2C512%2C0%2C459.918%2C0%2C395.901V116.099C0%2C52.082%2C52.082%2C0%2C116.099%2C0h279.803%0A%09C459.918%2C0%2C512%2C52.082%2C512%2C116.099v279.803C512%2C459.918%2C459.918%2C512%2C395.901%2C512z%20M116.099%2C14.573%0A%09c-55.981%2C0-101.526%2C45.544-101.526%2C101.526v279.803c0%2C55.981%2C45.544%2C101.526%2C101.526%2C101.526h279.803%0A%09c55.981%2C0%2C101.526-45.545%2C101.526-101.526V116.099c0-55.981-45.545-101.526-101.526-101.526%0A%09C395.902%2C14.573%2C116.099%2C14.573%2C116.099%2C14.573z%22%2F%3E%0A%3Cpolygon%20style%3D%22fill%3A%23FFE000%3B%22%20points%3D%22256%2C374.81%2051.502%2C256%20256%2C137.19%20460.498%2C256%20%22%2F%3E%0A%3Cpath%20d%3D%22M256%2C382.097c-1.265%2C0-2.529-0.328-3.66-0.986L47.842%2C262.301c-2.245-1.305-3.626-3.705-3.626-6.301%0A%09s1.381-4.996%2C3.626-6.301l204.498-118.81c2.264-1.315%2C5.057-1.315%2C7.321%2C0l204.498%2C118.81c2.245%2C1.305%2C3.626%2C3.705%2C3.626%2C6.301%0A%09c0%2C2.596-1.381%2C4.996-3.626%2C6.301l-32.303%2C18.767c-3.48%2C2.02-7.939%2C0.841-9.961-2.64c-2.021-3.479-0.84-7.939%2C2.64-9.961%0A%09L445.993%2C256L256%2C145.617L66.007%2C256L256%2C366.383l139.861-81.258c3.478-2.021%2C7.938-0.841%2C9.961%2C2.64%0A%09c2.021%2C3.479%2C0.84%2C7.939-2.64%2C9.961L259.66%2C381.111C258.529%2C381.768%2C257.265%2C382.097%2C256%2C382.097z%22%2F%3E%0A%3Ccircle%20style%3D%22fill%3A%23103B9B%3B%22%20cx%3D%22256%22%20cy%3D%22256%22%20r%3D%2267.47%22%2F%3E%0A%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M316.265%2C293.777c-2.7%2C0-5.294-1.507-6.556-4.097c-10.094-20.712-27.403-36.941-48.741-45.697%0A%09c-21.334-8.755-45.052-9.367-66.782-1.72c-3.794%2C1.333-7.955-0.659-9.292-4.455c-1.335-3.796%2C0.659-7.956%2C4.455-9.292%0A%09c25.106-8.835%2C52.506-8.129%2C77.152%2C1.986c24.649%2C10.116%2C44.646%2C28.865%2C56.308%2C52.796c1.763%2C3.617%2C0.259%2C7.979-3.359%2C9.742%0A%09C318.423%2C293.54%2C317.336%2C293.777%2C316.265%2C293.777z%22%2F%3E%0A%3Cpath%20d%3D%22M256%2C330.753c-41.219%2C0-74.753-33.534-74.753-74.753s33.534-74.753%2C74.753-74.753s74.753%2C33.534%2C74.753%2C74.753%0A%09S297.219%2C330.753%2C256%2C330.753z%20M256%2C195.82c-33.183%2C0-60.18%2C26.997-60.18%2C60.18s26.997%2C60.18%2C60.18%2C60.18s60.18-26.997%2C60.18-60.18%0A%09S289.183%2C195.82%2C256%2C195.82z%22%2F%3E%0A%3C%2Fsvg%3E\"\n\nexport const flag_us = \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%0A%3C!--%20Uploaded%20to%3A%20SVG%20Repo%2C%20www.svgrepo.com%2C%20Generator%3A%20SVG%20Repo%20Mixer%20Tools%20--%3E%0A%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20%0A%09%20viewBox%3D%220%200%20512.001%20512.001%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M395.901%2C7.287H116.099C56.003%2C7.287%2C7.286%2C56.004%2C7.286%2C116.1v279.803%0A%09c0%2C60.095%2C48.717%2C108.812%2C108.812%2C108.812h279.803c60.095%2C0%2C108.812-48.717%2C108.812-108.812V116.1%0A%09C504.714%2C56.004%2C455.997%2C7.287%2C395.901%2C7.287z%22%2F%3E%0A%3Cg%3E%0A%09%3Crect%20x%3D%227.286%22%20y%3D%22338.901%22%20style%3D%22fill%3A%23ED1F34%3B%22%20width%3D%22497.43%22%20height%3D%2255.26%22%2F%3E%0A%09%3Crect%20x%3D%22225.79%22%20y%3D%22228.361%22%20style%3D%22fill%3A%23ED1F34%3B%22%20width%3D%22278.92%22%20height%3D%2255.28%22%2F%3E%0A%09%3Crect%20x%3D%22236.17%22%20y%3D%22117.831%22%20style%3D%22fill%3A%23ED1F34%3B%22%20width%3D%22268.55%22%20height%3D%2255.26%22%2F%3E%0A%09%3Cpath%20style%3D%22fill%3A%23ED1F34%3B%22%20d%3D%22M116.099%2C504.715h279.803c40.628%2C0%2C76.05-22.27%2C94.739-55.264H21.36%0A%09%09C40.049%2C482.445%2C75.471%2C504.715%2C116.099%2C504.715z%22%2F%3E%0A%09%3Cpath%20style%3D%22fill%3A%23ED1F34%3B%22%20d%3D%22M490.64%2C62.552c-18.689-32.995-54.111-55.264-94.739-55.264H225.79v55.264H490.64z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cpath%20style%3D%22fill%3A%23164FCE%3B%22%20d%3D%22M335.041%2C7.287H116.099C56.003%2C7.287%2C7.286%2C56.004%2C7.286%2C116.1v167.541h327.755L335.041%2C7.287%0A%09L335.041%2C7.287z%22%2F%3E%0A%3Cg%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2272.55%22%20cy%3D%22217.091%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22121.86%22%20cy%3D%22217.091%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22171.16%22%20cy%3D%22217.091%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22220.47%22%20cy%3D%22217.091%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22269.77%22%20cy%3D%22217.091%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2247.902%22%20cy%3D%22240.971%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2297.21%22%20cy%3D%22240.971%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22146.51%22%20cy%3D%22240.971%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22195.82%22%20cy%3D%22240.971%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22245.12%22%20cy%3D%22240.971%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22294.43%22%20cy%3D%22240.971%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2247.902%22%20cy%3D%22193.221%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2297.21%22%20cy%3D%22193.221%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22146.51%22%20cy%3D%22193.221%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22195.82%22%20cy%3D%22193.221%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22245.12%22%20cy%3D%22193.221%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22294.43%22%20cy%3D%22193.221%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2272.55%22%20cy%3D%22169.341%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22121.86%22%20cy%3D%22169.341%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22171.16%22%20cy%3D%22169.341%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22220.47%22%20cy%3D%22169.341%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22269.77%22%20cy%3D%22169.341%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2247.902%22%20cy%3D%22145.461%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2297.21%22%20cy%3D%22145.461%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22146.51%22%20cy%3D%22145.461%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22195.82%22%20cy%3D%22145.461%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22245.12%22%20cy%3D%22145.461%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22294.43%22%20cy%3D%22145.461%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2272.55%22%20cy%3D%22121.591%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22121.86%22%20cy%3D%22121.591%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22171.16%22%20cy%3D%22121.591%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22220.47%22%20cy%3D%22121.591%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22269.77%22%20cy%3D%22121.591%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2247.902%22%20cy%3D%2297.711%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2297.21%22%20cy%3D%2297.711%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22146.51%22%20cy%3D%2297.711%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22195.82%22%20cy%3D%2297.711%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22245.12%22%20cy%3D%2297.711%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22294.43%22%20cy%3D%2297.711%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2272.55%22%20cy%3D%2273.835%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22121.86%22%20cy%3D%2273.835%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22171.16%22%20cy%3D%2273.835%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22220.47%22%20cy%3D%2273.835%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22269.77%22%20cy%3D%2273.835%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2247.902%22%20cy%3D%2249.958%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%2297.21%22%20cy%3D%2249.958%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22146.51%22%20cy%3D%2249.958%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22195.82%22%20cy%3D%2249.958%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22245.12%22%20cy%3D%2249.958%22%20r%3D%228.953%22%2F%3E%0A%09%3Ccircle%20style%3D%22fill%3A%23FFFFFF%3B%22%20cx%3D%22294.43%22%20cy%3D%2249.958%22%20r%3D%228.953%22%2F%3E%0A%3C%2Fg%3E%0A%3Cpath%20d%3D%22M497.341%2C59.688c-0.199-0.465-0.447-0.902-0.734-1.311C476.551%2C23.521%2C438.921%2C0.001%2C395.901%2C0.001H116.099%0A%09C52.082%2C0.001%2C0%2C52.083%2C0%2C116.1v279.803c0%2C20.462%2C5.328%2C39.7%2C14.659%2C56.412c0.199%2C0.464%2C0.447%2C0.902%2C0.734%2C1.311%0A%09C35.449%2C488.481%2C73.079%2C512%2C116.099%2C512h279.803c43.02%2C0%2C80.65-23.52%2C100.706-58.376c0.287-0.409%2C0.535-0.846%2C0.734-1.311%0A%09c9.331-16.712%2C14.659-35.95%2C14.659-56.412V116.1C512%2C95.638%2C506.672%2C76.4%2C497.341%2C59.688z%20M438.39%2C386.883%0A%09c-4.024%2C0-7.286%2C3.262-7.286%2C7.287s3.262%2C7.286%2C7.286%2C7.286h58.883c-0.791%2C14.595-4.676%2C28.38-11.013%2C40.708H25.74%0A%09c-6.337-12.328-10.222-26.113-11.013-40.708h390.501c4.024%2C0%2C7.286-3.262%2C7.286-7.286c0-4.025-3.262-7.287-7.286-7.287H14.573%0A%09v-40.692h482.854v40.692L438.39%2C386.883L438.39%2C386.883z%20M497.273%2C110.546H342.328V69.838H486.26%0A%09C492.597%2C82.166%2C496.482%2C95.951%2C497.273%2C110.546z%20M389.101%2C180.383h108.326v40.691H342.328v-40.691h19.156%0A%09c4.024%2C0%2C7.286-3.262%2C7.286-7.287c0-4.025-3.262-7.286-7.286-7.286h-19.156v-40.692h155.099v40.692H389.101%0A%09c-4.024%2C0-7.287%2C3.262-7.287%2C7.286C381.814%2C177.121%2C385.076%2C180.383%2C389.101%2C180.383z%20M342.328%2C235.647h155.099v40.708H342.328%0A%09V235.647z%20M497.427%2C290.928v40.691H14.573v-40.691H497.427z%20M477.132%2C55.265H342.328V14.574h53.574%0A%09C429.082%2C14.574%2C458.594%2C30.575%2C477.132%2C55.265z%20M116.099%2C14.574h211.656v261.781H14.573V116.1%0A%09C14.573%2C60.119%2C60.117%2C14.574%2C116.099%2C14.574z%20M395.901%2C497.428H116.099c-33.181%2C0-62.693-16.001-81.231-40.691h442.264%0A%09C458.594%2C481.427%2C429.082%2C497.428%2C395.901%2C497.428z%22%2F%3E%0A%3C%2Fsvg%3E\"\n\nexport const flag_es = \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%0A%3C!--%20Uploaded%20to%3A%20SVG%20Repo%2C%20www.svgrepo.com%2C%20Generator%3A%20SVG%20Repo%20Mixer%20Tools%20--%3E%0A%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20%0A%09%20viewBox%3D%220%200%20512%20512%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Crect%20x%3D%227.286%22%20y%3D%22131.64%22%20style%3D%22fill%3A%23FFE000%3B%22%20width%3D%22497.43%22%20height%3D%22248.71%22%2F%3E%0A%3Cg%3E%0A%09%3Cpath%20style%3D%22fill%3A%23ED1F34%3B%22%20d%3D%22M395.901%2C7.287H116.099C56.003%2C7.287%2C7.286%2C56.003%2C7.286%2C116.099v15.545h497.427v-15.545%0A%09%09C504.714%2C56.003%2C455.997%2C7.287%2C395.901%2C7.287z%22%2F%3E%0A%09%3Cpath%20style%3D%22fill%3A%23ED1F34%3B%22%20d%3D%22M7.286%2C395.901c0%2C60.095%2C48.717%2C108.812%2C108.812%2C108.812h279.803%0A%09%09c60.095%2C0%2C108.812-48.717%2C108.812-108.812v-15.545H7.286V395.901z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cpath%20d%3D%22M395.901%2C0H116.099C52.082%2C0%2C0%2C52.082%2C0%2C116.099v279.803C0%2C459.918%2C52.082%2C512%2C116.099%2C512h279.803%0A%09C459.918%2C512%2C512%2C459.918%2C512%2C395.901V116.099C512%2C52.082%2C459.918%2C0%2C395.901%2C0z%20M116.099%2C14.573h279.803%0A%09c55.981%2C0%2C101.526%2C45.544%2C101.526%2C101.526v8.258H14.573v-8.258C14.573%2C60.117%2C60.117%2C14.573%2C116.099%2C14.573z%20M395.901%2C497.427%0A%09H116.099c-55.982%2C0-101.526-45.544-101.526-101.526v-8.258h390.655c4.024%2C0%2C7.286-3.262%2C7.286-7.287s-3.262-7.286-7.286-7.286%0A%09H14.573V138.93h482.854v234.14H438.39c-4.024%2C0-7.286%2C3.262-7.286%2C7.286s3.262%2C7.287%2C7.286%2C7.287h59.037v8.258%0A%09C497.427%2C451.883%2C451.883%2C497.427%2C395.901%2C497.427z%22%2F%3E%0A%3C%2Fsvg%3E\"\n\nexport const flag_fr = \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%0A%3C!--%20Uploaded%20to%3A%20SVG%20Repo%2C%20www.svgrepo.com%2C%20Generator%3A%20SVG%20Repo%20Mixer%20Tools%20--%3E%0A%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20%0A%09%20viewBox%3D%220%200%20512%20512%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Crect%20x%3D%22173.1%22%20y%3D%227.287%22%20style%3D%22fill%3A%23FFFFFF%3B%22%20width%3D%22165.81%22%20height%3D%22497.43%22%2F%3E%0A%3Cpath%20style%3D%22fill%3A%23164FCE%3B%22%20d%3D%22M116.099%2C7.287C56.003%2C7.287%2C7.286%2C56.003%2C7.286%2C116.099v279.803%0A%09c0%2C60.095%2C48.717%2C108.812%2C108.812%2C108.812h56.997V7.287H116.099z%22%2F%3E%0A%3Cpath%20style%3D%22fill%3A%23ED1F34%3B%22%20d%3D%22M395.901%2C7.287h-56.997v497.427h56.997c60.095%2C0%2C108.812-48.717%2C108.812-108.812V116.099%0A%09C504.714%2C56.003%2C455.997%2C7.287%2C395.901%2C7.287z%22%2F%3E%0A%3Cpath%20d%3D%22M395.901%2C0H116.099C52.082%2C0%2C0%2C52.082%2C0%2C116.099v279.803C0%2C459.918%2C52.082%2C512%2C116.099%2C512h279.803%0A%09C459.918%2C512%2C512%2C459.918%2C512%2C395.901V116.099C512%2C52.082%2C459.918%2C0%2C395.901%2C0z%20M14.573%2C395.901V116.099%0A%09c0-55.981%2C45.544-101.526%2C101.526-101.526h49.71v482.854h-49.71C60.117%2C497.427%2C14.573%2C451.883%2C14.573%2C395.901z%20M497.427%2C395.901%0A%09c0%2C55.982-45.545%2C101.526-101.526%2C101.526H346.19V156.515c0-4.024-3.262-7.286-7.286-7.286c-4.025%2C0-7.287%2C3.262-7.287%2C7.286%0A%09v340.912H180.382V14.573h151.236v92.199c0%2C4.024%2C3.262%2C7.286%2C7.287%2C7.286s7.286-3.262%2C7.286-7.286V14.573h49.711%0A%09c55.981%2C0%2C101.526%2C45.544%2C101.526%2C101.526L497.427%2C395.901L497.427%2C395.901z%22%2F%3E%0A%3C%2Fsvg%3E\"\n\nexport const flag_de = \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%0A%3C!--%20Uploaded%20to%3A%20SVG%20Repo%2C%20www.svgrepo.com%2C%20Generator%3A%20SVG%20Repo%20Mixer%20Tools%20--%3E%0A%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20%0A%09%20viewBox%3D%220%200%20512%20512%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Crect%20x%3D%227.286%22%20y%3D%22173.1%22%20style%3D%22fill%3A%23ED1F34%3B%22%20width%3D%22497.43%22%20height%3D%22165.81%22%2F%3E%0A%3Cpath%20style%3D%22fill%3A%23FFE000%3B%22%20d%3D%22M7.286%2C395.901c0%2C60.095%2C48.717%2C108.812%2C108.812%2C108.812h279.803%0A%09c60.095%2C0%2C108.812-48.717%2C108.812-108.812v-56.997H7.286V395.901z%22%2F%3E%0A%3Cpath%20style%3D%22fill%3A%23333333%3B%22%20d%3D%22M395.901%2C7.286H116.099C56.003%2C7.286%2C7.286%2C56.003%2C7.286%2C116.099v56.997h497.427v-56.997%0A%09C504.714%2C56.003%2C455.997%2C7.286%2C395.901%2C7.286z%22%2F%3E%0A%3Cpath%20d%3D%22M395.901%2C0H116.099C52.082%2C0%2C0%2C52.082%2C0%2C116.099v279.803C0%2C459.918%2C52.082%2C512%2C116.099%2C512h279.803%0A%09C459.918%2C512%2C512%2C459.918%2C512%2C395.901V116.099C512%2C52.082%2C459.918%2C0%2C395.901%2C0z%20M116.099%2C14.573h279.803%0A%09c55.981%2C0%2C101.526%2C45.544%2C101.526%2C101.526v49.71H14.573v-49.71C14.573%2C60.117%2C60.117%2C14.573%2C116.099%2C14.573z%20M395.901%2C497.427%0A%09H116.099c-55.982%2C0-101.526-45.544-101.526-101.526v-49.71h390.655c4.025%2C0%2C7.286-3.262%2C7.286-7.286s-3.262-7.286-7.286-7.286%0A%09H14.573V180.382h482.854v151.236H438.39c-4.025%2C0-7.286%2C3.262-7.286%2C7.286s3.262%2C7.286%2C7.286%2C7.286h59.037v49.71%0A%09C497.427%2C451.883%2C451.882%2C497.427%2C395.901%2C497.427z%22%2F%3E%0A%3C%2Fsvg%3E\"\n\nexport const flag_it = \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%0A%3C!--%20Uploaded%20to%3A%20SVG%20Repo%2C%20www.svgrepo.com%2C%20Generator%3A%20SVG%20Repo%20Mixer%20Tools%20--%3E%0A%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20%0A%09%20viewBox%3D%220%200%20512%20512%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Crect%20x%3D%22173.1%22%20y%3D%227.286%22%20style%3D%22fill%3A%23FFFFFF%3B%22%20width%3D%22165.81%22%20height%3D%22497.43%22%2F%3E%0A%3Cpath%20style%3D%22fill%3A%23259245%3B%22%20d%3D%22M116.099%2C7.286C56.003%2C7.286%2C7.286%2C56.003%2C7.286%2C116.099v279.803%0A%09c0%2C60.095%2C48.717%2C108.812%2C108.812%2C108.812h56.997V7.286H116.099z%22%2F%3E%0A%3Cpath%20style%3D%22fill%3A%23ED1F34%3B%22%20d%3D%22M395.901%2C7.286h-56.997v497.427h56.997c60.095%2C0%2C108.812-48.717%2C108.812-108.812V116.099%0A%09C504.714%2C56.003%2C455.997%2C7.286%2C395.901%2C7.286z%22%2F%3E%0A%3Cpath%20d%3D%22M395.901%2C0H116.099C52.082%2C0%2C0%2C52.082%2C0%2C116.099v279.803C0%2C459.918%2C52.082%2C512%2C116.099%2C512h279.803%0A%09C459.918%2C512%2C512%2C459.918%2C512%2C395.901V116.099C512%2C52.082%2C459.918%2C0%2C395.901%2C0z%20M14.573%2C395.901V116.099%0A%09c0-55.982%2C45.544-101.526%2C101.526-101.526h49.71v482.854h-49.71C60.117%2C497.427%2C14.573%2C451.883%2C14.573%2C395.901z%20M497.427%2C395.901%0A%09c0%2C55.982-45.544%2C101.526-101.526%2C101.526h-49.71V156.515c0-4.024-3.262-7.286-7.287-7.286c-4.024%2C0-7.286%2C3.262-7.286%2C7.286%0A%09v340.912H180.382V14.573h151.236v92.199c0%2C4.024%2C3.262%2C7.286%2C7.286%2C7.286c4.024%2C0%2C7.287-3.262%2C7.287-7.286V14.573h49.71%0A%09c55.981%2C0%2C101.526%2C45.544%2C101.526%2C101.526L497.427%2C395.901L497.427%2C395.901z%22%2F%3E%0A%3C%2Fsvg%3E\"\n\nexport const LOCALE_FLAGS: Record<string, string> = {\n \"br\": flag_br,\n \"us\": flag_us,\n \"es\": flag_es,\n \"fr\": flag_fr,\n \"de\": flag_de,\n \"it\": flag_it,\n // Locale code aliases\n \"pt-BR\": flag_br,\n \"pt\": flag_br,\n \"en\": flag_us,\n \"en-US\": flag_us,\n}\n","/**\n * US Subdivision Theme Data\n * =========================\n *\n * Reusable US state palettes, accents, coordinates, macro-regions,\n * and convenience helpers. Does NOT self-register; consumers call\n * `registerSubdivisionTheme('US', US_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// US state color palettes — derived from flag dominant colors\n// ---------------------------------------------------------------------------\n\nexport const US_STATE_PALETTES: Record<string, SubdivisionColorPalette> = {\n // Northeast — blue/indigo tones\n CT: { primary: '#4f6d9b', secondary: '#c8a962', text: 'light' },\n DE: { primary: '#3b82f6', secondary: '#c8a962', text: 'light' },\n MA: { primary: '#6366f1', secondary: '#c8a962', text: 'light' },\n ME: { primary: '#2563eb', secondary: '#c8a962', text: 'light' },\n MD: { primary: '#e03c31', secondary: '#eaab00', text: 'light' },\n NH: { primary: '#818cf8', secondary: '#c8a962', text: 'light' },\n NJ: { primary: '#c8a962', secondary: '#4f46e5', text: 'dark' },\n NY: { primary: '#4f46e5', secondary: '#c8a962', text: 'light' },\n PA: { primary: '#3b82f6', secondary: '#c8a962', text: 'light' },\n RI: { primary: '#6366f1', secondary: '#c8a962', text: 'light' },\n VT: { primary: '#2563eb', secondary: '#c8a962', text: 'light' },\n\n // Southeast — red/rose tones\n AL: { primary: '#dc2626', secondary: '#f0f0f0', text: 'light' },\n AR: { primary: '#e11d48', secondary: '#4f46e5', text: 'light' },\n FL: { primary: '#be123c', secondary: '#f0f0f0', text: 'light' },\n GA: { primary: '#9f1239', secondary: '#dc2626', text: 'light' },\n KY: { primary: '#b91c1c', secondary: '#c8a962', text: 'light' },\n LA: { primary: '#a855f7', secondary: '#dc2626', text: 'light' },\n MS: { primary: '#f43f5e', secondary: '#4f46e5', text: 'light' },\n NC: { primary: '#e11d48', secondary: '#dc2626', text: 'light' },\n SC: { primary: '#be185d', secondary: '#c8a962', text: 'light' },\n TN: { primary: '#dc2626', secondary: '#4f46e5', text: 'light' },\n VA: { primary: '#9f1239', secondary: '#c8a962', text: 'light' },\n WV: { primary: '#f43f5e', secondary: '#dc2626', text: 'light' },\n\n // Midwest — green/emerald tones\n IL: { primary: '#16a34a', secondary: '#dc2626', text: 'light' },\n IN: { primary: '#059669', secondary: '#c8a962', text: 'light' },\n IA: { primary: '#10b981', secondary: '#dc2626', text: 'light' },\n KS: { primary: '#0d9488', secondary: '#c8a962', text: 'light' },\n MI: { primary: '#16a34a', secondary: '#c8a962', text: 'light' },\n MN: { primary: '#059669', secondary: '#c8a962', text: 'light' },\n MO: { primary: '#14b8a6', secondary: '#dc2626', text: 'light' },\n NE: { primary: '#10b981', secondary: '#c8a962', text: 'light' },\n ND: { primary: '#0d9488', secondary: '#c8a962', text: 'light' },\n OH: { primary: '#16a34a', secondary: '#dc2626', text: 'light' },\n SD: { primary: '#059669', secondary: '#c8a962', text: 'light' },\n WI: { primary: '#10b981', secondary: '#c8a962', text: 'light' },\n\n // Southwest — orange/amber tones\n AZ: { primary: '#ea580c', secondary: '#c8a962', text: 'light' },\n NM: { primary: '#f59e0b', secondary: '#dc2626', text: 'dark' },\n OK: { primary: '#d97706', secondary: '#c8a962', text: 'light' },\n TX: { primary: '#ea580c', secondary: '#dc2626', text: 'light' },\n\n // West — purple/violet tones\n AK: { primary: '#7c3aed', secondary: '#c8a962', text: 'light' },\n CA: { primary: '#a855f7', secondary: '#dc2626', text: 'light' },\n CO: { primary: '#8b5cf6', secondary: '#dc2626', text: 'light' },\n HI: { primary: '#7c3aed', secondary: '#dc2626', text: 'light' },\n ID: { primary: '#9333ea', secondary: '#c8a962', text: 'light' },\n MT: { primary: '#a855f7', secondary: '#c8a962', text: 'light' },\n NV: { primary: '#8b5cf6', secondary: '#c8a962', text: 'light' },\n OR: { primary: '#059669', secondary: '#c8a962', text: 'light' },\n UT: { primary: '#7c3aed', secondary: '#c8a962', text: 'light' },\n WA: { primary: '#15803d', secondary: '#c8a962', text: 'light' },\n WY: { primary: '#9333ea', secondary: '#dc2626', text: 'light' },\n\n // District of Columbia\n DC: { primary: '#dc2626', secondary: '#f0f0f0', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// US accent mappings — by macro-region\n// ---------------------------------------------------------------------------\n\nexport const US_ACCENT_MAP: Record<string, string> = {\n // Northeast → blue\n CT: 'blue', DE: 'blue', MA: 'blue', ME: 'blue', MD: 'blue',\n NH: 'blue', NJ: 'blue', NY: 'blue', PA: 'blue', RI: 'blue', VT: 'blue',\n\n // Southeast → red\n AL: 'red', AR: 'red', FL: 'red', GA: 'red', KY: 'red',\n LA: 'red', MS: 'red', NC: 'red', SC: 'red', TN: 'red', VA: 'red', WV: 'red',\n\n // Midwest → green\n IL: 'green', IN: 'green', IA: 'green', KS: 'green', MI: 'green',\n MN: 'green', MO: 'green', NE: 'green', ND: 'green', OH: 'green', SD: 'green', WI: 'green',\n\n // Southwest → orange\n AZ: 'orange', NM: 'orange', OK: 'orange', TX: 'orange',\n\n // West → purple\n AK: 'purple', CA: 'purple', CO: 'purple', HI: 'purple', ID: 'purple',\n MT: 'purple', NV: 'purple', OR: 'purple', UT: 'purple', WA: 'purple', WY: 'purple',\n\n // District of Columbia → gray\n DC: 'gray',\n}\n\n// All valid US state/territory codes\nconst VALID_STATES = Object.keys(US_STATE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const US_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: US_STATE_PALETTES,\n accents: US_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_STATES.includes(code) ? `/flags/us/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// US state center coordinates (for map)\n// ---------------------------------------------------------------------------\n\nexport const US_STATE_COORDINATES: Record<string, [number, number]> = {\n AL: [-86.9, 32.8],\n AK: [-153.5, 64.3],\n AZ: [-111.7, 34.3],\n AR: [-92.4, 34.8],\n CA: [-119.7, 37.3],\n CO: [-105.5, 39.0],\n CT: [-72.7, 41.6],\n DE: [-75.5, 39.0],\n FL: [-81.7, 28.6],\n GA: [-83.4, 32.7],\n HI: [-155.5, 19.9],\n ID: [-114.5, 44.4],\n IL: [-89.2, 40.0],\n IN: [-86.3, 39.8],\n IA: [-93.5, 42.0],\n KS: [-98.3, 38.5],\n KY: [-85.3, 37.8],\n LA: [-91.9, 31.0],\n ME: [-69.2, 45.4],\n MD: [-76.6, 39.0],\n MA: [-71.8, 42.2],\n MI: [-84.5, 44.3],\n MN: [-94.3, 46.3],\n MS: [-89.7, 32.7],\n MO: [-92.5, 38.4],\n MT: [-109.6, 47.1],\n NE: [-99.8, 41.5],\n NV: [-116.6, 39.3],\n NH: [-71.6, 43.7],\n NJ: [-74.7, 40.1],\n NM: [-106.0, 34.5],\n NY: [-75.5, 43.0],\n NC: [-79.4, 35.6],\n ND: [-100.5, 47.4],\n OH: [-82.8, 40.4],\n OK: [-97.5, 35.5],\n OR: [-120.6, 44.0],\n PA: [-77.6, 41.2],\n RI: [-71.5, 41.7],\n SC: [-80.9, 34.0],\n SD: [-100.2, 44.4],\n TN: [-86.3, 35.8],\n TX: [-99.3, 31.5],\n UT: [-111.7, 39.3],\n VT: [-72.6, 44.1],\n VA: [-79.4, 37.5],\n WA: [-120.7, 47.4],\n WV: [-80.6, 38.6],\n WI: [-89.6, 44.6],\n WY: [-107.6, 43.0],\n DC: [-77.0, 38.9],\n}\n\nexport const US_MAP_CENTER: [number, number] = [-98.5, 39.8]\n\n// ---------------------------------------------------------------------------\n// US macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const US_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'northeast',\n label: '',\n codes: ['CT', 'DE', 'MA', 'ME', 'MD', 'NH', 'NJ', 'NY', 'PA', 'RI', 'VT'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'southeast',\n label: '',\n codes: ['AL', 'AR', 'FL', 'GA', 'KY', 'LA', 'MS', 'NC', 'SC', 'TN', 'VA', 'WV'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'midwest',\n label: '',\n codes: ['IL', 'IN', 'IA', 'KS', 'MI', 'MN', 'MO', 'NE', 'ND', 'OH', 'SD', 'WI'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'southwest',\n label: '',\n codes: ['AZ', 'NM', 'OK', 'TX'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'west',\n label: '',\n codes: ['AK', 'CA', 'CO', 'HI', 'ID', 'MT', 'NV', 'OR', 'UT', 'WA', 'WY'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n {\n key: 'district',\n label: '',\n codes: ['DC'],\n gradient: 'from-gray-500/15 to-slate-500/10 dark:from-gray-500/20 dark:to-slate-500/15',\n iconColor: 'text-gray-600 dark:text-gray-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'US'\n// ---------------------------------------------------------------------------\n\nexport const getUsFlagUrl = (state: string) => getSubdivisionFlagUrl('US', state)\nexport const getUsHexColor = (state: string) => getSubdivisionHexColor('US', state)\nexport const getUsPalette = (state: string) => getSubdivisionPalette('US', state)\nexport const getUsGradient = (state: string, direction?: string) => getSubdivisionGradient('US', state, direction)\nexport const getUsColors = (state: string) => getSubdivisionColors('US', state)\nexport const getUsAccent = (state: string) => getSubdivisionAccent('US', state)\nexport const isValidUsState = (state: string) => isValidSubdivision('US', state)\n","/**\n * Canada Subdivision Theme Data\n * =============================\n *\n * Reusable Canadian province/territory palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('CA', CA_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Canada province/territory color palettes — from flag dominant colors\n// ---------------------------------------------------------------------------\n\nexport const CANADA_PROVINCE_PALETTES: Record<string, SubdivisionColorPalette> = {\n // Provinces\n BC: { primary: '#00563f', secondary: '#ffd700', text: 'light' },\n AB: { primary: '#0038a8', secondary: '#f0f0f0', text: 'light' },\n SK: { primary: '#008000', secondary: '#ffd700', text: 'light' },\n MB: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n ON: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n QC: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n NB: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n NS: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n PE: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n NL: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n // Territories\n YT: { primary: '#6b2fa0', secondary: '#006847', text: 'light' },\n NT: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n NU: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Canada accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const CANADA_ACCENT_MAP: Record<string, string> = {\n BC: 'green',\n AB: 'blue',\n SK: 'green',\n MB: 'red',\n ON: 'red',\n QC: 'blue',\n NB: 'yellow',\n NS: 'blue',\n PE: 'green',\n NL: 'blue',\n YT: 'purple',\n NT: 'blue',\n NU: 'blue',\n}\n\n// All valid Canadian province/territory codes\nconst VALID_CODES = Object.keys(CANADA_PROVINCE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const CA_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: CANADA_PROVINCE_PALETTES,\n accents: CANADA_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/ca/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Canada province/territory center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const CANADA_PROVINCE_COORDINATES: Record<string, [number, number]> = {\n BC: [-125.0, 54.0],\n AB: [-115.0, 54.0],\n SK: [-106.0, 54.0],\n MB: [-98.0, 55.0],\n ON: [-85.0, 50.0],\n QC: [-72.0, 52.0],\n NB: [-66.5, 46.5],\n NS: [-63.0, 45.0],\n PE: [-63.0, 46.3],\n NL: [-57.0, 53.0],\n YT: [-136.0, 64.0],\n NT: [-120.0, 65.0],\n NU: [-90.0, 70.0],\n}\n\nexport const CANADA_MAP_CENTER: [number, number] = [-96.0, 62.0]\n\n// ---------------------------------------------------------------------------\n// Canada macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const CANADA_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'western',\n label: '',\n codes: ['BC', 'AB', 'SK', 'MB'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'central',\n label: '',\n codes: ['ON', 'QC'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'atlantic',\n label: '',\n codes: ['NB', 'NS', 'PE', 'NL'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'northern',\n label: '',\n codes: ['YT', 'NT', 'NU'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'CA'\n// ---------------------------------------------------------------------------\n\nexport const getCanadaFlagUrl = (code: string) => getSubdivisionFlagUrl('CA', code)\nexport const getCanadaHexColor = (code: string) => getSubdivisionHexColor('CA', code)\nexport const getCanadaPalette = (code: string) => getSubdivisionPalette('CA', code)\nexport const getCanadaGradient = (code: string, direction?: string) => getSubdivisionGradient('CA', code, direction)\nexport const getCanadaColors = (code: string) => getSubdivisionColors('CA', code)\nexport const getCanadaAccent = (code: string) => getSubdivisionAccent('CA', code)\nexport const isValidCanadaProvince = (code: string) => isValidSubdivision('CA', code)\n","/**\n * Mexico Subdivision Theme Data\n * =============================\n *\n * Reusable Mexican state palettes, accents, coordinates, macro-regions,\n * and convenience helpers. Does NOT self-register; consumers call\n * `registerSubdivisionTheme('MX', MX_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Mexico state color palettes — from flag/coat-of-arms dominant colors\n// ---------------------------------------------------------------------------\n\nexport const MEXICO_STATE_PALETTES: Record<string, SubdivisionColorPalette> = {\n // Noroeste\n BC: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n BS: { primary: '#0038a8', secondary: '#ffd700', text: 'light' },\n SO: { primary: '#c8102e', secondary: '#0038a8', text: 'light' },\n SI: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n CH: { primary: '#8b4513', secondary: '#c8102e', text: 'light' },\n DG: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n // Noreste\n NL: { primary: '#ff6600', secondary: '#0038a8', text: 'light' },\n TM: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n CO: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n // Occidente\n JA: { primary: '#0038a8', secondary: '#ffd700', text: 'light' },\n AG: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n NA: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n CL: { primary: '#8b0000', secondary: '#ffd700', text: 'light' },\n MI: { primary: '#7b2d8b', secondary: '#c8102e', text: 'light' },\n ZA: { primary: '#c8102e', secondary: '#8b8b8b', text: 'light' },\n // Centro\n MX: { primary: '#c8102e', secondary: '#0038a8', text: 'light' },\n DF: { primary: '#8b2252', secondary: '#006847', text: 'light' },\n MO: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n QT: { primary: '#0038a8', secondary: '#ffd700', text: 'light' },\n PU: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n TL: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n HG: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n GJ: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n SL: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n // Sur\n OA: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n GR: { primary: '#ffd700', secondary: '#006847', text: 'dark' },\n CS: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n // Sureste\n CM: { primary: '#0038a8', secondary: '#ffd700', text: 'light' },\n QR: { primary: '#0038a8', secondary: '#ff6600', text: 'light' },\n YU: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n TB: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n VE: { primary: '#0038a8', secondary: '#f0f0f0', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Mexico accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const MEXICO_ACCENT_MAP: Record<string, string> = {\n BC: 'red',\n BS: 'blue',\n SO: 'red',\n SI: 'red',\n CH: 'orange',\n DG: 'green',\n NL: 'orange',\n TM: 'blue',\n CO: 'red',\n JA: 'blue',\n AG: 'red',\n NA: 'green',\n CL: 'red',\n MI: 'purple',\n ZA: 'red',\n MX: 'red',\n DF: 'pink',\n MO: 'red',\n QT: 'blue',\n PU: 'green',\n TL: 'red',\n HG: 'blue',\n GJ: 'green',\n SL: 'blue',\n OA: 'green',\n GR: 'yellow',\n CS: 'green',\n CM: 'blue',\n QR: 'blue',\n YU: 'green',\n TB: 'red',\n VE: 'blue',\n}\n\n// All valid Mexican state codes\nconst VALID_CODES = Object.keys(MEXICO_STATE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const MX_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: MEXICO_STATE_PALETTES,\n accents: MEXICO_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/mx/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Mexico state center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const MEXICO_STATE_COORDINATES: Record<string, [number, number]> = {\n BC: [-115.5, 30.5],\n BS: [-111.5, 25.5],\n SO: [-110.0, 29.5],\n SI: [-107.5, 24.0],\n CH: [-106.5, 28.5],\n DG: [-105.0, 24.5],\n NL: [-100.0, 25.0],\n TM: [-99.0, 24.0],\n CO: [-101.5, 27.0],\n JA: [-103.5, 20.5],\n AG: [-102.3, 22.0],\n NA: [-104.8, 21.7],\n CL: [-103.7, 19.2],\n MI: [-102.0, 19.2],\n ZA: [-102.5, 23.0],\n MX: [-99.7, 19.3],\n DF: [-99.1, 19.4],\n MO: [-99.2, 18.7],\n QT: [-100.0, 20.6],\n PU: [-98.0, 19.0],\n TL: [-98.2, 19.4],\n HG: [-98.8, 20.5],\n GJ: [-101.0, 21.0],\n SL: [-100.5, 22.5],\n OA: [-96.5, 17.0],\n GR: [-100.0, 17.5],\n CS: [-93.0, 16.5],\n CM: [-90.5, 19.0],\n QR: [-87.5, 19.5],\n YU: [-89.0, 20.8],\n TB: [-93.0, 18.0],\n VE: [-96.5, 19.5],\n}\n\nexport const MEXICO_MAP_CENTER: [number, number] = [-102.5, 23.5]\n\n// ---------------------------------------------------------------------------\n// Mexico macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const MEXICO_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'noroeste',\n label: '',\n codes: ['BC', 'BS', 'SO', 'SI', 'CH', 'DG'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'noreste',\n label: '',\n codes: ['NL', 'TM', 'CO'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'occidente',\n label: '',\n codes: ['JA', 'AG', 'NA', 'CL', 'MI', 'ZA'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n {\n key: 'centro',\n label: '',\n codes: ['MX', 'DF', 'MO', 'QT', 'PU', 'TL', 'HG', 'GJ', 'SL'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'sur',\n label: '',\n codes: ['OA', 'GR', 'CS'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'sureste',\n label: '',\n codes: ['CM', 'QR', 'YU', 'TB', 'VE'],\n gradient: 'from-cyan-500/15 to-sky-500/10 dark:from-cyan-500/20 dark:to-sky-500/15',\n iconColor: 'text-cyan-600 dark:text-cyan-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'MX'\n// ---------------------------------------------------------------------------\n\nexport const getMexicoFlagUrl = (code: string) => getSubdivisionFlagUrl('MX', code)\nexport const getMexicoHexColor = (code: string) => getSubdivisionHexColor('MX', code)\nexport const getMexicoPalette = (code: string) => getSubdivisionPalette('MX', code)\nexport const getMexicoGradient = (code: string, direction?: string) => getSubdivisionGradient('MX', code, direction)\nexport const getMexicoColors = (code: string) => getSubdivisionColors('MX', code)\nexport const getMexicoAccent = (code: string) => getSubdivisionAccent('MX', code)\nexport const isValidMexicoState = (code: string) => isValidSubdivision('MX', code)\n","/**\n * Colombia Subdivision Theme Data\n * ================================\n *\n * Reusable Colombian department palettes, accents, coordinates, macro-regions,\n * and convenience helpers. Does NOT self-register; consumers call\n * `registerSubdivisionTheme('CO', CO_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Colombia department color palettes — from flag/coat-of-arms dominant colors\n// ---------------------------------------------------------------------------\n\nexport const COLOMBIA_DEPARTMENT_PALETTES: Record<string, SubdivisionColorPalette> = {\n // Caribe\n SA: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n BL: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n SU: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n AT: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n CE: { primary: '#006847', secondary: '#f0f0f0', text: 'light' },\n LG: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n MA: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n CO: { primary: '#ffd700', secondary: '#006847', text: 'dark' },\n // Andina\n CA: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n TO: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n HU: { primary: '#006847', secondary: '#f0f0f0', text: 'light' },\n NS: { primary: '#c8102e', secondary: '#0038a8', text: 'light' },\n AN: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n BY: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n ST: { primary: '#0038a8', secondary: '#ffd700', text: 'light' },\n CL: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n CU: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n BO: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n RI: { primary: '#ffd700', secondary: '#0038a8', text: 'dark' },\n QD: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n NA: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n // Pacifica\n CH: { primary: '#006847', secondary: '#0038a8', text: 'light' },\n VC: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n // Orinoquia\n AR: { primary: '#ffd700', secondary: '#006847', text: 'dark' },\n CS: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n GV: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n ME: { primary: '#006847', secondary: '#f0f0f0', text: 'light' },\n VD: { primary: '#0038a8', secondary: '#006847', text: 'light' },\n // Amazonia\n CQ: { primary: '#006847', secondary: '#0038a8', text: 'light' },\n PU: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n AM: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n VP: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n GN: { primary: '#006847', secondary: '#0038a8', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Colombia accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const COLOMBIA_ACCENT_MAP: Record<string, string> = {\n SA: 'green',\n BL: 'yellow',\n SU: 'green',\n AT: 'red',\n CE: 'green',\n LG: 'blue',\n MA: 'red',\n CO: 'yellow',\n CA: 'green',\n TO: 'yellow',\n HU: 'green',\n NS: 'red',\n AN: 'green',\n BY: 'green',\n ST: 'blue',\n CL: 'red',\n CU: 'blue',\n BO: 'green',\n RI: 'yellow',\n QD: 'green',\n NA: 'green',\n CH: 'green',\n VC: 'blue',\n AR: 'yellow',\n CS: 'green',\n GV: 'red',\n ME: 'green',\n VD: 'blue',\n CQ: 'green',\n PU: 'green',\n AM: 'green',\n VP: 'green',\n GN: 'green',\n}\n\n// All valid Colombian department codes\nconst VALID_CODES = Object.keys(COLOMBIA_DEPARTMENT_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const CO_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: COLOMBIA_DEPARTMENT_PALETTES,\n accents: COLOMBIA_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/co/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Colombia department center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const COLOMBIA_DEPARTMENT_COORDINATES: Record<string, [number, number]> = {\n // Caribe\n SA: [-75.5, 9.3],\n BL: [-75.0, 10.4],\n SU: [-72.8, 9.3],\n AT: [-75.0, 10.7],\n CE: [-73.5, 10.0],\n LG: [-72.9, 11.5],\n MA: [-74.2, 10.4],\n CO: [-75.8, 8.7],\n // Andina\n CA: [-76.5, 2.5],\n TO: [-75.2, 4.0],\n HU: [-75.8, 2.5],\n NS: [-72.9, 7.9],\n AN: [-75.6, 6.3],\n BY: [-73.3, 5.5],\n ST: [-73.0, 6.6],\n CL: [-75.5, 5.0],\n CU: [-76.0, 2.0],\n BO: [-74.0, 5.5],\n RI: [-75.7, 4.8],\n QD: [-75.7, 4.5],\n NA: [-77.5, 1.5],\n // Pacifica\n CH: [-76.8, 5.5],\n VC: [-76.5, 3.5],\n // Orinoquia\n AR: [-71.0, 6.5],\n CS: [-72.0, 5.0],\n GV: [-70.5, 4.0],\n ME: [-73.5, 3.5],\n VD: [-70.0, 4.5],\n // Amazonia\n CQ: [-75.5, 1.0],\n PU: [-76.0, 0.5],\n AM: [-71.5, -1.0],\n VP: [-70.0, 1.0],\n GN: [-69.5, 2.5],\n}\n\nexport const COLOMBIA_MAP_CENTER: [number, number] = [-73.5, 4.0]\n\n// ---------------------------------------------------------------------------\n// Colombia macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const COLOMBIA_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'caribe',\n label: '',\n codes: ['SA', 'BL', 'SU', 'AT', 'CE', 'LG', 'MA', 'CO'],\n gradient: 'from-cyan-500/15 to-sky-500/10 dark:from-cyan-500/20 dark:to-sky-500/15',\n iconColor: 'text-cyan-600 dark:text-cyan-400',\n },\n {\n key: 'andina',\n label: '',\n codes: ['CA', 'TO', 'HU', 'NS', 'AN', 'BY', 'ST', 'CL', 'CU', 'BO', 'RI', 'QD', 'NA'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'pacifica',\n label: '',\n codes: ['CH', 'VC'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'orinoquia',\n label: '',\n codes: ['AR', 'CS', 'GV', 'ME', 'VD'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'amazonia',\n label: '',\n codes: ['CQ', 'PU', 'AM', 'VP', 'GN'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'CO'\n// ---------------------------------------------------------------------------\n\nexport const getColombiaFlagUrl = (code: string) => getSubdivisionFlagUrl('CO', code)\nexport const getColombiaHexColor = (code: string) => getSubdivisionHexColor('CO', code)\nexport const getColombiaPalette = (code: string) => getSubdivisionPalette('CO', code)\nexport const getColombiaGradient = (code: string, direction?: string) => getSubdivisionGradient('CO', code, direction)\nexport const getColombiaColors = (code: string) => getSubdivisionColors('CO', code)\nexport const getColombiaAccent = (code: string) => getSubdivisionAccent('CO', code)\nexport const isValidColombiaDepartment = (code: string) => isValidSubdivision('CO', code)\n","/**\n * Argentina Subdivision Theme Data\n * =================================\n *\n * Reusable Argentine province palettes, accents, coordinates, macro-regions,\n * and convenience helpers. Does NOT self-register; consumers call\n * `registerSubdivisionTheme('AR', AR_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Argentina province color palettes — from flag/coat-of-arms dominant colors\n// ---------------------------------------------------------------------------\n\nexport const ARGENTINA_PROVINCE_PALETTES: Record<string, SubdivisionColorPalette> = {\n // Patagonia\n TF: { primary: '#0038a8', secondary: '#f0f0f0', text: 'light' },\n NQ: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n RN: { primary: '#006847', secondary: '#0038a8', text: 'light' },\n CH: { primary: '#0038a8', secondary: '#ffd700', text: 'light' },\n SC: { primary: '#0038a8', secondary: '#f0f0f0', text: 'light' },\n // Pampeana\n BA: { primary: '#c8102e', secondary: '#0038a8', text: 'light' },\n LP: { primary: '#0038a8', secondary: '#f0f0f0', text: 'light' },\n CB: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n SF: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n ER: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n DF: { primary: '#ffd700', secondary: '#0038a8', text: 'dark' },\n // Cuyo\n SJ: { primary: '#0038a8', secondary: '#ffd700', text: 'light' },\n MZ: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n SL: { primary: '#006847', secondary: '#0038a8', text: 'light' },\n // NOA (Noroeste)\n CT: { primary: '#0038a8', secondary: '#f0f0f0', text: 'light' },\n LR: { primary: '#c8102e', secondary: '#0038a8', text: 'light' },\n SA: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n TM: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n JY: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n SE: { primary: '#0038a8', secondary: '#006847', text: 'light' },\n // NEA (Noreste)\n CC: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n FM: { primary: '#0038a8', secondary: '#006847', text: 'light' },\n CN: { primary: '#c8102e', secondary: '#0038a8', text: 'light' },\n MN: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Argentina accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const ARGENTINA_ACCENT_MAP: Record<string, string> = {\n TF: 'blue',\n NQ: 'blue',\n RN: 'green',\n CH: 'blue',\n SC: 'blue',\n BA: 'red',\n LP: 'blue',\n CB: 'blue',\n SF: 'red',\n ER: 'blue',\n DF: 'yellow',\n SJ: 'blue',\n MZ: 'green',\n SL: 'green',\n CT: 'blue',\n LR: 'red',\n SA: 'red',\n TM: 'blue',\n JY: 'green',\n SE: 'blue',\n CC: 'green',\n FM: 'blue',\n CN: 'red',\n MN: 'red',\n}\n\n// All valid Argentine province codes\nconst VALID_CODES = Object.keys(ARGENTINA_PROVINCE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const AR_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: ARGENTINA_PROVINCE_PALETTES,\n accents: ARGENTINA_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/ar/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Argentina province center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const ARGENTINA_PROVINCE_COORDINATES: Record<string, [number, number]> = {\n // Patagonia\n TF: [-68.5, -54.5],\n NQ: [-70.5, -38.5],\n RN: [-67.0, -40.0],\n CH: [-69.0, -43.5],\n SC: [-69.0, -48.5],\n // Pampeana\n BA: [-60.0, -37.0],\n LP: [-66.0, -37.0],\n CB: [-64.5, -32.0],\n SF: [-61.0, -31.0],\n ER: [-59.0, -32.0],\n DF: [-58.4, -34.6],\n // Cuyo\n SJ: [-69.0, -31.0],\n MZ: [-69.0, -34.5],\n SL: [-66.0, -34.0],\n // NOA\n CT: [-66.0, -28.0],\n LR: [-67.0, -30.0],\n SA: [-65.5, -24.5],\n TM: [-65.5, -27.0],\n JY: [-66.0, -23.5],\n SE: [-64.0, -28.0],\n // NEA\n CC: [-58.5, -28.5],\n FM: [-58.5, -26.0],\n CN: [-59.5, -27.5],\n MN: [-54.5, -27.0],\n}\n\nexport const ARGENTINA_MAP_CENTER: [number, number] = [-64.0, -38.0]\n\n// ---------------------------------------------------------------------------\n// Argentina macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const ARGENTINA_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'patagonia',\n label: '',\n codes: ['TF', 'NQ', 'RN', 'CH', 'SC'],\n gradient: 'from-cyan-500/15 to-sky-500/10 dark:from-cyan-500/20 dark:to-sky-500/15',\n iconColor: 'text-cyan-600 dark:text-cyan-400',\n },\n {\n key: 'pampeana',\n label: '',\n codes: ['BA', 'LP', 'CB', 'SF', 'ER', 'DF'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'cuyo',\n label: '',\n codes: ['SJ', 'MZ', 'SL'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n {\n key: 'noa',\n label: '',\n codes: ['CT', 'LR', 'SA', 'TM', 'JY', 'SE'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'nea',\n label: '',\n codes: ['CC', 'FM', 'CN', 'MN'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'AR'\n// ---------------------------------------------------------------------------\n\nexport const getArgentinaFlagUrl = (code: string) => getSubdivisionFlagUrl('AR', code)\nexport const getArgentinaHexColor = (code: string) => getSubdivisionHexColor('AR', code)\nexport const getArgentinaPalette = (code: string) => getSubdivisionPalette('AR', code)\nexport const getArgentinaGradient = (code: string, direction?: string) => getSubdivisionGradient('AR', code, direction)\nexport const getArgentinaColors = (code: string) => getSubdivisionColors('AR', code)\nexport const getArgentinaAccent = (code: string) => getSubdivisionAccent('AR', code)\nexport const isValidArgentinaProvince = (code: string) => isValidSubdivision('AR', code)\n","/**\n * Chile Subdivision Theme Data\n * ============================\n *\n * Reusable Chilean region palettes, accents, coordinates, macro-regions,\n * and convenience helpers. Does NOT self-register; consumers call\n * `registerSubdivisionTheme('CL', CL_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Chile region color palettes — from flag/coat-of-arms dominant colors\n// ---------------------------------------------------------------------------\n\nexport const CHILE_REGION_PALETTES: Record<string, SubdivisionColorPalette> = {\n // Norte Grande\n TA: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n AY: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n AN: { primary: '#c8102e', secondary: '#0038a8', text: 'light' },\n AT: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n // Norte Chico\n CO: { primary: '#0038a8', secondary: '#ffd700', text: 'light' },\n // Central\n VS: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n RM: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n LI: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n ML: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n // Sur\n BI: { primary: '#0038a8', secondary: '#f0f0f0', text: 'light' },\n LA: { primary: '#006847', secondary: '#0038a8', text: 'light' },\n AR: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n LL: { primary: '#0038a8', secondary: '#006847', text: 'light' },\n // Austral\n AI: { primary: '#0038a8', secondary: '#f0f0f0', text: 'light' },\n MA: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Chile accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const CHILE_ACCENT_MAP: Record<string, string> = {\n TA: 'red',\n AY: 'green',\n AN: 'red',\n AT: 'yellow',\n CO: 'blue',\n VS: 'red',\n RM: 'blue',\n LI: 'green',\n ML: 'red',\n BI: 'blue',\n LA: 'green',\n AR: 'green',\n LL: 'blue',\n AI: 'blue',\n MA: 'blue',\n}\n\n// All valid Chilean region codes\nconst VALID_CODES = Object.keys(CHILE_REGION_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const CL_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: CHILE_REGION_PALETTES,\n accents: CHILE_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/cl/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Chile region center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const CHILE_REGION_COORDINATES: Record<string, [number, number]> = {\n // Norte Grande\n TA: [-70.0, -20.0],\n AY: [-69.5, -18.5],\n AN: [-69.5, -23.5],\n AT: [-70.0, -27.0],\n // Norte Chico\n CO: [-71.0, -30.0],\n // Central\n VS: [-71.5, -33.0],\n RM: [-70.6, -33.5],\n LI: [-71.0, -34.5],\n ML: [-71.5, -35.5],\n // Sur\n BI: [-72.5, -37.0],\n LA: [-72.5, -38.5],\n AR: [-72.0, -39.5],\n LL: [-72.5, -42.0],\n // Austral\n AI: [-73.5, -45.0],\n MA: [-72.0, -52.0],\n}\n\nexport const CHILE_MAP_CENTER: [number, number] = [-71.0, -35.0]\n\n// ---------------------------------------------------------------------------\n// Chile macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const CHILE_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'norteGrande',\n label: '',\n codes: ['TA', 'AY', 'AN', 'AT'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'norteChico',\n label: '',\n codes: ['CO'],\n gradient: 'from-yellow-500/15 to-amber-500/10 dark:from-yellow-500/20 dark:to-amber-500/15',\n iconColor: 'text-yellow-600 dark:text-yellow-400',\n },\n {\n key: 'central',\n label: '',\n codes: ['VS', 'RM', 'LI', 'ML'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'sur',\n label: '',\n codes: ['BI', 'LA', 'AR', 'LL'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'austral',\n label: '',\n codes: ['AI', 'MA'],\n gradient: 'from-cyan-500/15 to-sky-500/10 dark:from-cyan-500/20 dark:to-sky-500/15',\n iconColor: 'text-cyan-600 dark:text-cyan-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'CL'\n// ---------------------------------------------------------------------------\n\nexport const getChileFlagUrl = (code: string) => getSubdivisionFlagUrl('CL', code)\nexport const getChileHexColor = (code: string) => getSubdivisionHexColor('CL', code)\nexport const getChilePalette = (code: string) => getSubdivisionPalette('CL', code)\nexport const getChileGradient = (code: string, direction?: string) => getSubdivisionGradient('CL', code, direction)\nexport const getChileColors = (code: string) => getSubdivisionColors('CL', code)\nexport const getChileAccent = (code: string) => getSubdivisionAccent('CL', code)\nexport const isValidChileRegion = (code: string) => isValidSubdivision('CL', code)\n","/**\n * Peru Subdivision Theme Data\n * ===========================\n *\n * Reusable Peruvian department palettes, accents, coordinates, macro-regions,\n * and convenience helpers. Does NOT self-register; consumers call\n * `registerSubdivisionTheme('PE', PE_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Peru department color palettes — from flag/coat-of-arms dominant colors\n// ---------------------------------------------------------------------------\n\nexport const PERU_DEPARTMENT_PALETTES: Record<string, SubdivisionColorPalette> = {\n // Costa\n TU: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n PI: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n LB: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n LL: { primary: '#0038a8', secondary: '#ffd700', text: 'light' },\n AN: { primary: '#c8102e', secondary: '#0038a8', text: 'light' },\n LR: { primary: '#006847', secondary: '#f0f0f0', text: 'light' },\n LP: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n CL: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n IC: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n AR: { primary: '#c8102e', secondary: '#0038a8', text: 'light' },\n MQ: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n TA: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n // Sierra\n CJ: { primary: '#ffd700', secondary: '#006847', text: 'dark' },\n HC: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n JU: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n HV: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n AY: { primary: '#c8102e', secondary: '#006847', text: 'light' },\n AP: { primary: '#0038a8', secondary: '#f0f0f0', text: 'light' },\n CS: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n PU: { primary: '#0038a8', secondary: '#c8102e', text: 'light' },\n // Selva\n AM: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n SM: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n LO: { primary: '#006847', secondary: '#0038a8', text: 'light' },\n UC: { primary: '#006847', secondary: '#c8102e', text: 'light' },\n MD: { primary: '#006847', secondary: '#ffd700', text: 'light' },\n PA: { primary: '#006847', secondary: '#0038a8', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Peru accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const PERU_ACCENT_MAP: Record<string, string> = {\n TU: 'green',\n PI: 'green',\n LB: 'red',\n LL: 'blue',\n AN: 'red',\n LR: 'green',\n LP: 'red',\n CL: 'red',\n IC: 'red',\n AR: 'red',\n MQ: 'red',\n TA: 'green',\n CJ: 'yellow',\n HC: 'green',\n JU: 'green',\n HV: 'blue',\n AY: 'red',\n AP: 'blue',\n CS: 'red',\n PU: 'blue',\n AM: 'green',\n SM: 'green',\n LO: 'green',\n UC: 'green',\n MD: 'green',\n PA: 'green',\n}\n\n// All valid Peruvian department codes\nconst VALID_CODES = Object.keys(PERU_DEPARTMENT_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const PE_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: PERU_DEPARTMENT_PALETTES,\n accents: PERU_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/pe/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Peru department center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const PERU_DEPARTMENT_COORDINATES: Record<string, [number, number]> = {\n // Costa\n TU: [-80.5, -3.5],\n PI: [-80.0, -5.0],\n LB: [-79.5, -6.8],\n LL: [-78.5, -8.0],\n AN: [-77.5, -9.5],\n LR: [-77.0, -11.5],\n LP: [-77.0, -12.0],\n CL: [-76.5, -13.5],\n IC: [-75.5, -14.5],\n AR: [-72.0, -16.0],\n MQ: [-71.0, -17.2],\n TA: [-70.3, -17.8],\n // Sierra\n CJ: [-78.5, -7.0],\n HC: [-76.0, -9.5],\n JU: [-75.5, -11.5],\n HV: [-75.0, -12.5],\n AY: [-74.0, -13.5],\n AP: [-73.0, -14.0],\n CS: [-72.0, -13.5],\n PU: [-70.0, -15.0],\n // Selva\n AM: [-78.0, -6.0],\n SM: [-77.0, -7.0],\n LO: [-75.0, -4.5],\n UC: [-75.0, -8.5],\n MD: [-70.5, -12.0],\n PA: [-75.5, -10.0],\n}\n\nexport const PERU_MAP_CENTER: [number, number] = [-75.0, -9.5]\n\n// ---------------------------------------------------------------------------\n// Peru macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const PERU_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'costa',\n label: '',\n codes: ['TU', 'PI', 'LB', 'LL', 'AN', 'LR', 'LP', 'CL', 'IC', 'AR', 'MQ', 'TA'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'sierra',\n label: '',\n codes: ['CJ', 'HC', 'JU', 'HV', 'AY', 'AP', 'CS', 'PU'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'selva',\n label: '',\n codes: ['AM', 'SM', 'LO', 'UC', 'MD', 'PA'],\n gradient: 'from-cyan-500/15 to-sky-500/10 dark:from-cyan-500/20 dark:to-sky-500/15',\n iconColor: 'text-cyan-600 dark:text-cyan-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'PE'\n// ---------------------------------------------------------------------------\n\nexport const getPeruFlagUrl = (code: string) => getSubdivisionFlagUrl('PE', code)\nexport const getPeruHexColor = (code: string) => getSubdivisionHexColor('PE', code)\nexport const getPeruPalette = (code: string) => getSubdivisionPalette('PE', code)\nexport const getPeruGradient = (code: string, direction?: string) => getSubdivisionGradient('PE', code, direction)\nexport const getPeruColors = (code: string) => getSubdivisionColors('PE', code)\nexport const getPeruAccent = (code: string) => getSubdivisionAccent('PE', code)\nexport const isValidPeruDepartment = (code: string) => isValidSubdivision('PE', code)\n","/**\n * Germany Subdivision Theme Data\n * ==============================\n *\n * Reusable German Bundesland palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('DE', DE_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Germany Bundesland color palettes — from flag dominant colors\n// ---------------------------------------------------------------------------\n\nexport const GERMANY_STATE_PALETTES: Record<string, SubdivisionColorPalette> = {\n NI: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n SH: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n BE: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n MV: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n HB: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n SL: { primary: '#000000', secondary: '#c8102e', text: 'light' },\n BY: { primary: '#0080c9', secondary: '#f0f0f0', text: 'light' },\n TH: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n ST: { primary: '#ffd700', secondary: '#009640', text: 'dark' },\n SN: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n BB: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n NW: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n BW: { primary: '#000000', secondary: '#ffd700', text: 'light' },\n HE: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n HH: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n RP: { primary: '#000000', secondary: '#c8102e', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Germany accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const GERMANY_ACCENT_MAP: Record<string, string> = {\n NI: 'red',\n SH: 'blue',\n BE: 'red',\n MV: 'blue',\n HB: 'red',\n SL: 'slate',\n BY: 'sky',\n TH: 'red',\n ST: 'yellow',\n SN: 'green',\n BB: 'red',\n NW: 'green',\n BW: 'amber',\n HE: 'red',\n HH: 'red',\n RP: 'slate',\n}\n\n// All valid German Bundesland codes\nconst VALID_CODES = Object.keys(GERMANY_STATE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const DE_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: GERMANY_STATE_PALETTES,\n accents: GERMANY_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/de/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Germany Bundesland center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const GERMANY_STATE_COORDINATES: Record<string, [number, number]> = {\n NI: [9.8, 52.6],\n SH: [9.8, 54.2],\n BE: [13.4, 52.5],\n MV: [12.4, 53.9],\n HB: [8.8, 53.1],\n SL: [6.9, 49.4],\n BY: [11.5, 48.8],\n TH: [11.0, 50.9],\n ST: [11.7, 51.9],\n SN: [13.4, 51.0],\n BB: [13.4, 52.1],\n NW: [7.5, 51.4],\n BW: [9.0, 48.5],\n HE: [9.0, 50.6],\n HH: [10.0, 53.6],\n RP: [7.3, 49.9],\n}\n\nexport const GERMANY_MAP_CENTER: [number, number] = [10.4, 51.2]\n\n// ---------------------------------------------------------------------------\n// Germany macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const GERMANY_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'nord',\n label: '',\n codes: ['NI', 'SH', 'HH', 'HB', 'MV'],\n gradient: 'from-sky-500/15 to-blue-500/10 dark:from-sky-500/20 dark:to-blue-500/15',\n iconColor: 'text-sky-600 dark:text-sky-400',\n },\n {\n key: 'ost',\n label: '',\n codes: ['BE', 'BB', 'SN', 'ST', 'TH'],\n gradient: 'from-rose-500/15 to-red-500/10 dark:from-rose-500/20 dark:to-red-500/15',\n iconColor: 'text-rose-600 dark:text-rose-400',\n },\n {\n key: 'west',\n label: '',\n codes: ['NW', 'HE', 'RP', 'SL'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'sued',\n label: '',\n codes: ['BY', 'BW'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'DE'\n// ---------------------------------------------------------------------------\n\nexport const getGermanyFlagUrl = (code: string) => getSubdivisionFlagUrl('DE', code)\nexport const getGermanyHexColor = (code: string) => getSubdivisionHexColor('DE', code)\nexport const getGermanyPalette = (code: string) => getSubdivisionPalette('DE', code)\nexport const getGermanyGradient = (code: string, direction?: string) => getSubdivisionGradient('DE', code, direction)\nexport const getGermanyColors = (code: string) => getSubdivisionColors('DE', code)\nexport const getGermanyAccent = (code: string) => getSubdivisionAccent('DE', code)\nexport const isValidGermanyState = (code: string) => isValidSubdivision('DE', code)\n","/**\n * France Subdivision Theme Data\n * =============================\n *\n * Reusable French region palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('FR', FR_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// France region color palettes — from regional flag/coat of arms colors\n// ---------------------------------------------------------------------------\n\nexport const FRANCE_REGION_PALETTES: Record<string, SubdivisionColorPalette> = {\n CO: { primary: '#000000', secondary: '#f0f0f0', text: 'light' },\n BR: { primary: '#000000', secondary: '#f0f0f0', text: 'light' },\n PD: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n PA: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n OC: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n NA: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n BF: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n CV: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n ID: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n HD: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n AR: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n GE: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n NO: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// France accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const FRANCE_ACCENT_MAP: Record<string, string> = {\n CO: 'slate',\n BR: 'slate',\n PD: 'red',\n PA: 'blue',\n OC: 'rose',\n NA: 'red',\n BF: 'blue',\n CV: 'indigo',\n ID: 'blue',\n HD: 'yellow',\n AR: 'red',\n GE: 'blue',\n NO: 'orange',\n}\n\n// All valid French region codes\nconst VALID_CODES = Object.keys(FRANCE_REGION_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const FR_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: FRANCE_REGION_PALETTES,\n accents: FRANCE_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/fr/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// France region center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const FRANCE_REGION_COORDINATES: Record<string, [number, number]> = {\n CO: [9.1, 42.2],\n BR: [-3.0, 48.2],\n PD: [-0.9, 47.3],\n PA: [5.8, 43.9],\n OC: [2.0, 43.6],\n NA: [0.3, 45.7],\n BF: [4.6, 47.0],\n CV: [1.7, 47.6],\n ID: [2.5, 48.8],\n HD: [2.8, 49.9],\n AR: [4.5, 45.7],\n GE: [5.7, 48.6],\n NO: [0.1, 49.1],\n}\n\nexport const FRANCE_MAP_CENTER: [number, number] = [2.5, 46.5]\n\n// ---------------------------------------------------------------------------\n// France macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const FRANCE_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'nord',\n label: '',\n codes: ['HD', 'NO', 'ID', 'GE'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'ouest',\n label: '',\n codes: ['BR', 'PD', 'NA'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'centre',\n label: '',\n codes: ['CV', 'BF'],\n gradient: 'from-violet-500/15 to-purple-500/10 dark:from-violet-500/20 dark:to-purple-500/15',\n iconColor: 'text-violet-600 dark:text-violet-400',\n },\n {\n key: 'sud',\n label: '',\n codes: ['PA', 'OC', 'CO'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'est',\n label: '',\n codes: ['AR', 'GE'],\n gradient: 'from-rose-500/15 to-pink-500/10 dark:from-rose-500/20 dark:to-pink-500/15',\n iconColor: 'text-rose-600 dark:text-rose-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'FR'\n// ---------------------------------------------------------------------------\n\nexport const getFranceFlagUrl = (code: string) => getSubdivisionFlagUrl('FR', code)\nexport const getFranceHexColor = (code: string) => getSubdivisionHexColor('FR', code)\nexport const getFrancePalette = (code: string) => getSubdivisionPalette('FR', code)\nexport const getFranceGradient = (code: string, direction?: string) => getSubdivisionGradient('FR', code, direction)\nexport const getFranceColors = (code: string) => getSubdivisionColors('FR', code)\nexport const getFranceAccent = (code: string) => getSubdivisionAccent('FR', code)\nexport const isValidFranceRegion = (code: string) => isValidSubdivision('FR', code)\n","/**\n * Spain Subdivision Theme Data\n * ============================\n *\n * Reusable Spanish province palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('ES', ES_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Spain province color palettes — from regional/provincial flag colors\n// ---------------------------------------------------------------------------\n\nexport const SPAIN_PROVINCE_PALETTES: Record<string, SubdivisionColorPalette> = {\n // Islas Baleares\n PM: { primary: '#6b2fa0', secondary: '#ffd700', text: 'light' },\n // Comunidad Valenciana\n VA: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n // Castilla y Leon\n LE: { primary: '#6b2fa0', secondary: '#f0f0f0', text: 'light' },\n // Melilla\n ME: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n // Palencia\n P: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n // Cantabria\n S: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n // Navarra\n NA: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n // Ceuta\n CE: { primary: '#000000', secondary: '#f0f0f0', text: 'light' },\n // Cuenca\n CU: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n // Alava\n VI: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n // Guipuzcoa\n SS: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n // Granada\n GR: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n // Murcia\n MU: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n // Burgos\n BU: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n // Salamanca\n SA: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n // Zamora\n ZA: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n // Huesca\n HU: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n // Madrid\n M: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n // Guadalajara\n GU: { primary: '#6b2fa0', secondary: '#ffd700', text: 'light' },\n // Segovia\n SG: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n // Sevilla\n SE: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n // Tarragona\n T: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n // Teruel\n TE: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n // Valencia\n V: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n // Vizcaya\n BI: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n // Orense\n OR: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n // Lerida\n L: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n // Zaragoza\n Z: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n // Girona\n GI: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n // Albacete\n AB: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n // Alicante\n A: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n // Avila\n AV: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n // Caceres\n CC: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n // Toledo\n TO: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n // Badajoz\n BA: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n // Cordoba\n CO: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n // Huelva\n H: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n // A Coruna\n C: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n // Malaga\n MA: { primary: '#6b2fa0', secondary: '#009640', text: 'light' },\n // Pontevedra\n PO: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n // La Rioja\n LO: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n // Soria\n SO: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n // Almeria\n AL: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n // Barcelona\n B: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n // Cadiz\n CA: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n // Asturias\n O: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n // Castellon\n CS: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n // Ciudad Real\n CR: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n // Jaen\n J: { primary: '#6b2fa0', secondary: '#ffd700', text: 'light' },\n // Lugo\n LU: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n // Tenerife\n TF: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n // Gran Canaria\n GC: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n}\n\n// ---------------------------------------------------------------------------\n// Spain accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const SPAIN_ACCENT_MAP: Record<string, string> = {\n PM: 'purple',\n VA: 'red',\n LE: 'purple',\n ME: 'blue',\n P: 'red',\n S: 'red',\n NA: 'red',\n CE: 'slate',\n CU: 'red',\n VI: 'green',\n SS: 'red',\n GR: 'green',\n MU: 'amber',\n BU: 'red',\n SA: 'red',\n ZA: 'green',\n HU: 'red',\n M: 'red',\n GU: 'purple',\n SG: 'amber',\n SE: 'amber',\n T: 'yellow',\n TE: 'green',\n V: 'orange',\n BI: 'red',\n OR: 'blue',\n L: 'yellow',\n Z: 'yellow',\n GI: 'yellow',\n AB: 'red',\n A: 'blue',\n AV: 'indigo',\n CC: 'green',\n TO: 'red',\n BA: 'green',\n CO: 'red',\n H: 'green',\n C: 'blue',\n MA: 'purple',\n PO: 'blue',\n LO: 'rose',\n SO: 'red',\n AL: 'green',\n B: 'yellow',\n CA: 'blue',\n O: 'blue',\n CS: 'orange',\n CR: 'red',\n J: 'purple',\n LU: 'blue',\n TF: 'blue',\n GC: 'yellow',\n}\n\n// All valid Spanish province codes\nconst VALID_CODES = Object.keys(SPAIN_PROVINCE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const ES_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: SPAIN_PROVINCE_PALETTES,\n accents: SPAIN_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/es/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Spain province center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const SPAIN_PROVINCE_COORDINATES: Record<string, [number, number]> = {\n PM: [2.9, 39.6],\n VA: [-0.4, 39.5],\n LE: [-5.6, 42.6],\n ME: [-2.9, 35.3],\n P: [-4.5, 42.0],\n S: [-4.0, 43.2],\n NA: [-1.6, 42.8],\n CE: [-5.3, 35.9],\n CU: [-2.1, 40.1],\n VI: [-2.7, 42.8],\n SS: [-2.0, 43.3],\n GR: [-3.6, 37.2],\n MU: [-1.1, 37.9],\n BU: [-3.7, 42.3],\n SA: [-5.7, 40.9],\n ZA: [-5.7, 41.5],\n HU: [-0.4, 42.1],\n M: [-3.7, 40.4],\n GU: [-3.2, 40.6],\n SG: [-4.1, 41.0],\n SE: [-5.9, 37.4],\n T: [1.2, 41.1],\n TE: [-1.1, 40.3],\n V: [-0.4, 39.5],\n BI: [-2.9, 43.3],\n OR: [-7.9, 42.3],\n L: [0.6, 41.6],\n Z: [-0.9, 41.7],\n GI: [2.8, 42.0],\n AB: [-2.0, 38.9],\n A: [-0.5, 38.3],\n AV: [-5.0, 40.7],\n CC: [-6.4, 39.5],\n TO: [-4.0, 39.9],\n BA: [-6.9, 38.9],\n CO: [-4.8, 37.9],\n H: [-6.9, 37.3],\n C: [-8.4, 43.4],\n MA: [-4.4, 36.7],\n PO: [-8.6, 42.4],\n LO: [-2.4, 42.5],\n SO: [-2.5, 41.8],\n AL: [-2.5, 36.8],\n B: [2.2, 41.4],\n CA: [-6.3, 36.5],\n O: [-5.8, 43.4],\n CS: [-0.1, 40.0],\n CR: [-3.9, 38.9],\n J: [-3.8, 37.8],\n LU: [-7.6, 43.0],\n TF: [-16.5, 28.5],\n GC: [-15.4, 28.1],\n}\n\nexport const SPAIN_MAP_CENTER: [number, number] = [-3.7, 40.0]\n\n// ---------------------------------------------------------------------------\n// Spain macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const SPAIN_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'norte',\n label: '',\n codes: ['S', 'BI', 'SS', 'VI', 'NA', 'LO', 'O'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'noreste',\n label: '',\n codes: ['B', 'GI', 'L', 'T', 'HU', 'Z', 'TE'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'centro',\n label: '',\n codes: ['M', 'GU', 'SG', 'AV', 'CU', 'TO', 'CR', 'AB'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'este',\n label: '',\n codes: ['V', 'A', 'CS', 'MU'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'sur',\n label: '',\n codes: ['SE', 'CA', 'CO', 'MA', 'GR', 'AL', 'H', 'J'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'suroeste',\n label: '',\n codes: ['CC', 'BA'],\n gradient: 'from-green-500/15 to-emerald-500/10 dark:from-green-500/20 dark:to-emerald-500/15',\n iconColor: 'text-green-600 dark:text-green-400',\n },\n {\n key: 'islas',\n label: '',\n codes: ['PM', 'TF', 'GC'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n {\n key: 'ciudades',\n label: '',\n codes: ['CE', 'ME'],\n gradient: 'from-slate-500/15 to-gray-500/10 dark:from-slate-500/20 dark:to-gray-500/15',\n iconColor: 'text-slate-600 dark:text-slate-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'ES'\n// ---------------------------------------------------------------------------\n\nexport const getSpainFlagUrl = (code: string) => getSubdivisionFlagUrl('ES', code)\nexport const getSpainHexColor = (code: string) => getSubdivisionHexColor('ES', code)\nexport const getSpainPalette = (code: string) => getSubdivisionPalette('ES', code)\nexport const getSpainGradient = (code: string, direction?: string) => getSubdivisionGradient('ES', code, direction)\nexport const getSpainColors = (code: string) => getSubdivisionColors('ES', code)\nexport const getSpainAccent = (code: string) => getSubdivisionAccent('ES', code)\nexport const isValidSpainProvince = (code: string) => isValidSubdivision('ES', code)\n","/**\n * Italy Subdivision Theme Data\n * ============================\n *\n * Reusable Italian region palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('IT', IT_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Italy region color palettes — from regional flag/coat of arms colors\n// ---------------------------------------------------------------------------\n\nexport const ITALY_REGION_PALETTES: Record<string, SubdivisionColorPalette> = {\n SI: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n PU: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n BA: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n CA: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n LA: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n MO: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n TO: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n UM: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n EM: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n VE: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n PI: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n LO: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n VD: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n TA: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n MA: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n AB: { primary: '#003da5', secondary: '#009640', text: 'light' },\n FG: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n LI: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n CL: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n SA: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Italy accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const ITALY_ACCENT_MAP: Record<string, string> = {\n SI: 'red',\n PU: 'rose',\n BA: 'red',\n CA: 'amber',\n LA: 'blue',\n MO: 'red',\n TO: 'green',\n UM: 'red',\n EM: 'green',\n VE: 'blue',\n PI: 'emerald',\n LO: 'green',\n VD: 'red',\n TA: 'blue',\n MA: 'green',\n AB: 'indigo',\n FG: 'blue',\n LI: 'sky',\n CL: 'amber',\n SA: 'blue',\n}\n\n// All valid Italian region codes\nconst VALID_CODES = Object.keys(ITALY_REGION_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const IT_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: ITALY_REGION_PALETTES,\n accents: ITALY_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/it/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Italy region center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const ITALY_REGION_COORDINATES: Record<string, [number, number]> = {\n SI: [14.2, 37.6],\n PU: [16.5, 40.5],\n BA: [16.9, 39.3],\n CA: [9.1, 39.2],\n LA: [13.3, 41.7],\n MO: [14.8, 41.6],\n TO: [11.8, 43.4],\n UM: [12.6, 42.7],\n EM: [11.3, 44.5],\n VE: [12.0, 45.7],\n PI: [8.0, 44.7],\n LO: [9.9, 45.5],\n VD: [7.7, 45.7],\n TA: [11.3, 46.5],\n MA: [13.2, 43.3],\n AB: [13.6, 42.2],\n FG: [13.1, 46.1],\n LI: [8.4, 44.1],\n CL: [16.3, 39.0],\n SA: [9.0, 40.1],\n}\n\nexport const ITALY_MAP_CENTER: [number, number] = [12.5, 42.5]\n\n// ---------------------------------------------------------------------------\n// Italy macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const ITALY_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'nord-ovest',\n label: '',\n codes: ['PI', 'LO', 'LI', 'VD'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'nord-est',\n label: '',\n codes: ['VE', 'FG', 'TA', 'EM'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'centro',\n label: '',\n codes: ['TO', 'UM', 'MA', 'LA'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'sud',\n label: '',\n codes: ['CA', 'BA', 'PU', 'CL', 'MO', 'AB'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'isole',\n label: '',\n codes: ['SI', 'SA'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'IT'\n// ---------------------------------------------------------------------------\n\nexport const getItalyFlagUrl = (code: string) => getSubdivisionFlagUrl('IT', code)\nexport const getItalyHexColor = (code: string) => getSubdivisionHexColor('IT', code)\nexport const getItalyPalette = (code: string) => getSubdivisionPalette('IT', code)\nexport const getItalyGradient = (code: string, direction?: string) => getSubdivisionGradient('IT', code, direction)\nexport const getItalyColors = (code: string) => getSubdivisionColors('IT', code)\nexport const getItalyAccent = (code: string) => getSubdivisionAccent('IT', code)\nexport const isValidItalyRegion = (code: string) => isValidSubdivision('IT', code)\n","/**\n * United Kingdom Subdivision Theme Data\n * ======================================\n *\n * Reusable UK nation palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('GB', GB_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// United Kingdom nation color palettes — from national flag colors\n// ---------------------------------------------------------------------------\n\nexport const UK_NATION_PALETTES: Record<string, SubdivisionColorPalette> = {\n EN: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n SC: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n WA: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n NI: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// United Kingdom accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const UK_ACCENT_MAP: Record<string, string> = {\n EN: 'red',\n SC: 'blue',\n WA: 'green',\n NI: 'rose',\n}\n\n// All valid UK nation codes\nconst VALID_CODES = Object.keys(UK_NATION_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const GB_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: UK_NATION_PALETTES,\n accents: UK_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/gb/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// United Kingdom nation center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const UK_NATION_COORDINATES: Record<string, [number, number]> = {\n EN: [-1.2, 52.5],\n SC: [-4.2, 56.5],\n WA: [-3.7, 52.1],\n NI: [-6.8, 54.6],\n}\n\nexport const UK_MAP_CENTER: [number, number] = [-3.0, 54.5]\n\n// ---------------------------------------------------------------------------\n// United Kingdom macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const UK_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'england',\n label: '',\n codes: ['EN'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'scotland',\n label: '',\n codes: ['SC'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'wales',\n label: '',\n codes: ['WA'],\n gradient: 'from-emerald-500/15 to-green-500/10 dark:from-emerald-500/20 dark:to-green-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'northern-ireland',\n label: '',\n codes: ['NI'],\n gradient: 'from-rose-500/15 to-pink-500/10 dark:from-rose-500/20 dark:to-pink-500/15',\n iconColor: 'text-rose-600 dark:text-rose-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'GB'\n// ---------------------------------------------------------------------------\n\nexport const getUKFlagUrl = (code: string) => getSubdivisionFlagUrl('GB', code)\nexport const getUKHexColor = (code: string) => getSubdivisionHexColor('GB', code)\nexport const getUKPalette = (code: string) => getSubdivisionPalette('GB', code)\nexport const getUKGradient = (code: string, direction?: string) => getSubdivisionGradient('GB', code, direction)\nexport const getUKColors = (code: string) => getSubdivisionColors('GB', code)\nexport const getUKAccent = (code: string) => getSubdivisionAccent('GB', code)\nexport const isValidUKNation = (code: string) => isValidSubdivision('GB', code)\n","/**\n * Portugal Subdivision Theme Data\n * ===============================\n *\n * Reusable Portuguese district palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('PT', PT_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Portugal district color palettes — from district coat of arms colors\n// ---------------------------------------------------------------------------\n\nexport const PORTUGAL_DISTRICT_PALETTES: Record<string, SubdivisionColorPalette> = {\n FA: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n LI: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n AV: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n VC: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n BE: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n EV: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n SE: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n PA: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n SA: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n BR: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n LE: { primary: '#6b2fa0', secondary: '#ffd700', text: 'light' },\n BA: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n CB: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n GU: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n CO: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n PO: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n VI: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n VR: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n MA: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n AC: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Portugal accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const PORTUGAL_ACCENT_MAP: Record<string, string> = {\n FA: 'amber',\n LI: 'blue',\n AV: 'green',\n VC: 'red',\n BE: 'yellow',\n EV: 'blue',\n SE: 'green',\n PA: 'indigo',\n SA: 'red',\n BR: 'red',\n LE: 'purple',\n BA: 'red',\n CB: 'emerald',\n GU: 'red',\n CO: 'blue',\n PO: 'blue',\n VI: 'rose',\n VR: 'yellow',\n MA: 'sky',\n AC: 'blue',\n}\n\n// All valid Portuguese district codes\nconst VALID_CODES = Object.keys(PORTUGAL_DISTRICT_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const PT_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: PORTUGAL_DISTRICT_PALETTES,\n accents: PORTUGAL_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/pt/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Portugal district center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const PORTUGAL_DISTRICT_COORDINATES: Record<string, [number, number]> = {\n FA: [-7.9, 37.0],\n LI: [-9.1, 38.7],\n AV: [-8.5, 40.6],\n VC: [-8.4, 41.7],\n BE: [-7.9, 38.0],\n EV: [-7.9, 38.6],\n SE: [-8.9, 38.5],\n PA: [-7.9, 39.3],\n SA: [-8.9, 39.2],\n BR: [-8.4, 41.6],\n LE: [-8.0, 39.7],\n BA: [-8.1, 41.2],\n CB: [-7.5, 40.3],\n GU: [-7.3, 40.5],\n CO: [-8.4, 40.2],\n PO: [-8.6, 41.2],\n VI: [-7.9, 40.7],\n VR: [-7.7, 41.3],\n MA: [-17.0, 32.7],\n AC: [-25.5, 37.7],\n}\n\nexport const PORTUGAL_MAP_CENTER: [number, number] = [-8.0, 39.5]\n\n// ---------------------------------------------------------------------------\n// Portugal macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const PORTUGAL_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'norte',\n label: '',\n codes: ['VC', 'BR', 'PO', 'VR', 'BA', 'VI'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'centro',\n label: '',\n codes: ['AV', 'CO', 'GU', 'CB', 'LE'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'lisboa',\n label: '',\n codes: ['LI', 'SE', 'SA'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'alentejo',\n label: '',\n codes: ['PA', 'EV', 'BE'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'algarve',\n label: '',\n codes: ['FA'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'ilhas',\n label: '',\n codes: ['MA', 'AC'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'PT'\n// ---------------------------------------------------------------------------\n\nexport const getPortugalFlagUrl = (code: string) => getSubdivisionFlagUrl('PT', code)\nexport const getPortugalHexColor = (code: string) => getSubdivisionHexColor('PT', code)\nexport const getPortugalPalette = (code: string) => getSubdivisionPalette('PT', code)\nexport const getPortugalGradient = (code: string, direction?: string) => getSubdivisionGradient('PT', code, direction)\nexport const getPortugalColors = (code: string) => getSubdivisionColors('PT', code)\nexport const getPortugalAccent = (code: string) => getSubdivisionAccent('PT', code)\nexport const isValidPortugalDistrict = (code: string) => isValidSubdivision('PT', code)\n","/**\n * Australia Subdivision Theme Data\n * ================================\n *\n * Reusable Australian state/territory palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('AU', AU_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Australia state/territory color palettes — from state flag/coat of arms colors\n// ---------------------------------------------------------------------------\n\nexport const AUSTRALIA_STATE_PALETTES: Record<string, SubdivisionColorPalette> = {\n NT: { primary: '#d35400', secondary: '#000000', text: 'light' },\n WA: { primary: '#ffd700', secondary: '#000000', text: 'dark' },\n SA: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n QLD: { primary: '#7b0046', secondary: '#f0f0f0', text: 'light' },\n NSW: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n VIC: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n TAS: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n ACT: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Australia accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const AUSTRALIA_ACCENT_MAP: Record<string, string> = {\n NT: 'orange',\n WA: 'yellow',\n SA: 'red',\n QLD: 'fuchsia',\n NSW: 'blue',\n VIC: 'indigo',\n TAS: 'green',\n ACT: 'sky',\n}\n\n// All valid Australian state/territory codes\nconst VALID_CODES = Object.keys(AUSTRALIA_STATE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const AU_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: AUSTRALIA_STATE_PALETTES,\n accents: AUSTRALIA_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/au/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Australia state/territory center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const AUSTRALIA_STATE_COORDINATES: Record<string, [number, number]> = {\n NT: [133.8, -19.5],\n WA: [121.6, -25.3],\n SA: [135.8, -30.0],\n QLD: [144.7, -22.6],\n NSW: [147.3, -32.0],\n VIC: [145.0, -37.0],\n TAS: [146.3, -42.0],\n ACT: [149.1, -35.3],\n}\n\nexport const AUSTRALIA_MAP_CENTER: [number, number] = [134.0, -25.0]\n\n// ---------------------------------------------------------------------------\n// Australia macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const AUSTRALIA_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'eastern',\n label: '',\n codes: ['NSW', 'VIC', 'QLD', 'TAS', 'ACT'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'western',\n label: '',\n codes: ['WA'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'central',\n label: '',\n codes: ['SA', 'NT'],\n gradient: 'from-orange-500/15 to-red-500/10 dark:from-orange-500/20 dark:to-red-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'AU'\n// ---------------------------------------------------------------------------\n\nexport const getAustraliaFlagUrl = (code: string) => getSubdivisionFlagUrl('AU', code)\nexport const getAustraliaHexColor = (code: string) => getSubdivisionHexColor('AU', code)\nexport const getAustraliaPalette = (code: string) => getSubdivisionPalette('AU', code)\nexport const getAustraliaGradient = (code: string, direction?: string) => getSubdivisionGradient('AU', code, direction)\nexport const getAustraliaColors = (code: string) => getSubdivisionColors('AU', code)\nexport const getAustraliaAccent = (code: string) => getSubdivisionAccent('AU', code)\nexport const isValidAustraliaState = (code: string) => isValidSubdivision('AU', code)\n","/**\n * Japan Subdivision Theme Data\n * ============================\n *\n * Reusable Japanese prefecture palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('JP', JP_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Japan prefecture color palettes — from prefecture flag/symbol colors\n// ---------------------------------------------------------------------------\n\nexport const JAPAN_PREFECTURE_PALETTES: Record<string, SubdivisionColorPalette> = {\n HS: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n SM: { primary: '#006b3c', secondary: '#f0f0f0', text: 'light' },\n YC: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n KM: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n EH: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n KG: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n IS: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n HK: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n TK: { primary: '#5f2d91', secondary: '#009640', text: 'light' },\n NA: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n KA: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n IB: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n ST: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n SG: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n YN: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n KN: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n FO: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n FS: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n GU: { primary: '#006b3c', secondary: '#f0f0f0', text: 'light' },\n TS: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n KY: { primary: '#6b2fa0', secondary: '#f0f0f0', text: 'light' },\n ME: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n AI: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n NR: { primary: '#6b2fa0', secondary: '#009640', text: 'light' },\n OS: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n WK: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n CH: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n AK: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n MG: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n TT: { primary: '#003da5', secondary: '#009640', text: 'light' },\n HG: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n GF: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n NN: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n TY: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n NI: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n OY: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n AO: { primary: '#003da5', secondary: '#009640', text: 'light' },\n MZ: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n IW: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n KC: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n OT: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n SZ: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n FI: { primary: '#003da5', secondary: '#009640', text: 'light' },\n SH: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n TC: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n YT: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n OK: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Japan accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const JAPAN_ACCENT_MAP: Record<string, string> = {\n HS: 'red',\n SM: 'green',\n YC: 'blue',\n KM: 'red',\n EH: 'emerald',\n KG: 'green',\n IS: 'blue',\n HK: 'indigo',\n TK: 'purple',\n NA: 'red',\n KA: 'red',\n IB: 'blue',\n ST: 'rose',\n SG: 'red',\n YN: 'green',\n KN: 'red',\n FO: 'blue',\n FS: 'green',\n GU: 'emerald',\n TS: 'teal',\n KY: 'purple',\n ME: 'sky',\n AI: 'red',\n NR: 'violet',\n OS: 'blue',\n WK: 'red',\n CH: 'rose',\n AK: 'red',\n MG: 'green',\n TT: 'blue',\n HG: 'blue',\n GF: 'green',\n NN: 'teal',\n TY: 'red',\n NI: 'indigo',\n OY: 'blue',\n AO: 'blue',\n MZ: 'red',\n IW: 'emerald',\n KC: 'green',\n OT: 'red',\n SZ: 'sky',\n FI: 'blue',\n SH: 'amber',\n TC: 'blue',\n YT: 'green',\n OK: 'rose',\n}\n\n// All valid Japanese prefecture codes\nconst VALID_CODES = Object.keys(JAPAN_PREFECTURE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const JP_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: JAPAN_PREFECTURE_PALETTES,\n accents: JAPAN_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/jp/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Japan prefecture center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const JAPAN_PREFECTURE_COORDINATES: Record<string, [number, number]> = {\n HS: [132.5, 34.4],\n SM: [133.1, 35.5],\n YC: [131.5, 34.2],\n KM: [133.5, 33.6],\n EH: [132.8, 33.8],\n KG: [134.0, 34.3],\n IS: [136.6, 36.6],\n HK: [143.2, 43.1],\n TK: [139.7, 35.7],\n NA: [135.8, 34.7],\n KA: [131.6, 31.9],\n IB: [140.1, 36.3],\n ST: [139.6, 35.9],\n SG: [130.3, 33.2],\n YN: [136.6, 36.1],\n KN: [139.6, 35.4],\n FO: [130.4, 33.6],\n FS: [140.5, 37.8],\n GU: [137.2, 35.4],\n TS: [134.2, 34.1],\n KY: [135.8, 35.0],\n ME: [136.5, 34.7],\n AI: [137.0, 35.2],\n NR: [135.8, 34.7],\n OS: [135.5, 34.7],\n WK: [135.2, 34.2],\n CH: [140.1, 35.6],\n AK: [140.1, 39.7],\n MG: [140.9, 38.3],\n TT: [134.2, 35.5],\n HG: [134.7, 35.0],\n GF: [137.1, 35.7],\n NN: [138.2, 36.7],\n TY: [137.0, 36.7],\n NI: [139.0, 37.9],\n OY: [133.9, 34.7],\n AO: [140.7, 40.8],\n MZ: [131.4, 31.9],\n IW: [141.2, 39.7],\n KC: [133.5, 33.6],\n OT: [131.6, 33.2],\n SZ: [138.4, 35.0],\n FI: [138.3, 36.2],\n SH: [133.0, 35.5],\n TC: [139.9, 36.6],\n YT: [140.0, 38.2],\n OK: [127.7, 26.3],\n}\n\nexport const JAPAN_MAP_CENTER: [number, number] = [138.0, 37.0]\n\n// ---------------------------------------------------------------------------\n// Japan macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const JAPAN_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'hokkaido',\n label: '',\n codes: ['HK'],\n gradient: 'from-indigo-500/15 to-blue-500/10 dark:from-indigo-500/20 dark:to-blue-500/15',\n iconColor: 'text-indigo-600 dark:text-indigo-400',\n },\n {\n key: 'tohoku',\n label: '',\n codes: ['AO', 'IW', 'AK', 'MG', 'YT', 'FS'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'kanto',\n label: '',\n codes: ['TK', 'KN', 'ST', 'CH', 'IB', 'TC', 'GU'],\n gradient: 'from-purple-500/15 to-violet-500/10 dark:from-purple-500/20 dark:to-violet-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n {\n key: 'chubu',\n label: '',\n codes: ['NI', 'TY', 'IS', 'FI', 'NN', 'GF', 'SZ', 'AI', 'YN'],\n gradient: 'from-sky-500/15 to-blue-500/10 dark:from-sky-500/20 dark:to-blue-500/15',\n iconColor: 'text-sky-600 dark:text-sky-400',\n },\n {\n key: 'kansai',\n label: '',\n codes: ['OS', 'KY', 'NR', 'HG', 'SH', 'WK', 'ME'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'chugoku',\n label: '',\n codes: ['HS', 'SM', 'YC', 'TT', 'OY'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'shikoku',\n label: '',\n codes: ['EH', 'KG', 'TS', 'KC'],\n gradient: 'from-green-500/15 to-emerald-500/10 dark:from-green-500/20 dark:to-emerald-500/15',\n iconColor: 'text-green-600 dark:text-green-400',\n },\n {\n key: 'kyushu',\n label: '',\n codes: ['FO', 'SG', 'NA', 'KM', 'OT', 'MZ', 'KA', 'OK'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'JP'\n// ---------------------------------------------------------------------------\n\nexport const getJapanFlagUrl = (code: string) => getSubdivisionFlagUrl('JP', code)\nexport const getJapanHexColor = (code: string) => getSubdivisionHexColor('JP', code)\nexport const getJapanPalette = (code: string) => getSubdivisionPalette('JP', code)\nexport const getJapanGradient = (code: string, direction?: string) => getSubdivisionGradient('JP', code, direction)\nexport const getJapanColors = (code: string) => getSubdivisionColors('JP', code)\nexport const getJapanAccent = (code: string) => getSubdivisionAccent('JP', code)\nexport const isValidJapanPrefecture = (code: string) => isValidSubdivision('JP', code)\n","/**\n * India Subdivision Theme Data\n * ============================\n *\n * Reusable Indian state/UT palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('IN', IN_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// India state/UT color palettes — from state emblem/flag colors\n// ---------------------------------------------------------------------------\n\nexport const INDIA_STATE_PALETTES: Record<string, SubdivisionColorPalette> = {\n TN: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n PU: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n HP: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n SI: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n DE: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n UP: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n HA: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n PN: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n CH: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n RA: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n JA: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n GU: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n MP: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n MA: { primary: '#ff6600', secondary: '#009640', text: 'light' },\n DA: { primary: '#003da5', secondary: '#009640', text: 'light' },\n BI: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n WB: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n JH: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n CT: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n OD: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n KE: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n KA: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n AP: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n AA: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n AS: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n TR: { primary: '#009640', secondary: '#ff6600', text: 'light' },\n AR: { primary: '#003da5', secondary: '#009640', text: 'light' },\n LA: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n ME: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n MN: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n NA: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n MI: { primary: '#003da5', secondary: '#009640', text: 'light' },\n TE: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n LD: { primary: '#003da5', secondary: '#009640', text: 'light' },\n UT: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n GO: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// India accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const INDIA_ACCENT_MAP: Record<string, string> = {\n TN: 'red',\n PU: 'blue',\n HP: 'green',\n SI: 'red',\n DE: 'rose',\n UP: 'blue',\n HA: 'red',\n PN: 'indigo',\n CH: 'blue',\n RA: 'yellow',\n JA: 'blue',\n GU: 'amber',\n MP: 'green',\n MA: 'orange',\n DA: 'blue',\n BI: 'red',\n WB: 'blue',\n JH: 'emerald',\n CT: 'green',\n OD: 'red',\n KE: 'teal',\n KA: 'red',\n AP: 'sky',\n AA: 'red',\n AS: 'rose',\n TR: 'green',\n AR: 'blue',\n LA: 'red',\n ME: 'emerald',\n MN: 'red',\n NA: 'indigo',\n MI: 'blue',\n TE: 'yellow',\n LD: 'blue',\n UT: 'green',\n GO: 'teal',\n}\n\n// All valid Indian state/UT codes\nconst VALID_CODES = Object.keys(INDIA_STATE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const IN_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: INDIA_STATE_PALETTES,\n accents: INDIA_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/in/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// India state/UT center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const INDIA_STATE_COORDINATES: Record<string, [number, number]> = {\n TN: [78.7, 11.1],\n PU: [79.8, 11.9],\n HP: [77.2, 31.1],\n SI: [88.5, 27.5],\n DE: [77.1, 28.7],\n UP: [80.9, 27.0],\n HA: [76.1, 29.1],\n PN: [75.3, 31.1],\n CH: [76.8, 30.7],\n RA: [73.7, 26.5],\n JA: [86.2, 23.6],\n GU: [71.6, 22.3],\n MP: [78.7, 23.5],\n MA: [75.7, 19.7],\n DA: [73.0, 20.1],\n BI: [85.3, 25.6],\n WB: [87.9, 22.6],\n JH: [85.3, 23.6],\n CT: [81.9, 21.3],\n OD: [84.0, 20.9],\n KE: [76.3, 10.9],\n KA: [75.7, 15.3],\n AP: [79.7, 15.9],\n AA: [72.9, 20.6],\n AS: [92.9, 26.2],\n TR: [91.7, 23.9],\n AR: [94.7, 28.2],\n LA: [77.6, 34.2],\n ME: [91.4, 25.5],\n MN: [93.9, 24.8],\n NA: [94.1, 26.2],\n MI: [92.7, 23.2],\n TE: [79.0, 18.1],\n LD: [72.2, 10.6],\n UT: [79.0, 30.1],\n GO: [74.0, 15.3],\n}\n\nexport const INDIA_MAP_CENTER: [number, number] = [79.0, 22.0]\n\n// ---------------------------------------------------------------------------\n// India macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const INDIA_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'north',\n label: '',\n codes: ['HP', 'PN', 'HA', 'DE', 'CH', 'RA', 'UP', 'UT', 'JA', 'LD'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'east',\n label: '',\n codes: ['WB', 'OD', 'BI', 'JH'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'west',\n label: '',\n codes: ['GU', 'MA', 'DA', 'GO'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'south',\n label: '',\n codes: ['TN', 'KE', 'KA', 'AP', 'TE', 'PU', 'AA'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'central',\n label: '',\n codes: ['MP', 'CT'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'northeast',\n label: '',\n codes: ['AS', 'AR', 'MN', 'ME', 'MI', 'NA', 'TR', 'SI'],\n gradient: 'from-green-500/15 to-emerald-500/10 dark:from-green-500/20 dark:to-emerald-500/15',\n iconColor: 'text-green-600 dark:text-green-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'IN'\n// ---------------------------------------------------------------------------\n\nexport const getIndiaFlagUrl = (code: string) => getSubdivisionFlagUrl('IN', code)\nexport const getIndiaHexColor = (code: string) => getSubdivisionHexColor('IN', code)\nexport const getIndiaPalette = (code: string) => getSubdivisionPalette('IN', code)\nexport const getIndiaGradient = (code: string, direction?: string) => getSubdivisionGradient('IN', code, direction)\nexport const getIndiaColors = (code: string) => getSubdivisionColors('IN', code)\nexport const getIndiaAccent = (code: string) => getSubdivisionAccent('IN', code)\nexport const isValidIndiaState = (code: string) => isValidSubdivision('IN', code)\n","/**\n * South Africa Subdivision Theme Data\n * ====================================\n *\n * Reusable South African province palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('ZA', ZA_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// South Africa province color palettes — from provincial coat of arms colors\n// ---------------------------------------------------------------------------\n\nexport const SOUTH_AFRICA_PROVINCE_PALETTES: Record<string, SubdivisionColorPalette> = {\n EC: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n NP: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n NL: { primary: '#003da5', secondary: '#009640', text: 'light' },\n WC: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n NC: { primary: '#d35400', secondary: '#009640', text: 'light' },\n NW: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n FS: { primary: '#ff6600', secondary: '#003da5', text: 'light' },\n GT: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n MP: { primary: '#009640', secondary: '#003da5', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// South Africa accent mappings (accent name -> Tailwind classes via registry)\n// ---------------------------------------------------------------------------\n\nexport const SOUTH_AFRICA_ACCENT_MAP: Record<string, string> = {\n EC: 'green',\n NP: 'emerald',\n NL: 'blue',\n WC: 'indigo',\n NC: 'orange',\n NW: 'teal',\n FS: 'orange',\n GT: 'blue',\n MP: 'green',\n}\n\n// All valid South African province codes\nconst VALID_CODES = Object.keys(SOUTH_AFRICA_PROVINCE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const ZA_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: SOUTH_AFRICA_PROVINCE_PALETTES,\n accents: SOUTH_AFRICA_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/za/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// South Africa province center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const SOUTH_AFRICA_PROVINCE_COORDINATES: Record<string, [number, number]> = {\n EC: [26.5, -32.0],\n NP: [29.5, -23.5],\n NL: [30.5, -29.0],\n WC: [19.5, -33.5],\n NC: [21.0, -29.0],\n NW: [26.0, -26.0],\n FS: [27.0, -29.0],\n GT: [28.1, -26.2],\n MP: [30.0, -25.5],\n}\n\nexport const SOUTH_AFRICA_MAP_CENTER: [number, number] = [25.0, -29.0]\n\n// ---------------------------------------------------------------------------\n// South Africa macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const SOUTH_AFRICA_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'coastal',\n label: '',\n codes: ['EC', 'NL', 'WC'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'interior',\n label: '',\n codes: ['GT', 'MP', 'NW', 'FS', 'NP', 'NC'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'ZA'\n// ---------------------------------------------------------------------------\n\nexport const getSouthAfricaFlagUrl = (code: string) => getSubdivisionFlagUrl('ZA', code)\nexport const getSouthAfricaHexColor = (code: string) => getSubdivisionHexColor('ZA', code)\nexport const getSouthAfricaPalette = (code: string) => getSubdivisionPalette('ZA', code)\nexport const getSouthAfricaGradient = (code: string, direction?: string) => getSubdivisionGradient('ZA', code, direction)\nexport const getSouthAfricaColors = (code: string) => getSubdivisionColors('ZA', code)\nexport const getSouthAfricaAccent = (code: string) => getSubdivisionAccent('ZA', code)\nexport const isValidSouthAfricaProvince = (code: string) => isValidSubdivision('ZA', code)\n","/**\n * South Korea Subdivision Theme Data\n * ===================================\n *\n * Reusable South Korean province/city palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('KR', KR_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// South Korea province/city color palettes — from regional identity colors\n// ---------------------------------------------------------------------------\n\nexport const SOUTH_KOREA_PROVINCE_PALETTES: Record<string, SubdivisionColorPalette> = {\n KG: { primary: '#003da5', secondary: '#009640', text: 'light' },\n CB: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n KN: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n SJ: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n PU: { primary: '#0038a8', secondary: '#f0f0f0', text: 'light' },\n NG: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n SE: { primary: '#6b2fa0', secondary: '#f0f0f0', text: 'light' },\n TJ: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n UL: { primary: '#009640', secondary: '#003da5', text: 'light' },\n IN: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n KW: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n GN: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n CJ: { primary: '#ff6f00', secondary: '#003da5', text: 'light' },\n GB: { primary: '#003da5', secondary: '#009640', text: 'light' },\n SO: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n TG: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n KJ: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// South Korea accent mappings\n// ---------------------------------------------------------------------------\n\nexport const SOUTH_KOREA_ACCENT_MAP: Record<string, string> = {\n KG: 'blue',\n CB: 'green',\n KN: 'red',\n SJ: 'green',\n PU: 'blue',\n NG: 'red',\n SE: 'purple',\n TJ: 'blue',\n UL: 'emerald',\n IN: 'blue',\n KW: 'green',\n GN: 'yellow',\n CJ: 'orange',\n GB: 'indigo',\n SO: 'red',\n TG: 'blue',\n KJ: 'green',\n}\n\n// All valid South Korean province/city codes\nconst VALID_CODES = Object.keys(SOUTH_KOREA_PROVINCE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const KR_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: SOUTH_KOREA_PROVINCE_PALETTES,\n accents: SOUTH_KOREA_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/kr/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// South Korea province/city center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const SOUTH_KOREA_PROVINCE_COORDINATES: Record<string, [number, number]> = {\n SO: [127.0, 37.6],\n IN: [126.7, 37.5],\n KG: [127.0, 37.3],\n KW: [128.2, 37.8],\n TJ: [127.4, 36.35],\n SE: [127.0, 36.6],\n GB: [127.5, 36.8],\n GN: [126.8, 36.5],\n PU: [129.1, 35.2],\n TG: [128.6, 35.9],\n UL: [129.3, 35.5],\n KN: [128.5, 35.3],\n NG: [128.8, 36.4],\n KJ: [126.9, 35.2],\n SJ: [126.7, 35.0],\n CB: [127.0, 35.5],\n CJ: [126.5, 33.4],\n}\n\nexport const SOUTH_KOREA_MAP_CENTER: [number, number] = [127.5, 36.5]\n\n// ---------------------------------------------------------------------------\n// South Korea macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const SOUTH_KOREA_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'capital',\n label: '',\n codes: ['SO', 'IN', 'KG'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'chungcheong',\n label: '',\n codes: ['TJ', 'SE', 'GB', 'GN'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'gyeongsang',\n label: '',\n codes: ['PU', 'TG', 'UL', 'KN', 'NG'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'jeolla',\n label: '',\n codes: ['KJ', 'SJ', 'CB'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'gangwon-jeju',\n label: '',\n codes: ['KW', 'CJ'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'KR'\n// ---------------------------------------------------------------------------\n\nexport const getSouthKoreaFlagUrl = (code: string) => getSubdivisionFlagUrl('KR', code)\nexport const getSouthKoreaHexColor = (code: string) => getSubdivisionHexColor('KR', code)\nexport const getSouthKoreaPalette = (code: string) => getSubdivisionPalette('KR', code)\nexport const getSouthKoreaGradient = (code: string, direction?: string) => getSubdivisionGradient('KR', code, direction)\nexport const getSouthKoreaColors = (code: string) => getSubdivisionColors('KR', code)\nexport const getSouthKoreaAccent = (code: string) => getSubdivisionAccent('KR', code)\nexport const isValidSouthKoreaProvince = (code: string) => isValidSubdivision('KR', code)\n","/**\n * Indonesia Subdivision Theme Data\n * =================================\n *\n * Reusable Indonesian province palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('ID', ID_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Indonesia province color palettes — from regional identity colors\n// ---------------------------------------------------------------------------\n\nexport const INDONESIA_PROVINCE_PALETTES: Record<string, SubdivisionColorPalette> = {\n AC: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n JT: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n BE: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n BT: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n KB: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n BB: { primary: '#003da5', secondary: '#009640', text: 'light' },\n BA: { primary: '#ff6f00', secondary: '#f0f0f0', text: 'light' },\n JI: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n KS: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n NT: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n SE: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n KR: { primary: '#003da5', secondary: '#009640', text: 'light' },\n IB: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n SU: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n RI: { primary: '#009640', secondary: '#003da5', text: 'light' },\n SW: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n KU: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n LA: { primary: '#6b2fa0', secondary: '#ffd700', text: 'light' },\n LP: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n SB: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n MA: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n NB: { primary: '#ff6f00', secondary: '#003da5', text: 'light' },\n SG: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n ST: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n PA: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n JR: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n KI: { primary: '#ffd700', secondary: '#009640', text: 'dark' },\n JK: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n GO: { primary: '#003da5', secondary: '#009640', text: 'light' },\n YO: { primary: '#6b2fa0', secondary: '#f0f0f0', text: 'light' },\n SL: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n SR: { primary: '#009640', secondary: '#003da5', text: 'light' },\n JA: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n KT: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Indonesia accent mappings\n// ---------------------------------------------------------------------------\n\nexport const INDONESIA_ACCENT_MAP: Record<string, string> = {\n AC: 'green', JT: 'red', BE: 'blue', BT: 'green', KB: 'red',\n BB: 'blue', BA: 'orange', JI: 'red', KS: 'yellow', NT: 'green',\n SE: 'red', KR: 'blue', IB: 'green', SU: 'blue', RI: 'green',\n SW: 'blue', KU: 'green', LA: 'purple', LP: 'red', SB: 'red', MA: 'blue',\n NB: 'orange', SG: 'green', ST: 'red', PA: 'emerald', JR: 'blue',\n KI: 'yellow', JK: 'red', GO: 'blue', YO: 'purple', SL: 'red',\n SR: 'green', JA: 'blue', KT: 'red',\n}\n\n// All valid Indonesian province codes\nconst VALID_CODES = Object.keys(INDONESIA_PROVINCE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const ID_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: INDONESIA_PROVINCE_PALETTES,\n accents: INDONESIA_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/id/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Indonesia province center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const INDONESIA_PROVINCE_COORDINATES: Record<string, [number, number]> = {\n AC: [96.5, 4.7],\n SU: [99.0, 2.5],\n SB: [100.4, -0.7],\n RI: [102.2, 0.5],\n JA: [103.6, -1.6],\n SL: [104.7, -3.3],\n BE: [102.3, -3.8],\n LA: [105.0, -4.8],\n LP: [105.3, -5.0],\n BB: [106.4, -2.7],\n KR: [104.5, 0.9],\n JK: [106.8, -6.2],\n JR: [107.6, -6.9],\n BT: [106.2, -6.4],\n JT: [110.4, -7.2],\n YO: [110.4, -7.8],\n JI: [112.7, -7.5],\n BA: [115.1, -8.4],\n NB: [117.5, -8.7],\n NT: [121.0, -9.5],\n KB: [109.5, 0.0],\n KS: [115.4, -3.3],\n KT: [113.9, -1.7],\n KI: [116.4, 0.5],\n KU: [116.5, 2.5],\n SW: [124.8, 1.2],\n ST: [121.6, -1.4],\n SE: [120.5, -3.5],\n SG: [122.0, -4.0],\n GO: [122.5, 0.5],\n SR: [119.4, -2.7],\n MA: [128.2, -3.7],\n PA: [138.5, -4.3],\n IB: [134.0, -1.5],\n}\n\nexport const INDONESIA_MAP_CENTER: [number, number] = [118.0, -2.5]\n\n// ---------------------------------------------------------------------------\n// Indonesia macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const INDONESIA_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'java',\n label: '',\n codes: ['JR', 'JT', 'JI', 'JK', 'YO', 'BT'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'sumatra',\n label: '',\n codes: ['AC', 'SU', 'SB', 'RI', 'JA', 'SL', 'BE', 'LA', 'BB', 'KR'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'kalimantan',\n label: '',\n codes: ['KB', 'KS', 'KT', 'KI', 'KU'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'sulawesi',\n label: '',\n codes: ['SW', 'ST', 'SE', 'SG', 'GO', 'SR'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'papua-nusa-tenggara',\n label: '',\n codes: ['PA', 'IB', 'NT', 'NB', 'BA', 'MA', 'LA'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'ID'\n// ---------------------------------------------------------------------------\n\nexport const getIndonesiaFlagUrl = (code: string) => getSubdivisionFlagUrl('ID', code)\nexport const getIndonesiaHexColor = (code: string) => getSubdivisionHexColor('ID', code)\nexport const getIndonesiaPalette = (code: string) => getSubdivisionPalette('ID', code)\nexport const getIndonesiaGradient = (code: string, direction?: string) => getSubdivisionGradient('ID', code, direction)\nexport const getIndonesiaColors = (code: string) => getSubdivisionColors('ID', code)\nexport const getIndonesiaAccent = (code: string) => getSubdivisionAccent('ID', code)\nexport const isValidIndonesiaProvince = (code: string) => isValidSubdivision('ID', code)\n","/**\n * Thailand Subdivision Theme Data\n * ================================\n *\n * Reusable Thai province palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('TH', TH_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Thailand province color palettes — from regional identity colors\n// ---------------------------------------------------------------------------\n\nexport const THAILAND_PROVINCE_PALETTES: Record<string, SubdivisionColorPalette> = {\n BM: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n PT: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n NO: { primary: '#003da5', secondary: '#009640', text: 'light' },\n SP: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n SS: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n SM: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n PE: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n CC: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n NN: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n PA: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n AT: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n SB: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n CN: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n SH: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n NP: { primary: '#003da5', secondary: '#009640', text: 'light' },\n SR: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n LB: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n CM: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n CR: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n LN: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n LG: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n PR: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n PY: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n MH: { primary: '#6b2fa0', secondary: '#f0f0f0', text: 'light' },\n NA: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n SO: { primary: '#003da5', secondary: '#009640', text: 'light' },\n UD: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n PS: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n KP: { primary: '#009640', secondary: '#003da5', text: 'light' },\n PC: { primary: '#ffd700', secondary: '#009640', text: 'dark' },\n PH: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n KK: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n NR: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n UR: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n SU: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n BR: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n KL: { primary: '#003da5', secondary: '#009640', text: 'light' },\n RE: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n SI: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n LE: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n NK: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n AC: { primary: '#6b2fa0', secondary: '#ffd700', text: 'light' },\n MD: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n SN: { primary: '#009640', secondary: '#003da5', text: 'light' },\n NF: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n BK: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n YS: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n MS: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n UN: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n NB: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n CY: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n CB: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n RY: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n SK: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n TT: { primary: '#003da5', secondary: '#009640', text: 'light' },\n CT: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n SG: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n PU: { primary: '#ff6f00', secondary: '#003da5', text: 'light' },\n ST: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n KR: { primary: '#003da5', secondary: '#009640', text: 'light' },\n SA: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n TG: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n PL: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n NT: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n NW: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n PI: { primary: '#ffd700', secondary: '#009640', text: 'dark' },\n YL: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n RN: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n CP: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n PK: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n KN: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n TK: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n UT: { primary: '#003da5', secondary: '#009640', text: 'light' },\n NS: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n RT: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n PB: { primary: '#009640', secondary: '#003da5', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Thailand accent mappings\n// ---------------------------------------------------------------------------\n\nexport const THAILAND_ACCENT_MAP: Record<string, string> = {\n BM: 'red', PT: 'blue', NO: 'blue', SP: 'green', SS: 'red',\n SM: 'blue', PE: 'green', CC: 'yellow', NN: 'blue', PA: 'red',\n AT: 'green', SB: 'blue', CN: 'green', SH: 'red', NP: 'blue',\n SR: 'yellow', LB: 'blue', CM: 'red', CR: 'green', LN: 'blue',\n LG: 'red', PR: 'green', PY: 'blue', MH: 'purple', NA: 'green',\n SO: 'blue', UD: 'red', PS: 'blue', KP: 'green', PC: 'yellow',\n PH: 'blue', KK: 'red', NR: 'blue', UR: 'green', SU: 'red',\n BR: 'yellow', KL: 'blue', RE: 'green', SI: 'red', LE: 'blue',\n NK: 'green', AC: 'purple', MD: 'blue', SN: 'green', NF: 'red',\n BK: 'blue', YS: 'green', MS: 'yellow', UN: 'red', NB: 'green',\n CY: 'blue', CB: 'red', RY: 'blue', SK: 'green', TT: 'blue',\n CT: 'red', SG: 'blue', PU: 'orange', ST: 'green', KR: 'blue',\n SA: 'green', TG: 'red', PL: 'blue', NT: 'red', NW: 'green',\n PI: 'yellow', YL: 'blue', RN: 'green', CP: 'red', PK: 'blue',\n KN: 'green', TK: 'red', UT: 'blue', NS: 'yellow', RT: 'blue',\n PB: 'emerald',\n}\n\n// All valid Thai province codes\nconst VALID_CODES = Object.keys(THAILAND_PROVINCE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const TH_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: THAILAND_PROVINCE_PALETTES,\n accents: THAILAND_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/th/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Thailand province center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const THAILAND_PROVINCE_COORDINATES: Record<string, [number, number]> = {\n BM: [100.5, 13.8],\n CM: [98.9, 18.8],\n CB: [101.0, 13.4],\n KK: [102.8, 16.4],\n NR: [102.1, 14.9],\n SG: [100.5, 7.2],\n PU: [98.4, 7.9],\n ST: [99.0, 9.1],\n CR: [99.8, 19.9],\n PT: [100.5, 14.0],\n NO: [100.5, 13.9],\n SP: [100.6, 13.6],\n SS: [100.3, 13.5],\n SM: [100.0, 13.4],\n PE: [100.0, 13.1],\n CC: [101.1, 13.7],\n NN: [101.2, 14.2],\n PA: [100.6, 14.4],\n AT: [100.5, 14.6],\n SB: [100.4, 14.9],\n CN: [100.1, 15.2],\n SH: [100.1, 14.8],\n NP: [100.1, 13.8],\n SR: [100.9, 14.5],\n LB: [100.6, 14.8],\n LN: [99.0, 18.6],\n LG: [99.5, 18.3],\n PR: [100.1, 18.1],\n PY: [99.7, 19.2],\n MH: [98.0, 19.3],\n NA: [100.8, 18.8],\n SO: [99.8, 17.0],\n UD: [100.1, 17.6],\n PS: [100.3, 16.8],\n KP: [99.5, 16.5],\n PC: [100.3, 16.4],\n PH: [101.2, 16.4],\n NF: [104.8, 17.4],\n UR: [104.9, 15.3],\n SU: [103.5, 14.9],\n BR: [103.1, 14.9],\n KL: [103.5, 16.4],\n RE: [103.7, 16.1],\n SI: [104.3, 15.1],\n LE: [101.7, 17.5],\n NK: [102.7, 17.9],\n AC: [104.6, 15.9],\n MD: [104.6, 16.5],\n SN: [104.1, 17.2],\n BK: [103.6, 18.4],\n YS: [104.1, 15.8],\n MS: [103.3, 16.2],\n UN: [102.8, 17.4],\n NB: [102.4, 17.2],\n CY: [102.0, 15.8],\n RY: [101.3, 12.7],\n SK: [102.2, 13.8],\n TT: [102.5, 12.2],\n CT: [102.1, 12.6],\n KR: [98.9, 8.1],\n SA: [100.1, 6.6],\n TG: [99.7, 7.6],\n PL: [100.1, 7.6],\n NT: [100.0, 8.4],\n NW: [101.8, 6.4],\n PI: [101.3, 6.9],\n YL: [101.3, 6.5],\n RN: [98.6, 9.9],\n CP: [99.2, 10.5],\n PK: [99.8, 11.8],\n KN: [99.5, 14.0],\n TK: [99.0, 16.9],\n UT: [99.7, 15.4],\n NS: [99.5, 15.7],\n RT: [99.8, 13.5],\n PB: [101.4, 14.1],\n}\n\nexport const THAILAND_MAP_CENTER: [number, number] = [101.0, 15.0]\n\n// ---------------------------------------------------------------------------\n// Thailand macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const THAILAND_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'central',\n label: '',\n codes: ['BM', 'PT', 'NO', 'SP', 'SS', 'SM', 'PE', 'CC', 'NN', 'PA', 'AT', 'SB', 'CN', 'SH', 'NP', 'SR', 'LB'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'north',\n label: '',\n codes: ['CM', 'CR', 'LN', 'LG', 'PR', 'PY', 'MH', 'NA', 'SO', 'UD', 'PS', 'KP', 'PC', 'PH'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'northeast',\n label: '',\n codes: ['KK', 'NR', 'UR', 'SU', 'BR', 'KL', 'RE', 'SI', 'LE', 'NK', 'AC', 'MD', 'SN', 'NF', 'BK', 'YS', 'MS', 'UN', 'NB', 'CY'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'east',\n label: '',\n codes: ['CB', 'RY', 'SK', 'TT', 'CT'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'south',\n label: '',\n codes: ['SG', 'PU', 'ST', 'KR', 'SA', 'TG', 'PL', 'NT', 'NW', 'PI', 'YL', 'RN', 'CP', 'PK'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'west',\n label: '',\n codes: ['KN', 'TK', 'UT', 'NS', 'RT', 'PB'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'TH'\n// ---------------------------------------------------------------------------\n\nexport const getThailandFlagUrl = (code: string) => getSubdivisionFlagUrl('TH', code)\nexport const getThailandHexColor = (code: string) => getSubdivisionHexColor('TH', code)\nexport const getThailandPalette = (code: string) => getSubdivisionPalette('TH', code)\nexport const getThailandGradient = (code: string, direction?: string) => getSubdivisionGradient('TH', code, direction)\nexport const getThailandColors = (code: string) => getSubdivisionColors('TH', code)\nexport const getThailandAccent = (code: string) => getSubdivisionAccent('TH', code)\nexport const isValidThailandProvince = (code: string) => isValidSubdivision('TH', code)\n","/**\n * Nigeria Subdivision Theme Data\n * ===============================\n *\n * Reusable Nigerian state palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('NG', NG_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Nigeria state color palettes — from regional identity colors\n// ---------------------------------------------------------------------------\n\nexport const NIGERIA_STATE_PALETTES: Record<string, SubdivisionColorPalette> = {\n RI: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n KT: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n SO: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n ZA: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n YO: { primary: '#003da5', secondary: '#009640', text: 'light' },\n KE: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n AD: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n BO: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n AK: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n AB: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n IM: { primary: '#003da5', secondary: '#009640', text: 'light' },\n BY: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n BE: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n CR: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n TA: { primary: '#ffd700', secondary: '#009640', text: 'dark' },\n KW: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n LA: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n NI: { primary: '#009640', secondary: '#003da5', text: 'light' },\n FC: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n OG: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n ON: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n EK: { primary: '#003da5', secondary: '#009640', text: 'light' },\n OS: { primary: '#6b2fa0', secondary: '#ffd700', text: 'light' },\n OY: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n AN: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n BA: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n GO: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n DE: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n ED: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n EN: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n EB: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n KD: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n KO: { primary: '#003da5', secondary: '#009640', text: 'light' },\n PL: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n NA: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n JI: { primary: '#009640', secondary: '#003da5', text: 'light' },\n KN: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Nigeria accent mappings\n// ---------------------------------------------------------------------------\n\nexport const NIGERIA_ACCENT_MAP: Record<string, string> = {\n RI: 'blue', KT: 'green', SO: 'green', ZA: 'red', YO: 'blue',\n KE: 'green', AD: 'red', BO: 'blue', AK: 'red', AB: 'green',\n IM: 'blue', BY: 'blue', BE: 'green', CR: 'red', TA: 'yellow',\n KW: 'blue', LA: 'red', NI: 'green', FC: 'blue', OG: 'green',\n ON: 'red', EK: 'blue', OS: 'purple', OY: 'red', AN: 'green',\n BA: 'blue', GO: 'green', DE: 'red', ED: 'blue', EN: 'green',\n EB: 'yellow', KD: 'red', KO: 'blue', PL: 'green', NA: 'blue',\n JI: 'green', KN: 'red',\n}\n\n// All valid Nigerian state codes\nconst VALID_CODES = Object.keys(NIGERIA_STATE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const NG_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: NIGERIA_STATE_PALETTES,\n accents: NIGERIA_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/ng/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Nigeria state center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const NIGERIA_STATE_COORDINATES: Record<string, [number, number]> = {\n KT: [7.6, 13.0],\n SO: [5.2, 13.1],\n ZA: [6.3, 12.2],\n KE: [4.2, 12.5],\n KD: [7.4, 10.5],\n KN: [8.5, 12.0],\n JI: [9.4, 12.2],\n AD: [12.4, 9.3],\n BO: [13.2, 11.8],\n YO: [11.7, 12.0],\n BA: [9.8, 10.3],\n GO: [11.2, 10.3],\n TA: [11.4, 8.0],\n KW: [4.5, 8.5],\n NI: [6.0, 9.9],\n FC: [7.5, 9.1],\n KO: [6.7, 7.8],\n PL: [9.2, 9.2],\n NA: [8.5, 8.5],\n BE: [8.8, 7.3],\n LA: [3.4, 6.5],\n OG: [3.3, 7.0],\n ON: [5.1, 7.3],\n EK: [5.3, 7.6],\n OS: [4.5, 7.5],\n OY: [3.9, 7.8],\n AB: [7.5, 5.4],\n AN: [6.9, 6.2],\n EB: [8.1, 6.3],\n EN: [7.5, 6.4],\n IM: [7.1, 5.5],\n AK: [7.9, 5.0],\n BY: [5.9, 4.7],\n CR: [8.3, 5.9],\n DE: [5.9, 5.5],\n ED: [5.6, 6.6],\n RI: [6.9, 4.8],\n}\n\nexport const NIGERIA_MAP_CENTER: [number, number] = [8.0, 9.5]\n\n// ---------------------------------------------------------------------------\n// Nigeria macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const NIGERIA_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'north-west',\n label: '',\n codes: ['KT', 'SO', 'ZA', 'KE', 'KD', 'KN', 'JI'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'north-east',\n label: '',\n codes: ['AD', 'BO', 'YO', 'BA', 'GO', 'TA'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'north-central',\n label: '',\n codes: ['KW', 'NI', 'FC', 'KO', 'PL', 'NA', 'BE'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'south-west',\n label: '',\n codes: ['LA', 'OG', 'ON', 'EK', 'OS', 'OY'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'south-east',\n label: '',\n codes: ['AB', 'AN', 'EB', 'EN', 'IM'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n {\n key: 'south-south',\n label: '',\n codes: ['AK', 'BY', 'CR', 'DE', 'ED', 'RI'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'NG'\n// ---------------------------------------------------------------------------\n\nexport const getNigeriaFlagUrl = (code: string) => getSubdivisionFlagUrl('NG', code)\nexport const getNigeriaHexColor = (code: string) => getSubdivisionHexColor('NG', code)\nexport const getNigeriaPalette = (code: string) => getSubdivisionPalette('NG', code)\nexport const getNigeriaGradient = (code: string, direction?: string) => getSubdivisionGradient('NG', code, direction)\nexport const getNigeriaColors = (code: string) => getSubdivisionColors('NG', code)\nexport const getNigeriaAccent = (code: string) => getSubdivisionAccent('NG', code)\nexport const isValidNigeriaState = (code: string) => isValidSubdivision('NG', code)\n","/**\n * Egypt Subdivision Theme Data\n * ============================\n *\n * Reusable Egyptian governorate palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('EG', EG_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Egypt governorate color palettes — from regional identity colors\n// ---------------------------------------------------------------------------\n\nexport const EGYPT_GOVERNORATE_PALETTES: Record<string, SubdivisionColorPalette> = {\n BA: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n JS: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n UQ: { primary: '#6b2fa0', secondary: '#ffd700', text: 'light' },\n IS: { primary: '#003da5', secondary: '#009640', text: 'light' },\n GH: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n MF: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n QH: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n QL: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n SQ: { primary: '#009640', secondary: '#003da5', text: 'light' },\n SS: { primary: '#ffd700', secondary: '#009640', text: 'dark' },\n SW: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n DQ: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n BS: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n DT: { primary: '#003da5', secondary: '#009640', text: 'light' },\n BH: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n MT: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n IK: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n JZ: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n FY: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n WJ: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n MN: { primary: '#003da5', secondary: '#009640', text: 'light' },\n BN: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n KS: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n AT: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n AN: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n QN: { primary: '#009640', secondary: '#003da5', text: 'light' },\n SJ: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Egypt accent mappings\n// ---------------------------------------------------------------------------\n\nexport const EGYPT_ACCENT_MAP: Record<string, string> = {\n BA: 'red', JS: 'yellow', UQ: 'purple', IS: 'blue', GH: 'green',\n MF: 'blue', QH: 'red', QL: 'blue', SQ: 'green', SS: 'yellow',\n SW: 'blue', DQ: 'green', BS: 'red', DT: 'blue', BH: 'green',\n MT: 'yellow', IK: 'blue', JZ: 'red', FY: 'green', WJ: 'yellow',\n MN: 'blue', BN: 'green', KS: 'blue', AT: 'red', AN: 'blue',\n QN: 'green', SJ: 'red',\n}\n\n// All valid Egyptian governorate codes\nconst VALID_CODES = Object.keys(EGYPT_GOVERNORATE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const EG_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: EGYPT_GOVERNORATE_PALETTES,\n accents: EGYPT_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/eg/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Egypt governorate center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const EGYPT_GOVERNORATE_COORDINATES: Record<string, [number, number]> = {\n QH: [31.2, 30.1],\n JZ: [31.2, 29.9],\n QL: [31.2, 30.3],\n IK: [29.9, 31.2],\n BH: [30.5, 31.0],\n GH: [31.0, 30.9],\n MF: [31.0, 30.5],\n DQ: [31.4, 31.0],\n SQ: [31.5, 30.6],\n KS: [31.1, 31.3],\n DT: [31.7, 31.4],\n BS: [32.3, 31.3],\n IS: [32.3, 30.6],\n SW: [32.5, 30.0],\n SS: [33.5, 31.0],\n JS: [33.8, 29.0],\n BA: [33.5, 26.0],\n MN: [30.8, 28.1],\n FY: [30.8, 29.3],\n BN: [31.1, 29.1],\n AT: [31.2, 27.2],\n SJ: [31.6, 26.6],\n QN: [32.7, 26.2],\n UQ: [32.6, 25.7],\n AN: [32.9, 24.1],\n MT: [27.0, 31.3],\n WJ: [29.0, 25.5],\n}\n\nexport const EGYPT_MAP_CENTER: [number, number] = [30.0, 27.0]\n\n// ---------------------------------------------------------------------------\n// Egypt macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const EGYPT_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'cairo',\n label: '',\n codes: ['QH', 'JZ', 'QL'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'delta',\n label: '',\n codes: ['GH', 'MF', 'SQ', 'DQ', 'BS', 'DT', 'BH', 'KS', 'IK'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'canal',\n label: '',\n codes: ['IS', 'SW', 'SS', 'JS', 'BA'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'upper',\n label: '',\n codes: ['MN', 'AT', 'QN', 'AN', 'UQ', 'FY', 'BN', 'SJ'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'western',\n label: '',\n codes: ['MT', 'WJ'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'EG'\n// ---------------------------------------------------------------------------\n\nexport const getEgyptFlagUrl = (code: string) => getSubdivisionFlagUrl('EG', code)\nexport const getEgyptHexColor = (code: string) => getSubdivisionHexColor('EG', code)\nexport const getEgyptPalette = (code: string) => getSubdivisionPalette('EG', code)\nexport const getEgyptGradient = (code: string, direction?: string) => getSubdivisionGradient('EG', code, direction)\nexport const getEgyptColors = (code: string) => getSubdivisionColors('EG', code)\nexport const getEgyptAccent = (code: string) => getSubdivisionAccent('EG', code)\nexport const isValidEgyptGovernorate = (code: string) => isValidSubdivision('EG', code)\n","/**\n * Turkey Subdivision Theme Data\n * =============================\n *\n * Reusable Turkish province palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('TR', TR_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Turkey province color palettes — from regional identity colors\n// ---------------------------------------------------------------------------\n\nexport const TURKEY_PROVINCE_PALETTES: Record<string, SubdivisionColorPalette> = {\n IB: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n BU: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n BK: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n CK: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n TG: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n ED: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n KL: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n SK: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n YL: { primary: '#003da5', secondary: '#009640', text: 'light' },\n KC: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n BL: { primary: '#003da5', secondary: '#009640', text: 'light' },\n DU: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n BC: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n IZ: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n AY: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n MN: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n MG: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n DN: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n AF: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n KU: { primary: '#009640', secondary: '#003da5', text: 'light' },\n US: { primary: '#ffd700', secondary: '#009640', text: 'dark' },\n AL: { primary: '#ff6f00', secondary: '#003da5', text: 'light' },\n IC: { primary: '#003da5', secondary: '#ff6f00', text: 'light' },\n HT: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n AA: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n AD: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n KM: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n IP: { primary: '#009640', secondary: '#003da5', text: 'light' },\n BD: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n OS: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n AN: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n KO: { primary: '#003da5', secondary: '#009640', text: 'light' },\n KY: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n ES: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n SV: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n YZ: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n KK: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n CI: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n KH: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n AK: { primary: '#003da5', secondary: '#009640', text: 'light' },\n NG: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n NV: { primary: '#6b2fa0', secondary: '#f0f0f0', text: 'light' },\n KR: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n TB: { primary: '#009640', secondary: '#003da5', text: 'light' },\n RI: { primary: '#003da5', secondary: '#009640', text: 'light' },\n AV: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n GI: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n OR: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n SS: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n AM: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n TT: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n SP: { primary: '#ffd700', secondary: '#009640', text: 'dark' },\n CM: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n ZO: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n KB: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n BR: { primary: '#009640', secondary: '#003da5', text: 'light' },\n KS: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n GU: { primary: '#003da5', secondary: '#009640', text: 'light' },\n BB: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n EM: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n ER: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n EN: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n EG: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n ML: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n TC: { primary: '#6b2fa0', secondary: '#ffd700', text: 'light' },\n BG: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n MS: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n DY: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n SU: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n MR: { primary: '#009640', secondary: '#003da5', text: 'light' },\n SR: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n SI: { primary: '#003da5', secondary: '#009640', text: 'light' },\n HK: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n VA: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n KA: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n IG: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n AR: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n AG: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n BT: { primary: '#003da5', secondary: '#009640', text: 'light' },\n KI: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n BM: { primary: '#6b2fa0', secondary: '#c8102e', text: 'light' },\n GA: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Turkey accent mappings\n// ---------------------------------------------------------------------------\n\nexport const TURKEY_ACCENT_MAP: Record<string, string> = {\n IB: 'red', BU: 'green', BK: 'blue', CK: 'green', TG: 'red',\n ED: 'blue', KL: 'green', SK: 'yellow', YL: 'blue', KC: 'red',\n BL: 'blue', DU: 'green', BC: 'yellow', IZ: 'red', AY: 'blue',\n MN: 'green', MG: 'blue', DN: 'red', AF: 'blue', KU: 'green',\n US: 'yellow', AL: 'orange', IC: 'blue', HT: 'red', AA: 'green',\n AD: 'blue', KM: 'red', IP: 'green', BD: 'blue', OS: 'red',\n AN: 'red', KO: 'blue', KY: 'red', ES: 'blue', SV: 'green',\n YZ: 'yellow', KK: 'blue', CI: 'green', KH: 'red', AK: 'blue',\n NG: 'green', NV: 'purple', KR: 'blue', TB: 'green', RI: 'blue',\n AV: 'red', GI: 'green', OR: 'blue', SS: 'red', AM: 'green',\n TT: 'blue', SP: 'yellow', CM: 'blue', ZO: 'red', KB: 'blue',\n BR: 'green', KS: 'red', GU: 'blue', BB: 'green', EM: 'red',\n ER: 'blue', EN: 'green', EG: 'blue', ML: 'red', TC: 'purple',\n BG: 'blue', MS: 'green', DY: 'red', SU: 'blue', MR: 'green',\n SR: 'red', SI: 'blue', HK: 'green', VA: 'blue', KA: 'red',\n IG: 'green', AR: 'blue', AG: 'red', BT: 'blue', KI: 'green',\n BM: 'purple', GA: 'red',\n}\n\n// All valid Turkish province codes\nconst VALID_CODES = Object.keys(TURKEY_PROVINCE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const TR_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: TURKEY_PROVINCE_PALETTES,\n accents: TURKEY_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/tr/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Turkey province center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const TURKEY_PROVINCE_COORDINATES: Record<string, [number, number]> = {\n IB: [29.0, 41.0],\n BU: [29.0, 40.2],\n BK: [27.9, 39.6],\n CK: [26.4, 40.2],\n TG: [27.5, 41.2],\n ED: [26.6, 41.7],\n KL: [27.2, 41.7],\n SK: [30.4, 40.7],\n YL: [29.3, 40.7],\n KC: [29.9, 40.8],\n BL: [31.6, 40.7],\n DU: [31.2, 40.8],\n BC: [30.0, 40.0],\n IZ: [27.1, 38.4],\n AY: [27.8, 37.8],\n MN: [27.4, 38.6],\n MG: [28.4, 37.2],\n DN: [29.1, 37.8],\n AF: [30.5, 38.7],\n KU: [29.9, 39.4],\n US: [29.4, 38.7],\n AL: [30.7, 36.9],\n IC: [34.6, 36.8],\n HT: [36.4, 36.4],\n AA: [35.3, 37.0],\n AD: [38.3, 37.8],\n KM: [36.9, 37.6],\n IP: [30.3, 37.7],\n BD: [30.3, 37.7],\n OS: [36.2, 37.1],\n AN: [32.9, 39.9],\n KO: [32.5, 37.9],\n KY: [35.5, 38.7],\n ES: [30.5, 39.8],\n SV: [37.0, 39.8],\n YZ: [34.8, 39.8],\n KK: [33.5, 39.8],\n CI: [33.6, 40.6],\n KH: [34.2, 39.1],\n AK: [34.0, 38.4],\n NG: [34.7, 37.9],\n NV: [34.7, 38.6],\n KR: [33.2, 37.2],\n TB: [39.7, 41.0],\n RI: [40.5, 41.0],\n AV: [41.8, 41.2],\n GI: [38.4, 40.9],\n OR: [37.9, 41.0],\n SS: [36.3, 41.3],\n AM: [35.8, 40.7],\n TT: [36.6, 40.3],\n SP: [35.0, 42.0],\n CM: [34.9, 40.5],\n ZO: [31.8, 41.4],\n KB: [32.6, 41.2],\n BR: [32.3, 41.6],\n KS: [33.8, 41.4],\n GU: [39.5, 40.4],\n BB: [40.2, 40.3],\n EM: [41.3, 39.9],\n ER: [39.5, 39.9],\n EN: [39.5, 39.5],\n EG: [38.7, 38.7],\n ML: [38.3, 38.3],\n TC: [39.5, 39.1],\n BG: [40.5, 39.0],\n MS: [41.5, 38.7],\n DY: [40.2, 37.9],\n SU: [39.0, 37.2],\n MR: [40.7, 37.3],\n SR: [42.5, 37.4],\n SI: [42.0, 37.9],\n HK: [43.7, 37.6],\n VA: [43.4, 38.5],\n KA: [43.1, 40.6],\n IG: [44.0, 39.9],\n AR: [42.7, 41.1],\n AG: [43.9, 39.7],\n BT: [42.1, 38.4],\n KI: [37.1, 36.7],\n BM: [41.1, 37.9],\n GA: [37.4, 37.1],\n}\n\nexport const TURKEY_MAP_CENTER: [number, number] = [35.0, 39.0]\n\n// ---------------------------------------------------------------------------\n// Turkey macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const TURKEY_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'marmara',\n label: '',\n codes: ['IB', 'BU', 'BK', 'CK', 'TG', 'ED', 'KL', 'SK', 'YL', 'KC', 'BL', 'DU', 'BC'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'aegean',\n label: '',\n codes: ['IZ', 'AY', 'MN', 'MG', 'DN', 'AF', 'KU', 'US'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'mediterranean',\n label: '',\n codes: ['AL', 'IC', 'HT', 'AA', 'AD', 'KM', 'IP', 'BD', 'OS'],\n gradient: 'from-orange-500/15 to-amber-500/10 dark:from-orange-500/20 dark:to-amber-500/15',\n iconColor: 'text-orange-600 dark:text-orange-400',\n },\n {\n key: 'central',\n label: '',\n codes: ['AN', 'KO', 'KY', 'ES', 'SV', 'YZ', 'KK', 'CI', 'KH', 'AK', 'NG', 'NV', 'KR'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'black-sea',\n label: '',\n codes: ['TB', 'RI', 'AV', 'GI', 'OR', 'SS', 'AM', 'TT', 'SP', 'CM', 'ZO', 'KB', 'BR', 'KS', 'GU', 'BB'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'eastern',\n label: '',\n codes: ['EM', 'ER', 'EN', 'EG', 'ML', 'TC', 'BG', 'MS', 'DY', 'SU', 'MR', 'SR', 'SI', 'HK', 'VA', 'KA', 'IG', 'AR', 'AG', 'BT', 'KI', 'BM', 'GA'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'TR'\n// ---------------------------------------------------------------------------\n\nexport const getTurkeyFlagUrl = (code: string) => getSubdivisionFlagUrl('TR', code)\nexport const getTurkeyHexColor = (code: string) => getSubdivisionHexColor('TR', code)\nexport const getTurkeyPalette = (code: string) => getSubdivisionPalette('TR', code)\nexport const getTurkeyGradient = (code: string, direction?: string) => getSubdivisionGradient('TR', code, direction)\nexport const getTurkeyColors = (code: string) => getSubdivisionColors('TR', code)\nexport const getTurkeyAccent = (code: string) => getSubdivisionAccent('TR', code)\nexport const isValidTurkeyProvince = (code: string) => isValidSubdivision('TR', code)\n","/**\n * Poland Subdivision Theme Data\n * =============================\n *\n * Reusable Polish voivodeship palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('PL', PL_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Poland voivodeship color palettes — from regional coat of arms colors\n// ---------------------------------------------------------------------------\n\nexport const POLAND_VOIVODESHIP_PALETTES: Record<string, SubdivisionColorPalette> = {\n LD: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n MZ: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n SK: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n PD: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n LU: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n PK: { primary: '#003da5', secondary: '#009640', text: 'light' },\n OP: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n MA: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n WN: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n PM: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n DS: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n ZP: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n LB: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n WP: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n KP: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n SL: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Poland accent mappings\n// ---------------------------------------------------------------------------\n\nexport const POLAND_ACCENT_MAP: Record<string, string> = {\n LD: 'red',\n MZ: 'red',\n SK: 'blue',\n PD: 'red',\n LU: 'green',\n PK: 'blue',\n OP: 'blue',\n MA: 'red',\n WN: 'green',\n PM: 'yellow',\n DS: 'blue',\n ZP: 'blue',\n LB: 'green',\n WP: 'red',\n KP: 'red',\n SL: 'blue',\n}\n\n// All valid Polish voivodeship codes\nconst VALID_CODES = Object.keys(POLAND_VOIVODESHIP_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const PL_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: POLAND_VOIVODESHIP_PALETTES,\n accents: POLAND_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/pl/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Poland voivodeship center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const POLAND_VOIVODESHIP_COORDINATES: Record<string, [number, number]> = {\n LD: [19.5, 51.8],\n MZ: [20.9, 52.2],\n SK: [20.7, 50.9],\n PD: [23.0, 53.2],\n LU: [22.6, 51.2],\n PK: [22.0, 49.8],\n OP: [17.9, 50.7],\n MA: [20.0, 50.1],\n WN: [20.5, 53.8],\n PM: [18.0, 54.2],\n DS: [16.5, 51.1],\n ZP: [15.5, 53.4],\n LB: [15.5, 52.0],\n WP: [17.0, 52.0],\n KP: [18.6, 53.0],\n SL: [19.0, 50.3],\n}\n\nexport const POLAND_MAP_CENTER: [number, number] = [19.5, 52.0]\n\n// ---------------------------------------------------------------------------\n// Poland macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const POLAND_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'eastern',\n label: '',\n codes: ['LU', 'PD', 'PK', 'SK', 'WN'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'central',\n label: '',\n codes: ['LD', 'MZ', 'MA', 'OP'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'western',\n label: '',\n codes: ['DS', 'LB', 'ZP', 'WP'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'northern',\n label: '',\n codes: ['PM', 'KP'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'southern',\n label: '',\n codes: ['SL'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'PL'\n// ---------------------------------------------------------------------------\n\nexport const getPolandFlagUrl = (code: string) => getSubdivisionFlagUrl('PL', code)\nexport const getPolandHexColor = (code: string) => getSubdivisionHexColor('PL', code)\nexport const getPolandPalette = (code: string) => getSubdivisionPalette('PL', code)\nexport const getPolandGradient = (code: string, direction?: string) => getSubdivisionGradient('PL', code, direction)\nexport const getPolandColors = (code: string) => getSubdivisionColors('PL', code)\nexport const getPolandAccent = (code: string) => getSubdivisionAccent('PL', code)\nexport const isValidPolandVoivodeship = (code: string) => isValidSubdivision('PL', code)\n","/**\n * Sweden Subdivision Theme Data\n * =============================\n *\n * Reusable Swedish county palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('SE', SE_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Sweden county color palettes — from regional coat of arms colors\n// ---------------------------------------------------------------------------\n\nexport const SWEDEN_COUNTY_PALETTES: Record<string, SubdivisionColorPalette> = {\n KA: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n OG: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n NB: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n VN: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n VB: { primary: '#003da5', secondary: '#009640', text: 'light' },\n GT: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n ST: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n UP: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n BL: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n VG: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n KO: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n GV: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n JO: { primary: '#009640', secondary: '#003da5', text: 'light' },\n KR: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n OR: { primary: '#003da5', secondary: '#009640', text: 'light' },\n VM: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n HA: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n SD: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n VR: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n JA: { primary: '#003da5', secondary: '#009640', text: 'light' },\n SN: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n}\n\n// ---------------------------------------------------------------------------\n// Sweden accent mappings\n// ---------------------------------------------------------------------------\n\nexport const SWEDEN_ACCENT_MAP: Record<string, string> = {\n KA: 'blue',\n OG: 'blue',\n NB: 'green',\n VN: 'red',\n VB: 'blue',\n GT: 'yellow',\n ST: 'blue',\n UP: 'red',\n BL: 'blue',\n VG: 'green',\n KO: 'blue',\n GV: 'red',\n JO: 'green',\n KR: 'red',\n OR: 'blue',\n VM: 'yellow',\n HA: 'blue',\n SD: 'green',\n VR: 'red',\n JA: 'blue',\n SN: 'yellow',\n}\n\n// All valid Swedish county codes\nconst VALID_CODES = Object.keys(SWEDEN_COUNTY_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const SE_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: SWEDEN_COUNTY_PALETTES,\n accents: SWEDEN_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/se/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Sweden county center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const SWEDEN_COUNTY_COORDINATES: Record<string, [number, number]> = {\n ST: [18.1, 59.3],\n UP: [17.6, 59.9],\n SD: [17.0, 59.0],\n OG: [15.6, 58.4],\n JO: [14.2, 57.8],\n KR: [14.8, 56.9],\n KA: [16.4, 57.0],\n GT: [18.5, 57.6],\n BL: [15.6, 56.2],\n SN: [13.2, 55.9],\n HA: [12.7, 56.9],\n VG: [12.3, 57.7],\n VR: [13.5, 59.4],\n OR: [15.2, 59.3],\n VM: [16.5, 59.6],\n KO: [14.5, 61.0],\n GV: [16.8, 60.7],\n VN: [17.9, 62.6],\n JA: [14.6, 63.2],\n VB: [19.8, 64.7],\n NB: [20.2, 66.8],\n}\n\nexport const SWEDEN_MAP_CENTER: [number, number] = [16.0, 63.0]\n\n// ---------------------------------------------------------------------------\n// Sweden macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const SWEDEN_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'norrland',\n label: '',\n codes: ['NB', 'VB', 'VN', 'JA', 'GV'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'svealand',\n label: '',\n codes: ['ST', 'UP', 'VM', 'SD', 'OR', 'VR', 'KO'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'gotaland',\n label: '',\n codes: ['VG', 'SN', 'HA', 'JO', 'KR', 'KA', 'OG', 'BL', 'GT'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'SE'\n// ---------------------------------------------------------------------------\n\nexport const getSwedenFlagUrl = (code: string) => getSubdivisionFlagUrl('SE', code)\nexport const getSwedenHexColor = (code: string) => getSubdivisionHexColor('SE', code)\nexport const getSwedenPalette = (code: string) => getSubdivisionPalette('SE', code)\nexport const getSwedenGradient = (code: string, direction?: string) => getSubdivisionGradient('SE', code, direction)\nexport const getSwedenColors = (code: string) => getSubdivisionColors('SE', code)\nexport const getSwedenAccent = (code: string) => getSubdivisionAccent('SE', code)\nexport const isValidSwedenCounty = (code: string) => isValidSubdivision('SE', code)\n","/**\n * Norway Subdivision Theme Data\n * =============================\n *\n * Reusable Norwegian county palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('NO', NO_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Norway county color palettes — from regional coat of arms colors\n// ---------------------------------------------------------------------------\n\nexport const NORWAY_COUNTY_PALETTES: Record<string, SubdivisionColorPalette> = {\n VF: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n TE: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n RO: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n OF: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n OS: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n AK: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n FI: { primary: '#009640', secondary: '#003da5', text: 'light' },\n TD: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n MR: { primary: '#003da5', secondary: '#009640', text: 'light' },\n TR: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n NO: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n BU: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n AG: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n IN: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n VL: { primary: '#003da5', secondary: '#009640', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Norway accent mappings\n// ---------------------------------------------------------------------------\n\nexport const NORWAY_ACCENT_MAP: Record<string, string> = {\n VF: 'blue',\n TE: 'red',\n RO: 'blue',\n OF: 'green',\n OS: 'red',\n AK: 'blue',\n FI: 'green',\n TD: 'red',\n MR: 'blue',\n TR: 'blue',\n NO: 'yellow',\n BU: 'blue',\n AG: 'green',\n IN: 'red',\n VL: 'blue',\n}\n\n// All valid Norwegian county codes\nconst VALID_CODES = Object.keys(NORWAY_COUNTY_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const NO_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: NORWAY_COUNTY_PALETTES,\n accents: NORWAY_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/no/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Norway county center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const NORWAY_COUNTY_COORDINATES: Record<string, [number, number]> = {\n OS: [10.7, 59.9],\n AK: [11.1, 59.7],\n OF: [11.4, 59.3],\n VF: [10.2, 59.2],\n BU: [9.6, 60.0],\n IN: [11.0, 61.0],\n TE: [8.5, 59.2],\n AG: [7.5, 58.3],\n RO: [5.7, 59.0],\n VL: [5.3, 60.4],\n MR: [7.0, 62.5],\n TD: [10.4, 63.4],\n NO: [14.4, 67.3],\n TR: [18.9, 69.6],\n FI: [25.7, 70.1],\n}\n\nexport const NORWAY_MAP_CENTER: [number, number] = [15.0, 65.0]\n\n// ---------------------------------------------------------------------------\n// Norway macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const NORWAY_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'ostlandet',\n label: '',\n codes: ['OS', 'AK', 'OF', 'VF', 'BU', 'IN', 'TE'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'vestlandet',\n label: '',\n codes: ['RO', 'VL', 'MR'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'sorlandet',\n label: '',\n codes: ['AG'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'trondelag',\n label: '',\n codes: ['TD'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n {\n key: 'nord-norge',\n label: '',\n codes: ['NO', 'TR', 'FI'],\n gradient: 'from-purple-500/15 to-fuchsia-500/10 dark:from-purple-500/20 dark:to-fuchsia-500/15',\n iconColor: 'text-purple-600 dark:text-purple-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'NO'\n// ---------------------------------------------------------------------------\n\nexport const getNorwayFlagUrl = (code: string) => getSubdivisionFlagUrl('NO', code)\nexport const getNorwayHexColor = (code: string) => getSubdivisionHexColor('NO', code)\nexport const getNorwayPalette = (code: string) => getSubdivisionPalette('NO', code)\nexport const getNorwayGradient = (code: string, direction?: string) => getSubdivisionGradient('NO', code, direction)\nexport const getNorwayColors = (code: string) => getSubdivisionColors('NO', code)\nexport const getNorwayAccent = (code: string) => getSubdivisionAccent('NO', code)\nexport const isValidNorwayCounty = (code: string) => isValidSubdivision('NO', code)\n","/**\n * Netherlands Subdivision Theme Data\n * ===================================\n *\n * Reusable Dutch province palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('NL', NL_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Netherlands province color palettes — from provincial flag colors\n// ---------------------------------------------------------------------------\n\nexport const NETHERLANDS_PROVINCE_PALETTES: Record<string, SubdivisionColorPalette> = {\n FR: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n GR: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n FL: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n ZE: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n NH: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n ZH: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n DR: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n GE: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n LI: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n OV: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n NB: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n UT: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Netherlands accent mappings\n// ---------------------------------------------------------------------------\n\nexport const NETHERLANDS_ACCENT_MAP: Record<string, string> = {\n FR: 'blue',\n GR: 'green',\n FL: 'blue',\n ZE: 'red',\n NH: 'red',\n ZH: 'blue',\n DR: 'green',\n GE: 'blue',\n LI: 'red',\n OV: 'red',\n NB: 'red',\n UT: 'red',\n}\n\n// All valid Dutch province codes\nconst VALID_CODES = Object.keys(NETHERLANDS_PROVINCE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const NL_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: NETHERLANDS_PROVINCE_PALETTES,\n accents: NETHERLANDS_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/nl/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Netherlands province center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const NETHERLANDS_PROVINCE_COORDINATES: Record<string, [number, number]> = {\n NH: [4.9, 52.5],\n ZH: [4.5, 52.0],\n UT: [5.1, 52.1],\n FL: [5.5, 52.5],\n NB: [5.1, 51.5],\n LI: [5.9, 51.2],\n ZE: [3.8, 51.5],\n GE: [5.9, 52.0],\n OV: [6.4, 52.4],\n FR: [5.7, 53.2],\n GR: [6.7, 53.2],\n DR: [6.6, 52.8],\n}\n\nexport const NETHERLANDS_MAP_CENTER: [number, number] = [5.3, 52.2]\n\n// ---------------------------------------------------------------------------\n// Netherlands macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const NETHERLANDS_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'randstad',\n label: '',\n codes: ['NH', 'ZH', 'UT', 'FL'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n {\n key: 'south',\n label: '',\n codes: ['NB', 'LI', 'ZE'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'east',\n label: '',\n codes: ['GE', 'OV'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'north',\n label: '',\n codes: ['FR', 'GR', 'DR'],\n gradient: 'from-amber-500/15 to-yellow-500/10 dark:from-amber-500/20 dark:to-yellow-500/15',\n iconColor: 'text-amber-600 dark:text-amber-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'NL'\n// ---------------------------------------------------------------------------\n\nexport const getNetherlandsFlagUrl = (code: string) => getSubdivisionFlagUrl('NL', code)\nexport const getNetherlandsHexColor = (code: string) => getSubdivisionHexColor('NL', code)\nexport const getNetherlandsPalette = (code: string) => getSubdivisionPalette('NL', code)\nexport const getNetherlandsGradient = (code: string, direction?: string) => getSubdivisionGradient('NL', code, direction)\nexport const getNetherlandsColors = (code: string) => getSubdivisionColors('NL', code)\nexport const getNetherlandsAccent = (code: string) => getSubdivisionAccent('NL', code)\nexport const isValidNetherlandsProvince = (code: string) => isValidSubdivision('NL', code)\n","/**\n * Philippines Subdivision Theme Data\n * ===================================\n *\n * Reusable Philippine province palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('PH', PH_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// Philippines province color palettes — from regional identity colors\n// Using unique hc-a2 codes from the Highcharts GeoJSON data\n// ---------------------------------------------------------------------------\n\nexport const PHILIPPINES_PROVINCE_PALETTES: Record<string, SubdivisionColorPalette> = {\n MN: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n TT: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n BO: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n CB: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n BS: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n ZS: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n SU: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n AQ: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n PL: { primary: '#003da5', secondary: '#009640', text: 'light' },\n RO: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n AL: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n CS: { primary: '#009640', secondary: '#003da5', text: 'light' },\n NA: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n BN: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n CG: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n PN: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n BT: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n MC: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n QZ: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n ES: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n LE: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n SM: { primary: '#009640', secondary: '#003da5', text: 'light' },\n NS: { primary: '#003da5', secondary: '#009640', text: 'light' },\n CM: { primary: '#6b2fa0', secondary: '#ffd700', text: 'light' },\n DI: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n DS: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n IS: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n LL: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n II: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n AN: { primary: '#009640', secondary: '#003da5', text: 'light' },\n BA: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n LG: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n RI: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n LN: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n IL: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n LS: { primary: '#003da5', secondary: '#009640', text: 'light' },\n NC: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n MG: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n SK: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n SC: { primary: '#003da5', secondary: '#009640', text: 'light' },\n SG: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n SS: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n AS: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n DO: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n DV: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n BK: { primary: '#009640', secondary: '#003da5', text: 'light' },\n CL: { primary: '#ffd700', secondary: '#009640', text: 'dark' },\n CE: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n MA: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n CO: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n DA: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n GS: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n CD: { primary: '#003da5', secondary: '#009640', text: 'light' },\n BU: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n PP: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n OR: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n TA: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n NV: { primary: '#009640', secondary: '#003da5', text: 'light' },\n SA: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n OL: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n QC: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n SJ: { primary: '#003da5', secondary: '#009640', text: 'light' },\n PA: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n LP: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n MU: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n LU: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n ZA: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n ZN: { primary: '#003da5', secondary: '#009640', text: 'light' },\n ND: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n MD: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n AB: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n AP: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n AU: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n IB: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n IF: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n MT: { primary: '#6b2fa0', secondary: '#f0f0f0', text: 'light' },\n QR: { primary: '#003da5', secondary: '#009640', text: 'light' },\n NE: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n PM: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n BG: { primary: '#009640', secondary: '#003da5', text: 'light' },\n ZM: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n CV: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n MR: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n SQ: { primary: '#ffd700', secondary: '#c8102e', text: 'dark' },\n GU: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n CT: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n MB: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n MQ: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n BI: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n SL: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n NR: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n AK: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n CP: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n CN: { primary: '#009640', secondary: '#003da5', text: 'light' },\n SR: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n IN: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n TR: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// Philippines accent mappings\n// ---------------------------------------------------------------------------\n\nexport const PHILIPPINES_ACCENT_MAP: Record<string, string> = {\n MN: 'blue', TT: 'green', BO: 'red', CB: 'blue', BS: 'green',\n ZS: 'red', SU: 'blue', AQ: 'green', PL: 'blue', RO: 'yellow',\n AL: 'red', CS: 'green', NA: 'blue', BN: 'red', CG: 'blue',\n PN: 'green', BT: 'red', MC: 'blue', QZ: 'green', ES: 'blue',\n LE: 'red', SM: 'green', NS: 'blue', CM: 'purple', DI: 'blue',\n DS: 'red', IS: 'green', LL: 'blue', II: 'red', AN: 'green',\n BA: 'blue', LG: 'green', RI: 'blue', LN: 'red', IL: 'green',\n LS: 'blue', NC: 'yellow', MG: 'green', SK: 'red', SC: 'blue',\n SG: 'red', SS: 'green', AS: 'blue', DO: 'red', DV: 'blue',\n BK: 'green', CL: 'yellow', CE: 'blue', MA: 'red', CO: 'green',\n DA: 'blue', GS: 'red', CD: 'blue', BU: 'green', PP: 'blue',\n OR: 'red', TA: 'blue', NV: 'green', SA: 'red', OL: 'blue',\n QC: 'red', SJ: 'blue', PA: 'green', LP: 'red', MU: 'blue',\n LU: 'green', ZA: 'red', ZN: 'blue', ND: 'yellow', MD: 'green',\n AB: 'blue', AP: 'green', AU: 'red', IB: 'blue', IF: 'green',\n MT: 'purple', QR: 'blue', NE: 'red', PM: 'blue', BG: 'green',\n ZM: 'red', CV: 'blue', MR: 'green', SQ: 'yellow', GU: 'blue',\n CT: 'red', MB: 'green', MQ: 'blue', BI: 'green', SL: 'blue',\n NR: 'red', AK: 'blue', CP: 'red', CN: 'green', SR: 'red',\n IN: 'blue', TR: 'green',\n}\n\n// All valid Philippine province codes\nconst VALID_CODES = Object.keys(PHILIPPINES_PROVINCE_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const PH_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: PHILIPPINES_PROVINCE_PALETTES,\n accents: PHILIPPINES_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/ph/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// Philippines province center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const PHILIPPINES_PROVINCE_COORDINATES: Record<string, [number, number]> = {\n // Luzon\n AB: [120.6, 17.6],\n AP: [121.2, 17.8],\n AU: [121.6, 15.9],\n BN: [121.9, 20.5],\n BG: [120.6, 16.4],\n CG: [121.8, 17.8],\n IF: [121.2, 16.8],\n IS: [121.9, 16.9],\n IN: [120.6, 18.0],\n IB: [122.0, 16.5],\n MT: [121.2, 17.1],\n NV: [121.2, 16.3],\n QR: [121.5, 16.1],\n NE: [121.0, 15.6],\n PM: [120.7, 15.0],\n PN: [120.3, 16.0],\n TR: [120.6, 15.4],\n ZM: [120.1, 15.0],\n BT: [121.0, 13.8],\n CV: [120.8, 14.3],\n LG: [121.3, 14.3],\n QZ: [122.0, 14.0],\n RI: [121.1, 14.5],\n MR: [121.9, 13.4],\n MC: [121.0, 12.5],\n AL: [123.7, 13.2],\n CN: [122.8, 14.1],\n CS: [123.4, 13.6],\n CT: [124.2, 13.7],\n MB: [123.6, 12.4],\n MQ: [121.9, 13.5],\n SR: [124.0, 12.9],\n PL: [118.7, 9.8],\n // Visayas\n CB: [123.8, 10.3],\n CE: [123.8, 10.3],\n BO: [124.0, 9.8],\n LE: [124.9, 10.4],\n SM: [125.0, 11.8],\n ES: [125.5, 11.2],\n NS: [124.7, 12.3],\n II: [122.6, 10.7],\n ND: [122.6, 10.0],\n AQ: [121.9, 11.2],\n RO: [122.3, 12.5],\n AK: [122.5, 11.8],\n CP: [122.6, 11.4],\n SQ: [123.6, 9.2],\n GU: [122.6, 10.6],\n NR: [123.2, 9.6],\n BI: [124.5, 11.2],\n SL: [125.2, 10.1],\n // Mindanao\n ZN: [123.0, 8.2],\n ZS: [123.2, 7.2],\n ZA: [122.0, 7.0],\n MN: [124.6, 8.5],\n MD: [123.8, 8.0],\n LN: [124.2, 8.0],\n LS: [124.4, 7.9],\n BS: [122.0, 6.7],\n SU: [121.0, 6.0],\n TT: [120.0, 5.0],\n BK: [125.0, 8.0],\n CM: [124.7, 9.2],\n MG: [124.3, 7.0],\n NC: [124.8, 7.2],\n SK: [124.2, 6.5],\n SC: [124.9, 6.2],\n SG: [125.5, 5.8],\n DV: [125.6, 7.5],\n DS: [125.5, 6.8],\n DO: [126.2, 7.3],\n CL: [125.9, 7.7],\n AN: [125.8, 8.9],\n AS: [125.9, 8.5],\n DI: [126.0, 9.8],\n SS: [126.1, 8.7],\n CD: [124.6, 8.5],\n BU: [125.5, 8.9],\n}\n\nexport const PHILIPPINES_MAP_CENTER: [number, number] = [122.0, 12.5]\n\n// ---------------------------------------------------------------------------\n// Philippines macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const PHILIPPINES_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'luzon',\n label: '',\n codes: ['AB', 'AP', 'AU', 'BN', 'BG', 'CG', 'IF', 'IS', 'IN', 'IB', 'MT', 'NV', 'QR', 'NE', 'PM', 'PN', 'TR', 'ZM', 'BT', 'CV', 'LG', 'QZ', 'RI', 'MR', 'MC', 'AL', 'CN', 'CS', 'CT', 'MB', 'MQ', 'SR', 'PL'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'visayas',\n label: '',\n codes: ['CB', 'CE', 'BO', 'LE', 'SM', 'ES', 'NS', 'II', 'ND', 'AQ', 'RO', 'AK', 'CP', 'SQ', 'GU', 'NR', 'BI', 'SL'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n {\n key: 'mindanao',\n label: '',\n codes: ['ZN', 'ZS', 'ZA', 'MN', 'MD', 'LN', 'LS', 'BS', 'SU', 'TT', 'BK', 'CM', 'MG', 'NC', 'SK', 'SC', 'SG', 'DV', 'DS', 'DO', 'CL', 'AN', 'AS', 'DI', 'SS', 'CD', 'BU'],\n gradient: 'from-red-500/15 to-rose-500/10 dark:from-red-500/20 dark:to-rose-500/15',\n iconColor: 'text-red-600 dark:text-red-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'PH'\n// ---------------------------------------------------------------------------\n\nexport const getPhilippinesFlagUrl = (code: string) => getSubdivisionFlagUrl('PH', code)\nexport const getPhilippinesHexColor = (code: string) => getSubdivisionHexColor('PH', code)\nexport const getPhilippinesPalette = (code: string) => getSubdivisionPalette('PH', code)\nexport const getPhilippinesGradient = (code: string, direction?: string) => getSubdivisionGradient('PH', code, direction)\nexport const getPhilippinesColors = (code: string) => getSubdivisionColors('PH', code)\nexport const getPhilippinesAccent = (code: string) => getSubdivisionAccent('PH', code)\nexport const isValidPhilippinesProvince = (code: string) => isValidSubdivision('PH', code)\n","/**\n * New Zealand Subdivision Theme Data\n * ===================================\n *\n * Reusable New Zealand region palettes, accents, coordinates,\n * macro-regions, and convenience helpers. Does NOT self-register; consumers\n * call `registerSubdivisionTheme('NZ', NZ_THEME_CONFIG)` at startup.\n */\n\nimport type { SubdivisionColorPalette, SubdivisionThemeConfig } from '@ui/lib/subdivision-theme'\nimport {\n getSubdivisionFlagUrl,\n getSubdivisionHexColor,\n getSubdivisionPalette,\n getSubdivisionGradient,\n getSubdivisionColors,\n getSubdivisionAccent,\n isValidSubdivision,\n} from '@ui/lib/subdivision-theme'\nimport type { RegionGroupDefinition } from '@ui/lib/themes/types'\n\n// ---------------------------------------------------------------------------\n// New Zealand region color palettes — from regional identity colors\n// ---------------------------------------------------------------------------\n\nexport const NEW_ZEALAND_REGION_PALETTES: Record<string, SubdivisionColorPalette> = {\n AU: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n MA: { primary: '#009640', secondary: '#f0f0f0', text: 'light' },\n SO: { primary: '#003da5', secondary: '#009640', text: 'light' },\n WK: { primary: '#c8102e', secondary: '#003da5', text: 'light' },\n WG: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n CA: { primary: '#c8102e', secondary: '#ffd700', text: 'light' },\n OT: { primary: '#003da5', secondary: '#f0f0f0', text: 'light' },\n MW: { primary: '#009640', secondary: '#c8102e', text: 'light' },\n GI: { primary: '#ffd700', secondary: '#003da5', text: 'dark' },\n HB: { primary: '#c8102e', secondary: '#009640', text: 'light' },\n BP: { primary: '#003da5', secondary: '#ffd700', text: 'light' },\n NC: { primary: '#009640', secondary: '#ffd700', text: 'light' },\n TD: { primary: '#003da5', secondary: '#009640', text: 'light' },\n NO: { primary: '#c8102e', secondary: '#f0f0f0', text: 'light' },\n TK: { primary: '#003da5', secondary: '#c8102e', text: 'light' },\n WC: { primary: '#009640', secondary: '#003da5', text: 'light' },\n}\n\n// ---------------------------------------------------------------------------\n// New Zealand accent mappings\n// ---------------------------------------------------------------------------\n\nexport const NEW_ZEALAND_ACCENT_MAP: Record<string, string> = {\n AU: 'blue',\n MA: 'green',\n SO: 'blue',\n WK: 'red',\n WG: 'blue',\n CA: 'red',\n OT: 'blue',\n MW: 'green',\n GI: 'yellow',\n HB: 'red',\n BP: 'blue',\n NC: 'green',\n TD: 'blue',\n NO: 'red',\n TK: 'blue',\n WC: 'green',\n}\n\n// All valid New Zealand region codes\nconst VALID_CODES = Object.keys(NEW_ZEALAND_REGION_PALETTES)\n\n// ---------------------------------------------------------------------------\n// Pre-built theme config for registration\n// ---------------------------------------------------------------------------\n\nexport const NZ_THEME_CONFIG: SubdivisionThemeConfig = {\n palettes: NEW_ZEALAND_REGION_PALETTES,\n accents: NEW_ZEALAND_ACCENT_MAP,\n flagUrlTemplate: (code) =>\n VALID_CODES.includes(code) ? `/flags/nz/${code}.svg` : null,\n}\n\n// ---------------------------------------------------------------------------\n// New Zealand region center coordinates (for map) — [lon, lat]\n// ---------------------------------------------------------------------------\n\nexport const NEW_ZEALAND_REGION_COORDINATES: Record<string, [number, number]> = {\n NO: [174.3, -35.7],\n AU: [174.8, -36.8],\n WK: [175.5, -37.8],\n BP: [176.5, -37.7],\n GI: [178.0, -38.7],\n HB: [176.8, -39.5],\n TK: [174.1, -39.1],\n MW: [175.6, -39.9],\n WG: [174.8, -41.3],\n NC: [173.3, -41.3],\n MA: [173.9, -41.5],\n TD: [172.5, -41.2],\n WC: [171.2, -42.5],\n CA: [172.0, -43.5],\n OT: [170.0, -45.0],\n SO: [168.3, -46.1],\n}\n\nexport const NEW_ZEALAND_MAP_CENTER: [number, number] = [172.0, -41.0]\n\n// ---------------------------------------------------------------------------\n// New Zealand macro-region definitions (for CollapsibleRegionList)\n// ---------------------------------------------------------------------------\n\nexport const NEW_ZEALAND_MACRO_REGIONS: RegionGroupDefinition[] = [\n {\n key: 'north-island',\n label: '',\n codes: ['AU', 'WK', 'BP', 'GI', 'HB', 'MW', 'TK', 'WG', 'NO'],\n gradient: 'from-blue-500/15 to-indigo-500/10 dark:from-blue-500/20 dark:to-indigo-500/15',\n iconColor: 'text-blue-600 dark:text-blue-400',\n },\n {\n key: 'south-island',\n label: '',\n codes: ['CA', 'OT', 'SO', 'WC', 'MA', 'NC', 'TD'],\n gradient: 'from-emerald-500/15 to-teal-500/10 dark:from-emerald-500/20 dark:to-teal-500/15',\n iconColor: 'text-emerald-600 dark:text-emerald-400',\n },\n]\n\n// ---------------------------------------------------------------------------\n// Convenience helpers bound to 'NZ'\n// ---------------------------------------------------------------------------\n\nexport const getNewZealandFlagUrl = (code: string) => getSubdivisionFlagUrl('NZ', code)\nexport const getNewZealandHexColor = (code: string) => getSubdivisionHexColor('NZ', code)\nexport const getNewZealandPalette = (code: string) => getSubdivisionPalette('NZ', code)\nexport const getNewZealandGradient = (code: string, direction?: string) => getSubdivisionGradient('NZ', code, direction)\nexport const getNewZealandColors = (code: string) => getSubdivisionColors('NZ', code)\nexport const getNewZealandAccent = (code: string) => getSubdivisionAccent('NZ', code)\nexport const isValidNewZealandRegion = (code: string) => isValidSubdivision('NZ', code)\n","/**\n * Country Configuration System\n * ============================\n *\n * Unified registry that bundles everything an app needs to render a country\n * map and format its data: theme, coordinates, regions, currency, locale,\n * address format, and tax configuration.\n *\n * All 18 supported countries are pre-registered. Consumers can also register\n * custom countries via `registerCountry(config)`.\n */\n\nimport type { SubdivisionThemeConfig } from './subdivision-theme.js'\nimport type { RegionGroupDefinition } from './themes/types.js'\n\n// Theme configs\nimport { BR_THEME_CONFIG, BRAZIL_STATE_COORDINATES, BRAZIL_MAP_CENTER, BRAZIL_MACRO_REGIONS } from './themes/brazil.js'\nimport { US_THEME_CONFIG, US_STATE_COORDINATES, US_MAP_CENTER, US_MACRO_REGIONS } from './themes/us.js'\nimport { CA_THEME_CONFIG, CANADA_PROVINCE_COORDINATES, CANADA_MAP_CENTER, CANADA_MACRO_REGIONS } from './themes/canada.js'\nimport { MX_THEME_CONFIG, MEXICO_STATE_COORDINATES, MEXICO_MAP_CENTER, MEXICO_MACRO_REGIONS } from './themes/mexico.js'\nimport { CO_THEME_CONFIG, COLOMBIA_DEPARTMENT_COORDINATES, COLOMBIA_MAP_CENTER, COLOMBIA_MACRO_REGIONS } from './themes/colombia.js'\nimport { AR_THEME_CONFIG, ARGENTINA_PROVINCE_COORDINATES, ARGENTINA_MAP_CENTER, ARGENTINA_MACRO_REGIONS } from './themes/argentina.js'\nimport { CL_THEME_CONFIG, CHILE_REGION_COORDINATES, CHILE_MAP_CENTER, CHILE_MACRO_REGIONS } from './themes/chile.js'\nimport { PE_THEME_CONFIG, PERU_DEPARTMENT_COORDINATES, PERU_MAP_CENTER, PERU_MACRO_REGIONS } from './themes/peru.js'\nimport { DE_THEME_CONFIG, GERMANY_STATE_COORDINATES, GERMANY_MAP_CENTER, GERMANY_MACRO_REGIONS } from './themes/germany.js'\nimport { FR_THEME_CONFIG, FRANCE_REGION_COORDINATES, FRANCE_MAP_CENTER, FRANCE_MACRO_REGIONS } from './themes/france.js'\nimport { ES_THEME_CONFIG, SPAIN_PROVINCE_COORDINATES, SPAIN_MAP_CENTER, SPAIN_MACRO_REGIONS } from './themes/spain.js'\nimport { IT_THEME_CONFIG, ITALY_REGION_COORDINATES, ITALY_MAP_CENTER, ITALY_MACRO_REGIONS } from './themes/italy.js'\nimport { GB_THEME_CONFIG, UK_NATION_COORDINATES, UK_MAP_CENTER, UK_MACRO_REGIONS } from './themes/united-kingdom.js'\nimport { PT_THEME_CONFIG, PORTUGAL_DISTRICT_COORDINATES, PORTUGAL_MAP_CENTER, PORTUGAL_MACRO_REGIONS } from './themes/portugal.js'\nimport { AU_THEME_CONFIG, AUSTRALIA_STATE_COORDINATES, AUSTRALIA_MAP_CENTER, AUSTRALIA_MACRO_REGIONS } from './themes/australia.js'\nimport { JP_THEME_CONFIG, JAPAN_PREFECTURE_COORDINATES, JAPAN_MAP_CENTER, JAPAN_MACRO_REGIONS } from './themes/japan.js'\nimport { IN_THEME_CONFIG, INDIA_STATE_COORDINATES, INDIA_MAP_CENTER, INDIA_MACRO_REGIONS } from './themes/india.js'\nimport { ZA_THEME_CONFIG, SOUTH_AFRICA_PROVINCE_COORDINATES, SOUTH_AFRICA_MAP_CENTER, SOUTH_AFRICA_MACRO_REGIONS } from './themes/south-africa.js'\nimport { KR_THEME_CONFIG, SOUTH_KOREA_PROVINCE_COORDINATES, SOUTH_KOREA_MAP_CENTER, SOUTH_KOREA_MACRO_REGIONS } from './themes/south-korea.js'\nimport { ID_THEME_CONFIG, INDONESIA_PROVINCE_COORDINATES, INDONESIA_MAP_CENTER, INDONESIA_MACRO_REGIONS } from './themes/indonesia.js'\nimport { TH_THEME_CONFIG, THAILAND_PROVINCE_COORDINATES, THAILAND_MAP_CENTER, THAILAND_MACRO_REGIONS } from './themes/thailand.js'\nimport { NG_THEME_CONFIG, NIGERIA_STATE_COORDINATES, NIGERIA_MAP_CENTER, NIGERIA_MACRO_REGIONS } from './themes/nigeria.js'\nimport { EG_THEME_CONFIG, EGYPT_GOVERNORATE_COORDINATES, EGYPT_MAP_CENTER, EGYPT_MACRO_REGIONS } from './themes/egypt.js'\nimport { TR_THEME_CONFIG, TURKEY_PROVINCE_COORDINATES, TURKEY_MAP_CENTER, TURKEY_MACRO_REGIONS } from './themes/turkey.js'\nimport { PL_THEME_CONFIG, POLAND_VOIVODESHIP_COORDINATES, POLAND_MAP_CENTER, POLAND_MACRO_REGIONS } from './themes/poland.js'\nimport { SE_THEME_CONFIG, SWEDEN_COUNTY_COORDINATES, SWEDEN_MAP_CENTER, SWEDEN_MACRO_REGIONS } from './themes/sweden.js'\nimport { NO_THEME_CONFIG, NORWAY_COUNTY_COORDINATES, NORWAY_MAP_CENTER, NORWAY_MACRO_REGIONS } from './themes/norway.js'\nimport { NL_THEME_CONFIG, NETHERLANDS_PROVINCE_COORDINATES, NETHERLANDS_MAP_CENTER, NETHERLANDS_MACRO_REGIONS } from './themes/netherlands.js'\nimport { PH_THEME_CONFIG, PHILIPPINES_PROVINCE_COORDINATES, PHILIPPINES_MAP_CENTER, PHILIPPINES_MACRO_REGIONS } from './themes/philippines.js'\nimport { NZ_THEME_CONFIG, NEW_ZEALAND_REGION_COORDINATES, NEW_ZEALAND_MAP_CENTER, NEW_ZEALAND_MACRO_REGIONS } from './themes/new-zealand.js'\n\n// ---------------------------------------------------------------------------\n// Interfaces\n// ---------------------------------------------------------------------------\n\nexport interface CountryCurrencyConfig {\n code: string // ISO 4217 alpha (BRL, USD, EUR, etc.)\n numeric: string // ISO 4217 numeric (986, 840, 978, etc.)\n symbol: string // R$, $, €, etc.\n decimal: string // ',' or '.'\n thousands: string // '.' or ','\n symbolPosition: 'before' | 'after'\n precision: number // decimal places (usually 2)\n}\n\nexport interface CountryLocaleConfig {\n defaultLocale: string // pt-BR, en-US, es-MX, etc.\n dateFormat: string // dd/MM/yyyy, MM/dd/yyyy, yyyy-MM-dd\n timeFormat: '12h' | '24h'\n firstDayOfWeek: 0 | 1 // 0=Sunday, 1=Monday\n measurementSystem: 'metric' | 'imperial'\n}\n\nexport interface CountryAddressFormat {\n fields: string[] // ordered field names\n template: string // e.g. \"{street}\\n{city}, {state} {postalCode}\"\n postalCodeLabel: string // CEP, ZIP, Postal Code, PLZ, etc.\n postalCodePattern?: string // regex pattern\n stateLabel: string // State, Province, Department, Prefecture, etc.\n}\n\nexport interface CountryLanguage {\n code: string // BCP 47 (pt-BR, en-US, fr-FR, etc.)\n name: string // English name (Portuguese, English, French)\n nativeName: string // Native name (Português, English, Français)\n primary?: boolean // true for the main/official language\n}\n\nexport interface CountryTaxConfig {\n name: string // ICMS, VAT, GST, Sales Tax, etc.\n standardRate: number // percentage (e.g. 19 for 19%)\n subdivisionRates?: Record<string, number> // state/province specific rates\n}\n\nexport interface CountryConfig {\n code: string // ISO 3166-1 alpha-2\n name: string // English name\n nativeName: string // Name in native language\n flag: string // emoji flag\n theme: SubdivisionThemeConfig\n coordinates: Record<string, [number, number]>\n mapCenter: [number, number]\n macroRegions: RegionGroupDefinition[]\n geoJsonPath: string // relative path to GeoJSON file\n projection: 'mercator' | 'albersUsa'\n regionPropertyKey: string // property key in GeoJSON for subdivision code\n languages: CountryLanguage[]\n currency: CountryCurrencyConfig\n locale: CountryLocaleConfig\n address: CountryAddressFormat\n tax: CountryTaxConfig\n}\n\n// ---------------------------------------------------------------------------\n// Internal registry\n// ---------------------------------------------------------------------------\n\nconst COUNTRY_REGISTRY = new Map<string, CountryConfig>()\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Get a country configuration by its ISO 3166-1 alpha-2 code.\n * Returns null if the country is not registered.\n */\nexport function getCountryConfig(code: string): CountryConfig | null {\n return COUNTRY_REGISTRY.get(code.toUpperCase()) ?? null\n}\n\n/**\n * Register (or replace) a country configuration.\n */\nexport function registerCountry(config: CountryConfig): void {\n COUNTRY_REGISTRY.set(config.code.toUpperCase(), config)\n}\n\n/**\n * Get all registered country configurations, sorted by country code.\n */\nexport function getAllCountries(): CountryConfig[] {\n return [...COUNTRY_REGISTRY.values()].sort((a, b) => a.code.localeCompare(b.code))\n}\n\n/**\n * Format a numeric amount as a currency string for a given country.\n * Returns the raw number as a string if the country is not found.\n */\nexport function formatCurrency(amount: number, countryCode: string): string {\n const config = getCountryConfig(countryCode)\n if (!config) return String(amount)\n\n const { currency } = config\n const fixed = Math.abs(amount).toFixed(currency.precision)\n const [integerPart, decimalPart] = fixed.split('.')\n\n // Add thousands separators\n const withThousands = integerPart.replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n currency.thousands,\n )\n\n const formatted = decimalPart\n ? `${withThousands}${currency.decimal}${decimalPart}`\n : withThousands\n\n const sign = amount < 0 ? '-' : ''\n\n return currency.symbolPosition === 'before'\n ? `${sign}${currency.symbol}${formatted}`\n : `${sign}${formatted}${currency.symbol}`\n}\n\n/**\n * Format an address record using the country's template.\n * Unknown placeholders are left blank.\n */\nexport function formatAddress(\n address: Record<string, string>,\n countryCode: string,\n): string {\n const config = getCountryConfig(countryCode)\n if (!config) {\n return Object.values(address).filter(Boolean).join(', ')\n }\n\n let result = config.address.template\n for (const field of config.address.fields) {\n result = result.replace(`{${field}}`, address[field] ?? '')\n }\n // Clean up double spaces and trailing commas from empty fields\n return result\n .replace(/[ ]{2,}/g, ' ')\n .replace(/,\\s*,/g, ',')\n .replace(/,\\s*\\n/g, '\\n')\n .replace(/\\n\\s*,/g, '\\n')\n .trim()\n}\n\n// ---------------------------------------------------------------------------\n// Pre-registered countries\n// ---------------------------------------------------------------------------\n\n// BR — Brazil\nregisterCountry({\n code: 'BR',\n name: 'Brazil',\n nativeName: 'Brasil',\n flag: '\\u{1F1E7}\\u{1F1F7}',\n theme: BR_THEME_CONFIG,\n coordinates: BRAZIL_STATE_COORDINATES,\n mapCenter: BRAZIL_MAP_CENTER,\n macroRegions: BRAZIL_MACRO_REGIONS,\n geoJsonPath: '/maps/brazil.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'pt-BR', name: 'Portuguese', nativeName: 'Português', primary: true },\n ],\n currency: {\n code: 'BRL',\n numeric: '986',\n symbol: 'R$',\n decimal: ',',\n thousands: '.',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'pt-BR',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 0,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'complement', 'neighborhood', 'city', 'state', 'postalCode'],\n template: '{street}, {number} {complement}\\n{neighborhood}\\n{city}, {state} {postalCode}',\n postalCodeLabel: 'CEP',\n postalCodePattern: '^\\\\d{5}-?\\\\d{3}$',\n stateLabel: 'Estado',\n },\n tax: {\n name: 'ICMS',\n standardRate: 18,\n subdivisionRates: {\n AC: 19, AL: 19, AM: 20, AP: 18, BA: 20.5, CE: 20, DF: 20,\n ES: 17, GO: 19, MA: 22, MG: 18, MS: 17, MT: 17, PA: 19,\n PB: 20, PE: 20.5, PI: 21, PR: 19.5, RJ: 20, RN: 18, RO: 19.5,\n RR: 20, RS: 17, SC: 17, SE: 19, SP: 18, TO: 20,\n },\n },\n})\n\n// US — United States\nregisterCountry({\n code: 'US',\n name: 'United States',\n nativeName: 'United States',\n flag: '\\u{1F1FA}\\u{1F1F8}',\n theme: US_THEME_CONFIG,\n coordinates: US_STATE_COORDINATES,\n mapCenter: US_MAP_CENTER,\n macroRegions: US_MACRO_REGIONS,\n geoJsonPath: '/maps/us.geo.json',\n projection: 'albersUsa',\n regionPropertyKey: 'code',\n languages: [\n { code: 'en-US', name: 'English', nativeName: 'English', primary: true },\n { code: 'es-US', name: 'Spanish', nativeName: 'Español' },\n ],\n currency: {\n code: 'USD',\n numeric: '840',\n symbol: '$',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'en-US',\n dateFormat: 'MM/dd/yyyy',\n timeFormat: '12h',\n firstDayOfWeek: 0,\n measurementSystem: 'imperial',\n },\n address: {\n fields: ['street', 'suite', 'city', 'state', 'postalCode'],\n template: '{street} {suite}\\n{city}, {state} {postalCode}',\n postalCodeLabel: 'ZIP Code',\n postalCodePattern: '^\\\\d{5}(-\\\\d{4})?$',\n stateLabel: 'State',\n },\n tax: {\n name: 'Sales Tax',\n standardRate: 0,\n subdivisionRates: {\n AL: 4, AK: 0, AZ: 5.6, AR: 6.5, CA: 7.25, CO: 2.9, CT: 6.35,\n DE: 0, FL: 6, GA: 4, HI: 4, ID: 6, IL: 6.25, IN: 7, IA: 6,\n KS: 6.5, KY: 6, LA: 4.45, ME: 5.5, MD: 6, MA: 6.25, MI: 6,\n MN: 6.875, MS: 7, MO: 4.225, MT: 0, NE: 5.5, NV: 6.85, NH: 0,\n NJ: 6.625, NM: 5.125, NY: 4, NC: 4.75, ND: 5, OH: 5.75, OK: 4.5,\n OR: 0, PA: 6, RI: 7, SC: 6, SD: 4.5, TN: 7, TX: 6.25, UT: 6.1,\n VT: 6, VA: 5.3, WA: 6.5, WV: 6, WI: 5, WY: 4, DC: 6,\n },\n },\n})\n\n// CA — Canada\nregisterCountry({\n code: 'CA',\n name: 'Canada',\n nativeName: 'Canada',\n flag: '\\u{1F1E8}\\u{1F1E6}',\n theme: CA_THEME_CONFIG,\n coordinates: CANADA_PROVINCE_COORDINATES,\n mapCenter: CANADA_MAP_CENTER,\n macroRegions: CANADA_MACRO_REGIONS,\n geoJsonPath: '/maps/canada.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'en-CA', name: 'English', nativeName: 'English', primary: true },\n { code: 'fr-CA', name: 'French', nativeName: 'Français' },\n ],\n currency: {\n code: 'CAD',\n numeric: '124',\n symbol: 'CA$',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'en-CA',\n dateFormat: 'yyyy-MM-dd',\n timeFormat: '12h',\n firstDayOfWeek: 0,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'suite', 'city', 'province', 'postalCode'],\n template: '{street} {suite}\\n{city}, {province} {postalCode}',\n postalCodeLabel: 'Postal Code',\n postalCodePattern: '^[A-Za-z]\\\\d[A-Za-z]\\\\s?\\\\d[A-Za-z]\\\\d$',\n stateLabel: 'Province',\n },\n tax: {\n name: 'GST/HST',\n standardRate: 5,\n subdivisionRates: {\n AB: 5, BC: 12, MB: 12, NB: 15, NL: 15, NS: 15, NT: 5,\n NU: 5, ON: 13, PE: 15, QC: 14.975, SK: 11, YT: 5,\n },\n },\n})\n\n// MX — Mexico\nregisterCountry({\n code: 'MX',\n name: 'Mexico',\n nativeName: 'M\\u00e9xico',\n flag: '\\u{1F1F2}\\u{1F1FD}',\n theme: MX_THEME_CONFIG,\n coordinates: MEXICO_STATE_COORDINATES,\n mapCenter: MEXICO_MAP_CENTER,\n macroRegions: MEXICO_MACRO_REGIONS,\n geoJsonPath: '/maps/mexico.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'es-MX', name: 'Spanish', nativeName: 'Español', primary: true },\n ],\n currency: {\n code: 'MXN',\n numeric: '484',\n symbol: 'MX$',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'es-MX',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '12h',\n firstDayOfWeek: 0,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'exteriorNumber', 'interiorNumber', 'neighborhood', 'city', 'state', 'postalCode'],\n template: '{street} {exteriorNumber} {interiorNumber}\\n{neighborhood}\\n{postalCode} {city}, {state}',\n postalCodeLabel: 'C\\u00f3digo Postal',\n postalCodePattern: '^\\\\d{5}$',\n stateLabel: 'Estado',\n },\n tax: {\n name: 'IVA',\n standardRate: 16,\n },\n})\n\n// CO — Colombia\nregisterCountry({\n code: 'CO',\n name: 'Colombia',\n nativeName: 'Colombia',\n flag: '\\u{1F1E8}\\u{1F1F4}',\n theme: CO_THEME_CONFIG,\n coordinates: COLOMBIA_DEPARTMENT_COORDINATES,\n mapCenter: COLOMBIA_MAP_CENTER,\n macroRegions: COLOMBIA_MACRO_REGIONS,\n geoJsonPath: '/maps/colombia.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'es-CO', name: 'Spanish', nativeName: 'Español', primary: true },\n ],\n currency: {\n code: 'COP',\n numeric: '170',\n symbol: 'COL$',\n decimal: ',',\n thousands: '.',\n symbolPosition: 'before',\n precision: 0,\n },\n locale: {\n defaultLocale: 'es-CO',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '12h',\n firstDayOfWeek: 0,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'city', 'department', 'postalCode'],\n template: '{street} {number}\\n{city}, {department} {postalCode}',\n postalCodeLabel: 'C\\u00f3digo Postal',\n postalCodePattern: '^\\\\d{6}$',\n stateLabel: 'Departamento',\n },\n tax: {\n name: 'IVA',\n standardRate: 19,\n },\n})\n\n// AR — Argentina\nregisterCountry({\n code: 'AR',\n name: 'Argentina',\n nativeName: 'Argentina',\n flag: '\\u{1F1E6}\\u{1F1F7}',\n theme: AR_THEME_CONFIG,\n coordinates: ARGENTINA_PROVINCE_COORDINATES,\n mapCenter: ARGENTINA_MAP_CENTER,\n macroRegions: ARGENTINA_MACRO_REGIONS,\n geoJsonPath: '/maps/argentina.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'es-AR', name: 'Spanish', nativeName: 'Español', primary: true },\n ],\n currency: {\n code: 'ARS',\n numeric: '032',\n symbol: 'AR$',\n decimal: ',',\n thousands: '.',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'es-AR',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'floor', 'apartment', 'postalCode', 'city', 'province'],\n template: '{street} {number}, {floor} {apartment}\\n{postalCode} {city}, {province}',\n postalCodeLabel: 'C\\u00f3digo Postal',\n postalCodePattern: '^[A-Za-z]\\\\d{4}[A-Za-z]{3}$',\n stateLabel: 'Provincia',\n },\n tax: {\n name: 'IVA',\n standardRate: 21,\n },\n})\n\n// CL — Chile\nregisterCountry({\n code: 'CL',\n name: 'Chile',\n nativeName: 'Chile',\n flag: '\\u{1F1E8}\\u{1F1F1}',\n theme: CL_THEME_CONFIG,\n coordinates: CHILE_REGION_COORDINATES,\n mapCenter: CHILE_MAP_CENTER,\n macroRegions: CHILE_MACRO_REGIONS,\n geoJsonPath: '/maps/chile.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'es-CL', name: 'Spanish', nativeName: 'Español', primary: true },\n ],\n currency: {\n code: 'CLP',\n numeric: '152',\n symbol: 'CL$',\n decimal: ',',\n thousands: '.',\n symbolPosition: 'before',\n precision: 0,\n },\n locale: {\n defaultLocale: 'es-CL',\n dateFormat: 'dd-MM-yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'commune', 'city', 'region', 'postalCode'],\n template: '{street} {number}\\n{commune}\\n{city}, {region} {postalCode}',\n postalCodeLabel: 'C\\u00f3digo Postal',\n postalCodePattern: '^\\\\d{7}$',\n stateLabel: 'Regi\\u00f3n',\n },\n tax: {\n name: 'IVA',\n standardRate: 19,\n },\n})\n\n// PE — Peru\nregisterCountry({\n code: 'PE',\n name: 'Peru',\n nativeName: 'Per\\u00fa',\n flag: '\\u{1F1F5}\\u{1F1EA}',\n theme: PE_THEME_CONFIG,\n coordinates: PERU_DEPARTMENT_COORDINATES,\n mapCenter: PERU_MAP_CENTER,\n macroRegions: PERU_MACRO_REGIONS,\n geoJsonPath: '/maps/peru.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'es-PE', name: 'Spanish', nativeName: 'Español', primary: true },\n { code: 'qu', name: 'Quechua', nativeName: 'Runasimi' },\n ],\n currency: {\n code: 'PEN',\n numeric: '604',\n symbol: 'S/',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'es-PE',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '12h',\n firstDayOfWeek: 0,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'district', 'city', 'department', 'postalCode'],\n template: '{street} {number}\\n{district}\\n{city}, {department} {postalCode}',\n postalCodeLabel: 'C\\u00f3digo Postal',\n postalCodePattern: '^\\\\d{5}$',\n stateLabel: 'Departamento',\n },\n tax: {\n name: 'IGV',\n standardRate: 18,\n },\n})\n\n// DE — Germany\nregisterCountry({\n code: 'DE',\n name: 'Germany',\n nativeName: 'Deutschland',\n flag: '\\u{1F1E9}\\u{1F1EA}',\n theme: DE_THEME_CONFIG,\n coordinates: GERMANY_STATE_COORDINATES,\n mapCenter: GERMANY_MAP_CENTER,\n macroRegions: GERMANY_MACRO_REGIONS,\n geoJsonPath: '/maps/germany.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'de-DE', name: 'German', nativeName: 'Deutsch', primary: true },\n ],\n currency: {\n code: 'EUR',\n numeric: '978',\n symbol: '\\u20ac',\n decimal: ',',\n thousands: '.',\n symbolPosition: 'after',\n precision: 2,\n },\n locale: {\n defaultLocale: 'de-DE',\n dateFormat: 'dd.MM.yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'postalCode', 'city'],\n template: '{street} {number}\\n{postalCode} {city}',\n postalCodeLabel: 'PLZ',\n postalCodePattern: '^\\\\d{5}$',\n stateLabel: 'Bundesland',\n },\n tax: {\n name: 'MwSt',\n standardRate: 19,\n },\n})\n\n// FR — France\nregisterCountry({\n code: 'FR',\n name: 'France',\n nativeName: 'France',\n flag: '\\u{1F1EB}\\u{1F1F7}',\n theme: FR_THEME_CONFIG,\n coordinates: FRANCE_REGION_COORDINATES,\n mapCenter: FRANCE_MAP_CENTER,\n macroRegions: FRANCE_MACRO_REGIONS,\n geoJsonPath: '/maps/france.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'fr-FR', name: 'French', nativeName: 'Français', primary: true },\n ],\n currency: {\n code: 'EUR',\n numeric: '978',\n symbol: '\\u20ac',\n decimal: ',',\n thousands: '\\u202f',\n symbolPosition: 'after',\n precision: 2,\n },\n locale: {\n defaultLocale: 'fr-FR',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'postalCode', 'city'],\n template: '{number} {street}\\n{postalCode} {city}',\n postalCodeLabel: 'Code Postal',\n postalCodePattern: '^\\\\d{5}$',\n stateLabel: 'R\\u00e9gion',\n },\n tax: {\n name: 'TVA',\n standardRate: 20,\n },\n})\n\n// ES — Spain\nregisterCountry({\n code: 'ES',\n name: 'Spain',\n nativeName: 'Espa\\u00f1a',\n flag: '\\u{1F1EA}\\u{1F1F8}',\n theme: ES_THEME_CONFIG,\n coordinates: SPAIN_PROVINCE_COORDINATES,\n mapCenter: SPAIN_MAP_CENTER,\n macroRegions: SPAIN_MACRO_REGIONS,\n geoJsonPath: '/maps/spain.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'es-ES', name: 'Spanish', nativeName: 'Español', primary: true },\n { code: 'ca', name: 'Catalan', nativeName: 'Català' },\n { code: 'eu', name: 'Basque', nativeName: 'Euskara' },\n { code: 'gl', name: 'Galician', nativeName: 'Galego' },\n ],\n currency: {\n code: 'EUR',\n numeric: '978',\n symbol: '\\u20ac',\n decimal: ',',\n thousands: '.',\n symbolPosition: 'after',\n precision: 2,\n },\n locale: {\n defaultLocale: 'es-ES',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'floor', 'door', 'postalCode', 'city', 'province'],\n template: '{street} {number}, {floor} {door}\\n{postalCode} {city} ({province})',\n postalCodeLabel: 'C\\u00f3digo Postal',\n postalCodePattern: '^\\\\d{5}$',\n stateLabel: 'Provincia',\n },\n tax: {\n name: 'IVA',\n standardRate: 21,\n },\n})\n\n// IT — Italy\nregisterCountry({\n code: 'IT',\n name: 'Italy',\n nativeName: 'Italia',\n flag: '\\u{1F1EE}\\u{1F1F9}',\n theme: IT_THEME_CONFIG,\n coordinates: ITALY_REGION_COORDINATES,\n mapCenter: ITALY_MAP_CENTER,\n macroRegions: ITALY_MACRO_REGIONS,\n geoJsonPath: '/maps/italy.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'it-IT', name: 'Italian', nativeName: 'Italiano', primary: true },\n ],\n currency: {\n code: 'EUR',\n numeric: '978',\n symbol: '\\u20ac',\n decimal: ',',\n thousands: '.',\n symbolPosition: 'after',\n precision: 2,\n },\n locale: {\n defaultLocale: 'it-IT',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'postalCode', 'city', 'province'],\n template: '{street} {number}\\n{postalCode} {city} ({province})',\n postalCodeLabel: 'CAP',\n postalCodePattern: '^\\\\d{5}$',\n stateLabel: 'Provincia',\n },\n tax: {\n name: 'IVA',\n standardRate: 22,\n },\n})\n\n// GB — United Kingdom\nregisterCountry({\n code: 'GB',\n name: 'United Kingdom',\n nativeName: 'United Kingdom',\n flag: '\\u{1F1EC}\\u{1F1E7}',\n theme: GB_THEME_CONFIG,\n coordinates: UK_NATION_COORDINATES,\n mapCenter: UK_MAP_CENTER,\n macroRegions: UK_MACRO_REGIONS,\n geoJsonPath: '/maps/united-kingdom.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'en-GB', name: 'English', nativeName: 'English', primary: true },\n { code: 'cy', name: 'Welsh', nativeName: 'Cymraeg' },\n { code: 'gd', name: 'Scottish Gaelic', nativeName: 'Gàidhlig' },\n ],\n currency: {\n code: 'GBP',\n numeric: '826',\n symbol: '\\u00a3',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'en-GB',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'city', 'county', 'postalCode'],\n template: '{number} {street}\\n{city}\\n{county}\\n{postalCode}',\n postalCodeLabel: 'Postcode',\n postalCodePattern: '^[A-Z]{1,2}\\\\d[A-Z\\\\d]?\\\\s?\\\\d[A-Z]{2}$',\n stateLabel: 'County',\n },\n tax: {\n name: 'VAT',\n standardRate: 20,\n },\n})\n\n// PT — Portugal\nregisterCountry({\n code: 'PT',\n name: 'Portugal',\n nativeName: 'Portugal',\n flag: '\\u{1F1F5}\\u{1F1F9}',\n theme: PT_THEME_CONFIG,\n coordinates: PORTUGAL_DISTRICT_COORDINATES,\n mapCenter: PORTUGAL_MAP_CENTER,\n macroRegions: PORTUGAL_MACRO_REGIONS,\n geoJsonPath: '/maps/portugal.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'pt-PT', name: 'Portuguese', nativeName: 'Português', primary: true },\n ],\n currency: {\n code: 'EUR',\n numeric: '978',\n symbol: '\\u20ac',\n decimal: ',',\n thousands: '.',\n symbolPosition: 'after',\n precision: 2,\n },\n locale: {\n defaultLocale: 'pt-PT',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'floor', 'postalCode', 'city', 'district'],\n template: '{street} {number}, {floor}\\n{postalCode} {city}',\n postalCodeLabel: 'C\\u00f3digo Postal',\n postalCodePattern: '^\\\\d{4}-\\\\d{3}$',\n stateLabel: 'Distrito',\n },\n tax: {\n name: 'IVA',\n standardRate: 23,\n },\n})\n\n// AU — Australia\nregisterCountry({\n code: 'AU',\n name: 'Australia',\n nativeName: 'Australia',\n flag: '\\u{1F1E6}\\u{1F1FA}',\n theme: AU_THEME_CONFIG,\n coordinates: AUSTRALIA_STATE_COORDINATES,\n mapCenter: AUSTRALIA_MAP_CENTER,\n macroRegions: AUSTRALIA_MACRO_REGIONS,\n geoJsonPath: '/maps/australia.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'en-AU', name: 'English', nativeName: 'English', primary: true },\n ],\n currency: {\n code: 'AUD',\n numeric: '036',\n symbol: 'A$',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'en-AU',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '12h',\n firstDayOfWeek: 0,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'suburb', 'state', 'postalCode'],\n template: '{number} {street}\\n{suburb} {state} {postalCode}',\n postalCodeLabel: 'Postcode',\n postalCodePattern: '^\\\\d{4}$',\n stateLabel: 'State',\n },\n tax: {\n name: 'GST',\n standardRate: 10,\n },\n})\n\n// JP — Japan\nregisterCountry({\n code: 'JP',\n name: 'Japan',\n nativeName: '\\u65e5\\u672c',\n flag: '\\u{1F1EF}\\u{1F1F5}',\n theme: JP_THEME_CONFIG,\n coordinates: JAPAN_PREFECTURE_COORDINATES,\n mapCenter: JAPAN_MAP_CENTER,\n macroRegions: JAPAN_MACRO_REGIONS,\n geoJsonPath: '/maps/japan.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'ja', name: 'Japanese', nativeName: '日本語', primary: true },\n ],\n currency: {\n code: 'JPY',\n numeric: '392',\n symbol: '\\u00a5',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 0,\n },\n locale: {\n defaultLocale: 'ja-JP',\n dateFormat: 'yyyy/MM/dd',\n timeFormat: '24h',\n firstDayOfWeek: 0,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['postalCode', 'prefecture', 'city', 'district', 'block', 'building'],\n template: '\\u3012{postalCode}\\n{prefecture}{city}{district}{block}\\n{building}',\n postalCodeLabel: '\\u90f5\\u4fbf\\u756a\\u53f7',\n postalCodePattern: '^\\\\d{3}-?\\\\d{4}$',\n stateLabel: 'Prefecture',\n },\n tax: {\n name: 'Consumption Tax',\n standardRate: 10,\n },\n})\n\n// IN — India\nregisterCountry({\n code: 'IN',\n name: 'India',\n nativeName: '\\u092d\\u093e\\u0930\\u0924',\n flag: '\\u{1F1EE}\\u{1F1F3}',\n theme: IN_THEME_CONFIG,\n coordinates: INDIA_STATE_COORDINATES,\n mapCenter: INDIA_MAP_CENTER,\n macroRegions: INDIA_MACRO_REGIONS,\n geoJsonPath: '/maps/india.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'hi', name: 'Hindi', nativeName: 'हिन्दी', primary: true },\n { code: 'en-IN', name: 'English', nativeName: 'English' },\n { code: 'ta', name: 'Tamil', nativeName: 'தமிழ்' },\n { code: 'te', name: 'Telugu', nativeName: 'తెలుగు' },\n { code: 'bn', name: 'Bengali', nativeName: 'বাংলা' },\n { code: 'mr', name: 'Marathi', nativeName: 'मराठी' },\n ],\n currency: {\n code: 'INR',\n numeric: '356',\n symbol: '\\u20b9',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'en-IN',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '12h',\n firstDayOfWeek: 0,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'landmark', 'city', 'state', 'postalCode'],\n template: '{street}\\n{landmark}\\n{city}, {state} {postalCode}',\n postalCodeLabel: 'PIN Code',\n postalCodePattern: '^\\\\d{6}$',\n stateLabel: 'State',\n },\n tax: {\n name: 'GST',\n standardRate: 18,\n subdivisionRates: {\n AN: 0, CH: 18, DD: 18, DL: 18, GA: 18, GJ: 18, HP: 18,\n JK: 18, JH: 18, KA: 18, KL: 18, LA: 0, LD: 0, MH: 18,\n ML: 18, MN: 18, MP: 18, MZ: 18, NL: 18, OR: 18, PB: 18,\n PY: 18, RJ: 18, SK: 18, TN: 18, TG: 18, TR: 18, UP: 18,\n UK: 18, WB: 18, AP: 18, AR: 18, AS: 18, BR: 18, CT: 18, HR: 18,\n },\n },\n})\n\n// ZA — South Africa\nregisterCountry({\n code: 'ZA',\n name: 'South Africa',\n nativeName: 'South Africa',\n flag: '\\u{1F1FF}\\u{1F1E6}',\n theme: ZA_THEME_CONFIG,\n coordinates: SOUTH_AFRICA_PROVINCE_COORDINATES,\n mapCenter: SOUTH_AFRICA_MAP_CENTER,\n macroRegions: SOUTH_AFRICA_MACRO_REGIONS,\n geoJsonPath: '/maps/south-africa.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'en-ZA', name: 'English', nativeName: 'English', primary: true },\n { code: 'af', name: 'Afrikaans', nativeName: 'Afrikaans' },\n { code: 'zu', name: 'Zulu', nativeName: 'isiZulu' },\n { code: 'xh', name: 'Xhosa', nativeName: 'isiXhosa' },\n ],\n currency: {\n code: 'ZAR',\n numeric: '710',\n symbol: 'R',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'en-ZA',\n dateFormat: 'yyyy/MM/dd',\n timeFormat: '24h',\n firstDayOfWeek: 0,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'suburb', 'city', 'province', 'postalCode'],\n template: '{number} {street}\\n{suburb}\\n{city}\\n{province}\\n{postalCode}',\n postalCodeLabel: 'Postal Code',\n postalCodePattern: '^\\\\d{4}$',\n stateLabel: 'Province',\n },\n tax: {\n name: 'VAT',\n standardRate: 15,\n },\n})\n\n// KR — South Korea\nregisterCountry({\n code: 'KR',\n name: 'South Korea',\n nativeName: '\\ud55c\\uad6d',\n flag: '\\u{1F1F0}\\u{1F1F7}',\n theme: KR_THEME_CONFIG,\n coordinates: SOUTH_KOREA_PROVINCE_COORDINATES,\n mapCenter: SOUTH_KOREA_MAP_CENTER,\n macroRegions: SOUTH_KOREA_MACRO_REGIONS,\n geoJsonPath: '/maps/south-korea.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'ko', name: 'Korean', nativeName: '\\ud55c\\uad6d\\uc5b4', primary: true },\n ],\n currency: {\n code: 'KRW',\n numeric: '410',\n symbol: '\\u20a9',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 0,\n },\n locale: {\n defaultLocale: 'ko-KR',\n dateFormat: 'yyyy.MM.dd',\n timeFormat: '24h',\n firstDayOfWeek: 0,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['postalCode', 'province', 'city', 'district', 'street', 'building'],\n template: '{postalCode}\\n{province} {city} {district}\\n{street} {building}',\n postalCodeLabel: '\\uc6b0\\ud3b8\\ubc88\\ud638',\n postalCodePattern: '^\\\\d{5}$',\n stateLabel: 'Province',\n },\n tax: {\n name: 'VAT',\n standardRate: 10,\n },\n})\n\n// ID — Indonesia\nregisterCountry({\n code: 'ID',\n name: 'Indonesia',\n nativeName: 'Indonesia',\n flag: '\\u{1F1EE}\\u{1F1E9}',\n theme: ID_THEME_CONFIG,\n coordinates: INDONESIA_PROVINCE_COORDINATES,\n mapCenter: INDONESIA_MAP_CENTER,\n macroRegions: INDONESIA_MACRO_REGIONS,\n geoJsonPath: '/maps/indonesia.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'id', name: 'Indonesian', nativeName: 'Bahasa Indonesia', primary: true },\n ],\n currency: {\n code: 'IDR',\n numeric: '360',\n symbol: 'Rp',\n decimal: ',',\n thousands: '.',\n symbolPosition: 'before',\n precision: 0,\n },\n locale: {\n defaultLocale: 'id-ID',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'district', 'city', 'province', 'postalCode'],\n template: '{street} {number}\\n{district}\\n{city}, {province} {postalCode}',\n postalCodeLabel: 'Kode Pos',\n postalCodePattern: '^\\\\d{5}$',\n stateLabel: 'Provinsi',\n },\n tax: {\n name: 'PPN',\n standardRate: 11,\n },\n})\n\n// TH — Thailand\nregisterCountry({\n code: 'TH',\n name: 'Thailand',\n nativeName: '\\u0e1b\\u0e23\\u0e30\\u0e40\\u0e17\\u0e28\\u0e44\\u0e17\\u0e22',\n flag: '\\u{1F1F9}\\u{1F1ED}',\n theme: TH_THEME_CONFIG,\n coordinates: THAILAND_PROVINCE_COORDINATES,\n mapCenter: THAILAND_MAP_CENTER,\n macroRegions: THAILAND_MACRO_REGIONS,\n geoJsonPath: '/maps/thailand.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'th', name: 'Thai', nativeName: '\\u0e44\\u0e17\\u0e22', primary: true },\n ],\n currency: {\n code: 'THB',\n numeric: '764',\n symbol: '\\u0e3f',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'th-TH',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 0,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'subDistrict', 'district', 'province', 'postalCode'],\n template: '{number} {street}\\n{subDistrict}, {district}\\n{province} {postalCode}',\n postalCodeLabel: '\\u0e23\\u0e2b\\u0e31\\u0e2a\\u0e44\\u0e1b\\u0e23\\u0e29\\u0e13\\u0e35\\u0e22\\u0e4c',\n postalCodePattern: '^\\\\d{5}$',\n stateLabel: 'Province',\n },\n tax: {\n name: 'VAT',\n standardRate: 7,\n },\n})\n\n// NG — Nigeria\nregisterCountry({\n code: 'NG',\n name: 'Nigeria',\n nativeName: 'Nigeria',\n flag: '\\u{1F1F3}\\u{1F1EC}',\n theme: NG_THEME_CONFIG,\n coordinates: NIGERIA_STATE_COORDINATES,\n mapCenter: NIGERIA_MAP_CENTER,\n macroRegions: NIGERIA_MACRO_REGIONS,\n geoJsonPath: '/maps/nigeria.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'en-NG', name: 'English', nativeName: 'English', primary: true },\n { code: 'ha', name: 'Hausa', nativeName: 'Hausa' },\n { code: 'yo', name: 'Yoruba', nativeName: 'Yor\\u00f9b\\u00e1' },\n { code: 'ig', name: 'Igbo', nativeName: 'Igbo' },\n ],\n currency: {\n code: 'NGN',\n numeric: '566',\n symbol: '\\u20a6',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'en-NG',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '12h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'city', 'state', 'postalCode'],\n template: '{number} {street}\\n{city}\\n{state} {postalCode}',\n postalCodeLabel: 'Postal Code',\n postalCodePattern: '^\\\\d{6}$',\n stateLabel: 'State',\n },\n tax: {\n name: 'VAT',\n standardRate: 7.5,\n },\n})\n\n// EG — Egypt\nregisterCountry({\n code: 'EG',\n name: 'Egypt',\n nativeName: '\\u0645\\u0635\\u0631',\n flag: '\\u{1F1EA}\\u{1F1EC}',\n theme: EG_THEME_CONFIG,\n coordinates: EGYPT_GOVERNORATE_COORDINATES,\n mapCenter: EGYPT_MAP_CENTER,\n macroRegions: EGYPT_MACRO_REGIONS,\n geoJsonPath: '/maps/egypt.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'ar', name: 'Arabic', nativeName: '\\u0627\\u0644\\u0639\\u0631\\u0628\\u064a\\u0629', primary: true },\n ],\n currency: {\n code: 'EGP',\n numeric: '818',\n symbol: 'E\\u00a3',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'ar-EG',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '12h',\n firstDayOfWeek: 0,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'district', 'city', 'governorate', 'postalCode'],\n template: '{number} {street}\\n{district}\\n{city}, {governorate} {postalCode}',\n postalCodeLabel: 'Postal Code',\n postalCodePattern: '^\\\\d{5}$',\n stateLabel: 'Governorate',\n },\n tax: {\n name: 'VAT',\n standardRate: 14,\n },\n})\n\n// TR — Turkey\nregisterCountry({\n code: 'TR',\n name: 'Turkey',\n nativeName: 'T\\u00fcrkiye',\n flag: '\\u{1F1F9}\\u{1F1F7}',\n theme: TR_THEME_CONFIG,\n coordinates: TURKEY_PROVINCE_COORDINATES,\n mapCenter: TURKEY_MAP_CENTER,\n macroRegions: TURKEY_MACRO_REGIONS,\n geoJsonPath: '/maps/turkey.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'tr', name: 'Turkish', nativeName: 'T\\u00fcrk\\u00e7e', primary: true },\n ],\n currency: {\n code: 'TRY',\n numeric: '949',\n symbol: '\\u20ba',\n decimal: ',',\n thousands: '.',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'tr-TR',\n dateFormat: 'dd.MM.yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'district', 'postalCode', 'city', 'province'],\n template: '{street} {number}\\n{district}\\n{postalCode} {city}/{province}',\n postalCodeLabel: 'Posta Kodu',\n postalCodePattern: '^\\\\d{5}$',\n stateLabel: '\\u0130l',\n },\n tax: {\n name: 'KDV',\n standardRate: 20,\n },\n})\n\n// PL — Poland\nregisterCountry({\n code: 'PL',\n name: 'Poland',\n nativeName: 'Polska',\n flag: '\\u{1F1F5}\\u{1F1F1}',\n theme: PL_THEME_CONFIG,\n coordinates: POLAND_VOIVODESHIP_COORDINATES,\n mapCenter: POLAND_MAP_CENTER,\n macroRegions: POLAND_MACRO_REGIONS,\n geoJsonPath: '/maps/poland.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'pl', name: 'Polish', nativeName: 'Polski', primary: true },\n ],\n currency: {\n code: 'PLN',\n numeric: '985',\n symbol: 'z\\u0142',\n decimal: ',',\n thousands: '\\u00a0',\n symbolPosition: 'after',\n precision: 2,\n },\n locale: {\n defaultLocale: 'pl-PL',\n dateFormat: 'dd.MM.yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'apartment', 'postalCode', 'city'],\n template: '{street} {number}/{apartment}\\n{postalCode} {city}',\n postalCodeLabel: 'Kod pocztowy',\n postalCodePattern: '^\\\\d{2}-\\\\d{3}$',\n stateLabel: 'Wojew\\u00f3dztwo',\n },\n tax: {\n name: 'VAT',\n standardRate: 23,\n },\n})\n\n// SE — Sweden\nregisterCountry({\n code: 'SE',\n name: 'Sweden',\n nativeName: 'Sverige',\n flag: '\\u{1F1F8}\\u{1F1EA}',\n theme: SE_THEME_CONFIG,\n coordinates: SWEDEN_COUNTY_COORDINATES,\n mapCenter: SWEDEN_MAP_CENTER,\n macroRegions: SWEDEN_MACRO_REGIONS,\n geoJsonPath: '/maps/sweden.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'sv', name: 'Swedish', nativeName: 'Svenska', primary: true },\n ],\n currency: {\n code: 'SEK',\n numeric: '752',\n symbol: 'kr',\n decimal: ',',\n thousands: '\\u00a0',\n symbolPosition: 'after',\n precision: 2,\n },\n locale: {\n defaultLocale: 'sv-SE',\n dateFormat: 'yyyy-MM-dd',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'postalCode', 'city'],\n template: '{street} {number}\\n{postalCode} {city}',\n postalCodeLabel: 'Postnummer',\n postalCodePattern: '^\\\\d{3}\\\\s?\\\\d{2}$',\n stateLabel: 'L\\u00e4n',\n },\n tax: {\n name: 'Moms',\n standardRate: 25,\n },\n})\n\n// NO — Norway\nregisterCountry({\n code: 'NO',\n name: 'Norway',\n nativeName: 'Norge',\n flag: '\\u{1F1F3}\\u{1F1F4}',\n theme: NO_THEME_CONFIG,\n coordinates: NORWAY_COUNTY_COORDINATES,\n mapCenter: NORWAY_MAP_CENTER,\n macroRegions: NORWAY_MACRO_REGIONS,\n geoJsonPath: '/maps/norway.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'no', name: 'Norwegian', nativeName: 'Norsk', primary: true },\n ],\n currency: {\n code: 'NOK',\n numeric: '578',\n symbol: 'kr',\n decimal: ',',\n thousands: '\\u00a0',\n symbolPosition: 'after',\n precision: 2,\n },\n locale: {\n defaultLocale: 'nb-NO',\n dateFormat: 'dd.MM.yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'postalCode', 'city'],\n template: '{street} {number}\\n{postalCode} {city}',\n postalCodeLabel: 'Postnummer',\n postalCodePattern: '^\\\\d{4}$',\n stateLabel: 'Fylke',\n },\n tax: {\n name: 'MVA',\n standardRate: 25,\n },\n})\n\n// NL — Netherlands\nregisterCountry({\n code: 'NL',\n name: 'Netherlands',\n nativeName: 'Nederland',\n flag: '\\u{1F1F3}\\u{1F1F1}',\n theme: NL_THEME_CONFIG,\n coordinates: NETHERLANDS_PROVINCE_COORDINATES,\n mapCenter: NETHERLANDS_MAP_CENTER,\n macroRegions: NETHERLANDS_MACRO_REGIONS,\n geoJsonPath: '/maps/netherlands.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'nl', name: 'Dutch', nativeName: 'Nederlands', primary: true },\n ],\n currency: {\n code: 'EUR',\n numeric: '978',\n symbol: '\\u20ac',\n decimal: ',',\n thousands: '.',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'nl-NL',\n dateFormat: 'dd-MM-yyyy',\n timeFormat: '24h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'postalCode', 'city'],\n template: '{street} {number}\\n{postalCode} {city}',\n postalCodeLabel: 'Postcode',\n postalCodePattern: '^\\\\d{4}\\\\s?[A-Z]{2}$',\n stateLabel: 'Provincie',\n },\n tax: {\n name: 'BTW',\n standardRate: 21,\n },\n})\n\n// PH — Philippines\nregisterCountry({\n code: 'PH',\n name: 'Philippines',\n nativeName: 'Pilipinas',\n flag: '\\u{1F1F5}\\u{1F1ED}',\n theme: PH_THEME_CONFIG,\n coordinates: PHILIPPINES_PROVINCE_COORDINATES,\n mapCenter: PHILIPPINES_MAP_CENTER,\n macroRegions: PHILIPPINES_MACRO_REGIONS,\n geoJsonPath: '/maps/philippines.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'fil', name: 'Filipino', nativeName: 'Filipino', primary: true },\n { code: 'en-PH', name: 'English', nativeName: 'English' },\n ],\n currency: {\n code: 'PHP',\n numeric: '608',\n symbol: '\\u20b1',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'en-PH',\n dateFormat: 'MM/dd/yyyy',\n timeFormat: '12h',\n firstDayOfWeek: 0,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'barangay', 'city', 'province', 'postalCode'],\n template: '{number} {street}\\n{barangay}\\n{city}, {province} {postalCode}',\n postalCodeLabel: 'ZIP Code',\n postalCodePattern: '^\\\\d{4}$',\n stateLabel: 'Province',\n },\n tax: {\n name: 'VAT',\n standardRate: 12,\n },\n})\n\n// NZ — New Zealand\nregisterCountry({\n code: 'NZ',\n name: 'New Zealand',\n nativeName: 'Aotearoa',\n flag: '\\u{1F1F3}\\u{1F1FF}',\n theme: NZ_THEME_CONFIG,\n coordinates: NEW_ZEALAND_REGION_COORDINATES,\n mapCenter: NEW_ZEALAND_MAP_CENTER,\n macroRegions: NEW_ZEALAND_MACRO_REGIONS,\n geoJsonPath: '/maps/new-zealand.geo.json',\n projection: 'mercator',\n regionPropertyKey: 'code',\n languages: [\n { code: 'en-NZ', name: 'English', nativeName: 'English', primary: true },\n { code: 'mi', name: 'M\\u0101ori', nativeName: 'Te Reo M\\u0101ori' },\n ],\n currency: {\n code: 'NZD',\n numeric: '554',\n symbol: 'NZ$',\n decimal: '.',\n thousands: ',',\n symbolPosition: 'before',\n precision: 2,\n },\n locale: {\n defaultLocale: 'en-NZ',\n dateFormat: 'dd/MM/yyyy',\n timeFormat: '12h',\n firstDayOfWeek: 1,\n measurementSystem: 'metric',\n },\n address: {\n fields: ['street', 'number', 'suburb', 'city', 'postalCode'],\n template: '{number} {street}\\n{suburb}\\n{city} {postalCode}',\n postalCodeLabel: 'Postcode',\n postalCodePattern: '^\\\\d{4}$',\n stateLabel: 'Region',\n },\n tax: {\n name: 'GST',\n standardRate: 15,\n },\n})\n","import { ChevronLeftIcon, ChevronRightIcon } from \"@heroicons/react/20/solid\";\n\nexport interface PaginationMeta {\n page: number;\n limit?: number;\n pageSize?: number;\n total: number;\n totalPages: number;\n hasNext?: boolean;\n hasPrev?: boolean;\n}\n\nexport interface OffsetPaginationParams {\n page: number;\n limit: number;\n search?: string;\n}\n\ninterface DataPaginationProps {\n pagination: PaginationMeta;\n params?: OffsetPaginationParams;\n onUpdate: (params: Partial<OffsetPaginationParams>) => void;\n loading?: boolean;\n showPageSize?: boolean;\n pageSizeOptions?: number[];\n}\n\nexport function DataPagination({\n pagination,\n onUpdate,\n loading = false,\n showPageSize = false,\n pageSizeOptions = [10, 20, 50],\n params,\n}: DataPaginationProps) {\n const effectivePageSize = pagination.pageSize ?? pagination.limit ?? 10;\n const from = (pagination.page - 1) * effectivePageSize + 1;\n const to = Math.min(pagination.page * effectivePageSize, pagination.total);\n\n const handlePageChange = (page: number) => onUpdate({ page });\n const handlePageSizeChange = (value: string) => onUpdate({ limit: parseInt(value), page: 1 });\n\n if (pagination.totalPages <= 1 && !showPageSize) return null;\n\n return (\n <div className=\"flex flex-wrap items-center justify-between gap-3 rounded-2xl liquid-surface px-4 py-3\">\n {/* Count */}\n <p className=\"text-sm tabular-nums text-slate-600 dark:text-slate-400\">\n {from}–{to} / {pagination.total}\n </p>\n\n <div className=\"flex items-center gap-2\">\n {/* Page size selector */}\n {showPageSize && (\n <select\n value={params?.limit ?? effectivePageSize}\n onChange={(event) => handlePageSizeChange(event.target.value)}\n disabled={loading}\n className=\"rounded-xl liquid-surface px-2 py-1.5 text-xs font-medium text-slate-700 outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 dark:text-slate-300\"\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n )}\n\n {/* Page buttons */}\n {pagination.totalPages > 1 && (\n <nav className=\"flex items-center gap-1\" aria-label=\"Pagination\">\n <button\n type=\"button\"\n disabled={pagination.page <= 1 || loading}\n onClick={() => handlePageChange(pagination.page - 1)}\n className=\"inline-flex h-9 w-9 items-center justify-center rounded-xl text-slate-500 transition hover:bg-white/40 disabled:opacity-30 dark:text-slate-400 dark:hover:bg-white/[0.08]\"\n >\n <ChevronLeftIcon className=\"h-5 w-5\" />\n </button>\n\n {getPageNumbers(pagination.page, pagination.totalPages).map(\n (page, index) =>\n page === \"...\" ? (\n <span\n key={`ellipsis-${index}`}\n className=\"inline-flex h-9 w-6 items-center justify-center text-xs text-slate-500\"\n >\n …\n </span>\n ) : (\n <button\n key={`page-${page}`}\n type=\"button\"\n disabled={loading}\n onClick={() => handlePageChange(page as number)}\n aria-current={page === pagination.page ? \"page\" : undefined}\n className={`inline-flex h-9 min-w-9 items-center justify-center rounded-xl px-2 text-sm font-medium transition ${\n page === pagination.page\n ? \"liquid-surface liquid-surface-active text-slate-900 dark:text-white\"\n : \"text-slate-500 hover:bg-white/40 dark:text-slate-400 dark:hover:bg-white/[0.08]\"\n }`}\n >\n {page}\n </button>\n ),\n )}\n\n <button\n type=\"button\"\n disabled={pagination.page >= pagination.totalPages || loading}\n onClick={() => handlePageChange(pagination.page + 1)}\n className=\"inline-flex h-9 w-9 items-center justify-center rounded-xl text-slate-500 transition hover:bg-white/40 disabled:opacity-30 dark:text-slate-400 dark:hover:bg-white/[0.08]\"\n >\n <ChevronRightIcon className=\"h-5 w-5\" />\n </button>\n </nav>\n )}\n </div>\n </div>\n );\n}\n\nfunction getPageNumbers(\n currentPage: number,\n totalPages: number,\n): (number | string)[] {\n if (totalPages <= 7) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const pages: (number | string)[] = [1];\n\n if (currentPage <= 4) {\n for (let i = 2; i <= Math.min(5, totalPages); i++) pages.push(i);\n if (totalPages > 5) {\n pages.push(\"...\");\n pages.push(totalPages);\n }\n } else if (currentPage >= totalPages - 3) {\n pages.push(\"...\");\n for (let i = Math.max(totalPages - 4, 2); i <= totalPages; i++)\n pages.push(i);\n } else {\n pages.push(\"...\");\n for (let i = currentPage - 1; i <= currentPage + 1; i++) pages.push(i);\n pages.push(\"...\");\n pages.push(totalPages);\n }\n\n return pages;\n}\n","import React, { memo } from \"react\";\n\nimport clsx from \"clsx\";\n\ninterface PageHeaderProps {\n title: string;\n subtitle?: string;\n size?: \"default\" | \"large\";\n actions?: React.ReactNode;\n className?: string;\n children?: React.ReactNode;\n}\n\n/**\n * Unified Page Header Component\n *\n * Standardizes page header patterns across the application:\n * - Consistent typography sizing (text-2xl default, text-3xl large)\n * - Unified slate color palette with glass styling\n * - Mobile-responsive layout\n */\nexport const PageHeader = memo(function PageHeader({\n title,\n subtitle,\n size = \"default\",\n actions,\n className,\n children,\n}: PageHeaderProps) {\n return (\n <div className={clsx(\"mb-6 sm:mb-8\", className)}>\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4\">\n <div className=\"min-w-0 flex-1\">\n <h1\n className={clsx(\n \"font-bold text-slate-900 dark:text-slate-100 truncate\",\n size === \"large\" ? \"text-3xl\" : \"text-2xl\",\n )}\n >\n {title}\n </h1>\n {subtitle && (\n <p className=\"mt-2 text-sm text-slate-600 dark:text-slate-400 line-clamp-2\">\n {subtitle}\n </p>\n )}\n </div>\n\n {actions && (\n <div className=\"flex-shrink-0 flex items-center gap-2 flex-wrap\">\n {actions}\n </div>\n )}\n </div>\n\n {children && <div className=\"mt-4\">{children}</div>}\n </div>\n );\n});\n\n/**\n * Page Section Header - For subsections within pages\n */\nexport const PageSectionHeader = memo(function PageSectionHeader({\n title,\n subtitle,\n actions,\n className,\n children,\n}: Omit<PageHeaderProps, \"size\">) {\n return (\n <div className={clsx(\"mb-4\", className)}>\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3\">\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"text-lg sm:text-xl font-semibold text-slate-900 dark:text-slate-100\">\n {title}\n </h2>\n {subtitle && (\n <p className=\"mt-1 text-sm text-slate-600 dark:text-slate-400 line-clamp-2\">\n {subtitle}\n </p>\n )}\n </div>\n\n {actions && (\n <div className=\"flex-shrink-0 flex items-center gap-2 flex-wrap\">\n {actions}\n </div>\n )}\n </div>\n\n {children && <div className=\"mt-3\">{children}</div>}\n </div>\n );\n});\n\n/**\n * Card Section Header - For headers within cards or smaller sections\n */\nexport const CardSectionHeader = memo(function CardSectionHeader({\n title,\n subtitle,\n actions,\n className,\n children,\n}: Omit<PageHeaderProps, \"size\">) {\n return (\n <div className={clsx(\"mb-3\", className)}>\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2\">\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-base sm:text-lg font-medium text-slate-900 dark:text-slate-100\">\n {title}\n </h3>\n {subtitle && (\n <p className=\"mt-1 text-xs sm:text-sm text-slate-600 dark:text-slate-400 line-clamp-1\">\n {subtitle}\n </p>\n )}\n </div>\n\n {actions && (\n <div className=\"flex-shrink-0 flex items-center gap-1 flex-wrap\">\n {actions}\n </div>\n )}\n </div>\n\n {children && <div className=\"mt-2\">{children}</div>}\n </div>\n );\n});\n","import * as React from \"react\";\n\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\n\nimport clsx from \"clsx\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={clsx(\n \"inline-flex h-9 items-center justify-center rounded-lg bg-muted/50 p-0.5 text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={clsx(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={clsx(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className,\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import React from \"react\";\n\nimport { useTranslations } from \"next-intl\";\n\n// Optimized contact card component\n// Single responsibility: Display contact information efficiently\n\ninterface ContactCardProps {\n type: \"partnerships\" | \"press\" | \"careers\" | \"general\";\n email: string;\n phone: string;\n}\n\n// Memoized contact card to prevent unnecessary re-renders\nexport const ContactCard = React.memo<ContactCardProps>(function ContactCard({\n type,\n email,\n phone,\n}) {\n const t = useTranslations(\"contact\");\n\n return (\n <div className=\"rounded-2xl liquid-surface p-10\">\n <h3 className=\"text-base/7 font-semibold text-slate-900\">\n {t(type)}\n </h3>\n <dl className=\"mt-3 space-y-1 text-sm/6 text-slate-600\">\n <div>\n <dt className=\"sr-only\">Email</dt>\n <dd>\n <a href={`mailto:${email}`} className=\"font-semibold text-blue-600\">\n {email}\n </a>\n </dd>\n </div>\n <div className=\"mt-1\">\n <dt className=\"sr-only\">Telefone</dt>\n <dd>{phone}</dd>\n </div>\n </dl>\n </div>\n );\n});\n\n// Office location card with minimal DOM structure\ninterface OfficeCardProps {\n city: string;\n address: string;\n postalCode: string;\n}\n\nexport const OfficeCard = React.memo<OfficeCardProps>(function OfficeCard({\n city,\n address,\n postalCode,\n}) {\n return (\n <div className=\"rounded-2xl liquid-surface p-10\">\n <h3 className=\"text-base/7 font-semibold text-slate-900\">{city}</h3>\n <address className=\"mt-3 space-y-1 text-sm/6 text-slate-600 not-italic\">\n <p>{address}</p>\n <p>{postalCode}</p>\n </address>\n </div>\n );\n});\n\n// Contact section compound component pattern\ninterface ContactSectionProps {\n title: string;\n subtitle: string;\n children: React.ReactNode;\n}\n\nexport const ContactSection = React.memo<ContactSectionProps>(\n function ContactSection({ title, subtitle, children }) {\n return (\n <div className=\"grid grid-cols-1 gap-10 py-16 lg:grid-cols-3\">\n <div>\n <h2 className=\"text-4xl font-semibold tracking-tight text-pretty text-slate-900\">\n {title}\n </h2>\n <p className=\"mt-4 text-base/7 text-slate-600\">{subtitle}</p>\n </div>\n <div className=\"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:col-span-2 lg:gap-8\">\n {children}\n </div>\n </div>\n );\n },\n);\n","import * as React from \"react\";\n\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\n\nimport clsx from \"clsx\";\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={clsx(\n \"relative h-4 w-full overflow-hidden rounded-full bg-secondary\",\n className,\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n));\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport { Progress };\n","import type React from \"react\";\n\nimport * as Headless from \"@headlessui/react\";\nimport clsx from \"clsx\";\n\nexport function SwitchGroup({\n className,\n ...props\n}: React.ComponentPropsWithoutRef<\"div\">) {\n return (\n <div\n data-slot=\"control\"\n {...props}\n className={clsx(\n className,\n // Basic groups\n \"space-y-3 **:data-[slot=label]:font-normal\",\n // With descriptions\n \"has-data-[slot=description]:space-y-6 has-data-[slot=description]:**:data-[slot=label]:font-medium\",\n )}\n />\n );\n}\n\nexport function SwitchField({\n className,\n ...props\n}: { className?: string } & Omit<Headless.FieldProps, \"as\" | \"className\">) {\n return (\n <Headless.Field\n data-slot=\"field\"\n {...props}\n className={clsx(\n className,\n // Base layout\n \"grid grid-cols-[1fr_auto] gap-x-8 gap-y-1 sm:grid-cols-[1fr_auto]\",\n // Control layout\n \"*:data-[slot=control]:col-start-2 *:data-[slot=control]:self-start sm:*:data-[slot=control]:mt-0.5\",\n // Label layout\n \"*:data-[slot=label]:col-start-1 *:data-[slot=label]:row-start-1\",\n // Description layout\n \"*:data-[slot=description]:col-start-1 *:data-[slot=description]:row-start-2\",\n // With description\n \"has-data-[slot=description]:**:data-[slot=label]:font-medium\",\n )}\n />\n );\n}\n\nconst colors = {\n \"dark/zinc\": [\n \"[--switch-bg-ring:var(--color-slate-950)]/90 [--switch-bg:var(--color-slate-900)] dark:[--switch-bg-ring:transparent] dark:[--switch-bg:var(--color-white)]/25\",\n \"[--switch-ring:var(--color-slate-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white] dark:[--switch-ring:var(--color-slate-700)]/90\",\n ],\n \"dark/white\": [\n \"[--switch-bg-ring:var(--color-slate-950)]/90 [--switch-bg:var(--color-slate-900)] dark:[--switch-bg-ring:transparent] dark:[--switch-bg:var(--color-white)]\",\n \"[--switch-ring:var(--color-slate-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white] dark:[--switch-ring:transparent] dark:[--switch:var(--color-slate-900)]\",\n ],\n dark: [\n \"[--switch-bg-ring:var(--color-slate-950)]/90 [--switch-bg:var(--color-slate-900)] dark:[--switch-bg-ring:var(--color-white)]/15\",\n \"[--switch-ring:var(--color-slate-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white]\",\n ],\n zinc: [\n \"[--switch-bg-ring:var(--color-slate-700)]/90 [--switch-bg:var(--color-slate-600)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch-shadow:var(--color-black)]/10 [--switch:white] [--switch-ring:var(--color-slate-700)]/90\",\n ],\n white: [\n \"[--switch-bg-ring:var(--color-black)]/15 [--switch-bg:white] dark:[--switch-bg-ring:transparent]\",\n \"[--switch-shadow:var(--color-black)]/10 [--switch-ring:transparent] [--switch:var(--color-slate-950)]\",\n ],\n red: [\n \"[--switch-bg-ring:var(--color-red-700)]/90 [--switch-bg:var(--color-red-600)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch:white] [--switch-ring:var(--color-red-700)]/90 [--switch-shadow:var(--color-red-900)]/20\",\n ],\n orange: [\n \"[--switch-bg-ring:var(--color-orange-600)]/90 [--switch-bg:var(--color-orange-500)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch:white] [--switch-ring:var(--color-orange-600)]/90 [--switch-shadow:var(--color-orange-900)]/20\",\n ],\n amber: [\n \"[--switch-bg-ring:var(--color-amber-500)]/80 [--switch-bg:var(--color-amber-400)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-amber-950)]\",\n ],\n yellow: [\n \"[--switch-bg-ring:var(--color-yellow-400)]/80 [--switch-bg:var(--color-yellow-300)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-yellow-950)]\",\n ],\n lime: [\n \"[--switch-bg-ring:var(--color-lime-400)]/80 [--switch-bg:var(--color-lime-300)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-lime-950)]\",\n ],\n green: [\n \"[--switch-bg-ring:var(--color-green-700)]/90 [--switch-bg:var(--color-green-600)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch:white] [--switch-ring:var(--color-green-700)]/90 [--switch-shadow:var(--color-green-900)]/20\",\n ],\n emerald: [\n \"[--switch-bg-ring:var(--color-emerald-600)]/90 [--switch-bg:var(--color-emerald-500)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch:white] [--switch-ring:var(--color-emerald-600)]/90 [--switch-shadow:var(--color-emerald-900)]/20\",\n ],\n teal: [\n \"[--switch-bg-ring:var(--color-teal-700)]/90 [--switch-bg:var(--color-teal-600)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch:white] [--switch-ring:var(--color-teal-700)]/90 [--switch-shadow:var(--color-teal-900)]/20\",\n ],\n cyan: [\n \"[--switch-bg-ring:var(--color-cyan-400)]/80 [--switch-bg:var(--color-cyan-300)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-cyan-950)]\",\n ],\n sky: [\n \"[--switch-bg-ring:var(--color-sky-600)]/80 [--switch-bg:var(--color-sky-500)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch:white] [--switch-ring:var(--color-sky-600)]/80 [--switch-shadow:var(--color-sky-900)]/20\",\n ],\n blue: [\n \"[--switch-bg-ring:var(--color-blue-700)]/90 [--switch-bg:var(--color-blue-600)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch:white] [--switch-ring:var(--color-blue-700)]/90 [--switch-shadow:var(--color-blue-900)]/20\",\n ],\n indigo: [\n \"[--switch-bg-ring:var(--color-indigo-600)]/90 [--switch-bg:var(--color-indigo-500)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch:white] [--switch-ring:var(--color-indigo-600)]/90 [--switch-shadow:var(--color-indigo-900)]/20\",\n ],\n violet: [\n \"[--switch-bg-ring:var(--color-violet-600)]/90 [--switch-bg:var(--color-violet-500)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch:white] [--switch-ring:var(--color-violet-600)]/90 [--switch-shadow:var(--color-violet-900)]/20\",\n ],\n purple: [\n \"[--switch-bg-ring:var(--color-purple-600)]/90 [--switch-bg:var(--color-purple-500)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch:white] [--switch-ring:var(--color-purple-600)]/90 [--switch-shadow:var(--color-purple-900)]/20\",\n ],\n fuchsia: [\n \"[--switch-bg-ring:var(--color-fuchsia-600)]/90 [--switch-bg:var(--color-fuchsia-500)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch:white] [--switch-ring:var(--color-fuchsia-600)]/90 [--switch-shadow:var(--color-fuchsia-900)]/20\",\n ],\n pink: [\n \"[--switch-bg-ring:var(--color-pink-600)]/90 [--switch-bg:var(--color-pink-500)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch:white] [--switch-ring:var(--color-pink-600)]/90 [--switch-shadow:var(--color-pink-900)]/20\",\n ],\n rose: [\n \"[--switch-bg-ring:var(--color-rose-600)]/90 [--switch-bg:var(--color-rose-500)] dark:[--switch-bg-ring:transparent]\",\n \"[--switch:white] [--switch-ring:var(--color-rose-600)]/90 [--switch-shadow:var(--color-rose-900)]/20\",\n ],\n};\n\ntype Color = keyof typeof colors;\n\nexport function Switch({\n color = \"dark/zinc\",\n className,\n ...props\n}: {\n color?: Color;\n className?: string;\n} & Omit<Headless.SwitchProps, \"as\" | \"className\" | \"children\">) {\n return (\n <Headless.Switch\n data-slot=\"control\"\n {...props}\n className={clsx(\n className,\n // Base styles\n \"group relative isolate inline-flex h-6 w-10 cursor-default rounded-full p-[3px] sm:h-5 sm:w-8\",\n // Transitions\n \"transition duration-0 ease-in-out data-changing:duration-200\",\n // Outline and background color in forced-colors mode so switch is still visible\n \"forced-colors:outline forced-colors:[--switch-bg:Highlight] dark:forced-colors:[--switch-bg:Highlight]\",\n // Unchecked\n \"bg-slate-200 ring-1 ring-black/5 ring-inset dark:bg-white/5 dark:ring-white/15\",\n // Checked\n \"data-checked:bg-(--switch-bg) data-checked:ring-(--switch-bg-ring) dark:data-checked:bg-(--switch-bg) dark:data-checked:ring-(--switch-bg-ring)\",\n // Focus\n \"focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500\",\n // Hover\n \"data-hover:ring-black/15 data-hover:data-checked:ring-(--switch-bg-ring)\",\n \"dark:data-hover:ring-white/25 dark:data-hover:data-checked:ring-(--switch-bg-ring)\",\n // Disabled\n \"data-disabled:bg-slate-200 data-disabled:opacity-50 data-disabled:data-checked:bg-slate-200 data-disabled:data-checked:ring-black/5\",\n \"dark:data-disabled:bg-white/15 dark:data-disabled:data-checked:bg-white/15 dark:data-disabled:data-checked:ring-white/15\",\n // Color specific styles\n colors[color],\n )}\n >\n <span\n aria-hidden=\"true\"\n className={clsx(\n // Basic layout\n \"pointer-events-none relative inline-block size-4.5 rounded-full sm:size-3.5\",\n // Transition\n \"translate-x-0 transition duration-200 ease-in-out\",\n // Invisible border so the switch is still visible in forced-colors mode\n \"border border-transparent\",\n // Unchecked\n \"bg-white/90 backdrop-blur-sm shadow-sm ring-1 ring-black/5\",\n // Checked\n \"group-data-checked:bg-(--switch) group-data-checked:shadow-(--switch-shadow) group-data-checked:ring-(--switch-ring)\",\n \"group-data-checked:translate-x-4 sm:group-data-checked:translate-x-3\",\n // Disabled\n \"group-data-checked:group-data-disabled:bg-white group-data-checked:group-data-disabled:shadow-sm group-data-checked:group-data-disabled:ring-black/5\",\n )}\n />\n </Headless.Switch>\n );\n}\n","import type { ComponentType } from 'react'\nimport type { DockAction, DockMenuItem } from '../components/dock'\nimport type { LaunchpadItem, LaunchpadMenuItem } from '../components/launchpad-grid'\nimport type { FlyoutNavItem } from '../components/flyout-nav-grid'\nimport type { NavigationItem, NavigationMenuItem } from '../types/navigation'\n\n// Re-export the canonical types so consumers can import from this module\nexport type { NavigationItem, NavigationMenuItem } from '../types/navigation'\n\n// ============================================================================\n// Builder Functions\n// ============================================================================\n\ntype BuildDockActionsOptions = {\n showDashboard?: boolean\n dashboardPath?: string\n dashboardIcon?: ComponentType<{ className?: string }>\n dashboardLabel?: string\n contextualItems?: DockAction[]\n profileIcon?: ComponentType<{ className?: string }>\n profileLabel?: string\n signOutIcon?: ComponentType<{ className?: string }>\n signOutLabel?: string\n}\n\ntype BuildDockActionsHandlers = {\n navigate: (href: string) => void\n openProfile?: () => void\n onSignOut?: () => void\n}\n\ntype BuildDockActionsResult = {\n navigationActions: DockAction[]\n contextualActions: DockAction[]\n}\n\n/**\n * Converts NavigationItem[] to DockAction[] for the Dock component.\n *\n * - Auto-adds a dashboard item when `showDashboard` is true\n * - Sets `active` state based on pathname matching\n * - Adds profile + sign-out to contextual actions\n */\nexport function buildDockActions(\n items: NavigationItem[],\n pathname: string,\n handlers: BuildDockActionsHandlers,\n options: BuildDockActionsOptions = {},\n): BuildDockActionsResult {\n const {\n showDashboard = false,\n dashboardPath = '/dashboard',\n dashboardIcon,\n dashboardLabel = 'Dashboard',\n contextualItems = [],\n profileIcon,\n profileLabel = 'Profile',\n signOutIcon,\n signOutLabel = 'Sign Out',\n } = options\n\n const isActive = (href: string) =>\n href === dashboardPath ? pathname === dashboardPath : pathname.startsWith(href)\n\n const navigationActions: DockAction[] = []\n\n if (showDashboard && dashboardIcon) {\n navigationActions.push({\n id: 'dashboard',\n icon: dashboardIcon,\n label: dashboardLabel,\n href: dashboardPath,\n active: pathname === dashboardPath,\n onClick: () => handlers.navigate(dashboardPath),\n menuItems: [],\n })\n }\n\n for (const item of items) {\n const menuItems: DockMenuItem[] = item.menuItems.map((menuItem) => ({\n label: menuItem.label,\n icon: menuItem.icon,\n href: menuItem.href,\n onClick: menuItem.onClick,\n variant: menuItem.variant,\n }))\n\n navigationActions.push({\n id: item.id,\n icon: item.icon,\n label: item.name,\n href: item.href,\n active: isActive(item.href),\n onClick: item.onClick ?? (() => handlers.navigate(item.href)),\n menuItems,\n accentRgb: item.accentRgb,\n })\n }\n\n const contextualActions: DockAction[] = [...contextualItems]\n\n if (handlers.openProfile && profileIcon) {\n contextualActions.push({\n id: 'profile',\n icon: profileIcon,\n label: profileLabel,\n onClick: () => handlers.openProfile!(),\n menuItems: [],\n })\n }\n\n if (handlers.onSignOut && signOutIcon) {\n contextualActions.push({\n id: 'signout',\n icon: signOutIcon,\n label: signOutLabel,\n onClick: () => handlers.onSignOut!(),\n menuItems: [],\n })\n }\n\n return { navigationActions, contextualActions }\n}\n\n/**\n * Converts NavigationItem[] to LaunchpadItem[] for the LaunchpadGrid component.\n *\n * Maps gradient, shadow, badge, subtitle, and menuItems from NavigationItem\n * to the LaunchpadItem shape.\n */\nexport function buildLaunchpadItems(\n items: NavigationItem[],\n actionItems?: NavigationItem[],\n): LaunchpadItem[] {\n const convert = (item: NavigationItem): LaunchpadItem => {\n const menuItems: LaunchpadMenuItem[] = item.menuItems.map((menuItem) => ({\n label: menuItem.label,\n icon: menuItem.icon,\n href: menuItem.href,\n onClick: menuItem.onClick,\n }))\n\n return {\n id: item.id,\n name: item.name,\n href: item.href,\n icon: item.icon,\n gradient: item.gradient,\n shadow: item.shadow,\n subtitle: item.subtitle,\n menuItems,\n onClick: item.onClick,\n }\n }\n\n const result = items.map(convert)\n\n if (actionItems) {\n for (const action of actionItems) {\n result.push(convert(action))\n }\n }\n\n return result\n}\n\n/**\n * Converts NavigationItem[] to FlyoutNavItem[] for FlyoutNavGrid.\n *\n * Maps id, label, subtitle, href, icon, and gradient.\n */\nexport function buildFlyoutNavItems(items: NavigationItem[]): FlyoutNavItem[] {\n return items.map((item) => ({\n id: item.id,\n label: item.name,\n subtitle: item.subtitle,\n href: item.href,\n icon: item.icon,\n gradient: item.gradient,\n onClick: item.onClick,\n }))\n}\n\n/**\n * Filters NavigationItem[] by user permissions.\n *\n * - Items without a `permission` field are always included\n * - Wildcard `'*'` in `userPermissions` includes everything\n */\nexport function filterByPermission(\n items: NavigationItem[],\n userPermissions: string[],\n): NavigationItem[] {\n if (userPermissions.includes('*')) return items\n\n const permissionSet = new Set(userPermissions)\n\n return items.filter(\n (item) => !item.permission || permissionSet.has(item.permission),\n )\n}\n","import { useMemo, type ComponentType } from 'react'\nimport { DockContainer } from './dock-container'\nimport { LaunchpadGrid, type LaunchpadUserProfile } from './launchpad-grid'\nimport { FlyoutMenu } from './flyout-menu'\nimport { FlyoutNavGrid } from './flyout-nav-grid'\nimport { FlyoutQuickActions } from './flyout-quick-actions'\nimport {\n buildDockActions,\n buildLaunchpadItems,\n buildFlyoutNavItems,\n type NavigationItem,\n} from '../lib/navigation'\nimport type { DockAction } from './dock'\n\nexport type AppNavigationProps = {\n items: NavigationItem[]\n pathname: string\n\n // Dock\n dockEnabled?: boolean\n dockPosition?: 'left' | 'right' | 'bottom'\n dockAutoHide?: boolean\n\n // Launchpad\n showLaunchpad?: boolean\n launchpadUserProfile?: LaunchpadUserProfile | null\n launchpadActionItems?: NavigationItem[]\n launchpadActionsLabel?: string\n launchpadPageOrder?: string[]\n\n // Flyout\n flyoutOpen?: boolean\n onFlyoutClose?: () => void\n flyoutResolvedTheme?: 'light' | 'dark'\n onToggleTheme?: () => void\n\n // Handlers\n onNavigate: (href: string) => void\n onOpenProfile?: () => void\n onSignOut?: () => void\n onNotifications?: () => void\n onPrefetch?: (href: string) => void\n\n // Dashboard path for dock navigation\n dashboardPath?: string\n // Icons for built-in dock items\n dashboardIcon?: ComponentType<{ className?: string }>\n profileIcon?: ComponentType<{ className?: string }>\n signOutIcon?: ComponentType<{ className?: string }>\n\n // Extra contextual dock actions (notifications, theme, etc.)\n contextualDockActions?: DockAction[]\n\n // Custom launchpad item click handler (overrides default onNavigate)\n onLaunchpadItemClick?: (item: { href: string; id: string }) => void\n\n // Labels\n labels?: {\n home?: string\n profile?: string\n signOut?: string\n notifications?: string\n searchPlaceholder?: string\n actions?: string\n }\n\n notificationCount?: number\n userName?: string\n userInitial?: string\n}\n\nexport function AppNavigation({\n items,\n pathname,\n\n dockEnabled = true,\n dockPosition = 'left',\n dockAutoHide = false,\n\n showLaunchpad = false,\n launchpadUserProfile,\n launchpadActionItems,\n launchpadActionsLabel,\n launchpadPageOrder,\n\n flyoutOpen = false,\n onFlyoutClose,\n flyoutResolvedTheme,\n onToggleTheme,\n\n onNavigate,\n onOpenProfile,\n onSignOut,\n onNotifications,\n onPrefetch,\n\n dashboardPath,\n dashboardIcon,\n profileIcon,\n signOutIcon,\n\n contextualDockActions,\n\n onLaunchpadItemClick: externalLaunchpadItemClick,\n\n labels = {},\n notificationCount,\n userName,\n userInitial,\n}: AppNavigationProps) {\n const {\n home: dashboardLabel = 'Dashboard',\n profile: profileLabel = 'Profile',\n signOut: signOutLabel = 'Sign Out',\n actions: actionsLabel = 'Actions',\n } = labels\n\n // ── Dock ────────────────────────────────────────────────────────────\n\n const dockResult = useMemo(\n () =>\n buildDockActions(items, pathname, { navigate: onNavigate, openProfile: onOpenProfile, onSignOut }, {\n showDashboard: !!dashboardIcon,\n dashboardPath,\n dashboardIcon,\n dashboardLabel,\n contextualItems: contextualDockActions,\n profileIcon,\n profileLabel,\n signOutIcon,\n signOutLabel,\n }),\n [\n items, pathname, onNavigate, onOpenProfile, onSignOut,\n dashboardPath, dashboardIcon, dashboardLabel, contextualDockActions,\n profileIcon, profileLabel, signOutIcon, signOutLabel,\n ],\n )\n\n // ── Launchpad ───────────────────────────────────────────────────────\n\n const launchpadItems = useMemo(\n () => buildLaunchpadItems(items, launchpadActionItems),\n [items, launchpadActionItems],\n )\n\n const actionItemIds = useMemo(\n () => new Set((launchpadActionItems ?? []).map((item) => item.id)),\n [launchpadActionItems],\n )\n\n const pageOrder = useMemo(\n () => launchpadPageOrder ?? items.map((item) => item.id),\n [launchpadPageOrder, items],\n )\n\n // ── Flyout ──────────────────────────────────────────────────────────\n\n const flyoutNavItems = useMemo(() => buildFlyoutNavItems(items), [items])\n\n const getAccentRgb = useMemo(() => {\n const map = new Map(items.map((item) => [item.href, item.accentRgb]))\n return (href: string) => map.get(href) ?? '99, 102, 241'\n }, [items])\n\n const handleLaunchpadItemClick = useMemo(\n () => externalLaunchpadItemClick ?? ((item: { href: string; id: string }) => {\n onNavigate(item.href)\n }),\n [externalLaunchpadItemClick, onNavigate],\n )\n\n const handleFlyoutNavigate = useMemo(\n () => (href: string) => {\n onFlyoutClose?.()\n onNavigate(href)\n },\n [onFlyoutClose, onNavigate],\n )\n\n return (\n <>\n {/* Dock */}\n {dockEnabled && (\n <DockContainer\n navigationActions={dockResult.navigationActions}\n contextualActions={dockResult.contextualActions}\n position={dockPosition}\n autoHide={dockAutoHide}\n enabled={dockEnabled}\n />\n )}\n\n {/* Launchpad */}\n {showLaunchpad && (\n <LaunchpadGrid\n pageItems={launchpadItems.filter((item) => !actionItemIds.has(item.id))}\n actionItems={launchpadItems.filter((item) => actionItemIds.has(item.id))}\n actionItemIds={actionItemIds}\n pageOrder={pageOrder}\n userProfile={launchpadUserProfile}\n isHydrated={true}\n actionsLabel={launchpadActionsLabel ?? actionsLabel}\n onItemClick={handleLaunchpadItemClick}\n onPrefetch={onPrefetch}\n />\n )}\n\n {/* Flyout */}\n {onFlyoutClose && (\n <FlyoutMenu open={flyoutOpen} onClose={onFlyoutClose}>\n <div className=\"p-3 sm:p-4\">\n <FlyoutNavGrid\n items={flyoutNavItems}\n currentPath={pathname}\n onNavigate={handleFlyoutNavigate}\n getAccentRgb={getAccentRgb}\n />\n {flyoutResolvedTheme && onToggleTheme && onSignOut && (\n <FlyoutQuickActions\n resolvedTheme={flyoutResolvedTheme}\n onToggleTheme={onToggleTheme}\n onNotifications={onNotifications}\n notificationCount={notificationCount}\n onProfile={onOpenProfile ?? (() => {})}\n userName={userName}\n userInitial={userInitial}\n onSignOut={onSignOut}\n onClose={onFlyoutClose}\n />\n )}\n </div>\n </FlyoutMenu>\n )}\n </>\n )\n}\n","/**\n * Platform Shell Store (Zustand)\n * ==============================\n * Single source of truth for all shell UI state across apps.\n * Replaces prop-drilling and local useState for drawers, flyout,\n * preferences, user info, and notifications.\n *\n * Usage:\n * import { usePlatformShellStore } from '@datatechsolutions/ui'\n * const openProfile = usePlatformShellStore((s) => s.openProfile)\n */\n\nimport { create } from 'zustand'\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport type ShellUser = {\n name?: string | null\n email?: string | null\n image?: string | null\n role?: string | null\n permissions?: string[]\n organizationId?: string | null\n}\n\nexport type ShellPreferences = {\n locale: string\n localeFlag?: string\n localeName?: string\n theme: 'light' | 'dark' | 'system'\n resolvedTheme: 'light' | 'dark'\n dockPosition: 'left' | 'right' | 'bottom' | 'top'\n dockAutoHide: boolean\n dockEnabled: boolean\n}\n\nexport type ShellLabels = {\n home?: string\n profile?: string\n signOut?: string\n signOutConfirmTitle?: string\n cancel?: string\n notifications?: string\n theme?: string\n currentTheme?: string\n language?: string\n currentLocale?: string\n localeFlag?: string\n actions?: string\n}\n\n// ── Store ────────────────────────────────────────────────────────────────────\n\nexport type PlatformShellState = {\n // ── Drawers & modals ─────────────────────────────────────────\n profileDrawerOpen: boolean\n flyoutOpen: boolean\n signOutConfirmOpen: boolean\n settingsModalOpen: boolean\n settingsSection: string\n\n // ── User ─────────────────────────────────────────────────────\n user: ShellUser | null\n authStatus: 'loading' | 'authenticated' | 'unauthenticated'\n\n // ── Preferences ──────────────────────────────────────────────\n preferences: ShellPreferences\n\n // ── Notifications ────────────────────────────────────────────\n notificationCount: number\n\n // ── Labels (i18n) ────────────────────────────────────────────\n labels: ShellLabels\n\n // ── Branding ─────────────────────────────────────────────────\n appName: string\n appGradient: string\n\n // ── Callbacks (set by the shell wrapper, called by any component) ──\n _onSignOut: (() => void) | null\n _onToggleTheme: (() => void) | null\n _onNavigate: ((href: string) => void) | null\n _onNotifications: (() => void) | null\n _onLanguageChange: ((locale: string) => void) | null\n\n // ── Actions ──────────────────────────────────────────────────\n openProfile: () => void\n closeProfile: () => void\n openSettings: (section?: string) => void\n closeSettings: () => void\n openFlyout: () => void\n closeFlyout: () => void\n requestSignOut: () => void\n cancelSignOut: () => void\n confirmSignOut: () => void\n toggleTheme: () => void\n changeLanguage: (locale: string) => void\n navigate: (href: string) => void\n openNotifications: () => void\n\n // ── Setters (called by shell wrapper to sync state) ──────────\n setUser: (user: ShellUser | null) => void\n setAuthStatus: (status: 'loading' | 'authenticated' | 'unauthenticated') => void\n setPreferences: (prefs: Partial<ShellPreferences>) => void\n setNotificationCount: (count: number) => void\n setLabels: (labels: ShellLabels) => void\n setBranding: (appName: string, appGradient: string) => void\n registerCallbacks: (callbacks: {\n onSignOut?: () => void\n onToggleTheme?: () => void\n onNavigate?: (href: string) => void\n onNotifications?: () => void\n onLanguageChange?: (locale: string) => void\n }) => void\n}\n\nexport const usePlatformShellStore = create<PlatformShellState>((set, get) => ({\n // ── Initial state ──────────────────────────────────────────────\n profileDrawerOpen: false,\n flyoutOpen: false,\n signOutConfirmOpen: false,\n settingsModalOpen: false,\n settingsSection: 'workspace',\n\n user: null,\n authStatus: 'loading',\n\n preferences: {\n locale: 'en',\n theme: 'system',\n resolvedTheme: 'dark',\n dockPosition: 'left',\n dockAutoHide: false,\n dockEnabled: true,\n },\n\n notificationCount: 0,\n labels: {},\n appName: '',\n appGradient: '',\n\n _onSignOut: null,\n _onToggleTheme: null,\n _onNavigate: null,\n _onNotifications: null,\n _onLanguageChange: null,\n\n // ── Actions ────────────────────────────────────────────────────\n openProfile: () => set({ profileDrawerOpen: true }),\n closeProfile: () => set({ profileDrawerOpen: false }),\n openSettings: (section?: string) => set({ settingsModalOpen: true, settingsSection: section ?? 'workspace' }),\n closeSettings: () => set({ settingsModalOpen: false }),\n openFlyout: () => set({ flyoutOpen: true }),\n closeFlyout: () => set({ flyoutOpen: false }),\n\n requestSignOut: () => set({ signOutConfirmOpen: true }),\n cancelSignOut: () => set({ signOutConfirmOpen: false }),\n confirmSignOut: () => {\n set({ signOutConfirmOpen: false })\n get()._onSignOut?.()\n },\n\n toggleTheme: () => get()._onToggleTheme?.(),\n\n changeLanguage: (locale: string) => {\n const callback = get()._onLanguageChange\n if (callback) {\n callback(locale)\n } else {\n // Default: update the shared locale cookie and reload\n if (typeof document !== 'undefined') {\n document.cookie = `platform-locale=${locale}; path=/; max-age=31536000; SameSite=Lax`\n window.location.reload()\n }\n }\n },\n\n navigate: (href: string) => get()._onNavigate?.(href),\n openNotifications: () => get()._onNotifications?.(),\n\n // ── Setters ────────────────────────────────────────────────────\n setUser: (user) => set({ user }),\n setAuthStatus: (authStatus) => set({ authStatus }),\n setPreferences: (prefs) => set((state) => ({\n preferences: { ...state.preferences, ...prefs },\n })),\n setNotificationCount: (notificationCount) => set({ notificationCount }),\n setLabels: (labels) => set({ labels }),\n setBranding: (appName, appGradient) => set({ appName, appGradient }),\n registerCallbacks: (callbacks) => set({\n _onSignOut: callbacks.onSignOut ?? null,\n _onToggleTheme: callbacks.onToggleTheme ?? null,\n _onNavigate: callbacks.onNavigate ?? null,\n _onNotifications: callbacks.onNotifications ?? null,\n _onLanguageChange: callbacks.onLanguageChange ?? null,\n }),\n}))\n\n// ── Derived selectors ────────────────────────────────────────────────────────\n\nexport const selectUserName = (state: PlatformShellState) =>\n state.user?.name ?? state.user?.email ?? undefined\n\nexport const selectUserInitial = (state: PlatformShellState) =>\n (state.user?.name?.trim()?.[0] ?? state.user?.email?.trim()?.[0] ?? 'U').toUpperCase()\n\nexport const selectIsAuthenticated = (state: PlatformShellState) =>\n state.authStatus === 'authenticated'\n\nexport const selectShowShellChrome = (state: PlatformShellState) =>\n state.authStatus === 'authenticated'\n","// =============================================================================\n// @datatechsolutions/ui — PlatformShell\n// Unified shell component that consolidates AppShell/navigation/profile wiring\n// across all platform apps. Accepts all dynamic values as props so it has no\n// dependency on windsock, next.js, or next-intl.\n// =============================================================================\n\nimport { useEffect, useCallback, useMemo, useRef, Suspense, type ComponentType, type ReactNode } from 'react'\nimport { usePlatformShellStore, selectUserName, selectUserInitial } from '@ui/stores/platform-shell-store'\nimport { NavigationProgress } from '@ui/components/navigation-progress'\nimport { Breadcrumb, type BreadcrumbPage } from '@ui/components/breadcrumb'\nimport { AppNavigation } from '@ui/components/app-navigation'\nimport { BrandedLoader } from '@ui/components/branded-loader'\nimport { DevModeBanner } from '@ui/components/dev-mode-banner'\nimport { filterByPermission, buildFlyoutNavItems, type NavigationItem } from '@ui/lib/navigation'\nimport { FlyoutMenu } from '@ui/components/flyout-menu'\nimport { FlyoutNavGrid } from '@ui/components/flyout-nav-grid'\nimport { FlyoutQuickActions } from '@ui/components/flyout-quick-actions'\nimport { DynamicIslandConfirm } from '@ui/components/dynamic-island-confirm'\nimport { ArrowRightOnRectangleIcon } from '@heroicons/react/24/outline'\nimport { Squares2X2Icon, UserCircleIcon, BellIcon, ChevronDownIcon, SunIcon, MoonIcon, GlobeAltIcon } from '@heroicons/react/24/outline'\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport type PlatformShellUser = {\n name?: string | null\n email?: string | null\n image?: string | null\n role?: string | null\n permissions?: string[]\n organizationId?: string | null\n}\n\nexport type PlatformShellLabels = {\n home?: string\n profile?: string\n signOut?: string\n signOutConfirmTitle?: string\n cancel?: string\n notifications?: string\n theme?: string\n currentTheme?: string\n language?: string\n currentLocale?: string\n /** Flag emoji or element for the current locale (e.g. '🇧🇷') */\n localeFlag?: string\n actions?: string\n searchPlaceholder?: string\n}\n\nexport type PlatformShellProps = {\n /** Navigable items for dock, launchpad, and flyout */\n items: NavigationItem[]\n /** Additional action items for the launchpad only */\n launchpadActionItems?: NavigationItem[]\n /** Custom ordering of launchpad page tiles */\n launchpadPageOrder?: string[]\n\n // ── Auth ───────────────────────────────────────────────────────────────\n /** Current user (null when not authenticated) */\n user: PlatformShellUser | null\n /** Auth loading state */\n authStatus: 'loading' | 'authenticated' | 'unauthenticated'\n /** Sign-out callback */\n onSignOut: () => void\n\n // ── Preferences ────────────────────────────────────────────────────────\n /** Dock position preference */\n dockPosition?: 'left' | 'right' | 'bottom' | 'top'\n /** Whether the dock auto-hides */\n dockAutoHide?: boolean\n /** Whether the dock is enabled */\n dockEnabled?: boolean\n /** Resolved theme for the flyout quick-actions */\n resolvedTheme?: 'light' | 'dark'\n /** Toggle dark/light theme */\n onToggleTheme?: () => void\n\n // ── Navigation ─────────────────────────────────────────────────────────\n /** Current pathname */\n pathname: string\n /** Programmatic navigation callback */\n onNavigate: (href: string) => void\n /** Optional prefetch callback */\n onPrefetch?: (href: string) => void\n /** Dashboard pathname to detect when to show launchpad (default: '/dashboard') */\n dashboardPath?: string\n /** Paths where the shell chrome (breadcrumb, dock, flyout) should NOT render */\n publicPaths?: string[]\n\n // ── Branding ───────────────────────────────────────────────────────────\n /** App display name (e.g. \"Kori ERP\") */\n appName: string\n /** App icon element for the branded loader */\n appIcon: ReactNode\n /**\n * When the app icon already carries its own background (a brand SVG\n * with a gradient/fill baked in), set this so the BrandedLoader skips\n * wrapping it in a second gradient container.\n */\n appIconRaw?: boolean\n /** Custom logo element for the flyout trigger (replaces default icon+name button) */\n appLogo?: ReactNode\n /** Gradient class (e.g. \"from-blue-500 to-indigo-600\") */\n appGradient: string\n /** Accent ring class (e.g. \"ring-indigo-500/70/30\") */\n appAccentRing?: string\n\n // ── Dock icons ─────────────────────────────────────────────────────────\n /** Icon for the dashboard dock button */\n dashboardIcon?: ComponentType<{ className?: string }>\n /** Icon for the profile dock button */\n profileIcon?: ComponentType<{ className?: string }>\n /** Icon for the sign-out dock button */\n signOutIcon?: ComponentType<{ className?: string }>\n\n // ── Slots ──────────────────────────────────────────────────────────────\n /** Page content */\n children: ReactNode\n /** Content rendered inside the profile drawer (app-specific controls) */\n profileDrawerContent?: ReactNode\n /** Profile drawer render prop — receives open state + close handler */\n profileDrawer?: (props: { open: boolean; onClose: () => void }) => ReactNode\n /** Extra content rendered before children (initializers, data loaders, etc.) */\n initializers?: ReactNode\n /** Extra content rendered after the main layout (FABs, modals, etc.) */\n extras?: ReactNode\n /** Custom breadcrumb/header bar */\n headerContent?: ReactNode\n\n // ── Labels ─────────────────────────────────────────────────────────────\n labels?: PlatformShellLabels\n\n // ── Notifications ──────────────────────────────────────────────────────\n /** Number of unread notifications */\n notificationCount?: number\n /** Open notification history */\n onNotifications?: () => void\n /** Open language selector */\n onLanguage?: () => void\n}\n\nexport function PlatformShell({\n items,\n launchpadActionItems,\n launchpadPageOrder,\n\n user,\n authStatus,\n onSignOut,\n\n dockPosition = 'left',\n dockAutoHide = false,\n dockEnabled = true,\n resolvedTheme,\n onToggleTheme,\n\n pathname,\n onNavigate,\n onPrefetch,\n dashboardPath = '/dashboard',\n publicPaths = [],\n\n appName,\n appIcon,\n appIconRaw,\n appLogo,\n appGradient,\n appAccentRing,\n\n dashboardIcon,\n profileIcon,\n signOutIcon,\n\n children,\n profileDrawerContent: _profileDrawerContent,\n profileDrawer,\n initializers,\n extras,\n headerContent,\n\n labels = {},\n\n notificationCount,\n onNotifications,\n onLanguage,\n}: PlatformShellProps) {\n // ── Zustand store ────────────────────────────────────────────────────\n const store = usePlatformShellStore()\n\n // Sync props into store via ref (avoids re-render loop)\n const callbacksRef = useRef({ onSignOut, onToggleTheme, onNavigate, onNotifications, onLanguage })\n callbacksRef.current = { onSignOut, onToggleTheme, onNavigate, onNotifications, onLanguage }\n\n // Register callbacks once on mount\n useEffect(() => {\n store.registerCallbacks({\n onSignOut: () => callbacksRef.current.onSignOut(),\n onToggleTheme: () => callbacksRef.current.onToggleTheme?.(),\n onNavigate: (href: string) => callbacksRef.current.onNavigate(href),\n onNotifications: () => callbacksRef.current.onNotifications?.(),\n onLanguageChange: callbacksRef.current.onLanguage ? () => callbacksRef.current.onLanguage!() : undefined,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n // Sync user/auth\n useEffect(() => {\n store.setUser(user)\n store.setAuthStatus(authStatus)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [user?.email, user?.role, authStatus])\n\n // Sync preferences\n useEffect(() => {\n store.setPreferences({\n locale: labels.currentLocale ?? 'en',\n localeFlag: labels.localeFlag,\n localeName: labels.currentLocale,\n resolvedTheme: resolvedTheme ?? 'dark',\n dockPosition: dockPosition ?? 'left',\n dockAutoHide: dockAutoHide ?? false,\n dockEnabled: dockEnabled ?? true,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [resolvedTheme, dockPosition, dockAutoHide, dockEnabled, labels.currentLocale])\n\n // Sync notifications + labels + branding\n useEffect(() => {\n store.setNotificationCount(notificationCount ?? 0)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [notificationCount])\n\n useEffect(() => {\n store.setLabels(labels)\n store.setBranding(appName, appGradient)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [appName, appGradient])\n\n // Read state from store\n const profileOpen = store.profileDrawerOpen\n const openProfile = store.openProfile\n const closeProfile = store.closeProfile\n const flyoutOpen = store.flyoutOpen\n const closeFlyout = store.closeFlyout\n const signOutConfirmOpen = store.signOutConfirmOpen\n const requestSignOut = store.requestSignOut\n const cancelSignOut = store.cancelSignOut\n const confirmSignOut = store.confirmSignOut\n\n // ── Permission filtering ──────────────────────────────────────────────\n const filteredItems = useMemo(\n () => filterByPermission(items, user?.permissions ?? []),\n [items, user?.permissions],\n )\n\n // ── User display values (from store selectors) ───────────────────────\n const userName = usePlatformShellStore(selectUserName)\n const userInitial = usePlatformShellStore(selectUserInitial)\n\n // ── Launchpad user profile ────────────────────────────────────────────\n const launchpadUserProfile = useMemo(() => {\n if (!user) return null\n return {\n name: user.name ?? undefined,\n email: user.email ?? undefined,\n picture: user.image ?? undefined,\n role: user.role ?? undefined,\n }\n }, [user, userInitial])\n\n // ── Built-in launchpad action items (reads from store) ───────────────\n const storeLabels = store.labels\n const storeNotifications = store.notificationCount\n const storePrefs = store.preferences\n const storeUser = store.user\n\n const builtInActionItems = useMemo((): NavigationItem[] => {\n const actions: NavigationItem[] = []\n\n actions.push({\n id: '__notifications',\n name: storeLabels.notifications ?? 'Notifications',\n href: '#notifications',\n icon: BellIcon,\n gradient: 'from-orange-400 to-amber-500',\n accentRgb: '249, 115, 22',\n shadow: 'shadow-orange-500/30',\n subtitle: '',\n badge: storeNotifications,\n menuItems: [],\n })\n\n const flagSrc = storePrefs.localeFlag ?? storeLabels.localeFlag\n const FlagIcon = ({ className: _className }: { className?: string }) => (\n flagSrc\n ? <img src={flagSrc} alt=\"\" className=\"absolute inset-0 h-full w-full rounded-[22px] object-cover\" />\n : <GlobeAltIcon className={_className} />\n )\n\n actions.push({\n id: '__language',\n name: storePrefs.localeName ?? storeLabels.currentLocale ?? storeLabels.language ?? 'Language',\n href: '#language',\n icon: FlagIcon,\n gradient: flagSrc ? 'from-transparent to-transparent' : 'from-emerald-400 to-teal-500',\n accentRgb: '20, 184, 166',\n shadow: flagSrc ? 'shadow-none' : 'shadow-teal-500/30',\n subtitle: '',\n menuItems: [],\n })\n\n actions.push({\n id: '__theme',\n name: storeLabels.theme ?? 'Theme',\n href: '#theme',\n icon: storePrefs.resolvedTheme === 'dark' ? MoonIcon : SunIcon,\n gradient: storePrefs.resolvedTheme === 'dark' ? 'from-indigo-400 to-violet-500' : 'from-sky-400 to-cyan-500',\n accentRgb: storePrefs.resolvedTheme === 'dark' ? '99, 102, 241' : '6, 182, 212',\n shadow: storePrefs.resolvedTheme === 'dark' ? 'shadow-indigo-500/30' : 'shadow-cyan-500/30',\n subtitle: storeLabels.currentTheme ?? '',\n menuItems: [],\n })\n\n actions.push({\n id: 'profile',\n name: storeUser?.name ?? storeUser?.email ?? storeLabels.profile ?? 'Profile',\n href: '#profile',\n icon: UserCircleIcon,\n gradient: 'from-gray-400 to-slate-500',\n accentRgb: '100, 116, 139',\n shadow: 'shadow-slate-500/30',\n subtitle: '',\n menuItems: [],\n })\n\n actions.push({\n id: '__signout',\n name: storeLabels.signOut ?? 'Sign Out',\n href: '#signout',\n icon: ArrowRightOnRectangleIcon,\n gradient: 'from-red-500 to-red-600',\n accentRgb: '239, 68, 68',\n shadow: 'shadow-red-500/30',\n subtitle: '',\n menuItems: [],\n })\n\n return actions\n }, [storeLabels, storeNotifications, storePrefs.localeFlag, storePrefs.localeName, storePrefs.resolvedTheme, storeUser?.name, storeUser?.email])\n\n // Merge all items into a single flat grid (iPad-style — no divider)\n const allLaunchpadItems = useMemo(\n () => [\n ...filteredItems.map((item) => ({ ...item, subtitle: '' })),\n ...(launchpadActionItems ?? []),\n ...builtInActionItems,\n ],\n [filteredItems, launchpadActionItems, builtInActionItems],\n )\n\n // Handle launchpad item clicks — all actions go through store\n const handleLaunchpadItemClick = useCallback((item: { href: string; id: string }) => {\n switch (item.id) {\n case '__notifications': store.openNotifications(); break\n case '__language': store.openProfile(); break\n case '__theme': store.toggleTheme(); break\n case 'profile': store.openProfile(); break\n case '__signout': store.requestSignOut(); break\n default: onNavigate(item.href)\n }\n }, [onNotifications, onLanguage, onToggleTheme, openProfile, requestSignOut, onNavigate])\n\n // Flyout nav items\n const flyoutNavItems = useMemo(() => buildFlyoutNavItems(filteredItems), [filteredItems])\n\n const getAccentRgb = useMemo(() => {\n const map = new Map(filteredItems.map((item) => [item.href, item.accentRgb]))\n return (href: string) => map.get(href) ?? '99, 102, 241'\n }, [filteredItems])\n\n // Build breadcrumb pages from pathname (must be before any early return)\n const breadcrumbPages = useMemo((): BreadcrumbPage[] => {\n const segments = pathname.split('/').filter(Boolean)\n return segments.map((segment, index) => ({\n name: segment.charAt(0).toUpperCase() + segment.slice(1).replace(/-/g, ' '),\n href: '/' + segments.slice(0, index + 1).join('/'),\n current: index === segments.length - 1,\n }))\n }, [pathname])\n\n // ── Loading state ─────────────────────────────────────────────────────\n if (authStatus === 'loading') {\n return (\n <BrandedLoader\n icon={appIcon}\n rawIcon={appIconRaw}\n appName={appName}\n gradient={appGradient}\n accentRing={appAccentRing}\n label=\"\"\n />\n )\n }\n\n const showLaunchpad = pathname === dashboardPath\n const isPublicPath = publicPaths.some((publicPath) => pathname === publicPath || pathname.startsWith(publicPath + '/'))\n const showShellChrome = authStatus === 'authenticated' && !isPublicPath\n\n // Public pages or unauthenticated — no shell chrome, just render children\n if (!showShellChrome) {\n return (\n <div>\n <NavigationProgress />\n {children}\n </div>\n )\n }\n\n return (\n <div data-layout=\"dashboard\" className=\"min-h-screen flex flex-col dark:bg-gray-950\">\n {/* Initializers (data loaders, currency sync, etc.) */}\n {initializers}\n\n {/* Page transition progress bar */}\n <NavigationProgress />\n\n {/* Dev mode warning banner */}\n <DevModeBanner\n user={user ? { email: user.email ?? undefined, role: user.role ?? undefined } : undefined}\n />\n\n {/* Header bar with flyout trigger + breadcrumbs (hidden on dashboard) */}\n {headerContent ?? (breadcrumbPages.length > 0 && !showLaunchpad && (\n <Breadcrumb\n pages={breadcrumbPages}\n dashboardPath={dashboardPath}\n centerContent={\n <>\n <button\n type=\"button\"\n onClick={store.openFlyout}\n className=\"inline-flex items-center gap-0 rounded-full px-2 py-1 hover:bg-white/55 dark:hover:bg-white/10\"\n >\n {appLogo ?? (\n <span className={`flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br ${appGradient} text-white shadow-sm`}>\n <span className=\"h-4 w-4\">{appIcon}</span>\n </span>\n )}\n <ChevronDownIcon className=\"-ml-0.5 h-3.5 w-3.5 text-slate-500 dark:text-slate-300\" />\n </button>\n {/* Flyout menu rendered here, anchored to the trigger */}\n <FlyoutMenu\n open={flyoutOpen}\n onClose={closeFlyout}\n title={appLogo ?? (\n <span className=\"inline-flex items-center gap-2\">\n <span className={`flex h-9 w-9 items-center justify-center rounded-lg bg-gradient-to-br ${appGradient} text-white shadow-sm`}>\n <span className=\"h-5 w-5\">{appIcon}</span>\n </span>\n <span className=\"text-sm font-semibold text-gray-900 dark:text-white\">{appName}</span>\n </span>\n )}\n >\n <FlyoutNavGrid\n items={flyoutNavItems}\n currentPath={pathname}\n onNavigate={(href) => {\n closeFlyout()\n onNavigate(href)\n }}\n getAccentRgb={getAccentRgb}\n />\n {resolvedTheme && onToggleTheme && (\n <FlyoutQuickActions\n resolvedTheme={resolvedTheme}\n onToggleTheme={onToggleTheme}\n onNotifications={onNotifications ? () => { onNotifications(); closeFlyout() } : undefined}\n notificationCount={notificationCount}\n onProfile={() => { openProfile(); closeFlyout() }}\n userName={userName}\n userInitial={userInitial}\n onSignOut={() => { closeFlyout(); requestSignOut() }}\n onClose={closeFlyout}\n />\n )}\n </FlyoutMenu>\n </>\n }\n />\n ))}\n\n {/* Main content area */}\n <main className={`flex-1 ${showLaunchpad ? 'flex flex-col items-center justify-center' : 'pb-8 md:pb-24'}`}>\n {showLaunchpad ? (\n /* Dashboard: centered logo (children) + launchpad together */\n <div className=\"mx-auto flex w-full max-w-6xl flex-col items-center justify-center min-h-[calc(100vh-10rem)]\">\n {children}\n <div className=\"w-full\">\n <AppNavigation\n items={allLaunchpadItems}\n pathname={pathname}\n dockEnabled={false}\n showLaunchpad={true}\n launchpadUserProfile={launchpadUserProfile}\n onLaunchpadItemClick={handleLaunchpadItemClick}\n onNavigate={onNavigate}\n onOpenProfile={openProfile}\n onSignOut={requestSignOut}\n onNotifications={onNotifications}\n labels={labels}\n notificationCount={notificationCount}\n userName={userName}\n userInitial={userInitial}\n />\n </div>\n </div>\n ) : (\n /* Non-dashboard: padded content, full-width. Pages own their\n own max-width if they need one (the workflow canvas, for\n example, needs 100vw — so we don't cap here at the shell). */\n <div className=\"px-4 py-6 sm:px-6 lg:px-8\">\n <div className=\"w-full\">\n <Suspense\n fallback={\n <BrandedLoader\n icon={appIcon}\n rawIcon={appIconRaw}\n appName={appName}\n gradient={appGradient}\n accentRing={appAccentRing}\n label=\"\"\n compact\n />\n }\n >\n {children}\n </Suspense>\n </div>\n </div>\n )}\n </main>\n\n {/* Dock (non-dashboard pages only) */}\n <AppNavigation\n items={filteredItems}\n pathname={pathname}\n dockEnabled={dockEnabled && !showLaunchpad}\n dockPosition={dockPosition as 'left' | 'right' | 'bottom'}\n dockAutoHide={dockAutoHide}\n showLaunchpad={false}\n onLaunchpadItemClick={handleLaunchpadItemClick}\n onNavigate={onNavigate}\n onOpenProfile={openProfile}\n onSignOut={requestSignOut}\n onNotifications={onNotifications}\n onPrefetch={onPrefetch}\n dashboardPath={dashboardPath}\n dashboardIcon={dashboardIcon ?? Squares2X2Icon}\n profileIcon={profileIcon ?? UserCircleIcon}\n signOutIcon={signOutIcon ?? ArrowRightOnRectangleIcon}\n contextualDockActions={[\n ...(onNotifications ? [{\n id: 'notifications',\n icon: BellIcon,\n label: labels.notifications ?? 'Notifications',\n onClick: onNotifications,\n badge: notificationCount,\n menuItems: [],\n }] : []),\n ]}\n labels={labels}\n notificationCount={notificationCount}\n userName={userName}\n userInitial={userInitial}\n />\n\n {/* Profile drawer — rendered via render prop for framework independence */}\n {profileDrawer?.({ open: profileOpen, onClose: closeProfile })}\n\n {/* Sign-out confirmation */}\n <DynamicIslandConfirm\n open={signOutConfirmOpen}\n onClose={cancelSignOut}\n onConfirm={confirmSignOut}\n appName={appName}\n title={labels.signOutConfirmTitle ?? 'Sign out?'}\n icon={<ArrowRightOnRectangleIcon className=\"h-5 w-5 text-white\" />}\n iconBackground=\"bg-ios-red\"\n confirmLabel={labels.signOut ?? 'Sign Out'}\n cancelLabel={labels.cancel ?? 'Cancel'}\n />\n\n {/* Extra app-specific UI (FABs, modals, toasts) */}\n {extras}\n </div>\n )\n}\n","/**\n * SkipToContent — Accessibility skip navigation link\n *\n * Hidden by default, becomes visible on focus (Tab key).\n * Allows keyboard users to skip past navigation and jump to main content.\n *\n * Usage in app layout:\n * <SkipToContent targetId=\"main-content\" />\n * <nav>...</nav>\n * <main id=\"main-content\">...</main>\n */\n\ninterface SkipToContentProps {\n /** The id of the main content element to skip to */\n targetId?: string\n /** Custom label text */\n label?: string\n}\n\nexport function SkipToContent({\n targetId = 'main-content',\n label = 'Skip to main content',\n}: SkipToContentProps) {\n return (\n <a\n href={`#${targetId}`}\n className=\"sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-[9999] focus:rounded-lg focus:bg-white focus:px-4 focus:py-2 focus:text-sm focus:font-semibold focus:text-indigo-600 focus:shadow-lg focus:ring-2 focus:ring-indigo-500 focus:outline-none dark:focus:bg-gray-800 dark:focus:text-indigo-400\"\n data-testid=\"skip-to-content\"\n >\n {label}\n </a>\n )\n}\n","// =============================================================================\n// packages/ui — Internal auth shim\n// =============================================================================\n//\n// Some platform components in this package (settings modal, user menu,\n// impersonation banner, social-provider picker, theme toggle) consume an\n// auth context. Historically that came from `@datatechsolutions/windsock/client`,\n// which is now dead — auth lives in-tree at `apps/astrlabe/lib/auth`.\n//\n// To avoid inverting the dependency direction (ui depends on astrlabe = bad),\n// this shim defines the minimal shape ui needs and expects the consuming\n// app to provide concrete implementations via React context. Astrlabe wires\n// its `lib/auth` AuthProvider AND a `<UiAuthProvider value={...}>` so both\n// surfaces stay in sync.\n//\n// If a consumer doesn't wire the provider, `useAuth()` returns `null`-ish\n// defaults so components degrade gracefully (no avatar, no impersonation\n// banner, etc.) instead of throwing.\n\nimport { createContext, useContext } from 'react'\n\n// ── Types (match the shape windsock used to expose) ────────────────\n\nexport interface AuthUser {\n sub: string\n email: string\n name: string | null\n image: string | null\n role: string\n permissions: string[]\n organizationId: string | null\n // Optional flag — true when the user has MFA enrolled on the auth provider.\n // Backed by Cognito user attribute `custom:mfa_enabled` (see #198 T1).\n // Read by user-profile's MFA section to skip the enrollment CTA.\n mfaEnabled?: boolean\n}\n\nexport interface PlatformPreferences {\n theme: 'light' | 'dark'\n resolvedTheme: 'light' | 'dark'\n setTheme: (t: 'light' | 'dark') => void\n dockEnabled: boolean\n setDockEnabled: (v: boolean) => void\n dockPosition: 'left' | 'right' | 'bottom'\n setDockPosition: (v: 'left' | 'right' | 'bottom') => void\n dockAutoHide: boolean\n setDockAutoHide: (v: boolean) => void\n}\n\n// Match the string-literal type from src/platform/auth/components.tsx so\n// `useSocialProviders().providers` flows into `effectiveSocialProviders:\n// readonly SocialProvider[]` without conflict. (Consumer can wire a real\n// list filtered to the supported subset.)\nexport type SocialProvider =\n | 'google'\n | 'github'\n | 'discord'\n | 'microsoft'\n | 'apple'\n | 'amazon'\n\nexport interface ImpersonationClaim {\n sub: string\n email?: string\n reason?: string\n}\n\n// ── Auth client surface ────────────────────────────────────────────\n//\n// Historically this matched windsock's AuthClient class with ~40\n// methods (admin, billing, MFA, profile, organizations, sessions,\n// linked-accounts, ...). Most of those features will be re-built on\n// Cognito + DDB per issue #198 — until then, the client is typed as\n// `AuthClient` (intentionally permissive) so consumer apps that wire\n// their own AuthClient implementation pass type-check, AND so the\n// downstream prune step (Tier 2 in #198) can gradually move\n// auth-coupled components OUT of `ui` into `apps/astrlabe/components/`\n// without churning every method signature one-by-one.\n//\n// Runtime: the default stub Proxy throws on any method call, surfacing\n// \"feature not yet implemented on Cognito\" loud enough that nobody\n// ships a UI calling a method that's actually a no-op.\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AuthClient = any\n\nexport interface LoginResult {\n success: boolean\n mfaRequired?: boolean\n mfaToken?: string\n error?: string\n}\n\nexport interface UiAuthContextValue {\n user: AuthUser | null\n status: 'loading' | 'authenticated' | 'unauthenticated'\n client: AuthClient\n logout: (returnTo?: string) => Promise<void> | void\n refresh: () => Promise<boolean> | void\n getAccessToken: () => Promise<string | null> | string | null\n loginWithCredentials: (email: string, password: string) => Promise<LoginResult>\n loginWithProvider: (provider: string, options?: { returnTo?: string }) => void | Promise<void>\n verifyMFA: (mfaToken: string, code: string) => Promise<LoginResult>\n logoutInFlight?: boolean\n}\n\nfunction createStubClient(): AuthClient {\n return new Proxy(\n {},\n {\n get(_target, prop) {\n return () => {\n throw new Error(\n `ui auth shim: \\`client.${String(prop)}\\` is not implemented. ` +\n `Wire <UiAuthProvider value={...}> with a real AuthClient (see apps/astrlabe/lib/auth) ` +\n `or move this component into the consumer app per issue #198.`,\n )\n }\n },\n },\n )\n}\n\nconst UiAuthContext = createContext<UiAuthContextValue | null>(null)\nexport const UiAuthProvider = UiAuthContext.Provider\n\nexport function useAuth(): UiAuthContextValue {\n const ctx = useContext(UiAuthContext)\n if (ctx) return ctx\n // Degrade gracefully when no provider is wired — render unauthenticated\n // state, throw only when someone touches the client.\n return {\n user: null,\n status: 'unauthenticated',\n client: createStubClient(),\n logout: () => {},\n refresh: async () => false,\n getAccessToken: async () => null,\n loginWithCredentials: async (): Promise<LoginResult> => ({ success: false, error: 'no auth provider wired' }),\n loginWithProvider: () => {},\n verifyMFA: async (): Promise<LoginResult> => ({ success: false, error: 'no auth provider wired' }),\n logoutInFlight: false,\n }\n}\n\n// ── Preferences context ────────────────────────────────────────────\n\nconst UiPrefsContext = createContext<PlatformPreferences | null>(null)\nexport const UiPrefsProvider = UiPrefsContext.Provider\n\nexport function usePlatformPreferences(): PlatformPreferences {\n const ctx = useContext(UiPrefsContext)\n return (\n ctx ?? {\n theme: 'dark',\n resolvedTheme: 'dark',\n setTheme: () => {},\n dockEnabled: true,\n setDockEnabled: () => {},\n dockPosition: 'left',\n setDockPosition: () => {},\n dockAutoHide: false,\n setDockAutoHide: () => {},\n }\n )\n}\n\n// ── Impersonation (deprecated — Cognito doesn't have native token exchange).\n// Kept as a stub so existing components that render the banner still compile.\n\ninterface UseImpersonationResult {\n isImpersonating: boolean\n claim: ImpersonationClaim | null\n start: () => Promise<void>\n exit: () => Promise<void>\n}\n\nexport function useImpersonation(): UseImpersonationResult {\n return {\n isImpersonating: false,\n claim: null,\n start: async () => {},\n exit: async () => {},\n }\n}\n\n// ── Social providers (Google, GitHub, …). Consumer SHOULD wire its\n// real list; the default returns nothing so the picker renders empty.\n\ninterface UseSocialProvidersResult {\n providers: SocialProvider[]\n loading: boolean\n}\n\nconst UiSocialProvidersContext = createContext<UseSocialProvidersResult>({\n providers: [],\n loading: false,\n})\nexport const UiSocialProvidersProvider = UiSocialProvidersContext.Provider\n\nexport function useSocialProviders(): UseSocialProvidersResult {\n return useContext(UiSocialProvidersContext)\n}\n"]}
|