@bigbinary/neeto-atoms 1.1.2 → 1.1.4-beta1

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 (52) hide show
  1. package/dist/{DatePicker-BiUWzq-V.js → DatePicker-CMlA-hNW.js} +475 -272
  2. package/dist/DatePicker-CMlA-hNW.js.map +1 -0
  3. package/dist/{Select-DCVlTRBI.js → Select-DrH-AzOD.js} +32 -9
  4. package/dist/Select-DrH-AzOD.js.map +1 -0
  5. package/dist/{TranslationProvider-BJjfFEgX.js → TranslationProvider-DKdbPweu.js} +9 -2
  6. package/dist/{TranslationProvider-BJjfFEgX.js.map → TranslationProvider-DKdbPweu.js.map} +1 -1
  7. package/dist/cjs/{DatePicker-C_nezxpH.js → DatePicker-CBxWLALJ.js} +474 -271
  8. package/dist/cjs/DatePicker-CBxWLALJ.js.map +1 -0
  9. package/dist/cjs/{Select-DReP9RU1.js → Select-BP2y7-eM.js} +32 -9
  10. package/dist/cjs/Select-BP2y7-eM.js.map +1 -0
  11. package/dist/cjs/{TranslationProvider-C1JDwKEN.js → TranslationProvider-Cao2ugzJ.js} +9 -2
  12. package/dist/cjs/{TranslationProvider-C1JDwKEN.js.map → TranslationProvider-Cao2ugzJ.js.map} +1 -1
  13. package/dist/cjs/components/DatePicker.js +1 -1
  14. package/dist/cjs/components/Select.js +1 -1
  15. package/dist/cjs/components/TranslationProvider.js +1 -1
  16. package/dist/cjs/components/index.js +5 -5
  17. package/dist/cjs/formik/Form.js +1 -0
  18. package/dist/cjs/formik/Form.js.map +1 -1
  19. package/dist/cjs/formik/Select.js +1 -1
  20. package/dist/cjs/formik/index.js +1 -1
  21. package/dist/cjs/index.js +5 -5
  22. package/dist/components/DatePicker/DatePickerFooter.d.ts +1 -1
  23. package/dist/components/DatePicker/RangeCalendar.d.ts +2 -1
  24. package/dist/components/DatePicker/RangeTimeSection.d.ts +37 -0
  25. package/dist/components/DatePicker/SegmentedTimeInput.d.ts +7 -1
  26. package/dist/components/DatePicker/TimeSection.d.ts +3 -0
  27. package/dist/components/DatePicker/types.d.ts +5 -2
  28. package/dist/components/DatePicker/useRangePicker.d.ts +4 -2
  29. package/dist/components/DatePicker/utils.d.ts +1 -0
  30. package/dist/components/DatePicker.js +1 -1
  31. package/dist/components/Select/MultiSelectCombobox.types.d.ts +1 -1
  32. package/dist/components/Select/SelectCombobox.types.d.ts +1 -1
  33. package/dist/components/Select/hooks/useCreatableItems.d.ts +2 -1
  34. package/dist/components/Select/hooks/useMultiSelectState.d.ts +1 -1
  35. package/dist/components/Select/hooks/useReportInputChange.d.ts +1 -0
  36. package/dist/components/Select/hooks/useSelectState.d.ts +1 -1
  37. package/dist/components/Select/types.d.ts +7 -2
  38. package/dist/components/Select.js +1 -1
  39. package/dist/components/TranslationProvider.js +1 -1
  40. package/dist/components/index.js +3 -3
  41. package/dist/formik/Form.js +1 -0
  42. package/dist/formik/Form.js.map +1 -1
  43. package/dist/formik/Select.js +1 -1
  44. package/dist/formik/index.js +1 -1
  45. package/dist/index.js +3 -3
  46. package/dist/translations/index.d.ts +7 -0
  47. package/package.json +2 -2
  48. package/CHANGELOG.md +0 -3
  49. package/dist/DatePicker-BiUWzq-V.js.map +0 -1
  50. package/dist/Select-DCVlTRBI.js.map +0 -1
  51. package/dist/cjs/DatePicker-C_nezxpH.js.map +0 -1
  52. package/dist/cjs/Select-DReP9RU1.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select-BP2y7-eM.js","sources":["../../src/components/Select/hooks/useAsyncOptions.ts","../../src/components/Select/hooks/useLazyLoadSentinel.ts","../../src/components/Select/constants.ts","../../src/components/Select/hooks/useReportInputChange.ts","../../src/components/Select/hooks/useCreatableItems.ts","../../src/components/Select/types.ts","../../src/components/Select/utils.ts","../../src/components/Select/hooks/useMultiSelectOptions.ts","../../src/components/Select/hooks/useSelectState.ts","../../src/components/Select/hooks/useMultiSelectState.ts","../../src/components/Select/OptionItem.tsx","../../src/components/Select/MultiSelectDropdown.tsx","../../src/components/Select/SelectAnchor.tsx","../../src/components/Select/SelectCombobox.tsx","../../src/components/Select/MultiSelectCombobox.tsx","../../src/components/Select/Select.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport type { SelectOptionBase } from \"src/components/Select/types\";\n\ninterface UseAsyncOptionsConfig {\n loadOptions?: (inputValue: string) => Promise<SelectOptionBase[]>;\n defaultOptions?: boolean | SelectOptionBase[];\n cacheOptions?: boolean;\n}\n\ninterface UseAsyncOptionsReturn {\n asyncOptions: SelectOptionBase[];\n isLoading: boolean;\n handleAsyncInputChange: (value: string) => void;\n}\n\nexport function useAsyncOptions({\n loadOptions,\n defaultOptions = false,\n cacheOptions = false,\n}: UseAsyncOptionsConfig): UseAsyncOptionsReturn {\n const [asyncOptions, setAsyncOptions] = useState<SelectOptionBase[]>(() =>\n Array.isArray(defaultOptions) ? defaultOptions : []\n );\n const [isLoading, setIsLoading] = useState(false);\n const cacheRef = useRef<Record<string, SelectOptionBase[]>>({});\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const latestRequestRef = useRef(0);\n const mountedRef = useRef(true);\n\n // Load default options on mount when `defaultOptions === true`\n useEffect(() => {\n if (!loadOptions || defaultOptions !== true) return;\n let cancelled = false;\n setIsLoading(true);\n loadOptions(\"\")\n .then(results => {\n if (cancelled) return;\n setAsyncOptions(results);\n if (cacheOptions) cacheRef.current[\"\"] = results;\n setIsLoading(false);\n })\n .catch(() => {\n if (!cancelled) setIsLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n // Clean up debounce timer and mark unmounted\n useEffect(() => {\n return () => {\n mountedRef.current = false;\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n }, []);\n\n const handleAsyncInputChange = useCallback(\n (value: string) => {\n if (!loadOptions) return;\n\n const query = value.trim();\n\n // Check cache first\n if (cacheOptions && query in cacheRef.current) {\n setAsyncOptions(cacheRef.current[query]);\n return;\n }\n\n // Debounce the fetch\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => {\n const requestId = ++latestRequestRef.current;\n setIsLoading(true);\n loadOptions(query)\n .then(results => {\n if (requestId !== latestRequestRef.current || !mountedRef.current)\n return;\n setAsyncOptions(results);\n if (cacheOptions) cacheRef.current[query] = results;\n setIsLoading(false);\n })\n .catch(() => {\n if (requestId === latestRequestRef.current && mountedRef.current) {\n setIsLoading(false);\n }\n });\n }, 300);\n },\n [loadOptions, cacheOptions]\n );\n\n return { asyncOptions, isLoading, handleAsyncInputChange };\n}\n","import { useCallback, useEffect, useRef } from \"react\";\n\ninterface UseLazyLoadSentinelConfig {\n fetchMore?: () => void;\n isEnabled: boolean;\n}\n\nexport function useLazyLoadSentinel({\n fetchMore,\n isEnabled,\n}: UseLazyLoadSentinelConfig) {\n const observerRef = useRef<IntersectionObserver | null>(null);\n const fetchMoreRef = useRef(fetchMore);\n fetchMoreRef.current = fetchMore;\n\n const sentinelRef = useCallback(\n (node: HTMLDivElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n\n if (!node || !isEnabled) return;\n\n const observer = new IntersectionObserver(\n entries => {\n if (entries[0]?.isIntersecting) fetchMoreRef.current?.();\n },\n { root: null, rootMargin: \"0px\", threshold: 0.1 }\n );\n observer.observe(node);\n observerRef.current = observer;\n },\n [isEnabled]\n );\n\n // Clean up observer on unmount\n useEffect(() => {\n return () => {\n observerRef.current?.disconnect();\n };\n }, []);\n\n return sentinelRef;\n}\n","// Base UI's change reason for \"the user typed in the input\". Every other reason\n// (item press, popup close, clear) is a programmatic write we deliberately\n// ignore so the search query is never seeded with the selected label.\nexport const INPUT_CHANGE_REASON = \"input-change\";\n\n// SIZE_CONFIG is shared by both SelectCombobox (single-select) and\n// MultiSelectCombobox (multi-select). Keys mirror the MultiSelect constants\n// that previously lived in MultiSelect.constants.ts.\n//\n// Mobile (<768px) uses 16px input font-size to prevent iOS Safari auto-zoom\n// on focus. Desktop (md+) keeps the original text sizes. Chip sizing is\n// unchanged because chips are non-interactive badges that don't trigger\n// iOS zoom.\n// `clearIcon` is intentionally one step smaller than `icon`. The clear (X) and\n// the dropdown chevron share the indicator row, but lucide's XIcon fills its\n// box far more than ChevronDownIcon (the X spans a 12x12 square of the 24 view\n// box, the chevron only 12x6), so at an equal size the X reads as visibly\n// larger. Nudging the clear icon down a step balances the two marks.\nexport const SIZE_CONFIG: Record<\n \"small\" | \"medium\" | \"large\",\n {\n chips: string;\n input: string;\n chip: string;\n icon: string;\n clearIcon: string;\n }\n> = {\n small: {\n chips: \"min-h-8 md:min-h-7 text-base md:text-xs gap-0.5 px-1 py-0.5\",\n input: \"text-base md:text-xs\",\n chip: \"h-4.5 text-[0.6875rem] px-1\",\n icon: \"size-3.5\",\n clearIcon: \"size-3\",\n },\n medium: {\n chips: \"min-h-8 text-base md:text-sm gap-1 px-2.5 py-1\",\n input: \"text-base md:text-sm\",\n chip: \"h-5.25 text-xs px-1.5\",\n icon: \"size-4\",\n clearIcon: \"size-3.5\",\n },\n large: {\n chips: \"min-h-10 text-base md:text-sm gap-1 px-2.5 py-1.5\",\n input: \"text-base md:text-sm\",\n chip: \"h-6 text-xs px-2\",\n icon: \"size-5\",\n clearIcon: \"size-4\",\n },\n};\n","import { useCallback, useRef } from \"react\";\n\nexport function useReportInputChange(\n onInputChange?: (inputValue: string) => void\n) {\n const onInputChangeRef = useRef(onInputChange);\n onInputChangeRef.current = onInputChange;\n const lastReportedInputRef = useRef(\"\");\n\n return useCallback((nextValue: string) => {\n if (nextValue === lastReportedInputRef.current) return;\n lastReportedInputRef.current = nextValue;\n onInputChangeRef.current?.(nextValue);\n }, []);\n}\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react\";\n\nimport { computeEffectiveItems } from \"src/components/Select/utils\";\nimport { INPUT_CHANGE_REASON } from \"src/components/Select/constants\";\nimport type { SelectOptionBase as MultiSelectOptionBase } from \"src/components/Select/types\";\nimport { useReportInputChange } from \"./useReportInputChange\";\n\nexport const CREATE_PREFIX = \"__create__:\";\n\nexport const isCreateValue = (val: unknown): val is string =>\n typeof val === \"string\" && val.startsWith(CREATE_PREFIX);\n\ninterface UseCreatableItemsConfig {\n isCreatable: boolean;\n isGrouped: boolean;\n flatOptions: MultiSelectOptionBase[];\n selectedValues: string[];\n baseUiItems?: string[] | { label: string; items: string[] }[];\n onCreateOption?: (inputValue: string) => void;\n onChange?: (values: string[]) => void;\n onAsyncInputChange?: (value: string) => void;\n onInputChange?: (value: string) => void;\n children?: React.ReactNode;\n}\n\ninterface UseCreatableItemsReturn {\n inputValue: string;\n showCreateOption: boolean;\n effectiveItems: string[] | { label: string; items: string[] }[] | undefined;\n optionFilter: (\n itemValue: string,\n query: string,\n itemToString?: (v: string) => string\n ) => boolean;\n handleInputValueChange: (\n value: string,\n details?: { reason?: string }\n ) => void;\n handleValueChange: (next: string[] | null) => void;\n}\n\nexport function useCreatableItems({\n isCreatable,\n isGrouped,\n flatOptions,\n selectedValues,\n baseUiItems,\n onCreateOption,\n onChange,\n onAsyncInputChange,\n onInputChange,\n children,\n}: UseCreatableItemsConfig): UseCreatableItemsReturn {\n const [inputValue, setInputValue] = useState(\"\");\n const reportInputChange = useReportInputChange(onInputChange);\n\n // Mirrors `useSelectState`: only user typing is a real query. Every other\n // reason (item press, popup close, clear) is a programmatic write, so the\n // query resets and no refetch is issued — keeping the last async results\n // around is what lets the chips resolve their labels.\n const handleInputValueChange = useCallback(\n (value: string, details?: { reason?: string }) => {\n const isTyping = details?.reason === INPUT_CHANGE_REASON;\n const nextValue = isTyping ? value : \"\";\n setInputValue(nextValue);\n reportInputChange(nextValue);\n if (isTyping) onAsyncInputChange?.(nextValue);\n },\n [onAsyncInputChange, reportInputChange]\n );\n\n const trimmedInput = inputValue.trim();\n const showCreateOption = useMemo(() => {\n if (!isCreatable || trimmedInput.length === 0) return false;\n const lower = trimmedInput.toLowerCase();\n return (\n !flatOptions.some(\n o =>\n String(o.label).toLowerCase() === lower ||\n String(o.value).toLowerCase() === lower\n ) && !selectedValues.includes(trimmedInput)\n );\n }, [isCreatable, trimmedInput, flatOptions, selectedValues]);\n\n const effectiveItems = React.useMemo(\n () =>\n computeEffectiveItems(\n children,\n baseUiItems,\n showCreateOption,\n isGrouped,\n trimmedInput\n ),\n [baseUiItems, children, isGrouped, showCreateOption, trimmedInput]\n );\n\n // Base UI's own matching, but on the query tracked above rather than the one\n // it passes in: Base UI freezes its query while the popup plays its exit\n // animation, and a reopen inside that window strands it, after which the list\n // ignores the input entirely (neeto-desk-web#26287).\n const baseFilter = ComboboxPrimitive.useFilter({ multiple: true });\n const optionFilter = useCallback(\n (itemValue: string, _query: string, itemToString?: (v: string) => string) =>\n isCreateValue(itemValue) ||\n baseFilter.contains(itemValue, trimmedInput, itemToString),\n [baseFilter, trimmedInput]\n );\n\n const handleValueChange = useCallback(\n (next: string[] | null) => {\n const raw = next ?? [];\n\n const createEntry = raw.find(v => isCreateValue(v));\n if (createEntry) {\n const newValue = createEntry.slice(CREATE_PREFIX.length);\n const withNewValue = raw.map(v => (v === createEntry ? newValue : v));\n onCreateOption?.(newValue);\n onChange?.(withNewValue);\n return;\n }\n\n onChange?.(raw);\n },\n [onChange, onCreateOption]\n );\n\n return {\n inputValue,\n showCreateOption,\n effectiveItems,\n optionFilter,\n handleInputValueChange,\n handleValueChange,\n };\n}\n","import type React from \"react\";\n\nimport type { ComboboxContent } from \"src/primitives/Combobox\";\nimport type { FieldLabel } from \"src/primitives/Field\";\n\nexport interface OptionBase {\n /** Display text for the option. */\n label: string;\n /** Unique value for the option. */\n value: string;\n /** Whether the option is disabled. */\n disabled?: boolean;\n}\n\nexport interface OptionGroup {\n /** Group heading text. */\n label: string;\n /** Options within this group. */\n options: OptionBase[];\n}\n\nexport type Option = OptionBase | OptionGroup;\n\nexport function isOptionGroup(opt: Option): opt is OptionGroup {\n return \"options\" in opt && Array.isArray(opt.options);\n}\n\nexport type SelectOptionBase = OptionBase;\nexport type SelectOptionGroup = OptionGroup;\nexport type SelectOption = Option;\n\ntype SelectSize = \"small\" | \"medium\" | \"large\";\n\ninterface SelectSharedProps {\n /** Unique identifier for the select. Auto-generated if omitted. */\n id?: string;\n /** Name attribute forwarded to the underlying input. */\n name?: string;\n /** Size of the trigger. */\n size?: SelectSize;\n /** Label displayed above the select. */\n label?: string;\n /** Error message displayed below the select. */\n error?: string;\n /** Help text displayed below the select. */\n helpText?: React.ReactNode;\n /** Placeholder text when no value is selected. */\n placeholder?: string;\n /** Flat or grouped option list. */\n options?: SelectOption[];\n /** Disable the select. */\n isDisabled?: boolean;\n /** Mark as required. */\n required?: boolean;\n /**\n * Enable search/filtering of options by typing in the input.\n * When false, the input is hidden and the trigger shows the selected label.\n * @default true\n */\n isSearchable?: boolean;\n /**\n * Where the search field lives.\n * - `\"trigger\"`: type directly in the control, like react-select.\n * - `\"content\"`: the control becomes a read-only trigger showing the\n * selection, and the search field renders at the top of the dropdown.\n * The trigger itself is then the form control, so a forwarded `ref`\n * resolves to that element (a focusable `div`, not an `<input>`).\n * @default \"trigger\"\n */\n searchPosition?: \"trigger\" | \"content\";\n /**\n * Placeholder for the in-dropdown search field.\n * Only used when `searchPosition` is `\"content\"`.\n * @default \"Search...\"\n */\n searchPlaceholder?: string;\n /**\n * Hide the search field when there are fewer than this many options, so\n * short dropdowns stay clean. Ignored when options are async, creatable,\n * lazy-loaded or server-filtered (`filterOption={null}`), since the total\n * count isn't known upfront.\n * @default undefined (search is always shown)\n */\n searchThreshold?: number;\n /** Whether the first matching item is highlighted automatically. @default true */\n autoHighlight?: boolean;\n /** Callback fired when the dropdown opens or closes. */\n onOpenChange?: (open: boolean) => void;\n /**\n * Positioning strategy for the dropdown content.\n * @deprecated The Combobox primitive always uses popper-style positioning.\n * Use `contentProps.side` and `contentProps.align` for positioning control.\n */\n position?: \"item-aligned\" | \"popper\";\n /** Show a clear/reset button when a value is selected. */\n isClearable?: boolean;\n /**\n * Allow creating new options by typing a value that doesn't exist.\n * Works in both single and multi mode.\n */\n isCreatable?: boolean;\n /**\n * Callback fired when a new option is created via the \"Create X\" item.\n * The parent should update the `options` list to include the new value.\n */\n onCreateOption?: (inputValue: string) => void;\n /**\n * Customize the label for the \"Create\" option in the dropdown.\n * @default (inputValue) => `Create \"${inputValue}\"`\n */\n formatCreateLabel?: (inputValue: string) => string;\n /**\n * Async function that fetches options based on the current input value.\n * Works in both single and multi mode.\n */\n loadOptions?: (inputValue: string) => Promise<SelectOptionBase[]>;\n /**\n * Options to show before the user types anything.\n * When `true`, `loadOptions(\"\")` is called on mount.\n * @default false\n */\n defaultOptions?: boolean | SelectOptionBase[];\n /**\n * Cache results from `loadOptions` so repeated queries are instant.\n * @default false\n */\n cacheOptions?: boolean;\n /** Text shown while `loadOptions` is fetching. @default \"Loading…\" */\n loadingMessage?: string;\n /** Text displayed when no options match. @default \"No results found.\" */\n emptyMessage?: string;\n /**\n * Enable lazy loading of options as the user scrolls.\n * @default false\n */\n isAsyncLoadOptionEnabled?: boolean;\n /** Callback to load the next batch of options (lazy loading). */\n fetchMore?: () => void;\n /** Total number of options on the server (lazy loading). */\n totalOptionsCount?: number;\n /** Callback fired when the search input value changes. */\n onInputChange?: (inputValue: string) => void;\n /** Pass `null` to skip client-side filtering (server-side search). */\n filterOption?: null;\n /** Custom data-testid prefix for the component tree. */\n dataTestId?: string;\n /** Props forwarded to the FieldLabel. */\n labelProps?: Omit<\n React.ComponentProps<typeof FieldLabel>,\n \"htmlFor\" | \"children\"\n >;\n /** Props forwarded to the ComboboxContent. */\n contentProps?: Omit<\n React.ComponentProps<typeof ComboboxContent>,\n \"anchor\" | \"children\"\n >;\n /** Additional CSS class names for the outermost wrapper. */\n className?: string;\n /** Additional CSS class names for the input/trigger element. */\n inputClassName?: string;\n /** Children rendered inside the dropdown (overrides `options`). */\n children?: React.ReactNode;\n /**\n * Customize how each option is rendered. Receives the matched option (looked\n * up from `options` by value) and returns a ReactNode. Used in the dropdown\n * list and in the trigger (single-select label / multi-select chips).\n * String filtering still uses `option.label` for searchable behavior.\n */\n formatOptionLabel?: (option: SelectOptionBase) => React.ReactNode;\n /**\n * Extract the value string from a raw option object. Use when your options\n * are not already in `{ value, label }` shape (for example `{ id, name }`).\n * Called for each entry in `options`, each group child, `defaultOptions`, and\n * the array returned from `loadOptions`. Without this prop the option must\n * already have a `value` field.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getOptionValue?: (option: any) => string;\n /**\n * Extract the label string from a raw option object. Pairs with\n * `getOptionValue` to support custom option shapes without forcing\n * call-site `.map` boilerplate. Without this prop the option must already\n * have a `label` field.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getOptionLabel?: (option: any) => string;\n /**\n * Customize how the selected value is rendered in the trigger only. When\n * provided, takes precedence over `formatOptionLabel` for the trigger;\n * dropdown rows still use `formatOptionLabel` (or the default label).\n * Single-select only. Useful when the trigger needs a compact representation\n * (e.g. flag-only) while options show fuller content (flag + name).\n */\n formatTriggerLabel?: (option: SelectOptionBase) => React.ReactNode;\n}\n\ninterface SingleSelectProps extends SelectSharedProps {\n /** When true, multiple values can be selected and the trigger shows chips. @default false */\n isMulti?: false;\n /** Controlled selected value. */\n value?: string;\n /** Default selected value (uncontrolled). */\n defaultValue?: string;\n /** Callback fired when value changes. */\n onChange?: (value: string) => void;\n}\n\ninterface MultiSelectVariantProps extends SelectSharedProps {\n /** When true, multiple values can be selected and the trigger shows chips. */\n isMulti: true;\n /** Controlled selected values. */\n value?: string[];\n /** Default selected values (uncontrolled). */\n defaultValue?: string[];\n /** Callback fired when selected values change. */\n onChange?: (values: string[]) => void;\n /** Additional CSS class names for the chips container. */\n chipsClassName?: string;\n /** Hide the remove button on individual chips. */\n hideChipRemove?: boolean;\n}\n\nexport type SelectProps = SingleSelectProps | MultiSelectVariantProps;\n\nexport type MultiSelectProps = Extract<SelectProps, { isMulti: true }>;\n","import type React from \"react\";\n\nimport { CREATE_PREFIX } from \"./hooks/useCreatableItems\";\nimport { isOptionGroup } from \"./types\";\nimport type {\n SelectOption as MultiSelectOption,\n SelectOptionBase as MultiSelectOptionBase,\n} from \"./types\";\n\n/** Write an element into a callback or object ref, ignoring `null` refs. */\nexport function assignRef<T>(ref: React.Ref<T> | undefined, element: T | null) {\n if (typeof ref === \"function\") {\n ref(element);\n } else if (ref) {\n (ref as React.MutableRefObject<T | null>).current = element;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AccessorFn = (option: any) => string;\n\nexport function normalizeOption(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n option: any,\n getValue?: AccessorFn,\n getLabel?: AccessorFn\n): MultiSelectOptionBase {\n if (!getValue && !getLabel) return option as MultiSelectOptionBase;\n return {\n ...option,\n value: getValue ? getValue(option) : option?.value,\n label: getLabel ? getLabel(option) : option?.label,\n };\n}\n\nexport function normalizeOptions(\n options: MultiSelectOption[] | undefined,\n getValue?: AccessorFn,\n getLabel?: AccessorFn\n): MultiSelectOption[] | undefined {\n if (!options) return options;\n if (!getValue && !getLabel) return options;\n return options.map(opt =>\n opt && Array.isArray((opt as { options?: unknown[] }).options)\n ? {\n ...opt,\n options: (opt as { options: unknown[] }).options.map(o =>\n normalizeOption(o, getValue, getLabel)\n ),\n }\n : normalizeOption(opt, getValue, getLabel)\n );\n}\n\n/** Flatten grouped options into a flat lookup array. */\nexport function flattenOptions(\n options: MultiSelectOption[]\n): MultiSelectOptionBase[] {\n return options.flatMap(opt => (isOptionGroup(opt) ? opt.options : [opt]));\n}\n\n/** Check if any option is a group. */\nexport function hasGroups(options: MultiSelectOption[]): boolean {\n return options.some(isOptionGroup);\n}\n\n/** Convert options to base-ui `items` format for filtering support. */\nexport function toBaseUiItems(\n options: MultiSelectOption[]\n): string[] | { label: string; items: string[] }[] {\n if (hasGroups(options)) {\n return options.filter(isOptionGroup).map(g => ({\n label: g.label,\n items: g.options.map(o => o.value),\n }));\n }\n return (options as MultiSelectOptionBase[]).map(o => o.value);\n}\n\ninterface ResolveIsSearchableConfig {\n isSearchable: boolean;\n searchThreshold?: number;\n optionCount: number;\n /** Async, creatable and lazy-loaded lists grow after mount, so `optionCount`\n * isn't the real list size and the threshold must not apply. */\n isCountKnown: boolean;\n}\n\n/** Apply `searchThreshold` on top of `isSearchable`. */\nexport function resolveIsSearchable({\n isSearchable,\n searchThreshold,\n optionCount,\n isCountKnown,\n}: ResolveIsSearchableConfig): boolean {\n if (!isSearchable) return false;\n if (searchThreshold === undefined || !isCountKnown) return true;\n return optionCount >= searchThreshold;\n}\n\n/** Build the effective items array, appending a \"Create\" entry when needed. */\nexport function computeEffectiveItems(\n children: unknown,\n baseUiItems: string[] | { label: string; items: string[] }[] | undefined,\n showCreateOption: boolean,\n isGrouped: boolean,\n trimmedInput: string\n): string[] | { label: string; items: string[] }[] | undefined {\n if (children) return undefined;\n\n const createValue = showCreateOption\n ? `${CREATE_PREFIX}${trimmedInput}`\n : null;\n\n if (!baseUiItems && !createValue) return undefined;\n\n const base = baseUiItems ?? ([] as string[]);\n\n if (!createValue) return base;\n\n if (!isGrouped) {\n return [...(base as string[]), createValue];\n }\n\n return [\n ...(base as { label: string; items: string[] }[]),\n { label: \"\", items: [createValue] },\n ];\n}\n","import React from \"react\";\n\nimport { useAsyncOptions } from \"./useAsyncOptions\";\nimport { useLazyLoadSentinel } from \"./useLazyLoadSentinel\";\nimport {\n flattenOptions,\n hasGroups,\n toBaseUiItems,\n} from \"src/components/Select/utils\";\nimport type { SelectOption as MultiSelectOption } from \"src/components/Select/types\";\n\ninterface UseMultiSelectOptionsConfig {\n options?: MultiSelectOption[];\n loadOptions?: (\n inputValue: string\n ) => Promise<{ label: string; value: string; disabled?: boolean }[]>;\n defaultOptions?:\n | boolean\n | { label: string; value: string; disabled?: boolean }[];\n cacheOptions?: boolean;\n isAsyncLoadOptionEnabled?: boolean;\n fetchMore?: () => void;\n totalOptionsCount?: number;\n}\n\nexport function useMultiSelectOptions(props: UseMultiSelectOptionsConfig) {\n const isAsync = !!props.loadOptions;\n\n const { asyncOptions, isLoading, handleAsyncInputChange } = useAsyncOptions({\n loadOptions: props.loadOptions,\n defaultOptions: props.defaultOptions ?? false,\n cacheOptions: props.cacheOptions ?? false,\n });\n\n const resolvedOptions: MultiSelectOption[] = isAsync\n ? asyncOptions\n : (props.options ?? []);\n const flatOptions = flattenOptions(resolvedOptions);\n const isGrouped = hasGroups(resolvedOptions);\n\n const baseUiItems = React.useMemo(\n () =>\n resolvedOptions.length > 0 ? toBaseUiItems(resolvedOptions) : undefined,\n [resolvedOptions]\n );\n\n const hasMoreLazy =\n (props.isAsyncLoadOptionEnabled ?? false) &&\n typeof props.totalOptionsCount === \"number\" &&\n flatOptions.length < props.totalOptionsCount;\n\n const loaderCallbackRef = useLazyLoadSentinel({\n fetchMore: props.fetchMore,\n isEnabled: props.isAsyncLoadOptionEnabled ?? false,\n });\n\n return {\n isAsync,\n resolvedOptions,\n flatOptions,\n isGrouped,\n isLoading,\n handleAsyncInputChange,\n baseUiItems,\n hasMoreLazy,\n loaderCallbackRef,\n };\n}\n","import { useCallback, useId, useMemo, useState } from \"react\";\nimport type React from \"react\";\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react\";\n\nimport { buildAriaDescribedBy, buildTestIdPrefix } from \"src/utils/fieldIds\";\nimport { useMultiSelectOptions } from \"./useMultiSelectOptions\";\nimport { useReportInputChange } from \"./useReportInputChange\";\nimport { CREATE_PREFIX, isCreateValue } from \"./useCreatableItems\";\nimport { resolveIsSearchable } from \"src/components/Select/utils\";\nimport {\n INPUT_CHANGE_REASON,\n SIZE_CONFIG,\n} from \"src/components/Select/constants\";\nimport type { SelectProps } from \"src/components/Select/types\";\n\ntype SingleSelectProps = Extract<SelectProps, { isMulti?: false }>;\n\nconst defaultFormatCreateLabel = (v: string) => `Create \"${v}\"`;\n\nexport function useSelectState(props: SingleSelectProps) {\n const {\n id: idProp,\n size = \"medium\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n value: valueProp,\n defaultValue,\n onChange,\n dataTestId,\n isCreatable = false,\n onCreateOption,\n formatCreateLabel = defaultFormatCreateLabel,\n formatOptionLabel,\n formatTriggerLabel,\n isClearable = false,\n isDisabled = false,\n required = false,\n isSearchable: isSearchableProp = true,\n searchPosition = \"trigger\",\n searchPlaceholder = \"Search...\",\n searchThreshold,\n isAsyncLoadOptionEnabled = false,\n autoHighlight = true,\n onOpenChange,\n onInputChange,\n filterOption,\n children,\n } = props;\n\n const opt = useMultiSelectOptions(props);\n\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n const labelId = `label_${id}`;\n const sizeConfig = SIZE_CONFIG[size];\n\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? \"\"\n );\n const currentValue = isControlled ? (valueProp ?? \"\") : internalValue;\n\n const applyValue = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const handleValueChange = useCallback(\n (next: string | null) => {\n // Options carry whatever value the consumer put on them, so `next` is not\n // guaranteed to be a string. Apps migrating from neeto-ui (react-select)\n // routinely pass numeric option values, and those must round-trip\n // unchanged rather than crash on a string-only method.\n const raw = next ?? \"\";\n\n // Handle the creatable \"Create X\" option\n if (isCreateValue(raw)) {\n const newValue = raw.slice(CREATE_PREFIX.length);\n onCreateOption?.(newValue);\n applyValue(newValue);\n return;\n }\n\n applyValue(raw);\n },\n [applyValue, onCreateOption]\n );\n\n const [inputValue, setInputValueState] = useState(\"\");\n const trimmedInput = inputValue.trim();\n const reportInputChange = useReportInputChange(onInputChange);\n\n // The combobox input is controlled so that Base UI never fills it with the\n // selected option's label. Typing then always starts a fresh search instead\n // of appending to the previous selection, matching neeto-ui (react-select),\n // which renders the selected label as its own element and keeps the input\n // empty. Only user typing is accepted; every other reason (item press, close,\n // clear) resets the query.\n const combinedHandleInputValueChange = useCallback(\n (value: string, details?: { reason?: string }) => {\n const isTyping = details?.reason === INPUT_CHANGE_REASON;\n const nextValue = isTyping ? value : \"\";\n setInputValueState(nextValue);\n reportInputChange(nextValue);\n // Skip refetching on a programmatic reset: keeping the last async results\n // around is what lets the trigger resolve the selected option's label.\n if (isTyping && opt.isAsync) opt.handleAsyncInputChange(nextValue);\n },\n [reportInputChange, opt.isAsync, opt.handleAsyncInputChange]\n );\n\n const handleClear = useCallback(() => {\n applyValue(\"\");\n }, [applyValue]);\n\n const showCreateOption = useMemo(() => {\n if (\n !isCreatable ||\n trimmedInput.length === 0 ||\n currentValue === trimmedInput\n )\n return false;\n\n const lower = trimmedInput.toLowerCase();\n return !opt.flatOptions.some(\n o =>\n String(o.label).toLowerCase() === lower ||\n String(o.value).toLowerCase() === lower\n );\n }, [isCreatable, trimmedInput, currentValue, opt.flatOptions]);\n\n const effectiveItems = useMemo(() => {\n if (children) return undefined;\n const base = opt.baseUiItems;\n if (!showCreateOption) return base;\n const createValue = `${CREATE_PREFIX}${trimmedInput}`;\n if (!opt.isGrouped) {\n return [...((base as string[]) ?? []), createValue];\n }\n return [\n ...((base as { label: string; items: string[] }[]) ?? []),\n { label: \"\", items: [createValue] },\n ];\n }, [\n children,\n opt.baseUiItems,\n opt.isGrouped,\n showCreateOption,\n trimmedInput,\n ]);\n\n // Base UI's own matching, but on the query tracked above rather than the one\n // it passes in: Base UI freezes its query while the popup plays its exit\n // animation, and a reopen inside that window strands it, after which the list\n // ignores the input entirely (neeto-desk-web#26287). `multiple` selects the\n // plain item matcher — the single-selection variant also returns every option\n // once the query equals the selected label, which only makes sense while Base\n // UI holds that label in the input, and this Select keeps the input empty.\n const baseFilter = ComboboxPrimitive.useFilter({ multiple: true });\n const optionFilter = useCallback(\n (itemValue: string, _query: string, itemToString?: (v: string) => string) =>\n isCreateValue(itemValue) ||\n baseFilter.contains(itemValue, trimmedInput, itemToString),\n [baseFilter, trimmedInput]\n );\n\n const ariaDescribedBy = buildAriaDescribedBy(\n error,\n errorId,\n helpText,\n helpTextId\n );\n const testIdPrefix = buildTestIdPrefix(dataTestId, label);\n const showClearButton =\n isClearable && currentValue !== \"\" && currentValue !== null && !isDisabled;\n\n const isServerSearch = filterOption === null;\n const isSearchable = resolveIsSearchable({\n isSearchable: isSearchableProp,\n searchThreshold,\n optionCount: opt.flatOptions.length,\n isCountKnown:\n !opt.isAsync &&\n !isCreatable &&\n !isAsyncLoadOptionEnabled &&\n !isServerSearch,\n });\n\n const flatOptionsMap = useMemo(\n () => new Map(opt.flatOptions.map(o => [o.value, o])),\n [opt.flatOptions]\n );\n\n const labelForValue = useCallback(\n (val: string) => {\n if (isCreateValue(val)) {\n return formatCreateLabel(val.slice(CREATE_PREFIX.length));\n }\n // Doubles as Base UI's `itemToStringLabel`, which filters on the result,\n // so a non-string label must be coerced rather than passed through.\n return String(flatOptionsMap.get(val)?.label ?? val ?? \"\");\n },\n [flatOptionsMap, formatCreateLabel]\n );\n\n const renderOption = useCallback<(val: string) => React.ReactNode>(\n val => {\n if (formatOptionLabel && !isCreateValue(val)) {\n const option = flatOptionsMap.get(val);\n if (option) return formatOptionLabel(option);\n }\n return labelForValue(val);\n },\n [formatOptionLabel, flatOptionsMap, labelForValue]\n );\n\n const renderTrigger = useCallback<(val: string) => React.ReactNode>(\n val => {\n if (formatTriggerLabel && !isCreateValue(val)) {\n const option = flatOptionsMap.get(val);\n if (option) return formatTriggerLabel(option);\n }\n return renderOption(val);\n },\n [formatTriggerLabel, flatOptionsMap, renderOption]\n );\n\n return {\n ...opt,\n id,\n errorId,\n helpTextId,\n labelId,\n sizeConfig,\n isControlled,\n currentValue,\n effectiveItems,\n optionFilter: isServerSearch ? null : optionFilter,\n handleValueChange,\n handleInputValueChange: combinedHandleInputValueChange,\n handleClear,\n showCreateOption,\n showClearButton,\n ariaDescribedBy,\n testIdPrefix,\n labelForValue,\n renderOption,\n renderTrigger,\n flatOptionsMap,\n label,\n error,\n helpText,\n isDisabled,\n required,\n isSearchable,\n searchPosition,\n searchPlaceholder,\n inputValue,\n autoHighlight,\n onOpenChange,\n isClearable,\n };\n}\n","import { useCallback, useId, useMemo, useState } from \"react\";\nimport type React from \"react\";\n\nconst defaultFormatCreateLabel = (v: string) => `Create \"${v}\"`;\n\nimport { buildAriaDescribedBy, buildTestIdPrefix } from \"src/utils/fieldIds\";\nimport {\n useCreatableItems,\n CREATE_PREFIX,\n isCreateValue,\n} from \"./useCreatableItems\";\nimport { useMultiSelectOptions } from \"./useMultiSelectOptions\";\nimport { resolveIsSearchable } from \"src/components/Select/utils\";\nimport { SIZE_CONFIG } from \"src/components/Select/constants\";\nimport type { MultiSelectProps } from \"src/components/Select/types\";\n\nexport function useMultiSelectState(props: MultiSelectProps) {\n const {\n id: idProp,\n size = \"medium\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n value: valueProp,\n defaultValue,\n onChange,\n dataTestId,\n isCreatable = false,\n onCreateOption,\n formatCreateLabel = defaultFormatCreateLabel,\n formatOptionLabel,\n isSearchable: isSearchableProp = true,\n searchPosition = \"trigger\",\n searchPlaceholder = \"Search...\",\n searchThreshold,\n isAsyncLoadOptionEnabled = false,\n onInputChange,\n filterOption,\n children,\n } = props;\n\n const opt = useMultiSelectOptions(props);\n\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n const labelId = `label_${id}`;\n const sizeConfig = SIZE_CONFIG[size];\n\n const isServerSearch = filterOption === null;\n const isSearchable = resolveIsSearchable({\n isSearchable: isSearchableProp,\n searchThreshold,\n optionCount: opt.flatOptions.length,\n isCountKnown:\n !opt.isAsync &&\n !isCreatable &&\n !isAsyncLoadOptionEnabled &&\n !isServerSearch,\n });\n\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState<string[]>(\n defaultValue ?? []\n );\n const selectedValues = isControlled ? valueProp : internalValue;\n\n const handleChange = useCallback(\n (values: string[]) => {\n setInternalValue(values);\n onChange?.(values);\n },\n [onChange]\n );\n\n const {\n showCreateOption,\n effectiveItems,\n optionFilter,\n handleInputValueChange,\n handleValueChange,\n } = useCreatableItems({\n isCreatable,\n isGrouped: opt.isGrouped,\n flatOptions: opt.flatOptions,\n selectedValues,\n baseUiItems: opt.baseUiItems,\n onCreateOption,\n onChange: handleChange,\n onAsyncInputChange: opt.isAsync ? opt.handleAsyncInputChange : undefined,\n onInputChange,\n children,\n });\n\n const ariaDescribedBy = buildAriaDescribedBy(\n error,\n errorId,\n helpText,\n helpTextId\n );\n const testIdPrefix = buildTestIdPrefix(dataTestId, label);\n\n const flatOptionsMap = useMemo(\n () => new Map(opt.flatOptions.map(o => [o.value, o])),\n [opt.flatOptions]\n );\n\n const labelForValue = useCallback(\n (val: string) => {\n if (isCreateValue(val)) {\n return formatCreateLabel(val.slice(CREATE_PREFIX.length));\n }\n // Doubles as Base UI's `itemToStringLabel`, which filters on the result,\n // so a non-string label must be coerced rather than passed through.\n return String(flatOptionsMap.get(val)?.label ?? val ?? \"\");\n },\n [flatOptionsMap, formatCreateLabel]\n );\n\n const renderOption = useCallback<(val: string) => React.ReactNode>(\n val => {\n if (formatOptionLabel && !isCreateValue(val)) {\n const option = flatOptionsMap.get(val);\n if (option) return formatOptionLabel(option);\n }\n return labelForValue(val);\n },\n [formatOptionLabel, flatOptionsMap, labelForValue]\n );\n\n return {\n ...opt,\n id,\n errorId,\n helpTextId,\n labelId,\n sizeConfig,\n isControlled,\n selectedValues,\n isSearchable,\n searchPosition,\n searchPlaceholder,\n effectiveItems,\n optionFilter: isServerSearch ? null : optionFilter,\n handleInputValueChange,\n handleValueChange,\n showCreateOption,\n ariaDescribedBy,\n testIdPrefix,\n labelForValue,\n renderOption,\n flatOptionsMap,\n label,\n error,\n helpText,\n };\n}\n","import type React from \"react\";\n\nimport { ComboboxItem } from \"src/primitives/Combobox\";\nimport { hyphenize } from \"src/utils/hyphenize\";\nimport { CREATE_PREFIX, isCreateValue } from \"./hooks/useCreatableItems\";\nimport type { OptionBase } from \"./types\";\n\ninterface OptionItemProps {\n val: string;\n flatOptionsMap: Map<string, OptionBase>;\n renderOption: (val: string) => React.ReactNode;\n testIdPrefix?: string;\n}\n\nexport function OptionItem({\n val,\n flatOptionsMap,\n renderOption,\n testIdPrefix,\n}: OptionItemProps) {\n const isCreateItem = isCreateValue(val);\n const optionLabel = isCreateItem\n ? `Create \"${val.slice(CREATE_PREFIX.length)}\"`\n : (flatOptionsMap.get(val)?.label ?? val);\n\n return (\n <ComboboxItem\n key={val}\n value={val}\n disabled={!isCreateItem && flatOptionsMap.get(val)?.disabled}\n className={isCreateItem ? \"text-primary\" : undefined}\n {...(testIdPrefix\n ? { \"data-testid\": `${hyphenize(optionLabel)}-select-option` }\n : {})}\n >\n {renderOption(val)}\n </ComboboxItem>\n );\n}\n","import type React from \"react\";\n\nimport {\n ComboboxList,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n} from \"src/primitives/Combobox\";\nimport { Spinner } from \"src/primitives/Spinner\";\nimport { OptionItem } from \"./OptionItem\";\nimport type { DropdownPassthroughProps } from \"./MultiSelectCombobox.types\";\n\ninterface MultiSelectDropdownProps extends DropdownPassthroughProps {\n renderOption: (val: string) => React.ReactNode;\n testIdPrefix?: string;\n children?: React.ReactNode;\n}\n\nexport function MultiSelectDropdown({\n resolvedOptions,\n flatOptionsMap,\n isGrouped,\n isLoading,\n loadingMessage,\n emptyMessage,\n showCreateOption,\n renderOption,\n testIdPrefix,\n hasMoreLazy,\n loaderCallbackRef,\n children,\n}: MultiSelectDropdownProps) {\n return (\n <ComboboxList\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-menu` }\n : {})}\n >\n {isLoading && (\n <div className=\"flex w-full justify-center py-2 text-center text-sm text-muted-foreground\">\n {loadingMessage}\n </div>\n )}\n {!isLoading && !showCreateOption && (\n <ComboboxEmpty>{emptyMessage}</ComboboxEmpty>\n )}\n {children ??\n (resolvedOptions.length > 0 || showCreateOption ? (\n isGrouped ? (\n <ComboboxCollection>\n {(group: { label: string; items: string[] }) => (\n <ComboboxGroup\n key={group.label || \"__create__\"}\n items={group.items}\n >\n {group.label && <ComboboxLabel>{group.label}</ComboboxLabel>}\n <ComboboxCollection>\n {(val: string) => (\n <OptionItem\n key={val}\n val={val}\n flatOptionsMap={flatOptionsMap}\n renderOption={renderOption}\n testIdPrefix={testIdPrefix}\n />\n )}\n </ComboboxCollection>\n </ComboboxGroup>\n )}\n </ComboboxCollection>\n ) : (\n <ComboboxCollection>\n {(val: string) => (\n <OptionItem\n key={val}\n val={val}\n flatOptionsMap={flatOptionsMap}\n renderOption={renderOption}\n testIdPrefix={testIdPrefix}\n />\n )}\n </ComboboxCollection>\n )\n ) : null)}\n {hasMoreLazy && (\n <div\n ref={loaderCallbackRef}\n className=\"flex w-full items-center justify-center py-3\"\n data-testid={`${testIdPrefix}-lazy-loader`}\n >\n <Spinner />\n </div>\n )}\n </ComboboxList>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react\";\n\nimport { assignRef } from \"./utils\";\n\ninterface SelectAnchorProps {\n /**\n * Render the anchor as a `Combobox.Trigger` instead of a plain wrapper. Used\n * when the control itself is not a search input — either because search is\n * off, or because the search field lives inside the dropdown. Base UI then\n * treats this element as the combobox: it gets `role=\"combobox\"`,\n * `tabIndex=0` and the expanded/haspopup state.\n */\n renderAsTrigger: boolean;\n className?: string;\n dataTestId?: string;\n /**\n * Accessibility props applied only when the trigger, rather than a hidden\n * input, is the form control (`searchPosition=\"content\"`).\n */\n triggerFieldProps?: {\n id?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n \"aria-required\"?: boolean;\n \"aria-invalid\"?: boolean;\n };\n children: React.ReactNode;\n}\n\n/** Drop undefined entries so they don't clobber the props Base UI supplies. */\nconst omitUndefined = <T extends Record<string, unknown>>(props: T): T =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined)\n ) as T;\n\nexport const SelectAnchor = forwardRef<HTMLDivElement, SelectAnchorProps>(\n (\n { renderAsTrigger, className, dataTestId, triggerFieldProps, children },\n ref\n ) => {\n if (!renderAsTrigger) {\n return (\n <div\n ref={ref}\n className={className}\n {...(dataTestId ? { \"data-testid\": dataTestId } : {})}\n >\n {children}\n </div>\n );\n }\n\n const { id, ...ariaProps } = triggerFieldProps ?? {};\n\n return (\n <ComboboxPrimitive.Trigger\n nativeButton={false}\n // Passed to the Trigger itself (not the rendered element) so Base UI\n // registers it as the labelable control.\n {...(id ? { id } : {})}\n // `props.ref` carries Base UI's own trigger registration (it records the\n // element on the combobox store). Overwriting it instead of merging\n // leaves `triggerElement` null, which breaks focus restoration when the\n // popup closes. Everything else may be spread over `props` safely:\n // `ariaProps` only holds static field attributes, never the dynamic\n // state (`aria-expanded`, `aria-controls`, `role`) Base UI manages.\n render={({ ref: baseUiRef, ...props }) => (\n <div\n {...props}\n {...omitUndefined(ariaProps)}\n ref={element => {\n assignRef(baseUiRef, element);\n assignRef(ref, element);\n }}\n className={className}\n {...(dataTestId ? { \"data-testid\": dataTestId } : {})}\n />\n )}\n >\n {children}\n </ComboboxPrimitive.Trigger>\n );\n }\n);\n\nSelectAnchor.displayName = \"SelectAnchor\";\n","import { forwardRef, useCallback, useState } from \"react\";\nimport { ChevronDownIcon, XIcon } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Combobox,\n ComboboxContent,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxInput,\n ComboboxTrigger,\n} from \"src/primitives/Combobox\";\nimport { MultiSelectDropdown } from \"./MultiSelectDropdown\";\nimport { SelectAnchor } from \"./SelectAnchor\";\nimport { assignRef } from \"./utils\";\nimport type { SelectComboboxProps } from \"./SelectCombobox.types\";\n\nexport const SelectCombobox = forwardRef<HTMLInputElement, SelectComboboxProps>(\n (\n {\n name,\n id,\n labelId,\n effectiveItems,\n labelForValue,\n renderOption,\n renderTrigger,\n isSearchable,\n searchPosition,\n searchPlaceholder,\n inputValue,\n isAsync,\n optionFilter,\n currentValue,\n handleValueChange,\n handleInputValueChange,\n handleClear,\n onOpenChange,\n isDisabled,\n autoHighlight,\n required,\n showClearButton,\n sizeConfig,\n error,\n placeholder,\n ariaDescribedBy,\n testIdPrefix,\n inputClassName,\n contentProps,\n dropdownProps,\n children,\n },\n ref\n ) => {\n const [anchorEl, setAnchorEl] = useState<HTMLDivElement | null>(null);\n\n // With the search field inside the dropdown, the trigger itself is the form\n // control. Only one `Combobox.Input` may be mounted at a time, so the\n // trigger input is dropped entirely in that mode.\n const isContentSearch = isSearchable && searchPosition === \"content\";\n const renderTriggerInput = searchPosition !== \"content\";\n // Whether the user types into the control itself.\n const isTriggerSearch = isSearchable && renderTriggerInput;\n const useTriggerAnchor = !isTriggerSearch;\n // Emptiness is \"\" (the sentinel `useSelectState` normalises to), never\n // falsiness: a numeric option value of 0 is a real selection.\n const hasValue = currentValue !== \"\" && currentValue !== null;\n // Mirrors react-select: the selected label is its own element and gets out\n // of the way as soon as there is a search query.\n const showValue = hasValue && (!isTriggerSearch || inputValue === \"\");\n const showPlaceholder = !hasValue && !isTriggerSearch;\n\n const setTriggerEl = useCallback(\n (element: HTMLDivElement | null) => {\n setAnchorEl(element);\n // Without a trigger input there is no `<input>` to forward. Base UI\n // makes the trigger itself the field control in that mode (it gets\n // `role=\"combobox\"` and is what `useRegisterFieldControl` registers),\n // so the trigger element is what the ref must point at. It is an\n // `HTMLDivElement`, kept under the component's `HTMLInputElement` ref\n // type so the public API stays stable; see the `searchPosition` docs.\n if (renderTriggerInput) return;\n assignRef(ref as unknown as React.Ref<HTMLDivElement>, element);\n },\n [ref, renderTriggerInput]\n );\n\n const handleClearClick = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n event.preventDefault();\n handleClear();\n },\n [handleClear]\n );\n\n return (\n // @ts-expect-error — conditional spread creates a union that TS cannot narrow to the Combobox discriminated-union props\n <Combobox\n name={name}\n {...(effectiveItems && !children\n ? {\n items: effectiveItems,\n itemToStringLabel: labelForValue as (val: unknown) => string,\n ...(!isSearchable || isAsync || !optionFilter\n ? { filter: null }\n : { filter: optionFilter }),\n }\n : {})}\n value={currentValue}\n onValueChange={handleValueChange as (next: unknown) => void}\n // Controlled so Base UI never seeds the query with the selected label.\n inputValue={inputValue}\n onInputValueChange={handleInputValueChange}\n onOpenChange={onOpenChange}\n disabled={isDisabled}\n autoHighlight={autoHighlight}\n >\n <SelectAnchor\n ref={setTriggerEl}\n dataTestId={testIdPrefix}\n renderAsTrigger={useTriggerAnchor}\n className={useTriggerAnchor ? \"cursor-pointer\" : undefined}\n triggerFieldProps={\n renderTriggerInput\n ? undefined\n : {\n id,\n \"aria-labelledby\": labelId,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-required\": required || undefined,\n \"aria-invalid\": !!error || undefined,\n }\n }\n >\n <ComboboxChips\n className={cn(\n sizeConfig.chips,\n !!error &&\n \"border-destructive ring-3 ring-destructive/20 dark:border-destructive/50 dark:ring-destructive/40\",\n inputClassName\n )}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-container` }\n : {})}\n >\n {/* Stacked in one grid cell so the label sits behind the caret\n instead of pushing it to the right, the way react-select does. */}\n <div className=\"grid min-w-0 flex-1 items-center [&>*]:col-start-1 [&>*]:row-start-1\">\n {showValue && (\n <span className=\"min-w-0 truncate\">\n {renderTrigger(currentValue)}\n </span>\n )}\n {showPlaceholder && (\n <span className=\"min-w-0 truncate text-placeholder\">\n {placeholder}\n </span>\n )}\n {renderTriggerInput && (\n <ComboboxChipsInput\n ref={ref}\n id={id}\n placeholder={\n isTriggerSearch && !hasValue ? placeholder : undefined\n }\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n aria-required={required || undefined}\n className={cn(\n sizeConfig.input,\n \"w-full min-w-0\",\n !isSearchable && \"w-0 overflow-hidden p-0 opacity-0\"\n )}\n disabled={isDisabled}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-input` }\n : {})}\n />\n )}\n </div>\n {showClearButton && (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Clear selection\"\n className=\"shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={handleClearClick}\n >\n <XIcon className={sizeConfig.clearIcon} />\n </button>\n )}\n {isTriggerSearch ? (\n <ComboboxTrigger\n className={cn(\n \"shrink-0 bg-transparent p-0 text-muted-foreground hover:bg-transparent\",\n sizeConfig.icon\n )}\n />\n ) : (\n <ChevronDownIcon\n aria-hidden\n className={cn(\n \"pointer-events-none shrink-0 text-muted-foreground\",\n sizeConfig.icon\n )}\n />\n )}\n </ComboboxChips>\n </SelectAnchor>\n\n <ComboboxContent anchor={anchorEl} {...contentProps}>\n {isContentSearch && (\n <ComboboxInput\n showTrigger={false}\n placeholder={searchPlaceholder}\n // Base UI gives this input no accessible name of its own. Tie it\n // to the field label when there is one so the popup's search box\n // announces what it filters; fall back to its own placeholder.\n {...(labelId\n ? { \"aria-labelledby\": labelId }\n : { \"aria-label\": searchPlaceholder })}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-input` }\n : {})}\n />\n )}\n <MultiSelectDropdown\n {...dropdownProps}\n renderOption={renderOption}\n testIdPrefix={testIdPrefix}\n >\n {children}\n </MultiSelectDropdown>\n </ComboboxContent>\n </Combobox>\n );\n }\n);\n\nSelectCombobox.displayName = \"SelectCombobox\";\n","import { forwardRef, useCallback, useState } from \"react\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Combobox,\n ComboboxContent,\n ComboboxChips,\n ComboboxChip,\n ComboboxChipsInput,\n ComboboxInput,\n} from \"src/primitives/Combobox\";\nimport { MultiSelectDropdown } from \"./MultiSelectDropdown\";\nimport { SelectAnchor } from \"./SelectAnchor\";\nimport { assignRef } from \"./utils\";\nimport type { MultiSelectComboboxProps } from \"./MultiSelectCombobox.types\";\n\nexport const MultiSelectCombobox = forwardRef<\n HTMLInputElement,\n MultiSelectComboboxProps\n>(\n (\n {\n name,\n id,\n labelId,\n effectiveItems,\n labelForValue,\n renderOption,\n isSearchable,\n searchPosition,\n searchPlaceholder,\n isAsync,\n optionFilter,\n isControlled,\n valueProp,\n defaultValue,\n selectedValues,\n handleValueChange,\n handleInputValueChange,\n onOpenChange,\n isDisabled,\n autoHighlight,\n required,\n sizeConfig,\n error,\n chipsClassName,\n inputClassName,\n placeholder,\n hideChipRemove,\n ariaDescribedBy,\n testIdPrefix,\n contentProps,\n dropdownProps,\n children,\n },\n ref\n ) => {\n const [anchorEl, setAnchorEl] = useState<HTMLDivElement | null>(null);\n\n // Only one `Combobox.Input` may be mounted, so moving search into the\n // dropdown means the chips container loses its input and the trigger\n // itself becomes the form control.\n const isContentSearch = isSearchable && searchPosition === \"content\";\n const renderTriggerInput = searchPosition !== \"content\";\n const isTriggerSearch = isSearchable && renderTriggerInput;\n const useTriggerAnchor = !isTriggerSearch;\n\n const setTriggerEl = useCallback(\n (element: HTMLDivElement | null) => {\n setAnchorEl(element);\n // Without a trigger input there is no `<input>` to forward. Base UI\n // makes the trigger itself the field control in that mode, so the\n // trigger element is what the ref must point at. It is an\n // `HTMLDivElement`, kept under the component's `HTMLInputElement` ref\n // type so the public API stays stable; see the `searchPosition` docs.\n if (renderTriggerInput) return;\n assignRef(ref as unknown as React.Ref<HTMLDivElement>, element);\n },\n [ref, renderTriggerInput]\n );\n\n return (\n // @ts-expect-error — conditional spread creates a union that TS cannot narrow to the Combobox discriminated-union props\n <Combobox\n multiple\n name={name}\n {...(effectiveItems && !children\n ? {\n items: effectiveItems,\n itemToStringLabel: labelForValue as (val: unknown) => string,\n ...(!isSearchable || isAsync || !optionFilter\n ? { filter: null }\n : { filter: optionFilter }),\n }\n : {})}\n {...(isControlled ? { value: valueProp } : { defaultValue })}\n onValueChange={handleValueChange as (...args: unknown[]) => void}\n // Always tracked — `optionFilter` matches on this query.\n onInputValueChange={handleInputValueChange}\n onOpenChange={onOpenChange}\n disabled={isDisabled}\n autoHighlight={autoHighlight}\n >\n <SelectAnchor\n ref={setTriggerEl}\n renderAsTrigger={useTriggerAnchor}\n className={useTriggerAnchor ? \"cursor-pointer\" : undefined}\n triggerFieldProps={\n renderTriggerInput\n ? undefined\n : {\n id,\n \"aria-labelledby\": labelId,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-required\": required || undefined,\n \"aria-invalid\": !!error || undefined,\n }\n }\n >\n <ComboboxChips\n className={cn(\n sizeConfig.chips,\n !!error &&\n \"border-destructive ring-3 ring-destructive/20 dark:border-destructive/50 dark:ring-destructive/40\",\n chipsClassName,\n inputClassName\n )}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-container` }\n : {})}\n >\n {selectedValues.map((val, index) => (\n <ComboboxChip\n key={val}\n className={sizeConfig.chip}\n showRemove={!hideChipRemove}\n // Base UI keeps chips at `tabIndex=-1` because the trigger\n // input is normally what you arrow out of to reach them. With\n // no trigger input there is nothing to arrow out of, so the\n // chip group becomes its own tab stop: the first chip is\n // tabbable and Base UI's own chip handler takes over from\n // there (arrows to move between chips, Backspace/Delete to\n // remove, ArrowDown to open the list). Disabled chips stay out\n // of the tab order — their key handler is inert.\n {...(renderTriggerInput || isDisabled\n ? {}\n : { tabIndex: index === 0 ? 0 : -1 })}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-chip` }\n : {})}\n >\n {renderOption(val)}\n </ComboboxChip>\n ))}\n {renderTriggerInput ? (\n <ComboboxChipsInput\n ref={ref}\n id={id}\n placeholder={\n isTriggerSearch && selectedValues.length === 0\n ? placeholder\n : undefined\n }\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n aria-required={required || undefined}\n className={cn(\n sizeConfig.input,\n !isSearchable && \"w-0 min-w-0 overflow-hidden p-0 opacity-0\"\n )}\n disabled={isDisabled}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-input` }\n : {})}\n />\n ) : (\n <>\n {selectedValues.length === 0 && (\n <span className=\"min-w-0 flex-1 truncate text-placeholder\">\n {placeholder}\n </span>\n )}\n <ChevronDownIcon\n aria-hidden\n className={cn(\n \"pointer-events-none ms-auto shrink-0 text-muted-foreground\",\n sizeConfig.icon\n )}\n />\n </>\n )}\n </ComboboxChips>\n </SelectAnchor>\n <ComboboxContent anchor={anchorEl} {...contentProps}>\n {isContentSearch && (\n <ComboboxInput\n showTrigger={false}\n placeholder={searchPlaceholder}\n // Base UI gives this input no accessible name of its own. Tie it\n // to the field label when there is one so the popup's search box\n // announces what it filters; fall back to its own placeholder.\n {...(labelId\n ? { \"aria-labelledby\": labelId }\n : { \"aria-label\": searchPlaceholder })}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-input` }\n : {})}\n />\n )}\n <MultiSelectDropdown\n {...dropdownProps}\n renderOption={renderOption}\n testIdPrefix={testIdPrefix}\n >\n {children}\n </MultiSelectDropdown>\n </ComboboxContent>\n </Combobox>\n );\n }\n);\nMultiSelectCombobox.displayName = \"MultiSelectCombobox\";\n","import { forwardRef, useMemo } from \"react\";\n\nimport { useSelectState } from \"./hooks/useSelectState\";\nimport { useMultiSelectState } from \"./hooks/useMultiSelectState\";\nimport { SelectFieldWrapper } from \"./SelectFieldWrapper\";\nimport { SelectCombobox } from \"./SelectCombobox\";\nimport { MultiSelectCombobox } from \"./MultiSelectCombobox\";\nimport type { SelectProps, MultiSelectProps, SelectOptionBase } from \"./types\";\nimport { normalizeOption, normalizeOptions } from \"./utils\";\n\nexport type {\n SelectProps,\n SelectOption,\n SelectOptionBase,\n SelectOptionGroup,\n} from \"./types\";\n\ntype SingleSelectProps = Extract<SelectProps, { isMulti?: false }>;\n\nconst SingleSelectInner = forwardRef<HTMLInputElement, SingleSelectProps>(\n (props, ref) => {\n const {\n id,\n label,\n error,\n helpText,\n errorId,\n helpTextId,\n labelId,\n isDisabled,\n required,\n testIdPrefix,\n effectiveItems,\n labelForValue,\n renderOption,\n renderTrigger,\n isSearchable,\n searchPosition,\n searchPlaceholder,\n inputValue,\n isAsync,\n optionFilter,\n isControlled,\n currentValue,\n handleValueChange,\n handleInputValueChange,\n handleClear,\n autoHighlight,\n showClearButton,\n sizeConfig,\n ariaDescribedBy,\n resolvedOptions,\n flatOptionsMap,\n isGrouped,\n isLoading,\n showCreateOption,\n hasMoreLazy,\n loaderCallbackRef,\n } = useSelectState(props);\n\n return (\n <SelectFieldWrapper\n id={id}\n label={label}\n error={error}\n helpText={helpText}\n errorId={errorId}\n helpTextId={helpTextId}\n isDisabled={isDisabled}\n required={required}\n testIdPrefix={testIdPrefix}\n labelProps={props.labelProps}\n className={props.className}\n labelId={labelId}\n focusTargetOnLabelClick={searchPosition === \"content\"}\n >\n <SelectCombobox\n ref={ref}\n name={props.name}\n id={id}\n labelId={label ? labelId : undefined}\n effectiveItems={effectiveItems}\n labelForValue={labelForValue}\n renderOption={renderOption}\n renderTrigger={renderTrigger}\n isSearchable={isSearchable}\n searchPosition={searchPosition}\n searchPlaceholder={searchPlaceholder}\n inputValue={inputValue}\n isAsync={isAsync}\n optionFilter={optionFilter}\n isControlled={isControlled}\n valueProp={props.value}\n defaultValue={props.defaultValue}\n currentValue={currentValue}\n handleValueChange={handleValueChange}\n handleInputValueChange={handleInputValueChange}\n handleClear={handleClear}\n onOpenChange={props.onOpenChange}\n isDisabled={isDisabled}\n autoHighlight={autoHighlight}\n required={required}\n isClearable={props.isClearable ?? false}\n showClearButton={showClearButton}\n sizeConfig={sizeConfig}\n error={error}\n placeholder={props.placeholder ?? \"\"}\n ariaDescribedBy={ariaDescribedBy}\n testIdPrefix={testIdPrefix}\n inputClassName={props.inputClassName}\n contentProps={props.contentProps}\n dropdownProps={{\n resolvedOptions,\n flatOptionsMap,\n isGrouped,\n isLoading,\n loadingMessage: props.loadingMessage ?? \"Loading\\u2026\",\n emptyMessage: props.emptyMessage ?? \"No results found.\",\n showCreateOption,\n hasMoreLazy,\n loaderCallbackRef,\n }}\n >\n {props.children}\n </SelectCombobox>\n </SelectFieldWrapper>\n );\n }\n);\nSingleSelectInner.displayName = \"SingleSelectInner\";\n\nconst MultiSelectInner = forwardRef<HTMLInputElement, MultiSelectProps>(\n (props, ref) => {\n const {\n id,\n label,\n error,\n helpText,\n errorId,\n helpTextId,\n labelId,\n testIdPrefix,\n effectiveItems,\n labelForValue,\n renderOption,\n isSearchable,\n searchPosition,\n searchPlaceholder,\n isAsync,\n optionFilter,\n isControlled,\n selectedValues,\n handleValueChange,\n handleInputValueChange,\n sizeConfig,\n ariaDescribedBy,\n resolvedOptions,\n flatOptionsMap,\n isGrouped,\n isLoading,\n showCreateOption,\n hasMoreLazy,\n loaderCallbackRef,\n } = useMultiSelectState(props);\n const { isDisabled = false, required = false } = props;\n\n return (\n <SelectFieldWrapper\n id={id}\n label={label}\n error={error}\n helpText={helpText}\n errorId={errorId}\n helpTextId={helpTextId}\n isDisabled={isDisabled}\n required={required}\n testIdPrefix={testIdPrefix}\n labelProps={props.labelProps}\n className={props.className}\n labelId={labelId}\n focusTargetOnLabelClick={searchPosition === \"content\"}\n >\n <MultiSelectCombobox\n ref={ref}\n name={props.name}\n id={id}\n labelId={label ? labelId : undefined}\n effectiveItems={effectiveItems}\n labelForValue={labelForValue}\n renderOption={renderOption}\n isSearchable={isSearchable}\n searchPosition={searchPosition}\n searchPlaceholder={searchPlaceholder}\n isAsync={isAsync}\n optionFilter={optionFilter}\n isControlled={isControlled}\n valueProp={props.value}\n defaultValue={props.defaultValue}\n selectedValues={selectedValues}\n handleValueChange={handleValueChange as (...args: unknown[]) => void}\n handleInputValueChange={\n handleInputValueChange as (...args: unknown[]) => void\n }\n onOpenChange={props.onOpenChange}\n isDisabled={isDisabled}\n autoHighlight={props.autoHighlight ?? true}\n sizeConfig={sizeConfig}\n error={error}\n chipsClassName={props.chipsClassName}\n inputClassName={props.inputClassName}\n placeholder={props.placeholder ?? \"\"}\n hideChipRemove={props.hideChipRemove ?? false}\n ariaDescribedBy={ariaDescribedBy}\n required={required}\n testIdPrefix={testIdPrefix}\n contentProps={props.contentProps}\n dropdownProps={{\n resolvedOptions,\n flatOptionsMap,\n isGrouped,\n isLoading,\n loadingMessage: props.loadingMessage ?? \"Loading\\u2026\",\n emptyMessage: props.emptyMessage ?? \"No results found.\",\n showCreateOption,\n hasMoreLazy,\n loaderCallbackRef,\n }}\n >\n {props.children}\n </MultiSelectCombobox>\n </SelectFieldWrapper>\n );\n }\n);\nMultiSelectInner.displayName = \"MultiSelectInner\";\n\nconst Select = forwardRef<HTMLInputElement, SelectProps>((props, ref) => {\n const {\n getOptionValue,\n getOptionLabel,\n options,\n defaultOptions,\n loadOptions,\n ...rest\n } = props;\n const hasAccessors = Boolean(getOptionValue || getOptionLabel);\n\n const normalizedOptions = useMemo(\n () =>\n hasAccessors\n ? normalizeOptions(options, getOptionValue, getOptionLabel)\n : options,\n [hasAccessors, options, getOptionValue, getOptionLabel]\n );\n\n const normalizedDefaultOptions = useMemo(() => {\n if (!hasAccessors || !Array.isArray(defaultOptions)) {\n return defaultOptions;\n }\n return defaultOptions.map(o =>\n normalizeOption(o, getOptionValue, getOptionLabel)\n );\n }, [hasAccessors, defaultOptions, getOptionValue, getOptionLabel]);\n\n const normalizedLoadOptions = useMemo(() => {\n if (!hasAccessors || !loadOptions) return loadOptions;\n return async (input: string): Promise<SelectOptionBase[]> => {\n const result = await loadOptions(input);\n return result.map(o =>\n normalizeOption(o, getOptionValue, getOptionLabel)\n );\n };\n }, [hasAccessors, loadOptions, getOptionValue, getOptionLabel]);\n\n const nextProps = {\n ...rest,\n options: normalizedOptions,\n defaultOptions: normalizedDefaultOptions,\n loadOptions: normalizedLoadOptions,\n } as SelectProps;\n\n if (nextProps.isMulti === true) {\n return <MultiSelectInner {...(nextProps as MultiSelectProps)} ref={ref} />;\n }\n return <SingleSelectInner {...(nextProps as SingleSelectProps)} ref={ref} />;\n});\n\nSelect.displayName = \"Select\";\n\nexport { Select };\n"],"names":["useState","useRef","useEffect","useCallback","useMemo","React","ComboboxPrimitive.useFilter","defaultFormatCreateLabel","useId","buildAriaDescribedBy","buildTestIdPrefix","jsx","ComboboxItem","hyphenize","jsxs","ComboboxList","ComboboxEmpty","ComboboxCollection","ComboboxGroup","ComboboxLabel","Spinner","forwardRef","ComboboxPrimitive.Trigger","Combobox","ComboboxChips","cn","ComboboxChipsInput","XIcon","ComboboxTrigger","ChevronDownIcon","ComboboxContent","ComboboxInput","ComboboxChip","Fragment","SelectFieldWrapper"],"mappings":"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"}
@@ -85,12 +85,19 @@ var neetoatoms = {
85
85
  datePicker: {
86
86
  timeField: "Time",
87
87
  addTime: "Add time",
88
+ start: "Start",
89
+ end: "End",
90
+ startTime: "Start time",
91
+ endTime: "End time",
92
+ pickADay: "Pick a day",
93
+ sameDay: "Same day",
88
94
  timeHint: "Only {{step}}-minute steps are allowed, like {{first}} or {{second}}.",
89
95
  errors: {
90
96
  timeRequired: "Enter a time, or turn off Add time.",
91
97
  hourRequired: "Enter an hour.",
92
98
  minuteRequired: "Enter minutes.",
93
- periodRequired: "Type a or p for AM or PM."
99
+ periodRequired: "Type a or p for AM or PM.",
100
+ endBeforeStart: "End time must be after the start time."
94
101
  }
95
102
  }
96
103
  };
@@ -128,4 +135,4 @@ TranslationProvider.displayName = "TranslationProvider";
128
135
 
129
136
  exports.TranslationProvider = TranslationProvider;
130
137
  exports.resources = resources;
131
- //# sourceMappingURL=TranslationProvider-C1JDwKEN.js.map
138
+ //# sourceMappingURL=TranslationProvider-Cao2ugzJ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TranslationProvider-C1JDwKEN.js","sources":["../../src/translations/index.ts","../../src/components/TranslationProvider/i18n.ts","../../src/components/TranslationProvider/TranslationProvider.tsx"],"sourcesContent":["import enTranslations from \"./en.json\";\n\nexport const resources = {\n en: { translation: enTranslations },\n};\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { resources } from \"src/translations\";\n\nexport const initializeI18n = (language = \"en\") => {\n i18n.use(initReactI18next).init({\n resources,\n lng: language,\n fallbackLng: \"en\",\n interpolation: { escapeValue: false },\n });\n\n return i18n;\n};\n","import { useEffect } from \"react\";\n\nimport { I18nextProvider } from \"react-i18next\";\n\nimport { initializeI18n } from \"./i18n\";\nimport type { TranslationProviderProps } from \"./types\";\n\nconst TranslationProvider = ({\n children,\n language = \"en\",\n}: TranslationProviderProps) => {\n const i18n = initializeI18n(language);\n\n useEffect(() => {\n if (i18n.language !== language) {\n i18n.changeLanguage(language);\n }\n }, [language, i18n]);\n\n return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>;\n};\n\nTranslationProvider.displayName = \"TranslationProvider\";\n\nexport { TranslationProvider };\n"],"names":["i18n","initReactI18next","useEffect","jsx","I18nextProvider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,MAAM,SAAA,GAAY;AAAA,EACvB,EAAA,EAAI,EAAE,WAAA,EAAa,cAAA;AACrB;;ACCO,MAAM,cAAA,GAAiB,CAAC,QAAA,GAAW,IAAA,KAAS;AACjD,EAAAA,qBAAA,CAAK,GAAA,CAAIC,6BAAgB,CAAA,CAAE,IAAA,CAAK;AAAA,IAC9B,SAAA;AAAA,IACA,GAAA,EAAK,QAAA;AAAA,IACL,WAAA,EAAa,IAAA;AAAA,IACb,aAAA,EAAe,EAAE,WAAA,EAAa,KAAA;AAAM,GACrC,CAAA;AAED,EAAA,OAAOD,qBAAA;AACT,CAAA;;ACPA,MAAM,sBAAsB,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAgC;AAC9B,EAAA,MAAM,IAAA,GAAO,eAAe,QAAQ,CAAA;AAEpC,EAAAE,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,CAAK,aAAa,QAAA,EAAU;AAC9B,MAAA,IAAA,CAAK,eAAe,QAAQ,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,IAAI,CAAC,CAAA;AAEnB,EAAA,uBAAOC,cAAA,CAACC,4BAAA,EAAA,EAAgB,IAAA,EAAa,QAAA,EAAS,CAAA;AAChD;AAEA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;;;;;"}
1
+ {"version":3,"file":"TranslationProvider-Cao2ugzJ.js","sources":["../../src/translations/index.ts","../../src/components/TranslationProvider/i18n.ts","../../src/components/TranslationProvider/TranslationProvider.tsx"],"sourcesContent":["import enTranslations from \"./en.json\";\n\nexport const resources = {\n en: { translation: enTranslations },\n};\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { resources } from \"src/translations\";\n\nexport const initializeI18n = (language = \"en\") => {\n i18n.use(initReactI18next).init({\n resources,\n lng: language,\n fallbackLng: \"en\",\n interpolation: { escapeValue: false },\n });\n\n return i18n;\n};\n","import { useEffect } from \"react\";\n\nimport { I18nextProvider } from \"react-i18next\";\n\nimport { initializeI18n } from \"./i18n\";\nimport type { TranslationProviderProps } from \"./types\";\n\nconst TranslationProvider = ({\n children,\n language = \"en\",\n}: TranslationProviderProps) => {\n const i18n = initializeI18n(language);\n\n useEffect(() => {\n if (i18n.language !== language) {\n i18n.changeLanguage(language);\n }\n }, [language, i18n]);\n\n return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>;\n};\n\nTranslationProvider.displayName = \"TranslationProvider\";\n\nexport { TranslationProvider };\n"],"names":["i18n","initReactI18next","useEffect","jsx","I18nextProvider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,MAAM,SAAA,GAAY;AAAA,EACvB,EAAA,EAAI,EAAE,WAAA,EAAa,cAAA;AACrB;;ACCO,MAAM,cAAA,GAAiB,CAAC,QAAA,GAAW,IAAA,KAAS;AACjD,EAAAA,qBAAA,CAAK,GAAA,CAAIC,6BAAgB,CAAA,CAAE,IAAA,CAAK;AAAA,IAC9B,SAAA;AAAA,IACA,GAAA,EAAK,QAAA;AAAA,IACL,WAAA,EAAa,IAAA;AAAA,IACb,aAAA,EAAe,EAAE,WAAA,EAAa,KAAA;AAAM,GACrC,CAAA;AAED,EAAA,OAAOD,qBAAA;AACT,CAAA;;ACPA,MAAM,sBAAsB,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAgC;AAC9B,EAAA,MAAM,IAAA,GAAO,eAAe,QAAQ,CAAA;AAEpC,EAAAE,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,CAAK,aAAa,QAAA,EAAU;AAC9B,MAAA,IAAA,CAAK,eAAe,QAAQ,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,IAAI,CAAC,CAAA;AAEnB,EAAA,uBAAOC,cAAA,CAACC,4BAAA,EAAA,EAAgB,IAAA,EAAa,QAAA,EAAS,CAAA;AAChD;AAEA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var DatePicker = require('../DatePicker-C_nezxpH.js');
3
+ var DatePicker = require('../DatePicker-CBxWLALJ.js');
4
4
  require('react/jsx-runtime');
5
5
  require('react');
6
6
  require('../primitives/Calendar.js');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var Select = require('../Select-DReP9RU1.js');
3
+ var Select = require('../Select-BP2y7-eM.js');
4
4
  require('react/jsx-runtime');
5
5
  require('react');
6
6
  require('../fieldIds-DiVU6GVS.js');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var TranslationProvider = require('../TranslationProvider-C1JDwKEN.js');
3
+ var TranslationProvider = require('../TranslationProvider-Cao2ugzJ.js');
4
4
  require('react/jsx-runtime');
5
5
  require('react');
6
6
  require('react-i18next');
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var components_DropdownMenu = require('./DropdownMenu.js');
4
+ var Stepper = require('../Stepper-BZBdL6JW.js');
4
5
  var Accordion = require('../Accordion-D75SDnkY.js');
5
6
  var Alert = require('../Alert-Q_dXiT50.js');
6
7
  var Avatar = require('../Avatar-nJIAulwA.js');
@@ -10,7 +11,7 @@ var Callout = require('../Callout-Bci3POCo.js');
10
11
  var Checkbox = require('../Checkbox-83g1FDsc.js');
11
12
  var ColorPicker = require('../ColorPicker-CODJ0QKs.js');
12
13
  var DataTable = require('../DataTable-KvsmFjeu.js');
13
- var DatePicker = require('../DatePicker-C_nezxpH.js');
14
+ var DatePicker = require('../DatePicker-CBxWLALJ.js');
14
15
  var Dialog = require('../Dialog-B_FZwr_u.js');
15
16
  var Empty = require('../Empty-Bwpsj82B.js');
16
17
  var Input = require('../Input-DFvMBpiU.js');
@@ -21,18 +22,17 @@ var Pagination = require('../Pagination-WyQlBpvK.js');
21
22
  var Popover = require('../Popover-BY8Afql0.js');
22
23
  var Progress = require('../Progress-n_VwK9_E.js');
23
24
  var RadioGroup = require('../RadioGroup-B-u8rdbf.js');
24
- var Select = require('../Select-DReP9RU1.js');
25
+ var Select = require('../Select-BP2y7-eM.js');
25
26
  var Sheet = require('../Sheet-D-NWMprq.js');
26
27
  var Slider = require('../Slider-DIUSlx_m.js');
27
28
  var Spinner = require('../Spinner-DRoghJA8.js');
28
- var Stepper = require('../Stepper-BZBdL6JW.js');
29
29
  var Switch = require('../Switch-BbRK3HUZ.js');
30
30
  var Tabs = require('../Tabs-BQl63Ewe.js');
31
31
  var Textarea = require('../Textarea-bxleSw86.js');
32
32
  var TimePicker = require('../TimePicker-BhOW7vbV.js');
33
33
  var Toastr = require('../Toastr-DgllCbfd.js');
34
34
  var Tooltip = require('../Tooltip-B6uv_2Jz.js');
35
- var TranslationProvider = require('../TranslationProvider-C1JDwKEN.js');
35
+ var TranslationProvider = require('../TranslationProvider-Cao2ugzJ.js');
36
36
  var Tree = require('../Tree-D1QjLPS9.js');
37
37
  var TreeSelect = require('../TreeSelect-CrLmpq26.js');
38
38
  var Typography = require('../Typography-Ctlu_0Qy.js');
@@ -144,6 +144,7 @@ require('../redux-DEF7lAd1.js');
144
144
 
145
145
 
146
146
  exports.DropdownMenu = components_DropdownMenu.DropdownMenu;
147
+ exports.Stepper = Stepper.Stepper;
147
148
  exports.Accordion = Accordion.Accordion;
148
149
  exports.Alert = Alert.Alert;
149
150
  exports.Avatar = Avatar.AvatarNamespace;
@@ -176,7 +177,6 @@ exports.Select = Select.Select;
176
177
  exports.Sheet = Sheet.Sheet;
177
178
  exports.Slider = Slider.Slider;
178
179
  exports.Spinner = Spinner.Spinner;
179
- exports.Stepper = Stepper.Stepper;
180
180
  exports.Switch = Switch.Switch;
181
181
  exports.Tabs = Tabs.Tabs;
182
182
  exports.Textarea = Textarea.Textarea;
@@ -65,6 +65,7 @@ const FormWrapper = React.forwardRef(
65
65
  const isEventFromEditorOrTextarea = target.tagName === "TEXTAREA" || target.editor;
66
66
  if (event.key !== "Enter") return;
67
67
  if (isEventFromEditorOrTextarea && !event.metaKey) return;
68
+ if (!event.currentTarget.contains(target)) return;
68
69
  event.preventDefault();
69
70
  if (event.shiftKey) return;
70
71
  if (!isFormDirty || isSubmitting) return;
@@ -1 +1 @@
1
- {"version":3,"file":"Form.js","sources":["../../../src/formik/Form/ScrollToErrorField/utils.ts","../../../src/formik/Form/ScrollToErrorField/index.tsx","../../../src/formik/Form/FormWrapper.tsx","../../../src/formik/Form/index.tsx"],"sourcesContent":["import { is } from \"ramda\";\n\nconst transformObjectToDotNotation = (\n object: Record<string, unknown>,\n prefix = \"\"\n): string[] => {\n const result: string[] = [];\n\n Object.entries(object).forEach(([key, value]) => {\n if (!value) return;\n const nextKey = prefix ? `${prefix}.${key}` : key;\n if (is(Object, value)) {\n result.push(\n ...transformObjectToDotNotation(\n value as Record<string, unknown>,\n nextKey\n )\n );\n } else {\n result.push(nextKey);\n }\n });\n\n return result;\n};\n\nconst getErrorFieldName = (\n formikErrors: Record<string, unknown>\n): string | undefined => transformObjectToDotNotation(formikErrors)?.[0];\n\nexport const getFieldsWithServerError = (\n status: Record<string, unknown> = {}\n): string[] =>\n Object.keys(status).filter(\n fieldName => status[fieldName] != null && status[fieldName] !== \"\"\n );\n\nexport const scrollToError = (\n formRef: React.RefObject<HTMLFormElement | null>,\n errors: Record<string, unknown>,\n status: Record<string, unknown>\n): void => {\n const fieldErrorName = getErrorFieldName(errors);\n const [fieldWithServerError] = getFieldsWithServerError(status);\n\n if (!fieldErrorName && !fieldWithServerError) return;\n\n const errorFieldName = fieldErrorName || fieldWithServerError;\n const errorFormElement = formRef.current?.querySelector(\n `[name=\"${errorFieldName}\"]`\n );\n\n errorFormElement?.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n });\n};\n","import { useEffect } from \"react\";\n\nimport { useFormikContext } from \"formik\";\n\nimport { getFieldsWithServerError, scrollToError } from \"./utils\";\n\ninterface ScrollToErrorFieldProps {\n formRef: React.RefObject<HTMLFormElement | null>;\n}\n\nconst ScrollToErrorField = ({ formRef }: ScrollToErrorFieldProps) => {\n const { submitCount, isValid, errors, status } = useFormikContext();\n\n useEffect(() => {\n const fieldsWithServerError = getFieldsWithServerError(status);\n if (!formRef.current || (isValid && fieldsWithServerError.length === 0)) {\n return;\n }\n\n scrollToError(formRef, errors as Record<string, unknown>, status);\n }, [submitCount]);\n\n return null;\n};\n\nexport default ScrollToErrorField;\n","import React, { useCallback, forwardRef, useRef } from \"react\";\n\nimport { Form as FormikForm, useFormikContext } from \"formik\";\n\nimport ScrollToErrorField from \"./ScrollToErrorField\";\nimport {\n getFieldsWithServerError,\n scrollToError,\n} from \"./ScrollToErrorField/utils\";\n\ninterface FormWrapperProps {\n className?: string;\n formProps?: React.ComponentProps<\"form\">;\n children: React.ReactNode;\n scrollToErrorField: boolean;\n}\n\nconst FormWrapper = forwardRef<HTMLFormElement, FormWrapperProps>(\n ({ className, formProps, children, scrollToErrorField }, ref) => {\n const { validateForm, setErrors, setTouched, submitForm, ...formikBag } =\n useFormikContext();\n\n const { dirty: isFormDirty, isSubmitting, status } = formikBag;\n\n const formRefForScrollToErrorField = useRef<HTMLFormElement>(null);\n const formRef =\n (ref as React.RefObject<HTMLFormElement | null>) ||\n formRefForScrollToErrorField;\n\n const handleKeyDown = useCallback(\n async (event: React.KeyboardEvent<HTMLFormElement>) => {\n const target = event.target as HTMLElement & { editor?: unknown };\n const isEventFromEditorOrTextarea =\n target.tagName === \"TEXTAREA\" || target.editor;\n\n if (event.key !== \"Enter\") return;\n if (isEventFromEditorOrTextarea && !event.metaKey) return;\n\n event.preventDefault();\n\n if (event.shiftKey) return;\n if (!isFormDirty || isSubmitting) return;\n\n try {\n const errors = await validateForm();\n const fieldStatuses = getFieldsWithServerError(status);\n\n if (\n Object.keys(errors).length > 0 ||\n Object.keys(fieldStatuses).length > 0\n ) {\n setErrors(errors);\n setTouched({ ...errors, ...status });\n if (scrollToErrorField) {\n scrollToError(formRef, errors as Record<string, unknown>, status);\n }\n } else {\n await submitForm();\n }\n } catch (error) {\n console.error(\n \"An unhandled error was caught while validating or submitting the form\",\n error\n );\n }\n },\n [\n validateForm,\n setErrors,\n setTouched,\n isFormDirty,\n isSubmitting,\n submitForm,\n status,\n scrollToErrorField,\n formRef,\n ]\n );\n\n return (\n <FormikForm\n {...{ className }}\n noValidate\n ref={formRef}\n onKeyDown={handleKeyDown}\n {...formProps}\n >\n {scrollToErrorField && <ScrollToErrorField {...{ formRef }} />}\n {children}\n </FormikForm>\n );\n }\n);\n\nFormWrapper.displayName = \"FormWrapper\";\n\nexport default FormWrapper;\n","import React, { forwardRef, useRef } from \"react\";\n\nimport { Formik, FormikConfig, FormikProps, FormikValues } from \"formik\";\n\nimport FormWrapper from \"./FormWrapper\";\nimport { getFieldsWithServerError } from \"./ScrollToErrorField/utils\";\n\nexport interface FormProps<T extends FormikValues = FormikValues> {\n /** Formik configuration: initialValues, validationSchema, onSubmit, etc. */\n formikProps: FormikConfig<T>;\n /** Props forwarded to the HTML form element. */\n formProps?: React.ComponentProps<\"form\">;\n /** Auto-scroll to the first error field on submit. */\n scrollToErrorField?: boolean;\n /** Additional class name for the form wrapper. */\n className?: string;\n /** Render children directly or as a function receiving FormikProps. */\n children: React.ReactNode | ((props: FormikProps<T>) => React.ReactNode);\n}\n\nconst Form = forwardRef<HTMLFormElement, FormProps>(\n (\n { className, children, formikProps, formProps, scrollToErrorField = false },\n ref\n ) => {\n const formikRef = useRef<FormikProps<FormikValues>>(null);\n\n const handleSubmit: FormikConfig<FormikValues>[\"onSubmit\"] = (\n values,\n actions\n ) => {\n const fieldsWithServerError = getFieldsWithServerError(\n formikRef.current?.status\n );\n\n if (fieldsWithServerError.length > 0) {\n actions.setSubmitting(false);\n\n return undefined;\n }\n\n return formikProps.onSubmit(values, actions);\n };\n\n return (\n <Formik\n innerRef={formikRef as React.Ref<FormikProps<FormikValues>>}\n {...formikProps}\n onSubmit={handleSubmit}\n >\n {props => (\n <FormWrapper {...{ className, formProps, ref, scrollToErrorField }}>\n {typeof children === \"function\" ? children(props) : children}\n </FormWrapper>\n )}\n </Formik>\n );\n }\n);\n\nForm.displayName = \"Form\";\n\nexport { Form };\n"],"names":["is","useFormikContext","useEffect","forwardRef","useRef","useCallback","jsxs","FormikForm","jsx","Formik"],"mappings":";;;;;;;AAEA,MAAM,4BAAA,GAA+B,CACnC,MAAA,EACA,MAAA,GAAS,EAAA,KACI;AACb,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC/C,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAM,UAAU,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAA;AAC9C,IAAA,IAAIA,QAAA,CAAG,MAAA,EAAQ,KAAK,CAAA,EAAG;AACrB,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,GAAG,4BAAA;AAAA,UACD,KAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AAAA,IACrB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACT,CAAA;AAEA,MAAM,oBAAoB,CACxB,YAAA,KACuB,4BAAA,CAA6B,YAAY,IAAI,CAAC,CAAA;AAEhE,MAAM,wBAAA,GAA2B,CACtC,MAAA,GAAkC,OAElC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA;AAAA,EAClB,eAAa,MAAA,CAAO,SAAS,KAAK,IAAA,IAAQ,MAAA,CAAO,SAAS,CAAA,KAAM;AAClE,CAAA;AAEK,MAAM,aAAA,GAAgB,CAC3B,OAAA,EACA,MAAA,EACA,MAAA,KACS;AACT,EAAA,MAAM,cAAA,GAAiB,kBAAkB,MAAM,CAAA;AAC/C,EAAA,MAAM,CAAC,oBAAoB,CAAA,GAAI,wBAAA,CAAyB,MAAM,CAAA;AAE9D,EAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,oBAAA,EAAsB;AAE9C,EAAA,MAAM,iBAAiB,cAAA,IAAkB,oBAAA;AACzC,EAAA,MAAM,gBAAA,GAAmB,QAAQ,OAAA,EAAS,aAAA;AAAA,IACxC,UAAU,cAAc,CAAA,EAAA;AAAA,GAC1B;AAEA,EAAA,gBAAA,EAAkB,cAAA,CAAe;AAAA,IAC/B,QAAA,EAAU,QAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACR,CAAA;AACH,CAAA;;AC9CA,MAAM,kBAAA,GAAqB,CAAC,EAAE,OAAA,EAAQ,KAA+B;AACnE,EAAA,MAAM,EAAE,WAAA,EAAa,OAAA,EAAS,MAAA,EAAQ,MAAA,KAAWC,uBAAA,EAAiB;AAElE,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,qBAAA,GAAwB,yBAAyB,MAAM,CAAA;AAC7D,IAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,IAAY,OAAA,IAAW,qBAAA,CAAsB,WAAW,CAAA,EAAI;AACvE,MAAA;AAAA,IACF;AAEA,IAAA,aAAA,CAAc,OAAA,EAAS,QAAmC,MAAM,CAAA;AAAA,EAClE,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,OAAO,IAAA;AACT,CAAA;;ACNA,MAAM,WAAA,GAAcC,gBAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,WAAW,QAAA,EAAU,kBAAA,IAAsB,GAAA,KAAQ;AAC/D,IAAA,MAAM,EAAE,cAAc,SAAA,EAAW,UAAA,EAAY,YAAY,GAAG,SAAA,KAC1DF,uBAAA,EAAiB;AAEnB,IAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,YAAA,EAAc,QAAO,GAAI,SAAA;AAErD,IAAA,MAAM,4BAAA,GAA+BG,aAAwB,IAAI,CAAA;AACjE,IAAA,MAAM,UACH,GAAA,IACD,4BAAA;AAEF,IAAA,MAAM,aAAA,GAAgBC,iBAAA;AAAA,MACpB,OAAO,KAAA,KAAgD;AACrD,QAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,QAAA,MAAM,2BAAA,GACJ,MAAA,CAAO,OAAA,KAAY,UAAA,IAAc,MAAA,CAAO,MAAA;AAE1C,QAAA,IAAI,KAAA,CAAM,QAAQ,OAAA,EAAS;AAC3B,QAAA,IAAI,2BAAA,IAA+B,CAAC,KAAA,CAAM,OAAA,EAAS;AAEnD,QAAA,KAAA,CAAM,cAAA,EAAe;AAErB,QAAA,IAAI,MAAM,QAAA,EAAU;AACpB,QAAA,IAAI,CAAC,eAAe,YAAA,EAAc;AAElC,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,YAAA,EAAa;AAClC,UAAA,MAAM,aAAA,GAAgB,yBAAyB,MAAM,CAAA;AAErD,UAAA,IACE,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,GAAS,CAAA,IAC7B,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,CAAE,MAAA,GAAS,CAAA,EACpC;AACA,YAAA,SAAA,CAAU,MAAM,CAAA;AAChB,YAAA,UAAA,CAAW,EAAE,GAAG,MAAA,EAAQ,GAAG,QAAQ,CAAA;AACnC,YAAA,IAAI,kBAAA,EAAoB;AACtB,cAAA,aAAA,CAAc,OAAA,EAAS,QAAmC,MAAM,CAAA;AAAA,YAClE;AAAA,UACF,CAAA,MAAO;AACL,YAAA,MAAM,UAAA,EAAW;AAAA,UACnB;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA;AAAA,YACN,uEAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA;AAAA,QACE,YAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA;AAAA,QACA,WAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA,MAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA;AACF,KACF;AAEA,IAAA,uBACEC,eAAA;AAAA,MAACC,WAAA;AAAA,MAAA;AAAA,QACE,GAAG,EAAE,SAAA,EAAU;AAAA,QAChB,UAAA,EAAU,IAAA;AAAA,QACV,GAAA,EAAK,OAAA;AAAA,QACL,SAAA,EAAW,aAAA;AAAA,QACV,GAAG,SAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,kBAAA,oBAAsBC,cAAA,CAAC,kBAAA,EAAA,EAAoB,GAAG,EAAE,SAAQ,EAAG,CAAA;AAAA,UAC3D;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;;AC1E1B,MAAM,IAAA,GAAOL,gBAAA;AAAA,EACX,CACE,EAAE,SAAA,EAAW,QAAA,EAAU,aAAa,SAAA,EAAW,kBAAA,GAAqB,KAAA,EAAM,EAC1E,GAAA,KACG;AACH,IAAA,MAAM,SAAA,GAAYC,aAAkC,IAAI,CAAA;AAExD,IAAA,MAAM,YAAA,GAAuD,CAC3D,MAAA,EACA,OAAA,KACG;AACH,MAAA,MAAM,qBAAA,GAAwB,wBAAA;AAAA,QAC5B,UAAU,OAAA,EAAS;AAAA,OACrB;AAEA,MAAA,IAAI,qBAAA,CAAsB,SAAS,CAAA,EAAG;AACpC,QAAA,OAAA,CAAQ,cAAc,KAAK,CAAA;AAE3B,QAAA,OAAO,MAAA;AAAA,MACT;AAEA,MAAA,OAAO,WAAA,CAAY,QAAA,CAAS,MAAA,EAAQ,OAAO,CAAA;AAAA,IAC7C,CAAA;AAEA,IAAA,uBACEI,cAAA;AAAA,MAACC,aAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAU,SAAA;AAAA,QACT,GAAG,WAAA;AAAA,QACJ,QAAA,EAAU,YAAA;AAAA,QAET,qCACCD,cAAA,CAAC,WAAA,EAAA,EAAa,GAAG,EAAE,WAAW,SAAA,EAAW,GAAA,EAAK,kBAAA,EAAmB,EAC9D,iBAAO,QAAA,KAAa,UAAA,GAAa,QAAA,CAAS,KAAK,IAAI,QAAA,EACtD;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;;;;"}
1
+ {"version":3,"file":"Form.js","sources":["../../../src/formik/Form/ScrollToErrorField/utils.ts","../../../src/formik/Form/ScrollToErrorField/index.tsx","../../../src/formik/Form/FormWrapper.tsx","../../../src/formik/Form/index.tsx"],"sourcesContent":["import { is } from \"ramda\";\n\nconst transformObjectToDotNotation = (\n object: Record<string, unknown>,\n prefix = \"\"\n): string[] => {\n const result: string[] = [];\n\n Object.entries(object).forEach(([key, value]) => {\n if (!value) return;\n const nextKey = prefix ? `${prefix}.${key}` : key;\n if (is(Object, value)) {\n result.push(\n ...transformObjectToDotNotation(\n value as Record<string, unknown>,\n nextKey\n )\n );\n } else {\n result.push(nextKey);\n }\n });\n\n return result;\n};\n\nconst getErrorFieldName = (\n formikErrors: Record<string, unknown>\n): string | undefined => transformObjectToDotNotation(formikErrors)?.[0];\n\nexport const getFieldsWithServerError = (\n status: Record<string, unknown> = {}\n): string[] =>\n Object.keys(status).filter(\n fieldName => status[fieldName] != null && status[fieldName] !== \"\"\n );\n\nexport const scrollToError = (\n formRef: React.RefObject<HTMLFormElement | null>,\n errors: Record<string, unknown>,\n status: Record<string, unknown>\n): void => {\n const fieldErrorName = getErrorFieldName(errors);\n const [fieldWithServerError] = getFieldsWithServerError(status);\n\n if (!fieldErrorName && !fieldWithServerError) return;\n\n const errorFieldName = fieldErrorName || fieldWithServerError;\n const errorFormElement = formRef.current?.querySelector(\n `[name=\"${errorFieldName}\"]`\n );\n\n errorFormElement?.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n });\n};\n","import { useEffect } from \"react\";\n\nimport { useFormikContext } from \"formik\";\n\nimport { getFieldsWithServerError, scrollToError } from \"./utils\";\n\ninterface ScrollToErrorFieldProps {\n formRef: React.RefObject<HTMLFormElement | null>;\n}\n\nconst ScrollToErrorField = ({ formRef }: ScrollToErrorFieldProps) => {\n const { submitCount, isValid, errors, status } = useFormikContext();\n\n useEffect(() => {\n const fieldsWithServerError = getFieldsWithServerError(status);\n if (!formRef.current || (isValid && fieldsWithServerError.length === 0)) {\n return;\n }\n\n scrollToError(formRef, errors as Record<string, unknown>, status);\n }, [submitCount]);\n\n return null;\n};\n\nexport default ScrollToErrorField;\n","import React, { useCallback, forwardRef, useRef } from \"react\";\n\nimport { Form as FormikForm, useFormikContext } from \"formik\";\n\nimport ScrollToErrorField from \"./ScrollToErrorField\";\nimport {\n getFieldsWithServerError,\n scrollToError,\n} from \"./ScrollToErrorField/utils\";\n\ninterface FormWrapperProps {\n className?: string;\n formProps?: React.ComponentProps<\"form\">;\n children: React.ReactNode;\n scrollToErrorField: boolean;\n}\n\nconst FormWrapper = forwardRef<HTMLFormElement, FormWrapperProps>(\n ({ className, formProps, children, scrollToErrorField }, ref) => {\n const { validateForm, setErrors, setTouched, submitForm, ...formikBag } =\n useFormikContext();\n\n const { dirty: isFormDirty, isSubmitting, status } = formikBag;\n\n const formRefForScrollToErrorField = useRef<HTMLFormElement>(null);\n const formRef =\n (ref as React.RefObject<HTMLFormElement | null>) ||\n formRefForScrollToErrorField;\n\n const handleKeyDown = useCallback(\n async (event: React.KeyboardEvent<HTMLFormElement>) => {\n const target = event.target as HTMLElement & { editor?: unknown };\n const isEventFromEditorOrTextarea =\n target.tagName === \"TEXTAREA\" || target.editor;\n\n if (event.key !== \"Enter\") return;\n if (isEventFromEditorOrTextarea && !event.metaKey) return;\n // React bubbles events from portaled content (a date picker's\n // popover, a select menu) up to the form even though they sit outside\n // it in the DOM. Leave their Enter alone, so e.g. OK still clicks.\n if (!event.currentTarget.contains(target)) return;\n\n event.preventDefault();\n\n if (event.shiftKey) return;\n if (!isFormDirty || isSubmitting) return;\n\n try {\n const errors = await validateForm();\n const fieldStatuses = getFieldsWithServerError(status);\n\n if (\n Object.keys(errors).length > 0 ||\n Object.keys(fieldStatuses).length > 0\n ) {\n setErrors(errors);\n setTouched({ ...errors, ...status });\n if (scrollToErrorField) {\n scrollToError(formRef, errors as Record<string, unknown>, status);\n }\n } else {\n await submitForm();\n }\n } catch (error) {\n console.error(\n \"An unhandled error was caught while validating or submitting the form\",\n error\n );\n }\n },\n [\n validateForm,\n setErrors,\n setTouched,\n isFormDirty,\n isSubmitting,\n submitForm,\n status,\n scrollToErrorField,\n formRef,\n ]\n );\n\n return (\n <FormikForm\n {...{ className }}\n noValidate\n ref={formRef}\n onKeyDown={handleKeyDown}\n {...formProps}\n >\n {scrollToErrorField && <ScrollToErrorField {...{ formRef }} />}\n {children}\n </FormikForm>\n );\n }\n);\n\nFormWrapper.displayName = \"FormWrapper\";\n\nexport default FormWrapper;\n","import React, { forwardRef, useRef } from \"react\";\n\nimport { Formik, FormikConfig, FormikProps, FormikValues } from \"formik\";\n\nimport FormWrapper from \"./FormWrapper\";\nimport { getFieldsWithServerError } from \"./ScrollToErrorField/utils\";\n\nexport interface FormProps<T extends FormikValues = FormikValues> {\n /** Formik configuration: initialValues, validationSchema, onSubmit, etc. */\n formikProps: FormikConfig<T>;\n /** Props forwarded to the HTML form element. */\n formProps?: React.ComponentProps<\"form\">;\n /** Auto-scroll to the first error field on submit. */\n scrollToErrorField?: boolean;\n /** Additional class name for the form wrapper. */\n className?: string;\n /** Render children directly or as a function receiving FormikProps. */\n children: React.ReactNode | ((props: FormikProps<T>) => React.ReactNode);\n}\n\nconst Form = forwardRef<HTMLFormElement, FormProps>(\n (\n { className, children, formikProps, formProps, scrollToErrorField = false },\n ref\n ) => {\n const formikRef = useRef<FormikProps<FormikValues>>(null);\n\n const handleSubmit: FormikConfig<FormikValues>[\"onSubmit\"] = (\n values,\n actions\n ) => {\n const fieldsWithServerError = getFieldsWithServerError(\n formikRef.current?.status\n );\n\n if (fieldsWithServerError.length > 0) {\n actions.setSubmitting(false);\n\n return undefined;\n }\n\n return formikProps.onSubmit(values, actions);\n };\n\n return (\n <Formik\n innerRef={formikRef as React.Ref<FormikProps<FormikValues>>}\n {...formikProps}\n onSubmit={handleSubmit}\n >\n {props => (\n <FormWrapper {...{ className, formProps, ref, scrollToErrorField }}>\n {typeof children === \"function\" ? children(props) : children}\n </FormWrapper>\n )}\n </Formik>\n );\n }\n);\n\nForm.displayName = \"Form\";\n\nexport { Form };\n"],"names":["is","useFormikContext","useEffect","forwardRef","useRef","useCallback","jsxs","FormikForm","jsx","Formik"],"mappings":"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"}
@@ -4,7 +4,7 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var formik = require('formik');
6
6
  var ramda = require('ramda');
7
- var Select = require('../Select-DReP9RU1.js');
7
+ var Select = require('../Select-BP2y7-eM.js');
8
8
  require('../fieldIds-DiVU6GVS.js');
9
9
  require('../hyphenize-BTrVNVv3.js');
10
10
  require('../Combobox-CUS3FpS8.js');
@@ -65,7 +65,7 @@ require('../hyphenize-BTrVNVv3.js');
65
65
  require('../withIconSize-C6LP0R7o.js');
66
66
  require('../Textarea-bxleSw86.js');
67
67
  require('../primitives/Textarea.js');
68
- require('../Select-DReP9RU1.js');
68
+ require('../Select-BP2y7-eM.js');
69
69
  require('../Combobox-CUS3FpS8.js');
70
70
  require('../useAriaHiddenCleanup-8OeXq1T4.js');
71
71
  require('../chevron-down-CPsWSS51.js');
package/dist/cjs/index.js CHANGED
@@ -1,8 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var utils$1 = require('@bigbinary/neeto-commons-frontend/utils');
4
- var TranslationProvider = require('./TranslationProvider-C1JDwKEN.js');
4
+ var TranslationProvider = require('./TranslationProvider-Cao2ugzJ.js');
5
5
  var components_DropdownMenu = require('./components/DropdownMenu.js');
6
+ var Stepper = require('./Stepper-BZBdL6JW.js');
6
7
  var useMobile = require('./use-mobile-Be9CI6km.js');
7
8
  var utils = require('./utils-BhM0B89p.js');
8
9
  var Accordion = require('./Accordion-D75SDnkY.js');
@@ -14,7 +15,7 @@ var Callout = require('./Callout-Bci3POCo.js');
14
15
  var Checkbox = require('./Checkbox-83g1FDsc.js');
15
16
  var ColorPicker = require('./ColorPicker-CODJ0QKs.js');
16
17
  var DataTable = require('./DataTable-KvsmFjeu.js');
17
- var DatePicker = require('./DatePicker-C_nezxpH.js');
18
+ var DatePicker = require('./DatePicker-CBxWLALJ.js');
18
19
  var Dialog = require('./Dialog-B_FZwr_u.js');
19
20
  var DirectionProvider = require('./DirectionProvider-BTtE4FcN.js');
20
21
  var Empty = require('./Empty-Bwpsj82B.js');
@@ -26,11 +27,10 @@ var Pagination = require('./Pagination-WyQlBpvK.js');
26
27
  var Popover = require('./Popover-BY8Afql0.js');
27
28
  var Progress = require('./Progress-n_VwK9_E.js');
28
29
  var RadioGroup = require('./RadioGroup-B-u8rdbf.js');
29
- var Select = require('./Select-DReP9RU1.js');
30
+ var Select = require('./Select-BP2y7-eM.js');
30
31
  var Sheet = require('./Sheet-D-NWMprq.js');
31
32
  var Slider = require('./Slider-DIUSlx_m.js');
32
33
  var Spinner = require('./Spinner-DRoghJA8.js');
33
- var Stepper = require('./Stepper-BZBdL6JW.js');
34
34
  var Switch = require('./Switch-BbRK3HUZ.js');
35
35
  var Tabs = require('./Tabs-BQl63Ewe.js');
36
36
  var Textarea = require('./Textarea-bxleSw86.js');
@@ -154,6 +154,7 @@ Object.defineProperty(exports, "dayjs", {
154
154
  exports.TranslationProvider = TranslationProvider.TranslationProvider;
155
155
  exports.translations = TranslationProvider.resources;
156
156
  exports.DropdownMenu = components_DropdownMenu.DropdownMenu;
157
+ exports.Stepper = Stepper.Stepper;
157
158
  exports.useIsMobile = useMobile.useIsMobile;
158
159
  exports.cn = utils.cn;
159
160
  exports.Accordion = Accordion.Accordion;
@@ -187,7 +188,6 @@ exports.Select = Select.Select;
187
188
  exports.Sheet = Sheet.Sheet;
188
189
  exports.Slider = Slider.Slider;
189
190
  exports.Spinner = Spinner.Spinner;
190
- exports.Stepper = Stepper.Stepper;
191
191
  exports.Switch = Switch.Switch;
192
192
  exports.Tabs = Tabs.Tabs;
193
193
  exports.Textarea = Textarea.Textarea;
@@ -8,7 +8,7 @@ interface DatePickerFooterProps {
8
8
  showNow?: boolean;
9
9
  onNow: () => void;
10
10
  onOk: () => void;
11
- okLabel?: string;
11
+ okDisabled?: boolean;
12
12
  className?: string;
13
13
  }
14
14
  declare const DatePickerFooter: React.FC<DatePickerFooterProps>;
@@ -12,8 +12,9 @@ interface RangeCalendarProps {
12
12
  endMonth: Date;
13
13
  onHoverIn: (e: React.MouseEvent<HTMLElement>) => void;
14
14
  onHoverOut: () => void;
15
+ onKeyDown?: (e: React.KeyboardEvent<HTMLDivElement>) => void;
15
16
  numberOfMonths?: number;
16
17
  className?: string;
17
18
  }
18
- export declare const RangeCalendar: ({ todayDate, weekStartsOn, month, onMonthChange, selected, onSelect, disabled, startMonth, endMonth, onHoverIn, onHoverOut, numberOfMonths, className, }: RangeCalendarProps) => import("react/jsx-runtime").JSX.Element;
19
+ export declare const RangeCalendar: ({ todayDate, weekStartsOn, month, onMonthChange, selected, onSelect, disabled, startMonth, endMonth, onHoverIn, onHoverOut, onKeyDown, numberOfMonths, className, }: RangeCalendarProps) => import("react/jsx-runtime").JSX.Element;
19
20
  export {};
@@ -0,0 +1,37 @@
1
+ import React from "react";
2
+ import type { TimeValue } from "../TimePicker/types";
3
+ import { type SegmentedTimeInputHandle } from "./SegmentedTimeInput";
4
+ import type { RangeEndpoint } from "./useRangePicker";
5
+ interface RangeTimeSectionProps {
6
+ /** The picked days, formatted, e.g. "15/11/2026"; empty until picked. */
7
+ fromDateLabel: string;
8
+ toDateLabel: string;
9
+ /** The end falls on the start's day, picked or not; End reads "Same day". */
10
+ isEndOnStartDay: boolean;
11
+ fromValue: TimeValue;
12
+ toValue: TimeValue;
13
+ onFromChange: (value: TimeValue) => void;
14
+ onToChange: (value: TimeValue) => void;
15
+ /**
16
+ * The endpoint the next calendar click sets; its heading is highlighted.
17
+ * Only the headings switch it, so typing a time doesn't redirect the click.
18
+ */
19
+ activeEndpoint: RangeEndpoint;
20
+ onEndpointSelect: (endpoint: RangeEndpoint) => void;
21
+ /** Minute increment; also shows the hint naming it. Omit for any minute. */
22
+ minuteStep?: number;
23
+ /** Reports whether either typed time is incomplete, so OK can refuse it. */
24
+ onErrorChange: (hasError: boolean) => void;
25
+ /** Show incomplete-time errors, e.g. right after OK. */
26
+ showError: boolean;
27
+ /** The end is not after the start: both days are the same. */
28
+ isOrderInvalid: boolean;
29
+ /** e.g. "India Standard Time (UTC+5:30)"; hidden when null. */
30
+ timezoneLabel: string | null;
31
+ /** Lets the picker move focus to the start time. */
32
+ fromTimeRef?: React.Ref<SegmentedTimeInputHandle>;
33
+ disabled?: boolean;
34
+ className?: string;
35
+ }
36
+ declare const RangeTimeSection: React.FC<RangeTimeSectionProps>;
37
+ export { RangeTimeSection };
@@ -11,7 +11,13 @@ interface SegmentedTimeInputProps {
11
11
  invalid?: boolean;
12
12
  disabled?: boolean;
13
13
  autoFocus?: boolean;
14
+ "aria-label"?: string;
14
15
  "aria-describedby"?: string;
16
+ "data-testid"?: string;
15
17
  }
16
- declare const SegmentedTimeInput: React.FC<SegmentedTimeInputProps>;
18
+ export interface SegmentedTimeInputHandle {
19
+ /** Focuses the field with its hour part active. */
20
+ focusHour: () => void;
21
+ }
22
+ declare const SegmentedTimeInput: React.ForwardRefExoticComponent<SegmentedTimeInputProps & React.RefAttributes<SegmentedTimeInputHandle>>;
17
23
  export { SegmentedTimeInput };