@procore/core-react 12.35.0 → 12.37.0

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 (279) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/AnchorNavigation/AnchorNavigation.styles.js +3 -3
  3. package/dist/Avatar/Avatar.styles.js +5 -5
  4. package/dist/AvatarStack/AvatarStack.styles.js +7 -7
  5. package/dist/Badge/Badge.styles.js +2 -2
  6. package/dist/BadgePill/BadgePill.styles.js +4 -4
  7. package/dist/Banner/Banner.styles.js +10 -10
  8. package/dist/Box/Box.styles.js +1 -1
  9. package/dist/Breadcrumbs/Breadcrumbs.styles.js +4 -4
  10. package/dist/Button/Button.js +0 -1
  11. package/dist/Button/Button.js.map +1 -1
  12. package/dist/Button/Button.styles.js +5 -5
  13. package/dist/Calendar/Calendar.styles.js +9 -9
  14. package/dist/Card/Card.styles.js +1 -1
  15. package/dist/Checkbox/Checkbox.styles.js +6 -6
  16. package/dist/Checkbox/CheckboxTooltip.js +1 -1
  17. package/dist/ContactItem/ContactItem.styles.js +5 -5
  18. package/dist/Content/Content.styles.js +2 -2
  19. package/dist/DateInput/DateInput.js +2 -3
  20. package/dist/DateInput/DateInput.js.map +1 -1
  21. package/dist/DateInput/DateInput.styles.js +9 -9
  22. package/dist/DateInput/DateInput.styles.js.map +1 -1
  23. package/dist/DateSelect/DateSelect.js +1 -1
  24. package/dist/DateSelect/DateSelect.js.map +1 -1
  25. package/dist/DetailPage/DetailPage.styles.js +7 -7
  26. package/dist/Dropdown/Dropdown.js +0 -4
  27. package/dist/Dropdown/Dropdown.js.map +1 -1
  28. package/dist/Dropdown/Dropdown.styles.js +3 -3
  29. package/dist/DropdownFlyout/DropdownFlyout.js +8 -3
  30. package/dist/DropdownFlyout/DropdownFlyout.js.map +1 -1
  31. package/dist/DropdownFlyout/DropdownFlyout.styles.js +4 -4
  32. package/dist/DropdownFlyout/DropdownFlyout.types.d.ts +1 -0
  33. package/dist/DropdownFlyout/DropdownFlyout.types.js.map +1 -1
  34. package/dist/Dropzone/Dropzone.js +1 -1
  35. package/dist/Dropzone/Dropzone.styles.js +9 -9
  36. package/dist/EmptyState/EmptyState.styles.js +6 -6
  37. package/dist/Field/Field.styles.js +3 -3
  38. package/dist/FileList/FileList.styles.js +4 -4
  39. package/dist/FileSelect/FileExplorer/FileExplorer.styles.js +9 -9
  40. package/dist/FileSelect/FileExplorer/FileExplorerSidebar.styles.js +3 -3
  41. package/dist/FileSelect/FileSelect.styles.js +2 -2
  42. package/dist/FileSelect/FileSelectDropzone/FileSelectDropzone.styles.js +3 -3
  43. package/dist/FileSelect/FileTokenList/FileTokenList.styles.js +2 -2
  44. package/dist/FileSelect/GridSource/GridSource.js +2 -1
  45. package/dist/FileSelect/GridSource/GridSource.js.map +1 -1
  46. package/dist/FileSelect/GridSource/GridSource.styles.js +6 -6
  47. package/dist/FileSelect/LocalSource/LocalSource.styles.js +4 -4
  48. package/dist/FileSelect/SourceItem/SourceItem.js +19 -16
  49. package/dist/FileSelect/SourceItem/SourceItem.js.map +1 -1
  50. package/dist/FileSelect/SourceItem/SourceItem.styles.js +3 -3
  51. package/dist/FileSelect/ThumbnailList/ThumbnailList.styles.js +6 -6
  52. package/dist/FileSelect/TreeSource/TreeSource.styles.js +1 -1
  53. package/dist/FileToken/FileToken.styles.js +4 -4
  54. package/dist/FilterToken/FilterToken.styles.js +5 -5
  55. package/dist/FlexList/FlexList.styles.js +1 -1
  56. package/dist/Form/Form.styles.js +14 -14
  57. package/dist/Form/StyledFormikForm.styles.js +2 -2
  58. package/dist/GhostPlaceholder/GhostPlaceholder.styles.js +2 -2
  59. package/dist/Grid/Grid.styles.js +2 -2
  60. package/dist/GroupSelect/GroupSelect.styles.js +1 -1
  61. package/dist/Input/Input.styles.js +2 -2
  62. package/dist/Input/Input.styles.js.map +1 -1
  63. package/dist/Link/Link.styles.js +1 -1
  64. package/dist/ListPage/ListPage.styles.js +8 -8
  65. package/dist/Loader/Loader.styles.js +2 -2
  66. package/dist/MenuImperative/MenuImperative.styles.js +10 -10
  67. package/dist/Modal/Modal.styles.js +13 -13
  68. package/dist/MultiSelect/MultiSelect.js +3 -3
  69. package/dist/MultiSelect/MultiSelect.js.map +1 -1
  70. package/dist/MultiSelect/MultiSelect.styles.d.ts +7 -4
  71. package/dist/MultiSelect/MultiSelect.styles.js +18 -10
  72. package/dist/MultiSelect/MultiSelect.styles.js.map +1 -1
  73. package/dist/NextMenu/NextMenu.styles.js +3 -3
  74. package/dist/Notation/Notation.js +1 -1
  75. package/dist/NumberInput/NumberInput.styles.js +9 -9
  76. package/dist/NumberInput/NumberInput.styles.js.map +1 -1
  77. package/dist/Overlay/OverlayArrow.styles.js +1 -1
  78. package/dist/OverlayTrigger/OverlayTrigger.js +16 -0
  79. package/dist/OverlayTrigger/OverlayTrigger.js.map +1 -1
  80. package/dist/PageLayout/PageLayout.styles.js +16 -16
  81. package/dist/PageTemplate/PageFooterTemplate/PageFooterTemplate.styles.js +1 -1
  82. package/dist/PageTemplate/PageHeaderTemplate/PageHeaderTemplate.styles.js +3 -3
  83. package/dist/PageTemplate/PagePaneTemplate/PagePaneTemplate.styles.js +2 -2
  84. package/dist/PageTemplate/PageTemplate/PageTemplate.styles.js +3 -3
  85. package/dist/Pagination/Pagination.styles.js +6 -6
  86. package/dist/Pagination/Pagination.styles.js.map +1 -1
  87. package/dist/Pagination/Pagination.types.d.ts +4 -0
  88. package/dist/Pagination/Pagination.types.js.map +1 -1
  89. package/dist/Pagination/PaginationSelect.js +59 -3
  90. package/dist/Pagination/PaginationSelect.js.map +1 -1
  91. package/dist/Panel/Panel.styles.js +11 -11
  92. package/dist/Pill/Pill.styles.js +3 -3
  93. package/dist/PillSelect/PillSelect.styles.js +4 -4
  94. package/dist/Popover/Popover.styles.js +2 -2
  95. package/dist/Portal/Portal.styles.js +1 -1
  96. package/dist/ProgressBar/ProgressBar.styles.js +2 -2
  97. package/dist/RadioButton/RadioButton.styles.js +4 -4
  98. package/dist/RadioButton/RadioButton.styles.js.map +1 -1
  99. package/dist/Required/Required.styles.js +3 -3
  100. package/dist/Search/Search.styles.js +5 -5
  101. package/dist/Section/Section.styles.js +7 -7
  102. package/dist/SegmentedController/SegmentedController.js +1 -1
  103. package/dist/SegmentedController/SegmentedController.js.map +1 -1
  104. package/dist/SegmentedController/SegmentedController.styles.js +4 -4
  105. package/dist/Select/Select.js +16 -11
  106. package/dist/Select/Select.js.map +1 -1
  107. package/dist/Select/Select.styles.d.ts +5 -1
  108. package/dist/Select/Select.styles.js +45 -35
  109. package/dist/Select/Select.styles.js.map +1 -1
  110. package/dist/Semantic/Semantic.styles.d.ts +4 -4
  111. package/dist/Semantic/Semantic.styles.js +9 -9
  112. package/dist/Slider/Slider.js +3 -1
  113. package/dist/Slider/Slider.js.map +1 -1
  114. package/dist/Slider/Slider.styles.js +5 -5
  115. package/dist/Spinner/Spinner.styles.js +7 -7
  116. package/dist/SplitViewCard/SplitViewCard.styles.js +8 -8
  117. package/dist/SuperSelect/SuperSelect.components.js +19 -12
  118. package/dist/SuperSelect/SuperSelect.components.js.map +1 -1
  119. package/dist/SuperSelect/SuperSelect.js +1 -1
  120. package/dist/SuperSelect/SuperSelect.js.map +1 -1
  121. package/dist/SuperSelect/SuperSelect.presets.styles.js +1 -1
  122. package/dist/SuperSelect/SuperSelect.styles.js +41 -41
  123. package/dist/SuperSelect/SuperSelect.styles.js.map +1 -1
  124. package/dist/SuperSelect/SuperSelect.types.d.ts +4 -0
  125. package/dist/SuperSelect/SuperSelect.types.js.map +1 -1
  126. package/dist/SuperSelect/SuperSelect.utils.d.ts +2 -1
  127. package/dist/SuperSelect/SuperSelect.utils.js +17 -0
  128. package/dist/SuperSelect/SuperSelect.utils.js.map +1 -1
  129. package/dist/SuperSelect/useSuperSelect.d.ts +1 -1
  130. package/dist/SuperSelect/useSuperSelect.js +75 -46
  131. package/dist/SuperSelect/useSuperSelect.js.map +1 -1
  132. package/dist/Switch/Switch.styles.js +4 -4
  133. package/dist/Table/Table.styles.js +64 -61
  134. package/dist/Table/Table.styles.js.map +1 -1
  135. package/dist/TableShelf/TableShelf.styles.js +5 -5
  136. package/dist/Tabs/Tabs.styles.js +15 -15
  137. package/dist/Tearsheet/Tearsheet.styles.js +5 -5
  138. package/dist/TextArea/TextArea.styles.js +1 -1
  139. package/dist/TextEditorOutput/TextEditorOutput.styles.js +1 -1
  140. package/dist/Thumbnail/Thumbnail.styles.js +17 -17
  141. package/dist/ThumbnailGrid/ThumbnailGrid.styles.js +7 -7
  142. package/dist/TieredSelect/TierSelectionTieredSelect.js +12 -2
  143. package/dist/TieredSelect/TierSelectionTieredSelect.js.map +1 -1
  144. package/dist/TieredSelect/TieredSelect.js +18 -5
  145. package/dist/TieredSelect/TieredSelect.js.map +1 -1
  146. package/dist/TieredSelect/TieredSelect.styles.js +9 -9
  147. package/dist/TieredSelect/TieredSelectMenu.js +9 -2
  148. package/dist/TieredSelect/TieredSelectMenu.js.map +1 -1
  149. package/dist/Tile/Tile.styles.js +8 -8
  150. package/dist/Title/Title.styles.js +7 -7
  151. package/dist/Toast/Toast.styles.js +3 -3
  152. package/dist/ToggleButton/ToggleButton.styles.js +1 -1
  153. package/dist/Token/Token.styles.js +3 -3
  154. package/dist/ToolHeader/ToolHeader.styles.js +6 -6
  155. package/dist/ToolLandingPage/ToolLandingPage.styles.js +3 -3
  156. package/dist/Tooltip/Tooltip.styles.js +2 -2
  157. package/dist/Tooltip/Tooltip.types.d.ts +4 -0
  158. package/dist/Tooltip/Tooltip.types.js.map +1 -1
  159. package/dist/Tree/Tree.hooks.js +11 -6
  160. package/dist/Tree/Tree.hooks.js.map +1 -1
  161. package/dist/Tree/Tree.js +142 -49
  162. package/dist/Tree/Tree.js.map +1 -1
  163. package/dist/Tree/Tree.styles.d.ts +5 -0
  164. package/dist/Tree/Tree.styles.js +17 -9
  165. package/dist/Tree/Tree.styles.js.map +1 -1
  166. package/dist/Tree/Tree.types.d.ts +21 -1
  167. package/dist/Tree/Tree.types.js.map +1 -1
  168. package/dist/Typeahead/Typeahead.styles.js +3 -3
  169. package/dist/Typography/Typography.styles.js +1 -1
  170. package/dist/Typography/Typography.table.story.js +2 -2
  171. package/dist/_hooks/I18n.d.ts +38 -22
  172. package/dist/_locales/de-DE.json +4 -2
  173. package/dist/_locales/en-AU.json +3 -1
  174. package/dist/_locales/en-CA.json +3 -1
  175. package/dist/_locales/en-GB.json +3 -1
  176. package/dist/_locales/en.json +2 -0
  177. package/dist/_locales/es-ES.json +3 -1
  178. package/dist/_locales/es.json +5 -3
  179. package/dist/_locales/fr-CA.json +4 -2
  180. package/dist/_locales/fr-FR.json +6 -4
  181. package/dist/_locales/is-IS.json +4 -2
  182. package/dist/_locales/it-IT.json +49 -47
  183. package/dist/_locales/ja-JP.json +6 -4
  184. package/dist/_locales/pl-PL.json +3 -1
  185. package/dist/_locales/pseudo.json +2 -0
  186. package/dist/_locales/pt-BR.json +6 -4
  187. package/dist/_locales/pt-PT.json +13 -11
  188. package/dist/_locales/th-TH.json +6 -4
  189. package/dist/_locales/zh-SG.json +3 -1
  190. package/dist/_locales/zh-TW.json +7 -5
  191. package/dist/_storyHelpers_/components/Deprecation.styles.js +1 -1
  192. package/dist/_storyHelpers_/components/StoryGrid.js +3 -3
  193. package/dist/_styles/colors.js +7 -3
  194. package/dist/_styles/colors.js.map +1 -1
  195. package/dist/_typedoc/AnchorNavigation/AnchorNavigation.types.json +3 -3
  196. package/dist/_typedoc/Avatar/Avatar.types.json +20 -20
  197. package/dist/_typedoc/AvatarStack/AvatarStack.types.json +24 -24
  198. package/dist/_typedoc/Badge/Badge.types.json +6 -6
  199. package/dist/_typedoc/Banner/Banner.types.json +13 -13
  200. package/dist/_typedoc/Box/Box.types.json +68 -68
  201. package/dist/_typedoc/Breadcrumbs/Breadcrumbs.types.json +10 -10
  202. package/dist/_typedoc/Button/Button.types.json +13 -13
  203. package/dist/_typedoc/Calendar/Calendar.types.json +80 -80
  204. package/dist/_typedoc/Card/Card.types.json +6 -6
  205. package/dist/_typedoc/Checkbox/Checkbox.types.json +8 -8
  206. package/dist/_typedoc/ContactItem/ContactItem.types.json +9 -9
  207. package/dist/_typedoc/DateInput/DateInput.types.json +35 -35
  208. package/dist/_typedoc/DateSelect/DateSelect.types.json +13 -13
  209. package/dist/_typedoc/DetailPage/DetailPage.types.json +5 -5
  210. package/dist/_typedoc/Dropdown/Dropdown.types.json +37 -37
  211. package/dist/_typedoc/DropdownFlyout/DropdownFlyout.types.json +40 -30
  212. package/dist/_typedoc/Dropzone/Dropzone.types.json +44 -44
  213. package/dist/_typedoc/EmptyState/EmptyState.types.json +16 -16
  214. package/dist/_typedoc/FileList/FileList.types.json +9 -9
  215. package/dist/_typedoc/FileSelect/FileSelect.types.json +27 -27
  216. package/dist/_typedoc/FileSelect/GridSource/GridSource.types.json +20 -20
  217. package/dist/_typedoc/FileSelect/LocalSource/LocalSource.types.json +14 -14
  218. package/dist/_typedoc/FileSelect/TreeSource/TreeSource.types.json +9 -9
  219. package/dist/_typedoc/Flex/Flex.types.json +27 -27
  220. package/dist/_typedoc/FlexList/FlexList.types.json +30 -30
  221. package/dist/_typedoc/Form/Form.types.json +750 -750
  222. package/dist/_typedoc/GhostPlaceholder/GhostPlaceholder.types.json +12 -12
  223. package/dist/_typedoc/Grid/Grid.types.json +8 -8
  224. package/dist/_typedoc/GroupSelect/GroupSelect.types.json +52 -52
  225. package/dist/_typedoc/Input/Input.types.json +2 -2
  226. package/dist/_typedoc/Link/Link.types.json +1 -1
  227. package/dist/_typedoc/ListPage/ListPage.types.json +13 -13
  228. package/dist/_typedoc/Menu/Menu.types.json +62 -62
  229. package/dist/_typedoc/MenuImperative/MenuImperative.types.json +77 -77
  230. package/dist/_typedoc/Modal/Modal.types.json +46 -46
  231. package/dist/_typedoc/MultiSelect/MultiSelect.types.json +31 -31
  232. package/dist/_typedoc/NextTile/NextTile.types.json +32 -32
  233. package/dist/_typedoc/Notation/Notation.types.json +4 -4
  234. package/dist/_typedoc/NumberInput/NumberInput.types.json +48 -48
  235. package/dist/_typedoc/OverlayTrigger/OverlayTrigger.types.json +32 -32
  236. package/dist/_typedoc/PageLayout/PageLayout.types.json +26 -26
  237. package/dist/_typedoc/Pagination/Pagination.types.json +7 -7
  238. package/dist/_typedoc/Panel/Panel.types.json +30 -30
  239. package/dist/_typedoc/Pill/Pill.types.json +2 -2
  240. package/dist/_typedoc/PillSelect/PillSelect.types.json +49 -49
  241. package/dist/_typedoc/Popover/Popover.types.json +15 -15
  242. package/dist/_typedoc/ProgressBar/ProgressBar.types.json +7 -7
  243. package/dist/_typedoc/RadioButton/RadioButton.types.json +6 -6
  244. package/dist/_typedoc/Required/Required.types.json +5 -5
  245. package/dist/_typedoc/Search/Search.types.json +18 -18
  246. package/dist/_typedoc/Section/Section.types.json +15 -15
  247. package/dist/_typedoc/SegmentedController/SegmentedController.types.json +21 -21
  248. package/dist/_typedoc/Select/Select.types.json +60 -60
  249. package/dist/_typedoc/SettingsPage/SettingsPage.types.json +10 -10
  250. package/dist/_typedoc/Slider/Slider.types.json +6 -6
  251. package/dist/_typedoc/Spinner/Spinner.types.json +9 -9
  252. package/dist/_typedoc/SplitViewCard/SplitViewCard.types.json +14 -14
  253. package/dist/_typedoc/Table/Table.types.json +102 -102
  254. package/dist/_typedoc/Tabs/Tabs.types.json +20 -20
  255. package/dist/_typedoc/Tearsheet/Tearsheet.types.json +17 -17
  256. package/dist/_typedoc/TextArea/TextArea.types.json +3 -3
  257. package/dist/_typedoc/TextEditor/TextEditor.types.json +11 -11
  258. package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +4 -4
  259. package/dist/_typedoc/Thumbnail/Thumbnail.types.json +19 -19
  260. package/dist/_typedoc/TieredDropdown/TieredDropdown.types.json +43 -43
  261. package/dist/_typedoc/TieredSelect/TieredSelect.types.json +29 -29
  262. package/dist/_typedoc/Tile/Tile.types.json +8 -8
  263. package/dist/_typedoc/Title/Title.types.json +1 -1
  264. package/dist/_typedoc/Toast/Toast.types.json +4 -4
  265. package/dist/_typedoc/ToggleButton/ToggleButton.types.json +4 -4
  266. package/dist/_typedoc/Token/Token.types.json +7 -7
  267. package/dist/_typedoc/ToolHeader/ToolHeader.types.json +10 -10
  268. package/dist/_typedoc/ToolLandingPage/ToolLandingPage.types.json +8 -8
  269. package/dist/_typedoc/Tooltip/Tooltip.types.json +23 -13
  270. package/dist/_typedoc/Tree/Tree.types.json +111 -86
  271. package/dist/_typedoc/Typeahead/Typeahead.types.json +2 -2
  272. package/dist/_typedoc/Typography/Typography.types.json +9 -9
  273. package/dist/_typedoc/_utils/types.json +3 -3
  274. package/dist/_utils/storybookTooltip.d.ts +2 -0
  275. package/dist/_utils/storybookTooltip.js +12 -0
  276. package/dist/_utils/storybookTooltip.js.map +1 -0
  277. package/dist/_utils/triggerListeners.js +2 -2
  278. package/dist/_utils/triggerListeners.js.map +1 -1
  279. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SuperSelect.utils.js","names":["isOptgroupSymbol","isOptSelectAllSymbol","getGroupNameIsValid","groupName","isGroupDefined","undefined","includes","length","getOptionsSortingAlgorithm","_ref","getOptionIsBatch","getOptionLabel","a","b","isOptionBatch1","isOptionBatch2","compareStrings","getBatchOptionFormatter","_ref2","value","multiple","getOptionValue","option","isMultiple","val","disabled","Array","isArray","every","v","_objectSpread","RESERVED_UNGROUPED_OPTGROUP_NAME","collectGroupsInOrderOfOccurrence","opts","getOptionGroup","output","reduce","_ref3","_groupedOptions$adjus","groups","groupedOptions","isGroupNameValid","adjustedGroupName","groupOptions","push","concat","_toConsumableArray","filter","group","findParentOptgroup","list","index","i","isOptgroup","getOptionIsOptgroup","id","reorder","options","startIndex","endIndex","nextOptions","_nextOptions$splice","splice","_nextOptions$splice2","_slicedToArray","removed","prevGroup","nextGroup","localeCompare","numeric","sensitivity","item","Boolean","getOptionIsOptSelectAll","sortOptgroups","groupA","groupB","getIsAllOptionsUngrouped","createOptgroup","optgroupHeader","_defineProperty","removeEmptyOptGroups","opt","arr","currentElementIsLast","currentElementIsOptgroup","nextElementIsOptgroup"],"sources":["../../src/SuperSelect/SuperSelect.utils.ts"],"sourcesContent":["import { isOptgroupSymbol, isOptSelectAllSymbol } from './SuperSelect.constants'\nimport type {\n SuperSelectConfig,\n SuperSelectOptgroup,\n SuperSelectOption,\n} from './SuperSelect.types'\n\nexport const getGroupNameIsValid = (groupName: unknown) => {\n const isGroupDefined = ![undefined, null, ''].includes(groupName as string)\n\n return isGroupDefined && typeof groupName === 'string' && groupName.length > 0\n}\n\nexport const getOptionsSortingAlgorithm =\n ({\n getOptionIsBatch,\n getOptionLabel,\n }: {\n getOptionIsBatch: NonNullable<SuperSelectConfig['getOptionIsBatch']>\n getOptionLabel: NonNullable<SuperSelectConfig['getOptionLabel']>\n }) =>\n (a: SuperSelectOption, b: SuperSelectOption) => {\n const isOptionBatch1 = getOptionIsBatch(a)\n const isOptionBatch2 = getOptionIsBatch(b)\n\n // move batched options up\n if (isOptionBatch1 && isOptionBatch2) {\n return compareStrings(getOptionLabel(a), getOptionLabel(b))\n } else if (isOptionBatch1) {\n return -1\n } else if (isOptionBatch2) {\n return 1\n }\n\n return compareStrings(getOptionLabel(a), getOptionLabel(b))\n }\n\nexport const getBatchOptionFormatter =\n ({\n value,\n multiple,\n getOptionIsBatch,\n getOptionValue,\n }: {\n value: SuperSelectConfig['value']\n multiple: NonNullable<SuperSelectConfig['multiple']>\n getOptionIsBatch: NonNullable<SuperSelectConfig['getOptionIsBatch']>\n getOptionValue: NonNullable<SuperSelectConfig['getOptionValue']>\n }) =>\n (option: SuperSelectOption) => {\n if (isMultiple(multiple, value) && getOptionIsBatch(option)) {\n const val = getOptionValue(option)\n\n const disabled = Array.isArray(val) && val.every((v) => value.includes(v))\n\n return {\n ...option,\n disabled,\n }\n }\n return option\n }\n\nexport const RESERVED_UNGROUPED_OPTGROUP_NAME =\n 'RESERVED_UNGROUPED_OPTGROUP_NAME'\n\nexport const collectGroupsInOrderOfOccurrence = (\n opts: SuperSelectOption[],\n getOptionGroup: NonNullable<SuperSelectConfig['getOptionGroup']>\n): {\n groups: string[]\n groupedOptions: Record<string, SuperSelectOption[]>\n} => {\n const output: {\n groups: string[]\n groupedOptions: Record<string, SuperSelectOption[]>\n } = opts.reduce(\n ({ groups, groupedOptions }, option) => {\n const groupName = getOptionGroup(option)\n\n // if group name is invalid, consider the option ungrouped\n const isGroupNameValid = getGroupNameIsValid(groupName)\n const adjustedGroupName = isGroupNameValid\n ? groupName\n : RESERVED_UNGROUPED_OPTGROUP_NAME\n\n const groupOptions = groupedOptions[adjustedGroupName] ?? []\n\n // push/assign for performance considerations\n groupOptions.push(option)\n groupedOptions[adjustedGroupName] = groupOptions\n\n return {\n groups: groups.includes(adjustedGroupName)\n ? groups\n : [...groups, adjustedGroupName],\n groupedOptions,\n }\n },\n {\n groups: [],\n groupedOptions: {},\n }\n )\n\n // if ungrouped options were found, lift them to the top\n if (output.groups.includes(RESERVED_UNGROUPED_OPTGROUP_NAME)) {\n return {\n groupedOptions: output.groupedOptions,\n groups: [\n RESERVED_UNGROUPED_OPTGROUP_NAME,\n ...output.groups.filter(\n (group) => group !== RESERVED_UNGROUPED_OPTGROUP_NAME\n ),\n ],\n }\n }\n\n return output\n}\n\nfunction findParentOptgroup(list: SuperSelectOption[], index: number) {\n for (let i = index; i >= 0; i--) {\n const option = list[i]\n const isOptgroup = getOptionIsOptgroup(option)\n\n if (isOptgroup) {\n return option.id\n }\n }\n // no parent optgroup was found, so the option is considered ungrouped\n return RESERVED_UNGROUPED_OPTGROUP_NAME\n}\n\nexport function reorder(\n options: SuperSelectOption[],\n startIndex: number,\n endIndex: number\n) {\n const nextOptions = [...options]\n const [removed] = nextOptions.splice(startIndex, 1)\n nextOptions.splice(endIndex, 0, removed)\n\n const prevGroup = findParentOptgroup(options, startIndex)\n const nextGroup = findParentOptgroup(nextOptions, endIndex)\n\n return { nextOptions, prevGroup, nextGroup }\n}\n\nfunction compareStrings(a: string, b: string) {\n return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' })\n}\n\nexport function isMultiple<T>(multiple: boolean, value: T | T[]): value is T[] {\n return multiple && Array.isArray(value)\n}\n\nexport const getOptionIsOptgroup = (\n item: SuperSelectOption\n): item is SuperSelectOptgroup => {\n return Boolean(item[isOptgroupSymbol])\n}\n\nexport const getOptionIsOptSelectAll = (\n item: SuperSelectOption\n): item is SuperSelectOptgroup => {\n return Boolean(item[isOptSelectAllSymbol])\n}\n\nexport const sortOptgroups = (groupA: string, groupB: string) => {\n // always put ungrouped options on top\n if (groupA === RESERVED_UNGROUPED_OPTGROUP_NAME) {\n return -1\n }\n if (groupB === RESERVED_UNGROUPED_OPTGROUP_NAME) {\n return 1\n }\n return compareStrings(groupA, groupB)\n}\n\nexport function getIsAllOptionsUngrouped(groups: string[]) {\n return groups.length === 1 && groups[0] === RESERVED_UNGROUPED_OPTGROUP_NAME\n}\n\nexport function createOptgroup(\n groupName: string,\n groupOptions: SuperSelectOption[]\n) {\n // ungrouped options should not have a group header\n if (groupName === RESERVED_UNGROUPED_OPTGROUP_NAME) {\n return groupOptions\n }\n\n const optgroupHeader: SuperSelectOptgroup = {\n [isOptgroupSymbol]: true,\n id: groupName,\n label: groupName,\n }\n\n return [optgroupHeader, ...groupOptions]\n}\n\nexport function removeEmptyOptGroups(options: SuperSelectOption[]) {\n return options.filter((opt, index, arr) => {\n const currentElementIsLast = index === arr.length - 1\n const currentElementIsOptgroup = getOptionIsOptgroup(opt)\n const nextElementIsOptgroup =\n !currentElementIsLast && getOptionIsOptgroup(arr[index + 1])\n\n return !(\n currentElementIsOptgroup &&\n (nextElementIsOptgroup || currentElementIsLast)\n )\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SuperSelect.utils.js","names":["isOptgroupSymbol","isOptSelectAllSymbol","getGroupNameIsValid","groupName","isGroupDefined","undefined","includes","length","getOptionsSortingAlgorithm","_ref","getOptionIsBatch","getOptionLabel","a","b","isOptionBatch1","isOptionBatch2","compareStrings","getBatchOptionFormatter","_ref2","value","multiple","getOptionValue","option","isMultiple","val","disabled","Array","isArray","every","v","_objectSpread","RESERVED_UNGROUPED_OPTGROUP_NAME","collectGroupsInOrderOfOccurrence","opts","getOptionGroup","output","reduce","_ref3","_groupedOptions$adjus","groups","groupedOptions","isGroupNameValid","adjustedGroupName","groupOptions","push","concat","_toConsumableArray","filter","group","findParentOptgroup","list","index","i","isOptgroup","getOptionIsOptgroup","id","reorder","options","startIndex","endIndex","nextOptions","_nextOptions$splice","splice","_nextOptions$splice2","_slicedToArray","removed","prevGroup","nextGroup","localeCompare","numeric","sensitivity","item","Boolean","getOptionIsOptSelectAll","sortOptgroups","groupA","groupB","getIsAllOptionsUngrouped","createOptgroup","optgroupHeader","_defineProperty","removeEmptyOptGroups","opt","arr","currentElementIsLast","currentElementIsOptgroup","nextElementIsOptgroup","defaultOnUnselectAll","searchValue","getValue","currentValue","valueSet","Set","filteredOptions","forEach","from"],"sources":["../../src/SuperSelect/SuperSelect.utils.ts"],"sourcesContent":["import { isOptgroupSymbol, isOptSelectAllSymbol } from './SuperSelect.constants'\nimport type {\n SuperSelectConfig,\n SuperSelectOptgroup,\n SuperSelectOption,\n SuperSelectValue,\n SuperSelectValuePrimitive,\n} from './SuperSelect.types'\n\nexport const getGroupNameIsValid = (groupName: unknown) => {\n const isGroupDefined = ![undefined, null, ''].includes(groupName as string)\n\n return isGroupDefined && typeof groupName === 'string' && groupName.length > 0\n}\n\nexport const getOptionsSortingAlgorithm =\n ({\n getOptionIsBatch,\n getOptionLabel,\n }: {\n getOptionIsBatch: NonNullable<SuperSelectConfig['getOptionIsBatch']>\n getOptionLabel: NonNullable<SuperSelectConfig['getOptionLabel']>\n }) =>\n (a: SuperSelectOption, b: SuperSelectOption) => {\n const isOptionBatch1 = getOptionIsBatch(a)\n const isOptionBatch2 = getOptionIsBatch(b)\n\n // move batched options up\n if (isOptionBatch1 && isOptionBatch2) {\n return compareStrings(getOptionLabel(a), getOptionLabel(b))\n } else if (isOptionBatch1) {\n return -1\n } else if (isOptionBatch2) {\n return 1\n }\n\n return compareStrings(getOptionLabel(a), getOptionLabel(b))\n }\n\nexport const getBatchOptionFormatter =\n ({\n value,\n multiple,\n getOptionIsBatch,\n getOptionValue,\n }: {\n value: SuperSelectConfig['value']\n multiple: NonNullable<SuperSelectConfig['multiple']>\n getOptionIsBatch: NonNullable<SuperSelectConfig['getOptionIsBatch']>\n getOptionValue: NonNullable<SuperSelectConfig['getOptionValue']>\n }) =>\n (option: SuperSelectOption) => {\n if (isMultiple(multiple, value) && getOptionIsBatch(option)) {\n const val = getOptionValue(option)\n\n const disabled = Array.isArray(val) && val.every((v) => value.includes(v))\n\n return {\n ...option,\n disabled,\n }\n }\n return option\n }\n\nexport const RESERVED_UNGROUPED_OPTGROUP_NAME =\n 'RESERVED_UNGROUPED_OPTGROUP_NAME'\n\nexport const collectGroupsInOrderOfOccurrence = (\n opts: SuperSelectOption[],\n getOptionGroup: NonNullable<SuperSelectConfig['getOptionGroup']>\n): {\n groups: string[]\n groupedOptions: Record<string, SuperSelectOption[]>\n} => {\n const output: {\n groups: string[]\n groupedOptions: Record<string, SuperSelectOption[]>\n } = opts.reduce(\n ({ groups, groupedOptions }, option) => {\n const groupName = getOptionGroup(option)\n\n // if group name is invalid, consider the option ungrouped\n const isGroupNameValid = getGroupNameIsValid(groupName)\n const adjustedGroupName = isGroupNameValid\n ? groupName\n : RESERVED_UNGROUPED_OPTGROUP_NAME\n\n const groupOptions = groupedOptions[adjustedGroupName] ?? []\n\n // push/assign for performance considerations\n groupOptions.push(option)\n groupedOptions[adjustedGroupName] = groupOptions\n\n return {\n groups: groups.includes(adjustedGroupName)\n ? groups\n : [...groups, adjustedGroupName],\n groupedOptions,\n }\n },\n {\n groups: [],\n groupedOptions: {},\n }\n )\n\n // if ungrouped options were found, lift them to the top\n if (output.groups.includes(RESERVED_UNGROUPED_OPTGROUP_NAME)) {\n return {\n groupedOptions: output.groupedOptions,\n groups: [\n RESERVED_UNGROUPED_OPTGROUP_NAME,\n ...output.groups.filter(\n (group) => group !== RESERVED_UNGROUPED_OPTGROUP_NAME\n ),\n ],\n }\n }\n\n return output\n}\n\nfunction findParentOptgroup(list: SuperSelectOption[], index: number) {\n for (let i = index; i >= 0; i--) {\n const option = list[i]\n const isOptgroup = getOptionIsOptgroup(option)\n\n if (isOptgroup) {\n return option.id\n }\n }\n // no parent optgroup was found, so the option is considered ungrouped\n return RESERVED_UNGROUPED_OPTGROUP_NAME\n}\n\nexport function reorder(\n options: SuperSelectOption[],\n startIndex: number,\n endIndex: number\n) {\n const nextOptions = [...options]\n const [removed] = nextOptions.splice(startIndex, 1)\n nextOptions.splice(endIndex, 0, removed)\n\n const prevGroup = findParentOptgroup(options, startIndex)\n const nextGroup = findParentOptgroup(nextOptions, endIndex)\n\n return { nextOptions, prevGroup, nextGroup }\n}\n\nfunction compareStrings(a: string, b: string) {\n return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' })\n}\n\nexport function isMultiple<T>(multiple: boolean, value: T | T[]): value is T[] {\n return multiple && Array.isArray(value)\n}\n\nexport const getOptionIsOptgroup = (\n item: SuperSelectOption\n): item is SuperSelectOptgroup => {\n return Boolean(item[isOptgroupSymbol])\n}\n\nexport const getOptionIsOptSelectAll = (\n item: SuperSelectOption\n): item is SuperSelectOptgroup => {\n return Boolean(item[isOptSelectAllSymbol])\n}\n\nexport const sortOptgroups = (groupA: string, groupB: string) => {\n // always put ungrouped options on top\n if (groupA === RESERVED_UNGROUPED_OPTGROUP_NAME) {\n return -1\n }\n if (groupB === RESERVED_UNGROUPED_OPTGROUP_NAME) {\n return 1\n }\n return compareStrings(groupA, groupB)\n}\n\nexport function getIsAllOptionsUngrouped(groups: string[]) {\n return groups.length === 1 && groups[0] === RESERVED_UNGROUPED_OPTGROUP_NAME\n}\n\nexport function createOptgroup(\n groupName: string,\n groupOptions: SuperSelectOption[]\n) {\n // ungrouped options should not have a group header\n if (groupName === RESERVED_UNGROUPED_OPTGROUP_NAME) {\n return groupOptions\n }\n\n const optgroupHeader: SuperSelectOptgroup = {\n [isOptgroupSymbol]: true,\n id: groupName,\n label: groupName,\n }\n\n return [optgroupHeader, ...groupOptions]\n}\n\nexport function removeEmptyOptGroups(options: SuperSelectOption[]) {\n return options.filter((opt, index, arr) => {\n const currentElementIsLast = index === arr.length - 1\n const currentElementIsOptgroup = getOptionIsOptgroup(opt)\n const nextElementIsOptgroup =\n !currentElementIsLast && getOptionIsOptgroup(arr[index + 1])\n\n return !(\n currentElementIsOptgroup &&\n (nextElementIsOptgroup || currentElementIsLast)\n )\n })\n}\n\nexport function defaultOnUnselectAll(\n value: SuperSelectValue,\n options: SuperSelectOption[],\n searchValue: string,\n getValue: (opt: SuperSelectOption) => Array<SuperSelectValuePrimitive>\n): SuperSelectValue {\n const currentValue = Array.isArray(value) ? value : []\n const valueSet = new Set(currentValue)\n\n if (searchValue) {\n const filteredOptions = options.filter((opt) => !getOptionIsOptgroup(opt))\n filteredOptions.forEach((opt) => {\n getValue(opt).forEach((val) => valueSet.delete(val))\n })\n return Array.from(valueSet)\n } else {\n return []\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import type { SuperSelectApi, SuperSelectConfig } from './SuperSelect.types';
3
- export declare function useSuperSelect({ block, components: customComponents, defaultValue, disabled, draggable, emptyMessage, selectAllEnabled, error, footer, getOptionGroup, getOptionIsBatch, getOptionIsDisabled, getOptionLabel, getOptionIsPartiallySelected, getOptionIsSelected, getOptionValue, onScrollBottom, onOpenChange, header, loading, multiple, onChange, onManualSort, onSelectAll, options: sourceOptions, placeholder, preset, presetProps, search, selectionStyle, setOptionGroup, sort, tabIndex, value: value_, overlayMatchesTriggerWidth, 'aria-label': ariaLabel, }: SuperSelectConfig): SuperSelectApi;
3
+ export declare function useSuperSelect({ block, components: customComponents, defaultValue, disabled, draggable, emptyMessage, selectAllEnabled, error, footer, getOptionGroup, getOptionIsBatch, getOptionIsDisabled, getOptionLabel, getOptionIsPartiallySelected, getOptionIsSelected, getOptionValue, onScrollBottom, onOpenChange, header, loading, multiple, onChange, onManualSort, onUnselectAll, onSelectAll, options: sourceOptions, placeholder, preset, presetProps, search, selectionStyle, setOptionGroup, sort, tabIndex, value: value_, overlayMatchesTriggerWidth, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, }: SuperSelectConfig): SuperSelectApi;
4
4
  export declare const SuperSelectContext: React.Context<SuperSelectApi | null>;
5
5
  export declare function useSuperSelectContext(): SuperSelectApi;
@@ -26,7 +26,7 @@ import { spacing } from '../_styles/spacing';
26
26
  import * as defaultComponents from './SuperSelect.components';
27
27
  import { draggableOptionIdSymbol, isOptSelectAllSymbol } from './SuperSelect.constants';
28
28
  import { extendedSelectMenuWidth } from './SuperSelect.styles';
29
- import { collectGroupsInOrderOfOccurrence, createOptgroup, getBatchOptionFormatter, getIsAllOptionsUngrouped, getOptionIsOptgroup, getOptionIsOptSelectAll, getOptionsSortingAlgorithm, isMultiple, removeEmptyOptGroups, reorder, sortOptgroups } from './SuperSelect.utils';
29
+ import { collectGroupsInOrderOfOccurrence, createOptgroup, defaultOnUnselectAll, getBatchOptionFormatter, getIsAllOptionsUngrouped, getOptionIsOptgroup, getOptionIsOptSelectAll, getOptionsSortingAlgorithm, isMultiple, removeEmptyOptGroups, reorder, sortOptgroups } from './SuperSelect.utils';
30
30
  var listContainerVerticalPadding = spacing.sm * 2;
31
31
  function noop() {}
32
32
  function defaultGetOptionValue(option) {
@@ -169,6 +169,8 @@ export function useSuperSelect(_ref3) {
169
169
  multiple = _ref3$multiple === void 0 ? false : _ref3$multiple,
170
170
  onChange = _ref3.onChange,
171
171
  onManualSort = _ref3.onManualSort,
172
+ _ref3$onUnselectAll = _ref3.onUnselectAll,
173
+ onUnselectAll = _ref3$onUnselectAll === void 0 ? defaultOnUnselectAll : _ref3$onUnselectAll,
172
174
  onSelectAll = _ref3.onSelectAll,
173
175
  _ref3$options = _ref3.options,
174
176
  sourceOptions = _ref3$options === void 0 ? [] : _ref3$options,
@@ -189,7 +191,11 @@ export function useSuperSelect(_ref3) {
189
191
  value_ = _ref3.value,
190
192
  _ref3$overlayMatchesT = _ref3.overlayMatchesTriggerWidth,
191
193
  overlayMatchesTriggerWidth = _ref3$overlayMatchesT === void 0 ? true : _ref3$overlayMatchesT,
192
- ariaLabel = _ref3['aria-label'];
194
+ ariaLabel = _ref3['aria-label'],
195
+ ariaLabelledBy = _ref3['aria-labelledby'];
196
+ var valueId = useId();
197
+ var labelId = useId();
198
+ var computedLabelledBy = ariaLabel ? undefined : ariaLabelledBy !== null && ariaLabelledBy !== void 0 ? ariaLabelledBy : labelId;
193
199
  React.useEffect(function () {
194
200
  if (!draggable) {
195
201
  return;
@@ -227,12 +233,10 @@ export function useSuperSelect(_ref3) {
227
233
  var isProcessingAutoSelectionRef = React.useRef(false);
228
234
 
229
235
  /**
230
- * Stores a snapshot of previously available selectable options as a Map.
231
- * Key: JSON stringified option value for fast lookups
232
- * Value: The SuperSelectOption object
233
- * Used to detect newly added options for auto-selection when Select All is active.
236
+ * Stores a snapshot of previously selected values to compare against
237
+ * current options for auto-selection.
234
238
  */
235
- var previousSelectableOptionsRef = React.useRef(new Set());
239
+ var previousSelectedValuesRef = React.useRef([]);
236
240
  function setValue(v) {
237
241
  if (!value_) {
238
242
  setVal(v);
@@ -271,11 +275,6 @@ export function useSuperSelect(_ref3) {
271
275
  if (!Array.isArray(currentValue) || currentSelectableOptions.length === 0) {
272
276
  return false;
273
277
  }
274
-
275
- // Early exit if values count doesn't match options count
276
- if (currentValue.length < currentSelectableOptions.length) {
277
- return false;
278
- }
279
278
  var valueSet = new Set(currentValue);
280
279
 
281
280
  // Use early termination for better performance
@@ -311,44 +310,38 @@ export function useSuperSelect(_ref3) {
311
310
  * - Single pass to build current options map and detect new ones
312
311
  * - Set-based deduplication for efficient value management
313
312
  *
314
- * @param currentSelectableOptions - Current array of selectable options
315
313
  * @param currentValue - Current selected values
316
314
  */
317
- var executeAutoSelection = React.useCallback(function (currentSelectableOptions, currentValue) {
315
+ var executeAutoSelection = React.useCallback(function (currentValue) {
318
316
  // Early exit conditions for performance
319
317
  if (!isSelectAllActive || !multiple || !Array.isArray(currentValue) || isProcessingAutoSelectionRef.current) {
320
318
  return;
321
319
  }
322
- var currentOptionKeys = new Set();
320
+ previousSelectedValuesRef.current = currentValue;
323
321
  var newlyAddedOptions = [];
324
- var _iterator2 = _createForOfIteratorHelper(currentSelectableOptions),
322
+ var currentValueSet = new Set(currentValue);
323
+ var _iterator2 = _createForOfIteratorHelper(selectableOptions),
325
324
  _step2;
326
325
  try {
327
326
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
328
327
  var _option = _step2.value;
329
- var optionKey = JSON.stringify(getOptionValue(_option));
330
- currentOptionKeys.add(optionKey);
331
- if (!previousSelectableOptionsRef.current.has(optionKey)) {
328
+ var _optionValues = getOptionValuesFlat(_option);
329
+ var hasNewValue = _optionValues.some(function (val) {
330
+ return !currentValueSet.has(val);
331
+ });
332
+ if (hasNewValue) {
332
333
  newlyAddedOptions.push(_option);
333
334
  }
334
335
  }
335
-
336
- // Update reference for next comparison
337
336
  } catch (err) {
338
337
  _iterator2.e(err);
339
338
  } finally {
340
339
  _iterator2.f();
341
340
  }
342
- previousSelectableOptionsRef.current = currentOptionKeys;
343
-
344
- // No new options to auto-select
345
341
  if (newlyAddedOptions.length === 0) {
346
342
  return;
347
343
  }
348
-
349
- // Set processing flag to prevent recursive calls
350
344
  isProcessingAutoSelectionRef.current = true;
351
- var currentValueSet = new Set(currentValue);
352
345
  var newValuesToAdd = [];
353
346
 
354
347
  // Collect new values that aren't already selected
@@ -550,9 +543,9 @@ export function useSuperSelect(_ref3) {
550
543
  */
551
544
  var autoSelectionEffect = React.useCallback(function () {
552
545
  if (selectAllEnabled && multiple && isSelectAllActive && Array.isArray(value) && value.length) {
553
- debouncedAutoSelection(selectableOptions, value);
546
+ debouncedAutoSelection(value);
554
547
  }
555
- }, [selectAllEnabled, multiple, isSelectAllActive, value, debouncedAutoSelection, selectableOptions]);
548
+ }, [selectAllEnabled, multiple, isSelectAllActive, value, debouncedAutoSelection]);
556
549
 
557
550
  /**
558
551
  * Effect that manages auto-selection behavior and cleanup.
@@ -647,6 +640,23 @@ export function useSuperSelect(_ref3) {
647
640
  var selectedLabel = React.useMemo(function () {
648
641
  return selectedOption ? getOptionLabel(selectedOption) : '';
649
642
  }, [selectedOption]);
643
+
644
+ // Active option id calculation - ensures aria-activedescendant matches the active option
645
+ // in the combined navigation list, including SelectAll.
646
+ var activeOptionId = React.useMemo(function () {
647
+ if (activeMenuIndex === null) {
648
+ return undefined;
649
+ }
650
+ var baseOptions = selectAllEnabled && multiple ? allOptionsWithSelectAll : options;
651
+ var option = baseOptions[activeMenuIndex];
652
+ if (!option) {
653
+ return undefined;
654
+ }
655
+ var val = getOptionValue(option);
656
+ return "item-".concat(val);
657
+ }, [activeMenuIndex, selectAllEnabled, multiple, allOptionsWithSelectAll, options, getOptionValue]);
658
+ var isInitialSelectedOpen = open && selectedIndex !== null && activeMenuIndex === selectedIndex;
659
+ var activeDescendantId = open && !isInitialSelectedOpen && activeOptionId ? activeOptionId : undefined;
650
660
  function isSelectableOption(o) {
651
661
  return !getOptionIsOptgroup(o) && !getOptionIsDisabled(o);
652
662
  }
@@ -678,12 +688,12 @@ export function useSuperSelect(_ref3) {
678
688
  return getIsSelected(opt);
679
689
  });
680
690
  if (allSelected) {
681
- setValue([]);
691
+ var newValue = onUnselectAll(value, options, searchValue, getOptionValuesFlat);
692
+ setValue(newValue);
682
693
  } else {
683
694
  if (onSelectAll) {
684
695
  onSelectAll(selectableOptions);
685
696
  }
686
- // Ensure we're working with an array for multiple selection
687
697
  var currentValue = Array.isArray(value) ? value : [];
688
698
  var valueSet = new Set(currentValue);
689
699
  selectableOptions.forEach(function (opt) {
@@ -700,7 +710,7 @@ export function useSuperSelect(_ref3) {
700
710
  * Select All activates when all selectable options become selected,
701
711
  * but only if it wasn't already active (prevents unnecessary state changes).
702
712
  *
703
- * @param newValue - The new array of selected values to evaluate
713
+ * @param currentSelectableOptions - Current array of selectable options to check against
704
714
  * @returns true if Select All should be activated, false otherwise
705
715
  */
706
716
  var shouldActivateSelectAll = React.useCallback(function (currentSelectableOptions) {
@@ -709,14 +719,15 @@ export function useSuperSelect(_ref3) {
709
719
 
710
720
  // Centralize select all active state
711
721
  React.useEffect(function () {
712
- var shouldBeActive = shouldActivateSelectAll(selectableOptions) && selectableOptions.length && value.length;
722
+ var shouldBeActive = shouldActivateSelectAll(selectableOptions) && selectableOptions.length && !!value.length;
713
723
 
714
724
  // When Select All is already active and new selectable options are added,
715
725
  // skip updating the Select All active state here. This allows the existing
716
726
  // auto-selection logic to handle newly added options without triggering
717
727
  // unnecessary state changes in this effect.
718
- var hasNewOptions = selectableOptions.length > previousSelectableOptionsRef.current.size;
719
- if (isSelectAllActive && hasNewOptions && value.length) {
728
+ var hasNewOptions = selectableOptions.length > previousSelectedValuesRef.current.length;
729
+ var hasRemovedValue = (value || []).length < previousSelectedValuesRef.current.length;
730
+ if (isSelectAllActive && hasNewOptions && !hasRemovedValue && value.length) {
720
731
  return;
721
732
  }
722
733
  if (shouldBeActive) {
@@ -929,22 +940,22 @@ export function useSuperSelect(_ref3) {
929
940
  $multiple: multiple,
930
941
  $open: open,
931
942
  $placeholder: !selectedLabel,
932
- 'aria-controls': search ? overlayId : listId,
943
+ 'aria-controls': overlayId,
933
944
  'aria-expanded': open,
934
- 'aria-haspopup': search ? 'dialog' : 'listbox'
945
+ 'aria-describedby': valueId,
946
+ 'aria-labelledby': computedLabelledBy
935
947
  }, ariaLabel && {
936
948
  'aria-label': ariaLabel
937
949
  }), {}, {
938
950
  onKeyDown: function onKeyDown() {
939
951
  setPointer(false);
940
952
  },
941
- role: 'combobox',
953
+ role: 'button',
942
954
  search: search,
943
955
  tabIndex: disabled ? -1 : tabIndex
944
956
  }),
945
957
  // TODO fix type
946
958
  floating: {
947
- role: search ? 'dialog' : 'none',
948
959
  id: overlayId,
949
960
  onKeyDown: function onKeyDown() {
950
961
  setPointer(false);
@@ -967,15 +978,24 @@ export function useSuperSelect(_ref3) {
967
978
  getItemProps = _useInteractions.getItemProps;
968
979
  function getLabelProps() {
969
980
  return {
970
- $hoverable: false
981
+ $hoverable: false,
982
+ id: labelId
971
983
  };
972
984
  }
973
985
  function getMultiInputProps() {
974
- return {
986
+ return _objectSpread(_objectSpread({
975
987
  ref: searchRef,
976
988
  placeholder: isEmpty() ? placeholder : '',
977
989
  disabled: disabled,
990
+ role: 'combobox',
991
+ 'aria-expanded': open,
978
992
  'aria-controls': listId,
993
+ 'aria-haspopup': 'listbox',
994
+ 'aria-labelledby': computedLabelledBy,
995
+ 'aria-activedescendant': activeDescendantId
996
+ }, ariaLabel && {
997
+ 'aria-label': ariaLabel
998
+ }), {}, {
979
999
  onKeyDown: function onKeyDown(e) {
980
1000
  if (e.key === 'Tab') {
981
1001
  if (open) {
@@ -993,7 +1013,7 @@ export function useSuperSelect(_ref3) {
993
1013
  style: {
994
1014
  opacity: activeTokenIndex === null ? 1 : 0
995
1015
  }
996
- };
1016
+ });
997
1017
  }
998
1018
  function getMultiValueProps(index) {
999
1019
  return {
@@ -1017,14 +1037,22 @@ export function useSuperSelect(_ref3) {
1017
1037
  };
1018
1038
  }
1019
1039
  function getSearchProps() {
1020
- return {
1040
+ return _objectSpread(_objectSpread({
1041
+ role: 'combobox',
1042
+ 'aria-haspopup': 'listbox',
1043
+ 'aria-expanded': open,
1021
1044
  'aria-controls': listId,
1045
+ 'aria-labelledby': computedLabelledBy,
1046
+ 'aria-activedescendant': activeDescendantId
1047
+ }, ariaLabel && {
1048
+ 'aria-label': ariaLabel
1049
+ }), {}, {
1022
1050
  onChange: function onChange(value) {
1023
1051
  setSearchValue(value);
1024
1052
  setActiveTokenIndex(null);
1025
1053
  },
1026
1054
  placeholder: i18n.t('core.select.search')
1027
- };
1055
+ });
1028
1056
  }
1029
1057
  function getHeaderProps() {
1030
1058
  return {
@@ -1051,7 +1079,6 @@ export function useSuperSelect(_ref3) {
1051
1079
  }
1052
1080
  function getClearProps() {
1053
1081
  return {
1054
- 'aria-hidden': true,
1055
1082
  'aria-label': i18n.t('core.select.clear'),
1056
1083
  onClick: function onClick(e) {
1057
1084
  // prevent the menu from closing
@@ -1078,7 +1105,7 @@ export function useSuperSelect(_ref3) {
1078
1105
  };
1079
1106
  return {
1080
1107
  role: 'listbox',
1081
- id: search ? overlayId : listId,
1108
+ id: listId,
1082
1109
  data: draggable ? queriedDraggableOptions : options,
1083
1110
  components: {
1084
1111
  Item: components === null || components === void 0 ? void 0 : components.Item // TODO fix type
@@ -1237,6 +1264,8 @@ export function useSuperSelect(_ref3) {
1237
1264
  setActiveMenuIndex: setActiveMenuIndex,
1238
1265
  sourceOptions: sourceOptions,
1239
1266
  value: value,
1267
+ labelId: labelId,
1268
+ valueId: valueId,
1240
1269
  width: width
1241
1270
  },
1242
1271
  props: {