smartsell-ui-kit 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1879 -1896
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +25 -18
- package/dist/index.d.ts +25 -18
- package/dist/index.js +1891 -1902
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","#style-inject:#style-inject","../src/styles/ui-kit.css","../src/styles/fonts.ts","../src/foundation/async.ts","../src/foundation/className.ts","../src/foundation/componentState.ts","../src/foundation/controlSize.ts","../src/foundation/shadow.ts","../src/foundation/shape.ts","../src/foundation/theme.ts","../src/components/Button.tsx","../src/components/Card.tsx","../src/components/CardSmall.tsx","../src/components/Checkbox.tsx","../src/components/ComposableModal.tsx","../src/components/Modal.tsx","../src/components/DatePicker.tsx","../src/components/Input.tsx","../src/components/Separator.tsx","../src/componentsBase/select/SelectBase.tsx","../src/componentsBase/select/utils.ts","../src/componentsBase/select/childrenAdapter.ts","../src/components/Select.tsx","../src/components/SelectAsync.tsx","../src/componentsBase/select/objectOptionsAdapter.tsx","../src/components/Table.tsx","../src/componentsBase/table/TableBase.tsx","../src/componentsBase/table/utils.ts","../src/componentsBase/table/downloads.ts","../src/components/TableAsync.tsx","../src/components/Textarea.tsx"],"sourcesContent":["import './styles/ui-kit.css';\n\nimport { injectUiKitFonts } from './styles/fonts';\n\ninjectUiKitFonts();\n\nexport { Button, type ButtonProps } from './components/Button';\nexport { Card, type CardProps } from './components/Card';\nexport { CardSmall, type CardSmallProps } from './components/CardSmall';\nexport { Checkbox, type CheckboxProps } from './components/Checkbox';\nexport {\n ComposableModal,\n createModalSlotIds,\n type ComposableModalProps,\n type ComposableModalSlotRenderProps,\n type ComposableModalSlotRenderer,\n type ModalSlotContext,\n type ModalSlotIds,\n} from './components/ComposableModal';\nexport {\n DatePicker,\n type DatePickerChangeContext,\n type DatePickerChangeReason,\n type DatePickerMode,\n type DatePickerProps,\n type DatePickerValue,\n} from './components/DatePicker';\nexport { Input, type InputProps } from './components/Input';\nexport {\n type ModalAction,\n Modal,\n type ModalProps,\n type ModalTheme,\n type ModalThemeSource,\n type StandardModalProps,\n} from './components/Modal';\nexport { Separator, type SeparatorOrientation, type SeparatorProps } from './components/Separator';\nexport { Select, type SelectProps } from './components/Select';\nexport {\n SelectAsync,\n type SelectAsyncLoadContext,\n type SelectAsyncLoadResult,\n type SelectAsyncOption,\n type SelectAsyncOptionValue,\n type SelectAsyncProps,\n} from './components/SelectAsync';\nexport {\n Table,\n type TableProps,\n} from './components/Table';\nexport {\n TableAsync,\n type TableAsyncProps,\n} from './components/TableAsync';\nexport type {\n SharedTableProps,\n TableAction,\n TableActionSource,\n TableActionTone,\n TableAsyncLoadContext,\n TableAsyncLoadResult,\n TableColumn,\n TableColumnAlign,\n TableColumnType,\n TableLabels,\n} from './componentsBase/table/types';\nexport type { ControlSize } from './foundation';\nexport { Textarea, type TextareaProps } from './components/Textarea';\nexport { useUiKitTheme, type UiKitTheme } from './foundation';","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\".ui-kit-sr-only {\\n position: absolute;\\n height: 1px;\\n width: 1px;\\n overflow: hidden;\\n white-space: nowrap;\\n border-width: 0px;\\n padding: 0px;\\n clip: rect(0, 0, 0, 0);\\n margin: -1px;\\n}\\n.pointer-events-none {\\n pointer-events: none;\\n}\\n.pointer-events-auto {\\n pointer-events: auto;\\n}\\n.visible {\\n visibility: visible;\\n}\\n.fixed {\\n position: fixed;\\n}\\n.absolute {\\n position: absolute;\\n}\\n.relative {\\n position: relative;\\n}\\n.sticky {\\n position: sticky;\\n}\\n.inset-0 {\\n inset: 0px;\\n}\\n.inset-y-0 {\\n top: 0px;\\n bottom: 0px;\\n}\\n.left-0 {\\n left: 0px;\\n}\\n.right-0 {\\n right: 0px;\\n}\\n.top-1\\\\/2 {\\n top: 50%;\\n}\\n.z-30 {\\n z-index: 30;\\n}\\n.z-\\\\[70\\\\] {\\n z-index: 70;\\n}\\n.m-0 {\\n margin: 0px;\\n}\\n.mb-\\\\[18px\\\\] {\\n margin-bottom: 18px;\\n}\\n.ml-1 {\\n margin-left: 0.25rem;\\n}\\n.ml-4 {\\n margin-left: 1rem;\\n}\\n.mr-1 {\\n margin-right: 0.25rem;\\n}\\n.mt-0 {\\n margin-top: 0px;\\n}\\n.mt-1 {\\n margin-top: 0.25rem;\\n}\\n.mt-px {\\n margin-top: 1px;\\n}\\n.box-border {\\n box-sizing: border-box;\\n}\\n.block {\\n display: block;\\n}\\n.inline {\\n display: inline;\\n}\\n.flex {\\n display: flex;\\n}\\n.inline-flex {\\n display: inline-flex;\\n}\\n.table {\\n display: table;\\n}\\n.grid {\\n display: grid;\\n}\\n.hidden {\\n display: none;\\n}\\n.h-14 {\\n height: 3.5rem;\\n}\\n.h-2 {\\n height: 0.5rem;\\n}\\n.h-5 {\\n height: 1.25rem;\\n}\\n.h-\\\\[30px\\\\] {\\n height: 30px;\\n}\\n.h-\\\\[34px\\\\] {\\n height: 34px;\\n}\\n.h-\\\\[38px\\\\] {\\n height: 38px;\\n}\\n.h-\\\\[42px\\\\] {\\n height: 42px;\\n}\\n.h-\\\\[52px\\\\] {\\n height: 52px;\\n}\\n.h-full {\\n height: 100%;\\n}\\n.max-h-\\\\[280px\\\\] {\\n max-height: 280px;\\n}\\n.min-h-0 {\\n min-height: 0px;\\n}\\n.min-h-20 {\\n min-height: 5rem;\\n}\\n.w-14 {\\n width: 3.5rem;\\n}\\n.w-2 {\\n width: 0.5rem;\\n}\\n.w-5 {\\n width: 1.25rem;\\n}\\n.w-\\\\[25px\\\\] {\\n width: 25px;\\n}\\n.w-\\\\[30px\\\\] {\\n width: 30px;\\n}\\n.w-\\\\[52px\\\\] {\\n width: 52px;\\n}\\n.w-auto {\\n width: auto;\\n}\\n.w-fit {\\n width: -moz-fit-content;\\n width: fit-content;\\n}\\n.w-full {\\n width: 100%;\\n}\\n.min-w-0 {\\n min-width: 0px;\\n}\\n.min-w-full {\\n min-width: 100%;\\n}\\n.max-w-fit {\\n max-width: -moz-fit-content;\\n max-width: fit-content;\\n}\\n.max-w-full {\\n max-width: 100%;\\n}\\n.max-w-none {\\n max-width: none;\\n}\\n.flex-1 {\\n flex: 1 1 0%;\\n}\\n.shrink-0 {\\n flex-shrink: 0;\\n}\\n.border-separate {\\n border-collapse: separate;\\n}\\n.border-spacing-0 {\\n --tw-border-spacing-x: 0px;\\n --tw-border-spacing-y: 0px;\\n border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);\\n}\\n.-translate-y-1\\\\/2 {\\n --tw-translate-y: -50%;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.transform {\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.cursor-default {\\n cursor: default;\\n}\\n.cursor-not-allowed {\\n cursor: not-allowed;\\n}\\n.cursor-pointer {\\n cursor: pointer;\\n}\\n.cursor-text {\\n cursor: text;\\n}\\n.select-none {\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.resize-y {\\n resize: vertical;\\n}\\n.resize {\\n resize: both;\\n}\\n.appearance-none {\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n}\\n.flex-col {\\n flex-direction: column;\\n}\\n.flex-wrap {\\n flex-wrap: wrap;\\n}\\n.items-start {\\n align-items: flex-start;\\n}\\n.items-center {\\n align-items: center;\\n}\\n.justify-start {\\n justify-content: flex-start;\\n}\\n.justify-end {\\n justify-content: flex-end;\\n}\\n.justify-center {\\n justify-content: center;\\n}\\n.justify-between {\\n justify-content: space-between;\\n}\\n.gap-0 {\\n gap: 0px;\\n}\\n.gap-1 {\\n gap: 0.25rem;\\n}\\n.gap-1\\\\.5 {\\n gap: 0.375rem;\\n}\\n.gap-2 {\\n gap: 0.5rem;\\n}\\n.gap-2\\\\.5 {\\n gap: 0.625rem;\\n}\\n.gap-3 {\\n gap: 0.75rem;\\n}\\n.gap-3\\\\.5 {\\n gap: 0.875rem;\\n}\\n.gap-4 {\\n gap: 1rem;\\n}\\n.self-stretch {\\n align-self: stretch;\\n}\\n.overflow-auto {\\n overflow: auto;\\n}\\n.overflow-hidden {\\n overflow: hidden;\\n}\\n.overflow-x-auto {\\n overflow-x: auto;\\n}\\n.overflow-y-auto {\\n overflow-y: auto;\\n}\\n.overflow-x-hidden {\\n overflow-x: hidden;\\n}\\n.overflow-y-hidden {\\n overflow-y: hidden;\\n}\\n.truncate {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.text-ellipsis {\\n text-overflow: ellipsis;\\n}\\n.whitespace-nowrap {\\n white-space: nowrap;\\n}\\n.rounded-2xl {\\n border-radius: 1rem;\\n}\\n.rounded-\\\\[0\\\\.4rem\\\\] {\\n border-radius: 0.4rem;\\n}\\n.rounded-\\\\[11px\\\\] {\\n border-radius: 11px;\\n}\\n.rounded-\\\\[14px\\\\] {\\n border-radius: 14px;\\n}\\n.rounded-\\\\[20px\\\\] {\\n border-radius: 20px;\\n}\\n.rounded-\\\\[24px\\\\] {\\n border-radius: 24px;\\n}\\n.rounded-\\\\[28px\\\\] {\\n border-radius: 28px;\\n}\\n.rounded-\\\\[30px\\\\] {\\n border-radius: 30px;\\n}\\n.rounded-full {\\n border-radius: 9999px;\\n}\\n.rounded-none {\\n border-radius: 0px;\\n}\\n.rounded-xl {\\n border-radius: 0.75rem;\\n}\\n.border {\\n border-width: 1px;\\n}\\n.border-0 {\\n border-width: 0px;\\n}\\n.border-2 {\\n border-width: 2px;\\n}\\n.border-b {\\n border-bottom-width: 1px;\\n}\\n.border-t {\\n border-top-width: 1px;\\n}\\n.border-solid {\\n border-style: solid;\\n}\\n.border-\\\\[var\\\\(--theme-negative\\\\)\\\\] {\\n border-color: var(--theme-negative);\\n}\\n.border-\\\\[var\\\\(--theme-primary\\\\)\\\\] {\\n border-color: var(--theme-primary);\\n}\\n.border-\\\\[var\\\\(--theme-secondary\\\\)\\\\] {\\n border-color: var(--theme-secondary);\\n}\\n.border-\\\\[var\\\\(--theme-textLight\\\\)\\\\] {\\n border-color: var(--theme-textLight);\\n}\\n.border-\\\\[var\\\\(--ui-kit-accent\\\\)\\\\] {\\n border-color: var(--ui-kit-accent);\\n}\\n.border-transparent {\\n border-color: transparent;\\n}\\n.bg-\\\\[color-mix\\\\(in_srgb\\\\,var\\\\(--ui-kit-accent\\\\)_24\\\\%\\\\,transparent\\\\)\\\\] {\\n background-color: color-mix(in srgb, var(--ui-kit-accent) 24%, transparent);\\n}\\n.bg-\\\\[var\\\\(--theme-primary\\\\)\\\\] {\\n background-color: var(--theme-primary);\\n}\\n.bg-\\\\[var\\\\(--theme-surface\\\\)\\\\] {\\n background-color: var(--theme-surface);\\n}\\n.bg-\\\\[var\\\\(--theme-text\\\\)\\\\] {\\n background-color: var(--theme-text);\\n}\\n.bg-\\\\[var\\\\(--ui-kit-accent\\\\)\\\\] {\\n background-color: var(--ui-kit-accent);\\n}\\n.bg-transparent {\\n background-color: transparent;\\n}\\n.p-0 {\\n padding: 0px;\\n}\\n.p-0\\\\.5 {\\n padding: 0.125rem;\\n}\\n.p-2 {\\n padding: 0.5rem;\\n}\\n.p-6 {\\n padding: 1.5rem;\\n}\\n.p-\\\\[18px\\\\] {\\n padding: 18px;\\n}\\n.px-1 {\\n padding-left: 0.25rem;\\n padding-right: 0.25rem;\\n}\\n.px-2 {\\n padding-left: 0.5rem;\\n padding-right: 0.5rem;\\n}\\n.px-3 {\\n padding-left: 0.75rem;\\n padding-right: 0.75rem;\\n}\\n.px-4 {\\n padding-left: 1rem;\\n padding-right: 1rem;\\n}\\n.px-5 {\\n padding-left: 1.25rem;\\n padding-right: 1.25rem;\\n}\\n.px-\\\\[1\\\\.15rem\\\\] {\\n padding-left: 1.15rem;\\n padding-right: 1.15rem;\\n}\\n.px-\\\\[10px\\\\] {\\n padding-left: 10px;\\n padding-right: 10px;\\n}\\n.px-\\\\[11px\\\\] {\\n padding-left: 11px;\\n padding-right: 11px;\\n}\\n.px-\\\\[13px\\\\] {\\n padding-left: 13px;\\n padding-right: 13px;\\n}\\n.px-\\\\[14px\\\\] {\\n padding-left: 14px;\\n padding-right: 14px;\\n}\\n.px-\\\\[18px\\\\] {\\n padding-left: 18px;\\n padding-right: 18px;\\n}\\n.py-2 {\\n padding-top: 0.5rem;\\n padding-bottom: 0.5rem;\\n}\\n.py-3 {\\n padding-top: 0.75rem;\\n padding-bottom: 0.75rem;\\n}\\n.py-\\\\[0\\\\.9rem\\\\] {\\n padding-top: 0.9rem;\\n padding-bottom: 0.9rem;\\n}\\n.py-\\\\[10px\\\\] {\\n padding-top: 10px;\\n padding-bottom: 10px;\\n}\\n.py-\\\\[11px\\\\] {\\n padding-top: 11px;\\n padding-bottom: 11px;\\n}\\n.py-\\\\[14px\\\\] {\\n padding-top: 14px;\\n padding-bottom: 14px;\\n}\\n.py-\\\\[18px\\\\] {\\n padding-top: 18px;\\n padding-bottom: 18px;\\n}\\n.py-\\\\[7px\\\\] {\\n padding-top: 7px;\\n padding-bottom: 7px;\\n}\\n.py-\\\\[9px\\\\] {\\n padding-top: 9px;\\n padding-bottom: 9px;\\n}\\n.pb-0\\\\.5 {\\n padding-bottom: 0.125rem;\\n}\\n.pb-1 {\\n padding-bottom: 0.25rem;\\n}\\n.pb-3 {\\n padding-bottom: 0.75rem;\\n}\\n.pb-4 {\\n padding-bottom: 1rem;\\n}\\n.pb-\\\\[10px\\\\] {\\n padding-bottom: 10px;\\n}\\n.pl-6 {\\n padding-left: 1.5rem;\\n}\\n.pr-6 {\\n padding-right: 1.5rem;\\n}\\n.pt-1 {\\n padding-top: 0.25rem;\\n}\\n.pt-1\\\\.5 {\\n padding-top: 0.375rem;\\n}\\n.pt-2\\\\.5 {\\n padding-top: 0.625rem;\\n}\\n.pt-3 {\\n padding-top: 0.75rem;\\n}\\n.pt-\\\\[18px\\\\] {\\n padding-top: 18px;\\n}\\n.text-left {\\n text-align: left;\\n}\\n.text-center {\\n text-align: center;\\n}\\n.text-2xl {\\n font-size: 1.5rem;\\n line-height: 2rem;\\n}\\n.text-\\\\[1\\\\.05rem\\\\] {\\n font-size: 1.05rem;\\n}\\n.text-\\\\[10px\\\\] {\\n font-size: 10px;\\n}\\n.text-\\\\[11px\\\\] {\\n font-size: 11px;\\n}\\n.text-\\\\[13px\\\\] {\\n font-size: 13px;\\n}\\n.text-\\\\[15px\\\\] {\\n font-size: 15px;\\n}\\n.text-\\\\[18px\\\\] {\\n font-size: 18px;\\n}\\n.text-\\\\[20px\\\\] {\\n font-size: 20px;\\n}\\n.text-\\\\[24px\\\\] {\\n font-size: 24px;\\n}\\n.text-sm {\\n font-size: 0.875rem;\\n line-height: 1.25rem;\\n}\\n.text-xs {\\n font-size: 0.75rem;\\n line-height: 1rem;\\n}\\n.font-bold {\\n font-weight: 700;\\n}\\n.font-extrabold {\\n font-weight: 800;\\n}\\n.font-normal {\\n font-weight: 400;\\n}\\n.font-semibold {\\n font-weight: 600;\\n}\\n.uppercase {\\n text-transform: uppercase;\\n}\\n.leading-4 {\\n line-height: 1rem;\\n}\\n.leading-\\\\[1\\\\.15\\\\] {\\n line-height: 1.15;\\n}\\n.leading-\\\\[1\\\\.1\\\\] {\\n line-height: 1.1;\\n}\\n.leading-\\\\[1\\\\.25\\\\] {\\n line-height: 1.25;\\n}\\n.leading-\\\\[1\\\\.2\\\\] {\\n line-height: 1.2;\\n}\\n.leading-\\\\[1\\\\.45\\\\] {\\n line-height: 1.45;\\n}\\n.leading-\\\\[1\\\\.4\\\\] {\\n line-height: 1.4;\\n}\\n.leading-\\\\[18px\\\\] {\\n line-height: 18px;\\n}\\n.leading-none {\\n line-height: 1;\\n}\\n.tracking-\\\\[0\\\\.01em\\\\] {\\n letter-spacing: 0.01em;\\n}\\n.tracking-\\\\[0\\\\.06em\\\\] {\\n letter-spacing: 0.06em;\\n}\\n.tracking-\\\\[0\\\\.08em\\\\] {\\n letter-spacing: 0.08em;\\n}\\n.tracking-\\\\[0\\\\.16em\\\\] {\\n letter-spacing: 0.16em;\\n}\\n.text-\\\\[var\\\\(--theme-negative\\\\)\\\\] {\\n color: var(--theme-negative);\\n}\\n.text-\\\\[var\\\\(--theme-onPrimary\\\\)\\\\] {\\n color: var(--theme-onPrimary);\\n}\\n.text-\\\\[var\\\\(--theme-primary\\\\)\\\\] {\\n color: var(--theme-primary);\\n}\\n.text-\\\\[var\\\\(--theme-secondary\\\\)\\\\] {\\n color: var(--theme-secondary);\\n}\\n.text-\\\\[var\\\\(--theme-text\\\\)\\\\] {\\n color: var(--theme-text);\\n}\\n.text-\\\\[var\\\\(--theme-textLight\\\\)\\\\] {\\n color: var(--theme-textLight);\\n}\\n.text-\\\\[var\\\\(--ui-kit-accent\\\\)\\\\] {\\n color: var(--ui-kit-accent);\\n}\\n.opacity-0 {\\n opacity: 0;\\n}\\n.opacity-100 {\\n opacity: 1;\\n}\\n.opacity-45 {\\n opacity: 0.45;\\n}\\n.opacity-70 {\\n opacity: 0.7;\\n}\\n.opacity-80 {\\n opacity: 0.8;\\n}\\n.opacity-\\\\[0\\\\.38\\\\] {\\n opacity: 0.38;\\n}\\n.shadow {\\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.shadow-\\\\[0px_4px_5px_var\\\\(--theme-shadow\\\\)\\\\] {\\n --tw-shadow: 0px 4px 5px var(--theme-shadow);\\n --tw-shadow-colored: 0px 4px 5px var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.shadow-none {\\n --tw-shadow: 0 0 #0000;\\n --tw-shadow-colored: 0 0 #0000;\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.outline-none {\\n outline: 2px solid transparent;\\n outline-offset: 2px;\\n}\\n.outline {\\n outline-style: solid;\\n}\\n.saturate-0 {\\n --tw-saturate: saturate(0);\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.saturate-100 {\\n --tw-saturate: saturate(1);\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.saturate-\\\\[0\\\\.8\\\\] {\\n --tw-saturate: saturate(0.8);\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.filter {\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.backdrop-blur-\\\\[2px\\\\] {\\n --tw-backdrop-blur: blur(2px);\\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n}\\n.backdrop-blur-\\\\[8px\\\\] {\\n --tw-backdrop-blur: blur(8px);\\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n}\\n.transition {\\n transition-property:\\n color,\\n background-color,\\n border-color,\\n text-decoration-color,\\n fill,\\n stroke,\\n opacity,\\n box-shadow,\\n transform,\\n filter,\\n backdrop-filter;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[background-color\\\\,color\\\\] {\\n transition-property: background-color, color;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[border-color\\\\,box-shadow\\\\,background-color\\\\] {\\n transition-property:\\n border-color,\\n box-shadow,\\n background-color;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[opacity\\\\,filter\\\\] {\\n transition-property: opacity, filter;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[transform\\\\,color\\\\] {\\n transition-property: transform, color;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-all {\\n transition-property: all;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-opacity {\\n transition-property: opacity;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.duration-150 {\\n transition-duration: 150ms;\\n}\\n.duration-300 {\\n transition-duration: 300ms;\\n}\\n.\\\\[grid-template-columns\\\\:repeat\\\\(auto-fit\\\\,minmax\\\\(120px\\\\,1fr\\\\)\\\\)\\\\] {\\n grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));\\n}\\n:root {\\n --ui-kit-font-family:\\n \\\"Lato\\\",\\n system-ui,\\n sans-serif;\\n}\\n.ui-kit-root {\\n font-family: var(--ui-kit-font-family);\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n.ui-kit-root :is(button, input, textarea, select, option) {\\n font-family: var(--ui-kit-font-family);\\n}\\n.placeholder\\\\:text-\\\\[var\\\\(--theme-textLight\\\\)\\\\]::-moz-placeholder {\\n color: var(--theme-textLight);\\n}\\n.placeholder\\\\:text-\\\\[var\\\\(--theme-textLight\\\\)\\\\]::placeholder {\\n color: var(--theme-textLight);\\n}\\n.placeholder\\\\:opacity-100::-moz-placeholder {\\n opacity: 1;\\n}\\n.placeholder\\\\:opacity-100::placeholder {\\n opacity: 1;\\n}\\n.hover\\\\:-translate-y-\\\\[0\\\\.5px\\\\]:hover {\\n --tw-translate-y: -0.5px;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.hover\\\\:border-\\\\[var\\\\(--theme-primary\\\\)\\\\]:hover {\\n border-color: var(--theme-primary);\\n}\\n.hover\\\\:border-\\\\[var\\\\(--theme-primaryDark\\\\)\\\\]:hover {\\n border-color: var(--theme-primaryDark);\\n}\\n.hover\\\\:bg-\\\\[var\\\\(--theme-primary\\\\)\\\\]:hover {\\n background-color: var(--theme-primary);\\n}\\n.hover\\\\:bg-\\\\[var\\\\(--theme-primaryDark\\\\)\\\\]:hover {\\n background-color: var(--theme-primaryDark);\\n}\\n.hover\\\\:bg-\\\\[var\\\\(--theme-surface\\\\)\\\\]:hover {\\n background-color: var(--theme-surface);\\n}\\n.hover\\\\:text-\\\\[var\\\\(--theme-onPrimary\\\\)\\\\]:hover {\\n color: var(--theme-onPrimary);\\n}\\n.hover\\\\:shadow-\\\\[0px_4px_5px_var\\\\(--theme-shadow\\\\)\\\\]:hover {\\n --tw-shadow: 0px 4px 5px var(--theme-shadow);\\n --tw-shadow-colored: 0px 4px 5px var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.active\\\\:translate-y-px:active {\\n --tw-translate-y: 1px;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.active\\\\:scale-\\\\[0\\\\.985\\\\]:active {\\n --tw-scale-x: 0.985;\\n --tw-scale-y: 0.985;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.active\\\\:border-\\\\[var\\\\(--theme-primary\\\\)\\\\]:active {\\n border-color: var(--theme-primary);\\n}\\n.active\\\\:bg-\\\\[var\\\\(--theme-primary\\\\)\\\\]:active {\\n background-color: var(--theme-primary);\\n}\\n.active\\\\:bg-\\\\[var\\\\(--theme-secondary\\\\)\\\\]:active {\\n background-color: var(--theme-secondary);\\n}\\n.active\\\\:text-\\\\[var\\\\(--theme-onPrimary\\\\)\\\\]:active {\\n color: var(--theme-onPrimary);\\n}\\n.active\\\\:shadow-\\\\[0px_4px_5px_var\\\\(--theme-shadow\\\\)\\\\]:active {\\n --tw-shadow: 0px 4px 5px var(--theme-shadow);\\n --tw-shadow-colored: 0px 4px 5px var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.disabled\\\\:translate-y-0:disabled {\\n --tw-translate-y: 0px;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.disabled\\\\:scale-100:disabled {\\n --tw-scale-x: 1;\\n --tw-scale-y: 1;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.disabled\\\\:cursor-not-allowed:disabled {\\n cursor: not-allowed;\\n}\\n\")","import latoLatin400NormalWoff from '@fontsource/lato/files/lato-latin-400-normal.woff';\nimport latoLatin400NormalWoff2 from '@fontsource/lato/files/lato-latin-400-normal.woff2';\nimport latoLatin700NormalWoff from '@fontsource/lato/files/lato-latin-700-normal.woff';\nimport latoLatin700NormalWoff2 from '@fontsource/lato/files/lato-latin-700-normal.woff2';\nimport latoLatinExt400NormalWoff from '@fontsource/lato/files/lato-latin-ext-400-normal.woff';\nimport latoLatinExt400NormalWoff2 from '@fontsource/lato/files/lato-latin-ext-400-normal.woff2';\nimport latoLatinExt700NormalWoff from '@fontsource/lato/files/lato-latin-ext-700-normal.woff';\nimport latoLatinExt700NormalWoff2 from '@fontsource/lato/files/lato-latin-ext-700-normal.woff2';\n\nconst UI_KIT_FONT_STYLE_ID = 'smartsell-ui-kit-fonts';\n\nconst uiKitFontFacesCss = `\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(${JSON.stringify(latoLatinExt400NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatinExt400NormalWoff)}) format(\"woff\");\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(${JSON.stringify(latoLatin400NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatin400NormalWoff)}) format(\"woff\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url(${JSON.stringify(latoLatinExt700NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatinExt700NormalWoff)}) format(\"woff\");\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url(${JSON.stringify(latoLatin700NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatin700NormalWoff)}) format(\"woff\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n`;\n\nexport function injectUiKitFonts(): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n if (document.getElementById(UI_KIT_FONT_STYLE_ID)) {\n return;\n }\n\n const styleElement = document.createElement('style');\n styleElement.id = UI_KIT_FONT_STYLE_ID;\n styleElement.textContent = uiKitFontFacesCss;\n document.head.appendChild(styleElement);\n}","export const DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS = 1500;","export const cx = (...values: Array<string | false | null | undefined>): string => {\n return values.filter(Boolean).join(' ');\n};\n\nexport const UI_KIT_ROOT_CLASSNAME = 'ui-kit-root';","export const DISABLED_COMPONENT_OPACITY = 0.5;\nexport const DISABLED_FIELD_OPACITY = 0.7;","import type { CSSProperties } from 'react';\n\nexport type ControlSize = 'sm' | 'md' | 'lg';\n\nexport const CONTROL_LEADING_ICON_SHIFT = 5;\nexport const CONTROL_TEXT_VERTICAL_SHIFT = 1;\nconst SELECT_TEXT_VERTICAL_SHIFT_REDUCTION = 1;\n\ntype ControlMetrics = {\n height: number;\n fontSize: number;\n lineHeight: string;\n paddingX: number;\n paddingY: number;\n buttonPaddingX: number;\n selectPaddingRight: number;\n selectIndicatorOffset: number;\n};\n\ntype TextInputPaddingOptions = {\n leadingPadding?: number;\n trailingPadding?: number;\n};\n\nconst getControlTextVerticalPadding = (size: ControlSize, shift = CONTROL_TEXT_VERTICAL_SHIFT): { top: number; bottom: number } => {\n const metrics = getControlMetrics(size);\n\n return {\n top: Math.max(0, metrics.paddingY - shift),\n bottom: metrics.paddingY + shift,\n };\n};\n\nconst getSelectTextVerticalShift = (): number => Math.max(0, CONTROL_TEXT_VERTICAL_SHIFT - SELECT_TEXT_VERTICAL_SHIFT_REDUCTION);\n\nconst CONTROL_METRICS_BY_SIZE: Record<ControlSize, ControlMetrics> = {\n sm: {\n height: 30,\n fontSize: 13,\n lineHeight: '16px',\n paddingX: 12,\n paddingY: 6,\n buttonPaddingX: 14,\n selectPaddingRight: 40,\n selectIndicatorOffset: 12,\n },\n md: {\n height: 34,\n fontSize: 14,\n lineHeight: '18px',\n paddingX: 14,\n paddingY: 7,\n buttonPaddingX: 16,\n selectPaddingRight: 42,\n selectIndicatorOffset: 14,\n },\n lg: {\n height: 38,\n fontSize: 15,\n lineHeight: '18px',\n paddingX: 16,\n paddingY: 9,\n buttonPaddingX: 18,\n selectPaddingRight: 46,\n selectIndicatorOffset: 16,\n },\n};\n\nexport const getControlMetrics = (size: ControlSize): ControlMetrics => CONTROL_METRICS_BY_SIZE[size];\n\nexport const getControlLeadingIconInset = (size: ControlSize): number => {\n const metrics = getControlMetrics(size);\n return Math.round(metrics.paddingX / 2) + CONTROL_LEADING_ICON_SHIFT;\n};\n\nexport const getControlLeadingAdornmentWidth = (size: ControlSize, iconSize: number): number => {\n return getControlLeadingIconInset(size) + iconSize;\n};\n\nexport const getTextInputPadding = (size: ControlSize, options: TextInputPaddingOptions = {}): string => {\n const metrics = getControlMetrics(size);\n const { top, bottom } = getControlTextVerticalPadding(size);\n const leadingPadding = options.leadingPadding ?? metrics.paddingX;\n const trailingPadding = options.trailingPadding ?? metrics.paddingX;\n\n return `${top}px ${trailingPadding}px ${bottom}px ${leadingPadding}px`;\n};\n\nexport const getSelectControlPadding = (size: ControlSize): string => {\n const metrics = getControlMetrics(size);\n const { top, bottom } = getControlTextVerticalPadding(size, getSelectTextVerticalShift());\n return `${top}px ${metrics.selectPaddingRight}px ${bottom}px ${metrics.paddingX}px`;\n};\n\nexport const getControlTextNudgeStyle = (shift = CONTROL_TEXT_VERTICAL_SHIFT): CSSProperties => ({\n transform: `translateY(-${shift}px)`,\n});\n\nexport const getSelectTextNudgeStyle = (): CSSProperties => getControlTextNudgeStyle(getSelectTextVerticalShift());\n\nexport const getSelectIndicatorOffset = (size: ControlSize): number => getControlMetrics(size).selectIndicatorOffset;\n\nexport const getButtonSizeStyles = (size: ControlSize): CSSProperties => {\n const metrics = getControlMetrics(size);\n\n return {\n boxSizing: 'border-box',\n height: metrics.height,\n padding: `0 ${metrics.buttonPaddingX}px`,\n fontSize: metrics.fontSize,\n lineHeight: metrics.lineHeight,\n };\n};","import type { SmartSellTheme } from 'smartsell-theme';\n\ntype InsetBorderShadowOptions = {\n outerShadow?: string;\n componentShadow?: string;\n insetWidth?: number;\n};\n\nexport function getInsetBorderShadow(borderColor: string, options: InsetBorderShadowOptions = {}): string {\n const {\n outerShadow,\n componentShadow = '0px 4px 5px var(--theme-shadow)',\n insetWidth = 1,\n } = options;\n\n return [\n outerShadow,\n `inset 0 0 0 ${insetWidth}px ${borderColor}`,\n componentShadow,\n ].filter(Boolean).join(', ');\n}","export const STANDARD_COMPONENT_BORDER_RADIUS = 16;","import { useEffect, useMemo } from 'react';\n\nimport {\n darkTheme,\n lightTheme,\n useThemeValue,\n type SmartSellTheme,\n type ThemeColors,\n} from 'smartsell-theme';\n\nexport const UI_KIT_THEME_COLOR_NAMES = [\n 'primary',\n 'primaryLight',\n 'primaryDark',\n 'shadow',\n 'secondary',\n 'background',\n 'surface',\n 'text',\n 'textLight',\n 'positive',\n 'negative',\n 'warning',\n 'info',\n 'onPrimary',\n 'onSecondary',\n] as const;\n\nexport type UiKitThemeColorName = (typeof UI_KIT_THEME_COLOR_NAMES)[number];\nexport type UiKitThemeColors = {\n [key in UiKitThemeColorName]: ThemeColors[key];\n};\n\nexport interface UiKitTheme extends Omit<SmartSellTheme, 'title' | 'colors' | 'color'> {\n title: SmartSellTheme['title'];\n colors: UiKitThemeColors;\n color: UiKitThemeColors;\n}\n\nconst DEFAULT_THEME_COLORS = {\n primary: '#BE1E2D',\n primaryLight: '#d33948',\n primaryDark: '#A31826',\n shadow: '#B8B8B8',\n onPrimary: '#ffffff',\n secondary: '#b3b3b3',\n onSecondary: '#000',\n background: '#e6e6e6',\n surface: '#dad9d9',\n text: '#2b2b2b',\n textLight: '#4f4f4f',\n positive: '#006705',\n negative: '#c90000',\n warning: '#876e00',\n info: '#00517d',\n} as const;\n\nconst expectedThemeColorNameSet = new Set<string>(UI_KIT_THEME_COLOR_NAMES);\n\nconst assertThemeColorSchema = (theme: SmartSellTheme): void => {\n const availableColorNames = Object.keys(theme.colors);\n const missingColorNames = UI_KIT_THEME_COLOR_NAMES.filter((colorName) => {\n return !availableColorNames.includes(colorName);\n });\n const unexpectedColorNames = availableColorNames.filter((colorName) => {\n return !expectedThemeColorNameSet.has(colorName);\n });\n\n if (missingColorNames.length === 0 && unexpectedColorNames.length === 0) {\n return;\n }\n\n throw new Error(\n `smartsell-ui-kit expected smartsell-theme color schema [${UI_KIT_THEME_COLOR_NAMES.join(', ')}], but theme \"${theme.title}\" exposes [${availableColorNames.join(', ')}]. Missing: [${missingColorNames.join(', ')}]. Unexpected: [${unexpectedColorNames.join(', ')}].`,\n );\n};\n\nassertThemeColorSchema(lightTheme);\nassertThemeColorSchema(darkTheme);\n\nconst ROOT_THEME_VARIABLES: Array<[string, UiKitThemeColorName]> = [\n ['--theme-primary', 'primary'],\n ['--theme-primaryLight', 'primaryLight'],\n ['--theme-primaryDark', 'primaryDark'],\n ['--theme-shadow', 'shadow'],\n ['--theme-secondary', 'secondary'],\n ['--theme-background', 'background'],\n ['--theme-surface', 'surface'],\n ['--theme-text', 'text'],\n ['--theme-textLight', 'textLight'],\n ['--theme-positive', 'positive'],\n ['--theme-negative', 'negative'],\n ['--theme-warning', 'warning'],\n ['--theme-info', 'info'],\n ['--theme-onPrimary', 'onPrimary'],\n ['--theme-onSecondary', 'onSecondary'],\n];\n\nconst syncUiKitThemeVariables = (theme: UiKitTheme): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const rootStyle = document.documentElement.style;\n\n ROOT_THEME_VARIABLES.forEach(([variableName, colorName]) => {\n rootStyle.setProperty(variableName, theme.colors[colorName]);\n });\n};\n\nexport function normalizeUiKitTheme(theme: SmartSellTheme): UiKitTheme {\n const colors = theme.colors as Partial<ThemeColors>;\n const isDarkTheme = `${theme.title}`.toUpperCase() === 'DARK';\n const primary = colors.primary ?? DEFAULT_THEME_COLORS.primary;\n const background = colors.background ?? DEFAULT_THEME_COLORS.background;\n const surface = colors.surface ?? background;\n const text = colors.text ?? DEFAULT_THEME_COLORS.text;\n const textLight = colors.textLight ?? text;\n\n const normalizedColors: UiKitThemeColors = {\n primary,\n primaryLight: colors.primaryLight ?? primary,\n primaryDark: colors.primaryDark ?? primary,\n shadow: colors.shadow ?? (isDarkTheme ? '#181818' : DEFAULT_THEME_COLORS.shadow),\n secondary: colors.secondary ?? DEFAULT_THEME_COLORS.secondary,\n background,\n surface,\n text,\n textLight,\n positive: colors.positive ?? DEFAULT_THEME_COLORS.positive,\n negative: colors.negative ?? DEFAULT_THEME_COLORS.negative,\n warning: colors.warning ?? DEFAULT_THEME_COLORS.warning,\n info: colors.info ?? DEFAULT_THEME_COLORS.info,\n onPrimary: colors.onPrimary ?? DEFAULT_THEME_COLORS.onPrimary,\n onSecondary: colors.onSecondary ?? text,\n };\n\n return {\n ...theme,\n colors: normalizedColors,\n color: normalizedColors,\n } as UiKitTheme;\n}\n\nexport function useUiKitTheme(): UiKitTheme {\n const activeTheme = useThemeValue();\n const theme = useMemo(() => normalizeUiKitTheme(activeTheme), [activeTheme]);\n\n useEffect(() => {\n syncUiKitThemeVariables(theme);\n }, [theme]);\n\n return theme;\n}","import type { ButtonHTMLAttributes, ReactNode } from 'react';\n\nimport {\n cx,\n DISABLED_COMPONENT_OPACITY,\n UI_KIT_ROOT_CLASSNAME,\n type ControlSize,\n} from '../foundation';\n\ntype ButtonVariant = 'solid' | 'outline' | 'ghost';\ntype ButtonSize = ControlSize;\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'dangerouslySetInnerHTML'> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n}\n\nconst BUTTON_SIZE_CLASSNAMES: Record<ButtonSize, string> = {\n sm: 'h-[30px] px-[14px] text-[13px] leading-4',\n md: 'h-[34px] px-4 text-sm leading-[18px]',\n lg: 'h-[38px] px-[18px] text-[15px] leading-[18px]',\n};\n\nconst BUTTON_VARIANT_CLASSNAMES: Record<ButtonVariant, string> = {\n solid: [\n 'border-[var(--theme-primary)]',\n 'bg-[var(--theme-primary)]',\n 'text-[var(--theme-onPrimary)]',\n 'shadow-[0px_4px_5px_var(--theme-shadow)]',\n 'hover:border-[var(--theme-primaryDark)]',\n 'hover:bg-[var(--theme-primaryDark)]',\n 'hover:-translate-y-[0.5px]',\n 'active:translate-y-px',\n 'active:scale-[0.985]',\n ].join(' '),\n outline: [\n 'border-[var(--theme-textLight)]',\n 'bg-transparent',\n 'text-[var(--theme-text)]',\n 'shadow-[0px_4px_5px_var(--theme-shadow)]',\n 'hover:-translate-y-[0.5px]',\n 'hover:bg-[var(--theme-surface)]',\n 'active:translate-y-px',\n 'active:scale-[0.985]',\n 'active:bg-[var(--theme-secondary)]',\n ].join(' '),\n ghost: [\n 'border-transparent',\n 'bg-transparent',\n 'text-[var(--theme-text)]',\n 'shadow-none',\n 'hover:-translate-y-[0.5px]',\n 'hover:border-[var(--theme-primary)]',\n 'hover:bg-[var(--theme-primary)]',\n 'hover:text-[var(--theme-onPrimary)]',\n 'hover:shadow-[0px_4px_5px_var(--theme-shadow)]',\n 'active:translate-y-px',\n 'active:scale-[0.985]',\n 'active:border-[var(--theme-primary)]',\n 'active:bg-[var(--theme-primary)]',\n 'active:text-[var(--theme-onPrimary)]',\n 'active:shadow-[0px_4px_5px_var(--theme-shadow)]',\n ].join(' '),\n};\n\nexport function Button({\n variant = 'solid',\n size = 'sm',\n leadingIcon,\n trailingIcon,\n children,\n disabled,\n className,\n style,\n type = 'button',\n ...rest\n}: ButtonProps) {\n return (\n <button\n {...rest}\n type={type}\n disabled={disabled}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'box-border inline-flex w-fit max-w-fit items-center justify-center gap-2.5',\n 'rounded-2xl border border-solid font-bold tracking-[0.01em]',\n 'cursor-pointer transition-all duration-300',\n 'disabled:cursor-not-allowed',\n 'disabled:translate-y-0 disabled:scale-100',\n BUTTON_SIZE_CLASSNAMES[size],\n BUTTON_VARIANT_CLASSNAMES[variant],\n className,\n )}\n style={disabled ? { ...style, opacity: DISABLED_COMPONENT_OPACITY } : style}\n >\n {leadingIcon}\n {children}\n {trailingIcon}\n </button>\n );\n}","import type { HTMLAttributes, ReactNode } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from '../foundation';\n\nexport interface CardProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title'> {\n children: ReactNode;\n eyebrow?: ReactNode;\n title?: ReactNode;\n action?: ReactNode;\n padded?: boolean;\n}\n\nexport function Card({\n children,\n eyebrow,\n title,\n action,\n padded = true,\n className,\n ...rest\n}: CardProps) {\n useUiKitTheme();\n\n return (\n <div\n {...rest}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'rounded-[28px] border border-[var(--theme-secondary)] bg-[var(--theme-surface)] text-[var(--theme-text)]',\n 'shadow-[0px_4px_5px_var(--theme-shadow)]',\n padded && 'p-6',\n className,\n )}\n >\n {(eyebrow || title || action) && (\n <div className=\"mb-[18px] flex items-start justify-between gap-4\">\n <div className=\"flex flex-col gap-1.5\">\n {eyebrow ? (\n <span className=\"text-xs font-extrabold uppercase tracking-[0.16em] text-[var(--theme-textLight)]\">\n {eyebrow}\n </span>\n ) : null}\n {title ? (\n <div className=\"text-2xl font-bold leading-[1.2] text-[var(--theme-text)]\">\n {title}\n </div>\n ) : null}\n </div>\n {action ? <div className=\"text-[var(--theme-text)]\">{action}</div> : null}\n </div>\n )}\n {children}\n </div>\n );\n}","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nimport {\n cx,\n UI_KIT_ROOT_CLASSNAME,\n useUiKitTheme,\n} from '../foundation';\n\nexport interface CardSmallProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title' | 'color'> {\n title?: ReactNode;\n value?: ReactNode;\n icon?: ReactNode;\n color?: CSSProperties['color'];\n}\n\nexport function CardSmall({\n title,\n value,\n icon,\n color,\n className,\n style,\n ...rest\n}: CardSmallProps) {\n const theme = useUiKitTheme();\n const accentColor = color ?? theme.colors.primary;\n\n return (\n <div\n {...rest}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'relative flex min-h-20 items-center gap-4 overflow-hidden',\n 'rounded-2xl border border-solid border-[var(--ui-kit-accent)]',\n 'bg-[var(--theme-surface)] pl-6 pr-6 text-[var(--theme-text)]',\n 'shadow-[0px_4px_5px_var(--theme-shadow)]',\n className,\n )}\n style={{\n '--ui-kit-accent': accentColor,\n ...style,\n } as CSSProperties}\n >\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-y-0 left-0 w-[25px] bg-[var(--ui-kit-accent)]\"\n />\n\n {icon ? (\n <div\n aria-hidden=\"true\"\n className={cx(\n 'ml-4 inline-flex h-[52px] w-[52px] shrink-0 items-center justify-center',\n 'rounded-xl bg-[color-mix(in_srgb,var(--ui-kit-accent)_24%,transparent)]',\n 'text-[var(--ui-kit-accent)]',\n )}\n >\n {icon}\n </div>\n ) : null}\n\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n {title ? (\n <div className=\"truncate text-sm font-bold leading-[1.25] text-[var(--theme-text)]\">\n {title}\n </div>\n ) : null}\n {value ? (\n <div className=\"truncate text-[18px] font-extrabold leading-[1.15] text-[var(--theme-text)]\">\n {value}\n </div>\n ) : null}\n </div>\n </div>\n );\n}","import { useEffect, useId, useRef, useState, type CSSProperties, type InputHTMLAttributes, type ReactNode } from 'react';\n\nimport {\n cx,\n DISABLED_FIELD_OPACITY,\n UI_KIT_ROOT_CLASSNAME,\n useUiKitTheme,\n withAlpha,\n type ControlSize,\n} from '../foundation';\n\nexport interface CheckboxIndicatorProps {\n checked: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n size?: number;\n checkedColor?: string;\n iconColor?: string;\n uncheckedBorderColor?: string;\n uncheckedBackgroundColor?: string;\n style?: CSSProperties;\n}\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'dangerouslySetInnerHTML' | 'size' | 'type'> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n size?: ControlSize;\n indeterminate?: boolean;\n}\n\nconst CHECKBOX_SIZE_BY_SIZE: Record<ControlSize, number> = {\n sm: 14,\n md: 16,\n lg: 20,\n};\n\nconst CHECKBOX_LABEL_CLASSNAMES: Record<ControlSize, string> = {\n sm: 'text-[13px] leading-4',\n md: 'text-sm leading-[18px]',\n lg: 'text-[15px] leading-[18px]',\n};\n\nconst getCheckboxSize = (size: ControlSize): number => CHECKBOX_SIZE_BY_SIZE[size];\n\nconst hasNodeContent = (value: ReactNode): boolean => {\n if (Array.isArray(value)) {\n return value.some(hasNodeContent);\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n return value !== null && value !== undefined && value !== false;\n};\n\nfunction CheckIcon({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M5.75 10.25L8.5 13l5.75-6\"\n stroke={color}\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction MixedIcon({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5.5 10H14.5\" stroke={color} strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function CheckboxIndicator({\n checked,\n indeterminate = false,\n disabled = false,\n size = 20,\n checkedColor,\n iconColor,\n uncheckedBorderColor,\n uncheckedBackgroundColor,\n style,\n}: CheckboxIndicatorProps) {\n const theme = useUiKitTheme();\n const isActive = checked || indeterminate;\n const resolvedCheckedColor = checkedColor ?? theme.colors.textLight;\n const resolvedIconColor = iconColor ?? theme.colors.surface;\n const resolvedUncheckedBorderColor = uncheckedBorderColor ?? theme.colors.textLight; \n const resolvedUncheckedBackgroundColor = uncheckedBackgroundColor ?? theme.colors.surface;\n\n return (\n <span\n aria-hidden=\"true\"\n style={{\n width: size,\n height: size,\n borderRadius: 999,\n boxSizing: 'border-box',\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: `1.5px solid ${isActive ? resolvedCheckedColor : resolvedUncheckedBorderColor}`,\n backgroundColor: isActive ? resolvedCheckedColor : resolvedUncheckedBackgroundColor,\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n transition: 'background-color 140ms ease, border-color 140ms ease, opacity 140ms ease',\n ...style,\n }}\n >\n {indeterminate ? <MixedIcon size={Math.max(10, size - 6)} color={resolvedIconColor} /> : null}\n {!indeterminate && checked ? <CheckIcon size={Math.max(10, size - 6)} color={resolvedIconColor} /> : null}\n </span>\n );\n}\n\nexport function Checkbox({\n label,\n hint,\n error,\n size = 'sm',\n id,\n checked,\n defaultChecked,\n disabled,\n indeterminate = false,\n required,\n className,\n style,\n onChange,\n onFocus,\n onBlur,\n ...rest\n}: CheckboxProps) {\n const theme = useUiKitTheme();\n const mutedText = theme.colors.textLight;\n const indicatorSize = getCheckboxSize(size);\n const hasLabel = hasNodeContent(label);\n const hasHint = hasNodeContent(hint);\n const hasError = hasNodeContent(error);\n const hasSecondaryContent = hasLabel && hasHint;\n const resolvedId = id ?? `ss-checkbox-${useId().replace(/:/g, '')}`;\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalChecked, setInternalChecked] = useState(Boolean(defaultChecked));\n const isControlled = checked !== undefined;\n const resolvedChecked = isControlled ? Boolean(checked) : internalChecked;\n\n useEffect(() => {\n if (!inputRef.current) {\n return;\n }\n\n inputRef.current.indeterminate = indeterminate;\n }, [indeterminate, resolvedChecked]);\n\n return (\n <div\n className={cx(UI_KIT_ROOT_CLASSNAME, 'flex w-full flex-col gap-1.5', className)}\n style={style}\n >\n <label\n htmlFor={resolvedId}\n className={cx(\n 'inline-flex select-none gap-2.5',\n hasSecondaryContent ? 'items-start' : 'items-center',\n hasLabel || hasHint || hasError ? 'w-full' : 'w-auto',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n style={disabled ? { opacity: DISABLED_FIELD_OPACITY } : undefined}\n >\n <span\n className={cx(\n 'relative inline-flex shrink-0 items-center justify-center rounded-full p-0.5',\n hasSecondaryContent ? 'mt-px' : 'mt-0',\n )}\n >\n <input\n {...rest}\n ref={inputRef}\n id={resolvedId}\n type=\"checkbox\"\n checked={resolvedChecked}\n disabled={disabled}\n required={required}\n onChange={(event) => {\n if (!isControlled) {\n setInternalChecked(event.currentTarget.checked);\n }\n\n onChange?.(event);\n }}\n onFocus={(event) => {\n onFocus?.(event);\n }}\n onBlur={(event) => {\n onBlur?.(event);\n }}\n className={cx(\n 'absolute inset-0 m-0 h-full w-full opacity-0',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n />\n <CheckboxIndicator\n checked={resolvedChecked}\n indeterminate={indeterminate}\n disabled={disabled}\n size={indicatorSize}\n checkedColor={theme.colors.primary}\n iconColor={theme.colors.onPrimary}\n uncheckedBorderColor={theme.colors.text}\n uncheckedBackgroundColor={theme.colors.surface}\n style={disabled ? { opacity: 1 } : undefined}\n />\n </span>\n\n {hasLabel || hasHint || hasError ? (\n <span\n className={cx(\n 'flex min-w-0 flex-col gap-1',\n hasSecondaryContent ? 'justify-start' : 'justify-center',\n )}\n >\n {label ? (\n <span className={cx('font-semibold text-[var(--theme-text)]', CHECKBOX_LABEL_CLASSNAMES[size])}>\n {label}\n {required ? <span className=\"ml-1 text-[var(--theme-negative)]\">*</span> : null}\n </span>\n ) : null}\n {hint ? (\n <span className=\"text-[13px] leading-[1.45] text-[var(--theme-textLight)]\">\n {hint}\n </span>\n ) : null}\n {error ? (\n <span className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-negative)]\">\n {error}\n </span>\n ) : null}\n </span>\n ) : null}\n </label>\n </div>\n );\n}","import { useMemo } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from './Button';\nimport { Modal } from './Modal';\n\nexport interface ModalSlotIds {\n header: string;\n body: string;\n footer: string;\n}\n\nexport interface ModalSlotContext<TPayload = unknown> {\n title: string;\n payload?: TPayload;\n close: () => void;\n confirm?: () => void;\n confirmLabel: string;\n cancelLabel: string;\n isOpen: boolean;\n isBusy: boolean;\n}\n\nexport interface ComposableModalSlotRenderProps<TPayload = unknown> {\n id: string;\n context: ModalSlotContext<TPayload>;\n children?: ReactNode;\n}\n\nexport type ComposableModalSlotRenderer<TPayload = unknown> = (\n props: ComposableModalSlotRenderProps<TPayload>,\n) => ReactNode;\n\nexport interface ComposableModalProps<TPayload = unknown> {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n slotBaseId: string;\n renderSlot?: ComposableModalSlotRenderer<TPayload>;\n payload?: TPayload;\n onConfirm?: () => void;\n confirmLabel?: string;\n cancelLabel?: string;\n isBusy?: boolean;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n hideExpandButton?: boolean;\n maximized?: boolean;\n hideDefaultFooter?: boolean;\n maxWidth?: number | string;\n headerFallback?: ReactNode;\n footerFallback?: ReactNode;\n children?: ReactNode;\n}\n\nexport const createModalSlotIds = (slotBaseId: string): ModalSlotIds => ({\n header: `${slotBaseId}:modal-header`,\n body: `${slotBaseId}:modal-body`,\n footer: `${slotBaseId}:modal-footer`,\n});\n\nexport function ComposableModal<TPayload = unknown>({\n isOpen,\n onClose,\n title,\n slotBaseId,\n renderSlot,\n payload,\n onConfirm,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n isBusy = false,\n closeOnBackdrop = true,\n closeOnEscape = true,\n hideExpandButton = false,\n maximized,\n hideDefaultFooter = false,\n maxWidth,\n headerFallback,\n footerFallback,\n children,\n}: ComposableModalProps<TPayload>) {\n const slotIds = createModalSlotIds(slotBaseId);\n\n const context = useMemo<ModalSlotContext<TPayload>>(\n () => ({\n title,\n payload,\n close: onClose,\n confirm: onConfirm,\n confirmLabel,\n cancelLabel,\n isOpen,\n isBusy,\n }),\n [cancelLabel, confirmLabel, isBusy, isOpen, onClose, onConfirm, payload, title],\n );\n\n const defaultFooter = hideDefaultFooter ? undefined : (\n footerFallback ?? (\n <>\n <Button variant=\"outline\" onClick={onClose} disabled={isBusy}>\n {cancelLabel}\n </Button>\n {onConfirm ? (\n <Button onClick={onConfirm} disabled={isBusy}>\n {confirmLabel}\n </Button>\n ) : null}\n </>\n )\n );\n\n const defaultHeader = headerFallback ?? (\n <h2\n className=\"m-0 text-[24px] font-extrabold leading-[1.1]\"\n >\n {title}\n </h2>\n );\n\n const renderSlotContent = (id: string, slotChildren: ReactNode) => {\n if (!renderSlot) {\n return slotChildren;\n }\n\n return renderSlot({\n id,\n context,\n children: slotChildren,\n });\n };\n\n const headerContent = renderSlotContent(slotIds.header, defaultHeader);\n const bodyContent = renderSlotContent(slotIds.body, children);\n const footerContent = renderSlotContent(slotIds.footer, defaultFooter);\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n isBusy={isBusy}\n headerContent={headerContent}\n footer={footerContent}\n maxWidth={maxWidth}\n hideExpandButton={hideExpandButton}\n maximized={maximized}\n closeOnBackdrop={closeOnBackdrop}\n closeOnEscape={closeOnEscape}\n >\n {bodyContent}\n </Modal>\n );\n}","import { useEffect, useMemo, useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\n\nimport {\n cx,\n DISABLED_COMPONENT_OPACITY,\n UI_KIT_ROOT_CLASSNAME,\n normalizeUiKitTheme,\n useUiKitTheme,\n type UiKitTheme,\n} from '../foundation';\n\ntype ModalActionAppearance = 'text' | 'outlined' | 'contained' | 'link';\n\ntype ModalThemeColors = {\n background: string;\n surface: string;\n text: string;\n textLight: string;\n primary: string;\n onPrimary: string;\n secondary: string;\n onSecondary: string;\n negative: string;\n warning: string;\n};\n\nexport interface ModalTheme {\n colors?: Partial<ModalThemeColors>;\n}\n\nexport type ModalThemeSource = ModalTheme | UiKitTheme;\n\nexport interface ModalAction {\n label: ReactNode;\n onClick: () => void;\n appearance?: ModalActionAppearance;\n style?: CSSProperties;\n disabled?: boolean;\n hidden?: boolean;\n}\n\ninterface BaseModalProps {\n children?: ReactNode;\n theme?: ModalThemeSource;\n}\n\nexport interface ModalProps extends BaseModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: ReactNode;\n headerContent?: ReactNode;\n footer?: ReactNode;\n confirmAction?: ModalAction;\n cancelAction?: ModalAction;\n closeAction?: ModalAction;\n extraActions?: ModalAction[];\n maxWidth?: number | string;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n hideCloseButton?: boolean;\n hideExpandButton?: boolean;\n disableDismiss?: boolean;\n maximized?: boolean;\n contentStyle?: CSSProperties;\n bodyStyle?: CSSProperties;\n isBusy?: boolean;\n}\n\nexport type StandardModalProps = ModalProps;\n\nconst isUiKitTheme = (theme?: ModalThemeSource): theme is UiKitTheme => {\n return Boolean(theme && typeof theme === 'object' && 'title' in theme && 'color' in theme);\n};\n\nconst resolveTheme = (baseTheme: UiKitTheme, themeOverride?: ModalThemeSource): UiKitTheme => {\n if (isUiKitTheme(themeOverride)) {\n return themeOverride;\n }\n\n if (!themeOverride?.colors) {\n return baseTheme;\n }\n\n const colors: UiKitTheme['colors'] = {\n ...baseTheme.colors,\n ...themeOverride.colors,\n };\n\n return normalizeUiKitTheme({\n ...baseTheme,\n colors,\n color: colors,\n });\n};\n\nconst normalizeWidth = (maxWidth?: number | string): string | number => {\n if (typeof maxWidth === 'number') {\n return `${maxWidth}px`;\n }\n\n return maxWidth ?? '720px';\n};\n\nconst isLikelyMobileViewport = (): boolean => {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n return false;\n }\n\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n};\n\nconst createTitleId = (title?: ReactNode): string => {\n if (typeof title === 'string' || typeof title === 'number') {\n const normalized = String(title)\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '');\n\n return `smartsell-modal-${normalized || 'dialog'}`;\n }\n\n return 'smartsell-modal-dialog';\n};\n\nfunction ModalActionButton({\n action,\n}: {\n action: ModalAction;\n}) {\n const {\n label,\n onClick,\n appearance = 'contained',\n disabled = false,\n style,\n } = action;\n\n const buttonClassName = cx(\n 'flex w-full items-center justify-center rounded-[0.4rem] box-border',\n 'm-0 text-center font-bold leading-[1.2]',\n appearance === 'link' ? 'p-0 text-[1.05rem]' : 'px-[1.15rem] py-[0.9rem] text-[1.05rem]',\n disabled ? 'cursor-not-allowed saturate-0' : 'cursor-pointer',\n appearance === 'text' && 'border border-transparent bg-transparent text-[var(--theme-primary)] shadow-none',\n appearance === 'link' && 'border-0 bg-transparent text-[var(--theme-primary)] shadow-none',\n appearance === 'outlined' && 'border-2 border-[var(--theme-primary)] bg-transparent',\n appearance === 'outlined' && 'text-[var(--theme-primary)]',\n appearance === 'contained' && 'border border-transparent bg-[var(--theme-primary)]',\n appearance === 'contained' && 'text-[var(--theme-onPrimary)]',\n );\n\n return (\n <div\n className=\"m-0 flex items-center justify-center\"\n style={{\n width: style?.width ?? (style?.maxWidth ? '100%' : 'max-content'),\n marginBottom: style?.marginBottom ?? 0,\n ...style,\n }}\n >\n <button\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={buttonClassName}\n style={{\n opacity: disabled ? DISABLED_COMPONENT_OPACITY : 1,\n boxShadow: appearance === 'text' || appearance === 'link' ? 'none' : '0 14px 28px var(--theme-shadow)',\n }}\n >\n {label}\n </button>\n </div>\n );\n}\n\nfunction ModalBusyIndicator({\n theme,\n}: {\n theme: UiKitTheme;\n}) {\n return (\n <div\n aria-live=\"polite\"\n role=\"status\"\n className=\"relative inline-flex h-14 w-14 items-center justify-center rounded-full\"\n style={{\n backgroundColor: theme.colors.surface,\n boxShadow: `0 18px 36px ${theme.colors.shadow}`,\n }}\n >\n <span className=\"ui-kit-sr-only\">Loading</span>\n <svg aria-hidden=\"true\" width=\"32\" height=\"32\" viewBox=\"0 0 40 40\" fill=\"none\">\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"16\"\n stroke={theme.colors.textLight}\n strokeWidth=\"4\"\n />\n <path\n d=\"M20 4C28.837 4 36 11.163 36 20\"\n stroke={theme.colors.primary}\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n >\n <animateTransform\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"0 20 20\"\n to=\"360 20 20\"\n dur=\"0.75s\"\n repeatCount=\"indefinite\"\n />\n </path>\n </svg>\n </div>\n );\n}\n\nfunction MaximizeIcon() {\n return (\n <svg aria-hidden=\"true\" width=\"15\" height=\"15\" viewBox=\"0 0 20 20\" fill=\"none\">\n <rect x=\"4.25\" y=\"4.25\" width=\"11.5\" height=\"11.5\" rx=\"2.2\" stroke=\"currentColor\" strokeWidth=\"1.7\" />\n </svg>\n );\n}\n\nfunction MinimizeIcon() {\n return (\n <svg aria-hidden=\"true\" width=\"15\" height=\"15\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M6.25 4.75H13a2.25 2.25 0 0 1 2.25 2.25v6.75\"\n stroke=\"currentColor\"\n strokeWidth=\"1.7\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M13.75 9.5v4.25a1.5 1.5 0 0 1-1.5 1.5H6a1.75 1.75 0 0 1-1.75-1.75V7.75A1.5 1.5 0 0 1 5.75 6.25H10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.7\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction UnifiedModal({\n isOpen,\n onClose,\n children,\n title,\n headerContent,\n footer,\n confirmAction,\n cancelAction,\n closeAction,\n extraActions,\n maxWidth,\n closeOnBackdrop = true,\n closeOnEscape = true,\n hideCloseButton = false,\n hideExpandButton = false,\n disableDismiss = false,\n maximized,\n contentStyle,\n bodyStyle,\n isBusy = false,\n theme,\n}: ModalProps) {\n const inheritedTheme = useUiKitTheme();\n const modalTheme = useMemo(() => resolveTheme(inheritedTheme, theme), [inheritedTheme, theme]);\n const modalShadow = useMemo(() => {\n return `0 34px 80px ${modalTheme.colors.shadow}`;\n }, [modalTheme.colors.shadow]);\n const controlShadow = '0px 4px 5px var(--theme-shadow)';\n const modalThemeVariables = useMemo<CSSProperties>(() => ({\n '--theme-background': modalTheme.colors.background,\n '--theme-surface': modalTheme.colors.surface,\n '--theme-text': modalTheme.colors.text,\n '--theme-textLight': modalTheme.colors.textLight,\n '--theme-primary': modalTheme.colors.primary,\n '--theme-onPrimary': modalTheme.colors.onPrimary,\n '--theme-secondary': modalTheme.colors.secondary,\n '--theme-onSecondary': modalTheme.colors.onSecondary,\n '--theme-negative': modalTheme.colors.negative,\n '--theme-warning': modalTheme.colors.warning,\n '--theme-shadow': modalTheme.colors.shadow,\n } as CSSProperties), [modalTheme]);\n const [isMaximized, setIsMaximized] = useState<boolean>(maximized ?? false);\n const titleId = useMemo(() => createTitleId(title), [title]);\n const shouldDisableDismiss = disableDismiss || isBusy;\n\n useEffect(() => {\n if (typeof maximized === 'boolean') {\n setIsMaximized(maximized);\n return;\n }\n\n if (isLikelyMobileViewport()) {\n setIsMaximized(true);\n }\n }, [maximized]);\n\n useEffect(() => {\n if (!isOpen || typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!shouldDisableDismiss && closeOnEscape && event.key === 'Escape') {\n onClose();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.body.style.overflow = previousOverflow;\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [closeOnEscape, isOpen, onClose, shouldDisableDismiss]);\n\n if (!isOpen) {\n return null;\n }\n\n const resolvedHeader = headerContent ?? (title ? (\n <h2\n id={titleId}\n className=\"m-0 text-2xl font-extrabold leading-[1.1] text-[var(--theme-text)]\"\n >\n {title}\n </h2>\n ) : null);\n\n let footerContent = footer;\n\n if (footerContent === undefined) {\n if (closeAction && !closeAction.hidden) {\n footerContent = (\n <ModalActionButton\n action={{ ...closeAction, disabled: closeAction.disabled || isBusy }}\n />\n );\n } else {\n const resolvedActions = [\n cancelAction\n ? {\n ...cancelAction,\n appearance: cancelAction.appearance ?? 'text',\n disabled: cancelAction.disabled || isBusy,\n }\n : undefined,\n ...(extraActions ?? []).map((action) => ({\n ...action,\n appearance: action.appearance ?? 'contained',\n disabled: action.disabled || isBusy,\n })),\n confirmAction\n ? {\n ...confirmAction,\n appearance: confirmAction.appearance ?? 'contained',\n disabled: confirmAction.disabled || isBusy,\n }\n : undefined,\n ].reduce<ModalAction[]>((items, action) => {\n if (!action || action.hidden) {\n return items;\n }\n\n items.push(action);\n return items;\n }, []);\n\n footerContent = resolvedActions.length > 0\n ? resolvedActions.map((action, index) => (\n <ModalActionButton\n key={`modal-action-${index}`}\n action={action}\n />\n ))\n : undefined;\n }\n }\n\n const shouldRenderFooter = footerContent !== undefined && footerContent !== null && footerContent !== false;\n\n return (\n <div\n aria-label={headerContent ? (typeof title === 'string' ? title : 'Dialog') : undefined}\n aria-labelledby={headerContent ? undefined : title ? titleId : undefined}\n aria-busy={isBusy}\n aria-modal=\"true\"\n role=\"dialog\"\n onMouseDown={(event) => {\n if (!shouldDisableDismiss && closeOnBackdrop && event.target === event.currentTarget) {\n onClose();\n }\n }}\n className={cx(UI_KIT_ROOT_CLASSNAME, 'fixed inset-0 z-[70] flex items-center justify-center backdrop-blur-[8px]')}\n style={{\n ...modalThemeVariables,\n padding: isMaximized ? 0 : 16,\n backgroundColor: modalTheme.colors.shadow,\n }}\n >\n <div\n className={cx(\n 'relative flex flex-col overflow-hidden border',\n 'bg-[var(--theme-surface)]',\n 'text-[var(--theme-text)]',\n isMaximized ? 'rounded-none' : 'rounded-[30px]',\n )}\n style={{\n width: isMaximized ? '100vw' : 'min(100%, 100%)',\n maxWidth: isMaximized ? '100vw' : normalizeWidth(maxWidth),\n height: isMaximized ? '100vh' : undefined,\n maxHeight: isMaximized ? '100vh' : 'calc(100vh - 32px)',\n minWidth: isMaximized ? '100vw' : 300,\n borderColor: modalTheme.colors.secondary,\n boxShadow: modalShadow,\n ...contentStyle,\n }}\n >\n <div\n className=\"flex items-start justify-between gap-3 border-b px-5 pb-3 pt-[18px]\"\n style={{ borderColor: modalTheme.colors.secondary }}\n >\n <div\n className={cx(\n 'flex-1 transition-opacity duration-150',\n isBusy ? 'opacity-[0.38]' : 'opacity-100',\n )}\n >\n {resolvedHeader}\n </div>\n <div className=\"flex items-center gap-2\">\n {!hideExpandButton ? (\n <button\n aria-label={isMaximized ? 'Minimize modal' : 'Maximize modal'}\n title={isMaximized ? 'Minimize' : 'Maximize'}\n type=\"button\"\n onClick={() => setIsMaximized((current) => !current)}\n className=\"m-0 inline-flex h-[30px] w-[30px] shrink-0 cursor-pointer appearance-none items-center justify-center rounded-full border bg-transparent p-0 text-[var(--theme-text)] leading-none\"\n style={{ borderColor: modalTheme.colors.secondary, boxShadow: controlShadow }}\n >\n {isMaximized ? <MinimizeIcon /> : <MaximizeIcon />}\n </button>\n ) : null}\n {!hideCloseButton ? (\n <button\n aria-label=\"Close modal\"\n type=\"button\"\n onClick={shouldDisableDismiss ? undefined : onClose}\n className={cx(\n 'flex h-[30px] w-[30px] items-center justify-center rounded-full border',\n 'bg-transparent text-[20px] font-bold text-[var(--theme-text)]',\n shouldDisableDismiss ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n style={{\n borderColor: modalTheme.colors.secondary,\n boxShadow: controlShadow,\n opacity: shouldDisableDismiss ? DISABLED_COMPONENT_OPACITY : 1,\n }}\n >\n ×\n </button>\n ) : null}\n </div>\n </div>\n\n <div\n className=\"relative min-h-0 flex-1 overflow-auto p-6\"\n style={bodyStyle}\n >\n <div\n className={cx(\n 'transition-[opacity,filter] duration-150',\n isBusy ? 'pointer-events-none opacity-[0.38] saturate-[0.8]' : 'pointer-events-auto opacity-100 saturate-100',\n )}\n >\n {children}\n </div>\n {isBusy ? (\n <div\n className=\"absolute inset-0 flex items-center justify-center backdrop-blur-[2px]\"\n style={{ backgroundColor: modalTheme.colors.background }}\n >\n <ModalBusyIndicator theme={modalTheme} />\n </div>\n ) : null}\n </div>\n\n {shouldRenderFooter ? (\n <div\n className=\"flex justify-end gap-2.5 border-t px-5 pb-4 pt-3\"\n style={{ borderColor: modalTheme.colors.secondary }}\n >\n {footerContent}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport function Modal(props: ModalProps) {\n return <UnifiedModal {...props} />;\n}\n","import {\n useEffect,\n useMemo,\n useRef,\n useState,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\n\nimport {\n cx,\n DISABLED_FIELD_OPACITY,\n getControlLeadingAdornmentWidth,\n getControlLeadingIconInset,\n getControlMetrics,\n getTextInputPadding,\n getInsetBorderShadow,\n useUiKitTheme,\n type ControlSize,\n} from '../foundation';\nimport { ControlFrame } from './Input';\n\nexport type DatePickerMode = 'date' | 'datetime';\nexport type DatePickerValue = string | Date | null;\nexport type DatePickerChangeReason = 'input' | 'picker' | 'clear';\n\nexport interface DatePickerChangeContext {\n reason: DatePickerChangeReason;\n date: Date | null;\n nativeValue: string;\n displayValue: string;\n}\n\nexport interface DatePickerProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'dangerouslySetInnerHTML' | 'size' | 'type' | 'value' | 'defaultValue' | 'onChange' | 'min' | 'max' | 'step'\n > {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n size?: ControlSize;\n value?: DatePickerValue;\n defaultValue?: DatePickerValue;\n onChange?: (value: string | null, context: DatePickerChangeContext) => void;\n mode?: DatePickerMode;\n format?: string;\n allowPastDates?: boolean;\n allowFutureDates?: boolean;\n minDate?: DatePickerValue;\n maxDate?: DatePickerValue;\n minuteStep?: number;\n clearable?: boolean;\n showPickerButton?: boolean;\n isDateUnavailable?: (date: Date) => boolean;\n invalidDateMessage?: ReactNode;\n unavailableDateMessage?: ReactNode;\n pickerButtonLabel?: string;\n clearButtonLabel?: string;\n}\n\ntype DatePartKey = 'year' | 'month' | 'day' | 'hour' | 'minute';\n\ntype DatePickerAccessoryMetrics = {\n buttonSize: number;\n iconSize: number;\n rightOffset: number;\n clusterGap: number;\n contentGap: number;\n};\n\ntype FormatTokenDefinition = {\n token: string;\n key: DatePartKey;\n pattern: string;\n formatter: (date: Date) => string;\n};\n\nconst DEFAULT_FORMAT_BY_MODE: Record<DatePickerMode, string> = {\n date: 'DD/MM/YYYY',\n datetime: 'DD/MM/YYYY HH:mm',\n};\n\nconst HTML_DATE_PATTERN = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst HTML_DATETIME_PATTERN = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::\\d{2})?$/;\n\nconst FORMAT_TOKENS: FormatTokenDefinition[] = [\n {\n token: 'YYYY',\n key: 'year',\n pattern: '(\\\\d{4})',\n formatter: (date) => String(date.getFullYear()),\n },\n {\n token: 'MM',\n key: 'month',\n pattern: '(\\\\d{1,2})',\n formatter: (date) => padNumber(date.getMonth() + 1),\n },\n {\n token: 'DD',\n key: 'day',\n pattern: '(\\\\d{1,2})',\n formatter: (date) => padNumber(date.getDate()),\n },\n {\n token: 'HH',\n key: 'hour',\n pattern: '(\\\\d{1,2})',\n formatter: (date) => padNumber(date.getHours()),\n },\n {\n token: 'mm',\n key: 'minute',\n pattern: '(\\\\d{1,2})',\n formatter: (date) => padNumber(date.getMinutes()),\n },\n];\n\nconst ACCESSORY_METRICS_BY_SIZE: Record<ControlSize, DatePickerAccessoryMetrics> = {\n sm: {\n buttonSize: 18,\n iconSize: 14,\n rightOffset: 8,\n clusterGap: 6,\n contentGap: 8,\n },\n md: {\n buttonSize: 19,\n iconSize: 15,\n rightOffset: 9,\n clusterGap: 7,\n contentGap: 9,\n },\n lg: {\n buttonSize: 20,\n iconSize: 16,\n rightOffset: 10,\n clusterGap: 8,\n contentGap: 10,\n },\n};\n\nconst FIELD_HEIGHT_CLASSNAMES: Record<ControlSize, string> = {\n sm: 'h-[30px]',\n md: 'h-[34px]',\n lg: 'h-[38px]',\n};\n\nconst FIELD_TEXT_CLASSNAMES: Record<ControlSize, string> = {\n sm: 'text-[13px] leading-4',\n md: 'text-sm leading-[18px]',\n lg: 'text-[15px] leading-[18px]',\n};\n\nconst FIELD_PADDING_X_CLASSNAMES: Record<ControlSize, string> = {\n sm: 'px-3',\n md: 'px-[14px]',\n lg: 'px-4',\n};\n\nfunction padNumber(value: number, length = 2): string {\n return String(value).padStart(length, '0');\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction isValidDateInstance(value: Date): boolean {\n return !Number.isNaN(value.getTime());\n}\n\nfunction createValidatedDate(year: number, month: number, day: number, hour = 0, minute = 0): Date | null {\n const nextDate = new Date(year, month - 1, day, hour, minute, 0, 0);\n\n if (!isValidDateInstance(nextDate)) {\n return null;\n }\n\n if (\n nextDate.getFullYear() !== year ||\n nextDate.getMonth() !== month - 1 ||\n nextDate.getDate() !== day ||\n nextDate.getHours() !== hour ||\n nextDate.getMinutes() !== minute\n ) {\n return null;\n }\n\n return nextDate;\n}\n\nfunction normalizeDatePrecision(date: Date, mode: DatePickerMode): Date {\n if (mode === 'date') {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);\n }\n\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), 0, 0);\n}\n\nfunction toLocalInputValue(date: Date, mode: DatePickerMode): string {\n const normalizedDate = normalizeDatePrecision(date, mode);\n const datePart = `${normalizedDate.getFullYear()}-${padNumber(normalizedDate.getMonth() + 1)}-${padNumber(normalizedDate.getDate())}`;\n\n if (mode === 'date') {\n return datePart;\n }\n\n return `${datePart}T${padNumber(normalizedDate.getHours())}:${padNumber(normalizedDate.getMinutes())}`;\n}\n\nfunction parseHtmlDateLikeValue(value: string): Date | null {\n const trimmedValue = value.trim();\n\n const dateMatch = HTML_DATE_PATTERN.exec(trimmedValue);\n\n if (dateMatch) {\n return createValidatedDate(\n Number(dateMatch[1]),\n Number(dateMatch[2]),\n Number(dateMatch[3]),\n );\n }\n\n const datetimeMatch = HTML_DATETIME_PATTERN.exec(trimmedValue);\n\n if (datetimeMatch) {\n return createValidatedDate(\n Number(datetimeMatch[1]),\n Number(datetimeMatch[2]),\n Number(datetimeMatch[3]),\n Number(datetimeMatch[4]),\n Number(datetimeMatch[5]),\n );\n }\n\n return null;\n}\n\nfunction parseFormattedDateValue(value: string, format: string, mode: DatePickerMode): Date | null {\n const orderedParts: DatePartKey[] = [];\n let expression = '^';\n\n for (let index = 0; index < format.length; ) {\n const token = FORMAT_TOKENS.find(({ token: currentToken }) => format.startsWith(currentToken, index));\n\n if (token) {\n expression += token.pattern;\n orderedParts.push(token.key);\n index += token.token.length;\n continue;\n }\n\n expression += escapeRegExp(format[index]);\n index += 1;\n }\n\n expression += '$';\n\n const match = new RegExp(expression).exec(value.trim());\n\n if (!match) {\n return null;\n }\n\n const resolvedParts: Record<DatePartKey, number> = {\n year: 0,\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n };\n\n orderedParts.forEach((key, index) => {\n resolvedParts[key] = Number(match[index + 1]);\n });\n\n if (!resolvedParts.year || !resolvedParts.month || !resolvedParts.day) {\n return null;\n }\n\n return createValidatedDate(\n resolvedParts.year,\n resolvedParts.month,\n resolvedParts.day,\n mode === 'datetime' ? resolvedParts.hour : 0,\n mode === 'datetime' ? resolvedParts.minute : 0,\n );\n}\n\nfunction parseDateValue(value: DatePickerValue | undefined, mode: DatePickerMode, format: string): Date | null {\n if (value == null || value === '') {\n return null;\n }\n\n if (value instanceof Date) {\n return isValidDateInstance(value) ? normalizeDatePrecision(value, mode) : null;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n const parsedFormattedDate = parseFormattedDateValue(value, format, mode);\n\n if (parsedFormattedDate) {\n return normalizeDatePrecision(parsedFormattedDate, mode);\n }\n\n const parsedHtmlDate = parseHtmlDateLikeValue(value);\n\n if (parsedHtmlDate) {\n return normalizeDatePrecision(parsedHtmlDate, mode);\n }\n\n const parsedNativeDate = new Date(value);\n\n return isValidDateInstance(parsedNativeDate) ? normalizeDatePrecision(parsedNativeDate, mode) : null;\n}\n\nfunction formatDateValue(date: Date, format: string): string {\n return FORMAT_TOKENS.reduce((currentFormat, token) => {\n return currentFormat.split(token.token).join(token.formatter(date));\n }, format);\n}\n\nfunction getLaterDate(leftDate: Date | null, rightDate: Date | null): Date | null {\n if (!leftDate) return rightDate;\n if (!rightDate) return leftDate;\n return leftDate.getTime() >= rightDate.getTime() ? leftDate : rightDate;\n}\n\nfunction getEarlierDate(leftDate: Date | null, rightDate: Date | null): Date | null {\n if (!leftDate) return rightDate;\n if (!rightDate) return leftDate;\n return leftDate.getTime() <= rightDate.getTime() ? leftDate : rightDate;\n}\n\nfunction CalendarIcon({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <g transform=\"translate(0.75 0)\">\n <rect x=\"3\" y=\"4.5\" width=\"14\" height=\"12.5\" rx=\"3\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\n <path d=\"M6.25 2.75V6\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" />\n <path d=\"M13.75 2.75V6\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" />\n <path d=\"M3 7.5H17\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\n <circle cx=\"10\" cy=\"11.5\" r=\"1.2\" fill=\"currentColor\" />\n </g>\n </svg>\n );\n}\n\nfunction ClearIcon({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 5L15 15\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n <path d=\"M15 5L5 15\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function DatePicker({\n label,\n hint,\n error,\n size = 'sm',\n value,\n defaultValue,\n onChange,\n mode = 'date',\n format,\n allowPastDates = true,\n allowFutureDates = true,\n minDate,\n maxDate,\n minuteStep = 5,\n clearable = true,\n showPickerButton = true,\n isDateUnavailable,\n invalidDateMessage,\n unavailableDateMessage,\n pickerButtonLabel,\n clearButtonLabel,\n id,\n name,\n disabled,\n readOnly,\n required,\n style,\n className,\n placeholder,\n onBlur,\n onClick,\n onFocus,\n onKeyDown,\n ...rest\n}: DatePickerProps) {\n useUiKitTheme();\n const controlMetrics = getControlMetrics(size);\n const accessoryMetrics = ACCESSORY_METRICS_BY_SIZE[size];\n const generatedIdRef = useRef<string>();\n const visibleInputRef = useRef<HTMLInputElement | null>(null);\n const nativeInputRef = useRef<HTMLInputElement | null>(null);\n const [internalError, setInternalError] = useState<ReactNode>();\n const resolvedFormat = format?.trim() ? format : DEFAULT_FORMAT_BY_MODE[mode];\n const isControlled = value !== undefined;\n const nativePickerType = mode === 'datetime' ? 'datetime-local' : 'date';\n\n if (!generatedIdRef.current) {\n generatedIdRef.current = `ss-date-picker-${Math.random().toString(36).slice(2, 10)}`;\n }\n\n const resolvedId = id ?? generatedIdRef.current;\n const normalizedDefaultValue = useMemo(() => {\n const parsedDefaultValue = parseDateValue(defaultValue, mode, resolvedFormat);\n return parsedDefaultValue ? toLocalInputValue(parsedDefaultValue, mode) : null;\n }, [defaultValue, mode, resolvedFormat]);\n const [uncontrolledValue, setUncontrolledValue] = useState<string | null>(normalizedDefaultValue);\n const committedDate = useMemo(() => {\n const sourceValue = isControlled ? value : uncontrolledValue;\n return parseDateValue(sourceValue, mode, resolvedFormat);\n }, [isControlled, mode, resolvedFormat, uncontrolledValue, value]);\n const committedValue = committedDate ? toLocalInputValue(committedDate, mode) : null;\n const committedDisplayValue = committedDate ? formatDateValue(committedDate, resolvedFormat) : '';\n const [draftValue, setDraftValue] = useState(committedDisplayValue);\n\n useEffect(() => {\n setDraftValue(committedDisplayValue);\n setInternalError(undefined);\n }, [committedDisplayValue]);\n\n useEffect(() => {\n if (!isControlled) {\n setUncontrolledValue((currentValue) => {\n if (currentValue == null) {\n return currentValue;\n }\n\n const parsedCurrentValue = parseDateValue(currentValue, mode, resolvedFormat);\n return parsedCurrentValue ? toLocalInputValue(parsedCurrentValue, mode) : null;\n });\n }\n }, [isControlled, mode, resolvedFormat]);\n\n const parsedMinDate = useMemo(() => {\n const explicitMinDate = parseDateValue(minDate, mode, resolvedFormat);\n const guardedMinDate = allowPastDates ? null : normalizeDatePrecision(new Date(), mode);\n return getLaterDate(explicitMinDate, guardedMinDate);\n }, [allowPastDates, minDate, mode, resolvedFormat]);\n\n const parsedMaxDate = useMemo(() => {\n const explicitMaxDate = parseDateValue(maxDate, mode, resolvedFormat);\n const guardedMaxDate = allowFutureDates ? null : normalizeDatePrecision(new Date(), mode);\n return getEarlierDate(explicitMaxDate, guardedMaxDate);\n }, [allowFutureDates, maxDate, mode, resolvedFormat]);\n\n const hasExternalError = error !== undefined && error !== null && error !== '';\n const hasConfigurationConflict = Boolean(parsedMinDate && parsedMaxDate && parsedMinDate.getTime() > parsedMaxDate.getTime());\n const derivedError = hasConfigurationConflict\n ? 'Current date rules do not allow any selection.'\n : internalError;\n const resolvedError = hasExternalError ? error : derivedError;\n const hasAnyValue = draftValue.trim().length > 0 || Boolean(committedValue);\n const showPickerAdornment = showPickerButton;\n const canOpenPicker = !disabled && !readOnly && !hasConfigurationConflict;\n const canClear = clearable && !disabled && !readOnly && !required && hasAnyValue;\n const leadingContentGap = Math.max(0, Math.round(controlMetrics.paddingX / 3));\n const leadingIconInset = getControlLeadingIconInset(size);\n const pickerAdornmentWidth = getControlLeadingAdornmentWidth(size, accessoryMetrics.iconSize);\n const trailingButtonCount = Number(canClear);\n const trailingInset = trailingButtonCount > 0\n ? Math.max(\n 0,\n accessoryMetrics.rightOffset +\n trailingButtonCount * accessoryMetrics.buttonSize +\n (trailingButtonCount - 1) * accessoryMetrics.clusterGap +\n accessoryMetrics.contentGap -\n controlMetrics.paddingX,\n )\n : 0;\n const fieldBorderColor = resolvedError ? 'var(--theme-negative)' : 'var(--theme-textLight)';\n const disabledFieldStyle = disabled ? { opacity: DISABLED_FIELD_OPACITY } : {};\n const fieldBaseClassName = cx(\n 'w-full box-border rounded-2xl border border-solid bg-[var(--theme-surface)]',\n 'text-[var(--theme-text)] outline-none transition-[border-color,box-shadow,background-color]',\n 'duration-150 placeholder:text-[var(--theme-textLight)]',\n FIELD_HEIGHT_CLASSNAMES[size],\n FIELD_TEXT_CLASSNAMES[size],\n resolvedError ? 'border-[var(--theme-negative)]' : 'border-[var(--theme-textLight)]',\n disabled ? 'cursor-not-allowed' : readOnly ? 'cursor-default' : 'cursor-text',\n );\n const integratedFieldClassName = cx(\n 'box-border flex w-full items-center gap-0 overflow-hidden rounded-2xl',\n 'bg-[var(--theme-surface)] text-[var(--theme-text)]',\n 'transition-[border-color,box-shadow,background-color] duration-150',\n FIELD_HEIGHT_CLASSNAMES[size],\n FIELD_TEXT_CLASSNAMES[size],\n disabled ? 'cursor-not-allowed' : readOnly ? 'cursor-default' : 'cursor-text',\n );\n const integratedFieldBoxShadow = getInsetBorderShadow(fieldBorderColor, resolvedError\n ? { outerShadow: '0 0 0 3px var(--theme-negative)', componentShadow: '0px 4px 5px var(--theme-shadow)' }\n : { componentShadow: '0px 4px 5px var(--theme-shadow)' });\n const integratedInputClassName = cx(\n 'h-full w-full box-border border-0 bg-transparent text-[var(--theme-text)]',\n 'outline-none placeholder:text-[var(--theme-textLight)]',\n FIELD_TEXT_CLASSNAMES[size],\n disabled ? 'cursor-not-allowed' : readOnly ? 'cursor-default' : 'cursor-text',\n );\n const pickerAdornmentClassName = cx(\n 'inline-flex shrink-0 self-stretch items-center justify-center border-0',\n 'bg-transparent p-0 appearance-none',\n resolvedError ? 'text-[var(--theme-negative)]' : 'text-[var(--theme-textLight)]',\n disabled || readOnly || hasConfigurationConflict ? 'cursor-not-allowed' : 'cursor-pointer',\n );\n const accessoryButtonClassName = cx(\n 'm-0 inline-flex shrink-0 items-center justify-center rounded-full border-0 bg-transparent p-0 leading-none',\n 'text-[var(--theme-textLight)]',\n disabled ? 'cursor-not-allowed' : readOnly ? 'cursor-not-allowed' : 'cursor-pointer',\n );\n\n const getValidationMessage = (parsedDate: Date): ReactNode | undefined => {\n if (parsedMinDate && parsedDate.getTime() < parsedMinDate.getTime()) {\n return `Choose a value on or after ${formatDateValue(parsedMinDate, resolvedFormat)}.`;\n }\n\n if (parsedMaxDate && parsedDate.getTime() > parsedMaxDate.getTime()) {\n return `Choose a value on or before ${formatDateValue(parsedMaxDate, resolvedFormat)}.`;\n }\n\n if (mode === 'datetime' && minuteStep > 1 && parsedDate.getMinutes() % minuteStep !== 0) {\n return `Minutes must use ${minuteStep}-minute intervals.`;\n }\n\n if (isDateUnavailable?.(parsedDate)) {\n return unavailableDateMessage ?? 'This date is not available.';\n }\n\n return undefined;\n };\n\n const emitChange = (nextValue: string | null, context: DatePickerChangeContext) => {\n onChange?.(nextValue, context);\n };\n\n const commitValue = (nextValue: string | null, reason: DatePickerChangeReason): boolean => {\n if (hasConfigurationConflict) {\n setInternalError('Current date rules do not allow any selection.');\n return false;\n }\n\n if (!nextValue) {\n if (!isControlled) {\n setUncontrolledValue(null);\n }\n\n setDraftValue('');\n setInternalError(undefined);\n emitChange(null, {\n reason,\n date: null,\n nativeValue: '',\n displayValue: '',\n });\n return true;\n }\n\n const parsedDate = parseHtmlDateLikeValue(nextValue);\n\n if (!parsedDate) {\n setInternalError(invalidDateMessage ?? `Enter a valid value using ${resolvedFormat}.`);\n return false;\n }\n\n const normalizedDate = normalizeDatePrecision(parsedDate, mode);\n const validationMessage = getValidationMessage(normalizedDate);\n\n if (validationMessage) {\n setInternalError(validationMessage);\n return false;\n }\n\n const normalizedValue = toLocalInputValue(normalizedDate, mode);\n const displayValue = formatDateValue(normalizedDate, resolvedFormat);\n\n if (!isControlled) {\n setUncontrolledValue(normalizedValue);\n }\n\n setDraftValue(displayValue);\n setInternalError(undefined);\n emitChange(normalizedValue, {\n reason,\n date: normalizedDate,\n nativeValue: normalizedValue,\n displayValue,\n });\n\n return true;\n };\n\n const commitDraftValue = (): boolean => {\n const trimmedDraftValue = draftValue.trim();\n\n if (!trimmedDraftValue) {\n return commitValue(null, 'clear');\n }\n\n const parsedDraftDate =\n parseFormattedDateValue(trimmedDraftValue, resolvedFormat, mode) ??\n parseHtmlDateLikeValue(trimmedDraftValue) ??\n parseDateValue(trimmedDraftValue, mode, resolvedFormat);\n\n if (!parsedDraftDate) {\n setInternalError(invalidDateMessage ?? `Enter a valid value using ${resolvedFormat}.`);\n return false;\n }\n\n return commitValue(toLocalInputValue(parsedDraftDate, mode), 'input');\n };\n\n const openNativePicker = () => {\n if (!canOpenPicker || !nativeInputRef.current) {\n return;\n }\n\n const parsedDraftDate = draftValue.trim()\n ? parseFormattedDateValue(draftValue, resolvedFormat, mode) ?? parseHtmlDateLikeValue(draftValue)\n : null;\n\n if (parsedDraftDate) {\n nativeInputRef.current.value = toLocalInputValue(parsedDraftDate, mode);\n }\n\n const pickerInput = nativeInputRef.current as HTMLInputElement & { showPicker?: () => void };\n\n try {\n if (pickerInput.showPicker) {\n pickerInput.showPicker();\n return;\n }\n\n pickerInput.focus();\n } catch {\n visibleInputRef.current?.focus();\n }\n };\n\n // The text input keeps the visual identity of the kit, while the hidden native input opens the browser picker.\n const visibleInputProps = {\n ...rest,\n ref: visibleInputRef,\n id: resolvedId,\n type: 'text' as const,\n value: draftValue,\n disabled,\n readOnly,\n required,\n placeholder: placeholder ?? resolvedFormat,\n autoComplete: rest.autoComplete ?? 'off',\n spellCheck: false,\n 'aria-invalid': Boolean(resolvedError),\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDraftValue(event.target.value);\n setInternalError(undefined);\n },\n onFocus: (event: React.FocusEvent<HTMLInputElement>) => {\n setInternalError(undefined);\n onFocus?.(event);\n },\n onClick: (event: React.MouseEvent<HTMLInputElement>) => {\n onClick?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n openNativePicker();\n },\n onBlur: (event: React.FocusEvent<HTMLInputElement>) => {\n commitDraftValue();\n onBlur?.(event);\n },\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n commitDraftValue();\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n setDraftValue(committedDisplayValue);\n setInternalError(undefined);\n }\n },\n };\n\n const nativePickerInput = (\n <input\n ref={nativeInputRef}\n tabIndex={-1}\n aria-hidden=\"true\"\n name={name}\n type={nativePickerType}\n value={committedValue ?? ''}\n min={parsedMinDate ? toLocalInputValue(parsedMinDate, mode) : undefined}\n max={parsedMaxDate ? toLocalInputValue(parsedMaxDate, mode) : undefined}\n step={mode === 'datetime' ? Math.max(1, minuteStep) * 60 : undefined}\n disabled={disabled || readOnly || hasConfigurationConflict}\n onChange={(event) => {\n commitValue(event.target.value || null, 'picker');\n }}\n className=\"ui-kit-sr-only pointer-events-none opacity-0\"\n />\n );\n\n const clearButtonCluster = canClear ? (\n <div\n className=\"absolute inset-y-0 inline-flex items-center\"\n style={{ right: accessoryMetrics.rightOffset, gap: accessoryMetrics.clusterGap }}\n >\n <button\n type=\"button\"\n aria-label={clearButtonLabel ?? 'Clear date'}\n disabled={disabled || readOnly}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n commitValue(null, 'clear');\n visibleInputRef.current?.focus();\n }}\n className={accessoryButtonClassName}\n style={{\n width: accessoryMetrics.buttonSize,\n height: accessoryMetrics.buttonSize,\n ...(disabled ? { opacity: DISABLED_FIELD_OPACITY } : {}),\n }}\n >\n <ClearIcon size={accessoryMetrics.iconSize} />\n </button>\n </div>\n ) : null;\n\n const input = showPickerAdornment ? (\n <div\n className={cx(integratedFieldClassName, className)}\n style={{\n boxShadow: integratedFieldBoxShadow,\n ...style,\n ...disabledFieldStyle,\n }}\n >\n <button\n type=\"button\"\n aria-label={pickerButtonLabel ?? (mode === 'datetime' ? 'Open date and time picker' : 'Open date picker')}\n disabled={!canOpenPicker}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={openNativePicker}\n className={pickerAdornmentClassName}\n style={{\n width: pickerAdornmentWidth,\n boxSizing: 'border-box',\n justifyContent: 'flex-start',\n paddingLeft: leadingIconInset,\n }}\n >\n <CalendarIcon size={accessoryMetrics.iconSize} />\n </button>\n <div className=\"relative h-full min-w-0 flex-1\">\n <input\n {...visibleInputProps}\n className={cx(integratedInputClassName, className)}\n style={{\n padding: getTextInputPadding(size, {\n leadingPadding: leadingContentGap,\n trailingPadding: controlMetrics.paddingX + trailingInset,\n }),\n }}\n />\n {nativePickerInput}\n {clearButtonCluster}\n </div>\n </div>\n ) : (\n <div className=\"relative w-full\">\n <input\n {...visibleInputProps}\n className={cx(fieldBaseClassName, FIELD_PADDING_X_CLASSNAMES[size], className)}\n style={{\n padding: getTextInputPadding(size, {\n trailingPadding: controlMetrics.paddingX + trailingInset,\n }),\n boxShadow: resolvedError\n ? '0 0 0 3px var(--theme-negative), 0px 4px 5px var(--theme-shadow)'\n : '0px 4px 5px var(--theme-shadow)',\n ...style,\n ...disabledFieldStyle,\n }}\n />\n {nativePickerInput}\n {clearButtonCluster}\n </div>\n );\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={resolvedError}\n htmlFor={resolvedId}\n required={required}\n >\n {input}\n </ControlFrame>\n );\n}","import { useEffect, useId, useRef, useState, type CSSProperties, type ChangeEvent, type InputHTMLAttributes, type ReactNode } from 'react';\n\nimport {\n cx,\n getControlLeadingAdornmentWidth,\n getControlLeadingIconInset,\n getControlMetrics,\n getControlTextNudgeStyle,\n getTextInputPadding,\n UI_KIT_ROOT_CLASSNAME,\n useUiKitTheme,\n type ControlSize,\n} from '../foundation';\n\ntype ControlFrameProps = {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n htmlFor?: string;\n required?: boolean;\n useLabelWrapper?: boolean;\n children: ReactNode;\n style?: CSSProperties;\n};\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'dangerouslySetInnerHTML' | 'size'> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n size?: ControlSize;\n showPasswordToggle?: boolean;\n fileButtonLabel?: ReactNode;\n icon?: ReactNode;\n}\n\ntype PasswordToggleMetrics = {\n buttonSize: number;\n leftOffset: number;\n contentGap: number;\n iconSize: number;\n};\n\nconst PASSWORD_TOGGLE_METRICS_BY_SIZE: Record<ControlSize, PasswordToggleMetrics> = {\n sm: {\n buttonSize: 18,\n leftOffset: 8,\n contentGap: 8,\n iconSize: 14,\n },\n md: {\n buttonSize: 19,\n leftOffset: 9,\n contentGap: 9,\n iconSize: 15,\n },\n lg: {\n buttonSize: 20,\n leftOffset: 10,\n contentGap: 10,\n iconSize: 16,\n },\n};\n\nconst FIELD_HEIGHT_CLASSNAMES: Record<ControlSize, string> = {\n sm: 'h-[30px]',\n md: 'h-[34px]',\n lg: 'h-[38px]',\n};\n\nconst FIELD_TEXT_CLASSNAMES: Record<ControlSize, string> = {\n sm: 'text-[13px] leading-4',\n md: 'text-sm leading-[18px]',\n lg: 'text-[15px] leading-[18px]',\n};\n\nconst FIELD_PADDING_X_CLASSNAMES: Record<ControlSize, string> = {\n sm: 'px-3',\n md: 'px-[14px]',\n lg: 'px-4',\n};\n\nconst getPasswordToggleMetrics = (size: ControlSize): PasswordToggleMetrics => PASSWORD_TOGGLE_METRICS_BY_SIZE[size];\n\nconst LOGIN_VALIDATION_ERROR = 'Spaces are not allowed.';\nconst EMAIL_VALIDATION_ERROR = 'Enter a valid email address.';\nconst EMAIL_VALUE_PATTERN = /^[^\\s@]+@[^\\s@]+$/;\nconst SPACE_PATTERN = /\\s/;\n\nconst isRenderableNode = (node: ReactNode): boolean => node !== null && node !== undefined && node !== false;\n\nconst getInputValidationError = (type: string, value: string): string | undefined => {\n if (!value) {\n return undefined;\n }\n\n if (type === 'login') {\n return SPACE_PATTERN.test(value) ? LOGIN_VALIDATION_ERROR : undefined;\n }\n\n if (type === 'email') {\n return EMAIL_VALUE_PATTERN.test(value) ? undefined : EMAIL_VALIDATION_ERROR;\n }\n\n return undefined;\n};\n\nfunction EmailIcon({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M3.75 6.25A1.875 1.875 0 0 1 5.625 4.375h8.75A1.875 1.875 0 0 1 16.25 6.25v7.5a1.875 1.875 0 0 1-1.875 1.875h-8.75A1.875 1.875 0 0 1 3.75 13.75v-7.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.375 6.25 10 10.625l5.625-4.375\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction LoginIcon({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"10\" cy=\"6.25\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\n <path\n d=\"M4.75 16a5.25 5.25 0 0 1 10.5 0\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nfunction FileIcon({ size, selected }: { size: number; selected: boolean }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n {selected ? (\n <>\n <path\n d=\"M5.5 6.25h9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M7.25 6.25V5.25A1.5 1.5 0 0 1 8.75 3.75h2.5a1.5 1.5 0 0 1 1.5 1.5v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.75 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M10 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M12.25 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M6.75 6.25l.5 8a1.5 1.5 0 0 0 1.497 1.406h2.506A1.5 1.5 0 0 0 12.75 14.25l.5-8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </>\n ) : (\n <>\n <path\n d=\"M6.25 2.5h5.652l4.348 4.348V15A2.5 2.5 0 0 1 13.75 17.5h-7.5A2.5 2.5 0 0 1 3.75 15V5A2.5 2.5 0 0 1 6.25 2.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.875 2.75V6.25H15.375\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.5 10h5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M7.5 13h5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </>\n )}\n </svg>\n );\n}\n\nfunction PasswordVisibleIcon({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M6.75 8V6.75A3.25 3.25 0 0 1 12.262 4.415\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 8.25h8a1.75 1.75 0 0 1 1.75 1.75V14A1.75 1.75 0 0 1 14 15.75H6A1.75 1.75 0 0 1 4.25 14V10A1.75 1.75 0 0 1 6 8.25Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 11.25v1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nfunction PasswordHiddenIcon({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M6.75 8V6.75A3.25 3.25 0 1 1 13.25 6.75V8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 8.25h8a1.75 1.75 0 0 1 1.75 1.75V14A1.75 1.75 0 0 1 14 15.75H6A1.75 1.75 0 0 1 4.25 14V10A1.75 1.75 0 0 1 6 8.25Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M10 11.25v1.5\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function ControlFrame({\n label,\n hint,\n error,\n htmlFor,\n required = false,\n useLabelWrapper = true,\n children,\n style,\n}: ControlFrameProps) {\n useUiKitTheme();\n\n if (!label && !hint && !error) {\n return <>{children}</>;\n }\n\n if (!useLabelWrapper) {\n return (\n <div className={cx(UI_KIT_ROOT_CLASSNAME, 'flex w-full flex-col gap-2')} style={style}>\n {(label || hint) ? (\n <div className=\"flex flex-col gap-1\">\n {label ? (\n <label\n htmlFor={htmlFor}\n className=\"text-sm font-bold tracking-[0.01em] text-[var(--theme-text)]\"\n >\n {label}\n {required ? <span className=\"ml-1 text-[var(--theme-negative)]\">*</span> : null}\n </label>\n ) : null}\n {hint ? (\n <span className=\"text-[13px] leading-[1.45] text-[var(--theme-textLight)]\">\n {hint}\n </span>\n ) : null}\n </div>\n ) : null}\n {children}\n {error ? (\n <span className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-negative)]\">\n {error}\n </span>\n ) : null}\n </div>\n );\n }\n\n return (\n <label htmlFor={htmlFor} className={cx(UI_KIT_ROOT_CLASSNAME, 'flex w-full flex-col gap-2')} style={style}>\n {(label || hint) ? (\n <div className=\"flex flex-col gap-1\">\n {label ? (\n <span className=\"text-sm font-bold tracking-[0.01em] text-[var(--theme-text)]\">\n {label}\n {required ? <span className=\"ml-1 text-[var(--theme-negative)]\">*</span> : null}\n </span>\n ) : null}\n {hint ? (\n <span className=\"text-[13px] leading-[1.45] text-[var(--theme-textLight)]\">\n {hint}\n </span>\n ) : null}\n </div>\n ) : null}\n {children}\n {error ? (\n <span className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-negative)]\">\n {error}\n </span>\n ) : null}\n </label>\n );\n}\n\nexport function Input({\n label,\n hint,\n error,\n size = 'sm',\n className,\n showPasswordToggle = true,\n fileButtonLabel,\n icon,\n id,\n disabled,\n placeholder,\n onChange,\n style,\n type = 'text',\n ...rest\n}: InputProps) {\n useUiKitTheme();\n const controlMetrics = getControlMetrics(size);\n const passwordToggleMetrics = getPasswordToggleMetrics(size);\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const [isPasswordVisible, setIsPasswordVisible] = useState(false);\n const [selectedFileNames, setSelectedFileNames] = useState<string[]>([]);\n const [validationError, setValidationError] = useState<string | undefined>();\n const isPasswordField = type === 'password';\n const isEmailField = type === 'email';\n const isLoginField = type === 'login';\n const isFileField = type === 'file';\n const canTogglePasswordVisibility = isPasswordField && showPasswordToggle;\n const resolvedType = isLoginField\n ? 'text'\n : canTogglePasswordVisibility\n ? isPasswordVisible\n ? 'text'\n : 'password'\n : type;\n\n useEffect(() => {\n if (!isFileField) {\n setSelectedFileNames([]);\n }\n }, [isFileField]);\n\n useEffect(() => {\n if (!isEmailField && !isLoginField) {\n setValidationError(undefined);\n }\n }, [isEmailField, isLoginField]);\n\n useEffect(() => {\n if (typeof rest.value !== 'string') {\n return;\n }\n\n setValidationError(getInputValidationError(type, rest.value));\n }, [rest.value, type]);\n\n const hasFileButtonLabel = typeof fileButtonLabel === 'string'\n ? fileButtonLabel.trim().length > 0\n : fileButtonLabel != null;\n const hasSelectedFiles = selectedFileNames.length > 0;\n const showUploadLabel = hasFileButtonLabel && !hasSelectedFiles;\n const passwordLockIconSize = passwordToggleMetrics.iconSize + 2;\n const leadingContentGap = Math.max(0, Math.round(controlMetrics.paddingX / 3));\n const leadingIconInset = getControlLeadingIconInset(size);\n const controlTextNudgeStyle = getControlTextNudgeStyle();\n const hasExternalError = error !== undefined && error !== null && error !== '';\n const resolvedError = hasExternalError ? error : validationError;\n const hasResolvedError = resolvedError !== undefined && resolvedError !== null && resolvedError !== '';\n const fileSelectionText = selectedFileNames.length === 0\n ? (placeholder ?? '')\n : selectedFileNames.length === 1\n ? selectedFileNames[0]\n : `${selectedFileNames.length} files selected`;\n const fileIconSize = Math.max(controlMetrics.fontSize + 3, 16);\n const fileTriggerWidth = getControlLeadingAdornmentWidth(size, fileIconSize);\n const leadingAdornmentWidth = getControlLeadingAdornmentWidth(size, fileIconSize);\n const passwordAdornmentWidth = getControlLeadingAdornmentWidth(size, passwordLockIconSize);\n const defaultLeadingIcon = isEmailField\n ? <EmailIcon size={fileIconSize} />\n : isLoginField\n ? <LoginIcon size={fileIconSize} />\n : null;\n const resolvedLeadingIcon = icon ?? defaultLeadingIcon;\n const hasLeadingIcon = isRenderableNode(resolvedLeadingIcon);\n const resolvedFileIcon = icon ?? <FileIcon size={fileIconSize} selected={hasSelectedFiles} />;\n const resolvedPasswordIcon = icon ?? (isPasswordVisible\n ? <PasswordVisibleIcon size={passwordLockIconSize} />\n : <PasswordHiddenIcon size={passwordLockIconSize} />);\n const fieldBaseClassName = cx(\n UI_KIT_ROOT_CLASSNAME,\n 'w-full box-border rounded-2xl border border-solid bg-[var(--theme-surface)]',\n 'text-[var(--theme-text)] outline-none transition-[border-color,box-shadow,background-color]',\n 'duration-150 placeholder:text-[var(--theme-textLight)]',\n FIELD_HEIGHT_CLASSNAMES[size],\n FIELD_TEXT_CLASSNAMES[size],\n hasResolvedError ? 'border-[var(--theme-negative)]' : 'border-[var(--theme-textLight)]',\n disabled ? 'cursor-not-allowed opacity-70' : 'cursor-text',\n );\n\n const adornedFieldClassName = cx(\n UI_KIT_ROOT_CLASSNAME,\n 'box-border flex w-full items-center gap-0 overflow-hidden rounded-2xl',\n 'border border-solid bg-[var(--theme-surface)] text-[var(--theme-text)] text-left',\n 'transition-[border-color,box-shadow,background-color] duration-150',\n 'shadow-[0px_4px_5px_var(--theme-shadow)]',\n FIELD_HEIGHT_CLASSNAMES[size],\n FIELD_TEXT_CLASSNAMES[size],\n hasResolvedError ? 'border-[var(--theme-negative)]' : 'border-[var(--theme-textLight)]',\n disabled ? 'opacity-70' : null,\n );\n\n const adornedInputClassName = cx(\n 'h-full min-w-0 flex-1 border-0 bg-transparent text-[var(--theme-text)] outline-none',\n 'placeholder:text-[var(--theme-textLight)]',\n FIELD_TEXT_CLASSNAMES[size],\n disabled ? 'cursor-not-allowed' : 'cursor-text',\n );\n\n const adornmentColorClassName = hasResolvedError\n ? 'text-[var(--theme-negative)]'\n : 'text-[var(--theme-textLight)]';\n\n const handleValidatedInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (isEmailField || isLoginField) {\n setValidationError(getInputValidationError(type, event.target.value));\n }\n\n onChange?.(event);\n };\n\n const openFilePicker = () => {\n if (disabled) {\n return;\n }\n\n fileInputRef.current?.click();\n };\n\n const clearSelectedFiles = () => {\n if (disabled || !fileInputRef.current) {\n return;\n }\n\n fileInputRef.current.value = '';\n fileInputRef.current.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n const input = isFileField ? (\n <>\n <input\n {...rest}\n ref={fileInputRef}\n id={inputId}\n type=\"file\"\n disabled={disabled}\n aria-hidden=\"true\"\n tabIndex={-1}\n onChange={(event) => {\n setSelectedFileNames(Array.from(event.target.files ?? [], (file) => file.name));\n onChange?.(event);\n }}\n className=\"hidden\"\n />\n <div\n className={cx(\n adornedFieldClassName,\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n className,\n )}\n style={style}\n >\n <button\n type=\"button\"\n disabled={disabled}\n aria-controls={inputId}\n aria-label={hasSelectedFiles ? (rest.multiple ? 'Remove selected files' : 'Remove selected file') : (rest.multiple ? 'Select files' : 'Select file')}\n onClick={hasSelectedFiles ? clearSelectedFiles : openFilePicker}\n className={cx(\n 'inline-flex shrink-0 self-stretch whitespace-nowrap border-0 bg-transparent',\n 'items-center text-[var(--theme-text)] appearance-none',\n FIELD_TEXT_CLASSNAMES[size],\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n showUploadLabel ? 'justify-start font-bold' : 'justify-center',\n )}\n style={{\n gap: showUploadLabel ? leadingContentGap : 0,\n width: showUploadLabel ? undefined : fileTriggerWidth,\n boxSizing: 'border-box',\n justifyContent: 'flex-start',\n paddingTop: 0,\n paddingRight: showUploadLabel ? controlMetrics.buttonPaddingX : 0,\n paddingBottom: 0,\n paddingLeft: leadingIconInset,\n }}\n >\n <span\n className={cx(\n 'inline-flex shrink-0 items-center justify-center',\n adornmentColorClassName,\n )}\n aria-hidden=\"true\"\n >\n {resolvedFileIcon}\n </span>\n {showUploadLabel ? (\n <span style={controlTextNudgeStyle}>{fileButtonLabel}</span>\n ) : null}\n </button>\n <button\n type=\"button\"\n disabled={disabled}\n aria-controls={inputId}\n aria-label={rest.multiple ? 'Select files' : 'Select file'}\n onClick={openFilePicker}\n className={cx(\n 'flex h-full min-w-0 flex-1 items-center border-0 bg-transparent p-0',\n 'text-left appearance-none',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n >\n {fileSelectionText ? (\n <span\n className={cx(\n 'flex h-full min-w-0 flex-1 items-center overflow-hidden text-ellipsis whitespace-nowrap',\n FIELD_TEXT_CLASSNAMES[size],\n hasSelectedFiles ? 'text-[var(--theme-text)]' : 'text-[var(--theme-textLight)]',\n )}\n style={{\n padding: `0 ${controlMetrics.paddingX}px 0 ${leadingContentGap}px`,\n ...controlTextNudgeStyle,\n }}\n >\n {fileSelectionText}\n </span>\n ) : null}\n </button>\n </div>\n </>\n ) : canTogglePasswordVisibility ? (\n <div\n className={cx(adornedFieldClassName, className)}\n style={style}\n >\n <button\n type=\"button\"\n aria-label={isPasswordVisible ? 'Hide password' : 'Show password'}\n aria-pressed={isPasswordVisible}\n disabled={disabled}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n setIsPasswordVisible((currentValue) => !currentValue);\n }}\n className={cx(\n 'inline-flex shrink-0 self-stretch items-center justify-center border-0',\n 'bg-transparent p-0 appearance-none',\n adornmentColorClassName,\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n style={{\n width: passwordAdornmentWidth,\n boxSizing: 'border-box',\n justifyContent: 'flex-start',\n paddingLeft: leadingIconInset,\n }}\n >\n {resolvedPasswordIcon}\n </button>\n <input\n {...rest}\n id={inputId}\n placeholder={placeholder}\n type={resolvedType}\n disabled={disabled}\n onChange={handleValidatedInputChange}\n className={cx(adornedInputClassName, className)}\n aria-invalid={hasResolvedError}\n style={{\n padding: getTextInputPadding(size, { leadingPadding: leadingContentGap }),\n }}\n />\n </div>\n ) : hasLeadingIcon ? (\n <div\n className={cx(adornedFieldClassName, className)}\n style={style}\n >\n <span\n className={cx(\n 'inline-flex shrink-0 self-stretch items-center justify-center bg-transparent',\n adornmentColorClassName,\n )}\n style={{\n width: leadingAdornmentWidth,\n boxSizing: 'border-box',\n justifyContent: 'flex-start',\n paddingLeft: leadingIconInset,\n }}\n aria-hidden=\"true\"\n >\n {resolvedLeadingIcon}\n </span>\n <input\n {...rest}\n id={inputId}\n placeholder={placeholder}\n type={resolvedType}\n disabled={disabled}\n onChange={handleValidatedInputChange}\n className={cx(adornedInputClassName, className)}\n aria-invalid={hasResolvedError}\n style={{\n padding: getTextInputPadding(size, { leadingPadding: leadingContentGap }),\n }}\n />\n </div>\n ) : (\n <input\n {...rest}\n id={inputId}\n placeholder={placeholder}\n type={resolvedType}\n disabled={disabled}\n onChange={handleValidatedInputChange}\n aria-invalid={hasResolvedError}\n className={cx(fieldBaseClassName, FIELD_PADDING_X_CLASSNAMES[size], className)}\n style={{\n boxShadow: '0px 4px 5px var(--theme-shadow)',\n padding: getTextInputPadding(size),\n ...style,\n }}\n />\n );\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={resolvedError}\n htmlFor={isFileField ? undefined : inputId}\n required={rest.required}\n useLabelWrapper={!isFileField}\n >\n {input}\n </ControlFrame>\n );\n}","import type { CSSProperties, HTMLAttributes } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from '../foundation';\n\nexport type SeparatorOrientation = 'vertical' | 'horizontal';\n\nexport interface SeparatorProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'color'> {\n orientation?: SeparatorOrientation;\n color?: CSSProperties['backgroundColor'];\n size?: CSSProperties['width'];\n}\n\nexport function Separator({\n orientation = 'vertical',\n color,\n size = '100%',\n className,\n style,\n ...rest\n}: SeparatorProps) {\n useUiKitTheme();\n const usesVerticalStretch = orientation === 'vertical' && size === '100%';\n\n const separatorStyle: CSSProperties = {\n backgroundColor: color,\n width: orientation === 'vertical' ? 1 : size,\n height: orientation === 'vertical' ? (usesVerticalStretch ? 'auto' : size) : 1,\n ...style,\n };\n\n return (\n <div\n {...rest}\n role=\"separator\"\n aria-orientation={orientation}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'shrink-0 self-stretch bg-[var(--theme-text)]',\n className,\n )}\n style={separatorStyle}\n />\n );\n}","import {\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type UIEventHandler,\n} from 'react';\n\nimport {\n cx,\n DISABLED_FIELD_OPACITY,\n getInsetBorderShadow,\n getSelectControlPadding,\n getSelectIndicatorOffset,\n getSelectTextNudgeStyle,\n useUiKitTheme,\n} from '../../foundation';\nimport { CheckboxIndicator } from '../../components/Checkbox';\nimport { ControlFrame } from '../../components/Input';\nimport type { MenuPlacement, SelectBaseProps } from './types';\nimport { filterSelectGroups, getTextContent, normalizeSelectValues } from './utils';\n\nconst MENU_OFFSET = 8;\nconst MENU_MAX_HEIGHT = 280;\n\nconst FIELD_HEIGHT_CLASSNAMES: Record<NonNullable<SelectBaseProps['size']>, string> = {\n sm: 'h-[30px]',\n md: 'h-[34px]',\n lg: 'h-[38px]',\n};\n\nconst FIELD_TEXT_CLASSNAMES: Record<NonNullable<SelectBaseProps['size']>, string> = {\n sm: 'text-[13px] leading-4',\n md: 'text-sm leading-[18px]',\n lg: 'text-[15px] leading-[18px]',\n};\n\nconst OPTION_PADDING_CLASSNAMES: Record<NonNullable<SelectBaseProps['size']>, string> = {\n sm: 'px-[11px] py-2',\n md: 'px-3 py-[9px]',\n lg: 'px-[13px] py-[10px]',\n};\n\nexport function SelectBase({\n label,\n hint,\n error,\n placeholder,\n size = 'sm',\n id,\n disabled,\n style,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClick,\n autoFocus,\n className,\n isMulti,\n isFilterable,\n multiple,\n groups,\n nativeOptions,\n emptyMessage = 'No options found.',\n isLoading = false,\n loadingMessage = 'Loading options...',\n searchPlaceholder = 'Search options',\n searchQuery,\n onSearchQueryChange,\n allowOpenWithoutOptions = false,\n filterOptions = true,\n clearSearchOnClose = true,\n preserveUnknownValues = false,\n onListboxScroll,\n menuFooter,\n ...rest\n}: SelectBaseProps) {\n const theme = useUiKitTheme();\n const componentShadow = '0px 4px 5px var(--theme-shadow)';\n const generatedId = useId().replace(/:/g, '');\n const resolvedId = id ?? `ss-select-${generatedId}`;\n const isMultiSelect = Boolean(isMulti || multiple);\n const hasFilter = Boolean(isFilterable);\n const flatOptions = groups.flatMap((group) => group.options);\n const enabledOptions = flatOptions.filter((option) => !option.disabled);\n const isControlled = value !== undefined;\n const fallbackValues = defaultValue !== undefined\n ? normalizeSelectValues(defaultValue)\n : isMultiSelect\n ? []\n : placeholder != null\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n const [uncontrolledValues, setUncontrolledValues] = useState(fallbackValues);\n const [isOpen, setIsOpen] = useState(false);\n const [uncontrolledSearchQuery, setUncontrolledSearchQuery] = useState('');\n const [menuPlacement, setMenuPlacement] = useState<MenuPlacement>('bottom');\n const [isPlacementResolved, setIsPlacementResolved] = useState(false);\n const [highlightedValue, setHighlightedValue] = useState(fallbackValues[0] ?? enabledOptions[0]?.value ?? '');\n const shellRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const hiddenSelectRef = useRef<HTMLSelectElement>(null);\n const highlightSyncKeyRef = useRef('');\n const currentSearchQuery = searchQuery !== undefined ? searchQuery : uncontrolledSearchQuery;\n const selectedValues = isControlled ? normalizeSelectValues(value) : uncontrolledValues;\n const selectedValue = selectedValues[0] ?? '';\n const optionLookup = new Map(flatOptions.map((option) => [option.value, option]));\n const selectedOption = optionLookup.get(selectedValue) ?? null;\n const placeholderTextColor = 'var(--theme-textLight)';\n const hasSelection = isMultiSelect ? selectedValues.length > 0 : selectedValue !== '';\n const displayLabel = hasSelection\n ? isMultiSelect\n ? selectedValues.map((currentValue) => {\n const option = optionLookup.get(currentValue);\n return option ? getTextContent(option.label).trim() || option.value : currentValue;\n }).join(', ')\n : selectedOption?.label ?? selectedValue\n : null;\n const displayContent = displayLabel ?? placeholder ?? '\\u00A0';\n const visibleGroups = hasFilter && filterOptions ? filterSelectGroups(groups, currentSearchQuery) : groups;\n const visibleOptions = visibleGroups.flatMap((group) => group.options);\n const visibleEnabledOptions = visibleOptions.filter((option) => !option.disabled);\n const visibleEnabledValues = visibleEnabledOptions.map((option) => option.value);\n const selectedValuesKey = selectedValues.join('\\u0000');\n const visibleEnabledValuesKey = visibleEnabledValues.join('\\u0000');\n const indicatorOffset = getSelectIndicatorOffset(size);\n const controlTextNudgeStyle = getSelectTextNudgeStyle();\n const listboxId = `${resolvedId}-listbox`;\n const searchInputId = `${resolvedId}-search`;\n const scrollbarThumbColor = theme.colors.secondary;\n const scrollbarThumbHoverColor = theme.colors.textLight;\n const highlightedOption = visibleOptions.find((option) => option.value === highlightedValue) ?? null;\n const canOpenMenu = allowOpenWithoutOptions || flatOptions.length > 0;\n const isTriggerDisabled = disabled || !canOpenMenu;\n const buttonPassthroughProps = Object.fromEntries(\n Object.entries(rest).filter(([key]) => key.startsWith('aria-') || key.startsWith('data-')),\n );\n const triggerBorderColor = error ? 'var(--theme-negative)' : 'var(--theme-textLight)';\n const triggerBoxShadow = getInsetBorderShadow(triggerBorderColor, {\n componentShadow,\n });\n const triggerClassName = cx(\n 'm-0 box-border flex w-full min-w-0 items-center justify-between gap-3 rounded-2xl border-0 appearance-none',\n 'bg-[var(--theme-surface)] outline-none transition-[border-color,box-shadow,background-color]',\n 'duration-150 text-left',\n FIELD_HEIGHT_CLASSNAMES[size],\n FIELD_TEXT_CLASSNAMES[size],\n hasSelection ? 'text-[var(--theme-text)]' : 'text-[var(--theme-textLight)]',\n isTriggerDisabled ? 'cursor-not-allowed' : 'cursor-pointer',\n );\n\n useEffect(() => {\n if (isControlled || preserveUnknownValues) {\n return;\n }\n\n const invalidValues = uncontrolledValues.filter(\n (currentValue) => !flatOptions.some((option) => option.value === currentValue),\n );\n\n if (invalidValues.length === 0) {\n return;\n }\n\n const nextValues = defaultValue !== undefined\n ? normalizeSelectValues(defaultValue).filter(\n (currentValue) => flatOptions.some((option) => option.value === currentValue),\n )\n : isMultiSelect\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n\n setUncontrolledValues(nextValues);\n setHighlightedValue(nextValues[0] ?? enabledOptions[0]?.value ?? '');\n }, [defaultValue, enabledOptions, flatOptions, isControlled, isMultiSelect, preserveUnknownValues, uncontrolledValues]);\n\n useEffect(() => {\n if (!isOpen) {\n highlightSyncKeyRef.current = '';\n setMenuPlacement('bottom');\n setIsPlacementResolved(false);\n return;\n }\n\n const nextHighlightSyncKey = `${selectedValuesKey}\\u0001${visibleEnabledValuesKey}`;\n\n if (highlightSyncKeyRef.current === nextHighlightSyncKey) {\n return;\n }\n\n highlightSyncKeyRef.current = nextHighlightSyncKey;\n\n const nextHighlightedValue = [...selectedValues].reverse().find((currentValue) => visibleEnabledValues.includes(currentValue))\n ?? visibleEnabledOptions[0]?.value\n ?? '';\n setHighlightedValue(nextHighlightedValue);\n }, [isOpen, selectedValuesKey, visibleEnabledValuesKey, selectedValues, visibleEnabledOptions, visibleEnabledValues]);\n\n useEffect(() => {\n if (!isOpen || !hasFilter) {\n return;\n }\n\n searchInputRef.current?.focus();\n }, [hasFilter, isOpen]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const frameId = window.requestAnimationFrame(() => {\n const triggerRect = buttonRef.current?.getBoundingClientRect();\n const menuElement = menuRef.current;\n\n if (!triggerRect || !menuElement) {\n setMenuPlacement('bottom');\n setIsPlacementResolved(true);\n return;\n }\n\n const measuredMenuHeight = menuElement.getBoundingClientRect().height;\n const menuHeight = Math.min(measuredMenuHeight || menuElement.scrollHeight, MENU_MAX_HEIGHT);\n const availableBelow = window.innerHeight - triggerRect.bottom - MENU_OFFSET;\n const availableAbove = triggerRect.top - MENU_OFFSET;\n const nextPlacement: MenuPlacement = availableBelow < menuHeight && availableAbove >= menuHeight ? 'top' : 'bottom';\n\n setMenuPlacement(nextPlacement);\n setIsPlacementResolved(true);\n });\n\n return () => {\n window.cancelAnimationFrame(frameId);\n };\n }, [isOpen, visibleOptions.length]);\n\n useEffect(() => {\n if (isOpen || !clearSearchOnClose || currentSearchQuery === '') {\n return;\n }\n\n if (searchQuery === undefined) {\n setUncontrolledSearchQuery('');\n }\n\n onSearchQueryChange?.('');\n }, [clearSearchOnClose, currentSearchQuery, isOpen, onSearchQueryChange, searchQuery]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n if (shellRef.current?.contains(event.target as Node)) {\n return;\n }\n\n setIsOpen(false);\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n };\n }, [isOpen]);\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n const form = hiddenSelectRef.current?.form;\n\n if (!form) {\n return;\n }\n\n const handleReset = () => {\n queueMicrotask(() => {\n const nextValues = defaultValue !== undefined\n ? normalizeSelectValues(defaultValue)\n : isMultiSelect\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n\n setUncontrolledValues(nextValues);\n setHighlightedValue(nextValues[0] ?? enabledOptions[0]?.value ?? '');\n setIsOpen(false);\n });\n };\n\n form.addEventListener('reset', handleReset);\n\n return () => {\n form.removeEventListener('reset', handleReset);\n };\n }, [defaultValue, enabledOptions, isControlled, isMultiSelect]);\n\n const syncHiddenSelect = (nextValues: string[]) => {\n const selectElement = hiddenSelectRef.current;\n\n if (!selectElement) {\n return;\n }\n\n if (isMultiSelect) {\n Array.from(selectElement.options).forEach((optionElement) => {\n optionElement.selected = nextValues.includes(optionElement.value);\n });\n } else {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'value');\n\n if (descriptor?.set) {\n descriptor.set.call(selectElement, nextValues[0] ?? '');\n } else {\n selectElement.value = nextValues[0] ?? '';\n }\n }\n\n selectElement.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n const updateMultiSelection = (nextValues: string[]) => {\n if (!isMultiSelect || disabled) {\n return;\n }\n\n if (!isControlled) {\n setUncontrolledValues(nextValues);\n }\n\n setHighlightedValue(nextValues[nextValues.length - 1] ?? enabledOptions[0]?.value ?? '');\n syncHiddenSelect(nextValues);\n };\n\n const toggleVisibleSelection = (checked: boolean) => {\n if (!isMultiSelect || disabled || visibleEnabledValues.length === 0) {\n return;\n }\n\n const nextValues = checked\n ? Array.from(new Set([...selectedValues, ...visibleEnabledValues]))\n : selectedValues.filter((currentValue) => !visibleEnabledValues.includes(currentValue));\n\n updateMultiSelection(nextValues);\n };\n\n const commitSelection = (nextValue: string) => {\n if (disabled) {\n if (!isMultiSelect) {\n setIsOpen(false);\n }\n\n return;\n }\n\n if (isMultiSelect) {\n const nextValues = selectedValues.includes(nextValue)\n ? selectedValues.filter((currentValue) => currentValue !== nextValue)\n : [...selectedValues, nextValue];\n\n updateMultiSelection(nextValues);\n return;\n }\n\n if (nextValue === selectedValue) {\n setIsOpen(false);\n return;\n }\n\n if (!isControlled) {\n setUncontrolledValues([nextValue]);\n }\n\n setHighlightedValue(nextValue);\n setIsOpen(false);\n syncHiddenSelect([nextValue]);\n buttonRef.current?.focus();\n };\n\n const handleHiddenSelectChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const nextValues = isMultiSelect\n ? Array.from(event.currentTarget.selectedOptions, (option) => option.value)\n : [event.currentTarget.value];\n\n if (!isControlled) {\n setUncontrolledValues(nextValues);\n }\n\n setHighlightedValue(nextValues[nextValues.length - 1] ?? enabledOptions[0]?.value ?? '');\n onChange?.(event);\n };\n\n const visibleSelectedCount = visibleEnabledValues.filter((currentValue) => selectedValues.includes(currentValue)).length;\n const hasSomeVisibleSelected = visibleSelectedCount > 0 && visibleSelectedCount < visibleEnabledValues.length;\n const hasAllVisibleSelected = visibleEnabledValues.length > 0 && visibleSelectedCount === visibleEnabledValues.length;\n const canToggleVisibleSelection = !disabled && visibleEnabledValues.length > 0;\n const bulkToggleControl = isMultiSelect ? (\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-label=\"Toggle all visible options\"\n aria-checked={hasAllVisibleSelected ? true : hasSomeVisibleSelected ? 'mixed' : false}\n disabled={!canToggleVisibleSelection}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={(event) => {\n event.stopPropagation();\n toggleVisibleSelection(!hasAllVisibleSelected);\n }}\n className={cx(\n 'm-0 inline-flex h-5 w-5 shrink-0 items-center justify-center border-0 bg-transparent p-0',\n canToggleVisibleSelection ? 'cursor-pointer opacity-100' : 'cursor-not-allowed opacity-45',\n )}\n >\n <CheckboxIndicator\n checked={hasAllVisibleSelected}\n indeterminate={hasSomeVisibleSelected}\n disabled={!canToggleVisibleSelection}\n />\n </button>\n ) : null;\n\n const moveHighlight = (direction: 1 | -1) => {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n const currentIndex = visibleEnabledOptions.findIndex((option) => option.value === highlightedValue);\n\n if (currentIndex === -1) {\n setHighlightedValue(\n direction === 1 ? visibleEnabledOptions[0].value : visibleEnabledOptions[visibleEnabledOptions.length - 1].value,\n );\n return;\n }\n\n const nextIndex = Math.max(0, Math.min(visibleEnabledOptions.length - 1, currentIndex + direction));\n setHighlightedValue(visibleEnabledOptions[nextIndex].value);\n };\n\n const handleTriggerClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event as unknown as MouseEvent<HTMLSelectElement>);\n\n if (event.defaultPrevented || disabled || !canOpenMenu) {\n return;\n }\n\n setIsOpen((current) => !current);\n };\n\n const handleTriggerFocus = (event: FocusEvent<HTMLButtonElement>) => {\n onFocus?.(event as unknown as FocusEvent<HTMLSelectElement>);\n };\n\n const handleTriggerBlur = (event: FocusEvent<HTMLButtonElement>) => {\n const nextTarget = event.relatedTarget as Node | null;\n\n if (!shellRef.current?.contains(nextTarget)) {\n setIsOpen(false);\n }\n\n onBlur?.(event as unknown as FocusEvent<HTMLSelectElement>);\n };\n\n const handleTriggerKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event as unknown as KeyboardEvent<HTMLSelectElement>);\n\n if (event.defaultPrevented || disabled) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(selectedOption?.value ?? visibleEnabledOptions[0]?.value ?? '');\n return;\n }\n\n moveHighlight(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(selectedOption?.value ?? visibleEnabledOptions[visibleEnabledOptions.length - 1]?.value ?? '');\n return;\n }\n\n moveHighlight(-1);\n return;\n }\n\n if (event.key === 'Home' && isOpen) {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n event.preventDefault();\n setHighlightedValue(visibleEnabledOptions[0].value);\n return;\n }\n\n if (event.key === 'End' && isOpen) {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n event.preventDefault();\n setHighlightedValue(visibleEnabledOptions[visibleEnabledOptions.length - 1].value);\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(selectedOption?.value ?? visibleEnabledOptions[0]?.value ?? '');\n return;\n }\n\n if (highlightedOption && !highlightedOption.disabled) {\n commitSelection(highlightedOption.value);\n }\n\n return;\n }\n\n if (event.key === 'Escape' && isOpen) {\n event.preventDefault();\n setIsOpen(false);\n return;\n }\n\n if (event.key === 'Tab') {\n setIsOpen(false);\n }\n };\n\n const handleFilterKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n moveHighlight(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n moveHighlight(-1);\n return;\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n\n if (highlightedOption && !highlightedOption.disabled) {\n commitSelection(highlightedOption.value);\n }\n\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n setIsOpen(false);\n buttonRef.current?.focus();\n return;\n }\n\n if (event.key === 'Tab') {\n setIsOpen(false);\n }\n };\n\n const emptyState = isLoading ? loadingMessage : emptyMessage;\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={error}\n htmlFor={resolvedId}\n required={rest.required}\n useLabelWrapper={false}\n >\n <div ref={shellRef} className=\"relative w-full\">\n <button\n {...buttonPassthroughProps}\n id={resolvedId}\n ref={buttonRef}\n type=\"button\"\n className={cx(triggerClassName, className)}\n title={rest.title}\n disabled={isTriggerDisabled}\n autoFocus={autoFocus}\n tabIndex={rest.tabIndex}\n role=\"combobox\"\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-invalid={error ? true : rest['aria-invalid']}\n aria-required={rest.required}\n onClick={handleTriggerClick}\n onFocus={handleTriggerFocus}\n onBlur={handleTriggerBlur}\n onKeyDown={handleTriggerKeyDown}\n style={{\n padding: getSelectControlPadding(size),\n boxShadow: triggerBoxShadow,\n ...style,\n ...(isTriggerDisabled ? { opacity: DISABLED_FIELD_OPACITY } : {}),\n }}\n >\n <span\n className=\"block min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap\"\n style={controlTextNudgeStyle}\n >\n {displayContent}\n </span>\n <span\n aria-hidden=\"true\"\n className={cx(\n 'pointer-events-none absolute top-1/2 flex -translate-y-1/2 items-center justify-center',\n 'transition-[transform,color] duration-150',\n isTriggerDisabled ? 'text-[var(--theme-secondary)]' : 'text-[var(--theme-textLight)]',\n )}\n style={{\n right: indicatorOffset,\n transform: `translateY(-50%) rotate(${isOpen ? 180 : 0}deg)`,\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M5.75 7.75L10 12l4.25-4.25\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </button>\n\n <select\n {...rest}\n id={`${resolvedId}-native`}\n ref={hiddenSelectRef}\n name={rest.name}\n disabled={disabled}\n multiple={isMultiSelect}\n value={isMultiSelect ? selectedValues : selectedValue}\n onChange={handleHiddenSelectChange}\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"ui-kit-sr-only pointer-events-none opacity-0\"\n >\n {nativeOptions}\n </select>\n\n {isOpen ? (\n <>\n <style>\n {`\n #${listboxId} {\n scrollbar-width: thin;\n scrollbar-color: ${scrollbarThumbColor} transparent;\n }\n\n #${listboxId}::-webkit-scrollbar {\n width: 8px;\n }\n\n #${listboxId}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n #${listboxId}::-webkit-scrollbar-thumb {\n background: ${scrollbarThumbColor};\n border-radius: 999px;\n border: 2px solid transparent;\n background-clip: padding-box;\n }\n\n #${listboxId}::-webkit-scrollbar-thumb:hover {\n background: ${scrollbarThumbHoverColor};\n background-clip: padding-box;\n }\n\n #${searchInputId}::placeholder {\n color: ${placeholderTextColor};\n opacity: 1;\n }\n `}\n </style>\n <div\n ref={menuRef}\n className=\"absolute left-0 right-0 z-30 flex max-h-[280px] flex-col gap-1 overflow-hidden rounded-[20px] border p-2\"\n style={{\n top: menuPlacement === 'bottom' ? `calc(100% + ${MENU_OFFSET}px)` : 'auto',\n bottom: menuPlacement === 'top' ? `calc(100% + ${MENU_OFFSET}px)` : 'auto',\n borderColor: theme.colors.secondary,\n backgroundColor: theme.colors.surface,\n boxShadow: componentShadow,\n visibility: isPlacementResolved ? 'visible' : 'hidden',\n }}\n >\n {hasFilter ? (\n <div\n className=\"flex shrink-0 items-center justify-start gap-2 border-b px-1 pb-[10px] pt-1\"\n style={{ borderColor: theme.colors.secondary }}\n >\n {bulkToggleControl}\n <input\n id={searchInputId}\n ref={searchInputRef}\n type=\"search\"\n value={currentSearchQuery}\n onChange={(event) => {\n const nextQuery = event.currentTarget.value;\n\n if (searchQuery === undefined) {\n setUncontrolledSearchQuery(nextQuery);\n }\n\n onSearchQueryChange?.(nextQuery);\n }}\n onKeyDown={handleFilterKeyDown}\n onMouseDown={(event) => {\n event.stopPropagation();\n }}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n className=\"w-full flex-1 rounded-[11px] border bg-[var(--theme-surface)] px-[11px] py-[7px] text-[11px] leading-[1.4] text-[var(--theme-text)] outline-none\"\n style={{\n borderColor: theme.colors.secondary,\n boxShadow: componentShadow,\n }}\n />\n </div>\n ) : isMultiSelect ? (\n <div\n className=\"flex shrink-0 items-center justify-start border-b px-1 pb-[10px] pt-1\"\n style={{ borderColor: theme.colors.secondary }}\n >\n {bulkToggleControl}\n </div>\n ) : null}\n\n <div\n id={listboxId}\n role=\"listbox\"\n aria-labelledby={resolvedId}\n aria-multiselectable={isMultiSelect || undefined}\n onScroll={onListboxScroll as UIEventHandler<HTMLDivElement> | undefined}\n className=\"min-h-0 flex-1 overflow-y-auto overflow-x-hidden\"\n >\n {visibleGroups.length === 0 ? (\n <div\n className=\"px-3 py-[14px] text-center text-[13px] text-[var(--theme-textLight)]\"\n >\n {emptyState}\n </div>\n ) : visibleGroups.map((group) => (\n <div\n key={group.key}\n className={cx('flex flex-col gap-1', group.label ? 'mt-1' : 'mt-0')}\n >\n {group.label ? (\n <span\n className=\"px-2 pb-0.5 pt-1.5 text-[11px] font-extrabold uppercase tracking-[0.08em] text-[var(--theme-textLight)]\"\n >\n {group.label}\n </span>\n ) : null}\n {group.options.map((option) => {\n const isSelected = selectedValues.includes(option.value);\n const isHighlighted = option.value === highlightedValue;\n const isActive = isSelected || isHighlighted;\n\n return (\n <div\n key={option.key}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n onMouseEnter={() => {\n if (!option.disabled) {\n setHighlightedValue(option.value);\n }\n }}\n onMouseMove={() => {\n if (!option.disabled && highlightedValue !== option.value) {\n setHighlightedValue(option.value);\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n if (!option.disabled) {\n commitSelection(option.value);\n }\n }}\n className={cx(\n 'flex w-full min-w-0 items-center justify-between gap-3 rounded-xl box-border',\n 'transition-[background-color,color] duration-150',\n OPTION_PADDING_CLASSNAMES[size],\n option.disabled\n ? 'cursor-not-allowed text-[var(--theme-secondary)]'\n : 'cursor-pointer',\n !option.disabled && isActive ? 'text-[var(--theme-onPrimary)]' : null,\n !option.disabled && !isActive ? 'text-[var(--theme-text)]' : null,\n isSelected ? 'bg-[var(--theme-primary)] font-bold' : null,\n !isSelected && isHighlighted ? 'bg-[var(--theme-primary)]' : null,\n !isSelected && !isHighlighted ? 'bg-[var(--theme-surface)] font-normal' : null,\n )}\n >\n <span\n className=\"flex min-w-0 flex-1 items-center gap-2.5\"\n >\n {isMultiSelect ? (\n <CheckboxIndicator\n checked={isSelected}\n disabled={option.disabled}\n size={16}\n checkedColor={isActive ? 'var(--theme-onPrimary)' : 'var(--theme-primary)'}\n iconColor={isActive ? 'var(--theme-primary)' : 'var(--theme-onPrimary)'}\n uncheckedBorderColor={isActive ? 'var(--theme-onPrimary)' : theme.colors.secondary}\n uncheckedBackgroundColor=\"transparent\"\n />\n ) : null}\n <span\n className=\"block min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap\"\n >\n {option.label}\n </span>\n </span>\n {!isMultiSelect && isSelected ? (\n <span\n aria-hidden=\"true\"\n className=\"flex shrink-0 items-center justify-center text-[var(--theme-primary)]\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M5.75 10.25L8.5 13l5.75-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n ) : null}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n {menuFooter ? (\n <div\n className=\"shrink-0 border-t px-2 pb-1 pt-2.5\"\n style={{ borderColor: theme.colors.secondary }}\n >\n {menuFooter}\n </div>\n ) : null}\n </div>\n </>\n ) : null}\n </div>\n </ControlFrame>\n );\n}","import { isValidElement, type ReactNode } from 'react';\n\nimport type { ParsedGroup, SelectChildProps } from './types';\n\nexport function getTextContent(node: ReactNode): string {\n if (node == null || typeof node === 'boolean') {\n return '';\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n\n if (Array.isArray(node)) {\n return node.map(getTextContent).join('');\n }\n\n if (isValidElement<SelectChildProps>(node)) {\n return getTextContent(node.props.children);\n }\n\n return '';\n}\n\nexport function normalizeSelectValue(value: unknown): string {\n if (Array.isArray(value)) {\n return value.length > 0 ? normalizeSelectValue(value[0]) : '';\n }\n\n return value == null ? '' : String(value);\n}\n\nexport function normalizeSelectValues(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map((item) => normalizeSelectValue(item));\n }\n\n if (value == null) {\n return [];\n }\n\n return [normalizeSelectValue(value)];\n}\n\nexport function filterSelectGroups(groups: ParsedGroup[], query: string): ParsedGroup[] {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return groups;\n }\n\n return groups\n .map((group) => ({\n ...group,\n options: group.options.filter((option) => {\n const optionText = getTextContent(option.label).trim().toLowerCase();\n return optionText.includes(normalizedQuery);\n }),\n }))\n .filter((group) => group.options.length > 0);\n}","import { Children, isValidElement, type ReactNode } from 'react';\n\nimport type { ParsedGroup, ParsedOption, SelectChildProps } from './types';\nimport { getTextContent, normalizeSelectValue } from './utils';\n\nfunction buildOption(keyPrefix: string, index: number, props: SelectChildProps, groupDisabled = false) {\n const rawValue = props.value !== undefined ? props.value : getTextContent(props.children).trim();\n const normalizedValue = normalizeSelectValue(rawValue);\n\n return {\n key: `${keyPrefix}-${index}-${normalizedValue}`,\n value: normalizedValue,\n label: props.children ?? normalizedValue,\n disabled: groupDisabled || Boolean(props.disabled),\n };\n}\n\nexport function parseSelectChildren(children: ReactNode): ParsedGroup[] {\n const groups: ParsedGroup[] = [];\n const standaloneOptions: ParsedOption[] = [];\n let optionIndex = 0;\n let groupIndex = 0;\n\n const flushStandaloneOptions = () => {\n if (standaloneOptions.length === 0) {\n return;\n }\n\n groups.push({\n key: `standalone-${groups.length}`,\n options: [...standaloneOptions],\n });\n\n standaloneOptions.length = 0;\n };\n\n Children.forEach(children, (child) => {\n if (!isValidElement<SelectChildProps>(child)) {\n return;\n }\n\n if (child.type === 'option') {\n standaloneOptions.push(buildOption('option', optionIndex, child.props));\n optionIndex += 1;\n return;\n }\n\n if (child.type !== 'optgroup') {\n return;\n }\n\n flushStandaloneOptions();\n\n const groupOptions: ParsedOption[] = [];\n let groupOptionIndex = 0;\n\n Children.forEach(child.props.children, (optionChild) => {\n if (!isValidElement<SelectChildProps>(optionChild) || optionChild.type !== 'option') {\n return;\n }\n\n groupOptions.push(\n buildOption(\n `group-${groupIndex}-option`,\n groupOptionIndex,\n optionChild.props,\n Boolean(child.props.disabled),\n ),\n );\n\n groupOptionIndex += 1;\n });\n\n if (groupOptions.length > 0) {\n groups.push({\n key: `group-${groupIndex}`,\n label: child.props.label,\n options: groupOptions,\n });\n\n groupIndex += 1;\n }\n });\n\n flushStandaloneOptions();\n\n return groups;\n}","import type { ReactNode } from 'react';\n\nimport { SelectBase } from '../componentsBase/select/SelectBase';\nimport { parseSelectChildren } from '../componentsBase/select/childrenAdapter';\nimport type { SharedSelectProps } from '../componentsBase/select/types';\n\nexport interface SelectProps extends SharedSelectProps {\n children?: ReactNode;\n}\n\nexport function Select({ children, ...props }: SelectProps) {\n return <SelectBase {...props} groups={parseSelectChildren(children)} nativeOptions={children} />;\n}","import { useEffect, useMemo, useRef, useState, type ReactNode, type UIEvent } from 'react';\n\nimport { DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS, useUiKitTheme } from '../foundation';\nimport { SelectBase } from '../componentsBase/select/SelectBase';\nimport {\n buildNativeOptionsFromObjectOptions,\n buildParsedGroupsFromObjectOptions,\n dedupeSelectObjectOptions,\n getSelectObjectOptionKey,\n type SelectObjectOption,\n type SelectObjectOptionValue,\n} from '../componentsBase/select/objectOptionsAdapter';\nimport type { SharedSelectProps } from '../componentsBase/select/types';\n\nexport type SelectAsyncOptionValue = SelectObjectOptionValue;\nexport type SelectAsyncOption<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue> = SelectObjectOption<TValue>;\n\nexport interface SelectAsyncLoadContext {\n page: number;\n signal: AbortSignal;\n}\n\nexport interface SelectAsyncLoadResult<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue> {\n options: Array<SelectAsyncOption<TValue>>;\n hasMore?: boolean;\n}\n\ntype SelectAsyncSingleValue<TValue extends SelectAsyncOptionValue> = SelectAsyncOption<TValue> | null;\ntype SelectAsyncMultiValue<TValue extends SelectAsyncOptionValue> = Array<SelectAsyncOption<TValue>>;\ntype SelectAsyncValue<TValue extends SelectAsyncOptionValue> =\n | SelectAsyncSingleValue<TValue>\n | SelectAsyncMultiValue<TValue>;\n\nexport interface SelectAsyncProps<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue>\n extends Omit<SharedSelectProps, 'children' | 'value' | 'defaultValue' | 'onChange' | 'multiple'> {\n value?: SelectAsyncValue<TValue>;\n defaultValue?: SelectAsyncValue<TValue>;\n onChange?: (value: SelectAsyncValue<TValue>) => void;\n loadOptions: (\n query: string,\n loadedOptions: Array<SelectAsyncOption<TValue>>,\n context: SelectAsyncLoadContext,\n ) => Promise<SelectAsyncLoadResult<TValue>>;\n defaultOptions?: Array<SelectAsyncOption<TValue>>;\n fixedOptions?: Array<SelectAsyncOption<TValue>>;\n cacheUniqs?: ReadonlyArray<unknown>;\n searchDebounceMs?: number;\n loadingMessage?: ReactNode;\n loadErrorMessage?: ReactNode;\n emptyMessage?: ReactNode;\n loadingMoreMessage?: ReactNode;\n loadMoreHintMessage?: ReactNode;\n loadMoreThreshold?: number;\n searchPlaceholder?: string;\n}\n\nconst DEFAULT_LOAD_MORE_THRESHOLD = 24;\n\nconst normalizeAsyncValue = <TValue extends SelectAsyncOptionValue>(\n value: SelectAsyncValue<TValue> | undefined,\n isMulti: boolean,\n): Array<SelectAsyncOption<TValue>> => {\n if (value == null) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return isMulti ? [value] : [value];\n};\n\nconst areUnknownArraysEqual = (left: ReadonlyArray<unknown>, right: ReadonlyArray<unknown>): boolean => {\n if (left.length !== right.length) {\n return false;\n }\n\n return left.every((entry, index) => Object.is(entry, right[index]));\n};\n\nexport function SelectAsync<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue>({\n value,\n defaultValue,\n onChange,\n loadOptions,\n defaultOptions = [],\n fixedOptions = [],\n cacheUniqs = [],\n searchDebounceMs = DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS,\n loadingMessage = 'Loading options...',\n loadErrorMessage = 'Could not load options.',\n emptyMessage = 'No options found.',\n loadingMoreMessage = 'Loading more...',\n loadMoreHintMessage = 'Scroll to load more',\n loadMoreThreshold = DEFAULT_LOAD_MORE_THRESHOLD,\n isMulti,\n isFilterable,\n searchPlaceholder = 'Search options',\n ...props\n}: SelectAsyncProps<TValue>) {\n useUiKitTheme();\n const isMultiSelect = Boolean(isMulti);\n const isControlled = value !== undefined;\n const [internalSelectedOptions, setInternalSelectedOptions] = useState<Array<SelectAsyncOption<TValue>>>(() => {\n return normalizeAsyncValue(defaultValue, isMultiSelect);\n });\n const [remoteOptions, setRemoteOptions] = useState<Array<SelectAsyncOption<TValue>>>(defaultOptions);\n const [searchQuery, setSearchQuery] = useState('');\n const [nextPage, setNextPage] = useState(1);\n const [hasMore, setHasMore] = useState(true);\n const [isInitialLoading, setIsInitialLoading] = useState(false);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [loadError, setLoadError] = useState<ReactNode | null>(null);\n const selectedOptions = isControlled\n ? normalizeAsyncValue(value as SelectAsyncValue<TValue>, isMultiSelect)\n : internalSelectedOptions;\n const optionLookupRef = useRef(new Map<string, SelectAsyncOption<TValue>>());\n const loadOptionsRef = useRef(loadOptions);\n const remoteOptionsRef = useRef(remoteOptions);\n const cacheUniqsRef = useRef(cacheUniqs);\n const requestVersionRef = useRef(0);\n const activeControllerRef = useRef<AbortController | null>(null);\n\n loadOptionsRef.current = loadOptions;\n remoteOptionsRef.current = remoteOptions;\n\n const mergedOptions = useMemo(() => {\n const baseOptions = dedupeSelectObjectOptions<TValue>([\n ...fixedOptions,\n ...remoteOptions,\n ]);\n const knownOptionKeys = new Set(baseOptions.map((option) => getSelectObjectOptionKey(option)));\n const missingSelectedOptions = selectedOptions.filter((option) => {\n return !knownOptionKeys.has(getSelectObjectOptionKey(option));\n });\n\n return [...baseOptions, ...missingSelectedOptions];\n }, [fixedOptions, remoteOptions, selectedOptions]);\n\n useEffect(() => {\n const nextLookup = new Map<string, SelectAsyncOption<TValue>>();\n\n mergedOptions.forEach((option) => {\n nextLookup.set(getSelectObjectOptionKey(option), option);\n });\n\n optionLookupRef.current = nextLookup;\n }, [mergedOptions]);\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n setInternalSelectedOptions(normalizeAsyncValue(defaultValue, isMultiSelect));\n }, [defaultValue, isControlled, isMultiSelect]);\n\n useEffect(() => {\n if (areUnknownArraysEqual(cacheUniqsRef.current, cacheUniqs)) {\n return;\n }\n\n cacheUniqsRef.current = cacheUniqs;\n setRemoteOptions(defaultOptions);\n setSearchQuery('');\n setNextPage(1);\n setHasMore(true);\n setLoadError(null);\n }, [cacheUniqs, defaultOptions]);\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n requestVersionRef.current += 1;\n const currentRequestVersion = requestVersionRef.current;\n const controller = new AbortController();\n\n activeControllerRef.current?.abort();\n activeControllerRef.current = controller;\n setIsInitialLoading(true);\n setIsLoadingMore(false);\n setLoadError(null);\n\n void loadOptionsRef.current(searchQuery, [], { page: 1, signal: controller.signal })\n .then((result) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions(result.options);\n setHasMore(result.hasMore ?? result.options.length > 0);\n setNextPage(2);\n })\n .catch((error: unknown) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions([]);\n setHasMore(false);\n setNextPage(1);\n\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n setLoadError(loadErrorMessage);\n })\n .finally(() => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setIsInitialLoading(false);\n });\n }, searchDebounceMs);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [loadErrorMessage, searchDebounceMs, searchQuery, ...cacheUniqs]);\n\n useEffect(() => {\n return () => {\n activeControllerRef.current?.abort();\n };\n }, []);\n\n const loadNextPage = async () => {\n if (isInitialLoading || isLoadingMore || !hasMore) {\n return;\n }\n\n const controller = new AbortController();\n const currentRequestVersion = requestVersionRef.current;\n\n setIsLoadingMore(true);\n setLoadError(null);\n\n try {\n const result = await loadOptionsRef.current(searchQuery, remoteOptionsRef.current, {\n page: nextPage,\n signal: controller.signal,\n });\n\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions((currentOptions) => {\n return dedupeSelectObjectOptions<TValue>([\n ...currentOptions,\n ...result.options,\n ]);\n });\n setHasMore(result.hasMore ?? result.options.length > 0);\n setNextPage((currentPage) => currentPage + 1);\n } catch (error: unknown) {\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n setLoadError(loadErrorMessage);\n } finally {\n setIsLoadingMore(false);\n }\n };\n\n const handleListboxScroll = (event: UIEvent<HTMLDivElement>) => {\n const element = event.currentTarget;\n const distanceToBottom = element.scrollHeight - element.scrollTop - element.clientHeight;\n\n if (distanceToBottom <= loadMoreThreshold) {\n void loadNextPage();\n }\n };\n\n const handleBaseChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const nextKeys = isMultiSelect\n ? Array.from(event.currentTarget.selectedOptions, (option) => option.value)\n : event.currentTarget.value\n ? [event.currentTarget.value]\n : [];\n const nextOptions = nextKeys\n .map((optionKey) => optionLookupRef.current.get(optionKey))\n .filter((option): option is SelectAsyncOption<TValue> => Boolean(option));\n const nextValue = isMultiSelect ? nextOptions : nextOptions[0] ?? null;\n\n if (!isControlled) {\n setInternalSelectedOptions(nextOptions);\n }\n\n onChange?.(nextValue);\n };\n\n const menuFooter = isLoadingMore || hasMore ? (\n <div\n aria-live=\"polite\"\n className=\"flex items-center gap-3 text-xs leading-[1.4] text-[var(--theme-textLight)]\"\n style={{ justifyContent: hasMore ? 'space-between' : 'center' }}\n >\n <span>{isLoadingMore ? loadingMoreMessage : hasMore ? loadMoreHintMessage : null}</span>\n {isLoadingMore ? (\n <span\n aria-hidden=\"true\"\n className=\"h-2 w-2 shrink-0 rounded-full bg-[var(--theme-primary)] opacity-80\"\n />\n ) : null}\n </div>\n ) : null;\n\n const resolvedEmptyMessage = loadError && remoteOptions.length === 0 ? loadError : emptyMessage;\n const resolvedValue = selectedOptions.map((option) => getSelectObjectOptionKey(option));\n\n return (\n <SelectBase\n {...props}\n isMulti={isMultiSelect}\n isFilterable={isFilterable ?? true}\n value={isMultiSelect ? resolvedValue : resolvedValue[0] ?? ''}\n onChange={handleBaseChange}\n groups={buildParsedGroupsFromObjectOptions<TValue>(mergedOptions)}\n nativeOptions={buildNativeOptionsFromObjectOptions<TValue>(mergedOptions)}\n emptyMessage={resolvedEmptyMessage}\n isLoading={isInitialLoading && mergedOptions.length === 0}\n loadingMessage={loadingMessage}\n searchPlaceholder={searchPlaceholder}\n searchQuery={searchQuery}\n onSearchQueryChange={setSearchQuery}\n allowOpenWithoutOptions={true}\n filterOptions={false}\n preserveUnknownValues={true}\n onListboxScroll={handleListboxScroll}\n menuFooter={menuFooter}\n />\n );\n}","import type { ReactNode } from 'react';\n\nimport type { ParsedGroup, ParsedOption } from './types';\nimport { getTextContent } from './utils';\n\nexport type SelectObjectOptionValue = string | number;\n\nexport interface SelectObjectOption<TValue extends SelectObjectOptionValue = SelectObjectOptionValue> {\n value: TValue;\n label: ReactNode;\n disabled?: boolean;\n group?: ReactNode;\n}\n\nconst getOptionKey = <TValue extends SelectObjectOptionValue>(option: SelectObjectOption<TValue>): string => {\n return String(option.value);\n};\n\nexport const dedupeSelectObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): Array<SelectObjectOption<TValue>> => {\n const seenKeys = new Set<string>();\n\n return options.filter((option) => {\n const optionKey = getOptionKey(option);\n\n if (seenKeys.has(optionKey)) {\n return false;\n }\n\n seenKeys.add(optionKey);\n return true;\n });\n};\n\nexport const buildParsedGroupsFromObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): ParsedGroup[] => {\n const standaloneOptions: ParsedOption[] = [];\n const groupedOptions = new Map<string, ParsedGroup>();\n\n options.forEach((option, index) => {\n const parsedOption: ParsedOption = {\n key: `async-option-${index}-${getOptionKey(option)}`,\n value: getOptionKey(option),\n label: option.label,\n disabled: Boolean(option.disabled),\n };\n\n if (option.group == null) {\n standaloneOptions.push(parsedOption);\n return;\n }\n\n const labelText = getTextContent(option.group).trim();\n const groupKey = labelText || `group-${index}`;\n const currentGroup = groupedOptions.get(groupKey);\n\n if (currentGroup) {\n currentGroup.options.push(parsedOption);\n return;\n }\n\n groupedOptions.set(groupKey, {\n key: `async-group-${groupKey}`,\n label: option.group,\n options: [parsedOption],\n });\n });\n\n const parsedGroups: ParsedGroup[] = [];\n\n if (standaloneOptions.length > 0) {\n parsedGroups.push({\n key: 'async-standalone',\n options: standaloneOptions,\n });\n }\n\n parsedGroups.push(...groupedOptions.values());\n\n return parsedGroups;\n};\n\nexport const buildNativeOptionsFromObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): ReactNode => {\n return options.map((option) => {\n const optionValue = getOptionKey(option);\n const optionText = getTextContent(option.label).trim() || optionValue;\n\n return (\n <option key={`native-${optionValue}`} value={optionValue} disabled={option.disabled}>\n {optionText}\n </option>\n );\n });\n};\n\nexport const getSelectObjectOptionKey = getOptionKey;","import { useEffect, useMemo, useState } from 'react';\n\nimport { TableBase } from '../componentsBase/table/TableBase';\nimport type { SharedTableProps } from '../componentsBase/table/types';\nimport {\n DEFAULT_PAGE_SIZE,\n clampPage,\n resolveColumnSearchValue,\n sanitizePageSizeOptions,\n} from '../componentsBase/table/utils';\n\nexport interface TableProps<TItem> extends SharedTableProps<TItem> {\n items: Array<TItem>;\n}\n\nexport function Table<TItem>({\n items,\n desktopColumns,\n mobileColumns,\n defaultSearchValue = '',\n defaultPage = 1,\n defaultPageSize = DEFAULT_PAGE_SIZE,\n pageSizeOptions,\n searchable = true,\n onSearchValueChange,\n onPageChange,\n onPageSizeChange,\n ...props\n}: TableProps<TItem>) {\n const initialPageSizeOptions = useMemo(() => {\n return sanitizePageSizeOptions(pageSizeOptions, defaultPageSize);\n }, [defaultPageSize, pageSizeOptions]);\n const [searchValue, setSearchValue] = useState(defaultSearchValue);\n const [page, setPage] = useState(Math.max(1, Math.floor(defaultPage)));\n const [pageSize, setPageSize] = useState(initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE);\n\n useEffect(() => {\n if (initialPageSizeOptions.includes(pageSize)) {\n return;\n }\n\n const nextPageSize = initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE;\n setPageSize(nextPageSize);\n }, [initialPageSizeOptions, pageSize]);\n\n const filteredItems = useMemo(() => {\n if (!searchable) {\n return items;\n }\n\n const query = searchValue.trim().toLowerCase();\n\n if (query.length === 0) {\n return items;\n }\n\n const searchableColumns = [...desktopColumns, ...mobileColumns];\n\n return items.filter((item, index) => {\n return searchableColumns.some((column) => {\n return resolveColumnSearchValue(column, item, index).toLowerCase().includes(query);\n });\n });\n }, [desktopColumns, items, mobileColumns, searchable, searchValue]);\n\n const totalItems = filteredItems.length;\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize));\n const normalizedPage = clampPage(page, totalPages);\n\n useEffect(() => {\n if (normalizedPage === page) {\n return;\n }\n\n setPage(normalizedPage);\n onPageChange?.(normalizedPage);\n }, [normalizedPage, onPageChange, page]);\n\n const pageItems = useMemo(() => {\n const startIndex = (normalizedPage - 1) * pageSize;\n return filteredItems.slice(startIndex, startIndex + pageSize);\n }, [filteredItems, normalizedPage, pageSize]);\n\n return (\n <TableBase\n {...props}\n desktopColumns={desktopColumns}\n mobileColumns={mobileColumns}\n searchable={searchable}\n pageSizeOptions={pageSizeOptions}\n items={pageItems}\n searchValue={searchValue}\n page={normalizedPage}\n pageSize={pageSize}\n totalPages={totalPages}\n totalItems={totalItems}\n onSearchChange={(nextValue) => {\n setSearchValue(nextValue);\n setPage(1);\n onSearchValueChange?.(nextValue);\n onPageChange?.(1);\n }}\n onInternalPageChange={(nextPage) => {\n const normalizedNextPage = clampPage(nextPage, totalPages);\n setPage(normalizedNextPage);\n onPageChange?.(normalizedNextPage);\n }}\n onInternalPageSizeChange={(nextPageSize) => {\n setPageSize(nextPageSize);\n setPage(1);\n onPageSizeChange?.(nextPageSize);\n onPageChange?.(1);\n }}\n />\n );\n}","import { useEffect, useId, useRef, useState, type CSSProperties, type ReactNode } from 'react';\n\nimport { Button } from '../../components/Button';\nimport { Modal } from '../../components/Modal';\nimport { Separator } from '../../components/Separator';\nimport {\n cx,\n DISABLED_COMPONENT_OPACITY,\n UI_KIT_ROOT_CLASSNAME,\n STANDARD_COMPONENT_BORDER_RADIUS,\n useUiKitTheme,\n} from '../../foundation';\nimport type { TableAction, TableBaseProps, TableColumn, TableColumnAlign } from './types';\nimport {\n buildTableDownloadFileBaseName,\n buildTableDownloadMatrix,\n downloadTableAsCsv,\n downloadTableAsPdf,\n downloadTableAsXls,\n} from './downloads';\nimport {\n DEFAULT_COLLAPSE_BELOW,\n DEFAULT_MAX_INLINE_ACTIONS,\n clampPage,\n getColumnKey,\n getRowId,\n hasRenderableContent,\n isActionDisabled,\n mergeTableLabels,\n resolveColumnContent,\n resolveTableActions,\n sanitizePageSizeOptions,\n} from './utils';\n\ntype OverflowMenuProps = {\n label: string;\n children: ReactNode;\n buttonStyle: CSSProperties;\n menuStyle: CSSProperties;\n};\n\nfunction SettingsIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M12 15.2a3.2 3.2 0 1 0 0-6.4 3.2 3.2 0 0 0 0 6.4Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <path\n d=\"M19.4 15a1 1 0 0 0 .2 1.1l.1.1a1.2 1.2 0 0 1 0 1.7l-1.2 1.2a1.2 1.2 0 0 1-1.7 0l-.1-.1a1 1 0 0 0-1.1-.2 1 1 0 0 0-.6.9V20a1.2 1.2 0 0 1-1.2 1.2h-1.6A1.2 1.2 0 0 1 11 20v-.2a1 1 0 0 0-.6-.9 1 1 0 0 0-1.1.2l-.1.1a1.2 1.2 0 0 1-1.7 0l-1.2-1.2a1.2 1.2 0 0 1 0-1.7l.1-.1a1 1 0 0 0 .2-1.1 1 1 0 0 0-.9-.6H4A1.2 1.2 0 0 1 2.8 13v-1.6A1.2 1.2 0 0 1 4 10.2h.2a1 1 0 0 0 .9-.6 1 1 0 0 0-.2-1.1l-.1-.1a1.2 1.2 0 0 1 0-1.7l1.2-1.2a1.2 1.2 0 0 1 1.7 0l.1.1a1 1 0 0 0 1.1.2 1 1 0 0 0 .6-.9V4A1.2 1.2 0 0 1 11 2.8h1.6A1.2 1.2 0 0 1 13.8 4v.2a1 1 0 0 0 .6.9 1 1 0 0 0 1.1-.2l.1-.1a1.2 1.2 0 0 1 1.7 0l1.2 1.2a1.2 1.2 0 0 1 0 1.7l-.1.1a1 1 0 0 0-.2 1.1 1 1 0 0 0 .9.6h.2A1.2 1.2 0 0 1 21.2 11v1.6a1.2 1.2 0 0 1-1.2 1.2h-.2a1 1 0 0 0-.4.2Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction MoreActionsIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <circle cx=\"5\" cy=\"12\" r=\"1.8\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.8\" />\n <circle cx=\"19\" cy=\"12\" r=\"1.8\" />\n </svg>\n );\n}\n\nfunction ChevronIcon({ direction }: { direction: 'left' | 'right' }) {\n const isLeft = direction === 'left';\n\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path\n d={isLeft ? 'M15 6 9 12l6 6' : 'm9 6 6 6-6 6'}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction DoubleChevronIcon({ direction }: { direction: 'left' | 'right' }) {\n const isLeft = direction === 'left';\n\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path\n d={isLeft ? 'M18 6 12 12l6 6' : 'm6 6 6 6-6 6'}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d={isLeft ? 'M12 6 6 12l6 6' : 'm12 6 6 6-6 6'}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction OverflowMenu({ label, children, buttonStyle, menuStyle }: OverflowMenuProps) {\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n if (containerRef.current?.contains(event.target as Node)) {\n return;\n }\n\n setIsOpen(false);\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n };\n }, [isOpen]);\n\n return (\n <div ref={containerRef} style={{ position: 'relative' }}>\n <button\n type=\"button\"\n aria-label={label}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n onClick={() => setIsOpen((currentValue) => !currentValue)}\n style={buttonStyle}\n >\n <MoreActionsIcon />\n </button>\n {isOpen ? (\n <div role=\"menu\" aria-label={label} style={menuStyle}>\n {children}\n </div>\n ) : null}\n </div>\n );\n}\n\nconst getAlignItems = (align: TableColumnAlign): CSSProperties['alignItems'] => {\n if (align === 'right') return 'flex-end';\n if (align === 'center') return 'center';\n return 'flex-start';\n};\n\nconst getTextAlign = (align: TableColumnAlign): CSSProperties['textAlign'] => align;\n\nexport function TableBase<TItem>({\n items,\n loading = false,\n error,\n onRetry,\n desktopColumns,\n mobileColumns,\n getRowId: getCustomRowId,\n actions,\n stickyActionsColumn = true,\n maxInlineActions = DEFAULT_MAX_INLINE_ACTIONS,\n collapseBelow = DEFAULT_COLLAPSE_BELOW,\n searchable = true,\n showSearch = true,\n showPagination = true,\n showRowsPerPage = true,\n showSettingsButton = true,\n pageSizeOptions,\n labels,\n translations,\n className,\n style,\n ariaLabel = 'Responsive data table',\n searchValue,\n page,\n pageSize,\n totalPages,\n totalItems,\n onSearchChange,\n onInternalPageChange,\n onInternalPageSizeChange,\n}: TableBaseProps<TItem>) {\n const theme = useUiKitTheme();\n const componentShadow = '0px 4px 5px var(--theme-shadow)';\n const softBorderColor = theme.colors.secondary;\n const strongBorderColor = theme.colors.textLight;\n const mutedTextColor = theme.colors.textLight;\n const alternateSurfaceColor = theme.colors.background;\n const scrollRegionId = useId().replace(/:/g, '');\n const containerRef = useRef<HTMLDivElement>(null);\n const [viewportWidth, setViewportWidth] = useState<number | null>(null);\n const [isSettingsModalOpen, setIsSettingsModalOpen] = useState(false);\n const resolvedLabels = mergeTableLabels({\n ...(labels ?? {}),\n ...(translations ?? {}),\n });\n const normalizedPage = clampPage(page, totalPages);\n const normalizedPageSizeOptions = sanitizePageSizeOptions(pageSizeOptions, pageSize);\n const isCollapsed = viewportWidth !== null ? viewportWidth < collapseBelow : false;\n const mobileGridColumnCount = viewportWidth !== null && viewportWidth < 520 ? 1 : 2;\n const canGoToPreviousPage = normalizedPage > 1;\n const canGoToNextPage = normalizedPage < Math.max(1, totalPages);\n const canGoToFirstPage = canGoToPreviousPage;\n const canGoToLastPage = canGoToNextPage;\n const shouldShowSearch = searchable && showSearch;\n const shouldShowPaginationControls = showPagination && totalPages > 1;\n const shouldShowRowsPerPageControl = showRowsPerPage && normalizedPageSizeOptions.length > 1;\n const shouldRenderFooter = shouldShowPaginationControls || shouldShowRowsPerPageControl;\n const hasRows = items.length > 0;\n const hasSearchValue = searchValue.trim().length > 0;\n const visibleInlineActions = Math.max(0, Math.floor(maxInlineActions));\n const scrollbarThumbColor = theme.colors.secondary;\n const scrollbarThumbHoverColor = theme.colors.textLight;\n const shouldShowToolbarStatus = loading || (!loading && Boolean(error) && hasRows);\n const shouldRenderToolbar = shouldShowSearch || shouldShowToolbarStatus || showSettingsButton;\n const shouldRenderToolbarPrimaryGroup = shouldShowSearch || showSettingsButton;\n const visibleDownloadColumns = desktopColumns.filter((column) => column.type !== 'actions');\n const totalItemCount = totalItems ?? items.length;\n const currentPageItemCount = items.length;\n const downloadMatrix = buildTableDownloadMatrix(visibleDownloadColumns, items);\n const downloadFileBaseName = buildTableDownloadFileBaseName(ariaLabel, normalizedPage);\n const stickyActionsColumnShadow = `-10px 0 16px -14px ${theme.colors.shadow}`;\n const shouldStickActionsColumn = Boolean(actions) && stickyActionsColumn;\n\n const getStickyActionsCellStyle = (\n backgroundColor: string,\n backgroundImage?: CSSProperties['backgroundImage'],\n isHeader = false,\n ): CSSProperties => ({\n position: 'sticky',\n right: 0,\n zIndex: isHeader ? 4 : 2,\n backgroundColor,\n backgroundImage,\n backgroundClip: 'padding-box',\n boxShadow: stickyActionsColumnShadow,\n borderLeft: `1px solid ${softBorderColor}`,\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n\n const updateViewportWidth = () => {\n setViewportWidth(window.innerWidth);\n };\n\n updateViewportWidth();\n\n window.addEventListener('resize', updateViewportWidth);\n\n return () => {\n window.removeEventListener('resize', updateViewportWidth);\n };\n }, []);\n\n const actionButtonBaseStyle = (tone: 'default' | 'danger', disabled: boolean, iconOnly: boolean): CSSProperties => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n minWidth: iconOnly ? 34 : undefined,\n width: iconOnly ? 34 : undefined,\n height: 34,\n padding: iconOnly ? 0 : '0 12px',\n borderRadius: 12,\n border: `1px solid ${tone === 'danger' ? theme.colors.negative : softBorderColor}`,\n backgroundColor: theme.colors.surface,\n color: tone === 'danger' ? theme.colors.negative : theme.colors.text,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? DISABLED_COMPONENT_OPACITY : 1,\n transition: 'background-color 160ms ease, border-color 160ms ease, color 160ms ease',\n boxSizing: 'border-box',\n boxShadow: componentShadow,\n });\n\n const overflowMenuStyle: CSSProperties = {\n position: 'absolute',\n top: 'calc(100% + 8px)',\n right: 0,\n zIndex: 20,\n minWidth: 180,\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n padding: 8,\n borderRadius: STANDARD_COMPONENT_BORDER_RADIUS,\n border: `1px solid ${softBorderColor}`,\n backgroundColor: theme.colors.surface,\n boxShadow: componentShadow,\n };\n\n const toolbarControlStyle: CSSProperties = {\n height: 42,\n borderRadius: 14,\n border: `1px solid ${softBorderColor}`,\n backgroundColor: theme.colors.surface,\n color: theme.colors.text,\n padding: '0 10px',\n outline: 'none',\n boxSizing: 'border-box',\n fontSize: 14,\n lineHeight: 1.4,\n transition: 'border-color 160ms ease, box-shadow 160ms ease',\n boxShadow: componentShadow,\n };\n\n const settingsButtonStyle: CSSProperties = {\n ...actionButtonBaseStyle('default', false, true),\n flexShrink: 0,\n };\n\n const infoCardStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n padding: '10px 12px',\n borderRadius: 14,\n border: `1px solid ${softBorderColor}`,\n backgroundColor: theme.colors.surface,\n boxShadow: componentShadow,\n };\n\n const handleDownloadCsv = () => {\n downloadTableAsCsv(downloadMatrix, downloadFileBaseName);\n };\n\n const handleDownloadXls = () => {\n downloadTableAsXls(downloadMatrix, downloadFileBaseName);\n };\n\n const handleDownloadPdf = () => {\n downloadTableAsPdf(\n downloadMatrix,\n downloadFileBaseName,\n String(ariaLabel),\n normalizedPage,\n totalPages,\n );\n };\n\n const renderActionButton = (\n action: TableAction<TItem>,\n item: TItem,\n rowIndex: number,\n appearance: 'inline' | 'menu',\n onAfterClick?: () => void,\n ) => {\n const disabled = isActionDisabled(action, item, rowIndex);\n const tone = action.tone ?? 'default';\n const iconOnly = appearance === 'inline' && action.icon != null;\n\n return (\n <button\n key={action.id ?? `${action.label}-${rowIndex}`}\n type=\"button\"\n role={appearance === 'menu' ? 'menuitem' : undefined}\n disabled={disabled}\n title={action.label}\n aria-label={action.label}\n onClick={() => {\n if (disabled) {\n return;\n }\n\n action.onClick(item, rowIndex);\n onAfterClick?.();\n }}\n style={{\n ...actionButtonBaseStyle(tone, disabled, iconOnly),\n width: appearance === 'menu' ? '100%' : undefined,\n justifyContent: appearance === 'menu' ? 'flex-start' : 'center',\n padding: appearance === 'menu' ? '0 12px' : iconOnly ? 0 : '0 12px',\n }}\n >\n {action.icon}\n {appearance === 'menu' || !iconOnly ? <span>{action.label}</span> : null}\n </button>\n );\n };\n\n const renderActions = (item: TItem, rowIndex: number) => {\n const resolvedActions = resolveTableActions(actions, item, rowIndex);\n\n if (resolvedActions.length === 0) {\n return null;\n }\n\n const inlineActions = resolvedActions.slice(0, visibleInlineActions);\n const overflowActions = resolvedActions.slice(visibleInlineActions);\n\n return (\n <div style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'flex-end', gap: 8 }}>\n {inlineActions.map((action) => renderActionButton(action, item, rowIndex, 'inline'))}\n {overflowActions.length > 0 ? (\n <OverflowMenu\n label={resolvedLabels.actionsMenuLabel}\n buttonStyle={actionButtonBaseStyle('default', false, true)}\n menuStyle={overflowMenuStyle}\n >\n {overflowActions.map((action) => renderActionButton(action, item, rowIndex, 'menu'))}\n </OverflowMenu>\n ) : null}\n </div>\n );\n };\n\n const renderDesktopCell = (\n column: TableColumn<TItem>,\n item: TItem,\n rowIndex: number,\n columnIndex: number,\n rowBackgroundColor: string,\n ) => {\n const content = resolveColumnContent(column, item, rowIndex);\n const align = column.align ?? (column.type === 'actions' ? 'right' : 'left');\n\n return (\n <td\n key={`${getColumnKey(column, columnIndex)}-${rowIndex}`}\n colSpan={column.colSpan}\n style={{\n padding: '6px 10px',\n borderBottom: `1px solid ${softBorderColor}`,\n verticalAlign: 'middle',\n color: theme.colors.text,\n fontSize: 14,\n lineHeight: 1.55,\n textAlign: getTextAlign(align),\n backgroundColor: rowBackgroundColor,\n width: column.width,\n minWidth: column.minWidth,\n }}\n >\n {hasRenderableContent(content) ? content : <span style={{ color: mutedTextColor }}>-</span>}\n </td>\n );\n };\n\n const renderEmptyState = () => {\n const message = error\n ? error\n : loading\n ? resolvedLabels.loadingMessage\n : hasSearchValue\n ? resolvedLabels.noResultsMessage\n : resolvedLabels.emptyMessage;\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 12,\n minHeight: 220,\n borderRadius: 20,\n border: `1px dashed ${strongBorderColor}`,\n backgroundColor: theme.colors.surface,\n boxShadow: componentShadow,\n color: theme.colors.text,\n textAlign: 'center',\n padding: 24,\n }}\n >\n <strong style={{ fontSize: 16 }}>{message}</strong>\n {error && onRetry ? (\n <Button size=\"sm\" variant=\"outline\" onClick={onRetry}>\n {resolvedLabels.retryLabel}\n </Button>\n ) : null}\n </div>\n );\n };\n\n return (\n <div\n ref={containerRef}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'flex w-full max-w-full min-w-0 flex-col gap-4 rounded-[24px]',\n 'box-border bg-[var(--theme-surface)] p-[18px] text-[var(--theme-text)]',\n className,\n )}\n style={style}\n >\n {shouldRenderToolbar ? (\n <div className=\"flex min-w-0 flex-wrap items-center justify-between gap-3\">\n {shouldRenderToolbarPrimaryGroup ? (\n <div\n className=\"flex min-w-0 items-center gap-2.5\"\n style={{\n flex: shouldShowSearch ? '1 1 260px' : '0 0 auto',\n marginLeft: shouldShowSearch ? undefined : 'auto',\n }}\n >\n {shouldShowSearch ? (\n <input\n type=\"search\"\n value={searchValue}\n aria-label={resolvedLabels.searchPlaceholder}\n placeholder={resolvedLabels.searchPlaceholder}\n onChange={(event) => onSearchChange(event.currentTarget.value)}\n className=\"h-[42px] min-w-0 flex-1 rounded-[14px] border bg-[var(--theme-surface)] px-[10px] text-sm leading-[1.4] text-[var(--theme-text)] outline-none\"\n style={{\n flex: '1 1 260px',\n maxWidth: 360,\n borderColor: softBorderColor,\n boxShadow: componentShadow,\n }}\n />\n ) : null}\n\n {showSettingsButton ? (\n <button\n type=\"button\"\n aria-label={resolvedLabels.settingsButtonLabel}\n title={resolvedLabels.settingsButtonLabel}\n onClick={() => setIsSettingsModalOpen(true)}\n style={settingsButtonStyle}\n >\n <SettingsIcon />\n </button>\n ) : null}\n </div>\n ) : null}\n\n {shouldShowToolbarStatus ? (\n <div\n className=\"flex min-w-0 flex-wrap items-center justify-end gap-2.5\"\n style={{ marginLeft: shouldRenderToolbarPrimaryGroup ? 'auto' : undefined }}\n >\n {loading ? (\n <span className=\"text-[13px] font-semibold text-[var(--theme-textLight)]\">{resolvedLabels.loadingMessage}</span>\n ) : null}\n {!loading && error && hasRows ? (\n <div className=\"inline-flex items-center gap-2.5\">\n <span className=\"text-[13px] font-semibold text-[var(--theme-negative)]\">\n {resolvedLabels.errorMessage}\n </span>\n {onRetry ? (\n <Button size=\"sm\" variant=\"ghost\" onClick={onRetry}>\n {resolvedLabels.retryLabel}\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n\n {!hasRows && (!loading || error) ? renderEmptyState() : null}\n\n {hasRows ? (\n isCollapsed ? (\n <div role=\"list\" aria-label={ariaLabel} className=\"flex flex-col gap-3.5\">\n {items.map((item, rowIndex) => {\n const rowActions = renderActions(item, rowIndex);\n const rowBackgroundColor = theme.colors.surface;\n\n return (\n <article\n key={getRowId(item, rowIndex, getCustomRowId)}\n role=\"listitem\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 14,\n padding: '16px 16px 6px 16px',\n borderRadius: 20,\n border: `1px solid ${softBorderColor}`,\n backgroundColor: rowBackgroundColor,\n boxShadow: componentShadow,\n }}\n >\n <div\n style={{\n display: 'grid',\n gap: 6,\n gridTemplateColumns: mobileGridColumnCount === 1 ? 'minmax(0, 1fr)' : 'repeat(2, minmax(0, 1fr))',\n }}\n >\n {mobileColumns.map((column, columnIndex) => {\n const content = resolveColumnContent(column, item, rowIndex);\n const align = column.align ?? (column.type === 'actions' ? 'right' : 'left');\n const span = Math.max(1, Math.min(column.colSpan ?? 1, mobileGridColumnCount));\n\n return (\n <div\n key={`${getColumnKey(column, columnIndex)}-${rowIndex}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n minWidth: 0,\n gridColumn: `span ${span}`,\n }}\n >\n {!column.hideLabel && column.label ? (\n <span\n style={{\n color: mutedTextColor,\n fontSize: 11,\n fontWeight: 700,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n textAlign: 'left',\n whiteSpace: 'nowrap',\n flexShrink: 0,\n }}\n >\n {column.label}\n </span>\n ) : null}\n <div\n style={{\n flex: '1 1 auto',\n width: '100%',\n minWidth: 0,\n overflowX: 'auto',\n overflowY: 'hidden',\n }}\n >\n <div\n style={{\n width: 'fit-content',\n minWidth: !column.hideLabel && column.label ? 'max-content' : '100%',\n marginLeft: align === 'right' ? 'auto' : align === 'center' ? 'auto' : 0,\n marginRight: align === 'center' ? 'auto' : 0,\n color: theme.colors.text,\n fontSize: 14,\n lineHeight: 1.55,\n textAlign: getTextAlign(align),\n }}\n >\n {hasRenderableContent(content) ? content : <span style={{ color: mutedTextColor }}>-</span>}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n {rowActions ? (\n <div\n style={{\n display: 'flex',\n justifyContent: 'flex-end',\n paddingTop: 4,\n borderTop: `1px solid ${softBorderColor}`,\n }}\n >\n {rowActions}\n </div>\n ) : null}\n </article>\n );\n })}\n </div>\n ) : (\n <>\n <style>\n {`\n #${scrollRegionId} {\n scrollbar-width: thin;\n scrollbar-color: ${scrollbarThumbColor} transparent;\n cursor: pointer;\n }\n\n #${scrollRegionId}::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-thumb {\n background: ${scrollbarThumbColor};\n border-radius: 999px;\n border: 2px solid transparent;\n background-clip: padding-box;\n cursor: pointer;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-thumb:hover {\n background: ${scrollbarThumbHoverColor};\n background-clip: padding-box;\n cursor: pointer;\n }\n `}\n </style>\n <div\n id={scrollRegionId}\n role=\"region\"\n aria-label={ariaLabel}\n className=\"w-full max-w-full min-w-0 overflow-x-auto overflow-y-hidden rounded-[20px] border bg-[var(--theme-surface)]\"\n style={{\n borderColor: softBorderColor,\n boxShadow: componentShadow,\n }}\n >\n <table className=\"min-w-full max-w-none border-separate border-spacing-0\" style={{ width: 'max-content' }}>\n <thead>\n <tr>\n {desktopColumns.map((column, columnIndex) => {\n const align = column.align ?? (column.type === 'actions' ? 'right' : 'left');\n\n return (\n <th\n key={getColumnKey(column, columnIndex)}\n colSpan={column.headerColSpan ?? column.colSpan}\n scope=\"col\"\n style={{\n padding: '6px 10px',\n borderBottom: `1px solid ${strongBorderColor}`,\n color: mutedTextColor,\n fontSize: 11,\n fontWeight: 700,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n textAlign: getTextAlign(align),\n whiteSpace: 'nowrap',\n width: column.width,\n minWidth: column.minWidth,\n }}\n >\n {!column.hideLabel ? column.label : null}\n </th>\n );\n })}\n {actions ? (\n <th\n scope=\"col\"\n style={{\n padding: '6px 10px',\n borderBottom: `1px solid ${strongBorderColor}`,\n color: mutedTextColor,\n fontSize: 11,\n fontWeight: 700,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n textAlign: 'right',\n whiteSpace: 'nowrap',\n width: 1,\n ...(shouldStickActionsColumn ? getStickyActionsCellStyle(theme.colors.surface, undefined, true) : {}),\n }}\n >\n {resolvedLabels.moreActionsLabel}\n </th>\n ) : null}\n </tr>\n </thead>\n <tbody>\n {items.map((item, rowIndex) => {\n const rowActions = renderActions(item, rowIndex);\n const rowBackgroundColor = rowIndex % 2 === 0 ? theme.colors.surface : alternateSurfaceColor;\n const stickyRowBackgroundImage = rowIndex % 2 === 0\n ? undefined\n : `linear-gradient(${alternateSurfaceColor}, ${alternateSurfaceColor})`;\n\n return (\n <tr\n key={getRowId(item, rowIndex, getCustomRowId)}\n style={{ backgroundColor: rowBackgroundColor }}\n >\n {desktopColumns.map((column, columnIndex) => {\n return renderDesktopCell(column, item, rowIndex, columnIndex, rowBackgroundColor);\n })}\n {actions ? (\n <td\n style={{\n padding: '6px 10px',\n borderBottom: `1px solid ${softBorderColor}`,\n textAlign: 'right',\n verticalAlign: 'middle',\n ...(shouldStickActionsColumn\n ? getStickyActionsCellStyle(theme.colors.surface, stickyRowBackgroundImage)\n : {}),\n }}\n >\n {rowActions}\n </td>\n ) : null}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </>\n )\n ) : null}\n\n {hasRows && shouldRenderFooter ? (\n <div\n className=\"flex flex-wrap items-center justify-between gap-3 pt-1\"\n >\n {shouldShowPaginationControls ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"mr-1 text-[13px] text-[var(--theme-textLight)]\">\n {resolvedLabels.pageLabel(normalizedPage, totalPages)}\n </span>\n <button\n type=\"button\"\n onClick={() => onInternalPageChange(1)}\n disabled={!canGoToFirstPage}\n aria-label={resolvedLabels.firstPageLabel}\n style={actionButtonBaseStyle('default', !canGoToFirstPage, true)}\n >\n <DoubleChevronIcon direction=\"left\" />\n </button>\n <button\n type=\"button\"\n onClick={() => onInternalPageChange(normalizedPage - 1)}\n disabled={!canGoToPreviousPage}\n aria-label={resolvedLabels.previousPageLabel}\n style={actionButtonBaseStyle('default', !canGoToPreviousPage, true)}\n >\n <ChevronIcon direction=\"left\" />\n </button>\n <button\n type=\"button\"\n onClick={() => onInternalPageChange(normalizedPage + 1)}\n disabled={!canGoToNextPage}\n aria-label={resolvedLabels.nextPageLabel}\n style={actionButtonBaseStyle('default', !canGoToNextPage, true)}\n >\n <ChevronIcon direction=\"right\" />\n </button>\n <button\n type=\"button\"\n onClick={() => onInternalPageChange(totalPages)}\n disabled={!canGoToLastPage}\n aria-label={resolvedLabels.lastPageLabel}\n style={actionButtonBaseStyle('default', !canGoToLastPage, true)}\n >\n <DoubleChevronIcon direction=\"right\" />\n </button>\n </div>\n ) : null}\n\n <div\n className=\"flex items-center gap-2.5 text-[13px] text-[var(--theme-textLight)]\"\n style={{ marginLeft: shouldShowRowsPerPageControl ? 'auto' : undefined }}\n >\n {shouldShowRowsPerPageControl ? (\n <>\n <span>{resolvedLabels.rowsPerPageLabel}</span>\n <select\n value={pageSize}\n onChange={(event) => onInternalPageSizeChange(Number(event.currentTarget.value))}\n className=\"h-[34px] rounded-[14px] border bg-[var(--theme-surface)] px-3 text-sm leading-[1.4] text-[var(--theme-text)] outline-none\"\n style={{\n borderColor: softBorderColor,\n boxShadow: componentShadow,\n }}\n >\n {normalizedPageSizeOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </>\n ) : null}\n </div>\n </div>\n ) : null}\n\n <Modal\n isOpen={isSettingsModalOpen}\n onClose={() => setIsSettingsModalOpen(false)}\n title={resolvedLabels.settingsModalTitle}\n maxWidth={560}\n bodyStyle={{ display: 'grid', gap: 0 }}\n >\n <section className=\"grid gap-3\">\n <strong className=\"text-sm text-[var(--theme-text)]\">\n {resolvedLabels.tableInfoSectionTitle}\n </strong>\n <div className=\"grid gap-2.5 [grid-template-columns:repeat(auto-fit,minmax(120px,1fr))]\">\n <div style={infoCardStyle}>\n <span className=\"text-[10px] font-bold uppercase tracking-[0.06em] text-[var(--theme-textLight)]\">\n {resolvedLabels.totalPagesInfoLabel}\n </span>\n <strong className=\"text-[18px] leading-[1.1] text-[var(--theme-text)]\">{totalPages}</strong>\n </div>\n <div style={infoCardStyle}>\n <span className=\"text-[10px] font-bold uppercase tracking-[0.06em] text-[var(--theme-textLight)]\">\n {resolvedLabels.totalItemsInfoLabel}\n </span>\n <strong className=\"text-[18px] leading-[1.1] text-[var(--theme-text)]\">{totalItemCount}</strong>\n </div>\n <div style={infoCardStyle}>\n <span className=\"text-[10px] font-bold uppercase tracking-[0.06em] text-[var(--theme-textLight)]\">\n {resolvedLabels.currentPageInfoLabel}\n </span>\n <strong className=\"text-[18px] leading-[1.1] text-[var(--theme-text)]\">{normalizedPage}</strong>\n </div>\n <div style={infoCardStyle}>\n <span className=\"text-[10px] font-bold uppercase tracking-[0.06em] text-[var(--theme-textLight)]\">\n {resolvedLabels.currentPageItemsInfoLabel}\n </span>\n <strong className=\"text-[18px] leading-[1.1] text-[var(--theme-text)]\">{currentPageItemCount}</strong>\n </div>\n </div>\n </section>\n\n <div className=\"py-[18px]\">\n <Separator orientation=\"horizontal\" color={softBorderColor} />\n </div>\n\n <section className=\"grid gap-3\">\n <strong className=\"text-sm text-[var(--theme-text)]\">\n {resolvedLabels.downloadSectionTitle}\n </strong>\n <div className=\"flex flex-wrap gap-2.5\">\n <Button size=\"sm\" variant=\"outline\" onClick={handleDownloadCsv} disabled={!hasRows}>\n {resolvedLabels.downloadCsvLabel}\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={handleDownloadXls} disabled={!hasRows}>\n {resolvedLabels.downloadXlsLabel}\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={handleDownloadPdf} disabled={!hasRows}>\n {resolvedLabels.downloadPdfLabel}\n </Button>\n </div>\n </section>\n </Modal>\n </div>\n );\n}","import { isValidElement, type ReactNode } from 'react';\n\nimport type {\n TableAction,\n TableActionSource,\n TableColumn,\n TableLabels,\n} from './types';\n\nexport const DEFAULT_COLLAPSE_BELOW = 768;\nexport const DEFAULT_MAX_INLINE_ACTIONS = 2;\nexport const DEFAULT_PAGE_SIZE = 10;\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50];\n\ntype ResolvedTableLabels = Required<Omit<TableLabels, 'pageLabel' | 'resultCountLabel'>> & {\n pageLabel: NonNullable<TableLabels['pageLabel']>;\n resultCountLabel: NonNullable<TableLabels['resultCountLabel']>;\n};\n\nconst DEFAULT_TABLE_LABELS: ResolvedTableLabels = {\n searchPlaceholder: 'Search rows',\n emptyMessage: 'No rows available.',\n noResultsMessage: 'No rows match the current search.',\n loadingMessage: 'Loading rows...',\n errorMessage: 'Could not load rows.',\n firstPageLabel: 'First page',\n previousPageLabel: 'Previous',\n nextPageLabel: 'Next',\n lastPageLabel: 'Last page',\n rowsPerPageLabel: 'Rows per page',\n actionsMenuLabel: 'More actions',\n moreActionsLabel: 'More actions',\n retryLabel: 'Retry',\n settingsButtonLabel: 'Table settings',\n settingsModalTitle: 'Table settings',\n tableInfoSectionTitle: 'Table details',\n totalPagesInfoLabel: 'Total pages',\n totalItemsInfoLabel: 'Total items',\n currentPageInfoLabel: 'Current page',\n currentPageItemsInfoLabel: 'Items in current page',\n downloadSectionTitle: 'Download current page',\n downloadCsvLabel: 'CSV',\n downloadXlsLabel: 'XLS',\n downloadPdfLabel: 'PDF',\n pageLabel: (page, totalPages) => `Page ${page} of ${totalPages}`,\n resultCountLabel: (start, end, totalItems) => `Showing ${start}-${end} of ${totalItems}`,\n};\n\nconst getNodeText = (node: ReactNode): string => {\n if (node == null || typeof node === 'boolean') {\n return '';\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n\n if (Array.isArray(node)) {\n return node.map((entry) => getNodeText(entry)).join(' ');\n }\n\n if (isValidElement(node)) {\n const element = node as React.ReactElement<{ children?: ReactNode }>;\n return getNodeText(element.props.children);\n }\n\n return '';\n};\n\nexport const normalizeTableText = (value: unknown): string => {\n if (value == null || typeof value === 'boolean') {\n return '';\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value);\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeTableText(entry)).join(' ');\n }\n\n if (isValidElement(value)) {\n return getNodeText(value);\n }\n\n return '';\n};\n\nconst resolveActionFlag = <TItem>(\n value: boolean | ((item: TItem, index: number) => boolean) | undefined,\n item: TItem,\n index: number,\n): boolean => {\n if (typeof value === 'function') {\n return value(item, index);\n }\n\n return Boolean(value);\n};\n\nexport const mergeTableLabels = (labels?: TableLabels): ResolvedTableLabels => ({\n searchPlaceholder: labels?.searchPlaceholder ?? DEFAULT_TABLE_LABELS.searchPlaceholder,\n emptyMessage: labels?.emptyMessage ?? DEFAULT_TABLE_LABELS.emptyMessage,\n noResultsMessage: labels?.noResultsMessage ?? DEFAULT_TABLE_LABELS.noResultsMessage,\n loadingMessage: labels?.loadingMessage ?? DEFAULT_TABLE_LABELS.loadingMessage,\n errorMessage: labels?.errorMessage ?? DEFAULT_TABLE_LABELS.errorMessage,\n firstPageLabel: labels?.firstPageLabel ?? DEFAULT_TABLE_LABELS.firstPageLabel,\n previousPageLabel: labels?.previousPageLabel ?? DEFAULT_TABLE_LABELS.previousPageLabel,\n nextPageLabel: labels?.nextPageLabel ?? DEFAULT_TABLE_LABELS.nextPageLabel,\n lastPageLabel: labels?.lastPageLabel ?? DEFAULT_TABLE_LABELS.lastPageLabel,\n rowsPerPageLabel: labels?.rowsPerPageLabel ?? DEFAULT_TABLE_LABELS.rowsPerPageLabel,\n actionsMenuLabel: labels?.actionsMenuLabel ?? DEFAULT_TABLE_LABELS.actionsMenuLabel,\n moreActionsLabel: labels?.moreActionsLabel ?? DEFAULT_TABLE_LABELS.moreActionsLabel,\n retryLabel: labels?.retryLabel ?? DEFAULT_TABLE_LABELS.retryLabel,\n settingsButtonLabel: labels?.settingsButtonLabel ?? DEFAULT_TABLE_LABELS.settingsButtonLabel,\n settingsModalTitle: labels?.settingsModalTitle ?? DEFAULT_TABLE_LABELS.settingsModalTitle,\n tableInfoSectionTitle: labels?.tableInfoSectionTitle ?? DEFAULT_TABLE_LABELS.tableInfoSectionTitle,\n totalPagesInfoLabel: labels?.totalPagesInfoLabel ?? DEFAULT_TABLE_LABELS.totalPagesInfoLabel,\n totalItemsInfoLabel: labels?.totalItemsInfoLabel ?? DEFAULT_TABLE_LABELS.totalItemsInfoLabel,\n currentPageInfoLabel: labels?.currentPageInfoLabel ?? DEFAULT_TABLE_LABELS.currentPageInfoLabel,\n currentPageItemsInfoLabel: labels?.currentPageItemsInfoLabel ?? DEFAULT_TABLE_LABELS.currentPageItemsInfoLabel,\n downloadSectionTitle: labels?.downloadSectionTitle ?? DEFAULT_TABLE_LABELS.downloadSectionTitle,\n downloadCsvLabel: labels?.downloadCsvLabel ?? DEFAULT_TABLE_LABELS.downloadCsvLabel,\n downloadXlsLabel: labels?.downloadXlsLabel ?? DEFAULT_TABLE_LABELS.downloadXlsLabel,\n downloadPdfLabel: labels?.downloadPdfLabel ?? DEFAULT_TABLE_LABELS.downloadPdfLabel,\n pageLabel: labels?.pageLabel ?? DEFAULT_TABLE_LABELS.pageLabel,\n resultCountLabel: labels?.resultCountLabel ?? DEFAULT_TABLE_LABELS.resultCountLabel,\n});\n\nexport const sanitizePageSizeOptions = (pageSizeOptions: number[] | undefined, pageSize: number): number[] => {\n const sourceOptions = (pageSizeOptions ?? DEFAULT_PAGE_SIZE_OPTIONS).filter((option) => {\n return Number.isFinite(option) && option > 0;\n });\n const nextOptions = sourceOptions.length > 0 ? sourceOptions : DEFAULT_PAGE_SIZE_OPTIONS;\n const normalizedPageSize = Number.isFinite(pageSize) && pageSize > 0 ? Math.floor(pageSize) : DEFAULT_PAGE_SIZE;\n\n return Array.from(new Set([...nextOptions, normalizedPageSize])).sort((left, right) => left - right);\n};\n\nexport const clampPage = (page: number, totalPages: number): number => {\n const normalizedTotal = Math.max(1, Math.floor(totalPages));\n const normalizedPage = Number.isFinite(page) ? Math.floor(page) : 1;\n\n return Math.min(Math.max(normalizedPage, 1), normalizedTotal);\n};\n\nexport const getColumnKey = <TItem>(column: TableColumn<TItem>, index: number): string => {\n if (column.id) {\n return column.id;\n }\n\n if (column.accessor) {\n return String(column.accessor);\n }\n\n return `column-${index}`;\n};\n\nexport const getRowId = <TItem>(\n item: TItem,\n index: number,\n getCustomRowId?: (item: TItem, index: number) => string,\n): string => {\n if (getCustomRowId) {\n return getCustomRowId(item, index);\n }\n\n const fallbackId = (item as { id?: unknown }).id;\n\n if (typeof fallbackId === 'string' || typeof fallbackId === 'number') {\n return String(fallbackId);\n }\n\n return `row-${index}`;\n};\n\nexport const resolveColumnContent = <TItem>(\n column: TableColumn<TItem>,\n item: TItem,\n index: number,\n): ReactNode => {\n if (column.Cell) {\n return column.Cell(item, index);\n }\n\n if (column.accessor) {\n return item[column.accessor] as ReactNode;\n }\n\n return null;\n};\n\nexport const resolveColumnSearchValue = <TItem>(\n column: TableColumn<TItem>,\n item: TItem,\n index: number,\n): string => {\n if (column.getSearchValue) {\n return column.getSearchValue(item, index);\n }\n\n if (column.accessor) {\n return normalizeTableText(item[column.accessor]);\n }\n\n return normalizeTableText(resolveColumnContent(column, item, index));\n};\n\nexport const resolveTableActions = <TItem>(\n actionsSource: TableActionSource<TItem> | undefined,\n item: TItem,\n index: number,\n): Array<TableAction<TItem>> => {\n if (!actionsSource) {\n return [];\n }\n\n const actions = typeof actionsSource === 'function' ? actionsSource(item, index) : actionsSource;\n\n return actions.filter((action) => !resolveActionFlag(action.hidden, item, index));\n};\n\nexport const isActionDisabled = <TItem>(action: TableAction<TItem>, item: TItem, index: number): boolean => {\n return resolveActionFlag(action.disabled, item, index);\n};\n\nexport const hasRenderableContent = (content: ReactNode): boolean => {\n if (content == null || typeof content === 'boolean') {\n return false;\n }\n\n if (typeof content === 'string') {\n return content.trim().length > 0;\n }\n\n if (typeof content === 'number') {\n return true;\n }\n\n if (Array.isArray(content)) {\n return content.some((entry) => hasRenderableContent(entry));\n }\n\n return true;\n};","import type { TableColumn } from './types';\nimport { normalizeTableText, resolveColumnContent } from './utils';\n\ntype TableDownloadMatrix = {\n headers: string[];\n rows: string[][];\n};\n\nconst escapeCsvValue = (value: string): string => {\n if (/[\",\\n;]/.test(value)) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n\n return value;\n};\n\nconst escapeHtml = (value: string): string => {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n};\n\nconst sanitizeFileName = (value: string): string => {\n return value\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '') || 'table';\n};\n\nconst normalizePdfText = (value: string): string => {\n return value\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\(/g, '\\\\(')\n .replace(/\\)/g, '\\\\)')\n .replace(/[^\\x20-\\x7E]/g, '?');\n};\n\nconst wrapPdfLine = (value: string, maxLength: number): string[] => {\n if (value.length <= maxLength) {\n return [value];\n }\n\n const words = value.split(' ');\n const lines: string[] = [];\n let currentLine = '';\n\n words.forEach((word) => {\n const nextLine = currentLine ? `${currentLine} ${word}` : word;\n\n if (nextLine.length <= maxLength) {\n currentLine = nextLine;\n return;\n }\n\n if (currentLine) {\n lines.push(currentLine);\n }\n\n currentLine = word;\n });\n\n if (currentLine) {\n lines.push(currentLine);\n }\n\n return lines;\n};\n\nconst downloadBlob = (blob: Blob, fileName: string) => {\n const objectUrl = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.href = objectUrl;\n link.download = fileName;\n link.rel = 'noopener';\n link.style.display = 'none';\n\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n window.setTimeout(() => {\n window.URL.revokeObjectURL(objectUrl);\n }, 0);\n};\n\nconst buildPdfDocument = (lines: string[]): string => {\n const pageWidth = 612;\n const pageHeight = 792;\n const marginX = 40;\n const marginTop = 752;\n const lineHeight = 14;\n const linesPerPage = 48;\n const pages: string[][] = [];\n\n for (let index = 0; index < lines.length; index += linesPerPage) {\n pages.push(lines.slice(index, index + linesPerPage));\n }\n\n const objects: string[] = [];\n const pageObjectNumbers: number[] = [];\n const contentObjectNumbers: number[] = [];\n const fontObjectNumber = 3;\n let nextObjectNumber = 4;\n\n pages.forEach(() => {\n pageObjectNumbers.push(nextObjectNumber);\n nextObjectNumber += 1;\n contentObjectNumbers.push(nextObjectNumber);\n nextObjectNumber += 1;\n });\n\n objects[1] = '<< /Type /Catalog /Pages 2 0 R >>';\n objects[2] = `<< /Type /Pages /Count ${pages.length} /Kids [${pageObjectNumbers.map((objectNumber) => `${objectNumber} 0 R`).join(' ')}] >>`;\n objects[fontObjectNumber] = '<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>';\n\n pages.forEach((pageLines, index) => {\n const content = `BT\\n/F1 10 Tf\\n${marginX} ${marginTop} Td\\n${lineHeight} TL\\n${pageLines.map((line, lineIndex) => {\n const normalizedLine = normalizePdfText(line);\n return `${lineIndex === 0 ? '' : 'T*\\n'}(${normalizedLine}) Tj`;\n }).join('\\n')}\\nET`;\n const contentObjectNumber = contentObjectNumbers[index];\n const pageObjectNumber = pageObjectNumbers[index];\n\n objects[contentObjectNumber] = `<< /Length ${content.length} >>\\nstream\\n${content}\\nendstream`;\n objects[pageObjectNumber] = `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${pageWidth} ${pageHeight}] /Resources << /Font << /F1 ${fontObjectNumber} 0 R >> >> /Contents ${contentObjectNumber} 0 R >>`;\n });\n\n let pdf = '%PDF-1.4\\n';\n const offsets: number[] = [0];\n\n for (let index = 1; index < objects.length; index += 1) {\n const objectBody = objects[index];\n\n if (!objectBody) {\n continue;\n }\n\n offsets[index] = pdf.length;\n pdf += `${index} 0 obj\\n${objectBody}\\nendobj\\n`;\n }\n\n const xrefStart = pdf.length;\n pdf += `xref\\n0 ${objects.length}\\n`;\n pdf += '0000000000 65535 f \\n';\n\n for (let index = 1; index < objects.length; index += 1) {\n pdf += `${String(offsets[index] ?? 0).padStart(10, '0')} 00000 n \\n`;\n }\n\n pdf += `trailer\\n<< /Size ${objects.length} /Root 1 0 R >>\\nstartxref\\n${xrefStart}\\n%%EOF`;\n\n return pdf;\n};\n\nexport const buildTableDownloadMatrix = <TItem>(\n columns: Array<TableColumn<TItem>>,\n items: Array<TItem>,\n): TableDownloadMatrix => {\n const exportableColumns = columns.filter((column) => {\n return column.type !== 'actions' && (column.accessor || column.Cell || column.label);\n });\n const headers = exportableColumns.map((column, index) => {\n const labelText = normalizeTableText(column.label).trim();\n\n if (labelText.length > 0) {\n return labelText;\n }\n\n if (column.accessor) {\n return String(column.accessor);\n }\n\n return `Column ${index + 1}`;\n });\n const rows = items.map((item, rowIndex) => {\n return exportableColumns.map((column) => {\n const searchValue = column.getSearchValue?.(item, rowIndex).trim();\n\n if (searchValue && searchValue.length > 0) {\n return searchValue;\n }\n\n const contentText = normalizeTableText(resolveColumnContent(column, item, rowIndex)).trim();\n\n if (contentText.length > 0) {\n return contentText;\n }\n\n if (column.accessor) {\n return normalizeTableText(item[column.accessor]).trim();\n }\n\n return '';\n });\n });\n\n return {\n headers,\n rows,\n };\n};\n\nexport const buildTableDownloadFileBaseName = (tableName: string, page: number): string => {\n return `${sanitizeFileName(tableName)}-page-${page}`;\n};\n\nexport const downloadTableAsCsv = (matrix: TableDownloadMatrix, fileBaseName: string) => {\n const lines = [\n matrix.headers.map((header) => escapeCsvValue(header)).join(','),\n ...matrix.rows.map((row) => row.map((value) => escapeCsvValue(value)).join(',')),\n ];\n const blob = new Blob([`\\uFEFF${lines.join('\\n')}`], { type: 'text/csv;charset=utf-8' });\n\n downloadBlob(blob, `${fileBaseName}.csv`);\n};\n\nexport const downloadTableAsXls = (matrix: TableDownloadMatrix, fileBaseName: string) => {\n const html = [\n '<html><head><meta charset=\"utf-8\" /></head><body><table border=\"1\">',\n '<thead><tr>',\n ...matrix.headers.map((header) => `<th>${escapeHtml(header)}</th>`),\n '</tr></thead><tbody>',\n ...matrix.rows.map((row) => {\n return `<tr>${row.map((value) => `<td>${escapeHtml(value)}</td>`).join('')}</tr>`;\n }),\n '</tbody></table></body></html>',\n ].join('');\n const blob = new Blob([html], { type: 'application/vnd.ms-excel;charset=utf-8' });\n\n downloadBlob(blob, `${fileBaseName}.xls`);\n};\n\nexport const downloadTableAsPdf = (\n matrix: TableDownloadMatrix,\n fileBaseName: string,\n title: string,\n page: number,\n totalPages: number,\n) => {\n const lines = [\n title,\n `Page ${page} of ${totalPages}`,\n `Rows in export: ${matrix.rows.length}`,\n '',\n ...wrapPdfLine(matrix.headers.join(' | '), 88),\n ...wrapPdfLine('-'.repeat(Math.min(88, Math.max(20, matrix.headers.join(' | ').length))), 88),\n ...matrix.rows.flatMap((row) => wrapPdfLine(row.join(' | '), 88)),\n ];\n const pdf = buildPdfDocument(lines);\n const blob = new Blob([pdf], { type: 'application/pdf' });\n\n downloadBlob(blob, `${fileBaseName}.pdf`);\n};","import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS } from '../foundation';\nimport { TableBase } from '../componentsBase/table/TableBase';\nimport type { SharedTableProps, TableAsyncLoadContext, TableAsyncLoadResult } from '../componentsBase/table/types';\nimport { DEFAULT_PAGE_SIZE, clampPage, sanitizePageSizeOptions } from '../componentsBase/table/utils';\n\nexport interface TableAsyncProps<TItem> extends SharedTableProps<TItem> {\n loadItems: (query: string, context: TableAsyncLoadContext) => Promise<TableAsyncLoadResult<TItem>>;\n cacheUniqs?: ReadonlyArray<unknown>;\n searchDebounceMs?: number;\n keepPreviousData?: boolean;\n}\n\nconst areUnknownArraysEqual = (left: ReadonlyArray<unknown>, right: ReadonlyArray<unknown>): boolean => {\n if (left.length !== right.length) {\n return false;\n }\n\n return left.every((entry, index) => Object.is(entry, right[index]));\n};\n\nexport function TableAsync<TItem>({\n loadItems,\n desktopColumns,\n mobileColumns,\n defaultSearchValue = '',\n defaultPage = 1,\n defaultPageSize = DEFAULT_PAGE_SIZE,\n pageSizeOptions,\n searchable = true,\n cacheUniqs = [],\n searchDebounceMs = DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS,\n keepPreviousData = true,\n onSearchValueChange,\n onPageChange,\n onPageSizeChange,\n ...props\n}: TableAsyncProps<TItem>) {\n const initialPageSizeOptions = useMemo(() => {\n return sanitizePageSizeOptions(pageSizeOptions, defaultPageSize);\n }, [defaultPageSize, pageSizeOptions]);\n const [searchValue, setSearchValue] = useState(defaultSearchValue);\n const [debouncedSearchValue, setDebouncedSearchValue] = useState(defaultSearchValue);\n const [page, setPage] = useState(Math.max(1, Math.floor(defaultPage)));\n const [pageSize, setPageSize] = useState(initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE);\n const [items, setItems] = useState<Array<TItem>>([]);\n const [totalPages, setTotalPages] = useState(1);\n const [totalItems, setTotalItems] = useState<number | undefined>(undefined);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [reloadKey, setReloadKey] = useState(0);\n const loadItemsRef = useRef(loadItems);\n const cacheUniqsRef = useRef(cacheUniqs);\n const activeControllerRef = useRef<AbortController | null>(null);\n const requestVersionRef = useRef(0);\n\n loadItemsRef.current = loadItems;\n\n useEffect(() => {\n if (initialPageSizeOptions.includes(pageSize)) {\n return;\n }\n\n const nextPageSize = initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE;\n setPageSize(nextPageSize);\n }, [initialPageSizeOptions, pageSize]);\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n setDebouncedSearchValue(searchValue);\n }, searchDebounceMs);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [searchDebounceMs, searchValue]);\n\n useEffect(() => {\n if (areUnknownArraysEqual(cacheUniqsRef.current, cacheUniqs)) {\n return;\n }\n\n cacheUniqsRef.current = cacheUniqs;\n setPage(1);\n setReloadKey((currentValue) => currentValue + 1);\n }, [cacheUniqs]);\n\n useEffect(() => {\n requestVersionRef.current += 1;\n const currentRequestVersion = requestVersionRef.current;\n const controller = new AbortController();\n\n activeControllerRef.current?.abort();\n activeControllerRef.current = controller;\n\n if (!keepPreviousData) {\n setItems([]);\n }\n\n setLoading(true);\n setError(null);\n\n void loadItemsRef.current(searchable ? debouncedSearchValue : '', {\n page,\n pageSize,\n signal: controller.signal,\n })\n .then((result) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setItems(result.items);\n setTotalPages(Math.max(1, result.totalPages));\n setTotalItems(result.totalItems);\n })\n .catch((loadError: unknown) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n if (loadError instanceof Error && loadError.name === 'AbortError') {\n return;\n }\n\n setError(loadError instanceof Error ? loadError.message : 'Could not load rows.');\n })\n .finally(() => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setLoading(false);\n });\n }, [debouncedSearchValue, keepPreviousData, page, pageSize, reloadKey, searchable, ...cacheUniqs]);\n\n useEffect(() => {\n return () => {\n activeControllerRef.current?.abort();\n };\n }, []);\n\n const normalizedPage = clampPage(page, totalPages);\n\n useEffect(() => {\n if (normalizedPage === page) {\n return;\n }\n\n setPage(normalizedPage);\n onPageChange?.(normalizedPage);\n }, [normalizedPage, onPageChange, page]);\n\n return (\n <TableBase\n {...props}\n desktopColumns={desktopColumns}\n mobileColumns={mobileColumns}\n searchable={searchable}\n pageSizeOptions={pageSizeOptions}\n items={items}\n loading={loading}\n error={error}\n onRetry={() => setReloadKey((currentValue) => currentValue + 1)}\n searchValue={searchValue}\n page={normalizedPage}\n pageSize={pageSize}\n totalPages={totalPages}\n totalItems={totalItems}\n onSearchChange={(nextValue) => {\n setSearchValue(nextValue);\n setPage(1);\n onSearchValueChange?.(nextValue);\n onPageChange?.(1);\n }}\n onInternalPageChange={(nextPage) => {\n const normalizedNextPage = clampPage(nextPage, totalPages);\n setPage(normalizedNextPage);\n onPageChange?.(normalizedNextPage);\n }}\n onInternalPageSizeChange={(nextPageSize) => {\n setPageSize(nextPageSize);\n setPage(1);\n onPageSizeChange?.(nextPageSize);\n onPageChange?.(1);\n }}\n />\n );\n}","import type { ReactNode, TextareaHTMLAttributes } from 'react';\n\nimport { cx, DISABLED_FIELD_OPACITY, useUiKitTheme, type ControlSize } from '../foundation';\nimport { ControlFrame } from './Input';\n\nexport interface TextareaProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'dangerouslySetInnerHTML'> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n size?: ControlSize;\n}\n\nconst TEXTAREA_SIZE_CLASSNAMES: Record<ControlSize, string> = {\n sm: 'px-3 py-[10px] text-[13px] leading-4',\n md: 'px-[14px] py-[11px] text-sm leading-[18px]',\n lg: 'px-4 py-3 text-[15px] leading-[18px]',\n};\n\nexport function Textarea({\n label,\n hint,\n error,\n size = 'sm',\n id,\n disabled,\n style,\n rows = 5,\n ...rest\n}: TextareaProps) {\n useUiKitTheme();\n\n const textarea = (\n <textarea\n {...rest}\n id={id}\n disabled={disabled}\n rows={rows}\n className={cx(\n 'w-full min-w-0 box-border resize-y rounded-2xl border border-solid bg-[var(--theme-surface)]',\n 'text-[var(--theme-text)] outline-none transition-[border-color,box-shadow,background-color]',\n 'duration-150 placeholder:opacity-100 disabled:cursor-not-allowed',\n 'placeholder:text-[var(--theme-textLight)]',\n error ? 'border-[var(--theme-negative)]' : 'border-[var(--theme-textLight)]',\n TEXTAREA_SIZE_CLASSNAMES[size],\n )}\n style={{\n boxShadow: error\n ? '0 0 0 3px var(--theme-negative), 0px 4px 5px var(--theme-shadow)'\n : '0px 4px 5px var(--theme-shadow)',\n ...style,\n ...(disabled ? { opacity: DISABLED_FIELD_OPACITY } : {}),\n }}\n />\n );\n\n return (\n <ControlFrame label={label} hint={hint} error={error} htmlFor={id} required={rest.required}>\n {textarea}\n </ControlFrame>\n );\n}"],"mappings":"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","names":["lato_latin_ext_400_normal_default","lato_latin_400_normal_default","lato_latin_ext_700_normal_default","lato_latin_700_normal_default","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime","_a","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","FIELD_HEIGHT_CLASSNAMES","FIELD_TEXT_CLASSNAMES","FIELD_PADDING_X_CLASSNAMES","_a","import_jsx_runtime","import_react","import_react","import_jsx_runtime","FIELD_HEIGHT_CLASSNAMES","FIELD_TEXT_CLASSNAMES","_a","_b","_c","_d","_e","_f","_g","_h","_i","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","_a","import_react","import_react","import_react","import_jsx_runtime","import_jsx_runtime","_a","import_react","import_jsx_runtime","areUnknownArraysEqual","_a","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","#style-inject:#style-inject","../src/styles/ui-kit.css","../src/styles/fonts.ts","../src/foundation/async.ts","../src/foundation/className.ts","../src/foundation/componentState.ts","../src/foundation/controlSize.ts","../src/foundation/theme.ts","../src/components/Button.tsx","../src/components/Card.tsx","../src/components/CardSmall.tsx","../src/components/Checkbox.tsx","../src/components/ComposableModal.tsx","../src/components/Modal.tsx","../src/components/Input.tsx","../src/components/DatePicker.tsx","../src/components/Separator.tsx","../src/componentsBase/select/SelectBase.tsx","../src/componentsBase/select/utils.ts","../src/componentsBase/select/childrenAdapter.ts","../src/components/Select.tsx","../src/components/SelectAsync.tsx","../src/componentsBase/select/objectOptionsAdapter.tsx","../src/components/Table.tsx","../src/componentsBase/table/TableBase.tsx","../src/componentsBase/table/utils.ts","../src/componentsBase/table/downloads.ts","../src/components/TableAsync.tsx","../src/components/Textarea.tsx"],"sourcesContent":["import './styles/ui-kit.css';\n\nimport { injectUiKitFonts } from './styles/fonts';\n\ninjectUiKitFonts();\n\nexport { Button, type ButtonProps } from './components/Button';\nexport { Card, type CardProps } from './components/Card';\nexport { CardSmall, type CardSmallProps } from './components/CardSmall';\nexport { Checkbox, type CheckboxProps } from './components/Checkbox';\nexport {\n ComposableModal,\n createModalSlotIds,\n type ComposableModalProps,\n type ComposableModalSlotRenderProps,\n type ComposableModalSlotRenderer,\n type ModalSlotContext,\n type ModalSlotIds,\n} from './components/ComposableModal';\nexport {\n DatePicker,\n type DatePickerChangeContext,\n type DatePickerChangeReason,\n type DatePickerMode,\n type DatePickerProps,\n type DatePickerValue,\n} from './components/DatePicker';\nexport { Input, type InputProps } from './components/Input';\nexport {\n type ModalAction,\n Modal,\n type ModalProps,\n type ModalTheme,\n type ModalThemeSource,\n type StandardModalProps,\n} from './components/Modal';\nexport { Separator, type SeparatorOrientation, type SeparatorProps } from './components/Separator';\nexport { Select, type SelectProps } from './components/Select';\nexport {\n SelectAsync,\n type SelectAsyncLoadContext,\n type SelectAsyncLoadResult,\n type SelectAsyncOption,\n type SelectAsyncOptionValue,\n type SelectAsyncProps,\n} from './components/SelectAsync';\nexport {\n Table,\n type TableProps,\n} from './components/Table';\nexport {\n TableAsync,\n type TableAsyncProps,\n} from './components/TableAsync';\nexport type {\n SharedTableProps,\n TableAction,\n TableActionSource,\n TableActionTone,\n TableAsyncLoadContext,\n TableAsyncLoadResult,\n TableColumn,\n TableColumnAlign,\n TableColumnType,\n TableLabels,\n} from './componentsBase/table/types';\nexport type { ControlSize } from './foundation';\nexport { Textarea, type TextareaProps } from './components/Textarea';\nexport { useUiKitTheme, type UiKitTheme } from './foundation';","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\":root {\\n --ui-kit-font-family:\\n \\\"Lato\\\",\\n system-ui,\\n sans-serif;\\n}\\n.ui-kit-root {\\n border-width: 0;\\n border-style: solid;\\n box-shadow: none;\\n font-family: var(--ui-kit-font-family);\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n.ui-kit-root:where(button, input, textarea, select),\\n.ui-kit-root :where(button, input, textarea, select, option) {\\n border-width: 0;\\n border-style: solid;\\n box-shadow: none;\\n font-family: var(--ui-kit-font-family);\\n}\\n.ui-kit-sr-only {\\n position: absolute;\\n height: 1px;\\n width: 1px;\\n overflow: hidden;\\n white-space: nowrap;\\n border-width: 0px;\\n padding: 0px;\\n clip: rect(0, 0, 0, 0);\\n margin: -1px;\\n}\\n.ui-kit-floating-placeholder {\\n color: var(--theme-textLight);\\n font-size: var(--floating-label-font-size);\\n font-weight: 400;\\n line-height: var(--floating-label-line-height);\\n top: var(--floating-label-resting-top);\\n transform: var(--floating-label-resting-transform);\\n}\\n.group:has(input:not(:-moz-placeholder)) > .ui-kit-floating-placeholder,\\n.group:has(textarea:not(:-moz-placeholder)) > .ui-kit-floating-placeholder {\\n color: var(--theme-text);\\n font-size: var(--floating-label-active-font-size);\\n font-weight: 500;\\n left: 12px !important;\\n line-height: var(--floating-label-active-line-height);\\n top: 0;\\n transform: translateY(-50%) scale(0.85);\\n}\\n.group:focus-within > .ui-kit-floating-placeholder,\\n.group:has(input:not(:placeholder-shown)) > .ui-kit-floating-placeholder,\\n.group:has(textarea:not(:placeholder-shown)) > .ui-kit-floating-placeholder,\\n.group:has([data-has-value=true]) > .ui-kit-floating-placeholder,\\n.ui-kit-floating-placeholder--active {\\n color: var(--theme-text);\\n font-size: var(--floating-label-active-font-size);\\n font-weight: 500;\\n left: 12px !important;\\n line-height: var(--floating-label-active-line-height);\\n top: 0;\\n transform: translateY(-50%) scale(0.85);\\n}\\n.pointer-events-none {\\n pointer-events: none;\\n}\\n.pointer-events-auto {\\n pointer-events: auto;\\n}\\n.visible {\\n visibility: visible;\\n}\\n.fixed {\\n position: fixed;\\n}\\n.absolute {\\n position: absolute;\\n}\\n.relative {\\n position: relative;\\n}\\n.sticky {\\n position: sticky;\\n}\\n.inset-0 {\\n inset: 0px;\\n}\\n.inset-y-0 {\\n top: 0px;\\n bottom: 0px;\\n}\\n.left-0 {\\n left: 0px;\\n}\\n.left-\\\\[var\\\\(--label-left-base\\\\,12px\\\\)\\\\] {\\n left: var(--label-left-base,12px);\\n}\\n.top-1\\\\/2 {\\n top: 50%;\\n}\\n.z-50 {\\n z-index: 50;\\n}\\n.z-\\\\[70\\\\] {\\n z-index: 70;\\n}\\n.z-\\\\[99999\\\\] {\\n z-index: 99999;\\n}\\n.col-span-1 {\\n grid-column: span 1 / span 1;\\n}\\n.col-span-2 {\\n grid-column: span 2 / span 2;\\n}\\n.m-0 {\\n margin: 0px;\\n}\\n.mb-\\\\[18px\\\\] {\\n margin-bottom: 18px;\\n}\\n.ml-1 {\\n margin-left: 0.25rem;\\n}\\n.ml-4 {\\n margin-left: 1rem;\\n}\\n.ml-auto {\\n margin-left: auto;\\n}\\n.mt-0 {\\n margin-top: 0px;\\n}\\n.mt-1 {\\n margin-top: 0.25rem;\\n}\\n.mt-px {\\n margin-top: 1px;\\n}\\n.box-border {\\n box-sizing: border-box;\\n}\\n.block {\\n display: block;\\n}\\n.inline {\\n display: inline;\\n}\\n.flex {\\n display: flex;\\n}\\n.inline-flex {\\n display: inline-flex;\\n}\\n.table {\\n display: table;\\n}\\n.grid {\\n display: grid;\\n}\\n.hidden {\\n display: none;\\n}\\n.h-14 {\\n height: 3.5rem;\\n}\\n.h-2 {\\n height: 0.5rem;\\n}\\n.h-5 {\\n height: 1.25rem;\\n}\\n.h-\\\\[30px\\\\] {\\n height: 30px;\\n}\\n.h-\\\\[34px\\\\] {\\n height: 34px;\\n}\\n.h-\\\\[52px\\\\] {\\n height: 52px;\\n}\\n.h-full {\\n height: 100%;\\n}\\n.max-h-\\\\[280px\\\\] {\\n max-height: 280px;\\n}\\n.min-h-0 {\\n min-height: 0px;\\n}\\n.min-h-20 {\\n min-height: 5rem;\\n}\\n.min-h-\\\\[220px\\\\] {\\n min-height: 220px;\\n}\\n.w-14 {\\n width: 3.5rem;\\n}\\n.w-2 {\\n width: 0.5rem;\\n}\\n.w-5 {\\n width: 1.25rem;\\n}\\n.w-\\\\[25px\\\\] {\\n width: 25px;\\n}\\n.w-\\\\[30px\\\\] {\\n width: 30px;\\n}\\n.w-\\\\[52px\\\\] {\\n width: 52px;\\n}\\n.w-\\\\[84px\\\\] {\\n width: 84px;\\n}\\n.w-auto {\\n width: auto;\\n}\\n.w-fit {\\n width: -moz-fit-content;\\n width: fit-content;\\n}\\n.w-full {\\n width: 100%;\\n}\\n.w-max {\\n width: -moz-max-content;\\n width: max-content;\\n}\\n.min-w-0 {\\n min-width: 0px;\\n}\\n.min-w-full {\\n min-width: 100%;\\n}\\n.min-w-max {\\n min-width: -moz-max-content;\\n min-width: max-content;\\n}\\n.max-w-\\\\[360px\\\\] {\\n max-width: 360px;\\n}\\n.max-w-\\\\[calc\\\\(100\\\\%-24px\\\\)\\\\] {\\n max-width: calc(100% - 24px);\\n}\\n.max-w-fit {\\n max-width: -moz-fit-content;\\n max-width: fit-content;\\n}\\n.max-w-full {\\n max-width: 100%;\\n}\\n.max-w-none {\\n max-width: none;\\n}\\n.flex-1 {\\n flex: 1 1 0%;\\n}\\n.flex-\\\\[0_1_45\\\\%\\\\] {\\n flex: 0 1 45%;\\n}\\n.flex-\\\\[1_1_260px\\\\] {\\n flex: 1 1 260px;\\n}\\n.flex-none {\\n flex: none;\\n}\\n.shrink-0 {\\n flex-shrink: 0;\\n}\\n.border-separate {\\n border-collapse: separate;\\n}\\n.border-spacing-0 {\\n --tw-border-spacing-x: 0px;\\n --tw-border-spacing-y: 0px;\\n border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);\\n}\\n.origin-\\\\[left_center\\\\] {\\n transform-origin: left center;\\n}\\n.transform {\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.cursor-not-allowed {\\n cursor: not-allowed;\\n}\\n.cursor-pointer {\\n cursor: pointer;\\n}\\n.cursor-text {\\n cursor: text;\\n}\\n.select-none {\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.resize-y {\\n resize: vertical;\\n}\\n.resize {\\n resize: both;\\n}\\n.appearance-none {\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n}\\n.grid-cols-4 {\\n grid-template-columns: repeat(4, minmax(0, 1fr));\\n}\\n.grid-cols-\\\\[minmax\\\\(0\\\\,1fr\\\\)\\\\] {\\n grid-template-columns: minmax(0, 1fr);\\n}\\n.grid-cols-\\\\[repeat\\\\(2\\\\,minmax\\\\(0\\\\,1fr\\\\)\\\\)\\\\] {\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n}\\n.flex-col {\\n flex-direction: column;\\n}\\n.flex-wrap {\\n flex-wrap: wrap;\\n}\\n.flex-nowrap {\\n flex-wrap: nowrap;\\n}\\n.items-start {\\n align-items: flex-start;\\n}\\n.items-center {\\n align-items: center;\\n}\\n.justify-start {\\n justify-content: flex-start;\\n}\\n.justify-end {\\n justify-content: flex-end;\\n}\\n.justify-center {\\n justify-content: center;\\n}\\n.justify-between {\\n justify-content: space-between;\\n}\\n.gap-0 {\\n gap: 0px;\\n}\\n.gap-1 {\\n gap: 0.25rem;\\n}\\n.gap-1\\\\.5 {\\n gap: 0.375rem;\\n}\\n.gap-2 {\\n gap: 0.5rem;\\n}\\n.gap-2\\\\.5 {\\n gap: 0.625rem;\\n}\\n.gap-3 {\\n gap: 0.75rem;\\n}\\n.gap-3\\\\.5 {\\n gap: 0.875rem;\\n}\\n.gap-4 {\\n gap: 1rem;\\n}\\n.self-stretch {\\n align-self: stretch;\\n}\\n.overflow-auto {\\n overflow: auto;\\n}\\n.overflow-hidden {\\n overflow: hidden;\\n}\\n.overflow-x-auto {\\n overflow-x: auto;\\n}\\n.overflow-y-auto {\\n overflow-y: auto;\\n}\\n.overflow-x-hidden {\\n overflow-x: hidden;\\n}\\n.overflow-y-hidden {\\n overflow-y: hidden;\\n}\\n.truncate {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.text-ellipsis {\\n text-overflow: ellipsis;\\n}\\n.whitespace-nowrap {\\n white-space: nowrap;\\n}\\n.break-words {\\n overflow-wrap: break-word;\\n}\\n.rounded-2xl {\\n border-radius: 1rem;\\n}\\n.rounded-\\\\[0\\\\.4rem\\\\] {\\n border-radius: 0.4rem;\\n}\\n.rounded-\\\\[20px\\\\] {\\n border-radius: 20px;\\n}\\n.rounded-\\\\[24px\\\\] {\\n border-radius: 24px;\\n}\\n.rounded-\\\\[28px\\\\] {\\n border-radius: 28px;\\n}\\n.rounded-\\\\[30px\\\\] {\\n border-radius: 30px;\\n}\\n.rounded-\\\\[var\\\\(--ui-radius\\\\,12px\\\\)\\\\] {\\n border-radius: var(--ui-radius,12px);\\n}\\n.rounded-full {\\n border-radius: 9999px;\\n}\\n.rounded-none {\\n border-radius: 0px;\\n}\\n.rounded-xl {\\n border-radius: 0.75rem;\\n}\\n.rounded-tl-\\\\[16px\\\\] {\\n border-top-left-radius: 16px;\\n}\\n.rounded-tr-\\\\[16px\\\\] {\\n border-top-right-radius: 16px;\\n}\\n.border {\\n border-width: 1px;\\n}\\n.border-0 {\\n border-width: 0px;\\n}\\n.border-2 {\\n border-width: 2px;\\n}\\n.border-\\\\[3px\\\\] {\\n border-width: 3px;\\n}\\n.border-b {\\n border-bottom-width: 1px;\\n}\\n.border-t {\\n border-top-width: 1px;\\n}\\n.border-solid {\\n border-style: solid;\\n}\\n.border-dashed {\\n border-style: dashed;\\n}\\n.border-\\\\[var\\\\(--theme-background\\\\)\\\\] {\\n border-color: var(--theme-background);\\n}\\n.border-\\\\[var\\\\(--theme-negative\\\\)\\\\] {\\n border-color: var(--theme-negative);\\n}\\n.border-\\\\[var\\\\(--theme-primary\\\\)\\\\] {\\n border-color: var(--theme-primary);\\n}\\n.border-\\\\[var\\\\(--theme-secondary\\\\)\\\\] {\\n border-color: var(--theme-secondary);\\n}\\n.border-\\\\[var\\\\(--theme-textLight\\\\)\\\\] {\\n border-color: var(--theme-textLight);\\n}\\n.border-transparent {\\n border-color: transparent;\\n}\\n.bg-\\\\[color-mix\\\\(in_srgb\\\\,var\\\\(--ui-kit-accent\\\\)_24\\\\%\\\\,transparent\\\\)\\\\] {\\n background-color: color-mix(in srgb, var(--ui-kit-accent) 24%, transparent);\\n}\\n.bg-\\\\[var\\\\(--theme-background\\\\)\\\\] {\\n background-color: var(--theme-background);\\n}\\n.bg-\\\\[var\\\\(--theme-primary\\\\)\\\\] {\\n background-color: var(--theme-primary);\\n}\\n.bg-\\\\[var\\\\(--theme-surface\\\\)\\\\] {\\n background-color: var(--theme-surface);\\n}\\n.bg-\\\\[var\\\\(--ui-kit-accent\\\\)\\\\] {\\n background-color: var(--ui-kit-accent);\\n}\\n.bg-transparent {\\n background-color: transparent;\\n}\\n.p-0 {\\n padding: 0px;\\n}\\n.p-0\\\\.5 {\\n padding: 0.125rem;\\n}\\n.p-2 {\\n padding: 0.5rem;\\n}\\n.p-2\\\\.5 {\\n padding: 0.625rem;\\n}\\n.p-4 {\\n padding: 1rem;\\n}\\n.p-6 {\\n padding: 1.5rem;\\n}\\n.px-1 {\\n padding-left: 0.25rem;\\n padding-right: 0.25rem;\\n}\\n.px-1\\\\.5 {\\n padding-left: 0.375rem;\\n padding-right: 0.375rem;\\n}\\n.px-2 {\\n padding-left: 0.5rem;\\n padding-right: 0.5rem;\\n}\\n.px-2\\\\.5 {\\n padding-left: 0.625rem;\\n padding-right: 0.625rem;\\n}\\n.px-3 {\\n padding-left: 0.75rem;\\n padding-right: 0.75rem;\\n}\\n.px-3\\\\.5 {\\n padding-left: 0.875rem;\\n padding-right: 0.875rem;\\n}\\n.px-5 {\\n padding-left: 1.25rem;\\n padding-right: 1.25rem;\\n}\\n.px-\\\\[1\\\\.15rem\\\\] {\\n padding-left: 1.15rem;\\n padding-right: 1.15rem;\\n}\\n.px-\\\\[11px\\\\] {\\n padding-left: 11px;\\n padding-right: 11px;\\n}\\n.px-\\\\[13px\\\\] {\\n padding-left: 13px;\\n padding-right: 13px;\\n}\\n.py-0\\\\.5 {\\n padding-top: 0.125rem;\\n padding-bottom: 0.125rem;\\n}\\n.py-1 {\\n padding-top: 0.25rem;\\n padding-bottom: 0.25rem;\\n}\\n.py-2 {\\n padding-top: 0.5rem;\\n padding-bottom: 0.5rem;\\n}\\n.py-2\\\\.5 {\\n padding-top: 0.625rem;\\n padding-bottom: 0.625rem;\\n}\\n.py-\\\\[0\\\\.9rem\\\\] {\\n padding-top: 0.9rem;\\n padding-bottom: 0.9rem;\\n}\\n.py-\\\\[10px\\\\] {\\n padding-top: 10px;\\n padding-bottom: 10px;\\n}\\n.py-\\\\[14px\\\\] {\\n padding-top: 14px;\\n padding-bottom: 14px;\\n}\\n.py-\\\\[18px\\\\] {\\n padding-top: 18px;\\n padding-bottom: 18px;\\n}\\n.py-\\\\[9px\\\\] {\\n padding-top: 9px;\\n padding-bottom: 9px;\\n}\\n.pb-0\\\\.5 {\\n padding-bottom: 0.125rem;\\n}\\n.pb-1 {\\n padding-bottom: 0.25rem;\\n}\\n.pb-1\\\\.5 {\\n padding-bottom: 0.375rem;\\n}\\n.pb-3 {\\n padding-bottom: 0.75rem;\\n}\\n.pb-4 {\\n padding-bottom: 1rem;\\n}\\n.pb-\\\\[10px\\\\] {\\n padding-bottom: 10px;\\n}\\n.pl-5 {\\n padding-left: 1.25rem;\\n}\\n.pl-6 {\\n padding-left: 1.5rem;\\n}\\n.pr-6 {\\n padding-right: 1.5rem;\\n}\\n.pt-1 {\\n padding-top: 0.25rem;\\n}\\n.pt-1\\\\.5 {\\n padding-top: 0.375rem;\\n}\\n.pt-2\\\\.5 {\\n padding-top: 0.625rem;\\n}\\n.pt-3 {\\n padding-top: 0.75rem;\\n}\\n.pt-\\\\[18px\\\\] {\\n padding-top: 18px;\\n}\\n.text-left {\\n text-align: left;\\n}\\n.text-center {\\n text-align: center;\\n}\\n.text-right {\\n text-align: right;\\n}\\n.align-middle {\\n vertical-align: middle;\\n}\\n.font-sans {\\n font-family:\\n ui-sans-serif,\\n system-ui,\\n sans-serif,\\n \\\"Apple Color Emoji\\\",\\n \\\"Segoe UI Emoji\\\",\\n \\\"Segoe UI Symbol\\\",\\n \\\"Noto Color Emoji\\\";\\n}\\n.text-2xl {\\n font-size: 1.5rem;\\n line-height: 2rem;\\n}\\n.text-\\\\[1\\\\.05rem\\\\] {\\n font-size: 1.05rem;\\n}\\n.text-\\\\[11px\\\\] {\\n font-size: 11px;\\n}\\n.text-\\\\[12px\\\\] {\\n font-size: 12px;\\n}\\n.text-\\\\[13px\\\\] {\\n font-size: 13px;\\n}\\n.text-\\\\[15px\\\\] {\\n font-size: 15px;\\n}\\n.text-\\\\[18px\\\\] {\\n font-size: 18px;\\n}\\n.text-\\\\[20px\\\\] {\\n font-size: 20px;\\n}\\n.text-\\\\[24px\\\\] {\\n font-size: 24px;\\n}\\n.text-base {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n}\\n.text-sm {\\n font-size: 0.875rem;\\n line-height: 1.25rem;\\n}\\n.text-xs {\\n font-size: 0.75rem;\\n line-height: 1rem;\\n}\\n.font-bold {\\n font-weight: 700;\\n}\\n.font-extrabold {\\n font-weight: 800;\\n}\\n.font-medium {\\n font-weight: 500;\\n}\\n.font-normal {\\n font-weight: 400;\\n}\\n.font-semibold {\\n font-weight: 600;\\n}\\n.uppercase {\\n text-transform: uppercase;\\n}\\n.leading-4 {\\n line-height: 1rem;\\n}\\n.leading-5 {\\n line-height: 1.25rem;\\n}\\n.leading-\\\\[1\\\\.15\\\\] {\\n line-height: 1.15;\\n}\\n.leading-\\\\[1\\\\.1\\\\] {\\n line-height: 1.1;\\n}\\n.leading-\\\\[1\\\\.25\\\\] {\\n line-height: 1.25;\\n}\\n.leading-\\\\[1\\\\.2\\\\] {\\n line-height: 1.2;\\n}\\n.leading-\\\\[1\\\\.35\\\\] {\\n line-height: 1.35;\\n}\\n.leading-\\\\[1\\\\.3\\\\] {\\n line-height: 1.3;\\n}\\n.leading-\\\\[1\\\\.45\\\\] {\\n line-height: 1.45;\\n}\\n.leading-\\\\[1\\\\.4\\\\] {\\n line-height: 1.4;\\n}\\n.leading-\\\\[18px\\\\] {\\n line-height: 18px;\\n}\\n.leading-none {\\n line-height: 1;\\n}\\n.tracking-\\\\[0\\\\.01em\\\\] {\\n letter-spacing: 0.01em;\\n}\\n.tracking-\\\\[0\\\\.08em\\\\] {\\n letter-spacing: 0.08em;\\n}\\n.tracking-\\\\[0\\\\.16em\\\\] {\\n letter-spacing: 0.16em;\\n}\\n.text-\\\\[var\\\\(--theme-negative\\\\)\\\\] {\\n color: var(--theme-negative);\\n}\\n.text-\\\\[var\\\\(--theme-onPrimary\\\\)\\\\] {\\n color: var(--theme-onPrimary);\\n}\\n.text-\\\\[var\\\\(--theme-primary\\\\)\\\\] {\\n color: var(--theme-primary);\\n}\\n.text-\\\\[var\\\\(--theme-secondary\\\\)\\\\] {\\n color: var(--theme-secondary);\\n}\\n.text-\\\\[var\\\\(--theme-text\\\\)\\\\] {\\n color: var(--theme-text);\\n}\\n.text-\\\\[var\\\\(--theme-textLight\\\\)\\\\] {\\n color: var(--theme-textLight);\\n}\\n.text-\\\\[var\\\\(--ui-kit-accent\\\\)\\\\] {\\n color: var(--ui-kit-accent);\\n}\\n.text-transparent {\\n color: transparent;\\n}\\n.placeholder-\\\\[var\\\\(--theme-textLight\\\\)\\\\]::-moz-placeholder {\\n color: var(--theme-textLight);\\n}\\n.placeholder-\\\\[var\\\\(--theme-textLight\\\\)\\\\]::placeholder {\\n color: var(--theme-textLight);\\n}\\n.placeholder-transparent::-moz-placeholder {\\n color: transparent;\\n}\\n.placeholder-transparent::placeholder {\\n color: transparent;\\n}\\n.opacity-0 {\\n opacity: 0;\\n}\\n.opacity-100 {\\n opacity: 1;\\n}\\n.opacity-45 {\\n opacity: 0.45;\\n}\\n.opacity-70 {\\n opacity: 0.7;\\n}\\n.opacity-80 {\\n opacity: 0.8;\\n}\\n.opacity-\\\\[0\\\\.38\\\\] {\\n opacity: 0.38;\\n}\\n.shadow {\\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.shadow-none {\\n --tw-shadow: 0 0 #0000;\\n --tw-shadow-colored: 0 0 #0000;\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.outline-none {\\n outline: 2px solid transparent;\\n outline-offset: 2px;\\n}\\n.outline {\\n outline-style: solid;\\n}\\n.blur {\\n --tw-blur: blur(8px);\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.saturate-0 {\\n --tw-saturate: saturate(0);\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.saturate-100 {\\n --tw-saturate: saturate(1);\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.saturate-\\\\[0\\\\.8\\\\] {\\n --tw-saturate: saturate(0.8);\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.filter {\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.backdrop-blur-\\\\[2px\\\\] {\\n --tw-backdrop-blur: blur(2px);\\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n}\\n.backdrop-blur-\\\\[8px\\\\] {\\n --tw-backdrop-blur: blur(8px);\\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n}\\n.transition {\\n transition-property:\\n color,\\n background-color,\\n border-color,\\n text-decoration-color,\\n fill,\\n stroke,\\n opacity,\\n box-shadow,\\n transform,\\n filter,\\n backdrop-filter;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[background-color\\\\,color\\\\] {\\n transition-property: background-color, color;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[border-color\\\\] {\\n transition-property: border-color;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[opacity\\\\,filter\\\\] {\\n transition-property: opacity, filter;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[transform\\\\,color\\\\] {\\n transition-property: transform, color;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-all {\\n transition-property: all;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-colors {\\n transition-property:\\n color,\\n background-color,\\n border-color,\\n text-decoration-color,\\n fill,\\n stroke;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-opacity {\\n transition-property: opacity;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.duration-150 {\\n transition-duration: 150ms;\\n}\\n.duration-300 {\\n transition-duration: 300ms;\\n}\\n.ease-in-out {\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n}\\n.\\\\[overflow-wrap\\\\:anywhere\\\\] {\\n overflow-wrap: anywhere;\\n}\\n.hover\\\\:border-\\\\[var\\\\(--theme-primaryDark\\\\)\\\\]:hover {\\n border-color: var(--theme-primaryDark);\\n}\\n.hover\\\\:border-\\\\[var\\\\(--theme-primaryLight\\\\)\\\\]:hover {\\n border-color: var(--theme-primaryLight);\\n}\\n.hover\\\\:bg-\\\\[var\\\\(--theme-primaryLight\\\\)\\\\]:hover {\\n background-color: var(--theme-primaryLight);\\n}\\n.hover\\\\:text-\\\\[var\\\\(--theme-negative\\\\)\\\\]:hover {\\n color: var(--theme-negative);\\n}\\n.hover\\\\:text-\\\\[var\\\\(--theme-primary\\\\)\\\\]:hover {\\n color: var(--theme-primary);\\n}\\n.hover\\\\:underline:hover {\\n text-decoration-line: underline;\\n}\\n.active\\\\:border-\\\\[var\\\\(--theme-negative\\\\)\\\\]:active {\\n border-color: var(--theme-negative);\\n}\\n.active\\\\:border-\\\\[var\\\\(--theme-primary\\\\)\\\\]:active {\\n border-color: var(--theme-primary);\\n}\\n.active\\\\:border-transparent:active {\\n border-color: transparent;\\n}\\n.active\\\\:bg-\\\\[var\\\\(--theme-negative\\\\)\\\\]:active {\\n background-color: var(--theme-negative);\\n}\\n.active\\\\:bg-\\\\[var\\\\(--theme-primaryDark\\\\)\\\\]:active {\\n background-color: var(--theme-primaryDark);\\n}\\n.active\\\\:text-\\\\[var\\\\(--theme-onPrimary\\\\)\\\\]:active {\\n color: var(--theme-onPrimary);\\n}\\n.disabled\\\\:translate-y-0:disabled {\\n --tw-translate-y: 0px;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.disabled\\\\:scale-100:disabled {\\n --tw-scale-x: 1;\\n --tw-scale-y: 1;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.disabled\\\\:cursor-not-allowed:disabled {\\n cursor: not-allowed;\\n}\\n.disabled\\\\:opacity-50:disabled {\\n opacity: 0.5;\\n}\\n.group:has(:disabled) .group-has-\\\\[\\\\:disabled\\\\]\\\\:opacity-70 {\\n opacity: 0.7;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:absolute::-webkit-calendar-picker-indicator {\\n position: absolute;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:left-0::-webkit-calendar-picker-indicator {\\n left: 0px;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:top-0::-webkit-calendar-picker-indicator {\\n top: 0px;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:h-full::-webkit-calendar-picker-indicator {\\n height: 100%;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:w-full::-webkit-calendar-picker-indicator {\\n width: 100%;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:cursor-pointer::-webkit-calendar-picker-indicator {\\n cursor: pointer;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:opacity-0::-webkit-calendar-picker-indicator {\\n opacity: 0;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-datetime-edit\\\\]\\\\:flex::-webkit-datetime-edit {\\n display: flex;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-datetime-edit\\\\]\\\\:h-full::-webkit-datetime-edit {\\n height: 100%;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-datetime-edit\\\\]\\\\:items-center::-webkit-datetime-edit {\\n align-items: center;\\n}\\n\")","import latoLatin400NormalWoff from '@fontsource/lato/files/lato-latin-400-normal.woff';\nimport latoLatin400NormalWoff2 from '@fontsource/lato/files/lato-latin-400-normal.woff2';\nimport latoLatin700NormalWoff from '@fontsource/lato/files/lato-latin-700-normal.woff';\nimport latoLatin700NormalWoff2 from '@fontsource/lato/files/lato-latin-700-normal.woff2';\nimport latoLatinExt400NormalWoff from '@fontsource/lato/files/lato-latin-ext-400-normal.woff';\nimport latoLatinExt400NormalWoff2 from '@fontsource/lato/files/lato-latin-ext-400-normal.woff2';\nimport latoLatinExt700NormalWoff from '@fontsource/lato/files/lato-latin-ext-700-normal.woff';\nimport latoLatinExt700NormalWoff2 from '@fontsource/lato/files/lato-latin-ext-700-normal.woff2';\n\nconst UI_KIT_FONT_STYLE_ID = 'smartsell-ui-kit-fonts';\n\nconst uiKitFontFacesCss = `\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(${JSON.stringify(latoLatinExt400NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatinExt400NormalWoff)}) format(\"woff\");\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(${JSON.stringify(latoLatin400NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatin400NormalWoff)}) format(\"woff\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url(${JSON.stringify(latoLatinExt700NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatinExt700NormalWoff)}) format(\"woff\");\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url(${JSON.stringify(latoLatin700NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatin700NormalWoff)}) format(\"woff\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n`;\n\nexport function injectUiKitFonts(): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n if (document.getElementById(UI_KIT_FONT_STYLE_ID)) {\n return;\n }\n\n const styleElement = document.createElement('style');\n styleElement.id = UI_KIT_FONT_STYLE_ID;\n styleElement.textContent = uiKitFontFacesCss;\n document.head.appendChild(styleElement);\n}","export const DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS = 1500;","export const cx = (...values: Array<string | false | null | undefined>): string => {\n return values.filter(Boolean).join(' ');\n};\n\nexport const UI_KIT_ROOT_CLASSNAME = 'ui-kit-root';","export const DISABLED_COMPONENT_OPACITY = 0.5;\nexport const DISABLED_FIELD_OPACITY = 0.7;","import type { CSSProperties } from 'react';\n\nexport type ControlSize = 'sm' | 'md' | 'lg';\n\nexport const CONTROL_LEADING_ICON_SHIFT = 5;\nexport const CONTROL_TEXT_VERTICAL_SHIFT = 1;\nconst SELECT_TEXT_VERTICAL_SHIFT_REDUCTION = 1;\n\ntype ControlMetrics = {\n height: number;\n fontSize: number;\n lineHeight: string;\n paddingX: number;\n paddingY: number;\n buttonPaddingX: number;\n selectPaddingRight: number;\n selectIndicatorOffset: number;\n};\n\ntype TextInputPaddingOptions = {\n leadingPadding?: number;\n trailingPadding?: number;\n topPadding?: number;\n bottomPadding?: number;\n};\n\nconst getControlTextVerticalPadding = (size: ControlSize, shift = CONTROL_TEXT_VERTICAL_SHIFT): { top: number; bottom: number } => {\n const metrics = getControlMetrics(size);\n\n return {\n top: Math.max(0, metrics.paddingY - shift),\n bottom: metrics.paddingY + shift,\n };\n};\n\nconst getSelectTextVerticalShift = (): number => Math.max(0, CONTROL_TEXT_VERTICAL_SHIFT - SELECT_TEXT_VERTICAL_SHIFT_REDUCTION);\n\nconst CONTROL_METRICS_BY_SIZE: Record<ControlSize, ControlMetrics> = {\n sm: {\n height: 34,\n fontSize: 13,\n lineHeight: '16px',\n paddingX: 12,\n paddingY: 6,\n buttonPaddingX: 14,\n selectPaddingRight: 40,\n selectIndicatorOffset: 12,\n },\n md: {\n height: 42,\n fontSize: 14,\n lineHeight: '18px',\n paddingX: 14,\n paddingY: 7,\n buttonPaddingX: 16,\n selectPaddingRight: 42,\n selectIndicatorOffset: 14,\n },\n lg: {\n height: 48,\n fontSize: 15,\n lineHeight: '18px',\n paddingX: 16,\n paddingY: 9,\n buttonPaddingX: 18,\n selectPaddingRight: 46,\n selectIndicatorOffset: 16,\n },\n};\n\nexport const getControlMetrics = (size: ControlSize): ControlMetrics => CONTROL_METRICS_BY_SIZE[size];\n\nexport const getControlLeadingIconInset = (size: ControlSize): number => {\n const metrics = getControlMetrics(size);\n return Math.round(metrics.paddingX / 2) + CONTROL_LEADING_ICON_SHIFT;\n};\n\nexport const getControlLeadingAdornmentWidth = (size: ControlSize, iconSize: number): number => {\n return getControlLeadingIconInset(size) + iconSize;\n};\n\nexport const getTextInputPadding = (size: ControlSize, options: TextInputPaddingOptions = {}): string => {\n const metrics = getControlMetrics(size);\n const { top, bottom } = getControlTextVerticalPadding(size);\n const leadingPadding = options.leadingPadding ?? metrics.paddingX;\n const trailingPadding = options.trailingPadding ?? metrics.paddingX;\n const topPadding = options.topPadding ?? top;\n const bottomPadding = options.bottomPadding ?? bottom;\n\n return `${topPadding}px ${trailingPadding}px ${bottomPadding}px ${leadingPadding}px`;\n};\n\nexport const getSelectControlPadding = (size: ControlSize): string => {\n const metrics = getControlMetrics(size);\n const { top, bottom } = getControlTextVerticalPadding(size, getSelectTextVerticalShift());\n return `${top}px ${metrics.selectPaddingRight}px ${bottom}px ${metrics.paddingX}px`;\n};\n\nexport const getControlTextNudgeStyle = (shift = CONTROL_TEXT_VERTICAL_SHIFT): CSSProperties => ({\n transform: `translateY(-${shift}px)`,\n});\n\nexport const getSelectTextNudgeStyle = (): CSSProperties => getControlTextNudgeStyle(getSelectTextVerticalShift());\n\nexport const getSelectIndicatorOffset = (size: ControlSize): number => getControlMetrics(size).selectIndicatorOffset;\n\nexport const getButtonSizeStyles = (size: ControlSize): CSSProperties => {\n const metrics = getControlMetrics(size);\n\n return {\n boxSizing: 'border-box',\n height: metrics.height,\n padding: `0 ${metrics.buttonPaddingX}px`,\n fontSize: metrics.fontSize,\n lineHeight: metrics.lineHeight,\n };\n};\n\nexport const getFieldSizeStyles = (size: ControlSize): CSSProperties => {\n const metrics = getControlMetrics(size);\n\n return {\n height: metrics.height,\n fontSize: metrics.fontSize,\n lineHeight: metrics.lineHeight,\n };\n};\n","import { useEffect, useMemo } from 'react';\n\nimport {\n darkTheme,\n lightTheme,\n useThemeValue,\n type SmartSellTheme,\n type ThemeColors,\n} from 'smartsell-theme';\n\nexport const UI_KIT_THEME_COLOR_NAMES = [\n 'primary',\n 'primaryLight',\n 'primaryDark',\n 'shadow',\n 'secondary',\n 'background',\n 'surface',\n 'text',\n 'textLight',\n 'positive',\n 'negative',\n 'warning',\n 'info',\n 'onPrimary',\n 'onSecondary',\n] as const;\n\nexport type UiKitThemeColorName = (typeof UI_KIT_THEME_COLOR_NAMES)[number];\nexport type UiKitThemeColors = {\n [key in UiKitThemeColorName]: ThemeColors[key];\n};\n\nexport interface UiKitTheme extends Omit<SmartSellTheme, 'title' | 'colors' | 'color'> {\n title: SmartSellTheme['title'];\n colors: UiKitThemeColors;\n color: UiKitThemeColors;\n}\n\nconst DEFAULT_THEME_COLORS = {\n primary: '#BE1E2D',\n primaryLight: '#d33948',\n primaryDark: '#A31826',\n shadow: '#B8B8B8',\n onPrimary: '#ffffff',\n secondary: '#b3b3b3',\n onSecondary: '#000',\n background: '#e6e6e6',\n surface: '#dad9d9',\n text: '#2b2b2b',\n textLight: '#4f4f4f',\n positive: '#006705',\n negative: '#c90000',\n warning: '#876e00',\n info: '#00517d',\n} as const;\n\nconst expectedThemeColorNameSet = new Set<string>(UI_KIT_THEME_COLOR_NAMES);\n\nconst assertThemeColorSchema = (theme: SmartSellTheme): void => {\n const availableColorNames = Object.keys(theme.colors);\n const missingColorNames = UI_KIT_THEME_COLOR_NAMES.filter((colorName) => {\n return !availableColorNames.includes(colorName);\n });\n const unexpectedColorNames = availableColorNames.filter((colorName) => {\n return !expectedThemeColorNameSet.has(colorName);\n });\n\n if (missingColorNames.length === 0 && unexpectedColorNames.length === 0) {\n return;\n }\n\n throw new Error(\n `smartsell-ui-kit expected smartsell-theme color schema [${UI_KIT_THEME_COLOR_NAMES.join(', ')}], but theme \"${theme.title}\" exposes [${availableColorNames.join(', ')}]. Missing: [${missingColorNames.join(', ')}]. Unexpected: [${unexpectedColorNames.join(', ')}].`,\n );\n};\n\nassertThemeColorSchema(lightTheme);\nassertThemeColorSchema(darkTheme);\n\nconst ROOT_THEME_VARIABLES: Array<[string, UiKitThemeColorName]> = [\n ['--theme-primary', 'primary'],\n ['--theme-primaryLight', 'primaryLight'],\n ['--theme-primaryDark', 'primaryDark'],\n ['--theme-shadow', 'shadow'],\n ['--theme-secondary', 'secondary'],\n ['--theme-background', 'background'],\n ['--theme-surface', 'surface'],\n ['--theme-text', 'text'],\n ['--theme-textLight', 'textLight'],\n ['--theme-positive', 'positive'],\n ['--theme-negative', 'negative'],\n ['--theme-warning', 'warning'],\n ['--theme-info', 'info'],\n ['--theme-onPrimary', 'onPrimary'],\n ['--theme-onSecondary', 'onSecondary'],\n];\n\nconst syncUiKitThemeVariables = (theme: UiKitTheme): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const rootStyle = document.documentElement.style;\n\n ROOT_THEME_VARIABLES.forEach(([variableName, colorName]) => {\n rootStyle.setProperty(variableName, theme.colors[colorName]);\n });\n};\n\nexport function normalizeUiKitTheme(theme: SmartSellTheme): UiKitTheme {\n const colors = theme.colors as Partial<ThemeColors>;\n const isDarkTheme = `${theme.title}`.toUpperCase() === 'DARK';\n const primary = colors.primary ?? DEFAULT_THEME_COLORS.primary;\n const background = colors.background ?? DEFAULT_THEME_COLORS.background;\n const surface = colors.surface ?? background;\n const text = colors.text ?? DEFAULT_THEME_COLORS.text;\n const textLight = colors.textLight ?? text;\n\n const normalizedColors: UiKitThemeColors = {\n primary,\n primaryLight: colors.primaryLight ?? primary,\n primaryDark: colors.primaryDark ?? primary,\n shadow: colors.shadow ?? (isDarkTheme ? '#181818' : DEFAULT_THEME_COLORS.shadow),\n secondary: colors.secondary ?? DEFAULT_THEME_COLORS.secondary,\n background,\n surface,\n text,\n textLight,\n positive: colors.positive ?? DEFAULT_THEME_COLORS.positive,\n negative: colors.negative ?? DEFAULT_THEME_COLORS.negative,\n warning: colors.warning ?? DEFAULT_THEME_COLORS.warning,\n info: colors.info ?? DEFAULT_THEME_COLORS.info,\n onPrimary: colors.onPrimary ?? DEFAULT_THEME_COLORS.onPrimary,\n onSecondary: colors.onSecondary ?? text,\n };\n\n return {\n ...theme,\n colors: normalizedColors,\n color: normalizedColors,\n } as UiKitTheme;\n}\n\nexport function useUiKitTheme(): UiKitTheme {\n const activeTheme = useThemeValue();\n const theme = useMemo(() => normalizeUiKitTheme(activeTheme), [activeTheme]);\n\n useEffect(() => {\n syncUiKitThemeVariables(theme);\n }, [theme]);\n\n return theme;\n}","import type { ButtonHTMLAttributes, ReactNode } from 'react';\n\nimport {\n cx,\n DISABLED_COMPONENT_OPACITY,\n UI_KIT_ROOT_CLASSNAME,\n getButtonSizeStyles,\n useUiKitTheme,\n type ControlSize,\n} from '../foundation';\n\ntype LegacyVariant = 'primary';\ntype ButtonVariant =\n | 'solid'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'negative'\n | LegacyVariant;\ntype ButtonSize = ControlSize;\n\nexport interface ButtonProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'dangerouslySetInnerHTML'\n> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n}\n\nconst BUTTON_VARIANT_CLASSNAMES: Record<\n 'solid' | 'secondary' | 'outline' | 'ghost' | 'negative',\n string\n> = {\n solid: [\n 'border-[var(--theme-primary)]',\n 'bg-[var(--theme-primary)]',\n 'text-[var(--theme-onPrimary)]',\n 'hover:border-[var(--theme-primaryDark)]',\n 'hover:bg-[var(--theme-primaryLight)]',\n 'active:bg-[var(--theme-primaryDark)]',\n ].join(' '),\n secondary: [\n 'border-transparent',\n 'bg-[var(--theme-background)]',\n 'active:bg-[var(--theme-primaryDark)]',\n 'active:text-[var(--theme-onPrimary)]',\n 'active:border-transparent',\n ].join(' '),\n outline: [\n 'border-[var(--theme-textLight)]',\n 'bg-transparent',\n 'hover:bg-[var(--theme-primaryLight)]',\n 'hover:border-[var(--theme-primaryLight)]',\n 'active:bg-[var(--theme-primaryDark)]',\n 'active:text-[var(--theme-onPrimary)]',\n 'active:border-[var(--theme-primary)]',\n ].join(' '),\n ghost: [\n 'border-transparent',\n 'bg-transparent',\n 'text-[var(--theme-primary)]',\n 'hover:underline',\n ].join(' '),\n negative: [\n 'border-[var(--theme-negative)]',\n 'bg-transparent',\n 'text-[var(--theme-negative)]',\n 'active:bg-[var(--theme-negative)]',\n 'active:text-[var(--theme-onPrimary)]',\n 'active:border-[var(--theme-negative)]',\n ].join(' '),\n};\n\nexport function Button({\n variant = 'solid',\n size = 'md',\n leadingIcon,\n trailingIcon,\n children,\n disabled,\n className,\n style,\n type = 'button',\n ...rest\n}: ButtonProps) {\n useUiKitTheme();\n\n const resolvedVariant = variant === 'primary' ? 'solid' : variant;\n return (\n <button\n {...rest}\n type={type}\n disabled={disabled}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'box-border inline-flex w-fit max-w-fit items-center justify-center gap-2.5 shrink-0',\n 'rounded-2xl border border-solid font-bold tracking-[0.01em] text-[var(--theme-text)]',\n 'shadow-none cursor-pointer transition-all duration-300',\n 'disabled:cursor-not-allowed',\n 'disabled:translate-y-0 disabled:scale-100',\n\n BUTTON_VARIANT_CLASSNAMES[resolvedVariant],\n className,\n )}\n style={{\n ...getButtonSizeStyles(size),\n ...style,\n ...(disabled ? { opacity: DISABLED_COMPONENT_OPACITY } : {}),\n }}\n >\n {leadingIcon}\n {children}\n {trailingIcon}\n </button>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from '../foundation';\n\nexport interface CardProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title'> {\n children: ReactNode;\n eyebrow?: ReactNode;\n title?: ReactNode;\n action?: ReactNode;\n padded?: boolean;\n}\n\nexport function Card({\n children,\n eyebrow,\n title,\n action,\n padded = true,\n className,\n ...rest\n}: CardProps) {\n useUiKitTheme();\n\n return (\n <div\n {...rest}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'rounded-[28px] bg-[var(--theme-surface)] text-[var(--theme-text)]',\n 'border-2 border-solid border-[var(--theme-background)]',\n padded && 'p-4',\n className,\n )}\n >\n {(eyebrow || title || action) && (\n <div className=\"mb-[18px] flex items-start justify-between gap-4\">\n <div className=\"flex flex-col gap-1.5\">\n {eyebrow ? (\n <span className=\"text-xs font-extrabold uppercase tracking-[0.16em] text-[var(--theme-textLight)]\">\n {eyebrow}\n </span>\n ) : null}\n {title ? (\n <div className=\"text-2xl font-bold leading-[1.2] text-[var(--theme-text)]\">\n {title}\n </div>\n ) : null}\n </div>\n {action ? <div className=\"text-[var(--theme-text)]\">{action}</div> : null}\n </div>\n )}\n {children}\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nimport {\n cx,\n UI_KIT_ROOT_CLASSNAME,\n useUiKitTheme,\n} from '../foundation';\n\nexport interface CardSmallProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title' | 'color'> {\n title?: ReactNode;\n value?: ReactNode;\n icon?: ReactNode;\n color?: CSSProperties['color'];\n}\n\nexport function CardSmall({\n title,\n value,\n icon,\n color,\n className,\n style,\n ...rest\n}: CardSmallProps) {\n const theme = useUiKitTheme();\n const accentColor = color ?? theme.colors.primary;\n\n return (\n <div\n {...rest}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'relative flex min-h-20 items-center gap-4 overflow-hidden',\n 'rounded-2xl',\n 'border-2 border-solid border-[var(--theme-background)]',\n 'bg-[var(--theme-surface)] pl-6 pr-6 text-[var(--theme-text)]',\n className,\n )}\n style={{\n '--ui-kit-accent': accentColor,\n ...style,\n } as CSSProperties}\n >\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-y-0 left-0 w-[25px] bg-[var(--ui-kit-accent)]\"\n />\n\n {icon ? (\n <div\n aria-hidden=\"true\"\n className={cx(\n 'ml-4 inline-flex h-[52px] w-[52px] shrink-0 items-center justify-center',\n 'rounded-xl bg-[color-mix(in_srgb,var(--ui-kit-accent)_24%,transparent)]',\n 'text-[var(--ui-kit-accent)]',\n )}\n >\n {icon}\n </div>\n ) : null}\n\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n {title ? (\n <div className=\"truncate text-sm font-bold leading-[1.25] text-[var(--theme-text)]\">\n {title}\n </div>\n ) : null}\n {value ? (\n <div className=\"truncate text-[18px] font-extrabold leading-[1.15] text-[var(--theme-text)]\">\n {value}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n","import { useEffect, useId, useRef, useState, type CSSProperties, type InputHTMLAttributes, type ReactNode } from 'react';\n\nimport {\n cx,\n DISABLED_FIELD_OPACITY,\n UI_KIT_ROOT_CLASSNAME,\n useUiKitTheme,\n type ControlSize,\n} from '../foundation';\n\nexport interface CheckboxIndicatorProps {\n checked: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n size?: number;\n checkedColor?: string;\n iconColor?: string;\n uncheckedBorderColor?: string;\n uncheckedBackgroundColor?: string;\n style?: CSSProperties;\n}\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'dangerouslySetInnerHTML' | 'size' | 'type'> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n size?: ControlSize;\n indeterminate?: boolean;\n}\n\nconst CHECKBOX_SIZE_BY_SIZE: Record<ControlSize, number> = {\n sm: 14,\n md: 16,\n lg: 20,\n};\n\nconst CHECKBOX_LABEL_CLASSNAMES: Record<ControlSize, string> = {\n sm: 'text-[13px] leading-4',\n md: 'text-sm leading-[18px]',\n lg: 'text-[15px] leading-[18px]',\n};\n\nconst getCheckboxSize = (size: ControlSize): number => CHECKBOX_SIZE_BY_SIZE[size];\n\nconst hasNodeContent = (value: ReactNode): boolean => {\n if (Array.isArray(value)) {\n return value.some(hasNodeContent);\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n return value !== null && value !== undefined && value !== false;\n};\n\nfunction CheckIcon({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M5.75 10.25L8.5 13l5.75-6\"\n stroke={color}\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction MixedIcon({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5.5 10H14.5\" stroke={color} strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function CheckboxIndicator({\n checked,\n indeterminate = false,\n disabled = false,\n size = 20,\n checkedColor,\n iconColor,\n uncheckedBackgroundColor,\n style,\n}: CheckboxIndicatorProps) {\n const theme = useUiKitTheme();\n const isActive = checked || indeterminate;\n const resolvedCheckedColor = checkedColor ?? theme.colors.textLight;\n const resolvedIconColor = iconColor ?? theme.colors.surface;\n const resolvedUncheckedBackgroundColor = uncheckedBackgroundColor ?? theme.colors.surface;\n\n return (\n <span\n aria-hidden=\"true\"\n style={{\n width: size,\n height: size,\n borderRadius: 999,\n boxSizing: 'border-box',\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 0,\n backgroundColor: isActive ? resolvedCheckedColor : resolvedUncheckedBackgroundColor,\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n transition: 'background-color 140ms ease, border-color 140ms ease, opacity 140ms ease',\n ...style,\n }}\n >\n {indeterminate ? <MixedIcon size={Math.max(10, size - 6)} color={resolvedIconColor} /> : null}\n {!indeterminate && checked ? <CheckIcon size={Math.max(10, size - 6)} color={resolvedIconColor} /> : null}\n </span>\n );\n}\n\nexport function Checkbox({\n label,\n hint,\n error,\n size = 'sm',\n id,\n checked,\n defaultChecked,\n disabled,\n indeterminate = false,\n required,\n className,\n style,\n onChange,\n onFocus,\n onBlur,\n ...rest\n}: CheckboxProps) {\n const theme = useUiKitTheme();\n const mutedText = theme.colors.textLight;\n const indicatorSize = getCheckboxSize(size);\n const hasLabel = hasNodeContent(label);\n const hasHint = hasNodeContent(hint);\n const hasError = hasNodeContent(error);\n const hasSecondaryContent = hasLabel && hasHint;\n const resolvedId = id ?? `ss-checkbox-${useId().replace(/:/g, '')}`;\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalChecked, setInternalChecked] = useState(Boolean(defaultChecked));\n const isControlled = checked !== undefined;\n const resolvedChecked = isControlled ? Boolean(checked) : internalChecked;\n\n useEffect(() => {\n if (!inputRef.current) {\n return;\n }\n\n inputRef.current.indeterminate = indeterminate;\n }, [indeterminate, resolvedChecked]);\n\n return (\n <div\n className={cx(UI_KIT_ROOT_CLASSNAME, 'flex w-full flex-col gap-1.5', className)}\n style={style}\n >\n <label\n htmlFor={resolvedId}\n className={cx(\n 'inline-flex select-none gap-2.5',\n hasSecondaryContent ? 'items-start' : 'items-center',\n hasLabel || hasHint || hasError ? 'w-full' : 'w-auto',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n style={disabled ? { opacity: DISABLED_FIELD_OPACITY } : undefined}\n >\n <span\n className={cx(\n 'relative inline-flex shrink-0 items-center justify-center rounded-full p-0.5',\n hasSecondaryContent ? 'mt-px' : 'mt-0',\n )}\n >\n <input\n {...rest}\n ref={inputRef}\n id={resolvedId}\n type=\"checkbox\"\n checked={resolvedChecked}\n disabled={disabled}\n required={required}\n onChange={(event) => {\n if (!isControlled) {\n setInternalChecked(event.currentTarget.checked);\n }\n\n onChange?.(event);\n }}\n onFocus={(event) => {\n onFocus?.(event);\n }}\n onBlur={(event) => {\n onBlur?.(event);\n }}\n className={cx(\n 'absolute inset-0 m-0 h-full w-full opacity-0',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n />\n <CheckboxIndicator\n checked={resolvedChecked}\n indeterminate={indeterminate}\n disabled={disabled}\n size={indicatorSize}\n checkedColor={theme.colors.primary}\n iconColor={theme.colors.onPrimary}\n uncheckedBackgroundColor={theme.colors.secondary}\n style={disabled ? { opacity: 1 } : undefined}\n />\n </span>\n\n {hasLabel || hasHint || hasError ? (\n <span\n className={cx(\n 'flex min-w-0 flex-col gap-1',\n hasSecondaryContent ? 'justify-start' : 'justify-center',\n )}\n >\n {label ? (\n <span className={cx('font-semibold text-[var(--theme-text)]', CHECKBOX_LABEL_CLASSNAMES[size])}>\n {label}\n {required ? <span className=\"ml-1 text-[var(--theme-negative)]\">*</span> : null}\n </span>\n ) : null}\n {hint ? (\n <span className=\"text-[13px] leading-[1.45] text-[var(--theme-textLight)]\">\n {hint}\n </span>\n ) : null}\n {error ? (\n <span className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-negative)]\">\n {error}\n </span>\n ) : null}\n </span>\n ) : null}\n </label>\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from './Button';\nimport { Modal } from './Modal';\n\nexport interface ModalSlotIds {\n header: string;\n body: string;\n footer: string;\n}\n\nexport interface ModalSlotContext<TPayload = unknown> {\n title: string;\n payload?: TPayload;\n close: () => void;\n confirm?: () => void;\n confirmLabel: string;\n cancelLabel: string;\n isOpen: boolean;\n isBusy: boolean;\n}\n\nexport interface ComposableModalSlotRenderProps<TPayload = unknown> {\n id: string;\n context: ModalSlotContext<TPayload>;\n children?: ReactNode;\n}\n\nexport type ComposableModalSlotRenderer<TPayload = unknown> = (\n props: ComposableModalSlotRenderProps<TPayload>,\n) => ReactNode;\n\nexport interface ComposableModalProps<TPayload = unknown> {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n slotBaseId: string;\n renderSlot?: ComposableModalSlotRenderer<TPayload>;\n payload?: TPayload;\n onConfirm?: () => void;\n confirmLabel?: string;\n cancelLabel?: string;\n isBusy?: boolean;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n hideExpandButton?: boolean;\n maximized?: boolean;\n hideDefaultFooter?: boolean;\n maxWidth?: number | string;\n headerFallback?: ReactNode;\n footerFallback?: ReactNode;\n children?: ReactNode;\n}\n\nexport const createModalSlotIds = (slotBaseId: string): ModalSlotIds => ({\n header: `${slotBaseId}:modal-header`,\n body: `${slotBaseId}:modal-body`,\n footer: `${slotBaseId}:modal-footer`,\n});\n\nexport function ComposableModal<TPayload = unknown>({\n isOpen,\n onClose,\n title,\n slotBaseId,\n renderSlot,\n payload,\n onConfirm,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n isBusy = false,\n closeOnBackdrop = true,\n closeOnEscape = true,\n hideExpandButton = false,\n maximized,\n hideDefaultFooter = false,\n maxWidth,\n headerFallback,\n footerFallback,\n children,\n}: ComposableModalProps<TPayload>) {\n const slotIds = createModalSlotIds(slotBaseId);\n\n const context = useMemo<ModalSlotContext<TPayload>>(\n () => ({\n title,\n payload,\n close: onClose,\n confirm: onConfirm,\n confirmLabel,\n cancelLabel,\n isOpen,\n isBusy,\n }),\n [cancelLabel, confirmLabel, isBusy, isOpen, onClose, onConfirm, payload, title],\n );\n\n const defaultFooter = hideDefaultFooter ? undefined : (\n footerFallback ?? (\n <>\n <Button variant=\"outline\" onClick={onClose} disabled={isBusy}>\n {cancelLabel}\n </Button>\n {onConfirm ? (\n <Button onClick={onConfirm} disabled={isBusy}>\n {confirmLabel}\n </Button>\n ) : null}\n </>\n )\n );\n\n const defaultHeader = headerFallback ?? (\n <h2\n className=\"m-0 text-[24px] font-extrabold leading-[1.1]\"\n >\n {title}\n </h2>\n );\n\n const renderSlotContent = (id: string, slotChildren: ReactNode) => {\n if (!renderSlot) {\n return slotChildren;\n }\n\n return renderSlot({\n id,\n context,\n children: slotChildren,\n });\n };\n\n const headerContent = renderSlotContent(slotIds.header, defaultHeader);\n const bodyContent = renderSlotContent(slotIds.body, children);\n const footerContent = renderSlotContent(slotIds.footer, defaultFooter);\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n isBusy={isBusy}\n headerContent={headerContent}\n footer={footerContent}\n maxWidth={maxWidth}\n hideExpandButton={hideExpandButton}\n maximized={maximized}\n closeOnBackdrop={closeOnBackdrop}\n closeOnEscape={closeOnEscape}\n >\n {bodyContent}\n </Modal>\n );\n}","import { useEffect, useMemo, useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\n\nimport {\n cx,\n DISABLED_COMPONENT_OPACITY,\n UI_KIT_ROOT_CLASSNAME,\n normalizeUiKitTheme,\n useUiKitTheme,\n type UiKitTheme,\n} from '../foundation';\n\ntype ModalActionAppearance = 'text' | 'outlined' | 'contained' | 'link';\n\ntype ModalThemeColors = {\n background: string;\n surface: string;\n text: string;\n textLight: string;\n primary: string;\n onPrimary: string;\n secondary: string;\n onSecondary: string;\n negative: string;\n warning: string;\n};\n\nexport interface ModalTheme {\n colors?: Partial<ModalThemeColors>;\n}\n\nexport type ModalThemeSource = ModalTheme | UiKitTheme;\n\nexport interface ModalAction {\n label: ReactNode;\n onClick: () => void;\n appearance?: ModalActionAppearance;\n style?: CSSProperties;\n disabled?: boolean;\n hidden?: boolean;\n}\n\ninterface BaseModalProps {\n children?: ReactNode;\n theme?: ModalThemeSource;\n}\n\nexport interface ModalProps extends BaseModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: ReactNode;\n headerContent?: ReactNode;\n footer?: ReactNode;\n confirmAction?: ModalAction;\n cancelAction?: ModalAction;\n closeAction?: ModalAction;\n extraActions?: ModalAction[];\n maxWidth?: number | string;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n hideCloseButton?: boolean;\n hideExpandButton?: boolean;\n disableDismiss?: boolean;\n maximized?: boolean;\n contentStyle?: CSSProperties;\n bodyStyle?: CSSProperties;\n isBusy?: boolean;\n}\n\nexport type StandardModalProps = ModalProps;\n\nconst isUiKitTheme = (theme?: ModalThemeSource): theme is UiKitTheme => {\n return Boolean(theme && typeof theme === 'object' && 'title' in theme && 'color' in theme);\n};\n\nconst resolveTheme = (baseTheme: UiKitTheme, themeOverride?: ModalThemeSource): UiKitTheme => {\n if (isUiKitTheme(themeOverride)) {\n return themeOverride;\n }\n\n if (!themeOverride?.colors) {\n return baseTheme;\n }\n\n const colors: UiKitTheme['colors'] = {\n ...baseTheme.colors,\n ...themeOverride.colors,\n };\n\n return normalizeUiKitTheme({\n ...baseTheme,\n colors,\n color: colors,\n });\n};\n\nconst normalizeWidth = (maxWidth?: number | string): string | number => {\n if (typeof maxWidth === 'number') {\n return `${maxWidth}px`;\n }\n\n return maxWidth ?? '720px';\n};\n\nconst isLikelyMobileViewport = (): boolean => {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n return false;\n }\n\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n};\n\nconst createTitleId = (title?: ReactNode): string => {\n if (typeof title === 'string' || typeof title === 'number') {\n const normalized = String(title)\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '');\n\n return `smartsell-modal-${normalized || 'dialog'}`;\n }\n\n return 'smartsell-modal-dialog';\n};\n\nfunction ModalActionButton({\n action,\n}: {\n action: ModalAction;\n}) {\n const {\n label,\n onClick,\n appearance = 'contained',\n disabled = false,\n style,\n } = action;\n\n const buttonClassName = cx(\n 'flex w-full items-center justify-center rounded-[0.4rem] box-border',\n 'm-0 text-center font-bold leading-[1.2]',\n appearance === 'link' ? 'p-0 text-[1.05rem]' : 'px-[1.15rem] py-[0.9rem] text-[1.05rem]',\n disabled ? 'cursor-not-allowed saturate-0' : 'cursor-pointer',\n appearance === 'text' && 'border-0 bg-transparent text-[var(--theme-primary)]',\n appearance === 'link' && 'border-0 bg-transparent text-[var(--theme-primary)]',\n appearance === 'outlined' && 'border-0 bg-transparent',\n appearance === 'outlined' && 'text-[var(--theme-primary)]',\n appearance === 'contained' && 'border-0 bg-[var(--theme-primary)]',\n appearance === 'contained' && 'text-[var(--theme-onPrimary)]',\n );\n\n return (\n <div\n className=\"m-0 flex items-center justify-center\"\n style={{\n width: style?.width ?? (style?.maxWidth ? '100%' : 'max-content'),\n marginBottom: style?.marginBottom ?? 0,\n ...style,\n }}\n >\n <button\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={buttonClassName}\n style={{\n opacity: disabled ? DISABLED_COMPONENT_OPACITY : 1,\n }}\n >\n {label}\n </button>\n </div>\n );\n}\n\nfunction ModalBusyIndicator({\n theme,\n}: {\n theme: UiKitTheme;\n}) {\n return (\n <div\n aria-live=\"polite\"\n role=\"status\"\n className=\"relative inline-flex h-14 w-14 items-center justify-center rounded-full\"\n style={{\n backgroundColor: theme.colors.surface,\n }}\n >\n <span className=\"ui-kit-sr-only\">Loading</span>\n <svg aria-hidden=\"true\" width=\"32\" height=\"32\" viewBox=\"0 0 40 40\" fill=\"none\">\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"16\"\n stroke={theme.colors.textLight}\n strokeWidth=\"4\"\n />\n <path\n d=\"M20 4C28.837 4 36 11.163 36 20\"\n stroke={theme.colors.primary}\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n >\n <animateTransform\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"0 20 20\"\n to=\"360 20 20\"\n dur=\"0.75s\"\n repeatCount=\"indefinite\"\n />\n </path>\n </svg>\n </div>\n );\n}\n\nfunction MaximizeIcon() {\n return (\n <svg aria-hidden=\"true\" width=\"15\" height=\"15\" viewBox=\"0 0 20 20\" fill=\"none\">\n <rect x=\"4.25\" y=\"4.25\" width=\"11.5\" height=\"11.5\" rx=\"2.2\" stroke=\"currentColor\" strokeWidth=\"1.7\" />\n </svg>\n );\n}\n\nfunction MinimizeIcon() {\n return (\n <svg aria-hidden=\"true\" width=\"15\" height=\"15\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M6.25 4.75H13a2.25 2.25 0 0 1 2.25 2.25v6.75\"\n stroke=\"currentColor\"\n strokeWidth=\"1.7\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M13.75 9.5v4.25a1.5 1.5 0 0 1-1.5 1.5H6a1.75 1.75 0 0 1-1.75-1.75V7.75A1.5 1.5 0 0 1 5.75 6.25H10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.7\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction UnifiedModal({\n isOpen,\n onClose,\n children,\n title,\n headerContent,\n footer,\n confirmAction,\n cancelAction,\n closeAction,\n extraActions,\n maxWidth,\n closeOnBackdrop = true,\n closeOnEscape = true,\n hideCloseButton = false,\n hideExpandButton = false,\n disableDismiss = false,\n maximized,\n contentStyle,\n bodyStyle,\n isBusy = false,\n theme,\n}: ModalProps) {\n const inheritedTheme = useUiKitTheme();\n const modalTheme = useMemo(() => resolveTheme(inheritedTheme, theme), [inheritedTheme, theme]);\n const modalThemeVariables = useMemo<CSSProperties>(() => ({\n '--theme-background': modalTheme.colors.background,\n '--theme-surface': modalTheme.colors.surface,\n '--theme-text': modalTheme.colors.text,\n '--theme-textLight': modalTheme.colors.textLight,\n '--theme-primary': modalTheme.colors.primary,\n '--theme-onPrimary': modalTheme.colors.onPrimary,\n '--theme-secondary': modalTheme.colors.secondary,\n '--theme-onSecondary': modalTheme.colors.onSecondary,\n '--theme-negative': modalTheme.colors.negative,\n '--theme-warning': modalTheme.colors.warning,\n '--theme-shadow': modalTheme.colors.shadow,\n } as CSSProperties), [modalTheme]);\n const [isMaximized, setIsMaximized] = useState<boolean>(maximized ?? false);\n const titleId = useMemo(() => createTitleId(title), [title]);\n const shouldDisableDismiss = disableDismiss || isBusy;\n\n useEffect(() => {\n if (typeof maximized === 'boolean') {\n setIsMaximized(maximized);\n return;\n }\n\n if (isLikelyMobileViewport()) {\n setIsMaximized(true);\n }\n }, [maximized]);\n\n useEffect(() => {\n if (!isOpen || typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!shouldDisableDismiss && closeOnEscape && event.key === 'Escape') {\n onClose();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.body.style.overflow = previousOverflow;\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [closeOnEscape, isOpen, onClose, shouldDisableDismiss]);\n\n if (!isOpen) {\n return null;\n }\n\n const resolvedHeader = headerContent ?? (title ? (\n <h2\n id={titleId}\n className=\"m-0 text-2xl font-extrabold leading-[1.1] text-[var(--theme-text)]\"\n >\n {title}\n </h2>\n ) : null);\n\n let footerContent = footer;\n\n if (footerContent === undefined) {\n if (closeAction && !closeAction.hidden) {\n footerContent = (\n <ModalActionButton\n action={{ ...closeAction, disabled: closeAction.disabled || isBusy }}\n />\n );\n } else {\n const resolvedActions = [\n cancelAction\n ? {\n ...cancelAction,\n appearance: cancelAction.appearance ?? 'text',\n disabled: cancelAction.disabled || isBusy,\n }\n : undefined,\n ...(extraActions ?? []).map((action) => ({\n ...action,\n appearance: action.appearance ?? 'contained',\n disabled: action.disabled || isBusy,\n })),\n confirmAction\n ? {\n ...confirmAction,\n appearance: confirmAction.appearance ?? 'contained',\n disabled: confirmAction.disabled || isBusy,\n }\n : undefined,\n ].reduce<ModalAction[]>((items, action) => {\n if (!action || action.hidden) {\n return items;\n }\n\n items.push(action);\n return items;\n }, []);\n\n footerContent = resolvedActions.length > 0\n ? resolvedActions.map((action, index) => (\n <ModalActionButton\n key={`modal-action-${index}`}\n action={action}\n />\n ))\n : undefined;\n }\n }\n\n const shouldRenderFooter = footerContent !== undefined && footerContent !== null && footerContent !== false;\n\n return (\n <div\n aria-label={headerContent ? (typeof title === 'string' ? title : 'Dialog') : undefined}\n aria-labelledby={headerContent ? undefined : title ? titleId : undefined}\n aria-busy={isBusy}\n aria-modal=\"true\"\n role=\"dialog\"\n onMouseDown={(event) => {\n if (!shouldDisableDismiss && closeOnBackdrop && event.target === event.currentTarget) {\n onClose();\n }\n }}\n className={cx(UI_KIT_ROOT_CLASSNAME, 'fixed inset-0 z-[70] flex items-center justify-center backdrop-blur-[8px]')}\n style={{\n ...modalThemeVariables,\n padding: isMaximized ? 0 : 16,\n backgroundColor: modalTheme.colors.shadow,\n }}\n >\n <div\n className={cx(\n 'relative flex flex-col overflow-hidden border-0',\n 'bg-[var(--theme-surface)]',\n 'text-[var(--theme-text)]',\n isMaximized ? 'rounded-none' : 'rounded-[30px]',\n )}\n style={{\n width: isMaximized ? '100vw' : 'min(100%, 100%)',\n maxWidth: isMaximized ? '100vw' : normalizeWidth(maxWidth),\n height: isMaximized ? '100vh' : undefined,\n maxHeight: isMaximized ? '100vh' : 'calc(100vh - 32px)',\n minWidth: isMaximized ? '100vw' : 300,\n ...contentStyle,\n }}\n >\n <div\n className=\"flex items-start justify-between gap-3 px-5 pb-3 pt-[18px]\"\n >\n <div\n className={cx(\n 'flex-1 transition-opacity duration-150',\n isBusy ? 'opacity-[0.38]' : 'opacity-100',\n )}\n >\n {resolvedHeader}\n </div>\n <div className=\"flex items-center gap-2\">\n {!hideExpandButton ? (\n <button\n aria-label={isMaximized ? 'Minimize modal' : 'Maximize modal'}\n title={isMaximized ? 'Minimize' : 'Maximize'}\n type=\"button\"\n onClick={() => setIsMaximized((current) => !current)}\n className=\"m-0 inline-flex h-[30px] w-[30px] shrink-0 cursor-pointer appearance-none items-center justify-center rounded-full border-0 bg-transparent p-0 text-[var(--theme-text)] leading-none\"\n >\n {isMaximized ? <MinimizeIcon /> : <MaximizeIcon />}\n </button>\n ) : null}\n {!hideCloseButton ? (\n <button\n aria-label=\"Close modal\"\n type=\"button\"\n onClick={shouldDisableDismiss ? undefined : onClose}\n className={cx(\n 'flex h-[30px] w-[30px] items-center justify-center rounded-full border-0',\n 'bg-transparent text-[20px] font-bold text-[var(--theme-text)]',\n shouldDisableDismiss ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n style={{\n opacity: shouldDisableDismiss ? DISABLED_COMPONENT_OPACITY : 1,\n }}\n >\n ×\n </button>\n ) : null}\n </div>\n </div>\n\n <div\n className=\"relative min-h-0 flex-1 overflow-auto p-6\"\n style={bodyStyle}\n >\n <div\n className={cx(\n 'transition-[opacity,filter] duration-150',\n isBusy ? 'pointer-events-none opacity-[0.38] saturate-[0.8]' : 'pointer-events-auto opacity-100 saturate-100',\n )}\n >\n {children}\n </div>\n {isBusy ? (\n <div\n className=\"absolute inset-0 flex items-center justify-center backdrop-blur-[2px]\"\n style={{ backgroundColor: modalTheme.colors.background }}\n >\n <ModalBusyIndicator theme={modalTheme} />\n </div>\n ) : null}\n </div>\n\n {shouldRenderFooter ? (\n <div\n className=\"flex justify-end gap-2.5 px-5 pb-4 pt-3\"\n >\n {footerContent}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport function Modal(props: ModalProps) {\n return <UnifiedModal {...props} />;\n}\n","'use client';\n\nimport {\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type ChangeEvent,\n type InputHTMLAttributes,\n type ReactNode,\n type Ref,\n} from 'react';\n\nimport {\n cx,\n getControlLeadingAdornmentWidth,\n getControlLeadingIconInset,\n getControlMetrics,\n getControlTextNudgeStyle,\n CONTROL_TEXT_VERTICAL_SHIFT,\n getTextInputPadding,\n UI_KIT_ROOT_CLASSNAME,\n getFieldSizeStyles,\n useUiKitTheme,\n type ControlSize,\n} from '../foundation';\n\ntype ControlFrameProps = {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n htmlFor?: string;\n required?: boolean;\n useLabelWrapper?: boolean;\n children: ReactNode;\n style?: CSSProperties;\n alignLabel?: 'center' | 'top';\n hasValue?: boolean;\n labelOffset?: number;\n floatingPlaceholderVerticalShift?: number;\n floatingPlaceholder?: string;\n size?: ControlSize;\n};\n\nexport interface InputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'dangerouslySetInnerHTML' | 'size'\n> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n size?: ControlSize;\n showPasswordToggle?: boolean;\n fileButtonLabel?: ReactNode;\n icon?: ReactNode;\n disableFloatingLabel?: boolean;\n // React 19 passes `ref` as a regular prop; it flows through `...rest` onto the\n // underlying <input> so callers (e.g. the SelectBase search box) can focus it.\n ref?: Ref<HTMLInputElement>;\n}\n\ntype PasswordToggleMetrics = {\n buttonSize: number;\n leftOffset: number;\n contentGap: number;\n iconSize: number;\n};\n\nconst PASSWORD_TOGGLE_METRICS_BY_SIZE: Record<\n ControlSize,\n PasswordToggleMetrics\n> = {\n sm: {\n buttonSize: 18,\n leftOffset: 8,\n contentGap: 8,\n iconSize: 14,\n },\n md: {\n buttonSize: 19,\n leftOffset: 9,\n contentGap: 9,\n iconSize: 15,\n },\n lg: {\n buttonSize: 20,\n leftOffset: 10,\n contentGap: 10,\n iconSize: 16,\n },\n};\n\nconst getPasswordToggleMetrics = (size: ControlSize): PasswordToggleMetrics =>\n PASSWORD_TOGGLE_METRICS_BY_SIZE[size];\n\nconst LOGIN_VALIDATION_ERROR = 'Spaces are not allowed.';\nconst EMAIL_VALIDATION_ERROR = 'Enter a valid email address.';\nconst FULLNAME_VALIDATION_ERROR =\n 'Only letters, spaces, and periods are allowed.';\nconst EMAIL_VALUE_PATTERN = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nconst SPACE_PATTERN = /\\s/;\nconst FULLNAME_INVALID_PATTERN = /[^\\p{L}\\s.]/u;\n\nconst isRenderableNode = (node: ReactNode): boolean =>\n node !== null && node !== undefined && node !== false;\n\nconst getInputValidationError = (\n type: string,\n value: string,\n): string | undefined => {\n if (!value) {\n return undefined;\n }\n\n if (type === 'login' || type === 'username') {\n return SPACE_PATTERN.test(value) ? LOGIN_VALIDATION_ERROR : undefined;\n }\n\n if (type === 'email') {\n return EMAIL_VALUE_PATTERN.test(value) ? undefined : EMAIL_VALIDATION_ERROR;\n }\n\n if (type === 'fullName') {\n return FULLNAME_INVALID_PATTERN.test(value)\n ? FULLNAME_VALIDATION_ERROR\n : undefined;\n }\n\n return undefined;\n};\n\nfunction EmailIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d={\n 'M3.75 6.25A1.875 1.875 0 0 1 5.625 4.375h8.75A1.875 1.875 0 0 1 16.25 6.25v7.5' +\n 'a1.875 1.875 0 0 1-1.875 1.875h-8.75A1.875 1.875 0 0 1 3.75 13.75v-7.5Z'\n }\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.375 6.25 10 10.625l5.625-4.375\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction LoginIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle cx=\"10\" cy=\"6.25\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\n <path\n d=\"M4.75 16a5.25 5.25 0 0 1 10.5 0\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nfunction UsernameIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction FullNameIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction CalendarIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <rect\n width=\"18\"\n height=\"18\"\n x=\"3\"\n y=\"4\"\n rx=\"2\"\n ry=\"2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"16\"\n x2=\"16\"\n y1=\"2\"\n y2=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"8\"\n x2=\"8\"\n y1=\"2\"\n y2=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"3\"\n x2=\"21\"\n y1=\"10\"\n y2=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction FileIcon({ size, selected }: { size: number; selected: boolean }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n {selected ? (\n <>\n <path\n d=\"M5.5 6.25h9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M7.25 6.25V5.25A1.5 1.5 0 0 1 8.75 3.75h2.5a1.5 1.5 0 0 1 1.5 1.5v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.75 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M10 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M12.25 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M6.75 6.25l.5 8a1.5 1.5 0 0 0 1.497 1.406h2.506A1.5 1.5 0 0 0 12.75 14.25l.5-8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </>\n ) : (\n <>\n <path\n d=\"M6.25 2.5h5.652l4.348 4.348V15A2.5 2.5 0 0 1 13.75 17.5h-7.5A2.5 2.5 0 0 1 3.75 15V5A2.5 2.5 0 0 1 6.25 2.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.875 2.75V6.25H15.375\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.5 10h5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M7.5 13h5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </>\n )}\n </svg>\n );\n}\n\nfunction PasswordVisibleIcon({\n size,\n playing = false,\n}: {\n size: number;\n playing?: boolean;\n}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={\n playing\n ? {\n animation: `lf-lock-hint-blink ${LOCK_HINT_DURATION_MS}ms ease-in-out`,\n }\n : undefined\n }\n >\n {playing ? <style>{LOCK_HINT_STYLE}</style> : null}\n <path\n d=\"M6.75 8V6.75A3.25 3.25 0 0 1 12.262 4.415\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d={\n 'M6 8.25h8a1.75 1.75 0 0 1 1.75 1.75V14' +\n 'A1.75 1.75 0 0 1 14 15.75H6A1.75 1.75 0 0 1 4.25 14V10A1.75 1.75 0 0 1 6 8.25Z'\n }\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 11.25v1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\n// One-shot \"this is clickable\" cue: the padlock blinks while its shackle\n// alternates open/closed a couple of times, then settles back to the locked state.\nconst LOCK_HINT_DURATION_MS = 1500;\nconst LOCK_HINT_TOGGLE_INTERVAL_MS = 240;\nconst LOCK_HINT_STYLE = `\n@keyframes lf-lock-hint-blink {\n 0%, 100% { opacity: 1; }\n 18%, 58% { opacity: 0.4; }\n 38%, 78% { opacity: 1; }\n}\n@keyframes lf-lock-hint-shackle {\n 0%, 38%, 78%, 100% { transform: translateY(0) rotate(0deg); }\n 18%, 58% { transform: translateY(-1px) rotate(-42deg); }\n}\n`;\n\nfunction PasswordHiddenIcon({\n size,\n playing = false,\n}: {\n size: number;\n playing?: boolean;\n}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={\n playing\n ? {\n animation: `lf-lock-hint-blink ${LOCK_HINT_DURATION_MS}ms ease-in-out`,\n }\n : undefined\n }\n >\n {playing ? <style>{LOCK_HINT_STYLE}</style> : null}\n <path\n d=\"M6.75 8V6.75A3.25 3.25 0 1 1 13.25 6.75V8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={\n playing\n ? {\n transformBox: 'fill-box',\n transformOrigin: '100% 100%',\n animation: `lf-lock-hint-shackle ${LOCK_HINT_DURATION_MS}ms ease-in-out`,\n }\n : undefined\n }\n />\n <path\n d={\n 'M6 8.25h8a1.75 1.75 0 0 1 1.75 1.75V14' +\n 'A1.75 1.75 0 0 1 14 15.75H6A1.75 1.75 0 0 1 4.25 14V10A1.75 1.75 0 0 1 6 8.25Z'\n }\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 11.25v1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nexport function ControlFrame({\n label,\n hint,\n error,\n htmlFor,\n required = false,\n useLabelWrapper = true,\n children,\n style,\n alignLabel = 'center',\n hasValue = false,\n labelOffset,\n floatingPlaceholder,\n size = 'md',\n floatingPlaceholderVerticalShift = CONTROL_TEXT_VERTICAL_SHIFT,\n}: ControlFrameProps) {\n useUiKitTheme();\n\n const isTextarea = alignLabel === 'top';\n const controlMetrics = getControlMetrics(size);\n\n const floatingElement = floatingPlaceholder ? (\n <span\n className={cx(\n 'ui-kit-floating-placeholder absolute px-1.5 pointer-events-none',\n 'transition-all duration-150 origin-[left_center] max-w-[calc(100%-24px)]',\n 'overflow-hidden text-ellipsis whitespace-nowrap rounded-full',\n 'left-[var(--label-left-base,12px)]',\n 'rounded-tl-[16px] rounded-tr-[16px]',\n hasValue ? 'ui-kit-floating-placeholder--active' : '',\n 'group-has-[:disabled]:opacity-70',\n )}\n style={\n {\n zIndex: 10,\n '--label-left-base':\n labelOffset !== undefined ? `${labelOffset}px` : '12px',\n '--floating-label-font-size': `${controlMetrics.fontSize}px`,\n '--floating-label-line-height': controlMetrics.lineHeight,\n '--floating-label-resting-top': isTextarea\n ? '14px'\n : `calc(50% - ${floatingPlaceholderVerticalShift}px)`,\n '--floating-label-resting-transform': isTextarea\n ? 'translateY(0)'\n : 'translateY(-50%)',\n '--floating-label-active-font-size': '13px',\n '--floating-label-active-line-height': '16px',\n } as CSSProperties\n }\n aria-hidden=\"true\"\n >\n {floatingPlaceholder}\n </span>\n ) : null;\n\n const innerContent = (\n <div className=\"relative w-full flex group\">\n {children}\n {floatingElement}\n </div>\n );\n\n const hintsContent =\n hint || error ? (\n <div className=\"flex flex-col gap-1 mt-0\" style={{ paddingLeft: controlMetrics.paddingX }}>\n {hint && !error ? (\n <span className=\"text-[13px] leading-[1.45] text-[var(--theme-textLight)]\">\n {hint}\n </span>\n ) : null}\n {error ? (\n <span className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-negative)]\">\n {error}\n </span>\n ) : null}\n </div>\n ) : null;\n\n if (label && useLabelWrapper) {\n return (\n <label\n htmlFor={htmlFor}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'flex w-full cursor-pointer flex-col gap-1',\n )}\n style={style}\n >\n <span className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-text)]\">\n {label}\n {required ? (\n <span className=\"ml-1 text-[var(--theme-negative)]\">*</span>\n ) : null}\n </span>\n {innerContent}\n {hintsContent}\n </label>\n );\n }\n\n return (\n <div\n className={cx(UI_KIT_ROOT_CLASSNAME, 'flex w-full flex-col gap-1')}\n style={style}\n >\n {label && !useLabelWrapper ? (\n <label\n htmlFor={htmlFor}\n className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-text)]\"\n >\n {label}\n {required ? (\n <span className=\"ml-1 text-[var(--theme-negative)]\">*</span>\n ) : null}\n </label>\n ) : null}\n {innerContent}\n {hintsContent}\n </div>\n );\n}\n\nexport function Input({\n label,\n hint,\n error,\n size = 'md',\n className,\n showPasswordToggle = true,\n fileButtonLabel,\n icon,\n id,\n disabled,\n placeholder,\n onChange,\n style,\n type = 'text',\n disableFloatingLabel,\n ...rest\n}: InputProps) {\n const controlMetrics = getControlMetrics(size);\n const passwordToggleMetrics = getPasswordToggleMetrics(size);\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const [isPasswordVisible, setIsPasswordVisible] = useState(false);\n const [isLockHinting, setIsLockHinting] = useState(false);\n const [isLockHintOpen, setIsLockHintOpen] = useState(false);\n const lockHintTimerRef = useRef<number | null>(null);\n const lockHintIntervalRef = useRef<number | null>(null);\n const [selectedFileNames, setSelectedFileNames] = useState<string[]>([]);\n const [validationError, setValidationError] = useState<string | undefined>();\n const isPasswordField = type === 'password';\n const isEmailField = type === 'email';\n const isLoginField = type === 'login';\n const isUsernameField = type === 'username';\n const isFullNameField = type === 'fullName';\n const isFileField = type === 'file';\n const isDateField = type === 'date' || type === 'datetime-local';\n const canTogglePasswordVisibility = isPasswordField && showPasswordToggle;\n const resolvedType =\n isLoginField || isUsernameField\n ? 'text'\n : canTogglePasswordVisibility\n ? isPasswordVisible\n ? 'text'\n : 'password'\n : type;\n\n // Clear picked file names when the field stops being a file input. Adjusting\n // state during render is React's recommended alternative to an effect.\n if (!isFileField && selectedFileNames.length > 0) {\n setSelectedFileNames([]);\n }\n\n // Keep the validation error in sync with a CONTROLLED value (and clear it for\n // field types we don't validate). For uncontrolled inputs `rest.value` isn't a\n // string, so the key stays null and the onChange handler drives validation.\n const isValidatableField =\n isEmailField || isLoginField || isUsernameField || isFullNameField;\n const validationKey =\n isValidatableField && typeof rest.value === 'string'\n ? `${type}\\u0000${rest.value}`\n : null;\n const [prevValidationKey, setPrevValidationKey] = useState<string | null>(\n null,\n );\n if (validationKey !== prevValidationKey) {\n setPrevValidationKey(validationKey);\n setValidationError(\n validationKey === null\n ? undefined\n : getInputValidationError(type, rest.value as string),\n );\n }\n\n const clearLockHintTimers = () => {\n if (lockHintTimerRef.current !== null) {\n window.clearTimeout(lockHintTimerRef.current);\n lockHintTimerRef.current = null;\n }\n\n if (lockHintIntervalRef.current !== null) {\n window.clearInterval(lockHintIntervalRef.current);\n lockHintIntervalRef.current = null;\n }\n };\n\n const stopLockHint = () => {\n clearLockHintTimers();\n\n setIsLockHinting(false);\n setIsLockHintOpen(false);\n };\n\n useEffect(() => clearLockHintTimers, []);\n\n const triggerLockHint = () => {\n if (disabled || isPasswordVisible || lockHintTimerRef.current !== null) {\n return;\n }\n\n if (\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n ) {\n return;\n }\n\n setIsLockHinting(true);\n setIsLockHintOpen(true);\n lockHintIntervalRef.current = window.setInterval(() => {\n setIsLockHintOpen((currentValue) => !currentValue);\n }, LOCK_HINT_TOGGLE_INTERVAL_MS);\n lockHintTimerRef.current = window.setTimeout(() => {\n stopLockHint();\n }, LOCK_HINT_DURATION_MS);\n };\n\n const hasFileButtonLabel =\n typeof fileButtonLabel === 'string'\n ? fileButtonLabel.trim().length > 0\n : fileButtonLabel != null;\n const hasSelectedFiles = selectedFileNames.length > 0;\n const showUploadLabel = hasFileButtonLabel && !hasSelectedFiles;\n const passwordLockIconSize = passwordToggleMetrics.iconSize + 2;\n const leadingContentGap = Math.max(\n 0,\n Math.round(controlMetrics.paddingX / 3),\n );\n const leadingIconInset = getControlLeadingIconInset(size);\n const controlTextNudgeStyle = getControlTextNudgeStyle();\n const hasExternalError =\n error !== undefined && error !== null && error !== '';\n const resolvedError = hasExternalError ? error : validationError;\n const hasResolvedError =\n resolvedError !== undefined &&\n resolvedError !== null &&\n resolvedError !== '';\n const fileSelectionText =\n selectedFileNames.length === 0\n ? (placeholder ?? '')\n : selectedFileNames.length === 1\n ? selectedFileNames[0]\n : `${selectedFileNames.length} files selected`;\n const fileIconSize = Math.max(controlMetrics.fontSize + 3, 16);\n const fileTriggerWidth = getControlLeadingAdornmentWidth(size, fileIconSize);\n const leadingAdornmentWidth = getControlLeadingAdornmentWidth(\n size,\n fileIconSize,\n );\n const passwordAdornmentWidth = getControlLeadingAdornmentWidth(\n size,\n passwordLockIconSize,\n );\n const floatingPlaceholder =\n !disableFloatingLabel && placeholder !== undefined && placeholder !== ''\n ? placeholder\n : undefined;\n const resolvedPlaceholder = placeholder ?? ' ';\n const isStaticPlaceholderVisible =\n disableFloatingLabel &&\n (rest.value === '' || (rest.value == null && rest.defaultValue == null));\n\n const defaultLeadingIcon = isEmailField ? (\n <EmailIcon size={fileIconSize} />\n ) : isUsernameField ? (\n <UsernameIcon size={fileIconSize} />\n ) : isFullNameField ? (\n <FullNameIcon size={fileIconSize} />\n ) : isLoginField ? (\n <LoginIcon size={fileIconSize} />\n ) : isDateField ? (\n <CalendarIcon size={fileIconSize} />\n ) : null;\n const resolvedLeadingIcon = icon ?? defaultLeadingIcon;\n const hasLeadingIcon = isRenderableNode(resolvedLeadingIcon);\n const hasCustomLeadingIcon = isRenderableNode(icon) && hasLeadingIcon;\n const resolvedFileIcon = icon ?? (\n <FileIcon size={fileIconSize} selected={hasSelectedFiles} />\n );\n const resolvedPasswordIcon =\n icon ??\n (isPasswordVisible || (isLockHinting && isLockHintOpen) ? (\n <PasswordVisibleIcon size={passwordLockIconSize} playing={isLockHinting} />\n ) : (\n <PasswordHiddenIcon size={passwordLockIconSize} playing={isLockHinting} />\n ));\n\n const placeholderClass = floatingPlaceholder\n ? 'placeholder-transparent'\n : 'placeholder-[var(--theme-textLight)]';\n\n let resolvedLabelOffset: number | undefined = undefined;\n if (isFileField) {\n resolvedLabelOffset = fileTriggerWidth;\n } else if (canTogglePasswordVisibility) {\n resolvedLabelOffset = passwordAdornmentWidth;\n } else if (hasLeadingIcon) {\n resolvedLabelOffset = leadingAdornmentWidth;\n }\n\n const datePseudos = isDateField\n ? cx(\n '[&::-webkit-calendar-picker-indicator]:absolute [&::-webkit-calendar-picker-indicator]:w-full',\n '[&::-webkit-calendar-picker-indicator]:h-full [&::-webkit-calendar-picker-indicator]:opacity-0',\n '[&::-webkit-calendar-picker-indicator]:cursor-pointer [&::-webkit-calendar-picker-indicator]:left-0',\n '[&::-webkit-calendar-picker-indicator]:top-0 [&::-webkit-datetime-edit]:h-full',\n '[&::-webkit-datetime-edit]:flex [&::-webkit-datetime-edit]:items-center'\n )\n : '';\n\n const fieldBaseClassName = cx(\n UI_KIT_ROOT_CLASSNAME,\n 'peer w-full box-border rounded-2xl border border-solid bg-[var(--theme-background)]',\n 'text-[var(--theme-text)] outline-none',\n 'duration-150 transition-[border-color]',\n placeholderClass,\n hasResolvedError ? 'border-[var(--theme-negative)]' : 'border-transparent',\n disabled ? 'cursor-not-allowed opacity-70' : 'cursor-text',\n datePseudos,\n );\n\n const adornedFieldClassName = cx(\n UI_KIT_ROOT_CLASSNAME,\n 'box-border flex w-full items-center gap-0 overflow-hidden rounded-2xl',\n 'border border-solid bg-[var(--theme-background)] text-[var(--theme-text)] text-left',\n hasResolvedError ? 'border-[var(--theme-negative)]' : 'border-transparent',\n 'duration-150 transition-[border-color]',\n disabled ? 'opacity-70' : null,\n );\n\n const adornedInputClassName = cx(\n 'peer h-full min-w-0 flex-1 border-0 bg-transparent text-[var(--theme-text)] outline-none',\n placeholderClass,\n disabled ? 'cursor-not-allowed' : 'cursor-text',\n datePseudos,\n );\n\n const adornmentColorClassName = hasResolvedError\n ? 'text-[var(--theme-negative)]'\n : 'text-[var(--theme-textLight)]';\n\n const handleValidatedInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n if ((isLoginField || isUsernameField) && event.target.value.includes(' ')) {\n event.target.value = event.target.value.replace(/\\s/g, '');\n }\n\n if (isFullNameField && FULLNAME_INVALID_PATTERN.test(event.target.value)) {\n event.target.value = event.target.value.replace(\n new RegExp(FULLNAME_INVALID_PATTERN.source, 'gu'),\n '',\n );\n }\n\n if (isEmailField || isLoginField || isUsernameField || isFullNameField) {\n setValidationError(getInputValidationError(type, event.target.value));\n }\n\n onChange?.(event);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if ((isLoginField || isUsernameField) && event.key === ' ') {\n event.preventDefault();\n }\n\n if (\n isFullNameField &&\n event.key.length === 1 &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n if (!/^[\\p{L}\\s.]$/u.test(event.key)) {\n event.preventDefault();\n }\n }\n rest.onKeyDown?.(event);\n };\n\n const openFilePicker = () => {\n if (disabled) {\n return;\n }\n\n fileInputRef.current?.click();\n };\n\n const clearSelectedFiles = () => {\n if (disabled || !fileInputRef.current) {\n return;\n }\n\n fileInputRef.current.value = '';\n fileInputRef.current.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n const input = isFileField ? (\n <>\n <input\n {...rest}\n ref={fileInputRef}\n id={inputId}\n type=\"file\"\n disabled={disabled}\n aria-hidden=\"true\"\n tabIndex={-1}\n onChange={(event) => {\n setSelectedFileNames(\n Array.from(event.target.files ?? [], (file) => file.name),\n );\n onChange?.(event);\n }}\n className=\"hidden\"\n />\n <div\n className={cx(\n adornedFieldClassName,\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n className,\n )}\n style={{ ...style, ...getFieldSizeStyles(size) }}\n >\n <button\n type=\"button\"\n disabled={disabled}\n aria-controls={inputId}\n aria-label={\n hasSelectedFiles\n ? rest.multiple\n ? 'Remove selected files'\n : 'Remove selected file'\n : rest.multiple\n ? 'Select files'\n : 'Select file'\n }\n onClick={hasSelectedFiles ? clearSelectedFiles : openFilePicker}\n className={cx(\n 'inline-flex shrink-0 self-stretch whitespace-nowrap border-0 bg-transparent',\n 'items-center text-[var(--theme-text)] appearance-none',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n showUploadLabel ? 'justify-start font-bold' : 'justify-center',\n )}\n style={{\n gap: showUploadLabel ? leadingContentGap : 0,\n width: showUploadLabel ? undefined : fileTriggerWidth,\n boxSizing: 'border-box',\n justifyContent: 'flex-start',\n paddingTop: 0,\n paddingRight: showUploadLabel ? controlMetrics.buttonPaddingX : 0,\n paddingBottom: 0,\n paddingLeft: leadingIconInset,\n }}\n >\n <span\n className={cx(\n 'inline-flex shrink-0 items-center justify-center',\n adornmentColorClassName,\n )}\n aria-hidden=\"true\"\n >\n {resolvedFileIcon}\n </span>\n {showUploadLabel ? (\n <span>{fileButtonLabel}</span>\n ) : null}\n </button>\n <button\n type=\"button\"\n disabled={disabled}\n aria-controls={inputId}\n aria-label={rest.multiple ? 'Select files' : 'Select file'}\n onClick={openFilePicker}\n className={cx(\n 'flex h-full min-w-0 flex-1 items-center border-0 bg-transparent p-0',\n 'text-left appearance-none',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n >\n {fileSelectionText ? (\n <span\n className={cx(\n 'flex h-full min-w-0 flex-1 items-center overflow-hidden text-ellipsis whitespace-nowrap',\n hasSelectedFiles\n ? 'text-[var(--theme-text)]'\n : 'text-[var(--theme-textLight)]',\n )}\n style={{\n padding: `0 ${controlMetrics.paddingX}px 0 ${leadingContentGap}px`,\n ...controlTextNudgeStyle,\n ...getFieldSizeStyles(size),\n }}\n >\n {fileSelectionText}\n </span>\n ) : null}\n </button>\n </div>\n </>\n ) : canTogglePasswordVisibility ? (\n <div\n className={cx(adornedFieldClassName, className)}\n style={{ ...style, ...getFieldSizeStyles(size) }}\n >\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={isPasswordVisible ? 'Hide password' : 'Show password'}\n aria-pressed={isPasswordVisible}\n disabled={disabled}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n stopLockHint();\n setIsPasswordVisible((currentValue) => !currentValue);\n }}\n className={cx(\n 'inline-flex shrink-0 self-stretch items-center justify-center border-0',\n 'bg-transparent p-0 appearance-none',\n adornmentColorClassName,\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n style={{\n width: passwordAdornmentWidth,\n boxSizing: 'border-box',\n justifyContent: 'flex-start',\n paddingLeft: leadingIconInset,\n }}\n >\n {resolvedPasswordIcon}\n </button>\n <input\n {...rest}\n id={inputId}\n placeholder={resolvedPlaceholder}\n type={resolvedType}\n disabled={disabled}\n onChange={handleValidatedInputChange}\n onKeyDown={handleKeyDown}\n onFocus={(event) => {\n triggerLockHint();\n rest.onFocus?.(event);\n }}\n className={cx(adornedInputClassName, className)}\n aria-invalid={hasResolvedError}\n style={{\n padding: getTextInputPadding(size, {\n leadingPadding: leadingContentGap,\n ...(disableFloatingLabel\n ? {\n topPadding: controlMetrics.paddingY + 1,\n bottomPadding: Math.max(0, controlMetrics.paddingY - 1),\n }\n : {}),\n }),\n }}\n />\n </div>\n ) : hasLeadingIcon ? (\n <div\n className={cx(adornedFieldClassName, className)}\n style={{ ...style, ...getFieldSizeStyles(size) }}\n >\n <span\n className={cx(\n 'inline-flex shrink-0 self-stretch items-center justify-center bg-transparent',\n adornmentColorClassName,\n )}\n style={{\n width: leadingAdornmentWidth,\n boxSizing: 'border-box',\n justifyContent: 'flex-start',\n paddingLeft: leadingIconInset,\n }}\n aria-hidden=\"true\"\n >\n {resolvedLeadingIcon}\n </span>\n <input\n {...rest}\n id={inputId}\n placeholder={resolvedPlaceholder}\n type={resolvedType}\n disabled={disabled}\n onChange={handleValidatedInputChange}\n onKeyDown={handleKeyDown}\n className={cx(adornedInputClassName, className)}\n aria-invalid={hasResolvedError}\n style={{\n padding: getTextInputPadding(size, {\n leadingPadding: leadingContentGap,\n // O texto da data renderiza mais alto que um input de texto; um\n // bottom menor (4px no md) empurra o texto de volta ao centro.\n ...(isDateField\n ? { bottomPadding: controlMetrics.paddingY - 3 }\n : {}),\n ...(!isDateField && isStaticPlaceholderVisible\n ? {\n topPadding: Math.max(0, controlMetrics.paddingY - 1),\n bottomPadding: controlMetrics.paddingY + 0,\n }\n : {}),\n ...(!isDateField && !isStaticPlaceholderVisible && hasCustomLeadingIcon\n ? {\n topPadding: controlMetrics.paddingY,\n bottomPadding: controlMetrics.paddingY,\n }\n : {}),\n }),\n }}\n />\n </div>\n ) : (\n <input\n {...rest}\n id={inputId}\n placeholder={resolvedPlaceholder}\n type={resolvedType}\n disabled={disabled}\n onChange={handleValidatedInputChange}\n onKeyDown={handleKeyDown}\n aria-invalid={hasResolvedError}\n className={cx(fieldBaseClassName, className)}\n style={{\n padding: getTextInputPadding(size),\n ...getFieldSizeStyles(size),\n ...style,\n }}\n />\n );\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={resolvedError}\n htmlFor={isFileField ? undefined : inputId}\n required={rest.required}\n useLabelWrapper={!isFileField}\n size={size}\n hasValue={\n rest.value !== undefined && rest.value !== '' && rest.value !== null\n }\n labelOffset={resolvedLabelOffset}\n floatingPlaceholderVerticalShift={\n isFileField || canTogglePasswordVisibility || hasLeadingIcon ? 0 : undefined\n }\n floatingPlaceholder={floatingPlaceholder}\n >\n {input}\n </ControlFrame>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Input, type InputProps } from './Input';\n\nexport type DatePickerMode = 'date' | 'datetime';\nexport type DatePickerValue = string | Date | null;\nexport type DatePickerChangeReason = 'input' | 'picker' | 'clear';\n\nexport interface DatePickerChangeContext {\n reason: DatePickerChangeReason;\n date: Date | null;\n nativeValue: string;\n displayValue: string;\n}\n\nexport interface DatePickerProps\n extends Omit<InputProps, 'type' | 'value' | 'defaultValue' | 'onChange' | 'min' | 'max' | 'step'> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n value?: DatePickerValue;\n defaultValue?: DatePickerValue;\n onChange?: (value: string | null, context: DatePickerChangeContext) => void;\n mode?: DatePickerMode;\n format?: string;\n allowPastDates?: boolean;\n allowFutureDates?: boolean;\n minDate?: DatePickerValue;\n maxDate?: DatePickerValue;\n minuteStep?: number;\n clearable?: boolean;\n showPickerButton?: boolean;\n isDateUnavailable?: (date: Date) => boolean;\n invalidDateMessage?: ReactNode;\n unavailableDateMessage?: ReactNode;\n pickerButtonLabel?: string;\n clearButtonLabel?: string;\n}\n\nconst pad = (value: number) => String(value).padStart(2, '0');\n\nfunction normalizeDateValue(value: DatePickerValue | undefined, mode: DatePickerMode): string | undefined {\n if (value == null || value === '') {\n return undefined;\n }\n\n if (value instanceof Date) {\n const datePart = `${value.getFullYear()}-${pad(value.getMonth() + 1)}-${pad(value.getDate())}`;\n\n if (mode === 'datetime') {\n return `${datePart}T${pad(value.getHours())}:${pad(value.getMinutes())}`;\n }\n\n return datePart;\n }\n\n return value;\n}\n\nfunction parseNativeDateValue(value: string, mode: DatePickerMode): Date | null {\n if (!value) {\n return null;\n }\n\n const parsedDate = mode === 'datetime' ? new Date(value) : new Date(`${value}T00:00:00`);\n return Number.isNaN(parsedDate.getTime()) ? null : parsedDate;\n}\n\nexport function DatePicker({\n value,\n defaultValue,\n onChange,\n mode = 'date',\n minDate,\n maxDate,\n minuteStep = 5,\n placeholder,\n ...props\n}: DatePickerProps) {\n const nativeType = mode === 'datetime' ? 'datetime-local' : 'date';\n const normalizedValue = normalizeDateValue(value, mode);\n const normalizedDefaultValue = normalizeDateValue(defaultValue, mode);\n\n return (\n <Input\n {...props}\n type={nativeType}\n value={normalizedValue}\n defaultValue={normalizedDefaultValue}\n min={normalizeDateValue(minDate, mode)}\n max={normalizeDateValue(maxDate, mode)}\n step={mode === 'datetime' ? Math.max(1, minuteStep) * 60 : undefined}\n placeholder={placeholder ?? (mode === 'datetime' ? 'Data e hora' : 'Data')}\n onChange={(event) => {\n const nextValue = event.currentTarget.value || null;\n\n onChange?.(nextValue, {\n reason: 'input',\n date: nextValue ? parseNativeDateValue(nextValue, mode) : null,\n nativeValue: nextValue ?? '',\n displayValue: nextValue ?? '',\n });\n }}\n />\n );\n}\n","import type { CSSProperties, HTMLAttributes } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from '../foundation';\n\nexport type SeparatorOrientation = 'vertical' | 'horizontal';\n\nexport interface SeparatorProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'color'> {\n orientation?: SeparatorOrientation;\n color?: CSSProperties['backgroundColor'];\n size?: CSSProperties['width'];\n}\n\nexport function Separator({\n orientation = 'vertical',\n color,\n size = '100%',\n className,\n style,\n ...rest\n}: SeparatorProps) {\n useUiKitTheme();\n const usesVerticalStretch = orientation === 'vertical' && size === '100%';\n\n const separatorStyle: CSSProperties = {\n backgroundColor: color,\n width: orientation === 'vertical' ? 1 : size,\n height: orientation === 'vertical' ? (usesVerticalStretch ? 'auto' : size) : 3,\n ...style,\n };\n\n return (\n <div\n {...rest}\n role=\"separator\"\n aria-orientation={orientation}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'shrink-0 self-stretch bg-[var(--theme-background)]',\n className,\n )}\n style={separatorStyle}\n />\n );\n}","import {\n useEffect,\n useId,\n useRef,\n useState,\n useSyncExternalStore,\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type UIEventHandler,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n cx,\n DISABLED_FIELD_OPACITY,\n getFieldSizeStyles,\n getSelectControlPadding,\n getSelectIndicatorOffset,\n getSelectTextNudgeStyle,\n} from '../../foundation';\nimport { CheckboxIndicator } from '../../components/Checkbox';\nimport { ControlFrame, Input } from '../../components/Input';\nimport { Separator } from '../../components/Separator';\nimport type { MenuPlacement, SelectBaseProps } from './types';\nimport {\n filterSelectGroups,\n getTextContent,\n normalizeSelectValues,\n} from './utils';\n\nconst MENU_OFFSET = 8;\nconst MENU_MAX_HEIGHT = 280;\nconst emptySubscribe = () => () => {};\n\nfunction SearchIcon({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"m21 21-4.35-4.35M10.5 18a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nconst OPTION_PADDING_CLASSNAMES: Record<\n NonNullable<SelectBaseProps['size']>,\n string\n> = {\n sm: 'px-[11px] py-2',\n md: 'px-3 py-[9px]',\n lg: 'px-[13px] py-[10px]',\n};\n\nexport function SelectBase({\n label,\n hint,\n error,\n placeholder,\n size = 'md',\n id,\n disabled,\n style,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClick,\n autoFocus,\n className,\n isMulti,\n isFilterable,\n multiple,\n groups,\n nativeOptions,\n emptyMessage = 'No options found.',\n isLoading = false,\n loadingMessage = 'Loading options...',\n searchPlaceholder = 'Search options',\n searchQuery,\n onSearchQueryChange,\n allowOpenWithoutOptions = false,\n filterOptions = true,\n clearSearchOnClose = true,\n preserveUnknownValues = false,\n onListboxScroll,\n menuFooter,\n ...rest\n}: SelectBaseProps) {\n const generatedId = useId().replace(/:/g, '');\n const resolvedId = id ?? `ss-select-${generatedId}`;\n const isMultiSelect = Boolean(isMulti || multiple);\n const hasFilter = Boolean(isFilterable);\n const flatOptions = groups.flatMap((group) => group.options);\n const enabledOptions = flatOptions.filter((option) => !option.disabled);\n const isControlled = value !== undefined;\n const fallbackValues =\n defaultValue !== undefined\n ? normalizeSelectValues(defaultValue)\n : isMultiSelect\n ? []\n : placeholder != null\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n const [uncontrolledValues, setUncontrolledValues] = useState(fallbackValues);\n const [isOpen, setIsOpen] = useState(false);\n const [uncontrolledSearchQuery, setUncontrolledSearchQuery] = useState('');\n const [menuPlacement, setMenuPlacement] = useState<MenuPlacement>('bottom');\n const [isPlacementResolved, setIsPlacementResolved] = useState(false);\n const [highlightedValue, setHighlightedValue] = useState(\n fallbackValues[0] ?? enabledOptions[0]?.value ?? '',\n );\n const isMounted = useSyncExternalStore(\n emptySubscribe,\n () => true,\n () => false,\n );\n const [menuRect, setMenuRect] = useState({\n top: 0,\n bottom: 0,\n left: 0,\n width: 0,\n });\n const shellRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const hiddenSelectRef = useRef<HTMLSelectElement>(null);\n const highlightSyncKeyRef = useRef('');\n const currentSearchQuery =\n searchQuery !== undefined ? searchQuery : uncontrolledSearchQuery;\n const selectedValues = isControlled\n ? normalizeSelectValues(value)\n : uncontrolledValues;\n const selectedValue = selectedValues[0] ?? '';\n const optionLookup = new Map(\n flatOptions.map((option) => [option.value, option]),\n );\n const selectedOption = optionLookup.get(selectedValue) ?? null;\n const placeholderTextColor = 'var(--theme-textLight)';\n const hasSelection = isMultiSelect\n ? selectedValues.length > 0\n : selectedValue !== '';\n const displayLabel = hasSelection\n ? isMultiSelect\n ? selectedValues\n .map((currentValue) => {\n const option = optionLookup.get(currentValue);\n return option\n ? getTextContent(option.label).trim() || option.value\n : currentValue;\n })\n .join(', ')\n : (selectedOption?.label ?? selectedValue)\n : null;\n const displayContent = displayLabel ?? placeholder ?? '\\u00A0';\n const visibleGroups =\n hasFilter && filterOptions\n ? filterSelectGroups(groups, currentSearchQuery)\n : groups;\n const visibleOptions = visibleGroups.flatMap((group) => group.options);\n const visibleEnabledOptions = visibleOptions.filter(\n (option) => !option.disabled,\n );\n const visibleEnabledValues = visibleEnabledOptions.map(\n (option) => option.value,\n );\n const selectedValuesKey = selectedValues.join('\\u0000');\n const visibleEnabledValuesKey = visibleEnabledValues.join('\\u0000');\n const indicatorOffset = getSelectIndicatorOffset(size);\n const controlTextNudgeStyle = getSelectTextNudgeStyle();\n const listboxId = `${resolvedId}-listbox`;\n const searchInputId = `${resolvedId}-search`;\n const scrollbarThumbColor = 'var(--theme-secondary)';\n const scrollbarThumbHoverColor = 'var(--theme-textLight)';\n const highlightedOption =\n visibleOptions.find((option) => option.value === highlightedValue) ?? null;\n const canOpenMenu = allowOpenWithoutOptions || flatOptions.length > 0;\n const isTriggerDisabled = disabled || !canOpenMenu;\n const buttonPassthroughProps = Object.fromEntries(\n Object.entries(rest).filter(\n ([key]) => key.startsWith('aria-') || key.startsWith('data-'),\n ),\n );\n const floatingPlaceholder =\n typeof placeholder === 'string' && placeholder !== ''\n ? placeholder\n : undefined;\n\n const triggerClassName = cx(\n 'peer relative m-0 box-border flex w-full min-w-0 items-center justify-between gap-3',\n 'rounded-2xl border border-solid appearance-none',\n 'bg-[var(--theme-background)] outline-none',\n 'duration-150 text-left',\n error ? 'border-[var(--theme-negative)]' : 'border-transparent',\n !hasSelection && floatingPlaceholder\n ? 'text-transparent'\n : 'text-[var(--theme-text)]',\n isTriggerDisabled ? 'cursor-not-allowed' : 'cursor-pointer',\n );\n\n // When the option set changes and leaves uncontrolled values that no longer\n // exist, reconcile them during render. This is React's recommended\n // alternative to syncing via an effect; once reconciled the values are valid\n // so it does not run again.\n if (!isControlled && !preserveUnknownValues) {\n const invalidValues = uncontrolledValues.filter(\n (currentValue) =>\n !flatOptions.some((option) => option.value === currentValue),\n );\n\n if (invalidValues.length > 0) {\n const nextValues =\n defaultValue !== undefined\n ? normalizeSelectValues(defaultValue).filter((currentValue) =>\n flatOptions.some((option) => option.value === currentValue),\n )\n : isMultiSelect\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n\n setUncontrolledValues(nextValues);\n setHighlightedValue(nextValues[0] ?? enabledOptions[0]?.value ?? '');\n }\n }\n\n // Reset placement when the menu opens so it stays hidden until the rAF\n // measurement resolves it. Adjusting during render is React's recommended\n // alternative to resetting via an effect on close.\n const [wasOpenForPlacement, setWasOpenForPlacement] = useState(isOpen);\n if (isOpen !== wasOpenForPlacement) {\n setWasOpenForPlacement(isOpen);\n if (isOpen) {\n setMenuPlacement('bottom');\n setIsPlacementResolved(false);\n }\n }\n\n useEffect(() => {\n if (!isOpen) {\n highlightSyncKeyRef.current = '';\n return;\n }\n\n const nextHighlightSyncKey = `${selectedValuesKey}\\u0001${visibleEnabledValuesKey}`;\n\n if (highlightSyncKeyRef.current === nextHighlightSyncKey) {\n return;\n }\n\n highlightSyncKeyRef.current = nextHighlightSyncKey;\n\n const nextHighlightedValue =\n [...selectedValues]\n .reverse()\n .find((currentValue) => visibleEnabledValues.includes(currentValue)) ??\n visibleEnabledOptions[0]?.value ??\n '';\n setHighlightedValue(nextHighlightedValue);\n }, [\n isOpen,\n selectedValuesKey,\n visibleEnabledValuesKey,\n selectedValues,\n visibleEnabledOptions,\n visibleEnabledValues,\n ]);\n\n useEffect(() => {\n if (!isOpen || !hasFilter) {\n return;\n }\n\n searchInputRef.current?.focus();\n }, [hasFilter, isOpen]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const frameId = window.requestAnimationFrame(() => {\n const triggerRect = buttonRef.current?.getBoundingClientRect();\n const menuElement = menuRef.current;\n\n if (!triggerRect || !menuElement) {\n setMenuPlacement('bottom');\n setIsPlacementResolved(true);\n return;\n }\n\n const measuredMenuHeight = menuElement.getBoundingClientRect().height;\n const menuHeight = Math.min(\n measuredMenuHeight || menuElement.scrollHeight,\n MENU_MAX_HEIGHT,\n );\n const availableBelow =\n window.innerHeight - triggerRect.bottom - MENU_OFFSET;\n const availableAbove = triggerRect.top - MENU_OFFSET;\n const nextPlacement: MenuPlacement =\n availableBelow < menuHeight && availableAbove >= menuHeight\n ? 'top'\n : 'bottom';\n\n setMenuPlacement(nextPlacement);\n setMenuRect({\n top: triggerRect.bottom + MENU_OFFSET,\n bottom: window.innerHeight - triggerRect.top + MENU_OFFSET,\n left: triggerRect.left,\n width: triggerRect.width,\n });\n setIsPlacementResolved(true);\n });\n\n return () => {\n window.cancelAnimationFrame(frameId);\n };\n }, [isOpen, visibleOptions.length]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handleScroll = (event: Event) => {\n if (\n menuRef.current &&\n event.target instanceof Node &&\n menuRef.current.contains(event.target)\n ) {\n return;\n }\n setIsOpen(false);\n };\n\n window.addEventListener('scroll', handleScroll, {\n capture: true,\n passive: true,\n });\n window.addEventListener('resize', handleScroll, {\n capture: true,\n passive: true,\n });\n\n return () => {\n window.removeEventListener('scroll', handleScroll, { capture: true });\n window.removeEventListener('resize', handleScroll, { capture: true });\n };\n }, [isOpen]);\n\n // Clear the uncontrolled search when the menu closes (adjust during render).\n if (\n !isOpen &&\n clearSearchOnClose &&\n searchQuery === undefined &&\n uncontrolledSearchQuery !== ''\n ) {\n setUncontrolledSearchQuery('');\n }\n\n // Notify a controlled parent to clear its search query on close. This effect\n // only calls the parent callback (an external sync) — no local setState.\n useEffect(() => {\n if (isOpen || !clearSearchOnClose || currentSearchQuery === '') {\n return;\n }\n\n onSearchQueryChange?.('');\n }, [clearSearchOnClose, currentSearchQuery, isOpen, onSearchQueryChange]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n if (shellRef.current?.contains(event.target as Node)) {\n return;\n }\n\n if (menuRef.current?.contains(event.target as Node)) {\n return;\n }\n\n setIsOpen(false);\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n };\n }, [isOpen]);\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n const form = hiddenSelectRef.current?.form;\n\n if (!form) {\n return;\n }\n\n const handleReset = () => {\n queueMicrotask(() => {\n const nextValues =\n defaultValue !== undefined\n ? normalizeSelectValues(defaultValue)\n : isMultiSelect\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n\n setUncontrolledValues(nextValues);\n setHighlightedValue(nextValues[0] ?? enabledOptions[0]?.value ?? '');\n setIsOpen(false);\n });\n };\n\n form.addEventListener('reset', handleReset);\n\n return () => {\n form.removeEventListener('reset', handleReset);\n };\n }, [defaultValue, enabledOptions, isControlled, isMultiSelect]);\n\n const syncHiddenSelect = (nextValues: string[]) => {\n const selectElement = hiddenSelectRef.current;\n\n if (!selectElement) {\n return;\n }\n\n if (isMultiSelect) {\n Array.from(selectElement.options).forEach((optionElement) => {\n optionElement.selected = nextValues.includes(optionElement.value);\n });\n } else {\n const descriptor = Object.getOwnPropertyDescriptor(\n HTMLSelectElement.prototype,\n 'value',\n );\n\n if (descriptor?.set) {\n descriptor.set.call(selectElement, nextValues[0] ?? '');\n } else {\n selectElement.value = nextValues[0] ?? '';\n }\n }\n\n selectElement.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n const updateMultiSelection = (nextValues: string[]) => {\n if (!isMultiSelect || disabled) {\n return;\n }\n\n if (!isControlled) {\n setUncontrolledValues(nextValues);\n }\n\n setHighlightedValue(\n nextValues[nextValues.length - 1] ?? enabledOptions[0]?.value ?? '',\n );\n syncHiddenSelect(nextValues);\n };\n\n const toggleVisibleSelection = (checked: boolean) => {\n if (!isMultiSelect || disabled || visibleEnabledValues.length === 0) {\n return;\n }\n\n const nextValues = checked\n ? Array.from(new Set([...selectedValues, ...visibleEnabledValues]))\n : selectedValues.filter(\n (currentValue) => !visibleEnabledValues.includes(currentValue),\n );\n\n updateMultiSelection(nextValues);\n };\n\n const commitSelection = (nextValue: string) => {\n if (disabled) {\n if (!isMultiSelect) {\n setIsOpen(false);\n }\n\n return;\n }\n\n if (isMultiSelect) {\n const nextValues = selectedValues.includes(nextValue)\n ? selectedValues.filter((currentValue) => currentValue !== nextValue)\n : [...selectedValues, nextValue];\n\n updateMultiSelection(nextValues);\n return;\n }\n\n if (nextValue === selectedValue) {\n setIsOpen(false);\n return;\n }\n\n if (!isControlled) {\n setUncontrolledValues([nextValue]);\n }\n\n setHighlightedValue(nextValue);\n setIsOpen(false);\n syncHiddenSelect([nextValue]);\n buttonRef.current?.focus();\n };\n\n const handleHiddenSelectChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const nextValues = isMultiSelect\n ? Array.from(\n event.currentTarget.selectedOptions,\n (option) => option.value,\n )\n : [event.currentTarget.value];\n\n if (!isControlled) {\n setUncontrolledValues(nextValues);\n }\n\n setHighlightedValue(\n nextValues[nextValues.length - 1] ?? enabledOptions[0]?.value ?? '',\n );\n onChange?.(event);\n };\n\n const visibleSelectedCount = visibleEnabledValues.filter((currentValue) =>\n selectedValues.includes(currentValue),\n ).length;\n const hasSomeVisibleSelected =\n visibleSelectedCount > 0 &&\n visibleSelectedCount < visibleEnabledValues.length;\n const hasAllVisibleSelected =\n visibleEnabledValues.length > 0 &&\n visibleSelectedCount === visibleEnabledValues.length;\n const canToggleVisibleSelection =\n !disabled && visibleEnabledValues.length > 0;\n const bulkToggleControl = isMultiSelect ? (\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-label=\"Toggle all visible options\"\n aria-checked={\n hasAllVisibleSelected ? true : hasSomeVisibleSelected ? 'mixed' : false\n }\n disabled={!canToggleVisibleSelection}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={(event) => {\n event.stopPropagation();\n toggleVisibleSelection(!hasAllVisibleSelected);\n }}\n className={cx(\n 'm-0 inline-flex h-5 w-5 shrink-0 items-center justify-center border-0 bg-transparent p-0',\n canToggleVisibleSelection\n ? 'cursor-pointer opacity-100'\n : 'cursor-not-allowed opacity-45',\n )}\n >\n <CheckboxIndicator\n checked={hasAllVisibleSelected}\n indeterminate={hasSomeVisibleSelected}\n disabled={!canToggleVisibleSelection}\n />\n </button>\n ) : null;\n\n const moveHighlight = (direction: 1 | -1) => {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n const currentIndex = visibleEnabledOptions.findIndex(\n (option) => option.value === highlightedValue,\n );\n\n if (currentIndex === -1) {\n setHighlightedValue(\n direction === 1\n ? visibleEnabledOptions[0].value\n : visibleEnabledOptions[visibleEnabledOptions.length - 1].value,\n );\n return;\n }\n\n const nextIndex = Math.max(\n 0,\n Math.min(visibleEnabledOptions.length - 1, currentIndex + direction),\n );\n setHighlightedValue(visibleEnabledOptions[nextIndex].value);\n };\n\n const handleTriggerClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event as unknown as MouseEvent<HTMLSelectElement>);\n\n if (event.defaultPrevented || disabled || !canOpenMenu) {\n return;\n }\n\n setIsOpen((current) => !current);\n };\n\n const handleTriggerFocus = (event: FocusEvent<HTMLButtonElement>) => {\n onFocus?.(event as unknown as FocusEvent<HTMLSelectElement>);\n };\n\n const handleTriggerBlur = (event: FocusEvent<HTMLButtonElement>) => {\n const nextTarget = event.relatedTarget as Node | null;\n\n // The menu (including its search input) is portaled outside `shellRef`, so\n // focus moving into it is NOT a blur \"out\". Mirror the outside-pointerdown\n // handler and keep the menu open when focus lands in `menuRef` — otherwise\n // clicking the search box closes the dropdown before the user can type.\n if (\n !shellRef.current?.contains(nextTarget) &&\n !menuRef.current?.contains(nextTarget)\n ) {\n setIsOpen(false);\n }\n\n onBlur?.(event as unknown as FocusEvent<HTMLSelectElement>);\n };\n\n const handleTriggerKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event as unknown as KeyboardEvent<HTMLSelectElement>);\n\n if (event.defaultPrevented || disabled) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(\n selectedOption?.value ?? visibleEnabledOptions[0]?.value ?? '',\n );\n return;\n }\n\n moveHighlight(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(\n selectedOption?.value ??\n visibleEnabledOptions[visibleEnabledOptions.length - 1]?.value ??\n '',\n );\n return;\n }\n\n moveHighlight(-1);\n return;\n }\n\n if (event.key === 'Home' && isOpen) {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n event.preventDefault();\n setHighlightedValue(visibleEnabledOptions[0].value);\n return;\n }\n\n if (event.key === 'End' && isOpen) {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n event.preventDefault();\n setHighlightedValue(\n visibleEnabledOptions[visibleEnabledOptions.length - 1].value,\n );\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(\n selectedOption?.value ?? visibleEnabledOptions[0]?.value ?? '',\n );\n return;\n }\n\n if (highlightedOption && !highlightedOption.disabled) {\n commitSelection(highlightedOption.value);\n }\n\n return;\n }\n\n if (event.key === 'Escape' && isOpen) {\n event.preventDefault();\n setIsOpen(false);\n return;\n }\n\n if (event.key === 'Tab') {\n setIsOpen(false);\n }\n };\n\n const handleFilterKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n moveHighlight(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n moveHighlight(-1);\n return;\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n\n if (highlightedOption && !highlightedOption.disabled) {\n commitSelection(highlightedOption.value);\n }\n\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n setIsOpen(false);\n buttonRef.current?.focus();\n return;\n }\n\n if (event.key === 'Tab') {\n setIsOpen(false);\n }\n };\n\n const emptyState = isLoading ? loadingMessage : emptyMessage;\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={error}\n htmlFor={resolvedId}\n required={rest.required}\n size={size}\n hasValue={hasSelection || isOpen}\n floatingPlaceholder={floatingPlaceholder}\n >\n <div ref={shellRef} className=\"relative w-full\">\n <button\n {...buttonPassthroughProps}\n id={resolvedId}\n ref={buttonRef}\n type=\"button\"\n className={cx(triggerClassName, className)}\n title={rest.title}\n disabled={isTriggerDisabled}\n autoFocus={autoFocus}\n tabIndex={rest.tabIndex}\n role=\"combobox\"\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-invalid={error ? true : rest['aria-invalid']}\n aria-required={rest.required}\n onClick={handleTriggerClick}\n onFocus={handleTriggerFocus}\n onBlur={handleTriggerBlur}\n onKeyDown={handleTriggerKeyDown}\n style={{\n ...getFieldSizeStyles(size),\n padding: getSelectControlPadding(size),\n ...style,\n ...(isTriggerDisabled ? { opacity: DISABLED_FIELD_OPACITY } : {}),\n }}\n >\n <span\n className=\"block min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap\"\n style={controlTextNudgeStyle}\n >\n {hasSelection ? (\n displayContent\n ) : (\n <span\n className={\n floatingPlaceholder ? '' : 'text-[var(--theme-textLight)]'\n }\n >\n {placeholder}\n </span>\n )}\n </span>\n <span\n aria-hidden=\"true\"\n className={cx(\n 'pointer-events-none absolute top-1/2 flex items-center justify-center',\n 'transition-[transform,color] duration-150',\n isTriggerDisabled\n ? 'text-[var(--theme-secondary)]'\n : 'text-[var(--theme-textLight)]',\n )}\n style={{\n right: indicatorOffset,\n transform: `translateY(-50%) rotate(${isOpen ? 180 : 0}deg)`,\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M5.75 7.75L10 12l4.25-4.25\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </button>\n\n <select\n {...rest}\n id={`${resolvedId}-native`}\n ref={hiddenSelectRef}\n name={rest.name}\n disabled={disabled}\n multiple={isMultiSelect}\n value={isMultiSelect ? selectedValues : selectedValue}\n onChange={handleHiddenSelectChange}\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"ui-kit-sr-only pointer-events-none opacity-0\"\n >\n {nativeOptions}\n </select>\n\n {isMounted && isOpen\n ? createPortal(\n <>\n <style>\n {`\n #${listboxId} {\n scrollbar-width: thin;\n scrollbar-color: ${scrollbarThumbColor} transparent;\n }\n\n #${listboxId}::-webkit-scrollbar {\n width: 8px;\n }\n\n #${listboxId}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n #${listboxId}::-webkit-scrollbar-thumb {\n background: ${scrollbarThumbColor};\n border-radius: 999px;\n border: 2px solid transparent;\n background-clip: padding-box;\n }\n\n #${listboxId}::-webkit-scrollbar-thumb:hover {\n background: ${scrollbarThumbHoverColor};\n background-clip: padding-box;\n }\n\n #${searchInputId}::placeholder {\n color: ${placeholderTextColor};\n opacity: 1;\n }\n `}\n </style>\n <div\n ref={menuRef}\n className={cx(\n 'fixed z-[99999] flex max-h-[280px] flex-col gap-1',\n 'font-sans',\n 'overflow-hidden rounded-[20px] p-2',\n 'bg-[var(--theme-surface)]',\n 'border-[3px] border-solid border-[var(--theme-background)]',\n )}\n style={{\n top: menuPlacement === 'bottom' ? menuRect.top : 'auto',\n bottom: menuPlacement === 'top' ? menuRect.bottom : 'auto',\n left: menuRect.left,\n width: menuRect.width,\n visibility: isPlacementResolved ? 'visible' : 'hidden',\n }}\n >\n {hasFilter ? (\n <div\n className={cx(\n 'flex shrink-0 items-center justify-start gap-2 px-1 pb-[10px] pt-1',\n )}\n >\n {bulkToggleControl}\n <div\n className=\"flex-1\"\n onClick={(event) => event.stopPropagation()}\n onMouseDown={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <Input\n id={searchInputId}\n ref={searchInputRef}\n type=\"text\"\n icon={<SearchIcon size={16} />}\n disableFloatingLabel\n value={currentSearchQuery}\n onChange={(event) => {\n const nextQuery = event.currentTarget.value;\n\n if (searchQuery === undefined) {\n setUncontrolledSearchQuery(nextQuery);\n }\n\n onSearchQueryChange?.(nextQuery);\n }}\n onKeyDown={handleFilterKeyDown}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n size=\"sm\"\n />\n </div>\n </div>\n ) : isMultiSelect ? (\n <div\n className={cx(\n 'flex shrink-0 items-center justify-start border-b px-1 pb-[10px] pt-1',\n )}\n >\n {bulkToggleControl}\n </div>\n ) : null}\n\n {hasFilter && <Separator />}\n\n <div\n id={listboxId}\n role=\"listbox\"\n aria-labelledby={resolvedId}\n aria-multiselectable={isMultiSelect || undefined}\n onScroll={\n onListboxScroll as\n | UIEventHandler<HTMLDivElement>\n | undefined\n }\n className=\"min-h-0 flex-1 overflow-y-auto overflow-x-hidden py-1\"\n >\n {visibleGroups.length === 0 ? (\n <div className=\"px-3 py-[14px] text-center text-[13px] text-[var(--theme-textLight)]\">\n {emptyState}\n </div>\n ) : (\n visibleGroups.map((group) => (\n <div\n key={group.key}\n className={cx(\n 'flex flex-col gap-0',\n group.label ? 'mt-1' : 'mt-0',\n )}\n >\n {group.label ? (\n <span\n className={cx(\n 'px-2 pb-0.5 pt-1.5 text-[11px] font-extrabold uppercase',\n 'font-sans',\n 'tracking-[0.08em] text-[var(--theme-textLight)]',\n )}\n >\n {group.label}\n </span>\n ) : null}\n {group.options.map((option) => {\n const isGroupedOption = Boolean(group.label);\n const isSelected = selectedValues.includes(\n option.value,\n );\n const isHighlighted =\n option.value === highlightedValue;\n const isActive = isSelected || isHighlighted;\n\n return (\n <div\n key={option.key}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n onMouseEnter={() => {\n if (!option.disabled) {\n setHighlightedValue(option.value);\n }\n }}\n onMouseMove={() => {\n if (\n !option.disabled &&\n highlightedValue !== option.value\n ) {\n setHighlightedValue(option.value);\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n if (!option.disabled) {\n commitSelection(option.value);\n }\n }}\n className={cx(\n 'w-full min-w-0 box-border py-0.5 leading-5',\n option.disabled\n ? 'cursor-not-allowed text-[var(--theme-secondary)]'\n : 'cursor-pointer',\n !option.disabled && isActive\n ? 'text-[var(--theme-text)]'\n : null,\n !option.disabled && !isActive\n ? 'text-[var(--theme-text)]'\n : null,\n )}\n >\n <div\n className={cx(\n 'flex w-full min-w-0 items-center justify-between gap-3 rounded-xl box-border',\n 'transition-[background-color,color] duration-150',\n OPTION_PADDING_CLASSNAMES[size],\n isGroupedOption\n ? 'pl-5 text-[13px]'\n : 'text-sm',\n isSelected\n ? 'bg-[var(--theme-primary)] font-semibold'\n : null,\n !isSelected && isHighlighted\n ? 'bg-[var(--theme-primary)]'\n : null,\n !isSelected && !isHighlighted\n ? 'bg-[var(--theme-surface)] font-medium'\n : null,\n )}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2.5\">\n {isMultiSelect ? (\n <CheckboxIndicator\n checked={isSelected}\n disabled={option.disabled}\n size={16}\n checkedColor={\n isActive\n ? 'var(--theme-onPrimary)'\n : 'var(--theme-primary)'\n }\n iconColor={\n isActive\n ? 'var(--theme-primary)'\n : 'var(--theme-onPrimary)'\n }\n uncheckedBorderColor={\n isActive\n ? 'var(--theme-onPrimary)'\n : 'var(--theme-secondary)'\n }\n uncheckedBackgroundColor=\"transparent\"\n />\n ) : null}\n <span className=\"block min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap\">\n {option.label}\n </span>\n </span>\n {!isMultiSelect && isSelected ? (\n <span\n aria-hidden=\"true\"\n className=\"flex shrink-0 items-center justify-center text-[var(--theme-primary)]\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <path\n d=\"M5.75 10.25L8.5 13l5.75-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n ) : null}\n </div>\n </div>\n );\n })}\n </div>\n ))\n )}\n </div>\n {menuFooter ? (\n <>\n <Separator />\n <div className=\"shrink-0 px-2 pb-1 pt-2.5\">\n {menuFooter}\n </div>\n </>\n ) : null}\n </div>\n </>,\n document.body,\n )\n : null}\n </div>\n </ControlFrame>\n );\n}\n","import { isValidElement, type ReactNode } from 'react';\n\nimport type { ParsedGroup, SelectChildProps } from './types';\n\nexport function getTextContent(node: ReactNode): string {\n if (node == null || typeof node === 'boolean') {\n return '';\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n\n if (Array.isArray(node)) {\n return node.map(getTextContent).join('');\n }\n\n if (isValidElement<SelectChildProps>(node)) {\n return getTextContent(node.props.children);\n }\n\n return '';\n}\n\nexport function normalizeSelectValue(value: unknown): string {\n if (Array.isArray(value)) {\n return value.length > 0 ? normalizeSelectValue(value[0]) : '';\n }\n\n return value == null ? '' : String(value);\n}\n\nexport function normalizeSelectValues(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map((item) => normalizeSelectValue(item));\n }\n\n if (value == null) {\n return [];\n }\n\n return [normalizeSelectValue(value)];\n}\n\nexport function filterSelectGroups(groups: ParsedGroup[], query: string): ParsedGroup[] {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return groups;\n }\n\n return groups\n .map((group) => ({\n ...group,\n options: group.options.filter((option) => {\n const optionText = getTextContent(option.label).trim().toLowerCase();\n return optionText.includes(normalizedQuery);\n }),\n }))\n .filter((group) => group.options.length > 0);\n}","import { Children, isValidElement, type ReactNode } from 'react';\n\nimport type { ParsedGroup, ParsedOption, SelectChildProps } from './types';\nimport { getTextContent, normalizeSelectValue } from './utils';\n\nfunction buildOption(keyPrefix: string, index: number, props: SelectChildProps, groupDisabled = false) {\n const rawValue = props.value !== undefined ? props.value : getTextContent(props.children).trim();\n const normalizedValue = normalizeSelectValue(rawValue);\n\n return {\n key: `${keyPrefix}-${index}-${normalizedValue}`,\n value: normalizedValue,\n label: props.children ?? normalizedValue,\n disabled: groupDisabled || Boolean(props.disabled),\n };\n}\n\nexport function parseSelectChildren(children: ReactNode): ParsedGroup[] {\n const groups: ParsedGroup[] = [];\n const standaloneOptions: ParsedOption[] = [];\n let optionIndex = 0;\n let groupIndex = 0;\n\n const flushStandaloneOptions = () => {\n if (standaloneOptions.length === 0) {\n return;\n }\n\n groups.push({\n key: `standalone-${groups.length}`,\n options: [...standaloneOptions],\n });\n\n standaloneOptions.length = 0;\n };\n\n Children.forEach(children, (child) => {\n if (!isValidElement<SelectChildProps>(child)) {\n return;\n }\n\n if (child.type === 'option') {\n standaloneOptions.push(buildOption('option', optionIndex, child.props));\n optionIndex += 1;\n return;\n }\n\n if (child.type !== 'optgroup') {\n return;\n }\n\n flushStandaloneOptions();\n\n const groupOptions: ParsedOption[] = [];\n let groupOptionIndex = 0;\n\n Children.forEach(child.props.children, (optionChild) => {\n if (!isValidElement<SelectChildProps>(optionChild) || optionChild.type !== 'option') {\n return;\n }\n\n groupOptions.push(\n buildOption(\n `group-${groupIndex}-option`,\n groupOptionIndex,\n optionChild.props,\n Boolean(child.props.disabled),\n ),\n );\n\n groupOptionIndex += 1;\n });\n\n if (groupOptions.length > 0) {\n groups.push({\n key: `group-${groupIndex}`,\n label: child.props.label,\n options: groupOptions,\n });\n\n groupIndex += 1;\n }\n });\n\n flushStandaloneOptions();\n\n return groups;\n}","import type { ReactNode } from 'react';\n\nimport { SelectBase } from '../componentsBase/select/SelectBase';\nimport { parseSelectChildren } from '../componentsBase/select/childrenAdapter';\nimport type { SharedSelectProps } from '../componentsBase/select/types';\n\nexport type SelectOption = { label: string; value: string };\n\nexport interface SelectProps extends SharedSelectProps {\n children?: ReactNode;\n options?: SelectOption[];\n}\n\nexport function Select({ children, options, ...props }: SelectProps) {\n const actualChildren = options\n ? options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))\n : children;\n\n return <SelectBase {...props} groups={parseSelectChildren(actualChildren)} nativeOptions={actualChildren} />;\n}\n","import { useEffect, useMemo, useRef, useState, type ReactNode, type UIEvent } from 'react';\n\nimport { DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS, useUiKitTheme } from '../foundation';\nimport { SelectBase } from '../componentsBase/select/SelectBase';\nimport {\n buildNativeOptionsFromObjectOptions,\n buildParsedGroupsFromObjectOptions,\n dedupeSelectObjectOptions,\n getSelectObjectOptionKey,\n type SelectObjectOption,\n type SelectObjectOptionValue,\n} from '../componentsBase/select/objectOptionsAdapter';\nimport type { SharedSelectProps } from '../componentsBase/select/types';\n\nexport type SelectAsyncOptionValue = SelectObjectOptionValue;\nexport type SelectAsyncOption<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue> = SelectObjectOption<TValue>;\n\nexport interface SelectAsyncLoadContext {\n page: number;\n signal: AbortSignal;\n}\n\nexport interface SelectAsyncLoadResult<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue> {\n options: Array<SelectAsyncOption<TValue>>;\n hasMore?: boolean;\n}\n\ntype SelectAsyncSingleValue<TValue extends SelectAsyncOptionValue> = SelectAsyncOption<TValue> | null;\ntype SelectAsyncMultiValue<TValue extends SelectAsyncOptionValue> = Array<SelectAsyncOption<TValue>>;\ntype SelectAsyncValue<TValue extends SelectAsyncOptionValue> =\n | SelectAsyncSingleValue<TValue>\n | SelectAsyncMultiValue<TValue>;\n\nexport interface SelectAsyncProps<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue>\n extends Omit<SharedSelectProps, 'children' | 'value' | 'defaultValue' | 'onChange' | 'multiple'> {\n value?: SelectAsyncValue<TValue>;\n defaultValue?: SelectAsyncValue<TValue>;\n onChange?: (value: SelectAsyncValue<TValue>) => void;\n loadOptions: (\n query: string,\n loadedOptions: Array<SelectAsyncOption<TValue>>,\n context: SelectAsyncLoadContext,\n ) => Promise<SelectAsyncLoadResult<TValue>>;\n defaultOptions?: Array<SelectAsyncOption<TValue>>;\n fixedOptions?: Array<SelectAsyncOption<TValue>>;\n cacheUniqs?: ReadonlyArray<unknown>;\n searchDebounceMs?: number;\n loadingMessage?: ReactNode;\n loadErrorMessage?: ReactNode;\n emptyMessage?: ReactNode;\n loadingMoreMessage?: ReactNode;\n loadMoreHintMessage?: ReactNode;\n loadMoreThreshold?: number;\n searchPlaceholder?: string;\n}\n\nconst DEFAULT_LOAD_MORE_THRESHOLD = 24;\n\nconst normalizeAsyncValue = <TValue extends SelectAsyncOptionValue>(\n value: SelectAsyncValue<TValue> | undefined,\n isMulti: boolean,\n): Array<SelectAsyncOption<TValue>> => {\n if (value == null) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return isMulti ? [value] : [value];\n};\n\nconst areUnknownArraysEqual = (left: ReadonlyArray<unknown>, right: ReadonlyArray<unknown>): boolean => {\n if (left.length !== right.length) {\n return false;\n }\n\n return left.every((entry, index) => Object.is(entry, right[index]));\n};\n\nexport function SelectAsync<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue>({\n value,\n defaultValue,\n onChange,\n loadOptions,\n defaultOptions = [],\n fixedOptions = [],\n cacheUniqs = [],\n searchDebounceMs = DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS,\n loadingMessage = 'Loading options...',\n loadErrorMessage = 'Could not load options.',\n emptyMessage = 'No options found.',\n loadingMoreMessage = 'Loading more...',\n loadMoreHintMessage = 'Scroll to load more',\n loadMoreThreshold = DEFAULT_LOAD_MORE_THRESHOLD,\n isMulti,\n isFilterable,\n searchPlaceholder = 'Search options',\n ...props\n}: SelectAsyncProps<TValue>) {\n useUiKitTheme();\n const isMultiSelect = Boolean(isMulti);\n const isControlled = value !== undefined;\n const [internalSelectedOptions, setInternalSelectedOptions] = useState<Array<SelectAsyncOption<TValue>>>(() => {\n return normalizeAsyncValue(defaultValue, isMultiSelect);\n });\n const [remoteOptions, setRemoteOptions] = useState<Array<SelectAsyncOption<TValue>>>(defaultOptions);\n const [searchQuery, setSearchQuery] = useState('');\n const [nextPage, setNextPage] = useState(1);\n const [hasMore, setHasMore] = useState(true);\n const [isInitialLoading, setIsInitialLoading] = useState(false);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [loadError, setLoadError] = useState<ReactNode | null>(null);\n const selectedOptions = isControlled\n ? normalizeAsyncValue(value as SelectAsyncValue<TValue>, isMultiSelect)\n : internalSelectedOptions;\n const optionLookupRef = useRef(new Map<string, SelectAsyncOption<TValue>>());\n const loadOptionsRef = useRef(loadOptions);\n const remoteOptionsRef = useRef(remoteOptions);\n const cacheUniqsRef = useRef(cacheUniqs);\n const requestVersionRef = useRef(0);\n const activeControllerRef = useRef<AbortController | null>(null);\n\n loadOptionsRef.current = loadOptions;\n remoteOptionsRef.current = remoteOptions;\n\n const mergedOptions = useMemo(() => {\n const baseOptions = dedupeSelectObjectOptions<TValue>([\n ...fixedOptions,\n ...remoteOptions,\n ]);\n const knownOptionKeys = new Set(baseOptions.map((option) => getSelectObjectOptionKey(option)));\n const missingSelectedOptions = selectedOptions.filter((option) => {\n return !knownOptionKeys.has(getSelectObjectOptionKey(option));\n });\n\n return [...baseOptions, ...missingSelectedOptions];\n }, [fixedOptions, remoteOptions, selectedOptions]);\n\n useEffect(() => {\n const nextLookup = new Map<string, SelectAsyncOption<TValue>>();\n\n mergedOptions.forEach((option) => {\n nextLookup.set(getSelectObjectOptionKey(option), option);\n });\n\n optionLookupRef.current = nextLookup;\n }, [mergedOptions]);\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n setInternalSelectedOptions(normalizeAsyncValue(defaultValue, isMultiSelect));\n }, [defaultValue, isControlled, isMultiSelect]);\n\n useEffect(() => {\n if (areUnknownArraysEqual(cacheUniqsRef.current, cacheUniqs)) {\n return;\n }\n\n cacheUniqsRef.current = cacheUniqs;\n setRemoteOptions(defaultOptions);\n setSearchQuery('');\n setNextPage(1);\n setHasMore(true);\n setLoadError(null);\n }, [cacheUniqs, defaultOptions]);\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n requestVersionRef.current += 1;\n const currentRequestVersion = requestVersionRef.current;\n const controller = new AbortController();\n\n activeControllerRef.current?.abort();\n activeControllerRef.current = controller;\n setIsInitialLoading(true);\n setIsLoadingMore(false);\n setLoadError(null);\n\n void loadOptionsRef.current(searchQuery, [], { page: 1, signal: controller.signal })\n .then((result) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions(result.options);\n setHasMore(result.hasMore ?? result.options.length > 0);\n setNextPage(2);\n })\n .catch((error: unknown) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions([]);\n setHasMore(false);\n setNextPage(1);\n\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n setLoadError(loadErrorMessage);\n })\n .finally(() => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setIsInitialLoading(false);\n });\n }, searchDebounceMs);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [loadErrorMessage, searchDebounceMs, searchQuery, ...cacheUniqs]);\n\n useEffect(() => {\n return () => {\n activeControllerRef.current?.abort();\n };\n }, []);\n\n const loadNextPage = async () => {\n if (isInitialLoading || isLoadingMore || !hasMore) {\n return;\n }\n\n const controller = new AbortController();\n const currentRequestVersion = requestVersionRef.current;\n\n setIsLoadingMore(true);\n setLoadError(null);\n\n try {\n const result = await loadOptionsRef.current(searchQuery, remoteOptionsRef.current, {\n page: nextPage,\n signal: controller.signal,\n });\n\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions((currentOptions) => {\n return dedupeSelectObjectOptions<TValue>([\n ...currentOptions,\n ...result.options,\n ]);\n });\n setHasMore(result.hasMore ?? result.options.length > 0);\n setNextPage((currentPage) => currentPage + 1);\n } catch (error: unknown) {\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n setLoadError(loadErrorMessage);\n } finally {\n setIsLoadingMore(false);\n }\n };\n\n const handleListboxScroll = (event: UIEvent<HTMLDivElement>) => {\n const element = event.currentTarget;\n const distanceToBottom = element.scrollHeight - element.scrollTop - element.clientHeight;\n\n if (distanceToBottom <= loadMoreThreshold) {\n void loadNextPage();\n }\n };\n\n const handleBaseChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const nextKeys = isMultiSelect\n ? Array.from(event.currentTarget.selectedOptions, (option) => option.value)\n : event.currentTarget.value\n ? [event.currentTarget.value]\n : [];\n const nextOptions = nextKeys\n .map((optionKey) => optionLookupRef.current.get(optionKey))\n .filter((option): option is SelectAsyncOption<TValue> => Boolean(option));\n const nextValue = isMultiSelect ? nextOptions : nextOptions[0] ?? null;\n\n if (!isControlled) {\n setInternalSelectedOptions(nextOptions);\n }\n\n onChange?.(nextValue);\n };\n\n const menuFooter = isLoadingMore || hasMore ? (\n <div\n aria-live=\"polite\"\n className=\"flex items-center gap-3 text-xs leading-[1.4] text-[var(--theme-textLight)]\"\n style={{ justifyContent: hasMore ? 'space-between' : 'center' }}\n >\n <span>{isLoadingMore ? loadingMoreMessage : hasMore ? loadMoreHintMessage : null}</span>\n {isLoadingMore ? (\n <span\n aria-hidden=\"true\"\n className=\"h-2 w-2 shrink-0 rounded-full bg-[var(--theme-primary)] opacity-80\"\n />\n ) : null}\n </div>\n ) : null;\n\n const resolvedEmptyMessage = loadError && remoteOptions.length === 0 ? loadError : emptyMessage;\n const resolvedValue = selectedOptions.map((option) => getSelectObjectOptionKey(option));\n\n return (\n <SelectBase\n {...props}\n isMulti={isMultiSelect}\n isFilterable={isFilterable ?? true}\n value={isMultiSelect ? resolvedValue : resolvedValue[0] ?? ''}\n onChange={handleBaseChange}\n groups={buildParsedGroupsFromObjectOptions<TValue>(mergedOptions)}\n nativeOptions={buildNativeOptionsFromObjectOptions<TValue>(mergedOptions)}\n emptyMessage={resolvedEmptyMessage}\n isLoading={isInitialLoading && mergedOptions.length === 0}\n loadingMessage={loadingMessage}\n searchPlaceholder={searchPlaceholder}\n searchQuery={searchQuery}\n onSearchQueryChange={setSearchQuery}\n allowOpenWithoutOptions={true}\n filterOptions={false}\n preserveUnknownValues={true}\n onListboxScroll={handleListboxScroll}\n menuFooter={menuFooter}\n />\n );\n}","import type { ReactNode } from 'react';\n\nimport type { ParsedGroup, ParsedOption } from './types';\nimport { getTextContent } from './utils';\n\nexport type SelectObjectOptionValue = string | number;\n\nexport interface SelectObjectOption<TValue extends SelectObjectOptionValue = SelectObjectOptionValue> {\n value: TValue;\n label: ReactNode;\n disabled?: boolean;\n group?: ReactNode;\n}\n\nconst getOptionKey = <TValue extends SelectObjectOptionValue>(option: SelectObjectOption<TValue>): string => {\n return String(option.value);\n};\n\nexport const dedupeSelectObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): Array<SelectObjectOption<TValue>> => {\n const seenKeys = new Set<string>();\n\n return options.filter((option) => {\n const optionKey = getOptionKey(option);\n\n if (seenKeys.has(optionKey)) {\n return false;\n }\n\n seenKeys.add(optionKey);\n return true;\n });\n};\n\nexport const buildParsedGroupsFromObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): ParsedGroup[] => {\n const standaloneOptions: ParsedOption[] = [];\n const groupedOptions = new Map<string, ParsedGroup>();\n\n options.forEach((option, index) => {\n const parsedOption: ParsedOption = {\n key: `async-option-${index}-${getOptionKey(option)}`,\n value: getOptionKey(option),\n label: option.label,\n disabled: Boolean(option.disabled),\n };\n\n if (option.group == null) {\n standaloneOptions.push(parsedOption);\n return;\n }\n\n const labelText = getTextContent(option.group).trim();\n const groupKey = labelText || `group-${index}`;\n const currentGroup = groupedOptions.get(groupKey);\n\n if (currentGroup) {\n currentGroup.options.push(parsedOption);\n return;\n }\n\n groupedOptions.set(groupKey, {\n key: `async-group-${groupKey}`,\n label: option.group,\n options: [parsedOption],\n });\n });\n\n const parsedGroups: ParsedGroup[] = [];\n\n if (standaloneOptions.length > 0) {\n parsedGroups.push({\n key: 'async-standalone',\n options: standaloneOptions,\n });\n }\n\n parsedGroups.push(...groupedOptions.values());\n\n return parsedGroups;\n};\n\nexport const buildNativeOptionsFromObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): ReactNode => {\n return options.map((option) => {\n const optionValue = getOptionKey(option);\n const optionText = getTextContent(option.label).trim() || optionValue;\n\n return (\n <option key={`native-${optionValue}`} value={optionValue} disabled={option.disabled}>\n {optionText}\n </option>\n );\n });\n};\n\nexport const getSelectObjectOptionKey = getOptionKey;","import { useEffect, useMemo, useState } from 'react';\n\nimport { TableBase } from '../componentsBase/table/TableBase';\nimport type { SharedTableProps } from '../componentsBase/table/types';\nimport {\n DEFAULT_PAGE_SIZE,\n clampPage,\n resolveColumnSearchValue,\n sanitizePageSizeOptions,\n} from '../componentsBase/table/utils';\n\nexport interface TableProps<TItem> extends SharedTableProps<TItem> {\n items: Array<TItem>;\n}\n\nexport function Table<TItem>({\n items,\n desktopColumns,\n mobileColumns,\n defaultSearchValue = '',\n defaultPage = 1,\n defaultPageSize = DEFAULT_PAGE_SIZE,\n pageSizeOptions,\n searchable = true,\n onSearchValueChange,\n onPageChange,\n onPageSizeChange,\n ...props\n}: TableProps<TItem>) {\n const initialPageSizeOptions = useMemo(() => {\n return sanitizePageSizeOptions(pageSizeOptions, defaultPageSize);\n }, [defaultPageSize, pageSizeOptions]);\n const [searchValue, setSearchValue] = useState(defaultSearchValue);\n const [page, setPage] = useState(Math.max(1, Math.floor(defaultPage)));\n const [pageSize, setPageSize] = useState(initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE);\n\n useEffect(() => {\n if (initialPageSizeOptions.includes(pageSize)) {\n return;\n }\n\n const nextPageSize = initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE;\n setPageSize(nextPageSize);\n }, [initialPageSizeOptions, pageSize]);\n\n const filteredItems = useMemo(() => {\n if (!searchable) {\n return items;\n }\n\n const query = searchValue.trim().toLowerCase();\n\n if (query.length === 0) {\n return items;\n }\n\n const searchableColumns = [...desktopColumns, ...mobileColumns];\n\n return items.filter((item, index) => {\n return searchableColumns.some((column) => {\n return resolveColumnSearchValue(column, item, index).toLowerCase().includes(query);\n });\n });\n }, [desktopColumns, items, mobileColumns, searchable, searchValue]);\n\n const totalItems = filteredItems.length;\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize));\n const normalizedPage = clampPage(page, totalPages);\n\n useEffect(() => {\n if (normalizedPage === page) {\n return;\n }\n\n setPage(normalizedPage);\n onPageChange?.(normalizedPage);\n }, [normalizedPage, onPageChange, page]);\n\n const pageItems = useMemo(() => {\n const startIndex = (normalizedPage - 1) * pageSize;\n return filteredItems.slice(startIndex, startIndex + pageSize);\n }, [filteredItems, normalizedPage, pageSize]);\n\n return (\n <TableBase\n {...props}\n desktopColumns={desktopColumns}\n mobileColumns={mobileColumns}\n searchable={searchable}\n pageSizeOptions={pageSizeOptions}\n items={pageItems}\n searchValue={searchValue}\n page={normalizedPage}\n pageSize={pageSize}\n totalPages={totalPages}\n totalItems={totalItems}\n onSearchChange={(nextValue) => {\n setSearchValue(nextValue);\n setPage(1);\n onSearchValueChange?.(nextValue);\n onPageChange?.(1);\n }}\n onInternalPageChange={(nextPage) => {\n const normalizedNextPage = clampPage(nextPage, totalPages);\n setPage(normalizedNextPage);\n onPageChange?.(normalizedNextPage);\n }}\n onInternalPageSizeChange={(nextPageSize) => {\n setPageSize(nextPageSize);\n setPage(1);\n onPageSizeChange?.(nextPageSize);\n onPageChange?.(1);\n }}\n />\n );\n}","import {\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { Button } from \"../../components/Button\";\nimport { Input } from \"../../components/Input\";\nimport { Modal } from \"../../components/Modal\";\nimport { Separator } from \"../../components/Separator\";\nimport { Select } from \"../../components/Select\";\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from \"../../foundation\";\nimport type {\n TableAction,\n TableBaseProps,\n TableColumn,\n TableColumnAlign,\n} from \"./types\";\nimport {\n buildTableDownloadFileBaseName,\n buildTableDownloadMatrix,\n downloadTableAsCsv,\n downloadTableAsPdf,\n downloadTableAsXls,\n} from \"./downloads\";\nimport {\n DEFAULT_COLLAPSE_BELOW,\n DEFAULT_MAX_INLINE_ACTIONS,\n clampPage,\n getColumnKey,\n getRowId,\n hasRenderableContent,\n isActionDisabled,\n mergeTableLabels,\n resolveColumnContent,\n resolveTableActions,\n sanitizePageSizeOptions,\n} from \"./utils\";\n\ntype OverflowMenuProps = {\n label: string;\n children: ReactNode;\n};\n\nconst OVERFLOW_MENU_WIDTH = 220;\n\nfunction SettingsIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M12 15.2a3.2 3.2 0 1 0 0-6.4 3.2 3.2 0 0 0 0 6.4Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <path\n d={`\n M19.4 15a1 1 0 0 0 .2 1.1l.1.1a1.2 1.2 0 0 1 0 1.7l-1.2 1.2a1.2 1.2 0 0 1-1.7 0l-.1-.1a1 1 0 0\n 0-1.1-.2 1 1 0 0 0-.6.9V20a1.2 1.2 0 0 1-1.2 1.2h-1.6A1.2 1.2 0 0 1 11 20v-.2a1 1 0 0 0-.6-.9 1 1 0\n 0 0-1.1.2l-.1.1a1.2 1.2 0 0 1-1.7 0l-1.2-1.2a1.2 1.2 0 0 1 0-1.7l.1-.1a1 1 0 0 0 .2-1.1 1 1 0 0\n 0-.9-.6H4A1.2 1.2 0 0 1 2.8 13v-1.6A1.2 1.2 0 0 1 4 10.2h.2a1 1 0 0 0 .9-.6 1 1 0 0\n 0-.2-1.1l-.1-.1a1.2 1.2 0 0 1 0-1.7l1.2-1.2a1.2 1.2 0 0 1 1.7 0l.1.1a1 1 0 0 0 1.1.2 1 1 0 0 0\n .6-.9V4A1.2 1.2 0 0 1 11 2.8h1.6A1.2 1.2 0 0 1 13.8 4v.2a1 1 0 0 0 .6.9 1 1 0 0 0 1.1-.2l.1-.1a1.2\n 1.2 0 0 1 1.7 0l1.2 1.2a1.2 1.2 0 0 1 0 1.7l-.1.1a1 1 0 0 0-.2 1.1 1 1 0 0 0 .9.6h.2A1.2 1.2 0 0 1\n 21.2 11v1.6a1.2 1.2 0 0 1-1.2 1.2h-.2a1 1 0 0 0-.4.2Z\n `}\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction MoreActionsIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <circle cx=\"5\" cy=\"12\" r=\"1.8\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.8\" />\n <circle cx=\"19\" cy=\"12\" r=\"1.8\" />\n </svg>\n );\n}\n\nfunction ChevronIcon({ direction }: { direction: \"left\" | \"right\" }) {\n const isLeft = direction === \"left\";\n\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d={isLeft ? \"M15 6 9 12l6 6\" : \"m9 6 6 6-6 6\"}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction DoubleChevronIcon({ direction }: { direction: \"left\" | \"right\" }) {\n const isLeft = direction === \"left\";\n\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d={isLeft ? \"M18 6 12 12l6 6\" : \"m6 6 6 6-6 6\"}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d={isLeft ? \"M12 6 6 12l6 6\" : \"m12 6 6 6-6 6\"}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction OverflowMenu({ label, children }: OverflowMenuProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [menuPosition, setMenuPosition] = useState<{\n left: number;\n top: number;\n } | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const updateMenuPosition = () => {\n const triggerRect = buttonRef.current?.getBoundingClientRect();\n\n if (!triggerRect || typeof window === \"undefined\") {\n return;\n }\n\n const preferredLeft = triggerRect.right - OVERFLOW_MENU_WIDTH - 25;\n const fallbackLeft = triggerRect.left - OVERFLOW_MENU_WIDTH;\n\n setMenuPosition({\n left: Math.max(\n 8,\n Math.min(\n window.innerWidth - OVERFLOW_MENU_WIDTH - 8,\n preferredLeft >= 8 ? preferredLeft : fallbackLeft,\n ),\n ),\n top: triggerRect.bottom - 20,\n });\n };\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n updateMenuPosition();\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target as Node;\n\n if (\n containerRef.current?.contains(target) ||\n menuRef.current?.contains(target)\n ) {\n return;\n }\n\n setIsOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n window.addEventListener(\"resize\", updateMenuPosition);\n window.addEventListener(\"scroll\", updateMenuPosition, true);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n window.removeEventListener(\"resize\", updateMenuPosition);\n window.removeEventListener(\"scroll\", updateMenuPosition, true);\n };\n }, [isOpen]);\n\n return (\n <div ref={containerRef} className=\"relative\">\n <button\n type=\"button\"\n ref={buttonRef}\n aria-label={label}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n onClick={() => {\n if (!isOpen) {\n updateMenuPosition();\n }\n\n setIsOpen((currentValue) => !currentValue);\n }}\n className={[\n \"inline-flex h-[30px] w-[30px] items-center justify-center rounded-xl\",\n \"cursor-pointer border-0 bg-transparent text-[var(--theme-text)]\",\n \"transition-colors hover:text-[var(--theme-primary)]\",\n ].join(\" \")}\n >\n <MoreActionsIcon />\n </button>\n {isOpen && menuPosition && typeof document !== \"undefined\" ? (\n createPortal(\n <div\n ref={menuRef}\n role=\"menu\"\n aria-label={label}\n className={[\n \"z-50 flex flex-col gap-1.5\",\n \"border-3 border-solid border-[var(--theme-background)] bg-[var(--theme-surface)] p-2.5 shadow-none\",\n ].join(\" \")}\n style={{\n borderRadius: 22,\n left: menuPosition.left,\n position: \"fixed\",\n top: menuPosition.top,\n width: OVERFLOW_MENU_WIDTH,\n zIndex: 1000,\n }}\n >\n {children}\n </div>,\n document.body,\n )\n ) : null}\n </div>\n );\n}\n\nconst getAlignClassName = (align: TableColumnAlign): string => {\n if (align === \"right\") return \"text-right\";\n if (align === \"center\") return \"text-center\";\n return \"text-left\";\n};\n\nexport function TableBase<TItem>({\n items,\n loading = false,\n error,\n onRetry,\n desktopColumns,\n mobileColumns,\n getRowId: getCustomRowId,\n actions,\n stickyActionsColumn = true,\n maxInlineActions = DEFAULT_MAX_INLINE_ACTIONS,\n collapseBelow = DEFAULT_COLLAPSE_BELOW,\n searchable = true,\n showSearch = true,\n showPagination = true,\n showRowsPerPage = true,\n showSettingsButton = true,\n pageSizeOptions,\n labels,\n translations,\n className,\n style,\n ariaLabel = \"Responsive data table\",\n searchValue,\n page,\n pageSize,\n totalPages,\n totalItems,\n onSearchChange,\n onInternalPageChange,\n onInternalPageSizeChange,\n}: TableBaseProps<TItem>) {\n useUiKitTheme();\n\n const scrollRegionId = useId().replace(/:/g, \"\");\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number | null>(null);\n const [isSettingsModalOpen, setIsSettingsModalOpen] = useState(false);\n const resolvedLabels = mergeTableLabels({\n ...(labels ?? {}),\n ...(translations ?? {}),\n });\n const normalizedPage = clampPage(page, totalPages);\n const normalizedPageSizeOptions = sanitizePageSizeOptions(\n pageSizeOptions,\n pageSize,\n );\n const isCollapsed =\n containerWidth !== null ? containerWidth < collapseBelow : false;\n const mobileGridColumnCount =\n containerWidth !== null && containerWidth < 520 ? 1 : 2;\n const canGoToPreviousPage = normalizedPage > 1;\n const canGoToNextPage = normalizedPage < Math.max(1, totalPages);\n const canGoToFirstPage = canGoToPreviousPage;\n const canGoToLastPage = canGoToNextPage;\n const shouldShowSearch = searchable && showSearch;\n const shouldShowPaginationControls = showPagination && totalPages > 1;\n const shouldShowRowsPerPageControl =\n showRowsPerPage && normalizedPageSizeOptions.length > 1;\n const shouldRenderFooter =\n shouldShowPaginationControls || shouldShowRowsPerPageControl;\n const hasRows = items.length > 0;\n const hasSearchValue = searchValue.trim().length > 0;\n const visibleInlineActions = Math.max(0, Math.floor(maxInlineActions));\n const actionsColumnMinWidth = Math.max(\n 112,\n visibleInlineActions * 38 + 48,\n );\n const actionsColumnSizeStyle: CSSProperties = {\n minWidth: actionsColumnMinWidth,\n width: actionsColumnMinWidth,\n };\n const paginationButtonStyle: CSSProperties = {\n height: 30,\n maxWidth: 30,\n minWidth: 30,\n padding: 5,\n width: 30,\n };\n const lastPageButtonStyle: CSSProperties = {\n ...paginationButtonStyle,\n maxWidth: totalPages > 100 ? 45 : 30,\n minWidth: totalPages > 100 ? 45 : 30,\n width: totalPages > 100 ? 45 : 30,\n };\n const shouldShowToolbarStatus =\n loading || (!loading && Boolean(error) && hasRows);\n const shouldRenderToolbar =\n shouldShowSearch || shouldShowToolbarStatus || showSettingsButton;\n const shouldRenderToolbarPrimaryGroup =\n shouldShowSearch || showSettingsButton;\n const visibleDownloadColumns = desktopColumns.filter(\n (column) => column.type !== \"actions\",\n );\n const totalItemCount = totalItems ?? items.length;\n const currentPageItemCount = items.length;\n const downloadMatrix = buildTableDownloadMatrix(\n visibleDownloadColumns,\n items,\n );\n const downloadFileBaseName = buildTableDownloadFileBaseName(\n ariaLabel,\n normalizedPage,\n );\n const shouldStickActionsColumn = Boolean(actions) && stickyActionsColumn;\n\n const getStickyActionsCellStyle = (\n backgroundColor: string,\n backgroundImage?: CSSProperties[\"backgroundImage\"],\n isHeader = false,\n ): CSSProperties => ({\n position: \"sticky\",\n right: 0,\n zIndex: isHeader ? 4 : 2,\n backgroundColor,\n backgroundImage,\n backgroundClip: \"padding-box\",\n boxShadow: \"-10px 0 16px -14px var(--theme-shadow)\",\n borderLeft: \"1px solid var(--theme-secondary)\",\n });\n\n useEffect(() => {\n const element = containerRef.current;\n\n if (!element) {\n return;\n }\n\n const setWidthFromElement = (nextWidth?: number) => {\n const measuredWidth = nextWidth ?? element.getBoundingClientRect().width;\n setContainerWidth(measuredWidth > 0 ? measuredWidth : null);\n };\n\n setWidthFromElement();\n\n if (typeof ResizeObserver === \"undefined\") {\n const handleResize = () => {\n setWidthFromElement(window.innerWidth);\n };\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }\n\n const observer = new ResizeObserver((entries) => {\n const [entry] = entries;\n setWidthFromElement(entry?.contentRect.width);\n });\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const handleDownloadCsv = () => {\n downloadTableAsCsv(downloadMatrix, downloadFileBaseName);\n };\n\n const handleDownloadXls = () => {\n downloadTableAsXls(downloadMatrix, downloadFileBaseName);\n };\n\n const handleDownloadPdf = () => {\n downloadTableAsPdf(\n downloadMatrix,\n downloadFileBaseName,\n String(ariaLabel),\n normalizedPage,\n totalPages,\n );\n };\n\n const renderActionButton = (\n action: TableAction<TItem>,\n item: TItem,\n rowIndex: number,\n appearance: \"inline\" | \"menu\",\n onAfterClick?: () => void,\n ) => {\n const disabled = isActionDisabled(action, item, rowIndex);\n const tone = action.tone ?? \"default\";\n const iconOnly = appearance === \"inline\" && action.icon != null;\n const isMenuAction = appearance === \"menu\";\n\n return (\n <button\n key={action.id ?? `${action.label}-${rowIndex}`}\n type=\"button\"\n role={appearance === \"menu\" ? \"menuitem\" : undefined}\n disabled={disabled}\n title={action.label}\n aria-label={action.label}\n onClick={() => {\n if (disabled) {\n return;\n }\n\n action.onClick(item, rowIndex);\n onAfterClick?.();\n }}\n className={cx(\n \"box-border inline-flex items-center rounded-xl border-0 text-[13px] leading-4\",\n \"cursor-pointer bg-transparent transition-colors disabled:cursor-not-allowed disabled:opacity-50\",\n tone === \"danger\"\n ? \"text-[var(--theme-negative)]\"\n : \"text-[var(--theme-text)]\",\n tone === \"danger\"\n ? \"hover:text-[var(--theme-negative)]\"\n : \"hover:text-[var(--theme-primary)]\",\n iconOnly && !isMenuAction\n ? \"h-[30px] w-[30px] justify-center p-0\"\n : \"h-[30px] gap-2 px-2.5\",\n isMenuAction\n ? \"h-[34px] w-full justify-start gap-2.5 px-3\"\n : \"justify-center\",\n )}\n >\n {action.icon}\n {appearance === \"menu\" || !iconOnly ? (\n <span>{action.label}</span>\n ) : null}\n </button>\n );\n };\n\n const renderActions = (item: TItem, rowIndex: number) => {\n const resolvedActions = resolveTableActions(actions, item, rowIndex);\n\n if (resolvedActions.length === 0) {\n return null;\n }\n\n const inlineActions = resolvedActions.slice(0, visibleInlineActions);\n const overflowActions = resolvedActions.slice(visibleInlineActions);\n\n return (\n <div className=\"flex w-full min-w-max flex-nowrap items-center justify-end gap-2\">\n {inlineActions.map((action) =>\n renderActionButton(action, item, rowIndex, \"inline\"),\n )}\n {overflowActions.length > 0 ? (\n <OverflowMenu label={resolvedLabels.actionsMenuLabel}>\n {overflowActions.map((action) =>\n renderActionButton(action, item, rowIndex, \"menu\"),\n )}\n </OverflowMenu>\n ) : null}\n </div>\n );\n };\n\n const renderDesktopCell = (\n column: TableColumn<TItem>,\n item: TItem,\n rowIndex: number,\n columnIndex: number,\n ) => {\n const content = resolveColumnContent(column, item, rowIndex);\n const align =\n column.align ?? (column.type === \"actions\" ? \"right\" : \"left\");\n\n return (\n <td\n key={`${getColumnKey(column, columnIndex)}-${rowIndex}`}\n colSpan={column.colSpan}\n className={[\n \"border-b border-[var(--theme-background)] px-2.5 py-0.5\",\n \"align-middle text-[12px] font-normal leading-[1.3] text-[var(--theme-text)]\",\n getAlignClassName(align),\n ].join(\" \")}\n style={{\n width: column.width,\n minWidth: column.minWidth,\n }}\n >\n {hasRenderableContent(content) ? (\n content\n ) : (\n <span className=\"text-[var(--theme-textLight)]\">-</span>\n )}\n </td>\n );\n };\n\n const renderEmptyState = () => {\n const message = error\n ? error\n : loading\n ? resolvedLabels.loadingMessage\n : hasSearchValue\n ? resolvedLabels.noResultsMessage\n : resolvedLabels.emptyMessage;\n\n return (\n <div\n className={[\n \"flex min-h-[220px] flex-col items-center justify-center gap-3 rounded-[20px]\",\n \"border border-dashed border-[var(--theme-textLight)] bg-[var(--theme-surface)]\",\n \"p-6 text-center text-[var(--theme-text)] shadow-none\",\n ].join(\" \")}\n >\n <strong className=\"text-base\">{message}</strong>\n {error && onRetry ? (\n <Button variant=\"secondary\" onClick={onRetry}>\n {resolvedLabels.retryLabel}\n </Button>\n ) : null}\n </div>\n );\n };\n\n return (\n <div\n ref={containerRef}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n \"flex w-full max-w-full min-w-0 flex-col gap-4 rounded-[24px]\",\n \"box-border bg-[var(--theme-surface)] text-[var(--theme-text)]\",\n className,\n )}\n style={style}\n >\n {shouldRenderToolbar ? (\n <div className=\"flex min-w-0 flex-wrap items-center justify-between gap-3\">\n {shouldRenderToolbarPrimaryGroup ? (\n <div\n className={cx(\n \"flex min-w-0 items-center gap-2.5\",\n shouldShowSearch ? \"flex-[1_1_260px]\" : \"ml-auto flex-none\",\n )}\n >\n {shouldShowSearch ? (\n // Wrapper carries the toolbar flex sizing. Applying `flex` directly\n // to the Input would land on the inner <input>, which lives inside a\n // flex-column ControlFrame — there flex-basis becomes height and the\n // field grows absurdly tall.\n <div className=\"min-w-0 max-w-[360px] flex-[1_1_260px]\">\n <Input\n type=\"search\"\n value={searchValue}\n aria-label={resolvedLabels.searchPlaceholder}\n placeholder={resolvedLabels.searchPlaceholder}\n onChange={(event) =>\n onSearchChange(event.currentTarget.value)\n }\n />\n </div>\n ) : null}\n\n {showSettingsButton && !loading ? (\n <Button\n variant=\"secondary\"\n aria-label={resolvedLabels.settingsButtonLabel}\n title={resolvedLabels.settingsButtonLabel}\n onClick={() => setIsSettingsModalOpen(true)}\n className=\"shrink-0\"\n >\n <SettingsIcon />\n </Button>\n ) : null}\n </div>\n ) : null}\n\n {shouldShowToolbarStatus ? (\n <div\n className={cx(\n \"flex min-w-0 flex-wrap items-center justify-end gap-2.5\",\n shouldRenderToolbarPrimaryGroup ? \"ml-auto\" : \"\",\n )}\n >\n {loading ? (\n <span className=\"text-[13px] font-semibold text-[var(--theme-textLight)]\">\n {resolvedLabels.loadingMessage}\n </span>\n ) : null}\n {!loading && error && hasRows ? (\n <div className=\"inline-flex items-center gap-2.5\">\n <span className=\"text-[13px] font-semibold text-[var(--theme-negative)]\">\n {resolvedLabels.errorMessage}\n </span>\n {onRetry ? (\n <Button variant=\"ghost\" onClick={onRetry}>\n {resolvedLabels.retryLabel}\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n\n {!hasRows && (!loading || error) ? renderEmptyState() : null}\n\n {hasRows ? (\n isCollapsed ? (\n <div\n role=\"list\"\n aria-label={ariaLabel}\n className=\"flex min-w-0 flex-col gap-3.5\"\n >\n {items.map((item, rowIndex) => {\n const rowActions = renderActions(item, rowIndex);\n\n return (\n <article\n key={getRowId(item, rowIndex, getCustomRowId)}\n role=\"listitem\"\n className={[\n \"flex min-w-0 flex-col gap-2.5 rounded-[20px]\",\n \"border-3 border-solid border-[var(--theme-background)] bg-[var(--theme-surface)]\",\n \"px-3.5 pb-1.5 pt-3 shadow-none\",\n ].join(\" \")}\n >\n <div\n className={cx(\n \"grid min-w-0 gap-1.5\",\n mobileGridColumnCount === 1\n ? \"grid-cols-[minmax(0,1fr)]\"\n : \"grid-cols-[repeat(2,minmax(0,1fr))]\",\n )}\n >\n {mobileColumns.map((column, columnIndex) => {\n const content = resolveColumnContent(\n column,\n item,\n rowIndex,\n );\n const align =\n column.align ??\n (column.type === \"actions\" ? \"right\" : \"left\");\n const span = Math.max(\n 1,\n Math.min(column.colSpan ?? 1, mobileGridColumnCount),\n );\n\n return (\n <div\n key={`${getColumnKey(column, columnIndex)}-${rowIndex}`}\n className={cx(\n \"flex min-w-0 items-center gap-1.5\",\n span === 2 ? \"col-span-2\" : \"col-span-1\",\n )}\n >\n {!column.hideLabel && column.label ? (\n <span\n className={[\n \"min-w-0 flex-[0_1_45%] text-left text-[11px] font-bold\",\n \"uppercase tracking-[0.08em] text-[var(--theme-textLight)]\",\n \"[overflow-wrap:anywhere]\",\n ].join(\" \")}\n >\n {column.label}\n </span>\n ) : null}\n <div className=\"min-w-0 max-w-full flex-1\">\n <div\n className={cx(\n \"w-full min-w-0 break-words text-[12px] font-normal leading-[1.35]\",\n \"text-[var(--theme-text)] [overflow-wrap:anywhere]\",\n getAlignClassName(align),\n )}\n >\n {hasRenderableContent(content) ? (\n content\n ) : (\n <span className=\"text-[var(--theme-textLight)]\">\n -\n </span>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n {rowActions ? (\n <div className=\"flex justify-end border-t border-[var(--theme-secondary)] pt-1\">\n {rowActions}\n </div>\n ) : null}\n </article>\n );\n })}\n </div>\n ) : (\n <>\n <style>\n {`\n #${scrollRegionId} {\n scrollbar-width: thin;\n scrollbar-color: var(--theme-secondary) transparent;\n }\n\n #${scrollRegionId}::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-thumb {\n background: var(--theme-secondary);\n border-radius: 999px;\n border: 2px solid transparent;\n background-clip: padding-box;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-thumb:hover {\n background: var(--theme-textLight);\n background-clip: padding-box;\n }\n `}\n </style>\n <div\n id={scrollRegionId}\n role=\"region\"\n aria-label={ariaLabel}\n className={cx(\n \"w-full max-w-full min-w-0 overflow-x-auto overflow-y-hidden\",\n \"rounded-[20px] border-2 border-solid border-[var(--theme-background)]\",\n \"bg-[var(--theme-surface)] shadow-none\",\n )}\n >\n <table className=\"w-max min-w-full max-w-none border-separate border-spacing-0\">\n <thead>\n <tr>\n {desktopColumns.map((column, columnIndex) => {\n const align =\n column.align ??\n (column.type === \"actions\" ? \"right\" : \"left\");\n\n return (\n <th\n key={getColumnKey(column, columnIndex)}\n colSpan={column.headerColSpan ?? column.colSpan}\n scope=\"col\"\n className={[\n \"whitespace-nowrap border-b border-[var(--theme-background)]\",\n \"bg-[var(--theme-background)] px-2.5 py-2 text-[11px] font-bold\",\n \"uppercase tracking-[0.08em] text-[var(--theme-textLight)]\",\n getAlignClassName(align),\n ].join(\" \")}\n style={{\n width: column.width,\n minWidth: column.minWidth,\n }}\n >\n {!column.hideLabel ? column.label : null}\n </th>\n );\n })}\n {actions ? (\n <th\n scope=\"col\"\n className={[\n \"whitespace-nowrap border-b border-[var(--theme-background)]\",\n \"bg-[var(--theme-background)] px-2.5 py-2.5 text-center text-[11px] font-bold\",\n \"uppercase tracking-[0.08em] text-[var(--theme-textLight)]\",\n ].join(\" \")}\n style={{\n ...actionsColumnSizeStyle,\n ...(shouldStickActionsColumn\n ? getStickyActionsCellStyle(\n \"var(--theme-background)\",\n undefined,\n true,\n )\n : {}),\n }}\n >\n {resolvedLabels.moreActionsLabel}\n </th>\n ) : null}\n </tr>\n </thead>\n <tbody>\n {items.map((item, rowIndex) => {\n const rowActions = renderActions(item, rowIndex);\n const isAlternateRow = rowIndex % 2 !== 0;\n const stickyRowBackgroundImage =\n rowIndex % 2 === 0\n ? undefined\n : \"linear-gradient(var(--theme-background), var(--theme-background))\";\n\n return (\n <tr\n key={getRowId(item, rowIndex, getCustomRowId)}\n className={\n isAlternateRow\n ? \"bg-[var(--theme-background)]\"\n : \"bg-[var(--theme-surface)]\"\n }\n >\n {desktopColumns.map((column, columnIndex) => {\n return renderDesktopCell(\n column,\n item,\n rowIndex,\n columnIndex,\n );\n })}\n {actions ? (\n <td\n className={[\n \"border-b border-[var(--theme-background)] px-2.5 py-0.5 text-right align-middle\",\n ].join(\" \")}\n style={{\n ...actionsColumnSizeStyle,\n ...(shouldStickActionsColumn\n ? getStickyActionsCellStyle(\n \"var(--theme-surface)\",\n stickyRowBackgroundImage,\n )\n : {}),\n }}\n >\n {rowActions}\n </td>\n ) : null}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </>\n )\n ) : null}\n\n {hasRows && shouldRenderFooter ? (\n <div className=\"flex flex-wrap items-center justify-between gap-3 pt-1\">\n {shouldShowPaginationControls ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n variant=\"secondary\"\n onClick={() => onInternalPageChange(1)}\n disabled={!canGoToFirstPage}\n aria-label={resolvedLabels.firstPageLabel}\n style={paginationButtonStyle}\n >\n {1}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={() => onInternalPageChange(normalizedPage - 1)}\n disabled={!canGoToPreviousPage}\n aria-label={resolvedLabels.previousPageLabel}\n style={paginationButtonStyle}\n >\n <ChevronIcon direction=\"left\" />\n </Button>\n <Button\n variant=\"secondary\"\n disabled\n aria-label={`Page ${normalizedPage} of ${totalPages}`}\n style={paginationButtonStyle}\n >\n {normalizedPage}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={() => onInternalPageChange(normalizedPage + 1)}\n disabled={!canGoToNextPage}\n aria-label={resolvedLabels.nextPageLabel}\n style={paginationButtonStyle}\n >\n <ChevronIcon direction=\"right\" />\n </Button>\n <Button\n variant=\"secondary\"\n onClick={() => onInternalPageChange(totalPages)}\n disabled={!canGoToLastPage}\n aria-label={resolvedLabels.lastPageLabel}\n style={lastPageButtonStyle}\n >\n {totalPages}\n </Button>\n </div>\n ) : null}\n\n <div\n className={cx(\n \"flex items-center gap-2.5 text-[13px] text-[var(--theme-textLight)]\",\n shouldShowRowsPerPageControl ? \"ml-auto\" : \"\",\n )}\n >\n {shouldShowRowsPerPageControl ? (\n <>\n {resolvedLabels.rowsPerPageLabel ? (\n <span>{resolvedLabels.rowsPerPageLabel}</span>\n ) : null}\n <div className=\"w-[84px]\">\n <Select\n value={String(pageSize)}\n onChange={(event) =>\n onInternalPageSizeChange(\n Number(event.currentTarget.value),\n )\n }\n size=\"sm\"\n options={normalizedPageSizeOptions.map((opt) => ({\n label: String(opt),\n value: String(opt),\n }))}\n />\n </div>\n </>\n ) : null}\n </div>\n </div>\n ) : null}\n\n <Modal\n isOpen={isSettingsModalOpen}\n onClose={() => setIsSettingsModalOpen(false)}\n title={resolvedLabels.settingsModalTitle}\n maxWidth={560}\n bodyStyle={{\n display: \"grid\",\n minWidth: 0,\n minHeight: 0,\n gap: 0,\n overflowY: \"auto\",\n paddingRight: 8,\n paddingTop: 8,\n }}\n >\n <section className=\"grid gap-3\">\n <strong className=\"text-sm text-[var(--theme-text)]\">\n {resolvedLabels.tableInfoSectionTitle}\n </strong>\n <div\n className={cx(\n \"grid grid-cols-4 gap-4 rounded-[var(--ui-radius,12px)] p-4\",\n \"border-2 border-[var(--theme-background)] bg-[var(--theme-surface)]\",\n )}\n >\n <div className=\"grid gap-1\">\n <span className=\"text-xs text-[var(--theme-textLight)]\">\n {resolvedLabels.totalItemsInfoLabel}\n </span>\n <strong className=\"font-medium text-[var(--theme-text)]\">\n {totalItemCount}\n </strong>\n </div>\n <div className=\"grid gap-1\">\n <span className=\"text-xs text-[var(--theme-textLight)]\">\n {resolvedLabels.totalPagesInfoLabel}\n </span>\n <strong className=\"font-medium text-[var(--theme-text)]\">\n {totalPages}\n </strong>\n </div>\n <div className=\"grid gap-1\">\n <span className=\"text-xs text-[var(--theme-textLight)]\">\n {resolvedLabels.currentPageItemsInfoLabel}\n </span>\n <strong className=\"font-medium text-[var(--theme-text)]\">\n {currentPageItemCount}\n </strong>\n </div>\n <div className=\"grid gap-1\">\n <span className=\"text-xs text-[var(--theme-textLight)]\">\n {resolvedLabels.currentPageInfoLabel}\n </span>\n <strong className=\"font-medium text-[var(--theme-text)]\">\n {normalizedPage}\n </strong>\n </div>\n </div>\n </section>\n\n <div className=\"py-[18px]\">\n <Separator />\n </div>\n\n <section className=\"grid gap-3\">\n <strong className=\"text-sm text-[var(--theme-text)]\">\n {resolvedLabels.downloadSectionTitle}\n </strong>\n <div className=\"flex flex-wrap gap-2.5\">\n <Button\n variant=\"secondary\"\n onClick={handleDownloadCsv}\n disabled={!hasRows}\n >\n {resolvedLabels.downloadCsvLabel}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={handleDownloadXls}\n disabled={!hasRows}\n >\n {resolvedLabels.downloadXlsLabel}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={handleDownloadPdf}\n disabled={!hasRows}\n >\n {resolvedLabels.downloadPdfLabel}\n </Button>\n </div>\n </section>\n </Modal>\n </div>\n );\n}\n","import { isValidElement, type ReactNode } from 'react';\n\nimport type {\n TableAction,\n TableActionSource,\n TableColumn,\n TableLabels,\n} from './types';\n\nexport const DEFAULT_COLLAPSE_BELOW = 768;\nexport const DEFAULT_MAX_INLINE_ACTIONS = 2;\nexport const DEFAULT_PAGE_SIZE = 10;\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50];\n\ntype ResolvedTableLabels = Required<Omit<TableLabels, 'pageLabel' | 'resultCountLabel'>> & {\n pageLabel: NonNullable<TableLabels['pageLabel']>;\n resultCountLabel: NonNullable<TableLabels['resultCountLabel']>;\n};\n\nconst DEFAULT_TABLE_LABELS: ResolvedTableLabels = {\n searchPlaceholder: 'Search rows',\n emptyMessage: 'No rows available.',\n noResultsMessage: 'No rows match the current search.',\n loadingMessage: 'Loading rows...',\n errorMessage: 'Could not load rows.',\n firstPageLabel: 'First page',\n previousPageLabel: 'Previous',\n nextPageLabel: 'Next',\n lastPageLabel: 'Last page',\n rowsPerPageLabel: '',\n actionsMenuLabel: 'More actions',\n moreActionsLabel: 'More actions',\n retryLabel: 'Retry',\n settingsButtonLabel: 'Table settings',\n settingsModalTitle: 'Table settings',\n tableInfoSectionTitle: 'Table details',\n totalPagesInfoLabel: 'Total pages',\n totalItemsInfoLabel: 'Total items',\n currentPageInfoLabel: 'Current page',\n currentPageItemsInfoLabel: 'Items in current page',\n downloadSectionTitle: 'Download current page',\n downloadCsvLabel: 'CSV',\n downloadXlsLabel: 'XLS',\n downloadPdfLabel: 'PDF',\n pageLabel: (page, totalPages) => `Page ${page} of ${totalPages}`,\n resultCountLabel: (start, end, totalItems) => `Showing ${start}-${end} of ${totalItems}`,\n};\n\nconst getNodeText = (node: ReactNode): string => {\n if (node == null || typeof node === 'boolean') {\n return '';\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n\n if (Array.isArray(node)) {\n return node.map((entry) => getNodeText(entry)).join(' ');\n }\n\n if (isValidElement(node)) {\n const element = node as React.ReactElement<{ children?: ReactNode }>;\n return getNodeText(element.props.children);\n }\n\n return '';\n};\n\nexport const normalizeTableText = (value: unknown): string => {\n if (value == null || typeof value === 'boolean') {\n return '';\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value);\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeTableText(entry)).join(' ');\n }\n\n if (isValidElement(value)) {\n return getNodeText(value);\n }\n\n return '';\n};\n\nconst resolveActionFlag = <TItem>(\n value: boolean | ((item: TItem, index: number) => boolean) | undefined,\n item: TItem,\n index: number,\n): boolean => {\n if (typeof value === 'function') {\n return value(item, index);\n }\n\n return Boolean(value);\n};\n\nexport const mergeTableLabels = (labels?: TableLabels): ResolvedTableLabels => ({\n searchPlaceholder: labels?.searchPlaceholder ?? DEFAULT_TABLE_LABELS.searchPlaceholder,\n emptyMessage: labels?.emptyMessage ?? DEFAULT_TABLE_LABELS.emptyMessage,\n noResultsMessage: labels?.noResultsMessage ?? DEFAULT_TABLE_LABELS.noResultsMessage,\n loadingMessage: labels?.loadingMessage ?? DEFAULT_TABLE_LABELS.loadingMessage,\n errorMessage: labels?.errorMessage ?? DEFAULT_TABLE_LABELS.errorMessage,\n firstPageLabel: labels?.firstPageLabel ?? DEFAULT_TABLE_LABELS.firstPageLabel,\n previousPageLabel: labels?.previousPageLabel ?? DEFAULT_TABLE_LABELS.previousPageLabel,\n nextPageLabel: labels?.nextPageLabel ?? DEFAULT_TABLE_LABELS.nextPageLabel,\n lastPageLabel: labels?.lastPageLabel ?? DEFAULT_TABLE_LABELS.lastPageLabel,\n rowsPerPageLabel: labels?.rowsPerPageLabel ?? DEFAULT_TABLE_LABELS.rowsPerPageLabel,\n actionsMenuLabel: labels?.actionsMenuLabel ?? DEFAULT_TABLE_LABELS.actionsMenuLabel,\n moreActionsLabel: labels?.moreActionsLabel ?? DEFAULT_TABLE_LABELS.moreActionsLabel,\n retryLabel: labels?.retryLabel ?? DEFAULT_TABLE_LABELS.retryLabel,\n settingsButtonLabel: labels?.settingsButtonLabel ?? DEFAULT_TABLE_LABELS.settingsButtonLabel,\n settingsModalTitle: labels?.settingsModalTitle ?? DEFAULT_TABLE_LABELS.settingsModalTitle,\n tableInfoSectionTitle: labels?.tableInfoSectionTitle ?? DEFAULT_TABLE_LABELS.tableInfoSectionTitle,\n totalPagesInfoLabel: labels?.totalPagesInfoLabel ?? DEFAULT_TABLE_LABELS.totalPagesInfoLabel,\n totalItemsInfoLabel: labels?.totalItemsInfoLabel ?? DEFAULT_TABLE_LABELS.totalItemsInfoLabel,\n currentPageInfoLabel: labels?.currentPageInfoLabel ?? DEFAULT_TABLE_LABELS.currentPageInfoLabel,\n currentPageItemsInfoLabel: labels?.currentPageItemsInfoLabel ?? DEFAULT_TABLE_LABELS.currentPageItemsInfoLabel,\n downloadSectionTitle: labels?.downloadSectionTitle ?? DEFAULT_TABLE_LABELS.downloadSectionTitle,\n downloadCsvLabel: labels?.downloadCsvLabel ?? DEFAULT_TABLE_LABELS.downloadCsvLabel,\n downloadXlsLabel: labels?.downloadXlsLabel ?? DEFAULT_TABLE_LABELS.downloadXlsLabel,\n downloadPdfLabel: labels?.downloadPdfLabel ?? DEFAULT_TABLE_LABELS.downloadPdfLabel,\n pageLabel: labels?.pageLabel ?? DEFAULT_TABLE_LABELS.pageLabel,\n resultCountLabel: labels?.resultCountLabel ?? DEFAULT_TABLE_LABELS.resultCountLabel,\n});\n\nexport const sanitizePageSizeOptions = (pageSizeOptions: number[] | undefined, pageSize: number): number[] => {\n const sourceOptions = (pageSizeOptions ?? DEFAULT_PAGE_SIZE_OPTIONS).filter((option) => {\n return Number.isFinite(option) && option > 0;\n });\n const nextOptions = sourceOptions.length > 0 ? sourceOptions : DEFAULT_PAGE_SIZE_OPTIONS;\n const normalizedPageSize = Number.isFinite(pageSize) && pageSize > 0 ? Math.floor(pageSize) : DEFAULT_PAGE_SIZE;\n\n return Array.from(new Set([...nextOptions, normalizedPageSize])).sort((left, right) => left - right);\n};\n\nexport const clampPage = (page: number, totalPages: number): number => {\n const normalizedTotal = Math.max(1, Math.floor(totalPages));\n const normalizedPage = Number.isFinite(page) ? Math.floor(page) : 1;\n\n return Math.min(Math.max(normalizedPage, 1), normalizedTotal);\n};\n\nexport const getColumnKey = <TItem>(column: TableColumn<TItem>, index: number): string => {\n if (column.id) {\n return column.id;\n }\n\n if (column.accessor) {\n return String(column.accessor);\n }\n\n return `column-${index}`;\n};\n\nexport const getRowId = <TItem>(\n item: TItem,\n index: number,\n getCustomRowId?: (item: TItem, index: number) => string,\n): string => {\n if (getCustomRowId) {\n return getCustomRowId(item, index);\n }\n\n const fallbackId = (item as { id?: unknown }).id;\n\n if (typeof fallbackId === 'string' || typeof fallbackId === 'number') {\n return String(fallbackId);\n }\n\n return `row-${index}`;\n};\n\nexport const resolveColumnContent = <TItem>(\n column: TableColumn<TItem>,\n item: TItem,\n index: number,\n): ReactNode => {\n if (column.Cell) {\n return column.Cell(item, index);\n }\n\n if (column.accessor) {\n return item[column.accessor] as ReactNode;\n }\n\n return null;\n};\n\nexport const resolveColumnSearchValue = <TItem>(\n column: TableColumn<TItem>,\n item: TItem,\n index: number,\n): string => {\n if (column.getSearchValue) {\n return column.getSearchValue(item, index);\n }\n\n if (column.accessor) {\n return normalizeTableText(item[column.accessor]);\n }\n\n return normalizeTableText(resolveColumnContent(column, item, index));\n};\n\nexport const resolveTableActions = <TItem>(\n actionsSource: TableActionSource<TItem> | undefined,\n item: TItem,\n index: number,\n): Array<TableAction<TItem>> => {\n if (!actionsSource) {\n return [];\n }\n\n const actions = typeof actionsSource === 'function' ? actionsSource(item, index) : actionsSource;\n\n return actions.filter((action) => !resolveActionFlag(action.hidden, item, index));\n};\n\nexport const isActionDisabled = <TItem>(action: TableAction<TItem>, item: TItem, index: number): boolean => {\n return resolveActionFlag(action.disabled, item, index);\n};\n\nexport const hasRenderableContent = (content: ReactNode): boolean => {\n if (content == null || typeof content === 'boolean') {\n return false;\n }\n\n if (typeof content === 'string') {\n return content.trim().length > 0;\n }\n\n if (typeof content === 'number') {\n return true;\n }\n\n if (Array.isArray(content)) {\n return content.some((entry) => hasRenderableContent(entry));\n }\n\n return true;\n};\n","import type { TableColumn } from './types';\nimport { normalizeTableText, resolveColumnContent } from './utils';\n\ntype TableDownloadMatrix = {\n headers: string[];\n rows: string[][];\n};\n\nconst escapeCsvValue = (value: string): string => {\n if (/[\",\\n;]/.test(value)) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n\n return value;\n};\n\nconst escapeHtml = (value: string): string => {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n};\n\nconst sanitizeFileName = (value: string): string => {\n return value\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '') || 'table';\n};\n\nconst normalizePdfText = (value: string): string => {\n return value\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\(/g, '\\\\(')\n .replace(/\\)/g, '\\\\)')\n .replace(/[^\\x20-\\x7E]/g, '?');\n};\n\nconst wrapPdfLine = (value: string, maxLength: number): string[] => {\n if (value.length <= maxLength) {\n return [value];\n }\n\n const words = value.split(' ');\n const lines: string[] = [];\n let currentLine = '';\n\n words.forEach((word) => {\n const nextLine = currentLine ? `${currentLine} ${word}` : word;\n\n if (nextLine.length <= maxLength) {\n currentLine = nextLine;\n return;\n }\n\n if (currentLine) {\n lines.push(currentLine);\n }\n\n currentLine = word;\n });\n\n if (currentLine) {\n lines.push(currentLine);\n }\n\n return lines;\n};\n\nconst downloadBlob = (blob: Blob, fileName: string) => {\n const objectUrl = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.href = objectUrl;\n link.download = fileName;\n link.rel = 'noopener';\n link.style.display = 'none';\n\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n window.setTimeout(() => {\n window.URL.revokeObjectURL(objectUrl);\n }, 0);\n};\n\nconst buildPdfDocument = (lines: string[]): string => {\n const pageWidth = 612;\n const pageHeight = 792;\n const marginX = 40;\n const marginTop = 752;\n const lineHeight = 14;\n const linesPerPage = 48;\n const pages: string[][] = [];\n\n for (let index = 0; index < lines.length; index += linesPerPage) {\n pages.push(lines.slice(index, index + linesPerPage));\n }\n\n const objects: string[] = [];\n const pageObjectNumbers: number[] = [];\n const contentObjectNumbers: number[] = [];\n const fontObjectNumber = 3;\n let nextObjectNumber = 4;\n\n pages.forEach(() => {\n pageObjectNumbers.push(nextObjectNumber);\n nextObjectNumber += 1;\n contentObjectNumbers.push(nextObjectNumber);\n nextObjectNumber += 1;\n });\n\n objects[1] = '<< /Type /Catalog /Pages 2 0 R >>';\n objects[2] = `<< /Type /Pages /Count ${pages.length} /Kids [${pageObjectNumbers.map((objectNumber) => `${objectNumber} 0 R`).join(' ')}] >>`;\n objects[fontObjectNumber] = '<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>';\n\n pages.forEach((pageLines, index) => {\n const content = `BT\\n/F1 10 Tf\\n${marginX} ${marginTop} Td\\n${lineHeight} TL\\n${pageLines.map((line, lineIndex) => {\n const normalizedLine = normalizePdfText(line);\n return `${lineIndex === 0 ? '' : 'T*\\n'}(${normalizedLine}) Tj`;\n }).join('\\n')}\\nET`;\n const contentObjectNumber = contentObjectNumbers[index];\n const pageObjectNumber = pageObjectNumbers[index];\n\n objects[contentObjectNumber] = `<< /Length ${content.length} >>\\nstream\\n${content}\\nendstream`;\n objects[pageObjectNumber] = `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${pageWidth} ${pageHeight}] /Resources << /Font << /F1 ${fontObjectNumber} 0 R >> >> /Contents ${contentObjectNumber} 0 R >>`;\n });\n\n let pdf = '%PDF-1.4\\n';\n const offsets: number[] = [0];\n\n for (let index = 1; index < objects.length; index += 1) {\n const objectBody = objects[index];\n\n if (!objectBody) {\n continue;\n }\n\n offsets[index] = pdf.length;\n pdf += `${index} 0 obj\\n${objectBody}\\nendobj\\n`;\n }\n\n const xrefStart = pdf.length;\n pdf += `xref\\n0 ${objects.length}\\n`;\n pdf += '0000000000 65535 f \\n';\n\n for (let index = 1; index < objects.length; index += 1) {\n pdf += `${String(offsets[index] ?? 0).padStart(10, '0')} 00000 n \\n`;\n }\n\n pdf += `trailer\\n<< /Size ${objects.length} /Root 1 0 R >>\\nstartxref\\n${xrefStart}\\n%%EOF`;\n\n return pdf;\n};\n\nexport const buildTableDownloadMatrix = <TItem>(\n columns: Array<TableColumn<TItem>>,\n items: Array<TItem>,\n): TableDownloadMatrix => {\n const exportableColumns = columns.filter((column) => {\n return column.type !== 'actions' && (column.accessor || column.Cell || column.label);\n });\n const headers = exportableColumns.map((column, index) => {\n const labelText = normalizeTableText(column.label).trim();\n\n if (labelText.length > 0) {\n return labelText;\n }\n\n if (column.accessor) {\n return String(column.accessor);\n }\n\n return `Column ${index + 1}`;\n });\n const rows = items.map((item, rowIndex) => {\n return exportableColumns.map((column) => {\n const searchValue = column.getSearchValue?.(item, rowIndex).trim();\n\n if (searchValue && searchValue.length > 0) {\n return searchValue;\n }\n\n const contentText = normalizeTableText(resolveColumnContent(column, item, rowIndex)).trim();\n\n if (contentText.length > 0) {\n return contentText;\n }\n\n if (column.accessor) {\n return normalizeTableText(item[column.accessor]).trim();\n }\n\n return '';\n });\n });\n\n return {\n headers,\n rows,\n };\n};\n\nexport const buildTableDownloadFileBaseName = (tableName: string, page: number): string => {\n return `${sanitizeFileName(tableName)}-page-${page}`;\n};\n\nexport const downloadTableAsCsv = (matrix: TableDownloadMatrix, fileBaseName: string) => {\n const lines = [\n matrix.headers.map((header) => escapeCsvValue(header)).join(','),\n ...matrix.rows.map((row) => row.map((value) => escapeCsvValue(value)).join(',')),\n ];\n const blob = new Blob([`\\uFEFF${lines.join('\\n')}`], { type: 'text/csv;charset=utf-8' });\n\n downloadBlob(blob, `${fileBaseName}.csv`);\n};\n\nexport const downloadTableAsXls = (matrix: TableDownloadMatrix, fileBaseName: string) => {\n const html = [\n '<html><head><meta charset=\"utf-8\" /></head><body><table border=\"1\">',\n '<thead><tr>',\n ...matrix.headers.map((header) => `<th>${escapeHtml(header)}</th>`),\n '</tr></thead><tbody>',\n ...matrix.rows.map((row) => {\n return `<tr>${row.map((value) => `<td>${escapeHtml(value)}</td>`).join('')}</tr>`;\n }),\n '</tbody></table></body></html>',\n ].join('');\n const blob = new Blob([html], { type: 'application/vnd.ms-excel;charset=utf-8' });\n\n downloadBlob(blob, `${fileBaseName}.xls`);\n};\n\nexport const downloadTableAsPdf = (\n matrix: TableDownloadMatrix,\n fileBaseName: string,\n title: string,\n page: number,\n totalPages: number,\n) => {\n const lines = [\n title,\n `Page ${page} of ${totalPages}`,\n `Rows in export: ${matrix.rows.length}`,\n '',\n ...wrapPdfLine(matrix.headers.join(' | '), 88),\n ...wrapPdfLine('-'.repeat(Math.min(88, Math.max(20, matrix.headers.join(' | ').length))), 88),\n ...matrix.rows.flatMap((row) => wrapPdfLine(row.join(' | '), 88)),\n ];\n const pdf = buildPdfDocument(lines);\n const blob = new Blob([pdf], { type: 'application/pdf' });\n\n downloadBlob(blob, `${fileBaseName}.pdf`);\n};","import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS } from '../foundation';\nimport { TableBase } from '../componentsBase/table/TableBase';\nimport type { SharedTableProps, TableAsyncLoadContext, TableAsyncLoadResult } from '../componentsBase/table/types';\nimport { DEFAULT_PAGE_SIZE, clampPage, sanitizePageSizeOptions } from '../componentsBase/table/utils';\n\nexport interface TableAsyncProps<TItem> extends SharedTableProps<TItem> {\n loadItems: (query: string, context: TableAsyncLoadContext) => Promise<TableAsyncLoadResult<TItem>>;\n cacheUniqs?: ReadonlyArray<unknown>;\n searchDebounceMs?: number;\n keepPreviousData?: boolean;\n}\n\nconst areUnknownArraysEqual = (left: ReadonlyArray<unknown>, right: ReadonlyArray<unknown>): boolean => {\n if (left.length !== right.length) {\n return false;\n }\n\n return left.every((entry, index) => Object.is(entry, right[index]));\n};\n\nexport function TableAsync<TItem>({\n loadItems,\n desktopColumns,\n mobileColumns,\n defaultSearchValue = '',\n defaultPage = 1,\n defaultPageSize = DEFAULT_PAGE_SIZE,\n pageSizeOptions,\n searchable = true,\n cacheUniqs = [],\n searchDebounceMs = DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS,\n keepPreviousData = true,\n onSearchValueChange,\n onPageChange,\n onPageSizeChange,\n ...props\n}: TableAsyncProps<TItem>) {\n const initialPageSizeOptions = useMemo(() => {\n return sanitizePageSizeOptions(pageSizeOptions, defaultPageSize);\n }, [defaultPageSize, pageSizeOptions]);\n const [searchValue, setSearchValue] = useState(defaultSearchValue);\n const [debouncedSearchValue, setDebouncedSearchValue] = useState(defaultSearchValue);\n const [page, setPage] = useState(Math.max(1, Math.floor(defaultPage)));\n const [pageSize, setPageSize] = useState(initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE);\n const [items, setItems] = useState<Array<TItem>>([]);\n const [totalPages, setTotalPages] = useState(1);\n const [totalItems, setTotalItems] = useState<number | undefined>(undefined);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [reloadKey, setReloadKey] = useState(0);\n const loadItemsRef = useRef(loadItems);\n const cacheUniqsRef = useRef(cacheUniqs);\n const activeControllerRef = useRef<AbortController | null>(null);\n const requestVersionRef = useRef(0);\n\n loadItemsRef.current = loadItems;\n\n useEffect(() => {\n if (initialPageSizeOptions.includes(pageSize)) {\n return;\n }\n\n const nextPageSize = initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE;\n setPageSize(nextPageSize);\n }, [initialPageSizeOptions, pageSize]);\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n setDebouncedSearchValue(searchValue);\n }, searchDebounceMs);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [searchDebounceMs, searchValue]);\n\n useEffect(() => {\n if (areUnknownArraysEqual(cacheUniqsRef.current, cacheUniqs)) {\n return;\n }\n\n cacheUniqsRef.current = cacheUniqs;\n setPage(1);\n setReloadKey((currentValue) => currentValue + 1);\n }, [cacheUniqs]);\n\n useEffect(() => {\n requestVersionRef.current += 1;\n const currentRequestVersion = requestVersionRef.current;\n const controller = new AbortController();\n\n activeControllerRef.current?.abort();\n activeControllerRef.current = controller;\n\n if (!keepPreviousData) {\n setItems([]);\n }\n\n setLoading(true);\n setError(null);\n\n void loadItemsRef.current(searchable ? debouncedSearchValue : '', {\n page,\n pageSize,\n signal: controller.signal,\n })\n .then((result) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setItems(result.items);\n setTotalPages(Math.max(1, result.totalPages));\n setTotalItems(result.totalItems);\n })\n .catch((loadError: unknown) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n if (loadError instanceof Error && loadError.name === 'AbortError') {\n return;\n }\n\n setError(loadError instanceof Error ? loadError.message : 'Could not load rows.');\n })\n .finally(() => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setLoading(false);\n });\n }, [debouncedSearchValue, keepPreviousData, page, pageSize, reloadKey, searchable, ...cacheUniqs]);\n\n useEffect(() => {\n return () => {\n activeControllerRef.current?.abort();\n };\n }, []);\n\n const normalizedPage = clampPage(page, totalPages);\n\n useEffect(() => {\n if (normalizedPage === page) {\n return;\n }\n\n setPage(normalizedPage);\n onPageChange?.(normalizedPage);\n }, [normalizedPage, onPageChange, page]);\n\n return (\n <TableBase\n {...props}\n desktopColumns={desktopColumns}\n mobileColumns={mobileColumns}\n searchable={searchable}\n pageSizeOptions={pageSizeOptions}\n items={items}\n loading={loading}\n error={error}\n onRetry={() => setReloadKey((currentValue) => currentValue + 1)}\n searchValue={searchValue}\n page={normalizedPage}\n pageSize={pageSize}\n totalPages={totalPages}\n totalItems={totalItems}\n onSearchChange={(nextValue) => {\n setSearchValue(nextValue);\n setPage(1);\n onSearchValueChange?.(nextValue);\n onPageChange?.(1);\n }}\n onInternalPageChange={(nextPage) => {\n const normalizedNextPage = clampPage(nextPage, totalPages);\n setPage(normalizedNextPage);\n onPageChange?.(normalizedNextPage);\n }}\n onInternalPageSizeChange={(nextPageSize) => {\n setPageSize(nextPageSize);\n setPage(1);\n onPageSizeChange?.(nextPageSize);\n onPageChange?.(1);\n }}\n />\n );\n}","'use client';\n\nimport type { ReactNode, TextareaHTMLAttributes } from 'react';\n\nimport {\n cx,\n DISABLED_FIELD_OPACITY,\n getControlMetrics,\n type ControlSize,\n} from '../foundation';\nimport { ControlFrame } from './Input';\n\nexport interface TextareaProps extends Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'dangerouslySetInnerHTML'\n> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n size?: ControlSize;\n}\n\nexport function Textarea({\n label,\n hint,\n error,\n size = 'md',\n id,\n disabled,\n style,\n rows = 5,\n placeholder,\n ...rest\n}: TextareaProps) {\n const floatingPlaceholder =\n placeholder !== undefined && placeholder !== '' ? placeholder : undefined;\n const resolvedPlaceholder = placeholder ?? ' ';\n\n const placeholderClass = floatingPlaceholder\n ? 'placeholder-transparent'\n : 'placeholder-[var(--theme-textLight)]';\n\n const isPopulated =\n rest.value !== undefined && rest.value !== '' && rest.value !== null;\n\n const textarea = (\n <textarea\n {...rest}\n id={id}\n disabled={disabled}\n rows={rows}\n placeholder={resolvedPlaceholder}\n className={cx(\n 'peer w-full min-w-0 box-border resize-y rounded-2xl border border-solid bg-[var(--theme-background)]',\n 'text-[var(--theme-text)] outline-none transition-[border-color]',\n 'duration-150 disabled:cursor-not-allowed',\n placeholderClass,\n error ? 'border-[var(--theme-negative)]' : 'border-transparent',\n )}\n style={{\n boxShadow: error ? '0 0 0 3px var(--theme-negative)' : 'none',\n fontSize: getControlMetrics(size).fontSize,\n lineHeight: getControlMetrics(size).lineHeight,\n padding: `${getControlMetrics(size).paddingY + 2}px ${getControlMetrics(size).paddingX}px ${getControlMetrics(size).paddingY + 6}px`,\n ...style,\n ...(disabled ? { opacity: DISABLED_FIELD_OPACITY } : {}),\n }}\n />\n );\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={error}\n htmlFor={id}\n required={rest.required}\n alignLabel=\"top\"\n size={size}\n hasValue={isPopulated}\n floatingPlaceholder={floatingPlaceholder}\n >\n {textarea}\n </ControlFrame>\n );\n}\n"],"mappings":"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","names":["lato_latin_ext_400_normal_default","lato_latin_400_normal_default","lato_latin_ext_700_normal_default","lato_latin_700_normal_default","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime","_a","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","_a","_b","_c","_d","_e","_f","_g","_h","_i","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","_a","import_react","import_react","import_react_dom","import_react","import_jsx_runtime","import_jsx_runtime","_a","import_react","import_jsx_runtime","areUnknownArraysEqual","_a","import_jsx_runtime"]}
|