@databricks/design-system 2.0.6 → 2.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +239 -166
- package/CHANGELOG.md +36 -0
- package/dist/{RHFControlledTypeaheadComboboxV2-Ct9x3rC1.js → RHFControlledTypeaheadComboboxV2-Boee19c1.js} +3 -3
- package/dist/{RHFControlledTypeaheadComboboxV2-Ct9x3rC1.js.map → RHFControlledTypeaheadComboboxV2-Boee19c1.js.map} +1 -1
- package/dist/{WizardStepContentWrapper-6YTjeEaA.js → WizardStepContentWrapper-DfErft8z.js} +201 -257
- package/dist/WizardStepContentWrapper-DfErft8z.js.map +1 -0
- package/dist/dubois-colors.less +3 -1
- package/dist/icon-metadata.json +5 -0
- package/dist/{index-DiRpSwH2.js → index-CUzS-Vjx.js} +121 -109
- package/dist/index-CUzS-Vjx.js.map +1 -0
- package/dist/index-dark.css +136 -1
- package/dist/index-dark.mitigated.css +164 -16
- package/dist/index.css +183 -28
- package/dist/index.js +2 -2
- package/dist/index.mitigated.css +211 -43
- package/dist/patterns.js +1 -1
- package/dist-types/design-system/Alert/Alert.d.ts +21 -4
- package/dist-types/design-system/Button/Button.d.ts +2 -1
- package/dist-types/design-system/Icon/__generated/icons/SlidesIcon.d.ts +4 -0
- package/dist-types/design-system/Icon/__generated/icons/index.d.ts +1 -0
- package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxControls.d.ts +0 -2
- package/dist-types/design-system/index.d.ts +0 -1
- package/dist-types/design-system/utils/safex.d.ts +4 -2
- package/dist-types/theme/_generated/ValidSemanticColors.d.ts +1 -0
- package/dist-types/theme/generalVariables.d.ts +0 -1
- package/package.json +5 -4
- package/setup.mjs +586 -0
- package/dist/WizardStepContentWrapper-6YTjeEaA.js.map +0 -1
- package/dist/index-DiRpSwH2.js.map +0 -1
- package/dist-types/design-system/LegacyTooltip/LegacyTooltip.d.ts +0 -47
- package/dist-types/design-system/LegacyTooltip/index.d.ts +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,41 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.0.8 (2026-09-17T22:25:31Z)
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- New `composerBackground` semantic color token, mapped to white in light/consumer-light themes and grey700 in dark/consumer-dark themes.
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
- `DatePicker` prefix label and calendar input value now share the same baseline and typeface; previously the native date input fell back to the browser's monospace face, leaving the value misaligned with adjacent labels.
|
|
10
|
+
|
|
11
|
+
## 2.0.7 (2026-09-17T20:28:50Z)
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- New `SlidesIcon` component available for import from `@databricks/design-system`.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- `Button`: replaced the boolean `useNativeButtonOverride` prop with a tri-state `forceMode` prop. Values: `'native'` (default — always uses the native implementation), `'legacy-antd'` (always uses the AntD implementation), or `'flag'` (defers to the `databricks.fe.designsystem.useNativeButton` SAFE flag). Existing callsites should add `forceMode="flag"` to preserve current flag-gated behavior.
|
|
20
|
+
- `LegacyForm.Item`: the label help icon now renders as the Du Bois `InfoSmallIcon` instead of AntD's `QuestionCircleOutlined`. A caller-supplied tooltip icon still takes precedence.
|
|
21
|
+
- Design-system `safex` and `serverSideSafe` wrappers now accept an optional `testDefault` argument for controlling flag values in Jest and `UiTestServer` fallback paths.
|
|
22
|
+
- `AlertProps` no longer references AntD types on its public surface.
|
|
23
|
+
|
|
24
|
+
### Deprecated
|
|
25
|
+
|
|
26
|
+
- `theme.general.iconfontCssPrefix` has been removed from the theme object.
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
|
|
30
|
+
- `Switch` (native/Radix variant): the track no longer collapses to zero width when a host app's legacy `input[type='checkbox']` CSS reset is present (e.g. Bootstrap).
|
|
31
|
+
- `Notification` (Radix Toast): toast close buttons are now clickable while a modal is open, and the empty toast viewport band no longer blocks clicks to content beneath it.
|
|
32
|
+
- `TypeaheadCombobox` (v1 multi-select): clear and chevron controls are now vertically centered within the tag row.
|
|
33
|
+
- `LegacySelect`: the dropdown chevron no longer shifts out of alignment when rendered with a native `.db-icon` element.
|
|
34
|
+
|
|
35
|
+
### Removed
|
|
36
|
+
|
|
37
|
+
- `LegacyTooltip` has been removed from `@databricks/design-system`. Use `Tooltip` instead.
|
|
38
|
+
|
|
3
39
|
## 2.0.6 (2026-09-15T18:10:12Z)
|
|
4
40
|
|
|
5
41
|
### Added
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsxs, jsx } from '@emotion/react/jsx-runtime';
|
|
2
2
|
import React__default, { useRef, useCallback } from 'react';
|
|
3
3
|
import { useController } from 'react-hook-form';
|
|
4
|
-
import { u as useComboboxState, T as TypeaheadComboboxRoot, a as TypeaheadComboboxMultiSelectInput, b as TypeaheadComboboxMenu, c as TypeaheadComboboxInput } from './index-
|
|
5
|
-
import './WizardStepContentWrapper-
|
|
4
|
+
import { u as useComboboxState, T as TypeaheadComboboxRoot, a as TypeaheadComboboxMultiSelectInput, b as TypeaheadComboboxMenu, c as TypeaheadComboboxInput } from './index-CUzS-Vjx.js';
|
|
5
|
+
import './WizardStepContentWrapper-DfErft8z.js';
|
|
6
6
|
import '@react-aria/listbox';
|
|
7
7
|
import 'classnames';
|
|
8
8
|
import '@emotion/react';
|
|
@@ -169,4 +169,4 @@ function RHFControlledMultiSelectTypeaheadComboboxV2({ name, control, rules, all
|
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
export { RHFControlledMultiSelectTypeaheadComboboxV2, RHFControlledTypeaheadComboboxV2 };
|
|
172
|
-
//# sourceMappingURL=RHFControlledTypeaheadComboboxV2-
|
|
172
|
+
//# sourceMappingURL=RHFControlledTypeaheadComboboxV2-Boee19c1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RHFControlledTypeaheadComboboxV2-Ct9x3rC1.js","sources":["../src/design-system/FormV2/RHFControlledTypeaheadComboboxV2.tsx"],"sourcesContent":["import type { Key } from '@react-types/shared';\nimport type { HTMLAttributes } from 'react';\nimport React, { useCallback, useRef } from 'react';\nimport type { Control, FieldPath, FieldValues, UseControllerProps } from 'react-hook-form';\nimport { useController } from 'react-hook-form';\n\nimport type { DesignSystemEventProviderAnalyticsEventTypes } from '../DesignSystemEventProvider';\nimport {\n TypeaheadComboboxInput as TypeaheadComboboxV2Input,\n TypeaheadComboboxMenu as TypeaheadComboboxV2Menu,\n TypeaheadComboboxMultiSelectInput as TypeaheadComboboxV2MultiSelectInput,\n TypeaheadComboboxRoot as TypeaheadComboboxV2Root,\n useComboboxState as useComboboxStateV2,\n} from '../TypeaheadComboboxV2';\nimport type { TypeaheadComboboxInputProps as TypeaheadComboboxV2InputProps } from '../TypeaheadComboboxV2/TypeaheadComboboxInput';\nimport type { TypeaheadComboboxMenuProps as TypeaheadComboboxV2MenuProps } from '../TypeaheadComboboxV2/TypeaheadComboboxMenu';\nimport type { TypeaheadComboboxMultiSelectInputProps as TypeaheadComboboxV2MultiSelectInputProps } from '../TypeaheadComboboxV2/TypeaheadComboboxMultiSelectInput';\nimport type { TypeaheadComboboxRootProps as TypeaheadComboboxV2RootProps } from '../TypeaheadComboboxV2/TypeaheadComboboxRoot';\nimport type { ComboboxStateValue } from '../TypeaheadComboboxV2/hooks/useComboboxState';\nimport type { AnalyticsEventValueChangeNoPiiFlagProps, ValidationState } from '../types';\n\n// This file holds the react-aria TypeaheadComboboxV2 RHF adapters, split out of RHFAdapters.tsx so the\n// (broadly imported) RHFControlledComponents barrel does not statically pull the react-aria combobox\n// subtree into the common chunk. RHFAdapters.tsx React.lazy-imports these, so the ~175KB subtree only\n// loads on pages that actually render a V2 typeahead.\n\n// These props are omitted, as `useController` handles them. (Mirrors RHFAdapters.tsx.)\ntype OmittedOriginalProps = 'name' | 'onChange' | 'onBlur' | 'value' | 'defaultValue' | 'checked';\n\nexport interface RHFControlledTypeaheadComboboxV2Props<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>\n extends\n Omit<\n TypeaheadComboboxV2RootProps<TFieldValues[TName]>,\n OmittedOriginalProps | 'comboboxState' | 'componentId' | 'children'\n >,\n UseControllerProps<TFieldValues, TName>,\n AnalyticsEventValueChangeNoPiiFlagProps<DesignSystemEventProviderAnalyticsEventTypes.OnValueChange> {\n control: Control<TFieldValues, any>;\n name: TName;\n // The react-aria hook owns filtering, so children render `comboboxState.filteredItems` rather than\n // receiving a consumer-maintained `items` list (the key API change from the legacy adapter).\n children: (renderProps: { comboboxState: ComboboxStateValue<Required<TFieldValues>[TName]> }) => React.ReactNode;\n validationState?: ValidationState;\n allItems: Required<TFieldValues>[TName][];\n itemToString: (item: Required<TFieldValues>[TName]) => string;\n matcher?: (item: Required<TFieldValues>[TName], query: string) => boolean;\n getKey?: (item: Required<TFieldValues>[TName]) => Key;\n /* Whether to allow the input value to not match any options in the list. For this to work, the item type (T) must be a string.\n * Defaults to false.\n */\n allowNewValue?: boolean;\n inputProps?: Partial<Omit<TypeaheadComboboxV2InputProps, 'componentId'>>;\n menuProps?: Partial<TypeaheadComboboxV2MenuProps>;\n onInputChange?: (inputValue: string) => void;\n /** @deprecated No-op under react-aria; accepted for source-compat while migrating off the legacy adapter. */\n preventUnsetOnBlur?: boolean;\n}\n\nexport function RHFControlledTypeaheadComboboxV2<\n TFieldValues extends FieldValues,\n TName extends FieldPath<TFieldValues>,\n>({\n name,\n control,\n rules,\n allItems,\n itemToString,\n matcher,\n getKey,\n allowNewValue,\n children,\n validationState,\n inputProps,\n menuProps,\n onInputChange,\n componentId,\n analyticsEvents,\n valueHasNoPii,\n preventUnsetOnBlur,\n ...props\n}: RHFControlledTypeaheadComboboxV2Props<TFieldValues, TName> &\n Omit<HTMLAttributes<HTMLDivElement>, 'children'>): JSX.Element {\n const { field } = useController<TFieldValues, TName>({\n name,\n control,\n rules,\n });\n\n const comboboxState = useComboboxStateV2({\n allItems,\n itemToString,\n getKey,\n matcher,\n allowNewValue,\n formValue: field.value,\n formOnChange: field.onChange,\n formOnBlur: field.onBlur,\n componentId,\n analyticsEvents,\n valueHasNoPii,\n preventUnsetOnBlur,\n // react-aria owns the input value; surface changes through the 'input' state event so the legacy\n // `onInputChange` contract keeps working without making the input value a controlled prop.\n onStateChange: onInputChange\n ? (change) => {\n if (change.type === 'input') {\n onInputChange(change.inputValue);\n }\n }\n : undefined,\n });\n\n return (\n <TypeaheadComboboxV2Root {...props} comboboxState={comboboxState}>\n <TypeaheadComboboxV2Input {...inputProps} validationState={validationState} ref={field.ref} />\n <TypeaheadComboboxV2Menu {...menuProps}>{children({ comboboxState })}</TypeaheadComboboxV2Menu>\n </TypeaheadComboboxV2Root>\n );\n}\n\nexport interface RHFControlledMultiSelectTypeaheadComboboxV2Props<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>\n extends\n Omit<\n TypeaheadComboboxV2RootProps<TFieldValues>,\n OmittedOriginalProps | 'comboboxState' | 'componentId' | 'children'\n >,\n UseControllerProps<TFieldValues, TName>,\n AnalyticsEventValueChangeNoPiiFlagProps<DesignSystemEventProviderAnalyticsEventTypes.OnValueChange> {\n control: Control<any, TFieldValues>;\n // Required override because the full array is the field value, but TName implies a scalar property.\n name: any;\n children: (renderProps: {\n comboboxState: ComboboxStateValue<TFieldValues>;\n selectedItems: TFieldValues[];\n }) => React.ReactNode;\n validationState?: ValidationState;\n allItems: TFieldValues[];\n itemToString: (item: TFieldValues) => string;\n matcher?: (item: TFieldValues, query: string) => boolean;\n getKey?: (item: TFieldValues) => Key;\n inputProps?: Partial<\n Omit<\n TypeaheadComboboxV2MultiSelectInputProps<TFieldValues>,\n 'selectedItems' | 'setSelectedItems' | 'getSelectedItemLabel'\n >\n >;\n menuProps?: Partial<TypeaheadComboboxV2MenuProps>;\n onInputChange?: (inputValue: string) => void;\n}\n\nexport function RHFControlledMultiSelectTypeaheadComboboxV2<TFieldValues extends FieldValues>({\n name,\n control,\n rules,\n allItems,\n itemToString,\n matcher,\n getKey,\n children,\n validationState,\n inputProps,\n menuProps,\n onInputChange,\n componentId,\n analyticsEvents,\n valueHasNoPii,\n ...props\n}: RHFControlledMultiSelectTypeaheadComboboxV2Props<TFieldValues> &\n Omit<HTMLAttributes<HTMLDivElement>, 'children'>): JSX.Element {\n const { field } = useController({\n name,\n control,\n rules,\n });\n\n // The array field value IS the selection — drive it straight from RHF, no local mirror. `getKey`\n // must be stable across renders (react-aria keys options by it) so memoize on field.value identity.\n const selectedItems = React.useMemo<TFieldValues[]>(() => field.value ?? [], [field.value]);\n const selectedItemsRef = useRef(selectedItems);\n selectedItemsRef.current = selectedItems;\n\n // The hook always calls this with a concrete array on a selection commit, but the setter type also\n // permits an updater function — resolve it against the latest selection so both shapes are correct.\n const setSelectedItems = useCallback<React.Dispatch<React.SetStateAction<TFieldValues[]>>>(\n (next) => {\n const resolved = typeof next === 'function' ? next(selectedItemsRef.current) : next;\n field.onChange(resolved);\n },\n [field],\n );\n\n const comboboxState = useComboboxStateV2<TFieldValues>({\n allItems,\n itemToString,\n getKey,\n matcher,\n multiSelect: true,\n // Multi-select drives the form through selectedItems/setSelectedItems (above), not the single-select\n // form bridge: formValue/formOnChange/formOnBlur are single-value props, and passing the array field\n // value as formValue would feed itemToString an array (breaking the input filter).\n selectedItems,\n setSelectedItems,\n componentId,\n analyticsEvents,\n valueHasNoPii,\n onStateChange: onInputChange\n ? (change) => {\n if (change.type === 'input') {\n onInputChange(change.inputValue);\n }\n }\n : undefined,\n });\n\n return (\n <TypeaheadComboboxV2Root {...props} comboboxState={comboboxState}>\n <TypeaheadComboboxV2MultiSelectInput\n {...inputProps}\n selectedItems={selectedItems}\n setSelectedItems={setSelectedItems}\n getSelectedItemLabel={itemToString}\n validationState={validationState}\n ref={field.ref}\n />\n <TypeaheadComboboxV2Menu {...menuProps}>\n {children({\n comboboxState,\n selectedItems,\n })}\n </TypeaheadComboboxV2Menu>\n </TypeaheadComboboxV2Root>\n );\n}\n"],"names":["RHFControlledTypeaheadComboboxV2","name","control","rules","allItems","itemToString","matcher","getKey","allowNewValue","children","validationState","inputProps","menuProps","onInputChange","componentId","analyticsEvents","valueHasNoPii","preventUnsetOnBlur","props","field","useController","comboboxState","useComboboxStateV2","formValue","value","formOnChange","onChange","formOnBlur","onBlur","onStateChange","change","type","inputValue","undefined","_jsxs","TypeaheadComboboxV2Root","_jsx","TypeaheadComboboxV2Input","ref","TypeaheadComboboxV2Menu","RHFControlledMultiSelectTypeaheadComboboxV2","selectedItems","React","useMemo","selectedItemsRef","useRef","current","setSelectedItems","useCallback","next","resolved","multiSelect","TypeaheadComboboxV2MultiSelectInput","getSelectedItemLabel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RHFControlledTypeaheadComboboxV2-Boee19c1.js","sources":["../src/design-system/FormV2/RHFControlledTypeaheadComboboxV2.tsx"],"sourcesContent":["import type { Key } from '@react-types/shared';\nimport type { HTMLAttributes } from 'react';\nimport React, { useCallback, useRef } from 'react';\nimport type { Control, FieldPath, FieldValues, UseControllerProps } from 'react-hook-form';\nimport { useController } from 'react-hook-form';\n\nimport type { DesignSystemEventProviderAnalyticsEventTypes } from '../DesignSystemEventProvider';\nimport {\n TypeaheadComboboxInput as TypeaheadComboboxV2Input,\n TypeaheadComboboxMenu as TypeaheadComboboxV2Menu,\n TypeaheadComboboxMultiSelectInput as TypeaheadComboboxV2MultiSelectInput,\n TypeaheadComboboxRoot as TypeaheadComboboxV2Root,\n useComboboxState as useComboboxStateV2,\n} from '../TypeaheadComboboxV2';\nimport type { TypeaheadComboboxInputProps as TypeaheadComboboxV2InputProps } from '../TypeaheadComboboxV2/TypeaheadComboboxInput';\nimport type { TypeaheadComboboxMenuProps as TypeaheadComboboxV2MenuProps } from '../TypeaheadComboboxV2/TypeaheadComboboxMenu';\nimport type { TypeaheadComboboxMultiSelectInputProps as TypeaheadComboboxV2MultiSelectInputProps } from '../TypeaheadComboboxV2/TypeaheadComboboxMultiSelectInput';\nimport type { TypeaheadComboboxRootProps as TypeaheadComboboxV2RootProps } from '../TypeaheadComboboxV2/TypeaheadComboboxRoot';\nimport type { ComboboxStateValue } from '../TypeaheadComboboxV2/hooks/useComboboxState';\nimport type { AnalyticsEventValueChangeNoPiiFlagProps, ValidationState } from '../types';\n\n// This file holds the react-aria TypeaheadComboboxV2 RHF adapters, split out of RHFAdapters.tsx so the\n// (broadly imported) RHFControlledComponents barrel does not statically pull the react-aria combobox\n// subtree into the common chunk. RHFAdapters.tsx React.lazy-imports these, so the ~175KB subtree only\n// loads on pages that actually render a V2 typeahead.\n\n// These props are omitted, as `useController` handles them. (Mirrors RHFAdapters.tsx.)\ntype OmittedOriginalProps = 'name' | 'onChange' | 'onBlur' | 'value' | 'defaultValue' | 'checked';\n\nexport interface RHFControlledTypeaheadComboboxV2Props<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>\n extends\n Omit<\n TypeaheadComboboxV2RootProps<TFieldValues[TName]>,\n OmittedOriginalProps | 'comboboxState' | 'componentId' | 'children'\n >,\n UseControllerProps<TFieldValues, TName>,\n AnalyticsEventValueChangeNoPiiFlagProps<DesignSystemEventProviderAnalyticsEventTypes.OnValueChange> {\n control: Control<TFieldValues, any>;\n name: TName;\n // The react-aria hook owns filtering, so children render `comboboxState.filteredItems` rather than\n // receiving a consumer-maintained `items` list (the key API change from the legacy adapter).\n children: (renderProps: { comboboxState: ComboboxStateValue<Required<TFieldValues>[TName]> }) => React.ReactNode;\n validationState?: ValidationState;\n allItems: Required<TFieldValues>[TName][];\n itemToString: (item: Required<TFieldValues>[TName]) => string;\n matcher?: (item: Required<TFieldValues>[TName], query: string) => boolean;\n getKey?: (item: Required<TFieldValues>[TName]) => Key;\n /* Whether to allow the input value to not match any options in the list. For this to work, the item type (T) must be a string.\n * Defaults to false.\n */\n allowNewValue?: boolean;\n inputProps?: Partial<Omit<TypeaheadComboboxV2InputProps, 'componentId'>>;\n menuProps?: Partial<TypeaheadComboboxV2MenuProps>;\n onInputChange?: (inputValue: string) => void;\n /** @deprecated No-op under react-aria; accepted for source-compat while migrating off the legacy adapter. */\n preventUnsetOnBlur?: boolean;\n}\n\nexport function RHFControlledTypeaheadComboboxV2<\n TFieldValues extends FieldValues,\n TName extends FieldPath<TFieldValues>,\n>({\n name,\n control,\n rules,\n allItems,\n itemToString,\n matcher,\n getKey,\n allowNewValue,\n children,\n validationState,\n inputProps,\n menuProps,\n onInputChange,\n componentId,\n analyticsEvents,\n valueHasNoPii,\n preventUnsetOnBlur,\n ...props\n}: RHFControlledTypeaheadComboboxV2Props<TFieldValues, TName> &\n Omit<HTMLAttributes<HTMLDivElement>, 'children'>): JSX.Element {\n const { field } = useController<TFieldValues, TName>({\n name,\n control,\n rules,\n });\n\n const comboboxState = useComboboxStateV2({\n allItems,\n itemToString,\n getKey,\n matcher,\n allowNewValue,\n formValue: field.value,\n formOnChange: field.onChange,\n formOnBlur: field.onBlur,\n componentId,\n analyticsEvents,\n valueHasNoPii,\n preventUnsetOnBlur,\n // react-aria owns the input value; surface changes through the 'input' state event so the legacy\n // `onInputChange` contract keeps working without making the input value a controlled prop.\n onStateChange: onInputChange\n ? (change) => {\n if (change.type === 'input') {\n onInputChange(change.inputValue);\n }\n }\n : undefined,\n });\n\n return (\n <TypeaheadComboboxV2Root {...props} comboboxState={comboboxState}>\n <TypeaheadComboboxV2Input {...inputProps} validationState={validationState} ref={field.ref} />\n <TypeaheadComboboxV2Menu {...menuProps}>{children({ comboboxState })}</TypeaheadComboboxV2Menu>\n </TypeaheadComboboxV2Root>\n );\n}\n\nexport interface RHFControlledMultiSelectTypeaheadComboboxV2Props<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>\n extends\n Omit<\n TypeaheadComboboxV2RootProps<TFieldValues>,\n OmittedOriginalProps | 'comboboxState' | 'componentId' | 'children'\n >,\n UseControllerProps<TFieldValues, TName>,\n AnalyticsEventValueChangeNoPiiFlagProps<DesignSystemEventProviderAnalyticsEventTypes.OnValueChange> {\n control: Control<any, TFieldValues>;\n // Required override because the full array is the field value, but TName implies a scalar property.\n name: any;\n children: (renderProps: {\n comboboxState: ComboboxStateValue<TFieldValues>;\n selectedItems: TFieldValues[];\n }) => React.ReactNode;\n validationState?: ValidationState;\n allItems: TFieldValues[];\n itemToString: (item: TFieldValues) => string;\n matcher?: (item: TFieldValues, query: string) => boolean;\n getKey?: (item: TFieldValues) => Key;\n inputProps?: Partial<\n Omit<\n TypeaheadComboboxV2MultiSelectInputProps<TFieldValues>,\n 'selectedItems' | 'setSelectedItems' | 'getSelectedItemLabel'\n >\n >;\n menuProps?: Partial<TypeaheadComboboxV2MenuProps>;\n onInputChange?: (inputValue: string) => void;\n}\n\nexport function RHFControlledMultiSelectTypeaheadComboboxV2<TFieldValues extends FieldValues>({\n name,\n control,\n rules,\n allItems,\n itemToString,\n matcher,\n getKey,\n children,\n validationState,\n inputProps,\n menuProps,\n onInputChange,\n componentId,\n analyticsEvents,\n valueHasNoPii,\n ...props\n}: RHFControlledMultiSelectTypeaheadComboboxV2Props<TFieldValues> &\n Omit<HTMLAttributes<HTMLDivElement>, 'children'>): JSX.Element {\n const { field } = useController({\n name,\n control,\n rules,\n });\n\n // The array field value IS the selection — drive it straight from RHF, no local mirror. `getKey`\n // must be stable across renders (react-aria keys options by it) so memoize on field.value identity.\n const selectedItems = React.useMemo<TFieldValues[]>(() => field.value ?? [], [field.value]);\n const selectedItemsRef = useRef(selectedItems);\n selectedItemsRef.current = selectedItems;\n\n // The hook always calls this with a concrete array on a selection commit, but the setter type also\n // permits an updater function — resolve it against the latest selection so both shapes are correct.\n const setSelectedItems = useCallback<React.Dispatch<React.SetStateAction<TFieldValues[]>>>(\n (next) => {\n const resolved = typeof next === 'function' ? next(selectedItemsRef.current) : next;\n field.onChange(resolved);\n },\n [field],\n );\n\n const comboboxState = useComboboxStateV2<TFieldValues>({\n allItems,\n itemToString,\n getKey,\n matcher,\n multiSelect: true,\n // Multi-select drives the form through selectedItems/setSelectedItems (above), not the single-select\n // form bridge: formValue/formOnChange/formOnBlur are single-value props, and passing the array field\n // value as formValue would feed itemToString an array (breaking the input filter).\n selectedItems,\n setSelectedItems,\n componentId,\n analyticsEvents,\n valueHasNoPii,\n onStateChange: onInputChange\n ? (change) => {\n if (change.type === 'input') {\n onInputChange(change.inputValue);\n }\n }\n : undefined,\n });\n\n return (\n <TypeaheadComboboxV2Root {...props} comboboxState={comboboxState}>\n <TypeaheadComboboxV2MultiSelectInput\n {...inputProps}\n selectedItems={selectedItems}\n setSelectedItems={setSelectedItems}\n getSelectedItemLabel={itemToString}\n validationState={validationState}\n ref={field.ref}\n />\n <TypeaheadComboboxV2Menu {...menuProps}>\n {children({\n comboboxState,\n selectedItems,\n })}\n </TypeaheadComboboxV2Menu>\n </TypeaheadComboboxV2Root>\n );\n}\n"],"names":["RHFControlledTypeaheadComboboxV2","name","control","rules","allItems","itemToString","matcher","getKey","allowNewValue","children","validationState","inputProps","menuProps","onInputChange","componentId","analyticsEvents","valueHasNoPii","preventUnsetOnBlur","props","field","useController","comboboxState","useComboboxStateV2","formValue","value","formOnChange","onChange","formOnBlur","onBlur","onStateChange","change","type","inputValue","undefined","_jsxs","TypeaheadComboboxV2Root","_jsx","TypeaheadComboboxV2Input","ref","TypeaheadComboboxV2Menu","RHFControlledMultiSelectTypeaheadComboboxV2","selectedItems","React","useMemo","selectedItemsRef","useRef","current","setSelectedItems","useCallback","next","resolved","multiSelect","TypeaheadComboboxV2MultiSelectInput","getSelectedItemLabel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DO,SAASA,gCAAAA,CAGd,EACAC,IAAI,EACJC,OAAO,EACPC,KAAK,EACLC,QAAQ,EACRC,YAAY,EACZC,OAAO,EACPC,MAAM,EACNC,aAAa,EACbC,QAAQ,EACRC,eAAe,EACfC,UAAU,EACVC,SAAS,EACTC,aAAa,EACbC,WAAW,EACXC,eAAe,EACfC,aAAa,EACbC,kBAAkB,EAClB,GAAGC,KAAAA,EAE6C,EAAA;AAChD,IAAA,MAAM,EAAEC,KAAK,EAAE,GAAGC,aAAAA,CAAmC;AACnDnB,QAAAA,IAAAA;AACAC,QAAAA,OAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;AAEA,IAAA,MAAMkB,gBAAgBC,gBAAAA,CAAmB;AACvClB,QAAAA,QAAAA;AACAC,QAAAA,YAAAA;AACAE,QAAAA,MAAAA;AACAD,QAAAA,OAAAA;AACAE,QAAAA,aAAAA;AACAe,QAAAA,SAAAA,EAAWJ,MAAMK,KAAK;AACtBC,QAAAA,YAAAA,EAAcN,MAAMO,QAAQ;AAC5BC,QAAAA,UAAAA,EAAYR,MAAMS,MAAM;AACxBd,QAAAA,WAAAA;AACAC,QAAAA,eAAAA;AACAC,QAAAA,aAAAA;AACAC,QACA;;AAEAY,QAAAA,aAAAA,EAAehB,gBACX,CAACiB,MAAAA,GAAAA;YACC,IAAIA,MAAAA,CAAOC,IAAI,KAAK,OAAA,EAAS;AAC3BlB,gBAAAA,aAAAA,CAAciB,OAAOE,UAAU,CAAA;AACjC,YAAA;QACF,CAAA,GACAC;AACN,KAAA,CAAA;AAEA,IAAA,qBACEC,IAAA,CAACC,qBAAAA,EAAAA;AAAyB,QAAA,GAAGjB,KAAK;QAAEG,aAAAA,EAAeA,aAAAA;;0BACjDe,GAAA,CAACC,sBAAAA,EAAAA;AAA0B,gBAAA,GAAG1B,UAAU;gBAAED,eAAAA,EAAiBA,eAAAA;AAAiB4B,gBAAAA,GAAAA,EAAKnB,MAAMmB;;0BACvFF,GAAA,CAACG,qBAAAA,EAAAA;AAAyB,gBAAA,GAAG3B,SAAS;0BAAGH,QAAAA,CAAS;AAAEY,oBAAAA;AAAc,iBAAA;;;;AAGxE;AAmCO,SAASmB,2CAAAA,CAA8E,EAC5FvC,IAAI,EACJC,OAAO,EACPC,KAAK,EACLC,QAAQ,EACRC,YAAY,EACZC,OAAO,EACPC,MAAM,EACNE,QAAQ,EACRC,eAAe,EACfC,UAAU,EACVC,SAAS,EACTC,aAAa,EACbC,WAAW,EACXC,eAAe,EACfC,aAAa,EACb,GAAGE,KAAAA,EAE6C,EAAA;AAChD,IAAA,MAAM,EAAEC,KAAK,EAAE,GAAGC,aAAAA,CAAc;AAC9BnB,QAAAA,IAAAA;AACAC,QAAAA,OAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;;;IAIA,MAAMsC,aAAAA,GAAgBC,eAAMC,OAAO,CAAiB,IAAMxB,KAAAA,CAAMK,KAAK,IAAI,EAAE,EAAE;AAACL,QAAAA,KAAAA,CAAMK;AAAM,KAAA,CAAA;AAC1F,IAAA,MAAMoB,mBAAmBC,MAAAA,CAAOJ,aAAAA,CAAAA;AAChCG,IAAAA,gBAAAA,CAAiBE,OAAO,GAAGL,aAAAA;;;IAI3B,MAAMM,gBAAAA,GAAmBC,YACvB,CAACC,IAAAA,GAAAA;AACC,QAAA,MAAMC,WAAW,OAAOD,IAAAA,KAAS,aAAaA,IAAAA,CAAKL,gBAAAA,CAAiBE,OAAO,CAAA,GAAIG,IAAAA;AAC/E9B,QAAAA,KAAAA,CAAMO,QAAQ,CAACwB,QAAAA,CAAAA;IACjB,CAAA,EACA;AAAC/B,QAAAA;AAAM,KAAA,CAAA;AAGT,IAAA,MAAME,gBAAgBC,gBAAAA,CAAiC;AACrDlB,QAAAA,QAAAA;AACAC,QAAAA,YAAAA;AACAE,QAAAA,MAAAA;AACAD,QAAAA,OAAAA;QACA6C,WAAAA,EAAa,IAAA;;;;AAIbV,QAAAA,aAAAA;AACAM,QAAAA,gBAAAA;AACAjC,QAAAA,WAAAA;AACAC,QAAAA,eAAAA;AACAC,QAAAA,aAAAA;AACAa,QAAAA,aAAAA,EAAehB,gBACX,CAACiB,MAAAA,GAAAA;YACC,IAAIA,MAAAA,CAAOC,IAAI,KAAK,OAAA,EAAS;AAC3BlB,gBAAAA,aAAAA,CAAciB,OAAOE,UAAU,CAAA;AACjC,YAAA;QACF,CAAA,GACAC;AACN,KAAA,CAAA;AAEA,IAAA,qBACEC,IAAA,CAACC,qBAAAA,EAAAA;AAAyB,QAAA,GAAGjB,KAAK;QAAEG,aAAAA,EAAeA,aAAAA;;0BACjDe,GAAA,CAACgB,iCAAAA,EAAAA;AACE,gBAAA,GAAGzC,UAAU;gBACd8B,aAAAA,EAAeA,aAAAA;gBACfM,gBAAAA,EAAkBA,gBAAAA;gBAClBM,oBAAAA,EAAsBhD,YAAAA;gBACtBK,eAAAA,EAAiBA,eAAAA;AACjB4B,gBAAAA,GAAAA,EAAKnB,MAAMmB;;0BAEbF,GAAA,CAACG,qBAAAA,EAAAA;AAAyB,gBAAA,GAAG3B,SAAS;0BACnCH,QAAAA,CAAS;AACRY,oBAAAA,aAAAA;AACAoB,oBAAAA;AACF,iBAAA;;;;AAIR;;;;"}
|