@ansh-ui/react 0.2.0 → 0.3.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 (72) hide show
  1. package/dist/{chunk-RHTLNSVW.cjs → chunk-3SWO2M33.cjs} +7 -7
  2. package/dist/chunk-3SWO2M33.cjs.map +1 -0
  3. package/dist/{chunk-HO2YSF5O.js → chunk-742E5FQS.js} +3 -3
  4. package/dist/chunk-742E5FQS.js.map +1 -0
  5. package/dist/{chunk-EGG4CP7C.js → chunk-BQJ6H3HC.js} +3 -2
  6. package/dist/chunk-BQJ6H3HC.js.map +1 -0
  7. package/dist/{chunk-LDCZQP3R.js → chunk-CWYBOVCZ.js} +3 -3
  8. package/dist/{chunk-LDCZQP3R.js.map → chunk-CWYBOVCZ.js.map} +1 -1
  9. package/dist/{chunk-AVPEA5PB.cjs → chunk-IZ6T7LO3.cjs} +4 -4
  10. package/dist/{chunk-AVPEA5PB.cjs.map → chunk-IZ6T7LO3.cjs.map} +1 -1
  11. package/dist/{chunk-C32LKF23.cjs → chunk-KTLTYHAT.cjs} +3 -3
  12. package/dist/chunk-KTLTYHAT.cjs.map +1 -0
  13. package/dist/{chunk-IBXLC5IE.js → chunk-P5MRISBP.js} +19 -3
  14. package/dist/chunk-P5MRISBP.js.map +1 -0
  15. package/dist/{chunk-WGYNCSTP.cjs → chunk-PUW6BTPQ.cjs} +3 -2
  16. package/dist/chunk-PUW6BTPQ.cjs.map +1 -0
  17. package/dist/{chunk-T4AK2KLM.js → chunk-PVDQPVYF.js} +3 -3
  18. package/dist/{chunk-T4AK2KLM.js.map → chunk-PVDQPVYF.js.map} +1 -1
  19. package/dist/{chunk-6VRF7X5C.cjs → chunk-TEPQGFR4.cjs} +19 -2
  20. package/dist/chunk-TEPQGFR4.cjs.map +1 -0
  21. package/dist/{chunk-QO3E7TJS.js → chunk-WNWGYXJY.js} +4 -4
  22. package/dist/chunk-WNWGYXJY.js.map +1 -0
  23. package/dist/{chunk-C5JG6TMM.cjs → chunk-YACOHFYJ.cjs} +27 -27
  24. package/dist/{chunk-C5JG6TMM.cjs.map → chunk-YACOHFYJ.cjs.map} +1 -1
  25. package/dist/data.d.cts +2 -1
  26. package/dist/data.d.ts +2 -1
  27. package/dist/form.cjs +37 -37
  28. package/dist/form.d.cts +2 -1
  29. package/dist/form.d.ts +2 -1
  30. package/dist/form.js +2 -2
  31. package/dist/index.cjs +641 -110
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.d.cts +220 -7
  34. package/dist/index.d.ts +220 -7
  35. package/dist/index.js +526 -11
  36. package/dist/index.js.map +1 -1
  37. package/dist/layout.cjs +13 -13
  38. package/dist/layout.d.cts +11 -2
  39. package/dist/layout.d.ts +11 -2
  40. package/dist/layout.js +1 -1
  41. package/dist/{motion-CQmCq6_k.d.ts → motion-DoT_sTl1.d.ts} +3 -2
  42. package/dist/{motion-CSX4g2N8.d.cts → motion-DsQPOsTT.d.cts} +3 -2
  43. package/dist/motion.cjs +19 -19
  44. package/dist/motion.d.cts +2 -2
  45. package/dist/motion.d.ts +2 -2
  46. package/dist/motion.js +2 -2
  47. package/dist/navigation.d.cts +3 -2
  48. package/dist/navigation.d.ts +3 -2
  49. package/dist/overlay.cjs +16 -16
  50. package/dist/overlay.d.cts +3 -2
  51. package/dist/overlay.d.ts +3 -2
  52. package/dist/overlay.js +2 -2
  53. package/dist/{position-DVScKcaa.d.cts → position-CW6cGpSF.d.cts} +2 -1
  54. package/dist/{position-DVScKcaa.d.ts → position-CW6cGpSF.d.ts} +2 -1
  55. package/dist/primitives.cjs +25 -21
  56. package/dist/primitives.d.cts +5 -4
  57. package/dist/primitives.d.ts +5 -4
  58. package/dist/primitives.js +2 -2
  59. package/dist/{sidebar-D-PafAXw.d.cts → sidebar-Dyt67t2z.d.cts} +2 -1
  60. package/dist/{sidebar-D-PafAXw.d.ts → sidebar-Dyt67t2z.d.ts} +2 -1
  61. package/dist/styles.css +464 -0
  62. package/dist/{use-observers-B9qtimrk.d.cts → use-observers-DvA7hSz4.d.cts} +10 -1
  63. package/dist/{use-observers-B9qtimrk.d.ts → use-observers-DvA7hSz4.d.ts} +10 -1
  64. package/package.json +3 -3
  65. package/dist/chunk-6VRF7X5C.cjs.map +0 -1
  66. package/dist/chunk-C32LKF23.cjs.map +0 -1
  67. package/dist/chunk-EGG4CP7C.js.map +0 -1
  68. package/dist/chunk-HO2YSF5O.js.map +0 -1
  69. package/dist/chunk-IBXLC5IE.js.map +0 -1
  70. package/dist/chunk-QO3E7TJS.js.map +0 -1
  71. package/dist/chunk-RHTLNSVW.cjs.map +0 -1
  72. package/dist/chunk-WGYNCSTP.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/field.tsx","../src/components/form/input.tsx","../src/components/form/toggles.tsx","../src/components/form/listbox.tsx","../src/components/form/select.tsx","../src/components/form/combobox.tsx","../src/components/form/slider.tsx","../src/components/form/pin-input.tsx","../src/components/form/tags-input.tsx","../src/components/form/rating.tsx","../src/components/form/dropzone.tsx","../src/components/form/color-picker.tsx","../src/components/form/calendar.tsx","../src/components/form/date-picker.tsx"],"names":["createContext","useContext","useId","jsx","jsxs","cx","Fragment","forwardRef","Input","useRef","useMergedRef","useState","useEffect","Textarea","useCallback","NumberInput","useControllableState","Checkbox","Switch","Radio","ChoiceCard","useMemo","useAnchoredPosition","useDismiss","Portal","thumb","tryParseColor","parseColor","rgbToHsv","hsvToRgb","toOklchString","toHex","contrastRatio"],"mappings":"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","file":"chunk-RHTLNSVW.cjs","sourcesContent":["import { type ReactNode, createContext, useContext, useId } from 'react'\nimport { cx } from '../../primitives/compose'\n\n/**\n * The label / description / error scaffolding every form control shares.\n *\n * Wiring this by hand is where forms lose their accessibility. The control needs `id` matching the\n * label's `htmlFor`, `aria-describedby` pointing at *both* the hint and the error, and\n * `aria-invalid` when it's wrong. Six attributes across four elements, per field — so in practice\n * some fields get it and some don't.\n *\n * `Field` generates the ids and distributes them through context, so a control only has to spread\n * what `useFieldControl()` returns.\n *\n * ```tsx\n * <Field label=\"Work email\" description=\"We'll never share it.\" error={errors.email}>\n * <Input type=\"email\" value={email} onChange={…} />\n * </Field>\n * ```\n */\n\nexport interface FieldContextValue {\n id: string\n describedBy: string | undefined\n invalid: boolean\n required: boolean\n disabled: boolean\n}\n\nconst FieldContext = createContext<FieldContextValue | null>(null)\n\n/**\n * Props a control should spread onto its interactive element.\n *\n * Returns an empty object outside a `Field`, so every control works standalone — a control that\n * throws without a wrapper is a control people stop using.\n */\nexport function useFieldControl(): {\n id?: string\n 'aria-describedby'?: string\n 'aria-invalid'?: true\n 'aria-required'?: true\n disabled?: boolean\n} {\n const field = useContext(FieldContext)\n if (!field) return {}\n return {\n id: field.id,\n ...(field.describedBy ? { 'aria-describedby': field.describedBy } : null),\n ...(field.invalid ? { 'aria-invalid': true as const } : null),\n ...(field.required ? { 'aria-required': true as const } : null),\n ...(field.disabled ? { disabled: true } : null),\n }\n}\n\n/** The raw context, for controls that need the ids rather than the spreadable props. */\nexport function useFieldContext(): FieldContextValue | null {\n return useContext(FieldContext)\n}\n\nexport interface FieldProps {\n label?: ReactNode\n /** Helper text below the label. Announced as part of the control's description. */\n description?: ReactNode\n /** Error message. Its presence sets `aria-invalid` on the control. */\n error?: ReactNode\n /** Marks the field required and appends an asterisk to the label. */\n required?: boolean\n disabled?: boolean\n /** Label to the side rather than above — denser, for settings screens. */\n orientation?: 'vertical' | 'horizontal'\n className?: string\n children: ReactNode\n}\n\nexport function Field({\n label,\n description,\n error,\n required = false,\n disabled = false,\n orientation = 'vertical',\n className,\n children,\n}: FieldProps) {\n const id = useId()\n const descriptionId = `${id}-description`\n const errorId = `${id}-error`\n\n // Order matters: a screen reader reads descriptions in the order listed, and the error is the\n // more urgent of the two, so it comes first.\n const describedBy =\n [error ? errorId : null, description ? descriptionId : null].filter(Boolean).join(' ') ||\n undefined\n\n return (\n <FieldContext.Provider value={{ id, describedBy, invalid: Boolean(error), required, disabled }}>\n <div\n className={cx(\n 'ansh-field',\n `ansh-field--${orientation}`,\n disabled && 'ansh-field--disabled',\n className,\n )}\n >\n {label ? (\n <label className=\"ansh-field__label\" htmlFor={id}>\n {label}\n {required ? (\n <>\n <span aria-hidden=\"true\" className=\"ansh-field__required\">\n *\n </span>\n {/* The asterisk alone is a visual convention with no meaning to a screen reader;\n `aria-required` on the control carries it, and this covers the rest. */}\n <span className=\"ansh-visually-hidden\"> (required)</span>\n </>\n ) : null}\n </label>\n ) : null}\n\n <div className=\"ansh-field__control\">{children}</div>\n\n {description ? (\n <p className=\"ansh-field__description\" id={descriptionId}>\n {description}\n </p>\n ) : null}\n\n {error ? (\n // `role=\"alert\"` announces the message when it appears after a failed submit, which is\n // the moment it matters. `aria-describedby` alone would only be read on re-focus.\n <p className=\"ansh-field__error\" id={errorId} role=\"alert\">\n {error}\n </p>\n ) : null}\n </div>\n </FieldContext.Provider>\n )\n}\n\nexport interface FieldsetProps {\n legend: ReactNode\n description?: ReactNode\n className?: string\n children: ReactNode\n}\n\n/**\n * A group of related fields.\n *\n * A real `<fieldset>`/`<legend>`, because that pairing is what makes a screen reader announce the\n * group name before each control inside it. A styled `<div>` with a heading looks identical and\n * conveys nothing.\n */\nexport function Fieldset({ legend, description, className, children }: FieldsetProps) {\n const id = useId()\n return (\n <fieldset\n className={cx('ansh-fieldset', className)}\n {...(description ? { 'aria-describedby': id } : null)}\n >\n <legend className=\"ansh-fieldset__legend\">{legend}</legend>\n {description ? (\n <p className=\"ansh-fieldset__description\" id={id}>\n {description}\n </p>\n ) : null}\n {children}\n </fieldset>\n )\n}\n\n/**\n * Visually hidden, still announced.\n *\n * The clip-path technique rather than `display: none` or `visibility: hidden`, both of which\n * remove the element from the accessibility tree entirely — which is the opposite of the intent.\n */\nexport function VisuallyHidden({\n children,\n ...rest\n}: { children: ReactNode } & React.HTMLAttributes<HTMLSpanElement>) {\n return (\n <span className=\"ansh-visually-hidden\" {...rest}>\n {children}\n </span>\n )\n}\n","import {\n type ForwardedRef,\n type InputHTMLAttributes,\n type ReactNode,\n type TextareaHTMLAttributes,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport { cx } from '../../primitives/compose'\nimport { useMergedRef } from '../../hooks/use-observers'\nimport { useFieldControl } from './field'\nimport { useControllableState } from '../../primitives/use-controllable-state'\n\nexport type InputSize = 'sm' | 'md' | 'lg'\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {\n size?: InputSize\n /** Content inside the field, before the text — an icon or a currency symbol. */\n prefix?: ReactNode\n /** Content inside the field, after the text — a unit, or a button. */\n suffix?: ReactNode\n /** Show a clear button when non-empty. */\n clearable?: boolean\n onClear?: () => void\n /** Force the error style outside a `Field`. */\n invalid?: boolean\n className?: string\n /** Class for the outer wrapper, when there is a prefix or suffix. */\n wrapperClassName?: string\n}\n\n/**\n * A text input.\n *\n * The affordance most inputs get wrong is the click target: with an icon inside the field, clicking\n * the icon should focus the input. That works here because the wrapper forwards the click, rather\n * than the icon being an absolutely positioned sibling that swallows it.\n */\nexport const Input = forwardRef(function Input(\n {\n size = 'md',\n prefix,\n suffix,\n clearable = false,\n onClear,\n invalid,\n className,\n wrapperClassName,\n disabled,\n ...rest\n }: InputProps,\n forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n const fieldProps = useFieldControl()\n const localRef = useRef<HTMLInputElement | null>(null)\n const ref = useMergedRef<HTMLInputElement>(localRef, forwardedRef)\n\n // Tracked only to decide whether the clear button shows. Reading `.value` off the DOM in a\n // render would be unreliable under concurrent rendering.\n const [hasValue, setHasValue] = useState(\n () => String(rest.value ?? rest.defaultValue ?? '').length > 0,\n )\n\n useEffect(() => {\n if (rest.value !== undefined) setHasValue(String(rest.value).length > 0)\n }, [rest.value])\n\n const showClear = clearable && hasValue && !disabled && !rest.readOnly\n\n /**\n * Whether the wrapper renders is decided by **props**, never by state.\n *\n * Deciding it from `showClear` looks equivalent and is not: when the field goes from empty to\n * non-empty the input's position in the element tree changes, React unmounts it and mounts a\n * fresh one, and the field loses its caret position, its focus, and — for an uncontrolled input —\n * everything the user had typed. Keying the structure off props keeps the same DOM node alive for\n * the component's whole lifetime.\n */\n const grouped = Boolean(prefix || suffix || clearable)\n\n const control = (\n <input\n ref={ref}\n className={cx('ansh-input', `ansh-input--${size}`, !grouped && className)}\n disabled={disabled}\n {...fieldProps}\n {...rest}\n {...(invalid ? { 'aria-invalid': true } : null)}\n onChange={(event) => {\n setHasValue(event.target.value.length > 0)\n rest.onChange?.(event)\n }}\n />\n )\n\n if (!grouped) return control\n\n return (\n <div\n className={cx(\n 'ansh-input-group',\n `ansh-input-group--${size}`,\n disabled && 'ansh-input-group--disabled',\n (invalid || fieldProps['aria-invalid']) && 'ansh-input-group--invalid',\n wrapperClassName,\n className,\n )}\n // Clicking anywhere in the group focuses the input, including the padding and the icons.\n // Guarded so a click on a button inside the suffix still reaches that button.\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) {\n event.preventDefault()\n localRef.current?.focus()\n }\n }}\n >\n {prefix ? (\n <span className=\"ansh-input-group__affix\" aria-hidden=\"true\">\n {prefix}\n </span>\n ) : null}\n\n {control}\n\n {showClear ? (\n <button\n type=\"button\"\n className=\"ansh-input-group__clear ansh-focusable\"\n aria-label=\"Clear\"\n onClick={() => {\n const node = localRef.current\n if (node) {\n // Set through the native setter so React's onChange fires. Assigning `.value`\n // directly updates the DOM but leaves React's internal value tracker unchanged, so\n // the component never learns the field was cleared.\n const setter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n 'value',\n )?.set\n setter?.call(node, '')\n node.dispatchEvent(new Event('input', { bubbles: true }))\n node.focus()\n }\n setHasValue(false)\n onClear?.()\n }}\n >\n <svg viewBox=\"0 0 16 16\" width=\"12\" height=\"12\" aria-hidden=\"true\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n ) : null}\n\n {suffix ? <span className=\"ansh-input-group__affix\">{suffix}</span> : null}\n </div>\n )\n})\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n /** Grow with the content instead of scrolling. */\n autoResize?: boolean\n /** Upper bound for `autoResize`, in rows. Default `12`. */\n maxRows?: number\n /** Show a live character count. Needs `maxLength` to show a limit. */\n showCount?: boolean\n invalid?: boolean\n}\n\n/** A multi-line text input, optionally growing with its content. */\nexport const Textarea = forwardRef(function Textarea(\n {\n autoResize = false,\n maxRows = 12,\n showCount = false,\n invalid,\n className,\n ...rest\n }: TextareaProps,\n forwardedRef: ForwardedRef<HTMLTextAreaElement>,\n) {\n const fieldProps = useFieldControl()\n const localRef = useRef<HTMLTextAreaElement | null>(null)\n const ref = useMergedRef<HTMLTextAreaElement>(localRef, forwardedRef)\n\n const [count, setCount] = useState(() => String(rest.value ?? rest.defaultValue ?? '').length)\n\n const resize = useCallback(() => {\n const node = localRef.current\n if (!node || !autoResize) return\n\n // Reset first: without it the height only ever ratchets upward, because `scrollHeight` of an\n // already-tall element includes the empty space.\n node.style.height = 'auto'\n const lineHeight = Number.parseFloat(getComputedStyle(node).lineHeight) || 20\n const max = lineHeight * maxRows\n node.style.height = `${Math.min(node.scrollHeight, max)}px`\n node.style.overflowY = node.scrollHeight > max ? 'auto' : 'hidden'\n }, [autoResize, maxRows])\n\n useEffect(resize, [resize, rest.value])\n\n return (\n <div className={cx('ansh-textarea-wrap', className)}>\n <textarea\n ref={ref}\n className={cx('ansh-input', 'ansh-textarea', autoResize && 'ansh-textarea--auto')}\n {...fieldProps}\n {...rest}\n {...(invalid ? { 'aria-invalid': true } : null)}\n onChange={(event) => {\n setCount(event.target.value.length)\n resize()\n rest.onChange?.(event)\n }}\n />\n {showCount ? (\n <span\n className={cx(\n 'ansh-textarea__count',\n rest.maxLength !== undefined &&\n count > rest.maxLength * 0.9 &&\n 'ansh-textarea__count--near',\n )}\n // Announced politely so a screen-reader user isn't interrupted on every keystroke.\n aria-live=\"polite\"\n >\n {rest.maxLength !== undefined ? `${count} / ${rest.maxLength}` : count}\n </span>\n ) : null}\n </div>\n )\n})\n\nexport interface NumberInputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'onChange' | 'size' | 'type'\n> {\n value?: number\n defaultValue?: number\n onChange?: (value: number) => void\n min?: number\n max?: number\n step?: number\n /** Decimal places to display. Default: inferred from `step`. */\n precision?: number\n size?: InputSize\n /** Unit shown after the number — \"kg\", \"%\", \"days\". */\n unit?: ReactNode\n /** Show the stepper buttons. Default `true`. */\n steppers?: boolean\n}\n\n/**\n * A numeric input with steppers.\n *\n * Deliberately `type=\"text\"` with `inputMode=\"decimal\"` rather than `type=\"number\"`. Native number\n * inputs silently discard invalid intermediate text (typing \"1e\" clears the field), scroll-wheel\n * over a focused field changes the value by accident, and the spinner cannot be styled\n * consistently across browsers. All three are real bugs users hit on data-entry screens.\n */\nexport const NumberInput = forwardRef(function NumberInput(\n {\n value,\n defaultValue = 0,\n onChange,\n min = Number.NEGATIVE_INFINITY,\n max = Number.POSITIVE_INFINITY,\n step = 1,\n precision,\n size = 'md',\n unit,\n steppers = true,\n className,\n disabled,\n ...rest\n }: NumberInputProps,\n forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n const fieldProps = useFieldControl()\n const [current, setCurrent] = useControllableState<number>({\n value,\n defaultValue,\n onChange,\n })\n\n // Inferred from the step, so `step={0.01}` displays two decimals without being told twice.\n const decimals =\n precision ?? (String(step).includes('.') ? String(step).split('.')[1]!.length : 0)\n\n // Raw text is separate from the numeric value so a partial entry (\"-\", \"1.\") survives keystrokes\n // instead of being normalised out from under the cursor.\n const [text, setText] = useState(() => current.toFixed(decimals))\n const [editing, setEditing] = useState(false)\n\n useEffect(() => {\n if (!editing) setText(current.toFixed(decimals))\n }, [current, decimals, editing])\n\n const clamp = (n: number) => Math.min(Math.max(n, min), max)\n\n const nudge = (direction: 1 | -1, multiplier = 1) => {\n const next = clamp(current + step * direction * multiplier)\n setCurrent(Number(next.toFixed(decimals)))\n }\n\n const commit = (raw: string) => {\n const parsed = Number.parseFloat(raw)\n const next = Number.isFinite(parsed) ? clamp(parsed) : current\n setCurrent(Number(next.toFixed(decimals)))\n setText(next.toFixed(decimals))\n }\n\n return (\n <div\n className={cx(\n 'ansh-number',\n `ansh-number--${size}`,\n disabled && 'ansh-number--disabled',\n className,\n )}\n >\n <input\n ref={forwardedRef}\n type=\"text\"\n inputMode=\"decimal\"\n className=\"ansh-input ansh-number__input\"\n value={text}\n disabled={disabled}\n // The ARIA spinbutton contract, so the current, minimum and maximum are announced.\n role=\"spinbutton\"\n aria-valuenow={current}\n {...(Number.isFinite(min) ? { 'aria-valuemin': min } : null)}\n {...(Number.isFinite(max) ? { 'aria-valuemax': max } : null)}\n {...fieldProps}\n {...rest}\n onFocus={(event) => {\n setEditing(true)\n rest.onFocus?.(event)\n }}\n onChange={(event) => setText(event.target.value)}\n onBlur={(event) => {\n setEditing(false)\n commit(event.target.value)\n rest.onBlur?.(event)\n }}\n onKeyDown={(event) => {\n // PageUp/PageDown move by 10 steps — the spinbutton convention, and a real help on a\n // field with a step of 0.01.\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n nudge(1, event.shiftKey ? 10 : 1)\n } else if (event.key === 'ArrowDown') {\n event.preventDefault()\n nudge(-1, event.shiftKey ? 10 : 1)\n } else if (event.key === 'PageUp') {\n event.preventDefault()\n nudge(1, 10)\n } else if (event.key === 'PageDown') {\n event.preventDefault()\n nudge(-1, 10)\n } else if (event.key === 'Home' && Number.isFinite(min)) {\n event.preventDefault()\n setCurrent(min)\n } else if (event.key === 'End' && Number.isFinite(max)) {\n event.preventDefault()\n setCurrent(max)\n } else if (event.key === 'Enter') {\n commit((event.target as HTMLInputElement).value)\n }\n rest.onKeyDown?.(event)\n }}\n />\n\n {unit ? <span className=\"ansh-number__unit\">{unit}</span> : null}\n\n {steppers ? (\n // `tabIndex={-1}` and `aria-hidden`: the input is already a spinbutton with arrow-key\n // support, so these buttons would be redundant tab stops announcing nothing new.\n <span className=\"ansh-number__steppers\" aria-hidden=\"true\">\n <button\n type=\"button\"\n tabIndex={-1}\n className=\"ansh-number__step\"\n disabled={disabled || current >= max}\n onClick={() => nudge(1)}\n >\n <svg viewBox=\"0 0 10 6\" width=\"10\" height=\"6\">\n <path\n d=\"M1 5l4-4 4 4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n tabIndex={-1}\n className=\"ansh-number__step\"\n disabled={disabled || current <= min}\n onClick={() => nudge(-1)}\n >\n <svg viewBox=\"0 0 10 6\" width=\"10\" height=\"6\">\n <path\n d=\"M1 1l4 4 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </span>\n ) : null}\n </div>\n )\n})\n","import {\n type ForwardedRef,\n type InputHTMLAttributes,\n type ReactNode,\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useId,\n useRef,\n} from 'react'\nimport { cx } from '../../primitives/compose'\nimport { useMergedRef } from '../../hooks/use-observers'\nimport { useControllableState } from '../../primitives/use-controllable-state'\nimport { useFieldControl } from './field'\n\n/**\n * Binary and single-choice controls.\n *\n * All three wrap a **real** `<input>` rather than painting a div. That decision carries a lot:\n * form submission works, `:checked` styling works, the label association works, autofill works,\n * password managers and browser translation work, and every assistive technology already knows what\n * the control is. The visual is a sibling element the input drives via `:checked + .indicator`.\n *\n * The input is not `display: none` — that removes it from the accessibility tree and the tab order.\n * It is transparent and stretched over the control, so it stays focusable and clickable.\n */\n\n// --- Checkbox -------------------------------------------------------------\n\nexport interface CheckboxProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'onChange' | 'size'\n> {\n checked?: boolean\n defaultChecked?: boolean\n onChange?: (checked: boolean) => void\n /** Neither checked nor unchecked — a parent whose children are partly selected. */\n indeterminate?: boolean\n label?: ReactNode\n description?: ReactNode\n size?: 'sm' | 'md'\n invalid?: boolean\n}\n\nexport const Checkbox = forwardRef(function Checkbox(\n {\n checked,\n defaultChecked = false,\n onChange,\n indeterminate = false,\n label,\n description,\n size = 'md',\n invalid,\n className,\n disabled,\n ...rest\n }: CheckboxProps,\n forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n const fieldProps = useFieldControl()\n const localRef = useRef<HTMLInputElement | null>(null)\n const ref = useMergedRef<HTMLInputElement>(localRef, forwardedRef)\n const generatedId = useId()\n const id = (rest.id ?? fieldProps.id ?? generatedId) as string\n const descriptionId = `${id}-hint`\n\n const [isChecked, setChecked] = useControllableState<boolean>({\n value: checked,\n defaultValue: defaultChecked,\n onChange,\n })\n\n // `indeterminate` has no HTML attribute — it exists only as a DOM property, so it must be set\n // imperatively after every render. This is the one place a checkbox genuinely needs an effect.\n useEffect(() => {\n if (localRef.current) localRef.current.indeterminate = indeterminate\n }, [indeterminate])\n\n return (\n <div\n className={cx(\n 'ansh-choice',\n `ansh-choice--${size}`,\n disabled && 'ansh-choice--disabled',\n className,\n )}\n >\n <span className=\"ansh-choice__box\">\n <input\n ref={ref}\n type=\"checkbox\"\n className=\"ansh-choice__input\"\n checked={isChecked}\n disabled={disabled ?? fieldProps.disabled}\n onChange={(event) => setChecked(event.target.checked)}\n // Announces \"mixed\" rather than \"checked\"/\"unchecked\" — the whole point of the state.\n {...(indeterminate ? { 'aria-checked': 'mixed' as const } : null)}\n {...(invalid ? { 'aria-invalid': true } : null)}\n {...(description ? { 'aria-describedby': descriptionId } : null)}\n {...rest}\n id={id}\n />\n <span className=\"ansh-choice__indicator ansh-choice__indicator--check\" aria-hidden=\"true\">\n {indeterminate ? (\n <svg viewBox=\"0 0 14 14\" width=\"10\" height=\"10\">\n <path d=\"M3 7h8\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n ) : (\n <svg viewBox=\"0 0 14 14\" width=\"10\" height=\"10\">\n <path\n d=\"M2.5 7.5l3 3 6-6.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n )}\n </span>\n </span>\n\n {label || description ? (\n <span className=\"ansh-choice__text\">\n {label ? (\n <label className=\"ansh-choice__label\" htmlFor={id}>\n {label}\n </label>\n ) : null}\n {description ? (\n <span className=\"ansh-choice__description\" id={descriptionId}>\n {description}\n </span>\n ) : null}\n </span>\n ) : null}\n </div>\n )\n})\n\n// --- Switch ---------------------------------------------------------------\n\nexport interface SwitchProps extends Omit<CheckboxProps, 'indeterminate'> {\n /** Where the label sits. Default `'end'`; `'start'` suits settings rows. */\n labelPosition?: 'start' | 'end'\n}\n\n/**\n * An on/off toggle.\n *\n * `role=\"switch\"` rather than a plain checkbox: it makes a screen reader announce \"on\"/\"off\"\n * instead of \"checked\"/\"not checked\", which is the difference between a setting and a selection.\n *\n * A switch applies immediately; a checkbox applies on submit. If the change needs a Save button,\n * the control should be a checkbox.\n */\nexport const Switch = forwardRef(function Switch(\n {\n checked,\n defaultChecked = false,\n onChange,\n label,\n description,\n labelPosition = 'end',\n size = 'md',\n className,\n disabled,\n ...rest\n }: SwitchProps,\n forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n const fieldProps = useFieldControl()\n const generatedId = useId()\n const id = (rest.id ?? fieldProps.id ?? generatedId) as string\n const descriptionId = `${id}-hint`\n\n const [isChecked, setChecked] = useControllableState<boolean>({\n value: checked,\n defaultValue: defaultChecked,\n onChange,\n })\n\n return (\n <div\n className={cx(\n 'ansh-switch-row',\n `ansh-switch-row--${labelPosition}`,\n disabled && 'ansh-choice--disabled',\n className,\n )}\n >\n <span className=\"ansh-switch\" data-size={size}>\n <input\n ref={forwardedRef}\n type=\"checkbox\"\n role=\"switch\"\n className=\"ansh-choice__input\"\n checked={isChecked}\n disabled={disabled ?? fieldProps.disabled}\n onChange={(event) => setChecked(event.target.checked)}\n {...(description ? { 'aria-describedby': descriptionId } : null)}\n {...rest}\n id={id}\n />\n <span className=\"ansh-switch__track\" aria-hidden=\"true\">\n <span className=\"ansh-switch__thumb\" />\n </span>\n </span>\n\n {label || description ? (\n <span className=\"ansh-choice__text\">\n {label ? (\n <label className=\"ansh-choice__label\" htmlFor={id}>\n {label}\n </label>\n ) : null}\n {description ? (\n <span className=\"ansh-choice__description\" id={descriptionId}>\n {description}\n </span>\n ) : null}\n </span>\n ) : null}\n </div>\n )\n})\n\n// --- Radio ----------------------------------------------------------------\n\ninterface RadioGroupContextValue {\n name: string\n value: string | undefined\n setValue: (value: string) => void\n disabled: boolean\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null)\n\nexport interface RadioGroupProps {\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n /** Shared `name`. Generated when omitted, which is fine outside a native form. */\n name?: string\n label?: ReactNode\n orientation?: 'vertical' | 'horizontal'\n disabled?: boolean\n className?: string\n children: ReactNode\n}\n\n/**\n * A group of mutually exclusive choices.\n *\n * Native radios already implement roving focus: arrow keys move between them and Tab enters and\n * leaves the group as a unit. That behaviour is free as long as every input shares a `name`, which\n * is what this context distributes — and it is why this doesn't reimplement key handling.\n */\nexport function RadioGroup({\n value,\n defaultValue,\n onChange,\n name,\n label,\n orientation = 'vertical',\n disabled = false,\n className,\n children,\n}: RadioGroupProps) {\n const generatedName = useId()\n const [current, setCurrent] = useControllableState<string | undefined>({\n value,\n defaultValue,\n onChange: onChange as ((value: string | undefined) => void) | undefined,\n })\n\n return (\n <RadioGroupContext.Provider\n value={{\n name: name ?? generatedName,\n value: current,\n setValue: setCurrent,\n disabled,\n }}\n >\n <div\n role=\"radiogroup\"\n {...(label && typeof label === 'string' ? { 'aria-label': label } : null)}\n className={cx('ansh-radio-group', `ansh-radio-group--${orientation}`, className)}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n )\n}\n\nexport interface RadioProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'onChange' | 'size'\n> {\n value: string\n label?: ReactNode\n description?: ReactNode\n size?: 'sm' | 'md'\n}\n\nexport const Radio = forwardRef(function Radio(\n { value, label, description, size = 'md', className, disabled, ...rest }: RadioProps,\n forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n const group = useContext(RadioGroupContext)\n const generatedId = useId()\n const id = (rest.id ?? generatedId) as string\n const descriptionId = `${id}-hint`\n const isDisabled = disabled || group?.disabled\n\n return (\n <div\n className={cx(\n 'ansh-choice',\n `ansh-choice--${size}`,\n isDisabled && 'ansh-choice--disabled',\n className,\n )}\n >\n <span className=\"ansh-choice__box\">\n <input\n ref={forwardedRef}\n type=\"radio\"\n className=\"ansh-choice__input\"\n name={group?.name}\n value={value}\n checked={group ? group.value === value : undefined}\n disabled={isDisabled}\n onChange={() => group?.setValue(value)}\n {...(description ? { 'aria-describedby': descriptionId } : null)}\n {...rest}\n id={id}\n />\n <span className=\"ansh-choice__indicator ansh-choice__indicator--dot\" aria-hidden=\"true\" />\n </span>\n\n {label || description ? (\n <span className=\"ansh-choice__text\">\n {label ? (\n <label className=\"ansh-choice__label\" htmlFor={id}>\n {label}\n </label>\n ) : null}\n {description ? (\n <span className=\"ansh-choice__description\" id={descriptionId}>\n {description}\n </span>\n ) : null}\n </span>\n ) : null}\n </div>\n )\n})\n\n// --- Card-style choices ---------------------------------------------------\n\nexport interface ChoiceCardProps extends RadioProps {\n icon?: ReactNode\n}\n\n/**\n * A radio rendered as a selectable card — plan pickers, onboarding branches.\n *\n * Still a radio underneath, so keyboard and screen-reader behaviour is identical to the plain one.\n * Selection is marked by a border *and* a check, never colour alone: WCAG 1.4.1 requires that\n * colour not be the sole carrier of information, and roughly 1 in 12 men cannot rely on it.\n */\nexport const ChoiceCard = forwardRef(function ChoiceCard(\n { icon, label, description, value, className, ...rest }: ChoiceCardProps,\n forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n const group = useContext(RadioGroupContext)\n const selected = group?.value === value\n\n return (\n <label className={cx('ansh-choice-card', selected && 'ansh-choice-card--selected', className)}>\n <Radio ref={forwardedRef} value={value} className=\"ansh-choice-card__radio\" {...rest} />\n {icon ? <span className=\"ansh-choice-card__icon\">{icon}</span> : null}\n <span className=\"ansh-choice-card__body\">\n <span className=\"ansh-choice-card__label\">{label}</span>\n {description ? <span className=\"ansh-choice-card__description\">{description}</span> : null}\n </span>\n </label>\n )\n})\n","import { type ReactNode, useCallback, useMemo, useRef } from 'react'\nimport { cx } from '../../primitives/compose'\n\n/**\n * Shared machinery for `Select` and `Combobox`.\n *\n * Both are listboxes: same option shape, same grouping, same active-descendant navigation, same\n * \"skip disabled items\" rule. What differs is only how the query is entered — a hidden typeahead\n * buffer versus a visible text input. Sharing this is what keeps the two consistent; the\n * alternative is a `Select` whose Home key works and a `Combobox` whose doesn't.\n */\n\nexport interface SelectOption {\n value: string\n label: string\n /** Secondary line under the label. */\n description?: string\n icon?: ReactNode\n disabled?: boolean\n /** Options sharing a group render under one heading. */\n group?: string\n /** Extra text matched by search but never displayed. */\n keywords?: string\n}\n\n/** Move `active` by `delta`, skipping disabled options and stopping at the ends. */\nexport function stepActive(\n options: readonly SelectOption[],\n active: number,\n delta: number,\n loop = true,\n): number {\n if (options.length === 0) return -1\n\n let index = active\n // Bounded by length so an all-disabled list terminates instead of spinning.\n for (let attempts = 0; attempts < options.length; attempts++) {\n index += delta\n if (index < 0) {\n if (!loop) return active\n index = options.length - 1\n }\n if (index >= options.length) {\n if (!loop) return active\n index = 0\n }\n if (!options[index]?.disabled) return index\n }\n return active\n}\n\n/** First enabled option at or after `from`. */\nexport function firstEnabled(options: readonly SelectOption[], from = 0): number {\n for (let i = from; i < options.length; i++) {\n if (!options[i]?.disabled) return i\n }\n return -1\n}\n\n/**\n * Type-ahead over a listbox with no text input.\n *\n * Typing \"ca\" jumps to \"Canada\". The buffer resets after a pause, so typing \"c\", waiting, then \"a\"\n * moves to the first \"c\" and then the first \"a\" — which is what the native `<select>` does and what\n * users have internalised over three decades.\n */\nexport function useTypeahead(\n options: readonly SelectOption[],\n onMatch: (index: number) => void,\n timeout = 600,\n): (key: string) => boolean {\n const bufferRef = useRef('')\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n\n return useCallback(\n (key: string) => {\n // Single printable characters only — modifier combinations and named keys are commands.\n if (key.length !== 1 || key === ' ') return false\n\n clearTimeout(timerRef.current)\n bufferRef.current += key.toLowerCase()\n timerRef.current = setTimeout(() => {\n bufferRef.current = ''\n }, timeout)\n\n const buffer = bufferRef.current\n const index = options.findIndex(\n (option) => !option.disabled && option.label.toLowerCase().startsWith(buffer),\n )\n if (index >= 0) {\n onMatch(index)\n return true\n }\n return false\n },\n [options, onMatch, timeout],\n )\n}\n\n/**\n * Subsequence match with a relevance score. `-1` means no match.\n *\n * Subsequence rather than substring because that is what users of a modern picker expect: typing\n * \"nds\" should find \"**N**ew **D**ata**s**ource\".\n */\nexport function scoreOption(query: string, option: SelectOption): number {\n if (query.trim() === '') return 0\n const q = query.toLowerCase()\n const haystacks = [option.label, option.keywords ?? '', option.description ?? '']\n\n let best = -1\n for (let h = 0; h < haystacks.length; h++) {\n const text = haystacks[h]!.toLowerCase()\n let queryIndex = 0\n let total = 0\n let run = 0\n\n for (let i = 0; i < text.length && queryIndex < q.length; i++) {\n if (text[i] === q[queryIndex]) {\n run++\n total += run * 2 + (i === 0 ? 8 : 0)\n queryIndex++\n } else {\n run = 0\n }\n }\n\n // Fields after the label are weaker signals; a label match should always outrank a keyword one.\n if (queryIndex === q.length) best = Math.max(best, total - h * 4)\n }\n return best\n}\n\n/** Filter and rank options against a query, preserving order when the query is empty. */\nexport function filterOptions(\n options: readonly SelectOption[],\n query: string,\n): readonly SelectOption[] {\n if (query.trim() === '') return options\n return options\n .map((option) => ({ option, score: scoreOption(query, option) }))\n .filter((entry) => entry.score >= 0)\n .sort((a, b) => b.score - a.score)\n .map((entry) => entry.option)\n}\n\nexport interface OptionListProps {\n options: readonly SelectOption[]\n active: number\n selected: readonly string[]\n listId: string\n multiple?: boolean\n emptyMessage?: ReactNode\n onSelect: (option: SelectOption) => void\n onActiveChange: (index: number) => void\n /** Highlight the matched characters. */\n query?: string\n}\n\n/** Render the option rows, with group headings emitted on change. */\nexport function OptionList({\n options,\n active,\n selected,\n listId,\n multiple = false,\n emptyMessage = 'No results',\n onSelect,\n onActiveChange,\n query,\n}: OptionListProps) {\n const selectedSet = useMemo(() => new Set(selected), [selected])\n\n if (options.length === 0) {\n return <div className=\"ansh-listbox__empty\">{emptyMessage}</div>\n }\n\n let lastGroup: string | undefined\n return (\n <>\n {options.map((option, index) => {\n const heading = option.group && option.group !== lastGroup ? option.group : null\n lastGroup = option.group\n const isSelected = selectedSet.has(option.value)\n\n return (\n <div key={option.value} role=\"presentation\">\n {heading ? (\n <div className=\"ansh-listbox__group\" role=\"presentation\">\n {heading}\n </div>\n ) : null}\n <div\n id={`${listId}-option-${index}`}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled || undefined}\n className={cx(\n 'ansh-listbox__option',\n index === active && 'ansh-listbox__option--active',\n isSelected && 'ansh-listbox__option--selected',\n option.disabled && 'ansh-listbox__option--disabled',\n )}\n // `onMouseDown` prevented: a mousedown on the list would blur the input/trigger and\n // close the popup before the click ever lands.\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => !option.disabled && onActiveChange(index)}\n onClick={() => !option.disabled && onSelect(option)}\n >\n {multiple ? (\n <span\n className={cx('ansh-listbox__check', isSelected && 'ansh-listbox__check--on')}\n aria-hidden=\"true\"\n >\n <svg viewBox=\"0 0 14 14\" width=\"10\" height=\"10\">\n <path\n d=\"M2.5 7.5l3 3 6-6.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n </span>\n ) : null}\n\n {option.icon ? <span className=\"ansh-listbox__icon\">{option.icon}</span> : null}\n\n <span className=\"ansh-listbox__text\">\n <span className=\"ansh-listbox__label\">\n {query ? <Highlight text={option.label} query={query} /> : option.label}\n </span>\n {option.description ? (\n <span className=\"ansh-listbox__description\">{option.description}</span>\n ) : null}\n </span>\n\n {!multiple && isSelected ? (\n <span className=\"ansh-listbox__tick\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 14 14\" width=\"12\" height=\"12\">\n <path\n d=\"M2.5 7.5l3 3 6-6.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n </svg>\n </span>\n ) : null}\n </div>\n </div>\n )\n })}\n </>\n )\n}\n\n/**\n * Mark the subsequence characters that matched.\n *\n * Uses `<mark>` rather than a styled span: it carries the semantic, so a screen reader in\n * verbose mode can convey the emphasis, and it needs no class to be meaningful.\n */\nfunction Highlight({ text, query }: { text: string; query: string }) {\n const q = query.toLowerCase()\n const lower = text.toLowerCase()\n\n const parts: ReactNode[] = []\n let queryIndex = 0\n let plain = ''\n\n for (let i = 0; i < text.length; i++) {\n if (queryIndex < q.length && lower[i] === q[queryIndex]) {\n if (plain) {\n parts.push(plain)\n plain = ''\n }\n parts.push(\n <mark key={i} className=\"ansh-listbox__mark\">\n {text[i]}\n </mark>,\n )\n queryIndex++\n } else {\n plain += text[i]\n }\n }\n if (plain) parts.push(plain)\n\n return <>{parts}</>\n}\n","import { type ReactNode, useCallback, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport { cx } from '../../primitives/compose'\nimport { Portal } from '../../primitives/portal'\nimport { useAnchoredPosition } from '../../primitives/use-anchored-position'\nimport { useControllableState } from '../../primitives/use-controllable-state'\nimport { useDismiss } from '../../primitives/use-dismiss'\nimport { useFieldControl } from './field'\nimport { type SelectOption, OptionList, firstEnabled, stepActive, useTypeahead } from './listbox'\n\nexport type { SelectOption }\n\nexport interface SelectProps {\n options: readonly SelectOption[]\n value?: string | null\n defaultValue?: string | null\n onChange?: (value: string | null) => void\n placeholder?: string\n disabled?: boolean\n invalid?: boolean\n size?: 'sm' | 'md' | 'lg'\n /** Show a clear button once something is selected. */\n clearable?: boolean\n /** Accessible name when there is no wrapping `Field`. */\n label?: string\n className?: string\n /** Emit a hidden input so the value posts in a native form submit. */\n name?: string\n /** Max height of the popup before it scrolls. Default `'18rem'`. */\n maxHeight?: string\n emptyMessage?: ReactNode\n}\n\n/**\n * A single-choice select.\n *\n * Follows the ARIA 1.2 collapsed-listbox pattern: the trigger is a `button` with\n * `aria-haspopup=\"listbox\"`, and while open, focus moves to the listbox with a virtual cursor\n * carried by `aria-activedescendant`.\n *\n * A custom select is only justified when the native one can't do the job — option descriptions,\n * icons, grouping with custom rendering. When a plain list of strings will do, `<select>` is still\n * better: it gets the platform's own picker on mobile, which no custom implementation matches.\n * This exists because CRM and admin screens genuinely need the richer version.\n */\nexport function Select({\n options,\n value,\n defaultValue = null,\n onChange,\n placeholder = 'Select…',\n disabled = false,\n invalid = false,\n size = 'md',\n clearable = false,\n label,\n className,\n name,\n maxHeight = '18rem',\n emptyMessage,\n}: SelectProps) {\n const fieldProps = useFieldControl()\n const [open, setOpen] = useState(false)\n const [current, setCurrent] = useControllableState<string | null>({\n value,\n defaultValue,\n onChange,\n })\n\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const listRef = useRef<HTMLDivElement | null>(null)\n const listId = useId()\n\n const selectedIndex = useMemo(\n () => options.findIndex((option) => option.value === current),\n [options, current],\n )\n const selected = selectedIndex >= 0 ? options[selectedIndex] : undefined\n\n const [active, setActive] = useState(0)\n\n const position = useAnchoredPosition(triggerRef, listRef, open, {\n placement: 'bottom-start',\n offset: 6,\n matchWidth: true,\n })\n\n useDismiss(listRef, open, () => setOpen(false), { ignore: [triggerRef] })\n\n const openList = useCallback(() => {\n if (disabled) return\n // Open with the cursor on the current selection, not at the top. Reopening a select and\n // finding the highlight back at item one is disorienting when the list is long.\n setActive(selectedIndex >= 0 ? selectedIndex : firstEnabled(options))\n setOpen(true)\n }, [disabled, selectedIndex, options])\n\n const commit = useCallback(\n (option: SelectOption) => {\n setCurrent(option.value)\n setOpen(false)\n triggerRef.current?.focus()\n },\n [setCurrent],\n )\n\n const typeahead = useTypeahead(options, (index) => {\n setActive(index)\n // Closed-list typeahead selects directly, matching `<select>`.\n if (!open) setCurrent(options[index]!.value)\n })\n\n /** Keys handled by the trigger, which only has focus while the list is closed. */\n const onTriggerKeyDown = (event: React.KeyboardEvent) => {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault()\n openList()\n return\n }\n if (typeahead(event.key)) event.preventDefault()\n }\n\n /** Keys handled by the listbox, which takes focus while open. */\n const onListKeyDown = (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n setActive((i) => stepActive(options, i, 1))\n break\n case 'ArrowUp':\n event.preventDefault()\n setActive((i) => stepActive(options, i, -1))\n break\n case 'Home':\n event.preventDefault()\n setActive(firstEnabled(options))\n break\n case 'End':\n event.preventDefault()\n setActive(stepActive(options, options.length, -1, false))\n break\n case 'Enter':\n case ' ': {\n event.preventDefault()\n const option = options[active]\n if (option && !option.disabled) commit(option)\n break\n }\n case 'Escape':\n event.preventDefault()\n setOpen(false)\n triggerRef.current?.focus()\n break\n case 'Tab':\n // Focus is inside a portal at the end of `<body>`, so a default Tab would jump somewhere\n // unrelated to the field. Close and hand focus back to the trigger instead, leaving the\n // user exactly where they were in the form's tab order.\n event.preventDefault()\n setOpen(false)\n triggerRef.current?.focus()\n break\n default:\n if (typeahead(event.key)) event.preventDefault()\n }\n }\n\n /**\n * Move focus into the listbox the moment it attaches.\n *\n * Focus has to be *on* the element carrying `aria-activedescendant` — that is what the attribute\n * means. Leaving focus on the trigger and pointing at an option from the list is a common\n * shortcut that screen readers ignore, producing a select that navigates in silence.\n *\n * Done with a callback ref rather than an effect. The listbox lives inside a `Portal`, whose\n * content mounts on its own schedule; an effect here can run while the portalled node does not\n * yet exist, leaving focus on `<body>`. A callback ref fires exactly when React attaches the\n * node, which is the only moment that is guaranteed to be correct.\n */\n const attachList = useCallback((node: HTMLDivElement | null) => {\n listRef.current = node\n node?.focus({ preventScroll: true })\n }, [])\n\n useEffect(() => {\n if (!open) return\n document.getElementById(`${listId}-option-${active}`)?.scrollIntoView?.({ block: 'nearest' })\n }, [active, listId, open])\n\n return (\n <div className={cx('ansh-select', `ansh-select--${size}`, className)}>\n <button\n ref={triggerRef}\n type=\"button\"\n className={cx(\n 'ansh-select__trigger',\n 'ansh-focusable',\n open && 'ansh-select__trigger--open',\n (invalid || fieldProps['aria-invalid']) && 'ansh-select__trigger--invalid',\n !selected && 'ansh-select__trigger--placeholder',\n )}\n disabled={disabled || fieldProps.disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? listId : undefined}\n {...(label ? { 'aria-label': label } : null)}\n {...fieldProps}\n onClick={() => (open ? setOpen(false) : openList())}\n onKeyDown={onTriggerKeyDown}\n >\n {selected?.icon ? <span className=\"ansh-select__icon\">{selected.icon}</span> : null}\n <span className=\"ansh-select__value\">{selected?.label ?? placeholder}</span>\n\n {clearable && selected && !disabled ? (\n // A `<span role=\"button\">` rather than a nested `<button>`: nesting interactive\n // elements is invalid HTML and browsers resolve it by dropping the inner one.\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Clear selection\"\n className=\"ansh-select__clear\"\n onClick={(event) => {\n event.stopPropagation()\n setCurrent(null)\n }}\n >\n <svg viewBox=\"0 0 16 16\" width=\"12\" height=\"12\" aria-hidden=\"true\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n </span>\n ) : null}\n\n <span className=\"ansh-select__arrow\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 12 12\" width=\"12\" height=\"12\">\n <path\n d=\"M3 4.5L6 7.5l3-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </button>\n\n {/* Posts the value in a plain HTML form. Without this the select is invisible to a\n non-JavaScript submit, which still matters for progressively enhanced forms. */}\n {name ? <input type=\"hidden\" name={name} value={current ?? ''} /> : null}\n\n {open ? (\n <Portal>\n <div\n ref={attachList}\n id={listId}\n role=\"listbox\"\n tabIndex={-1}\n aria-activedescendant={options[active] ? `${listId}-option-${active}` : undefined}\n {...(label ? { 'aria-label': label } : null)}\n className=\"ansh-listbox\"\n style={{ ...position.style, maxHeight }}\n data-side={position.side}\n onKeyDown={onListKeyDown}\n >\n <OptionList\n options={options}\n active={active}\n selected={current ? [current] : []}\n listId={listId}\n onSelect={commit}\n onActiveChange={setActive}\n {...(emptyMessage !== undefined ? { emptyMessage } : null)}\n />\n </div>\n </Portal>\n ) : null}\n </div>\n )\n}\n","import { type ReactNode, useCallback, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport { cx } from '../../primitives/compose'\nimport { Portal } from '../../primitives/portal'\nimport { useAnchoredPosition } from '../../primitives/use-anchored-position'\nimport { useControllableState } from '../../primitives/use-controllable-state'\nimport { useDismiss } from '../../primitives/use-dismiss'\nimport { useFieldControl } from './field'\nimport { type SelectOption, OptionList, filterOptions, firstEnabled, stepActive } from './listbox'\n\nexport interface ComboboxProps {\n options: readonly SelectOption[]\n /** Selected values. Single-select uses a one-element array. */\n value?: readonly string[]\n defaultValue?: readonly string[]\n onChange?: (value: readonly string[]) => void\n multiple?: boolean\n placeholder?: string\n disabled?: boolean\n invalid?: boolean\n size?: 'sm' | 'md' | 'lg'\n label?: string\n className?: string\n maxHeight?: string\n emptyMessage?: ReactNode\n /** Offer the typed text as a new option. Returns the created option's value. */\n onCreate?: (label: string) => string\n /** Text for the create row. Receives the current query. */\n createLabel?: (query: string) => string\n /** Override filtering entirely — for server-side search. */\n onSearch?: (query: string) => void\n /** Skip local filtering, e.g. when `onSearch` already returns filtered options. */\n filter?: boolean\n /** Cap on how many chips render before collapsing to \"+N\". Default `Infinity`. */\n maxVisibleChips?: number\n}\n\n/**\n * A searchable select, single or multiple.\n *\n * This is the ARIA 1.2 combobox pattern, and the distinguishing detail is that **focus never leaves\n * the input**. Arrow keys move a virtual cursor announced through `aria-activedescendant`, so the\n * user can keep typing to narrow the list while navigating it. Implementations that move DOM focus\n * into the list break that: the next keystroke goes to the list, not the query.\n *\n * ```tsx\n * <Combobox multiple options={owners} value={selected} onChange={setSelected} />\n * ```\n */\nexport function Combobox({\n options,\n value,\n defaultValue = [],\n onChange,\n multiple = false,\n placeholder = 'Search…',\n disabled = false,\n invalid = false,\n size = 'md',\n label,\n className,\n maxHeight = '18rem',\n emptyMessage,\n onCreate,\n createLabel = (query) => `Create “${query}”`,\n onSearch,\n filter = true,\n maxVisibleChips = Number.POSITIVE_INFINITY,\n}: ComboboxProps) {\n const fieldProps = useFieldControl()\n const [open, setOpen] = useState(false)\n const [query, setQuery] = useState('')\n const [active, setActive] = useState(0)\n\n const [selected, setSelected] = useControllableState<readonly string[]>({\n value,\n defaultValue,\n onChange,\n })\n\n const inputRef = useRef<HTMLInputElement | null>(null)\n const wrapRef = useRef<HTMLDivElement | null>(null)\n const listRef = useRef<HTMLDivElement | null>(null)\n const listId = useId()\n\n const visible = useMemo(\n () => (filter ? filterOptions(options, query) : options),\n [options, query, filter],\n )\n\n const byValue = useMemo(() => new Map(options.map((o) => [o.value, o])), [options])\n\n // The create row is appended as a real option so it participates in arrow navigation and in the\n // active-descendant announcements, rather than being a special case bolted on below the list.\n const canCreate =\n Boolean(onCreate) &&\n query.trim().length > 0 &&\n !options.some((option) => option.label.toLowerCase() === query.trim().toLowerCase())\n\n const CREATE_VALUE = '__au_create__'\n const rows: readonly SelectOption[] = useMemo(\n () =>\n canCreate ? [...visible, { value: CREATE_VALUE, label: createLabel(query.trim()) }] : visible,\n [visible, canCreate, createLabel, query],\n )\n\n const position = useAnchoredPosition(wrapRef, listRef, open, {\n placement: 'bottom-start',\n offset: 6,\n matchWidth: true,\n })\n\n useDismiss(listRef, open, () => setOpen(false), { ignore: [wrapRef] })\n\n // Reset the cursor whenever the result set changes, or it can point past the end.\n useEffect(() => setActive(firstEnabled(rows)), [rows])\n\n const toggle = useCallback(\n (option: SelectOption) => {\n let optionValue = option.value\n\n if (optionValue === CREATE_VALUE && onCreate) {\n optionValue = onCreate(query.trim())\n }\n\n if (multiple) {\n const next = selected.includes(optionValue)\n ? selected.filter((v) => v !== optionValue)\n : [...selected, optionValue]\n setSelected(next)\n // The query is cleared but the list stays open: picking several values in a row is the\n // whole reason someone chose the multi variant.\n setQuery('')\n inputRef.current?.focus()\n } else {\n setSelected([optionValue])\n setQuery('')\n setOpen(false)\n }\n },\n [multiple, onCreate, query, selected, setSelected],\n )\n\n const remove = useCallback(\n (optionValue: string) => setSelected(selected.filter((v) => v !== optionValue)),\n [selected, setSelected],\n )\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n if (!open) {\n setOpen(true)\n return\n }\n setActive((i) => stepActive(rows, i, 1))\n break\n case 'ArrowUp':\n event.preventDefault()\n if (!open) {\n setOpen(true)\n return\n }\n setActive((i) => stepActive(rows, i, -1))\n break\n case 'Home':\n if (!open) return\n event.preventDefault()\n setActive(firstEnabled(rows))\n break\n case 'End':\n if (!open) return\n event.preventDefault()\n setActive(stepActive(rows, rows.length, -1, false))\n break\n case 'Enter': {\n if (!open) return\n const option = rows[active]\n if (option && !option.disabled) {\n event.preventDefault()\n toggle(option)\n }\n break\n }\n case 'Escape':\n if (!open) return\n event.preventDefault()\n setOpen(false)\n break\n case 'Backspace':\n // Backspace on an empty query removes the last chip — the behaviour every tag input has\n // and the fastest way to undo a mis-click.\n if (multiple && query === '' && selected.length > 0) {\n remove(selected[selected.length - 1]!)\n }\n break\n }\n }\n\n useEffect(() => {\n if (!open) return\n document.getElementById(`${listId}-option-${active}`)?.scrollIntoView?.({ block: 'nearest' })\n }, [active, listId, open])\n\n const chips = multiple ? selected : []\n const overflow = Math.max(0, chips.length - maxVisibleChips)\n const shownChips = overflow > 0 ? chips.slice(0, maxVisibleChips) : chips\n\n // Single-select shows the chosen label as the input's text when not actively searching, which is\n // what makes it read as a select rather than an empty search box.\n const singleLabel = !multiple && selected[0] ? (byValue.get(selected[0])?.label ?? '') : ''\n const inputValue = open || multiple ? query : singleLabel\n\n return (\n <div className={cx('ansh-combobox', `ansh-combobox--${size}`, className)}>\n <div\n ref={wrapRef}\n className={cx(\n 'ansh-combobox__control',\n 'ansh-focusable-within',\n open && 'ansh-combobox__control--open',\n (invalid || fieldProps['aria-invalid']) && 'ansh-combobox__control--invalid',\n disabled && 'ansh-combobox__control--disabled',\n )}\n onMouseDown={(event) => {\n // Clicking the padding focuses the input, but a click on a chip's remove button must\n // still reach that button.\n if (event.target === event.currentTarget) {\n event.preventDefault()\n inputRef.current?.focus()\n setOpen(true)\n }\n }}\n >\n {shownChips.map((chipValue) => {\n const option = byValue.get(chipValue)\n return (\n <span key={chipValue} className=\"ansh-chip\">\n {option?.icon ? <span className=\"ansh-chip__icon\">{option.icon}</span> : null}\n <span className=\"ansh-chip__label\">{option?.label ?? chipValue}</span>\n <button\n type=\"button\"\n className=\"ansh-chip__remove\"\n aria-label={`Remove ${option?.label ?? chipValue}`}\n disabled={disabled}\n onClick={() => remove(chipValue)}\n >\n <svg viewBox=\"0 0 16 16\" width=\"10\" height=\"10\" aria-hidden=\"true\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n </span>\n )\n })}\n\n {overflow > 0 ? <span className=\"ansh-chip ansh-chip--count\">+{overflow}</span> : null}\n\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n className=\"ansh-combobox__input\"\n value={inputValue}\n placeholder={chips.length > 0 ? '' : placeholder}\n disabled={disabled || fieldProps.disabled}\n autoComplete=\"off\"\n spellCheck={false}\n aria-expanded={open}\n aria-controls={open ? listId : undefined}\n aria-autocomplete=\"list\"\n aria-activedescendant={open && rows[active] ? `${listId}-option-${active}` : undefined}\n {...(label ? { 'aria-label': label } : null)}\n {...fieldProps}\n onChange={(event) => {\n setQuery(event.target.value)\n setOpen(true)\n onSearch?.(event.target.value)\n }}\n onFocus={() => setOpen(true)}\n onKeyDown={onKeyDown}\n />\n\n <span className=\"ansh-select__arrow\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 12 12\" width=\"12\" height=\"12\">\n <path\n d=\"M3 4.5L6 7.5l3-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </div>\n\n {/* The count is announced when it changes, so a screen-reader user knows filtering is\n narrowing the list without having to arrow through it. */}\n <span className=\"ansh-visually-hidden\" aria-live=\"polite\">\n {open ? `${visible.length} result${visible.length === 1 ? '' : 's'} available` : ''}\n </span>\n\n {open ? (\n <Portal>\n <div\n ref={listRef}\n id={listId}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n {...(label ? { 'aria-label': label } : null)}\n className=\"ansh-listbox\"\n style={{ ...position.style, maxHeight }}\n data-side={position.side}\n >\n <OptionList\n options={rows}\n active={active}\n selected={selected}\n listId={listId}\n multiple={multiple}\n query={query}\n onSelect={toggle}\n onActiveChange={setActive}\n {...(emptyMessage !== undefined ? { emptyMessage } : null)}\n />\n </div>\n </Portal>\n ) : null}\n </div>\n )\n}\n","import { type ReactNode, useCallback, useId, useRef, useState } from 'react'\nimport { cx } from '../../primitives/compose'\nimport { useControllableState } from '../../primitives/use-controllable-state'\nimport { useFieldControl } from './field'\n\nexport interface SliderMark {\n value: number\n label?: ReactNode\n}\n\nexport interface SliderProps {\n value?: number\n defaultValue?: number\n onChange?: (value: number) => void\n /** Fired once on release — for the expensive work a live `onChange` shouldn't trigger. */\n onCommit?: (value: number) => void\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n /** Vertical sliders are for mixers and volume; default is horizontal. */\n orientation?: 'horizontal' | 'vertical'\n marks?: readonly SliderMark[]\n /** Show the value in a bubble above the thumb while dragging. */\n showValue?: boolean | 'always'\n /** Format the bubble and the screen-reader announcement. */\n formatValue?: (value: number) => string\n label?: string\n className?: string\n name?: string\n}\n\n/** Round to the nearest step, anchored at `min` so a min of 5 with step 10 gives 5, 15, 25. */\nfunction snap(value: number, min: number, max: number, step: number): number {\n if (step <= 0) return Math.min(Math.max(value, min), max)\n const stepped = Math.round((value - min) / step) * step + min\n // Re-rounded against the step's decimal count: 0.1 + 0.2 arithmetic otherwise yields values\n // like 0.30000000000000004 straight into the label.\n const decimals = String(step).includes('.') ? String(step).split('.')[1]!.length : 0\n return Number(Math.min(Math.max(stepped, min), max).toFixed(decimals))\n}\n\n/**\n * A single-value slider.\n *\n * The thumb is the focusable element and carries `role=\"slider\"` with the full value triple, so a\n * screen reader announces \"40, slider, minimum 0, maximum 100\". Dragging writes the position\n * straight to a CSS custom property and only commits to React state on release — a re-render per\n * pointer move is what makes hand-rolled sliders feel sticky.\n */\nexport function Slider({\n value,\n defaultValue = 0,\n onChange,\n onCommit,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n orientation = 'horizontal',\n marks,\n showValue = false,\n formatValue = String,\n label,\n className,\n name,\n}: SliderProps) {\n const fieldProps = useFieldControl()\n const [current, setCurrent] = useControllableState<number>({ value, defaultValue, onChange })\n const trackRef = useRef<HTMLDivElement | null>(null)\n const [dragging, setDragging] = useState(false)\n const id = useId()\n\n const percent = ((current - min) / (max - min)) * 100\n\n const valueFromPointer = useCallback(\n (event: PointerEvent | React.PointerEvent) => {\n const track = trackRef.current\n if (!track) return current\n const rect = track.getBoundingClientRect()\n const fraction =\n orientation === 'horizontal'\n ? (event.clientX - rect.left) / rect.width\n : // Inverted: in a vertical slider, up is more.\n 1 - (event.clientY - rect.top) / rect.height\n return snap(min + fraction * (max - min), min, max, step)\n },\n [current, min, max, step, orientation],\n )\n\n const onPointerDown = (event: React.PointerEvent) => {\n if (disabled) return\n event.preventDefault()\n ;(event.currentTarget as HTMLElement).setPointerCapture(event.pointerId)\n setDragging(true)\n\n // Jump to where the track was clicked, then continue dragging from there.\n let latest = valueFromPointer(event)\n setCurrent(latest)\n\n const onMove = (moveEvent: PointerEvent) => {\n latest = valueFromPointer(moveEvent)\n setCurrent(latest)\n }\n const onUp = () => {\n setDragging(false)\n onCommit?.(latest)\n window.removeEventListener('pointermove', onMove)\n window.removeEventListener('pointerup', onUp)\n window.removeEventListener('pointercancel', onUp)\n }\n\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', onUp)\n window.addEventListener('pointercancel', onUp)\n }\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return\n const large = (max - min) / 10\n let next: number | null = null\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = current + step\n break\n case 'ArrowLeft':\n case 'ArrowDown':\n next = current - step\n break\n case 'PageUp':\n next = current + large\n break\n case 'PageDown':\n next = current - large\n break\n case 'Home':\n next = min\n break\n case 'End':\n next = max\n break\n }\n\n if (next === null) return\n event.preventDefault()\n const snapped = snap(next, min, max, step)\n setCurrent(snapped)\n onCommit?.(snapped)\n }\n\n return (\n <div\n className={cx(\n 'ansh-slider',\n `ansh-slider--${orientation}`,\n disabled && 'ansh-slider--disabled',\n dragging && 'ansh-slider--dragging',\n className,\n )}\n style={{ ['--ansh-slider-percent' as string]: `${percent}%` }}\n >\n <div ref={trackRef} className=\"ansh-slider__track\" onPointerDown={onPointerDown}>\n <div className=\"ansh-slider__fill\" />\n\n {marks?.map((mark) => {\n const markPercent = ((mark.value - min) / (max - min)) * 100\n return (\n <span\n key={mark.value}\n className={cx(\n 'ansh-slider__mark',\n current >= mark.value && 'ansh-slider__mark--passed',\n )}\n style={{ ['--ansh-mark' as string]: `${markPercent}%` }}\n >\n {mark.label ? <span className=\"ansh-slider__mark-label\">{mark.label}</span> : null}\n </span>\n )\n })}\n\n <div\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n className=\"ansh-slider__thumb ansh-focusable\"\n aria-valuenow={current}\n aria-valuemin={min}\n aria-valuemax={max}\n // The formatted string, when it differs from the raw number. A slider showing \"£1,200\"\n // should not be announced as \"1200\".\n {...(formatValue(current) !== String(current)\n ? { 'aria-valuetext': formatValue(current) }\n : null)}\n aria-orientation={orientation}\n aria-disabled={disabled || undefined}\n {...(label ? { 'aria-label': label } : null)}\n {...(fieldProps.id ? { 'aria-labelledby': undefined, id: fieldProps.id } : null)}\n {...(fieldProps['aria-describedby']\n ? { 'aria-describedby': fieldProps['aria-describedby'] }\n : null)}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n >\n {showValue === 'always' || (showValue && dragging) ? (\n <span className=\"ansh-slider__bubble\" aria-hidden=\"true\">\n {formatValue(current)}\n </span>\n ) : null}\n </div>\n </div>\n\n {name ? <input type=\"hidden\" name={name} value={current} id={`${id}-hidden`} /> : null}\n </div>\n )\n}\n\nexport interface RangeSliderProps extends Omit<\n SliderProps,\n 'value' | 'defaultValue' | 'onChange' | 'onCommit' | 'name'\n> {\n value?: readonly [number, number]\n defaultValue?: readonly [number, number]\n onChange?: (value: readonly [number, number]) => void\n onCommit?: (value: readonly [number, number]) => void\n /** Smallest allowed gap between the two thumbs. Default `0`. */\n minDistance?: number\n}\n\n/**\n * A two-thumb range slider — price filters, date windows, numeric facets.\n *\n * The thumbs are allowed to pass each other, swapping roles when they do. Blocking the crossing is\n * the more common implementation and it is worse: a user dragging the lower thumb to the right\n * hits an invisible wall and has to work out that they need to grab the other one instead.\n */\nexport function RangeSlider({\n value,\n defaultValue = [0, 100],\n onChange,\n onCommit,\n min = 0,\n max = 100,\n step = 1,\n minDistance = 0,\n disabled = false,\n marks,\n showValue = false,\n formatValue = String,\n label,\n className,\n}: RangeSliderProps) {\n const [range, setRange] = useControllableState<readonly [number, number]>({\n value,\n defaultValue,\n onChange,\n })\n const trackRef = useRef<HTMLDivElement | null>(null)\n const [dragging, setDragging] = useState<0 | 1 | null>(null)\n\n const [low, high] = range\n const lowPercent = ((low - min) / (max - min)) * 100\n const highPercent = ((high - min) / (max - min)) * 100\n\n const valueFromPointer = (event: PointerEvent | React.PointerEvent) => {\n const track = trackRef.current\n if (!track) return low\n const rect = track.getBoundingClientRect()\n return snap(min + ((event.clientX - rect.left) / rect.width) * (max - min), min, max, step)\n }\n\n const apply = (thumb: 0 | 1, next: number): readonly [number, number] => {\n if (thumb === 0) {\n return next > high - minDistance ? [high - minDistance, high] : [next, high]\n }\n return next < low + minDistance ? [low, low + minDistance] : [low, next]\n }\n\n const startDrag = (thumb: 0 | 1) => (event: React.PointerEvent) => {\n if (disabled) return\n event.preventDefault()\n ;(event.currentTarget as HTMLElement).setPointerCapture(event.pointerId)\n setDragging(thumb)\n\n let latest = range\n const onMove = (moveEvent: PointerEvent) => {\n latest = apply(thumb, valueFromPointer(moveEvent))\n setRange(latest)\n }\n const onUp = () => {\n setDragging(null)\n onCommit?.(latest)\n window.removeEventListener('pointermove', onMove)\n window.removeEventListener('pointerup', onUp)\n }\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', onUp)\n }\n\n const keyHandler = (thumb: 0 | 1) => (event: React.KeyboardEvent) => {\n if (disabled) return\n const currentValue = range[thumb]\n const large = (max - min) / 10\n let next: number | null = null\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = currentValue + step\n break\n case 'ArrowLeft':\n case 'ArrowDown':\n next = currentValue - step\n break\n case 'PageUp':\n next = currentValue + large\n break\n case 'PageDown':\n next = currentValue - large\n break\n case 'Home':\n next = min\n break\n case 'End':\n next = max\n break\n }\n if (next === null) return\n event.preventDefault()\n const applied = apply(thumb, snap(next, min, max, step))\n setRange(applied)\n onCommit?.(applied)\n }\n\n const thumb = (index: 0 | 1, thumbLabel: string) => (\n <div\n key={index}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n className=\"ansh-slider__thumb ansh-focusable\"\n style={{ ['--ansh-thumb' as string]: `${index === 0 ? lowPercent : highPercent}%` }}\n aria-label={label ? `${label} ${thumbLabel}` : thumbLabel}\n aria-valuenow={range[index]}\n // Each thumb's range is bounded by the other, so the announced limits match what the\n // control will actually accept.\n aria-valuemin={index === 0 ? min : low + minDistance}\n aria-valuemax={index === 0 ? high - minDistance : max}\n {...(formatValue(range[index]) !== String(range[index])\n ? { 'aria-valuetext': formatValue(range[index]) }\n : null)}\n aria-disabled={disabled || undefined}\n onPointerDown={startDrag(index)}\n onKeyDown={keyHandler(index)}\n >\n {showValue === 'always' || (showValue && dragging === index) ? (\n <span className=\"ansh-slider__bubble\" aria-hidden=\"true\">\n {formatValue(range[index])}\n </span>\n ) : null}\n </div>\n )\n\n return (\n <div\n className={cx(\n 'ansh-slider',\n 'ansh-slider--horizontal',\n 'ansh-slider--range',\n disabled && 'ansh-slider--disabled',\n className,\n )}\n style={{\n ['--ansh-range-start' as string]: `${lowPercent}%`,\n ['--ansh-range-end' as string]: `${highPercent}%`,\n }}\n >\n <div ref={trackRef} className=\"ansh-slider__track\">\n <div className=\"ansh-slider__fill ansh-slider__fill--range\" />\n {marks?.map((mark) => (\n <span\n key={mark.value}\n className={cx(\n 'ansh-slider__mark',\n mark.value >= low && mark.value <= high && 'ansh-slider__mark--passed',\n )}\n style={{ ['--ansh-mark' as string]: `${((mark.value - min) / (max - min)) * 100}%` }}\n >\n {mark.label ? <span className=\"ansh-slider__mark-label\">{mark.label}</span> : null}\n </span>\n ))}\n {thumb(0, 'minimum')}\n {thumb(1, 'maximum')}\n </div>\n </div>\n )\n}\n","import { useEffect, useId, useRef } from 'react'\nimport { cx } from '../../primitives/compose'\nimport { useControllableState } from '../../primitives/use-controllable-state'\n\nexport interface PinInputProps {\n /** Number of cells. Default `6`. */\n length?: number\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n /** Fired when every cell is filled — wire the verification call here. */\n onComplete?: (value: string) => void\n /** Restrict input. Default `'numeric'`. */\n type?: 'numeric' | 'alphanumeric'\n /** Render as password dots. */\n mask?: boolean\n disabled?: boolean\n invalid?: boolean\n autoFocus?: boolean\n label?: string\n className?: string\n}\n\n/**\n * A one-time-code input.\n *\n * The details that make or break this component are all about paste and autofill:\n *\n * - `autoComplete=\"one-time-code\"` on the first cell is what triggers iOS and Android to offer the\n * code from the SMS. Without it users retype a six-digit code by hand.\n * - Pasting into any cell distributes across all of them. Users paste from their SMS app\n * constantly, and a per-cell input that only accepts the first character is infuriating.\n * - Backspace on an empty cell moves back *and* clears, so holding it wipes the field.\n *\n * A single input styled to look segmented would be simpler, but the caret cannot be positioned per\n * segment and mobile keyboards behave inconsistently with it.\n */\nexport function PinInput({\n length = 6,\n value,\n defaultValue = '',\n onChange,\n onComplete,\n type = 'numeric',\n mask = false,\n disabled = false,\n invalid = false,\n autoFocus = false,\n label = 'Verification code',\n className,\n}: PinInputProps) {\n const [code, setCode] = useControllableState<string>({ value, defaultValue, onChange })\n const inputsRef = useRef<Array<HTMLInputElement | null>>([])\n const id = useId()\n\n const pattern = type === 'numeric' ? /[^0-9]/g : /[^a-zA-Z0-9]/g\n\n const completedRef = useRef(false)\n useEffect(() => {\n if (code.length === length && !completedRef.current) {\n completedRef.current = true\n onComplete?.(code)\n } else if (code.length < length) {\n // Reset the latch so correcting a digit and refilling fires `onComplete` again.\n completedRef.current = false\n }\n }, [code, length, onComplete])\n\n const setCharAt = (index: number, char: string) => {\n const chars = code.padEnd(length, ' ').split('')\n chars[index] = char\n setCode(chars.join('').trimEnd())\n }\n\n const focusCell = (index: number) => {\n const target = inputsRef.current[Math.min(Math.max(index, 0), length - 1)]\n target?.focus()\n target?.select()\n }\n\n const onCellChange = (index: number, raw: string) => {\n const cleaned = raw.replace(pattern, '')\n if (cleaned === '') {\n setCharAt(index, ' ')\n return\n }\n\n // More than one character means a paste (or a fast typist on a soft keyboard) — spread it.\n if (cleaned.length > 1) {\n const chars = code.padEnd(length, ' ').split('')\n for (let i = 0; i < cleaned.length && index + i < length; i++) {\n chars[index + i] = cleaned[i]!\n }\n setCode(chars.join('').trimEnd())\n focusCell(index + cleaned.length)\n return\n }\n\n setCharAt(index, cleaned)\n focusCell(index + 1)\n }\n\n const onKeyDown = (index: number) => (event: React.KeyboardEvent<HTMLInputElement>) => {\n switch (event.key) {\n case 'Backspace': {\n event.preventDefault()\n if ((code[index] ?? ' ').trim() === '') {\n // Empty cell: step back and clear that one instead, so holding Backspace empties the\n // field rather than stalling.\n setCharAt(index - 1, ' ')\n focusCell(index - 1)\n } else {\n setCharAt(index, ' ')\n }\n break\n }\n case 'Delete':\n event.preventDefault()\n setCharAt(index, ' ')\n break\n case 'ArrowLeft':\n event.preventDefault()\n focusCell(index - 1)\n break\n case 'ArrowRight':\n event.preventDefault()\n focusCell(index + 1)\n break\n case 'Home':\n event.preventDefault()\n focusCell(0)\n break\n case 'End':\n event.preventDefault()\n focusCell(length - 1)\n break\n }\n }\n\n return (\n <div\n className={cx(\n 'ansh-pin',\n invalid && 'ansh-pin--invalid',\n disabled && 'ansh-pin--disabled',\n className,\n )}\n role=\"group\"\n aria-label={label}\n // The group is described by the live region below, so progress is announced without each\n // cell interrupting with \"1 of 6, edit text\".\n aria-describedby={`${id}-status`}\n >\n {Array.from({ length }, (_, index) => (\n <input\n key={index}\n ref={(node) => {\n inputsRef.current[index] = node\n }}\n className=\"ansh-pin__cell ansh-focusable\"\n type={mask ? 'password' : 'text'}\n inputMode={type === 'numeric' ? 'numeric' : 'text'}\n // Only the first cell advertises one-time-code; on the others it makes the platform\n // offer to fill a single character, which is nonsense.\n autoComplete={index === 0 ? 'one-time-code' : 'off'}\n autoFocus={autoFocus && index === 0}\n maxLength={length}\n disabled={disabled}\n aria-label={`Digit ${index + 1} of ${length}`}\n aria-invalid={invalid || undefined}\n value={(code[index] ?? '').trim()}\n onChange={(event) => onCellChange(index, event.target.value)}\n onKeyDown={onKeyDown(index)}\n onFocus={(event) => event.target.select()}\n />\n ))}\n\n <span className=\"ansh-visually-hidden\" id={`${id}-status`} aria-live=\"polite\">\n {code.trim().length === length\n ? 'Code complete'\n : `${code.trim().length} of ${length} digits entered`}\n </span>\n </div>\n )\n}\n","import { type KeyboardEvent, useRef, useState } from 'react'\nimport { cx } from '../../primitives/compose'\nimport { useControllableState } from '../../primitives/use-controllable-state'\nimport { useFieldControl } from './field'\n\nexport interface TagsInputProps {\n value?: readonly string[]\n defaultValue?: readonly string[]\n onChange?: (value: readonly string[]) => void\n placeholder?: string\n /** Maximum number of tags. The input hides once reached. */\n max?: number\n /** Keys that commit the current text. Default Enter, Tab and comma. */\n delimiters?: readonly string[]\n /** Reject a value — return an error string, or `null` to accept. */\n validate?: (value: string) => string | null\n /** Fold duplicates silently instead of flagging them. Default `true`. */\n dedupe?: boolean\n disabled?: boolean\n invalid?: boolean\n label?: string\n className?: string\n}\n\n/**\n * Free-text tags — recipients, labels, keywords.\n *\n * Distinct from a multi-`Combobox`: there is no option list, any text is valid. The two are often\n * conflated, and the giveaway is a \"tags\" component that forces you to pick from a list.\n *\n * Each tag is a real button so it can be reached with Tab and removed with Enter. Removing a tag\n * moves focus to the next one rather than to the document, which is what stops keyboard users\n * losing their place after deleting three in a row.\n */\nexport function TagsInput({\n value,\n defaultValue = [],\n onChange,\n placeholder = 'Add and press Enter',\n max = Number.POSITIVE_INFINITY,\n delimiters = ['Enter', 'Tab', ','],\n validate,\n dedupe = true,\n disabled = false,\n invalid = false,\n label = 'Tags',\n className,\n}: TagsInputProps) {\n const fieldProps = useFieldControl()\n const [tags, setTags] = useControllableState<readonly string[]>({\n value,\n defaultValue,\n onChange,\n })\n const [draft, setDraft] = useState('')\n const [error, setError] = useState<string | null>(null)\n\n const inputRef = useRef<HTMLInputElement | null>(null)\n const tagRefs = useRef<Array<HTMLButtonElement | null>>([])\n\n const commit = (raw: string): boolean => {\n const text = raw.trim()\n if (text === '') return false\n\n if (tags.length >= max) {\n setError(`Up to ${max} allowed`)\n return false\n }\n if (dedupe && tags.includes(text)) {\n // Duplicates are folded silently — pasting a list with a repeat should not read as an error.\n setDraft('')\n return true\n }\n const failure = validate?.(text)\n if (failure) {\n setError(failure)\n return false\n }\n\n setTags([...tags, text])\n setDraft('')\n setError(null)\n return true\n }\n\n const removeAt = (index: number) => {\n setTags(tags.filter((_, i) => i !== index))\n setError(null)\n // Focus the tag that slid into this position, or the input if it was the last one.\n queueMicrotask(() => {\n const next = tagRefs.current[index] ?? tagRefs.current[index - 1]\n if (next?.isConnected) next.focus()\n else inputRef.current?.focus()\n })\n }\n\n const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n // Tab only commits when there's something to commit; otherwise it must move focus, or the\n // field becomes a keyboard trap.\n if (event.key === 'Tab' && draft.trim() === '') return\n\n if (delimiters.includes(event.key)) {\n event.preventDefault()\n commit(draft)\n return\n }\n\n if (event.key === 'Backspace' && draft === '' && tags.length > 0) {\n event.preventDefault()\n removeAt(tags.length - 1)\n }\n }\n\n const atLimit = tags.length >= max\n\n return (\n <div className={cx('ansh-tags', className)}>\n <div\n className={cx(\n 'ansh-tags__control',\n 'ansh-focusable-within',\n (invalid || error) && 'ansh-tags__control--invalid',\n disabled && 'ansh-tags__control--disabled',\n )}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) {\n event.preventDefault()\n inputRef.current?.focus()\n }\n }}\n >\n {/*\n Labelled distinctly from the input. Giving both the same `aria-label` produces two\n different elements with the same accessible name, which makes them indistinguishable in a\n screen reader's element list — and ambiguous to every testing query.\n */}\n <ul className=\"ansh-tags__list\" aria-label={`${label}: selected`}>\n {tags.map((tag, index) => (\n <li key={`${tag}-${index}`} className=\"ansh-chip\">\n <span className=\"ansh-chip__label\">{tag}</span>\n <button\n ref={(node) => {\n tagRefs.current[index] = node\n }}\n type=\"button\"\n className=\"ansh-chip__remove\"\n aria-label={`Remove ${tag}`}\n disabled={disabled}\n onClick={() => removeAt(index)}\n >\n <svg viewBox=\"0 0 16 16\" width=\"10\" height=\"10\" aria-hidden=\"true\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n </li>\n ))}\n </ul>\n\n {!atLimit ? (\n <input\n ref={inputRef}\n type=\"text\"\n className=\"ansh-tags__input\"\n value={draft}\n placeholder={tags.length === 0 ? placeholder : ''}\n disabled={disabled}\n aria-label={label}\n aria-invalid={invalid || Boolean(error) || undefined}\n {...fieldProps}\n onChange={(event) => {\n setDraft(event.target.value)\n setError(null)\n }}\n onKeyDown={onKeyDown}\n // Committing on blur stops the most common data-loss complaint: typing a tag, clicking\n // Save, and finding it was never added.\n onBlur={() => commit(draft)}\n onPaste={(event) => {\n const text = event.clipboardData.getData('text')\n if (!/[,\\n\\t]/.test(text)) return\n event.preventDefault()\n for (const part of text.split(/[,\\n\\t]+/)) commit(part)\n }}\n />\n ) : null}\n </div>\n\n {error ? (\n <p className=\"ansh-field__error\" role=\"alert\">\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n","import { type ReactNode, useId, useState } from 'react'\nimport { cx } from '../../primitives/compose'\nimport { useControllableState } from '../../primitives/use-controllable-state'\n\nexport interface RatingProps {\n value?: number\n defaultValue?: number\n onChange?: (value: number) => void\n /** Number of symbols. Default `5`. */\n max?: number\n /** Allow halves. Default `false`. */\n allowHalf?: boolean\n /** Display only — no interaction, no focus. */\n readOnly?: boolean\n disabled?: boolean\n size?: 'sm' | 'md' | 'lg'\n /** Custom symbol. Defaults to a star. */\n icon?: ReactNode\n label?: string\n className?: string\n name?: string\n}\n\n/**\n * A star rating.\n *\n * Interactive ratings are a **radio group**, not a set of buttons: exactly one of N is chosen, which\n * is what a radio group means, and it gets arrow-key navigation and correct announcements for free.\n * Read-only ratings are `role=\"img\"` with a text label instead — \"4.2 out of 5\" is the entire\n * content, and exposing five separate radios that can't be changed is noise.\n */\nexport function Rating({\n value,\n defaultValue = 0,\n onChange,\n max = 5,\n allowHalf = false,\n readOnly = false,\n disabled = false,\n size = 'md',\n icon,\n label = 'Rating',\n className,\n name,\n}: RatingProps) {\n const [current, setCurrent] = useControllableState<number>({ value, defaultValue, onChange })\n const [preview, setPreview] = useState<number | null>(null)\n const groupName = useId()\n\n const shown = preview ?? current\n\n const symbol = icon ?? (\n <svg viewBox=\"0 0 20 20\" className=\"ansh-rating__glyph\" aria-hidden=\"true\">\n <path\n d=\"M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8-5.2-2.7-5.2 2.7 1-5.8L1.6 7.7l5.8-.8z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n\n if (readOnly) {\n return (\n <span\n className={cx('ansh-rating', `ansh-rating--${size}`, 'ansh-rating--readonly', className)}\n role=\"img\"\n aria-label={`${current} out of ${max}`}\n >\n {Array.from({ length: max }, (_, index) => (\n <span\n key={index}\n className=\"ansh-rating__item\"\n // A percentage per symbol, so 4.2 fills the fifth star 20% of the way rather than\n // rounding to a whole star and misreporting the value.\n style={{\n ['--ansh-fill' as string]: `${Math.min(Math.max(current - index, 0), 1) * 100}%`,\n }}\n >\n {symbol}\n </span>\n ))}\n </span>\n )\n }\n\n const steps = allowHalf ? max * 2 : max\n\n return (\n <span\n role=\"radiogroup\"\n aria-label={label}\n className={cx(\n 'ansh-rating',\n `ansh-rating--${size}`,\n disabled && 'ansh-rating--disabled',\n className,\n )}\n onMouseLeave={() => setPreview(null)}\n >\n {Array.from({ length: steps }, (_, step) => {\n const stepValue = allowHalf ? (step + 1) / 2 : step + 1\n const index = Math.ceil(stepValue) - 1\n const isHalf = allowHalf && stepValue % 1 !== 0\n\n return (\n <label\n key={stepValue}\n className={cx('ansh-rating__hit', isHalf && 'ansh-rating__hit--half')}\n onMouseEnter={() => !disabled && setPreview(stepValue)}\n >\n <input\n type=\"radio\"\n className=\"ansh-visually-hidden\"\n name={name ?? groupName}\n value={stepValue}\n checked={current === stepValue}\n disabled={disabled}\n aria-label={`${stepValue} ${stepValue === 1 ? 'star' : 'stars'}`}\n onChange={() => setCurrent(stepValue)}\n />\n {/* Only whole steps draw a symbol; the half-step label is an invisible hit area\n layered over the left side of the one that follows it. */}\n {!isHalf ? (\n <span\n className=\"ansh-rating__item\"\n style={{\n ['--ansh-fill' as string]: `${Math.min(Math.max(shown - index, 0), 1) * 100}%`,\n }}\n >\n {symbol}\n </span>\n ) : null}\n </label>\n )\n })}\n </span>\n )\n}\n","import { type ReactNode, useCallback, useId, useRef, useState } from 'react'\nimport { cx } from '../../primitives/compose'\n\nexport interface DropzoneFile {\n file: File\n id: string\n /** Object URL for image previews. Revoked automatically on removal. */\n preview?: string\n error?: string\n}\n\nexport interface DropzoneProps {\n onFiles?: (files: readonly DropzoneFile[]) => void\n /** `accept` attribute, e.g. `'image/*,.pdf'`. */\n accept?: string\n multiple?: boolean\n /** Per-file size cap, in bytes. */\n maxSize?: number\n /** Maximum number of files. */\n maxFiles?: number\n disabled?: boolean\n /** Show thumbnails for images. Default `true`. */\n previews?: boolean\n label?: ReactNode\n hint?: ReactNode\n className?: string\n children?: ReactNode\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n const units = ['KB', 'MB', 'GB']\n let size = bytes / 1024\n let unit = 0\n while (size >= 1024 && unit < units.length - 1) {\n size /= 1024\n unit++\n }\n return `${size.toFixed(size >= 10 ? 0 : 1)} ${units[unit]}`\n}\n\n/**\n * A file dropzone with previews and validation.\n *\n * Two things distinguish a working dropzone from a broken one:\n *\n * 1. **Drag counting.** `dragleave` fires when the pointer crosses onto a *child* element, so the\n * naive implementation flickers the highlight constantly while you move across it. A depth\n * counter incremented on enter and decremented on leave fixes it.\n * 2. **A real `<input type=\"file\">` underneath.** Drag-and-drop is unusable with a keyboard, a\n * screen reader, or on a phone. The input is the actual control; the drop surface is an\n * enhancement layered on top.\n *\n * Object URLs are revoked when a file is removed. Skipping that leaks the entire file into memory\n * for the page's lifetime, which is invisible in testing and obvious after a user uploads forty\n * photos.\n */\nexport function Dropzone({\n onFiles,\n accept,\n multiple = false,\n maxSize,\n maxFiles = Number.POSITIVE_INFINITY,\n disabled = false,\n previews = true,\n label = 'Drop files here, or browse',\n hint,\n className,\n children,\n}: DropzoneProps) {\n const [files, setFiles] = useState<readonly DropzoneFile[]>([])\n const [dragging, setDragging] = useState(false)\n const depthRef = useRef(0)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const id = useId()\n\n const validate = useCallback(\n (file: File): string | undefined => {\n if (maxSize !== undefined && file.size > maxSize) {\n return `Larger than ${formatBytes(maxSize)}`\n }\n if (accept) {\n const patterns = accept.split(',').map((part) => part.trim().toLowerCase())\n const name = file.name.toLowerCase()\n const type = file.type.toLowerCase()\n const ok = patterns.some((pattern) => {\n if (pattern.startsWith('.')) return name.endsWith(pattern)\n if (pattern.endsWith('/*')) return type.startsWith(pattern.slice(0, -1))\n return type === pattern\n })\n if (!ok) return 'Unsupported file type'\n }\n return undefined\n },\n [accept, maxSize],\n )\n\n const add = useCallback(\n (incoming: FileList | null) => {\n if (!incoming || disabled) return\n\n const accepted: DropzoneFile[] = []\n const room = maxFiles - files.length\n\n for (const file of Array.from(incoming).slice(0, multiple ? room : 1)) {\n const error = validate(file)\n accepted.push({\n file,\n id: `${file.name}-${file.size}-${file.lastModified}`,\n ...(previews && file.type.startsWith('image/') && !error\n ? { preview: URL.createObjectURL(file) }\n : null),\n ...(error ? { error } : null),\n })\n }\n\n const next = multiple ? [...files, ...accepted] : accepted\n // Replacing in single mode discards the previous preview, so revoke it here rather than\n // leaving it to the removal path that will never run.\n if (!multiple)\n for (const previous of files) {\n if (previous.preview) URL.revokeObjectURL(previous.preview)\n }\n\n setFiles(next)\n onFiles?.(next)\n },\n [disabled, files, maxFiles, multiple, onFiles, previews, validate],\n )\n\n const remove = (fileId: string) => {\n const target = files.find((entry) => entry.id === fileId)\n if (target?.preview) URL.revokeObjectURL(target.preview)\n const next = files.filter((entry) => entry.id !== fileId)\n setFiles(next)\n onFiles?.(next)\n // Clearing the input's value allows re-selecting the same file; browsers suppress `change`\n // when the value is unchanged, so removing and re-adding one file would otherwise do nothing.\n if (inputRef.current) inputRef.current.value = ''\n }\n\n const rejected = files.filter((entry) => entry.error)\n\n return (\n <div className={cx('ansh-dropzone-wrap', className)}>\n <div\n className={cx(\n 'ansh-dropzone',\n dragging && 'ansh-dropzone--active',\n disabled && 'ansh-dropzone--disabled',\n )}\n onDragEnter={(event) => {\n event.preventDefault()\n depthRef.current++\n if (!disabled) setDragging(true)\n }}\n onDragOver={(event) => {\n // Required: without preventing the default the browser navigates to the dropped file.\n event.preventDefault()\n event.dataTransfer.dropEffect = disabled ? 'none' : 'copy'\n }}\n onDragLeave={(event) => {\n event.preventDefault()\n depthRef.current--\n if (depthRef.current <= 0) {\n depthRef.current = 0\n setDragging(false)\n }\n }}\n onDrop={(event) => {\n event.preventDefault()\n depthRef.current = 0\n setDragging(false)\n add(event.dataTransfer.files)\n }}\n >\n <input\n ref={inputRef}\n id={id}\n type=\"file\"\n className=\"ansh-dropzone__input\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(event) => add(event.target.files)}\n />\n\n <label htmlFor={id} className=\"ansh-dropzone__label\">\n <span className=\"ansh-dropzone__icon\" aria-hidden=\"true\">\n <svg\n viewBox=\"0 0 24 24\"\n width=\"28\"\n height=\"28\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n >\n <path d=\"M12 16V4m0 0L8 8m4-4l4 4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M3 15v3a3 3 0 003 3h12a3 3 0 003-3v-3\" strokeLinecap=\"round\" />\n </svg>\n </span>\n <span className=\"ansh-dropzone__text\">{label}</span>\n {hint ? <span className=\"ansh-dropzone__hint\">{hint}</span> : null}\n </label>\n\n {children}\n </div>\n\n {files.length > 0 ? (\n <ul className=\"ansh-dropzone__files\">\n {files.map((entry) => (\n <li\n key={entry.id}\n className={cx('ansh-dropzone__file', entry.error && 'ansh-dropzone__file--error')}\n >\n {entry.preview ? (\n // Decorative: the file name beside it is the accessible content.\n <img src={entry.preview} alt=\"\" className=\"ansh-dropzone__thumb\" />\n ) : (\n <span\n className=\"ansh-dropzone__thumb ansh-dropzone__thumb--generic\"\n aria-hidden=\"true\"\n >\n {entry.file.name.split('.').pop()?.slice(0, 4).toUpperCase()}\n </span>\n )}\n\n <span className=\"ansh-dropzone__meta\">\n <span className=\"ansh-dropzone__name\">{entry.file.name}</span>\n <span className=\"ansh-dropzone__size\">\n {entry.error ?? formatBytes(entry.file.size)}\n </span>\n </span>\n\n <button\n type=\"button\"\n className=\"ansh-dropzone__remove ansh-focusable\"\n aria-label={`Remove ${entry.file.name}`}\n onClick={() => remove(entry.id)}\n >\n <svg viewBox=\"0 0 16 16\" width=\"12\" height=\"12\" aria-hidden=\"true\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n </li>\n ))}\n </ul>\n ) : null}\n\n {/* Rejections are announced. A file silently missing from the list after a drop is the\n single most confusing failure mode this component has. */}\n <span className=\"ansh-visually-hidden\" role=\"status\" aria-live=\"polite\">\n {rejected.length > 0\n ? `${rejected.length} file${rejected.length === 1 ? '' : 's'} rejected`\n : files.length > 0\n ? `${files.length} file${files.length === 1 ? '' : 's'} ready`\n : ''}\n </span>\n </div>\n )\n}\n","import { useCallback, useId, useMemo, useRef, useState } from 'react'\nimport {\n type Hsv,\n contrastRatio,\n hsvToRgb,\n parseColor,\n rgbToHsv,\n toHex,\n toOklchString,\n tryParseColor,\n} from '@ansh-ui/core'\nimport { cx } from '../../primitives/compose'\nimport { Portal } from '../../primitives/portal'\nimport { useAnchoredPosition } from '../../primitives/use-anchored-position'\nimport { useControllableState } from '../../primitives/use-controllable-state'\nimport { useDismiss } from '../../primitives/use-dismiss'\n\nexport interface ColorPickerProps {\n /** Any CSS colour — hex, rgb, hsl, oklch, or a named colour. */\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n /** Output format. Default `'hex'`. */\n format?: 'hex' | 'rgb' | 'hsl' | 'oklch'\n /** Show the alpha slider. Default `false`. */\n alpha?: boolean\n /** Swatches shown under the picker. */\n presets?: readonly string[]\n /** Report the contrast ratio against this colour, live. */\n contrastAgainst?: string\n disabled?: boolean\n label?: string\n className?: string\n}\n\n/**\n * A colour picker built on the engine's colour system.\n *\n * The saturation/value plane, hue rail and alpha rail are the conventional layout. What's less\n * conventional, and the reason this is worth shipping over a generic picker:\n *\n * - **It speaks every format the engine does.** Paste `oklch(62% 0.2 264)` into the text field and\n * it parses. Most pickers accept hex and nothing else.\n * - **It can report contrast live.** On a theme editor — which is what colour pickers in admin\n * tools are usually for — picking a brand colour without seeing that it fails WCAG against your\n * background is how inaccessible products get built one reasonable decision at a time.\n *\n * State is held as HSV, not as the output string. Round-tripping through hex on every pointer move\n * loses information: dragging into the black corner would discard the hue, so releasing and\n * dragging back out returns red instead of the colour you started from.\n */\nexport function ColorPicker({\n value,\n defaultValue = '#0275f4',\n onChange,\n format = 'hex',\n alpha = false,\n presets,\n contrastAgainst,\n disabled = false,\n label = 'Colour',\n className,\n}: ColorPickerProps) {\n const [current, setCurrent] = useControllableState<string>({ value, defaultValue, onChange })\n const [open, setOpen] = useState(false)\n\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const panelRef = useRef<HTMLDivElement | null>(null)\n const planeRef = useRef<HTMLDivElement | null>(null)\n const id = useId()\n\n // Parsed from the incoming value, but held in a ref while dragging so hue survives a trip\n // through a zero-saturation colour.\n const parsed = useMemo(() => {\n const rgb = tryParseColor(current) ?? parseColor(defaultValue)\n return rgbToHsv(rgb)\n }, [current, defaultValue])\n\n const hueRef = useRef(parsed.h)\n if (parsed.s > 0.001 && parsed.v > 0.001) hueRef.current = parsed.h\n const hsv: Hsv = {\n ...parsed,\n h: parsed.s < 0.001 || parsed.v < 0.001 ? hueRef.current : parsed.h,\n }\n\n const emit = useCallback(\n (next: Hsv) => {\n const rgb = hsvToRgb(next)\n switch (format) {\n case 'rgb':\n setCurrent(\n next.a < 1\n ? `rgba(${Math.round(rgb.r * 255)}, ${Math.round(rgb.g * 255)}, ${Math.round(rgb.b * 255)}, ${Number(next.a.toFixed(2))})`\n : `rgb(${Math.round(rgb.r * 255)}, ${Math.round(rgb.g * 255)}, ${Math.round(rgb.b * 255)})`,\n )\n break\n case 'hsl':\n setCurrent(\n `hsl(${Math.round(next.h)} ${Math.round(next.s * 100)}% ${Math.round(next.v * (1 - next.s / 2) * 100)}%${next.a < 1 ? ` / ${Number(next.a.toFixed(2))}` : ''})`,\n )\n break\n case 'oklch':\n setCurrent(toOklchString(rgb))\n break\n default:\n setCurrent(toHex(rgb, next.a < 1))\n }\n },\n [format, setCurrent],\n )\n\n const position = useAnchoredPosition(triggerRef, panelRef, open, {\n placement: 'bottom-start',\n offset: 8,\n })\n useDismiss(panelRef, open, () => setOpen(false), { ignore: [triggerRef] })\n\n // --- Drag handling ------------------------------------------------------\n const dragPlane = (event: React.PointerEvent) => {\n if (disabled) return\n const plane = planeRef.current\n if (!plane) return\n ;(event.currentTarget as HTMLElement).setPointerCapture(event.pointerId)\n\n const apply = (clientX: number, clientY: number) => {\n const rect = plane.getBoundingClientRect()\n const s = Math.min(Math.max((clientX - rect.left) / rect.width, 0), 1)\n const v = 1 - Math.min(Math.max((clientY - rect.top) / rect.height, 0), 1)\n emit({ ...hsv, s, v })\n }\n\n apply(event.clientX, event.clientY)\n const onMove = (moveEvent: PointerEvent) => apply(moveEvent.clientX, moveEvent.clientY)\n const onUp = () => {\n window.removeEventListener('pointermove', onMove)\n window.removeEventListener('pointerup', onUp)\n }\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', onUp)\n }\n\n const onPlaneKeyDown = (event: React.KeyboardEvent) => {\n const step = event.shiftKey ? 0.1 : 0.02\n let { s, v } = hsv\n switch (event.key) {\n case 'ArrowRight':\n s = Math.min(1, s + step)\n break\n case 'ArrowLeft':\n s = Math.max(0, s - step)\n break\n case 'ArrowUp':\n v = Math.min(1, v + step)\n break\n case 'ArrowDown':\n v = Math.max(0, v - step)\n break\n default:\n return\n }\n event.preventDefault()\n emit({ ...hsv, s, v })\n }\n\n const swatch = toHex(hsvToRgb(hsv), hsv.a < 1)\n const pureHue = toHex(hsvToRgb({ h: hsv.h, s: 1, v: 1, a: 1 }))\n\n const contrast = contrastAgainst\n ? contrastRatio(hsvToRgb(hsv), parseColor(contrastAgainst))\n : null\n\n return (\n <div className={cx('ansh-colorpicker', className)}>\n <button\n ref={triggerRef}\n type=\"button\"\n className=\"ansh-colorpicker__trigger ansh-focusable\"\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-label={`${label}: ${swatch}`}\n onClick={() => setOpen((v) => !v)}\n >\n <span\n className=\"ansh-colorpicker__swatch\"\n style={{ background: swatch }}\n aria-hidden=\"true\"\n />\n <span className=\"ansh-colorpicker__value\">{current}</span>\n </button>\n\n {open ? (\n <Portal>\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-label={label}\n className=\"ansh-colorpicker__panel\"\n style={position.style}\n >\n <div\n ref={planeRef}\n className=\"ansh-colorpicker__plane\"\n style={{ ['--ansh-hue' as string]: pureHue }}\n onPointerDown={dragPlane}\n >\n <div\n role=\"slider\"\n tabIndex={0}\n className=\"ansh-colorpicker__knob ansh-focusable\"\n style={{\n left: `${hsv.s * 100}%`,\n top: `${(1 - hsv.v) * 100}%`,\n background: swatch,\n }}\n aria-label=\"Saturation and brightness\"\n aria-valuetext={`Saturation ${Math.round(hsv.s * 100)}%, brightness ${Math.round(hsv.v * 100)}%`}\n aria-valuenow={Math.round(hsv.s * 100)}\n aria-valuemin={0}\n aria-valuemax={100}\n onKeyDown={onPlaneKeyDown}\n />\n </div>\n\n <div className=\"ansh-colorpicker__rails\">\n <div\n className=\"ansh-colorpicker__preview\"\n style={{ background: swatch }}\n aria-hidden=\"true\"\n />\n\n <div className=\"ansh-colorpicker__rail-group\">\n <input\n type=\"range\"\n className=\"ansh-colorpicker__rail ansh-colorpicker__rail--hue ansh-focusable\"\n min={0}\n max={360}\n step={1}\n value={Math.round(hsv.h)}\n aria-label=\"Hue\"\n aria-valuetext={`${Math.round(hsv.h)} degrees`}\n onChange={(event) => emit({ ...hsv, h: Number(event.target.value) })}\n />\n\n {alpha ? (\n <input\n type=\"range\"\n className=\"ansh-colorpicker__rail ansh-colorpicker__rail--alpha ansh-focusable\"\n style={{ ['--ansh-solid' as string]: toHex(hsvToRgb({ ...hsv, a: 1 })) }}\n min={0}\n max={100}\n step={1}\n value={Math.round(hsv.a * 100)}\n aria-label=\"Opacity\"\n aria-valuetext={`${Math.round(hsv.a * 100)} percent`}\n onChange={(event) => emit({ ...hsv, a: Number(event.target.value) / 100 })}\n />\n ) : null}\n </div>\n </div>\n\n <div className=\"ansh-colorpicker__row\">\n <input\n type=\"text\"\n className=\"ansh-input ansh-input--sm ansh-colorpicker__text\"\n value={current}\n aria-label={`${label} value`}\n spellCheck={false}\n onChange={(event) => {\n const text = event.target.value\n setCurrent(text)\n // Only re-derive HSV when the text parses; typing \"#0\" mid-edit must not reset\n // the picker to black.\n const rgb = tryParseColor(text)\n if (rgb) hueRef.current = rgbToHsv(rgb).h\n }}\n />\n </div>\n\n {contrast !== null ? (\n <p\n className={cx(\n 'ansh-colorpicker__contrast',\n contrast >= 4.5 && 'ansh-colorpicker__contrast--pass',\n contrast < 3 && 'ansh-colorpicker__contrast--fail',\n )}\n aria-live=\"polite\"\n >\n {contrast.toFixed(2)}:1 against {contrastAgainst} —{' '}\n {contrast >= 7\n ? 'AAA'\n : contrast >= 4.5\n ? 'AA'\n : contrast >= 3\n ? 'AA large only'\n : 'fails'}\n </p>\n ) : null}\n\n {presets && presets.length > 0 ? (\n <div className=\"ansh-colorpicker__presets\" role=\"group\" aria-label=\"Preset colours\">\n {presets.map((preset) => (\n <button\n key={preset}\n type=\"button\"\n className={cx(\n 'ansh-colorpicker__preset',\n preset.toLowerCase() === swatch.toLowerCase() &&\n 'ansh-colorpicker__preset--on',\n )}\n style={{ background: preset }}\n aria-label={preset}\n aria-pressed={preset.toLowerCase() === swatch.toLowerCase()}\n onClick={() => {\n const rgb = tryParseColor(preset)\n if (rgb) {\n hueRef.current = rgbToHsv(rgb).h\n setCurrent(preset)\n }\n }}\n />\n ))}\n </div>\n ) : null}\n\n <span className=\"ansh-visually-hidden\" aria-live=\"polite\" id={`${id}-live`}>\n {swatch}\n </span>\n </div>\n </Portal>\n ) : null}\n </div>\n )\n}\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport { cx } from '../../primitives/compose'\nimport { useControllableState } from '../../primitives/use-controllable-state'\n\n/**\n * A month calendar.\n *\n * Dates are plain `Date` objects normalised to local midnight. No date library: the whole surface\n * this needs is \"add days\", \"same day?\" and \"days in month\", and pulling in a 70 KB dependency for\n * that is how component libraries end up heavier than the app using them.\n *\n * Local midnight, specifically. Working in UTC makes a date shift by a day for anyone west of\n * Greenwich — the bug where a birthday saved on the 14th displays as the 13th, which is the single\n * most reported issue in every date picker ever shipped.\n *\n * Keyboard support is the WAI-ARIA date grid pattern: arrows by day, PageUp/PageDown by month,\n * Shift+PageUp/PageDown by year, Home/End to the week's ends. A calendar without these is\n * mouse-only, and entering a date of birth by clicking back 300 months is not a real option.\n */\n\n/** Strip the time, in local time. */\nexport function startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate())\n}\n\nexport function addDays(date: Date, days: number): Date {\n // Going through the day-of-month constructor handles month and year rollover, and — unlike\n // adding milliseconds — stays correct across daylight-saving transitions, where a \"day\" is 23\n // or 25 hours long.\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days)\n}\n\nexport function addMonths(date: Date, months: number): Date {\n const target = new Date(date.getFullYear(), date.getMonth() + months, 1)\n // Clamp the day: 31 January + 1 month must be 28/29 February, not 3 March.\n const lastDay = new Date(target.getFullYear(), target.getMonth() + 1, 0).getDate()\n return new Date(target.getFullYear(), target.getMonth(), Math.min(date.getDate(), lastDay))\n}\n\nexport function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\n if (!a || !b) return false\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n )\n}\n\nexport type DateRange = { start: Date | null; end: Date | null }\n\nexport interface CalendarProps {\n /** `'single'` picks one date; `'range'` picks a start and an end. */\n mode?: 'single' | 'range'\n value?: Date | null | DateRange\n defaultValue?: Date | null | DateRange\n onChange?: (value: Date | null | DateRange) => void\n min?: Date\n max?: Date\n /** Disable specific dates — weekends, holidays, booked days. */\n isDateDisabled?: (date: Date) => boolean\n /** 0 = Sunday, 1 = Monday. Default: inferred from the locale. */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n locale?: string\n /** Months shown side by side. Default `1`; `2` suits range pickers. */\n months?: number\n /** Show ISO week numbers down the left. */\n showWeekNumbers?: boolean\n className?: string\n}\n\n/** Monday-first for most of the world; Sunday-first for the locales that use it. */\nfunction defaultWeekStart(locale: string | undefined): 0 | 1 {\n const region = (locale ?? (typeof navigator !== 'undefined' ? navigator.language : 'en-GB'))\n .split('-')[1]\n ?.toUpperCase()\n return region && ['US', 'CA', 'JP', 'IL', 'BR', 'MX', 'PH', 'KR'].includes(region) ? 0 : 1\n}\n\n/** ISO 8601 week number — the Thursday rule. */\nfunction isoWeek(date: Date): number {\n const target = new Date(date.getFullYear(), date.getMonth(), date.getDate())\n target.setDate(target.getDate() + 3 - ((target.getDay() + 6) % 7))\n const firstThursday = new Date(target.getFullYear(), 0, 4)\n firstThursday.setDate(firstThursday.getDate() + 3 - ((firstThursday.getDay() + 6) % 7))\n return 1 + Math.round((target.getTime() - firstThursday.getTime()) / (7 * 86_400_000))\n}\n\nexport function Calendar({\n mode = 'single',\n value,\n defaultValue,\n onChange,\n min,\n max,\n isDateDisabled,\n weekStartsOn,\n locale,\n months = 1,\n showWeekNumbers = false,\n className,\n}: CalendarProps) {\n const [selection, setSelection] = useControllableState<Date | null | DateRange>({\n value,\n defaultValue: defaultValue ?? (mode === 'range' ? { start: null, end: null } : null),\n onChange,\n })\n\n const single = mode === 'single' ? (selection as Date | null) : null\n const range = mode === 'range' ? (selection as DateRange) : { start: null, end: null }\n\n const today = useMemo(() => startOfDay(new Date()), [])\n\n // The month on screen, and the day that owns the grid's single tab stop. Separate concerns:\n // arrowing to the 31st then to the 1st must move the view *and* the cursor together, but\n // clicking the next-month button moves only the view.\n const [viewMonth, setViewMonth] = useState(() => startOfDay(single ?? range.start ?? new Date()))\n const [cursor, setCursor] = useState(() => startOfDay(single ?? range.start ?? new Date()))\n const [hovered, setHovered] = useState<Date | null>(null)\n\n const gridRef = useRef<HTMLDivElement | null>(null)\n const shouldFocusRef = useRef(false)\n\n const firstWeekday = weekStartsOn ?? defaultWeekStart(locale)\n\n const dayNames = useMemo(() => {\n const formatter = new Intl.DateTimeFormat(locale, { weekday: 'short' })\n const longFormatter = new Intl.DateTimeFormat(locale, { weekday: 'long' })\n // 2024-01-07 was a Sunday, so offsetting from it enumerates the week in order.\n return Array.from({ length: 7 }, (_, i) => {\n const date = new Date(2024, 0, 7 + ((firstWeekday + i) % 7))\n return { short: formatter.format(date), long: longFormatter.format(date) }\n })\n }, [locale, firstWeekday])\n\n const monthLabel = useMemo(\n () => new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric' }),\n [locale],\n )\n const fullDate = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n }),\n [locale],\n )\n\n const disabled = (date: Date): boolean => {\n if (min && date < startOfDay(min)) return true\n if (max && date > startOfDay(max)) return true\n return isDateDisabled?.(date) ?? false\n }\n\n /** Move the cursor, pulling the view along when it leaves the visible months. */\n const moveCursor = (next: Date) => {\n shouldFocusRef.current = true\n setCursor(next)\n const firstVisible = new Date(viewMonth.getFullYear(), viewMonth.getMonth(), 1)\n const lastVisible = new Date(viewMonth.getFullYear(), viewMonth.getMonth() + months, 0)\n if (next < firstVisible || next > lastVisible) setViewMonth(next)\n }\n\n // Focus follows the cursor, but only when the cursor moved by keyboard. Focusing after a click\n // would steal focus back from wherever the user clicked next.\n useEffect(() => {\n if (!shouldFocusRef.current) return\n shouldFocusRef.current = false\n gridRef.current\n ?.querySelector<HTMLElement>('[data-ansh-day][tabindex=\"0\"]')\n ?.focus({ preventScroll: true })\n }, [cursor, viewMonth])\n\n const commit = (date: Date) => {\n if (disabled(date)) return\n\n if (mode === 'single') {\n setSelection(date)\n return\n }\n\n // Range: a click either starts a new range or completes the open one. Clicking before the\n // start re-anchors rather than producing a backwards range.\n if (!range.start || range.end || date < range.start) {\n setSelection({ start: date, end: null })\n } else {\n setSelection({ start: range.start, end: date })\n }\n }\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n let next: Date | null = null\n\n switch (event.key) {\n case 'ArrowLeft':\n next = addDays(cursor, -1)\n break\n case 'ArrowRight':\n next = addDays(cursor, 1)\n break\n case 'ArrowUp':\n next = addDays(cursor, -7)\n break\n case 'ArrowDown':\n next = addDays(cursor, 7)\n break\n case 'Home':\n next = addDays(cursor, -((cursor.getDay() - firstWeekday + 7) % 7))\n break\n case 'End':\n next = addDays(cursor, 6 - ((cursor.getDay() - firstWeekday + 7) % 7))\n break\n case 'PageUp':\n next = addMonths(cursor, event.shiftKey ? -12 : -1)\n break\n case 'PageDown':\n next = addMonths(cursor, event.shiftKey ? 12 : 1)\n break\n case 'Enter':\n case ' ':\n event.preventDefault()\n commit(cursor)\n return\n default:\n return\n }\n\n event.preventDefault()\n moveCursor(next)\n }\n\n const inRange = (date: Date): boolean => {\n if (mode !== 'range' || !range.start) return false\n // While choosing the end, the hovered day previews the range — without it, selecting a range\n // is guesswork until the second click lands.\n const end = range.end ?? hovered\n if (!end) return false\n const [low, high] = range.start <= end ? [range.start, end] : [end, range.start]\n return date > low && date < high\n }\n\n const renderMonth = (offset: number) => {\n const monthDate = new Date(viewMonth.getFullYear(), viewMonth.getMonth() + offset, 1)\n const firstOfMonth = new Date(monthDate.getFullYear(), monthDate.getMonth(), 1)\n const leading = (firstOfMonth.getDay() - firstWeekday + 7) % 7\n const gridStart = addDays(firstOfMonth, -leading)\n\n // Always six rows. A month that needs five would otherwise make the popover change height\n // between months, shifting everything below it.\n const days = Array.from({ length: 42 }, (_, i) => addDays(gridStart, i))\n const weeks = Array.from({ length: 6 }, (_, w) => days.slice(w * 7, w * 7 + 7))\n\n return (\n <div className=\"ansh-calendar__month\" key={offset}>\n <div className=\"ansh-calendar__caption\" aria-hidden=\"true\">\n {monthLabel.format(monthDate)}\n </div>\n\n <table\n className=\"ansh-calendar__grid\"\n role=\"grid\"\n aria-label={monthLabel.format(monthDate)}\n >\n <thead>\n <tr>\n {showWeekNumbers ? (\n <th scope=\"col\" className=\"ansh-calendar__weekno-head\">\n <span className=\"ansh-visually-hidden\">Week</span>\n </th>\n ) : null}\n {dayNames.map((day) => (\n <th key={day.long} scope=\"col\" className=\"ansh-calendar__weekday\" abbr={day.long}>\n <span aria-hidden=\"true\">{day.short}</span>\n <span className=\"ansh-visually-hidden\">{day.long}</span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeks.map((week) => (\n <tr key={week[0]!.toISOString()}>\n {showWeekNumbers ? (\n <td className=\"ansh-calendar__weekno\">{isoWeek(week[0]!)}</td>\n ) : null}\n {week.map((date) => {\n const outside = date.getMonth() !== monthDate.getMonth()\n const isDisabled = disabled(date)\n const isSelected =\n mode === 'single'\n ? isSameDay(date, single)\n : isSameDay(date, range.start) || isSameDay(date, range.end)\n const isCursor = isSameDay(date, cursor)\n\n return (\n <td key={date.toISOString()} className=\"ansh-calendar__cell\" role=\"gridcell\">\n <button\n type=\"button\"\n data-ansh-day=\"\"\n className={cx(\n 'ansh-calendar__day',\n outside && 'ansh-calendar__day--outside',\n isSelected && 'ansh-calendar__day--selected',\n inRange(date) && 'ansh-calendar__day--in-range',\n isSameDay(date, today) && 'ansh-calendar__day--today',\n )}\n // Roving tabindex: exactly one day is a tab stop, so Tab enters and leaves\n // the calendar rather than walking 42 buttons.\n tabIndex={isCursor ? 0 : -1}\n disabled={isDisabled}\n aria-selected={isSelected}\n aria-current={isSameDay(date, today) ? 'date' : undefined}\n // The full date is the accessible name; the visible number alone would be\n // announced as a bare \"14\".\n aria-label={fullDate.format(date)}\n onClick={() => {\n setCursor(date)\n commit(date)\n }}\n onMouseEnter={() => mode === 'range' && setHovered(date)}\n onFocus={() => setCursor(date)}\n >\n {date.getDate()}\n </button>\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n }\n\n return (\n <div\n className={cx('ansh-calendar', months > 1 && 'ansh-calendar--multi', className)}\n onKeyDown={onKeyDown}\n onMouseLeave={() => setHovered(null)}\n >\n <div className=\"ansh-calendar__header\">\n <button\n type=\"button\"\n className=\"ansh-calendar__nav ansh-focusable\"\n aria-label=\"Previous month\"\n onClick={() => setViewMonth(addMonths(viewMonth, -1))}\n >\n <svg viewBox=\"0 0 12 12\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path\n d=\"M7.5 2.5L4 6l3.5 3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n {/* One live region for the whole calendar. Per-month headings marked `aria-hidden` above,\n so a month change is announced once rather than twice in a two-month view. */}\n <div className=\"ansh-calendar__title\" aria-live=\"polite\">\n {months > 1\n ? `${monthLabel.format(viewMonth)} – ${monthLabel.format(new Date(viewMonth.getFullYear(), viewMonth.getMonth() + months - 1, 1))}`\n : monthLabel.format(viewMonth)}\n </div>\n\n <button\n type=\"button\"\n className=\"ansh-calendar__nav ansh-focusable\"\n aria-label=\"Next month\"\n onClick={() => setViewMonth(addMonths(viewMonth, 1))}\n >\n <svg viewBox=\"0 0 12 12\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path\n d=\"M4.5 2.5L8 6l-3.5 3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <div className=\"ansh-calendar__months\" ref={gridRef}>\n {Array.from({ length: months }, (_, index) => renderMonth(index))}\n </div>\n </div>\n )\n}\n","import { useMemo, useRef, useState } from 'react'\nimport { cx } from '../../primitives/compose'\nimport { Portal } from '../../primitives/portal'\nimport { useAnchoredPosition } from '../../primitives/use-anchored-position'\nimport { useControllableState } from '../../primitives/use-controllable-state'\nimport { useDismiss } from '../../primitives/use-dismiss'\nimport { useFieldControl } from './field'\nimport { type CalendarProps, type DateRange, Calendar, startOfDay } from './calendar'\n\nexport interface DatePickerProps extends Omit<\n CalendarProps,\n 'value' | 'defaultValue' | 'onChange' | 'mode' | 'className'\n> {\n value?: Date | null\n defaultValue?: Date | null\n onChange?: (value: Date | null) => void\n placeholder?: string\n disabled?: boolean\n invalid?: boolean\n /** Show a clear button once a date is chosen. */\n clearable?: boolean\n /** Format the displayed date. Defaults to the locale's medium date. */\n format?: (date: Date) => string\n label?: string\n className?: string\n name?: string\n}\n\n/**\n * A date field with a calendar popover.\n *\n * The text input is editable, not just a display. Typing \"14/03/2026\" is faster than clicking\n * through a calendar for anyone who knows the date they want, and a picker that forces the calendar\n * is a picker people complain about. The calendar is the fallback for \"some Thursday next month\",\n * which is the case typing can't serve.\n *\n * Parsing is deliberately forgiving of separators and order within a locale, but never guesses\n * between `03/04` as March 4th and April 3rd — it follows the locale's own order. Guessing is how\n * date fields silently record the wrong day.\n */\nexport function DatePicker({\n value,\n defaultValue = null,\n onChange,\n placeholder,\n disabled = false,\n invalid = false,\n clearable = true,\n format,\n label = 'Date',\n className,\n name,\n locale,\n ...calendarProps\n}: DatePickerProps) {\n const fieldProps = useFieldControl()\n const [selected, setSelected] = useControllableState<Date | null>({\n value,\n defaultValue,\n onChange,\n })\n const [open, setOpen] = useState(false)\n const [text, setText] = useState('')\n const [editing, setEditing] = useState(false)\n\n const anchorRef = useRef<HTMLDivElement | null>(null)\n const panelRef = useRef<HTMLDivElement | null>(null)\n const inputRef = useRef<HTMLInputElement | null>(null)\n\n const formatter = useMemo(\n () => new Intl.DateTimeFormat(locale, { day: '2-digit', month: '2-digit', year: 'numeric' }),\n [locale],\n )\n\n /** The locale's field order, derived rather than assumed. */\n const order = useMemo(() => {\n const parts = formatter.formatToParts(new Date(2026, 2, 14))\n return parts.filter((p) => ['day', 'month', 'year'].includes(p.type)).map((p) => p.type)\n }, [formatter])\n\n const display = format\n ? selected\n ? format(selected)\n : ''\n : selected\n ? formatter.format(selected)\n : ''\n\n const parse = (raw: string): Date | null => {\n const numbers = raw.split(/\\D+/).filter(Boolean).map(Number)\n if (numbers.length < 3) return null\n\n const parts: Record<string, number> = {}\n order.forEach((type, index) => {\n parts[type] = numbers[index]!\n })\n\n const { month = 0, day = 0 } = parts\n let { year = 0 } = parts\n // Two-digit years: 00–69 is 2000s, 70–99 is 1900s. The Unicode CLDR convention, and the one\n // every spreadsheet uses.\n if (year < 100) year += year < 70 ? 2000 : 1900\n\n const date = new Date(year, month - 1, day)\n // Round-trip check rejects 31 February, which `Date` would silently roll into March.\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return null\n }\n return startOfDay(date)\n }\n\n const commitText = () => {\n setEditing(false)\n if (text.trim() === '') {\n setSelected(null)\n return\n }\n const parsed = parse(text)\n if (parsed) setSelected(parsed)\n // An unparseable entry reverts rather than clearing — silently discarding what someone typed\n // is worse than ignoring it.\n setText('')\n }\n\n const position = useAnchoredPosition(anchorRef, panelRef, open, {\n placement: 'bottom-start',\n offset: 6,\n })\n useDismiss(panelRef, open, () => setOpen(false), { ignore: [anchorRef] })\n\n const placeholderText =\n placeholder ??\n order.map((type) => (type === 'year' ? 'yyyy' : type === 'month' ? 'mm' : 'dd')).join('/')\n\n return (\n <div className={cx('ansh-datepicker', className)}>\n <div\n ref={anchorRef}\n className={cx(\n 'ansh-input-group',\n 'ansh-focusable-within',\n (invalid || fieldProps['aria-invalid']) && 'ansh-input-group--invalid',\n disabled && 'ansh-input-group--disabled',\n )}\n >\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"numeric\"\n className=\"ansh-input\"\n value={editing ? text : display}\n placeholder={placeholderText}\n disabled={disabled || fieldProps.disabled}\n aria-label={label}\n aria-invalid={invalid || undefined}\n autoComplete=\"off\"\n {...fieldProps}\n onChange={(event) => {\n setEditing(true)\n setText(event.target.value)\n }}\n onBlur={commitText}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n commitText()\n setOpen(false)\n } else if (event.key === 'ArrowDown' && !open) {\n event.preventDefault()\n setOpen(true)\n } else if (event.key === 'Escape' && open) {\n event.preventDefault()\n setOpen(false)\n }\n }}\n />\n\n {clearable && selected && !disabled ? (\n <button\n type=\"button\"\n className=\"ansh-input-group__clear ansh-focusable\"\n aria-label=\"Clear date\"\n onClick={() => {\n setSelected(null)\n setText('')\n inputRef.current?.focus()\n }}\n >\n <svg viewBox=\"0 0 16 16\" width=\"12\" height=\"12\" aria-hidden=\"true\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n </button>\n ) : null}\n\n <button\n type=\"button\"\n className=\"ansh-input-group__button ansh-focusable\"\n aria-label=\"Open calendar\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n disabled={disabled}\n onClick={() => setOpen((v) => !v)}\n >\n <svg\n viewBox=\"0 0 20 20\"\n width=\"16\"\n height=\"16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"4.5\" width=\"14\" height=\"13\" rx=\"2.5\" />\n <path d=\"M3 8.5h14M7 2.5v3M13 2.5v3\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n {name ? (\n // ISO in the hidden field. A server parsing \"14/03/2026\" has to guess the locale; an ISO\n // date is unambiguous everywhere.\n <input\n type=\"hidden\"\n name={name}\n value={\n selected\n ? `${selected.getFullYear()}-${String(selected.getMonth() + 1).padStart(2, '0')}-${String(selected.getDate()).padStart(2, '0')}`\n : ''\n }\n />\n ) : null}\n\n {open ? (\n <Portal>\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-label={label}\n className=\"ansh-datepicker__panel\"\n style={position.style}\n >\n <Calendar\n mode=\"single\"\n value={selected}\n onChange={(next) => {\n setSelected(next as Date | null)\n setOpen(false)\n inputRef.current?.focus()\n }}\n {...(locale ? { locale } : null)}\n {...calendarProps}\n />\n </div>\n </Portal>\n ) : null}\n </div>\n )\n}\n\nexport interface DateRangePickerProps extends Omit<\n CalendarProps,\n 'value' | 'defaultValue' | 'onChange' | 'mode' | 'className'\n> {\n value?: DateRange\n defaultValue?: DateRange\n onChange?: (value: DateRange) => void\n disabled?: boolean\n invalid?: boolean\n label?: string\n className?: string\n /** Months shown side by side. Default `2`. */\n months?: number\n}\n\n/**\n * A start/end date range.\n *\n * Two months by default: choosing a range that crosses a month boundary with one month visible\n * means paging back and forth to compare, which is where users lose track of what they picked.\n */\nexport function DateRangePicker({\n value,\n defaultValue = { start: null, end: null },\n onChange,\n disabled = false,\n invalid = false,\n label = 'Date range',\n className,\n months = 2,\n locale,\n ...calendarProps\n}: DateRangePickerProps) {\n const [range, setRange] = useControllableState<DateRange>({ value, defaultValue, onChange })\n const [open, setOpen] = useState(false)\n\n const anchorRef = useRef<HTMLButtonElement | null>(null)\n const panelRef = useRef<HTMLDivElement | null>(null)\n\n const formatter = useMemo(\n () => new Intl.DateTimeFormat(locale, { day: 'numeric', month: 'short', year: 'numeric' }),\n [locale],\n )\n\n const position = useAnchoredPosition(anchorRef, panelRef, open, {\n placement: 'bottom-start',\n offset: 6,\n })\n useDismiss(panelRef, open, () => setOpen(false), { ignore: [anchorRef] })\n\n const summary =\n range.start && range.end\n ? `${formatter.format(range.start)} – ${formatter.format(range.end)}`\n : range.start\n ? `${formatter.format(range.start)} – …`\n : 'Select dates'\n\n return (\n <div className={cx('ansh-datepicker', className)}>\n <button\n ref={anchorRef}\n type=\"button\"\n className={cx(\n 'ansh-select__trigger',\n 'ansh-focusable',\n open && 'ansh-select__trigger--open',\n invalid && 'ansh-select__trigger--invalid',\n !range.start && 'ansh-select__trigger--placeholder',\n )}\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-label={`${label}: ${summary}`}\n onClick={() => setOpen((v) => !v)}\n >\n <svg\n viewBox=\"0 0 20 20\"\n width=\"16\"\n height=\"16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"4.5\" width=\"14\" height=\"13\" rx=\"2.5\" />\n <path d=\"M3 8.5h14M7 2.5v3M13 2.5v3\" strokeLinecap=\"round\" />\n </svg>\n <span className=\"ansh-select__value\">{summary}</span>\n </button>\n\n {open ? (\n <Portal>\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-label={label}\n className=\"ansh-datepicker__panel\"\n style={position.style}\n >\n <Calendar\n mode=\"range\"\n months={months}\n value={range}\n onChange={(next) => {\n const nextRange = next as DateRange\n setRange(nextRange)\n // Close only once both ends are chosen, so the second click doesn't have to\n // reopen the panel.\n if (nextRange.start && nextRange.end) setOpen(false)\n }}\n {...(locale ? { locale } : null)}\n {...calendarProps}\n />\n </div>\n </Portal>\n ) : null}\n </div>\n )\n}\n"]}