smartsell-ui-kit 0.1.19 → 0.1.20

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.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/color.ts","../src/foundation/componentState.ts","../src/foundation/controlSize.ts","../src/foundation/theme.ts","../src/components/Button.tsx","../src/components/Alert.tsx","../src/components/feedbackPrimitives.tsx","../src/components/Card.tsx","../src/components/CardSmall.tsx","../src/components/Checkbox.tsx","../src/components/ComposableModal.tsx","../src/components/Modal.tsx","../src/components/Input.tsx","../src/components/DatePicker.tsx","../src/components/IconButton.tsx","../src/components/Loading.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/ResultState.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(\":root {\\n --ui-kit-font-family:\\n \\\"Lato\\\",\\n system-ui,\\n sans-serif;\\n}\\n.ui-kit-root {\\n border-width: 0;\\n border-style: solid;\\n box-shadow: none;\\n font-family: var(--ui-kit-font-family);\\n line-height: 1.5;\\n -webkit-text-size-adjust: 100%;\\n -moz-tab-size: 4;\\n -o-tab-size: 4;\\n tab-size: 4;\\n -webkit-tap-highlight-color: transparent;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n.ui-kit-root:where(button, input, textarea, select),\\n.ui-kit-root :where(button, input, textarea, select, option) {\\n border-width: 0;\\n border-style: solid;\\n box-shadow: none;\\n font-family: var(--ui-kit-font-family);\\n}\\n.ui-kit-sr-only {\\n position: absolute;\\n height: 1px;\\n width: 1px;\\n overflow: hidden;\\n white-space: nowrap;\\n border-width: 0px;\\n padding: 0px;\\n clip: rect(0, 0, 0, 0);\\n margin: -1px;\\n}\\n.ui-kit-floating-placeholder {\\n color: var(--theme-textLight);\\n font-size: var(--floating-label-font-size);\\n font-weight: 400;\\n line-height: var(--floating-label-line-height);\\n top: var(--floating-label-resting-top);\\n transform: var(--floating-label-resting-transform);\\n}\\n.group:has(input:not(:-moz-placeholder)) > .ui-kit-floating-placeholder,\\n.group:has(textarea:not(:-moz-placeholder)) > .ui-kit-floating-placeholder {\\n color: var(--theme-text);\\n font-size: var(--floating-label-active-font-size);\\n font-weight: 500;\\n left: 12px !important;\\n line-height: var(--floating-label-active-line-height);\\n top: 0;\\n transform: translateY(-50%) scale(0.85);\\n}\\n.group:focus-within > .ui-kit-floating-placeholder,\\n.group:has(input:not(:placeholder-shown)) > .ui-kit-floating-placeholder,\\n.group:has(textarea:not(:placeholder-shown)) > .ui-kit-floating-placeholder,\\n.group:has([data-has-value=true]) > .ui-kit-floating-placeholder,\\n.ui-kit-floating-placeholder--active {\\n color: var(--theme-text);\\n font-size: var(--floating-label-active-font-size);\\n font-weight: 500;\\n left: 12px !important;\\n line-height: var(--floating-label-active-line-height);\\n top: 0;\\n transform: translateY(-50%) scale(0.85);\\n}\\n:where(.ui-kit-root),\\n:where(.ui-kit-root) :where(*),\\n:where(.ui-kit-root) :where(*)::before,\\n:where(.ui-kit-root) :where(*)::after {\\n box-sizing: border-box;\\n border-width: 0;\\n border-style: solid;\\n border-color: #e5e7eb;\\n}\\n:where(.ui-kit-root) :where(*)::before,\\n:where(.ui-kit-root) :where(*)::after {\\n --tw-content: \\\"\\\";\\n}\\n:where(.ui-kit-root) :where(hr) {\\n height: 0;\\n color: inherit;\\n border-top-width: 1px;\\n}\\n:where(.ui-kit-root) :where(abbr:where([title])) {\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n}\\n:where(.ui-kit-root) :where(h1, h2, h3, h4, h5, h6) {\\n font-size: inherit;\\n font-weight: inherit;\\n}\\n:where(.ui-kit-root) :where(a) {\\n color: inherit;\\n text-decoration: inherit;\\n}\\n:where(.ui-kit-root) :where(b, strong) {\\n font-weight: bolder;\\n}\\n:where(.ui-kit-root) :where(code, kbd, samp, pre) {\\n font-family:\\n ui-monospace,\\n SFMono-Regular,\\n Menlo,\\n Monaco,\\n Consolas,\\n \\\"Liberation Mono\\\",\\n \\\"Courier New\\\",\\n monospace;\\n font-size: 1em;\\n}\\n:where(.ui-kit-root) :where(small) {\\n font-size: 80%;\\n}\\n:where(.ui-kit-root) :where(sub, sup) {\\n font-size: 75%;\\n line-height: 0;\\n position: relative;\\n vertical-align: baseline;\\n}\\n:where(.ui-kit-root) :where(sub) {\\n bottom: -0.25em;\\n}\\n:where(.ui-kit-root) :where(sup) {\\n top: -0.5em;\\n}\\n:where(.ui-kit-root) :where(table) {\\n text-indent: 0;\\n border-color: inherit;\\n border-collapse: collapse;\\n}\\n:where(.ui-kit-root):where(button, input, optgroup, select, textarea),\\n:where(.ui-kit-root) :where(button, input, optgroup, select, textarea) {\\n font-family: inherit;\\n font-feature-settings: inherit;\\n font-variation-settings: inherit;\\n font-size: 100%;\\n font-weight: inherit;\\n line-height: inherit;\\n letter-spacing: inherit;\\n color: inherit;\\n margin: 0;\\n padding: 0;\\n}\\n:where(.ui-kit-root):where(button, select),\\n:where(.ui-kit-root) :where(button, select) {\\n text-transform: none;\\n}\\n:where(.ui-kit-root):where(button),\\n:where(.ui-kit-root) :where(button),\\n:where(.ui-kit-root) :where(input:where([type=button], [type=reset], [type=submit])) {\\n -webkit-appearance: button;\\n background-color: transparent;\\n background-image: none;\\n}\\n:where(.ui-kit-root) :where(progress) {\\n vertical-align: baseline;\\n}\\n:where(.ui-kit-root) :where(input)::-webkit-inner-spin-button,\\n:where(.ui-kit-root) :where(input)::-webkit-outer-spin-button {\\n height: auto;\\n}\\n:where(.ui-kit-root) :where([type=search]) {\\n -webkit-appearance: textfield;\\n outline-offset: -2px;\\n}\\n:where(.ui-kit-root) :where(input)::-webkit-search-decoration {\\n -webkit-appearance: none;\\n}\\n:where(.ui-kit-root) :where(summary) {\\n display: list-item;\\n}\\n:where(.ui-kit-root) :where(blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre) {\\n margin: 0;\\n}\\n:where(.ui-kit-root) :where(fieldset) {\\n margin: 0;\\n padding: 0;\\n}\\n:where(.ui-kit-root) :where(legend) {\\n padding: 0;\\n}\\n:where(.ui-kit-root) :where(ol, ul, menu) {\\n list-style: none;\\n margin: 0;\\n padding: 0;\\n}\\n:where(.ui-kit-root) :where(dialog) {\\n padding: 0;\\n}\\n:where(.ui-kit-root) :where(option) {\\n margin: 0;\\n padding: 0;\\n}\\n:where(.ui-kit-root) :where(textarea) {\\n resize: vertical;\\n}\\n:where(.ui-kit-root):where(input)::-moz-placeholder,\\n:where(.ui-kit-root):where(textarea)::-moz-placeholder,\\n:where(.ui-kit-root) :where(input)::-moz-placeholder,\\n:where(.ui-kit-root) :where(textarea)::-moz-placeholder {\\n opacity: 1;\\n color: #9ca3af;\\n}\\n:where(.ui-kit-root):where(input)::placeholder,\\n:where(.ui-kit-root):where(textarea)::placeholder,\\n:where(.ui-kit-root) :where(input)::placeholder,\\n:where(.ui-kit-root) :where(textarea)::placeholder {\\n opacity: 1;\\n color: #9ca3af;\\n}\\n:where(.ui-kit-root):where(button, [role=button]),\\n:where(.ui-kit-root) :where(button, [role=button]) {\\n cursor: pointer;\\n}\\n:where(.ui-kit-root):where(:disabled),\\n:where(.ui-kit-root) :where(:disabled) {\\n cursor: default;\\n}\\n:where(.ui-kit-root) :where(img, svg, video, canvas, audio, iframe, embed, object) {\\n display: block;\\n vertical-align: middle;\\n}\\n:where(.ui-kit-root) :where(img, video) {\\n max-width: 100%;\\n height: auto;\\n}\\n:where(.ui-kit-root) :where([hidden]) {\\n display: none;\\n}\\n.pointer-events-none {\\n pointer-events: none;\\n}\\n.pointer-events-auto {\\n pointer-events: auto;\\n}\\n.visible {\\n visibility: visible;\\n}\\n.fixed {\\n position: fixed;\\n}\\n.absolute {\\n position: absolute;\\n}\\n.relative {\\n position: relative;\\n}\\n.sticky {\\n position: sticky;\\n}\\n.inset-0 {\\n inset: 0px;\\n}\\n.inset-y-0 {\\n top: 0px;\\n bottom: 0px;\\n}\\n.left-0 {\\n left: 0px;\\n}\\n.left-\\\\[var\\\\(--label-left-base\\\\,12px\\\\)\\\\] {\\n left: var(--label-left-base,12px);\\n}\\n.top-1\\\\/2 {\\n top: 50%;\\n}\\n.z-50 {\\n z-index: 50;\\n}\\n.z-\\\\[70\\\\] {\\n z-index: 70;\\n}\\n.z-\\\\[99999\\\\] {\\n z-index: 99999;\\n}\\n.col-span-1 {\\n grid-column: span 1 / span 1;\\n}\\n.col-span-2 {\\n grid-column: span 2 / span 2;\\n}\\n.m-0 {\\n margin: 0px;\\n}\\n.-mt-2 {\\n margin-top: -0.5rem;\\n}\\n.mb-\\\\[18px\\\\] {\\n margin-bottom: 18px;\\n}\\n.ml-1 {\\n margin-left: 0.25rem;\\n}\\n.ml-4 {\\n margin-left: 1rem;\\n}\\n.ml-auto {\\n margin-left: auto;\\n}\\n.mt-0 {\\n margin-top: 0px;\\n}\\n.mt-1 {\\n margin-top: 0.25rem;\\n}\\n.mt-px {\\n margin-top: 1px;\\n}\\n.box-border {\\n box-sizing: border-box;\\n}\\n.block {\\n display: block;\\n}\\n.inline {\\n display: inline;\\n}\\n.flex {\\n display: flex;\\n}\\n.inline-flex {\\n display: inline-flex;\\n}\\n.table {\\n display: table;\\n}\\n.grid {\\n display: grid;\\n}\\n.hidden {\\n display: none;\\n}\\n.h-14 {\\n height: 3.5rem;\\n}\\n.h-2 {\\n height: 0.5rem;\\n}\\n.h-5 {\\n height: 1.25rem;\\n}\\n.h-\\\\[30px\\\\] {\\n height: 30px;\\n}\\n.h-\\\\[34px\\\\] {\\n height: 34px;\\n}\\n.h-\\\\[52px\\\\] {\\n height: 52px;\\n}\\n.h-full {\\n height: 100%;\\n}\\n.max-h-\\\\[280px\\\\] {\\n max-height: 280px;\\n}\\n.min-h-0 {\\n min-height: 0px;\\n}\\n.min-h-20 {\\n min-height: 5rem;\\n}\\n.min-h-\\\\[220px\\\\] {\\n min-height: 220px;\\n}\\n.w-14 {\\n width: 3.5rem;\\n}\\n.w-2 {\\n width: 0.5rem;\\n}\\n.w-5 {\\n width: 1.25rem;\\n}\\n.w-\\\\[25px\\\\] {\\n width: 25px;\\n}\\n.w-\\\\[30px\\\\] {\\n width: 30px;\\n}\\n.w-\\\\[52px\\\\] {\\n width: 52px;\\n}\\n.w-\\\\[72px\\\\] {\\n width: 72px;\\n}\\n.w-auto {\\n width: auto;\\n}\\n.w-fit {\\n width: -moz-fit-content;\\n width: fit-content;\\n}\\n.w-full {\\n width: 100%;\\n}\\n.w-max {\\n width: -moz-max-content;\\n width: max-content;\\n}\\n.min-w-0 {\\n min-width: 0px;\\n}\\n.min-w-full {\\n min-width: 100%;\\n}\\n.min-w-max {\\n min-width: -moz-max-content;\\n min-width: max-content;\\n}\\n.max-w-\\\\[360px\\\\] {\\n max-width: 360px;\\n}\\n.max-w-\\\\[calc\\\\(100\\\\%-24px\\\\)\\\\] {\\n max-width: calc(100% - 24px);\\n}\\n.max-w-fit {\\n max-width: -moz-fit-content;\\n max-width: fit-content;\\n}\\n.max-w-full {\\n max-width: 100%;\\n}\\n.max-w-none {\\n max-width: none;\\n}\\n.flex-1 {\\n flex: 1 1 0%;\\n}\\n.flex-\\\\[0_1_45\\\\%\\\\] {\\n flex: 0 1 45%;\\n}\\n.flex-\\\\[1_1_260px\\\\] {\\n flex: 1 1 260px;\\n}\\n.flex-none {\\n flex: none;\\n}\\n.shrink-0 {\\n flex-shrink: 0;\\n}\\n.border-separate {\\n border-collapse: separate;\\n}\\n.border-spacing-0 {\\n --tw-border-spacing-x: 0px;\\n --tw-border-spacing-y: 0px;\\n border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);\\n}\\n.origin-\\\\[left_center\\\\] {\\n transform-origin: left center;\\n}\\n.transform {\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.cursor-not-allowed {\\n cursor: not-allowed;\\n}\\n.cursor-pointer {\\n cursor: pointer;\\n}\\n.cursor-text {\\n cursor: text;\\n}\\n.select-none {\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.resize-y {\\n resize: vertical;\\n}\\n.resize {\\n resize: both;\\n}\\n.appearance-none {\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n}\\n.grid-cols-4 {\\n grid-template-columns: repeat(4, minmax(0, 1fr));\\n}\\n.grid-cols-\\\\[7rem_minmax\\\\(0\\\\,1fr\\\\)\\\\] {\\n grid-template-columns: 7rem minmax(0, 1fr);\\n}\\n.grid-cols-\\\\[minmax\\\\(0\\\\,1fr\\\\)\\\\] {\\n grid-template-columns: minmax(0, 1fr);\\n}\\n.grid-cols-\\\\[repeat\\\\(2\\\\,minmax\\\\(0\\\\,1fr\\\\)\\\\)\\\\] {\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n}\\n.flex-col {\\n flex-direction: column;\\n}\\n.flex-wrap {\\n flex-wrap: wrap;\\n}\\n.flex-nowrap {\\n flex-wrap: nowrap;\\n}\\n.items-start {\\n align-items: flex-start;\\n}\\n.items-center {\\n align-items: center;\\n}\\n.justify-start {\\n justify-content: flex-start;\\n}\\n.justify-end {\\n justify-content: flex-end;\\n}\\n.justify-center {\\n justify-content: center;\\n}\\n.justify-between {\\n justify-content: space-between;\\n}\\n.gap-0 {\\n gap: 0px;\\n}\\n.gap-1 {\\n gap: 0.25rem;\\n}\\n.gap-1\\\\.5 {\\n gap: 0.375rem;\\n}\\n.gap-2 {\\n gap: 0.5rem;\\n}\\n.gap-2\\\\.5 {\\n gap: 0.625rem;\\n}\\n.gap-3 {\\n gap: 0.75rem;\\n}\\n.gap-3\\\\.5 {\\n gap: 0.875rem;\\n}\\n.gap-4 {\\n gap: 1rem;\\n}\\n.self-stretch {\\n align-self: stretch;\\n}\\n.overflow-auto {\\n overflow: auto;\\n}\\n.overflow-hidden {\\n overflow: hidden;\\n}\\n.overflow-x-auto {\\n overflow-x: auto;\\n}\\n.overflow-y-auto {\\n overflow-y: auto;\\n}\\n.overflow-x-hidden {\\n overflow-x: hidden;\\n}\\n.overflow-y-hidden {\\n overflow-y: hidden;\\n}\\n.truncate {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.text-ellipsis {\\n text-overflow: ellipsis;\\n}\\n.whitespace-nowrap {\\n white-space: nowrap;\\n}\\n.break-words {\\n overflow-wrap: break-word;\\n}\\n.rounded-2xl {\\n border-radius: 1rem;\\n}\\n.rounded-\\\\[20px\\\\] {\\n border-radius: 20px;\\n}\\n.rounded-\\\\[24px\\\\] {\\n border-radius: 24px;\\n}\\n.rounded-\\\\[28px\\\\] {\\n border-radius: 28px;\\n}\\n.rounded-\\\\[30px\\\\] {\\n border-radius: 30px;\\n}\\n.rounded-\\\\[var\\\\(--ui-radius\\\\,12px\\\\)\\\\] {\\n border-radius: var(--ui-radius,12px);\\n}\\n.rounded-full {\\n border-radius: 9999px;\\n}\\n.rounded-none {\\n border-radius: 0px;\\n}\\n.rounded-xl {\\n border-radius: 0.75rem;\\n}\\n.rounded-tl-\\\\[16px\\\\] {\\n border-top-left-radius: 16px;\\n}\\n.rounded-tr-\\\\[16px\\\\] {\\n border-top-right-radius: 16px;\\n}\\n.border {\\n border-width: 1px;\\n}\\n.border-0 {\\n border-width: 0px;\\n}\\n.border-2 {\\n border-width: 2px;\\n}\\n.border-\\\\[3px\\\\] {\\n border-width: 3px;\\n}\\n.border-b {\\n border-bottom-width: 1px;\\n}\\n.border-solid {\\n border-style: solid;\\n}\\n.border-dashed {\\n border-style: dashed;\\n}\\n.border-\\\\[var\\\\(--theme-background\\\\)\\\\] {\\n border-color: var(--theme-background);\\n}\\n.border-\\\\[var\\\\(--theme-negative\\\\)\\\\] {\\n border-color: var(--theme-negative);\\n}\\n.border-\\\\[var\\\\(--theme-primary\\\\)\\\\] {\\n border-color: var(--theme-primary);\\n}\\n.border-\\\\[var\\\\(--theme-textLight\\\\)\\\\] {\\n border-color: var(--theme-textLight);\\n}\\n.border-transparent {\\n border-color: transparent;\\n}\\n.bg-\\\\[color-mix\\\\(in_srgb\\\\,var\\\\(--ui-kit-accent\\\\)_24\\\\%\\\\,transparent\\\\)\\\\] {\\n background-color: color-mix(in srgb, var(--ui-kit-accent) 24%, transparent);\\n}\\n.bg-\\\\[var\\\\(--theme-background\\\\)\\\\] {\\n background-color: var(--theme-background);\\n}\\n.bg-\\\\[var\\\\(--theme-primary\\\\)\\\\] {\\n background-color: var(--theme-primary);\\n}\\n.bg-\\\\[var\\\\(--theme-surface\\\\)\\\\] {\\n background-color: var(--theme-surface);\\n}\\n.bg-\\\\[var\\\\(--ui-kit-accent\\\\)\\\\] {\\n background-color: var(--ui-kit-accent);\\n}\\n.bg-transparent {\\n background-color: transparent;\\n}\\n.p-0 {\\n padding: 0px;\\n}\\n.p-0\\\\.5 {\\n padding: 0.125rem;\\n}\\n.p-2 {\\n padding: 0.5rem;\\n}\\n.p-2\\\\.5 {\\n padding: 0.625rem;\\n}\\n.p-4 {\\n padding: 1rem;\\n}\\n.p-6 {\\n padding: 1.5rem;\\n}\\n.px-1 {\\n padding-left: 0.25rem;\\n padding-right: 0.25rem;\\n}\\n.px-1\\\\.5 {\\n padding-left: 0.375rem;\\n padding-right: 0.375rem;\\n}\\n.px-2 {\\n padding-left: 0.5rem;\\n padding-right: 0.5rem;\\n}\\n.px-2\\\\.5 {\\n padding-left: 0.625rem;\\n padding-right: 0.625rem;\\n}\\n.px-3 {\\n padding-left: 0.75rem;\\n padding-right: 0.75rem;\\n}\\n.px-3\\\\.5 {\\n padding-left: 0.875rem;\\n padding-right: 0.875rem;\\n}\\n.px-5 {\\n padding-left: 1.25rem;\\n padding-right: 1.25rem;\\n}\\n.px-\\\\[11px\\\\] {\\n padding-left: 11px;\\n padding-right: 11px;\\n}\\n.px-\\\\[13px\\\\] {\\n padding-left: 13px;\\n padding-right: 13px;\\n}\\n.py-0\\\\.5 {\\n padding-top: 0.125rem;\\n padding-bottom: 0.125rem;\\n}\\n.py-1 {\\n padding-top: 0.25rem;\\n padding-bottom: 0.25rem;\\n}\\n.py-2 {\\n padding-top: 0.5rem;\\n padding-bottom: 0.5rem;\\n}\\n.py-2\\\\.5 {\\n padding-top: 0.625rem;\\n padding-bottom: 0.625rem;\\n}\\n.py-3 {\\n padding-top: 0.75rem;\\n padding-bottom: 0.75rem;\\n}\\n.py-\\\\[10px\\\\] {\\n padding-top: 10px;\\n padding-bottom: 10px;\\n}\\n.py-\\\\[14px\\\\] {\\n padding-top: 14px;\\n padding-bottom: 14px;\\n}\\n.py-\\\\[18px\\\\] {\\n padding-top: 18px;\\n padding-bottom: 18px;\\n}\\n.py-\\\\[9px\\\\] {\\n padding-top: 9px;\\n padding-bottom: 9px;\\n}\\n.pb-0\\\\.5 {\\n padding-bottom: 0.125rem;\\n}\\n.pb-1 {\\n padding-bottom: 0.25rem;\\n}\\n.pb-3 {\\n padding-bottom: 0.75rem;\\n}\\n.pb-4 {\\n padding-bottom: 1rem;\\n}\\n.pb-\\\\[10px\\\\] {\\n padding-bottom: 10px;\\n}\\n.pl-5 {\\n padding-left: 1.25rem;\\n}\\n.pl-6 {\\n padding-left: 1.5rem;\\n}\\n.pr-6 {\\n padding-right: 1.5rem;\\n}\\n.pt-1 {\\n padding-top: 0.25rem;\\n}\\n.pt-1\\\\.5 {\\n padding-top: 0.375rem;\\n}\\n.pt-2\\\\.5 {\\n padding-top: 0.625rem;\\n}\\n.pt-3 {\\n padding-top: 0.75rem;\\n}\\n.pt-\\\\[18px\\\\] {\\n padding-top: 18px;\\n}\\n.text-left {\\n text-align: left;\\n}\\n.text-center {\\n text-align: center;\\n}\\n.text-right {\\n text-align: right;\\n}\\n.align-middle {\\n vertical-align: middle;\\n}\\n.font-sans {\\n font-family:\\n ui-sans-serif,\\n system-ui,\\n sans-serif,\\n \\\"Apple Color Emoji\\\",\\n \\\"Segoe UI Emoji\\\",\\n \\\"Segoe UI Symbol\\\",\\n \\\"Noto Color Emoji\\\";\\n}\\n.text-2xl {\\n font-size: 1.5rem;\\n line-height: 2rem;\\n}\\n.text-\\\\[11px\\\\] {\\n font-size: 11px;\\n}\\n.text-\\\\[12px\\\\] {\\n font-size: 12px;\\n}\\n.text-\\\\[13px\\\\] {\\n font-size: 13px;\\n}\\n.text-\\\\[15px\\\\] {\\n font-size: 15px;\\n}\\n.text-\\\\[18px\\\\] {\\n font-size: 18px;\\n}\\n.text-\\\\[24px\\\\] {\\n font-size: 24px;\\n}\\n.text-base {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n}\\n.text-sm {\\n font-size: 0.875rem;\\n line-height: 1.25rem;\\n}\\n.text-xs {\\n font-size: 0.75rem;\\n line-height: 1rem;\\n}\\n.font-bold {\\n font-weight: 700;\\n}\\n.font-extrabold {\\n font-weight: 800;\\n}\\n.font-medium {\\n font-weight: 500;\\n}\\n.font-normal {\\n font-weight: 400;\\n}\\n.font-semibold {\\n font-weight: 600;\\n}\\n.uppercase {\\n text-transform: uppercase;\\n}\\n.leading-4 {\\n line-height: 1rem;\\n}\\n.leading-5 {\\n line-height: 1.25rem;\\n}\\n.leading-\\\\[1\\\\.15\\\\] {\\n line-height: 1.15;\\n}\\n.leading-\\\\[1\\\\.1\\\\] {\\n line-height: 1.1;\\n}\\n.leading-\\\\[1\\\\.25\\\\] {\\n line-height: 1.25;\\n}\\n.leading-\\\\[1\\\\.2\\\\] {\\n line-height: 1.2;\\n}\\n.leading-\\\\[1\\\\.35\\\\] {\\n line-height: 1.35;\\n}\\n.leading-\\\\[1\\\\.3\\\\] {\\n line-height: 1.3;\\n}\\n.leading-\\\\[1\\\\.45\\\\] {\\n line-height: 1.45;\\n}\\n.leading-\\\\[1\\\\.4\\\\] {\\n line-height: 1.4;\\n}\\n.leading-\\\\[18px\\\\] {\\n line-height: 18px;\\n}\\n.tracking-\\\\[0\\\\.01em\\\\] {\\n letter-spacing: 0.01em;\\n}\\n.tracking-\\\\[0\\\\.08em\\\\] {\\n letter-spacing: 0.08em;\\n}\\n.tracking-\\\\[0\\\\.16em\\\\] {\\n letter-spacing: 0.16em;\\n}\\n.text-\\\\[var\\\\(--theme-negative\\\\)\\\\] {\\n color: var(--theme-negative);\\n}\\n.text-\\\\[var\\\\(--theme-onPrimary\\\\)\\\\] {\\n color: var(--theme-onPrimary);\\n}\\n.text-\\\\[var\\\\(--theme-primary\\\\)\\\\] {\\n color: var(--theme-primary);\\n}\\n.text-\\\\[var\\\\(--theme-secondary\\\\)\\\\] {\\n color: var(--theme-secondary);\\n}\\n.text-\\\\[var\\\\(--theme-text\\\\)\\\\] {\\n color: var(--theme-text);\\n}\\n.text-\\\\[var\\\\(--theme-textLight\\\\)\\\\] {\\n color: var(--theme-textLight);\\n}\\n.text-\\\\[var\\\\(--ui-kit-accent\\\\)\\\\] {\\n color: var(--ui-kit-accent);\\n}\\n.text-transparent {\\n color: transparent;\\n}\\n.placeholder-\\\\[var\\\\(--theme-textLight\\\\)\\\\]::-moz-placeholder {\\n color: var(--theme-textLight);\\n}\\n.placeholder-\\\\[var\\\\(--theme-textLight\\\\)\\\\]::placeholder {\\n color: var(--theme-textLight);\\n}\\n.placeholder-transparent::-moz-placeholder {\\n color: transparent;\\n}\\n.placeholder-transparent::placeholder {\\n color: transparent;\\n}\\n.opacity-0 {\\n opacity: 0;\\n}\\n.opacity-100 {\\n opacity: 1;\\n}\\n.opacity-45 {\\n opacity: 0.45;\\n}\\n.opacity-70 {\\n opacity: 0.7;\\n}\\n.opacity-80 {\\n opacity: 0.8;\\n}\\n.opacity-\\\\[0\\\\.38\\\\] {\\n opacity: 0.38;\\n}\\n.shadow {\\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.shadow-none {\\n --tw-shadow: 0 0 #0000;\\n --tw-shadow-colored: 0 0 #0000;\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.outline-none {\\n outline: 2px solid transparent;\\n outline-offset: 2px;\\n}\\n.outline {\\n outline-style: solid;\\n}\\n.blur {\\n --tw-blur: blur(8px);\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.saturate-100 {\\n --tw-saturate: saturate(1);\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.saturate-\\\\[0\\\\.8\\\\] {\\n --tw-saturate: saturate(0.8);\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.filter {\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.backdrop-blur-\\\\[2px\\\\] {\\n --tw-backdrop-blur: blur(2px);\\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n}\\n.backdrop-blur-\\\\[8px\\\\] {\\n --tw-backdrop-blur: blur(8px);\\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n}\\n.transition {\\n transition-property:\\n color,\\n background-color,\\n border-color,\\n text-decoration-color,\\n fill,\\n stroke,\\n opacity,\\n box-shadow,\\n transform,\\n filter,\\n backdrop-filter;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[background-color\\\\,color\\\\] {\\n transition-property: background-color, color;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[border-color\\\\] {\\n transition-property: border-color;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[opacity\\\\,filter\\\\] {\\n transition-property: opacity, filter;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[transform\\\\,color\\\\] {\\n transition-property: transform, color;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-all {\\n transition-property: all;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-colors {\\n transition-property:\\n color,\\n background-color,\\n border-color,\\n text-decoration-color,\\n fill,\\n stroke;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-opacity {\\n transition-property: opacity;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.duration-150 {\\n transition-duration: 150ms;\\n}\\n.duration-300 {\\n transition-duration: 300ms;\\n}\\n.ease-in-out {\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n}\\n.\\\\[overflow-wrap\\\\:anywhere\\\\] {\\n overflow-wrap: anywhere;\\n}\\n.hover\\\\:border-\\\\[var\\\\(--theme-primaryDark\\\\)\\\\]:hover {\\n border-color: var(--theme-primaryDark);\\n}\\n.hover\\\\:border-\\\\[var\\\\(--theme-primaryLight\\\\)\\\\]:hover {\\n border-color: var(--theme-primaryLight);\\n}\\n.hover\\\\:bg-\\\\[var\\\\(--theme-background\\\\)\\\\]:hover {\\n background-color: var(--theme-background);\\n}\\n.hover\\\\:bg-\\\\[var\\\\(--theme-primaryLight\\\\)\\\\]:hover {\\n background-color: var(--theme-primaryLight);\\n}\\n.hover\\\\:text-\\\\[var\\\\(--theme-negative\\\\)\\\\]:hover {\\n color: var(--theme-negative);\\n}\\n.hover\\\\:text-\\\\[var\\\\(--theme-onPrimary\\\\)\\\\]:hover {\\n color: var(--theme-onPrimary);\\n}\\n.hover\\\\:text-\\\\[var\\\\(--theme-primary\\\\)\\\\]:hover {\\n color: var(--theme-primary);\\n}\\n.hover\\\\:underline:hover {\\n text-decoration-line: underline;\\n}\\n.hover\\\\:no-underline:hover {\\n text-decoration-line: none;\\n}\\n.focus-visible\\\\:outline:focus-visible {\\n outline-style: solid;\\n}\\n.focus-visible\\\\:outline-2:focus-visible {\\n outline-width: 2px;\\n}\\n.focus-visible\\\\:outline-offset-2:focus-visible {\\n outline-offset: 2px;\\n}\\n.focus-visible\\\\:outline-\\\\[var\\\\(--theme-primary\\\\)\\\\]:focus-visible {\\n outline-color: var(--theme-primary);\\n}\\n.active\\\\:border-\\\\[var\\\\(--theme-negative\\\\)\\\\]:active {\\n border-color: var(--theme-negative);\\n}\\n.active\\\\:border-\\\\[var\\\\(--theme-primary\\\\)\\\\]:active {\\n border-color: var(--theme-primary);\\n}\\n.active\\\\:border-transparent:active {\\n border-color: transparent;\\n}\\n.active\\\\:bg-\\\\[var\\\\(--theme-background\\\\)\\\\]:active {\\n background-color: var(--theme-background);\\n}\\n.active\\\\:bg-\\\\[var\\\\(--theme-negative\\\\)\\\\]:active {\\n background-color: var(--theme-negative);\\n}\\n.active\\\\:bg-\\\\[var\\\\(--theme-primaryDark\\\\)\\\\]:active {\\n background-color: var(--theme-primaryDark);\\n}\\n.active\\\\:text-\\\\[var\\\\(--theme-onPrimary\\\\)\\\\]:active {\\n color: var(--theme-onPrimary);\\n}\\n.disabled\\\\:translate-y-0:disabled {\\n --tw-translate-y: 0px;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.disabled\\\\:scale-100:disabled {\\n --tw-scale-x: 1;\\n --tw-scale-y: 1;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.disabled\\\\:cursor-not-allowed:disabled {\\n cursor: not-allowed;\\n}\\n.disabled\\\\:opacity-50:disabled {\\n opacity: 0.5;\\n}\\n.group:has(:disabled) .group-has-\\\\[\\\\:disabled\\\\]\\\\:opacity-70 {\\n opacity: 0.7;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:absolute::-webkit-calendar-picker-indicator {\\n position: absolute;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:left-0::-webkit-calendar-picker-indicator {\\n left: 0px;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:top-0::-webkit-calendar-picker-indicator {\\n top: 0px;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:h-full::-webkit-calendar-picker-indicator {\\n height: 100%;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:w-full::-webkit-calendar-picker-indicator {\\n width: 100%;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:cursor-pointer::-webkit-calendar-picker-indicator {\\n cursor: pointer;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:opacity-0::-webkit-calendar-picker-indicator {\\n opacity: 0;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-datetime-edit\\\\]\\\\:flex::-webkit-datetime-edit {\\n display: flex;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-datetime-edit\\\\]\\\\:h-full::-webkit-datetime-edit {\\n height: 100%;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-datetime-edit\\\\]\\\\:items-center::-webkit-datetime-edit {\\n align-items: center;\\n}\\n\")","import latoLatin400NormalWoff from '@fontsource/lato/files/lato-latin-400-normal.woff';\nimport latoLatin400NormalWoff2 from '@fontsource/lato/files/lato-latin-400-normal.woff2';\nimport latoLatin700NormalWoff from '@fontsource/lato/files/lato-latin-700-normal.woff';\nimport latoLatin700NormalWoff2 from '@fontsource/lato/files/lato-latin-700-normal.woff2';\nimport latoLatinExt400NormalWoff from '@fontsource/lato/files/lato-latin-ext-400-normal.woff';\nimport latoLatinExt400NormalWoff2 from '@fontsource/lato/files/lato-latin-ext-400-normal.woff2';\nimport latoLatinExt700NormalWoff from '@fontsource/lato/files/lato-latin-ext-700-normal.woff';\nimport latoLatinExt700NormalWoff2 from '@fontsource/lato/files/lato-latin-ext-700-normal.woff2';\n\nconst UI_KIT_FONT_STYLE_ID = 'smartsell-ui-kit-fonts';\n\nconst uiKitFontFacesCss = `\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(${JSON.stringify(latoLatinExt400NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatinExt400NormalWoff)}) format(\"woff\");\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(${JSON.stringify(latoLatin400NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatin400NormalWoff)}) format(\"woff\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url(${JSON.stringify(latoLatinExt700NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatinExt700NormalWoff)}) format(\"woff\");\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url(${JSON.stringify(latoLatin700NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatin700NormalWoff)}) format(\"woff\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n`;\n\nexport function injectUiKitFonts(): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n if (document.getElementById(UI_KIT_FONT_STYLE_ID)) {\n return;\n }\n\n const styleElement = document.createElement('style');\n styleElement.id = UI_KIT_FONT_STYLE_ID;\n styleElement.textContent = uiKitFontFacesCss;\n document.head.appendChild(styleElement);\n}","export const DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS = 1500;","export const cx = (...values: Array<string | false | null | undefined>): string => {\n return values.filter(Boolean).join(' ');\n};\n\nexport const UI_KIT_ROOT_CLASSNAME = 'ui-kit-root';","export function withAlpha(hex: string, alpha: number): string {\n const normalized = hex.replace('#', '').trim();\n const value = normalized.length === 3\n ? normalized.split('').map((char) => char + char).join('')\n : normalized;\n\n const red = Number.parseInt(value.slice(0, 2), 16);\n const green = Number.parseInt(value.slice(2, 4), 16);\n const blue = Number.parseInt(value.slice(4, 6), 16);\n\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n}","export const DISABLED_COMPONENT_OPACITY = 0.5;\nexport const DISABLED_FIELD_OPACITY = 0.7;","import type { CSSProperties } from 'react';\n\nexport type ControlSize = 'sm' | 'md' | 'lg';\n\nexport const CONTROL_LEADING_ICON_SHIFT = 5;\nexport const CONTROL_TEXT_VERTICAL_SHIFT = 1;\nconst SELECT_TEXT_VERTICAL_SHIFT_REDUCTION = 1;\n\ntype ControlMetrics = {\n height: number;\n fontSize: number;\n lineHeight: string;\n paddingX: number;\n paddingY: number;\n buttonPaddingX: number;\n selectPaddingRight: number;\n selectIndicatorOffset: number;\n};\n\ntype TextInputPaddingOptions = {\n leadingPadding?: number;\n trailingPadding?: number;\n topPadding?: number;\n bottomPadding?: number;\n};\n\nconst getControlTextVerticalPadding = (size: ControlSize, shift = CONTROL_TEXT_VERTICAL_SHIFT): { top: number; bottom: number } => {\n const metrics = getControlMetrics(size);\n\n return {\n top: Math.max(0, metrics.paddingY - shift),\n bottom: metrics.paddingY + shift,\n };\n};\n\nconst getSelectTextVerticalShift = (): number => Math.max(0, CONTROL_TEXT_VERTICAL_SHIFT - SELECT_TEXT_VERTICAL_SHIFT_REDUCTION);\n\nconst CONTROL_METRICS_BY_SIZE: Record<ControlSize, ControlMetrics> = {\n sm: {\n height: 34,\n fontSize: 13,\n lineHeight: '16px',\n paddingX: 12,\n paddingY: 6,\n buttonPaddingX: 14,\n selectPaddingRight: 40,\n selectIndicatorOffset: 12,\n },\n md: {\n height: 42,\n fontSize: 14,\n lineHeight: '18px',\n paddingX: 14,\n paddingY: 7,\n buttonPaddingX: 16,\n selectPaddingRight: 42,\n selectIndicatorOffset: 14,\n },\n lg: {\n height: 48,\n fontSize: 15,\n lineHeight: '18px',\n paddingX: 16,\n paddingY: 9,\n buttonPaddingX: 18,\n selectPaddingRight: 46,\n selectIndicatorOffset: 16,\n },\n};\n\nexport const getControlMetrics = (size: ControlSize): ControlMetrics => CONTROL_METRICS_BY_SIZE[size];\n\nexport const getControlLeadingIconInset = (size: ControlSize): number => {\n const metrics = getControlMetrics(size);\n return Math.round(metrics.paddingX / 2) + CONTROL_LEADING_ICON_SHIFT;\n};\n\nexport const getControlLeadingAdornmentWidth = (size: ControlSize, iconSize: number): number => {\n return getControlLeadingIconInset(size) + iconSize;\n};\n\nexport const getTextInputPadding = (size: ControlSize, options: TextInputPaddingOptions = {}): string => {\n const metrics = getControlMetrics(size);\n const { top, bottom } = getControlTextVerticalPadding(size);\n const leadingPadding = options.leadingPadding ?? metrics.paddingX;\n const trailingPadding = options.trailingPadding ?? metrics.paddingX;\n const topPadding = options.topPadding ?? top;\n const bottomPadding = options.bottomPadding ?? bottom;\n\n return `${topPadding}px ${trailingPadding}px ${bottomPadding}px ${leadingPadding}px`;\n};\n\nexport const getSelectControlPadding = (size: ControlSize): string => {\n const metrics = getControlMetrics(size);\n const { top, bottom } = getControlTextVerticalPadding(size, getSelectTextVerticalShift());\n return `${top}px ${metrics.selectPaddingRight}px ${bottom}px ${metrics.paddingX}px`;\n};\n\nexport const getControlTextNudgeStyle = (shift = CONTROL_TEXT_VERTICAL_SHIFT): CSSProperties => ({\n transform: `translateY(-${shift}px)`,\n});\n\nexport const getSelectTextNudgeStyle = (): CSSProperties => getControlTextNudgeStyle(getSelectTextVerticalShift());\n\nexport const getSelectIndicatorOffset = (size: ControlSize): number => getControlMetrics(size).selectIndicatorOffset;\n\nexport const getButtonSizeStyles = (size: ControlSize): CSSProperties => {\n const metrics = getControlMetrics(size);\n\n return {\n boxSizing: 'border-box',\n height: metrics.height,\n padding: `0 ${metrics.buttonPaddingX}px`,\n fontSize: metrics.fontSize,\n lineHeight: metrics.lineHeight,\n };\n};\n\nexport const getFieldSizeStyles = (size: ControlSize): CSSProperties => {\n const metrics = getControlMetrics(size);\n\n return {\n height: metrics.height,\n fontSize: metrics.fontSize,\n lineHeight: metrics.lineHeight,\n };\n};\n","import { useEffect, useMemo } from 'react';\n\nimport {\n darkTheme,\n lightTheme,\n useThemeValue,\n type SmartSellTheme,\n type ThemeColors,\n} from 'smartsell-theme';\n\nexport const UI_KIT_THEME_COLOR_NAMES = [\n 'primary',\n 'primaryLight',\n 'primaryDark',\n 'shadow',\n 'secondary',\n 'background',\n 'surface',\n 'text',\n 'textLight',\n 'positive',\n 'negative',\n 'warning',\n 'info',\n 'onPrimary',\n 'onSecondary',\n] as const;\n\nexport type UiKitThemeColorName = (typeof UI_KIT_THEME_COLOR_NAMES)[number];\nexport type UiKitThemeColors = {\n [key in UiKitThemeColorName]: ThemeColors[key];\n};\n\nexport interface UiKitTheme extends Omit<SmartSellTheme, 'title' | 'colors' | 'color'> {\n title: SmartSellTheme['title'];\n colors: UiKitThemeColors;\n color: UiKitThemeColors;\n}\n\nconst DEFAULT_THEME_COLORS = {\n primary: '#BE1E2D',\n primaryLight: '#d33948',\n primaryDark: '#A31826',\n shadow: '#B8B8B8',\n onPrimary: '#ffffff',\n secondary: '#DADAE3',\n onSecondary: '#000',\n background: '#DADAE3',\n surface: '#dad9d9',\n text: '#2b2b2b',\n textLight: '#4f4f4f',\n positive: '#006705',\n negative: '#c90000',\n warning: '#ff670b',\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}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\n\nimport {\n cx,\n DISABLED_COMPONENT_OPACITY,\n UI_KIT_ROOT_CLASSNAME,\n getButtonSizeStyles,\n useUiKitTheme,\n type ControlSize,\n} from '../foundation';\n\ntype LegacyVariant = 'primary';\ntype ButtonVariant =\n | 'solid'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'negative'\n | LegacyVariant;\ntype ButtonSize = ControlSize;\n\nexport interface ButtonProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'dangerouslySetInnerHTML'\n> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n}\n\nconst BUTTON_VARIANT_CLASSNAMES: Record<\n 'solid' | 'secondary' | 'outline' | 'ghost' | 'negative',\n string\n> = {\n solid: [\n 'border-[var(--theme-primary)]',\n 'bg-[var(--theme-primary)]',\n 'text-[var(--theme-onPrimary)]',\n 'hover:border-[var(--theme-primaryDark)]',\n 'hover:bg-[var(--theme-primaryLight)]',\n 'hover:text-[var(--theme-onPrimary)]',\n 'active:bg-[var(--theme-primaryDark)]',\n 'active:text-[var(--theme-onPrimary)]',\n ].join(' '),\n secondary: [\n 'border-transparent',\n 'bg-[var(--theme-background)]',\n 'text-[var(--theme-text)]',\n 'active:bg-[var(--theme-primaryDark)]',\n 'active:text-[var(--theme-onPrimary)]',\n 'active:border-transparent',\n ].join(' '),\n outline: [\n 'border-[var(--theme-textLight)]',\n 'bg-transparent',\n 'text-[var(--theme-text)]',\n 'hover:bg-[var(--theme-primaryLight)]',\n 'hover:border-[var(--theme-primaryLight)]',\n 'hover:text-[var(--theme-onPrimary)]',\n 'active:bg-[var(--theme-primaryDark)]',\n 'active:text-[var(--theme-onPrimary)]',\n 'active:border-[var(--theme-primary)]',\n ].join(' '),\n ghost: [\n 'border-transparent',\n 'bg-transparent',\n 'text-[var(--theme-primary)]',\n 'hover:underline',\n ].join(' '),\n negative: [\n 'border-[var(--theme-negative)]',\n 'bg-transparent',\n 'text-[var(--theme-negative)]',\n 'active:bg-[var(--theme-negative)]',\n 'active:text-[var(--theme-onPrimary)]',\n 'active:border-[var(--theme-negative)]',\n ].join(' '),\n};\n\nexport function Button({\n variant = 'solid',\n size = 'md',\n leadingIcon,\n trailingIcon,\n children,\n disabled,\n className,\n style,\n type = 'button',\n ...rest\n}: ButtonProps) {\n useUiKitTheme();\n\n const resolvedVariant = variant === 'primary' ? 'solid' : variant;\n return (\n <button\n {...rest}\n type={type}\n disabled={disabled}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'box-border inline-flex w-fit max-w-fit items-center justify-center gap-2.5 shrink-0',\n 'rounded-2xl border border-solid font-bold tracking-[0.01em]',\n 'shadow-none cursor-pointer transition-all duration-300',\n 'disabled:cursor-not-allowed',\n 'disabled:translate-y-0 disabled:scale-100',\n\n BUTTON_VARIANT_CLASSNAMES[resolvedVariant],\n className,\n )}\n style={{\n ...getButtonSizeStyles(size),\n ...style,\n ...(disabled ? { opacity: DISABLED_COMPONENT_OPACITY } : {}),\n }}\n >\n {leadingIcon}\n {children}\n {trailingIcon}\n </button>\n );\n}\n","import type { AriaRole, CSSProperties, HTMLAttributes, ReactNode } from 'react';\nimport { useId } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from '../foundation';\n\nimport {\n getDefaultFeedbackIcon,\n getFeedbackContainerStyle,\n getFeedbackDefaultRole,\n getFeedbackIconBadgeStyle,\n type FeedbackTone,\n} from './feedbackPrimitives';\n\nexport type AlertTone = FeedbackTone;\n\nexport interface AlertProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title'> {\n tone?: AlertTone;\n children: ReactNode;\n title?: ReactNode;\n icon?: ReactNode;\n action?: ReactNode;\n role?: AriaRole;\n}\n\nexport function Alert({\n tone = 'info',\n children,\n title,\n icon,\n action,\n role,\n className,\n style,\n ...rest\n}: AlertProps) {\n const theme = useUiKitTheme();\n const titleId = useId();\n const descriptionId = useId();\n const resolvedRole = role ?? getFeedbackDefaultRole(tone);\n const ariaLive = resolvedRole === 'alert'\n ? 'assertive'\n : resolvedRole === 'status'\n ? 'polite'\n : undefined;\n const iconNode = icon === undefined ? getDefaultFeedbackIcon(tone, 20) : icon;\n const containerToneStyle = getFeedbackContainerStyle(theme, tone, 0.12);\n const iconToneStyle = getFeedbackIconBadgeStyle(theme, tone, 0.18);\n const contentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: title ? 4 : 0,\n flex: '1 1 220px',\n minWidth: 0,\n };\n\n return (\n <div\n {...rest}\n role={resolvedRole}\n aria-live={ariaLive}\n aria-atomic={ariaLive ? true : undefined}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={children ? descriptionId : undefined}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'rounded-2xl border border-solid text-[var(--theme-text)]',\n className,\n )}\n style={{\n ...containerToneStyle,\n display: 'flex',\n alignItems: 'flex-start',\n flexWrap: 'wrap',\n gap: 12,\n padding: '14px 16px',\n ...style,\n }}\n >\n {iconNode ? (\n <div\n aria-hidden=\"true\"\n className={UI_KIT_ROOT_CLASSNAME}\n style={{\n ...iconToneStyle,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 40,\n height: 40,\n borderRadius: 12,\n flexShrink: 0,\n }}\n >\n {iconNode}\n </div>\n ) : null}\n\n <div style={contentStyle}>\n {title ? (\n <div\n id={titleId}\n className={cx(UI_KIT_ROOT_CLASSNAME, 'font-bold text-sm')}\n style={{ color: containerToneStyle.borderColor }}\n >\n {title}\n </div>\n ) : null}\n\n <div id={descriptionId} className={cx(UI_KIT_ROOT_CLASSNAME, 'text-sm')} style={{ lineHeight: '1.5' }}>\n {children}\n </div>\n </div>\n\n {action ? (\n <div\n className={cx(UI_KIT_ROOT_CLASSNAME, 'shrink-0')}\n style={{ alignSelf: 'center', color: 'var(--theme-text)' }}\n >\n {action}\n </div>\n ) : null}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode, SVGProps } from 'react';\n\nimport { withAlpha, type UiKitTheme } from '../foundation';\n\nexport type FeedbackTone = 'info' | 'positive' | 'warning' | 'negative';\n\nconst FEEDBACK_TONE_COLOR_NAMES: Record<FeedbackTone, keyof UiKitTheme['colors']> = {\n info: 'info',\n positive: 'positive',\n warning: 'warning',\n negative: 'negative',\n};\n\ntype FeedbackIconProps = SVGProps<SVGSVGElement> & {\n size?: number;\n};\n\nconst iconProps = ({ size = 20, style, ...rest }: FeedbackIconProps) => ({\n ...rest,\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'none',\n xmlns: 'http://www.w3.org/2000/svg',\n 'aria-hidden': true,\n focusable: false,\n style,\n});\n\nfunction InfoIcon(props: FeedbackIconProps) {\n return (\n <svg {...iconProps(props)}>\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path d=\"M12 10V16\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n <circle cx=\"12\" cy=\"7.25\" r=\"1.25\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction PositiveIcon(props: FeedbackIconProps) {\n return (\n <svg {...iconProps(props)}>\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path\n d=\"M8.25 12.4L10.75 14.9L15.75 9.9\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction WarningIcon(props: FeedbackIconProps) {\n return (\n <svg {...iconProps(props)}>\n <path\n d=\"M12 3.75L20 18.5C20.35 19.15 19.88 20 19.14 20H4.86C4.12 20 3.65 19.15 4 18.5L12 3.75Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M12 9V13\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n <circle cx=\"12\" cy=\"16.25\" r=\"1.15\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction NegativeIcon(props: FeedbackIconProps) {\n return (\n <svg {...iconProps(props)}>\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path\n d=\"M9 9L15 15M15 9L9 15\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nexport const getFeedbackDefaultRole = (tone: FeedbackTone): 'alert' | 'status' => {\n return tone === 'warning' || tone === 'negative' ? 'alert' : 'status';\n};\n\nexport const getFeedbackToneColor = (theme: UiKitTheme, tone: FeedbackTone): string => {\n return theme.colors[FEEDBACK_TONE_COLOR_NAMES[tone]];\n};\n\nexport const getFeedbackContainerStyle = (\n theme: UiKitTheme,\n tone: FeedbackTone,\n alpha: number,\n): Pick<CSSProperties, 'backgroundColor' | 'borderColor'> => {\n const toneColor = getFeedbackToneColor(theme, tone);\n\n return {\n backgroundColor: withAlpha(toneColor, alpha),\n borderColor: toneColor,\n };\n};\n\nexport const getFeedbackIconBadgeStyle = (\n theme: UiKitTheme,\n tone: FeedbackTone,\n alpha: number,\n): Pick<CSSProperties, 'backgroundColor' | 'color'> => {\n const toneColor = getFeedbackToneColor(theme, tone);\n\n return {\n backgroundColor: withAlpha(toneColor, alpha),\n color: toneColor,\n };\n};\n\nexport const getDefaultFeedbackIcon = (tone: FeedbackTone, size = 20): ReactNode => {\n switch (tone) {\n case 'positive':\n return <PositiveIcon size={size} />;\n case 'warning':\n return <WarningIcon size={size} />;\n case 'negative':\n return <NegativeIcon size={size} />;\n case 'info':\n default:\n return <InfoIcon size={size} />;\n }\n};\n","import type { HTMLAttributes, ReactNode } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from '../foundation';\n\nexport interface CardProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title'> {\n children: ReactNode;\n eyebrow?: ReactNode;\n title?: ReactNode;\n action?: ReactNode;\n padded?: boolean;\n}\n\nexport function Card({\n children,\n eyebrow,\n title,\n action,\n padded = true,\n className,\n ...rest\n}: CardProps) {\n useUiKitTheme();\n\n return (\n <div\n {...rest}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'rounded-[28px] bg-[var(--theme-surface)] text-[var(--theme-text)]',\n 'border-2 border-solid border-[var(--theme-background)]',\n padded && 'p-4',\n className,\n )}\n >\n {(eyebrow || title || action) && (\n <div className=\"mb-[18px] flex items-start justify-between gap-4\">\n <div className=\"flex flex-col gap-1.5\">\n {eyebrow ? (\n <span className=\"text-xs font-extrabold uppercase tracking-[0.16em] text-[var(--theme-textLight)]\">\n {eyebrow}\n </span>\n ) : null}\n {title ? (\n <div className=\"text-2xl font-bold leading-[1.2] text-[var(--theme-text)]\">\n {title}\n </div>\n ) : null}\n </div>\n {action ? <div className=\"text-[var(--theme-text)]\">{action}</div> : null}\n </div>\n )}\n {children}\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nimport {\n cx,\n UI_KIT_ROOT_CLASSNAME,\n useUiKitTheme,\n} from '../foundation';\n\nexport interface CardSmallProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title' | 'color'> {\n title?: ReactNode;\n value?: ReactNode;\n icon?: ReactNode;\n color?: CSSProperties['color'];\n}\n\nexport function CardSmall({\n title,\n value,\n icon,\n color,\n className,\n style,\n ...rest\n}: CardSmallProps) {\n const theme = useUiKitTheme();\n const accentColor = color ?? theme.colors.primary;\n\n return (\n <div\n {...rest}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'relative flex min-h-20 items-center gap-4 overflow-hidden',\n 'rounded-2xl',\n 'border-2 border-solid border-[var(--theme-background)]',\n 'bg-[var(--theme-surface)] pl-6 pr-6 text-[var(--theme-text)]',\n className,\n )}\n style={{\n '--ui-kit-accent': accentColor,\n ...style,\n } as CSSProperties}\n >\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-y-0 left-0 w-[25px] bg-[var(--ui-kit-accent)]\"\n />\n\n {icon ? (\n <div\n aria-hidden=\"true\"\n className={cx(\n 'ml-4 inline-flex h-[52px] w-[52px] shrink-0 items-center justify-center',\n 'rounded-xl bg-[color-mix(in_srgb,var(--ui-kit-accent)_24%,transparent)]',\n 'text-[var(--ui-kit-accent)]',\n )}\n >\n {icon}\n </div>\n ) : null}\n\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n {title ? (\n <div className=\"truncate text-sm font-bold leading-[1.25] text-[var(--theme-text)]\">\n {title}\n </div>\n ) : null}\n {value ? (\n <div className=\"truncate text-[18px] font-extrabold leading-[1.15] text-[var(--theme-text)]\">\n {value}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n","import { useEffect, useId, useRef, useState, type CSSProperties, type InputHTMLAttributes, type ReactNode } from 'react';\n\nimport {\n cx,\n DISABLED_FIELD_OPACITY,\n UI_KIT_ROOT_CLASSNAME,\n useUiKitTheme,\n type ControlSize,\n} from '../foundation';\n\nexport interface CheckboxIndicatorProps {\n checked: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n size?: number;\n checkedColor?: string;\n iconColor?: string;\n uncheckedBorderColor?: string;\n uncheckedBackgroundColor?: string;\n style?: CSSProperties;\n}\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'dangerouslySetInnerHTML' | 'size' | 'type'> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n size?: ControlSize;\n indeterminate?: boolean;\n}\n\nconst CHECKBOX_SIZE_BY_SIZE: Record<ControlSize, number> = {\n sm: 14,\n md: 16,\n lg: 20,\n};\n\nconst CHECKBOX_LABEL_CLASSNAMES: Record<ControlSize, string> = {\n sm: 'text-[13px] leading-4',\n md: 'text-sm leading-[18px]',\n lg: 'text-[15px] leading-[18px]',\n};\n\nconst getCheckboxSize = (size: ControlSize): number => CHECKBOX_SIZE_BY_SIZE[size];\n\nconst hasNodeContent = (value: ReactNode): boolean => {\n if (Array.isArray(value)) {\n return value.some(hasNodeContent);\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n return value !== null && value !== undefined && value !== false;\n};\n\nfunction CheckIcon({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M5.75 10.25L8.5 13l5.75-6\"\n stroke={color}\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction MixedIcon({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5.5 10H14.5\" stroke={color} strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function CheckboxIndicator({\n checked,\n indeterminate = false,\n disabled = false,\n size = 20,\n checkedColor,\n iconColor,\n uncheckedBackgroundColor,\n style,\n}: CheckboxIndicatorProps) {\n const theme = useUiKitTheme();\n const isActive = checked || indeterminate;\n const resolvedCheckedColor = checkedColor ?? theme.colors.textLight;\n const resolvedIconColor = iconColor ?? theme.colors.surface;\n const resolvedUncheckedBackgroundColor = uncheckedBackgroundColor ?? theme.colors.surface;\n\n return (\n <span\n aria-hidden=\"true\"\n style={{\n width: size,\n height: size,\n borderRadius: 999,\n boxSizing: 'border-box',\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 0,\n backgroundColor: isActive ? resolvedCheckedColor : resolvedUncheckedBackgroundColor,\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n transition: 'background-color 140ms ease, border-color 140ms ease, opacity 140ms ease',\n ...style,\n }}\n >\n {indeterminate ? <MixedIcon size={Math.max(10, size - 6)} color={resolvedIconColor} /> : null}\n {!indeterminate && checked ? <CheckIcon size={Math.max(10, size - 6)} color={resolvedIconColor} /> : null}\n </span>\n );\n}\n\nexport function Checkbox({\n label,\n hint,\n error,\n size = 'sm',\n id,\n checked,\n defaultChecked,\n disabled,\n indeterminate = false,\n required,\n className,\n style,\n onChange,\n onFocus,\n onBlur,\n ...rest\n}: CheckboxProps) {\n const theme = useUiKitTheme();\n const mutedText = theme.colors.textLight;\n const indicatorSize = getCheckboxSize(size);\n const hasLabel = hasNodeContent(label);\n const hasHint = hasNodeContent(hint);\n const hasError = hasNodeContent(error);\n const hasSecondaryContent = hasLabel && hasHint;\n const resolvedId = id ?? `ss-checkbox-${useId().replace(/:/g, '')}`;\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalChecked, setInternalChecked] = useState(Boolean(defaultChecked));\n const isControlled = checked !== undefined;\n const resolvedChecked = isControlled ? Boolean(checked) : internalChecked;\n\n useEffect(() => {\n if (!inputRef.current) {\n return;\n }\n\n inputRef.current.indeterminate = indeterminate;\n }, [indeterminate, resolvedChecked]);\n\n return (\n <div\n className={cx(UI_KIT_ROOT_CLASSNAME, 'flex w-full flex-col gap-1.5', className)}\n style={style}\n >\n <label\n htmlFor={resolvedId}\n className={cx(\n 'inline-flex select-none gap-2.5',\n hasSecondaryContent ? 'items-start' : 'items-center',\n hasLabel || hasHint || hasError ? 'w-full' : 'w-auto',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n style={disabled ? { opacity: DISABLED_FIELD_OPACITY } : undefined}\n >\n <span\n className={cx(\n 'relative inline-flex shrink-0 items-center justify-center rounded-full p-0.5',\n hasSecondaryContent ? 'mt-px' : 'mt-0',\n )}\n >\n <input\n {...rest}\n ref={inputRef}\n id={resolvedId}\n type=\"checkbox\"\n checked={resolvedChecked}\n disabled={disabled}\n required={required}\n onChange={(event) => {\n if (!isControlled) {\n setInternalChecked(event.currentTarget.checked);\n }\n\n onChange?.(event);\n }}\n onFocus={(event) => {\n onFocus?.(event);\n }}\n onBlur={(event) => {\n onBlur?.(event);\n }}\n className={cx(\n 'absolute inset-0 m-0 h-full w-full opacity-0',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n />\n <CheckboxIndicator\n checked={resolvedChecked}\n indeterminate={indeterminate}\n disabled={disabled}\n size={indicatorSize}\n checkedColor={theme.colors.primary}\n iconColor={theme.colors.onPrimary}\n uncheckedBackgroundColor={theme.colors.secondary}\n style={disabled ? { opacity: 1 } : undefined}\n />\n </span>\n\n {hasLabel || hasHint || hasError ? (\n <span\n className={cx(\n 'flex min-w-0 flex-col gap-1',\n hasSecondaryContent ? 'justify-start' : 'justify-center',\n )}\n >\n {label ? (\n <span className={cx('font-semibold text-[var(--theme-text)]', CHECKBOX_LABEL_CLASSNAMES[size])}>\n {label}\n {required ? <span className=\"ml-1 text-[var(--theme-negative)]\">*</span> : null}\n </span>\n ) : null}\n {hint ? (\n <span className=\"text-[13px] leading-[1.45] text-[var(--theme-textLight)]\">\n {hint}\n </span>\n ) : null}\n {error ? (\n <span className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-negative)]\">\n {error}\n </span>\n ) : null}\n </span>\n ) : null}\n </label>\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from './Button';\nimport { Modal } from './Modal';\n\nexport interface ModalSlotIds {\n header: string;\n body: string;\n footer: string;\n}\n\nexport interface ModalSlotContext<TPayload = unknown> {\n title: string;\n payload?: TPayload;\n close: () => void;\n confirm?: () => void;\n confirmLabel: string;\n cancelLabel: string;\n isOpen: boolean;\n isBusy: boolean;\n}\n\nexport interface ComposableModalSlotRenderProps<TPayload = unknown> {\n id: string;\n context: ModalSlotContext<TPayload>;\n children?: ReactNode;\n}\n\nexport type ComposableModalSlotRenderer<TPayload = unknown> = (\n props: ComposableModalSlotRenderProps<TPayload>,\n) => ReactNode;\n\nexport interface ComposableModalProps<TPayload = unknown> {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n slotBaseId: string;\n renderSlot?: ComposableModalSlotRenderer<TPayload>;\n payload?: TPayload;\n onConfirm?: () => void;\n confirmLabel?: string;\n cancelLabel?: string;\n isBusy?: boolean;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n hideExpandButton?: boolean;\n maximized?: boolean;\n hideDefaultFooter?: boolean;\n maxWidth?: number | string;\n headerFallback?: ReactNode;\n footerFallback?: ReactNode;\n children?: ReactNode;\n}\n\nexport const createModalSlotIds = (slotBaseId: string): ModalSlotIds => ({\n header: `${slotBaseId}:modal-header`,\n body: `${slotBaseId}:modal-body`,\n footer: `${slotBaseId}:modal-footer`,\n});\n\nexport function ComposableModal<TPayload = unknown>({\n isOpen,\n onClose,\n title,\n slotBaseId,\n renderSlot,\n payload,\n onConfirm,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n isBusy = false,\n closeOnBackdrop = true,\n closeOnEscape = true,\n hideExpandButton = false,\n maximized,\n hideDefaultFooter = false,\n maxWidth,\n headerFallback,\n footerFallback,\n children,\n}: ComposableModalProps<TPayload>) {\n const slotIds = createModalSlotIds(slotBaseId);\n\n const context = useMemo<ModalSlotContext<TPayload>>(\n () => ({\n title,\n payload,\n close: onClose,\n confirm: onConfirm,\n confirmLabel,\n cancelLabel,\n isOpen,\n isBusy,\n }),\n [cancelLabel, confirmLabel, isBusy, isOpen, onClose, onConfirm, payload, title],\n );\n\n const defaultFooter = hideDefaultFooter ? undefined : (\n footerFallback ?? (\n <>\n <Button variant=\"outline\" onClick={onClose} disabled={isBusy}>\n {cancelLabel}\n </Button>\n {onConfirm ? (\n <Button onClick={onConfirm} disabled={isBusy}>\n {confirmLabel}\n </Button>\n ) : null}\n </>\n )\n );\n\n const defaultHeader = headerFallback ?? (\n <h2\n className=\"m-0 text-[24px] font-extrabold leading-[1.1]\"\n >\n {title}\n </h2>\n );\n\n const renderSlotContent = (id: string, slotChildren: ReactNode) => {\n if (!renderSlot) {\n return slotChildren;\n }\n\n return renderSlot({\n id,\n context,\n children: slotChildren,\n });\n };\n\n const headerContent = renderSlotContent(slotIds.header, defaultHeader);\n const bodyContent = renderSlotContent(slotIds.body, children);\n const footerContent = renderSlotContent(slotIds.footer, defaultFooter);\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n isBusy={isBusy}\n headerContent={headerContent}\n footer={footerContent}\n maxWidth={maxWidth}\n hideExpandButton={hideExpandButton}\n maximized={maximized}\n closeOnBackdrop={closeOnBackdrop}\n closeOnEscape={closeOnEscape}\n >\n {bodyContent}\n </Modal>\n );\n}","import { useEffect, useMemo, useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\n\nimport {\n cx,\n UI_KIT_ROOT_CLASSNAME,\n getControlMetrics,\n normalizeUiKitTheme,\n useUiKitTheme,\n type UiKitTheme,\n} from '../foundation';\nimport { Button } from './Button';\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\nconst MODAL_HEADER_CONTROL_METRICS = getControlMetrics('sm');\nconst MODAL_HEADER_CONTROL_SIZE = MODAL_HEADER_CONTROL_METRICS.height;\nconst MODAL_HEADER_ICON_SIZE = 18;\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 variant = appearance === 'contained'\n ? 'solid'\n : appearance === 'outlined'\n ? 'outline'\n : 'ghost';\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 variant={variant}\n onClick={onClick}\n disabled={disabled}\n >\n {label}\n </Button>\n </div>\n );\n}\n\nfunction ModalBusyIndicator({\n theme,\n}: {\n theme: UiKitTheme;\n}) {\n return (\n <div\n aria-live=\"polite\"\n role=\"status\"\n className=\"relative inline-flex h-14 w-14 items-center justify-center rounded-full\"\n style={{\n backgroundColor: theme.colors.surface,\n }}\n >\n <span className=\"ui-kit-sr-only\">Loading</span>\n <svg aria-hidden=\"true\" width=\"32\" height=\"32\" viewBox=\"0 0 40 40\" fill=\"none\">\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"16\"\n stroke={theme.colors.textLight}\n strokeWidth=\"4\"\n />\n <path\n d=\"M20 4C28.837 4 36 11.163 36 20\"\n stroke={theme.colors.primary}\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n >\n <animateTransform\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"0 20 20\"\n to=\"360 20 20\"\n dur=\"0.75s\"\n repeatCount=\"indefinite\"\n />\n </path>\n </svg>\n </div>\n );\n}\n\nfunction MaximizeIcon() {\n return (\n <svg aria-hidden=\"true\" width={MODAL_HEADER_ICON_SIZE} height={MODAL_HEADER_ICON_SIZE} 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.8\" />\n </svg>\n );\n}\n\nfunction MinimizeIcon() {\n return (\n <svg aria-hidden=\"true\" width={MODAL_HEADER_ICON_SIZE} height={MODAL_HEADER_ICON_SIZE} 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.8\"\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.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg aria-hidden=\"true\" width={MODAL_HEADER_ICON_SIZE} height={MODAL_HEADER_ICON_SIZE} viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M4.5 4.5 15.5 15.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M15.5 4.5 4.5 15.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nfunction ModalHeaderControl({\n ariaLabel,\n title,\n onClick,\n disabled = false,\n children,\n}: {\n ariaLabel: string;\n title: string;\n onClick: () => void;\n disabled?: boolean;\n children: ReactNode;\n}) {\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={ariaLabel}\n title={title}\n onClick={onClick}\n disabled={disabled}\n className={cx(\n 'm-0 gap-0 rounded-xl text-[var(--theme-text)] transition-colors',\n 'hover:bg-[var(--theme-background)] hover:no-underline',\n 'active:bg-[var(--theme-background)]',\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--theme-primary)]',\n )}\n style={{\n width: MODAL_HEADER_CONTROL_SIZE,\n minWidth: MODAL_HEADER_CONTROL_SIZE,\n maxWidth: MODAL_HEADER_CONTROL_SIZE,\n height: MODAL_HEADER_CONTROL_SIZE,\n minHeight: MODAL_HEADER_CONTROL_SIZE,\n maxHeight: MODAL_HEADER_CONTROL_SIZE,\n padding: 0,\n aspectRatio: '1 / 1',\n }}\n >\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-flex',\n width: MODAL_HEADER_ICON_SIZE,\n height: MODAL_HEADER_ICON_SIZE,\n minWidth: MODAL_HEADER_ICON_SIZE,\n minHeight: MODAL_HEADER_ICON_SIZE,\n alignItems: 'center',\n justifyContent: 'center',\n lineHeight: 0,\n flexShrink: 0,\n }}\n >\n {children}\n </span>\n </Button>\n );\n}\n\nfunction UnifiedModal({\n isOpen,\n onClose,\n children,\n title,\n headerContent,\n footer,\n confirmAction,\n cancelAction,\n closeAction,\n extraActions,\n maxWidth,\n closeOnBackdrop = true,\n closeOnEscape = true,\n hideCloseButton = false,\n hideExpandButton = false,\n disableDismiss = false,\n maximized,\n contentStyle,\n bodyStyle,\n isBusy = false,\n theme,\n}: ModalProps) {\n const inheritedTheme = useUiKitTheme();\n const modalTheme = useMemo(() => resolveTheme(inheritedTheme, theme), [inheritedTheme, theme]);\n const modalThemeVariables = useMemo<CSSProperties>(() => ({\n '--theme-background': modalTheme.colors.background,\n '--theme-surface': modalTheme.colors.surface,\n '--theme-text': modalTheme.colors.text,\n '--theme-textLight': modalTheme.colors.textLight,\n '--theme-primary': modalTheme.colors.primary,\n '--theme-onPrimary': modalTheme.colors.onPrimary,\n '--theme-secondary': modalTheme.colors.secondary,\n '--theme-onSecondary': modalTheme.colors.onSecondary,\n '--theme-negative': modalTheme.colors.negative,\n '--theme-warning': modalTheme.colors.warning,\n '--theme-shadow': modalTheme.colors.shadow,\n } as CSSProperties), [modalTheme]);\n const [isMaximized, setIsMaximized] = useState<boolean>(maximized ?? false);\n const titleId = useMemo(() => createTitleId(title), [title]);\n const shouldDisableDismiss = disableDismiss || isBusy;\n\n useEffect(() => {\n if (typeof maximized === 'boolean') {\n setIsMaximized(maximized);\n return;\n }\n\n if (isLikelyMobileViewport()) {\n setIsMaximized(true);\n }\n }, [maximized]);\n\n useEffect(() => {\n if (!isOpen || typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!shouldDisableDismiss && closeOnEscape && event.key === 'Escape') {\n onClose();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.body.style.overflow = previousOverflow;\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [closeOnEscape, isOpen, onClose, shouldDisableDismiss]);\n\n if (!isOpen) {\n return null;\n }\n\n const resolvedHeader = headerContent ?? (title ? (\n <h2\n id={titleId}\n className=\"m-0 text-2xl font-extrabold leading-[1.1] text-[var(--theme-text)]\"\n >\n {title}\n </h2>\n ) : null);\n\n let footerContent = footer;\n\n if (footerContent === undefined) {\n if (closeAction && !closeAction.hidden) {\n footerContent = (\n <ModalActionButton\n action={{ ...closeAction, disabled: closeAction.disabled || isBusy }}\n />\n );\n } else {\n const resolvedActions = [\n cancelAction\n ? {\n ...cancelAction,\n appearance: cancelAction.appearance ?? 'text',\n disabled: cancelAction.disabled || isBusy,\n }\n : undefined,\n ...(extraActions ?? []).map((action) => ({\n ...action,\n appearance: action.appearance ?? 'contained',\n disabled: action.disabled || isBusy,\n })),\n confirmAction\n ? {\n ...confirmAction,\n appearance: confirmAction.appearance ?? 'contained',\n disabled: confirmAction.disabled || isBusy,\n }\n : undefined,\n ].reduce<ModalAction[]>((items, action) => {\n if (!action || action.hidden) {\n return items;\n }\n\n items.push(action);\n return items;\n }, []);\n\n footerContent = resolvedActions.length > 0\n ? resolvedActions.map((action, index) => (\n <ModalActionButton\n key={`modal-action-${index}`}\n action={action}\n />\n ))\n : undefined;\n }\n }\n\n const shouldRenderFooter = footerContent !== undefined && footerContent !== null && footerContent !== false;\n\n return (\n <div\n aria-label={headerContent ? (typeof title === 'string' ? title : 'Dialog') : undefined}\n aria-labelledby={headerContent ? undefined : title ? titleId : undefined}\n aria-busy={isBusy}\n aria-modal=\"true\"\n role=\"dialog\"\n onMouseDown={(event) => {\n if (!shouldDisableDismiss && closeOnBackdrop && event.target === event.currentTarget) {\n onClose();\n }\n }}\n className={cx(UI_KIT_ROOT_CLASSNAME, 'fixed inset-0 z-[70] flex items-center justify-center backdrop-blur-[8px]')}\n style={{\n ...modalThemeVariables,\n padding: isMaximized ? 0 : 16,\n backgroundColor: modalTheme.colors.shadow,\n }}\n >\n <div\n className={cx(\n 'relative flex flex-col overflow-hidden border-0',\n 'bg-[var(--theme-surface)]',\n 'text-[var(--theme-text)]',\n isMaximized ? 'rounded-none' : 'rounded-[30px]',\n )}\n style={{\n width: isMaximized ? '100vw' : 'min(100%, 100%)',\n maxWidth: isMaximized ? '100vw' : normalizeWidth(maxWidth),\n height: isMaximized ? '100vh' : undefined,\n maxHeight: isMaximized ? '100vh' : 'calc(100vh - 32px)',\n minWidth: isMaximized ? '100vw' : 300,\n ...contentStyle,\n }}\n >\n <div\n className=\"flex items-start justify-between gap-3 px-5 pb-3 pt-[18px]\"\n >\n <div\n className={cx(\n 'flex-1 transition-opacity duration-150',\n isBusy ? 'opacity-[0.38]' : 'opacity-100',\n )}\n >\n {resolvedHeader}\n </div>\n <div className=\"flex items-center gap-2\">\n {!hideExpandButton ? (\n <ModalHeaderControl\n ariaLabel={isMaximized ? 'Minimize modal' : 'Maximize modal'}\n title={isMaximized ? 'Minimize' : 'Maximize'}\n onClick={() => setIsMaximized((current) => !current)}\n >\n {isMaximized ? <MinimizeIcon /> : <MaximizeIcon />}\n </ModalHeaderControl>\n ) : null}\n {!hideCloseButton ? (\n <ModalHeaderControl\n ariaLabel=\"Close modal\"\n title=\"Close\"\n onClick={onClose}\n disabled={shouldDisableDismiss}\n >\n <CloseIcon />\n </ModalHeaderControl>\n ) : null}\n </div>\n </div>\n\n <div\n className=\"relative min-h-0 flex-1 overflow-auto p-6\"\n style={bodyStyle}\n >\n <div\n className={cx(\n 'transition-[opacity,filter] duration-150',\n isBusy ? 'pointer-events-none opacity-[0.38] saturate-[0.8]' : 'pointer-events-auto opacity-100 saturate-100',\n )}\n >\n {children}\n </div>\n {isBusy ? (\n <div\n className=\"absolute inset-0 flex items-center justify-center backdrop-blur-[2px]\"\n style={{ backgroundColor: modalTheme.colors.background }}\n >\n <ModalBusyIndicator theme={modalTheme} />\n </div>\n ) : null}\n </div>\n\n {shouldRenderFooter ? (\n <div\n className=\"flex justify-end gap-2.5 px-5 pb-4 pt-3\"\n >\n {footerContent}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport function Modal(props: ModalProps) {\n return <UnifiedModal {...props} />;\n}\n","'use client';\n\nimport {\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type ChangeEvent,\n type InputHTMLAttributes,\n type ReactNode,\n type Ref,\n} from 'react';\n\nimport {\n cx,\n getControlLeadingAdornmentWidth,\n getControlLeadingIconInset,\n getControlMetrics,\n getControlTextNudgeStyle,\n CONTROL_TEXT_VERTICAL_SHIFT,\n getTextInputPadding,\n UI_KIT_ROOT_CLASSNAME,\n getFieldSizeStyles,\n useUiKitTheme,\n type ControlSize,\n} from '../foundation';\n\ntype ControlFrameProps = {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n htmlFor?: string;\n required?: boolean;\n useLabelWrapper?: boolean;\n children: ReactNode;\n style?: CSSProperties;\n alignLabel?: 'center' | 'top';\n hasValue?: boolean;\n labelOffset?: number;\n floatingPlaceholderVerticalShift?: number;\n floatingPlaceholder?: string;\n size?: ControlSize;\n};\n\nexport interface InputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'dangerouslySetInnerHTML' | 'size'\n> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n size?: ControlSize;\n showPasswordToggle?: boolean;\n fileButtonLabel?: ReactNode;\n icon?: ReactNode;\n disableFloatingLabel?: boolean;\n // React 19 passes `ref` as a regular prop; it flows through `...rest` onto the\n // underlying <input> so callers (e.g. the SelectBase search box) can focus it.\n ref?: Ref<HTMLInputElement>;\n}\n\ntype PasswordToggleMetrics = {\n buttonSize: number;\n leftOffset: number;\n contentGap: number;\n iconSize: number;\n};\n\nconst PASSWORD_TOGGLE_METRICS_BY_SIZE: Record<\n ControlSize,\n PasswordToggleMetrics\n> = {\n sm: {\n buttonSize: 18,\n leftOffset: 8,\n contentGap: 8,\n iconSize: 14,\n },\n md: {\n buttonSize: 19,\n leftOffset: 9,\n contentGap: 9,\n iconSize: 15,\n },\n lg: {\n buttonSize: 20,\n leftOffset: 10,\n contentGap: 10,\n iconSize: 16,\n },\n};\n\nconst getPasswordToggleMetrics = (size: ControlSize): PasswordToggleMetrics =>\n PASSWORD_TOGGLE_METRICS_BY_SIZE[size];\n\nconst LOGIN_VALIDATION_ERROR = 'Spaces are not allowed.';\nconst EMAIL_VALIDATION_ERROR = 'Enter a valid email address.';\nconst FULLNAME_VALIDATION_ERROR =\n 'Only letters, spaces, and periods are allowed.';\nconst EMAIL_VALUE_PATTERN = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nconst SPACE_PATTERN = /\\s/;\nconst FULLNAME_INVALID_PATTERN = /[^\\p{L}\\s.]/u;\n\nconst isRenderableNode = (node: ReactNode): boolean =>\n node !== null && node !== undefined && node !== false;\n\nconst getInputValidationError = (\n type: string,\n value: string,\n): string | undefined => {\n if (!value) {\n return undefined;\n }\n\n if (type === 'login' || type === 'username') {\n return SPACE_PATTERN.test(value) ? LOGIN_VALIDATION_ERROR : undefined;\n }\n\n if (type === 'email') {\n return EMAIL_VALUE_PATTERN.test(value) ? undefined : EMAIL_VALIDATION_ERROR;\n }\n\n if (type === 'fullName') {\n return FULLNAME_INVALID_PATTERN.test(value)\n ? FULLNAME_VALIDATION_ERROR\n : undefined;\n }\n\n return undefined;\n};\n\nfunction EmailIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d={\n 'M3.75 6.25A1.875 1.875 0 0 1 5.625 4.375h8.75A1.875 1.875 0 0 1 16.25 6.25v7.5' +\n 'a1.875 1.875 0 0 1-1.875 1.875h-8.75A1.875 1.875 0 0 1 3.75 13.75v-7.5Z'\n }\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.375 6.25 10 10.625l5.625-4.375\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction LoginIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle cx=\"10\" cy=\"6.25\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\n <path\n d=\"M4.75 16a5.25 5.25 0 0 1 10.5 0\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nfunction UsernameIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction FullNameIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction CalendarIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <rect\n width=\"18\"\n height=\"18\"\n x=\"3\"\n y=\"4\"\n rx=\"2\"\n ry=\"2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"16\"\n x2=\"16\"\n y1=\"2\"\n y2=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"8\"\n x2=\"8\"\n y1=\"2\"\n y2=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"3\"\n x2=\"21\"\n y1=\"10\"\n y2=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction FileIcon({ size, selected }: { size: number; selected: boolean }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n {selected ? (\n <>\n <path\n d=\"M5.5 6.25h9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M7.25 6.25V5.25A1.5 1.5 0 0 1 8.75 3.75h2.5a1.5 1.5 0 0 1 1.5 1.5v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.75 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M10 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M12.25 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M6.75 6.25l.5 8a1.5 1.5 0 0 0 1.497 1.406h2.506A1.5 1.5 0 0 0 12.75 14.25l.5-8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </>\n ) : (\n <>\n <path\n d=\"M6.25 2.5h5.652l4.348 4.348V15A2.5 2.5 0 0 1 13.75 17.5h-7.5A2.5 2.5 0 0 1 3.75 15V5A2.5 2.5 0 0 1 6.25 2.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.875 2.75V6.25H15.375\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.5 10h5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M7.5 13h5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </>\n )}\n </svg>\n );\n}\n\nfunction PasswordVisibleIcon({\n size,\n playing = false,\n}: {\n size: number;\n playing?: boolean;\n}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={\n playing\n ? {\n animation: `lf-lock-hint-blink ${LOCK_HINT_DURATION_MS}ms ease-in-out`,\n }\n : undefined\n }\n >\n {playing ? <style>{LOCK_HINT_STYLE}</style> : null}\n <path\n d=\"M6.75 8V6.75A3.25 3.25 0 0 1 12.262 4.415\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d={\n 'M6 8.25h8a1.75 1.75 0 0 1 1.75 1.75V14' +\n 'A1.75 1.75 0 0 1 14 15.75H6A1.75 1.75 0 0 1 4.25 14V10A1.75 1.75 0 0 1 6 8.25Z'\n }\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 11.25v1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\n// One-shot \"this is clickable\" cue: the padlock blinks while its shackle\n// alternates open/closed a couple of times, then settles back to the locked state.\nconst LOCK_HINT_DURATION_MS = 1500;\nconst LOCK_HINT_TOGGLE_INTERVAL_MS = 240;\nconst LOCK_HINT_STYLE = `\n@keyframes lf-lock-hint-blink {\n 0%, 100% { opacity: 1; }\n 18%, 58% { opacity: 0.4; }\n 38%, 78% { opacity: 1; }\n}\n@keyframes lf-lock-hint-shackle {\n 0%, 38%, 78%, 100% { transform: translateY(0) rotate(0deg); }\n 18%, 58% { transform: translateY(-1px) rotate(-42deg); }\n}\n`;\n\nfunction PasswordHiddenIcon({\n size,\n playing = false,\n}: {\n size: number;\n playing?: boolean;\n}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={\n playing\n ? {\n animation: `lf-lock-hint-blink ${LOCK_HINT_DURATION_MS}ms ease-in-out`,\n }\n : undefined\n }\n >\n {playing ? <style>{LOCK_HINT_STYLE}</style> : null}\n <path\n d=\"M6.75 8V6.75A3.25 3.25 0 1 1 13.25 6.75V8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={\n playing\n ? {\n transformBox: 'fill-box',\n transformOrigin: '100% 100%',\n animation: `lf-lock-hint-shackle ${LOCK_HINT_DURATION_MS}ms ease-in-out`,\n }\n : undefined\n }\n />\n <path\n d={\n 'M6 8.25h8a1.75 1.75 0 0 1 1.75 1.75V14' +\n 'A1.75 1.75 0 0 1 14 15.75H6A1.75 1.75 0 0 1 4.25 14V10A1.75 1.75 0 0 1 6 8.25Z'\n }\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 11.25v1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nexport function ControlFrame({\n label,\n hint,\n error,\n htmlFor,\n required = false,\n useLabelWrapper = true,\n children,\n style,\n alignLabel = 'center',\n hasValue = false,\n labelOffset,\n floatingPlaceholder,\n size = 'md',\n floatingPlaceholderVerticalShift = CONTROL_TEXT_VERTICAL_SHIFT,\n}: ControlFrameProps) {\n useUiKitTheme();\n\n const isTextarea = alignLabel === 'top';\n const controlMetrics = getControlMetrics(size);\n\n const floatingElement = floatingPlaceholder ? (\n <span\n className={cx(\n 'ui-kit-floating-placeholder absolute px-1.5 pointer-events-none',\n 'transition-all duration-150 origin-[left_center] max-w-[calc(100%-24px)]',\n 'overflow-hidden text-ellipsis whitespace-nowrap rounded-full',\n 'left-[var(--label-left-base,12px)]',\n 'rounded-tl-[16px] rounded-tr-[16px]',\n hasValue ? 'ui-kit-floating-placeholder--active' : '',\n 'group-has-[:disabled]:opacity-70',\n )}\n style={\n {\n zIndex: 10,\n '--label-left-base':\n labelOffset !== undefined ? `${labelOffset}px` : '12px',\n '--floating-label-font-size': `${controlMetrics.fontSize}px`,\n '--floating-label-line-height': controlMetrics.lineHeight,\n '--floating-label-resting-top': isTextarea\n ? '14px'\n : `calc(50% - ${floatingPlaceholderVerticalShift}px)`,\n '--floating-label-resting-transform': isTextarea\n ? 'translateY(0)'\n : 'translateY(-50%)',\n '--floating-label-active-font-size': '13px',\n '--floating-label-active-line-height': '16px',\n } as CSSProperties\n }\n aria-hidden=\"true\"\n >\n {floatingPlaceholder}\n </span>\n ) : null;\n\n const innerContent = (\n <div className=\"relative w-full flex group\">\n {children}\n {floatingElement}\n </div>\n );\n\n const hintsContent =\n hint || error ? (\n <div className=\"flex flex-col gap-1 mt-0\" style={{ paddingLeft: controlMetrics.paddingX }}>\n {hint && !error ? (\n <span className=\"text-[13px] leading-[1.45] text-[var(--theme-textLight)]\">\n {hint}\n </span>\n ) : null}\n {error ? (\n <span className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-negative)]\">\n {error}\n </span>\n ) : null}\n </div>\n ) : null;\n\n if (label && useLabelWrapper) {\n return (\n <label\n htmlFor={htmlFor}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'flex w-full cursor-pointer flex-col gap-1',\n )}\n style={style}\n >\n <span className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-text)]\">\n {label}\n {required ? (\n <span className=\"ml-1 text-[var(--theme-negative)]\">*</span>\n ) : null}\n </span>\n {innerContent}\n {hintsContent}\n </label>\n );\n }\n\n return (\n <div\n className={cx(UI_KIT_ROOT_CLASSNAME, 'flex w-full flex-col gap-1')}\n style={style}\n >\n {label && !useLabelWrapper ? (\n <label\n htmlFor={htmlFor}\n className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-text)]\"\n >\n {label}\n {required ? (\n <span className=\"ml-1 text-[var(--theme-negative)]\">*</span>\n ) : null}\n </label>\n ) : null}\n {innerContent}\n {hintsContent}\n </div>\n );\n}\n\nexport function Input({\n label,\n hint,\n error,\n size = 'md',\n className,\n showPasswordToggle = true,\n fileButtonLabel,\n icon,\n id,\n disabled,\n placeholder,\n onChange,\n style,\n type = 'text',\n disableFloatingLabel,\n ...rest\n}: InputProps) {\n const controlMetrics = getControlMetrics(size);\n const passwordToggleMetrics = getPasswordToggleMetrics(size);\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const [isPasswordVisible, setIsPasswordVisible] = useState(false);\n const [isLockHinting, setIsLockHinting] = useState(false);\n const [isLockHintOpen, setIsLockHintOpen] = useState(false);\n const lockHintTimerRef = useRef<number | null>(null);\n const lockHintIntervalRef = useRef<number | null>(null);\n const [selectedFileNames, setSelectedFileNames] = useState<string[]>([]);\n const [validationError, setValidationError] = useState<string | undefined>();\n const isPasswordField = type === 'password';\n const isEmailField = type === 'email';\n const isLoginField = type === 'login';\n const isUsernameField = type === 'username';\n const isFullNameField = type === 'fullName';\n const isFileField = type === 'file';\n const isDateField = type === 'date' || type === 'datetime-local';\n const canTogglePasswordVisibility = isPasswordField && showPasswordToggle;\n const resolvedType =\n isLoginField || isUsernameField\n ? 'text'\n : canTogglePasswordVisibility\n ? isPasswordVisible\n ? 'text'\n : 'password'\n : type;\n\n // Clear picked file names when the field stops being a file input. Adjusting\n // state during render is React's recommended alternative to an effect.\n if (!isFileField && selectedFileNames.length > 0) {\n setSelectedFileNames([]);\n }\n\n // Keep the validation error in sync with a CONTROLLED value (and clear it for\n // field types we don't validate). For uncontrolled inputs `rest.value` isn't a\n // string, so the key stays null and the onChange handler drives validation.\n const isValidatableField =\n isEmailField || isLoginField || isUsernameField || isFullNameField;\n const validationKey =\n isValidatableField && typeof rest.value === 'string'\n ? `${type}\\u0000${rest.value}`\n : null;\n const [prevValidationKey, setPrevValidationKey] = useState<string | null>(\n null,\n );\n if (validationKey !== prevValidationKey) {\n setPrevValidationKey(validationKey);\n setValidationError(\n validationKey === null\n ? undefined\n : getInputValidationError(type, rest.value as string),\n );\n }\n\n const clearLockHintTimers = () => {\n if (lockHintTimerRef.current !== null) {\n window.clearTimeout(lockHintTimerRef.current);\n lockHintTimerRef.current = null;\n }\n\n if (lockHintIntervalRef.current !== null) {\n window.clearInterval(lockHintIntervalRef.current);\n lockHintIntervalRef.current = null;\n }\n };\n\n const stopLockHint = () => {\n clearLockHintTimers();\n\n setIsLockHinting(false);\n setIsLockHintOpen(false);\n };\n\n useEffect(() => clearLockHintTimers, []);\n\n const triggerLockHint = () => {\n if (disabled || isPasswordVisible || lockHintTimerRef.current !== null) {\n return;\n }\n\n if (\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n ) {\n return;\n }\n\n setIsLockHinting(true);\n setIsLockHintOpen(true);\n lockHintIntervalRef.current = window.setInterval(() => {\n setIsLockHintOpen((currentValue) => !currentValue);\n }, LOCK_HINT_TOGGLE_INTERVAL_MS);\n lockHintTimerRef.current = window.setTimeout(() => {\n stopLockHint();\n }, LOCK_HINT_DURATION_MS);\n };\n\n const hasFileButtonLabel =\n typeof fileButtonLabel === 'string'\n ? fileButtonLabel.trim().length > 0\n : fileButtonLabel != null;\n const hasSelectedFiles = selectedFileNames.length > 0;\n const showUploadLabel = hasFileButtonLabel && !hasSelectedFiles;\n const passwordLockIconSize = passwordToggleMetrics.iconSize + 2;\n const leadingContentGap = Math.max(\n 0,\n Math.round(controlMetrics.paddingX / 3),\n );\n const leadingIconInset = getControlLeadingIconInset(size);\n const controlTextNudgeStyle = getControlTextNudgeStyle();\n const hasExternalError =\n error !== undefined && error !== null && error !== '';\n const resolvedError = hasExternalError ? error : validationError;\n const hasResolvedError =\n resolvedError !== undefined &&\n resolvedError !== null &&\n resolvedError !== '';\n const fileSelectionText =\n selectedFileNames.length === 0\n ? (placeholder ?? '')\n : selectedFileNames.length === 1\n ? selectedFileNames[0]\n : `${selectedFileNames.length} files selected`;\n const fileIconSize = Math.max(controlMetrics.fontSize + 3, 16);\n const fileTriggerWidth = getControlLeadingAdornmentWidth(size, fileIconSize);\n const leadingAdornmentWidth = getControlLeadingAdornmentWidth(\n size,\n fileIconSize,\n );\n const passwordAdornmentWidth = getControlLeadingAdornmentWidth(\n size,\n passwordLockIconSize,\n );\n const floatingPlaceholder =\n !disableFloatingLabel && placeholder !== undefined && placeholder !== ''\n ? placeholder\n : undefined;\n const resolvedPlaceholder = placeholder ?? ' ';\n const isStaticPlaceholderVisible =\n disableFloatingLabel &&\n (rest.value === '' || (rest.value == null && rest.defaultValue == null));\n\n const defaultLeadingIcon = isEmailField ? (\n <EmailIcon size={fileIconSize} />\n ) : isUsernameField ? (\n <UsernameIcon size={fileIconSize} />\n ) : isFullNameField ? (\n <FullNameIcon size={fileIconSize} />\n ) : isLoginField ? (\n <LoginIcon size={fileIconSize} />\n ) : isDateField ? (\n <CalendarIcon size={fileIconSize} />\n ) : null;\n const resolvedLeadingIcon = icon ?? defaultLeadingIcon;\n const hasLeadingIcon = isRenderableNode(resolvedLeadingIcon);\n const hasCustomLeadingIcon = isRenderableNode(icon) && hasLeadingIcon;\n const resolvedFileIcon = icon ?? (\n <FileIcon size={fileIconSize} selected={hasSelectedFiles} />\n );\n const resolvedPasswordIcon =\n icon ??\n (isPasswordVisible || (isLockHinting && isLockHintOpen) ? (\n <PasswordVisibleIcon size={passwordLockIconSize} playing={isLockHinting} />\n ) : (\n <PasswordHiddenIcon size={passwordLockIconSize} playing={isLockHinting} />\n ));\n\n const placeholderClass = floatingPlaceholder\n ? 'placeholder-transparent'\n : 'placeholder-[var(--theme-textLight)]';\n\n let resolvedLabelOffset: number | undefined = undefined;\n if (isFileField) {\n resolvedLabelOffset = fileTriggerWidth;\n } else if (canTogglePasswordVisibility) {\n resolvedLabelOffset = passwordAdornmentWidth;\n } else if (hasLeadingIcon) {\n resolvedLabelOffset = leadingAdornmentWidth;\n }\n\n const datePseudos = isDateField\n ? cx(\n '[&::-webkit-calendar-picker-indicator]:absolute [&::-webkit-calendar-picker-indicator]:w-full',\n '[&::-webkit-calendar-picker-indicator]:h-full [&::-webkit-calendar-picker-indicator]:opacity-0',\n '[&::-webkit-calendar-picker-indicator]:cursor-pointer [&::-webkit-calendar-picker-indicator]:left-0',\n '[&::-webkit-calendar-picker-indicator]:top-0 [&::-webkit-datetime-edit]:h-full',\n '[&::-webkit-datetime-edit]:flex [&::-webkit-datetime-edit]:items-center'\n )\n : '';\n\n const fieldBaseClassName = cx(\n UI_KIT_ROOT_CLASSNAME,\n 'peer w-full box-border rounded-2xl border border-solid bg-[var(--theme-background)]',\n 'text-[var(--theme-text)] outline-none',\n 'duration-150 transition-[border-color]',\n placeholderClass,\n hasResolvedError ? 'border-[var(--theme-negative)]' : 'border-transparent',\n disabled ? 'cursor-not-allowed opacity-70' : 'cursor-text',\n datePseudos,\n );\n\n const adornedFieldClassName = cx(\n UI_KIT_ROOT_CLASSNAME,\n 'box-border flex w-full items-center gap-0 overflow-hidden rounded-2xl',\n 'border border-solid bg-[var(--theme-background)] text-[var(--theme-text)] text-left',\n hasResolvedError ? 'border-[var(--theme-negative)]' : 'border-transparent',\n 'duration-150 transition-[border-color]',\n disabled ? 'opacity-70' : null,\n );\n\n const adornedInputClassName = cx(\n 'peer h-full min-w-0 flex-1 border-0 bg-transparent text-[var(--theme-text)] outline-none',\n placeholderClass,\n disabled ? 'cursor-not-allowed' : 'cursor-text',\n datePseudos,\n );\n\n const adornmentColorClassName = hasResolvedError\n ? 'text-[var(--theme-negative)]'\n : 'text-[var(--theme-textLight)]';\n\n const handleValidatedInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n if ((isLoginField || isUsernameField) && event.target.value.includes(' ')) {\n event.target.value = event.target.value.replace(/\\s/g, '');\n }\n\n if (isFullNameField && FULLNAME_INVALID_PATTERN.test(event.target.value)) {\n event.target.value = event.target.value.replace(\n new RegExp(FULLNAME_INVALID_PATTERN.source, 'gu'),\n '',\n );\n }\n\n if (isEmailField || isLoginField || isUsernameField || isFullNameField) {\n setValidationError(getInputValidationError(type, event.target.value));\n }\n\n onChange?.(event);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if ((isLoginField || isUsernameField) && event.key === ' ') {\n event.preventDefault();\n }\n\n if (\n isFullNameField &&\n event.key.length === 1 &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n if (!/^[\\p{L}\\s.]$/u.test(event.key)) {\n event.preventDefault();\n }\n }\n rest.onKeyDown?.(event);\n };\n\n const openFilePicker = () => {\n if (disabled) {\n return;\n }\n\n fileInputRef.current?.click();\n };\n\n const clearSelectedFiles = () => {\n if (disabled || !fileInputRef.current) {\n return;\n }\n\n fileInputRef.current.value = '';\n fileInputRef.current.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n const input = isFileField ? (\n <>\n <input\n {...rest}\n ref={fileInputRef}\n id={inputId}\n type=\"file\"\n disabled={disabled}\n aria-hidden=\"true\"\n tabIndex={-1}\n onChange={(event) => {\n setSelectedFileNames(\n Array.from(event.target.files ?? [], (file) => file.name),\n );\n onChange?.(event);\n }}\n className=\"hidden\"\n />\n <div\n className={cx(\n adornedFieldClassName,\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n className,\n )}\n style={{ ...style, ...getFieldSizeStyles(size) }}\n >\n <button\n type=\"button\"\n disabled={disabled}\n aria-controls={inputId}\n aria-label={\n hasSelectedFiles\n ? rest.multiple\n ? 'Remove selected files'\n : 'Remove selected file'\n : rest.multiple\n ? 'Select files'\n : 'Select file'\n }\n onClick={hasSelectedFiles ? clearSelectedFiles : openFilePicker}\n className={cx(\n 'inline-flex shrink-0 self-stretch whitespace-nowrap border-0 bg-transparent',\n 'items-center text-[var(--theme-text)] appearance-none',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n showUploadLabel ? 'justify-start font-bold' : 'justify-center',\n )}\n style={{\n gap: showUploadLabel ? leadingContentGap : 0,\n width: showUploadLabel ? undefined : fileTriggerWidth,\n boxSizing: 'border-box',\n justifyContent: 'flex-start',\n paddingTop: 0,\n paddingRight: showUploadLabel ? controlMetrics.buttonPaddingX : 0,\n paddingBottom: 0,\n paddingLeft: leadingIconInset,\n }}\n >\n <span\n className={cx(\n 'inline-flex shrink-0 items-center justify-center',\n adornmentColorClassName,\n )}\n aria-hidden=\"true\"\n >\n {resolvedFileIcon}\n </span>\n {showUploadLabel ? (\n <span>{fileButtonLabel}</span>\n ) : null}\n </button>\n <button\n type=\"button\"\n disabled={disabled}\n aria-controls={inputId}\n aria-label={rest.multiple ? 'Select files' : 'Select file'}\n onClick={openFilePicker}\n className={cx(\n 'flex h-full min-w-0 flex-1 items-center border-0 bg-transparent p-0',\n 'text-left appearance-none',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n >\n {fileSelectionText ? (\n <span\n className={cx(\n 'flex h-full min-w-0 flex-1 items-center overflow-hidden text-ellipsis whitespace-nowrap',\n hasSelectedFiles\n ? 'text-[var(--theme-text)]'\n : 'text-[var(--theme-textLight)]',\n )}\n style={{\n padding: `0 ${controlMetrics.paddingX}px 0 ${leadingContentGap}px`,\n ...controlTextNudgeStyle,\n ...getFieldSizeStyles(size),\n }}\n >\n {fileSelectionText}\n </span>\n ) : null}\n </button>\n </div>\n </>\n ) : canTogglePasswordVisibility ? (\n <div\n className={cx(adornedFieldClassName, className)}\n style={{ ...style, ...getFieldSizeStyles(size) }}\n >\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={isPasswordVisible ? 'Hide password' : 'Show password'}\n aria-pressed={isPasswordVisible}\n disabled={disabled}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n stopLockHint();\n setIsPasswordVisible((currentValue) => !currentValue);\n }}\n className={cx(\n 'inline-flex shrink-0 self-stretch items-center justify-center border-0',\n 'bg-transparent p-0 appearance-none',\n adornmentColorClassName,\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n style={{\n width: passwordAdornmentWidth,\n boxSizing: 'border-box',\n justifyContent: 'flex-start',\n paddingLeft: leadingIconInset,\n }}\n >\n {resolvedPasswordIcon}\n </button>\n <input\n {...rest}\n id={inputId}\n placeholder={resolvedPlaceholder}\n type={resolvedType}\n disabled={disabled}\n onChange={handleValidatedInputChange}\n onKeyDown={handleKeyDown}\n onFocus={(event) => {\n triggerLockHint();\n rest.onFocus?.(event);\n }}\n className={cx(adornedInputClassName, className)}\n aria-invalid={hasResolvedError}\n style={{\n padding: getTextInputPadding(size, {\n leadingPadding: leadingContentGap,\n ...(disableFloatingLabel\n ? {\n topPadding: controlMetrics.paddingY + 1,\n bottomPadding: Math.max(0, controlMetrics.paddingY - 1),\n }\n : {}),\n }),\n }}\n />\n </div>\n ) : hasLeadingIcon ? (\n <div\n className={cx(adornedFieldClassName, className)}\n style={{ ...style, ...getFieldSizeStyles(size) }}\n >\n <span\n className={cx(\n 'inline-flex shrink-0 self-stretch items-center justify-center bg-transparent',\n adornmentColorClassName,\n )}\n style={{\n width: leadingAdornmentWidth,\n boxSizing: 'border-box',\n justifyContent: 'flex-start',\n paddingLeft: leadingIconInset,\n }}\n aria-hidden=\"true\"\n >\n {resolvedLeadingIcon}\n </span>\n <input\n {...rest}\n id={inputId}\n placeholder={resolvedPlaceholder}\n type={resolvedType}\n disabled={disabled}\n onChange={handleValidatedInputChange}\n onKeyDown={handleKeyDown}\n className={cx(adornedInputClassName, className)}\n aria-invalid={hasResolvedError}\n style={{\n padding: getTextInputPadding(size, {\n leadingPadding: leadingContentGap,\n // O texto da data renderiza mais alto que um input de texto; um\n // bottom menor (4px no md) empurra o texto de volta ao centro.\n ...(isDateField\n ? { bottomPadding: controlMetrics.paddingY - 3 }\n : {}),\n ...(!isDateField && isStaticPlaceholderVisible\n ? {\n topPadding: Math.max(0, controlMetrics.paddingY - 1),\n bottomPadding: controlMetrics.paddingY + 0,\n }\n : {}),\n ...(!isDateField && !isStaticPlaceholderVisible && hasCustomLeadingIcon\n ? {\n topPadding: controlMetrics.paddingY,\n bottomPadding: controlMetrics.paddingY,\n }\n : {}),\n }),\n }}\n />\n </div>\n ) : (\n <input\n {...rest}\n id={inputId}\n placeholder={resolvedPlaceholder}\n type={resolvedType}\n disabled={disabled}\n onChange={handleValidatedInputChange}\n onKeyDown={handleKeyDown}\n aria-invalid={hasResolvedError}\n className={cx(fieldBaseClassName, className)}\n style={{\n padding: getTextInputPadding(size),\n ...getFieldSizeStyles(size),\n ...style,\n }}\n />\n );\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={resolvedError}\n htmlFor={isFileField ? undefined : inputId}\n required={rest.required}\n useLabelWrapper={!isFileField}\n size={size}\n hasValue={\n rest.value !== undefined && rest.value !== '' && rest.value !== null\n }\n labelOffset={resolvedLabelOffset}\n floatingPlaceholderVerticalShift={\n isFileField || canTogglePasswordVisibility || hasLeadingIcon ? 0 : undefined\n }\n floatingPlaceholder={floatingPlaceholder}\n >\n {input}\n </ControlFrame>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Input, type InputProps } from './Input';\n\nexport type DatePickerMode = 'date' | 'datetime';\nexport type DatePickerValue = string | Date | null;\nexport type DatePickerChangeReason = 'input' | 'picker' | 'clear';\n\nexport interface DatePickerChangeContext {\n reason: DatePickerChangeReason;\n date: Date | null;\n nativeValue: string;\n displayValue: string;\n}\n\nexport interface DatePickerProps\n extends Omit<InputProps, 'type' | 'value' | 'defaultValue' | 'onChange' | 'min' | 'max' | 'step'> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n value?: DatePickerValue;\n defaultValue?: DatePickerValue;\n onChange?: (value: string | null, context: DatePickerChangeContext) => void;\n mode?: DatePickerMode;\n format?: string;\n allowPastDates?: boolean;\n allowFutureDates?: boolean;\n minDate?: DatePickerValue;\n maxDate?: DatePickerValue;\n minuteStep?: number;\n clearable?: boolean;\n showPickerButton?: boolean;\n isDateUnavailable?: (date: Date) => boolean;\n invalidDateMessage?: ReactNode;\n unavailableDateMessage?: ReactNode;\n pickerButtonLabel?: string;\n clearButtonLabel?: string;\n}\n\nconst pad = (value: number) => String(value).padStart(2, '0');\n\nfunction normalizeDateValue(value: DatePickerValue | undefined, mode: DatePickerMode): string | undefined {\n if (value == null || value === '') {\n return undefined;\n }\n\n if (value instanceof Date) {\n const datePart = `${value.getFullYear()}-${pad(value.getMonth() + 1)}-${pad(value.getDate())}`;\n\n if (mode === 'datetime') {\n return `${datePart}T${pad(value.getHours())}:${pad(value.getMinutes())}`;\n }\n\n return datePart;\n }\n\n return value;\n}\n\nfunction parseNativeDateValue(value: string, mode: DatePickerMode): Date | null {\n if (!value) {\n return null;\n }\n\n const parsedDate = mode === 'datetime' ? new Date(value) : new Date(`${value}T00:00:00`);\n return Number.isNaN(parsedDate.getTime()) ? null : parsedDate;\n}\n\nexport function DatePicker({\n value,\n defaultValue,\n onChange,\n mode = 'date',\n minDate,\n maxDate,\n minuteStep = 5,\n placeholder,\n ...props\n}: DatePickerProps) {\n const nativeType = mode === 'datetime' ? 'datetime-local' : 'date';\n const normalizedValue = normalizeDateValue(value, mode);\n const normalizedDefaultValue = normalizeDateValue(defaultValue, mode);\n\n return (\n <Input\n {...props}\n type={nativeType}\n value={normalizedValue}\n defaultValue={normalizedDefaultValue}\n min={normalizeDateValue(minDate, mode)}\n max={normalizeDateValue(maxDate, mode)}\n step={mode === 'datetime' ? Math.max(1, minuteStep) * 60 : undefined}\n placeholder={placeholder ?? (mode === 'datetime' ? 'Data e hora' : 'Data')}\n onChange={(event) => {\n const nextValue = event.currentTarget.value || null;\n\n onChange?.(nextValue, {\n reason: 'input',\n date: nextValue ? parseNativeDateValue(nextValue, mode) : null,\n nativeValue: nextValue ?? '',\n displayValue: nextValue ?? '',\n });\n }}\n />\n );\n}\n","import {\n cloneElement,\n isValidElement,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { Button, type ButtonProps } from './Button';\nimport { getControlMetrics } from '../foundation/controlSize';\n\nexport type IconButtonSize = NonNullable<ButtonProps['size']>;\nexport type IconButtonVariant = Exclude<NonNullable<ButtonProps['variant']>, 'primary'>;\n\nexport interface IconButtonProps\n extends Omit<ButtonProps, 'aria-label' | 'children' | 'leadingIcon' | 'trailingIcon' | 'variant'> {\n icon: ReactNode;\n ariaLabel: string;\n size?: IconButtonSize;\n variant?: IconButtonVariant;\n}\n\nconst ICON_SIZE_BY_CONTROL_SIZE: Record<IconButtonSize, number> = {\n sm: 16,\n md: 18,\n lg: 20,\n};\n\nconst resolveIcon = (icon: ReactNode): ReactNode => {\n if (!isValidElement(icon)) {\n return icon;\n }\n\n const iconElement = icon as ReactElement<{ style?: CSSProperties }>;\n\n return cloneElement(iconElement, {\n style: {\n width: '100%',\n height: '100%',\n ...(iconElement.props.style ?? {}),\n },\n });\n};\n\nexport function IconButton({\n icon,\n ariaLabel,\n size = 'md',\n variant = 'solid',\n className,\n style,\n ...rest\n}: IconButtonProps) {\n const controlMetrics = getControlMetrics(size);\n const iconSize = ICON_SIZE_BY_CONTROL_SIZE[size];\n\n return (\n <Button\n {...rest}\n aria-label={ariaLabel}\n size={size}\n variant={variant}\n className={className ? `gap-0 ${className}` : 'gap-0'}\n style={{\n width: controlMetrics.height,\n minWidth: controlMetrics.height,\n maxWidth: controlMetrics.height,\n padding: 0,\n aspectRatio: '1 / 1',\n ...style,\n }}\n >\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: iconSize,\n height: iconSize,\n lineHeight: 0,\n flexShrink: 0,\n }}\n >\n {resolveIcon(icon)}\n </span>\n </Button>\n );\n}\n","import type { CSSProperties, HTMLAttributes } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme, type ControlSize } from '../foundation';\n\nexport type LoadingSize = ControlSize | number;\n\nexport interface LoadingProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'color'> {\n /** Rendered size of the animation. Named sizes map to 28 / 40 / 56 px. */\n size?: LoadingSize;\n /** Overrides the animation color. Defaults to the theme primary. */\n color?: CSSProperties['color'];\n /** Optional caption rendered under the animation. */\n label?: string;\n /** Text announced by screen readers when no visible `label` is provided. */\n accessibleLabel?: string;\n /** Animation speed multiplier: 2 runs twice as fast, 0.5 runs at half speed. */\n speed?: number;\n}\n\nconst SIZE_BY_CONTROL_SIZE: Record<ControlSize, number> = {\n sm: 28,\n md: 40,\n lg: 56,\n};\n\nconst BASE_DROP_MS = 1500;\nconst BASE_WHEEL_MS = 900;\nconst BASE_BOB_MS = 1500;\n\n// Each item starts a bit after the previous one so the cart is fed continuously\n// instead of receiving all three products at the same time.\nconst ITEM_DELAY_RATIOS = [0, 0.26, 0.52];\n// Depth variation. This is `fill-opacity` on purpose: the drop keyframes animate\n// `opacity`, which would override a plain `opacity` attribute on the shapes.\nconst ITEM_FILL_OPACITIES = [1, 0.72, 0.88];\n\nconst LOADING_KEYFRAMES = `\n@keyframes ss-loading-drop {\n 0% { transform: translateY(-18px) scale(0.55); opacity: 0; }\n 12% { opacity: 1; }\n 45% { transform: translateY(0) scale(1); opacity: 1; }\n 56% { transform: translateY(-2.5px) scale(1); opacity: 1; }\n 66% { transform: translateY(0) scale(1); opacity: 1; }\n 82%, 100% { transform: translateY(0) scale(0.72); opacity: 0; }\n}\n@keyframes ss-loading-bob {\n 0%, 50%, 100% { transform: translateY(0) rotate(0deg); }\n 25% { transform: translateY(-0.9px) rotate(-1.2deg); }\n 75% { transform: translateY(-0.5px) rotate(0.8deg); }\n}\n@keyframes ss-loading-wheel {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n@keyframes ss-loading-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.45; }\n}\n@media (prefers-reduced-motion: reduce) {\n .ss-loading-cart,\n .ss-loading-wheel,\n .ss-loading-item {\n animation: none !important;\n opacity: 1 !important;\n transform: none !important;\n }\n .ss-loading-svg {\n animation: ss-loading-pulse 1600ms ease-in-out infinite;\n }\n}\n`;\n\nconst resolveSize = (size: LoadingSize): number => {\n return typeof size === 'number' ? size : SIZE_BY_CONTROL_SIZE[size];\n};\n\nconst WHEELS = [\n { cx: 18, cy: 32.6 },\n { cx: 35, cy: 32.6 },\n];\n\nexport function Loading({\n size = 'md',\n color,\n label,\n accessibleLabel = 'Loading',\n speed = 1,\n className,\n style,\n ...rest\n}: LoadingProps) {\n useUiKitTheme();\n\n const pixelSize = resolveSize(size);\n const safeSpeed = Math.max(0.1, speed);\n const dropDuration = BASE_DROP_MS / safeSpeed;\n const strokeColor = color ?? 'var(--theme-primary)';\n\n const itemAnimation = (index: number): CSSProperties => ({\n transformBox: 'fill-box',\n transformOrigin: 'center',\n animation: `ss-loading-drop ${dropDuration}ms cubic-bezier(0.45, 0, 0.35, 1) infinite`,\n animationDelay: `${ITEM_DELAY_RATIOS[index] * dropDuration}ms`,\n });\n\n return (\n <div\n {...rest}\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n className={cx(UI_KIT_ROOT_CLASSNAME, 'inline-flex flex-col items-center justify-center', className)}\n style={{\n gap: Math.round(pixelSize * 0.2),\n backgroundColor: 'transparent',\n ...style,\n }}\n >\n <svg\n className=\"ss-loading-svg\"\n width={pixelSize}\n height={pixelSize}\n viewBox=\"0 0 48 48\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={{ color: strokeColor, overflow: 'hidden' }}\n >\n <style>{LOADING_KEYFRAMES}</style>\n\n <g\n className=\"ss-loading-cart\"\n style={{\n transformBox: 'view-box',\n transformOrigin: '26px 32px',\n animation: `ss-loading-bob ${BASE_BOB_MS / safeSpeed}ms ease-in-out infinite`,\n }}\n >\n {/* Products dropping into the basket. Drawn before the cart so the\n basket outline stays readable while an item crosses its rim. */}\n <rect\n className=\"ss-loading-item\"\n x={15.5}\n y={16.5}\n width={7.5}\n height={7}\n rx={1.8}\n fill=\"currentColor\"\n fillOpacity={ITEM_FILL_OPACITIES[0]}\n style={itemAnimation(0)}\n />\n <circle\n className=\"ss-loading-item\"\n cx={27.5}\n cy={20}\n r={3.6}\n fill=\"currentColor\"\n fillOpacity={ITEM_FILL_OPACITIES[1]}\n style={itemAnimation(1)}\n />\n <rect\n className=\"ss-loading-item\"\n x={32}\n y={16.5}\n width={6.6}\n height={7}\n rx={1.8}\n fill=\"currentColor\"\n fillOpacity={ITEM_FILL_OPACITIES[2]}\n style={itemAnimation(2)}\n />\n\n <g stroke=\"currentColor\" strokeWidth={2.6} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3.5 7.5h4.6l1.6 5\" />\n <path d=\"M9.7 12.5H43l-4.4 13.5H14.1z\" />\n <path d=\"M18 26v3.4\" />\n <path d=\"M35 26v3.4\" />\n </g>\n\n {WHEELS.map((wheel) => (\n <g\n key={wheel.cx}\n className=\"ss-loading-wheel\"\n style={{\n transformBox: 'view-box',\n transformOrigin: `${wheel.cx}px ${wheel.cy}px`,\n animation: `ss-loading-wheel ${BASE_WHEEL_MS / safeSpeed}ms linear infinite`,\n }}\n >\n <circle\n cx={wheel.cx}\n cy={wheel.cy}\n r={3.2}\n stroke=\"currentColor\"\n strokeWidth={2.2}\n fill=\"none\"\n />\n <path\n d={`M${wheel.cx} ${wheel.cy}V${wheel.cy - 3.2}`}\n stroke=\"currentColor\"\n strokeWidth={2.2}\n strokeLinecap=\"round\"\n />\n </g>\n ))}\n </g>\n </svg>\n\n {label ? (\n <span\n style={{\n color: 'var(--theme-textLight)',\n fontSize: Math.max(12, Math.round(pixelSize * 0.3)),\n lineHeight: 1.4,\n }}\n >\n {label}\n </span>\n ) : (\n <span className=\"ui-kit-sr-only\">{accessibleLabel}</span>\n )}\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from '../foundation';\n\nexport type SeparatorOrientation = 'vertical' | 'horizontal';\n\nexport interface SeparatorProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'color'> {\n orientation?: SeparatorOrientation;\n color?: CSSProperties['backgroundColor'];\n size?: CSSProperties['width'];\n}\n\nexport function Separator({\n orientation = 'vertical',\n color,\n size = '100%',\n className,\n style,\n ...rest\n}: SeparatorProps) {\n useUiKitTheme();\n const usesVerticalStretch = orientation === 'vertical' && size === '100%';\n\n const separatorStyle: CSSProperties = {\n backgroundColor: color,\n width: orientation === 'vertical' ? 1 : size,\n height: orientation === 'vertical' ? (usesVerticalStretch ? 'auto' : size) : 3,\n ...style,\n };\n\n return (\n <div\n {...rest}\n role=\"separator\"\n aria-orientation={orientation}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'shrink-0 self-stretch bg-[var(--theme-background)]',\n className,\n )}\n style={separatorStyle}\n />\n );\n}","import {\n useEffect,\n useId,\n useRef,\n useState,\n useSyncExternalStore,\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type UIEventHandler,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n cx,\n DISABLED_FIELD_OPACITY,\n getFieldSizeStyles,\n getSelectControlPadding,\n getSelectIndicatorOffset,\n getSelectTextNudgeStyle,\n UI_KIT_ROOT_CLASSNAME,\n} from '../../foundation';\nimport { CheckboxIndicator } from '../../components/Checkbox';\nimport { ControlFrame, Input } from '../../components/Input';\nimport { Separator } from '../../components/Separator';\nimport type { MenuPlacement, SelectBaseProps } from './types';\nimport {\n filterSelectGroups,\n getTextContent,\n normalizeSelectValues,\n} from './utils';\n\nconst MENU_OFFSET = 8;\nconst MENU_MAX_HEIGHT = 280;\nconst emptySubscribe = () => () => {};\n\nfunction SearchIcon({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"m21 21-4.35-4.35M10.5 18a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nconst OPTION_PADDING_CLASSNAMES: Record<\n NonNullable<SelectBaseProps['size']>,\n string\n> = {\n sm: 'px-[11px] py-2',\n md: 'px-3 py-[9px]',\n lg: 'px-[13px] py-[10px]',\n};\n\nexport function SelectBase({\n label,\n hint,\n error,\n placeholder,\n size = 'md',\n id,\n disabled,\n style,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClick,\n autoFocus,\n className,\n isMulti,\n isFilterable,\n multiple,\n groups,\n nativeOptions,\n emptyMessage = 'No options found.',\n isLoading = false,\n loadingMessage = 'Loading options...',\n searchPlaceholder = 'Search options',\n searchQuery,\n onSearchQueryChange,\n allowOpenWithoutOptions = false,\n filterOptions = true,\n clearSearchOnClose = true,\n preserveUnknownValues = false,\n onListboxScroll,\n menuFooter,\n ...rest\n}: SelectBaseProps) {\n const generatedId = useId().replace(/:/g, '');\n const resolvedId = id ?? `ss-select-${generatedId}`;\n const isMultiSelect = Boolean(isMulti || multiple);\n const hasFilter = Boolean(isFilterable);\n const flatOptions = groups.flatMap((group) => group.options);\n const enabledOptions = flatOptions.filter((option) => !option.disabled);\n const isControlled = value !== undefined;\n const fallbackValues =\n defaultValue !== undefined\n ? normalizeSelectValues(defaultValue)\n : isMultiSelect\n ? []\n : placeholder != null\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n const [uncontrolledValues, setUncontrolledValues] = useState(fallbackValues);\n const [isOpen, setIsOpen] = useState(false);\n const [uncontrolledSearchQuery, setUncontrolledSearchQuery] = useState('');\n const [menuPlacement, setMenuPlacement] = useState<MenuPlacement>('bottom');\n const [isPlacementResolved, setIsPlacementResolved] = useState(false);\n const [highlightedValue, setHighlightedValue] = useState(\n fallbackValues[0] ?? enabledOptions[0]?.value ?? '',\n );\n const isMounted = useSyncExternalStore(\n emptySubscribe,\n () => true,\n () => false,\n );\n const [menuRect, setMenuRect] = useState({\n top: 0,\n bottom: 0,\n left: 0,\n width: 0,\n });\n const shellRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const hiddenSelectRef = useRef<HTMLSelectElement>(null);\n const highlightSyncKeyRef = useRef('');\n const currentSearchQuery =\n searchQuery !== undefined ? searchQuery : uncontrolledSearchQuery;\n const selectedValues = isControlled\n ? normalizeSelectValues(value)\n : uncontrolledValues;\n const selectedValue = selectedValues[0] ?? '';\n const optionLookup = new Map(\n flatOptions.map((option) => [option.value, option]),\n );\n const selectedOption = optionLookup.get(selectedValue) ?? null;\n const placeholderTextColor = 'var(--theme-textLight)';\n const hasSelection = isMultiSelect\n ? selectedValues.length > 0\n : selectedValue !== '';\n const displayLabel = hasSelection\n ? isMultiSelect\n ? selectedValues\n .map((currentValue) => {\n const option = optionLookup.get(currentValue);\n return option\n ? getTextContent(option.label).trim() || option.value\n : currentValue;\n })\n .join(', ')\n : (selectedOption?.label ?? selectedValue)\n : null;\n const displayContent = displayLabel ?? placeholder ?? '\\u00A0';\n const visibleGroups =\n hasFilter && filterOptions\n ? filterSelectGroups(groups, currentSearchQuery)\n : groups;\n const visibleOptions = visibleGroups.flatMap((group) => group.options);\n const visibleEnabledOptions = visibleOptions.filter(\n (option) => !option.disabled,\n );\n const visibleEnabledValues = visibleEnabledOptions.map(\n (option) => option.value,\n );\n const selectedValuesKey = selectedValues.join('\\u0000');\n const visibleEnabledValuesKey = visibleEnabledValues.join('\\u0000');\n const indicatorOffset = getSelectIndicatorOffset(size);\n const controlTextNudgeStyle = getSelectTextNudgeStyle();\n const listboxId = `${resolvedId}-listbox`;\n const searchInputId = `${resolvedId}-search`;\n const scrollbarThumbColor = 'var(--theme-secondary)';\n const scrollbarThumbHoverColor = 'var(--theme-textLight)';\n const highlightedOption =\n visibleOptions.find((option) => option.value === highlightedValue) ?? null;\n const canOpenMenu = allowOpenWithoutOptions || flatOptions.length > 0;\n const isTriggerDisabled = disabled || !canOpenMenu;\n const buttonPassthroughProps = Object.fromEntries(\n Object.entries(rest).filter(\n ([key]) => key.startsWith('aria-') || key.startsWith('data-'),\n ),\n );\n const floatingPlaceholder =\n typeof placeholder === 'string' && placeholder !== ''\n ? placeholder\n : undefined;\n\n const triggerClassName = cx(\n 'peer relative m-0 box-border flex w-full min-w-0 items-center justify-between gap-3',\n 'rounded-2xl border border-solid appearance-none',\n 'bg-[var(--theme-background)] outline-none',\n 'duration-150 text-left',\n error ? 'border-[var(--theme-negative)]' : 'border-transparent',\n !hasSelection && floatingPlaceholder\n ? 'text-transparent'\n : 'text-[var(--theme-text)]',\n isTriggerDisabled ? 'cursor-not-allowed' : 'cursor-pointer',\n );\n\n // When the option set changes and leaves uncontrolled values that no longer\n // exist, reconcile them during render. This is React's recommended\n // alternative to syncing via an effect; once reconciled the values are valid\n // so it does not run again.\n if (!isControlled && !preserveUnknownValues) {\n const invalidValues = uncontrolledValues.filter(\n (currentValue) =>\n !flatOptions.some((option) => option.value === currentValue),\n );\n\n if (invalidValues.length > 0) {\n const nextValues =\n defaultValue !== undefined\n ? normalizeSelectValues(defaultValue).filter((currentValue) =>\n flatOptions.some((option) => option.value === currentValue),\n )\n : isMultiSelect\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n\n setUncontrolledValues(nextValues);\n setHighlightedValue(nextValues[0] ?? enabledOptions[0]?.value ?? '');\n }\n }\n\n // Reset placement when the menu opens so it stays hidden until the rAF\n // measurement resolves it. Adjusting during render is React's recommended\n // alternative to resetting via an effect on close.\n const [wasOpenForPlacement, setWasOpenForPlacement] = useState(isOpen);\n if (isOpen !== wasOpenForPlacement) {\n setWasOpenForPlacement(isOpen);\n if (isOpen) {\n setMenuPlacement('bottom');\n setIsPlacementResolved(false);\n }\n }\n\n useEffect(() => {\n if (!isOpen) {\n highlightSyncKeyRef.current = '';\n return;\n }\n\n const nextHighlightSyncKey = `${selectedValuesKey}\\u0001${visibleEnabledValuesKey}`;\n\n if (highlightSyncKeyRef.current === nextHighlightSyncKey) {\n return;\n }\n\n highlightSyncKeyRef.current = nextHighlightSyncKey;\n\n const nextHighlightedValue =\n [...selectedValues]\n .reverse()\n .find((currentValue) => visibleEnabledValues.includes(currentValue)) ??\n visibleEnabledOptions[0]?.value ??\n '';\n setHighlightedValue(nextHighlightedValue);\n }, [\n isOpen,\n selectedValuesKey,\n visibleEnabledValuesKey,\n selectedValues,\n visibleEnabledOptions,\n visibleEnabledValues,\n ]);\n\n useEffect(() => {\n if (!isOpen || !hasFilter) {\n return;\n }\n\n searchInputRef.current?.focus();\n }, [hasFilter, isOpen]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const frameId = window.requestAnimationFrame(() => {\n const triggerRect = buttonRef.current?.getBoundingClientRect();\n const menuElement = menuRef.current;\n\n if (!triggerRect || !menuElement) {\n setMenuPlacement('bottom');\n setIsPlacementResolved(true);\n return;\n }\n\n const measuredMenuHeight = menuElement.getBoundingClientRect().height;\n const menuHeight = Math.min(\n measuredMenuHeight || menuElement.scrollHeight,\n MENU_MAX_HEIGHT,\n );\n const availableBelow =\n window.innerHeight - triggerRect.bottom - MENU_OFFSET;\n const availableAbove = triggerRect.top - MENU_OFFSET;\n const nextPlacement: MenuPlacement =\n availableBelow < menuHeight && availableAbove >= menuHeight\n ? 'top'\n : 'bottom';\n\n setMenuPlacement(nextPlacement);\n setMenuRect({\n top: triggerRect.bottom + MENU_OFFSET,\n bottom: window.innerHeight - triggerRect.top + MENU_OFFSET,\n left: triggerRect.left,\n width: triggerRect.width,\n });\n setIsPlacementResolved(true);\n });\n\n return () => {\n window.cancelAnimationFrame(frameId);\n };\n }, [isOpen, visibleOptions.length]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handleScroll = (event: Event) => {\n if (\n menuRef.current &&\n event.target instanceof Node &&\n menuRef.current.contains(event.target)\n ) {\n return;\n }\n setIsOpen(false);\n };\n\n window.addEventListener('scroll', handleScroll, {\n capture: true,\n passive: true,\n });\n window.addEventListener('resize', handleScroll, {\n capture: true,\n passive: true,\n });\n\n return () => {\n window.removeEventListener('scroll', handleScroll, { capture: true });\n window.removeEventListener('resize', handleScroll, { capture: true });\n };\n }, [isOpen]);\n\n // Clear the uncontrolled search when the menu closes (adjust during render).\n if (\n !isOpen &&\n clearSearchOnClose &&\n searchQuery === undefined &&\n uncontrolledSearchQuery !== ''\n ) {\n setUncontrolledSearchQuery('');\n }\n\n // Notify a controlled parent to clear its search query on close. This effect\n // only calls the parent callback (an external sync) — no local setState.\n useEffect(() => {\n if (isOpen || !clearSearchOnClose || currentSearchQuery === '') {\n return;\n }\n\n onSearchQueryChange?.('');\n }, [clearSearchOnClose, currentSearchQuery, isOpen, onSearchQueryChange]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n if (shellRef.current?.contains(event.target as Node)) {\n return;\n }\n\n if (menuRef.current?.contains(event.target as Node)) {\n return;\n }\n\n setIsOpen(false);\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n };\n }, [isOpen]);\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n const form = hiddenSelectRef.current?.form;\n\n if (!form) {\n return;\n }\n\n const handleReset = () => {\n queueMicrotask(() => {\n const nextValues =\n defaultValue !== undefined\n ? normalizeSelectValues(defaultValue)\n : isMultiSelect\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n\n setUncontrolledValues(nextValues);\n setHighlightedValue(nextValues[0] ?? enabledOptions[0]?.value ?? '');\n setIsOpen(false);\n });\n };\n\n form.addEventListener('reset', handleReset);\n\n return () => {\n form.removeEventListener('reset', handleReset);\n };\n }, [defaultValue, enabledOptions, isControlled, isMultiSelect]);\n\n const syncHiddenSelect = (nextValues: string[]) => {\n const selectElement = hiddenSelectRef.current;\n\n if (!selectElement) {\n return;\n }\n\n if (isMultiSelect) {\n Array.from(selectElement.options).forEach((optionElement) => {\n optionElement.selected = nextValues.includes(optionElement.value);\n });\n } else {\n const descriptor = Object.getOwnPropertyDescriptor(\n HTMLSelectElement.prototype,\n 'value',\n );\n\n if (descriptor?.set) {\n descriptor.set.call(selectElement, nextValues[0] ?? '');\n } else {\n selectElement.value = nextValues[0] ?? '';\n }\n }\n\n selectElement.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n const updateMultiSelection = (nextValues: string[]) => {\n if (!isMultiSelect || disabled) {\n return;\n }\n\n if (!isControlled) {\n setUncontrolledValues(nextValues);\n }\n\n setHighlightedValue(\n nextValues[nextValues.length - 1] ?? enabledOptions[0]?.value ?? '',\n );\n syncHiddenSelect(nextValues);\n };\n\n const toggleVisibleSelection = (checked: boolean) => {\n if (!isMultiSelect || disabled || visibleEnabledValues.length === 0) {\n return;\n }\n\n const nextValues = checked\n ? Array.from(new Set([...selectedValues, ...visibleEnabledValues]))\n : selectedValues.filter(\n (currentValue) => !visibleEnabledValues.includes(currentValue),\n );\n\n updateMultiSelection(nextValues);\n };\n\n const commitSelection = (nextValue: string) => {\n if (disabled) {\n if (!isMultiSelect) {\n setIsOpen(false);\n }\n\n return;\n }\n\n if (isMultiSelect) {\n const nextValues = selectedValues.includes(nextValue)\n ? selectedValues.filter((currentValue) => currentValue !== nextValue)\n : [...selectedValues, nextValue];\n\n updateMultiSelection(nextValues);\n return;\n }\n\n if (nextValue === selectedValue) {\n setIsOpen(false);\n return;\n }\n\n if (!isControlled) {\n setUncontrolledValues([nextValue]);\n }\n\n setHighlightedValue(nextValue);\n setIsOpen(false);\n syncHiddenSelect([nextValue]);\n buttonRef.current?.focus();\n };\n\n const handleHiddenSelectChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const nextValues = isMultiSelect\n ? Array.from(\n event.currentTarget.selectedOptions,\n (option) => option.value,\n )\n : [event.currentTarget.value];\n\n if (!isControlled) {\n setUncontrolledValues(nextValues);\n }\n\n setHighlightedValue(\n nextValues[nextValues.length - 1] ?? enabledOptions[0]?.value ?? '',\n );\n onChange?.(event);\n };\n\n const visibleSelectedCount = visibleEnabledValues.filter((currentValue) =>\n selectedValues.includes(currentValue),\n ).length;\n const hasSomeVisibleSelected =\n visibleSelectedCount > 0 &&\n visibleSelectedCount < visibleEnabledValues.length;\n const hasAllVisibleSelected =\n visibleEnabledValues.length > 0 &&\n visibleSelectedCount === visibleEnabledValues.length;\n const canToggleVisibleSelection =\n !disabled && visibleEnabledValues.length > 0;\n const bulkToggleControl = isMultiSelect ? (\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-label=\"Toggle all visible options\"\n aria-checked={\n hasAllVisibleSelected ? true : hasSomeVisibleSelected ? 'mixed' : false\n }\n disabled={!canToggleVisibleSelection}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={(event) => {\n event.stopPropagation();\n toggleVisibleSelection(!hasAllVisibleSelected);\n }}\n className={cx(\n 'm-0 inline-flex h-5 w-5 shrink-0 items-center justify-center border-0 bg-transparent p-0',\n canToggleVisibleSelection\n ? 'cursor-pointer opacity-100'\n : 'cursor-not-allowed opacity-45',\n )}\n >\n <CheckboxIndicator\n checked={hasAllVisibleSelected}\n indeterminate={hasSomeVisibleSelected}\n disabled={!canToggleVisibleSelection}\n />\n </button>\n ) : null;\n\n const moveHighlight = (direction: 1 | -1) => {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n const currentIndex = visibleEnabledOptions.findIndex(\n (option) => option.value === highlightedValue,\n );\n\n if (currentIndex === -1) {\n setHighlightedValue(\n direction === 1\n ? visibleEnabledOptions[0].value\n : visibleEnabledOptions[visibleEnabledOptions.length - 1].value,\n );\n return;\n }\n\n const nextIndex = Math.max(\n 0,\n Math.min(visibleEnabledOptions.length - 1, currentIndex + direction),\n );\n setHighlightedValue(visibleEnabledOptions[nextIndex].value);\n };\n\n const handleTriggerClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event as unknown as MouseEvent<HTMLSelectElement>);\n\n if (event.defaultPrevented || disabled || !canOpenMenu) {\n return;\n }\n\n setIsOpen((current) => !current);\n };\n\n const handleTriggerFocus = (event: FocusEvent<HTMLButtonElement>) => {\n onFocus?.(event as unknown as FocusEvent<HTMLSelectElement>);\n };\n\n const handleTriggerBlur = (event: FocusEvent<HTMLButtonElement>) => {\n const nextTarget = event.relatedTarget as Node | null;\n\n // The menu (including its search input) is portaled outside `shellRef`, so\n // focus moving into it is NOT a blur \"out\". Mirror the outside-pointerdown\n // handler and keep the menu open when focus lands in `menuRef` — otherwise\n // clicking the search box closes the dropdown before the user can type.\n if (\n !shellRef.current?.contains(nextTarget) &&\n !menuRef.current?.contains(nextTarget)\n ) {\n setIsOpen(false);\n }\n\n onBlur?.(event as unknown as FocusEvent<HTMLSelectElement>);\n };\n\n const handleTriggerKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event as unknown as KeyboardEvent<HTMLSelectElement>);\n\n if (event.defaultPrevented || disabled) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(\n selectedOption?.value ?? visibleEnabledOptions[0]?.value ?? '',\n );\n return;\n }\n\n moveHighlight(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(\n selectedOption?.value ??\n visibleEnabledOptions[visibleEnabledOptions.length - 1]?.value ??\n '',\n );\n return;\n }\n\n moveHighlight(-1);\n return;\n }\n\n if (event.key === 'Home' && isOpen) {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n event.preventDefault();\n setHighlightedValue(visibleEnabledOptions[0].value);\n return;\n }\n\n if (event.key === 'End' && isOpen) {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n event.preventDefault();\n setHighlightedValue(\n visibleEnabledOptions[visibleEnabledOptions.length - 1].value,\n );\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(\n selectedOption?.value ?? visibleEnabledOptions[0]?.value ?? '',\n );\n return;\n }\n\n if (highlightedOption && !highlightedOption.disabled) {\n commitSelection(highlightedOption.value);\n }\n\n return;\n }\n\n if (event.key === 'Escape' && isOpen) {\n event.preventDefault();\n setIsOpen(false);\n return;\n }\n\n if (event.key === 'Tab') {\n setIsOpen(false);\n }\n };\n\n const handleFilterKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n moveHighlight(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n moveHighlight(-1);\n return;\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n\n if (highlightedOption && !highlightedOption.disabled) {\n commitSelection(highlightedOption.value);\n }\n\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n setIsOpen(false);\n buttonRef.current?.focus();\n return;\n }\n\n if (event.key === 'Tab') {\n setIsOpen(false);\n }\n };\n\n const emptyState = isLoading ? loadingMessage : emptyMessage;\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={error}\n htmlFor={resolvedId}\n required={rest.required}\n size={size}\n hasValue={hasSelection || isOpen}\n floatingPlaceholder={floatingPlaceholder}\n >\n <div ref={shellRef} className=\"relative w-full\">\n <button\n {...buttonPassthroughProps}\n id={resolvedId}\n ref={buttonRef}\n type=\"button\"\n className={cx(triggerClassName, className)}\n title={rest.title}\n disabled={isTriggerDisabled}\n autoFocus={autoFocus}\n tabIndex={rest.tabIndex}\n role=\"combobox\"\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-invalid={error ? true : rest['aria-invalid']}\n aria-required={rest.required}\n onClick={handleTriggerClick}\n onFocus={handleTriggerFocus}\n onBlur={handleTriggerBlur}\n onKeyDown={handleTriggerKeyDown}\n style={{\n ...getFieldSizeStyles(size),\n padding: getSelectControlPadding(size),\n ...style,\n ...(isTriggerDisabled ? { opacity: DISABLED_FIELD_OPACITY } : {}),\n }}\n >\n <span\n className=\"block min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap\"\n style={controlTextNudgeStyle}\n >\n {hasSelection ? (\n displayContent\n ) : (\n <span\n className={\n floatingPlaceholder ? '' : 'text-[var(--theme-textLight)]'\n }\n >\n {placeholder}\n </span>\n )}\n </span>\n <span\n aria-hidden=\"true\"\n className={cx(\n 'pointer-events-none absolute top-1/2 flex items-center justify-center',\n 'transition-[transform,color] duration-150',\n isTriggerDisabled\n ? 'text-[var(--theme-secondary)]'\n : 'text-[var(--theme-textLight)]',\n )}\n style={{\n right: indicatorOffset,\n transform: `translateY(-50%) rotate(${isOpen ? 180 : 0}deg)`,\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M5.75 7.75L10 12l4.25-4.25\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </button>\n\n <select\n {...rest}\n id={`${resolvedId}-native`}\n ref={hiddenSelectRef}\n name={rest.name}\n disabled={disabled}\n multiple={isMultiSelect}\n value={isMultiSelect ? selectedValues : selectedValue}\n onChange={handleHiddenSelectChange}\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"ui-kit-sr-only pointer-events-none opacity-0\"\n >\n {nativeOptions}\n </select>\n\n {isMounted && isOpen\n ? createPortal(\n <>\n <style>\n {`\n #${listboxId} {\n scrollbar-width: thin;\n scrollbar-color: ${scrollbarThumbColor} transparent;\n }\n\n #${listboxId}::-webkit-scrollbar {\n width: 8px;\n }\n\n #${listboxId}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n #${listboxId}::-webkit-scrollbar-thumb {\n background: ${scrollbarThumbColor};\n border-radius: 999px;\n border: 2px solid transparent;\n background-clip: padding-box;\n }\n\n #${listboxId}::-webkit-scrollbar-thumb:hover {\n background: ${scrollbarThumbHoverColor};\n background-clip: padding-box;\n }\n\n #${searchInputId}::placeholder {\n color: ${placeholderTextColor};\n opacity: 1;\n }\n `}\n </style>\n <div\n ref={menuRef}\n className={cx(\n // Portal: renderiza em document.body, fora da raiz do\n // componente. Sem a classe raiz do kit ele fica fora do\n // reset e da fonte do kit, e passa a herdar o CSS global do\n // app consumidor.\n UI_KIT_ROOT_CLASSNAME,\n 'fixed z-[99999] flex max-h-[280px] flex-col gap-1',\n 'overflow-hidden rounded-[20px] p-2',\n 'bg-[var(--theme-surface)]',\n 'border-[3px] border-solid border-[var(--theme-background)]',\n )}\n style={{\n top: menuPlacement === 'bottom' ? menuRect.top : 'auto',\n bottom: menuPlacement === 'top' ? menuRect.bottom : 'auto',\n left: menuRect.left,\n width: menuRect.width,\n visibility: isPlacementResolved ? 'visible' : 'hidden',\n }}\n >\n {hasFilter ? (\n <div\n className={cx(\n 'flex shrink-0 items-center justify-start gap-2 px-1 pb-[10px] pt-1',\n )}\n >\n {bulkToggleControl}\n <div\n className=\"flex-1\"\n onClick={(event) => event.stopPropagation()}\n onMouseDown={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <Input\n id={searchInputId}\n ref={searchInputRef}\n type=\"text\"\n icon={<SearchIcon size={16} />}\n disableFloatingLabel\n value={currentSearchQuery}\n onChange={(event) => {\n const nextQuery = event.currentTarget.value;\n\n if (searchQuery === undefined) {\n setUncontrolledSearchQuery(nextQuery);\n }\n\n onSearchQueryChange?.(nextQuery);\n }}\n onKeyDown={handleFilterKeyDown}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n size=\"sm\"\n />\n </div>\n </div>\n ) : isMultiSelect ? (\n <div\n className={cx(\n 'flex shrink-0 items-center justify-start border-b px-1 pb-[10px] pt-1',\n )}\n >\n {bulkToggleControl}\n </div>\n ) : null}\n\n {hasFilter && <Separator />}\n\n <div\n id={listboxId}\n role=\"listbox\"\n aria-labelledby={resolvedId}\n aria-multiselectable={isMultiSelect || undefined}\n onScroll={\n onListboxScroll as\n | UIEventHandler<HTMLDivElement>\n | undefined\n }\n className=\"min-h-0 flex-1 overflow-y-auto overflow-x-hidden py-1\"\n >\n {visibleGroups.length === 0 ? (\n <div className=\"px-3 py-[14px] text-center text-[13px] text-[var(--theme-textLight)]\">\n {emptyState}\n </div>\n ) : (\n visibleGroups.map((group) => (\n <div\n key={group.key}\n className={cx(\n 'flex flex-col gap-0',\n group.label ? 'mt-1' : 'mt-0',\n )}\n >\n {group.label ? (\n <span\n className={cx(\n 'px-2 pb-0.5 pt-1.5 text-[11px] font-extrabold uppercase',\n 'font-sans',\n 'tracking-[0.08em] text-[var(--theme-textLight)]',\n )}\n >\n {group.label}\n </span>\n ) : null}\n {group.options.map((option) => {\n const isGroupedOption = Boolean(group.label);\n const isSelected = selectedValues.includes(\n option.value,\n );\n const isHighlighted =\n option.value === highlightedValue;\n const isActive = isSelected || isHighlighted;\n\n return (\n <div\n key={option.key}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n onMouseEnter={() => {\n if (!option.disabled) {\n setHighlightedValue(option.value);\n }\n }}\n onMouseMove={() => {\n if (\n !option.disabled &&\n highlightedValue !== option.value\n ) {\n setHighlightedValue(option.value);\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n if (!option.disabled) {\n commitSelection(option.value);\n }\n }}\n className={cx(\n 'w-full min-w-0 box-border py-0.5 leading-5',\n option.disabled\n ? 'cursor-not-allowed text-[var(--theme-secondary)]'\n : 'cursor-pointer',\n !option.disabled && isActive\n ? 'text-[var(--theme-onPrimary)]'\n : null,\n !option.disabled && !isActive\n ? 'text-[var(--theme-text)]'\n : null,\n )}\n >\n <div\n className={cx(\n 'flex w-full min-w-0 items-center justify-between gap-3 rounded-xl box-border',\n 'transition-[background-color,color] duration-150',\n OPTION_PADDING_CLASSNAMES[size],\n isGroupedOption\n ? 'pl-5 text-[13px]'\n : 'text-sm',\n isSelected\n ? 'bg-[var(--theme-primary)] font-semibold'\n : null,\n !isSelected && isHighlighted\n ? 'bg-[var(--theme-primary)]'\n : null,\n !isSelected && !isHighlighted\n ? 'bg-[var(--theme-surface)] font-medium'\n : null,\n )}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2.5\">\n {isMultiSelect ? (\n <CheckboxIndicator\n checked={isSelected}\n disabled={option.disabled}\n size={16}\n checkedColor={\n isActive\n ? 'var(--theme-onPrimary)'\n : 'var(--theme-primary)'\n }\n iconColor={\n isActive\n ? 'var(--theme-primary)'\n : 'var(--theme-onPrimary)'\n }\n uncheckedBorderColor={\n isActive\n ? 'var(--theme-onPrimary)'\n : 'var(--theme-secondary)'\n }\n uncheckedBackgroundColor=\"transparent\"\n />\n ) : null}\n <span className=\"block min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap\">\n {option.label}\n </span>\n </span>\n {!isMultiSelect && isSelected ? (\n <span\n aria-hidden=\"true\"\n className=\"flex shrink-0 items-center justify-center text-[var(--theme-onPrimary)]\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <path\n d=\"M5.75 10.25L8.5 13l5.75-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n ) : null}\n </div>\n </div>\n );\n })}\n </div>\n ))\n )}\n </div>\n {menuFooter ? (\n <>\n <Separator />\n <div className=\"shrink-0 px-2 pb-1 pt-2.5\">\n {menuFooter}\n </div>\n </>\n ) : null}\n </div>\n </>,\n document.body,\n )\n : null}\n </div>\n </ControlFrame>\n );\n}\n","import { isValidElement, type ReactNode } from 'react';\n\nimport type { ParsedGroup, SelectChildProps } from './types';\n\nexport function getTextContent(node: ReactNode): string {\n if (node == null || typeof node === 'boolean') {\n return '';\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n\n if (Array.isArray(node)) {\n return node.map(getTextContent).join('');\n }\n\n if (isValidElement<SelectChildProps>(node)) {\n return getTextContent(node.props.children);\n }\n\n return '';\n}\n\nexport function normalizeSelectValue(value: unknown): string {\n if (Array.isArray(value)) {\n return value.length > 0 ? normalizeSelectValue(value[0]) : '';\n }\n\n return value == null ? '' : String(value);\n}\n\nexport function normalizeSelectValues(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map((item) => normalizeSelectValue(item));\n }\n\n if (value == null) {\n return [];\n }\n\n return [normalizeSelectValue(value)];\n}\n\nexport function filterSelectGroups(groups: ParsedGroup[], query: string): ParsedGroup[] {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return groups;\n }\n\n return groups\n .map((group) => ({\n ...group,\n options: group.options.filter((option) => {\n const optionText = getTextContent(option.label).trim().toLowerCase();\n return optionText.includes(normalizedQuery);\n }),\n }))\n .filter((group) => group.options.length > 0);\n}","import { Children, isValidElement, type ReactNode } from 'react';\n\nimport type { ParsedGroup, ParsedOption, SelectChildProps } from './types';\nimport { getTextContent, normalizeSelectValue } from './utils';\n\nfunction buildOption(keyPrefix: string, index: number, props: SelectChildProps, groupDisabled = false) {\n const rawValue = props.value !== undefined ? props.value : getTextContent(props.children).trim();\n const normalizedValue = normalizeSelectValue(rawValue);\n\n return {\n key: `${keyPrefix}-${index}-${normalizedValue}`,\n value: normalizedValue,\n label: props.children ?? normalizedValue,\n disabled: groupDisabled || Boolean(props.disabled),\n };\n}\n\nexport function parseSelectChildren(children: ReactNode): ParsedGroup[] {\n const groups: ParsedGroup[] = [];\n const standaloneOptions: ParsedOption[] = [];\n let optionIndex = 0;\n let groupIndex = 0;\n\n const flushStandaloneOptions = () => {\n if (standaloneOptions.length === 0) {\n return;\n }\n\n groups.push({\n key: `standalone-${groups.length}`,\n options: [...standaloneOptions],\n });\n\n standaloneOptions.length = 0;\n };\n\n Children.forEach(children, (child) => {\n if (!isValidElement<SelectChildProps>(child)) {\n return;\n }\n\n if (child.type === 'option') {\n standaloneOptions.push(buildOption('option', optionIndex, child.props));\n optionIndex += 1;\n return;\n }\n\n if (child.type !== 'optgroup') {\n return;\n }\n\n flushStandaloneOptions();\n\n const groupOptions: ParsedOption[] = [];\n let groupOptionIndex = 0;\n\n Children.forEach(child.props.children, (optionChild) => {\n if (!isValidElement<SelectChildProps>(optionChild) || optionChild.type !== 'option') {\n return;\n }\n\n groupOptions.push(\n buildOption(\n `group-${groupIndex}-option`,\n groupOptionIndex,\n optionChild.props,\n Boolean(child.props.disabled),\n ),\n );\n\n groupOptionIndex += 1;\n });\n\n if (groupOptions.length > 0) {\n groups.push({\n key: `group-${groupIndex}`,\n label: child.props.label,\n options: groupOptions,\n });\n\n groupIndex += 1;\n }\n });\n\n flushStandaloneOptions();\n\n return groups;\n}","import type { ReactNode } from 'react';\n\nimport { SelectBase } from '../componentsBase/select/SelectBase';\nimport { parseSelectChildren } from '../componentsBase/select/childrenAdapter';\nimport type { SharedSelectProps } from '../componentsBase/select/types';\n\nexport type SelectOption = { label: string; value: string };\n\nexport interface SelectProps extends SharedSelectProps {\n children?: ReactNode;\n options?: SelectOption[];\n}\n\nexport function Select({ children, options, ...props }: SelectProps) {\n const actualChildren = options\n ? options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))\n : children;\n\n return <SelectBase {...props} groups={parseSelectChildren(actualChildren)} nativeOptions={actualChildren} />;\n}\n","import { useEffect, useMemo, useRef, useState, type ReactNode, type UIEvent } from 'react';\n\nimport { DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS, useUiKitTheme } from '../foundation';\nimport { SelectBase } from '../componentsBase/select/SelectBase';\nimport {\n buildNativeOptionsFromObjectOptions,\n buildParsedGroupsFromObjectOptions,\n dedupeSelectObjectOptions,\n getSelectObjectOptionKey,\n type SelectObjectOption,\n type SelectObjectOptionValue,\n} from '../componentsBase/select/objectOptionsAdapter';\nimport type { SharedSelectProps } from '../componentsBase/select/types';\n\nexport type SelectAsyncOptionValue = SelectObjectOptionValue;\nexport type SelectAsyncOption<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue> = SelectObjectOption<TValue>;\n\nexport interface SelectAsyncLoadContext {\n page: number;\n signal: AbortSignal;\n}\n\nexport interface SelectAsyncLoadResult<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue> {\n options: Array<SelectAsyncOption<TValue>>;\n hasMore?: boolean;\n}\n\ntype SelectAsyncSingleValue<TValue extends SelectAsyncOptionValue> = SelectAsyncOption<TValue> | null;\ntype SelectAsyncMultiValue<TValue extends SelectAsyncOptionValue> = Array<SelectAsyncOption<TValue>>;\ntype SelectAsyncValue<TValue extends SelectAsyncOptionValue> =\n | SelectAsyncSingleValue<TValue>\n | SelectAsyncMultiValue<TValue>;\n\nexport interface SelectAsyncProps<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue>\n extends Omit<SharedSelectProps, 'children' | 'value' | 'defaultValue' | 'onChange' | 'multiple'> {\n value?: SelectAsyncValue<TValue>;\n defaultValue?: SelectAsyncValue<TValue>;\n onChange?: (value: SelectAsyncValue<TValue>) => void;\n loadOptions: (\n query: string,\n loadedOptions: Array<SelectAsyncOption<TValue>>,\n context: SelectAsyncLoadContext,\n ) => Promise<SelectAsyncLoadResult<TValue>>;\n defaultOptions?: Array<SelectAsyncOption<TValue>>;\n fixedOptions?: Array<SelectAsyncOption<TValue>>;\n cacheUniqs?: ReadonlyArray<unknown>;\n searchDebounceMs?: number;\n loadingMessage?: ReactNode;\n loadErrorMessage?: ReactNode;\n emptyMessage?: ReactNode;\n loadingMoreMessage?: ReactNode;\n loadMoreHintMessage?: ReactNode;\n loadMoreThreshold?: number;\n searchPlaceholder?: string;\n}\n\nconst DEFAULT_LOAD_MORE_THRESHOLD = 24;\n\nconst normalizeAsyncValue = <TValue extends SelectAsyncOptionValue>(\n value: SelectAsyncValue<TValue> | undefined,\n isMulti: boolean,\n): Array<SelectAsyncOption<TValue>> => {\n if (value == null) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return isMulti ? [value] : [value];\n};\n\nconst areUnknownArraysEqual = (left: ReadonlyArray<unknown>, right: ReadonlyArray<unknown>): boolean => {\n if (left.length !== right.length) {\n return false;\n }\n\n return left.every((entry, index) => Object.is(entry, right[index]));\n};\n\nexport function SelectAsync<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue>({\n value,\n defaultValue,\n onChange,\n loadOptions,\n defaultOptions = [],\n fixedOptions = [],\n cacheUniqs = [],\n searchDebounceMs = DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS,\n loadingMessage = 'Loading options...',\n loadErrorMessage = 'Could not load options.',\n emptyMessage = 'No options found.',\n loadingMoreMessage = 'Loading more...',\n loadMoreHintMessage = 'Scroll to load more',\n loadMoreThreshold = DEFAULT_LOAD_MORE_THRESHOLD,\n isMulti,\n isFilterable,\n searchPlaceholder = 'Search options',\n ...props\n}: SelectAsyncProps<TValue>) {\n useUiKitTheme();\n const isMultiSelect = Boolean(isMulti);\n const isControlled = value !== undefined;\n const [internalSelectedOptions, setInternalSelectedOptions] = useState<Array<SelectAsyncOption<TValue>>>(() => {\n return normalizeAsyncValue(defaultValue, isMultiSelect);\n });\n const [remoteOptions, setRemoteOptions] = useState<Array<SelectAsyncOption<TValue>>>(defaultOptions);\n const [searchQuery, setSearchQuery] = useState('');\n const [nextPage, setNextPage] = useState(1);\n const [hasMore, setHasMore] = useState(true);\n const [isInitialLoading, setIsInitialLoading] = useState(false);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [loadError, setLoadError] = useState<ReactNode | null>(null);\n const selectedOptions = isControlled\n ? normalizeAsyncValue(value as SelectAsyncValue<TValue>, isMultiSelect)\n : internalSelectedOptions;\n const optionLookupRef = useRef(new Map<string, SelectAsyncOption<TValue>>());\n const loadOptionsRef = useRef(loadOptions);\n const remoteOptionsRef = useRef(remoteOptions);\n const cacheUniqsRef = useRef(cacheUniqs);\n const requestVersionRef = useRef(0);\n const activeControllerRef = useRef<AbortController | null>(null);\n\n loadOptionsRef.current = loadOptions;\n remoteOptionsRef.current = remoteOptions;\n\n const mergedOptions = useMemo(() => {\n const baseOptions = dedupeSelectObjectOptions<TValue>([\n ...fixedOptions,\n ...remoteOptions,\n ]);\n const knownOptionKeys = new Set(baseOptions.map((option) => getSelectObjectOptionKey(option)));\n const missingSelectedOptions = selectedOptions.filter((option) => {\n return !knownOptionKeys.has(getSelectObjectOptionKey(option));\n });\n\n return [...baseOptions, ...missingSelectedOptions];\n }, [fixedOptions, remoteOptions, selectedOptions]);\n\n useEffect(() => {\n const nextLookup = new Map<string, SelectAsyncOption<TValue>>();\n\n mergedOptions.forEach((option) => {\n nextLookup.set(getSelectObjectOptionKey(option), option);\n });\n\n optionLookupRef.current = nextLookup;\n }, [mergedOptions]);\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n setInternalSelectedOptions(normalizeAsyncValue(defaultValue, isMultiSelect));\n }, [defaultValue, isControlled, isMultiSelect]);\n\n useEffect(() => {\n if (areUnknownArraysEqual(cacheUniqsRef.current, cacheUniqs)) {\n return;\n }\n\n cacheUniqsRef.current = cacheUniqs;\n setRemoteOptions(defaultOptions);\n setSearchQuery('');\n setNextPage(1);\n setHasMore(true);\n setLoadError(null);\n }, [cacheUniqs, defaultOptions]);\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n requestVersionRef.current += 1;\n const currentRequestVersion = requestVersionRef.current;\n const controller = new AbortController();\n\n activeControllerRef.current?.abort();\n activeControllerRef.current = controller;\n setIsInitialLoading(true);\n setIsLoadingMore(false);\n setLoadError(null);\n\n void loadOptionsRef.current(searchQuery, [], { page: 1, signal: controller.signal })\n .then((result) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions(result.options);\n setHasMore(result.hasMore ?? result.options.length > 0);\n setNextPage(2);\n })\n .catch((error: unknown) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions([]);\n setHasMore(false);\n setNextPage(1);\n\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n setLoadError(loadErrorMessage);\n })\n .finally(() => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setIsInitialLoading(false);\n });\n }, searchDebounceMs);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [loadErrorMessage, searchDebounceMs, searchQuery, ...cacheUniqs]);\n\n useEffect(() => {\n return () => {\n activeControllerRef.current?.abort();\n };\n }, []);\n\n const loadNextPage = async () => {\n if (isInitialLoading || isLoadingMore || !hasMore) {\n return;\n }\n\n const controller = new AbortController();\n const currentRequestVersion = requestVersionRef.current;\n\n setIsLoadingMore(true);\n setLoadError(null);\n\n try {\n const result = await loadOptionsRef.current(searchQuery, remoteOptionsRef.current, {\n page: nextPage,\n signal: controller.signal,\n });\n\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions((currentOptions) => {\n return dedupeSelectObjectOptions<TValue>([\n ...currentOptions,\n ...result.options,\n ]);\n });\n setHasMore(result.hasMore ?? result.options.length > 0);\n setNextPage((currentPage) => currentPage + 1);\n } catch (error: unknown) {\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n setLoadError(loadErrorMessage);\n } finally {\n setIsLoadingMore(false);\n }\n };\n\n const handleListboxScroll = (event: UIEvent<HTMLDivElement>) => {\n const element = event.currentTarget;\n const distanceToBottom = element.scrollHeight - element.scrollTop - element.clientHeight;\n\n if (distanceToBottom <= loadMoreThreshold) {\n void loadNextPage();\n }\n };\n\n const handleBaseChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const nextKeys = isMultiSelect\n ? Array.from(event.currentTarget.selectedOptions, (option) => option.value)\n : event.currentTarget.value\n ? [event.currentTarget.value]\n : [];\n const nextOptions = nextKeys\n .map((optionKey) => optionLookupRef.current.get(optionKey))\n .filter((option): option is SelectAsyncOption<TValue> => Boolean(option));\n const nextValue = isMultiSelect ? nextOptions : nextOptions[0] ?? null;\n\n if (!isControlled) {\n setInternalSelectedOptions(nextOptions);\n }\n\n onChange?.(nextValue);\n };\n\n const menuFooter = isLoadingMore || hasMore ? (\n <div\n aria-live=\"polite\"\n className=\"flex items-center gap-3 text-xs leading-[1.4] text-[var(--theme-textLight)]\"\n style={{ justifyContent: hasMore ? 'space-between' : 'center' }}\n >\n <span>{isLoadingMore ? loadingMoreMessage : hasMore ? loadMoreHintMessage : null}</span>\n {isLoadingMore ? (\n <span\n aria-hidden=\"true\"\n className=\"h-2 w-2 shrink-0 rounded-full bg-[var(--theme-primary)] opacity-80\"\n />\n ) : null}\n </div>\n ) : null;\n\n const resolvedEmptyMessage = loadError && remoteOptions.length === 0 ? loadError : emptyMessage;\n const resolvedValue = selectedOptions.map((option) => getSelectObjectOptionKey(option));\n\n return (\n <SelectBase\n {...props}\n isMulti={isMultiSelect}\n isFilterable={isFilterable ?? true}\n value={isMultiSelect ? resolvedValue : resolvedValue[0] ?? ''}\n onChange={handleBaseChange}\n groups={buildParsedGroupsFromObjectOptions<TValue>(mergedOptions)}\n nativeOptions={buildNativeOptionsFromObjectOptions<TValue>(mergedOptions)}\n emptyMessage={resolvedEmptyMessage}\n isLoading={isInitialLoading && mergedOptions.length === 0}\n loadingMessage={loadingMessage}\n searchPlaceholder={searchPlaceholder}\n searchQuery={searchQuery}\n onSearchQueryChange={setSearchQuery}\n allowOpenWithoutOptions={true}\n filterOptions={false}\n preserveUnknownValues={true}\n onListboxScroll={handleListboxScroll}\n menuFooter={menuFooter}\n />\n );\n}","import type { ReactNode } from 'react';\n\nimport type { ParsedGroup, ParsedOption } from './types';\nimport { getTextContent } from './utils';\n\nexport type SelectObjectOptionValue = string | number;\n\nexport interface SelectObjectOption<TValue extends SelectObjectOptionValue = SelectObjectOptionValue> {\n value: TValue;\n label: ReactNode;\n disabled?: boolean;\n group?: ReactNode;\n}\n\nconst getOptionKey = <TValue extends SelectObjectOptionValue>(option: SelectObjectOption<TValue>): string => {\n return String(option.value);\n};\n\nexport const dedupeSelectObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): Array<SelectObjectOption<TValue>> => {\n const seenKeys = new Set<string>();\n\n return options.filter((option) => {\n const optionKey = getOptionKey(option);\n\n if (seenKeys.has(optionKey)) {\n return false;\n }\n\n seenKeys.add(optionKey);\n return true;\n });\n};\n\nexport const buildParsedGroupsFromObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): ParsedGroup[] => {\n const standaloneOptions: ParsedOption[] = [];\n const groupedOptions = new Map<string, ParsedGroup>();\n\n options.forEach((option, index) => {\n const parsedOption: ParsedOption = {\n key: `async-option-${index}-${getOptionKey(option)}`,\n value: getOptionKey(option),\n label: option.label,\n disabled: Boolean(option.disabled),\n };\n\n if (option.group == null) {\n standaloneOptions.push(parsedOption);\n return;\n }\n\n const labelText = getTextContent(option.group).trim();\n const groupKey = labelText || `group-${index}`;\n const currentGroup = groupedOptions.get(groupKey);\n\n if (currentGroup) {\n currentGroup.options.push(parsedOption);\n return;\n }\n\n groupedOptions.set(groupKey, {\n key: `async-group-${groupKey}`,\n label: option.group,\n options: [parsedOption],\n });\n });\n\n const parsedGroups: ParsedGroup[] = [];\n\n if (standaloneOptions.length > 0) {\n parsedGroups.push({\n key: 'async-standalone',\n options: standaloneOptions,\n });\n }\n\n parsedGroups.push(...groupedOptions.values());\n\n return parsedGroups;\n};\n\nexport const buildNativeOptionsFromObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): ReactNode => {\n return options.map((option) => {\n const optionValue = getOptionKey(option);\n const optionText = getTextContent(option.label).trim() || optionValue;\n\n return (\n <option key={`native-${optionValue}`} value={optionValue} disabled={option.disabled}>\n {optionText}\n </option>\n );\n });\n};\n\nexport const getSelectObjectOptionKey = getOptionKey;","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\nimport { useId } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from '../foundation';\n\nimport {\n getDefaultFeedbackIcon,\n getFeedbackContainerStyle,\n getFeedbackIconBadgeStyle,\n type FeedbackTone,\n} from './feedbackPrimitives';\n\nexport type ResultStateTone = FeedbackTone;\n\nexport interface ResultStateProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title'> {\n tone?: ResultStateTone;\n icon?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n}\n\nexport function ResultState({\n tone = 'info',\n icon,\n title,\n description,\n action,\n className,\n style,\n ...rest\n}: ResultStateProps) {\n const theme = useUiKitTheme();\n const titleId = useId();\n const descriptionId = useId();\n const iconNode = icon === undefined ? getDefaultFeedbackIcon(tone, 28) : icon;\n const containerToneStyle = getFeedbackContainerStyle(theme, tone, 0.08);\n const iconToneStyle = getFeedbackIconBadgeStyle(theme, tone, 0.14);\n const descriptionStyle: CSSProperties = {\n maxWidth: '44ch',\n lineHeight: '1.6',\n color: 'var(--theme-textLight)',\n };\n\n return (\n <div\n {...rest}\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'rounded-2xl border border-dashed text-[var(--theme-text)] text-center',\n className,\n )}\n style={{\n ...containerToneStyle,\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 16,\n padding: '32px 24px',\n ...style,\n }}\n >\n {iconNode ? (\n <div\n aria-hidden=\"true\"\n className={UI_KIT_ROOT_CLASSNAME}\n style={{\n ...iconToneStyle,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 64,\n height: 64,\n borderRadius: 20,\n flexShrink: 0,\n }}\n >\n {iconNode}\n </div>\n ) : null}\n\n <div\n className={UI_KIT_ROOT_CLASSNAME}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: description ? 8 : 0,\n }}\n >\n <h2\n id={titleId}\n className={cx(UI_KIT_ROOT_CLASSNAME, 'font-bold text-2xl')}\n style={{ color: containerToneStyle.borderColor, lineHeight: 1.2 }}\n >\n {title}\n </h2>\n\n {description ? (\n <div id={descriptionId} className={cx(UI_KIT_ROOT_CLASSNAME, 'text-sm')} style={descriptionStyle}>\n {description}\n </div>\n ) : null}\n </div>\n\n {action ? <div className={UI_KIT_ROOT_CLASSNAME}>{action}</div> : null}\n </div>\n );\n}\n","import { useEffect, useMemo, useState } from 'react';\n\nimport { TableBase } from '../componentsBase/table/TableBase';\nimport type { SharedTableProps } from '../componentsBase/table/types';\nimport {\n DEFAULT_PAGE_SIZE,\n clampPage,\n resolveColumnSearchValue,\n sanitizePageSizeOptions,\n} from '../componentsBase/table/utils';\n\nexport interface TableProps<TItem> extends SharedTableProps<TItem> {\n items: Array<TItem>;\n}\n\nexport function Table<TItem>({\n items,\n desktopColumns,\n mobileColumns,\n defaultSearchValue = '',\n defaultPage = 1,\n defaultPageSize = DEFAULT_PAGE_SIZE,\n pageSizeOptions,\n searchable = true,\n onSearchValueChange,\n onPageChange,\n onPageSizeChange,\n ...props\n}: TableProps<TItem>) {\n const initialPageSizeOptions = useMemo(() => {\n return sanitizePageSizeOptions(pageSizeOptions, defaultPageSize);\n }, [defaultPageSize, pageSizeOptions]);\n const [searchValue, setSearchValue] = useState(defaultSearchValue);\n const [page, setPage] = useState(Math.max(1, Math.floor(defaultPage)));\n const [pageSize, setPageSize] = useState(initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE);\n\n useEffect(() => {\n if (initialPageSizeOptions.includes(pageSize)) {\n return;\n }\n\n const nextPageSize = initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE;\n setPageSize(nextPageSize);\n }, [initialPageSizeOptions, pageSize]);\n\n const filteredItems = useMemo(() => {\n if (!searchable) {\n return items;\n }\n\n const query = searchValue.trim().toLowerCase();\n\n if (query.length === 0) {\n return items;\n }\n\n const searchableColumns = [...desktopColumns, ...mobileColumns];\n\n return items.filter((item, index) => {\n return searchableColumns.some((column) => {\n return resolveColumnSearchValue(column, item, index).toLowerCase().includes(query);\n });\n });\n }, [desktopColumns, items, mobileColumns, searchable, searchValue]);\n\n const totalItems = filteredItems.length;\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize));\n const normalizedPage = clampPage(page, totalPages);\n\n useEffect(() => {\n if (normalizedPage === page) {\n return;\n }\n\n setPage(normalizedPage);\n onPageChange?.(normalizedPage);\n }, [normalizedPage, onPageChange, page]);\n\n const pageItems = useMemo(() => {\n const startIndex = (normalizedPage - 1) * pageSize;\n return filteredItems.slice(startIndex, startIndex + pageSize);\n }, [filteredItems, normalizedPage, pageSize]);\n\n return (\n <TableBase\n {...props}\n desktopColumns={desktopColumns}\n mobileColumns={mobileColumns}\n searchable={searchable}\n pageSizeOptions={pageSizeOptions}\n items={pageItems}\n searchValue={searchValue}\n page={normalizedPage}\n pageSize={pageSize}\n totalPages={totalPages}\n totalItems={totalItems}\n onSearchChange={(nextValue) => {\n setSearchValue(nextValue);\n setPage(1);\n onSearchValueChange?.(nextValue);\n onPageChange?.(1);\n }}\n onInternalPageChange={(nextPage) => {\n const normalizedNextPage = clampPage(nextPage, totalPages);\n setPage(normalizedNextPage);\n onPageChange?.(normalizedNextPage);\n }}\n onInternalPageSizeChange={(nextPageSize) => {\n setPageSize(nextPageSize);\n setPage(1);\n onPageSizeChange?.(nextPageSize);\n onPageChange?.(1);\n }}\n />\n );\n}","import {\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { Button } from \"../../components/Button\";\nimport { Input } from \"../../components/Input\";\nimport { Modal } from \"../../components/Modal\";\nimport { Separator } from \"../../components/Separator\";\nimport { Select } from \"../../components/Select\";\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from \"../../foundation\";\nimport type {\n TableAction,\n TableBaseProps,\n TableColumn,\n TableColumnAlign,\n} from \"./types\";\nimport {\n buildTableDownloadFileBaseName,\n buildTableDownloadMatrix,\n downloadTableAsCsv,\n downloadTableAsPdf,\n downloadTableAsXls,\n} from \"./downloads\";\nimport {\n DEFAULT_COLLAPSE_BELOW,\n DEFAULT_MAX_INLINE_ACTIONS,\n clampPage,\n getColumnKey,\n getRowId,\n hasRenderableContent,\n isActionDisabled,\n mergeTableLabels,\n resolveColumnContent,\n resolveTableActions,\n sanitizePageSizeOptions,\n} from \"./utils\";\n\ntype OverflowMenuProps = {\n label: string;\n children: ReactNode;\n};\n\nconst OVERFLOW_MENU_WIDTH = 220;\n\nfunction SettingsIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M12 15.2a3.2 3.2 0 1 0 0-6.4 3.2 3.2 0 0 0 0 6.4Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <path\n d={`\n M19.4 15a1 1 0 0 0 .2 1.1l.1.1a1.2 1.2 0 0 1 0 1.7l-1.2 1.2a1.2 1.2 0 0 1-1.7 0l-.1-.1a1 1 0 0\n 0-1.1-.2 1 1 0 0 0-.6.9V20a1.2 1.2 0 0 1-1.2 1.2h-1.6A1.2 1.2 0 0 1 11 20v-.2a1 1 0 0 0-.6-.9 1 1 0\n 0 0-1.1.2l-.1.1a1.2 1.2 0 0 1-1.7 0l-1.2-1.2a1.2 1.2 0 0 1 0-1.7l.1-.1a1 1 0 0 0 .2-1.1 1 1 0 0\n 0-.9-.6H4A1.2 1.2 0 0 1 2.8 13v-1.6A1.2 1.2 0 0 1 4 10.2h.2a1 1 0 0 0 .9-.6 1 1 0 0\n 0-.2-1.1l-.1-.1a1.2 1.2 0 0 1 0-1.7l1.2-1.2a1.2 1.2 0 0 1 1.7 0l.1.1a1 1 0 0 0 1.1.2 1 1 0 0 0\n .6-.9V4A1.2 1.2 0 0 1 11 2.8h1.6A1.2 1.2 0 0 1 13.8 4v.2a1 1 0 0 0 .6.9 1 1 0 0 0 1.1-.2l.1-.1a1.2\n 1.2 0 0 1 1.7 0l1.2 1.2a1.2 1.2 0 0 1 0 1.7l-.1.1a1 1 0 0 0-.2 1.1 1 1 0 0 0 .9.6h.2A1.2 1.2 0 0 1\n 21.2 11v1.6a1.2 1.2 0 0 1-1.2 1.2h-.2a1 1 0 0 0-.4.2Z\n `}\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction MoreActionsIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <circle cx=\"5\" cy=\"12\" r=\"1.8\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.8\" />\n <circle cx=\"19\" cy=\"12\" r=\"1.8\" />\n </svg>\n );\n}\n\nfunction ChevronIcon({ direction }: { direction: \"left\" | \"right\" }) {\n const isLeft = direction === \"left\";\n\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d={isLeft ? \"M15 6 9 12l6 6\" : \"m9 6 6 6-6 6\"}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction DoubleChevronIcon({ direction }: { direction: \"left\" | \"right\" }) {\n const isLeft = direction === \"left\";\n\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d={isLeft ? \"M18 6 12 12l6 6\" : \"m6 6 6 6-6 6\"}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d={isLeft ? \"M12 6 6 12l6 6\" : \"m12 6 6 6-6 6\"}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction OverflowMenu({ label, children }: OverflowMenuProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [menuPosition, setMenuPosition] = useState<{\n left: number;\n top: number;\n } | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const updateMenuPosition = () => {\n const triggerRect = buttonRef.current?.getBoundingClientRect();\n\n if (!triggerRect || typeof window === \"undefined\") {\n return;\n }\n\n const preferredLeft = triggerRect.right - OVERFLOW_MENU_WIDTH - 25;\n const fallbackLeft = triggerRect.left - OVERFLOW_MENU_WIDTH;\n\n setMenuPosition({\n left: Math.max(\n 8,\n Math.min(\n window.innerWidth - OVERFLOW_MENU_WIDTH - 8,\n preferredLeft >= 8 ? preferredLeft : fallbackLeft,\n ),\n ),\n top: triggerRect.bottom - 20,\n });\n };\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n updateMenuPosition();\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target as Node;\n\n if (\n containerRef.current?.contains(target) ||\n menuRef.current?.contains(target)\n ) {\n return;\n }\n\n setIsOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n window.addEventListener(\"resize\", updateMenuPosition);\n window.addEventListener(\"scroll\", updateMenuPosition, true);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n window.removeEventListener(\"resize\", updateMenuPosition);\n window.removeEventListener(\"scroll\", updateMenuPosition, true);\n };\n }, [isOpen]);\n\n return (\n <div ref={containerRef} className=\"relative\">\n <button\n type=\"button\"\n ref={buttonRef}\n aria-label={label}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n onClick={(event) => {\n event.stopPropagation();\n\n if (!isOpen) {\n updateMenuPosition();\n }\n\n setIsOpen((currentValue) => !currentValue);\n }}\n className={[\n \"inline-flex h-[30px] w-[30px] items-center justify-center rounded-xl\",\n \"cursor-pointer border-0 bg-transparent text-[var(--theme-text)]\",\n \"transition-colors hover:text-[var(--theme-primary)]\",\n ].join(\" \")}\n >\n <MoreActionsIcon />\n </button>\n {isOpen && menuPosition && typeof document !== \"undefined\" ? (\n createPortal(\n <div\n ref={menuRef}\n role=\"menu\"\n aria-label={label}\n className={cx(\n // Portal: renderiza em document.body, fora da raiz do componente.\n UI_KIT_ROOT_CLASSNAME,\n \"z-50 flex flex-col gap-1.5\",\n \"border-[3px] border-solid border-[var(--theme-background)] bg-[var(--theme-surface)] p-2.5 shadow-none\",\n )}\n style={{\n borderRadius: 22,\n left: menuPosition.left,\n position: \"fixed\",\n top: menuPosition.top,\n width: OVERFLOW_MENU_WIDTH,\n zIndex: 1000,\n }}\n >\n {children}\n </div>,\n document.body,\n )\n ) : null}\n </div>\n );\n}\n\nconst getAlignClassName = (align: TableColumnAlign): string => {\n if (align === \"right\") return \"text-right\";\n if (align === \"center\") return \"text-center\";\n return \"text-left\";\n};\n\nexport function TableBase<TItem>({\n items,\n loading = false,\n error,\n onRetry,\n desktopColumns,\n mobileColumns,\n getRowId: getCustomRowId,\n onRowClick,\n actions,\n stickyActionsColumn = true,\n maxInlineActions = DEFAULT_MAX_INLINE_ACTIONS,\n actionsAlign = \"right\",\n collapseBelow = DEFAULT_COLLAPSE_BELOW,\n searchable = true,\n showSearch = true,\n showPagination = true,\n showRowsPerPage = true,\n showSettingsButton = true,\n pageSizeOptions,\n labels,\n translations,\n className,\n style,\n ariaLabel = \"Responsive data table\",\n searchValue,\n page,\n pageSize,\n totalPages,\n totalItems,\n onSearchChange,\n onInternalPageChange,\n onInternalPageSizeChange,\n}: TableBaseProps<TItem>) {\n useUiKitTheme();\n\n const scrollRegionId = useId().replace(/:/g, \"\");\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number | null>(null);\n const [isSettingsModalOpen, setIsSettingsModalOpen] = useState(false);\n const resolvedLabels = mergeTableLabels({\n ...(labels ?? {}),\n ...(translations ?? {}),\n });\n const normalizedPage = clampPage(page, totalPages);\n const normalizedPageSizeOptions = sanitizePageSizeOptions(\n pageSizeOptions,\n pageSize,\n );\n const isCollapsed =\n containerWidth !== null ? containerWidth < collapseBelow : false;\n const mobileGridColumnCount =\n containerWidth !== null && containerWidth < 520 ? 1 : 2;\n const canGoToPreviousPage = normalizedPage > 1;\n const canGoToNextPage = normalizedPage < Math.max(1, totalPages);\n const canGoToFirstPage = canGoToPreviousPage;\n const canGoToLastPage = canGoToNextPage;\n const shouldShowSearch = searchable && showSearch;\n const shouldShowPaginationControls = showPagination && totalPages > 1;\n const shouldShowRowsPerPageControl =\n showRowsPerPage && normalizedPageSizeOptions.length > 1;\n const shouldRenderFooter =\n shouldShowPaginationControls || shouldShowRowsPerPageControl;\n const hasRows = items.length > 0;\n const hasSearchValue = searchValue.trim().length > 0;\n const visibleInlineActions = Math.max(0, Math.floor(maxInlineActions));\n const actionsColumnMinWidth = Math.max(\n 112,\n visibleInlineActions * 38 + 48,\n );\n const actionsColumnSizeStyle: CSSProperties = {\n minWidth: actionsColumnMinWidth,\n width: actionsColumnMinWidth,\n };\n const paginationButtonStyle: CSSProperties = {\n height: 30,\n maxWidth: 30,\n minWidth: 30,\n padding: 5,\n width: 30,\n };\n const lastPageButtonStyle: CSSProperties = {\n ...paginationButtonStyle,\n maxWidth: totalPages > 100 ? 45 : 30,\n minWidth: totalPages > 100 ? 45 : 30,\n width: totalPages > 100 ? 45 : 30,\n };\n const shouldShowToolbarStatus =\n loading || (!loading && Boolean(error) && hasRows);\n const shouldRenderToolbar =\n shouldShowSearch || shouldShowToolbarStatus || showSettingsButton;\n const shouldRenderToolbarPrimaryGroup =\n shouldShowSearch || showSettingsButton;\n const visibleDownloadColumns = desktopColumns.filter(\n (column) => column.type !== \"actions\",\n );\n const totalItemCount = totalItems ?? items.length;\n const currentPageItemCount = items.length;\n const downloadMatrix = buildTableDownloadMatrix(\n visibleDownloadColumns,\n items,\n );\n const downloadFileBaseName = buildTableDownloadFileBaseName(\n ariaLabel,\n normalizedPage,\n );\n const hasRowClick = Boolean(onRowClick);\n const shouldStickActionsColumn = Boolean(actions) && stickyActionsColumn;\n\n const getStickyActionsCellStyle = (\n backgroundColor: string,\n backgroundImage?: CSSProperties[\"backgroundImage\"],\n isHeader = false,\n ): CSSProperties => ({\n position: \"sticky\",\n right: 0,\n zIndex: isHeader ? 4 : 2,\n backgroundColor,\n backgroundImage,\n backgroundClip: \"padding-box\",\n boxShadow: \"-10px 0 16px -14px var(--theme-shadow)\",\n borderLeft: \"1px solid var(--theme-secondary)\",\n });\n\n useEffect(() => {\n const element = containerRef.current;\n\n if (!element) {\n return;\n }\n\n const setWidthFromElement = (nextWidth?: number) => {\n const measuredWidth = nextWidth ?? element.getBoundingClientRect().width;\n setContainerWidth(measuredWidth > 0 ? measuredWidth : null);\n };\n\n setWidthFromElement();\n\n if (typeof ResizeObserver === \"undefined\") {\n const handleResize = () => {\n setWidthFromElement(window.innerWidth);\n };\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }\n\n const observer = new ResizeObserver((entries) => {\n const [entry] = entries;\n setWidthFromElement(entry?.contentRect.width);\n });\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const handleDownloadCsv = () => {\n downloadTableAsCsv(downloadMatrix, downloadFileBaseName);\n };\n\n const handleDownloadXls = () => {\n downloadTableAsXls(downloadMatrix, downloadFileBaseName);\n };\n\n const handleDownloadPdf = () => {\n downloadTableAsPdf(\n downloadMatrix,\n downloadFileBaseName,\n String(ariaLabel),\n normalizedPage,\n totalPages,\n );\n };\n\n const renderActionButton = (\n action: TableAction<TItem>,\n item: TItem,\n rowIndex: number,\n appearance: \"inline\" | \"menu\",\n onAfterClick?: () => void,\n ) => {\n const disabled = isActionDisabled(action, item, rowIndex);\n const tone = action.tone ?? \"default\";\n const iconOnly = appearance === \"inline\" && action.icon != null;\n const isMenuAction = appearance === \"menu\";\n\n return (\n <button\n key={action.id ?? `${action.label}-${rowIndex}`}\n type=\"button\"\n role={appearance === \"menu\" ? \"menuitem\" : undefined}\n disabled={disabled}\n title={action.label}\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n\n if (disabled) {\n return;\n }\n\n action.onClick(item, rowIndex);\n onAfterClick?.();\n }}\n className={cx(\n \"box-border inline-flex items-center rounded-xl border-0 text-[13px] leading-4\",\n \"cursor-pointer bg-transparent transition-colors disabled:cursor-not-allowed disabled:opacity-50\",\n tone === \"danger\"\n ? \"text-[var(--theme-negative)]\"\n : \"text-[var(--theme-text)]\",\n tone === \"danger\"\n ? \"hover:text-[var(--theme-negative)]\"\n : \"hover:text-[var(--theme-primary)]\",\n iconOnly && !isMenuAction\n ? \"h-[30px] w-[30px] justify-center p-0\"\n : \"h-[30px] gap-2 px-2.5\",\n isMenuAction\n ? \"h-[34px] w-full justify-start gap-2.5 px-3\"\n : \"justify-center\",\n )}\n >\n {action.icon}\n {appearance === \"menu\" || !iconOnly ? (\n <span>{action.label}</span>\n ) : null}\n </button>\n );\n };\n\n const renderActions = (item: TItem, rowIndex: number) => {\n const resolvedActions = resolveTableActions(actions, item, rowIndex);\n\n if (resolvedActions.length === 0) {\n return null;\n }\n\n const inlineActions = resolvedActions.slice(0, visibleInlineActions);\n const overflowActions = resolvedActions.slice(visibleInlineActions);\n\n return (\n <div\n className={cx(\n \"flex w-full min-w-max flex-nowrap items-center gap-2\",\n // No card mobile as ações ficam sempre à direita: `actionsAlign` é do\n // alinhamento dentro da coluna, que só existe no layout de tabela.\n actionsAlign === \"center\" && !isCollapsed\n ? \"justify-center\"\n : \"justify-end\",\n )}\n >\n {inlineActions.map((action) =>\n renderActionButton(action, item, rowIndex, \"inline\"),\n )}\n {overflowActions.length > 0 ? (\n <OverflowMenu label={resolvedLabels.actionsMenuLabel}>\n {overflowActions.map((action) =>\n renderActionButton(action, item, rowIndex, \"menu\"),\n )}\n </OverflowMenu>\n ) : null}\n </div>\n );\n };\n\n const renderDesktopCell = (\n column: TableColumn<TItem>,\n item: TItem,\n rowIndex: number,\n columnIndex: number,\n ) => {\n const content = resolveColumnContent(column, item, rowIndex);\n const align =\n column.align ?? (column.type === \"actions\" ? \"right\" : \"left\");\n\n return (\n <td\n key={`${getColumnKey(column, columnIndex)}-${rowIndex}`}\n colSpan={column.colSpan}\n className={[\n \"border-b border-[var(--theme-background)] px-2.5 py-2.5\",\n \"align-middle text-[12px] font-normal leading-[1.3] text-[var(--theme-text)]\",\n getAlignClassName(align),\n ].join(\" \")}\n style={{\n width: column.width,\n minWidth: column.minWidth,\n }}\n >\n {hasRenderableContent(content) ? (\n content\n ) : (\n <span className=\"text-[var(--theme-textLight)]\">-</span>\n )}\n </td>\n );\n };\n\n const renderEmptyState = () => {\n const message = error\n ? error\n : loading\n ? resolvedLabels.loadingMessage\n : hasSearchValue\n ? resolvedLabels.noResultsMessage\n : resolvedLabels.emptyMessage;\n\n return (\n <div\n className={[\n \"flex min-h-[220px] flex-col items-center justify-center gap-3 rounded-[20px]\",\n \"border border-dashed border-[var(--theme-background)] bg-[var(--theme-surface)]\",\n \"p-6 text-center text-[var(--theme-text)] shadow-none\",\n ].join(\" \")}\n >\n <strong className=\"text-base\">{message}</strong>\n {error && onRetry ? (\n <Button variant=\"secondary\" onClick={onRetry}>\n {resolvedLabels.retryLabel}\n </Button>\n ) : null}\n </div>\n );\n };\n\n return (\n <div\n ref={containerRef}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n \"flex w-full max-w-full min-w-0 flex-col gap-4 rounded-[24px]\",\n \"box-border bg-[var(--theme-surface)] text-[var(--theme-text)]\",\n className,\n )}\n style={style}\n >\n {shouldRenderToolbar ? (\n <div className=\"flex min-w-0 flex-wrap items-center justify-between gap-3\">\n {shouldRenderToolbarPrimaryGroup ? (\n <div\n className={cx(\n \"flex min-w-0 items-center gap-2.5\",\n shouldShowSearch ? \"flex-[1_1_260px]\" : \"ml-auto flex-none\",\n )}\n >\n {shouldShowSearch ? (\n // Wrapper carries the toolbar flex sizing. Applying `flex` directly\n // to the Input would land on the inner <input>, which lives inside a\n // flex-column ControlFrame — there flex-basis becomes height and the\n // field grows absurdly tall.\n <div className=\"min-w-0 max-w-[360px] flex-[1_1_260px]\">\n <Input\n type=\"search\"\n value={searchValue}\n aria-label={resolvedLabels.searchPlaceholder}\n placeholder={resolvedLabels.searchPlaceholder}\n onChange={(event) =>\n onSearchChange(event.currentTarget.value)\n }\n />\n </div>\n ) : null}\n\n {showSettingsButton && !loading ? (\n <Button\n variant=\"secondary\"\n aria-label={resolvedLabels.settingsButtonLabel}\n title={resolvedLabels.settingsButtonLabel}\n onClick={() => setIsSettingsModalOpen(true)}\n className=\"shrink-0\"\n >\n <SettingsIcon />\n </Button>\n ) : null}\n </div>\n ) : null}\n\n {shouldShowToolbarStatus ? (\n <div\n className={cx(\n \"flex min-w-0 flex-wrap items-center justify-end gap-2.5\",\n shouldRenderToolbarPrimaryGroup ? \"ml-auto\" : \"\",\n )}\n >\n {loading ? (\n <span className=\"text-[13px] font-semibold text-[var(--theme-textLight)]\">\n {resolvedLabels.loadingMessage}\n </span>\n ) : null}\n {!loading && error && hasRows ? (\n <div className=\"inline-flex items-center gap-2.5\">\n <span className=\"text-[13px] font-semibold text-[var(--theme-negative)]\">\n {resolvedLabels.errorMessage}\n </span>\n {onRetry ? (\n <Button variant=\"ghost\" onClick={onRetry}>\n {resolvedLabels.retryLabel}\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n\n {!hasRows && (!loading || error) ? renderEmptyState() : null}\n\n {hasRows ? (\n isCollapsed ? (\n <div\n role=\"list\"\n aria-label={ariaLabel}\n className=\"flex min-w-0 flex-col gap-3.5\"\n >\n {items.map((item, rowIndex) => {\n const rowActions = renderActions(item, rowIndex);\n\n return (\n <article\n key={getRowId(item, rowIndex, getCustomRowId)}\n role=\"listitem\"\n className={[\n \"flex min-w-0 flex-col rounded-[20px]\",\n rowActions ? \"gap-1\" : \"gap-2.5\",\n \"border-[3px] border-solid border-[var(--theme-background)] bg-[var(--theme-surface)]\",\n \"px-3.5 py-3 shadow-none\",\n hasRowClick ? \"cursor-pointer\" : \"\",\n ].join(\" \")}\n onClick={onRowClick ? () => onRowClick(item, rowIndex) : undefined}\n >\n <div\n className={cx(\n \"grid min-w-0 gap-1.5\",\n mobileGridColumnCount === 1\n ? \"grid-cols-[minmax(0,1fr)]\"\n : \"grid-cols-[repeat(2,minmax(0,1fr))]\",\n )}\n >\n {mobileColumns.map((column, columnIndex) => {\n const content = resolveColumnContent(\n column,\n item,\n rowIndex,\n );\n const align =\n column.align ??\n (column.type === \"actions\" ? \"right\" : \"left\");\n const span = Math.max(\n 1,\n Math.min(column.colSpan ?? 1, mobileGridColumnCount),\n );\n\n return (\n <div\n key={`${getColumnKey(column, columnIndex)}-${rowIndex}`}\n className={cx(\n mobileGridColumnCount === 2\n ? \"grid min-w-0 grid-cols-[7rem_minmax(0,1fr)] items-center gap-1.5\"\n : \"flex min-w-0 items-center gap-1.5\",\n span === 2 ? \"col-span-2\" : \"col-span-1\",\n )}\n >\n {!column.hideLabel && column.label ? (\n <span\n className={[\n \"min-w-0 text-left text-[11px] font-bold\",\n mobileGridColumnCount === 2 ? \"\" : \"flex-[0_1_45%]\",\n \"uppercase tracking-[0.08em] text-[var(--theme-textLight)]\",\n \"[overflow-wrap:anywhere]\",\n ].join(\" \")}\n >\n {column.label}\n </span>\n ) : null}\n <div\n className={cx(\n \"min-w-0 max-w-full\",\n mobileGridColumnCount === 2 ? \"\" : \"flex-1\",\n )}\n >\n <div\n className={cx(\n \"w-full min-w-0 break-words text-[12px] font-normal leading-[1.35]\",\n \"text-[var(--theme-text)] [overflow-wrap:anywhere]\",\n getAlignClassName(align),\n )}\n >\n {hasRenderableContent(content) ? (\n content\n ) : (\n <span className=\"text-[var(--theme-textLight)]\">\n -\n </span>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n {rowActions ? (\n <div className=\"flex justify-end pt-1\">{rowActions}</div>\n ) : null}\n </article>\n );\n })}\n </div>\n ) : (\n <>\n <style>\n {`\n #${scrollRegionId} {\n scrollbar-width: thin;\n scrollbar-color: var(--theme-secondary) transparent;\n }\n\n #${scrollRegionId}::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-thumb {\n background: var(--theme-secondary);\n border-radius: 999px;\n border: 2px solid transparent;\n background-clip: padding-box;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-thumb:hover {\n background: var(--theme-textLight);\n background-clip: padding-box;\n }\n `}\n </style>\n <div\n id={scrollRegionId}\n role=\"region\"\n aria-label={ariaLabel}\n className={cx(\n \"w-full max-w-full min-w-0 overflow-x-auto overflow-y-hidden\",\n \"rounded-[20px] border-2 border-solid border-[var(--theme-background)]\",\n \"bg-[var(--theme-surface)] shadow-none\",\n )}\n >\n <table className=\"w-max min-w-full max-w-none border-separate border-spacing-0\">\n <thead>\n <tr>\n {desktopColumns.map((column, columnIndex) => {\n const align =\n column.align ??\n (column.type === \"actions\" ? \"right\" : \"left\");\n\n return (\n <th\n key={getColumnKey(column, columnIndex)}\n colSpan={column.headerColSpan ?? column.colSpan}\n scope=\"col\"\n className={[\n \"whitespace-nowrap border-b border-[var(--theme-background)]\",\n \"bg-[var(--theme-background)] px-2.5 py-2 text-[11px] font-bold\",\n \"uppercase tracking-[0.08em] text-[var(--theme-textLight)]\",\n getAlignClassName(align),\n ].join(\" \")}\n style={{\n width: column.width,\n minWidth: column.minWidth,\n }}\n >\n {!column.hideLabel ? column.label : null}\n </th>\n );\n })}\n {actions ? (\n <th\n scope=\"col\"\n className={[\n \"whitespace-nowrap border-b border-[var(--theme-background)]\",\n \"bg-[var(--theme-background)] px-2.5 py-2.5 text-center text-[11px] font-bold\",\n \"uppercase tracking-[0.08em] text-[var(--theme-textLight)]\",\n ].join(\" \")}\n style={{\n ...actionsColumnSizeStyle,\n ...(shouldStickActionsColumn\n ? getStickyActionsCellStyle(\n \"var(--theme-background)\",\n undefined,\n true,\n )\n : {}),\n }}\n >\n {resolvedLabels.moreActionsLabel}\n </th>\n ) : null}\n </tr>\n </thead>\n <tbody>\n {items.map((item, rowIndex) => {\n const rowActions = renderActions(item, rowIndex);\n const isAlternateRow = rowIndex % 2 !== 0;\n const stickyRowBackgroundImage =\n rowIndex % 2 === 0\n ? undefined\n : \"linear-gradient(var(--theme-background), var(--theme-background))\";\n\n return (\n <tr\n key={getRowId(item, rowIndex, getCustomRowId)}\n className={[\n isAlternateRow\n ? \"bg-[var(--theme-background)]\"\n : \"bg-[var(--theme-surface)]\",\n hasRowClick ? \"cursor-pointer\" : \"\",\n ].join(\" \")}\n onClick={onRowClick ? () => onRowClick(item, rowIndex) : undefined}\n >\n {desktopColumns.map((column, columnIndex) => {\n return renderDesktopCell(\n column,\n item,\n rowIndex,\n columnIndex,\n );\n })}\n {actions ? (\n <td\n className={cx(\n \"border-b border-[var(--theme-background)] px-2.5 py-2.5 align-middle\",\n actionsAlign === \"center\"\n ? \"text-center\"\n : \"text-right\",\n )}\n style={{\n ...actionsColumnSizeStyle,\n ...(shouldStickActionsColumn\n ? getStickyActionsCellStyle(\n \"var(--theme-surface)\",\n stickyRowBackgroundImage,\n )\n : {}),\n }}\n >\n {rowActions}\n </td>\n ) : null}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </>\n )\n ) : null}\n\n {hasRows && shouldRenderFooter ? (\n <div className=\"-mt-2 flex flex-wrap items-center justify-between gap-3\">\n {shouldShowPaginationControls ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n variant=\"secondary\"\n onClick={() => onInternalPageChange(1)}\n disabled={!canGoToFirstPage}\n aria-label={resolvedLabels.firstPageLabel}\n style={paginationButtonStyle}\n >\n {1}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={() => onInternalPageChange(normalizedPage - 1)}\n disabled={!canGoToPreviousPage}\n aria-label={resolvedLabels.previousPageLabel}\n style={paginationButtonStyle}\n >\n <ChevronIcon direction=\"left\" />\n </Button>\n <Button\n variant=\"secondary\"\n disabled\n aria-label={`Page ${normalizedPage} of ${totalPages}`}\n style={paginationButtonStyle}\n >\n {normalizedPage}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={() => onInternalPageChange(normalizedPage + 1)}\n disabled={!canGoToNextPage}\n aria-label={resolvedLabels.nextPageLabel}\n style={paginationButtonStyle}\n >\n <ChevronIcon direction=\"right\" />\n </Button>\n <Button\n variant=\"secondary\"\n onClick={() => onInternalPageChange(totalPages)}\n disabled={!canGoToLastPage}\n aria-label={resolvedLabels.lastPageLabel}\n style={lastPageButtonStyle}\n >\n {totalPages}\n </Button>\n </div>\n ) : null}\n\n <div\n className={cx(\n \"flex items-center gap-2.5 text-[13px] text-[var(--theme-textLight)]\",\n shouldShowRowsPerPageControl ? \"ml-auto\" : \"\",\n )}\n >\n {shouldShowRowsPerPageControl ? (\n <>\n {resolvedLabels.rowsPerPageLabel ? (\n <span>{resolvedLabels.rowsPerPageLabel}</span>\n ) : null}\n <div className=\"w-[72px]\">\n <Select\n value={String(pageSize)}\n onChange={(event) =>\n onInternalPageSizeChange(\n Number(event.currentTarget.value),\n )\n }\n size=\"sm\"\n style={{ height: 30 }}\n options={normalizedPageSizeOptions.map((opt) => ({\n label: String(opt),\n value: String(opt),\n }))}\n />\n </div>\n </>\n ) : null}\n </div>\n </div>\n ) : null}\n\n <Modal\n isOpen={isSettingsModalOpen}\n onClose={() => setIsSettingsModalOpen(false)}\n title={resolvedLabels.settingsModalTitle}\n maxWidth={560}\n bodyStyle={{\n display: \"grid\",\n minWidth: 0,\n minHeight: 0,\n gap: 0,\n overflowY: \"auto\",\n paddingRight: 8,\n paddingTop: 8,\n }}\n >\n <section className=\"grid gap-3\">\n <strong className=\"text-sm text-[var(--theme-text)]\">\n {resolvedLabels.tableInfoSectionTitle}\n </strong>\n <div\n className={cx(\n \"grid grid-cols-4 gap-4 rounded-[var(--ui-radius,12px)] p-4\",\n \"border-2 border-[var(--theme-background)] bg-[var(--theme-surface)]\",\n )}\n >\n <div className=\"grid gap-1\">\n <span className=\"text-xs text-[var(--theme-textLight)]\">\n {resolvedLabels.totalItemsInfoLabel}\n </span>\n <strong className=\"font-medium text-[var(--theme-text)]\">\n {totalItemCount}\n </strong>\n </div>\n <div className=\"grid gap-1\">\n <span className=\"text-xs text-[var(--theme-textLight)]\">\n {resolvedLabels.totalPagesInfoLabel}\n </span>\n <strong className=\"font-medium text-[var(--theme-text)]\">\n {totalPages}\n </strong>\n </div>\n <div className=\"grid gap-1\">\n <span className=\"text-xs text-[var(--theme-textLight)]\">\n {resolvedLabels.currentPageItemsInfoLabel}\n </span>\n <strong className=\"font-medium text-[var(--theme-text)]\">\n {currentPageItemCount}\n </strong>\n </div>\n <div className=\"grid gap-1\">\n <span className=\"text-xs text-[var(--theme-textLight)]\">\n {resolvedLabels.currentPageInfoLabel}\n </span>\n <strong className=\"font-medium text-[var(--theme-text)]\">\n {normalizedPage}\n </strong>\n </div>\n </div>\n </section>\n\n <div className=\"py-[18px]\">\n <Separator />\n </div>\n\n <section className=\"grid gap-3\">\n <strong className=\"text-sm text-[var(--theme-text)]\">\n {resolvedLabels.downloadSectionTitle}\n </strong>\n <div className=\"flex flex-wrap gap-2.5\">\n <Button\n variant=\"secondary\"\n onClick={handleDownloadCsv}\n disabled={!hasRows}\n >\n {resolvedLabels.downloadCsvLabel}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={handleDownloadXls}\n disabled={!hasRows}\n >\n {resolvedLabels.downloadXlsLabel}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={handleDownloadPdf}\n disabled={!hasRows}\n >\n {resolvedLabels.downloadPdfLabel}\n </Button>\n </div>\n </section>\n </Modal>\n </div>\n );\n}\n","import { isValidElement, type ReactNode } from 'react';\n\nimport type {\n TableAction,\n TableActionSource,\n TableColumn,\n TableLabels,\n} from './types';\n\nexport const DEFAULT_COLLAPSE_BELOW = 768;\nexport const DEFAULT_MAX_INLINE_ACTIONS = 2;\nexport const DEFAULT_PAGE_SIZE = 10;\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50];\n\ntype ResolvedTableLabels = Required<Omit<TableLabels, 'pageLabel' | 'resultCountLabel'>> & {\n pageLabel: NonNullable<TableLabels['pageLabel']>;\n resultCountLabel: NonNullable<TableLabels['resultCountLabel']>;\n};\n\nconst DEFAULT_TABLE_LABELS: ResolvedTableLabels = {\n searchPlaceholder: 'Search rows',\n emptyMessage: 'No rows available.',\n noResultsMessage: 'No rows match the current search.',\n loadingMessage: 'Loading rows...',\n errorMessage: 'Could not load rows.',\n firstPageLabel: 'First page',\n previousPageLabel: 'Previous',\n nextPageLabel: 'Next',\n lastPageLabel: 'Last page',\n rowsPerPageLabel: '',\n actionsMenuLabel: 'More actions',\n moreActionsLabel: 'More actions',\n retryLabel: 'Retry',\n settingsButtonLabel: 'Table settings',\n settingsModalTitle: 'Table settings',\n tableInfoSectionTitle: 'Table details',\n totalPagesInfoLabel: 'Total pages',\n totalItemsInfoLabel: 'Total items',\n currentPageInfoLabel: 'Current page',\n currentPageItemsInfoLabel: 'Items in current page',\n downloadSectionTitle: 'Download current page',\n downloadCsvLabel: 'CSV',\n downloadXlsLabel: 'XLS',\n downloadPdfLabel: 'PDF',\n pageLabel: (page, totalPages) => `Page ${page} of ${totalPages}`,\n resultCountLabel: (start, end, totalItems) => `Showing ${start}-${end} of ${totalItems}`,\n};\n\nconst getNodeText = (node: ReactNode): string => {\n if (node == null || typeof node === 'boolean') {\n return '';\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n\n if (Array.isArray(node)) {\n return node.map((entry) => getNodeText(entry)).join(' ');\n }\n\n if (isValidElement(node)) {\n const element = node as React.ReactElement<{ children?: ReactNode }>;\n return getNodeText(element.props.children);\n }\n\n return '';\n};\n\nexport const normalizeTableText = (value: unknown): string => {\n if (value == null || typeof value === 'boolean') {\n return '';\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value);\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeTableText(entry)).join(' ');\n }\n\n if (isValidElement(value)) {\n return getNodeText(value);\n }\n\n return '';\n};\n\nconst resolveActionFlag = <TItem>(\n value: boolean | ((item: TItem, index: number) => boolean) | undefined,\n item: TItem,\n index: number,\n): boolean => {\n if (typeof value === 'function') {\n return value(item, index);\n }\n\n return Boolean(value);\n};\n\nexport const mergeTableLabels = (labels?: TableLabels): ResolvedTableLabels => ({\n searchPlaceholder: labels?.searchPlaceholder ?? DEFAULT_TABLE_LABELS.searchPlaceholder,\n emptyMessage: labels?.emptyMessage ?? DEFAULT_TABLE_LABELS.emptyMessage,\n noResultsMessage: labels?.noResultsMessage ?? DEFAULT_TABLE_LABELS.noResultsMessage,\n loadingMessage: labels?.loadingMessage ?? DEFAULT_TABLE_LABELS.loadingMessage,\n errorMessage: labels?.errorMessage ?? DEFAULT_TABLE_LABELS.errorMessage,\n firstPageLabel: labels?.firstPageLabel ?? DEFAULT_TABLE_LABELS.firstPageLabel,\n previousPageLabel: labels?.previousPageLabel ?? DEFAULT_TABLE_LABELS.previousPageLabel,\n nextPageLabel: labels?.nextPageLabel ?? DEFAULT_TABLE_LABELS.nextPageLabel,\n lastPageLabel: labels?.lastPageLabel ?? DEFAULT_TABLE_LABELS.lastPageLabel,\n rowsPerPageLabel: labels?.rowsPerPageLabel ?? DEFAULT_TABLE_LABELS.rowsPerPageLabel,\n actionsMenuLabel: labels?.actionsMenuLabel ?? DEFAULT_TABLE_LABELS.actionsMenuLabel,\n moreActionsLabel: labels?.moreActionsLabel ?? DEFAULT_TABLE_LABELS.moreActionsLabel,\n retryLabel: labels?.retryLabel ?? DEFAULT_TABLE_LABELS.retryLabel,\n settingsButtonLabel: labels?.settingsButtonLabel ?? DEFAULT_TABLE_LABELS.settingsButtonLabel,\n settingsModalTitle: labels?.settingsModalTitle ?? DEFAULT_TABLE_LABELS.settingsModalTitle,\n tableInfoSectionTitle: labels?.tableInfoSectionTitle ?? DEFAULT_TABLE_LABELS.tableInfoSectionTitle,\n totalPagesInfoLabel: labels?.totalPagesInfoLabel ?? DEFAULT_TABLE_LABELS.totalPagesInfoLabel,\n totalItemsInfoLabel: labels?.totalItemsInfoLabel ?? DEFAULT_TABLE_LABELS.totalItemsInfoLabel,\n currentPageInfoLabel: labels?.currentPageInfoLabel ?? DEFAULT_TABLE_LABELS.currentPageInfoLabel,\n currentPageItemsInfoLabel: labels?.currentPageItemsInfoLabel ?? DEFAULT_TABLE_LABELS.currentPageItemsInfoLabel,\n downloadSectionTitle: labels?.downloadSectionTitle ?? DEFAULT_TABLE_LABELS.downloadSectionTitle,\n downloadCsvLabel: labels?.downloadCsvLabel ?? DEFAULT_TABLE_LABELS.downloadCsvLabel,\n downloadXlsLabel: labels?.downloadXlsLabel ?? DEFAULT_TABLE_LABELS.downloadXlsLabel,\n downloadPdfLabel: labels?.downloadPdfLabel ?? DEFAULT_TABLE_LABELS.downloadPdfLabel,\n pageLabel: labels?.pageLabel ?? DEFAULT_TABLE_LABELS.pageLabel,\n resultCountLabel: labels?.resultCountLabel ?? DEFAULT_TABLE_LABELS.resultCountLabel,\n});\n\nexport const sanitizePageSizeOptions = (pageSizeOptions: number[] | undefined, pageSize: number): number[] => {\n const sourceOptions = (pageSizeOptions ?? DEFAULT_PAGE_SIZE_OPTIONS).filter((option) => {\n return Number.isFinite(option) && option > 0;\n });\n const nextOptions = sourceOptions.length > 0 ? sourceOptions : DEFAULT_PAGE_SIZE_OPTIONS;\n const normalizedPageSize = Number.isFinite(pageSize) && pageSize > 0 ? Math.floor(pageSize) : DEFAULT_PAGE_SIZE;\n\n return Array.from(new Set([...nextOptions, normalizedPageSize])).sort((left, right) => left - right);\n};\n\nexport const clampPage = (page: number, totalPages: number): number => {\n const normalizedTotal = Math.max(1, Math.floor(totalPages));\n const normalizedPage = Number.isFinite(page) ? Math.floor(page) : 1;\n\n return Math.min(Math.max(normalizedPage, 1), normalizedTotal);\n};\n\nexport const getColumnKey = <TItem>(column: TableColumn<TItem>, index: number): string => {\n if (column.id) {\n return column.id;\n }\n\n if (column.accessor) {\n return String(column.accessor);\n }\n\n return `column-${index}`;\n};\n\nexport const getRowId = <TItem>(\n item: TItem,\n index: number,\n getCustomRowId?: (item: TItem, index: number) => string,\n): string => {\n if (getCustomRowId) {\n return getCustomRowId(item, index);\n }\n\n const fallbackId = (item as { id?: unknown }).id;\n\n if (typeof fallbackId === 'string' || typeof fallbackId === 'number') {\n return String(fallbackId);\n }\n\n return `row-${index}`;\n};\n\nexport const resolveColumnContent = <TItem>(\n column: TableColumn<TItem>,\n item: TItem,\n index: number,\n): ReactNode => {\n if (column.Cell) {\n return column.Cell(item, index);\n }\n\n if (column.accessor) {\n return item[column.accessor] as ReactNode;\n }\n\n return null;\n};\n\nexport const resolveColumnSearchValue = <TItem>(\n column: TableColumn<TItem>,\n item: TItem,\n index: number,\n): string => {\n if (column.getSearchValue) {\n return column.getSearchValue(item, index);\n }\n\n if (column.accessor) {\n return normalizeTableText(item[column.accessor]);\n }\n\n return normalizeTableText(resolveColumnContent(column, item, index));\n};\n\nexport const resolveTableActions = <TItem>(\n actionsSource: TableActionSource<TItem> | undefined,\n item: TItem,\n index: number,\n): Array<TableAction<TItem>> => {\n if (!actionsSource) {\n return [];\n }\n\n const actions = typeof actionsSource === 'function' ? actionsSource(item, index) : actionsSource;\n\n return actions.filter((action) => !resolveActionFlag(action.hidden, item, index));\n};\n\nexport const isActionDisabled = <TItem>(action: TableAction<TItem>, item: TItem, index: number): boolean => {\n return resolveActionFlag(action.disabled, item, index);\n};\n\nexport const hasRenderableContent = (content: ReactNode): boolean => {\n if (content == null || typeof content === 'boolean') {\n return false;\n }\n\n if (typeof content === 'string') {\n return content.trim().length > 0;\n }\n\n if (typeof content === 'number') {\n return true;\n }\n\n if (Array.isArray(content)) {\n return content.some((entry) => hasRenderableContent(entry));\n }\n\n return true;\n};\n","import type { TableColumn } from './types';\nimport { normalizeTableText, resolveColumnContent } from './utils';\n\ntype TableDownloadMatrix = {\n headers: string[];\n rows: string[][];\n};\n\nconst escapeCsvValue = (value: string): string => {\n if (/[\",\\n;]/.test(value)) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n\n return value;\n};\n\nconst escapeHtml = (value: string): string => {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n};\n\nconst sanitizeFileName = (value: string): string => {\n return value\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '') || 'table';\n};\n\nconst normalizePdfText = (value: string): string => {\n return value\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\(/g, '\\\\(')\n .replace(/\\)/g, '\\\\)')\n .replace(/[^\\x20-\\x7E]/g, '?');\n};\n\nconst wrapPdfLine = (value: string, maxLength: number): string[] => {\n if (value.length <= maxLength) {\n return [value];\n }\n\n const words = value.split(' ');\n const lines: string[] = [];\n let currentLine = '';\n\n words.forEach((word) => {\n const nextLine = currentLine ? `${currentLine} ${word}` : word;\n\n if (nextLine.length <= maxLength) {\n currentLine = nextLine;\n return;\n }\n\n if (currentLine) {\n lines.push(currentLine);\n }\n\n currentLine = word;\n });\n\n if (currentLine) {\n lines.push(currentLine);\n }\n\n return lines;\n};\n\nconst downloadBlob = (blob: Blob, fileName: string) => {\n const objectUrl = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.href = objectUrl;\n link.download = fileName;\n link.rel = 'noopener';\n link.style.display = 'none';\n\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n window.setTimeout(() => {\n window.URL.revokeObjectURL(objectUrl);\n }, 0);\n};\n\nconst buildPdfDocument = (lines: string[]): string => {\n const pageWidth = 612;\n const pageHeight = 792;\n const marginX = 40;\n const marginTop = 752;\n const lineHeight = 14;\n const linesPerPage = 48;\n const pages: string[][] = [];\n\n for (let index = 0; index < lines.length; index += linesPerPage) {\n pages.push(lines.slice(index, index + linesPerPage));\n }\n\n const objects: string[] = [];\n const pageObjectNumbers: number[] = [];\n const contentObjectNumbers: number[] = [];\n const fontObjectNumber = 3;\n let nextObjectNumber = 4;\n\n pages.forEach(() => {\n pageObjectNumbers.push(nextObjectNumber);\n nextObjectNumber += 1;\n contentObjectNumbers.push(nextObjectNumber);\n nextObjectNumber += 1;\n });\n\n objects[1] = '<< /Type /Catalog /Pages 2 0 R >>';\n objects[2] = `<< /Type /Pages /Count ${pages.length} /Kids [${pageObjectNumbers.map((objectNumber) => `${objectNumber} 0 R`).join(' ')}] >>`;\n objects[fontObjectNumber] = '<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>';\n\n pages.forEach((pageLines, index) => {\n const content = `BT\\n/F1 10 Tf\\n${marginX} ${marginTop} Td\\n${lineHeight} TL\\n${pageLines.map((line, lineIndex) => {\n const normalizedLine = normalizePdfText(line);\n return `${lineIndex === 0 ? '' : 'T*\\n'}(${normalizedLine}) Tj`;\n }).join('\\n')}\\nET`;\n const contentObjectNumber = contentObjectNumbers[index];\n const pageObjectNumber = pageObjectNumbers[index];\n\n objects[contentObjectNumber] = `<< /Length ${content.length} >>\\nstream\\n${content}\\nendstream`;\n objects[pageObjectNumber] = `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${pageWidth} ${pageHeight}] /Resources << /Font << /F1 ${fontObjectNumber} 0 R >> >> /Contents ${contentObjectNumber} 0 R >>`;\n });\n\n let pdf = '%PDF-1.4\\n';\n const offsets: number[] = [0];\n\n for (let index = 1; index < objects.length; index += 1) {\n const objectBody = objects[index];\n\n if (!objectBody) {\n continue;\n }\n\n offsets[index] = pdf.length;\n pdf += `${index} 0 obj\\n${objectBody}\\nendobj\\n`;\n }\n\n const xrefStart = pdf.length;\n pdf += `xref\\n0 ${objects.length}\\n`;\n pdf += '0000000000 65535 f \\n';\n\n for (let index = 1; index < objects.length; index += 1) {\n pdf += `${String(offsets[index] ?? 0).padStart(10, '0')} 00000 n \\n`;\n }\n\n pdf += `trailer\\n<< /Size ${objects.length} /Root 1 0 R >>\\nstartxref\\n${xrefStart}\\n%%EOF`;\n\n return pdf;\n};\n\nexport const buildTableDownloadMatrix = <TItem>(\n columns: Array<TableColumn<TItem>>,\n items: Array<TItem>,\n): TableDownloadMatrix => {\n const exportableColumns = columns.filter((column) => {\n return column.type !== 'actions' && (column.accessor || column.Cell || column.label);\n });\n const headers = exportableColumns.map((column, index) => {\n const labelText = normalizeTableText(column.label).trim();\n\n if (labelText.length > 0) {\n return labelText;\n }\n\n if (column.accessor) {\n return String(column.accessor);\n }\n\n return `Column ${index + 1}`;\n });\n const rows = items.map((item, rowIndex) => {\n return exportableColumns.map((column) => {\n const searchValue = column.getSearchValue?.(item, rowIndex).trim();\n\n if (searchValue && searchValue.length > 0) {\n return searchValue;\n }\n\n const contentText = normalizeTableText(resolveColumnContent(column, item, rowIndex)).trim();\n\n if (contentText.length > 0) {\n return contentText;\n }\n\n if (column.accessor) {\n return normalizeTableText(item[column.accessor]).trim();\n }\n\n return '';\n });\n });\n\n return {\n headers,\n rows,\n };\n};\n\nexport const buildTableDownloadFileBaseName = (tableName: string, page: number): string => {\n return `${sanitizeFileName(tableName)}-page-${page}`;\n};\n\nexport const downloadTableAsCsv = (matrix: TableDownloadMatrix, fileBaseName: string) => {\n const lines = [\n matrix.headers.map((header) => escapeCsvValue(header)).join(','),\n ...matrix.rows.map((row) => row.map((value) => escapeCsvValue(value)).join(',')),\n ];\n const blob = new Blob([`\\uFEFF${lines.join('\\n')}`], { type: 'text/csv;charset=utf-8' });\n\n downloadBlob(blob, `${fileBaseName}.csv`);\n};\n\nexport const downloadTableAsXls = (matrix: TableDownloadMatrix, fileBaseName: string) => {\n const html = [\n '<html><head><meta charset=\"utf-8\" /></head><body><table border=\"1\">',\n '<thead><tr>',\n ...matrix.headers.map((header) => `<th>${escapeHtml(header)}</th>`),\n '</tr></thead><tbody>',\n ...matrix.rows.map((row) => {\n return `<tr>${row.map((value) => `<td>${escapeHtml(value)}</td>`).join('')}</tr>`;\n }),\n '</tbody></table></body></html>',\n ].join('');\n const blob = new Blob([html], { type: 'application/vnd.ms-excel;charset=utf-8' });\n\n downloadBlob(blob, `${fileBaseName}.xls`);\n};\n\nexport const downloadTableAsPdf = (\n matrix: TableDownloadMatrix,\n fileBaseName: string,\n title: string,\n page: number,\n totalPages: number,\n) => {\n const lines = [\n title,\n `Page ${page} of ${totalPages}`,\n `Rows in export: ${matrix.rows.length}`,\n '',\n ...wrapPdfLine(matrix.headers.join(' | '), 88),\n ...wrapPdfLine('-'.repeat(Math.min(88, Math.max(20, matrix.headers.join(' | ').length))), 88),\n ...matrix.rows.flatMap((row) => wrapPdfLine(row.join(' | '), 88)),\n ];\n const pdf = buildPdfDocument(lines);\n const blob = new Blob([pdf], { type: 'application/pdf' });\n\n downloadBlob(blob, `${fileBaseName}.pdf`);\n};","import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS } from '../foundation';\nimport { TableBase } from '../componentsBase/table/TableBase';\nimport type { SharedTableProps, TableAsyncLoadContext, TableAsyncLoadResult } from '../componentsBase/table/types';\nimport { DEFAULT_PAGE_SIZE, clampPage, sanitizePageSizeOptions } from '../componentsBase/table/utils';\n\nexport interface TableAsyncProps<TItem> extends SharedTableProps<TItem> {\n loadItems: (query: string, context: TableAsyncLoadContext) => Promise<TableAsyncLoadResult<TItem>>;\n cacheUniqs?: ReadonlyArray<unknown>;\n searchDebounceMs?: number;\n keepPreviousData?: boolean;\n}\n\nconst areUnknownArraysEqual = (left: ReadonlyArray<unknown>, right: ReadonlyArray<unknown>): boolean => {\n if (left.length !== right.length) {\n return false;\n }\n\n return left.every((entry, index) => Object.is(entry, right[index]));\n};\n\nexport function TableAsync<TItem>({\n loadItems,\n desktopColumns,\n mobileColumns,\n defaultSearchValue = '',\n defaultPage = 1,\n defaultPageSize = DEFAULT_PAGE_SIZE,\n pageSizeOptions,\n searchable = true,\n cacheUniqs = [],\n searchDebounceMs = DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS,\n keepPreviousData = true,\n onSearchValueChange,\n onPageChange,\n onPageSizeChange,\n ...props\n}: TableAsyncProps<TItem>) {\n const initialPageSizeOptions = useMemo(() => {\n return sanitizePageSizeOptions(pageSizeOptions, defaultPageSize);\n }, [defaultPageSize, pageSizeOptions]);\n const [searchValue, setSearchValue] = useState(defaultSearchValue);\n const [debouncedSearchValue, setDebouncedSearchValue] = useState(defaultSearchValue);\n const [page, setPage] = useState(Math.max(1, Math.floor(defaultPage)));\n const [pageSize, setPageSize] = useState(initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE);\n const [items, setItems] = useState<Array<TItem>>([]);\n const [totalPages, setTotalPages] = useState(1);\n const [totalItems, setTotalItems] = useState<number | undefined>(undefined);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [reloadKey, setReloadKey] = useState(0);\n const loadItemsRef = useRef(loadItems);\n const cacheUniqsRef = useRef(cacheUniqs);\n const activeControllerRef = useRef<AbortController | null>(null);\n const requestVersionRef = useRef(0);\n\n loadItemsRef.current = loadItems;\n\n useEffect(() => {\n if (initialPageSizeOptions.includes(pageSize)) {\n return;\n }\n\n const nextPageSize = initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE;\n setPageSize(nextPageSize);\n }, [initialPageSizeOptions, pageSize]);\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n setDebouncedSearchValue(searchValue);\n }, searchDebounceMs);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [searchDebounceMs, searchValue]);\n\n useEffect(() => {\n if (areUnknownArraysEqual(cacheUniqsRef.current, cacheUniqs)) {\n return;\n }\n\n cacheUniqsRef.current = cacheUniqs;\n setPage(1);\n setReloadKey((currentValue) => currentValue + 1);\n }, [cacheUniqs]);\n\n useEffect(() => {\n requestVersionRef.current += 1;\n const currentRequestVersion = requestVersionRef.current;\n const controller = new AbortController();\n\n activeControllerRef.current?.abort();\n activeControllerRef.current = controller;\n\n if (!keepPreviousData) {\n setItems([]);\n }\n\n setLoading(true);\n setError(null);\n\n void loadItemsRef.current(searchable ? debouncedSearchValue : '', {\n page,\n pageSize,\n signal: controller.signal,\n })\n .then((result) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setItems(result.items);\n setTotalPages(Math.max(1, result.totalPages));\n setTotalItems(result.totalItems);\n })\n .catch((loadError: unknown) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n if (loadError instanceof Error && loadError.name === 'AbortError') {\n return;\n }\n\n setError(loadError instanceof Error ? loadError.message : 'Could not load rows.');\n })\n .finally(() => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setLoading(false);\n });\n }, [debouncedSearchValue, keepPreviousData, page, pageSize, reloadKey, searchable, ...cacheUniqs]);\n\n useEffect(() => {\n return () => {\n activeControllerRef.current?.abort();\n };\n }, []);\n\n const normalizedPage = clampPage(page, totalPages);\n\n useEffect(() => {\n if (normalizedPage === page) {\n return;\n }\n\n setPage(normalizedPage);\n onPageChange?.(normalizedPage);\n }, [normalizedPage, onPageChange, page]);\n\n return (\n <TableBase\n {...props}\n desktopColumns={desktopColumns}\n mobileColumns={mobileColumns}\n searchable={searchable}\n pageSizeOptions={pageSizeOptions}\n items={items}\n loading={loading}\n error={error}\n onRetry={() => setReloadKey((currentValue) => currentValue + 1)}\n searchValue={searchValue}\n page={normalizedPage}\n pageSize={pageSize}\n totalPages={totalPages}\n totalItems={totalItems}\n onSearchChange={(nextValue) => {\n setSearchValue(nextValue);\n setPage(1);\n onSearchValueChange?.(nextValue);\n onPageChange?.(1);\n }}\n onInternalPageChange={(nextPage) => {\n const normalizedNextPage = clampPage(nextPage, totalPages);\n setPage(normalizedNextPage);\n onPageChange?.(normalizedNextPage);\n }}\n onInternalPageSizeChange={(nextPageSize) => {\n setPageSize(nextPageSize);\n setPage(1);\n onPageSizeChange?.(nextPageSize);\n onPageChange?.(1);\n }}\n />\n );\n}","'use client';\n\nimport type { ReactNode, TextareaHTMLAttributes } from 'react';\n\nimport {\n cx,\n DISABLED_FIELD_OPACITY,\n getControlMetrics,\n type ControlSize,\n} from '../foundation';\nimport { ControlFrame } from './Input';\n\nexport interface TextareaProps extends Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'dangerouslySetInnerHTML'\n> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n size?: ControlSize;\n}\n\nexport function Textarea({\n label,\n hint,\n error,\n size = 'md',\n id,\n disabled,\n style,\n rows = 5,\n placeholder,\n ...rest\n}: TextareaProps) {\n const floatingPlaceholder =\n placeholder !== undefined && placeholder !== '' ? placeholder : undefined;\n const resolvedPlaceholder = placeholder ?? ' ';\n\n const placeholderClass = floatingPlaceholder\n ? 'placeholder-transparent'\n : 'placeholder-[var(--theme-textLight)]';\n\n const isPopulated =\n rest.value !== undefined && rest.value !== '' && rest.value !== null;\n\n const textarea = (\n <textarea\n {...rest}\n id={id}\n disabled={disabled}\n rows={rows}\n placeholder={resolvedPlaceholder}\n className={cx(\n 'peer w-full min-w-0 box-border resize-y rounded-2xl border border-solid bg-[var(--theme-background)]',\n 'text-[var(--theme-text)] outline-none transition-[border-color]',\n 'duration-150 disabled:cursor-not-allowed',\n placeholderClass,\n error ? 'border-[var(--theme-negative)]' : 'border-transparent',\n )}\n style={{\n boxShadow: error ? '0 0 0 3px var(--theme-negative)' : 'none',\n fontSize: getControlMetrics(size).fontSize,\n lineHeight: getControlMetrics(size).lineHeight,\n padding: `${getControlMetrics(size).paddingY + 2}px ${getControlMetrics(size).paddingX}px ${getControlMetrics(size).paddingY + 6}px`,\n ...style,\n ...(disabled ? { opacity: DISABLED_FIELD_OPACITY } : {}),\n }}\n />\n );\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={error}\n htmlFor={id}\n required={rest.required}\n alignLabel=\"top\"\n size={size}\n hasValue={isPopulated}\n floatingPlaceholder={floatingPlaceholder}\n >\n {textarea}\n </ControlFrame>\n );\n}\n","import './styles/ui-kit.css';\n\nimport { injectUiKitFonts } from './styles/fonts';\n\ninjectUiKitFonts();\n\nexport { Button, type ButtonProps } from './components/Button';\nexport { Alert, type AlertProps, type AlertTone } from './components/Alert';\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 { IconButton, type IconButtonProps, type IconButtonSize, type IconButtonVariant } from './components/IconButton';\nexport { Loading, type LoadingProps, type LoadingSize } from './components/Loading';\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 ResultState,\n type ResultStateProps,\n type ResultStateTone,\n} from './components/ResultState';\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 TableRowClickHandler,\n} from './componentsBase/table/types';\nexport type { ControlSize } from './foundation';\nexport { Textarea, type TextareaProps } from './components/Textarea';\nexport { useUiKitTheme, type UiKitTheme } from './foundation';\n"],"mappings":"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","names":["lato_latin_ext_400_normal_default","lato_latin_400_normal_default","lato_latin_ext_700_normal_default","lato_latin_700_normal_default","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","useEffect","useId","jsx","jsxs","useId","useEffect","useMemo","useEffect","useMemo","useState","jsx","jsxs","useMemo","useState","useEffect","_a","jsx","jsxs","useMemo","useEffect","useId","useRef","useState","Fragment","jsx","jsxs","useId","useRef","useState","useEffect","jsx","jsx","jsx","jsxs","jsx","useEffect","useId","useRef","useState","isValidElement","Fragment","jsx","jsxs","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","useId","jsx","jsxs","useId","useEffect","useMemo","useState","useEffect","useId","useRef","useState","createPortal","isValidElement","Fragment","jsx","jsxs","useState","useRef","useEffect","jsxs","jsx","createPortal","useId","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/color.ts","../src/foundation/componentState.ts","../src/foundation/controlSize.ts","../src/foundation/theme.ts","../src/foundation/viewport.ts","../src/components/Button.tsx","../src/components/Alert.tsx","../src/components/feedbackPrimitives.tsx","../src/components/Card.tsx","../src/components/CardSmall.tsx","../src/components/Checkbox.tsx","../src/components/ComposableModal.tsx","../src/components/Modal.tsx","../src/components/Input.tsx","../src/components/DatePicker.tsx","../src/components/IconButton.tsx","../src/components/Loading.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/ResultState.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-modal-viewport {\\n --ui-kit-modal-viewport-height: 100vh;\\n}\\n@supports (height: 100dvh) {\\n .ui-kit-modal-viewport {\\n --ui-kit-modal-viewport-height: 100dvh;\\n }\\n}\\n:root {\\n --ui-kit-font-family:\\n \\\"Lato\\\",\\n system-ui,\\n sans-serif;\\n}\\n.ui-kit-root {\\n border-width: 0;\\n border-style: solid;\\n box-shadow: none;\\n font-family: var(--ui-kit-font-family);\\n line-height: 1.5;\\n -webkit-text-size-adjust: 100%;\\n -moz-tab-size: 4;\\n -o-tab-size: 4;\\n tab-size: 4;\\n -webkit-tap-highlight-color: transparent;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n.ui-kit-root:where(button, input, textarea, select),\\n.ui-kit-root :where(button, input, textarea, select, option) {\\n border-width: 0;\\n border-style: solid;\\n box-shadow: none;\\n font-family: var(--ui-kit-font-family);\\n}\\n.ui-kit-sr-only {\\n position: absolute;\\n height: 1px;\\n width: 1px;\\n overflow: hidden;\\n white-space: nowrap;\\n border-width: 0px;\\n padding: 0px;\\n clip: rect(0, 0, 0, 0);\\n margin: -1px;\\n}\\n.ui-kit-floating-placeholder {\\n color: var(--theme-textLight);\\n font-size: var(--floating-label-font-size);\\n font-weight: 400;\\n line-height: var(--floating-label-line-height);\\n top: var(--floating-label-resting-top);\\n transform: var(--floating-label-resting-transform);\\n}\\n.group:has(input:not(:-moz-placeholder)) > .ui-kit-floating-placeholder,\\n.group:has(textarea:not(:-moz-placeholder)) > .ui-kit-floating-placeholder {\\n color: var(--theme-text);\\n font-size: var(--floating-label-active-font-size);\\n font-weight: 500;\\n left: 12px !important;\\n line-height: var(--floating-label-active-line-height);\\n top: 0;\\n transform: translateY(-50%) scale(0.85);\\n}\\n.group:focus-within > .ui-kit-floating-placeholder,\\n.group:has(input:not(:placeholder-shown)) > .ui-kit-floating-placeholder,\\n.group:has(textarea:not(:placeholder-shown)) > .ui-kit-floating-placeholder,\\n.group:has([data-has-value=true]) > .ui-kit-floating-placeholder,\\n.ui-kit-floating-placeholder--active {\\n color: var(--theme-text);\\n font-size: var(--floating-label-active-font-size);\\n font-weight: 500;\\n left: 12px !important;\\n line-height: var(--floating-label-active-line-height);\\n top: 0;\\n transform: translateY(-50%) scale(0.85);\\n}\\n:where(.ui-kit-root),\\n:where(.ui-kit-root) :where(*),\\n:where(.ui-kit-root) :where(*)::before,\\n:where(.ui-kit-root) :where(*)::after {\\n box-sizing: border-box;\\n border-width: 0;\\n border-style: solid;\\n border-color: #e5e7eb;\\n}\\n:where(.ui-kit-root) :where(*)::before,\\n:where(.ui-kit-root) :where(*)::after {\\n --tw-content: \\\"\\\";\\n}\\n:where(.ui-kit-root) :where(hr) {\\n height: 0;\\n color: inherit;\\n border-top-width: 1px;\\n}\\n:where(.ui-kit-root) :where(abbr:where([title])) {\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n}\\n:where(.ui-kit-root) :where(h1, h2, h3, h4, h5, h6) {\\n font-size: inherit;\\n font-weight: inherit;\\n}\\n:where(.ui-kit-root) :where(a) {\\n color: inherit;\\n text-decoration: inherit;\\n}\\n:where(.ui-kit-root) :where(b, strong) {\\n font-weight: bolder;\\n}\\n:where(.ui-kit-root) :where(code, kbd, samp, pre) {\\n font-family:\\n ui-monospace,\\n SFMono-Regular,\\n Menlo,\\n Monaco,\\n Consolas,\\n \\\"Liberation Mono\\\",\\n \\\"Courier New\\\",\\n monospace;\\n font-size: 1em;\\n}\\n:where(.ui-kit-root) :where(small) {\\n font-size: 80%;\\n}\\n:where(.ui-kit-root) :where(sub, sup) {\\n font-size: 75%;\\n line-height: 0;\\n position: relative;\\n vertical-align: baseline;\\n}\\n:where(.ui-kit-root) :where(sub) {\\n bottom: -0.25em;\\n}\\n:where(.ui-kit-root) :where(sup) {\\n top: -0.5em;\\n}\\n:where(.ui-kit-root) :where(table) {\\n text-indent: 0;\\n border-color: inherit;\\n border-collapse: collapse;\\n}\\n:where(.ui-kit-root):where(button, input, optgroup, select, textarea),\\n:where(.ui-kit-root) :where(button, input, optgroup, select, textarea) {\\n font-family: inherit;\\n font-feature-settings: inherit;\\n font-variation-settings: inherit;\\n font-size: 100%;\\n font-weight: inherit;\\n line-height: inherit;\\n letter-spacing: inherit;\\n color: inherit;\\n margin: 0;\\n padding: 0;\\n}\\n:where(.ui-kit-root):where(button, select),\\n:where(.ui-kit-root) :where(button, select) {\\n text-transform: none;\\n}\\n:where(.ui-kit-root):where(button),\\n:where(.ui-kit-root) :where(button),\\n:where(.ui-kit-root) :where(input:where([type=button], [type=reset], [type=submit])) {\\n -webkit-appearance: button;\\n background-color: transparent;\\n background-image: none;\\n}\\n:where(.ui-kit-root) :where(progress) {\\n vertical-align: baseline;\\n}\\n:where(.ui-kit-root) :where(input)::-webkit-inner-spin-button,\\n:where(.ui-kit-root) :where(input)::-webkit-outer-spin-button {\\n height: auto;\\n}\\n:where(.ui-kit-root) :where([type=search]) {\\n -webkit-appearance: textfield;\\n outline-offset: -2px;\\n}\\n:where(.ui-kit-root) :where(input)::-webkit-search-decoration {\\n -webkit-appearance: none;\\n}\\n:where(.ui-kit-root) :where(summary) {\\n display: list-item;\\n}\\n:where(.ui-kit-root) :where(blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre) {\\n margin: 0;\\n}\\n:where(.ui-kit-root) :where(fieldset) {\\n margin: 0;\\n padding: 0;\\n}\\n:where(.ui-kit-root) :where(legend) {\\n padding: 0;\\n}\\n:where(.ui-kit-root) :where(ol, ul, menu) {\\n list-style: none;\\n margin: 0;\\n padding: 0;\\n}\\n:where(.ui-kit-root) :where(dialog) {\\n padding: 0;\\n}\\n:where(.ui-kit-root) :where(option) {\\n margin: 0;\\n padding: 0;\\n}\\n:where(.ui-kit-root) :where(textarea) {\\n resize: vertical;\\n}\\n:where(.ui-kit-root):where(input)::-moz-placeholder,\\n:where(.ui-kit-root):where(textarea)::-moz-placeholder,\\n:where(.ui-kit-root) :where(input)::-moz-placeholder,\\n:where(.ui-kit-root) :where(textarea)::-moz-placeholder {\\n opacity: 1;\\n color: #9ca3af;\\n}\\n:where(.ui-kit-root):where(input)::placeholder,\\n:where(.ui-kit-root):where(textarea)::placeholder,\\n:where(.ui-kit-root) :where(input)::placeholder,\\n:where(.ui-kit-root) :where(textarea)::placeholder {\\n opacity: 1;\\n color: #9ca3af;\\n}\\n:where(.ui-kit-root):where(button, [role=button]),\\n:where(.ui-kit-root) :where(button, [role=button]) {\\n cursor: pointer;\\n}\\n:where(.ui-kit-root):where(:disabled),\\n:where(.ui-kit-root) :where(:disabled) {\\n cursor: default;\\n}\\n:where(.ui-kit-root) :where(img, svg, video, canvas, audio, iframe, embed, object) {\\n display: block;\\n vertical-align: middle;\\n}\\n:where(.ui-kit-root) :where(img, video) {\\n max-width: 100%;\\n height: auto;\\n}\\n:where(.ui-kit-root) :where([hidden]) {\\n display: none;\\n}\\n.pointer-events-none {\\n pointer-events: none;\\n}\\n.pointer-events-auto {\\n pointer-events: auto;\\n}\\n.visible {\\n visibility: visible;\\n}\\n.fixed {\\n position: fixed;\\n}\\n.absolute {\\n position: absolute;\\n}\\n.relative {\\n position: relative;\\n}\\n.sticky {\\n position: sticky;\\n}\\n.inset-0 {\\n inset: 0px;\\n}\\n.inset-y-0 {\\n top: 0px;\\n bottom: 0px;\\n}\\n.left-0 {\\n left: 0px;\\n}\\n.left-\\\\[var\\\\(--label-left-base\\\\,12px\\\\)\\\\] {\\n left: var(--label-left-base,12px);\\n}\\n.top-1\\\\/2 {\\n top: 50%;\\n}\\n.z-50 {\\n z-index: 50;\\n}\\n.z-\\\\[70\\\\] {\\n z-index: 70;\\n}\\n.z-\\\\[99999\\\\] {\\n z-index: 99999;\\n}\\n.col-span-1 {\\n grid-column: span 1 / span 1;\\n}\\n.col-span-2 {\\n grid-column: span 2 / span 2;\\n}\\n.m-0 {\\n margin: 0px;\\n}\\n.-mt-2 {\\n margin-top: -0.5rem;\\n}\\n.mb-\\\\[18px\\\\] {\\n margin-bottom: 18px;\\n}\\n.ml-1 {\\n margin-left: 0.25rem;\\n}\\n.ml-4 {\\n margin-left: 1rem;\\n}\\n.ml-auto {\\n margin-left: auto;\\n}\\n.mt-0 {\\n margin-top: 0px;\\n}\\n.mt-1 {\\n margin-top: 0.25rem;\\n}\\n.mt-px {\\n margin-top: 1px;\\n}\\n.box-border {\\n box-sizing: border-box;\\n}\\n.block {\\n display: block;\\n}\\n.inline {\\n display: inline;\\n}\\n.flex {\\n display: flex;\\n}\\n.inline-flex {\\n display: inline-flex;\\n}\\n.table {\\n display: table;\\n}\\n.grid {\\n display: grid;\\n}\\n.hidden {\\n display: none;\\n}\\n.h-14 {\\n height: 3.5rem;\\n}\\n.h-2 {\\n height: 0.5rem;\\n}\\n.h-5 {\\n height: 1.25rem;\\n}\\n.h-\\\\[30px\\\\] {\\n height: 30px;\\n}\\n.h-\\\\[34px\\\\] {\\n height: 34px;\\n}\\n.h-\\\\[52px\\\\] {\\n height: 52px;\\n}\\n.h-full {\\n height: 100%;\\n}\\n.max-h-\\\\[280px\\\\] {\\n max-height: 280px;\\n}\\n.min-h-0 {\\n min-height: 0px;\\n}\\n.min-h-20 {\\n min-height: 5rem;\\n}\\n.min-h-\\\\[220px\\\\] {\\n min-height: 220px;\\n}\\n.w-14 {\\n width: 3.5rem;\\n}\\n.w-2 {\\n width: 0.5rem;\\n}\\n.w-5 {\\n width: 1.25rem;\\n}\\n.w-\\\\[25px\\\\] {\\n width: 25px;\\n}\\n.w-\\\\[30px\\\\] {\\n width: 30px;\\n}\\n.w-\\\\[52px\\\\] {\\n width: 52px;\\n}\\n.w-\\\\[72px\\\\] {\\n width: 72px;\\n}\\n.w-auto {\\n width: auto;\\n}\\n.w-fit {\\n width: -moz-fit-content;\\n width: fit-content;\\n}\\n.w-full {\\n width: 100%;\\n}\\n.w-max {\\n width: -moz-max-content;\\n width: max-content;\\n}\\n.min-w-0 {\\n min-width: 0px;\\n}\\n.min-w-full {\\n min-width: 100%;\\n}\\n.min-w-max {\\n min-width: -moz-max-content;\\n min-width: max-content;\\n}\\n.max-w-\\\\[360px\\\\] {\\n max-width: 360px;\\n}\\n.max-w-\\\\[calc\\\\(100\\\\%-24px\\\\)\\\\] {\\n max-width: calc(100% - 24px);\\n}\\n.max-w-fit {\\n max-width: -moz-fit-content;\\n max-width: fit-content;\\n}\\n.max-w-full {\\n max-width: 100%;\\n}\\n.max-w-none {\\n max-width: none;\\n}\\n.flex-1 {\\n flex: 1 1 0%;\\n}\\n.flex-\\\\[0_1_45\\\\%\\\\] {\\n flex: 0 1 45%;\\n}\\n.flex-\\\\[1_1_260px\\\\] {\\n flex: 1 1 260px;\\n}\\n.flex-none {\\n flex: none;\\n}\\n.shrink-0 {\\n flex-shrink: 0;\\n}\\n.border-separate {\\n border-collapse: separate;\\n}\\n.border-spacing-0 {\\n --tw-border-spacing-x: 0px;\\n --tw-border-spacing-y: 0px;\\n border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);\\n}\\n.origin-\\\\[left_center\\\\] {\\n transform-origin: left center;\\n}\\n.transform {\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.cursor-not-allowed {\\n cursor: not-allowed;\\n}\\n.cursor-pointer {\\n cursor: pointer;\\n}\\n.cursor-text {\\n cursor: text;\\n}\\n.select-none {\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n.resize-y {\\n resize: vertical;\\n}\\n.resize {\\n resize: both;\\n}\\n.appearance-none {\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n}\\n.grid-cols-4 {\\n grid-template-columns: repeat(4, minmax(0, 1fr));\\n}\\n.grid-cols-\\\\[7rem_minmax\\\\(0\\\\,1fr\\\\)\\\\] {\\n grid-template-columns: 7rem minmax(0, 1fr);\\n}\\n.grid-cols-\\\\[minmax\\\\(0\\\\,1fr\\\\)\\\\] {\\n grid-template-columns: minmax(0, 1fr);\\n}\\n.grid-cols-\\\\[repeat\\\\(2\\\\,minmax\\\\(0\\\\,1fr\\\\)\\\\)\\\\] {\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n}\\n.flex-col {\\n flex-direction: column;\\n}\\n.flex-wrap {\\n flex-wrap: wrap;\\n}\\n.flex-nowrap {\\n flex-wrap: nowrap;\\n}\\n.items-start {\\n align-items: flex-start;\\n}\\n.items-center {\\n align-items: center;\\n}\\n.justify-start {\\n justify-content: flex-start;\\n}\\n.justify-end {\\n justify-content: flex-end;\\n}\\n.justify-center {\\n justify-content: center;\\n}\\n.justify-between {\\n justify-content: space-between;\\n}\\n.gap-0 {\\n gap: 0px;\\n}\\n.gap-1 {\\n gap: 0.25rem;\\n}\\n.gap-1\\\\.5 {\\n gap: 0.375rem;\\n}\\n.gap-2 {\\n gap: 0.5rem;\\n}\\n.gap-2\\\\.5 {\\n gap: 0.625rem;\\n}\\n.gap-3 {\\n gap: 0.75rem;\\n}\\n.gap-3\\\\.5 {\\n gap: 0.875rem;\\n}\\n.gap-4 {\\n gap: 1rem;\\n}\\n.self-stretch {\\n align-self: stretch;\\n}\\n.overflow-auto {\\n overflow: auto;\\n}\\n.overflow-hidden {\\n overflow: hidden;\\n}\\n.overflow-x-auto {\\n overflow-x: auto;\\n}\\n.overflow-y-auto {\\n overflow-y: auto;\\n}\\n.overflow-x-hidden {\\n overflow-x: hidden;\\n}\\n.overflow-y-hidden {\\n overflow-y: hidden;\\n}\\n.truncate {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.text-ellipsis {\\n text-overflow: ellipsis;\\n}\\n.whitespace-nowrap {\\n white-space: nowrap;\\n}\\n.break-words {\\n overflow-wrap: break-word;\\n}\\n.rounded-2xl {\\n border-radius: 1rem;\\n}\\n.rounded-\\\\[20px\\\\] {\\n border-radius: 20px;\\n}\\n.rounded-\\\\[24px\\\\] {\\n border-radius: 24px;\\n}\\n.rounded-\\\\[28px\\\\] {\\n border-radius: 28px;\\n}\\n.rounded-\\\\[30px\\\\] {\\n border-radius: 30px;\\n}\\n.rounded-\\\\[var\\\\(--ui-radius\\\\,12px\\\\)\\\\] {\\n border-radius: var(--ui-radius,12px);\\n}\\n.rounded-full {\\n border-radius: 9999px;\\n}\\n.rounded-none {\\n border-radius: 0px;\\n}\\n.rounded-xl {\\n border-radius: 0.75rem;\\n}\\n.rounded-tl-\\\\[16px\\\\] {\\n border-top-left-radius: 16px;\\n}\\n.rounded-tr-\\\\[16px\\\\] {\\n border-top-right-radius: 16px;\\n}\\n.border {\\n border-width: 1px;\\n}\\n.border-0 {\\n border-width: 0px;\\n}\\n.border-2 {\\n border-width: 2px;\\n}\\n.border-\\\\[3px\\\\] {\\n border-width: 3px;\\n}\\n.border-b {\\n border-bottom-width: 1px;\\n}\\n.border-solid {\\n border-style: solid;\\n}\\n.border-dashed {\\n border-style: dashed;\\n}\\n.border-\\\\[var\\\\(--theme-background\\\\)\\\\] {\\n border-color: var(--theme-background);\\n}\\n.border-\\\\[var\\\\(--theme-negative\\\\)\\\\] {\\n border-color: var(--theme-negative);\\n}\\n.border-\\\\[var\\\\(--theme-primary\\\\)\\\\] {\\n border-color: var(--theme-primary);\\n}\\n.border-\\\\[var\\\\(--theme-textLight\\\\)\\\\] {\\n border-color: var(--theme-textLight);\\n}\\n.border-transparent {\\n border-color: transparent;\\n}\\n.bg-\\\\[color-mix\\\\(in_srgb\\\\,var\\\\(--ui-kit-accent\\\\)_24\\\\%\\\\,transparent\\\\)\\\\] {\\n background-color: color-mix(in srgb, var(--ui-kit-accent) 24%, transparent);\\n}\\n.bg-\\\\[var\\\\(--theme-background\\\\)\\\\] {\\n background-color: var(--theme-background);\\n}\\n.bg-\\\\[var\\\\(--theme-primary\\\\)\\\\] {\\n background-color: var(--theme-primary);\\n}\\n.bg-\\\\[var\\\\(--theme-surface\\\\)\\\\] {\\n background-color: var(--theme-surface);\\n}\\n.bg-\\\\[var\\\\(--ui-kit-accent\\\\)\\\\] {\\n background-color: var(--ui-kit-accent);\\n}\\n.bg-transparent {\\n background-color: transparent;\\n}\\n.p-0 {\\n padding: 0px;\\n}\\n.p-0\\\\.5 {\\n padding: 0.125rem;\\n}\\n.p-2 {\\n padding: 0.5rem;\\n}\\n.p-2\\\\.5 {\\n padding: 0.625rem;\\n}\\n.p-4 {\\n padding: 1rem;\\n}\\n.p-6 {\\n padding: 1.5rem;\\n}\\n.px-1 {\\n padding-left: 0.25rem;\\n padding-right: 0.25rem;\\n}\\n.px-1\\\\.5 {\\n padding-left: 0.375rem;\\n padding-right: 0.375rem;\\n}\\n.px-2 {\\n padding-left: 0.5rem;\\n padding-right: 0.5rem;\\n}\\n.px-2\\\\.5 {\\n padding-left: 0.625rem;\\n padding-right: 0.625rem;\\n}\\n.px-3 {\\n padding-left: 0.75rem;\\n padding-right: 0.75rem;\\n}\\n.px-3\\\\.5 {\\n padding-left: 0.875rem;\\n padding-right: 0.875rem;\\n}\\n.px-5 {\\n padding-left: 1.25rem;\\n padding-right: 1.25rem;\\n}\\n.px-\\\\[11px\\\\] {\\n padding-left: 11px;\\n padding-right: 11px;\\n}\\n.px-\\\\[13px\\\\] {\\n padding-left: 13px;\\n padding-right: 13px;\\n}\\n.py-0\\\\.5 {\\n padding-top: 0.125rem;\\n padding-bottom: 0.125rem;\\n}\\n.py-1 {\\n padding-top: 0.25rem;\\n padding-bottom: 0.25rem;\\n}\\n.py-2 {\\n padding-top: 0.5rem;\\n padding-bottom: 0.5rem;\\n}\\n.py-2\\\\.5 {\\n padding-top: 0.625rem;\\n padding-bottom: 0.625rem;\\n}\\n.py-3 {\\n padding-top: 0.75rem;\\n padding-bottom: 0.75rem;\\n}\\n.py-\\\\[10px\\\\] {\\n padding-top: 10px;\\n padding-bottom: 10px;\\n}\\n.py-\\\\[14px\\\\] {\\n padding-top: 14px;\\n padding-bottom: 14px;\\n}\\n.py-\\\\[18px\\\\] {\\n padding-top: 18px;\\n padding-bottom: 18px;\\n}\\n.py-\\\\[9px\\\\] {\\n padding-top: 9px;\\n padding-bottom: 9px;\\n}\\n.pb-0\\\\.5 {\\n padding-bottom: 0.125rem;\\n}\\n.pb-1 {\\n padding-bottom: 0.25rem;\\n}\\n.pb-3 {\\n padding-bottom: 0.75rem;\\n}\\n.pb-4 {\\n padding-bottom: 1rem;\\n}\\n.pb-\\\\[10px\\\\] {\\n padding-bottom: 10px;\\n}\\n.pl-5 {\\n padding-left: 1.25rem;\\n}\\n.pl-6 {\\n padding-left: 1.5rem;\\n}\\n.pr-6 {\\n padding-right: 1.5rem;\\n}\\n.pt-1 {\\n padding-top: 0.25rem;\\n}\\n.pt-1\\\\.5 {\\n padding-top: 0.375rem;\\n}\\n.pt-2\\\\.5 {\\n padding-top: 0.625rem;\\n}\\n.pt-3 {\\n padding-top: 0.75rem;\\n}\\n.pt-\\\\[18px\\\\] {\\n padding-top: 18px;\\n}\\n.text-left {\\n text-align: left;\\n}\\n.text-center {\\n text-align: center;\\n}\\n.text-right {\\n text-align: right;\\n}\\n.align-middle {\\n vertical-align: middle;\\n}\\n.font-sans {\\n font-family:\\n ui-sans-serif,\\n system-ui,\\n sans-serif,\\n \\\"Apple Color Emoji\\\",\\n \\\"Segoe UI Emoji\\\",\\n \\\"Segoe UI Symbol\\\",\\n \\\"Noto Color Emoji\\\";\\n}\\n.text-2xl {\\n font-size: 1.5rem;\\n line-height: 2rem;\\n}\\n.text-\\\\[11px\\\\] {\\n font-size: 11px;\\n}\\n.text-\\\\[12px\\\\] {\\n font-size: 12px;\\n}\\n.text-\\\\[13px\\\\] {\\n font-size: 13px;\\n}\\n.text-\\\\[15px\\\\] {\\n font-size: 15px;\\n}\\n.text-\\\\[18px\\\\] {\\n font-size: 18px;\\n}\\n.text-\\\\[24px\\\\] {\\n font-size: 24px;\\n}\\n.text-base {\\n font-size: 1rem;\\n line-height: 1.5rem;\\n}\\n.text-sm {\\n font-size: 0.875rem;\\n line-height: 1.25rem;\\n}\\n.text-xs {\\n font-size: 0.75rem;\\n line-height: 1rem;\\n}\\n.font-bold {\\n font-weight: 700;\\n}\\n.font-extrabold {\\n font-weight: 800;\\n}\\n.font-medium {\\n font-weight: 500;\\n}\\n.font-normal {\\n font-weight: 400;\\n}\\n.font-semibold {\\n font-weight: 600;\\n}\\n.uppercase {\\n text-transform: uppercase;\\n}\\n.leading-4 {\\n line-height: 1rem;\\n}\\n.leading-5 {\\n line-height: 1.25rem;\\n}\\n.leading-\\\\[1\\\\.15\\\\] {\\n line-height: 1.15;\\n}\\n.leading-\\\\[1\\\\.1\\\\] {\\n line-height: 1.1;\\n}\\n.leading-\\\\[1\\\\.25\\\\] {\\n line-height: 1.25;\\n}\\n.leading-\\\\[1\\\\.2\\\\] {\\n line-height: 1.2;\\n}\\n.leading-\\\\[1\\\\.35\\\\] {\\n line-height: 1.35;\\n}\\n.leading-\\\\[1\\\\.3\\\\] {\\n line-height: 1.3;\\n}\\n.leading-\\\\[1\\\\.45\\\\] {\\n line-height: 1.45;\\n}\\n.leading-\\\\[1\\\\.4\\\\] {\\n line-height: 1.4;\\n}\\n.leading-\\\\[18px\\\\] {\\n line-height: 18px;\\n}\\n.tracking-\\\\[0\\\\.01em\\\\] {\\n letter-spacing: 0.01em;\\n}\\n.tracking-\\\\[0\\\\.08em\\\\] {\\n letter-spacing: 0.08em;\\n}\\n.tracking-\\\\[0\\\\.16em\\\\] {\\n letter-spacing: 0.16em;\\n}\\n.text-\\\\[var\\\\(--theme-negative\\\\)\\\\] {\\n color: var(--theme-negative);\\n}\\n.text-\\\\[var\\\\(--theme-onPrimary\\\\)\\\\] {\\n color: var(--theme-onPrimary);\\n}\\n.text-\\\\[var\\\\(--theme-primary\\\\)\\\\] {\\n color: var(--theme-primary);\\n}\\n.text-\\\\[var\\\\(--theme-secondary\\\\)\\\\] {\\n color: var(--theme-secondary);\\n}\\n.text-\\\\[var\\\\(--theme-text\\\\)\\\\] {\\n color: var(--theme-text);\\n}\\n.text-\\\\[var\\\\(--theme-textLight\\\\)\\\\] {\\n color: var(--theme-textLight);\\n}\\n.text-\\\\[var\\\\(--ui-kit-accent\\\\)\\\\] {\\n color: var(--ui-kit-accent);\\n}\\n.text-transparent {\\n color: transparent;\\n}\\n.placeholder-\\\\[var\\\\(--theme-textLight\\\\)\\\\]::-moz-placeholder {\\n color: var(--theme-textLight);\\n}\\n.placeholder-\\\\[var\\\\(--theme-textLight\\\\)\\\\]::placeholder {\\n color: var(--theme-textLight);\\n}\\n.placeholder-transparent::-moz-placeholder {\\n color: transparent;\\n}\\n.placeholder-transparent::placeholder {\\n color: transparent;\\n}\\n.opacity-0 {\\n opacity: 0;\\n}\\n.opacity-100 {\\n opacity: 1;\\n}\\n.opacity-45 {\\n opacity: 0.45;\\n}\\n.opacity-70 {\\n opacity: 0.7;\\n}\\n.opacity-80 {\\n opacity: 0.8;\\n}\\n.opacity-\\\\[0\\\\.38\\\\] {\\n opacity: 0.38;\\n}\\n.shadow {\\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.shadow-none {\\n --tw-shadow: 0 0 #0000;\\n --tw-shadow-colored: 0 0 #0000;\\n box-shadow:\\n var(--tw-ring-offset-shadow, 0 0 #0000),\\n var(--tw-ring-shadow, 0 0 #0000),\\n var(--tw-shadow);\\n}\\n.outline-none {\\n outline: 2px solid transparent;\\n outline-offset: 2px;\\n}\\n.outline {\\n outline-style: solid;\\n}\\n.blur {\\n --tw-blur: blur(8px);\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.saturate-100 {\\n --tw-saturate: saturate(1);\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.saturate-\\\\[0\\\\.8\\\\] {\\n --tw-saturate: saturate(0.8);\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.filter {\\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\\n}\\n.backdrop-blur-\\\\[2px\\\\] {\\n --tw-backdrop-blur: blur(2px);\\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n}\\n.backdrop-blur-\\\\[8px\\\\] {\\n --tw-backdrop-blur: blur(8px);\\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\\n}\\n.transition {\\n transition-property:\\n color,\\n background-color,\\n border-color,\\n text-decoration-color,\\n fill,\\n stroke,\\n opacity,\\n box-shadow,\\n transform,\\n filter,\\n backdrop-filter;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[background-color\\\\,color\\\\] {\\n transition-property: background-color, color;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[border-color\\\\] {\\n transition-property: border-color;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[opacity\\\\,filter\\\\] {\\n transition-property: opacity, filter;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-\\\\[transform\\\\,color\\\\] {\\n transition-property: transform, color;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-all {\\n transition-property: all;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-colors {\\n transition-property:\\n color,\\n background-color,\\n border-color,\\n text-decoration-color,\\n fill,\\n stroke;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.transition-opacity {\\n transition-property: opacity;\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n transition-duration: 150ms;\\n}\\n.duration-150 {\\n transition-duration: 150ms;\\n}\\n.duration-300 {\\n transition-duration: 300ms;\\n}\\n.ease-in-out {\\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n}\\n.\\\\[overflow-wrap\\\\:anywhere\\\\] {\\n overflow-wrap: anywhere;\\n}\\n.hover\\\\:border-\\\\[var\\\\(--theme-primaryDark\\\\)\\\\]:hover {\\n border-color: var(--theme-primaryDark);\\n}\\n.hover\\\\:border-\\\\[var\\\\(--theme-primaryLight\\\\)\\\\]:hover {\\n border-color: var(--theme-primaryLight);\\n}\\n.hover\\\\:bg-\\\\[var\\\\(--theme-background\\\\)\\\\]:hover {\\n background-color: var(--theme-background);\\n}\\n.hover\\\\:bg-\\\\[var\\\\(--theme-primaryLight\\\\)\\\\]:hover {\\n background-color: var(--theme-primaryLight);\\n}\\n.hover\\\\:text-\\\\[var\\\\(--theme-negative\\\\)\\\\]:hover {\\n color: var(--theme-negative);\\n}\\n.hover\\\\:text-\\\\[var\\\\(--theme-onPrimary\\\\)\\\\]:hover {\\n color: var(--theme-onPrimary);\\n}\\n.hover\\\\:text-\\\\[var\\\\(--theme-primary\\\\)\\\\]:hover {\\n color: var(--theme-primary);\\n}\\n.hover\\\\:underline:hover {\\n text-decoration-line: underline;\\n}\\n.hover\\\\:no-underline:hover {\\n text-decoration-line: none;\\n}\\n.focus-visible\\\\:outline:focus-visible {\\n outline-style: solid;\\n}\\n.focus-visible\\\\:outline-2:focus-visible {\\n outline-width: 2px;\\n}\\n.focus-visible\\\\:outline-offset-2:focus-visible {\\n outline-offset: 2px;\\n}\\n.focus-visible\\\\:outline-\\\\[var\\\\(--theme-primary\\\\)\\\\]:focus-visible {\\n outline-color: var(--theme-primary);\\n}\\n.active\\\\:border-\\\\[var\\\\(--theme-negative\\\\)\\\\]:active {\\n border-color: var(--theme-negative);\\n}\\n.active\\\\:border-\\\\[var\\\\(--theme-primary\\\\)\\\\]:active {\\n border-color: var(--theme-primary);\\n}\\n.active\\\\:border-transparent:active {\\n border-color: transparent;\\n}\\n.active\\\\:bg-\\\\[var\\\\(--theme-background\\\\)\\\\]:active {\\n background-color: var(--theme-background);\\n}\\n.active\\\\:bg-\\\\[var\\\\(--theme-negative\\\\)\\\\]:active {\\n background-color: var(--theme-negative);\\n}\\n.active\\\\:bg-\\\\[var\\\\(--theme-primaryDark\\\\)\\\\]:active {\\n background-color: var(--theme-primaryDark);\\n}\\n.active\\\\:text-\\\\[var\\\\(--theme-onPrimary\\\\)\\\\]:active {\\n color: var(--theme-onPrimary);\\n}\\n.disabled\\\\:translate-y-0:disabled {\\n --tw-translate-y: 0px;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.disabled\\\\:scale-100:disabled {\\n --tw-scale-x: 1;\\n --tw-scale-y: 1;\\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\\n}\\n.disabled\\\\:cursor-not-allowed:disabled {\\n cursor: not-allowed;\\n}\\n.disabled\\\\:opacity-50:disabled {\\n opacity: 0.5;\\n}\\n.group:has(:disabled) .group-has-\\\\[\\\\:disabled\\\\]\\\\:opacity-70 {\\n opacity: 0.7;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:absolute::-webkit-calendar-picker-indicator {\\n position: absolute;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:left-0::-webkit-calendar-picker-indicator {\\n left: 0px;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:top-0::-webkit-calendar-picker-indicator {\\n top: 0px;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:h-full::-webkit-calendar-picker-indicator {\\n height: 100%;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:w-full::-webkit-calendar-picker-indicator {\\n width: 100%;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:cursor-pointer::-webkit-calendar-picker-indicator {\\n cursor: pointer;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-calendar-picker-indicator\\\\]\\\\:opacity-0::-webkit-calendar-picker-indicator {\\n opacity: 0;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-datetime-edit\\\\]\\\\:flex::-webkit-datetime-edit {\\n display: flex;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-datetime-edit\\\\]\\\\:h-full::-webkit-datetime-edit {\\n height: 100%;\\n}\\n.\\\\[\\\\&\\\\:\\\\:-webkit-datetime-edit\\\\]\\\\:items-center::-webkit-datetime-edit {\\n align-items: center;\\n}\\n\")","import latoLatin400NormalWoff from '@fontsource/lato/files/lato-latin-400-normal.woff';\nimport latoLatin400NormalWoff2 from '@fontsource/lato/files/lato-latin-400-normal.woff2';\nimport latoLatin700NormalWoff from '@fontsource/lato/files/lato-latin-700-normal.woff';\nimport latoLatin700NormalWoff2 from '@fontsource/lato/files/lato-latin-700-normal.woff2';\nimport latoLatinExt400NormalWoff from '@fontsource/lato/files/lato-latin-ext-400-normal.woff';\nimport latoLatinExt400NormalWoff2 from '@fontsource/lato/files/lato-latin-ext-400-normal.woff2';\nimport latoLatinExt700NormalWoff from '@fontsource/lato/files/lato-latin-ext-700-normal.woff';\nimport latoLatinExt700NormalWoff2 from '@fontsource/lato/files/lato-latin-ext-700-normal.woff2';\n\nconst UI_KIT_FONT_STYLE_ID = 'smartsell-ui-kit-fonts';\n\nconst uiKitFontFacesCss = `\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(${JSON.stringify(latoLatinExt400NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatinExt400NormalWoff)}) format(\"woff\");\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(${JSON.stringify(latoLatin400NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatin400NormalWoff)}) format(\"woff\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url(${JSON.stringify(latoLatinExt700NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatinExt700NormalWoff)}) format(\"woff\");\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n\n@font-face {\n font-family: \"Lato\";\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url(${JSON.stringify(latoLatin700NormalWoff2)}) format(\"woff2\"), url(${JSON.stringify(latoLatin700NormalWoff)}) format(\"woff\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n`;\n\nexport function injectUiKitFonts(): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n if (document.getElementById(UI_KIT_FONT_STYLE_ID)) {\n return;\n }\n\n const styleElement = document.createElement('style');\n styleElement.id = UI_KIT_FONT_STYLE_ID;\n styleElement.textContent = uiKitFontFacesCss;\n document.head.appendChild(styleElement);\n}","export const DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS = 1500;","export const cx = (...values: Array<string | false | null | undefined>): string => {\n return values.filter(Boolean).join(' ');\n};\n\nexport const UI_KIT_ROOT_CLASSNAME = 'ui-kit-root';","export function withAlpha(hex: string, alpha: number): string {\n const normalized = hex.replace('#', '').trim();\n const value = normalized.length === 3\n ? normalized.split('').map((char) => char + char).join('')\n : normalized;\n\n const red = Number.parseInt(value.slice(0, 2), 16);\n const green = Number.parseInt(value.slice(2, 4), 16);\n const blue = Number.parseInt(value.slice(4, 6), 16);\n\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n}","export const DISABLED_COMPONENT_OPACITY = 0.5;\nexport const DISABLED_FIELD_OPACITY = 0.7;","import type { CSSProperties } from 'react';\n\nexport type ControlSize = 'sm' | 'md' | 'lg';\n\nexport const CONTROL_LEADING_ICON_SHIFT = 5;\nexport const CONTROL_TEXT_VERTICAL_SHIFT = 1;\nconst SELECT_TEXT_VERTICAL_SHIFT_REDUCTION = 1;\n\ntype ControlMetrics = {\n height: number;\n fontSize: number;\n lineHeight: string;\n paddingX: number;\n paddingY: number;\n buttonPaddingX: number;\n selectPaddingRight: number;\n selectIndicatorOffset: number;\n};\n\ntype TextInputPaddingOptions = {\n leadingPadding?: number;\n trailingPadding?: number;\n topPadding?: number;\n bottomPadding?: number;\n};\n\nconst getControlTextVerticalPadding = (size: ControlSize, shift = CONTROL_TEXT_VERTICAL_SHIFT): { top: number; bottom: number } => {\n const metrics = getControlMetrics(size);\n\n return {\n top: Math.max(0, metrics.paddingY - shift),\n bottom: metrics.paddingY + shift,\n };\n};\n\nconst getSelectTextVerticalShift = (): number => Math.max(0, CONTROL_TEXT_VERTICAL_SHIFT - SELECT_TEXT_VERTICAL_SHIFT_REDUCTION);\n\nconst CONTROL_METRICS_BY_SIZE: Record<ControlSize, ControlMetrics> = {\n sm: {\n height: 34,\n fontSize: 13,\n lineHeight: '16px',\n paddingX: 12,\n paddingY: 6,\n buttonPaddingX: 14,\n selectPaddingRight: 40,\n selectIndicatorOffset: 12,\n },\n md: {\n height: 42,\n fontSize: 14,\n lineHeight: '18px',\n paddingX: 14,\n paddingY: 7,\n buttonPaddingX: 16,\n selectPaddingRight: 42,\n selectIndicatorOffset: 14,\n },\n lg: {\n height: 48,\n fontSize: 15,\n lineHeight: '18px',\n paddingX: 16,\n paddingY: 9,\n buttonPaddingX: 18,\n selectPaddingRight: 46,\n selectIndicatorOffset: 16,\n },\n};\n\nexport const getControlMetrics = (size: ControlSize): ControlMetrics => CONTROL_METRICS_BY_SIZE[size];\n\nexport const getControlLeadingIconInset = (size: ControlSize): number => {\n const metrics = getControlMetrics(size);\n return Math.round(metrics.paddingX / 2) + CONTROL_LEADING_ICON_SHIFT;\n};\n\nexport const getControlLeadingAdornmentWidth = (size: ControlSize, iconSize: number): number => {\n return getControlLeadingIconInset(size) + iconSize;\n};\n\nexport const getTextInputPadding = (size: ControlSize, options: TextInputPaddingOptions = {}): string => {\n const metrics = getControlMetrics(size);\n const { top, bottom } = getControlTextVerticalPadding(size);\n const leadingPadding = options.leadingPadding ?? metrics.paddingX;\n const trailingPadding = options.trailingPadding ?? metrics.paddingX;\n const topPadding = options.topPadding ?? top;\n const bottomPadding = options.bottomPadding ?? bottom;\n\n return `${topPadding}px ${trailingPadding}px ${bottomPadding}px ${leadingPadding}px`;\n};\n\nexport const getSelectControlPadding = (size: ControlSize): string => {\n const metrics = getControlMetrics(size);\n const { top, bottom } = getControlTextVerticalPadding(size, getSelectTextVerticalShift());\n return `${top}px ${metrics.selectPaddingRight}px ${bottom}px ${metrics.paddingX}px`;\n};\n\nexport const getControlTextNudgeStyle = (shift = CONTROL_TEXT_VERTICAL_SHIFT): CSSProperties => ({\n transform: `translateY(-${shift}px)`,\n});\n\nexport const getSelectTextNudgeStyle = (): CSSProperties => getControlTextNudgeStyle(getSelectTextVerticalShift());\n\nexport const getSelectIndicatorOffset = (size: ControlSize): number => getControlMetrics(size).selectIndicatorOffset;\n\nexport const getButtonSizeStyles = (size: ControlSize): CSSProperties => {\n const metrics = getControlMetrics(size);\n\n return {\n boxSizing: 'border-box',\n height: metrics.height,\n padding: `0 ${metrics.buttonPaddingX}px`,\n fontSize: metrics.fontSize,\n lineHeight: metrics.lineHeight,\n };\n};\n\nexport const getFieldSizeStyles = (size: ControlSize): CSSProperties => {\n const metrics = getControlMetrics(size);\n\n return {\n height: metrics.height,\n fontSize: metrics.fontSize,\n lineHeight: metrics.lineHeight,\n };\n};\n","import { useEffect, useMemo } from 'react';\n\nimport {\n darkTheme,\n lightTheme,\n useThemeValue,\n type SmartSellTheme,\n type ThemeColors,\n} from 'smartsell-theme';\n\nexport const UI_KIT_THEME_COLOR_NAMES = [\n 'primary',\n 'primaryLight',\n 'primaryDark',\n 'shadow',\n 'secondary',\n 'background',\n 'surface',\n 'text',\n 'textLight',\n 'positive',\n 'negative',\n 'warning',\n 'info',\n 'onPrimary',\n 'onSecondary',\n] as const;\n\nexport type UiKitThemeColorName = (typeof UI_KIT_THEME_COLOR_NAMES)[number];\nexport type UiKitThemeColors = {\n [key in UiKitThemeColorName]: ThemeColors[key];\n};\n\nexport interface UiKitTheme extends Omit<SmartSellTheme, 'title' | 'colors' | 'color'> {\n title: SmartSellTheme['title'];\n colors: UiKitThemeColors;\n color: UiKitThemeColors;\n}\n\nconst DEFAULT_THEME_COLORS = {\n primary: '#BE1E2D',\n primaryLight: '#d33948',\n primaryDark: '#A31826',\n shadow: '#B8B8B8',\n onPrimary: '#ffffff',\n secondary: '#DADAE3',\n onSecondary: '#000',\n background: '#DADAE3',\n surface: '#dad9d9',\n text: '#2b2b2b',\n textLight: '#4f4f4f',\n positive: '#006705',\n negative: '#c90000',\n warning: '#ff670b',\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}\n","export interface ViewportBounds {\n top: number;\n right: number;\n bottom: number;\n left: number;\n width: number;\n height: number;\n}\n\n/**\n * Returns the visible viewport when the browser exposes it, falling back to\n * the layout viewport for older browsers and non-browser environments.\n */\nexport function getViewportBounds(): ViewportBounds {\n if (typeof window === 'undefined') {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n width: 0,\n height: 0,\n };\n }\n\n const visualViewport = window.visualViewport;\n const top = visualViewport?.offsetTop ?? 0;\n const left = visualViewport?.offsetLeft ?? 0;\n const width = visualViewport?.width ?? window.innerWidth;\n const height = visualViewport?.height ?? window.innerHeight;\n\n return {\n top,\n right: left + width,\n bottom: top + height,\n left,\n width,\n height,\n };\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\n\nimport {\n cx,\n DISABLED_COMPONENT_OPACITY,\n UI_KIT_ROOT_CLASSNAME,\n getButtonSizeStyles,\n useUiKitTheme,\n type ControlSize,\n} from '../foundation';\n\ntype LegacyVariant = 'primary';\ntype ButtonVariant =\n | 'solid'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'negative'\n | LegacyVariant;\ntype ButtonSize = ControlSize;\n\nexport interface ButtonProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'dangerouslySetInnerHTML'\n> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n}\n\nconst BUTTON_VARIANT_CLASSNAMES: Record<\n 'solid' | 'secondary' | 'outline' | 'ghost' | 'negative',\n string\n> = {\n solid: [\n 'border-[var(--theme-primary)]',\n 'bg-[var(--theme-primary)]',\n 'text-[var(--theme-onPrimary)]',\n 'hover:border-[var(--theme-primaryDark)]',\n 'hover:bg-[var(--theme-primaryLight)]',\n 'hover:text-[var(--theme-onPrimary)]',\n 'active:bg-[var(--theme-primaryDark)]',\n 'active:text-[var(--theme-onPrimary)]',\n ].join(' '),\n secondary: [\n 'border-transparent',\n 'bg-[var(--theme-background)]',\n 'text-[var(--theme-text)]',\n 'active:bg-[var(--theme-primaryDark)]',\n 'active:text-[var(--theme-onPrimary)]',\n 'active:border-transparent',\n ].join(' '),\n outline: [\n 'border-[var(--theme-textLight)]',\n 'bg-transparent',\n 'text-[var(--theme-text)]',\n 'hover:bg-[var(--theme-primaryLight)]',\n 'hover:border-[var(--theme-primaryLight)]',\n 'hover:text-[var(--theme-onPrimary)]',\n 'active:bg-[var(--theme-primaryDark)]',\n 'active:text-[var(--theme-onPrimary)]',\n 'active:border-[var(--theme-primary)]',\n ].join(' '),\n ghost: [\n 'border-transparent',\n 'bg-transparent',\n 'text-[var(--theme-primary)]',\n 'hover:underline',\n ].join(' '),\n negative: [\n 'border-[var(--theme-negative)]',\n 'bg-transparent',\n 'text-[var(--theme-negative)]',\n 'active:bg-[var(--theme-negative)]',\n 'active:text-[var(--theme-onPrimary)]',\n 'active:border-[var(--theme-negative)]',\n ].join(' '),\n};\n\nexport function Button({\n variant = 'solid',\n size = 'md',\n leadingIcon,\n trailingIcon,\n children,\n disabled,\n className,\n style,\n type = 'button',\n ...rest\n}: ButtonProps) {\n useUiKitTheme();\n\n const resolvedVariant = variant === 'primary' ? 'solid' : variant;\n return (\n <button\n {...rest}\n type={type}\n disabled={disabled}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'box-border inline-flex w-fit max-w-fit items-center justify-center gap-2.5 shrink-0',\n 'rounded-2xl border border-solid font-bold tracking-[0.01em]',\n 'shadow-none cursor-pointer transition-all duration-300',\n 'disabled:cursor-not-allowed',\n 'disabled:translate-y-0 disabled:scale-100',\n\n BUTTON_VARIANT_CLASSNAMES[resolvedVariant],\n className,\n )}\n style={{\n ...getButtonSizeStyles(size),\n ...style,\n ...(disabled ? { opacity: DISABLED_COMPONENT_OPACITY } : {}),\n }}\n >\n {leadingIcon}\n {children}\n {trailingIcon}\n </button>\n );\n}\n","import type { AriaRole, CSSProperties, HTMLAttributes, ReactNode } from 'react';\nimport { useId } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from '../foundation';\n\nimport {\n getDefaultFeedbackIcon,\n getFeedbackContainerStyle,\n getFeedbackDefaultRole,\n getFeedbackIconBadgeStyle,\n type FeedbackTone,\n} from './feedbackPrimitives';\n\nexport type AlertTone = FeedbackTone;\n\nexport interface AlertProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title'> {\n tone?: AlertTone;\n children: ReactNode;\n title?: ReactNode;\n icon?: ReactNode;\n action?: ReactNode;\n role?: AriaRole;\n}\n\nexport function Alert({\n tone = 'info',\n children,\n title,\n icon,\n action,\n role,\n className,\n style,\n ...rest\n}: AlertProps) {\n const theme = useUiKitTheme();\n const titleId = useId();\n const descriptionId = useId();\n const resolvedRole = role ?? getFeedbackDefaultRole(tone);\n const ariaLive = resolvedRole === 'alert'\n ? 'assertive'\n : resolvedRole === 'status'\n ? 'polite'\n : undefined;\n const iconNode = icon === undefined ? getDefaultFeedbackIcon(tone, 20) : icon;\n const containerToneStyle = getFeedbackContainerStyle(theme, tone, 0.12);\n const iconToneStyle = getFeedbackIconBadgeStyle(theme, tone, 0.18);\n const contentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: title ? 4 : 0,\n flex: '1 1 220px',\n minWidth: 0,\n };\n\n return (\n <div\n {...rest}\n role={resolvedRole}\n aria-live={ariaLive}\n aria-atomic={ariaLive ? true : undefined}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={children ? descriptionId : undefined}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'rounded-2xl border border-solid text-[var(--theme-text)]',\n className,\n )}\n style={{\n ...containerToneStyle,\n display: 'flex',\n alignItems: 'flex-start',\n flexWrap: 'wrap',\n gap: 12,\n padding: '14px 16px',\n ...style,\n }}\n >\n {iconNode ? (\n <div\n aria-hidden=\"true\"\n className={UI_KIT_ROOT_CLASSNAME}\n style={{\n ...iconToneStyle,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 40,\n height: 40,\n borderRadius: 12,\n flexShrink: 0,\n }}\n >\n {iconNode}\n </div>\n ) : null}\n\n <div style={contentStyle}>\n {title ? (\n <div\n id={titleId}\n className={cx(UI_KIT_ROOT_CLASSNAME, 'font-bold text-sm')}\n style={{ color: containerToneStyle.borderColor }}\n >\n {title}\n </div>\n ) : null}\n\n <div id={descriptionId} className={cx(UI_KIT_ROOT_CLASSNAME, 'text-sm')} style={{ lineHeight: '1.5' }}>\n {children}\n </div>\n </div>\n\n {action ? (\n <div\n className={cx(UI_KIT_ROOT_CLASSNAME, 'shrink-0')}\n style={{ alignSelf: 'center', color: 'var(--theme-text)' }}\n >\n {action}\n </div>\n ) : null}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode, SVGProps } from 'react';\n\nimport { withAlpha, type UiKitTheme } from '../foundation';\n\nexport type FeedbackTone = 'info' | 'positive' | 'warning' | 'negative';\n\nconst FEEDBACK_TONE_COLOR_NAMES: Record<FeedbackTone, keyof UiKitTheme['colors']> = {\n info: 'info',\n positive: 'positive',\n warning: 'warning',\n negative: 'negative',\n};\n\ntype FeedbackIconProps = SVGProps<SVGSVGElement> & {\n size?: number;\n};\n\nconst iconProps = ({ size = 20, style, ...rest }: FeedbackIconProps) => ({\n ...rest,\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'none',\n xmlns: 'http://www.w3.org/2000/svg',\n 'aria-hidden': true,\n focusable: false,\n style,\n});\n\nfunction InfoIcon(props: FeedbackIconProps) {\n return (\n <svg {...iconProps(props)}>\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path d=\"M12 10V16\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n <circle cx=\"12\" cy=\"7.25\" r=\"1.25\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction PositiveIcon(props: FeedbackIconProps) {\n return (\n <svg {...iconProps(props)}>\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path\n d=\"M8.25 12.4L10.75 14.9L15.75 9.9\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction WarningIcon(props: FeedbackIconProps) {\n return (\n <svg {...iconProps(props)}>\n <path\n d=\"M12 3.75L20 18.5C20.35 19.15 19.88 20 19.14 20H4.86C4.12 20 3.65 19.15 4 18.5L12 3.75Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M12 9V13\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n <circle cx=\"12\" cy=\"16.25\" r=\"1.15\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction NegativeIcon(props: FeedbackIconProps) {\n return (\n <svg {...iconProps(props)}>\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path\n d=\"M9 9L15 15M15 9L9 15\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nexport const getFeedbackDefaultRole = (tone: FeedbackTone): 'alert' | 'status' => {\n return tone === 'warning' || tone === 'negative' ? 'alert' : 'status';\n};\n\nexport const getFeedbackToneColor = (theme: UiKitTheme, tone: FeedbackTone): string => {\n return theme.colors[FEEDBACK_TONE_COLOR_NAMES[tone]];\n};\n\nexport const getFeedbackContainerStyle = (\n theme: UiKitTheme,\n tone: FeedbackTone,\n alpha: number,\n): Pick<CSSProperties, 'backgroundColor' | 'borderColor'> => {\n const toneColor = getFeedbackToneColor(theme, tone);\n\n return {\n backgroundColor: withAlpha(toneColor, alpha),\n borderColor: toneColor,\n };\n};\n\nexport const getFeedbackIconBadgeStyle = (\n theme: UiKitTheme,\n tone: FeedbackTone,\n alpha: number,\n): Pick<CSSProperties, 'backgroundColor' | 'color'> => {\n const toneColor = getFeedbackToneColor(theme, tone);\n\n return {\n backgroundColor: withAlpha(toneColor, alpha),\n color: toneColor,\n };\n};\n\nexport const getDefaultFeedbackIcon = (tone: FeedbackTone, size = 20): ReactNode => {\n switch (tone) {\n case 'positive':\n return <PositiveIcon size={size} />;\n case 'warning':\n return <WarningIcon size={size} />;\n case 'negative':\n return <NegativeIcon size={size} />;\n case 'info':\n default:\n return <InfoIcon size={size} />;\n }\n};\n","import type { HTMLAttributes, ReactNode } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from '../foundation';\n\nexport interface CardProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title'> {\n children: ReactNode;\n eyebrow?: ReactNode;\n title?: ReactNode;\n action?: ReactNode;\n padded?: boolean;\n}\n\nexport function Card({\n children,\n eyebrow,\n title,\n action,\n padded = true,\n className,\n ...rest\n}: CardProps) {\n useUiKitTheme();\n\n return (\n <div\n {...rest}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'rounded-[28px] bg-[var(--theme-surface)] text-[var(--theme-text)]',\n 'border-2 border-solid border-[var(--theme-background)]',\n padded && 'p-4',\n className,\n )}\n >\n {(eyebrow || title || action) && (\n <div className=\"mb-[18px] flex items-start justify-between gap-4\">\n <div className=\"flex flex-col gap-1.5\">\n {eyebrow ? (\n <span className=\"text-xs font-extrabold uppercase tracking-[0.16em] text-[var(--theme-textLight)]\">\n {eyebrow}\n </span>\n ) : null}\n {title ? (\n <div className=\"text-2xl font-bold leading-[1.2] text-[var(--theme-text)]\">\n {title}\n </div>\n ) : null}\n </div>\n {action ? <div className=\"text-[var(--theme-text)]\">{action}</div> : null}\n </div>\n )}\n {children}\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nimport {\n cx,\n UI_KIT_ROOT_CLASSNAME,\n useUiKitTheme,\n} from '../foundation';\n\nexport interface CardSmallProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title' | 'color'> {\n title?: ReactNode;\n value?: ReactNode;\n icon?: ReactNode;\n color?: CSSProperties['color'];\n}\n\nexport function CardSmall({\n title,\n value,\n icon,\n color,\n className,\n style,\n ...rest\n}: CardSmallProps) {\n const theme = useUiKitTheme();\n const accentColor = color ?? theme.colors.primary;\n\n return (\n <div\n {...rest}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'relative flex min-h-20 items-center gap-4 overflow-hidden',\n 'rounded-2xl',\n 'border-2 border-solid border-[var(--theme-background)]',\n 'bg-[var(--theme-surface)] pl-6 pr-6 text-[var(--theme-text)]',\n className,\n )}\n style={{\n '--ui-kit-accent': accentColor,\n ...style,\n } as CSSProperties}\n >\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-y-0 left-0 w-[25px] bg-[var(--ui-kit-accent)]\"\n />\n\n {icon ? (\n <div\n aria-hidden=\"true\"\n className={cx(\n 'ml-4 inline-flex h-[52px] w-[52px] shrink-0 items-center justify-center',\n 'rounded-xl bg-[color-mix(in_srgb,var(--ui-kit-accent)_24%,transparent)]',\n 'text-[var(--ui-kit-accent)]',\n )}\n >\n {icon}\n </div>\n ) : null}\n\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n {title ? (\n <div className=\"truncate text-sm font-bold leading-[1.25] text-[var(--theme-text)]\">\n {title}\n </div>\n ) : null}\n {value ? (\n <div className=\"truncate text-[18px] font-extrabold leading-[1.15] text-[var(--theme-text)]\">\n {value}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n","import { useEffect, useId, useRef, useState, type CSSProperties, type InputHTMLAttributes, type ReactNode } from 'react';\n\nimport {\n cx,\n DISABLED_FIELD_OPACITY,\n UI_KIT_ROOT_CLASSNAME,\n useUiKitTheme,\n type ControlSize,\n} from '../foundation';\n\nexport interface CheckboxIndicatorProps {\n checked: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n size?: number;\n checkedColor?: string;\n iconColor?: string;\n uncheckedBorderColor?: string;\n uncheckedBackgroundColor?: string;\n style?: CSSProperties;\n}\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'dangerouslySetInnerHTML' | 'size' | 'type'> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n size?: ControlSize;\n indeterminate?: boolean;\n}\n\nconst CHECKBOX_SIZE_BY_SIZE: Record<ControlSize, number> = {\n sm: 14,\n md: 16,\n lg: 20,\n};\n\nconst CHECKBOX_LABEL_CLASSNAMES: Record<ControlSize, string> = {\n sm: 'text-[13px] leading-4',\n md: 'text-sm leading-[18px]',\n lg: 'text-[15px] leading-[18px]',\n};\n\nconst getCheckboxSize = (size: ControlSize): number => CHECKBOX_SIZE_BY_SIZE[size];\n\nconst hasNodeContent = (value: ReactNode): boolean => {\n if (Array.isArray(value)) {\n return value.some(hasNodeContent);\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n return value !== null && value !== undefined && value !== false;\n};\n\nfunction CheckIcon({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M5.75 10.25L8.5 13l5.75-6\"\n stroke={color}\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction MixedIcon({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5.5 10H14.5\" stroke={color} strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function CheckboxIndicator({\n checked,\n indeterminate = false,\n disabled = false,\n size = 20,\n checkedColor,\n iconColor,\n uncheckedBackgroundColor,\n style,\n}: CheckboxIndicatorProps) {\n const theme = useUiKitTheme();\n const isActive = checked || indeterminate;\n const resolvedCheckedColor = checkedColor ?? theme.colors.textLight;\n const resolvedIconColor = iconColor ?? theme.colors.surface;\n const resolvedUncheckedBackgroundColor = uncheckedBackgroundColor ?? theme.colors.surface;\n\n return (\n <span\n aria-hidden=\"true\"\n style={{\n width: size,\n height: size,\n borderRadius: 999,\n boxSizing: 'border-box',\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 0,\n backgroundColor: isActive ? resolvedCheckedColor : resolvedUncheckedBackgroundColor,\n opacity: disabled ? DISABLED_FIELD_OPACITY : 1,\n transition: 'background-color 140ms ease, border-color 140ms ease, opacity 140ms ease',\n ...style,\n }}\n >\n {indeterminate ? <MixedIcon size={Math.max(10, size - 6)} color={resolvedIconColor} /> : null}\n {!indeterminate && checked ? <CheckIcon size={Math.max(10, size - 6)} color={resolvedIconColor} /> : null}\n </span>\n );\n}\n\nexport function Checkbox({\n label,\n hint,\n error,\n size = 'sm',\n id,\n checked,\n defaultChecked,\n disabled,\n indeterminate = false,\n required,\n className,\n style,\n onChange,\n onFocus,\n onBlur,\n ...rest\n}: CheckboxProps) {\n const theme = useUiKitTheme();\n const mutedText = theme.colors.textLight;\n const indicatorSize = getCheckboxSize(size);\n const hasLabel = hasNodeContent(label);\n const hasHint = hasNodeContent(hint);\n const hasError = hasNodeContent(error);\n const hasSecondaryContent = hasLabel && hasHint;\n const resolvedId = id ?? `ss-checkbox-${useId().replace(/:/g, '')}`;\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalChecked, setInternalChecked] = useState(Boolean(defaultChecked));\n const isControlled = checked !== undefined;\n const resolvedChecked = isControlled ? Boolean(checked) : internalChecked;\n\n useEffect(() => {\n if (!inputRef.current) {\n return;\n }\n\n inputRef.current.indeterminate = indeterminate;\n }, [indeterminate, resolvedChecked]);\n\n return (\n <div\n className={cx(UI_KIT_ROOT_CLASSNAME, 'flex w-full flex-col gap-1.5', className)}\n style={style}\n >\n <label\n htmlFor={resolvedId}\n className={cx(\n 'inline-flex select-none gap-2.5',\n hasSecondaryContent ? 'items-start' : 'items-center',\n hasLabel || hasHint || hasError ? 'w-full' : 'w-auto',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n style={disabled ? { opacity: DISABLED_FIELD_OPACITY } : undefined}\n >\n <span\n className={cx(\n 'relative inline-flex shrink-0 items-center justify-center rounded-full p-0.5',\n hasSecondaryContent ? 'mt-px' : 'mt-0',\n )}\n >\n <input\n {...rest}\n ref={inputRef}\n id={resolvedId}\n type=\"checkbox\"\n checked={resolvedChecked}\n disabled={disabled}\n required={required}\n onChange={(event) => {\n if (!isControlled) {\n setInternalChecked(event.currentTarget.checked);\n }\n\n onChange?.(event);\n }}\n onFocus={(event) => {\n onFocus?.(event);\n }}\n onBlur={(event) => {\n onBlur?.(event);\n }}\n className={cx(\n 'absolute inset-0 m-0 h-full w-full opacity-0',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n />\n <CheckboxIndicator\n checked={resolvedChecked}\n indeterminate={indeterminate}\n disabled={disabled}\n size={indicatorSize}\n checkedColor={theme.colors.primary}\n iconColor={theme.colors.onPrimary}\n uncheckedBackgroundColor={theme.colors.secondary}\n style={disabled ? { opacity: 1 } : undefined}\n />\n </span>\n\n {hasLabel || hasHint || hasError ? (\n <span\n className={cx(\n 'flex min-w-0 flex-col gap-1',\n hasSecondaryContent ? 'justify-start' : 'justify-center',\n )}\n >\n {label ? (\n <span className={cx('font-semibold text-[var(--theme-text)]', CHECKBOX_LABEL_CLASSNAMES[size])}>\n {label}\n {required ? <span className=\"ml-1 text-[var(--theme-negative)]\">*</span> : null}\n </span>\n ) : null}\n {hint ? (\n <span className=\"text-[13px] leading-[1.45] text-[var(--theme-textLight)]\">\n {hint}\n </span>\n ) : null}\n {error ? (\n <span className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-negative)]\">\n {error}\n </span>\n ) : null}\n </span>\n ) : null}\n </label>\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from './Button';\nimport { Modal } from './Modal';\n\nexport interface ModalSlotIds {\n header: string;\n body: string;\n footer: string;\n}\n\nexport interface ModalSlotContext<TPayload = unknown> {\n title: string;\n payload?: TPayload;\n close: () => void;\n confirm?: () => void;\n confirmLabel: string;\n cancelLabel: string;\n isOpen: boolean;\n isBusy: boolean;\n}\n\nexport interface ComposableModalSlotRenderProps<TPayload = unknown> {\n id: string;\n context: ModalSlotContext<TPayload>;\n children?: ReactNode;\n}\n\nexport type ComposableModalSlotRenderer<TPayload = unknown> = (\n props: ComposableModalSlotRenderProps<TPayload>,\n) => ReactNode;\n\nexport interface ComposableModalProps<TPayload = unknown> {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n slotBaseId: string;\n renderSlot?: ComposableModalSlotRenderer<TPayload>;\n payload?: TPayload;\n onConfirm?: () => void;\n confirmLabel?: string;\n cancelLabel?: string;\n isBusy?: boolean;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n hideExpandButton?: boolean;\n maximized?: boolean;\n hideDefaultFooter?: boolean;\n maxWidth?: number | string;\n headerFallback?: ReactNode;\n footerFallback?: ReactNode;\n children?: ReactNode;\n}\n\nexport const createModalSlotIds = (slotBaseId: string): ModalSlotIds => ({\n header: `${slotBaseId}:modal-header`,\n body: `${slotBaseId}:modal-body`,\n footer: `${slotBaseId}:modal-footer`,\n});\n\nexport function ComposableModal<TPayload = unknown>({\n isOpen,\n onClose,\n title,\n slotBaseId,\n renderSlot,\n payload,\n onConfirm,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n isBusy = false,\n closeOnBackdrop = true,\n closeOnEscape = true,\n hideExpandButton = false,\n maximized,\n hideDefaultFooter = false,\n maxWidth,\n headerFallback,\n footerFallback,\n children,\n}: ComposableModalProps<TPayload>) {\n const slotIds = createModalSlotIds(slotBaseId);\n\n const context = useMemo<ModalSlotContext<TPayload>>(\n () => ({\n title,\n payload,\n close: onClose,\n confirm: onConfirm,\n confirmLabel,\n cancelLabel,\n isOpen,\n isBusy,\n }),\n [cancelLabel, confirmLabel, isBusy, isOpen, onClose, onConfirm, payload, title],\n );\n\n const defaultFooter = hideDefaultFooter ? undefined : (\n footerFallback ?? (\n <>\n <Button variant=\"outline\" onClick={onClose} disabled={isBusy}>\n {cancelLabel}\n </Button>\n {onConfirm ? (\n <Button onClick={onConfirm} disabled={isBusy}>\n {confirmLabel}\n </Button>\n ) : null}\n </>\n )\n );\n\n const defaultHeader = headerFallback ?? (\n <h2\n className=\"m-0 text-[24px] font-extrabold leading-[1.1]\"\n >\n {title}\n </h2>\n );\n\n const renderSlotContent = (id: string, slotChildren: ReactNode) => {\n if (!renderSlot) {\n return slotChildren;\n }\n\n return renderSlot({\n id,\n context,\n children: slotChildren,\n });\n };\n\n const headerContent = renderSlotContent(slotIds.header, defaultHeader);\n const bodyContent = renderSlotContent(slotIds.body, children);\n const footerContent = renderSlotContent(slotIds.footer, defaultFooter);\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n isBusy={isBusy}\n headerContent={headerContent}\n footer={footerContent}\n maxWidth={maxWidth}\n hideExpandButton={hideExpandButton}\n maximized={maximized}\n closeOnBackdrop={closeOnBackdrop}\n closeOnEscape={closeOnEscape}\n >\n {bodyContent}\n </Modal>\n );\n}","import { useEffect, useMemo, useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\n\nimport {\n cx,\n UI_KIT_ROOT_CLASSNAME,\n getControlMetrics,\n normalizeUiKitTheme,\n useUiKitTheme,\n type UiKitTheme,\n} from '../foundation';\nimport { Button } from './Button';\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\nconst MODAL_HEADER_CONTROL_METRICS = getControlMetrics('sm');\nconst MODAL_HEADER_CONTROL_SIZE = MODAL_HEADER_CONTROL_METRICS.height;\nconst MODAL_HEADER_ICON_SIZE = 18;\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 variant = appearance === 'contained'\n ? 'solid'\n : appearance === 'outlined'\n ? 'outline'\n : 'ghost';\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 variant={variant}\n onClick={onClick}\n disabled={disabled}\n >\n {label}\n </Button>\n </div>\n );\n}\n\nfunction ModalBusyIndicator({\n theme,\n}: {\n theme: UiKitTheme;\n}) {\n return (\n <div\n aria-live=\"polite\"\n role=\"status\"\n className=\"relative inline-flex h-14 w-14 items-center justify-center rounded-full\"\n style={{\n backgroundColor: theme.colors.surface,\n }}\n >\n <span className=\"ui-kit-sr-only\">Loading</span>\n <svg aria-hidden=\"true\" width=\"32\" height=\"32\" viewBox=\"0 0 40 40\" fill=\"none\">\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"16\"\n stroke={theme.colors.textLight}\n strokeWidth=\"4\"\n />\n <path\n d=\"M20 4C28.837 4 36 11.163 36 20\"\n stroke={theme.colors.primary}\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n >\n <animateTransform\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"0 20 20\"\n to=\"360 20 20\"\n dur=\"0.75s\"\n repeatCount=\"indefinite\"\n />\n </path>\n </svg>\n </div>\n );\n}\n\nfunction MaximizeIcon() {\n return (\n <svg aria-hidden=\"true\" width={MODAL_HEADER_ICON_SIZE} height={MODAL_HEADER_ICON_SIZE} 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.8\" />\n </svg>\n );\n}\n\nfunction MinimizeIcon() {\n return (\n <svg aria-hidden=\"true\" width={MODAL_HEADER_ICON_SIZE} height={MODAL_HEADER_ICON_SIZE} 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.8\"\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.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg aria-hidden=\"true\" width={MODAL_HEADER_ICON_SIZE} height={MODAL_HEADER_ICON_SIZE} viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M4.5 4.5 15.5 15.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M15.5 4.5 4.5 15.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nfunction ModalHeaderControl({\n ariaLabel,\n title,\n onClick,\n disabled = false,\n children,\n}: {\n ariaLabel: string;\n title: string;\n onClick: () => void;\n disabled?: boolean;\n children: ReactNode;\n}) {\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={ariaLabel}\n title={title}\n onClick={onClick}\n disabled={disabled}\n className={cx(\n 'm-0 gap-0 rounded-xl text-[var(--theme-text)] transition-colors',\n 'hover:bg-[var(--theme-background)] hover:no-underline',\n 'active:bg-[var(--theme-background)]',\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--theme-primary)]',\n )}\n style={{\n width: MODAL_HEADER_CONTROL_SIZE,\n minWidth: MODAL_HEADER_CONTROL_SIZE,\n maxWidth: MODAL_HEADER_CONTROL_SIZE,\n height: MODAL_HEADER_CONTROL_SIZE,\n minHeight: MODAL_HEADER_CONTROL_SIZE,\n maxHeight: MODAL_HEADER_CONTROL_SIZE,\n padding: 0,\n aspectRatio: '1 / 1',\n }}\n >\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-flex',\n width: MODAL_HEADER_ICON_SIZE,\n height: MODAL_HEADER_ICON_SIZE,\n minWidth: MODAL_HEADER_ICON_SIZE,\n minHeight: MODAL_HEADER_ICON_SIZE,\n alignItems: 'center',\n justifyContent: 'center',\n lineHeight: 0,\n flexShrink: 0,\n }}\n >\n {children}\n </span>\n </Button>\n );\n}\n\nfunction UnifiedModal({\n isOpen,\n onClose,\n children,\n title,\n headerContent,\n footer,\n confirmAction,\n cancelAction,\n closeAction,\n extraActions,\n maxWidth,\n closeOnBackdrop = true,\n closeOnEscape = true,\n hideCloseButton = false,\n hideExpandButton = false,\n disableDismiss = false,\n maximized,\n contentStyle,\n bodyStyle,\n isBusy = false,\n theme,\n}: ModalProps) {\n const inheritedTheme = useUiKitTheme();\n const modalTheme = useMemo(() => resolveTheme(inheritedTheme, theme), [inheritedTheme, theme]);\n const modalThemeVariables = useMemo<CSSProperties>(() => ({\n '--theme-background': modalTheme.colors.background,\n '--theme-surface': modalTheme.colors.surface,\n '--theme-text': modalTheme.colors.text,\n '--theme-textLight': modalTheme.colors.textLight,\n '--theme-primary': modalTheme.colors.primary,\n '--theme-onPrimary': modalTheme.colors.onPrimary,\n '--theme-secondary': modalTheme.colors.secondary,\n '--theme-onSecondary': modalTheme.colors.onSecondary,\n '--theme-negative': modalTheme.colors.negative,\n '--theme-warning': modalTheme.colors.warning,\n '--theme-shadow': modalTheme.colors.shadow,\n } as CSSProperties), [modalTheme]);\n const [isMaximized, setIsMaximized] = useState<boolean>(maximized ?? false);\n const titleId = useMemo(() => createTitleId(title), [title]);\n const shouldDisableDismiss = disableDismiss || isBusy;\n\n useEffect(() => {\n if (typeof maximized === 'boolean') {\n setIsMaximized(maximized);\n return;\n }\n\n if (isLikelyMobileViewport()) {\n setIsMaximized(true);\n }\n }, [maximized]);\n\n useEffect(() => {\n if (!isOpen || typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!shouldDisableDismiss && closeOnEscape && event.key === 'Escape') {\n onClose();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.body.style.overflow = previousOverflow;\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [closeOnEscape, isOpen, onClose, shouldDisableDismiss]);\n\n if (!isOpen) {\n return null;\n }\n\n const resolvedHeader = headerContent ?? (title ? (\n <h2\n id={titleId}\n className=\"m-0 text-2xl font-extrabold leading-[1.1] text-[var(--theme-text)]\"\n >\n {title}\n </h2>\n ) : null);\n\n let footerContent = footer;\n\n if (footerContent === undefined) {\n if (closeAction && !closeAction.hidden) {\n footerContent = (\n <ModalActionButton\n action={{ ...closeAction, disabled: closeAction.disabled || isBusy }}\n />\n );\n } else {\n const resolvedActions = [\n cancelAction\n ? {\n ...cancelAction,\n appearance: cancelAction.appearance ?? 'text',\n disabled: cancelAction.disabled || isBusy,\n }\n : undefined,\n ...(extraActions ?? []).map((action) => ({\n ...action,\n appearance: action.appearance ?? 'contained',\n disabled: action.disabled || isBusy,\n })),\n confirmAction\n ? {\n ...confirmAction,\n appearance: confirmAction.appearance ?? 'contained',\n disabled: confirmAction.disabled || isBusy,\n }\n : undefined,\n ].reduce<ModalAction[]>((items, action) => {\n if (!action || action.hidden) {\n return items;\n }\n\n items.push(action);\n return items;\n }, []);\n\n footerContent = resolvedActions.length > 0\n ? resolvedActions.map((action, index) => (\n <ModalActionButton\n key={`modal-action-${index}`}\n action={action}\n />\n ))\n : undefined;\n }\n }\n\n const shouldRenderFooter = footerContent !== undefined && footerContent !== null && footerContent !== false;\n const modalPadding = isMaximized\n ? 'env(safe-area-inset-top, 0px) env(safe-area-inset-right, 0px) env(safe-area-inset-bottom, 0px) env(safe-area-inset-left, 0px)'\n : 'max(16px, env(safe-area-inset-top, 0px)) max(16px, env(safe-area-inset-right, 0px)) max(16px, env(safe-area-inset-bottom, 0px)) max(16px, env(safe-area-inset-left, 0px))';\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(\n UI_KIT_ROOT_CLASSNAME,\n 'ui-kit-modal-viewport fixed inset-0 z-[70] flex items-center justify-center backdrop-blur-[8px]',\n )}\n style={{\n ...modalThemeVariables,\n height: 'var(--ui-kit-modal-viewport-height)',\n padding: modalPadding,\n backgroundColor: modalTheme.colors.shadow,\n }}\n >\n <div\n className={cx(\n 'relative flex flex-col overflow-hidden border-0',\n 'bg-[var(--theme-surface)]',\n 'text-[var(--theme-text)]',\n isMaximized ? 'rounded-none' : 'rounded-[30px]',\n )}\n style={{\n width: isMaximized ? '100%' : 'min(100%, 100%)',\n maxWidth: isMaximized ? '100%' : normalizeWidth(maxWidth),\n height: isMaximized ? '100%' : undefined,\n maxHeight: '100%',\n minWidth: isMaximized ? '100%' : 300,\n ...contentStyle,\n }}\n >\n <div\n className=\"flex items-start justify-between gap-3 px-5 pb-3 pt-[18px]\"\n >\n <div\n className={cx(\n 'flex-1 transition-opacity duration-150',\n isBusy ? 'opacity-[0.38]' : 'opacity-100',\n )}\n >\n {resolvedHeader}\n </div>\n <div className=\"flex items-center gap-2\">\n {!hideExpandButton ? (\n <ModalHeaderControl\n ariaLabel={isMaximized ? 'Minimize modal' : 'Maximize modal'}\n title={isMaximized ? 'Minimize' : 'Maximize'}\n onClick={() => setIsMaximized((current) => !current)}\n >\n {isMaximized ? <MinimizeIcon /> : <MaximizeIcon />}\n </ModalHeaderControl>\n ) : null}\n {!hideCloseButton ? (\n <ModalHeaderControl\n ariaLabel=\"Close modal\"\n title=\"Close\"\n onClick={onClose}\n disabled={shouldDisableDismiss}\n >\n <CloseIcon />\n </ModalHeaderControl>\n ) : null}\n </div>\n </div>\n\n <div\n className=\"relative min-h-0 flex-1 overflow-auto p-6\"\n style={bodyStyle}\n >\n <div\n className={cx(\n 'transition-[opacity,filter] duration-150',\n isBusy ? 'pointer-events-none opacity-[0.38] saturate-[0.8]' : 'pointer-events-auto opacity-100 saturate-100',\n )}\n >\n {children}\n </div>\n {isBusy ? (\n <div\n className=\"absolute inset-0 flex items-center justify-center backdrop-blur-[2px]\"\n style={{ backgroundColor: modalTheme.colors.background }}\n >\n <ModalBusyIndicator theme={modalTheme} />\n </div>\n ) : null}\n </div>\n\n {shouldRenderFooter ? (\n <div\n className=\"flex justify-end gap-2.5 px-5 pb-4 pt-3\"\n >\n {footerContent}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport function Modal(props: ModalProps) {\n return <UnifiedModal {...props} />;\n}\n","'use client';\n\nimport {\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type ChangeEvent,\n type InputHTMLAttributes,\n type ReactNode,\n type Ref,\n} from 'react';\n\nimport {\n cx,\n getControlLeadingAdornmentWidth,\n getControlLeadingIconInset,\n getControlMetrics,\n getControlTextNudgeStyle,\n CONTROL_TEXT_VERTICAL_SHIFT,\n getTextInputPadding,\n UI_KIT_ROOT_CLASSNAME,\n getFieldSizeStyles,\n useUiKitTheme,\n type ControlSize,\n} from '../foundation';\n\ntype ControlFrameProps = {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n htmlFor?: string;\n required?: boolean;\n useLabelWrapper?: boolean;\n children: ReactNode;\n style?: CSSProperties;\n alignLabel?: 'center' | 'top';\n hasValue?: boolean;\n labelOffset?: number;\n floatingPlaceholderVerticalShift?: number;\n floatingPlaceholder?: string;\n size?: ControlSize;\n};\n\nexport interface InputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'dangerouslySetInnerHTML' | 'size'\n> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n size?: ControlSize;\n showPasswordToggle?: boolean;\n fileButtonLabel?: ReactNode;\n icon?: ReactNode;\n disableFloatingLabel?: boolean;\n // React 19 passes `ref` as a regular prop; it flows through `...rest` onto the\n // underlying <input> so callers (e.g. the SelectBase search box) can focus it.\n ref?: Ref<HTMLInputElement>;\n}\n\ntype PasswordToggleMetrics = {\n buttonSize: number;\n leftOffset: number;\n contentGap: number;\n iconSize: number;\n};\n\nconst PASSWORD_TOGGLE_METRICS_BY_SIZE: Record<\n ControlSize,\n PasswordToggleMetrics\n> = {\n sm: {\n buttonSize: 18,\n leftOffset: 8,\n contentGap: 8,\n iconSize: 14,\n },\n md: {\n buttonSize: 19,\n leftOffset: 9,\n contentGap: 9,\n iconSize: 15,\n },\n lg: {\n buttonSize: 20,\n leftOffset: 10,\n contentGap: 10,\n iconSize: 16,\n },\n};\n\nconst getPasswordToggleMetrics = (size: ControlSize): PasswordToggleMetrics =>\n PASSWORD_TOGGLE_METRICS_BY_SIZE[size];\n\nconst LOGIN_VALIDATION_ERROR = 'Spaces are not allowed.';\nconst EMAIL_VALIDATION_ERROR = 'Enter a valid email address.';\nconst FULLNAME_VALIDATION_ERROR =\n 'Only letters, spaces, and periods are allowed.';\nconst EMAIL_VALUE_PATTERN = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nconst SPACE_PATTERN = /\\s/;\nconst FULLNAME_INVALID_PATTERN = /[^\\p{L}\\s.]/u;\n\nconst isRenderableNode = (node: ReactNode): boolean =>\n node !== null && node !== undefined && node !== false;\n\nconst getInputValidationError = (\n type: string,\n value: string,\n): string | undefined => {\n if (!value) {\n return undefined;\n }\n\n if (type === 'login' || type === 'username') {\n return SPACE_PATTERN.test(value) ? LOGIN_VALIDATION_ERROR : undefined;\n }\n\n if (type === 'email') {\n return EMAIL_VALUE_PATTERN.test(value) ? undefined : EMAIL_VALIDATION_ERROR;\n }\n\n if (type === 'fullName') {\n return FULLNAME_INVALID_PATTERN.test(value)\n ? FULLNAME_VALIDATION_ERROR\n : undefined;\n }\n\n return undefined;\n};\n\nfunction EmailIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d={\n 'M3.75 6.25A1.875 1.875 0 0 1 5.625 4.375h8.75A1.875 1.875 0 0 1 16.25 6.25v7.5' +\n 'a1.875 1.875 0 0 1-1.875 1.875h-8.75A1.875 1.875 0 0 1 3.75 13.75v-7.5Z'\n }\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.375 6.25 10 10.625l5.625-4.375\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction LoginIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle cx=\"10\" cy=\"6.25\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\n <path\n d=\"M4.75 16a5.25 5.25 0 0 1 10.5 0\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nfunction UsernameIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction FullNameIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction CalendarIcon({ size }: { size: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <rect\n width=\"18\"\n height=\"18\"\n x=\"3\"\n y=\"4\"\n rx=\"2\"\n ry=\"2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"16\"\n x2=\"16\"\n y1=\"2\"\n y2=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"8\"\n x2=\"8\"\n y1=\"2\"\n y2=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"3\"\n x2=\"21\"\n y1=\"10\"\n y2=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction FileIcon({ size, selected }: { size: number; selected: boolean }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n {selected ? (\n <>\n <path\n d=\"M5.5 6.25h9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M7.25 6.25V5.25A1.5 1.5 0 0 1 8.75 3.75h2.5a1.5 1.5 0 0 1 1.5 1.5v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.75 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M10 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M12.25 8.25v5.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M6.75 6.25l.5 8a1.5 1.5 0 0 0 1.497 1.406h2.506A1.5 1.5 0 0 0 12.75 14.25l.5-8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </>\n ) : (\n <>\n <path\n d=\"M6.25 2.5h5.652l4.348 4.348V15A2.5 2.5 0 0 1 13.75 17.5h-7.5A2.5 2.5 0 0 1 3.75 15V5A2.5 2.5 0 0 1 6.25 2.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.875 2.75V6.25H15.375\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.5 10h5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M7.5 13h5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </>\n )}\n </svg>\n );\n}\n\nfunction PasswordVisibleIcon({\n size,\n playing = false,\n}: {\n size: number;\n playing?: boolean;\n}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={\n playing\n ? {\n animation: `lf-lock-hint-blink ${LOCK_HINT_DURATION_MS}ms ease-in-out`,\n }\n : undefined\n }\n >\n {playing ? <style>{LOCK_HINT_STYLE}</style> : null}\n <path\n d=\"M6.75 8V6.75A3.25 3.25 0 0 1 12.262 4.415\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d={\n 'M6 8.25h8a1.75 1.75 0 0 1 1.75 1.75V14' +\n 'A1.75 1.75 0 0 1 14 15.75H6A1.75 1.75 0 0 1 4.25 14V10A1.75 1.75 0 0 1 6 8.25Z'\n }\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 11.25v1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\n// One-shot \"this is clickable\" cue: the padlock blinks while its shackle\n// alternates open/closed a couple of times, then settles back to the locked state.\nconst LOCK_HINT_DURATION_MS = 1500;\nconst LOCK_HINT_TOGGLE_INTERVAL_MS = 240;\nconst LOCK_HINT_STYLE = `\n@keyframes lf-lock-hint-blink {\n 0%, 100% { opacity: 1; }\n 18%, 58% { opacity: 0.4; }\n 38%, 78% { opacity: 1; }\n}\n@keyframes lf-lock-hint-shackle {\n 0%, 38%, 78%, 100% { transform: translateY(0) rotate(0deg); }\n 18%, 58% { transform: translateY(-1px) rotate(-42deg); }\n}\n`;\n\nfunction PasswordHiddenIcon({\n size,\n playing = false,\n}: {\n size: number;\n playing?: boolean;\n}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={\n playing\n ? {\n animation: `lf-lock-hint-blink ${LOCK_HINT_DURATION_MS}ms ease-in-out`,\n }\n : undefined\n }\n >\n {playing ? <style>{LOCK_HINT_STYLE}</style> : null}\n <path\n d=\"M6.75 8V6.75A3.25 3.25 0 1 1 13.25 6.75V8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={\n playing\n ? {\n transformBox: 'fill-box',\n transformOrigin: '100% 100%',\n animation: `lf-lock-hint-shackle ${LOCK_HINT_DURATION_MS}ms ease-in-out`,\n }\n : undefined\n }\n />\n <path\n d={\n 'M6 8.25h8a1.75 1.75 0 0 1 1.75 1.75V14' +\n 'A1.75 1.75 0 0 1 14 15.75H6A1.75 1.75 0 0 1 4.25 14V10A1.75 1.75 0 0 1 6 8.25Z'\n }\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 11.25v1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nexport function ControlFrame({\n label,\n hint,\n error,\n htmlFor,\n required = false,\n useLabelWrapper = true,\n children,\n style,\n alignLabel = 'center',\n hasValue = false,\n labelOffset,\n floatingPlaceholder,\n size = 'md',\n floatingPlaceholderVerticalShift = CONTROL_TEXT_VERTICAL_SHIFT,\n}: ControlFrameProps) {\n useUiKitTheme();\n\n const isTextarea = alignLabel === 'top';\n const controlMetrics = getControlMetrics(size);\n\n const floatingElement = floatingPlaceholder ? (\n <span\n className={cx(\n 'ui-kit-floating-placeholder absolute px-1.5 pointer-events-none',\n 'transition-all duration-150 origin-[left_center] max-w-[calc(100%-24px)]',\n 'overflow-hidden text-ellipsis whitespace-nowrap rounded-full',\n 'left-[var(--label-left-base,12px)]',\n 'rounded-tl-[16px] rounded-tr-[16px]',\n hasValue ? 'ui-kit-floating-placeholder--active' : '',\n 'group-has-[:disabled]:opacity-70',\n )}\n style={\n {\n zIndex: 10,\n '--label-left-base':\n labelOffset !== undefined ? `${labelOffset}px` : '12px',\n '--floating-label-font-size': `${controlMetrics.fontSize}px`,\n '--floating-label-line-height': controlMetrics.lineHeight,\n '--floating-label-resting-top': isTextarea\n ? '14px'\n : `calc(50% - ${floatingPlaceholderVerticalShift}px)`,\n '--floating-label-resting-transform': isTextarea\n ? 'translateY(0)'\n : 'translateY(-50%)',\n '--floating-label-active-font-size': '13px',\n '--floating-label-active-line-height': '16px',\n } as CSSProperties\n }\n aria-hidden=\"true\"\n >\n {floatingPlaceholder}\n </span>\n ) : null;\n\n const innerContent = (\n <div className=\"relative w-full flex group\">\n {children}\n {floatingElement}\n </div>\n );\n\n const hintsContent =\n hint || error ? (\n <div className=\"flex flex-col gap-1 mt-0\" style={{ paddingLeft: controlMetrics.paddingX }}>\n {hint && !error ? (\n <span className=\"text-[13px] leading-[1.45] text-[var(--theme-textLight)]\">\n {hint}\n </span>\n ) : null}\n {error ? (\n <span className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-negative)]\">\n {error}\n </span>\n ) : null}\n </div>\n ) : null;\n\n if (label && useLabelWrapper) {\n return (\n <label\n htmlFor={htmlFor}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'flex w-full cursor-pointer flex-col gap-1',\n )}\n style={style}\n >\n <span className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-text)]\">\n {label}\n {required ? (\n <span className=\"ml-1 text-[var(--theme-negative)]\">*</span>\n ) : null}\n </span>\n {innerContent}\n {hintsContent}\n </label>\n );\n }\n\n return (\n <div\n className={cx(UI_KIT_ROOT_CLASSNAME, 'flex w-full flex-col gap-1')}\n style={style}\n >\n {label && !useLabelWrapper ? (\n <label\n htmlFor={htmlFor}\n className=\"text-[13px] font-semibold leading-[1.45] text-[var(--theme-text)]\"\n >\n {label}\n {required ? (\n <span className=\"ml-1 text-[var(--theme-negative)]\">*</span>\n ) : null}\n </label>\n ) : null}\n {innerContent}\n {hintsContent}\n </div>\n );\n}\n\nexport function Input({\n label,\n hint,\n error,\n size = 'md',\n className,\n showPasswordToggle = true,\n fileButtonLabel,\n icon,\n id,\n disabled,\n placeholder,\n onChange,\n style,\n type = 'text',\n disableFloatingLabel,\n ...rest\n}: InputProps) {\n const controlMetrics = getControlMetrics(size);\n const passwordToggleMetrics = getPasswordToggleMetrics(size);\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const [isPasswordVisible, setIsPasswordVisible] = useState(false);\n const [isLockHinting, setIsLockHinting] = useState(false);\n const [isLockHintOpen, setIsLockHintOpen] = useState(false);\n const lockHintTimerRef = useRef<number | null>(null);\n const lockHintIntervalRef = useRef<number | null>(null);\n const [selectedFileNames, setSelectedFileNames] = useState<string[]>([]);\n const [validationError, setValidationError] = useState<string | undefined>();\n const isPasswordField = type === 'password';\n const isEmailField = type === 'email';\n const isLoginField = type === 'login';\n const isUsernameField = type === 'username';\n const isFullNameField = type === 'fullName';\n const isFileField = type === 'file';\n const isDateField = type === 'date' || type === 'datetime-local';\n const canTogglePasswordVisibility = isPasswordField && showPasswordToggle;\n const resolvedType =\n isLoginField || isUsernameField\n ? 'text'\n : canTogglePasswordVisibility\n ? isPasswordVisible\n ? 'text'\n : 'password'\n : type;\n\n // Clear picked file names when the field stops being a file input. Adjusting\n // state during render is React's recommended alternative to an effect.\n if (!isFileField && selectedFileNames.length > 0) {\n setSelectedFileNames([]);\n }\n\n // Keep the validation error in sync with a CONTROLLED value (and clear it for\n // field types we don't validate). For uncontrolled inputs `rest.value` isn't a\n // string, so the key stays null and the onChange handler drives validation.\n const isValidatableField =\n isEmailField || isLoginField || isUsernameField || isFullNameField;\n const validationKey =\n isValidatableField && typeof rest.value === 'string'\n ? `${type}\\u0000${rest.value}`\n : null;\n const [prevValidationKey, setPrevValidationKey] = useState<string | null>(\n null,\n );\n if (validationKey !== prevValidationKey) {\n setPrevValidationKey(validationKey);\n setValidationError(\n validationKey === null\n ? undefined\n : getInputValidationError(type, rest.value as string),\n );\n }\n\n const clearLockHintTimers = () => {\n if (lockHintTimerRef.current !== null) {\n window.clearTimeout(lockHintTimerRef.current);\n lockHintTimerRef.current = null;\n }\n\n if (lockHintIntervalRef.current !== null) {\n window.clearInterval(lockHintIntervalRef.current);\n lockHintIntervalRef.current = null;\n }\n };\n\n const stopLockHint = () => {\n clearLockHintTimers();\n\n setIsLockHinting(false);\n setIsLockHintOpen(false);\n };\n\n useEffect(() => clearLockHintTimers, []);\n\n const triggerLockHint = () => {\n if (disabled || isPasswordVisible || lockHintTimerRef.current !== null) {\n return;\n }\n\n if (\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n ) {\n return;\n }\n\n setIsLockHinting(true);\n setIsLockHintOpen(true);\n lockHintIntervalRef.current = window.setInterval(() => {\n setIsLockHintOpen((currentValue) => !currentValue);\n }, LOCK_HINT_TOGGLE_INTERVAL_MS);\n lockHintTimerRef.current = window.setTimeout(() => {\n stopLockHint();\n }, LOCK_HINT_DURATION_MS);\n };\n\n const hasFileButtonLabel =\n typeof fileButtonLabel === 'string'\n ? fileButtonLabel.trim().length > 0\n : fileButtonLabel != null;\n const hasSelectedFiles = selectedFileNames.length > 0;\n const showUploadLabel = hasFileButtonLabel && !hasSelectedFiles;\n const passwordLockIconSize = passwordToggleMetrics.iconSize + 2;\n const leadingContentGap = Math.max(\n 0,\n Math.round(controlMetrics.paddingX / 3),\n );\n const leadingIconInset = getControlLeadingIconInset(size);\n const controlTextNudgeStyle = getControlTextNudgeStyle();\n const hasExternalError =\n error !== undefined && error !== null && error !== '';\n const resolvedError = hasExternalError ? error : validationError;\n const hasResolvedError =\n resolvedError !== undefined &&\n resolvedError !== null &&\n resolvedError !== '';\n const fileSelectionText =\n selectedFileNames.length === 0\n ? (placeholder ?? '')\n : selectedFileNames.length === 1\n ? selectedFileNames[0]\n : `${selectedFileNames.length} files selected`;\n const fileIconSize = Math.max(controlMetrics.fontSize + 3, 16);\n const fileTriggerWidth = getControlLeadingAdornmentWidth(size, fileIconSize);\n const leadingAdornmentWidth = getControlLeadingAdornmentWidth(\n size,\n fileIconSize,\n );\n const passwordAdornmentWidth = getControlLeadingAdornmentWidth(\n size,\n passwordLockIconSize,\n );\n const floatingPlaceholder =\n !disableFloatingLabel && placeholder !== undefined && placeholder !== ''\n ? placeholder\n : undefined;\n const resolvedPlaceholder = placeholder ?? ' ';\n const isStaticPlaceholderVisible =\n disableFloatingLabel &&\n (rest.value === '' || (rest.value == null && rest.defaultValue == null));\n\n const defaultLeadingIcon = isEmailField ? (\n <EmailIcon size={fileIconSize} />\n ) : isUsernameField ? (\n <UsernameIcon size={fileIconSize} />\n ) : isFullNameField ? (\n <FullNameIcon size={fileIconSize} />\n ) : isLoginField ? (\n <LoginIcon size={fileIconSize} />\n ) : isDateField ? (\n <CalendarIcon size={fileIconSize} />\n ) : null;\n const resolvedLeadingIcon = icon ?? defaultLeadingIcon;\n const hasLeadingIcon = isRenderableNode(resolvedLeadingIcon);\n const hasCustomLeadingIcon = isRenderableNode(icon) && hasLeadingIcon;\n const resolvedFileIcon = icon ?? (\n <FileIcon size={fileIconSize} selected={hasSelectedFiles} />\n );\n const resolvedPasswordIcon =\n icon ??\n (isPasswordVisible || (isLockHinting && isLockHintOpen) ? (\n <PasswordVisibleIcon size={passwordLockIconSize} playing={isLockHinting} />\n ) : (\n <PasswordHiddenIcon size={passwordLockIconSize} playing={isLockHinting} />\n ));\n\n const placeholderClass = floatingPlaceholder\n ? 'placeholder-transparent'\n : 'placeholder-[var(--theme-textLight)]';\n\n let resolvedLabelOffset: number | undefined = undefined;\n if (isFileField) {\n resolvedLabelOffset = fileTriggerWidth;\n } else if (canTogglePasswordVisibility) {\n resolvedLabelOffset = passwordAdornmentWidth;\n } else if (hasLeadingIcon) {\n resolvedLabelOffset = leadingAdornmentWidth;\n }\n\n const datePseudos = isDateField\n ? cx(\n '[&::-webkit-calendar-picker-indicator]:absolute [&::-webkit-calendar-picker-indicator]:w-full',\n '[&::-webkit-calendar-picker-indicator]:h-full [&::-webkit-calendar-picker-indicator]:opacity-0',\n '[&::-webkit-calendar-picker-indicator]:cursor-pointer [&::-webkit-calendar-picker-indicator]:left-0',\n '[&::-webkit-calendar-picker-indicator]:top-0 [&::-webkit-datetime-edit]:h-full',\n '[&::-webkit-datetime-edit]:flex [&::-webkit-datetime-edit]:items-center'\n )\n : '';\n\n const fieldBaseClassName = cx(\n UI_KIT_ROOT_CLASSNAME,\n 'peer w-full box-border rounded-2xl border border-solid bg-[var(--theme-background)]',\n 'text-[var(--theme-text)] outline-none',\n 'duration-150 transition-[border-color]',\n placeholderClass,\n hasResolvedError ? 'border-[var(--theme-negative)]' : 'border-transparent',\n disabled ? 'cursor-not-allowed opacity-70' : 'cursor-text',\n datePseudos,\n );\n\n const adornedFieldClassName = cx(\n UI_KIT_ROOT_CLASSNAME,\n 'box-border flex w-full items-center gap-0 overflow-hidden rounded-2xl',\n 'border border-solid bg-[var(--theme-background)] text-[var(--theme-text)] text-left',\n hasResolvedError ? 'border-[var(--theme-negative)]' : 'border-transparent',\n 'duration-150 transition-[border-color]',\n disabled ? 'opacity-70' : null,\n );\n\n const adornedInputClassName = cx(\n 'peer h-full min-w-0 flex-1 border-0 bg-transparent text-[var(--theme-text)] outline-none',\n placeholderClass,\n disabled ? 'cursor-not-allowed' : 'cursor-text',\n datePseudos,\n );\n\n const adornmentColorClassName = hasResolvedError\n ? 'text-[var(--theme-negative)]'\n : 'text-[var(--theme-textLight)]';\n\n const handleValidatedInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n if ((isLoginField || isUsernameField) && event.target.value.includes(' ')) {\n event.target.value = event.target.value.replace(/\\s/g, '');\n }\n\n if (isFullNameField && FULLNAME_INVALID_PATTERN.test(event.target.value)) {\n event.target.value = event.target.value.replace(\n new RegExp(FULLNAME_INVALID_PATTERN.source, 'gu'),\n '',\n );\n }\n\n if (isEmailField || isLoginField || isUsernameField || isFullNameField) {\n setValidationError(getInputValidationError(type, event.target.value));\n }\n\n onChange?.(event);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if ((isLoginField || isUsernameField) && event.key === ' ') {\n event.preventDefault();\n }\n\n if (\n isFullNameField &&\n event.key.length === 1 &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n if (!/^[\\p{L}\\s.]$/u.test(event.key)) {\n event.preventDefault();\n }\n }\n rest.onKeyDown?.(event);\n };\n\n const openFilePicker = () => {\n if (disabled) {\n return;\n }\n\n fileInputRef.current?.click();\n };\n\n const clearSelectedFiles = () => {\n if (disabled || !fileInputRef.current) {\n return;\n }\n\n fileInputRef.current.value = '';\n fileInputRef.current.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n const input = isFileField ? (\n <>\n <input\n {...rest}\n ref={fileInputRef}\n id={inputId}\n type=\"file\"\n disabled={disabled}\n aria-hidden=\"true\"\n tabIndex={-1}\n onChange={(event) => {\n setSelectedFileNames(\n Array.from(event.target.files ?? [], (file) => file.name),\n );\n onChange?.(event);\n }}\n className=\"hidden\"\n />\n <div\n className={cx(\n adornedFieldClassName,\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n className,\n )}\n style={{ ...style, ...getFieldSizeStyles(size) }}\n >\n <button\n type=\"button\"\n disabled={disabled}\n aria-controls={inputId}\n aria-label={\n hasSelectedFiles\n ? rest.multiple\n ? 'Remove selected files'\n : 'Remove selected file'\n : rest.multiple\n ? 'Select files'\n : 'Select file'\n }\n onClick={hasSelectedFiles ? clearSelectedFiles : openFilePicker}\n className={cx(\n 'inline-flex shrink-0 self-stretch whitespace-nowrap border-0 bg-transparent',\n 'items-center text-[var(--theme-text)] appearance-none',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n showUploadLabel ? 'justify-start font-bold' : 'justify-center',\n )}\n style={{\n gap: showUploadLabel ? leadingContentGap : 0,\n width: showUploadLabel ? undefined : fileTriggerWidth,\n boxSizing: 'border-box',\n justifyContent: 'flex-start',\n paddingTop: 0,\n paddingRight: showUploadLabel ? controlMetrics.buttonPaddingX : 0,\n paddingBottom: 0,\n paddingLeft: leadingIconInset,\n }}\n >\n <span\n className={cx(\n 'inline-flex shrink-0 items-center justify-center',\n adornmentColorClassName,\n )}\n aria-hidden=\"true\"\n >\n {resolvedFileIcon}\n </span>\n {showUploadLabel ? (\n <span>{fileButtonLabel}</span>\n ) : null}\n </button>\n <button\n type=\"button\"\n disabled={disabled}\n aria-controls={inputId}\n aria-label={rest.multiple ? 'Select files' : 'Select file'}\n onClick={openFilePicker}\n className={cx(\n 'flex h-full min-w-0 flex-1 items-center border-0 bg-transparent p-0',\n 'text-left appearance-none',\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n >\n {fileSelectionText ? (\n <span\n className={cx(\n 'flex h-full min-w-0 flex-1 items-center overflow-hidden text-ellipsis whitespace-nowrap',\n hasSelectedFiles\n ? 'text-[var(--theme-text)]'\n : 'text-[var(--theme-textLight)]',\n )}\n style={{\n padding: `0 ${controlMetrics.paddingX}px 0 ${leadingContentGap}px`,\n ...controlTextNudgeStyle,\n ...getFieldSizeStyles(size),\n }}\n >\n {fileSelectionText}\n </span>\n ) : null}\n </button>\n </div>\n </>\n ) : canTogglePasswordVisibility ? (\n <div\n className={cx(adornedFieldClassName, className)}\n style={{ ...style, ...getFieldSizeStyles(size) }}\n >\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={isPasswordVisible ? 'Hide password' : 'Show password'}\n aria-pressed={isPasswordVisible}\n disabled={disabled}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n stopLockHint();\n setIsPasswordVisible((currentValue) => !currentValue);\n }}\n className={cx(\n 'inline-flex shrink-0 self-stretch items-center justify-center border-0',\n 'bg-transparent p-0 appearance-none',\n adornmentColorClassName,\n disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n )}\n style={{\n width: passwordAdornmentWidth,\n boxSizing: 'border-box',\n justifyContent: 'flex-start',\n paddingLeft: leadingIconInset,\n }}\n >\n {resolvedPasswordIcon}\n </button>\n <input\n {...rest}\n id={inputId}\n placeholder={resolvedPlaceholder}\n type={resolvedType}\n disabled={disabled}\n onChange={handleValidatedInputChange}\n onKeyDown={handleKeyDown}\n onFocus={(event) => {\n triggerLockHint();\n rest.onFocus?.(event);\n }}\n className={cx(adornedInputClassName, className)}\n aria-invalid={hasResolvedError}\n style={{\n padding: getTextInputPadding(size, {\n leadingPadding: leadingContentGap,\n ...(disableFloatingLabel\n ? {\n topPadding: controlMetrics.paddingY + 1,\n bottomPadding: Math.max(0, controlMetrics.paddingY - 1),\n }\n : {}),\n }),\n }}\n />\n </div>\n ) : hasLeadingIcon ? (\n <div\n className={cx(adornedFieldClassName, className)}\n style={{ ...style, ...getFieldSizeStyles(size) }}\n >\n <span\n className={cx(\n 'inline-flex shrink-0 self-stretch items-center justify-center bg-transparent',\n adornmentColorClassName,\n )}\n style={{\n width: leadingAdornmentWidth,\n boxSizing: 'border-box',\n justifyContent: 'flex-start',\n paddingLeft: leadingIconInset,\n }}\n aria-hidden=\"true\"\n >\n {resolvedLeadingIcon}\n </span>\n <input\n {...rest}\n id={inputId}\n placeholder={resolvedPlaceholder}\n type={resolvedType}\n disabled={disabled}\n onChange={handleValidatedInputChange}\n onKeyDown={handleKeyDown}\n className={cx(adornedInputClassName, className)}\n aria-invalid={hasResolvedError}\n style={{\n padding: getTextInputPadding(size, {\n leadingPadding: leadingContentGap,\n // O texto da data renderiza mais alto que um input de texto; um\n // bottom menor (4px no md) empurra o texto de volta ao centro.\n ...(isDateField\n ? { bottomPadding: controlMetrics.paddingY - 3 }\n : {}),\n ...(!isDateField && isStaticPlaceholderVisible\n ? {\n topPadding: Math.max(0, controlMetrics.paddingY - 1),\n bottomPadding: controlMetrics.paddingY + 0,\n }\n : {}),\n ...(!isDateField && !isStaticPlaceholderVisible && hasCustomLeadingIcon\n ? {\n topPadding: controlMetrics.paddingY,\n bottomPadding: controlMetrics.paddingY,\n }\n : {}),\n }),\n }}\n />\n </div>\n ) : (\n <input\n {...rest}\n id={inputId}\n placeholder={resolvedPlaceholder}\n type={resolvedType}\n disabled={disabled}\n onChange={handleValidatedInputChange}\n onKeyDown={handleKeyDown}\n aria-invalid={hasResolvedError}\n className={cx(fieldBaseClassName, className)}\n style={{\n padding: getTextInputPadding(size),\n ...getFieldSizeStyles(size),\n ...style,\n }}\n />\n );\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={resolvedError}\n htmlFor={isFileField ? undefined : inputId}\n required={rest.required}\n useLabelWrapper={!isFileField}\n size={size}\n hasValue={\n rest.value !== undefined && rest.value !== '' && rest.value !== null\n }\n labelOffset={resolvedLabelOffset}\n floatingPlaceholderVerticalShift={\n isFileField || canTogglePasswordVisibility || hasLeadingIcon ? 0 : undefined\n }\n floatingPlaceholder={floatingPlaceholder}\n >\n {input}\n </ControlFrame>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Input, type InputProps } from './Input';\n\nexport type DatePickerMode = 'date' | 'datetime';\nexport type DatePickerValue = string | Date | null;\nexport type DatePickerChangeReason = 'input' | 'picker' | 'clear';\n\nexport interface DatePickerChangeContext {\n reason: DatePickerChangeReason;\n date: Date | null;\n nativeValue: string;\n displayValue: string;\n}\n\nexport interface DatePickerProps\n extends Omit<InputProps, 'type' | 'value' | 'defaultValue' | 'onChange' | 'min' | 'max' | 'step'> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n value?: DatePickerValue;\n defaultValue?: DatePickerValue;\n onChange?: (value: string | null, context: DatePickerChangeContext) => void;\n mode?: DatePickerMode;\n format?: string;\n allowPastDates?: boolean;\n allowFutureDates?: boolean;\n minDate?: DatePickerValue;\n maxDate?: DatePickerValue;\n minuteStep?: number;\n clearable?: boolean;\n showPickerButton?: boolean;\n isDateUnavailable?: (date: Date) => boolean;\n invalidDateMessage?: ReactNode;\n unavailableDateMessage?: ReactNode;\n pickerButtonLabel?: string;\n clearButtonLabel?: string;\n}\n\nconst pad = (value: number) => String(value).padStart(2, '0');\n\nfunction normalizeDateValue(value: DatePickerValue | undefined, mode: DatePickerMode): string | undefined {\n if (value == null || value === '') {\n return undefined;\n }\n\n if (value instanceof Date) {\n const datePart = `${value.getFullYear()}-${pad(value.getMonth() + 1)}-${pad(value.getDate())}`;\n\n if (mode === 'datetime') {\n return `${datePart}T${pad(value.getHours())}:${pad(value.getMinutes())}`;\n }\n\n return datePart;\n }\n\n return value;\n}\n\nfunction parseNativeDateValue(value: string, mode: DatePickerMode): Date | null {\n if (!value) {\n return null;\n }\n\n const parsedDate = mode === 'datetime' ? new Date(value) : new Date(`${value}T00:00:00`);\n return Number.isNaN(parsedDate.getTime()) ? null : parsedDate;\n}\n\nexport function DatePicker({\n value,\n defaultValue,\n onChange,\n mode = 'date',\n minDate,\n maxDate,\n minuteStep = 5,\n placeholder,\n ...props\n}: DatePickerProps) {\n const nativeType = mode === 'datetime' ? 'datetime-local' : 'date';\n const normalizedValue = normalizeDateValue(value, mode);\n const normalizedDefaultValue = normalizeDateValue(defaultValue, mode);\n\n return (\n <Input\n {...props}\n type={nativeType}\n value={normalizedValue}\n defaultValue={normalizedDefaultValue}\n min={normalizeDateValue(minDate, mode)}\n max={normalizeDateValue(maxDate, mode)}\n step={mode === 'datetime' ? Math.max(1, minuteStep) * 60 : undefined}\n placeholder={placeholder ?? (mode === 'datetime' ? 'Data e hora' : 'Data')}\n onChange={(event) => {\n const nextValue = event.currentTarget.value || null;\n\n onChange?.(nextValue, {\n reason: 'input',\n date: nextValue ? parseNativeDateValue(nextValue, mode) : null,\n nativeValue: nextValue ?? '',\n displayValue: nextValue ?? '',\n });\n }}\n />\n );\n}\n","import {\n cloneElement,\n isValidElement,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { Button, type ButtonProps } from './Button';\nimport { getControlMetrics } from '../foundation/controlSize';\n\nexport type IconButtonSize = NonNullable<ButtonProps['size']>;\nexport type IconButtonVariant = Exclude<NonNullable<ButtonProps['variant']>, 'primary'>;\n\nexport interface IconButtonProps\n extends Omit<ButtonProps, 'aria-label' | 'children' | 'leadingIcon' | 'trailingIcon' | 'variant'> {\n icon: ReactNode;\n ariaLabel: string;\n size?: IconButtonSize;\n variant?: IconButtonVariant;\n}\n\nconst ICON_SIZE_BY_CONTROL_SIZE: Record<IconButtonSize, number> = {\n sm: 16,\n md: 18,\n lg: 20,\n};\n\nconst resolveIcon = (icon: ReactNode): ReactNode => {\n if (!isValidElement(icon)) {\n return icon;\n }\n\n const iconElement = icon as ReactElement<{ style?: CSSProperties }>;\n\n return cloneElement(iconElement, {\n style: {\n width: '100%',\n height: '100%',\n ...(iconElement.props.style ?? {}),\n },\n });\n};\n\nexport function IconButton({\n icon,\n ariaLabel,\n size = 'md',\n variant = 'solid',\n className,\n style,\n ...rest\n}: IconButtonProps) {\n const controlMetrics = getControlMetrics(size);\n const iconSize = ICON_SIZE_BY_CONTROL_SIZE[size];\n\n return (\n <Button\n {...rest}\n aria-label={ariaLabel}\n size={size}\n variant={variant}\n className={className ? `gap-0 ${className}` : 'gap-0'}\n style={{\n width: controlMetrics.height,\n minWidth: controlMetrics.height,\n maxWidth: controlMetrics.height,\n padding: 0,\n aspectRatio: '1 / 1',\n ...style,\n }}\n >\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: iconSize,\n height: iconSize,\n lineHeight: 0,\n flexShrink: 0,\n }}\n >\n {resolveIcon(icon)}\n </span>\n </Button>\n );\n}\n","import type { CSSProperties, HTMLAttributes } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme, type ControlSize } from '../foundation';\n\nexport type LoadingSize = ControlSize | number;\n\nexport interface LoadingProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'color'> {\n /** Rendered size of the animation. Named sizes map to 28 / 40 / 56 px. */\n size?: LoadingSize;\n /** Overrides the animation color. Defaults to the theme primary. */\n color?: CSSProperties['color'];\n /** Optional caption rendered under the animation. */\n label?: string;\n /** Text announced by screen readers when no visible `label` is provided. */\n accessibleLabel?: string;\n /** Animation speed multiplier: 2 runs twice as fast, 0.5 runs at half speed. */\n speed?: number;\n}\n\nconst SIZE_BY_CONTROL_SIZE: Record<ControlSize, number> = {\n sm: 28,\n md: 40,\n lg: 56,\n};\n\nconst BASE_DROP_MS = 1500;\nconst BASE_WHEEL_MS = 900;\nconst BASE_BOB_MS = 1500;\n\n// Each item starts a bit after the previous one so the cart is fed continuously\n// instead of receiving all three products at the same time.\nconst ITEM_DELAY_RATIOS = [0, 0.26, 0.52];\n// Depth variation. This is `fill-opacity` on purpose: the drop keyframes animate\n// `opacity`, which would override a plain `opacity` attribute on the shapes.\nconst ITEM_FILL_OPACITIES = [1, 0.72, 0.88];\n\nconst LOADING_KEYFRAMES = `\n@keyframes ss-loading-drop {\n 0% { transform: translateY(-18px) scale(0.55); opacity: 0; }\n 12% { opacity: 1; }\n 45% { transform: translateY(0) scale(1); opacity: 1; }\n 56% { transform: translateY(-2.5px) scale(1); opacity: 1; }\n 66% { transform: translateY(0) scale(1); opacity: 1; }\n 82%, 100% { transform: translateY(0) scale(0.72); opacity: 0; }\n}\n@keyframes ss-loading-bob {\n 0%, 50%, 100% { transform: translateY(0) rotate(0deg); }\n 25% { transform: translateY(-0.9px) rotate(-1.2deg); }\n 75% { transform: translateY(-0.5px) rotate(0.8deg); }\n}\n@keyframes ss-loading-wheel {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n@keyframes ss-loading-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.45; }\n}\n@media (prefers-reduced-motion: reduce) {\n .ss-loading-cart,\n .ss-loading-wheel,\n .ss-loading-item {\n animation: none !important;\n opacity: 1 !important;\n transform: none !important;\n }\n .ss-loading-svg {\n animation: ss-loading-pulse 1600ms ease-in-out infinite;\n }\n}\n`;\n\nconst resolveSize = (size: LoadingSize): number => {\n return typeof size === 'number' ? size : SIZE_BY_CONTROL_SIZE[size];\n};\n\nconst WHEELS = [\n { cx: 18, cy: 32.6 },\n { cx: 35, cy: 32.6 },\n];\n\nexport function Loading({\n size = 'md',\n color,\n label,\n accessibleLabel = 'Loading',\n speed = 1,\n className,\n style,\n ...rest\n}: LoadingProps) {\n useUiKitTheme();\n\n const pixelSize = resolveSize(size);\n const safeSpeed = Math.max(0.1, speed);\n const dropDuration = BASE_DROP_MS / safeSpeed;\n const strokeColor = color ?? 'var(--theme-primary)';\n\n const itemAnimation = (index: number): CSSProperties => ({\n transformBox: 'fill-box',\n transformOrigin: 'center',\n animation: `ss-loading-drop ${dropDuration}ms cubic-bezier(0.45, 0, 0.35, 1) infinite`,\n animationDelay: `${ITEM_DELAY_RATIOS[index] * dropDuration}ms`,\n });\n\n return (\n <div\n {...rest}\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n className={cx(UI_KIT_ROOT_CLASSNAME, 'inline-flex flex-col items-center justify-center', className)}\n style={{\n gap: Math.round(pixelSize * 0.2),\n backgroundColor: 'transparent',\n ...style,\n }}\n >\n <svg\n className=\"ss-loading-svg\"\n width={pixelSize}\n height={pixelSize}\n viewBox=\"0 0 48 48\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={{ color: strokeColor, overflow: 'hidden' }}\n >\n <style>{LOADING_KEYFRAMES}</style>\n\n <g\n className=\"ss-loading-cart\"\n style={{\n transformBox: 'view-box',\n transformOrigin: '26px 32px',\n animation: `ss-loading-bob ${BASE_BOB_MS / safeSpeed}ms ease-in-out infinite`,\n }}\n >\n {/* Products dropping into the basket. Drawn before the cart so the\n basket outline stays readable while an item crosses its rim. */}\n <rect\n className=\"ss-loading-item\"\n x={15.5}\n y={16.5}\n width={7.5}\n height={7}\n rx={1.8}\n fill=\"currentColor\"\n fillOpacity={ITEM_FILL_OPACITIES[0]}\n style={itemAnimation(0)}\n />\n <circle\n className=\"ss-loading-item\"\n cx={27.5}\n cy={20}\n r={3.6}\n fill=\"currentColor\"\n fillOpacity={ITEM_FILL_OPACITIES[1]}\n style={itemAnimation(1)}\n />\n <rect\n className=\"ss-loading-item\"\n x={32}\n y={16.5}\n width={6.6}\n height={7}\n rx={1.8}\n fill=\"currentColor\"\n fillOpacity={ITEM_FILL_OPACITIES[2]}\n style={itemAnimation(2)}\n />\n\n <g stroke=\"currentColor\" strokeWidth={2.6} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3.5 7.5h4.6l1.6 5\" />\n <path d=\"M9.7 12.5H43l-4.4 13.5H14.1z\" />\n <path d=\"M18 26v3.4\" />\n <path d=\"M35 26v3.4\" />\n </g>\n\n {WHEELS.map((wheel) => (\n <g\n key={wheel.cx}\n className=\"ss-loading-wheel\"\n style={{\n transformBox: 'view-box',\n transformOrigin: `${wheel.cx}px ${wheel.cy}px`,\n animation: `ss-loading-wheel ${BASE_WHEEL_MS / safeSpeed}ms linear infinite`,\n }}\n >\n <circle\n cx={wheel.cx}\n cy={wheel.cy}\n r={3.2}\n stroke=\"currentColor\"\n strokeWidth={2.2}\n fill=\"none\"\n />\n <path\n d={`M${wheel.cx} ${wheel.cy}V${wheel.cy - 3.2}`}\n stroke=\"currentColor\"\n strokeWidth={2.2}\n strokeLinecap=\"round\"\n />\n </g>\n ))}\n </g>\n </svg>\n\n {label ? (\n <span\n style={{\n color: 'var(--theme-textLight)',\n fontSize: Math.max(12, Math.round(pixelSize * 0.3)),\n lineHeight: 1.4,\n }}\n >\n {label}\n </span>\n ) : (\n <span className=\"ui-kit-sr-only\">{accessibleLabel}</span>\n )}\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from '../foundation';\n\nexport type SeparatorOrientation = 'vertical' | 'horizontal';\n\nexport interface SeparatorProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'color'> {\n orientation?: SeparatorOrientation;\n color?: CSSProperties['backgroundColor'];\n size?: CSSProperties['width'];\n}\n\nexport function Separator({\n orientation = 'vertical',\n color,\n size = '100%',\n className,\n style,\n ...rest\n}: SeparatorProps) {\n useUiKitTheme();\n const usesVerticalStretch = orientation === 'vertical' && size === '100%';\n\n const separatorStyle: CSSProperties = {\n backgroundColor: color,\n width: orientation === 'vertical' ? 1 : size,\n height: orientation === 'vertical' ? (usesVerticalStretch ? 'auto' : size) : 3,\n ...style,\n };\n\n return (\n <div\n {...rest}\n role=\"separator\"\n aria-orientation={orientation}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'shrink-0 self-stretch bg-[var(--theme-background)]',\n className,\n )}\n style={separatorStyle}\n />\n );\n}","import {\n useEffect,\n useId,\n useRef,\n useState,\n useSyncExternalStore,\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type UIEventHandler,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n cx,\n DISABLED_FIELD_OPACITY,\n getFieldSizeStyles,\n getSelectControlPadding,\n getSelectIndicatorOffset,\n getSelectTextNudgeStyle,\n getViewportBounds,\n UI_KIT_ROOT_CLASSNAME,\n} from '../../foundation';\nimport { CheckboxIndicator } from '../../components/Checkbox';\nimport { ControlFrame, Input } from '../../components/Input';\nimport { Separator } from '../../components/Separator';\nimport type { MenuPlacement, SelectBaseProps } from './types';\nimport {\n filterSelectGroups,\n getTextContent,\n normalizeSelectValues,\n} from './utils';\n\nconst MENU_OFFSET = 8;\nconst MENU_MAX_HEIGHT = 280;\nconst emptySubscribe = () => () => {};\n\nfunction SearchIcon({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"m21 21-4.35-4.35M10.5 18a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nconst OPTION_PADDING_CLASSNAMES: Record<\n NonNullable<SelectBaseProps['size']>,\n string\n> = {\n sm: 'px-[11px] py-2',\n md: 'px-3 py-[9px]',\n lg: 'px-[13px] py-[10px]',\n};\n\nexport function SelectBase({\n label,\n hint,\n error,\n placeholder,\n size = 'md',\n id,\n disabled,\n style,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClick,\n autoFocus,\n className,\n isMulti,\n isFilterable,\n multiple,\n groups,\n nativeOptions,\n emptyMessage = 'No options found.',\n isLoading = false,\n loadingMessage = 'Loading options...',\n searchPlaceholder = 'Search options',\n searchQuery,\n onSearchQueryChange,\n allowOpenWithoutOptions = false,\n filterOptions = true,\n clearSearchOnClose = true,\n preserveUnknownValues = false,\n onListboxScroll,\n menuFooter,\n ...rest\n}: SelectBaseProps) {\n const generatedId = useId().replace(/:/g, '');\n const resolvedId = id ?? `ss-select-${generatedId}`;\n const isMultiSelect = Boolean(isMulti || multiple);\n const hasFilter = Boolean(isFilterable);\n const flatOptions = groups.flatMap((group) => group.options);\n const enabledOptions = flatOptions.filter((option) => !option.disabled);\n const isControlled = value !== undefined;\n const fallbackValues =\n defaultValue !== undefined\n ? normalizeSelectValues(defaultValue)\n : isMultiSelect\n ? []\n : placeholder != null\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n const [uncontrolledValues, setUncontrolledValues] = useState(fallbackValues);\n const [isOpen, setIsOpen] = useState(false);\n const [uncontrolledSearchQuery, setUncontrolledSearchQuery] = useState('');\n const [isPlacementResolved, setIsPlacementResolved] = useState(false);\n const [highlightedValue, setHighlightedValue] = useState(\n fallbackValues[0] ?? enabledOptions[0]?.value ?? '',\n );\n const isMounted = useSyncExternalStore(\n emptySubscribe,\n () => true,\n () => false,\n );\n const [menuRect, setMenuRect] = useState({\n top: 0,\n left: 0,\n width: 0,\n });\n const shellRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const hiddenSelectRef = useRef<HTMLSelectElement>(null);\n const highlightSyncKeyRef = useRef('');\n const currentSearchQuery =\n searchQuery !== undefined ? searchQuery : uncontrolledSearchQuery;\n const selectedValues = isControlled\n ? normalizeSelectValues(value)\n : uncontrolledValues;\n const selectedValue = selectedValues[0] ?? '';\n const optionLookup = new Map(\n flatOptions.map((option) => [option.value, option]),\n );\n const selectedOption = optionLookup.get(selectedValue) ?? null;\n const placeholderTextColor = 'var(--theme-textLight)';\n const hasSelection = isMultiSelect\n ? selectedValues.length > 0\n : selectedValue !== '';\n const displayLabel = hasSelection\n ? isMultiSelect\n ? selectedValues\n .map((currentValue) => {\n const option = optionLookup.get(currentValue);\n return option\n ? getTextContent(option.label).trim() || option.value\n : currentValue;\n })\n .join(', ')\n : (selectedOption?.label ?? selectedValue)\n : null;\n const displayContent = displayLabel ?? placeholder ?? '\\u00A0';\n const visibleGroups =\n hasFilter && filterOptions\n ? filterSelectGroups(groups, currentSearchQuery)\n : groups;\n const visibleOptions = visibleGroups.flatMap((group) => group.options);\n const visibleEnabledOptions = visibleOptions.filter(\n (option) => !option.disabled,\n );\n const visibleEnabledValues = visibleEnabledOptions.map(\n (option) => option.value,\n );\n const selectedValuesKey = selectedValues.join('\\u0000');\n const visibleEnabledValuesKey = visibleEnabledValues.join('\\u0000');\n const indicatorOffset = getSelectIndicatorOffset(size);\n const controlTextNudgeStyle = getSelectTextNudgeStyle();\n const listboxId = `${resolvedId}-listbox`;\n const searchInputId = `${resolvedId}-search`;\n const scrollbarThumbColor = 'var(--theme-secondary)';\n const scrollbarThumbHoverColor = 'var(--theme-textLight)';\n const highlightedOption =\n visibleOptions.find((option) => option.value === highlightedValue) ?? null;\n const canOpenMenu = allowOpenWithoutOptions || flatOptions.length > 0;\n const isTriggerDisabled = disabled || !canOpenMenu;\n const buttonPassthroughProps = Object.fromEntries(\n Object.entries(rest).filter(\n ([key]) => key.startsWith('aria-') || key.startsWith('data-'),\n ),\n );\n const floatingPlaceholder =\n typeof placeholder === 'string' && placeholder !== ''\n ? placeholder\n : undefined;\n\n const triggerClassName = cx(\n 'peer relative m-0 box-border flex w-full min-w-0 items-center justify-between gap-3',\n 'rounded-2xl border border-solid appearance-none',\n 'bg-[var(--theme-background)] outline-none',\n 'duration-150 text-left',\n error ? 'border-[var(--theme-negative)]' : 'border-transparent',\n !hasSelection && floatingPlaceholder\n ? 'text-transparent'\n : 'text-[var(--theme-text)]',\n isTriggerDisabled ? 'cursor-not-allowed' : 'cursor-pointer',\n );\n\n // When the option set changes and leaves uncontrolled values that no longer\n // exist, reconcile them during render. This is React's recommended\n // alternative to syncing via an effect; once reconciled the values are valid\n // so it does not run again.\n if (!isControlled && !preserveUnknownValues) {\n const invalidValues = uncontrolledValues.filter(\n (currentValue) =>\n !flatOptions.some((option) => option.value === currentValue),\n );\n\n if (invalidValues.length > 0) {\n const nextValues =\n defaultValue !== undefined\n ? normalizeSelectValues(defaultValue).filter((currentValue) =>\n flatOptions.some((option) => option.value === currentValue),\n )\n : isMultiSelect\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n\n setUncontrolledValues(nextValues);\n setHighlightedValue(nextValues[0] ?? enabledOptions[0]?.value ?? '');\n }\n }\n\n // Reset placement when the menu opens so it stays hidden until the rAF\n // measurement resolves it. Adjusting during render is React's recommended\n // alternative to resetting via an effect on close.\n const [wasOpenForPlacement, setWasOpenForPlacement] = useState(isOpen);\n if (isOpen !== wasOpenForPlacement) {\n setWasOpenForPlacement(isOpen);\n if (isOpen) {\n setIsPlacementResolved(false);\n }\n }\n\n useEffect(() => {\n if (!isOpen) {\n highlightSyncKeyRef.current = '';\n return;\n }\n\n const nextHighlightSyncKey = `${selectedValuesKey}\\u0001${visibleEnabledValuesKey}`;\n\n if (highlightSyncKeyRef.current === nextHighlightSyncKey) {\n return;\n }\n\n highlightSyncKeyRef.current = nextHighlightSyncKey;\n\n const nextHighlightedValue =\n [...selectedValues]\n .reverse()\n .find((currentValue) => visibleEnabledValues.includes(currentValue)) ??\n visibleEnabledOptions[0]?.value ??\n '';\n setHighlightedValue(nextHighlightedValue);\n }, [\n isOpen,\n selectedValuesKey,\n visibleEnabledValuesKey,\n selectedValues,\n visibleEnabledOptions,\n visibleEnabledValues,\n ]);\n\n useEffect(() => {\n if (!isOpen || !hasFilter) {\n return;\n }\n\n searchInputRef.current?.focus();\n }, [hasFilter, isOpen]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const frameId = window.requestAnimationFrame(() => {\n const triggerRect = buttonRef.current?.getBoundingClientRect();\n const menuElement = menuRef.current;\n\n if (!triggerRect || !menuElement) {\n setIsPlacementResolved(true);\n return;\n }\n\n const measuredMenuHeight = menuElement.getBoundingClientRect().height;\n const menuHeight = Math.min(\n measuredMenuHeight || menuElement.scrollHeight,\n MENU_MAX_HEIGHT,\n );\n const viewport = getViewportBounds();\n const availableBelow =\n viewport.bottom - triggerRect.bottom - MENU_OFFSET;\n const availableAbove = triggerRect.top - viewport.top - MENU_OFFSET;\n const nextPlacement: MenuPlacement =\n availableBelow < menuHeight && availableAbove >= menuHeight\n ? 'top'\n : 'bottom';\n const preferredTop = nextPlacement === 'top'\n ? triggerRect.top - menuHeight - MENU_OFFSET\n : triggerRect.bottom + MENU_OFFSET;\n const minimumTop = viewport.top + MENU_OFFSET;\n const maximumTop = Math.max(\n minimumTop,\n viewport.bottom - menuHeight - MENU_OFFSET,\n );\n\n setMenuRect({\n top: Math.min(Math.max(preferredTop, minimumTop), maximumTop),\n left: triggerRect.left,\n width: triggerRect.width,\n });\n setIsPlacementResolved(true);\n });\n\n return () => {\n window.cancelAnimationFrame(frameId);\n };\n }, [isOpen, visibleOptions.length]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handleScroll = (event: Event) => {\n if (\n menuRef.current &&\n event.target instanceof Node &&\n menuRef.current.contains(event.target)\n ) {\n return;\n }\n setIsOpen(false);\n };\n\n window.addEventListener('scroll', handleScroll, {\n capture: true,\n passive: true,\n });\n window.addEventListener('resize', handleScroll, {\n capture: true,\n passive: true,\n });\n window.visualViewport?.addEventListener('scroll', handleScroll);\n window.visualViewport?.addEventListener('resize', handleScroll);\n\n return () => {\n window.removeEventListener('scroll', handleScroll, { capture: true });\n window.removeEventListener('resize', handleScroll, { capture: true });\n window.visualViewport?.removeEventListener('scroll', handleScroll);\n window.visualViewport?.removeEventListener('resize', handleScroll);\n };\n }, [isOpen]);\n\n // Clear the uncontrolled search when the menu closes (adjust during render).\n if (\n !isOpen &&\n clearSearchOnClose &&\n searchQuery === undefined &&\n uncontrolledSearchQuery !== ''\n ) {\n setUncontrolledSearchQuery('');\n }\n\n // Notify a controlled parent to clear its search query on close. This effect\n // only calls the parent callback (an external sync) — no local setState.\n useEffect(() => {\n if (isOpen || !clearSearchOnClose || currentSearchQuery === '') {\n return;\n }\n\n onSearchQueryChange?.('');\n }, [clearSearchOnClose, currentSearchQuery, isOpen, onSearchQueryChange]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n if (shellRef.current?.contains(event.target as Node)) {\n return;\n }\n\n if (menuRef.current?.contains(event.target as Node)) {\n return;\n }\n\n setIsOpen(false);\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n };\n }, [isOpen]);\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n const form = hiddenSelectRef.current?.form;\n\n if (!form) {\n return;\n }\n\n const handleReset = () => {\n queueMicrotask(() => {\n const nextValues =\n defaultValue !== undefined\n ? normalizeSelectValues(defaultValue)\n : isMultiSelect\n ? []\n : enabledOptions[0]?.value\n ? [enabledOptions[0].value]\n : [];\n\n setUncontrolledValues(nextValues);\n setHighlightedValue(nextValues[0] ?? enabledOptions[0]?.value ?? '');\n setIsOpen(false);\n });\n };\n\n form.addEventListener('reset', handleReset);\n\n return () => {\n form.removeEventListener('reset', handleReset);\n };\n }, [defaultValue, enabledOptions, isControlled, isMultiSelect]);\n\n const syncHiddenSelect = (nextValues: string[]) => {\n const selectElement = hiddenSelectRef.current;\n\n if (!selectElement) {\n return;\n }\n\n if (isMultiSelect) {\n Array.from(selectElement.options).forEach((optionElement) => {\n optionElement.selected = nextValues.includes(optionElement.value);\n });\n } else {\n const descriptor = Object.getOwnPropertyDescriptor(\n HTMLSelectElement.prototype,\n 'value',\n );\n\n if (descriptor?.set) {\n descriptor.set.call(selectElement, nextValues[0] ?? '');\n } else {\n selectElement.value = nextValues[0] ?? '';\n }\n }\n\n selectElement.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n const updateMultiSelection = (nextValues: string[]) => {\n if (!isMultiSelect || disabled) {\n return;\n }\n\n if (!isControlled) {\n setUncontrolledValues(nextValues);\n }\n\n setHighlightedValue(\n nextValues[nextValues.length - 1] ?? enabledOptions[0]?.value ?? '',\n );\n syncHiddenSelect(nextValues);\n };\n\n const toggleVisibleSelection = (checked: boolean) => {\n if (!isMultiSelect || disabled || visibleEnabledValues.length === 0) {\n return;\n }\n\n const nextValues = checked\n ? Array.from(new Set([...selectedValues, ...visibleEnabledValues]))\n : selectedValues.filter(\n (currentValue) => !visibleEnabledValues.includes(currentValue),\n );\n\n updateMultiSelection(nextValues);\n };\n\n const commitSelection = (nextValue: string) => {\n if (disabled) {\n if (!isMultiSelect) {\n setIsOpen(false);\n }\n\n return;\n }\n\n if (isMultiSelect) {\n const nextValues = selectedValues.includes(nextValue)\n ? selectedValues.filter((currentValue) => currentValue !== nextValue)\n : [...selectedValues, nextValue];\n\n updateMultiSelection(nextValues);\n return;\n }\n\n if (nextValue === selectedValue) {\n setIsOpen(false);\n return;\n }\n\n if (!isControlled) {\n setUncontrolledValues([nextValue]);\n }\n\n setHighlightedValue(nextValue);\n setIsOpen(false);\n syncHiddenSelect([nextValue]);\n buttonRef.current?.focus();\n };\n\n const handleHiddenSelectChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const nextValues = isMultiSelect\n ? Array.from(\n event.currentTarget.selectedOptions,\n (option) => option.value,\n )\n : [event.currentTarget.value];\n\n if (!isControlled) {\n setUncontrolledValues(nextValues);\n }\n\n setHighlightedValue(\n nextValues[nextValues.length - 1] ?? enabledOptions[0]?.value ?? '',\n );\n onChange?.(event);\n };\n\n const visibleSelectedCount = visibleEnabledValues.filter((currentValue) =>\n selectedValues.includes(currentValue),\n ).length;\n const hasSomeVisibleSelected =\n visibleSelectedCount > 0 &&\n visibleSelectedCount < visibleEnabledValues.length;\n const hasAllVisibleSelected =\n visibleEnabledValues.length > 0 &&\n visibleSelectedCount === visibleEnabledValues.length;\n const canToggleVisibleSelection =\n !disabled && visibleEnabledValues.length > 0;\n const bulkToggleControl = isMultiSelect ? (\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-label=\"Toggle all visible options\"\n aria-checked={\n hasAllVisibleSelected ? true : hasSomeVisibleSelected ? 'mixed' : false\n }\n disabled={!canToggleVisibleSelection}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={(event) => {\n event.stopPropagation();\n toggleVisibleSelection(!hasAllVisibleSelected);\n }}\n className={cx(\n 'm-0 inline-flex h-5 w-5 shrink-0 items-center justify-center border-0 bg-transparent p-0',\n canToggleVisibleSelection\n ? 'cursor-pointer opacity-100'\n : 'cursor-not-allowed opacity-45',\n )}\n >\n <CheckboxIndicator\n checked={hasAllVisibleSelected}\n indeterminate={hasSomeVisibleSelected}\n disabled={!canToggleVisibleSelection}\n />\n </button>\n ) : null;\n\n const moveHighlight = (direction: 1 | -1) => {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n const currentIndex = visibleEnabledOptions.findIndex(\n (option) => option.value === highlightedValue,\n );\n\n if (currentIndex === -1) {\n setHighlightedValue(\n direction === 1\n ? visibleEnabledOptions[0].value\n : visibleEnabledOptions[visibleEnabledOptions.length - 1].value,\n );\n return;\n }\n\n const nextIndex = Math.max(\n 0,\n Math.min(visibleEnabledOptions.length - 1, currentIndex + direction),\n );\n setHighlightedValue(visibleEnabledOptions[nextIndex].value);\n };\n\n const handleTriggerClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event as unknown as MouseEvent<HTMLSelectElement>);\n\n if (event.defaultPrevented || disabled || !canOpenMenu) {\n return;\n }\n\n setIsOpen((current) => !current);\n };\n\n const handleTriggerFocus = (event: FocusEvent<HTMLButtonElement>) => {\n onFocus?.(event as unknown as FocusEvent<HTMLSelectElement>);\n };\n\n const handleTriggerBlur = (event: FocusEvent<HTMLButtonElement>) => {\n const nextTarget = event.relatedTarget as Node | null;\n\n // The menu (including its search input) is portaled outside `shellRef`, so\n // focus moving into it is NOT a blur \"out\". Mirror the outside-pointerdown\n // handler and keep the menu open when focus lands in `menuRef` — otherwise\n // clicking the search box closes the dropdown before the user can type.\n if (\n !shellRef.current?.contains(nextTarget) &&\n !menuRef.current?.contains(nextTarget)\n ) {\n setIsOpen(false);\n }\n\n onBlur?.(event as unknown as FocusEvent<HTMLSelectElement>);\n };\n\n const handleTriggerKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event as unknown as KeyboardEvent<HTMLSelectElement>);\n\n if (event.defaultPrevented || disabled) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(\n selectedOption?.value ?? visibleEnabledOptions[0]?.value ?? '',\n );\n return;\n }\n\n moveHighlight(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(\n selectedOption?.value ??\n visibleEnabledOptions[visibleEnabledOptions.length - 1]?.value ??\n '',\n );\n return;\n }\n\n moveHighlight(-1);\n return;\n }\n\n if (event.key === 'Home' && isOpen) {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n event.preventDefault();\n setHighlightedValue(visibleEnabledOptions[0].value);\n return;\n }\n\n if (event.key === 'End' && isOpen) {\n if (visibleEnabledOptions.length === 0) {\n return;\n }\n\n event.preventDefault();\n setHighlightedValue(\n visibleEnabledOptions[visibleEnabledOptions.length - 1].value,\n );\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n\n if (!isOpen) {\n if (!canOpenMenu) {\n return;\n }\n\n setIsOpen(true);\n setHighlightedValue(\n selectedOption?.value ?? visibleEnabledOptions[0]?.value ?? '',\n );\n return;\n }\n\n if (highlightedOption && !highlightedOption.disabled) {\n commitSelection(highlightedOption.value);\n }\n\n return;\n }\n\n if (event.key === 'Escape' && isOpen) {\n event.preventDefault();\n setIsOpen(false);\n return;\n }\n\n if (event.key === 'Tab') {\n setIsOpen(false);\n }\n };\n\n const handleFilterKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n moveHighlight(1);\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n moveHighlight(-1);\n return;\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n\n if (highlightedOption && !highlightedOption.disabled) {\n commitSelection(highlightedOption.value);\n }\n\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n setIsOpen(false);\n buttonRef.current?.focus();\n return;\n }\n\n if (event.key === 'Tab') {\n setIsOpen(false);\n }\n };\n\n const emptyState = isLoading ? loadingMessage : emptyMessage;\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={error}\n htmlFor={resolvedId}\n required={rest.required}\n size={size}\n hasValue={hasSelection || isOpen}\n floatingPlaceholder={floatingPlaceholder}\n >\n <div ref={shellRef} className=\"relative w-full\">\n <button\n {...buttonPassthroughProps}\n id={resolvedId}\n ref={buttonRef}\n type=\"button\"\n className={cx(triggerClassName, className)}\n title={rest.title}\n disabled={isTriggerDisabled}\n autoFocus={autoFocus}\n tabIndex={rest.tabIndex}\n role=\"combobox\"\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-invalid={error ? true : rest['aria-invalid']}\n aria-required={rest.required}\n onClick={handleTriggerClick}\n onFocus={handleTriggerFocus}\n onBlur={handleTriggerBlur}\n onKeyDown={handleTriggerKeyDown}\n style={{\n ...getFieldSizeStyles(size),\n padding: getSelectControlPadding(size),\n ...style,\n ...(isTriggerDisabled ? { opacity: DISABLED_FIELD_OPACITY } : {}),\n }}\n >\n <span\n className=\"block min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap\"\n style={controlTextNudgeStyle}\n >\n {hasSelection ? (\n displayContent\n ) : (\n <span\n className={\n floatingPlaceholder ? '' : 'text-[var(--theme-textLight)]'\n }\n >\n {placeholder}\n </span>\n )}\n </span>\n <span\n aria-hidden=\"true\"\n className={cx(\n 'pointer-events-none absolute top-1/2 flex items-center justify-center',\n 'transition-[transform,color] duration-150',\n isTriggerDisabled\n ? 'text-[var(--theme-secondary)]'\n : 'text-[var(--theme-textLight)]',\n )}\n style={{\n right: indicatorOffset,\n transform: `translateY(-50%) rotate(${isOpen ? 180 : 0}deg)`,\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M5.75 7.75L10 12l4.25-4.25\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </button>\n\n <select\n {...rest}\n id={`${resolvedId}-native`}\n ref={hiddenSelectRef}\n name={rest.name}\n disabled={disabled}\n multiple={isMultiSelect}\n value={isMultiSelect ? selectedValues : selectedValue}\n onChange={handleHiddenSelectChange}\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"ui-kit-sr-only pointer-events-none opacity-0\"\n >\n {nativeOptions}\n </select>\n\n {isMounted && isOpen\n ? createPortal(\n <>\n <style>\n {`\n #${listboxId} {\n scrollbar-width: thin;\n scrollbar-color: ${scrollbarThumbColor} transparent;\n }\n\n #${listboxId}::-webkit-scrollbar {\n width: 8px;\n }\n\n #${listboxId}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n #${listboxId}::-webkit-scrollbar-thumb {\n background: ${scrollbarThumbColor};\n border-radius: 999px;\n border: 2px solid transparent;\n background-clip: padding-box;\n }\n\n #${listboxId}::-webkit-scrollbar-thumb:hover {\n background: ${scrollbarThumbHoverColor};\n background-clip: padding-box;\n }\n\n #${searchInputId}::placeholder {\n color: ${placeholderTextColor};\n opacity: 1;\n }\n `}\n </style>\n <div\n ref={menuRef}\n className={cx(\n // Portal: renderiza em document.body, fora da raiz do\n // componente. Sem a classe raiz do kit ele fica fora do\n // reset e da fonte do kit, e passa a herdar o CSS global do\n // app consumidor.\n UI_KIT_ROOT_CLASSNAME,\n 'fixed z-[99999] flex max-h-[280px] flex-col gap-1',\n 'overflow-hidden rounded-[20px] p-2',\n 'bg-[var(--theme-surface)]',\n 'border-[3px] border-solid border-[var(--theme-background)]',\n )}\n style={{\n top: menuRect.top,\n left: menuRect.left,\n width: menuRect.width,\n visibility: isPlacementResolved ? 'visible' : 'hidden',\n }}\n >\n {hasFilter ? (\n <div\n className={cx(\n 'flex shrink-0 items-center justify-start gap-2 px-1 pb-[10px] pt-1',\n )}\n >\n {bulkToggleControl}\n <div\n className=\"flex-1\"\n onClick={(event) => event.stopPropagation()}\n onMouseDown={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <Input\n id={searchInputId}\n ref={searchInputRef}\n type=\"text\"\n icon={<SearchIcon size={16} />}\n disableFloatingLabel\n value={currentSearchQuery}\n onChange={(event) => {\n const nextQuery = event.currentTarget.value;\n\n if (searchQuery === undefined) {\n setUncontrolledSearchQuery(nextQuery);\n }\n\n onSearchQueryChange?.(nextQuery);\n }}\n onKeyDown={handleFilterKeyDown}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n size=\"sm\"\n />\n </div>\n </div>\n ) : isMultiSelect ? (\n <div\n className={cx(\n 'flex shrink-0 items-center justify-start border-b px-1 pb-[10px] pt-1',\n )}\n >\n {bulkToggleControl}\n </div>\n ) : null}\n\n {hasFilter && <Separator />}\n\n <div\n id={listboxId}\n role=\"listbox\"\n aria-labelledby={resolvedId}\n aria-multiselectable={isMultiSelect || undefined}\n onScroll={\n onListboxScroll as\n | UIEventHandler<HTMLDivElement>\n | undefined\n }\n className=\"min-h-0 flex-1 overflow-y-auto overflow-x-hidden py-1\"\n >\n {visibleGroups.length === 0 ? (\n <div className=\"px-3 py-[14px] text-center text-[13px] text-[var(--theme-textLight)]\">\n {emptyState}\n </div>\n ) : (\n visibleGroups.map((group) => (\n <div\n key={group.key}\n className={cx(\n 'flex flex-col gap-0',\n group.label ? 'mt-1' : 'mt-0',\n )}\n >\n {group.label ? (\n <span\n className={cx(\n 'px-2 pb-0.5 pt-1.5 text-[11px] font-extrabold uppercase',\n 'font-sans',\n 'tracking-[0.08em] text-[var(--theme-textLight)]',\n )}\n >\n {group.label}\n </span>\n ) : null}\n {group.options.map((option) => {\n const isGroupedOption = Boolean(group.label);\n const isSelected = selectedValues.includes(\n option.value,\n );\n const isHighlighted =\n option.value === highlightedValue;\n const isActive = isSelected || isHighlighted;\n\n return (\n <div\n key={option.key}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n onMouseEnter={() => {\n if (!option.disabled) {\n setHighlightedValue(option.value);\n }\n }}\n onMouseMove={() => {\n if (\n !option.disabled &&\n highlightedValue !== option.value\n ) {\n setHighlightedValue(option.value);\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n if (!option.disabled) {\n commitSelection(option.value);\n }\n }}\n className={cx(\n 'w-full min-w-0 box-border py-0.5 leading-5',\n option.disabled\n ? 'cursor-not-allowed text-[var(--theme-secondary)]'\n : 'cursor-pointer',\n !option.disabled && isActive\n ? 'text-[var(--theme-onPrimary)]'\n : null,\n !option.disabled && !isActive\n ? 'text-[var(--theme-text)]'\n : null,\n )}\n >\n <div\n className={cx(\n 'flex w-full min-w-0 items-center justify-between gap-3 rounded-xl box-border',\n 'transition-[background-color,color] duration-150',\n OPTION_PADDING_CLASSNAMES[size],\n isGroupedOption\n ? 'pl-5 text-[13px]'\n : 'text-sm',\n isSelected\n ? 'bg-[var(--theme-primary)] font-semibold'\n : null,\n !isSelected && isHighlighted\n ? 'bg-[var(--theme-primary)]'\n : null,\n !isSelected && !isHighlighted\n ? 'bg-[var(--theme-surface)] font-medium'\n : null,\n )}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2.5\">\n {isMultiSelect ? (\n <CheckboxIndicator\n checked={isSelected}\n disabled={option.disabled}\n size={16}\n checkedColor={\n isActive\n ? 'var(--theme-onPrimary)'\n : 'var(--theme-primary)'\n }\n iconColor={\n isActive\n ? 'var(--theme-primary)'\n : 'var(--theme-onPrimary)'\n }\n uncheckedBorderColor={\n isActive\n ? 'var(--theme-onPrimary)'\n : 'var(--theme-secondary)'\n }\n uncheckedBackgroundColor=\"transparent\"\n />\n ) : null}\n <span className=\"block min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap\">\n {option.label}\n </span>\n </span>\n {!isMultiSelect && isSelected ? (\n <span\n aria-hidden=\"true\"\n className=\"flex shrink-0 items-center justify-center text-[var(--theme-onPrimary)]\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <path\n d=\"M5.75 10.25L8.5 13l5.75-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n ) : null}\n </div>\n </div>\n );\n })}\n </div>\n ))\n )}\n </div>\n {menuFooter ? (\n <>\n <Separator />\n <div className=\"shrink-0 px-2 pb-1 pt-2.5\">\n {menuFooter}\n </div>\n </>\n ) : null}\n </div>\n </>,\n document.body,\n )\n : null}\n </div>\n </ControlFrame>\n );\n}\n","import { isValidElement, type ReactNode } from 'react';\n\nimport type { ParsedGroup, SelectChildProps } from './types';\n\nexport function getTextContent(node: ReactNode): string {\n if (node == null || typeof node === 'boolean') {\n return '';\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n\n if (Array.isArray(node)) {\n return node.map(getTextContent).join('');\n }\n\n if (isValidElement<SelectChildProps>(node)) {\n return getTextContent(node.props.children);\n }\n\n return '';\n}\n\nexport function normalizeSelectValue(value: unknown): string {\n if (Array.isArray(value)) {\n return value.length > 0 ? normalizeSelectValue(value[0]) : '';\n }\n\n return value == null ? '' : String(value);\n}\n\nexport function normalizeSelectValues(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map((item) => normalizeSelectValue(item));\n }\n\n if (value == null) {\n return [];\n }\n\n return [normalizeSelectValue(value)];\n}\n\nexport function filterSelectGroups(groups: ParsedGroup[], query: string): ParsedGroup[] {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return groups;\n }\n\n return groups\n .map((group) => ({\n ...group,\n options: group.options.filter((option) => {\n const optionText = getTextContent(option.label).trim().toLowerCase();\n return optionText.includes(normalizedQuery);\n }),\n }))\n .filter((group) => group.options.length > 0);\n}","import { Children, isValidElement, type ReactNode } from 'react';\n\nimport type { ParsedGroup, ParsedOption, SelectChildProps } from './types';\nimport { getTextContent, normalizeSelectValue } from './utils';\n\nfunction buildOption(keyPrefix: string, index: number, props: SelectChildProps, groupDisabled = false) {\n const rawValue = props.value !== undefined ? props.value : getTextContent(props.children).trim();\n const normalizedValue = normalizeSelectValue(rawValue);\n\n return {\n key: `${keyPrefix}-${index}-${normalizedValue}`,\n value: normalizedValue,\n label: props.children ?? normalizedValue,\n disabled: groupDisabled || Boolean(props.disabled),\n };\n}\n\nexport function parseSelectChildren(children: ReactNode): ParsedGroup[] {\n const groups: ParsedGroup[] = [];\n const standaloneOptions: ParsedOption[] = [];\n let optionIndex = 0;\n let groupIndex = 0;\n\n const flushStandaloneOptions = () => {\n if (standaloneOptions.length === 0) {\n return;\n }\n\n groups.push({\n key: `standalone-${groups.length}`,\n options: [...standaloneOptions],\n });\n\n standaloneOptions.length = 0;\n };\n\n Children.forEach(children, (child) => {\n if (!isValidElement<SelectChildProps>(child)) {\n return;\n }\n\n if (child.type === 'option') {\n standaloneOptions.push(buildOption('option', optionIndex, child.props));\n optionIndex += 1;\n return;\n }\n\n if (child.type !== 'optgroup') {\n return;\n }\n\n flushStandaloneOptions();\n\n const groupOptions: ParsedOption[] = [];\n let groupOptionIndex = 0;\n\n Children.forEach(child.props.children, (optionChild) => {\n if (!isValidElement<SelectChildProps>(optionChild) || optionChild.type !== 'option') {\n return;\n }\n\n groupOptions.push(\n buildOption(\n `group-${groupIndex}-option`,\n groupOptionIndex,\n optionChild.props,\n Boolean(child.props.disabled),\n ),\n );\n\n groupOptionIndex += 1;\n });\n\n if (groupOptions.length > 0) {\n groups.push({\n key: `group-${groupIndex}`,\n label: child.props.label,\n options: groupOptions,\n });\n\n groupIndex += 1;\n }\n });\n\n flushStandaloneOptions();\n\n return groups;\n}","import type { ReactNode } from 'react';\n\nimport { SelectBase } from '../componentsBase/select/SelectBase';\nimport { parseSelectChildren } from '../componentsBase/select/childrenAdapter';\nimport type { SharedSelectProps } from '../componentsBase/select/types';\n\nexport type SelectOption = { label: string; value: string };\n\nexport interface SelectProps extends SharedSelectProps {\n children?: ReactNode;\n options?: SelectOption[];\n}\n\nexport function Select({ children, options, ...props }: SelectProps) {\n const actualChildren = options\n ? options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))\n : children;\n\n return <SelectBase {...props} groups={parseSelectChildren(actualChildren)} nativeOptions={actualChildren} />;\n}\n","import { useEffect, useMemo, useRef, useState, type ReactNode, type UIEvent } from 'react';\n\nimport { DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS, useUiKitTheme } from '../foundation';\nimport { SelectBase } from '../componentsBase/select/SelectBase';\nimport {\n buildNativeOptionsFromObjectOptions,\n buildParsedGroupsFromObjectOptions,\n dedupeSelectObjectOptions,\n getSelectObjectOptionKey,\n type SelectObjectOption,\n type SelectObjectOptionValue,\n} from '../componentsBase/select/objectOptionsAdapter';\nimport type { SharedSelectProps } from '../componentsBase/select/types';\n\nexport type SelectAsyncOptionValue = SelectObjectOptionValue;\nexport type SelectAsyncOption<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue> = SelectObjectOption<TValue>;\n\nexport interface SelectAsyncLoadContext {\n page: number;\n signal: AbortSignal;\n}\n\nexport interface SelectAsyncLoadResult<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue> {\n options: Array<SelectAsyncOption<TValue>>;\n hasMore?: boolean;\n}\n\ntype SelectAsyncSingleValue<TValue extends SelectAsyncOptionValue> = SelectAsyncOption<TValue> | null;\ntype SelectAsyncMultiValue<TValue extends SelectAsyncOptionValue> = Array<SelectAsyncOption<TValue>>;\ntype SelectAsyncValue<TValue extends SelectAsyncOptionValue> =\n | SelectAsyncSingleValue<TValue>\n | SelectAsyncMultiValue<TValue>;\n\nexport interface SelectAsyncProps<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue>\n extends Omit<SharedSelectProps, 'children' | 'value' | 'defaultValue' | 'onChange' | 'multiple'> {\n value?: SelectAsyncValue<TValue>;\n defaultValue?: SelectAsyncValue<TValue>;\n onChange?: (value: SelectAsyncValue<TValue>) => void;\n loadOptions: (\n query: string,\n loadedOptions: Array<SelectAsyncOption<TValue>>,\n context: SelectAsyncLoadContext,\n ) => Promise<SelectAsyncLoadResult<TValue>>;\n defaultOptions?: Array<SelectAsyncOption<TValue>>;\n fixedOptions?: Array<SelectAsyncOption<TValue>>;\n cacheUniqs?: ReadonlyArray<unknown>;\n searchDebounceMs?: number;\n loadingMessage?: ReactNode;\n loadErrorMessage?: ReactNode;\n emptyMessage?: ReactNode;\n loadingMoreMessage?: ReactNode;\n loadMoreHintMessage?: ReactNode;\n loadMoreThreshold?: number;\n searchPlaceholder?: string;\n}\n\nconst DEFAULT_LOAD_MORE_THRESHOLD = 24;\n\nconst normalizeAsyncValue = <TValue extends SelectAsyncOptionValue>(\n value: SelectAsyncValue<TValue> | undefined,\n isMulti: boolean,\n): Array<SelectAsyncOption<TValue>> => {\n if (value == null) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return isMulti ? [value] : [value];\n};\n\nconst areUnknownArraysEqual = (left: ReadonlyArray<unknown>, right: ReadonlyArray<unknown>): boolean => {\n if (left.length !== right.length) {\n return false;\n }\n\n return left.every((entry, index) => Object.is(entry, right[index]));\n};\n\nexport function SelectAsync<TValue extends SelectAsyncOptionValue = SelectAsyncOptionValue>({\n value,\n defaultValue,\n onChange,\n loadOptions,\n defaultOptions = [],\n fixedOptions = [],\n cacheUniqs = [],\n searchDebounceMs = DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS,\n loadingMessage = 'Loading options...',\n loadErrorMessage = 'Could not load options.',\n emptyMessage = 'No options found.',\n loadingMoreMessage = 'Loading more...',\n loadMoreHintMessage = 'Scroll to load more',\n loadMoreThreshold = DEFAULT_LOAD_MORE_THRESHOLD,\n isMulti,\n isFilterable,\n searchPlaceholder = 'Search options',\n ...props\n}: SelectAsyncProps<TValue>) {\n useUiKitTheme();\n const isMultiSelect = Boolean(isMulti);\n const isControlled = value !== undefined;\n const [internalSelectedOptions, setInternalSelectedOptions] = useState<Array<SelectAsyncOption<TValue>>>(() => {\n return normalizeAsyncValue(defaultValue, isMultiSelect);\n });\n const [remoteOptions, setRemoteOptions] = useState<Array<SelectAsyncOption<TValue>>>(defaultOptions);\n const [searchQuery, setSearchQuery] = useState('');\n const [nextPage, setNextPage] = useState(1);\n const [hasMore, setHasMore] = useState(true);\n const [isInitialLoading, setIsInitialLoading] = useState(false);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [loadError, setLoadError] = useState<ReactNode | null>(null);\n const selectedOptions = isControlled\n ? normalizeAsyncValue(value as SelectAsyncValue<TValue>, isMultiSelect)\n : internalSelectedOptions;\n const optionLookupRef = useRef(new Map<string, SelectAsyncOption<TValue>>());\n const loadOptionsRef = useRef(loadOptions);\n const remoteOptionsRef = useRef(remoteOptions);\n const cacheUniqsRef = useRef(cacheUniqs);\n const requestVersionRef = useRef(0);\n const activeControllerRef = useRef<AbortController | null>(null);\n\n loadOptionsRef.current = loadOptions;\n remoteOptionsRef.current = remoteOptions;\n\n const mergedOptions = useMemo(() => {\n const baseOptions = dedupeSelectObjectOptions<TValue>([\n ...fixedOptions,\n ...remoteOptions,\n ]);\n const knownOptionKeys = new Set(baseOptions.map((option) => getSelectObjectOptionKey(option)));\n const missingSelectedOptions = selectedOptions.filter((option) => {\n return !knownOptionKeys.has(getSelectObjectOptionKey(option));\n });\n\n return [...baseOptions, ...missingSelectedOptions];\n }, [fixedOptions, remoteOptions, selectedOptions]);\n\n useEffect(() => {\n const nextLookup = new Map<string, SelectAsyncOption<TValue>>();\n\n mergedOptions.forEach((option) => {\n nextLookup.set(getSelectObjectOptionKey(option), option);\n });\n\n optionLookupRef.current = nextLookup;\n }, [mergedOptions]);\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n setInternalSelectedOptions(normalizeAsyncValue(defaultValue, isMultiSelect));\n }, [defaultValue, isControlled, isMultiSelect]);\n\n useEffect(() => {\n if (areUnknownArraysEqual(cacheUniqsRef.current, cacheUniqs)) {\n return;\n }\n\n cacheUniqsRef.current = cacheUniqs;\n setRemoteOptions(defaultOptions);\n setSearchQuery('');\n setNextPage(1);\n setHasMore(true);\n setLoadError(null);\n }, [cacheUniqs, defaultOptions]);\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n requestVersionRef.current += 1;\n const currentRequestVersion = requestVersionRef.current;\n const controller = new AbortController();\n\n activeControllerRef.current?.abort();\n activeControllerRef.current = controller;\n setIsInitialLoading(true);\n setIsLoadingMore(false);\n setLoadError(null);\n\n void loadOptionsRef.current(searchQuery, [], { page: 1, signal: controller.signal })\n .then((result) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions(result.options);\n setHasMore(result.hasMore ?? result.options.length > 0);\n setNextPage(2);\n })\n .catch((error: unknown) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions([]);\n setHasMore(false);\n setNextPage(1);\n\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n setLoadError(loadErrorMessage);\n })\n .finally(() => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setIsInitialLoading(false);\n });\n }, searchDebounceMs);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [loadErrorMessage, searchDebounceMs, searchQuery, ...cacheUniqs]);\n\n useEffect(() => {\n return () => {\n activeControllerRef.current?.abort();\n };\n }, []);\n\n const loadNextPage = async () => {\n if (isInitialLoading || isLoadingMore || !hasMore) {\n return;\n }\n\n const controller = new AbortController();\n const currentRequestVersion = requestVersionRef.current;\n\n setIsLoadingMore(true);\n setLoadError(null);\n\n try {\n const result = await loadOptionsRef.current(searchQuery, remoteOptionsRef.current, {\n page: nextPage,\n signal: controller.signal,\n });\n\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setRemoteOptions((currentOptions) => {\n return dedupeSelectObjectOptions<TValue>([\n ...currentOptions,\n ...result.options,\n ]);\n });\n setHasMore(result.hasMore ?? result.options.length > 0);\n setNextPage((currentPage) => currentPage + 1);\n } catch (error: unknown) {\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n setLoadError(loadErrorMessage);\n } finally {\n setIsLoadingMore(false);\n }\n };\n\n const handleListboxScroll = (event: UIEvent<HTMLDivElement>) => {\n const element = event.currentTarget;\n const distanceToBottom = element.scrollHeight - element.scrollTop - element.clientHeight;\n\n if (distanceToBottom <= loadMoreThreshold) {\n void loadNextPage();\n }\n };\n\n const handleBaseChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const nextKeys = isMultiSelect\n ? Array.from(event.currentTarget.selectedOptions, (option) => option.value)\n : event.currentTarget.value\n ? [event.currentTarget.value]\n : [];\n const nextOptions = nextKeys\n .map((optionKey) => optionLookupRef.current.get(optionKey))\n .filter((option): option is SelectAsyncOption<TValue> => Boolean(option));\n const nextValue = isMultiSelect ? nextOptions : nextOptions[0] ?? null;\n\n if (!isControlled) {\n setInternalSelectedOptions(nextOptions);\n }\n\n onChange?.(nextValue);\n };\n\n const menuFooter = isLoadingMore || hasMore ? (\n <div\n aria-live=\"polite\"\n className=\"flex items-center gap-3 text-xs leading-[1.4] text-[var(--theme-textLight)]\"\n style={{ justifyContent: hasMore ? 'space-between' : 'center' }}\n >\n <span>{isLoadingMore ? loadingMoreMessage : hasMore ? loadMoreHintMessage : null}</span>\n {isLoadingMore ? (\n <span\n aria-hidden=\"true\"\n className=\"h-2 w-2 shrink-0 rounded-full bg-[var(--theme-primary)] opacity-80\"\n />\n ) : null}\n </div>\n ) : null;\n\n const resolvedEmptyMessage = loadError && remoteOptions.length === 0 ? loadError : emptyMessage;\n const resolvedValue = selectedOptions.map((option) => getSelectObjectOptionKey(option));\n\n return (\n <SelectBase\n {...props}\n isMulti={isMultiSelect}\n isFilterable={isFilterable ?? true}\n value={isMultiSelect ? resolvedValue : resolvedValue[0] ?? ''}\n onChange={handleBaseChange}\n groups={buildParsedGroupsFromObjectOptions<TValue>(mergedOptions)}\n nativeOptions={buildNativeOptionsFromObjectOptions<TValue>(mergedOptions)}\n emptyMessage={resolvedEmptyMessage}\n isLoading={isInitialLoading && mergedOptions.length === 0}\n loadingMessage={loadingMessage}\n searchPlaceholder={searchPlaceholder}\n searchQuery={searchQuery}\n onSearchQueryChange={setSearchQuery}\n allowOpenWithoutOptions={true}\n filterOptions={false}\n preserveUnknownValues={true}\n onListboxScroll={handleListboxScroll}\n menuFooter={menuFooter}\n />\n );\n}","import type { ReactNode } from 'react';\n\nimport type { ParsedGroup, ParsedOption } from './types';\nimport { getTextContent } from './utils';\n\nexport type SelectObjectOptionValue = string | number;\n\nexport interface SelectObjectOption<TValue extends SelectObjectOptionValue = SelectObjectOptionValue> {\n value: TValue;\n label: ReactNode;\n disabled?: boolean;\n group?: ReactNode;\n}\n\nconst getOptionKey = <TValue extends SelectObjectOptionValue>(option: SelectObjectOption<TValue>): string => {\n return String(option.value);\n};\n\nexport const dedupeSelectObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): Array<SelectObjectOption<TValue>> => {\n const seenKeys = new Set<string>();\n\n return options.filter((option) => {\n const optionKey = getOptionKey(option);\n\n if (seenKeys.has(optionKey)) {\n return false;\n }\n\n seenKeys.add(optionKey);\n return true;\n });\n};\n\nexport const buildParsedGroupsFromObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): ParsedGroup[] => {\n const standaloneOptions: ParsedOption[] = [];\n const groupedOptions = new Map<string, ParsedGroup>();\n\n options.forEach((option, index) => {\n const parsedOption: ParsedOption = {\n key: `async-option-${index}-${getOptionKey(option)}`,\n value: getOptionKey(option),\n label: option.label,\n disabled: Boolean(option.disabled),\n };\n\n if (option.group == null) {\n standaloneOptions.push(parsedOption);\n return;\n }\n\n const labelText = getTextContent(option.group).trim();\n const groupKey = labelText || `group-${index}`;\n const currentGroup = groupedOptions.get(groupKey);\n\n if (currentGroup) {\n currentGroup.options.push(parsedOption);\n return;\n }\n\n groupedOptions.set(groupKey, {\n key: `async-group-${groupKey}`,\n label: option.group,\n options: [parsedOption],\n });\n });\n\n const parsedGroups: ParsedGroup[] = [];\n\n if (standaloneOptions.length > 0) {\n parsedGroups.push({\n key: 'async-standalone',\n options: standaloneOptions,\n });\n }\n\n parsedGroups.push(...groupedOptions.values());\n\n return parsedGroups;\n};\n\nexport const buildNativeOptionsFromObjectOptions = <TValue extends SelectObjectOptionValue>(\n options: Array<SelectObjectOption<TValue>>,\n): ReactNode => {\n return options.map((option) => {\n const optionValue = getOptionKey(option);\n const optionText = getTextContent(option.label).trim() || optionValue;\n\n return (\n <option key={`native-${optionValue}`} value={optionValue} disabled={option.disabled}>\n {optionText}\n </option>\n );\n });\n};\n\nexport const getSelectObjectOptionKey = getOptionKey;","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\nimport { useId } from 'react';\n\nimport { cx, UI_KIT_ROOT_CLASSNAME, useUiKitTheme } from '../foundation';\n\nimport {\n getDefaultFeedbackIcon,\n getFeedbackContainerStyle,\n getFeedbackIconBadgeStyle,\n type FeedbackTone,\n} from './feedbackPrimitives';\n\nexport type ResultStateTone = FeedbackTone;\n\nexport interface ResultStateProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML' | 'title'> {\n tone?: ResultStateTone;\n icon?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n}\n\nexport function ResultState({\n tone = 'info',\n icon,\n title,\n description,\n action,\n className,\n style,\n ...rest\n}: ResultStateProps) {\n const theme = useUiKitTheme();\n const titleId = useId();\n const descriptionId = useId();\n const iconNode = icon === undefined ? getDefaultFeedbackIcon(tone, 28) : icon;\n const containerToneStyle = getFeedbackContainerStyle(theme, tone, 0.08);\n const iconToneStyle = getFeedbackIconBadgeStyle(theme, tone, 0.14);\n const descriptionStyle: CSSProperties = {\n maxWidth: '44ch',\n lineHeight: '1.6',\n color: 'var(--theme-textLight)',\n };\n\n return (\n <div\n {...rest}\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n 'rounded-2xl border border-dashed text-[var(--theme-text)] text-center',\n className,\n )}\n style={{\n ...containerToneStyle,\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 16,\n padding: '32px 24px',\n ...style,\n }}\n >\n {iconNode ? (\n <div\n aria-hidden=\"true\"\n className={UI_KIT_ROOT_CLASSNAME}\n style={{\n ...iconToneStyle,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 64,\n height: 64,\n borderRadius: 20,\n flexShrink: 0,\n }}\n >\n {iconNode}\n </div>\n ) : null}\n\n <div\n className={UI_KIT_ROOT_CLASSNAME}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: description ? 8 : 0,\n }}\n >\n <h2\n id={titleId}\n className={cx(UI_KIT_ROOT_CLASSNAME, 'font-bold text-2xl')}\n style={{ color: containerToneStyle.borderColor, lineHeight: 1.2 }}\n >\n {title}\n </h2>\n\n {description ? (\n <div id={descriptionId} className={cx(UI_KIT_ROOT_CLASSNAME, 'text-sm')} style={descriptionStyle}>\n {description}\n </div>\n ) : null}\n </div>\n\n {action ? <div className={UI_KIT_ROOT_CLASSNAME}>{action}</div> : null}\n </div>\n );\n}\n","import { useEffect, useMemo, useState } from 'react';\n\nimport { TableBase } from '../componentsBase/table/TableBase';\nimport type { SharedTableProps } from '../componentsBase/table/types';\nimport {\n DEFAULT_PAGE_SIZE,\n clampPage,\n resolveColumnSearchValue,\n sanitizePageSizeOptions,\n} from '../componentsBase/table/utils';\n\nexport interface TableProps<TItem> extends SharedTableProps<TItem> {\n items: Array<TItem>;\n}\n\nexport function Table<TItem>({\n items,\n desktopColumns,\n mobileColumns,\n defaultSearchValue = '',\n defaultPage = 1,\n defaultPageSize = DEFAULT_PAGE_SIZE,\n pageSizeOptions,\n searchable = true,\n onSearchValueChange,\n onPageChange,\n onPageSizeChange,\n ...props\n}: TableProps<TItem>) {\n const initialPageSizeOptions = useMemo(() => {\n return sanitizePageSizeOptions(pageSizeOptions, defaultPageSize);\n }, [defaultPageSize, pageSizeOptions]);\n const [searchValue, setSearchValue] = useState(defaultSearchValue);\n const [page, setPage] = useState(Math.max(1, Math.floor(defaultPage)));\n const [pageSize, setPageSize] = useState(initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE);\n\n useEffect(() => {\n if (initialPageSizeOptions.includes(pageSize)) {\n return;\n }\n\n const nextPageSize = initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE;\n setPageSize(nextPageSize);\n }, [initialPageSizeOptions, pageSize]);\n\n const filteredItems = useMemo(() => {\n if (!searchable) {\n return items;\n }\n\n const query = searchValue.trim().toLowerCase();\n\n if (query.length === 0) {\n return items;\n }\n\n const searchableColumns = [...desktopColumns, ...mobileColumns];\n\n return items.filter((item, index) => {\n return searchableColumns.some((column) => {\n return resolveColumnSearchValue(column, item, index).toLowerCase().includes(query);\n });\n });\n }, [desktopColumns, items, mobileColumns, searchable, searchValue]);\n\n const totalItems = filteredItems.length;\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize));\n const normalizedPage = clampPage(page, totalPages);\n\n useEffect(() => {\n if (normalizedPage === page) {\n return;\n }\n\n setPage(normalizedPage);\n onPageChange?.(normalizedPage);\n }, [normalizedPage, onPageChange, page]);\n\n const pageItems = useMemo(() => {\n const startIndex = (normalizedPage - 1) * pageSize;\n return filteredItems.slice(startIndex, startIndex + pageSize);\n }, [filteredItems, normalizedPage, pageSize]);\n\n return (\n <TableBase\n {...props}\n desktopColumns={desktopColumns}\n mobileColumns={mobileColumns}\n searchable={searchable}\n pageSizeOptions={pageSizeOptions}\n items={pageItems}\n searchValue={searchValue}\n page={normalizedPage}\n pageSize={pageSize}\n totalPages={totalPages}\n totalItems={totalItems}\n onSearchChange={(nextValue) => {\n setSearchValue(nextValue);\n setPage(1);\n onSearchValueChange?.(nextValue);\n onPageChange?.(1);\n }}\n onInternalPageChange={(nextPage) => {\n const normalizedNextPage = clampPage(nextPage, totalPages);\n setPage(normalizedNextPage);\n onPageChange?.(normalizedNextPage);\n }}\n onInternalPageSizeChange={(nextPageSize) => {\n setPageSize(nextPageSize);\n setPage(1);\n onPageSizeChange?.(nextPageSize);\n onPageChange?.(1);\n }}\n />\n );\n}","import {\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { Button } from \"../../components/Button\";\nimport { Input } from \"../../components/Input\";\nimport { Modal } from \"../../components/Modal\";\nimport { Separator } from \"../../components/Separator\";\nimport { Select } from \"../../components/Select\";\nimport {\n cx,\n getViewportBounds,\n UI_KIT_ROOT_CLASSNAME,\n useUiKitTheme,\n} from \"../../foundation\";\nimport type {\n TableAction,\n TableBaseProps,\n TableColumn,\n TableColumnAlign,\n} from \"./types\";\nimport {\n buildTableDownloadFileBaseName,\n buildTableDownloadMatrix,\n downloadTableAsCsv,\n downloadTableAsPdf,\n downloadTableAsXls,\n} from \"./downloads\";\nimport {\n DEFAULT_COLLAPSE_BELOW,\n DEFAULT_MAX_INLINE_ACTIONS,\n clampPage,\n getColumnKey,\n getRowId,\n hasRenderableContent,\n isActionDisabled,\n mergeTableLabels,\n resolveColumnContent,\n resolveTableActions,\n sanitizePageSizeOptions,\n} from \"./utils\";\n\ntype OverflowMenuProps = {\n label: string;\n children: ReactNode;\n};\n\nconst OVERFLOW_MENU_WIDTH = 220;\n\nfunction SettingsIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M12 15.2a3.2 3.2 0 1 0 0-6.4 3.2 3.2 0 0 0 0 6.4Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <path\n d={`\n M19.4 15a1 1 0 0 0 .2 1.1l.1.1a1.2 1.2 0 0 1 0 1.7l-1.2 1.2a1.2 1.2 0 0 1-1.7 0l-.1-.1a1 1 0 0\n 0-1.1-.2 1 1 0 0 0-.6.9V20a1.2 1.2 0 0 1-1.2 1.2h-1.6A1.2 1.2 0 0 1 11 20v-.2a1 1 0 0 0-.6-.9 1 1 0\n 0 0-1.1.2l-.1.1a1.2 1.2 0 0 1-1.7 0l-1.2-1.2a1.2 1.2 0 0 1 0-1.7l.1-.1a1 1 0 0 0 .2-1.1 1 1 0 0\n 0-.9-.6H4A1.2 1.2 0 0 1 2.8 13v-1.6A1.2 1.2 0 0 1 4 10.2h.2a1 1 0 0 0 .9-.6 1 1 0 0\n 0-.2-1.1l-.1-.1a1.2 1.2 0 0 1 0-1.7l1.2-1.2a1.2 1.2 0 0 1 1.7 0l.1.1a1 1 0 0 0 1.1.2 1 1 0 0 0\n .6-.9V4A1.2 1.2 0 0 1 11 2.8h1.6A1.2 1.2 0 0 1 13.8 4v.2a1 1 0 0 0 .6.9 1 1 0 0 0 1.1-.2l.1-.1a1.2\n 1.2 0 0 1 1.7 0l1.2 1.2a1.2 1.2 0 0 1 0 1.7l-.1.1a1 1 0 0 0-.2 1.1 1 1 0 0 0 .9.6h.2A1.2 1.2 0 0 1\n 21.2 11v1.6a1.2 1.2 0 0 1-1.2 1.2h-.2a1 1 0 0 0-.4.2Z\n `}\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction MoreActionsIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <circle cx=\"5\" cy=\"12\" r=\"1.8\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.8\" />\n <circle cx=\"19\" cy=\"12\" r=\"1.8\" />\n </svg>\n );\n}\n\nfunction ChevronIcon({ direction }: { direction: \"left\" | \"right\" }) {\n const isLeft = direction === \"left\";\n\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d={isLeft ? \"M15 6 9 12l6 6\" : \"m9 6 6 6-6 6\"}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction DoubleChevronIcon({ direction }: { direction: \"left\" | \"right\" }) {\n const isLeft = direction === \"left\";\n\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d={isLeft ? \"M18 6 12 12l6 6\" : \"m6 6 6 6-6 6\"}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d={isLeft ? \"M12 6 6 12l6 6\" : \"m12 6 6 6-6 6\"}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction OverflowMenu({ label, children }: OverflowMenuProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [menuPosition, setMenuPosition] = useState<{\n left: number;\n top: number;\n } | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const updateMenuPosition = () => {\n const triggerRect = buttonRef.current?.getBoundingClientRect();\n\n if (!triggerRect || typeof window === \"undefined\") {\n return;\n }\n\n const viewport = getViewportBounds();\n const menuHeight = menuRef.current?.getBoundingClientRect().height ?? 0;\n const preferredLeft = triggerRect.right - OVERFLOW_MENU_WIDTH - 25;\n const fallbackLeft = triggerRect.left - OVERFLOW_MENU_WIDTH;\n const minimumTop = viewport.top + 8;\n const maximumTop = Math.max(\n minimumTop,\n viewport.bottom - menuHeight - 8,\n );\n\n setMenuPosition({\n left: Math.max(\n viewport.left + 8,\n Math.min(\n viewport.right - OVERFLOW_MENU_WIDTH - 8,\n preferredLeft >= viewport.left + 8 ? preferredLeft : fallbackLeft,\n ),\n ),\n top: Math.min(\n Math.max(triggerRect.bottom - 20, minimumTop),\n maximumTop,\n ),\n });\n };\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n updateMenuPosition();\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target as Node;\n\n if (\n containerRef.current?.contains(target) ||\n menuRef.current?.contains(target)\n ) {\n return;\n }\n\n setIsOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n window.addEventListener(\"resize\", updateMenuPosition);\n window.addEventListener(\"scroll\", updateMenuPosition, true);\n window.visualViewport?.addEventListener(\"resize\", updateMenuPosition);\n window.visualViewport?.addEventListener(\"scroll\", updateMenuPosition);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n window.removeEventListener(\"resize\", updateMenuPosition);\n window.removeEventListener(\"scroll\", updateMenuPosition, true);\n window.visualViewport?.removeEventListener(\"resize\", updateMenuPosition);\n window.visualViewport?.removeEventListener(\"scroll\", updateMenuPosition);\n };\n }, [isOpen]);\n\n return (\n <div ref={containerRef} className=\"relative\">\n <button\n type=\"button\"\n ref={buttonRef}\n aria-label={label}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n onClick={(event) => {\n event.stopPropagation();\n\n if (!isOpen) {\n updateMenuPosition();\n }\n\n setIsOpen((currentValue) => !currentValue);\n }}\n className={[\n \"inline-flex h-[30px] w-[30px] items-center justify-center rounded-xl\",\n \"cursor-pointer border-0 bg-transparent text-[var(--theme-text)]\",\n \"transition-colors hover:text-[var(--theme-primary)]\",\n ].join(\" \")}\n >\n <MoreActionsIcon />\n </button>\n {isOpen && menuPosition && typeof document !== \"undefined\" ? (\n createPortal(\n <div\n ref={menuRef}\n role=\"menu\"\n aria-label={label}\n className={cx(\n // Portal: renderiza em document.body, fora da raiz do componente.\n UI_KIT_ROOT_CLASSNAME,\n \"z-50 flex flex-col gap-1.5\",\n \"border-[3px] border-solid border-[var(--theme-background)] bg-[var(--theme-surface)] p-2.5 shadow-none\",\n )}\n style={{\n borderRadius: 22,\n left: menuPosition.left,\n position: \"fixed\",\n top: menuPosition.top,\n width: OVERFLOW_MENU_WIDTH,\n zIndex: 1000,\n }}\n >\n {children}\n </div>,\n document.body,\n )\n ) : null}\n </div>\n );\n}\n\nconst getAlignClassName = (align: TableColumnAlign): string => {\n if (align === \"right\") return \"text-right\";\n if (align === \"center\") return \"text-center\";\n return \"text-left\";\n};\n\nexport function TableBase<TItem>({\n items,\n loading = false,\n error,\n onRetry,\n desktopColumns,\n mobileColumns,\n getRowId: getCustomRowId,\n onRowClick,\n actions,\n stickyActionsColumn = true,\n maxInlineActions = DEFAULT_MAX_INLINE_ACTIONS,\n actionsAlign = \"right\",\n collapseBelow = DEFAULT_COLLAPSE_BELOW,\n searchable = true,\n showSearch = true,\n showPagination = true,\n showRowsPerPage = true,\n showSettingsButton = true,\n pageSizeOptions,\n labels,\n translations,\n className,\n style,\n ariaLabel = \"Responsive data table\",\n searchValue,\n page,\n pageSize,\n totalPages,\n totalItems,\n onSearchChange,\n onInternalPageChange,\n onInternalPageSizeChange,\n}: TableBaseProps<TItem>) {\n useUiKitTheme();\n\n const scrollRegionId = useId().replace(/:/g, \"\");\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number | null>(null);\n const [isSettingsModalOpen, setIsSettingsModalOpen] = useState(false);\n const resolvedLabels = mergeTableLabels({\n ...(labels ?? {}),\n ...(translations ?? {}),\n });\n const normalizedPage = clampPage(page, totalPages);\n const normalizedPageSizeOptions = sanitizePageSizeOptions(\n pageSizeOptions,\n pageSize,\n );\n const isCollapsed =\n containerWidth !== null ? containerWidth < collapseBelow : false;\n const mobileGridColumnCount =\n containerWidth !== null && containerWidth < 520 ? 1 : 2;\n const canGoToPreviousPage = normalizedPage > 1;\n const canGoToNextPage = normalizedPage < Math.max(1, totalPages);\n const canGoToFirstPage = canGoToPreviousPage;\n const canGoToLastPage = canGoToNextPage;\n const shouldShowSearch = searchable && showSearch;\n const shouldShowPaginationControls = showPagination && totalPages > 1;\n const shouldShowRowsPerPageControl =\n showRowsPerPage && normalizedPageSizeOptions.length > 1;\n const shouldRenderFooter =\n shouldShowPaginationControls || shouldShowRowsPerPageControl;\n const hasRows = items.length > 0;\n const hasSearchValue = searchValue.trim().length > 0;\n const visibleInlineActions = Math.max(0, Math.floor(maxInlineActions));\n const actionsColumnMinWidth = Math.max(\n 112,\n visibleInlineActions * 38 + 48,\n );\n const actionsColumnSizeStyle: CSSProperties = {\n minWidth: actionsColumnMinWidth,\n width: actionsColumnMinWidth,\n };\n const paginationButtonStyle: CSSProperties = {\n height: 30,\n maxWidth: 30,\n minWidth: 30,\n padding: 5,\n width: 30,\n };\n const lastPageButtonStyle: CSSProperties = {\n ...paginationButtonStyle,\n maxWidth: totalPages > 100 ? 45 : 30,\n minWidth: totalPages > 100 ? 45 : 30,\n width: totalPages > 100 ? 45 : 30,\n };\n const shouldShowToolbarStatus =\n loading || (!loading && Boolean(error) && hasRows);\n const shouldRenderToolbar =\n shouldShowSearch || shouldShowToolbarStatus || showSettingsButton;\n const shouldRenderToolbarPrimaryGroup =\n shouldShowSearch || showSettingsButton;\n const visibleDownloadColumns = desktopColumns.filter(\n (column) => column.type !== \"actions\",\n );\n const totalItemCount = totalItems ?? items.length;\n const currentPageItemCount = items.length;\n const downloadMatrix = buildTableDownloadMatrix(\n visibleDownloadColumns,\n items,\n );\n const downloadFileBaseName = buildTableDownloadFileBaseName(\n ariaLabel,\n normalizedPage,\n );\n const hasRowClick = Boolean(onRowClick);\n const shouldStickActionsColumn = Boolean(actions) && stickyActionsColumn;\n\n const getStickyActionsCellStyle = (\n backgroundColor: string,\n backgroundImage?: CSSProperties[\"backgroundImage\"],\n isHeader = false,\n ): CSSProperties => ({\n position: \"sticky\",\n right: 0,\n zIndex: isHeader ? 4 : 2,\n backgroundColor,\n backgroundImage,\n backgroundClip: \"padding-box\",\n boxShadow: \"-10px 0 16px -14px var(--theme-shadow)\",\n borderLeft: \"1px solid var(--theme-secondary)\",\n });\n\n useEffect(() => {\n const element = containerRef.current;\n\n if (!element) {\n return;\n }\n\n const setWidthFromElement = (nextWidth?: number) => {\n const measuredWidth = nextWidth ?? element.getBoundingClientRect().width;\n setContainerWidth(measuredWidth > 0 ? measuredWidth : null);\n };\n\n setWidthFromElement();\n\n if (typeof ResizeObserver === \"undefined\") {\n const handleResize = () => {\n setWidthFromElement(getViewportBounds().width);\n };\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }\n\n const observer = new ResizeObserver((entries) => {\n const [entry] = entries;\n setWidthFromElement(entry?.contentRect.width);\n });\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const handleDownloadCsv = () => {\n downloadTableAsCsv(downloadMatrix, downloadFileBaseName);\n };\n\n const handleDownloadXls = () => {\n downloadTableAsXls(downloadMatrix, downloadFileBaseName);\n };\n\n const handleDownloadPdf = () => {\n downloadTableAsPdf(\n downloadMatrix,\n downloadFileBaseName,\n String(ariaLabel),\n normalizedPage,\n totalPages,\n );\n };\n\n const renderActionButton = (\n action: TableAction<TItem>,\n item: TItem,\n rowIndex: number,\n appearance: \"inline\" | \"menu\",\n onAfterClick?: () => void,\n ) => {\n const disabled = isActionDisabled(action, item, rowIndex);\n const tone = action.tone ?? \"default\";\n const iconOnly = appearance === \"inline\" && action.icon != null;\n const isMenuAction = appearance === \"menu\";\n\n return (\n <button\n key={action.id ?? `${action.label}-${rowIndex}`}\n type=\"button\"\n role={appearance === \"menu\" ? \"menuitem\" : undefined}\n disabled={disabled}\n title={action.label}\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n\n if (disabled) {\n return;\n }\n\n action.onClick(item, rowIndex);\n onAfterClick?.();\n }}\n className={cx(\n \"box-border inline-flex items-center rounded-xl border-0 text-[13px] leading-4\",\n \"cursor-pointer bg-transparent transition-colors disabled:cursor-not-allowed disabled:opacity-50\",\n tone === \"danger\"\n ? \"text-[var(--theme-negative)]\"\n : \"text-[var(--theme-text)]\",\n tone === \"danger\"\n ? \"hover:text-[var(--theme-negative)]\"\n : \"hover:text-[var(--theme-primary)]\",\n iconOnly && !isMenuAction\n ? \"h-[30px] w-[30px] justify-center p-0\"\n : \"h-[30px] gap-2 px-2.5\",\n isMenuAction\n ? \"h-[34px] w-full justify-start gap-2.5 px-3\"\n : \"justify-center\",\n )}\n >\n {action.icon}\n {appearance === \"menu\" || !iconOnly ? (\n <span>{action.label}</span>\n ) : null}\n </button>\n );\n };\n\n const renderActions = (item: TItem, rowIndex: number) => {\n const resolvedActions = resolveTableActions(actions, item, rowIndex);\n\n if (resolvedActions.length === 0) {\n return null;\n }\n\n const inlineActions = resolvedActions.slice(0, visibleInlineActions);\n const overflowActions = resolvedActions.slice(visibleInlineActions);\n\n return (\n <div\n className={cx(\n \"flex w-full min-w-max flex-nowrap items-center gap-2\",\n // No card mobile as ações ficam sempre à direita: `actionsAlign` é do\n // alinhamento dentro da coluna, que só existe no layout de tabela.\n actionsAlign === \"center\" && !isCollapsed\n ? \"justify-center\"\n : \"justify-end\",\n )}\n >\n {inlineActions.map((action) =>\n renderActionButton(action, item, rowIndex, \"inline\"),\n )}\n {overflowActions.length > 0 ? (\n <OverflowMenu label={resolvedLabels.actionsMenuLabel}>\n {overflowActions.map((action) =>\n renderActionButton(action, item, rowIndex, \"menu\"),\n )}\n </OverflowMenu>\n ) : null}\n </div>\n );\n };\n\n const renderDesktopCell = (\n column: TableColumn<TItem>,\n item: TItem,\n rowIndex: number,\n columnIndex: number,\n ) => {\n const content = resolveColumnContent(column, item, rowIndex);\n const align =\n column.align ?? (column.type === \"actions\" ? \"right\" : \"left\");\n\n return (\n <td\n key={`${getColumnKey(column, columnIndex)}-${rowIndex}`}\n colSpan={column.colSpan}\n className={[\n \"border-b border-[var(--theme-background)] px-2.5 py-2.5\",\n \"align-middle text-[12px] font-normal leading-[1.3] text-[var(--theme-text)]\",\n getAlignClassName(align),\n ].join(\" \")}\n style={{\n width: column.width,\n minWidth: column.minWidth,\n }}\n >\n {hasRenderableContent(content) ? (\n content\n ) : (\n <span className=\"text-[var(--theme-textLight)]\">-</span>\n )}\n </td>\n );\n };\n\n const renderEmptyState = () => {\n const message = error\n ? error\n : loading\n ? resolvedLabels.loadingMessage\n : hasSearchValue\n ? resolvedLabels.noResultsMessage\n : resolvedLabels.emptyMessage;\n\n return (\n <div\n className={[\n \"flex min-h-[220px] flex-col items-center justify-center gap-3 rounded-[20px]\",\n \"border border-dashed border-[var(--theme-background)] bg-[var(--theme-surface)]\",\n \"p-6 text-center text-[var(--theme-text)] shadow-none\",\n ].join(\" \")}\n >\n <strong className=\"text-base\">{message}</strong>\n {error && onRetry ? (\n <Button variant=\"secondary\" onClick={onRetry}>\n {resolvedLabels.retryLabel}\n </Button>\n ) : null}\n </div>\n );\n };\n\n return (\n <div\n ref={containerRef}\n className={cx(\n UI_KIT_ROOT_CLASSNAME,\n \"flex w-full max-w-full min-w-0 flex-col gap-4 rounded-[24px]\",\n \"box-border bg-[var(--theme-surface)] text-[var(--theme-text)]\",\n className,\n )}\n style={style}\n >\n {shouldRenderToolbar ? (\n <div className=\"flex min-w-0 flex-wrap items-center justify-between gap-3\">\n {shouldRenderToolbarPrimaryGroup ? (\n <div\n className={cx(\n \"flex min-w-0 items-center gap-2.5\",\n shouldShowSearch ? \"flex-[1_1_260px]\" : \"ml-auto flex-none\",\n )}\n >\n {shouldShowSearch ? (\n // Wrapper carries the toolbar flex sizing. Applying `flex` directly\n // to the Input would land on the inner <input>, which lives inside a\n // flex-column ControlFrame — there flex-basis becomes height and the\n // field grows absurdly tall.\n <div className=\"min-w-0 max-w-[360px] flex-[1_1_260px]\">\n <Input\n type=\"search\"\n value={searchValue}\n aria-label={resolvedLabels.searchPlaceholder}\n placeholder={resolvedLabels.searchPlaceholder}\n onChange={(event) =>\n onSearchChange(event.currentTarget.value)\n }\n />\n </div>\n ) : null}\n\n {showSettingsButton && !loading ? (\n <Button\n variant=\"secondary\"\n aria-label={resolvedLabels.settingsButtonLabel}\n title={resolvedLabels.settingsButtonLabel}\n onClick={() => setIsSettingsModalOpen(true)}\n className=\"shrink-0\"\n >\n <SettingsIcon />\n </Button>\n ) : null}\n </div>\n ) : null}\n\n {shouldShowToolbarStatus ? (\n <div\n className={cx(\n \"flex min-w-0 flex-wrap items-center justify-end gap-2.5\",\n shouldRenderToolbarPrimaryGroup ? \"ml-auto\" : \"\",\n )}\n >\n {loading ? (\n <span className=\"text-[13px] font-semibold text-[var(--theme-textLight)]\">\n {resolvedLabels.loadingMessage}\n </span>\n ) : null}\n {!loading && error && hasRows ? (\n <div className=\"inline-flex items-center gap-2.5\">\n <span className=\"text-[13px] font-semibold text-[var(--theme-negative)]\">\n {resolvedLabels.errorMessage}\n </span>\n {onRetry ? (\n <Button variant=\"ghost\" onClick={onRetry}>\n {resolvedLabels.retryLabel}\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n\n {!hasRows && (!loading || error) ? renderEmptyState() : null}\n\n {hasRows ? (\n isCollapsed ? (\n <div\n role=\"list\"\n aria-label={ariaLabel}\n className=\"flex min-w-0 flex-col gap-3.5\"\n >\n {items.map((item, rowIndex) => {\n const rowActions = renderActions(item, rowIndex);\n\n return (\n <article\n key={getRowId(item, rowIndex, getCustomRowId)}\n role=\"listitem\"\n className={[\n \"flex min-w-0 flex-col rounded-[20px]\",\n rowActions ? \"gap-1\" : \"gap-2.5\",\n \"border-[3px] border-solid border-[var(--theme-background)] bg-[var(--theme-surface)]\",\n \"px-3.5 py-3 shadow-none\",\n hasRowClick ? \"cursor-pointer\" : \"\",\n ].join(\" \")}\n onClick={onRowClick ? () => onRowClick(item, rowIndex) : undefined}\n >\n <div\n className={cx(\n \"grid min-w-0 gap-1.5\",\n mobileGridColumnCount === 1\n ? \"grid-cols-[minmax(0,1fr)]\"\n : \"grid-cols-[repeat(2,minmax(0,1fr))]\",\n )}\n >\n {mobileColumns.map((column, columnIndex) => {\n const content = resolveColumnContent(\n column,\n item,\n rowIndex,\n );\n const align =\n column.align ??\n (column.type === \"actions\" ? \"right\" : \"left\");\n const span = Math.max(\n 1,\n Math.min(column.colSpan ?? 1, mobileGridColumnCount),\n );\n\n return (\n <div\n key={`${getColumnKey(column, columnIndex)}-${rowIndex}`}\n className={cx(\n mobileGridColumnCount === 2\n ? \"grid min-w-0 grid-cols-[7rem_minmax(0,1fr)] items-center gap-1.5\"\n : \"flex min-w-0 items-center gap-1.5\",\n span === 2 ? \"col-span-2\" : \"col-span-1\",\n )}\n >\n {!column.hideLabel && column.label ? (\n <span\n className={[\n \"min-w-0 text-left text-[11px] font-bold\",\n mobileGridColumnCount === 2 ? \"\" : \"flex-[0_1_45%]\",\n \"uppercase tracking-[0.08em] text-[var(--theme-textLight)]\",\n \"[overflow-wrap:anywhere]\",\n ].join(\" \")}\n >\n {column.label}\n </span>\n ) : null}\n <div\n className={cx(\n \"min-w-0 max-w-full\",\n mobileGridColumnCount === 2 ? \"\" : \"flex-1\",\n )}\n >\n <div\n className={cx(\n \"w-full min-w-0 break-words text-[12px] font-normal leading-[1.35]\",\n \"text-[var(--theme-text)] [overflow-wrap:anywhere]\",\n getAlignClassName(align),\n )}\n >\n {hasRenderableContent(content) ? (\n content\n ) : (\n <span className=\"text-[var(--theme-textLight)]\">\n -\n </span>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n {rowActions ? (\n <div className=\"flex justify-end pt-1\">{rowActions}</div>\n ) : null}\n </article>\n );\n })}\n </div>\n ) : (\n <>\n <style>\n {`\n #${scrollRegionId} {\n scrollbar-width: thin;\n scrollbar-color: var(--theme-secondary) transparent;\n }\n\n #${scrollRegionId}::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-thumb {\n background: var(--theme-secondary);\n border-radius: 999px;\n border: 2px solid transparent;\n background-clip: padding-box;\n }\n\n #${scrollRegionId}::-webkit-scrollbar-thumb:hover {\n background: var(--theme-textLight);\n background-clip: padding-box;\n }\n `}\n </style>\n <div\n id={scrollRegionId}\n role=\"region\"\n aria-label={ariaLabel}\n className={cx(\n \"w-full max-w-full min-w-0 overflow-x-auto overflow-y-hidden\",\n \"rounded-[20px] border-2 border-solid border-[var(--theme-background)]\",\n \"bg-[var(--theme-surface)] shadow-none\",\n )}\n >\n <table className=\"w-max min-w-full max-w-none border-separate border-spacing-0\">\n <thead>\n <tr>\n {desktopColumns.map((column, columnIndex) => {\n const align =\n column.align ??\n (column.type === \"actions\" ? \"right\" : \"left\");\n\n return (\n <th\n key={getColumnKey(column, columnIndex)}\n colSpan={column.headerColSpan ?? column.colSpan}\n scope=\"col\"\n className={[\n \"whitespace-nowrap border-b border-[var(--theme-background)]\",\n \"bg-[var(--theme-background)] px-2.5 py-2 text-[11px] font-bold\",\n \"uppercase tracking-[0.08em] text-[var(--theme-textLight)]\",\n getAlignClassName(align),\n ].join(\" \")}\n style={{\n width: column.width,\n minWidth: column.minWidth,\n }}\n >\n {!column.hideLabel ? column.label : null}\n </th>\n );\n })}\n {actions ? (\n <th\n scope=\"col\"\n className={[\n \"whitespace-nowrap border-b border-[var(--theme-background)]\",\n \"bg-[var(--theme-background)] px-2.5 py-2.5 text-center text-[11px] font-bold\",\n \"uppercase tracking-[0.08em] text-[var(--theme-textLight)]\",\n ].join(\" \")}\n style={{\n ...actionsColumnSizeStyle,\n ...(shouldStickActionsColumn\n ? getStickyActionsCellStyle(\n \"var(--theme-background)\",\n undefined,\n true,\n )\n : {}),\n }}\n >\n {resolvedLabels.moreActionsLabel}\n </th>\n ) : null}\n </tr>\n </thead>\n <tbody>\n {items.map((item, rowIndex) => {\n const rowActions = renderActions(item, rowIndex);\n const isAlternateRow = rowIndex % 2 !== 0;\n const stickyRowBackgroundImage =\n rowIndex % 2 === 0\n ? undefined\n : \"linear-gradient(var(--theme-background), var(--theme-background))\";\n\n return (\n <tr\n key={getRowId(item, rowIndex, getCustomRowId)}\n className={[\n isAlternateRow\n ? \"bg-[var(--theme-background)]\"\n : \"bg-[var(--theme-surface)]\",\n hasRowClick ? \"cursor-pointer\" : \"\",\n ].join(\" \")}\n onClick={onRowClick ? () => onRowClick(item, rowIndex) : undefined}\n >\n {desktopColumns.map((column, columnIndex) => {\n return renderDesktopCell(\n column,\n item,\n rowIndex,\n columnIndex,\n );\n })}\n {actions ? (\n <td\n className={cx(\n \"border-b border-[var(--theme-background)] px-2.5 py-2.5 align-middle\",\n actionsAlign === \"center\"\n ? \"text-center\"\n : \"text-right\",\n )}\n style={{\n ...actionsColumnSizeStyle,\n ...(shouldStickActionsColumn\n ? getStickyActionsCellStyle(\n \"var(--theme-surface)\",\n stickyRowBackgroundImage,\n )\n : {}),\n }}\n >\n {rowActions}\n </td>\n ) : null}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </>\n )\n ) : null}\n\n {hasRows && shouldRenderFooter ? (\n <div className=\"-mt-2 flex flex-wrap items-center justify-between gap-3\">\n {shouldShowPaginationControls ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n variant=\"secondary\"\n onClick={() => onInternalPageChange(1)}\n disabled={!canGoToFirstPage}\n aria-label={resolvedLabels.firstPageLabel}\n style={paginationButtonStyle}\n >\n {1}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={() => onInternalPageChange(normalizedPage - 1)}\n disabled={!canGoToPreviousPage}\n aria-label={resolvedLabels.previousPageLabel}\n style={paginationButtonStyle}\n >\n <ChevronIcon direction=\"left\" />\n </Button>\n <Button\n variant=\"secondary\"\n disabled\n aria-label={`Page ${normalizedPage} of ${totalPages}`}\n style={paginationButtonStyle}\n >\n {normalizedPage}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={() => onInternalPageChange(normalizedPage + 1)}\n disabled={!canGoToNextPage}\n aria-label={resolvedLabels.nextPageLabel}\n style={paginationButtonStyle}\n >\n <ChevronIcon direction=\"right\" />\n </Button>\n <Button\n variant=\"secondary\"\n onClick={() => onInternalPageChange(totalPages)}\n disabled={!canGoToLastPage}\n aria-label={resolvedLabels.lastPageLabel}\n style={lastPageButtonStyle}\n >\n {totalPages}\n </Button>\n </div>\n ) : null}\n\n <div\n className={cx(\n \"flex items-center gap-2.5 text-[13px] text-[var(--theme-textLight)]\",\n shouldShowRowsPerPageControl ? \"ml-auto\" : \"\",\n )}\n >\n {shouldShowRowsPerPageControl ? (\n <>\n {resolvedLabels.rowsPerPageLabel ? (\n <span>{resolvedLabels.rowsPerPageLabel}</span>\n ) : null}\n <div className=\"w-[72px]\">\n <Select\n value={String(pageSize)}\n onChange={(event) =>\n onInternalPageSizeChange(\n Number(event.currentTarget.value),\n )\n }\n size=\"sm\"\n style={{ height: 30 }}\n options={normalizedPageSizeOptions.map((opt) => ({\n label: String(opt),\n value: String(opt),\n }))}\n />\n </div>\n </>\n ) : null}\n </div>\n </div>\n ) : null}\n\n <Modal\n isOpen={isSettingsModalOpen}\n onClose={() => setIsSettingsModalOpen(false)}\n title={resolvedLabels.settingsModalTitle}\n maxWidth={560}\n bodyStyle={{\n display: \"grid\",\n minWidth: 0,\n minHeight: 0,\n gap: 0,\n overflowY: \"auto\",\n paddingRight: 8,\n paddingTop: 8,\n }}\n >\n <section className=\"grid gap-3\">\n <strong className=\"text-sm text-[var(--theme-text)]\">\n {resolvedLabels.tableInfoSectionTitle}\n </strong>\n <div\n className={cx(\n \"grid grid-cols-4 gap-4 rounded-[var(--ui-radius,12px)] p-4\",\n \"border-2 border-[var(--theme-background)] bg-[var(--theme-surface)]\",\n )}\n >\n <div className=\"grid gap-1\">\n <span className=\"text-xs text-[var(--theme-textLight)]\">\n {resolvedLabels.totalItemsInfoLabel}\n </span>\n <strong className=\"font-medium text-[var(--theme-text)]\">\n {totalItemCount}\n </strong>\n </div>\n <div className=\"grid gap-1\">\n <span className=\"text-xs text-[var(--theme-textLight)]\">\n {resolvedLabels.totalPagesInfoLabel}\n </span>\n <strong className=\"font-medium text-[var(--theme-text)]\">\n {totalPages}\n </strong>\n </div>\n <div className=\"grid gap-1\">\n <span className=\"text-xs text-[var(--theme-textLight)]\">\n {resolvedLabels.currentPageItemsInfoLabel}\n </span>\n <strong className=\"font-medium text-[var(--theme-text)]\">\n {currentPageItemCount}\n </strong>\n </div>\n <div className=\"grid gap-1\">\n <span className=\"text-xs text-[var(--theme-textLight)]\">\n {resolvedLabels.currentPageInfoLabel}\n </span>\n <strong className=\"font-medium text-[var(--theme-text)]\">\n {normalizedPage}\n </strong>\n </div>\n </div>\n </section>\n\n <div className=\"py-[18px]\">\n <Separator />\n </div>\n\n <section className=\"grid gap-3\">\n <strong className=\"text-sm text-[var(--theme-text)]\">\n {resolvedLabels.downloadSectionTitle}\n </strong>\n <div className=\"flex flex-wrap gap-2.5\">\n <Button\n variant=\"secondary\"\n onClick={handleDownloadCsv}\n disabled={!hasRows}\n >\n {resolvedLabels.downloadCsvLabel}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={handleDownloadXls}\n disabled={!hasRows}\n >\n {resolvedLabels.downloadXlsLabel}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={handleDownloadPdf}\n disabled={!hasRows}\n >\n {resolvedLabels.downloadPdfLabel}\n </Button>\n </div>\n </section>\n </Modal>\n </div>\n );\n}\n","import { isValidElement, type ReactNode } from 'react';\n\nimport type {\n TableAction,\n TableActionSource,\n TableColumn,\n TableLabels,\n} from './types';\n\nexport const DEFAULT_COLLAPSE_BELOW = 768;\nexport const DEFAULT_MAX_INLINE_ACTIONS = 2;\nexport const DEFAULT_PAGE_SIZE = 10;\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50];\n\ntype ResolvedTableLabels = Required<Omit<TableLabels, 'pageLabel' | 'resultCountLabel'>> & {\n pageLabel: NonNullable<TableLabels['pageLabel']>;\n resultCountLabel: NonNullable<TableLabels['resultCountLabel']>;\n};\n\nconst DEFAULT_TABLE_LABELS: ResolvedTableLabels = {\n searchPlaceholder: 'Search rows',\n emptyMessage: 'No rows available.',\n noResultsMessage: 'No rows match the current search.',\n loadingMessage: 'Loading rows...',\n errorMessage: 'Could not load rows.',\n firstPageLabel: 'First page',\n previousPageLabel: 'Previous',\n nextPageLabel: 'Next',\n lastPageLabel: 'Last page',\n rowsPerPageLabel: '',\n actionsMenuLabel: 'More actions',\n moreActionsLabel: 'More actions',\n retryLabel: 'Retry',\n settingsButtonLabel: 'Table settings',\n settingsModalTitle: 'Table settings',\n tableInfoSectionTitle: 'Table details',\n totalPagesInfoLabel: 'Total pages',\n totalItemsInfoLabel: 'Total items',\n currentPageInfoLabel: 'Current page',\n currentPageItemsInfoLabel: 'Items in current page',\n downloadSectionTitle: 'Download current page',\n downloadCsvLabel: 'CSV',\n downloadXlsLabel: 'XLS',\n downloadPdfLabel: 'PDF',\n pageLabel: (page, totalPages) => `Page ${page} of ${totalPages}`,\n resultCountLabel: (start, end, totalItems) => `Showing ${start}-${end} of ${totalItems}`,\n};\n\nconst getNodeText = (node: ReactNode): string => {\n if (node == null || typeof node === 'boolean') {\n return '';\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n\n if (Array.isArray(node)) {\n return node.map((entry) => getNodeText(entry)).join(' ');\n }\n\n if (isValidElement(node)) {\n const element = node as React.ReactElement<{ children?: ReactNode }>;\n return getNodeText(element.props.children);\n }\n\n return '';\n};\n\nexport const normalizeTableText = (value: unknown): string => {\n if (value == null || typeof value === 'boolean') {\n return '';\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value);\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeTableText(entry)).join(' ');\n }\n\n if (isValidElement(value)) {\n return getNodeText(value);\n }\n\n return '';\n};\n\nconst resolveActionFlag = <TItem>(\n value: boolean | ((item: TItem, index: number) => boolean) | undefined,\n item: TItem,\n index: number,\n): boolean => {\n if (typeof value === 'function') {\n return value(item, index);\n }\n\n return Boolean(value);\n};\n\nexport const mergeTableLabels = (labels?: TableLabels): ResolvedTableLabels => ({\n searchPlaceholder: labels?.searchPlaceholder ?? DEFAULT_TABLE_LABELS.searchPlaceholder,\n emptyMessage: labels?.emptyMessage ?? DEFAULT_TABLE_LABELS.emptyMessage,\n noResultsMessage: labels?.noResultsMessage ?? DEFAULT_TABLE_LABELS.noResultsMessage,\n loadingMessage: labels?.loadingMessage ?? DEFAULT_TABLE_LABELS.loadingMessage,\n errorMessage: labels?.errorMessage ?? DEFAULT_TABLE_LABELS.errorMessage,\n firstPageLabel: labels?.firstPageLabel ?? DEFAULT_TABLE_LABELS.firstPageLabel,\n previousPageLabel: labels?.previousPageLabel ?? DEFAULT_TABLE_LABELS.previousPageLabel,\n nextPageLabel: labels?.nextPageLabel ?? DEFAULT_TABLE_LABELS.nextPageLabel,\n lastPageLabel: labels?.lastPageLabel ?? DEFAULT_TABLE_LABELS.lastPageLabel,\n rowsPerPageLabel: labels?.rowsPerPageLabel ?? DEFAULT_TABLE_LABELS.rowsPerPageLabel,\n actionsMenuLabel: labels?.actionsMenuLabel ?? DEFAULT_TABLE_LABELS.actionsMenuLabel,\n moreActionsLabel: labels?.moreActionsLabel ?? DEFAULT_TABLE_LABELS.moreActionsLabel,\n retryLabel: labels?.retryLabel ?? DEFAULT_TABLE_LABELS.retryLabel,\n settingsButtonLabel: labels?.settingsButtonLabel ?? DEFAULT_TABLE_LABELS.settingsButtonLabel,\n settingsModalTitle: labels?.settingsModalTitle ?? DEFAULT_TABLE_LABELS.settingsModalTitle,\n tableInfoSectionTitle: labels?.tableInfoSectionTitle ?? DEFAULT_TABLE_LABELS.tableInfoSectionTitle,\n totalPagesInfoLabel: labels?.totalPagesInfoLabel ?? DEFAULT_TABLE_LABELS.totalPagesInfoLabel,\n totalItemsInfoLabel: labels?.totalItemsInfoLabel ?? DEFAULT_TABLE_LABELS.totalItemsInfoLabel,\n currentPageInfoLabel: labels?.currentPageInfoLabel ?? DEFAULT_TABLE_LABELS.currentPageInfoLabel,\n currentPageItemsInfoLabel: labels?.currentPageItemsInfoLabel ?? DEFAULT_TABLE_LABELS.currentPageItemsInfoLabel,\n downloadSectionTitle: labels?.downloadSectionTitle ?? DEFAULT_TABLE_LABELS.downloadSectionTitle,\n downloadCsvLabel: labels?.downloadCsvLabel ?? DEFAULT_TABLE_LABELS.downloadCsvLabel,\n downloadXlsLabel: labels?.downloadXlsLabel ?? DEFAULT_TABLE_LABELS.downloadXlsLabel,\n downloadPdfLabel: labels?.downloadPdfLabel ?? DEFAULT_TABLE_LABELS.downloadPdfLabel,\n pageLabel: labels?.pageLabel ?? DEFAULT_TABLE_LABELS.pageLabel,\n resultCountLabel: labels?.resultCountLabel ?? DEFAULT_TABLE_LABELS.resultCountLabel,\n});\n\nexport const sanitizePageSizeOptions = (pageSizeOptions: number[] | undefined, pageSize: number): number[] => {\n const sourceOptions = (pageSizeOptions ?? DEFAULT_PAGE_SIZE_OPTIONS).filter((option) => {\n return Number.isFinite(option) && option > 0;\n });\n const nextOptions = sourceOptions.length > 0 ? sourceOptions : DEFAULT_PAGE_SIZE_OPTIONS;\n const normalizedPageSize = Number.isFinite(pageSize) && pageSize > 0 ? Math.floor(pageSize) : DEFAULT_PAGE_SIZE;\n\n return Array.from(new Set([...nextOptions, normalizedPageSize])).sort((left, right) => left - right);\n};\n\nexport const clampPage = (page: number, totalPages: number): number => {\n const normalizedTotal = Math.max(1, Math.floor(totalPages));\n const normalizedPage = Number.isFinite(page) ? Math.floor(page) : 1;\n\n return Math.min(Math.max(normalizedPage, 1), normalizedTotal);\n};\n\nexport const getColumnKey = <TItem>(column: TableColumn<TItem>, index: number): string => {\n if (column.id) {\n return column.id;\n }\n\n if (column.accessor) {\n return String(column.accessor);\n }\n\n return `column-${index}`;\n};\n\nexport const getRowId = <TItem>(\n item: TItem,\n index: number,\n getCustomRowId?: (item: TItem, index: number) => string,\n): string => {\n if (getCustomRowId) {\n return getCustomRowId(item, index);\n }\n\n const fallbackId = (item as { id?: unknown }).id;\n\n if (typeof fallbackId === 'string' || typeof fallbackId === 'number') {\n return String(fallbackId);\n }\n\n return `row-${index}`;\n};\n\nexport const resolveColumnContent = <TItem>(\n column: TableColumn<TItem>,\n item: TItem,\n index: number,\n): ReactNode => {\n if (column.Cell) {\n return column.Cell(item, index);\n }\n\n if (column.accessor) {\n return item[column.accessor] as ReactNode;\n }\n\n return null;\n};\n\nexport const resolveColumnSearchValue = <TItem>(\n column: TableColumn<TItem>,\n item: TItem,\n index: number,\n): string => {\n if (column.getSearchValue) {\n return column.getSearchValue(item, index);\n }\n\n if (column.accessor) {\n return normalizeTableText(item[column.accessor]);\n }\n\n return normalizeTableText(resolveColumnContent(column, item, index));\n};\n\nexport const resolveTableActions = <TItem>(\n actionsSource: TableActionSource<TItem> | undefined,\n item: TItem,\n index: number,\n): Array<TableAction<TItem>> => {\n if (!actionsSource) {\n return [];\n }\n\n const actions = typeof actionsSource === 'function' ? actionsSource(item, index) : actionsSource;\n\n return actions.filter((action) => !resolveActionFlag(action.hidden, item, index));\n};\n\nexport const isActionDisabled = <TItem>(action: TableAction<TItem>, item: TItem, index: number): boolean => {\n return resolveActionFlag(action.disabled, item, index);\n};\n\nexport const hasRenderableContent = (content: ReactNode): boolean => {\n if (content == null || typeof content === 'boolean') {\n return false;\n }\n\n if (typeof content === 'string') {\n return content.trim().length > 0;\n }\n\n if (typeof content === 'number') {\n return true;\n }\n\n if (Array.isArray(content)) {\n return content.some((entry) => hasRenderableContent(entry));\n }\n\n return true;\n};\n","import type { TableColumn } from './types';\nimport { normalizeTableText, resolveColumnContent } from './utils';\n\ntype TableDownloadMatrix = {\n headers: string[];\n rows: string[][];\n};\n\nconst escapeCsvValue = (value: string): string => {\n if (/[\",\\n;]/.test(value)) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n\n return value;\n};\n\nconst escapeHtml = (value: string): string => {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n};\n\nconst sanitizeFileName = (value: string): string => {\n return value\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '') || 'table';\n};\n\nconst normalizePdfText = (value: string): string => {\n return value\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\(/g, '\\\\(')\n .replace(/\\)/g, '\\\\)')\n .replace(/[^\\x20-\\x7E]/g, '?');\n};\n\nconst wrapPdfLine = (value: string, maxLength: number): string[] => {\n if (value.length <= maxLength) {\n return [value];\n }\n\n const words = value.split(' ');\n const lines: string[] = [];\n let currentLine = '';\n\n words.forEach((word) => {\n const nextLine = currentLine ? `${currentLine} ${word}` : word;\n\n if (nextLine.length <= maxLength) {\n currentLine = nextLine;\n return;\n }\n\n if (currentLine) {\n lines.push(currentLine);\n }\n\n currentLine = word;\n });\n\n if (currentLine) {\n lines.push(currentLine);\n }\n\n return lines;\n};\n\nconst downloadBlob = (blob: Blob, fileName: string) => {\n const objectUrl = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.href = objectUrl;\n link.download = fileName;\n link.rel = 'noopener';\n link.style.display = 'none';\n\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n window.setTimeout(() => {\n window.URL.revokeObjectURL(objectUrl);\n }, 0);\n};\n\nconst buildPdfDocument = (lines: string[]): string => {\n const pageWidth = 612;\n const pageHeight = 792;\n const marginX = 40;\n const marginTop = 752;\n const lineHeight = 14;\n const linesPerPage = 48;\n const pages: string[][] = [];\n\n for (let index = 0; index < lines.length; index += linesPerPage) {\n pages.push(lines.slice(index, index + linesPerPage));\n }\n\n const objects: string[] = [];\n const pageObjectNumbers: number[] = [];\n const contentObjectNumbers: number[] = [];\n const fontObjectNumber = 3;\n let nextObjectNumber = 4;\n\n pages.forEach(() => {\n pageObjectNumbers.push(nextObjectNumber);\n nextObjectNumber += 1;\n contentObjectNumbers.push(nextObjectNumber);\n nextObjectNumber += 1;\n });\n\n objects[1] = '<< /Type /Catalog /Pages 2 0 R >>';\n objects[2] = `<< /Type /Pages /Count ${pages.length} /Kids [${pageObjectNumbers.map((objectNumber) => `${objectNumber} 0 R`).join(' ')}] >>`;\n objects[fontObjectNumber] = '<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>';\n\n pages.forEach((pageLines, index) => {\n const content = `BT\\n/F1 10 Tf\\n${marginX} ${marginTop} Td\\n${lineHeight} TL\\n${pageLines.map((line, lineIndex) => {\n const normalizedLine = normalizePdfText(line);\n return `${lineIndex === 0 ? '' : 'T*\\n'}(${normalizedLine}) Tj`;\n }).join('\\n')}\\nET`;\n const contentObjectNumber = contentObjectNumbers[index];\n const pageObjectNumber = pageObjectNumbers[index];\n\n objects[contentObjectNumber] = `<< /Length ${content.length} >>\\nstream\\n${content}\\nendstream`;\n objects[pageObjectNumber] = `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${pageWidth} ${pageHeight}] /Resources << /Font << /F1 ${fontObjectNumber} 0 R >> >> /Contents ${contentObjectNumber} 0 R >>`;\n });\n\n let pdf = '%PDF-1.4\\n';\n const offsets: number[] = [0];\n\n for (let index = 1; index < objects.length; index += 1) {\n const objectBody = objects[index];\n\n if (!objectBody) {\n continue;\n }\n\n offsets[index] = pdf.length;\n pdf += `${index} 0 obj\\n${objectBody}\\nendobj\\n`;\n }\n\n const xrefStart = pdf.length;\n pdf += `xref\\n0 ${objects.length}\\n`;\n pdf += '0000000000 65535 f \\n';\n\n for (let index = 1; index < objects.length; index += 1) {\n pdf += `${String(offsets[index] ?? 0).padStart(10, '0')} 00000 n \\n`;\n }\n\n pdf += `trailer\\n<< /Size ${objects.length} /Root 1 0 R >>\\nstartxref\\n${xrefStart}\\n%%EOF`;\n\n return pdf;\n};\n\nexport const buildTableDownloadMatrix = <TItem>(\n columns: Array<TableColumn<TItem>>,\n items: Array<TItem>,\n): TableDownloadMatrix => {\n const exportableColumns = columns.filter((column) => {\n return column.type !== 'actions' && (column.accessor || column.Cell || column.label);\n });\n const headers = exportableColumns.map((column, index) => {\n const labelText = normalizeTableText(column.label).trim();\n\n if (labelText.length > 0) {\n return labelText;\n }\n\n if (column.accessor) {\n return String(column.accessor);\n }\n\n return `Column ${index + 1}`;\n });\n const rows = items.map((item, rowIndex) => {\n return exportableColumns.map((column) => {\n const searchValue = column.getSearchValue?.(item, rowIndex).trim();\n\n if (searchValue && searchValue.length > 0) {\n return searchValue;\n }\n\n const contentText = normalizeTableText(resolveColumnContent(column, item, rowIndex)).trim();\n\n if (contentText.length > 0) {\n return contentText;\n }\n\n if (column.accessor) {\n return normalizeTableText(item[column.accessor]).trim();\n }\n\n return '';\n });\n });\n\n return {\n headers,\n rows,\n };\n};\n\nexport const buildTableDownloadFileBaseName = (tableName: string, page: number): string => {\n return `${sanitizeFileName(tableName)}-page-${page}`;\n};\n\nexport const downloadTableAsCsv = (matrix: TableDownloadMatrix, fileBaseName: string) => {\n const lines = [\n matrix.headers.map((header) => escapeCsvValue(header)).join(','),\n ...matrix.rows.map((row) => row.map((value) => escapeCsvValue(value)).join(',')),\n ];\n const blob = new Blob([`\\uFEFF${lines.join('\\n')}`], { type: 'text/csv;charset=utf-8' });\n\n downloadBlob(blob, `${fileBaseName}.csv`);\n};\n\nexport const downloadTableAsXls = (matrix: TableDownloadMatrix, fileBaseName: string) => {\n const html = [\n '<html><head><meta charset=\"utf-8\" /></head><body><table border=\"1\">',\n '<thead><tr>',\n ...matrix.headers.map((header) => `<th>${escapeHtml(header)}</th>`),\n '</tr></thead><tbody>',\n ...matrix.rows.map((row) => {\n return `<tr>${row.map((value) => `<td>${escapeHtml(value)}</td>`).join('')}</tr>`;\n }),\n '</tbody></table></body></html>',\n ].join('');\n const blob = new Blob([html], { type: 'application/vnd.ms-excel;charset=utf-8' });\n\n downloadBlob(blob, `${fileBaseName}.xls`);\n};\n\nexport const downloadTableAsPdf = (\n matrix: TableDownloadMatrix,\n fileBaseName: string,\n title: string,\n page: number,\n totalPages: number,\n) => {\n const lines = [\n title,\n `Page ${page} of ${totalPages}`,\n `Rows in export: ${matrix.rows.length}`,\n '',\n ...wrapPdfLine(matrix.headers.join(' | '), 88),\n ...wrapPdfLine('-'.repeat(Math.min(88, Math.max(20, matrix.headers.join(' | ').length))), 88),\n ...matrix.rows.flatMap((row) => wrapPdfLine(row.join(' | '), 88)),\n ];\n const pdf = buildPdfDocument(lines);\n const blob = new Blob([pdf], { type: 'application/pdf' });\n\n downloadBlob(blob, `${fileBaseName}.pdf`);\n};","import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS } from '../foundation';\nimport { TableBase } from '../componentsBase/table/TableBase';\nimport type { SharedTableProps, TableAsyncLoadContext, TableAsyncLoadResult } from '../componentsBase/table/types';\nimport { DEFAULT_PAGE_SIZE, clampPage, sanitizePageSizeOptions } from '../componentsBase/table/utils';\n\nexport interface TableAsyncProps<TItem> extends SharedTableProps<TItem> {\n loadItems: (query: string, context: TableAsyncLoadContext) => Promise<TableAsyncLoadResult<TItem>>;\n cacheUniqs?: ReadonlyArray<unknown>;\n searchDebounceMs?: number;\n keepPreviousData?: boolean;\n}\n\nconst areUnknownArraysEqual = (left: ReadonlyArray<unknown>, right: ReadonlyArray<unknown>): boolean => {\n if (left.length !== right.length) {\n return false;\n }\n\n return left.every((entry, index) => Object.is(entry, right[index]));\n};\n\nexport function TableAsync<TItem>({\n loadItems,\n desktopColumns,\n mobileColumns,\n defaultSearchValue = '',\n defaultPage = 1,\n defaultPageSize = DEFAULT_PAGE_SIZE,\n pageSizeOptions,\n searchable = true,\n cacheUniqs = [],\n searchDebounceMs = DEFAULT_ASYNC_SEARCH_DEBOUNCE_MS,\n keepPreviousData = true,\n onSearchValueChange,\n onPageChange,\n onPageSizeChange,\n ...props\n}: TableAsyncProps<TItem>) {\n const initialPageSizeOptions = useMemo(() => {\n return sanitizePageSizeOptions(pageSizeOptions, defaultPageSize);\n }, [defaultPageSize, pageSizeOptions]);\n const [searchValue, setSearchValue] = useState(defaultSearchValue);\n const [debouncedSearchValue, setDebouncedSearchValue] = useState(defaultSearchValue);\n const [page, setPage] = useState(Math.max(1, Math.floor(defaultPage)));\n const [pageSize, setPageSize] = useState(initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE);\n const [items, setItems] = useState<Array<TItem>>([]);\n const [totalPages, setTotalPages] = useState(1);\n const [totalItems, setTotalItems] = useState<number | undefined>(undefined);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [reloadKey, setReloadKey] = useState(0);\n const loadItemsRef = useRef(loadItems);\n const cacheUniqsRef = useRef(cacheUniqs);\n const activeControllerRef = useRef<AbortController | null>(null);\n const requestVersionRef = useRef(0);\n\n loadItemsRef.current = loadItems;\n\n useEffect(() => {\n if (initialPageSizeOptions.includes(pageSize)) {\n return;\n }\n\n const nextPageSize = initialPageSizeOptions[0] ?? DEFAULT_PAGE_SIZE;\n setPageSize(nextPageSize);\n }, [initialPageSizeOptions, pageSize]);\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n setDebouncedSearchValue(searchValue);\n }, searchDebounceMs);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [searchDebounceMs, searchValue]);\n\n useEffect(() => {\n if (areUnknownArraysEqual(cacheUniqsRef.current, cacheUniqs)) {\n return;\n }\n\n cacheUniqsRef.current = cacheUniqs;\n setPage(1);\n setReloadKey((currentValue) => currentValue + 1);\n }, [cacheUniqs]);\n\n useEffect(() => {\n requestVersionRef.current += 1;\n const currentRequestVersion = requestVersionRef.current;\n const controller = new AbortController();\n\n activeControllerRef.current?.abort();\n activeControllerRef.current = controller;\n\n if (!keepPreviousData) {\n setItems([]);\n }\n\n setLoading(true);\n setError(null);\n\n void loadItemsRef.current(searchable ? debouncedSearchValue : '', {\n page,\n pageSize,\n signal: controller.signal,\n })\n .then((result) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setItems(result.items);\n setTotalPages(Math.max(1, result.totalPages));\n setTotalItems(result.totalItems);\n })\n .catch((loadError: unknown) => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n if (loadError instanceof Error && loadError.name === 'AbortError') {\n return;\n }\n\n setError(loadError instanceof Error ? loadError.message : 'Could not load rows.');\n })\n .finally(() => {\n if (controller.signal.aborted || currentRequestVersion !== requestVersionRef.current) {\n return;\n }\n\n setLoading(false);\n });\n }, [debouncedSearchValue, keepPreviousData, page, pageSize, reloadKey, searchable, ...cacheUniqs]);\n\n useEffect(() => {\n return () => {\n activeControllerRef.current?.abort();\n };\n }, []);\n\n const normalizedPage = clampPage(page, totalPages);\n\n useEffect(() => {\n if (normalizedPage === page) {\n return;\n }\n\n setPage(normalizedPage);\n onPageChange?.(normalizedPage);\n }, [normalizedPage, onPageChange, page]);\n\n return (\n <TableBase\n {...props}\n desktopColumns={desktopColumns}\n mobileColumns={mobileColumns}\n searchable={searchable}\n pageSizeOptions={pageSizeOptions}\n items={items}\n loading={loading}\n error={error}\n onRetry={() => setReloadKey((currentValue) => currentValue + 1)}\n searchValue={searchValue}\n page={normalizedPage}\n pageSize={pageSize}\n totalPages={totalPages}\n totalItems={totalItems}\n onSearchChange={(nextValue) => {\n setSearchValue(nextValue);\n setPage(1);\n onSearchValueChange?.(nextValue);\n onPageChange?.(1);\n }}\n onInternalPageChange={(nextPage) => {\n const normalizedNextPage = clampPage(nextPage, totalPages);\n setPage(normalizedNextPage);\n onPageChange?.(normalizedNextPage);\n }}\n onInternalPageSizeChange={(nextPageSize) => {\n setPageSize(nextPageSize);\n setPage(1);\n onPageSizeChange?.(nextPageSize);\n onPageChange?.(1);\n }}\n />\n );\n}","'use client';\n\nimport type { ReactNode, TextareaHTMLAttributes } from 'react';\n\nimport {\n cx,\n DISABLED_FIELD_OPACITY,\n getControlMetrics,\n type ControlSize,\n} from '../foundation';\nimport { ControlFrame } from './Input';\n\nexport interface TextareaProps extends Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'dangerouslySetInnerHTML'\n> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n size?: ControlSize;\n}\n\nexport function Textarea({\n label,\n hint,\n error,\n size = 'md',\n id,\n disabled,\n style,\n rows = 5,\n placeholder,\n ...rest\n}: TextareaProps) {\n const floatingPlaceholder =\n placeholder !== undefined && placeholder !== '' ? placeholder : undefined;\n const resolvedPlaceholder = placeholder ?? ' ';\n\n const placeholderClass = floatingPlaceholder\n ? 'placeholder-transparent'\n : 'placeholder-[var(--theme-textLight)]';\n\n const isPopulated =\n rest.value !== undefined && rest.value !== '' && rest.value !== null;\n\n const textarea = (\n <textarea\n {...rest}\n id={id}\n disabled={disabled}\n rows={rows}\n placeholder={resolvedPlaceholder}\n className={cx(\n 'peer w-full min-w-0 box-border resize-y rounded-2xl border border-solid bg-[var(--theme-background)]',\n 'text-[var(--theme-text)] outline-none transition-[border-color]',\n 'duration-150 disabled:cursor-not-allowed',\n placeholderClass,\n error ? 'border-[var(--theme-negative)]' : 'border-transparent',\n )}\n style={{\n boxShadow: error ? '0 0 0 3px var(--theme-negative)' : 'none',\n fontSize: getControlMetrics(size).fontSize,\n lineHeight: getControlMetrics(size).lineHeight,\n padding: `${getControlMetrics(size).paddingY + 2}px ${getControlMetrics(size).paddingX}px ${getControlMetrics(size).paddingY + 6}px`,\n ...style,\n ...(disabled ? { opacity: DISABLED_FIELD_OPACITY } : {}),\n }}\n />\n );\n\n return (\n <ControlFrame\n label={label}\n hint={hint}\n error={error}\n htmlFor={id}\n required={rest.required}\n alignLabel=\"top\"\n size={size}\n hasValue={isPopulated}\n floatingPlaceholder={floatingPlaceholder}\n >\n {textarea}\n </ControlFrame>\n );\n}\n","import './styles/ui-kit.css';\n\nimport { injectUiKitFonts } from './styles/fonts';\n\ninjectUiKitFonts();\n\nexport { Button, type ButtonProps } from './components/Button';\nexport { Alert, type AlertProps, type AlertTone } from './components/Alert';\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 { IconButton, type IconButtonProps, type IconButtonSize, type IconButtonVariant } from './components/IconButton';\nexport { Loading, type LoadingProps, type LoadingSize } from './components/Loading';\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 ResultState,\n type ResultStateProps,\n type ResultStateTone,\n} from './components/ResultState';\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 TableRowClickHandler,\n} from './componentsBase/table/types';\nexport type { ControlSize } from './foundation';\nexport { Textarea, type TextareaProps } from './components/Textarea';\nexport { useUiKitTheme, type UiKitTheme } from './foundation';\n"],"mappings":"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","names":["lato_latin_ext_400_normal_default","lato_latin_400_normal_default","lato_latin_ext_700_normal_default","lato_latin_700_normal_default","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","useEffect","useId","jsx","jsxs","useId","useEffect","useMemo","useEffect","useMemo","useState","jsx","jsxs","useMemo","useState","useEffect","_a","jsx","jsxs","useMemo","useEffect","useId","useRef","useState","Fragment","jsx","jsxs","useId","useRef","useState","useEffect","jsx","jsx","jsx","jsxs","jsx","useEffect","useId","useRef","useState","isValidElement","Fragment","jsx","jsxs","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","useId","jsx","jsxs","useId","useEffect","useMemo","useState","useEffect","useId","useRef","useState","createPortal","isValidElement","Fragment","jsx","jsxs","useState","useRef","useEffect","_a","_b","jsxs","jsx","createPortal","useId","Fragment","jsx","useMemo","useState","useEffect","_a","useEffect","useMemo","useRef","useState","jsx","areUnknownArraysEqual","useMemo","useState","useRef","useEffect","_a","jsx"]}