@scattered-light/loomiere-base-ui 0.16.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-TVZOM4US.js → chunk-2BFNETZZ.js} +10 -6
  3. package/dist/chunk-2BFNETZZ.js.map +1 -0
  4. package/dist/custom/index.d.ts +1 -1
  5. package/dist/custom/index.js +1 -1
  6. package/dist/design-system/components/SideNav/README.md +7 -1
  7. package/dist/design-system/components/SideNav/preview.html +1 -1
  8. package/dist/design-system/components/StatCard/README.md +2 -0
  9. package/dist/design-system/components/StatCard/preview.html +1 -1
  10. package/dist/design-system/components/bundle.js +6 -6
  11. package/dist/design-system/components/index.d.ts +1 -1
  12. package/dist/design-system/components/styles.css +96 -63
  13. package/dist/{index-CoS-HLC1.d.ts → index-ywBkS0AA.d.ts} +4 -0
  14. package/dist/index.d.ts +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/styles/components/Accordion.css +1 -1
  17. package/dist/styles/components/AlertDialog.css +1 -1
  18. package/dist/styles/components/Autocomplete.css +1 -1
  19. package/dist/styles/components/Avatar.css +1 -1
  20. package/dist/styles/components/Button.css +1 -1
  21. package/dist/styles/components/Checkbox.css +1 -1
  22. package/dist/styles/components/CheckboxGroup.css +1 -1
  23. package/dist/styles/components/Collapsible.css +1 -1
  24. package/dist/styles/components/Combobox.css +1 -1
  25. package/dist/styles/components/ContextMenu.css +1 -1
  26. package/dist/styles/components/Dialog.css +1 -1
  27. package/dist/styles/components/Drawer.css +1 -1
  28. package/dist/styles/components/Field.css +1 -1
  29. package/dist/styles/components/Fieldset.css +1 -1
  30. package/dist/styles/components/Form.css +1 -1
  31. package/dist/styles/components/Input.css +1 -1
  32. package/dist/styles/components/Menu.css +1 -1
  33. package/dist/styles/components/Menubar.css +1 -1
  34. package/dist/styles/components/Meter.css +1 -1
  35. package/dist/styles/components/NavigationMenu.css +1 -1
  36. package/dist/styles/components/NumberField.css +1 -1
  37. package/dist/styles/components/OTPField.css +1 -1
  38. package/dist/styles/components/Popover.css +1 -1
  39. package/dist/styles/components/PreviewCard.css +1 -1
  40. package/dist/styles/components/Progress.css +1 -1
  41. package/dist/styles/components/Radio.css +1 -1
  42. package/dist/styles/components/ScrollArea.css +1 -1
  43. package/dist/styles/components/Select.css +1 -1
  44. package/dist/styles/components/Separator.css +1 -1
  45. package/dist/styles/components/Slider.css +1 -1
  46. package/dist/styles/components/Switch.css +1 -1
  47. package/dist/styles/components/Tabs.css +1 -1
  48. package/dist/styles/components/Toast.css +1 -1
  49. package/dist/styles/components/Toggle.css +1 -1
  50. package/dist/styles/components/ToggleGroup.css +1 -1
  51. package/dist/styles/components/Toolbar.css +1 -1
  52. package/dist/styles/components/Tooltip.css +1 -1
  53. package/dist/styles/custom/AppBar.css +1 -1
  54. package/dist/styles/custom/Badge.css +1 -1
  55. package/dist/styles/custom/Collection.css +1 -1
  56. package/dist/styles/custom/CollectionPagination.css +1 -1
  57. package/dist/styles/custom/CollectionToolbar.css +1 -1
  58. package/dist/styles/custom/DataList.css +1 -1
  59. package/dist/styles/custom/DataTable.css +1 -1
  60. package/dist/styles/custom/DatePicker.css +1 -1
  61. package/dist/styles/custom/DescriptionList.css +4 -2
  62. package/dist/styles/custom/EditableList.css +1 -1
  63. package/dist/styles/custom/EmptyState.css +1 -1
  64. package/dist/styles/custom/ListDetail.css +1 -1
  65. package/dist/styles/custom/MoneyField.css +1 -1
  66. package/dist/styles/custom/PickerButton.css +1 -1
  67. package/dist/styles/custom/PickerSplit.css +1 -1
  68. package/dist/styles/custom/Sheet.css +1 -1
  69. package/dist/styles/custom/SideNav.css +10 -1
  70. package/dist/styles/custom/Splitter.css +1 -1
  71. package/dist/styles/custom/StatCard.css +23 -1
  72. package/dist/styles/custom/StatFigure.css +1 -1
  73. package/dist/styles/custom/Table.css +1 -1
  74. package/dist/styles/index.css +1 -1
  75. package/dist/styles/reset/accessibility.css +1 -1
  76. package/dist/styles/reset/reset-accessibility.css +1 -1
  77. package/dist/styles/reset/reset-tailwind.css +1 -1
  78. package/dist/styles/reset/reset.css +1 -1
  79. package/dist/styles/tailwind.css +1 -1
  80. package/package.json +2 -2
  81. package/dist/chunk-TVZOM4US.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/field.tsx","../src/components/number-field.tsx","../src/components/popover.tsx","../src/components/drawer.tsx","../src/custom/badge.tsx","../src/custom/money-field/money-utils.ts","../src/custom/money-field/money-context.ts","../src/custom/money-field/currency-select.tsx","../src/custom/money-field/money-field.tsx","../src/custom/date-picker/date-utils.ts","../src/custom/date-picker/use-calendar-grid.ts","../src/custom/date-picker/calendar.tsx","../src/custom/date-picker/date-presets.tsx","../src/custom/date-picker/date-picker.tsx","../src/custom/split/layout.ts","../src/custom/split/splitter.tsx","../src/custom/split/list-detail.tsx","../src/custom/sheet.tsx","../src/custom/stat-figure.tsx","../src/custom/stat-card.tsx","../src/custom/description-list.tsx","../src/custom/app-bar.tsx","../src/custom/picker-button.tsx","../src/custom/picker-split.tsx","../src/custom/side-nav.tsx","../src/custom/editable-list/editable-list.tsx"],"names":["React","BaseField","Error","Root","BaseNumberField","jsx","BasePopover","Description","Trigger","BaseDrawer","Backdrop","Popup","Title","Close","React2","Badge","formatMoney","React3","React4","MoneyFieldRoot","jsxs","MoneyFieldGroup","MoneyFieldInput","MoneyFieldAffix","MoneyFieldError","MoneyField","documentLocale","React5","React6","Calendar","React7","next","React8","DatePicker","Fragment","sum","sizeText","React9","SplitterRoot","content","SplitterPanel","panel","SplitterHandle","cssSize","ListDetailRoot","ListDetailList","ListDetailDetail","React11","Sheet","React12","StatFigure","React13","StatCard","React14","DescriptionList","DescriptionItem","React15","AppBar","AppBarSpacer","React16","PickerButton","React17","PickerSplit","PickerSplitMain","PickerSplitTrigger","React18","SideNav","SideNavItem","SideNavGroup","SideNavToggle","React19"],"mappings":"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","file":"chunk-TVZOM4US.js","sourcesContent":["import * as React from 'react';\nimport { Field as BaseField } from '@base-ui/react/field';\nimport { cnState } from '../utils/cn';\n\nconst Root = React.forwardRef<HTMLDivElement, React.ComponentProps<typeof BaseField.Root>>(\n function FieldRoot({ className, ...props }, ref) {\n return (\n <BaseField.Root\n ref={ref}\n {...props}\n className={(state) => cnState('FieldRoot', className, state)}\n />\n );\n },\n);\n\nconst Label = React.forwardRef<HTMLLabelElement, React.ComponentProps<typeof BaseField.Label>>(\n function FieldLabel({ className, ...props }, ref) {\n return (\n <BaseField.Label\n ref={ref}\n {...props}\n className={(state) => cnState('FieldLabel', className, state)}\n />\n );\n },\n);\n\nconst Description = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof BaseField.Description>\n>(function FieldDescription({ className, ...props }, ref) {\n return (\n <BaseField.Description\n ref={ref}\n {...props}\n className={(state) => cnState('FieldDescription', className, state)}\n />\n );\n});\n\nconst Error = React.forwardRef<HTMLDivElement, React.ComponentProps<typeof BaseField.Error>>(\n function FieldError({ className, ...props }, ref) {\n return (\n <BaseField.Error\n ref={ref}\n {...props}\n className={(state) => cnState('FieldError', className, state)}\n />\n );\n },\n);\n\nconst Control = React.forwardRef<HTMLInputElement, React.ComponentProps<typeof BaseField.Control>>(\n function FieldControl({ className, ...props }, ref) {\n return (\n <BaseField.Control\n ref={ref}\n {...props}\n className={(state) => cnState('FieldControl', className, state)}\n />\n );\n },\n);\n\n/** Only accepts `children` as a render function — no `className` in Base UI’s API. */\nconst Validity = BaseField.Validity;\n\nconst Item = React.forwardRef<HTMLDivElement, React.ComponentProps<typeof BaseField.Item>>(\n function FieldItem({ className, ...props }, ref) {\n return (\n <BaseField.Item\n ref={ref}\n {...props}\n className={(state) => cnState('', className, state)}\n />\n );\n },\n);\n\n/**\n * Base UI [Field](https://base-ui.com/react/components/field) with design-system field classes.\n */\nexport const Field = {\n Root,\n Label,\n Description,\n Error,\n Control,\n Validity,\n Item,\n};\n","import * as React from 'react';\nimport { NumberField as BaseNumberField } from '@base-ui/react/number-field';\nimport { cn } from '../utils/cn';\nimport { styledPart } from '../utils/styled-part';\n\nconst Root = styledPart<HTMLDivElement, React.ComponentProps<typeof BaseNumberField.Root>>(\n BaseNumberField.Root,\n 'NumberFieldRoot',\n 'NumberFieldRoot',\n);\nconst Group = styledPart<HTMLDivElement, React.ComponentProps<typeof BaseNumberField.Group>>(\n BaseNumberField.Group,\n 'NumberFieldGroup',\n 'NumberFieldGroup',\n);\nconst Input = styledPart<HTMLInputElement, React.ComponentProps<typeof BaseNumberField.Input>>(\n BaseNumberField.Input,\n 'NumberFieldInput',\n 'NumberFieldInput',\n);\nconst Increment = styledPart<HTMLButtonElement, React.ComponentProps<typeof BaseNumberField.Increment>>(\n BaseNumberField.Increment,\n 'NumberFieldIncrement',\n 'NumberFieldIncrement',\n);\nconst Decrement = styledPart<HTMLButtonElement, React.ComponentProps<typeof BaseNumberField.Decrement>>(\n BaseNumberField.Decrement,\n 'NumberFieldDecrement',\n 'NumberFieldDecrement',\n);\nconst ScrubArea = styledPart<HTMLSpanElement, React.ComponentProps<typeof BaseNumberField.ScrubArea>>(\n BaseNumberField.ScrubArea,\n 'NumberFieldScrubArea',\n 'NumberFieldScrubArea',\n);\n\nexport type NumberFieldLabelProps = Omit<React.ComponentProps<'label'>, 'htmlFor'> & {\n htmlFor: string;\n};\n\n/** The field label. Number field has no label part; this is the same text as {@link Field.Label}. */\nexport function NumberFieldLabel({ className, htmlFor, ...props }: NumberFieldLabelProps) {\n return <label htmlFor={htmlFor} className={cn('NumberFieldLabel', className)} {...props} />;\n}\n\n/**\n * Base UI [Number Field](https://base-ui.com/react/components/number-field) with design-system classes.\n * The input is Input, and the label is Field's label. Only the steppers are drawn here.\n */\nexport const NumberField = {\n Root,\n Group,\n Input,\n Increment,\n Decrement,\n ScrubArea,\n ScrubAreaCursor: BaseNumberField.ScrubAreaCursor,\n Label: NumberFieldLabel,\n};\n","import * as React from 'react';\nimport { Popover as BasePopover } from '@base-ui/react/popover';\nimport { buttonPart, styledPart } from '../utils/styled-part';\n\nconst Trigger = buttonPart<HTMLElement, React.ComponentProps<typeof BasePopover.Trigger>>(\n BasePopover.Trigger as React.ComponentType<\n React.ComponentProps<typeof BasePopover.Trigger> & React.RefAttributes<HTMLElement>\n >,\n 'PopoverTrigger',\n { partClass: 'PopoverTrigger', optIn: true },\n);\nconst Backdrop = styledPart<HTMLDivElement, React.ComponentProps<typeof BasePopover.Backdrop>>(\n BasePopover.Backdrop,\n 'PopoverBackdrop',\n 'PopoverBackdrop',\n);\nconst Positioner = styledPart<HTMLDivElement, React.ComponentProps<typeof BasePopover.Positioner>>(\n BasePopover.Positioner,\n 'PopoverPositioner',\n 'PopoverPositioner',\n);\nconst Popup = styledPart<HTMLDivElement, React.ComponentProps<typeof BasePopover.Popup>>(\n BasePopover.Popup,\n 'PopoverPopup',\n 'PopoverPopup',\n);\nconst Title = styledPart<HTMLHeadingElement, React.ComponentProps<typeof BasePopover.Title>>(\n BasePopover.Title,\n 'PopoverTitle',\n 'PopoverTitle',\n);\nconst Description = styledPart<HTMLParagraphElement, React.ComponentProps<typeof BasePopover.Description>>(\n BasePopover.Description,\n 'PopoverDescription',\n 'PopoverDescription',\n);\nconst Close = styledPart<HTMLButtonElement, React.ComponentProps<typeof BasePopover.Close>>(\n BasePopover.Close,\n 'PopoverClose',\n 'PopoverClose',\n);\nconst Arrow = styledPart<HTMLDivElement, React.ComponentProps<typeof BasePopover.Arrow>>(\n BasePopover.Arrow,\n 'PopoverArrow',\n 'PopoverArrow',\n);\n\n/**\n * Base UI [Popover](https://base-ui.com/react/components/popover) with design-system classes.\n * The trigger is a Button when it sets `emphasis`, `palette`, or `className=\"Button\"`.\n * The arrow's svg paths stay yours: `PopoverArrowFill`, `PopoverArrowOuterStroke`, `PopoverArrowInnerStroke`.\n */\nexport const Popover = {\n Root: BasePopover.Root,\n Trigger,\n Portal: BasePopover.Portal,\n Backdrop,\n Positioner,\n Popup,\n Title,\n Description,\n Close,\n Arrow,\n Viewport: BasePopover.Viewport,\n Handle: BasePopover.Handle,\n createHandle: BasePopover.createHandle,\n};\n","import * as React from 'react';\nimport { Drawer as BaseDrawer } from '@base-ui/react/drawer';\nimport { buttonPart, styledPart } from '../utils/styled-part';\n\nconst Trigger = buttonPart<HTMLElement, React.ComponentProps<typeof BaseDrawer.Trigger>>(\n BaseDrawer.Trigger as React.ComponentType<\n React.ComponentProps<typeof BaseDrawer.Trigger> & React.RefAttributes<HTMLElement>\n >,\n 'DrawerTrigger',\n);\nconst Backdrop = styledPart<HTMLDivElement, React.ComponentProps<typeof BaseDrawer.Backdrop>>(\n BaseDrawer.Backdrop,\n 'DrawerBackdrop',\n 'DrawerBackdrop',\n);\nconst Viewport = styledPart<HTMLDivElement, React.ComponentProps<typeof BaseDrawer.Viewport>>(\n BaseDrawer.Viewport,\n 'DrawerViewport',\n 'DrawerViewport',\n);\nconst Popup = styledPart<HTMLDivElement, React.ComponentProps<typeof BaseDrawer.Popup>>(\n BaseDrawer.Popup,\n 'DrawerPopup',\n 'DrawerPopup',\n);\nconst Title = styledPart<HTMLHeadingElement, React.ComponentProps<typeof BaseDrawer.Title>>(\n BaseDrawer.Title as React.ComponentType<\n React.ComponentProps<typeof BaseDrawer.Title> & React.RefAttributes<HTMLHeadingElement>\n >,\n 'DrawerTitle',\n 'DrawerTitle',\n);\nconst Description = styledPart<HTMLParagraphElement, React.ComponentProps<typeof BaseDrawer.Description>>(\n BaseDrawer.Description as React.ComponentType<\n React.ComponentProps<typeof BaseDrawer.Description> & React.RefAttributes<HTMLParagraphElement>\n >,\n 'DrawerDescription',\n 'DrawerDescription',\n);\nconst Content = styledPart<HTMLDivElement, React.ComponentProps<typeof BaseDrawer.Content>>(\n BaseDrawer.Content,\n 'DrawerContent',\n 'DrawerContent',\n);\nconst Close = buttonPart<HTMLButtonElement, React.ComponentProps<typeof BaseDrawer.Close>>(\n BaseDrawer.Close as React.ComponentType<\n React.ComponentProps<typeof BaseDrawer.Close> & React.RefAttributes<HTMLButtonElement>\n >,\n 'DrawerClose',\n);\n\n/**\n * Base UI [Drawer](https://base-ui.com/react/components/drawer) with design-system classes.\n * The trigger and the close button are Buttons and take `emphasis` and `palette`.\n */\nexport const Drawer = {\n Root: BaseDrawer.Root,\n Trigger,\n Portal: BaseDrawer.Portal,\n Backdrop,\n Viewport,\n Popup,\n Title,\n Description,\n Content,\n Close,\n Indent: BaseDrawer.Indent,\n IndentBackground: BaseDrawer.IndentBackground,\n SwipeArea: BaseDrawer.SwipeArea,\n Provider: BaseDrawer.Provider,\n VirtualKeyboardProvider: BaseDrawer.VirtualKeyboardProvider,\n Handle: BaseDrawer.Handle,\n createHandle: BaseDrawer.createHandle,\n};\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport type BadgeProps = React.ComponentProps<'span'> & {\n /** How loud the badge is. The brand's roles decide what each level looks like. Default is subtle. */\n emphasis?: 'bold' | 'standard' | 'subtle' | 'quiet';\n /** Paint the level in a status palette (info, success, warning, error). */\n status?: 'info' | 'success' | 'warning' | 'error';\n /** Paint the level in another palette instead of the level's own color (e.g. \"secondary\", \"error\"). */\n palette?: string;\n /** Type tier. Default is condense. */\n size?: 'minimize' | 'condense' | 'base';\n /** A leading dot in the label color. */\n dot?: boolean;\n};\n\n/**\n * A status or count label. Not a Base UI part and not interactive, so this is a span\n * and does not take Base UI's `render` prop. Wrap it when it needs to be another element.\n * A number on its own needs an accessible name: `aria-label` (for example \"3 unread\") or visually hidden text.\n */\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { className, emphasis, status, palette, size, dot, children, ...props },\n ref,\n) {\n return (\n <span\n ref={ref}\n data-emphasis={emphasis}\n data-status={status}\n data-color={palette}\n data-size={size}\n data-dot={dot ? '' : undefined}\n className={cn('Badge', className)}\n {...props}\n >\n {children}\n </span>\n );\n});\n","/**\n * Money amounts as integers in minor units (cents, yen, fils).\n *\n * Integers avoid `0.1 + 0.2`, match what payment APIs send, and compare safely.\n * Conversion goes through a fixed-point string and rounds half away from zero\n * (the same halfExpand rule `Intl` uses). Never `Math.round(major * 100)`:\n * `1.005 * 100` is `100.49999…`.\n *\n * Values must stay inside `Number.MAX_SAFE_INTEGER` minor units. The field's default\n * maximum is lower: `MAX_MINOR_UNITS` (`10^15 - 1`). A major amount with more than\n * 15 significant digits is not exact as a float, and Number field counts in floats.\n */\n\nexport type CurrencyCode = string;\n\nexport type MoneyDisplay = 'narrowSymbol' | 'symbol' | 'code' | 'none';\n\nconst digitCache = new Map<string, number>();\n\nconst CURRENCY_MARKS = [\n '$', '€', '£', '¥', '¥', '₩', '₹', '₽', '₺', '₴', '₦', '฿', '₫', '₱', '₪', '₡', '₲', '₸', '₼', '₾', '¢', '¤',\n];\n\n/**\n * Largest minor-unit integer whose major form has at most 15 significant digits,\n * for every currency. `Number.MAX_SAFE_INTEGER` is about 9e15 (16 digits) and is\n * not exact once it is divided into dollars and cents.\n */\nexport const MAX_MINOR_UNITS = Number(10n ** 15n - 1n);\n\n/** Arabic-Indic, Eastern Arabic-Indic, and full-width digits, mapped to ASCII. */\nconst ASCII_DIGITS: Record<string, string> = {};\nfor (const [start, base] of [\n [0x0660, 0],\n [0x06f0, 0],\n [0xff10, 0],\n] as const) {\n for (let i = 0; i < 10; i += 1) ASCII_DIGITS[String.fromCharCode(start + i)] = String(base + i);\n}\n\nexport function normalizeDigits(text: string): string {\n return Array.from(text, (char) => ASCII_DIGITS[char] ?? char).join('');\n}\n\n/**\n * Well-formed ISO 4217 code that `Intl` knows.\n * `supportedValuesOf('currency')` is the list where it exists. Some engines omit a real\n * code from that list and still format it (CLF is 4 digits). Those still count. A code\n * the engine does not know falls back to the code itself and 2 digits, and does not.\n */\nexport function isValidCurrency(code: string): boolean {\n if (!/^[A-Za-z]{3}$/.test(code)) return false;\n const upper = code.toUpperCase();\n const intlWithSupport = Intl as typeof Intl & { supportedValuesOf?: (key: string) => string[] };\n const supported =\n typeof intlWithSupport.supportedValuesOf === 'function'\n ? intlWithSupport.supportedValuesOf('currency')\n : null;\n if (supported?.includes(upper)) return true;\n try {\n const format = new Intl.NumberFormat('en', { style: 'currency', currency: upper });\n const digits = format.resolvedOptions().maximumFractionDigits;\n const symbol = format.formatToParts(1).find((part) => part.type === 'currency')?.value;\n if (supported && symbol === upper && digits === 2) return false;\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Fraction digits for a currency. `override` is for prices `Intl` gets wrong for the\n * business (whole dollars, fuel, cash versus accounting). Cached per code.\n */\nexport function getCurrencyDigits(currency: CurrencyCode, override?: number): number {\n if (override != null) {\n if (!Number.isInteger(override) || override < 0 || override > 20) {\n throw new Error(`fractionDigits must be an integer from 0 to 20, got ${override}`);\n }\n return override;\n }\n const code = currency.toUpperCase();\n const cached = digitCache.get(code);\n if (cached != null) return cached;\n if (!isValidCurrency(code)) {\n throw new Error(`Unknown currency \"${currency}\". Expected an ISO 4217 code Intl recognizes.`);\n }\n const digits = new Intl.NumberFormat('en', { style: 'currency', currency: code }).resolvedOptions()\n .maximumFractionDigits;\n const resolved = digits ?? 0;\n digitCache.set(code, resolved);\n return resolved;\n}\n\n/** Shortest round-trip decimal for a finite number, expanded out of scientific notation. */\nfunction numberToDecimal(value: number): string {\n if (!Number.isFinite(value)) {\n throw new Error(`Amount must be a finite number, got ${value}`);\n }\n const negative = value < 0;\n const text = Math.abs(value).toString().toLowerCase();\n const expanded = text.includes('e') ? expandExponential(text) : text;\n return negative ? `-${expanded}` : expanded;\n}\n\nfunction expandExponential(text: string): string {\n const [coeff, expStr] = text.split('e');\n const exp = Number(expStr);\n const [head, tail = ''] = coeff.split('.');\n const digits = `${head}${tail}`.replace(/^0+/, '') || '0';\n const point = head.length + exp;\n if (point <= 0) return `0.${'0'.repeat(-point)}${digits}`;\n if (point >= digits.length) return digits + '0'.repeat(point - digits.length);\n return `${digits.slice(0, point)}.${digits.slice(point)}`;\n}\n\n/** Round a non-negative decimal string to `digits` places, half away from zero. */\nexport function roundHalfExpand(unsigned: string, digits: number): string {\n if (!/^\\d+(\\.\\d+)?$/.test(unsigned)) {\n throw new Error(`Not a decimal amount: ${unsigned}`);\n }\n const [wholeRaw, frac = ''] = unsigned.split('.');\n const whole = wholeRaw.replace(/^0+(?=\\d)/, '') || '0';\n if (frac.length <= digits) {\n if (digits === 0) return whole;\n return `${whole}.${frac.padEnd(digits, '0')}`;\n }\n const keep = frac.slice(0, digits);\n const roundUp = frac.charCodeAt(digits) - 48 >= 5;\n if (!roundUp) {\n if (digits === 0) return whole;\n return `${whole}.${keep}`;\n }\n const body = `${whole}${keep}`.replace(/^0+(?=\\d)/, '') || '0';\n const bumped = (BigInt(body) + 1n).toString();\n if (digits === 0) return bumped;\n const padded = bumped.padStart(digits + 1, '0');\n return `${padded.slice(0, -digits)}.${padded.slice(-digits)}`;\n}\n\nfunction minorFromRounded(rounded: string, negative: boolean): number {\n const digits = rounded.replace('.', '').replace(/^0+(?=\\d)/, '') || '0';\n if (BigInt(digits) > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new Error(\n `Amount exceeds Number.MAX_SAFE_INTEGER minor units (${Number.MAX_SAFE_INTEGER})`,\n );\n }\n const minor = Number(digits);\n return negative ? -minor : minor;\n}\n\nfunction signedParts(decimal: string): { negative: boolean; unsigned: string } {\n const trimmed = decimal.trim();\n if (!/^[+-]?\\d+(\\.\\d+)?$/.test(trimmed)) {\n throw new Error(`Not a decimal amount: ${decimal}`);\n }\n return { negative: trimmed.startsWith('-'), unsigned: trimmed.replace(/^[+-]/, '') };\n}\n\n/** Major units (12.5) to minor units (1250). */\nexport function toMinorUnits(major: number, currency: CurrencyCode, override?: number): number {\n const digits = getCurrencyDigits(currency, override);\n const text = numberToDecimal(major);\n const { negative, unsigned } = signedParts(text);\n return minorFromRounded(roundHalfExpand(unsigned, digits), negative);\n}\n\n/** Minor units to an exact major-unit decimal string (`\"1234.50\"`). */\nexport function toDecimalString(minor: number, currency: CurrencyCode, override?: number): string {\n if (!Number.isSafeInteger(minor)) {\n throw new Error(`Minor units must be a safe integer, got ${minor}`);\n }\n const digits = getCurrencyDigits(currency, override);\n const negative = minor < 0;\n const abs = Math.abs(minor).toString();\n if (digits === 0) return `${negative ? '-' : ''}${abs}`;\n const padded = abs.padStart(digits + 1, '0');\n return `${negative ? '-' : ''}${padded.slice(0, -digits)}.${padded.slice(-digits)}`;\n}\n\n/** Exact decimal string (`\"1234.50\"` or `\"1234.5\"`) to minor units. */\nexport function parseDecimalString(decimal: string, currency: CurrencyCode, override?: number): number {\n const digits = getCurrencyDigits(currency, override);\n const { negative, unsigned } = signedParts(decimal);\n return minorFromRounded(roundHalfExpand(unsigned, digits), negative);\n}\n\n/** Minor units to major units for `NumberField`, which counts in major units. */\nexport function fromMinorUnits(minor: number, currency: CurrencyCode, override?: number): number {\n return Number(toDecimalString(minor, currency, override));\n}\n\n/** Show an amount the same way the field does, for tables and summaries. */\nexport function formatMoney(\n minor: number,\n currency: CurrencyCode,\n options?: { locale?: string; display?: MoneyDisplay; fractionDigits?: number },\n): string {\n const digits = getCurrencyDigits(currency, options?.fractionDigits);\n // The decimal string is exact. Formatting the float drifts once the amount\n // has more than 15 significant digits (about 10 trillion dollars).\n const decimal = toDecimalString(minor, currency, options?.fractionDigits);\n const display = options?.display ?? 'narrowSymbol';\n const format =\n display === 'none'\n ? new Intl.NumberFormat(options?.locale, {\n style: 'decimal',\n useGrouping: true,\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n })\n : new Intl.NumberFormat(options?.locale, {\n style: 'currency',\n currency: currency.toUpperCase(),\n currencyDisplay: display,\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n });\n return formatExact(format, decimal);\n}\n\n/** `Intl` formats a decimal string without turning it into a float first. */\nfunction formatExact(format: Intl.NumberFormat, decimal: string): string {\n return (format as Intl.NumberFormat & { format: (value: string) => string }).format(decimal);\n}\n\n/** Which side of the number the currency sits on, from the locale rather than a prop. */\nexport function affixSide(locale: string, currency: CurrencyCode): 'start' | 'end' {\n const parts = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currency.toUpperCase(),\n }).formatToParts(1);\n const currencyIndex = parts.findIndex((part) => part.type === 'currency');\n const integerIndex = parts.findIndex((part) => part.type === 'integer');\n return currencyIndex < integerIndex ? 'start' : 'end';\n}\n\n/** The affix text: `$`, `US$`, `USD`, or nothing. */\nexport function currencySymbol(locale: string, currency: CurrencyCode, display: MoneyDisplay): string {\n if (display === 'none') return '';\n if (display === 'code') return currency.toUpperCase();\n const part = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currency.toUpperCase(),\n currencyDisplay: display,\n })\n .formatToParts(1)\n .find((item) => item.type === 'currency');\n return part?.value ?? currency.toUpperCase();\n}\n\n/** Spoken currency name (\"US dollar\"), for the accessible description. */\nexport function currencyName(locale: string, currency: CurrencyCode): string {\n try {\n return new Intl.DisplayNames(locale, { type: 'currency' }).of(currency.toUpperCase()) ?? currency.toUpperCase();\n } catch {\n return currency.toUpperCase();\n }\n}\n\nfunction groupSeparator(locale: string): string {\n return (\n new Intl.NumberFormat(locale, { useGrouping: true })\n .formatToParts(11111)\n .find((part) => part.type === 'group')?.value ?? ''\n );\n}\n\nfunction symbolsFor(locale: string, currency: CurrencyCode): string[] {\n if (!isValidCurrency(currency)) return [];\n const found: string[] = [];\n for (const display of ['symbol', 'narrowSymbol'] as const) {\n const part = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currency.toUpperCase(),\n currencyDisplay: display,\n })\n .formatToParts(1)\n .find((item) => item.type === 'currency')?.value;\n if (part) found.push(part);\n }\n return found;\n}\n\nexport interface NormalizedPaste {\n /** Text to hand to the number parser. `null` means the paste is not an amount (`1e5`, or a negative when negatives are off). */\n text: string | null;\n /** A different currency the picker includes and the paste names. Otherwise `null` (don't guess). */\n currency: CurrencyCode | null;\n}\n\n/**\n * Strip currency symbols, ISO codes, and spaces that are not the locale's group separator\n * so the number field can parse `$1,234.56`, `USD 1234.56`, and `1 234,56 €`.\n * `(12.00)` is negative only when negatives are allowed. Otherwise the paste is rejected,\n * so a refund is not quietly stored as a charge.\n * A run of letters sitting against a currency mark (`R$`, `CA$`) is stripped. The\n * field's own symbols and ISO codes are stripped too.\n */\nexport function normalizePaste(\n raw: string,\n locale: string,\n currency: CurrencyCode,\n options?: { allowNegative?: boolean; currencies?: CurrencyCode[] },\n): NormalizedPaste {\n let text = raw.trim();\n let negative = false;\n if (/^\\(.*\\)$/.test(text)) {\n if (!options?.allowNegative) return { text: null, currency: null };\n text = text.slice(1, -1).trim();\n negative = true;\n }\n text = stripLettersBesideMarks(text);\n\n const allowed = new Set((options?.currencies ?? []).map((code) => code.toUpperCase()));\n let named: string | null = null;\n for (const match of text.matchAll(/\\b([A-Za-z]{3})\\b/g)) {\n const code = match[1].toUpperCase();\n if (!isValidCurrency(code)) continue;\n if (!named && allowed.has(code) && code !== currency.toUpperCase()) named = code;\n text = text.replace(match[0], ' ');\n }\n\n const symbols = new Set<string>(CURRENCY_MARKS);\n for (const code of [currency, named, ...(options?.currencies ?? [])]) {\n if (code) symbolsFor(locale, code).forEach((symbol) => symbols.add(symbol));\n }\n const ordered = [...symbols].filter(Boolean).sort((a, b) => b.length - a.length);\n for (const symbol of ordered) text = text.split(symbol).join('');\n\n const group = groupSeparator(locale);\n text = Array.from(text)\n .filter((char) => {\n if (!/\\s/u.test(char)) return true;\n return group !== '' && group.includes(char);\n })\n .join('')\n .trim();\n\n if (/[eE]/.test(text) || !/[\\d٠-٩۰-۹0-9]/.test(text)) {\n return { text: null, currency: named };\n }\n if (negative && !text.startsWith('-')) text = `-${text}`;\n return { text, currency: named };\n}\n\nconst MARK_CLASS = CURRENCY_MARKS.map((mark) => mark.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('');\n\n/** `R$` and `CA$` carry a country prefix the symbol list does not know. Drop those letters. */\nfunction stripLettersBesideMarks(text: string): string {\n const beside = new RegExp(`[A-Za-z]+(?=\\\\s*[${MARK_CLASS}])|(?<=[${MARK_CLASS}]\\\\s*)[A-Za-z]+`, 'gu');\n return text.replace(beside, '');\n}\n\n/** True when extra typed fraction digits would change the amount once rounded. */\nexport function roundingChangesValue(raw: string, locale: string, digits: number): boolean {\n const decimal =\n new Intl.NumberFormat(locale).formatToParts(1.1).find((part) => part.type === 'decimal')?.value ?? '.';\n const group = groupSeparator(locale);\n let text = normalizeDigits(raw.trim()).replace(/^[+-]/, '');\n if (group) text = text.split(group).join('');\n if (decimal !== '.') text = text.replace(decimal, '.');\n if (!/^\\d+(\\.\\d+)?$/.test(text)) return false;\n const fraction = text.split('.')[1] ?? '';\n if (fraction.length <= digits) return false;\n const [whole, frac = ''] = text.split('.');\n const cut = digits === 0 ? whole : `${whole}.${frac.slice(0, digits)}`;\n return roundHalfExpand(text, digits) !== roundHalfExpand(cut, digits);\n}\n","import * as React from 'react';\nimport type { CurrencyCode, MoneyDisplay } from './money-utils';\n\nexport interface MoneyFieldContextValue {\n currency: CurrencyCode;\n currencies?: CurrencyCode[];\n locale: string;\n affix: 'start' | 'end';\n symbol: string;\n symbolDisplay: MoneyDisplay;\n showPicker: boolean;\n showSymbol: boolean;\n digits: number;\n currencyLabel: string;\n disabled: boolean;\n readOnly: boolean;\n allowNegative: boolean;\n minor: number | null;\n searchable: boolean | 'auto';\n descriptionId: string;\n liveId: string;\n /** -1 when the next typed amount should be negative and the field is still empty. */\n pendingSign: 1 | -1;\n messages: { valueMissing: string; rangeUnderflow: string; rangeOverflow: string };\n inputRef: { current: HTMLInputElement | null };\n onCurrencyChange: (currency: CurrencyCode) => void;\n onToggleSign: () => void;\n onPasteCapture: (event: React.ClipboardEvent<HTMLElement>) => void;\n onKeyDownCapture: (event: React.KeyboardEvent<HTMLElement>) => void;\n onInputCapture: (event: React.FormEvent<HTMLElement>) => void;\n onGroupBlur: (event: React.FocusEvent<HTMLElement>) => void;\n focusInput: () => void;\n}\n\nexport const MoneyFieldContext = React.createContext<MoneyFieldContextValue | null>(null);\n\nexport function useMoneyField(): MoneyFieldContextValue {\n const value = React.useContext(MoneyFieldContext);\n if (!value) throw new Error('MoneyField parts must be rendered inside MoneyField.Root');\n return value;\n}\n","import { Combobox } from '../../components/combobox';\nimport { Field } from '../../components/field';\nimport { Select } from '../../components/select';\nimport { currencyName, currencySymbol } from './money-utils';\nimport { useMoneyField } from './money-context';\n\n/** Past this many codes, the picker is a combobox so people can type a code or a name. */\nexport const CURRENCY_SEARCH_THRESHOLD = 12;\n\nfunction CurrencyItemLabel({ code, locale }: { code: string; locale: string }) {\n return (\n <span className=\"MoneyFieldCurrencyItem\">\n <span>\n {code} · {currencyName(locale, code)}\n </span>\n <span className=\"MoneyFieldCurrencySymbol\">{currencySymbol(locale, code, 'narrowSymbol')}</span>\n </span>\n );\n}\n\nfunction Chevron() {\n return <span className=\"material-symbols-outlined MoneyFieldCurrencyIcon\">expand_more</span>;\n}\n\n/**\n * The affix when there are two or more currencies. Shows the code, not the symbol:\n * `$` is shared by USD, CAD, AUD, MXN and others. A start-side picker is before the\n * input in tab order; an end-side picker is after it, because that is the visual order.\n */\nexport function CurrencySelect() {\n const {\n currency,\n currencies,\n locale,\n currencyLabel,\n disabled,\n readOnly,\n searchable,\n onCurrencyChange,\n } = useMoneyField();\n const codes = currencies ?? [];\n const locked = disabled || readOnly;\n const search =\n searchable === true || (searchable !== false && codes.length > CURRENCY_SEARCH_THRESHOLD);\n\n const triggerName = `${currencyLabel}, ${currency}`;\n\n if (search) {\n return (\n <Field.Root className=\"MoneyFieldCurrencyField\">\n <Combobox.Root\n items={codes}\n value={currency}\n onValueChange={(next) => {\n if (typeof next === 'string') onCurrencyChange(next);\n }}\n itemToStringLabel={(code) => `${code} ${currencyName(locale, code)}`}\n disabled={locked}\n >\n <span className=\"MoneyFieldCurrency\">\n <Combobox.Trigger className=\"MoneyFieldCurrencyTrigger\" aria-label={triggerName} disabled={locked}>\n <span className=\"MoneyFieldCurrencyCode\">{currency}</span>\n <Chevron />\n </Combobox.Trigger>\n </span>\n <Combobox.Portal>\n <Combobox.Positioner sideOffset={4} align=\"start\">\n <Combobox.Popup className=\"MoneyFieldCurrencyPopup\">\n <Combobox.Input aria-label={`Filter ${currencyLabel}`} placeholder=\"Code or name\" />\n <Combobox.Empty>No currencies</Combobox.Empty>\n <Combobox.List>\n {(code: string) => (\n <Combobox.Item key={code} value={code}>\n <CurrencyItemLabel code={code} locale={locale} />\n </Combobox.Item>\n )}\n </Combobox.List>\n </Combobox.Popup>\n </Combobox.Positioner>\n </Combobox.Portal>\n </Combobox.Root>\n </Field.Root>\n );\n }\n\n return (\n <Field.Root className=\"MoneyFieldCurrencyField\">\n <Select.Root\n items={codes.map((code) => ({ value: code, label: code }))}\n value={currency}\n onValueChange={(next) => {\n if (next) onCurrencyChange(next);\n }}\n disabled={locked}\n >\n <span className=\"MoneyFieldCurrency\">\n <Select.Trigger className=\"MoneyFieldCurrencyTrigger\" aria-label={triggerName} disabled={locked}>\n <Select.Value className=\"MoneyFieldCurrencyCode\" />\n <Select.Icon>\n <Chevron />\n </Select.Icon>\n </Select.Trigger>\n </span>\n <Select.Portal>\n <Select.Positioner sideOffset={4} align=\"start\">\n <Select.Popup className=\"MoneyFieldCurrencyPopup\">\n <Select.List>\n {codes.map((code) => (\n <Select.Item key={code} value={code}>\n <Select.ItemText>\n <CurrencyItemLabel code={code} locale={locale} />\n </Select.ItemText>\n </Select.Item>\n ))}\n </Select.List>\n </Select.Popup>\n </Select.Positioner>\n </Select.Portal>\n </Select.Root>\n </Field.Root>\n );\n}\n","import * as React from 'react';\nimport type { NumberFieldRoot } from '@base-ui/react/number-field';\nimport { Button } from '../../components/button';\nimport { Field } from '../../components/field';\nimport { NumberField } from '../../components/number-field';\nimport { cn } from '../../utils/cn';\nimport { CurrencySelect } from './currency-select';\nimport { MoneyFieldContext, useMoneyField, type MoneyFieldContextValue } from './money-context';\nimport {\n affixSide,\n currencyName,\n currencySymbol,\n formatMoney,\n fromMinorUnits,\n getCurrencyDigits,\n isValidCurrency,\n MAX_MINOR_UNITS,\n normalizePaste,\n roundingChangesValue,\n toDecimalString,\n toMinorUnits,\n type CurrencyCode,\n type MoneyDisplay,\n} from './money-utils';\n\ntype NumberFieldRootProps = React.ComponentProps<typeof NumberField.Root>;\n\nexport interface MoneyFieldSteps {\n /** Arrow keys and the stepper buttons, in minor units. Default: one major unit. */\n step?: number;\n /** Alt+Arrow, in minor units. Default: one minor unit. */\n small?: number;\n /** Shift+Arrow, in minor units. Default: 100 major units. */\n large?: number;\n}\n\nexport interface MoneyChangeDetails {\n currency: CurrencyCode;\n /** The same amount as an exact major-unit decimal (`\"1234.50\"`), or null when the field is empty. */\n decimal: string | null;\n reason: NumberFieldRoot.ChangeEventReason;\n}\n\nexport interface MoneyFieldRootProps\n extends Omit<\n NumberFieldRootProps,\n | 'value'\n | 'defaultValue'\n | 'onValueChange'\n | 'onValueCommitted'\n | 'format'\n | 'min'\n | 'max'\n | 'step'\n | 'smallStep'\n | 'largeStep'\n | 'name'\n > {\n /** Minor units: cents for USD, yen for JPY, fils for KWD. Empty is `null`, not `0`. */\n value?: number | null;\n defaultValue?: number | null;\n onValueChange?: (value: number | null, details: MoneyChangeDetails) => void;\n onValueCommitted?: (value: number | null, details: { currency: CurrencyCode; decimal: string | null }) => void;\n /** Fixed or controlled currency. Required unless `currencies` is set. */\n currency?: CurrencyCode;\n defaultCurrency?: CurrencyCode;\n /** Two or more codes show the picker. The first is the default when `currency` is omitted. */\n currencies?: CurrencyCode[];\n onCurrencyChange?: (currency: CurrencyCode) => void;\n /** Document language by default. Decides separators, numerals, and which side the symbol sits on. */\n locale?: string;\n /** Override the currency's fraction digits (whole dollars, fuel prices, cash versus accounting). */\n fractionDigits?: number;\n /** `always` keeps `12.00`. `auto` drops decimals on a whole amount, for a price tag like `$1,200`. */\n trailingZeros?: 'always' | 'auto';\n /** Off by default, which also sets the default minimum to 0. On for refunds and balances. */\n allowNegative?: boolean;\n /** Minor units, same as `value`. */\n min?: number;\n /**\n * Minor units. The default is `MAX_MINOR_UNITS` (`10^15 - 1`): the largest minor\n * value whose major form has at most 15 significant digits. Past that, Number\n * field's float is not exact.\n */\n max?: number;\n steps?: MoneyFieldSteps;\n /** Stepper buttons. Off by default; arrow keys still step. */\n steppers?: boolean;\n symbolDisplay?: MoneyDisplay;\n /** `end` lines the amount up with other amounts, in a ledger or a table. */\n align?: 'start' | 'end';\n /**\n * Submits the major-unit decimal string (`\"1234.50\"`). `minor` submits the integer instead.\n * This name is not passed to Number field. A parent `Field.Root` name still names Number\n * field's hidden input, because that input is the field's control.\n */\n name?: string;\n submitAs?: 'decimal' | 'minor';\n /** Submits the currency code when the picker is showing. */\n currencyName?: string;\n /** Accessible name of the picker. Default \"Currency\". */\n currencyLabel?: string;\n /** `true` always filters. `auto` (default) filters once there are more than 12 codes. `false` never does. */\n searchable?: boolean | 'auto';\n size?: 'xs' | 'sm' | 'md' | 'lg';\n placeholder?: string;\n}\n\nfunction documentLocale(): string {\n if (typeof document !== 'undefined' && document.documentElement.lang) return document.documentElement.lang;\n if (typeof navigator !== 'undefined' && navigator.language) return navigator.language;\n return 'en';\n}\n\nfunction spokenAmount(minor: number, currency: CurrencyCode, fractionDigits?: number): string {\n return toDecimalString(minor, currency, fractionDigits)\n .replace(/(\\.\\d*?)0+$/, '$1')\n .replace(/\\.$/, '');\n}\n\nfunction assignRef<T>(ref: React.Ref<T> | undefined, value: T | null) {\n if (typeof ref === 'function') ref(value);\n else if (ref) (ref as React.MutableRefObject<T | null>).current = value;\n}\n\nfunction describedBy(existing: string | undefined, ...ids: string[]) {\n const parts = new Set<string>();\n for (const value of [existing, ...ids]) {\n if (!value) continue;\n for (const id of value.split(/\\s+/)) if (id) parts.add(id);\n }\n return parts.size ? [...parts].join(' ') : undefined;\n}\n\n/**\n * Holds the money: currency, fraction digits, and the minor-unit value.\n * Everything else is passed through to NumberField, so a new Number Field prop works here too.\n */\nexport const MoneyFieldRoot = React.forwardRef<HTMLDivElement, MoneyFieldRootProps>(function MoneyFieldRoot(\n {\n value: valueProp,\n defaultValue = null,\n onValueChange,\n onValueCommitted,\n currency: currencyProp,\n defaultCurrency,\n currencies,\n onCurrencyChange: onCurrencyChangeProp,\n locale: localeProp,\n fractionDigits,\n trailingZeros = 'always',\n allowNegative = false,\n min,\n max,\n steps,\n symbolDisplay = 'narrowSymbol',\n align = 'start',\n name,\n submitAs = 'decimal',\n currencyName: currencyNameProp,\n currencyLabel = 'Currency',\n searchable = 'auto',\n size = 'md',\n allowWheelScrub = false,\n className,\n children,\n disabled = false,\n readOnly = false,\n required = false,\n id,\n ...rest\n },\n ref,\n) {\n const locale = localeProp || documentLocale();\n const fallback = currencyProp ?? defaultCurrency ?? currencies?.[0];\n if (process.env.NODE_ENV !== 'production') {\n if (!fallback) {\n throw new Error('MoneyField needs `currency`, `defaultCurrency`, or a non-empty `currencies` list.');\n }\n for (const code of [fallback, ...(currencies ?? [])]) {\n if (!isValidCurrency(code)) {\n throw new Error(`Unknown currency \"${code}\". Expected an ISO 4217 code Intl recognizes.`);\n }\n }\n }\n const [currencyState, setCurrencyState] = React.useState(fallback ?? 'USD');\n const currency = (currencyProp ?? currencyState).toUpperCase();\n const digits = getCurrencyDigits(currency, fractionDigits);\n const [uncontrolled, setUncontrolled] = React.useState<number | null>(defaultValue);\n const minor = valueProp !== undefined ? valueProp : uncontrolled;\n const major = minor == null ? null : fromMinorUnits(minor, currency, fractionDigits);\n const currencyRef = React.useRef(currency);\n const minorRef = React.useRef(minor);\n const majorRef = React.useRef(major);\n // A currency change has to see the major amount in the previous currency. Writing the\n // refs during render would already have converted 1250 cents into 1250 yen.\n if (currencyRef.current === currency) {\n minorRef.current = minor;\n majorRef.current = major;\n }\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const formattingRef = React.useRef(false);\n const rawRef = React.useRef('');\n const descriptionId = React.useId();\n const liveId = React.useId();\n const [live, setLive] = React.useState('');\n const [focused, setFocused] = React.useState(false);\n const [blurCount, setBlurCount] = React.useState(0);\n const [pendingSign, setPendingSign] = React.useState<1 | -1>(1);\n const pendingSignRef = React.useRef(pendingSign);\n pendingSignRef.current = pendingSign;\n // While typing or pasting, `value` stays the major amount Base UI parsed. Echoing the\n // rounded minor (12.345 → 12.35) makes Base UI keep the typed text. The draft holds\n // that parse until a commit, and Base UI 1.9 then formats with maximumFractionDigits.\n const [draftMajor, setDraftMajor] = React.useState<number | null | undefined>(undefined);\n\n const showPicker = (currencies?.length ?? 0) >= 2;\n const symbol = currencySymbol(locale, currency, symbolDisplay);\n const side = affixSide(locale, currency);\n const showSymbol = symbolDisplay !== 'none' && symbol !== '';\n\n const minMinor = min ?? (allowNegative ? undefined : 0);\n const maxMinor = Math.min(max ?? MAX_MINOR_UNITS, MAX_MINOR_UNITS);\n const minorPerMajor = 10 ** digits;\n const stepMinor = steps?.step ?? minorPerMajor;\n const smallMinor = steps?.small ?? 1;\n const largeMinor = steps?.large ?? 100 * minorPerMajor;\n // One major unit is `any` on the hidden input. A numeric step of 1 makes `12.50`\n // a stepMismatch once `min` is set, so the form refuses cents. `any` still moves\n // the arrows by one major unit. A custom step that is not one major unit is numeric.\n const majorStep = fromMinorUnits(stepMinor, currency, fractionDigits);\n const step = majorStep === 1 ? 'any' : majorStep;\n\n const publish = React.useCallback(\n (nextMinor: number | null, reason: NumberFieldRoot.ChangeEventReason, commit: boolean) => {\n const code = currencyRef.current;\n const decimal = nextMinor == null ? null : toDecimalString(nextMinor, code, fractionDigits);\n minorRef.current = nextMinor;\n majorRef.current = nextMinor == null ? null : fromMinorUnits(nextMinor, code, fractionDigits);\n if (valueProp === undefined) setUncontrolled(nextMinor);\n onValueChange?.(nextMinor, { currency: code, decimal, reason });\n if (commit) onValueCommitted?.(nextMinor, { currency: code, decimal });\n },\n [fractionDigits, onValueChange, onValueCommitted, valueProp],\n );\n\n const changeCurrency = React.useCallback(\n (next: string) => {\n const code = next.toUpperCase();\n if (code === currencyRef.current) return;\n // The ref moves in the layout effect, after this render, so a paste parsed in the\n // same turn still uses the currency the text was typed in. A controlled currency\n // stays put when the parent does not change it.\n if (currencyProp === undefined) setCurrencyState(code);\n onCurrencyChangeProp?.(code);\n },\n [currencyProp, onCurrencyChangeProp],\n );\n\n React.useLayoutEffect(() => {\n if (currencyRef.current === currency) return;\n const previousMajor = majorRef.current;\n const previousMinor = minorRef.current;\n currencyRef.current = currency;\n setDraftMajor(undefined);\n const nameOf = currencyName(locale, currency);\n if (valueProp !== undefined) {\n minorRef.current = valueProp;\n majorRef.current = valueProp == null ? null : fromMinorUnits(valueProp, currency, fractionDigits);\n setLive(`Currency changed to ${nameOf}.`);\n return;\n }\n if (previousMajor == null || previousMinor == null) {\n setLive(`Currency changed to ${nameOf}.`);\n return;\n }\n const nextMinor = toMinorUnits(previousMajor, currency, fractionDigits);\n if (nextMinor !== previousMinor) {\n publish(nextMinor, 'none', true);\n setLive(`Currency changed to ${nameOf}. Amount rounded to ${spokenAmount(nextMinor, currency, fractionDigits)}.`);\n } else {\n setLive(`Currency changed to ${nameOf}.`);\n }\n }, [currency, fractionDigits, locale, publish, valueProp]);\n\n const onPasteCapture = React.useCallback(\n (event: React.ClipboardEvent<HTMLElement>) => {\n const input = event.target instanceof HTMLInputElement ? event.target : null;\n if (!input || input.type === 'number' || input.type === 'hidden' || readOnly || disabled) return;\n const raw = event.clipboardData?.getData('text/plain') ?? '';\n const normalized = normalizePaste(raw, locale, currencyRef.current, { allowNegative, currencies });\n if (normalized.currency) changeCurrency(normalized.currency);\n if (normalized.text == null) {\n event.preventDefault();\n event.stopPropagation();\n if (!allowNegative && /^\\(.*\\)$/.test(raw.trim())) {\n setLive(\"Negative amounts aren't allowed here.\");\n }\n return;\n }\n if (normalized.text === raw) return;\n event.preventDefault();\n event.stopPropagation();\n const start = input.selectionStart ?? input.value.length;\n const end = input.selectionEnd ?? start;\n const next = input.value.slice(0, start) + normalized.text + input.value.slice(end);\n const setter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set;\n setter?.call(input, next);\n input.dispatchEvent(new Event('input', { bubbles: true }));\n },\n [allowNegative, changeCurrency, currencies, disabled, locale, readOnly],\n );\n\n const onKeyDownCapture = React.useCallback((event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === 'e' || event.key === 'E') {\n event.preventDefault();\n event.stopPropagation();\n }\n }, []);\n\n const onInputCapture = React.useCallback((event: React.FormEvent<HTMLElement>) => {\n const input = event.target instanceof HTMLInputElement ? event.target : null;\n if (!input || input.type === 'number' || input.type === 'hidden' || formattingRef.current) return;\n rawRef.current = input.value;\n setLive('');\n }, []);\n\n const onGroupBlur = React.useCallback(\n (event: React.FocusEvent<HTMLElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node | null)) return;\n const raw = inputRef.current?.value || rawRef.current;\n const code = currencyRef.current;\n const current = minorRef.current;\n const places = getCurrencyDigits(code, fractionDigits);\n if (current != null && raw && roundingChangesValue(raw, locale, places)) {\n setLive(`Rounded to ${formatMoney(current, code, { locale, display: symbolDisplay, fractionDigits })}.`);\n }\n setBlurCount((n) => n + 1);\n },\n [fractionDigits, locale, symbolDisplay],\n );\n\n const whole =\n trailingZeros === 'auto' && (minor == null || (digits > 0 && minor % minorPerMajor === 0));\n const amountFormat = new Intl.NumberFormat(locale, {\n style: 'decimal',\n useGrouping: true,\n minimumFractionDigits: whole || digits === 0 ? 0 : digits,\n maximumFractionDigits: digits,\n });\n const formattedAmount =\n minor == null\n ? ''\n : (amountFormat as Intl.NumberFormat & { format: (value: string) => string }).format(\n toDecimalString(minor, currency, fractionDigits),\n );\n\n // Number field 1.9 writes the canonical text on blur, then its layout effect keeps the\n // typed text when the controlled number did not change (`12.5` stays `12.5`). Rewriting\n // the input here, after that effect, is formatting only. The synthetic input event puts\n // the formatted text into Number field's own state so the next render does not put the\n // typed text back. It does not remount the field.\n React.useLayoutEffect(() => {\n const input = inputRef.current;\n if (!input || input.ownerDocument.activeElement === input || input.value === formattedAmount) return;\n const setter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set;\n formattingRef.current = true;\n setter?.call(input, formattedAmount);\n input.dispatchEvent(new Event('input', { bubbles: true }));\n formattingRef.current = false;\n }, [blurCount, formattedAmount]);\n\n const messages = React.useMemo(\n () => ({\n valueMissing: 'Enter an amount',\n rangeUnderflow:\n minMinor == null\n ? 'Enter an amount'\n : `Enter an amount of at least ${formatMoney(minMinor, currency, { locale, display: symbolDisplay, fractionDigits })}`,\n rangeOverflow: `Enter an amount of ${formatMoney(maxMinor, currency, { locale, display: symbolDisplay, fractionDigits })} or less`,\n }),\n [currency, fractionDigits, locale, maxMinor, minMinor, symbolDisplay],\n );\n\n const context = React.useMemo<MoneyFieldContextValue>(\n () => ({\n currency,\n currencies,\n locale,\n affix: side,\n symbol,\n symbolDisplay,\n showPicker,\n showSymbol,\n digits,\n currencyLabel,\n disabled,\n readOnly,\n allowNegative,\n minor,\n searchable,\n descriptionId,\n liveId,\n pendingSign,\n messages,\n inputRef,\n onCurrencyChange: changeCurrency,\n onToggleSign: () => {\n if (disabled || readOnly) return;\n if (minorRef.current == null) {\n setPendingSign((sign) => (sign < 0 ? 1 : -1));\n return;\n }\n setPendingSign(1);\n publish(-minorRef.current, 'none', true);\n },\n onPasteCapture,\n onKeyDownCapture,\n onInputCapture,\n onGroupBlur,\n focusInput: () => inputRef.current?.focus(),\n }),\n [\n allowNegative,\n changeCurrency,\n currency,\n currencies,\n currencyLabel,\n descriptionId,\n digits,\n liveId,\n messages,\n pendingSign,\n disabled,\n locale,\n minor,\n onGroupBlur,\n onInputCapture,\n onKeyDownCapture,\n onPasteCapture,\n publish,\n readOnly,\n searchable,\n showPicker,\n showSymbol,\n side,\n symbol,\n symbolDisplay,\n ],\n );\n\n const submitted =\n minor == null ? '' : submitAs === 'minor' ? String(minor) : toDecimalString(minor, currency, fractionDigits);\n\n return (\n <MoneyFieldContext.Provider value={context}>\n <NumberField.Root\n ref={ref}\n id={id}\n value={draftMajor !== undefined ? draftMajor : major}\n onValueChange={(next, details) => {\n if (formattingRef.current) return;\n const typing = details.reason === 'input-change' || details.reason === 'input-paste';\n let parsed = next;\n if (pendingSignRef.current < 0 && parsed != null && parsed > 0) parsed = -parsed;\n if (typing) setDraftMajor(parsed);\n else {\n setDraftMajor(undefined);\n if (pendingSignRef.current < 0) setPendingSign(1);\n }\n const nextMinor = parsed == null ? null : toMinorUnits(parsed, currencyRef.current, fractionDigits);\n if (nextMinor === minorRef.current && details.reason !== 'input-clear') return;\n publish(nextMinor, details.reason, !typing);\n }}\n locale={locale}\n format={{\n style: 'decimal',\n useGrouping: true,\n minimumFractionDigits: whole || digits === 0 ? 0 : digits,\n maximumFractionDigits: digits,\n }}\n min={minMinor == null ? undefined : fromMinorUnits(minMinor, currency, fractionDigits)}\n max={fromMinorUnits(maxMinor, currency, fractionDigits)}\n step={step}\n smallStep={fromMinorUnits(smallMinor, currency, fractionDigits)}\n largeStep={fromMinorUnits(largeMinor, currency, fractionDigits)}\n {...rest}\n // Base UI clamps a typed value into min and max unless this is set, including\n // on blur. Clamping clears rangeUnderflow and rangeOverflow, so those matches\n // never show. Arrow keys still clamp.\n allowOutOfRange\n allowWheelScrub={allowWheelScrub}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n data-currency={currency}\n data-affix={showPicker || showSymbol ? side : undefined}\n data-affix-kind={showPicker ? 'picker' : showSymbol ? 'symbol' : undefined}\n data-negative={minor != null && minor < 0 ? '' : undefined}\n data-align={align}\n data-size={size}\n data-disabled={disabled ? '' : undefined}\n data-readonly={readOnly ? '' : undefined}\n data-focused={focused ? '' : undefined}\n className={(state) =>\n cn('MoneyField', typeof className === 'function' ? className(state) : className)\n }\n onFocus={() => setFocused(true)}\n onBlur={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) setFocused(false);\n }}\n >\n {children}\n <Field.Description id={descriptionId} className=\"visually-hidden\">\n {currencyName(locale, currency)}\n </Field.Description>\n <Field.Description id={liveId} className=\"visually-hidden\" aria-live=\"polite\">\n {live}\n </Field.Description>\n {name ? <input type=\"hidden\" name={name} value={submitted} /> : null}\n {showPicker && currencyNameProp ? (\n <input type=\"hidden\" name={currencyNameProp} value={currency} />\n ) : null}\n </NumberField.Root>\n </MoneyFieldContext.Provider>\n );\n});\n\nexport const MoneyFieldGroup = React.forwardRef<HTMLDivElement, React.ComponentProps<typeof NumberField.Group>>(\n function MoneyFieldGroup({ className, onPasteCapture, onKeyDownCapture, onInputCapture, onBlur, ...props }, ref) {\n const money = useMoneyField();\n return (\n <NumberField.Group\n ref={ref}\n className={(state) =>\n cn('MoneyFieldGroup', typeof className === 'function' ? className(state) : className)\n }\n onPasteCapture={(event) => {\n onPasteCapture?.(event);\n if (!event.defaultPrevented) money.onPasteCapture(event);\n }}\n onKeyDownCapture={(event) => {\n onKeyDownCapture?.(event);\n if (!event.defaultPrevented) money.onKeyDownCapture(event);\n }}\n onInputCapture={(event) => {\n onInputCapture?.(event);\n money.onInputCapture(event);\n }}\n onBlur={(event) => {\n onBlur?.(event);\n money.onGroupBlur(event);\n }}\n {...props}\n />\n );\n },\n);\n\nexport const MoneyFieldInput = React.forwardRef<HTMLInputElement, React.ComponentProps<typeof NumberField.Input>>(\n function MoneyFieldInput({ className, ...props }, ref) {\n const money = useMoneyField();\n return (\n <NumberField.Input\n ref={(node) => {\n money.inputRef.current = node;\n assignRef(ref, node);\n }}\n className={(state) =>\n cn('MoneyFieldInput', typeof className === 'function' ? className(state) : className)\n }\n inputMode={money.digits > 0 ? 'decimal' : 'numeric'}\n {...props}\n aria-describedby={describedBy(\n typeof props['aria-describedby'] === 'string' ? props['aria-describedby'] : undefined,\n money.descriptionId,\n money.liveId,\n )}\n />\n );\n },\n);\n\n/** The currency symbol, or the picker. Clicking a fixed symbol focuses the amount. */\nexport const MoneyFieldAffix = React.forwardRef<HTMLSpanElement, React.ComponentProps<'span'>>(\n function MoneyFieldAffix({ className, ...props }, ref) {\n const money = useMoneyField();\n if (money.showPicker) return <CurrencySelect />;\n if (!money.showSymbol) return null;\n return (\n <span\n ref={ref}\n className={cn('MoneyFieldAffix', className)}\n aria-hidden=\"true\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={money.focusInput}\n {...props}\n >\n {money.symbol}\n </span>\n );\n },\n);\n\nfunction SignToggle() {\n const money = useMoneyField();\n if (!money.allowNegative) return null;\n const negative = money.minor != null ? money.minor < 0 : money.pendingSign < 0;\n const label =\n money.minor == null && negative\n ? 'The next amount will be negative'\n : negative\n ? 'Make amount positive'\n : 'Make amount negative';\n return (\n <Button\n type=\"button\"\n emphasis=\"quiet\"\n className=\"MoneyFieldSign\"\n aria-label={label}\n disabled={money.disabled || money.readOnly}\n onClick={money.onToggleSign}\n >\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">\n {negative ? 'remove' : 'add'}\n </span>\n </Button>\n );\n}\n\nexport type MoneyFieldProps = MoneyFieldRootProps;\n\n/**\n * `Field.Error` with the money wording filled in for `valueMissing`, `rangeUnderflow`\n * and `rangeOverflow`. A sibling `Field.Error` is not a child of MoneyField, so the\n * default messages also render unless this part is passed for that match.\n */\nexport const MoneyFieldError = React.forwardRef<HTMLDivElement, React.ComponentProps<typeof Field.Error>>(\n function MoneyFieldError({ match, children, ...props }, ref) {\n const money = useMoneyField();\n const fallback =\n match === 'valueMissing'\n ? money.messages.valueMissing\n : match === 'rangeUnderflow'\n ? money.messages.rangeUnderflow\n : match === 'rangeOverflow'\n ? money.messages.rangeOverflow\n : null;\n return (\n <Field.Error ref={ref} match={match} {...props}>\n {children ?? fallback}\n </Field.Error>\n );\n },\n);\n\nfunction ownsError(children: React.ReactNode, match: string) {\n let found = false;\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child) || child.type !== MoneyFieldError) return;\n const childMatch = (child.props as { match?: string | boolean }).match;\n if (childMatch == null || childMatch === true || childMatch === match) found = true;\n });\n return found;\n}\n\n/**\n * An amount of money, in one currency or a currency the person picks.\n * Put it in Field for the label, description, and error, the same way as NumberField.\n * The value is an integer in minor units.\n */\nexport const MoneyField = Object.assign(\n React.forwardRef<HTMLDivElement, MoneyFieldProps>(function MoneyField(\n { placeholder, steppers = false, children, ...props },\n ref,\n ) {\n return (\n <MoneyFieldRoot ref={ref} data-steppers={steppers ? '' : undefined} {...props}>\n <MoneyFieldGroup>\n <AffixSlot side=\"start\" />\n <MoneyFieldInput placeholder={placeholder} />\n <SignToggle />\n {steppers ? (\n <>\n <NumberField.Increment aria-label=\"Increase\">\n <span className=\"material-symbols-outlined\">add</span>\n </NumberField.Increment>\n <NumberField.Decrement aria-label=\"Decrease\">\n <span className=\"material-symbols-outlined\">remove</span>\n </NumberField.Decrement>\n </>\n ) : null}\n <AffixSlot side=\"end\" />\n </MoneyFieldGroup>\n {children}\n {ownsError(children, 'valueMissing') ? null : <MoneyFieldError match=\"valueMissing\" />}\n {ownsError(children, 'rangeUnderflow') ? null : <MoneyFieldError match=\"rangeUnderflow\" />}\n {ownsError(children, 'rangeOverflow') ? null : <MoneyFieldError match=\"rangeOverflow\" />}\n </MoneyFieldRoot>\n );\n }),\n {\n Root: MoneyFieldRoot,\n Group: MoneyFieldGroup,\n Input: MoneyFieldInput,\n Affix: MoneyFieldAffix,\n CurrencySelect,\n Increment: NumberField.Increment,\n Decrement: NumberField.Decrement,\n Error: MoneyFieldError,\n },\n);\n\nfunction AffixSlot({ side }: { side: 'start' | 'end' }) {\n const money = useMoneyField();\n if (money.affix !== side) return null;\n if (!money.showPicker && !money.showSymbol) return null;\n return <MoneyFieldAffix />;\n}\n","/**\n * Calendar dates as ISO strings (`YYYY-MM-DD`), never `Date` objects.\n *\n * A `Date` at local midnight becomes the day before when something reads it in UTC,\n * and adding 24 hours skips or repeats a day when daylight saving changes. Every\n * calculation here uses UTC date parts, so the calendar day stays put in\n * `America/New_York` and `Australia/Sydney`. \"Today\" is the only local read:\n * the year, month and day of the clock the user is on, then stored as an ISO date.\n */\n\nexport type DateValue = string;\nexport type DateRange = { start: DateValue | null; end: DateValue | null };\nexport type PresetValue = DateValue | DateRange;\n\nexport type Preset = {\n id: string;\n label: string;\n hint?: string;\n /** A fixed value, or a function of today's ISO date. Week-based presets close over `weekStartsOn`. */\n value: PresetValue | ((today: DateValue) => PresetValue);\n};\n\nconst ISO = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\nexport function parseDate(value: string): { y: number; m: number; d: number } | null {\n const match = ISO.exec(value);\n if (!match) return null;\n const y = Number(match[1]);\n const m = Number(match[2]);\n const d = Number(match[3]);\n if (m < 1 || m > 12 || d < 1 || d > daysInMonth(y, m)) return null;\n return { y, m, d };\n}\n\nexport function formatDate(y: number, m: number, d: number): DateValue {\n return `${String(y).padStart(4, '0')}-${String(m).padStart(2, '0')}-${String(d).padStart(2, '0')}`;\n}\n\n/** Days in a month. February respects leap years (2028 has 29). */\nexport function daysInMonth(year: number, month: number): number {\n return new Date(Date.UTC(year, month, 0)).getUTCDate();\n}\n\nfunction utc(value: DateValue): Date {\n const parts = parseDate(value);\n if (!parts) throw new Error(`Not an ISO date: ${value}`);\n return new Date(Date.UTC(parts.y, parts.m - 1, parts.d));\n}\n\nfunction fromUtc(date: Date): DateValue {\n return formatDate(date.getUTCFullYear(), date.getUTCMonth() + 1, date.getUTCDate());\n}\n\n/**\n * The user's local calendar day, as an ISO date.\n * This is the one read that uses the clock's time zone. Everything else stays on UTC date parts.\n */\nexport function todayDate(now: Date = new Date()): DateValue {\n return formatDate(now.getFullYear(), now.getMonth() + 1, now.getDate());\n}\n\n/** ISO dates sort lexicographically, so comparison never builds a `Date`. */\nexport function compare(a: DateValue, b: DateValue): number {\n if (a === b) return 0;\n return a < b ? -1 : 1;\n}\n\nexport function addDays(value: DateValue, days: number): DateValue {\n const date = utc(value);\n date.setUTCDate(date.getUTCDate() + days);\n return fromUtc(date);\n}\n\n/** Moves by calendar months and clamps the day (Jan 31 + 1 month is Feb 28, or Feb 29 in a leap year). */\nexport function addMonths(value: DateValue, months: number): DateValue {\n const parts = parseDate(value);\n if (!parts) throw new Error(`Not an ISO date: ${value}`);\n const index = parts.y * 12 + (parts.m - 1) + months;\n const y = Math.floor(index / 12);\n const m = index - y * 12 + 1;\n return formatDate(y, m, Math.min(parts.d, daysInMonth(y, m)));\n}\n\nexport function addYears(value: DateValue, years: number): DateValue {\n return addMonths(value, years * 12);\n}\n\nexport function startOfMonth(value: DateValue): DateValue {\n const parts = parseDate(value);\n if (!parts) throw new Error(`Not an ISO date: ${value}`);\n return formatDate(parts.y, parts.m, 1);\n}\n\nexport function endOfMonth(value: DateValue): DateValue {\n const parts = parseDate(value);\n if (!parts) throw new Error(`Not an ISO date: ${value}`);\n return formatDate(parts.y, parts.m, daysInMonth(parts.y, parts.m));\n}\n\n/** `weekStartsOn` is 0 (Sunday) through 6 (Saturday), matching `Date#getDay`. */\nexport function startOfWeek(value: DateValue, weekStartsOn: number): DateValue {\n const day = utc(value).getUTCDay();\n const delta = (day - weekStartsOn + 7) % 7;\n return addDays(value, -delta);\n}\n\nexport function endOfWeek(value: DateValue, weekStartsOn: number): DateValue {\n return addDays(startOfWeek(value, weekStartsOn), 6);\n}\n\n/**\n * ISO week number. Week 1 is the week that contains the year's first Thursday,\n * so late December can be week 1 of the next year and early January week 52 or 53.\n */\nexport function isoWeek(value: DateValue): number {\n const date = utc(value);\n const day = date.getUTCDay() || 7;\n date.setUTCDate(date.getUTCDate() + 4 - day);\n const yearStart = new Date(Date.UTC(date.getUTCFullYear(), 0, 1));\n return Math.ceil(((date.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n}\n\nexport function clampDate(value: DateValue, min?: DateValue | null, max?: DateValue | null): DateValue {\n if (min && compare(value, min) < 0) return min;\n if (max && compare(value, max) > 0) return max;\n return value;\n}\n\nexport function isWithin(value: DateValue, min?: DateValue | null, max?: DateValue | null): boolean {\n if (min && compare(value, min) < 0) return false;\n if (max && compare(value, max) > 0) return false;\n return true;\n}\n\n/** Inclusive length: the same day is 1, Oct 1 through Oct 24 is 24. */\nexport function inclusiveDays(start: DateValue, end: DateValue): number {\n const [a, b] = compare(start, end) <= 0 ? [start, end] : [end, start];\n return Math.round((utc(b).getTime() - utc(a).getTime()) / 86400000) + 1;\n}\n\nexport function orderRange(a: DateValue, b: DateValue): { start: DateValue; end: DateValue } {\n return compare(a, b) <= 0 ? { start: a, end: b } : { start: b, end: a };\n}\n\n/**\n * Why `day` cannot end a range that started on `start`, or null when it can.\n * Length is inclusive. The wording is the day's accessible description.\n */\nexport function lengthBlockReason(\n start: DateValue,\n day: DateValue,\n minLength?: number,\n maxLength?: number,\n): string | null {\n const len = inclusiveDays(start, day);\n if (maxLength != null && len > maxLength) return `Ranges can be up to ${maxLength} days`;\n if (minLength != null && len < minLength) return `Ranges must be at least ${minLength} days`;\n return null;\n}\n\n/**\n * Regions whose week starts on Sunday. Used only when `Intl.Locale#getWeekInfo` is missing\n * (Firefox). A bare `en` counts as the US, so `lang=\"en\"` starts on Sunday in Firefox the\n * way it does in Chrome.\n */\nconst SUNDAY_FIRST = new Set(['US', 'CA', 'MX', 'BR', 'JP', 'IL', 'PH', 'AU', 'NZ', 'IN', 'KR', 'TW', 'TH', 'ZA', 'SA']);\n\nfunction localeRegion(locale: string): string | null {\n const tag = locale.trim().replace(/_/g, '-');\n if (!tag.includes('-')) return /^en$/i.test(tag) ? 'US' : null;\n try {\n return new Intl.Locale(tag).region ?? null;\n } catch {\n const part = tag.split('-').find((piece) => /^[A-Za-z]{2}$/.test(piece));\n return part ? part.toUpperCase() : null;\n }\n}\n\n/**\n * First day of the week for a locale. `Intl.Locale#getWeekInfo` uses 1 (Monday)\n * through 7 (Sunday); we store Sunday as 0. Without that API, Monday, except the\n * Sunday-first regions above.\n */\nexport function defaultWeekStartsOn(locale: string): number {\n try {\n const loc = new Intl.Locale(locale) as Intl.Locale & {\n getWeekInfo?: () => { firstDay?: number };\n weekInfo?: { firstDay?: number };\n };\n const info = typeof loc.getWeekInfo === 'function' ? loc.getWeekInfo() : loc.weekInfo;\n const first = info?.firstDay;\n if (typeof first === 'number' && first >= 1 && first <= 7) return first === 7 ? 0 : first;\n } catch {\n /* An unknown locale tag falls through to the region list. */\n }\n const region = localeRegion(locale);\n return region != null && SUNDAY_FIRST.has(region) ? 0 : 1;\n}\n\nexport type GridCell = { date: DateValue; outside: boolean };\n\n/** Six weeks, starting on `weekStartsOn`, so the grid doesn't jump when the month changes. */\nexport function monthCells(month: DateValue, weekStartsOn: number): GridCell[] {\n const first = startOfMonth(month);\n const gridStart = startOfWeek(first, weekStartsOn);\n const monthNumber = parseDate(first)!.m;\n return Array.from({ length: 42 }, (_, i) => {\n const date = addDays(gridStart, i);\n return { date, outside: parseDate(date)!.m !== monthNumber };\n });\n}\n\n/** Noon UTC, so formatting never lands on the previous local day. */\nfunction atNoon(value: DateValue): Date {\n const parts = parseDate(value);\n if (!parts) throw new Error(`Not an ISO date: ${value}`);\n return new Date(Date.UTC(parts.y, parts.m - 1, parts.d, 12));\n}\n\nexport function formatDay(value: DateValue, locale: string): string {\n return new Intl.DateTimeFormat(locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n }).format(atNoon(value));\n}\n\nexport function formatFull(value: DateValue, locale: string): string {\n return new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n }).format(atNoon(value));\n}\n\nexport function formatMonth(value: DateValue, locale: string): string {\n return new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric', timeZone: 'UTC' }).format(atNoon(value));\n}\n\nexport function formatMonthShort(value: DateValue, locale: string): string {\n return new Intl.DateTimeFormat(locale, { month: 'short', timeZone: 'UTC' }).format(atNoon(value));\n}\n\n/** Drops a repeated month or year the way `Intl.DateTimeFormat#formatRange` does. */\nexport function formatRangeLabel(start: DateValue, end: DateValue, locale: string): string {\n const fmt = new Intl.DateTimeFormat(locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n }) as Intl.DateTimeFormat & { formatRange?: (start: Date, end: Date) => string };\n if (typeof fmt.formatRange === 'function') return fmt.formatRange(atNoon(start), atNoon(end));\n return `${formatDay(start, locale)} – ${formatDay(end, locale)}`;\n}\n\nexport function weekdayLabels(locale: string, weekStartsOn: number): { narrow: string; long: string }[] {\n // 2026-01-04 is a Sunday, so index 0 is Sunday before we rotate.\n const sunday = '2026-01-04';\n return Array.from({ length: 7 }, (_, i) => {\n const date = atNoon(addDays(sunday, (weekStartsOn + i) % 7));\n return {\n narrow: new Intl.DateTimeFormat(locale, { weekday: 'narrow', timeZone: 'UTC' }).format(date),\n long: new Intl.DateTimeFormat(locale, { weekday: 'long', timeZone: 'UTC' }).format(date),\n };\n });\n}\n\nfunction weekRange(todayValue: DateValue, weekStartsOn: number, offsetWeeks: number): DateRange {\n const start = addDays(startOfWeek(todayValue, weekStartsOn), offsetWeeks * 7);\n return { start, end: addDays(start, 6) };\n}\n\nfunction monthRange(todayValue: DateValue, offset: number): DateRange {\n const month = addMonths(startOfMonth(todayValue), offset);\n return { start: month, end: endOfMonth(month) };\n}\n\n/** One date: today. Mix with other presets: `[today, last7Days]`. */\nexport const today: Preset = { id: 'today', label: 'Today', value: (day) => day };\nexport const yesterday: Preset = { id: 'yesterday', label: 'Yesterday', value: (day) => addDays(day, -1) };\nexport const tomorrow: Preset = { id: 'tomorrow', label: 'Tomorrow', value: (day) => addDays(day, 1) };\n\n/** Week presets take the week's first day (0 Sunday … 6 Saturday). Default is Monday. */\nexport function thisWeek(weekStartsOn = 1): Preset {\n return { id: 'thisWeek', label: 'This week', value: (day) => weekRange(day, weekStartsOn, 0) };\n}\nexport function lastWeek(weekStartsOn = 1): Preset {\n return { id: 'lastWeek', label: 'Last week', value: (day) => weekRange(day, weekStartsOn, -1) };\n}\nexport function nextWeek(weekStartsOn = 1): Preset {\n return { id: 'nextWeek', label: 'Next week', value: (day) => weekRange(day, weekStartsOn, 1) };\n}\n\nexport const last7Days: Preset = { id: 'last7Days', label: 'Last 7 days', value: (day) => ({ start: addDays(day, -6), end: day }) };\nexport const last30Days: Preset = { id: 'last30Days', label: 'Last 30 days', value: (day) => ({ start: addDays(day, -29), end: day }) };\nexport const thisMonth: Preset = { id: 'thisMonth', label: 'This month', value: (day) => monthRange(day, 0) };\nexport const lastMonth: Preset = { id: 'lastMonth', label: 'Last month', value: (day) => monthRange(day, -1) };\nexport const nextMonth: Preset = { id: 'nextMonth', label: 'Next month', value: (day) => monthRange(day, 1) };\nexport const thisQuarter: Preset = {\n id: 'thisQuarter',\n label: 'This quarter',\n value: (day) => {\n const parts = parseDate(day)!;\n const startMonth = Math.floor((parts.m - 1) / 3) * 3 + 1;\n const start = formatDate(parts.y, startMonth, 1);\n return { start, end: endOfMonth(addMonths(start, 2)) };\n },\n};\nexport const yearToDate: Preset = {\n id: 'yearToDate',\n label: 'Year to date',\n value: (day) => ({ start: formatDate(parseDate(day)!.y, 1, 1), end: day }),\n};\n\n/** The built-in quick selections, in order. Week presets use `weekStartsOn`. */\nexport function builtinPresets(weekStartsOn: number): Preset[] {\n return [\n today,\n yesterday,\n tomorrow,\n thisWeek(weekStartsOn),\n lastWeek(weekStartsOn),\n nextWeek(weekStartsOn),\n last7Days,\n last30Days,\n thisMonth,\n lastMonth,\n nextMonth,\n thisQuarter,\n yearToDate,\n ];\n}\n\nexport const SINGLE_PRESET_IDS = ['today', 'yesterday', 'tomorrow'] as const;\n\nexport function defaultPresets(mode: 'single' | 'range', weekStartsOn: number): Preset[] {\n const all = builtinPresets(weekStartsOn);\n if (mode === 'single') return all.filter((preset) => (SINGLE_PRESET_IDS as readonly string[]).includes(preset.id));\n return all.filter((preset) => !(SINGLE_PRESET_IDS as readonly string[]).includes(preset.id) || preset.id === 'today');\n}\n\nexport function resolvePreset(preset: Preset, todayValue: DateValue): PresetValue {\n return typeof preset.value === 'function' ? preset.value(todayValue) : preset.value;\n}\n\nexport function isRangeValue(value: unknown): value is DateRange {\n return typeof value === 'object' && value !== null && 'start' in value;\n}\n\n/** A one-day range and the same ISO date count as the same selection. */\nexport function sameSelection(a: PresetValue | null, b: PresetValue | null): boolean {\n if (a == null || b == null) return a == null && b == null;\n const left = isRangeValue(a) ? a : { start: a, end: a };\n const right = isRangeValue(b) ? b : { start: b, end: b };\n return left.start === right.start && left.end === right.end;\n}\n\nexport function presetInBounds(\n value: PresetValue,\n min?: DateValue | null,\n max?: DateValue | null,\n isDateDisabled?: (date: DateValue) => boolean,\n): boolean {\n const dates = isRangeValue(value)\n ? value.start && value.end\n ? eachDay(value.start, value.end)\n : []\n : [value];\n if (!dates.length) return false;\n return dates.every((date) => isWithin(date, min, max) && !isDateDisabled?.(date));\n}\n\nfunction eachDay(start: DateValue, end: DateValue): DateValue[] {\n const ordered = orderRange(start, end);\n const days: DateValue[] = [];\n for (let date = ordered.start; compare(date, ordered.end) <= 0; date = addDays(date, 1)) days.push(date);\n return days;\n}\n\n/**\n * The next focused date for an arrow key on the day grid.\n * Left and Right swap in RTL. Returns null when the key isn't a grid key.\n */\nexport function moveFocusDate(\n date: DateValue,\n key: string,\n opts: { weekStartsOn: number; rtl: boolean; shift: boolean },\n): DateValue | null {\n const dir = opts.rtl ? -1 : 1;\n switch (key) {\n case 'ArrowLeft':\n return addDays(date, -dir);\n case 'ArrowRight':\n return addDays(date, dir);\n case 'ArrowUp':\n return addDays(date, -7);\n case 'ArrowDown':\n return addDays(date, 7);\n case 'Home':\n return startOfWeek(date, opts.weekStartsOn);\n case 'End':\n return endOfWeek(date, opts.weekStartsOn);\n case 'PageUp':\n return opts.shift ? addYears(date, -1) : addMonths(date, -1);\n case 'PageDown':\n return opts.shift ? addYears(date, 1) : addMonths(date, 1);\n default:\n return null;\n }\n}\n\nexport function documentLocale(): string {\n if (typeof document !== 'undefined' && document.documentElement.lang) return document.documentElement.lang;\n return 'en-US';\n}\n","import * as React from 'react';\nimport { addMonths, clampDate, compare, endOfMonth, moveFocusDate, startOfMonth, type DateValue } from './date-utils';\n\ntype GridOptions = {\n focused: DateValue | null;\n onFocusedChange: (date: DateValue) => void;\n /** First visible month (`YYYY-MM-01`). */\n month: DateValue;\n onMonthChange: (month: DateValue) => void;\n /** How many months are on screen. Paging keeps the focus inside them. */\n months: number;\n weekStartsOn: number;\n rtl: boolean;\n min?: DateValue;\n max?: DateValue;\n onClear?: () => void;\n onPick?: (date: DateValue) => void;\n};\n\n/**\n * Keyboard map for a day grid, inline or inside the popup (WAI-ARIA APG date picker dialog).\n * Focus may land on a disabled day so the reason it is unavailable can be read.\n * Left and Right follow the writing direction.\n */\nexport function useCalendarGrid({\n focused,\n onFocusedChange,\n month,\n onMonthChange,\n months,\n weekStartsOn,\n rtl,\n min,\n max,\n onClear,\n onPick,\n}: GridOptions) {\n const pendingFocus = React.useRef(false);\n\n const onDayKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!focused) return;\n if (event.key === 'Delete' || event.key === 'Backspace') {\n event.preventDefault();\n onClear?.();\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onPick?.(focused);\n return;\n }\n const raw = moveFocusDate(focused, event.key, { weekStartsOn, rtl, shift: event.shiftKey });\n if (!raw) return;\n event.preventDefault();\n const next = clampDate(raw, min, max);\n if (next === focused) return;\n pendingFocus.current = true;\n onFocusedChange(next);\n const first = startOfMonth(month);\n const last = endOfMonth(addMonths(first, months - 1));\n if (compare(next, first) >= 0 && compare(next, last) <= 0) return;\n // Forward: the focused day lands in the last column, so two months shift by one.\n // Back: it lands in the first column.\n const page = compare(next, last) > 0 ? startOfMonth(addMonths(next, -(months - 1))) : startOfMonth(next);\n if (page !== first) onMonthChange(page);\n };\n\n return { onDayKeyDown, pendingFocus };\n}\n\ntype ChooserOptions = {\n columns: number;\n count: number;\n index: number;\n onIndexChange: (index: number) => void;\n onPick: (index: number) => void;\n /** Escape returns to the day grid. The popup stays open. */\n onBack?: () => void;\n rtl: boolean;\n};\n\n/** The same arrow-key model on the month grid (3×4) and the year grid. */\nexport function useChooserGrid({ columns, count, index, onIndexChange, onPick, onBack, rtl }: ChooserOptions) {\n const onKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n onBack?.();\n return;\n }\n const dir = rtl ? -1 : 1;\n let next = index;\n switch (event.key) {\n case 'ArrowRight':\n next = index + dir;\n break;\n case 'ArrowLeft':\n next = index - dir;\n break;\n case 'ArrowDown':\n next = index + columns;\n break;\n case 'ArrowUp':\n next = index - columns;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = count - 1;\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (event.currentTarget.getAttribute('aria-disabled') === 'true') return;\n onPick(index);\n return;\n default:\n return;\n }\n event.preventDefault();\n if (next < 0 || next >= count) return;\n onIndexChange(next);\n };\n return { onKeyDown };\n}\n","import * as React from 'react';\nimport { Button } from '../../components/button';\nimport { cn } from '../../utils/cn';\nimport {\n addMonths,\n clampDate,\n compare,\n defaultWeekStartsOn,\n documentLocale,\n endOfMonth,\n formatDate,\n formatFull,\n formatMonth,\n formatMonthShort,\n inclusiveDays,\n isWithin,\n isoWeek,\n lengthBlockReason,\n monthCells,\n orderRange,\n parseDate,\n startOfMonth,\n todayDate,\n weekdayLabels,\n type DateRange,\n type DateValue,\n} from './date-utils';\nimport { useCalendarGrid, useChooserGrid } from './use-calendar-grid';\n\nexport type CalendarMode = 'single' | 'range';\n\nexport type CalendarProps = {\n mode?: CalendarMode;\n value?: DateValue | null | DateRange;\n defaultValue?: DateValue | null | DateRange;\n onValueChange?: (value: DateValue | null | DateRange) => void;\n /** The first visible month. Any day in the month is accepted. */\n month?: DateValue;\n defaultMonth?: DateValue;\n onMonthChange?: (month: DateValue) => void;\n /** Months side by side. `auto` is resolved by the picker; Calendar itself wants a number. */\n months?: 1 | 2 | 3;\n min?: DateValue;\n max?: DateValue;\n isDateDisabled?: (date: DateValue) => boolean;\n minLength?: number;\n maxLength?: number;\n weekStartsOn?: number;\n locale?: string;\n showOutsideDays?: boolean;\n showWeekNumbers?: boolean;\n /** Move focus into the grid (the popup does this when it opens). */\n focusSelected?: boolean;\n /**\n * Set while the month or year chooser is open, so Escape can return to the days\n * instead of closing the popup. Cleared on the day view.\n */\n chooserBackRef?: React.MutableRefObject<(() => void) | null>;\n onAnnounce?: (message: string) => void;\n className?: string;\n};\n\ntype View = 'days' | 'months' | 'years';\n\nfunction isRange(value: DateValue | null | DateRange | undefined): value is DateRange {\n return typeof value === 'object' && value !== null && 'start' in value;\n}\n\nfunction emptyFor(mode: CalendarMode): DateValue | null | DateRange {\n return mode === 'range' ? { start: null, end: null } : null;\n}\n\n/**\n * The month grid on its own: no popup, no presets. Pages that keep a calendar\n * open use this. DatePicker composes it.\n */\nexport const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>(function Calendar(\n {\n mode = 'single',\n value,\n defaultValue,\n onValueChange,\n month,\n defaultMonth,\n onMonthChange,\n months = 1,\n min,\n max,\n isDateDisabled,\n minLength,\n maxLength,\n weekStartsOn,\n locale,\n showOutsideDays = true,\n showWeekNumbers = false,\n focusSelected = false,\n chooserBackRef,\n onAnnounce,\n className,\n },\n ref,\n) {\n const rootId = React.useId();\n const localeName = locale || documentLocale();\n const weekStart = weekStartsOn ?? defaultWeekStartsOn(localeName);\n const rootRef = React.useRef<HTMLDivElement>(null);\n React.useImperativeHandle(ref, () => rootRef.current as HTMLDivElement);\n\n const [dir, setDir] = React.useState(false);\n // Read once, on mount. A dir change while the calendar is open is not picked up.\n React.useEffect(() => {\n const el = rootRef.current;\n if (!el) return;\n const update = () => setDir(getComputedStyle(el).direction === 'rtl');\n update();\n }, []);\n\n const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue ?? emptyFor(mode));\n const selected = value !== undefined ? value : uncontrolledValue;\n const range = isRange(selected) ? selected : null;\n const single = !isRange(selected) ? selected : null;\n\n const setSelected = (next: DateValue | null | DateRange) => {\n if (value === undefined) setUncontrolledValue(next);\n onValueChange?.(next);\n };\n\n const todayValue = todayDate();\n const selectedSeed = range?.start || single || null;\n\n function clampMonth(seed: DateValue): DateValue {\n let first = startOfMonth(seed);\n if (max && compare(first, max) > 0) first = startOfMonth(max);\n if (min && compare(endOfMonth(addMonths(first, months - 1)), min) < 0) first = startOfMonth(min);\n if (max && compare(first, max) > 0) first = startOfMonth(max);\n return first;\n }\n\n function enabledOnOpen(date: DateValue): boolean {\n return isWithin(date, min, max) && !isDateDisabled?.(date);\n }\n\n const initialMonth =\n month != null ? startOfMonth(month) : selectedSeed ? startOfMonth(selectedSeed) : clampMonth(startOfMonth(defaultMonth ?? todayValue));\n const [uncontrolledMonth, setUncontrolledMonth] = React.useState(startOfMonth(initialMonth));\n const rawVisible = startOfMonth(month ?? uncontrolledMonth);\n const visible = selectedSeed ? rawVisible : clampMonth(rawVisible);\n const setVisible = (next: DateValue) => {\n const first = startOfMonth(next);\n if (month === undefined) setUncontrolledMonth(first);\n onMonthChange?.(first);\n const count = months;\n const names = Array.from({ length: count }, (_, i) => formatMonth(addMonths(first, i), localeName));\n onAnnounce?.(names.join(', '));\n };\n\n const [focused, setFocused] = React.useState<DateValue | null>(range?.start || single || null);\n const [preview, setPreview] = React.useState<DateValue | null>(null);\n const [view, setView] = React.useState<View>('days');\n const [yearCursor, setYearCursor] = React.useState(() => parseDate(visible)!.y);\n const [chooserMonth, setChooserMonth] = React.useState(0);\n const dayRefs = React.useRef(new Map<string, HTMLButtonElement>());\n const titleRefs = React.useRef<(HTMLButtonElement | null)[]>([]);\n const titleIndex = React.useRef(0);\n const restoreTitle = React.useRef(false);\n\n const { onDayKeyDown, pendingFocus } = useCalendarGrid({\n focused,\n onFocusedChange: (date) => {\n setFocused(date);\n if (range?.start && !range.end) setPreview(date);\n },\n month: visible,\n onMonthChange: setVisible,\n months,\n weekStartsOn: weekStart,\n rtl: dir,\n min,\n max,\n onPick: (date) => pick(date),\n onClear: () => {\n setPreview(null);\n setSelected(emptyFor(mode));\n onAnnounce?.('Selection cleared.');\n },\n });\n\n const opened = React.useRef(false);\n const focusOnOpen = React.useRef<DateValue | null>(null);\n React.useLayoutEffect(() => {\n if (!focusSelected) {\n opened.current = false;\n return;\n }\n if (opened.current) return;\n opened.current = true;\n const target = selectedSeed\n ? selectedSeed\n : enabledOnOpen(todayValue)\n ? todayValue\n : firstEnabledDay(clampMonth(max && compare(todayValue, max) > 0 ? max : (min ?? todayValue)));\n if (!target) return;\n setFocused(target);\n const first = startOfMonth(visible);\n const last = endOfMonth(addMonths(first, months - 1));\n if (compare(target, first) < 0 || compare(target, last) > 0) setVisible(startOfMonth(target));\n focusOnOpen.current = target;\n }, [focusSelected]);\n\n React.useLayoutEffect(() => {\n const target = focusOnOpen.current;\n if (!target) return;\n const button = dayRefs.current.get(target);\n if (!button) return;\n focusOnOpen.current = null;\n button.focus();\n });\n\n function firstEnabledDay(from: DateValue): DateValue | null {\n for (let i = 0; i < months; i++) {\n for (const cell of monthCells(addMonths(from, i), weekStart)) {\n if (!cell.outside && enabledOnOpen(cell.date)) return cell.date;\n }\n }\n return null;\n }\n\n const backToDays = React.useCallback(() => {\n setView('days');\n restoreTitle.current = true;\n }, []);\n\n React.useEffect(() => {\n if (!chooserBackRef) return;\n chooserBackRef.current = view === 'days' ? null : backToDays;\n return () => {\n chooserBackRef.current = null;\n };\n }, [view, chooserBackRef, backToDays]);\n\n React.useLayoutEffect(() => {\n if (view !== 'days' || !restoreTitle.current) return;\n restoreTitle.current = false;\n titleRefs.current[titleIndex.current]?.focus();\n }, [view]);\n\n React.useEffect(() => {\n if (!pendingFocus.current || !focused) return;\n pendingFocus.current = false;\n dayRefs.current.get(focused)?.focus();\n }, [focused, visible, pendingFocus]);\n\n const pendingStart = range?.start && !range.end ? range.start : null;\n\n const pick = (date: DateValue) => {\n if (dayBlocked(date) && !(pendingStart && date === pendingStart && (minLength == null || minLength <= 1))) return;\n if (mode === 'single') {\n setSelected(date);\n setFocused(date);\n onAnnounce?.(formatFull(date, localeName));\n return;\n }\n if (!range?.start || range.end) {\n setSelected({ start: date, end: null });\n setPreview(null);\n setFocused(date);\n onAnnounce?.(`Start date ${formatFull(date, localeName)}. Pick an end date.`);\n return;\n }\n if (date === range.start) {\n setSelected({ start: date, end: date });\n setPreview(null);\n onAnnounce?.(`${formatFull(date, localeName)}, one day.`);\n return;\n }\n const ordered = orderRange(range.start, date);\n setSelected(ordered);\n setPreview(null);\n onAnnounce?.(`${formatFull(ordered.start, localeName)} to ${formatFull(ordered.end, localeName)}, ${inclusiveDays(ordered.start, ordered.end)} days.`);\n };\n\n function dayBlocked(date: DateValue): boolean {\n if (!isWithin(date, min, max)) return true;\n if (isDateDisabled?.(date)) return true;\n if (pendingStart && lengthBlockReason(pendingStart, date, minLength, maxLength)) return true;\n return false;\n }\n\n function blockReason(date: DateValue): string | null {\n if (min && compare(date, min) < 0) return `Before ${formatFull(min, localeName)}`;\n if (max && compare(date, max) > 0) return `After ${formatFull(max, localeName)}`;\n if (isDateDisabled?.(date)) return 'Unavailable';\n if (pendingStart) return lengthBlockReason(pendingStart, date, minLength, maxLength);\n return null;\n }\n\n const labels = weekdayLabels(localeName, weekStart);\n const monthList = Array.from({ length: months }, (_, i) => addMonths(visible, i));\n const shown = new Set(\n monthList.flatMap((item) => monthCells(item, weekStart).filter((cell) => !cell.outside).map((cell) => cell.date)),\n );\n\n const canPage = (delta: number) => {\n const next = addMonths(visible, delta);\n const edge = delta < 0 ? endOfMonth(next) : startOfMonth(addMonths(next, months - 1));\n if (delta < 0 && min && compare(edge, min) < 0) return false;\n if (delta > 0 && max && compare(startOfMonth(next), max) > 0) return false;\n return true;\n };\n\n const pageBy = (delta: number) => {\n if (!canPage(delta)) return;\n setVisible(addMonths(visible, delta));\n const base = focused ?? todayValue;\n setFocused(clampDate(addMonths(base, delta), min, max));\n pendingFocus.current = true;\n };\n\n const visibleDays = monthList.flatMap((item) =>\n monthCells(item, weekStart).filter((cell) => !((cell.outside && !showOutsideDays) || (cell.outside && shown.has(cell.date)))).map((cell) => cell.date),\n );\n const visibleSet = new Set(visibleDays);\n const inView = (date: DateValue | null | undefined): date is DateValue => Boolean(date && visibleSet.has(date));\n const tabDate =\n (inView(focused) ? focused : null) ||\n (inView(single) ? single : null) ||\n (inView(range?.start) ? range!.start : null) ||\n (inView(range?.end) ? range!.end : null) ||\n (inView(todayValue) ? todayValue : null) ||\n visibleDays.find((date) => !dayBlocked(date)) ||\n visibleDays[0] ||\n null;\n\n const previewEnd = pendingStart && preview && preview !== pendingStart ? preview : null;\n const band = previewEnd ? orderRange(pendingStart!, previewEnd) : range?.start && range.end ? orderRange(range.start, range.end) : null;\n\n const chevron = (which: 'prev' | 'next') => {\n const back = which === 'prev';\n const pointLeft = dir ? !back : back;\n return <span className=\"material-symbols-outlined\">{pointLeft ? 'chevron_left' : 'chevron_right'}</span>;\n };\n\n return (\n <div ref={rootRef} className={cn('Calendar', className)} data-months={months}>\n {view === 'days' ? (\n <div className=\"DatePickerMonths\">\n <div className=\"DatePickerNav\">\n <Button type=\"button\" emphasis=\"quiet\" aria-label=\"Previous month\" disabled={!canPage(-1)} onClick={() => pageBy(-1)}>\n {chevron('prev')}\n </Button>\n {monthList.map((item, index) => (\n <button\n key={item}\n type=\"button\"\n className=\"DatePickerMonthTitle\"\n id={`${rootId}-month-${index}`}\n data-index={index}\n ref={(node) => {\n titleRefs.current[index] = node;\n }}\n onClick={() => {\n titleIndex.current = index;\n setChooserMonth(parseDate(item)!.m - 1);\n setYearCursor(parseDate(item)!.y);\n setView('months');\n }}\n >\n {formatMonth(item, localeName)}\n </button>\n ))}\n <Button type=\"button\" emphasis=\"quiet\" aria-label=\"Next month\" disabled={!canPage(1)} onClick={() => pageBy(1)}>\n {chevron('next')}\n </Button>\n </div>\n {monthList.map((item, index) => (\n <Month\n key={item}\n month={item}\n titleId={`${rootId}-month-${index}`}\n monthIndex={index}\n localeName={localeName}\n labels={labels}\n showWeekNumbers={showWeekNumbers}\n showOutsideDays={showOutsideDays}\n shown={shown}\n weekStart={weekStart}\n mode={mode}\n focused={focused}\n tabDate={tabDate}\n single={single}\n rangeStart={range?.start ?? null}\n rangeEnd={range?.end ?? null}\n band={band}\n previewing={Boolean(previewEnd)}\n todayValue={todayValue}\n dayBlocked={dayBlocked}\n blockReason={blockReason}\n onPick={pick}\n onFocusDay={setFocused}\n onPreview={(date) => pendingStart && setPreview(date)}\n onPreviewEnd={() => setPreview(null)}\n onKeyDown={onDayKeyDown}\n dayRefs={dayRefs}\n />\n ))}\n </div>\n ) : view === 'months' ? (\n <MonthChooser\n year={yearCursor}\n localeName={localeName}\n min={min}\n max={max}\n rtl={dir}\n onYear={(delta) => setYearCursor((y) => y + delta)}\n initialIndex={chooserMonth}\n onPick={(monthIndex) => {\n setVisible(formatDate(yearCursor, monthIndex + 1, 1));\n backToDays();\n }}\n onBack={backToDays}\n onOpenYears={() => setView('years')}\n />\n ) : (\n <YearChooser\n year={yearCursor}\n min={min}\n max={max}\n rtl={dir}\n onShift={(delta) => setYearCursor((y) => y + delta)}\n onPick={(y) => {\n setYearCursor(y);\n setView('months');\n }}\n onBack={backToDays}\n />\n )}\n </div>\n );\n});\n\ntype MonthProps = {\n month: DateValue;\n titleId: string;\n monthIndex: number;\n localeName: string;\n labels: { narrow: string; long: string }[];\n showWeekNumbers: boolean;\n showOutsideDays: boolean;\n shown: Set<string>;\n weekStart: number;\n mode: CalendarMode;\n focused: DateValue | null;\n tabDate: DateValue | null;\n single: DateValue | null;\n rangeStart: DateValue | null;\n rangeEnd: DateValue | null;\n band: { start: DateValue; end: DateValue } | null;\n previewing: boolean;\n todayValue: DateValue;\n dayBlocked: (date: DateValue) => boolean;\n blockReason: (date: DateValue) => string | null;\n onPick: (date: DateValue) => void;\n onFocusDay: (date: DateValue) => void;\n onPreview: (date: DateValue) => void;\n onPreviewEnd: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n dayRefs: React.MutableRefObject<Map<string, HTMLButtonElement>>;\n};\n\nfunction Month(props: MonthProps) {\n const cells = monthCells(props.month, props.weekStart);\n const weeks: (typeof cells)[] = [];\n for (let i = 0; i < cells.length; i += 7) weeks.push(cells.slice(i, i + 7));\n return (\n <section className=\"DatePickerMonth\" data-index={props.monthIndex}>\n <div\n role=\"grid\"\n tabIndex={-1}\n aria-labelledby={props.titleId}\n aria-multiselectable={props.mode === 'range' ? true : undefined}\n className=\"CalendarGrid\"\n onMouseLeave={props.onPreviewEnd}\n >\n <div role=\"row\" className=\"CalendarWeek\">\n {props.showWeekNumbers ? <span role=\"columnheader\" className=\"CalendarWeekNumber\" /> : null}\n {props.labels.map((label) => (\n <span key={label.long} role=\"columnheader\" className=\"CalendarWeekday\">\n <abbr title={label.long}>{label.narrow}</abbr>\n </span>\n ))}\n </div>\n {weeks.map((week) => (\n <div role=\"row\" className=\"CalendarWeek\" key={week[0].date}>\n {props.showWeekNumbers ? (\n <span role=\"rowheader\" className=\"CalendarWeekNumber\">\n {isoWeek(week.find((cell) => !cell.outside)?.date ?? week[3].date)}\n </span>\n ) : null}\n {week.map((cell) => {\n const hiddenDuplicate = cell.outside && props.shown.has(cell.date);\n if ((cell.outside && !props.showOutsideDays) || hiddenDuplicate) {\n return <span key={cell.date} role=\"gridcell\" className=\"CalendarDay CalendarDay--empty\" />;\n }\n const blocked = props.dayBlocked(cell.date);\n const reason = blocked ? props.blockReason(cell.date) : null;\n const selectedSingle = props.single === cell.date;\n const isStart = props.rangeStart === cell.date;\n const isEnd = props.rangeEnd === cell.date;\n const inBand =\n props.band != null && compare(cell.date, props.band.start) > 0 && compare(cell.date, props.band.end) < 0;\n const bandStart = props.band?.start === cell.date;\n const bandEnd = props.band?.end === cell.date && props.band.start !== props.band.end;\n const marked = selectedSingle || isStart || isEnd || bandStart || bandEnd;\n const ariaSelected = selectedSingle || isStart || isEnd;\n const parts = [\n formatFull(cell.date, props.localeName),\n cell.date === props.todayValue ? 'today' : '',\n selectedSingle ? 'selected' : '',\n isStart ? 'range start' : '',\n isEnd ? 'range end' : '',\n inBand ? 'in range' : '',\n reason ?? '',\n ].filter(Boolean);\n return (\n <button\n key={cell.date}\n type=\"button\"\n role=\"gridcell\"\n ref={(node) => {\n if (node) props.dayRefs.current.set(cell.date, node);\n else props.dayRefs.current.delete(cell.date);\n }}\n className=\"CalendarDay\"\n tabIndex={cell.date === props.tabDate ? 0 : -1}\n aria-selected={ariaSelected || undefined}\n aria-current={cell.date === props.todayValue ? 'date' : undefined}\n aria-disabled={blocked || undefined}\n aria-label={parts.join(', ')}\n data-selected={marked || undefined}\n data-range-start={bandStart ? '' : undefined}\n data-range-end={bandEnd ? '' : undefined}\n data-in-range={inBand ? '' : undefined}\n data-preview={props.previewing && props.band && compare(cell.date, props.band.start) >= 0 && compare(cell.date, props.band.end) <= 0 ? '' : undefined}\n data-today={cell.date === props.todayValue ? '' : undefined}\n data-outside-month={cell.outside ? '' : undefined}\n data-disabled={blocked ? '' : undefined}\n data-focused={props.focused === cell.date ? '' : undefined}\n onClick={() => props.onPick(cell.date)}\n onMouseEnter={() => props.onPreview(cell.date)}\n onFocus={() => {\n props.onFocusDay(cell.date);\n props.onPreview(cell.date);\n }}\n onKeyDown={props.onKeyDown}\n >\n <span className=\"CalendarDayNumber\">{parseDate(cell.date)!.d}</span>\n </button>\n );\n })}\n </div>\n ))}\n </div>\n </section>\n );\n}\n\nfunction MonthChooser({\n year,\n localeName,\n min,\n max,\n rtl,\n initialIndex,\n onYear,\n onPick,\n onBack,\n onOpenYears,\n}: {\n year: number;\n localeName: string;\n min?: DateValue;\n max?: DateValue;\n rtl: boolean;\n initialIndex: number;\n onYear: (delta: number) => void;\n onPick: (monthIndex: number) => void;\n onBack: () => void;\n onOpenYears: () => void;\n}) {\n const [index, setIndex] = React.useState(initialIndex);\n const cells = React.useRef<(HTMLButtonElement | null)[]>([]);\n const { onKeyDown } = useChooserGrid({\n columns: 3,\n count: 12,\n index,\n onIndexChange: setIndex,\n onPick,\n onBack,\n rtl,\n });\n React.useLayoutEffect(() => {\n cells.current[index]?.focus();\n }, [index]);\n const minYear = min ? parseDate(min)!.y : null;\n const maxYear = max ? parseDate(max)!.y : null;\n return (\n <div className=\"CalendarChooser\">\n <div className=\"DatePickerMonthBar\">\n <Button type=\"button\" emphasis=\"quiet\" aria-label=\"Previous year\" disabled={minYear != null && year <= minYear} onClick={() => onYear(-1)}>\n <span className=\"material-symbols-outlined\">{rtl ? 'chevron_right' : 'chevron_left'}</span>\n </Button>\n <button type=\"button\" className=\"DatePickerMonthTitle\" onClick={onOpenYears}>\n {year}\n </button>\n <Button type=\"button\" emphasis=\"quiet\" aria-label=\"Next year\" disabled={maxYear != null && year >= maxYear} onClick={() => onYear(1)}>\n <span className=\"material-symbols-outlined\">{rtl ? 'chevron_left' : 'chevron_right'}</span>\n </Button>\n </div>\n <div role=\"grid\" tabIndex={-1} className=\"CalendarChooserGrid\" aria-label={`${year} months`}>\n {Array.from({ length: 12 }, (_, i) => {\n const date = formatDate(year, i + 1, 1);\n const disabled =\n (min != null && compare(endOfMonth(date), min) < 0) || (max != null && compare(date, max) > 0);\n return (\n <button\n key={date}\n type=\"button\"\n role=\"gridcell\"\n className=\"CalendarChoice\"\n ref={(node) => {\n cells.current[i] = node;\n }}\n tabIndex={index === i ? 0 : -1}\n aria-disabled={disabled || undefined}\n onClick={() => !disabled && onPick(i)}\n onKeyDown={onKeyDown}\n onFocus={() => setIndex(i)}\n >\n {formatMonthShort(date, localeName)}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction YearChooser({\n year,\n min,\n max,\n rtl,\n onShift,\n onPick,\n onBack,\n}: {\n year: number;\n min?: DateValue;\n max?: DateValue;\n rtl: boolean;\n onShift: (delta: number) => void;\n onPick: (year: number) => void;\n onBack: () => void;\n}) {\n const minYear = min ? parseDate(min)!.y : null;\n const maxYear = max ? parseDate(max)!.y : null;\n const pageStart = Math.floor(year / 12) * 12;\n const pageEnd = pageStart + 11;\n const from = minYear != null ? Math.max(pageStart, minYear) : pageStart;\n const to = maxYear != null ? Math.min(pageEnd, maxYear) : pageEnd;\n const years = to >= from ? Array.from({ length: to - from + 1 }, (_, i) => from + i) : [year];\n const cells = React.useRef<(HTMLButtonElement | null)[]>([]);\n const [index, setIndex] = React.useState(Math.max(0, years.indexOf(year)));\n React.useLayoutEffect(() => {\n cells.current[index]?.focus();\n }, [index]);\n const { onKeyDown } = useChooserGrid({\n columns: 3,\n count: years.length,\n index,\n onIndexChange: setIndex,\n onPick: (i) => onPick(years[i]),\n onBack,\n rtl,\n });\n const prevDisabled = minYear != null && pageStart <= minYear;\n const nextDisabled = maxYear != null && pageEnd >= maxYear;\n return (\n <div className=\"CalendarChooser\">\n <div className=\"DatePickerMonthBar\">\n <Button type=\"button\" emphasis=\"quiet\" aria-label=\"Previous years\" disabled={prevDisabled} onClick={() => !prevDisabled && onShift(-12)}>\n <span className=\"material-symbols-outlined\">{rtl ? 'chevron_right' : 'chevron_left'}</span>\n </Button>\n <span className=\"DatePickerMonthTitle\">\n {years[0]} – {years[years.length - 1]}\n </span>\n <Button type=\"button\" emphasis=\"quiet\" aria-label=\"Next years\" disabled={nextDisabled} onClick={() => !nextDisabled && onShift(12)}>\n <span className=\"material-symbols-outlined\">{rtl ? 'chevron_left' : 'chevron_right'}</span>\n </Button>\n </div>\n <div role=\"grid\" tabIndex={-1} className=\"CalendarChooserGrid\" aria-label=\"Years\">\n {years.map((y, i) => {\n const disabled = (minYear != null && y < minYear) || (maxYear != null && y > maxYear);\n return (\n <button\n key={y}\n type=\"button\"\n role=\"gridcell\"\n className=\"CalendarChoice\"\n ref={(node) => {\n cells.current[i] = node;\n }}\n tabIndex={index === i ? 0 : -1}\n aria-disabled={disabled || undefined}\n onClick={() => !disabled && onPick(y)}\n onKeyDown={onKeyDown}\n onFocus={() => setIndex(i)}\n >\n {y}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n formatRangeLabel,\n isRangeValue,\n presetInBounds,\n resolvePreset,\n sameSelection,\n todayDate,\n type DateValue,\n type Preset,\n type PresetValue,\n} from './date-utils';\n\nexport type DatePresetsProps = {\n presets: Preset[];\n /** The committed or draft selection. A matching preset is checked. */\n value: PresetValue | null;\n onSelect: (preset: Preset, value: PresetValue) => void;\n min?: DateValue;\n max?: DateValue;\n isDateDisabled?: (date: DateValue) => boolean;\n locale?: string;\n /** `row` is the scrolling chip row; `column` is the side list. */\n layout?: 'column' | 'row';\n /**\n * Apply mode checks a preset as the arrows land on it.\n * Immediate mode only moves focus; Enter, Space, or a click selects, so a range doesn't close on the first arrow.\n */\n selectOnNavigate?: boolean;\n label?: string;\n className?: string;\n};\n\n/**\n * Quick selections. A radio group: arrows move, the current value checks the\n * preset it equals, and none are checked when the value is custom.\n */\nexport function DatePresets({\n presets,\n value,\n onSelect,\n min,\n max,\n isDateDisabled,\n locale = 'en-US',\n layout = 'column',\n selectOnNavigate = false,\n label = 'Quick selections',\n className,\n}: DatePresetsProps) {\n const todayValue = todayDate();\n const resolved = presets.map((preset) => ({ preset, value: resolvePreset(preset, todayValue) }));\n const enabled = resolved.map((item) => presetInBounds(item.value, min, max, isDateDisabled));\n const checked = resolved.findIndex((item, i) => enabled[i] && sameSelection(item.value, value));\n const [cursor, setCursor] = React.useState(checked >= 0 ? checked : enabled.findIndex(Boolean));\n const buttons = React.useRef<(HTMLButtonElement | null)[]>([]);\n\n React.useEffect(() => {\n if (checked >= 0) setCursor(checked);\n }, [checked]);\n\n const move = (next: number) => {\n setCursor(next);\n buttons.current[next]?.focus();\n const item = resolved[next];\n if (selectOnNavigate && item && enabled[next]) onSelect(item.preset, item.value);\n };\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n const item = resolved[cursor];\n if (item && enabled[cursor]) onSelect(item.preset, item.value);\n return;\n }\n const dir = event.key === 'ArrowDown' || event.key === 'ArrowRight' ? 1 : event.key === 'ArrowUp' || event.key === 'ArrowLeft' ? -1 : 0;\n if (!dir && event.key !== 'Home' && event.key !== 'End') return;\n event.preventDefault();\n const step = (from: number, delta: number) => {\n for (let i = 1; i <= resolved.length; i++) {\n const next = (from + delta * i + resolved.length) % resolved.length;\n if (enabled[next]) return next;\n }\n return from;\n };\n const next = event.key === 'Home' ? enabled.findIndex(Boolean) : event.key === 'End' ? enabled.lastIndexOf(true) : step(cursor, dir);\n if (next >= 0) move(next);\n };\n\n return (\n <div\n role=\"radiogroup\"\n tabIndex={-1}\n aria-label={label}\n className={cn('DatePickerPresets', className)}\n data-layout={layout}\n onKeyDown={onKeyDown}\n >\n {resolved.map((item, index) => {\n const hint =\n item.preset.hint ??\n (isRangeValue(item.value) && item.value.start && item.value.end\n ? formatRangeLabel(item.value.start, item.value.end, locale)\n : undefined);\n return (\n <button\n key={item.preset.id}\n type=\"button\"\n role=\"radio\"\n className=\"DatePickerPreset\"\n aria-checked={index === checked}\n aria-disabled={!enabled[index] || undefined}\n data-checked={index === checked ? '' : undefined}\n data-disabled={!enabled[index] ? '' : undefined}\n ref={(node) => {\n buttons.current[index] = node;\n }}\n tabIndex={index === cursor ? 0 : -1}\n onClick={() => {\n if (!enabled[index]) return;\n setCursor(index);\n onSelect(item.preset, item.value);\n }}\n >\n <span className=\"DatePickerPresetLabel\">{item.preset.label}</span>\n {hint ? <span className=\"DatePickerPresetHint\">{hint}</span> : null}\n </button>\n );\n })}\n </div>\n );\n}\n","import * as React from 'react';\nimport { useFieldRootContext } from '@base-ui/react/internals/field-root-context';\nimport { useLabelableContext } from '@base-ui/react/internals/labelable-provider';\nimport { Button } from '../../components/button';\nimport { Drawer } from '../../components/drawer';\nimport { Field } from '../../components/field';\nimport { Popover } from '../../components/popover';\nimport { cn } from '../../utils/cn';\nimport { Calendar } from './calendar';\nimport { DatePresets } from './date-presets';\nimport {\n addMonths,\n defaultPresets,\n defaultWeekStartsOn,\n documentLocale,\n formatDay,\n formatRangeLabel,\n inclusiveDays,\n isRangeValue,\n parseDate,\n startOfMonth,\n todayDate,\n type DateRange,\n type DateValue,\n type Preset,\n} from './date-utils';\n\nexport type DatePickerMode = 'single' | 'range';\nexport type PopupKind = 'auto' | 'popover' | 'drawer';\n\ntype Shared = {\n min?: DateValue;\n max?: DateValue;\n isDateDisabled?: (date: DateValue) => boolean;\n minLength?: number;\n maxLength?: number;\n /** `false` hides them, `true` uses the default list for the mode, or pass your own. */\n presets?: boolean | Preset[];\n /** `auto` is 2 months for a range and 1 for a single date, dropping when the panel is narrow. */\n months?: 1 | 2 | 3 | 'auto';\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n locale?: string;\n showOutsideDays?: boolean;\n showWeekNumbers?: boolean;\n /** `apply` keeps a draft until Apply. `immediate` writes the value as soon as a day is picked. */\n commit?: 'apply' | 'immediate';\n clearable?: boolean;\n placeholder?: string;\n name?: string;\n nameStart?: string;\n nameEnd?: string;\n required?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n formatValue?: (value: DateValue | DateRange | null, locale: string) => string;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n popup?: PopupKind;\n /** The month to open on when there is no value yet. Any day in the month is accepted. */\n defaultMonth?: DateValue;\n /**\n * Accessible name of the field and the dialog when there is no `Field.Label`.\n * The value is described, not part of the name.\n */\n label?: string;\n id?: string;\n className?: string;\n};\n\nexport type DatePickerProps = Shared &\n (\n | {\n mode?: 'single';\n value?: DateValue | null;\n defaultValue?: DateValue | null;\n onValueChange?: (value: DateValue | null) => void;\n }\n | {\n mode: 'range';\n value?: DateRange;\n defaultValue?: DateRange;\n onValueChange?: (value: DateRange) => void;\n }\n );\n\nconst EMPTY_RANGE: DateRange = { start: null, end: null };\n\nfunction useNarrowViewport(): boolean {\n const [query, setQuery] = React.useState('(max-width: 48em)');\n const [narrow, setNarrow] = React.useState(false);\n React.useEffect(() => {\n const raw = getComputedStyle(document.documentElement).getPropertyValue('--sl-breakpoint-md').trim();\n if (raw) setQuery(`(max-width: ${raw})`);\n }, []);\n React.useEffect(() => {\n const media = window.matchMedia(query);\n const update = () => setNarrow(media.matches);\n update();\n media.addEventListener('change', update);\n return () => media.removeEventListener('change', update);\n }, [query]);\n return narrow;\n}\n\nfunction hasValue(mode: DatePickerMode, value: DateValue | null | DateRange): boolean {\n if (mode === 'range') return Boolean(isRangeValue(value) && (value.start || value.end));\n return Boolean(value);\n}\n\nfunction halfRange(value: DateValue | null | DateRange): boolean {\n return isRangeValue(value) && Boolean(value.start) && !value.end;\n}\n\n/** 40rem fits two months and a preset column. 32rem is one month. Layout, not tokens. */\nconst TWO_MONTHS_REM = 40;\nconst ONE_MONTH_REM = 32;\nconst COARSE_ONE_REM = 48;\n\n/**\n * First month to show for a selection. A range that fits stays on its start;\n * a longer one keeps the end in the last column.\n */\nfunction monthFor(value: DateValue | null | DateRange, count: number): DateValue | null {\n const start = typeof value === 'string' ? value : isRangeValue(value) ? value.start : null;\n if (!start || !parseDate(start)) return null;\n const end = isRangeValue(value) ? value.end : null;\n const startMonth = startOfMonth(start);\n if (!end || !parseDate(end)) return startMonth;\n const endMonth = startOfMonth(end);\n const startParts = parseDate(startMonth)!;\n const endParts = parseDate(endMonth)!;\n const span = (endParts.y - startParts.y) * 12 + (endParts.m - startParts.m);\n if (span < count) return startMonth;\n return addMonths(endMonth, -(count - 1));\n}\n\n/** An inline width on an ancestor, so a 360px story box caps the popup. A shrink-wrapped parent does not. */\nfunction explicitBox(node: HTMLElement | null): number | undefined {\n const root = parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\n let current = node?.parentElement ?? null;\n while (current && current !== document.documentElement) {\n const raw = current.style.width || current.style.maxWidth || current.style.inlineSize || current.style.maxInlineSize;\n if (raw.endsWith('px')) return parseFloat(raw);\n if (raw.endsWith('rem')) return parseFloat(raw) * root;\n current = current.parentElement;\n }\n return undefined;\n}\n\n/**\n * A field that opens a calendar. Single date or a period is chosen by the\n * developer (`mode`); the person using it cannot switch. Not a Base UI part:\n * the popup is Popover or Drawer, the trigger is styled like a field.\n *\n * A range is a start click, then an end click. An end before the start swaps.\n * Clicking the start again makes a one-day range. Hover or focus previews the\n * band; that preview is not announced as selected.\n *\n * `commit=\"immediate\"` (the default for one date) writes as soon as the day is\n * picked and closes. For a range it writes `{ start, end: null }` on the first\n * click and leaves the popup open, then writes the finished range and closes\n * on the second click. `commit=\"apply\"` (the default for a range) keeps a draft\n * until Apply or Cancel.\n *\n * Escape on a half-picked range clears the start and stays open; a second\n * Escape closes. Escape in the month or year chooser returns to the days.\n * Clicking outside, or any other close, throws the draft away and shows the\n * committed value again. In immediate mode the half range is already committed,\n * so that close keeps it.\n *\n * `readOnly` stays in the tab order and announces the value. It does not open.\n * Direction is read when the popup opens. A dir change while it is open is not picked up.\n */\nexport const DatePicker = React.forwardRef<HTMLElement, DatePickerProps>(function DatePicker(props, ref) {\n const {\n mode = 'single',\n min,\n max,\n isDateDisabled,\n minLength,\n maxLength,\n presets = true,\n months = 'auto',\n weekStartsOn,\n locale,\n showOutsideDays,\n showWeekNumbers,\n commit,\n clearable = true,\n placeholder,\n name,\n nameStart,\n nameEnd,\n required,\n disabled,\n readOnly,\n formatValue,\n open,\n defaultOpen,\n onOpenChange,\n popup = 'auto',\n defaultMonth,\n label,\n id,\n className,\n } = props;\n\n const localeName = locale || documentLocale();\n const weekStart = weekStartsOn ?? defaultWeekStartsOn(localeName);\n const commitMode = commit ?? (mode === 'range' ? 'apply' : 'immediate');\n const narrow = useNarrowViewport();\n const useDrawer = popup === 'drawer' || (popup === 'auto' && narrow);\n const fieldState = useFieldRootContext();\n const { labelId } = useLabelableContext();\n const invalid = fieldState.state.valid === false;\n\n const controlled = props.value !== undefined;\n const [uncontrolled, setUncontrolled] = React.useState<DateValue | null | DateRange>(\n props.defaultValue ?? (mode === 'range' ? EMPTY_RANGE : null),\n );\n const committed = (controlled ? props.value : uncontrolled) ?? (mode === 'range' ? EMPTY_RANGE : null);\n\n const [draft, setDraft] = React.useState<DateValue | null | DateRange>(committed);\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen ?? false);\n const isOpen = open ?? uncontrolledOpen;\n const [announcement, setAnnouncement] = React.useState('');\n const fieldRef = React.useRef<HTMLDivElement>(null);\n const panelRef = React.useRef<HTMLDivElement>(null);\n const chooserBack = React.useRef<(() => void) | null>(null);\n const [panelWidth, setPanelWidth] = React.useState(0);\n const [rtl, setRtl] = React.useState(false);\n // Read when the popup opens. A dir change while it is open is not picked up.\n React.useLayoutEffect(() => {\n const el = fieldRef.current;\n if (el) setRtl(getComputedStyle(el).direction === 'rtl');\n }, [isOpen]);\n\n React.useLayoutEffect(() => {\n if (!isOpen) return;\n let observer: ResizeObserver | null = null;\n let frame = 0;\n const attach = () => {\n const node = panelRef.current;\n if (!node) {\n frame = requestAnimationFrame(attach);\n return;\n }\n const read = () => setPanelWidth(node.clientWidth);\n read();\n observer = new ResizeObserver(read);\n observer.observe(node);\n };\n attach();\n return () => {\n cancelAnimationFrame(frame);\n observer?.disconnect();\n };\n }, [isOpen]);\n\n const rootPx = typeof document !== 'undefined' ? parseFloat(getComputedStyle(document.documentElement).fontSize) || 16 : 16;\n const coarse = typeof window !== 'undefined' && window.matchMedia('(pointer: coarse)').matches;\n const requested = months === 'auto' ? (mode === 'range' ? 2 : 1) : months;\n let monthCount: 1 | 2 | 3 = requested;\n if (useDrawer) monthCount = 1;\n else if (panelWidth > 0) {\n const one = panelWidth < ONE_MONTH_REM * rootPx || (coarse && panelWidth < COARSE_ONE_REM * rootPx);\n if (one) monthCount = 1;\n else if (panelWidth < TWO_MONTHS_REM * rootPx) monthCount = requested === 1 ? 1 : 2;\n }\n if (monthCount > requested) monthCount = requested;\n const rowLayout = useDrawer || (panelWidth > 0 && panelWidth < TWO_MONTHS_REM * rootPx);\n const compact = useDrawer || (panelWidth > 0 && panelWidth < ONE_MONTH_REM * rootPx);\n const touch = useDrawer || coarse || compact;\n const boxCap = isOpen && typeof document !== 'undefined' ? explicitBox(fieldRef.current) : undefined;\n\n const [calendarMonth, setCalendarMonth] = React.useState<DateValue>(() =>\n startOfMonth(monthFor(committed, months === 'auto' ? (mode === 'range' ? 2 : 1) : months) ?? defaultMonth ?? todayDate()),\n );\n const generatedId = React.useId();\n const triggerId = id ?? generatedId;\n\n const setOpen = (next: boolean) => {\n if (open === undefined) setUncontrolledOpen(next);\n onOpenChange?.(next);\n };\n\n const write = (next: DateValue | null | DateRange) => {\n if (!controlled) setUncontrolled(next);\n if (mode === 'range') (props.onValueChange as ((value: DateRange) => void) | undefined)?.(isRangeValue(next) ? next : EMPTY_RANGE);\n else (props.onValueChange as ((value: DateValue | null) => void) | undefined)?.(typeof next === 'string' ? next : null);\n };\n\n const display = formatValue\n ? formatValue(mode === 'range' ? (isRangeValue(committed) ? committed : EMPTY_RANGE) : typeof committed === 'string' ? committed : null, localeName)\n : labelFor(mode, committed, localeName, placeholder);\n\n const presetList =\n presets === false ? [] : presets === true ? defaultPresets(mode, weekStart) : presets.filter((preset) => (mode === 'single' ? !isRangeValue(typeof preset.value === 'function' ? preset.value(todayDate()) : preset.value) : true));\n\n const committedKey = typeof committed === 'string' ? committed : isRangeValue(committed) ? `${committed.start ?? ''}|${committed.end ?? ''}` : '';\n React.useEffect(() => {\n if (!isOpen) return;\n const next = monthFor(committed, monthCount);\n if (next) setCalendarMonth(next);\n }, [isOpen, committedKey, monthCount]);\n\n const onDraft = (next: DateValue | null | DateRange) => {\n setDraft(next);\n if (commitMode === 'immediate') {\n write(next);\n const done = mode === 'single' ? typeof next === 'string' : isRangeValue(next) && next.start && next.end;\n if (done) setOpen(false);\n }\n };\n\n const clearDraft = () => {\n const empty = mode === 'range' ? EMPTY_RANGE : null;\n setDraft(empty);\n setAnnouncement('Selection cleared.');\n };\n\n const clearCommitted = () => {\n const empty = mode === 'range' ? EMPTY_RANGE : null;\n setDraft(empty);\n write(empty);\n setAnnouncement(mode === 'range' ? 'Dates cleared.' : 'Date cleared.');\n document.getElementById(triggerId)?.focus();\n };\n\n const apply = () => {\n write(draft);\n setOpen(false);\n };\n\n const cancel = () => {\n setDraft(committed);\n setOpen(false);\n };\n\n const onPopupChange = (next: boolean, details?: { reason?: string; cancel?: () => void }) => {\n if (next && readOnly) {\n details?.cancel?.();\n return;\n }\n if (!next && details?.reason === 'escape-key' && chooserBack.current) {\n details.cancel?.();\n chooserBack.current();\n return;\n }\n if (!next && halfRange(draft) && details?.reason === 'escape-key') {\n details.cancel?.();\n clearDraft();\n setAnnouncement('Start date cleared. Pick a start date, or press Escape to close.');\n return;\n }\n // Outside click and every other close throw the draft away. Immediate mode\n // has already written a half range, so that close keeps it.\n if (!next) setDraft(committed);\n if (next) setDraft(committed);\n setOpen(next);\n };\n\n const reveal = (value: DateValue | null | DateRange) => {\n const next = monthFor(value, monthCount);\n if (next) setCalendarMonth(next);\n };\n\n const panel = (\n <div\n ref={panelRef}\n className=\"DatePickerPanel\"\n data-months={monthCount}\n data-mode={mode}\n data-popup={useDrawer ? 'drawer' : 'popover'}\n data-layout={rowLayout ? 'row' : 'column'}\n data-compact={compact ? '' : undefined}\n data-touch={touch ? '' : undefined}\n >\n {presetList.length ? (\n <DatePresets\n presets={presetList}\n value={draft}\n min={min}\n max={max}\n isDateDisabled={isDateDisabled}\n locale={localeName}\n layout={rowLayout ? 'row' : 'column'}\n selectOnNavigate={commitMode === 'apply'}\n onSelect={(_preset, next) => {\n const value = mode === 'range' && typeof next === 'string' ? { start: next, end: next } : next;\n onDraft(value);\n reveal(value);\n }}\n />\n ) : null}\n <Calendar\n mode={mode}\n value={draft}\n onValueChange={onDraft}\n month={calendarMonth}\n defaultMonth={defaultMonth}\n onMonthChange={setCalendarMonth}\n months={monthCount}\n chooserBackRef={chooserBack}\n min={min}\n max={max}\n isDateDisabled={isDateDisabled}\n minLength={minLength}\n maxLength={maxLength}\n weekStartsOn={weekStart}\n locale={localeName}\n showOutsideDays={showOutsideDays}\n showWeekNumbers={showWeekNumbers}\n focusSelected={isOpen}\n onAnnounce={setAnnouncement}\n />\n <div className=\"DatePickerFooter\">\n <p className=\"DatePickerSummary\">{summary(mode, draft, localeName)}</p>\n <div className=\"DatePickerActions\">\n {clearable ? (\n <Button type=\"button\" emphasis=\"quiet\" onClick={clearDraft}>\n Clear\n </Button>\n ) : null}\n {commitMode === 'apply' ? (\n <Button type=\"button\" emphasis=\"standard\" onClick={cancel}>\n Cancel\n </Button>\n ) : null}\n {commitMode === 'apply' ? (\n <Button type=\"button\" emphasis=\"bold\" className=\"DatePickerApply\" onClick={apply}>\n Apply\n </Button>\n ) : null}\n </div>\n </div>\n <div className=\"visually-hidden\" aria-live=\"polite\">\n {announcement}\n </div>\n </div>\n );\n\n const valueId = `${triggerId}-value`;\n const named = labelId ? { 'aria-labelledby': labelId } : label ? { 'aria-label': label } : {};\n const described = labelId || label ? { 'aria-describedby': valueId } : {};\n const popupName = labelId\n ? { 'aria-labelledby': labelId }\n : { 'aria-label': label || placeholder || (mode === 'range' ? 'Choose dates' : 'Choose a date') };\n const face = <TriggerFace id={valueId} display={display} placeholder={placeholder} empty={!hasValue(mode, committed)} />;\n const triggerA11y = {\n 'aria-haspopup': 'dialog' as const,\n disabled,\n 'aria-invalid': invalid || undefined,\n 'aria-readonly': readOnly || undefined,\n 'data-invalid': invalid ? ('' as const) : undefined,\n ...named,\n ...described,\n };\n\n const trigger = (\n <div ref={fieldRef} className={cn('DatePickerField', className)}>\n {useDrawer ? (\n <Drawer.Trigger id={triggerId} ref={ref} className=\"DatePickerTrigger\" {...triggerA11y}>\n {face}\n </Drawer.Trigger>\n ) : (\n <Popover.Trigger id={triggerId} ref={ref} className=\"DatePickerTrigger\" {...triggerA11y}>\n {face}\n </Popover.Trigger>\n )}\n {clearable && hasValue(mode, committed) && !disabled && !readOnly ? (\n <Button type=\"button\" emphasis=\"quiet\" className=\"DatePickerClear\" aria-label={mode === 'range' ? 'Clear dates' : 'Clear date'} onClick={clearCommitted}>\n <span className=\"material-symbols-outlined\">close</span>\n </Button>\n ) : null}\n {mode === 'single' ? (\n <HiddenValue name={name} value={typeof committed === 'string' ? committed : ''} required={required} triggerId={triggerId} />\n ) : (\n <>\n <HiddenValue name={nameStart ?? (name ? `${name}[start]` : undefined)} value={isRangeValue(committed) ? committed.start ?? '' : ''} required={required} triggerId={triggerId} />\n <input\n className=\"visually-hidden\"\n name={nameEnd ?? (name ? `${name}[end]` : undefined)}\n value={isRangeValue(committed) ? committed.end ?? '' : ''}\n tabIndex={-1}\n aria-hidden\n autoComplete=\"off\"\n onChange={() => {}}\n onFocus={() => document.getElementById(triggerId)?.focus()}\n />\n </>\n )}\n </div>\n );\n\n const popupStyle = boxCap ? { maxInlineSize: boxCap } : undefined;\n\n if (useDrawer) {\n return (\n <Drawer.Root swipeDirection=\"down\" open={isOpen} onOpenChange={onPopupChange} modal>\n {trigger}\n <Drawer.Portal>\n <Drawer.Backdrop />\n <Drawer.Viewport>\n <Drawer.Popup {...popupName} data-months={monthCount} dir={rtl ? 'rtl' : 'ltr'} style={popupStyle}>\n <Drawer.Content>\n {panel}\n <Drawer.Close className=\"visually-hidden\" tabIndex={-1}>Close</Drawer.Close>\n </Drawer.Content>\n </Drawer.Popup>\n </Drawer.Viewport>\n </Drawer.Portal>\n </Drawer.Root>\n );\n }\n\n return (\n <Popover.Root open={isOpen} onOpenChange={onPopupChange} modal=\"trap-focus\">\n {trigger}\n <Popover.Portal>\n <Popover.Positioner sideOffset={8}>\n <Popover.Popup {...popupName} className=\"DatePickerPopup\" data-months={monthCount} dir={rtl ? 'rtl' : 'ltr'} initialFocus={false} style={popupStyle}>\n {panel}\n <Popover.Close className=\"visually-hidden\" tabIndex={-1}>Close</Popover.Close>\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n );\n});\n\nfunction TriggerFace({ id, display, placeholder, empty }: { id: string; display: string; placeholder?: string; empty: boolean }) {\n return (\n <>\n <span className=\"material-symbols-outlined DatePickerIcon\" aria-hidden=\"true\">\n calendar_today\n </span>\n <span id={id} className=\"DatePickerValue\" data-placeholder={empty ? '' : undefined}>\n {empty ? placeholder || display : display}\n </span>\n </>\n );\n}\n\n/** A real input, not type=hidden, so required and Field validation see the value. Focus goes to the trigger. */\nfunction HiddenValue({ name, value, required, triggerId }: { name?: string; value: string; required?: boolean; triggerId: string }) {\n return (\n <Field.Control\n className=\"visually-hidden\"\n name={name}\n value={value}\n required={required}\n tabIndex={-1}\n aria-hidden\n autoComplete=\"off\"\n onFocus={() => {\n document.getElementById(triggerId)?.focus();\n }}\n />\n );\n}\n\nfunction labelFor(mode: DatePickerMode, value: DateValue | null | DateRange, locale: string, placeholder?: string) {\n if (mode === 'single') {\n return typeof value === 'string' ? formatDay(value, locale) : placeholder || 'Choose a date';\n }\n if (isRangeValue(value) && value.start && value.end) return formatRangeLabel(value.start, value.end, locale);\n if (isRangeValue(value) && value.start) return `${formatDay(value.start, locale)} –`;\n return placeholder || 'Choose dates';\n}\n\nfunction summary(mode: DatePickerMode, value: DateValue | null | DateRange, locale: string) {\n if (mode === 'range' && isRangeValue(value) && value.start && value.end) {\n return `${formatRangeLabel(value.start, value.end, locale)} · ${inclusiveDays(value.start, value.end)} days`;\n }\n if (mode === 'range' && isRangeValue(value) && value.start) return `Start date ${formatDay(value.start, locale)}. Pick an end date.`;\n if (mode === 'single' && typeof value === 'string') return formatDay(value, locale);\n return 'No date selected';\n}\n","/**\n * Splitter layout math, with no DOM. Sizes are a number (percent of the root) or a\n * \"NNNpx\" / \"NN%\" string. One panel is the filler: the only one without a size, or the\n * last panel when every panel has one. The filler takes what the others leave.\n * Px and percent mix. A drag, a key, or a smaller root never pushes a panel past its\n * min or max. Collapsing remembers the size to restore. A collapse that happened\n * because the root was too small is marked, and it opens again when the room returns.\n * A collapse the person chose stays collapsed. Pass the handles' total size to\n * measure so the panels share what's left after the bars.\n */\n\nexport interface Size {\n unit: 'px' | 'percent';\n value: number;\n}\n\nexport type SizeInput = number | string;\n\nexport interface PanelSpec {\n id: string;\n /** Omitted on the filler. A number is a percent of the root. */\n defaultSize?: SizeInput;\n minSize?: SizeInput;\n maxSize?: SizeInput;\n collapsible?: boolean;\n /** Defaults to 0. */\n collapsedSize?: SizeInput;\n defaultCollapsed?: boolean;\n /**\n * Take the collapsed size for this render and hide the panel. Not a choice, and\n * not stored. List detail uses it while the detail is closed or in a drawer.\n */\n suspended?: boolean;\n}\n\n/** One panel after the defaults are resolved. `size` is the size the person chose. */\nexport interface RuntimePanel {\n id: string;\n fill: boolean;\n size: Size;\n defaultSize: Size;\n min: Size;\n max: Size | null;\n collapsible: boolean;\n collapsedSize: Size;\n collapsed: boolean;\n /** The size to put back on Enter. Set when the panel collapses. */\n restore: Size | null;\n /**\n * True when settle collapsed this panel because the root was too small.\n * Never written to storage. A collapse from Enter or a button leaves it false.\n */\n autoCollapsed: boolean;\n /** See PanelSpec.suspended. */\n suspended: boolean;\n}\n\nexport interface StoredPanel {\n size: string;\n collapsed: boolean;\n}\n\nexport type StoredLayout = Record<string, StoredPanel>;\n\nexport type SplitterKey =\n | 'ArrowLeft'\n | 'ArrowRight'\n | 'ArrowUp'\n | 'ArrowDown'\n | 'Home'\n | 'End'\n | 'Enter';\n\nexport interface KeyOptions {\n orientation: 'horizontal' | 'vertical';\n shift?: boolean;\n rtl?: boolean;\n /** Percent of the root. */\n step: number;\n largeStep: number;\n}\n\nconst ZERO: Size = { unit: 'px', value: 0 };\n\nexport function parseSize(input: SizeInput | null | undefined): Size | null {\n if (input == null || input === '') return null;\n if (typeof input === 'number') return Number.isFinite(input) ? { unit: 'percent', value: input } : null;\n const text = input.trim();\n const px = /^(-?\\d+(?:\\.\\d+)?)px$/.exec(text);\n if (px) return { unit: 'px', value: Number(px[1]) };\n const percent = /^(-?\\d+(?:\\.\\d+)?)%$/.exec(text);\n if (percent) return { unit: 'percent', value: Number(percent[1]) };\n return null;\n}\n\nexport function serializeSize(size: Size): string {\n const n = Math.round(size.value * 100) / 100;\n const text = Object.is(n, -0) ? '0' : String(n);\n return size.unit === 'px' ? `${text}px` : `${text}%`;\n}\n\nfunction toPx(size: Size, root: number): number {\n return size.unit === 'px' ? size.value : (size.value / 100) * root;\n}\n\nfunction fromPx(px: number, unit: Size['unit'], root: number): Size {\n const value = unit === 'px' || root === 0 ? px : (px / root) * 100;\n return { unit, value: Math.round(value * 100) / 100 };\n}\n\nfunction clamp(n: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, n));\n}\n\nfunction copy(panel: RuntimePanel): RuntimePanel {\n return { ...panel, size: { ...panel.size }, defaultSize: { ...panel.defaultSize }, min: { ...panel.min }, max: panel.max ? { ...panel.max } : null, collapsedSize: { ...panel.collapsedSize }, restore: panel.restore ? { ...panel.restore } : null };\n}\n\n/** Build the runtime panels. The filler is the only panel without a size, or the last one. */\nexport function createPanels(specs: PanelSpec[]): RuntimePanel[] {\n if (specs.length < 2) throw new Error('Splitter needs at least two panels.');\n const ids = new Set<string>();\n for (const spec of specs) {\n if (!spec.id) throw new Error('Splitter panel needs an id.');\n if (ids.has(spec.id)) throw new Error(`Splitter panel id \"${spec.id}\" is used twice.`);\n ids.add(spec.id);\n }\n const missing = specs.flatMap((spec, index) => (spec.defaultSize == null ? [index] : []));\n const fillAt = missing.length ? missing[missing.length - 1] : specs.length - 1;\n return specs.map((spec, index) => {\n const fill = index === fillAt;\n const parsed = parseSize(spec.defaultSize) ?? { unit: 'percent' as const, value: Math.round(100 / specs.length) };\n const size = fill && spec.defaultSize == null ? { unit: 'percent' as const, value: 0 } : parsed;\n const collapsed = spec.defaultCollapsed ?? false;\n return {\n id: spec.id,\n fill,\n size,\n defaultSize: { ...size },\n min: parseSize(spec.minSize) ?? ZERO,\n max: parseSize(spec.maxSize),\n collapsible: spec.collapsible ?? false,\n collapsedSize: parseSize(spec.collapsedSize) ?? ZERO,\n collapsed,\n restore: collapsed ? { ...size } : null,\n autoCollapsed: false,\n suspended: spec.suspended ?? false,\n };\n });\n}\n\n/**\n * New min, max, or collapsible props. Keep the size the person chose when it still\n * fits. A size outside the new range takes the new default. A panel that can no\n * longer collapse opens.\n */\nexport function syncPanels(current: RuntimePanel[], specs: PanelSpec[]): RuntimePanel[] {\n const created = createPanels(specs);\n let changed = created.length !== current.length;\n const next = created.map((panel) => {\n const prev = current.find((item) => item.id === panel.id);\n if (!prev) {\n changed = true;\n return panel;\n }\n const size = within(prev.size, panel.min, panel.max) ? prev.size : panel.size;\n const collapsed = panel.collapsible ? prev.collapsed : false;\n const autoCollapsed = Boolean(collapsed && prev.autoCollapsed);\n const restore = collapsed ? { ...(prev.restore ?? size) } : null;\n const same =\n size.value === prev.size.value &&\n size.unit === prev.size.unit &&\n collapsed === prev.collapsed &&\n autoCollapsed === prev.autoCollapsed &&\n panel.suspended === prev.suspended &&\n panel.collapsible === prev.collapsible &&\n panel.min.value === prev.min.value &&\n panel.min.unit === prev.min.unit &&\n (panel.max?.value ?? null) === (prev.max?.value ?? null) &&\n (panel.max?.unit ?? null) === (prev.max?.unit ?? null);\n if (!same) changed = true;\n return { ...panel, size: { ...size }, collapsed, autoCollapsed, restore };\n });\n return changed ? next : current;\n}\n\nfunction limits(panel: RuntimePanel, root: number): { min: number; max: number } {\n const min = toPx(panel.min, root);\n const max = panel.max ? toPx(panel.max, root) : root;\n return { min, max: Math.max(min, max) };\n}\n\nfunction taken(panel: RuntimePanel): boolean {\n return panel.collapsed || panel.suspended;\n}\n\n/**\n * Pixel width (or height) of each panel. `root` is the splitter's content box.\n * `handles` is the total size of the bars, which are flex items too: the panels\n * share what's left, or the filler and the values would be short by that many pixels.\n */\nexport function measure(panels: RuntimePanel[], root: number, handles = 0): number[] {\n const safeRoot = Math.max(0, root - (Number.isFinite(handles) ? handles : 0));\n const fill = Math.max(0, panels.findIndex((panel) => panel.fill));\n const px = panels.map((panel) => {\n if (panel.fill && !taken(panel)) return 0;\n if (taken(panel)) return toPx(panel.collapsedSize, safeRoot);\n const { min, max } = limits(panel, safeRoot);\n return clamp(toPx(panel.size, safeRoot), min, max);\n });\n const fillMin = toPx(panels[fill].min, safeRoot);\n let used = px.reduce((sum, value) => sum + value, 0);\n if (safeRoot - used < fillMin) {\n const deficit = fillMin - (safeRoot - used);\n const flexible = panels.flatMap((panel, index) => {\n if (panel.fill || taken(panel)) return [];\n const room = px[index] - toPx(panel.min, safeRoot);\n return room > 0 ? [{ index, room }] : [];\n });\n const roomSum = flexible.reduce((sum, item) => sum + item.room, 0);\n const take = Math.min(deficit, roomSum);\n let left = take;\n flexible.forEach((item, index) => {\n const share = index === flexible.length - 1 ? left : (item.room / roomSum) * take;\n px[item.index] -= share;\n left -= share;\n });\n used = px.reduce((sum, value) => sum + value, 0);\n }\n const rounded = px.map((value, index) => (index === fill ? 0 : Math.round(value)));\n const sum = rounded.reduce((total, value) => total + value, 0);\n const fillMax = panels[fill].max ? toPx(panels[fill].max, safeRoot) : safeRoot;\n rounded[fill] = clamp(Math.round(safeRoot) - sum, 0, Math.round(fillMax));\n return rounded;\n}\n\n/** Collapse panels from the end when even their minimums no longer fit. */\nexport function settle(panels: RuntimePanel[], root: number): RuntimePanel[] {\n const next = panels.map(copy);\n const overflow = () => {\n const sum = next.reduce((total, panel) => {\n if (taken(panel)) return total + toPx(panel.collapsedSize, root);\n return total + toPx(panel.min, root);\n }, 0);\n return sum - root;\n };\n let changed = false;\n if (overflow() > 0.5) {\n for (let pass = 0; pass < 2 && overflow() > 0.5; pass += 1) {\n for (let index = next.length - 1; index >= 0 && overflow() > 0.5; index -= 1) {\n const panel = next[index];\n if (pass === 0 && panel.fill) continue;\n if (!panel.collapsible || panel.collapsed || panel.suspended) continue;\n next[index] = { ...panel, collapsed: true, autoCollapsed: true, restore: { ...panel.size } };\n changed = true;\n }\n }\n } else {\n // Room came back. Open only the panels settle itself closed, back to the size\n // they had. A panel the person collapsed stays closed.\n for (let index = 0; index < next.length; index += 1) {\n const panel = next[index];\n if (!panel.autoCollapsed || !panel.collapsed || panel.suspended) continue;\n const gain = toPx(panel.min, root) - toPx(panel.collapsedSize, root);\n if (overflow() + gain > 0.5) continue;\n next[index] = {\n ...panel,\n collapsed: false,\n autoCollapsed: false,\n size: { ...(panel.restore ?? panel.defaultSize) },\n restore: null,\n };\n changed = true;\n }\n }\n return changed ? next : panels;\n}\n\nexport function handleTarget(panels: RuntimePanel[], handleIndex: number): number {\n const left = handleIndex;\n const right = handleIndex + 1;\n if (!panels[left]?.fill) return left;\n return right;\n}\n\n/**\n * Move the handle by `deltaPx` toward the end of the axis. The sized neighbor\n * changes; the filler absorbs it. Stops at min and max on both.\n */\nexport function resizeByDelta(panels: RuntimePanel[], root: number, handleIndex: number, deltaPx: number): RuntimePanel[] {\n if (!Number.isFinite(root) || root <= 0) return panels;\n const target = handleTarget(panels, handleIndex);\n const fill = panels.findIndex((panel) => panel.fill);\n if (target < 0 || fill < 0 || panels[target].fill) return panels;\n const pixels = measure(panels, root);\n const current = pixels[target];\n const sign = target === handleIndex ? 1 : -1;\n const { min, max } = limits(panels[target], root);\n const fillMin = toPx(panels[fill].min, root);\n const fillMax = panels[fill].max ? toPx(panels[fill].max, root) : root;\n let delta = sign * deltaPx;\n delta = clamp(delta, Math.max(min - current, pixels[fill] - fillMax), Math.min(max - current, pixels[fill] - fillMin));\n const next = panels.map(copy);\n next[target] = {\n ...next[target],\n collapsed: false,\n autoCollapsed: false,\n size: fromPx(current + delta, next[target].size.unit, root),\n };\n return next;\n}\n\nexport function toggleCollapsed(panels: RuntimePanel[], handleIndex: number): RuntimePanel[] | null {\n const target = handleTarget(panels, handleIndex);\n const panel = panels[target];\n if (!panel || panel.fill || !panel.collapsible) return null;\n const next = panels.map(copy);\n if (panel.collapsed) {\n next[target] = { ...next[target], collapsed: false, autoCollapsed: false, size: { ...(panel.restore ?? panel.defaultSize) }, restore: null };\n } else {\n next[target] = { ...next[target], collapsed: true, autoCollapsed: false, restore: { ...panel.size } };\n }\n return next;\n}\n\nexport function resetToDefault(panels: RuntimePanel[], handleIndex: number): RuntimePanel[] {\n const target = handleTarget(panels, handleIndex);\n const panel = panels[target];\n if (!panel || panel.fill) return panels;\n const next = panels.map(copy);\n next[target] = { ...next[target], collapsed: false, autoCollapsed: false, size: { ...panel.defaultSize }, restore: null };\n return next;\n}\n\n/** `null` when the key does not apply, or the panel cannot collapse. */\nexport function applyKey(\n panels: RuntimePanel[],\n root: number,\n handleIndex: number,\n key: SplitterKey,\n options: KeyOptions,\n): RuntimePanel[] | null {\n if (key === 'Enter') return toggleCollapsed(panels, handleIndex);\n let axisKey = key;\n if (options.rtl && options.orientation === 'horizontal') {\n if (key === 'ArrowLeft') axisKey = 'ArrowRight';\n else if (key === 'ArrowRight') axisKey = 'ArrowLeft';\n }\n const horizontal = options.orientation === 'horizontal';\n const along = horizontal ? axisKey === 'ArrowLeft' || axisKey === 'ArrowRight' : axisKey === 'ArrowUp' || axisKey === 'ArrowDown';\n const edge = axisKey === 'Home' || axisKey === 'End';\n if (!along && !edge) return null;\n const target = handleTarget(panels, handleIndex);\n const panel = panels[target];\n if (!panel || panel.fill) return null;\n const sign = target === handleIndex ? 1 : -1;\n const pixels = measure(panels, root);\n const { min, max } = limits(panel, root);\n if (edge) {\n const goal = axisKey === 'Home' ? min : max;\n return resizeByDelta(panels, root, handleIndex, (goal - pixels[target]) / sign);\n }\n const step = ((options.shift ? options.largeStep : options.step) / 100) * root;\n const towardEnd = axisKey === 'ArrowRight' || axisKey === 'ArrowDown';\n return resizeByDelta(panels, root, handleIndex, towardEnd ? step : -step);\n}\n\nfunction sameUnit(size: Size, bound: Size | null): boolean {\n return bound == null || bound.unit === size.unit;\n}\n\nfunction within(size: Size, min: Size, max: Size | null): boolean {\n if (!sameUnit(size, min) || !sameUnit(size, max)) return false;\n if (size.value < min.value) return false;\n if (max && size.value > max.value) return false;\n return true;\n}\n\n/**\n * Read a stored layout. Corrupt JSON, a bad size, or a size outside min/max returns\n * null so the caller keeps the defaults. The filler's entry is ignored.\n *\n * `partial: 'reject'` (the controlled `layout` prop) returns null when a panel is\n * missing, and warns in development. `'ignore'` (a stored layout from an older\n * panel list) skips an extra or missing id and keeps that panel's default.\n */\nexport function applyStored(raw: string | null, panels: RuntimePanel[], partial: 'reject' | 'ignore' = 'reject'): RuntimePanel[] | null {\n if (!raw) return null;\n let data: unknown;\n try {\n data = JSON.parse(raw);\n } catch {\n return null;\n }\n if (!data || typeof data !== 'object' || Array.isArray(data)) return null;\n const record = data as Record<string, unknown>;\n const next = panels.map(copy);\n for (const panel of next) {\n if (panel.fill) continue;\n const entry = record[panel.id];\n if (entry == null) {\n if (partial === 'ignore') continue;\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Splitter layout has no entry for panel \"${panel.id}\". Pass a size for every panel, or leave layout unset.`);\n }\n return null;\n }\n if (typeof entry !== 'object' || Array.isArray(entry)) return null;\n const sizeText = (entry as { size?: unknown }).size;\n const collapsed = (entry as { collapsed?: unknown }).collapsed;\n if (typeof sizeText !== 'string' || typeof collapsed !== 'boolean') return null;\n const size = parseSize(sizeText);\n if (!size || !within(size, panel.min, panel.max)) return null;\n panel.size = size;\n panel.collapsed = collapsed;\n panel.autoCollapsed = false;\n panel.restore = collapsed ? { ...size } : null;\n }\n return next;\n}\n\nexport function layoutOf(panels: RuntimePanel[]): StoredLayout {\n const layout: StoredLayout = {};\n for (const panel of panels) {\n // A collapse the root forced is not a choice, so it is stored as open. The next\n // visit collapses again only if the root is still too small.\n layout[panel.id] = {\n size: serializeSize(panel.size),\n collapsed: panel.autoCollapsed ? false : panel.collapsed,\n };\n }\n return layout;\n}\n\nexport function sizeText(panel: RuntimePanel): string {\n return serializeSize(panel.size);\n}\n\n/**\n * The size to paint before the root has been measured (the server, and the first\n * client paint). Where the size, min, and max share a unit, clamp with CSS so a\n * declared 240px still respects its min. Mixed units wait for the measured pixels.\n */\nexport function cssSize(panel: RuntimePanel): string {\n const basis = taken(panel) ? panel.collapsedSize : panel.size;\n if (panel.fill && !taken(panel)) return 'auto';\n const size = serializeSize(basis);\n const max = panel.max;\n const same = basis.unit === panel.min.unit && (max == null || max.unit === basis.unit);\n if (!same) return size;\n if (max) return `clamp(${serializeSize(panel.min)}, ${size}, ${serializeSize(max)})`;\n if (panel.min.value > 0) return `max(${serializeSize(panel.min)}, ${size})`;\n return size;\n}\n\n/** Percent of the root, 0–100, for aria-valuenow / min / max. */\nexport function ariaPercents(panel: RuntimePanel, pixels: number, root: number): { now: number; min: number; max: number } {\n const span = root <= 0 ? 1 : root;\n const { min, max } = limits(panel, span);\n return {\n now: clamp(Math.round((pixels / span) * 100), 0, 100),\n min: clamp(Math.round((min / span) * 100), 0, 100),\n max: clamp(Math.round((max / span) * 100), 0, 100),\n };\n}\n\nexport function valueText(panel: RuntimePanel, pixels: number): string {\n if (panel.collapsed) return 'Collapsed';\n if (panel.size.unit === 'px') return `${Math.round(pixels)} pixels`;\n return `${serializeSize(panel.size).replace('%', '')} percent`;\n}\n","import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n applyKey,\n applyStored,\n ariaPercents,\n createPanels,\n cssSize,\n handleTarget,\n layoutOf,\n measure,\n resetToDefault,\n resizeByDelta,\n settle,\n syncPanels,\n valueText,\n type PanelSpec,\n type RuntimePanel,\n type SplitterKey,\n type StoredLayout,\n} from './layout';\n\nexport interface SplitterRootProps extends Omit<React.ComponentProps<'div'>, 'onChange'> {\n /** `horizontal` puts panels in a row and the handle is a vertical bar. */\n orientation?: 'horizontal' | 'vertical';\n /** Remember sizes and collapsed state. Read after mount so the server and client match. */\n storageKey?: string;\n /** Controlled sizes. Keys are panel ids. A missing panel warns in development and is ignored. */\n layout?: StoredLayout;\n /** Fires when a drag or a key press ends, not while the pointer is moving. */\n onLayoutChange?: (layout: StoredLayout) => void;\n}\n\nexport interface SplitterPanelProps extends React.ComponentProps<'div'> {\n /**\n * The panel's key in storage and in `layout`. The DOM id is this, prefixed with\n * the splitter's useId, so two splitters can both have a panel called `main`.\n */\n id: string;\n /** A number is a percent of the root. `'240px'` and `'30%'` are sizes too. Omit on the filler. */\n defaultSize?: number | string;\n minSize?: number | string;\n maxSize?: number | string;\n collapsible?: boolean;\n /** Defaults to 0. A collapsed panel at 0 is `hidden`, so its contents leave the tab order. */\n collapsedSize?: number | string;\n defaultCollapsed?: boolean;\n /** Hide the panel at its collapsed size for this render. Not stored. */\n suspended?: boolean;\n}\n\nexport type SplitterHandleProps = Omit<React.ComponentProps<'div'>, 'aria-label'> & {\n /** Required: the separator's accessible name, for example \"Resize navigation\". */\n 'aria-label': string;\n disabled?: boolean;\n /** A small grip in the middle of the line. Off unless set. */\n grip?: boolean;\n /** Injected by Root from the handle's place between panels. */\n index?: number;\n};\n\ninterface SplitterContextValue {\n orientation: 'horizontal' | 'vertical';\n /** Prefix for DOM ids. The panel's `id` prop stays the logical key. */\n domId: (id: string) => string;\n panels: RuntimePanel[];\n pixels: number[];\n /** The root's content box after the handles are subtracted. 0 until measured. */\n contentSize: number;\n dragging: React.MutableRefObject<boolean>;\n livePixels: React.MutableRefObject<number[] | null>;\n onKey: (index: number, event: React.KeyboardEvent<HTMLDivElement>) => void;\n onDragStart: (index: number, event: React.PointerEvent<HTMLDivElement>) => void;\n onReset: (index: number) => void;\n}\n\nconst SplitterContext = React.createContext<SplitterContextValue | null>(null);\n\nfunction useSplitter(): SplitterContextValue {\n const value = React.useContext(SplitterContext);\n if (!value) throw new Error('Splitter parts must be inside Splitter.Root.');\n return value;\n}\n\n/**\n * Panels and handles are direct children. A Fragment is flattened, so a `.map()`\n * can return one. Anything else throws in development: a wrapper component would\n * hide its panel from the splitter, and the layout would silently drop it.\n */\nfunction flattenParts(children: React.ReactNode): React.ReactElement[] {\n const out: React.ReactElement[] = [];\n const visit = (node: React.ReactNode) => {\n React.Children.forEach(node, (child) => {\n if (child == null || typeof child === 'boolean') return;\n if (typeof child === 'string' || typeof child === 'number') {\n if (String(child).trim() === '') return;\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('Splitter.Root only accepts Splitter.Panel and Splitter.Handle. Put text outside the splitter.');\n }\n return;\n }\n if (!React.isValidElement(child)) return;\n if (child.type === React.Fragment) {\n visit((child.props as { children?: React.ReactNode }).children);\n return;\n }\n if (child.type !== SplitterPanel && child.type !== SplitterHandle) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'Splitter.Root only accepts Splitter.Panel and Splitter.Handle as children. Render the panel directly, or return it from a Fragment. A wrapper component is not a panel.',\n );\n }\n return;\n }\n out.push(child);\n });\n };\n visit(children);\n return out;\n}\n\nfunction specsFrom(parts: React.ReactElement[]): PanelSpec[] {\n const specs: PanelSpec[] = [];\n for (const child of parts) {\n if (child.type !== SplitterPanel) continue;\n const props = child.props as SplitterPanelProps;\n specs.push({\n id: props.id,\n defaultSize: props.defaultSize,\n minSize: props.minSize,\n maxSize: props.maxSize,\n collapsible: props.collapsible,\n collapsedSize: props.collapsedSize,\n defaultCollapsed: props.defaultCollapsed,\n suspended: props.suspended,\n });\n }\n return specs;\n}\n\nfunction specKeyOf(specs: PanelSpec[]): string {\n return specs\n .map((spec) =>\n [spec.id, spec.defaultSize ?? '', spec.minSize ?? '', spec.maxSize ?? '', spec.collapsible ? '1' : '0', spec.collapsedSize ?? '', spec.defaultCollapsed ? '1' : '0', spec.suspended ? '1' : '0'].join('\\0'),\n )\n .join('\\n');\n}\n\nconst KEYS = new Set<SplitterKey>(['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End', 'Enter']);\n\nfunction readStep(root: HTMLElement | null): { step: number; largeStep: number } {\n if (!root) return { step: 5, largeStep: 10 };\n const style = getComputedStyle(root);\n const step = parseFloat(style.getPropertyValue('--sl-splitter-key-step'));\n const large = parseFloat(style.getPropertyValue('--sl-splitter-key-step-large'));\n return {\n step: Number.isFinite(step) ? step : 5,\n largeStep: Number.isFinite(large) ? large : 10,\n };\n}\n\nexport const SplitterRoot = React.forwardRef<HTMLDivElement, SplitterRootProps>(function SplitterRoot(\n { orientation = 'horizontal', storageKey, layout, onLayoutChange, className, children, ...props },\n ref,\n) {\n const uid = React.useId();\n const parts = flattenParts(children);\n const specs = specsFrom(parts);\n const specKey = specKeyOf(specs);\n const [panels, setPanels] = React.useState(() => createPanels(specs));\n const [metrics, setMetrics] = React.useState({ root: 0, handles: 0 });\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const panelsRef = React.useRef(panels);\n const sizeRef = React.useRef(0);\n const dragging = React.useRef(false);\n const livePixels = React.useRef<number[] | null>(null);\n const specsRef = React.useRef(specs);\n specsRef.current = specs;\n const controlled = layout !== undefined;\n\n React.useLayoutEffect(() => {\n setPanels((current) => syncPanels(current, specsRef.current));\n }, [specKey]);\n\n const contentSize = Math.max(0, metrics.root - metrics.handles);\n const base = controlled ? (applyStored(JSON.stringify(layout), panels) ?? panels) : panels;\n // Until the root is measured, keep the declared sizes. Settling against 0 would collapse everything.\n const shown = contentSize > 0 ? settle(base, contentSize) : base;\n panelsRef.current = shown;\n sizeRef.current = contentSize;\n\n const commit = React.useCallback(\n (next: RuntimePanel[]) => {\n const stored = layoutOf(next);\n onLayoutChange?.(stored);\n // A controlled layout renders from the prop. Writing state here would fight the parent.\n if (controlled) return;\n setPanels(next);\n if (!storageKey) return;\n try {\n localStorage.setItem(storageKey, JSON.stringify(stored));\n } catch {\n // Private mode and full storage both throw. The layout still works for this visit.\n }\n },\n [controlled, onLayoutChange, storageKey],\n );\n\n React.useEffect(() => {\n if (controlled || !storageKey) return;\n try {\n // An older save may name a panel this splitter no longer has. Ignore that id.\n const next = applyStored(localStorage.getItem(storageKey), panelsRef.current, 'ignore');\n if (next) setPanels(next);\n } catch {\n // Unreadable storage falls back to the defaults createPanels already applied.\n }\n // Read once, after mount, so the server render and the first client render match.\n }, [storageKey, controlled]);\n\n React.useLayoutEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n const apply = () => {\n const bars = [...root.children].filter((node) => (node as HTMLElement).classList?.contains('SplitterHandle')) as HTMLElement[];\n const handleSum = bars.reduce((sum, bar) => sum + (orientation === 'horizontal' ? bar.offsetWidth : bar.offsetHeight), 0);\n const nextRoot = orientation === 'horizontal' ? root.clientWidth : root.clientHeight;\n setMetrics((current) => (current.root === nextRoot && current.handles === handleSum ? current : { root: nextRoot, handles: handleSum }));\n };\n apply();\n const observer = new ResizeObserver(apply);\n observer.observe(root);\n return () => observer.disconnect();\n }, [orientation]);\n\n const pixels = measure(shown, metrics.root, metrics.handles);\n\n const applyDom = React.useCallback((next: RuntimePanel[], size: number, handleSum: number) => {\n const root = rootRef.current;\n if (!root) return;\n const nextPixels = measure(next, size, handleSum);\n livePixels.current = nextPixels;\n const elements = [...root.children].filter((node) => (node as HTMLElement).classList?.contains('SplitterPanel')) as HTMLElement[];\n elements.forEach((element, index) => {\n element.style.setProperty('--sl-splitter-panel-size', `${nextPixels[index] ?? 0}px`);\n });\n const handles = [...root.children].filter((node) => (node as HTMLElement).classList?.contains('SplitterHandle')) as HTMLElement[];\n const content = Math.max(0, size - handleSum);\n handles.forEach((handle, index) => {\n const targetIndex = handleTarget(next, index);\n const target = next[targetIndex];\n if (!target) return;\n const values = ariaPercents(target, nextPixels[targetIndex] ?? 0, content);\n handle.setAttribute('aria-valuenow', String(values.now));\n handle.setAttribute('aria-valuetext', valueText(target, nextPixels[targetIndex] ?? 0));\n });\n }, []);\n\n const onDragStart = React.useCallback(\n (index: number, event: React.PointerEvent<HTMLDivElement>) => {\n if (event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation();\n const handle = event.currentTarget;\n const root = rootRef.current;\n const size = metrics.root;\n if (!root || sizeRef.current <= 0) return;\n // Capture keeps the drag going when the pointer leaves the handle. A pointer the browser\n // doesn't know can't be captured; moves still arrive while it stays over the handle.\n try {\n handle.setPointerCapture(event.pointerId);\n } catch {\n // ignore\n }\n const start = orientation === 'horizontal' ? event.clientX : event.clientY;\n const startPanels = panelsRef.current;\n const previousUserSelect = document.body.style.userSelect;\n document.body.style.userSelect = 'none';\n root.setAttribute('data-dragging', '');\n handle.setAttribute('data-dragging', '');\n dragging.current = true;\n let frame = 0;\n let latest = startPanels;\n let ended = false;\n const move = (pointer: PointerEvent) => {\n const point = orientation === 'horizontal' ? pointer.clientX : pointer.clientY;\n const delta = point - start;\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => {\n latest = resizeByDelta(startPanels, sizeRef.current, index, delta);\n applyDom(latest, size, metrics.handles);\n });\n };\n const finish = (restore: boolean) => {\n if (ended) return;\n ended = true;\n cancelAnimationFrame(frame);\n root.removeAttribute('data-dragging');\n handle.removeAttribute('data-dragging');\n document.body.style.userSelect = previousUserSelect;\n handle.removeEventListener('pointermove', move);\n handle.removeEventListener('pointerup', end);\n handle.removeEventListener('pointercancel', end);\n handle.removeEventListener('lostpointercapture', end);\n window.removeEventListener('blur', end);\n window.removeEventListener('keydown', onEscape, true);\n dragging.current = false;\n livePixels.current = null;\n if (restore) {\n applyDom(startPanels, size, metrics.handles);\n return;\n }\n commit(latest);\n };\n const end = () => finish(false);\n // Escape puts the sizes from pointer-down back. Capture runs before a parent\n // (a dialog, a list detail) can treat the key as a close.\n const onEscape = (key: KeyboardEvent) => {\n if (key.key !== 'Escape') return;\n key.preventDefault();\n key.stopPropagation();\n finish(true);\n };\n handle.addEventListener('pointermove', move);\n handle.addEventListener('pointerup', end);\n handle.addEventListener('pointercancel', end);\n handle.addEventListener('lostpointercapture', end);\n window.addEventListener('blur', end);\n window.addEventListener('keydown', onEscape, true);\n },\n [applyDom, commit, metrics.handles, metrics.root, orientation],\n );\n\n const onKey = React.useCallback(\n (index: number, event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!KEYS.has(event.key as SplitterKey)) return;\n const root = rootRef.current;\n // Computed direction follows dir=\"auto\" and a stylesheet. The nearest [dir] attribute does not.\n const rtl = root ? getComputedStyle(root).direction === 'rtl' : false;\n const next = applyKey(panelsRef.current, sizeRef.current, index, event.key as SplitterKey, {\n orientation,\n shift: event.shiftKey,\n rtl,\n ...readStep(root),\n });\n if (!next) return;\n event.preventDefault();\n commit(next);\n },\n [commit, orientation],\n );\n\n const onReset = React.useCallback(\n (index: number) => {\n commit(resetToDefault(panelsRef.current, index));\n },\n [commit],\n );\n\n let handleIndex = 0;\n const content = parts.map((child) => {\n if (child.type !== SplitterHandle) return child;\n const index = handleIndex;\n handleIndex += 1;\n return React.cloneElement(child, { index, key: child.key ?? `handle-${index}` } as Partial<SplitterHandleProps>);\n });\n\n const domId = React.useCallback((id: string) => `${uid}-${id}`, [uid]);\n const context = React.useMemo<SplitterContextValue>(\n () => ({ orientation, domId, panels: shown, pixels, contentSize, dragging, livePixels, onKey, onDragStart, onReset }),\n [orientation, domId, shown, pixels, contentSize, onKey, onDragStart, onReset],\n );\n\n return (\n <SplitterContext.Provider value={context}>\n <div\n {...props}\n ref={(node) => {\n rootRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn('Splitter', className)}\n data-orientation={orientation}\n >\n {content}\n </div>\n </SplitterContext.Provider>\n );\n});\n\nfunction withoutSize(props: Omit<SplitterPanelProps, 'id'>): React.ComponentProps<'div'> {\n const dom: Omit<SplitterPanelProps, 'id'> = { ...props };\n delete dom.defaultSize;\n delete dom.minSize;\n delete dom.maxSize;\n delete dom.collapsible;\n delete dom.collapsedSize;\n delete dom.defaultCollapsed;\n delete dom.suspended;\n return dom;\n}\n\nexport const SplitterPanel = React.forwardRef<HTMLDivElement, SplitterPanelProps>(function SplitterPanel(\n { id, className, style, ...props },\n ref,\n) {\n const splitter = useSplitter();\n const index = splitter.panels.findIndex((panel) => panel.id === id);\n const panel = splitter.panels[index];\n const measured = splitter.contentSize > 0;\n const live = splitter.dragging.current ? splitter.livePixels.current : null;\n const pixels = live?.[index] ?? splitter.pixels[index] ?? 0;\n const collapsed = panel?.collapsed ?? false;\n const suspended = panel?.suspended ?? false;\n const hidden = (collapsed || suspended) && (measured ? pixels === 0 : (panel?.collapsedSize.value ?? 0) === 0);\n // While a drag is writing the property itself, render that value. A render that\n // wrote the state from pointer-down would jump the panel back.\n const size = measured ? `${pixels}px` : panel ? cssSize(panel) : 'auto';\n return (\n <div\n {...withoutSize(props)}\n ref={ref}\n id={splitter.domId(id)}\n className={cn('SplitterPanel', className)}\n data-orientation={splitter.orientation}\n data-collapsed={collapsed ? '' : undefined}\n data-fill={panel?.fill ? '' : undefined}\n hidden={hidden || undefined}\n style={{ ...style, ['--sl-splitter-panel-size' as string]: size }}\n />\n );\n});\n\nexport const SplitterHandle = React.forwardRef<HTMLDivElement, SplitterHandleProps>(function SplitterHandle(\n { className, disabled, grip, index = 0, ...props },\n ref,\n) {\n const splitter = useSplitter();\n const targetIndex = handleTarget(splitter.panels, index);\n const target = splitter.panels[targetIndex];\n const live = splitter.dragging.current ? splitter.livePixels.current : null;\n const pixels = live?.[targetIndex] ?? splitter.pixels[targetIndex] ?? 0;\n const values = target ? ariaPercents(target, pixels, splitter.contentSize || 1) : { now: 0, min: 0, max: 100 };\n const collapsed = target?.collapsed ?? false;\n const bar = splitter.orientation === 'horizontal' ? 'vertical' : 'horizontal';\n return (\n // The separator role does not list expanded. Collapsed still has to be announced\n // when valuetext is not spoken. Only set it on a panel that can collapse.\n // eslint-disable-next-line jsx-a11y/role-supports-aria-props\n <div\n {...props}\n ref={ref}\n className={cn('SplitterHandle', className)}\n role=\"separator\"\n tabIndex={disabled ? -1 : 0}\n aria-orientation={bar}\n aria-controls={target ? splitter.domId(target.id) : undefined}\n aria-valuenow={values.now}\n aria-valuemin={values.min}\n aria-valuemax={values.max}\n aria-valuetext={target ? valueText(target, pixels) : undefined}\n aria-expanded={target?.collapsible ? !collapsed : undefined}\n aria-disabled={disabled || undefined}\n data-orientation={splitter.orientation}\n data-collapsed={collapsed ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n data-grip={grip ? '' : undefined}\n onPointerDown={disabled ? undefined : (event) => splitter.onDragStart(index, event)}\n onKeyDown={disabled ? undefined : (event) => splitter.onKey(index, event)}\n onDoubleClick={disabled ? undefined : () => splitter.onReset(index)}\n />\n );\n});\n\nexport const Splitter = {\n Root: SplitterRoot,\n Panel: SplitterPanel,\n Handle: SplitterHandle,\n};\n","import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button } from '../../components/button';\nimport { Drawer } from '../../components/drawer';\nimport { cn } from '../../utils/cn';\nimport { Splitter } from './splitter';\n\n/** Why the detail closed. Escape is the key; Back is the page-mode button. */\nexport type ListDetailCloseReason = 'close-button' | 'escape' | 'back';\n\nexport type ListDetailLayout = 'split' | 'drawer' | 'page';\n\nexport interface ListDetailRootProps extends Omit<React.ComponentProps<'div'>, 'onChange'> {\n open: boolean;\n onOpenChange?: (open: boolean, reason: ListDetailCloseReason) => void;\n /** What the narrow layout is. Wide layouts are always a splitter. */\n narrow?: 'drawer' | 'page';\n /** Override the `--sl-list-detail-split-min-width` token. Compared to this element's width, not the window. */\n splitMinWidth?: number;\n /** Remember the splitter position. */\n storageKey?: string;\n defaultDetailSize?: string;\n minDetailSize?: string;\n maxDetailSize?: string;\n /** Accessible name of the separator. */\n handleLabel?: string;\n /** Accessible name of the list, when the list has no heading of its own. */\n listLabel?: string;\n}\n\nexport interface ListDetailDetailProps extends Omit<React.ComponentProps<'section'>, 'title'> {\n title: React.ReactNode;\n actions?: React.ReactNode;\n closeDisabled?: boolean;\n /** Accessible name of the icon-only Close button. */\n closeLabel?: string;\n /** Visible label of the page-mode Back button. */\n backLabel?: string;\n /** Defaults to 2. Drawer titles use the same level. */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n}\n\nexport interface ListDetailValue {\n layout: ListDetailLayout;\n close: () => void;\n}\n\ninterface ListDetailContextValue {\n open: boolean;\n layout: ListDetailLayout;\n listLabel?: string;\n titleId: string;\n /** A div React never rendered. The detail portals into it, and the div is moved between hosts. */\n detailContainer: HTMLElement | null;\n listRef: React.MutableRefObject<HTMLDivElement | null>;\n headingRef: React.MutableRefObject<HTMLHeadingElement | null>;\n pendingFocus: React.MutableRefObject<boolean>;\n closeLocked: React.MutableRefObject<boolean>;\n setPointerLocked: (locked: boolean) => void;\n setHeader: React.Dispatch<React.SetStateAction<DetailHeaderState | null>>;\n requestClose: (reason: ListDetailCloseReason) => void;\n}\n\ninterface DetailHeaderState {\n title: React.ReactNode;\n actions?: React.ReactNode;\n closeDisabled: boolean;\n closeLabel: string;\n headingLevel: 1 | 2 | 3 | 4 | 5 | 6;\n}\n\nconst ListDetailContext = React.createContext<ListDetailContextValue | null>(null);\n\nexport function useListDetail(): ListDetailValue {\n const value = React.useContext(ListDetailContext);\n if (!value) throw new Error('useListDetail must be inside ListDetail.Root.');\n return { layout: value.layout, close: () => value.requestClose('close-button') };\n}\n\nconst FALLBACK = { detail: '45%', min: '35%', max: '65%', minWidth: 720 };\n\nfunction cssSize(element: HTMLElement, name: string, fallback: string): string {\n const value = getComputedStyle(element).getPropertyValue(name).trim();\n return value || fallback;\n}\n\nfunction cssPx(element: HTMLElement, name: string, fallback: number): number {\n const value = parseFloat(getComputedStyle(element).getPropertyValue(name));\n return Number.isFinite(value) ? value : fallback;\n}\n\n/**\n * Escape inside a Select, Menu, Popover, or Dialog. Base UI 1.9's useDismiss\n * calls preventDefault and stopPropagation on the popup's React keydown\n * (escape bubbles default to false). The document listener runs later, so a\n * popup that doesn't stop the React event still reaches this root. Ignore it\n * when the key started in an open popup that is not this detail.\n */\nfunction inOpenPopup(target: EventTarget | null, root: HTMLElement | null): boolean {\n if (!(target instanceof Element)) return false;\n const dialog = target.closest('[role=\"dialog\"]');\n if (dialog && (!root || !root.contains(dialog))) return true;\n const popup = target.closest('[data-open]');\n if (!popup || popup === root) return false;\n if (root?.contains(popup) && popup.classList.contains('ListDetailDetail')) return false;\n return true;\n}\n\ntype Hosts = { split: HTMLDivElement | null; drawer: HTMLDivElement | null; page: HTMLDivElement | null };\n\n/**\n * A list and the detail of the selected item. Wide: a Splitter. Narrow: a Drawer,\n * or the detail replaces the list. The app owns the selection.\n *\n * The list stays in the splitter's first panel the whole time, so opening, closing,\n * and crossing the width never reparents it and never resets its scroll. The detail\n * portals into a div this component created with createElement. React does not\n * reconcile that div, so moving it between the split panel, the drawer, and the\n * page is safe.\n */\nexport const ListDetailRoot = React.forwardRef<HTMLDivElement, ListDetailRootProps>(function ListDetailRoot(\n {\n open,\n onOpenChange,\n narrow = 'drawer',\n splitMinWidth,\n storageKey,\n defaultDetailSize,\n minDetailSize,\n maxDetailSize,\n handleLabel = 'Resize details',\n listLabel,\n className,\n children,\n onKeyDown,\n ...props\n },\n ref,\n) {\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const listRef = React.useRef<HTMLDivElement | null>(null);\n const headingRef = React.useRef<HTMLHeadingElement | null>(null);\n const pendingFocus = React.useRef(false);\n const wasOpen = React.useRef(false);\n const previousFocus = React.useRef<HTMLElement | null>(null);\n const restoreFrame = React.useRef(0);\n const closeLocked = React.useRef(false);\n const layoutRef = React.useRef<ListDetailLayout | null>(null);\n const titleId = React.useId();\n // Null until the layout effect measures, so a narrow container never paints the split first.\n const [wide, setWide] = React.useState<boolean | null>(null);\n const [endSide, setEndSide] = React.useState<'left' | 'right'>('right');\n const [pointerLocked, setPointerLocked] = React.useState(false);\n const [header, setHeader] = React.useState<DetailHeaderState | null>(null);\n const [sizes, setSizes] = React.useState(FALLBACK);\n const [detailContainer, setDetailContainer] = React.useState<HTMLDivElement | null>(null);\n const [hosts, setHosts] = React.useState<Hosts>({ split: null, drawer: null, page: null });\n const measured = wide !== null;\n const layout: ListDetailLayout = wide === false ? narrow : 'split';\n const splitOpen = measured && wide === true && open;\n let listChild: React.ReactElement | null = null;\n let detailChild: React.ReactElement | null = null;\n const visit = (node: React.ReactNode) => {\n React.Children.forEach(node, (child) => {\n if (!React.isValidElement(child)) return;\n if (child.type === React.Fragment) {\n visit((child.props as { children?: React.ReactNode }).children);\n return;\n }\n if (child.type === ListDetailList) listChild = child;\n else if (child.type === ListDetailDetail) detailChild = child;\n });\n };\n visit(children);\n\n const requestClose = React.useCallback(\n (reason: ListDetailCloseReason) => {\n if (!open || closeLocked.current) return;\n onOpenChange?.(false, reason);\n },\n [onOpenChange, open],\n );\n\n React.useEffect(() => {\n const node = document.createElement('div');\n node.className = 'ListDetailSlot';\n setDetailContainer(node);\n return () => node.remove();\n }, []);\n\n React.useLayoutEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n const apply = () => {\n const min = splitMinWidth ?? cssPx(root, '--sl-list-detail-split-min-width', FALLBACK.minWidth);\n setWide(root.clientWidth >= min);\n // Computed direction follows dir=\"auto\" and a stylesheet. The nearest [dir] attribute does not.\n setEndSide(getComputedStyle(root).direction === 'rtl' ? 'left' : 'right');\n const next = {\n minWidth: min,\n detail: defaultDetailSize ?? cssSize(root, '--sl-list-detail-detail-default-size', FALLBACK.detail),\n min: minDetailSize ?? cssSize(root, '--sl-list-detail-detail-min-size', FALLBACK.min),\n max: maxDetailSize ?? cssSize(root, '--sl-list-detail-detail-max-size', FALLBACK.max),\n };\n setSizes((current) => (current.detail === next.detail && current.min === next.min && current.max === next.max && current.minWidth === next.minWidth ? current : next));\n };\n apply();\n const observer = new ResizeObserver(apply);\n observer.observe(root);\n return () => observer.disconnect();\n }, [defaultDetailSize, maxDetailSize, minDetailSize, splitMinWidth]);\n\n const placeSplit = React.useCallback((node: HTMLDivElement | null) => {\n setHosts((current) => (current.split === node ? current : { ...current, split: node }));\n }, []);\n const placeDrawer = React.useCallback((node: HTMLDivElement | null) => {\n setHosts((current) => (current.drawer === node ? current : { ...current, drawer: node }));\n }, []);\n const placePage = React.useCallback((node: HTMLDivElement | null) => {\n setHosts((current) => (current.page === node ? current : { ...current, page: node }));\n }, []);\n\n React.useLayoutEffect(() => {\n if (!detailContainer) return;\n const host = layout === 'drawer' && open ? hosts.drawer : layout === 'page' && open ? hosts.page : hosts.split;\n if (host && detailContainer.parentNode !== host) host.appendChild(detailContainer);\n const previous = layoutRef.current;\n const changed = previous != null && previous !== layout;\n layoutRef.current = measured ? layout : null;\n if (!open || !changed || !measured) return;\n const active = document.activeElement;\n const inside = detailContainer.contains(active);\n const onBody = active === document.body || active === document.documentElement;\n if (!inside && !onBody) return;\n // The drawer focuses from onOpenChangeComplete, once its title is mounted.\n if (layout === 'drawer') {\n pendingFocus.current = true;\n return;\n }\n headingRef.current?.focus();\n }, [detailContainer, hosts, layout, measured, open]);\n\n // Focus the heading only on closed → open, not when the title changes because another row was picked.\n // Page mode is announced by that focus move, and by focus returning to the row. No live region.\n React.useEffect(() => {\n if (open && !wasOpen.current) {\n cancelAnimationFrame(restoreFrame.current);\n previousFocus.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n // The heading is already committed. Drawer waits for its own open to finish.\n if (layout !== 'drawer' && headingRef.current) {\n headingRef.current.focus();\n pendingFocus.current = false;\n } else pendingFocus.current = true;\n }\n if (!open && wasOpen.current) {\n const back = previousFocus.current;\n const list = listRef.current;\n cancelAnimationFrame(restoreFrame.current);\n restoreFrame.current = requestAnimationFrame(() => {\n if (back?.isConnected) back.focus();\n else list?.focus();\n });\n }\n wasOpen.current = open;\n }, [layout, open]);\n\n const context = React.useMemo<ListDetailContextValue>(\n () => ({\n open,\n layout,\n listLabel,\n titleId,\n detailContainer,\n listRef,\n headingRef,\n pendingFocus,\n closeLocked,\n setPointerLocked,\n setHeader,\n requestClose,\n }),\n [detailContainer, layout, listLabel, open, requestClose, titleId],\n );\n\n const pageShowing = measured && layout === 'page' && open;\n\n return (\n <ListDetailContext.Provider value={context}>\n {/* Escape bubbles from a child that did not handle it. This region is not a control. */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n {...props}\n ref={(node) => {\n rootRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn('ListDetail', className)}\n data-layout={measured ? layout : undefined}\n data-open={open ? '' : undefined}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.key !== 'Escape' || event.defaultPrevented || !open || layout === 'drawer') return;\n if (inOpenPopup(event.target, rootRef.current)) return;\n if (closeLocked.current) return;\n event.preventDefault();\n requestClose('escape');\n }}\n >\n {/* The splitter stays mounted, including while the container is narrow, so the list's\n parent never changes. Closed, or narrow, the detail panel takes nothing and the\n handle is not rendered. */}\n <Splitter.Root\n className=\"ListDetailSplit\"\n orientation=\"horizontal\"\n storageKey={storageKey}\n hidden={pageShowing ? true : undefined}\n >\n <Splitter.Panel id=\"list\" className=\"ListDetailListPanel\">\n <div className=\"ListDetailHost\">{listChild}</div>\n </Splitter.Panel>\n {splitOpen ? <Splitter.Handle aria-label={handleLabel} /> : null}\n <Splitter.Panel\n id=\"detail\"\n className=\"ListDetailDetailPanel\"\n defaultSize={sizes.detail}\n minSize={sizes.min}\n maxSize={sizes.max}\n collapsedSize=\"0px\"\n suspended={!splitOpen}\n >\n <div ref={placeSplit} className=\"ListDetailHost\" />\n </Splitter.Panel>\n </Splitter.Root>\n {measured && layout === 'drawer' ? (\n <Drawer.Root\n open={open}\n modal\n swipeDirection={endSide}\n disablePointerDismissal={pointerLocked}\n onOpenChange={(next, details) => {\n if (next) return;\n if (closeLocked.current) {\n details.cancel();\n return;\n }\n requestClose(details.reason === 'escape-key' ? 'escape' : 'close-button');\n }}\n onOpenChangeComplete={(next) => {\n if (!next || !pendingFocus.current) return;\n headingRef.current?.focus();\n pendingFocus.current = false;\n }}\n >\n <Drawer.Portal>\n <Drawer.Backdrop />\n <Drawer.Viewport>\n <Drawer.Popup>\n {header ? (\n <header className=\"ListDetailHeader\">\n <Drawer.Title\n id={titleId}\n render={React.createElement(`h${header.headingLevel}`)}\n ref={(node) => {\n headingRef.current = node;\n }}\n tabIndex={-1}\n >\n {header.title}\n </Drawer.Title>\n {header.actions ? <div className=\"ListDetailActions\">{header.actions}</div> : null}\n <Drawer.Close aria-label={header.closeLabel} disabled={header.closeDisabled} data-emphasis=\"quiet\">\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">close</span>\n </Drawer.Close>\n </header>\n ) : null}\n <div ref={placeDrawer} className=\"ListDetailHost\" />\n </Drawer.Popup>\n </Drawer.Viewport>\n </Drawer.Portal>\n </Drawer.Root>\n ) : null}\n {pageShowing ? <div ref={placePage} className=\"ListDetailHost ListDetailPage\" /> : null}\n {detailChild}\n </div>\n </ListDetailContext.Provider>\n );\n});\n\nexport const ListDetailList = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(function ListDetailList(\n { className, children, ...props },\n ref,\n) {\n const detail = React.useContext(ListDetailContext);\n return (\n <div\n {...props}\n ref={(node) => {\n if (detail) detail.listRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn('ListDetailList', className)}\n role={detail?.listLabel ? 'region' : undefined}\n aria-label={detail?.listLabel}\n tabIndex={-1}\n >\n {children}\n </div>\n );\n});\n\nexport const ListDetailDetail = React.forwardRef<HTMLElement, ListDetailDetailProps>(function ListDetailDetail(\n {\n title,\n actions,\n closeDisabled = false,\n closeLabel = 'Close',\n backLabel = 'Back',\n headingLevel = 2,\n className,\n children,\n ...props\n },\n ref,\n) {\n const detail = React.useContext(ListDetailContext);\n const setLocked = detail?.setPointerLocked;\n const setHeader = detail?.setHeader;\n const closeLocked = detail?.closeLocked;\n React.useLayoutEffect(() => {\n if (closeLocked) closeLocked.current = closeDisabled;\n setLocked?.(closeDisabled);\n }, [closeDisabled, closeLocked, setLocked]);\n // Drawer.Title has to be a child of Drawer.Root. The body stays portaled, so the title is published up.\n React.useLayoutEffect(() => {\n setHeader?.((current) => {\n if (\n current &&\n current.title === title &&\n current.actions === actions &&\n current.closeDisabled === closeDisabled &&\n current.closeLabel === closeLabel &&\n current.headingLevel === headingLevel\n ) {\n return current;\n }\n return { title, actions, closeDisabled, closeLabel, headingLevel };\n });\n }, [actions, closeDisabled, closeLabel, headingLevel, setHeader, title]);\n React.useLayoutEffect(() => {\n if (!detail || detail.layout === 'drawer' || !detail.pendingFocus.current || !detail.headingRef.current) return;\n detail.headingRef.current.focus();\n detail.pendingFocus.current = false;\n });\n if (!detail?.open || !detail.detailContainer) return null;\n const Title = `h${headingLevel}` as 'h2';\n const { layout, titleId, headingRef, requestClose, detailContainer } = detail;\n return createPortal(\n <section {...props} ref={ref} className={cn('ListDetailDetail', className)} data-layout={layout} aria-labelledby={titleId}>\n {layout === 'drawer' ? null : (\n <header className=\"ListDetailHeader\">\n {layout === 'page' ? (\n <Button emphasis=\"quiet\" disabled={closeDisabled} onClick={() => requestClose('back')}>\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">arrow_back</span>\n {backLabel}\n </Button>\n ) : null}\n <Title\n id={titleId}\n className=\"ListDetailTitle\"\n ref={(node) => {\n headingRef.current = node;\n }}\n tabIndex={-1}\n >\n {title}\n </Title>\n {actions ? <div className=\"ListDetailActions\">{actions}</div> : null}\n {layout === 'page' ? null : (\n <Button emphasis=\"quiet\" aria-label={closeLabel} disabled={closeDisabled} onClick={() => requestClose('close-button')}>\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">close</span>\n </Button>\n )}\n </header>\n )}\n <div className=\"ListDetailBody\">{children}</div>\n </section>,\n detailContainer,\n );\n});\n\nexport const ListDetail = {\n Root: ListDetailRoot,\n List: ListDetailList,\n Detail: ListDetailDetail,\n};\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport type SheetProps = Omit<React.ComponentProps<'section'>, 'title'> & {\n /** The tab label that sits on the top rule, set in caps. It also names the section. */\n label?: React.ReactNode;\n /** Something at the end of the header row, beside the tab label: an Edit link, a count. */\n action?: React.ReactNode;\n /** Pad the content by sheet.padding. Leave it off when rows or a table inside run edge to edge. */\n inset?: boolean;\n};\n\n/**\n * A working-paper surface: a raised panel with a heavier rule across its top (sheet.rule-*),\n * and an optional tab label sitting on that rule. A section, named by its label; without\n * a label, give it an `aria-label`. Not a Base UI part, so it does not take `render`.\n */\nexport const Sheet = React.forwardRef<HTMLElement, SheetProps>(function Sheet(\n { className, label, action, inset, children, ...props },\n ref,\n) {\n const labelId = React.useId();\n const named = label != null && props['aria-label'] == null && props['aria-labelledby'] == null;\n return (\n <section\n ref={ref}\n className={cn('Sheet', className)}\n data-tab={label != null ? '' : undefined}\n aria-labelledby={named ? labelId : undefined}\n {...props}\n >\n {label != null || action != null ? (\n <div className=\"SheetHeader\">\n {label != null ? (\n <span className=\"SheetTab\" id={labelId}>\n {label}\n </span>\n ) : null}\n {action != null ? <span className=\"SheetAction\">{action}</span> : null}\n </div>\n ) : null}\n <div className=\"SheetBody\" data-inset={inset ? '' : undefined}>\n {children}\n </div>\n </section>\n );\n});\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport type StatFigureProps = Omit<React.ComponentProps<'div'>, 'children'> & {\n /** The caps label above the figure: \"Book balance\", \"Open questions\". */\n label: React.ReactNode;\n /** The figure itself, already formatted: \"1,318.22\", \"(40.00)\", \"3\". */\n value: React.ReactNode;\n /** A short line under the figure: \"on client\", \"DR · Oct 29\". */\n caption?: React.ReactNode;\n /** \"double\" draws the accountant's double underline, for a final total. Default none. */\n underline?: 'none' | 'double';\n /** \"accent\" colors the figure as a call to act on it. Default is the text color. */\n tone?: 'default' | 'accent';\n /** \"sm\" for a row of figures in a card or header. Default \"md\". */\n size?: 'sm' | 'md';\n};\n\n/**\n * One large figure with a caps label and an optional caption. The label, figure and caption\n * are read in that order. Not interactive: wrap it in a link to make it one.\n * Not a Base UI part, so it does not take `render`.\n */\nexport const StatFigure = React.forwardRef<HTMLDivElement, StatFigureProps>(function StatFigure(\n { className, label, value, caption, underline, tone, size, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn('StatFigure', className)}\n data-underline={underline === 'double' ? 'double' : undefined}\n data-tone={tone === 'accent' ? 'accent' : undefined}\n data-size={size === 'sm' ? 'sm' : undefined}\n {...props}\n >\n <span className=\"StatFigureLabel\">{label}</span>\n <span className=\"StatFigureValue\">{value}</span>\n {caption != null ? <span className=\"StatFigureCaption\">{caption}</span> : null}\n </div>\n );\n});\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\nimport { StatFigure } from './stat-figure';\nimport type { StatFigureProps } from './stat-figure';\n\nexport type StatCardFact = Pick<StatFigureProps, 'label' | 'value' | 'caption' | 'tone'>;\n\nexport type StatCardProps = Omit<React.ComponentProps<'article'>, 'title'> & {\n /** The name of the thing: \"North Company\". It is the card's heading, and its link when the card opens something. */\n title: React.ReactNode;\n /** A short line under the name: \"USD · 1 account\". */\n caption?: React.ReactNode;\n /** The figures, left to right, one equal column each. Pass them already formatted. */\n facts: StatCardFact[];\n /** Makes the title a link and the whole card its target. */\n href?: string;\n /** Makes the title a button and the whole card its target. Ignored when `href` is set. */\n onOpen?: () => void;\n /** The heading level of the title, so the card fits the page's outline. Default 3. */\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n /** A line under the figures: a total, a date, a note. */\n footer?: React.ReactNode;\n};\n\n/**\n * A card for one thing a page lists, with its name, a caption and a row of figures. Give it\n * `href` or `onOpen` and the whole card opens, through the title: one tab stop, named by the title.\n * Not a Base UI part, so it does not take `render`.\n */\nexport const StatCard = React.forwardRef<HTMLElement, StatCardProps>(function StatCard(\n { className, title, caption, facts, href, onOpen, headingLevel = 3, footer, ...props },\n ref,\n) {\n const Heading = `h${headingLevel}` as const;\n const interactive = href != null || onOpen != null;\n return (\n <article\n ref={ref}\n className={cn('StatCard', className)}\n data-interactive={interactive ? '' : undefined}\n {...props}\n >\n <header className=\"StatCardHeader\">\n <Heading className=\"StatCardTitle\">\n {href != null ? (\n <a className=\"StatCardLink\" href={href}>\n {title}\n </a>\n ) : onOpen != null ? (\n <button className=\"StatCardLink\" type=\"button\" onClick={onOpen}>\n {title}\n </button>\n ) : (\n title\n )}\n </Heading>\n {caption != null ? <p className=\"StatCardCaption\">{caption}</p> : null}\n </header>\n <div className=\"StatCardFacts\" style={{ gridTemplateColumns: `repeat(${Math.max(facts.length, 1)}, minmax(0, 1fr))` }}>\n {facts.map((fact, index) => (\n <StatFigure key={index} size=\"sm\" {...fact} />\n ))}\n </div>\n {footer != null ? <div className=\"StatCardFooter\">{footer}</div> : null}\n </article>\n );\n});\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport type DescriptionListProps = React.ComponentProps<'dl'> & {\n /**\n * \"columns\" (the default) sets labels in a column beside their values. \"leader\" runs a dotted\n * leader from each label to its value, which sits at the end of the row.\n */\n variant?: 'columns' | 'leader';\n};\n\n/** Label and value pairs. Children are DescriptionItems. */\nexport const DescriptionList = React.forwardRef<HTMLDListElement, DescriptionListProps>(function DescriptionList(\n { className, variant, ...props },\n ref,\n) {\n return <dl ref={ref} className={cn('DescriptionList', className)} data-variant={variant === 'leader' ? 'leader' : undefined} {...props} />;\n});\n\nexport type DescriptionItemProps = Omit<React.ComponentProps<'div'>, 'children'> & {\n /** The term: \"Legal name\", \"Fiscal year\". */\n label: React.ReactNode;\n /** The value. */\n children?: React.ReactNode;\n};\n\n/** One pair: a dt and its dd, grouped in a div as HTML allows inside a dl. */\nexport const DescriptionItem = React.forwardRef<HTMLDivElement, DescriptionItemProps>(function DescriptionItem(\n { className, label, children, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn('DescriptionItem', className)} {...props}>\n <dt className=\"DescriptionTerm\">{label}</dt>\n <dd className=\"DescriptionDetails\">{children}</dd>\n </div>\n );\n});\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport type AppBarProps = React.ComponentProps<'header'>;\n\n/**\n * The bar across the top of an app window: wordmark, context pickers, a module switch and\n * icon actions in one row, on a line in the rule color (app-bar.*). A `header`, so it is the\n * page's banner landmark when it sits outside `main`. Put an {@link AppBarSpacer} where the\n * row should split, and a vertical Separator between groups of icon actions.\n * Not a Base UI part, so it does not take `render`.\n */\nexport const AppBar = React.forwardRef<HTMLElement, AppBarProps>(function AppBar(\n { className, ...props },\n ref,\n) {\n return <header ref={ref} className={cn('AppBar', className)} {...props} />;\n});\n\nexport type AppBarSpacerProps = Omit<React.ComponentProps<'div'>, 'children'>;\n\n/** Takes the free space in an AppBar, pushing what follows it to the end of the row. */\nexport const AppBarSpacer = React.forwardRef<HTMLDivElement, AppBarSpacerProps>(function AppBarSpacer(\n { className, ...props },\n ref,\n) {\n return <div ref={ref} className={cn('AppBarSpacer', className)} aria-hidden=\"true\" {...props} />;\n});\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport type PickerButtonProps = Omit<React.ComponentProps<'button'>, 'value'> & {\n /** What the button picks, set in caps before the choice: \"Client\", \"Entity\". */\n label: React.ReactNode;\n /** The current choice. Cut with an ellipsis when it is long. */\n value?: React.ReactNode;\n /** Shown in place of the value while nothing is chosen. */\n placeholder?: React.ReactNode;\n};\n\n/**\n * A trigger that names what it picks with a caps label before the current choice, in the\n * field look of a Select trigger. It opens nothing itself: render it as a Menu, Popover or\n * Select trigger, `<Menu.Trigger render={(props) => <PickerButton {...props} label=\"Entity\" value={name} />} />`.\n * The label and the choice are both read as its name. A Menu or Popover trigger adds the Button\n * class to what it renders; it is dropped here so the button's fill and hover don't replace the field look.\n */\nexport const PickerButton = React.forwardRef<HTMLButtonElement, PickerButtonProps>(function PickerButton(\n { className, label, value, placeholder, type = 'button', children, ...props },\n ref,\n) {\n const empty = value == null || value === '';\n return (\n <button ref={ref} type={type} className={cn('PickerButton', className?.split(/\\s+/).filter((name) => name !== 'Button').join(' '))} {...props}>\n <span className=\"PickerButtonLabel\">{label}</span>\n <span className=\"PickerButtonValue\" data-placeholder={empty ? '' : undefined}>\n {empty ? placeholder : value}\n </span>\n {children}\n <svg className=\"PickerButtonIcon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" aria-hidden=\"true\">\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </button>\n );\n});\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\n/** A Menu, Popover or Select trigger renders the Button class on what it renders; it is dropped here. */\nconst withoutButton = (className?: string) => className?.split(/\\s+/).filter((name) => name !== 'Button').join(' ');\n\nexport type PickerSplitProps = React.ComponentProps<'div'>;\n\n/**\n * Two controls in one field: a main part that does something (opens the chosen item) and a\n * trigger part that opens the list of choices. Put it where a PickerButton goes when the\n * choice itself is a link or action: `<PickerSplit><PickerSplitMain label=\"Client\" value={name} onClick={open} />\n * <PickerSplitTrigger aria-label=\"Choose client\" /></PickerSplit>`.\n *\n * The root is the field (border, radius, hover), so a popup can anchor to the whole control:\n * pass a ref to it. Wrap the trigger in a Menu, Popover or Select trigger with `render`.\n */\nexport const PickerSplit = React.forwardRef<HTMLDivElement, PickerSplitProps>(function PickerSplit(\n { className, ...props },\n ref,\n) {\n return <div ref={ref} className={cn('PickerSplit', className)} {...props} />;\n});\n\nexport type PickerSplitMainProps = Omit<React.ComponentProps<'button'>, 'value'> & {\n /** What the control picks, set in caps before the choice: \"Client\". */\n label: React.ReactNode;\n /** The current choice. Cut with an ellipsis when it is long. */\n value?: React.ReactNode;\n /** Shown in place of the value while nothing is chosen. */\n placeholder?: React.ReactNode;\n};\n\n/** The main part: the caps label and the choice, as a button. Give it `render` or `onClick` to act on the choice. */\nexport const PickerSplitMain = React.forwardRef<HTMLButtonElement, PickerSplitMainProps>(function PickerSplitMain(\n { className, label, value, placeholder, type = 'button', children, ...props },\n ref,\n) {\n const empty = value == null || value === '';\n return (\n <button ref={ref} type={type} className={cn('PickerSplitMain', withoutButton(className))} {...props}>\n <span className=\"PickerButtonLabel\">{label}</span>\n <span className=\"PickerButtonValue\" data-placeholder={empty ? '' : undefined}>\n {empty ? placeholder : value}\n </span>\n {children}\n </button>\n );\n});\n\nexport type PickerSplitTriggerProps = React.ComponentProps<'button'>;\n\n/** The trigger part: a square button with a chevron that turns while its popup is open. Name it with aria-label. */\nexport const PickerSplitTrigger = React.forwardRef<HTMLButtonElement, PickerSplitTriggerProps>(function PickerSplitTrigger(\n { className, type = 'button', ...props },\n ref,\n) {\n return (\n <button ref={ref} type={type} className={cn('PickerSplitTrigger', withoutButton(className))} {...props}>\n <svg className=\"PickerButtonIcon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" aria-hidden=\"true\">\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </button>\n );\n});\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport type SideNavProps = React.ComponentProps<'nav'> & {\n /** Hides the rows and shows only the collapse button. The parent sets the column's width. */\n collapsed?: boolean;\n};\n\n/**\n * The column of links down the side of a workspace. Needs an `aria-label` that names it\n * (\"Entity navigation\"). Holds {@link SideNavItem}s, {@link SideNavGroup}s and, to collapse it,\n * a {@link SideNavToggle}, which stays when the rows are hidden. It fills the width its parent\n * gives it and does not scroll or clip, so the parent decides what happens to a long list. Not a\n * Base UI part, so it does not take `render`.\n */\nexport const SideNav = React.forwardRef<HTMLElement, SideNavProps>(function SideNav(\n { className, collapsed, children, ...props },\n ref,\n) {\n return (\n <nav ref={ref} className={cn('SideNav', className)} data-collapsed={collapsed ? '' : undefined} {...props}>\n {children}\n </nav>\n );\n});\n\nexport type SideNavItemProps = Omit<React.ComponentProps<'a'>, 'children'> & {\n /** The page you are on. Draws the raised row with a rule under it and sets `aria-current=\"page\"`. */\n current?: boolean;\n /** A figure at the end of the row, such as items open. Pass it formatted. */\n count?: React.ReactNode;\n /** \"quiet\" for a count that is only information, not a call to act. Default \"accent\". */\n countTone?: 'accent' | 'quiet';\n /** Not available yet: drawn in secondary text, not clickable, and `hint` is read after the label. */\n disabled?: boolean;\n /** A short note under the label of a disabled row: \"Not yet available\". */\n hint?: React.ReactNode;\n children: React.ReactNode;\n};\n\n/** One row. It is a link; a disabled row is a link without an `href` that cannot be focused or clicked. */\nexport const SideNavItem = React.forwardRef<HTMLAnchorElement, SideNavItemProps>(function SideNavItem(\n { className, current, count, countTone, disabled, hint, children, href, onClick, ...props },\n ref,\n) {\n return (\n <a\n ref={ref}\n className={cn('SideNavItem', className)}\n href={disabled ? undefined : (href ?? '#')}\n aria-current={current ? 'page' : undefined}\n aria-disabled={disabled ? true : undefined}\n data-current={current ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n onClick={disabled ? (event) => event.preventDefault() : onClick}\n {...props}\n >\n <span className=\"SideNavItemText\">\n <span className=\"SideNavItemLabel\">{children}</span>\n {hint != null ? <span className=\"SideNavItemHint\">{hint}</span> : null}\n </span>\n {count != null ? (\n <span className=\"SideNavItemCount\" data-tone={countTone === 'quiet' ? 'quiet' : undefined}>\n {count}\n </span>\n ) : null}\n </a>\n );\n});\n\nexport type SideNavGroupProps = Omit<React.ComponentProps<'div'>, 'title'> & {\n /** The heading, set in caps. It also names the group. */\n label: React.ReactNode;\n};\n\n/** A heading and the rows under it: \"Books\", \"Coming later\". */\nexport const SideNavGroup = React.forwardRef<HTMLDivElement, SideNavGroupProps>(function SideNavGroup(\n { className, label, children, ...props },\n ref,\n) {\n const labelId = React.useId();\n return (\n <div ref={ref} role=\"group\" aria-labelledby={labelId} className={cn('SideNavGroup', className)} {...props}>\n <div className=\"SideNavGroupLabel\" id={labelId}>\n {label}\n </div>\n {children}\n </div>\n );\n});\n\nexport type SideNavToggleProps = Omit<React.ComponentProps<'button'>, 'onChange'> & {\n /** Whether the column is collapsed. The chevron turns to point the way it will go. */\n collapsed: boolean;\n /** Called with the new state. */\n onCollapsedChange: (collapsed: boolean) => void;\n /** The accessible name; it follows the state. Default \"Collapse navigation\" / \"Expand navigation\". */\n label?: string;\n};\n\n/**\n * A small tab-shaped handle that sits on the column's edge to collapse and expand it. Put it\n * inside the {@link SideNav}; it stays visible when the rows are hidden. The chevron turns\n * with the state, and does not turn under reduced motion.\n */\nexport const SideNavToggle = React.forwardRef<HTMLButtonElement, SideNavToggleProps>(function SideNavToggle(\n { className, collapsed, onCollapsedChange, label, onClick, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn('SideNavToggle', className)}\n aria-expanded={!collapsed}\n aria-label={label ?? (collapsed ? 'Expand navigation' : 'Collapse navigation')}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) onCollapsedChange(!collapsed);\n }}\n {...props}\n >\n <svg className=\"SideNavToggleIcon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M10 3.5 5.5 8l4.5 4.5\" />\n </svg>\n </button>\n );\n});\n","import * as React from 'react';\n\nimport { Button } from '../../components/button';\nimport { Field } from '../../components/field';\nimport { cn } from '../../utils/cn';\nimport { balanceOf, formatMoney, minorToDecimal } from '../collection/collection-utils';\nimport { useUnderWidth } from '../use-under-width';\n\nexport interface EditableListApi<T> {\n update: (patch: Partial<T>) => void;\n remove: () => void;\n index: number;\n}\n\ninterface EditableListContextValue<T> {\n rows: T[];\n label: string;\n getRowId: (row: T) => string;\n name?: string;\n minRows?: number;\n maxRows?: number;\n updateRow: (index: number, patch: Partial<T>) => void;\n removeRow: (index: number) => void;\n addRow: () => void;\n columns: string[];\n setColumns: (columns: string[]) => void;\n prefix: string;\n fullId: string;\n errorId: string;\n itemLabel: string;\n locale: string;\n rowError?: (row: T) => string | null;\n balanced: boolean;\n setBalanced: (balanced: boolean) => void;\n focusAt: number | 'add' | null;\n clearFocus: () => void;\n}\n\nconst EditableListContext = React.createContext<EditableListContextValue<unknown> | null>(null);\n\nfunction slug(value: string): string {\n return value.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '') || 'field';\n}\n\nfunction useEditable<T>(): EditableListContextValue<T> {\n const value = React.useContext(EditableListContext);\n if (!value) throw new Error('EditableList parts must be inside EditableList.Root');\n return value as EditableListContextValue<T>;\n}\n\nexport interface EditableListRootProps<T> {\n value?: T[];\n defaultValue?: T[];\n onValueChange?: (value: T[]) => void;\n getRowId: (row: T) => string;\n createRow: () => T;\n minRows?: number;\n maxRows?: number;\n label: string;\n /** Singular name for a row: \"Allocation\". Used in remove labels and the stacked title. */\n itemLabel?: string;\n /** When set, each primitive field also submits as name[index].field. Do not combine this with fields the app names itself. */\n name?: string;\n /** Which keys submit. By default, id and non-primitives are skipped. */\n fields?: (keyof T)[];\n locale?: string;\n rowError?: (row: T) => string | null;\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Repeating form rows. Move up, Move down, To top and To bottom are not here yet:\n * nothing in Dryden is user-ordered. Those buttons would sit in the row, before any drag handle.\n */\nexport function EditableListRoot<T extends object>({\n value,\n defaultValue,\n onValueChange,\n getRowId,\n createRow,\n minRows,\n maxRows,\n label,\n itemLabel,\n name,\n fields,\n locale,\n rowError,\n children,\n className,\n}: EditableListRootProps<T>) {\n const prefix = React.useId();\n const fullId = `${prefix}-full`;\n const errorId = `${prefix}-error`;\n const [uncontrolled, setUncontrolled] = React.useState<T[]>(defaultValue ?? []);\n const rows = value ?? uncontrolled;\n const setRows = (next: T[]) => {\n onValueChange?.(next);\n if (value === undefined) setUncontrolled(next);\n };\n const rowName = itemLabel ?? label;\n const [columns, setColumns] = React.useState<string[]>([]);\n const [removed, setRemoved] = React.useState('');\n const [balanced, setBalanced] = React.useState(false);\n const [focusAt, setFocusAt] = React.useState<number | 'add' | null>(null);\n const stack = useUnderWidth('--sl-collection-editable-list-stack-width');\n\n const updateRow = (index: number, patch: Partial<T>) => {\n setRows(rows.map((row, rowIndex) => (rowIndex === index ? { ...row, ...patch } : row)));\n };\n const removeRow = (index: number) => {\n if (minRows != null && rows.length <= minRows) return;\n const next = rows.filter((_, rowIndex) => rowIndex !== index);\n setRemoved('');\n setRows(next);\n window.requestAnimationFrame(() => setRemoved(`${rowName} ${index + 1} removed`));\n setFocusAt(next.length === 0 ? 'add' : Math.min(index, next.length - 1));\n };\n const addRow = () => {\n if (maxRows != null && rows.length >= maxRows) return;\n setRows([...rows, createRow()]);\n setFocusAt(rows.length);\n };\n\n const context = {\n rows,\n label,\n getRowId,\n itemLabel: rowName,\n locale: locale || (typeof document === 'undefined' ? 'en' : document.documentElement.lang) || 'en',\n prefix,\n fullId,\n name,\n minRows,\n maxRows,\n updateRow,\n removeRow,\n addRow,\n columns,\n setColumns,\n errorId,\n rowError,\n balanced,\n setBalanced,\n focusAt,\n clearFocus: () => setFocusAt(null),\n };\n\n return (\n <EditableListContext.Provider value={context as EditableListContextValue<unknown>}>\n <div ref={stack.ref} className={cn('EditableList', className)} data-label={label} data-balanced={balanced ? '' : undefined} data-stacked={stack.under ? '' : undefined}>\n <table className=\"Table EditableListTable\" aria-describedby={`${fullId} ${errorId}`}>\n {children}\n </table>\n <div className=\"visually-hidden\" aria-live=\"polite\">{removed}</div>\n {name\n ? rows.flatMap((row, index) =>\n Object.entries(row)\n .filter(([field, fieldValue]) => {\n if (fields) return fields.includes(field as keyof T);\n if (field === 'id') return false;\n return fieldValue == null || ['string', 'number', 'boolean'].includes(typeof fieldValue);\n })\n .map(([field, fieldValue]) => (\n <input key={`${getRowId(row)}-${field}`} type=\"hidden\" name={`${name}[${index}].${field}`} value={fieldValue == null ? '' : String(fieldValue)} />\n )),\n )\n : null}\n <FocusBridge />\n </div>\n </EditableListContext.Provider>\n );\n}\n\nfunction FocusBridge() {\n const list = useEditable();\n const ref = React.useRef<HTMLDivElement>(null);\n React.useLayoutEffect(() => {\n if (list.focusAt == null) return;\n const root = ref.current?.closest('.EditableList');\n if (!root) return;\n const target = list.focusAt === 'add'\n ? root.querySelector<HTMLElement>('.EditableListAdd button')\n : root.querySelectorAll('tbody tr')[list.focusAt]?.querySelector<HTMLElement>('input, select, textarea, button');\n target?.focus();\n list.clearFocus();\n });\n return <div ref={ref} hidden />;\n}\n\nexport function EditableListHeader({ columns }: { columns: string[] }) {\n const list = useEditable();\n React.useEffect(() => {\n list.setColumns(columns);\n }, [columns.join('|')]);\n return (\n <thead>\n <tr>\n {columns.map((column) => (\n <th key={column} scope=\"col\" id={`${list.prefix}-${slug(column)}`}>\n {column}\n </th>\n ))}\n <th scope=\"col\"><span className=\"visually-hidden\">Remove</span></th>\n </tr>\n </thead>\n );\n}\n\nexport function EditableListRows<T>({ children }: { children: (row: T, index: number, api: EditableListApi<T>) => React.ReactNode }) {\n const list = useEditable<T>();\n return (\n <tbody>\n {list.rows.map((row, index) => (\n <RowScope key={list.getRowId(row)} index={index}>\n {children(row, index, { index, update: (patch) => list.updateRow(index, patch), remove: () => list.removeRow(index) })}\n </RowScope>\n ))}\n </tbody>\n );\n}\n\nconst RowIndex = React.createContext(0);\n\nfunction RowScope({ index, children }: { index: number; children: React.ReactNode }) {\n return <RowIndex.Provider value={index}>{children}</RowIndex.Provider>;\n}\n\nexport function EditableListRow({ children }: { children: React.ReactNode }) {\n const list = useEditable();\n const index = React.useContext(RowIndex);\n const message = list.rowError?.(list.rows[index] as object) ?? null;\n return (\n <>\n <tr data-invalid={message ? '' : undefined} data-row={index + 1}>\n {children}\n </tr>\n {message ? (\n <tr>\n <td colSpan={Math.max(list.columns.length, 1)}>\n <Field.Error id={`${list.prefix}-row-${index}-error`}>{message}</Field.Error>\n </td>\n </tr>\n ) : null}\n </>\n );\n}\n\n/** The id and aria-labelledby for the field in this cell. Put them on the input. A Select or MoneyField takes the same id on its own input. */\nexport function useEditableListField(column: string): { id: string; 'aria-labelledby': string } {\n const list = useEditable();\n const index = React.useContext(RowIndex);\n const id = `${list.prefix}-${slug(column)}-${index}`;\n return { id, 'aria-labelledby': `${list.prefix}-${slug(column)} ${list.prefix}-row-${index}` };\n}\n\nexport function EditableListCell({ column, align, children }: { column: string; align?: 'end'; children: React.ReactNode }) {\n const list = useEditable();\n const index = React.useContext(RowIndex);\n const field = useEditableListField(column);\n const first = list.columns[0] === column;\n return (\n <td data-align={align}>\n {first ? (\n <>\n <span className=\"EditableListStackedTitle\">{list.itemLabel} {index + 1}</span>\n <span className=\"visually-hidden\" id={`${list.prefix}-row-${index}`}>{list.itemLabel} {index + 1}</span>\n </>\n ) : null}\n <label className=\"EditableListFieldLabel\" htmlFor={field.id}>{column}</label>\n {children}\n </td>\n );\n}\n\nexport function EditableListRemoveButton() {\n const list = useEditable();\n const index = React.useContext(RowIndex);\n const hidden = list.minRows != null && list.rows.length <= list.minRows;\n if (hidden) return <td />;\n return (\n <td>\n <Button emphasis=\"quiet\" data-icon-only aria-label={`Remove ${list.itemLabel} ${index + 1}`} onClick={() => list.removeRow(index)}>\n <span className=\"material-symbols-outlined\" aria-hidden=\"true\">close</span>\n </Button>\n </td>\n );\n}\n\nexport function EditableListAddButton({ children }: { children: React.ReactNode }) {\n const list = useEditable();\n const atMax = list.maxRows != null && list.rows.length >= list.maxRows;\n return (\n <div className=\"EditableListAdd\">\n <Button emphasis=\"standard\" disabled={atMax} focusableWhenDisabled={atMax} onClick={list.addRow} aria-describedby={atMax ? list.fullId : undefined}>\n {children}\n </Button>\n {atMax ? <p id={list.fullId}>The list is full.</p> : null}\n </div>\n );\n}\n\nexport function EditableListError({ children }: { children: React.ReactNode }) {\n const list = useEditable();\n return <p id={list.errorId} className=\"EditableListError\" role=\"alert\">{children}</p>;\n}\n\nexport function EditableListBalance<T extends object>({ control, currency, sum }: { control: number | string; currency: string; sum: (rows: T[]) => Array<number | string | null | undefined> }) {\n const list = useEditable<T>();\n const math = balanceOf(sum(list.rows), control, currency);\n const digits = math.digits;\n const allocated = formatMoney(minorToDecimal(math.allocated, digits), { locale: list.locale, currency });\n const target = formatMoney(minorToDecimal(math.control, digits), { locale: list.locale, currency });\n const delta = formatMoney(minorToDecimal(math.delta < 0n ? -math.delta : math.delta, digits), { locale: list.locale, currency });\n const word = math.tone === 'balanced' ? 'balanced' : math.tone === 'under' ? `${delta} left` : `${delta} over`;\n const [announced, setAnnounced] = React.useState(word);\n React.useEffect(() => {\n list.setBalanced(math.tone === 'balanced');\n }, [math.tone]);\n React.useEffect(() => {\n const timer = window.setTimeout(() => setAnnounced(word), 200);\n return () => window.clearTimeout(timer);\n }, [word]);\n return (\n <p className=\"EditableListBalance\" data-color={math.tone === 'balanced' ? 'success' : math.tone === 'over' ? 'error' : 'warning'} data-balanced={math.tone === 'balanced' ? '' : undefined}>\n Allocated {allocated} of {target} · {word}\n <span className=\"visually-hidden\" aria-live=\"polite\">{announced}</span>\n </p>\n );\n}\n\nexport const EditableList = {\n useField: useEditableListField,\n Root: EditableListRoot,\n Header: EditableListHeader,\n Rows: EditableListRows,\n Row: EditableListRow,\n Cell: EditableListCell,\n RemoveButton: EditableListRemoveButton,\n AddButton: EditableListAddButton,\n Error: EditableListError,\n Balance: EditableListBalance,\n};\n"]}