@toteat-eng/ds-react 2026.4.28-8 → 2026.5.13
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/README.md +124 -0
- package/dist/index.es.js +216 -213
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +4 -4
- package/dist/index.umd.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","names":[],"sources":["../src/components/Accordion/Accordion.module.css","../src/components/Accordion/Accordion.tsx","../src/components/Spinner/Spinner.module.css","../src/components/Spinner/Spinner.tsx","../src/components/Button/Button.module.css","../src/components/Button/Button.tsx","../src/components/Icon/Icon.module.css","../src/components/Icon/icons.ts","../src/components/Icon/Icon.tsx","../src/components/AppleSignInButton/AppleSignInButton.module.css","../src/components/AppleSignInButton/AppleSignInButton.tsx","../src/components/BackgroundWrapper/BackgroundWrapper.module.css","../src/components/BackgroundWrapper/BackgroundWrapper.tsx","../src/utils/cn.ts","../src/components/Badge/Badge.module.css","../src/components/Badge/Badge.tsx","../src/components/Card/Card.module.css","../src/components/Card/Card.tsx","../src/components/Charts/Charts.module.css","../src/components/Charts/Charts.tsx","../src/components/Checkbox/Checkbox.module.css","../src/components/Checkbox/Checkbox.tsx","../src/components/DataTable/DataTable.module.css","../src/components/DataTable/DataTable.tsx","../src/components/DatePicker/DatePicker.module.css","../src/components/DatePicker/DatePicker.tsx","../src/components/DateRangePicker/DateRangePicker.module.css","../src/components/DateRangePicker/DateRangePicker.tsx","../src/utils/focusTrap.ts","../src/components/Dialog/Dialog.module.css","../src/components/Dialog/Dialog.tsx","../src/components/DropdownButton/DropdownButton.module.css","../src/components/DropdownButton/DropdownButton.tsx","../src/components/DropdownMenu/DropdownMenu.module.css","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/Skeleton/Skeleton.module.css","../src/components/Skeleton/Skeleton.tsx","../src/components/ImagePreview/ImagePreview.module.css","../src/components/ImagePreview/ImagePreview.tsx","../src/components/DropZone/DropZone.module.css","../src/components/DropZone/dropZoneConstants.ts","../src/components/DropZone/DropZone.tsx","../src/components/DsProvider/DsProvider.tsx","../src/components/EmptyState/EmptyState.module.css","../src/components/EmptyState/EmptyState.tsx","../src/components/ErrorBoundary/ErrorBoundary.module.css","../src/components/ErrorBoundary/ErrorBoundary.tsx","../src/components/FormField/FormField.module.css","../src/components/FormField/FormField.tsx","../src/components/GoogleSignInButton/GoogleSignInButton.module.css","../src/components/GoogleSignInButton/GoogleSignInButton.tsx","../src/components/GroupedButtons/GroupedButtons.module.css","../src/components/GroupedButtons/GroupedButtons.tsx","../src/components/Header/Header.module.css","../src/components/Header/Header.tsx","../src/components/LanguageSelector/LanguageSelector.tsx","../src/components/LogoToteat/LogoToteat.module.css","../src/components/LogoToteat/LogoToteat.tsx","../src/components/Multiselect/Multiselect.module.css","../src/components/Multiselect/Multiselect.tsx","../src/components/NavBar/NavBar.module.css","../src/components/NavBar/NavBar.tsx","../src/components/Overlay/Overlay.module.css","../src/components/Overlay/Overlay.tsx","../src/components/OverlayMessage/OverlayMessage.module.css","../src/components/OverlayMessage/OverlayMessage.tsx","../src/components/PageLoadingOverlay/BreathingDotsCanvas.module.css","../src/components/PageLoadingOverlay/BreathingDotsCanvas.tsx","../src/components/PageLoadingOverlay/PageLoadingOverlay.module.css","../src/components/PageLoadingOverlay/ToteatLogo.module.css","../src/components/PageLoadingOverlay/ToteatLogo.tsx","../src/components/PageLoadingOverlay/PageLoadingOverlay.tsx","../src/components/PinLockOverlay/PinLockOverlay.module.css","../src/components/PinLockOverlay/PinLockOverlay.tsx","../src/components/Radio/Radio.module.css","../src/components/Radio/Radio.tsx","../src/components/Select/Select.module.css","../src/components/Select/Select.tsx","../src/components/Sidebar/Sidebar.module.css","../src/components/Sidebar/Sidebar.tsx","../src/components/SidebarNavItem/SidebarNavItem.module.css","../src/components/SidebarNavItem/SidebarNavItem.tsx","../src/components/SidebarNavSection/SidebarNavSection.module.css","../src/components/SidebarNavSection/SidebarNavSection.tsx","../src/components/TabBar/TabBar.module.css","../src/components/TabBar/TabBar.tsx","../src/components/Tabs/Tabs.module.css","../src/components/Tabs/Tabs.tsx","../src/components/Textarea/Textarea.module.css","../src/components/Textarea/Textarea.tsx","../src/components/TextInput/TextInput.module.css","../src/components/TextInput/TextInput.tsx","../src/components/ThemeGate/ThemeGate.tsx","../src/components/Toast/Toast.module.css","../src/components/Toast/useToast.ts","../src/components/Toast/Toast.tsx","../src/components/Toggle/Toggle.module.css","../src/components/Toggle/Toggle.tsx","../src/components/Tooltip/Tooltip.module.css","../src/components/Tooltip/Tooltip.tsx","../src/components/TreeItem/TreeItem.module.css","../src/components/TreeItem/TreeItem.tsx","../src/components/TreeList/TreeList.module.css","../src/components/TreeList/TreeList.tsx","../src/layouts/AdminPageHeader/AdminPageHeader.module.css","../src/layouts/AdminPageHeader/AdminPageHeader.tsx","../src/layouts/AppShell/AppShell.module.css","../src/layouts/AppShell/AppShell.tsx","../src/layouts/Divider/Divider.module.css","../src/layouts/Divider/Divider.tsx","../src/layouts/Grid/Grid.module.css","../src/layouts/Grid/Grid.tsx","../src/layouts/LoginPageLayout/LoginPageLayout.module.css","../src/layouts/LoginPageLayout/LoginPageLayout.tsx","../src/layouts/PageLayout/PageLayout.module.css","../src/layouts/PageLayout/PageLayout.tsx","../src/layouts/Stack/Stack.tsx","../src/utils/portal.ts"],"sourcesContent":["@layer ds-components {\n .accordion {\n display: flex;\n flex-direction: column;\n font-family: var(--font-family-base);\n color: var(--color-text);\n }\n\n /* ── Item ── */\n .item {\n border-bottom: 1px solid var(--color-border);\n\n &:first-child {\n border-top: 1px solid var(--color-border);\n }\n }\n\n /* ── Trigger ── */\n .trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: var(--spacing-md) var(--spacing-lg);\n background: none;\n border: none;\n cursor: pointer;\n text-align: left;\n font-family: var(--font-family-base);\n font-size: var(--text-base);\n font-weight: var(--font-medium);\n color: var(--color-text);\n line-height: var(--leading-normal);\n transition: background-color var(--duration-fast) var(--ease-out);\n\n &:hover {\n background-color: var(--color-neutral-50);\n }\n\n &:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: -2px;\n }\n }\n\n /* ── Chevron ── */\n .chevron {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: var(--text-base);\n color: var(--color-text-muted);\n transition: transform var(--duration-base) var(--ease-in-out);\n transform-origin: center;\n }\n\n .item[data-open] .chevron {\n transform: rotate(180deg);\n }\n\n /* ── Content panel ── */\n .content {\n /* `hidden` attribute sets display:none natively — no extra CSS needed */\n }\n\n /* ── Inner padding ── */\n .inner {\n padding: var(--spacing-sm) var(--spacing-lg) var(--spacing-lg);\n font-size: var(--text-base);\n line-height: var(--leading-relaxed);\n color: var(--color-text);\n }\n}\n","import { type ReactElement, type ReactNode, useState } from \"react\";\nimport styles from \"./Accordion.module.css\";\n\ninterface AccordionItem {\n\tid: string;\n\ttitle: string;\n\tcontent: ReactNode;\n\tdefaultOpen?: boolean;\n}\n\ninterface AccordionProps {\n\titems: AccordionItem[];\n\tmultiple?: boolean;\n}\n\nexport function Accordion({ items, multiple = false }: AccordionProps): ReactElement {\n\tconst [openIds, setOpenIds] = useState<Set<string>>(() => {\n\t\tconst defaults = items.filter((i) => i.defaultOpen).map((i) => i.id);\n\t\treturn new Set(defaults);\n\t});\n\n\tconst toggle = (id: string) => {\n\t\tsetOpenIds((prev) => {\n\t\t\tconst next = new Set(prev);\n\t\t\tif (next.has(id)) {\n\t\t\t\tnext.delete(id);\n\t\t\t} else {\n\t\t\t\tif (!multiple) next.clear();\n\t\t\t\tnext.add(id);\n\t\t\t}\n\t\t\treturn next;\n\t\t});\n\t};\n\n\treturn (\n\t\t<div className={styles.accordion}>\n\t\t\t{items.map((item) => {\n\t\t\t\tconst isOpen = openIds.has(item.id);\n\t\t\t\treturn (\n\t\t\t\t\t<div key={item.id} className={styles.item} data-open={isOpen || undefined}>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tid={`accordion-trigger-${item.id}`}\n\t\t\t\t\t\t\tclassName={styles.trigger}\n\t\t\t\t\t\t\tonClick={() => toggle(item.id)}\n\t\t\t\t\t\t\taria-expanded={isOpen}\n\t\t\t\t\t\t\taria-controls={`accordion-${item.id}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t<span className={styles.chevron} aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t▾\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<section\n\t\t\t\t\t\t\tid={`accordion-${item.id}`}\n\t\t\t\t\t\t\tclassName={styles.content}\n\t\t\t\t\t\t\taria-labelledby={`accordion-trigger-${item.id}`}\n\t\t\t\t\t\t\thidden={!isOpen}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isOpen && <div className={styles.inner}>{item.content}</div>}\n\t\t\t\t\t\t</section>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .spinner {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .spinner[data-size=\"small\"] {\n width: 16px;\n height: 16px;\n }\n\n .spinner[data-size=\"medium\"] {\n width: 24px;\n height: 24px;\n }\n\n .spinner[data-size=\"large\"] {\n width: 40px;\n height: 40px;\n }\n\n .track {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: var(--ds-radius-circle);\n border: 2px solid currentColor;\n border-top-color: transparent;\n animation: ds-spin var(--ds-duration-slow) linear infinite;\n }\n}\n","import styles from \"./Spinner.module.css\";\n\nexport type SpinnerSize = \"small\" | \"medium\" | \"large\";\n\nexport interface SpinnerProps {\n\tsize?: SpinnerSize;\n\tlabel?: string;\n\tclassName?: string;\n}\n\nexport function Spinner({ size = \"medium\", label = \"Cargando\", className }: SpinnerProps) {\n\treturn (\n\t\t<span\n\t\t\trole=\"status\"\n\t\t\taria-label={label}\n\t\t\tclassName={[styles.spinner, className].filter(Boolean).join(\" \")}\n\t\t\tdata-size={size}\n\t\t>\n\t\t\t<span className={styles.track} aria-hidden=\"true\" />\n\t\t</span>\n\t);\n}\n","@layer ds-components {\n .button {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--ds-space-2);\n font-family: var(--ds-font-family);\n font-weight: var(--ds-font-weight-semibold);\n line-height: var(--ds-leading-tight);\n border: none;\n border-radius: var(--ds-radius-full);\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n transition:\n background-color var(--ds-duration-fast) var(--ds-ease-out),\n color var(--ds-duration-fast) var(--ds-ease-out),\n box-shadow var(--ds-duration-fast) var(--ds-ease-out),\n opacity var(--ds-duration-fast) var(--ds-ease-out);\n\n &:focus-visible {\n outline: var(--ds-focus-width) solid var(--ds-focus-color);\n outline-offset: var(--ds-focus-offset);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n }\n\n /* ── Sizes (aligned with Vue3 DS) ── */\n .button[data-size=\"small\"] {\n padding: 0 var(--ds-space-4);\n font-size: var(--ds-font-size-sm);\n min-height: 2.75rem; /* 44px — matches btn-size-small */\n }\n\n .button[data-size=\"medium\"] {\n padding: 0 var(--ds-space-6);\n font-size: var(--ds-font-size-base);\n min-height: 3.75rem; /* 60px — matches btn-size-medium */\n }\n\n .button[data-size=\"large\"] {\n padding: 0 var(--ds-space-8);\n font-size: var(--ds-font-size-lg);\n min-height: 5rem; /* 80px — matches btn-size-large */\n }\n\n /* ── Variants ── */\n .button[data-variant=\"primary\"] {\n background-color: var(--ds-color-primary);\n color: var(--ds-color-text-on-primary);\n\n &:hover:not(:disabled) {\n background-color: var(--ds-color-primary-900);\n }\n\n &:active:not(:disabled) {\n background-color: var(--ds-color-primary-900);\n transform: translateY(1px);\n }\n }\n\n .button[data-variant=\"secondary\"] {\n background-color: var(--ds-color-secondary);\n color: var(--ds-color-white, #ffffff);\n\n &:hover:not(:disabled) {\n opacity: 0.85;\n }\n\n &:active:not(:disabled) {\n opacity: 0.75;\n transform: translateY(1px);\n }\n }\n\n .button[data-variant=\"ghost\"] {\n background-color: transparent;\n color: var(--ds-color-text);\n\n &:hover:not(:disabled) {\n background-color: var(--ds-color-gray-100);\n }\n\n &:active:not(:disabled) {\n background-color: var(--ds-color-gray-200);\n }\n }\n\n .button[data-variant=\"outline\"] {\n background-color: transparent;\n color: var(--ds-color-text);\n border: 1.5px solid var(--ds-color-border);\n\n &:hover:not(:disabled) {\n border-color: var(--ds-color-gray-400);\n background-color: var(--ds-color-gray-50);\n }\n\n &:active:not(:disabled) {\n background-color: var(--ds-color-gray-100);\n }\n }\n\n /* ── Full width ── */\n .button[data-full-width] {\n width: 100%;\n }\n\n /* ── Loading state ── */\n .button[data-loading] {\n cursor: wait;\n }\n\n .spinnerWrap {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .content {\n display: contents;\n }\n\n .content[data-hidden] {\n visibility: hidden;\n }\n}\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { Spinner } from \"../Spinner\";\nimport styles from \"./Button.module.css\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"outline\";\nexport type ButtonSize = \"small\" | \"medium\" | \"large\";\nexport type ButtonIconPosition = \"left\" | \"right\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n\tvariant?: ButtonVariant;\n\tsize?: ButtonSize;\n\tloading?: boolean;\n\tfullWidth?: boolean;\n\ticon?: ReactNode;\n\ticonPosition?: ButtonIconPosition;\n\tchildren: ReactNode;\n}\n\nexport function Button({\n\tvariant = \"primary\",\n\tsize = \"medium\",\n\tloading = false,\n\tfullWidth = false,\n\ticon,\n\ticonPosition = \"left\",\n\tdisabled,\n\tchildren,\n\tclassName,\n\ttype = \"button\",\n\t...props\n}: ButtonProps) {\n\treturn (\n\t\t<button\n\t\t\ttype={type}\n\t\t\tclassName={[styles.button, className].filter(Boolean).join(\" \")}\n\t\t\tdata-variant={variant}\n\t\t\tdata-size={size}\n\t\t\tdata-loading={loading ? \"\" : undefined}\n\t\t\tdata-full-width={fullWidth ? \"\" : undefined}\n\t\t\tdisabled={disabled || loading}\n\t\t\taria-busy={loading}\n\t\t\t{...props}\n\t\t>\n\t\t\t{loading && (\n\t\t\t\t<span className={styles.spinnerWrap} aria-hidden=\"true\">\n\t\t\t\t\t<Spinner size=\"small\" />\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<span className={styles.content} data-hidden={loading ? \"\" : undefined}>\n\t\t\t\t{icon && iconPosition === \"left\" && icon}\n\t\t\t\t{children}\n\t\t\t\t{icon && iconPosition === \"right\" && icon}\n\t\t\t</span>\n\t\t</button>\n\t);\n}\n","@layer ds-components {\n .icon {\n display: inline-block;\n flex-shrink: 0;\n vertical-align: middle;\n }\n}\n","// This file is auto-generated by generateIcons.ts. Do not edit directly.\n// Run: npx tsx src/design-system/components/Icon/generateIcons.ts\n\nexport const ICON_APPLE_FILLED = [\n\t\"<path d='M16.102 2.01c-.042-.047-1.573.019-2.906 1.465C11.864 4.92 12.07 6.577 12.1 6.62c.03.042 1.9.109 3.093-1.573 1.194-1.68.953-2.988.91-3.037Zm4.143 14.666c-.06-.12-2.906-1.542-2.641-4.277.265-2.737 2.093-3.487 2.122-3.568.029-.081-.746-.987-1.567-1.446a4.615 4.615 0 0 0-1.954-.543c-.135-.003-.604-.118-1.568.145-.635.174-2.066.737-2.46.76-.395.022-1.57-.653-2.833-.832-.81-.156-1.667.164-2.28.41-.613.245-1.778.942-2.593 2.796-.815 1.853-.389 4.788-.084 5.7.305.911.782 2.405 1.592 3.495.72 1.23 1.675 2.084 2.073 2.374.4.29 1.524.482 2.304.084.628-.385 1.76-.607 2.208-.59.446.016 1.326.192 2.227.673.714.247 1.389.144 2.065-.13.676-.277 1.655-1.325 2.798-3.448.433-.988.63-1.522.59-1.603Z'/><path d='M16.102 2.01c-.042-.047-1.573.019-2.906 1.465C11.864 4.92 12.07 6.577 12.1 6.62c.03.042 1.9.109 3.093-1.573 1.194-1.68.953-2.988.91-3.037Zm4.143 14.666c-.06-.12-2.906-1.542-2.641-4.277.265-2.737 2.093-3.487 2.122-3.568.029-.081-.746-.987-1.567-1.446a4.615 4.615 0 0 0-1.954-.543c-.135-.003-.604-.118-1.568.145-.635.174-2.066.737-2.46.76-.395.022-1.57-.653-2.833-.832-.81-.156-1.667.164-2.28.41-.613.245-1.778.942-2.593 2.796-.815 1.853-.389 4.788-.084 5.7.305.911.782 2.405 1.592 3.495.72 1.23 1.675 2.084 2.073 2.374.4.29 1.524.482 2.304.084.628-.385 1.76-.607 2.208-.59.446.016 1.326.192 2.227.673.714.247 1.389.144 2.065-.13.676-.277 1.655-1.325 2.798-3.448.433-.988.63-1.522.59-1.603Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_ARROW_CIRCLE_DOWN_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M8.354 11.854a.5.5 0 0 1-.707 0L4.465 8.672a.5.5 0 1 1 .707-.708L7.5 10.293V4.5a.5.5 0 1 1 1 0v5.793l2.329-2.329a.5.5 0 1 1 .707.708l-3.182 3.182Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_CIRCLE_LEFT_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M4.146 8.353a.5.5 0 0 1 0-.707l3.182-3.182a.5.5 0 0 1 .708.707L5.707 7.5H11.5a.5.5 0 0 1 0 1H5.707l2.329 2.328a.5.5 0 1 1-.708.707L4.146 8.353Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_CIRCLE_RIGHT_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M11.854 7.646a.5.5 0 0 1 0 .707l-3.182 3.182a.5.5 0 1 1-.708-.707L10.293 8.5H4.5a.5.5 0 0 1 0-1h5.793L7.964 5.17a.5.5 0 1 1 .708-.707l3.182 3.182Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_CIRCLE_UP_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M7.646 4.146a.5.5 0 0 1 .707 0l3.182 3.182a.5.5 0 1 1-.707.708L8.5 5.707V11.5a.5.5 0 0 1-1 0V5.707L5.17 8.036a.5.5 0 1 1-.707-.708l3.182-3.182Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_DOWN_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='m11.535 11.172-3.182 3.182a.5.5 0 0 1-.707 0l-3.182-3.182a.5.5 0 1 1 .707-.708L7.5 12.793V2a.5.5 0 0 1 1 0v10.793l2.328-2.329a.5.5 0 1 1 .707.708Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_LEFT_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.646 8.353a.5.5 0 0 1 0-.707l3.182-3.182a.5.5 0 0 1 .708.707L3.207 7.5H14a.5.5 0 0 1 0 1H3.207l2.329 2.328a.5.5 0 1 1-.708.707L1.646 8.353Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_LIST_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M4.25 2.6c.22 0 .4.18.4.4v6.6h6.353L9.417 7.222a.4.4 0 1 1 .666-.444l2 3a.4.4 0 0 1 0 .444l-2 3a.4.4 0 1 1-.666-.444l1.586-2.378H4.25a.4.4 0 0 1-.4-.4V3c0-.22.18-.4.4-.4Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_POINT_DOWN_FILLED = [\n\t\"<path d='m7.5 9.5 3-3h-6l3 3Z'/><path fill-rule='evenodd' d='M7.854 9.854a.5.5 0 0 1-.708 0l-3-3A.5.5 0 0 1 4.5 6h6a.5.5 0 0 1 .354.854l-3 3ZM9.293 7H5.707L7.5 8.793 9.293 7Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_POINT_LEFT_FILLED = [\n\t\"<path d='m6.5 7.5 3 3v-6l-3 3Z'/><path fill-rule='evenodd' d='M6.146 7.854a.5.5 0 0 1 0-.708l3-3A.5.5 0 0 1 10 4.5v6a.5.5 0 0 1-.854.354l-3-3ZM9 9.293V5.707L7.207 7.5 9 9.293Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_POINT_RIGHT_FILLED = [\n\t\"<path d='m10 7.962-3 3v-6l3 3Z'/><path fill-rule='evenodd' d='M10.354 8.315a.5.5 0 0 0 0-.707l-3-3a.5.5 0 0 0-.854.354v6a.5.5 0 0 0 .854.354l3-3ZM7.5 9.755V6.169l1.793 1.793L7.5 9.755Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_POINT_UP_FILLED = [\n\t\"<path d='m8.25 7-3 3h6l-3-3Z'/><path fill-rule='evenodd' d='M7.896 6.646a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.354.854h-6a.5.5 0 0 1-.354-.854l3-3ZM6.457 9.5h3.586L8.25 7.707 6.457 9.5Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_RIGHT_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='m11.172 4.464 3.182 3.182a.5.5 0 0 1 0 .707l-3.182 3.182a.5.5 0 0 1-.708-.707L12.793 8.5H2a.5.5 0 0 1 0-1h10.793L10.464 5.17a.5.5 0 1 1 .708-.707Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_UP_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='m4.465 4.828 3.182-3.182a.5.5 0 0 1 .707 0l3.182 3.182a.5.5 0 1 1-.707.708L8.5 3.207V14a.5.5 0 0 1-1 0V3.207L5.172 5.536a.5.5 0 1 1-.707-.708Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_BARCODE_OUTLINE = [\n\t\"<path d='M13.76 8a.48.48 0 0 1-.48.48H2.72a.48.48 0 1 1 0-.96h.96v-2.4h.96v2.4h.96v-2.4h.96v2.4h.96v-2.4h.96v2.4h.96v-2.4h.96v2.4h.96v-2.4h.96v2.4h.96a.48.48 0 0 1 .48.48ZM4.64 10.88h-.96V9.44h.96v1.44ZM12.32 10.88h-.96V9.44h.96v1.44ZM6.56 10.4H5.6v-.96h.96v.96ZM8.48 10.4h-.96v-.96h.96v.96ZM10.4 10.4h-.96v-.96h.96v.96ZM1.28 5.12V3.68c0-.794.646-1.44 1.44-1.44h1.44a.48.48 0 1 1 0 .96H2.72a.48.48 0 0 0-.48.48v1.44a.48.48 0 1 1-.96 0ZM14.72 3.68v1.44a.48.48 0 1 1-.96 0V3.68a.48.48 0 0 0-.48-.48h-1.44a.48.48 0 1 1 0-.96h1.44c.794 0 1.44.646 1.44 1.44ZM4.64 13.28a.48.48 0 0 1-.48.48H2.72c-.794 0-1.44-.646-1.44-1.44v-1.44a.48.48 0 1 1 .96 0v1.44c0 .265.215.48.48.48h1.44a.48.48 0 0 1 .48.48ZM14.72 10.88v1.44c0 .794-.646 1.44-1.44 1.44h-1.44a.48.48 0 1 1 0-.96h1.44a.48.48 0 0 0 .48-.48v-1.44a.48.48 0 1 1 .96 0Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_BELL_OUTLINE = [\n\t\"<path d='M13.98 12.667h-.525V8.139c0-2.424-1.483-4.488-3.563-5.288V1.96C9.892.877 9.042 0 7.995 0 6.95 0 6.103.88 6.103 1.96v.885C4.025 3.643 2.54 5.71 2.54 8.136v4.53h-.525a.526.526 0 0 0-.515.534c0 .293.232.533.515.533H5.45C5.64 15.013 6.708 16 8 16s2.36-.987 2.549-2.267h3.436c.283 0 .515-.24.515-.533a.53.53 0 0 0-.52-.533M7.132 1.96A.88.88 0 0 1 8 1.067c.476 0 .862.4.862.893v.608a5 5 0 0 0-.872-.08c-.294 0-.577.032-.858.077zM8 14.8c-.72 0-1.216-.376-1.39-1.067h2.812C9.249 14.424 8.72 14.8 8 14.8m-4.297-2.3V8.139C3.703 5.613 5.895 3.8 8 3.8s4.203 1.813 4.203 4.339V12.5z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CALENDAR_ALT_OUTLINE = [\n\t\"<path d='M7.47 10.14a.842.842 0 0 1-.205-.724c.01-.053.025-.102.04-.15.02-.048.045-.096.07-.14.03-.042.06-.085.095-.122a.617.617 0 0 1 .245-.171.662.662 0 0 1 .57 0c.045.015.09.042.13.069.04.032.08.064.115.102.035.037.065.08.095.123.025.043.05.09.065.14a.777.777 0 0 1 .06.305c0 .208-.08.417-.22.567-.034.038-.075.07-.115.102-.04.027-.085.054-.13.075a1.1 1.1 0 0 1-.14.043.636.636 0 0 1-.29 0c-.05-.01-.095-.027-.14-.043a1.048 1.048 0 0 1-.13-.075 1.07 1.07 0 0 1-.115-.102Zm3.335 2.951a.77.77 0 0 0 .165.262c.035.038.075.07.115.103.04.026.085.053.13.075.045.015.09.032.14.042a.725.725 0 0 0 .675-.22.699.699 0 0 0 .16-.262.777.777 0 0 0 .045-.46.737.737 0 0 0-.045-.15.694.694 0 0 0-.16-.263.716.716 0 0 0-.675-.22.624.624 0 0 0-.14.049.617.617 0 0 0-.245.171 1.19 1.19 0 0 0-.095.123c-.025.043-.05.091-.07.14-.014.048-.03.096-.04.15a.777.777 0 0 0 0 .31c.01.054.025.102.04.15Zm-3.5 0c.02.048.045.097.07.14.03.042.06.085.095.123a.621.621 0 0 0 .245.171.624.624 0 0 0 .285.064.636.636 0 0 0 .284-.064.61.61 0 0 0 .131-.07c.04-.032.08-.064.115-.101a.699.699 0 0 0 .16-.262.777.777 0 0 0 .06-.305.843.843 0 0 0-.22-.569.607.607 0 0 0-.246-.171.663.663 0 0 0-.57 0 .617.617 0 0 0-.244.171.843.843 0 0 0-.165.873Zm3.5-3.214a.77.77 0 0 0 .165.263c.035.037.075.069.115.101.04.027.085.054.13.075.045.016.09.032.14.043a.636.636 0 0 0 .29 0c.05-.01.095-.027.14-.043a1.02 1.02 0 0 0 .13-.075c.04-.032.08-.064.115-.102a.699.699 0 0 0 .16-.263.777.777 0 0 0 .045-.46.737.737 0 0 0-.045-.15.697.697 0 0 0-.16-.262.716.716 0 0 0-1.06 0 .806.806 0 0 0-.165.262c-.014.048-.03.097-.04.15a.777.777 0 0 0 0 .31c.01.054.025.103.04.15Zm-6.305.498c.195 0 .39-.086.53-.236s.22-.353.22-.567a.843.843 0 0 0-.22-.568c-.28-.3-.78-.3-1.06 0a.843.843 0 0 0 0 1.135c.14.15.33.236.53.236ZM15 4.215v10.178c0 .886-.673 1.607-1.5 1.607h-11c-.827 0-1.5-.721-1.5-1.607V4.214c0-.886.673-1.607 1.5-1.607H4V1.536C4 1.24 4.224 1 4.5 1s.5.24.5.536v1.071h6V1.536c0-.296.224-.536.5-.536s.5.24.5.536v1.071h1.5c.827 0 1.5.721 1.5 1.607Zm-1 3.214H2v6.964c0 .295.224.536.5.536h11c.276 0 .5-.24.5-.536V7.429Zm0-3.215c0-.295-.224-.535-.5-.535H12V4.75c0 .296-.224.536-.5.536s-.5-.24-.5-.536V3.679H5V4.75c0 .296-.224.536-.5.536S4 5.046 4 4.75V3.679H2.5c-.276 0-.5.24-.5.535v2.143h12V4.214ZM4.5 13.59c.2 0 .39-.085.53-.235.14-.15.22-.354.22-.568a.833.833 0 0 0-.22-.568.737.737 0 0 0-1.06 0 .833.833 0 0 0-.22.568c0 .214.08.418.22.568.14.15.33.235.53.235Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CALENDAR_LOCKED_OUTLINE = [\n\t\"<path d='M15 4.214v10.179c0 .886-.673 1.607-1.5 1.607h-11c-.827 0-1.5-.721-1.5-1.607V4.214c0-.886.673-1.607 1.5-1.607h11c.827 0 1.5.721 1.5 1.607Zm-1 3.214H2v6.965c0 .295.224.535.5.535h11c.276 0 .5-.24.5-.535V7.428Zm0-3.214c0-.295-.224-.536-.5-.536H12V4.75c0 .296-.224.536-.5.536s-.5-.24-.5-.536V3.678H6V4.75c0 .296-.224.536-.5.536S5 5.046 5 4.75V3.678H2.5c-.276 0-.5.24-.5.536v2.143h12V4.214Z'/><path d='M5.5 4V2c0-.333-.2-1-1-1s-1 .667-1 1v1.5M11.5 4V2c0-.333-.2-1-1-1s-1 .667-1 1v1.5'/><path d='M10.063 10.25h-.376v-.375A1.877 1.877 0 0 0 7.813 8a1.877 1.877 0 0 0-1.875 1.875v.375h-.375a.375.375 0 0 0-.375.375v3c0 .207.167.375.375.375h4.5a.375.375 0 0 0 .374-.375v-3a.375.375 0 0 0-.374-.375Zm-3.376-.375a1.125 1.125 0 0 1 2.25 0v.375h-2.25v-.375Zm3 3.375h-3.75V11h3.75v2.25Z'/><path d='M7.813 12.5a.375.375 0 1 0 0-.75.375.375 0 0 0 0 .75Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CALENDAR_OUTLINE = [\n\t\"<path d='M7.47 10.14a.843.843 0 0 1-.205-.724c.01-.054.025-.102.04-.15.02-.048.045-.097.07-.14.03-.042.06-.085.095-.123a.616.616 0 0 1 .245-.171.662.662 0 0 1 .57 0c.045.016.09.043.13.07.04.032.08.064.115.101a.697.697 0 0 1 .16.262.777.777 0 0 1 .06.305c0 .21-.08.42-.22.57-.034.037-.075.069-.115.1-.04.028-.085.054-.13.076a1.1 1.1 0 0 1-.14.043.636.636 0 0 1-.29 0 1.08 1.08 0 0 1-.14-.043 1.048 1.048 0 0 1-.13-.075 1.07 1.07 0 0 1-.115-.102Zm3.335 2.951a.767.767 0 0 0 .28.364c.04.027.085.054.13.075.045.016.09.032.14.043a.725.725 0 0 0 .675-.22.696.696 0 0 0 .16-.263.778.778 0 0 0 .045-.46.74.74 0 0 0-.045-.15.696.696 0 0 0-.16-.262.716.716 0 0 0-.675-.22.624.624 0 0 0-.14.048.617.617 0 0 0-.245.172 1.19 1.19 0 0 0-.095.123c-.025.043-.05.091-.07.14-.014.047-.03.096-.04.15a.777.777 0 0 0 0 .31c.01.054.025.102.04.15Zm-3.5 0c.02.048.045.096.07.14.03.042.06.085.095.123a.617.617 0 0 0 .245.171.624.624 0 0 0 .285.064.636.636 0 0 0 .284-.064.607.607 0 0 0 .131-.07c.04-.032.08-.064.115-.101a.696.696 0 0 0 .16-.263.778.778 0 0 0 .06-.305.843.843 0 0 0-.22-.568c-.034-.038-.075-.07-.115-.102a.607.607 0 0 0-.13-.07.663.663 0 0 0-.57 0 .617.617 0 0 0-.13.07c-.04.032-.08.064-.115.102a.843.843 0 0 0-.205.723c.01.053.025.102.04.15Zm3.5-3.214a.77.77 0 0 0 .165.263c.035.037.075.069.115.101.04.027.085.053.13.075.045.016.09.032.14.043a.636.636 0 0 0 .29 0c.05-.01.095-.027.14-.043.045-.022.09-.048.13-.075.04-.032.08-.064.115-.102a.699.699 0 0 0 .16-.263.777.777 0 0 0 .045-.46.737.737 0 0 0-.045-.15.697.697 0 0 0-.16-.263.716.716 0 0 0-.675-.22c-.05.012-.095.028-.14.044-.045.021-.09.048-.13.075-.04.032-.08.064-.115.101a.806.806 0 0 0-.165.263c-.014.048-.03.096-.04.15a.777.777 0 0 0 0 .31c.01.054.025.102.04.15Zm-6.305.498c.195 0 .39-.086.53-.236s.22-.353.22-.568a.843.843 0 0 0-.22-.568c-.28-.3-.78-.3-1.06 0a.843.843 0 0 0 0 1.136c.14.15.33.236.53.236ZM15 4.215v10.178c0 .886-.673 1.607-1.5 1.607h-11c-.827 0-1.5-.721-1.5-1.607V4.214c0-.886.673-1.607 1.5-1.607h11c.827 0 1.5.721 1.5 1.607Zm-1 3.213H2v6.965c0 .295.224.535.5.535h11c.276 0 .5-.24.5-.535V7.428Zm0-3.214c0-.295-.224-.536-.5-.536H12V4.75c0 .296-.224.536-.5.536s-.5-.24-.5-.536V3.678H6V4.75c0 .296-.224.536-.5.536S5 5.046 5 4.75V3.678H2.5c-.276 0-.5.24-.5.536v2.143h12V4.214ZM4.5 13.59c.2 0 .39-.086.53-.236s.22-.353.22-.567a.833.833 0 0 0-.22-.568.737.737 0 0 0-1.06 0 .833.833 0 0 0-.22.568c0 .214.08.417.22.567.14.15.33.236.53.236Z'/><path d='M5.5 4V2c0-.333-.2-1-1-1s-1 .667-1 1v1.5M11.5 4V2c0-.333-.2-1-1-1s-1 .667-1 1v1.5'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CARROT_FILLED = [\n\t\"<path d='M1.4 22.116c1.812 1.632 13.968-5.604 15.768-8.652.864-1.464-.156-3.612-1.824-5.328 1.896-1.26 3.564 2.664 5.148 1.836.72-.384 1.188-1.572.84-2.304-.624-1.296-2.7-1.296-4.104-1.452.996-.24 3.384-1.26 3.432-2.7.048-1.104-1.356-2.364-2.46-2.232-1.452.168-1.98 2.256-2.472 3.6-.06-.852-.24-2.724-1.176-3.54-1.248-1.092-2.748-.06-2.784 1.26-.048 1.596 3.384 2.484 2.304 4.404C12.248 5.604 10.1 4.836 8.72 5.64c-.588.372-1.26 1.092-1.956 2.028 1.068 1.128 2.544 2.484 3.708 3.264.24.168.312.504.132.744a.53.53 0 0 1-.744.144c-1.188-.804-2.64-2.136-3.72-3.252a32.183 32.183 0 0 0-1.608 2.676c1.02 1.032 2.316 2.196 3.348 2.892.24.168.3.504.132.744a.541.541 0 0 1-.756.144c-1.02-.696-2.232-1.776-3.252-2.784C1.88 16.428.32 21.156 1.4 22.116Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_CHECK_OUTLINE = [\n\t\"<path d='M14.04 4.04a.65.65 0 0 1 .92.92l-9 9a.651.651 0 0 1-.968-.054l-4-5-.071-.11A.65.65 0 0 1 1.915 8l.093.094 3.546 4.431L14.04 4.04Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CHECKBOX_CHECKED = [\n\t\"<path fill='#1B1B1B' d='M11 0H1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1Zm-6 8.75L2.5 6.271l.795-.771L5 7.173 8.704 3.5l.796.788L5 8.75Z'/>\",\n\t\"0 0 12 12\",\n] as const;\n\nexport const ICON_CHECKBOX_UNCHECKED = [\n\t\"<path fill='#1B1B1B' d='M11 0H1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1ZM1 11V1h10v10H1Z'/>\",\n\t\"0 0 12 12\",\n] as const;\n\nexport const ICON_CHEVRON_DOWN_OUTLINE = [\n\t\"<path d='M15.761 4.197c.263.245.31.638.135.938l-.09.122-6.762 7.5a.732.732 0 0 1-1.088 0l-6.762-7.5a.759.759 0 0 1 .045-1.06.73.73 0 0 1 1.043.046L8.5 11.14l6.219-6.896.111-.1a.729.729 0 0 1 .931.054Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CHEVRON_LEFT_BICOLOR = [\n\t\"<path fill='#F2F2F2' d='M17.005 12.982a4 4 0 0 1-3.992 4.008l-8 .015a4 4 0 0 1-4.008-3.992l-.015-8a4 4 0 0 1 3.993-4.008l8-.015a4 4 0 0 1 4.007 3.992l.015 8Z'/><path fill='#1B1B1B' fill-rule='evenodd' d='M10.825 14.493a.432.432 0 0 1-.61-.008l-5.11-5.256a.432.432 0 0 1 .009-.611l5.256-5.11a.432.432 0 0 1 .602.62L6.025 8.936l4.809 4.947a.432.432 0 0 1-.009.61Z' clip-rule='evenodd'/>\",\n\t\"0 0 18 18\",\n] as const;\n\nexport const ICON_CHEVRON_LEFT_OUTLINE = [\n\t\"<path d='M12.803 15.761a.759.759 0 0 1-.938.135l-.122-.09-7.5-6.762a.732.732 0 0 1 0-1.088l7.5-6.762a.759.759 0 0 1 1.06.045.73.73 0 0 1-.046 1.043L5.86 8.5l6.897 6.219.1.111a.729.729 0 0 1-.054.931Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CHEVRON_RIGHT_BICOLOR = [\n\t\"<path fill='#F2F2F2' d='M17.005 12.982a4 4 0 0 1-3.992 4.008l-8 .015a4 4 0 0 1-4.008-3.992l-.015-8a4 4 0 0 1 3.993-4.008l8-.015a4 4 0 0 1 4.007 3.992l.015 8Z'/><path fill='#1B1B1B' fill-rule='evenodd' d='M7.189 14.493a.432.432 0 0 0 .61-.008l5.11-5.256a.432.432 0 0 0-.008-.611l-5.256-5.11a.432.432 0 0 0-.603.62l4.947 4.808-4.809 4.947a.432.432 0 0 0 .009.61Z' clip-rule='evenodd'/>\",\n\t\"0 0 18 18\",\n] as const;\n\nexport const ICON_CHEVRON_RIGHT_OUTLINE = [\n\t\"<path d='M4.197 1.239a.759.759 0 0 1 .938-.134l.122.088 7.5 6.763a.732.732 0 0 1 0 1.088l-7.5 6.762a.759.759 0 0 1-1.06-.045.73.73 0 0 1 .046-1.043L11.14 8.5 4.244 2.28l-.1-.111a.729.729 0 0 1 .054-.931Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CHEVRON_UP_OUTLINE = [\n\t\"<path d='M1.239 12.803a.759.759 0 0 1-.134-.938l.088-.122 6.763-7.5a.732.732 0 0 1 1.088 0l6.762 7.5a.759.759 0 0 1-.045 1.06.73.73 0 0 1-1.043-.046L8.5 5.86 2.28 12.757l-.111.1a.729.729 0 0 1-.931-.054Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CHICKEN_FILLED = [\n\t\"<path d='M20.16 12.73A6.27 6.27 0 0 0 19.09 3c-2.01-1.33-4.7-1.34-6.73-.03-1.76 1.13-2.73 2.89-2.9 4.71-.13 1.32-.63 2.55-1.55 3.47l-.03.03c-1.16 1.16-1.16 2.93-.07 4.01l.99.99a2.794 2.794 0 0 0 3.95 0c.97-.97 2.25-1.5 3.64-1.65 1.37-.15 2.71-.75 3.77-1.8Zm-13.9 7.13c.27.56.18 1.24-.29 1.7a1.49 1.49 0 0 1-2.55-.98 1.49 1.49 0 0 1-.98-2.55c.46-.46 1.15-.56 1.7-.29l2.48-2.43c.14.19.3.41.48.59l.99.99c.21.2.41.37.67.52l-2.5 2.45Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_CHILI_FILLED = [\n\t\"<path d='M18.73 2.118a.936.936 0 0 1 1.274.363l.187.34a4.682 4.682 0 0 1 .133 4.297A6.214 6.214 0 0 1 22 11.376c0 .722-.121 1.418-.348 2.062-.238.676-1.113.637-1.437-.004l-.457-.914a.944.944 0 0 0-.84-.52h-2.855a.935.935 0 0 1-.938-.937V7.938a.935.935 0 0 0-.938-.937h-.667c-.832 0-1.172-.934-.422-1.286a6.206 6.206 0 0 1 2.652-.59c1.105 0 2.14.286 3.04.79a2.81 2.81 0 0 0-.235-2.18l-.188-.34a.936.936 0 0 1 .363-1.273v-.004ZM8.688 15.497l3.626-7.246h1.562v3.125c0 1.035.84 1.875 1.875 1.875h2.977l.933 1.867A16.934 16.934 0 0 1 6.031 22H3.734a1.734 1.734 0 0 1-.375-3.426l1.946-.434a4.999 4.999 0 0 0 3.386-2.644h-.004Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_CLOSE_OUTLINE = [\n\t\"<path d='m8 7.293 5.646-5.647a.502.502 0 0 1 .708.708L8.707 8l5.647 5.646a.502.502 0 0 1-.708.708L8 8.707l-5.646 5.647a.502.502 0 0 1-.708-.708L7.293 8 1.646 2.354a.502.502 0 0 1 .708-.708z' />\",\n\t\"0 0 15 15\",\n] as const;\n\nexport const ICON_CLOUD_DOWNLOAD_OUTLINE = [\n\t\"<path d='M4.406 1.342A5.53 5.53 0 0 1 8 0c2.69 0 4.923 2 5.166 4.579C14.758 4.804 16 6.137 16 7.773c0 1.796-1.498 3.226-3.313 3.226H10a.5.5 0 0 1 0-1h2.688C13.979 10 15 8.988 15 7.773c0-1.216-1.02-2.228-2.313-2.228h-.5v-.5C12.188 2.825 10.328 1 8 1a4.53 4.53 0 0 0-2.941 1.1c-.757.652-1.153 1.438-1.153 2.055v.448l-.445.049C2.064 4.805 1 5.952 1 7.318c0 1.467 1.23 2.681 2.781 2.681H6a.5.5 0 1 1 0 1H3.781C1.708 11 0 9.366 0 7.318c0-1.763 1.266-3.223 2.942-3.593.143-.863.698-1.723 1.464-2.383Z'/><path d='M8.354 15.794a.5.5 0 0 1-.708 0L5 13a.5.5 0 0 1 .708-.708L7.5 14.233V5.441a.5.5 0 0 1 1 0v8.792l1.792-1.941A.5.5 0 0 1 11 13l-2.646 2.794Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CLOUD_UPLOAD_OUTLINE = [\n\t\"<path d='M4.406 1.342A5.53 5.53 0 0 1 8 0c2.69 0 4.923 2 5.166 4.579C14.758 4.804 16 6.137 16 7.773c0 1.796-1.498 3.226-3.313 3.226H10a.5.5 0 0 1 0-1h2.688C13.979 10 15 8.988 15 7.773c0-1.216-1.02-2.228-2.313-2.228h-.5v-.5C12.188 2.825 10.328 1 8 1a4.53 4.53 0 0 0-2.941 1.1c-.757.652-1.153 1.438-1.153 2.055v.448l-.445.049C2.064 4.805 1 5.952 1 7.318c0 1.467 1.23 2.681 2.781 2.681H6a.5.5 0 1 1 0 1H3.781C1.708 11 0 9.366 0 7.318c0-1.763 1.266-3.223 2.942-3.593.143-.863.698-1.723 1.464-2.383Z'/><path d='M7.646 3.206a.5.5 0 0 1 .708 0l3 3a.5.5 0 1 1-.708.708L8.5 4.767v9.792a.5.5 0 1 1-1 0V4.767L5.354 6.914a.5.5 0 0 1-.708-.708l3-3Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_COPY_GENERIC_OUTLINE = [\n\t\"<path d='M9.5 11.5a.5.5 0 0 1-.5.5H5a.5.5 0 0 1 0-1h4a.5.5 0 0 1 .5.5ZM9 9H5a.5.5 0 1 0 0 1h4a.5.5 0 1 0 0-1Zm4.5-4.421V11a1.502 1.502 0 0 1-1.5 1.5h-.5v1A1.502 1.502 0 0 1 10 15H4a1.502 1.502 0 0 1-1.5-1.5V5A1.502 1.502 0 0 1 4 3.5h.5v-1A1.502 1.502 0 0 1 6 1h4a.5.5 0 0 1 .358.151l3 3.079a.498.498 0 0 1 .142.349Zm-3-1.079a.5.5 0 0 0 .5.5h.738L10.5 2.73v.77Zm0 10v-6H9A1.502 1.502 0 0 1 7.5 6V4.5H4a.5.5 0 0 0-.5.5v8.5a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 .5-.5ZM8.5 6a.5.5 0 0 0 .5.5h.738L8.5 5.23V6Zm4 5V5H11a1.502 1.502 0 0 1-1.5-1.5V2H6a.5.5 0 0 0-.5.5v1H8a.499.499 0 0 1 .358.151l3 3.079a.498.498 0 0 1 .142.349V11.5h.5a.5.5 0 0 0 .5-.5Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_COPY_SQUARE_OUTLINE = [\n\t\"<path d='M11.77 4.23A2.728 2.728 0 0 0 9.09 2H4.728A2.727 2.727 0 0 0 2 4.727v4.364a2.727 2.727 0 0 0 2.23 2.678A2.727 2.727 0 0 0 6.91 14h4.363A2.726 2.726 0 0 0 14 11.273V6.909a2.727 2.727 0 0 0-2.23-2.678ZM3.09 9.09V4.728a1.636 1.636 0 0 1 1.637-1.636h4.364a1.636 1.636 0 0 1 1.636 1.636v4.364a1.636 1.636 0 0 1-1.636 1.636H4.727a1.636 1.636 0 0 1-1.636-1.636Zm9.82 2.183a1.636 1.636 0 0 1-1.637 1.636H6.909a1.637 1.637 0 0 1-1.538-1.09h3.72a2.728 2.728 0 0 0 2.727-2.728V5.37a1.636 1.636 0 0 1 1.091 1.538v4.364Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DELETE_OUTLINE = [\n\t\"<path d='M3.098 3.297a.634.634 0 0 0-.634.638v9.543c0 1.046.86 1.907 1.907 1.907h7.639c1.046 0 1.907-.86 1.907-1.907V3.935a.637.637 0 0 0-.635-.638H3.098Zm.638 1.272h8.907v8.909a.623.623 0 0 1-.634.634H4.371a.623.623 0 0 1-.634-.634V4.569Z'/><path d='M1.825 3.3a.636.636 0 0 0 0 1.272h12.731a.638.638 0 0 0 0-1.272H1.825Z'/><path d='M5.644.117c-1.047 0-1.908.86-1.908 1.907v1.911a.637.637 0 0 0 1.274 0V2.024c0-.359.275-.634.634-.634h5.093c.359 0 .634.275.634.634v1.911a.64.64 0 0 0 .639.634.636.636 0 0 0 .634-.634V2.024c0-1.047-.861-1.907-1.908-1.907H5.644ZM6.283 5.845a.64.64 0 0 0-.639.634v5.725a.64.64 0 0 0 1.088.45.635.635 0 0 0 .185-.45V6.479a.636.636 0 0 0-.634-.634ZM10.102 5.845a.64.64 0 0 0-.639.634v5.725a.64.64 0 0 0 1.088.45.632.632 0 0 0 .185-.45V6.479a.636.636 0 0 0-.634-.634Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DISCOUNT_OUTLINE = [\n\t\"<path d='M9.273 9.91a.636.636 0 1 0 0-1.274.636.636 0 0 0 0 1.273ZM6.727 7.364a.636.636 0 1 0 0-1.273.636.636 0 0 0 0 1.273ZM6.546 9.91a.455.455 0 0 1-.322-.778L9.127 6.23a.455.455 0 1 1 .643.643L6.868 9.776a.453.453 0 0 1-.322.133Z'/><path d='M8 15a1.93 1.93 0 0 1-1.369-.566l-.665-.665a.853.853 0 0 0-.607-.251h-.941a1.94 1.94 0 0 1-1.936-1.936v-.942a.852.852 0 0 0-.252-.606l-.665-.666a1.94 1.94 0 0 1 0-2.737l.665-.666a.852.852 0 0 0 .252-.606v-.942a1.94 1.94 0 0 1 1.935-1.935h.942a.853.853 0 0 0 .606-.252l.666-.665a1.94 1.94 0 0 1 2.738 0l.665.665a.853.853 0 0 0 .607.251h.942a1.94 1.94 0 0 1 1.935 1.936v.942a.854.854 0 0 0 .252.606l.665.666a1.94 1.94 0 0 1 0 2.737l-.665.665a.855.855 0 0 0-.252.607v.942a1.94 1.94 0 0 1-1.935 1.935h-.942a.85.85 0 0 0-.607.252l-.665.665A1.93 1.93 0 0 1 8 15ZM8 2.077a.857.857 0 0 0-.607.251l-.665.664a1.924 1.924 0 0 1-1.368.567h-.942a.86.86 0 0 0-.858.858v.942a1.924 1.924 0 0 1-.567 1.368l-.666.666a.86.86 0 0 0 0 1.214l.665.665a1.924 1.924 0 0 1 .567 1.368v.942a.86.86 0 0 0 .859.858h.942a1.925 1.925 0 0 1 1.368.567l.665.665a.86.86 0 0 0 1.214 0l.666-.665a1.923 1.923 0 0 1 1.368-.567h.941a.86.86 0 0 0 .859-.858v-.942a1.924 1.924 0 0 1 .567-1.368l.665-.665a.86.86 0 0 0 0-1.214l-.665-.666a1.925 1.925 0 0 1-.567-1.368v-.941a.86.86 0 0 0-.858-.859h-.942a1.924 1.924 0 0 1-1.368-.566l-.666-.666A.857.857 0 0 0 8 2.077Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DOCUMENT_GENERIC_OUTLINE = [\n\t\"<path d='M5.703 4.333a.417.417 0 0 0 0 .834h4.53a.417.417 0 0 0 0-.834h-4.53ZM5.286 7.678c0-.23.187-.416.417-.416h4.53a.417.417 0 0 1 0 .833h-4.53a.417.417 0 0 1-.417-.417ZM5.703 10.167a.417.417 0 1 0 0 .833H8.41a.417.417 0 1 0 0-.833H5.703Z'/><path d='M3 2.667C3 1.747 3.746 1 4.667 1h6.666C12.253 1 13 1.746 13 2.667v10c0 .92-.746 1.666-1.667 1.666H4.667c-.92 0-1.667-.746-1.667-1.666v-10Zm8.333-.834H4.667a.833.833 0 0 0-.834.834v10c0 .46.373.833.834.833h6.666c.46 0 .834-.373.834-.833v-10a.833.833 0 0 0-.834-.834Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DOCUMENT_HISTORY_ALT_OUTLINE = [\n\t\"<path stroke-linecap='round' stroke-linejoin='round' d='M7.5 5v4H11'/><circle cx='8' cy='8' r='6.4' stroke-width='1.2'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DOCUMENT_HISTORY_OUTLINE = [\n\t\"<path d='M14.17 3.44A6.928 6.928 0 1 1 3.264 11.99a.533.533 0 1 1 .839-.658 5.884 5.884 0 1 0-1.207-4.246s-.077.117-.308.298l-.81-.098.095-.526A6.922 6.922 0 0 1 14.169 3.44Z'/><path d='m.486 5.994 4.531-.29a.289.289 0 0 1 .252.458L3.177 9.026a.289.289 0 0 1-.442.029L.295 6.48a.289.289 0 0 1 .191-.486Z'/><path stroke-linecap='round' stroke-linejoin='round' d='M8 5v4h4'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DOCUMENT_LIST_OUTLINE = [\n\t\"<path d='M7.524 4.333a.417.417 0 0 0 0 .834h2.708a.417.417 0 0 0 0-.834H7.524ZM7.107 7.678c0-.23.187-.416.417-.416h2.708a.417.417 0 0 1 0 .833H7.524a.417.417 0 0 1-.417-.417ZM7.524 10.167a.417.417 0 1 0 0 .833h2.708a.417.417 0 1 0 0-.833H7.524Z'/><path d='M3 2.667C3 1.747 3.746 1 4.667 1h6.666C12.253 1 13 1.746 13 2.667v10c0 .92-.746 1.666-1.667 1.666H4.667c-.92 0-1.667-.746-1.667-1.666v-10Zm8.333-.834H4.667a.833.833 0 0 0-.834.834v10c0 .46.373.833.834.833h6.666c.46 0 .834-.373.834-.833v-10a.833.833 0 0 0-.834-.834Z'/><path d='M5.5 4.333a.417.417 0 0 0 0 .834h.292a.417.417 0 0 0 0-.834H5.5ZM5.5 7.262a.417.417 0 1 0 0 .833h.292a.417.417 0 0 0 0-.833H5.5ZM5.5 10.167a.417.417 0 1 0 0 .833h.292a.417.417 0 1 0 0-.833H5.5Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DRAG_HANDLE_OUTLINE = [\n\t\"<circle cx='5' cy='4' r='1.25'/><circle cx='5' cy='8' r='1.25'/><circle cx='5' cy='12' r='1.25'/><circle cx='11' cy='4' r='1.25'/><circle cx='11' cy='8' r='1.25'/><circle cx='11' cy='12' r='1.25'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ERROR_FILLED_RED = [\n\t\"<path fill='#E12845' fill-rule='evenodd' d='M7 14A7 7 0 1 0 7 0a7 7 0 0 0 0 14ZM3.353 3.044a.571.571 0 0 0-.185.933L6.192 7l-3.024 3.023a.572.572 0 0 0 .809.81L7 7.807l3.024 3.024a.573.573 0 0 0 .808-.809L7.808 7l3.024-3.023a.571.571 0 1 0-.809-.81L7 6.193 3.977 3.168a.571.571 0 0 0-.624-.124Z' clip-rule='evenodd'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_ERROR_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M7 13A6 6 0 1 0 7 1a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 7 0a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M4.164 4.13a.5.5 0 0 1 .706.034l5 5.5a.5.5 0 1 1-.74.672l-5-5.5a.5.5 0 0 1 .034-.706Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M9.836 4.13a.5.5 0 0 0-.706.034l-5 5.5a.5.5 0 1 0 .74.672l5-5.5a.5.5 0 0 0-.034-.706Z' clip-rule='evenodd'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_EXCLAMATION_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M8 15.2A7.2 7.2 0 1 0 8 .8a7.2 7.2 0 0 0 0 14.4Zm0 .8A8 8 0 1 0 8 0a8 8 0 0 0 0 16Z' clip-rule='evenodd'/><path d='M7.53 12.8v-1.056h.94V12.8h-.94Zm0-2.304V2.784h.94v7.712h-.94Z'/><path fill-rule='evenodd' d='M8 15.04A7.04 7.04 0 1 0 8 .96a7.04 7.04 0 0 0 0 14.08ZM8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_EXPAND_OUTLINE = [\n\t\"<g clip-path='url(#a)'><path d='M.35 6.5V1L.363.87A.65.65 0 0 1 1 .35h6l.13.013a.65.65 0 0 1 0 1.274L7 1.65H1.65V6.5a.65.65 0 0 1-1.3 0ZM15.65 10v5.5l-.013.13a.65.65 0 0 1-.637.52H9l-.13-.013a.65.65 0 0 1 0-1.274L9 14.85h5.35V10a.65.65 0 0 1 1.3 0Z'/><path d='M1.063 1.019a.65.65 0 0 1 .82-.044l.098.088 5 5.5.079.106a.65.65 0 0 1-.943.856l-.098-.088-5-5.5-.079-.106a.65.65 0 0 1 .123-.812ZM9.063 9.019a.65.65 0 0 1 .82-.044l.098.088 5 5.5.079.106a.65.65 0 0 1-.943.856l-.098-.088-5-5.5-.079-.106a.65.65 0 0 1 .123-.812Z'/></g><defs><clipPath id='a'><path d='M0 0h16v16H0z'/></clipPath></defs>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_EXPORT_OUTLINE = [\n\t\"<g fill-rule='evenodd' clip-path='url(#a)' clip-rule='evenodd'><path d='M0 4.435c0-.317.257-.574.574-.574h6.694a.574.574 0 1 1 0 1.147h-6.12v9.844h9.85V8.258a.574.574 0 0 1 1.147 0v7.168a.574.574 0 0 1-.574.573H.574A.574.574 0 0 1 0 15.426V4.435Z'/><path d='M7.973 1.049c0-.317.256-.574.573-.574L14.78.467c.317 0 .574.255.575.572l.008 6.232a.574.574 0 0 1-1.148.001l-.006-4.847-8.29 8.308a.574.574 0 0 1-.813-.81l8.29-8.308-4.85.006a.574.574 0 0 1-.574-.572Z'/></g><defs><clipPath id='a'><path d='M0 0h16v16H0z'/></clipPath></defs>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_EYE_CLOSED_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.884 5.18a.5.5 0 0 0-.704-.064l.704.063Zm0 0 .005.006.022.025a8.287 8.287 0 0 0 .464.478c.327.31.803.717 1.398 1.104C4.76 7.434 6.045 8 7.5 8c1.241 0 2.333-.411 3.253-.935.668-.38 1.264-.855 1.696-1.24a11.508 11.508 0 0 0 .672-.651l.007-.008.002-.002a.5.5 0 0 1 .74.672L13.5 5.5l.37.336-.001.002-.003.003-.011.012-.041.043c-.035.037-.085.09-.15.155a12.526 12.526 0 0 1-1.8 1.5l1.948 1.559a.5.5 0 0 1-.624.78l-2.24-1.792c-.839.44-1.828.799-2.948.883V11.5a.5.5 0 1 1-1 0V8.981c-1.319-.099-2.478-.576-3.403-1.12l-1.72 1.968a.5.5 0 1 1-.753-.658l1.63-1.866A10.935 10.935 0 0 1 1.27 5.993a6.076 6.076 0 0 1-.141-.158l-.009-.01-.003-.003V5.82L1.5 5.5l-.383.32a.5.5 0 0 1 .063-.704' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_EYE_OPEN_FILLED = [\n\t\"<path d='M14.333 7.583S11.833 3 7.667 3C3.5 3 1 7.583 1 7.583s2.5 4.584 6.667 4.584c4.166 0 6.666-4.584 6.666-4.584Zm-12.356 0 .162-.24c.28-.4.691-.932 1.221-1.462C4.434 4.807 5.9 3.833 7.667 3.833c1.766 0 3.232.974 4.306 2.048a10.934 10.934 0 0 1 1.383 1.702 10.934 10.934 0 0 1-1.383 1.702c-1.074 1.075-2.54 2.048-4.306 2.048S4.434 10.36 3.36 9.286a10.946 10.946 0 0 1-1.383-1.703Z'/><path d='M4.75 7.583a2.917 2.917 0 1 1 5.833 0 2.917 2.917 0 0 1-5.833 0Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_EYE_OPEN_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M7.43 2.208c-1.228.09-2.46.475-3.69 1.16L2.118 1.808a.588.588 0 0 0-.808 0 .535.535 0 0 0 0 .777l1.447 1.391C1.887 4.573 1.02 5.32.153 6.22a.534.534 0 0 0 0 .748C2.763 9.674 5.39 10.999 8 11c2.61.001 5.238-1.32 7.848-4.034l.004-.004.057-.072.047-.085.029-.086.014-.095-.002-.089-.02-.094-.032-.084-.043-.071-.054-.066c-.866-.9-1.734-1.648-2.604-2.244l1.446-1.39a.535.535 0 0 0 0-.777.588.588 0 0 0-.808 0l-1.62 1.557C11.033 2.68 9.8 2.298 8.572 2.207V.549A.561.561 0 0 0 8.001 0a.561.561 0 0 0-.572.55v1.658Zm.683 1.078a.629.629 0 0 1-.224 0c-2.182.038-4.348 1.159-6.529 3.307C3.578 8.778 5.781 9.9 8 9.901c2.22.001 4.424-1.119 6.642-3.308-2.18-2.152-4.348-3.271-6.53-3.307ZM8 3.846c-1.578 0-2.858 1.23-2.858 2.747 0 1.516 1.28 2.747 2.858 2.747 1.577 0 2.857-1.23 2.857-2.747 0-1.516-1.28-2.747-2.857-2.747Zm0 1.099c.946 0 1.714.738 1.714 1.648 0 .91-.768 1.648-1.714 1.648-.947 0-1.715-.738-1.715-1.648 0-.91.768-1.648 1.715-1.648Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 11\",\n] as const;\n\nexport const ICON_FACEBOOK_FILLED = [\n\t\"<path d='M22 12.061C22 6.504 17.523 2 12.001 2 6.477 2.001 2 6.504 2 12.063c0 5.02 3.657 9.182 8.436 9.937v-7.03H7.9v-2.908h2.54V9.845c0-2.52 1.493-3.913 3.777-3.913 1.095 0 2.238.196 2.238.196v2.475h-1.26c-1.242 0-1.63.776-1.63 1.572v1.887h2.773l-.442 2.907h-2.331v7.03C18.343 21.245 22 17.083 22 12.062Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_FIRE_FILLED = [\n\t\"<path d='M19.069 11.051a7.768 7.768 0 0 0-1.853-2.575l-.65-.597a.18.18 0 0 0-.291.074l-.291.834c-.181.523-.514 1.057-.986 1.582a.14.14 0 0 1-.091.045.124.124 0 0 1-.097-.034.131.131 0 0 1-.044-.107c.082-1.346-.32-2.863-1.2-4.515-.73-1.373-1.742-2.444-3.007-3.19l-.924-.543a.18.18 0 0 0-.268.163l.05 1.073c.033.733-.052 1.381-.253 1.92-.246.66-.6 1.272-1.05 1.822a6.61 6.61 0 0 1-1.063 1.03A7.882 7.882 0 0 0 4.81 10.75a7.774 7.774 0 0 0-.19 6.49 7.854 7.854 0 0 0 4.19 4.149c.97.406 1.998.612 3.06.612 1.061 0 2.09-.206 3.06-.61a7.791 7.791 0 0 0 2.501-1.67 7.737 7.737 0 0 0 2.307-5.52c0-1.09-.223-2.15-.668-3.149Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_FISH_FILLED = [\n\t\"<path d='M24 12c0-.775-.669-2.192-2.138-3.469a9.705 9.705 0 0 0-2.826-1.693.148.148 0 0 0-.184.073.89.89 0 0 1-.022.04l-.45.746a8.589 8.589 0 0 0 .004 8.615l.01.018.41.75a.187.187 0 0 0 .232.085C22.483 15.817 24 13.195 24 12Zm-4.402-.007a.75.75 0 1 1-.195-1.487.75.75 0 0 1 .195 1.487Z'/><path d='M15.724 12c0-1.778.47-3.525 1.363-5.062l.006-.01.216-.36a.187.187 0 0 0-.12-.281 13.325 13.325 0 0 0-1.841-.253.372.372 0 0 1-.201-.075c-.904-.687-2.696-1.889-4.522-2.198a.75.75 0 0 0-.844.946l.498 1.743a.187.187 0 0 1-.113.226c-1.728.642-3.215 1.817-4.3 2.712a.375.375 0 0 1-.472.003 14.548 14.548 0 0 0-.454-.346C3.082 7.688.899 7.509.807 7.502a.75.75 0 0 0-.79.91c.02.09.432 1.907 1.487 3.356a.38.38 0 0 1 0 .448C.449 13.666.037 15.482.018 15.573a.75.75 0 0 0 .789.91c.093-.007 2.275-.188 4.13-1.542.152-.111.3-.224.444-.338a.375.375 0 0 1 .472.003c1.09.9 2.58 2.075 4.312 2.719a.187.187 0 0 1 .114.226l-.5 1.743a.75.75 0 0 0 .844.946c.804-.136 2.432-.603 4.502-2.195a.383.383 0 0 1 .204-.078c.618-.04 1.233-.123 1.839-.248a.188.188 0 0 0 .126-.274l-.211-.388A10.069 10.069 0 0 1 15.724 12Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_GLOBE_OUTLINE = [\n\t\"<path d='M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm7.934 9h-2.938a14.86 14.86 0 0 0-1.186-5.079A8.013 8.013 0 0 1 19.934 11zM12 20c-.491 0-1.48-1.819-1.888-5H13.888C13.48 18.181 12.491 20 12 20zm-2-7h4c-.086 1.183-.297 2.24-.606 3.11C13.077 16.922 12.545 18 12 18c-.545 0-1.077-1.078-1.394-1.89C10.297 15.24 10.086 14.183 10 13zm0-2c.086-1.183.297-2.24.606-3.11C10.923 7.078 11.455 6 12 6c.545 0 1.077 1.078 1.394 1.89C13.703 8.76 13.914 9.817 14 11h-4zm-2.81 5.079A14.86 14.86 0 0 0 8.004 11H5.066a8.013 8.013 0 0 0 4.124 5.079zM5.066 13h2.938c.205 1.842.61 3.561 1.186 5.079A8.013 8.013 0 0 1 5.066 13zm9.748 5.079A14.86 14.86 0 0 0 15.996 13h2.938a8.013 8.013 0 0 1-4.18 5.079zM15.996 11a14.86 14.86 0 0 0-1.186-5.079A8.013 8.013 0 0 1 18.934 11h-2.938zM9.19 5.921A14.86 14.86 0 0 0 8.004 11H5.066A8.013 8.013 0 0 1 9.19 5.921z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_GOOGLE_FILLED = [\n\t\"<path d='M21.823 10.363c.119.685.178 1.379.177 2.074 0 3.104-1.11 5.728-3.04 7.504h.002c-1.688 1.56-4.009 2.463-6.76 2.463a10.202 10.202 0 0 1 0-20.403 9.805 9.805 0 0 1 6.824 2.655l-2.912 2.912a5.543 5.543 0 0 0-3.913-1.53c-2.66 0-4.922 1.795-5.728 4.213a6.11 6.11 0 0 0 0 3.906h.004c.81 2.414 3.067 4.21 5.728 4.21 1.375 0 2.556-.353 3.471-.975h-.004a4.72 4.72 0 0 0 2.04-3.1h-5.51v-3.927l9.62-.002Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_HASHTAG_OUTLINE = [\n\t\"<path d='M4.758 13.704c-.192 0-.325-.059-.4-.176-.064-.107-.074-.288-.032-.544l.352-2.096h-1.76c-.149 0-.25-.037-.304-.112-.053-.085-.069-.224-.048-.416.022-.192.059-.336.112-.432a.459.459 0 0 1 .256-.192c.118-.043.246-.064.384-.064H4.87l.48-2.928H3.606c-.149 0-.256-.037-.32-.112-.053-.075-.069-.203-.048-.384.022-.203.064-.352.128-.448a.459.459 0 0 1 .256-.192c.107-.043.235-.064.384-.064h1.536l.4-2.4c.043-.235.096-.41.16-.528a.495.495 0 0 1 .288-.24c.128-.053.304-.08.528-.08.224 0 .363.064.416.192.064.117.07.325.016.624l-.416 2.432h3.264l.368-2.336c.043-.235.091-.416.144-.544a.494.494 0 0 1 .256-.272c.118-.064.294-.096.528-.096.224 0 .374.059.448.176.075.107.091.293.048.56l-.4 2.512h1.472c.182 0 .294.048.336.144.054.096.059.24.016.432a1.096 1.096 0 0 1-.176.432.475.475 0 0 1-.256.16 1.265 1.265 0 0 1-.304.032h-1.312l-.448 2.928h1.456c.182 0 .294.053.336.16a.624.624 0 0 1 .032.352 1.84 1.84 0 0 1-.176.464.463.463 0 0 1-.24.192.975.975 0 0 1-.336.048h-1.296l-.32 1.952a1.427 1.427 0 0 1-.128.48.616.616 0 0 1-.304.288c-.128.064-.314.096-.56.096-.17 0-.293-.059-.368-.176-.074-.107-.09-.293-.048-.56l.32-2.08H6.07l-.32 1.92c-.032.203-.08.373-.144.512a.628.628 0 0 1-.288.288c-.128.064-.314.096-.56.096Zm1.488-4.032H9.51l.464-2.928h-3.2l-.528 2.928Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_HOME_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M2.642 6.408c0-.339.165-.656.442-.85l4.321-3.025c.357-.25.833-.25 1.19 0l4.32 3.025c.278.194.443.511.443.85v6.913c0 .573-.464 1.037-1.037 1.037H3.679a1.037 1.037 0 0 1-1.037-1.037V6.408ZM8 3.383 3.679 6.408v6.913h8.642V6.408L8 3.383Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M10.765 14.358h-5.53v-3.917h1.037v2.88h3.456v-2.88h1.037v3.917Zm-1.037-3.917S9.728 9 8 9s-1.728 1.44-1.728 1.44c-1.038 0-1.038 0-1.038-.002v-.023a1.617 1.617 0 0 1 .008-.126 2.602 2.602 0 0 1 .357-1.103c.41-.683 1.185-1.224 2.4-1.224 1.216 0 1.993.54 2.403 1.224a2.601 2.601 0 0 1 .363 1.23v.023H9.728ZM7.693 2.1a.519.519 0 0 1 .614 0l6.481 4.753a.519.519 0 0 1-.613.837L8 3.162 1.825 7.69a.519.519 0 1 1-.613-.837L7.693 2.1Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_IMPORT_OUTLINE = [\n\t\"<g fill-rule='evenodd' clip-path='url(#a)' clip-rule='evenodd'><path d='M16 11.565a.574.574 0 0 1-.574.573H8.732a.574.574 0 1 1 0-1.147h6.12V1.147h-9.85v6.595a.574.574 0 0 1-1.147 0V.574c0-.317.257-.574.574-.574h10.997c.317 0 .574.257.574.574v10.99Z'/><path d='M8.027 14.95a.574.574 0 0 1-.573.574l-6.235.009a.574.574 0 0 1-.575-.573L.636 8.728a.574.574 0 0 1 1.148-.002l.006 4.848 8.29-8.308a.574.574 0 0 1 .813.81l-8.29 8.308 4.85-.007c.317 0 .574.256.574.573Z'/></g><defs><clipPath id='a'><path d='M0 0h16v16H0z'/></clipPath></defs>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_INFO_FILLED_BLUE = [\n\t\"<path fill='#275FFD' fill-rule='evenodd' d='M7 14A7 7 0 1 0 7 0a7 7 0 0 0 0 14Zm.32-9.24a.88.88 0 1 0 0-1.76.88.88 0 0 0 0 1.76ZM6.123 5.97l2.015-.253-.881 4.139c-.062.299.026.469.268.469.17 0 .428-.062.603-.217l-.077.366c-.253.304-.81.526-1.289.526-.618 0-.881-.371-.711-1.16L6.7 6.79c.056-.258.004-.35-.253-.413l-.397-.072.072-.335Z' clip-rule='evenodd'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_INFO_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M7 13A6 6 0 1 0 7 1a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 7 0a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path d='m8.138 5.716-2.015.253-.072.335.397.072c.257.062.309.155.252.413L6.05 9.84c-.17.789.094 1.16.712 1.16.48 0 1.036-.222 1.289-.526l.077-.366a.974.974 0 0 1-.603.217c-.242 0-.33-.17-.268-.47l.881-4.139ZM8.2 3.88a.88.88 0 1 1-1.76 0 .88.88 0 0 1 1.76 0Z'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_INSTAGRAM_FILLED = [\n\t\"<path d='M12 8.876A3.13 3.13 0 0 0 8.876 12 3.13 3.13 0 0 0 12 15.124 3.13 3.13 0 0 0 15.124 12 3.13 3.13 0 0 0 12 8.876ZM21.37 12c0-1.294.012-2.576-.06-3.867-.073-1.5-.415-2.831-1.512-3.928-1.1-1.1-2.428-1.44-3.928-1.512-1.294-.073-2.576-.061-3.868-.061-1.293 0-2.575-.012-3.867.061-1.5.073-2.831.415-3.928 1.512-1.1 1.099-1.439 2.428-1.512 3.928-.072 1.294-.06 2.576-.06 3.867s-.012 2.576.06 3.867c.073 1.5.415 2.831 1.512 3.928 1.1 1.1 2.428 1.44 3.928 1.512 1.294.073 2.576.061 3.867.061 1.294 0 2.576.012 3.867-.061 1.5-.073 2.832-.415 3.929-1.512 1.099-1.099 1.439-2.428 1.511-3.928.075-1.291.061-2.573.061-3.867ZM12 16.807A4.8 4.8 0 0 1 7.193 12 4.8 4.8 0 0 1 12 7.193 4.8 4.8 0 0 1 16.807 12 4.8 4.8 0 0 1 12 16.807Zm5.004-8.688a1.121 1.121 0 0 1-1.123-1.123c0-.621.502-1.123 1.123-1.123a1.121 1.121 0 0 1 .43 2.16 1.12 1.12 0 0 1-.43.086Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_KEY_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M12.888 4.373c0-1.205-.912-2.191-2.038-2.191s-2.038.986-2.038 2.19c0 1.207.912 2.183 2.038 2.183s2.038-.976 2.038-2.182m1.112 0C14 2.51 12.59 1 10.85 1S7.7 2.51 7.7 4.373c0 .717.21 1.382.565 1.93l-6.102 6.534a.625.625 0 0 0 0 .841.53.53 0 0 0 .786 0l.834-.892q.021.03.047.058l.918.982a.53.53 0 0 0 .786 0 .625.625 0 0 0 0-.842l-.917-.982a1 1 0 0 0-.055-.051l.545-.584.02.023.525.56a.53.53 0 0 0 .786 0 .625.625 0 0 0 0-.84l-.524-.563-.021-.02 3.16-3.383c.51.38 1.129.602 1.797.602 1.74 0 3.15-1.51 3.15-3.373' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_LACTOSE_INTOLERANT_FILLED = [\n\t\"<path fill-rule='evenodd' d='M1.293 1.293a1 1 0 0 1 1.414 0L8.494 7.08a.99.99 0 0 1 .028.027l7.613 7.614.015.015 6.557 6.557a1 1 0 0 1-1.414 1.414L18 19.414V20a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3v-9.788a5 5 0 0 1 .539-2.259L1.293 2.707a1 1 0 0 1 0-1.414ZM8.086 9.5a3 3 0 0 0-.086.712v3.438a7.472 7.472 0 0 1 4.386.428c.145.06.292.114.44.162L8.086 9.5Zm3.528 6.422a7.472 7.472 0 0 0 3.453.56l-3.453-.56Zm3.453.56.933.932V20a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4.293a5.467 5.467 0 0 1 3.614.215M7 2a1 1 0 0 1 1-1h8a1 1 0 1 1 0 2v1.789a3 3 0 0 0 .504 1.664l.656.984a5 5 0 0 1 .84 2.775v1.131a1 1 0 1 1-2 0v-1.131a3 3 0 0 0-.504-1.665l-.656-.984A5 5 0 0 1 14 4.789V3h-4v.343a1 1 0 0 1-2 0V3a1 1 0 0 1-1-1Z' clip-rule='evenodd'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_LAYOUT_1_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.733 1.444c0-.245.2-.444.445-.444h4.444c.246 0 .445.199.445.444V5.89a.444.444 0 0 1-.445.444H2.178a.444.444 0 0 1-.445-.444V1.444Zm.89.445v3.556h3.555V1.889H2.622ZM1.733 8.111c0-.245.2-.444.445-.444h4.444c.246 0 .445.199.445.444v4.445a.444.444 0 0 1-.445.444H2.178a.444.444 0 0 1-.445-.444V8.111Zm.89.445v3.556h3.555V8.555H2.622ZM9.067 1.444c0-.245.186-.444.416-.444h4.167c.23 0 .417.199.417.444v11.112c0 .245-.187.444-.417.444H9.483c-.23 0-.416-.199-.416-.444V1.444Zm.833.445V12.11h3.333V1.89H9.9Z' clip-rule='evenodd'/>\",\n\t\"0 0 15 14\",\n] as const;\n\nexport const ICON_LAYOUT_2_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M7.241 1.305a.439.439 0 0 0-.439-.44h-4.39a.439.439 0 0 0-.439.44v4.39c0 .242.197.439.44.439h4.39a.439.439 0 0 0 .438-.439v-4.39Zm-.878.439v3.512H2.851V1.744h3.512ZM11.266 5.11a1.683 1.683 0 1 1 0-3.366 1.683 1.683 0 0 1 0 3.366Zm0 .878a2.561 2.561 0 1 1 0-5.122 2.561 2.561 0 0 1 0 5.122ZM2.344 8.134c-.245 0-.444.187-.444.417v4.167c0 .23.199.416.444.416h11.111c.246 0 .445-.186.445-.416V8.55c0-.23-.2-.417-.444-.417H2.344Zm.445.834H13.01V12.3H2.789V8.968Z' clip-rule='evenodd'/>\",\n\t\"0 0 15 14\",\n] as const;\n\nexport const ICON_LAYOUT_3_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.733 1.444c0-.245.2-.444.445-.444h4.444c.246 0 .445.199.445.444V5.89a.444.444 0 0 1-.445.444H2.178a.444.444 0 0 1-.445-.444V1.444Zm.89.445v3.556h3.555V1.889H2.622ZM1.733 8.111c0-.245.2-.444.445-.444h4.444c.246 0 .445.199.445.444v4.445a.444.444 0 0 1-.445.444H2.178a.444.444 0 0 1-.445-.444V8.111Zm.89.445v3.556h3.555V8.555H2.622ZM9.067 1.444c0-.245.186-.444.416-.444h4.167c.23 0 .417.199.417.444v11.112c0 .245-.187.444-.417.444H9.483c-.23 0-.416-.199-.416-.444V1.444Zm.833.445V12.11h3.333V1.89H9.9Z' clip-rule='evenodd'/>\",\n\t\"0 0 15 14\",\n] as const;\n\nexport const ICON_LAYOUT_4_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M2.178 7.667a.444.444 0 0 0-.445.444v4.444c0 .246.2.445.445.445h4.444a.444.444 0 0 0 .445-.445V8.111a.444.444 0 0 0-.445-.445H2.178Zm.444.888h3.556v3.556H2.622V8.555ZM6.03 3.593a1.704 1.704 0 1 1-3.408 0 1.704 1.704 0 0 1 3.408 0Zm.888 0a2.593 2.593 0 1 1-5.185 0 2.593 2.593 0 0 1 5.185 0ZM9.067 12.556c0 .245.186.444.416.444h4.167c.23 0 .416-.199.416-.444V1.444c0-.245-.186-.444-.416-.444H9.483c-.23 0-.416.199-.416.444v11.112Zm.833-.445V1.89h3.333V12.11H9.9Z' clip-rule='evenodd'/>\",\n\t\"0 0 15 14\",\n] as const;\n\nexport const ICON_LAYOUT_5_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.668 3.588a1.744 1.744 0 1 0 3.488 0 1.744 1.744 0 0 0-3.488 0Zm-.91 0a2.654 2.654 0 1 0 5.308 0 2.654 2.654 0 0 0-5.308 0ZM1.668 10.412a1.744 1.744 0 1 0 3.488 0 1.744 1.744 0 0 0-3.488 0Zm-.91 0a2.654 2.654 0 1 0 5.308 0 2.654 2.654 0 0 0-5.308 0ZM15.042 2.223a.455.455 0 0 0-.455-.455H8.52a.455.455 0 1 0 0 .91h6.066a.455.455 0 0 0 .455-.455ZM15.042 5.408a.455.455 0 0 0-.455-.455H8.52a.455.455 0 1 0 0 .91h6.066a.455.455 0 0 0 .455-.455ZM15.042 8.592a.455.455 0 0 0-.455-.455H8.52a.455.455 0 1 0 0 .91h6.066a.455.455 0 0 0 .455-.455ZM15.042 11.777a.455.455 0 0 0-.455-.455H8.52a.455.455 0 1 0 0 .91h6.066a.455.455 0 0 0 .455-.455Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 14\",\n] as const;\n\nexport const ICON_LEAF_FILLED = [\n\t\"<path d='M20.977 3.27 20.857 2l-1.21.403c-2.072.72-4.285.94-6.458.645a11.96 11.96 0 0 0-6.73.907 7.285 7.285 0 0 0-4.323 5.45 9.068 9.068 0 0 0 .393 4.615c.34-.768.737-1.508 1.189-2.216a9.925 9.925 0 0 1 4.1-3.456 11.244 11.244 0 0 1 5.099-1.008c-1.67.255-3.27.856-4.696 1.763a9.553 9.553 0 0 0-1.874 1.542 11.465 11.465 0 0 0-1.4 1.924 16.514 16.514 0 0 0-1.582 4.575A26.62 26.62 0 0 0 2.841 22h2.015a30.92 30.92 0 0 1 .595-4.353 9.32 9.32 0 0 0 4.554 1.119 11.083 11.083 0 0 0 4.312-.877c7.668-3.274 6.66-14.166 6.66-14.62Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_LINKEDIN_FILLED = [\n\t\"<path d='M2 3.433C2 2.64 2.658 2 3.469 2H20.53C21.343 2 22 2.641 22 3.433v17.134C22 21.36 21.343 22 20.531 22H3.47C2.658 22 2 21.359 2 20.567V3.433Zm6.179 15.31V9.71H5.177v9.031H8.18Zm-1.5-10.265c1.046 0 1.697-.693 1.697-1.56-.018-.887-.65-1.56-1.677-1.56C5.67 5.357 5 6.032 5 6.918c0 .867.651 1.56 1.659 1.56h.02Zm6.135 10.264V13.7c0-.27.02-.54.1-.733.216-.538.71-1.097 1.54-1.097 1.086 0 1.52.827 1.52 2.042v4.832h3.001v-5.18c0-2.776-1.48-4.066-3.455-4.066-1.592 0-2.306.876-2.706 1.492v.031h-.02l.02-.031V9.71h-3c.037.848 0 9.031 0 9.031h3Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_LOCATION_FILLED = [\n\t\"<path d='M11.5 22S19 14.892 19 9.5a7.5 7.5 0 0 0-15 0C4 14.892 11.5 22 11.5 22Zm0-8.75a3.75 3.75 0 1 1 0-7.5 3.75 3.75 0 0 1 0 7.5Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_LOCK_PASSWORD_1_OUTLINE = [\n\t\"<path d='M5.961 9.278h4.088c.844 0 1.531-.687 1.531-1.532V5.151a1.53 1.53 0 0 0-1.453-1.524V2.623C10.127 1.453 9.175.5 8.005.5s-2.123.952-2.123 2.123v1.003A1.53 1.53 0 0 0 4.43 5.15v2.595c0 .846.687 1.533 1.531 1.533M8 1.5c.676 0 1.231.558 1.231 1.234v.885H6.778v-.885A1.23 1.23 0 0 1 8 1.5m-2.5 4c0-.35 0-.781.547-.781h4.002c.451 0 .53.43.53.781v2c0 .35-.089.828-.618.828H6.07c-.462 0-.571-.478-.571-.828zM13.553 10.543H2.602C1.547 10.543 1 11.197 1 12v2.117c0 .804.653 1.458 1.457 1.458h11.096c.803 0 1.457-.654 1.457-1.457V12c0-.804-.653-1.457-1.457-1.457M14 14.118c0 .308-.138.482-.447.482H2.457c-.31 0-.457-.174-.457-.482V12c0-.309.293-.49.602-.49h10.951c.31 0 .447.181.447.49z'/><path d='M4.653 13.806a.652.652 0 1 0 0-1.306.652.652 0 1 0 0 1.306M8 13.806A.652.652 0 1 0 8 12.5a.652.652 0 1 0 0 1.306M11.653 13.806a.652.652 0 1 0 0-1.306.652.652 0 1 0 0 1.306'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_LOCK_PASSWORD_2_OUTLINE = [\n\t\"<path d='M14.41 9.018a2.11 2.11 0 0 0-1.642-.601V7.1c.001-.908-.735-1.646-1.645-1.648H9.845v-2A2.96 2.96 0 0 0 8.364.895a2.97 2.97 0 0 0-2.96 0 2.96 2.96 0 0 0-1.48 2.558v2H2.644C1.735 5.455.999 6.193 1 7.1v6.75c0 .908.735 1.647 1.645 1.649h8.478a1.65 1.65 0 0 0 1.645-1.65v-1.315a2.073 2.073 0 0 0 1.641-3.517M4.936 3.453a1.947 1.947 0 0 1 3.897 0v2H4.936zm6.82 10.398a.636.636 0 0 1-.633.638H2.645a.636.636 0 0 1-.633-.638V7.1a.635.635 0 0 1 .633-.637h1.782c.001-.004 4.906.003 4.91 0h1.786a.635.635 0 0 1 .633.637v1.316H8.443a2.06 2.06 0 0 0 0 4.118h3.313zm1.197-2.327c-.36-.002-4.035.002-4.499 0a1.049 1.049 0 0 1-.01-2.096h4.51a1.049 1.049 0 0 1-.001 2.096m-2.258-.542a.506.506 0 0 1 0-1.012.506.506 0 0 1 0 1.011m1.796 0a.506.506 0 0 1 .001-1.012.506.506 0 0 1 0 1.011m-3.593 0a.506.506 0 0 1 0-1.012.506.506 0 0 1 0 1.011'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MAIL_OUTLINE = [\n\t\"<path d='M1.714 2.5C.763 2.5 0 3.303 0 4.256v7.91c0 .954.763 1.763 1.714 1.763h12.572c.951 0 1.714-.81 1.714-1.762V4.256c0-.953-.763-1.756-1.714-1.756H1.714Zm.084 1.143h12.41L8.34 9.214c-.213.203-.452.203-.666 0L1.798 3.643Zm-.655.952 3.893 3.69-3.893 3.882V4.595Zm13.714 0v7.572l-3.88-3.887 3.88-3.685Zm-4.702 4.47 3.708 3.72H2.143l3.72-3.714 1.024.97c.62.589 1.618.59 2.238 0l1.03-.976Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MENU_CLOSE_OUTLINE = [\n\t\"<path d='m13.003 1.013.107-.097a1.413 1.413 0 0 1 1.988 1.988L15 3.01 3.01 15a1.413 1.413 0 1 1-1.998-1.999l11.99-11.99Z'/><path d='m14.987 12.989.097.107a1.413 1.413 0 0 1-1.988 1.988l-.107-.097L.999 2.997A1.413 1.413 0 0 1 2.997 1l11.99 11.99Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MENU_HAMBURGER_OUTLINE = [\n\t\"<path d='m14.857 0 .117.006a1.143 1.143 0 0 1 0 2.274l-.117.006H1.143a1.143 1.143 0 1 1 0-2.286h13.714ZM14.857 6.857l.117.006a1.143 1.143 0 0 1 0 2.274l-.117.006H1.143a1.143 1.143 0 0 1 0-2.286h13.714ZM14.857 13.714l.117.006a1.143 1.143 0 0 1 0 2.274l-.117.006H1.143a1.143 1.143 0 0 1 0-2.286h13.714Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MINUS_BICOLOR_TERTIARY_LIGHT = [\n\t\"<circle cx='8' cy='8' r='8' fill='#F7F3EE'/><path fill='#1B1B1B' fill-rule='evenodd' d='M3.929 8.5c0-.276.191-.5.428-.5H11.5c.237 0 .429.224.429.5s-.192.5-.429.5H4.357c-.237 0-.428-.224-.428-.5Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MINUS_BICOLOR_TERTIARY = [\n\t\"<circle cx='8' cy='8' r='8' fill='#E6D9CA'/><path fill='#1B1B1B' fill-rule='evenodd' d='M3.929 8.5c0-.276.191-.5.428-.5H11.5c.237 0 .429.224.429.5s-.192.5-.429.5H4.357c-.237 0-.428-.224-.428-.5Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MINUS_FILLED = [\n\t\"<path d='M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM4.357 8c-.236 0-.428.224-.428.5s.192.5.428.5H11.5c.237 0 .429-.224.429-.5S11.737 8 11.5 8H4.357Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MONEY_BILL_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M0 12.167V4.833c0-.053.002-.107.006-.16.072-.885.731-1.59 1.558-1.666.05-.005.1-.007.15-.007h12.572c.05 0 .1.002.15.007.827.076 1.486.781 1.558 1.666a2 2 0 0 1 .006.16v7.334c0 .053-.002.107-.006.16-.072.885-.731 1.59-1.558 1.666-.05.005-.1.007-.15.007H1.714c-.05 0-.1-.002-.15-.007-.827-.076-1.486-.781-1.558-1.666a2.009 2.009 0 0 1-.006-.16Zm2.829-7.945H1.714c-.315 0-.571.274-.571.611v1.192c.093.02.188.03.286.03.788 0 1.428-.684 1.428-1.527 0-.105-.01-.206-.028-.306Zm9.187 0H3.984c.011.1.016.203.016.306 0 1.518-1.152 2.75-2.571 2.75-.097 0-.192-.006-.286-.017v2.478c.094-.012.19-.017.286-.017C2.848 9.722 4 10.954 4 12.472c0 .103-.005.206-.016.306h8.032a2.88 2.88 0 0 1-.016-.306c0-1.518 1.152-2.75 2.571-2.75.097 0 .193.005.286.017V7.261c-.093.011-.19.017-.286.017-1.419 0-2.571-1.232-2.571-2.75 0-.103.005-.206.016-.306ZM8 10.111c.301 0 .571-.207.571-.5 0-.217-.167-.288-.332-.366-.246-.114-.528-.198-.784-.304-.67-.278-1.17-.705-1.17-1.552 0-.738.471-1.385 1.144-1.625v-.32c0-.337.255-.61.571-.61.316 0 .571.273.571.61v.32c.382.137.7.403.901.741.17.285.09.663-.176.844a.55.55 0 0 1-.788-.187A.584.584 0 0 0 8 6.889c-.301 0-.571.207-.571.5 0 .217.167.288.332.365.246.115.528.199.784.305.67.278 1.17.705 1.17 1.552 0 .738-.471 1.385-1.144 1.624v.32c0 .338-.255.612-.571.612-.316 0-.571-.274-.571-.611v-.32a1.73 1.73 0 0 1-.901-.742.637.637 0 0 1 .176-.843.55.55 0 0 1 .788.187c.1.17.293.273.508.273Zm5.171 2.667h1.115c.315 0 .571-.274.571-.611v-1.192a1.357 1.357 0 0 0-.286-.03c-.788 0-1.428.684-1.428 1.527 0 .105.01.207.028.306ZM1.143 10.975v1.192c0 .337.256.61.571.61H2.83c.018-.098.028-.2.028-.305 0-.843-.64-1.528-1.428-1.528-.098 0-.193.011-.286.031Zm13.714-4.95V4.833c0-.337-.256-.61-.571-.61H13.17c-.018.099-.028.2-.028.305 0 .843.64 1.528 1.428 1.528.098 0 .193-.011.286-.03Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MONEY_CASH_OUTLINE = [\n\t\"<path d='M16 6.417C16 3.432 13.605 1 10.667 1c-1.739 0-3.28.856-4.256 2.167H1.6c-.88 0-1.6.73-1.6 1.625v1.083c0 .417.16.796.416 1.083A1.625 1.625 0 0 0 0 8.042v1.083c0 .417.16.796.416 1.083A1.625 1.625 0 0 0 0 11.292v1.083C0 13.269.72 14 1.6 14h8.533c.88 0 1.6-.731 1.6-1.625v-.65C14.165 11.221 16 9.033 16 6.417ZM1.067 9.125V8.042A.54.54 0 0 1 1.6 7.5h3.84c.16.802.501 1.538.97 2.167H1.6a.539.539 0 0 1-.533-.542Zm0-4.333A.54.54 0 0 1 1.6 4.25h4.181a5.443 5.443 0 0 0-.448 2.167H1.6a.54.54 0 0 1-.533-.542V4.792Zm9.6 7.583a.54.54 0 0 1-.534.542H1.6a.54.54 0 0 1-.533-.542v-1.083a.54.54 0 0 1 .533-.542h5.883a5.24 5.24 0 0 0 3.184 1.083v.542Zm0-1.625C8.315 10.75 6.4 8.805 6.4 6.417c0-2.389 1.915-4.334 4.267-4.334 2.352 0 4.266 1.945 4.266 4.334 0 2.388-1.914 4.333-4.266 4.333Z'/><path d='M10.207 5.27h1.467c.22 0 .4-.208.4-.462s-.18-.462-.4-.462h-.7v-.384c0-.254-.18-.462-.399-.462-.22 0-.4.208-.4.462v.389c-.607.023-1.098.596-1.098 1.303s.507 1.308 1.13 1.308h.732c.183 0 .331.171.331.384s-.148.384-.331.384H9.473c-.22 0-.4.208-.4.462s.18.462.4.462h.699v.384c0 .254.18.462.4.462.219 0 .399-.208.399-.462v-.389c.607-.023 1.098-.596 1.098-1.303s-.507-1.308-1.13-1.308h-.732c-.183 0-.331-.171-.331-.384s.148-.384.332-.384Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MONEY_COIN_OUTLINE = [\n\t\"<path d='M14.7 8A6.7 6.7 0 1 0 8 14.7V16A8 8 0 1 1 8 0a8 8 0 0 1 0 16v-1.3c3.7 0 6.7-3 6.7-6.7Z'/><path d='M7.513 6.36h1.954c.293 0 .533-.277.533-.616 0-.339-.24-.616-.533-.616h-.932v-.512c0-.339-.24-.616-.532-.616-.293 0-.533.277-.533.616v.518c-.81.03-1.465.795-1.465 1.738s.677 1.744 1.508 1.744h.974c.245 0 .442.228.442.512 0 .283-.197.511-.442.511H6.533c-.293 0-.533.278-.533.617 0 .339.24.616.533.616h.932v.512c0 .339.24.616.532.616.293 0 .533-.277.533-.616v-.518c.81-.03 1.465-.795 1.465-1.738s-.677-1.744-1.508-1.744h-.974c-.245 0-.442-.228-.442-.512 0-.283.197-.511.442-.511Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MONEY_CREDIT_CARD_OUTLINE = [\n\t\"<path d='M13.143 3H2.857C1.28 3 0 4.232 0 5.75v5.5C0 12.768 1.28 14 2.857 14h10.286C14.72 14 16 12.768 16 11.25v-5.5C16 4.232 14.72 3 13.143 3ZM2.857 4.1h10.286c.943 0 1.714.743 1.714 1.65v.275H1.143V5.75c0-.907.771-1.65 1.714-1.65Zm10.286 8.8H2.857c-.943 0-1.714-.742-1.714-1.65V7.125h13.714v4.125c0 .908-.771 1.65-1.714 1.65Z'/><path d='M10.591 9c.332 0 .647.1.909.265A1.57 1.57 0 0 1 12.409 9C13.283 9 14 9.68 14 10.508c0 .83-.717 1.492-1.591 1.492-.332 0-.647-.1-.909-.265-.262.165-.56.265-.909.265C9.717 12 9 11.32 9 10.492 9 9.662 9.717 9 10.591 9Zm1.38 2.22c.123.066.28.1.42.1.49 0 .892-.381.892-.829 0-.464-.402-.845-.892-.845a.862.862 0 0 0-.42.1c.123.215.21.464.21.729 0 .282-.07.53-.21.745Zm-1.38.117c.49 0 .892-.381.892-.845 0-.465-.402-.846-.892-.846s-.892.381-.892.845c0 .465.402.846.892.846ZM5 8.5l.1.01a.5.5 0 0 1 0 .98L5 9.5H3a.5.5 0 0 1 0-1h2ZM7 10.5a.5.5 0 0 1 0 1H3a.5.5 0 0 1 0-1h4Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_NFC_FILLED = [\n\t\"<path d='M15 .5A2.5 2.5 0 0 1 17.5 3v12a2.5 2.5 0 0 1-2.5 2.5H3A2.5 2.5 0 0 1 .5 15V3A2.5 2.5 0 0 1 3 .5h12ZM5.994 4.622a.5.5 0 0 0-.822.306L5.167 5v8.667a.5.5 0 0 0 1 0V6.095l3.173 2.75.082.057a.5.5 0 0 0 .641-.74l-.069-.073-4-3.467Zm6.34-.122a.5.5 0 0 0-.5.5v7.69l-3.208-2.318a.5.5 0 0 0-.585.812l4 2.888.06.036a.5.5 0 0 0 .733-.441V5a.5.5 0 0 0-.5-.5Z'/>\",\n\t\"0 0 18 18\",\n] as const;\n\nexport const ICON_NFC_OUTLINE = [\n\t\"<path d='M16.5 3A1.5 1.5 0 0 0 15 1.5H3A1.5 1.5 0 0 0 1.5 3v12A1.5 1.5 0 0 0 3 16.5h12a1.5 1.5 0 0 0 1.5-1.5V3ZM5.167 13.667V5a.5.5 0 0 1 .827-.378l4 3.467.07.073a.5.5 0 0 1-.642.74l-.083-.057-3.172-2.75v7.572a.5.5 0 0 1-1 0ZM11.833 5a.5.5 0 0 1 1 0v8.667a.5.5 0 0 1-.792.405l-4-2.888-.076-.068a.5.5 0 0 1 .661-.744l3.207 2.316V5ZM17.5 15a2.5 2.5 0 0 1-2.5 2.5H3A2.5 2.5 0 0 1 .5 15V3A2.5 2.5 0 0 1 3 .5h12A2.5 2.5 0 0 1 17.5 3v12Z'/>\",\n\t\"0 0 18 18\",\n] as const;\n\nexport const ICON_PENCIL_OUTLINE = [\n\t\"<path d='M10.944 1c-.44 0-.88.165-1.213.498L1.737 9.497A2.515 2.515 0 0 0 1 11.275v2.148C1 14.286 1.714 15 2.577 15h2.148c.667 0 1.307-.265 1.778-.737l7.999-7.994a1.724 1.724 0 0 0 0-2.424l-2.347-2.347A1.708 1.708 0 0 0 10.943 1Zm.002 1.16c.14 0 .278.055.387.165l2.342 2.341a.54.54 0 0 1 0 .775l-1.15 1.15L9.41 3.474l1.15-1.15a.545.545 0 0 1 .387-.163ZM8.582 4.302 11.7 7.418 5.68 13.436a1.353 1.353 0 0 1-.956.395H2.577a.4.4 0 0 1-.41-.409v-2.148c0-.358.143-.703.396-.956l6.02-6.017Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PENCIL = [\n\t\"<path fill='#1B1B1B' d='M10.944 1c-.44 0-.88.165-1.213.498L1.737 9.497A2.515 2.515 0 0 0 1 11.275v2.148C1 14.286 1.714 15 2.577 15h2.148c.667 0 1.307-.265 1.778-.737l7.999-7.994a1.724 1.724 0 0 0 0-2.424l-2.347-2.347A1.708 1.708 0 0 0 10.943 1Zm.002 1.16c.14 0 .278.055.387.165l2.342 2.341a.54.54 0 0 1 0 .775l-1.15 1.15L9.41 3.474l1.15-1.15a.545.545 0 0 1 .387-.163ZM8.582 4.302 11.7 7.418 5.68 13.436a1.353 1.353 0 0 1-.956.395H2.577a.4.4 0 0 1-.41-.409v-2.148c0-.358.143-.703.396-.956l6.02-6.017Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PHONE_OUTLINE = [\n\t\"<path d='M9.951 15c-1.058 0-2.108-.347-2.927-1.029a26.112 26.112 0 0 1-3.52-3.553A24.78 24.78 0 0 1 .811 6.37C-.1 4.65.463 2.58 2.152 1.447l.168-.113c.402-.27.897-.383 1.393-.314a1.9 1.9 0 0 1 1.23.67l1.488 1.825c.615.755.44 1.823-.392 2.38l-.661.444A6.543 6.543 0 0 0 6.52 8.394a7.198 7.198 0 0 0 1.84 1.597l.655-.447c.403-.27.899-.382 1.393-.316.496.068.934.306 1.23.671l1.488 1.825c.615.754.44 1.822-.393 2.38l-.168.113c-.782.523-1.701.782-2.616.782l.002.001ZM3.434 2.136c-.13 0-.26.035-.372.111l-.167.112c-1.206.81-1.608 2.29-.956 3.519a23.758 23.758 0 0 0 2.57 3.866 25.05 25.05 0 0 0 3.361 3.392c1.087.906 2.75.977 3.952.17l.169-.113a.533.533 0 0 0 .13-.793l-1.488-1.825a.637.637 0 0 0-.41-.224.678.678 0 0 0-.465.105l-.66.443c-.425.285-1.003.299-1.438.032A8.466 8.466 0 0 1 5.514 9.07a7.687 7.687 0 0 1-1.34-2.414c-.15-.45.034-.944.46-1.23l.66-.443a.533.533 0 0 0 .13-.793L3.936 2.365a.646.646 0 0 0-.502-.23Zm9.415 5.973c.26-2.177-1.48-4.14-3.882-4.376-.345-.032-.652.192-.69.503-.037.311.212.592.555.626 1.715.168 2.958 1.57 2.773 3.125-.037.311.211.591.554.625a.74.74 0 0 0 .068.004c.316 0 .588-.217.622-.507Zm2.488.244c.199-1.657-.327-3.285-1.48-4.583-1.151-1.3-2.791-2.114-4.619-2.294-.342-.033-.652.192-.69.503-.037.311.212.591.555.625 1.495.147 2.838.814 3.78 1.877.942 1.063 1.372 2.394 1.21 3.75-.037.312.211.592.555.626a.747.747 0 0 0 .068.003c.315 0 .587-.216.621-.507Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PLUS_BICOLOR_TERTIARY_LIGHT = [\n\t\"<circle cx='8' cy='8' r='8' fill='#F7F3EE'/><path fill='#1B1B1B' fill-rule='evenodd' d='M8.522 4.078a.522.522 0 0 0-1.045 0v3.4h-3.4a.522.522 0 1 0 0 1.044h3.4v3.4a.522.522 0 0 0 1.045 0v-3.4h3.4a.522.522 0 0 0 0-1.045h-3.4v-3.4Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PLUS_BICOLOR_TERTIARY = [\n\t\"<circle cx='8' cy='8' r='8' fill='#E6D9CA'/><path fill='#1B1B1B' fill-rule='evenodd' d='M8.522 4.078a.522.522 0 0 0-1.045 0v3.4h-3.4a.522.522 0 1 0 0 1.044h3.4v3.4a.522.522 0 0 0 1.045 0v-3.4h3.4a.522.522 0 0 0 0-1.045h-3.4v-3.4Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PLUS_FILLED = [\n\t\"<path d='M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0Zm-.001 3.556a.522.522 0 0 0-.521.522v3.4h-3.4a.523.523 0 0 0 0 1.043h3.4v3.402a.522.522 0 0 0 1.043 0V8.52h3.4a.522.522 0 1 0 0-1.043h-3.4v-3.4A.523.523 0 0 0 8 3.556Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PRINTER_OUTLINE = [\n\t\"<path d='M13.035 3.69h-.547V1.368a.407.407 0 0 0-.407-.406H4.139a.407.407 0 0 0-.408.406V3.69h-.547a2.072 2.072 0 0 0-2.075 2.063v4.437c0 .224.183.406.408.406h2.214v2.958c0 .225.182.406.408.406h7.94a.406.406 0 0 0 .409-.406v-2.958H14.7a.407.407 0 0 0 .408-.406V5.754c0-1.137-.93-2.063-2.074-2.063ZM4.547 1.774h7.125V3.69H4.547V1.773Zm7.125 11.376H4.547V8.602h7.125v4.547Zm2.621-3.363H12.49V8.602h.596a.407.407 0 1 0 0-.811H3.135a.407.407 0 1 0 0 .811h.597v1.184H1.926V5.754c0-.69.565-1.251 1.259-1.251h9.85c.694 0 1.258.561 1.258 1.251v4.032Z'/><path d='M4.11 6.461c0 .667-1 .667-1 0s1-.667 1 0ZM10.519 9.367H5.558a.51.51 0 0 0-.52.5c0 .276.232.5.52.5h4.96a.51.51 0 0 0 .52-.5.51.51 0 0 0-.52-.5ZM10.519 11.367H5.558a.51.51 0 0 0-.52.5c0 .276.232.5.52.5h4.96a.51.51 0 0 0 .52-.5.51.51 0 0 0-.52-.5Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PURCHASE_ORDER_BILL_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.5.536C1.5.24 1.743 0 2.042 0h11.916c.3 0 .542.24.542.536v13.928c0 .198-.11.38-.287.473a.547.547 0 0 1-.558-.029l-2.676-1.787-2.676 1.787a.546.546 0 0 1-.622-.01l-2.66-1.914-2.66 1.914a.547.547 0 0 1-.565.044.535.535 0 0 1-.296-.478V.536Zm1.083.535v12.341l2.12-1.524a.547.547 0 0 1 .636 0l2.673 1.922 2.664-1.78a.547.547 0 0 1 .606 0l2.135 1.426V1.071H2.583Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M7.5 4a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1H8a.5.5 0 0 1-.5-.5ZM7.5 6.5A.5.5 0 0 1 8 6h3a.5.5 0 0 1 0 1H8a.5.5 0 0 1-.5-.5ZM4.5 9a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5Z' clip-rule='evenodd'/><path d='M5.162 6.588v.28c0 .073.052.132.116.132h.297c.064 0 .116-.059.116-.132v-.28c.219-.044.4-.147.528-.309a.986.986 0 0 0 .22-.647c0-.073 0-.132-.013-.19a2.637 2.637 0 0 0-.04-.163c-.012-.058-.038-.103-.064-.147-.025-.044-.064-.088-.09-.117-.026-.03-.064-.074-.116-.103-.039-.03-.09-.06-.129-.088-.039-.03-.09-.045-.142-.074a.668.668 0 0 0-.154-.059c-.052-.014-.103-.044-.168-.059a1.912 1.912 0 0 1-.31-.147c-.05-.044-.077-.088-.077-.147s.013-.103.065-.132c.051-.044.116-.059.206-.059.168 0 .348.074.541.206.052.044.117.03.155-.03l.245-.338c.026-.03.026-.073.026-.103a.1.1 0 0 0-.052-.088c-.077-.073-.18-.132-.27-.191a1.356 1.356 0 0 0-.336-.132v-.339C5.716 3.06 5.665 3 5.6 3h-.296c-.065 0-.116.059-.116.132v.31a.935.935 0 0 0-.529.293.986.986 0 0 0-.219.647c0 .06 0 .118.013.177s.026.103.039.162c.013.044.038.088.051.132a.816.816 0 0 0 .078.118c.025.029.064.058.09.088.026.03.064.059.116.088.039.03.077.044.116.059.039.015.077.044.129.059.051.014.09.029.129.044.038.014.077.03.142.044.051.015.103.03.141.059a.43.43 0 0 1 .116.059l.078.044c.013.014.038.03.051.059.013.014.026.029.026.058 0 .015.013.045.013.074a.224.224 0 0 1-.065.162c-.116.088-.335.088-.54-.015a.953.953 0 0 1-.285-.206c-.025-.03-.064-.044-.09-.03-.038 0-.064.015-.077.045L4.466 6a.153.153 0 0 0 .013.191c.155.191.4.338.683.397Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PURCHASE_ORDER_LIST_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.5.536C1.5.24 1.743 0 2.042 0h11.916c.3 0 .542.24.542.536v13.928c0 .198-.11.38-.287.473a.547.547 0 0 1-.558-.029l-2.676-1.787-2.676 1.787a.546.546 0 0 1-.622-.01l-2.66-1.914-2.66 1.914a.547.547 0 0 1-.565.044.535.535 0 0 1-.296-.478V.536Zm1.083.535v12.341l2.12-1.524a.547.547 0 0 1 .636 0l2.673 1.922 2.664-1.78a.547.547 0 0 1 .606 0l2.135 1.426V1.071H2.583Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M4.5 3.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0ZM4.5 6.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0ZM4.5 9.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0ZM6.5 3.5A.5.5 0 0 1 7 3h4a.5.5 0 0 1 0 1H7a.5.5 0 0 1-.5-.5ZM6.5 6.5A.5.5 0 0 1 7 6h4a.5.5 0 0 1 0 1H7a.5.5 0 0 1-.5-.5ZM6.5 9.5A.5.5 0 0 1 7 9h4a.5.5 0 0 1 0 1H7a.5.5 0 0 1-.5-.5Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PURCHASE_ORDER_TICKET_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.5.536C1.5.24 1.743 0 2.042 0h11.916c.3 0 .542.24.542.536v13.928c0 .198-.11.38-.287.473a.547.547 0 0 1-.558-.029l-2.676-1.787-2.676 1.787a.546.546 0 0 1-.622-.01l-2.66-1.914-2.66 1.914a.547.547 0 0 1-.565.044.535.535 0 0 1-.296-.478V.536Zm1.083.535v12.341l2.12-1.524a.547.547 0 0 1 .636 0l2.673 1.922 2.664-1.78a.547.547 0 0 1 .606 0l2.135 1.426V1.071H2.583Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M5 3.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5ZM5 6.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5ZM5 9.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_QUESTION_CIRCLE_OUTLINE = [\n\t\"<path d='M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm0 18a8 8 0 1 1 0-16 8 8 0 0 1 0 16zm-.5-5h1v1.5h-1V15zm.74-7.93A3.5 3.5 0 0 0 8.5 10.5h1.5a2 2 0 1 1 2.87 1.79C11.63 12.87 11 13.8 11 15h1.5c0-.71.37-1.22 1.06-1.61A3.5 3.5 0 0 0 12.24 7.07z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_RADIO_BUTTON_CHECKED_OUTLINE = [\n\t\"<path d='M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1Zm0 13A6 6 0 1 1 8 2a6 6 0 0 1 0 12Z'/><path d='M8 5a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_RADIO_BUTTON_UNCHECKED_OUTLINE = [\n\t\"<path d='M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1Zm0 13A6 6 0 1 1 8 2a6 6 0 0 1 0 12Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_REFRESH_DOUBLE_OUTLINE = [\n\t\"<path d='M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41Zm-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9Z'/><path fill-rule='evenodd' d='M8 3c-1.552 0-2.94.707-3.857 1.818a.5.5 0 1 1-.771-.636A6.002 6.002 0 0 1 13.917 7H12.9A5.002 5.002 0 0 0 8 3ZM3.1 9a5.002 5.002 0 0 0 8.757 2.182.502.502 0 0 1 .84.075.499.499 0 0 1-.069.561A6.002 6.002 0 0 1 2.083 9H3.1Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_REFRESH_SINGLE_OUTLINE = [\n\t\"<path d='M14 7.986a6 6 0 1 1-12 0 .461.461 0 1 1 .923 0A5.096 5.096 0 1 0 4.37 4.448s-.115.038-.369.038l-.5-.5.346-.307A5.994 5.994 0 0 1 14 7.986Z'/><path d='m3.015 2.344 3.243 2.223a.25.25 0 0 1-.073.447l-2.956.835a.25.25 0 0 1-.317-.217l-.287-3.059a.25.25 0 0 1 .39-.23Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ROCKET_OUTLINE = [\n\t\"<g clip-path='url(#a)'><path d='M9.752 6.193c.599.6 1.73.437 2.528-.362.798-.799.96-1.932.362-2.531-.599-.6-1.73-.438-2.528.361-.798.8-.96 1.933-.362 2.532Z'/><path d='M15.811 3.312c-.363 1.534-1.334 3.626-3.64 6.218l-.24 2.408a2.56 2.56 0 0 1-.732 1.526L8.817 15.85a.51.51 0 0 1-.867-.434l.27-1.899c.04-.28-.013-.593-.131-.956-.076-.233-.16-.439-.249-.657l-.082-.202c-.815-.197-1.578-.662-2.191-1.277-.614-.615-1.079-1.379-1.275-2.195l-.203-.083c-.218-.089-.423-.172-.655-.248-.363-.119-.675-.172-.955-.132l-1.896.27A.51.51 0 0 1 .15 7.17l2.382-2.386c.41-.41.947-.67 1.524-.734h.006l2.4-.238C9.005 1.55 11.087.582 12.623.208c.89-.217 1.59-.232 2.08-.188.244.023.435.06.57.093.067.017.12.033.16.045.184.06.279.13.351.295l.029.073c.014.038.032.091.05.158.038.133.08.322.107.563.055.485.051 1.178-.159 2.065Zm-4.828 7.475.04-.04-.107 1.081a1.536 1.536 0 0 1-.44.913l-1.298 1.3.054-.38c.072-.506-.034-.993-.172-1.418a8.548 8.548 0 0 0-.164-.45c.738-.065 1.462-.38 2.087-1.006ZM5.205 5c-.625.626-.94 1.351-1.004 2.09a8.497 8.497 0 0 0-.45-.164c-.424-.138-.91-.244-1.416-.172l-.38.054 1.3-1.3c.245-.246.566-.401.91-.44l1.08-.107-.04.039Zm9.406-3.961c-.38-.034-.967-.027-1.746.163-1.558.38-3.917 1.496-6.937 4.521-.62.62-.799 1.34-.687 2.051.107.676.483 1.362 1.048 1.928.564.565 1.25.941 1.924 1.049.71.112 1.429-.067 2.048-.688 3.079-3.083 4.192-5.444 4.556-6.987.183-.771.18-1.345.138-1.713a2.835 2.835 0 0 0-.045-.283 3.078 3.078 0 0 0-.3-.041Z'/><path d='M6.803 12.352A7.632 7.632 0 0 1 5 11a7.568 7.568 0 0 1-1.411-1.925c-1.102.991-1.965 5.054-1.84 5.18.126.125 3.936-.896 5.054-1.903Z'/></g><defs><clipPath id='a'><path d='M0 0h16v16H0z'/></clipPath></defs>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SEARCH_OUTLINE = [\n\t\"<path d='M11.118 9.953a5.417 5.417 0 1 0-1.164 1.165.833.833 0 0 0 .081.096l3.21 3.209a.833.833 0 0 0 1.178-1.179l-3.21-3.208a.834.834 0 0 0-.095-.083Zm.215-3.203a4.583 4.583 0 1 1-9.166 0 4.583 4.583 0 0 1 9.166 0Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SETTINGS_OUTLINE = [\n\t\"<path d='M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58a.49.49 0 0 0 .12-.61l-1.92-3.32a.49.49 0 0 0-.59-.22l-2.39.96a7.22 7.22 0 0 0-1.62-.94l-.36-2.54a.484.484 0 0 0-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96a.48.48 0 0 0-.59.22L2.74 8.87a.47.47 0 0 0 .12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58a.47.47 0 0 0-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32a.47.47 0 0 0-.12-.61l-2.01-1.58zM12 15.6A3.6 3.6 0 0 1 8.4 12 3.6 3.6 0 0 1 12 8.4a3.6 3.6 0 0 1 3.6 3.6 3.6 3.6 0 0 1-3.6 3.6z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_SHEET_BENT_OUTLINE = [\n\t\"<path d='M11.491.5H4.509C3.122.5 2 1.638 2 3.045v9.91c0 .68.265 1.328.732 1.802a2.494 2.494 0 0 0 1.777.743l5.346-.016c.67 0 1.293-.268 1.776-.743l1.637-1.66A2.566 2.566 0 0 0 14 11.28V3.045C14 1.638 12.878.5 11.491.5ZM4.509 14.33c-.358 0-.701-.142-.966-.395-.25-.253-.405-.6-.405-.98v-9.91c0-.759.608-1.375 1.356-1.375h6.981c.748 0 1.356.616 1.356 1.375v7.808h-1.839c-.872 0-1.574.711-1.574 1.597v1.88H4.51Zm6.312-.395c-.063.063-.14.127-.234.19v-1.676c0-.237.187-.41.405-.41h1.637a1.25 1.25 0 0 1-.187.237l-1.621 1.66Z'/><path d='M10.456 4.5H5.529c-.298 0-.537.258-.537.581 0 .323.239.581.537.581h4.927c.298 0 .536-.258.536-.58 0-.324-.238-.582-.536-.582ZM10.456 8.338H5.529c-.298 0-.537.258-.537.58 0 .324.239.582.537.582h4.927c.298 0 .536-.258.536-.581 0-.323-.238-.581-.536-.581Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SHEET_GENERIC_OUTLINE = [\n\t\"<path d='M12.465.983H3.523c-.841 0-1.52.68-1.52 1.535v10.964c0 .841.679 1.535 1.535 1.535h8.927c.841 0 1.535-.679 1.535-1.535V2.518A1.543 1.543 0 0 0 12.465.983Zm.458 12.485a.466.466 0 0 1-.472.472H3.523a.466.466 0 0 1-.472-.473V2.518c0-.266.206-.472.472-.472h8.928c.265 0 .472.206.472.472v10.95Z'/><path d='M10.872 5.348H5.117a.529.529 0 0 0-.531.531c0 .296.236.532.53.532h5.756a.529.529 0 0 0 .531-.532.529.529 0 0 0-.531-.53ZM10.872 7.932H5.117a.529.529 0 0 0-.531.53c0 .296.236.532.53.532h5.756a.529.529 0 0 0 .531-.531.529.529 0 0 0-.531-.531ZM10.872 10.515H5.117a.53.53 0 0 0-.531.53c0 .296.236.532.53.532h5.756a.529.529 0 0 0 .531-.531.53.53 0 0 0-.531-.531Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SHEET_LIST_OUTLINE = [\n\t\"<path d='M13.21 0H2.776c-.981 0-1.774.774-1.774 1.75v12.5c0 .96.793 1.75 1.791 1.75h10.419c.981 0 1.79-.774 1.79-1.75V1.75A1.78 1.78 0 0 0 13.212 0Zm.534 14.233a.538.538 0 0 1-.55.539H2.774a.538.538 0 0 1-.55-.539V1.75c0-.303.24-.539.55-.539h10.418c.31 0 .551.236.551.539v12.483Z'/><path d='M11.351 4.976H7.544a.61.61 0 0 0-.62.606.61.61 0 0 0 .62.606h3.807a.61.61 0 0 0 .62-.606.61.61 0 0 0-.62-.606ZM4.88 4.976h-.345a.61.61 0 0 0-.62.606.61.61 0 0 0 .62.606h.345a.61.61 0 0 0 .62-.606.61.61 0 0 0-.62-.606ZM5 7.945l-.501-.017a.61.61 0 0 0-.62.606.61.61 0 0 0 .62.606L5 9.157a.61.61 0 0 0 .62-.606.61.61 0 0 0-.62-.606ZM5 10.867l-.501-.017a.61.61 0 0 0-.62.606.61.61 0 0 0 .62.605l.501.017a.61.61 0 0 0 .62-.605.61.61 0 0 0-.62-.606ZM11.351 7.922H7.453a.61.61 0 0 0-.62.605.61.61 0 0 0 .62.606h3.898a.61.61 0 0 0 .62-.606.61.61 0 0 0-.62-.605ZM11.351 10.867H7.453a.61.61 0 0 0-.62.606.61.61 0 0 0 .62.605h3.898a.61.61 0 0 0 .62-.605.61.61 0 0 0-.62-.606Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SHOPPING_BAG_OUTLINE = [\n\t\"<path d='M3.381 15h9.659a1.216 1.216 0 0 0 .898-.395 1.233 1.233 0 0 0 .322-.931l-.69-9.032a1.24 1.24 0 0 0-.39-.807 1.225 1.225 0 0 0-.83-.33H4.07a1.225 1.225 0 0 0-.83.33 1.24 1.24 0 0 0-.39.807l-.69 9.032a1.24 1.24 0 0 0 .322.931 1.224 1.224 0 0 0 .898.395Zm.286-10.295a.412.412 0 0 1 .407-.379h8.28a.407.407 0 0 1 .409.38l.69 9.03a.413.413 0 0 1-.244.409.407.407 0 0 1-.164.034H3.38a.406.406 0 0 1-.386-.275.413.413 0 0 1-.022-.167l.694-9.032Z'/><path d='M8.04 1c.54 0 1.059.217 1.44.602.383.385.598.906.599 1.45v.822a.412.412 0 0 1-.408.41.407.407 0 0 1-.408-.41v-.821c0-.327-.129-.64-.358-.871a1.22 1.22 0 0 0-1.73 0c-.23.23-.36.544-.36.87v.822a.412.412 0 0 1-.407.41.407.407 0 0 1-.408-.41v-.821c0-.545.216-1.066.598-1.451S7.498 1 8.04 1Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SHOPPING_BASKET_OUTLINE = [\n\t\"<path d='M2.947 8h.26l.494 3.946a1.263 1.263 0 0 0 1.253 1.107h6.934a1.263 1.263 0 0 0 1.254-1.107L13.635 8h.26a.842.842 0 0 0 .842-.842V5.474a.842.842 0 0 0-.842-.842H12.87l-1.376-2.32a.421.421 0 0 0-.724.43l1.121 1.89H4.95l1.122-1.89a.42.42 0 1 0-.725-.43l-1.376 2.32H2.947a.842.842 0 0 0-.842.842v1.684A.842.842 0 0 0 2.947 8Zm9.36 3.842a.421.421 0 0 1-.419.369H4.954a.422.422 0 0 1-.418-.37l-.48-3.84h8.73l-.48 3.84Zm-9.36-6.368h10.948v1.684H2.947V5.474Z'/><path d='M8.421 11.369a.421.421 0 0 0 .421-.421V9.262a.421.421 0 1 0-.842 0v1.684a.42.42 0 0 0 .421.422ZM6.316 11.369a.421.421 0 0 0 .42-.421V9.262a.421.421 0 1 0-.841 0v1.684a.42.42 0 0 0 .42.422ZM10.526 11.369a.421.421 0 0 0 .421-.421V9.262a.421.421 0 0 0-.842 0v1.684a.42.42 0 0 0 .421.422Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SHOPPING_CART_OUTLINE = [\n\t\"<path d='M14.892 3.98a.466.466 0 0 0-.369-.182H4.34l-.541-2.434A.466.466 0 0 0 3.332 1H1.466a.466.466 0 0 0 0 .933H2.96l2.14 9.424a1.865 1.865 0 1 0 2.43 1.767 1.823 1.823 0 0 0-.262-.932h2.854c-.17.281-.26.604-.261.932a1.866 1.866 0 1 0 1.865-1.865H6.036L5.72 9.86h6.692a1.399 1.399 0 0 0 1.352-1.03l1.226-4.444a.466.466 0 0 0-.098-.406Zm-8.296 9.144a.932.932 0 1 1-1.865 0 .932.932 0 0 1 1.865 0Zm6.062 0a.932.932 0 1 1-1.864 0 .932.932 0 0 1 1.864 0Zm.205-4.542a.466.466 0 0 1-.466.345H5.505l-.933-4.196h9.34l-1.049 3.851Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SPLIT_BILL_TICKET_1_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.5.536C1.5.24 1.743 0 2.042 0h11.916c.3 0 .542.24.542.536v13.928c0 .198-.11.38-.287.473a.547.547 0 0 1-.558-.029l-2.676-1.787-2.676 1.787a.546.546 0 0 1-.622-.01l-2.66-1.914-2.66 1.914a.547.547 0 0 1-.565.044.535.535 0 0 1-.296-.478V.536Zm1.083.535v12.341l2.12-1.524a.547.547 0 0 1 .636 0l2.673 1.922 2.664-1.78a.547.547 0 0 1 .606 0l2.135 1.426V1.071H2.583Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M7.5 4a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1H8a.5.5 0 0 1-.5-.5ZM7.5 6.5A.5.5 0 0 1 8 6h3a.5.5 0 0 1 0 1H8a.5.5 0 0 1-.5-.5ZM4.5 9a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5Z' clip-rule='evenodd'/><path d='M5.162 6.588v.28c0 .073.052.132.116.132h.297c.064 0 .116-.059.116-.132v-.28c.219-.044.4-.147.528-.309a.986.986 0 0 0 .22-.647c0-.073 0-.132-.013-.19a2.637 2.637 0 0 0-.04-.163c-.012-.058-.038-.103-.064-.147-.025-.044-.064-.088-.09-.117-.026-.03-.064-.074-.116-.103-.039-.03-.09-.06-.129-.088-.039-.03-.09-.045-.142-.074a.668.668 0 0 0-.154-.059c-.052-.014-.103-.044-.168-.059a1.912 1.912 0 0 1-.31-.147c-.05-.044-.077-.088-.077-.147s.013-.103.065-.132c.051-.044.116-.059.206-.059.168 0 .348.074.541.206.052.044.117.03.155-.03l.245-.338c.026-.03.026-.073.026-.103a.1.1 0 0 0-.052-.088c-.077-.073-.18-.132-.27-.191a1.356 1.356 0 0 0-.336-.132v-.339C5.716 3.06 5.665 3 5.6 3h-.296c-.065 0-.116.059-.116.132v.31a.935.935 0 0 0-.529.293.986.986 0 0 0-.219.647c0 .06 0 .118.013.177s.026.103.039.162c.013.044.038.088.051.132a.816.816 0 0 0 .078.118c.025.029.064.058.09.088.026.03.064.059.116.088.039.03.077.044.116.059.039.015.077.044.129.059.051.014.09.029.129.044.038.014.077.03.142.044.051.015.103.03.141.059a.43.43 0 0 1 .116.059l.078.044c.013.014.038.03.051.059.013.014.026.029.026.058 0 .015.013.045.013.074a.224.224 0 0 1-.065.162c-.116.088-.335.088-.54-.015a.953.953 0 0 1-.285-.206c-.025-.03-.064-.044-.09-.03-.038 0-.064.015-.077.045L4.466 6a.153.153 0 0 0 .013.191c.155.191.4.338.683.397Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SPLIT_BILL_TICKET_2_OUTLINE = [\n\t\"<g clip-path='url(#a)'><path d='M15.914 1.675a.406.406 0 0 0-.262-.164L7.324.036a.432.432 0 0 0-.476.328l-.64 3.64H.833c-.23 0-.41.18-.41.409v10.131c0 .197.115.377.279.476.18.098.393.082.557-.033l.984-.656 1.114.738a.492.492 0 0 0 .59 0l1.115-.738 1.115.738c.18.114.41.114.607 0l1.114-.738.984.656a.563.563 0 0 0 .557.033.532.532 0 0 0 .28-.476v-3.59l.95.918c.164.148.393.18.59.098l1.23-.54.852.82a.52.52 0 0 0 .541.114.54.54 0 0 0 .36-.41l1.755-9.967a.43.43 0 0 0-.082-.312ZM8.88 14.036l-.705-.475a.549.549 0 0 0-.59 0l-1.115.737-1.115-.737a.577.577 0 0 0-.606 0l-1.115.737-1.115-.737a.491.491 0 0 0-.59 0l-.705.459V4.84h7.64v9.196h.016Zm4.64-2.738-.607-.573a.52.52 0 0 0-.377-.148.505.505 0 0 0-.213.05l-1.23.54-.967-.934a.529.529 0 0 0-.426-.148V8.888l2.492.443h.065a.39.39 0 0 0 .394-.344.422.422 0 0 0-.328-.476l-2.64-.459v-.934l2.804.492h.065a.39.39 0 0 0 .394-.345.422.422 0 0 0-.328-.475l-2.935-.525v-.934l.951.164h.066a.39.39 0 0 0 .393-.344.432.432 0 0 0-.328-.476l-1.098-.197V4.38c0-.23-.18-.41-.41-.41H7.045l.54-3.098L15.112 2.2l-1.59 9.098Z'/><path d='m12.31 5.804-.033.213c-.016.066.033.115.082.131l.262.05c.066.016.115-.033.132-.083l.033-.213c.196 0 .377-.049.508-.164a.747.747 0 0 0 .278-.475c.017-.05.017-.115.017-.164 0-.05 0-.098-.017-.131 0-.05-.016-.082-.049-.131-.016-.033-.033-.082-.065-.099-.017-.032-.05-.065-.082-.098a.432.432 0 0 0-.099-.082c-.032-.033-.065-.05-.114-.082-.05-.033-.099-.05-.132-.082-.032-.016-.082-.05-.147-.082a1.048 1.048 0 0 1-.263-.164.186.186 0 0 1-.049-.131c.017-.05.033-.082.066-.098a.369.369 0 0 1 .197-.017c.147.033.311.115.459.246.049.033.098.033.147 0l.262-.23a.125.125 0 0 0 .033-.081.125.125 0 0 0-.033-.082c-.065-.066-.13-.131-.229-.197a1.557 1.557 0 0 0-.279-.164l.05-.262c.016-.066-.033-.115-.082-.131l-.263-.05c-.065-.016-.114.033-.13.082l-.05.246a.847.847 0 0 0-.508.148.747.747 0 0 0-.279.475c-.016.05-.016.099-.016.131 0 .05 0 .082.016.132.016.032.016.082.033.114l.049.099c.016.032.05.065.066.082.016.032.049.049.082.082.032.032.065.049.098.065.033.017.065.05.115.066.032.016.082.049.114.065.033.017.066.033.115.066.05.016.082.05.115.066s.066.032.098.065c.033.016.05.033.066.05.016.016.033.032.033.048 0 .017.016.033.016.05v.049a.19.19 0 0 1-.082.115c-.115.065-.311.016-.492-.099a.937.937 0 0 1-.23-.213c-.016-.016-.048-.033-.081-.05-.033 0-.066 0-.082.034l-.262.23c-.05.032-.05.098-.017.147.164.262.377.41.623.508ZM8.798 3.417l2.148.378h.065c.197 0 .36-.148.41-.345.033-.23-.115-.442-.328-.475l-2.147-.377c-.214-.033-.443.115-.476.328-.033.246.115.459.328.491ZM6.568 9.306v.23c0 .065.05.114.115.114h.279c.065 0 .114-.049.114-.115v-.213a.786.786 0 0 0 .476-.246.718.718 0 0 0 .196-.524c0-.05 0-.115-.016-.164-.016-.05-.016-.099-.033-.131a.264.264 0 0 0-.065-.115c-.033-.033-.05-.066-.082-.098-.033-.033-.066-.05-.099-.082-.032-.033-.082-.05-.114-.066-.033-.016-.082-.033-.132-.066l-.147-.049c-.05-.016-.098-.032-.164-.049-.131-.05-.23-.082-.279-.115-.049-.032-.065-.065-.065-.114 0-.05.016-.082.049-.115a.294.294 0 0 1 .18-.05c.164 0 .328.05.492.165.05.032.115.016.148-.017l.213-.278c.016-.017.033-.05.016-.082 0-.033-.016-.05-.05-.066l-.245-.148a1.042 1.042 0 0 0-.295-.098v-.262a.112.112 0 0 0-.115-.115h-.278a.112.112 0 0 0-.115.115v.23a.786.786 0 0 0-.476.245.705.705 0 0 0-.196.508c0 .05 0 .099.016.132 0 .049.016.082.033.13l.049.099c.016.033.05.066.082.098.033.033.05.05.082.066.033.016.065.05.098.066l.099.049c.032.016.065.033.114.049.05.016.082.033.115.033.033.016.082.016.131.032.05.017.099.033.131.05l.099.049c.033.016.049.033.065.033l.05.049c.016.016.016.033.016.049v.05a.15.15 0 0 1-.066.13c-.098.082-.295.066-.491-.016a.88.88 0 0 1-.263-.164.125.125 0 0 0-.082-.033c-.032 0-.049.017-.082.033l-.23.279c-.032.049-.032.114.017.147.213.197.443.312.705.36ZM2.64 7.515h1.728c.23 0 .41-.18.41-.41 0-.229-.18-.41-.41-.41H2.64c-.23 0-.41.181-.41.41 0 .214.18.41.41.41ZM2.64 9.652h1.728c.23 0 .41-.18.41-.41 0-.23-.18-.41-.41-.41H2.64c-.23 0-.41.18-.41.41 0 .213.18.41.41.41ZM2.94 11.788h4.1c.23 0 .41-.18.41-.41 0-.229-.18-.41-.41-.41h-4.1c-.23 0-.41.181-.41.41 0 .23.18.41.41.41Z'/></g><defs><clipPath id='a'><path d='M0 0h16v16H0z'/></clipPath></defs>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_STAR_FILLED = [\n\t\"<path d='m21.284 8.276-5.951-.865-2.66-5.393a.753.753 0 0 0-1.345 0l-2.66 5.393-5.952.865a.749.749 0 0 0-.414 1.28l4.305 4.197L5.59 19.68a.749.749 0 0 0 1.087.79L12 17.672l5.323 2.798a.749.749 0 0 0 1.087-.79l-1.017-5.927 4.305-4.197a.748.748 0 0 0 .218-.43.747.747 0 0 0-.632-.85Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_SUCCESS_FILLED_GREEN = [\n\t\"<path fill='#46D281' fill-rule='evenodd' d='M7 14A7 7 0 1 0 7 0a7 7 0 0 0 0 14Zm4.384-9.18a.5.5 0 0 0-.768-.64L5.995 9.725 3.38 6.675a.5.5 0 1 0-.76.65l3 3.5a.5.5 0 0 0 .764-.005l5-6Z' clip-rule='evenodd'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_SUCCESS_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M11.835 5.628a.5.5 0 0 1 .037.706l-4.5 5a.5.5 0 0 1-.726.02l-2.5-2.5a.5.5 0 1 1 .708-.708l2.127 2.128 4.147-4.608a.5.5 0 0 1 .707-.038Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SUGAR_FREE_FILLED = [\n\t\"<path d='M22.11 21.46 2.39 1.73 1.11 3 4.3 6.19l-.77.43c-.32.17-.53.5-.53.88v9c0 .38.21.71.53.88l7.9 4.44c.16.12.36.18.57.18.21 0 .41-.06.57-.18l4.71-2.65 3.56 3.56 1.27-1.27ZM5 15.91v-6.7l5.29 2.97.71.71v6.4l-6-3.38Zm8 3.38v-4.4l2.82 2.81L13 19.29ZM9 5.82 7.56 4.36l3.87-2.18c.16-.12.36-.18.57-.18.21 0 .41.06.57.18l7.9 4.44c.32.17.53.5.53.88v9c0 .35-.18.66-.47.83L19 15.8V9.21l-4.22 2.37-1.47-1.47 4.65-2.61L12 4.15 9 5.82Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_TAG_FILLED = [\n\t\"<path d='M5.5 7a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Zm15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_TAG_OUTLINE = [\n\t\"<path d='M6.739 1c.99 0 1.94.394 2.64 1.094l5.071 5.072a1.9 1.9 0 0 1 0 2.673L9.84 14.45a1.895 1.895 0 0 1-2.67 0L2.094 9.375C1.394 8.674 1 7.725 1 6.734V3.43A2.438 2.438 0 0 1 3.429 1h3.31Zm0 1.167h-3.31c-.704 0-1.262.557-1.262 1.26v3.307c0 .681.272 1.336.753 1.817l5.072 5.072a.713.713 0 0 0 1.021 0l4.611-4.611a.713.713 0 0 0 0-1.02L8.552 2.918a2.562 2.562 0 0 0-1.812-.753h-.001Z'/><path d='M6.489 3.872c.717.717.717 1.9 0 2.618-.717.717-1.9.717-2.618 0a1.861 1.861 0 0 1 0-2.618 1.861 1.861 0 0 1 2.618 0Zm-.827.827a.672.672 0 0 0-.964 0 .672.672 0 0 0 0 .964.672.672 0 0 0 .964 0 .672.672 0 0 0 0-.964Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_TAP_CLICK_HAND_OUTLINE = [\n\t\"<path d='M13.063 6.388c-.205 0-.407.04-.597.117a1.597 1.597 0 0 0-1.533-1.182 1.566 1.566 0 0 0-.782.213 1.597 1.597 0 0 0-1.88-.65V1.598a1.597 1.597 0 1 0-3.193 0v8.3l-.48-.48a2.337 2.337 0 0 0-3.3 0 1.011 1.011 0 0 0-.037 1.395l3.833 4.258a2.732 2.732 0 0 0 2.028.9h4.455a2.73 2.73 0 0 0 2.55-1.714 7.73 7.73 0 0 0 .533-2.859V7.985a1.597 1.597 0 0 0-1.597-1.597Zm.532 5.01a6.586 6.586 0 0 1-.474 2.443 1.656 1.656 0 0 1-1.544 1.064H7.122a1.677 1.677 0 0 1-1.24-.532l-3.796-4.259a1.272 1.272 0 0 1 1.762.032l1.384 1.39a.533.533 0 0 0 .814-.075.532.532 0 0 0 .096-.282V1.597a.532.532 0 0 1 1.065 0v6.388a.532.532 0 1 0 1.065 0V6.388a.532.532 0 0 1 1.064 0v2.13a.532.532 0 1 0 1.065 0V6.92a.532.532 0 1 1 1.065 0v2.13a.532.532 0 0 0 1.064 0V7.985a.532.532 0 0 1 1.065 0v3.412Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_TICKET_OUTLINE = [\n\t\"<g clip-path='url(#a)'><path d='M2.552 4.405a.555.555 0 0 0-.772.058L.306 6.126c-.472.537-.436 1.34.08 1.804l8.593 7.622c.52.456 1.323.396 1.8-.136l1.475-1.663a.555.555 0 0 0-.034-.773c-.371-.328-.397-.905-.057-1.287.339-.383.915-.426 1.285-.098a.555.555 0 0 0 .772-.058l1.474-1.662c.471-.538.436-1.342-.08-1.804L7.021.448c-.52-.456-1.323-.395-1.8.137L3.746 2.247c-.2.23-.184.574.034.773.37.329.396.905.057 1.288-.339.382-.915.426-1.285.097Zm2.32-1.804L6.026 1.3a.188.188 0 0 1 .127-.063.177.177 0 0 1 .13.044l5.506 4.883-.614.692a.547.547 0 0 0 .034.773.547.547 0 0 0 .771-.058l.615-.693 2.282 2.025c.075.066.08.181.012.258l-1.155 1.302c-.802-.371-1.768-.159-2.371.521s-.699 1.665-.235 2.416l-1.154 1.302a.182.182 0 0 1-.258.02l-2.282-2.025.614-.692a.547.547 0 0 0-.034-.773.547.547 0 0 0-.772.058l-.614.692-5.505-4.883a.177.177 0 0 1-.06-.125.189.189 0 0 1 .048-.133l1.155-1.302c.802.372 1.768.16 2.37-.52.604-.681.7-1.665.236-2.417Zm3.845 7.025L9.7 8.518a.547.547 0 0 1 .772-.059.547.547 0 0 1 .034.773l-.984 1.109a.547.547 0 0 1-.771.058.548.548 0 0 1-.034-.773Z'/></g><defs><clipPath id='a'><path d='M0 0h16v16H0z'/></clipPath></defs>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_TICKETS_OUTLINE = [\n\t\"<path d='M1.123 3h11.609c.31 0 .591.125.795.326l.015.016c.194.2.315.472.315.768v.15h1.017c.31 0 .59.124.794.326a1.1 1.1 0 0 1 .331.785v1.38c0 .14-.115.254-.258.254-.314 0-.6.126-.805.33a1.115 1.115 0 0 0 0 1.59c.206.203.491.33.806.33.142 0 .258.114.258.254v1.38c0 .306-.127.584-.33.785l-.016.015a1.127 1.127 0 0 1-.778.311H3.268c-.31 0-.592-.125-.795-.326a1.1 1.1 0 0 1-.33-.784v-.15H1.125c-.31 0-.591-.125-.795-.325A1.101 1.101 0 0 1 0 9.629V8.25c0-.14.116-.255.258-.255.315 0 .6-.126.805-.329a1.116 1.116 0 0 0 0-1.59 1.144 1.144 0 0 0-.805-.33A.257.257 0 0 1 0 5.493v-1.38a1.124 1.124 0 0 1 1.125-1.11L1.123 3Zm6.959 4.311a1.258 1.258 0 0 1 0 1.796 1.293 1.293 0 0 1-1.82 0l-.014-.016a1.258 1.258 0 0 1 .014-1.778 1.29 1.29 0 0 1 .91-.373c.33 0 .659.123.91.371Zm-.14.898a.754.754 0 0 0-.225-.537.774.774 0 0 0-1.09 0 .75.75 0 0 0-.011 1.064l.012.01a.774.774 0 0 0 1.09 0 .753.753 0 0 0 .224-.537ZM5.368 4.633l.016.016a1.258 1.258 0 0 1-.014 1.778l-.016.016a1.29 1.29 0 0 1-1.801-.014 1.256 1.256 0 0 1-.002-1.795c.252-.249.58-.373.91-.373.328 0 .656.123.907.372Zm-.364.36a.773.773 0 0 0-1.09 0 .752.752 0 0 0 0 1.075.775.775 0 0 0 1.078.012l.01-.012a.752.752 0 0 0 .013-1.064l-.012-.011h.001Zm2.597-.247c.1-.1.264-.1.365 0 .1.1.1.261 0 .36L4.224 8.803c-.1.1-.264.1-.365 0-.1-.1-.1-.261 0-.36l3.742-3.696Zm6.254.024v.72c0 .14-.115.255-.258.255-.314 0-.6.126-.805.33a1.115 1.115 0 0 0 0 1.59c.206.202.49.328.805.328.143 0 .258.115.258.255v1.38c0 .305-.127.583-.33.785a1.13 1.13 0 0 1-.795.325H2.656v.15a.611.611 0 0 0 .609.6h11.608c.162 0 .31-.063.42-.165l.01-.011a.596.596 0 0 0 .179-.425V9.742a1.656 1.656 0 0 1-.912-.458 1.623 1.623 0 0 1 0-2.311c.242-.24.558-.404.912-.459V5.37a.61.61 0 0 0-.609-.601h-1.018v.002ZM12.73 3.51H1.122a.613.613 0 0 0-.43.176.594.594 0 0 0-.18.424v1.145c.354.055.671.22.913.459a1.62 1.62 0 0 1 0 2.31 1.656 1.656 0 0 1-.912.46v1.143c0 .166.068.316.179.425.11.109.262.177.43.177H12.73c.168 0 .32-.068.43-.177a.597.597 0 0 0 .18-.425V8.483a1.656 1.656 0 0 1-.913-.458 1.62 1.62 0 0 1 0-2.311c.242-.24.559-.404.912-.459V4.11a.595.595 0 0 0-.167-.413l-.012-.01a.61.61 0 0 0-.43-.177Z'/><path d='M10.439 4.16a.242.242 0 0 1 .346 0c.046.046.071.11.071.176v.875c0 .066-.025.13-.071.177a.242.242 0 0 1-.346 0 .253.253 0 0 1-.071-.177v-.875c0-.066.025-.13.07-.177ZM10.44 6.066a.242.242 0 0 1 .345 0c.046.047.072.11.072.177V7.2c0 .067-.026.13-.072.177a.242.242 0 0 1-.346 0 .253.253 0 0 1-.071-.177v-.956c0-.066.025-.13.071-.177ZM10.44 8.243a.242.242 0 0 1 .345 0c.046.047.072.11.072.176v1.073c0 .067-.026.13-.071.177a.242.242 0 0 1-.346 0 .253.253 0 0 1-.072-.177V8.42c0-.066.025-.13.071-.176Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_TWITTER_FILLED = [\n\t\"<path d='M21.75 5.96a8.015 8.015 0 0 1-2.302.619 3.987 3.987 0 0 0 1.758-2.203 7.89 7.89 0 0 1-2.536.965 3.986 3.986 0 0 0-2.92-1.263 3.996 3.996 0 0 0-3.996 3.999c0 .309.037.618.098.916a11.358 11.358 0 0 1-8.24-4.184 3.968 3.968 0 0 0-.544 2.018c0 1.388.705 2.611 1.781 3.33a4.03 4.03 0 0 1-1.807-.508v.05a3.997 3.997 0 0 0 3.204 3.923c-.344.09-.697.135-1.052.136a5.31 5.31 0 0 1-.755-.061 4.004 4.004 0 0 0 3.736 2.773 8.01 8.01 0 0 1-4.962 1.708c-.335 0-.644-.012-.965-.05a11.317 11.317 0 0 0 6.138 1.794c7.35 0 11.372-6.09 11.372-11.374 0-.174 0-.347-.012-.52A8.607 8.607 0 0 0 21.75 5.96Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_USER_OUTLINE = [\n\t\"<path d='M8 1C4.14 1 1 4.14 1 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7ZM4.32 12.633A4.473 4.473 0 0 1 8 10.693c1.48 0 2.85.737 3.68 1.94a5.891 5.891 0 0 1-7.36 0Zm1.347-5.35A2.336 2.336 0 0 1 8 4.948a2.336 2.336 0 0 1 2.333 2.333A2.336 2.336 0 0 1 8 9.615a2.336 2.336 0 0 1-2.333-2.333Zm6.792 4.603a5.55 5.55 0 0 0-2.43-1.879 3.398 3.398 0 0 0 1.381-2.725c0-1.88-1.53-3.41-3.41-3.41-1.88 0-3.41 1.53-3.41 3.41 0 1.118.548 2.103 1.382 2.725a5.56 5.56 0 0 0-2.43 1.88A5.893 5.893 0 0 1 2.077 8 5.93 5.93 0 0 1 8 2.077 5.93 5.93 0 0 1 13.923 8a5.891 5.891 0 0 1-1.464 3.886Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_WARNING_FILLED_YELLOW = [\n\t\"<path fill='#FBCC29' fill-rule='evenodd' d='M7 14A7 7 0 1 0 7 0a7 7 0 0 0 0 14Zm.14-12c.374 0 .677.304.677.678V9a.678.678 0 1 1-1.356 0V2.678c0-.374.304-.678.678-.678Zm.677 9.169a.678.678 0 1 1-1.356 0 .678.678 0 0 1 1.356 0Z' clip-rule='evenodd'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_WARNING_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M7 13A6 6 0 1 0 7 1a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 7 0a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M7 10a.5.5 0 0 1 .5.5v.5a.5.5 0 0 1-1 0v-.5A.5.5 0 0 1 7 10ZM7 3a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-1 0v-5A.5.5 0 0 1 7 3Z' clip-rule='evenodd'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_WHATSAPP_OUTLINE = [\n\t\"<path d='M16.723 14.06c-.256-.131-1.528-.755-1.765-.839-.237-.089-.41-.131-.582.131-.173.26-.665.84-.82 1.015-.15.174-.302.195-.558.066-1.518-.76-2.514-1.355-3.515-3.073-.265-.457.265-.424.76-1.41.083-.174.041-.322-.024-.453-.066-.131-.582-1.402-.797-1.92-.209-.504-.424-.433-.581-.443-.15-.009-.321-.009-.495-.009a.956.956 0 0 0-.689.321c-.237.26-.905.886-.905 2.156s.926 2.501 1.053 2.675c.13.173 1.82 2.78 4.415 3.902 1.64.708 2.283.769 3.103.647.5-.075 1.529-.624 1.742-1.23.213-.605.213-1.123.15-1.231-.064-.115-.237-.18-.492-.305Z'/><path d='M21.684 7.931a10.505 10.505 0 0 0-5.615-5.615A10.45 10.45 0 0 0 12 1.5h-.047A10.475 10.475 0 0 0 1.5 12.05a10.533 10.533 0 0 0 1.125 4.684v3.563c0 .595.483 1.078 1.078 1.078h3.565a10.532 10.532 0 0 0 4.685 1.125h.05c1.403 0 2.765-.272 4.047-.804a10.418 10.418 0 0 0 3.347-2.231 10.475 10.475 0 0 0 3.103-7.418 10.46 10.46 0 0 0-.816-4.116Zm-3.541 10.266A8.673 8.673 0 0 1 12 20.719h-.04a8.75 8.75 0 0 1-4.057-1.02l-.197-.105h-3.3v-3.3l-.105-.197a8.75 8.75 0 0 1-1.02-4.057 8.665 8.665 0 0 1 2.522-6.183 8.653 8.653 0 0 1 6.16-2.576h.04c1.171 0 2.308.228 3.379.678a8.662 8.662 0 0 1 2.79 1.875 8.684 8.684 0 0 1 2.552 6.206 8.686 8.686 0 0 1-2.581 6.157Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_WHEAT_FILLED = [\n\t\"<path d='M21.725 3.598A.937.937 0 0 0 20.4 2.274l-3.442 3.433a.937.937 0 0 0 1.324 1.324l3.438-3.437.004.004Zm-7.793-.535a.627.627 0 0 0-.883 0l-.445.441a3.75 3.75 0 0 0 0 5.305l.406.406-1.191 1.191a4.989 4.989 0 0 0-1.426-2.921l-.441-.442a.627.627 0 0 0-.883 0l-.441.442a3.75 3.75 0 0 0 0 5.304l.406.406-1.192 1.192a4.988 4.988 0 0 0-1.425-2.922l-.442-.445a.627.627 0 0 0-.882 0l-.442.441a3.75 3.75 0 0 0 0 5.304l.406.407-2.69 2.69a1.252 1.252 0 0 0 1.769 1.77l2.69-2.69.477.476a3.75 3.75 0 0 0 5.305 0l.441-.442a.627.627 0 0 0 0-.883l-.441-.44a4.992 4.992 0 0 0-3.05-1.442l1.245-1.246.477.476a3.75 3.75 0 0 0 5.304 0l.442-.441a.627.627 0 0 0 0-.883l-.442-.441a4.992 4.992 0 0 0-3.05-1.442l1.246-1.246.476.477a3.751 3.751 0 0 0 5.305 0l.44-.445a.627.627 0 0 0 0-.883l-.44-.445a4.922 4.922 0 0 0-.641-.543l1.805-1.801A.937.937 0 0 0 20.4 6.024l-2.32 2.32a5.033 5.033 0 0 0-2.434.082c.238-.832.258-1.71.054-2.55l2.274-2.278a.937.937 0 0 0-1.324-1.324l-1.797 1.789a4.642 4.642 0 0 0-.484-.559l-.438-.441Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_WIFI_NO_SIGNAL_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M15.784 6.009q-.23-.223-.472-.433a11 11 0 0 0-2.043-1.398l-.946 1.065a9.7 9.7 0 0 1 2.465 1.738.72.72 0 0 0 .967.037.672.672 0 0 0 .029-1.01M12.868 7.66a7.9 7.9 0 0 0-1.772-1.033l-.975 1.098c.845.288 1.62.747 2.273 1.347a.71.71 0 0 0 .938.013.667.667 0 0 0 .024-1.014 8 8 0 0 0-.488-.41m-1.966 2.473a4.6 4.6 0 0 0-2.092-.93l-1.172 1.319c.846-.1 1.697.139 2.36.663a.69.69 0 0 0 .875-.005l.05-.044h.001a.625.625 0 0 0-.021-1.003M8 12.26c-.405 0-.79.171-1.057.47a1.34 1.34 0 0 0-.347.862c-.009.761.606 1.388 1.382 1.408.375.007.737-.135 1.005-.392a1.342 1.342 0 0 0 .073-1.878A1.42 1.42 0 0 0 8 12.26m1.223-4.772 1.03-1.162 1.271-1.431.968-1.09 1.482-1.67a.675.675 0 0 0-.066-.966.716.716 0 0 0-.991.065L11.082 3.3h.001a11 11 0 0 0-1.679-.34c-.932-.12-1.876-.12-2.808 0a11.1 11.1 0 0 0-6.38 3.049.672.672 0 0 0 .03 1.01.72.72 0 0 0 .966-.039q.263-.255.545-.491h.001a9.7 9.7 0 0 1 4.838-2.15 9.8 9.8 0 0 1 3.46.117L8.661 6.03a8 8 0 0 0-.66-.03H8q-.708.002-1.404.126a7.87 7.87 0 0 0-3.952 1.947.666.666 0 0 0 .023 1.013c.27.231.675.226.939-.012a6.46 6.46 0 0 1 3.84-1.677l-5.024 5.66a.68.68 0 0 0 .07.97.71.71 0 0 0 .988-.069l2.388-2.691L7.756 9.14z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_WIFI_SIGNAL_FILLED = [\n\t\"<path d='M15 .5A2.5 2.5 0 0 1 17.5 3v12a2.5 2.5 0 0 1-2.5 2.5H3A2.5 2.5 0 0 1 .5 15V3A2.5 2.5 0 0 1 3 .5h12ZM3.985 8.685a.585.585 0 0 0-.562.58c0 .312.254.555.562.546a3.777 3.777 0 0 1 2.78 1.08 3.773 3.773 0 0 1 1.14 2.755.544.544 0 0 0 .559.551.584.584 0 0 0 .567-.575 4.862 4.862 0 0 0-1.468-3.548 4.863 4.863 0 0 0-3.578-1.39ZM4 5.682a.583.583 0 0 0-.564.577.543.543 0 0 0 .56.549c1.855-.047 3.596.63 4.9 1.906 1.305 1.276 2.02 3.002 2.013 4.857a.544.544 0 0 0 .56.548.582.582 0 0 0 .565-.577c.008-2.157-.824-4.161-2.34-5.645C8.178 6.414 6.155 5.627 4 5.682Zm.012-3.004a.584.584 0 0 0-.566.576.543.543 0 0 0 .56.549c2.661-.063 5.154.908 7.02 2.733 1.865 1.825 2.89 4.297 2.885 6.96a.542.542 0 0 0 .562.547.583.583 0 0 0 .563-.58c.005-2.961-1.135-5.71-3.212-7.742-2.076-2.032-4.85-3.113-7.812-3.043Z'/>\",\n\t\"0 0 18 18\",\n] as const;\n\nexport const ICON_WIFI_SIGNAL_OUTLINE = [\n\t\"<path d='M16.5 3A1.5 1.5 0 0 0 15 1.5H3A1.5 1.5 0 0 0 1.5 3v12A1.5 1.5 0 0 0 3 16.5h12a1.5 1.5 0 0 0 1.5-1.5V3Zm1 12a2.5 2.5 0 0 1-2.5 2.5H3A2.5 2.5 0 0 1 .5 15V3A2.5 2.5 0 0 1 3 .5h12A2.5 2.5 0 0 1 17.5 3v12Z'/><path d='M14.01 14.806a.553.553 0 0 1-.165-.396c.004-2.688-1.03-5.183-2.914-7.026-1.883-1.843-4.4-2.823-7.088-2.76a.549.549 0 0 1-.564-.554.59.59 0 0 1 .57-.582c2.99-.07 5.792 1.02 7.888 3.072 2.097 2.051 3.249 4.828 3.243 7.819a.589.589 0 0 1-.569.583.547.547 0 0 1-.401-.156Zm-2.63.234a.588.588 0 0 0 .57-.583c.007-2.177-.832-4.2-2.363-5.698C8.057 7.26 6.014 6.466 3.838 6.52a.588.588 0 0 0-.57.583.548.548 0 0 0 .566.554c1.872-.048 3.63.636 4.947 1.925 1.317 1.288 2.039 3.03 2.032 4.904a.55.55 0 0 0 .566.553Zm-3.035.078a.589.589 0 0 0 .572-.58 4.908 4.908 0 0 0-1.481-3.582 4.91 4.91 0 0 0-3.613-1.403.59.59 0 0 0-.568.585c0 .316.256.561.568.552a3.812 3.812 0 0 1 2.806 1.09 3.808 3.808 0 0 1 1.15 2.781.55.55 0 0 0 .566.557Z'/>\",\n\t\"0 0 18 18\",\n] as const;\n\nexport const iconNames = [\n\t\"apple-filled\",\n\t\"arrow-circle-down-outline\",\n\t\"arrow-circle-left-outline\",\n\t\"arrow-circle-right-outline\",\n\t\"arrow-circle-up-outline\",\n\t\"arrow-down-outline\",\n\t\"arrow-left-outline\",\n\t\"arrow-list-outline\",\n\t\"arrow-point-down-filled\",\n\t\"arrow-point-left-filled\",\n\t\"arrow-point-right-filled\",\n\t\"arrow-point-up-filled\",\n\t\"arrow-right-outline\",\n\t\"arrow-up-outline\",\n\t\"barcode-outline\",\n\t\"bell-outline\",\n\t\"calendar-alt-outline\",\n\t\"calendar-locked-outline\",\n\t\"calendar-outline\",\n\t\"carrot-filled\",\n\t\"check-outline\",\n\t\"checkbox-checked\",\n\t\"checkbox-unchecked\",\n\t\"chevron-down-outline\",\n\t\"chevron-left-bicolor\",\n\t\"chevron-left-outline\",\n\t\"chevron-right-bicolor\",\n\t\"chevron-right-outline\",\n\t\"chevron-up-outline\",\n\t\"chicken-filled\",\n\t\"chili-filled\",\n\t\"close-outline\",\n\t\"cloud-download-outline\",\n\t\"cloud-upload-outline\",\n\t\"copy-generic-outline\",\n\t\"copy-square-outline\",\n\t\"delete-outline\",\n\t\"discount-outline\",\n\t\"document-generic-outline\",\n\t\"document-history-alt-outline\",\n\t\"document-history-outline\",\n\t\"document-list-outline\",\n\t\"drag-handle-outline\",\n\t\"error-filled-red\",\n\t\"error-outline\",\n\t\"exclamation-outline\",\n\t\"expand-outline\",\n\t\"export-outline\",\n\t\"eye-closed-outline\",\n\t\"eye-open-filled\",\n\t\"eye-open-outline\",\n\t\"facebook-filled\",\n\t\"fire-filled\",\n\t\"fish-filled\",\n\t\"globe-outline\",\n\t\"google-filled\",\n\t\"hashtag-outline\",\n\t\"home-outline\",\n\t\"import-outline\",\n\t\"info-filled-blue\",\n\t\"info-outline\",\n\t\"instagram-filled\",\n\t\"key-outline\",\n\t\"lactose-intolerant-filled\",\n\t\"layout-1-outline\",\n\t\"layout-2-outline\",\n\t\"layout-3-outline\",\n\t\"layout-4-outline\",\n\t\"layout-5-outline\",\n\t\"leaf-filled\",\n\t\"linkedin-filled\",\n\t\"location-filled\",\n\t\"lock-password-1-outline\",\n\t\"lock-password-2-outline\",\n\t\"mail-outline\",\n\t\"menu-close-outline\",\n\t\"menu-hamburger-outline\",\n\t\"minus-bicolor-tertiary-light\",\n\t\"minus-bicolor-tertiary\",\n\t\"minus-filled\",\n\t\"money-bill-outline\",\n\t\"money-cash-outline\",\n\t\"money-coin-outline\",\n\t\"money-credit-card-outline\",\n\t\"nfc-filled\",\n\t\"nfc-outline\",\n\t\"pencil-outline\",\n\t\"pencil\",\n\t\"phone-outline\",\n\t\"plus-bicolor-tertiary-light\",\n\t\"plus-bicolor-tertiary\",\n\t\"plus-filled\",\n\t\"printer-outline\",\n\t\"purchase-order-bill-outline\",\n\t\"purchase-order-list-outline\",\n\t\"purchase-order-ticket-outline\",\n\t\"question-circle-outline\",\n\t\"radio-button-checked-outline\",\n\t\"radio-button-unchecked-outline\",\n\t\"refresh-double-outline\",\n\t\"refresh-single-outline\",\n\t\"rocket-outline\",\n\t\"search-outline\",\n\t\"settings-outline\",\n\t\"sheet-bent-outline\",\n\t\"sheet-generic-outline\",\n\t\"sheet-list-outline\",\n\t\"shopping-bag-outline\",\n\t\"shopping-basket-outline\",\n\t\"shopping-cart-outline\",\n\t\"split-bill-ticket-1-outline\",\n\t\"split-bill-ticket-2-outline\",\n\t\"star-filled\",\n\t\"success-filled-green\",\n\t\"success-outline\",\n\t\"sugar-free-filled\",\n\t\"tag-filled\",\n\t\"tag-outline\",\n\t\"tap-click-hand-outline\",\n\t\"ticket-outline\",\n\t\"tickets-outline\",\n\t\"twitter-filled\",\n\t\"user-outline\",\n\t\"warning-filled-yellow\",\n\t\"warning-outline\",\n\t\"whatsapp-outline\",\n\t\"wheat-filled\",\n\t\"wifi-no-signal-outline\",\n\t\"wifi-signal-filled\",\n\t\"wifi-signal-outline\",\n] as const;\n\nexport type IconNameType = (typeof iconNames)[number];\n","import { useMemo } from \"react\";\nimport styles from \"./Icon.module.css\";\nimport type { IconNameType } from \"./icons\";\nimport * as Icons from \"./icons\";\n\nexport type { IconNameType };\n\nexport interface IconProps {\n\tname: IconNameType;\n\tsize?: number | string;\n\tclassName?: string;\n\tcolor?: string;\n\t\"aria-label\"?: string;\n\t\"aria-hidden\"?: boolean | \"true\" | \"false\";\n}\n\nfunction resolveIcon(name: IconNameType): { path: string; viewBox: string } {\n\tconst key = `ICON_${name.replace(/-/g, \"_\").toUpperCase()}` as keyof typeof Icons;\n\t// biome-ignore lint/performance/noDynamicNamespaceImportAccess: dynamic icon resolution by name (matches Vue DS pattern)\n\tconst entry = Icons[key];\n\tif (Array.isArray(entry) && entry.length === 2) {\n\t\treturn { path: entry[0] as string, viewBox: entry[1] as string };\n\t}\n\treturn { path: \"\", viewBox: \"0 0 24 24\" };\n}\n\nexport function Icon({\n\tname,\n\tsize = 20,\n\tclassName,\n\tcolor,\n\t\"aria-label\": ariaLabel,\n\t\"aria-hidden\": ariaHidden,\n}: IconProps) {\n\tconst { path, viewBox } = useMemo(() => resolveIcon(name), [name]);\n\tconst isDecorative = !ariaLabel;\n\tconst applyFill = name.endsWith(\"-outline\") || name.endsWith(\"-filled\");\n\tlet fillValue = \"none\";\n\tif (applyFill) fillValue = color ? `var(--color-${color})` : \"currentColor\";\n\n\treturn (\n\t\t<svg\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tviewBox={viewBox}\n\t\t\tfill={fillValue}\n\t\t\tstroke={applyFill ? \"none\" : \"currentColor\"}\n\t\t\tstrokeWidth={applyFill ? undefined : \"2\"}\n\t\t\tstrokeLinecap={applyFill ? undefined : \"round\"}\n\t\t\tstrokeLinejoin={applyFill ? undefined : \"round\"}\n\t\t\tclassName={[styles.icon, className].filter(Boolean).join(\" \")}\n\t\t\taria-label={ariaLabel}\n\t\t\taria-hidden={ariaHidden ?? (isDecorative ? \"true\" : undefined)}\n\t\t\trole={ariaLabel ? \"img\" : undefined}\n\t\t\t// biome-ignore lint/security/noDangerouslySetInnerHtml: SVG content from auto-generated icons.ts (not user input)\n\t\t\tdangerouslySetInnerHTML={{ __html: path }}\n\t\t/>\n\t);\n}\n","@layer ds-components {\n\t.wrapper {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--ds-space-1);\n\t\tflex: 1;\n\t}\n\n\t.error {\n\t\tfont-size: var(--ds-font-size-xs);\n\t\tcolor: var(--ds-color-error);\n\t}\n}\n","import { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport styles from \"./AppleSignInButton.module.css\";\n\nexport interface AppleSignInButtonProps {\n\tonSignIn: () => void;\n\tisPending?: boolean;\n\tisError?: boolean;\n\terror?: Error | null;\n}\n\nexport function AppleSignInButton({\n\tonSignIn,\n\tisPending = false,\n\tisError = false,\n\terror,\n}: AppleSignInButtonProps) {\n\treturn (\n\t\t<div className={styles.wrapper}>\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"small\"\n\t\t\t\tfullWidth\n\t\t\t\tonClick={onSignIn}\n\t\t\t\tloading={isPending}\n\t\t\t\taria-label=\"Continuar con Apple\"\n\t\t\t>\n\t\t\t\t<Icon name=\"apple-filled\" size={18} aria-hidden=\"true\" />\n\t\t\t\tApple\n\t\t\t</Button>\n\t\t\t{isError && (\n\t\t\t\t<span role=\"alert\" className={styles.error}>\n\t\t\t\t\t{error instanceof Error ? error.message : \"Error al iniciar sesión con Apple\"}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.wrapper {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tmin-height: 100dvh;\n\t\tflex: 1;\n\t\twidth: 100%;\n\t\tbackground-color: var(--ds-color-white);\n\t\tbackground-image: url(\"./assets/login-background-mobile.svg\");\n\t\tbackground-position: bottom;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: 100% auto;\n\n\t\t@media (width >= 768px) {\n\t\t\tbackground-image: url(\"./assets/login-background-desktop.svg\");\n\t\t\tbackground-position: right top;\n\t\t\tbackground-size: 30% auto;\n\n\t\t\t&::before {\n\t\t\t\tcontent: \"\";\n\t\t\t\tposition: absolute;\n\t\t\t\tbottom: 0;\n\t\t\t\tleft: 0;\n\t\t\t\twidth: 30%;\n\t\t\t\theight: 35%;\n\t\t\t\tbackground-image: url(\"./assets/login-background-desktop.svg\");\n\t\t\t\tbackground-size: contain;\n\t\t\t\tbackground-repeat: no-repeat;\n\t\t\t\ttransform: rotateZ(180deg);\n\t\t\t\tpointer-events: none;\n\t\t\t\tz-index: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t.content {\n\t\tposition: relative;\n\t\tz-index: 1;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-2xl);\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tgap: var(--spacing-lg);\n\t}\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport styles from \"./BackgroundWrapper.module.css\";\n\nexport interface BackgroundWrapperProps extends HTMLAttributes<HTMLDivElement> {\n\tchildren: ReactNode;\n}\n\nexport function BackgroundWrapper({ children, className, ...props }: BackgroundWrapperProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={[styles.wrapper, className].filter(Boolean).join(\" \")}\n\t\t\tdata-full-bleed=\"\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className={styles.content}>{children}</div>\n\t\t</div>\n\t);\n}\n","/**\n * Utility to merge CSS class names, filtering out falsy values.\n */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n\treturn classes.filter(Boolean).join(\" \");\n}\n","@layer ds-components {\n .badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius-full);\n font-family: var(--font-family-base);\n font-weight: var(--font-medium);\n line-height: var(--leading-tight);\n white-space: nowrap;\n }\n\n /* ── Sizes ── */\n .badge[data-size=\"small\"] {\n padding: 0.125rem var(--spacing-sm);\n font-size: var(--text-xs);\n }\n\n .badge[data-size=\"medium\"] {\n padding: 0.1875rem var(--spacing-md);\n font-size: var(--text-sm);\n }\n\n /* ── Variants ── */\n .badge[data-variant=\"default\"] {\n background-color: var(--color-neutral-100);\n color: var(--color-neutral-500);\n }\n\n .badge[data-variant=\"success\"] {\n background-color: var(--color-success-light);\n color: var(--color-success-dark);\n }\n\n .badge[data-variant=\"warning\"] {\n background-color: var(--color-warning-light);\n color: var(--color-warning-dark);\n }\n\n .badge[data-variant=\"error\"] {\n background-color: var(--color-error-light);\n color: var(--color-error-dark);\n }\n\n .badge[data-variant=\"info\"] {\n background-color: var(--color-info-light);\n color: var(--color-info-dark);\n }\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport styles from \"./Badge.module.css\";\n\nexport type BadgeVariant = \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\nexport type BadgeSize = \"small\" | \"medium\";\n\nexport interface BadgeProps {\n\tvariant?: BadgeVariant;\n\tsize?: BadgeSize;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\nexport function Badge({\n\tvariant = \"default\",\n\tsize = \"medium\",\n\tchildren,\n\tclassName,\n}: BadgeProps): React.ReactElement {\n\treturn (\n\t\t<span className={cn(styles.badge, className)} data-variant={variant} data-size={size}>\n\t\t\t{children}\n\t\t</span>\n\t);\n}\n","@layer ds-components {\n .card {\n background-color: var(--ds-color-surface);\n border: 1px solid var(--ds-color-border);\n border-radius: var(--ds-radius-xl);\n width: 100%;\n }\n\n /* ── Padding ── */\n .card[data-padding=\"none\"] {\n padding: 0;\n }\n\n .card[data-padding=\"small\"] {\n padding: var(--ds-space-4);\n }\n\n .card[data-padding=\"medium\"] {\n padding: var(--ds-space-6);\n }\n\n .card[data-padding=\"large\"] {\n padding: var(--ds-space-8);\n }\n\n /* ── Elevation ── */\n .card[data-elevation=\"none\"] {\n box-shadow: none;\n }\n\n .card[data-elevation=\"small\"] {\n box-shadow: var(--ds-shadow-sm);\n }\n\n .card[data-elevation=\"medium\"] {\n box-shadow: var(--ds-shadow-md);\n }\n\n .card[data-elevation=\"large\"] {\n box-shadow: var(--ds-shadow-lg);\n }\n\n /* ── Hoverable ── */\n .card[data-hoverable] {\n cursor: pointer;\n transition: box-shadow var(--ds-duration-fast) var(--ds-ease-out);\n\n &:hover {\n box-shadow: var(--ds-shadow-md);\n }\n }\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport styles from \"./Card.module.css\";\n\nexport type CardPadding = \"none\" | \"small\" | \"medium\" | \"large\";\nexport type CardElevation = \"none\" | \"small\" | \"medium\" | \"large\";\n\nexport interface CardProps extends HTMLAttributes<HTMLElement> {\n\tpadding?: CardPadding;\n\televation?: CardElevation;\n\thoverable?: boolean;\n\tmaxWidth?: string;\n\tchildren: ReactNode;\n}\n\nexport function Card({\n\tpadding = \"small\",\n\televation = \"none\",\n\thoverable = false,\n\tmaxWidth,\n\tchildren,\n\tclassName,\n\tstyle,\n\t...props\n}: CardProps) {\n\treturn (\n\t\t<section\n\t\t\tclassName={[styles.card, className].filter(Boolean).join(\" \")}\n\t\t\tdata-padding={padding}\n\t\t\tdata-elevation={elevation}\n\t\t\tdata-hoverable={hoverable ? \"\" : undefined}\n\t\t\tstyle={maxWidth ? { maxWidth, ...style } : style}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</section>\n\t);\n}\n","@layer ds-components {\n\t.chartWrapper {\n\t\twidth: 100%;\n\t\tposition: relative;\n\t}\n\n\t.chartTitle {\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-semibold);\n\t\tcolor: var(--color-text-muted);\n\t\tmargin-bottom: var(--spacing-sm);\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.05em;\n\t}\n\n\t.kpiCard {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--spacing-xs);\n\t\tpadding: var(--spacing-md);\n\t\tbackground: var(--color-surface);\n\t\tborder: 1px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t}\n\n\t.kpiLabel {\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-text-muted);\n\t}\n\n\t.kpiValue {\n\t\tfont-size: var(--text-2xl);\n\t\tfont-weight: var(--font-bold);\n\t\tcolor: var(--color-text);\n\t\tline-height: var(--leading-tight);\n\t}\n\n\t.kpiChange {\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-medium);\n\t}\n\n\t.kpiChange[data-trend=\"up\"] {\n\t\tcolor: var(--color-success);\n\t}\n\n\t.kpiChange[data-trend=\"down\"] {\n\t\tcolor: var(--color-error);\n\t}\n\n\t.kpiChange[data-trend=\"neutral\"] {\n\t\tcolor: var(--color-text-muted);\n\t}\n\n\t.emptyState {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\theight: 200px;\n\t\tcolor: var(--color-text-muted);\n\t\tfont-size: var(--text-sm);\n\t}\n}\n","import type { ReactElement } from \"react\";\nimport {\n\tArea,\n\tBar,\n\tCartesianGrid,\n\tLegend,\n\tLine,\n\tAreaChart as ReAreaChart,\n\tBarChart as ReBarChart,\n\tLineChart as ReLineChart,\n\tResponsiveContainer,\n\tTooltip,\n\tXAxis,\n\tYAxis,\n} from \"recharts\";\nimport styles from \"./Charts.module.css\";\n\n/* ── DS color palette: recharts stroke/fill accept only resolved colors, not CSS custom properties.\n Keep in sync with --ds-color-primary, blue-600, green-600, amber-600, violet-700, cyan-600. ── */\nconst DS_COLORS = [\n\t\"#ff4235\", // --ds-color-primary\n\t\"#2563eb\", // blue\n\t\"#16a34a\", // green\n\t\"#d97706\", // amber\n\t\"#7c3aed\", // violet\n\t\"#0891b2\", // cyan\n];\n\nexport interface ChartSeries {\n\tdataKey: string;\n\tlabel?: string;\n\tcolor?: string;\n}\n\nexport interface BaseChartProps {\n\t/** Data array — each object must have the keys referenced by series[].dataKey */\n\tdata: Record<string, unknown>[];\n\t/** X-axis data key */\n\txKey: string;\n\tseries: ChartSeries[];\n\theight?: number;\n\ttitle?: string;\n\t/** Y-axis tick formatter */\n\tformatY?: (value: number) => string;\n\t/** Tooltip value formatter */\n\tformatValue?: (value: number) => string;\n\t/** Hide recharts legend */\n\thideLegend?: boolean;\n}\n\n/* ── LineChart ── */\nexport function LineChart({\n\tdata,\n\txKey,\n\tseries,\n\theight = 300,\n\ttitle,\n\tformatY,\n\tformatValue,\n\thideLegend,\n}: BaseChartProps): ReactElement {\n\tif (!data?.length) return <div className={styles.emptyState}>Sin datos</div>;\n\n\treturn (\n\t\t<div className={styles.chartWrapper}>\n\t\t\t{title && <div className={styles.chartTitle}>{title}</div>}\n\t\t\t<ResponsiveContainer width=\"100%\" height={height}>\n\t\t\t\t<ReLineChart data={data} margin={{ top: 4, right: 8, left: 0, bottom: 4 }}>\n\t\t\t\t\t<CartesianGrid strokeDasharray=\"3 3\" stroke=\"var(--color-border)\" />\n\t\t\t\t\t<XAxis dataKey={xKey} tick={{ fontSize: 12 }} />\n\t\t\t\t\t<YAxis tick={{ fontSize: 12 }} tickFormatter={formatY} />\n\t\t\t\t\t<Tooltip formatter={formatValue ? (v) => formatValue(v as number) : undefined} />\n\t\t\t\t\t{!hideLegend && <Legend />}\n\t\t\t\t\t{series.map((s, i) => (\n\t\t\t\t\t\t<Line\n\t\t\t\t\t\t\tkey={s.dataKey}\n\t\t\t\t\t\t\ttype=\"monotone\"\n\t\t\t\t\t\t\tdataKey={s.dataKey}\n\t\t\t\t\t\t\tname={s.label ?? s.dataKey}\n\t\t\t\t\t\t\tstroke={s.color ?? DS_COLORS[i % DS_COLORS.length]}\n\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\tdot={false}\n\t\t\t\t\t\t\tactiveDot={{ r: 4 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</ReLineChart>\n\t\t\t</ResponsiveContainer>\n\t\t</div>\n\t);\n}\n\n/* ── BarChart ── */\nexport function BarChart({\n\tdata,\n\txKey,\n\tseries,\n\theight = 300,\n\ttitle,\n\tformatY,\n\tformatValue,\n\thideLegend,\n}: BaseChartProps): ReactElement {\n\tif (!data?.length) return <div className={styles.emptyState}>Sin datos</div>;\n\n\treturn (\n\t\t<div className={styles.chartWrapper}>\n\t\t\t{title && <div className={styles.chartTitle}>{title}</div>}\n\t\t\t<ResponsiveContainer width=\"100%\" height={height}>\n\t\t\t\t<ReBarChart data={data} margin={{ top: 4, right: 8, left: 0, bottom: 4 }}>\n\t\t\t\t\t<CartesianGrid strokeDasharray=\"3 3\" stroke=\"var(--color-border)\" />\n\t\t\t\t\t<XAxis dataKey={xKey} tick={{ fontSize: 12 }} />\n\t\t\t\t\t<YAxis tick={{ fontSize: 12 }} tickFormatter={formatY} />\n\t\t\t\t\t<Tooltip formatter={formatValue ? (v) => formatValue(v as number) : undefined} />\n\t\t\t\t\t{!hideLegend && <Legend />}\n\t\t\t\t\t{series.map((s, i) => (\n\t\t\t\t\t\t<Bar\n\t\t\t\t\t\t\tkey={s.dataKey}\n\t\t\t\t\t\t\tdataKey={s.dataKey}\n\t\t\t\t\t\t\tname={s.label ?? s.dataKey}\n\t\t\t\t\t\t\tfill={s.color ?? DS_COLORS[i % DS_COLORS.length]}\n\t\t\t\t\t\t\tradius={[2, 2, 0, 0]}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</ReBarChart>\n\t\t\t</ResponsiveContainer>\n\t\t</div>\n\t);\n}\n\n/* ── AreaChart ── */\nexport function AreaChart({\n\tdata,\n\txKey,\n\tseries,\n\theight = 300,\n\ttitle,\n\tformatY,\n\tformatValue,\n\thideLegend,\n}: BaseChartProps): ReactElement {\n\tif (!data?.length) return <div className={styles.emptyState}>Sin datos</div>;\n\n\treturn (\n\t\t<div className={styles.chartWrapper}>\n\t\t\t{title && <div className={styles.chartTitle}>{title}</div>}\n\t\t\t<ResponsiveContainer width=\"100%\" height={height}>\n\t\t\t\t<ReAreaChart data={data} margin={{ top: 4, right: 8, left: 0, bottom: 4 }}>\n\t\t\t\t\t<CartesianGrid strokeDasharray=\"3 3\" stroke=\"var(--color-border)\" />\n\t\t\t\t\t<XAxis dataKey={xKey} tick={{ fontSize: 12 }} />\n\t\t\t\t\t<YAxis tick={{ fontSize: 12 }} tickFormatter={formatY} />\n\t\t\t\t\t<Tooltip formatter={formatValue ? (v) => formatValue(v as number) : undefined} />\n\t\t\t\t\t{!hideLegend && <Legend />}\n\t\t\t\t\t{series.map((s, i) => {\n\t\t\t\t\t\tconst color = s.color ?? DS_COLORS[i % DS_COLORS.length];\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Area\n\t\t\t\t\t\t\t\tkey={s.dataKey}\n\t\t\t\t\t\t\t\ttype=\"monotone\"\n\t\t\t\t\t\t\t\tdataKey={s.dataKey}\n\t\t\t\t\t\t\t\tname={s.label ?? s.dataKey}\n\t\t\t\t\t\t\t\tstroke={color}\n\t\t\t\t\t\t\t\tfill={color}\n\t\t\t\t\t\t\t\tfillOpacity={0.12}\n\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ReAreaChart>\n\t\t\t</ResponsiveContainer>\n\t\t</div>\n\t);\n}\n\n/* ── KpiCard ── */\nexport interface KpiCardProps {\n\tlabel: string;\n\tvalue: string | number;\n\t/** e.g. \"+12.5%\" or \"-3.2%\" */\n\tchange?: string;\n\ttrend?: \"up\" | \"down\" | \"neutral\";\n}\n\nexport function KpiCard({ label, value, change, trend = \"neutral\" }: KpiCardProps): ReactElement {\n\treturn (\n\t\t<div className={styles.kpiCard}>\n\t\t\t<div className={styles.kpiLabel}>{label}</div>\n\t\t\t<div className={styles.kpiValue}>{value}</div>\n\t\t\t{change && (\n\t\t\t\t<div className={styles.kpiChange} data-trend={trend}>\n\t\t\t\t\t{change}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .wrapper {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-sm);\n cursor: pointer;\n user-select: none;\n\n &:has(.input:disabled) {\n opacity: 0.4;\n cursor: not-allowed;\n }\n }\n\n .input {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n\n .checkmark {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n background-color: var(--color-surface);\n border: 1.5px solid var(--color-border);\n border-radius: var(--radius-sm);\n transition:\n background-color var(--duration-fast) var(--ease-out),\n border-color var(--duration-fast) var(--ease-out),\n box-shadow var(--duration-fast) var(--ease-out);\n }\n\n .wrapper:hover:not(:has(.input:disabled)) .checkmark {\n border-color: var(--color-neutral-400);\n }\n\n .input:checked + .checkmark {\n background-color: var(--color-primary);\n border-color: var(--color-primary);\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 10' fill='none'%3E%3Cpath d='M1 5l3.5 3.5L11 1' stroke='%23ffffff' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: center;\n background-size: 10px 8px;\n }\n\n .input:indeterminate + .checkmark {\n background-color: var(--color-primary);\n border-color: var(--color-primary);\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 2' fill='none'%3E%3Cpath d='M1 1h8' stroke='%23ffffff' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: center;\n background-size: 10px 2px;\n }\n\n .input:focus-visible + .checkmark {\n outline: none;\n border-color: var(--color-primary);\n box-shadow: 0 0 0 3px var(--color-primary-light);\n }\n\n .label {\n font-family: var(--font-family-base);\n font-size: var(--text-sm);\n line-height: var(--leading-normal);\n color: var(--color-text);\n }\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport styles from \"./Checkbox.module.css\";\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\tlabel?: string;\n\tref?: React.Ref<HTMLInputElement>;\n}\n\nexport function Checkbox({ label, className, id, ref, ...props }: CheckboxProps) {\n\tconst inputId = id ?? `checkbox-${label?.toLowerCase().replace(/\\s+/g, \"-\")}`;\n\treturn (\n\t\t<label className={[styles.wrapper, className].filter(Boolean).join(\" \")} htmlFor={inputId}>\n\t\t\t<input ref={ref} type=\"checkbox\" id={inputId} className={styles.input} {...props} />\n\t\t\t<span className={styles.checkmark} aria-hidden=\"true\" />\n\t\t\t{label && <span className={styles.label}>{label}</span>}\n\t\t</label>\n\t);\n}\n","@layer ds-components {\n\t.wrapper {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--spacing-md);\n\t\tbackground: var(--ds-color-white);\n\t\tborder: 1px solid var(--color-neutral-200);\n\t\tborder-radius: var(--radius-md);\n\t\tpadding: var(--spacing-md);\n\t}\n\n\t.search {\n\t\twidth: 100%;\n\t\tmax-width: 320px;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tborder: 1px solid var(--color-neutral-200);\n\t\tborder-radius: var(--radius-base);\n\t\tfont-size: var(--text-sm);\n\t\tfont-family: var(--font-family-base);\n\t\t&:focus {\n\t\t\toutline: none;\n\t\t\tborder-color: var(--color-primary);\n\t\t\tbox-shadow: 0 0 0 3px\n\t\t\t\tcolor-mix(in oklch, var(--color-primary) 20%, transparent);\n\t\t}\n\t}\n\n\t.tableContainer {\n\t\toverflow-x: auto;\n\t\toverflow-y: auto;\n\t\tborder: 1px solid var(--color-neutral-200);\n\t\tborder-radius: var(--radius-base);\n\t}\n\n\t.table {\n\t\twidth: 100%;\n\t\tborder-collapse: collapse;\n\t\tfont-size: var(--text-sm);\n\t}\n\n\t.th {\n\t\ttext-align: left;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-weight: 600;\n\t\tcolor: var(--color-neutral-400);\n\t\tbackground: var(--color-neutral-50);\n\t\tborder-bottom: 1px solid var(--color-neutral-200);\n\t\twhite-space: nowrap;\n\t\tuser-select: none;\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tz-index: 1;\n\n\t\t&[data-sortable] {\n\t\t\tcursor: pointer;\n\t\t\t&:hover {\n\t\t\t\tcolor: var(--color-neutral-500);\n\t\t\t}\n\t\t}\n\t}\n\n\t.tr {\n\t\tborder-top: 1px solid var(--color-neutral-200);\n\t\ttransition: background var(--duration-fast) var(--ease-out);\n\n\t\t&:last-child {\n\t\t\tborder-bottom: none;\n\t\t}\n\n\t\t&:nth-child(even) {\n\t\t\tbackground: var(--color-neutral-100);\n\t\t\tborder-bottom: 1px solid var(--color-neutral-200);\n\t\t}\n\n\t\t/* biome-ignore lint/style/noDescendingSpecificity: .th and .tr are unrelated elements; no cascade conflict */\n\t\t&:hover {\n\t\t\tbackground: var(--color-tertiary);\n\t\t}\n\t\t&[data-clickable] {\n\t\t\tcursor: pointer;\n\t\t}\n\t\t&[data-selected] {\n\t\t\tbackground: color-mix(in oklch, var(--color-primary) 6%, transparent);\n\t\t\t&:hover {\n\t\t\t\tbackground: color-mix(in oklch, var(--color-primary) 10%, transparent);\n\t\t\t}\n\t\t}\n\t}\n\n\t.td {\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tcolor: var(--color-neutral-500);\n\t}\n\n\t.empty {\n\t\ttext-align: center;\n\t\tpadding: var(--spacing-2xl);\n\t\tcolor: var(--color-neutral-400);\n\t}\n\n\t.loading {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\tpadding: var(--spacing-2xl);\n\t}\n\n\t.pagination {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tgap: var(--spacing-md);\n\t\tpadding: var(--spacing-sm) 0;\n\t}\n\n\t.pageButton {\n\t\tpadding: var(--spacing-xs) var(--spacing-md);\n\t\tborder: 1px solid var(--color-neutral-200);\n\t\tborder-radius: var(--radius-base);\n\t\tfont-size: var(--text-sm);\n\t\tcursor: pointer;\n\t\ttransition: all var(--duration-fast) var(--ease-out);\n\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground: var(--color-neutral-50);\n\t\t}\n\t\t&:disabled {\n\t\t\topacity: 0.5;\n\t\t\tcursor: not-allowed;\n\t\t}\n\t}\n\n\t.pageInfo {\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-neutral-400);\n\t}\n}\n","import {\n\ttype Column,\n\ttype ColumnDef,\n\tflexRender,\n\tgetCoreRowModel,\n\tgetFilteredRowModel,\n\tgetPaginationRowModel,\n\tgetSortedRowModel,\n\ttype PaginationState,\n\ttype RowSelectionState,\n\ttype SortingState,\n\tuseReactTable,\n} from \"@tanstack/react-table\";\nimport { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Spinner } from \"../Spinner\";\nimport styles from \"./DataTable.module.css\";\n\nfunction getAriaSortValue<T>(\n\tcolumn: Column<T, unknown>,\n): \"ascending\" | \"descending\" | \"none\" | undefined {\n\tconst sorted = column.getIsSorted();\n\tif (sorted === \"asc\") return \"ascending\";\n\tif (sorted === \"desc\") return \"descending\";\n\tif (column.getCanSort()) return \"none\";\n\treturn undefined;\n}\n\nexport interface DataTableProps<T> {\n\tdata: T[];\n\tcolumns: ColumnDef<T, unknown>[];\n\tisLoading?: boolean;\n\tloadingSlot?: ReactNode;\n\tpageSize?: number;\n\tsearchable?: boolean;\n\tsortable?: boolean;\n\tpaginated?: boolean;\n\temptyMessage?: ReactNode;\n\tsearchPlaceholder?: string;\n\tpreviousLabel?: string;\n\tnextLabel?: string;\n\tonRowClick?: (row: T) => void;\n\tselectable?: boolean;\n\tonSelectionChange?: (rows: T[]) => void;\n\tmanualPagination?: boolean;\n\tpageCount?: number;\n\t/** Wrap with useCallback in the parent to avoid redundant fetches on re-render. */\n\tonPageChange?: (pageIndex: number, pageSize: number) => void;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: pagination + selection + loading branches are all load-bearing\nexport function DataTable<T>({\n\tdata,\n\tcolumns,\n\tisLoading = false,\n\tloadingSlot,\n\tpageSize = 20,\n\tsearchable = false,\n\tsortable = true,\n\tpaginated = true,\n\temptyMessage = \"Sin resultados\",\n\tsearchPlaceholder = \"Buscar...\",\n\tpreviousLabel = \"Anterior\",\n\tnextLabel = \"Siguiente\",\n\tonRowClick,\n\tselectable = false,\n\tonSelectionChange,\n\tmanualPagination = false,\n\tpageCount,\n\tonPageChange,\n}: DataTableProps<T>): React.ReactElement {\n\tconst [sorting, setSorting] = useState<SortingState>([]);\n\tconst [globalFilter, setGlobalFilter] = useState(\"\");\n\tconst [pagination, setPagination] = useState<PaginationState>({\n\t\tpageIndex: 0,\n\t\tpageSize,\n\t});\n\tconst [rowSelection, setRowSelection] = useState<RowSelectionState>({});\n\n\tconst selectionColumn: ColumnDef<T, unknown> = useMemo(\n\t\t() => ({\n\t\t\tid: \"__select__\",\n\t\t\tsize: 40,\n\t\t\tenableSorting: false,\n\t\t\theader: ({ table }) => (\n\t\t\t\t<Checkbox\n\t\t\t\t\tchecked={table.getIsAllPageRowsSelected()}\n\t\t\t\t\tonChange={table.getToggleAllPageRowsSelectedHandler()}\n\t\t\t\t\taria-label=\"Select all rows\"\n\t\t\t\t/>\n\t\t\t),\n\t\t\tcell: ({ row }) => (\n\t\t\t\t<Checkbox\n\t\t\t\t\tchecked={row.getIsSelected()}\n\t\t\t\t\tonChange={row.getToggleSelectedHandler()}\n\t\t\t\t\taria-label={`Select row ${row.index + 1}`}\n\t\t\t\t/>\n\t\t\t),\n\t\t}),\n\t\t[],\n\t);\n\n\tconst resolvedColumns = useMemo(\n\t\t() => (selectable ? [selectionColumn, ...columns] : columns),\n\t\t[selectable, columns, selectionColumn],\n\t);\n\n\tconst table = useReactTable({\n\t\tdata,\n\t\tcolumns: resolvedColumns,\n\t\tstate: { sorting, globalFilter, pagination, rowSelection },\n\t\tonSortingChange: setSorting,\n\t\tonGlobalFilterChange: setGlobalFilter,\n\t\tonPaginationChange: setPagination,\n\t\tonRowSelectionChange: setRowSelection,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\t...(sortable ? { getSortedRowModel: getSortedRowModel() } : {}),\n\t\t...(paginated ? { getPaginationRowModel: getPaginationRowModel() } : {}),\n\t\t...(searchable ? { getFilteredRowModel: getFilteredRowModel() } : {}),\n\t\tenableRowSelection: selectable,\n\t\tmanualPagination,\n\t\tpageCount: manualPagination ? (pageCount ?? -1) : undefined,\n\t});\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: rowSelection change must trigger recompute because table.getSelectedRowModel() reads current state\n\tconst selectedRows = useMemo(\n\t\t() => (selectable ? table.getSelectedRowModel().rows.map((row) => row.original) : []),\n\t\t[selectable, table, rowSelection],\n\t);\n\n\tconst isMountedRef = useRef(false);\n\tuseEffect(() => {\n\t\tif (!isMountedRef.current) {\n\t\t\tisMountedRef.current = true;\n\t\t\treturn;\n\t\t}\n\t\tonSelectionChange?.(selectedRows);\n\t}, [selectedRows, onSelectionChange]);\n\n\tuseEffect(() => {\n\t\tif (!manualPagination || !onPageChange) return;\n\t\tonPageChange(pagination.pageIndex, pagination.pageSize);\n\t}, [pagination.pageIndex, pagination.pageSize, manualPagination, onPageChange]);\n\n\tif (isLoading) {\n\t\treturn <div className={styles.loading}>{loadingSlot ?? <Spinner size=\"large\" />}</div>;\n\t}\n\n\treturn (\n\t\t<div className={styles.wrapper}>\n\t\t\t{searchable && (\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclassName={styles.search}\n\t\t\t\t\tplaceholder={searchPlaceholder}\n\t\t\t\t\tvalue={globalFilter}\n\t\t\t\t\tonChange={(e) => setGlobalFilter(e.target.value)}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<div className={styles.tableContainer}>\n\t\t\t\t<table className={styles.table}>\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t{table.getHeaderGroups().map((headerGroup) => (\n\t\t\t\t\t\t\t<tr key={headerGroup.id}>\n\t\t\t\t\t\t\t\t{headerGroup.headers.map((header) => (\n\t\t\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\t\t\tclassName={styles.th}\n\t\t\t\t\t\t\t\t\t\tdata-sortable={header.column.getCanSort() || undefined}\n\t\t\t\t\t\t\t\t\t\tonClick={header.column.getToggleSortingHandler()}\n\t\t\t\t\t\t\t\t\t\taria-sort={getAriaSortValue(header.column)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{flexRender(header.column.columnDef.header, header.getContext())}\n\t\t\t\t\t\t\t\t\t\t{header.column.getIsSorted() === \"asc\" && \" ▲\"}\n\t\t\t\t\t\t\t\t\t\t{header.column.getIsSorted() === \"desc\" && \" ▼\"}\n\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t{table.getRowModel().rows.length === 0 ? (\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td colSpan={resolvedColumns.length} className={styles.empty}>\n\t\t\t\t\t\t\t\t\t{emptyMessage}\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\ttable.getRowModel().rows.map((row) => (\n\t\t\t\t\t\t\t\t<tr\n\t\t\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\t\t\tclassName={styles.tr}\n\t\t\t\t\t\t\t\t\tdata-clickable={!!onRowClick || undefined}\n\t\t\t\t\t\t\t\t\tdata-selected={row.getIsSelected() || undefined}\n\t\t\t\t\t\t\t\t\tonClick={() => onRowClick?.(row.original)}\n\t\t\t\t\t\t\t\t\ttabIndex={onRowClick ? 0 : undefined}\n\t\t\t\t\t\t\t\t\trole={onRowClick ? \"button\" : undefined}\n\t\t\t\t\t\t\t\t\tonKeyDown={\n\t\t\t\t\t\t\t\t\t\tonRowClick\n\t\t\t\t\t\t\t\t\t\t\t? (e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonRowClick(row.original);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{row.getVisibleCells().map((cell) => (\n\t\t\t\t\t\t\t\t\t\t<td key={cell.id} className={styles.td}>\n\t\t\t\t\t\t\t\t\t\t\t{flexRender(cell.column.columnDef.cell, cell.getContext())}\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t))\n\t\t\t\t\t\t)}\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</div>\n\n\t\t\t{paginated && (manualPagination ? (pageCount ?? 0) > 1 : table.getPageCount() > 1) && (\n\t\t\t\t<div className={styles.pagination}>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.pageButton}\n\t\t\t\t\t\tonClick={() => table.previousPage()}\n\t\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{previousLabel}\n\t\t\t\t\t</button>\n\t\t\t\t\t<span className={styles.pageInfo}>\n\t\t\t\t\t\t{table.getState().pagination.pageIndex + 1} /{\" \"}\n\t\t\t\t\t\t{manualPagination ? (pageCount ?? \"?\") : table.getPageCount()}\n\t\t\t\t\t</span>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.pageButton}\n\t\t\t\t\t\tonClick={() => table.nextPage()}\n\t\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{nextLabel}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.wrapper {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--spacing-xs);\n\t}\n\n\t.label {\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-semibold);\n\t\tline-height: var(--leading-snug);\n\t\tcolor: var(--color-text);\n\t}\n\n\t.input {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-base);\n\t\tline-height: var(--leading-normal);\n\t\tcolor: var(--color-text);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: 1.5px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t\ttransition:\n\t\t\tborder-color var(--duration-fast) var(--ease-out),\n\t\t\tbox-shadow var(--duration-fast) var(--ease-out);\n\n\t\t/* Normalize native date picker appearance */\n\t\tappearance: none;\n\t\t-webkit-appearance: none;\n\n\t\t&::-webkit-calendar-picker-indicator {\n\t\t\tcursor: pointer;\n\t\t\topacity: 0.6;\n\t\t\ttransition: opacity var(--duration-fast) var(--ease-out);\n\n\t\t\t&:hover {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\n\t\t&:hover:not(:disabled):not([data-error]) {\n\t\t\tborder-color: var(--color-neutral-400);\n\t\t}\n\n\t\t&:focus {\n\t\t\toutline: none;\n\t\t\tborder-color: var(--color-primary);\n\t\t\tbox-shadow: 0 0 0 3px var(--color-primary-light);\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: none;\n\t\t\tborder-color: var(--color-primary);\n\t\t\tbox-shadow: 0 0 0 3px var(--color-primary-light);\n\t\t}\n\n\t\t&:disabled {\n\t\t\tbackground-color: var(--color-neutral-50);\n\t\t\tcolor: var(--color-neutral-400);\n\t\t\tcursor: not-allowed;\n\t\t}\n\n\t\t&[data-error] {\n\t\t\tborder-color: var(--color-error);\n\n\t\t\t&:focus,\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: 0 0 0 3px var(--color-error-light);\n\t\t\t}\n\t\t}\n\t}\n}\n","import type { InputHTMLAttributes, Ref } from \"react\";\nimport { useId } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport styles from \"./DatePicker.module.css\";\n\nexport interface DatePickerProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\terror?: boolean;\n\tlabel?: string;\n\tref?: Ref<HTMLInputElement>;\n}\n\nexport function DatePicker({ error, label, className, id, ref, ...props }: DatePickerProps) {\n\tconst generatedId = useId();\n\tconst inputId = id ?? generatedId;\n\treturn (\n\t\t<div className={cn(styles.wrapper, className)}>\n\t\t\t{label && (\n\t\t\t\t<label htmlFor={inputId} className={styles.label}>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<input\n\t\t\t\tref={ref}\n\t\t\t\ttype=\"date\"\n\t\t\t\tid={inputId}\n\t\t\t\tclassName={styles.input}\n\t\t\t\tdata-error={error || undefined}\n\t\t\t\taria-invalid={error || undefined}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.wrapper {\n\t\tdisplay: flex;\n\t\talign-items: flex-end;\n\t\tgap: var(--ds-space-2);\n\t}\n\n\t.field {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--ds-space-1);\n\t\tflex: 1;\n\t}\n\n\t.label {\n\t\tfont-family: var(--ds-font-family);\n\t\tfont-size: var(--ds-font-size-sm);\n\t\tfont-weight: var(--ds-font-semibold);\n\t\tline-height: var(--ds-leading-snug);\n\t\tcolor: var(--ds-color-text);\n\t}\n\n\t.input {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--ds-space-2) var(--ds-space-3);\n\t\tfont-family: var(--ds-font-family);\n\t\tfont-size: var(--ds-font-size-base);\n\t\tline-height: var(--ds-leading-normal);\n\t\tcolor: var(--ds-color-text);\n\t\tbackground-color: var(--ds-color-surface);\n\t\tborder: 1px solid var(--ds-color-border);\n\t\tborder-radius: var(--ds-radius-lg);\n\t\tappearance: none;\n\t\t-webkit-appearance: none;\n\t\ttransition:\n\t\t\tborder-color var(--ds-duration-fast) var(--ds-ease-out),\n\t\t\tbox-shadow var(--ds-duration-fast) var(--ds-ease-out);\n\n\t\t&::-webkit-calendar-picker-indicator {\n\t\t\tcursor: pointer;\n\t\t\topacity: 0.6;\n\t\t\ttransition: opacity var(--ds-duration-fast) var(--ds-ease-out);\n\n\t\t\t&:hover {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\n\t\t&:hover:not(:disabled):not([data-error]) {\n\t\t\tborder-color: var(--ds-color-gray-400);\n\t\t}\n\n\t\t&:focus,\n\t\t&:focus-visible {\n\t\t\toutline: none;\n\t\t\tborder-color: var(--ds-color-primary);\n\t\t\tbox-shadow: 0 0 0 3px var(--ds-color-primary-light);\n\t\t}\n\n\t\t&:disabled {\n\t\t\tbackground-color: var(--ds-color-gray-50);\n\t\t\tcolor: var(--ds-color-gray-500);\n\t\t\tcursor: not-allowed;\n\t\t}\n\n\t\t&[data-error] {\n\t\t\tborder-color: var(--ds-color-error);\n\n\t\t\t&:focus,\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: 0 0 0 3px var(--ds-color-error-light);\n\t\t\t}\n\t\t}\n\t}\n\n\t.separator {\n\t\tfont-size: var(--ds-font-size-base);\n\t\tcolor: var(--ds-color-text-muted);\n\t\tpadding-bottom: var(--ds-space-2);\n\t\tflex-shrink: 0;\n\t}\n}\n","import { useId } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport styles from \"./DateRangePicker.module.css\";\n\nexport interface DateRangePickerProps {\n\tstartDate?: string;\n\tendDate?: string;\n\tonStartChange?: (date: string) => void;\n\tonEndChange?: (date: string) => void;\n\tstartLabel?: string;\n\tendLabel?: string;\n\terror?: boolean;\n\tdisabled?: boolean;\n\tminDate?: string;\n\tmaxDate?: string;\n\tclassName?: string;\n}\n\nexport function DateRangePicker({\n\tstartDate = \"\",\n\tendDate = \"\",\n\tonStartChange,\n\tonEndChange,\n\tstartLabel = \"Desde\",\n\tendLabel = \"Hasta\",\n\terror,\n\tdisabled,\n\tminDate,\n\tmaxDate,\n\tclassName,\n}: DateRangePickerProps) {\n\tconst startId = useId();\n\tconst endId = useId();\n\n\treturn (\n\t\t<div className={cn(styles.wrapper, className)}>\n\t\t\t<div className={styles.field}>\n\t\t\t\t<label htmlFor={startId} className={styles.label}>\n\t\t\t\t\t{startLabel}\n\t\t\t\t</label>\n\t\t\t\t<input\n\t\t\t\t\tid={startId}\n\t\t\t\t\ttype=\"date\"\n\t\t\t\t\tclassName={styles.input}\n\t\t\t\t\tvalue={startDate}\n\t\t\t\t\tmin={minDate}\n\t\t\t\t\tmax={endDate || maxDate}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tdata-error={error ? \"\" : undefined}\n\t\t\t\t\taria-invalid={error || undefined}\n\t\t\t\t\tonChange={(e) => onStartChange?.(e.target.value)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<span className={styles.separator} aria-hidden=\"true\">\n\t\t\t\t—\n\t\t\t</span>\n\t\t\t<div className={styles.field}>\n\t\t\t\t<label htmlFor={endId} className={styles.label}>\n\t\t\t\t\t{endLabel}\n\t\t\t\t</label>\n\t\t\t\t<input\n\t\t\t\t\tid={endId}\n\t\t\t\t\ttype=\"date\"\n\t\t\t\t\tclassName={styles.input}\n\t\t\t\t\tvalue={endDate}\n\t\t\t\t\tmin={startDate || minDate}\n\t\t\t\t\tmax={maxDate}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tdata-error={error ? \"\" : undefined}\n\t\t\t\t\taria-invalid={error || undefined}\n\t\t\t\t\tonChange={(e) => onEndChange?.(e.target.value)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { type RefObject, useEffect } from \"react\";\n\nconst FOCUSABLE_SELECTOR =\n\t'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n/**\n * Traps keyboard focus inside the referenced element while `active` is true.\n * On activation the first focusable child receives focus.\n * On deactivation focus returns to the element that was focused before the trap.\n */\nexport function useFocusTrap(ref: RefObject<HTMLElement | null>, active: boolean): void {\n\tuseEffect(() => {\n\t\tif (!active || !ref.current) return;\n\n\t\tconst container = ref.current;\n\t\tconst previouslyFocused = document.activeElement as HTMLElement | null;\n\n\t\tconst focusables = () =>\n\t\t\tArray.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n\n\t\t// Focus first element on activation\n\t\tconst first = focusables()[0];\n\t\tfirst?.focus();\n\n\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: focus trap requires Tab/Shift-Tab × first/last boundary branches\n\t\tfunction handleKeyDown(e: KeyboardEvent) {\n\t\t\tif (e.key !== \"Tab\") return;\n\n\t\t\tconst items = focusables();\n\t\t\tif (items.length === 0) return;\n\n\t\t\tconst firstItem = items[0];\n\t\t\tconst lastItem = items[items.length - 1];\n\n\t\t\tif (e.shiftKey && document.activeElement === firstItem) {\n\t\t\t\te.preventDefault();\n\t\t\t\tlastItem?.focus();\n\t\t\t} else if (!e.shiftKey && document.activeElement === lastItem) {\n\t\t\t\te.preventDefault();\n\t\t\t\tfirstItem?.focus();\n\t\t\t}\n\t\t}\n\n\t\tcontainer.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => {\n\t\t\tcontainer.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tpreviouslyFocused?.focus();\n\t\t};\n\t}, [active, ref]);\n}\n","@layer ds-components {\n .overlay {\n position: fixed;\n inset: 0;\n z-index: var(--ds-z-modal);\n background-color: var(--ds-color-surface-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--ds-space-4);\n animation: ds-fade-in var(--ds-duration-fast) var(--ds-ease-out);\n }\n\n .overlayBackdrop {\n position: absolute;\n inset: 0;\n background: transparent;\n border: none;\n cursor: default;\n padding: 0;\n }\n\n .dialog {\n position: relative;\n background-color: var(--ds-color-surface);\n border-radius: var(--ds-radius-xl);\n box-shadow: var(--ds-shadow-xl);\n display: flex;\n flex-direction: column;\n max-height: calc(100vh - 2 * var(--ds-space-4));\n overflow: hidden;\n animation: ds-dialog-open var(--ds-duration-base) var(--ds-ease-spring);\n\n /* Remove default focus ring from programmatic focus */\n &:focus {\n outline: none;\n }\n\n &[data-size=\"small\"] {\n width: 100%;\n max-width: 400px;\n }\n\n &[data-size=\"medium\"] {\n width: 100%;\n max-width: 560px;\n }\n\n &[data-size=\"large\"] {\n width: 100%;\n max-width: 800px;\n }\n }\n\n .header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--ds-space-3);\n padding: var(--ds-space-6) var(--ds-space-6) var(--ds-space-4);\n border-bottom: 1px solid var(--ds-color-border);\n flex-shrink: 0;\n }\n\n .title {\n font-family: var(--ds-font-family);\n font-size: var(--ds-font-size-xl);\n font-weight: var(--ds-font-weight-bold);\n line-height: var(--ds-leading-tight);\n color: var(--ds-color-text);\n margin: 0;\n }\n\n .closeButton {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 36px;\n height: 36px;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--ds-color-text-muted);\n border-radius: var(--ds-radius-md);\n transition:\n background-color var(--ds-duration-fast) var(--ds-ease-out),\n color var(--ds-duration-fast) var(--ds-ease-out);\n\n &:hover {\n background-color: var(--ds-color-gray-100);\n color: var(--ds-color-text);\n }\n\n &:focus-visible {\n outline: 2px solid var(--ds-color-primary);\n outline-offset: 1px;\n }\n }\n\n .body {\n padding: var(--ds-space-6);\n overflow-y: auto;\n flex: 1;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { useEffect, useId, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFocusTrap } from \"../../utils/focusTrap\";\nimport styles from \"./Dialog.module.css\";\n\nexport type DialogSize = \"small\" | \"medium\" | \"large\";\n\nexport interface DialogProps {\n\topen: boolean;\n\tonClose: () => void;\n\ttitle: string;\n\tchildren: ReactNode;\n\tsize?: DialogSize;\n\tclassName?: string;\n}\n\nexport function Dialog({\n\topen,\n\tonClose,\n\ttitle,\n\tchildren,\n\tsize = \"medium\",\n\tclassName,\n}: DialogProps) {\n\tconst titleId = useId();\n\tconst dialogRef = useRef<HTMLDivElement>(null);\n\n\t/* ── Lock scroll ── */\n\tuseEffect(() => {\n\t\tif (open) {\n\t\t\tconst scrollY = window.scrollY;\n\t\t\tdocument.body.style.overflow = \"hidden\";\n\t\t\tdocument.body.style.position = \"fixed\";\n\t\t\tdocument.body.style.top = `-${scrollY}px`;\n\t\t\tdocument.body.style.width = \"100%\";\n\t\t\treturn () => {\n\t\t\t\tdocument.body.style.overflow = \"\";\n\t\t\t\tdocument.body.style.position = \"\";\n\t\t\t\tdocument.body.style.top = \"\";\n\t\t\t\tdocument.body.style.width = \"\";\n\t\t\t\twindow.scrollTo(0, scrollY);\n\t\t\t};\n\t\t}\n\t}, [open]);\n\n\t/* ── Focus trap (handles focus save/restore + Tab wrapping) ── */\n\tuseFocusTrap(dialogRef, open);\n\n\t/* ── Escape key ── */\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => document.removeEventListener(\"keydown\", handleKeyDown);\n\t}, [open, onClose]);\n\n\tif (!open || typeof document === \"undefined\") return null;\n\n\treturn createPortal(\n\t\t<div className={styles.overlay}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.overlayBackdrop}\n\t\t\t\tonClick={onClose}\n\t\t\t\taria-label=\"Cerrar\"\n\t\t\t\ttabIndex={-1}\n\t\t\t/>\n\n\t\t\t<div\n\t\t\t\tref={dialogRef}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-modal=\"true\"\n\t\t\t\taria-labelledby={titleId}\n\t\t\t\tclassName={[styles.dialog, className].filter(Boolean).join(\" \")}\n\t\t\t\tdata-size={size}\n\t\t\t\ttabIndex={-1}\n\t\t\t>\n\t\t\t\t<div className={styles.header}>\n\t\t\t\t\t<h2 id={titleId} className={styles.title}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h2>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.closeButton}\n\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\taria-label=\"Cerrar diálogo\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path d=\"M18 6 6 18M6 6l12 12\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div className={styles.body}>{children}</div>\n\t\t\t</div>\n\t\t</div>,\n\t\tdocument.body,\n\t);\n}\n","@layer ds-components {\n .root {\n position: relative;\n display: inline-block;\n\n /* ── Trigger button ── */\n .trigger {\n display: flex;\n align-items: center;\n gap: 0;\n border: none;\n border-radius: var(--ds-radius-full);\n font-weight: var(--ds-font-weight-semibold);\n font-family: inherit;\n cursor: pointer;\n transition: opacity 200ms ease-in-out;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n user-select: none;\n\n &:hover:not(:disabled) {\n opacity: 0.85;\n }\n\n &:focus-visible {\n outline: 2px solid var(--ds-focus-color, var(--ds-color-primary));\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n filter: grayscale(1) opacity(0.3);\n }\n }\n\n .triggerText {\n white-space: nowrap;\n }\n\n /* Separator between text and chevron */\n .separator {\n width: 1px;\n align-self: stretch;\n }\n\n .iconWrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .root .iconWrapper svg {\n transition: transform 200ms ease-out;\n }\n\n /* ── Variants ── */\n &[data-variant=\"primary\"] {\n .trigger {\n background-color: var(--ds-color-info);\n color: var(--ds-color-white);\n }\n .separator {\n background-color: rgba(255, 255, 255, 0.3);\n }\n }\n\n &[data-variant=\"ghost\"] {\n .trigger {\n background-color: transparent;\n color: var(--ds-color-text-muted);\n border: 1px solid var(--ds-color-border);\n\n &:hover:not(:disabled) {\n background-color: var(--ds-color-gray-100);\n color: var(--ds-color-text);\n opacity: 1;\n }\n }\n .separator {\n background-color: var(--ds-color-border);\n }\n }\n\n /* ── Sizes ── */\n &[data-size=\"tiny\"] {\n .trigger {\n font-size: var(--ds-font-size-xs);\n min-height: 1.75rem;\n }\n .triggerText {\n padding: 0 var(--ds-space-3);\n }\n .iconWrapper {\n padding: 0 var(--ds-space-2);\n }\n .separator {\n margin: var(--ds-space-1) 0;\n }\n }\n\n &[data-size=\"small\"] {\n .trigger {\n font-size: var(--ds-font-size-sm);\n min-height: 2.25rem;\n }\n .triggerText {\n padding: 0 var(--ds-space-3);\n }\n .iconWrapper {\n padding: 0 var(--ds-space-2);\n }\n .separator {\n margin: var(--ds-space-1) 0;\n }\n }\n\n &[data-size=\"medium\"] {\n .trigger {\n font-size: var(--ds-font-size-base);\n min-height: 3rem;\n }\n .triggerText {\n padding: 0 var(--ds-space-4);\n }\n .iconWrapper {\n padding: 0 var(--ds-space-3);\n }\n .separator {\n margin: var(--ds-space-2) 0;\n }\n }\n\n &[data-size=\"large\"] {\n .trigger {\n font-size: var(--ds-font-size-lg);\n min-height: 4rem;\n }\n .triggerText {\n padding: 0 var(--ds-space-6);\n }\n .iconWrapper {\n padding: 0 var(--ds-space-4);\n }\n .separator {\n margin: var(--ds-space-2) 0;\n }\n }\n\n /* Chevron rotates when open */\n &[data-open] .iconWrapper svg {\n transform: rotate(180deg);\n }\n\n /* ── Dropdown menu ── */\n .menu {\n position: absolute;\n bottom: calc(100% + var(--ds-space-1));\n left: 50%;\n transform: translateX(-50%);\n z-index: 1000;\n min-width: max-content;\n background-color: var(--ds-color-surface);\n border: 1.5px solid var(--ds-color-border);\n border-radius: var(--ds-radius-lg);\n box-shadow: var(--ds-shadow-lg);\n padding: var(--ds-space-1) 0;\n list-style: none;\n overflow: hidden;\n animation: menuEnter 150ms ease-out;\n }\n\n .menuItem {\n display: flex;\n align-items: center;\n gap: var(--ds-space-2);\n padding: var(--ds-space-2) var(--ds-space-4);\n font-size: var(--ds-font-size-sm);\n font-family: inherit;\n text-align: left;\n background: none;\n cursor: pointer;\n color: var(--ds-color-text);\n transition: background-color 150ms ease-in-out;\n white-space: nowrap;\n\n &:hover:not([data-disabled]) {\n background-color: var(--ds-color-gray-100);\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n &[data-focused] {\n background-color: var(--ds-color-gray-100);\n }\n }\n\n .menuIcon {\n flex-shrink: 0;\n }\n\n .menuLabel {\n flex: 1;\n }\n }\n\n @keyframes menuEnter {\n from {\n opacity: 0;\n transform: translateX(-50%) scaleY(0.95) translateY(4px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) scaleY(1) translateY(0);\n }\n }\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { Icon } from \"../Icon/Icon\";\nimport type { IconNameType } from \"../Icon/icons\";\nimport styles from \"./DropdownButton.module.css\";\n\nexport interface DropdownMenuItemType {\n\tvalue: string;\n\tlabel: string;\n\ticon?: IconNameType;\n\tdisabled?: boolean;\n}\n\nexport interface DropdownButtonProps {\n\ttext: string;\n\tmenuItems: DropdownMenuItemType[];\n\tsize?: \"tiny\" | \"small\" | \"medium\" | \"large\";\n\tvariant?: \"primary\" | \"ghost\";\n\tdisabled?: boolean;\n\tonSelect?: (item: DropdownMenuItemType) => void;\n\tonOpen?: () => void;\n\tonClose?: () => void;\n}\n\nconst ICON_SIZE: Record<NonNullable<DropdownButtonProps[\"size\"]>, number> = {\n\ttiny: 14,\n\tsmall: 16,\n\tmedium: 20,\n\tlarge: 24,\n};\n\nexport function DropdownButton({\n\ttext,\n\tmenuItems,\n\tsize = \"medium\",\n\tvariant = \"primary\",\n\tdisabled = false,\n\tonSelect,\n\tonOpen,\n\tonClose,\n}: DropdownButtonProps) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [focusedIndex, setFocusedIndex] = useState(-1);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst buttonRef = useRef<HTMLButtonElement>(null);\n\n\tfunction open() {\n\t\tsetIsOpen(true);\n\t\tsetFocusedIndex(-1);\n\t\tonOpen?.();\n\t}\n\n\tfunction close() {\n\t\tsetIsOpen(false);\n\t\tsetFocusedIndex(-1);\n\t\tonClose?.();\n\t}\n\n\tfunction toggle() {\n\t\tif (disabled) return;\n\t\tisOpen ? close() : open();\n\t}\n\n\tfunction selectItem(item: DropdownMenuItemType) {\n\t\tif (item.disabled) return;\n\t\tonSelect?.(item);\n\t\tclose();\n\t}\n\n\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: keyboard nav requires a branch per key × open/closed state\n\tfunction handleKeyDown(e: React.KeyboardEvent) {\n\t\tif (!isOpen) {\n\t\t\tif (e.key === \"Enter\" || e.key === \" \" || e.key === \"ArrowDown\") {\n\t\t\t\te.preventDefault();\n\t\t\t\topen();\n\t\t\t\tsetFocusedIndex(0);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === \"Escape\") {\n\t\t\te.preventDefault();\n\t\t\tclose();\n\t\t\tbuttonRef.current?.focus();\n\t\t} else if (e.key === \"ArrowDown\") {\n\t\t\te.preventDefault();\n\t\t\tsetFocusedIndex((i) => Math.min(i + 1, menuItems.length - 1));\n\t\t} else if (e.key === \"ArrowUp\") {\n\t\t\te.preventDefault();\n\t\t\tsetFocusedIndex((i) => Math.max(i - 1, 0));\n\t\t} else if (e.key === \"Enter\" || e.key === \" \") {\n\t\t\te.preventDefault();\n\t\t\tif (focusedIndex >= 0) {\n\t\t\t\tconst item = menuItems[focusedIndex];\n\t\t\t\tif (item && !item.disabled) selectItem(item);\n\t\t\t}\n\t\t} else if (e.key === \"Tab\") {\n\t\t\tclose();\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tfunction handleClickOutside(e: MouseEvent) {\n\t\t\tif (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n\t\t\t\tsetIsOpen(false);\n\t\t\t\tsetFocusedIndex(-1);\n\t\t\t\tonClose?.();\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener(\"click\", handleClickOutside);\n\t\treturn () => document.removeEventListener(\"click\", handleClickOutside);\n\t}, [onClose]);\n\n\tconst iconSize = ICON_SIZE[size];\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={styles.root}\n\t\t\tdata-size={size}\n\t\t\tdata-variant={variant}\n\t\t\tdata-open={isOpen || undefined}\n\t\t\tdata-disabled={disabled || undefined}\n\t\t>\n\t\t\t<button\n\t\t\t\tref={buttonRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.trigger}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\tonClick={toggle}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t>\n\t\t\t\t<span className={styles.triggerText}>{text}</span>\n\t\t\t\t<span className={styles.separator} aria-hidden=\"true\" />\n\t\t\t\t<span className={styles.iconWrapper}>\n\t\t\t\t\t<Icon name=\"chevron-down-outline\" size={iconSize} aria-hidden=\"true\" />\n\t\t\t\t</span>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className={styles.menu} role=\"listbox\" aria-label={`${text} options`}>\n\t\t\t\t\t{menuItems.map((item, index) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\t\tclassName={styles.menuItem}\n\t\t\t\t\t\t\tdata-focused={focusedIndex === index || undefined}\n\t\t\t\t\t\t\tdata-disabled={item.disabled || undefined}\n\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\taria-selected={false}\n\t\t\t\t\t\t\ttabIndex={isOpen ? 0 : -1}\n\t\t\t\t\t\t\tonClick={() => selectItem(item)}\n\t\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\tselectItem(item);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.icon && (\n\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\tname={item.icon}\n\t\t\t\t\t\t\t\t\tsize={iconSize}\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\tclassName={styles.menuIcon}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<span className={styles.menuLabel}>{item.label}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.container {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t}\n\n\t/* ── Trigger wrapper (accessible button) ── */\n\t.triggerWrapper {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tbackground: none;\n\t\tborder: none;\n\t\tpadding: 0;\n\t\tcursor: pointer;\n\t\tcolor: inherit;\n\t}\n\n\t/* ── Menu panel ── */\n\t.menu {\n\t\tposition: absolute;\n\t\ttop: calc(100% + var(--spacing-xs));\n\t\tz-index: var(--z-dropdown);\n\t\tmin-width: 160px;\n\t\tbackground-color: var(--color-surface);\n\t\tborder: 1px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t\tbox-shadow: var(--shadow-lg);\n\t\toverflow: hidden;\n\t\tpadding: var(--spacing-xs) 0;\n\t}\n\n\t/* ── Alignment ── */\n\t.menu[data-align=\"left\"] {\n\t\tleft: 0;\n\t}\n\n\t.menu[data-align=\"right\"] {\n\t\tright: 0;\n\t}\n\n\t/* ── Menu items ── */\n\t.menuItem {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: var(--spacing-sm);\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tbackground: none;\n\t\tborder: none;\n\t\ttext-align: left;\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-normal);\n\t\tcolor: var(--color-text);\n\t\tcursor: pointer;\n\t\tline-height: var(--leading-normal);\n\t\twhite-space: nowrap;\n\t\ttransition: background-color var(--duration-fast) var(--ease-out);\n\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-neutral-100);\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: none;\n\t\t\tbackground-color: var(--color-primary-50);\n\t\t}\n\n\t\t&:disabled {\n\t\t\tcolor: var(--color-neutral-400);\n\t\t\tcursor: not-allowed;\n\t\t}\n\t}\n\n\t/* ── Danger variant ── */\n\t.menuItem[data-danger] {\n\t\tcolor: var(--color-error);\n\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-error-light);\n\t\t}\n\t}\n\n\t/* ── Icon slot ── */\n\t.icon {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tflex-shrink: 0;\n\t\twidth: 16px;\n\t\theight: 16px;\n\t\tcolor: inherit;\n\t}\n}\n","import { type ReactElement, type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport styles from \"./DropdownMenu.module.css\";\n\nexport interface DropdownMenuItem {\n\tid: string;\n\tlabel: string;\n\ticon?: ReactNode;\n\tonClick: () => void;\n\tdanger?: boolean;\n\tdisabled?: boolean;\n}\n\nexport interface DropdownMenuProps {\n\ttrigger: ReactNode;\n\titems: DropdownMenuItem[];\n\talign?: \"left\" | \"right\";\n}\n\nexport function DropdownMenu({ trigger, items, align = \"left\" }: DropdownMenuProps): ReactElement {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst triggerRef = useRef<HTMLButtonElement>(null);\n\tconst itemRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n\n\tconst closeMenu = useCallback(() => {\n\t\tsetIsOpen(false);\n\t\ttriggerRef.current?.focus();\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst handler = (e: MouseEvent) => {\n\t\t\tif (!containerRef.current?.contains(e.target as Node)) setIsOpen(false);\n\t\t};\n\t\tdocument.addEventListener(\"mousedown\", handler);\n\t\treturn () => document.removeEventListener(\"mousedown\", handler);\n\t}, [isOpen]);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst handler = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") closeMenu();\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", handler);\n\t\treturn () => document.removeEventListener(\"keydown\", handler);\n\t}, [isOpen, closeMenu]);\n\n\t// Focus first enabled item when menu opens\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst firstEnabled = items.find((item) => !item.disabled);\n\t\tif (firstEnabled) itemRefs.current.get(firstEnabled.id)?.focus();\n\t}, [isOpen, items]);\n\n\tconst handleMenuKeyDown = (e: React.KeyboardEvent) => {\n\t\tconst enabledItems = items.filter((item) => !item.disabled);\n\t\tconst enabledIds = enabledItems.map((item) => item.id);\n\t\tconst focused = document.activeElement as HTMLButtonElement;\n\t\tconst focusedId = [...itemRefs.current.entries()].find(([, el]) => el === focused)?.[0];\n\t\tconst currentIndex = focusedId ? enabledIds.indexOf(focusedId) : -1;\n\n\t\tlet targetId: string | undefined;\n\t\tif (e.key === \"ArrowDown\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[(currentIndex + 1) % enabledIds.length];\n\t\t} else if (e.key === \"ArrowUp\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[(currentIndex - 1 + enabledIds.length) % enabledIds.length];\n\t\t} else if (e.key === \"Home\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[0];\n\t\t} else if (e.key === \"End\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[enabledIds.length - 1];\n\t\t}\n\n\t\tif (targetId) itemRefs.current.get(targetId)?.focus();\n\t};\n\n\treturn (\n\t\t<div ref={containerRef} className={styles.container}>\n\t\t\t<button\n\t\t\t\tref={triggerRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.triggerWrapper}\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\taria-haspopup=\"menu\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t>\n\t\t\t\t{trigger}\n\t\t\t</button>\n\t\t\t{isOpen && (\n\t\t\t\t<div className={styles.menu} data-align={align} role=\"menu\" onKeyDown={handleMenuKeyDown}>\n\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\t\t\tif (el) itemRefs.current.set(item.id, el);\n\t\t\t\t\t\t\t\telse itemRefs.current.delete(item.id);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t\t\tclassName={styles.menuItem}\n\t\t\t\t\t\t\tdata-danger={item.danger || undefined}\n\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\titem.onClick();\n\t\t\t\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.icon && <span className={styles.icon}>{item.icon}</span>}\n\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .skeleton {\n display: block;\n background: linear-gradient(\n 90deg,\n var(--ds-color-gray-100) 25%,\n var(--ds-color-gray-200) 50%,\n var(--ds-color-gray-100) 75%\n );\n background-size: 200% 100%;\n animation: ds-skeleton-shimmer 1.5s ease-in-out infinite;\n }\n\n .skeleton[data-variant=\"text\"] {\n height: 1em;\n border-radius: var(--ds-radius-sm);\n\n &:not([style*=\"width\"]) {\n width: 100%;\n }\n }\n\n .skeleton[data-variant=\"circular\"] {\n border-radius: var(--ds-radius-circle);\n }\n\n .skeleton[data-variant=\"rectangular\"] {\n border-radius: var(--ds-radius-md);\n }\n}\n","import styles from \"./Skeleton.module.css\";\n\nexport type SkeletonVariant = \"text\" | \"circular\" | \"rectangular\";\n\nexport interface SkeletonProps {\n\twidth?: string | number;\n\theight?: string | number;\n\tvariant?: SkeletonVariant;\n\tclassName?: string;\n}\n\nfunction toCssValue(val: string | number | undefined): string | undefined {\n\tif (val === undefined) return undefined;\n\treturn typeof val === \"number\" ? `${val}px` : val;\n}\n\nexport function Skeleton({ width, height, variant = \"rectangular\", className }: SkeletonProps) {\n\treturn (\n\t\t<span\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={[styles.skeleton, className].filter(Boolean).join(\" \")}\n\t\t\tdata-variant={variant}\n\t\t\tstyle={{\n\t\t\t\twidth: toCssValue(width),\n\t\t\t\theight: toCssValue(height),\n\t\t\t}}\n\t\t/>\n\t);\n}\n","@layer ds-components {\n\t.imagePreview {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tbackground-color: var(--color-neutral-100);\n\t\toverflow: hidden;\n\t\tflex-shrink: 0;\n\t\twidth: var(--ip-width, 40px);\n\t\theight: var(--ip-height, 40px);\n\t\tborder-radius: var(--ip-radius, 8px);\n\n\t\t& img {\n\t\t\tobject-fit: cover;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\t}\n\n\t.hidden {\n\t\topacity: 0;\n\t\tposition: absolute;\n\t\tpointer-events: none;\n\t}\n\n\t.errorIcon {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tcolor: var(--color-neutral-300);\n\t}\n}\n","import { useEffect, useState } from \"react\";\nimport { Icon } from \"../Icon\";\nimport { Skeleton } from \"../Skeleton\";\nimport styles from \"./ImagePreview.module.css\";\n\nexport interface ImagePreviewProps {\n\timageSrc: string;\n\twidth?: number;\n\theight?: number;\n\talt?: string;\n\tborderRadius?: number;\n\tclassName?: string;\n\t\"data-testid\"?: string;\n}\n\ntype LoadState = \"loading\" | \"loaded\" | \"error\";\n\nfunction isBase64Image(src: string): boolean {\n\treturn src.startsWith(\"data:image/\");\n}\n\nfunction isValidUrl(src: string): boolean {\n\ttry {\n\t\tnew URL(src);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function ImagePreview({\n\timageSrc,\n\twidth = 40,\n\theight = 40,\n\talt = \"Image without alt text\",\n\tborderRadius = 8,\n\tclassName,\n\t\"data-testid\": dataTestId,\n}: ImagePreviewProps) {\n\tconst [state, setState] = useState<LoadState>(() => (!imageSrc ? \"error\" : \"loading\"));\n\n\tuseEffect(() => {\n\t\tif (!imageSrc) {\n\t\t\tsetState(\"error\");\n\t\t\treturn;\n\t\t}\n\t\tif (!isBase64Image(imageSrc) && !isValidUrl(imageSrc)) {\n\t\t\tsetState(\"error\");\n\t\t\treturn;\n\t\t}\n\t\tif (isBase64Image(imageSrc)) {\n\t\t\tsetState(\"loaded\");\n\t\t\treturn;\n\t\t}\n\n\t\tsetState(\"loading\");\n\t\tconst img = new Image();\n\t\timg.onload = () => setState(\"loaded\");\n\t\timg.onerror = () => setState(\"error\");\n\t\timg.src = imageSrc;\n\t\treturn () => {\n\t\t\timg.onload = null;\n\t\t\timg.onerror = null;\n\t\t};\n\t}, [imageSrc]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={[styles.imagePreview, className].filter(Boolean).join(\" \")}\n\t\t\tdata-state={state}\n\t\t\tdata-testid={dataTestId}\n\t\t\trole={state === \"error\" ? \"img\" : undefined}\n\t\t\taria-label={state === \"error\" ? \"Image failed to load\" : undefined}\n\t\t\tstyle={\n\t\t\t\t{\n\t\t\t\t\t\"--ip-width\": `${width}px`,\n\t\t\t\t\t\"--ip-height\": `${height}px`,\n\t\t\t\t\t\"--ip-radius\": `${borderRadius}px`,\n\t\t\t\t} as React.CSSProperties\n\t\t\t}\n\t\t>\n\t\t\t{state !== \"error\" && (\n\t\t\t\t<img\n\t\t\t\t\tsrc={imageSrc}\n\t\t\t\t\talt={alt}\n\t\t\t\t\twidth={width}\n\t\t\t\t\theight={height}\n\t\t\t\t\tdecoding=\"async\"\n\t\t\t\t\tloading={isBase64Image(imageSrc) ? undefined : \"lazy\"}\n\t\t\t\t\tclassName={state === \"loading\" ? styles.hidden : undefined}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{state === \"loading\" && <Skeleton width={width} height={height} />}\n\t\t\t{state === \"error\" && (\n\t\t\t\t<span className={styles.errorIcon}>\n\t\t\t\t\t<Icon name=\"error-outline\" size={Math.round(width * 0.6)} aria-hidden=\"true\" />\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.container {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tgap: var(--spacing-2xl);\n\t\twidth: 100%;\n\t}\n\n\t.previewGrid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fill, minmax(70px, 1fr));\n\t\tgap: var(--spacing-xl);\n\t\twidth: 100%;\n\t\tjustify-items: center;\n\t}\n\n\t.previewBtn {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tgap: var(--spacing-xs);\n\t\tpadding: var(--spacing-xs) 0.125rem 0.5rem;\n\t\tborder: none;\n\t\tborder-radius: var(--radius-lg);\n\t\tbackground-color: transparent;\n\t\tcursor: pointer;\n\t\ttransition:\n\t\t\tbackground-color var(--duration-fast) var(--ease-out),\n\t\t\ttransform var(--duration-fast) var(--ease-out);\n\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-neutral-100);\n\t\t\ttransform: scale(1.25);\n\t\t\tcolor: var(--color-primary);\n\t\t}\n\t}\n\n\t.zone {\n\t\tborder: 0.125rem dashed var(--color-neutral-300);\n\t\tborder-radius: var(--radius-lg);\n\t\tpadding: var(--spacing-2xl);\n\t\ttext-align: center;\n\t\tcursor: pointer;\n\t\ttransition:\n\t\t\tborder-color var(--duration-fast),\n\t\t\tbackground var(--duration-fast),\n\t\t\topacity var(--duration-fast);\n\t\tbackground: var(--color-neutral-100);\n\t\toutline: none;\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\n\t\t&:hover {\n\t\t\topacity: 0.5;\n\t\t}\n\n\t\t&[data-dragging] {\n\t\t\tborder-color: var(--color-primary);\n\t\t\tbackground: var(--color-primary-50);\n\t\t}\n\n\t\t&[data-processing] {\n\t\t\topacity: 0.6;\n\t\t\tcursor: wait;\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: 2px solid var(--color-primary);\n\t\t\toutline-offset: 2px;\n\t\t}\n\t}\n\n\t.input {\n\t\tdisplay: none;\n\t}\n\n\t.zoneLabel {\n\t\tdisplay: block;\n\t\tmargin-top: var(--spacing-sm);\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-secondary);\n\t}\n\n\t.description {\n\t\tfont-size: var(--text-xs);\n\t\tcolor: var(--color-neutral-400);\n\t\tmargin: 0;\n\t}\n\n\t.fileList {\n\t\tdisplay: flex;\n\t\tflex-flow: row wrap;\n\t\tgap: var(--spacing-sm);\n\t\twidth: 100%;\n\t}\n}\n","export type AllowedFileTypes = \"images\" | \"video\" | \"text\" | \"spreadsheet\";\n\nexport const ALLOWED_TYPES_MAP: Record<AllowedFileTypes, { types: string[]; mimeTypes: string[] }> =\n\t{\n\t\timages: {\n\t\t\ttypes: [\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"heif\"],\n\t\t\tmimeTypes: [\"image/png\", \"image/jpeg\", \"image/gif\", \"image/webp\", \"image/heic\", \"image/heif\"],\n\t\t},\n\t\tvideo: {\n\t\t\ttypes: [\"mp4\", \"mov\", \"webm\"],\n\t\t\tmimeTypes: [\"video/mp4\", \"video/quicktime\", \"video/webm\"],\n\t\t},\n\t\ttext: {\n\t\t\ttypes: [\"csv\"],\n\t\t\tmimeTypes: [\"text/csv\", \"text/plain\"],\n\t\t},\n\t\tspreadsheet: {\n\t\t\ttypes: [\"xls\", \"xlsx\"],\n\t\t\tmimeTypes: [\n\t\t\t\t\"application/vnd.ms-excel\",\n\t\t\t\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n\t\t\t],\n\t\t},\n\t};\n\nexport function getAllowedMimeTypes(fileType: AllowedFileTypes): string {\n\treturn ALLOWED_TYPES_MAP[fileType].mimeTypes.join(\",\");\n}\n\nexport function validateFiles(files: FileList, allowedFileTypes: AllowedFileTypes): File[] {\n\tconst { types, mimeTypes } = ALLOWED_TYPES_MAP[allowedFileTypes];\n\treturn Array.from(files).filter((file) => {\n\t\tconst mimeMatch = mimeTypes.some((m) => file.type === m);\n\t\tconst extMatch = types.some((t) => file.name.toLowerCase().endsWith(`.${t}`));\n\t\treturn mimeMatch || extMatch;\n\t});\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { ImagePreview } from \"../ImagePreview\";\nimport styles from \"./DropZone.module.css\";\nimport type { AllowedFileTypes } from \"./dropZoneConstants\";\nimport { ALLOWED_TYPES_MAP, getAllowedMimeTypes, validateFiles } from \"./dropZoneConstants\";\n\nexport interface FileWithPreview {\n\tid: string;\n\tfile: File;\n\tname: string;\n\tpreview: string;\n}\n\nexport interface DropZoneProps {\n\tlabel?: string;\n\tallowedFileTypes?: AllowedFileTypes;\n\tmultiple?: boolean;\n\tdisplayPreview?: boolean;\n\tdisplayFileList?: boolean;\n\tvalue?: FileWithPreview[] | null;\n\tonDrop: (files: FileList) => void;\n\tonDropError?: (message: string) => void;\n\tonRemove?: (file: FileWithPreview) => void;\n\tonChange?: (files: FileWithPreview[]) => void;\n\tclassName?: string;\n\t\"data-testid\"?: string;\n}\n\nasync function buildPreview(file: File, isImage: boolean): Promise<string> {\n\tif (!isImage) return \"\";\n\treturn new Promise((resolve) => {\n\t\tconst reader = new FileReader();\n\t\treader.onload = (e) => resolve((e.target?.result as string) ?? \"\");\n\t\treader.readAsDataURL(file);\n\t});\n}\n\nasync function buildFileEntries(valid: File[], isImage: boolean): Promise<FileWithPreview[]> {\n\treturn Promise.all(\n\t\tvalid.map(async (file) => ({\n\t\t\tid: crypto.randomUUID(),\n\t\t\tfile,\n\t\t\tname: file.name,\n\t\t\tpreview: await buildPreview(file, isImage),\n\t\t})),\n\t);\n}\n\nexport function DropZone({\n\tlabel = \"Haz click o arrastra un archivo para subir\",\n\tallowedFileTypes = \"images\",\n\tmultiple = true,\n\tdisplayPreview = true,\n\tdisplayFileList = false,\n\tvalue,\n\tonDrop,\n\tonDropError,\n\tonRemove,\n\tonChange,\n\tclassName,\n\t\"data-testid\": dataTestId,\n}: DropZoneProps) {\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst [isDragging, setIsDragging] = useState(false);\n\tconst [isProcessing, setIsProcessing] = useState(false);\n\tconst [internalFiles, setInternalFiles] = useState<FileWithPreview[]>(value ?? []);\n\n\tuseEffect(() => {\n\t\tif (value !== undefined) setInternalFiles(value ?? []);\n\t}, [value]);\n\n\tconst files = value !== undefined ? (value ?? []) : internalFiles;\n\tconst showFileList =\n\t\t(displayFileList || (!displayPreview && !displayFileList)) && files.length > 0;\n\tconst extensions = ALLOWED_TYPES_MAP[allowedFileTypes].types;\n\tconst mimeAccept = getAllowedMimeTypes(allowedFileTypes);\n\tconst isImageType = allowedFileTypes === \"images\";\n\n\tasync function applyFiles(valid: File[], list: FileList) {\n\t\tif (valid.length === 0) {\n\t\t\tonDropError?.(`No files match the allowed types: ${allowedFileTypes}`);\n\t\t\treturn;\n\t\t}\n\t\tconst processed = await buildFileEntries(valid, isImageType);\n\t\tconst next = multiple ? [...files, ...processed] : processed;\n\t\tif (value === undefined) setInternalFiles(next);\n\t\tonChange?.(next);\n\t\tonDrop(list);\n\t}\n\n\tasync function processFiles(list: FileList) {\n\t\tif (isProcessing) return;\n\t\tsetIsProcessing(true);\n\t\ttry {\n\t\t\tawait applyFiles(validateFiles(list, allowedFileTypes), list);\n\t\t} catch (err) {\n\t\t\tonDropError?.(err instanceof Error ? err.message : \"Unknown error\");\n\t\t} finally {\n\t\t\tsetIsProcessing(false);\n\t\t}\n\t}\n\n\tfunction removeFile(index: number) {\n\t\tconst removed = files[index];\n\t\tconst next = files.filter((_, i) => i !== index);\n\t\tif (value === undefined) setInternalFiles(next);\n\t\tonChange?.(next);\n\t\tif (removed) onRemove?.(removed);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={[styles.container, className].filter(Boolean).join(\" \")}\n\t\t\tdata-testid={dataTestId}\n\t\t>\n\t\t\t{displayPreview && files.length > 0 && (\n\t\t\t\t<div className={styles.previewGrid}>\n\t\t\t\t\t{files.map((f, i) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={f.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName={styles.previewBtn}\n\t\t\t\t\t\t\tonClick={() => removeFile(i)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ImagePreview\n\t\t\t\t\t\t\t\timageSrc={f.preview}\n\t\t\t\t\t\t\t\twidth={70}\n\t\t\t\t\t\t\t\theight={70}\n\t\t\t\t\t\t\t\tborderRadius={8}\n\t\t\t\t\t\t\t\talt={f.name}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Icon name=\"delete-outline\" size={14} aria-hidden=\"true\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.zone}\n\t\t\t\tdata-dragging={isDragging ? \"\" : undefined}\n\t\t\t\tdata-processing={isProcessing ? \"\" : undefined}\n\t\t\t\taria-label={label}\n\t\t\t\tonClick={() => inputRef.current?.click()}\n\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") inputRef.current?.click();\n\t\t\t\t}}\n\t\t\t\tonDragOver={(e) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetIsDragging(true);\n\t\t\t\t}}\n\t\t\t\tonDragLeave={(e) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetIsDragging(false);\n\t\t\t\t}}\n\t\t\t\tonDrop={async (e) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetIsDragging(false);\n\t\t\t\t\tconst dropped = e.dataTransfer?.files;\n\t\t\t\t\tif (dropped?.length) await processFiles(dropped);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Icon name=\"cloud-upload-outline\" size={48} aria-hidden=\"true\" />\n\t\t\t\t<input\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\ttype=\"file\"\n\t\t\t\t\tclassName={styles.input}\n\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\taccept={mimeAccept}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tonChange={async (e) => {\n\t\t\t\t\t\tconst list = e.target.files;\n\t\t\t\t\t\tif (list?.length) await processFiles(list);\n\t\t\t\t\t\te.target.value = \"\";\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<strong className={styles.zoneLabel}>{label}</strong>\n\t\t\t\t<p className={styles.description}>({extensions.join(\", \")})</p>\n\t\t\t</button>\n\n\t\t\t{showFileList && (\n\t\t\t\t<div className={styles.fileList}>\n\t\t\t\t\t{files.map((f, i) => (\n\t\t\t\t\t\t<Button key={f.id} variant=\"outline\" size=\"small\" onClick={() => removeFile(i)}>\n\t\t\t\t\t\t\t{f.name}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type DsTheme = \"toteat-react-ds\" | \"angular-legacy\";\n\nexport interface DsProviderProps {\n\ttheme: DsTheme;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\nexport function DsProvider({ theme, children, className }: DsProviderProps) {\n\treturn (\n\t\t<div className={cn(\"tot-ds-root\", className)} data-theme={theme}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n",".wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--ds-space-3);\n padding: var(--ds-space-8) var(--ds-space-4);\n color: var(--ds-color-text-muted);\n}\n\n.message {\n margin: 0;\n font-size: var(--ds-font-size-sm);\n text-align: center;\n}\n","import type React from \"react\";\nimport styles from \"./EmptyState.module.css\";\n\nexport interface EmptyStateProps {\n\tmessage: string;\n\taction?: React.ReactNode;\n\t\"data-testid\"?: string;\n}\n\nexport function EmptyState({\n\tmessage,\n\taction,\n\t\"data-testid\": testId,\n}: EmptyStateProps): React.ReactElement {\n\treturn (\n\t\t<div className={styles.wrapper} data-testid={testId}>\n\t\t\t<p className={styles.message}>{message}</p>\n\t\t\t{action}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .errorContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n padding: var(--ds-space-6);\n }\n\n .errorCard {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--ds-space-3);\n max-width: 480px;\n text-align: center;\n }\n\n .icon {\n color: var(--ds-color-error);\n flex-shrink: 0;\n }\n\n .title {\n font-family: var(--ds-font-family);\n font-size: var(--ds-font-size-xl);\n font-weight: var(--ds-font-weight-bold);\n color: var(--ds-color-text);\n margin: 0;\n }\n\n .message {\n font-size: var(--ds-font-size-base);\n color: var(--ds-color-text-muted);\n line-height: var(--ds-leading-normal);\n margin: 0;\n }\n\n .details {\n width: 100%;\n text-align: left;\n font-size: var(--ds-font-size-sm);\n color: var(--ds-color-text-muted);\n\n summary {\n cursor: pointer;\n font-weight: var(--ds-font-weight-medium);\n padding: var(--ds-space-1) 0;\n\n &:focus-visible {\n outline: 2px solid var(--ds-color-primary);\n outline-offset: 2px;\n }\n }\n }\n\n .stack {\n margin-top: var(--ds-space-2);\n padding: var(--ds-space-3);\n background-color: var(--ds-color-gray-50);\n border: 1px solid var(--ds-color-border);\n border-radius: var(--ds-radius-md);\n font-size: var(--ds-font-size-xs);\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-all;\n color: var(--ds-color-error);\n }\n\n .retryButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--ds-space-2) var(--ds-space-6);\n background-color: var(--ds-color-primary);\n color: var(--ds-color-text-on-primary);\n font-family: var(--ds-font-family);\n font-size: var(--ds-font-size-base);\n font-weight: var(--ds-font-weight-semibold);\n border: none;\n border-radius: var(--ds-radius-md);\n cursor: pointer;\n transition: background-color var(--ds-duration-fast) var(--ds-ease-out);\n margin-top: var(--ds-space-2);\n\n &:hover {\n background-color: var(--ds-color-primary-900);\n }\n\n &:focus-visible {\n outline: 2px solid var(--ds-color-primary);\n outline-offset: 2px;\n }\n }\n}\n","/// <reference types=\"node\" />\nimport type { ErrorInfo, ReactNode } from \"react\";\nimport { Component } from \"react\";\nimport styles from \"./ErrorBoundary.module.css\";\n\nexport interface ErrorBoundaryProps {\n\tchildren: ReactNode;\n\tfallback?: ReactNode | ((error: Error, retry: () => void) => ReactNode);\n\tonError?: (error: Error, info: ErrorInfo) => void;\n}\n\ninterface ErrorBoundaryState {\n\thasError: boolean;\n\terror: Error | null;\n}\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n\tconstructor(props: ErrorBoundaryProps) {\n\t\tsuper(props);\n\t\tthis.state = { hasError: false, error: null };\n\t}\n\n\tstatic getDerivedStateFromError(error: Error): ErrorBoundaryState {\n\t\treturn { hasError: true, error };\n\t}\n\n\tcomponentDidCatch(error: Error, info: ErrorInfo) {\n\t\tthis.props.onError?.(error, info);\n\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\tconsole.error(\"[ErrorBoundary] Uncaught error:\", error, info);\n\t\t}\n\t}\n\n\thandleRetry = () => {\n\t\tthis.setState({ hasError: false, error: null });\n\t};\n\n\trender() {\n\t\tconst { hasError, error } = this.state;\n\t\tconst { children, fallback } = this.props;\n\n\t\tif (hasError && error) {\n\t\t\tif (typeof fallback === \"function\") {\n\t\t\t\treturn fallback(error, this.handleRetry);\n\t\t\t}\n\n\t\t\tif (fallback) {\n\t\t\t\treturn fallback;\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t<div role=\"alert\" className={styles.errorContainer}>\n\t\t\t\t\t<div className={styles.errorCard}>\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"48\"\n\t\t\t\t\t\t\theight=\"48\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\tclassName={styles.icon}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\n\t\t\t\t\t\t\t<path d=\"M12 9v4\" />\n\t\t\t\t\t\t\t<path d=\"M12 17h.01\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t<h2 className={styles.title}>Algo salió mal</h2>\n\t\t\t\t\t\t<p className={styles.message}>\n\t\t\t\t\t\t\tHa ocurrido un error inesperado. Por favor intenta de nuevo.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{process.env.NODE_ENV !== \"production\" && (\n\t\t\t\t\t\t\t<details className={styles.details}>\n\t\t\t\t\t\t\t\t<summary>Detalle del error</summary>\n\t\t\t\t\t\t\t\t<pre className={styles.stack}>{error.message}</pre>\n\t\t\t\t\t\t\t</details>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<button type=\"button\" className={styles.retryButton} onClick={this.handleRetry}>\n\t\t\t\t\t\t\tIntentar de nuevo\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn children;\n\t}\n}\n","@layer ds-components {\n .field {\n display: flex;\n flex-direction: column;\n gap: var(--ds-space-1);\n }\n\n .label {\n font-family: var(--ds-font-family);\n font-size: var(--ds-font-size-sm);\n font-weight: var(--ds-font-weight-semibold);\n line-height: var(--ds-leading-snug);\n color: var(--ds-color-text);\n }\n\n .required {\n color: var(--ds-color-error);\n }\n\n .description {\n font-size: var(--ds-font-size-sm);\n color: var(--ds-color-text-muted);\n line-height: var(--ds-leading-normal);\n margin-top: calc(-1 * var(--ds-space-1));\n }\n\n .error {\n font-size: var(--ds-font-size-xs);\n color: var(--ds-color-error);\n font-weight: var(--ds-font-weight-medium);\n line-height: var(--ds-leading-snug);\n display: flex;\n align-items: center;\n gap: var(--ds-space-1);\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./FormField.module.css\";\n\nexport interface FormFieldProps {\n\tlabel: string;\n\thtmlFor?: string;\n\terror?: string;\n\tdescription?: string;\n\trequired?: boolean;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\nexport function FormField({\n\tlabel,\n\thtmlFor,\n\terror,\n\tdescription,\n\trequired = false,\n\tchildren,\n\tclassName,\n}: FormFieldProps) {\n\tconst errorId = htmlFor ? `${htmlFor}-error` : undefined;\n\tconst descriptionId = htmlFor ? `${htmlFor}-description` : undefined;\n\n\treturn (\n\t\t<div className={[styles.field, className].filter(Boolean).join(\" \")}>\n\t\t\t<label htmlFor={htmlFor} className={styles.label}>\n\t\t\t\t{label}\n\t\t\t\t{required && (\n\t\t\t\t\t<span className={styles.required} aria-hidden=\"true\">\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t*\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</label>\n\n\t\t\t{description && (\n\t\t\t\t<p id={descriptionId} className={styles.description}>\n\t\t\t\t\t{description}\n\t\t\t\t</p>\n\t\t\t)}\n\n\t\t\t{children}\n\n\t\t\t{error && (\n\t\t\t\t<p id={errorId} className={styles.error} role=\"alert\" aria-live=\"polite\">\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.wrapper {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--ds-space-1);\n\t\tflex: 1;\n\t}\n\n\t.error {\n\t\tfont-size: var(--ds-font-size-xs);\n\t\tcolor: var(--ds-color-error);\n\t}\n}\n","import { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport styles from \"./GoogleSignInButton.module.css\";\n\nexport interface GoogleSignInButtonProps {\n\tonSignIn: () => void;\n\tisPending?: boolean;\n\tisError?: boolean;\n\terror?: Error | null;\n}\n\nexport function GoogleSignInButton({\n\tonSignIn,\n\tisPending = false,\n\tisError = false,\n\terror,\n}: GoogleSignInButtonProps) {\n\treturn (\n\t\t<div className={styles.wrapper}>\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"small\"\n\t\t\t\tfullWidth\n\t\t\t\tonClick={onSignIn}\n\t\t\t\tloading={isPending}\n\t\t\t\taria-label=\"Continuar con Google\"\n\t\t\t>\n\t\t\t\t<Icon name=\"google-filled\" size={18} aria-hidden=\"true\" />\n\t\t\t\tGoogle\n\t\t\t</Button>\n\t\t\t{isError && (\n\t\t\t\t<span role=\"alert\" className={styles.error}>\n\t\t\t\t\t{error instanceof Error ? error.message : \"Error al iniciar sesión con Google\"}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .groupedButtons {\n display: flex;\n gap: 0;\n overflow: hidden;\n margin: 0;\n padding: 0;\n border: none;\n width: fit-content;\n\n &[data-full-width] {\n width: 100%;\n overflow-x: auto;\n\n & .button {\n flex: 1;\n flex-shrink: 0;\n min-width: max-content;\n }\n }\n }\n\n .button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-xs);\n border: 1px solid var(--color-neutral-300);\n background-color: var(--ds-color-white);\n color: var(--color-neutral-500);\n font-family: inherit;\n font-weight: 500;\n cursor: pointer;\n white-space: nowrap;\n transition:\n background-color var(--duration-fast) var(--ease-out),\n color var(--duration-fast) var(--ease-out),\n border-color var(--duration-fast) var(--ease-out);\n\n &[data-size=\"small\"] {\n padding: var(--spacing-xs) var(--spacing-md);\n font-size: var(--text-sm);\n min-height: 2.75rem;\n }\n\n &[data-size=\"medium\"] {\n padding: var(--spacing-sm) var(--spacing-lg);\n font-size: var(--text-sm);\n min-height: 3.75rem;\n }\n\n &[data-size=\"large\"] {\n padding: var(--spacing-md) var(--spacing-xl);\n font-size: var(--text-base);\n min-height: 5rem;\n }\n\n &[data-position=\"standalone\"] {\n border-radius: var(--radius-xl);\n }\n\n &[data-position=\"left\"] {\n border-radius: var(--radius-xl) 0 0 var(--radius-xl);\n }\n\n &[data-position=\"center\"] {\n border-radius: 0;\n border-left-width: 0;\n }\n\n &[data-position=\"right\"] {\n border-radius: 0 var(--radius-xl) var(--radius-xl) 0;\n border-left-width: 0;\n }\n\n &[data-selected] {\n background-color: var(--color-secondary);\n color: var(--ds-color-white);\n border-color: var(--color-secondary);\n }\n\n &:hover:not(:disabled):not([data-selected]) {\n background-color: var(--color-neutral-100);\n color: var(--color-secondary);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n &:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: -2px;\n position: relative;\n z-index: 1;\n }\n }\n}\n","import type { HTMLAttributes } from \"react\";\nimport { useState } from \"react\";\nimport type { IconName } from \"../Icon\";\nimport { Icon } from \"../Icon\";\nimport styles from \"./GroupedButtons.module.css\";\n\nexport type GroupedButtonSize = \"small\" | \"medium\" | \"large\";\nexport type GroupPosition = \"standalone\" | \"left\" | \"center\" | \"right\";\n\nexport interface GroupedButtonOption {\n\tvalue: string | number;\n\tlabel: string;\n\tdisabled?: boolean;\n\ticon?: IconName;\n}\n\nexport interface GroupedButtonsProps extends Omit<HTMLAttributes<HTMLFieldSetElement>, \"onChange\"> {\n\tlabel: string;\n\toptions: GroupedButtonOption[];\n\tselectedButton?: string | number;\n\tsize?: GroupedButtonSize;\n\tfullWidth?: boolean;\n\tdisabled?: boolean;\n\tonChange?: (value: string | number) => void;\n}\n\nfunction getGroupPosition(index: number, total: number): GroupPosition {\n\tif (total === 1) return \"standalone\";\n\tif (index === 0) return \"left\";\n\tif (index === total - 1) return \"right\";\n\treturn \"center\";\n}\n\nexport function GroupedButtons({\n\tlabel,\n\toptions,\n\tselectedButton,\n\tsize = \"medium\",\n\tfullWidth = false,\n\tdisabled = false,\n\tonChange,\n\tclassName,\n\t...props\n}: GroupedButtonsProps) {\n\tconst [internalSelected, setInternalSelected] = useState<string | number | undefined>(\n\t\t() => options[0]?.value,\n\t);\n\n\tconst isControlled = selectedButton !== undefined;\n\tconst current = isControlled ? selectedButton : internalSelected;\n\n\tconst handleClick = (value: string | number) => {\n\t\tconst option = options.find((o) => o.value === value);\n\t\tif (disabled || option?.disabled) return;\n\t\tif (!isControlled) setInternalSelected(value);\n\t\tonChange?.(value);\n\t};\n\n\treturn (\n\t\t<fieldset\n\t\t\taria-label={label}\n\t\t\tclassName={[styles.groupedButtons, className].filter(Boolean).join(\" \")}\n\t\t\tdisabled={disabled}\n\t\t\tdata-full-width={fullWidth ? \"\" : undefined}\n\t\t\t{...props}\n\t\t>\n\t\t\t{options.map((option, i) => (\n\t\t\t\t<button\n\t\t\t\t\tkey={option.value}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.button}\n\t\t\t\t\tdata-size={size}\n\t\t\t\t\tdata-position={getGroupPosition(i, options.length)}\n\t\t\t\t\tdata-selected={current === option.value ? \"\" : undefined}\n\t\t\t\t\tdisabled={disabled || option.disabled}\n\t\t\t\t\tonClick={() => handleClick(option.value)}\n\t\t\t\t>\n\t\t\t\t\t{option.icon && <Icon name={option.icon} size={16} />}\n\t\t\t\t\t{option.label}\n\t\t\t\t</button>\n\t\t\t))}\n\t\t</fieldset>\n\t);\n}\n","@layer ds-components {\n\t.header {\n\t\tdisplay: grid;\n\t\tgrid-auto-flow: column;\n\t\talign-items: center;\n\t\tgap: var(--spacing-sm);\n\t\tpadding: var(--spacing-sm) var(--spacing-2xl);\n\t\tborder: 1px solid var(--color-neutral-200);\n\t\tborder-radius: var(--radius-lg);\n\t\tbackground-color: var(--color-neutral-100);\n\n\t\t&[data-space-between] {\n\t\t\tjustify-content: space-between;\n\t\t}\n\t}\n\n\t.item {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\twidth: auto;\n\t\tpadding: 0 var(--spacing-md);\n\t}\n\n\t.title {\n\t\tfont-size: var(--text-base);\n\t\tfont-weight: 800;\n\t\tcolor: var(--color-secondary);\n\t\tmargin: 0;\n\t}\n\n\t.description {\n\t\tfont-size: 0.625rem;\n\t\tline-height: 1;\n\t\tfont-weight: 400;\n\t\tcolor: var(--color-neutral-500);\n\t\tmargin: 0;\n\t}\n}\n","import type { HTMLAttributes } from \"react\";\nimport styles from \"./Header.module.css\";\n\nexport interface HeaderItem {\n\ttitle: string;\n\tdescription?: string;\n}\n\nexport interface HeaderProps extends HTMLAttributes<HTMLElement> {\n\theaders?: HeaderItem[];\n\tspaceBetween?: boolean;\n}\n\nexport function Header({ headers = [], spaceBetween = false, className, ...props }: HeaderProps) {\n\treturn (\n\t\t<section\n\t\t\tclassName={[styles.header, className].filter(Boolean).join(\" \")}\n\t\t\tdata-space-between={spaceBetween ? \"\" : undefined}\n\t\t\t{...props}\n\t\t>\n\t\t\t{headers.map((header) => (\n\t\t\t\t<div key={header.title} className={styles.item}>\n\t\t\t\t\t<p className={styles.title}>{header.title}</p>\n\t\t\t\t\t{header.description && <p className={styles.description}>{header.description}</p>}\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</section>\n\t);\n}\n","import { useMemo } from \"react\";\nimport { DropdownButton, type DropdownMenuItemType } from \"../DropdownButton\";\n\nexport interface LanguageOption {\n\tvalue: string;\n\tlabel: string;\n}\n\nexport interface LanguageSelectorProps {\n\tvalue: string;\n\toptions: LanguageOption[];\n\tonChange: (value: string) => void;\n}\n\nexport function LanguageSelector({ value, options, onChange }: LanguageSelectorProps) {\n\tconst menuItems = useMemo<DropdownMenuItemType[]>(\n\t\t() => options.map(({ value: v, label }) => ({ value: v, label })),\n\t\t[options],\n\t);\n\n\tconst currentLabel = options.find((o) => o.value === value)?.label ?? value;\n\n\treturn (\n\t\t<DropdownButton\n\t\t\ttext={currentLabel}\n\t\t\tmenuItems={menuItems}\n\t\t\tsize=\"small\"\n\t\t\tvariant=\"ghost\"\n\t\t\tonSelect={(item) => onChange(item.value)}\n\t\t/>\n\t);\n}\n","@layer ds-components {\n .logo {\n --logo-icon-max-size: 100px;\n --logo-complete-max-width: 400px;\n --logo-complete-max-height: 100px;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin: 0;\n padding: 0;\n line-height: 0;\n vertical-align: middle;\n transition: opacity var(--duration-fast) ease-in-out;\n\n &:hover {\n opacity: 0.9;\n }\n\n &[data-mode=\"icon\"] {\n max-width: var(--logo-icon-max-size);\n max-height: var(--logo-icon-max-size);\n }\n\n &[data-mode=\"complete\"] {\n max-width: var(--logo-complete-max-width);\n max-height: var(--logo-complete-max-height);\n }\n }\n}\n","import type { HTMLAttributes } from \"react\";\nimport styles from \"./LogoToteat.module.css\";\nimport iconCreamOrange from \"./svg/toteat-isotipo-crema-naranja.svg?raw\";\nimport iconBlackCream from \"./svg/toteat-isotipo-crema-negro.svg?raw\";\nimport iconOriginal from \"./svg/toteat-isotipo-original.svg?raw\";\nimport logoCreamOrange from \"./svg/toteat-logo-crema-naranja.svg?raw\";\nimport logoBlackCream from \"./svg/toteat-logo-negro-crema.svg?raw\";\nimport logoOriginal from \"./svg/toteat-logo-original.svg?raw\";\n\nexport type LogoToteatMode = \"icon\" | \"complete\";\nexport type LogoToteatVariant = \"original\" | \"cream-orange\" | \"black-cream\";\n\nexport interface LogoToteatProps extends HTMLAttributes<HTMLSpanElement> {\n\tmode?: LogoToteatMode;\n\tvariant?: LogoToteatVariant;\n\twidth?: number;\n\theight?: number;\n\talt?: string;\n}\n\nfunction escapeAttr(value: string): string {\n\treturn value.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\");\n}\n\nconst LOGO_MAP: Record<LogoToteatVariant, string> = {\n\toriginal: logoOriginal,\n\t\"cream-orange\": logoCreamOrange,\n\t\"black-cream\": logoBlackCream,\n};\n\nconst ICON_MAP: Record<LogoToteatVariant, string> = {\n\toriginal: iconOriginal,\n\t\"cream-orange\": iconCreamOrange,\n\t\"black-cream\": iconBlackCream,\n};\n\nfunction getDimensions(\n\tmode: LogoToteatMode,\n\twidth?: number,\n\theight?: number,\n): { width: number; height: number } {\n\tif (width !== undefined && height !== undefined) return { width, height };\n\tif (mode === \"icon\") {\n\t\tconst size = width ?? height ?? 44;\n\t\treturn { width: size, height: size };\n\t}\n\tif (width !== undefined) return { width, height: Math.round((width / 317) * 80) };\n\tif (height !== undefined) return { width: Math.round((height / 80) * 317), height };\n\treturn { width: 160, height: 40 };\n}\n\nexport function LogoToteat({\n\tmode = \"complete\",\n\tvariant = \"original\",\n\twidth,\n\theight,\n\talt = \"Logo Toteat\",\n\tclassName,\n\t...props\n}: LogoToteatProps) {\n\tconst rawSvg = mode === \"icon\" ? ICON_MAP[variant] : LOGO_MAP[variant];\n\tconst dims = getDimensions(mode, width, height);\n\t// SVG content is bundled package assets, not user input — safe for dangerouslySetInnerHTML\n\tconst modifiedSvg = rawSvg\n\t\t.replace(/width=\"\\d+\"/, `width=\"${dims.width}\"`)\n\t\t.replace(/height=\"\\d+\"/, `height=\"${dims.height}\"`)\n\t\t.replace(/<svg/, `<svg role=\"img\" aria-label=\"${escapeAttr(alt)}\"`);\n\n\treturn (\n\t\t<span\n\t\t\tclassName={[styles.logo, className].filter(Boolean).join(\" \")}\n\t\t\tdata-mode={mode}\n\t\t\tdata-variant={variant}\n\t\t\t{...props}\n\t\t\t// biome-ignore lint/security/noDangerouslySetInnerHtml: SVG is a bundled package asset, not user content\n\t\t\tdangerouslySetInnerHTML={{ __html: modifiedSvg }}\n\t\t/>\n\t);\n}\n","@layer ds-components {\n\t.multiselect {\n\t\tposition: relative;\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-base);\n\t\tcolor: var(--color-text);\n\t}\n\n\t/* ── Trigger ── */\n\t.trigger {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\talign-items: center;\n\t\tgap: var(--spacing-xs);\n\t\tmin-height: 40px;\n\t\tpadding: var(--spacing-xs) var(--spacing-sm);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: 1.5px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t\tcursor: pointer;\n\t\ttransition:\n\t\t\tborder-color var(--duration-fast) var(--ease-out),\n\t\t\tbox-shadow var(--duration-fast) var(--ease-out);\n\n\t\t&:hover {\n\t\t\tborder-color: var(--color-neutral-400);\n\t\t}\n\t}\n\n\t.multiselect[data-error] .trigger {\n\t\tborder-color: var(--color-error);\n\t}\n\n\t.multiselect[data-disabled] .trigger {\n\t\tbackground-color: var(--color-neutral-50);\n\t\tcolor: var(--color-neutral-400);\n\t\tcursor: not-allowed;\n\t\tpointer-events: none;\n\t}\n\n\t/* ── Placeholder ── */\n\t.placeholder {\n\t\tcolor: var(--color-neutral-400);\n\t\tline-height: var(--leading-normal);\n\t\tpadding: var(--spacing-xs) 0;\n\t}\n\n\t/* ── Tags ── */\n\t.tag {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: var(--spacing-xs);\n\t\tpadding: 2px var(--spacing-sm);\n\t\tbackground-color: var(--color-primary-100);\n\t\tcolor: var(--color-primary-900);\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-medium);\n\t\tborder-radius: var(--radius-full);\n\t\tline-height: var(--leading-tight);\n\t\twhite-space: nowrap;\n\t}\n\n\t.tagRemove {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 14px;\n\t\theight: 14px;\n\t\tpadding: 0;\n\t\tbackground: none;\n\t\tborder: none;\n\t\tborder-radius: var(--radius-circle);\n\t\tcolor: inherit;\n\t\tcursor: pointer;\n\t\tfont-size: var(--text-base);\n\t\tline-height: 1;\n\t\topacity: 0.7;\n\t\ttransition: opacity var(--duration-fast) var(--ease-out);\n\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: 2px solid var(--color-primary);\n\t\t\toutline-offset: 1px;\n\t\t}\n\t}\n\n\t/* ── Dropdown ── */\n\t.dropdown {\n\t\tposition: absolute;\n\t\ttop: calc(100% + var(--spacing-xs));\n\t\tleft: 0;\n\t\tright: 0;\n\t\tz-index: var(--z-dropdown);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: 1.5px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t\tbox-shadow: var(--shadow-lg);\n\t\toverflow: hidden;\n\t\tmax-height: 240px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t}\n\n\t/* ── Search input ── */\n\t.search {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-text);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: none;\n\t\tborder-bottom: 1px solid var(--color-border);\n\t\toutline: none;\n\n\t\t&::placeholder {\n\t\t\tcolor: var(--color-neutral-400);\n\t\t}\n\t}\n\n\t/* ── Option buttons ── */\n\t.option {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\ttext-align: left;\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-text);\n\t\tbackground: none;\n\t\tborder: none;\n\t\tcursor: pointer;\n\t\ttransition: background-color var(--duration-fast) var(--ease-out);\n\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-neutral-100);\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: none;\n\t\t\tbackground-color: var(--color-primary-50);\n\t\t}\n\t}\n\n\t/* ── No results ── */\n\t.noResults {\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-text-muted);\n\t\ttext-align: center;\n\t}\n}\n","import { type ReactElement, useCallback, useEffect, useRef, useState } from \"react\";\nimport styles from \"./Multiselect.module.css\";\n\nexport interface MultiselectOption {\n\tvalue: string;\n\tlabel: string;\n}\n\nexport interface MultiselectProps {\n\toptions: MultiselectOption[];\n\tvalue: string[];\n\tonChange: (values: string[]) => void;\n\tplaceholder?: string;\n\tsearchPlaceholder?: string;\n\tnoResultsText?: string;\n\tremoveLabel?: string;\n\tdisabled?: boolean;\n\terror?: boolean;\n}\n\nexport function Multiselect({\n\toptions,\n\tvalue,\n\tonChange,\n\tplaceholder = \"Seleccionar...\",\n\tsearchPlaceholder = \"Buscar...\",\n\tnoResultsText = \"Sin resultados\",\n\tremoveLabel = \"Eliminar\",\n\tdisabled,\n\terror,\n}: MultiselectProps): ReactElement {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [search, setSearch] = useState(\"\");\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst triggerRef = useRef<HTMLButtonElement>(null);\n\n\tconst selectedOptions = options.filter((o) => value.includes(o.value));\n\tconst filteredOptions = options.filter(\n\t\t(o) => !value.includes(o.value) && o.label.toLowerCase().includes(search.toLowerCase()),\n\t);\n\n\tconst closeDropdown = useCallback(() => {\n\t\tsetIsOpen(false);\n\t\ttriggerRef.current?.focus();\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst handler = (e: MouseEvent) => {\n\t\t\tif (!containerRef.current?.contains(e.target as Node)) closeDropdown();\n\t\t};\n\t\tdocument.addEventListener(\"mousedown\", handler);\n\t\treturn () => document.removeEventListener(\"mousedown\", handler);\n\t}, [isOpen, closeDropdown]);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst handler = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") closeDropdown();\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", handler);\n\t\treturn () => document.removeEventListener(\"keydown\", handler);\n\t}, [isOpen, closeDropdown]);\n\n\tconst addValue = (v: string) => onChange([...value, v]);\n\tconst removeValue = (v: string) => onChange(value.filter((x) => x !== v));\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={styles.multiselect}\n\t\t\tdata-error={error || undefined}\n\t\t\tdata-disabled={disabled || undefined}\n\t\t>\n\t\t\t<button\n\t\t\t\tref={triggerRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.trigger}\n\t\t\t\tonClick={() => !disabled && setIsOpen((prev) => !prev)}\n\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\tdisabled={disabled}\n\t\t\t>\n\t\t\t\t{selectedOptions.length === 0 && <span className={styles.placeholder}>{placeholder}</span>}\n\t\t\t\t{selectedOptions.map((opt) => (\n\t\t\t\t\t<span key={opt.value} className={styles.tag}>\n\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName={styles.tagRemove}\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tremoveValue(opt.value);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-label={`${removeLabel} ${opt.label}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t×\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</span>\n\t\t\t\t))}\n\t\t\t</button>\n\t\t\t{isOpen && (\n\t\t\t\t<div className={styles.dropdown} role=\"listbox\" aria-multiselectable=\"true\">\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclassName={styles.search}\n\t\t\t\t\t\tplaceholder={searchPlaceholder}\n\t\t\t\t\t\taria-label={searchPlaceholder}\n\t\t\t\t\t\tvalue={search}\n\t\t\t\t\t\tonChange={(e) => setSearch(e.target.value)}\n\t\t\t\t\t\t// biome-ignore lint/a11y/noAutofocus: search input needs focus when dropdown opens\n\t\t\t\t\t\tautoFocus\n\t\t\t\t\t/>\n\t\t\t\t\t{filteredOptions.map((opt) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={opt.value}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\taria-selected={value.includes(opt.value)}\n\t\t\t\t\t\t\tclassName={styles.option}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\taddValue(opt.value);\n\t\t\t\t\t\t\t\tsetSearch(\"\");\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t\t{filteredOptions.length === 0 && <div className={styles.noResults}>{noResultsText}</div>}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ang-components {\n .navbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: var(--ds-ang-navbar-height);\n min-height: var(--ds-ang-navbar-height);\n max-height: var(--ds-ang-navbar-height);\n background-color: var(--ds-ang-secondary);\n position: relative;\n z-index: 10;\n padding: 0;\n user-select: none;\n }\n\n .navLeft {\n position: absolute;\n left: 0;\n top: 0;\n height: var(--ds-ang-navbar-height);\n display: flex;\n align-items: center;\n gap: var(--ds-ang-space-4);\n padding-left: var(--ds-ang-space-8);\n }\n\n .menuButton {\n display: flex;\n align-items: center;\n justify-content: center;\n background: none;\n border: none;\n cursor: pointer;\n padding: var(--ds-ang-space-8);\n color: var(--ds-ang-neutral-0);\n min-width: var(--ds-ang-min-touch-target);\n min-height: var(--ds-ang-min-touch-target);\n }\n\n @media (min-width: 781px) {\n .menuButton {\n display: none;\n }\n }\n\n .menuButton:focus-visible {\n outline: var(--ds-ang-focus-width) solid var(--ds-ang-focus-color);\n outline-offset: var(--ds-ang-focus-offset);\n border-radius: var(--ds-ang-radius-sm);\n }\n\n .menuIcon {\n display: block;\n width: 18px;\n height: 2px;\n background-color: var(--ds-ang-neutral-0);\n position: relative;\n }\n\n .menuIcon::before,\n .menuIcon::after {\n content: \"\";\n display: block;\n width: 18px;\n height: 2px;\n background-color: var(--ds-ang-neutral-0);\n position: absolute;\n left: 0;\n }\n\n .menuIcon::before {\n top: -6px;\n }\n\n .menuIcon::after {\n top: 6px;\n }\n\n .spinner {\n position: absolute;\n left: 55px;\n top: 10px;\n }\n\n .navCenter {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--ds-ang-space-8);\n height: var(--ds-ang-navbar-height);\n padding: 0 50px;\n flex: 1;\n }\n\n .logoBrand {\n display: flex;\n align-items: center;\n cursor: pointer;\n height: var(--ds-ang-navbar-height);\n background: none;\n border: none;\n padding: 0;\n }\n\n .logoBrand:focus-visible {\n outline: var(--ds-ang-focus-width) solid var(--ds-ang-focus-color);\n outline-offset: var(--ds-ang-focus-offset);\n border-radius: var(--ds-ang-radius-sm);\n }\n\n .logo {\n width: 83px;\n height: 21px;\n }\n\n @media (max-width: 780px) {\n .logo {\n width: 78px;\n height: 16px;\n }\n }\n\n .restaurantName {\n font-family: var(--ds-ang-font-family);\n font-size: var(--ds-ang-font-size-menu);\n color: var(--ds-ang-neutral-0);\n cursor: pointer;\n }\n\n .navRight {\n position: absolute;\n right: 0;\n top: 0;\n height: var(--ds-ang-navbar-height);\n display: flex;\n align-items: center;\n padding-right: var(--ds-ang-space-8);\n }\n\n .rightButton {\n display: flex;\n align-items: center;\n justify-content: center;\n background: none;\n border: none;\n cursor: pointer;\n padding: var(--ds-ang-space-8);\n min-width: var(--ds-ang-min-touch-target);\n min-height: var(--ds-ang-min-touch-target);\n }\n\n .rightButton:focus-visible {\n outline: var(--ds-ang-focus-width) solid var(--ds-ang-focus-color);\n outline-offset: var(--ds-ang-focus-offset);\n border-radius: var(--ds-ang-radius-sm);\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./NavBar.module.css\";\n\nexport interface NavBarProps {\n\trestaurantName: string;\n\tonMenuToggle: () => void;\n\tonLogoClick: () => void;\n\tonRightToggle: () => void;\n\tisLoading?: boolean;\n\tisPinLocked?: boolean;\n\trightSlot?: ReactNode;\n}\n\nexport function NavBar({\n\trestaurantName,\n\tonMenuToggle,\n\tonLogoClick,\n\tonRightToggle,\n\tisLoading = false,\n\tisPinLocked = false,\n\trightSlot,\n}: NavBarProps) {\n\tif (isPinLocked) return null;\n\n\treturn (\n\t\t<header className={styles.navbar}>\n\t\t\t<div className={styles.navLeft}>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.menuButton}\n\t\t\t\t\tonClick={onMenuToggle}\n\t\t\t\t\taria-label=\"Abrir menú\"\n\t\t\t\t>\n\t\t\t\t\t<span className={styles.menuIcon} aria-hidden=\"true\" />\n\t\t\t\t</button>\n\t\t\t\t{isLoading && (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc=\"/assets/angular/dsSpinner.svg\"\n\t\t\t\t\t\talt=\"Cargando\"\n\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\theight={20}\n\t\t\t\t\t\tclassName={styles.spinner}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t<div className={styles.navCenter}>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.logoBrand}\n\t\t\t\t\tonClick={onLogoClick}\n\t\t\t\t\taria-label=\"Ir al inicio\"\n\t\t\t\t>\n\t\t\t\t\t<img src=\"/assets/angular/dsLogo.svg\" alt=\"Toteat\" className={styles.logo} />\n\t\t\t\t</button>\n\t\t\t\t<span className={styles.restaurantName}>{restaurantName}</span>\n\t\t\t</div>\n\n\t\t\t<div className={styles.navRight}>\n\t\t\t\t{rightSlot}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.rightButton}\n\t\t\t\t\tonClick={onRightToggle}\n\t\t\t\t\taria-label=\"Pantalla completa\"\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc=\"/assets/angular/dsIconLogo.svg\"\n\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\twidth={24}\n\t\t\t\t\t\theight={24}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</header>\n\t);\n}\n","@layer ds-components {\n .overlay {\n position: fixed;\n inset: 0;\n display: flex;\n width: 100vw;\n height: 100vh;\n padding: clamp(1.5rem, 4vw, 3rem);\n z-index: var(--overlay-z-index, 1200);\n justify-content: center;\n animation: overlay-fade-in 200ms ease-in-out;\n\n &[data-blur] {\n backdrop-filter: blur(0.75rem);\n }\n\n &[data-placement=\"top\"] { align-items: flex-start; }\n &[data-placement=\"center\"] { align-items: center; }\n &[data-placement=\"bottom\"] { align-items: flex-end; }\n }\n\n .backdrop {\n position: absolute;\n inset: 0;\n background-color: color-mix(in srgb, var(--color-secondary) 60%, transparent);\n border: none;\n cursor: default;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .content {\n position: relative;\n z-index: 1;\n width: min(100%, 64rem);\n display: flex;\n justify-content: center;\n pointer-events: none;\n\n & > * {\n pointer-events: auto;\n width: 100%;\n }\n }\n\n @keyframes overlay-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .overlay { animation: none; }\n }\n}\n","import type { ReactNode } from \"react\";\nimport { useCallback, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport styles from \"./Overlay.module.css\";\n\nexport type OverlayPlacement = \"top\" | \"center\" | \"bottom\";\n\nexport interface OverlayProps {\n\tvisible?: boolean;\n\tonClose: () => void;\n\tchildren: ReactNode;\n\tdismissible?: boolean;\n\tcloseOnBackdrop?: boolean;\n\tcloseOnEsc?: boolean;\n\tlockScroll?: boolean;\n\tblur?: boolean;\n\tplacement?: OverlayPlacement;\n\tzIndex?: number;\n\trole?: \"presentation\" | \"dialog\";\n\t\"aria-label\"?: string;\n\tclassName?: string;\n\t\"data-testid\"?: string;\n}\n\nexport function Overlay({\n\tvisible = false,\n\tonClose,\n\tchildren,\n\tdismissible = true,\n\tcloseOnBackdrop = true,\n\tcloseOnEsc = true,\n\tlockScroll = true,\n\tblur = false,\n\tplacement = \"center\",\n\tzIndex = 1200,\n\trole = \"presentation\",\n\t\"aria-label\": ariaLabel,\n\tclassName,\n\t\"data-testid\": dataTestId,\n}: OverlayProps) {\n\tconst handleClose = useCallback(() => {\n\t\tif (dismissible) onClose();\n\t}, [dismissible, onClose]);\n\n\tuseEffect(() => {\n\t\tif (!visible || !lockScroll) return;\n\t\tdocument.body.style.overflow = \"hidden\";\n\t\treturn () => {\n\t\t\tdocument.body.style.overflow = \"\";\n\t\t};\n\t}, [visible, lockScroll]);\n\n\tuseEffect(() => {\n\t\tif (!visible || !closeOnEsc) return;\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") handleClose();\n\t\t};\n\t\twindow.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => window.removeEventListener(\"keydown\", handleKeyDown);\n\t}, [visible, closeOnEsc, handleClose]);\n\n\tif (!visible || typeof document === \"undefined\") return null;\n\n\treturn createPortal(\n\t\t<div\n\t\t\tdata-testid={dataTestId}\n\t\t\tclassName={[styles.overlay, className].filter(Boolean).join(\" \")}\n\t\t\tdata-blur={blur ? \"\" : undefined}\n\t\t\tdata-placement={placement}\n\t\t\tstyle={{ \"--overlay-z-index\": String(zIndex) } as React.CSSProperties}\n\t\t\trole={role}\n\t\t\taria-label={ariaLabel}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.backdrop}\n\t\t\t\tdata-backdrop=\"\"\n\t\t\t\tonClick={closeOnBackdrop ? handleClose : undefined}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\ttabIndex={-1}\n\t\t\t/>\n\t\t\t<div className={styles.content}>{children}</div>\n\t\t</div>,\n\t\tdocument.body,\n\t);\n}\n","@layer ds-components {\n .overlayMessage {\n background-color: var(--ds-color-white);\n border-radius: var(--radius-xl);\n padding: clamp(1.5rem, 4vw, 2.75rem);\n box-shadow: 0 35px 100px rgba(0, 0, 0, 0.2);\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n width: 100%;\n max-width: var(--om-max-width, 400px);\n\n &[data-standalone] {\n box-shadow: none;\n border: 1px solid var(--color-neutral-200);\n min-height: 16.625rem;\n }\n }\n\n .header {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n gap: var(--spacing-md);\n position: relative;\n padding-inline: var(--spacing-sm);\n }\n\n .iconWrap {\n width: 3.5rem;\n height: 3.5rem;\n display: grid;\n place-items: center;\n }\n\n .iconColor {\n display: contents;\n color: var(--om-icon-color);\n }\n\n .headline {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-md);\n align-items: center;\n }\n\n .eyebrow {\n font-size: var(--text-xs);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-neutral-400);\n font-weight: 600;\n margin: 0;\n }\n\n .title {\n font-size: clamp(var(--text-lg), 2vw, var(--text-xl));\n line-height: 1.2;\n font-weight: 600;\n color: var(--color-secondary);\n margin: var(--spacing-xl) 0 0;\n }\n\n .closeBtn {\n width: 2.5rem;\n height: 2.5rem;\n border-radius: var(--radius-circle);\n border: 1px solid transparent;\n background: transparent;\n color: var(--color-neutral-400);\n display: grid;\n place-items: center;\n cursor: pointer;\n position: absolute;\n top: 0;\n right: 0;\n padding: 0;\n transition:\n border-color var(--duration-fast) var(--ease-out),\n color var(--duration-fast) var(--ease-out);\n\n &:hover {\n color: var(--color-secondary);\n }\n\n &:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n }\n }\n\n .body {\n font-size: var(--text-base);\n color: var(--color-neutral-500);\n line-height: 1.5;\n text-align: center;\n }\n\n .actions {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-md);\n width: 100%;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { useId } from \"react\";\nimport { Button } from \"../Button\";\nimport type { IconNameType as IconName } from \"../Icon\";\nimport { Icon } from \"../Icon\";\nimport type { OverlayPlacement } from \"../Overlay\";\nimport { Overlay } from \"../Overlay\";\nimport styles from \"./OverlayMessage.module.css\";\n\nexport type OverlayMessageStatus = \"success\" | \"info\" | \"warning\" | \"error\";\n\nconst STATUS_ICON_MAP: Record<OverlayMessageStatus, IconName> = {\n\tsuccess: \"success-outline\",\n\tinfo: \"info-outline\",\n\twarning: \"exclamation-outline\",\n\terror: \"error-outline\",\n};\n\nconst STATUS_COLOR_VAR_MAP: Record<OverlayMessageStatus, string> = {\n\tsuccess: \"var(--ds-color-success)\",\n\tinfo: \"var(--ds-color-info)\",\n\twarning: \"var(--ds-color-warning)\",\n\terror: \"var(--ds-color-primary)\",\n};\n\nexport interface OverlayMessageProps {\n\tvisible?: boolean;\n\tonClose: () => void;\n\ttitle: string;\n\teyebrow?: string;\n\tchildren?: ReactNode;\n\tstatus?: OverlayMessageStatus;\n\ticonName?: IconName;\n\ticonSize?: number;\n\tdismissible?: boolean;\n\tshowCloseButton?: boolean;\n\tcloseButtonLabel?: string;\n\tcloseOnBackdrop?: boolean;\n\tcloseOnEsc?: boolean;\n\tlockScroll?: boolean;\n\tzIndex?: number;\n\tblur?: boolean;\n\tplacement?: OverlayPlacement;\n\t\"aria-label\"?: string;\n\tprimaryButtonLabel?: string;\n\tsecondaryButtonLabel?: string;\n\tloadingPrimary?: boolean;\n\tloadingSecondary?: boolean;\n\tmaxWidth?: number;\n\tstandalone?: boolean;\n\tonPrimaryClick?: () => void;\n\tonSecondaryClick?: () => void;\n\t\"data-testid\"?: string;\n}\n\ninterface CardProps {\n\ttitle: string;\n\teyebrow?: string;\n\tchildren?: ReactNode;\n\tstatus?: OverlayMessageStatus;\n\ticonName?: IconName;\n\ticonSize?: number;\n\tdismissible?: boolean;\n\tshowCloseButton?: boolean;\n\tcloseButtonLabel?: string;\n\tprimaryButtonLabel?: string;\n\tsecondaryButtonLabel?: string;\n\tloadingPrimary?: boolean;\n\tloadingSecondary?: boolean;\n\tmaxWidth?: number;\n\tstandalone?: boolean;\n\tonClose: () => void;\n\tonPrimaryClick?: () => void;\n\tonSecondaryClick?: () => void;\n\t\"data-testid\"?: string;\n}\n\nfunction OverlayMessageCard({\n\ttitle,\n\teyebrow,\n\tchildren,\n\tstatus = \"success\",\n\ticonName,\n\ticonSize = 44,\n\tdismissible = true,\n\tshowCloseButton = true,\n\tcloseButtonLabel = \"Close overlay message\",\n\tprimaryButtonLabel,\n\tsecondaryButtonLabel,\n\tloadingPrimary = false,\n\tloadingSecondary = false,\n\tmaxWidth = 400,\n\tstandalone = false,\n\tonClose,\n\tonPrimaryClick,\n\tonSecondaryClick,\n\t\"data-testid\": dataTestId,\n}: CardProps) {\n\tconst titleId = useId();\n\tconst bodyId = useId();\n\tconst resolvedIcon = iconName ?? STATUS_ICON_MAP[status];\n\tconst iconColor = STATUS_COLOR_VAR_MAP[status];\n\tconst hasBody = Boolean(children);\n\tconst hasActions = Boolean(primaryButtonLabel) || Boolean(secondaryButtonLabel);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.overlayMessage}\n\t\t\tdata-status={status}\n\t\t\tdata-standalone={standalone ? \"\" : undefined}\n\t\t\trole={standalone ? \"region\" : \"alertdialog\"}\n\t\t\taria-modal={standalone ? undefined : \"true\"}\n\t\t\taria-labelledby={titleId}\n\t\t\taria-describedby={hasBody ? bodyId : undefined}\n\t\t\tstyle={{ \"--om-max-width\": `${maxWidth}px` } as React.CSSProperties}\n\t\t\tdata-testid={dataTestId}\n\t\t>\n\t\t\t<header className={styles.header}>\n\t\t\t\t<div className={styles.iconWrap} aria-hidden=\"true\">\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={styles.iconColor}\n\t\t\t\t\t\tstyle={{ \"--om-icon-color\": iconColor } as React.CSSProperties}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name={resolvedIcon} size={iconSize} />\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div className={styles.headline}>\n\t\t\t\t\t{eyebrow && <p className={styles.eyebrow}>{eyebrow}</p>}\n\t\t\t\t\t<h2 className={styles.title} id={titleId}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h2>\n\t\t\t\t</div>\n\t\t\t\t{dismissible && showCloseButton && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.closeBtn}\n\t\t\t\t\t\taria-label={closeButtonLabel}\n\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"close-outline\" size={20} />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</header>\n\t\t\t{hasBody && (\n\t\t\t\t<div className={styles.body} id={bodyId}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{hasActions && (\n\t\t\t\t<footer className={styles.actions}>\n\t\t\t\t\t{secondaryButtonLabel && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tloading={loadingSecondary}\n\t\t\t\t\t\t\tonClick={onSecondaryClick}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{secondaryButtonLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t{primaryButtonLabel && (\n\t\t\t\t\t\t<Button variant=\"primary\" fullWidth loading={loadingPrimary} onClick={onPrimaryClick}>\n\t\t\t\t\t\t\t{primaryButtonLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</footer>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport function OverlayMessage({\n\tvisible = false,\n\tonClose,\n\tdismissible = true,\n\tcloseOnBackdrop = true,\n\tcloseOnEsc = true,\n\tlockScroll = true,\n\tzIndex = 1200,\n\tblur = false,\n\tplacement = \"center\",\n\t\"aria-label\": ariaLabel,\n\tstandalone = false,\n\t\"data-testid\": dataTestId,\n\t...cardProps\n}: OverlayMessageProps) {\n\tif (!visible) return null;\n\n\tif (standalone) {\n\t\treturn (\n\t\t\t<OverlayMessageCard\n\t\t\t\t{...cardProps}\n\t\t\t\tstandalone\n\t\t\t\tdismissible={dismissible}\n\t\t\t\tonClose={onClose}\n\t\t\t\tdata-testid={dataTestId}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Overlay\n\t\t\tvisible={visible}\n\t\t\tonClose={onClose}\n\t\t\tdismissible={dismissible}\n\t\t\tcloseOnBackdrop={closeOnBackdrop}\n\t\t\tcloseOnEsc={closeOnEsc}\n\t\t\tlockScroll={lockScroll}\n\t\t\tzIndex={zIndex}\n\t\t\tblur={blur}\n\t\t\tplacement={placement}\n\t\t\taria-label={ariaLabel}\n\t\t>\n\t\t\t<OverlayMessageCard\n\t\t\t\t{...cardProps}\n\t\t\t\tdismissible={dismissible}\n\t\t\t\tonClose={onClose}\n\t\t\t\tdata-testid={dataTestId}\n\t\t\t/>\n\t\t</Overlay>\n\t);\n}\n","@layer app {\n /*\n * Grid overlap pattern — sits in the same 1/1 cell as siblings.\n * stretch fills the cell without position: absolute, so the logo div\n * (later in DOM) naturally paints on top. No z-index needed.\n */\n .canvas {\n grid-area: 1 / 1;\n align-self: stretch;\n justify-self: stretch;\n width: 100%;\n height: 100%;\n pointer-events: none;\n }\n}\n","import { useEffect, useRef } from \"react\";\nimport styles from \"./BreathingDotsCanvas.module.css\";\n\n// ── Shaders ────────────────────────────────────────────────────────────────\nconst VERT = `#version 300 es\nin vec2 a_pos;\nvoid main() { gl_Position = vec4(a_pos, 0.0, 1.0); }`;\n\n/**\n * Breathing Dots — inspired by the Codrops / Dave Whyte technique.\n *\n * Each dot in a hex-offset grid has its position scaled radially by a smooth\n * square wave whose phase is delayed by distance from the screen centre.\n * An 8-fold cosine term on the distance metric creates the flower-like\n * distortion on the wave-front edge.\n *\n * wave(t, dist) = (2A/π) · atan(sin(2π·t·f) / k)\n * phase = u_time − dist / SPEED\n * scale = wave + BASE_SCALE\n * animPos = origPos × scale\n *\n * We evaluate a 5×5 neighbourhood around each fragment so dots that have\n * scaled away from their home cell are still drawn.\n */\nconst FRAG = `#version 300 es\nprecision highp float;\n\nuniform float u_time;\nuniform vec2 u_res;\nout vec4 fragColor;\n\n#define PI 3.14159265359\n#define CELL 18.0 /* px per grid cell */\n#define RADIUS 2.1 /* dot radius in px */\n#define SPEED 25.0 /* wave propagation */\n#define PERIOD 3.8 /* seconds per cycle */\n#define AMP 0.40 /* wave amplitude */\n#define BASE 1.30 /* resting scale */\n\nfloat swave(float t, float k) {\n return (2.0 * AMP / PI) * atan(sin(2.0 * PI * t / PERIOD) / k);\n}\n\nvoid main() {\n vec2 p = gl_FragCoord.xy;\n vec2 center = u_res * 0.5;\n vec2 gridP = p / CELL;\n\n float alpha = 0.0;\n\n for (int dy = -2; dy <= 2; dy++) {\n for (int dx = -2; dx <= 2; dx++) {\n /* grid cell index of this neighbour */\n vec2 cell = floor(gridP) + vec2(float(dx), float(dy));\n\n /* hex stagger: odd x-columns shift down half a cell */\n float hexY = mod(cell.x, 2.0) * 0.5;\n\n /* dot centre in grid units relative to screen centre */\n vec2 origGU = cell + vec2(0.5, 0.5 + hexY) - center / CELL;\n\n /* distance with 8-fold angular symmetry → petal wave-front */\n float d8 = length(origGU) + 0.5 * cos(8.0 * atan(origGU.y, origGU.x));\n\n /* smooth-square-wave breathing */\n float k = 0.15 + 0.2 * abs(d8) / 72.0;\n float wave = swave(u_time - d8 / SPEED, k);\n float scale = wave + BASE;\n\n /* animated dot centre in pixel space */\n vec2 animPx = origGU * scale * CELL + center;\n\n /* soft circle SDF */\n float dist = length(p - animPx);\n float a = 1.0 - smoothstep(RADIUS - 0.6, RADIUS + 0.6, dist);\n alpha = max(alpha, a);\n }\n }\n\n /* primary colour #ff4235 at low opacity — sits on frosted-glass overlay */\n fragColor = vec4(1.0, 0.259, 0.208, alpha * 0.28);\n}`;\n\n// ── WebGL helpers ──────────────────────────────────────────────────────────\nfunction buildProgram(gl: WebGL2RenderingContext): WebGLProgram {\n\tconst compile = (type: number, src: string) => {\n\t\t// biome-ignore lint/style/noNonNullAssertion: WebGL createShader returns null only on driver failure, which aborts rendering anyway\n\t\tconst s = gl.createShader(type)!;\n\t\tgl.shaderSource(s, src);\n\t\tgl.compileShader(s);\n\t\treturn s;\n\t};\n\t// biome-ignore lint/style/noNonNullAssertion: WebGL createProgram returns null only on driver failure, which aborts rendering anyway\n\tconst prog = gl.createProgram()!;\n\tgl.attachShader(prog, compile(gl.VERTEX_SHADER, VERT));\n\tgl.attachShader(prog, compile(gl.FRAGMENT_SHADER, FRAG));\n\tgl.linkProgram(prog);\n\treturn prog;\n}\n\n// ── Component ──────────────────────────────────────────────────────────────\ninterface BreathingDotsCanvasProps {\n\tactive: boolean;\n}\n\nexport function BreathingDotsCanvas({ active }: BreathingDotsCanvasProps) {\n\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\n\tuseEffect(() => {\n\t\tif (!active || !canvasRef.current) return;\n\t\tif (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) return;\n\n\t\tconst canvas = canvasRef.current;\n\t\tconst gl = canvas.getContext(\"webgl2\", { alpha: true, premultipliedAlpha: false });\n\t\tif (!gl) return;\n\n\t\tconst resize = () => {\n\t\t\tcanvas.width = window.innerWidth;\n\t\t\tcanvas.height = window.innerHeight;\n\t\t\tgl.viewport(0, 0, canvas.width, canvas.height);\n\t\t\tgl.uniform2f(uRes, canvas.width, canvas.height);\n\t\t};\n\n\t\tconst prog = buildProgram(gl);\n\t\t// biome-ignore lint/correctness/useHookAtTopLevel: gl.useProgram is a WebGL method, not a React hook\n\t\tgl.useProgram(prog);\n\n\t\t// Fullscreen quad\n\t\tconst buf = gl.createBuffer();\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, buf);\n\t\tgl.bufferData(\n\t\t\tgl.ARRAY_BUFFER,\n\t\t\tnew Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]),\n\t\t\tgl.STATIC_DRAW,\n\t\t);\n\t\tconst aPos = gl.getAttribLocation(prog, \"a_pos\");\n\t\tgl.enableVertexAttribArray(aPos);\n\t\tgl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 0, 0);\n\n\t\tconst uTime = gl.getUniformLocation(prog, \"u_time\");\n\t\tconst uRes = gl.getUniformLocation(prog, \"u_res\");\n\t\tgl.enable(gl.BLEND);\n\t\tgl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n\t\tresize();\n\t\twindow.addEventListener(\"resize\", resize);\n\n\t\tconst start = performance.now();\n\t\tlet raf: number;\n\n\t\tconst draw = () => {\n\t\t\tgl.uniform1f(uTime, (performance.now() - start) / 1000);\n\t\t\tgl.clearColor(0, 0, 0, 0);\n\t\t\tgl.clear(gl.COLOR_BUFFER_BIT);\n\t\t\tgl.drawArrays(gl.TRIANGLES, 0, 6);\n\t\t\traf = requestAnimationFrame(draw);\n\t\t};\n\t\traf = requestAnimationFrame(draw);\n\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(raf);\n\t\t\twindow.removeEventListener(\"resize\", resize);\n\t\t};\n\t}, [active]);\n\n\t// biome-ignore lint/a11y/noAriaHiddenOnFocusable: canvas is purely decorative and not keyboard-focusable\n\treturn <canvas ref={canvasRef} className={styles.canvas} aria-hidden=\"true\" />;\n}\n","@layer app {\n /* ── Overlay shell — backdrop + WebGL canvas ──────────────────────── */\n .overlay {\n position: fixed;\n inset: 0;\n z-index: var(--ds-z-modal);\n\n /* Starting state */\n opacity: 0;\n pointer-events: none;\n backdrop-filter: blur(0px) saturate(100%);\n background-color: transparent;\n\n transition:\n opacity var(--ds-duration-base, 250ms) cubic-bezier(0.16, 1, 0.3, 1),\n backdrop-filter var(--ds-duration-base, 250ms) cubic-bezier(0.16, 1, 0.3, 1),\n background-color var(--ds-duration-base, 250ms) cubic-bezier(0.16, 1, 0.3, 1),\n overlay var(--ds-duration-base, 250ms) allow-discrete,\n display var(--ds-duration-base, 250ms) allow-discrete;\n }\n\n /* ── Open state ───────────────────────────────────────────────────── */\n .overlay[data-open=\"true\"] {\n opacity: 1;\n pointer-events: auto;\n backdrop-filter: blur(20px) saturate(160%);\n background-color: color-mix(in srgb, var(--ds-color-surface, #fff) 88%, transparent);\n\n @starting-style {\n opacity: 0;\n backdrop-filter: blur(0px) saturate(100%);\n background-color: transparent;\n }\n }\n\n /* ── Close state — faster than open ──────────────────────────────── */\n .overlay[data-open=\"false\"] {\n opacity: 0;\n pointer-events: none;\n transition:\n opacity var(--ds-duration-fast, 150ms) cubic-bezier(0.7, 0, 0.84, 0),\n backdrop-filter var(--ds-duration-fast, 150ms) cubic-bezier(0.7, 0, 0.84, 0),\n background-color var(--ds-duration-fast, 150ms) cubic-bezier(0.7, 0, 0.84, 0),\n overlay var(--ds-duration-fast, 150ms) allow-discrete,\n display var(--ds-duration-fast, 150ms) allow-discrete;\n }\n\n /* ── Logo layer — sits above the backdrop stacking context ────────── */\n /*\n * Separate position: fixed layer above the overlay so the logo never\n * fights the WebGL canvas GPU layer inside a backdrop-filter stacking\n * context.\n *\n * z-index fallback (401) covers the case where --ds-z-modal is defined on\n * .tot-ds-root and is therefore NOT inherited by portal elements (they are\n * children of <body>, not of .tot-ds-root).\n */\n .logoLayer {\n position: fixed;\n inset: 0;\n z-index: calc(var(--ds-z-modal, 400) + 1);\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n }\n\n /*\n * No @starting-style needed here — the element is always in the DOM\n * (portal fragment mounts once). [data-open] state changes drive the\n * opacity transition via regular CSS transitions.\n */\n .logoLayer[data-open=\"true\"] {\n opacity: 1;\n transition: opacity var(--ds-duration-base, 250ms) cubic-bezier(0.16, 1, 0.3, 1);\n }\n\n .logoLayer[data-open=\"false\"] {\n opacity: 0;\n transition: opacity var(--ds-duration-fast, 150ms) cubic-bezier(0.7, 0, 0.84, 0);\n }\n\n /* ── Reduced motion ───────────────────────────────────────────────── */\n @media (prefers-reduced-motion: reduce) {\n .overlay,\n .overlay[data-open=\"true\"],\n .overlay[data-open=\"false\"],\n .logoLayer,\n .logoLayer[data-open=\"true\"],\n .logoLayer[data-open=\"false\"] {\n transition: none;\n backdrop-filter: none;\n }\n }\n\n /* ── Screen-reader text ───────────────────────────────────────────── */\n /*\n * Portal sibling of the overlay and logo divs — never inside any stacking\n * context. Uses clip-path (modern, non-deprecated) and an explicit\n * font-family because portal renders outside .tot-ds-root and cannot\n * inherit the token-root font.\n */\n .srOnly {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n font-family: var(--ds-font-family, \"Manrope\", system-ui, sans-serif);\n }\n}\n","@layer app {\n /* ── Outer wrapper — rings radiate from here ──────────────────────── */\n /*\n * will-change: transform promotes this element to its own GPU compositing\n * layer. Combined with z-index: 1, the browser compositor places it above\n * the WebGL canvas layer (which Chrome always promotes to its own layer),\n * regardless of backdrop-filter stacking-context paint order.\n */\n .outer {\n position: relative;\n pointer-events: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 120px;\n height: 120px;\n }\n\n /* ── Elevated circle ──────────────────────────────────────────────── */\n .circle {\n position: relative;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 96px;\n height: 96px;\n border-radius: 50%;\n background-color: var(--ds-color-surface);\n box-shadow:\n var(--ds-shadow-xl),\n 0 0 0 1px oklch(0% 0 0 / 0.04);\n animation: circle-lift var(--ds-duration-slow, 400ms) ease-in-out infinite alternate;\n }\n\n @keyframes circle-lift {\n from {\n box-shadow:\n var(--ds-shadow-xl),\n 0 0 0 1px oklch(0% 0 0 / 0.04);\n transform: translateY(0px);\n }\n to {\n box-shadow:\n var(--ds-shadow-xl),\n 0 24px 40px oklch(0% 0 0 / 0.14),\n 0 0 0 1px oklch(0% 0 0 / 0.04);\n transform: translateY(-4px);\n }\n }\n\n /* ── Logo SVG ─────────────────────────────────────────────────────── */\n .logo {\n width: 52px;\n height: 52px;\n }\n\n .pathDark {\n fill: var(--ds-color-text);\n }\n\n .pathRed {\n fill: var(--ds-color-primary);\n transform-origin: 47px 55px;\n animation: red-breathe 1.6s ease-in-out infinite alternate;\n }\n\n @keyframes red-breathe {\n from { transform: scale(1); opacity: 1; }\n to { transform: scale(1.08); opacity: 0.85; }\n }\n\n /* ── Wave rings ───────────────────────────────────────────────────── */\n .ring {\n position: absolute;\n inset: 0;\n border-radius: 50%;\n border: 1.5px solid var(--ds-color-primary);\n animation: wave-ring 2.2s cubic-bezier(0.16, 1, 0.3, 1) infinite;\n }\n\n .ring:nth-child(2) { animation-delay: -0.73s; }\n .ring:nth-child(3) { animation-delay: -1.47s; }\n\n @keyframes wave-ring {\n 0% { transform: scale(0.6); opacity: 0.6; }\n 100% { transform: scale(2.4); opacity: 0; }\n }\n\n /* ── Reduced motion ───────────────────────────────────────────────── */\n @media (prefers-reduced-motion: reduce) {\n .circle {\n animation: none;\n box-shadow: var(--ds-shadow-xl), 0 0 0 1px oklch(0% 0 0 / 0.04);\n }\n .pathRed { animation: none; }\n .ring { display: none; }\n }\n}\n","import styles from \"./ToteatLogo.module.css\";\n\n/**\n * Toteat isotipo inside an elevated circle, with radiating wave rings.\n * Ported from design_system_vue/LogoToteat/svg/toteat-isotipo-original.svg.\n */\nexport function ToteatLogo() {\n\treturn (\n\t\t<div className={styles.outer} aria-hidden=\"true\">\n\t\t\t{/* Wave rings radiate behind the circle */}\n\t\t\t<div className={styles.ring} />\n\t\t\t<div className={styles.ring} />\n\t\t\t<div className={styles.ring} />\n\n\t\t\t{/* Elevated circle card */}\n\t\t\t<div className={styles.circle}>\n\t\t\t\t<svg\n\t\t\t\t\tclassName={styles.logo}\n\t\t\t\t\tviewBox=\"0 0 80 80\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\tclassName={styles.pathDark}\n\t\t\t\t\t\td=\"M47.328 24.999V10H32.329v14.999h-15v15h15v14.999h14.999V39.999h14.999V25z\"\n\t\t\t\t\t/>\n\t\t\t\t\t<path\n\t\t\t\t\t\tclassName={styles.pathRed}\n\t\t\t\t\t\td=\"M32.328 40a15 15 0 0 0 14.998 15h15v15H47.329a15 15 0 0 1-15-15z\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { createPortal } from \"react-dom\";\nimport { BreathingDotsCanvas } from \"./BreathingDotsCanvas\";\nimport styles from \"./PageLoadingOverlay.module.css\";\nimport { ToteatLogo } from \"./ToteatLogo\";\n\nexport interface PageLoadingOverlayProps {\n\tisOpen: boolean;\n\t/** Screen-reader announcement text. Defaults to \"Cargando…\" */\n\tlabel?: string;\n}\n\n/**\n * Full-screen blocking overlay for page-level loading states.\n *\n * Shows a frosted-glass backdrop with a WebGL breathing-dots animation and\n * the Toteat isotipo in an elevated circle. Renders via a React portal so it\n * always escapes any ancestor stacking context.\n *\n * Usage:\n * <PageLoadingOverlay isOpen={isPending} />\n * <PageLoadingOverlay isOpen={isPending} label=\"Guardando cambios…\" />\n */\nexport function PageLoadingOverlay({ isOpen, label = \"Cargando…\" }: PageLoadingOverlayProps) {\n\treturn createPortal(\n\t\t<>\n\t\t\t{/*\n\t\t\t * Layer 1 — backdrop + WebGL animation (z-index: --ds-z-modal).\n\t\t\t * backdrop-filter creates its own stacking context; the logo lives in a\n\t\t\t * separate layer above so there is no GPU-layer compositing fight.\n\t\t\t */}\n\t\t\t<div\n\t\t\t\tclassName={styles.overlay}\n\t\t\t\tdata-open={isOpen}\n\t\t\t\trole=\"status\"\n\t\t\t\taria-live=\"polite\"\n\t\t\t\taria-busy={isOpen}\n\t\t\t\taria-label={label}\n\t\t\t>\n\t\t\t\t<BreathingDotsCanvas active={isOpen} />\n\t\t\t</div>\n\n\t\t\t{/*\n\t\t\t * Layer 2 — logo (z-index: --ds-z-modal + 1).\n\t\t\t * tot-ds-root is applied so CSS custom properties resolve inside the\n\t\t\t * portal — portal elements are children of <body>, not of .tot-ds-root,\n\t\t\t * so they cannot inherit --ds-* variables without this class.\n\t\t\t */}\n\t\t\t<div className={`${styles.logoLayer} tot-ds-root`} data-open={isOpen} aria-hidden=\"true\">\n\t\t\t\t<ToteatLogo />\n\t\t\t</div>\n\n\t\t\t{/* Live region — sr-only, outside both stacking contexts */}\n\t\t\t<span className={styles.srOnly} aria-live=\"polite\" aria-atomic=\"true\">\n\t\t\t\t{isOpen ? label : \"\"}\n\t\t\t</span>\n\t\t</>,\n\t\tdocument.body,\n\t);\n}\n","@layer ang-components {\n .overlay {\n position: fixed;\n inset: 0;\n z-index: 100;\n background-color: var(--ds-ang-neutral-100);\n display: flex;\n align-items: center;\n justify-content: center;\n overflow-y: auto;\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./PinLockOverlay.module.css\";\n\nexport interface PinLockOverlayProps {\n\tisLocked: boolean;\n\tchildren: ReactNode;\n}\n\nexport function PinLockOverlay({ isLocked, children }: PinLockOverlayProps) {\n\tif (!isLocked) return null;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.overlay}\n\t\t\trole=\"dialog\"\n\t\t\taria-label=\"Pantalla bloqueada — ingresa tu PIN\"\n\t\t\taria-modal=\"true\"\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .wrapper {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-sm);\n cursor: pointer;\n user-select: none;\n\n &:has(.input:disabled) {\n opacity: 0.4;\n cursor: not-allowed;\n }\n }\n\n .input {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n\n .circle {\n flex-shrink: 0;\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n background-color: var(--color-surface);\n border: 1.5px solid var(--color-border);\n border-radius: var(--radius-circle);\n transition:\n background-color var(--duration-fast) var(--ease-out),\n border-color var(--duration-fast) var(--ease-out),\n box-shadow var(--duration-fast) var(--ease-out);\n\n &::after {\n content: '';\n display: block;\n width: 8px;\n height: 8px;\n border-radius: var(--radius-circle);\n background-color: transparent;\n transition: background-color var(--duration-fast) var(--ease-out);\n }\n }\n\n .wrapper:hover:not(:has(.input:disabled)) .circle {\n border-color: var(--color-neutral-400);\n }\n\n .input:checked + .circle {\n border-color: var(--color-primary);\n\n &::after {\n background-color: var(--color-primary);\n }\n }\n\n .input:focus-visible + .circle {\n outline: none;\n border-color: var(--color-primary);\n box-shadow: 0 0 0 3px var(--color-primary-light);\n }\n\n .label {\n font-family: var(--font-family-base);\n font-size: var(--text-sm);\n line-height: var(--leading-normal);\n color: var(--color-text);\n }\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport styles from \"./Radio.module.css\";\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\tlabel?: string;\n\tref?: React.Ref<HTMLInputElement>;\n}\n\nexport function Radio({ label, className, id, ref, ...props }: RadioProps) {\n\tconst inputId = id ?? `radio-${props.value}`;\n\treturn (\n\t\t<label className={[styles.wrapper, className].filter(Boolean).join(\" \")} htmlFor={inputId}>\n\t\t\t<input ref={ref} type=\"radio\" id={inputId} className={styles.input} {...props} />\n\t\t\t<span className={styles.circle} aria-hidden=\"true\" />\n\t\t\t{label && <span className={styles.label}>{label}</span>}\n\t\t</label>\n\t);\n}\n","@layer ds-components {\n\t.select {\n\t\tposition: relative;\n\t\twidth: 100%;\n\t}\n\n\t.trigger {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-base);\n\t\tline-height: var(--leading-normal);\n\t\tcolor: var(--color-text);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: 1.5px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t\tcursor: pointer;\n\t\ttext-align: left;\n\t\ttransition:\n\t\t\tborder-color var(--duration-fast) var(--ease-out),\n\t\t\tbox-shadow var(--duration-fast) var(--ease-out);\n\n\t\t&:hover:not(:disabled) {\n\t\t\tborder-color: var(--color-neutral-400);\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: none;\n\t\t\tborder-color: var(--color-primary);\n\t\t\tbox-shadow: 0 0 0 3px var(--color-primary-light);\n\t\t}\n\n\t\t&:disabled {\n\t\t\tbackground-color: var(--color-neutral-50);\n\t\t\tcolor: var(--color-neutral-400);\n\t\t\tcursor: not-allowed;\n\t\t}\n\t}\n\n\t.select[data-open] .trigger {\n\t\tborder-color: var(--color-primary);\n\t\tbox-shadow: 0 0 0 3px var(--color-primary-light);\n\t}\n\n\t.select[data-error] .trigger {\n\t\tborder-color: var(--color-error);\n\n\t\t&:focus-visible {\n\t\t\tbox-shadow: 0 0 0 3px var(--color-error-light);\n\t\t}\n\t}\n\n\t.select[data-error][data-open] .trigger {\n\t\tborder-color: var(--color-error);\n\t\tbox-shadow: 0 0 0 3px var(--color-error-light);\n\t}\n\n\t.value {\n\t\tflex: 1;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\n\t.placeholder {\n\t\tflex: 1;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-neutral-400);\n\t}\n\n\t.chevron {\n\t\tflex-shrink: 0;\n\t\tmargin-left: var(--spacing-sm);\n\t\tcolor: var(--color-text-muted);\n\t\tfont-size: var(--text-sm);\n\t\ttransition: transform var(--duration-fast) var(--ease-out);\n\t}\n\n\t.select[data-open] .chevron {\n\t\ttransform: rotate(180deg);\n\t}\n\n\t.dropdown {\n\t\tposition: absolute;\n\t\ttop: calc(100% + var(--spacing-xs));\n\t\tleft: 0;\n\t\tright: 0;\n\t\tz-index: var(--z-dropdown);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: 1.5px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t\tbox-shadow: var(--shadow-lg);\n\t\tmax-height: 240px;\n\t\toverflow-y: auto;\n\t\toverscroll-behavior: contain;\n\t}\n\n\t.search {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tline-height: var(--leading-normal);\n\t\tcolor: var(--color-text);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: none;\n\t\tborder-bottom: 1.5px solid var(--color-border);\n\n\t\t&::placeholder {\n\t\t\tcolor: var(--color-neutral-400);\n\t\t}\n\n\t\t&:focus {\n\t\t\toutline: none;\n\t\t}\n\t}\n\n\t.option {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tline-height: var(--leading-normal);\n\t\tcolor: var(--color-text);\n\t\tbackground: transparent;\n\t\tborder: none;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t\ttransition: background-color var(--duration-fast) var(--ease-out);\n\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-neutral-50);\n\t\t}\n\n\t\t&[data-selected] {\n\t\t\tcolor: var(--color-primary);\n\t\t\tfont-weight: var(--font-medium);\n\t\t\tbackground-color: var(--color-primary-50);\n\t\t}\n\n\t\t&:disabled {\n\t\t\tcolor: var(--color-neutral-400);\n\t\t\tcursor: not-allowed;\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: 2px solid var(--color-primary);\n\t\t\toutline-offset: -2px;\n\t\t}\n\t}\n\n\t.noResults {\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-text-muted);\n\t\ttext-align: center;\n\t}\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport styles from \"./Select.module.css\";\n\nexport interface SelectOption {\n\tvalue: string;\n\tlabel: string;\n\tdisabled?: boolean;\n}\n\nexport interface SelectProps {\n\toptions: SelectOption[];\n\tvalue?: string;\n\tonChange?: (value: string) => void;\n\tplaceholder?: string;\n\tsearchable?: boolean;\n\tsearchPlaceholder?: string;\n\tnoResultsText?: string;\n\tdisabled?: boolean;\n\terror?: boolean;\n\tname?: string;\n\t\"data-testid\"?: string;\n}\n\nexport function Select({\n\toptions,\n\tvalue,\n\tonChange,\n\tplaceholder = \"Seleccionar...\",\n\tsearchable = false,\n\tsearchPlaceholder = \"Buscar...\",\n\tnoResultsText = \"Sin resultados\",\n\tdisabled,\n\terror,\n\tname,\n\t\"data-testid\": dataTestId,\n}: SelectProps): React.ReactElement {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [search, setSearch] = useState(\"\");\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst triggerRef = useRef<HTMLButtonElement>(null);\n\n\tconst selectedOption = options.find((o) => o.value === value);\n\tconst filteredOptions = searchable\n\t\t? options.filter((o) => o.label.toLowerCase().includes(search.toLowerCase()))\n\t\t: options;\n\n\tconst closeDropdown = useCallback(() => {\n\t\tsetIsOpen(false);\n\t\ttriggerRef.current?.focus();\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst handler = (e: MouseEvent) => {\n\t\t\tif (!containerRef.current?.contains(e.target as Node)) closeDropdown();\n\t\t};\n\t\tdocument.addEventListener(\"mousedown\", handler);\n\t\treturn () => document.removeEventListener(\"mousedown\", handler);\n\t}, [isOpen, closeDropdown]);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst handler = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") closeDropdown();\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", handler);\n\t\treturn () => document.removeEventListener(\"keydown\", handler);\n\t}, [isOpen, closeDropdown]);\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={styles.select}\n\t\t\tdata-open={isOpen || undefined}\n\t\t\tdata-error={error || undefined}\n\t\t\tdata-disabled={disabled || undefined}\n\t\t\tdata-testid={dataTestId}\n\t\t>\n\t\t\t<input type=\"hidden\" name={name} value={value ?? \"\"} />\n\t\t\t<button\n\t\t\t\tref={triggerRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.trigger}\n\t\t\t\tonClick={() => !disabled && setIsOpen(!isOpen)}\n\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\tdisabled={disabled}\n\t\t\t>\n\t\t\t\t<span className={selectedOption ? styles.value : styles.placeholder}>\n\t\t\t\t\t{selectedOption?.label ?? placeholder}\n\t\t\t\t</span>\n\t\t\t\t<span className={styles.chevron} aria-hidden=\"true\">\n\t\t\t\t\t▾\n\t\t\t\t</span>\n\t\t\t</button>\n\t\t\t{isOpen && (\n\t\t\t\t<div className={styles.dropdown} role=\"listbox\">\n\t\t\t\t\t{searchable && (\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tclassName={styles.search}\n\t\t\t\t\t\t\tplaceholder={searchPlaceholder}\n\t\t\t\t\t\t\taria-label={searchPlaceholder}\n\t\t\t\t\t\t\tvalue={search}\n\t\t\t\t\t\t\tonChange={(e) => setSearch(e.target.value)}\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/noAutofocus: search input needs focus when dropdown opens\n\t\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{filteredOptions.map((option) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={option.value}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\taria-selected={option.value === value}\n\t\t\t\t\t\t\tclassName={styles.option}\n\t\t\t\t\t\t\tdata-selected={option.value === value || undefined}\n\t\t\t\t\t\t\tdisabled={option.disabled}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonChange?.(option.value);\n\t\t\t\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t\t\t\t\tsetSearch(\"\");\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t\t{filteredOptions.length === 0 && <div className={styles.noResults}>{noResultsText}</div>}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ang-components {\n .backdrop {\n display: none;\n position: fixed;\n inset: 0;\n z-index: 19;\n }\n\n .backdrop[data-open=\"true\"] {\n display: block;\n }\n\n @media (min-width: 781px) {\n .backdrop {\n display: none;\n }\n }\n\n .sidebar {\n position: fixed;\n top: 0;\n left: 0;\n height: 100dvh;\n width: var(--ds-ang-sidebar-width);\n background-color: var(--ds-ang-secondary);\n color: var(--ds-ang-neutral-0);\n display: flex;\n flex-direction: column;\n gap: var(--ds-ang-space-8);\n padding: var(--ds-ang-space-24) var(--ds-ang-space-16);\n overflow-y: auto;\n z-index: 20;\n font-family: var(--ds-ang-font-family);\n font-size: var(--ds-ang-font-size-menu);\n font-weight: var(--ds-ang-font-weight-normal);\n user-select: none;\n transform: translateX(-100%);\n transition: transform 200ms ease-out;\n }\n\n .sidebar[data-open=\"true\"] {\n transform: translateX(0);\n }\n\n @media (min-width: 781px) {\n .sidebar {\n transform: translateX(0);\n position: relative;\n height: 100%;\n flex-shrink: 0;\n }\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./Sidebar.module.css\";\n\nexport interface SidebarProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tisPinLocked?: boolean;\n\tisModal?: boolean;\n\tchildren: ReactNode;\n}\n\nexport function Sidebar({\n\tisOpen,\n\tonClose,\n\tisPinLocked = false,\n\tisModal = false,\n\tchildren,\n}: SidebarProps) {\n\tif (isPinLocked || isModal) return null;\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tclassName={styles.backdrop}\n\t\t\t\tdata-open={isOpen}\n\t\t\t\tdata-testid=\"sidebar-backdrop\"\n\t\t\t\tonClick={onClose}\n\t\t\t\trole=\"presentation\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t/>\n\t\t\t<nav className={styles.sidebar} data-open={isOpen} aria-label=\"Menú principal\">\n\t\t\t\t{children}\n\t\t\t</nav>\n\t\t</>\n\t);\n}\n","@layer ang-components {\n .item {\n display: flex;\n align-items: center;\n gap: var(--ds-ang-space-8);\n width: 100%;\n padding: var(--ds-ang-space-6) var(--ds-ang-space-8);\n background: none;\n border: none;\n border-radius: var(--ds-ang-radius-sm);\n text-align: left;\n cursor: pointer;\n color: var(--ds-ang-neutral-0);\n font-family: var(--ds-ang-font-family);\n font-size: var(--ds-ang-font-size-menu);\n font-weight: var(--ds-ang-font-weight-normal);\n line-height: 1.3;\n text-decoration: none;\n user-select: none;\n transition:\n background-color 100ms ease,\n font-weight 100ms ease,\n color 100ms ease;\n }\n\n /* Sub-items (inside .inner) inherit these overrides via CSS custom props */\n .item:hover {\n background-color: var(--_item-hover-bg, var(--ds-ang-tertiary));\n color: var(--_item-hover-color, var(--ds-ang-secondary));\n font-weight: var(--ds-ang-font-weight-bold);\n }\n\n .item.active,\n .item[data-active] {\n background-color: var(--_item-hover-bg, var(--ds-ang-tertiary));\n color: var(--_item-hover-color, var(--ds-ang-secondary));\n font-weight: var(--ds-ang-font-weight-bold);\n }\n\n .item:focus-visible {\n outline: var(--ds-ang-focus-width) solid var(--ds-ang-focus-color);\n outline-offset: var(--ds-ang-focus-offset);\n border-radius: var(--ds-ang-radius-sm);\n }\n}\n","import type { ButtonHTMLAttributes } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport styles from \"./SidebarNavItem.module.css\";\n\nexport { styles as sidebarNavItemStyles };\nexport const sidebarNavItemClass = styles.item;\nexport const sidebarNavItemActiveClass = styles.active;\n\nexport interface SidebarNavItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n\tlabel: string;\n\tisActive?: boolean;\n}\n\nexport function SidebarNavItem({\n\tlabel,\n\tisActive = false,\n\tclassName,\n\ttype = \"button\",\n\t...rest\n}: SidebarNavItemProps) {\n\treturn (\n\t\t<button\n\t\t\ttype={type}\n\t\t\tclassName={cn(styles.item, isActive && styles.active, className)}\n\t\t\tdata-active={isActive || undefined}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{label}\n\t\t</button>\n\t);\n}\n","@layer ang-components {\n .section {\n display: flex;\n flex-direction: column;\n }\n\n .trigger {\n display: flex;\n align-items: center;\n gap: var(--ds-ang-space-8);\n width: 100%;\n padding: var(--ds-ang-space-6) var(--ds-ang-space-8);\n background: none;\n border: none;\n border-radius: var(--ds-ang-radius-sm);\n text-align: left;\n cursor: pointer;\n color: var(--ds-ang-neutral-0);\n font-family: var(--ds-ang-font-family);\n font-size: var(--ds-ang-font-size-menu);\n font-weight: var(--ds-ang-font-weight-normal);\n line-height: 1.3;\n user-select: none;\n transition:\n background-color 100ms ease,\n font-weight 100ms ease,\n color 100ms ease;\n }\n\n .trigger:hover,\n .trigger[data-open],\n .trigger[data-active] {\n background-color: var(--ds-ang-tertiary);\n color: var(--ds-ang-secondary);\n font-weight: var(--ds-ang-font-weight-bold);\n }\n\n .trigger:focus-visible {\n outline: var(--ds-ang-focus-width) solid var(--ds-ang-focus-color);\n outline-offset: var(--ds-ang-focus-offset);\n border-radius: var(--ds-ang-radius-sm);\n }\n\n .icon {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .title {\n flex: 1;\n }\n\n .chevron {\n display: block;\n width: 6px;\n height: 6px;\n border-right: 1.5px solid currentColor;\n border-bottom: 1.5px solid currentColor;\n transform: rotate(45deg);\n transition: transform 200ms ease-in-out;\n flex-shrink: 0;\n margin-right: var(--ds-ang-space-4);\n }\n\n .trigger[data-open] .chevron {\n transform: rotate(-135deg);\n }\n\n .content {\n overflow: hidden;\n max-height: 0;\n transition: max-height 200ms ease-in-out;\n }\n\n .content[data-open] {\n max-height: 1000px;\n }\n\n .inner {\n margin-left: var(--ds-ang-space-16);\n padding-left: var(--ds-ang-space-12);\n padding-bottom: var(--ds-ang-space-4);\n margin-top: var(--ds-ang-space-8);\n border-left: 1.5px solid var(--ds-ang-neutral-500);\n /* Sub-items use neutral-500 bg + white text on hover/active */\n --_item-hover-bg: var(--ds-ang-neutral-500);\n --_item-hover-color: var(--ds-ang-neutral-0);\n }\n\n .suffix {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n line-height: 1;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport styles from \"./SidebarNavSection.module.css\";\n\nexport interface SidebarNavSectionProps {\n\ttitle: string;\n\ticon?: ReactNode;\n\ttitleSuffix?: ReactNode;\n\tdefaultOpen?: boolean;\n\tisActive?: boolean;\n\tclassName?: string;\n\tchildren: ReactNode;\n}\n\nexport function SidebarNavSection({\n\ttitle,\n\ticon,\n\ttitleSuffix,\n\tdefaultOpen = false,\n\tisActive = false,\n\tclassName,\n\tchildren,\n}: SidebarNavSectionProps) {\n\tconst [isOpen, setIsOpen] = useState(defaultOpen);\n\n\treturn (\n\t\t<div className={cn(styles.section, className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.trigger}\n\t\t\t\tdata-open={isOpen || undefined}\n\t\t\t\tdata-active={isActive || undefined}\n\t\t\t\tonClick={() => setIsOpen((o) => !o)}\n\t\t\t\taria-expanded={isOpen}\n\t\t\t>\n\t\t\t\t{icon && (\n\t\t\t\t\t<span className={styles.icon} aria-hidden=\"true\">\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<span className={styles.title}>{title}</span>\n\t\t\t\t{titleSuffix && (\n\t\t\t\t\t<span className={styles.suffix} aria-hidden=\"true\">\n\t\t\t\t\t\t{titleSuffix}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<span className={styles.chevron} aria-hidden=\"true\" />\n\t\t\t</button>\n\t\t\t<div className={styles.content} data-open={isOpen || undefined} inert={!isOpen || undefined}>\n\t\t\t\t<div className={styles.inner}>{children}</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","@layer ang-components {\n .tabbar {\n height: var(--ds-ang-tab-height);\n min-height: var(--ds-ang-tab-height);\n max-height: var(--ds-ang-tab-height);\n background-color: var(--ds-ang-neutral-500);\n padding: 5px 0;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .tabbar[data-variant=\"expanded\"] {\n height: calc(var(--ds-ang-tab-height) + 58px);\n min-height: calc(var(--ds-ang-tab-height) + 58px);\n max-height: calc(var(--ds-ang-tab-height) + 58px);\n }\n\n .tabbar[data-variant=\"expanded-billing\"] {\n height: calc(var(--ds-ang-tab-height) + 118px);\n min-height: calc(var(--ds-ang-tab-height) + 118px);\n max-height: calc(var(--ds-ang-tab-height) + 118px);\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./TabBar.module.css\";\n\nexport type TabBarVariant = \"default\" | \"expanded\" | \"expanded-billing\";\n\nexport interface TabBarProps {\n\tvariant?: TabBarVariant;\n\tchildren: ReactNode;\n}\n\nexport function TabBar({ variant = \"default\", children }: TabBarProps) {\n\treturn (\n\t\t<div className={styles.tabbar} role=\"tablist\" data-variant={variant}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.tabs {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\twidth: 100%;\n\t}\n\n\t.tabList {\n\t\tdisplay: flex;\n\t\tgap: 0;\n\t\tborder-bottom: 1.5px solid var(--color-border);\n\t}\n\n\t.tab {\n\t\tposition: relative;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: var(--spacing-sm);\n\t\tpadding: var(--spacing-sm) var(--spacing-lg);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-medium);\n\t\tline-height: var(--leading-normal);\n\t\tcolor: var(--color-text-muted);\n\t\tbackground: transparent;\n\t\tborder: none;\n\t\tborder-bottom: 2px solid transparent;\n\t\tmargin-bottom: -1.5px;\n\t\tcursor: pointer;\n\t\twhite-space: nowrap;\n\t\ttransition:\n\t\t\tcolor var(--duration-fast) var(--ease-out),\n\t\t\tborder-color var(--duration-fast) var(--ease-out);\n\n\t\t&:hover:not(:disabled):not([data-active]) {\n\t\t\tcolor: var(--color-text);\n\t\t\tborder-bottom-color: var(--color-neutral-300);\n\t\t}\n\n\t\t&[data-active] {\n\t\t\tcolor: var(--color-primary);\n\t\t\tfont-weight: var(--font-semibold);\n\t\t\tborder-bottom-color: var(--color-primary);\n\t\t}\n\n\t\t&:disabled {\n\t\t\topacity: 0.4;\n\t\t\tcursor: not-allowed;\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: 2px solid var(--color-primary);\n\t\t\toutline-offset: 2px;\n\t\t\tborder-radius: var(--radius-sm);\n\t\t}\n\t}\n\n\t.panel {\n\t\tpadding-top: var(--spacing-lg);\n\t}\n}\n","import type { ReactNode } from \"react\";\nimport { useRef, useState } from \"react\";\nimport styles from \"./Tabs.module.css\";\n\nexport interface TabItem {\n\tid: string;\n\tlabel: string;\n\tcontent?: ReactNode;\n\tdisabled?: boolean;\n}\n\nexport interface TabsProps {\n\titems: TabItem[];\n\tdefaultTab?: string;\n\t/** Controlled active tab id. When provided the caller owns active state; Tabs only calls onChange. */\n\tactiveTab?: string;\n\t/** Accessible label for the tablist — required when multiple tablists exist on the page. */\n\t\"aria-label\"?: string;\n\tonChange?: (tabId: string) => void;\n}\n\nexport function Tabs({\n\titems,\n\tdefaultTab,\n\tactiveTab: controlledTab,\n\t\"aria-label\": ariaLabel,\n\tonChange,\n}: TabsProps): React.ReactElement {\n\tconst [internalTab, setInternalTab] = useState(defaultTab ?? items[0]?.id ?? \"\");\n\tconst isControlled = controlledTab !== undefined;\n\tconst activeTab = isControlled ? controlledTab : internalTab;\n\tconst tabRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n\tconst wasControlled = useRef(isControlled);\n\n\tif (process.env.NODE_ENV !== \"production\" && wasControlled.current !== isControlled) {\n\t\tconsole.error(\n\t\t\t\"Tabs: `activeTab` prop changed from %s to %s. A component cannot switch between controlled and uncontrolled modes.\",\n\t\t\twasControlled.current ? \"controlled\" : \"uncontrolled\",\n\t\t\tisControlled ? \"controlled\" : \"uncontrolled\",\n\t\t);\n\t}\n\n\tconst handleTabClick = (id: string) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalTab(id);\n\t\t}\n\t\tonChange?.(id);\n\t};\n\n\tconst handleKeyDown = (e: React.KeyboardEvent, currentIndex: number) => {\n\t\tconst enabledItems = items.filter((item) => !item.disabled);\n\t\tconst enabledIds = enabledItems.map((item) => item.id);\n\t\tconst currentEnabledIndex = enabledIds.indexOf(items[currentIndex]?.id ?? \"\");\n\t\tlet targetId: string | undefined;\n\n\t\tif (e.key === \"ArrowRight\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[(currentEnabledIndex + 1) % enabledIds.length];\n\t\t} else if (e.key === \"ArrowLeft\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[(currentEnabledIndex - 1 + enabledIds.length) % enabledIds.length];\n\t\t} else if (e.key === \"Home\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[0];\n\t\t} else if (e.key === \"End\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[enabledIds.length - 1];\n\t\t}\n\n\t\tif (targetId) {\n\t\t\thandleTabClick(targetId);\n\t\t\ttabRefs.current.get(targetId)?.focus();\n\t\t}\n\t};\n\n\tconst activeContent = items.find((item) => item.id === activeTab)?.content;\n\n\treturn (\n\t\t<div className={styles.tabs}>\n\t\t\t<div className={styles.tabList} role=\"tablist\" aria-label={ariaLabel}>\n\t\t\t\t{items.map((item, index) => (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\t\tif (el) tabRefs.current.set(item.id, el);\n\t\t\t\t\t\t\telse tabRefs.current.delete(item.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\taria-selected={item.id === activeTab}\n\t\t\t\t\t\taria-controls={activeContent != null ? `panel-${activeTab}` : undefined}\n\t\t\t\t\t\tid={`tab-${item.id}`}\n\t\t\t\t\t\tclassName={styles.tab}\n\t\t\t\t\t\tdata-active={item.id === activeTab || undefined}\n\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\ttabIndex={item.id === activeTab ? 0 : -1}\n\t\t\t\t\t\tonClick={() => !item.disabled && handleTabClick(item.id)}\n\t\t\t\t\t\tonKeyDown={(e) => handleKeyDown(e, index)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</button>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t\t{activeContent != null && (\n\t\t\t\t<div\n\t\t\t\t\trole=\"tabpanel\"\n\t\t\t\t\tid={`panel-${activeTab}`}\n\t\t\t\t\taria-labelledby={`tab-${activeTab}`}\n\t\t\t\t\tclassName={styles.panel}\n\t\t\t\t>\n\t\t\t\t\t{activeContent}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.textarea {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--ds-space-2) var(--ds-space-3);\n\t\tfont-family: var(--ds-font-family);\n\t\tfont-size: var(--ds-font-size-base);\n\t\tline-height: var(--ds-leading-normal);\n\t\tcolor: var(--ds-color-text);\n\t\tbackground-color: var(--ds-color-surface);\n\t\tborder: 1px solid var(--ds-color-border);\n\t\tborder-radius: var(--ds-radius-lg);\n\t\tresize: vertical;\n\t\ttransition:\n\t\t\tborder-color var(--ds-duration-fast) var(--ds-ease-out),\n\t\t\tbox-shadow var(--ds-duration-fast) var(--ds-ease-out);\n\n\t\t&::placeholder {\n\t\t\tcolor: var(--ds-color-placeholder);\n\t\t}\n\n\t\t&:hover:not(:disabled):not([data-error]) {\n\t\t\tborder-color: var(--ds-color-gray-400);\n\t\t}\n\n\t\t&:focus,\n\t\t&:focus-visible {\n\t\t\toutline: none;\n\t\t\tborder-color: var(--ds-color-primary);\n\t\t\tbox-shadow: 0 0 0 3px var(--ds-color-primary-light);\n\t\t}\n\n\t\t&:disabled {\n\t\t\tbackground-color: var(--ds-color-gray-50);\n\t\t\tcolor: var(--ds-color-gray-500);\n\t\t\tcursor: not-allowed;\n\t\t\tresize: none;\n\t\t}\n\n\t\t&[data-error] {\n\t\t\tborder-color: var(--ds-color-error);\n\n\t\t\t&:focus,\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: 0 0 0 3px var(--ds-color-error-light);\n\t\t\t}\n\t\t}\n\t}\n}\n","import type { Ref, TextareaHTMLAttributes } from \"react\";\nimport styles from \"./Textarea.module.css\";\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n\terror?: boolean;\n\tref?: Ref<HTMLTextAreaElement>;\n}\n\nexport function Textarea({ error, className, rows = 3, ref, ...props }: TextareaProps) {\n\treturn (\n\t\t<textarea\n\t\t\tref={ref}\n\t\t\trows={rows}\n\t\t\tclassName={[styles.textarea, className].filter(Boolean).join(\" \")}\n\t\t\tdata-error={error ? \"\" : undefined}\n\t\t\taria-invalid={error || undefined}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","@layer ds-components {\n .wrapper {\n position: relative;\n display: flex;\n align-items: center;\n\n .input {\n padding-right: calc(var(--ds-space-3) + 28px);\n }\n }\n\n .toggleButton {\n position: absolute;\n right: var(--ds-space-2);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--ds-space-1);\n border: none;\n background: transparent;\n color: var(--ds-color-text-muted);\n cursor: pointer;\n border-radius: var(--ds-radius-sm);\n transition: color var(--ds-duration-fast) var(--ds-ease-out);\n\n &:hover:not(:disabled) {\n color: var(--ds-color-text);\n }\n\n &:focus-visible {\n outline: var(--ds-focus-width) solid var(--ds-focus-color);\n outline-offset: var(--ds-focus-offset);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n }\n\n .input {\n display: block;\n width: 100%;\n padding: var(--ds-space-2) var(--ds-space-3);\n font-family: var(--ds-font-family);\n font-size: var(--ds-font-size-base);\n line-height: var(--ds-leading-normal);\n color: var(--ds-color-text);\n background-color: var(--ds-color-surface);\n border: 1px solid var(--ds-color-border);\n border-radius: var(--ds-radius-lg);\n min-height: 3.75rem;\n\n &[data-size=\"small\"] {\n min-height: 2.5rem;\n padding: var(--ds-space-1) var(--ds-space-3);\n border-radius: var(--ds-radius-md);\n }\n transition:\n border-color var(--ds-duration-fast) var(--ds-ease-out),\n box-shadow var(--ds-duration-fast) var(--ds-ease-out);\n\n &::placeholder {\n color: var(--ds-color-placeholder);\n }\n\n &:hover:not(:disabled):not([data-error]) {\n border-color: var(--ds-color-gray-400);\n }\n\n &:focus {\n outline: none;\n border-color: var(--ds-color-primary);\n box-shadow: 0 0 0 3px var(--ds-color-primary-light);\n }\n\n &:focus-visible {\n outline: none;\n border-color: var(--ds-color-primary);\n box-shadow: 0 0 0 3px var(--ds-color-primary-light);\n }\n\n &:disabled {\n background-color: var(--ds-color-gray-50);\n color: var(--ds-color-gray-500);\n cursor: not-allowed;\n }\n\n &[data-error] {\n border-color: var(--ds-color-error);\n\n &:focus,\n &:focus-visible {\n box-shadow: 0 0 0 3px var(--ds-color-error-light);\n }\n }\n }\n}\n","import { forwardRef, type InputHTMLAttributes, useState } from \"react\";\nimport { Icon } from \"../Icon/Icon\";\nimport styles from \"./TextInput.module.css\";\n\nexport type TextInputSize = \"small\" | \"medium\";\n\nexport interface TextInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n\terror?: boolean;\n\tshowPasswordToggle?: boolean;\n\tsize?: TextInputSize;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: password toggle + error + type variants are all load-bearing prop branches\nexport const TextInput = forwardRef<HTMLInputElement, TextInputProps>(function TextInput(\n\t{ error = false, showPasswordToggle = false, size = \"medium\", className, type, ...props },\n\tref,\n) {\n\tconst [passwordVisible, setPasswordVisible] = useState(false);\n\tconst isPasswordField = type === \"password\";\n\tconst resolvedType = isPasswordField && passwordVisible ? \"text\" : type;\n\n\tconst input = (\n\t\t<input\n\t\t\tref={ref}\n\t\t\tclassName={[styles.input, !showPasswordToggle && className].filter(Boolean).join(\" \")}\n\t\t\tdata-error={error ? \"\" : undefined}\n\t\t\tdata-size={size}\n\t\t\taria-invalid={error || undefined}\n\t\t\ttype={resolvedType}\n\t\t\t{...props}\n\t\t/>\n\t);\n\n\tif (isPasswordField && showPasswordToggle) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={[styles.wrapper, className].filter(Boolean).join(\" \")}\n\t\t\t\tdata-error={error ? \"\" : undefined}\n\t\t\t\tdata-size={size}\n\t\t\t>\n\t\t\t\t{input}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.toggleButton}\n\t\t\t\t\taria-label={passwordVisible ? \"Ocultar contraseña\" : \"Mostrar contraseña\"}\n\t\t\t\t\taria-pressed={passwordVisible}\n\t\t\t\t\tdisabled={props.disabled}\n\t\t\t\t\tonClick={() => setPasswordVisible((v) => !v)}\n\t\t\t\t>\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tname={passwordVisible ? \"eye-open-outline\" : \"eye-closed-outline\"}\n\t\t\t\t\t\tsize={18}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn input;\n});\n","import type { ReactNode } from \"react\";\nimport type { DsTheme } from \"../DsProvider/DsProvider\";\n\nexport interface ThemeGateProps {\n\ttheme: DsTheme;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\nexport function ThemeGate({ theme, children, className }: ThemeGateProps) {\n\treturn (\n\t\t<div data-theme={theme} className={className}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.container {\n\t\tposition: fixed;\n\t\tbottom: var(--spacing-xl);\n\t\tright: var(--spacing-xl);\n\t\tz-index: var(--z-toast);\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--spacing-sm);\n\t\tmax-width: 400px;\n\t\twidth: calc(100vw - 2 * var(--spacing-xl));\n\t\tpointer-events: none;\n\n\t\t@media (max-width: 480px) {\n\t\t\tbottom: var(--spacing-md);\n\t\t\tright: var(--spacing-md);\n\t\t\tleft: var(--spacing-md);\n\t\t\twidth: auto;\n\t\t}\n\t}\n\n\t.toast {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: var(--spacing-md);\n\t\tpadding: var(--spacing-md) var(--spacing-lg);\n\t\tborder-radius: var(--radius-lg);\n\t\tbox-shadow: var(--shadow-lg);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-medium);\n\t\tline-height: var(--leading-snug);\n\t\tpointer-events: auto;\n\t\tanimation: ds-toast-enter var(--duration-base) var(--ease-spring);\n\n\t\t&[data-variant=\"success\"] {\n\t\t\tbackground-color: var(--color-success-light);\n\t\t\tcolor: var(--color-success-dark);\n\t\t\tborder-left: 4px solid var(--color-success);\n\t\t}\n\n\t\t&[data-variant=\"error\"] {\n\t\t\tbackground-color: var(--color-error-light);\n\t\t\tcolor: var(--color-error-dark);\n\t\t\tborder-left: 4px solid var(--color-error);\n\t\t}\n\n\t\t&[data-variant=\"warning\"] {\n\t\t\tbackground-color: var(--color-warning-light);\n\t\t\tcolor: var(--color-warning-dark);\n\t\t\tborder-left: 4px solid var(--color-warning);\n\t\t}\n\n\t\t&[data-variant=\"info\"] {\n\t\t\tbackground-color: var(--color-info-light);\n\t\t\tcolor: var(--color-info-dark);\n\t\t\tborder-left: 4px solid var(--color-info);\n\t\t}\n\t}\n\n\t.toastMessage {\n\t\tflex: 1;\n\t}\n\n\t.dismissButton {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tflex-shrink: 0;\n\t\twidth: 24px;\n\t\theight: 24px;\n\t\tpadding: 0;\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcursor: pointer;\n\t\tcolor: inherit;\n\t\topacity: 0.6;\n\t\tborder-radius: var(--radius-sm);\n\t\ttransition: opacity var(--duration-fast) var(--ease-out);\n\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: 2px solid currentColor;\n\t\t\toutline-offset: 1px;\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ToastData, ToastVariant } from \"./Toast\";\n\ntype AddToastOptions = {\n\tmessage: string;\n\tvariant?: ToastVariant;\n\tduration?: number;\n\tdismissible?: boolean;\n};\n\ntype ToastStore = {\n\ttoasts: ToastData[];\n\taddToast: (opts: AddToastOptions) => string;\n\tdismissToast: (id: string) => void;\n};\n\n/* ── Global singleton store (module-level) ── */\n\ntype Listener = (toasts: ToastData[]) => void;\n\nlet toasts: ToastData[] = [];\nconst listeners = new Set<Listener>();\nlet counter = 0;\n\nfunction notify() {\n\tfor (const l of listeners) l([...toasts]);\n}\n\nfunction addToast(opts: AddToastOptions): string {\n\tconst id = `toast-${++counter}-${Date.now()}`;\n\ttoasts = [\n\t\t...toasts,\n\t\t{\n\t\t\tid,\n\t\t\tmessage: opts.message,\n\t\t\tvariant: opts.variant ?? \"info\",\n\t\t\tduration: opts.duration,\n\t\t\tdismissible: opts.dismissible,\n\t\t},\n\t];\n\tnotify();\n\treturn id;\n}\n\nfunction dismissToast(id: string) {\n\ttoasts = toasts.filter((t) => t.id !== id);\n\tnotify();\n}\n\n/* ── Hook ── */\n\nexport function useToast(): ToastStore {\n\tconst [localToasts, setLocalToasts] = useState<ToastData[]>(toasts);\n\tconst isMounted = useRef(true);\n\n\tuseEffect(() => {\n\t\tisMounted.current = true;\n\t\tconst listener: Listener = (next) => {\n\t\t\tif (isMounted.current) setLocalToasts(next);\n\t\t};\n\t\tlisteners.add(listener);\n\t\treturn () => {\n\t\t\tisMounted.current = false;\n\t\t\tlisteners.delete(listener);\n\t\t};\n\t}, []);\n\n\tconst stableAdd = useCallback((opts: AddToastOptions) => addToast(opts), []);\n\tconst stableDismiss = useCallback((id: string) => dismissToast(id), []);\n\n\treturn {\n\t\ttoasts: localToasts,\n\t\taddToast: stableAdd,\n\t\tdismissToast: stableDismiss,\n\t};\n}\n","import type { ReactNode } from \"react\";\nimport { useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport styles from \"./Toast.module.css\";\nimport { useToast } from \"./useToast\";\n\nexport type ToastVariant = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface ToastData {\n\tid: string;\n\tmessage: string;\n\tvariant: ToastVariant;\n\tduration?: number;\n\tdismissible?: boolean;\n}\n\n/* ── Toast Message ── */\n\ninterface ToastMessageProps {\n\ttoast: ToastData;\n\tonDismiss: (id: string) => void;\n\tdismissLabel?: string;\n}\n\nfunction ToastMessage({\n\ttoast,\n\tonDismiss,\n\tdismissLabel = \"Cerrar notificación\",\n}: ToastMessageProps) {\n\tconst { id, message, variant, duration = 4000, dismissible = true } = toast;\n\tconst timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n\tuseEffect(() => {\n\t\ttimerRef.current = setTimeout(() => {\n\t\t\tonDismiss(id);\n\t\t}, duration);\n\n\t\treturn () => {\n\t\t\tif (timerRef.current) clearTimeout(timerRef.current);\n\t\t};\n\t}, [id, duration, onDismiss]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.toast}\n\t\t\tdata-variant={variant}\n\t\t\trole={variant === \"error\" || variant === \"warning\" ? \"alert\" : \"status\"}\n\t\t\taria-atomic=\"true\"\n\t\t>\n\t\t\t<span className={styles.toastMessage}>{message}</span>\n\t\t\t{dismissible && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.dismissButton}\n\t\t\t\t\tonClick={() => onDismiss(id)}\n\t\t\t\t\taria-label={dismissLabel}\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"14\"\n\t\t\t\t\t\theight=\"14\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth=\"2.5\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path d=\"M18 6 6 18M6 6l12 12\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\n/* ── Toast Container ── */\n\nexport interface ToastContainerProps {\n\tchildren?: ReactNode;\n\tnotificationsLabel?: string;\n\tdismissLabel?: string;\n}\n\nexport function ToastContainer({\n\tnotificationsLabel = \"Notificaciones\",\n\tdismissLabel,\n}: ToastContainerProps) {\n\tconst { toasts, dismissToast } = useToast();\n\n\tif (typeof document === \"undefined\") return null;\n\n\treturn createPortal(\n\t\t<section className={styles.container} aria-label={notificationsLabel}>\n\t\t\t{toasts.map((toast) => (\n\t\t\t\t<ToastMessage\n\t\t\t\t\tkey={toast.id}\n\t\t\t\t\ttoast={toast}\n\t\t\t\t\tonDismiss={dismissToast}\n\t\t\t\t\tdismissLabel={dismissLabel}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</section>,\n\t\tdocument.body,\n\t);\n}\n","@layer ds-components {\n .wrapper {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-sm);\n cursor: pointer;\n user-select: none;\n\n &:has(.input:disabled) {\n cursor: not-allowed;\n opacity: 0.5;\n }\n }\n\n /* ── Hidden native input ── */\n .input {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n /* ── Track ── */\n .track {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: 40px;\n height: 22px;\n border-radius: var(--radius-full);\n background-color: var(--color-neutral-200);\n transition: background-color var(--duration-fast) var(--ease-out);\n flex-shrink: 0;\n }\n\n /* Checked state: primary bg */\n .input:checked + .track {\n background-color: var(--color-primary);\n }\n\n /* Focus-visible ring on track */\n .input:focus-visible + .track {\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n }\n\n /* ── Thumb ── */\n .thumb {\n position: absolute;\n left: 2px;\n width: 18px;\n height: 18px;\n border-radius: var(--radius-circle);\n background-color: var(--color-surface);\n box-shadow: var(--shadow-sm);\n transition: transform var(--duration-fast) var(--ease-spring);\n }\n\n .input:checked + .track .thumb {\n transform: translateX(18px);\n }\n\n /* ── Label text ── */\n .label {\n font-family: var(--font-family-base);\n font-size: var(--text-base);\n font-weight: var(--font-normal);\n color: var(--color-text);\n line-height: var(--leading-normal);\n }\n\n /* ── Size: small ── */\n .wrapper[data-size=\"small\"] .track {\n width: 32px;\n height: 18px;\n }\n\n .wrapper[data-size=\"small\"] .thumb {\n width: 14px;\n height: 14px;\n }\n\n .wrapper[data-size=\"small\"] .input:checked + .track .thumb {\n transform: translateX(14px);\n }\n\n .wrapper[data-size=\"small\"] .label {\n font-size: var(--text-sm);\n }\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport styles from \"./Toggle.module.css\";\n\nexport interface ToggleProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> {\n\tlabel?: string;\n\tsize?: \"small\" | \"medium\";\n\tref?: React.Ref<HTMLInputElement>;\n}\n\nexport function Toggle({ label, size = \"medium\", className, id, ref, ...props }: ToggleProps) {\n\tconst inputId = id ?? `toggle-${label?.toLowerCase().replace(/\\s+/g, \"-\")}`;\n\treturn (\n\t\t<label className={styles.wrapper} data-size={size} htmlFor={inputId}>\n\t\t\t<input\n\t\t\t\tref={ref}\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\trole=\"switch\"\n\t\t\t\taria-checked={props.checked ?? false}\n\t\t\t\tid={inputId}\n\t\t\t\tclassName={styles.input}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<span className={styles.track} aria-hidden=\"true\">\n\t\t\t\t<span className={styles.thumb} />\n\t\t\t</span>\n\t\t\t{label && <span className={styles.label}>{label}</span>}\n\t\t</label>\n\t);\n}\n","@layer ds-components {\n\t.trigger {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t}\n\n\t.tooltip {\n\t\tposition: fixed;\n\t\tz-index: var(--ds-z-tooltip);\n\t\tmax-width: 240px;\n\t\tpadding: var(--ds-space-1) var(--ds-space-2);\n\t\tbackground: var(--ds-color-gray-900);\n\t\tcolor: var(--ds-color-white);\n\t\tfont-family: var(--ds-font-family);\n\t\tfont-size: var(--ds-font-size-sm);\n\t\tline-height: var(--ds-leading-snug);\n\t\tborder-radius: var(--ds-radius-sm);\n\t\tpointer-events: none;\n\t\tword-break: break-word;\n\n\t\t&[data-placement=\"top\"] {\n\t\t\ttransform: translateX(-50%) translateY(-100%);\n\t\t}\n\n\t\t&[data-placement=\"bottom\"] {\n\t\t\ttransform: translateX(-50%);\n\t\t}\n\n\t\t&[data-placement=\"left\"] {\n\t\t\ttransform: translateX(-100%) translateY(-50%);\n\t\t}\n\n\t\t&[data-placement=\"right\"] {\n\t\t\ttransform: translateY(-50%);\n\t\t}\n\t}\n}\n","import { type ReactNode, useCallback, useId, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport styles from \"./Tooltip.module.css\";\n\nexport type TooltipPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface TooltipProps {\n\tcontent: ReactNode;\n\tchildren: ReactNode;\n\tplacement?: TooltipPlacement;\n}\n\ninterface Coords {\n\ttop: number;\n\tleft: number;\n}\n\nconst GAP = 8;\n\nfunction getCoords(rect: DOMRect, placement: TooltipPlacement): Coords {\n\tswitch (placement) {\n\t\tcase \"top\":\n\t\t\treturn { top: rect.top - GAP, left: rect.left + rect.width / 2 };\n\t\tcase \"bottom\":\n\t\t\treturn { top: rect.bottom + GAP, left: rect.left + rect.width / 2 };\n\t\tcase \"left\":\n\t\t\treturn { top: rect.top + rect.height / 2, left: rect.left - GAP };\n\t\tcase \"right\":\n\t\t\treturn { top: rect.top + rect.height / 2, left: rect.right + GAP };\n\t}\n}\n\nexport function Tooltip({ content, children, placement = \"top\" }: TooltipProps) {\n\tconst [visible, setVisible] = useState(false);\n\tconst [coords, setCoords] = useState<Coords>({ top: 0, left: 0 });\n\tconst triggerRef = useRef<HTMLSpanElement>(null);\n\tconst id = useId();\n\n\tconst show = useCallback(() => {\n\t\tif (!triggerRef.current) return;\n\t\tsetCoords(getCoords(triggerRef.current.getBoundingClientRect(), placement));\n\t\tsetVisible(true);\n\t}, [placement]);\n\n\tconst hide = useCallback(() => setVisible(false), []);\n\n\treturn (\n\t\t<>\n\t\t\t{/* biome-ignore lint/a11y/noStaticElementInteractions: tooltip trigger wraps arbitrary children; mouse events are supplementary to the child's own keyboard/focus handlers */}\n\t\t\t<span\n\t\t\t\tref={triggerRef}\n\t\t\t\tclassName={styles.trigger}\n\t\t\t\taria-describedby={visible ? id : undefined}\n\t\t\t\tonMouseEnter={show}\n\t\t\t\tonMouseLeave={hide}\n\t\t\t\tonFocus={show}\n\t\t\t\tonBlur={hide}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t\t{visible &&\n\t\t\t\ttypeof document !== \"undefined\" &&\n\t\t\t\tcreatePortal(\n\t\t\t\t\t<div\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\trole=\"tooltip\"\n\t\t\t\t\t\tclassName={styles.tooltip}\n\t\t\t\t\t\tdata-placement={placement}\n\t\t\t\t\t\tstyle={{ top: coords.top, left: coords.left }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</div>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n","@layer ds-components {\n .treeItem {\n --tree-item-indent: 0px;\n width: 100%;\n background-color: var(--ds-color-white);\n\n &[data-odd-row] > .content {\n background-color: var(--color-neutral-50);\n &:hover { background-color: var(--color-neutral-100); }\n }\n\n &[data-bordered][data-level=\"0\"] {\n border: 1px solid var(--color-neutral-200);\n border-radius: var(--radius-lg);\n margin-bottom: var(--spacing-xs);\n overflow: hidden;\n\n & > .content { padding-left: var(--spacing-md); }\n & > .childrenSlot { padding-bottom: var(--spacing-xs); }\n\n &[data-expanded] > .content:hover {\n border-radius: var(--radius-lg) var(--radius-lg) 0 0;\n }\n }\n\n &[data-expanded] > .content .expandBtn {\n transform: rotate(180deg);\n }\n\n &[data-disabled] > .content {\n opacity: 0.6;\n cursor: not-allowed;\n &:hover { background-color: transparent; }\n }\n\n &:focus-visible {\n outline: none;\n & > .content {\n outline: 2px solid var(--color-primary);\n outline-offset: -2px;\n }\n }\n }\n\n .content {\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n padding: var(--spacing-sm) var(--spacing-md);\n padding-left: calc(var(--spacing-md) + var(--tree-item-indent));\n min-height: 44px;\n transition: background-color var(--duration-fast) var(--ease-out);\n &:hover { background-color: var(--color-neutral-100); }\n }\n\n .dragHandle {\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: grab;\n color: var(--color-neutral-400);\n padding: var(--spacing-xs);\n margin: calc(-1 * var(--spacing-xs));\n border-radius: var(--radius-sm);\n flex-shrink: 0;\n transition: color var(--duration-fast) var(--ease-out), background-color var(--duration-fast) var(--ease-out);\n &:hover { color: var(--color-neutral-500); background-color: var(--color-neutral-200); }\n }\n\n .indent { width: 0; flex-shrink: 0; }\n\n .checkbox { flex-shrink: 0; }\n\n .slotsWrapper {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 1;\n gap: var(--spacing-sm);\n min-width: 0;\n }\n\n .label {\n flex: 1;\n font-size: var(--text-sm);\n color: var(--color-neutral-500);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .meta {\n font-size: var(--text-sm);\n color: var(--color-neutral-400);\n flex-shrink: 0;\n }\n\n .expandBtn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: none;\n background: transparent;\n border-radius: var(--radius-sm);\n cursor: pointer;\n color: var(--color-neutral-400);\n flex-shrink: 0;\n margin-left: auto;\n transition: color var(--duration-fast) var(--ease-out), background-color var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out);\n\n &:hover { background-color: var(--color-neutral-200); color: var(--color-neutral-500); }\n &:focus-visible { outline: 2px solid var(--color-primary); outline-offset: -2px; }\n &:disabled { cursor: not-allowed; opacity: 0.6; }\n }\n\n .expandPlaceholder { width: 28px; height: 28px; flex-shrink: 0; }\n\n .childrenSlot {\n display: block;\n width: 100%;\n &[hidden] { display: none; }\n }\n}\n","import type { DragEvent, KeyboardEvent, ReactNode } from \"react\";\nimport { useRef } from \"react\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Icon } from \"../Icon\";\nimport styles from \"./TreeItem.module.css\";\nimport type { TreeItemData } from \"./treeTypes\";\n\nexport interface TreeItemDragPayload {\n\tevent: globalThis.DragEvent;\n\titem: TreeItemData;\n\tparentId: string | number | null;\n}\n\nexport interface TreeItemProps {\n\titem: TreeItemData;\n\tlevel?: number;\n\texpanded?: boolean;\n\tselected?: boolean;\n\tdraggable?: boolean;\n\tselectable?: boolean;\n\thasChildren?: boolean;\n\tindentSize?: number;\n\tparentId?: string | number | null;\n\tbordered?: boolean;\n\tflatIndex?: number;\n\tstriped?: boolean;\n\tonToggleExpand: (id: string | number) => void;\n\tonToggleSelect: (id: string | number) => void;\n\tonDragStart?: (payload: TreeItemDragPayload) => void;\n\tonDragEnd?: (payload: { event: globalThis.DragEvent; item: TreeItemData }) => void;\n\tonDragOver?: (payload: TreeItemDragPayload) => void;\n\tonDragLeave?: (payload: { event: globalThis.DragEvent; item: TreeItemData }) => void;\n\tonDrop?: (payload: TreeItemDragPayload) => void;\n\tchildren?: ReactNode;\n\t\"data-testid\"?: string;\n\tlabelSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tmetaSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tprefixSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tsuffixSlot?: (item: TreeItemData, level: number) => ReactNode;\n}\n\nfunction on(v: boolean | undefined): \"\" | undefined {\n\treturn v ? \"\" : undefined;\n}\n\nfunction isEditableTarget(target: HTMLElement): boolean {\n\treturn [\"INPUT\", \"TEXTAREA\", \"SELECT\"].includes(target.tagName) || target.isContentEditable;\n}\n\nfunction isArrowToggle(key: string, hasChildren: boolean, expanded: boolean): boolean {\n\tif (key === \"ArrowRight\") return hasChildren && !expanded;\n\tif (key === \"ArrowLeft\") return hasChildren && expanded;\n\treturn false;\n}\n\nfunction handleTreeKeyDown(\n\te: KeyboardEvent<HTMLDivElement>,\n\titem: TreeItemData,\n\thasChildren: boolean,\n\texpanded: boolean,\n\tselectable: boolean,\n\tonToggleExpand: (id: string | number) => void,\n\tonToggleSelect: (id: string | number) => void,\n) {\n\tif (item.disabled || isEditableTarget(e.target as HTMLElement)) return;\n\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\te.preventDefault();\n\t\tif (hasChildren) onToggleExpand(item.id);\n\t\telse if (selectable) onToggleSelect(item.id);\n\t\treturn;\n\t}\n\tif (isArrowToggle(e.key, hasChildren, expanded)) {\n\t\te.preventDefault();\n\t\tonToggleExpand(item.id);\n\t}\n}\n\nfunction buildDragHandlers(\n\titem: TreeItemData,\n\tparentId: string | number | null,\n\tdraggable: boolean,\n\tdraggingFromHandle: React.MutableRefObject<boolean>,\n\tonDragStart?: (payload: TreeItemDragPayload) => void,\n\tonDragEnd?: (payload: { event: globalThis.DragEvent; item: TreeItemData }) => void,\n\tonDragOver?: (payload: TreeItemDragPayload) => void,\n\tonDragLeave?: (payload: { event: globalThis.DragEvent; item: TreeItemData }) => void,\n\tonDrop?: (payload: TreeItemDragPayload) => void,\n) {\n\treturn {\n\t\thandleDragStart(e: DragEvent) {\n\t\t\tif (!draggingFromHandle.current) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.dataTransfer.setData(\"application/json\", JSON.stringify({ id: item.id, parentId }));\n\t\t\te.dataTransfer.effectAllowed = \"move\";\n\t\t\tonDragStart?.({ event: e.nativeEvent, item, parentId });\n\t\t},\n\t\thandleDragEnd(e: DragEvent) {\n\t\t\tdraggingFromHandle.current = false;\n\t\t\tonDragEnd?.({ event: e.nativeEvent, item });\n\t\t},\n\t\thandleDragOver(e: DragEvent) {\n\t\t\tif (!draggable) return;\n\t\t\te.preventDefault();\n\t\t\te.dataTransfer.dropEffect = \"move\";\n\t\t\tonDragOver?.({ event: e.nativeEvent, item, parentId });\n\t\t},\n\t\thandleDragLeave(e: DragEvent) {\n\t\t\tonDragLeave?.({ event: e.nativeEvent, item });\n\t\t},\n\t\thandleDrop(e: DragEvent) {\n\t\t\te.preventDefault();\n\t\t\tonDrop?.({ event: e.nativeEvent, item, parentId });\n\t\t},\n\t};\n}\n\nfunction TreeItemSlots({\n\titem,\n\tlevel,\n\tselectable,\n\tselected,\n\tprefixSlot,\n\tlabelSlot,\n\tmetaSlot,\n\tsuffixSlot,\n\tonToggleSelect,\n}: {\n\titem: TreeItemData;\n\tlevel: number;\n\tselectable: boolean;\n\tselected: boolean;\n\tprefixSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tlabelSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tmetaSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tsuffixSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tonToggleSelect: (id: string | number) => void;\n}) {\n\treturn (\n\t\t<>\n\t\t\t{selectable && (\n\t\t\t\t<Checkbox\n\t\t\t\t\tchecked={selected}\n\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\tclassName={styles.checkbox}\n\t\t\t\t\tonChange={() => !item.disabled && onToggleSelect(item.id)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{prefixSlot?.(item, level)}\n\t\t\t<div className={styles.slotsWrapper}>\n\t\t\t\t{labelSlot ? (\n\t\t\t\t\tlabelSlot(item, level)\n\t\t\t\t) : (\n\t\t\t\t\t<span className={styles.label} data-testid=\"tree-item-label\">\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{metaSlot\n\t\t\t\t\t? metaSlot(item, level)\n\t\t\t\t\t: item.meta && <span className={styles.meta}>{item.meta}</span>}\n\t\t\t\t{suffixSlot?.(item, level)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport function TreeItem({\n\titem,\n\tlevel = 0,\n\texpanded = false,\n\tselected = false,\n\tdraggable = false,\n\tselectable = false,\n\thasChildren = false,\n\tindentSize = 24,\n\tparentId = null,\n\tbordered = false,\n\tflatIndex = 0,\n\tstriped = false,\n\tonToggleExpand,\n\tonToggleSelect,\n\tonDragStart,\n\tonDragEnd,\n\tonDragOver,\n\tonDragLeave,\n\tonDrop,\n\tchildren,\n\t\"data-testid\": dataTestId,\n\tlabelSlot,\n\tmetaSlot,\n\tprefixSlot,\n\tsuffixSlot,\n}: TreeItemProps) {\n\tconst draggingFromHandle = useRef(false);\n\n\tconst handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) =>\n\t\thandleTreeKeyDown(e, item, hasChildren, expanded, selectable, onToggleExpand, onToggleSelect);\n\n\tconst dragHandlers = buildDragHandlers(\n\t\titem,\n\t\tparentId,\n\t\tdraggable,\n\t\tdraggingFromHandle,\n\t\tonDragStart,\n\t\tonDragEnd,\n\t\tonDragOver,\n\t\tonDragLeave,\n\t\tonDrop,\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.treeItem}\n\t\t\tstyle={{ \"--tree-item-indent\": `${level * indentSize}px` } as React.CSSProperties}\n\t\t\tdata-level={level}\n\t\t\tdata-expanded={on(expanded)}\n\t\t\tdata-selected={on(selected)}\n\t\t\tdata-disabled={on(item.disabled)}\n\t\t\tdata-has-children={on(hasChildren)}\n\t\t\tdata-bordered={on(bordered)}\n\t\t\tdata-striped={on(striped)}\n\t\t\tdata-odd-row={on(striped && flatIndex % 2 === 1)}\n\t\t\tdata-testid={dataTestId}\n\t\t\trole=\"treeitem\"\n\t\t\taria-level={level + 1}\n\t\t\taria-expanded={hasChildren ? expanded : undefined}\n\t\t\taria-selected={selectable ? selected : undefined}\n\t\t\taria-disabled={item.disabled}\n\t\t\ttabIndex={0}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\tonMouseUp={() => {\n\t\t\t\tdraggingFromHandle.current = false;\n\t\t\t}}\n\t\t>\n\t\t\t{/* biome-ignore lint/a11y/noStaticElementInteractions: drag-and-drop container captures native DnD events; keyboard interaction is on the parent treeitem */}\n\t\t\t<div\n\t\t\t\tclassName={styles.content}\n\t\t\t\tdraggable={draggable && !item.disabled}\n\t\t\t\tonDragStart={dragHandlers.handleDragStart}\n\t\t\t\tonDragEnd={dragHandlers.handleDragEnd}\n\t\t\t\tonDragOver={dragHandlers.handleDragOver}\n\t\t\t\tonDragLeave={dragHandlers.handleDragLeave}\n\t\t\t\tonDrop={dragHandlers.handleDrop}\n\t\t\t>\n\t\t\t\t{draggable && (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={styles.dragHandle}\n\t\t\t\t\t\tdata-testid=\"tree-item-drag-handle\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tdraggingFromHandle.current = true;\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonTouchStart={(e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tdraggingFromHandle.current = true;\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"drag-handle-outline\" size={18} />\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\n\t\t\t\t<div className={styles.indent} aria-hidden=\"true\" />\n\n\t\t\t\t<TreeItemSlots\n\t\t\t\t\titem={item}\n\t\t\t\t\tlevel={level}\n\t\t\t\t\tselectable={selectable}\n\t\t\t\t\tselected={selected}\n\t\t\t\t\tprefixSlot={prefixSlot}\n\t\t\t\t\tlabelSlot={labelSlot}\n\t\t\t\t\tmetaSlot={metaSlot}\n\t\t\t\t\tsuffixSlot={suffixSlot}\n\t\t\t\t\tonToggleSelect={onToggleSelect}\n\t\t\t\t/>\n\n\t\t\t\t{hasChildren ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.expandBtn}\n\t\t\t\t\t\taria-expanded={expanded}\n\t\t\t\t\t\taria-label={expanded ? \"Collapse\" : \"Expand\"}\n\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tonToggleExpand(item.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"chevron-down-outline\" size={16} />\n\t\t\t\t\t</button>\n\t\t\t\t) : (\n\t\t\t\t\t<span className={styles.expandPlaceholder} aria-hidden=\"true\" />\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{hasChildren && (\n\t\t\t\t<div className={styles.childrenSlot} hidden={!expanded}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .treeList {\n display: flex;\n flex-direction: column;\n width: 100%;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport { TreeItem } from \"../TreeItem/TreeItem\";\nimport type { TreeItemData } from \"../TreeItem/treeTypes\";\nimport styles from \"./TreeList.module.css\";\n\nexport interface TreeListProps {\n\titems?: TreeItemData[];\n\tdraggable?: boolean;\n\texpandedIds?: (string | number)[];\n\tselectedIds?: (string | number)[];\n\tselectable?: boolean;\n\tindentSize?: number;\n\tbordered?: boolean;\n\tstriped?: boolean;\n\tonExpandChange?: (expandedIds: (string | number)[]) => void;\n\tonSelectChange?: (selectedIds: (string | number)[]) => void;\n\tonReorder?: (payload: {\n\t\titemId: string | number;\n\t\tfromParentId: string | number | null;\n\t\ttoParentId: string | number | null;\n\t\tfromIndex: number;\n\t\ttoIndex: number;\n\t}) => void;\n\tlabelSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tmetaSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tprefixSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tsuffixSlot?: (item: TreeItemData, level: number) => ReactNode;\n\t\"data-testid\"?: string;\n}\n\nfunction findItemById(items: TreeItemData[], id: string | number): TreeItemData | null {\n\tfor (const item of items) {\n\t\tif (item.id === id) return item;\n\t\tif (item.children) {\n\t\t\tconst found = findItemById(item.children, id);\n\t\t\tif (found) return found;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction buildFlatIndexMap(\n\titems: TreeItemData[],\n\texpandedIds: (string | number)[],\n): Map<string | number, number> {\n\tconst map = new Map<string | number, number>();\n\tlet idx = 0;\n\tfunction traverse(list: TreeItemData[]) {\n\t\tfor (const item of list) {\n\t\t\tmap.set(item.id, idx++);\n\t\t\tif (item.children?.length && expandedIds.includes(item.id)) traverse(item.children);\n\t\t}\n\t}\n\ttraverse(items);\n\treturn map;\n}\n\ninterface RecursiveProps {\n\titems: TreeItemData[];\n\tparentId: string | number | null;\n\tlevel: number;\n\texpandedIds: (string | number)[];\n\tselectedIds: (string | number)[];\n\tflatIndexMap: Map<string | number, number>;\n\tdraggable: boolean;\n\tselectable: boolean;\n\tbordered: boolean;\n\tstriped: boolean;\n\tindentSize: number;\n\tonToggleExpand: (id: string | number) => void;\n\tonToggleSelect: (id: string | number) => void;\n\tonDragStart: (p: {\n\t\tevent: globalThis.DragEvent;\n\t\titem: TreeItemData;\n\t\tparentId: string | number | null;\n\t}) => void;\n\tonDragEnd: (p: { event: globalThis.DragEvent; item: TreeItemData }) => void;\n\tonDragOver: (p: {\n\t\tevent: globalThis.DragEvent;\n\t\titem: TreeItemData;\n\t\tparentId: string | number | null;\n\t}) => void;\n\tonDrop: (p: {\n\t\tevent: globalThis.DragEvent;\n\t\titem: TreeItemData;\n\t\tparentId: string | number | null;\n\t}) => void;\n\tlabelSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tmetaSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tprefixSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tsuffixSlot?: (item: TreeItemData, level: number) => ReactNode;\n}\n\nfunction TreeListRecursive(props: RecursiveProps): ReactNode {\n\tconst { items, parentId, level, expandedIds, selectedIds, flatIndexMap } = props;\n\treturn items.map((item) => {\n\t\tconst hasChildren = Boolean(item.children?.length);\n\t\tconst isExpanded = expandedIds.includes(item.id);\n\t\treturn (\n\t\t\t<TreeItem\n\t\t\t\tkey={item.id}\n\t\t\t\titem={item}\n\t\t\t\tlevel={level}\n\t\t\t\tparentId={parentId}\n\t\t\t\texpanded={isExpanded}\n\t\t\t\tselected={selectedIds.includes(item.id)}\n\t\t\t\tdraggable={props.draggable}\n\t\t\t\tselectable={props.selectable}\n\t\t\t\tbordered={props.bordered}\n\t\t\t\tstriped={props.striped}\n\t\t\t\tflatIndex={flatIndexMap.get(item.id) ?? 0}\n\t\t\t\thasChildren={hasChildren}\n\t\t\t\tindentSize={props.indentSize}\n\t\t\t\tonToggleExpand={props.onToggleExpand}\n\t\t\t\tonToggleSelect={props.onToggleSelect}\n\t\t\t\tonDragStart={props.onDragStart}\n\t\t\t\tonDragEnd={props.onDragEnd}\n\t\t\t\tonDragOver={props.onDragOver}\n\t\t\t\tonDrop={props.onDrop}\n\t\t\t\tlabelSlot={props.labelSlot}\n\t\t\t\tmetaSlot={props.metaSlot}\n\t\t\t\tprefixSlot={props.prefixSlot}\n\t\t\t\tsuffixSlot={props.suffixSlot}\n\t\t\t>\n\t\t\t\t{hasChildren && isExpanded && item.children && (\n\t\t\t\t\t<TreeListRecursive\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\titems={item.children}\n\t\t\t\t\t\tparentId={item.id}\n\t\t\t\t\t\tlevel={level + 1}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</TreeItem>\n\t\t);\n\t});\n}\n\nexport function TreeList({\n\titems = [],\n\tdraggable = false,\n\texpandedIds: controlledExpandedIds,\n\tselectedIds: controlledSelectedIds,\n\tselectable = false,\n\tindentSize = 24,\n\tbordered = false,\n\tstriped = false,\n\tonExpandChange,\n\tonSelectChange,\n\tonReorder,\n\tlabelSlot,\n\tmetaSlot,\n\tprefixSlot,\n\tsuffixSlot,\n\t\"data-testid\": dataTestId,\n}: TreeListProps) {\n\tconst [internalExpanded, setInternalExpanded] = useState<(string | number)[]>([]);\n\tconst [internalSelected, setInternalSelected] = useState<(string | number)[]>([]);\n\tconst dragStateRef = useRef<{ itemId: string | number; parentId: string | number | null } | null>(\n\t\tnull,\n\t);\n\n\tconst expandedIds = controlledExpandedIds ?? internalExpanded;\n\tconst selectedIds = controlledSelectedIds ?? internalSelected;\n\tconst flatIndexMap = useMemo(() => buildFlatIndexMap(items, expandedIds), [items, expandedIds]);\n\n\tconst toggleExpand = useCallback(\n\t\t(id: string | number) => {\n\t\t\tconst next = expandedIds.includes(id)\n\t\t\t\t? expandedIds.filter((i) => i !== id)\n\t\t\t\t: [...expandedIds, id];\n\t\t\tif (!controlledExpandedIds) setInternalExpanded(next);\n\t\t\tonExpandChange?.(next);\n\t\t},\n\t\t[expandedIds, controlledExpandedIds, onExpandChange],\n\t);\n\n\tconst toggleSelect = useCallback(\n\t\t(id: string | number) => {\n\t\t\tconst next = selectedIds.includes(id)\n\t\t\t\t? selectedIds.filter((i) => i !== id)\n\t\t\t\t: [...selectedIds, id];\n\t\t\tif (!controlledSelectedIds) setInternalSelected(next);\n\t\t\tonSelectChange?.(next);\n\t\t},\n\t\t[selectedIds, controlledSelectedIds, onSelectChange],\n\t);\n\n\tconst handleDragStart = useCallback(\n\t\t(payload: {\n\t\t\tevent: globalThis.DragEvent;\n\t\t\titem: TreeItemData;\n\t\t\tparentId: string | number | null;\n\t\t}) => {\n\t\t\tdragStateRef.current = { itemId: payload.item.id, parentId: payload.parentId };\n\t\t},\n\t\t[],\n\t);\n\n\tconst handleDragEnd = useCallback((_p: { event: globalThis.DragEvent; item: TreeItemData }) => {\n\t\tdragStateRef.current = null;\n\t}, []);\n\n\tconst handleDragOver = useCallback(\n\t\t(payload: {\n\t\t\tevent: globalThis.DragEvent;\n\t\t\titem: TreeItemData;\n\t\t\tparentId: string | number | null;\n\t\t}) => {\n\t\t\tconst state = dragStateRef.current;\n\t\t\tif (!state || state.parentId !== payload.parentId) {\n\t\t\t\tif (payload.event.dataTransfer) payload.event.dataTransfer.dropEffect = \"none\";\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\tconst handleDrop = useCallback(\n\t\t(payload: {\n\t\t\tevent: globalThis.DragEvent;\n\t\t\titem: TreeItemData;\n\t\t\tparentId: string | number | null;\n\t\t}) => {\n\t\t\tconst state = dragStateRef.current;\n\t\t\tif (!state || state.parentId !== payload.parentId) return;\n\n\t\t\tconst sourceId = state.itemId;\n\t\t\tconst targetId = payload.item.id;\n\t\t\tif (sourceId === targetId) return;\n\n\t\t\tconst parentArray =\n\t\t\t\tpayload.parentId === null ? items : findItemById(items, payload.parentId)?.children;\n\n\t\t\tif (!parentArray) return;\n\n\t\t\tconst fromIndex = parentArray.findIndex((i) => i.id === sourceId);\n\t\t\tconst toIndex = parentArray.findIndex((i) => i.id === targetId);\n\t\t\tif (fromIndex === -1 || toIndex === -1) return;\n\n\t\t\tonReorder?.({\n\t\t\t\titemId: sourceId,\n\t\t\t\tfromParentId: payload.parentId,\n\t\t\t\ttoParentId: payload.parentId,\n\t\t\t\tfromIndex,\n\t\t\t\ttoIndex,\n\t\t\t});\n\t\t},\n\t\t[items, onReorder],\n\t);\n\n\tconst recursiveProps: RecursiveProps = {\n\t\titems,\n\t\tparentId: null,\n\t\tlevel: 0,\n\t\texpandedIds,\n\t\tselectedIds,\n\t\tflatIndexMap,\n\t\tdraggable,\n\t\tselectable,\n\t\tbordered,\n\t\tstriped,\n\t\tindentSize,\n\t\tonToggleExpand: toggleExpand,\n\t\tonToggleSelect: toggleSelect,\n\t\tonDragStart: handleDragStart,\n\t\tonDragEnd: handleDragEnd,\n\t\tonDragOver: handleDragOver,\n\t\tonDrop: handleDrop,\n\t\tlabelSlot,\n\t\tmetaSlot,\n\t\tprefixSlot,\n\t\tsuffixSlot,\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.treeList}\n\t\t\trole=\"tree\"\n\t\t\tdata-draggable={draggable ? \"\" : undefined}\n\t\t\tdata-testid={dataTestId}\n\t\t>\n\t\t\t<TreeListRecursive {...recursiveProps} />\n\t\t</div>\n\t);\n}\n","@layer ds-layouts {\n .header {\n min-height: 50px;\n width: 100%;\n max-width: 1440px;\n display: flex;\n align-items: flex-start;\n margin: auto;\n padding: 10px 16px;\n }\n\n .titleSection {\n flex: 0 0 48%;\n text-align: left;\n }\n\n .title {\n font-weight: 300;\n font-size: 28px;\n color: var(--ds-ang-primary);\n line-height: 30px;\n }\n\n .actions {\n flex: 0 0 50%;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n @media (max-width: 780px) {\n .header {\n flex-direction: column;\n align-items: center;\n }\n\n .titleSection {\n flex: none;\n width: 98%;\n text-align: center;\n margin-bottom: 20px;\n }\n\n .actions {\n flex: none;\n width: 98%;\n justify-content: center;\n }\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./AdminPageHeader.module.css\";\n\nexport interface AdminPageHeaderProps {\n\ttitle: string;\n\tactions?: ReactNode;\n}\n\nexport function AdminPageHeader({ title, actions }: AdminPageHeaderProps) {\n\treturn (\n\t\t<header className={styles.header}>\n\t\t\t<div className={styles.titleSection}>\n\t\t\t\t<span className={styles.title}>{title}</span>\n\t\t\t</div>\n\t\t\t{actions && <div className={styles.actions}>{actions}</div>}\n\t\t</header>\n\t);\n}\n","@layer ang-components {\n .shell {\n display: flex;\n flex-direction: column;\n height: 100dvh;\n width: 100%;\n overflow: hidden;\n }\n\n .body {\n display: flex;\n flex: 1;\n overflow: hidden;\n }\n\n .sidebarSlot {\n display: contents;\n }\n\n .contentArea {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n }\n\n .main {\n flex: 1;\n overflow: auto;\n position: relative;\n }\n\n .tabBarSlot {\n flex-shrink: 0;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { NavBar } from \"../../components/NavBar\";\nimport { PinLockOverlay } from \"../../components/PinLockOverlay\";\nimport styles from \"./AppShell.module.css\";\n\nexport interface AppShellProps {\n\trestaurantName: string;\n\tonMenuToggle: () => void;\n\tonLogoClick: () => void;\n\tonRightToggle: () => void;\n\tsidebar: ReactNode;\n\tchildren: ReactNode;\n\ttabBar?: ReactNode;\n\theaderRight?: ReactNode;\n\tisPinLocked?: boolean;\n\tpinLockContent?: ReactNode;\n\tisLoading?: boolean;\n}\n\nexport function AppShell({\n\trestaurantName,\n\tonMenuToggle,\n\tonLogoClick,\n\tonRightToggle,\n\tsidebar,\n\tchildren,\n\ttabBar,\n\theaderRight,\n\tisPinLocked = false,\n\tpinLockContent,\n\tisLoading = false,\n}: AppShellProps) {\n\tif (isPinLocked) {\n\t\treturn <PinLockOverlay isLocked>{pinLockContent}</PinLockOverlay>;\n\t}\n\n\treturn (\n\t\t<div className={styles.shell}>\n\t\t\t<NavBar\n\t\t\t\trestaurantName={restaurantName}\n\t\t\t\tonMenuToggle={onMenuToggle}\n\t\t\t\tonLogoClick={onLogoClick}\n\t\t\t\tonRightToggle={onRightToggle}\n\t\t\t\tisLoading={isLoading}\n\t\t\t\trightSlot={headerRight}\n\t\t\t/>\n\t\t\t<div className={styles.body}>\n\t\t\t\t<div className={styles.sidebarSlot}>{sidebar}</div>\n\t\t\t\t<div className={styles.contentArea}>\n\t\t\t\t\t<main className={styles.main}>{children}</main>\n\t\t\t\t\t{tabBar && <div className={styles.tabBarSlot}>{tabBar}</div>}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n",".divider {\n border: none;\n background-color: var(--color-border, var(--color-neutral-200));\n flex-shrink: 0;\n}\n\n.divider[data-orientation='horizontal'] {\n width: 100%;\n height: 1px;\n}\n\n.divider[data-orientation='vertical'] {\n height: 100%;\n width: 1px;\n align-self: stretch;\n}\n\n.divider[data-spacing='sm'] {\n margin: var(--spacing-sm) 0;\n}\n\n.divider[data-orientation='vertical'][data-spacing='sm'] {\n margin: 0 var(--spacing-sm);\n}\n\n.divider[data-spacing='md'] {\n margin: var(--spacing-md) 0;\n}\n\n.divider[data-orientation='vertical'][data-spacing='md'] {\n margin: 0 var(--spacing-md);\n}\n\n.divider[data-spacing='lg'] {\n margin: var(--spacing-lg) 0;\n}\n\n.divider[data-orientation='vertical'][data-spacing='lg'] {\n margin: 0 var(--spacing-lg);\n}\n","import styles from \"./Divider.module.css\";\n\nexport interface DividerProps {\n\torientation?: \"horizontal\" | \"vertical\";\n\tspacing?: \"sm\" | \"md\" | \"lg\";\n\tclassName?: string;\n}\n\nexport function Divider({ orientation = \"horizontal\", spacing = \"md\", className }: DividerProps) {\n\treturn (\n\t\t<hr\n\t\t\tclassName={[styles.divider, className].filter(Boolean).join(\" \")}\n\t\t\tdata-orientation={orientation}\n\t\t\tdata-spacing={spacing}\n\t\t\taria-orientation={orientation}\n\t\t/>\n\t);\n}\n","@layer ds-layouts {\n .grid {\n display: grid;\n grid-template-columns: var(--grid-columns, repeat(1, minmax(0, 1fr)));\n gap: var(--grid-gap, var(--ds-space-3));\n }\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport styles from \"./Grid.module.css\";\n\nexport type GridGap = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface GridProps {\n\tcolumns?: number | string;\n\tgap?: GridGap;\n\tchildren: ReactNode;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n}\n\nconst GAP_MAP: Record<GridGap, string> = {\n\txs: \"var(--ds-space-1)\",\n\tsm: \"var(--ds-space-2)\",\n\tmd: \"var(--ds-space-3)\",\n\tlg: \"var(--ds-space-4)\",\n\txl: \"var(--ds-space-6)\",\n};\n\nexport function Grid({ columns = 1, gap = \"md\", children, className, style }: GridProps) {\n\tconst gridTemplateColumns =\n\t\ttypeof columns === \"number\" ? `repeat(${columns}, minmax(0, 1fr))` : columns;\n\n\tconst gridStyle: CSSProperties = {\n\t\t\"--grid-columns\": gridTemplateColumns,\n\t\t\"--grid-gap\": GAP_MAP[gap],\n\t\t...style,\n\t} as CSSProperties;\n\n\treturn (\n\t\t<div className={[styles.grid, className].filter(Boolean).join(\" \")} style={gridStyle}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","@layer ds-layouts {\n .page {\n text-align: center;\n background: #ffffff;\n color: var(--ds-ang-secondary);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 100dvh;\n min-width: 100dvw;\n gap: 1rem;\n position: relative;\n background-image: url(\"/assets/angular/dsBgBottom.svg\");\n background-position: bottom;\n background-repeat: no-repeat;\n background-size: contain;\n font-size: var(--ds-ang-font-size-base);\n }\n\n @media (min-width: 768px) {\n .page {\n background-image: url(\"/assets/angular/login-background-default.svg\");\n background-position: right top;\n background-repeat: no-repeat;\n background-size: 30% auto;\n }\n\n .page::after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 0;\n width: 30%;\n height: 100%;\n background-image: url(\"/assets/angular/login-background-default.svg\");\n background-position: left 40px;\n background-repeat: no-repeat;\n background-size: 100% auto;\n transform: rotate(180deg);\n z-index: 0;\n }\n }\n\n .card {\n position: relative;\n z-index: 1;\n background-color: transparent;\n border-radius: 1rem;\n padding: 2rem 1rem;\n width: 100%;\n max-width: 460px;\n animation: cardEntrance 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) 0.1s both;\n }\n\n @media (min-width: 768px) {\n .card {\n background-color: #ffffff;\n border-radius: 16px;\n border: 1px solid var(--ds-ang-neutral-200);\n box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);\n }\n }\n}\n\n@keyframes cardEntrance {\n from {\n opacity: 0;\n transform: scale(0.95) translateY(10px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n\t.card {\n\t\tanimation: none;\n\t}\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./LoginPageLayout.module.css\";\n\nexport interface LoginPageLayoutProps {\n\tchildren: ReactNode;\n}\n\nexport function LoginPageLayout({ children }: LoginPageLayoutProps) {\n\treturn (\n\t\t<main className={styles.page}>\n\t\t\t<div className={styles.card}>{children}</div>\n\t\t</main>\n\t);\n}\n","@layer ds-layouts {\n .root {\n display: grid;\n grid-template-columns: var(--ds-sidebar-width) 1fr;\n grid-template-rows: 1fr;\n min-height: 100vh;\n transition: grid-template-columns var(--ds-duration-base) var(--ds-ease-out);\n\n /* Collapsed sidebar */\n &[data-sidebar-collapsed] {\n grid-template-columns: var(--ds-sidebar-collapsed-width) 1fr;\n }\n\n /* Hide sidebar on mobile */\n @media (max-width: 768px) {\n grid-template-columns: 1fr;\n }\n }\n\n .sidebar {\n grid-row: 1;\n grid-column: 1;\n position: sticky;\n top: 0;\n height: 100vh;\n overflow-y: auto;\n overflow-x: hidden;\n background-color: var(--ds-color-surface);\n border-right: 1px solid var(--ds-color-border);\n z-index: var(--ds-z-sticky);\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n\n .main {\n grid-row: 1;\n grid-column: 2;\n display: grid;\n grid-template-rows: auto 1fr;\n min-height: 100vh;\n overflow: hidden;\n\n @media (max-width: 768px) {\n grid-column: 1;\n }\n }\n\n .header {\n grid-row: 1;\n position: sticky;\n top: 0;\n height: var(--ds-header-height);\n background-color: var(--ds-color-surface);\n border-bottom: 1px solid var(--ds-color-border);\n z-index: var(--ds-z-raised);\n display: flex;\n align-items: center;\n }\n\n .content {\n grid-row: 2;\n padding: var(--ds-space-6);\n overflow-y: auto;\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./PageLayout.module.css\";\n\nexport interface PageLayoutProps {\n\tsidebar?: ReactNode;\n\theader?: ReactNode;\n\tchildren: ReactNode;\n\tcollapsed?: boolean;\n\tclassName?: string;\n}\n\nexport function PageLayout({\n\tsidebar,\n\theader,\n\tchildren,\n\tcollapsed = false,\n\tclassName,\n}: PageLayoutProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={[styles.root, className].filter(Boolean).join(\" \")}\n\t\t\tdata-sidebar-collapsed={collapsed ? \"\" : undefined}\n\t\t>\n\t\t\t{sidebar && (\n\t\t\t\t<aside className={styles.sidebar} aria-label=\"Navegación lateral\">\n\t\t\t\t\t{sidebar}\n\t\t\t\t</aside>\n\t\t\t)}\n\t\t\t<div className={styles.main}>\n\t\t\t\t{header && <header className={styles.header}>{header}</header>}\n\t\t\t\t<main className={styles.content}>{children}</main>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import type { ComponentPropsWithoutRef, CSSProperties, ElementType, ReactNode } from \"react\";\n\nexport type StackDirection = \"vertical\" | \"horizontal\";\nexport type StackGap = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\nexport type StackAlign = \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\nexport type StackJustify = \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n\nexport interface StackProps<T extends ElementType = \"div\"> {\n\tas?: T;\n\tdirection?: StackDirection;\n\tgap?: StackGap;\n\talign?: StackAlign;\n\tjustify?: StackJustify;\n\twrap?: boolean;\n\tchildren: ReactNode;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n}\n\nconst GAP_MAP: Record<StackGap, string> = {\n\txs: \"var(--ds-space-1)\",\n\tsm: \"var(--ds-space-2)\",\n\tmd: \"var(--ds-space-3)\",\n\tlg: \"var(--ds-space-4)\",\n\txl: \"var(--ds-space-6)\",\n\t\"2xl\": \"var(--ds-space-8)\",\n};\n\nconst JUSTIFY_MAP: Record<StackJustify, string> = {\n\tstart: \"flex-start\",\n\tcenter: \"center\",\n\tend: \"flex-end\",\n\tbetween: \"space-between\",\n\taround: \"space-around\",\n\tevenly: \"space-evenly\",\n};\n\nconst ALIGN_MAP: Record<StackAlign, string> = {\n\tstart: \"flex-start\",\n\tcenter: \"center\",\n\tend: \"flex-end\",\n\tstretch: \"stretch\",\n\tbaseline: \"baseline\",\n};\n\nexport function Stack<T extends ElementType = \"div\">({\n\tas,\n\tdirection = \"vertical\",\n\tgap = \"md\",\n\talign,\n\tjustify,\n\twrap = false,\n\tchildren,\n\tclassName,\n\tstyle,\n\t...rest\n}: StackProps<T> & Omit<ComponentPropsWithoutRef<T>, keyof StackProps<T>>) {\n\tconst Component = (as ?? \"div\") as ElementType;\n\n\tconst stackStyle: CSSProperties = {\n\t\tdisplay: \"flex\",\n\t\tflexDirection: direction === \"vertical\" ? \"column\" : \"row\",\n\t\tgap: GAP_MAP[gap],\n\t\talignItems: align ? ALIGN_MAP[align] : undefined,\n\t\tjustifyContent: justify ? JUSTIFY_MAP[justify] : undefined,\n\t\tflexWrap: wrap ? \"wrap\" : undefined,\n\t\t...style,\n\t};\n\n\treturn (\n\t\t<Component className={className} style={stackStyle} {...rest}>\n\t\t\t{children}\n\t\t</Component>\n\t);\n}\n","import type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport function portal(children: ReactNode, container?: Element): ReturnType<typeof createPortal> {\n\treturn createPortal(children, container ?? document.body);\n}\n"],"mappings":"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Y,GAAwB,CACpC,qKACA,YACA,CAEY,GAA0B,CACtC,sHACA,YACA,CAEY,GAA4B,CACxC,8MACA,YACA,CAEY,GAA4B,CACxC,mYACA,YACA,CAEY,GAA4B,CACxC,6MACA,YACA,CAEY,GAA6B,CACzC,kYACA,YACA,CAEY,GAA6B,CACzC,iNACA,YACA,CAEY,GAA0B,CACtC,iNACA,YACA,CAEY,GAAsB,CAClC,mbACA,YACA,CAEY,GAAoB,CAChC,knBACA,YACA,CAEY,GAAqB,CACjC,oMACA,YACA,CAEY,GAA8B,CAC1C,0oBACA,YACA,CAEY,GAA4B,CACxC,ioBACA,YACA,CAEY,GAA4B,CACxC,koBACA,YACA,CAEY,GAA2B,CACvC,0gBACA,YACA,CAEY,GAAsB,CAClC,gyBACA,YACA,CAEY,GAAwB,CACpC,y1CACA,YACA,CAEY,GAAgC,CAC5C,4gBACA,YACA,CAEY,GAAoC,CAChD,2HACA,YACA,CAEY,GAAgC,CAC5C,wXACA,YACA,CAEY,GAA6B,CACzC,4tBACA,YACA,CAEY,GAA2B,CACvC,wMACA,YACA,CAEY,GAAwB,CACpC,gUACA,YACA,CAEY,GAAqB,CACjC,8YACA,YACA,CAEY,GAA2B,CACvC,kWACA,YACA,CAEY,GAAsB,CAClC,olBACA,YACA,CAEY,GAAsB,CAClC,shBACA,YACA,CAEY,GAA0B,CACtC,2tBACA,YACA,CAEY,GAAuB,CACnC,idACA,YACA,CAEY,GAAwB,CACpC,49BACA,YACA,CAEY,GAAuB,CACnC,uTACA,YACA,CAEY,GAAmB,CAC/B,6mBACA,YACA,CAEY,GAAmB,CAC/B,wkCACA,YACA,CAEY,GAAqB,CACjC,k2BACA,YACA,CAEY,GAAqB,CACjC,uZACA,YACA,CAEY,GAAuB,CACnC,ivCACA,YACA,CAEY,GAAoB,CAChC,6vBACA,YACA,CAEY,GAAsB,CAClC,0hBACA,YACA,CAEY,GAAwB,CACpC,wWACA,YACA,CAEY,GAAoB,CAChC,iYACA,YACA,CAEY,GAAwB,CACpC,q1BACA,YACA,CAEY,GAAmB,CAC/B,mjBACA,YACA,CAEY,GAAiC,CAC7C,4sBACA,YACA,CAEY,GAAwB,CACpC,2iBACA,YACA,CAEY,GAAwB,CACpC,ggBACA,YACA,CAEY,GAAwB,CACpC,2iBACA,YACA,CAEY,GAAwB,CACpC,ogBACA,YACA,CAEY,GAAwB,CACpC,mrBACA,YACA,CAEY,GAAmB,CAC/B,mhBACA,YACA,CAEY,GAAuB,CACnC,qiBACA,YACA,CAEY,GAAuB,CACnC,yIACA,YACA,CAEY,GAA+B,CAC3C,u2BACA,YACA,CAEY,GAA+B,CAC3C,k0BACA,YACA,CAEY,GAAoB,CAChC,0YACA,YACA,CAEY,GAA0B,CACtC,2PACA,YACA,CAEY,GAA8B,CAC1C,kTACA,YACA,CAEY,GAAoC,CAChD,4NACA,YACA,CAEY,GAA8B,CAC1C,4NACA,YACA,CAEY,GAAoB,CAChC,kJACA,YACA,CAEY,GAA0B,CACtC,qzDACA,YACA,CAEY,GAA0B,CACtC,6sCACA,YACA,CAEY,GAA0B,CACtC,6kBACA,YACA,CAEY,GAAiC,CAC7C,64BACA,YACA,CAEY,GAAkB,CAC9B,wWACA,YACA,CAEY,GAAmB,CAC/B,qbACA,YACA,CAEY,GAAsB,CAClC,0eACA,YACA,CAEY,GAAc,CAC1B,yfACA,YACA,CAEY,GAAqB,CACjC,i3CACA,YACA,CAEY,GAAmC,CAC/C,+PACA,YACA,CAEY,GAA6B,CACzC,+PACA,YACA,CAEY,GAAmB,CAC/B,wNACA,YACA,CAEY,GAAuB,CACnC,oyBACA,YACA,CAEY,GAAmC,CAC/C,+5DACA,YACA,CAEY,GAAmC,CAC/C,4vBACA,YACA,CAEY,GAAqC,CACjD,0oBACA,YACA,CAEY,GAA+B,CAC3C,qRACA,YACA,CAEY,GAAoC,CAChD,iIACA,YACA,CAEY,GAAsC,CAClD,oFACA,YACA,CAEY,GAA8B,CAC1C,weACA,YACA,CAEY,GAA8B,CAC1C,uRACA,YACA,CAEY,GAAsB,CAClC,6nDACA,YACA,CAEY,GAAsB,CAClC,6NACA,YACA,CAEY,GAAwB,CACpC,ssBACA,YACA,CAEY,GAA0B,CACtC,qxBACA,YACA,CAEY,GAA6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"}
|
|
1
|
+
{"version":3,"file":"index.umd.js","names":[],"sources":["../src/components/Accordion/Accordion.module.css","../src/components/Accordion/Accordion.tsx","../src/components/Spinner/Spinner.module.css","../src/components/Spinner/Spinner.tsx","../src/components/Button/Button.module.css","../src/components/Button/Button.tsx","../src/components/Icon/Icon.module.css","../src/components/Icon/icons.ts","../src/components/Icon/Icon.tsx","../src/components/AppleSignInButton/AppleSignInButton.module.css","../src/components/AppleSignInButton/AppleSignInButton.tsx","../src/components/BackgroundWrapper/BackgroundWrapper.module.css","../src/components/BackgroundWrapper/BackgroundWrapper.tsx","../src/utils/cn.ts","../src/components/Badge/Badge.module.css","../src/components/Badge/Badge.tsx","../src/components/Card/Card.module.css","../src/components/Card/Card.tsx","../src/components/Charts/Charts.module.css","../src/components/Charts/Charts.tsx","../src/components/Checkbox/Checkbox.module.css","../src/components/Checkbox/Checkbox.tsx","../src/components/DataTable/DataTable.module.css","../src/components/DataTable/DataTable.tsx","../src/components/DatePicker/DatePicker.module.css","../src/components/DatePicker/DatePicker.tsx","../src/components/DateRangePicker/DateRangePicker.module.css","../src/components/DateRangePicker/DateRangePicker.tsx","../src/utils/focusTrap.ts","../src/components/Dialog/Dialog.module.css","../src/components/Dialog/Dialog.tsx","../src/components/DropdownButton/DropdownButton.module.css","../src/components/DropdownButton/DropdownButton.tsx","../src/components/DropdownMenu/DropdownMenu.module.css","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/Skeleton/Skeleton.module.css","../src/components/Skeleton/Skeleton.tsx","../src/components/ImagePreview/ImagePreview.module.css","../src/components/ImagePreview/ImagePreview.tsx","../src/components/DropZone/DropZone.module.css","../src/components/DropZone/dropZoneConstants.ts","../src/components/DropZone/DropZone.tsx","../src/components/DsProvider/DsProvider.tsx","../src/components/EmptyState/EmptyState.module.css","../src/components/EmptyState/EmptyState.tsx","../src/components/ErrorBoundary/ErrorBoundary.module.css","../src/components/ErrorBoundary/ErrorBoundary.tsx","../src/components/FormField/FormField.module.css","../src/components/FormField/FormField.tsx","../src/components/GoogleSignInButton/GoogleSignInButton.module.css","../src/components/GoogleSignInButton/GoogleSignInButton.tsx","../src/components/GroupedButtons/GroupedButtons.module.css","../src/components/GroupedButtons/GroupedButtons.tsx","../src/components/Header/Header.module.css","../src/components/Header/Header.tsx","../src/components/LanguageSelector/LanguageSelector.tsx","../src/components/LogoToteat/LogoToteat.module.css","../src/components/LogoToteat/LogoToteat.tsx","../src/components/Multiselect/Multiselect.module.css","../src/components/Multiselect/Multiselect.tsx","../src/components/NavBar/NavBar.module.css","../src/components/NavBar/NavBar.tsx","../src/components/Overlay/Overlay.module.css","../src/components/Overlay/Overlay.tsx","../src/components/OverlayMessage/OverlayMessage.module.css","../src/components/OverlayMessage/OverlayMessage.tsx","../src/components/PageLoadingOverlay/BreathingDotsCanvas.module.css","../src/components/PageLoadingOverlay/BreathingDotsCanvas.tsx","../src/components/PageLoadingOverlay/PageLoadingOverlay.module.css","../src/components/PageLoadingOverlay/ToteatLogo.module.css","../src/components/PageLoadingOverlay/ToteatLogo.tsx","../src/components/PageLoadingOverlay/PageLoadingOverlay.tsx","../src/components/PinLockOverlay/PinLockOverlay.module.css","../src/components/PinLockOverlay/PinLockOverlay.tsx","../src/components/Radio/Radio.module.css","../src/components/Radio/Radio.tsx","../src/components/Select/Select.module.css","../src/components/Select/Select.tsx","../src/components/Sidebar/Sidebar.module.css","../src/components/Sidebar/Sidebar.tsx","../src/components/SidebarNavItem/SidebarNavItem.module.css","../src/components/SidebarNavItem/SidebarNavItem.tsx","../src/components/SidebarNavSection/SidebarNavSection.module.css","../src/components/SidebarNavSection/SidebarNavSection.tsx","../src/components/TabBar/TabBar.module.css","../src/components/TabBar/TabBar.tsx","../src/components/Tabs/Tabs.module.css","../src/components/Tabs/Tabs.tsx","../src/components/Textarea/Textarea.module.css","../src/components/Textarea/Textarea.tsx","../src/components/TextInput/TextInput.module.css","../src/components/TextInput/TextInput.tsx","../src/components/ThemeGate/ThemeGate.tsx","../src/components/Toast/Toast.module.css","../src/components/Toast/useToast.ts","../src/components/Toast/Toast.tsx","../src/components/Toggle/Toggle.module.css","../src/components/Toggle/Toggle.tsx","../src/components/Tooltip/Tooltip.module.css","../src/components/Tooltip/Tooltip.tsx","../src/components/TreeItem/TreeItem.module.css","../src/components/TreeItem/TreeItem.tsx","../src/components/TreeList/TreeList.module.css","../src/components/TreeList/TreeList.tsx","../src/layouts/AdminPageHeader/AdminPageHeader.module.css","../src/layouts/AdminPageHeader/AdminPageHeader.tsx","../src/layouts/AppShell/AppShell.module.css","../src/layouts/AppShell/AppShell.tsx","../src/layouts/Divider/Divider.module.css","../src/layouts/Divider/Divider.tsx","../src/layouts/Grid/Grid.module.css","../src/layouts/Grid/Grid.tsx","../src/layouts/LoginPageLayout/LoginPageLayout.module.css","../src/layouts/LoginPageLayout/LoginPageLayout.tsx","../src/layouts/PageLayout/PageLayout.module.css","../src/layouts/PageLayout/PageLayout.tsx","../src/layouts/Stack/Stack.tsx","../src/utils/portal.ts"],"sourcesContent":["@layer ds-components {\n .accordion {\n display: flex;\n flex-direction: column;\n font-family: var(--font-family-base);\n color: var(--color-text);\n }\n\n /* ── Item ── */\n .item {\n border-bottom: 1px solid var(--color-border);\n\n &:first-child {\n border-top: 1px solid var(--color-border);\n }\n }\n\n /* ── Trigger ── */\n .trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: var(--spacing-md) var(--spacing-lg);\n background: none;\n border: none;\n cursor: pointer;\n text-align: left;\n font-family: var(--font-family-base);\n font-size: var(--text-base);\n font-weight: var(--font-medium);\n color: var(--color-text);\n line-height: var(--leading-normal);\n transition: background-color var(--duration-fast) var(--ease-out);\n\n &:hover {\n background-color: var(--color-neutral-50);\n }\n\n &:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: -2px;\n }\n }\n\n /* ── Chevron ── */\n .chevron {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: var(--text-base);\n color: var(--color-text-muted);\n transition: transform var(--duration-base) var(--ease-in-out);\n transform-origin: center;\n }\n\n .item[data-open] .chevron {\n transform: rotate(180deg);\n }\n\n /* ── Content panel ── */\n .content {\n /* `hidden` attribute sets display:none natively — no extra CSS needed */\n }\n\n /* ── Inner padding ── */\n .inner {\n padding: var(--spacing-sm) var(--spacing-lg) var(--spacing-lg);\n font-size: var(--text-base);\n line-height: var(--leading-relaxed);\n color: var(--color-text);\n }\n}\n","import { type ReactElement, type ReactNode, useState } from \"react\";\nimport styles from \"./Accordion.module.css\";\n\ninterface AccordionItem {\n\tid: string;\n\ttitle: string;\n\tcontent: ReactNode;\n\tdefaultOpen?: boolean;\n}\n\ninterface AccordionProps {\n\titems: AccordionItem[];\n\tmultiple?: boolean;\n}\n\nexport function Accordion({ items, multiple = false }: AccordionProps): ReactElement {\n\tconst [openIds, setOpenIds] = useState<Set<string>>(() => {\n\t\tconst defaults = items.filter((i) => i.defaultOpen).map((i) => i.id);\n\t\treturn new Set(defaults);\n\t});\n\n\tconst toggle = (id: string) => {\n\t\tsetOpenIds((prev) => {\n\t\t\tconst next = new Set(prev);\n\t\t\tif (next.has(id)) {\n\t\t\t\tnext.delete(id);\n\t\t\t} else {\n\t\t\t\tif (!multiple) next.clear();\n\t\t\t\tnext.add(id);\n\t\t\t}\n\t\t\treturn next;\n\t\t});\n\t};\n\n\treturn (\n\t\t<div className={styles.accordion}>\n\t\t\t{items.map((item) => {\n\t\t\t\tconst isOpen = openIds.has(item.id);\n\t\t\t\treturn (\n\t\t\t\t\t<div key={item.id} className={styles.item} data-open={isOpen || undefined}>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tid={`accordion-trigger-${item.id}`}\n\t\t\t\t\t\t\tclassName={styles.trigger}\n\t\t\t\t\t\t\tonClick={() => toggle(item.id)}\n\t\t\t\t\t\t\taria-expanded={isOpen}\n\t\t\t\t\t\t\taria-controls={`accordion-${item.id}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t<span className={styles.chevron} aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t▾\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<section\n\t\t\t\t\t\t\tid={`accordion-${item.id}`}\n\t\t\t\t\t\t\tclassName={styles.content}\n\t\t\t\t\t\t\taria-labelledby={`accordion-trigger-${item.id}`}\n\t\t\t\t\t\t\thidden={!isOpen}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isOpen && <div className={styles.inner}>{item.content}</div>}\n\t\t\t\t\t\t</section>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .spinner {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .spinner[data-size=\"small\"] {\n width: 16px;\n height: 16px;\n }\n\n .spinner[data-size=\"medium\"] {\n width: 24px;\n height: 24px;\n }\n\n .spinner[data-size=\"large\"] {\n width: 40px;\n height: 40px;\n }\n\n .track {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: var(--ds-radius-circle);\n border: 2px solid currentColor;\n border-top-color: transparent;\n animation: ds-spin var(--ds-duration-slow) linear infinite;\n }\n}\n","import styles from \"./Spinner.module.css\";\n\nexport type SpinnerSize = \"small\" | \"medium\" | \"large\";\n\nexport interface SpinnerProps {\n\tsize?: SpinnerSize;\n\tlabel?: string;\n\tclassName?: string;\n}\n\nexport function Spinner({ size = \"medium\", label = \"Cargando\", className }: SpinnerProps) {\n\treturn (\n\t\t<span\n\t\t\trole=\"status\"\n\t\t\taria-label={label}\n\t\t\tclassName={[styles.spinner, className].filter(Boolean).join(\" \")}\n\t\t\tdata-size={size}\n\t\t>\n\t\t\t<span className={styles.track} aria-hidden=\"true\" />\n\t\t</span>\n\t);\n}\n","@layer ds-components {\n .button {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--ds-space-2);\n font-family: var(--ds-font-family);\n font-weight: var(--ds-font-weight-semibold);\n line-height: var(--ds-leading-tight);\n border: none;\n border-radius: var(--ds-radius-full);\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n transition:\n background-color var(--ds-duration-fast) var(--ds-ease-out),\n color var(--ds-duration-fast) var(--ds-ease-out),\n box-shadow var(--ds-duration-fast) var(--ds-ease-out),\n opacity var(--ds-duration-fast) var(--ds-ease-out);\n\n &:focus-visible {\n outline: var(--ds-focus-width) solid var(--ds-focus-color);\n outline-offset: var(--ds-focus-offset);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n }\n\n /* ── Sizes (aligned with Vue3 DS) ── */\n .button[data-size=\"small\"] {\n padding: 0 var(--ds-space-4);\n font-size: var(--ds-font-size-sm);\n min-height: 2.75rem; /* 44px — matches btn-size-small */\n }\n\n .button[data-size=\"medium\"] {\n padding: 0 var(--ds-space-6);\n font-size: var(--ds-font-size-base);\n min-height: 3.75rem; /* 60px — matches btn-size-medium */\n }\n\n .button[data-size=\"large\"] {\n padding: 0 var(--ds-space-8);\n font-size: var(--ds-font-size-lg);\n min-height: 5rem; /* 80px — matches btn-size-large */\n }\n\n /* ── Variants ── */\n .button[data-variant=\"primary\"] {\n background-color: var(--ds-color-primary);\n color: var(--ds-color-text-on-primary);\n\n &:hover:not(:disabled) {\n background-color: var(--ds-color-primary-900);\n }\n\n &:active:not(:disabled) {\n background-color: var(--ds-color-primary-900);\n transform: translateY(1px);\n }\n }\n\n .button[data-variant=\"secondary\"] {\n background-color: var(--ds-color-secondary);\n color: var(--ds-color-white, #ffffff);\n\n &:hover:not(:disabled) {\n opacity: 0.85;\n }\n\n &:active:not(:disabled) {\n opacity: 0.75;\n transform: translateY(1px);\n }\n }\n\n .button[data-variant=\"ghost\"] {\n background-color: transparent;\n color: var(--ds-color-text);\n\n &:hover:not(:disabled) {\n background-color: var(--ds-color-gray-100);\n }\n\n &:active:not(:disabled) {\n background-color: var(--ds-color-gray-200);\n }\n }\n\n .button[data-variant=\"outline\"] {\n background-color: transparent;\n color: var(--ds-color-text);\n border: 1.5px solid var(--ds-color-border);\n\n &:hover:not(:disabled) {\n border-color: var(--ds-color-gray-400);\n background-color: var(--ds-color-gray-50);\n }\n\n &:active:not(:disabled) {\n background-color: var(--ds-color-gray-100);\n }\n }\n\n /* ── Full width ── */\n .button[data-full-width] {\n width: 100%;\n }\n\n /* ── Loading state ── */\n .button[data-loading] {\n cursor: wait;\n }\n\n .spinnerWrap {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .content {\n display: contents;\n }\n\n .content[data-hidden] {\n visibility: hidden;\n }\n}\n","import type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { Spinner } from \"../Spinner\";\nimport styles from \"./Button.module.css\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"outline\";\nexport type ButtonSize = \"small\" | \"medium\" | \"large\";\nexport type ButtonIconPosition = \"left\" | \"right\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n\tvariant?: ButtonVariant;\n\tsize?: ButtonSize;\n\tloading?: boolean;\n\tfullWidth?: boolean;\n\ticon?: ReactNode;\n\ticonPosition?: ButtonIconPosition;\n\tchildren: ReactNode;\n}\n\nexport function Button({\n\tvariant = \"primary\",\n\tsize = \"medium\",\n\tloading = false,\n\tfullWidth = false,\n\ticon,\n\ticonPosition = \"left\",\n\tdisabled,\n\tchildren,\n\tclassName,\n\ttype = \"button\",\n\t...props\n}: ButtonProps) {\n\treturn (\n\t\t<button\n\t\t\ttype={type}\n\t\t\tclassName={[styles.button, className].filter(Boolean).join(\" \")}\n\t\t\tdata-variant={variant}\n\t\t\tdata-size={size}\n\t\t\tdata-loading={loading ? \"\" : undefined}\n\t\t\tdata-full-width={fullWidth ? \"\" : undefined}\n\t\t\tdisabled={disabled || loading}\n\t\t\taria-busy={loading}\n\t\t\t{...props}\n\t\t>\n\t\t\t{loading && (\n\t\t\t\t<span className={styles.spinnerWrap} aria-hidden=\"true\">\n\t\t\t\t\t<Spinner size=\"small\" />\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<span className={styles.content} data-hidden={loading ? \"\" : undefined}>\n\t\t\t\t{icon && iconPosition === \"left\" && icon}\n\t\t\t\t{children}\n\t\t\t\t{icon && iconPosition === \"right\" && icon}\n\t\t\t</span>\n\t\t</button>\n\t);\n}\n","@layer ds-components {\n .icon {\n display: inline-block;\n flex-shrink: 0;\n vertical-align: middle;\n }\n}\n","// This file is auto-generated by generateIcons.ts. Do not edit directly.\n// Run: npx tsx src/design-system/components/Icon/generateIcons.ts\n\nexport const ICON_APPLE_FILLED = [\n\t\"<path d='M16.102 2.01c-.042-.047-1.573.019-2.906 1.465C11.864 4.92 12.07 6.577 12.1 6.62c.03.042 1.9.109 3.093-1.573 1.194-1.68.953-2.988.91-3.037Zm4.143 14.666c-.06-.12-2.906-1.542-2.641-4.277.265-2.737 2.093-3.487 2.122-3.568.029-.081-.746-.987-1.567-1.446a4.615 4.615 0 0 0-1.954-.543c-.135-.003-.604-.118-1.568.145-.635.174-2.066.737-2.46.76-.395.022-1.57-.653-2.833-.832-.81-.156-1.667.164-2.28.41-.613.245-1.778.942-2.593 2.796-.815 1.853-.389 4.788-.084 5.7.305.911.782 2.405 1.592 3.495.72 1.23 1.675 2.084 2.073 2.374.4.29 1.524.482 2.304.084.628-.385 1.76-.607 2.208-.59.446.016 1.326.192 2.227.673.714.247 1.389.144 2.065-.13.676-.277 1.655-1.325 2.798-3.448.433-.988.63-1.522.59-1.603Z'/><path d='M16.102 2.01c-.042-.047-1.573.019-2.906 1.465C11.864 4.92 12.07 6.577 12.1 6.62c.03.042 1.9.109 3.093-1.573 1.194-1.68.953-2.988.91-3.037Zm4.143 14.666c-.06-.12-2.906-1.542-2.641-4.277.265-2.737 2.093-3.487 2.122-3.568.029-.081-.746-.987-1.567-1.446a4.615 4.615 0 0 0-1.954-.543c-.135-.003-.604-.118-1.568.145-.635.174-2.066.737-2.46.76-.395.022-1.57-.653-2.833-.832-.81-.156-1.667.164-2.28.41-.613.245-1.778.942-2.593 2.796-.815 1.853-.389 4.788-.084 5.7.305.911.782 2.405 1.592 3.495.72 1.23 1.675 2.084 2.073 2.374.4.29 1.524.482 2.304.084.628-.385 1.76-.607 2.208-.59.446.016 1.326.192 2.227.673.714.247 1.389.144 2.065-.13.676-.277 1.655-1.325 2.798-3.448.433-.988.63-1.522.59-1.603Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_ARROW_CIRCLE_DOWN_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M8.354 11.854a.5.5 0 0 1-.707 0L4.465 8.672a.5.5 0 1 1 .707-.708L7.5 10.293V4.5a.5.5 0 1 1 1 0v5.793l2.329-2.329a.5.5 0 1 1 .707.708l-3.182 3.182Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_CIRCLE_LEFT_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M4.146 8.353a.5.5 0 0 1 0-.707l3.182-3.182a.5.5 0 0 1 .708.707L5.707 7.5H11.5a.5.5 0 0 1 0 1H5.707l2.329 2.328a.5.5 0 1 1-.708.707L4.146 8.353Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_CIRCLE_RIGHT_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M11.854 7.646a.5.5 0 0 1 0 .707l-3.182 3.182a.5.5 0 1 1-.708-.707L10.293 8.5H4.5a.5.5 0 0 1 0-1h5.793L7.964 5.17a.5.5 0 1 1 .708-.707l3.182 3.182Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_CIRCLE_UP_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M7.646 4.146a.5.5 0 0 1 .707 0l3.182 3.182a.5.5 0 1 1-.707.708L8.5 5.707V11.5a.5.5 0 0 1-1 0V5.707L5.17 8.036a.5.5 0 1 1-.707-.708l3.182-3.182Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_DOWN_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='m11.535 11.172-3.182 3.182a.5.5 0 0 1-.707 0l-3.182-3.182a.5.5 0 1 1 .707-.708L7.5 12.793V2a.5.5 0 0 1 1 0v10.793l2.328-2.329a.5.5 0 1 1 .707.708Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_LEFT_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.646 8.353a.5.5 0 0 1 0-.707l3.182-3.182a.5.5 0 0 1 .708.707L3.207 7.5H14a.5.5 0 0 1 0 1H3.207l2.329 2.328a.5.5 0 1 1-.708.707L1.646 8.353Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_LIST_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M4.25 2.6c.22 0 .4.18.4.4v6.6h6.353L9.417 7.222a.4.4 0 1 1 .666-.444l2 3a.4.4 0 0 1 0 .444l-2 3a.4.4 0 1 1-.666-.444l1.586-2.378H4.25a.4.4 0 0 1-.4-.4V3c0-.22.18-.4.4-.4Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_POINT_DOWN_FILLED = [\n\t\"<path d='m7.5 9.5 3-3h-6l3 3Z'/><path fill-rule='evenodd' d='M7.854 9.854a.5.5 0 0 1-.708 0l-3-3A.5.5 0 0 1 4.5 6h6a.5.5 0 0 1 .354.854l-3 3ZM9.293 7H5.707L7.5 8.793 9.293 7Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_POINT_LEFT_FILLED = [\n\t\"<path d='m6.5 7.5 3 3v-6l-3 3Z'/><path fill-rule='evenodd' d='M6.146 7.854a.5.5 0 0 1 0-.708l3-3A.5.5 0 0 1 10 4.5v6a.5.5 0 0 1-.854.354l-3-3ZM9 9.293V5.707L7.207 7.5 9 9.293Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_POINT_RIGHT_FILLED = [\n\t\"<path d='m10 7.962-3 3v-6l3 3Z'/><path fill-rule='evenodd' d='M10.354 8.315a.5.5 0 0 0 0-.707l-3-3a.5.5 0 0 0-.854.354v6a.5.5 0 0 0 .854.354l3-3ZM7.5 9.755V6.169l1.793 1.793L7.5 9.755Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_POINT_UP_FILLED = [\n\t\"<path d='m8.25 7-3 3h6l-3-3Z'/><path fill-rule='evenodd' d='M7.896 6.646a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.354.854h-6a.5.5 0 0 1-.354-.854l3-3ZM6.457 9.5h3.586L8.25 7.707 6.457 9.5Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_RIGHT_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='m11.172 4.464 3.182 3.182a.5.5 0 0 1 0 .707l-3.182 3.182a.5.5 0 0 1-.708-.707L12.793 8.5H2a.5.5 0 0 1 0-1h10.793L10.464 5.17a.5.5 0 1 1 .708-.707Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ARROW_UP_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='m4.465 4.828 3.182-3.182a.5.5 0 0 1 .707 0l3.182 3.182a.5.5 0 1 1-.707.708L8.5 3.207V14a.5.5 0 0 1-1 0V3.207L5.172 5.536a.5.5 0 1 1-.707-.708Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_BARCODE_OUTLINE = [\n\t\"<path d='M13.76 8a.48.48 0 0 1-.48.48H2.72a.48.48 0 1 1 0-.96h.96v-2.4h.96v2.4h.96v-2.4h.96v2.4h.96v-2.4h.96v2.4h.96v-2.4h.96v2.4h.96v-2.4h.96v2.4h.96a.48.48 0 0 1 .48.48ZM4.64 10.88h-.96V9.44h.96v1.44ZM12.32 10.88h-.96V9.44h.96v1.44ZM6.56 10.4H5.6v-.96h.96v.96ZM8.48 10.4h-.96v-.96h.96v.96ZM10.4 10.4h-.96v-.96h.96v.96ZM1.28 5.12V3.68c0-.794.646-1.44 1.44-1.44h1.44a.48.48 0 1 1 0 .96H2.72a.48.48 0 0 0-.48.48v1.44a.48.48 0 1 1-.96 0ZM14.72 3.68v1.44a.48.48 0 1 1-.96 0V3.68a.48.48 0 0 0-.48-.48h-1.44a.48.48 0 1 1 0-.96h1.44c.794 0 1.44.646 1.44 1.44ZM4.64 13.28a.48.48 0 0 1-.48.48H2.72c-.794 0-1.44-.646-1.44-1.44v-1.44a.48.48 0 1 1 .96 0v1.44c0 .265.215.48.48.48h1.44a.48.48 0 0 1 .48.48ZM14.72 10.88v1.44c0 .794-.646 1.44-1.44 1.44h-1.44a.48.48 0 1 1 0-.96h1.44a.48.48 0 0 0 .48-.48v-1.44a.48.48 0 1 1 .96 0Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_BELL_OUTLINE = [\n\t\"<path d='M13.98 12.667h-.525V8.139c0-2.424-1.483-4.488-3.563-5.288V1.96C9.892.877 9.042 0 7.995 0 6.95 0 6.103.88 6.103 1.96v.885C4.025 3.643 2.54 5.71 2.54 8.136v4.53h-.525a.526.526 0 0 0-.515.534c0 .293.232.533.515.533H5.45C5.64 15.013 6.708 16 8 16s2.36-.987 2.549-2.267h3.436c.283 0 .515-.24.515-.533a.53.53 0 0 0-.52-.533M7.132 1.96A.88.88 0 0 1 8 1.067c.476 0 .862.4.862.893v.608a5 5 0 0 0-.872-.08c-.294 0-.577.032-.858.077zM8 14.8c-.72 0-1.216-.376-1.39-1.067h2.812C9.249 14.424 8.72 14.8 8 14.8m-4.297-2.3V8.139C3.703 5.613 5.895 3.8 8 3.8s4.203 1.813 4.203 4.339V12.5z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CALENDAR_ALT_OUTLINE = [\n\t\"<path d='M7.47 10.14a.842.842 0 0 1-.205-.724c.01-.053.025-.102.04-.15.02-.048.045-.096.07-.14.03-.042.06-.085.095-.122a.617.617 0 0 1 .245-.171.662.662 0 0 1 .57 0c.045.015.09.042.13.069.04.032.08.064.115.102.035.037.065.08.095.123.025.043.05.09.065.14a.777.777 0 0 1 .06.305c0 .208-.08.417-.22.567-.034.038-.075.07-.115.102-.04.027-.085.054-.13.075a1.1 1.1 0 0 1-.14.043.636.636 0 0 1-.29 0c-.05-.01-.095-.027-.14-.043a1.048 1.048 0 0 1-.13-.075 1.07 1.07 0 0 1-.115-.102Zm3.335 2.951a.77.77 0 0 0 .165.262c.035.038.075.07.115.103.04.026.085.053.13.075.045.015.09.032.14.042a.725.725 0 0 0 .675-.22.699.699 0 0 0 .16-.262.777.777 0 0 0 .045-.46.737.737 0 0 0-.045-.15.694.694 0 0 0-.16-.263.716.716 0 0 0-.675-.22.624.624 0 0 0-.14.049.617.617 0 0 0-.245.171 1.19 1.19 0 0 0-.095.123c-.025.043-.05.091-.07.14-.014.048-.03.096-.04.15a.777.777 0 0 0 0 .31c.01.054.025.102.04.15Zm-3.5 0c.02.048.045.097.07.14.03.042.06.085.095.123a.621.621 0 0 0 .245.171.624.624 0 0 0 .285.064.636.636 0 0 0 .284-.064.61.61 0 0 0 .131-.07c.04-.032.08-.064.115-.101a.699.699 0 0 0 .16-.262.777.777 0 0 0 .06-.305.843.843 0 0 0-.22-.569.607.607 0 0 0-.246-.171.663.663 0 0 0-.57 0 .617.617 0 0 0-.244.171.843.843 0 0 0-.165.873Zm3.5-3.214a.77.77 0 0 0 .165.263c.035.037.075.069.115.101.04.027.085.054.13.075.045.016.09.032.14.043a.636.636 0 0 0 .29 0c.05-.01.095-.027.14-.043a1.02 1.02 0 0 0 .13-.075c.04-.032.08-.064.115-.102a.699.699 0 0 0 .16-.263.777.777 0 0 0 .045-.46.737.737 0 0 0-.045-.15.697.697 0 0 0-.16-.262.716.716 0 0 0-1.06 0 .806.806 0 0 0-.165.262c-.014.048-.03.097-.04.15a.777.777 0 0 0 0 .31c.01.054.025.103.04.15Zm-6.305.498c.195 0 .39-.086.53-.236s.22-.353.22-.567a.843.843 0 0 0-.22-.568c-.28-.3-.78-.3-1.06 0a.843.843 0 0 0 0 1.135c.14.15.33.236.53.236ZM15 4.215v10.178c0 .886-.673 1.607-1.5 1.607h-11c-.827 0-1.5-.721-1.5-1.607V4.214c0-.886.673-1.607 1.5-1.607H4V1.536C4 1.24 4.224 1 4.5 1s.5.24.5.536v1.071h6V1.536c0-.296.224-.536.5-.536s.5.24.5.536v1.071h1.5c.827 0 1.5.721 1.5 1.607Zm-1 3.214H2v6.964c0 .295.224.536.5.536h11c.276 0 .5-.24.5-.536V7.429Zm0-3.215c0-.295-.224-.535-.5-.535H12V4.75c0 .296-.224.536-.5.536s-.5-.24-.5-.536V3.679H5V4.75c0 .296-.224.536-.5.536S4 5.046 4 4.75V3.679H2.5c-.276 0-.5.24-.5.535v2.143h12V4.214ZM4.5 13.59c.2 0 .39-.085.53-.235.14-.15.22-.354.22-.568a.833.833 0 0 0-.22-.568.737.737 0 0 0-1.06 0 .833.833 0 0 0-.22.568c0 .214.08.418.22.568.14.15.33.235.53.235Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CALENDAR_LOCKED_OUTLINE = [\n\t\"<path d='M15 4.214v10.179c0 .886-.673 1.607-1.5 1.607h-11c-.827 0-1.5-.721-1.5-1.607V4.214c0-.886.673-1.607 1.5-1.607h11c.827 0 1.5.721 1.5 1.607Zm-1 3.214H2v6.965c0 .295.224.535.5.535h11c.276 0 .5-.24.5-.535V7.428Zm0-3.214c0-.295-.224-.536-.5-.536H12V4.75c0 .296-.224.536-.5.536s-.5-.24-.5-.536V3.678H6V4.75c0 .296-.224.536-.5.536S5 5.046 5 4.75V3.678H2.5c-.276 0-.5.24-.5.536v2.143h12V4.214Z'/><path d='M5.5 4V2c0-.333-.2-1-1-1s-1 .667-1 1v1.5M11.5 4V2c0-.333-.2-1-1-1s-1 .667-1 1v1.5'/><path d='M10.063 10.25h-.376v-.375A1.877 1.877 0 0 0 7.813 8a1.877 1.877 0 0 0-1.875 1.875v.375h-.375a.375.375 0 0 0-.375.375v3c0 .207.167.375.375.375h4.5a.375.375 0 0 0 .374-.375v-3a.375.375 0 0 0-.374-.375Zm-3.376-.375a1.125 1.125 0 0 1 2.25 0v.375h-2.25v-.375Zm3 3.375h-3.75V11h3.75v2.25Z'/><path d='M7.813 12.5a.375.375 0 1 0 0-.75.375.375 0 0 0 0 .75Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CALENDAR_OUTLINE = [\n\t\"<path d='M7.47 10.14a.843.843 0 0 1-.205-.724c.01-.054.025-.102.04-.15.02-.048.045-.097.07-.14.03-.042.06-.085.095-.123a.616.616 0 0 1 .245-.171.662.662 0 0 1 .57 0c.045.016.09.043.13.07.04.032.08.064.115.101a.697.697 0 0 1 .16.262.777.777 0 0 1 .06.305c0 .21-.08.42-.22.57-.034.037-.075.069-.115.1-.04.028-.085.054-.13.076a1.1 1.1 0 0 1-.14.043.636.636 0 0 1-.29 0 1.08 1.08 0 0 1-.14-.043 1.048 1.048 0 0 1-.13-.075 1.07 1.07 0 0 1-.115-.102Zm3.335 2.951a.767.767 0 0 0 .28.364c.04.027.085.054.13.075.045.016.09.032.14.043a.725.725 0 0 0 .675-.22.696.696 0 0 0 .16-.263.778.778 0 0 0 .045-.46.74.74 0 0 0-.045-.15.696.696 0 0 0-.16-.262.716.716 0 0 0-.675-.22.624.624 0 0 0-.14.048.617.617 0 0 0-.245.172 1.19 1.19 0 0 0-.095.123c-.025.043-.05.091-.07.14-.014.047-.03.096-.04.15a.777.777 0 0 0 0 .31c.01.054.025.102.04.15Zm-3.5 0c.02.048.045.096.07.14.03.042.06.085.095.123a.617.617 0 0 0 .245.171.624.624 0 0 0 .285.064.636.636 0 0 0 .284-.064.607.607 0 0 0 .131-.07c.04-.032.08-.064.115-.101a.696.696 0 0 0 .16-.263.778.778 0 0 0 .06-.305.843.843 0 0 0-.22-.568c-.034-.038-.075-.07-.115-.102a.607.607 0 0 0-.13-.07.663.663 0 0 0-.57 0 .617.617 0 0 0-.13.07c-.04.032-.08.064-.115.102a.843.843 0 0 0-.205.723c.01.053.025.102.04.15Zm3.5-3.214a.77.77 0 0 0 .165.263c.035.037.075.069.115.101.04.027.085.053.13.075.045.016.09.032.14.043a.636.636 0 0 0 .29 0c.05-.01.095-.027.14-.043.045-.022.09-.048.13-.075.04-.032.08-.064.115-.102a.699.699 0 0 0 .16-.263.777.777 0 0 0 .045-.46.737.737 0 0 0-.045-.15.697.697 0 0 0-.16-.263.716.716 0 0 0-.675-.22c-.05.012-.095.028-.14.044-.045.021-.09.048-.13.075-.04.032-.08.064-.115.101a.806.806 0 0 0-.165.263c-.014.048-.03.096-.04.15a.777.777 0 0 0 0 .31c.01.054.025.102.04.15Zm-6.305.498c.195 0 .39-.086.53-.236s.22-.353.22-.568a.843.843 0 0 0-.22-.568c-.28-.3-.78-.3-1.06 0a.843.843 0 0 0 0 1.136c.14.15.33.236.53.236ZM15 4.215v10.178c0 .886-.673 1.607-1.5 1.607h-11c-.827 0-1.5-.721-1.5-1.607V4.214c0-.886.673-1.607 1.5-1.607h11c.827 0 1.5.721 1.5 1.607Zm-1 3.213H2v6.965c0 .295.224.535.5.535h11c.276 0 .5-.24.5-.535V7.428Zm0-3.214c0-.295-.224-.536-.5-.536H12V4.75c0 .296-.224.536-.5.536s-.5-.24-.5-.536V3.678H6V4.75c0 .296-.224.536-.5.536S5 5.046 5 4.75V3.678H2.5c-.276 0-.5.24-.5.536v2.143h12V4.214ZM4.5 13.59c.2 0 .39-.086.53-.236s.22-.353.22-.567a.833.833 0 0 0-.22-.568.737.737 0 0 0-1.06 0 .833.833 0 0 0-.22.568c0 .214.08.417.22.567.14.15.33.236.53.236Z'/><path d='M5.5 4V2c0-.333-.2-1-1-1s-1 .667-1 1v1.5M11.5 4V2c0-.333-.2-1-1-1s-1 .667-1 1v1.5'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CARROT_FILLED = [\n\t\"<path d='M1.4 22.116c1.812 1.632 13.968-5.604 15.768-8.652.864-1.464-.156-3.612-1.824-5.328 1.896-1.26 3.564 2.664 5.148 1.836.72-.384 1.188-1.572.84-2.304-.624-1.296-2.7-1.296-4.104-1.452.996-.24 3.384-1.26 3.432-2.7.048-1.104-1.356-2.364-2.46-2.232-1.452.168-1.98 2.256-2.472 3.6-.06-.852-.24-2.724-1.176-3.54-1.248-1.092-2.748-.06-2.784 1.26-.048 1.596 3.384 2.484 2.304 4.404C12.248 5.604 10.1 4.836 8.72 5.64c-.588.372-1.26 1.092-1.956 2.028 1.068 1.128 2.544 2.484 3.708 3.264.24.168.312.504.132.744a.53.53 0 0 1-.744.144c-1.188-.804-2.64-2.136-3.72-3.252a32.183 32.183 0 0 0-1.608 2.676c1.02 1.032 2.316 2.196 3.348 2.892.24.168.3.504.132.744a.541.541 0 0 1-.756.144c-1.02-.696-2.232-1.776-3.252-2.784C1.88 16.428.32 21.156 1.4 22.116Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_CHECK_OUTLINE = [\n\t\"<path d='M14.04 4.04a.65.65 0 0 1 .92.92l-9 9a.651.651 0 0 1-.968-.054l-4-5-.071-.11A.65.65 0 0 1 1.915 8l.093.094 3.546 4.431L14.04 4.04Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CHECKBOX_CHECKED = [\n\t\"<path fill='#1B1B1B' d='M11 0H1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1Zm-6 8.75L2.5 6.271l.795-.771L5 7.173 8.704 3.5l.796.788L5 8.75Z'/>\",\n\t\"0 0 12 12\",\n] as const;\n\nexport const ICON_CHECKBOX_UNCHECKED = [\n\t\"<path fill='#1B1B1B' d='M11 0H1a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1ZM1 11V1h10v10H1Z'/>\",\n\t\"0 0 12 12\",\n] as const;\n\nexport const ICON_CHEVRON_DOWN_OUTLINE = [\n\t\"<path d='M15.761 4.197c.263.245.31.638.135.938l-.09.122-6.762 7.5a.732.732 0 0 1-1.088 0l-6.762-7.5a.759.759 0 0 1 .045-1.06.73.73 0 0 1 1.043.046L8.5 11.14l6.219-6.896.111-.1a.729.729 0 0 1 .931.054Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CHEVRON_LEFT_BICOLOR = [\n\t\"<path fill='#F2F2F2' d='M17.005 12.982a4 4 0 0 1-3.992 4.008l-8 .015a4 4 0 0 1-4.008-3.992l-.015-8a4 4 0 0 1 3.993-4.008l8-.015a4 4 0 0 1 4.007 3.992l.015 8Z'/><path fill='#1B1B1B' fill-rule='evenodd' d='M10.825 14.493a.432.432 0 0 1-.61-.008l-5.11-5.256a.432.432 0 0 1 .009-.611l5.256-5.11a.432.432 0 0 1 .602.62L6.025 8.936l4.809 4.947a.432.432 0 0 1-.009.61Z' clip-rule='evenodd'/>\",\n\t\"0 0 18 18\",\n] as const;\n\nexport const ICON_CHEVRON_LEFT_OUTLINE = [\n\t\"<path d='M12.803 15.761a.759.759 0 0 1-.938.135l-.122-.09-7.5-6.762a.732.732 0 0 1 0-1.088l7.5-6.762a.759.759 0 0 1 1.06.045.73.73 0 0 1-.046 1.043L5.86 8.5l6.897 6.219.1.111a.729.729 0 0 1-.054.931Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CHEVRON_RIGHT_BICOLOR = [\n\t\"<path fill='#F2F2F2' d='M17.005 12.982a4 4 0 0 1-3.992 4.008l-8 .015a4 4 0 0 1-4.008-3.992l-.015-8a4 4 0 0 1 3.993-4.008l8-.015a4 4 0 0 1 4.007 3.992l.015 8Z'/><path fill='#1B1B1B' fill-rule='evenodd' d='M7.189 14.493a.432.432 0 0 0 .61-.008l5.11-5.256a.432.432 0 0 0-.008-.611l-5.256-5.11a.432.432 0 0 0-.603.62l4.947 4.808-4.809 4.947a.432.432 0 0 0 .009.61Z' clip-rule='evenodd'/>\",\n\t\"0 0 18 18\",\n] as const;\n\nexport const ICON_CHEVRON_RIGHT_OUTLINE = [\n\t\"<path d='M4.197 1.239a.759.759 0 0 1 .938-.134l.122.088 7.5 6.763a.732.732 0 0 1 0 1.088l-7.5 6.762a.759.759 0 0 1-1.06-.045.73.73 0 0 1 .046-1.043L11.14 8.5 4.244 2.28l-.1-.111a.729.729 0 0 1 .054-.931Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CHEVRON_UP_OUTLINE = [\n\t\"<path d='M1.239 12.803a.759.759 0 0 1-.134-.938l.088-.122 6.763-7.5a.732.732 0 0 1 1.088 0l6.762 7.5a.759.759 0 0 1-.045 1.06.73.73 0 0 1-1.043-.046L8.5 5.86 2.28 12.757l-.111.1a.729.729 0 0 1-.931-.054Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CHICKEN_FILLED = [\n\t\"<path d='M20.16 12.73A6.27 6.27 0 0 0 19.09 3c-2.01-1.33-4.7-1.34-6.73-.03-1.76 1.13-2.73 2.89-2.9 4.71-.13 1.32-.63 2.55-1.55 3.47l-.03.03c-1.16 1.16-1.16 2.93-.07 4.01l.99.99a2.794 2.794 0 0 0 3.95 0c.97-.97 2.25-1.5 3.64-1.65 1.37-.15 2.71-.75 3.77-1.8Zm-13.9 7.13c.27.56.18 1.24-.29 1.7a1.49 1.49 0 0 1-2.55-.98 1.49 1.49 0 0 1-.98-2.55c.46-.46 1.15-.56 1.7-.29l2.48-2.43c.14.19.3.41.48.59l.99.99c.21.2.41.37.67.52l-2.5 2.45Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_CHILI_FILLED = [\n\t\"<path d='M18.73 2.118a.936.936 0 0 1 1.274.363l.187.34a4.682 4.682 0 0 1 .133 4.297A6.214 6.214 0 0 1 22 11.376c0 .722-.121 1.418-.348 2.062-.238.676-1.113.637-1.437-.004l-.457-.914a.944.944 0 0 0-.84-.52h-2.855a.935.935 0 0 1-.938-.937V7.938a.935.935 0 0 0-.938-.937h-.667c-.832 0-1.172-.934-.422-1.286a6.206 6.206 0 0 1 2.652-.59c1.105 0 2.14.286 3.04.79a2.81 2.81 0 0 0-.235-2.18l-.188-.34a.936.936 0 0 1 .363-1.273v-.004ZM8.688 15.497l3.626-7.246h1.562v3.125c0 1.035.84 1.875 1.875 1.875h2.977l.933 1.867A16.934 16.934 0 0 1 6.031 22H3.734a1.734 1.734 0 0 1-.375-3.426l1.946-.434a4.999 4.999 0 0 0 3.386-2.644h-.004Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_CLOSE_OUTLINE = [\n\t\"<path d='m8 7.293 5.646-5.647a.502.502 0 0 1 .708.708L8.707 8l5.647 5.646a.502.502 0 0 1-.708.708L8 8.707l-5.646 5.647a.502.502 0 0 1-.708-.708L7.293 8 1.646 2.354a.502.502 0 0 1 .708-.708z' />\",\n\t\"0 0 15 15\",\n] as const;\n\nexport const ICON_CLOUD_DOWNLOAD_OUTLINE = [\n\t\"<path d='M4.406 1.342A5.53 5.53 0 0 1 8 0c2.69 0 4.923 2 5.166 4.579C14.758 4.804 16 6.137 16 7.773c0 1.796-1.498 3.226-3.313 3.226H10a.5.5 0 0 1 0-1h2.688C13.979 10 15 8.988 15 7.773c0-1.216-1.02-2.228-2.313-2.228h-.5v-.5C12.188 2.825 10.328 1 8 1a4.53 4.53 0 0 0-2.941 1.1c-.757.652-1.153 1.438-1.153 2.055v.448l-.445.049C2.064 4.805 1 5.952 1 7.318c0 1.467 1.23 2.681 2.781 2.681H6a.5.5 0 1 1 0 1H3.781C1.708 11 0 9.366 0 7.318c0-1.763 1.266-3.223 2.942-3.593.143-.863.698-1.723 1.464-2.383Z'/><path d='M8.354 15.794a.5.5 0 0 1-.708 0L5 13a.5.5 0 0 1 .708-.708L7.5 14.233V5.441a.5.5 0 0 1 1 0v8.792l1.792-1.941A.5.5 0 0 1 11 13l-2.646 2.794Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_CLOUD_UPLOAD_OUTLINE = [\n\t\"<path d='M4.406 1.342A5.53 5.53 0 0 1 8 0c2.69 0 4.923 2 5.166 4.579C14.758 4.804 16 6.137 16 7.773c0 1.796-1.498 3.226-3.313 3.226H10a.5.5 0 0 1 0-1h2.688C13.979 10 15 8.988 15 7.773c0-1.216-1.02-2.228-2.313-2.228h-.5v-.5C12.188 2.825 10.328 1 8 1a4.53 4.53 0 0 0-2.941 1.1c-.757.652-1.153 1.438-1.153 2.055v.448l-.445.049C2.064 4.805 1 5.952 1 7.318c0 1.467 1.23 2.681 2.781 2.681H6a.5.5 0 1 1 0 1H3.781C1.708 11 0 9.366 0 7.318c0-1.763 1.266-3.223 2.942-3.593.143-.863.698-1.723 1.464-2.383Z'/><path d='M7.646 3.206a.5.5 0 0 1 .708 0l3 3a.5.5 0 1 1-.708.708L8.5 4.767v9.792a.5.5 0 1 1-1 0V4.767L5.354 6.914a.5.5 0 0 1-.708-.708l3-3Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_COPY_GENERIC_OUTLINE = [\n\t\"<path d='M9.5 11.5a.5.5 0 0 1-.5.5H5a.5.5 0 0 1 0-1h4a.5.5 0 0 1 .5.5ZM9 9H5a.5.5 0 1 0 0 1h4a.5.5 0 1 0 0-1Zm4.5-4.421V11a1.502 1.502 0 0 1-1.5 1.5h-.5v1A1.502 1.502 0 0 1 10 15H4a1.502 1.502 0 0 1-1.5-1.5V5A1.502 1.502 0 0 1 4 3.5h.5v-1A1.502 1.502 0 0 1 6 1h4a.5.5 0 0 1 .358.151l3 3.079a.498.498 0 0 1 .142.349Zm-3-1.079a.5.5 0 0 0 .5.5h.738L10.5 2.73v.77Zm0 10v-6H9A1.502 1.502 0 0 1 7.5 6V4.5H4a.5.5 0 0 0-.5.5v8.5a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 .5-.5ZM8.5 6a.5.5 0 0 0 .5.5h.738L8.5 5.23V6Zm4 5V5H11a1.502 1.502 0 0 1-1.5-1.5V2H6a.5.5 0 0 0-.5.5v1H8a.499.499 0 0 1 .358.151l3 3.079a.498.498 0 0 1 .142.349V11.5h.5a.5.5 0 0 0 .5-.5Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_COPY_SQUARE_OUTLINE = [\n\t\"<path d='M11.77 4.23A2.728 2.728 0 0 0 9.09 2H4.728A2.727 2.727 0 0 0 2 4.727v4.364a2.727 2.727 0 0 0 2.23 2.678A2.727 2.727 0 0 0 6.91 14h4.363A2.726 2.726 0 0 0 14 11.273V6.909a2.727 2.727 0 0 0-2.23-2.678ZM3.09 9.09V4.728a1.636 1.636 0 0 1 1.637-1.636h4.364a1.636 1.636 0 0 1 1.636 1.636v4.364a1.636 1.636 0 0 1-1.636 1.636H4.727a1.636 1.636 0 0 1-1.636-1.636Zm9.82 2.183a1.636 1.636 0 0 1-1.637 1.636H6.909a1.637 1.637 0 0 1-1.538-1.09h3.72a2.728 2.728 0 0 0 2.727-2.728V5.37a1.636 1.636 0 0 1 1.091 1.538v4.364Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DELETE_OUTLINE = [\n\t\"<path d='M3.098 3.297a.634.634 0 0 0-.634.638v9.543c0 1.046.86 1.907 1.907 1.907h7.639c1.046 0 1.907-.86 1.907-1.907V3.935a.637.637 0 0 0-.635-.638H3.098Zm.638 1.272h8.907v8.909a.623.623 0 0 1-.634.634H4.371a.623.623 0 0 1-.634-.634V4.569Z'/><path d='M1.825 3.3a.636.636 0 0 0 0 1.272h12.731a.638.638 0 0 0 0-1.272H1.825Z'/><path d='M5.644.117c-1.047 0-1.908.86-1.908 1.907v1.911a.637.637 0 0 0 1.274 0V2.024c0-.359.275-.634.634-.634h5.093c.359 0 .634.275.634.634v1.911a.64.64 0 0 0 .639.634.636.636 0 0 0 .634-.634V2.024c0-1.047-.861-1.907-1.908-1.907H5.644ZM6.283 5.845a.64.64 0 0 0-.639.634v5.725a.64.64 0 0 0 1.088.45.635.635 0 0 0 .185-.45V6.479a.636.636 0 0 0-.634-.634ZM10.102 5.845a.64.64 0 0 0-.639.634v5.725a.64.64 0 0 0 1.088.45.632.632 0 0 0 .185-.45V6.479a.636.636 0 0 0-.634-.634Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DISCOUNT_OUTLINE = [\n\t\"<path d='M9.273 9.91a.636.636 0 1 0 0-1.274.636.636 0 0 0 0 1.273ZM6.727 7.364a.636.636 0 1 0 0-1.273.636.636 0 0 0 0 1.273ZM6.546 9.91a.455.455 0 0 1-.322-.778L9.127 6.23a.455.455 0 1 1 .643.643L6.868 9.776a.453.453 0 0 1-.322.133Z'/><path d='M8 15a1.93 1.93 0 0 1-1.369-.566l-.665-.665a.853.853 0 0 0-.607-.251h-.941a1.94 1.94 0 0 1-1.936-1.936v-.942a.852.852 0 0 0-.252-.606l-.665-.666a1.94 1.94 0 0 1 0-2.737l.665-.666a.852.852 0 0 0 .252-.606v-.942a1.94 1.94 0 0 1 1.935-1.935h.942a.853.853 0 0 0 .606-.252l.666-.665a1.94 1.94 0 0 1 2.738 0l.665.665a.853.853 0 0 0 .607.251h.942a1.94 1.94 0 0 1 1.935 1.936v.942a.854.854 0 0 0 .252.606l.665.666a1.94 1.94 0 0 1 0 2.737l-.665.665a.855.855 0 0 0-.252.607v.942a1.94 1.94 0 0 1-1.935 1.935h-.942a.85.85 0 0 0-.607.252l-.665.665A1.93 1.93 0 0 1 8 15ZM8 2.077a.857.857 0 0 0-.607.251l-.665.664a1.924 1.924 0 0 1-1.368.567h-.942a.86.86 0 0 0-.858.858v.942a1.924 1.924 0 0 1-.567 1.368l-.666.666a.86.86 0 0 0 0 1.214l.665.665a1.924 1.924 0 0 1 .567 1.368v.942a.86.86 0 0 0 .859.858h.942a1.925 1.925 0 0 1 1.368.567l.665.665a.86.86 0 0 0 1.214 0l.666-.665a1.923 1.923 0 0 1 1.368-.567h.941a.86.86 0 0 0 .859-.858v-.942a1.924 1.924 0 0 1 .567-1.368l.665-.665a.86.86 0 0 0 0-1.214l-.665-.666a1.925 1.925 0 0 1-.567-1.368v-.941a.86.86 0 0 0-.858-.859h-.942a1.924 1.924 0 0 1-1.368-.566l-.666-.666A.857.857 0 0 0 8 2.077Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DOCUMENT_GENERIC_OUTLINE = [\n\t\"<path d='M5.703 4.333a.417.417 0 0 0 0 .834h4.53a.417.417 0 0 0 0-.834h-4.53ZM5.286 7.678c0-.23.187-.416.417-.416h4.53a.417.417 0 0 1 0 .833h-4.53a.417.417 0 0 1-.417-.417ZM5.703 10.167a.417.417 0 1 0 0 .833H8.41a.417.417 0 1 0 0-.833H5.703Z'/><path d='M3 2.667C3 1.747 3.746 1 4.667 1h6.666C12.253 1 13 1.746 13 2.667v10c0 .92-.746 1.666-1.667 1.666H4.667c-.92 0-1.667-.746-1.667-1.666v-10Zm8.333-.834H4.667a.833.833 0 0 0-.834.834v10c0 .46.373.833.834.833h6.666c.46 0 .834-.373.834-.833v-10a.833.833 0 0 0-.834-.834Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DOCUMENT_HISTORY_ALT_OUTLINE = [\n\t\"<path stroke-linecap='round' stroke-linejoin='round' d='M7.5 5v4H11'/><circle cx='8' cy='8' r='6.4' stroke-width='1.2'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DOCUMENT_HISTORY_OUTLINE = [\n\t\"<path d='M14.17 3.44A6.928 6.928 0 1 1 3.264 11.99a.533.533 0 1 1 .839-.658 5.884 5.884 0 1 0-1.207-4.246s-.077.117-.308.298l-.81-.098.095-.526A6.922 6.922 0 0 1 14.169 3.44Z'/><path d='m.486 5.994 4.531-.29a.289.289 0 0 1 .252.458L3.177 9.026a.289.289 0 0 1-.442.029L.295 6.48a.289.289 0 0 1 .191-.486Z'/><path stroke-linecap='round' stroke-linejoin='round' d='M8 5v4h4'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DOCUMENT_LIST_OUTLINE = [\n\t\"<path d='M7.524 4.333a.417.417 0 0 0 0 .834h2.708a.417.417 0 0 0 0-.834H7.524ZM7.107 7.678c0-.23.187-.416.417-.416h2.708a.417.417 0 0 1 0 .833H7.524a.417.417 0 0 1-.417-.417ZM7.524 10.167a.417.417 0 1 0 0 .833h2.708a.417.417 0 1 0 0-.833H7.524Z'/><path d='M3 2.667C3 1.747 3.746 1 4.667 1h6.666C12.253 1 13 1.746 13 2.667v10c0 .92-.746 1.666-1.667 1.666H4.667c-.92 0-1.667-.746-1.667-1.666v-10Zm8.333-.834H4.667a.833.833 0 0 0-.834.834v10c0 .46.373.833.834.833h6.666c.46 0 .834-.373.834-.833v-10a.833.833 0 0 0-.834-.834Z'/><path d='M5.5 4.333a.417.417 0 0 0 0 .834h.292a.417.417 0 0 0 0-.834H5.5ZM5.5 7.262a.417.417 0 1 0 0 .833h.292a.417.417 0 0 0 0-.833H5.5ZM5.5 10.167a.417.417 0 1 0 0 .833h.292a.417.417 0 1 0 0-.833H5.5Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_DRAG_HANDLE_OUTLINE = [\n\t\"<circle cx='5' cy='4' r='1.25'/><circle cx='5' cy='8' r='1.25'/><circle cx='5' cy='12' r='1.25'/><circle cx='11' cy='4' r='1.25'/><circle cx='11' cy='8' r='1.25'/><circle cx='11' cy='12' r='1.25'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ERROR_FILLED_RED = [\n\t\"<path fill='#E12845' fill-rule='evenodd' d='M7 14A7 7 0 1 0 7 0a7 7 0 0 0 0 14ZM3.353 3.044a.571.571 0 0 0-.185.933L6.192 7l-3.024 3.023a.572.572 0 0 0 .809.81L7 7.807l3.024 3.024a.573.573 0 0 0 .808-.809L7.808 7l3.024-3.023a.571.571 0 1 0-.809-.81L7 6.193 3.977 3.168a.571.571 0 0 0-.624-.124Z' clip-rule='evenodd'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_ERROR_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M7 13A6 6 0 1 0 7 1a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 7 0a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M4.164 4.13a.5.5 0 0 1 .706.034l5 5.5a.5.5 0 1 1-.74.672l-5-5.5a.5.5 0 0 1 .034-.706Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M9.836 4.13a.5.5 0 0 0-.706.034l-5 5.5a.5.5 0 1 0 .74.672l5-5.5a.5.5 0 0 0-.034-.706Z' clip-rule='evenodd'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_EXCLAMATION_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M8 15.2A7.2 7.2 0 1 0 8 .8a7.2 7.2 0 0 0 0 14.4Zm0 .8A8 8 0 1 0 8 0a8 8 0 0 0 0 16Z' clip-rule='evenodd'/><path d='M7.53 12.8v-1.056h.94V12.8h-.94Zm0-2.304V2.784h.94v7.712h-.94Z'/><path fill-rule='evenodd' d='M8 15.04A7.04 7.04 0 1 0 8 .96a7.04 7.04 0 0 0 0 14.08ZM8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_EXPAND_OUTLINE = [\n\t\"<g clip-path='url(#a)'><path d='M.35 6.5V1L.363.87A.65.65 0 0 1 1 .35h6l.13.013a.65.65 0 0 1 0 1.274L7 1.65H1.65V6.5a.65.65 0 0 1-1.3 0ZM15.65 10v5.5l-.013.13a.65.65 0 0 1-.637.52H9l-.13-.013a.65.65 0 0 1 0-1.274L9 14.85h5.35V10a.65.65 0 0 1 1.3 0Z'/><path d='M1.063 1.019a.65.65 0 0 1 .82-.044l.098.088 5 5.5.079.106a.65.65 0 0 1-.943.856l-.098-.088-5-5.5-.079-.106a.65.65 0 0 1 .123-.812ZM9.063 9.019a.65.65 0 0 1 .82-.044l.098.088 5 5.5.079.106a.65.65 0 0 1-.943.856l-.098-.088-5-5.5-.079-.106a.65.65 0 0 1 .123-.812Z'/></g><defs><clipPath id='a'><path d='M0 0h16v16H0z'/></clipPath></defs>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_EXPORT_OUTLINE = [\n\t\"<g fill-rule='evenodd' clip-path='url(#a)' clip-rule='evenodd'><path d='M0 4.435c0-.317.257-.574.574-.574h6.694a.574.574 0 1 1 0 1.147h-6.12v9.844h9.85V8.258a.574.574 0 0 1 1.147 0v7.168a.574.574 0 0 1-.574.573H.574A.574.574 0 0 1 0 15.426V4.435Z'/><path d='M7.973 1.049c0-.317.256-.574.573-.574L14.78.467c.317 0 .574.255.575.572l.008 6.232a.574.574 0 0 1-1.148.001l-.006-4.847-8.29 8.308a.574.574 0 0 1-.813-.81l8.29-8.308-4.85.006a.574.574 0 0 1-.574-.572Z'/></g><defs><clipPath id='a'><path d='M0 0h16v16H0z'/></clipPath></defs>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_EYE_CLOSED_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.884 5.18a.5.5 0 0 0-.704-.064l.704.063Zm0 0 .005.006.022.025a8.287 8.287 0 0 0 .464.478c.327.31.803.717 1.398 1.104C4.76 7.434 6.045 8 7.5 8c1.241 0 2.333-.411 3.253-.935.668-.38 1.264-.855 1.696-1.24a11.508 11.508 0 0 0 .672-.651l.007-.008.002-.002a.5.5 0 0 1 .74.672L13.5 5.5l.37.336-.001.002-.003.003-.011.012-.041.043c-.035.037-.085.09-.15.155a12.526 12.526 0 0 1-1.8 1.5l1.948 1.559a.5.5 0 0 1-.624.78l-2.24-1.792c-.839.44-1.828.799-2.948.883V11.5a.5.5 0 1 1-1 0V8.981c-1.319-.099-2.478-.576-3.403-1.12l-1.72 1.968a.5.5 0 1 1-.753-.658l1.63-1.866A10.935 10.935 0 0 1 1.27 5.993a6.076 6.076 0 0 1-.141-.158l-.009-.01-.003-.003V5.82L1.5 5.5l-.383.32a.5.5 0 0 1 .063-.704' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_EYE_OPEN_FILLED = [\n\t\"<path d='M14.333 7.583S11.833 3 7.667 3C3.5 3 1 7.583 1 7.583s2.5 4.584 6.667 4.584c4.166 0 6.666-4.584 6.666-4.584Zm-12.356 0 .162-.24c.28-.4.691-.932 1.221-1.462C4.434 4.807 5.9 3.833 7.667 3.833c1.766 0 3.232.974 4.306 2.048a10.934 10.934 0 0 1 1.383 1.702 10.934 10.934 0 0 1-1.383 1.702c-1.074 1.075-2.54 2.048-4.306 2.048S4.434 10.36 3.36 9.286a10.946 10.946 0 0 1-1.383-1.703Z'/><path d='M4.75 7.583a2.917 2.917 0 1 1 5.833 0 2.917 2.917 0 0 1-5.833 0Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_EYE_OPEN_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M7.43 2.208c-1.228.09-2.46.475-3.69 1.16L2.118 1.808a.588.588 0 0 0-.808 0 .535.535 0 0 0 0 .777l1.447 1.391C1.887 4.573 1.02 5.32.153 6.22a.534.534 0 0 0 0 .748C2.763 9.674 5.39 10.999 8 11c2.61.001 5.238-1.32 7.848-4.034l.004-.004.057-.072.047-.085.029-.086.014-.095-.002-.089-.02-.094-.032-.084-.043-.071-.054-.066c-.866-.9-1.734-1.648-2.604-2.244l1.446-1.39a.535.535 0 0 0 0-.777.588.588 0 0 0-.808 0l-1.62 1.557C11.033 2.68 9.8 2.298 8.572 2.207V.549A.561.561 0 0 0 8.001 0a.561.561 0 0 0-.572.55v1.658Zm.683 1.078a.629.629 0 0 1-.224 0c-2.182.038-4.348 1.159-6.529 3.307C3.578 8.778 5.781 9.9 8 9.901c2.22.001 4.424-1.119 6.642-3.308-2.18-2.152-4.348-3.271-6.53-3.307ZM8 3.846c-1.578 0-2.858 1.23-2.858 2.747 0 1.516 1.28 2.747 2.858 2.747 1.577 0 2.857-1.23 2.857-2.747 0-1.516-1.28-2.747-2.857-2.747Zm0 1.099c.946 0 1.714.738 1.714 1.648 0 .91-.768 1.648-1.714 1.648-.947 0-1.715-.738-1.715-1.648 0-.91.768-1.648 1.715-1.648Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 11\",\n] as const;\n\nexport const ICON_FACEBOOK_FILLED = [\n\t\"<path d='M22 12.061C22 6.504 17.523 2 12.001 2 6.477 2.001 2 6.504 2 12.063c0 5.02 3.657 9.182 8.436 9.937v-7.03H7.9v-2.908h2.54V9.845c0-2.52 1.493-3.913 3.777-3.913 1.095 0 2.238.196 2.238.196v2.475h-1.26c-1.242 0-1.63.776-1.63 1.572v1.887h2.773l-.442 2.907h-2.331v7.03C18.343 21.245 22 17.083 22 12.062Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_FIRE_FILLED = [\n\t\"<path d='M19.069 11.051a7.768 7.768 0 0 0-1.853-2.575l-.65-.597a.18.18 0 0 0-.291.074l-.291.834c-.181.523-.514 1.057-.986 1.582a.14.14 0 0 1-.091.045.124.124 0 0 1-.097-.034.131.131 0 0 1-.044-.107c.082-1.346-.32-2.863-1.2-4.515-.73-1.373-1.742-2.444-3.007-3.19l-.924-.543a.18.18 0 0 0-.268.163l.05 1.073c.033.733-.052 1.381-.253 1.92-.246.66-.6 1.272-1.05 1.822a6.61 6.61 0 0 1-1.063 1.03A7.882 7.882 0 0 0 4.81 10.75a7.774 7.774 0 0 0-.19 6.49 7.854 7.854 0 0 0 4.19 4.149c.97.406 1.998.612 3.06.612 1.061 0 2.09-.206 3.06-.61a7.791 7.791 0 0 0 2.501-1.67 7.737 7.737 0 0 0 2.307-5.52c0-1.09-.223-2.15-.668-3.149Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_FISH_FILLED = [\n\t\"<path d='M24 12c0-.775-.669-2.192-2.138-3.469a9.705 9.705 0 0 0-2.826-1.693.148.148 0 0 0-.184.073.89.89 0 0 1-.022.04l-.45.746a8.589 8.589 0 0 0 .004 8.615l.01.018.41.75a.187.187 0 0 0 .232.085C22.483 15.817 24 13.195 24 12Zm-4.402-.007a.75.75 0 1 1-.195-1.487.75.75 0 0 1 .195 1.487Z'/><path d='M15.724 12c0-1.778.47-3.525 1.363-5.062l.006-.01.216-.36a.187.187 0 0 0-.12-.281 13.325 13.325 0 0 0-1.841-.253.372.372 0 0 1-.201-.075c-.904-.687-2.696-1.889-4.522-2.198a.75.75 0 0 0-.844.946l.498 1.743a.187.187 0 0 1-.113.226c-1.728.642-3.215 1.817-4.3 2.712a.375.375 0 0 1-.472.003 14.548 14.548 0 0 0-.454-.346C3.082 7.688.899 7.509.807 7.502a.75.75 0 0 0-.79.91c.02.09.432 1.907 1.487 3.356a.38.38 0 0 1 0 .448C.449 13.666.037 15.482.018 15.573a.75.75 0 0 0 .789.91c.093-.007 2.275-.188 4.13-1.542.152-.111.3-.224.444-.338a.375.375 0 0 1 .472.003c1.09.9 2.58 2.075 4.312 2.719a.187.187 0 0 1 .114.226l-.5 1.743a.75.75 0 0 0 .844.946c.804-.136 2.432-.603 4.502-2.195a.383.383 0 0 1 .204-.078c.618-.04 1.233-.123 1.839-.248a.188.188 0 0 0 .126-.274l-.211-.388A10.069 10.069 0 0 1 15.724 12Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_GLOBE_OUTLINE = [\n\t\"<path d='M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm7.934 9h-2.938a14.86 14.86 0 0 0-1.186-5.079A8.013 8.013 0 0 1 19.934 11zM12 20c-.491 0-1.48-1.819-1.888-5H13.888C13.48 18.181 12.491 20 12 20zm-2-7h4c-.086 1.183-.297 2.24-.606 3.11C13.077 16.922 12.545 18 12 18c-.545 0-1.077-1.078-1.394-1.89C10.297 15.24 10.086 14.183 10 13zm0-2c.086-1.183.297-2.24.606-3.11C10.923 7.078 11.455 6 12 6c.545 0 1.077 1.078 1.394 1.89C13.703 8.76 13.914 9.817 14 11h-4zm-2.81 5.079A14.86 14.86 0 0 0 8.004 11H5.066a8.013 8.013 0 0 0 4.124 5.079zM5.066 13h2.938c.205 1.842.61 3.561 1.186 5.079A8.013 8.013 0 0 1 5.066 13zm9.748 5.079A14.86 14.86 0 0 0 15.996 13h2.938a8.013 8.013 0 0 1-4.18 5.079zM15.996 11a14.86 14.86 0 0 0-1.186-5.079A8.013 8.013 0 0 1 18.934 11h-2.938zM9.19 5.921A14.86 14.86 0 0 0 8.004 11H5.066A8.013 8.013 0 0 1 9.19 5.921z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_GOOGLE_FILLED = [\n\t\"<path d='M21.823 10.363c.119.685.178 1.379.177 2.074 0 3.104-1.11 5.728-3.04 7.504h.002c-1.688 1.56-4.009 2.463-6.76 2.463a10.202 10.202 0 0 1 0-20.403 9.805 9.805 0 0 1 6.824 2.655l-2.912 2.912a5.543 5.543 0 0 0-3.913-1.53c-2.66 0-4.922 1.795-5.728 4.213a6.11 6.11 0 0 0 0 3.906h.004c.81 2.414 3.067 4.21 5.728 4.21 1.375 0 2.556-.353 3.471-.975h-.004a4.72 4.72 0 0 0 2.04-3.1h-5.51v-3.927l9.62-.002Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_HASHTAG_OUTLINE = [\n\t\"<path d='M4.758 13.704c-.192 0-.325-.059-.4-.176-.064-.107-.074-.288-.032-.544l.352-2.096h-1.76c-.149 0-.25-.037-.304-.112-.053-.085-.069-.224-.048-.416.022-.192.059-.336.112-.432a.459.459 0 0 1 .256-.192c.118-.043.246-.064.384-.064H4.87l.48-2.928H3.606c-.149 0-.256-.037-.32-.112-.053-.075-.069-.203-.048-.384.022-.203.064-.352.128-.448a.459.459 0 0 1 .256-.192c.107-.043.235-.064.384-.064h1.536l.4-2.4c.043-.235.096-.41.16-.528a.495.495 0 0 1 .288-.24c.128-.053.304-.08.528-.08.224 0 .363.064.416.192.064.117.07.325.016.624l-.416 2.432h3.264l.368-2.336c.043-.235.091-.416.144-.544a.494.494 0 0 1 .256-.272c.118-.064.294-.096.528-.096.224 0 .374.059.448.176.075.107.091.293.048.56l-.4 2.512h1.472c.182 0 .294.048.336.144.054.096.059.24.016.432a1.096 1.096 0 0 1-.176.432.475.475 0 0 1-.256.16 1.265 1.265 0 0 1-.304.032h-1.312l-.448 2.928h1.456c.182 0 .294.053.336.16a.624.624 0 0 1 .032.352 1.84 1.84 0 0 1-.176.464.463.463 0 0 1-.24.192.975.975 0 0 1-.336.048h-1.296l-.32 1.952a1.427 1.427 0 0 1-.128.48.616.616 0 0 1-.304.288c-.128.064-.314.096-.56.096-.17 0-.293-.059-.368-.176-.074-.107-.09-.293-.048-.56l.32-2.08H6.07l-.32 1.92c-.032.203-.08.373-.144.512a.628.628 0 0 1-.288.288c-.128.064-.314.096-.56.096Zm1.488-4.032H9.51l.464-2.928h-3.2l-.528 2.928Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_HOME_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M2.642 6.408c0-.339.165-.656.442-.85l4.321-3.025c.357-.25.833-.25 1.19 0l4.32 3.025c.278.194.443.511.443.85v6.913c0 .573-.464 1.037-1.037 1.037H3.679a1.037 1.037 0 0 1-1.037-1.037V6.408ZM8 3.383 3.679 6.408v6.913h8.642V6.408L8 3.383Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M10.765 14.358h-5.53v-3.917h1.037v2.88h3.456v-2.88h1.037v3.917Zm-1.037-3.917S9.728 9 8 9s-1.728 1.44-1.728 1.44c-1.038 0-1.038 0-1.038-.002v-.023a1.617 1.617 0 0 1 .008-.126 2.602 2.602 0 0 1 .357-1.103c.41-.683 1.185-1.224 2.4-1.224 1.216 0 1.993.54 2.403 1.224a2.601 2.601 0 0 1 .363 1.23v.023H9.728ZM7.693 2.1a.519.519 0 0 1 .614 0l6.481 4.753a.519.519 0 0 1-.613.837L8 3.162 1.825 7.69a.519.519 0 1 1-.613-.837L7.693 2.1Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_IMPORT_OUTLINE = [\n\t\"<g fill-rule='evenodd' clip-path='url(#a)' clip-rule='evenodd'><path d='M16 11.565a.574.574 0 0 1-.574.573H8.732a.574.574 0 1 1 0-1.147h6.12V1.147h-9.85v6.595a.574.574 0 0 1-1.147 0V.574c0-.317.257-.574.574-.574h10.997c.317 0 .574.257.574.574v10.99Z'/><path d='M8.027 14.95a.574.574 0 0 1-.573.574l-6.235.009a.574.574 0 0 1-.575-.573L.636 8.728a.574.574 0 0 1 1.148-.002l.006 4.848 8.29-8.308a.574.574 0 0 1 .813.81l-8.29 8.308 4.85-.007c.317 0 .574.256.574.573Z'/></g><defs><clipPath id='a'><path d='M0 0h16v16H0z'/></clipPath></defs>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_INFO_FILLED_BLUE = [\n\t\"<path fill='#275FFD' fill-rule='evenodd' d='M7 14A7 7 0 1 0 7 0a7 7 0 0 0 0 14Zm.32-9.24a.88.88 0 1 0 0-1.76.88.88 0 0 0 0 1.76ZM6.123 5.97l2.015-.253-.881 4.139c-.062.299.026.469.268.469.17 0 .428-.062.603-.217l-.077.366c-.253.304-.81.526-1.289.526-.618 0-.881-.371-.711-1.16L6.7 6.79c.056-.258.004-.35-.253-.413l-.397-.072.072-.335Z' clip-rule='evenodd'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_INFO_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M7 13A6 6 0 1 0 7 1a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 7 0a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path d='m8.138 5.716-2.015.253-.072.335.397.072c.257.062.309.155.252.413L6.05 9.84c-.17.789.094 1.16.712 1.16.48 0 1.036-.222 1.289-.526l.077-.366a.974.974 0 0 1-.603.217c-.242 0-.33-.17-.268-.47l.881-4.139ZM8.2 3.88a.88.88 0 1 1-1.76 0 .88.88 0 0 1 1.76 0Z'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_INSTAGRAM_FILLED = [\n\t\"<path d='M12 8.876A3.13 3.13 0 0 0 8.876 12 3.13 3.13 0 0 0 12 15.124 3.13 3.13 0 0 0 15.124 12 3.13 3.13 0 0 0 12 8.876ZM21.37 12c0-1.294.012-2.576-.06-3.867-.073-1.5-.415-2.831-1.512-3.928-1.1-1.1-2.428-1.44-3.928-1.512-1.294-.073-2.576-.061-3.868-.061-1.293 0-2.575-.012-3.867.061-1.5.073-2.831.415-3.928 1.512-1.1 1.099-1.439 2.428-1.512 3.928-.072 1.294-.06 2.576-.06 3.867s-.012 2.576.06 3.867c.073 1.5.415 2.831 1.512 3.928 1.1 1.1 2.428 1.44 3.928 1.512 1.294.073 2.576.061 3.867.061 1.294 0 2.576.012 3.867-.061 1.5-.073 2.832-.415 3.929-1.512 1.099-1.099 1.439-2.428 1.511-3.928.075-1.291.061-2.573.061-3.867ZM12 16.807A4.8 4.8 0 0 1 7.193 12 4.8 4.8 0 0 1 12 7.193 4.8 4.8 0 0 1 16.807 12 4.8 4.8 0 0 1 12 16.807Zm5.004-8.688a1.121 1.121 0 0 1-1.123-1.123c0-.621.502-1.123 1.123-1.123a1.121 1.121 0 0 1 .43 2.16 1.12 1.12 0 0 1-.43.086Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_KEY_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M12.888 4.373c0-1.205-.912-2.191-2.038-2.191s-2.038.986-2.038 2.19c0 1.207.912 2.183 2.038 2.183s2.038-.976 2.038-2.182m1.112 0C14 2.51 12.59 1 10.85 1S7.7 2.51 7.7 4.373c0 .717.21 1.382.565 1.93l-6.102 6.534a.625.625 0 0 0 0 .841.53.53 0 0 0 .786 0l.834-.892q.021.03.047.058l.918.982a.53.53 0 0 0 .786 0 .625.625 0 0 0 0-.842l-.917-.982a1 1 0 0 0-.055-.051l.545-.584.02.023.525.56a.53.53 0 0 0 .786 0 .625.625 0 0 0 0-.84l-.524-.563-.021-.02 3.16-3.383c.51.38 1.129.602 1.797.602 1.74 0 3.15-1.51 3.15-3.373' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_LACTOSE_INTOLERANT_FILLED = [\n\t\"<path fill-rule='evenodd' d='M1.293 1.293a1 1 0 0 1 1.414 0L8.494 7.08a.99.99 0 0 1 .028.027l7.613 7.614.015.015 6.557 6.557a1 1 0 0 1-1.414 1.414L18 19.414V20a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3v-9.788a5 5 0 0 1 .539-2.259L1.293 2.707a1 1 0 0 1 0-1.414ZM8.086 9.5a3 3 0 0 0-.086.712v3.438a7.472 7.472 0 0 1 4.386.428c.145.06.292.114.44.162L8.086 9.5Zm3.528 6.422a7.472 7.472 0 0 0 3.453.56l-3.453-.56Zm3.453.56.933.932V20a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4.293a5.467 5.467 0 0 1 3.614.215M7 2a1 1 0 0 1 1-1h8a1 1 0 1 1 0 2v1.789a3 3 0 0 0 .504 1.664l.656.984a5 5 0 0 1 .84 2.775v1.131a1 1 0 1 1-2 0v-1.131a3 3 0 0 0-.504-1.665l-.656-.984A5 5 0 0 1 14 4.789V3h-4v.343a1 1 0 0 1-2 0V3a1 1 0 0 1-1-1Z' clip-rule='evenodd'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_LAYOUT_1_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.733 1.444c0-.245.2-.444.445-.444h4.444c.246 0 .445.199.445.444V5.89a.444.444 0 0 1-.445.444H2.178a.444.444 0 0 1-.445-.444V1.444Zm.89.445v3.556h3.555V1.889H2.622ZM1.733 8.111c0-.245.2-.444.445-.444h4.444c.246 0 .445.199.445.444v4.445a.444.444 0 0 1-.445.444H2.178a.444.444 0 0 1-.445-.444V8.111Zm.89.445v3.556h3.555V8.555H2.622ZM9.067 1.444c0-.245.186-.444.416-.444h4.167c.23 0 .417.199.417.444v11.112c0 .245-.187.444-.417.444H9.483c-.23 0-.416-.199-.416-.444V1.444Zm.833.445V12.11h3.333V1.89H9.9Z' clip-rule='evenodd'/>\",\n\t\"0 0 15 14\",\n] as const;\n\nexport const ICON_LAYOUT_2_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M7.241 1.305a.439.439 0 0 0-.439-.44h-4.39a.439.439 0 0 0-.439.44v4.39c0 .242.197.439.44.439h4.39a.439.439 0 0 0 .438-.439v-4.39Zm-.878.439v3.512H2.851V1.744h3.512ZM11.266 5.11a1.683 1.683 0 1 1 0-3.366 1.683 1.683 0 0 1 0 3.366Zm0 .878a2.561 2.561 0 1 1 0-5.122 2.561 2.561 0 0 1 0 5.122ZM2.344 8.134c-.245 0-.444.187-.444.417v4.167c0 .23.199.416.444.416h11.111c.246 0 .445-.186.445-.416V8.55c0-.23-.2-.417-.444-.417H2.344Zm.445.834H13.01V12.3H2.789V8.968Z' clip-rule='evenodd'/>\",\n\t\"0 0 15 14\",\n] as const;\n\nexport const ICON_LAYOUT_3_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.733 1.444c0-.245.2-.444.445-.444h4.444c.246 0 .445.199.445.444V5.89a.444.444 0 0 1-.445.444H2.178a.444.444 0 0 1-.445-.444V1.444Zm.89.445v3.556h3.555V1.889H2.622ZM1.733 8.111c0-.245.2-.444.445-.444h4.444c.246 0 .445.199.445.444v4.445a.444.444 0 0 1-.445.444H2.178a.444.444 0 0 1-.445-.444V8.111Zm.89.445v3.556h3.555V8.555H2.622ZM9.067 1.444c0-.245.186-.444.416-.444h4.167c.23 0 .417.199.417.444v11.112c0 .245-.187.444-.417.444H9.483c-.23 0-.416-.199-.416-.444V1.444Zm.833.445V12.11h3.333V1.89H9.9Z' clip-rule='evenodd'/>\",\n\t\"0 0 15 14\",\n] as const;\n\nexport const ICON_LAYOUT_4_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M2.178 7.667a.444.444 0 0 0-.445.444v4.444c0 .246.2.445.445.445h4.444a.444.444 0 0 0 .445-.445V8.111a.444.444 0 0 0-.445-.445H2.178Zm.444.888h3.556v3.556H2.622V8.555ZM6.03 3.593a1.704 1.704 0 1 1-3.408 0 1.704 1.704 0 0 1 3.408 0Zm.888 0a2.593 2.593 0 1 1-5.185 0 2.593 2.593 0 0 1 5.185 0ZM9.067 12.556c0 .245.186.444.416.444h4.167c.23 0 .416-.199.416-.444V1.444c0-.245-.186-.444-.416-.444H9.483c-.23 0-.416.199-.416.444v11.112Zm.833-.445V1.89h3.333V12.11H9.9Z' clip-rule='evenodd'/>\",\n\t\"0 0 15 14\",\n] as const;\n\nexport const ICON_LAYOUT_5_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.668 3.588a1.744 1.744 0 1 0 3.488 0 1.744 1.744 0 0 0-3.488 0Zm-.91 0a2.654 2.654 0 1 0 5.308 0 2.654 2.654 0 0 0-5.308 0ZM1.668 10.412a1.744 1.744 0 1 0 3.488 0 1.744 1.744 0 0 0-3.488 0Zm-.91 0a2.654 2.654 0 1 0 5.308 0 2.654 2.654 0 0 0-5.308 0ZM15.042 2.223a.455.455 0 0 0-.455-.455H8.52a.455.455 0 1 0 0 .91h6.066a.455.455 0 0 0 .455-.455ZM15.042 5.408a.455.455 0 0 0-.455-.455H8.52a.455.455 0 1 0 0 .91h6.066a.455.455 0 0 0 .455-.455ZM15.042 8.592a.455.455 0 0 0-.455-.455H8.52a.455.455 0 1 0 0 .91h6.066a.455.455 0 0 0 .455-.455ZM15.042 11.777a.455.455 0 0 0-.455-.455H8.52a.455.455 0 1 0 0 .91h6.066a.455.455 0 0 0 .455-.455Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 14\",\n] as const;\n\nexport const ICON_LEAF_FILLED = [\n\t\"<path d='M20.977 3.27 20.857 2l-1.21.403c-2.072.72-4.285.94-6.458.645a11.96 11.96 0 0 0-6.73.907 7.285 7.285 0 0 0-4.323 5.45 9.068 9.068 0 0 0 .393 4.615c.34-.768.737-1.508 1.189-2.216a9.925 9.925 0 0 1 4.1-3.456 11.244 11.244 0 0 1 5.099-1.008c-1.67.255-3.27.856-4.696 1.763a9.553 9.553 0 0 0-1.874 1.542 11.465 11.465 0 0 0-1.4 1.924 16.514 16.514 0 0 0-1.582 4.575A26.62 26.62 0 0 0 2.841 22h2.015a30.92 30.92 0 0 1 .595-4.353 9.32 9.32 0 0 0 4.554 1.119 11.083 11.083 0 0 0 4.312-.877c7.668-3.274 6.66-14.166 6.66-14.62Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_LINKEDIN_FILLED = [\n\t\"<path d='M2 3.433C2 2.64 2.658 2 3.469 2H20.53C21.343 2 22 2.641 22 3.433v17.134C22 21.36 21.343 22 20.531 22H3.47C2.658 22 2 21.359 2 20.567V3.433Zm6.179 15.31V9.71H5.177v9.031H8.18Zm-1.5-10.265c1.046 0 1.697-.693 1.697-1.56-.018-.887-.65-1.56-1.677-1.56C5.67 5.357 5 6.032 5 6.918c0 .867.651 1.56 1.659 1.56h.02Zm6.135 10.264V13.7c0-.27.02-.54.1-.733.216-.538.71-1.097 1.54-1.097 1.086 0 1.52.827 1.52 2.042v4.832h3.001v-5.18c0-2.776-1.48-4.066-3.455-4.066-1.592 0-2.306.876-2.706 1.492v.031h-.02l.02-.031V9.71h-3c.037.848 0 9.031 0 9.031h3Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_LOCATION_FILLED = [\n\t\"<path d='M11.5 22S19 14.892 19 9.5a7.5 7.5 0 0 0-15 0C4 14.892 11.5 22 11.5 22Zm0-8.75a3.75 3.75 0 1 1 0-7.5 3.75 3.75 0 0 1 0 7.5Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_LOCK_PASSWORD_1_OUTLINE = [\n\t\"<path d='M5.961 9.278h4.088c.844 0 1.531-.687 1.531-1.532V5.151a1.53 1.53 0 0 0-1.453-1.524V2.623C10.127 1.453 9.175.5 8.005.5s-2.123.952-2.123 2.123v1.003A1.53 1.53 0 0 0 4.43 5.15v2.595c0 .846.687 1.533 1.531 1.533M8 1.5c.676 0 1.231.558 1.231 1.234v.885H6.778v-.885A1.23 1.23 0 0 1 8 1.5m-2.5 4c0-.35 0-.781.547-.781h4.002c.451 0 .53.43.53.781v2c0 .35-.089.828-.618.828H6.07c-.462 0-.571-.478-.571-.828zM13.553 10.543H2.602C1.547 10.543 1 11.197 1 12v2.117c0 .804.653 1.458 1.457 1.458h11.096c.803 0 1.457-.654 1.457-1.457V12c0-.804-.653-1.457-1.457-1.457M14 14.118c0 .308-.138.482-.447.482H2.457c-.31 0-.457-.174-.457-.482V12c0-.309.293-.49.602-.49h10.951c.31 0 .447.181.447.49z'/><path d='M4.653 13.806a.652.652 0 1 0 0-1.306.652.652 0 1 0 0 1.306M8 13.806A.652.652 0 1 0 8 12.5a.652.652 0 1 0 0 1.306M11.653 13.806a.652.652 0 1 0 0-1.306.652.652 0 1 0 0 1.306'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_LOCK_PASSWORD_2_OUTLINE = [\n\t\"<path d='M14.41 9.018a2.11 2.11 0 0 0-1.642-.601V7.1c.001-.908-.735-1.646-1.645-1.648H9.845v-2A2.96 2.96 0 0 0 8.364.895a2.97 2.97 0 0 0-2.96 0 2.96 2.96 0 0 0-1.48 2.558v2H2.644C1.735 5.455.999 6.193 1 7.1v6.75c0 .908.735 1.647 1.645 1.649h8.478a1.65 1.65 0 0 0 1.645-1.65v-1.315a2.073 2.073 0 0 0 1.641-3.517M4.936 3.453a1.947 1.947 0 0 1 3.897 0v2H4.936zm6.82 10.398a.636.636 0 0 1-.633.638H2.645a.636.636 0 0 1-.633-.638V7.1a.635.635 0 0 1 .633-.637h1.782c.001-.004 4.906.003 4.91 0h1.786a.635.635 0 0 1 .633.637v1.316H8.443a2.06 2.06 0 0 0 0 4.118h3.313zm1.197-2.327c-.36-.002-4.035.002-4.499 0a1.049 1.049 0 0 1-.01-2.096h4.51a1.049 1.049 0 0 1-.001 2.096m-2.258-.542a.506.506 0 0 1 0-1.012.506.506 0 0 1 0 1.011m1.796 0a.506.506 0 0 1 .001-1.012.506.506 0 0 1 0 1.011m-3.593 0a.506.506 0 0 1 0-1.012.506.506 0 0 1 0 1.011'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MAIL_OUTLINE = [\n\t\"<path d='M1.714 2.5C.763 2.5 0 3.303 0 4.256v7.91c0 .954.763 1.763 1.714 1.763h12.572c.951 0 1.714-.81 1.714-1.762V4.256c0-.953-.763-1.756-1.714-1.756H1.714Zm.084 1.143h12.41L8.34 9.214c-.213.203-.452.203-.666 0L1.798 3.643Zm-.655.952 3.893 3.69-3.893 3.882V4.595Zm13.714 0v7.572l-3.88-3.887 3.88-3.685Zm-4.702 4.47 3.708 3.72H2.143l3.72-3.714 1.024.97c.62.589 1.618.59 2.238 0l1.03-.976Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MENU_CLOSE_OUTLINE = [\n\t\"<path d='m13.003 1.013.107-.097a1.413 1.413 0 0 1 1.988 1.988L15 3.01 3.01 15a1.413 1.413 0 1 1-1.998-1.999l11.99-11.99Z'/><path d='m14.987 12.989.097.107a1.413 1.413 0 0 1-1.988 1.988l-.107-.097L.999 2.997A1.413 1.413 0 0 1 2.997 1l11.99 11.99Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MENU_HAMBURGER_OUTLINE = [\n\t\"<path d='m14.857 0 .117.006a1.143 1.143 0 0 1 0 2.274l-.117.006H1.143a1.143 1.143 0 1 1 0-2.286h13.714ZM14.857 6.857l.117.006a1.143 1.143 0 0 1 0 2.274l-.117.006H1.143a1.143 1.143 0 0 1 0-2.286h13.714ZM14.857 13.714l.117.006a1.143 1.143 0 0 1 0 2.274l-.117.006H1.143a1.143 1.143 0 0 1 0-2.286h13.714Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MINUS_BICOLOR_TERTIARY_LIGHT = [\n\t\"<circle cx='8' cy='8' r='8' fill='#F7F3EE'/><path fill='#1B1B1B' fill-rule='evenodd' d='M3.929 8.5c0-.276.191-.5.428-.5H11.5c.237 0 .429.224.429.5s-.192.5-.429.5H4.357c-.237 0-.428-.224-.428-.5Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MINUS_BICOLOR_TERTIARY = [\n\t\"<circle cx='8' cy='8' r='8' fill='#E6D9CA'/><path fill='#1B1B1B' fill-rule='evenodd' d='M3.929 8.5c0-.276.191-.5.428-.5H11.5c.237 0 .429.224.429.5s-.192.5-.429.5H4.357c-.237 0-.428-.224-.428-.5Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MINUS_FILLED = [\n\t\"<path d='M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM4.357 8c-.236 0-.428.224-.428.5s.192.5.428.5H11.5c.237 0 .429-.224.429-.5S11.737 8 11.5 8H4.357Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MONEY_BILL_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M0 12.167V4.833c0-.053.002-.107.006-.16.072-.885.731-1.59 1.558-1.666.05-.005.1-.007.15-.007h12.572c.05 0 .1.002.15.007.827.076 1.486.781 1.558 1.666a2 2 0 0 1 .006.16v7.334c0 .053-.002.107-.006.16-.072.885-.731 1.59-1.558 1.666-.05.005-.1.007-.15.007H1.714c-.05 0-.1-.002-.15-.007-.827-.076-1.486-.781-1.558-1.666a2.009 2.009 0 0 1-.006-.16Zm2.829-7.945H1.714c-.315 0-.571.274-.571.611v1.192c.093.02.188.03.286.03.788 0 1.428-.684 1.428-1.527 0-.105-.01-.206-.028-.306Zm9.187 0H3.984c.011.1.016.203.016.306 0 1.518-1.152 2.75-2.571 2.75-.097 0-.192-.006-.286-.017v2.478c.094-.012.19-.017.286-.017C2.848 9.722 4 10.954 4 12.472c0 .103-.005.206-.016.306h8.032a2.88 2.88 0 0 1-.016-.306c0-1.518 1.152-2.75 2.571-2.75.097 0 .193.005.286.017V7.261c-.093.011-.19.017-.286.017-1.419 0-2.571-1.232-2.571-2.75 0-.103.005-.206.016-.306ZM8 10.111c.301 0 .571-.207.571-.5 0-.217-.167-.288-.332-.366-.246-.114-.528-.198-.784-.304-.67-.278-1.17-.705-1.17-1.552 0-.738.471-1.385 1.144-1.625v-.32c0-.337.255-.61.571-.61.316 0 .571.273.571.61v.32c.382.137.7.403.901.741.17.285.09.663-.176.844a.55.55 0 0 1-.788-.187A.584.584 0 0 0 8 6.889c-.301 0-.571.207-.571.5 0 .217.167.288.332.365.246.115.528.199.784.305.67.278 1.17.705 1.17 1.552 0 .738-.471 1.385-1.144 1.624v.32c0 .338-.255.612-.571.612-.316 0-.571-.274-.571-.611v-.32a1.73 1.73 0 0 1-.901-.742.637.637 0 0 1 .176-.843.55.55 0 0 1 .788.187c.1.17.293.273.508.273Zm5.171 2.667h1.115c.315 0 .571-.274.571-.611v-1.192a1.357 1.357 0 0 0-.286-.03c-.788 0-1.428.684-1.428 1.527 0 .105.01.207.028.306ZM1.143 10.975v1.192c0 .337.256.61.571.61H2.83c.018-.098.028-.2.028-.305 0-.843-.64-1.528-1.428-1.528-.098 0-.193.011-.286.031Zm13.714-4.95V4.833c0-.337-.256-.61-.571-.61H13.17c-.018.099-.028.2-.028.305 0 .843.64 1.528 1.428 1.528.098 0 .193-.011.286-.03Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MONEY_CASH_OUTLINE = [\n\t\"<path d='M16 6.417C16 3.432 13.605 1 10.667 1c-1.739 0-3.28.856-4.256 2.167H1.6c-.88 0-1.6.73-1.6 1.625v1.083c0 .417.16.796.416 1.083A1.625 1.625 0 0 0 0 8.042v1.083c0 .417.16.796.416 1.083A1.625 1.625 0 0 0 0 11.292v1.083C0 13.269.72 14 1.6 14h8.533c.88 0 1.6-.731 1.6-1.625v-.65C14.165 11.221 16 9.033 16 6.417ZM1.067 9.125V8.042A.54.54 0 0 1 1.6 7.5h3.84c.16.802.501 1.538.97 2.167H1.6a.539.539 0 0 1-.533-.542Zm0-4.333A.54.54 0 0 1 1.6 4.25h4.181a5.443 5.443 0 0 0-.448 2.167H1.6a.54.54 0 0 1-.533-.542V4.792Zm9.6 7.583a.54.54 0 0 1-.534.542H1.6a.54.54 0 0 1-.533-.542v-1.083a.54.54 0 0 1 .533-.542h5.883a5.24 5.24 0 0 0 3.184 1.083v.542Zm0-1.625C8.315 10.75 6.4 8.805 6.4 6.417c0-2.389 1.915-4.334 4.267-4.334 2.352 0 4.266 1.945 4.266 4.334 0 2.388-1.914 4.333-4.266 4.333Z'/><path d='M10.207 5.27h1.467c.22 0 .4-.208.4-.462s-.18-.462-.4-.462h-.7v-.384c0-.254-.18-.462-.399-.462-.22 0-.4.208-.4.462v.389c-.607.023-1.098.596-1.098 1.303s.507 1.308 1.13 1.308h.732c.183 0 .331.171.331.384s-.148.384-.331.384H9.473c-.22 0-.4.208-.4.462s.18.462.4.462h.699v.384c0 .254.18.462.4.462.219 0 .399-.208.399-.462v-.389c.607-.023 1.098-.596 1.098-1.303s-.507-1.308-1.13-1.308h-.732c-.183 0-.331-.171-.331-.384s.148-.384.332-.384Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MONEY_COIN_OUTLINE = [\n\t\"<path d='M14.7 8A6.7 6.7 0 1 0 8 14.7V16A8 8 0 1 1 8 0a8 8 0 0 1 0 16v-1.3c3.7 0 6.7-3 6.7-6.7Z'/><path d='M7.513 6.36h1.954c.293 0 .533-.277.533-.616 0-.339-.24-.616-.533-.616h-.932v-.512c0-.339-.24-.616-.532-.616-.293 0-.533.277-.533.616v.518c-.81.03-1.465.795-1.465 1.738s.677 1.744 1.508 1.744h.974c.245 0 .442.228.442.512 0 .283-.197.511-.442.511H6.533c-.293 0-.533.278-.533.617 0 .339.24.616.533.616h.932v.512c0 .339.24.616.532.616.293 0 .533-.277.533-.616v-.518c.81-.03 1.465-.795 1.465-1.738s-.677-1.744-1.508-1.744h-.974c-.245 0-.442-.228-.442-.512 0-.283.197-.511.442-.511Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_MONEY_CREDIT_CARD_OUTLINE = [\n\t\"<path d='M13.143 3H2.857C1.28 3 0 4.232 0 5.75v5.5C0 12.768 1.28 14 2.857 14h10.286C14.72 14 16 12.768 16 11.25v-5.5C16 4.232 14.72 3 13.143 3ZM2.857 4.1h10.286c.943 0 1.714.743 1.714 1.65v.275H1.143V5.75c0-.907.771-1.65 1.714-1.65Zm10.286 8.8H2.857c-.943 0-1.714-.742-1.714-1.65V7.125h13.714v4.125c0 .908-.771 1.65-1.714 1.65Z'/><path d='M10.591 9c.332 0 .647.1.909.265A1.57 1.57 0 0 1 12.409 9C13.283 9 14 9.68 14 10.508c0 .83-.717 1.492-1.591 1.492-.332 0-.647-.1-.909-.265-.262.165-.56.265-.909.265C9.717 12 9 11.32 9 10.492 9 9.662 9.717 9 10.591 9Zm1.38 2.22c.123.066.28.1.42.1.49 0 .892-.381.892-.829 0-.464-.402-.845-.892-.845a.862.862 0 0 0-.42.1c.123.215.21.464.21.729 0 .282-.07.53-.21.745Zm-1.38.117c.49 0 .892-.381.892-.845 0-.465-.402-.846-.892-.846s-.892.381-.892.845c0 .465.402.846.892.846ZM5 8.5l.1.01a.5.5 0 0 1 0 .98L5 9.5H3a.5.5 0 0 1 0-1h2ZM7 10.5a.5.5 0 0 1 0 1H3a.5.5 0 0 1 0-1h4Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_NFC_FILLED = [\n\t\"<path d='M15 .5A2.5 2.5 0 0 1 17.5 3v12a2.5 2.5 0 0 1-2.5 2.5H3A2.5 2.5 0 0 1 .5 15V3A2.5 2.5 0 0 1 3 .5h12ZM5.994 4.622a.5.5 0 0 0-.822.306L5.167 5v8.667a.5.5 0 0 0 1 0V6.095l3.173 2.75.082.057a.5.5 0 0 0 .641-.74l-.069-.073-4-3.467Zm6.34-.122a.5.5 0 0 0-.5.5v7.69l-3.208-2.318a.5.5 0 0 0-.585.812l4 2.888.06.036a.5.5 0 0 0 .733-.441V5a.5.5 0 0 0-.5-.5Z'/>\",\n\t\"0 0 18 18\",\n] as const;\n\nexport const ICON_NFC_OUTLINE = [\n\t\"<path d='M16.5 3A1.5 1.5 0 0 0 15 1.5H3A1.5 1.5 0 0 0 1.5 3v12A1.5 1.5 0 0 0 3 16.5h12a1.5 1.5 0 0 0 1.5-1.5V3ZM5.167 13.667V5a.5.5 0 0 1 .827-.378l4 3.467.07.073a.5.5 0 0 1-.642.74l-.083-.057-3.172-2.75v7.572a.5.5 0 0 1-1 0ZM11.833 5a.5.5 0 0 1 1 0v8.667a.5.5 0 0 1-.792.405l-4-2.888-.076-.068a.5.5 0 0 1 .661-.744l3.207 2.316V5ZM17.5 15a2.5 2.5 0 0 1-2.5 2.5H3A2.5 2.5 0 0 1 .5 15V3A2.5 2.5 0 0 1 3 .5h12A2.5 2.5 0 0 1 17.5 3v12Z'/>\",\n\t\"0 0 18 18\",\n] as const;\n\nexport const ICON_PENCIL_OUTLINE = [\n\t\"<path d='M10.944 1c-.44 0-.88.165-1.213.498L1.737 9.497A2.515 2.515 0 0 0 1 11.275v2.148C1 14.286 1.714 15 2.577 15h2.148c.667 0 1.307-.265 1.778-.737l7.999-7.994a1.724 1.724 0 0 0 0-2.424l-2.347-2.347A1.708 1.708 0 0 0 10.943 1Zm.002 1.16c.14 0 .278.055.387.165l2.342 2.341a.54.54 0 0 1 0 .775l-1.15 1.15L9.41 3.474l1.15-1.15a.545.545 0 0 1 .387-.163ZM8.582 4.302 11.7 7.418 5.68 13.436a1.353 1.353 0 0 1-.956.395H2.577a.4.4 0 0 1-.41-.409v-2.148c0-.358.143-.703.396-.956l6.02-6.017Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PENCIL = [\n\t\"<path fill='#1B1B1B' d='M10.944 1c-.44 0-.88.165-1.213.498L1.737 9.497A2.515 2.515 0 0 0 1 11.275v2.148C1 14.286 1.714 15 2.577 15h2.148c.667 0 1.307-.265 1.778-.737l7.999-7.994a1.724 1.724 0 0 0 0-2.424l-2.347-2.347A1.708 1.708 0 0 0 10.943 1Zm.002 1.16c.14 0 .278.055.387.165l2.342 2.341a.54.54 0 0 1 0 .775l-1.15 1.15L9.41 3.474l1.15-1.15a.545.545 0 0 1 .387-.163ZM8.582 4.302 11.7 7.418 5.68 13.436a1.353 1.353 0 0 1-.956.395H2.577a.4.4 0 0 1-.41-.409v-2.148c0-.358.143-.703.396-.956l6.02-6.017Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PHONE_OUTLINE = [\n\t\"<path d='M9.951 15c-1.058 0-2.108-.347-2.927-1.029a26.112 26.112 0 0 1-3.52-3.553A24.78 24.78 0 0 1 .811 6.37C-.1 4.65.463 2.58 2.152 1.447l.168-.113c.402-.27.897-.383 1.393-.314a1.9 1.9 0 0 1 1.23.67l1.488 1.825c.615.755.44 1.823-.392 2.38l-.661.444A6.543 6.543 0 0 0 6.52 8.394a7.198 7.198 0 0 0 1.84 1.597l.655-.447c.403-.27.899-.382 1.393-.316.496.068.934.306 1.23.671l1.488 1.825c.615.754.44 1.822-.393 2.38l-.168.113c-.782.523-1.701.782-2.616.782l.002.001ZM3.434 2.136c-.13 0-.26.035-.372.111l-.167.112c-1.206.81-1.608 2.29-.956 3.519a23.758 23.758 0 0 0 2.57 3.866 25.05 25.05 0 0 0 3.361 3.392c1.087.906 2.75.977 3.952.17l.169-.113a.533.533 0 0 0 .13-.793l-1.488-1.825a.637.637 0 0 0-.41-.224.678.678 0 0 0-.465.105l-.66.443c-.425.285-1.003.299-1.438.032A8.466 8.466 0 0 1 5.514 9.07a7.687 7.687 0 0 1-1.34-2.414c-.15-.45.034-.944.46-1.23l.66-.443a.533.533 0 0 0 .13-.793L3.936 2.365a.646.646 0 0 0-.502-.23Zm9.415 5.973c.26-2.177-1.48-4.14-3.882-4.376-.345-.032-.652.192-.69.503-.037.311.212.592.555.626 1.715.168 2.958 1.57 2.773 3.125-.037.311.211.591.554.625a.74.74 0 0 0 .068.004c.316 0 .588-.217.622-.507Zm2.488.244c.199-1.657-.327-3.285-1.48-4.583-1.151-1.3-2.791-2.114-4.619-2.294-.342-.033-.652.192-.69.503-.037.311.212.591.555.625 1.495.147 2.838.814 3.78 1.877.942 1.063 1.372 2.394 1.21 3.75-.037.312.211.592.555.626a.747.747 0 0 0 .068.003c.315 0 .587-.216.621-.507Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PLUS_BICOLOR_TERTIARY_LIGHT = [\n\t\"<circle cx='8' cy='8' r='8' fill='#F7F3EE'/><path fill='#1B1B1B' fill-rule='evenodd' d='M8.522 4.078a.522.522 0 0 0-1.045 0v3.4h-3.4a.522.522 0 1 0 0 1.044h3.4v3.4a.522.522 0 0 0 1.045 0v-3.4h3.4a.522.522 0 0 0 0-1.045h-3.4v-3.4Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PLUS_BICOLOR_TERTIARY = [\n\t\"<circle cx='8' cy='8' r='8' fill='#E6D9CA'/><path fill='#1B1B1B' fill-rule='evenodd' d='M8.522 4.078a.522.522 0 0 0-1.045 0v3.4h-3.4a.522.522 0 1 0 0 1.044h3.4v3.4a.522.522 0 0 0 1.045 0v-3.4h3.4a.522.522 0 0 0 0-1.045h-3.4v-3.4Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PLUS_FILLED = [\n\t\"<path d='M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0Zm-.001 3.556a.522.522 0 0 0-.521.522v3.4h-3.4a.523.523 0 0 0 0 1.043h3.4v3.402a.522.522 0 0 0 1.043 0V8.52h3.4a.522.522 0 1 0 0-1.043h-3.4v-3.4A.523.523 0 0 0 8 3.556Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PRINTER_OUTLINE = [\n\t\"<path d='M13.035 3.69h-.547V1.368a.407.407 0 0 0-.407-.406H4.139a.407.407 0 0 0-.408.406V3.69h-.547a2.072 2.072 0 0 0-2.075 2.063v4.437c0 .224.183.406.408.406h2.214v2.958c0 .225.182.406.408.406h7.94a.406.406 0 0 0 .409-.406v-2.958H14.7a.407.407 0 0 0 .408-.406V5.754c0-1.137-.93-2.063-2.074-2.063ZM4.547 1.774h7.125V3.69H4.547V1.773Zm7.125 11.376H4.547V8.602h7.125v4.547Zm2.621-3.363H12.49V8.602h.596a.407.407 0 1 0 0-.811H3.135a.407.407 0 1 0 0 .811h.597v1.184H1.926V5.754c0-.69.565-1.251 1.259-1.251h9.85c.694 0 1.258.561 1.258 1.251v4.032Z'/><path d='M4.11 6.461c0 .667-1 .667-1 0s1-.667 1 0ZM10.519 9.367H5.558a.51.51 0 0 0-.52.5c0 .276.232.5.52.5h4.96a.51.51 0 0 0 .52-.5.51.51 0 0 0-.52-.5ZM10.519 11.367H5.558a.51.51 0 0 0-.52.5c0 .276.232.5.52.5h4.96a.51.51 0 0 0 .52-.5.51.51 0 0 0-.52-.5Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PURCHASE_ORDER_BILL_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.5.536C1.5.24 1.743 0 2.042 0h11.916c.3 0 .542.24.542.536v13.928c0 .198-.11.38-.287.473a.547.547 0 0 1-.558-.029l-2.676-1.787-2.676 1.787a.546.546 0 0 1-.622-.01l-2.66-1.914-2.66 1.914a.547.547 0 0 1-.565.044.535.535 0 0 1-.296-.478V.536Zm1.083.535v12.341l2.12-1.524a.547.547 0 0 1 .636 0l2.673 1.922 2.664-1.78a.547.547 0 0 1 .606 0l2.135 1.426V1.071H2.583Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M7.5 4a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1H8a.5.5 0 0 1-.5-.5ZM7.5 6.5A.5.5 0 0 1 8 6h3a.5.5 0 0 1 0 1H8a.5.5 0 0 1-.5-.5ZM4.5 9a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5Z' clip-rule='evenodd'/><path d='M5.162 6.588v.28c0 .073.052.132.116.132h.297c.064 0 .116-.059.116-.132v-.28c.219-.044.4-.147.528-.309a.986.986 0 0 0 .22-.647c0-.073 0-.132-.013-.19a2.637 2.637 0 0 0-.04-.163c-.012-.058-.038-.103-.064-.147-.025-.044-.064-.088-.09-.117-.026-.03-.064-.074-.116-.103-.039-.03-.09-.06-.129-.088-.039-.03-.09-.045-.142-.074a.668.668 0 0 0-.154-.059c-.052-.014-.103-.044-.168-.059a1.912 1.912 0 0 1-.31-.147c-.05-.044-.077-.088-.077-.147s.013-.103.065-.132c.051-.044.116-.059.206-.059.168 0 .348.074.541.206.052.044.117.03.155-.03l.245-.338c.026-.03.026-.073.026-.103a.1.1 0 0 0-.052-.088c-.077-.073-.18-.132-.27-.191a1.356 1.356 0 0 0-.336-.132v-.339C5.716 3.06 5.665 3 5.6 3h-.296c-.065 0-.116.059-.116.132v.31a.935.935 0 0 0-.529.293.986.986 0 0 0-.219.647c0 .06 0 .118.013.177s.026.103.039.162c.013.044.038.088.051.132a.816.816 0 0 0 .078.118c.025.029.064.058.09.088.026.03.064.059.116.088.039.03.077.044.116.059.039.015.077.044.129.059.051.014.09.029.129.044.038.014.077.03.142.044.051.015.103.03.141.059a.43.43 0 0 1 .116.059l.078.044c.013.014.038.03.051.059.013.014.026.029.026.058 0 .015.013.045.013.074a.224.224 0 0 1-.065.162c-.116.088-.335.088-.54-.015a.953.953 0 0 1-.285-.206c-.025-.03-.064-.044-.09-.03-.038 0-.064.015-.077.045L4.466 6a.153.153 0 0 0 .013.191c.155.191.4.338.683.397Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PURCHASE_ORDER_LIST_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.5.536C1.5.24 1.743 0 2.042 0h11.916c.3 0 .542.24.542.536v13.928c0 .198-.11.38-.287.473a.547.547 0 0 1-.558-.029l-2.676-1.787-2.676 1.787a.546.546 0 0 1-.622-.01l-2.66-1.914-2.66 1.914a.547.547 0 0 1-.565.044.535.535 0 0 1-.296-.478V.536Zm1.083.535v12.341l2.12-1.524a.547.547 0 0 1 .636 0l2.673 1.922 2.664-1.78a.547.547 0 0 1 .606 0l2.135 1.426V1.071H2.583Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M4.5 3.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0ZM4.5 6.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0ZM4.5 9.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0ZM6.5 3.5A.5.5 0 0 1 7 3h4a.5.5 0 0 1 0 1H7a.5.5 0 0 1-.5-.5ZM6.5 6.5A.5.5 0 0 1 7 6h4a.5.5 0 0 1 0 1H7a.5.5 0 0 1-.5-.5ZM6.5 9.5A.5.5 0 0 1 7 9h4a.5.5 0 0 1 0 1H7a.5.5 0 0 1-.5-.5Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_PURCHASE_ORDER_TICKET_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.5.536C1.5.24 1.743 0 2.042 0h11.916c.3 0 .542.24.542.536v13.928c0 .198-.11.38-.287.473a.547.547 0 0 1-.558-.029l-2.676-1.787-2.676 1.787a.546.546 0 0 1-.622-.01l-2.66-1.914-2.66 1.914a.547.547 0 0 1-.565.044.535.535 0 0 1-.296-.478V.536Zm1.083.535v12.341l2.12-1.524a.547.547 0 0 1 .636 0l2.673 1.922 2.664-1.78a.547.547 0 0 1 .606 0l2.135 1.426V1.071H2.583Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M5 3.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5ZM5 6.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5ZM5 9.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_QUESTION_CIRCLE_OUTLINE = [\n\t\"<path d='M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm0 18a8 8 0 1 1 0-16 8 8 0 0 1 0 16zm-.5-5h1v1.5h-1V15zm.74-7.93A3.5 3.5 0 0 0 8.5 10.5h1.5a2 2 0 1 1 2.87 1.79C11.63 12.87 11 13.8 11 15h1.5c0-.71.37-1.22 1.06-1.61A3.5 3.5 0 0 0 12.24 7.07z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_RADIO_BUTTON_CHECKED_OUTLINE = [\n\t\"<path d='M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1Zm0 13A6 6 0 1 1 8 2a6 6 0 0 1 0 12Z'/><path d='M8 5a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_RADIO_BUTTON_UNCHECKED_OUTLINE = [\n\t\"<path d='M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1Zm0 13A6 6 0 1 1 8 2a6 6 0 0 1 0 12Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_REFRESH_DOUBLE_OUTLINE = [\n\t\"<path d='M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41Zm-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9Z'/><path fill-rule='evenodd' d='M8 3c-1.552 0-2.94.707-3.857 1.818a.5.5 0 1 1-.771-.636A6.002 6.002 0 0 1 13.917 7H12.9A5.002 5.002 0 0 0 8 3ZM3.1 9a5.002 5.002 0 0 0 8.757 2.182.502.502 0 0 1 .84.075.499.499 0 0 1-.069.561A6.002 6.002 0 0 1 2.083 9H3.1Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_REFRESH_SINGLE_OUTLINE = [\n\t\"<path d='M14 7.986a6 6 0 1 1-12 0 .461.461 0 1 1 .923 0A5.096 5.096 0 1 0 4.37 4.448s-.115.038-.369.038l-.5-.5.346-.307A5.994 5.994 0 0 1 14 7.986Z'/><path d='m3.015 2.344 3.243 2.223a.25.25 0 0 1-.073.447l-2.956.835a.25.25 0 0 1-.317-.217l-.287-3.059a.25.25 0 0 1 .39-.23Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_ROCKET_OUTLINE = [\n\t\"<g clip-path='url(#a)'><path d='M9.752 6.193c.599.6 1.73.437 2.528-.362.798-.799.96-1.932.362-2.531-.599-.6-1.73-.438-2.528.361-.798.8-.96 1.933-.362 2.532Z'/><path d='M15.811 3.312c-.363 1.534-1.334 3.626-3.64 6.218l-.24 2.408a2.56 2.56 0 0 1-.732 1.526L8.817 15.85a.51.51 0 0 1-.867-.434l.27-1.899c.04-.28-.013-.593-.131-.956-.076-.233-.16-.439-.249-.657l-.082-.202c-.815-.197-1.578-.662-2.191-1.277-.614-.615-1.079-1.379-1.275-2.195l-.203-.083c-.218-.089-.423-.172-.655-.248-.363-.119-.675-.172-.955-.132l-1.896.27A.51.51 0 0 1 .15 7.17l2.382-2.386c.41-.41.947-.67 1.524-.734h.006l2.4-.238C9.005 1.55 11.087.582 12.623.208c.89-.217 1.59-.232 2.08-.188.244.023.435.06.57.093.067.017.12.033.16.045.184.06.279.13.351.295l.029.073c.014.038.032.091.05.158.038.133.08.322.107.563.055.485.051 1.178-.159 2.065Zm-4.828 7.475.04-.04-.107 1.081a1.536 1.536 0 0 1-.44.913l-1.298 1.3.054-.38c.072-.506-.034-.993-.172-1.418a8.548 8.548 0 0 0-.164-.45c.738-.065 1.462-.38 2.087-1.006ZM5.205 5c-.625.626-.94 1.351-1.004 2.09a8.497 8.497 0 0 0-.45-.164c-.424-.138-.91-.244-1.416-.172l-.38.054 1.3-1.3c.245-.246.566-.401.91-.44l1.08-.107-.04.039Zm9.406-3.961c-.38-.034-.967-.027-1.746.163-1.558.38-3.917 1.496-6.937 4.521-.62.62-.799 1.34-.687 2.051.107.676.483 1.362 1.048 1.928.564.565 1.25.941 1.924 1.049.71.112 1.429-.067 2.048-.688 3.079-3.083 4.192-5.444 4.556-6.987.183-.771.18-1.345.138-1.713a2.835 2.835 0 0 0-.045-.283 3.078 3.078 0 0 0-.3-.041Z'/><path d='M6.803 12.352A7.632 7.632 0 0 1 5 11a7.568 7.568 0 0 1-1.411-1.925c-1.102.991-1.965 5.054-1.84 5.18.126.125 3.936-.896 5.054-1.903Z'/></g><defs><clipPath id='a'><path d='M0 0h16v16H0z'/></clipPath></defs>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SEARCH_OUTLINE = [\n\t\"<path d='M11.118 9.953a5.417 5.417 0 1 0-1.164 1.165.833.833 0 0 0 .081.096l3.21 3.209a.833.833 0 0 0 1.178-1.179l-3.21-3.208a.834.834 0 0 0-.095-.083Zm.215-3.203a4.583 4.583 0 1 1-9.166 0 4.583 4.583 0 0 1 9.166 0Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SETTINGS_OUTLINE = [\n\t\"<path d='M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58a.49.49 0 0 0 .12-.61l-1.92-3.32a.49.49 0 0 0-.59-.22l-2.39.96a7.22 7.22 0 0 0-1.62-.94l-.36-2.54a.484.484 0 0 0-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96a.48.48 0 0 0-.59.22L2.74 8.87a.47.47 0 0 0 .12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58a.47.47 0 0 0-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32a.47.47 0 0 0-.12-.61l-2.01-1.58zM12 15.6A3.6 3.6 0 0 1 8.4 12 3.6 3.6 0 0 1 12 8.4a3.6 3.6 0 0 1 3.6 3.6 3.6 3.6 0 0 1-3.6 3.6z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_SHEET_BENT_OUTLINE = [\n\t\"<path d='M11.491.5H4.509C3.122.5 2 1.638 2 3.045v9.91c0 .68.265 1.328.732 1.802a2.494 2.494 0 0 0 1.777.743l5.346-.016c.67 0 1.293-.268 1.776-.743l1.637-1.66A2.566 2.566 0 0 0 14 11.28V3.045C14 1.638 12.878.5 11.491.5ZM4.509 14.33c-.358 0-.701-.142-.966-.395-.25-.253-.405-.6-.405-.98v-9.91c0-.759.608-1.375 1.356-1.375h6.981c.748 0 1.356.616 1.356 1.375v7.808h-1.839c-.872 0-1.574.711-1.574 1.597v1.88H4.51Zm6.312-.395c-.063.063-.14.127-.234.19v-1.676c0-.237.187-.41.405-.41h1.637a1.25 1.25 0 0 1-.187.237l-1.621 1.66Z'/><path d='M10.456 4.5H5.529c-.298 0-.537.258-.537.581 0 .323.239.581.537.581h4.927c.298 0 .536-.258.536-.58 0-.324-.238-.582-.536-.582ZM10.456 8.338H5.529c-.298 0-.537.258-.537.58 0 .324.239.582.537.582h4.927c.298 0 .536-.258.536-.581 0-.323-.238-.581-.536-.581Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SHEET_GENERIC_OUTLINE = [\n\t\"<path d='M12.465.983H3.523c-.841 0-1.52.68-1.52 1.535v10.964c0 .841.679 1.535 1.535 1.535h8.927c.841 0 1.535-.679 1.535-1.535V2.518A1.543 1.543 0 0 0 12.465.983Zm.458 12.485a.466.466 0 0 1-.472.472H3.523a.466.466 0 0 1-.472-.473V2.518c0-.266.206-.472.472-.472h8.928c.265 0 .472.206.472.472v10.95Z'/><path d='M10.872 5.348H5.117a.529.529 0 0 0-.531.531c0 .296.236.532.53.532h5.756a.529.529 0 0 0 .531-.532.529.529 0 0 0-.531-.53ZM10.872 7.932H5.117a.529.529 0 0 0-.531.53c0 .296.236.532.53.532h5.756a.529.529 0 0 0 .531-.531.529.529 0 0 0-.531-.531ZM10.872 10.515H5.117a.53.53 0 0 0-.531.53c0 .296.236.532.53.532h5.756a.529.529 0 0 0 .531-.531.53.53 0 0 0-.531-.531Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SHEET_LIST_OUTLINE = [\n\t\"<path d='M13.21 0H2.776c-.981 0-1.774.774-1.774 1.75v12.5c0 .96.793 1.75 1.791 1.75h10.419c.981 0 1.79-.774 1.79-1.75V1.75A1.78 1.78 0 0 0 13.212 0Zm.534 14.233a.538.538 0 0 1-.55.539H2.774a.538.538 0 0 1-.55-.539V1.75c0-.303.24-.539.55-.539h10.418c.31 0 .551.236.551.539v12.483Z'/><path d='M11.351 4.976H7.544a.61.61 0 0 0-.62.606.61.61 0 0 0 .62.606h3.807a.61.61 0 0 0 .62-.606.61.61 0 0 0-.62-.606ZM4.88 4.976h-.345a.61.61 0 0 0-.62.606.61.61 0 0 0 .62.606h.345a.61.61 0 0 0 .62-.606.61.61 0 0 0-.62-.606ZM5 7.945l-.501-.017a.61.61 0 0 0-.62.606.61.61 0 0 0 .62.606L5 9.157a.61.61 0 0 0 .62-.606.61.61 0 0 0-.62-.606ZM5 10.867l-.501-.017a.61.61 0 0 0-.62.606.61.61 0 0 0 .62.605l.501.017a.61.61 0 0 0 .62-.605.61.61 0 0 0-.62-.606ZM11.351 7.922H7.453a.61.61 0 0 0-.62.605.61.61 0 0 0 .62.606h3.898a.61.61 0 0 0 .62-.606.61.61 0 0 0-.62-.605ZM11.351 10.867H7.453a.61.61 0 0 0-.62.606.61.61 0 0 0 .62.605h3.898a.61.61 0 0 0 .62-.605.61.61 0 0 0-.62-.606Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SHOPPING_BAG_OUTLINE = [\n\t\"<path d='M3.381 15h9.659a1.216 1.216 0 0 0 .898-.395 1.233 1.233 0 0 0 .322-.931l-.69-9.032a1.24 1.24 0 0 0-.39-.807 1.225 1.225 0 0 0-.83-.33H4.07a1.225 1.225 0 0 0-.83.33 1.24 1.24 0 0 0-.39.807l-.69 9.032a1.24 1.24 0 0 0 .322.931 1.224 1.224 0 0 0 .898.395Zm.286-10.295a.412.412 0 0 1 .407-.379h8.28a.407.407 0 0 1 .409.38l.69 9.03a.413.413 0 0 1-.244.409.407.407 0 0 1-.164.034H3.38a.406.406 0 0 1-.386-.275.413.413 0 0 1-.022-.167l.694-9.032Z'/><path d='M8.04 1c.54 0 1.059.217 1.44.602.383.385.598.906.599 1.45v.822a.412.412 0 0 1-.408.41.407.407 0 0 1-.408-.41v-.821c0-.327-.129-.64-.358-.871a1.22 1.22 0 0 0-1.73 0c-.23.23-.36.544-.36.87v.822a.412.412 0 0 1-.407.41.407.407 0 0 1-.408-.41v-.821c0-.545.216-1.066.598-1.451S7.498 1 8.04 1Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SHOPPING_BASKET_OUTLINE = [\n\t\"<path d='M2.947 8h.26l.494 3.946a1.263 1.263 0 0 0 1.253 1.107h6.934a1.263 1.263 0 0 0 1.254-1.107L13.635 8h.26a.842.842 0 0 0 .842-.842V5.474a.842.842 0 0 0-.842-.842H12.87l-1.376-2.32a.421.421 0 0 0-.724.43l1.121 1.89H4.95l1.122-1.89a.42.42 0 1 0-.725-.43l-1.376 2.32H2.947a.842.842 0 0 0-.842.842v1.684A.842.842 0 0 0 2.947 8Zm9.36 3.842a.421.421 0 0 1-.419.369H4.954a.422.422 0 0 1-.418-.37l-.48-3.84h8.73l-.48 3.84Zm-9.36-6.368h10.948v1.684H2.947V5.474Z'/><path d='M8.421 11.369a.421.421 0 0 0 .421-.421V9.262a.421.421 0 1 0-.842 0v1.684a.42.42 0 0 0 .421.422ZM6.316 11.369a.421.421 0 0 0 .42-.421V9.262a.421.421 0 1 0-.841 0v1.684a.42.42 0 0 0 .42.422ZM10.526 11.369a.421.421 0 0 0 .421-.421V9.262a.421.421 0 0 0-.842 0v1.684a.42.42 0 0 0 .421.422Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SHOPPING_CART_OUTLINE = [\n\t\"<path d='M14.892 3.98a.466.466 0 0 0-.369-.182H4.34l-.541-2.434A.466.466 0 0 0 3.332 1H1.466a.466.466 0 0 0 0 .933H2.96l2.14 9.424a1.865 1.865 0 1 0 2.43 1.767 1.823 1.823 0 0 0-.262-.932h2.854c-.17.281-.26.604-.261.932a1.866 1.866 0 1 0 1.865-1.865H6.036L5.72 9.86h6.692a1.399 1.399 0 0 0 1.352-1.03l1.226-4.444a.466.466 0 0 0-.098-.406Zm-8.296 9.144a.932.932 0 1 1-1.865 0 .932.932 0 0 1 1.865 0Zm6.062 0a.932.932 0 1 1-1.864 0 .932.932 0 0 1 1.864 0Zm.205-4.542a.466.466 0 0 1-.466.345H5.505l-.933-4.196h9.34l-1.049 3.851Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SPLIT_BILL_TICKET_1_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M1.5.536C1.5.24 1.743 0 2.042 0h11.916c.3 0 .542.24.542.536v13.928c0 .198-.11.38-.287.473a.547.547 0 0 1-.558-.029l-2.676-1.787-2.676 1.787a.546.546 0 0 1-.622-.01l-2.66-1.914-2.66 1.914a.547.547 0 0 1-.565.044.535.535 0 0 1-.296-.478V.536Zm1.083.535v12.341l2.12-1.524a.547.547 0 0 1 .636 0l2.673 1.922 2.664-1.78a.547.547 0 0 1 .606 0l2.135 1.426V1.071H2.583Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M7.5 4a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1H8a.5.5 0 0 1-.5-.5ZM7.5 6.5A.5.5 0 0 1 8 6h3a.5.5 0 0 1 0 1H8a.5.5 0 0 1-.5-.5ZM4.5 9a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5Z' clip-rule='evenodd'/><path d='M5.162 6.588v.28c0 .073.052.132.116.132h.297c.064 0 .116-.059.116-.132v-.28c.219-.044.4-.147.528-.309a.986.986 0 0 0 .22-.647c0-.073 0-.132-.013-.19a2.637 2.637 0 0 0-.04-.163c-.012-.058-.038-.103-.064-.147-.025-.044-.064-.088-.09-.117-.026-.03-.064-.074-.116-.103-.039-.03-.09-.06-.129-.088-.039-.03-.09-.045-.142-.074a.668.668 0 0 0-.154-.059c-.052-.014-.103-.044-.168-.059a1.912 1.912 0 0 1-.31-.147c-.05-.044-.077-.088-.077-.147s.013-.103.065-.132c.051-.044.116-.059.206-.059.168 0 .348.074.541.206.052.044.117.03.155-.03l.245-.338c.026-.03.026-.073.026-.103a.1.1 0 0 0-.052-.088c-.077-.073-.18-.132-.27-.191a1.356 1.356 0 0 0-.336-.132v-.339C5.716 3.06 5.665 3 5.6 3h-.296c-.065 0-.116.059-.116.132v.31a.935.935 0 0 0-.529.293.986.986 0 0 0-.219.647c0 .06 0 .118.013.177s.026.103.039.162c.013.044.038.088.051.132a.816.816 0 0 0 .078.118c.025.029.064.058.09.088.026.03.064.059.116.088.039.03.077.044.116.059.039.015.077.044.129.059.051.014.09.029.129.044.038.014.077.03.142.044.051.015.103.03.141.059a.43.43 0 0 1 .116.059l.078.044c.013.014.038.03.051.059.013.014.026.029.026.058 0 .015.013.045.013.074a.224.224 0 0 1-.065.162c-.116.088-.335.088-.54-.015a.953.953 0 0 1-.285-.206c-.025-.03-.064-.044-.09-.03-.038 0-.064.015-.077.045L4.466 6a.153.153 0 0 0 .013.191c.155.191.4.338.683.397Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SPLIT_BILL_TICKET_2_OUTLINE = [\n\t\"<g clip-path='url(#a)'><path d='M15.914 1.675a.406.406 0 0 0-.262-.164L7.324.036a.432.432 0 0 0-.476.328l-.64 3.64H.833c-.23 0-.41.18-.41.409v10.131c0 .197.115.377.279.476.18.098.393.082.557-.033l.984-.656 1.114.738a.492.492 0 0 0 .59 0l1.115-.738 1.115.738c.18.114.41.114.607 0l1.114-.738.984.656a.563.563 0 0 0 .557.033.532.532 0 0 0 .28-.476v-3.59l.95.918c.164.148.393.18.59.098l1.23-.54.852.82a.52.52 0 0 0 .541.114.54.54 0 0 0 .36-.41l1.755-9.967a.43.43 0 0 0-.082-.312ZM8.88 14.036l-.705-.475a.549.549 0 0 0-.59 0l-1.115.737-1.115-.737a.577.577 0 0 0-.606 0l-1.115.737-1.115-.737a.491.491 0 0 0-.59 0l-.705.459V4.84h7.64v9.196h.016Zm4.64-2.738-.607-.573a.52.52 0 0 0-.377-.148.505.505 0 0 0-.213.05l-1.23.54-.967-.934a.529.529 0 0 0-.426-.148V8.888l2.492.443h.065a.39.39 0 0 0 .394-.344.422.422 0 0 0-.328-.476l-2.64-.459v-.934l2.804.492h.065a.39.39 0 0 0 .394-.345.422.422 0 0 0-.328-.475l-2.935-.525v-.934l.951.164h.066a.39.39 0 0 0 .393-.344.432.432 0 0 0-.328-.476l-1.098-.197V4.38c0-.23-.18-.41-.41-.41H7.045l.54-3.098L15.112 2.2l-1.59 9.098Z'/><path d='m12.31 5.804-.033.213c-.016.066.033.115.082.131l.262.05c.066.016.115-.033.132-.083l.033-.213c.196 0 .377-.049.508-.164a.747.747 0 0 0 .278-.475c.017-.05.017-.115.017-.164 0-.05 0-.098-.017-.131 0-.05-.016-.082-.049-.131-.016-.033-.033-.082-.065-.099-.017-.032-.05-.065-.082-.098a.432.432 0 0 0-.099-.082c-.032-.033-.065-.05-.114-.082-.05-.033-.099-.05-.132-.082-.032-.016-.082-.05-.147-.082a1.048 1.048 0 0 1-.263-.164.186.186 0 0 1-.049-.131c.017-.05.033-.082.066-.098a.369.369 0 0 1 .197-.017c.147.033.311.115.459.246.049.033.098.033.147 0l.262-.23a.125.125 0 0 0 .033-.081.125.125 0 0 0-.033-.082c-.065-.066-.13-.131-.229-.197a1.557 1.557 0 0 0-.279-.164l.05-.262c.016-.066-.033-.115-.082-.131l-.263-.05c-.065-.016-.114.033-.13.082l-.05.246a.847.847 0 0 0-.508.148.747.747 0 0 0-.279.475c-.016.05-.016.099-.016.131 0 .05 0 .082.016.132.016.032.016.082.033.114l.049.099c.016.032.05.065.066.082.016.032.049.049.082.082.032.032.065.049.098.065.033.017.065.05.115.066.032.016.082.049.114.065.033.017.066.033.115.066.05.016.082.05.115.066s.066.032.098.065c.033.016.05.033.066.05.016.016.033.032.033.048 0 .017.016.033.016.05v.049a.19.19 0 0 1-.082.115c-.115.065-.311.016-.492-.099a.937.937 0 0 1-.23-.213c-.016-.016-.048-.033-.081-.05-.033 0-.066 0-.082.034l-.262.23c-.05.032-.05.098-.017.147.164.262.377.41.623.508ZM8.798 3.417l2.148.378h.065c.197 0 .36-.148.41-.345.033-.23-.115-.442-.328-.475l-2.147-.377c-.214-.033-.443.115-.476.328-.033.246.115.459.328.491ZM6.568 9.306v.23c0 .065.05.114.115.114h.279c.065 0 .114-.049.114-.115v-.213a.786.786 0 0 0 .476-.246.718.718 0 0 0 .196-.524c0-.05 0-.115-.016-.164-.016-.05-.016-.099-.033-.131a.264.264 0 0 0-.065-.115c-.033-.033-.05-.066-.082-.098-.033-.033-.066-.05-.099-.082-.032-.033-.082-.05-.114-.066-.033-.016-.082-.033-.132-.066l-.147-.049c-.05-.016-.098-.032-.164-.049-.131-.05-.23-.082-.279-.115-.049-.032-.065-.065-.065-.114 0-.05.016-.082.049-.115a.294.294 0 0 1 .18-.05c.164 0 .328.05.492.165.05.032.115.016.148-.017l.213-.278c.016-.017.033-.05.016-.082 0-.033-.016-.05-.05-.066l-.245-.148a1.042 1.042 0 0 0-.295-.098v-.262a.112.112 0 0 0-.115-.115h-.278a.112.112 0 0 0-.115.115v.23a.786.786 0 0 0-.476.245.705.705 0 0 0-.196.508c0 .05 0 .099.016.132 0 .049.016.082.033.13l.049.099c.016.033.05.066.082.098.033.033.05.05.082.066.033.016.065.05.098.066l.099.049c.032.016.065.033.114.049.05.016.082.033.115.033.033.016.082.016.131.032.05.017.099.033.131.05l.099.049c.033.016.049.033.065.033l.05.049c.016.016.016.033.016.049v.05a.15.15 0 0 1-.066.13c-.098.082-.295.066-.491-.016a.88.88 0 0 1-.263-.164.125.125 0 0 0-.082-.033c-.032 0-.049.017-.082.033l-.23.279c-.032.049-.032.114.017.147.213.197.443.312.705.36ZM2.64 7.515h1.728c.23 0 .41-.18.41-.41 0-.229-.18-.41-.41-.41H2.64c-.23 0-.41.181-.41.41 0 .214.18.41.41.41ZM2.64 9.652h1.728c.23 0 .41-.18.41-.41 0-.23-.18-.41-.41-.41H2.64c-.23 0-.41.18-.41.41 0 .213.18.41.41.41ZM2.94 11.788h4.1c.23 0 .41-.18.41-.41 0-.229-.18-.41-.41-.41h-4.1c-.23 0-.41.181-.41.41 0 .23.18.41.41.41Z'/></g><defs><clipPath id='a'><path d='M0 0h16v16H0z'/></clipPath></defs>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_STAR_FILLED = [\n\t\"<path d='m21.284 8.276-5.951-.865-2.66-5.393a.753.753 0 0 0-1.345 0l-2.66 5.393-5.952.865a.749.749 0 0 0-.414 1.28l4.305 4.197L5.59 19.68a.749.749 0 0 0 1.087.79L12 17.672l5.323 2.798a.749.749 0 0 0 1.087-.79l-1.017-5.927 4.305-4.197a.748.748 0 0 0 .218-.43.747.747 0 0 0-.632-.85Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_SUCCESS_FILLED_GREEN = [\n\t\"<path fill='#46D281' fill-rule='evenodd' d='M7 14A7 7 0 1 0 7 0a7 7 0 0 0 0 14Zm4.384-9.18a.5.5 0 0 0-.768-.64L5.995 9.725 3.38 6.675a.5.5 0 1 0-.76.65l3 3.5a.5.5 0 0 0 .764-.005l5-6Z' clip-rule='evenodd'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_SUCCESS_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M11.835 5.628a.5.5 0 0 1 .037.706l-4.5 5a.5.5 0 0 1-.726.02l-2.5-2.5a.5.5 0 1 1 .708-.708l2.127 2.128 4.147-4.608a.5.5 0 0 1 .707-.038Z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_SUGAR_FREE_FILLED = [\n\t\"<path d='M22.11 21.46 2.39 1.73 1.11 3 4.3 6.19l-.77.43c-.32.17-.53.5-.53.88v9c0 .38.21.71.53.88l7.9 4.44c.16.12.36.18.57.18.21 0 .41-.06.57-.18l4.71-2.65 3.56 3.56 1.27-1.27ZM5 15.91v-6.7l5.29 2.97.71.71v6.4l-6-3.38Zm8 3.38v-4.4l2.82 2.81L13 19.29ZM9 5.82 7.56 4.36l3.87-2.18c.16-.12.36-.18.57-.18.21 0 .41.06.57.18l7.9 4.44c.32.17.53.5.53.88v9c0 .35-.18.66-.47.83L19 15.8V9.21l-4.22 2.37-1.47-1.47 4.65-2.61L12 4.15 9 5.82Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_TAG_FILLED = [\n\t\"<path d='M5.5 7a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Zm15.91 4.58-9-9C12.05 2.22 11.55 2 11 2H4c-1.11 0-2 .89-2 2v7c0 .55.22 1.05.59 1.41l8.99 9c.37.36.87.59 1.42.59.55 0 1.05-.23 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.56-.23-1.06-.59-1.42Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_TAG_OUTLINE = [\n\t\"<path d='M6.739 1c.99 0 1.94.394 2.64 1.094l5.071 5.072a1.9 1.9 0 0 1 0 2.673L9.84 14.45a1.895 1.895 0 0 1-2.67 0L2.094 9.375C1.394 8.674 1 7.725 1 6.734V3.43A2.438 2.438 0 0 1 3.429 1h3.31Zm0 1.167h-3.31c-.704 0-1.262.557-1.262 1.26v3.307c0 .681.272 1.336.753 1.817l5.072 5.072a.713.713 0 0 0 1.021 0l4.611-4.611a.713.713 0 0 0 0-1.02L8.552 2.918a2.562 2.562 0 0 0-1.812-.753h-.001Z'/><path d='M6.489 3.872c.717.717.717 1.9 0 2.618-.717.717-1.9.717-2.618 0a1.861 1.861 0 0 1 0-2.618 1.861 1.861 0 0 1 2.618 0Zm-.827.827a.672.672 0 0 0-.964 0 .672.672 0 0 0 0 .964.672.672 0 0 0 .964 0 .672.672 0 0 0 0-.964Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_TAP_CLICK_HAND_OUTLINE = [\n\t\"<path d='M13.063 6.388c-.205 0-.407.04-.597.117a1.597 1.597 0 0 0-1.533-1.182 1.566 1.566 0 0 0-.782.213 1.597 1.597 0 0 0-1.88-.65V1.598a1.597 1.597 0 1 0-3.193 0v8.3l-.48-.48a2.337 2.337 0 0 0-3.3 0 1.011 1.011 0 0 0-.037 1.395l3.833 4.258a2.732 2.732 0 0 0 2.028.9h4.455a2.73 2.73 0 0 0 2.55-1.714 7.73 7.73 0 0 0 .533-2.859V7.985a1.597 1.597 0 0 0-1.597-1.597Zm.532 5.01a6.586 6.586 0 0 1-.474 2.443 1.656 1.656 0 0 1-1.544 1.064H7.122a1.677 1.677 0 0 1-1.24-.532l-3.796-4.259a1.272 1.272 0 0 1 1.762.032l1.384 1.39a.533.533 0 0 0 .814-.075.532.532 0 0 0 .096-.282V1.597a.532.532 0 0 1 1.065 0v6.388a.532.532 0 1 0 1.065 0V6.388a.532.532 0 0 1 1.064 0v2.13a.532.532 0 1 0 1.065 0V6.92a.532.532 0 1 1 1.065 0v2.13a.532.532 0 0 0 1.064 0V7.985a.532.532 0 0 1 1.065 0v3.412Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_TICKET_OUTLINE = [\n\t\"<g clip-path='url(#a)'><path d='M2.552 4.405a.555.555 0 0 0-.772.058L.306 6.126c-.472.537-.436 1.34.08 1.804l8.593 7.622c.52.456 1.323.396 1.8-.136l1.475-1.663a.555.555 0 0 0-.034-.773c-.371-.328-.397-.905-.057-1.287.339-.383.915-.426 1.285-.098a.555.555 0 0 0 .772-.058l1.474-1.662c.471-.538.436-1.342-.08-1.804L7.021.448c-.52-.456-1.323-.395-1.8.137L3.746 2.247c-.2.23-.184.574.034.773.37.329.396.905.057 1.288-.339.382-.915.426-1.285.097Zm2.32-1.804L6.026 1.3a.188.188 0 0 1 .127-.063.177.177 0 0 1 .13.044l5.506 4.883-.614.692a.547.547 0 0 0 .034.773.547.547 0 0 0 .771-.058l.615-.693 2.282 2.025c.075.066.08.181.012.258l-1.155 1.302c-.802-.371-1.768-.159-2.371.521s-.699 1.665-.235 2.416l-1.154 1.302a.182.182 0 0 1-.258.02l-2.282-2.025.614-.692a.547.547 0 0 0-.034-.773.547.547 0 0 0-.772.058l-.614.692-5.505-4.883a.177.177 0 0 1-.06-.125.189.189 0 0 1 .048-.133l1.155-1.302c.802.372 1.768.16 2.37-.52.604-.681.7-1.665.236-2.417Zm3.845 7.025L9.7 8.518a.547.547 0 0 1 .772-.059.547.547 0 0 1 .034.773l-.984 1.109a.547.547 0 0 1-.771.058.548.548 0 0 1-.034-.773Z'/></g><defs><clipPath id='a'><path d='M0 0h16v16H0z'/></clipPath></defs>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_TICKETS_OUTLINE = [\n\t\"<path d='M1.123 3h11.609c.31 0 .591.125.795.326l.015.016c.194.2.315.472.315.768v.15h1.017c.31 0 .59.124.794.326a1.1 1.1 0 0 1 .331.785v1.38c0 .14-.115.254-.258.254-.314 0-.6.126-.805.33a1.115 1.115 0 0 0 0 1.59c.206.203.491.33.806.33.142 0 .258.114.258.254v1.38c0 .306-.127.584-.33.785l-.016.015a1.127 1.127 0 0 1-.778.311H3.268c-.31 0-.592-.125-.795-.326a1.1 1.1 0 0 1-.33-.784v-.15H1.125c-.31 0-.591-.125-.795-.325A1.101 1.101 0 0 1 0 9.629V8.25c0-.14.116-.255.258-.255.315 0 .6-.126.805-.329a1.116 1.116 0 0 0 0-1.59 1.144 1.144 0 0 0-.805-.33A.257.257 0 0 1 0 5.493v-1.38a1.124 1.124 0 0 1 1.125-1.11L1.123 3Zm6.959 4.311a1.258 1.258 0 0 1 0 1.796 1.293 1.293 0 0 1-1.82 0l-.014-.016a1.258 1.258 0 0 1 .014-1.778 1.29 1.29 0 0 1 .91-.373c.33 0 .659.123.91.371Zm-.14.898a.754.754 0 0 0-.225-.537.774.774 0 0 0-1.09 0 .75.75 0 0 0-.011 1.064l.012.01a.774.774 0 0 0 1.09 0 .753.753 0 0 0 .224-.537ZM5.368 4.633l.016.016a1.258 1.258 0 0 1-.014 1.778l-.016.016a1.29 1.29 0 0 1-1.801-.014 1.256 1.256 0 0 1-.002-1.795c.252-.249.58-.373.91-.373.328 0 .656.123.907.372Zm-.364.36a.773.773 0 0 0-1.09 0 .752.752 0 0 0 0 1.075.775.775 0 0 0 1.078.012l.01-.012a.752.752 0 0 0 .013-1.064l-.012-.011h.001Zm2.597-.247c.1-.1.264-.1.365 0 .1.1.1.261 0 .36L4.224 8.803c-.1.1-.264.1-.365 0-.1-.1-.1-.261 0-.36l3.742-3.696Zm6.254.024v.72c0 .14-.115.255-.258.255-.314 0-.6.126-.805.33a1.115 1.115 0 0 0 0 1.59c.206.202.49.328.805.328.143 0 .258.115.258.255v1.38c0 .305-.127.583-.33.785a1.13 1.13 0 0 1-.795.325H2.656v.15a.611.611 0 0 0 .609.6h11.608c.162 0 .31-.063.42-.165l.01-.011a.596.596 0 0 0 .179-.425V9.742a1.656 1.656 0 0 1-.912-.458 1.623 1.623 0 0 1 0-2.311c.242-.24.558-.404.912-.459V5.37a.61.61 0 0 0-.609-.601h-1.018v.002ZM12.73 3.51H1.122a.613.613 0 0 0-.43.176.594.594 0 0 0-.18.424v1.145c.354.055.671.22.913.459a1.62 1.62 0 0 1 0 2.31 1.656 1.656 0 0 1-.912.46v1.143c0 .166.068.316.179.425.11.109.262.177.43.177H12.73c.168 0 .32-.068.43-.177a.597.597 0 0 0 .18-.425V8.483a1.656 1.656 0 0 1-.913-.458 1.62 1.62 0 0 1 0-2.311c.242-.24.559-.404.912-.459V4.11a.595.595 0 0 0-.167-.413l-.012-.01a.61.61 0 0 0-.43-.177Z'/><path d='M10.439 4.16a.242.242 0 0 1 .346 0c.046.046.071.11.071.176v.875c0 .066-.025.13-.071.177a.242.242 0 0 1-.346 0 .253.253 0 0 1-.071-.177v-.875c0-.066.025-.13.07-.177ZM10.44 6.066a.242.242 0 0 1 .345 0c.046.047.072.11.072.177V7.2c0 .067-.026.13-.072.177a.242.242 0 0 1-.346 0 .253.253 0 0 1-.071-.177v-.956c0-.066.025-.13.071-.177ZM10.44 8.243a.242.242 0 0 1 .345 0c.046.047.072.11.072.176v1.073c0 .067-.026.13-.071.177a.242.242 0 0 1-.346 0 .253.253 0 0 1-.072-.177V8.42c0-.066.025-.13.071-.176Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_TWITTER_FILLED = [\n\t\"<path d='M21.75 5.96a8.015 8.015 0 0 1-2.302.619 3.987 3.987 0 0 0 1.758-2.203 7.89 7.89 0 0 1-2.536.965 3.986 3.986 0 0 0-2.92-1.263 3.996 3.996 0 0 0-3.996 3.999c0 .309.037.618.098.916a11.358 11.358 0 0 1-8.24-4.184 3.968 3.968 0 0 0-.544 2.018c0 1.388.705 2.611 1.781 3.33a4.03 4.03 0 0 1-1.807-.508v.05a3.997 3.997 0 0 0 3.204 3.923c-.344.09-.697.135-1.052.136a5.31 5.31 0 0 1-.755-.061 4.004 4.004 0 0 0 3.736 2.773 8.01 8.01 0 0 1-4.962 1.708c-.335 0-.644-.012-.965-.05a11.317 11.317 0 0 0 6.138 1.794c7.35 0 11.372-6.09 11.372-11.374 0-.174 0-.347-.012-.52A8.607 8.607 0 0 0 21.75 5.96Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_USER_OUTLINE = [\n\t\"<path d='M8 1C4.14 1 1 4.14 1 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7ZM4.32 12.633A4.473 4.473 0 0 1 8 10.693c1.48 0 2.85.737 3.68 1.94a5.891 5.891 0 0 1-7.36 0Zm1.347-5.35A2.336 2.336 0 0 1 8 4.948a2.336 2.336 0 0 1 2.333 2.333A2.336 2.336 0 0 1 8 9.615a2.336 2.336 0 0 1-2.333-2.333Zm6.792 4.603a5.55 5.55 0 0 0-2.43-1.879 3.398 3.398 0 0 0 1.381-2.725c0-1.88-1.53-3.41-3.41-3.41-1.88 0-3.41 1.53-3.41 3.41 0 1.118.548 2.103 1.382 2.725a5.56 5.56 0 0 0-2.43 1.88A5.893 5.893 0 0 1 2.077 8 5.93 5.93 0 0 1 8 2.077 5.93 5.93 0 0 1 13.923 8a5.891 5.891 0 0 1-1.464 3.886Z'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_WARNING_FILLED_YELLOW = [\n\t\"<path fill='#FBCC29' fill-rule='evenodd' d='M7 14A7 7 0 1 0 7 0a7 7 0 0 0 0 14Zm.14-12c.374 0 .677.304.677.678V9a.678.678 0 1 1-1.356 0V2.678c0-.374.304-.678.678-.678Zm.677 9.169a.678.678 0 1 1-1.356 0 .678.678 0 0 1 1.356 0Z' clip-rule='evenodd'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_WARNING_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M7 13A6 6 0 1 0 7 1a6 6 0 0 0 0 12Zm0 1A7 7 0 1 0 7 0a7 7 0 0 0 0 14Z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M7 10a.5.5 0 0 1 .5.5v.5a.5.5 0 0 1-1 0v-.5A.5.5 0 0 1 7 10ZM7 3a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-1 0v-5A.5.5 0 0 1 7 3Z' clip-rule='evenodd'/>\",\n\t\"0 0 14 14\",\n] as const;\n\nexport const ICON_WHATSAPP_OUTLINE = [\n\t\"<path d='M16.723 14.06c-.256-.131-1.528-.755-1.765-.839-.237-.089-.41-.131-.582.131-.173.26-.665.84-.82 1.015-.15.174-.302.195-.558.066-1.518-.76-2.514-1.355-3.515-3.073-.265-.457.265-.424.76-1.41.083-.174.041-.322-.024-.453-.066-.131-.582-1.402-.797-1.92-.209-.504-.424-.433-.581-.443-.15-.009-.321-.009-.495-.009a.956.956 0 0 0-.689.321c-.237.26-.905.886-.905 2.156s.926 2.501 1.053 2.675c.13.173 1.82 2.78 4.415 3.902 1.64.708 2.283.769 3.103.647.5-.075 1.529-.624 1.742-1.23.213-.605.213-1.123.15-1.231-.064-.115-.237-.18-.492-.305Z'/><path d='M21.684 7.931a10.505 10.505 0 0 0-5.615-5.615A10.45 10.45 0 0 0 12 1.5h-.047A10.475 10.475 0 0 0 1.5 12.05a10.533 10.533 0 0 0 1.125 4.684v3.563c0 .595.483 1.078 1.078 1.078h3.565a10.532 10.532 0 0 0 4.685 1.125h.05c1.403 0 2.765-.272 4.047-.804a10.418 10.418 0 0 0 3.347-2.231 10.475 10.475 0 0 0 3.103-7.418 10.46 10.46 0 0 0-.816-4.116Zm-3.541 10.266A8.673 8.673 0 0 1 12 20.719h-.04a8.75 8.75 0 0 1-4.057-1.02l-.197-.105h-3.3v-3.3l-.105-.197a8.75 8.75 0 0 1-1.02-4.057 8.665 8.665 0 0 1 2.522-6.183 8.653 8.653 0 0 1 6.16-2.576h.04c1.171 0 2.308.228 3.379.678a8.662 8.662 0 0 1 2.79 1.875 8.684 8.684 0 0 1 2.552 6.206 8.686 8.686 0 0 1-2.581 6.157Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_WHEAT_FILLED = [\n\t\"<path d='M21.725 3.598A.937.937 0 0 0 20.4 2.274l-3.442 3.433a.937.937 0 0 0 1.324 1.324l3.438-3.437.004.004Zm-7.793-.535a.627.627 0 0 0-.883 0l-.445.441a3.75 3.75 0 0 0 0 5.305l.406.406-1.191 1.191a4.989 4.989 0 0 0-1.426-2.921l-.441-.442a.627.627 0 0 0-.883 0l-.441.442a3.75 3.75 0 0 0 0 5.304l.406.406-1.192 1.192a4.988 4.988 0 0 0-1.425-2.922l-.442-.445a.627.627 0 0 0-.882 0l-.442.441a3.75 3.75 0 0 0 0 5.304l.406.407-2.69 2.69a1.252 1.252 0 0 0 1.769 1.77l2.69-2.69.477.476a3.75 3.75 0 0 0 5.305 0l.441-.442a.627.627 0 0 0 0-.883l-.441-.44a4.992 4.992 0 0 0-3.05-1.442l1.245-1.246.477.476a3.75 3.75 0 0 0 5.304 0l.442-.441a.627.627 0 0 0 0-.883l-.442-.441a4.992 4.992 0 0 0-3.05-1.442l1.246-1.246.476.477a3.751 3.751 0 0 0 5.305 0l.44-.445a.627.627 0 0 0 0-.883l-.44-.445a4.922 4.922 0 0 0-.641-.543l1.805-1.801A.937.937 0 0 0 20.4 6.024l-2.32 2.32a5.033 5.033 0 0 0-2.434.082c.238-.832.258-1.71.054-2.55l2.274-2.278a.937.937 0 0 0-1.324-1.324l-1.797 1.789a4.642 4.642 0 0 0-.484-.559l-.438-.441Z'/>\",\n\t\"0 0 24 24\",\n] as const;\n\nexport const ICON_WIFI_NO_SIGNAL_OUTLINE = [\n\t\"<path fill-rule='evenodd' d='M15.784 6.009q-.23-.223-.472-.433a11 11 0 0 0-2.043-1.398l-.946 1.065a9.7 9.7 0 0 1 2.465 1.738.72.72 0 0 0 .967.037.672.672 0 0 0 .029-1.01M12.868 7.66a7.9 7.9 0 0 0-1.772-1.033l-.975 1.098c.845.288 1.62.747 2.273 1.347a.71.71 0 0 0 .938.013.667.667 0 0 0 .024-1.014 8 8 0 0 0-.488-.41m-1.966 2.473a4.6 4.6 0 0 0-2.092-.93l-1.172 1.319c.846-.1 1.697.139 2.36.663a.69.69 0 0 0 .875-.005l.05-.044h.001a.625.625 0 0 0-.021-1.003M8 12.26c-.405 0-.79.171-1.057.47a1.34 1.34 0 0 0-.347.862c-.009.761.606 1.388 1.382 1.408.375.007.737-.135 1.005-.392a1.342 1.342 0 0 0 .073-1.878A1.42 1.42 0 0 0 8 12.26m1.223-4.772 1.03-1.162 1.271-1.431.968-1.09 1.482-1.67a.675.675 0 0 0-.066-.966.716.716 0 0 0-.991.065L11.082 3.3h.001a11 11 0 0 0-1.679-.34c-.932-.12-1.876-.12-2.808 0a11.1 11.1 0 0 0-6.38 3.049.672.672 0 0 0 .03 1.01.72.72 0 0 0 .966-.039q.263-.255.545-.491h.001a9.7 9.7 0 0 1 4.838-2.15 9.8 9.8 0 0 1 3.46.117L8.661 6.03a8 8 0 0 0-.66-.03H8q-.708.002-1.404.126a7.87 7.87 0 0 0-3.952 1.947.666.666 0 0 0 .023 1.013c.27.231.675.226.939-.012a6.46 6.46 0 0 1 3.84-1.677l-5.024 5.66a.68.68 0 0 0 .07.97.71.71 0 0 0 .988-.069l2.388-2.691L7.756 9.14z' clip-rule='evenodd'/>\",\n\t\"0 0 16 16\",\n] as const;\n\nexport const ICON_WIFI_SIGNAL_FILLED = [\n\t\"<path d='M15 .5A2.5 2.5 0 0 1 17.5 3v12a2.5 2.5 0 0 1-2.5 2.5H3A2.5 2.5 0 0 1 .5 15V3A2.5 2.5 0 0 1 3 .5h12ZM3.985 8.685a.585.585 0 0 0-.562.58c0 .312.254.555.562.546a3.777 3.777 0 0 1 2.78 1.08 3.773 3.773 0 0 1 1.14 2.755.544.544 0 0 0 .559.551.584.584 0 0 0 .567-.575 4.862 4.862 0 0 0-1.468-3.548 4.863 4.863 0 0 0-3.578-1.39ZM4 5.682a.583.583 0 0 0-.564.577.543.543 0 0 0 .56.549c1.855-.047 3.596.63 4.9 1.906 1.305 1.276 2.02 3.002 2.013 4.857a.544.544 0 0 0 .56.548.582.582 0 0 0 .565-.577c.008-2.157-.824-4.161-2.34-5.645C8.178 6.414 6.155 5.627 4 5.682Zm.012-3.004a.584.584 0 0 0-.566.576.543.543 0 0 0 .56.549c2.661-.063 5.154.908 7.02 2.733 1.865 1.825 2.89 4.297 2.885 6.96a.542.542 0 0 0 .562.547.583.583 0 0 0 .563-.58c.005-2.961-1.135-5.71-3.212-7.742-2.076-2.032-4.85-3.113-7.812-3.043Z'/>\",\n\t\"0 0 18 18\",\n] as const;\n\nexport const ICON_WIFI_SIGNAL_OUTLINE = [\n\t\"<path d='M16.5 3A1.5 1.5 0 0 0 15 1.5H3A1.5 1.5 0 0 0 1.5 3v12A1.5 1.5 0 0 0 3 16.5h12a1.5 1.5 0 0 0 1.5-1.5V3Zm1 12a2.5 2.5 0 0 1-2.5 2.5H3A2.5 2.5 0 0 1 .5 15V3A2.5 2.5 0 0 1 3 .5h12A2.5 2.5 0 0 1 17.5 3v12Z'/><path d='M14.01 14.806a.553.553 0 0 1-.165-.396c.004-2.688-1.03-5.183-2.914-7.026-1.883-1.843-4.4-2.823-7.088-2.76a.549.549 0 0 1-.564-.554.59.59 0 0 1 .57-.582c2.99-.07 5.792 1.02 7.888 3.072 2.097 2.051 3.249 4.828 3.243 7.819a.589.589 0 0 1-.569.583.547.547 0 0 1-.401-.156Zm-2.63.234a.588.588 0 0 0 .57-.583c.007-2.177-.832-4.2-2.363-5.698C8.057 7.26 6.014 6.466 3.838 6.52a.588.588 0 0 0-.57.583.548.548 0 0 0 .566.554c1.872-.048 3.63.636 4.947 1.925 1.317 1.288 2.039 3.03 2.032 4.904a.55.55 0 0 0 .566.553Zm-3.035.078a.589.589 0 0 0 .572-.58 4.908 4.908 0 0 0-1.481-3.582 4.91 4.91 0 0 0-3.613-1.403.59.59 0 0 0-.568.585c0 .316.256.561.568.552a3.812 3.812 0 0 1 2.806 1.09 3.808 3.808 0 0 1 1.15 2.781.55.55 0 0 0 .566.557Z'/>\",\n\t\"0 0 18 18\",\n] as const;\n\nexport const iconNames = [\n\t\"apple-filled\",\n\t\"arrow-circle-down-outline\",\n\t\"arrow-circle-left-outline\",\n\t\"arrow-circle-right-outline\",\n\t\"arrow-circle-up-outline\",\n\t\"arrow-down-outline\",\n\t\"arrow-left-outline\",\n\t\"arrow-list-outline\",\n\t\"arrow-point-down-filled\",\n\t\"arrow-point-left-filled\",\n\t\"arrow-point-right-filled\",\n\t\"arrow-point-up-filled\",\n\t\"arrow-right-outline\",\n\t\"arrow-up-outline\",\n\t\"barcode-outline\",\n\t\"bell-outline\",\n\t\"calendar-alt-outline\",\n\t\"calendar-locked-outline\",\n\t\"calendar-outline\",\n\t\"carrot-filled\",\n\t\"check-outline\",\n\t\"checkbox-checked\",\n\t\"checkbox-unchecked\",\n\t\"chevron-down-outline\",\n\t\"chevron-left-bicolor\",\n\t\"chevron-left-outline\",\n\t\"chevron-right-bicolor\",\n\t\"chevron-right-outline\",\n\t\"chevron-up-outline\",\n\t\"chicken-filled\",\n\t\"chili-filled\",\n\t\"close-outline\",\n\t\"cloud-download-outline\",\n\t\"cloud-upload-outline\",\n\t\"copy-generic-outline\",\n\t\"copy-square-outline\",\n\t\"delete-outline\",\n\t\"discount-outline\",\n\t\"document-generic-outline\",\n\t\"document-history-alt-outline\",\n\t\"document-history-outline\",\n\t\"document-list-outline\",\n\t\"drag-handle-outline\",\n\t\"error-filled-red\",\n\t\"error-outline\",\n\t\"exclamation-outline\",\n\t\"expand-outline\",\n\t\"export-outline\",\n\t\"eye-closed-outline\",\n\t\"eye-open-filled\",\n\t\"eye-open-outline\",\n\t\"facebook-filled\",\n\t\"fire-filled\",\n\t\"fish-filled\",\n\t\"globe-outline\",\n\t\"google-filled\",\n\t\"hashtag-outline\",\n\t\"home-outline\",\n\t\"import-outline\",\n\t\"info-filled-blue\",\n\t\"info-outline\",\n\t\"instagram-filled\",\n\t\"key-outline\",\n\t\"lactose-intolerant-filled\",\n\t\"layout-1-outline\",\n\t\"layout-2-outline\",\n\t\"layout-3-outline\",\n\t\"layout-4-outline\",\n\t\"layout-5-outline\",\n\t\"leaf-filled\",\n\t\"linkedin-filled\",\n\t\"location-filled\",\n\t\"lock-password-1-outline\",\n\t\"lock-password-2-outline\",\n\t\"mail-outline\",\n\t\"menu-close-outline\",\n\t\"menu-hamburger-outline\",\n\t\"minus-bicolor-tertiary-light\",\n\t\"minus-bicolor-tertiary\",\n\t\"minus-filled\",\n\t\"money-bill-outline\",\n\t\"money-cash-outline\",\n\t\"money-coin-outline\",\n\t\"money-credit-card-outline\",\n\t\"nfc-filled\",\n\t\"nfc-outline\",\n\t\"pencil-outline\",\n\t\"pencil\",\n\t\"phone-outline\",\n\t\"plus-bicolor-tertiary-light\",\n\t\"plus-bicolor-tertiary\",\n\t\"plus-filled\",\n\t\"printer-outline\",\n\t\"purchase-order-bill-outline\",\n\t\"purchase-order-list-outline\",\n\t\"purchase-order-ticket-outline\",\n\t\"question-circle-outline\",\n\t\"radio-button-checked-outline\",\n\t\"radio-button-unchecked-outline\",\n\t\"refresh-double-outline\",\n\t\"refresh-single-outline\",\n\t\"rocket-outline\",\n\t\"search-outline\",\n\t\"settings-outline\",\n\t\"sheet-bent-outline\",\n\t\"sheet-generic-outline\",\n\t\"sheet-list-outline\",\n\t\"shopping-bag-outline\",\n\t\"shopping-basket-outline\",\n\t\"shopping-cart-outline\",\n\t\"split-bill-ticket-1-outline\",\n\t\"split-bill-ticket-2-outline\",\n\t\"star-filled\",\n\t\"success-filled-green\",\n\t\"success-outline\",\n\t\"sugar-free-filled\",\n\t\"tag-filled\",\n\t\"tag-outline\",\n\t\"tap-click-hand-outline\",\n\t\"ticket-outline\",\n\t\"tickets-outline\",\n\t\"twitter-filled\",\n\t\"user-outline\",\n\t\"warning-filled-yellow\",\n\t\"warning-outline\",\n\t\"whatsapp-outline\",\n\t\"wheat-filled\",\n\t\"wifi-no-signal-outline\",\n\t\"wifi-signal-filled\",\n\t\"wifi-signal-outline\",\n] as const;\n\nexport type IconNameType = (typeof iconNames)[number];\n","import { useMemo } from \"react\";\nimport styles from \"./Icon.module.css\";\nimport type { IconNameType } from \"./icons\";\nimport * as Icons from \"./icons\";\n\nexport type { IconNameType };\n\nexport interface IconProps {\n\tname: IconNameType;\n\tsize?: number | string;\n\tclassName?: string;\n\tcolor?: string;\n\t\"aria-label\"?: string;\n\t\"aria-hidden\"?: boolean | \"true\" | \"false\";\n}\n\nfunction resolveIcon(name: IconNameType): { path: string; viewBox: string } {\n\tconst key = `ICON_${name.replace(/-/g, \"_\").toUpperCase()}` as keyof typeof Icons;\n\t// biome-ignore lint/performance/noDynamicNamespaceImportAccess: dynamic icon resolution by name (matches Vue DS pattern)\n\tconst entry = Icons[key];\n\tif (Array.isArray(entry) && entry.length === 2) {\n\t\treturn { path: entry[0] as string, viewBox: entry[1] as string };\n\t}\n\treturn { path: \"\", viewBox: \"0 0 24 24\" };\n}\n\nexport function Icon({\n\tname,\n\tsize = 20,\n\tclassName,\n\tcolor,\n\t\"aria-label\": ariaLabel,\n\t\"aria-hidden\": ariaHidden,\n}: IconProps) {\n\tconst { path, viewBox } = useMemo(() => resolveIcon(name), [name]);\n\tconst isDecorative = !ariaLabel;\n\tconst applyFill = name.endsWith(\"-outline\") || name.endsWith(\"-filled\");\n\tlet fillValue = \"none\";\n\tif (applyFill) fillValue = color ? `var(--color-${color})` : \"currentColor\";\n\n\treturn (\n\t\t<svg\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tviewBox={viewBox}\n\t\t\tfill={fillValue}\n\t\t\tstroke={applyFill ? \"none\" : \"currentColor\"}\n\t\t\tstrokeWidth={applyFill ? undefined : \"2\"}\n\t\t\tstrokeLinecap={applyFill ? undefined : \"round\"}\n\t\t\tstrokeLinejoin={applyFill ? undefined : \"round\"}\n\t\t\tclassName={[styles.icon, className].filter(Boolean).join(\" \")}\n\t\t\taria-label={ariaLabel}\n\t\t\taria-hidden={ariaHidden ?? (isDecorative ? \"true\" : undefined)}\n\t\t\trole={ariaLabel ? \"img\" : undefined}\n\t\t\t// biome-ignore lint/security/noDangerouslySetInnerHtml: SVG content from auto-generated icons.ts (not user input)\n\t\t\tdangerouslySetInnerHTML={{ __html: path }}\n\t\t/>\n\t);\n}\n","@layer ds-components {\n\t.wrapper {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--ds-space-1);\n\t\tflex: 1;\n\t}\n\n\t.error {\n\t\tfont-size: var(--ds-font-size-xs);\n\t\tcolor: var(--ds-color-error);\n\t}\n}\n","import { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport styles from \"./AppleSignInButton.module.css\";\n\nexport interface AppleSignInButtonProps {\n\tonSignIn: () => void;\n\tisPending?: boolean;\n\tisError?: boolean;\n\terror?: Error | null;\n}\n\nexport function AppleSignInButton({\n\tonSignIn,\n\tisPending = false,\n\tisError = false,\n\terror,\n}: AppleSignInButtonProps) {\n\treturn (\n\t\t<div className={styles.wrapper}>\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"small\"\n\t\t\t\tfullWidth\n\t\t\t\tonClick={onSignIn}\n\t\t\t\tloading={isPending}\n\t\t\t\taria-label=\"Continuar con Apple\"\n\t\t\t>\n\t\t\t\t<Icon name=\"apple-filled\" size={18} aria-hidden=\"true\" />\n\t\t\t\tApple\n\t\t\t</Button>\n\t\t\t{isError && (\n\t\t\t\t<span role=\"alert\" className={styles.error}>\n\t\t\t\t\t{error instanceof Error ? error.message : \"Error al iniciar sesión con Apple\"}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.wrapper {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tmin-height: 100dvh;\n\t\tflex: 1;\n\t\twidth: 100%;\n\t\tbackground-color: var(--ds-color-white);\n\t\tbackground-image: url(\"./assets/login-background-mobile.svg\");\n\t\tbackground-position: bottom;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: 100% auto;\n\n\t\t@media (width >= 768px) {\n\t\t\tbackground-image: url(\"./assets/login-background-desktop.svg\");\n\t\t\tbackground-position: right top;\n\t\t\tbackground-size: 30% auto;\n\n\t\t\t&::before {\n\t\t\t\tcontent: \"\";\n\t\t\t\tposition: absolute;\n\t\t\t\tbottom: 0;\n\t\t\t\tleft: 0;\n\t\t\t\twidth: 30%;\n\t\t\t\theight: 35%;\n\t\t\t\tbackground-image: url(\"./assets/login-background-desktop.svg\");\n\t\t\t\tbackground-size: contain;\n\t\t\t\tbackground-repeat: no-repeat;\n\t\t\t\ttransform: rotateZ(180deg);\n\t\t\t\tpointer-events: none;\n\t\t\t\tz-index: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t.content {\n\t\tposition: relative;\n\t\tz-index: 1;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-2xl);\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tgap: var(--spacing-lg);\n\t}\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport styles from \"./BackgroundWrapper.module.css\";\n\nexport interface BackgroundWrapperProps extends HTMLAttributes<HTMLDivElement> {\n\tchildren: ReactNode;\n}\n\nexport function BackgroundWrapper({ children, className, ...props }: BackgroundWrapperProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={[styles.wrapper, className].filter(Boolean).join(\" \")}\n\t\t\tdata-full-bleed=\"\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className={styles.content}>{children}</div>\n\t\t</div>\n\t);\n}\n","/**\n * Utility to merge CSS class names, filtering out falsy values.\n */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n\treturn classes.filter(Boolean).join(\" \");\n}\n","@layer ds-components {\n .badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius-full);\n font-family: var(--font-family-base);\n font-weight: var(--font-medium);\n line-height: var(--leading-tight);\n white-space: nowrap;\n }\n\n /* ── Sizes ── */\n .badge[data-size=\"small\"] {\n padding: 0.125rem var(--spacing-sm);\n font-size: var(--text-xs);\n }\n\n .badge[data-size=\"medium\"] {\n padding: 0.1875rem var(--spacing-md);\n font-size: var(--text-sm);\n }\n\n /* ── Variants ── */\n .badge[data-variant=\"default\"] {\n background-color: var(--color-neutral-100);\n color: var(--color-neutral-500);\n }\n\n .badge[data-variant=\"success\"] {\n background-color: var(--color-success-light);\n color: var(--color-success-dark);\n }\n\n .badge[data-variant=\"warning\"] {\n background-color: var(--color-warning-light);\n color: var(--color-warning-dark);\n }\n\n .badge[data-variant=\"error\"] {\n background-color: var(--color-error-light);\n color: var(--color-error-dark);\n }\n\n .badge[data-variant=\"info\"] {\n background-color: var(--color-info-light);\n color: var(--color-info-dark);\n }\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport styles from \"./Badge.module.css\";\n\nexport type BadgeVariant = \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\nexport type BadgeSize = \"small\" | \"medium\";\n\nexport interface BadgeProps {\n\tvariant?: BadgeVariant;\n\tsize?: BadgeSize;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\nexport function Badge({\n\tvariant = \"default\",\n\tsize = \"medium\",\n\tchildren,\n\tclassName,\n}: BadgeProps): React.ReactElement {\n\treturn (\n\t\t<span className={cn(styles.badge, className)} data-variant={variant} data-size={size}>\n\t\t\t{children}\n\t\t</span>\n\t);\n}\n","@layer ds-components {\n .card {\n background-color: var(--ds-color-surface);\n border: 1px solid var(--ds-color-border);\n border-radius: var(--ds-radius-xl);\n width: 100%;\n }\n\n /* ── Padding ── */\n .card[data-padding=\"none\"] {\n padding: 0;\n }\n\n .card[data-padding=\"small\"] {\n padding: var(--ds-space-4);\n }\n\n .card[data-padding=\"medium\"] {\n padding: var(--ds-space-6);\n }\n\n .card[data-padding=\"large\"] {\n padding: var(--ds-space-8);\n }\n\n /* ── Elevation ── */\n .card[data-elevation=\"none\"] {\n box-shadow: none;\n }\n\n .card[data-elevation=\"small\"] {\n box-shadow: var(--ds-shadow-sm);\n }\n\n .card[data-elevation=\"medium\"] {\n box-shadow: var(--ds-shadow-md);\n }\n\n .card[data-elevation=\"large\"] {\n box-shadow: var(--ds-shadow-lg);\n }\n\n /* ── Hoverable ── */\n .card[data-hoverable] {\n cursor: pointer;\n transition: box-shadow var(--ds-duration-fast) var(--ds-ease-out);\n\n &:hover {\n box-shadow: var(--ds-shadow-md);\n }\n }\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport styles from \"./Card.module.css\";\n\nexport type CardPadding = \"none\" | \"small\" | \"medium\" | \"large\";\nexport type CardElevation = \"none\" | \"small\" | \"medium\" | \"large\";\n\nexport interface CardProps extends HTMLAttributes<HTMLElement> {\n\tpadding?: CardPadding;\n\televation?: CardElevation;\n\thoverable?: boolean;\n\tmaxWidth?: string;\n\tchildren: ReactNode;\n}\n\nexport function Card({\n\tpadding = \"small\",\n\televation = \"none\",\n\thoverable = false,\n\tmaxWidth,\n\tchildren,\n\tclassName,\n\tstyle,\n\t...props\n}: CardProps) {\n\treturn (\n\t\t<section\n\t\t\tclassName={[styles.card, className].filter(Boolean).join(\" \")}\n\t\t\tdata-padding={padding}\n\t\t\tdata-elevation={elevation}\n\t\t\tdata-hoverable={hoverable ? \"\" : undefined}\n\t\t\tstyle={maxWidth ? { maxWidth, ...style } : style}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</section>\n\t);\n}\n","@layer ds-components {\n\t.chartWrapper {\n\t\twidth: 100%;\n\t\tposition: relative;\n\t}\n\n\t.chartTitle {\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-semibold);\n\t\tcolor: var(--color-text-muted);\n\t\tmargin-bottom: var(--spacing-sm);\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.05em;\n\t}\n\n\t.kpiCard {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--spacing-xs);\n\t\tpadding: var(--spacing-md);\n\t\tbackground: var(--color-surface);\n\t\tborder: 1px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t}\n\n\t.kpiLabel {\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-text-muted);\n\t}\n\n\t.kpiValue {\n\t\tfont-size: var(--text-2xl);\n\t\tfont-weight: var(--font-bold);\n\t\tcolor: var(--color-text);\n\t\tline-height: var(--leading-tight);\n\t}\n\n\t.kpiChange {\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-medium);\n\t}\n\n\t.kpiChange[data-trend=\"up\"] {\n\t\tcolor: var(--color-success);\n\t}\n\n\t.kpiChange[data-trend=\"down\"] {\n\t\tcolor: var(--color-error);\n\t}\n\n\t.kpiChange[data-trend=\"neutral\"] {\n\t\tcolor: var(--color-text-muted);\n\t}\n\n\t.emptyState {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\theight: 200px;\n\t\tcolor: var(--color-text-muted);\n\t\tfont-size: var(--text-sm);\n\t}\n}\n","import type { ReactElement } from \"react\";\nimport {\n\tArea,\n\tBar,\n\tCartesianGrid,\n\tLegend,\n\tLine,\n\tAreaChart as ReAreaChart,\n\tBarChart as ReBarChart,\n\tLineChart as ReLineChart,\n\tResponsiveContainer,\n\tTooltip,\n\tXAxis,\n\tYAxis,\n} from \"recharts\";\nimport styles from \"./Charts.module.css\";\n\n/* ── DS color palette: recharts stroke/fill accept only resolved colors, not CSS custom properties.\n Keep in sync with --ds-color-primary, blue-600, green-600, amber-600, violet-700, cyan-600. ── */\nconst DS_COLORS = [\n\t\"#ff4235\", // --ds-color-primary\n\t\"#2563eb\", // blue\n\t\"#16a34a\", // green\n\t\"#d97706\", // amber\n\t\"#7c3aed\", // violet\n\t\"#0891b2\", // cyan\n];\n\nexport interface ChartSeries {\n\tdataKey: string;\n\tlabel?: string;\n\tcolor?: string;\n}\n\nexport interface BaseChartProps {\n\t/** Data array — each object must have the keys referenced by series[].dataKey */\n\tdata: Record<string, unknown>[];\n\t/** X-axis data key */\n\txKey: string;\n\tseries: ChartSeries[];\n\theight?: number;\n\ttitle?: string;\n\t/** Y-axis tick formatter */\n\tformatY?: (value: number) => string;\n\t/** Tooltip value formatter */\n\tformatValue?: (value: number) => string;\n\t/** Hide recharts legend */\n\thideLegend?: boolean;\n}\n\n/* ── LineChart ── */\nexport function LineChart({\n\tdata,\n\txKey,\n\tseries,\n\theight = 300,\n\ttitle,\n\tformatY,\n\tformatValue,\n\thideLegend,\n}: BaseChartProps): ReactElement {\n\tif (!data?.length) return <div className={styles.emptyState}>Sin datos</div>;\n\n\treturn (\n\t\t<div className={styles.chartWrapper}>\n\t\t\t{title && <div className={styles.chartTitle}>{title}</div>}\n\t\t\t<ResponsiveContainer width=\"100%\" height={height}>\n\t\t\t\t<ReLineChart data={data} margin={{ top: 4, right: 8, left: 0, bottom: 4 }}>\n\t\t\t\t\t<CartesianGrid strokeDasharray=\"3 3\" stroke=\"var(--color-border)\" />\n\t\t\t\t\t<XAxis dataKey={xKey} tick={{ fontSize: 12 }} />\n\t\t\t\t\t<YAxis tick={{ fontSize: 12 }} tickFormatter={formatY} />\n\t\t\t\t\t<Tooltip formatter={formatValue ? (v) => formatValue(v as number) : undefined} />\n\t\t\t\t\t{!hideLegend && <Legend />}\n\t\t\t\t\t{series.map((s, i) => (\n\t\t\t\t\t\t<Line\n\t\t\t\t\t\t\tkey={s.dataKey}\n\t\t\t\t\t\t\ttype=\"monotone\"\n\t\t\t\t\t\t\tdataKey={s.dataKey}\n\t\t\t\t\t\t\tname={s.label ?? s.dataKey}\n\t\t\t\t\t\t\tstroke={s.color ?? DS_COLORS[i % DS_COLORS.length]}\n\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\tdot={false}\n\t\t\t\t\t\t\tactiveDot={{ r: 4 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</ReLineChart>\n\t\t\t</ResponsiveContainer>\n\t\t</div>\n\t);\n}\n\n/* ── BarChart ── */\nexport function BarChart({\n\tdata,\n\txKey,\n\tseries,\n\theight = 300,\n\ttitle,\n\tformatY,\n\tformatValue,\n\thideLegend,\n}: BaseChartProps): ReactElement {\n\tif (!data?.length) return <div className={styles.emptyState}>Sin datos</div>;\n\n\treturn (\n\t\t<div className={styles.chartWrapper}>\n\t\t\t{title && <div className={styles.chartTitle}>{title}</div>}\n\t\t\t<ResponsiveContainer width=\"100%\" height={height}>\n\t\t\t\t<ReBarChart data={data} margin={{ top: 4, right: 8, left: 0, bottom: 4 }}>\n\t\t\t\t\t<CartesianGrid strokeDasharray=\"3 3\" stroke=\"var(--color-border)\" />\n\t\t\t\t\t<XAxis dataKey={xKey} tick={{ fontSize: 12 }} />\n\t\t\t\t\t<YAxis tick={{ fontSize: 12 }} tickFormatter={formatY} />\n\t\t\t\t\t<Tooltip formatter={formatValue ? (v) => formatValue(v as number) : undefined} />\n\t\t\t\t\t{!hideLegend && <Legend />}\n\t\t\t\t\t{series.map((s, i) => (\n\t\t\t\t\t\t<Bar\n\t\t\t\t\t\t\tkey={s.dataKey}\n\t\t\t\t\t\t\tdataKey={s.dataKey}\n\t\t\t\t\t\t\tname={s.label ?? s.dataKey}\n\t\t\t\t\t\t\tfill={s.color ?? DS_COLORS[i % DS_COLORS.length]}\n\t\t\t\t\t\t\tradius={[2, 2, 0, 0]}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</ReBarChart>\n\t\t\t</ResponsiveContainer>\n\t\t</div>\n\t);\n}\n\n/* ── AreaChart ── */\nexport function AreaChart({\n\tdata,\n\txKey,\n\tseries,\n\theight = 300,\n\ttitle,\n\tformatY,\n\tformatValue,\n\thideLegend,\n}: BaseChartProps): ReactElement {\n\tif (!data?.length) return <div className={styles.emptyState}>Sin datos</div>;\n\n\treturn (\n\t\t<div className={styles.chartWrapper}>\n\t\t\t{title && <div className={styles.chartTitle}>{title}</div>}\n\t\t\t<ResponsiveContainer width=\"100%\" height={height}>\n\t\t\t\t<ReAreaChart data={data} margin={{ top: 4, right: 8, left: 0, bottom: 4 }}>\n\t\t\t\t\t<CartesianGrid strokeDasharray=\"3 3\" stroke=\"var(--color-border)\" />\n\t\t\t\t\t<XAxis dataKey={xKey} tick={{ fontSize: 12 }} />\n\t\t\t\t\t<YAxis tick={{ fontSize: 12 }} tickFormatter={formatY} />\n\t\t\t\t\t<Tooltip formatter={formatValue ? (v) => formatValue(v as number) : undefined} />\n\t\t\t\t\t{!hideLegend && <Legend />}\n\t\t\t\t\t{series.map((s, i) => {\n\t\t\t\t\t\tconst color = s.color ?? DS_COLORS[i % DS_COLORS.length];\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Area\n\t\t\t\t\t\t\t\tkey={s.dataKey}\n\t\t\t\t\t\t\t\ttype=\"monotone\"\n\t\t\t\t\t\t\t\tdataKey={s.dataKey}\n\t\t\t\t\t\t\t\tname={s.label ?? s.dataKey}\n\t\t\t\t\t\t\t\tstroke={color}\n\t\t\t\t\t\t\t\tfill={color}\n\t\t\t\t\t\t\t\tfillOpacity={0.12}\n\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ReAreaChart>\n\t\t\t</ResponsiveContainer>\n\t\t</div>\n\t);\n}\n\n/* ── KpiCard ── */\nexport interface KpiCardProps {\n\tlabel: string;\n\tvalue: string | number;\n\t/** e.g. \"+12.5%\" or \"-3.2%\" */\n\tchange?: string;\n\ttrend?: \"up\" | \"down\" | \"neutral\";\n}\n\nexport function KpiCard({ label, value, change, trend = \"neutral\" }: KpiCardProps): ReactElement {\n\treturn (\n\t\t<div className={styles.kpiCard}>\n\t\t\t<div className={styles.kpiLabel}>{label}</div>\n\t\t\t<div className={styles.kpiValue}>{value}</div>\n\t\t\t{change && (\n\t\t\t\t<div className={styles.kpiChange} data-trend={trend}>\n\t\t\t\t\t{change}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .wrapper {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-sm);\n cursor: pointer;\n user-select: none;\n\n &:has(.input:disabled) {\n opacity: 0.4;\n cursor: not-allowed;\n }\n }\n\n .input {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n\n .checkmark {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n background-color: var(--color-surface);\n border: 1.5px solid var(--color-border);\n border-radius: var(--radius-sm);\n transition:\n background-color var(--duration-fast) var(--ease-out),\n border-color var(--duration-fast) var(--ease-out),\n box-shadow var(--duration-fast) var(--ease-out);\n }\n\n .wrapper:hover:not(:has(.input:disabled)) .checkmark {\n border-color: var(--color-neutral-400);\n }\n\n .input:checked + .checkmark {\n background-color: var(--color-primary);\n border-color: var(--color-primary);\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 10' fill='none'%3E%3Cpath d='M1 5l3.5 3.5L11 1' stroke='%23ffffff' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: center;\n background-size: 10px 8px;\n }\n\n .input:indeterminate + .checkmark {\n background-color: var(--color-primary);\n border-color: var(--color-primary);\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 2' fill='none'%3E%3Cpath d='M1 1h8' stroke='%23ffffff' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: center;\n background-size: 10px 2px;\n }\n\n .input:focus-visible + .checkmark {\n outline: none;\n border-color: var(--color-primary);\n box-shadow: 0 0 0 3px var(--color-primary-light);\n }\n\n .label {\n font-family: var(--font-family-base);\n font-size: var(--text-sm);\n line-height: var(--leading-normal);\n color: var(--color-text);\n }\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport styles from \"./Checkbox.module.css\";\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\tlabel?: string;\n\tref?: React.Ref<HTMLInputElement>;\n}\n\nexport function Checkbox({ label, className, id, ref, ...props }: CheckboxProps) {\n\tconst inputId =\n\t\tid ??\n\t\t`checkbox-${String(label ?? \"\")\n\t\t\t.toLowerCase()\n\t\t\t.replace(/\\s+/g, \"-\")}`;\n\treturn (\n\t\t<label className={[styles.wrapper, className].filter(Boolean).join(\" \")} htmlFor={inputId}>\n\t\t\t<input ref={ref} type=\"checkbox\" id={inputId} className={styles.input} {...props} />\n\t\t\t<span className={styles.checkmark} aria-hidden=\"true\" />\n\t\t\t{label && <span className={styles.label}>{label}</span>}\n\t\t</label>\n\t);\n}\n","@layer ds-components {\n\t.wrapper {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--spacing-md);\n\t\tbackground: var(--ds-color-white);\n\t\tborder: 1px solid var(--color-neutral-200);\n\t\tborder-radius: var(--radius-md);\n\t\tpadding: var(--spacing-md);\n\t}\n\n\t.search {\n\t\twidth: 100%;\n\t\tmax-width: 320px;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tborder: 1px solid var(--color-neutral-200);\n\t\tborder-radius: var(--radius-base);\n\t\tfont-size: var(--text-sm);\n\t\tfont-family: var(--font-family-base);\n\t\t&:focus {\n\t\t\toutline: none;\n\t\t\tborder-color: var(--color-primary);\n\t\t\tbox-shadow: 0 0 0 3px\n\t\t\t\tcolor-mix(in oklch, var(--color-primary) 20%, transparent);\n\t\t}\n\t}\n\n\t.tableContainer {\n\t\toverflow-x: auto;\n\t\toverflow-y: auto;\n\t\tborder: 1px solid var(--color-neutral-200);\n\t\tborder-radius: var(--radius-base);\n\t}\n\n\t.table {\n\t\twidth: 100%;\n\t\tborder-collapse: collapse;\n\t\tfont-size: var(--text-sm);\n\t}\n\n\t.th {\n\t\ttext-align: left;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-weight: 600;\n\t\tcolor: var(--color-neutral-400);\n\t\tbackground: var(--color-neutral-50);\n\t\tborder-bottom: 1px solid var(--color-neutral-200);\n\t\twhite-space: nowrap;\n\t\tuser-select: none;\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tz-index: 1;\n\n\t\t&[data-sortable] {\n\t\t\tcursor: pointer;\n\t\t\t&:hover {\n\t\t\t\tcolor: var(--color-neutral-500);\n\t\t\t}\n\t\t}\n\t}\n\n\t.tr {\n\t\tborder-top: 1px solid var(--color-neutral-200);\n\t\ttransition: background var(--duration-fast) var(--ease-out);\n\n\t\t&:last-child {\n\t\t\tborder-bottom: none;\n\t\t}\n\n\t\t&:nth-child(even) {\n\t\t\tbackground: var(--color-neutral-100);\n\t\t\tborder-bottom: 1px solid var(--color-neutral-200);\n\t\t}\n\n\t\t/* biome-ignore lint/style/noDescendingSpecificity: .th and .tr are unrelated elements; no cascade conflict */\n\t\t&:hover {\n\t\t\tbackground: var(--color-tertiary);\n\t\t}\n\t\t&[data-clickable] {\n\t\t\tcursor: pointer;\n\t\t}\n\t\t&[data-selected] {\n\t\t\tbackground: color-mix(in oklch, var(--color-primary) 6%, transparent);\n\t\t\t&:hover {\n\t\t\t\tbackground: color-mix(in oklch, var(--color-primary) 10%, transparent);\n\t\t\t}\n\t\t}\n\t}\n\n\t.td {\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tcolor: var(--color-neutral-500);\n\t}\n\n\t.empty {\n\t\ttext-align: center;\n\t\tpadding: var(--spacing-2xl);\n\t\tcolor: var(--color-neutral-400);\n\t}\n\n\t.loading {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\tpadding: var(--spacing-2xl);\n\t}\n\n\t.pagination {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tgap: var(--spacing-md);\n\t\tpadding: var(--spacing-sm) 0;\n\t}\n\n\t.pageButton {\n\t\tpadding: var(--spacing-xs) var(--spacing-md);\n\t\tborder: 1px solid var(--color-neutral-200);\n\t\tborder-radius: var(--radius-base);\n\t\tfont-size: var(--text-sm);\n\t\tcursor: pointer;\n\t\ttransition: all var(--duration-fast) var(--ease-out);\n\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground: var(--color-neutral-50);\n\t\t}\n\t\t&:disabled {\n\t\t\topacity: 0.5;\n\t\t\tcursor: not-allowed;\n\t\t}\n\t}\n\n\t.pageInfo {\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-neutral-400);\n\t}\n}\n","import {\n\ttype Column,\n\ttype ColumnDef,\n\tflexRender,\n\tgetCoreRowModel,\n\tgetFilteredRowModel,\n\tgetPaginationRowModel,\n\tgetSortedRowModel,\n\ttype PaginationState,\n\ttype RowSelectionState,\n\ttype SortingState,\n\tuseReactTable,\n} from \"@tanstack/react-table\";\nimport { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Spinner } from \"../Spinner\";\nimport styles from \"./DataTable.module.css\";\n\nfunction getAriaSortValue<T>(\n\tcolumn: Column<T, unknown>,\n): \"ascending\" | \"descending\" | \"none\" | undefined {\n\tconst sorted = column.getIsSorted();\n\tif (sorted === \"asc\") return \"ascending\";\n\tif (sorted === \"desc\") return \"descending\";\n\tif (column.getCanSort()) return \"none\";\n\treturn undefined;\n}\n\nexport interface DataTableProps<T> {\n\tdata: T[];\n\tcolumns: ColumnDef<T, unknown>[];\n\tisLoading?: boolean;\n\tloadingSlot?: ReactNode;\n\tpageSize?: number;\n\tsearchable?: boolean;\n\tsortable?: boolean;\n\tpaginated?: boolean;\n\temptyMessage?: ReactNode;\n\tsearchPlaceholder?: string;\n\tpreviousLabel?: string;\n\tnextLabel?: string;\n\tonRowClick?: (row: T) => void;\n\tselectable?: boolean;\n\tonSelectionChange?: (rows: T[]) => void;\n\tmanualPagination?: boolean;\n\tpageCount?: number;\n\t/** Wrap with useCallback in the parent to avoid redundant fetches on re-render. */\n\tonPageChange?: (pageIndex: number, pageSize: number) => void;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: pagination + selection + loading branches are all load-bearing\nexport function DataTable<T>({\n\tdata,\n\tcolumns,\n\tisLoading = false,\n\tloadingSlot,\n\tpageSize = 20,\n\tsearchable = false,\n\tsortable = true,\n\tpaginated = true,\n\temptyMessage = \"Sin resultados\",\n\tsearchPlaceholder = \"Buscar...\",\n\tpreviousLabel = \"Anterior\",\n\tnextLabel = \"Siguiente\",\n\tonRowClick,\n\tselectable = false,\n\tonSelectionChange,\n\tmanualPagination = false,\n\tpageCount,\n\tonPageChange,\n}: DataTableProps<T>): React.ReactElement {\n\tconst [sorting, setSorting] = useState<SortingState>([]);\n\tconst [globalFilter, setGlobalFilter] = useState(\"\");\n\tconst [pagination, setPagination] = useState<PaginationState>({\n\t\tpageIndex: 0,\n\t\tpageSize,\n\t});\n\tconst [rowSelection, setRowSelection] = useState<RowSelectionState>({});\n\n\tconst selectionColumn: ColumnDef<T, unknown> = useMemo(\n\t\t() => ({\n\t\t\tid: \"__select__\",\n\t\t\tsize: 40,\n\t\t\tenableSorting: false,\n\t\t\theader: ({ table }) => (\n\t\t\t\t<Checkbox\n\t\t\t\t\tchecked={table.getIsAllPageRowsSelected()}\n\t\t\t\t\tonChange={table.getToggleAllPageRowsSelectedHandler()}\n\t\t\t\t\taria-label=\"Select all rows\"\n\t\t\t\t/>\n\t\t\t),\n\t\t\tcell: ({ row }) => (\n\t\t\t\t<Checkbox\n\t\t\t\t\tchecked={row.getIsSelected()}\n\t\t\t\t\tonChange={row.getToggleSelectedHandler()}\n\t\t\t\t\taria-label={`Select row ${row.index + 1}`}\n\t\t\t\t/>\n\t\t\t),\n\t\t}),\n\t\t[],\n\t);\n\n\tconst resolvedColumns = useMemo(\n\t\t() => (selectable ? [selectionColumn, ...columns] : columns),\n\t\t[selectable, columns, selectionColumn],\n\t);\n\n\tconst table = useReactTable({\n\t\tdata,\n\t\tcolumns: resolvedColumns,\n\t\tstate: { sorting, globalFilter, pagination, rowSelection },\n\t\tonSortingChange: setSorting,\n\t\tonGlobalFilterChange: setGlobalFilter,\n\t\tonPaginationChange: setPagination,\n\t\tonRowSelectionChange: setRowSelection,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\t...(sortable ? { getSortedRowModel: getSortedRowModel() } : {}),\n\t\t...(paginated ? { getPaginationRowModel: getPaginationRowModel() } : {}),\n\t\t...(searchable ? { getFilteredRowModel: getFilteredRowModel() } : {}),\n\t\tenableRowSelection: selectable,\n\t\tmanualPagination,\n\t\tpageCount: manualPagination ? (pageCount ?? -1) : undefined,\n\t});\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: rowSelection change must trigger recompute because table.getSelectedRowModel() reads current state\n\tconst selectedRows = useMemo(\n\t\t() => (selectable ? table.getSelectedRowModel().rows.map((row) => row.original) : []),\n\t\t[selectable, table, rowSelection],\n\t);\n\n\tconst isMountedRef = useRef(false);\n\tuseEffect(() => {\n\t\tif (!isMountedRef.current) {\n\t\t\tisMountedRef.current = true;\n\t\t\treturn;\n\t\t}\n\t\tonSelectionChange?.(selectedRows);\n\t}, [selectedRows, onSelectionChange]);\n\n\tuseEffect(() => {\n\t\tif (!manualPagination || !onPageChange) return;\n\t\tonPageChange(pagination.pageIndex, pagination.pageSize);\n\t}, [pagination.pageIndex, pagination.pageSize, manualPagination, onPageChange]);\n\n\tif (isLoading) {\n\t\treturn <div className={styles.loading}>{loadingSlot ?? <Spinner size=\"large\" />}</div>;\n\t}\n\n\treturn (\n\t\t<div className={styles.wrapper}>\n\t\t\t{searchable && (\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclassName={styles.search}\n\t\t\t\t\tplaceholder={searchPlaceholder}\n\t\t\t\t\tvalue={globalFilter}\n\t\t\t\t\tonChange={(e) => setGlobalFilter(e.target.value)}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<div className={styles.tableContainer}>\n\t\t\t\t<table className={styles.table}>\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t{table.getHeaderGroups().map((headerGroup) => (\n\t\t\t\t\t\t\t<tr key={headerGroup.id}>\n\t\t\t\t\t\t\t\t{headerGroup.headers.map((header) => (\n\t\t\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\t\t\tclassName={styles.th}\n\t\t\t\t\t\t\t\t\t\tdata-sortable={header.column.getCanSort() || undefined}\n\t\t\t\t\t\t\t\t\t\tonClick={header.column.getToggleSortingHandler()}\n\t\t\t\t\t\t\t\t\t\taria-sort={getAriaSortValue(header.column)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{flexRender(header.column.columnDef.header, header.getContext())}\n\t\t\t\t\t\t\t\t\t\t{header.column.getIsSorted() === \"asc\" && \" ▲\"}\n\t\t\t\t\t\t\t\t\t\t{header.column.getIsSorted() === \"desc\" && \" ▼\"}\n\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t{table.getRowModel().rows.length === 0 ? (\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td colSpan={resolvedColumns.length} className={styles.empty}>\n\t\t\t\t\t\t\t\t\t{emptyMessage}\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\ttable.getRowModel().rows.map((row) => (\n\t\t\t\t\t\t\t\t<tr\n\t\t\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\t\t\tclassName={styles.tr}\n\t\t\t\t\t\t\t\t\tdata-clickable={!!onRowClick || undefined}\n\t\t\t\t\t\t\t\t\tdata-selected={row.getIsSelected() || undefined}\n\t\t\t\t\t\t\t\t\tonClick={() => onRowClick?.(row.original)}\n\t\t\t\t\t\t\t\t\ttabIndex={onRowClick ? 0 : undefined}\n\t\t\t\t\t\t\t\t\trole={onRowClick ? \"button\" : undefined}\n\t\t\t\t\t\t\t\t\tonKeyDown={\n\t\t\t\t\t\t\t\t\t\tonRowClick\n\t\t\t\t\t\t\t\t\t\t\t? (e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonRowClick(row.original);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{row.getVisibleCells().map((cell) => (\n\t\t\t\t\t\t\t\t\t\t<td key={cell.id} className={styles.td}>\n\t\t\t\t\t\t\t\t\t\t\t{flexRender(cell.column.columnDef.cell, cell.getContext())}\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t))\n\t\t\t\t\t\t)}\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</div>\n\n\t\t\t{paginated && (manualPagination ? (pageCount ?? 0) > 1 : table.getPageCount() > 1) && (\n\t\t\t\t<div className={styles.pagination}>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.pageButton}\n\t\t\t\t\t\tonClick={() => table.previousPage()}\n\t\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{previousLabel}\n\t\t\t\t\t</button>\n\t\t\t\t\t<span className={styles.pageInfo}>\n\t\t\t\t\t\t{table.getState().pagination.pageIndex + 1} /{\" \"}\n\t\t\t\t\t\t{manualPagination ? (pageCount ?? \"?\") : table.getPageCount()}\n\t\t\t\t\t</span>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.pageButton}\n\t\t\t\t\t\tonClick={() => table.nextPage()}\n\t\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{nextLabel}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.wrapper {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--spacing-xs);\n\t}\n\n\t.label {\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-semibold);\n\t\tline-height: var(--leading-snug);\n\t\tcolor: var(--color-text);\n\t}\n\n\t.input {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-base);\n\t\tline-height: var(--leading-normal);\n\t\tcolor: var(--color-text);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: 1.5px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t\ttransition:\n\t\t\tborder-color var(--duration-fast) var(--ease-out),\n\t\t\tbox-shadow var(--duration-fast) var(--ease-out);\n\n\t\t/* Normalize native date picker appearance */\n\t\tappearance: none;\n\t\t-webkit-appearance: none;\n\n\t\t&::-webkit-calendar-picker-indicator {\n\t\t\tcursor: pointer;\n\t\t\topacity: 0.6;\n\t\t\ttransition: opacity var(--duration-fast) var(--ease-out);\n\n\t\t\t&:hover {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\n\t\t&:hover:not(:disabled):not([data-error]) {\n\t\t\tborder-color: var(--color-neutral-400);\n\t\t}\n\n\t\t&:focus {\n\t\t\toutline: none;\n\t\t\tborder-color: var(--color-primary);\n\t\t\tbox-shadow: 0 0 0 3px var(--color-primary-light);\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: none;\n\t\t\tborder-color: var(--color-primary);\n\t\t\tbox-shadow: 0 0 0 3px var(--color-primary-light);\n\t\t}\n\n\t\t&:disabled {\n\t\t\tbackground-color: var(--color-neutral-50);\n\t\t\tcolor: var(--color-neutral-400);\n\t\t\tcursor: not-allowed;\n\t\t}\n\n\t\t&[data-error] {\n\t\t\tborder-color: var(--color-error);\n\n\t\t\t&:focus,\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: 0 0 0 3px var(--color-error-light);\n\t\t\t}\n\t\t}\n\t}\n}\n","import type { InputHTMLAttributes, Ref } from \"react\";\nimport { useId } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport styles from \"./DatePicker.module.css\";\n\nexport interface DatePickerProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\terror?: boolean;\n\tlabel?: string;\n\tref?: Ref<HTMLInputElement>;\n}\n\nexport function DatePicker({ error, label, className, id, ref, ...props }: DatePickerProps) {\n\tconst generatedId = useId();\n\tconst inputId = id ?? generatedId;\n\treturn (\n\t\t<div className={cn(styles.wrapper, className)}>\n\t\t\t{label && (\n\t\t\t\t<label htmlFor={inputId} className={styles.label}>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t<input\n\t\t\t\tref={ref}\n\t\t\t\ttype=\"date\"\n\t\t\t\tid={inputId}\n\t\t\t\tclassName={styles.input}\n\t\t\t\tdata-error={error || undefined}\n\t\t\t\taria-invalid={error || undefined}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.wrapper {\n\t\tdisplay: flex;\n\t\talign-items: flex-end;\n\t\tgap: var(--ds-space-2);\n\t}\n\n\t.field {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--ds-space-1);\n\t\tflex: 1;\n\t}\n\n\t.label {\n\t\tfont-family: var(--ds-font-family);\n\t\tfont-size: var(--ds-font-size-sm);\n\t\tfont-weight: var(--ds-font-semibold);\n\t\tline-height: var(--ds-leading-snug);\n\t\tcolor: var(--ds-color-text);\n\t}\n\n\t.input {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--ds-space-2) var(--ds-space-3);\n\t\tfont-family: var(--ds-font-family);\n\t\tfont-size: var(--ds-font-size-base);\n\t\tline-height: var(--ds-leading-normal);\n\t\tcolor: var(--ds-color-text);\n\t\tbackground-color: var(--ds-color-surface);\n\t\tborder: 1px solid var(--ds-color-border);\n\t\tborder-radius: var(--ds-radius-lg);\n\t\tappearance: none;\n\t\t-webkit-appearance: none;\n\t\ttransition:\n\t\t\tborder-color var(--ds-duration-fast) var(--ds-ease-out),\n\t\t\tbox-shadow var(--ds-duration-fast) var(--ds-ease-out);\n\n\t\t&::-webkit-calendar-picker-indicator {\n\t\t\tcursor: pointer;\n\t\t\topacity: 0.6;\n\t\t\ttransition: opacity var(--ds-duration-fast) var(--ds-ease-out);\n\n\t\t\t&:hover {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\n\t\t&:hover:not(:disabled):not([data-error]) {\n\t\t\tborder-color: var(--ds-color-gray-400);\n\t\t}\n\n\t\t&:focus,\n\t\t&:focus-visible {\n\t\t\toutline: none;\n\t\t\tborder-color: var(--ds-color-primary);\n\t\t\tbox-shadow: 0 0 0 3px var(--ds-color-primary-light);\n\t\t}\n\n\t\t&:disabled {\n\t\t\tbackground-color: var(--ds-color-gray-50);\n\t\t\tcolor: var(--ds-color-gray-500);\n\t\t\tcursor: not-allowed;\n\t\t}\n\n\t\t&[data-error] {\n\t\t\tborder-color: var(--ds-color-error);\n\n\t\t\t&:focus,\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: 0 0 0 3px var(--ds-color-error-light);\n\t\t\t}\n\t\t}\n\t}\n\n\t.separator {\n\t\tfont-size: var(--ds-font-size-base);\n\t\tcolor: var(--ds-color-text-muted);\n\t\tpadding-bottom: var(--ds-space-2);\n\t\tflex-shrink: 0;\n\t}\n}\n","import { useId } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport styles from \"./DateRangePicker.module.css\";\n\nexport interface DateRangePickerProps {\n\tstartDate?: string;\n\tendDate?: string;\n\tonStartChange?: (date: string) => void;\n\tonEndChange?: (date: string) => void;\n\tstartLabel?: string;\n\tendLabel?: string;\n\terror?: boolean;\n\tdisabled?: boolean;\n\tminDate?: string;\n\tmaxDate?: string;\n\tclassName?: string;\n}\n\nexport function DateRangePicker({\n\tstartDate = \"\",\n\tendDate = \"\",\n\tonStartChange,\n\tonEndChange,\n\tstartLabel = \"Desde\",\n\tendLabel = \"Hasta\",\n\terror,\n\tdisabled,\n\tminDate,\n\tmaxDate,\n\tclassName,\n}: DateRangePickerProps) {\n\tconst startId = useId();\n\tconst endId = useId();\n\n\treturn (\n\t\t<div className={cn(styles.wrapper, className)}>\n\t\t\t<div className={styles.field}>\n\t\t\t\t<label htmlFor={startId} className={styles.label}>\n\t\t\t\t\t{startLabel}\n\t\t\t\t</label>\n\t\t\t\t<input\n\t\t\t\t\tid={startId}\n\t\t\t\t\ttype=\"date\"\n\t\t\t\t\tclassName={styles.input}\n\t\t\t\t\tvalue={startDate}\n\t\t\t\t\tmin={minDate}\n\t\t\t\t\tmax={endDate || maxDate}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tdata-error={error ? \"\" : undefined}\n\t\t\t\t\taria-invalid={error || undefined}\n\t\t\t\t\tonChange={(e) => onStartChange?.(e.target.value)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<span className={styles.separator} aria-hidden=\"true\">\n\t\t\t\t—\n\t\t\t</span>\n\t\t\t<div className={styles.field}>\n\t\t\t\t<label htmlFor={endId} className={styles.label}>\n\t\t\t\t\t{endLabel}\n\t\t\t\t</label>\n\t\t\t\t<input\n\t\t\t\t\tid={endId}\n\t\t\t\t\ttype=\"date\"\n\t\t\t\t\tclassName={styles.input}\n\t\t\t\t\tvalue={endDate}\n\t\t\t\t\tmin={startDate || minDate}\n\t\t\t\t\tmax={maxDate}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tdata-error={error ? \"\" : undefined}\n\t\t\t\t\taria-invalid={error || undefined}\n\t\t\t\t\tonChange={(e) => onEndChange?.(e.target.value)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { type RefObject, useEffect } from \"react\";\n\nconst FOCUSABLE_SELECTOR =\n\t'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n/**\n * Traps keyboard focus inside the referenced element while `active` is true.\n * On activation the first focusable child receives focus.\n * On deactivation focus returns to the element that was focused before the trap.\n */\nexport function useFocusTrap(ref: RefObject<HTMLElement | null>, active: boolean): void {\n\tuseEffect(() => {\n\t\tif (!active || !ref.current) return;\n\n\t\tconst container = ref.current;\n\t\tconst previouslyFocused = document.activeElement as HTMLElement | null;\n\n\t\tconst focusables = () =>\n\t\t\tArray.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n\n\t\t// Focus first element on activation\n\t\tconst first = focusables()[0];\n\t\tfirst?.focus();\n\n\t\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: focus trap requires Tab/Shift-Tab × first/last boundary branches\n\t\tfunction handleKeyDown(e: KeyboardEvent) {\n\t\t\tif (e.key !== \"Tab\") return;\n\n\t\t\tconst items = focusables();\n\t\t\tif (items.length === 0) return;\n\n\t\t\tconst firstItem = items[0];\n\t\t\tconst lastItem = items[items.length - 1];\n\n\t\t\tif (e.shiftKey && document.activeElement === firstItem) {\n\t\t\t\te.preventDefault();\n\t\t\t\tlastItem?.focus();\n\t\t\t} else if (!e.shiftKey && document.activeElement === lastItem) {\n\t\t\t\te.preventDefault();\n\t\t\t\tfirstItem?.focus();\n\t\t\t}\n\t\t}\n\n\t\tcontainer.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => {\n\t\t\tcontainer.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\tpreviouslyFocused?.focus();\n\t\t};\n\t}, [active, ref]);\n}\n","@layer ds-components {\n .overlay {\n position: fixed;\n inset: 0;\n z-index: var(--ds-z-modal);\n background-color: var(--ds-color-surface-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--ds-space-4);\n animation: ds-fade-in var(--ds-duration-fast) var(--ds-ease-out);\n }\n\n .overlayBackdrop {\n position: absolute;\n inset: 0;\n background: transparent;\n border: none;\n cursor: default;\n padding: 0;\n }\n\n .dialog {\n position: relative;\n background-color: var(--ds-color-surface);\n border-radius: var(--ds-radius-xl);\n box-shadow: var(--ds-shadow-xl);\n display: flex;\n flex-direction: column;\n max-height: calc(100vh - 2 * var(--ds-space-4));\n overflow: hidden;\n animation: ds-dialog-open var(--ds-duration-base) var(--ds-ease-spring);\n\n /* Remove default focus ring from programmatic focus */\n &:focus {\n outline: none;\n }\n\n &[data-size=\"small\"] {\n width: 100%;\n max-width: 400px;\n }\n\n &[data-size=\"medium\"] {\n width: 100%;\n max-width: 560px;\n }\n\n &[data-size=\"large\"] {\n width: 100%;\n max-width: 800px;\n }\n }\n\n .header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--ds-space-3);\n padding: var(--ds-space-6) var(--ds-space-6) var(--ds-space-4);\n border-bottom: 1px solid var(--ds-color-border);\n flex-shrink: 0;\n }\n\n .title {\n font-family: var(--ds-font-family);\n font-size: var(--ds-font-size-xl);\n font-weight: var(--ds-font-weight-bold);\n line-height: var(--ds-leading-tight);\n color: var(--ds-color-text);\n margin: 0;\n }\n\n .closeButton {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 36px;\n height: 36px;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--ds-color-text-muted);\n border-radius: var(--ds-radius-md);\n transition:\n background-color var(--ds-duration-fast) var(--ds-ease-out),\n color var(--ds-duration-fast) var(--ds-ease-out);\n\n &:hover {\n background-color: var(--ds-color-gray-100);\n color: var(--ds-color-text);\n }\n\n &:focus-visible {\n outline: 2px solid var(--ds-color-primary);\n outline-offset: 1px;\n }\n }\n\n .body {\n padding: var(--ds-space-6);\n overflow-y: auto;\n flex: 1;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { useEffect, useId, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFocusTrap } from \"../../utils/focusTrap\";\nimport styles from \"./Dialog.module.css\";\n\nexport type DialogSize = \"small\" | \"medium\" | \"large\";\n\nexport interface DialogProps {\n\topen: boolean;\n\tonClose: () => void;\n\ttitle: string;\n\tchildren: ReactNode;\n\tsize?: DialogSize;\n\tclassName?: string;\n}\n\nexport function Dialog({\n\topen,\n\tonClose,\n\ttitle,\n\tchildren,\n\tsize = \"medium\",\n\tclassName,\n}: DialogProps) {\n\tconst titleId = useId();\n\tconst dialogRef = useRef<HTMLDivElement>(null);\n\n\t/* ── Lock scroll ── */\n\tuseEffect(() => {\n\t\tif (open) {\n\t\t\tconst scrollY = window.scrollY;\n\t\t\tdocument.body.style.overflow = \"hidden\";\n\t\t\tdocument.body.style.position = \"fixed\";\n\t\t\tdocument.body.style.top = `-${scrollY}px`;\n\t\t\tdocument.body.style.width = \"100%\";\n\t\t\treturn () => {\n\t\t\t\tdocument.body.style.overflow = \"\";\n\t\t\t\tdocument.body.style.position = \"\";\n\t\t\t\tdocument.body.style.top = \"\";\n\t\t\t\tdocument.body.style.width = \"\";\n\t\t\t\twindow.scrollTo(0, scrollY);\n\t\t\t};\n\t\t}\n\t}, [open]);\n\n\t/* ── Focus trap (handles focus save/restore + Tab wrapping) ── */\n\tuseFocusTrap(dialogRef, open);\n\n\t/* ── Escape key ── */\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => document.removeEventListener(\"keydown\", handleKeyDown);\n\t}, [open, onClose]);\n\n\tif (!open || typeof document === \"undefined\") return null;\n\n\treturn createPortal(\n\t\t<div className={styles.overlay}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.overlayBackdrop}\n\t\t\t\tonClick={onClose}\n\t\t\t\taria-label=\"Cerrar\"\n\t\t\t\ttabIndex={-1}\n\t\t\t/>\n\n\t\t\t<div\n\t\t\t\tref={dialogRef}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-modal=\"true\"\n\t\t\t\taria-labelledby={titleId}\n\t\t\t\tclassName={[styles.dialog, className].filter(Boolean).join(\" \")}\n\t\t\t\tdata-size={size}\n\t\t\t\ttabIndex={-1}\n\t\t\t>\n\t\t\t\t<div className={styles.header}>\n\t\t\t\t\t<h2 id={titleId} className={styles.title}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h2>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.closeButton}\n\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\taria-label=\"Cerrar diálogo\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path d=\"M18 6 6 18M6 6l12 12\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div className={styles.body}>{children}</div>\n\t\t\t</div>\n\t\t</div>,\n\t\tdocument.body,\n\t);\n}\n","@layer ds-components {\n .root {\n position: relative;\n display: inline-block;\n\n /* ── Trigger button ── */\n .trigger {\n display: flex;\n align-items: center;\n gap: 0;\n border: none;\n border-radius: var(--ds-radius-full);\n font-weight: var(--ds-font-weight-semibold);\n font-family: inherit;\n cursor: pointer;\n transition: opacity 200ms ease-in-out;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n user-select: none;\n\n &:hover:not(:disabled) {\n opacity: 0.85;\n }\n\n &:focus-visible {\n outline: 2px solid var(--ds-focus-color, var(--ds-color-primary));\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n filter: grayscale(1) opacity(0.3);\n }\n }\n\n .triggerText {\n white-space: nowrap;\n }\n\n /* Separator between text and chevron */\n .separator {\n width: 1px;\n align-self: stretch;\n }\n\n .iconWrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .root .iconWrapper svg {\n transition: transform 200ms ease-out;\n }\n\n /* ── Variants ── */\n &[data-variant=\"primary\"] {\n .trigger {\n background-color: var(--ds-color-info);\n color: var(--ds-color-white);\n }\n .separator {\n background-color: rgba(255, 255, 255, 0.3);\n }\n }\n\n &[data-variant=\"ghost\"] {\n .trigger {\n background-color: transparent;\n color: var(--ds-color-text-muted);\n border: 1px solid var(--ds-color-border);\n\n &:hover:not(:disabled) {\n background-color: var(--ds-color-gray-100);\n color: var(--ds-color-text);\n opacity: 1;\n }\n }\n .separator {\n background-color: var(--ds-color-border);\n }\n }\n\n /* ── Sizes ── */\n &[data-size=\"tiny\"] {\n .trigger {\n font-size: var(--ds-font-size-xs);\n min-height: 1.75rem;\n }\n .triggerText {\n padding: 0 var(--ds-space-3);\n }\n .iconWrapper {\n padding: 0 var(--ds-space-2);\n }\n .separator {\n margin: var(--ds-space-1) 0;\n }\n }\n\n &[data-size=\"small\"] {\n .trigger {\n font-size: var(--ds-font-size-sm);\n min-height: 2.25rem;\n }\n .triggerText {\n padding: 0 var(--ds-space-3);\n }\n .iconWrapper {\n padding: 0 var(--ds-space-2);\n }\n .separator {\n margin: var(--ds-space-1) 0;\n }\n }\n\n &[data-size=\"medium\"] {\n .trigger {\n font-size: var(--ds-font-size-base);\n min-height: 3rem;\n }\n .triggerText {\n padding: 0 var(--ds-space-4);\n }\n .iconWrapper {\n padding: 0 var(--ds-space-3);\n }\n .separator {\n margin: var(--ds-space-2) 0;\n }\n }\n\n &[data-size=\"large\"] {\n .trigger {\n font-size: var(--ds-font-size-lg);\n min-height: 4rem;\n }\n .triggerText {\n padding: 0 var(--ds-space-6);\n }\n .iconWrapper {\n padding: 0 var(--ds-space-4);\n }\n .separator {\n margin: var(--ds-space-2) 0;\n }\n }\n\n /* Chevron rotates when open */\n &[data-open] .iconWrapper svg {\n transform: rotate(180deg);\n }\n\n /* ── Dropdown menu ── */\n .menu {\n position: absolute;\n bottom: calc(100% + var(--ds-space-1));\n left: 50%;\n transform: translateX(-50%);\n z-index: 1000;\n min-width: max-content;\n background-color: var(--ds-color-surface);\n border: 1.5px solid var(--ds-color-border);\n border-radius: var(--ds-radius-lg);\n box-shadow: var(--ds-shadow-lg);\n padding: var(--ds-space-1) 0;\n list-style: none;\n overflow: hidden;\n animation: menuEnter 150ms ease-out;\n }\n\n .menuItem {\n display: flex;\n align-items: center;\n gap: var(--ds-space-2);\n padding: var(--ds-space-2) var(--ds-space-4);\n font-size: var(--ds-font-size-sm);\n font-family: inherit;\n text-align: left;\n background: none;\n cursor: pointer;\n color: var(--ds-color-text);\n transition: background-color 150ms ease-in-out;\n white-space: nowrap;\n\n &:hover:not([data-disabled]) {\n background-color: var(--ds-color-gray-100);\n }\n\n &[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n &[data-focused] {\n background-color: var(--ds-color-gray-100);\n }\n }\n\n .menuIcon {\n flex-shrink: 0;\n }\n\n .menuLabel {\n flex: 1;\n }\n }\n\n @keyframes menuEnter {\n from {\n opacity: 0;\n transform: translateX(-50%) scaleY(0.95) translateY(4px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) scaleY(1) translateY(0);\n }\n }\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { Icon } from \"../Icon/Icon\";\nimport type { IconNameType } from \"../Icon/icons\";\nimport styles from \"./DropdownButton.module.css\";\n\nexport interface DropdownMenuItemType {\n\tvalue: string;\n\tlabel: string;\n\ticon?: IconNameType;\n\tdisabled?: boolean;\n}\n\nexport interface DropdownButtonProps {\n\ttext: string;\n\tmenuItems: DropdownMenuItemType[];\n\tsize?: \"tiny\" | \"small\" | \"medium\" | \"large\";\n\tvariant?: \"primary\" | \"ghost\";\n\tdisabled?: boolean;\n\tonSelect?: (item: DropdownMenuItemType) => void;\n\tonOpen?: () => void;\n\tonClose?: () => void;\n}\n\nconst ICON_SIZE: Record<NonNullable<DropdownButtonProps[\"size\"]>, number> = {\n\ttiny: 14,\n\tsmall: 16,\n\tmedium: 20,\n\tlarge: 24,\n};\n\nexport function DropdownButton({\n\ttext,\n\tmenuItems,\n\tsize = \"medium\",\n\tvariant = \"primary\",\n\tdisabled = false,\n\tonSelect,\n\tonOpen,\n\tonClose,\n}: DropdownButtonProps) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [focusedIndex, setFocusedIndex] = useState(-1);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst buttonRef = useRef<HTMLButtonElement>(null);\n\n\tfunction open() {\n\t\tsetIsOpen(true);\n\t\tsetFocusedIndex(-1);\n\t\tonOpen?.();\n\t}\n\n\tfunction close() {\n\t\tsetIsOpen(false);\n\t\tsetFocusedIndex(-1);\n\t\tonClose?.();\n\t}\n\n\tfunction toggle() {\n\t\tif (disabled) return;\n\t\tisOpen ? close() : open();\n\t}\n\n\tfunction selectItem(item: DropdownMenuItemType) {\n\t\tif (item.disabled) return;\n\t\tonSelect?.(item);\n\t\tclose();\n\t}\n\n\t// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: keyboard nav requires a branch per key × open/closed state\n\tfunction handleKeyDown(e: React.KeyboardEvent) {\n\t\tif (!isOpen) {\n\t\t\tif (e.key === \"Enter\" || e.key === \" \" || e.key === \"ArrowDown\") {\n\t\t\t\te.preventDefault();\n\t\t\t\topen();\n\t\t\t\tsetFocusedIndex(0);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === \"Escape\") {\n\t\t\te.preventDefault();\n\t\t\tclose();\n\t\t\tbuttonRef.current?.focus();\n\t\t} else if (e.key === \"ArrowDown\") {\n\t\t\te.preventDefault();\n\t\t\tsetFocusedIndex((i) => Math.min(i + 1, menuItems.length - 1));\n\t\t} else if (e.key === \"ArrowUp\") {\n\t\t\te.preventDefault();\n\t\t\tsetFocusedIndex((i) => Math.max(i - 1, 0));\n\t\t} else if (e.key === \"Enter\" || e.key === \" \") {\n\t\t\te.preventDefault();\n\t\t\tif (focusedIndex >= 0) {\n\t\t\t\tconst item = menuItems[focusedIndex];\n\t\t\t\tif (item && !item.disabled) selectItem(item);\n\t\t\t}\n\t\t} else if (e.key === \"Tab\") {\n\t\t\tclose();\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tfunction handleClickOutside(e: MouseEvent) {\n\t\t\tif (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n\t\t\t\tsetIsOpen(false);\n\t\t\t\tsetFocusedIndex(-1);\n\t\t\t\tonClose?.();\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener(\"click\", handleClickOutside);\n\t\treturn () => document.removeEventListener(\"click\", handleClickOutside);\n\t}, [onClose]);\n\n\tconst iconSize = ICON_SIZE[size];\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={styles.root}\n\t\t\tdata-size={size}\n\t\t\tdata-variant={variant}\n\t\t\tdata-open={isOpen || undefined}\n\t\t\tdata-disabled={disabled || undefined}\n\t\t>\n\t\t\t<button\n\t\t\t\tref={buttonRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.trigger}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\tonClick={toggle}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t>\n\t\t\t\t<span className={styles.triggerText}>{text}</span>\n\t\t\t\t<span className={styles.separator} aria-hidden=\"true\" />\n\t\t\t\t<span className={styles.iconWrapper}>\n\t\t\t\t\t<Icon name=\"chevron-down-outline\" size={iconSize} aria-hidden=\"true\" />\n\t\t\t\t</span>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className={styles.menu} role=\"listbox\" aria-label={`${text} options`}>\n\t\t\t\t\t{menuItems.map((item, index) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\t\tclassName={styles.menuItem}\n\t\t\t\t\t\t\tdata-focused={focusedIndex === index || undefined}\n\t\t\t\t\t\t\tdata-disabled={item.disabled || undefined}\n\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\taria-selected={false}\n\t\t\t\t\t\t\ttabIndex={isOpen ? 0 : -1}\n\t\t\t\t\t\t\tonClick={() => selectItem(item)}\n\t\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\tselectItem(item);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.icon && (\n\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\tname={item.icon}\n\t\t\t\t\t\t\t\t\tsize={iconSize}\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\tclassName={styles.menuIcon}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<span className={styles.menuLabel}>{item.label}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.container {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t}\n\n\t/* ── Trigger wrapper (accessible button) ── */\n\t.triggerWrapper {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tbackground: none;\n\t\tborder: none;\n\t\tpadding: 0;\n\t\tcursor: pointer;\n\t\tcolor: inherit;\n\t}\n\n\t/* ── Menu panel ── */\n\t.menu {\n\t\tposition: absolute;\n\t\ttop: calc(100% + var(--spacing-xs));\n\t\tz-index: var(--z-dropdown);\n\t\tmin-width: 160px;\n\t\tbackground-color: var(--color-surface);\n\t\tborder: 1px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t\tbox-shadow: var(--shadow-lg);\n\t\toverflow: hidden;\n\t\tpadding: var(--spacing-xs) 0;\n\t}\n\n\t/* ── Alignment ── */\n\t.menu[data-align=\"left\"] {\n\t\tleft: 0;\n\t}\n\n\t.menu[data-align=\"right\"] {\n\t\tright: 0;\n\t}\n\n\t/* ── Menu items ── */\n\t.menuItem {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: var(--spacing-sm);\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tbackground: none;\n\t\tborder: none;\n\t\ttext-align: left;\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-normal);\n\t\tcolor: var(--color-text);\n\t\tcursor: pointer;\n\t\tline-height: var(--leading-normal);\n\t\twhite-space: nowrap;\n\t\ttransition: background-color var(--duration-fast) var(--ease-out);\n\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-neutral-100);\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: none;\n\t\t\tbackground-color: var(--color-primary-50);\n\t\t}\n\n\t\t&:disabled {\n\t\t\tcolor: var(--color-neutral-400);\n\t\t\tcursor: not-allowed;\n\t\t}\n\t}\n\n\t/* ── Danger variant ── */\n\t.menuItem[data-danger] {\n\t\tcolor: var(--color-error);\n\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-error-light);\n\t\t}\n\t}\n\n\t/* ── Icon slot ── */\n\t.icon {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tflex-shrink: 0;\n\t\twidth: 16px;\n\t\theight: 16px;\n\t\tcolor: inherit;\n\t}\n}\n","import { type ReactElement, type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport styles from \"./DropdownMenu.module.css\";\n\nexport interface DropdownMenuItem {\n\tid: string;\n\tlabel: string;\n\ticon?: ReactNode;\n\tonClick: () => void;\n\tdanger?: boolean;\n\tdisabled?: boolean;\n}\n\nexport interface DropdownMenuProps {\n\ttrigger: ReactNode;\n\titems: DropdownMenuItem[];\n\talign?: \"left\" | \"right\";\n}\n\nexport function DropdownMenu({ trigger, items, align = \"left\" }: DropdownMenuProps): ReactElement {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst triggerRef = useRef<HTMLButtonElement>(null);\n\tconst itemRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n\n\tconst closeMenu = useCallback(() => {\n\t\tsetIsOpen(false);\n\t\ttriggerRef.current?.focus();\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst handler = (e: MouseEvent) => {\n\t\t\tif (!containerRef.current?.contains(e.target as Node)) setIsOpen(false);\n\t\t};\n\t\tdocument.addEventListener(\"mousedown\", handler);\n\t\treturn () => document.removeEventListener(\"mousedown\", handler);\n\t}, [isOpen]);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst handler = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") closeMenu();\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", handler);\n\t\treturn () => document.removeEventListener(\"keydown\", handler);\n\t}, [isOpen, closeMenu]);\n\n\t// Focus first enabled item when menu opens\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst firstEnabled = items.find((item) => !item.disabled);\n\t\tif (firstEnabled) itemRefs.current.get(firstEnabled.id)?.focus();\n\t}, [isOpen, items]);\n\n\tconst handleMenuKeyDown = (e: React.KeyboardEvent) => {\n\t\tconst enabledItems = items.filter((item) => !item.disabled);\n\t\tconst enabledIds = enabledItems.map((item) => item.id);\n\t\tconst focused = document.activeElement as HTMLButtonElement;\n\t\tconst focusedId = [...itemRefs.current.entries()].find(([, el]) => el === focused)?.[0];\n\t\tconst currentIndex = focusedId ? enabledIds.indexOf(focusedId) : -1;\n\n\t\tlet targetId: string | undefined;\n\t\tif (e.key === \"ArrowDown\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[(currentIndex + 1) % enabledIds.length];\n\t\t} else if (e.key === \"ArrowUp\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[(currentIndex - 1 + enabledIds.length) % enabledIds.length];\n\t\t} else if (e.key === \"Home\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[0];\n\t\t} else if (e.key === \"End\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[enabledIds.length - 1];\n\t\t}\n\n\t\tif (targetId) itemRefs.current.get(targetId)?.focus();\n\t};\n\n\treturn (\n\t\t<div ref={containerRef} className={styles.container}>\n\t\t\t<button\n\t\t\t\tref={triggerRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.triggerWrapper}\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\taria-haspopup=\"menu\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t>\n\t\t\t\t{trigger}\n\t\t\t</button>\n\t\t\t{isOpen && (\n\t\t\t\t<div className={styles.menu} data-align={align} role=\"menu\" onKeyDown={handleMenuKeyDown}>\n\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\t\t\tif (el) itemRefs.current.set(item.id, el);\n\t\t\t\t\t\t\t\telse itemRefs.current.delete(item.id);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t\t\tclassName={styles.menuItem}\n\t\t\t\t\t\t\tdata-danger={item.danger || undefined}\n\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\titem.onClick();\n\t\t\t\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.icon && <span className={styles.icon}>{item.icon}</span>}\n\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .skeleton {\n display: block;\n background: linear-gradient(\n 90deg,\n var(--ds-color-gray-100) 25%,\n var(--ds-color-gray-200) 50%,\n var(--ds-color-gray-100) 75%\n );\n background-size: 200% 100%;\n animation: ds-skeleton-shimmer 1.5s ease-in-out infinite;\n }\n\n .skeleton[data-variant=\"text\"] {\n height: 1em;\n border-radius: var(--ds-radius-sm);\n\n &:not([style*=\"width\"]) {\n width: 100%;\n }\n }\n\n .skeleton[data-variant=\"circular\"] {\n border-radius: var(--ds-radius-circle);\n }\n\n .skeleton[data-variant=\"rectangular\"] {\n border-radius: var(--ds-radius-md);\n }\n}\n","import styles from \"./Skeleton.module.css\";\n\nexport type SkeletonVariant = \"text\" | \"circular\" | \"rectangular\";\n\nexport interface SkeletonProps {\n\twidth?: string | number;\n\theight?: string | number;\n\tvariant?: SkeletonVariant;\n\tclassName?: string;\n}\n\nfunction toCssValue(val: string | number | undefined): string | undefined {\n\tif (val === undefined) return undefined;\n\treturn typeof val === \"number\" ? `${val}px` : val;\n}\n\nexport function Skeleton({ width, height, variant = \"rectangular\", className }: SkeletonProps) {\n\treturn (\n\t\t<span\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={[styles.skeleton, className].filter(Boolean).join(\" \")}\n\t\t\tdata-variant={variant}\n\t\t\tstyle={{\n\t\t\t\twidth: toCssValue(width),\n\t\t\t\theight: toCssValue(height),\n\t\t\t}}\n\t\t/>\n\t);\n}\n","@layer ds-components {\n\t.imagePreview {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tbackground-color: var(--color-neutral-100);\n\t\toverflow: hidden;\n\t\tflex-shrink: 0;\n\t\twidth: var(--ip-width, 40px);\n\t\theight: var(--ip-height, 40px);\n\t\tborder-radius: var(--ip-radius, 8px);\n\n\t\t& img {\n\t\t\tobject-fit: cover;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\t}\n\n\t.hidden {\n\t\topacity: 0;\n\t\tposition: absolute;\n\t\tpointer-events: none;\n\t}\n\n\t.errorIcon {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tcolor: var(--color-neutral-300);\n\t}\n}\n","import { useEffect, useState } from \"react\";\nimport { Icon } from \"../Icon\";\nimport { Skeleton } from \"../Skeleton\";\nimport styles from \"./ImagePreview.module.css\";\n\nexport interface ImagePreviewProps {\n\timageSrc: string;\n\twidth?: number;\n\theight?: number;\n\talt?: string;\n\tborderRadius?: number;\n\tclassName?: string;\n\t\"data-testid\"?: string;\n}\n\ntype LoadState = \"loading\" | \"loaded\" | \"error\";\n\nfunction isBase64Image(src: string): boolean {\n\treturn src.startsWith(\"data:image/\");\n}\n\nfunction isValidUrl(src: string): boolean {\n\ttry {\n\t\tnew URL(src);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function ImagePreview({\n\timageSrc,\n\twidth = 40,\n\theight = 40,\n\talt = \"Image without alt text\",\n\tborderRadius = 8,\n\tclassName,\n\t\"data-testid\": dataTestId,\n}: ImagePreviewProps) {\n\tconst [state, setState] = useState<LoadState>(() => (!imageSrc ? \"error\" : \"loading\"));\n\n\tuseEffect(() => {\n\t\tif (!imageSrc) {\n\t\t\tsetState(\"error\");\n\t\t\treturn;\n\t\t}\n\t\tif (!isBase64Image(imageSrc) && !isValidUrl(imageSrc)) {\n\t\t\tsetState(\"error\");\n\t\t\treturn;\n\t\t}\n\t\tif (isBase64Image(imageSrc)) {\n\t\t\tsetState(\"loaded\");\n\t\t\treturn;\n\t\t}\n\n\t\tsetState(\"loading\");\n\t\tconst img = new Image();\n\t\timg.onload = () => setState(\"loaded\");\n\t\timg.onerror = () => setState(\"error\");\n\t\timg.src = imageSrc;\n\t\treturn () => {\n\t\t\timg.onload = null;\n\t\t\timg.onerror = null;\n\t\t};\n\t}, [imageSrc]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={[styles.imagePreview, className].filter(Boolean).join(\" \")}\n\t\t\tdata-state={state}\n\t\t\tdata-testid={dataTestId}\n\t\t\trole={state === \"error\" ? \"img\" : undefined}\n\t\t\taria-label={state === \"error\" ? \"Image failed to load\" : undefined}\n\t\t\tstyle={\n\t\t\t\t{\n\t\t\t\t\t\"--ip-width\": `${width}px`,\n\t\t\t\t\t\"--ip-height\": `${height}px`,\n\t\t\t\t\t\"--ip-radius\": `${borderRadius}px`,\n\t\t\t\t} as React.CSSProperties\n\t\t\t}\n\t\t>\n\t\t\t{state !== \"error\" && (\n\t\t\t\t<img\n\t\t\t\t\tsrc={imageSrc}\n\t\t\t\t\talt={alt}\n\t\t\t\t\twidth={width}\n\t\t\t\t\theight={height}\n\t\t\t\t\tdecoding=\"async\"\n\t\t\t\t\tloading={isBase64Image(imageSrc) ? undefined : \"lazy\"}\n\t\t\t\t\tclassName={state === \"loading\" ? styles.hidden : undefined}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{state === \"loading\" && <Skeleton width={width} height={height} />}\n\t\t\t{state === \"error\" && (\n\t\t\t\t<span className={styles.errorIcon}>\n\t\t\t\t\t<Icon name=\"error-outline\" size={Math.round(width * 0.6)} aria-hidden=\"true\" />\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.container {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tgap: var(--spacing-2xl);\n\t\twidth: 100%;\n\t}\n\n\t.previewGrid {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(auto-fill, minmax(70px, 1fr));\n\t\tgap: var(--spacing-xl);\n\t\twidth: 100%;\n\t\tjustify-items: center;\n\t}\n\n\t.previewBtn {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tgap: var(--spacing-xs);\n\t\tpadding: var(--spacing-xs) 0.125rem 0.5rem;\n\t\tborder: none;\n\t\tborder-radius: var(--radius-lg);\n\t\tbackground-color: transparent;\n\t\tcursor: pointer;\n\t\ttransition:\n\t\t\tbackground-color var(--duration-fast) var(--ease-out),\n\t\t\ttransform var(--duration-fast) var(--ease-out);\n\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-neutral-100);\n\t\t\ttransform: scale(1.25);\n\t\t\tcolor: var(--color-primary);\n\t\t}\n\t}\n\n\t.zone {\n\t\tborder: 0.125rem dashed var(--color-neutral-300);\n\t\tborder-radius: var(--radius-lg);\n\t\tpadding: var(--spacing-2xl);\n\t\ttext-align: center;\n\t\tcursor: pointer;\n\t\ttransition:\n\t\t\tborder-color var(--duration-fast),\n\t\t\tbackground var(--duration-fast),\n\t\t\topacity var(--duration-fast);\n\t\tbackground: var(--color-neutral-100);\n\t\toutline: none;\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\n\t\t&:hover {\n\t\t\topacity: 0.5;\n\t\t}\n\n\t\t&[data-dragging] {\n\t\t\tborder-color: var(--color-primary);\n\t\t\tbackground: var(--color-primary-50);\n\t\t}\n\n\t\t&[data-processing] {\n\t\t\topacity: 0.6;\n\t\t\tcursor: wait;\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: 2px solid var(--color-primary);\n\t\t\toutline-offset: 2px;\n\t\t}\n\t}\n\n\t.input {\n\t\tdisplay: none;\n\t}\n\n\t.zoneLabel {\n\t\tdisplay: block;\n\t\tmargin-top: var(--spacing-sm);\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-secondary);\n\t}\n\n\t.description {\n\t\tfont-size: var(--text-xs);\n\t\tcolor: var(--color-neutral-400);\n\t\tmargin: 0;\n\t}\n\n\t.fileList {\n\t\tdisplay: flex;\n\t\tflex-flow: row wrap;\n\t\tgap: var(--spacing-sm);\n\t\twidth: 100%;\n\t}\n}\n","export type AllowedFileTypes = \"images\" | \"video\" | \"text\" | \"spreadsheet\";\n\nexport const ALLOWED_TYPES_MAP: Record<AllowedFileTypes, { types: string[]; mimeTypes: string[] }> =\n\t{\n\t\timages: {\n\t\t\ttypes: [\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"heif\"],\n\t\t\tmimeTypes: [\"image/png\", \"image/jpeg\", \"image/gif\", \"image/webp\", \"image/heic\", \"image/heif\"],\n\t\t},\n\t\tvideo: {\n\t\t\ttypes: [\"mp4\", \"mov\", \"webm\"],\n\t\t\tmimeTypes: [\"video/mp4\", \"video/quicktime\", \"video/webm\"],\n\t\t},\n\t\ttext: {\n\t\t\ttypes: [\"csv\"],\n\t\t\tmimeTypes: [\"text/csv\", \"text/plain\"],\n\t\t},\n\t\tspreadsheet: {\n\t\t\ttypes: [\"xls\", \"xlsx\"],\n\t\t\tmimeTypes: [\n\t\t\t\t\"application/vnd.ms-excel\",\n\t\t\t\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n\t\t\t],\n\t\t},\n\t};\n\nexport function getAllowedMimeTypes(fileType: AllowedFileTypes): string {\n\treturn ALLOWED_TYPES_MAP[fileType].mimeTypes.join(\",\");\n}\n\nexport function validateFiles(files: FileList, allowedFileTypes: AllowedFileTypes): File[] {\n\tconst { types, mimeTypes } = ALLOWED_TYPES_MAP[allowedFileTypes];\n\treturn Array.from(files).filter((file) => {\n\t\tconst mimeMatch = mimeTypes.some((m) => file.type === m);\n\t\tconst extMatch = types.some((t) => file.name.toLowerCase().endsWith(`.${t}`));\n\t\treturn mimeMatch || extMatch;\n\t});\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { ImagePreview } from \"../ImagePreview\";\nimport styles from \"./DropZone.module.css\";\nimport type { AllowedFileTypes } from \"./dropZoneConstants\";\nimport { ALLOWED_TYPES_MAP, getAllowedMimeTypes, validateFiles } from \"./dropZoneConstants\";\n\nexport interface FileWithPreview {\n\tid: string;\n\tfile: File;\n\tname: string;\n\tpreview: string;\n}\n\nexport interface DropZoneProps {\n\tlabel?: string;\n\tallowedFileTypes?: AllowedFileTypes;\n\tmultiple?: boolean;\n\tdisplayPreview?: boolean;\n\tdisplayFileList?: boolean;\n\tvalue?: FileWithPreview[] | null;\n\tonDrop: (files: FileList) => void;\n\tonDropError?: (message: string) => void;\n\tonRemove?: (file: FileWithPreview) => void;\n\tonChange?: (files: FileWithPreview[]) => void;\n\tclassName?: string;\n\t\"data-testid\"?: string;\n}\n\nasync function buildPreview(file: File, isImage: boolean): Promise<string> {\n\tif (!isImage) return \"\";\n\treturn new Promise((resolve) => {\n\t\tconst reader = new FileReader();\n\t\treader.onload = (e) => resolve((e.target?.result as string) ?? \"\");\n\t\treader.readAsDataURL(file);\n\t});\n}\n\nasync function buildFileEntries(valid: File[], isImage: boolean): Promise<FileWithPreview[]> {\n\treturn Promise.all(\n\t\tvalid.map(async (file) => ({\n\t\t\tid: crypto.randomUUID(),\n\t\t\tfile,\n\t\t\tname: file.name,\n\t\t\tpreview: await buildPreview(file, isImage),\n\t\t})),\n\t);\n}\n\nexport function DropZone({\n\tlabel = \"Haz click o arrastra un archivo para subir\",\n\tallowedFileTypes = \"images\",\n\tmultiple = true,\n\tdisplayPreview = true,\n\tdisplayFileList = false,\n\tvalue,\n\tonDrop,\n\tonDropError,\n\tonRemove,\n\tonChange,\n\tclassName,\n\t\"data-testid\": dataTestId,\n}: DropZoneProps) {\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst [isDragging, setIsDragging] = useState(false);\n\tconst [isProcessing, setIsProcessing] = useState(false);\n\tconst [internalFiles, setInternalFiles] = useState<FileWithPreview[]>(value ?? []);\n\n\tuseEffect(() => {\n\t\tif (value !== undefined) setInternalFiles(value ?? []);\n\t}, [value]);\n\n\tconst files = value !== undefined ? (value ?? []) : internalFiles;\n\tconst showFileList =\n\t\t(displayFileList || (!displayPreview && !displayFileList)) && files.length > 0;\n\tconst extensions = ALLOWED_TYPES_MAP[allowedFileTypes].types;\n\tconst mimeAccept = getAllowedMimeTypes(allowedFileTypes);\n\tconst isImageType = allowedFileTypes === \"images\";\n\n\tasync function applyFiles(valid: File[], list: FileList) {\n\t\tif (valid.length === 0) {\n\t\t\tonDropError?.(`No files match the allowed types: ${allowedFileTypes}`);\n\t\t\treturn;\n\t\t}\n\t\tconst processed = await buildFileEntries(valid, isImageType);\n\t\tconst next = multiple ? [...files, ...processed] : processed;\n\t\tif (value === undefined) setInternalFiles(next);\n\t\tonChange?.(next);\n\t\tonDrop(list);\n\t}\n\n\tasync function processFiles(list: FileList) {\n\t\tif (isProcessing) return;\n\t\tsetIsProcessing(true);\n\t\ttry {\n\t\t\tawait applyFiles(validateFiles(list, allowedFileTypes), list);\n\t\t} catch (err) {\n\t\t\tonDropError?.(err instanceof Error ? err.message : \"Unknown error\");\n\t\t} finally {\n\t\t\tsetIsProcessing(false);\n\t\t}\n\t}\n\n\tfunction removeFile(index: number) {\n\t\tconst removed = files[index];\n\t\tconst next = files.filter((_, i) => i !== index);\n\t\tif (value === undefined) setInternalFiles(next);\n\t\tonChange?.(next);\n\t\tif (removed) onRemove?.(removed);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={[styles.container, className].filter(Boolean).join(\" \")}\n\t\t\tdata-testid={dataTestId}\n\t\t>\n\t\t\t{displayPreview && files.length > 0 && (\n\t\t\t\t<div className={styles.previewGrid}>\n\t\t\t\t\t{files.map((f, i) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={f.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName={styles.previewBtn}\n\t\t\t\t\t\t\tonClick={() => removeFile(i)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ImagePreview\n\t\t\t\t\t\t\t\timageSrc={f.preview}\n\t\t\t\t\t\t\t\twidth={70}\n\t\t\t\t\t\t\t\theight={70}\n\t\t\t\t\t\t\t\tborderRadius={8}\n\t\t\t\t\t\t\t\talt={f.name}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Icon name=\"delete-outline\" size={14} aria-hidden=\"true\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.zone}\n\t\t\t\tdata-dragging={isDragging ? \"\" : undefined}\n\t\t\t\tdata-processing={isProcessing ? \"\" : undefined}\n\t\t\t\taria-label={label}\n\t\t\t\tonClick={() => inputRef.current?.click()}\n\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") inputRef.current?.click();\n\t\t\t\t}}\n\t\t\t\tonDragOver={(e) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetIsDragging(true);\n\t\t\t\t}}\n\t\t\t\tonDragLeave={(e) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetIsDragging(false);\n\t\t\t\t}}\n\t\t\t\tonDrop={async (e) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetIsDragging(false);\n\t\t\t\t\tconst dropped = e.dataTransfer?.files;\n\t\t\t\t\tif (dropped?.length) await processFiles(dropped);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Icon name=\"cloud-upload-outline\" size={48} aria-hidden=\"true\" />\n\t\t\t\t<input\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\ttype=\"file\"\n\t\t\t\t\tclassName={styles.input}\n\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\taccept={mimeAccept}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tonChange={async (e) => {\n\t\t\t\t\t\tconst list = e.target.files;\n\t\t\t\t\t\tif (list?.length) await processFiles(list);\n\t\t\t\t\t\te.target.value = \"\";\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<strong className={styles.zoneLabel}>{label}</strong>\n\t\t\t\t<p className={styles.description}>({extensions.join(\", \")})</p>\n\t\t\t</button>\n\n\t\t\t{showFileList && (\n\t\t\t\t<div className={styles.fileList}>\n\t\t\t\t\t{files.map((f, i) => (\n\t\t\t\t\t\t<Button key={f.id} variant=\"outline\" size=\"small\" onClick={() => removeFile(i)}>\n\t\t\t\t\t\t\t{f.name}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type DsTheme = \"toteat-react-ds\" | \"angular-legacy\";\n\nexport interface DsProviderProps {\n\ttheme: DsTheme;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\nexport function DsProvider({ theme, children, className }: DsProviderProps) {\n\treturn (\n\t\t<div className={cn(\"tot-ds-root\", className)} data-theme={theme}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n",".wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--ds-space-3);\n padding: var(--ds-space-8) var(--ds-space-4);\n color: var(--ds-color-text-muted);\n}\n\n.message {\n margin: 0;\n font-size: var(--ds-font-size-sm);\n text-align: center;\n}\n","import type React from \"react\";\nimport styles from \"./EmptyState.module.css\";\n\nexport interface EmptyStateProps {\n\tmessage: string;\n\taction?: React.ReactNode;\n\t\"data-testid\"?: string;\n}\n\nexport function EmptyState({\n\tmessage,\n\taction,\n\t\"data-testid\": testId,\n}: EmptyStateProps): React.ReactElement {\n\treturn (\n\t\t<div className={styles.wrapper} data-testid={testId}>\n\t\t\t<p className={styles.message}>{message}</p>\n\t\t\t{action}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .errorContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n padding: var(--ds-space-6);\n }\n\n .errorCard {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--ds-space-3);\n max-width: 480px;\n text-align: center;\n }\n\n .icon {\n color: var(--ds-color-error);\n flex-shrink: 0;\n }\n\n .title {\n font-family: var(--ds-font-family);\n font-size: var(--ds-font-size-xl);\n font-weight: var(--ds-font-weight-bold);\n color: var(--ds-color-text);\n margin: 0;\n }\n\n .message {\n font-size: var(--ds-font-size-base);\n color: var(--ds-color-text-muted);\n line-height: var(--ds-leading-normal);\n margin: 0;\n }\n\n .details {\n width: 100%;\n text-align: left;\n font-size: var(--ds-font-size-sm);\n color: var(--ds-color-text-muted);\n\n summary {\n cursor: pointer;\n font-weight: var(--ds-font-weight-medium);\n padding: var(--ds-space-1) 0;\n\n &:focus-visible {\n outline: 2px solid var(--ds-color-primary);\n outline-offset: 2px;\n }\n }\n }\n\n .stack {\n margin-top: var(--ds-space-2);\n padding: var(--ds-space-3);\n background-color: var(--ds-color-gray-50);\n border: 1px solid var(--ds-color-border);\n border-radius: var(--ds-radius-md);\n font-size: var(--ds-font-size-xs);\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-all;\n color: var(--ds-color-error);\n }\n\n .retryButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--ds-space-2) var(--ds-space-6);\n background-color: var(--ds-color-primary);\n color: var(--ds-color-text-on-primary);\n font-family: var(--ds-font-family);\n font-size: var(--ds-font-size-base);\n font-weight: var(--ds-font-weight-semibold);\n border: none;\n border-radius: var(--ds-radius-md);\n cursor: pointer;\n transition: background-color var(--ds-duration-fast) var(--ds-ease-out);\n margin-top: var(--ds-space-2);\n\n &:hover {\n background-color: var(--ds-color-primary-900);\n }\n\n &:focus-visible {\n outline: 2px solid var(--ds-color-primary);\n outline-offset: 2px;\n }\n }\n}\n","/// <reference types=\"node\" />\nimport type { ErrorInfo, ReactNode } from \"react\";\nimport { Component } from \"react\";\nimport styles from \"./ErrorBoundary.module.css\";\n\nexport interface ErrorBoundaryProps {\n\tchildren: ReactNode;\n\tfallback?: ReactNode | ((error: Error, retry: () => void) => ReactNode);\n\tonError?: (error: Error, info: ErrorInfo) => void;\n}\n\ninterface ErrorBoundaryState {\n\thasError: boolean;\n\terror: Error | null;\n}\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n\tconstructor(props: ErrorBoundaryProps) {\n\t\tsuper(props);\n\t\tthis.state = { hasError: false, error: null };\n\t}\n\n\tstatic getDerivedStateFromError(error: Error): ErrorBoundaryState {\n\t\treturn { hasError: true, error };\n\t}\n\n\tcomponentDidCatch(error: Error, info: ErrorInfo) {\n\t\tthis.props.onError?.(error, info);\n\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\tconsole.error(\"[ErrorBoundary] Uncaught error:\", error, info);\n\t\t}\n\t}\n\n\thandleRetry = () => {\n\t\tthis.setState({ hasError: false, error: null });\n\t};\n\n\trender() {\n\t\tconst { hasError, error } = this.state;\n\t\tconst { children, fallback } = this.props;\n\n\t\tif (hasError && error) {\n\t\t\tif (typeof fallback === \"function\") {\n\t\t\t\treturn fallback(error, this.handleRetry);\n\t\t\t}\n\n\t\t\tif (fallback) {\n\t\t\t\treturn fallback;\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t<div role=\"alert\" className={styles.errorContainer}>\n\t\t\t\t\t<div className={styles.errorCard}>\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"48\"\n\t\t\t\t\t\t\theight=\"48\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\tclassName={styles.icon}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\n\t\t\t\t\t\t\t<path d=\"M12 9v4\" />\n\t\t\t\t\t\t\t<path d=\"M12 17h.01\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t<h2 className={styles.title}>Algo salió mal</h2>\n\t\t\t\t\t\t<p className={styles.message}>\n\t\t\t\t\t\t\tHa ocurrido un error inesperado. Por favor intenta de nuevo.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{process.env.NODE_ENV !== \"production\" && (\n\t\t\t\t\t\t\t<details className={styles.details}>\n\t\t\t\t\t\t\t\t<summary>Detalle del error</summary>\n\t\t\t\t\t\t\t\t<pre className={styles.stack}>{error.message}</pre>\n\t\t\t\t\t\t\t</details>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<button type=\"button\" className={styles.retryButton} onClick={this.handleRetry}>\n\t\t\t\t\t\t\tIntentar de nuevo\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn children;\n\t}\n}\n","@layer ds-components {\n .field {\n display: flex;\n flex-direction: column;\n gap: var(--ds-space-1);\n }\n\n .label {\n font-family: var(--ds-font-family);\n font-size: var(--ds-font-size-sm);\n font-weight: var(--ds-font-weight-semibold);\n line-height: var(--ds-leading-snug);\n color: var(--ds-color-text);\n }\n\n .required {\n color: var(--ds-color-error);\n }\n\n .description {\n font-size: var(--ds-font-size-sm);\n color: var(--ds-color-text-muted);\n line-height: var(--ds-leading-normal);\n margin-top: calc(-1 * var(--ds-space-1));\n }\n\n .error {\n font-size: var(--ds-font-size-xs);\n color: var(--ds-color-error);\n font-weight: var(--ds-font-weight-medium);\n line-height: var(--ds-leading-snug);\n display: flex;\n align-items: center;\n gap: var(--ds-space-1);\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./FormField.module.css\";\n\nexport interface FormFieldProps {\n\tlabel: string;\n\thtmlFor?: string;\n\terror?: string;\n\tdescription?: string;\n\trequired?: boolean;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\nexport function FormField({\n\tlabel,\n\thtmlFor,\n\terror,\n\tdescription,\n\trequired = false,\n\tchildren,\n\tclassName,\n}: FormFieldProps) {\n\tconst errorId = htmlFor ? `${htmlFor}-error` : undefined;\n\tconst descriptionId = htmlFor ? `${htmlFor}-description` : undefined;\n\n\treturn (\n\t\t<div className={[styles.field, className].filter(Boolean).join(\" \")}>\n\t\t\t<label htmlFor={htmlFor} className={styles.label}>\n\t\t\t\t{label}\n\t\t\t\t{required && (\n\t\t\t\t\t<span className={styles.required} aria-hidden=\"true\">\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t*\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</label>\n\n\t\t\t{description && (\n\t\t\t\t<p id={descriptionId} className={styles.description}>\n\t\t\t\t\t{description}\n\t\t\t\t</p>\n\t\t\t)}\n\n\t\t\t{children}\n\n\t\t\t{error && (\n\t\t\t\t<p id={errorId} className={styles.error} role=\"alert\" aria-live=\"polite\">\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.wrapper {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--ds-space-1);\n\t\tflex: 1;\n\t}\n\n\t.error {\n\t\tfont-size: var(--ds-font-size-xs);\n\t\tcolor: var(--ds-color-error);\n\t}\n}\n","import { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport styles from \"./GoogleSignInButton.module.css\";\n\nexport interface GoogleSignInButtonProps {\n\tonSignIn: () => void;\n\tisPending?: boolean;\n\tisError?: boolean;\n\terror?: Error | null;\n}\n\nexport function GoogleSignInButton({\n\tonSignIn,\n\tisPending = false,\n\tisError = false,\n\terror,\n}: GoogleSignInButtonProps) {\n\treturn (\n\t\t<div className={styles.wrapper}>\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"small\"\n\t\t\t\tfullWidth\n\t\t\t\tonClick={onSignIn}\n\t\t\t\tloading={isPending}\n\t\t\t\taria-label=\"Continuar con Google\"\n\t\t\t>\n\t\t\t\t<Icon name=\"google-filled\" size={18} aria-hidden=\"true\" />\n\t\t\t\tGoogle\n\t\t\t</Button>\n\t\t\t{isError && (\n\t\t\t\t<span role=\"alert\" className={styles.error}>\n\t\t\t\t\t{error instanceof Error ? error.message : \"Error al iniciar sesión con Google\"}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .groupedButtons {\n display: flex;\n gap: 0;\n overflow: hidden;\n margin: 0;\n padding: 0;\n border: none;\n width: fit-content;\n\n &[data-full-width] {\n width: 100%;\n overflow-x: auto;\n\n & .button {\n flex: 1;\n flex-shrink: 0;\n min-width: max-content;\n }\n }\n }\n\n .button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-xs);\n border: 1px solid var(--color-neutral-300);\n background-color: var(--ds-color-white);\n color: var(--color-neutral-500);\n font-family: inherit;\n font-weight: 500;\n cursor: pointer;\n white-space: nowrap;\n transition:\n background-color var(--duration-fast) var(--ease-out),\n color var(--duration-fast) var(--ease-out),\n border-color var(--duration-fast) var(--ease-out);\n\n &[data-size=\"small\"] {\n padding: var(--spacing-xs) var(--spacing-md);\n font-size: var(--text-sm);\n min-height: 2.75rem;\n }\n\n &[data-size=\"medium\"] {\n padding: var(--spacing-sm) var(--spacing-lg);\n font-size: var(--text-sm);\n min-height: 3.75rem;\n }\n\n &[data-size=\"large\"] {\n padding: var(--spacing-md) var(--spacing-xl);\n font-size: var(--text-base);\n min-height: 5rem;\n }\n\n &[data-position=\"standalone\"] {\n border-radius: var(--radius-xl);\n }\n\n &[data-position=\"left\"] {\n border-radius: var(--radius-xl) 0 0 var(--radius-xl);\n }\n\n &[data-position=\"center\"] {\n border-radius: 0;\n border-left-width: 0;\n }\n\n &[data-position=\"right\"] {\n border-radius: 0 var(--radius-xl) var(--radius-xl) 0;\n border-left-width: 0;\n }\n\n &[data-selected] {\n background-color: var(--color-secondary);\n color: var(--ds-color-white);\n border-color: var(--color-secondary);\n }\n\n &:hover:not(:disabled):not([data-selected]) {\n background-color: var(--color-neutral-100);\n color: var(--color-secondary);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n &:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: -2px;\n position: relative;\n z-index: 1;\n }\n }\n}\n","import type { HTMLAttributes } from \"react\";\nimport { useState } from \"react\";\nimport type { IconName } from \"../Icon\";\nimport { Icon } from \"../Icon\";\nimport styles from \"./GroupedButtons.module.css\";\n\nexport type GroupedButtonSize = \"small\" | \"medium\" | \"large\";\nexport type GroupPosition = \"standalone\" | \"left\" | \"center\" | \"right\";\n\nexport interface GroupedButtonOption {\n\tvalue: string | number;\n\tlabel: string;\n\tdisabled?: boolean;\n\ticon?: IconName;\n}\n\nexport interface GroupedButtonsProps extends Omit<HTMLAttributes<HTMLFieldSetElement>, \"onChange\"> {\n\tlabel: string;\n\toptions: GroupedButtonOption[];\n\tselectedButton?: string | number;\n\tsize?: GroupedButtonSize;\n\tfullWidth?: boolean;\n\tdisabled?: boolean;\n\tonChange?: (value: string | number) => void;\n}\n\nfunction getGroupPosition(index: number, total: number): GroupPosition {\n\tif (total === 1) return \"standalone\";\n\tif (index === 0) return \"left\";\n\tif (index === total - 1) return \"right\";\n\treturn \"center\";\n}\n\nexport function GroupedButtons({\n\tlabel,\n\toptions,\n\tselectedButton,\n\tsize = \"medium\",\n\tfullWidth = false,\n\tdisabled = false,\n\tonChange,\n\tclassName,\n\t...props\n}: GroupedButtonsProps) {\n\tconst [internalSelected, setInternalSelected] = useState<string | number | undefined>(\n\t\t() => options[0]?.value,\n\t);\n\n\tconst isControlled = selectedButton !== undefined;\n\tconst current = isControlled ? selectedButton : internalSelected;\n\n\tconst handleClick = (value: string | number) => {\n\t\tconst option = options.find((o) => o.value === value);\n\t\tif (disabled || option?.disabled) return;\n\t\tif (!isControlled) setInternalSelected(value);\n\t\tonChange?.(value);\n\t};\n\n\treturn (\n\t\t<fieldset\n\t\t\taria-label={label}\n\t\t\tclassName={[styles.groupedButtons, className].filter(Boolean).join(\" \")}\n\t\t\tdisabled={disabled}\n\t\t\tdata-full-width={fullWidth ? \"\" : undefined}\n\t\t\t{...props}\n\t\t>\n\t\t\t{options.map((option, i) => (\n\t\t\t\t<button\n\t\t\t\t\tkey={option.value}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.button}\n\t\t\t\t\tdata-size={size}\n\t\t\t\t\tdata-position={getGroupPosition(i, options.length)}\n\t\t\t\t\tdata-selected={current === option.value ? \"\" : undefined}\n\t\t\t\t\tdisabled={disabled || option.disabled}\n\t\t\t\t\tonClick={() => handleClick(option.value)}\n\t\t\t\t>\n\t\t\t\t\t{option.icon && <Icon name={option.icon} size={16} />}\n\t\t\t\t\t{option.label}\n\t\t\t\t</button>\n\t\t\t))}\n\t\t</fieldset>\n\t);\n}\n","@layer ds-components {\n\t.header {\n\t\tdisplay: grid;\n\t\tgrid-auto-flow: column;\n\t\talign-items: center;\n\t\tgap: var(--spacing-sm);\n\t\tpadding: var(--spacing-sm) var(--spacing-2xl);\n\t\tborder: 1px solid var(--color-neutral-200);\n\t\tborder-radius: var(--radius-lg);\n\t\tbackground-color: var(--color-neutral-100);\n\n\t\t&[data-space-between] {\n\t\t\tjustify-content: space-between;\n\t\t}\n\t}\n\n\t.item {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\twidth: auto;\n\t\tpadding: 0 var(--spacing-md);\n\t}\n\n\t.title {\n\t\tfont-size: var(--text-base);\n\t\tfont-weight: 800;\n\t\tcolor: var(--color-secondary);\n\t\tmargin: 0;\n\t}\n\n\t.description {\n\t\tfont-size: 0.625rem;\n\t\tline-height: 1;\n\t\tfont-weight: 400;\n\t\tcolor: var(--color-neutral-500);\n\t\tmargin: 0;\n\t}\n}\n","import type { HTMLAttributes } from \"react\";\nimport styles from \"./Header.module.css\";\n\nexport interface HeaderItem {\n\ttitle: string;\n\tdescription?: string;\n}\n\nexport interface HeaderProps extends HTMLAttributes<HTMLElement> {\n\theaders?: HeaderItem[];\n\tspaceBetween?: boolean;\n}\n\nexport function Header({ headers = [], spaceBetween = false, className, ...props }: HeaderProps) {\n\treturn (\n\t\t<section\n\t\t\tclassName={[styles.header, className].filter(Boolean).join(\" \")}\n\t\t\tdata-space-between={spaceBetween ? \"\" : undefined}\n\t\t\t{...props}\n\t\t>\n\t\t\t{headers.map((header) => (\n\t\t\t\t<div key={header.title} className={styles.item}>\n\t\t\t\t\t<p className={styles.title}>{header.title}</p>\n\t\t\t\t\t{header.description && <p className={styles.description}>{header.description}</p>}\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</section>\n\t);\n}\n","import { useMemo } from \"react\";\nimport { DropdownButton, type DropdownMenuItemType } from \"../DropdownButton\";\n\nexport interface LanguageOption {\n\tvalue: string;\n\tlabel: string;\n}\n\nexport interface LanguageSelectorProps {\n\tvalue: string;\n\toptions: LanguageOption[];\n\tonChange: (value: string) => void;\n}\n\nexport function LanguageSelector({ value, options, onChange }: LanguageSelectorProps) {\n\tconst menuItems = useMemo<DropdownMenuItemType[]>(\n\t\t() => options.map(({ value: v, label }) => ({ value: v, label })),\n\t\t[options],\n\t);\n\n\tconst currentLabel = options.find((o) => o.value === value)?.label ?? value;\n\n\treturn (\n\t\t<DropdownButton\n\t\t\ttext={currentLabel}\n\t\t\tmenuItems={menuItems}\n\t\t\tsize=\"small\"\n\t\t\tvariant=\"ghost\"\n\t\t\tonSelect={(item) => onChange(item.value)}\n\t\t/>\n\t);\n}\n","@layer ds-components {\n .logo {\n --logo-icon-max-size: 100px;\n --logo-complete-max-width: 400px;\n --logo-complete-max-height: 100px;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin: 0;\n padding: 0;\n line-height: 0;\n vertical-align: middle;\n transition: opacity var(--duration-fast) ease-in-out;\n\n &:hover {\n opacity: 0.9;\n }\n\n &[data-mode=\"icon\"] {\n max-width: var(--logo-icon-max-size);\n max-height: var(--logo-icon-max-size);\n }\n\n &[data-mode=\"complete\"] {\n max-width: var(--logo-complete-max-width);\n max-height: var(--logo-complete-max-height);\n }\n }\n}\n","import type { HTMLAttributes } from \"react\";\nimport styles from \"./LogoToteat.module.css\";\nimport iconCreamOrange from \"./svg/toteat-isotipo-crema-naranja.svg?raw\";\nimport iconBlackCream from \"./svg/toteat-isotipo-crema-negro.svg?raw\";\nimport iconOriginal from \"./svg/toteat-isotipo-original.svg?raw\";\nimport logoCreamOrange from \"./svg/toteat-logo-crema-naranja.svg?raw\";\nimport logoBlackCream from \"./svg/toteat-logo-negro-crema.svg?raw\";\nimport logoOriginal from \"./svg/toteat-logo-original.svg?raw\";\n\nexport type LogoToteatMode = \"icon\" | \"complete\";\nexport type LogoToteatVariant = \"original\" | \"cream-orange\" | \"black-cream\";\n\nexport interface LogoToteatProps extends HTMLAttributes<HTMLSpanElement> {\n\tmode?: LogoToteatMode;\n\tvariant?: LogoToteatVariant;\n\twidth?: number;\n\theight?: number;\n\talt?: string;\n}\n\nfunction escapeAttr(value: string): string {\n\treturn value.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\");\n}\n\nconst LOGO_MAP: Record<LogoToteatVariant, string> = {\n\toriginal: logoOriginal,\n\t\"cream-orange\": logoCreamOrange,\n\t\"black-cream\": logoBlackCream,\n};\n\nconst ICON_MAP: Record<LogoToteatVariant, string> = {\n\toriginal: iconOriginal,\n\t\"cream-orange\": iconCreamOrange,\n\t\"black-cream\": iconBlackCream,\n};\n\nfunction getDimensions(\n\tmode: LogoToteatMode,\n\twidth?: number,\n\theight?: number,\n): { width: number; height: number } {\n\tif (width !== undefined && height !== undefined) return { width, height };\n\tif (mode === \"icon\") {\n\t\tconst size = width ?? height ?? 44;\n\t\treturn { width: size, height: size };\n\t}\n\tif (width !== undefined) return { width, height: Math.round((width / 317) * 80) };\n\tif (height !== undefined) return { width: Math.round((height / 80) * 317), height };\n\treturn { width: 160, height: 40 };\n}\n\nexport function LogoToteat({\n\tmode = \"complete\",\n\tvariant = \"original\",\n\twidth,\n\theight,\n\talt = \"Logo Toteat\",\n\tclassName,\n\t...props\n}: LogoToteatProps) {\n\tconst rawSvg = mode === \"icon\" ? ICON_MAP[variant] : LOGO_MAP[variant];\n\tconst dims = getDimensions(mode, width, height);\n\t// SVG content is bundled package assets, not user input — safe for dangerouslySetInnerHTML\n\tconst modifiedSvg = rawSvg\n\t\t.replace(/width=\"\\d+\"/, `width=\"${dims.width}\"`)\n\t\t.replace(/height=\"\\d+\"/, `height=\"${dims.height}\"`)\n\t\t.replace(/<svg/, `<svg role=\"img\" aria-label=\"${escapeAttr(alt)}\"`);\n\n\treturn (\n\t\t<span\n\t\t\tclassName={[styles.logo, className].filter(Boolean).join(\" \")}\n\t\t\tdata-mode={mode}\n\t\t\tdata-variant={variant}\n\t\t\t{...props}\n\t\t\t// biome-ignore lint/security/noDangerouslySetInnerHtml: SVG is a bundled package asset, not user content\n\t\t\tdangerouslySetInnerHTML={{ __html: modifiedSvg }}\n\t\t/>\n\t);\n}\n","@layer ds-components {\n\t.multiselect {\n\t\tposition: relative;\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-base);\n\t\tcolor: var(--color-text);\n\t}\n\n\t/* ── Trigger ── */\n\t.trigger {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\talign-items: center;\n\t\tgap: var(--spacing-xs);\n\t\tmin-height: 40px;\n\t\tpadding: var(--spacing-xs) var(--spacing-sm);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: 1.5px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t\tcursor: pointer;\n\t\ttransition:\n\t\t\tborder-color var(--duration-fast) var(--ease-out),\n\t\t\tbox-shadow var(--duration-fast) var(--ease-out);\n\n\t\t&:hover {\n\t\t\tborder-color: var(--color-neutral-400);\n\t\t}\n\t}\n\n\t.multiselect[data-error] .trigger {\n\t\tborder-color: var(--color-error);\n\t}\n\n\t.multiselect[data-disabled] .trigger {\n\t\tbackground-color: var(--color-neutral-50);\n\t\tcolor: var(--color-neutral-400);\n\t\tcursor: not-allowed;\n\t\tpointer-events: none;\n\t}\n\n\t/* ── Placeholder ── */\n\t.placeholder {\n\t\tcolor: var(--color-neutral-400);\n\t\tline-height: var(--leading-normal);\n\t\tpadding: var(--spacing-xs) 0;\n\t}\n\n\t/* ── Tags ── */\n\t.tag {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: var(--spacing-xs);\n\t\tpadding: 2px var(--spacing-sm);\n\t\tbackground-color: var(--color-primary-100);\n\t\tcolor: var(--color-primary-900);\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-medium);\n\t\tborder-radius: var(--radius-full);\n\t\tline-height: var(--leading-tight);\n\t\twhite-space: nowrap;\n\t}\n\n\t.tagRemove {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 14px;\n\t\theight: 14px;\n\t\tpadding: 0;\n\t\tbackground: none;\n\t\tborder: none;\n\t\tborder-radius: var(--radius-circle);\n\t\tcolor: inherit;\n\t\tcursor: pointer;\n\t\tfont-size: var(--text-base);\n\t\tline-height: 1;\n\t\topacity: 0.7;\n\t\ttransition: opacity var(--duration-fast) var(--ease-out);\n\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: 2px solid var(--color-primary);\n\t\t\toutline-offset: 1px;\n\t\t}\n\t}\n\n\t/* ── Dropdown ── */\n\t.dropdown {\n\t\tposition: absolute;\n\t\ttop: calc(100% + var(--spacing-xs));\n\t\tleft: 0;\n\t\tright: 0;\n\t\tz-index: var(--z-dropdown);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: 1.5px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t\tbox-shadow: var(--shadow-lg);\n\t\toverflow: hidden;\n\t\tmax-height: 240px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t}\n\n\t/* ── Options list (scrollable) ── */\n\t.optionsList {\n\t\toverflow-y: auto;\n\t\tflex: 1;\n\t}\n\n\t/* ── Flip upward when not enough space below ── */\n\t.dropdown[data-upward] {\n\t\ttop: auto;\n\t\tbottom: calc(100% + var(--spacing-xs));\n\t}\n\n\t/* ── Search input ── */\n\t.search {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-text);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: none;\n\t\tborder-bottom: 1px solid var(--color-border);\n\t\toutline: none;\n\n\t\t&::placeholder {\n\t\t\tcolor: var(--color-neutral-400);\n\t\t}\n\t}\n\n\t/* ── Option buttons ── */\n\t.option {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\ttext-align: left;\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-text);\n\t\tbackground: none;\n\t\tborder: none;\n\t\tcursor: pointer;\n\t\ttransition: background-color var(--duration-fast) var(--ease-out);\n\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-neutral-100);\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: none;\n\t\t\tbackground-color: var(--color-primary-50);\n\t\t}\n\t}\n\n\t/* ── No results ── */\n\t.noResults {\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-text-muted);\n\t\ttext-align: center;\n\t}\n}\n","import { type ReactElement, useCallback, useEffect, useRef, useState } from \"react\";\nimport styles from \"./Multiselect.module.css\";\n\nexport interface MultiselectOption {\n\tvalue: string;\n\tlabel: string;\n}\n\nexport interface MultiselectProps {\n\toptions: MultiselectOption[];\n\tvalue: string[];\n\tonChange: (values: string[]) => void;\n\tplaceholder?: string;\n\tsearchPlaceholder?: string;\n\tnoResultsText?: string;\n\tremoveLabel?: string;\n\tdisabled?: boolean;\n\terror?: boolean;\n}\n\nconst DROPDOWN_MAX_HEIGHT = 240;\n\nexport function Multiselect({\n\toptions,\n\tvalue,\n\tonChange,\n\tplaceholder = \"Seleccionar...\",\n\tsearchPlaceholder = \"Buscar...\",\n\tnoResultsText = \"Sin resultados\",\n\tremoveLabel = \"Eliminar\",\n\tdisabled,\n\terror,\n}: MultiselectProps): ReactElement {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [openUpward, setOpenUpward] = useState(false);\n\tconst [search, setSearch] = useState(\"\");\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst triggerRef = useRef<HTMLButtonElement>(null);\n\n\tconst selectedOptions = options.filter((o) => value.includes(o.value));\n\tconst filteredOptions = options.filter(\n\t\t(o) => !value.includes(o.value) && o.label.toLowerCase().includes(search.toLowerCase()),\n\t);\n\n\tconst closeDropdown = useCallback(() => {\n\t\tsetIsOpen(false);\n\t\ttriggerRef.current?.focus();\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst handler = (e: MouseEvent) => {\n\t\t\tif (!containerRef.current?.contains(e.target as Node)) closeDropdown();\n\t\t};\n\t\tdocument.addEventListener(\"mousedown\", handler);\n\t\treturn () => document.removeEventListener(\"mousedown\", handler);\n\t}, [isOpen, closeDropdown]);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst handler = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") closeDropdown();\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", handler);\n\t\treturn () => document.removeEventListener(\"keydown\", handler);\n\t}, [isOpen, closeDropdown]);\n\n\t// Determine flip direction when opening\n\tuseEffect(() => {\n\t\tif (!isOpen || !containerRef.current) return;\n\t\tconst rect = containerRef.current.getBoundingClientRect();\n\t\tconst spaceBelow = window.innerHeight - rect.bottom;\n\t\tsetOpenUpward(spaceBelow < DROPDOWN_MAX_HEIGHT + 8);\n\t}, [isOpen]);\n\n\tconst addValue = (v: string) => onChange([...value, v]);\n\tconst removeValue = (v: string) => onChange(value.filter((x) => x !== v));\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={styles.multiselect}\n\t\t\tdata-error={error || undefined}\n\t\t\tdata-disabled={disabled || undefined}\n\t\t>\n\t\t\t<button\n\t\t\t\tref={triggerRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.trigger}\n\t\t\t\tonClick={() => !disabled && setIsOpen((prev) => !prev)}\n\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\tdisabled={disabled}\n\t\t\t>\n\t\t\t\t{selectedOptions.length === 0 && <span className={styles.placeholder}>{placeholder}</span>}\n\t\t\t\t{selectedOptions.map((opt) => (\n\t\t\t\t\t<span key={opt.value} className={styles.tag}>\n\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName={styles.tagRemove}\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tremoveValue(opt.value);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-label={`${removeLabel} ${opt.label}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t×\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</span>\n\t\t\t\t))}\n\t\t\t</button>\n\t\t\t{isOpen && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={styles.dropdown}\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-multiselectable=\"true\"\n\t\t\t\t\tdata-upward={openUpward || undefined}\n\t\t\t\t>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclassName={styles.search}\n\t\t\t\t\t\tplaceholder={searchPlaceholder}\n\t\t\t\t\t\taria-label={searchPlaceholder}\n\t\t\t\t\t\tvalue={search}\n\t\t\t\t\t\tonChange={(e) => setSearch(e.target.value)}\n\t\t\t\t\t\t// biome-ignore lint/a11y/noAutofocus: search input needs focus when dropdown opens\n\t\t\t\t\t\tautoFocus\n\t\t\t\t\t/>\n\t\t\t\t\t<div className={styles.optionsList}>\n\t\t\t\t\t\t{filteredOptions.map((opt) => (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tkey={opt.value}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\taria-selected={value.includes(opt.value)}\n\t\t\t\t\t\t\t\tclassName={styles.option}\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\taddValue(opt.value);\n\t\t\t\t\t\t\t\t\tsetSearch(\"\");\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{filteredOptions.length === 0 && (\n\t\t\t\t\t\t\t<div className={styles.noResults}>{noResultsText}</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ang-components {\n .navbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: var(--ds-ang-navbar-height);\n min-height: var(--ds-ang-navbar-height);\n max-height: var(--ds-ang-navbar-height);\n background-color: var(--ds-ang-secondary);\n position: relative;\n z-index: 10;\n padding: 0;\n user-select: none;\n }\n\n .navLeft {\n position: absolute;\n left: 0;\n top: 0;\n height: var(--ds-ang-navbar-height);\n display: flex;\n align-items: center;\n gap: var(--ds-ang-space-4);\n padding-left: var(--ds-ang-space-8);\n }\n\n .menuButton {\n display: flex;\n align-items: center;\n justify-content: center;\n background: none;\n border: none;\n cursor: pointer;\n padding: var(--ds-ang-space-8);\n color: var(--ds-ang-neutral-0);\n min-width: var(--ds-ang-min-touch-target);\n min-height: var(--ds-ang-min-touch-target);\n }\n\n @media (min-width: 781px) {\n .menuButton {\n display: none;\n }\n }\n\n .menuButton:focus-visible {\n outline: var(--ds-ang-focus-width) solid var(--ds-ang-focus-color);\n outline-offset: var(--ds-ang-focus-offset);\n border-radius: var(--ds-ang-radius-sm);\n }\n\n .menuIcon {\n display: block;\n width: 18px;\n height: 2px;\n background-color: var(--ds-ang-neutral-0);\n position: relative;\n }\n\n .menuIcon::before,\n .menuIcon::after {\n content: \"\";\n display: block;\n width: 18px;\n height: 2px;\n background-color: var(--ds-ang-neutral-0);\n position: absolute;\n left: 0;\n }\n\n .menuIcon::before {\n top: -6px;\n }\n\n .menuIcon::after {\n top: 6px;\n }\n\n .spinner {\n position: absolute;\n left: 55px;\n top: 10px;\n }\n\n .navCenter {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--ds-ang-space-8);\n height: var(--ds-ang-navbar-height);\n padding: 0 50px;\n flex: 1;\n }\n\n .logoBrand {\n display: flex;\n align-items: center;\n cursor: pointer;\n height: var(--ds-ang-navbar-height);\n background: none;\n border: none;\n padding: 0;\n }\n\n .logoBrand:focus-visible {\n outline: var(--ds-ang-focus-width) solid var(--ds-ang-focus-color);\n outline-offset: var(--ds-ang-focus-offset);\n border-radius: var(--ds-ang-radius-sm);\n }\n\n .logo {\n width: 83px;\n height: 21px;\n }\n\n @media (max-width: 780px) {\n .logo {\n width: 78px;\n height: 16px;\n }\n }\n\n .restaurantName {\n font-family: var(--ds-ang-font-family);\n font-size: var(--ds-ang-font-size-menu);\n color: var(--ds-ang-neutral-0);\n cursor: pointer;\n }\n\n .navRight {\n position: absolute;\n right: 0;\n top: 0;\n height: var(--ds-ang-navbar-height);\n display: flex;\n align-items: center;\n padding-right: var(--ds-ang-space-8);\n }\n\n .rightButton {\n display: flex;\n align-items: center;\n justify-content: center;\n background: none;\n border: none;\n cursor: pointer;\n padding: var(--ds-ang-space-8);\n min-width: var(--ds-ang-min-touch-target);\n min-height: var(--ds-ang-min-touch-target);\n }\n\n .rightButton:focus-visible {\n outline: var(--ds-ang-focus-width) solid var(--ds-ang-focus-color);\n outline-offset: var(--ds-ang-focus-offset);\n border-radius: var(--ds-ang-radius-sm);\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./NavBar.module.css\";\n\nexport interface NavBarProps {\n\trestaurantName: string;\n\tonMenuToggle: () => void;\n\tonLogoClick: () => void;\n\tonRightToggle: () => void;\n\tisLoading?: boolean;\n\tisPinLocked?: boolean;\n\trightSlot?: ReactNode;\n}\n\nexport function NavBar({\n\trestaurantName,\n\tonMenuToggle,\n\tonLogoClick,\n\tonRightToggle,\n\tisLoading = false,\n\tisPinLocked = false,\n\trightSlot,\n}: NavBarProps) {\n\tif (isPinLocked) return null;\n\n\treturn (\n\t\t<header className={styles.navbar}>\n\t\t\t<div className={styles.navLeft}>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.menuButton}\n\t\t\t\t\tonClick={onMenuToggle}\n\t\t\t\t\taria-label=\"Abrir menú\"\n\t\t\t\t>\n\t\t\t\t\t<span className={styles.menuIcon} aria-hidden=\"true\" />\n\t\t\t\t</button>\n\t\t\t\t{isLoading && (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc=\"/assets/angular/dsSpinner.svg\"\n\t\t\t\t\t\talt=\"Cargando\"\n\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\theight={20}\n\t\t\t\t\t\tclassName={styles.spinner}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t<div className={styles.navCenter}>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.logoBrand}\n\t\t\t\t\tonClick={onLogoClick}\n\t\t\t\t\taria-label=\"Ir al inicio\"\n\t\t\t\t>\n\t\t\t\t\t<img src=\"/assets/angular/dsLogo.svg\" alt=\"Toteat\" className={styles.logo} />\n\t\t\t\t</button>\n\t\t\t\t<span className={styles.restaurantName}>{restaurantName}</span>\n\t\t\t</div>\n\n\t\t\t<div className={styles.navRight}>\n\t\t\t\t{rightSlot}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.rightButton}\n\t\t\t\t\tonClick={onRightToggle}\n\t\t\t\t\taria-label=\"Pantalla completa\"\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc=\"/assets/angular/dsIconLogo.svg\"\n\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\twidth={24}\n\t\t\t\t\t\theight={24}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</header>\n\t);\n}\n","@layer ds-components {\n .overlay {\n position: fixed;\n inset: 0;\n display: flex;\n width: 100vw;\n height: 100vh;\n padding: clamp(1.5rem, 4vw, 3rem);\n z-index: var(--overlay-z-index, 1200);\n justify-content: center;\n animation: overlay-fade-in 200ms ease-in-out;\n\n &[data-blur] {\n backdrop-filter: blur(0.75rem);\n }\n\n &[data-placement=\"top\"] { align-items: flex-start; }\n &[data-placement=\"center\"] { align-items: center; }\n &[data-placement=\"bottom\"] { align-items: flex-end; }\n }\n\n .backdrop {\n position: absolute;\n inset: 0;\n background-color: color-mix(in srgb, var(--color-secondary) 60%, transparent);\n border: none;\n cursor: default;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .content {\n position: relative;\n z-index: 1;\n width: min(100%, 64rem);\n display: flex;\n justify-content: center;\n pointer-events: none;\n\n & > * {\n pointer-events: auto;\n width: 100%;\n }\n }\n\n @keyframes overlay-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .overlay { animation: none; }\n }\n}\n","import type { ReactNode } from \"react\";\nimport { useCallback, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport styles from \"./Overlay.module.css\";\n\nexport type OverlayPlacement = \"top\" | \"center\" | \"bottom\";\n\nexport interface OverlayProps {\n\tvisible?: boolean;\n\tonClose: () => void;\n\tchildren: ReactNode;\n\tdismissible?: boolean;\n\tcloseOnBackdrop?: boolean;\n\tcloseOnEsc?: boolean;\n\tlockScroll?: boolean;\n\tblur?: boolean;\n\tplacement?: OverlayPlacement;\n\tzIndex?: number;\n\trole?: \"presentation\" | \"dialog\";\n\t\"aria-label\"?: string;\n\tclassName?: string;\n\t\"data-testid\"?: string;\n}\n\nexport function Overlay({\n\tvisible = false,\n\tonClose,\n\tchildren,\n\tdismissible = true,\n\tcloseOnBackdrop = true,\n\tcloseOnEsc = true,\n\tlockScroll = true,\n\tblur = false,\n\tplacement = \"center\",\n\tzIndex = 1200,\n\trole = \"presentation\",\n\t\"aria-label\": ariaLabel,\n\tclassName,\n\t\"data-testid\": dataTestId,\n}: OverlayProps) {\n\tconst handleClose = useCallback(() => {\n\t\tif (dismissible) onClose();\n\t}, [dismissible, onClose]);\n\n\tuseEffect(() => {\n\t\tif (!visible || !lockScroll) return;\n\t\tdocument.body.style.overflow = \"hidden\";\n\t\treturn () => {\n\t\t\tdocument.body.style.overflow = \"\";\n\t\t};\n\t}, [visible, lockScroll]);\n\n\tuseEffect(() => {\n\t\tif (!visible || !closeOnEsc) return;\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") handleClose();\n\t\t};\n\t\twindow.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => window.removeEventListener(\"keydown\", handleKeyDown);\n\t}, [visible, closeOnEsc, handleClose]);\n\n\tif (!visible || typeof document === \"undefined\") return null;\n\n\treturn createPortal(\n\t\t<div\n\t\t\tdata-testid={dataTestId}\n\t\t\tclassName={[styles.overlay, className].filter(Boolean).join(\" \")}\n\t\t\tdata-blur={blur ? \"\" : undefined}\n\t\t\tdata-placement={placement}\n\t\t\tstyle={{ \"--overlay-z-index\": String(zIndex) } as React.CSSProperties}\n\t\t\trole={role}\n\t\t\taria-label={ariaLabel}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.backdrop}\n\t\t\t\tdata-backdrop=\"\"\n\t\t\t\tonClick={closeOnBackdrop ? handleClose : undefined}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\ttabIndex={-1}\n\t\t\t/>\n\t\t\t<div className={styles.content}>{children}</div>\n\t\t</div>,\n\t\tdocument.body,\n\t);\n}\n","@layer ds-components {\n .overlayMessage {\n background-color: var(--ds-color-white);\n border-radius: var(--radius-xl);\n padding: clamp(1.5rem, 4vw, 2.75rem);\n box-shadow: 0 35px 100px rgba(0, 0, 0, 0.2);\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n width: 100%;\n max-width: var(--om-max-width, 400px);\n\n &[data-standalone] {\n box-shadow: none;\n border: 1px solid var(--color-neutral-200);\n min-height: 16.625rem;\n }\n }\n\n .header {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n gap: var(--spacing-md);\n position: relative;\n padding-inline: var(--spacing-sm);\n }\n\n .iconWrap {\n width: 3.5rem;\n height: 3.5rem;\n display: grid;\n place-items: center;\n }\n\n .iconColor {\n display: contents;\n color: var(--om-icon-color);\n }\n\n .headline {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-md);\n align-items: center;\n }\n\n .eyebrow {\n font-size: var(--text-xs);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--color-neutral-400);\n font-weight: 600;\n margin: 0;\n }\n\n .title {\n font-size: clamp(var(--text-lg), 2vw, var(--text-xl));\n line-height: 1.2;\n font-weight: 600;\n color: var(--color-secondary);\n margin: var(--spacing-xl) 0 0;\n }\n\n .closeBtn {\n width: 2.5rem;\n height: 2.5rem;\n border-radius: var(--radius-circle);\n border: 1px solid transparent;\n background: transparent;\n color: var(--color-neutral-400);\n display: grid;\n place-items: center;\n cursor: pointer;\n position: absolute;\n top: 0;\n right: 0;\n padding: 0;\n transition:\n border-color var(--duration-fast) var(--ease-out),\n color var(--duration-fast) var(--ease-out);\n\n &:hover {\n color: var(--color-secondary);\n }\n\n &:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n }\n }\n\n .body {\n font-size: var(--text-base);\n color: var(--color-neutral-500);\n line-height: 1.5;\n text-align: center;\n }\n\n .actions {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-md);\n width: 100%;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { useId } from \"react\";\nimport { Button } from \"../Button\";\nimport type { IconNameType as IconName } from \"../Icon\";\nimport { Icon } from \"../Icon\";\nimport type { OverlayPlacement } from \"../Overlay\";\nimport { Overlay } from \"../Overlay\";\nimport styles from \"./OverlayMessage.module.css\";\n\nexport type OverlayMessageStatus = \"success\" | \"info\" | \"warning\" | \"error\";\n\nconst STATUS_ICON_MAP: Record<OverlayMessageStatus, IconName> = {\n\tsuccess: \"success-outline\",\n\tinfo: \"info-outline\",\n\twarning: \"exclamation-outline\",\n\terror: \"error-outline\",\n};\n\nconst STATUS_COLOR_VAR_MAP: Record<OverlayMessageStatus, string> = {\n\tsuccess: \"var(--ds-color-success)\",\n\tinfo: \"var(--ds-color-info)\",\n\twarning: \"var(--ds-color-warning)\",\n\terror: \"var(--ds-color-primary)\",\n};\n\nexport interface OverlayMessageProps {\n\tvisible?: boolean;\n\tonClose: () => void;\n\ttitle: string;\n\teyebrow?: string;\n\tchildren?: ReactNode;\n\tstatus?: OverlayMessageStatus;\n\ticonName?: IconName;\n\ticonSize?: number;\n\tdismissible?: boolean;\n\tshowCloseButton?: boolean;\n\tcloseButtonLabel?: string;\n\tcloseOnBackdrop?: boolean;\n\tcloseOnEsc?: boolean;\n\tlockScroll?: boolean;\n\tzIndex?: number;\n\tblur?: boolean;\n\tplacement?: OverlayPlacement;\n\t\"aria-label\"?: string;\n\tprimaryButtonLabel?: string;\n\tsecondaryButtonLabel?: string;\n\tloadingPrimary?: boolean;\n\tloadingSecondary?: boolean;\n\tmaxWidth?: number;\n\tstandalone?: boolean;\n\tonPrimaryClick?: () => void;\n\tonSecondaryClick?: () => void;\n\t\"data-testid\"?: string;\n}\n\ninterface CardProps {\n\ttitle: string;\n\teyebrow?: string;\n\tchildren?: ReactNode;\n\tstatus?: OverlayMessageStatus;\n\ticonName?: IconName;\n\ticonSize?: number;\n\tdismissible?: boolean;\n\tshowCloseButton?: boolean;\n\tcloseButtonLabel?: string;\n\tprimaryButtonLabel?: string;\n\tsecondaryButtonLabel?: string;\n\tloadingPrimary?: boolean;\n\tloadingSecondary?: boolean;\n\tmaxWidth?: number;\n\tstandalone?: boolean;\n\tonClose: () => void;\n\tonPrimaryClick?: () => void;\n\tonSecondaryClick?: () => void;\n\t\"data-testid\"?: string;\n}\n\nfunction OverlayMessageCard({\n\ttitle,\n\teyebrow,\n\tchildren,\n\tstatus = \"success\",\n\ticonName,\n\ticonSize = 44,\n\tdismissible = true,\n\tshowCloseButton = true,\n\tcloseButtonLabel = \"Close overlay message\",\n\tprimaryButtonLabel,\n\tsecondaryButtonLabel,\n\tloadingPrimary = false,\n\tloadingSecondary = false,\n\tmaxWidth = 400,\n\tstandalone = false,\n\tonClose,\n\tonPrimaryClick,\n\tonSecondaryClick,\n\t\"data-testid\": dataTestId,\n}: CardProps) {\n\tconst titleId = useId();\n\tconst bodyId = useId();\n\tconst resolvedIcon = iconName ?? STATUS_ICON_MAP[status];\n\tconst iconColor = STATUS_COLOR_VAR_MAP[status];\n\tconst hasBody = Boolean(children);\n\tconst hasActions = Boolean(primaryButtonLabel) || Boolean(secondaryButtonLabel);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.overlayMessage}\n\t\t\tdata-status={status}\n\t\t\tdata-standalone={standalone ? \"\" : undefined}\n\t\t\trole={standalone ? \"region\" : \"alertdialog\"}\n\t\t\taria-modal={standalone ? undefined : \"true\"}\n\t\t\taria-labelledby={titleId}\n\t\t\taria-describedby={hasBody ? bodyId : undefined}\n\t\t\tstyle={{ \"--om-max-width\": `${maxWidth}px` } as React.CSSProperties}\n\t\t\tdata-testid={dataTestId}\n\t\t>\n\t\t\t<header className={styles.header}>\n\t\t\t\t<div className={styles.iconWrap} aria-hidden=\"true\">\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={styles.iconColor}\n\t\t\t\t\t\tstyle={{ \"--om-icon-color\": iconColor } as React.CSSProperties}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name={resolvedIcon} size={iconSize} />\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div className={styles.headline}>\n\t\t\t\t\t{eyebrow && <p className={styles.eyebrow}>{eyebrow}</p>}\n\t\t\t\t\t<h2 className={styles.title} id={titleId}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h2>\n\t\t\t\t</div>\n\t\t\t\t{dismissible && showCloseButton && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.closeBtn}\n\t\t\t\t\t\taria-label={closeButtonLabel}\n\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"close-outline\" size={20} />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</header>\n\t\t\t{hasBody && (\n\t\t\t\t<div className={styles.body} id={bodyId}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{hasActions && (\n\t\t\t\t<footer className={styles.actions}>\n\t\t\t\t\t{secondaryButtonLabel && (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tloading={loadingSecondary}\n\t\t\t\t\t\t\tonClick={onSecondaryClick}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{secondaryButtonLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t{primaryButtonLabel && (\n\t\t\t\t\t\t<Button variant=\"primary\" fullWidth loading={loadingPrimary} onClick={onPrimaryClick}>\n\t\t\t\t\t\t\t{primaryButtonLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</footer>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport function OverlayMessage({\n\tvisible = false,\n\tonClose,\n\tdismissible = true,\n\tcloseOnBackdrop = true,\n\tcloseOnEsc = true,\n\tlockScroll = true,\n\tzIndex = 1200,\n\tblur = false,\n\tplacement = \"center\",\n\t\"aria-label\": ariaLabel,\n\tstandalone = false,\n\t\"data-testid\": dataTestId,\n\t...cardProps\n}: OverlayMessageProps) {\n\tif (!visible) return null;\n\n\tif (standalone) {\n\t\treturn (\n\t\t\t<OverlayMessageCard\n\t\t\t\t{...cardProps}\n\t\t\t\tstandalone\n\t\t\t\tdismissible={dismissible}\n\t\t\t\tonClose={onClose}\n\t\t\t\tdata-testid={dataTestId}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Overlay\n\t\t\tvisible={visible}\n\t\t\tonClose={onClose}\n\t\t\tdismissible={dismissible}\n\t\t\tcloseOnBackdrop={closeOnBackdrop}\n\t\t\tcloseOnEsc={closeOnEsc}\n\t\t\tlockScroll={lockScroll}\n\t\t\tzIndex={zIndex}\n\t\t\tblur={blur}\n\t\t\tplacement={placement}\n\t\t\taria-label={ariaLabel}\n\t\t>\n\t\t\t<OverlayMessageCard\n\t\t\t\t{...cardProps}\n\t\t\t\tdismissible={dismissible}\n\t\t\t\tonClose={onClose}\n\t\t\t\tdata-testid={dataTestId}\n\t\t\t/>\n\t\t</Overlay>\n\t);\n}\n","@layer app {\n /*\n * Grid overlap pattern — sits in the same 1/1 cell as siblings.\n * stretch fills the cell without position: absolute, so the logo div\n * (later in DOM) naturally paints on top. No z-index needed.\n */\n .canvas {\n grid-area: 1 / 1;\n align-self: stretch;\n justify-self: stretch;\n width: 100%;\n height: 100%;\n pointer-events: none;\n }\n}\n","import { useEffect, useRef } from \"react\";\nimport styles from \"./BreathingDotsCanvas.module.css\";\n\n// ── Shaders ────────────────────────────────────────────────────────────────\nconst VERT = `#version 300 es\nin vec2 a_pos;\nvoid main() { gl_Position = vec4(a_pos, 0.0, 1.0); }`;\n\n/**\n * Breathing Dots — inspired by the Codrops / Dave Whyte technique.\n *\n * Each dot in a hex-offset grid has its position scaled radially by a smooth\n * square wave whose phase is delayed by distance from the screen centre.\n * An 8-fold cosine term on the distance metric creates the flower-like\n * distortion on the wave-front edge.\n *\n * wave(t, dist) = (2A/π) · atan(sin(2π·t·f) / k)\n * phase = u_time − dist / SPEED\n * scale = wave + BASE_SCALE\n * animPos = origPos × scale\n *\n * We evaluate a 5×5 neighbourhood around each fragment so dots that have\n * scaled away from their home cell are still drawn.\n */\nconst FRAG = `#version 300 es\nprecision highp float;\n\nuniform float u_time;\nuniform vec2 u_res;\nout vec4 fragColor;\n\n#define PI 3.14159265359\n#define CELL 18.0 /* px per grid cell */\n#define RADIUS 2.1 /* dot radius in px */\n#define SPEED 25.0 /* wave propagation */\n#define PERIOD 3.8 /* seconds per cycle */\n#define AMP 0.40 /* wave amplitude */\n#define BASE 1.30 /* resting scale */\n\nfloat swave(float t, float k) {\n return (2.0 * AMP / PI) * atan(sin(2.0 * PI * t / PERIOD) / k);\n}\n\nvoid main() {\n vec2 p = gl_FragCoord.xy;\n vec2 center = u_res * 0.5;\n vec2 gridP = p / CELL;\n\n float alpha = 0.0;\n\n for (int dy = -2; dy <= 2; dy++) {\n for (int dx = -2; dx <= 2; dx++) {\n /* grid cell index of this neighbour */\n vec2 cell = floor(gridP) + vec2(float(dx), float(dy));\n\n /* hex stagger: odd x-columns shift down half a cell */\n float hexY = mod(cell.x, 2.0) * 0.5;\n\n /* dot centre in grid units relative to screen centre */\n vec2 origGU = cell + vec2(0.5, 0.5 + hexY) - center / CELL;\n\n /* distance with 8-fold angular symmetry → petal wave-front */\n float d8 = length(origGU) + 0.5 * cos(8.0 * atan(origGU.y, origGU.x));\n\n /* smooth-square-wave breathing */\n float k = 0.15 + 0.2 * abs(d8) / 72.0;\n float wave = swave(u_time - d8 / SPEED, k);\n float scale = wave + BASE;\n\n /* animated dot centre in pixel space */\n vec2 animPx = origGU * scale * CELL + center;\n\n /* soft circle SDF */\n float dist = length(p - animPx);\n float a = 1.0 - smoothstep(RADIUS - 0.6, RADIUS + 0.6, dist);\n alpha = max(alpha, a);\n }\n }\n\n /* primary colour #ff4235 at low opacity — sits on frosted-glass overlay */\n fragColor = vec4(1.0, 0.259, 0.208, alpha * 0.28);\n}`;\n\n// ── WebGL helpers ──────────────────────────────────────────────────────────\nfunction buildProgram(gl: WebGL2RenderingContext): WebGLProgram {\n\tconst compile = (type: number, src: string) => {\n\t\t// biome-ignore lint/style/noNonNullAssertion: WebGL createShader returns null only on driver failure, which aborts rendering anyway\n\t\tconst s = gl.createShader(type)!;\n\t\tgl.shaderSource(s, src);\n\t\tgl.compileShader(s);\n\t\treturn s;\n\t};\n\t// biome-ignore lint/style/noNonNullAssertion: WebGL createProgram returns null only on driver failure, which aborts rendering anyway\n\tconst prog = gl.createProgram()!;\n\tgl.attachShader(prog, compile(gl.VERTEX_SHADER, VERT));\n\tgl.attachShader(prog, compile(gl.FRAGMENT_SHADER, FRAG));\n\tgl.linkProgram(prog);\n\treturn prog;\n}\n\n// ── Component ──────────────────────────────────────────────────────────────\ninterface BreathingDotsCanvasProps {\n\tactive: boolean;\n}\n\nexport function BreathingDotsCanvas({ active }: BreathingDotsCanvasProps) {\n\tconst canvasRef = useRef<HTMLCanvasElement>(null);\n\n\tuseEffect(() => {\n\t\tif (!active || !canvasRef.current) return;\n\t\tif (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) return;\n\n\t\tconst canvas = canvasRef.current;\n\t\tconst gl = canvas.getContext(\"webgl2\", { alpha: true, premultipliedAlpha: false });\n\t\tif (!gl) return;\n\n\t\tconst resize = () => {\n\t\t\tcanvas.width = window.innerWidth;\n\t\t\tcanvas.height = window.innerHeight;\n\t\t\tgl.viewport(0, 0, canvas.width, canvas.height);\n\t\t\tgl.uniform2f(uRes, canvas.width, canvas.height);\n\t\t};\n\n\t\tconst prog = buildProgram(gl);\n\t\t// biome-ignore lint/correctness/useHookAtTopLevel: gl.useProgram is a WebGL method, not a React hook\n\t\tgl.useProgram(prog);\n\n\t\t// Fullscreen quad\n\t\tconst buf = gl.createBuffer();\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, buf);\n\t\tgl.bufferData(\n\t\t\tgl.ARRAY_BUFFER,\n\t\t\tnew Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]),\n\t\t\tgl.STATIC_DRAW,\n\t\t);\n\t\tconst aPos = gl.getAttribLocation(prog, \"a_pos\");\n\t\tgl.enableVertexAttribArray(aPos);\n\t\tgl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 0, 0);\n\n\t\tconst uTime = gl.getUniformLocation(prog, \"u_time\");\n\t\tconst uRes = gl.getUniformLocation(prog, \"u_res\");\n\t\tgl.enable(gl.BLEND);\n\t\tgl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n\t\tresize();\n\t\twindow.addEventListener(\"resize\", resize);\n\n\t\tconst start = performance.now();\n\t\tlet raf: number;\n\n\t\tconst draw = () => {\n\t\t\tgl.uniform1f(uTime, (performance.now() - start) / 1000);\n\t\t\tgl.clearColor(0, 0, 0, 0);\n\t\t\tgl.clear(gl.COLOR_BUFFER_BIT);\n\t\t\tgl.drawArrays(gl.TRIANGLES, 0, 6);\n\t\t\traf = requestAnimationFrame(draw);\n\t\t};\n\t\traf = requestAnimationFrame(draw);\n\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(raf);\n\t\t\twindow.removeEventListener(\"resize\", resize);\n\t\t};\n\t}, [active]);\n\n\t// biome-ignore lint/a11y/noAriaHiddenOnFocusable: canvas is purely decorative and not keyboard-focusable\n\treturn <canvas ref={canvasRef} className={styles.canvas} aria-hidden=\"true\" />;\n}\n","@layer app {\n /* ── Overlay shell — backdrop + WebGL canvas ──────────────────────── */\n .overlay {\n position: fixed;\n inset: 0;\n z-index: var(--ds-z-modal);\n\n /* Starting state */\n opacity: 0;\n pointer-events: none;\n backdrop-filter: blur(0px) saturate(100%);\n background-color: transparent;\n\n transition:\n opacity var(--ds-duration-base, 250ms) cubic-bezier(0.16, 1, 0.3, 1),\n backdrop-filter var(--ds-duration-base, 250ms) cubic-bezier(0.16, 1, 0.3, 1),\n background-color var(--ds-duration-base, 250ms) cubic-bezier(0.16, 1, 0.3, 1),\n overlay var(--ds-duration-base, 250ms) allow-discrete,\n display var(--ds-duration-base, 250ms) allow-discrete;\n }\n\n /* ── Open state ───────────────────────────────────────────────────── */\n .overlay[data-open=\"true\"] {\n opacity: 1;\n pointer-events: auto;\n backdrop-filter: blur(20px) saturate(160%);\n background-color: color-mix(in srgb, var(--ds-color-surface, #fff) 88%, transparent);\n\n @starting-style {\n opacity: 0;\n backdrop-filter: blur(0px) saturate(100%);\n background-color: transparent;\n }\n }\n\n /* ── Close state — faster than open ──────────────────────────────── */\n .overlay[data-open=\"false\"] {\n opacity: 0;\n pointer-events: none;\n transition:\n opacity var(--ds-duration-fast, 150ms) cubic-bezier(0.7, 0, 0.84, 0),\n backdrop-filter var(--ds-duration-fast, 150ms) cubic-bezier(0.7, 0, 0.84, 0),\n background-color var(--ds-duration-fast, 150ms) cubic-bezier(0.7, 0, 0.84, 0),\n overlay var(--ds-duration-fast, 150ms) allow-discrete,\n display var(--ds-duration-fast, 150ms) allow-discrete;\n }\n\n /* ── Logo layer — sits above the backdrop stacking context ────────── */\n /*\n * Separate position: fixed layer above the overlay so the logo never\n * fights the WebGL canvas GPU layer inside a backdrop-filter stacking\n * context.\n *\n * z-index fallback (401) covers the case where --ds-z-modal is defined on\n * .tot-ds-root and is therefore NOT inherited by portal elements (they are\n * children of <body>, not of .tot-ds-root).\n */\n .logoLayer {\n position: fixed;\n inset: 0;\n z-index: calc(var(--ds-z-modal, 400) + 1);\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n }\n\n /*\n * No @starting-style needed here — the element is always in the DOM\n * (portal fragment mounts once). [data-open] state changes drive the\n * opacity transition via regular CSS transitions.\n */\n .logoLayer[data-open=\"true\"] {\n opacity: 1;\n transition: opacity var(--ds-duration-base, 250ms) cubic-bezier(0.16, 1, 0.3, 1);\n }\n\n .logoLayer[data-open=\"false\"] {\n opacity: 0;\n transition: opacity var(--ds-duration-fast, 150ms) cubic-bezier(0.7, 0, 0.84, 0);\n }\n\n /* ── Reduced motion ───────────────────────────────────────────────── */\n @media (prefers-reduced-motion: reduce) {\n .overlay,\n .overlay[data-open=\"true\"],\n .overlay[data-open=\"false\"],\n .logoLayer,\n .logoLayer[data-open=\"true\"],\n .logoLayer[data-open=\"false\"] {\n transition: none;\n backdrop-filter: none;\n }\n }\n\n /* ── Screen-reader text ───────────────────────────────────────────── */\n /*\n * Portal sibling of the overlay and logo divs — never inside any stacking\n * context. Uses clip-path (modern, non-deprecated) and an explicit\n * font-family because portal renders outside .tot-ds-root and cannot\n * inherit the token-root font.\n */\n .srOnly {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n font-family: var(--ds-font-family, \"Manrope\", system-ui, sans-serif);\n }\n}\n","@layer app {\n /* ── Outer wrapper — rings radiate from here ──────────────────────── */\n /*\n * will-change: transform promotes this element to its own GPU compositing\n * layer. Combined with z-index: 1, the browser compositor places it above\n * the WebGL canvas layer (which Chrome always promotes to its own layer),\n * regardless of backdrop-filter stacking-context paint order.\n */\n .outer {\n position: relative;\n pointer-events: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 120px;\n height: 120px;\n }\n\n /* ── Elevated circle ──────────────────────────────────────────────── */\n .circle {\n position: relative;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 96px;\n height: 96px;\n border-radius: 50%;\n background-color: var(--ds-color-surface);\n box-shadow:\n var(--ds-shadow-xl),\n 0 0 0 1px oklch(0% 0 0 / 0.04);\n animation: circle-lift var(--ds-duration-slow, 400ms) ease-in-out infinite alternate;\n }\n\n @keyframes circle-lift {\n from {\n box-shadow:\n var(--ds-shadow-xl),\n 0 0 0 1px oklch(0% 0 0 / 0.04);\n transform: translateY(0px);\n }\n to {\n box-shadow:\n var(--ds-shadow-xl),\n 0 24px 40px oklch(0% 0 0 / 0.14),\n 0 0 0 1px oklch(0% 0 0 / 0.04);\n transform: translateY(-4px);\n }\n }\n\n /* ── Logo SVG ─────────────────────────────────────────────────────── */\n .logo {\n width: 52px;\n height: 52px;\n }\n\n .pathDark {\n fill: var(--ds-color-text);\n }\n\n .pathRed {\n fill: var(--ds-color-primary);\n transform-origin: 47px 55px;\n animation: red-breathe 1.6s ease-in-out infinite alternate;\n }\n\n @keyframes red-breathe {\n from { transform: scale(1); opacity: 1; }\n to { transform: scale(1.08); opacity: 0.85; }\n }\n\n /* ── Wave rings ───────────────────────────────────────────────────── */\n .ring {\n position: absolute;\n inset: 0;\n border-radius: 50%;\n border: 1.5px solid var(--ds-color-primary);\n animation: wave-ring 2.2s cubic-bezier(0.16, 1, 0.3, 1) infinite;\n }\n\n .ring:nth-child(2) { animation-delay: -0.73s; }\n .ring:nth-child(3) { animation-delay: -1.47s; }\n\n @keyframes wave-ring {\n 0% { transform: scale(0.6); opacity: 0.6; }\n 100% { transform: scale(2.4); opacity: 0; }\n }\n\n /* ── Reduced motion ───────────────────────────────────────────────── */\n @media (prefers-reduced-motion: reduce) {\n .circle {\n animation: none;\n box-shadow: var(--ds-shadow-xl), 0 0 0 1px oklch(0% 0 0 / 0.04);\n }\n .pathRed { animation: none; }\n .ring { display: none; }\n }\n}\n","import styles from \"./ToteatLogo.module.css\";\n\n/**\n * Toteat isotipo inside an elevated circle, with radiating wave rings.\n * Ported from design_system_vue/LogoToteat/svg/toteat-isotipo-original.svg.\n */\nexport function ToteatLogo() {\n\treturn (\n\t\t<div className={styles.outer} aria-hidden=\"true\">\n\t\t\t{/* Wave rings radiate behind the circle */}\n\t\t\t<div className={styles.ring} />\n\t\t\t<div className={styles.ring} />\n\t\t\t<div className={styles.ring} />\n\n\t\t\t{/* Elevated circle card */}\n\t\t\t<div className={styles.circle}>\n\t\t\t\t<svg\n\t\t\t\t\tclassName={styles.logo}\n\t\t\t\t\tviewBox=\"0 0 80 80\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\tclassName={styles.pathDark}\n\t\t\t\t\t\td=\"M47.328 24.999V10H32.329v14.999h-15v15h15v14.999h14.999V39.999h14.999V25z\"\n\t\t\t\t\t/>\n\t\t\t\t\t<path\n\t\t\t\t\t\tclassName={styles.pathRed}\n\t\t\t\t\t\td=\"M32.328 40a15 15 0 0 0 14.998 15h15v15H47.329a15 15 0 0 1-15-15z\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { createPortal } from \"react-dom\";\nimport { BreathingDotsCanvas } from \"./BreathingDotsCanvas\";\nimport styles from \"./PageLoadingOverlay.module.css\";\nimport { ToteatLogo } from \"./ToteatLogo\";\n\nexport interface PageLoadingOverlayProps {\n\tisOpen: boolean;\n\t/** Screen-reader announcement text. Defaults to \"Cargando…\" */\n\tlabel?: string;\n}\n\n/**\n * Full-screen blocking overlay for page-level loading states.\n *\n * Shows a frosted-glass backdrop with a WebGL breathing-dots animation and\n * the Toteat isotipo in an elevated circle. Renders via a React portal so it\n * always escapes any ancestor stacking context.\n *\n * Usage:\n * <PageLoadingOverlay isOpen={isPending} />\n * <PageLoadingOverlay isOpen={isPending} label=\"Guardando cambios…\" />\n */\nexport function PageLoadingOverlay({ isOpen, label = \"Cargando…\" }: PageLoadingOverlayProps) {\n\treturn createPortal(\n\t\t<>\n\t\t\t{/*\n\t\t\t * Layer 1 — backdrop + WebGL animation (z-index: --ds-z-modal).\n\t\t\t * backdrop-filter creates its own stacking context; the logo lives in a\n\t\t\t * separate layer above so there is no GPU-layer compositing fight.\n\t\t\t */}\n\t\t\t<div\n\t\t\t\tclassName={styles.overlay}\n\t\t\t\tdata-open={isOpen}\n\t\t\t\trole=\"status\"\n\t\t\t\taria-live=\"polite\"\n\t\t\t\taria-busy={isOpen}\n\t\t\t\taria-label={label}\n\t\t\t>\n\t\t\t\t<BreathingDotsCanvas active={isOpen} />\n\t\t\t</div>\n\n\t\t\t{/*\n\t\t\t * Layer 2 — logo (z-index: --ds-z-modal + 1).\n\t\t\t * tot-ds-root is applied so CSS custom properties resolve inside the\n\t\t\t * portal — portal elements are children of <body>, not of .tot-ds-root,\n\t\t\t * so they cannot inherit --ds-* variables without this class.\n\t\t\t */}\n\t\t\t<div className={`${styles.logoLayer} tot-ds-root`} data-open={isOpen} aria-hidden=\"true\">\n\t\t\t\t<ToteatLogo />\n\t\t\t</div>\n\n\t\t\t{/* Live region — sr-only, outside both stacking contexts */}\n\t\t\t<span className={styles.srOnly} aria-live=\"polite\" aria-atomic=\"true\">\n\t\t\t\t{isOpen ? label : \"\"}\n\t\t\t</span>\n\t\t</>,\n\t\tdocument.body,\n\t);\n}\n","@layer ang-components {\n .overlay {\n position: fixed;\n inset: 0;\n z-index: 100;\n background-color: var(--ds-ang-neutral-100);\n display: flex;\n align-items: center;\n justify-content: center;\n overflow-y: auto;\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./PinLockOverlay.module.css\";\n\nexport interface PinLockOverlayProps {\n\tisLocked: boolean;\n\tchildren: ReactNode;\n}\n\nexport function PinLockOverlay({ isLocked, children }: PinLockOverlayProps) {\n\tif (!isLocked) return null;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.overlay}\n\t\t\trole=\"dialog\"\n\t\t\taria-label=\"Pantalla bloqueada — ingresa tu PIN\"\n\t\t\taria-modal=\"true\"\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .wrapper {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-sm);\n cursor: pointer;\n user-select: none;\n\n &:has(.input:disabled) {\n opacity: 0.4;\n cursor: not-allowed;\n }\n }\n\n .input {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n\n .circle {\n flex-shrink: 0;\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n background-color: var(--color-surface);\n border: 1.5px solid var(--color-border);\n border-radius: var(--radius-circle);\n transition:\n background-color var(--duration-fast) var(--ease-out),\n border-color var(--duration-fast) var(--ease-out),\n box-shadow var(--duration-fast) var(--ease-out);\n\n &::after {\n content: '';\n display: block;\n width: 8px;\n height: 8px;\n border-radius: var(--radius-circle);\n background-color: transparent;\n transition: background-color var(--duration-fast) var(--ease-out);\n }\n }\n\n .wrapper:hover:not(:has(.input:disabled)) .circle {\n border-color: var(--color-neutral-400);\n }\n\n .input:checked + .circle {\n border-color: var(--color-primary);\n\n &::after {\n background-color: var(--color-primary);\n }\n }\n\n .input:focus-visible + .circle {\n outline: none;\n border-color: var(--color-primary);\n box-shadow: 0 0 0 3px var(--color-primary-light);\n }\n\n .label {\n font-family: var(--font-family-base);\n font-size: var(--text-sm);\n line-height: var(--leading-normal);\n color: var(--color-text);\n }\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport styles from \"./Radio.module.css\";\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\tlabel?: string;\n\tref?: React.Ref<HTMLInputElement>;\n}\n\nexport function Radio({ label, className, id, ref, ...props }: RadioProps) {\n\tconst inputId = id ?? `radio-${props.value}`;\n\treturn (\n\t\t<label className={[styles.wrapper, className].filter(Boolean).join(\" \")} htmlFor={inputId}>\n\t\t\t<input ref={ref} type=\"radio\" id={inputId} className={styles.input} {...props} />\n\t\t\t<span className={styles.circle} aria-hidden=\"true\" />\n\t\t\t{label && <span className={styles.label}>{label}</span>}\n\t\t</label>\n\t);\n}\n","@layer ds-components {\n\t.select {\n\t\tposition: relative;\n\t\twidth: 100%;\n\t}\n\n\t.trigger {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-base);\n\t\tline-height: var(--leading-normal);\n\t\tcolor: var(--color-text);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: 1.5px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t\tcursor: pointer;\n\t\ttext-align: left;\n\t\ttransition:\n\t\t\tborder-color var(--duration-fast) var(--ease-out),\n\t\t\tbox-shadow var(--duration-fast) var(--ease-out);\n\n\t\t&:hover:not(:disabled) {\n\t\t\tborder-color: var(--color-neutral-400);\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: none;\n\t\t\tborder-color: var(--color-primary);\n\t\t\tbox-shadow: 0 0 0 3px var(--color-primary-light);\n\t\t}\n\n\t\t&:disabled {\n\t\t\tbackground-color: var(--color-neutral-50);\n\t\t\tcolor: var(--color-neutral-400);\n\t\t\tcursor: not-allowed;\n\t\t}\n\t}\n\n\t.select[data-open] .trigger {\n\t\tborder-color: var(--color-primary);\n\t\tbox-shadow: 0 0 0 3px var(--color-primary-light);\n\t}\n\n\t.select[data-error] .trigger {\n\t\tborder-color: var(--color-error);\n\n\t\t&:focus-visible {\n\t\t\tbox-shadow: 0 0 0 3px var(--color-error-light);\n\t\t}\n\t}\n\n\t.select[data-error][data-open] .trigger {\n\t\tborder-color: var(--color-error);\n\t\tbox-shadow: 0 0 0 3px var(--color-error-light);\n\t}\n\n\t.value {\n\t\tflex: 1;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\n\t.placeholder {\n\t\tflex: 1;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-neutral-400);\n\t}\n\n\t.chevron {\n\t\tflex-shrink: 0;\n\t\tmargin-left: var(--spacing-sm);\n\t\tcolor: var(--color-text-muted);\n\t\tfont-size: var(--text-sm);\n\t\ttransition: transform var(--duration-fast) var(--ease-out);\n\t}\n\n\t.select[data-open] .chevron {\n\t\ttransform: rotate(180deg);\n\t}\n\n\t.dropdown {\n\t\tposition: absolute;\n\t\ttop: calc(100% + var(--spacing-xs));\n\t\tleft: 0;\n\t\tright: 0;\n\t\tz-index: var(--z-dropdown);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: 1.5px solid var(--color-border);\n\t\tborder-radius: var(--radius-md);\n\t\tbox-shadow: var(--shadow-lg);\n\t\tmax-height: 240px;\n\t\toverflow-y: auto;\n\t\toverscroll-behavior: contain;\n\t}\n\n\t.search {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tline-height: var(--leading-normal);\n\t\tcolor: var(--color-text);\n\t\tbackground-color: var(--color-surface);\n\t\tborder: none;\n\t\tborder-bottom: 1.5px solid var(--color-border);\n\n\t\t&::placeholder {\n\t\t\tcolor: var(--color-neutral-400);\n\t\t}\n\n\t\t&:focus {\n\t\t\toutline: none;\n\t\t}\n\t}\n\n\t.option {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tline-height: var(--leading-normal);\n\t\tcolor: var(--color-text);\n\t\tbackground: transparent;\n\t\tborder: none;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t\ttransition: background-color var(--duration-fast) var(--ease-out);\n\n\t\t&:hover:not(:disabled) {\n\t\t\tbackground-color: var(--color-neutral-50);\n\t\t}\n\n\t\t&[data-selected] {\n\t\t\tcolor: var(--color-primary);\n\t\t\tfont-weight: var(--font-medium);\n\t\t\tbackground-color: var(--color-primary-50);\n\t\t}\n\n\t\t&:disabled {\n\t\t\tcolor: var(--color-neutral-400);\n\t\t\tcursor: not-allowed;\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: 2px solid var(--color-primary);\n\t\t\toutline-offset: -2px;\n\t\t}\n\t}\n\n\t.noResults {\n\t\tpadding: var(--spacing-sm) var(--spacing-md);\n\t\tfont-size: var(--text-sm);\n\t\tcolor: var(--color-text-muted);\n\t\ttext-align: center;\n\t}\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport styles from \"./Select.module.css\";\n\nexport interface SelectOption {\n\tvalue: string;\n\tlabel: string;\n\tdisabled?: boolean;\n}\n\nexport interface SelectProps {\n\toptions: SelectOption[];\n\tvalue?: string;\n\tonChange?: (value: string) => void;\n\tplaceholder?: string;\n\tsearchable?: boolean;\n\tsearchPlaceholder?: string;\n\tnoResultsText?: string;\n\tdisabled?: boolean;\n\terror?: boolean;\n\tname?: string;\n\t\"data-testid\"?: string;\n}\n\nexport function Select({\n\toptions,\n\tvalue,\n\tonChange,\n\tplaceholder = \"Seleccionar...\",\n\tsearchable = false,\n\tsearchPlaceholder = \"Buscar...\",\n\tnoResultsText = \"Sin resultados\",\n\tdisabled,\n\terror,\n\tname,\n\t\"data-testid\": dataTestId,\n}: SelectProps): React.ReactElement {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [search, setSearch] = useState(\"\");\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst triggerRef = useRef<HTMLButtonElement>(null);\n\n\tconst selectedOption = options.find((o) => o.value === value);\n\tconst filteredOptions = searchable\n\t\t? options.filter((o) => o.label.toLowerCase().includes(search.toLowerCase()))\n\t\t: options;\n\n\tconst closeDropdown = useCallback(() => {\n\t\tsetIsOpen(false);\n\t\ttriggerRef.current?.focus();\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst handler = (e: MouseEvent) => {\n\t\t\tif (!containerRef.current?.contains(e.target as Node)) closeDropdown();\n\t\t};\n\t\tdocument.addEventListener(\"mousedown\", handler);\n\t\treturn () => document.removeEventListener(\"mousedown\", handler);\n\t}, [isOpen, closeDropdown]);\n\n\tuseEffect(() => {\n\t\tif (!isOpen) return;\n\t\tconst handler = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") closeDropdown();\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", handler);\n\t\treturn () => document.removeEventListener(\"keydown\", handler);\n\t}, [isOpen, closeDropdown]);\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={styles.select}\n\t\t\tdata-open={isOpen || undefined}\n\t\t\tdata-error={error || undefined}\n\t\t\tdata-disabled={disabled || undefined}\n\t\t\tdata-testid={dataTestId}\n\t\t>\n\t\t\t<input type=\"hidden\" name={name} value={value ?? \"\"} />\n\t\t\t<button\n\t\t\t\tref={triggerRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.trigger}\n\t\t\t\tonClick={() => !disabled && setIsOpen(!isOpen)}\n\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\tdisabled={disabled}\n\t\t\t>\n\t\t\t\t<span className={selectedOption ? styles.value : styles.placeholder}>\n\t\t\t\t\t{selectedOption?.label ?? placeholder}\n\t\t\t\t</span>\n\t\t\t\t<span className={styles.chevron} aria-hidden=\"true\">\n\t\t\t\t\t▾\n\t\t\t\t</span>\n\t\t\t</button>\n\t\t\t{isOpen && (\n\t\t\t\t<div className={styles.dropdown} role=\"listbox\">\n\t\t\t\t\t{searchable && (\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tclassName={styles.search}\n\t\t\t\t\t\t\tplaceholder={searchPlaceholder}\n\t\t\t\t\t\t\taria-label={searchPlaceholder}\n\t\t\t\t\t\t\tvalue={search}\n\t\t\t\t\t\t\tonChange={(e) => setSearch(e.target.value)}\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/noAutofocus: search input needs focus when dropdown opens\n\t\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{filteredOptions.map((option) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={option.value}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\taria-selected={option.value === value}\n\t\t\t\t\t\t\tclassName={styles.option}\n\t\t\t\t\t\t\tdata-selected={option.value === value || undefined}\n\t\t\t\t\t\t\tdisabled={option.disabled}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonChange?.(option.value);\n\t\t\t\t\t\t\t\tsetIsOpen(false);\n\t\t\t\t\t\t\t\tsetSearch(\"\");\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t\t{filteredOptions.length === 0 && <div className={styles.noResults}>{noResultsText}</div>}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ang-components {\n .backdrop {\n display: none;\n position: fixed;\n inset: 0;\n z-index: 19;\n }\n\n .backdrop[data-open=\"true\"] {\n display: block;\n }\n\n @media (min-width: 781px) {\n .backdrop {\n display: none;\n }\n }\n\n .sidebar {\n position: fixed;\n top: 0;\n left: 0;\n height: 100dvh;\n width: var(--ds-ang-sidebar-width);\n background-color: var(--ds-ang-secondary);\n color: var(--ds-ang-neutral-0);\n display: flex;\n flex-direction: column;\n gap: var(--ds-ang-space-8);\n padding: var(--ds-ang-space-24) var(--ds-ang-space-16);\n overflow-y: auto;\n z-index: 20;\n font-family: var(--ds-ang-font-family);\n font-size: var(--ds-ang-font-size-menu);\n font-weight: var(--ds-ang-font-weight-normal);\n user-select: none;\n transform: translateX(-100%);\n transition: transform 200ms ease-out;\n }\n\n .sidebar[data-open=\"true\"] {\n transform: translateX(0);\n }\n\n @media (min-width: 781px) {\n .sidebar {\n transform: translateX(0);\n position: relative;\n height: 100%;\n flex-shrink: 0;\n }\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./Sidebar.module.css\";\n\nexport interface SidebarProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tisPinLocked?: boolean;\n\tisModal?: boolean;\n\tchildren: ReactNode;\n}\n\nexport function Sidebar({\n\tisOpen,\n\tonClose,\n\tisPinLocked = false,\n\tisModal = false,\n\tchildren,\n}: SidebarProps) {\n\tif (isPinLocked || isModal) return null;\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tclassName={styles.backdrop}\n\t\t\t\tdata-open={isOpen}\n\t\t\t\tdata-testid=\"sidebar-backdrop\"\n\t\t\t\tonClick={onClose}\n\t\t\t\trole=\"presentation\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t/>\n\t\t\t<nav className={styles.sidebar} data-open={isOpen} aria-label=\"Menú principal\">\n\t\t\t\t{children}\n\t\t\t</nav>\n\t\t</>\n\t);\n}\n","@layer ang-components {\n .item {\n display: flex;\n align-items: center;\n gap: var(--ds-ang-space-8);\n width: 100%;\n padding: var(--ds-ang-space-6) var(--ds-ang-space-8);\n background: none;\n border: none;\n border-radius: var(--ds-ang-radius-sm);\n text-align: left;\n cursor: pointer;\n color: var(--ds-ang-neutral-0);\n font-family: var(--ds-ang-font-family);\n font-size: var(--ds-ang-font-size-menu);\n font-weight: var(--ds-ang-font-weight-normal);\n line-height: 1.3;\n text-decoration: none;\n user-select: none;\n transition:\n background-color 100ms ease,\n font-weight 100ms ease,\n color 100ms ease;\n }\n\n /* Sub-items (inside .inner) inherit these overrides via CSS custom props */\n .item:hover {\n background-color: var(--_item-hover-bg, var(--ds-ang-tertiary));\n color: var(--_item-hover-color, var(--ds-ang-secondary));\n font-weight: var(--ds-ang-font-weight-bold);\n }\n\n .item.active,\n .item[data-active] {\n background-color: var(--_item-hover-bg, var(--ds-ang-tertiary));\n color: var(--_item-hover-color, var(--ds-ang-secondary));\n font-weight: var(--ds-ang-font-weight-bold);\n }\n\n .item:focus-visible {\n outline: var(--ds-ang-focus-width) solid var(--ds-ang-focus-color);\n outline-offset: var(--ds-ang-focus-offset);\n border-radius: var(--ds-ang-radius-sm);\n }\n}\n","import type { ButtonHTMLAttributes } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport styles from \"./SidebarNavItem.module.css\";\n\nexport { styles as sidebarNavItemStyles };\nexport const sidebarNavItemClass = styles.item;\nexport const sidebarNavItemActiveClass = styles.active;\n\nexport interface SidebarNavItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n\tlabel: string;\n\tisActive?: boolean;\n}\n\nexport function SidebarNavItem({\n\tlabel,\n\tisActive = false,\n\tclassName,\n\ttype = \"button\",\n\t...rest\n}: SidebarNavItemProps) {\n\treturn (\n\t\t<button\n\t\t\ttype={type}\n\t\t\tclassName={cn(styles.item, isActive && styles.active, className)}\n\t\t\tdata-active={isActive || undefined}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{label}\n\t\t</button>\n\t);\n}\n","@layer ang-components {\n .section {\n display: flex;\n flex-direction: column;\n }\n\n .trigger {\n display: flex;\n align-items: center;\n gap: var(--ds-ang-space-8);\n width: 100%;\n padding: var(--ds-ang-space-6) var(--ds-ang-space-8);\n background: none;\n border: none;\n border-radius: var(--ds-ang-radius-sm);\n text-align: left;\n cursor: pointer;\n color: var(--ds-ang-neutral-0);\n font-family: var(--ds-ang-font-family);\n font-size: var(--ds-ang-font-size-menu);\n font-weight: var(--ds-ang-font-weight-normal);\n line-height: 1.3;\n user-select: none;\n transition:\n background-color 100ms ease,\n font-weight 100ms ease,\n color 100ms ease;\n }\n\n .trigger:hover,\n .trigger[data-open],\n .trigger[data-active] {\n background-color: var(--ds-ang-tertiary);\n color: var(--ds-ang-secondary);\n font-weight: var(--ds-ang-font-weight-bold);\n }\n\n .trigger:focus-visible {\n outline: var(--ds-ang-focus-width) solid var(--ds-ang-focus-color);\n outline-offset: var(--ds-ang-focus-offset);\n border-radius: var(--ds-ang-radius-sm);\n }\n\n .icon {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .title {\n flex: 1;\n }\n\n .chevron {\n display: block;\n width: 6px;\n height: 6px;\n border-right: 1.5px solid currentColor;\n border-bottom: 1.5px solid currentColor;\n transform: rotate(45deg);\n transition: transform 200ms ease-in-out;\n flex-shrink: 0;\n margin-right: var(--ds-ang-space-4);\n }\n\n .trigger[data-open] .chevron {\n transform: rotate(-135deg);\n }\n\n .content {\n overflow: hidden;\n max-height: 0;\n transition: max-height 200ms ease-in-out;\n }\n\n .content[data-open] {\n max-height: 1000px;\n }\n\n .inner {\n margin-left: var(--ds-ang-space-16);\n padding-left: var(--ds-ang-space-12);\n padding-bottom: var(--ds-ang-space-4);\n margin-top: var(--ds-ang-space-8);\n border-left: 1.5px solid var(--ds-ang-neutral-500);\n /* Sub-items use neutral-500 bg + white text on hover/active */\n --_item-hover-bg: var(--ds-ang-neutral-500);\n --_item-hover-color: var(--ds-ang-neutral-0);\n }\n\n .suffix {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n line-height: 1;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport styles from \"./SidebarNavSection.module.css\";\n\nexport interface SidebarNavSectionProps {\n\ttitle: string;\n\ticon?: ReactNode;\n\ttitleSuffix?: ReactNode;\n\tdefaultOpen?: boolean;\n\tisActive?: boolean;\n\tclassName?: string;\n\tchildren: ReactNode;\n}\n\nexport function SidebarNavSection({\n\ttitle,\n\ticon,\n\ttitleSuffix,\n\tdefaultOpen = false,\n\tisActive = false,\n\tclassName,\n\tchildren,\n}: SidebarNavSectionProps) {\n\tconst [isOpen, setIsOpen] = useState(defaultOpen);\n\n\treturn (\n\t\t<div className={cn(styles.section, className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.trigger}\n\t\t\t\tdata-open={isOpen || undefined}\n\t\t\t\tdata-active={isActive || undefined}\n\t\t\t\tonClick={() => setIsOpen((o) => !o)}\n\t\t\t\taria-expanded={isOpen}\n\t\t\t>\n\t\t\t\t{icon && (\n\t\t\t\t\t<span className={styles.icon} aria-hidden=\"true\">\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<span className={styles.title}>{title}</span>\n\t\t\t\t{titleSuffix && (\n\t\t\t\t\t<span className={styles.suffix} aria-hidden=\"true\">\n\t\t\t\t\t\t{titleSuffix}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<span className={styles.chevron} aria-hidden=\"true\" />\n\t\t\t</button>\n\t\t\t<div className={styles.content} data-open={isOpen || undefined} inert={!isOpen || undefined}>\n\t\t\t\t<div className={styles.inner}>{children}</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","@layer ang-components {\n .tabbar {\n height: var(--ds-ang-tab-height);\n min-height: var(--ds-ang-tab-height);\n max-height: var(--ds-ang-tab-height);\n background-color: var(--ds-ang-neutral-500);\n padding: 5px 0;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .tabbar[data-variant=\"expanded\"] {\n height: calc(var(--ds-ang-tab-height) + 58px);\n min-height: calc(var(--ds-ang-tab-height) + 58px);\n max-height: calc(var(--ds-ang-tab-height) + 58px);\n }\n\n .tabbar[data-variant=\"expanded-billing\"] {\n height: calc(var(--ds-ang-tab-height) + 118px);\n min-height: calc(var(--ds-ang-tab-height) + 118px);\n max-height: calc(var(--ds-ang-tab-height) + 118px);\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./TabBar.module.css\";\n\nexport type TabBarVariant = \"default\" | \"expanded\" | \"expanded-billing\";\n\nexport interface TabBarProps {\n\tvariant?: TabBarVariant;\n\tchildren: ReactNode;\n}\n\nexport function TabBar({ variant = \"default\", children }: TabBarProps) {\n\treturn (\n\t\t<div className={styles.tabbar} role=\"tablist\" data-variant={variant}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.tabs {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\twidth: 100%;\n\t}\n\n\t.tabList {\n\t\tdisplay: flex;\n\t\tgap: 0;\n\t\tborder-bottom: 1.5px solid var(--color-border);\n\t}\n\n\t.tab {\n\t\tposition: relative;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: var(--spacing-sm);\n\t\tpadding: var(--spacing-sm) var(--spacing-lg);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-medium);\n\t\tline-height: var(--leading-normal);\n\t\tcolor: var(--color-text-muted);\n\t\tbackground: transparent;\n\t\tborder: none;\n\t\tborder-bottom: 2px solid transparent;\n\t\tmargin-bottom: -1.5px;\n\t\tcursor: pointer;\n\t\twhite-space: nowrap;\n\t\ttransition:\n\t\t\tcolor var(--duration-fast) var(--ease-out),\n\t\t\tborder-color var(--duration-fast) var(--ease-out);\n\n\t\t&:hover:not(:disabled):not([data-active]) {\n\t\t\tcolor: var(--color-text);\n\t\t\tborder-bottom-color: var(--color-neutral-300);\n\t\t}\n\n\t\t&[data-active] {\n\t\t\tcolor: var(--color-primary);\n\t\t\tfont-weight: var(--font-semibold);\n\t\t\tborder-bottom-color: var(--color-primary);\n\t\t}\n\n\t\t&:disabled {\n\t\t\topacity: 0.4;\n\t\t\tcursor: not-allowed;\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: 2px solid var(--color-primary);\n\t\t\toutline-offset: 2px;\n\t\t\tborder-radius: var(--radius-sm);\n\t\t}\n\t}\n\n\t.panel {\n\t\tpadding-top: var(--spacing-lg);\n\t}\n}\n","import type { ReactNode } from \"react\";\nimport { useRef, useState } from \"react\";\nimport styles from \"./Tabs.module.css\";\n\nexport interface TabItem {\n\tid: string;\n\tlabel: string;\n\tcontent?: ReactNode;\n\tdisabled?: boolean;\n}\n\nexport interface TabsProps {\n\titems: TabItem[];\n\tdefaultTab?: string;\n\t/** Controlled active tab id. When provided the caller owns active state; Tabs only calls onChange. */\n\tactiveTab?: string;\n\t/** Accessible label for the tablist — required when multiple tablists exist on the page. */\n\t\"aria-label\"?: string;\n\tonChange?: (tabId: string) => void;\n}\n\nexport function Tabs({\n\titems,\n\tdefaultTab,\n\tactiveTab: controlledTab,\n\t\"aria-label\": ariaLabel,\n\tonChange,\n}: TabsProps): React.ReactElement {\n\tconst [internalTab, setInternalTab] = useState(defaultTab ?? items[0]?.id ?? \"\");\n\tconst isControlled = controlledTab !== undefined;\n\tconst activeTab = isControlled ? controlledTab : internalTab;\n\tconst tabRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n\tconst wasControlled = useRef(isControlled);\n\n\tif (process.env.NODE_ENV !== \"production\" && wasControlled.current !== isControlled) {\n\t\tconsole.error(\n\t\t\t\"Tabs: `activeTab` prop changed from %s to %s. A component cannot switch between controlled and uncontrolled modes.\",\n\t\t\twasControlled.current ? \"controlled\" : \"uncontrolled\",\n\t\t\tisControlled ? \"controlled\" : \"uncontrolled\",\n\t\t);\n\t}\n\n\tconst handleTabClick = (id: string) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalTab(id);\n\t\t}\n\t\tonChange?.(id);\n\t};\n\n\tconst handleKeyDown = (e: React.KeyboardEvent, currentIndex: number) => {\n\t\tconst enabledItems = items.filter((item) => !item.disabled);\n\t\tconst enabledIds = enabledItems.map((item) => item.id);\n\t\tconst currentEnabledIndex = enabledIds.indexOf(items[currentIndex]?.id ?? \"\");\n\t\tlet targetId: string | undefined;\n\n\t\tif (e.key === \"ArrowRight\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[(currentEnabledIndex + 1) % enabledIds.length];\n\t\t} else if (e.key === \"ArrowLeft\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[(currentEnabledIndex - 1 + enabledIds.length) % enabledIds.length];\n\t\t} else if (e.key === \"Home\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[0];\n\t\t} else if (e.key === \"End\") {\n\t\t\te.preventDefault();\n\t\t\ttargetId = enabledIds[enabledIds.length - 1];\n\t\t}\n\n\t\tif (targetId) {\n\t\t\thandleTabClick(targetId);\n\t\t\ttabRefs.current.get(targetId)?.focus();\n\t\t}\n\t};\n\n\tconst activeContent = items.find((item) => item.id === activeTab)?.content;\n\n\treturn (\n\t\t<div className={styles.tabs}>\n\t\t\t<div className={styles.tabList} role=\"tablist\" aria-label={ariaLabel}>\n\t\t\t\t{items.map((item, index) => (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\t\tif (el) tabRefs.current.set(item.id, el);\n\t\t\t\t\t\t\telse tabRefs.current.delete(item.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\taria-selected={item.id === activeTab}\n\t\t\t\t\t\taria-controls={activeContent != null ? `panel-${activeTab}` : undefined}\n\t\t\t\t\t\tid={`tab-${item.id}`}\n\t\t\t\t\t\tclassName={styles.tab}\n\t\t\t\t\t\tdata-active={item.id === activeTab || undefined}\n\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\ttabIndex={item.id === activeTab ? 0 : -1}\n\t\t\t\t\t\tonClick={() => !item.disabled && handleTabClick(item.id)}\n\t\t\t\t\t\tonKeyDown={(e) => handleKeyDown(e, index)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</button>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t\t{activeContent != null && (\n\t\t\t\t<div\n\t\t\t\t\trole=\"tabpanel\"\n\t\t\t\t\tid={`panel-${activeTab}`}\n\t\t\t\t\taria-labelledby={`tab-${activeTab}`}\n\t\t\t\t\tclassName={styles.panel}\n\t\t\t\t>\n\t\t\t\t\t{activeContent}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.textarea {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--ds-space-2) var(--ds-space-3);\n\t\tfont-family: var(--ds-font-family);\n\t\tfont-size: var(--ds-font-size-base);\n\t\tline-height: var(--ds-leading-normal);\n\t\tcolor: var(--ds-color-text);\n\t\tbackground-color: var(--ds-color-surface);\n\t\tborder: 1px solid var(--ds-color-border);\n\t\tborder-radius: var(--ds-radius-lg);\n\t\tresize: vertical;\n\t\ttransition:\n\t\t\tborder-color var(--ds-duration-fast) var(--ds-ease-out),\n\t\t\tbox-shadow var(--ds-duration-fast) var(--ds-ease-out);\n\n\t\t&::placeholder {\n\t\t\tcolor: var(--ds-color-placeholder);\n\t\t}\n\n\t\t&:hover:not(:disabled):not([data-error]) {\n\t\t\tborder-color: var(--ds-color-gray-400);\n\t\t}\n\n\t\t&:focus,\n\t\t&:focus-visible {\n\t\t\toutline: none;\n\t\t\tborder-color: var(--ds-color-primary);\n\t\t\tbox-shadow: 0 0 0 3px var(--ds-color-primary-light);\n\t\t}\n\n\t\t&:disabled {\n\t\t\tbackground-color: var(--ds-color-gray-50);\n\t\t\tcolor: var(--ds-color-gray-500);\n\t\t\tcursor: not-allowed;\n\t\t\tresize: none;\n\t\t}\n\n\t\t&[data-error] {\n\t\t\tborder-color: var(--ds-color-error);\n\n\t\t\t&:focus,\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: 0 0 0 3px var(--ds-color-error-light);\n\t\t\t}\n\t\t}\n\t}\n}\n","import type { Ref, TextareaHTMLAttributes } from \"react\";\nimport styles from \"./Textarea.module.css\";\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n\terror?: boolean;\n\tref?: Ref<HTMLTextAreaElement>;\n}\n\nexport function Textarea({ error, className, rows = 3, ref, ...props }: TextareaProps) {\n\treturn (\n\t\t<textarea\n\t\t\tref={ref}\n\t\t\trows={rows}\n\t\t\tclassName={[styles.textarea, className].filter(Boolean).join(\" \")}\n\t\t\tdata-error={error ? \"\" : undefined}\n\t\t\taria-invalid={error || undefined}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","@layer ds-components {\n .wrapper {\n position: relative;\n display: flex;\n align-items: center;\n\n .input {\n padding-right: calc(var(--ds-space-3) + 28px);\n }\n }\n\n .toggleButton {\n position: absolute;\n right: var(--ds-space-2);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--ds-space-1);\n border: none;\n background: transparent;\n color: var(--ds-color-text-muted);\n cursor: pointer;\n border-radius: var(--ds-radius-sm);\n transition: color var(--ds-duration-fast) var(--ds-ease-out);\n\n &:hover:not(:disabled) {\n color: var(--ds-color-text);\n }\n\n &:focus-visible {\n outline: var(--ds-focus-width) solid var(--ds-focus-color);\n outline-offset: var(--ds-focus-offset);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n }\n\n .input {\n display: block;\n width: 100%;\n padding: var(--ds-space-2) var(--ds-space-3);\n font-family: var(--ds-font-family);\n font-size: var(--ds-font-size-base);\n line-height: var(--ds-leading-normal);\n color: var(--ds-color-text);\n background-color: var(--ds-color-surface);\n border: 1px solid var(--ds-color-border);\n border-radius: var(--ds-radius-lg);\n min-height: 3.75rem;\n\n &[data-size=\"small\"] {\n min-height: 2.5rem;\n padding: var(--ds-space-1) var(--ds-space-3);\n border-radius: var(--ds-radius-md);\n }\n transition:\n border-color var(--ds-duration-fast) var(--ds-ease-out),\n box-shadow var(--ds-duration-fast) var(--ds-ease-out);\n\n &::placeholder {\n color: var(--ds-color-placeholder);\n }\n\n &:hover:not(:disabled):not([data-error]) {\n border-color: var(--ds-color-gray-400);\n }\n\n &:focus {\n outline: none;\n border-color: var(--ds-color-primary);\n box-shadow: 0 0 0 3px var(--ds-color-primary-light);\n }\n\n &:focus-visible {\n outline: none;\n border-color: var(--ds-color-primary);\n box-shadow: 0 0 0 3px var(--ds-color-primary-light);\n }\n\n &:disabled {\n background-color: var(--ds-color-gray-50);\n color: var(--ds-color-gray-500);\n cursor: not-allowed;\n }\n\n &[data-error] {\n border-color: var(--ds-color-error);\n\n &:focus,\n &:focus-visible {\n box-shadow: 0 0 0 3px var(--ds-color-error-light);\n }\n }\n }\n}\n","import { forwardRef, type InputHTMLAttributes, useState } from \"react\";\nimport { Icon } from \"../Icon/Icon\";\nimport styles from \"./TextInput.module.css\";\n\nexport type TextInputSize = \"small\" | \"medium\";\n\nexport interface TextInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n\terror?: boolean;\n\tshowPasswordToggle?: boolean;\n\tsize?: TextInputSize;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: password toggle + error + type variants are all load-bearing prop branches\nexport const TextInput = forwardRef<HTMLInputElement, TextInputProps>(function TextInput(\n\t{ error = false, showPasswordToggle = false, size = \"medium\", className, type, ...props },\n\tref,\n) {\n\tconst [passwordVisible, setPasswordVisible] = useState(false);\n\tconst isPasswordField = type === \"password\";\n\tconst resolvedType = isPasswordField && passwordVisible ? \"text\" : type;\n\n\tconst input = (\n\t\t<input\n\t\t\tref={ref}\n\t\t\tclassName={[styles.input, !showPasswordToggle && className].filter(Boolean).join(\" \")}\n\t\t\tdata-error={error ? \"\" : undefined}\n\t\t\tdata-size={size}\n\t\t\taria-invalid={error || undefined}\n\t\t\ttype={resolvedType}\n\t\t\t{...props}\n\t\t/>\n\t);\n\n\tif (isPasswordField && showPasswordToggle) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={[styles.wrapper, className].filter(Boolean).join(\" \")}\n\t\t\t\tdata-error={error ? \"\" : undefined}\n\t\t\t\tdata-size={size}\n\t\t\t>\n\t\t\t\t{input}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.toggleButton}\n\t\t\t\t\taria-label={passwordVisible ? \"Ocultar contraseña\" : \"Mostrar contraseña\"}\n\t\t\t\t\taria-pressed={passwordVisible}\n\t\t\t\t\tdisabled={props.disabled}\n\t\t\t\t\tonClick={() => setPasswordVisible((v) => !v)}\n\t\t\t\t>\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tname={passwordVisible ? \"eye-open-outline\" : \"eye-closed-outline\"}\n\t\t\t\t\t\tsize={18}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn input;\n});\n","import type { ReactNode } from \"react\";\nimport type { DsTheme } from \"../DsProvider/DsProvider\";\n\nexport interface ThemeGateProps {\n\ttheme: DsTheme;\n\tchildren: ReactNode;\n\tclassName?: string;\n}\n\nexport function ThemeGate({ theme, children, className }: ThemeGateProps) {\n\treturn (\n\t\t<div data-theme={theme} className={className}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n\t.container {\n\t\tposition: fixed;\n\t\tbottom: var(--spacing-xl);\n\t\tright: var(--spacing-xl);\n\t\tz-index: var(--z-toast);\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--spacing-sm);\n\t\tmax-width: 400px;\n\t\twidth: calc(100vw - 2 * var(--spacing-xl));\n\t\tpointer-events: none;\n\n\t\t@media (max-width: 480px) {\n\t\t\tbottom: var(--spacing-md);\n\t\t\tright: var(--spacing-md);\n\t\t\tleft: var(--spacing-md);\n\t\t\twidth: auto;\n\t\t}\n\t}\n\n\t.toast {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: var(--spacing-md);\n\t\tpadding: var(--spacing-md) var(--spacing-lg);\n\t\tborder-radius: var(--radius-lg);\n\t\tbox-shadow: var(--shadow-lg);\n\t\tfont-family: var(--font-family-base);\n\t\tfont-size: var(--text-sm);\n\t\tfont-weight: var(--font-medium);\n\t\tline-height: var(--leading-snug);\n\t\tpointer-events: auto;\n\t\tanimation: ds-toast-enter var(--duration-base) var(--ease-spring);\n\n\t\t&[data-variant=\"success\"] {\n\t\t\tbackground-color: var(--color-success-light);\n\t\t\tcolor: var(--color-success-dark);\n\t\t\tborder-left: 4px solid var(--color-success);\n\t\t}\n\n\t\t&[data-variant=\"error\"] {\n\t\t\tbackground-color: var(--color-error-light);\n\t\t\tcolor: var(--color-error-dark);\n\t\t\tborder-left: 4px solid var(--color-error);\n\t\t}\n\n\t\t&[data-variant=\"warning\"] {\n\t\t\tbackground-color: var(--color-warning-light);\n\t\t\tcolor: var(--color-warning-dark);\n\t\t\tborder-left: 4px solid var(--color-warning);\n\t\t}\n\n\t\t&[data-variant=\"info\"] {\n\t\t\tbackground-color: var(--color-info-light);\n\t\t\tcolor: var(--color-info-dark);\n\t\t\tborder-left: 4px solid var(--color-info);\n\t\t}\n\t}\n\n\t.toastMessage {\n\t\tflex: 1;\n\t}\n\n\t.dismissButton {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tflex-shrink: 0;\n\t\twidth: 24px;\n\t\theight: 24px;\n\t\tpadding: 0;\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tcursor: pointer;\n\t\tcolor: inherit;\n\t\topacity: 0.6;\n\t\tborder-radius: var(--radius-sm);\n\t\ttransition: opacity var(--duration-fast) var(--ease-out);\n\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: 2px solid currentColor;\n\t\t\toutline-offset: 1px;\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ToastData, ToastVariant } from \"./Toast\";\n\ntype AddToastOptions = {\n\tmessage: string;\n\tvariant?: ToastVariant;\n\tduration?: number;\n\tdismissible?: boolean;\n};\n\ntype ToastStore = {\n\ttoasts: ToastData[];\n\taddToast: (opts: AddToastOptions) => string;\n\tdismissToast: (id: string) => void;\n};\n\n/* ── Global singleton store (module-level) ── */\n\ntype Listener = (toasts: ToastData[]) => void;\n\nlet toasts: ToastData[] = [];\nconst listeners = new Set<Listener>();\nlet counter = 0;\n\nfunction notify() {\n\tfor (const l of listeners) l([...toasts]);\n}\n\nfunction addToast(opts: AddToastOptions): string {\n\tconst id = `toast-${++counter}-${Date.now()}`;\n\ttoasts = [\n\t\t...toasts,\n\t\t{\n\t\t\tid,\n\t\t\tmessage: opts.message,\n\t\t\tvariant: opts.variant ?? \"info\",\n\t\t\tduration: opts.duration,\n\t\t\tdismissible: opts.dismissible,\n\t\t},\n\t];\n\tnotify();\n\treturn id;\n}\n\nfunction dismissToast(id: string) {\n\ttoasts = toasts.filter((t) => t.id !== id);\n\tnotify();\n}\n\n/* ── Hook ── */\n\nexport function useToast(): ToastStore {\n\tconst [localToasts, setLocalToasts] = useState<ToastData[]>(toasts);\n\tconst isMounted = useRef(true);\n\n\tuseEffect(() => {\n\t\tisMounted.current = true;\n\t\tconst listener: Listener = (next) => {\n\t\t\tif (isMounted.current) setLocalToasts(next);\n\t\t};\n\t\tlisteners.add(listener);\n\t\treturn () => {\n\t\t\tisMounted.current = false;\n\t\t\tlisteners.delete(listener);\n\t\t};\n\t}, []);\n\n\tconst stableAdd = useCallback((opts: AddToastOptions) => addToast(opts), []);\n\tconst stableDismiss = useCallback((id: string) => dismissToast(id), []);\n\n\treturn {\n\t\ttoasts: localToasts,\n\t\taddToast: stableAdd,\n\t\tdismissToast: stableDismiss,\n\t};\n}\n","import type { ReactNode } from \"react\";\nimport { useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport styles from \"./Toast.module.css\";\nimport { useToast } from \"./useToast\";\n\nexport type ToastVariant = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface ToastData {\n\tid: string;\n\tmessage: string;\n\tvariant: ToastVariant;\n\tduration?: number;\n\tdismissible?: boolean;\n}\n\n/* ── Toast Message ── */\n\ninterface ToastMessageProps {\n\ttoast: ToastData;\n\tonDismiss: (id: string) => void;\n\tdismissLabel?: string;\n}\n\nfunction ToastMessage({\n\ttoast,\n\tonDismiss,\n\tdismissLabel = \"Cerrar notificación\",\n}: ToastMessageProps) {\n\tconst { id, message, variant, duration = 4000, dismissible = true } = toast;\n\tconst timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n\tuseEffect(() => {\n\t\ttimerRef.current = setTimeout(() => {\n\t\t\tonDismiss(id);\n\t\t}, duration);\n\n\t\treturn () => {\n\t\t\tif (timerRef.current) clearTimeout(timerRef.current);\n\t\t};\n\t}, [id, duration, onDismiss]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.toast}\n\t\t\tdata-variant={variant}\n\t\t\trole={variant === \"error\" || variant === \"warning\" ? \"alert\" : \"status\"}\n\t\t\taria-atomic=\"true\"\n\t\t>\n\t\t\t<span className={styles.toastMessage}>{message}</span>\n\t\t\t{dismissible && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.dismissButton}\n\t\t\t\t\tonClick={() => onDismiss(id)}\n\t\t\t\t\taria-label={dismissLabel}\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"14\"\n\t\t\t\t\t\theight=\"14\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth=\"2.5\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path d=\"M18 6 6 18M6 6l12 12\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\n/* ── Toast Container ── */\n\nexport interface ToastContainerProps {\n\tchildren?: ReactNode;\n\tnotificationsLabel?: string;\n\tdismissLabel?: string;\n}\n\nexport function ToastContainer({\n\tnotificationsLabel = \"Notificaciones\",\n\tdismissLabel,\n}: ToastContainerProps) {\n\tconst { toasts, dismissToast } = useToast();\n\n\tif (typeof document === \"undefined\") return null;\n\n\treturn createPortal(\n\t\t<section className={styles.container} aria-label={notificationsLabel}>\n\t\t\t{toasts.map((toast) => (\n\t\t\t\t<ToastMessage\n\t\t\t\t\tkey={toast.id}\n\t\t\t\t\ttoast={toast}\n\t\t\t\t\tonDismiss={dismissToast}\n\t\t\t\t\tdismissLabel={dismissLabel}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</section>,\n\t\tdocument.body,\n\t);\n}\n","@layer ds-components {\n .wrapper {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-sm);\n cursor: pointer;\n user-select: none;\n\n &:has(.input:disabled) {\n cursor: not-allowed;\n opacity: 0.5;\n }\n }\n\n /* ── Hidden native input ── */\n .input {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n /* ── Track ── */\n .track {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: 40px;\n height: 22px;\n border-radius: var(--radius-full);\n background-color: var(--color-neutral-200);\n transition: background-color var(--duration-fast) var(--ease-out);\n flex-shrink: 0;\n }\n\n /* Checked state: primary bg */\n .input:checked + .track {\n background-color: var(--color-primary);\n }\n\n /* Focus-visible ring on track */\n .input:focus-visible + .track {\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n }\n\n /* ── Thumb ── */\n .thumb {\n position: absolute;\n left: 2px;\n width: 18px;\n height: 18px;\n border-radius: var(--radius-circle);\n background-color: var(--color-surface);\n box-shadow: var(--shadow-sm);\n transition: transform var(--duration-fast) var(--ease-spring);\n }\n\n .input:checked + .track .thumb {\n transform: translateX(18px);\n }\n\n /* ── Label text ── */\n .label {\n font-family: var(--font-family-base);\n font-size: var(--text-base);\n font-weight: var(--font-normal);\n color: var(--color-text);\n line-height: var(--leading-normal);\n }\n\n /* ── Size: small ── */\n .wrapper[data-size=\"small\"] .track {\n width: 32px;\n height: 18px;\n }\n\n .wrapper[data-size=\"small\"] .thumb {\n width: 14px;\n height: 14px;\n }\n\n .wrapper[data-size=\"small\"] .input:checked + .track .thumb {\n transform: translateX(14px);\n }\n\n .wrapper[data-size=\"small\"] .label {\n font-size: var(--text-sm);\n }\n}\n","import type { InputHTMLAttributes } from \"react\";\nimport styles from \"./Toggle.module.css\";\n\nexport interface ToggleProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> {\n\tlabel?: string;\n\tsize?: \"small\" | \"medium\";\n\tref?: React.Ref<HTMLInputElement>;\n}\n\nexport function Toggle({ label, size = \"medium\", className, id, ref, ...props }: ToggleProps) {\n\tconst inputId =\n\t\tid ??\n\t\t`toggle-${String(label ?? \"\")\n\t\t\t.toLowerCase()\n\t\t\t.replace(/\\s+/g, \"-\")}`;\n\treturn (\n\t\t<label className={styles.wrapper} data-size={size} htmlFor={inputId}>\n\t\t\t<input\n\t\t\t\tref={ref}\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\trole=\"switch\"\n\t\t\t\taria-checked={props.checked ?? false}\n\t\t\t\tid={inputId}\n\t\t\t\tclassName={styles.input}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<span className={styles.track} aria-hidden=\"true\">\n\t\t\t\t<span className={styles.thumb} />\n\t\t\t</span>\n\t\t\t{label && <span className={styles.label}>{label}</span>}\n\t\t</label>\n\t);\n}\n","@layer ds-components {\n\t.trigger {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t}\n\n\t.tooltip {\n\t\tposition: fixed;\n\t\tz-index: var(--ds-z-tooltip);\n\t\tmax-width: 240px;\n\t\tpadding: var(--ds-space-1) var(--ds-space-2);\n\t\tbackground: var(--ds-color-gray-900);\n\t\tcolor: var(--ds-color-white);\n\t\tfont-family: var(--ds-font-family);\n\t\tfont-size: var(--ds-font-size-sm);\n\t\tline-height: var(--ds-leading-snug);\n\t\tborder-radius: var(--ds-radius-sm);\n\t\tpointer-events: none;\n\t\tword-break: break-word;\n\n\t\t&[data-placement=\"top\"] {\n\t\t\ttransform: translateX(-50%) translateY(-100%);\n\t\t}\n\n\t\t&[data-placement=\"bottom\"] {\n\t\t\ttransform: translateX(-50%);\n\t\t}\n\n\t\t&[data-placement=\"left\"] {\n\t\t\ttransform: translateX(-100%) translateY(-50%);\n\t\t}\n\n\t\t&[data-placement=\"right\"] {\n\t\t\ttransform: translateY(-50%);\n\t\t}\n\t}\n}\n","import { type ReactNode, useCallback, useId, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport styles from \"./Tooltip.module.css\";\n\nexport type TooltipPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface TooltipProps {\n\tcontent: ReactNode;\n\tchildren: ReactNode;\n\tplacement?: TooltipPlacement;\n}\n\ninterface Coords {\n\ttop: number;\n\tleft: number;\n}\n\nconst GAP = 8;\n\nfunction getCoords(rect: DOMRect, placement: TooltipPlacement): Coords {\n\tswitch (placement) {\n\t\tcase \"top\":\n\t\t\treturn { top: rect.top - GAP, left: rect.left + rect.width / 2 };\n\t\tcase \"bottom\":\n\t\t\treturn { top: rect.bottom + GAP, left: rect.left + rect.width / 2 };\n\t\tcase \"left\":\n\t\t\treturn { top: rect.top + rect.height / 2, left: rect.left - GAP };\n\t\tcase \"right\":\n\t\t\treturn { top: rect.top + rect.height / 2, left: rect.right + GAP };\n\t}\n}\n\nexport function Tooltip({ content, children, placement = \"top\" }: TooltipProps) {\n\tconst [visible, setVisible] = useState(false);\n\tconst [coords, setCoords] = useState<Coords>({ top: 0, left: 0 });\n\tconst triggerRef = useRef<HTMLSpanElement>(null);\n\tconst id = useId();\n\n\tconst show = useCallback(() => {\n\t\tif (!triggerRef.current) return;\n\t\tsetCoords(getCoords(triggerRef.current.getBoundingClientRect(), placement));\n\t\tsetVisible(true);\n\t}, [placement]);\n\n\tconst hide = useCallback(() => setVisible(false), []);\n\n\treturn (\n\t\t<>\n\t\t\t{/* biome-ignore lint/a11y/noStaticElementInteractions: tooltip trigger wraps arbitrary children; mouse events are supplementary to the child's own keyboard/focus handlers */}\n\t\t\t<span\n\t\t\t\tref={triggerRef}\n\t\t\t\tclassName={styles.trigger}\n\t\t\t\taria-describedby={visible ? id : undefined}\n\t\t\t\tonMouseEnter={show}\n\t\t\t\tonMouseLeave={hide}\n\t\t\t\tonFocus={show}\n\t\t\t\tonBlur={hide}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t\t{visible &&\n\t\t\t\ttypeof document !== \"undefined\" &&\n\t\t\t\tcreatePortal(\n\t\t\t\t\t<div\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\trole=\"tooltip\"\n\t\t\t\t\t\tclassName={styles.tooltip}\n\t\t\t\t\t\tdata-placement={placement}\n\t\t\t\t\t\tstyle={{ top: coords.top, left: coords.left }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</div>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n","@layer ds-components {\n .treeItem {\n --tree-item-indent: 0px;\n width: 100%;\n background-color: var(--ds-color-white);\n\n &[data-odd-row] > .content {\n background-color: var(--color-neutral-50);\n &:hover { background-color: var(--color-neutral-100); }\n }\n\n &[data-bordered][data-level=\"0\"] {\n border: 1px solid var(--color-neutral-200);\n border-radius: var(--radius-lg);\n margin-bottom: var(--spacing-xs);\n overflow: hidden;\n\n & > .content { padding-left: var(--spacing-md); }\n & > .childrenSlot { padding-bottom: var(--spacing-xs); }\n\n &[data-expanded] > .content:hover {\n border-radius: var(--radius-lg) var(--radius-lg) 0 0;\n }\n }\n\n &[data-expanded] > .content .expandBtn {\n transform: rotate(180deg);\n }\n\n &[data-disabled] > .content {\n opacity: 0.6;\n cursor: not-allowed;\n &:hover { background-color: transparent; }\n }\n\n &:focus-visible {\n outline: none;\n & > .content {\n outline: 2px solid var(--color-primary);\n outline-offset: -2px;\n }\n }\n }\n\n .content {\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n padding: var(--spacing-sm) var(--spacing-md);\n padding-left: calc(var(--spacing-md) + var(--tree-item-indent));\n min-height: 44px;\n transition: background-color var(--duration-fast) var(--ease-out);\n &:hover { background-color: var(--color-neutral-100); }\n }\n\n .dragHandle {\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: grab;\n color: var(--color-neutral-400);\n padding: var(--spacing-xs);\n margin: calc(-1 * var(--spacing-xs));\n border-radius: var(--radius-sm);\n flex-shrink: 0;\n transition: color var(--duration-fast) var(--ease-out), background-color var(--duration-fast) var(--ease-out);\n &:hover { color: var(--color-neutral-500); background-color: var(--color-neutral-200); }\n }\n\n .indent { width: 0; flex-shrink: 0; }\n\n .checkbox { flex-shrink: 0; }\n\n .slotsWrapper {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 1;\n gap: var(--spacing-sm);\n min-width: 0;\n }\n\n .label {\n flex: 1;\n font-size: var(--text-sm);\n color: var(--color-neutral-500);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .meta {\n font-size: var(--text-sm);\n color: var(--color-neutral-400);\n flex-shrink: 0;\n }\n\n .expandBtn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: none;\n background: transparent;\n border-radius: var(--radius-sm);\n cursor: pointer;\n color: var(--color-neutral-400);\n flex-shrink: 0;\n margin-left: auto;\n transition: color var(--duration-fast) var(--ease-out), background-color var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out);\n\n &:hover { background-color: var(--color-neutral-200); color: var(--color-neutral-500); }\n &:focus-visible { outline: 2px solid var(--color-primary); outline-offset: -2px; }\n &:disabled { cursor: not-allowed; opacity: 0.6; }\n }\n\n .expandPlaceholder { width: 28px; height: 28px; flex-shrink: 0; }\n\n .childrenSlot {\n display: block;\n width: 100%;\n &[hidden] { display: none; }\n }\n}\n","import type { DragEvent, KeyboardEvent, ReactNode } from \"react\";\nimport { useRef } from \"react\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Icon } from \"../Icon\";\nimport styles from \"./TreeItem.module.css\";\nimport type { TreeItemData } from \"./treeTypes\";\n\nexport interface TreeItemDragPayload {\n\tevent: globalThis.DragEvent;\n\titem: TreeItemData;\n\tparentId: string | number | null;\n}\n\nexport interface TreeItemProps {\n\titem: TreeItemData;\n\tlevel?: number;\n\texpanded?: boolean;\n\tselected?: boolean;\n\tdraggable?: boolean;\n\tselectable?: boolean;\n\thasChildren?: boolean;\n\tindentSize?: number;\n\tparentId?: string | number | null;\n\tbordered?: boolean;\n\tflatIndex?: number;\n\tstriped?: boolean;\n\tonToggleExpand: (id: string | number) => void;\n\tonToggleSelect: (id: string | number) => void;\n\tonDragStart?: (payload: TreeItemDragPayload) => void;\n\tonDragEnd?: (payload: { event: globalThis.DragEvent; item: TreeItemData }) => void;\n\tonDragOver?: (payload: TreeItemDragPayload) => void;\n\tonDragLeave?: (payload: { event: globalThis.DragEvent; item: TreeItemData }) => void;\n\tonDrop?: (payload: TreeItemDragPayload) => void;\n\tchildren?: ReactNode;\n\t\"data-testid\"?: string;\n\tlabelSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tmetaSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tprefixSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tsuffixSlot?: (item: TreeItemData, level: number) => ReactNode;\n}\n\nfunction on(v: boolean | undefined): \"\" | undefined {\n\treturn v ? \"\" : undefined;\n}\n\nfunction isEditableTarget(target: HTMLElement): boolean {\n\treturn [\"INPUT\", \"TEXTAREA\", \"SELECT\"].includes(target.tagName) || target.isContentEditable;\n}\n\nfunction isArrowToggle(key: string, hasChildren: boolean, expanded: boolean): boolean {\n\tif (key === \"ArrowRight\") return hasChildren && !expanded;\n\tif (key === \"ArrowLeft\") return hasChildren && expanded;\n\treturn false;\n}\n\nfunction handleTreeKeyDown(\n\te: KeyboardEvent<HTMLDivElement>,\n\titem: TreeItemData,\n\thasChildren: boolean,\n\texpanded: boolean,\n\tselectable: boolean,\n\tonToggleExpand: (id: string | number) => void,\n\tonToggleSelect: (id: string | number) => void,\n) {\n\tif (item.disabled || isEditableTarget(e.target as HTMLElement)) return;\n\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\te.preventDefault();\n\t\tif (hasChildren) onToggleExpand(item.id);\n\t\telse if (selectable) onToggleSelect(item.id);\n\t\treturn;\n\t}\n\tif (isArrowToggle(e.key, hasChildren, expanded)) {\n\t\te.preventDefault();\n\t\tonToggleExpand(item.id);\n\t}\n}\n\nfunction buildDragHandlers(\n\titem: TreeItemData,\n\tparentId: string | number | null,\n\tdraggable: boolean,\n\tdraggingFromHandle: React.MutableRefObject<boolean>,\n\tonDragStart?: (payload: TreeItemDragPayload) => void,\n\tonDragEnd?: (payload: { event: globalThis.DragEvent; item: TreeItemData }) => void,\n\tonDragOver?: (payload: TreeItemDragPayload) => void,\n\tonDragLeave?: (payload: { event: globalThis.DragEvent; item: TreeItemData }) => void,\n\tonDrop?: (payload: TreeItemDragPayload) => void,\n) {\n\treturn {\n\t\thandleDragStart(e: DragEvent) {\n\t\t\tif (!draggingFromHandle.current) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.dataTransfer.setData(\"application/json\", JSON.stringify({ id: item.id, parentId }));\n\t\t\te.dataTransfer.effectAllowed = \"move\";\n\t\t\tonDragStart?.({ event: e.nativeEvent, item, parentId });\n\t\t},\n\t\thandleDragEnd(e: DragEvent) {\n\t\t\tdraggingFromHandle.current = false;\n\t\t\tonDragEnd?.({ event: e.nativeEvent, item });\n\t\t},\n\t\thandleDragOver(e: DragEvent) {\n\t\t\tif (!draggable) return;\n\t\t\te.preventDefault();\n\t\t\te.dataTransfer.dropEffect = \"move\";\n\t\t\tonDragOver?.({ event: e.nativeEvent, item, parentId });\n\t\t},\n\t\thandleDragLeave(e: DragEvent) {\n\t\t\tonDragLeave?.({ event: e.nativeEvent, item });\n\t\t},\n\t\thandleDrop(e: DragEvent) {\n\t\t\te.preventDefault();\n\t\t\tonDrop?.({ event: e.nativeEvent, item, parentId });\n\t\t},\n\t};\n}\n\nfunction TreeItemSlots({\n\titem,\n\tlevel,\n\tselectable,\n\tselected,\n\tprefixSlot,\n\tlabelSlot,\n\tmetaSlot,\n\tsuffixSlot,\n\tonToggleSelect,\n}: {\n\titem: TreeItemData;\n\tlevel: number;\n\tselectable: boolean;\n\tselected: boolean;\n\tprefixSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tlabelSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tmetaSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tsuffixSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tonToggleSelect: (id: string | number) => void;\n}) {\n\treturn (\n\t\t<>\n\t\t\t{selectable && (\n\t\t\t\t<Checkbox\n\t\t\t\t\tchecked={selected}\n\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\tclassName={styles.checkbox}\n\t\t\t\t\tonChange={() => !item.disabled && onToggleSelect(item.id)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{prefixSlot?.(item, level)}\n\t\t\t<div className={styles.slotsWrapper}>\n\t\t\t\t{labelSlot ? (\n\t\t\t\t\tlabelSlot(item, level)\n\t\t\t\t) : (\n\t\t\t\t\t<span className={styles.label} data-testid=\"tree-item-label\">\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{metaSlot\n\t\t\t\t\t? metaSlot(item, level)\n\t\t\t\t\t: item.meta && <span className={styles.meta}>{item.meta}</span>}\n\t\t\t\t{suffixSlot?.(item, level)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport function TreeItem({\n\titem,\n\tlevel = 0,\n\texpanded = false,\n\tselected = false,\n\tdraggable = false,\n\tselectable = false,\n\thasChildren = false,\n\tindentSize = 24,\n\tparentId = null,\n\tbordered = false,\n\tflatIndex = 0,\n\tstriped = false,\n\tonToggleExpand,\n\tonToggleSelect,\n\tonDragStart,\n\tonDragEnd,\n\tonDragOver,\n\tonDragLeave,\n\tonDrop,\n\tchildren,\n\t\"data-testid\": dataTestId,\n\tlabelSlot,\n\tmetaSlot,\n\tprefixSlot,\n\tsuffixSlot,\n}: TreeItemProps) {\n\tconst draggingFromHandle = useRef(false);\n\n\tconst handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) =>\n\t\thandleTreeKeyDown(e, item, hasChildren, expanded, selectable, onToggleExpand, onToggleSelect);\n\n\tconst dragHandlers = buildDragHandlers(\n\t\titem,\n\t\tparentId,\n\t\tdraggable,\n\t\tdraggingFromHandle,\n\t\tonDragStart,\n\t\tonDragEnd,\n\t\tonDragOver,\n\t\tonDragLeave,\n\t\tonDrop,\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.treeItem}\n\t\t\tstyle={{ \"--tree-item-indent\": `${level * indentSize}px` } as React.CSSProperties}\n\t\t\tdata-level={level}\n\t\t\tdata-expanded={on(expanded)}\n\t\t\tdata-selected={on(selected)}\n\t\t\tdata-disabled={on(item.disabled)}\n\t\t\tdata-has-children={on(hasChildren)}\n\t\t\tdata-bordered={on(bordered)}\n\t\t\tdata-striped={on(striped)}\n\t\t\tdata-odd-row={on(striped && flatIndex % 2 === 1)}\n\t\t\tdata-testid={dataTestId}\n\t\t\trole=\"treeitem\"\n\t\t\taria-level={level + 1}\n\t\t\taria-expanded={hasChildren ? expanded : undefined}\n\t\t\taria-selected={selectable ? selected : undefined}\n\t\t\taria-disabled={item.disabled}\n\t\t\ttabIndex={0}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\tonMouseUp={() => {\n\t\t\t\tdraggingFromHandle.current = false;\n\t\t\t}}\n\t\t>\n\t\t\t{/* biome-ignore lint/a11y/noStaticElementInteractions: drag-and-drop container captures native DnD events; keyboard interaction is on the parent treeitem */}\n\t\t\t<div\n\t\t\t\tclassName={styles.content}\n\t\t\t\tdraggable={draggable && !item.disabled}\n\t\t\t\tonDragStart={dragHandlers.handleDragStart}\n\t\t\t\tonDragEnd={dragHandlers.handleDragEnd}\n\t\t\t\tonDragOver={dragHandlers.handleDragOver}\n\t\t\t\tonDragLeave={dragHandlers.handleDragLeave}\n\t\t\t\tonDrop={dragHandlers.handleDrop}\n\t\t\t>\n\t\t\t\t{draggable && (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={styles.dragHandle}\n\t\t\t\t\t\tdata-testid=\"tree-item-drag-handle\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tdraggingFromHandle.current = true;\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonTouchStart={(e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tdraggingFromHandle.current = true;\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"drag-handle-outline\" size={18} />\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\n\t\t\t\t<div className={styles.indent} aria-hidden=\"true\" />\n\n\t\t\t\t<TreeItemSlots\n\t\t\t\t\titem={item}\n\t\t\t\t\tlevel={level}\n\t\t\t\t\tselectable={selectable}\n\t\t\t\t\tselected={selected}\n\t\t\t\t\tprefixSlot={prefixSlot}\n\t\t\t\t\tlabelSlot={labelSlot}\n\t\t\t\t\tmetaSlot={metaSlot}\n\t\t\t\t\tsuffixSlot={suffixSlot}\n\t\t\t\t\tonToggleSelect={onToggleSelect}\n\t\t\t\t/>\n\n\t\t\t\t{hasChildren ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.expandBtn}\n\t\t\t\t\t\taria-expanded={expanded}\n\t\t\t\t\t\taria-label={expanded ? \"Collapse\" : \"Expand\"}\n\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tonToggleExpand(item.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"chevron-down-outline\" size={16} />\n\t\t\t\t\t</button>\n\t\t\t\t) : (\n\t\t\t\t\t<span className={styles.expandPlaceholder} aria-hidden=\"true\" />\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{hasChildren && (\n\t\t\t\t<div className={styles.childrenSlot} hidden={!expanded}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","@layer ds-components {\n .treeList {\n display: flex;\n flex-direction: column;\n width: 100%;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport { TreeItem } from \"../TreeItem/TreeItem\";\nimport type { TreeItemData } from \"../TreeItem/treeTypes\";\nimport styles from \"./TreeList.module.css\";\n\nexport interface TreeListProps {\n\titems?: TreeItemData[];\n\tdraggable?: boolean;\n\texpandedIds?: (string | number)[];\n\tselectedIds?: (string | number)[];\n\tselectable?: boolean;\n\tindentSize?: number;\n\tbordered?: boolean;\n\tstriped?: boolean;\n\tonExpandChange?: (expandedIds: (string | number)[]) => void;\n\tonSelectChange?: (selectedIds: (string | number)[]) => void;\n\tonReorder?: (payload: {\n\t\titemId: string | number;\n\t\tfromParentId: string | number | null;\n\t\ttoParentId: string | number | null;\n\t\tfromIndex: number;\n\t\ttoIndex: number;\n\t}) => void;\n\tlabelSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tmetaSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tprefixSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tsuffixSlot?: (item: TreeItemData, level: number) => ReactNode;\n\t\"data-testid\"?: string;\n}\n\nfunction findItemById(items: TreeItemData[], id: string | number): TreeItemData | null {\n\tfor (const item of items) {\n\t\tif (item.id === id) return item;\n\t\tif (item.children) {\n\t\t\tconst found = findItemById(item.children, id);\n\t\t\tif (found) return found;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction buildFlatIndexMap(\n\titems: TreeItemData[],\n\texpandedIds: (string | number)[],\n): Map<string | number, number> {\n\tconst map = new Map<string | number, number>();\n\tlet idx = 0;\n\tfunction traverse(list: TreeItemData[]) {\n\t\tfor (const item of list) {\n\t\t\tmap.set(item.id, idx++);\n\t\t\tif (item.children?.length && expandedIds.includes(item.id)) traverse(item.children);\n\t\t}\n\t}\n\ttraverse(items);\n\treturn map;\n}\n\ninterface RecursiveProps {\n\titems: TreeItemData[];\n\tparentId: string | number | null;\n\tlevel: number;\n\texpandedIds: (string | number)[];\n\tselectedIds: (string | number)[];\n\tflatIndexMap: Map<string | number, number>;\n\tdraggable: boolean;\n\tselectable: boolean;\n\tbordered: boolean;\n\tstriped: boolean;\n\tindentSize: number;\n\tonToggleExpand: (id: string | number) => void;\n\tonToggleSelect: (id: string | number) => void;\n\tonDragStart: (p: {\n\t\tevent: globalThis.DragEvent;\n\t\titem: TreeItemData;\n\t\tparentId: string | number | null;\n\t}) => void;\n\tonDragEnd: (p: { event: globalThis.DragEvent; item: TreeItemData }) => void;\n\tonDragOver: (p: {\n\t\tevent: globalThis.DragEvent;\n\t\titem: TreeItemData;\n\t\tparentId: string | number | null;\n\t}) => void;\n\tonDrop: (p: {\n\t\tevent: globalThis.DragEvent;\n\t\titem: TreeItemData;\n\t\tparentId: string | number | null;\n\t}) => void;\n\tlabelSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tmetaSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tprefixSlot?: (item: TreeItemData, level: number) => ReactNode;\n\tsuffixSlot?: (item: TreeItemData, level: number) => ReactNode;\n}\n\nfunction TreeListRecursive(props: RecursiveProps): ReactNode {\n\tconst { items, parentId, level, expandedIds, selectedIds, flatIndexMap } = props;\n\treturn items.map((item) => {\n\t\tconst hasChildren = Boolean(item.children?.length);\n\t\tconst isExpanded = expandedIds.includes(item.id);\n\t\treturn (\n\t\t\t<TreeItem\n\t\t\t\tkey={item.id}\n\t\t\t\titem={item}\n\t\t\t\tlevel={level}\n\t\t\t\tparentId={parentId}\n\t\t\t\texpanded={isExpanded}\n\t\t\t\tselected={selectedIds.includes(item.id)}\n\t\t\t\tdraggable={props.draggable}\n\t\t\t\tselectable={props.selectable}\n\t\t\t\tbordered={props.bordered}\n\t\t\t\tstriped={props.striped}\n\t\t\t\tflatIndex={flatIndexMap.get(item.id) ?? 0}\n\t\t\t\thasChildren={hasChildren}\n\t\t\t\tindentSize={props.indentSize}\n\t\t\t\tonToggleExpand={props.onToggleExpand}\n\t\t\t\tonToggleSelect={props.onToggleSelect}\n\t\t\t\tonDragStart={props.onDragStart}\n\t\t\t\tonDragEnd={props.onDragEnd}\n\t\t\t\tonDragOver={props.onDragOver}\n\t\t\t\tonDrop={props.onDrop}\n\t\t\t\tlabelSlot={props.labelSlot}\n\t\t\t\tmetaSlot={props.metaSlot}\n\t\t\t\tprefixSlot={props.prefixSlot}\n\t\t\t\tsuffixSlot={props.suffixSlot}\n\t\t\t>\n\t\t\t\t{hasChildren && isExpanded && item.children && (\n\t\t\t\t\t<TreeListRecursive\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\titems={item.children}\n\t\t\t\t\t\tparentId={item.id}\n\t\t\t\t\t\tlevel={level + 1}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</TreeItem>\n\t\t);\n\t});\n}\n\nexport function TreeList({\n\titems = [],\n\tdraggable = false,\n\texpandedIds: controlledExpandedIds,\n\tselectedIds: controlledSelectedIds,\n\tselectable = false,\n\tindentSize = 24,\n\tbordered = false,\n\tstriped = false,\n\tonExpandChange,\n\tonSelectChange,\n\tonReorder,\n\tlabelSlot,\n\tmetaSlot,\n\tprefixSlot,\n\tsuffixSlot,\n\t\"data-testid\": dataTestId,\n}: TreeListProps) {\n\tconst [internalExpanded, setInternalExpanded] = useState<(string | number)[]>([]);\n\tconst [internalSelected, setInternalSelected] = useState<(string | number)[]>([]);\n\tconst dragStateRef = useRef<{ itemId: string | number; parentId: string | number | null } | null>(\n\t\tnull,\n\t);\n\n\tconst expandedIds = controlledExpandedIds ?? internalExpanded;\n\tconst selectedIds = controlledSelectedIds ?? internalSelected;\n\tconst flatIndexMap = useMemo(() => buildFlatIndexMap(items, expandedIds), [items, expandedIds]);\n\n\tconst toggleExpand = useCallback(\n\t\t(id: string | number) => {\n\t\t\tconst next = expandedIds.includes(id)\n\t\t\t\t? expandedIds.filter((i) => i !== id)\n\t\t\t\t: [...expandedIds, id];\n\t\t\tif (!controlledExpandedIds) setInternalExpanded(next);\n\t\t\tonExpandChange?.(next);\n\t\t},\n\t\t[expandedIds, controlledExpandedIds, onExpandChange],\n\t);\n\n\tconst toggleSelect = useCallback(\n\t\t(id: string | number) => {\n\t\t\tconst next = selectedIds.includes(id)\n\t\t\t\t? selectedIds.filter((i) => i !== id)\n\t\t\t\t: [...selectedIds, id];\n\t\t\tif (!controlledSelectedIds) setInternalSelected(next);\n\t\t\tonSelectChange?.(next);\n\t\t},\n\t\t[selectedIds, controlledSelectedIds, onSelectChange],\n\t);\n\n\tconst handleDragStart = useCallback(\n\t\t(payload: {\n\t\t\tevent: globalThis.DragEvent;\n\t\t\titem: TreeItemData;\n\t\t\tparentId: string | number | null;\n\t\t}) => {\n\t\t\tdragStateRef.current = { itemId: payload.item.id, parentId: payload.parentId };\n\t\t},\n\t\t[],\n\t);\n\n\tconst handleDragEnd = useCallback((_p: { event: globalThis.DragEvent; item: TreeItemData }) => {\n\t\tdragStateRef.current = null;\n\t}, []);\n\n\tconst handleDragOver = useCallback(\n\t\t(payload: {\n\t\t\tevent: globalThis.DragEvent;\n\t\t\titem: TreeItemData;\n\t\t\tparentId: string | number | null;\n\t\t}) => {\n\t\t\tconst state = dragStateRef.current;\n\t\t\tif (!state || state.parentId !== payload.parentId) {\n\t\t\t\tif (payload.event.dataTransfer) payload.event.dataTransfer.dropEffect = \"none\";\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\tconst handleDrop = useCallback(\n\t\t(payload: {\n\t\t\tevent: globalThis.DragEvent;\n\t\t\titem: TreeItemData;\n\t\t\tparentId: string | number | null;\n\t\t}) => {\n\t\t\tconst state = dragStateRef.current;\n\t\t\tif (!state || state.parentId !== payload.parentId) return;\n\n\t\t\tconst sourceId = state.itemId;\n\t\t\tconst targetId = payload.item.id;\n\t\t\tif (sourceId === targetId) return;\n\n\t\t\tconst parentArray =\n\t\t\t\tpayload.parentId === null ? items : findItemById(items, payload.parentId)?.children;\n\n\t\t\tif (!parentArray) return;\n\n\t\t\tconst fromIndex = parentArray.findIndex((i) => i.id === sourceId);\n\t\t\tconst toIndex = parentArray.findIndex((i) => i.id === targetId);\n\t\t\tif (fromIndex === -1 || toIndex === -1) return;\n\n\t\t\tonReorder?.({\n\t\t\t\titemId: sourceId,\n\t\t\t\tfromParentId: payload.parentId,\n\t\t\t\ttoParentId: payload.parentId,\n\t\t\t\tfromIndex,\n\t\t\t\ttoIndex,\n\t\t\t});\n\t\t},\n\t\t[items, onReorder],\n\t);\n\n\tconst recursiveProps: RecursiveProps = {\n\t\titems,\n\t\tparentId: null,\n\t\tlevel: 0,\n\t\texpandedIds,\n\t\tselectedIds,\n\t\tflatIndexMap,\n\t\tdraggable,\n\t\tselectable,\n\t\tbordered,\n\t\tstriped,\n\t\tindentSize,\n\t\tonToggleExpand: toggleExpand,\n\t\tonToggleSelect: toggleSelect,\n\t\tonDragStart: handleDragStart,\n\t\tonDragEnd: handleDragEnd,\n\t\tonDragOver: handleDragOver,\n\t\tonDrop: handleDrop,\n\t\tlabelSlot,\n\t\tmetaSlot,\n\t\tprefixSlot,\n\t\tsuffixSlot,\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.treeList}\n\t\t\trole=\"tree\"\n\t\t\tdata-draggable={draggable ? \"\" : undefined}\n\t\t\tdata-testid={dataTestId}\n\t\t>\n\t\t\t<TreeListRecursive {...recursiveProps} />\n\t\t</div>\n\t);\n}\n","@layer ds-layouts {\n .header {\n min-height: 50px;\n width: 100%;\n max-width: 1440px;\n display: flex;\n align-items: flex-start;\n margin: auto;\n padding: 10px 16px;\n }\n\n .titleSection {\n flex: 0 0 48%;\n text-align: left;\n }\n\n .title {\n font-weight: 300;\n font-size: 28px;\n color: var(--ds-ang-primary);\n line-height: 30px;\n }\n\n .actions {\n flex: 0 0 50%;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n @media (max-width: 780px) {\n .header {\n flex-direction: column;\n align-items: center;\n }\n\n .titleSection {\n flex: none;\n width: 98%;\n text-align: center;\n margin-bottom: 20px;\n }\n\n .actions {\n flex: none;\n width: 98%;\n justify-content: center;\n }\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./AdminPageHeader.module.css\";\n\nexport interface AdminPageHeaderProps {\n\ttitle: string;\n\tactions?: ReactNode;\n}\n\nexport function AdminPageHeader({ title, actions }: AdminPageHeaderProps) {\n\treturn (\n\t\t<header className={styles.header}>\n\t\t\t<div className={styles.titleSection}>\n\t\t\t\t<span className={styles.title}>{title}</span>\n\t\t\t</div>\n\t\t\t{actions && <div className={styles.actions}>{actions}</div>}\n\t\t</header>\n\t);\n}\n","@layer ang-components {\n .shell {\n display: flex;\n flex-direction: column;\n height: 100dvh;\n width: 100%;\n overflow: hidden;\n }\n\n .body {\n display: flex;\n flex: 1;\n overflow: hidden;\n }\n\n .sidebarSlot {\n display: contents;\n }\n\n .contentArea {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n }\n\n .main {\n flex: 1;\n overflow: auto;\n position: relative;\n }\n\n .tabBarSlot {\n flex-shrink: 0;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { NavBar } from \"../../components/NavBar\";\nimport { PinLockOverlay } from \"../../components/PinLockOverlay\";\nimport styles from \"./AppShell.module.css\";\n\nexport interface AppShellProps {\n\trestaurantName: string;\n\tonMenuToggle: () => void;\n\tonLogoClick: () => void;\n\tonRightToggle: () => void;\n\tsidebar: ReactNode;\n\tchildren: ReactNode;\n\ttabBar?: ReactNode;\n\theaderRight?: ReactNode;\n\tisPinLocked?: boolean;\n\tpinLockContent?: ReactNode;\n\tisLoading?: boolean;\n}\n\nexport function AppShell({\n\trestaurantName,\n\tonMenuToggle,\n\tonLogoClick,\n\tonRightToggle,\n\tsidebar,\n\tchildren,\n\ttabBar,\n\theaderRight,\n\tisPinLocked = false,\n\tpinLockContent,\n\tisLoading = false,\n}: AppShellProps) {\n\tif (isPinLocked) {\n\t\treturn <PinLockOverlay isLocked>{pinLockContent}</PinLockOverlay>;\n\t}\n\n\treturn (\n\t\t<div className={styles.shell}>\n\t\t\t<NavBar\n\t\t\t\trestaurantName={restaurantName}\n\t\t\t\tonMenuToggle={onMenuToggle}\n\t\t\t\tonLogoClick={onLogoClick}\n\t\t\t\tonRightToggle={onRightToggle}\n\t\t\t\tisLoading={isLoading}\n\t\t\t\trightSlot={headerRight}\n\t\t\t/>\n\t\t\t<div className={styles.body}>\n\t\t\t\t<div className={styles.sidebarSlot}>{sidebar}</div>\n\t\t\t\t<div className={styles.contentArea}>\n\t\t\t\t\t<main className={styles.main}>{children}</main>\n\t\t\t\t\t{tabBar && <div className={styles.tabBarSlot}>{tabBar}</div>}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n",".divider {\n border: none;\n background-color: var(--color-border, var(--color-neutral-200));\n flex-shrink: 0;\n}\n\n.divider[data-orientation='horizontal'] {\n width: 100%;\n height: 1px;\n}\n\n.divider[data-orientation='vertical'] {\n height: 100%;\n width: 1px;\n align-self: stretch;\n}\n\n.divider[data-spacing='sm'] {\n margin: var(--spacing-sm) 0;\n}\n\n.divider[data-orientation='vertical'][data-spacing='sm'] {\n margin: 0 var(--spacing-sm);\n}\n\n.divider[data-spacing='md'] {\n margin: var(--spacing-md) 0;\n}\n\n.divider[data-orientation='vertical'][data-spacing='md'] {\n margin: 0 var(--spacing-md);\n}\n\n.divider[data-spacing='lg'] {\n margin: var(--spacing-lg) 0;\n}\n\n.divider[data-orientation='vertical'][data-spacing='lg'] {\n margin: 0 var(--spacing-lg);\n}\n","import styles from \"./Divider.module.css\";\n\nexport interface DividerProps {\n\torientation?: \"horizontal\" | \"vertical\";\n\tspacing?: \"sm\" | \"md\" | \"lg\";\n\tclassName?: string;\n}\n\nexport function Divider({ orientation = \"horizontal\", spacing = \"md\", className }: DividerProps) {\n\treturn (\n\t\t<hr\n\t\t\tclassName={[styles.divider, className].filter(Boolean).join(\" \")}\n\t\t\tdata-orientation={orientation}\n\t\t\tdata-spacing={spacing}\n\t\t\taria-orientation={orientation}\n\t\t/>\n\t);\n}\n","@layer ds-layouts {\n .grid {\n display: grid;\n grid-template-columns: var(--grid-columns, repeat(1, minmax(0, 1fr)));\n gap: var(--grid-gap, var(--ds-space-3));\n }\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport styles from \"./Grid.module.css\";\n\nexport type GridGap = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface GridProps {\n\tcolumns?: number | string;\n\tgap?: GridGap;\n\tchildren: ReactNode;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n}\n\nconst GAP_MAP: Record<GridGap, string> = {\n\txs: \"var(--ds-space-1)\",\n\tsm: \"var(--ds-space-2)\",\n\tmd: \"var(--ds-space-3)\",\n\tlg: \"var(--ds-space-4)\",\n\txl: \"var(--ds-space-6)\",\n};\n\nexport function Grid({ columns = 1, gap = \"md\", children, className, style }: GridProps) {\n\tconst gridTemplateColumns =\n\t\ttypeof columns === \"number\" ? `repeat(${columns}, minmax(0, 1fr))` : columns;\n\n\tconst gridStyle: CSSProperties = {\n\t\t\"--grid-columns\": gridTemplateColumns,\n\t\t\"--grid-gap\": GAP_MAP[gap],\n\t\t...style,\n\t} as CSSProperties;\n\n\treturn (\n\t\t<div className={[styles.grid, className].filter(Boolean).join(\" \")} style={gridStyle}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","@layer ds-layouts {\n .page {\n text-align: center;\n background: #ffffff;\n color: var(--ds-ang-secondary);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 100dvh;\n min-width: 100dvw;\n gap: 1rem;\n position: relative;\n background-image: url(\"/assets/angular/dsBgBottom.svg\");\n background-position: bottom;\n background-repeat: no-repeat;\n background-size: contain;\n font-size: var(--ds-ang-font-size-base);\n }\n\n @media (min-width: 768px) {\n .page {\n background-image: url(\"/assets/angular/login-background-default.svg\");\n background-position: right top;\n background-repeat: no-repeat;\n background-size: 30% auto;\n }\n\n .page::after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 0;\n width: 30%;\n height: 100%;\n background-image: url(\"/assets/angular/login-background-default.svg\");\n background-position: left 40px;\n background-repeat: no-repeat;\n background-size: 100% auto;\n transform: rotate(180deg);\n z-index: 0;\n }\n }\n\n .card {\n position: relative;\n z-index: 1;\n background-color: transparent;\n border-radius: 1rem;\n padding: 2rem 1rem;\n width: 100%;\n max-width: 460px;\n animation: cardEntrance 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) 0.1s both;\n }\n\n @media (min-width: 768px) {\n .card {\n background-color: #ffffff;\n border-radius: 16px;\n border: 1px solid var(--ds-ang-neutral-200);\n box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);\n }\n }\n}\n\n@keyframes cardEntrance {\n from {\n opacity: 0;\n transform: scale(0.95) translateY(10px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n\t.card {\n\t\tanimation: none;\n\t}\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./LoginPageLayout.module.css\";\n\nexport interface LoginPageLayoutProps {\n\tchildren: ReactNode;\n}\n\nexport function LoginPageLayout({ children }: LoginPageLayoutProps) {\n\treturn (\n\t\t<main className={styles.page}>\n\t\t\t<div className={styles.card}>{children}</div>\n\t\t</main>\n\t);\n}\n","@layer ds-layouts {\n .root {\n display: grid;\n grid-template-columns: var(--ds-sidebar-width) 1fr;\n grid-template-rows: 1fr;\n min-height: 100vh;\n transition: grid-template-columns var(--ds-duration-base) var(--ds-ease-out);\n\n /* Collapsed sidebar */\n &[data-sidebar-collapsed] {\n grid-template-columns: var(--ds-sidebar-collapsed-width) 1fr;\n }\n\n /* Hide sidebar on mobile */\n @media (max-width: 768px) {\n grid-template-columns: 1fr;\n }\n }\n\n .sidebar {\n grid-row: 1;\n grid-column: 1;\n position: sticky;\n top: 0;\n height: 100vh;\n overflow-y: auto;\n overflow-x: hidden;\n background-color: var(--ds-color-surface);\n border-right: 1px solid var(--ds-color-border);\n z-index: var(--ds-z-sticky);\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n\n .main {\n grid-row: 1;\n grid-column: 2;\n display: grid;\n grid-template-rows: auto 1fr;\n min-height: 100vh;\n overflow: hidden;\n\n @media (max-width: 768px) {\n grid-column: 1;\n }\n }\n\n .header {\n grid-row: 1;\n position: sticky;\n top: 0;\n height: var(--ds-header-height);\n background-color: var(--ds-color-surface);\n border-bottom: 1px solid var(--ds-color-border);\n z-index: var(--ds-z-raised);\n display: flex;\n align-items: center;\n }\n\n .content {\n grid-row: 2;\n padding: var(--ds-space-6);\n overflow-y: auto;\n }\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./PageLayout.module.css\";\n\nexport interface PageLayoutProps {\n\tsidebar?: ReactNode;\n\theader?: ReactNode;\n\tchildren: ReactNode;\n\tcollapsed?: boolean;\n\tclassName?: string;\n}\n\nexport function PageLayout({\n\tsidebar,\n\theader,\n\tchildren,\n\tcollapsed = false,\n\tclassName,\n}: PageLayoutProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={[styles.root, className].filter(Boolean).join(\" \")}\n\t\t\tdata-sidebar-collapsed={collapsed ? \"\" : undefined}\n\t\t>\n\t\t\t{sidebar && (\n\t\t\t\t<aside className={styles.sidebar} aria-label=\"Navegación lateral\">\n\t\t\t\t\t{sidebar}\n\t\t\t\t</aside>\n\t\t\t)}\n\t\t\t<div className={styles.main}>\n\t\t\t\t{header && <header className={styles.header}>{header}</header>}\n\t\t\t\t<main className={styles.content}>{children}</main>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import type { ComponentPropsWithoutRef, CSSProperties, ElementType, ReactNode } from \"react\";\n\nexport type StackDirection = \"vertical\" | \"horizontal\";\nexport type StackGap = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\nexport type StackAlign = \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\nexport type StackJustify = \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n\nexport interface StackProps<T extends ElementType = \"div\"> {\n\tas?: T;\n\tdirection?: StackDirection;\n\tgap?: StackGap;\n\talign?: StackAlign;\n\tjustify?: StackJustify;\n\twrap?: boolean;\n\tchildren: ReactNode;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n}\n\nconst GAP_MAP: Record<StackGap, string> = {\n\txs: \"var(--ds-space-1)\",\n\tsm: \"var(--ds-space-2)\",\n\tmd: \"var(--ds-space-3)\",\n\tlg: \"var(--ds-space-4)\",\n\txl: \"var(--ds-space-6)\",\n\t\"2xl\": \"var(--ds-space-8)\",\n};\n\nconst JUSTIFY_MAP: Record<StackJustify, string> = {\n\tstart: \"flex-start\",\n\tcenter: \"center\",\n\tend: \"flex-end\",\n\tbetween: \"space-between\",\n\taround: \"space-around\",\n\tevenly: \"space-evenly\",\n};\n\nconst ALIGN_MAP: Record<StackAlign, string> = {\n\tstart: \"flex-start\",\n\tcenter: \"center\",\n\tend: \"flex-end\",\n\tstretch: \"stretch\",\n\tbaseline: \"baseline\",\n};\n\nexport function Stack<T extends ElementType = \"div\">({\n\tas,\n\tdirection = \"vertical\",\n\tgap = \"md\",\n\talign,\n\tjustify,\n\twrap = false,\n\tchildren,\n\tclassName,\n\tstyle,\n\t...rest\n}: StackProps<T> & Omit<ComponentPropsWithoutRef<T>, keyof StackProps<T>>) {\n\tconst Component = (as ?? \"div\") as ElementType;\n\n\tconst stackStyle: CSSProperties = {\n\t\tdisplay: \"flex\",\n\t\tflexDirection: direction === \"vertical\" ? \"column\" : \"row\",\n\t\tgap: GAP_MAP[gap],\n\t\talignItems: align ? ALIGN_MAP[align] : undefined,\n\t\tjustifyContent: justify ? JUSTIFY_MAP[justify] : undefined,\n\t\tflexWrap: wrap ? \"wrap\" : undefined,\n\t\t...style,\n\t};\n\n\treturn (\n\t\t<Component className={className} style={stackStyle} {...rest}>\n\t\t\t{children}\n\t\t</Component>\n\t);\n}\n","import type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport function portal(children: ReactNode, container?: Element): ReturnType<typeof createPortal> {\n\treturn createPortal(children, container ?? document.body);\n}\n"],"mappings":"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Y,GAAwB,CACpC,qKACA,YACA,CAEY,GAA0B,CACtC,sHACA,YACA,CAEY,GAA4B,CACxC,8MACA,YACA,CAEY,GAA4B,CACxC,mYACA,YACA,CAEY,GAA4B,CACxC,6MACA,YACA,CAEY,GAA6B,CACzC,kYACA,YACA,CAEY,GAA6B,CACzC,iNACA,YACA,CAEY,GAA0B,CACtC,iNACA,YACA,CAEY,GAAsB,CAClC,mbACA,YACA,CAEY,GAAoB,CAChC,knBACA,YACA,CAEY,GAAqB,CACjC,oMACA,YACA,CAEY,GAA8B,CAC1C,0oBACA,YACA,CAEY,GAA4B,CACxC,ioBACA,YACA,CAEY,GAA4B,CACxC,koBACA,YACA,CAEY,GAA2B,CACvC,0gBACA,YACA,CAEY,GAAsB,CAClC,gyBACA,YACA,CAEY,GAAwB,CACpC,y1CACA,YACA,CAEY,GAAgC,CAC5C,4gBACA,YACA,CAEY,GAAoC,CAChD,2HACA,YACA,CAEY,GAAgC,CAC5C,wXACA,YACA,CAEY,GAA6B,CACzC,4tBACA,YACA,CAEY,GAA2B,CACvC,wMACA,YACA,CAEY,GAAwB,CACpC,gUACA,YACA,CAEY,GAAqB,CACjC,8YACA,YACA,CAEY,GAA2B,CACvC,kWACA,YACA,CAEY,GAAsB,CAClC,olBACA,YACA,CAEY,GAAsB,CAClC,shBACA,YACA,CAEY,GAA0B,CACtC,2tBACA,YACA,CAEY,GAAuB,CACnC,idACA,YACA,CAEY,GAAwB,CACpC,49BACA,YACA,CAEY,GAAuB,CACnC,uTACA,YACA,CAEY,GAAmB,CAC/B,6mBACA,YACA,CAEY,GAAmB,CAC/B,wkCACA,YACA,CAEY,GAAqB,CACjC,k2BACA,YACA,CAEY,GAAqB,CACjC,uZACA,YACA,CAEY,GAAuB,CACnC,ivCACA,YACA,CAEY,GAAoB,CAChC,6vBACA,YACA,CAEY,GAAsB,CAClC,0hBACA,YACA,CAEY,GAAwB,CACpC,wWACA,YACA,CAEY,GAAoB,CAChC,iYACA,YACA,CAEY,GAAwB,CACpC,q1BACA,YACA,CAEY,GAAmB,CAC/B,mjBACA,YACA,CAEY,GAAiC,CAC7C,4sBACA,YACA,CAEY,GAAwB,CACpC,2iBACA,YACA,CAEY,GAAwB,CACpC,ggBACA,YACA,CAEY,GAAwB,CACpC,2iBACA,YACA,CAEY,GAAwB,CACpC,ogBACA,YACA,CAEY,GAAwB,CACpC,mrBACA,YACA,CAEY,GAAmB,CAC/B,mhBACA,YACA,CAEY,GAAuB,CACnC,qiBACA,YACA,CAEY,GAAuB,CACnC,yIACA,YACA,CAEY,GAA+B,CAC3C,u2BACA,YACA,CAEY,GAA+B,CAC3C,k0BACA,YACA,CAEY,GAAoB,CAChC,0YACA,YACA,CAEY,GAA0B,CACtC,2PACA,YACA,CAEY,GAA8B,CAC1C,kTACA,YACA,CAEY,GAAoC,CAChD,4NACA,YACA,CAEY,GAA8B,CAC1C,4NACA,YACA,CAEY,GAAoB,CAChC,kJACA,YACA,CAEY,GAA0B,CACtC,qzDACA,YACA,CAEY,GAA0B,CACtC,6sCACA,YACA,CAEY,GAA0B,CACtC,6kBACA,YACA,CAEY,GAAiC,CAC7C,64BACA,YACA,CAEY,GAAkB,CAC9B,wWACA,YACA,CAEY,GAAmB,CAC/B,qbACA,YACA,CAEY,GAAsB,CAClC,0eACA,YACA,CAEY,GAAc,CAC1B,yfACA,YACA,CAEY,GAAqB,CACjC,i3CACA,YACA,CAEY,GAAmC,CAC/C,+PACA,YACA,CAEY,GAA6B,CACzC,+PACA,YACA,CAEY,GAAmB,CAC/B,wNACA,YACA,CAEY,GAAuB,CACnC,oyBACA,YACA,CAEY,GAAmC,CAC/C,+5DACA,YACA,CAEY,GAAmC,CAC/C,4vBACA,YACA,CAEY,GAAqC,CACjD,0oBACA,YACA,CAEY,GAA+B,CAC3C,qRACA,YACA,CAEY,GAAoC,CAChD,iIACA,YACA,CAEY,GAAsC,CAClD,oFACA,YACA,CAEY,GAA8B,CAC1C,weACA,YACA,CAEY,GAA8B,CAC1C,uRACA,YACA,CAEY,GAAsB,CAClC,6nDACA,YACA,CAEY,GAAsB,CAClC,6NACA,YACA,CAEY,GAAwB,CACpC,ssBACA,YACA,CAEY,GAA0B,CACtC,qxBACA,YACA,CAEY,GAA6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"}
|