@procore/core-react 12.37.0 → 12.39.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.
- package/.jest/testShims.js +6 -0
- package/CHANGELOG.md +64 -0
- package/dist/AnchorNavigation/AnchorNavigation.styles.js +3 -3
- package/dist/Avatar/Avatar.styles.js +6 -6
- package/dist/Avatar/Avatar.styles.js.map +1 -1
- package/dist/AvatarStack/AvatarStack.js +65 -25
- package/dist/AvatarStack/AvatarStack.js.map +1 -1
- package/dist/AvatarStack/AvatarStack.styles.js +8 -8
- package/dist/AvatarStack/AvatarStack.styles.js.map +1 -1
- package/dist/AvatarStack/useAvatarPopover.d.ts +14 -0
- package/dist/AvatarStack/useAvatarPopover.js +57 -0
- package/dist/AvatarStack/useAvatarPopover.js.map +1 -0
- package/dist/AvatarStack/useAvatarPopover.types.d.ts +4 -0
- package/dist/AvatarStack/useAvatarPopover.types.js +2 -0
- package/dist/AvatarStack/useAvatarPopover.types.js.map +1 -0
- package/dist/Badge/Badge.styles.js +2 -2
- package/dist/BadgePill/BadgePill.styles.js +4 -4
- package/dist/Banner/Banner.d.ts +2 -1
- package/dist/Banner/Banner.js +53 -34
- package/dist/Banner/Banner.js.map +1 -1
- package/dist/Banner/Banner.styles.js +10 -10
- package/dist/Banner/Banner.types.d.ts +6 -0
- package/dist/Banner/Banner.types.js.map +1 -1
- package/dist/Banner/index.d.ts +1 -1
- package/dist/Banner/index.js.map +1 -1
- package/dist/Box/Box.styles.js +1 -1
- package/dist/Breadcrumbs/Breadcrumbs.styles.js +4 -4
- package/dist/Button/Button.styles.js +5 -5
- package/dist/Calendar/Calendar.styles.js +9 -9
- package/dist/Card/Card.styles.js +1 -1
- package/dist/Checkbox/Checkbox.d.ts +0 -1
- package/dist/Checkbox/Checkbox.js +5 -6
- package/dist/Checkbox/Checkbox.js.map +1 -1
- package/dist/Checkbox/Checkbox.styles.js +6 -6
- package/dist/ContactItem/ContactItem.styles.js +5 -5
- package/dist/Content/Content.styles.js +2 -2
- package/dist/DateInput/DateInput.js +12 -2
- package/dist/DateInput/DateInput.js.map +1 -1
- package/dist/DateInput/DateInput.styles.js +6 -6
- package/dist/DateSelect/DateSelect.types.d.ts +1 -1
- package/dist/DateSelect/DateSelect.types.js.map +1 -1
- package/dist/DetailPage/DetailPage.styles.js +7 -7
- package/dist/Dropdown/Dropdown.styles.js +3 -3
- package/dist/DropdownFlyout/DropdownFlyout.styles.js +4 -4
- package/dist/Dropzone/Dropzone.js +1 -1
- package/dist/Dropzone/Dropzone.styles.js +9 -9
- package/dist/EmptyState/EmptyState.styles.js +6 -6
- package/dist/Field/Field.styles.js +3 -3
- package/dist/FileList/FileList.js +3 -7
- package/dist/FileList/FileList.js.map +1 -1
- package/dist/FileList/FileList.styles.d.ts +0 -1
- package/dist/FileList/FileList.styles.js +3 -7
- package/dist/FileList/FileList.styles.js.map +1 -1
- package/dist/FileSelect/FileExplorer/FileExplorer.styles.js +9 -9
- package/dist/FileSelect/FileExplorer/FileExplorerSidebar.js +3 -1
- package/dist/FileSelect/FileExplorer/FileExplorerSidebar.js.map +1 -1
- package/dist/FileSelect/FileExplorer/FileExplorerSidebar.styles.js +3 -3
- package/dist/FileSelect/FileSelect.styles.js +2 -2
- package/dist/FileSelect/FileSelectDropzone/FileSelectDropzone.styles.js +3 -3
- package/dist/FileSelect/FileTokenList/FileTokenList.styles.js +2 -2
- package/dist/FileSelect/GridSource/GridSource.styles.js +6 -6
- package/dist/FileSelect/LocalSource/LocalSource.styles.js +4 -4
- package/dist/FileSelect/SourceItem/SourceItem.js +10 -5
- package/dist/FileSelect/SourceItem/SourceItem.js.map +1 -1
- package/dist/FileSelect/SourceItem/SourceItem.styles.js +3 -3
- package/dist/FileSelect/ThumbnailList/ThumbnailList.styles.js +6 -6
- package/dist/FileSelect/TreeSource/TreeSource.styles.js +1 -1
- package/dist/FileToken/FileToken.styles.js +4 -4
- package/dist/FilterToken/FilterToken.styles.js +5 -5
- package/dist/FlexList/FlexList.styles.js +1 -1
- package/dist/Form/Form.js +74 -58
- package/dist/Form/Form.js.map +1 -1
- package/dist/Form/Form.styles.d.ts +0 -14
- package/dist/Form/Form.styles.js +14 -24
- package/dist/Form/Form.styles.js.map +1 -1
- package/dist/Form/Form.types.d.ts +22 -2
- package/dist/Form/Form.types.js.map +1 -1
- package/dist/Form/FormFieldTooltip.js +4 -11
- package/dist/Form/FormFieldTooltip.js.map +1 -1
- package/dist/Form/StyledFormikForm.styles.js +2 -2
- package/dist/Form/stories/util.js +1 -12
- package/dist/Form/stories/util.js.map +1 -1
- package/dist/GhostPlaceholder/GhostPlaceholder.styles.js +2 -2
- package/dist/Grid/Grid.styles.js +2 -2
- package/dist/GroupSelect/GroupSelect.js +5 -4
- package/dist/GroupSelect/GroupSelect.js.map +1 -1
- package/dist/GroupSelect/GroupSelect.styles.js +1 -1
- package/dist/GroupSelect/GroupSelect.types.d.ts +5 -5
- package/dist/GroupSelect/GroupSelect.types.js.map +1 -1
- package/dist/Input/Input.styles.js +1 -1
- package/dist/Link/Link.styles.js +1 -1
- package/dist/ListPage/ListPage.styles.js +8 -8
- package/dist/Loader/Loader.styles.js +2 -2
- package/dist/Menu/Menu.js +1 -5
- package/dist/Menu/Menu.js.map +1 -1
- package/dist/MenuImperative/MenuImperative.js +7 -10
- package/dist/MenuImperative/MenuImperative.js.map +1 -1
- package/dist/MenuImperative/MenuImperative.styles.d.ts +2 -3
- package/dist/MenuImperative/MenuImperative.styles.js +26 -25
- package/dist/MenuImperative/MenuImperative.styles.js.map +1 -1
- package/dist/MenuImperative/MenuImperative.types.d.ts +4 -0
- package/dist/MenuImperative/MenuImperative.types.js.map +1 -1
- package/dist/MenuImperative/sensors.js +16 -58
- package/dist/MenuImperative/sensors.js.map +1 -1
- package/dist/Modal/Modal.styles.js +13 -13
- package/dist/MultiSelect/MultiSelect.js +50 -28
- package/dist/MultiSelect/MultiSelect.js.map +1 -1
- package/dist/MultiSelect/MultiSelect.styles.d.ts +1 -0
- package/dist/MultiSelect/MultiSelect.styles.js +12 -8
- package/dist/MultiSelect/MultiSelect.styles.js.map +1 -1
- package/dist/MultiSelect/MultiSelect.types.d.ts +31 -1
- package/dist/MultiSelect/MultiSelect.types.js.map +1 -1
- package/dist/NextMenu/NextMenu.styles.js +3 -3
- package/dist/Notation/Notation.js +1 -1
- package/dist/NumberInput/NumberInput.styles.js +7 -7
- package/dist/Overlay/OverlayArrow.styles.js +1 -1
- package/dist/OverlayTrigger/OverlayTrigger.js +4 -2
- package/dist/OverlayTrigger/OverlayTrigger.js.map +1 -1
- package/dist/OverlayTrigger/OverlayTrigger.types.d.ts +8 -0
- package/dist/OverlayTrigger/OverlayTrigger.types.js.map +1 -1
- package/dist/OverlayTrigger/a11yPresets.js +5 -3
- package/dist/OverlayTrigger/a11yPresets.js.map +1 -1
- package/dist/PageLayout/PageLayout.js +31 -12
- package/dist/PageLayout/PageLayout.js.map +1 -1
- package/dist/PageLayout/PageLayout.styles.d.ts +1 -0
- package/dist/PageLayout/PageLayout.styles.js +17 -17
- package/dist/PageLayout/PageLayout.styles.js.map +1 -1
- package/dist/PageLayout/PageLayout.types.d.ts +10 -0
- package/dist/PageLayout/PageLayout.types.js.map +1 -1
- package/dist/PageTemplate/PageFooterTemplate/PageFooterTemplate.styles.js +1 -1
- package/dist/PageTemplate/PageHeaderTemplate/PageHeaderTemplate.styles.js +3 -3
- package/dist/PageTemplate/PagePaneTemplate/PagePaneTemplate.styles.js +2 -2
- package/dist/PageTemplate/PageTemplate/PageTemplate.styles.js +3 -3
- package/dist/Pagination/Pagination.styles.js +5 -5
- package/dist/Panel/Panel.styles.js +11 -11
- package/dist/Pill/Pill.styles.js +3 -3
- package/dist/PillSelect/PillSelect.js +4 -3
- package/dist/PillSelect/PillSelect.js.map +1 -1
- package/dist/PillSelect/PillSelect.styles.js +4 -4
- package/dist/Popover/Popover.js +2 -1
- package/dist/Popover/Popover.js.map +1 -1
- package/dist/Popover/Popover.styles.js +2 -2
- package/dist/Portal/Portal.styles.js +1 -1
- package/dist/ProgressBar/ProgressBar.styles.js +2 -2
- package/dist/RadioButton/RadioButton.styles.js +3 -3
- package/dist/Required/Required.styles.js +3 -3
- package/dist/Search/Search.styles.js +5 -5
- package/dist/Section/Section.styles.js +9 -9
- package/dist/Section/Section.styles.js.map +1 -1
- package/dist/SegmentedController/SegmentedController.js +1 -2
- package/dist/SegmentedController/SegmentedController.js.map +1 -1
- package/dist/SegmentedController/SegmentedController.styles.js +4 -4
- package/dist/Select/Select.d.ts +3 -4
- package/dist/Select/Select.js +37 -15
- package/dist/Select/Select.js.map +1 -1
- package/dist/Select/Select.styles.js +9 -9
- package/dist/Select/Select.styles.js.map +1 -1
- package/dist/Select/Select.types.d.ts +20 -0
- package/dist/Select/Select.types.js.map +1 -1
- package/dist/Select/index.d.ts +1 -1
- package/dist/Select/index.js.map +1 -1
- package/dist/Semantic/Semantic.styles.js +9 -9
- package/dist/Slider/Slider.styles.js +5 -5
- package/dist/Spinner/Spinner.js +21 -6
- package/dist/Spinner/Spinner.js.map +1 -1
- package/dist/Spinner/Spinner.styles.js +7 -7
- package/dist/SplitViewCard/SplitViewCard.js +13 -0
- package/dist/SplitViewCard/SplitViewCard.js.map +1 -1
- package/dist/SplitViewCard/SplitViewCard.styles.js +8 -8
- package/dist/SuperSelect/SuperSelect.components.js +6 -15
- package/dist/SuperSelect/SuperSelect.components.js.map +1 -1
- package/dist/SuperSelect/SuperSelect.js +1 -1
- package/dist/SuperSelect/SuperSelect.js.map +1 -1
- package/dist/SuperSelect/SuperSelect.presets.styles.js +1 -1
- package/dist/SuperSelect/SuperSelect.styles.js +38 -38
- package/dist/SuperSelect/SuperSelect.types.d.ts +0 -3
- package/dist/SuperSelect/SuperSelect.types.js.map +1 -1
- package/dist/SuperSelect/useSuperSelect.d.ts +1 -1
- package/dist/SuperSelect/useSuperSelect.js +19 -52
- package/dist/SuperSelect/useSuperSelect.js.map +1 -1
- package/dist/Switch/Switch.styles.js +4 -4
- package/dist/Table/Table.styles.d.ts +1 -1
- package/dist/Table/Table.styles.js +28 -28
- package/dist/TableShelf/TableShelf.styles.js +5 -5
- package/dist/Tabs/Tabs.styles.js +15 -15
- package/dist/Tearsheet/Tearsheet.styles.js +17 -28
- package/dist/Tearsheet/Tearsheet.styles.js.map +1 -1
- package/dist/Tearsheet/storybook/PageLayoutDemo.js +11 -2
- package/dist/Tearsheet/storybook/PageLayoutDemo.js.map +1 -1
- package/dist/TextArea/TextArea.styles.js +1 -1
- package/dist/TextEditorOutput/TextEditorOutput.styles.js +1 -1
- package/dist/Thumbnail/Thumbnail.styles.js +17 -17
- package/dist/ThumbnailGrid/ThumbnailGrid.styles.js +7 -7
- package/dist/TieredSelect/TieredSelect.styles.js +9 -9
- package/dist/Tile/Tile.styles.js +8 -8
- package/dist/Title/Title.styles.js +7 -7
- package/dist/Toast/Toast.styles.js +3 -3
- package/dist/ToggleButton/ToggleButton.styles.js +1 -1
- package/dist/Token/Token.styles.js +3 -3
- package/dist/ToolHeader/ToolHeader.styles.js +6 -6
- package/dist/ToolLandingPage/ToolLandingPage.styles.js +3 -3
- package/dist/Tooltip/Tooltip.d.ts +4 -2
- package/dist/Tooltip/Tooltip.js +30 -5
- package/dist/Tooltip/Tooltip.js.map +1 -1
- package/dist/Tooltip/Tooltip.styles.d.ts +1 -0
- package/dist/Tooltip/Tooltip.styles.js +12 -4
- package/dist/Tooltip/Tooltip.styles.js.map +1 -1
- package/dist/Tooltip/Tooltip.types.d.ts +8 -0
- package/dist/Tooltip/Tooltip.types.js.map +1 -1
- package/dist/Tree/Tree.js +1 -1
- package/dist/Tree/Tree.styles.js +10 -10
- package/dist/Typeahead/Typeahead.styles.js +3 -3
- package/dist/Typography/Typography.styles.js +1 -1
- package/dist/Typography/Typography.table.story.js +2 -2
- package/dist/_hooks/I18n.d.ts +65 -67
- package/dist/_hooks/IntersectionObserver/createIntersectionObserver.d.ts +0 -1
- package/dist/_hooks/IntersectionObserver/createIntersectionObserver.js +0 -1
- package/dist/_hooks/IntersectionObserver/createIntersectionObserver.js.map +1 -1
- package/dist/_locales/de-DE.json +3 -1
- package/dist/_locales/en-AU.json +3 -1
- package/dist/_locales/en-CA.json +3 -1
- package/dist/_locales/en-GB.json +3 -1
- package/dist/_locales/en.json +5 -2
- package/dist/_locales/es-ES.json +3 -1
- package/dist/_locales/es.json +3 -1
- package/dist/_locales/fr-CA.json +3 -1
- package/dist/_locales/fr-FR.json +3 -1
- package/dist/_locales/is-IS.json +3 -1
- package/dist/_locales/it-IT.json +3 -1
- package/dist/_locales/ja-JP.json +3 -1
- package/dist/_locales/pl-PL.json +3 -1
- package/dist/_locales/pseudo.json +5 -2
- package/dist/_locales/pt-BR.json +3 -1
- package/dist/_locales/pt-PT.json +5 -3
- package/dist/_locales/th-TH.json +3 -1
- package/dist/_locales/zh-SG.json +3 -1
- package/dist/_locales/zh-TW.json +3 -1
- package/dist/_storyHelpers_/components/Deprecation.styles.js +1 -1
- package/dist/_storyHelpers_/components/StoryGrid.js +3 -3
- package/dist/_styles/mixins.d.ts +13 -1
- package/dist/_styles/mixins.js +15 -1
- package/dist/_styles/mixins.js.map +1 -1
- package/dist/_typedoc/AnchorNavigation/AnchorNavigation.types.json +3 -3
- package/dist/_typedoc/Avatar/Avatar.types.json +20 -20
- package/dist/_typedoc/AvatarStack/AvatarStack.types.json +24 -24
- package/dist/_typedoc/Badge/Badge.types.json +6 -6
- package/dist/_typedoc/Banner/Banner.types.json +39 -13
- package/dist/_typedoc/Box/Box.types.json +68 -68
- package/dist/_typedoc/Breadcrumbs/Breadcrumbs.types.json +10 -10
- package/dist/_typedoc/Button/Button.types.json +13 -13
- package/dist/_typedoc/Calendar/Calendar.types.json +80 -80
- package/dist/_typedoc/Card/Card.types.json +6 -6
- package/dist/_typedoc/Checkbox/Checkbox.types.json +8 -8
- package/dist/_typedoc/ContactItem/ContactItem.types.json +9 -9
- package/dist/_typedoc/DateInput/DateInput.types.json +35 -35
- package/dist/_typedoc/DateSelect/DateSelect.types.json +13 -13
- package/dist/_typedoc/DetailPage/DetailPage.types.json +5 -5
- package/dist/_typedoc/Dropdown/Dropdown.types.json +37 -37
- package/dist/_typedoc/DropdownFlyout/DropdownFlyout.types.json +31 -31
- package/dist/_typedoc/Dropzone/Dropzone.types.json +44 -44
- package/dist/_typedoc/EmptyState/EmptyState.types.json +16 -16
- package/dist/_typedoc/FileList/FileList.types.json +9 -9
- package/dist/_typedoc/FileSelect/FileSelect.types.json +27 -27
- package/dist/_typedoc/FileSelect/GridSource/GridSource.types.json +20 -20
- package/dist/_typedoc/FileSelect/LocalSource/LocalSource.types.json +14 -14
- package/dist/_typedoc/FileSelect/TreeSource/TreeSource.types.json +9 -9
- package/dist/_typedoc/Flex/Flex.types.json +27 -27
- package/dist/_typedoc/FlexList/FlexList.types.json +30 -30
- package/dist/_typedoc/Form/Form.types.json +862 -762
- package/dist/_typedoc/GhostPlaceholder/GhostPlaceholder.types.json +12 -12
- package/dist/_typedoc/Grid/Grid.types.json +8 -8
- package/dist/_typedoc/GroupSelect/GroupSelect.types.json +75 -55
- package/dist/_typedoc/Input/Input.types.json +2 -2
- package/dist/_typedoc/Link/Link.types.json +1 -1
- package/dist/_typedoc/ListPage/ListPage.types.json +13 -13
- package/dist/_typedoc/Menu/Menu.types.json +62 -62
- package/dist/_typedoc/MenuImperative/MenuImperative.types.json +77 -77
- package/dist/_typedoc/Modal/Modal.types.json +46 -46
- package/dist/_typedoc/MultiSelect/MultiSelect.types.json +52 -32
- package/dist/_typedoc/NextTile/NextTile.types.json +32 -32
- package/dist/_typedoc/Notation/Notation.types.json +4 -4
- package/dist/_typedoc/NumberInput/NumberInput.types.json +48 -48
- package/dist/_typedoc/OverlayTrigger/OverlayTrigger.types.json +42 -32
- package/dist/_typedoc/PageLayout/PageLayout.types.json +46 -26
- package/dist/_typedoc/Pagination/Pagination.types.json +7 -7
- package/dist/_typedoc/Panel/Panel.types.json +30 -30
- package/dist/_typedoc/Pill/Pill.types.json +2 -2
- package/dist/_typedoc/PillSelect/PillSelect.types.json +49 -49
- package/dist/_typedoc/Popover/Popover.types.json +15 -15
- package/dist/_typedoc/ProgressBar/ProgressBar.types.json +7 -7
- package/dist/_typedoc/RadioButton/RadioButton.types.json +6 -6
- package/dist/_typedoc/Required/Required.types.json +5 -5
- package/dist/_typedoc/Search/Search.types.json +18 -18
- package/dist/_typedoc/Section/Section.types.json +15 -15
- package/dist/_typedoc/SegmentedController/SegmentedController.types.json +21 -21
- package/dist/_typedoc/Select/Select.types.json +141 -60
- package/dist/_typedoc/SettingsPage/SettingsPage.types.json +10 -10
- package/dist/_typedoc/Slider/Slider.types.json +6 -6
- package/dist/_typedoc/Spinner/Spinner.types.json +9 -9
- package/dist/_typedoc/SplitViewCard/SplitViewCard.types.json +14 -14
- package/dist/_typedoc/Table/Table.types.json +102 -102
- package/dist/_typedoc/Tabs/Tabs.types.json +20 -20
- package/dist/_typedoc/Tearsheet/Tearsheet.types.json +17 -17
- package/dist/_typedoc/TextArea/TextArea.types.json +3 -3
- package/dist/_typedoc/TextEditor/TextEditor.types.json +11 -11
- package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +4 -4
- package/dist/_typedoc/Thumbnail/Thumbnail.types.json +19 -19
- package/dist/_typedoc/TieredDropdown/TieredDropdown.types.json +43 -43
- package/dist/_typedoc/TieredSelect/TieredSelect.types.json +29 -29
- package/dist/_typedoc/Tile/Tile.types.json +8 -8
- package/dist/_typedoc/Title/Title.types.json +1 -1
- package/dist/_typedoc/Toast/Toast.types.json +4 -4
- package/dist/_typedoc/ToggleButton/ToggleButton.types.json +4 -4
- package/dist/_typedoc/Token/Token.types.json +7 -7
- package/dist/_typedoc/ToolHeader/ToolHeader.types.json +10 -10
- package/dist/_typedoc/ToolLandingPage/ToolLandingPage.types.json +8 -8
- package/dist/_typedoc/Tooltip/Tooltip.types.json +25 -14
- package/dist/_typedoc/Tree/Tree.types.json +88 -88
- package/dist/_typedoc/Typeahead/Typeahead.types.json +2 -2
- package/dist/_typedoc/Typography/Typography.types.json +9 -9
- package/dist/_typedoc/_utils/types.json +3 -3
- package/dist/_utils/scrollIntoView.js +21 -7
- package/dist/_utils/scrollIntoView.js.map +1 -1
- package/package.json +9 -8
- package/dist/Checkbox/CheckboxTooltip.d.ts +0 -4
- package/dist/Checkbox/CheckboxTooltip.js +0 -26
- package/dist/Checkbox/CheckboxTooltip.js.map +0 -1
package/.jest/testShims.js
CHANGED
|
@@ -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,7 +1,71 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## 12.39.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 916989e: Improve date input accessibility by adding an `aria-label` prop
|
|
8
|
+
- 3a1321e: Make `AvatarStack` avatar popovers keyboard accessible
|
|
9
|
+
|
|
10
|
+
- Changed avatar triggers from img/link roles to button role
|
|
11
|
+
|
|
12
|
+
- 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.
|
|
13
|
+
- 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).
|
|
14
|
+
- 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`.
|
|
15
|
+
- 82146ce: Improve `MultiSelect` accessibility:
|
|
16
|
+
|
|
17
|
+
- Add `aria-invalid` and `aria-describedby` support for error state
|
|
18
|
+
- Fix selected tokens announcing "selectable" by removing them from tab order
|
|
19
|
+
- Fix combobox input nested inside `role="list"` by separating structure from visual layout
|
|
20
|
+
- Add Delete key support for removing tokens
|
|
21
|
+
- Close dropdown when navigating tokens with arrow keys
|
|
22
|
+
- Add "None selected" announcement when no items are selected
|
|
23
|
+
|
|
24
|
+
- d36f2ec: Make Tooltips announced by screen readers. User should still supply a focusable element like `Button`.
|
|
25
|
+
|
|
26
|
+
- `Tooltip` update default `trigger` to hover _and focus_
|
|
27
|
+
- `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
|
|
28
|
+
- `Tooltip.Content` uses `aria-live` ~possible future: renders empty container, then inner content~
|
|
29
|
+
- `Tooltip` apply `role tooltip` to the overlay to handle `aria-describedby` and `id`. Allow for manual `aria-describedby` and `id`
|
|
30
|
+
- Update tooltips in `Checkbox`, `SegmentedController`, and `SourceItem`
|
|
31
|
+
|
|
32
|
+
- 4bbe568: Added `onTransitionEnd` handler to Panel to unmount it from the DOM after the closing animation finishes
|
|
33
|
+
|
|
34
|
+
### Patch Changes
|
|
35
|
+
|
|
36
|
+
- 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)
|
|
37
|
+
- 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.
|
|
38
|
+
- 578560c: Removing the tooltip on non-preview FileList item re: a11y
|
|
39
|
+
- f9ed3e9: Remove scroll area from shifting on focus. Section and Tearsheet use outline instead of border for visible focus
|
|
40
|
+
- b0da9a8: Enhance a11y for `CheckboxOutput` component by moving existing `aria-label` from the `span` wrapper to the `svg` icon.
|
|
41
|
+
- 40ce870: remove intersection observer
|
|
42
|
+
- fd6f808: Disable onClear when Select, TieredSelect, or PillSelect is disabled.
|
|
43
|
+
|
|
44
|
+
## 12.38.0
|
|
45
|
+
|
|
46
|
+
### Minor Changes
|
|
47
|
+
|
|
48
|
+
- 5c9765e: Revert SuperSelect accessibility changes
|
|
49
|
+
- ec26b8f: Updated Select to apply correct ARIA roles and states by using a `combobox` pattern for listbox-only panels and a `button` (disclosure) pattern when additional panel content is present.
|
|
50
|
+
- 09ee67d: `Popover` added optional `trackAriaExpanded` to apply the `aria-expanded` attribute, recommended use with `Button` triggers. Enabled in `AvatarStack`.
|
|
51
|
+
- a8bbf59: Banner: Add `Banner.ExpandActionButton` to toggle expandable content; handles aria-expanded and default "Expand" / "Collapse" label (i18n). Supports children for a custom label.
|
|
52
|
+
|
|
53
|
+
### Patch Changes
|
|
54
|
+
|
|
55
|
+
- dfdba61: `SuperSelect`: Added a minimum height check to `size()` so that if the computed `availableHeight` for the dropdown is less than 248px, `maxHeight` is not set to that value, causing the menu to flip open upwards instead of shrinking to fit below.
|
|
56
|
+
- d786d24: `Spinner`: Add appropriate ARIA role and labeling for accessibility.
|
|
57
|
+
- Add `role="progressbar"` to the spinner container so screen readers recognize the loading state.
|
|
58
|
+
- Add `aria-labelledby` linking the progressbar to its label (default "Loading" or custom `label`).
|
|
59
|
+
- Use stable `id` from `useId()` for label association; when a visible label is shown with children, associate it via `aria-labelledby` and set `aria-hidden` on the SVG to avoid duplicate announcements.
|
|
60
|
+
- e26caf8: Improve `FileSelect` source list accessibility:
|
|
61
|
+
- `FileExplorerSidebar` - Add `role="listbox"` to the navigation container for the list of sources
|
|
62
|
+
- `SourceItem` - Add `role="option"` with `aria-selected` and `aria-disabled` for proper listbox semantics; set `tabIndex={-1}` when disabled so keyboard users skip disabled items
|
|
63
|
+
- e519f21: `Select` applies className and style always to the outermost element (like before when buttons were nested)
|
|
64
|
+
|
|
3
65
|
## 12.37.0
|
|
4
66
|
|
|
67
|
+
**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.
|
|
68
|
+
|
|
5
69
|
### Minor Changes
|
|
6
70
|
|
|
7
71
|
- 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-
|
|
8
|
+
componentId: "core-12_39_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
|
+
componentId: "core-12_39_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-
|
|
25
|
+
componentId: "core-12_39_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-
|
|
31
|
+
componentId: "core-12_39_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-
|
|
35
|
+
componentId: "core-12_39_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-
|
|
39
|
+
componentId: "core-12_39_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-
|
|
43
|
+
componentId: "core-12_39_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-
|
|
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_39_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":"AAAA,OAAOA,MAAM,IAAIC,GAAG,QAAQ,mBAAmB;AAC/C,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,SAASC,kBAAkB,QAAQ,mBAAmB;AAStD,IAAMC,oBAAoB,GAAG,GAAG;AAEhC,IAAMC,aAAa,GAAG;EAAEC,EAAE,EAAE,EAAE;EAAEC,EAAE,EAAE,EAAE;EAAEC,EAAE,EAAE,EAAE;EAAEC,EAAE,EAAE;AAAG,CAAU;AAEjE,IAAMC,QAAQ,GAAG;EAAEJ,EAAE,EAAE,EAAE;EAAEC,EAAE,EAAE,EAAE;EAAEC,EAAE,EAAE,EAAE;EAAEC,EAAE,EAAE;AAAG,CAAU;AAE5D,IAAME,WAAW,GAAG;EAAEL,EAAE,EAAE,GAAG;EAAEC,EAAE,EAAE,GAAG;EAAEC,EAAE,EAAE,GAAG;EAAEC,EAAE,EAAE;AAAI,CAAU;AAEnE,IAAMG,QAAQ,GAAG;EAAEN,EAAE,EAAE,EAAE;EAAEC,EAAE,EAAE,EAAE;EAAEC,EAAE,EAAE,EAAE;EAAEC,EAAE,EAAE;AAAG,CAAU;AAE5D,OAAO,IAAMI,mBAAmB,gBAAGb,MAAM,CAACc,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,2FAQ5C;AAED,OAAO,IAAMC,mBAAmB,gBAAGlB,MAAM,CAACc,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,4BAE5C;AAED,OAAO,IAAME,oBAAoB,gBAAGnB,MAAM,CAACc,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,iCAE7C;AAED,OAAO,IAAMG,uBAAuB,gBAAGpB,MAAM,CAACc,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,uIAC3Bf,MAAM,CAACmB,KAAK,EAM9B,UAAAC,IAAA;EAAA,IAAGC,SAAS,GAAAD,IAAA,CAATC,SAAS;EAAA,OACZtB,GAAG,kCACuBsB,SAAS;AAAA,CAClC,CACJ;AAED,OAAO,IAAMC,qBAAqB,gBAAGxB,MAAM,CAACc,GAAG,CAAAC,UAAA;EAAAC,WAAA;EAAAC,WAAA;AAAA,mSAQpCf,MAAM,CAACmB,KAAK,EACDnB,MAAM,CAACuB,MAAM,EAQ7BtB,kBAAkB,
|
|
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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"}
|
|
@@ -23,12 +23,21 @@ 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/OverlayTrigger';
|
|
26
27
|
import { Popover } from '../Popover';
|
|
27
28
|
import { Typography } from '../Typography';
|
|
28
29
|
import { useI18nContext } from '../_hooks/I18n';
|
|
29
30
|
import { colorsOrder, foldedItemsCap, restCountThreshold, visibleItemsCap } from './AvatarStack.constants';
|
|
30
31
|
import { StyledAvatar, StyledContactItem, StyledContactItems, StyledModalBody, StyledViewAllWrapper, StyledWrapper } from './AvatarStack.styles';
|
|
31
|
-
|
|
32
|
+
import { useAvatarPopover } from './useAvatarPopover';
|
|
33
|
+
var OVERLAY_WRAPPER_SELECTOR = '[data-qa="core-overlay-trigger-overlay-wrapper"]';
|
|
34
|
+
var FOCUSABLE_SELECTOR = 'a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
35
|
+
var POPOVER_TRIGGER = ['hover', 'focus'];
|
|
36
|
+
var POPOVER_SHOW_KEYS = ['Enter', ' '];
|
|
37
|
+
var POPOVER_HIDE_KEYS = {
|
|
38
|
+
overlay: ['Escape', 'Esc'],
|
|
39
|
+
target: ['Escape', 'Esc']
|
|
40
|
+
};
|
|
32
41
|
export function getOverflowValues(items) {
|
|
33
42
|
var foldedItems = [];
|
|
34
43
|
var restCountLabel = null;
|
|
@@ -145,20 +154,32 @@ function AvatarWithPopover(_ref4) {
|
|
|
145
154
|
var item = _ref4.item,
|
|
146
155
|
size = _ref4.size,
|
|
147
156
|
colors = _ref4.colors;
|
|
148
|
-
var
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
return /*#__PURE__*/React.createElement(Popover, {
|
|
157
|
+
var _useAvatarPopover = useAvatarPopover({
|
|
158
|
+
focusableSelector: FOCUSABLE_SELECTOR,
|
|
159
|
+
overlayWrapperSelector: OVERLAY_WRAPPER_SELECTOR
|
|
160
|
+
}),
|
|
161
|
+
triggerRef = _useAvatarPopover.triggerRef,
|
|
162
|
+
popoverContentRef = _useAvatarPopover.popoverContentRef,
|
|
163
|
+
beforeShow = _useAvatarPopover.beforeShow,
|
|
164
|
+
beforeHide = _useAvatarPopover.beforeHide,
|
|
165
|
+
afterHide = _useAvatarPopover.afterHide;
|
|
166
|
+
return /*#__PURE__*/React.createElement(OverlayTrigger, {
|
|
159
167
|
key: item.id,
|
|
160
|
-
trigger:
|
|
161
|
-
|
|
168
|
+
trigger: POPOVER_TRIGGER,
|
|
169
|
+
showKeys: POPOVER_SHOW_KEYS,
|
|
170
|
+
hideKeys: POPOVER_HIDE_KEYS,
|
|
171
|
+
restoreFocusOnHide: false,
|
|
172
|
+
shrinkOverlay: true,
|
|
173
|
+
arrow: true,
|
|
174
|
+
trackAriaExpanded: true,
|
|
175
|
+
placement: "top",
|
|
176
|
+
beforeShow: beforeShow,
|
|
177
|
+
beforeHide: beforeHide,
|
|
178
|
+
afterHide: afterHide,
|
|
179
|
+
overlay: /*#__PURE__*/React.createElement(Popover.Content, {
|
|
180
|
+
ref: popoverContentRef,
|
|
181
|
+
placement: "top"
|
|
182
|
+
}, /*#__PURE__*/React.createElement(AvatarStackContactItem, {
|
|
162
183
|
id: item.id,
|
|
163
184
|
type: item.type,
|
|
164
185
|
imageUrl: item.imageUrl,
|
|
@@ -168,12 +189,14 @@ function AvatarWithPopover(_ref4) {
|
|
|
168
189
|
linkUrl: item.linkUrl,
|
|
169
190
|
description: item.description
|
|
170
191
|
}))
|
|
171
|
-
}, /*#__PURE__*/React.createElement(StyledAvatar,
|
|
192
|
+
}, /*#__PURE__*/React.createElement(StyledAvatar, {
|
|
193
|
+
ref: triggerRef,
|
|
194
|
+
role: "button",
|
|
172
195
|
$color: colors.get(item.id),
|
|
173
196
|
"aria-label": "".concat(item.name, ", ").concat(item.description),
|
|
174
197
|
disabled: item.inactive,
|
|
175
198
|
size: size
|
|
176
|
-
}
|
|
199
|
+
}, /*#__PURE__*/React.createElement(AvatarContent, {
|
|
177
200
|
imageUrl: item.imageUrl,
|
|
178
201
|
initials: item.initials,
|
|
179
202
|
type: item.type,
|
|
@@ -188,16 +211,33 @@ export function FoldedAvatarStack(_ref5) {
|
|
|
188
211
|
isViewAllNeeded = _ref5.isViewAllNeeded,
|
|
189
212
|
title = _ref5.title;
|
|
190
213
|
var I18n = useI18nContext();
|
|
191
|
-
var overlayRef = React.useRef(null);
|
|
192
214
|
var restAvatarId = useId();
|
|
193
|
-
|
|
215
|
+
var _useAvatarPopover2 = useAvatarPopover({
|
|
216
|
+
focusableSelector: FOCUSABLE_SELECTOR,
|
|
217
|
+
overlayWrapperSelector: OVERLAY_WRAPPER_SELECTOR
|
|
218
|
+
}),
|
|
219
|
+
triggerRef = _useAvatarPopover2.triggerRef,
|
|
220
|
+
popoverContentRef = _useAvatarPopover2.popoverContentRef,
|
|
221
|
+
beforeShow = _useAvatarPopover2.beforeShow,
|
|
222
|
+
beforeHide = _useAvatarPopover2.beforeHide,
|
|
223
|
+
afterHide = _useAvatarPopover2.afterHide;
|
|
224
|
+
return /*#__PURE__*/React.createElement(OverlayTrigger, {
|
|
194
225
|
"aria-labelledby": restAvatarId,
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
226
|
+
trigger: POPOVER_TRIGGER,
|
|
227
|
+
showKeys: POPOVER_SHOW_KEYS,
|
|
228
|
+
hideKeys: POPOVER_HIDE_KEYS,
|
|
229
|
+
restoreFocusOnHide: false,
|
|
230
|
+
shrinkOverlay: true,
|
|
231
|
+
arrow: true,
|
|
232
|
+
trackAriaExpanded: true,
|
|
233
|
+
placement: "top",
|
|
234
|
+
beforeShow: beforeShow,
|
|
235
|
+
beforeHide: beforeHide,
|
|
236
|
+
afterHide: afterHide,
|
|
237
|
+
overlay: /*#__PURE__*/React.createElement(Popover.Content, {
|
|
238
|
+
ref: popoverContentRef,
|
|
239
|
+
placement: "top"
|
|
240
|
+
}, /*#__PURE__*/React.createElement(StyledContactItems, null, items.map(function (item) {
|
|
201
241
|
return /*#__PURE__*/React.createElement(AvatarStackContactItem, {
|
|
202
242
|
key: item.id,
|
|
203
243
|
id: item.id,
|
|
@@ -216,8 +256,8 @@ export function FoldedAvatarStack(_ref5) {
|
|
|
216
256
|
variant: "secondary"
|
|
217
257
|
}, I18n.t('core.avatarStack.viewAll'))))
|
|
218
258
|
}, /*#__PURE__*/React.createElement(StyledAvatar, {
|
|
259
|
+
ref: triggerRef,
|
|
219
260
|
role: "button",
|
|
220
|
-
onPress: onClickViewAll,
|
|
221
261
|
id: restAvatarId,
|
|
222
262
|
"aria-label": "".concat(restCountLabel, ", ").concat(title),
|
|
223
263
|
"data-qa": "core-avatar-stack-folded-avatars-popover-trigger",
|
|
@@ -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","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","Content","ref","role","$color","get","FoldedAvatarStack","_ref5","onClickViewAll","title","I18n","restAvatarId","_useAvatarPopover2","onClick","variant","t","ViewAllModal","_ref6","isOpen","onClose","labelId","text","open","Header","Heading","Footer","FooterButtons","defaultInitials","defaultGetImageUrl","getTransformedItems","_ref7","getInitials","getImageUrl","_objectSpread","_AvatarStack","_ref8","_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 { OverlayTrigger } from '../OverlayTrigger/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 {\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={beforeShow}\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}: 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={triggerRef}\n role=\"button\"\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 _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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"}
|
|
@@ -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-
|
|
11
|
-
})(["border-color:", ";border-style:solid;border-width:1px;&:hover{z-index:1;}
|
|
10
|
+
componentId: "core-12_39_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-
|
|
14
|
+
componentId: "core-12_39_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-
|
|
20
|
+
componentId: "core-12_39_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-
|
|
24
|
+
componentId: "core-12_39_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-
|
|
28
|
+
componentId: "core-12_39_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-
|
|
32
|
+
componentId: "core-12_39_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-
|
|
36
|
+
componentId: "core-12_39_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
|
|
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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { UseAvatarPopoverProps } from './useAvatarPopover.types';
|
|
3
|
+
/**
|
|
4
|
+
* Manages the accessibility behavior for avatar popovers, ensuring they are keyboard navigable
|
|
5
|
+
*
|
|
6
|
+
* @see https://procoretech.atlassian.net/browse/UXI-1632?focusedCommentId=6513946
|
|
7
|
+
*/
|
|
8
|
+
export declare const useAvatarPopover: (props: UseAvatarPopoverProps) => {
|
|
9
|
+
triggerRef: React.RefObject<HTMLDivElement>;
|
|
10
|
+
popoverContentRef: (node: HTMLDivElement | null) => void;
|
|
11
|
+
beforeShow: (event: Event) => boolean;
|
|
12
|
+
beforeHide: (event: Event) => boolean;
|
|
13
|
+
afterHide: () => void;
|
|
14
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Manages the accessibility behavior for avatar popovers, ensuring they are keyboard navigable
|
|
4
|
+
*
|
|
5
|
+
* @see https://procoretech.atlassian.net/browse/UXI-1632?focusedCommentId=6513946
|
|
6
|
+
*/
|
|
7
|
+
export var useAvatarPopover = function useAvatarPopover(props) {
|
|
8
|
+
var focusableSelector = props.focusableSelector,
|
|
9
|
+
overlayWrapperSelector = props.overlayWrapperSelector;
|
|
10
|
+
var triggerRef = React.useRef(null);
|
|
11
|
+
var openedByKeyboardRef = React.useRef(false);
|
|
12
|
+
var popoverContentRef = React.useCallback(function (node) {
|
|
13
|
+
if (node && openedByKeyboardRef.current) {
|
|
14
|
+
var firstFocusable = node.querySelector(focusableSelector);
|
|
15
|
+
firstFocusable === null || firstFocusable === void 0 ? void 0 : firstFocusable.focus();
|
|
16
|
+
}
|
|
17
|
+
}, [focusableSelector]);
|
|
18
|
+
var beforeShow = React.useCallback(function (event) {
|
|
19
|
+
// Block auto-open on keyboard focus alone - require Enter/Space
|
|
20
|
+
if (event.type === 'focusin') {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
openedByKeyboardRef.current = event instanceof KeyboardEvent;
|
|
24
|
+
return true;
|
|
25
|
+
}, []);
|
|
26
|
+
var beforeHide = React.useCallback(function (event) {
|
|
27
|
+
if (event.type === 'focusout') {
|
|
28
|
+
var relatedTarget = event.relatedTarget;
|
|
29
|
+
// Keep open when focus moves into the overlay (e.g. auto-focus after keyboard open)
|
|
30
|
+
if (relatedTarget !== null && relatedTarget !== void 0 && relatedTarget.closest(overlayWrapperSelector)) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
// For hover-opened popovers, don't close on focus changes
|
|
34
|
+
if (!openedByKeyboardRef.current) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}, [overlayWrapperSelector]);
|
|
40
|
+
var afterHide = React.useCallback(function () {
|
|
41
|
+
if (openedByKeyboardRef.current) {
|
|
42
|
+
requestAnimationFrame(function () {
|
|
43
|
+
var _triggerRef$current;
|
|
44
|
+
return (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : _triggerRef$current.focus();
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
openedByKeyboardRef.current = false;
|
|
48
|
+
}, []);
|
|
49
|
+
return {
|
|
50
|
+
triggerRef: triggerRef,
|
|
51
|
+
popoverContentRef: popoverContentRef,
|
|
52
|
+
beforeShow: beforeShow,
|
|
53
|
+
beforeHide: beforeHide,
|
|
54
|
+
afterHide: afterHide
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=useAvatarPopover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAvatarPopover.js","names":["React","useAvatarPopover","props","focusableSelector","overlayWrapperSelector","triggerRef","useRef","openedByKeyboardRef","popoverContentRef","useCallback","node","current","firstFocusable","querySelector","focus","beforeShow","event","type","KeyboardEvent","beforeHide","relatedTarget","closest","afterHide","requestAnimationFrame","_triggerRef$current"],"sources":["../../src/AvatarStack/useAvatarPopover.tsx"],"sourcesContent":["import React from 'react'\nimport type { UseAvatarPopoverProps } from './useAvatarPopover.types'\n\n/**\n * Manages the accessibility behavior for avatar popovers, ensuring they are keyboard navigable\n *\n * @see https://procoretech.atlassian.net/browse/UXI-1632?focusedCommentId=6513946\n */\nexport const useAvatarPopover = (props: UseAvatarPopoverProps) => {\n const { focusableSelector, overlayWrapperSelector } = props\n const triggerRef = React.useRef<HTMLDivElement>(null)\n const openedByKeyboardRef = React.useRef(false)\n\n const popoverContentRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n if (node && openedByKeyboardRef.current) {\n const firstFocusable = node.querySelector(\n focusableSelector\n ) as HTMLElement | null\n firstFocusable?.focus()\n }\n },\n [focusableSelector]\n )\n\n const beforeShow = React.useCallback((event: Event) => {\n // Block auto-open on keyboard focus alone - require Enter/Space\n if (event.type === 'focusin') {\n return false\n }\n openedByKeyboardRef.current = event instanceof KeyboardEvent\n return true\n }, [])\n\n const beforeHide = React.useCallback(\n (event: Event) => {\n if (event.type === 'focusout') {\n const relatedTarget = (event as FocusEvent)\n .relatedTarget as HTMLElement | null\n // Keep open when focus moves into the overlay (e.g. auto-focus after keyboard open)\n if (relatedTarget?.closest(overlayWrapperSelector)) {\n return false\n }\n // For hover-opened popovers, don't close on focus changes\n if (!openedByKeyboardRef.current) {\n return false\n }\n }\n return true\n },\n [overlayWrapperSelector]\n )\n\n const afterHide = React.useCallback(() => {\n if (openedByKeyboardRef.current) {\n requestAnimationFrame(() => triggerRef.current?.focus())\n }\n openedByKeyboardRef.current = false\n }, [])\n\n return {\n triggerRef,\n popoverContentRef,\n beforeShow,\n beforeHide,\n afterHide,\n }\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAGzB;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIC,KAA4B,EAAK;EAChE,IAAQC,iBAAiB,GAA6BD,KAAK,CAAnDC,iBAAiB;IAAEC,sBAAsB,GAAKF,KAAK,CAAhCE,sBAAsB;EACjD,IAAMC,UAAU,GAAGL,KAAK,CAACM,MAAM,CAAiB,IAAI,CAAC;EACrD,IAAMC,mBAAmB,GAAGP,KAAK,CAACM,MAAM,CAAC,KAAK,CAAC;EAE/C,IAAME,iBAAiB,GAAGR,KAAK,CAACS,WAAW,CACzC,UAACC,IAA2B,EAAK;IAC/B,IAAIA,IAAI,IAAIH,mBAAmB,CAACI,OAAO,EAAE;MACvC,IAAMC,cAAc,GAAGF,IAAI,CAACG,aAAa,CACvCV,iBACF,CAAuB;MACvBS,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEE,KAAK,CAAC,CAAC;IACzB;EACF,CAAC,EACD,CAACX,iBAAiB,CACpB,CAAC;EAED,IAAMY,UAAU,GAAGf,KAAK,CAACS,WAAW,CAAC,UAACO,KAAY,EAAK;IACrD;IACA,IAAIA,KAAK,CAACC,IAAI,KAAK,SAAS,EAAE;MAC5B,OAAO,KAAK;IACd;IACAV,mBAAmB,CAACI,OAAO,GAAGK,KAAK,YAAYE,aAAa;IAC5D,OAAO,IAAI;EACb,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMC,UAAU,GAAGnB,KAAK,CAACS,WAAW,CAClC,UAACO,KAAY,EAAK;IAChB,IAAIA,KAAK,CAACC,IAAI,KAAK,UAAU,EAAE;MAC7B,IAAMG,aAAa,GAAIJ,KAAK,CACzBI,aAAmC;MACtC;MACA,IAAIA,aAAa,aAAbA,aAAa,eAAbA,aAAa,CAAEC,OAAO,CAACjB,sBAAsB,CAAC,EAAE;QAClD,OAAO,KAAK;MACd;MACA;MACA,IAAI,CAACG,mBAAmB,CAACI,OAAO,EAAE;QAChC,OAAO,KAAK;MACd;IACF;IACA,OAAO,IAAI;EACb,CAAC,EACD,CAACP,sBAAsB,CACzB,CAAC;EAED,IAAMkB,SAAS,GAAGtB,KAAK,CAACS,WAAW,CAAC,YAAM;IACxC,IAAIF,mBAAmB,CAACI,OAAO,EAAE;MAC/BY,qBAAqB,CAAC;QAAA,IAAAC,mBAAA;QAAA,QAAAA,mBAAA,GAAMnB,UAAU,CAACM,OAAO,cAAAa,mBAAA,uBAAlBA,mBAAA,CAAoBV,KAAK,CAAC,CAAC;MAAA,EAAC;IAC1D;IACAP,mBAAmB,CAACI,OAAO,GAAG,KAAK;EACrC,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLN,UAAU,EAAVA,UAAU;IACVG,iBAAiB,EAAjBA,iBAAiB;IACjBO,UAAU,EAAVA,UAAU;IACVI,UAAU,EAAVA,UAAU;IACVG,SAAS,EAATA;EACF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAvatarPopover.types.js","names":[],"sources":["../../src/AvatarStack/useAvatarPopover.types.ts"],"sourcesContent":["export type UseAvatarPopoverProps = {\n focusableSelector: string\n overlayWrapperSelector: string\n}\n"],"mappings":""}
|