@persona/design-system 0.10.10 → 0.10.11

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 (447) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/{Action-CHWYwpYR.d.mts → Action-sLO73eKq.d.mts} +2 -2
  3. package/dist/Action.d.mts +1 -1
  4. package/dist/AdvancedFilterRuleRow.d.mts +2 -2
  5. package/dist/AdvancedFilterRulesPopover.d.mts +2 -2
  6. package/dist/ArrayValueControl.d.mts +1 -1
  7. package/dist/Attribute.d.mts +2 -2
  8. package/dist/{Badge-BCdsVKuj.mjs → Badge-DZq6ByIU.mjs} +2 -2
  9. package/dist/{Badge-BCdsVKuj.mjs.map → Badge-DZq6ByIU.mjs.map} +1 -1
  10. package/dist/BooleanValueControl.d.mts +1 -1
  11. package/dist/{Breadcrumbs-CMf3Uvow.mjs → Breadcrumbs-DpsNZWF9.mjs} +9 -9
  12. package/dist/Breadcrumbs-DpsNZWF9.mjs.map +1 -0
  13. package/dist/{Button-DjD8QxcY.d.mts → Button-C4a4BTjL.d.mts} +2 -2
  14. package/dist/Button.d.mts +1 -1
  15. package/dist/CalendarBase.d.mts +1 -1
  16. package/dist/{Card-DiUHtYg_.d.mts → Card-CPV4_mHk.d.mts} +4 -4
  17. package/dist/Card.d.mts +1 -1
  18. package/dist/Card2.d.mts +1 -1
  19. package/dist/CardGrouping.d.mts +1 -1
  20. package/dist/{CardV2-CrV6eEQb.mjs → CardV2-DCoDfEvr.mjs} +16 -13
  21. package/dist/CardV2-DCoDfEvr.mjs.map +1 -0
  22. package/dist/ChartFrame.d.mts +61 -0
  23. package/dist/ChartLegend.d.mts +60 -0
  24. package/dist/ChartPopover.d.mts +155 -0
  25. package/dist/{Checkbox-Dr4LMKHV.mjs → Checkbox-C3z7UUSC.mjs} +8 -8
  26. package/dist/Checkbox-C3z7UUSC.mjs.map +1 -0
  27. package/dist/{CheckboxGroupField-Bpu2j6G2.d.mts → CheckboxGroupField-BT87OVOF.d.mts} +2 -2
  28. package/dist/CheckboxGroupField.d.mts +1 -1
  29. package/dist/ChoicesValueControl.d.mts +1 -1
  30. package/dist/{Combobox-Gb_j1dg6.mjs → Combobox-BkK_tosd.mjs} +300 -116
  31. package/dist/Combobox-BkK_tosd.mjs.map +1 -0
  32. package/dist/Combobox-aOJDTjzC.d.mts +12 -0
  33. package/dist/Combobox.d.mts +3 -3
  34. package/dist/{ComboboxBase-BPXqJHaQ.d.mts → ComboboxBase-Brgv5nxk.d.mts} +65 -25
  35. package/dist/ComboboxBase.d.mts +2 -2
  36. package/dist/{ComboboxMultiSelect-BwkkSymj.d.mts → ComboboxMultiSelect-DJyAv0Eg.d.mts} +10 -6
  37. package/dist/ComboboxMultiSelect.d.mts +2 -2
  38. package/dist/{ComboboxSingleSelect-CdNNJNkp.d.mts → ComboboxSingleSelect-CP8-HLKl.d.mts} +8 -6
  39. package/dist/ComboboxSingleSelect.d.mts +2 -2
  40. package/dist/{CompactBar-BLZZWtIE.d.mts → CompactBar-B0LhjrYV.d.mts} +2 -2
  41. package/dist/CompactBar.d.mts +1 -1
  42. package/dist/{ConfigFormGroup-BCTWCws5.mjs → ConfigFormGroup-DAUqAhJW.mjs} +2 -2
  43. package/dist/{ConfigFormGroup-BCTWCws5.mjs.map → ConfigFormGroup-DAUqAhJW.mjs.map} +1 -1
  44. package/dist/{DataTable-BE9inUi-.d.mts → DataTable-CSl5Jn3E.d.mts} +18 -8
  45. package/dist/{DataTable-CIZJ1vO8.mjs → DataTable-DiwzhNMt.mjs} +41 -28
  46. package/dist/DataTable-DiwzhNMt.mjs.map +1 -0
  47. package/dist/DataTable.d.mts +1 -1
  48. package/dist/{DatePicker-C9redLBr.mjs → DatePicker-BK7ioKBm.mjs} +410 -410
  49. package/dist/DatePicker-BK7ioKBm.mjs.map +1 -0
  50. package/dist/DateRangeValueControl.d.mts +1 -1
  51. package/dist/DateValueControl.d.mts +1 -1
  52. package/dist/{DropdownButton-DpLG-cIj.mjs → DropdownButton-Dp-MZ5tA.mjs} +3 -3
  53. package/dist/{DropdownButton-DpLG-cIj.mjs.map → DropdownButton-Dp-MZ5tA.mjs.map} +1 -1
  54. package/dist/DropdownButton.d.mts +2 -2
  55. package/dist/{DropdownMenu-B6D4stkF.d.mts → DropdownMenu-BnHPeHOm.d.mts} +3 -3
  56. package/dist/{DropdownMenu-c8XK2Lr4.mjs → DropdownMenu-jJSHQaih.mjs} +4 -2
  57. package/dist/DropdownMenu-jJSHQaih.mjs.map +1 -0
  58. package/dist/DropdownMenu.d.mts +1 -1
  59. package/dist/{FieldRegistry-C2NVPhMO.d.mts → FieldRegistry-CJwGpUVK.d.mts} +2 -2
  60. package/dist/FieldRegistry.d.mts +1 -1
  61. package/dist/{FilterBar-BE_gBM0H.d.mts → FilterBar-DDyk14sx.d.mts} +4 -4
  62. package/dist/FilterBar.d.mts +1 -1
  63. package/dist/FilterPickerMenu.d.mts +2 -2
  64. package/dist/FilterPill.d.mts +1 -1
  65. package/dist/FilterPopover.d.mts +1 -1
  66. package/dist/FloatValueControl.d.mts +3 -2
  67. package/dist/{FloatingToolbar-DLRaE0o7.mjs → FloatingToolbar-rfKurDs8.mjs} +36 -39
  68. package/dist/FloatingToolbar-rfKurDs8.mjs.map +1 -0
  69. package/dist/{FormControl-BztNXLn6.mjs → FormControl--pbTH3bY.mjs} +3 -3
  70. package/dist/{FormControl-BztNXLn6.mjs.map → FormControl--pbTH3bY.mjs.map} +1 -1
  71. package/dist/{FormControl-BQe3GRhi.d.mts → FormControl-DPYbLcBK.d.mts} +2 -2
  72. package/dist/FormControl.d.mts +1 -1
  73. package/dist/FormControlLabel.d.mts +2 -2
  74. package/dist/{FormField-BW5uMzId.d.mts → FormField-CYNGm2bJ.d.mts} +2 -2
  75. package/dist/{FormField-Cf1VMvoa.mjs → FormField-DMxjftFw.mjs} +14 -14
  76. package/dist/{FormField-Cf1VMvoa.mjs.map → FormField-DMxjftFw.mjs.map} +1 -1
  77. package/dist/FormField.d.mts +1 -1
  78. package/dist/{Grid-CYpOqTUu.mjs → Grid-DVC0SSEZ.mjs} +2 -2
  79. package/dist/{Grid-CYpOqTUu.mjs.map → Grid-DVC0SSEZ.mjs.map} +1 -1
  80. package/dist/{Header-CV0Lcf0C.d.mts → Header-DaaUprCL.d.mts} +2 -2
  81. package/dist/Header.d.mts +1 -1
  82. package/dist/{HelperTooltip-BNM3pTM-.d.mts → HelperTooltip-C5BDdJSI.d.mts} +2 -2
  83. package/dist/HelperTooltip.d.mts +1 -1
  84. package/dist/HighlightedText.d.mts +1 -1
  85. package/dist/{HoverCopyableField-XHC_n9tp.mjs → HoverCopyableField-B2-xlwUt.mjs} +12 -7
  86. package/dist/HoverCopyableField-B2-xlwUt.mjs.map +1 -0
  87. package/dist/{IconButton-C_ReZm8v.d.mts → IconButton-7k-wjvH3.d.mts} +2 -2
  88. package/dist/{IconButton-DxHB2g80.mjs → IconButton-kSjnfhWt.mjs} +11 -10
  89. package/dist/IconButton-kSjnfhWt.mjs.map +1 -0
  90. package/dist/IconButton.d.mts +1 -1
  91. package/dist/ImageTile.d.mts +1 -1
  92. package/dist/IndexTableLayout.d.mts +4 -4
  93. package/dist/InlineCombobox.d.mts +1 -1
  94. package/dist/InlineInput.d.mts +1 -1
  95. package/dist/{Input-DH-5dKor.d.mts → Input-CwvrBsiS.d.mts} +3 -3
  96. package/dist/{Input-RHXujO9u.mjs → Input-TRmTBEav.mjs} +5 -5
  97. package/dist/{Input-RHXujO9u.mjs.map → Input-TRmTBEav.mjs.map} +1 -1
  98. package/dist/Input.d.mts +1 -1
  99. package/dist/IntegerValueControl.d.mts +3 -2
  100. package/dist/{Link-D_kCyLYX.mjs → Link-XvzUN8sY.mjs} +6 -6
  101. package/dist/Link-XvzUN8sY.mjs.map +1 -0
  102. package/dist/{ListBox-DpFcM-dM.d.mts → ListBox-BePQBYR7.d.mts} +3 -3
  103. package/dist/{ListBox-BZp6exb8.mjs → ListBox-DahM1PgU.mjs} +12 -12
  104. package/dist/{ListBox-BZp6exb8.mjs.map → ListBox-DahM1PgU.mjs.map} +1 -1
  105. package/dist/ListBox.d.mts +1 -1
  106. package/dist/{ListBoxField-DL6Zk8TU.d.mts → ListBoxField-lj7JN1BX.d.mts} +4 -4
  107. package/dist/ListBoxField.d.mts +1 -1
  108. package/dist/{LoadingShimmer-oPIv2ESr.mjs → LoadingShimmer-CpfKTSUs.mjs} +4 -3
  109. package/dist/LoadingShimmer-CpfKTSUs.mjs.map +1 -0
  110. package/dist/LoadingShimmer.d.mts +1 -1
  111. package/dist/{LogicRow-BakOUtzx.d.mts → LogicRow-Do7t7Suf.d.mts} +2 -2
  112. package/dist/LogicRow.d.mts +1 -1
  113. package/dist/MaskedInput.d.mts +2 -2
  114. package/dist/MatchHighlight.d.mts +1 -1
  115. package/dist/{Menu-BVn1jh46.mjs → Menu-BvMzSH2I.mjs} +5 -5
  116. package/dist/{Menu-BVn1jh46.mjs.map → Menu-BvMzSH2I.mjs.map} +1 -1
  117. package/dist/{Menu-D6OrKCTC.d.mts → Menu-Ca5ftvo6.d.mts} +4 -4
  118. package/dist/Menu.d.mts +1 -1
  119. package/dist/{MiddleTruncatedText-DicQsLDG.mjs → MiddleTruncatedText--jzGTD00.mjs} +2 -2
  120. package/dist/{MiddleTruncatedText-DicQsLDG.mjs.map → MiddleTruncatedText--jzGTD00.mjs.map} +1 -1
  121. package/dist/{Modal-De5_bPJ_.mjs → Modal-B6X5AgWj.mjs} +54 -25
  122. package/dist/{Modal-De5_bPJ_.mjs.map → Modal-B6X5AgWj.mjs.map} +1 -1
  123. package/dist/{Modal-CujB7DuB.d.mts → Modal-BPfFyzkw.d.mts} +3 -3
  124. package/dist/Modal.d.mts +1 -1
  125. package/dist/{PageHeader-UPiqJpIF.d.mts → PageHeader-BeBmYmUX.d.mts} +2 -2
  126. package/dist/{PageHeader-7_Hf6rHl.mjs → PageHeader-bhQTjuZF.mjs} +2 -2
  127. package/dist/{PageHeader-7_Hf6rHl.mjs.map → PageHeader-bhQTjuZF.mjs.map} +1 -1
  128. package/dist/PageHeader.d.mts +1 -1
  129. package/dist/{PageLayout-BdVM37bV.d.mts → PageLayout-BXM_pyrU.d.mts} +2 -2
  130. package/dist/{PageLayout-DjtGrvJa.mjs → PageLayout-DgEGcZgB.mjs} +3 -3
  131. package/dist/{PageLayout-DjtGrvJa.mjs.map → PageLayout-DgEGcZgB.mjs.map} +1 -1
  132. package/dist/PageLayout.d.mts +1 -1
  133. package/dist/{PageSelector-B5CcAzss.d.mts → PageSelector-C14ABZVL.d.mts} +2 -2
  134. package/dist/PageSelector.d.mts +1 -1
  135. package/dist/{Pagination-DMH2IaV0.mjs → Pagination-DE8wT55m.mjs} +5 -5
  136. package/dist/{Pagination-DMH2IaV0.mjs.map → Pagination-DE8wT55m.mjs.map} +1 -1
  137. package/dist/{Pii-24D_nSRQ.mjs → Pii-C42ZY88Y.mjs} +2 -2
  138. package/dist/{Pii-24D_nSRQ.mjs.map → Pii-C42ZY88Y.mjs.map} +1 -1
  139. package/dist/{PillShell-B7Bm-dsE.d.mts → PillShell-Bkyu5FXB.d.mts} +2 -2
  140. package/dist/PillShell.d.mts +1 -1
  141. package/dist/{Popover-DordjYNM.mjs → Popover-DuFjaSoq.mjs} +4 -2
  142. package/dist/Popover-DuFjaSoq.mjs.map +1 -0
  143. package/dist/Popover.d.mts +1 -1
  144. package/dist/ProgressBar.d.mts +1 -1
  145. package/dist/{ProgressIndicator-zt3ndT9U.mjs → ProgressIndicator-hy1P-RG1.mjs} +3 -3
  146. package/dist/{ProgressIndicator-zt3ndT9U.mjs.map → ProgressIndicator-hy1P-RG1.mjs.map} +1 -1
  147. package/dist/{Radio-BlEtetrr.mjs → Radio-B4TBAho6.mjs} +5 -5
  148. package/dist/Radio-B4TBAho6.mjs.map +1 -0
  149. package/dist/{RadioGroup-CMrXmmn4.mjs → RadioGroup-Bf24GKOb.mjs} +3 -3
  150. package/dist/{RadioGroup-CMrXmmn4.mjs.map → RadioGroup-Bf24GKOb.mjs.map} +1 -1
  151. package/dist/RichTextEditor.d.mts +1 -1
  152. package/dist/RuleEditorFields.d.mts +2 -2
  153. package/dist/RulesPill.d.mts +1 -1
  154. package/dist/SectionHeading.d.mts +1 -1
  155. package/dist/{SegmentedControl-D_DA-MU1.mjs → SegmentedControl-BpR7sUWO.mjs} +6 -3
  156. package/dist/SegmentedControl-BpR7sUWO.mjs.map +1 -0
  157. package/dist/{Select-CR9TjFfo.d.mts → Select-DYdn73Nh.d.mts} +2 -2
  158. package/dist/{Select-DOlw_LPR.mjs → Select-RdTT2KoH.mjs} +10 -8
  159. package/dist/Select-RdTT2KoH.mjs.map +1 -0
  160. package/dist/Select.d.mts +1 -1
  161. package/dist/SmartTextInput.d.mts +1 -1
  162. package/dist/SmartTextInputField.d.mts +2 -2
  163. package/dist/SmartTextInputFunctionDialog.d.mts +1 -1
  164. package/dist/SmartTextInputPopover.d.mts +1 -1
  165. package/dist/{Spinner-CXb-KUs1.mjs → Spinner-vcApnJzv.mjs} +2 -2
  166. package/dist/{Spinner-CXb-KUs1.mjs.map → Spinner-vcApnJzv.mjs.map} +1 -1
  167. package/dist/{Stack-CODxfzhl.d.mts → Stack-B6MrjJeW.d.mts} +2 -2
  168. package/dist/Stack.d.mts +1 -1
  169. package/dist/{StatusIndicator-CzRaEFSz.mjs → StatusIndicator-lwt35J6B.mjs} +3 -3
  170. package/dist/{StatusIndicator-CzRaEFSz.mjs.map → StatusIndicator-lwt35J6B.mjs.map} +1 -1
  171. package/dist/{Sticker-CLvRB8V5.d.mts → Sticker-C7Wv3Obx.d.mts} +4 -4
  172. package/dist/{Sticker-C1_6I08u.mjs → Sticker-jfOM4Yi6.mjs} +5 -5
  173. package/dist/{Sticker-C1_6I08u.mjs.map → Sticker-jfOM4Yi6.mjs.map} +1 -1
  174. package/dist/Sticker.d.mts +1 -1
  175. package/dist/StringValueControl.d.mts +2 -1
  176. package/dist/Tab.d.mts +2 -2
  177. package/dist/{TabBar-BCFO38E0.mjs → TabBar-DwHgbIQ6.mjs} +8 -8
  178. package/dist/TabBar-DwHgbIQ6.mjs.map +1 -0
  179. package/dist/{Table-DPi4Dt5H.mjs → Table-SMJAWqoe.mjs} +21 -13
  180. package/dist/Table-SMJAWqoe.mjs.map +1 -0
  181. package/dist/{TableBox-DNQsgQ8x.mjs → TableBox-DS8mpN3-.mjs} +21 -17
  182. package/dist/TableBox-DS8mpN3-.mjs.map +1 -0
  183. package/dist/TableBox.d.mts +1 -1
  184. package/dist/{TableBoxCell-CsRt_5gP.d.mts → TableBoxCell-Bo5xYEmR.d.mts} +6 -6
  185. package/dist/TableBoxCell.d.mts +1 -1
  186. package/dist/{TableBoxField-Db0Vjo6Z.d.mts → TableBoxField-CdgjSGLK.d.mts} +5 -5
  187. package/dist/TableBoxField.d.mts +1 -1
  188. package/dist/{TableBoxRow-exMlZyc4.d.mts → TableBoxRow-DuWS2iRC.d.mts} +2 -2
  189. package/dist/TableBoxRow.d.mts +1 -1
  190. package/dist/{TableBoxRowActions-UO9YN34k.d.mts → TableBoxRowActions-zW74DkXt.d.mts} +2 -2
  191. package/dist/TableBoxRowActions.d.mts +1 -1
  192. package/dist/{TableCell-CQsF7t4e.d.mts → TableCell-uv_jqT5e.d.mts} +2 -2
  193. package/dist/TableCell.d.mts +1 -1
  194. package/dist/{TableControls-Clo_0Mty.d.mts → TableControls-9vz-HfDu.d.mts} +4 -4
  195. package/dist/{TableControls-BrP_BqnF.mjs → TableControls-CX7BvgD2.mjs} +107 -43
  196. package/dist/TableControls-CX7BvgD2.mjs.map +1 -0
  197. package/dist/TableControls.d.mts +1 -1
  198. package/dist/{TableControlsContext-BNd6z9mD.d.mts → TableControlsContext-D0Hn3rwL.d.mts} +2 -2
  199. package/dist/TableControlsContext.d.mts +1 -1
  200. package/dist/{TableViewConfigurationDropdown-Cp7ausV_.d.mts → TableViewConfigurationDropdown-CZcLH8uR.d.mts} +2 -2
  201. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  202. package/dist/{TechnicalSticker-Cq5jzYKQ.mjs → TechnicalSticker-DrN45Vut.mjs} +9 -7
  203. package/dist/TechnicalSticker-DrN45Vut.mjs.map +1 -0
  204. package/dist/{Text-CvaqognH.d.mts → Text-CdHeSHCc.d.mts} +2 -2
  205. package/dist/Text.d.mts +1 -1
  206. package/dist/{TextArea-Dro-HH8O.mjs → TextArea-CQ1YNi2b.mjs} +4 -5
  207. package/dist/TextArea-CQ1YNi2b.mjs.map +1 -0
  208. package/dist/{TextUnderlineTooltip-Bd5e8KH3.d.mts → TextUnderlineTooltip-By1VVsSs.d.mts} +3 -3
  209. package/dist/TextUnderlineTooltip.d.mts +1 -1
  210. package/dist/Tile.d.mts +1 -1
  211. package/dist/{Toggle-D9MzTIZs.mjs → Toggle-DjmkjJlw.mjs} +13 -9
  212. package/dist/Toggle-DjmkjJlw.mjs.map +1 -0
  213. package/dist/{Tooltip-YViXzMdm.mjs → Tooltip-C2VB8I6y.mjs} +18 -5
  214. package/dist/Tooltip-C2VB8I6y.mjs.map +1 -0
  215. package/dist/{Tooltip-Ddy2Jq0K.d.mts → Tooltip-OxVvOfn8.d.mts} +3 -3
  216. package/dist/Tooltip.d.mts +1 -1
  217. package/dist/{TruncatedText-sr9Fhm3N.d.mts → TruncatedText-Dqj94BFK.d.mts} +2 -2
  218. package/dist/WizardModal.d.mts +1 -1
  219. package/dist/chartColors.d.mts +92 -0
  220. package/dist/chartFrameLayout.d.mts +46 -0
  221. package/dist/{clientFilterUtils-CGHYF5NE.d.mts → clientFilterUtils-CMLuN8kK.d.mts} +2 -2
  222. package/dist/clientFilterUtils.d.mts +1 -1
  223. package/dist/components/Accordion/index.mjs +25 -16
  224. package/dist/components/Accordion/index.mjs.map +1 -1
  225. package/dist/components/Attribute/index.mjs +8 -6
  226. package/dist/components/Attribute/index.mjs.map +1 -1
  227. package/dist/components/Badge/index.mjs +1 -1
  228. package/dist/components/Banner/index.mjs +3 -3
  229. package/dist/components/BottomPanel/index.mjs +10 -8
  230. package/dist/components/BottomPanel/index.mjs.map +1 -1
  231. package/dist/components/Breadcrumbs/index.mjs +1 -1
  232. package/dist/components/Button/index.d.mts +2 -2
  233. package/dist/components/Button/index.mjs +1 -1
  234. package/dist/components/ButtonGroup/index.mjs +2 -2
  235. package/dist/components/Card/index.d.mts +2 -2
  236. package/dist/components/CardV2/index.d.mts +1 -1
  237. package/dist/components/CardV2/index.mjs +1 -1
  238. package/dist/components/Chart/index.d.mts +9 -0
  239. package/dist/components/Chart/index.mjs +680 -0
  240. package/dist/components/Chart/index.mjs.map +1 -0
  241. package/dist/components/Checkbox/index.mjs +1 -1
  242. package/dist/components/CodeHighlight/index.mjs +4 -4
  243. package/dist/components/Combobox/index.d.mts +5 -3
  244. package/dist/components/Combobox/index.mjs +1 -1
  245. package/dist/components/ConfigFormGroup/index.mjs +1 -1
  246. package/dist/components/DataTable/TableControls/index.d.mts +20 -20
  247. package/dist/components/DataTable/TableControls/index.mjs +2 -2
  248. package/dist/components/DataTable/index.d.mts +5 -5
  249. package/dist/components/DataTable/index.mjs +1 -1
  250. package/dist/components/DataTable/types.d.mts +1 -1
  251. package/dist/components/DatePicker/index.mjs +1 -1
  252. package/dist/components/DropdownButton/index.mjs +1 -1
  253. package/dist/components/DropdownMenu/index.d.mts +1 -1
  254. package/dist/components/DropdownMenu/index.mjs +1 -1
  255. package/dist/components/FloatingPanel/index.mjs +20 -18
  256. package/dist/components/FloatingPanel/index.mjs.map +1 -1
  257. package/dist/components/FloatingToolbar/index.mjs +1 -1
  258. package/dist/components/FormControl/index.d.mts +1 -1
  259. package/dist/components/FormControl/index.mjs +1 -1
  260. package/dist/components/FormField/index.d.mts +5 -5
  261. package/dist/components/FormField/index.mjs +1 -1
  262. package/dist/components/Grid/index.mjs +1 -1
  263. package/dist/components/HoverCopyableField/index.mjs +1 -1
  264. package/dist/components/ImageTile/index.mjs +10 -10
  265. package/dist/components/ImageTile/index.mjs.map +1 -1
  266. package/dist/components/Input/index.d.mts +1 -1
  267. package/dist/components/Input/index.mjs +1 -1
  268. package/dist/components/Link/index.mjs +1 -1
  269. package/dist/components/ListBox/index.d.mts +3 -3
  270. package/dist/components/ListBox/index.mjs +1 -1
  271. package/dist/components/LoadingShimmer/index.mjs +1 -1
  272. package/dist/components/MaskedInput/index.mjs +1 -1
  273. package/dist/components/Menu/index.d.mts +1 -1
  274. package/dist/components/Menu/index.mjs +1 -1
  275. package/dist/components/Modal/index.d.mts +1 -1
  276. package/dist/components/Modal/index.mjs +1 -1
  277. package/dist/components/PageHeader/index.d.mts +1 -1
  278. package/dist/components/PageHeader/index.mjs +1 -1
  279. package/dist/components/Pagination/index.d.mts +1 -1
  280. package/dist/components/Pagination/index.mjs +1 -1
  281. package/dist/components/Pii/index.mjs +1 -1
  282. package/dist/components/Popover/index.mjs +1 -1
  283. package/dist/components/ProgressBar/index.mjs +20 -3
  284. package/dist/components/ProgressBar/index.mjs.map +1 -1
  285. package/dist/components/ProgressIndicator/index.mjs +1 -1
  286. package/dist/components/Radio/index.mjs +1 -1
  287. package/dist/components/RadioGroup/index.mjs +1 -1
  288. package/dist/components/RichTextEditor/index.mjs +9 -9
  289. package/dist/components/RightPanel/index.mjs +30 -15
  290. package/dist/components/RightPanel/index.mjs.map +1 -1
  291. package/dist/components/SegmentedControl/index.mjs +1 -1
  292. package/dist/components/Select/index.d.mts +1 -1
  293. package/dist/components/Select/index.mjs +1 -1
  294. package/dist/components/SelectionCard/index.mjs +5 -5
  295. package/dist/components/Slider/index.mjs +5 -4
  296. package/dist/components/Slider/index.mjs.map +1 -1
  297. package/dist/components/SmartTextInput/index.mjs +11 -18
  298. package/dist/components/SmartTextInput/index.mjs.map +1 -1
  299. package/dist/components/Spinner/index.mjs +1 -1
  300. package/dist/components/Stack/index.d.mts +1 -1
  301. package/dist/components/StatusIndicator/index.mjs +1 -1
  302. package/dist/components/Sticker/index.d.mts +1 -1
  303. package/dist/components/Sticker/index.mjs +1 -1
  304. package/dist/components/SwatchPicker/index.mjs +2 -1
  305. package/dist/components/SwatchPicker/index.mjs.map +1 -1
  306. package/dist/components/TabBar/index.mjs +1 -1
  307. package/dist/components/Table/index.d.mts +1 -1
  308. package/dist/components/Table/index.mjs +1 -1
  309. package/dist/components/TableBox/index.d.mts +1 -1
  310. package/dist/components/TableBox/index.mjs +1 -1
  311. package/dist/components/TechnicalSticker/index.mjs +1 -1
  312. package/dist/components/Text/index.d.mts +1 -1
  313. package/dist/components/TextArea/index.mjs +1 -1
  314. package/dist/components/Tile/index.mjs +2 -2
  315. package/dist/components/Toast/index.mjs +19 -13
  316. package/dist/components/Toast/index.mjs.map +1 -1
  317. package/dist/components/Toggle/index.mjs +1 -1
  318. package/dist/components/Tooltip/index.d.mts +3 -3
  319. package/dist/components/Tooltip/index.mjs +1 -1
  320. package/dist/components/VersionHistory/index.mjs +8 -8
  321. package/dist/compound-expression.d.mts +1 -1
  322. package/dist/{date-range-rule-value-ASr06ClE.d.mts → date-range-rule-value-DyLlMtjr.d.mts} +2 -2
  323. package/dist/date-range-rule-value.d.mts +1 -1
  324. package/dist/display.d.mts +1 -1
  325. package/dist/duration-token.d.mts +11 -0
  326. package/dist/exit-motion.d.mts +7 -0
  327. package/dist/fieldPickerOptions.d.mts +2 -2
  328. package/dist/{filter-size-context-CmFyIPCm.d.mts → filter-size-context-DVnjmuhk.d.mts} +2 -2
  329. package/dist/filter-size-context.d.mts +1 -1
  330. package/dist/{filters-DTBc0mE7.d.mts → filters-By_TYKAZ.d.mts} +3 -3
  331. package/dist/filters.d.mts +1 -1
  332. package/dist/{helpers-CBJ2AqGZ.d.mts → helpers-BIHsqdyX.d.mts} +2 -2
  333. package/dist/helpers.d.mts +1 -1
  334. package/dist/{index-kIon1vPp.d.mts → index-BozzRwby.d.mts} +2 -2
  335. package/dist/{index-OkdnW-u5.d.mts → index-CZJp4Af6.d.mts} +3 -3
  336. package/dist/index2.d.mts +1 -1
  337. package/dist/index4.d.mts +3 -3
  338. package/dist/index5.d.mts +1 -1
  339. package/dist/index6.d.mts +14 -14
  340. package/dist/{inputFields-DpHeZiFX.d.mts → inputFields-BqO2H-Kj.d.mts} +6 -6
  341. package/dist/inputFields.d.mts +1 -1
  342. package/dist/lib/MiddleTruncatedText.mjs +1 -1
  343. package/dist/lib/TruncatedText.d.mts +1 -1
  344. package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
  345. package/dist/lib/TruncatedTextWithTooltip.mjs +1 -1
  346. package/dist/lib/colorMode.d.mts +1 -1
  347. package/dist/lib/useChain.d.mts +1 -1
  348. package/dist/lib/useModalInsetRight.d.mts +4 -3
  349. package/dist/lib/useModalInsetRight.mjs +7 -5
  350. package/dist/lib/useModalInsetRight.mjs.map +1 -1
  351. package/dist/lint/THIRD_PARTY_NOTICES.md +30 -0
  352. package/dist/lint/index.mjs +696 -11
  353. package/dist/lint/index.mjs.map +1 -1
  354. package/dist/lint/recommended.json +7 -1
  355. package/dist/mixins/focus.mjs +1 -1
  356. package/dist/mixins/hoverable.mjs +2 -2
  357. package/dist/mixins/hoverable.mjs.map +1 -1
  358. package/dist/mixins/input.mjs +3 -2
  359. package/dist/mixins/input.mjs.map +1 -1
  360. package/dist/mixins/menuItem.mjs +2 -0
  361. package/dist/mixins/menuItem.mjs.map +1 -1
  362. package/dist/mixins/motion.d.mts +24 -0
  363. package/dist/mixins/motion.mjs +44 -0
  364. package/dist/mixins/motion.mjs.map +1 -0
  365. package/dist/motion-origin.d.mts +7 -0
  366. package/dist/motion.d.mts +63 -0
  367. package/dist/no-layout-motion.d.mts +7 -0
  368. package/dist/no-transition-all.d.mts +7 -0
  369. package/dist/{operators-BHxKZcpD.d.mts → operators-B8_k3r69.d.mts} +10 -3
  370. package/dist/operators.d.mts +2 -2
  371. package/dist/overlay-motion.d.mts +7 -0
  372. package/dist/patterns/CardGrouping/index.mjs +9 -9
  373. package/dist/patterns/CardGrouping/index.mjs.map +1 -1
  374. package/dist/patterns/IndexTableLayout/index.mjs +3 -3
  375. package/dist/patterns/LayoutLoadingShimmer/index.mjs +4 -4
  376. package/dist/patterns/LayoutLoadingSpinner/index.mjs +3 -1
  377. package/dist/patterns/LayoutLoadingSpinner/index.mjs.map +1 -1
  378. package/dist/patterns/PageLayout/index.d.mts +1 -1
  379. package/dist/patterns/PageLayout/index.mjs +1 -1
  380. package/dist/patterns/WizardModal/index.mjs +4 -4
  381. package/dist/relative-date-label.d.mts +1 -1
  382. package/dist/tone.d.mts +1 -1
  383. package/dist/{types-DLnCkvTt.d.mts → types-BJqmRXFV.d.mts} +15 -1
  384. package/dist/{types-CqcbWyUY.d.mts → types-BOsCi-kZ.d.mts} +8 -2
  385. package/dist/{types-BEdERA4v.d.mts → types-C_CncajO.d.mts} +2 -2
  386. package/dist/{types-BiqzeNsa.d.mts → types-D5txFacG.d.mts} +3 -3
  387. package/dist/types4.d.mts +1 -1
  388. package/dist/types5.d.mts +1 -1
  389. package/dist/types6.d.mts +1 -1
  390. package/dist/{url-state-CXUuK3_r.d.mts → url-state-CXPmXzIZ.d.mts} +2 -2
  391. package/dist/url-state.d.mts +1 -1
  392. package/dist/{useChain-B--KAtdN.d.mts → useChain-x9fd9Fyq.d.mts} +2 -2
  393. package/dist/useChainAtCursor.d.mts +1 -1
  394. package/dist/useChartColors.d.mts +30 -0
  395. package/dist/useChartSeriesVisibility.d.mts +22 -0
  396. package/dist/useChartStyles.d.mts +108 -0
  397. package/dist/useColumnConfiguration.d.mts +2 -2
  398. package/dist/useComboboxFooterAction.d.mts +1 -1
  399. package/dist/{useFilterStateV2-DBpbxAEC.d.mts → useFilterStateV2-DiTS9DTg.d.mts} +3 -3
  400. package/dist/useFilterStateV2.d.mts +1 -1
  401. package/dist/{useTableColumns-Xd14vx_h.d.mts → useTableColumns-BEKJNrb1.d.mts} +2 -2
  402. package/dist/useTableColumns.d.mts +1 -1
  403. package/dist/useTruncation.d.mts +1 -1
  404. package/dist/useValueControlError.d.mts +26 -0
  405. package/dist/utils.d.mts +1 -1
  406. package/dist/{validation-Tgg3AhuP.d.mts → validation-BDQdQ1cY.d.mts} +3 -3
  407. package/dist/validation.d.mts +1 -1
  408. package/dist/{value-control-resolver-XQbGCdsP.d.mts → value-control-resolver-BFJZEWDn.d.mts} +9 -3
  409. package/dist/value-control-resolver.d.mts +1 -1
  410. package/dist/variables/keyframes.d.mts +2 -1
  411. package/dist/variables/keyframes.mjs +9 -1
  412. package/dist/variables/keyframes.mjs.map +1 -1
  413. package/dist/variables/transitions.d.mts +31 -1
  414. package/dist/variables/transitions.mjs +50 -1
  415. package/dist/variables/transitions.mjs.map +1 -1
  416. package/llms.txt +1 -0
  417. package/package.json +14 -4
  418. package/skills/new-screen/SKILL.md +33 -0
  419. package/skills/ui-authoring/COMPONENTS.md +18 -0
  420. package/skills/ui-authoring/PATTERNS.md +51 -34
  421. package/skills/ui-authoring/STANDARD.md +68 -4
  422. package/skills/ui-authoring/TOKENS.md +27 -24
  423. package/dist/Breadcrumbs-CMf3Uvow.mjs.map +0 -1
  424. package/dist/CardV2-CrV6eEQb.mjs.map +0 -1
  425. package/dist/Checkbox-Dr4LMKHV.mjs.map +0 -1
  426. package/dist/Combobox-CIKqTYZt.d.mts +0 -11
  427. package/dist/Combobox-Gb_j1dg6.mjs.map +0 -1
  428. package/dist/DataTable-CIZJ1vO8.mjs.map +0 -1
  429. package/dist/DatePicker-C9redLBr.mjs.map +0 -1
  430. package/dist/DropdownMenu-c8XK2Lr4.mjs.map +0 -1
  431. package/dist/FloatingToolbar-DLRaE0o7.mjs.map +0 -1
  432. package/dist/HoverCopyableField-XHC_n9tp.mjs.map +0 -1
  433. package/dist/IconButton-DxHB2g80.mjs.map +0 -1
  434. package/dist/Link-D_kCyLYX.mjs.map +0 -1
  435. package/dist/LoadingShimmer-oPIv2ESr.mjs.map +0 -1
  436. package/dist/Popover-DordjYNM.mjs.map +0 -1
  437. package/dist/Radio-BlEtetrr.mjs.map +0 -1
  438. package/dist/SegmentedControl-D_DA-MU1.mjs.map +0 -1
  439. package/dist/Select-DOlw_LPR.mjs.map +0 -1
  440. package/dist/TabBar-BCFO38E0.mjs.map +0 -1
  441. package/dist/Table-DPi4Dt5H.mjs.map +0 -1
  442. package/dist/TableBox-DNQsgQ8x.mjs.map +0 -1
  443. package/dist/TableControls-BrP_BqnF.mjs.map +0 -1
  444. package/dist/TechnicalSticker-Cq5jzYKQ.mjs.map +0 -1
  445. package/dist/TextArea-Dro-HH8O.mjs.map +0 -1
  446. package/dist/Toggle-D9MzTIZs.mjs.map +0 -1
  447. package/dist/Tooltip-YViXzMdm.mjs.map +0 -1
@@ -1,22 +1,23 @@
1
1
  import { a as styled, r as css } from "./styledComponentsInterop-Cs5CCPRy.mjs";
2
+ import { isDisabled, isHovered, isNotDisabled } from "./lib/pseudoClass.mjs";
2
3
  import { semanticColor } from "./lib/semanticColor.mjs";
4
+ import { focusStyle } from "./mixins/focus.mjs";
5
+ import { semanticScrollbar } from "./mixins/scrollbar.mjs";
3
6
  import { i as Paragraph } from "./Text-D0vEReED.mjs";
4
- import { isDisabled, isHovered, isNotDisabled } from "./lib/pseudoClass.mjs";
7
+ import { a as Tooltip } from "./Tooltip-C2VB8I6y.mjs";
5
8
  import { useOutsideClick } from "./lib/useOutsideClick.mjs";
6
9
  import { Z_INDICES } from "./lib/zindex.mjs";
7
- import { focusStyle } from "./mixins/focus.mjs";
8
- import { semanticScrollbar } from "./mixins/scrollbar.mjs";
9
10
  import { n as Stack } from "./Stack-Bzom2BTR.mjs";
10
- import { n as Button } from "./IconButton-DxHB2g80.mjs";
11
- import { n as Sticker } from "./Sticker-C1_6I08u.mjs";
11
+ import { n as Button } from "./IconButton-kSjnfhWt.mjs";
12
+ import { n as Sticker } from "./Sticker-jfOM4Yi6.mjs";
12
13
  import { n as useFormField } from "./useFormField-pOVkb5BK.mjs";
13
- import { r as InputGroup } from "./Input-RHXujO9u.mjs";
14
+ import { r as InputGroup } from "./Input-TRmTBEav.mjs";
14
15
  import Input_default from "./components/Input/index.mjs";
15
- import { c as MenuList, n as IconContainer, o as MenuHeading, s as MenuItem, t as FloatingCard } from "./Menu-BVn1jh46.mjs";
16
- import { t as Checkbox } from "./Checkbox-Dr4LMKHV.mjs";
17
- import { t as Spinner } from "./Spinner-CXb-KUs1.mjs";
18
- import { Fragment, cloneElement, forwardRef, isValidElement, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
16
+ import { c as MenuList, n as IconContainer, o as MenuHeading, s as MenuItem, t as FloatingCard } from "./Menu-BvMzSH2I.mjs";
17
+ import { t as Checkbox } from "./Checkbox-C3z7UUSC.mjs";
18
+ import { t as Spinner } from "./Spinner-vcApnJzv.mjs";
19
19
  import { Color, Spacing, Typography } from "@persona/design-tokens";
20
+ import { Fragment, cloneElement, forwardRef, isValidElement, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
20
21
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
21
22
  import { ArrowLeftIcon, CaretDownIcon, ChevronRightIcon, CircleXInverseIcon, SearchIcon } from "@persona/icons";
22
23
  import Fuse from "fuse.js";
@@ -28,6 +29,35 @@ function isOptionGroup(item) {
28
29
  return "options" in item && Array.isArray(item.options);
29
30
  }
30
31
  /**
32
+ * Moves disabled options after the enabled ones, keeping each run in its original order. A section
33
+ * header (inline group) is a boundary, so an option never leaves its section. Nested-group rows
34
+ * count as enabled. Recurses into every group.
35
+ */
36
+ function sortDisabledOptionsLast(items, isDisabled) {
37
+ const sorted = [];
38
+ let enabled = [];
39
+ let disabled = [];
40
+ const flush = () => {
41
+ sorted.push(...enabled, ...disabled);
42
+ enabled = [];
43
+ disabled = [];
44
+ };
45
+ for (const item of items) if (isOptionGroup(item)) {
46
+ const group = {
47
+ ...item,
48
+ options: sortDisabledOptionsLast(item.options, isDisabled)
49
+ };
50
+ if (item.nested) enabled.push(group);
51
+ else {
52
+ flush();
53
+ sorted.push(group);
54
+ }
55
+ } else if (isDisabled(item)) disabled.push(item);
56
+ else enabled.push(item);
57
+ flush();
58
+ return sorted;
59
+ }
60
+ /**
31
61
  * Flatten the visible leaves at the current navigation level. Inline
32
62
  * (non-nested) groups are walked through transparently — their leaves
33
63
  * surface at this level. Nested groups are skipped along with their
@@ -86,9 +116,7 @@ function findNestedGroupByLabel(items, label) {
86
116
  * nested groups).
87
117
  *
88
118
  * - Empty `path` returns the original top-level items unchanged.
89
- * - If any step doesn't resolve to a known nested group (e.g. stale
90
- * state after the registry changes), returns an empty list so the
91
- * consumer can fall back to the root view.
119
+ * - If a step no longer resolves to a nested group, returns an empty list.
92
120
  */
93
121
  function getOptionsAtPath(options, path) {
94
122
  let scope = options;
@@ -142,29 +170,107 @@ function getNavigableItemsAtLevel(items) {
142
170
  });
143
171
  return out;
144
172
  }
145
- /**
146
- * A hook which provides the caller with dynamically filtered options
147
- *
148
- * @param options - The options to filter (can be flat or grouped)
149
- * @param inputValue - The input value to filter the options by
150
- * @returns The subset of the options that match the input value according to the fuse.js library
151
- */
152
- function useFilteredOptions(options, inputValue) {
153
- return useMemo(() => {
154
- const flatOptions = flattenOptions(options);
155
- const fuse = new Fuse(flatOptions, {
156
- shouldSort: false,
157
- threshold: 0,
158
- ignoreLocation: true,
159
- minMatchCharLength: 1,
160
- keys: [
161
- "label",
162
- "description",
163
- "keywords"
164
- ]
173
+ function filterComboboxOptions(options, inputValue) {
174
+ const flatOptions = flattenOptions(options);
175
+ const fuse = new Fuse(flatOptions, {
176
+ shouldSort: false,
177
+ threshold: 0,
178
+ ignoreLocation: true,
179
+ minMatchCharLength: 1,
180
+ keys: [
181
+ "label",
182
+ "description",
183
+ "keywords"
184
+ ]
185
+ });
186
+ return inputValue === "" ? flatOptions : Array.from(new Set(fuse.search(inputValue).map(({ item }) => item)).values());
187
+ }
188
+ /** All server-specific behavior lives here; client event/filtering behavior passes through. */
189
+ function useComboboxServerMode(props, values, clientOptions = props.options, selectAll = false) {
190
+ const server = props.filterMode === "server";
191
+ const options = useMemo(() => server ? flattenLeafOptions(props.options).map(({ option }) => option) : clientOptions, [
192
+ server,
193
+ props.options,
194
+ clientOptions
195
+ ]);
196
+ const selectedItems = useMemo(() => {
197
+ if (!server) return flattenLeafOptions(options).map(({ option }) => option).filter((option) => values.includes(option.value));
198
+ const byValue = /* @__PURE__ */ new Map();
199
+ if (props.filterMode === "server") props.selectedOptions?.forEach((option) => byValue.set(option.value, option));
200
+ flattenLeafOptions(options).forEach(({ option }) => byValue.set(option.value, option));
201
+ return values.flatMap((value) => {
202
+ const option = byValue.get(value) ?? (server ? {
203
+ value,
204
+ label: String(value)
205
+ } : void 0);
206
+ return option ? [option] : [];
165
207
  });
166
- return inputValue === "" ? flatOptions : Array.from(new Set(fuse.search(inputValue).map(({ item }) => item)).values());
167
- }, [options, inputValue]);
208
+ }, [
209
+ options,
210
+ server,
211
+ props.filterMode,
212
+ props.selectedOptions,
213
+ values
214
+ ]);
215
+ const itemToKey = useCallback((item) => item?.value, []);
216
+ const filterOptions = useCallback((source, inputValue) => server ? flattenOptions(source) : filterComboboxOptions(source, inputValue), [server]);
217
+ const scrollRef = useRef(null);
218
+ const scrollState = useRef({
219
+ open: false,
220
+ rowHeight: 32
221
+ });
222
+ scrollState.current.rowHeight = props.size === "sm" ? 24 : 32;
223
+ scrollState.current.callback = props.filterMode === "server" ? props.onScrollEnd : void 0;
224
+ const checkScrollEnd = useCallback((shortOnly = false) => {
225
+ const list = scrollRef.current;
226
+ if (!scrollState.current.open || !list || list.clientHeight <= 0) return;
227
+ if (shortOnly ? list.scrollHeight <= list.clientHeight : list.scrollHeight - list.scrollTop - list.clientHeight <= scrollState.current.rowHeight) scrollState.current.callback?.();
228
+ }, []);
229
+ const onMenuOpenChange = useCallback((open) => {
230
+ if (scrollState.current.open === open) return;
231
+ scrollState.current.open = open;
232
+ if (open) checkScrollEnd(true);
233
+ }, [checkScrollEnd]);
234
+ useEffect(() => checkScrollEnd(true), [checkScrollEnd, options.length]);
235
+ const getQueryInputProps = (inputProps, isOpen = true, onQueryEdit) => {
236
+ if (props.filterMode !== "server") return inputProps;
237
+ return {
238
+ ...inputProps,
239
+ value: isOpen ? props.query : inputProps.value,
240
+ onKeyDown: (event) => {
241
+ if (!isOpen && !event.nativeEvent.isComposing && (event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey || event.key === "Backspace" || event.key === "Delete" || event.key === "Process" || event.key === "Unidentified" || event.key === "Dead")) event.currentTarget.select();
242
+ inputProps.onKeyDown?.(event);
243
+ },
244
+ onPaste: (event) => {
245
+ if (!isOpen) event.currentTarget.select();
246
+ inputProps.onPaste?.(event);
247
+ },
248
+ onChange: (event) => {
249
+ const nextInput = event.currentTarget.value;
250
+ inputProps.onChange?.(event);
251
+ onQueryEdit?.();
252
+ props.onQueryChange(nextInput);
253
+ }
254
+ };
255
+ };
256
+ return {
257
+ options,
258
+ selectedItems,
259
+ scrollRef,
260
+ onMenuOpenChange,
261
+ onScroll: server ? () => checkScrollEnd() : void 0,
262
+ loadingMore: props.filterMode === "server" && props.isLoadingMore ? /* @__PURE__ */ jsx(LoadingMoreRow, { children: /* @__PURE__ */ jsx(Spinner, {
263
+ size: "sm",
264
+ srText: "Loading more options"
265
+ }) }) : null,
266
+ itemToKey,
267
+ filterOptions,
268
+ getQueryInputProps,
269
+ query: props.filterMode === "server" ? props.query : void 0,
270
+ onInputChange: server ? void 0 : props.onInputChange,
271
+ selectAll: !server && selectAll,
272
+ preserveOptionOrder: server
273
+ };
168
274
  }
169
275
  function buildVirtualRows(options, filteredOptions, indexRealToIndexVirtual) {
170
276
  const rows = [];
@@ -392,6 +498,10 @@ const LoadingContainer = styled.div`
392
498
  min-height: 136px;
393
499
  padding: ${Spacing[3]};
394
500
  `;
501
+ const LoadingMoreRow = styled(LoadingContainer)`
502
+ min-height: 0;
503
+ padding: ${Spacing[2]};
504
+ `;
395
505
  const FooterActionContainer = styled.div`
396
506
  flex-shrink: 0;
397
507
  padding-top: ${Spacing[1]};
@@ -768,8 +878,14 @@ const CheckboxLabel = styled.span`
768
878
  position: relative;
769
879
  bottom: -1px;
770
880
  `;
771
- function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOptionsLoading, values = [], onValuesChange, searchPlaceholder = "Search...", onInputChange, placeholder = "Select an option...", emptyStateMessage = "No options found", disabled = false, hasWarning, hasError, required, id, labelId, "aria-label": ariaLabel, onOpenChange, truncate = false, selectAll = false, stableOptionOrder = false, portal = false, portalContainerRef: externalPortalContainerRef, trigger, embedded = false, virtualize = false, footerAction, ...props }, ref) {
772
- const options = useMemo(() => containsNestedGroup(rawOptions) ? inlineNestedGroups(rawOptions) : rawOptions, [rawOptions]);
881
+ function ComboboxMultiSelectComponent(componentProps, ref) {
882
+ const { size = "md", options: rawOptions, isOptionsLoading, filterMode: _filterMode, selectedOptions: _selectedOptions, query: _query, onQueryChange: _onQueryChange, onScrollEnd: _onScrollEnd, isLoadingMore: _isLoadingMore, values = [], onValuesChange, searchPlaceholder = "Search...", onInputChange: _onInputChange, placeholder = "Select an option...", emptyStateMessage = "No options found", disabled = false, hasWarning, hasError, required, id, labelId, "aria-label": ariaLabel, onOpenChange, truncate = false, selectAll: requestedSelectAll = false, stableOptionOrder = false, portal = false, portalContainerRef: externalPortalContainerRef, trigger, embedded = false, virtualize = false, footerAction, ...props } = {
883
+ onScrollEnd: void 0,
884
+ isLoadingMore: void 0,
885
+ ...componentProps
886
+ };
887
+ const mode = useComboboxServerMode(componentProps, values, useMemo(() => containsNestedGroup(rawOptions) ? inlineNestedGroups(rawOptions) : rawOptions, [rawOptions]), requestedSelectAll);
888
+ const { options, selectedItems, selectAll } = mode;
773
889
  const field = useFormField({
774
890
  hasWarning,
775
891
  hasError,
@@ -782,7 +898,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
782
898
  const comboboxInputRef = useRef(null);
783
899
  const caretButtonRef = useRef(null);
784
900
  const comboboxContainerRef = useRef(null);
785
- const scrollableListRef = useRef(null);
901
+ const scrollableListRef = mode.scrollRef;
786
902
  const selectedItemsContainerRef = useRef(null);
787
903
  const measurementStickerRefs = useRef([]);
788
904
  const measurementTruncatorRef = useRef(null);
@@ -790,8 +906,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
790
906
  setEmbeddedOpen(embedded);
791
907
  }, [embedded]);
792
908
  const portalContainerRef = externalPortalContainerRef || comboboxContainerRef;
793
- const flatOptions = useMemo(() => flattenOptions(options), [options]);
794
- const selectedItems = flatOptions.filter((option) => values.includes(option.value));
909
+ const preserveOptionOrder = stableOptionOrder || mode.preserveOptionOrder;
795
910
  useEffect(() => {
796
911
  measurementStickerRefs.current = measurementStickerRefs.current.slice(0, selectedItems.length);
797
912
  }, [selectedItems.length]);
@@ -802,10 +917,14 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
802
917
  if (searchInputRef.current) searchInputRef.current.focus();
803
918
  }
804
919
  }), []);
805
- const filteredOptions = useFilteredOptions(options, inputValue);
920
+ const filteredOptions = useMemo(() => mode.filterOptions(options, inputValue), [
921
+ mode.filterOptions,
922
+ options,
923
+ inputValue
924
+ ]);
806
925
  const isGrouped = useMemo(() => options.some(isOptionGroup), [options]);
807
926
  const optionsWithSelectedFirstInGroups = useMemo(() => {
808
- if (!isGrouped || values.length === 0 || stableOptionOrder) return options;
927
+ if (!isGrouped || values.length === 0 || preserveOptionOrder) return options;
809
928
  return options.map((item) => {
810
929
  if (isOptionGroup(item)) {
811
930
  const groupLeaves = flattenOptions(item.options);
@@ -824,7 +943,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
824
943
  options,
825
944
  isGrouped,
826
945
  values,
827
- stableOptionOrder
946
+ preserveOptionOrder
828
947
  ]);
829
948
  const navigableItems = useMemo(() => {
830
949
  const items = [];
@@ -838,7 +957,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
838
957
  } else if (filteredOptions.some((f) => f.value === item.value)) items.push(item);
839
958
  return items;
840
959
  }
841
- const orderedFiltered = !isGrouped && values.length > 0 && !stableOptionOrder ? filteredOptions.toSorted((a, b) => {
960
+ const orderedFiltered = !isGrouped && values.length > 0 && !preserveOptionOrder ? filteredOptions.toSorted((a, b) => {
842
961
  const aSelected = values.includes(a.value);
843
962
  if (aSelected === values.includes(b.value)) return 0;
844
963
  return aSelected ? -1 : 1;
@@ -855,7 +974,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
855
974
  isGrouped,
856
975
  values,
857
976
  optionsWithSelectedFirstInGroups,
858
- stableOptionOrder
977
+ preserveOptionOrder
859
978
  ]);
860
979
  const optionsToRender = useMemo(() => {
861
980
  if (!isGrouped && values.length > 0) return navigableItems;
@@ -895,6 +1014,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
895
1014
  const getOptionId = useCallback((index) => `${field.inputId}-option-${index}`, [field.inputId]);
896
1015
  const { addSelectedItem, getSelectedItemProps, getDropdownProps, removeSelectedItem, reset, setSelectedItems } = useMultipleSelection({
897
1016
  selectedItems,
1017
+ itemToKey: mode.itemToKey,
898
1018
  onStateChange: ({ selectedItems: newSelectedItems, type }) => {
899
1019
  switch (type) {
900
1020
  case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:
@@ -949,6 +1069,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
949
1069
  const { isOpen, getToggleButtonProps, getMenuProps, getInputProps, getItemProps, highlightedIndex, setHighlightedIndex, closeMenu, openMenu } = useCombobox({
950
1070
  items: navigableItems,
951
1071
  itemToString,
1072
+ itemToKey: mode.itemToKey,
952
1073
  getItemId: getOptionId,
953
1074
  isOpen: embedded ? embeddedOpen : void 0,
954
1075
  selectedItem: null,
@@ -967,7 +1088,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
967
1088
  switch (type) {
968
1089
  case useCombobox.stateChangeTypes.InputChange:
969
1090
  setInputValue(newInputValue || "");
970
- onInputChange?.(newInputValue || "");
1091
+ mode.onInputChange?.(newInputValue || "");
971
1092
  break;
972
1093
  case useCombobox.stateChangeTypes.InputKeyDownEnter:
973
1094
  case useCombobox.stateChangeTypes.ItemClick:
@@ -1083,7 +1204,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
1083
1204
  isOptionsLoading,
1084
1205
  itemCount: navigableItems.length,
1085
1206
  isMenuOpen,
1086
- inputValue,
1207
+ inputValue: mode.query ?? inputValue,
1087
1208
  highlightedIndex,
1088
1209
  setHighlightedIndex,
1089
1210
  inputId: field.inputId
@@ -1093,8 +1214,13 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
1093
1214
  }, [isMenuOpen, openMenu]);
1094
1215
  const dropdownPosition = useDropdownPosition(portalContainerRef, isMenuOpen, embedded ? false : portal);
1095
1216
  useEffect(() => {
1217
+ mode.onMenuOpenChange(isMenuOpen);
1096
1218
  onOpenChange?.(isMenuOpen);
1097
- }, [isMenuOpen, onOpenChange]);
1219
+ }, [
1220
+ isMenuOpen,
1221
+ onOpenChange,
1222
+ mode.onMenuOpenChange
1223
+ ]);
1098
1224
  useEffect(() => {
1099
1225
  if (isMenuOpen && navigableItems.length > 0 && !isFooterHighlighted) {
1100
1226
  if (highlightedIndex === -1 || highlightedIndex >= navigableItems.length) setHighlightedIndex(0);
@@ -1179,8 +1305,9 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
1179
1305
  const handleSearchInputBlur = useCallback((e) => {
1180
1306
  if (!isMenuOpen) return;
1181
1307
  const relatedTarget = e.relatedTarget;
1182
- const staysInCombobox = relatedTarget != null && (Boolean(comboboxContainerRef.current?.contains(relatedTarget)) || Boolean(relatedTarget.closest("#combobox-dropdown-portal-wrapper")));
1183
- if (!embedded && !staysInCombobox) closeMenu();
1308
+ if (!(relatedTarget != null && (Boolean(comboboxContainerRef.current?.contains(relatedTarget)) || Boolean(relatedTarget.closest("#combobox-dropdown-portal-wrapper"))))) {
1309
+ if (!embedded) closeMenu();
1310
+ }
1184
1311
  }, [
1185
1312
  embedded,
1186
1313
  isMenuOpen,
@@ -1227,7 +1354,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
1227
1354
  return /* @__PURE__ */ jsx("div", {
1228
1355
  ref: (el) => measurementStickerRefs.current[index] = el,
1229
1356
  children: /* @__PURE__ */ jsx(Sticker, {
1230
- variant: flatOptions.find((opt) => opt.value === item.value)?.labelStickerVariant || "grey",
1357
+ variant: item?.labelStickerVariant || "grey",
1231
1358
  disabled: field.disabled,
1232
1359
  children: item.label
1233
1360
  })
@@ -1250,7 +1377,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
1250
1377
  selectedItem: item,
1251
1378
  index
1252
1379
  });
1253
- const stickerVariant = flatOptions.find((opt) => opt.value === item.value)?.labelStickerVariant || "grey";
1380
+ const stickerVariant = item?.labelStickerVariant || "grey";
1254
1381
  return /* @__PURE__ */ jsx(TruncatedSticker, {
1255
1382
  ...stickerProps,
1256
1383
  variant: stickerVariant,
@@ -1267,7 +1394,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
1267
1394
  selectedItem: item,
1268
1395
  index
1269
1396
  });
1270
- const stickerVariant = flatOptions.find((opt) => opt.value === item.value)?.labelStickerVariant || "grey";
1397
+ const stickerVariant = item?.labelStickerVariant || "grey";
1271
1398
  return /* @__PURE__ */ jsx(Sticker, {
1272
1399
  ...stickerProps,
1273
1400
  variant: stickerVariant,
@@ -1315,14 +1442,16 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
1315
1442
  leftIcon: embedded ? void 0 : /* @__PURE__ */ jsx(SearchIcon, {}),
1316
1443
  size,
1317
1444
  children: /* @__PURE__ */ jsx(SearchInput, {
1318
- ...searchInputDownshiftProps,
1445
+ ...mode.getQueryInputProps({
1446
+ ...searchInputDownshiftProps,
1447
+ value: inputValue,
1448
+ onChange: (event) => {
1449
+ setInputValue(event.target.value);
1450
+ mode.onInputChange?.(event.target.value);
1451
+ }
1452
+ }, true, () => setHighlightedIndex(0)),
1319
1453
  $embedded: embedded,
1320
1454
  placeholder: searchPlaceholder,
1321
- value: inputValue,
1322
- onChange: (e) => {
1323
- setInputValue(e.target.value);
1324
- onInputChange?.(e.target.value);
1325
- },
1326
1455
  onKeyDown: handleSearchInputKeyDown,
1327
1456
  onBlur: handleSearchInputBlur,
1328
1457
  disabled: field.disabled,
@@ -1335,23 +1464,28 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
1335
1464
  $embedded: embedded,
1336
1465
  tabIndex: -1,
1337
1466
  ref: scrollableListRef,
1338
- children: isMenuOpen && /* @__PURE__ */ jsxs(Fragment$1, { children: [isOptionsLoading ? /* @__PURE__ */ jsx(LoadingContainer, { children: /* @__PURE__ */ jsx(Spinner, { size: "md" }) }) : navigableItems.length > 0 ? renderOptionsWithGroups({
1339
- options: optionsToRender,
1340
- filteredOptions: navigableItems,
1341
- renderOption,
1342
- virtualizer: virtualize ? virtualizer : void 0,
1343
- virtualRows: virtualize ? virtualRows : void 0
1344
- }) : /* @__PURE__ */ jsx(EmptyState, {
1345
- role: "status",
1346
- "aria-live": "polite",
1347
- size,
1348
- children: emptyStateMessage
1349
- }), showFooterAction && footerAction && /* @__PURE__ */ jsx(FooterActionRow, {
1350
- action: footerAction,
1351
- size,
1352
- id: footerActionId,
1353
- isHighlighted: isFooterHighlighted
1354
- })] })
1467
+ onScroll: mode.onScroll,
1468
+ children: isMenuOpen && /* @__PURE__ */ jsxs(Fragment$1, { children: [
1469
+ isOptionsLoading ? /* @__PURE__ */ jsx(LoadingContainer, { children: /* @__PURE__ */ jsx(Spinner, { size: "md" }) }) : navigableItems.length > 0 ? renderOptionsWithGroups({
1470
+ options: optionsToRender,
1471
+ filteredOptions: navigableItems,
1472
+ renderOption,
1473
+ virtualizer: virtualize ? virtualizer : void 0,
1474
+ virtualRows: virtualize ? virtualRows : void 0
1475
+ }) : /* @__PURE__ */ jsx(EmptyState, {
1476
+ role: "status",
1477
+ "aria-live": "polite",
1478
+ size,
1479
+ children: emptyStateMessage
1480
+ }),
1481
+ mode.loadingMore,
1482
+ showFooterAction && footerAction && /* @__PURE__ */ jsx(FooterActionRow, {
1483
+ action: footerAction,
1484
+ size,
1485
+ id: footerActionId,
1486
+ isHighlighted: isFooterHighlighted
1487
+ })
1488
+ ] })
1355
1489
  })]
1356
1490
  })
1357
1491
  })]
@@ -1375,7 +1509,37 @@ const StyledMenuItem = styled(MenuItem)`
1375
1509
  min-width: 0;
1376
1510
  box-sizing: border-box;
1377
1511
  }
1512
+
1513
+ /* MenuItem drops pointer events when disabled; keep them so the reason tooltip opens on hover.
1514
+ \`stateReducer\` refuses a click on a disabled option, so it still can't be picked. */
1515
+ &[aria-disabled='true'] {
1516
+ pointer-events: auto;
1517
+ }
1378
1518
  `;
1519
+ /** Room the reason tooltip needs beside its row: its 250px max width, 8px offset and 8px margin. */
1520
+ const REASON_TOOLTIP_SPACE = 266;
1521
+ /**
1522
+ * A disabled option's reason, shown on hover. It opens to the right of the row, or above it when
1523
+ * the row reaches too close to the right edge of the screen (an embedded or narrow menu).
1524
+ */
1525
+ function DisabledReasonTooltip({ reason, children }) {
1526
+ const [side, setSide] = useState("right");
1527
+ return /* @__PURE__ */ jsx(Tooltip, {
1528
+ trigger: children,
1529
+ triggerProps: { onPointerEnter: (event) => {
1530
+ const { right } = event.currentTarget.getBoundingClientRect();
1531
+ setSide(window.innerWidth - right >= REASON_TOOLTIP_SPACE ? "right" : "top");
1532
+ } },
1533
+ side,
1534
+ align: side === "top" ? "start" : "center",
1535
+ collisionPadding: 8,
1536
+ hideWhenDetached: true,
1537
+ size: "sm",
1538
+ zIndex: Z_INDICES.modalDropdownTooltip,
1539
+ interactive: false,
1540
+ children: reason
1541
+ });
1542
+ }
1379
1543
  const ParentMenuItem = styled(MenuItem)`
1380
1544
  ${IconContainer} {
1381
1545
  margin-right: 0;
@@ -1425,7 +1589,15 @@ const StickerComboboxInput = styled(ComboboxInput)`
1425
1589
  color: transparent;
1426
1590
  caret-color: transparent;
1427
1591
  `;
1428
- function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading, value, onChange, optionDisabledReason, onInputChange, placeholder = "Select an option...", emptyStateMessage = "No options found", disabled = false, hasWarning, hasError, required, id, labelId, "aria-label": ariaLabel, onOpenChange, portal = false, portalContainerRef: externalPortalContainerRef, trigger, embedded = false, footerAction, ...props }, ref) {
1592
+ function ComboboxSingleSelectComponent(componentProps, ref) {
1593
+ const { size = "md", options: optionsProp, isOptionsLoading, filterMode: _filterMode, selectedOptions: _selectedOptions, query: _query, onQueryChange: _onQueryChange, onScrollEnd: _onScrollEnd, isLoadingMore: _isLoadingMore, value, onChange, optionDisabledReason, onInputChange: _onInputChange, placeholder = "Select an option...", emptyStateMessage = "No options found", disabled = false, hasWarning, hasError, required, id, labelId, "aria-label": ariaLabel, onOpenChange, portal = false, portalContainerRef: externalPortalContainerRef, trigger, embedded = false, footerAction, ...props } = {
1594
+ onScrollEnd: void 0,
1595
+ isLoadingMore: void 0,
1596
+ ...componentProps
1597
+ };
1598
+ const clientOptions = useMemo(() => optionDisabledReason == null ? optionsProp : sortDisabledOptionsLast(optionsProp, (option) => optionDisabledReason(option) != null), [optionsProp, optionDisabledReason]);
1599
+ const mode = useComboboxServerMode(componentProps, useMemo(() => value == null ? [] : [value], [value]), clientOptions);
1600
+ const options = mode.options;
1429
1601
  const field = useFormField({
1430
1602
  hasWarning,
1431
1603
  hasError,
@@ -1487,7 +1659,11 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1487
1659
  hasNestedGroups
1488
1660
  ]);
1489
1661
  const renderSource = isSearching ? hasNestedGroups ? searchableLeaves : options : nestedOptions;
1490
- const standardFilteredOptions = useFilteredOptions(renderSource, inputValue);
1662
+ const standardFilteredOptions = useMemo(() => mode.filterOptions(renderSource, inputValue), [
1663
+ mode.filterOptions,
1664
+ renderSource,
1665
+ inputValue
1666
+ ]);
1491
1667
  const filteredOptions = useMemo(() => {
1492
1668
  if (!isSearching || !hasNestedGroups || searchableLeafFuse == null) return standardFilteredOptions;
1493
1669
  if (inputValue === "") return searchableLeaves;
@@ -1513,9 +1689,7 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1513
1689
  navigableItems
1514
1690
  ]);
1515
1691
  const downshiftNodes = useMemo(() => new Set(downshiftItems.map((item) => item.kind === "group" ? item.group : item.option)), [downshiftItems]);
1516
- const allLeaves = useMemo(() => flattenLeafOptions(options), [options]);
1517
- const flatOptionsForFallback = useMemo(() => flattenOptions(options), [options]);
1518
- const selectedOption = allLeaves.find(({ option }) => option.value === value)?.option ?? flatOptionsForFallback.find((option) => option.value === value) ?? null;
1692
+ const selectedOption = mode.selectedItems[0] ?? null;
1519
1693
  const selectedNavigableItem = useMemo(() => selectedOption ? {
1520
1694
  kind: "leaf",
1521
1695
  option: selectedOption
@@ -1536,22 +1710,22 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1536
1710
  const { isOpen, getToggleButtonProps, getMenuProps, getInputProps, getItemProps, highlightedIndex, setHighlightedIndex, openMenu } = useCombobox({
1537
1711
  items: downshiftItems,
1538
1712
  itemToString,
1539
- isItemDisabled,
1713
+ itemToKey: (item) => item?.kind === "leaf" ? mode.itemToKey(item.option) : item?.group.label,
1540
1714
  isOpen: embedded ? isDropdownOpen : void 0,
1541
1715
  selectedItem: isDropdownOpen ? null : selectedNavigableItem,
1542
- inputValue,
1716
+ inputValue: isDropdownOpen ? mode.query ?? inputValue : inputValue,
1543
1717
  onInputValueChange({ inputValue: newInputValue, type }) {
1544
1718
  if (type === useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem && isDropdownOpen && !embedded) return;
1545
- const isUserEdit = type === useCombobox.stateChangeTypes.InputChange || type === useCombobox.stateChangeTypes.InputKeyDownEscape;
1719
+ const isUserEdit = type === useCombobox.stateChangeTypes.InputChange && (mode.query === void 0 || !isDropdownOpen) || type === useCombobox.stateChangeTypes.InputKeyDownEscape;
1546
1720
  if (newInputValue === "" && isUserEdit && !embedded && trigger == null) onChange?.(null);
1547
1721
  setInputValue(newInputValue || "");
1548
- onInputChange?.(newInputValue || "");
1722
+ mode.onInputChange?.(newInputValue || "");
1549
1723
  },
1550
1724
  onIsOpenChange({ isOpen: newIsOpen }) {
1551
1725
  if (embedded) return;
1552
1726
  setIsDropdownOpen(newIsOpen);
1553
1727
  if (newIsOpen) {
1554
- if (selectedOption || committedLabelRef.current != null || value && inputValue === flatOptionsForFallback.find((opt) => opt.value === value)?.label) setInputValue("");
1728
+ if (selectedOption || committedLabelRef.current != null) setInputValue("");
1555
1729
  } else setInputValue(committedLabelRef.current ?? selectedOption?.label ?? "");
1556
1730
  },
1557
1731
  onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {
@@ -1616,7 +1790,8 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1616
1790
  option
1617
1791
  },
1618
1792
  index: currentIndex,
1619
- "aria-selected": isSelected
1793
+ "aria-selected": isSelected,
1794
+ "aria-disabled": disabledReason != null ? true : void 0
1620
1795
  });
1621
1796
  const labelContent = option.labelStickerVariant ? /* @__PURE__ */ jsx(Sticker, {
1622
1797
  variant: option.labelStickerVariant,
@@ -1629,7 +1804,8 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1629
1804
  title: option.description,
1630
1805
  children: option.description
1631
1806
  })] });
1632
- return /* @__PURE__ */ jsxs(StyledMenuItem, {
1807
+ const key = `leaf-${String(option.value)}-${currentIndex}`;
1808
+ const item = /* @__PURE__ */ jsxs(StyledMenuItem, {
1633
1809
  ...itemProps,
1634
1810
  disabled: disabledReason != null,
1635
1811
  "aria-describedby": disabledReason != null ? descriptionId : void 0,
@@ -1637,11 +1813,16 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1637
1813
  selected: isSelected,
1638
1814
  size,
1639
1815
  tabIndex: -1,
1640
- children: [labelContent, disabledReason != null && /* @__PURE__ */ jsx(Description, {
1816
+ children: [labelContent, disabledReason != null && /* @__PURE__ */ jsx("span", {
1641
1817
  id: descriptionId,
1818
+ hidden: true,
1642
1819
  children: disabledReason
1643
1820
  })]
1644
- }, `leaf-${String(option.value)}-${currentIndex}`);
1821
+ }, key);
1822
+ return disabledReason == null ? item : /* @__PURE__ */ jsx(DisabledReasonTooltip, {
1823
+ reason: disabledReason,
1824
+ children: item
1825
+ }, key);
1645
1826
  }, [
1646
1827
  highlightedIndex,
1647
1828
  selectedOption,
@@ -1716,27 +1897,14 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1716
1897
  if (embedded && isMenuOpen && comboboxInputRef.current) comboboxInputRef.current.focus({ preventScroll: true });
1717
1898
  }, [embedded, isMenuOpen]);
1718
1899
  const dropdownPosition = useDropdownPosition(portalContainerRef, isMenuOpen, embedded ? false : portal);
1719
- const { firstNavigableIndex, lastNavigableIndex } = useMemo(() => {
1720
- let firstNavigableIndex = -1;
1721
- let lastNavigableIndex = -1;
1722
- downshiftItems.forEach((item, index) => {
1723
- if (isItemDisabled(item)) return;
1724
- if (firstNavigableIndex === -1) firstNavigableIndex = index;
1725
- lastNavigableIndex = index;
1726
- });
1727
- return {
1728
- firstNavigableIndex,
1729
- lastNavigableIndex
1730
- };
1731
- }, [downshiftItems, isItemDisabled]);
1900
+ const firstEnabledIndex = useMemo(() => downshiftItems.findIndex((item) => !isItemDisabled(item)), [downshiftItems, isItemDisabled]);
1732
1901
  const { isFooterHighlighted, footerActionId, showFooterAction, handleFooterKeyDown } = useComboboxFooterAction({
1733
1902
  footerAction,
1734
1903
  isOptionsLoading,
1735
1904
  itemCount: downshiftItems.length,
1736
- firstNavigableIndex,
1737
- lastNavigableIndex,
1905
+ firstNavigableIndex: downshiftItems.length > 0 ? 0 : -1,
1738
1906
  isMenuOpen,
1739
- inputValue,
1907
+ inputValue: mode.query ?? inputValue,
1740
1908
  highlightedIndex,
1741
1909
  setHighlightedIndex,
1742
1910
  inputId: field.inputId
@@ -1780,8 +1948,13 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1780
1948
  handleAscend
1781
1949
  ]);
1782
1950
  useEffect(() => {
1951
+ mode.onMenuOpenChange(isMenuOpen);
1783
1952
  onOpenChange?.(isMenuOpen);
1784
- }, [isMenuOpen, onOpenChange]);
1953
+ }, [
1954
+ isMenuOpen,
1955
+ onOpenChange,
1956
+ mode.onMenuOpenChange
1957
+ ]);
1785
1958
  useEffect(() => {
1786
1959
  if (!embedded && !isMenuOpen) setInputValue(committedLabelRef.current ?? selectedOption?.label ?? "");
1787
1960
  }, [
@@ -1789,19 +1962,23 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1789
1962
  selectedOption,
1790
1963
  isMenuOpen
1791
1964
  ]);
1965
+ const levelKey = JSON.stringify([navigationPath, mode.query ?? inputValue]);
1966
+ const levelKeyRef = useRef(levelKey);
1792
1967
  useEffect(() => {
1793
- if (!isMenuOpen || isFooterHighlighted) return;
1968
+ const levelChanged = levelKeyRef.current !== levelKey;
1969
+ levelKeyRef.current = levelKey;
1970
+ if (!isMenuOpen || isFooterHighlighted || firstEnabledIndex === -1) return;
1794
1971
  const highlighted = downshiftItems[highlightedIndex];
1795
- if (highlighted != null && !isItemDisabled(highlighted)) return;
1796
- if (highlightedIndex !== firstNavigableIndex) setHighlightedIndex(firstNavigableIndex);
1972
+ if (highlighted == null || levelChanged && isItemDisabled(highlighted)) setHighlightedIndex(firstEnabledIndex);
1797
1973
  }, [
1798
1974
  downshiftItems,
1799
1975
  isMenuOpen,
1800
1976
  highlightedIndex,
1801
1977
  isFooterHighlighted,
1802
1978
  setHighlightedIndex,
1979
+ firstEnabledIndex,
1803
1980
  isItemDisabled,
1804
- firstNavigableIndex
1981
+ levelKey
1805
1982
  ]);
1806
1983
  const displayValue = isMenuOpen ? inputValue : committedLabelRef.current ?? selectedOption?.label ?? "";
1807
1984
  const hasSticker = !isMenuOpen && selectedOption?.labelStickerVariant;
@@ -1853,12 +2030,14 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1853
2030
  children: selectedOption.label
1854
2031
  }),
1855
2032
  /* @__PURE__ */ jsx(InputComponent, {
1856
- ...mainInputProps,
2033
+ ...mode.getQueryInputProps({
2034
+ ...mainInputProps,
2035
+ value: displayValue
2036
+ }, isMenuOpen),
1857
2037
  size,
1858
2038
  $isOpen: isMenuOpen,
1859
2039
  hasWarning: field.hasWarning,
1860
2040
  hasError: field.hasError,
1861
- value: displayValue,
1862
2041
  $selectedItemStyle: selectedOption?.PLEASE_DO_NOT_USE_labelFontStyle
1863
2042
  }),
1864
2043
  /* @__PURE__ */ jsx(CaretButton, {
@@ -1887,17 +2066,21 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1887
2066
  size,
1888
2067
  children: /* @__PURE__ */ jsx(SearchInput, {
1889
2068
  $embedded: embedded,
1890
- ...searchInputProps,
2069
+ ...mode.getQueryInputProps({
2070
+ ...searchInputProps,
2071
+ value: inputValue
2072
+ }),
1891
2073
  size,
1892
2074
  hasWarning: field.hasWarning,
1893
2075
  hasError: field.hasError,
1894
- value: inputValue,
1895
2076
  autoComplete: "off"
1896
2077
  })
1897
2078
  })
1898
2079
  }), /* @__PURE__ */ jsx(SingleSelectScrollableMenuList, {
1899
2080
  $embedded: embedded,
1900
2081
  tabIndex: -1,
2082
+ ref: mode.scrollRef,
2083
+ onScroll: mode.onScroll,
1901
2084
  children: isMenuOpen && /* @__PURE__ */ jsxs(Fragment$1, { children: [
1902
2085
  showBackRow && /* @__PURE__ */ jsxs(BackRow, {
1903
2086
  type: "button",
@@ -1926,6 +2109,7 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1926
2109
  size,
1927
2110
  children: emptyStateMessage
1928
2111
  }),
2112
+ mode.loadingMore,
1929
2113
  showFooterAction && footerAction && /* @__PURE__ */ jsx(FooterActionRow, {
1930
2114
  action: footerAction,
1931
2115
  size,
@@ -1955,4 +2139,4 @@ const Combobox = forwardRef(ComboboxComponent);
1955
2139
  //#endregion
1956
2140
  export { CaretButton as n, flattenOptions as r, Combobox as t };
1957
2141
 
1958
- //# sourceMappingURL=Combobox-Gb_j1dg6.mjs.map
2142
+ //# sourceMappingURL=Combobox-BkK_tosd.mjs.map