@servicetitan/anvil2 3.15.1 → 3.15.2

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 (184) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{AiMark-BfmK30vL.js → AiMark-N8UfGfcV.js} +2 -2
  3. package/dist/{AiMark-BfmK30vL.js.map → AiMark-N8UfGfcV.js.map} +1 -1
  4. package/dist/AiMark.js +1 -1
  5. package/dist/{Alert-lLo1N7Tj.js → Alert-DTKIlitZ.js} +2 -2
  6. package/dist/{Alert-lLo1N7Tj.js.map → Alert-DTKIlitZ.js.map} +1 -1
  7. package/dist/Alert.js +1 -1
  8. package/dist/{Breadcrumbs-RdL4Fvmu.js → Breadcrumbs-B8UGx4Mq.js} +2 -2
  9. package/dist/{Breadcrumbs-RdL4Fvmu.js.map → Breadcrumbs-B8UGx4Mq.js.map} +1 -1
  10. package/dist/Breadcrumbs.js +1 -1
  11. package/dist/{Calendar-IzXG1aJw.js → Calendar-CpmaI3b6.js} +2 -2
  12. package/dist/{Calendar-IzXG1aJw.js.map → Calendar-CpmaI3b6.js.map} +1 -1
  13. package/dist/{Calendar-DoLRAWLp.js → Calendar-Cv07q_tE.js} +2 -2
  14. package/dist/{Calendar-DoLRAWLp.js.map → Calendar-Cv07q_tE.js.map} +1 -1
  15. package/dist/Calendar.js +2 -2
  16. package/dist/{Checkbox-CVxbe-iN.js → Checkbox-cB0D9W0a.js} +3 -3
  17. package/dist/{Checkbox-CVxbe-iN.js.map → Checkbox-cB0D9W0a.js.map} +1 -1
  18. package/dist/{Checkbox-U-kuWhgc.js → Checkbox-jomKCuAj.js} +2 -2
  19. package/dist/{Checkbox-U-kuWhgc.js.map → Checkbox-jomKCuAj.js.map} +1 -1
  20. package/dist/Checkbox.js +1 -1
  21. package/dist/{Chip-2OydLs66.js → Chip-DivZ3OuB.js} +2 -2
  22. package/dist/{Chip-2OydLs66.js.map → Chip-DivZ3OuB.js.map} +1 -1
  23. package/dist/Chip.js +1 -1
  24. package/dist/Combobox.js +1 -1
  25. package/dist/{DataTable-DkEpJ_Op.js → DataTable-_XXxSbvH.js} +7 -7
  26. package/dist/{DataTable-DkEpJ_Op.js.map → DataTable-_XXxSbvH.js.map} +1 -1
  27. package/dist/{DateFieldRange-X2jdOTYY.js → DateFieldRange-31zIfcR2.js} +4 -4
  28. package/dist/{DateFieldRange-X2jdOTYY.js.map → DateFieldRange-31zIfcR2.js.map} +1 -1
  29. package/dist/DateFieldRange.js +1 -1
  30. package/dist/{DateFieldSingle-BJ16tpOz.js → DateFieldSingle-DDFe1inZ.js} +4 -4
  31. package/dist/{DateFieldSingle-BJ16tpOz.js.map → DateFieldSingle-DDFe1inZ.js.map} +1 -1
  32. package/dist/DateFieldSingle.js +1 -1
  33. package/dist/{DateFieldYearless-CMm8vtz_.js → DateFieldYearless-Cv34myLZ.js} +4 -4
  34. package/dist/{DateFieldYearless-CMm8vtz_.js.map → DateFieldYearless-Cv34myLZ.js.map} +1 -1
  35. package/dist/DateFieldYearless.js +1 -1
  36. package/dist/{DateFieldYearlessRange-BHHs-Z1Q.js → DateFieldYearlessRange-D_ftkt3w.js} +3 -3
  37. package/dist/{DateFieldYearlessRange-BHHs-Z1Q.js.map → DateFieldYearlessRange-D_ftkt3w.js.map} +1 -1
  38. package/dist/DateFieldYearlessRange.js +1 -1
  39. package/dist/{DaysOfTheWeek-BHXxs0Bo.js → DaysOfTheWeek-D4tUHUay.js} +2 -2
  40. package/dist/{DaysOfTheWeek-BHXxs0Bo.js.map → DaysOfTheWeek-D4tUHUay.js.map} +1 -1
  41. package/dist/DaysOfTheWeek.js +1 -1
  42. package/dist/{Dialog-B9llUKJz.js → Dialog-B2QAFibn.js} +4 -4
  43. package/dist/{Dialog-B9llUKJz.js.map → Dialog-B2QAFibn.js.map} +1 -1
  44. package/dist/Dialog.js +1 -1
  45. package/dist/{Drawer-Bjd2XLUX.js → Drawer-CBIOWwh3.js} +4 -4
  46. package/dist/{Drawer-Bjd2XLUX.js.map → Drawer-CBIOWwh3.js.map} +1 -1
  47. package/dist/Drawer.js +1 -1
  48. package/dist/DrillDown.js +1 -1
  49. package/dist/{EditCard-B6l2vhBS.js → EditCard-Q6WlsM4O.js} +2 -2
  50. package/dist/{EditCard-B6l2vhBS.js.map → EditCard-Q6WlsM4O.js.map} +1 -1
  51. package/dist/EditCard.js +1 -1
  52. package/dist/{FieldLabel-ThEmUiAq.js → FieldLabel-FsNIjn8T.js} +2 -2
  53. package/dist/{FieldLabel-ThEmUiAq.js.map → FieldLabel-FsNIjn8T.js.map} +1 -1
  54. package/dist/FieldLabel.js +1 -1
  55. package/dist/{FilterBar-ecqJDraA.js → FilterBar-PXv7_svO.js} +4 -4
  56. package/dist/{FilterBar-ecqJDraA.js.map → FilterBar-PXv7_svO.js.map} +1 -1
  57. package/dist/FilterBar.js +1 -1
  58. package/dist/{InputMask-BQigi5oW.js → InputMask-BgZX650-.js} +3 -3
  59. package/dist/{InputMask-BQigi5oW.js.map → InputMask-BgZX650-.js.map} +1 -1
  60. package/dist/InputMask.js +1 -1
  61. package/dist/{ListView-YJscfG4x.js → ListView-aRwUEGI3.js} +2 -2
  62. package/dist/{ListView-YJscfG4x.js.map → ListView-aRwUEGI3.js.map} +1 -1
  63. package/dist/ListView.js +1 -1
  64. package/dist/{Listbox-CD9ZptSZ.js → Listbox-BCszel4v.js} +2 -2
  65. package/dist/{Listbox-CD9ZptSZ.js.map → Listbox-BCszel4v.js.map} +1 -1
  66. package/dist/Listbox.js +1 -1
  67. package/dist/MultiSelectField.js +1 -1
  68. package/dist/{MultiSelectFieldSync-DpPO0cya.js → MultiSelectFieldSync-DY5wr7cT.js} +6 -6
  69. package/dist/{MultiSelectFieldSync-DpPO0cya.js.map → MultiSelectFieldSync-DY5wr7cT.js.map} +1 -1
  70. package/dist/MultiSelectMenu.js +1 -1
  71. package/dist/{MultiSelectMenuSync-BN_3moW_.js → MultiSelectMenuSync-D3sfHivW.js} +4 -4
  72. package/dist/{MultiSelectMenuSync-BN_3moW_.js.map → MultiSelectMenuSync-D3sfHivW.js.map} +1 -1
  73. package/dist/{NumberField-CxmJx4gs.js → NumberField-CrvEEy_h.js} +3 -3
  74. package/dist/{NumberField-CxmJx4gs.js.map → NumberField-CrvEEy_h.js.map} +1 -1
  75. package/dist/NumberField.js +1 -1
  76. package/dist/{Page-IZ4p51iJ.js → Page-CS6x6C7Y.js} +8 -8
  77. package/dist/{Page-IZ4p51iJ.js.map → Page-CS6x6C7Y.js.map} +1 -1
  78. package/dist/Page.js +1 -1
  79. package/dist/{Pagination-Su4VBAhT.js → Pagination-DianLtHs.js} +2 -2
  80. package/dist/{Pagination-Su4VBAhT.js.map → Pagination-DianLtHs.js.map} +1 -1
  81. package/dist/Pagination.js +1 -1
  82. package/dist/{Popover-CIh1CsoJ.js → Popover-BsEwcuu4.js} +2 -2
  83. package/dist/{Popover-CIh1CsoJ.js.map → Popover-BsEwcuu4.js.map} +1 -1
  84. package/dist/Popover.js +1 -1
  85. package/dist/{ProgressBar-TQ0fPmn9.js → ProgressBar-0pebwBJ0.js} +2 -2
  86. package/dist/{ProgressBar-TQ0fPmn9.js.map → ProgressBar-0pebwBJ0.js.map} +1 -1
  87. package/dist/ProgressBar.js +1 -1
  88. package/dist/{Radio-BYowelK2.js → Radio-BxXN612_.js} +3 -3
  89. package/dist/{Radio-BYowelK2.js.map → Radio-BxXN612_.js.map} +1 -1
  90. package/dist/{Radio-C1VnatcL.js → Radio-CU2--1uW.js} +2 -2
  91. package/dist/{Radio-C1VnatcL.js.map → Radio-CU2--1uW.js.map} +1 -1
  92. package/dist/Radio.js +1 -1
  93. package/dist/{RichTextEditor-BpzUo8dB.js → RichTextEditor-Dnc7vOjq.js} +18827 -20229
  94. package/dist/RichTextEditor-Dnc7vOjq.js.map +1 -0
  95. package/dist/RichTextEditor.js +1 -1
  96. package/dist/{SavedFiltersButton-D9GJbJQu.js → SavedFiltersButton-BWlE7UnI.js} +9 -9
  97. package/dist/{SavedFiltersButton-D9GJbJQu.js.map → SavedFiltersButton-BWlE7UnI.js.map} +1 -1
  98. package/dist/SavedFiltersButton.js +1 -1
  99. package/dist/{SelectCard-DrmMU_GD.js → SelectCard-D2PAyR7T.js} +3 -3
  100. package/dist/{SelectCard-DrmMU_GD.js.map → SelectCard-D2PAyR7T.js.map} +1 -1
  101. package/dist/SelectCard.js +1 -1
  102. package/dist/SelectField.js +1 -1
  103. package/dist/{SelectFieldLabel-BxsKvfqo.js → SelectFieldLabel-BXJJQ0zt.js} +2 -2
  104. package/dist/{SelectFieldLabel-BxsKvfqo.js.map → SelectFieldLabel-BXJJQ0zt.js.map} +1 -1
  105. package/dist/{SelectFieldSync-BN2ebLWT.js → SelectFieldSync-CkWoMhrv.js} +5 -5
  106. package/dist/{SelectFieldSync-BN2ebLWT.js.map → SelectFieldSync-CkWoMhrv.js.map} +1 -1
  107. package/dist/SelectMenu.js +1 -1
  108. package/dist/{SelectMenuSync-DuPf8KCc.js → SelectMenuSync-C-6mULc_.js} +4 -4
  109. package/dist/{SelectMenuSync-DuPf8KCc.js.map → SelectMenuSync-C-6mULc_.js.map} +1 -1
  110. package/dist/{SelectOptions-BK7kNjYM.js → SelectOptions-pAkVhulQ.js} +2 -2
  111. package/dist/{SelectOptions-BK7kNjYM.js.map → SelectOptions-pAkVhulQ.js.map} +1 -1
  112. package/dist/{SelectTrigger-B5h-aqhl.js → SelectTrigger-B9WUUdIu.js} +2 -2
  113. package/dist/{SelectTrigger-B5h-aqhl.js.map → SelectTrigger-B9WUUdIu.js.map} +1 -1
  114. package/dist/SelectTrigger.js +1 -1
  115. package/dist/{SelectTriggerBase-SML2Mlt-.js → SelectTriggerBase-Dq7QDlPS.js} +3 -3
  116. package/dist/{SelectTriggerBase-SML2Mlt-.js.map → SelectTriggerBase-Dq7QDlPS.js.map} +1 -1
  117. package/dist/{Switch-1iNdXTik.js → Switch-BS4bw5KF.js} +2 -2
  118. package/dist/{Switch-1iNdXTik.js.map → Switch-BS4bw5KF.js.map} +1 -1
  119. package/dist/Switch.js +1 -1
  120. package/dist/Table.js +1 -1
  121. package/dist/{Text-rihxXHSe.js → Text-B_-Ldn9K.js} +2 -2
  122. package/dist/{Text-rihxXHSe.js.map → Text-B_-Ldn9K.js.map} +1 -1
  123. package/dist/Text.js +1 -1
  124. package/dist/{TextField-Bxd-Qzoi.js → TextField-B6tVKoxq.js} +2 -2
  125. package/dist/{TextField-Bxd-Qzoi.js.map → TextField-B6tVKoxq.js.map} +1 -1
  126. package/dist/{TextField-vuS7xeo-.js → TextField-DxQ6-IhP.js} +3 -3
  127. package/dist/{TextField-vuS7xeo-.js.map → TextField-DxQ6-IhP.js.map} +1 -1
  128. package/dist/TextField.js +1 -1
  129. package/dist/{Textarea-ppapJUwh.js → Textarea-oChzBuWz.js} +3 -3
  130. package/dist/{Textarea-ppapJUwh.js.map → Textarea-oChzBuWz.js.map} +1 -1
  131. package/dist/Textarea.js +1 -1
  132. package/dist/{TimeField-Hwt_oRbg.js → TimeField-Dq7l8xNU.js} +4 -4
  133. package/dist/{TimeField-Hwt_oRbg.js.map → TimeField-Dq7l8xNU.js.map} +1 -1
  134. package/dist/TimeField.js +1 -1
  135. package/dist/Toast.js +2 -2
  136. package/dist/{Toaster-BtP_HezK.js → Toaster-CsZkAOVn.js} +2 -2
  137. package/dist/{Toaster-BtP_HezK.js.map → Toaster-CsZkAOVn.js.map} +1 -1
  138. package/dist/{Toaster-BryQmKe1.js → Toaster-oK4dSBPK.js} +3 -3
  139. package/dist/{Toaster-BryQmKe1.js.map → Toaster-oK4dSBPK.js.map} +1 -1
  140. package/dist/{Toolbar-CMulzswf.js → Toolbar-Bp-A2P4L.js} +3 -3
  141. package/dist/{Toolbar-CMulzswf.js.map → Toolbar-Bp-A2P4L.js.map} +1 -1
  142. package/dist/{Toolbar-DGHZpFi9.js → Toolbar-Do8KEjJJ.js} +3 -3
  143. package/dist/{Toolbar-DGHZpFi9.js.map → Toolbar-Do8KEjJJ.js.map} +1 -1
  144. package/dist/Toolbar.js +1 -1
  145. package/dist/TreeSelectField.js +1 -1
  146. package/dist/{TreeSelectFieldSync-C0mXwYZL.js → TreeSelectFieldSync-BXfLbDBM.js} +5 -5
  147. package/dist/{TreeSelectFieldSync-C0mXwYZL.js.map → TreeSelectFieldSync-BXfLbDBM.js.map} +1 -1
  148. package/dist/TreeSelectMenu.js +1 -1
  149. package/dist/{TreeSelectMenuSync-D2TvKxP-.js → TreeSelectMenuSync-D7fQIyHr.js} +3 -3
  150. package/dist/{TreeSelectMenuSync-D2TvKxP-.js.map → TreeSelectMenuSync-D7fQIyHr.js.map} +1 -1
  151. package/dist/{TypeaheadTextField-DgazozK7.js → TypeaheadTextField-Dkh84OCF.js} +3 -3
  152. package/dist/{TypeaheadTextField-DgazozK7.js.map → TypeaheadTextField-Dkh84OCF.js.map} +1 -1
  153. package/dist/TypeaheadTextField.js +1 -1
  154. package/dist/{YearlessDateInputWithPicker-Bc8a33D5.js → YearlessDateInputWithPicker-7y8xhacx.js} +2 -2
  155. package/dist/{YearlessDateInputWithPicker-Bc8a33D5.js.map → YearlessDateInputWithPicker-7y8xhacx.js.map} +1 -1
  156. package/dist/assets/icons/material.ts +184 -184
  157. package/dist/assets/icons/st.ts +9 -9
  158. package/dist/beta.js +16 -16
  159. package/dist/{bulkActionTypes-D5y3Acn1.js → bulkActionTypes-BVJZ01mE.js} +2 -2
  160. package/dist/{bulkActionTypes-D5y3Acn1.js.map → bulkActionTypes-BVJZ01mE.js.map} +1 -1
  161. package/dist/{filter-state-Do862BNr.js → filter-state-CPCn-owS.js} +18 -18
  162. package/dist/{filter-state-Do862BNr.js.map → filter-state-CPCn-owS.js.map} +1 -1
  163. package/dist/{index-Dt0zG4YB.js → index-D1WfdON1.js} +1549 -1582
  164. package/dist/index-D1WfdON1.js.map +1 -0
  165. package/dist/index.js +41 -41
  166. package/dist/{stripInlineMarkdown-BhYLEiXu.js → stripInlineMarkdown-CcwDEdw0.js} +2 -2
  167. package/dist/{stripInlineMarkdown-BhYLEiXu.js.map → stripInlineMarkdown-CcwDEdw0.js.map} +1 -1
  168. package/dist/{syncFilterUtils-ClEj4Oeg.js → syncFilterUtils-ubEYuRGQ.js} +3 -3
  169. package/dist/{syncFilterUtils-ClEj4Oeg.js.map → syncFilterUtils-ubEYuRGQ.js.map} +1 -1
  170. package/dist/{treeSync-B38r1dRQ.js → treeSync-CkjyJSVq.js} +3 -3
  171. package/dist/{treeSync-B38r1dRQ.js.map → treeSync-CkjyJSVq.js.map} +1 -1
  172. package/dist/{useDrilldown-BOeeNUsy.js → useDrilldown-DOXav1An.js} +3 -3
  173. package/dist/{useDrilldown-BOeeNUsy.js.map → useDrilldown-DOXav1An.js.map} +1 -1
  174. package/dist/{useInfiniteCombobox-7oIT2Mzn.js → useInfiniteCombobox-15_SoeWw.js} +4 -4
  175. package/dist/{useInfiniteCombobox-7oIT2Mzn.js.map → useInfiniteCombobox-15_SoeWw.js.map} +1 -1
  176. package/dist/{useInitialFocus-CGybEc6x.js → useInitialFocus-0TZ78bPz.js} +2 -2
  177. package/dist/{useInitialFocus-CGybEc6x.js.map → useInitialFocus-0TZ78bPz.js.map} +1 -1
  178. package/dist/{useInvalidateOnOptionsChange-BD2VBpbK.js → useInvalidateOnOptionsChange-DiRbyJFp.js} +4 -4
  179. package/dist/{useInvalidateOnOptionsChange-BD2VBpbK.js.map → useInvalidateOnOptionsChange-DiRbyJFp.js.map} +1 -1
  180. package/dist/{usePopoverTransitionStates-CDXCdyKa.js → usePopoverTransitionStates-B1opfxxn.js} +1 -2
  181. package/dist/{usePopoverTransitionStates-CDXCdyKa.js.map → usePopoverTransitionStates-B1opfxxn.js.map} +1 -1
  182. package/package.json +17 -17
  183. package/dist/RichTextEditor-BpzUo8dB.js.map +0 -1
  184. package/dist/index-Dt0zG4YB.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TreeSelectFieldSync-C0mXwYZL.js","sources":["../src/beta/components/TreeSelectField/internal/TreeSelectFieldInput.tsx","../src/beta/components/TreeSelectField/TreeSelectField.tsx","../src/beta/components/TreeSelectField/TreeSelectFieldSync.tsx"],"sourcesContent":["import styles from \"./TreeSelectFieldInput.module.scss\";\nimport cx from \"classnames\";\nimport { Button } from \"../../../../components/Button\";\nimport { Chip } from \"../../../../components/Chip\";\nimport { Flex } from \"../../../../components/Flex\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport type { ReactElement, RefObject, KeyboardEvent, MouseEvent } from \"react\";\nimport { ANV_PART_ATTR } from \"../../../../internal/constants/anvParts\";\nimport type { TreeSelectFieldValue } from \"../types\";\nimport { PARTS } from \"../parts\";\nimport type { MultiSelectFieldChipProps } from \"../../../../components/MultiSelectField/types\";\nimport { useChipLayout } from \"../../../../components/MultiSelectField/internal/useChipLayout\";\n\nexport type TreeSelectFieldInputProps = {\n id?: string;\n placeholder?: string;\n size?: \"small\" | \"medium\" | \"large\";\n disabled?: boolean;\n readOnly?: boolean;\n error?: boolean;\n single?: boolean;\n singleRow?: boolean;\n maxChips?: number;\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n selectedOptions: TreeSelectFieldValue[];\n onRemoveOption: (option: TreeSelectFieldValue) => void;\n getChipProps?: (value: TreeSelectFieldValue) => MultiSelectFieldChipProps;\n inputRef?: RefObject<HTMLInputElement>;\n inputWrapperRef?: RefObject<HTMLDivElement>;\n searchValue?: string;\n onSearchChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onInputKeyDown?: (e: React.KeyboardEvent) => void;\n onWrapperClick?: () => void;\n isOpen?: boolean;\n ariaControls?: string;\n disableSearch?: boolean;\n comboboxProps?: Record<string, unknown>;\n};\n\n/**\n * Renders the field trigger and toggle button. Multi-select search uses an\n * editable combobox; single-select or disabled search uses a read-only one.\n */\nexport const TreeSelectFieldInput = ({\n id,\n placeholder,\n size,\n disabled,\n readOnly,\n error,\n single,\n singleRow,\n maxChips,\n prefix,\n suffix,\n selectedOptions,\n onRemoveOption,\n getChipProps,\n inputRef,\n inputWrapperRef,\n searchValue,\n onSearchChange,\n onInputKeyDown,\n onWrapperClick,\n isOpen,\n ariaControls,\n disableSearch,\n comboboxProps,\n}: TreeSelectFieldInputProps) => {\n const { rowsRef, displayCount, hiddenCount } = useChipLayout({\n selectedOptionsLength: selectedOptions.length,\n singleRow,\n maxChips,\n });\n\n const inputWrapperClassNames = cx(styles[\"input-wrapper\"], {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"disabled\"]]: disabled || readOnly,\n });\n\n const handleWrapperClick = (e: MouseEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (target.closest(\"button\") || target.tagName === \"INPUT\") {\n return;\n }\n onWrapperClick?.();\n inputRef?.current?.focus();\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events -- Click-to-focus wrapper; nested controls own keyboard interaction.\n <div\n ref={inputWrapperRef}\n className={inputWrapperClassNames}\n onClick={handleWrapperClick}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n\n <div\n className={styles[\"rows-wrapper\"]}\n ref={rowsRef}\n data-single-row={singleRow || undefined}\n >\n {!single && selectedOptions.length > 0\n ? selectedOptions.slice(0, displayCount).map((option, index) => (\n <div\n key={`selected-item-${option.id}-${index}`}\n className={styles[\"chip-wrapper\"]}\n >\n <Chip\n {...getChipProps?.(option)}\n {...{ [ANV_PART_ATTR]: PARTS.chip }}\n label={option.label}\n onClose={\n disabled || readOnly || option.disabled\n ? undefined\n : () => onRemoveOption(option)\n }\n className={styles[\"chip\"]}\n title={option.label}\n />\n </div>\n ))\n : null}\n\n {hiddenCount > 0 ? (\n <div className={styles[\"chip-wrapper\"]}>\n <Chip\n label={`+${hiddenCount}`}\n className={styles[\"chip\"]}\n title={selectedOptions\n .slice(displayCount)\n .map((option) => option.label)\n .join(\", \")}\n {...{ [ANV_PART_ATTR]: PARTS.overflowChip }}\n />\n </div>\n ) : null}\n\n {!disableSearch && !single ? (\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n className={cx(styles[\"input\"], { [styles[\"error\"]]: error })}\n role=\"combobox\"\n aria-controls={ariaControls}\n aria-expanded={isOpen}\n aria-haspopup=\"tree\"\n value={searchValue}\n onChange={onSearchChange}\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) =>\n onInputKeyDown?.(e)\n }\n disabled={disabled}\n readOnly={readOnly}\n placeholder={\n selectedOptions.length === 0 ? placeholder : undefined\n }\n {...comboboxProps}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n </Flex>\n ) : null}\n\n {single || disableSearch ? (\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n className={cx(styles[\"input\"], { [styles[\"error\"]]: error })}\n role=\"combobox\"\n aria-controls={ariaControls}\n aria-expanded={isOpen}\n aria-haspopup=\"tree\"\n readOnly\n value={\n single && selectedOptions.length > 0\n ? selectedOptions[0].label\n : \"\"\n }\n disabled={disabled}\n placeholder={\n selectedOptions.length === 0 ? placeholder : undefined\n }\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) =>\n onInputKeyDown?.(e)\n }\n {...comboboxProps}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n </Flex>\n ) : null}\n </div>\n\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n\n <div className={styles[\"buttons-wrapper\"]}>\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n icon={Chevron_Right}\n aria-label=\"toggle menu\"\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n aria-expanded={isOpen}\n className={styles[\"toggle-button\"]}\n tabIndex={-1}\n {...{ [ANV_PART_ATTR]: PARTS.toggleButton }}\n onClick={() => {\n onWrapperClick?.();\n inputRef?.current?.focus();\n }}\n />\n </div>\n </div>\n </div>\n );\n};\n\nTreeSelectFieldInput.displayName = \"TreeSelectFieldInput\";\n","import {\n forwardRef,\n useId,\n useRef,\n useState,\n useEffect,\n useImperativeHandle,\n useCallback,\n} from \"react\";\nimport cx from \"classnames\";\nimport type {\n TreeSelectFieldHandle,\n TreeSelectFieldNode,\n TreeSelectFieldProps,\n TreeSelectFieldValue,\n} from \"./types\";\nimport type { DataAttributes } from \"../../../types\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks/useLayoutPropsUtil\";\nimport { warnDeprecatedErrorUsage } from \"../../../components/FieldMessage\";\nimport { FieldMessage } from \"../../../components/FieldMessage\";\nimport { FieldLabel } from \"../../../components/FieldLabel\";\nimport { SrOnly } from \"../../../components/SrOnly\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { useAdaptiveView } from \"../../hooks/useAdaptiveView\";\nimport { TreeSelectFieldInput } from \"./internal/TreeSelectFieldInput\";\nimport { useTreeLoader } from \"./internal/useTreeLoader\";\nimport { useTree } from \"./internal/useTree\";\nimport { TreeContent } from \"./internal/TreeContent\";\nimport { findNode } from \"./internal/treeUtils\";\nimport { useTreeLazyCascade } from \"./internal/useTreeLazyCascade\";\nimport triggerStyles from \"../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\n\n/**\n * Hierarchical select rendered in a popover or dialog.\n * Multi-select supports search; every mode uses a controlled value array.\n */\nexport const TreeSelectField = forwardRef<\n TreeSelectFieldHandle,\n TreeSelectFieldProps\n>((propsWithLayout, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(propsWithLayout);\n\n const dataAttributes = Object.fromEntries(\n Object.entries(componentProps).filter(([key]) => key.startsWith(\"data-\")),\n ) as DataAttributes;\n\n const {\n id: idProp,\n label,\n labelNode,\n hideLabel,\n placeholder,\n size,\n error,\n hint,\n moreInfo,\n labelAiMark,\n description,\n warning,\n required,\n disabled,\n readOnly,\n prefix,\n suffix,\n className,\n style,\n disableSearch,\n debounceMs = 200,\n searchValue: searchValueProp,\n onSearchChange,\n singleRow,\n maxChips,\n getChipProps,\n virtualize,\n value,\n onSelectedOptionsChange,\n selectionMode = \"linked\",\n valueConsistsOf = \"LEAF_PRIORITY\",\n defaultExpandLevel,\n expandedIds,\n onExpandedIdsChange,\n loadOptions,\n cache,\n initialLoad,\n displayMenuAs: displayMenuAsProp = \"auto\",\n } = componentProps;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n const helperUid = useId();\n const moreInfoUid = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n const inputWrapperRef = useRef<HTMLDivElement>(null);\n const treePanelRef = useRef<HTMLDivElement>(null);\n\n warnDeprecatedErrorUsage(\"TreeSelectField\", error);\n\n const errorMessages =\n typeof error === \"boolean\" || error === undefined ? undefined : error;\n const hasHelperText = !!(hint || errorMessages || warning || description);\n const isSingleSelect = selectionMode === \"single\";\n // Single mode uses LEAF_ONLY/BRANCH_ONLY as click filters. Multi-select\n // always permits nonempty branches; BRANCH_ONLY blocks leaves and LEAF_ONLY\n // blocks empty branches.\n const branchesSelectable = isSingleSelect\n ? valueConsistsOf !== \"LEAF_ONLY\"\n : true;\n const leavesSelectable = valueConsistsOf !== \"BRANCH_ONLY\";\n const emptyBranchesSelectable = valueConsistsOf !== \"LEAF_ONLY\";\n\n const { isMobile } = useAdaptiveView();\n const displayAs =\n displayMenuAsProp === \"auto\"\n ? isMobile\n ? \"dialog\"\n : \"popover\"\n : displayMenuAsProp;\n\n const isSearchControlled = searchValueProp !== undefined;\n const [internalSearchValue, setInternalSearchValue] = useState(\"\");\n const searchValue = isSearchControlled\n ? searchValueProp\n : internalSearchValue;\n\n const handleSearchChange = useCallback(\n (v: string) => {\n if (!isSearchControlled) {\n setInternalSearchValue(v);\n }\n onSearchChange?.(v);\n },\n [isSearchControlled, onSearchChange],\n );\n\n const loader = useTreeLoader({\n loadOptions,\n cache,\n initialLoad,\n debounceMs,\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n const openMenu = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n loader.onOpen();\n }, [disabled, loader]);\n\n // The loader owns initial loading; this effect only handles later searches.\n const isFirstSearchEffect = useRef(true);\n useEffect(() => {\n if (isFirstSearchEffect.current) {\n isFirstSearchEffect.current = false;\n return;\n }\n loader.search(searchValue ?? \"\");\n // eslint-disable-next-line react-hooks/exhaustive-deps -- We only want to re-run when searchValue changes, not on loader reference changes\n }, [searchValue]);\n\n const tree = useTree({\n nodes: loader.nodes,\n value,\n onSelectedOptionsChange,\n selectionMode,\n valueConsistsOf,\n defaultExpandLevel,\n expandedIds,\n onExpandedIdsChange,\n searchValue,\n ancestry: loader.ancestry,\n loadingChildrenIds: loader.isLoadingChildren,\n });\n\n useImperativeHandle(\n ref,\n () => ({\n clearCache: loader.clearCache,\n invalidate: loader.invalidate,\n expandAll: tree.expandAll,\n collapseAll: tree.collapseAll,\n }),\n [loader.clearCache, loader.invalidate, tree.expandAll, tree.collapseAll],\n );\n\n // The lazy-cascade callback needs closeMenu before it is defined.\n const closeMenuRef = useRef<() => void>(() => undefined);\n\n const onCloseAfterSingleSelect = useCallback(() => {\n closeMenuRef.current();\n inputRef.current?.focus();\n }, []);\n\n const {\n handleToggleNode,\n pendingToggleNodeId,\n reset: resetLazyCascade,\n } = useTreeLazyCascade({\n tree,\n loader,\n isSingleSelect,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n readOnly,\n onCloseAfterSingleSelect,\n });\n\n const closeMenu = useCallback(() => {\n setIsOpen(false);\n handleSearchChange(\"\");\n resetLazyCascade();\n }, [handleSearchChange, resetLazyCascade]);\n\n useEffect(() => {\n closeMenuRef.current = closeMenu;\n }, [closeMenu]);\n\n useEffect(() => {\n if (disabled && isOpen) {\n closeMenu();\n }\n }, [disabled, isOpen, closeMenu]);\n\n const handleRemoveOption = useCallback(\n (option: TreeSelectFieldValue) => {\n const target = value.find((v) => v.id === option.id);\n // Disabled selected options are locked — chip close / keyboard removal\n // must not drop them from the value.\n if (target?.disabled) {\n return;\n }\n onSelectedOptionsChange(value.filter((v) => v.id !== option.id));\n },\n [value, onSelectedOptionsChange],\n );\n\n // Match string ids first so values such as \"003\" are not coerced to 3.\n const getActiveNode = useCallback((): TreeSelectFieldNode | undefined => {\n const descId = tree.activeDescendantId;\n if (!descId) return undefined;\n const nodeId = descId.replace(/^treeitem-/, \"\");\n const stringMatch = findNode(tree.nodes, nodeId);\n if (stringMatch) return stringMatch;\n const numId = Number(nodeId);\n return Number.isNaN(numId) ? undefined : findNode(tree.nodes, numId);\n }, [tree.activeDescendantId, tree.nodes]);\n\n const handleInputKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n if (isOpen) {\n e.stopPropagation();\n closeMenu();\n }\n return;\n }\n\n if (e.key === \"Tab\") {\n if (isOpen) closeMenu();\n return;\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n if (!isOpen) {\n openMenu();\n }\n tree.onKeyDown(e);\n return;\n }\n\n if (\n e.key === \"Backspace\" &&\n !isSingleSelect &&\n !readOnly &&\n searchValue === \"\" &&\n value.length > 0\n ) {\n // Disabled selected options are locked and are skipped.\n const lastRemovable = [...value]\n .reverse()\n .find((option) => !option.disabled);\n if (lastRemovable) {\n handleRemoveOption(lastRemovable);\n }\n return;\n }\n\n if (isOpen) {\n // Route selection through lazy loading; preserve Space for search text.\n if (e.key === \"Enter\" || (e.key === \" \" && disableSearch)) {\n const activeNode = getActiveNode();\n if (activeNode) {\n e.preventDefault();\n handleToggleNode(activeNode.id);\n }\n return;\n }\n\n // useTree expands branches but does not load their lazy children.\n if (e.key === \"ArrowRight\") {\n const activeNode = getActiveNode();\n if (activeNode?.children === null) {\n e.preventDefault();\n tree.toggleExpand(activeNode.id);\n void loader.loadChildren(activeNode);\n return;\n }\n }\n\n tree.onKeyDown(e);\n }\n },\n [\n isOpen,\n openMenu,\n closeMenu,\n isSingleSelect,\n readOnly,\n searchValue,\n value,\n handleRemoveOption,\n tree,\n getActiveNode,\n handleToggleNode,\n loader,\n disableSearch,\n ],\n );\n\n const handleLoadChildren = useCallback(\n (node: Parameters<typeof loader.loadChildren>[0]) => {\n void loader.loadChildren(node);\n },\n [loader],\n );\n\n // A scrollbar drag can move focus to the panel; keep keyboard navigation\n // there without adding a second Tab stop when search owns focus.\n const panelProps = {\n visibleNodes: tree.visibleNodes,\n getCheckState: (id: string | number) =>\n id === pendingToggleNodeId ? \"loading\" : tree.getCheckState(id),\n toggleNode: handleToggleNode,\n toggleExpand: tree.toggleExpand,\n getTreeItemProps: tree.getTreeItemProps,\n treeProps: {\n ...tree.treeProps,\n id: `${id}-tree`,\n \"aria-label\": label,\n onKeyDown:\n handleInputKeyDown as React.KeyboardEventHandler<HTMLDivElement>,\n tabIndex: disableSearch ? 0 : -1,\n },\n activeDescendantId: tree.activeDescendantId,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n readOnly,\n onHover: tree.setActiveNodeId,\n onLoadChildren: handleLoadChildren,\n };\n\n const labelContent = (\n <FieldLabel\n el=\"label\"\n htmlFor={`${id}-input`}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfo ? moreInfoUid : undefined}\n aiMark={labelAiMark}\n >\n {labelNode ?? label}\n </FieldLabel>\n );\n\n return (\n <div\n {...dataAttributes}\n data-anv=\"tree-select-field\"\n className={cx(triggerStyles[\"search-field\"], className)}\n style={{ ...layoutStyles, ...style }}\n >\n {hideLabel ? <SrOnly>{labelContent}</SrOnly> : labelContent}\n\n <TreeSelectFieldInput\n id={`${id}-input`}\n placeholder={placeholder}\n size={size}\n disabled={disabled}\n readOnly={readOnly}\n error={!!error}\n single={isSingleSelect}\n singleRow={singleRow}\n maxChips={maxChips}\n getChipProps={getChipProps}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={value}\n onRemoveOption={handleRemoveOption}\n inputRef={inputRef}\n inputWrapperRef={inputWrapperRef}\n searchValue={searchValue}\n onSearchChange={(e) => {\n handleSearchChange(e.target.value);\n if (!isOpen) openMenu();\n }}\n onInputKeyDown={handleInputKeyDown}\n onWrapperClick={() => {\n if (!disabled) {\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n inputRef.current?.focus();\n }\n }}\n isOpen={isOpen}\n ariaControls={`${id}-tree`}\n disableSearch={disableSearch}\n comboboxProps={{\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoUid]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? (true as const) : undefined,\n \"aria-activedescendant\": isOpen ? tree.activeDescendantId : undefined,\n onClick: disabled\n ? undefined\n : () => {\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n },\n }}\n />\n\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n\n {displayAs === \"dialog\" ? (\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen && !disabled}\n onClose={closeMenu}\n title={label}\n initialFocusResolver={(elements) =>\n elements.find((el) => el.tagName === \"INPUT\") || elements[0]\n }\n field={\n <TreeSelectFieldInput\n id={`${id}-dialog-input`}\n placeholder={placeholder}\n size=\"medium\"\n disabled={disabled}\n readOnly={readOnly}\n error={!!error}\n single={isSingleSelect}\n singleRow\n maxChips={20}\n getChipProps={getChipProps}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={value}\n onRemoveOption={handleRemoveOption}\n searchValue={searchValue}\n onSearchChange={(e) => {\n handleSearchChange(e.target.value);\n if (!isOpen) openMenu();\n }}\n onInputKeyDown={handleInputKeyDown}\n isOpen={isOpen}\n ariaControls={`${id}-tree`}\n disableSearch={false}\n comboboxProps={{\n \"aria-activedescendant\": isOpen\n ? tree.activeDescendantId\n : undefined,\n }}\n />\n }\n >\n {isOpen && !disabled ? (\n <TreeContent\n ref={treePanelRef}\n loading={loader.isLoading}\n hasNoVisibleNodes={tree.visibleNodes.length === 0}\n virtualize={virtualize}\n panelProps={panelProps}\n />\n ) : null}\n </OptionsDialog>\n ) : (\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={inputWrapperRef}\n open={isOpen && !disabled}\n onClose={closeMenu}\n width=\"reference\"\n >\n {isOpen && !disabled ? (\n <TreeContent\n ref={treePanelRef}\n loading={loader.isLoading}\n hasNoVisibleNodes={tree.visibleNodes.length === 0}\n virtualize={virtualize}\n panelProps={panelProps}\n />\n ) : null}\n </OptionsPopover>\n )}\n </div>\n );\n});\n\nTreeSelectField.displayName = \"TreeSelectField\";\n","import { useCallback, useMemo, useRef } from \"react\";\nimport type { MatchSorterOptions } from \"match-sorter\";\nimport { TreeSelectField } from \"./TreeSelectField\";\nimport type {\n TreeSelectFieldHandle,\n TreeSelectFieldNode,\n TreeSelectFieldProps,\n} from \"./types\";\nimport {\n type TreeSyncFilterFn,\n applyChildCounts,\n defaultTreeSyncFilter,\n toTreeSyncFilterFn,\n} from \"./internal/treeSync\";\nimport { useInvalidateOnOptionsChange } from \"../../../internal/hooks/useInvalidateOnOptionsChange\";\n\nexport type { TreeSyncFilterFn };\n\nexport type TreeSelectFieldSyncProps = Omit<\n TreeSelectFieldProps,\n \"loadOptions\" | \"debounceMs\" | \"cache\" | \"initialLoad\"\n> & {\n /** Complete tree used for selection and client-side search. */\n options: TreeSelectFieldNode[];\n /**\n * Custom function or match-sorter options. The default matches `label` and\n * `searchText`. Default and option-object filters preserve ancestors of\n * matches. A function replaces that stage; the field still applies its\n * loaded-row substring filter.\n *\n * @example\n * filter={(nodes, searchValue) => customTreeFilter(nodes, searchValue)}\n * // or\n * filter={{ keys: [\"label\"] }}\n */\n filter?: TreeSyncFilterFn | MatchSorterOptions<TreeSelectFieldNode>;\n};\n\n/**\n * Static-data variant of {@link TreeSelectField}.\n * Filters `options` on the client and refreshes the field when they change.\n */\nexport const TreeSelectFieldSync = (props: TreeSelectFieldSyncProps) => {\n const {\n options,\n filter: filterProp = defaultTreeSyncFilter,\n ...rest\n } = props;\n\n const filter = useMemo(() => toTreeSyncFilterFn(filterProp), [filterProp]);\n\n const processedOptions = useMemo(() => applyChildCounts(options), [options]);\n\n const loadOptions = useCallback(\n (searchValue: string) => {\n return filter(processedOptions, searchValue);\n },\n [filter, processedOptions],\n );\n\n const fieldRef = useRef<TreeSelectFieldHandle>(null);\n useInvalidateOnOptionsChange(fieldRef, options);\n\n return (\n <TreeSelectField\n ref={fieldRef}\n loadOptions={loadOptions}\n debounceMs={0}\n {...rest}\n />\n );\n};\n\nTreeSelectFieldSync.displayName = \"TreeSelectFieldSync\";\n"],"names":["Chevron_Right","id","triggerStyles"],"mappings":"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"}
1
+ {"version":3,"file":"TreeSelectFieldSync-BXfLbDBM.js","sources":["../src/beta/components/TreeSelectField/internal/TreeSelectFieldInput.tsx","../src/beta/components/TreeSelectField/TreeSelectField.tsx","../src/beta/components/TreeSelectField/TreeSelectFieldSync.tsx"],"sourcesContent":["import styles from \"./TreeSelectFieldInput.module.scss\";\nimport cx from \"classnames\";\nimport { Button } from \"../../../../components/Button\";\nimport { Chip } from \"../../../../components/Chip\";\nimport { Flex } from \"../../../../components/Flex\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport type { ReactElement, RefObject, KeyboardEvent, MouseEvent } from \"react\";\nimport { ANV_PART_ATTR } from \"../../../../internal/constants/anvParts\";\nimport type { TreeSelectFieldValue } from \"../types\";\nimport { PARTS } from \"../parts\";\nimport type { MultiSelectFieldChipProps } from \"../../../../components/MultiSelectField/types\";\nimport { useChipLayout } from \"../../../../components/MultiSelectField/internal/useChipLayout\";\n\nexport type TreeSelectFieldInputProps = {\n id?: string;\n placeholder?: string;\n size?: \"small\" | \"medium\" | \"large\";\n disabled?: boolean;\n readOnly?: boolean;\n error?: boolean;\n single?: boolean;\n singleRow?: boolean;\n maxChips?: number;\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n selectedOptions: TreeSelectFieldValue[];\n onRemoveOption: (option: TreeSelectFieldValue) => void;\n getChipProps?: (value: TreeSelectFieldValue) => MultiSelectFieldChipProps;\n inputRef?: RefObject<HTMLInputElement>;\n inputWrapperRef?: RefObject<HTMLDivElement>;\n searchValue?: string;\n onSearchChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onInputKeyDown?: (e: React.KeyboardEvent) => void;\n onWrapperClick?: () => void;\n isOpen?: boolean;\n ariaControls?: string;\n disableSearch?: boolean;\n comboboxProps?: Record<string, unknown>;\n};\n\n/**\n * Renders the field trigger and toggle button. Multi-select search uses an\n * editable combobox; single-select or disabled search uses a read-only one.\n */\nexport const TreeSelectFieldInput = ({\n id,\n placeholder,\n size,\n disabled,\n readOnly,\n error,\n single,\n singleRow,\n maxChips,\n prefix,\n suffix,\n selectedOptions,\n onRemoveOption,\n getChipProps,\n inputRef,\n inputWrapperRef,\n searchValue,\n onSearchChange,\n onInputKeyDown,\n onWrapperClick,\n isOpen,\n ariaControls,\n disableSearch,\n comboboxProps,\n}: TreeSelectFieldInputProps) => {\n const { rowsRef, displayCount, hiddenCount } = useChipLayout({\n selectedOptionsLength: selectedOptions.length,\n singleRow,\n maxChips,\n });\n\n const inputWrapperClassNames = cx(styles[\"input-wrapper\"], {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"disabled\"]]: disabled || readOnly,\n });\n\n const handleWrapperClick = (e: MouseEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (target.closest(\"button\") || target.tagName === \"INPUT\") {\n return;\n }\n onWrapperClick?.();\n inputRef?.current?.focus();\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events -- Click-to-focus wrapper; nested controls own keyboard interaction.\n <div\n ref={inputWrapperRef}\n className={inputWrapperClassNames}\n onClick={handleWrapperClick}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n\n <div\n className={styles[\"rows-wrapper\"]}\n ref={rowsRef}\n data-single-row={singleRow || undefined}\n >\n {!single && selectedOptions.length > 0\n ? selectedOptions.slice(0, displayCount).map((option, index) => (\n <div\n key={`selected-item-${option.id}-${index}`}\n className={styles[\"chip-wrapper\"]}\n >\n <Chip\n {...getChipProps?.(option)}\n {...{ [ANV_PART_ATTR]: PARTS.chip }}\n label={option.label}\n onClose={\n disabled || readOnly || option.disabled\n ? undefined\n : () => onRemoveOption(option)\n }\n className={styles[\"chip\"]}\n title={option.label}\n />\n </div>\n ))\n : null}\n\n {hiddenCount > 0 ? (\n <div className={styles[\"chip-wrapper\"]}>\n <Chip\n label={`+${hiddenCount}`}\n className={styles[\"chip\"]}\n title={selectedOptions\n .slice(displayCount)\n .map((option) => option.label)\n .join(\", \")}\n {...{ [ANV_PART_ATTR]: PARTS.overflowChip }}\n />\n </div>\n ) : null}\n\n {!disableSearch && !single ? (\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n className={cx(styles[\"input\"], { [styles[\"error\"]]: error })}\n role=\"combobox\"\n aria-controls={ariaControls}\n aria-expanded={isOpen}\n aria-haspopup=\"tree\"\n value={searchValue}\n onChange={onSearchChange}\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) =>\n onInputKeyDown?.(e)\n }\n disabled={disabled}\n readOnly={readOnly}\n placeholder={\n selectedOptions.length === 0 ? placeholder : undefined\n }\n {...comboboxProps}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n </Flex>\n ) : null}\n\n {single || disableSearch ? (\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n className={cx(styles[\"input\"], { [styles[\"error\"]]: error })}\n role=\"combobox\"\n aria-controls={ariaControls}\n aria-expanded={isOpen}\n aria-haspopup=\"tree\"\n readOnly\n value={\n single && selectedOptions.length > 0\n ? selectedOptions[0].label\n : \"\"\n }\n disabled={disabled}\n placeholder={\n selectedOptions.length === 0 ? placeholder : undefined\n }\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) =>\n onInputKeyDown?.(e)\n }\n {...comboboxProps}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n </Flex>\n ) : null}\n </div>\n\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n\n <div className={styles[\"buttons-wrapper\"]}>\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n icon={Chevron_Right}\n aria-label=\"toggle menu\"\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n aria-expanded={isOpen}\n className={styles[\"toggle-button\"]}\n tabIndex={-1}\n {...{ [ANV_PART_ATTR]: PARTS.toggleButton }}\n onClick={() => {\n onWrapperClick?.();\n inputRef?.current?.focus();\n }}\n />\n </div>\n </div>\n </div>\n );\n};\n\nTreeSelectFieldInput.displayName = \"TreeSelectFieldInput\";\n","import {\n forwardRef,\n useId,\n useRef,\n useState,\n useEffect,\n useImperativeHandle,\n useCallback,\n} from \"react\";\nimport cx from \"classnames\";\nimport type {\n TreeSelectFieldHandle,\n TreeSelectFieldNode,\n TreeSelectFieldProps,\n TreeSelectFieldValue,\n} from \"./types\";\nimport type { DataAttributes } from \"../../../types\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks/useLayoutPropsUtil\";\nimport { warnDeprecatedErrorUsage } from \"../../../components/FieldMessage\";\nimport { FieldMessage } from \"../../../components/FieldMessage\";\nimport { FieldLabel } from \"../../../components/FieldLabel\";\nimport { SrOnly } from \"../../../components/SrOnly\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { useAdaptiveView } from \"../../hooks/useAdaptiveView\";\nimport { TreeSelectFieldInput } from \"./internal/TreeSelectFieldInput\";\nimport { useTreeLoader } from \"./internal/useTreeLoader\";\nimport { useTree } from \"./internal/useTree\";\nimport { TreeContent } from \"./internal/TreeContent\";\nimport { findNode } from \"./internal/treeUtils\";\nimport { useTreeLazyCascade } from \"./internal/useTreeLazyCascade\";\nimport triggerStyles from \"../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\n\n/**\n * Hierarchical select rendered in a popover or dialog.\n * Multi-select supports search; every mode uses a controlled value array.\n */\nexport const TreeSelectField = forwardRef<\n TreeSelectFieldHandle,\n TreeSelectFieldProps\n>((propsWithLayout, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(propsWithLayout);\n\n const dataAttributes = Object.fromEntries(\n Object.entries(componentProps).filter(([key]) => key.startsWith(\"data-\")),\n ) as DataAttributes;\n\n const {\n id: idProp,\n label,\n labelNode,\n hideLabel,\n placeholder,\n size,\n error,\n hint,\n moreInfo,\n labelAiMark,\n description,\n warning,\n required,\n disabled,\n readOnly,\n prefix,\n suffix,\n className,\n style,\n disableSearch,\n debounceMs = 200,\n searchValue: searchValueProp,\n onSearchChange,\n singleRow,\n maxChips,\n getChipProps,\n virtualize,\n value,\n onSelectedOptionsChange,\n selectionMode = \"linked\",\n valueConsistsOf = \"LEAF_PRIORITY\",\n defaultExpandLevel,\n expandedIds,\n onExpandedIdsChange,\n loadOptions,\n cache,\n initialLoad,\n displayMenuAs: displayMenuAsProp = \"auto\",\n } = componentProps;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n const helperUid = useId();\n const moreInfoUid = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n const inputWrapperRef = useRef<HTMLDivElement>(null);\n const treePanelRef = useRef<HTMLDivElement>(null);\n\n warnDeprecatedErrorUsage(\"TreeSelectField\", error);\n\n const errorMessages =\n typeof error === \"boolean\" || error === undefined ? undefined : error;\n const hasHelperText = !!(hint || errorMessages || warning || description);\n const isSingleSelect = selectionMode === \"single\";\n // Single mode uses LEAF_ONLY/BRANCH_ONLY as click filters. Multi-select\n // always permits nonempty branches; BRANCH_ONLY blocks leaves and LEAF_ONLY\n // blocks empty branches.\n const branchesSelectable = isSingleSelect\n ? valueConsistsOf !== \"LEAF_ONLY\"\n : true;\n const leavesSelectable = valueConsistsOf !== \"BRANCH_ONLY\";\n const emptyBranchesSelectable = valueConsistsOf !== \"LEAF_ONLY\";\n\n const { isMobile } = useAdaptiveView();\n const displayAs =\n displayMenuAsProp === \"auto\"\n ? isMobile\n ? \"dialog\"\n : \"popover\"\n : displayMenuAsProp;\n\n const isSearchControlled = searchValueProp !== undefined;\n const [internalSearchValue, setInternalSearchValue] = useState(\"\");\n const searchValue = isSearchControlled\n ? searchValueProp\n : internalSearchValue;\n\n const handleSearchChange = useCallback(\n (v: string) => {\n if (!isSearchControlled) {\n setInternalSearchValue(v);\n }\n onSearchChange?.(v);\n },\n [isSearchControlled, onSearchChange],\n );\n\n const loader = useTreeLoader({\n loadOptions,\n cache,\n initialLoad,\n debounceMs,\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n const openMenu = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n loader.onOpen();\n }, [disabled, loader]);\n\n // The loader owns initial loading; this effect only handles later searches.\n const isFirstSearchEffect = useRef(true);\n useEffect(() => {\n if (isFirstSearchEffect.current) {\n isFirstSearchEffect.current = false;\n return;\n }\n loader.search(searchValue ?? \"\");\n // eslint-disable-next-line react-hooks/exhaustive-deps -- We only want to re-run when searchValue changes, not on loader reference changes\n }, [searchValue]);\n\n const tree = useTree({\n nodes: loader.nodes,\n value,\n onSelectedOptionsChange,\n selectionMode,\n valueConsistsOf,\n defaultExpandLevel,\n expandedIds,\n onExpandedIdsChange,\n searchValue,\n ancestry: loader.ancestry,\n loadingChildrenIds: loader.isLoadingChildren,\n });\n\n useImperativeHandle(\n ref,\n () => ({\n clearCache: loader.clearCache,\n invalidate: loader.invalidate,\n expandAll: tree.expandAll,\n collapseAll: tree.collapseAll,\n }),\n [loader.clearCache, loader.invalidate, tree.expandAll, tree.collapseAll],\n );\n\n // The lazy-cascade callback needs closeMenu before it is defined.\n const closeMenuRef = useRef<() => void>(() => undefined);\n\n const onCloseAfterSingleSelect = useCallback(() => {\n closeMenuRef.current();\n inputRef.current?.focus();\n }, []);\n\n const {\n handleToggleNode,\n pendingToggleNodeId,\n reset: resetLazyCascade,\n } = useTreeLazyCascade({\n tree,\n loader,\n isSingleSelect,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n readOnly,\n onCloseAfterSingleSelect,\n });\n\n const closeMenu = useCallback(() => {\n setIsOpen(false);\n handleSearchChange(\"\");\n resetLazyCascade();\n }, [handleSearchChange, resetLazyCascade]);\n\n useEffect(() => {\n closeMenuRef.current = closeMenu;\n }, [closeMenu]);\n\n useEffect(() => {\n if (disabled && isOpen) {\n closeMenu();\n }\n }, [disabled, isOpen, closeMenu]);\n\n const handleRemoveOption = useCallback(\n (option: TreeSelectFieldValue) => {\n const target = value.find((v) => v.id === option.id);\n // Disabled selected options are locked — chip close / keyboard removal\n // must not drop them from the value.\n if (target?.disabled) {\n return;\n }\n onSelectedOptionsChange(value.filter((v) => v.id !== option.id));\n },\n [value, onSelectedOptionsChange],\n );\n\n // Match string ids first so values such as \"003\" are not coerced to 3.\n const getActiveNode = useCallback((): TreeSelectFieldNode | undefined => {\n const descId = tree.activeDescendantId;\n if (!descId) return undefined;\n const nodeId = descId.replace(/^treeitem-/, \"\");\n const stringMatch = findNode(tree.nodes, nodeId);\n if (stringMatch) return stringMatch;\n const numId = Number(nodeId);\n return Number.isNaN(numId) ? undefined : findNode(tree.nodes, numId);\n }, [tree.activeDescendantId, tree.nodes]);\n\n const handleInputKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n if (isOpen) {\n e.stopPropagation();\n closeMenu();\n }\n return;\n }\n\n if (e.key === \"Tab\") {\n if (isOpen) closeMenu();\n return;\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n if (!isOpen) {\n openMenu();\n }\n tree.onKeyDown(e);\n return;\n }\n\n if (\n e.key === \"Backspace\" &&\n !isSingleSelect &&\n !readOnly &&\n searchValue === \"\" &&\n value.length > 0\n ) {\n // Disabled selected options are locked and are skipped.\n const lastRemovable = [...value]\n .reverse()\n .find((option) => !option.disabled);\n if (lastRemovable) {\n handleRemoveOption(lastRemovable);\n }\n return;\n }\n\n if (isOpen) {\n // Route selection through lazy loading; preserve Space for search text.\n if (e.key === \"Enter\" || (e.key === \" \" && disableSearch)) {\n const activeNode = getActiveNode();\n if (activeNode) {\n e.preventDefault();\n handleToggleNode(activeNode.id);\n }\n return;\n }\n\n // useTree expands branches but does not load their lazy children.\n if (e.key === \"ArrowRight\") {\n const activeNode = getActiveNode();\n if (activeNode?.children === null) {\n e.preventDefault();\n tree.toggleExpand(activeNode.id);\n void loader.loadChildren(activeNode);\n return;\n }\n }\n\n tree.onKeyDown(e);\n }\n },\n [\n isOpen,\n openMenu,\n closeMenu,\n isSingleSelect,\n readOnly,\n searchValue,\n value,\n handleRemoveOption,\n tree,\n getActiveNode,\n handleToggleNode,\n loader,\n disableSearch,\n ],\n );\n\n const handleLoadChildren = useCallback(\n (node: Parameters<typeof loader.loadChildren>[0]) => {\n void loader.loadChildren(node);\n },\n [loader],\n );\n\n // A scrollbar drag can move focus to the panel; keep keyboard navigation\n // there without adding a second Tab stop when search owns focus.\n const panelProps = {\n visibleNodes: tree.visibleNodes,\n getCheckState: (id: string | number) =>\n id === pendingToggleNodeId ? \"loading\" : tree.getCheckState(id),\n toggleNode: handleToggleNode,\n toggleExpand: tree.toggleExpand,\n getTreeItemProps: tree.getTreeItemProps,\n treeProps: {\n ...tree.treeProps,\n id: `${id}-tree`,\n \"aria-label\": label,\n onKeyDown:\n handleInputKeyDown as React.KeyboardEventHandler<HTMLDivElement>,\n tabIndex: disableSearch ? 0 : -1,\n },\n activeDescendantId: tree.activeDescendantId,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n readOnly,\n onHover: tree.setActiveNodeId,\n onLoadChildren: handleLoadChildren,\n };\n\n const labelContent = (\n <FieldLabel\n el=\"label\"\n htmlFor={`${id}-input`}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfo ? moreInfoUid : undefined}\n aiMark={labelAiMark}\n >\n {labelNode ?? label}\n </FieldLabel>\n );\n\n return (\n <div\n {...dataAttributes}\n data-anv=\"tree-select-field\"\n className={cx(triggerStyles[\"search-field\"], className)}\n style={{ ...layoutStyles, ...style }}\n >\n {hideLabel ? <SrOnly>{labelContent}</SrOnly> : labelContent}\n\n <TreeSelectFieldInput\n id={`${id}-input`}\n placeholder={placeholder}\n size={size}\n disabled={disabled}\n readOnly={readOnly}\n error={!!error}\n single={isSingleSelect}\n singleRow={singleRow}\n maxChips={maxChips}\n getChipProps={getChipProps}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={value}\n onRemoveOption={handleRemoveOption}\n inputRef={inputRef}\n inputWrapperRef={inputWrapperRef}\n searchValue={searchValue}\n onSearchChange={(e) => {\n handleSearchChange(e.target.value);\n if (!isOpen) openMenu();\n }}\n onInputKeyDown={handleInputKeyDown}\n onWrapperClick={() => {\n if (!disabled) {\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n inputRef.current?.focus();\n }\n }}\n isOpen={isOpen}\n ariaControls={`${id}-tree`}\n disableSearch={disableSearch}\n comboboxProps={{\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoUid]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? (true as const) : undefined,\n \"aria-activedescendant\": isOpen ? tree.activeDescendantId : undefined,\n onClick: disabled\n ? undefined\n : () => {\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n },\n }}\n />\n\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n\n {displayAs === \"dialog\" ? (\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen && !disabled}\n onClose={closeMenu}\n title={label}\n initialFocusResolver={(elements) =>\n elements.find((el) => el.tagName === \"INPUT\") || elements[0]\n }\n field={\n <TreeSelectFieldInput\n id={`${id}-dialog-input`}\n placeholder={placeholder}\n size=\"medium\"\n disabled={disabled}\n readOnly={readOnly}\n error={!!error}\n single={isSingleSelect}\n singleRow\n maxChips={20}\n getChipProps={getChipProps}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={value}\n onRemoveOption={handleRemoveOption}\n searchValue={searchValue}\n onSearchChange={(e) => {\n handleSearchChange(e.target.value);\n if (!isOpen) openMenu();\n }}\n onInputKeyDown={handleInputKeyDown}\n isOpen={isOpen}\n ariaControls={`${id}-tree`}\n disableSearch={false}\n comboboxProps={{\n \"aria-activedescendant\": isOpen\n ? tree.activeDescendantId\n : undefined,\n }}\n />\n }\n >\n {isOpen && !disabled ? (\n <TreeContent\n ref={treePanelRef}\n loading={loader.isLoading}\n hasNoVisibleNodes={tree.visibleNodes.length === 0}\n virtualize={virtualize}\n panelProps={panelProps}\n />\n ) : null}\n </OptionsDialog>\n ) : (\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={inputWrapperRef}\n open={isOpen && !disabled}\n onClose={closeMenu}\n width=\"reference\"\n >\n {isOpen && !disabled ? (\n <TreeContent\n ref={treePanelRef}\n loading={loader.isLoading}\n hasNoVisibleNodes={tree.visibleNodes.length === 0}\n virtualize={virtualize}\n panelProps={panelProps}\n />\n ) : null}\n </OptionsPopover>\n )}\n </div>\n );\n});\n\nTreeSelectField.displayName = \"TreeSelectField\";\n","import { useCallback, useMemo, useRef } from \"react\";\nimport type { MatchSorterOptions } from \"match-sorter\";\nimport { TreeSelectField } from \"./TreeSelectField\";\nimport type {\n TreeSelectFieldHandle,\n TreeSelectFieldNode,\n TreeSelectFieldProps,\n} from \"./types\";\nimport {\n type TreeSyncFilterFn,\n applyChildCounts,\n defaultTreeSyncFilter,\n toTreeSyncFilterFn,\n} from \"./internal/treeSync\";\nimport { useInvalidateOnOptionsChange } from \"../../../internal/hooks/useInvalidateOnOptionsChange\";\n\nexport type { TreeSyncFilterFn };\n\nexport type TreeSelectFieldSyncProps = Omit<\n TreeSelectFieldProps,\n \"loadOptions\" | \"debounceMs\" | \"cache\" | \"initialLoad\"\n> & {\n /** Complete tree used for selection and client-side search. */\n options: TreeSelectFieldNode[];\n /**\n * Custom function or match-sorter options. The default matches `label` and\n * `searchText`. Default and option-object filters preserve ancestors of\n * matches. A function replaces that stage; the field still applies its\n * loaded-row substring filter.\n *\n * @example\n * filter={(nodes, searchValue) => customTreeFilter(nodes, searchValue)}\n * // or\n * filter={{ keys: [\"label\"] }}\n */\n filter?: TreeSyncFilterFn | MatchSorterOptions<TreeSelectFieldNode>;\n};\n\n/**\n * Static-data variant of {@link TreeSelectField}.\n * Filters `options` on the client and refreshes the field when they change.\n */\nexport const TreeSelectFieldSync = (props: TreeSelectFieldSyncProps) => {\n const {\n options,\n filter: filterProp = defaultTreeSyncFilter,\n ...rest\n } = props;\n\n const filter = useMemo(() => toTreeSyncFilterFn(filterProp), [filterProp]);\n\n const processedOptions = useMemo(() => applyChildCounts(options), [options]);\n\n const loadOptions = useCallback(\n (searchValue: string) => {\n return filter(processedOptions, searchValue);\n },\n [filter, processedOptions],\n );\n\n const fieldRef = useRef<TreeSelectFieldHandle>(null);\n useInvalidateOnOptionsChange(fieldRef, options);\n\n return (\n <TreeSelectField\n ref={fieldRef}\n loadOptions={loadOptions}\n debounceMs={0}\n {...rest}\n />\n );\n};\n\nTreeSelectFieldSync.displayName = \"TreeSelectFieldSync\";\n"],"names":["Chevron_Right","id","triggerStyles"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { a as TreeSelectMenu, T as TreeSelectMenuSync } from './TreeSelectMenuSync-D2TvKxP-.js';
1
+ export { a as TreeSelectMenu, T as TreeSelectMenuSync } from './TreeSelectMenuSync-D7fQIyHr.js';
2
2
  //# sourceMappingURL=TreeSelectMenu.js.map
@@ -1,11 +1,11 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { forwardRef, useId, useRef, useState, useCallback, useEffect, useImperativeHandle, useMemo } from 'react';
3
3
  import { C as COMMON_PART, A as ANV_PART_ATTR } from './anvParts-DFVq7-Cm.js';
4
- import { b as useAdaptiveView, O as OptionsDialog, a as OptionsPopover, u as useInvalidateOnOptionsChange } from './useInvalidateOnOptionsChange-BD2VBpbK.js';
4
+ import { b as useAdaptiveView, O as OptionsDialog, a as OptionsPopover, u as useInvalidateOnOptionsChange } from './useInvalidateOnOptionsChange-DiRbyJFp.js';
5
5
  import { M as MenuFooter } from './MenuFooter-D__gg92C.js';
6
6
  import { r as resolveConfirmation, u as useConfirmationDraft } from './confirmationTypes-DeRtO_Cw.js';
7
7
  import { a as arrayIdsEqual } from './arrayIdsEqual-DnevhwqN.js';
8
- import { u as useTreeLoader, a as useTree, b as useTreeLazyCascade, f as findNode, T as TreeContent, d as defaultTreeSyncFilter, t as toTreeSyncFilterFn, c as applyChildCounts } from './treeSync-B38r1dRQ.js';
8
+ import { u as useTreeLoader, a as useTree, b as useTreeLazyCascade, f as findNode, T as TreeContent, d as defaultTreeSyncFilter, t as toTreeSyncFilterFn, c as applyChildCounts } from './treeSync-CkjyJSVq.js';
9
9
  import { S as SearchField } from './SearchField-ChoNtw8w.js';
10
10
 
11
11
  const PARTS = {
@@ -417,4 +417,4 @@ const TreeSelectMenuSync = (props) => {
417
417
  TreeSelectMenuSync.displayName = "TreeSelectMenuSync";
418
418
 
419
419
  export { TreeSelectMenuSync as T, TreeSelectMenu as a };
420
- //# sourceMappingURL=TreeSelectMenuSync-D2TvKxP-.js.map
420
+ //# sourceMappingURL=TreeSelectMenuSync-D7fQIyHr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TreeSelectMenuSync-D2TvKxP-.js","sources":["../src/beta/components/TreeSelectMenu/parts.ts","../src/beta/components/TreeSelectMenu/TreeSelectMenu.tsx","../src/beta/components/TreeSelectMenu/TreeSelectMenuSync.tsx"],"sourcesContent":["import { COMMON_PART } from \"../../../internal/constants/anvParts\";\n\n/**\n * `data-anv-part` names for TreeSelectMenu interactive sub-elements.\n *\n * Only the trigger and search input are owned here. Tree parts come from\n * TreeSelectField internals; shell and footer parts come from shared option\n * shells. Consumer `data-*` merges into the trigger bag because there is no\n * wrapper root.\n */\nexport const PARTS = {\n trigger: COMMON_PART.trigger,\n input: COMMON_PART.input,\n} as const;\n","import {\n forwardRef,\n useId,\n useRef,\n useState,\n useEffect,\n useImperativeHandle,\n useCallback,\n type ChangeEvent,\n type KeyboardEvent,\n} from \"react\";\nimport type { TreeSelectMenuHandle, TreeSelectMenuProps } from \"./types\";\nimport type {\n TreeSelectFieldNode,\n TreeSelectFieldValue,\n} from \"../TreeSelectField/types\";\nimport { SearchField } from \"../../../components\";\nimport type { DataAttributes } from \"../../../types\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { MenuFooter } from \"../../../internal/components/MenuFooter/MenuFooter\";\nimport { useConfirmationDraft } from \"../../../internal/hooks/useConfirmationDraft\";\nimport { resolveConfirmation } from \"../../../internal/types/confirmationTypes\";\nimport { arrayIdsEqual } from \"../../../internal/utils/arrayIdsEqual\";\nimport { useAdaptiveView } from \"../../hooks/useAdaptiveView\";\nimport { useTreeLoader } from \"../TreeSelectField/internal/useTreeLoader\";\nimport { useTree } from \"../TreeSelectField/internal/useTree\";\nimport { TreeContent } from \"../TreeSelectField/internal/TreeContent\";\nimport { findNode } from \"../TreeSelectField/internal/treeUtils\";\nimport { useTreeLazyCascade } from \"../TreeSelectField/internal/useTreeLazyCascade\";\nimport { PARTS } from \"./parts\";\n\n/**\n * Searchable tree selection opened by a consumer-rendered trigger.\n * Supports async root/search loading and lazy branch loading in a popover or dialog.\n *\n * @example\n * <TreeSelectMenu\n * trigger={(triggerProps) => <Button {...triggerProps}>Select categories</Button>}\n * label=\"Categories\"\n * value={selected}\n * onSelectedOptionsChange={setSelected}\n * loadOptions={loadCategories}\n * />\n */\nexport const TreeSelectMenu = forwardRef<\n TreeSelectMenuHandle,\n TreeSelectMenuProps\n>((props, ref) => {\n const dataAttributes = Object.fromEntries(\n Object.entries(props).filter(([key]) => key.startsWith(\"data-\")),\n ) as DataAttributes;\n\n const {\n id: idProp,\n trigger,\n onMenuKeyDown,\n onImplicitClose,\n onExplicitClose,\n label,\n searchPlaceholder,\n displayMenuAs: displayMenuAsProp = \"auto\",\n virtualize,\n disableSearch,\n popoverWidth,\n debounceMs = 200,\n onSearchChange,\n value,\n onSelectedOptionsChange,\n selectionMode = \"linked\",\n valueConsistsOf = \"LEAF_PRIORITY\",\n defaultExpandLevel,\n expandedIds,\n onExpandedIdsChange,\n loadOptions,\n cache,\n initialLoad,\n confirmation: confirmationProp,\n clear,\n } = props;\n\n const confirmation = resolveConfirmation(confirmationProp);\n\n const autoId = useId();\n const id = idProp ?? autoId;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const treePanelRef = useRef<HTMLDivElement>(null);\n\n const isSingleSelect = selectionMode === \"single\";\n const branchesSelectable = isSingleSelect\n ? valueConsistsOf !== \"LEAF_ONLY\"\n : true;\n const leavesSelectable = valueConsistsOf !== \"BRANCH_ONLY\";\n const emptyBranchesSelectable = valueConsistsOf !== \"LEAF_ONLY\";\n\n const { isMobile } = useAdaptiveView();\n const displayAs =\n displayMenuAsProp === \"auto\"\n ? isMobile\n ? \"dialog\"\n : \"popover\"\n : displayMenuAsProp;\n\n const [inputValue, setInputValue] = useState(\"\");\n const searchValue = disableSearch ? \"\" : inputValue;\n\n const handleSearchChange = useCallback(\n (v: string) => {\n setInputValue(v);\n onSearchChange?.(v);\n },\n [onSearchChange],\n );\n\n const loader = useTreeLoader({\n loadOptions,\n cache,\n initialLoad,\n debounceMs,\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n const pendingApplyRef = useRef(false);\n const {\n displayValue: draftValue,\n setDraft,\n apply,\n cancel,\n } = useConfirmationDraft<TreeSelectFieldValue[]>({\n value,\n onCommit: onSelectedOptionsChange,\n isOpen,\n enabled: confirmation.enabled,\n isEqual: arrayIdsEqual,\n });\n\n const openMenu = useCallback(() => {\n setIsOpen(true);\n loader.onOpen();\n }, [loader]);\n\n const isFirstSearchEffect = useRef(true);\n useEffect(() => {\n if (isFirstSearchEffect.current) {\n isFirstSearchEffect.current = false;\n return;\n }\n loader.search(searchValue ?? \"\");\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Only re-run when searchValue changes\n }, [searchValue]);\n\n const tree = useTree({\n nodes: loader.nodes,\n value: draftValue,\n onSelectedOptionsChange: setDraft,\n selectionMode,\n valueConsistsOf,\n defaultExpandLevel,\n expandedIds,\n onExpandedIdsChange,\n searchValue,\n ancestry: loader.ancestry,\n loadingChildrenIds: loader.isLoadingChildren,\n });\n\n useImperativeHandle(\n ref,\n () => ({\n clearCache: loader.clearCache,\n invalidate: loader.invalidate,\n expandAll: tree.expandAll,\n collapseAll: tree.collapseAll,\n }),\n [loader.clearCache, loader.invalidate, tree.expandAll, tree.collapseAll],\n );\n\n // The lazy-cascade callback needs closeMenu before it is defined.\n const closeMenuRef = useRef<() => void>(() => undefined);\n\n const onCloseAfterSingleSelect = useCallback(() => {\n // Auto-closing would discard the confirmation draft before Apply.\n if (confirmation.enabled) return;\n closeMenuRef.current();\n }, [confirmation.enabled]);\n\n const {\n handleToggleNode,\n pendingToggleNodeId,\n reset: resetLazyCascade,\n } = useTreeLazyCascade({\n tree,\n loader,\n isSingleSelect,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n onCloseAfterSingleSelect,\n });\n\n const closeMenu = useCallback(\n (opts?: { restoreFocus?: boolean }) => {\n // Apply and Clear mark their closes as commits; every other close cancels.\n if (confirmation.enabled && !pendingApplyRef.current) cancel();\n pendingApplyRef.current = false;\n\n setIsOpen(false);\n handleSearchChange(\"\");\n resetLazyCascade();\n\n const shouldRestoreFocus = opts?.restoreFocus ?? true;\n if (shouldRestoreFocus) {\n onExplicitClose?.();\n requestAnimationFrame(() => {\n triggerRef.current?.focus();\n });\n } else {\n onImplicitClose?.();\n }\n },\n [\n confirmation.enabled,\n cancel,\n handleSearchChange,\n resetLazyCascade,\n onImplicitClose,\n onExplicitClose,\n ],\n );\n\n useEffect(() => {\n closeMenuRef.current = () => closeMenu();\n }, [closeMenu]);\n\n const handleApply = useCallback(() => {\n apply();\n pendingApplyRef.current = true;\n closeMenu();\n }, [apply, closeMenu]);\n\n const handleCancel = useCallback(() => {\n closeMenu();\n }, [closeMenu]);\n\n const getActiveNode = useCallback((): TreeSelectFieldNode | undefined => {\n const descId = tree.activeDescendantId;\n if (!descId) return undefined;\n const nodeId = descId.replace(/^treeitem-/, \"\");\n const numId = Number(nodeId);\n return findNode(tree.nodes, Number.isNaN(numId) ? nodeId : numId);\n }, [tree.activeDescendantId, tree.nodes]);\n\n const handleMenuKeyDown = useCallback(\n (e: KeyboardEvent) => {\n onMenuKeyDown?.(e);\n if (e.defaultPrevented) return;\n\n if (e.key === \"Escape\") {\n e.stopPropagation();\n closeMenu();\n return;\n }\n\n if (e.key === \"Tab\") {\n closeMenu({ restoreFocus: false });\n return;\n }\n\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n tree.onKeyDown(e);\n return;\n }\n\n if (e.key === \"Enter\" || (disableSearch && e.key === \" \")) {\n const activeNode = getActiveNode();\n if (activeNode) {\n e.preventDefault();\n handleToggleNode(activeNode.id);\n }\n return;\n }\n\n if (e.key === \"ArrowRight\") {\n const activeNode = getActiveNode();\n if (activeNode?.children === null) {\n e.preventDefault();\n tree.toggleExpand(activeNode.id);\n void loader.loadChildren(activeNode);\n return;\n }\n }\n\n tree.onKeyDown(e);\n },\n [\n onMenuKeyDown,\n closeMenu,\n tree,\n getActiveNode,\n handleToggleNode,\n loader,\n disableSearch,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (!isOpen) {\n openMenu();\n }\n }\n },\n [isOpen, openMenu],\n );\n\n const handleTriggerClick = useCallback(() => {\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n }, [isOpen, openMenu, closeMenu]);\n\n useEffect(() => {\n if (!isOpen || displayAs !== \"popover\") return;\n\n const frameId = requestAnimationFrame(() => {\n if (!disableSearch) {\n searchRef.current?.focus();\n } else {\n treePanelRef.current?.focus();\n }\n });\n\n return () => cancelAnimationFrame(frameId);\n }, [isOpen, displayAs, disableSearch]);\n\n const handleLoadChildren = useCallback(\n (node: Parameters<typeof loader.loadChildren>[0]) => {\n void loader.loadChildren(node);\n },\n [loader],\n );\n\n // A scrollbar drag can move focus to the panel; keep keyboard navigation\n // there without adding a second Tab stop when search owns focus.\n const treePropsMerged = {\n ...tree.treeProps,\n id: `${id}-tree`,\n \"aria-label\": label,\n onKeyDown: handleMenuKeyDown as React.KeyboardEventHandler<HTMLDivElement>,\n tabIndex: disableSearch ? 0 : -1,\n };\n\n const panelProps = {\n visibleNodes: tree.visibleNodes,\n getCheckState: (nodeId: string | number) =>\n nodeId === pendingToggleNodeId ? \"loading\" : tree.getCheckState(nodeId),\n toggleNode: handleToggleNode,\n toggleExpand: tree.toggleExpand,\n getTreeItemProps: tree.getTreeItemProps,\n treeProps: treePropsMerged,\n activeDescendantId: tree.activeDescendantId,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n onHover: tree.setActiveNodeId,\n onLoadChildren: handleLoadChildren,\n } as const;\n\n const handleInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n handleSearchChange(e.target.value);\n },\n [handleSearchChange],\n );\n\n const handleSearchClear = useCallback(() => {\n handleSearchChange(\"\");\n }, [handleSearchChange]);\n\n const searchInput = !disableSearch ? (\n <SearchField\n ref={searchRef}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={\n handleMenuKeyDown as React.KeyboardEventHandler<HTMLInputElement>\n }\n onClear={handleSearchClear}\n aria-activedescendant={tree.activeDescendantId}\n aria-controls={`${id}-tree`}\n placeholder={searchPlaceholder}\n type=\"search\"\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n ) : null;\n\n const handleClickOutside = useCallback(() => {\n closeMenu({ restoreFocus: false });\n }, [closeMenu]);\n\n const treeContent = (\n <TreeContent\n ref={treePanelRef}\n loading={loader.isLoading}\n hasNoVisibleNodes={tree.visibleNodes.length === 0}\n virtualize={virtualize}\n panelProps={panelProps}\n />\n );\n\n const triggerProps = {\n ref: triggerRef,\n onClick: handleTriggerClick,\n onKeyDown: handleTriggerKeyDown,\n \"aria-haspopup\": \"tree\" as const,\n \"aria-controls\": `${id}-tree`,\n \"aria-expanded\": isOpen,\n \"data-state\": (isOpen ? \"open\" : \"close\") as \"open\" | \"close\",\n ...dataAttributes,\n [ANV_PART_ATTR]: PARTS.trigger,\n };\n\n const confirmationConfig = confirmation.enabled\n ? {\n applyLabel: confirmation.applyLabel,\n cancelLabel: confirmation.cancelLabel,\n onApply: handleApply,\n onCancel: handleCancel,\n }\n : undefined;\n const wrappedClear = clear\n ? {\n ...clear,\n onClick: () => {\n clear.onClick();\n if (confirmation.enabled) pendingApplyRef.current = true;\n closeMenu();\n },\n }\n : undefined;\n // An empty MenuFooter still draws the shell's footer divider.\n const hasFooter = !!wrappedClear || !!confirmationConfig;\n const footer = hasFooter ? (\n <MenuFooter clear={wrappedClear} confirmation={confirmationConfig} />\n ) : undefined;\n\n if (displayAs === \"dialog\") {\n return (\n <>\n {trigger(triggerProps)}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={() => closeMenu()}\n title={label}\n field={searchInput ?? undefined}\n footer={footer}\n initialFocusResolver={\n !disableSearch\n ? (elements) =>\n elements.find((el) => el.tagName === \"INPUT\") || elements[0]\n : undefined\n }\n >\n {isOpen ? treeContent : null}\n </OptionsDialog>\n </>\n );\n }\n\n return (\n <>\n {trigger(triggerProps)}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={triggerRef}\n open={isOpen}\n onClose={handleClickOutside}\n width={popoverWidth ?? 320}\n footer={footer}\n >\n {searchInput}\n {isOpen ? treeContent : null}\n </OptionsPopover>\n </>\n );\n});\n\nTreeSelectMenu.displayName = \"TreeSelectMenu\";\n","import { useCallback, useMemo, useRef } from \"react\";\nimport type { MatchSorterOptions } from \"match-sorter\";\nimport { TreeSelectMenu } from \"./TreeSelectMenu\";\nimport type {\n TreeSelectMenuHandle,\n TreeSelectMenuNode,\n TreeSelectMenuProps,\n} from \"./types\";\nimport {\n type TreeSyncFilterFn,\n applyChildCounts,\n defaultTreeSyncFilter,\n toTreeSyncFilterFn,\n} from \"../TreeSelectField/internal/treeSync\";\nimport { useInvalidateOnOptionsChange } from \"../../../internal/hooks/useInvalidateOnOptionsChange\";\n\nexport type { TreeSyncFilterFn };\n\nexport type TreeSelectMenuSyncProps = Omit<\n TreeSelectMenuProps,\n \"loadOptions\" | \"debounceMs\" | \"cache\" | \"initialLoad\"\n> & {\n /** Complete tree used for selection and client-side search. */\n options: TreeSelectMenuNode[];\n /**\n * Custom function or match-sorter options. The default matches `label` and\n * `searchText`. Default and option-object filters preserve ancestors of\n * matches; a function replaces that behavior.\n *\n * @example\n * filter={(nodes, searchValue) => customTreeFilter(nodes, searchValue)}\n * // or\n * filter={{ keys: [\"label\"] }}\n */\n filter?: TreeSyncFilterFn | MatchSorterOptions<TreeSelectMenuNode>;\n};\n\n/**\n * Static-data variant of {@link TreeSelectMenu}.\n * Filters `options` on the client and refreshes the menu when they change.\n */\nexport const TreeSelectMenuSync = (props: TreeSelectMenuSyncProps) => {\n const {\n options,\n filter: filterProp = defaultTreeSyncFilter,\n ...rest\n } = props;\n\n const filter = useMemo(() => toTreeSyncFilterFn(filterProp), [filterProp]);\n\n // Full-tree counts keep filtered branches from appearing fully selected.\n const processedOptions = useMemo(() => applyChildCounts(options), [options]);\n\n const loadOptions = useCallback(\n (searchValue: string) => {\n return filter(processedOptions, searchValue);\n },\n [filter, processedOptions],\n );\n\n const menuRef = useRef<TreeSelectMenuHandle>(null);\n useInvalidateOnOptionsChange(menuRef, options);\n\n return (\n <TreeSelectMenu\n ref={menuRef}\n loadOptions={loadOptions}\n debounceMs={0}\n {...rest}\n />\n );\n};\n\nTreeSelectMenuSync.displayName = \"TreeSelectMenuSync\";\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TreeSelectMenuSync-D7fQIyHr.js","sources":["../src/beta/components/TreeSelectMenu/parts.ts","../src/beta/components/TreeSelectMenu/TreeSelectMenu.tsx","../src/beta/components/TreeSelectMenu/TreeSelectMenuSync.tsx"],"sourcesContent":["import { COMMON_PART } from \"../../../internal/constants/anvParts\";\n\n/**\n * `data-anv-part` names for TreeSelectMenu interactive sub-elements.\n *\n * Only the trigger and search input are owned here. Tree parts come from\n * TreeSelectField internals; shell and footer parts come from shared option\n * shells. Consumer `data-*` merges into the trigger bag because there is no\n * wrapper root.\n */\nexport const PARTS = {\n trigger: COMMON_PART.trigger,\n input: COMMON_PART.input,\n} as const;\n","import {\n forwardRef,\n useId,\n useRef,\n useState,\n useEffect,\n useImperativeHandle,\n useCallback,\n type ChangeEvent,\n type KeyboardEvent,\n} from \"react\";\nimport type { TreeSelectMenuHandle, TreeSelectMenuProps } from \"./types\";\nimport type {\n TreeSelectFieldNode,\n TreeSelectFieldValue,\n} from \"../TreeSelectField/types\";\nimport { SearchField } from \"../../../components\";\nimport type { DataAttributes } from \"../../../types\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { MenuFooter } from \"../../../internal/components/MenuFooter/MenuFooter\";\nimport { useConfirmationDraft } from \"../../../internal/hooks/useConfirmationDraft\";\nimport { resolveConfirmation } from \"../../../internal/types/confirmationTypes\";\nimport { arrayIdsEqual } from \"../../../internal/utils/arrayIdsEqual\";\nimport { useAdaptiveView } from \"../../hooks/useAdaptiveView\";\nimport { useTreeLoader } from \"../TreeSelectField/internal/useTreeLoader\";\nimport { useTree } from \"../TreeSelectField/internal/useTree\";\nimport { TreeContent } from \"../TreeSelectField/internal/TreeContent\";\nimport { findNode } from \"../TreeSelectField/internal/treeUtils\";\nimport { useTreeLazyCascade } from \"../TreeSelectField/internal/useTreeLazyCascade\";\nimport { PARTS } from \"./parts\";\n\n/**\n * Searchable tree selection opened by a consumer-rendered trigger.\n * Supports async root/search loading and lazy branch loading in a popover or dialog.\n *\n * @example\n * <TreeSelectMenu\n * trigger={(triggerProps) => <Button {...triggerProps}>Select categories</Button>}\n * label=\"Categories\"\n * value={selected}\n * onSelectedOptionsChange={setSelected}\n * loadOptions={loadCategories}\n * />\n */\nexport const TreeSelectMenu = forwardRef<\n TreeSelectMenuHandle,\n TreeSelectMenuProps\n>((props, ref) => {\n const dataAttributes = Object.fromEntries(\n Object.entries(props).filter(([key]) => key.startsWith(\"data-\")),\n ) as DataAttributes;\n\n const {\n id: idProp,\n trigger,\n onMenuKeyDown,\n onImplicitClose,\n onExplicitClose,\n label,\n searchPlaceholder,\n displayMenuAs: displayMenuAsProp = \"auto\",\n virtualize,\n disableSearch,\n popoverWidth,\n debounceMs = 200,\n onSearchChange,\n value,\n onSelectedOptionsChange,\n selectionMode = \"linked\",\n valueConsistsOf = \"LEAF_PRIORITY\",\n defaultExpandLevel,\n expandedIds,\n onExpandedIdsChange,\n loadOptions,\n cache,\n initialLoad,\n confirmation: confirmationProp,\n clear,\n } = props;\n\n const confirmation = resolveConfirmation(confirmationProp);\n\n const autoId = useId();\n const id = idProp ?? autoId;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const treePanelRef = useRef<HTMLDivElement>(null);\n\n const isSingleSelect = selectionMode === \"single\";\n const branchesSelectable = isSingleSelect\n ? valueConsistsOf !== \"LEAF_ONLY\"\n : true;\n const leavesSelectable = valueConsistsOf !== \"BRANCH_ONLY\";\n const emptyBranchesSelectable = valueConsistsOf !== \"LEAF_ONLY\";\n\n const { isMobile } = useAdaptiveView();\n const displayAs =\n displayMenuAsProp === \"auto\"\n ? isMobile\n ? \"dialog\"\n : \"popover\"\n : displayMenuAsProp;\n\n const [inputValue, setInputValue] = useState(\"\");\n const searchValue = disableSearch ? \"\" : inputValue;\n\n const handleSearchChange = useCallback(\n (v: string) => {\n setInputValue(v);\n onSearchChange?.(v);\n },\n [onSearchChange],\n );\n\n const loader = useTreeLoader({\n loadOptions,\n cache,\n initialLoad,\n debounceMs,\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n const pendingApplyRef = useRef(false);\n const {\n displayValue: draftValue,\n setDraft,\n apply,\n cancel,\n } = useConfirmationDraft<TreeSelectFieldValue[]>({\n value,\n onCommit: onSelectedOptionsChange,\n isOpen,\n enabled: confirmation.enabled,\n isEqual: arrayIdsEqual,\n });\n\n const openMenu = useCallback(() => {\n setIsOpen(true);\n loader.onOpen();\n }, [loader]);\n\n const isFirstSearchEffect = useRef(true);\n useEffect(() => {\n if (isFirstSearchEffect.current) {\n isFirstSearchEffect.current = false;\n return;\n }\n loader.search(searchValue ?? \"\");\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Only re-run when searchValue changes\n }, [searchValue]);\n\n const tree = useTree({\n nodes: loader.nodes,\n value: draftValue,\n onSelectedOptionsChange: setDraft,\n selectionMode,\n valueConsistsOf,\n defaultExpandLevel,\n expandedIds,\n onExpandedIdsChange,\n searchValue,\n ancestry: loader.ancestry,\n loadingChildrenIds: loader.isLoadingChildren,\n });\n\n useImperativeHandle(\n ref,\n () => ({\n clearCache: loader.clearCache,\n invalidate: loader.invalidate,\n expandAll: tree.expandAll,\n collapseAll: tree.collapseAll,\n }),\n [loader.clearCache, loader.invalidate, tree.expandAll, tree.collapseAll],\n );\n\n // The lazy-cascade callback needs closeMenu before it is defined.\n const closeMenuRef = useRef<() => void>(() => undefined);\n\n const onCloseAfterSingleSelect = useCallback(() => {\n // Auto-closing would discard the confirmation draft before Apply.\n if (confirmation.enabled) return;\n closeMenuRef.current();\n }, [confirmation.enabled]);\n\n const {\n handleToggleNode,\n pendingToggleNodeId,\n reset: resetLazyCascade,\n } = useTreeLazyCascade({\n tree,\n loader,\n isSingleSelect,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n onCloseAfterSingleSelect,\n });\n\n const closeMenu = useCallback(\n (opts?: { restoreFocus?: boolean }) => {\n // Apply and Clear mark their closes as commits; every other close cancels.\n if (confirmation.enabled && !pendingApplyRef.current) cancel();\n pendingApplyRef.current = false;\n\n setIsOpen(false);\n handleSearchChange(\"\");\n resetLazyCascade();\n\n const shouldRestoreFocus = opts?.restoreFocus ?? true;\n if (shouldRestoreFocus) {\n onExplicitClose?.();\n requestAnimationFrame(() => {\n triggerRef.current?.focus();\n });\n } else {\n onImplicitClose?.();\n }\n },\n [\n confirmation.enabled,\n cancel,\n handleSearchChange,\n resetLazyCascade,\n onImplicitClose,\n onExplicitClose,\n ],\n );\n\n useEffect(() => {\n closeMenuRef.current = () => closeMenu();\n }, [closeMenu]);\n\n const handleApply = useCallback(() => {\n apply();\n pendingApplyRef.current = true;\n closeMenu();\n }, [apply, closeMenu]);\n\n const handleCancel = useCallback(() => {\n closeMenu();\n }, [closeMenu]);\n\n const getActiveNode = useCallback((): TreeSelectFieldNode | undefined => {\n const descId = tree.activeDescendantId;\n if (!descId) return undefined;\n const nodeId = descId.replace(/^treeitem-/, \"\");\n const numId = Number(nodeId);\n return findNode(tree.nodes, Number.isNaN(numId) ? nodeId : numId);\n }, [tree.activeDescendantId, tree.nodes]);\n\n const handleMenuKeyDown = useCallback(\n (e: KeyboardEvent) => {\n onMenuKeyDown?.(e);\n if (e.defaultPrevented) return;\n\n if (e.key === \"Escape\") {\n e.stopPropagation();\n closeMenu();\n return;\n }\n\n if (e.key === \"Tab\") {\n closeMenu({ restoreFocus: false });\n return;\n }\n\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n tree.onKeyDown(e);\n return;\n }\n\n if (e.key === \"Enter\" || (disableSearch && e.key === \" \")) {\n const activeNode = getActiveNode();\n if (activeNode) {\n e.preventDefault();\n handleToggleNode(activeNode.id);\n }\n return;\n }\n\n if (e.key === \"ArrowRight\") {\n const activeNode = getActiveNode();\n if (activeNode?.children === null) {\n e.preventDefault();\n tree.toggleExpand(activeNode.id);\n void loader.loadChildren(activeNode);\n return;\n }\n }\n\n tree.onKeyDown(e);\n },\n [\n onMenuKeyDown,\n closeMenu,\n tree,\n getActiveNode,\n handleToggleNode,\n loader,\n disableSearch,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (!isOpen) {\n openMenu();\n }\n }\n },\n [isOpen, openMenu],\n );\n\n const handleTriggerClick = useCallback(() => {\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n }, [isOpen, openMenu, closeMenu]);\n\n useEffect(() => {\n if (!isOpen || displayAs !== \"popover\") return;\n\n const frameId = requestAnimationFrame(() => {\n if (!disableSearch) {\n searchRef.current?.focus();\n } else {\n treePanelRef.current?.focus();\n }\n });\n\n return () => cancelAnimationFrame(frameId);\n }, [isOpen, displayAs, disableSearch]);\n\n const handleLoadChildren = useCallback(\n (node: Parameters<typeof loader.loadChildren>[0]) => {\n void loader.loadChildren(node);\n },\n [loader],\n );\n\n // A scrollbar drag can move focus to the panel; keep keyboard navigation\n // there without adding a second Tab stop when search owns focus.\n const treePropsMerged = {\n ...tree.treeProps,\n id: `${id}-tree`,\n \"aria-label\": label,\n onKeyDown: handleMenuKeyDown as React.KeyboardEventHandler<HTMLDivElement>,\n tabIndex: disableSearch ? 0 : -1,\n };\n\n const panelProps = {\n visibleNodes: tree.visibleNodes,\n getCheckState: (nodeId: string | number) =>\n nodeId === pendingToggleNodeId ? \"loading\" : tree.getCheckState(nodeId),\n toggleNode: handleToggleNode,\n toggleExpand: tree.toggleExpand,\n getTreeItemProps: tree.getTreeItemProps,\n treeProps: treePropsMerged,\n activeDescendantId: tree.activeDescendantId,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n onHover: tree.setActiveNodeId,\n onLoadChildren: handleLoadChildren,\n } as const;\n\n const handleInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n handleSearchChange(e.target.value);\n },\n [handleSearchChange],\n );\n\n const handleSearchClear = useCallback(() => {\n handleSearchChange(\"\");\n }, [handleSearchChange]);\n\n const searchInput = !disableSearch ? (\n <SearchField\n ref={searchRef}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={\n handleMenuKeyDown as React.KeyboardEventHandler<HTMLInputElement>\n }\n onClear={handleSearchClear}\n aria-activedescendant={tree.activeDescendantId}\n aria-controls={`${id}-tree`}\n placeholder={searchPlaceholder}\n type=\"search\"\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n ) : null;\n\n const handleClickOutside = useCallback(() => {\n closeMenu({ restoreFocus: false });\n }, [closeMenu]);\n\n const treeContent = (\n <TreeContent\n ref={treePanelRef}\n loading={loader.isLoading}\n hasNoVisibleNodes={tree.visibleNodes.length === 0}\n virtualize={virtualize}\n panelProps={panelProps}\n />\n );\n\n const triggerProps = {\n ref: triggerRef,\n onClick: handleTriggerClick,\n onKeyDown: handleTriggerKeyDown,\n \"aria-haspopup\": \"tree\" as const,\n \"aria-controls\": `${id}-tree`,\n \"aria-expanded\": isOpen,\n \"data-state\": (isOpen ? \"open\" : \"close\") as \"open\" | \"close\",\n ...dataAttributes,\n [ANV_PART_ATTR]: PARTS.trigger,\n };\n\n const confirmationConfig = confirmation.enabled\n ? {\n applyLabel: confirmation.applyLabel,\n cancelLabel: confirmation.cancelLabel,\n onApply: handleApply,\n onCancel: handleCancel,\n }\n : undefined;\n const wrappedClear = clear\n ? {\n ...clear,\n onClick: () => {\n clear.onClick();\n if (confirmation.enabled) pendingApplyRef.current = true;\n closeMenu();\n },\n }\n : undefined;\n // An empty MenuFooter still draws the shell's footer divider.\n const hasFooter = !!wrappedClear || !!confirmationConfig;\n const footer = hasFooter ? (\n <MenuFooter clear={wrappedClear} confirmation={confirmationConfig} />\n ) : undefined;\n\n if (displayAs === \"dialog\") {\n return (\n <>\n {trigger(triggerProps)}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={() => closeMenu()}\n title={label}\n field={searchInput ?? undefined}\n footer={footer}\n initialFocusResolver={\n !disableSearch\n ? (elements) =>\n elements.find((el) => el.tagName === \"INPUT\") || elements[0]\n : undefined\n }\n >\n {isOpen ? treeContent : null}\n </OptionsDialog>\n </>\n );\n }\n\n return (\n <>\n {trigger(triggerProps)}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={triggerRef}\n open={isOpen}\n onClose={handleClickOutside}\n width={popoverWidth ?? 320}\n footer={footer}\n >\n {searchInput}\n {isOpen ? treeContent : null}\n </OptionsPopover>\n </>\n );\n});\n\nTreeSelectMenu.displayName = \"TreeSelectMenu\";\n","import { useCallback, useMemo, useRef } from \"react\";\nimport type { MatchSorterOptions } from \"match-sorter\";\nimport { TreeSelectMenu } from \"./TreeSelectMenu\";\nimport type {\n TreeSelectMenuHandle,\n TreeSelectMenuNode,\n TreeSelectMenuProps,\n} from \"./types\";\nimport {\n type TreeSyncFilterFn,\n applyChildCounts,\n defaultTreeSyncFilter,\n toTreeSyncFilterFn,\n} from \"../TreeSelectField/internal/treeSync\";\nimport { useInvalidateOnOptionsChange } from \"../../../internal/hooks/useInvalidateOnOptionsChange\";\n\nexport type { TreeSyncFilterFn };\n\nexport type TreeSelectMenuSyncProps = Omit<\n TreeSelectMenuProps,\n \"loadOptions\" | \"debounceMs\" | \"cache\" | \"initialLoad\"\n> & {\n /** Complete tree used for selection and client-side search. */\n options: TreeSelectMenuNode[];\n /**\n * Custom function or match-sorter options. The default matches `label` and\n * `searchText`. Default and option-object filters preserve ancestors of\n * matches; a function replaces that behavior.\n *\n * @example\n * filter={(nodes, searchValue) => customTreeFilter(nodes, searchValue)}\n * // or\n * filter={{ keys: [\"label\"] }}\n */\n filter?: TreeSyncFilterFn | MatchSorterOptions<TreeSelectMenuNode>;\n};\n\n/**\n * Static-data variant of {@link TreeSelectMenu}.\n * Filters `options` on the client and refreshes the menu when they change.\n */\nexport const TreeSelectMenuSync = (props: TreeSelectMenuSyncProps) => {\n const {\n options,\n filter: filterProp = defaultTreeSyncFilter,\n ...rest\n } = props;\n\n const filter = useMemo(() => toTreeSyncFilterFn(filterProp), [filterProp]);\n\n // Full-tree counts keep filtered branches from appearing fully selected.\n const processedOptions = useMemo(() => applyChildCounts(options), [options]);\n\n const loadOptions = useCallback(\n (searchValue: string) => {\n return filter(processedOptions, searchValue);\n },\n [filter, processedOptions],\n );\n\n const menuRef = useRef<TreeSelectMenuHandle>(null);\n useInvalidateOnOptionsChange(menuRef, options);\n\n return (\n <TreeSelectMenu\n ref={menuRef}\n loadOptions={loadOptions}\n debounceMs={0}\n {...rest}\n />\n );\n};\n\nTreeSelectMenuSync.displayName = \"TreeSelectMenuSync\";\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { forwardRef, useState, useRef, useId, useLayoutEffect, useCallback, useEffect } from 'react';
3
- import { P as Popover } from './Popover-CIh1CsoJ.js';
3
+ import { P as Popover } from './Popover-BsEwcuu4.js';
4
4
  import { S as Spinner } from './Spinner-B7tTWcP6.js';
5
- import { T as TextField } from './TextField-Bxd-Qzoi.js';
5
+ import { T as TextField } from './TextField-B6tVKoxq.js';
6
6
  import { m as mergeRefs } from './useMergeRefs-Dfmtq9cI.js';
7
7
  import { c as cx } from './index-De1g9FRV.js';
8
8
  import { m as menuStyles } from './Menu.module-CMDgSO9k.js';
@@ -307,4 +307,4 @@ function TypeaheadTextField({
307
307
  TypeaheadTextField.displayName = "TypeaheadTextField";
308
308
 
309
309
  export { TypeaheadTextField as T };
310
- //# sourceMappingURL=TypeaheadTextField-DgazozK7.js.map
310
+ //# sourceMappingURL=TypeaheadTextField-Dkh84OCF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TypeaheadTextField-DgazozK7.js","sources":["../src/beta/components/TypeaheadTextField/internal/SuggestionItem.tsx","../src/beta/components/TypeaheadTextField/TypeaheadTextField.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode, forwardRef } from \"react\";\nimport cx from \"classnames\";\nimport menuStyles from \"../../../../components/Menu/Menu.module.scss\";\nimport styles from \"./SuggestionItem.module.scss\";\n\nexport type SuggestionItemProps = HTMLAttributes<HTMLDivElement> & {\n label: ReactNode;\n selected?: boolean;\n disabled?: boolean;\n};\n\n/** Non-focusable option row; the input retains focus via active descendant. */\nexport const SuggestionItem = forwardRef<HTMLDivElement, SuggestionItemProps>(\n ({ label, selected, disabled, className, ...rest }, ref) => (\n <div\n {...rest}\n ref={ref}\n role=\"option\"\n aria-selected={selected ?? false}\n aria-disabled={disabled || undefined}\n data-anv=\"suggestion-option\"\n className={cx(menuStyles[\"item\"], styles[\"option\"], className)}\n >\n {label}\n </div>\n ),\n);\n\nSuggestionItem.displayName = \"SuggestionItem\";\n","import {\n type CSSProperties,\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n type Ref,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Popover } from \"../../../components/Popover\";\nimport { Spinner } from \"../../../components/Spinner\";\nimport { TextField, type TextFieldProps } from \"../../../components/TextField\";\nimport { mergeRefs } from \"../../../hooks/useMergeRefs/useMergeRefs\";\nimport { useDebouncedCallback } from \"../../../internal/hooks/useDebouncedCallback\";\nimport { useOptionallyControlledState } from \"../../../internal/hooks/useOptionallyControlledState\";\nimport type { DistributiveOmit } from \"../../../types\";\nimport { SuggestionItem } from \"./internal/SuggestionItem\";\nimport styles from \"./TypeaheadTextField.module.scss\";\n\nexport type TypeaheadTextFieldOption<T = string> = {\n /** Text committed to the input when the option is selected. */\n label: string;\n /** Consumer value returned through `onSelectOption`. */\n value: T;\n};\n\ntype LoadOptionsResult<T> =\n | TypeaheadTextFieldOption<T>[]\n | Promise<TypeaheadTextFieldOption<T>[]>;\n\n// Preserve TextFieldProps union arms; plain Omit collapses their discriminants.\nexport type TypeaheadTextFieldProps<T = string> = DistributiveOmit<\n TextFieldProps,\n \"value\" | \"defaultValue\" | \"onChange\" | \"suffix\"\n> & {\n /** Current input text in controlled mode. */\n value?: string;\n /** Initial input text in uncontrolled mode. */\n defaultValue?: string;\n /** Runs when typing, selection, or clearing changes the input text. */\n onChange?: (value: string) => void;\n /** Resolves suggestions for the current input after the configured delay. */\n loadOptions: (search: string) => LoadOptionsResult<T>;\n /** Runs after the input adopts the selected option's label. */\n onSelectOption?: (option: TypeaheadTextFieldOption<T>) => void;\n /**\n * Delay in milliseconds before each `loadOptions` request.\n * @default 300\n */\n debounceMs?: number;\n /**\n * Status shown when no suggestions are available.\n * @default \"No suggestions found\"\n */\n noSuggestionsLabel?: string;\n /**\n * Status announced while loading with no options to display.\n * @default \"Loading...\"\n */\n loadingLabel?: string;\n /** Replaces row content; selection still commits the option's `label`. */\n renderOption?: (option: TypeaheadTextFieldOption<T>) => ReactNode;\n /**\n * Opens and reloads suggestions when a non-empty input receives focus.\n * @default true\n */\n openOnFocus?: boolean;\n /**\n * Allows focus or click to load suggestions for an empty input.\n * @default false\n */\n openOnEmptyFocus?: boolean;\n};\n\nconst SUFFIX_SLOT_WIDTH = 20;\n\n/**\n * Text field with a debounced suggestion list that accepts synchronous or\n * asynchronous option loading.\n */\nexport function TypeaheadTextField<T = string>({\n value: valueProp,\n defaultValue,\n onChange,\n loadOptions,\n onSelectOption,\n debounceMs = 300,\n noSuggestionsLabel = \"No suggestions found\",\n loadingLabel = \"Loading...\",\n renderOption,\n openOnFocus = true,\n openOnEmptyFocus = false,\n onFocus,\n onBlur,\n onKeyDown,\n onClick,\n disabled,\n readOnly,\n loading: loadingProp,\n ...textFieldProps\n}: TypeaheadTextFieldProps<T>) {\n const [value, setValue] = useOptionallyControlledState<string>({\n controlledValue: valueProp,\n defaultValue: defaultValue ?? \"\",\n onChange,\n });\n\n const [open, setOpen] = useState(false);\n const [options, setOptions] = useState<TypeaheadTextFieldOption<T>[]>([]);\n const [internalLoading, setInternalLoading] = useState(false);\n const loading = loadingProp ?? internalLoading;\n\n // DOM focus stays on the input; this index drives the active descendant.\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listRef = useRef<HTMLDivElement>(null);\n // Measure the visible field wrapper so the content-sized popover cannot\n // collapse below it.\n const wrapperRef = useRef<HTMLDivElement>(null);\n const listboxId = useId();\n const optionId = (index: number) => `${listboxId}-option-${index}`;\n const [wrapperWidth, setWrapperWidth] = useState(0);\n\n // Measure before paint so the first opened popover has the current width.\n useLayoutEffect(() => {\n const wrapper = wrapperRef.current;\n if (!wrapper) return;\n const measure = () => {\n const next = wrapper.offsetWidth;\n setWrapperWidth((prev) => (prev === next ? prev : next));\n };\n measure();\n const ro = new ResizeObserver(measure);\n ro.observe(wrapper);\n return () => ro.disconnect();\n }, []);\n\n // Only the newest request may update options or loading state.\n const requestIdRef = useRef(0);\n const loadOptionsRef = useRef(loadOptions);\n loadOptionsRef.current = loadOptions;\n\n const performLoad = useCallback(async (search: string) => {\n const reqId = ++requestIdRef.current;\n try {\n const result = await Promise.resolve(loadOptionsRef.current(search));\n if (requestIdRef.current === reqId) {\n setOptions(result);\n }\n } catch {\n if (requestIdRef.current === reqId) {\n setOptions([]);\n }\n } finally {\n if (requestIdRef.current === reqId) {\n setInternalLoading(false);\n }\n }\n }, []);\n\n const debouncedLoad = useDebouncedCallback(performLoad, debounceMs);\n\n const isInteractive = !disabled && !readOnly;\n\n const requestOpen = useCallback(\n (search: string) => {\n if (!isInteractive) return;\n setOpen(true);\n setInternalLoading(true);\n debouncedLoad(search);\n },\n [debouncedLoad, isInteractive],\n );\n\n useEffect(() => {\n setHighlightedIndex(-1);\n }, [options]);\n\n useEffect(() => {\n if (!open) setHighlightedIndex(-1);\n }, [open]);\n\n // Focus remains on the input, so keyboard navigation must scroll the row.\n useEffect(() => {\n if (!open || highlightedIndex < 0) return;\n const active = listRef.current?.querySelector<HTMLElement>(\n `#${CSS.escape(`${listboxId}-option-${highlightedIndex}`)}`,\n );\n active?.scrollIntoView({ block: \"nearest\" });\n }, [highlightedIndex, open, listboxId]);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const next = event.target.value;\n setValue(next);\n requestOpen(next);\n };\n\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n onFocus?.(event);\n if (!isInteractive || !openOnFocus) return;\n // Ignore focus returning from the menu so selection cannot reopen it.\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n if (relatedTarget && listRef.current?.contains(relatedTarget)) return;\n if (!value && !openOnEmptyFocus) return;\n requestOpen(value);\n };\n\n const handleClick = (event: MouseEvent<HTMLInputElement>) => {\n onClick?.(event);\n if (!isInteractive || open) return;\n if (!value && !openOnEmptyFocus) return;\n requestOpen(value);\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n // Keep the menu open while focus moves into its content.\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n if (relatedTarget && listRef.current?.contains(relatedTarget)) return;\n setOpen(false);\n };\n\n const handleSelect = (option: TypeaheadTextFieldOption<T>) => {\n setValue(option.label);\n setOpen(false);\n onSelectOption?.(option);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n\n if (event.key === \"Escape\" && open) {\n event.stopPropagation();\n event.preventDefault();\n setOpen(false);\n return;\n }\n\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n // Opening starts a load; there is no rendered option to highlight yet.\n if (!open) {\n requestOpen(value);\n return;\n }\n if (options.length === 0) return;\n setHighlightedIndex((i) => (i >= options.length - 1 ? 0 : i + 1));\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n if (!open) return;\n event.preventDefault();\n if (options.length === 0) return;\n setHighlightedIndex((i) => (i <= 0 ? options.length - 1 : i - 1));\n return;\n }\n\n if (event.key === \"Enter\" && open && highlightedIndex >= 0) {\n const option = options[highlightedIndex];\n if (option) {\n // Committing a suggestion must not submit an enclosing form.\n event.preventDefault();\n handleSelect(option);\n }\n }\n };\n\n // Reserve the suffix width so loading transitions do not reflow the field.\n const suffix = (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: SUFFIX_SLOT_WIDTH,\n height: SUFFIX_SLOT_WIDTH,\n }}\n data-anv=\"typeahead-suffix\"\n >\n {loading ? (\n <Spinner size=\"small\" inherit />\n ) : (\n <span\n aria-hidden\n style={{ display: \"inline-block\", width: 1, height: 1 }}\n />\n )}\n </span>\n );\n\n const renderList = () => {\n // Status rows stay outside the option set so they are not announced as\n // selectable results.\n if (loading && options.length === 0) {\n return (\n <div role=\"presentation\" aria-live=\"polite\" data-typeahead-status>\n {loadingLabel}\n </div>\n );\n }\n if (options.length === 0) {\n return (\n <div role=\"presentation\" data-typeahead-status>\n {noSuggestionsLabel}\n </div>\n );\n }\n return options.map((option, i) => (\n <SuggestionItem\n key={`${option.label}-${i}`}\n id={optionId(i)}\n label={renderOption ? renderOption(option) : option.label}\n selected={i === highlightedIndex}\n onClick={() => handleSelect(option)}\n // Keep input focus until the click commits this option.\n onMouseDown={(e) => e.preventDefault()}\n // Pointer and keyboard interaction share one active descendant.\n onMouseEnter={() => setHighlightedIndex(i)}\n />\n ));\n };\n\n return (\n <Popover\n open={open}\n onClose={() => setOpen(false)}\n onClickOutside={() => setOpen(false)}\n disableCaret\n disableTriggerFocus\n // Keep suggestions above or below the field instead of flipping sideways.\n disableFlipFallback\n noPadding\n placement=\"bottom-start\"\n >\n <Popover.Trigger>\n {(triggerProps) => {\n // The field owns open state, so discard Popover's trigger handlers.\n const {\n onClick: _ignoreTriggerClick,\n onKeyDown: _ignoreTriggerKey,\n onFocus: _ignoreTriggerFocus,\n onBlur: _ignoreTriggerBlur,\n onMouseEnter: _ignoreTriggerEnter,\n onMouseLeave: _ignoreTriggerLeave,\n ref,\n ...rest\n } = triggerProps;\n const popoverRef = ref as unknown as Ref<HTMLInputElement>;\n return (\n // Measure the wrapper, but anchor to the input to avoid its outer gap.\n <div ref={wrapperRef} style={{ width: \"100%\" }}>\n <TextField\n {...textFieldProps}\n {...rest}\n ref={mergeRefs([popoverRef, inputRef])}\n value={value}\n disabled={disabled}\n readOnly={readOnly}\n suffix={suffix}\n style={{ width: \"100%\", ...textFieldProps.style }}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-expanded={open}\n aria-controls={listboxId}\n aria-activedescendant={\n open && highlightedIndex >= 0\n ? optionId(highlightedIndex)\n : undefined\n }\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n />\n </div>\n );\n }}\n </Popover.Trigger>\n <Popover.Content>\n <div\n ref={listRef}\n role=\"listbox\"\n id={listboxId}\n className={styles[\"listbox\"]}\n style={\n {\n \"--typeahead-min-width\": `${wrapperWidth}px`,\n } as CSSProperties\n }\n data-typeahead-list\n >\n {renderList()}\n </div>\n </Popover.Content>\n </Popover>\n );\n}\n\nTypeaheadTextField.displayName = \"TypeaheadTextField\";\n"],"names":["styles"],"mappings":"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"}
1
+ {"version":3,"file":"TypeaheadTextField-Dkh84OCF.js","sources":["../src/beta/components/TypeaheadTextField/internal/SuggestionItem.tsx","../src/beta/components/TypeaheadTextField/TypeaheadTextField.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode, forwardRef } from \"react\";\nimport cx from \"classnames\";\nimport menuStyles from \"../../../../components/Menu/Menu.module.scss\";\nimport styles from \"./SuggestionItem.module.scss\";\n\nexport type SuggestionItemProps = HTMLAttributes<HTMLDivElement> & {\n label: ReactNode;\n selected?: boolean;\n disabled?: boolean;\n};\n\n/** Non-focusable option row; the input retains focus via active descendant. */\nexport const SuggestionItem = forwardRef<HTMLDivElement, SuggestionItemProps>(\n ({ label, selected, disabled, className, ...rest }, ref) => (\n <div\n {...rest}\n ref={ref}\n role=\"option\"\n aria-selected={selected ?? false}\n aria-disabled={disabled || undefined}\n data-anv=\"suggestion-option\"\n className={cx(menuStyles[\"item\"], styles[\"option\"], className)}\n >\n {label}\n </div>\n ),\n);\n\nSuggestionItem.displayName = \"SuggestionItem\";\n","import {\n type CSSProperties,\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n type Ref,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Popover } from \"../../../components/Popover\";\nimport { Spinner } from \"../../../components/Spinner\";\nimport { TextField, type TextFieldProps } from \"../../../components/TextField\";\nimport { mergeRefs } from \"../../../hooks/useMergeRefs/useMergeRefs\";\nimport { useDebouncedCallback } from \"../../../internal/hooks/useDebouncedCallback\";\nimport { useOptionallyControlledState } from \"../../../internal/hooks/useOptionallyControlledState\";\nimport type { DistributiveOmit } from \"../../../types\";\nimport { SuggestionItem } from \"./internal/SuggestionItem\";\nimport styles from \"./TypeaheadTextField.module.scss\";\n\nexport type TypeaheadTextFieldOption<T = string> = {\n /** Text committed to the input when the option is selected. */\n label: string;\n /** Consumer value returned through `onSelectOption`. */\n value: T;\n};\n\ntype LoadOptionsResult<T> =\n | TypeaheadTextFieldOption<T>[]\n | Promise<TypeaheadTextFieldOption<T>[]>;\n\n// Preserve TextFieldProps union arms; plain Omit collapses their discriminants.\nexport type TypeaheadTextFieldProps<T = string> = DistributiveOmit<\n TextFieldProps,\n \"value\" | \"defaultValue\" | \"onChange\" | \"suffix\"\n> & {\n /** Current input text in controlled mode. */\n value?: string;\n /** Initial input text in uncontrolled mode. */\n defaultValue?: string;\n /** Runs when typing, selection, or clearing changes the input text. */\n onChange?: (value: string) => void;\n /** Resolves suggestions for the current input after the configured delay. */\n loadOptions: (search: string) => LoadOptionsResult<T>;\n /** Runs after the input adopts the selected option's label. */\n onSelectOption?: (option: TypeaheadTextFieldOption<T>) => void;\n /**\n * Delay in milliseconds before each `loadOptions` request.\n * @default 300\n */\n debounceMs?: number;\n /**\n * Status shown when no suggestions are available.\n * @default \"No suggestions found\"\n */\n noSuggestionsLabel?: string;\n /**\n * Status announced while loading with no options to display.\n * @default \"Loading...\"\n */\n loadingLabel?: string;\n /** Replaces row content; selection still commits the option's `label`. */\n renderOption?: (option: TypeaheadTextFieldOption<T>) => ReactNode;\n /**\n * Opens and reloads suggestions when a non-empty input receives focus.\n * @default true\n */\n openOnFocus?: boolean;\n /**\n * Allows focus or click to load suggestions for an empty input.\n * @default false\n */\n openOnEmptyFocus?: boolean;\n};\n\nconst SUFFIX_SLOT_WIDTH = 20;\n\n/**\n * Text field with a debounced suggestion list that accepts synchronous or\n * asynchronous option loading.\n */\nexport function TypeaheadTextField<T = string>({\n value: valueProp,\n defaultValue,\n onChange,\n loadOptions,\n onSelectOption,\n debounceMs = 300,\n noSuggestionsLabel = \"No suggestions found\",\n loadingLabel = \"Loading...\",\n renderOption,\n openOnFocus = true,\n openOnEmptyFocus = false,\n onFocus,\n onBlur,\n onKeyDown,\n onClick,\n disabled,\n readOnly,\n loading: loadingProp,\n ...textFieldProps\n}: TypeaheadTextFieldProps<T>) {\n const [value, setValue] = useOptionallyControlledState<string>({\n controlledValue: valueProp,\n defaultValue: defaultValue ?? \"\",\n onChange,\n });\n\n const [open, setOpen] = useState(false);\n const [options, setOptions] = useState<TypeaheadTextFieldOption<T>[]>([]);\n const [internalLoading, setInternalLoading] = useState(false);\n const loading = loadingProp ?? internalLoading;\n\n // DOM focus stays on the input; this index drives the active descendant.\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listRef = useRef<HTMLDivElement>(null);\n // Measure the visible field wrapper so the content-sized popover cannot\n // collapse below it.\n const wrapperRef = useRef<HTMLDivElement>(null);\n const listboxId = useId();\n const optionId = (index: number) => `${listboxId}-option-${index}`;\n const [wrapperWidth, setWrapperWidth] = useState(0);\n\n // Measure before paint so the first opened popover has the current width.\n useLayoutEffect(() => {\n const wrapper = wrapperRef.current;\n if (!wrapper) return;\n const measure = () => {\n const next = wrapper.offsetWidth;\n setWrapperWidth((prev) => (prev === next ? prev : next));\n };\n measure();\n const ro = new ResizeObserver(measure);\n ro.observe(wrapper);\n return () => ro.disconnect();\n }, []);\n\n // Only the newest request may update options or loading state.\n const requestIdRef = useRef(0);\n const loadOptionsRef = useRef(loadOptions);\n loadOptionsRef.current = loadOptions;\n\n const performLoad = useCallback(async (search: string) => {\n const reqId = ++requestIdRef.current;\n try {\n const result = await Promise.resolve(loadOptionsRef.current(search));\n if (requestIdRef.current === reqId) {\n setOptions(result);\n }\n } catch {\n if (requestIdRef.current === reqId) {\n setOptions([]);\n }\n } finally {\n if (requestIdRef.current === reqId) {\n setInternalLoading(false);\n }\n }\n }, []);\n\n const debouncedLoad = useDebouncedCallback(performLoad, debounceMs);\n\n const isInteractive = !disabled && !readOnly;\n\n const requestOpen = useCallback(\n (search: string) => {\n if (!isInteractive) return;\n setOpen(true);\n setInternalLoading(true);\n debouncedLoad(search);\n },\n [debouncedLoad, isInteractive],\n );\n\n useEffect(() => {\n setHighlightedIndex(-1);\n }, [options]);\n\n useEffect(() => {\n if (!open) setHighlightedIndex(-1);\n }, [open]);\n\n // Focus remains on the input, so keyboard navigation must scroll the row.\n useEffect(() => {\n if (!open || highlightedIndex < 0) return;\n const active = listRef.current?.querySelector<HTMLElement>(\n `#${CSS.escape(`${listboxId}-option-${highlightedIndex}`)}`,\n );\n active?.scrollIntoView({ block: \"nearest\" });\n }, [highlightedIndex, open, listboxId]);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const next = event.target.value;\n setValue(next);\n requestOpen(next);\n };\n\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n onFocus?.(event);\n if (!isInteractive || !openOnFocus) return;\n // Ignore focus returning from the menu so selection cannot reopen it.\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n if (relatedTarget && listRef.current?.contains(relatedTarget)) return;\n if (!value && !openOnEmptyFocus) return;\n requestOpen(value);\n };\n\n const handleClick = (event: MouseEvent<HTMLInputElement>) => {\n onClick?.(event);\n if (!isInteractive || open) return;\n if (!value && !openOnEmptyFocus) return;\n requestOpen(value);\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n // Keep the menu open while focus moves into its content.\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n if (relatedTarget && listRef.current?.contains(relatedTarget)) return;\n setOpen(false);\n };\n\n const handleSelect = (option: TypeaheadTextFieldOption<T>) => {\n setValue(option.label);\n setOpen(false);\n onSelectOption?.(option);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n\n if (event.key === \"Escape\" && open) {\n event.stopPropagation();\n event.preventDefault();\n setOpen(false);\n return;\n }\n\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n // Opening starts a load; there is no rendered option to highlight yet.\n if (!open) {\n requestOpen(value);\n return;\n }\n if (options.length === 0) return;\n setHighlightedIndex((i) => (i >= options.length - 1 ? 0 : i + 1));\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n if (!open) return;\n event.preventDefault();\n if (options.length === 0) return;\n setHighlightedIndex((i) => (i <= 0 ? options.length - 1 : i - 1));\n return;\n }\n\n if (event.key === \"Enter\" && open && highlightedIndex >= 0) {\n const option = options[highlightedIndex];\n if (option) {\n // Committing a suggestion must not submit an enclosing form.\n event.preventDefault();\n handleSelect(option);\n }\n }\n };\n\n // Reserve the suffix width so loading transitions do not reflow the field.\n const suffix = (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: SUFFIX_SLOT_WIDTH,\n height: SUFFIX_SLOT_WIDTH,\n }}\n data-anv=\"typeahead-suffix\"\n >\n {loading ? (\n <Spinner size=\"small\" inherit />\n ) : (\n <span\n aria-hidden\n style={{ display: \"inline-block\", width: 1, height: 1 }}\n />\n )}\n </span>\n );\n\n const renderList = () => {\n // Status rows stay outside the option set so they are not announced as\n // selectable results.\n if (loading && options.length === 0) {\n return (\n <div role=\"presentation\" aria-live=\"polite\" data-typeahead-status>\n {loadingLabel}\n </div>\n );\n }\n if (options.length === 0) {\n return (\n <div role=\"presentation\" data-typeahead-status>\n {noSuggestionsLabel}\n </div>\n );\n }\n return options.map((option, i) => (\n <SuggestionItem\n key={`${option.label}-${i}`}\n id={optionId(i)}\n label={renderOption ? renderOption(option) : option.label}\n selected={i === highlightedIndex}\n onClick={() => handleSelect(option)}\n // Keep input focus until the click commits this option.\n onMouseDown={(e) => e.preventDefault()}\n // Pointer and keyboard interaction share one active descendant.\n onMouseEnter={() => setHighlightedIndex(i)}\n />\n ));\n };\n\n return (\n <Popover\n open={open}\n onClose={() => setOpen(false)}\n onClickOutside={() => setOpen(false)}\n disableCaret\n disableTriggerFocus\n // Keep suggestions above or below the field instead of flipping sideways.\n disableFlipFallback\n noPadding\n placement=\"bottom-start\"\n >\n <Popover.Trigger>\n {(triggerProps) => {\n // The field owns open state, so discard Popover's trigger handlers.\n const {\n onClick: _ignoreTriggerClick,\n onKeyDown: _ignoreTriggerKey,\n onFocus: _ignoreTriggerFocus,\n onBlur: _ignoreTriggerBlur,\n onMouseEnter: _ignoreTriggerEnter,\n onMouseLeave: _ignoreTriggerLeave,\n ref,\n ...rest\n } = triggerProps;\n const popoverRef = ref as unknown as Ref<HTMLInputElement>;\n return (\n // Measure the wrapper, but anchor to the input to avoid its outer gap.\n <div ref={wrapperRef} style={{ width: \"100%\" }}>\n <TextField\n {...textFieldProps}\n {...rest}\n ref={mergeRefs([popoverRef, inputRef])}\n value={value}\n disabled={disabled}\n readOnly={readOnly}\n suffix={suffix}\n style={{ width: \"100%\", ...textFieldProps.style }}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-expanded={open}\n aria-controls={listboxId}\n aria-activedescendant={\n open && highlightedIndex >= 0\n ? optionId(highlightedIndex)\n : undefined\n }\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n />\n </div>\n );\n }}\n </Popover.Trigger>\n <Popover.Content>\n <div\n ref={listRef}\n role=\"listbox\"\n id={listboxId}\n className={styles[\"listbox\"]}\n style={\n {\n \"--typeahead-min-width\": `${wrapperWidth}px`,\n } as CSSProperties\n }\n data-typeahead-list\n >\n {renderList()}\n </div>\n </Popover.Content>\n </Popover>\n );\n}\n\nTypeaheadTextField.displayName = \"TypeaheadTextField\";\n"],"names":["styles"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { T as TypeaheadTextField } from './TypeaheadTextField-DgazozK7.js';
1
+ export { T as TypeaheadTextField } from './TypeaheadTextField-Dkh84OCF.js';
2
2
  //# sourceMappingURL=TypeaheadTextField.js.map
@@ -6,7 +6,7 @@ import { F as Flex } from './Flex-CRF7gj0_.js';
6
6
  import { S as SvgCheck } from './check-Cf67OWrZ.js';
7
7
  import { c as cx } from './index-De1g9FRV.js';
8
8
  import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DjqeAJZ9.js';
9
- import { P as Popover, u as useMergeRefs } from './AiMark-BfmK30vL.js';
9
+ import { P as Popover, u as useMergeRefs } from './AiMark-N8UfGfcV.js';
10
10
  import { g as maskitoUpdateElement, m as maskitoDateOptionsGenerator, a as maskitoWithPlaceholder, h as maskitoTransform, u as useMaskito } from './index.esm-C2ZhC_8d.js';
11
11
  import { m as makeZeroShortcutPreprocessor } from './makeZeroShortcutPreprocessor-D5KWcgUA.js';
12
12
  import { t as textFieldStyles } from './TextField.module-DklyLNKz.js';
@@ -963,4 +963,4 @@ const YearlessDateInputWithPicker = forwardRef((props, ref) => {
963
963
  YearlessDateInputWithPicker.displayName = "YearlessDateInputWithPicker";
964
964
 
965
965
  export { PARTS as P, YearlessDateInputWithPicker as Y };
966
- //# sourceMappingURL=YearlessDateInputWithPicker-Bc8a33D5.js.map
966
+ //# sourceMappingURL=YearlessDateInputWithPicker-7y8xhacx.js.map