smartsell-ui-kit 0.1.6 → 0.1.7
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 +12 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +12 -27
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["#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","../src/index.ts"],"sourcesContent":["\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 [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(pageSizeOptions, pageSize);\n const isCollapsed = containerWidth !== null ? containerWidth < collapseBelow : false;\n const mobileGridColumnCount = 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 = 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 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 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 = rowIndex % 2 === 0 ? theme.colors.surface : alternateSurfaceColor;\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.label}\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 = 420;\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}","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';"],"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","jsxs","jsx","jsxs","useEffect","jsx","jsxs","useEffect","useMemo","useEffect","useMemo","useState","jsx","jsxs","useMemo","useState","useEffect","_a","jsx","jsxs","useMemo","useEffect","useMemo","useRef","useState","useEffect","useId","useRef","useState","Fragment","jsx","jsxs","useId","useRef","useState","useEffect","jsx","jsxs","FIELD_HEIGHT_CLASSNAMES","FIELD_TEXT_CLASSNAMES","FIELD_PADDING_X_CLASSNAMES","useRef","useState","useMemo","useEffect","_a","jsx","useEffect","useId","useRef","useState","Fragment","jsx","jsxs","FIELD_HEIGHT_CLASSNAMES","FIELD_TEXT_CLASSNAMES","useId","useState","useRef","useEffect","_a","_b","_c","_d","_e","_f","_g","_h","_i","isValidElement","isValidElement","jsx","useEffect","useMemo","useRef","useState","jsx","jsx","jsxs","useState","useRef","useMemo","useEffect","_a","useEffect","useMemo","useState","useEffect","useId","useRef","useState","isValidElement","Fragment","jsx","jsxs","useState","useRef","useEffect","useId","useRef","useState","useEffect","jsxs","jsx","Fragment","jsx","useMemo","useState","useEffect","_a","useEffect","useMemo","useRef","useState","jsx","areUnknownArraysEqual","useMemo","useState","useRef","useEffect","_a","jsx"]}
|
|
1
|
+
{"version":3,"sources":["#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","../src/index.ts"],"sourcesContent":["\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}","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';"],"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","jsxs","jsx","jsxs","useEffect","jsx","jsxs","useEffect","useMemo","useEffect","useMemo","useState","jsx","jsxs","useMemo","useState","useEffect","_a","jsx","jsxs","useMemo","useEffect","useMemo","useRef","useState","useEffect","useId","useRef","useState","Fragment","jsx","jsxs","useId","useRef","useState","useEffect","jsx","jsxs","FIELD_HEIGHT_CLASSNAMES","FIELD_TEXT_CLASSNAMES","FIELD_PADDING_X_CLASSNAMES","useRef","useState","useMemo","useEffect","_a","jsx","useEffect","useId","useRef","useState","Fragment","jsx","jsxs","FIELD_HEIGHT_CLASSNAMES","FIELD_TEXT_CLASSNAMES","useId","useState","useRef","useEffect","_a","_b","_c","_d","_e","_f","_g","_h","_i","isValidElement","isValidElement","jsx","useEffect","useMemo","useRef","useState","jsx","jsx","jsxs","useState","useRef","useMemo","useEffect","_a","useEffect","useMemo","useState","useEffect","useId","useRef","useState","isValidElement","Fragment","jsx","jsxs","useState","useRef","useEffect","useId","useRef","useState","useEffect","jsxs","jsx","Fragment","jsx","useMemo","useState","useEffect","_a","useEffect","useMemo","useRef","useState","jsx","areUnknownArraysEqual","useMemo","useState","useRef","useEffect","_a","jsx"]}
|