@procore/core-react 12.38.0 → 12.40.0-beta.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 (321) hide show
  1. package/.jest/testShims.js +6 -0
  2. package/CHANGELOG.md +55 -0
  3. package/dist/AnchorNavigation/AnchorNavigation.styles.js +3 -3
  4. package/dist/Avatar/Avatar.styles.js +6 -6
  5. package/dist/Avatar/Avatar.styles.js.map +1 -1
  6. package/dist/AvatarStack/AvatarStack.d.ts +1 -1
  7. package/dist/AvatarStack/AvatarStack.js +90 -27
  8. package/dist/AvatarStack/AvatarStack.js.map +1 -1
  9. package/dist/AvatarStack/AvatarStack.styles.js +8 -8
  10. package/dist/AvatarStack/AvatarStack.styles.js.map +1 -1
  11. package/dist/AvatarStack/AvatarStack.types.d.ts +7 -0
  12. package/dist/AvatarStack/AvatarStack.types.js.map +1 -1
  13. package/dist/AvatarStack/useAvatarPopover.d.ts +14 -0
  14. package/dist/AvatarStack/useAvatarPopover.js +57 -0
  15. package/dist/AvatarStack/useAvatarPopover.js.map +1 -0
  16. package/dist/AvatarStack/useAvatarPopover.types.d.ts +4 -0
  17. package/dist/AvatarStack/useAvatarPopover.types.js +2 -0
  18. package/dist/AvatarStack/useAvatarPopover.types.js.map +1 -0
  19. package/dist/Badge/Badge.styles.js +2 -2
  20. package/dist/BadgePill/BadgePill.styles.js +4 -4
  21. package/dist/Banner/Banner.styles.js +10 -10
  22. package/dist/Box/Box.styles.js +1 -1
  23. package/dist/Breadcrumbs/Breadcrumbs.styles.js +4 -4
  24. package/dist/Button/Button.styles.js +5 -5
  25. package/dist/Calendar/Calendar.styles.js +9 -9
  26. package/dist/Card/Card.styles.js +1 -1
  27. package/dist/Checkbox/Checkbox.d.ts +0 -1
  28. package/dist/Checkbox/Checkbox.js +5 -6
  29. package/dist/Checkbox/Checkbox.js.map +1 -1
  30. package/dist/Checkbox/Checkbox.styles.js +6 -6
  31. package/dist/ContactItem/ContactItem.styles.js +5 -5
  32. package/dist/Content/Content.styles.js +2 -2
  33. package/dist/DateInput/DateInput.js +12 -2
  34. package/dist/DateInput/DateInput.js.map +1 -1
  35. package/dist/DateInput/DateInput.styles.js +6 -6
  36. package/dist/DateSelect/DateSelect.types.d.ts +1 -1
  37. package/dist/DateSelect/DateSelect.types.js.map +1 -1
  38. package/dist/DetailPage/DetailPage.styles.js +7 -7
  39. package/dist/Dropdown/Dropdown.styles.js +3 -3
  40. package/dist/DropdownFlyout/DropdownFlyout.styles.js +4 -4
  41. package/dist/Dropzone/Dropzone.js +1 -1
  42. package/dist/Dropzone/Dropzone.styles.js +9 -9
  43. package/dist/EmptyState/EmptyState.styles.js +6 -6
  44. package/dist/Field/Field.styles.js +3 -3
  45. package/dist/FileList/FileList.js +3 -7
  46. package/dist/FileList/FileList.js.map +1 -1
  47. package/dist/FileList/FileList.styles.d.ts +0 -1
  48. package/dist/FileList/FileList.styles.js +3 -7
  49. package/dist/FileList/FileList.styles.js.map +1 -1
  50. package/dist/FileSelect/FileExplorer/FileExplorer.styles.js +9 -9
  51. package/dist/FileSelect/FileExplorer/FileExplorerSidebar.styles.js +3 -3
  52. package/dist/FileSelect/FileSelect.styles.js +2 -2
  53. package/dist/FileSelect/FileSelectDropzone/FileSelectDropzone.styles.js +3 -3
  54. package/dist/FileSelect/FileTokenList/FileTokenList.styles.js +3 -3
  55. package/dist/FileSelect/FileTokenList/FileTokenList.styles.js.map +1 -1
  56. package/dist/FileSelect/GridSource/GridSource.styles.js +6 -6
  57. package/dist/FileSelect/LocalSource/LocalSource.styles.js +4 -4
  58. package/dist/FileSelect/SourceItem/SourceItem.styles.js +3 -3
  59. package/dist/FileSelect/ThumbnailList/ThumbnailList.styles.js +6 -6
  60. package/dist/FileSelect/TreeSource/TreeSource.styles.js +1 -1
  61. package/dist/FileToken/FileToken.js +6 -11
  62. package/dist/FileToken/FileToken.js.map +1 -1
  63. package/dist/FileToken/FileToken.styles.d.ts +2 -0
  64. package/dist/FileToken/FileToken.styles.js +14 -4
  65. package/dist/FileToken/FileToken.styles.js.map +1 -1
  66. package/dist/FilterToken/FilterToken.styles.js +5 -5
  67. package/dist/FlexList/FlexList.styles.js +1 -1
  68. package/dist/Form/Form.js +74 -58
  69. package/dist/Form/Form.js.map +1 -1
  70. package/dist/Form/Form.styles.d.ts +0 -14
  71. package/dist/Form/Form.styles.js +14 -24
  72. package/dist/Form/Form.styles.js.map +1 -1
  73. package/dist/Form/Form.types.d.ts +22 -2
  74. package/dist/Form/Form.types.js.map +1 -1
  75. package/dist/Form/FormFieldTooltip.js +4 -11
  76. package/dist/Form/FormFieldTooltip.js.map +1 -1
  77. package/dist/Form/StyledFormikForm.styles.js +2 -2
  78. package/dist/GhostPlaceholder/GhostPlaceholder.styles.js +2 -2
  79. package/dist/Grid/Grid.styles.js +2 -2
  80. package/dist/GroupSelect/GroupSelect.js +5 -4
  81. package/dist/GroupSelect/GroupSelect.js.map +1 -1
  82. package/dist/GroupSelect/GroupSelect.styles.js +1 -1
  83. package/dist/GroupSelect/GroupSelect.types.d.ts +5 -5
  84. package/dist/GroupSelect/GroupSelect.types.js.map +1 -1
  85. package/dist/Input/Input.styles.js +1 -1
  86. package/dist/Link/Link.styles.js +1 -1
  87. package/dist/ListPage/ListPage.styles.js +8 -8
  88. package/dist/Loader/Loader.styles.js +2 -2
  89. package/dist/Menu/Menu.js +1 -5
  90. package/dist/Menu/Menu.js.map +1 -1
  91. package/dist/MenuImperative/MenuImperative.js +7 -10
  92. package/dist/MenuImperative/MenuImperative.js.map +1 -1
  93. package/dist/MenuImperative/MenuImperative.styles.d.ts +2 -3
  94. package/dist/MenuImperative/MenuImperative.styles.js +26 -25
  95. package/dist/MenuImperative/MenuImperative.styles.js.map +1 -1
  96. package/dist/MenuImperative/MenuImperative.types.d.ts +4 -0
  97. package/dist/MenuImperative/MenuImperative.types.js.map +1 -1
  98. package/dist/MenuImperative/sensors.js +16 -58
  99. package/dist/MenuImperative/sensors.js.map +1 -1
  100. package/dist/Modal/Modal.styles.js +13 -13
  101. package/dist/MultiSelect/MultiSelect.js +50 -28
  102. package/dist/MultiSelect/MultiSelect.js.map +1 -1
  103. package/dist/MultiSelect/MultiSelect.styles.d.ts +1 -0
  104. package/dist/MultiSelect/MultiSelect.styles.js +12 -8
  105. package/dist/MultiSelect/MultiSelect.styles.js.map +1 -1
  106. package/dist/MultiSelect/MultiSelect.types.d.ts +31 -1
  107. package/dist/MultiSelect/MultiSelect.types.js.map +1 -1
  108. package/dist/NextMenu/NextMenu.styles.js +3 -3
  109. package/dist/Notation/Notation.js +1 -1
  110. package/dist/NumberInput/NumberInput.styles.js +7 -7
  111. package/dist/NumberInput/NumberInput.utils.js +10 -10
  112. package/dist/NumberInput/NumberInput.utils.js.map +1 -1
  113. package/dist/Overlay/OverlayArrow.styles.js +1 -1
  114. package/dist/OverlayTrigger/a11yPresets.js +5 -3
  115. package/dist/OverlayTrigger/a11yPresets.js.map +1 -1
  116. package/dist/PageLayout/PageLayout.js +31 -12
  117. package/dist/PageLayout/PageLayout.js.map +1 -1
  118. package/dist/PageLayout/PageLayout.styles.js +16 -16
  119. package/dist/PageLayout/PageLayout.types.d.ts +10 -0
  120. package/dist/PageLayout/PageLayout.types.js.map +1 -1
  121. package/dist/PageTemplate/PageFooterTemplate/PageFooterTemplate.styles.js +1 -1
  122. package/dist/PageTemplate/PageHeaderTemplate/PageHeaderTemplate.styles.js +3 -3
  123. package/dist/PageTemplate/PagePaneTemplate/PagePaneTemplate.styles.js +2 -2
  124. package/dist/PageTemplate/PageTemplate/PageTemplate.styles.js +3 -3
  125. package/dist/Pagination/Pagination.styles.js +5 -5
  126. package/dist/Panel/Panel.d.ts +1 -2
  127. package/dist/Panel/Panel.js +27 -49
  128. package/dist/Panel/Panel.js.map +1 -1
  129. package/dist/Panel/Panel.styles.js +13 -13
  130. package/dist/Panel/Panel.styles.js.map +1 -1
  131. package/dist/Panel/Panel.types.d.ts +0 -14
  132. package/dist/Panel/Panel.types.js.map +1 -1
  133. package/dist/Pill/Pill.styles.js +3 -3
  134. package/dist/PillSelect/PillSelect.d.ts +2 -1
  135. package/dist/PillSelect/PillSelect.js +63 -44
  136. package/dist/PillSelect/PillSelect.js.map +1 -1
  137. package/dist/PillSelect/PillSelect.styles.js +4 -4
  138. package/dist/Popover/Popover.styles.js +2 -2
  139. package/dist/Portal/Portal.styles.js +1 -1
  140. package/dist/ProgressBar/ProgressBar.styles.js +2 -2
  141. package/dist/RadioButton/RadioButton.styles.js +3 -3
  142. package/dist/Required/Required.styles.js +3 -3
  143. package/dist/Search/Search.styles.js +5 -5
  144. package/dist/Section/Section.styles.js +9 -9
  145. package/dist/Section/Section.styles.js.map +1 -1
  146. package/dist/SegmentedController/SegmentedController.js +1 -2
  147. package/dist/SegmentedController/SegmentedController.js.map +1 -1
  148. package/dist/SegmentedController/SegmentedController.styles.js +4 -4
  149. package/dist/Select/Select.d.ts +5 -4
  150. package/dist/Select/Select.js +110 -81
  151. package/dist/Select/Select.js.map +1 -1
  152. package/dist/Select/Select.styles.js +9 -9
  153. package/dist/Select/Select.styles.js.map +1 -1
  154. package/dist/Select/Select.types.d.ts +7 -0
  155. package/dist/Select/Select.types.js.map +1 -1
  156. package/dist/Select/index.d.ts +1 -1
  157. package/dist/Select/index.js.map +1 -1
  158. package/dist/Semantic/Semantic.styles.js +9 -9
  159. package/dist/Slider/Slider.styles.js +5 -5
  160. package/dist/Spinner/Spinner.styles.js +7 -7
  161. package/dist/SplitViewCard/SplitViewCard.js +13 -0
  162. package/dist/SplitViewCard/SplitViewCard.js.map +1 -1
  163. package/dist/SplitViewCard/SplitViewCard.styles.js +10 -10
  164. package/dist/SplitViewCard/SplitViewCard.styles.js.map +1 -1
  165. package/dist/SuperSelect/SuperSelect.presets.styles.js +1 -1
  166. package/dist/SuperSelect/SuperSelect.styles.js +38 -38
  167. package/dist/Switch/Switch.styles.js +4 -4
  168. package/dist/Table/Table.styles.d.ts +1 -1
  169. package/dist/Table/Table.styles.js +28 -28
  170. package/dist/TableShelf/TableShelf.styles.js +5 -5
  171. package/dist/Tabs/Tabs.js +23 -9
  172. package/dist/Tabs/Tabs.js.map +1 -1
  173. package/dist/Tabs/Tabs.styles.d.ts +2 -2
  174. package/dist/Tabs/Tabs.styles.js +26 -26
  175. package/dist/Tabs/Tabs.styles.js.map +1 -1
  176. package/dist/Tabs/Tabs.types.d.ts +6 -0
  177. package/dist/Tabs/Tabs.types.js.map +1 -1
  178. package/dist/Tearsheet/Tearsheet.styles.js +17 -28
  179. package/dist/Tearsheet/Tearsheet.styles.js.map +1 -1
  180. package/dist/Tearsheet/storybook/PageLayoutDemo.js +7 -1
  181. package/dist/Tearsheet/storybook/PageLayoutDemo.js.map +1 -1
  182. package/dist/TextArea/TextArea.styles.js +1 -1
  183. package/dist/TextEditorOutput/TextEditorOutput.styles.js +1 -1
  184. package/dist/Thumbnail/Thumbnail.styles.js +17 -17
  185. package/dist/ThumbnailGrid/ThumbnailGrid.styles.js +7 -7
  186. package/dist/TieredSelect/TieredSelect.styles.js +9 -9
  187. package/dist/Tile/Tile.styles.js +8 -8
  188. package/dist/Title/Title.styles.js +7 -7
  189. package/dist/Toast/Toast.styles.js +3 -3
  190. package/dist/ToggleButton/ToggleButton.styles.js +1 -1
  191. package/dist/Token/Token.styles.js +3 -3
  192. package/dist/ToolHeader/ToolHeader.js +3 -1
  193. package/dist/ToolHeader/ToolHeader.js.map +1 -1
  194. package/dist/ToolHeader/ToolHeader.styles.js +6 -6
  195. package/dist/ToolLandingPage/ToolLandingPage.styles.js +3 -3
  196. package/dist/Tooltip/Tooltip.d.ts +4 -2
  197. package/dist/Tooltip/Tooltip.js +30 -5
  198. package/dist/Tooltip/Tooltip.js.map +1 -1
  199. package/dist/Tooltip/Tooltip.styles.d.ts +1 -0
  200. package/dist/Tooltip/Tooltip.styles.js +12 -4
  201. package/dist/Tooltip/Tooltip.styles.js.map +1 -1
  202. package/dist/Tooltip/Tooltip.types.d.ts +8 -0
  203. package/dist/Tooltip/Tooltip.types.js.map +1 -1
  204. package/dist/Tree/Tree.js +1 -1
  205. package/dist/Tree/Tree.styles.js +10 -10
  206. package/dist/Typeahead/Typeahead.styles.js +3 -3
  207. package/dist/Typography/Typography.styles.js +1 -1
  208. package/dist/Typography/Typography.table.story.js +2 -2
  209. package/dist/_hooks/I18n.d.ts +231 -48
  210. package/dist/_hooks/IntersectionObserver/createIntersectionObserver.d.ts +0 -1
  211. package/dist/_hooks/IntersectionObserver/createIntersectionObserver.js +0 -1
  212. package/dist/_hooks/IntersectionObserver/createIntersectionObserver.js.map +1 -1
  213. package/dist/_locales/de-DE.json +15 -3
  214. package/dist/_locales/en-AU.json +15 -3
  215. package/dist/_locales/en-CA.json +15 -3
  216. package/dist/_locales/en-GB.json +15 -3
  217. package/dist/_locales/en.json +2 -1
  218. package/dist/_locales/es-ES.json +15 -3
  219. package/dist/_locales/es.json +15 -3
  220. package/dist/_locales/fr-CA.json +15 -3
  221. package/dist/_locales/fr-FR.json +15 -3
  222. package/dist/_locales/is-IS.json +15 -3
  223. package/dist/_locales/it-IT.json +15 -3
  224. package/dist/_locales/ja-JP.json +15 -3
  225. package/dist/_locales/pl-PL.json +15 -3
  226. package/dist/_locales/pseudo.json +2 -1
  227. package/dist/_locales/pt-BR.json +15 -3
  228. package/dist/_locales/pt-PT.json +18 -6
  229. package/dist/_locales/th-TH.json +15 -3
  230. package/dist/_locales/zh-SG.json +15 -3
  231. package/dist/_locales/zh-TW.json +15 -3
  232. package/dist/_storyHelpers_/components/Deprecation.styles.js +1 -1
  233. package/dist/_storyHelpers_/components/StoryGrid.js +3 -3
  234. package/dist/_styles/mixins.d.ts +13 -1
  235. package/dist/_styles/mixins.js +15 -1
  236. package/dist/_styles/mixins.js.map +1 -1
  237. package/dist/_typedoc/AnchorNavigation/AnchorNavigation.types.json +3 -3
  238. package/dist/_typedoc/Avatar/Avatar.types.json +20 -20
  239. package/dist/_typedoc/AvatarStack/AvatarStack.types.json +34 -24
  240. package/dist/_typedoc/Badge/Badge.types.json +6 -6
  241. package/dist/_typedoc/Banner/Banner.types.json +15 -15
  242. package/dist/_typedoc/Box/Box.types.json +68 -68
  243. package/dist/_typedoc/Breadcrumbs/Breadcrumbs.types.json +10 -10
  244. package/dist/_typedoc/Button/Button.types.json +13 -13
  245. package/dist/_typedoc/Calendar/Calendar.types.json +80 -80
  246. package/dist/_typedoc/Card/Card.types.json +6 -6
  247. package/dist/_typedoc/Checkbox/Checkbox.types.json +8 -8
  248. package/dist/_typedoc/ContactItem/ContactItem.types.json +9 -9
  249. package/dist/_typedoc/DateInput/DateInput.types.json +35 -35
  250. package/dist/_typedoc/DateSelect/DateSelect.types.json +13 -13
  251. package/dist/_typedoc/DetailPage/DetailPage.types.json +5 -5
  252. package/dist/_typedoc/Dropdown/Dropdown.types.json +37 -37
  253. package/dist/_typedoc/DropdownFlyout/DropdownFlyout.types.json +31 -31
  254. package/dist/_typedoc/Dropzone/Dropzone.types.json +44 -44
  255. package/dist/_typedoc/EmptyState/EmptyState.types.json +16 -16
  256. package/dist/_typedoc/FileList/FileList.types.json +9 -9
  257. package/dist/_typedoc/FileSelect/FileSelect.types.json +27 -27
  258. package/dist/_typedoc/FileSelect/GridSource/GridSource.types.json +20 -20
  259. package/dist/_typedoc/FileSelect/LocalSource/LocalSource.types.json +14 -14
  260. package/dist/_typedoc/FileSelect/TreeSource/TreeSource.types.json +9 -9
  261. package/dist/_typedoc/Flex/Flex.types.json +27 -27
  262. package/dist/_typedoc/FlexList/FlexList.types.json +30 -30
  263. package/dist/_typedoc/Form/Form.types.json +862 -762
  264. package/dist/_typedoc/GhostPlaceholder/GhostPlaceholder.types.json +12 -12
  265. package/dist/_typedoc/Grid/Grid.types.json +8 -8
  266. package/dist/_typedoc/GroupSelect/GroupSelect.types.json +75 -55
  267. package/dist/_typedoc/Input/Input.types.json +2 -2
  268. package/dist/_typedoc/Link/Link.types.json +1 -1
  269. package/dist/_typedoc/ListPage/ListPage.types.json +13 -13
  270. package/dist/_typedoc/Menu/Menu.types.json +62 -62
  271. package/dist/_typedoc/MenuImperative/MenuImperative.types.json +77 -77
  272. package/dist/_typedoc/Modal/Modal.types.json +46 -46
  273. package/dist/_typedoc/MultiSelect/MultiSelect.types.json +52 -32
  274. package/dist/_typedoc/NextTile/NextTile.types.json +32 -32
  275. package/dist/_typedoc/Notation/Notation.types.json +4 -4
  276. package/dist/_typedoc/NumberInput/NumberInput.types.json +48 -48
  277. package/dist/_typedoc/OverlayTrigger/OverlayTrigger.types.json +33 -33
  278. package/dist/_typedoc/PageLayout/PageLayout.types.json +46 -26
  279. package/dist/_typedoc/Pagination/Pagination.types.json +7 -7
  280. package/dist/_typedoc/Panel/Panel.types.json +27 -63
  281. package/dist/_typedoc/Pill/Pill.types.json +2 -2
  282. package/dist/_typedoc/PillSelect/PillSelect.types.json +49 -49
  283. package/dist/_typedoc/Popover/Popover.types.json +15 -15
  284. package/dist/_typedoc/ProgressBar/ProgressBar.types.json +7 -7
  285. package/dist/_typedoc/RadioButton/RadioButton.types.json +6 -6
  286. package/dist/_typedoc/Required/Required.types.json +5 -5
  287. package/dist/_typedoc/Search/Search.types.json +18 -18
  288. package/dist/_typedoc/Section/Section.types.json +15 -15
  289. package/dist/_typedoc/SegmentedController/SegmentedController.types.json +21 -21
  290. package/dist/_typedoc/Select/Select.types.json +109 -63
  291. package/dist/_typedoc/SettingsPage/SettingsPage.types.json +10 -10
  292. package/dist/_typedoc/Slider/Slider.types.json +6 -6
  293. package/dist/_typedoc/Spinner/Spinner.types.json +9 -9
  294. package/dist/_typedoc/SplitViewCard/SplitViewCard.types.json +14 -14
  295. package/dist/_typedoc/Table/Table.types.json +102 -102
  296. package/dist/_typedoc/Tabs/Tabs.types.json +30 -20
  297. package/dist/_typedoc/Tearsheet/Tearsheet.types.json +17 -17
  298. package/dist/_typedoc/TextArea/TextArea.types.json +3 -3
  299. package/dist/_typedoc/TextEditor/TextEditor.types.json +11 -11
  300. package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +4 -4
  301. package/dist/_typedoc/Thumbnail/Thumbnail.types.json +19 -19
  302. package/dist/_typedoc/TieredDropdown/TieredDropdown.types.json +43 -43
  303. package/dist/_typedoc/TieredSelect/TieredSelect.types.json +29 -29
  304. package/dist/_typedoc/Tile/Tile.types.json +8 -8
  305. package/dist/_typedoc/Title/Title.types.json +1 -1
  306. package/dist/_typedoc/Toast/Toast.types.json +4 -4
  307. package/dist/_typedoc/ToggleButton/ToggleButton.types.json +4 -4
  308. package/dist/_typedoc/Token/Token.types.json +7 -7
  309. package/dist/_typedoc/ToolHeader/ToolHeader.types.json +10 -10
  310. package/dist/_typedoc/ToolLandingPage/ToolLandingPage.types.json +8 -8
  311. package/dist/_typedoc/Tooltip/Tooltip.types.json +25 -14
  312. package/dist/_typedoc/Tree/Tree.types.json +88 -88
  313. package/dist/_typedoc/Typeahead/Typeahead.types.json +2 -2
  314. package/dist/_typedoc/Typography/Typography.types.json +9 -9
  315. package/dist/_typedoc/_utils/types.json +3 -3
  316. package/dist/_utils/scrollIntoView.js +21 -7
  317. package/dist/_utils/scrollIntoView.js.map +1 -1
  318. package/package.json +10 -9
  319. package/dist/Checkbox/CheckboxTooltip.d.ts +0 -4
  320. package/dist/Checkbox/CheckboxTooltip.js +0 -26
  321. package/dist/Checkbox/CheckboxTooltip.js.map +0 -1
@@ -14,6 +14,12 @@ global.ResizeObserver = jest.fn(() => ({
14
14
  disconnect: jest.fn(),
15
15
  }))
16
16
 
17
+ global.IntersectionObserver = jest.fn(() => ({
18
+ observe: jest.fn(),
19
+ unobserve: jest.fn(),
20
+ disconnect: jest.fn(),
21
+ }))
22
+
17
23
  // TODO remove this eventually
18
24
  global['requestAnimationFrame'] = function requestAnimationFrame(callback) {
19
25
  setTimeout(callback, 0)
package/CHANGELOG.md CHANGED
@@ -1,5 +1,58 @@
1
1
  # Change Log
2
2
 
3
+ ## 12.40.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 79d9a1d: Update Tab attributes and more overflow for keyboard and fix aria attributes. May cause friction with existing tests.
8
+ - `Tabs.Tab` now defaults to buttons if provided a click handler. Allows them to be in keyboard TAB order by default. It is preferred that consumers explicitly opt-in to button or link role.
9
+ - `Tabs.Tab role = link` now renders `a role = link` instead of `a role = button`. May break tests, to resolve update tests to target link rather than button.
10
+ - `Tabs` no longer renders a `nav` element. May break tests, to resolve update tests to target individual tabs, the group, or add data-qa attributes.
11
+ - Resolve "no nested controls" for overflow. The Tabs "More" overflow menu no longer is role = menu and menuitems with nested interactions, now renders `role = dialog` and relies on the children to be focusable for regular keyboard TAB navigation.
12
+ - 28c4df6: New design pattern- `Panel.Title` and `SplitViewCard.PanelTitle` remove truncation and tooltip, allowing the text to wrap mutliple lines. Content text and left/right buttons align at the top.
13
+ - fd506f5: Show `FileToken` error message inline instead of in a tooltip
14
+
15
+ ## 12.39.0
16
+
17
+ ### Minor Changes
18
+
19
+ - 916989e: Improve date input accessibility by adding an `aria-label` prop
20
+ - 3a1321e: Make `AvatarStack` avatar popovers keyboard accessible
21
+
22
+ - Changed avatar triggers from img/link roles to button role
23
+
24
+ - 4ed0299: - Introduced a new hierarchical model for rendering grouped options across `Select`, `MultiSelect`, `GroupSelect`, and `Form` components which improves semantic HTML structure. Backward compatibility is maintained.
25
+ - The `groupHeaderRenderer` prop in `MultiSelect`, `Form.Select`, and `GroupSelect` is deprecated. Use `groupRenderer` instead, which now receives the group object and its `children` (the options).
26
+ - Passing group label as the `children` to `MenuImperative.Group` and `Select.OptGroup` is deprecated. Use the `label` prop for the group title and pass the options as `children`.
27
+ - 82146ce: Improve `MultiSelect` accessibility:
28
+
29
+ - Add `aria-invalid` and `aria-describedby` support for error state
30
+ - Fix selected tokens announcing "selectable" by removing them from tab order
31
+ - Fix combobox input nested inside `role="list"` by separating structure from visual layout
32
+ - Add Delete key support for removing tokens
33
+ - Close dropdown when navigating tokens with arrow keys
34
+ - Add "None selected" announcement when no items are selected
35
+
36
+ - d36f2ec: Make Tooltips announced by screen readers. User should still supply a focusable element like `Button`.
37
+
38
+ - `Tooltip` update default `trigger` to hover _and focus_
39
+ - `Tooltip` supports `trackAriaExpanded` prop to pass aria open state to children. Recommendation set to `true`, valid on elements like `button`. Currently false, possible future default it to true
40
+ - `Tooltip.Content` uses `aria-live` ~possible future: renders empty container, then inner content~
41
+ - `Tooltip` apply `role tooltip` to the overlay to handle `aria-describedby` and `id`. Allow for manual `aria-describedby` and `id`
42
+ - Update tooltips in `Checkbox`, `SegmentedController`, and `SourceItem`
43
+
44
+ - 4bbe568: Added `onTransitionEnd` handler to Panel to unmount it from the DOM after the closing animation finishes
45
+
46
+ ### Patch Changes
47
+
48
+ - 374386b: Demo and Coverage stories now wrap `DateSelect` with a visible `Label` ("Date") and `aria-labelledby`. Applies to Basic, Locales, and all variants (empty, with value, error, disabled)
49
+ - f9ed3e9: In `Page.Aside` added optional focus management (`focusOnOpen`, `restoreFocusOnClose`) to move focus into the aside on open and restore it on close, without affecting existing behavior by default.
50
+ - 578560c: Removing the tooltip on non-preview FileList item re: a11y
51
+ - f9ed3e9: Remove scroll area from shifting on focus. Section and Tearsheet use outline instead of border for visible focus
52
+ - b0da9a8: Enhance a11y for `CheckboxOutput` component by moving existing `aria-label` from the `span` wrapper to the `svg` icon.
53
+ - 40ce870: remove intersection observer
54
+ - fd6f808: Disable onClear when Select, TieredSelect, or PillSelect is disabled.
55
+
3
56
  ## 12.38.0
4
57
 
5
58
  ### Minor Changes
@@ -23,6 +76,8 @@
23
76
 
24
77
  ## 12.37.0
25
78
 
79
+ **DO NOT USE 12.37.0** This release changed SuperSelect UI UX which caused issues. It has been reverted, please use `12.38.0` instead.
80
+
26
81
  ### Minor Changes
27
82
 
28
83
  - 26ca426: _Changes internal HTML structure_ Fix Delete control accessibility in Select components:
@@ -5,11 +5,11 @@ import { getEllipsis } from '../_styles/mixins';
5
5
  import { spacing } from '../_styles/spacing';
6
6
  export var StyledAnchorNavigation = /*#__PURE__*/styled.ul.withConfig({
7
7
  displayName: "StyledAnchorNavigation",
8
- componentId: "core-12_38_0__sc-aacdj4-0"
8
+ componentId: "core-12_40_0-beta_0__sc-aacdj4-0"
9
9
  })(["max-width:200px;margin:0;padding-inline-start:0;"]);
10
10
  export var StyledAnchorSection = /*#__PURE__*/styled.li.withConfig({
11
11
  displayName: "StyledAnchorSection",
12
- componentId: "core-12_38_0__sc-aacdj4-1"
12
+ componentId: "core-12_40_0-beta_0__sc-aacdj4-1"
13
13
  })(["display:flex;cursor:pointer;border-left:", "px solid ", ";background-color:", ";border-top-right-radius:4px;border-bottom-right-radius:4px;:hover{border-left:", "px solid ", ";background-color:", ";}"], spacing.xs, function (_ref) {
14
14
  var $selected = _ref.$selected;
15
15
  return $selected ? colors.gray15 : colors.gray90;
@@ -22,7 +22,7 @@ export var StyledAnchorSection = /*#__PURE__*/styled.li.withConfig({
22
22
  }, colors.gray90);
23
23
  export var StyledAnchor = /*#__PURE__*/styled.a.withConfig({
24
24
  displayName: "StyledAnchor",
25
- componentId: "core-12_38_0__sc-aacdj4-2"
25
+ componentId: "core-12_40_0-beta_0__sc-aacdj4-2"
26
26
  })(["width:100%;padding:6px ", "px;", " ", ";", " :focus-visible{box-shadow:inset 0 0 0 2px ", ";outline:none;}"], spacing.sm, getTypographyIntent('body'), function (_ref4) {
27
27
  var $selected = _ref4.$selected;
28
28
  return $selected ? css(["font-weight:600;"]) : '';
@@ -28,27 +28,27 @@ var iconSize = {
28
28
  };
29
29
  export var StyledAvatarOverlay = /*#__PURE__*/styled.div.withConfig({
30
30
  displayName: "StyledAvatarOverlay",
31
- componentId: "core-12_38_0__sc-7q2ydl-0"
31
+ componentId: "core-12_40_0-beta_0__sc-7q2ydl-0"
32
32
  })(["width:100%;height:100%;position:absolute;top:0;left:0;border-radius:100%;opacity:0;"]);
33
33
  export var StyledIconContainer = /*#__PURE__*/styled.div.withConfig({
34
34
  displayName: "StyledIconContainer",
35
- componentId: "core-12_38_0__sc-7q2ydl-1"
35
+ componentId: "core-12_40_0-beta_0__sc-7q2ydl-1"
36
36
  })(["display:inline-flex;"]);
37
37
  export var StyledLabelContainer = /*#__PURE__*/styled.div.withConfig({
38
38
  displayName: "StyledLabelContainer",
39
- componentId: "core-12_38_0__sc-7q2ydl-2"
39
+ componentId: "core-12_40_0-beta_0__sc-7q2ydl-2"
40
40
  })(["text-transform:uppercase;"]);
41
41
  export var StyledPortraitContainer = /*#__PURE__*/styled.div.withConfig({
42
42
  displayName: "StyledPortraitContainer",
43
- componentId: "core-12_38_0__sc-7q2ydl-3"
43
+ componentId: "core-12_40_0-beta_0__sc-7q2ydl-3"
44
44
  })(["background-color:", ";background-position:center;background-repeat:no-repeat;background-size:cover;height:100%;width:100%;", ""], colors.white, function (_ref) {
45
45
  var $imageUrl = _ref.$imageUrl;
46
46
  return css(["background-image:url(", ");"], $imageUrl);
47
47
  });
48
48
  export var StyledAvatarContainer = /*#__PURE__*/styled.div.withConfig({
49
49
  displayName: "StyledAvatarContainer",
50
- componentId: "core-12_38_0__sc-7q2ydl-4"
51
- })(["display:inline-flex;justify-content:center;align-items:center;border-radius:100%;overflow:hidden;position:relative;cursor:default;color:", ";background-color:", ";text-decoration:none;a:has(> &){text-decoration:none;}&:focus{", "}a:focus:has(> &){", " border-radius:100%;}", " ", ";"], colors.white, colors.gray30, getGapOutlineFocus, getGapOutlineFocus, function (_ref2) {
50
+ componentId: "core-12_40_0-beta_0__sc-7q2ydl-4"
51
+ })(["display:inline-flex;justify-content:center;align-items:center;border-radius:100%;overflow:hidden;position:relative;cursor:default;color:", ";background-color:", ";text-decoration:none;a:has(> &){text-decoration:none;}&:focus{", "}a:focus:has(> &){", " border-radius:100%;}", " ", ";"], colors.white, colors.gray30, getGapOutlineFocus('outside'), getGapOutlineFocus('outside'), function (_ref2) {
52
52
  var _ref2$$size = _ref2.$size,
53
53
  $size = _ref2$$size === void 0 ? 'md' : _ref2$$size;
54
54
  return css(["font-size:", "px;font-weight:", ";height:", "px;width:", "px;min-height:", "px;min-width:", "px;", "{svg{height:", "px;width:", "px;}}"], fontSize[$size], fontWeights[$size], containerSize[$size], containerSize[$size], containerSize[$size], containerSize[$size], StyledIconContainer, iconSize[$size], iconSize[$size]);
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.styles.js","names":["styled","css","colors","getGapOutlineFocus","activeOverlayOpacity","containerSize","xl","lg","md","sm","fontSize","fontWeights","iconSize","StyledAvatarOverlay","div","withConfig","displayName","componentId","StyledIconContainer","StyledLabelContainer","StyledPortraitContainer","white","_ref","$imageUrl","StyledAvatarContainer","gray30","_ref2","_ref2$$size","$size","_ref3","$disabled","$clickable","black","gray85"],"sources":["../../src/Avatar/Avatar.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components'\nimport { colors } from '../_styles/colors'\nimport { getGapOutlineFocus } from '../_styles/mixins'\nimport type { BaseAvatarProps } from './Avatar.types'\n\ninterface StyledAvatarProps {\n $clickable: BaseAvatarProps['clickable']\n $disabled: BaseAvatarProps['disabled']\n $size: BaseAvatarProps['size']\n}\n\nconst activeOverlayOpacity = 0.3\n\nconst containerSize = { xl: 96, lg: 40, md: 32, sm: 24 } as const\n\nconst fontSize = { xl: 40, lg: 14, md: 14, sm: 12 } as const\n\nconst fontWeights = { xl: 700, lg: 600, md: 600, sm: 600 } as const\n\nconst iconSize = { xl: 48, lg: 24, md: 16, sm: 16 } as const\n\nexport const StyledAvatarOverlay = styled.div`\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n border-radius: 100%;\n opacity: 0;\n`\n\nexport const StyledIconContainer = styled.div`\n display: inline-flex;\n`\n\nexport const StyledLabelContainer = styled.div`\n text-transform: uppercase;\n`\n\nexport const StyledPortraitContainer = styled.div<{ $imageUrl: string }>`\n background-color: ${colors.white};\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n height: 100%;\n width: 100%;\n ${({ $imageUrl }) =>\n css`\n background-image: url(${$imageUrl});\n `}\n`\n\nexport const StyledAvatarContainer = styled.div<StyledAvatarProps>`\n display: inline-flex;\n justify-content: center;\n align-items: center;\n border-radius: 100%;\n overflow: hidden;\n position: relative;\n cursor: default;\n color: ${colors.white};\n background-color: ${colors.gray30};\n text-decoration: none;\n\n a:has(> &) {\n text-decoration: none;\n }\n\n &:focus {\n ${getGapOutlineFocus}\n }\n // For safety, separate rule block with 'has' for supported browsers\n // this supports any anchor directly wrapping an Avatar.\n // 'outline' works better on display inline-block and inline-flex,\n // elements, unfortunately anchors and inline by default.\n a:focus:has(> &) {\n ${getGapOutlineFocus}\n border-radius: 100%;\n }\n\n ${({ $size = 'md' }) => css`\n font-size: ${fontSize[$size]}px;\n font-weight: ${fontWeights[$size]};\n height: ${containerSize[$size]}px;\n width: ${containerSize[$size]}px;\n min-height: ${containerSize[$size]}px;\n min-width: ${containerSize[$size]}px;\n\n ${StyledIconContainer} {\n svg {\n height: ${iconSize[$size]}px;\n width: ${iconSize[$size]}px;\n }\n }\n `}\n\n ${({ $disabled, $clickable }) => {\n if (!$disabled && $clickable) {\n return css`\n cursor: pointer;\n\n &:hover {\n ${StyledAvatarOverlay} {\n opacity: ${activeOverlayOpacity};\n }\n }\n\n ${StyledAvatarOverlay} {\n background-color: ${colors.black};\n }\n `\n }\n\n if ($disabled && !$clickable) {\n return css`\n background-color: ${colors.gray85};\n\n ${StyledAvatarOverlay} {\n background-color: ${colors.white};\n opacity: ${activeOverlayOpacity};\n }\n `\n }\n\n if ($disabled && $clickable) {\n return css`\n cursor: pointer;\n background-color: ${colors.gray85};\n\n &:hover {\n ${StyledAvatarOverlay} {\n background-color: ${colors.black};\n opacity: ${activeOverlayOpacity};\n }\n }\n\n ${StyledAvatarOverlay} {\n background-color: ${colors.white};\n opacity: ${activeOverlayOpacity};\n }\n `\n }\n }};\n`\n"],"mappings":"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"}
1
+ {"version":3,"file":"Avatar.styles.js","names":["styled","css","colors","getGapOutlineFocus","activeOverlayOpacity","containerSize","xl","lg","md","sm","fontSize","fontWeights","iconSize","StyledAvatarOverlay","div","withConfig","displayName","componentId","StyledIconContainer","StyledLabelContainer","StyledPortraitContainer","white","_ref","$imageUrl","StyledAvatarContainer","gray30","_ref2","_ref2$$size","$size","_ref3","$disabled","$clickable","black","gray85"],"sources":["../../src/Avatar/Avatar.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components'\nimport { colors } from '../_styles/colors'\nimport { getGapOutlineFocus } from '../_styles/mixins'\nimport type { BaseAvatarProps } from './Avatar.types'\n\ninterface StyledAvatarProps {\n $clickable: BaseAvatarProps['clickable']\n $disabled: BaseAvatarProps['disabled']\n $size: BaseAvatarProps['size']\n}\n\nconst activeOverlayOpacity = 0.3\n\nconst containerSize = { xl: 96, lg: 40, md: 32, sm: 24 } as const\n\nconst fontSize = { xl: 40, lg: 14, md: 14, sm: 12 } as const\n\nconst fontWeights = { xl: 700, lg: 600, md: 600, sm: 600 } as const\n\nconst iconSize = { xl: 48, lg: 24, md: 16, sm: 16 } as const\n\nexport const StyledAvatarOverlay = styled.div`\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n border-radius: 100%;\n opacity: 0;\n`\n\nexport const StyledIconContainer = styled.div`\n display: inline-flex;\n`\n\nexport const StyledLabelContainer = styled.div`\n text-transform: uppercase;\n`\n\nexport const StyledPortraitContainer = styled.div<{ $imageUrl: string }>`\n background-color: ${colors.white};\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n height: 100%;\n width: 100%;\n ${({ $imageUrl }) =>\n css`\n background-image: url(${$imageUrl});\n `}\n`\n\nexport const StyledAvatarContainer = styled.div<StyledAvatarProps>`\n display: inline-flex;\n justify-content: center;\n align-items: center;\n border-radius: 100%;\n overflow: hidden;\n position: relative;\n cursor: default;\n color: ${colors.white};\n background-color: ${colors.gray30};\n text-decoration: none;\n\n a:has(> &) {\n text-decoration: none;\n }\n\n &:focus {\n ${getGapOutlineFocus('outside')}\n }\n // For safety, separate rule block with 'has' for supported browsers\n // this supports any anchor directly wrapping an Avatar.\n // 'outline' works better on display inline-block and inline-flex,\n // elements, unfortunately anchors and inline by default.\n a:focus:has(> &) {\n ${getGapOutlineFocus('outside')}\n border-radius: 100%;\n }\n\n ${({ $size = 'md' }) => css`\n font-size: ${fontSize[$size]}px;\n font-weight: ${fontWeights[$size]};\n height: ${containerSize[$size]}px;\n width: ${containerSize[$size]}px;\n min-height: ${containerSize[$size]}px;\n min-width: ${containerSize[$size]}px;\n\n ${StyledIconContainer} {\n svg {\n height: ${iconSize[$size]}px;\n width: ${iconSize[$size]}px;\n }\n }\n `}\n\n ${({ $disabled, $clickable }) => {\n if (!$disabled && $clickable) {\n return css`\n cursor: pointer;\n\n &:hover {\n ${StyledAvatarOverlay} {\n opacity: ${activeOverlayOpacity};\n }\n }\n\n ${StyledAvatarOverlay} {\n background-color: ${colors.black};\n }\n `\n }\n\n if ($disabled && !$clickable) {\n return css`\n background-color: ${colors.gray85};\n\n ${StyledAvatarOverlay} {\n background-color: ${colors.white};\n opacity: ${activeOverlayOpacity};\n }\n `\n }\n\n if ($disabled && $clickable) {\n return css`\n cursor: pointer;\n background-color: ${colors.gray85};\n\n &:hover {\n ${StyledAvatarOverlay} {\n background-color: ${colors.black};\n opacity: ${activeOverlayOpacity};\n }\n }\n\n ${StyledAvatarOverlay} {\n background-color: ${colors.white};\n opacity: ${activeOverlayOpacity};\n }\n `\n }\n }};\n`\n"],"mappings":"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"}
@@ -17,7 +17,7 @@ export declare function AvatarContent({ imageUrl, initials, type, size, ...props
17
17
  type: AvatarStackItem['type'];
18
18
  size: AvatarStackSize;
19
19
  }): React.JSX.Element | null;
20
- export declare function FoldedAvatarStack<Item extends AvatarStackItem>({ items, onClickViewAll, size, restCountLabel, isViewAllNeeded, title, }: FoldedAvatarStackProps<Item>): React.JSX.Element;
20
+ export declare function FoldedAvatarStack<Item extends AvatarStackItem>({ items, onClickViewAll, size, restCountLabel, isViewAllNeeded, title, viewMoreTriggerRef, }: FoldedAvatarStackProps<Item>): React.JSX.Element;
21
21
  export declare function ViewAllModal<Item extends AvatarStackItem>({ isOpen, onClose, title, items, }: ViewAllModalProps<Item>): React.JSX.Element;
22
22
  export declare function defaultInitials<Item extends AvatarStackItem>(item: Item): string;
23
23
  export declare function defaultGetImageUrl<Item extends AvatarStackItem>(item: Item): string;
@@ -23,12 +23,22 @@ import { Button } from '../Button';
23
23
  import { ContactItem } from '../ContactItem';
24
24
  import { Link } from '../Link';
25
25
  import { Modal } from '../Modal';
26
+ import { OverlayTrigger } from '../OverlayTrigger';
26
27
  import { Popover } from '../Popover';
27
28
  import { Typography } from '../Typography';
28
29
  import { useI18nContext } from '../_hooks/I18n';
30
+ import { mergeRefs } from '../_utils/mergeRefs';
29
31
  import { colorsOrder, foldedItemsCap, restCountThreshold, visibleItemsCap } from './AvatarStack.constants';
30
32
  import { StyledAvatar, StyledContactItem, StyledContactItems, StyledModalBody, StyledViewAllWrapper, StyledWrapper } from './AvatarStack.styles';
31
- var defaultPopoverTrigger = ['hover', 'focus'];
33
+ import { useAvatarPopover } from './useAvatarPopover';
34
+ var OVERLAY_WRAPPER_SELECTOR = '[data-qa="core-overlay-trigger-overlay-wrapper"]';
35
+ var FOCUSABLE_SELECTOR = 'a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])';
36
+ var POPOVER_TRIGGER = ['hover', 'focus'];
37
+ var POPOVER_SHOW_KEYS = ['Enter', ' '];
38
+ var POPOVER_HIDE_KEYS = {
39
+ overlay: ['Escape', 'Esc'],
40
+ target: ['Escape', 'Esc']
41
+ };
32
42
  export function getOverflowValues(items) {
33
43
  var foldedItems = [];
34
44
  var restCountLabel = null;
@@ -145,20 +155,35 @@ function AvatarWithPopover(_ref4) {
145
155
  var item = _ref4.item,
146
156
  size = _ref4.size,
147
157
  colors = _ref4.colors;
148
- var hasEnabledLink = item.linkUrl && !item.inactive;
149
- var avatarProps = hasEnabledLink ? {
150
- role: 'link',
151
- href: item.linkUrl
152
- } : {
153
- role: 'img',
154
- // Allow SR to open Popover as it cycles through. Keeps visual with audio.
155
- // The link or image is labelled, and focus does not enter the Popover.
156
- tabIndex: -1
157
- };
158
- return /*#__PURE__*/React.createElement(Popover, {
158
+ var _useAvatarPopover = useAvatarPopover({
159
+ focusableSelector: FOCUSABLE_SELECTOR,
160
+ overlayWrapperSelector: OVERLAY_WRAPPER_SELECTOR
161
+ }),
162
+ triggerRef = _useAvatarPopover.triggerRef,
163
+ popoverContentRef = _useAvatarPopover.popoverContentRef,
164
+ _beforeShow = _useAvatarPopover.beforeShow,
165
+ beforeHide = _useAvatarPopover.beforeHide,
166
+ afterHide = _useAvatarPopover.afterHide;
167
+ return /*#__PURE__*/React.createElement(OverlayTrigger, {
159
168
  key: item.id,
160
- trigger: defaultPopoverTrigger,
161
- overlay: /*#__PURE__*/React.createElement(Popover.Content, null, /*#__PURE__*/React.createElement(AvatarStackContactItem, {
169
+ trigger: POPOVER_TRIGGER,
170
+ showKeys: POPOVER_SHOW_KEYS,
171
+ hideKeys: POPOVER_HIDE_KEYS,
172
+ restoreFocusOnHide: false,
173
+ shrinkOverlay: true,
174
+ arrow: true,
175
+ trackAriaExpanded: true,
176
+ placement: "top",
177
+ beforeShow: function beforeShow(e) {
178
+ if (item.inactive) return false;
179
+ return _beforeShow(e);
180
+ },
181
+ beforeHide: beforeHide,
182
+ afterHide: afterHide,
183
+ overlay: /*#__PURE__*/React.createElement(Popover.Content, {
184
+ ref: popoverContentRef,
185
+ placement: "top"
186
+ }, /*#__PURE__*/React.createElement(AvatarStackContactItem, {
162
187
  id: item.id,
163
188
  type: item.type,
164
189
  imageUrl: item.imageUrl,
@@ -168,12 +193,14 @@ function AvatarWithPopover(_ref4) {
168
193
  linkUrl: item.linkUrl,
169
194
  description: item.description
170
195
  }))
171
- }, /*#__PURE__*/React.createElement(StyledAvatar, _extends({}, avatarProps, {
196
+ }, /*#__PURE__*/React.createElement(StyledAvatar, {
197
+ ref: triggerRef,
198
+ role: "button",
172
199
  $color: colors.get(item.id),
173
200
  "aria-label": "".concat(item.name, ", ").concat(item.description),
174
201
  disabled: item.inactive,
175
202
  size: size
176
- }), /*#__PURE__*/React.createElement(AvatarContent, {
203
+ }, /*#__PURE__*/React.createElement(AvatarContent, {
177
204
  imageUrl: item.imageUrl,
178
205
  initials: item.initials,
179
206
  type: item.type,
@@ -186,18 +213,36 @@ export function FoldedAvatarStack(_ref5) {
186
213
  size = _ref5.size,
187
214
  restCountLabel = _ref5.restCountLabel,
188
215
  isViewAllNeeded = _ref5.isViewAllNeeded,
189
- title = _ref5.title;
216
+ title = _ref5.title,
217
+ viewMoreTriggerRef = _ref5.viewMoreTriggerRef;
190
218
  var I18n = useI18nContext();
191
- var overlayRef = React.useRef(null);
192
219
  var restAvatarId = useId();
193
- return /*#__PURE__*/React.createElement(Popover, {
220
+ var _useAvatarPopover2 = useAvatarPopover({
221
+ focusableSelector: FOCUSABLE_SELECTOR,
222
+ overlayWrapperSelector: OVERLAY_WRAPPER_SELECTOR
223
+ }),
224
+ triggerRef = _useAvatarPopover2.triggerRef,
225
+ popoverContentRef = _useAvatarPopover2.popoverContentRef,
226
+ beforeShow = _useAvatarPopover2.beforeShow,
227
+ beforeHide = _useAvatarPopover2.beforeHide,
228
+ afterHide = _useAvatarPopover2.afterHide;
229
+ return /*#__PURE__*/React.createElement(OverlayTrigger, {
194
230
  "aria-labelledby": restAvatarId,
195
- overlayRef: overlayRef,
196
- trigger: defaultPopoverTrigger,
197
- beforeHide: function beforeHide(e) {
198
- return e.type !== 'blur';
199
- },
200
- overlay: /*#__PURE__*/React.createElement(Popover.Content, null, /*#__PURE__*/React.createElement(StyledContactItems, null, items.map(function (item) {
231
+ trigger: POPOVER_TRIGGER,
232
+ showKeys: POPOVER_SHOW_KEYS,
233
+ hideKeys: POPOVER_HIDE_KEYS,
234
+ restoreFocusOnHide: false,
235
+ shrinkOverlay: true,
236
+ arrow: true,
237
+ trackAriaExpanded: true,
238
+ placement: "top",
239
+ beforeShow: beforeShow,
240
+ beforeHide: beforeHide,
241
+ afterHide: afterHide,
242
+ overlay: /*#__PURE__*/React.createElement(Popover.Content, {
243
+ ref: popoverContentRef,
244
+ placement: "top"
245
+ }, /*#__PURE__*/React.createElement(StyledContactItems, null, items.map(function (item) {
201
246
  return /*#__PURE__*/React.createElement(AvatarStackContactItem, {
202
247
  key: item.id,
203
248
  id: item.id,
@@ -216,8 +261,9 @@ export function FoldedAvatarStack(_ref5) {
216
261
  variant: "secondary"
217
262
  }, I18n.t('core.avatarStack.viewAll'))))
218
263
  }, /*#__PURE__*/React.createElement(StyledAvatar, {
264
+ ref: viewMoreTriggerRef ? mergeRefs(triggerRef, viewMoreTriggerRef) : triggerRef,
219
265
  role: "button",
220
- onPress: onClickViewAll,
266
+ tabIndex: 0,
221
267
  id: restAvatarId,
222
268
  "aria-label": "".concat(restCountLabel, ", ").concat(title),
223
269
  "data-qa": "core-avatar-stack-folded-avatars-popover-trigger",
@@ -279,6 +325,7 @@ export function getTransformedItems(_ref7) {
279
325
  });
280
326
  });
281
327
  }
328
+ var MODAL_CLOSE_FOCUS_DELAY_MS = 350;
282
329
  var _AvatarStack = function _AvatarStack(_ref8, ref) {
283
330
  var _items = _ref8.items,
284
331
  title = _ref8.title,
@@ -294,6 +341,21 @@ var _AvatarStack = function _AvatarStack(_ref8, ref) {
294
341
  _useState2 = _slicedToArray(_useState, 2),
295
342
  isModalOpen = _useState2[0],
296
343
  setIsModalOpen = _useState2[1];
344
+ var viewMoreTriggerRef = React.useRef(null);
345
+ var wasModalOpenRef = React.useRef(false);
346
+ React.useEffect(function () {
347
+ if (wasModalOpenRef.current && !isModalOpen) {
348
+ var id = setTimeout(function () {
349
+ var _viewMoreTriggerRef$c;
350
+ (_viewMoreTriggerRef$c = viewMoreTriggerRef.current) === null || _viewMoreTriggerRef$c === void 0 ? void 0 : _viewMoreTriggerRef$c.focus();
351
+ }, MODAL_CLOSE_FOCUS_DELAY_MS);
352
+ wasModalOpenRef.current = false;
353
+ return function () {
354
+ return clearTimeout(id);
355
+ };
356
+ }
357
+ wasModalOpenRef.current = isModalOpen;
358
+ }, [isModalOpen]);
297
359
  var items = useMemo(function () {
298
360
  return getTransformedItems({
299
361
  items: _items,
@@ -335,7 +397,8 @@ var _AvatarStack = function _AvatarStack(_ref8, ref) {
335
397
  return setIsModalOpen(true);
336
398
  },
337
399
  size: size,
338
- title: title
400
+ title: title,
401
+ viewMoreTriggerRef: !onClickViewAll ? viewMoreTriggerRef : undefined
339
402
  })));
340
403
  };
341
404
 
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarStack.js","names":["Building","People","useId","React","forwardRef","useMemo","useState","Avatar","Button","ContactItem","Link","Modal","Popover","Typography","useI18nContext","colorsOrder","foldedItemsCap","restCountThreshold","visibleItemsCap","StyledAvatar","StyledContactItem","StyledContactItems","StyledModalBody","StyledViewAllWrapper","StyledWrapper","defaultPopoverTrigger","getOverflowValues","items","foldedItems","restCountLabel","isViewAllNeeded","visibleItems","length","slice","restItemsCount","concat","getIcon","type","size","createElement","getContactIcon","getAvatarIcon","avatarSize","getColorOrder","avatarItems","reduce","_ref","item","map","color","imageUrl","inactive","set","id","currentColorIndex","indexOf","nextColorIndex","Map","AvatarStackContactItem","_ref2","initials","name","linkUrl","description","disabled","icon","key","Title","href","Description","AvatarContent","_ref3","props","_objectWithoutProperties","_excluded","avatarIcon","Portrait","_extends","Icon","Label","AvatarWithPopover","_ref4","colors","hasEnabledLink","avatarProps","role","tabIndex","trigger","overlay","Content","$color","get","FoldedAvatarStack","_ref5","onClickViewAll","title","I18n","overlayRef","useRef","restAvatarId","beforeHide","e","onClick","variant","t","onPress","ViewAllModal","_ref6","isOpen","onClose","labelId","text","open","Header","Heading","Footer","FooterButtons","defaultInitials","defaultGetImageUrl","getTransformedItems","_ref7","getInitials","getImageUrl","_objectSpread","_AvatarStack","_ref8","ref","_items","_ref8$size","_ref8$getInitials","_ref8$getImageUrl","_excluded2","_useState","_useState2","_slicedToArray","isModalOpen","setIsModalOpen","_useMemo","visibleItemsColors","AvatarStack","displayName"],"sources":["../../src/AvatarStack/AvatarStack.tsx"],"sourcesContent":["import { Building, People } from '@procore/core-icons'\nimport { useId } from '@react-aria/utils'\nimport React, { forwardRef, useMemo, useState } from 'react'\nimport { Avatar } from '../Avatar'\nimport { Button } from '../Button'\nimport { ContactItem } from '../ContactItem'\nimport { Link } from '../Link'\nimport { Modal } from '../Modal'\nimport type { OverlayTriggerRef } from '../OverlayTrigger/OverlayTrigger.types'\nimport { Popover } from '../Popover'\nimport { Typography } from '../Typography'\nimport { useI18nContext } from '../_hooks/I18n'\nimport type { TriggerVariant } from '../_hooks/Trigger'\nimport type { Color } from '../_styles/colors'\nimport {\n colorsOrder,\n foldedItemsCap,\n restCountThreshold,\n visibleItemsCap,\n} from './AvatarStack.constants'\nimport {\n StyledAvatar,\n StyledContactItem,\n StyledContactItems,\n StyledModalBody,\n StyledViewAllWrapper,\n StyledWrapper,\n} from './AvatarStack.styles'\nimport type {\n AvatarStackItem,\n AvatarStackItemId,\n AvatarStackItemType,\n AvatarStackProps,\n AvatarStackSize,\n FoldedAvatarStackProps,\n ViewAllModalProps,\n} from './AvatarStack.types'\n\nconst defaultPopoverTrigger: TriggerVariant[] = ['hover', 'focus']\n\nexport function getOverflowValues<Item extends AvatarStackItem>(items: Item[]) {\n let foldedItems: Item[] = []\n let restCountLabel: string | null = null\n let isViewAllNeeded = false\n\n const visibleItems =\n items.length > visibleItemsCap ? items.slice(0, visibleItemsCap - 1) : items\n const restItemsCount = items.length - visibleItems.length\n\n if (restItemsCount > 0) {\n foldedItems = items.slice(\n visibleItems.length,\n visibleItems.length + foldedItemsCap\n )\n\n restCountLabel =\n restItemsCount > restCountThreshold\n ? `${restCountThreshold}+`\n : `+${restItemsCount}`\n\n isViewAllNeeded = restItemsCount > foldedItemsCap\n }\n\n return {\n visibleItems,\n foldedItems,\n restCountLabel,\n isViewAllNeeded,\n }\n}\n\nexport function getIcon(type: AvatarStackItemType, size: 'md' | 'sm') {\n switch (type) {\n case 'company':\n return <Building size={size} />\n\n case 'group':\n return <People size={size} />\n\n case 'user':\n default:\n return null\n }\n}\n\nfunction getContactIcon(type: AvatarStackItemType) {\n return getIcon(type, 'md')\n}\n\nexport function getAvatarIcon(\n type: AvatarStackItemType,\n size: AvatarStackSize\n) {\n const avatarSize = size === 'lg' ? 'md' : 'sm'\n return getIcon(type, avatarSize)\n}\n\nexport function getColorOrder(avatarItems: AvatarStackItem[]) {\n return avatarItems.reduce(\n ({ map, color }, item) => {\n if (item.imageUrl) {\n return {\n map,\n color,\n }\n }\n\n if (item.inactive) {\n map.set(item.id, 'gray70')\n\n return {\n map,\n color,\n }\n }\n\n map.set(item.id, color)\n\n const currentColorIndex = colorsOrder.indexOf(color)\n const nextColorIndex = (currentColorIndex + 1) % colorsOrder.length\n return {\n map,\n color: item.imageUrl ? color : colorsOrder[nextColorIndex],\n }\n },\n {\n map: new Map<AvatarStackItemId, Color>(),\n color: colorsOrder[0],\n }\n ).map\n}\n\nexport function AvatarStackContactItem({\n id,\n type,\n imageUrl,\n initials,\n inactive,\n name,\n linkUrl,\n description,\n}: AvatarStackItem) {\n return (\n <StyledContactItem\n disabled={inactive}\n icon={getContactIcon(type)}\n imageUrl={imageUrl}\n initials={initials}\n key={id}\n >\n <ContactItem.Title>\n {!inactive && linkUrl ? <Link href={linkUrl}>{name}</Link> : name}\n </ContactItem.Title>\n <ContactItem.Description>\n {type === 'group' ? (\n <Typography color=\"gray15\">{description}</Typography>\n ) : (\n description\n )}\n </ContactItem.Description>\n </StyledContactItem>\n )\n}\n\nexport function AvatarContent({\n imageUrl,\n initials,\n type,\n size,\n ...props\n}: {\n imageUrl?: AvatarStackItem['imageUrl']\n initials: AvatarStackItem['initials']\n type: AvatarStackItem['type']\n size: AvatarStackSize\n}) {\n const avatarIcon = getAvatarIcon(type, size)\n\n if (imageUrl) {\n return <Avatar.Portrait {...props} imageUrl={imageUrl} />\n }\n\n if (avatarIcon) {\n return <Avatar.Icon {...props} icon={avatarIcon} />\n }\n\n if (initials) {\n return <Avatar.Label {...props}>{initials}</Avatar.Label>\n }\n\n return null\n}\n\nfunction AvatarWithPopover<Item extends AvatarStackItem>({\n item,\n size,\n colors,\n}: {\n item: Item\n size: AvatarStackSize\n colors: Map<AvatarStackItemId, Color>\n}) {\n const hasEnabledLink = item.linkUrl && !item.inactive\n const avatarProps = hasEnabledLink\n ? {\n role: 'link',\n href: item.linkUrl,\n }\n : {\n role: 'img',\n // Allow SR to open Popover as it cycles through. Keeps visual with audio.\n // The link or image is labelled, and focus does not enter the Popover.\n tabIndex: -1,\n }\n\n return (\n <Popover\n key={item.id}\n trigger={defaultPopoverTrigger}\n overlay={\n <Popover.Content>\n <AvatarStackContactItem\n id={item.id}\n type={item.type}\n imageUrl={item.imageUrl}\n initials={item.initials}\n inactive={item.inactive}\n name={item.name}\n linkUrl={item.linkUrl}\n description={item.description}\n />\n </Popover.Content>\n }\n >\n <StyledAvatar\n {...avatarProps}\n $color={colors.get(item.id) as Color}\n aria-label={`${item.name}, ${item.description}`}\n disabled={item.inactive}\n size={size}\n >\n <AvatarContent\n imageUrl={item.imageUrl}\n initials={item.initials}\n type={item.type}\n size={size}\n />\n </StyledAvatar>\n </Popover>\n )\n}\n\nexport function FoldedAvatarStack<Item extends AvatarStackItem>({\n items,\n onClickViewAll,\n size,\n restCountLabel,\n isViewAllNeeded,\n title,\n}: FoldedAvatarStackProps<Item>) {\n const I18n = useI18nContext()\n const overlayRef = React.useRef<OverlayTriggerRef>(null)\n const restAvatarId = useId()\n\n return (\n <Popover\n aria-labelledby={restAvatarId}\n overlayRef={overlayRef}\n trigger={defaultPopoverTrigger}\n beforeHide={(e) => {\n return e.type !== 'blur'\n }}\n overlay={\n <Popover.Content>\n <StyledContactItems>\n {items.map((item) => (\n <AvatarStackContactItem\n key={item.id}\n id={item.id}\n type={item.type}\n imageUrl={item.imageUrl}\n initials={item.initials}\n inactive={item.inactive}\n name={item.name}\n linkUrl={item.linkUrl}\n description={item.description}\n />\n ))}\n </StyledContactItems>\n {isViewAllNeeded && (\n <StyledViewAllWrapper>\n <Button\n data-qa=\"core-avatar-stack-view-all-modal-trigger\"\n onClick={onClickViewAll}\n size=\"sm\"\n variant=\"secondary\"\n >\n {I18n.t('core.avatarStack.viewAll')}\n </Button>\n </StyledViewAllWrapper>\n )}\n </Popover.Content>\n }\n >\n <StyledAvatar\n role=\"button\"\n onPress={onClickViewAll}\n id={restAvatarId}\n aria-label={`${restCountLabel}, ${title}`}\n data-qa=\"core-avatar-stack-folded-avatars-popover-trigger\"\n size={size}\n $color=\"gray85\"\n >\n <Avatar.Label aria-hidden>\n <Typography color=\"black\">{restCountLabel}</Typography>\n </Avatar.Label>\n </StyledAvatar>\n </Popover>\n )\n}\n\nexport function ViewAllModal<Item extends AvatarStackItem>({\n isOpen,\n onClose,\n title,\n items,\n}: ViewAllModalProps<Item>) {\n const I18n = useI18nContext()\n const labelId = useId()\n const text = `${title} (${items.length})`\n\n return (\n <Modal\n role=\"dialog\"\n aria-labelledby={labelId}\n open={isOpen}\n onClose={onClose}\n >\n <Modal.Header onClose={onClose}>\n <Modal.Heading id={labelId}>{text}</Modal.Heading>\n </Modal.Header>\n <StyledModalBody>\n {items.map((item) => (\n <AvatarStackContactItem\n key={item.id}\n id={item.id}\n type={item.type}\n imageUrl={item.imageUrl}\n initials={item.initials}\n inactive={item.inactive}\n name={item.name}\n linkUrl={item.linkUrl}\n description={item.description}\n />\n ))}\n </StyledModalBody>\n <Modal.Footer>\n <Modal.FooterButtons>\n <Button onClick={onClose}>{I18n.t('core.avatarStack.close')}</Button>\n </Modal.FooterButtons>\n </Modal.Footer>\n </Modal>\n )\n}\n\nexport function defaultInitials<Item extends AvatarStackItem>(item: Item) {\n return item.initials as string\n}\n\nexport function defaultGetImageUrl<Item extends AvatarStackItem>(item: Item) {\n return item.imageUrl as string\n}\n\nexport function getTransformedItems<Item extends AvatarStackItem>({\n items,\n getInitials,\n getImageUrl,\n}: {\n items: Item[]\n getInitials: AvatarStackProps<Item>['getInitials']\n getImageUrl: AvatarStackProps<Item>['getImageUrl']\n}) {\n return items.map((item) => ({\n ...item,\n initials: getInitials!(item),\n imageUrl: getImageUrl!(item),\n }))\n}\n\nconst _AvatarStack = <Item extends AvatarStackItem>(\n {\n items: _items,\n title,\n size = 'lg',\n getInitials = defaultInitials,\n getImageUrl = defaultGetImageUrl,\n onClickViewAll,\n ...props\n }: AvatarStackProps<Item>,\n ref: React.ForwardedRef<HTMLDivElement>\n) => {\n const [isModalOpen, setIsModalOpen] = useState(false)\n\n const items = useMemo(\n () =>\n getTransformedItems({\n items: _items,\n getInitials,\n getImageUrl,\n }),\n [_items]\n )\n\n const { visibleItems, foldedItems, restCountLabel, isViewAllNeeded } =\n useMemo(() => getOverflowValues(items), [items])\n\n const visibleItemsColors = useMemo(\n () => getColorOrder(visibleItems),\n [visibleItems]\n )\n\n return (\n <div ref={ref} {...props}>\n {isViewAllNeeded && !onClickViewAll && (\n <ViewAllModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n title={title}\n items={items}\n />\n )}\n <StyledWrapper>\n {visibleItems.map((item) => {\n return (\n <AvatarWithPopover\n colors={visibleItemsColors}\n item={item}\n key={`${item.name}_${item.id}`}\n size={size}\n />\n )\n })}\n {foldedItems.length > 0 && (\n <FoldedAvatarStack\n restCountLabel={restCountLabel as string}\n isViewAllNeeded={isViewAllNeeded}\n items={foldedItems}\n onClickViewAll={onClickViewAll || (() => setIsModalOpen(true))}\n size={size}\n title={title}\n />\n )}\n </StyledWrapper>\n </div>\n )\n}\n\n/**\n\n We use avatars to visually represent our users, places, and things in the app.\n These can be in the form of rich media or representative illustrations.\n\n @since 10.19.0\n\n @see [Storybook](https://procore.github.io/core/latest/?path=/story/demos-avatarstack--demo)\n\n @see [Design Guidelines](https://design.procore.com/avatar-stack)\n */\nexport const AvatarStack = forwardRef(_AvatarStack) as <\n Item extends AvatarStackItem\n>(\n props: AvatarStackProps<Item> & { ref?: React.ForwardedRef<HTMLDivElement> }\n) => ReturnType<typeof _AvatarStack>\n\n// @ts-ignore\nAvatarStack.displayName = 'AvatarStack'\n"],"mappings":"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"}
1
+ {"version":3,"file":"AvatarStack.js","names":["Building","People","useId","React","forwardRef","useMemo","useState","Avatar","Button","ContactItem","Link","Modal","OverlayTrigger","Popover","Typography","useI18nContext","mergeRefs","colorsOrder","foldedItemsCap","restCountThreshold","visibleItemsCap","StyledAvatar","StyledContactItem","StyledContactItems","StyledModalBody","StyledViewAllWrapper","StyledWrapper","useAvatarPopover","OVERLAY_WRAPPER_SELECTOR","FOCUSABLE_SELECTOR","POPOVER_TRIGGER","POPOVER_SHOW_KEYS","POPOVER_HIDE_KEYS","overlay","target","getOverflowValues","items","foldedItems","restCountLabel","isViewAllNeeded","visibleItems","length","slice","restItemsCount","concat","getIcon","type","size","createElement","getContactIcon","getAvatarIcon","avatarSize","getColorOrder","avatarItems","reduce","_ref","item","map","color","imageUrl","inactive","set","id","currentColorIndex","indexOf","nextColorIndex","Map","AvatarStackContactItem","_ref2","initials","name","linkUrl","description","disabled","icon","key","Title","href","Description","AvatarContent","_ref3","props","_objectWithoutProperties","_excluded","avatarIcon","Portrait","_extends","Icon","Label","AvatarWithPopover","_ref4","colors","_useAvatarPopover","focusableSelector","overlayWrapperSelector","triggerRef","popoverContentRef","beforeShow","beforeHide","afterHide","trigger","showKeys","hideKeys","restoreFocusOnHide","shrinkOverlay","arrow","trackAriaExpanded","placement","e","Content","ref","role","$color","get","FoldedAvatarStack","_ref5","onClickViewAll","title","viewMoreTriggerRef","I18n","restAvatarId","_useAvatarPopover2","onClick","variant","t","tabIndex","ViewAllModal","_ref6","isOpen","onClose","labelId","text","open","Header","Heading","Footer","FooterButtons","defaultInitials","defaultGetImageUrl","getTransformedItems","_ref7","getInitials","getImageUrl","_objectSpread","MODAL_CLOSE_FOCUS_DELAY_MS","_AvatarStack","_ref8","_items","_ref8$size","_ref8$getInitials","_ref8$getImageUrl","_excluded2","_useState","_useState2","_slicedToArray","isModalOpen","setIsModalOpen","useRef","wasModalOpenRef","useEffect","current","setTimeout","_viewMoreTriggerRef$c","focus","clearTimeout","_useMemo","visibleItemsColors","undefined","AvatarStack","displayName"],"sources":["../../src/AvatarStack/AvatarStack.tsx"],"sourcesContent":["import { Building, People } from '@procore/core-icons'\nimport { useId } from '@react-aria/utils'\nimport React, { forwardRef, useMemo, useState } from 'react'\nimport { Avatar } from '../Avatar'\nimport { Button } from '../Button'\nimport { ContactItem } from '../ContactItem'\nimport { Link } from '../Link'\nimport { Modal } from '../Modal'\nimport { OverlayTrigger } from '../OverlayTrigger'\nimport { Popover } from '../Popover'\nimport { Typography } from '../Typography'\nimport { useI18nContext } from '../_hooks/I18n'\nimport type { TriggerVariant } from '../_hooks/Trigger'\nimport type { Color } from '../_styles/colors'\nimport { mergeRefs } from '../_utils/mergeRefs'\nimport {\n colorsOrder,\n foldedItemsCap,\n restCountThreshold,\n visibleItemsCap,\n} from './AvatarStack.constants'\nimport {\n StyledAvatar,\n StyledContactItem,\n StyledContactItems,\n StyledModalBody,\n StyledViewAllWrapper,\n StyledWrapper,\n} from './AvatarStack.styles'\nimport type {\n AvatarStackItem,\n AvatarStackItemId,\n AvatarStackItemType,\n AvatarStackProps,\n AvatarStackSize,\n FoldedAvatarStackProps,\n ViewAllModalProps,\n} from './AvatarStack.types'\nimport { useAvatarPopover } from './useAvatarPopover'\n\nconst OVERLAY_WRAPPER_SELECTOR =\n '[data-qa=\"core-overlay-trigger-overlay-wrapper\"]'\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n\nconst POPOVER_TRIGGER = ['hover', 'focus'] as TriggerVariant[]\n\nconst POPOVER_SHOW_KEYS = ['Enter', ' ']\n\nconst POPOVER_HIDE_KEYS = {\n overlay: ['Escape', 'Esc'],\n target: ['Escape', 'Esc'],\n}\n\nexport function getOverflowValues<Item extends AvatarStackItem>(items: Item[]) {\n let foldedItems: Item[] = []\n let restCountLabel: string | null = null\n let isViewAllNeeded = false\n\n const visibleItems =\n items.length > visibleItemsCap ? items.slice(0, visibleItemsCap - 1) : items\n const restItemsCount = items.length - visibleItems.length\n\n if (restItemsCount > 0) {\n foldedItems = items.slice(\n visibleItems.length,\n visibleItems.length + foldedItemsCap\n )\n\n restCountLabel =\n restItemsCount > restCountThreshold\n ? `${restCountThreshold}+`\n : `+${restItemsCount}`\n\n isViewAllNeeded = restItemsCount > foldedItemsCap\n }\n\n return {\n visibleItems,\n foldedItems,\n restCountLabel,\n isViewAllNeeded,\n }\n}\n\nexport function getIcon(type: AvatarStackItemType, size: 'md' | 'sm') {\n switch (type) {\n case 'company':\n return <Building size={size} />\n\n case 'group':\n return <People size={size} />\n\n case 'user':\n default:\n return null\n }\n}\n\nfunction getContactIcon(type: AvatarStackItemType) {\n return getIcon(type, 'md')\n}\n\nexport function getAvatarIcon(\n type: AvatarStackItemType,\n size: AvatarStackSize\n) {\n const avatarSize = size === 'lg' ? 'md' : 'sm'\n return getIcon(type, avatarSize)\n}\n\nexport function getColorOrder(avatarItems: AvatarStackItem[]) {\n return avatarItems.reduce(\n ({ map, color }, item) => {\n if (item.imageUrl) {\n return {\n map,\n color,\n }\n }\n\n if (item.inactive) {\n map.set(item.id, 'gray70')\n\n return {\n map,\n color,\n }\n }\n\n map.set(item.id, color)\n\n const currentColorIndex = colorsOrder.indexOf(color)\n const nextColorIndex = (currentColorIndex + 1) % colorsOrder.length\n return {\n map,\n color: item.imageUrl ? color : colorsOrder[nextColorIndex],\n }\n },\n {\n map: new Map<AvatarStackItemId, Color>(),\n color: colorsOrder[0],\n }\n ).map\n}\n\nexport function AvatarStackContactItem({\n id,\n type,\n imageUrl,\n initials,\n inactive,\n name,\n linkUrl,\n description,\n}: AvatarStackItem) {\n return (\n <StyledContactItem\n disabled={inactive}\n icon={getContactIcon(type)}\n imageUrl={imageUrl}\n initials={initials}\n key={id}\n >\n <ContactItem.Title>\n {!inactive && linkUrl ? <Link href={linkUrl}>{name}</Link> : name}\n </ContactItem.Title>\n <ContactItem.Description>\n {type === 'group' ? (\n <Typography color=\"gray15\">{description}</Typography>\n ) : (\n description\n )}\n </ContactItem.Description>\n </StyledContactItem>\n )\n}\n\nexport function AvatarContent({\n imageUrl,\n initials,\n type,\n size,\n ...props\n}: {\n imageUrl?: AvatarStackItem['imageUrl']\n initials: AvatarStackItem['initials']\n type: AvatarStackItem['type']\n size: AvatarStackSize\n}) {\n const avatarIcon = getAvatarIcon(type, size)\n\n if (imageUrl) {\n return <Avatar.Portrait {...props} imageUrl={imageUrl} />\n }\n\n if (avatarIcon) {\n return <Avatar.Icon {...props} icon={avatarIcon} />\n }\n\n if (initials) {\n return <Avatar.Label {...props}>{initials}</Avatar.Label>\n }\n\n return null\n}\n\nfunction AvatarWithPopover<Item extends AvatarStackItem>({\n item,\n size,\n colors,\n}: {\n item: Item\n size: AvatarStackSize\n colors: Map<AvatarStackItemId, Color>\n}) {\n const { triggerRef, popoverContentRef, beforeShow, beforeHide, afterHide } =\n useAvatarPopover({\n focusableSelector: FOCUSABLE_SELECTOR,\n overlayWrapperSelector: OVERLAY_WRAPPER_SELECTOR,\n })\n\n return (\n <OverlayTrigger\n key={item.id}\n trigger={POPOVER_TRIGGER}\n showKeys={POPOVER_SHOW_KEYS}\n hideKeys={POPOVER_HIDE_KEYS}\n restoreFocusOnHide={false}\n shrinkOverlay\n arrow\n trackAriaExpanded\n placement=\"top\"\n beforeShow={(e) => {\n if (item.inactive) return false\n return beforeShow(e)\n }}\n beforeHide={beforeHide}\n afterHide={afterHide}\n overlay={\n <Popover.Content ref={popoverContentRef} placement=\"top\">\n <AvatarStackContactItem\n id={item.id}\n type={item.type}\n imageUrl={item.imageUrl}\n initials={item.initials}\n inactive={item.inactive}\n name={item.name}\n linkUrl={item.linkUrl}\n description={item.description}\n />\n </Popover.Content>\n }\n >\n <StyledAvatar\n ref={triggerRef}\n role=\"button\"\n $color={colors.get(item.id) as Color}\n aria-label={`${item.name}, ${item.description}`}\n disabled={item.inactive}\n size={size}\n >\n <AvatarContent\n imageUrl={item.imageUrl}\n initials={item.initials}\n type={item.type}\n size={size}\n />\n </StyledAvatar>\n </OverlayTrigger>\n )\n}\n\nexport function FoldedAvatarStack<Item extends AvatarStackItem>({\n items,\n onClickViewAll,\n size,\n restCountLabel,\n isViewAllNeeded,\n title,\n viewMoreTriggerRef,\n}: FoldedAvatarStackProps<Item>) {\n const I18n = useI18nContext()\n const restAvatarId = useId()\n const { triggerRef, popoverContentRef, beforeShow, beforeHide, afterHide } =\n useAvatarPopover({\n focusableSelector: FOCUSABLE_SELECTOR,\n overlayWrapperSelector: OVERLAY_WRAPPER_SELECTOR,\n })\n\n return (\n <OverlayTrigger\n aria-labelledby={restAvatarId}\n trigger={POPOVER_TRIGGER}\n showKeys={POPOVER_SHOW_KEYS}\n hideKeys={POPOVER_HIDE_KEYS}\n restoreFocusOnHide={false}\n shrinkOverlay\n arrow\n trackAriaExpanded\n placement=\"top\"\n beforeShow={beforeShow}\n beforeHide={beforeHide}\n afterHide={afterHide}\n overlay={\n <Popover.Content ref={popoverContentRef} placement=\"top\">\n <StyledContactItems>\n {items.map((item) => (\n <AvatarStackContactItem\n key={item.id}\n id={item.id}\n type={item.type}\n imageUrl={item.imageUrl}\n initials={item.initials}\n inactive={item.inactive}\n name={item.name}\n linkUrl={item.linkUrl}\n description={item.description}\n />\n ))}\n </StyledContactItems>\n {isViewAllNeeded && (\n <StyledViewAllWrapper>\n <Button\n data-qa=\"core-avatar-stack-view-all-modal-trigger\"\n onClick={onClickViewAll}\n size=\"sm\"\n variant=\"secondary\"\n >\n {I18n.t('core.avatarStack.viewAll')}\n </Button>\n </StyledViewAllWrapper>\n )}\n </Popover.Content>\n }\n >\n <StyledAvatar\n ref={\n viewMoreTriggerRef\n ? mergeRefs(triggerRef, viewMoreTriggerRef)\n : triggerRef\n }\n role=\"button\"\n tabIndex={0}\n id={restAvatarId}\n aria-label={`${restCountLabel}, ${title}`}\n data-qa=\"core-avatar-stack-folded-avatars-popover-trigger\"\n size={size}\n $color=\"gray85\"\n >\n <Avatar.Label aria-hidden>\n <Typography color=\"black\">{restCountLabel}</Typography>\n </Avatar.Label>\n </StyledAvatar>\n </OverlayTrigger>\n )\n}\n\nexport function ViewAllModal<Item extends AvatarStackItem>({\n isOpen,\n onClose,\n title,\n items,\n}: ViewAllModalProps<Item>) {\n const I18n = useI18nContext()\n const labelId = useId()\n const text = `${title} (${items.length})`\n\n return (\n <Modal\n role=\"dialog\"\n aria-labelledby={labelId}\n open={isOpen}\n onClose={onClose}\n >\n <Modal.Header onClose={onClose}>\n <Modal.Heading id={labelId}>{text}</Modal.Heading>\n </Modal.Header>\n <StyledModalBody>\n {items.map((item) => (\n <AvatarStackContactItem\n key={item.id}\n id={item.id}\n type={item.type}\n imageUrl={item.imageUrl}\n initials={item.initials}\n inactive={item.inactive}\n name={item.name}\n linkUrl={item.linkUrl}\n description={item.description}\n />\n ))}\n </StyledModalBody>\n <Modal.Footer>\n <Modal.FooterButtons>\n <Button onClick={onClose}>{I18n.t('core.avatarStack.close')}</Button>\n </Modal.FooterButtons>\n </Modal.Footer>\n </Modal>\n )\n}\n\nexport function defaultInitials<Item extends AvatarStackItem>(item: Item) {\n return item.initials as string\n}\n\nexport function defaultGetImageUrl<Item extends AvatarStackItem>(item: Item) {\n return item.imageUrl as string\n}\n\nexport function getTransformedItems<Item extends AvatarStackItem>({\n items,\n getInitials,\n getImageUrl,\n}: {\n items: Item[]\n getInitials: AvatarStackProps<Item>['getInitials']\n getImageUrl: AvatarStackProps<Item>['getImageUrl']\n}) {\n return items.map((item) => ({\n ...item,\n initials: getInitials!(item),\n imageUrl: getImageUrl!(item),\n }))\n}\n\nconst MODAL_CLOSE_FOCUS_DELAY_MS = 350\n\nconst _AvatarStack = <Item extends AvatarStackItem>(\n {\n items: _items,\n title,\n size = 'lg',\n getInitials = defaultInitials,\n getImageUrl = defaultGetImageUrl,\n onClickViewAll,\n ...props\n }: AvatarStackProps<Item>,\n ref: React.ForwardedRef<HTMLDivElement>\n) => {\n const [isModalOpen, setIsModalOpen] = useState(false)\n const viewMoreTriggerRef = React.useRef<HTMLDivElement>(null)\n const wasModalOpenRef = React.useRef(false)\n\n React.useEffect(() => {\n if (wasModalOpenRef.current && !isModalOpen) {\n const id = setTimeout(() => {\n viewMoreTriggerRef.current?.focus()\n }, MODAL_CLOSE_FOCUS_DELAY_MS)\n wasModalOpenRef.current = false\n return () => clearTimeout(id)\n }\n wasModalOpenRef.current = isModalOpen\n }, [isModalOpen])\n\n const items = useMemo(\n () =>\n getTransformedItems({\n items: _items,\n getInitials,\n getImageUrl,\n }),\n [_items]\n )\n\n const { visibleItems, foldedItems, restCountLabel, isViewAllNeeded } =\n useMemo(() => getOverflowValues(items), [items])\n\n const visibleItemsColors = useMemo(\n () => getColorOrder(visibleItems),\n [visibleItems]\n )\n\n return (\n <div ref={ref} {...props}>\n {isViewAllNeeded && !onClickViewAll && (\n <ViewAllModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n title={title}\n items={items}\n />\n )}\n <StyledWrapper>\n {visibleItems.map((item) => {\n return (\n <AvatarWithPopover\n colors={visibleItemsColors}\n item={item}\n key={`${item.name}_${item.id}`}\n size={size}\n />\n )\n })}\n {foldedItems.length > 0 && (\n <FoldedAvatarStack\n restCountLabel={restCountLabel as string}\n isViewAllNeeded={isViewAllNeeded}\n items={foldedItems}\n onClickViewAll={onClickViewAll || (() => setIsModalOpen(true))}\n size={size}\n title={title}\n viewMoreTriggerRef={\n !onClickViewAll ? viewMoreTriggerRef : undefined\n }\n />\n )}\n </StyledWrapper>\n </div>\n )\n}\n\n/**\n\n We use avatars to visually represent our users, places, and things in the app.\n These can be in the form of rich media or representative illustrations.\n\n @since 10.19.0\n\n @see [Storybook](https://procore.github.io/core/latest/?path=/story/demos-avatarstack--demo)\n\n @see [Design Guidelines](https://design.procore.com/avatar-stack)\n */\nexport const AvatarStack = forwardRef(_AvatarStack) as <\n Item extends AvatarStackItem\n>(\n props: AvatarStackProps<Item> & { ref?: React.ForwardedRef<HTMLDivElement> }\n) => ReturnType<typeof _AvatarStack>\n\n// @ts-ignore\nAvatarStack.displayName = 'AvatarStack'\n"],"mappings":"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"}
@@ -7,32 +7,32 @@ import { spacing } from '../_styles/spacing';
7
7
  var maxModalWidth = 528;
8
8
  var StyledBaseAvatar = /*#__PURE__*/styled(Avatar).withConfig({
9
9
  displayName: "StyledBaseAvatar",
10
- componentId: "core-12_38_0__sc-ft72hu-0"
11
- })(["border-color:", ";border-style:solid;border-width:1px;&:hover{z-index:1;}&[role='img']:focus{outline:none;}"], colors.white);
10
+ componentId: "core-12_40_0-beta_0__sc-ft72hu-0"
11
+ })(["border-color:", ";border-style:solid;border-width:1px;&:hover{z-index:1;}"], colors.white);
12
12
  export var StyledAvatar = /*#__PURE__*/styled(StyledBaseAvatar).withConfig({
13
13
  displayName: "StyledAvatar",
14
- componentId: "core-12_38_0__sc-ft72hu-1"
14
+ componentId: "core-12_40_0-beta_0__sc-ft72hu-1"
15
15
  })(["background-color:", ";"], function (props) {
16
16
  return colors[props.$color];
17
17
  });
18
18
  export var StyledContactItems = /*#__PURE__*/styled.div.withConfig({
19
19
  displayName: "StyledContactItems",
20
- componentId: "core-12_38_0__sc-ft72hu-2"
20
+ componentId: "core-12_40_0-beta_0__sc-ft72hu-2"
21
21
  })(["padding-top:", "px;padding-bottom:", "px;padding-left:", "px;"], spacing.sm, spacing.sm, spacing.xs);
22
22
  export var StyledWrapper = /*#__PURE__*/styled.div.withConfig({
23
23
  displayName: "StyledWrapper",
24
- componentId: "core-12_38_0__sc-ft72hu-3"
24
+ componentId: "core-12_40_0-beta_0__sc-ft72hu-3"
25
25
  })(["display:flex;", " + ", "{margin-left:-", "px;}"], StyledAvatar, StyledAvatar, spacing.sm);
26
26
  export var StyledViewAllWrapper = /*#__PURE__*/styled.div.withConfig({
27
27
  displayName: "StyledViewAllWrapper",
28
- componentId: "core-12_38_0__sc-ft72hu-4"
28
+ componentId: "core-12_40_0-beta_0__sc-ft72hu-4"
29
29
  })(["display:flex;margin-left:", "px;margin-bottom:", "px;"], spacing.md, spacing.lg);
30
30
  export var StyledModalBody = /*#__PURE__*/styled(Modal.Body).withConfig({
31
31
  displayName: "StyledModalBody",
32
- componentId: "core-12_38_0__sc-ft72hu-5"
32
+ componentId: "core-12_40_0-beta_0__sc-ft72hu-5"
33
33
  })(["max-width:", "px;"], maxModalWidth);
34
34
  export var StyledContactItem = /*#__PURE__*/styled(ContactItem).withConfig({
35
35
  displayName: "StyledContactItem",
36
- componentId: "core-12_38_0__sc-ft72hu-6"
36
+ componentId: "core-12_40_0-beta_0__sc-ft72hu-6"
37
37
  })(["flex-shrink:0;"]);
38
38
  //# sourceMappingURL=AvatarStack.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarStack.styles.js","names":["styled","Avatar","ContactItem","Modal","colors","spacing","maxModalWidth","StyledBaseAvatar","withConfig","displayName","componentId","white","StyledAvatar","props","$color","StyledContactItems","div","sm","xs","StyledWrapper","StyledViewAllWrapper","md","lg","StyledModalBody","Body","StyledContactItem"],"sources":["../../src/AvatarStack/AvatarStack.styles.ts"],"sourcesContent":["import styled from 'styled-components'\nimport { Avatar } from '../Avatar'\nimport { ContactItem } from '../ContactItem'\nimport { Modal } from '../Modal'\nimport type { Color } from '../_styles/colors'\nimport { colors } from '../_styles/colors'\nimport { spacing } from '../_styles/spacing'\n\nconst maxModalWidth = 528\n\nconst StyledBaseAvatar = styled(Avatar)`\n border-color: ${colors.white};\n border-style: solid;\n border-width: 1px;\n\n &:hover {\n z-index: 1;\n }\n &[role='img']:focus {\n outline: none;\n }\n`\n\nexport const StyledAvatar = styled(StyledBaseAvatar)<{ $color: Color }>`\n background-color: ${(props: { $color: Color }) => colors[props.$color]};\n`\n\nexport const StyledContactItems = styled.div`\n padding-top: ${spacing.sm}px;\n padding-bottom: ${spacing.sm}px;\n padding-left: ${spacing.xs}px;\n`\n\nexport const StyledWrapper = styled.div`\n display: flex;\n\n ${StyledAvatar} + ${StyledAvatar} {\n margin-left: -${spacing.sm}px;\n }\n`\n\nexport const StyledViewAllWrapper = styled.div`\n display: flex;\n margin-left: ${spacing.md}px;\n margin-bottom: ${spacing.lg}px;\n`\n\nexport const StyledModalBody = styled(Modal.Body)`\n max-width: ${maxModalWidth}px;\n`\n\nexport const StyledContactItem = styled(ContactItem)`\n flex-shrink: 0;\n`\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,mBAAmB;AACtC,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,WAAW,QAAQ,gBAAgB;AAC5C,SAASC,KAAK,QAAQ,UAAU;AAEhC,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,SAASC,OAAO,QAAQ,oBAAoB;AAE5C,IAAMC,aAAa,GAAG,GAAG;AAEzB,IAAMC,gBAAgB,gBAAGP,MAAM,CAACC,MAAM,CAAC,CAAAO,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,oHACrBN,MAAM,CAACO,KAAK,CAU7B;AAED,OAAO,IAAMC,YAAY,gBAAGZ,MAAM,CAACO,gBAAgB,CAAC,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,+BAC9B,UAACG,KAAwB;EAAA,OAAKT,MAAM,CAACS,KAAK,CAACC,MAAM,CAAC;AAAA,EACvE;AAED,OAAO,IAAMC,kBAAkB,gBAAGf,MAAM,CAACgB,GAAG,CAAAR,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,sEAC3BL,OAAO,CAACY,EAAE,EACPZ,OAAO,CAACY,EAAE,EACZZ,OAAO,CAACa,EAAE,CAC3B;AAED,OAAO,IAAMC,aAAa,gBAAGnB,MAAM,CAACgB,GAAG,CAAAR,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,uDAGnCE,YAAY,EAAMA,YAAY,EACdP,OAAO,CAACY,EAAE,CAE7B;AAED,OAAO,IAAMG,oBAAoB,gBAAGpB,MAAM,CAACgB,GAAG,CAAAR,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,8DAE7BL,OAAO,CAACgB,EAAE,EACRhB,OAAO,CAACiB,EAAE,CAC5B;AAED,OAAO,IAAMC,eAAe,gBAAGvB,MAAM,CAACG,KAAK,CAACqB,IAAI,CAAC,CAAAhB,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,0BAClCJ,aAAa,CAC3B;AAED,OAAO,IAAMmB,iBAAiB,gBAAGzB,MAAM,CAACE,WAAW,CAAC,CAAAM,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,sBAEnD"}
1
+ {"version":3,"file":"AvatarStack.styles.js","names":["styled","Avatar","ContactItem","Modal","colors","spacing","maxModalWidth","StyledBaseAvatar","withConfig","displayName","componentId","white","StyledAvatar","props","$color","StyledContactItems","div","sm","xs","StyledWrapper","StyledViewAllWrapper","md","lg","StyledModalBody","Body","StyledContactItem"],"sources":["../../src/AvatarStack/AvatarStack.styles.ts"],"sourcesContent":["import styled from 'styled-components'\nimport { Avatar } from '../Avatar'\nimport { ContactItem } from '../ContactItem'\nimport { Modal } from '../Modal'\nimport type { Color } from '../_styles/colors'\nimport { colors } from '../_styles/colors'\nimport { spacing } from '../_styles/spacing'\n\nconst maxModalWidth = 528\n\nconst StyledBaseAvatar = styled(Avatar)`\n border-color: ${colors.white};\n border-style: solid;\n border-width: 1px;\n\n &:hover {\n z-index: 1;\n }\n`\n\nexport const StyledAvatar = styled(StyledBaseAvatar)<{ $color: Color }>`\n background-color: ${(props: { $color: Color }) => colors[props.$color]};\n`\n\nexport const StyledContactItems = styled.div`\n padding-top: ${spacing.sm}px;\n padding-bottom: ${spacing.sm}px;\n padding-left: ${spacing.xs}px;\n`\n\nexport const StyledWrapper = styled.div`\n display: flex;\n\n ${StyledAvatar} + ${StyledAvatar} {\n margin-left: -${spacing.sm}px;\n }\n`\n\nexport const StyledViewAllWrapper = styled.div`\n display: flex;\n margin-left: ${spacing.md}px;\n margin-bottom: ${spacing.lg}px;\n`\n\nexport const StyledModalBody = styled(Modal.Body)`\n max-width: ${maxModalWidth}px;\n`\n\nexport const StyledContactItem = styled(ContactItem)`\n flex-shrink: 0;\n`\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,mBAAmB;AACtC,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,WAAW,QAAQ,gBAAgB;AAC5C,SAASC,KAAK,QAAQ,UAAU;AAEhC,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,SAASC,OAAO,QAAQ,oBAAoB;AAE5C,IAAMC,aAAa,GAAG,GAAG;AAEzB,IAAMC,gBAAgB,gBAAGP,MAAM,CAACC,MAAM,CAAC,CAAAO,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,kFACrBN,MAAM,CAACO,KAAK,CAO7B;AAED,OAAO,IAAMC,YAAY,gBAAGZ,MAAM,CAACO,gBAAgB,CAAC,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,+BAC9B,UAACG,KAAwB;EAAA,OAAKT,MAAM,CAACS,KAAK,CAACC,MAAM,CAAC;AAAA,EACvE;AAED,OAAO,IAAMC,kBAAkB,gBAAGf,MAAM,CAACgB,GAAG,CAAAR,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,sEAC3BL,OAAO,CAACY,EAAE,EACPZ,OAAO,CAACY,EAAE,EACZZ,OAAO,CAACa,EAAE,CAC3B;AAED,OAAO,IAAMC,aAAa,gBAAGnB,MAAM,CAACgB,GAAG,CAAAR,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,uDAGnCE,YAAY,EAAMA,YAAY,EACdP,OAAO,CAACY,EAAE,CAE7B;AAED,OAAO,IAAMG,oBAAoB,gBAAGpB,MAAM,CAACgB,GAAG,CAAAR,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,8DAE7BL,OAAO,CAACgB,EAAE,EACRhB,OAAO,CAACiB,EAAE,CAC5B;AAED,OAAO,IAAMC,eAAe,gBAAGvB,MAAM,CAACG,KAAK,CAACqB,IAAI,CAAC,CAAAhB,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,0BAClCJ,aAAa,CAC3B;AAED,OAAO,IAAMmB,iBAAiB,gBAAGzB,MAAM,CAACE,WAAW,CAAC,CAAAM,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,sBAEnD"}
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  export declare type AvatarStackItemId = string | number;
2
3
  export declare type AvatarStackItemType = 'company' | 'user' | 'group';
3
4
  export interface AvatarStackItem {
@@ -103,6 +104,12 @@ export interface FoldedAvatarStackProps<Item extends AvatarStackItem> {
103
104
  * @since 11.13.0
104
105
  */
105
106
  title: string;
107
+ /**
108
+ * Optional ref for the view-more ("+N") trigger. Used to restore focus when
109
+ * closing the View All modal (e.g. after Escape) for keyboard accessibility.
110
+ * since 12.39.0
111
+ */
112
+ viewMoreTriggerRef?: React.RefObject<HTMLDivElement | null>;
106
113
  }
107
114
  export interface ViewAllModalProps<Item extends AvatarStackItem> {
108
115
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarStack.types.js","names":[],"sources":["../../src/AvatarStack/AvatarStack.types.ts"],"sourcesContent":["export type AvatarStackItemId = string | number\n\nexport type AvatarStackItemType = 'company' | 'user' | 'group'\n\nexport interface AvatarStackItem {\n /**\n * Avatar ID\n * @since 10.19.0\n */\n id: AvatarStackItemId\n /**\n * Avatar name\n * @since 10.19.0\n */\n name: string\n /**\n * Avatar type\n * @since 10.19.0\n */\n type: AvatarStackItemType\n /**\n * Avatar description\n * @since 10.19.0\n */\n description?: string\n /**\n * Avatar image URL\n * @since 10.19.0\n */\n imageUrl?: string\n /**\n * Avatar link URL\n * @since 10.19.0\n */\n linkUrl?: string\n /**\n * Avatar initials\n * @since 10.19.0\n */\n initials?: string\n /**\n * Avatar inactive state\n * @defaultValue false\n * @since 10.19.0\n */\n inactive?: boolean\n}\n\nexport type AvatarStackSize = 'sm' | 'md' | 'lg'\n\nexport interface AvatarStackProps<\n Item extends AvatarStackItem = AvatarStackItem\n> {\n /**\n * Avatar stack items\n * @since 10.22.0\n */\n items: Item[]\n /**\n * Avatar item imageURL getter\n * @since 10.22.0\n */\n getImageUrl?: (item: Item) => string\n /**\n * Avatar item initials getter\n * @since 10.22.0\n */\n getInitials?: (item: Item) => string\n /**\n * Avatar stack title\n * @since 10.19.0\n */\n title: string\n\n /**\n * Avatar stack size\n * @defaultValue lg\n * @since 10.19.0\n */\n size?: AvatarStackSize\n\n /**\n * The callback to run when user clicks on view all button.\n * If provided, the modal with all items will not be shown.\n * @since 12.12.0\n */\n onClickViewAll?: () => void\n}\n\nexport interface FoldedAvatarStackProps<Item extends AvatarStackItem> {\n /**\n * @since 10.22.0\n */\n items: Item[]\n /**\n * @since 10.19.0\n */\n onClickViewAll: () => void\n /**\n * @since 10.19.0\n */\n size: AvatarStackSize\n /**\n * @since 10.19.0\n */\n restCountLabel: string\n /**\n * @since 10.19.0\n */\n isViewAllNeeded: boolean\n /**\n * @since 11.13.0\n */\n title: string\n}\n\nexport interface ViewAllModalProps<Item extends AvatarStackItem> {\n /**\n * @since 10.22.0\n */\n items: Item[]\n /**\n * @since 10.19.0\n */\n onClose: () => void\n /**\n * @since 10.19.0\n */\n isOpen: boolean\n /**\n * @since 10.19.0\n */\n title: string\n}\n"],"mappings":""}
1
+ {"version":3,"file":"AvatarStack.types.js","names":[],"sources":["../../src/AvatarStack/AvatarStack.types.ts"],"sourcesContent":["export type AvatarStackItemId = string | number\n\nexport type AvatarStackItemType = 'company' | 'user' | 'group'\n\nexport interface AvatarStackItem {\n /**\n * Avatar ID\n * @since 10.19.0\n */\n id: AvatarStackItemId\n /**\n * Avatar name\n * @since 10.19.0\n */\n name: string\n /**\n * Avatar type\n * @since 10.19.0\n */\n type: AvatarStackItemType\n /**\n * Avatar description\n * @since 10.19.0\n */\n description?: string\n /**\n * Avatar image URL\n * @since 10.19.0\n */\n imageUrl?: string\n /**\n * Avatar link URL\n * @since 10.19.0\n */\n linkUrl?: string\n /**\n * Avatar initials\n * @since 10.19.0\n */\n initials?: string\n /**\n * Avatar inactive state\n * @defaultValue false\n * @since 10.19.0\n */\n inactive?: boolean\n}\n\nexport type AvatarStackSize = 'sm' | 'md' | 'lg'\n\nexport interface AvatarStackProps<\n Item extends AvatarStackItem = AvatarStackItem\n> {\n /**\n * Avatar stack items\n * @since 10.22.0\n */\n items: Item[]\n /**\n * Avatar item imageURL getter\n * @since 10.22.0\n */\n getImageUrl?: (item: Item) => string\n /**\n * Avatar item initials getter\n * @since 10.22.0\n */\n getInitials?: (item: Item) => string\n /**\n * Avatar stack title\n * @since 10.19.0\n */\n title: string\n\n /**\n * Avatar stack size\n * @defaultValue lg\n * @since 10.19.0\n */\n size?: AvatarStackSize\n\n /**\n * The callback to run when user clicks on view all button.\n * If provided, the modal with all items will not be shown.\n * @since 12.12.0\n */\n onClickViewAll?: () => void\n}\n\nexport interface FoldedAvatarStackProps<Item extends AvatarStackItem> {\n /**\n * @since 10.22.0\n */\n items: Item[]\n /**\n * @since 10.19.0\n */\n onClickViewAll: () => void\n /**\n * @since 10.19.0\n */\n size: AvatarStackSize\n /**\n * @since 10.19.0\n */\n restCountLabel: string\n /**\n * @since 10.19.0\n */\n isViewAllNeeded: boolean\n /**\n * @since 11.13.0\n */\n title: string\n /**\n * Optional ref for the view-more (\"+N\") trigger. Used to restore focus when\n * closing the View All modal (e.g. after Escape) for keyboard accessibility.\n * since 12.39.0\n */\n viewMoreTriggerRef?: React.RefObject<HTMLDivElement | null>\n}\n\nexport interface ViewAllModalProps<Item extends AvatarStackItem> {\n /**\n * @since 10.22.0\n */\n items: Item[]\n /**\n * @since 10.19.0\n */\n onClose: () => void\n /**\n * @since 10.19.0\n */\n isOpen: boolean\n /**\n * @since 10.19.0\n */\n title: string\n}\n"],"mappings":""}