@simplybusiness/mobius 9.3.2 → 9.3.3

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 (102) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/cjs/components/AddressLookup/AddressLookup.js +1 -2
  3. package/dist/cjs/components/AddressLookup/AddressLookup.js.map +2 -2
  4. package/dist/cjs/components/AddressLookup/index.js +1 -2
  5. package/dist/cjs/components/AddressLookup/index.js.map +2 -2
  6. package/dist/cjs/components/Checkbox/Checkbox.js +1 -2
  7. package/dist/cjs/components/Checkbox/Checkbox.js.map +2 -2
  8. package/dist/cjs/components/Checkbox/CheckboxGroup.js +1 -2
  9. package/dist/cjs/components/Checkbox/CheckboxGroup.js.map +2 -2
  10. package/dist/cjs/components/Checkbox/index.js +1 -2
  11. package/dist/cjs/components/Checkbox/index.js.map +2 -2
  12. package/dist/cjs/components/Combobox/Combobox.js +1 -2
  13. package/dist/cjs/components/Combobox/Combobox.js.map +2 -2
  14. package/dist/cjs/components/Combobox/index.js +1 -2
  15. package/dist/cjs/components/Combobox/index.js.map +2 -2
  16. package/dist/cjs/components/DateField/DateField.js +1 -2
  17. package/dist/cjs/components/DateField/DateField.js.map +2 -2
  18. package/dist/cjs/components/DateField/index.js +1 -2
  19. package/dist/cjs/components/DateField/index.js.map +2 -2
  20. package/dist/cjs/components/ErrorMessage/ErrorMessage.js +1 -2
  21. package/dist/cjs/components/ErrorMessage/ErrorMessage.js.map +2 -2
  22. package/dist/cjs/components/ErrorMessage/index.js +1 -2
  23. package/dist/cjs/components/ErrorMessage/index.js.map +2 -2
  24. package/dist/cjs/components/ExpandableText/ExpandableText.js +1 -2
  25. package/dist/cjs/components/ExpandableText/ExpandableText.js.map +2 -2
  26. package/dist/cjs/components/ExpandableText/index.js +1 -2
  27. package/dist/cjs/components/ExpandableText/index.js.map +2 -2
  28. package/dist/cjs/components/MaskedField/MaskedField.js +1 -2
  29. package/dist/cjs/components/MaskedField/MaskedField.js.map +2 -2
  30. package/dist/cjs/components/MaskedField/index.js +1 -2
  31. package/dist/cjs/components/MaskedField/index.js.map +2 -2
  32. package/dist/cjs/components/NumberField/NumberField.js +1 -2
  33. package/dist/cjs/components/NumberField/NumberField.js.map +2 -2
  34. package/dist/cjs/components/NumberField/index.js +1 -2
  35. package/dist/cjs/components/NumberField/index.js.map +2 -2
  36. package/dist/cjs/components/PasswordField/PasswordField.js +1 -2
  37. package/dist/cjs/components/PasswordField/PasswordField.js.map +2 -2
  38. package/dist/cjs/components/PasswordField/ShowHideButton.js +1 -2
  39. package/dist/cjs/components/PasswordField/ShowHideButton.js.map +2 -2
  40. package/dist/cjs/components/PasswordField/index.js +1 -2
  41. package/dist/cjs/components/PasswordField/index.js.map +2 -2
  42. package/dist/cjs/components/Radio/Radio.js +1 -2
  43. package/dist/cjs/components/Radio/Radio.js.map +2 -2
  44. package/dist/cjs/components/Radio/RadioGroup.js +1 -2
  45. package/dist/cjs/components/Radio/RadioGroup.js.map +2 -2
  46. package/dist/cjs/components/Radio/index.js +1 -2
  47. package/dist/cjs/components/Radio/index.js.map +2 -2
  48. package/dist/cjs/components/Select/Select.js +1 -2
  49. package/dist/cjs/components/Select/Select.js.map +2 -2
  50. package/dist/cjs/components/Select/index.js +1 -2
  51. package/dist/cjs/components/Select/index.js.map +2 -2
  52. package/dist/cjs/components/TextArea/TextArea.js +1 -2
  53. package/dist/cjs/components/TextArea/TextArea.js.map +2 -2
  54. package/dist/cjs/components/TextArea/index.js +1 -2
  55. package/dist/cjs/components/TextArea/index.js.map +2 -2
  56. package/dist/cjs/components/TextField/TextField.js +1 -2
  57. package/dist/cjs/components/TextField/TextField.js.map +2 -2
  58. package/dist/cjs/components/TextField/index.js +1 -2
  59. package/dist/cjs/components/TextField/index.js.map +2 -2
  60. package/dist/cjs/components/index.js +1 -2
  61. package/dist/cjs/components/index.js.map +2 -2
  62. package/dist/cjs/index.js +1 -2
  63. package/dist/cjs/index.js.map +2 -2
  64. package/dist/cjs/meta.json +94 -94
  65. package/dist/esm/{chunk-MXQ4PJF4.js → chunk-H7GEWGKI.js} +2 -3
  66. package/dist/esm/chunk-H7GEWGKI.js.map +7 -0
  67. package/dist/esm/components/AddressLookup/AddressLookup.js +1 -1
  68. package/dist/esm/components/AddressLookup/index.js +1 -1
  69. package/dist/esm/components/Checkbox/Checkbox.js +1 -1
  70. package/dist/esm/components/Checkbox/CheckboxGroup.js +1 -1
  71. package/dist/esm/components/Checkbox/index.js +1 -1
  72. package/dist/esm/components/Combobox/Combobox.js +1 -1
  73. package/dist/esm/components/Combobox/index.js +1 -1
  74. package/dist/esm/components/DateField/DateField.js +1 -1
  75. package/dist/esm/components/DateField/index.js +1 -1
  76. package/dist/esm/components/ErrorMessage/ErrorMessage.js +1 -1
  77. package/dist/esm/components/ErrorMessage/index.js +1 -1
  78. package/dist/esm/components/ExpandableText/ExpandableText.js +1 -1
  79. package/dist/esm/components/ExpandableText/index.js +1 -1
  80. package/dist/esm/components/MaskedField/MaskedField.js +1 -1
  81. package/dist/esm/components/MaskedField/index.js +1 -1
  82. package/dist/esm/components/NumberField/NumberField.js +1 -1
  83. package/dist/esm/components/NumberField/index.js +1 -1
  84. package/dist/esm/components/PasswordField/PasswordField.js +1 -1
  85. package/dist/esm/components/PasswordField/ShowHideButton.js +1 -1
  86. package/dist/esm/components/PasswordField/index.js +1 -1
  87. package/dist/esm/components/Radio/Radio.js +1 -1
  88. package/dist/esm/components/Radio/RadioGroup.js +1 -1
  89. package/dist/esm/components/Radio/index.js +1 -1
  90. package/dist/esm/components/Select/Select.js +1 -1
  91. package/dist/esm/components/Select/index.js +1 -1
  92. package/dist/esm/components/TextArea/TextArea.js +1 -1
  93. package/dist/esm/components/TextArea/index.js +1 -1
  94. package/dist/esm/components/TextField/TextField.js +1 -1
  95. package/dist/esm/components/TextField/index.js +1 -1
  96. package/dist/esm/components/index.js +1 -1
  97. package/dist/esm/index.js +1 -1
  98. package/dist/esm/meta.json +37 -37
  99. package/dist/tsconfig.build.tsbuildinfo +1 -1
  100. package/package.json +3 -3
  101. package/src/components/Combobox/Combobox.tsx +1 -2
  102. package/dist/esm/chunk-MXQ4PJF4.js.map +0 -7
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@simplybusiness/mobius",
3
3
  "license": "UNLICENSED",
4
- "version": "9.3.2",
4
+ "version": "9.3.3",
5
5
  "description": "Core library of Mobius react components",
6
6
  "repository": {
7
7
  "type": "git",
@@ -68,8 +68,8 @@
68
68
  "@eslint/js": "^9.39.3",
69
69
  "@react-types/progress": "^3.5.18",
70
70
  "@simplybusiness/build-scripts": "^2.0.3",
71
- "@simplybusiness/eslint-config": "^2.0.3",
72
- "@simplybusiness/eslint-plugin": "^1.2.1",
71
+ "@simplybusiness/eslint-config": "^2.0.4",
72
+ "@simplybusiness/eslint-plugin": "^1.3.0",
73
73
  "@testing-library/dom": "^10.4.1",
74
74
  "@testing-library/jest-dom": "6.9.1",
75
75
  "@testing-library/react": "^16.3.2",
@@ -382,8 +382,7 @@ const ComboboxInner = <T extends ComboboxOption>({
382
382
  aria-describedby={isLoading ? statusId : undefined}
383
383
  aria-autocomplete="list"
384
384
  aria-haspopup="listbox"
385
- aria-owns={listboxId}
386
- aria-controls={listboxId}
385
+ aria-controls={isOpen ? listboxId : undefined}
387
386
  aria-expanded={isOpen}
388
387
  aria-activedescendant={
389
388
  highlightedIndex === -1 ? undefined : getHighlightedOptionId()
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/ErrorMessage/ErrorMessage.tsx", "../../src/components/AddressLookup/AddressLookup.tsx", "../../src/components/Combobox/Combobox.tsx", "../../src/components/TextField/TextField.tsx", "../../src/components/Checkbox/Checkbox.tsx", "../../src/components/Checkbox/CheckboxGroup.tsx", "../../src/components/DateField/DateField.tsx", "../../src/components/NumberField/NumberField.tsx", "../../src/components/PasswordField/PasswordField.tsx", "../../src/components/PasswordField/ShowHideButton.tsx", "../../src/components/Radio/Radio.tsx", "../../src/components/Radio/RadioGroup.tsx", "../../src/components/Select/Select.tsx", "../../src/components/TextArea/TextArea.tsx", "../../src/components/ExpandableText/ExpandableText.tsx", "../../src/components/MaskedField/index.tsx"],
4
- "sourcesContent": ["import { error } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport { TextOrHTML } from \"../..\";\nimport { Icon } from \"../Icon\";\nimport \"./ErrorMessage.css\";\n\nexport interface ErrorMessageProps {\n errorMessage?: string;\n id?: string;\n className?: string;\n}\n\nexport const ErrorMessage = ({\n id,\n errorMessage,\n className,\n}: ErrorMessageProps) => {\n const classes = classNames(\"mobius\", \"mobius-error-message\", className);\n\n if (!errorMessage) return null;\n\n return (\n <div id={id} className={classes} data-testid=\"ErrorMessage\" role=\"alert\">\n <Icon\n icon={error}\n className=\"mobius-error-message__icon\"\n aria-hidden=\"true\"\n />\n <TextOrHTML\n elementType=\"span\"\n className=\"mobius-error-message__text\"\n text={errorMessage}\n />\n </div>\n );\n};\n\nErrorMessage.displayName = \"ErrorMessage\";\n", "import { search } from \"@simplybusiness/icons\";\nimport { useCallback, useState } from \"react\";\nimport type { ComboboxOption } from \"../Combobox\";\nimport { Combobox } from \"../Combobox\";\nimport { Icon } from \"../Icon\";\nimport type {\n AddressLookupProps,\n AddressLookupService,\n LoqateSearchResponse,\n LoqateSearchResultItem,\n} from \"./types\";\nimport { isLoqateErrorResponse } from \"./utils\";\n\nfunction optionsFromResponse(\n { Items }: LoqateSearchResponse,\n addressLookupService: AddressLookupService,\n) {\n if (!Items || !Array.isArray(Items)) {\n throw Error(\"No address found\");\n }\n\n if (isLoqateErrorResponse(Items)) {\n throw Error(Items[0].Description);\n }\n\n return (Items as LoqateSearchResultItem[]).map(item => ({\n id: item.Id,\n label: `${item.Text}, ${item.Description}`,\n value: item.Text,\n // Add a callback to trigger secondary search\n // if the address type is not \"Address\"\n callback:\n item.Type === \"Address\"\n ? undefined\n : async () => {\n const result = await addressLookupService.findById(item.Id);\n return optionsFromResponse(result, addressLookupService);\n },\n }));\n}\n\nexport const AddressLookup = ({\n ref,\n addressLookupService,\n onAddressSelected,\n onOptionsDisplayed,\n onError,\n errorMessage,\n ...otherProps\n}: AddressLookupProps) => {\n const [error, _setError] = useState<Error | null>(null);\n\n const setError = useCallback(\n (newError: Error | null) => {\n if (newError != null) onError?.(newError);\n _setError(newError);\n },\n [onError],\n );\n\n const asyncOptions = useCallback(\n async (searchTerm: string) => {\n try {\n const response = await addressLookupService.search(searchTerm);\n setError(null);\n const options = optionsFromResponse(response, addressLookupService);\n onOptionsDisplayed?.();\n return options;\n } catch (e) {\n setError(e as Error);\n return [];\n }\n },\n [addressLookupService, setError, onOptionsDisplayed],\n );\n\n const handleSelected = (selected: ComboboxOption) => {\n setError(null);\n\n if (typeof selected === \"string\" || !selected.id) {\n setError(new Error(\"Selected option missing id\"));\n return Promise.resolve();\n }\n\n return addressLookupService\n .get(selected.id)\n .then(onAddressSelected)\n .catch(setError);\n };\n\n const realErrorMessage = (error && \"An error occurred\") || errorMessage;\n\n return (\n <Combobox\n {...otherProps}\n ref={ref}\n onSelected={handleSelected}\n asyncOptions={asyncOptions}\n errorMessage={realErrorMessage}\n icon={<Icon icon={search} />}\n />\n );\n};\n\nAddressLookup.displayName = \"AddressLookup\";\n", "import { useOnUnmount } from \"@simplybusiness/mobius-hooks\";\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport type { FocusEvent } from \"react\";\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport { useBreakpoint } from \"../../hooks\";\nimport { TextField } from \"../TextField\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport { Listbox } from \"./Listbox\"; // Import Listbox component\nimport type { ComboboxOption, ComboboxProps, ComboboxRef } from \"./types\";\nimport { useComboboxHighlight } from \"./useComboboxHighlight\";\nimport { useComboboxOptions } from \"./useComboboxOptions\";\nimport { getOptionLabel, getOptionValue, isOptionGroup } from \"./utils\";\nimport \"./Combobox.css\";\n\nconst ComboboxInner = <T extends ComboboxOption>({\n ref,\n ...props\n}: ComboboxProps<T>) => {\n const {\n id,\n defaultValue,\n value,\n options,\n asyncOptions,\n delay,\n minSearchLength,\n onSelected,\n className,\n placeholder,\n icon,\n onBlur,\n onFocus,\n onChange,\n // onSearched, // unused prop, consider removing\n optionComponent,\n optionTestIdPrefix,\n errorMessage,\n ...otherProps\n } = props;\n // Avoid re-fetching after selecting an option\n const skipNextDebounceRef = useRef(false);\n const fallbackRef = useRef<HTMLInputElement>(null);\n const [inputValue, setInputValue] = useState(defaultValue || \"\");\n const [isOpen, setIsOpen] = useState(false);\n const [isChanging, setIsChanging] = useState(false);\n const { filteredOptions, updateFilteredOptions, isLoading, error } =\n useComboboxOptions({\n options,\n asyncOptions,\n inputValue,\n delay,\n minSearchLength,\n skipNextDebounceRef,\n });\n const [validationError, setValidationError] = useState(\n error?.message || errorMessage,\n );\n const {\n highlightedIndex,\n highlightedGroupIndex,\n highlightNextOption,\n highlightPreviousOption,\n highlightFirstOption,\n highlightLastOption,\n clearHighlight,\n } = useComboboxHighlight(filteredOptions);\n\n const inputRef = ref || fallbackRef;\n const listboxId = useId();\n const statusId = useId();\n const blurTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const userInteractedRef = useRef(false);\n const justSelectedRef = useRef(false);\n const { down } = useBreakpoint();\n const isMobile = down(\"md\");\n\n useEffect(() => {\n setValidationError(error?.message || errorMessage);\n }, [error, errorMessage]);\n\n // Helper to create properly-typed empty value based on option type\n const getEmptyValue = (): T => {\n // Check first available option to determine if we're using string or object options\n const firstOption = filteredOptions\n ? isOptionGroup(filteredOptions)\n ? filteredOptions[0]?.options[0]\n : filteredOptions[0]\n : options\n ? isOptionGroup(options)\n ? options[0]?.options[0]\n : options[0]\n : undefined;\n\n // If options are strings, return empty string\n if (typeof firstOption === \"string\") {\n return \"\" as T;\n }\n\n // If options are objects, return empty object with same shape\n return { label: \"\", value: \"\" } as T;\n };\n\n const handleFocus = (e: FocusEvent) => {\n onFocus?.(e);\n if (!filteredOptions || filteredOptions.length === 0) return;\n if (blurTimeoutRef.current) {\n clearTimeout(blurTimeoutRef.current);\n blurTimeoutRef.current = null;\n }\n\n // Check if this is natural focus (user click/Tab) or programmatic focus\n const isNaturalFocus =\n userInteractedRef.current || e.relatedTarget !== null;\n if (userInteractedRef.current) {\n userInteractedRef.current = false;\n }\n\n // Block opening only if programmatic focus right after selection\n if (justSelectedRef.current && !isNaturalFocus) {\n return;\n }\n\n // Open dropdown for natural focus\n if (isNaturalFocus) {\n setIsOpen(true);\n justSelectedRef.current = false;\n }\n };\n\n useEffect(() => {\n if (!inputRef || typeof inputRef === \"function\") return;\n const inputElement = inputRef.current;\n if (!inputElement) return;\n\n const handleMouseDown = () => {\n // Track that user clicked/interacted with input\n userInteractedRef.current = true;\n };\n\n inputElement.addEventListener(\"mousedown\", handleMouseDown);\n return () => {\n inputElement.removeEventListener(\"mousedown\", handleMouseDown);\n };\n }, [inputRef]);\n\n useOnUnmount(() => {\n if (blurTimeoutRef.current) {\n clearTimeout(blurTimeoutRef.current);\n }\n });\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n setValidationError(undefined);\n justSelectedRef.current = false;\n setIsChanging(true);\n // Only open immediately for sync options; async options controlled by useEffect\n if (!asyncOptions) {\n setIsOpen(true);\n }\n clearHighlight();\n onChange?.(e);\n };\n\n const handleOptionSelect = (option: T) => {\n const val = getOptionValue(option);\n\n // Allow empty values to pass through\n if (!val && val !== \"\") return;\n\n if (\n typeof option === \"object\" &&\n \"callback\" in option &&\n option.callback &&\n typeof option.callback === \"function\"\n ) {\n justSelectedRef.current = true;\n setTimeout(() => {\n if (inputRef && typeof inputRef !== \"function\" && inputRef.current) {\n inputRef.current.focus();\n }\n }, 0);\n const callbackPromise = option.callback();\n updateFilteredOptions(callbackPromise);\n callbackPromise\n .then(() => {\n setIsOpen(true);\n setIsChanging(true);\n })\n .catch(() => {\n // error handled inside updateFilteredOptions via setError\n });\n return;\n }\n\n // Prevent re-fetching options after selecting an option\n skipNextDebounceRef.current = true;\n justSelectedRef.current = true;\n\n setIsChanging(false);\n setValidationError(undefined);\n setIsOpen(false);\n setInputValue(val);\n onSelected?.(option);\n };\n\n const getFirstOption = () => {\n if (!filteredOptions) return undefined;\n if (isOptionGroup(filteredOptions)) {\n return filteredOptions[0]?.options[0];\n }\n\n return filteredOptions[0];\n };\n\n const getHighlightedOption = () => {\n if (!filteredOptions) return undefined;\n if (highlightedIndex === -1) return undefined;\n\n if (isOptionGroup(filteredOptions)) {\n const group = filteredOptions[highlightedGroupIndex];\n return group?.options[highlightedIndex];\n }\n\n return filteredOptions[highlightedIndex];\n };\n\n const getHighlightedOptionId = () => {\n const option = getHighlightedOption();\n if (!option) return undefined;\n\n if (isOptionGroup(filteredOptions)) {\n return `${listboxId}-option-${highlightedGroupIndex}-${highlightedIndex}`;\n }\n\n return `${listboxId}-option-${highlightedIndex}`;\n };\n\n const handleBlur = (e: FocusEvent<Element, Element>) => {\n // Force selection if user has matched an entry by typing (not already selected)\n // Defer this to allow natural focus flow to complete first\n if (!justSelectedRef.current) {\n const typedText = inputValue.trim();\n const typedTextLower = typedText.toLowerCase();\n const highlightedOption = getHighlightedOption();\n const label = getOptionLabel(highlightedOption);\n\n if (typedTextLower === label?.toLowerCase()) {\n // Exact match with an option\n setTimeout(() => {\n handleOptionSelect(highlightedOption as T);\n }, 0);\n } else if (typedText === \"\") {\n // Allow empty values\n setTimeout(() => {\n handleOptionSelect(getEmptyValue());\n }, 0);\n } else {\n // Invalid value (not in options and not empty)\n setValidationError(\n errorMessage || \"Please select an option from the list\",\n );\n setTimeout(() => {\n setInputValue(\"\");\n }, 0);\n }\n }\n\n blurTimeoutRef.current = setTimeout(() => {\n onBlur?.(e);\n setIsOpen(false);\n setIsChanging(false);\n }, 150);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightNextOption();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightPreviousOption();\n break;\n case \"Home\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightFirstOption();\n break;\n case \"End\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightLastOption();\n break;\n case \"Enter\":\n e.preventDefault();\n if (isOpen) {\n const selectedOption = getHighlightedOption() || getFirstOption();\n if (selectedOption) {\n handleOptionSelect(selectedOption);\n }\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setInputValue(\"\");\n setIsOpen(false);\n clearHighlight();\n break;\n default:\n // Do nothing\n }\n };\n\n useEffect(() => {\n if (value) {\n setInputValue(value);\n }\n }, [value]);\n\n // Open and close the combobox based on async filtered options\n useEffect(() => {\n if (asyncOptions && isChanging) {\n setIsOpen(!!filteredOptions && filteredOptions.length > 0);\n }\n }, [filteredOptions, asyncOptions, isChanging]);\n\n const classes = classNames(\n \"mobius mobius-combobox\",\n {\n \"mobius-combobox--is-expanded\": isOpen,\n \"mobius-combobox--is-loading\": isLoading,\n \"mobius-combobox--is-mobile\": isMobile,\n },\n className,\n );\n\n const getStatusMessage = () => {\n if (isLoading) return \"Loading options\";\n if (!filteredOptions || filteredOptions.length === 0) {\n return isChanging ? \"No options found\" : \"\";\n }\n const count = isOptionGroup(filteredOptions)\n ? filteredOptions.reduce((sum, group) => sum + group.options.length, 0)\n : filteredOptions.length;\n return isOpen && isChanging\n ? `${count} option${count === 1 ? \"\" : \"s\"} available`\n : \"\";\n };\n\n return (\n <div id={id} data-testid=\"mobius-combobox__wrapper\" className={classes}>\n <VisuallyHidden\n role=\"status\"\n aria-live=\"polite\"\n id={statusId}\n elementType=\"div\"\n className=\"mobius-combobox__status\"\n >\n {getStatusMessage()}\n </VisuallyHidden>\n <TextField\n {...otherProps}\n className=\"mobius-combobox__input\"\n role=\"combobox\"\n value={inputValue}\n placeholder={placeholder}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={handleInputChange}\n autoComplete=\"off\"\n aria-describedby={isLoading ? statusId : undefined}\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-owns={listboxId}\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-activedescendant={\n highlightedIndex === -1 ? undefined : getHighlightedOptionId()\n }\n prefixInside={icon}\n ref={inputRef}\n errorMessage={errorMessage || validationError || error?.message}\n />\n <Listbox\n id={listboxId}\n isOpen={isOpen}\n isLoading={isLoading}\n options={filteredOptions}\n highlightedIndex={highlightedIndex}\n highlightedGroupIndex={highlightedGroupIndex}\n onOptionSelect={handleOptionSelect}\n optionComponent={optionComponent}\n optionTestIdPrefix={optionTestIdPrefix}\n />\n </div>\n );\n};\n\nexport const Combobox = ComboboxInner as <T extends ComboboxOption>(\n props: ComboboxProps<T> & { ref?: ComboboxRef },\n) => React.JSX.Element;\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type {\n HTMLInputTypeAttribute,\n ReactElement,\n ReactNode,\n Ref,\n RefAttributes,\n} from \"react\";\nimport type { UseTextFieldProps } from \"../../hooks\";\nimport { useTextField, useValidationClasses } from \"../../hooks\";\nimport type { DOMProps, FocusEvents } from \"../../types\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport { adornmentWithClassName } from \"./adornmentWithClassName\";\nimport \"./TextField.css\";\n\nexport type TextFieldElementType = HTMLInputElement;\nexport interface TextFieldProps\n extends\n DOMProps,\n FocusEvents,\n UseTextFieldProps,\n RefAttributes<TextFieldElementType> {\n className?: string;\n errorMessage?: string;\n children?: ReactNode;\n label?: string;\n type?: Exclude<\n HTMLInputTypeAttribute,\n | \"button\"\n | \"checkbox\"\n | \"color\"\n | \"date\"\n | \"datetime-local\"\n | \"file\"\n | \"image\"\n | \"month\"\n | \"radio\"\n | \"range\"\n | \"reset\"\n | \"submit\"\n | \"week\"\n >;\n prefixInside?: ReactElement;\n prefixOutside?: ReactElement;\n suffixInside?: ReactElement;\n suffixOutside?: ReactElement;\n}\n\nexport type TextFieldRef = Ref<TextFieldElementType>;\n\nconst TextField = ({ ref, ...props }: TextFieldProps) => {\n const {\n isDisabled,\n type = \"text\",\n isInvalid,\n className,\n label,\n errorMessage,\n children,\n isRequired,\n prefixInside,\n prefixOutside,\n suffixInside,\n suffixOutside,\n\n isReadOnly,\n ...otherProps\n } = props;\n\n const { inputProps, labelProps, errorMessageProps } = useTextField({\n ...props,\n \"aria-errormessage\": errorMessage,\n });\n\n const hidden = type === \"hidden\";\n\n const validationClasses = useValidationClasses({ isInvalid });\n\n const textfieldClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n \"--is-hidden\": hidden,\n [className || \"\"]: true,\n };\n\n const sharedClasses = classNames(validationClasses, textfieldClasses);\n\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-text-field\",\n sharedClasses,\n );\n\n const inputClasses = classNames(\n \"mobius\",\n \"mobius-text-field__input\",\n sharedClasses,\n );\n\n const inputWrapperClasses = classNames(\n \"mobius-text-field__input-wrapper\",\n sharedClasses,\n );\n\n return (\n <Stack gap=\"xs\" className={containerClasses}>\n {label && !hidden && (\n <Label {...labelProps} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className=\"mobius-text-field__inner-container\">\n {adornmentWithClassName(\n prefixOutside,\n labelClasses,\n \"mobius-text-field__prefix-outside\",\n )}\n <div className={inputWrapperClasses}>\n {adornmentWithClassName(\n prefixInside,\n labelClasses,\n \"mobius-text-field__prefix-inside\",\n )}\n <input\n {...otherProps}\n {...inputProps}\n ref={ref}\n type={type}\n className={inputClasses}\n />\n {adornmentWithClassName(\n suffixInside,\n labelClasses,\n \"mobius-text-field__suffix-inside\",\n )}\n </div>\n {adornmentWithClassName(\n suffixOutside,\n labelClasses,\n \"mobius-text-field__suffix-outside\",\n )}\n </div>\n {children && (\n <div className=\"mobius-text-field__children\">{children}</div>\n )}\n\n <ErrorMessage {...errorMessageProps} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nTextField.displayName = \"TextField\";\nexport { TextField };\n", "\"use client\";\n\nimport type { ChangeEvent } from \"react\";\nimport { useRef, useId, useState, useEffect } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport { squareTick, square } from \"@simplybusiness/icons\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport type { CheckboxElementType, CheckboxProps } from \"./types\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { useValidationClasses } from \"../../hooks\";\nimport { Icon } from \"../Icon\";\nimport { Stack } from \"../Stack\";\nimport \"./Checkbox.css\";\n\nexport const Checkbox = ({ ref, ...props }: CheckboxProps) => {\n const {\n id,\n label,\n isDisabled,\n isRequired,\n isInvalid,\n onChange,\n className,\n errorMessage,\n selected,\n defaultSelected = false,\n isReadOnly,\n isLastItem,\n name,\n value,\n [\"aria-describedby\"]: ariaDescribedBy,\n ...rest\n } = props;\n const [checked, setChecked] = useState<boolean>(defaultSelected);\n const fallbackRef = useRef<HTMLInputElement>(null);\n const refObj = ref || fallbackRef;\n const inputId = useId();\n\n const isControlled = typeof selected === \"boolean\";\n useEffect(() => {\n if (isControlled) {\n setChecked(selected);\n }\n }, [selected, isControlled]);\n\n const validationClasses = useValidationClasses({ isInvalid });\n const sharedClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n \"--is-selected\": checked,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n },\n validationClasses,\n );\n // Append an additional wrapper class name to differenitate from input\n const wrapperClasses = classNames(\n \"mobius\",\n \"mobius-checkbox\",\n sharedClasses,\n className,\n );\n const labelClasses = classNames(\"mobius-checkbox__label\", sharedClasses);\n const inputClasses = classNames(\"mobius-checkbox__input\", sharedClasses);\n const iconClasses = classNames(\"mobius-checkbox__icon\", sharedClasses);\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n ariaDescribedBy,\n ]);\n const labelId = useId();\n\n const handleChange = (event: ChangeEvent<CheckboxElementType>) => {\n setChecked(!checked);\n if (onChange) {\n onChange(event, isLastItem);\n }\n };\n\n return (\n <Stack gap=\"xs\" className={wrapperClasses}>\n <label className={labelClasses}>\n <input\n aria-describedby={describedBy}\n aria-errormessage={shouldErrorMessageShow}\n aria-invalid={isInvalid}\n aria-labelledby={labelId}\n readOnly={isReadOnly}\n disabled={isDisabled}\n ref={refObj}\n className={inputClasses}\n onChange={handleChange}\n type=\"checkbox\"\n checked={checked}\n required={isRequired}\n id={id || inputId}\n name={name}\n value={value}\n {...rest}\n />\n <Icon\n icon={checked ? squareTick : square}\n size=\"md\"\n className={iconClasses}\n />\n <span id={labelId} className=\"mobius-checkbox__visible-label\">\n {label}\n </span>\n </label>\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nCheckbox.displayName = \"Checkbox\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport {\n type ChangeEvent,\n type ReactElement,\n Children,\n cloneElement,\n isValidElement,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Checkbox } from \"./Checkbox\";\nimport type { CheckboxElementType, CheckboxGroupProps } from \"./types\";\nimport \"./CheckboxGroup.css\";\n\nexport const CheckboxGroup = ({ ref, ...props }: CheckboxGroupProps) => {\n const {\n label,\n isDisabled = false,\n isRequired,\n isInvalid,\n orientation = \"vertical\",\n onChange,\n className,\n errorMessage,\n children,\n defaultValue = [],\n isReadOnly,\n itemsPerRow,\n lastItemDisables = false,\n ...rest\n } = props;\n const [selected, setSelected] = useState<string[]>(defaultValue);\n\n // Handle controlled behavior - update state when defaultValue prop changes\n // Use a ref to track if we've initialized to avoid infinite re-renders\n const isInitializedRef = useRef(false);\n const prevDefaultValueRef = useRef<string[]>(defaultValue);\n\n useEffect(() => {\n // Only update if defaultValue has actually changed (shallow comparison)\n const hasChanged =\n defaultValue.length !== prevDefaultValueRef.current.length ||\n defaultValue.some(\n (val, index) => val !== prevDefaultValueRef.current[index],\n );\n\n if (hasChanged || !isInitializedRef.current) {\n setSelected(defaultValue);\n prevDefaultValueRef.current = defaultValue;\n isInitializedRef.current = true;\n }\n }, [defaultValue]);\n\n const checkboxGroupClasses = classNames(\n \"mobius\",\n \"mobius-checkbox-group\",\n className,\n {\n \"--is-horizontal\": orientation === \"horizontal\",\n \"--is-vertical\": orientation === \"vertical\",\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n },\n );\n const validationClasses = useValidationClasses({ isInvalid });\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n const labelId = useId();\n\n const handleChange = (\n event: ChangeEvent<CheckboxElementType>,\n isLastItem = false,\n ) => {\n const {\n target: { value, checked },\n } = event;\n let newValue = [...selected];\n\n if (!checked) {\n newValue = selected.filter(item => item !== value);\n }\n\n if (checked) {\n newValue = [...selected, value];\n }\n\n if (checked && lastItemDisables && isLastItem) {\n newValue = [value];\n }\n\n setSelected(newValue);\n onChange?.(newValue);\n };\n\n const childrenArray = Children.toArray(children);\n const lastCheckbox = childrenArray\n .filter(\n child =>\n isValidElement(child) && (child as ReactElement).type === Checkbox,\n )\n .pop() as ReactElement<CheckboxElementType> | undefined;\n const lastCheckboxIsChecked =\n lastCheckbox && selected.includes(lastCheckbox.props.value);\n\n return (\n <div\n {...rest}\n aria-labelledby={props[\"aria-labelledby\"] || labelId}\n ref={ref}\n className={checkboxGroupClasses}\n role=\"group\"\n style={\n {\n \"--checkbox-items-per-row\": itemsPerRow || Children.count(children),\n } as React.CSSProperties\n }\n >\n {label && (\n <Label elementType=\"span\" id={labelId} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className=\"mobius-checkbox-group__wrapper\">\n {childrenArray.map(child => {\n if (isValidElement(child)) {\n // lastItemDisables support\n const isLastItem = child === lastCheckbox;\n const isChildDisabled =\n isDisabled ||\n (lastItemDisables && lastCheckboxIsChecked && !isLastItem);\n\n const childProps = child.props as {\n value: string;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n };\n\n return cloneElement(\n child as ReactElement,\n {\n isDisabled: isChildDisabled,\n isRequired,\n isReadOnly,\n isInvalid,\n isLastItem,\n selected: selected.includes(childProps.value),\n onChange: childProps.onChange || handleChange,\n \"aria-describedby\": describedBy,\n } as Record<string, unknown>,\n );\n }\n\n return child;\n })}\n </div>\n {errorMessage && (\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n )}\n </div>\n );\n};\n\nCheckboxGroup.displayName = \"CheckboxGroup\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { FocusEvent, RefAttributes } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { mergeRefs } from \"../../utils/mergeRefs\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport { convertToDateFormat, isValidDate } from \"./validation\";\n\nexport interface DateFieldProps\n extends Omit<TextFieldProps, \"type\">, RefAttributes<TextFieldElementType> {\n /** The earliest date allowed for the input. */\n min?: string;\n /** The latest date allowed for the input. */\n max?: string;\n /** Date format to use. */\n format?: string;\n}\n\nexport const MIN_MAX_ERROR =\n '\"min\" value should not be greater than \"max\" value.';\n\nexport const DateField = ({ ref, ...props }: DateFieldProps) => {\n const {\n min,\n max,\n format,\n className,\n errorMessage,\n defaultValue,\n value,\n ...otherProps\n } = props;\n const [error, setError] = useState<string | undefined>(errorMessage);\n const [isInvalid, setIsInvalid] = useState<boolean | undefined>(undefined);\n const localRef = useRef<TextFieldElementType>(null);\n const classes = classNames(\"mobius-date-field\", className);\n\n // If a custom format is provided, convert the min, max,\n // and defaultValue dates to that format\n const formattedMin = min ? convertToDateFormat(min, format) : undefined;\n const formattedMax = max ? convertToDateFormat(max, format) : undefined;\n const formattedDefaultValue = defaultValue\n ? convertToDateFormat(defaultValue, format)\n : undefined;\n const formattedValue = value ? convertToDateFormat(value, format) : undefined;\n\n const setInvalidState = (error?: string) => {\n setError(error);\n setIsInvalid(true);\n };\n\n const setValidState = () => {\n setError(props.errorMessage);\n setIsInvalid(false);\n };\n\n // Validate min and max values\n useEffect(() => {\n if (!isValidDate(min, format)) {\n setInvalidState(`Invalid min date: ${min}`);\n return;\n }\n if (!isValidDate(max, format)) {\n setInvalidState(`Invalid max date: ${max}`);\n return;\n }\n\n if (min && max) {\n const minDate = new Date(min);\n const maxDate = new Date(max);\n if (minDate > maxDate) {\n setInvalidState(MIN_MAX_ERROR);\n } else {\n setValidState();\n }\n } else {\n setValidState();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [min, max, format]);\n\n const validate = () => {\n // If 'min' or 'max' values are provided, checkValidity() will\n // validate the date and return a boolean\n const isValidInput = localRef.current?.checkValidity();\n\n if (!isValidInput) {\n setInvalidState(\"Invalid date input\");\n } else {\n setValidState();\n }\n };\n\n // User has interacted with the component and navigated away\n const handleBlur = (event: FocusEvent<Element>) => {\n validate();\n otherProps.onBlur?.(event);\n };\n\n return (\n <TextField\n ref={mergeRefs([localRef, ref])}\n className={classes}\n type=\"date\"\n min={formattedMin}\n max={formattedMax}\n errorMessage={errorMessage ?? error}\n isInvalid={isInvalid}\n defaultValue={formattedDefaultValue}\n value={formattedValue}\n onBlur={handleBlur}\n {...otherProps}\n />\n );\n};\n\nDateField.displayName = \"DateField\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport { type RefAttributes, useCallback, useEffect, useRef } from \"react\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport \"./NumberField.css\";\n\nexport type NumberFieldElementType = TextFieldElementType;\n\nexport interface NumberFieldProps\n extends\n Omit<TextFieldProps, \"type\" | \"defaultValue\" | \"inputElementType\">,\n RefAttributes<NumberFieldElementType> {\n /** The smallest value allowed for the input. */\n minValue?: number;\n /** The largest value allowed for the input. */\n maxValue?: number;\n /** The amount that the input value changes with each increment or decrement \"tick\". */\n step?: number; // ??\n /** The default value for the input. */\n defaultValue?: number;\n /** Flag to hide the spin buttons. */\n hideSpinButtons?: boolean;\n}\n\nexport const NumberField = ({ ref, ...props }: NumberFieldProps) => {\n const {\n minValue,\n maxValue,\n step,\n defaultValue,\n hideSpinButtons,\n className,\n ...otherProps\n } = props;\n const {\n onFocus: customOnFocus,\n onBlur: customOnBlur,\n ...rest\n } = otherProps as Omit<TextFieldProps, \"onFocus\" | \"onBlur\"> & {\n onFocus?: React.FocusEventHandler<HTMLInputElement>;\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n };\n\n const focusedInputRef = useRef<HTMLInputElement | null>(null);\n const wheelHandler = useCallback((ev: Event) => ev.preventDefault(), []);\n\n useEffect(() => {\n return () => {\n focusedInputRef.current?.removeEventListener(\"wheel\", wheelHandler);\n focusedInputRef.current = null;\n };\n }, [wheelHandler]);\n\n const containerClasses = classNames(\"mobius-number-field\", className, {\n \"--hide-spin-buttons\": hideSpinButtons,\n });\n\n const handleBeforeInput = (\n event: React.FormEvent<NumberFieldElementType>,\n ) => {\n const { data } = event.nativeEvent as InputEvent;\n if (step && Number.isInteger(step) && data === \".\") {\n event.preventDefault();\n }\n if (minValue && minValue >= 0 && data === \"-\") {\n event.preventDefault();\n }\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n const { value } = event.target;\n const numValue = parseFloat(value);\n\n // On blur, snap to nearest valid step value if step is defined\n if (step && step > 1 && !isNaN(numValue)) {\n const baseValue = minValue ?? 0;\n const steps = Math.round((numValue - baseValue) / step);\n const snappedValue = baseValue + steps * step;\n\n // Only update if the value changed\n if (snappedValue !== numValue) {\n event.target.value = snappedValue.toString();\n // Trigger change event for the corrected value\n const changeEvent = new Event(\"change\", { bubbles: true });\n event.target.dispatchEvent(changeEvent);\n // Also call the onChange handler if provided\n const syntheticChangeEvent = {\n ...event,\n target: event.target,\n currentTarget: event.currentTarget,\n } as React.ChangeEvent<HTMLInputElement>;\n otherProps.onChange?.(syntheticChangeEvent);\n }\n }\n\n customOnBlur?.(event);\n };\n\n const forwardedProps: TextFieldProps = {\n ...rest,\n onFocus: e => {\n const el = e.currentTarget as HTMLInputElement;\n focusedInputRef.current?.removeEventListener(\"wheel\", wheelHandler);\n focusedInputRef.current = el;\n el.addEventListener(\"wheel\", wheelHandler, { passive: false });\n customOnFocus?.(e as React.FocusEvent<HTMLInputElement>);\n },\n onBlur: e => handleBlur(e as React.FocusEvent<HTMLInputElement>),\n };\n\n return (\n <TextField\n {...forwardedProps}\n className={containerClasses}\n onBeforeInput={handleBeforeInput}\n type=\"number\"\n min={minValue ?? undefined}\n max={maxValue ?? undefined}\n step={step}\n ref={ref}\n defaultValue={\n defaultValue != null ? defaultValue?.toString() : defaultValue\n }\n />\n );\n};\n\nNumberField.displayName = \"NumberField\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport { useRef, useState } from \"react\";\nimport { mergeRefs } from \"../../utils/mergeRefs\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport { ShowHideButton } from \"./ShowHideButton\";\nimport \"./PasswordField.css\";\n\nexport interface PasswordFieldProps extends TextFieldProps {}\n\nexport const PasswordField = ({\n ref,\n className,\n ...props\n}: PasswordFieldProps) => {\n const [show, setShow] = useState(false);\n const type = show ? \"text\" : \"password\";\n const classes = classNames(\"mobius-password-field\", className);\n const localRef = useRef<TextFieldElementType>(null);\n\n const handleShowHideButtonClick = () => {\n const selectionStart = localRef.current?.selectionStart;\n const selectionEnd = localRef.current?.selectionEnd;\n\n setShow(oldShow => !oldShow);\n requestAnimationFrame(() => {\n localRef.current?.focus();\n if (selectionStart != null && selectionEnd != null) {\n localRef.current?.setSelectionRange(selectionStart, selectionEnd);\n }\n });\n };\n\n return (\n <TextField\n ref={mergeRefs([localRef, ref])}\n className={classes}\n {...props}\n type={type}\n suffixInside={\n <ShowHideButton onClick={handleShowHideButtonClick} show={show} />\n }\n />\n );\n};\n\nPasswordField.displayName = \"PasswordField\";\n", "import { eye, eyeSlash } from \"@simplybusiness/icons\";\nimport { Icon } from \"../..\";\n\nexport interface ShowHideButtonProps {\n show?: boolean;\n onClick: () => void;\n}\n\nexport const ShowHideButton = ({\n show = false,\n onClick,\n}: ShowHideButtonProps) => (\n <button\n className=\"mobius-password-field__show-button\"\n type=\"button\"\n onClick={e => {\n e.preventDefault();\n onClick();\n }}\n aria-label={`${show ? \"Hide\" : \"Show\"} password`}\n data-testid=\"show-hide-button\"\n >\n <Icon icon={show ? eyeSlash : eye} aria-hidden=\"true\" />\n </button>\n);\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport {\n Children,\n isValidElement,\n useLayoutEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { HTMLElementEvent } from \"../../types/events\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport \"./Radio.css\";\n\nexport type RadioElementType = HTMLInputElement;\n\nexport type RadioOverflowInfo = {\n vertical: boolean;\n horizontal: boolean;\n};\n\nexport type AriaRadioProps = {\n /**\n * Defines a string value that labels the current element.\n */\n \"aria-label\"?: string;\n /**\n * Identifies the element (or elements) that labels the current element.\n */\n \"aria-labelledby\"?: string;\n /**\n * Identifies the element (or elements) that describes the object.\n */\n \"aria-describedby\"?: string;\n /**\n * Identifies the element (or elements) that provide a detailed, extended description for the object.\n */\n \"aria-details\"?: string;\n};\n\nexport interface RadioProps\n extends DOMProps, AriaRadioProps, RefAttributes<RadioElementType> {\n children?: ReactNode;\n className?: string;\n label?: ReactNode;\n errorMessage?: string;\n value: string;\n isDisabled?: boolean;\n onChange?: (event: HTMLElementEvent<RadioElementType>) => void;\n defaultChecked?: boolean;\n /**\n * Callback fired when label overflow state changes.\n * Only invoked when the Radio is in horizontal orientation to prevent infinite loops with autoStack.\n * Provides information about vertical and horizontal overflow.\n */\n onOverflow?: (overflow: RadioOverflowInfo) => void;\n // Internal:** Do not use\n groupDisabled?: boolean;\n // Internal:** Do not use\n name?: string;\n // Internal:** Do not use\n selected?: string;\n // Internal:** Do not use\n setSelected?: React.Dispatch<React.SetStateAction<string>>;\n isRequired?: boolean;\n /**\n * **Internal:** Passed via cloneElement from RadioGroup.\n * @internal\n */\n orientation?: \"horizontal\" | \"vertical\";\n}\n\nconst Radio = ({ ref, ...props }: RadioProps) => {\n const {\n children,\n value,\n label,\n className,\n isDisabled,\n errorMessage,\n onChange,\n defaultChecked,\n groupDisabled,\n name,\n selected,\n setSelected,\n isRequired,\n onOverflow,\n orientation,\n ...otherProps\n } = props;\n const realDisabled = groupDisabled || isDisabled;\n const isMultiline = label && children;\n const isControlled = selected !== undefined;\n const isChecked = isControlled ? selected === value : defaultChecked;\n\n const contentRef = useRef<HTMLDivElement>(null);\n const prevOverflowRef = useRef<RadioOverflowInfo>({\n vertical: false,\n horizontal: false,\n });\n\n const hasIconFirst = useMemo(() => {\n if (!children || Children.count(children) === 0) return false;\n\n const firstChild = Children.toArray(children)[0];\n if (!isValidElement(firstChild)) return false;\n\n const props = firstChild.props as Record<string, unknown>;\n return \"icon\" in props && props.icon !== undefined;\n }, [children]);\n\n // Detect overflow and call callback\n useLayoutEffect(() => {\n if (!contentRef.current || !onOverflow) return;\n\n // Only detect overflow when in horizontal orientation\n // This prevents infinite loops when autoStack switches to vertical\n if (orientation === \"vertical\") {\n return;\n }\n\n const element = contentRef.current;\n\n // Check for content being cut off (true overflow)\n const scrollOverflowVertical = element.scrollHeight > element.clientHeight;\n const scrollOverflowHorizontal = element.scrollWidth > element.clientWidth;\n\n // Check for multi-line text wrapping by comparing height to single line height\n const styles = window.getComputedStyle(element);\n const lineHeight = parseFloat(styles.lineHeight);\n const fontSize = parseFloat(styles.fontSize);\n const singleLineHeight = isNaN(lineHeight) ? fontSize * 1.2 : lineHeight;\n\n // Tolerance multiplier to account for sub-pixel rendering and line-height variations.\n // If element height is greater than single line, text has wrapped.\n const WRAP_DETECTION_TOLERANCE = 1.1;\n const hasWrapped =\n element.clientHeight > singleLineHeight * WRAP_DETECTION_TOLERANCE;\n\n const vertical = scrollOverflowVertical || hasWrapped;\n const horizontal = scrollOverflowHorizontal;\n\n const newOverflowState = { vertical, horizontal };\n const prevOverflow = prevOverflowRef.current;\n\n // Only call callback if state actually changed\n if (\n newOverflowState.vertical !== prevOverflow.vertical ||\n newOverflowState.horizontal !== prevOverflow.horizontal\n ) {\n prevOverflowRef.current = newOverflowState;\n onOverflow(newOverflowState);\n }\n }, [label, children, onOverflow, orientation]);\n\n const radioClasses = {\n \"--is-disabled\": realDisabled,\n \"--is-selected\": selected === value,\n \"--is-multiline\": !!isMultiline,\n \"--is-required\": isRequired,\n };\n const containerClasses = classNames(\n \"mobius-radio__label\",\n radioClasses,\n className,\n { \"--has-icon-first\": hasIconFirst },\n );\n\n const inputClasses = classNames(\"mobius-radio__input\", radioClasses);\n\n // Exclude props that are passed via cloneElement in `<RadioGroup />`\n const { \"aria-describedby\": _ariaDescribedBy, ...rest } = otherProps;\n\n // Handle all interactions through onChange event\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n // Update internal state for RadioGroup\n if (setSelected) {\n setSelected(event.target.value);\n }\n\n // Call parent onChange callback\n if (onChange) {\n // Create an HTMLElementEvent-compatible object\n const adaptedEvent: HTMLElementEvent<HTMLInputElement> = {\n ...event.nativeEvent,\n target: event.target,\n };\n onChange(adaptedEvent);\n }\n };\n\n return (\n <>\n <Label className={containerClasses}>\n <input\n aria-describedby={otherProps[\"aria-describedby\"]}\n disabled={realDisabled}\n ref={ref}\n className={inputClasses}\n value={value}\n tabIndex={0}\n type=\"radio\"\n onChange={handleChange}\n {...(isControlled\n ? { checked: isChecked }\n : { defaultChecked: isChecked })}\n name={name}\n required={isRequired}\n {...rest}\n />\n {isMultiline ? (\n <div ref={contentRef} className=\"mobius-radio__content--multiline\">\n <div className=\"mobius-radio__content-first-line\">{label}</div>\n <div className=\"mobius-radio__extra-content\">{children}</div>\n </div>\n ) : (\n <div ref={contentRef} className=\"mobius-radio__content\">\n {label || children}\n </div>\n )}\n </Label>\n {errorMessage && <ErrorMessage errorMessage={errorMessage} />}\n </>\n );\n};\n\nRadio.displayName = \"Radio\";\nexport { Radio };\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactElement, ReactNode, RefAttributes } from \"react\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport type { Validation } from \"../../types\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { HTMLElementEvent } from \"../../types/events\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport type { RadioOverflowInfo } from \"./Radio\";\n\nexport type RadioGroupElementType = HTMLDivElement;\n\nexport interface RadioGroupProps\n extends DOMProps, Validation, RefAttributes<RadioGroupElementType> {\n children: ReactNode;\n className?: string;\n orientation?: \"horizontal\" | \"vertical\";\n errorMessage?: string;\n // Callback that fires when select changes\n onChange?: (event: HTMLElementEvent<HTMLInputElement>) => void;\n /**\n * Automatically change orientation from horizontal to vertical when any Radio label overflows.\n * Only applies when orientation is set to \"horizontal\".\n */\n autoStack?: boolean;\n // Defines a string value that labels the current element.\n \"aria-label\"?: string;\n // Identifies the element (or elements) that labels the current element.\n \"aria-labelledby\"?: string;\n // Identifies the element that provides an error message for the object.\n \"aria-errormessage\"?: string;\n // Identifies the element (or elements) that describes the object.\n \"aria-describedby\"?: string;\n // Whether user input is required on the input before form submission.\n isRequired?: boolean;\n // Whether the input is disabled.\n isDisabled?: boolean;\n // Whether the input can be selected but not changed by the user.\n isReadOnly?: boolean;\n // The default value (uncontrolled).\n defaultValue?: string;\n // The content to display as the label.\n label?: ReactNode;\n /**\n * The value of the radio button, used when submitting an HTML form.\n * See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio#Value).\n */\n value?: string;\n name?: string;\n}\n\nconst getDefaultVal = (children: ReactNode, defaultValue?: string) => {\n if (Array.isArray(children) && defaultValue) {\n const option = children?.find(item => item.props.value === defaultValue);\n\n if (!option) return \"\";\n\n return option.props.value;\n }\n\n return \"\";\n};\n\nconst RadioGroup = ({ ref, ...props }: RadioGroupProps) => {\n const {\n label,\n isDisabled = false,\n isRequired,\n isInvalid,\n orientation = \"vertical\",\n className,\n errorMessage,\n children,\n defaultValue,\n value,\n isReadOnly,\n name,\n onChange,\n autoStack = false,\n ...rest\n } = props;\n const defaultSelected = getDefaultVal(children, value || defaultValue);\n const [selected, setSelected] = useState<string>(defaultSelected);\n const overflowsRef = useRef<Record<string, RadioOverflowInfo>>({});\n const [hasOverflow, setHasOverflow] = useState(false);\n\n // Handle controlled behavior - update state when value prop changes\n useEffect(() => {\n if (value !== undefined) {\n setSelected(value);\n }\n }, [value]);\n\n // Handle overflow detection and auto-stack if needed\n const handleOverflow = useCallback(\n (radioValue: string, overflow: RadioOverflowInfo) => {\n overflowsRef.current = {\n ...overflowsRef.current,\n [radioValue]: overflow,\n };\n\n // Check if any radio has overflow\n const anyOverflow = Object.values(overflowsRef.current).some(\n o => o.vertical || o.horizontal,\n );\n\n if (anyOverflow !== hasOverflow) {\n setHasOverflow(anyOverflow);\n }\n },\n [hasOverflow],\n );\n\n // Determine effective orientation (auto-stack if needed)\n const effectiveOrientation =\n autoStack && orientation === \"horizontal\" && hasOverflow\n ? \"vertical\"\n : orientation;\n\n const validationClasses = useValidationClasses({ isInvalid });\n const radioClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n [`--is-${effectiveOrientation}`]: true,\n [className || \"\"]: true,\n };\n const radioGroupClasses = classNames(\n \"mobius\",\n \"mobius-radio-group\",\n radioClasses,\n validationClasses,\n );\n const radioWrapperClasses = classNames(\"mobius-radio__wrapper\", {\n [`--is-${effectiveOrientation}`]: true,\n });\n const labelClasses = classNames(radioClasses, validationClasses);\n const errorMessageId = useId();\n const defaultNameAttrId = useId();\n const nameAttribute = name || defaultNameAttrId;\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n const labelId = useId();\n\n return (\n <div\n {...rest}\n aria-describedby={describedBy}\n aria-disabled={isDisabled}\n aria-errormessage={shouldErrorMessageShow}\n aria-invalid={isInvalid}\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"] || labelId}\n aria-orientation={effectiveOrientation}\n aria-readonly={isReadOnly}\n aria-required={isRequired}\n ref={ref}\n className={radioGroupClasses}\n role=\"radiogroup\"\n >\n <Stack gap=\"xs\">\n {label && (\n <Label htmlFor={name} id={labelId} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className={radioWrapperClasses}>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n const childValue = (child.props as { value?: string }).value;\n return cloneElement(\n child as ReactElement,\n {\n orientation: effectiveOrientation,\n groupDisabled: isDisabled,\n name: nameAttribute,\n selected: selected || defaultSelected, // in case state does not update\n setSelected,\n isRequired,\n \"aria-describedby\": describedBy,\n onChange,\n onOverflow: childValue\n ? (overflow: RadioOverflowInfo) =>\n handleOverflow(childValue, overflow)\n : undefined,\n } as Record<string, unknown>,\n );\n }\n\n return child;\n })}\n </div>\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n </Stack>\n </div>\n );\n};\n\nRadioGroup.displayName = \"RadioGroup\";\nexport { RadioGroup };\n", "\"use client\";\n\nimport { chevronDown } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport type { ChangeEvent, ReactElement, RefAttributes } from \"react\";\nimport { useId } from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport type { UseLabelProps } from \"../../hooks/useLabel\";\nimport { useLabel } from \"../../hooks/useLabel\";\nimport type { DOMProps, Validation } from \"../../types\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Icon } from \"../Icon\";\nimport { Label } from \"../Label\";\nimport type { OptionProps } from \"../Option\";\nimport { Stack } from \"../Stack\";\nimport \"./Select.css\";\n\nexport type SelectElementType = HTMLSelectElement;\nexport interface SelectProps\n extends\n UseLabelProps,\n Validation,\n DOMProps,\n RefAttributes<SelectElementType> {\n name?: string;\n onChange?: (e: ChangeEvent<HTMLSelectElement>) => void;\n value?: string;\n defaultValue?: string;\n className?: string;\n errorMessage?: string;\n children?: ReactElement<OptionProps>[] | ReactElement<OptionProps>;\n \"aria-describedby\"?: string;\n isDisabled?: boolean;\n}\n\nconst Select = ({ ref, ...props }: SelectProps) => {\n const {\n label,\n onChange,\n isInvalid,\n errorMessage,\n isDisabled = false,\n isRequired,\n ...otherProps\n } = props;\n\n const { labelProps, fieldProps } = useLabel({\n label,\n ...otherProps,\n });\n\n const validationClasses = useValidationClasses({ isInvalid });\n\n const stateClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n };\n\n const sharedClasses = classNames(validationClasses, stateClasses);\n\n const wrapperClasses = classNames(\n \"mobius-select__wrapper\",\n sharedClasses,\n otherProps.className,\n );\n const selectClasses = classNames(\n \"mobius-select\",\n sharedClasses,\n otherProps.className,\n );\n const labelClasses = classNames(\n \"mobius-label\",\n sharedClasses,\n otherProps.className,\n );\n const iconClasses = classNames(\"mobius-select__icon\", sharedClasses);\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n\n const handleChange = (e: ChangeEvent<HTMLSelectElement>) => {\n if (onChange) {\n onChange(e);\n }\n };\n\n return (\n <Stack className=\"mobius mobius-select__outer\" gap=\"xs\">\n {label && (\n <Label {...labelProps} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className={wrapperClasses}>\n <select\n {...otherProps}\n {...fieldProps}\n ref={ref}\n multiple={false}\n className={selectClasses}\n disabled={isDisabled}\n aria-invalid={!!errorMessage}\n aria-describedby={describedBy}\n aria-required={isRequired}\n required={isRequired}\n onChange={handleChange}\n />\n <span className={iconClasses}>\n <Icon icon={chevronDown} />\n </span>\n </div>\n {errorMessage && (\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n )}\n </Stack>\n );\n};\n\nSelect.displayName = \"Select\";\nexport { Select };\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { RefAttributes } from \"react\";\nimport type { UseTextFieldProps } from \"../../hooks\";\nimport { useTextField, useValidationClasses } from \"../../hooks\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport { TextAreaInput } from \"../TextAreaInput\";\nimport \"./TextArea.css\";\n\nexport type TextAreaElementType = HTMLTextAreaElement;\n\nexport interface TextAreaProps\n extends UseTextFieldProps, DOMProps, RefAttributes<TextAreaElementType> {\n className?: string;\n errorMessage?: string;\n}\n\nconst TextArea = ({ ref, ...props }: TextAreaProps) => {\n const {\n isDisabled,\n className,\n errorMessage,\n label,\n isInvalid,\n ...otherProps\n } = props;\n\n const { inputProps, labelProps, errorMessageProps } = useTextField(props);\n\n // Set class name for atom, including interaction state\n const classes = classNames(\"mobius\", \"mobius-text-area\", className);\n const validationClasses = useValidationClasses({ isInvalid });\n const inputClasses = classNames(\"mobius-text-area__input\", validationClasses);\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n\n return (\n <Stack className={classes} gap=\"xs\">\n {label && (\n <Label {...labelProps} className={labelClasses}>\n {props.label}\n </Label>\n )}\n <TextAreaInput\n {...otherProps}\n {...inputProps}\n ref={ref}\n className={inputClasses}\n isDisabled={isDisabled}\n aria-invalid={errorMessage != null}\n />\n <ErrorMessage {...errorMessageProps} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nTextArea.displayName = \"TextArea\";\nexport { TextArea };\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport type { RefAttributes } from \"react\";\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport { Accordion, TextOrHTML, useBreakpoint } from \"../..\";\nimport type { DOMProps } from \"../../types\";\nimport type { AccordionProps } from \"../Accordion/Accordion\";\nimport type { TextProps } from \"../Text/Text\";\nimport \"./ExpandableText.css\";\n\nexport type ExpandableTextElementType = HTMLDivElement;\n\nexport interface ExpandableTextProps\n extends DOMProps, RefAttributes<ExpandableTextElementType> {\n /** The text content to display (can be plain text or HTML) */\n text: string;\n /** Maximum number of lines to show when collapsed */\n maxLines?: number;\n /** Breakpoint at which collapsing should be applied. If not provided, collapsing is always applied */\n breakpoint?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Text for the expand trigger */\n showText?: string;\n /** Text for the collapse trigger */\n hideText?: string;\n /** Custom class name for the container */\n className?: string;\n /** Props to pass to the Text component */\n textProps?: Partial<TextProps>;\n /** Props to pass to the Accordion component */\n accordionProps?: Partial<AccordionProps>;\n /** Callback when expansion state changes */\n onToggle?: (expanded: boolean) => void;\n}\n\nexport const ExpandableText = ({ ref, ...props }: ExpandableTextProps) => {\n const {\n text,\n maxLines = 3,\n breakpoint,\n showText = \"Read more\",\n hideText = \"Read less\",\n className,\n textProps = {},\n accordionProps = {},\n onToggle,\n ...otherProps\n } = props;\n\n const [isExpanded, setIsExpanded] = useState(false);\n const [isCollapsed, setIsCollapsed] = useState(false);\n const textRef = useRef<HTMLDivElement>(null);\n const { down } = useBreakpoint();\n\n // Generate unique ID for accessibility\n const baseId = useId();\n const expandButtonId = `expandable-text-expand-${baseId}`;\n\n // Determine if content should be collapsible based on breakpoint\n const shouldCollapse = breakpoint ? down(breakpoint) : true;\n\n useEffect(() => {\n if (!shouldCollapse || !textRef.current) {\n setIsCollapsed(false);\n return;\n }\n\n // Check if text is actually collapsed by comparing scroll height with client height\n const element = textRef.current;\n const isOverflowing = element.scrollHeight > element.clientHeight;\n setIsCollapsed(isOverflowing);\n }, [text, shouldCollapse, maxLines]);\n\n // If breakpoint is specified and we're above it, show full text without collapsible UI\n if (breakpoint && !shouldCollapse) {\n return (\n <div ref={ref} className={className} {...otherProps}>\n <TextOrHTML text={text} textWrapper {...textProps} />\n </div>\n );\n }\n\n const handleAccordionChange = (expanded: boolean) => {\n setIsExpanded(expanded);\n onToggle?.(expanded);\n };\n\n const classes = classNames(\"mobius-expandable-text\", className);\n const textContainerClasses = classNames(\"mobius-expandable-text__content\", {\n \"mobius-expandable-text__content--collapsed\": !isExpanded,\n });\n\n // CSS custom property for dynamic line clamping\n const textContainerStyle = {\n \"--line-clamp\": maxLines,\n } as React.CSSProperties;\n\n return (\n <div\n ref={ref}\n className={classes}\n data-testid=\"expandable-text\"\n {...otherProps}\n >\n <div\n ref={textRef}\n className={textContainerClasses}\n style={textContainerStyle}\n data-testid=\"expandable-text-content\"\n aria-describedby={isCollapsed ? expandButtonId : undefined}\n >\n <TextOrHTML elementType=\"span\" textWrapper text={text} {...textProps} />\n </div>\n {isCollapsed && (\n <Accordion\n showText={showText}\n hideText={hideText}\n headerPosition=\"bottom\"\n onChange={handleAccordionChange}\n onClick={(e?: React.MouseEvent) => {\n e?.stopPropagation();\n }}\n id={expandButtonId}\n {...accordionProps}\n />\n )}\n </div>\n );\n};\n\nExpandableText.displayName = \"ExpandableText\";\n", "\"use client\";\n\nimport loadable from \"@loadable/component\";\nimport { TextField } from \"../TextField\";\nimport type { MaskedFieldProps } from \"./MaskedField\";\n\n/** Lazy-loads MaskedField (and react-imask) so consumers importing only TextField don't bundle react-imask. */\nconst LoadableMaskedField = loadable(() => import(\"./MaskedField\"), {\n resolveComponent: mod => mod.MaskedField,\n});\n\nexport function MaskedField(props: MaskedFieldProps) {\n const {\n mask: _mask,\n useMaskedValue: _useMaskedValue,\n \"data-testid\": _dataTestId,\n ref: forwardedRef,\n ...textFieldProps\n } = props;\n return (\n <LoadableMaskedField\n {...props}\n fallback={\n <TextField\n {...textFieldProps}\n ref={forwardedRef}\n type=\"text\"\n isDisabled\n isReadOnly\n />\n }\n />\n );\n}\n\nMaskedField.displayName = \"MaskedField\";\n\nexport type {\n MaskedFieldProps,\n MaskedFieldRef,\n MaskedFieldElementType,\n} from \"./MaskedField\";\n"],
5
- "mappings": "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",
6
- "names": ["classNames", "useState", "classNames", "jsx", "jsxs", "error", "classNames", "jsx", "error", "useState", "useRef", "useId", "useState", "useEffect", "classNames", "jsx", "jsxs", "useState", "useRef", "useId", "useEffect", "classNames", "classNames", "useEffect", "useId", "useRef", "useState", "jsx", "jsxs", "useState", "useRef", "useEffect", "classNames", "useId", "classNames", "useEffect", "useRef", "useState", "jsx", "error", "useState", "useRef", "classNames", "useEffect", "classNames", "useCallback", "useEffect", "useRef", "jsx", "useRef", "useCallback", "useEffect", "classNames", "classNames", "useRef", "useState", "jsx", "jsx", "useState", "classNames", "useRef", "classNames", "Children", "isValidElement", "useRef", "jsx", "jsxs", "useRef", "Children", "isValidElement", "props", "classNames", "classNames", "Children", "cloneElement", "isValidElement", "useCallback", "useEffect", "useId", "useRef", "useState", "jsx", "jsxs", "useState", "useRef", "useEffect", "useCallback", "classNames", "useId", "Children", "isValidElement", "cloneElement", "classNames", "useId", "jsx", "jsxs", "classNames", "useId", "classNames", "jsx", "jsxs", "classNames", "classNames", "useEffect", "useId", "useRef", "useState", "jsx", "jsxs", "useState", "useRef", "useId", "useEffect", "classNames", "jsx", "jsx", "jsxs", "classNames"]
7
- }