@mattermost/compass-ui 0.1.0-alpha.12 → 0.1.0-alpha.14
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/README.md +15 -3
- package/dist/compass-ui-standalone.css +270 -276
- package/dist/compass-ui.css +293 -290
- package/dist/components/action-button/ActionButton.cjs.map +1 -1
- package/dist/components/action-button/ActionButton.d.ts +2 -1
- package/dist/components/action-button/ActionButton.d.ts.map +1 -1
- package/dist/components/action-button/ActionButton.js.map +1 -1
- package/dist/components/admin-console-header/AdminConsoleHeader.cjs.map +1 -1
- package/dist/components/admin-console-header/AdminConsoleHeader.d.ts +3 -1
- package/dist/components/admin-console-header/AdminConsoleHeader.d.ts.map +1 -1
- package/dist/components/admin-console-header/AdminConsoleHeader.js.map +1 -1
- package/dist/components/admin-panel/AdminPanel.cjs +1 -1
- package/dist/components/admin-panel/AdminPanel.cjs.map +1 -1
- package/dist/components/admin-panel/AdminPanel.d.ts +13 -6
- package/dist/components/admin-panel/AdminPanel.d.ts.map +1 -1
- package/dist/components/admin-panel/AdminPanel.js +21 -15
- package/dist/components/admin-panel/AdminPanel.js.map +1 -1
- package/dist/components/admin-panel-footer/AdminPanelFooter.cjs.map +1 -1
- package/dist/components/admin-panel-footer/AdminPanelFooter.d.ts +8 -4
- package/dist/components/admin-panel-footer/AdminPanelFooter.d.ts.map +1 -1
- package/dist/components/admin-panel-footer/AdminPanelFooter.js.map +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.cjs +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.cjs.map +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.css +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.d.ts +11 -4
- package/dist/components/admin-panel-header/AdminPanelHeader.d.ts.map +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.js +25 -23
- package/dist/components/admin-panel-header/AdminPanelHeader.js.map +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.cjs +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.js +10 -10
- package/dist/components/attachment-card/AttachmentCard.cjs +1 -1
- package/dist/components/attachment-card/AttachmentCard.cjs.map +1 -1
- package/dist/components/attachment-card/AttachmentCard.d.ts +18 -5
- package/dist/components/attachment-card/AttachmentCard.d.ts.map +1 -1
- package/dist/components/attachment-card/AttachmentCard.js +85 -79
- package/dist/components/attachment-card/AttachmentCard.js.map +1 -1
- package/dist/components/card-button/CardButton.css +1 -1
- package/dist/components/card-button/CardButton.module.scss.cjs +1 -1
- package/dist/components/card-button/CardButton.module.scss.js +7 -7
- package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs +1 -1
- package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs.map +1 -1
- package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.d.ts +5 -4
- package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.d.ts.map +1 -1
- package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js +7 -7
- package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js.map +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts +10 -4
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +67 -62
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
- package/dist/components/checkbox/Checkbox.css +1 -1
- package/dist/components/checkbox/Checkbox.module.scss.cjs +1 -1
- package/dist/components/checkbox/Checkbox.module.scss.js +10 -10
- package/dist/components/chip/Chip.cjs.map +1 -1
- package/dist/components/chip/Chip.css +1 -1
- package/dist/components/chip/Chip.d.ts +4 -0
- package/dist/components/chip/Chip.d.ts.map +1 -1
- package/dist/components/chip/Chip.js.map +1 -1
- package/dist/components/chip/Chip.module.scss.cjs +1 -1
- package/dist/components/chip/Chip.module.scss.js +11 -11
- package/dist/components/combobox/Combobox.cjs +1 -1
- package/dist/components/combobox/Combobox.cjs.map +1 -1
- package/dist/components/combobox/Combobox.css +1 -1
- package/dist/components/combobox/Combobox.d.ts +24 -1
- package/dist/components/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.js +307 -271
- package/dist/components/combobox/Combobox.js.map +1 -1
- package/dist/components/combobox/Combobox.module.scss.cjs +1 -1
- package/dist/components/combobox/Combobox.module.scss.js +28 -26
- package/dist/components/combobox/Combobox.module.scss.js.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.cjs +1 -1
- package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.css +1 -1
- package/dist/components/date-range-picker/DateRangePicker.d.ts +18 -2
- package/dist/components/date-range-picker/DateRangePicker.d.ts.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.js +134 -126
- package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +1 -1
- package/dist/components/date-range-picker/DateRangePicker.module.scss.js +26 -26
- package/dist/components/emoji-popover/EmojiPopover.cjs +1 -1
- package/dist/components/emoji-popover/EmojiPopover.cjs.map +1 -1
- package/dist/components/emoji-popover/EmojiPopover.d.ts +25 -4
- package/dist/components/emoji-popover/EmojiPopover.d.ts.map +1 -1
- package/dist/components/emoji-popover/EmojiPopover.js +84 -73
- package/dist/components/emoji-popover/EmojiPopover.js.map +1 -1
- package/dist/components/empty-state/EmptyState.cjs +1 -1
- package/dist/components/empty-state/EmptyState.cjs.map +1 -1
- package/dist/components/empty-state/EmptyState.d.ts +3 -3
- package/dist/components/empty-state/EmptyState.d.ts.map +1 -1
- package/dist/components/empty-state/EmptyState.js +11 -9
- package/dist/components/empty-state/EmptyState.js.map +1 -1
- package/dist/components/error-message/ErrorMessage.cjs +1 -1
- package/dist/components/error-message/ErrorMessage.cjs.map +1 -1
- package/dist/components/error-message/ErrorMessage.d.ts +3 -3
- package/dist/components/error-message/ErrorMessage.d.ts.map +1 -1
- package/dist/components/error-message/ErrorMessage.js +10 -9
- package/dist/components/error-message/ErrorMessage.js.map +1 -1
- package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.cjs.map +1 -1
- package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.d.ts +7 -6
- package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.d.ts.map +1 -1
- package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.js.map +1 -1
- package/dist/components/global-banner/GlobalBanner.cjs +1 -1
- package/dist/components/global-banner/GlobalBanner.cjs.map +1 -1
- package/dist/components/global-banner/GlobalBanner.d.ts +10 -5
- package/dist/components/global-banner/GlobalBanner.d.ts.map +1 -1
- package/dist/components/global-banner/GlobalBanner.js +33 -26
- package/dist/components/global-banner/GlobalBanner.js.map +1 -1
- package/dist/components/icon-button/IconButton.css +1 -1
- package/dist/components/icon-button/IconButton.module.scss.cjs +1 -1
- package/dist/components/icon-button/IconButton.module.scss.js +15 -15
- package/dist/components/image-preview/ImagePreview.cjs +1 -1
- package/dist/components/image-preview/ImagePreview.cjs.map +1 -1
- package/dist/components/image-preview/ImagePreview.css +1 -1
- package/dist/components/image-preview/ImagePreview.d.ts +12 -1
- package/dist/components/image-preview/ImagePreview.d.ts.map +1 -1
- package/dist/components/image-preview/ImagePreview.js +25 -20
- package/dist/components/image-preview/ImagePreview.js.map +1 -1
- package/dist/components/image-preview/ImagePreview.module.scss.cjs +1 -1
- package/dist/components/image-preview/ImagePreview.module.scss.js +15 -15
- package/dist/components/link-preview/LinkPreview.cjs +1 -1
- package/dist/components/link-preview/LinkPreview.cjs.map +1 -1
- package/dist/components/link-preview/LinkPreview.d.ts +12 -6
- package/dist/components/link-preview/LinkPreview.d.ts.map +1 -1
- package/dist/components/link-preview/LinkPreview.js +19 -16
- package/dist/components/link-preview/LinkPreview.js.map +1 -1
- package/dist/components/mention-badge/MentionBadge.cjs +1 -1
- package/dist/components/mention-badge/MentionBadge.cjs.map +1 -1
- package/dist/components/mention-badge/MentionBadge.d.ts +3 -1
- package/dist/components/mention-badge/MentionBadge.d.ts.map +1 -1
- package/dist/components/mention-badge/MentionBadge.js +18 -23
- package/dist/components/mention-badge/MentionBadge.js.map +1 -1
- package/dist/components/menu-group-heading/MenuGroupHeading.cjs.map +1 -1
- package/dist/components/menu-group-heading/MenuGroupHeading.d.ts +3 -3
- package/dist/components/menu-group-heading/MenuGroupHeading.d.ts.map +1 -1
- package/dist/components/menu-group-heading/MenuGroupHeading.js.map +1 -1
- package/dist/components/menu-item/MenuItem.cjs +1 -1
- package/dist/components/menu-item/MenuItem.cjs.map +1 -1
- package/dist/components/menu-item/MenuItem.d.ts +2 -0
- package/dist/components/menu-item/MenuItem.d.ts.map +1 -1
- package/dist/components/menu-item/MenuItem.js +29 -28
- package/dist/components/menu-item/MenuItem.js.map +1 -1
- package/dist/components/message-actions/MessageActions.cjs +1 -1
- package/dist/components/message-actions/MessageActions.cjs.map +1 -1
- package/dist/components/message-actions/MessageActions.d.ts +26 -2
- package/dist/components/message-actions/MessageActions.d.ts.map +1 -1
- package/dist/components/message-actions/MessageActions.js +67 -55
- package/dist/components/message-actions/MessageActions.js.map +1 -1
- package/dist/components/message-header/MessageHeader.cjs.map +1 -1
- package/dist/components/message-header/MessageHeader.d.ts +5 -3
- package/dist/components/message-header/MessageHeader.d.ts.map +1 -1
- package/dist/components/message-header/MessageHeader.js.map +1 -1
- package/dist/components/message-separator/MessageSeparator.cjs +1 -1
- package/dist/components/message-separator/MessageSeparator.cjs.map +1 -1
- package/dist/components/message-separator/MessageSeparator.d.ts +8 -4
- package/dist/components/message-separator/MessageSeparator.d.ts.map +1 -1
- package/dist/components/message-separator/MessageSeparator.js +16 -14
- package/dist/components/message-separator/MessageSeparator.js.map +1 -1
- package/dist/components/modal/Modal.cjs +1 -1
- package/dist/components/modal/Modal.cjs.map +1 -1
- package/dist/components/modal/Modal.css +1 -1
- package/dist/components/modal/Modal.d.ts +40 -4
- package/dist/components/modal/Modal.d.ts.map +1 -1
- package/dist/components/modal/Modal.js +105 -56
- package/dist/components/modal/Modal.js.map +1 -1
- package/dist/components/modal/Modal.module.scss.cjs +1 -1
- package/dist/components/modal/Modal.module.scss.js +14 -12
- package/dist/components/modal/Modal.module.scss.js.map +1 -1
- package/dist/components/modal-header/ModalHeader.cjs +1 -1
- package/dist/components/modal-header/ModalHeader.cjs.map +1 -1
- package/dist/components/modal-header/ModalHeader.css +1 -1
- package/dist/components/modal-header/ModalHeader.d.ts +16 -1
- package/dist/components/modal-header/ModalHeader.d.ts.map +1 -1
- package/dist/components/modal-header/ModalHeader.js +72 -57
- package/dist/components/modal-header/ModalHeader.js.map +1 -1
- package/dist/components/modal-header/ModalHeader.module.scss.cjs +1 -1
- package/dist/components/modal-header/ModalHeader.module.scss.js +15 -13
- package/dist/components/modal-header/ModalHeader.module.scss.js.map +1 -1
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.cjs +1 -1
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.cjs.map +1 -1
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.d.ts +4 -1
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.d.ts.map +1 -1
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.js +11 -10
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.js.map +1 -1
- package/dist/components/new-message-banner/NewMessageBanner.cjs +1 -1
- package/dist/components/new-message-banner/NewMessageBanner.cjs.map +1 -1
- package/dist/components/new-message-banner/NewMessageBanner.d.ts +15 -3
- package/dist/components/new-message-banner/NewMessageBanner.d.ts.map +1 -1
- package/dist/components/new-message-banner/NewMessageBanner.js +30 -22
- package/dist/components/new-message-banner/NewMessageBanner.js.map +1 -1
- package/dist/components/pagination-dots/PaginationDots.cjs +1 -1
- package/dist/components/pagination-dots/PaginationDots.cjs.map +1 -1
- package/dist/components/pagination-dots/PaginationDots.css +1 -1
- package/dist/components/pagination-dots/PaginationDots.d.ts +5 -1
- package/dist/components/pagination-dots/PaginationDots.d.ts.map +1 -1
- package/dist/components/pagination-dots/PaginationDots.js +22 -19
- package/dist/components/pagination-dots/PaginationDots.js.map +1 -1
- package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
- package/dist/components/pagination-dots/PaginationDots.module.scss.js +10 -10
- package/dist/components/permalink-preview/PermalinkPreview.cjs +1 -1
- package/dist/components/permalink-preview/PermalinkPreview.cjs.map +1 -1
- package/dist/components/permalink-preview/PermalinkPreview.d.ts +16 -5
- package/dist/components/permalink-preview/PermalinkPreview.d.ts.map +1 -1
- package/dist/components/permalink-preview/PermalinkPreview.js +39 -35
- package/dist/components/permalink-preview/PermalinkPreview.js.map +1 -1
- package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.cjs +1 -1
- package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.cjs.map +1 -1
- package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.d.ts +8 -1
- package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.d.ts.map +1 -1
- package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.js +20 -17
- package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.js.map +1 -1
- package/dist/components/popover-menu/PopoverMenu.cjs +1 -1
- package/dist/components/popover-menu/PopoverMenu.cjs.map +1 -1
- package/dist/components/popover-menu/PopoverMenu.css +1 -1
- package/dist/components/popover-menu/PopoverMenu.d.ts +9 -1
- package/dist/components/popover-menu/PopoverMenu.d.ts.map +1 -1
- package/dist/components/popover-menu/PopoverMenu.js +39 -28
- package/dist/components/popover-menu/PopoverMenu.js.map +1 -1
- package/dist/components/popover-menu/PopoverMenu.module.scss.cjs +1 -1
- package/dist/components/popover-menu/PopoverMenu.module.scss.js +12 -10
- package/dist/components/popover-menu/PopoverMenu.module.scss.js.map +1 -1
- package/dist/components/popover-notice/PopoverNotice.cjs +1 -1
- package/dist/components/popover-notice/PopoverNotice.cjs.map +1 -1
- package/dist/components/popover-notice/PopoverNotice.d.ts +13 -5
- package/dist/components/popover-notice/PopoverNotice.d.ts.map +1 -1
- package/dist/components/popover-notice/PopoverNotice.js +58 -48
- package/dist/components/popover-notice/PopoverNotice.js.map +1 -1
- package/dist/components/profile-popover/ProfilePopover.cjs +1 -1
- package/dist/components/profile-popover/ProfilePopover.cjs.map +1 -1
- package/dist/components/profile-popover/ProfilePopover.d.ts +34 -12
- package/dist/components/profile-popover/ProfilePopover.d.ts.map +1 -1
- package/dist/components/profile-popover/ProfilePopover.js +122 -106
- package/dist/components/profile-popover/ProfilePopover.js.map +1 -1
- package/dist/components/progress-bar/ProgressBar.cjs +1 -1
- package/dist/components/progress-bar/ProgressBar.cjs.map +1 -1
- package/dist/components/progress-bar/ProgressBar.d.ts +4 -3
- package/dist/components/progress-bar/ProgressBar.d.ts.map +1 -1
- package/dist/components/progress-bar/ProgressBar.js +9 -7
- package/dist/components/progress-bar/ProgressBar.js.map +1 -1
- package/dist/components/radio/Radio.css +1 -1
- package/dist/components/radio/Radio.module.scss.cjs +1 -1
- package/dist/components/radio/Radio.module.scss.js +11 -11
- package/dist/components/reaction-button/ReactionButton.cjs +1 -1
- package/dist/components/reaction-button/ReactionButton.cjs.map +1 -1
- package/dist/components/reaction-button/ReactionButton.d.ts +3 -1
- package/dist/components/reaction-button/ReactionButton.d.ts.map +1 -1
- package/dist/components/reaction-button/ReactionButton.js +20 -18
- package/dist/components/reaction-button/ReactionButton.js.map +1 -1
- package/dist/components/reactions-row/ReactionsRow.cjs +1 -1
- package/dist/components/reactions-row/ReactionsRow.cjs.map +1 -1
- package/dist/components/reactions-row/ReactionsRow.d.ts +10 -2
- package/dist/components/reactions-row/ReactionsRow.d.ts.map +1 -1
- package/dist/components/reactions-row/ReactionsRow.js +33 -28
- package/dist/components/reactions-row/ReactionsRow.js.map +1 -1
- package/dist/components/right-sidebar-header/RightSidebarHeader.cjs +1 -1
- package/dist/components/right-sidebar-header/RightSidebarHeader.cjs.map +1 -1
- package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts +15 -7
- package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts.map +1 -1
- package/dist/components/right-sidebar-header/RightSidebarHeader.js +23 -19
- package/dist/components/right-sidebar-header/RightSidebarHeader.js.map +1 -1
- package/dist/components/scrollbar/Scrollbar.cjs +1 -1
- package/dist/components/scrollbar/Scrollbar.cjs.map +1 -1
- package/dist/components/scrollbar/Scrollbar.css +1 -1
- package/dist/components/scrollbar/Scrollbar.d.ts +2 -2
- package/dist/components/scrollbar/Scrollbar.d.ts.map +1 -1
- package/dist/components/scrollbar/Scrollbar.js +24 -15
- package/dist/components/scrollbar/Scrollbar.js.map +1 -1
- package/dist/components/scrollbar/Scrollbar.module.scss.cjs +1 -1
- package/dist/components/scrollbar/Scrollbar.module.scss.js +4 -4
- package/dist/components/scrollbar/simplebar-vendor.css +1 -0
- package/dist/components/search-input/SearchInput.cjs +1 -1
- package/dist/components/search-input/SearchInput.cjs.map +1 -1
- package/dist/components/search-input/SearchInput.d.ts +5 -0
- package/dist/components/search-input/SearchInput.d.ts.map +1 -1
- package/dist/components/search-input/SearchInput.js +92 -85
- package/dist/components/search-input/SearchInput.js.map +1 -1
- package/dist/components/search-tip-banner/SearchTipBanner.cjs +1 -1
- package/dist/components/search-tip-banner/SearchTipBanner.cjs.map +1 -1
- package/dist/components/search-tip-banner/SearchTipBanner.d.ts +8 -5
- package/dist/components/search-tip-banner/SearchTipBanner.d.ts.map +1 -1
- package/dist/components/search-tip-banner/SearchTipBanner.js +17 -16
- package/dist/components/search-tip-banner/SearchTipBanner.js.map +1 -1
- package/dist/components/section-notice/SectionNotice.cjs +1 -1
- package/dist/components/section-notice/SectionNotice.cjs.map +1 -1
- package/dist/components/section-notice/SectionNotice.d.ts +16 -3
- package/dist/components/section-notice/SectionNotice.d.ts.map +1 -1
- package/dist/components/section-notice/SectionNotice.js +64 -48
- package/dist/components/section-notice/SectionNotice.js.map +1 -1
- package/dist/components/select/Select.cjs +1 -1
- package/dist/components/select/Select.cjs.map +1 -1
- package/dist/components/select/Select.d.ts +8 -1
- package/dist/components/select/Select.d.ts.map +1 -1
- package/dist/components/select/Select.js +81 -79
- package/dist/components/select/Select.js.map +1 -1
- package/dist/components/spinner/Spinner.cjs.map +1 -1
- package/dist/components/spinner/Spinner.css +1 -1
- package/dist/components/spinner/Spinner.d.ts +1 -0
- package/dist/components/spinner/Spinner.d.ts.map +1 -1
- package/dist/components/spinner/Spinner.js.map +1 -1
- package/dist/components/spinner/Spinner.module.scss.cjs +1 -1
- package/dist/components/spinner/Spinner.module.scss.js +5 -5
- package/dist/components/status-badge/StatusBadge.css +1 -1
- package/dist/components/status-badge/StatusBadge.module.scss.cjs +1 -1
- package/dist/components/status-badge/StatusBadge.module.scss.js +11 -11
- package/dist/components/switch/Switch.css +1 -1
- package/dist/components/switch/Switch.module.scss.cjs +1 -1
- package/dist/components/switch/Switch.module.scss.js +17 -17
- package/dist/components/tabs/Tabs.cjs +1 -1
- package/dist/components/tabs/Tabs.cjs.map +1 -1
- package/dist/components/tabs/Tabs.css +1 -1
- package/dist/components/tabs/Tabs.d.ts +14 -3
- package/dist/components/tabs/Tabs.d.ts.map +1 -1
- package/dist/components/tabs/Tabs.js +62 -53
- package/dist/components/tabs/Tabs.js.map +1 -1
- package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
- package/dist/components/tabs/Tabs.module.scss.js +13 -12
- package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
- package/dist/components/tabs/index.d.ts +1 -1
- package/dist/components/tabs/index.d.ts.map +1 -1
- package/dist/components/tag/Tag.cjs +1 -1
- package/dist/components/tag/Tag.cjs.map +1 -1
- package/dist/components/tag/Tag.d.ts +3 -3
- package/dist/components/tag/Tag.d.ts.map +1 -1
- package/dist/components/tag/Tag.js +12 -11
- package/dist/components/tag/Tag.js.map +1 -1
- package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
- package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
- package/dist/components/thread-footer/ThreadFooter.css +1 -1
- package/dist/components/thread-footer/ThreadFooter.d.ts +19 -3
- package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
- package/dist/components/thread-footer/ThreadFooter.js +53 -48
- package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
- package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
- package/dist/components/thread-footer/ThreadFooter.module.scss.js +18 -18
- package/dist/components/thread-list-item/ThreadListItem.cjs +1 -1
- package/dist/components/thread-list-item/ThreadListItem.cjs.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.d.ts +15 -7
- package/dist/components/thread-list-item/ThreadListItem.d.ts.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.js +66 -62
- package/dist/components/thread-list-item/ThreadListItem.js.map +1 -1
- package/dist/components/toast/Toast.cjs +1 -1
- package/dist/components/toast/Toast.cjs.map +1 -1
- package/dist/components/toast/Toast.d.ts +8 -3
- package/dist/components/toast/Toast.d.ts.map +1 -1
- package/dist/components/toast/Toast.js +47 -39
- package/dist/components/toast/Toast.js.map +1 -1
- package/dist/components/tour-point/TourPoint.cjs +1 -1
- package/dist/components/tour-point/TourPoint.cjs.map +1 -1
- package/dist/components/tour-point/TourPoint.css +1 -1
- package/dist/components/tour-point/TourPoint.d.ts +19 -5
- package/dist/components/tour-point/TourPoint.d.ts.map +1 -1
- package/dist/components/tour-point/TourPoint.js +66 -54
- package/dist/components/tour-point/TourPoint.js.map +1 -1
- package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
- package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
- package/dist/components/unread-badge/UnreadBadge.css +1 -1
- package/dist/components/unread-badge/UnreadBadge.module.scss.cjs +1 -1
- package/dist/components/unread-badge/UnreadBadge.module.scss.js +5 -5
- package/dist/components/user-avatar/UserAvatar.css +1 -1
- package/dist/components/user-avatar/UserAvatar.module.scss.cjs +1 -1
- package/dist/components/user-avatar/UserAvatar.module.scss.js +26 -26
- package/dist/components/user-avatar-group/UserAvatarGroup.cjs +1 -1
- package/dist/components/user-avatar-group/UserAvatarGroup.cjs.map +1 -1
- package/dist/components/user-avatar-group/UserAvatarGroup.css +1 -1
- package/dist/components/user-avatar-group/UserAvatarGroup.d.ts +8 -1
- package/dist/components/user-avatar-group/UserAvatarGroup.d.ts.map +1 -1
- package/dist/components/user-avatar-group/UserAvatarGroup.js +22 -18
- package/dist/components/user-avatar-group/UserAvatarGroup.js.map +1 -1
- package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.cjs +1 -1
- package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.js +14 -14
- package/dist/hooks/use-modal-focus.cjs +2 -0
- package/dist/hooks/use-modal-focus.cjs.map +1 -0
- package/dist/hooks/use-modal-focus.d.ts +26 -0
- package/dist/hooks/use-modal-focus.d.ts.map +1 -0
- package/dist/hooks/use-modal-focus.js +91 -0
- package/dist/hooks/use-modal-focus.js.map +1 -0
- package/dist/hooks/use-popover-transition.cjs +1 -1
- package/dist/hooks/use-popover-transition.cjs.map +1 -1
- package/dist/hooks/use-popover-transition.d.ts +6 -4
- package/dist/hooks/use-popover-transition.d.ts.map +1 -1
- package/dist/hooks/use-popover-transition.js +19 -15
- package/dist/hooks/use-popover-transition.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/utils/duration.cjs +2 -0
- package/dist/utils/duration.cjs.map +1 -0
- package/dist/utils/duration.d.ts +8 -0
- package/dist/utils/duration.d.ts.map +1 -0
- package/dist/utils/duration.js +11 -0
- package/dist/utils/duration.js.map +1 -0
- package/dist/utils/props.cjs +2 -0
- package/dist/utils/props.cjs.map +1 -0
- package/dist/utils/props.d.ts +13 -0
- package/dist/utils/props.d.ts.map +1 -0
- package/dist/utils/props.js +7 -0
- package/dist/utils/props.js.map +1 -0
- package/package.json +4 -6
- package/dist/node_modules/simplebar-react/dist/simplebar.min.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
._user-avatar-
|
|
1
|
+
._user-avatar-group_17zfx_2{display:inline-flex;align-items:center;padding-right:var(--spacing-xxxxs)}._user-avatar-group__item_17zfx_7{position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;width:20px;height:20px;margin-right:-2px;border-radius:var(--radius-pill);outline:1px solid var(--center-channel-bg, var(--color-neutral-0));transform:scale(1);transition:transform var(--duration-quick) var(--ease-transition),box-shadow var(--duration-quick) var(--ease-transition)}._user-avatar-group__item_17zfx_7:hover{z-index:10;transform:scale(1.04);box-shadow:var(--elevation-2)}._user-avatar-group__item_17zfx_7:hover ._user-avatar-group__tooltip-layer_17zfx_26{opacity:1;visibility:visible;transition:opacity var(--duration-quick) var(--ease-entrance),visibility 0s linear 0s}._user-avatar-group__trigger_17zfx_31{display:flex;align-items:center;justify-content:center;width:100%;height:100%;border-radius:inherit;overflow:hidden}._user-avatar-group__tooltip-layer_17zfx_26{position:absolute;left:50%;bottom:100%;z-index:20;margin-bottom:var(--spacing-xxxxs);transform:translate(-50%);opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--duration-quick) var(--ease-exit),visibility 0s linear var(--duration-quick)}._user-avatar-group__tooltip_17zfx_26{flex-shrink:0}._user-avatar-group__overflow_17zfx_55{display:inline-flex;align-items:center;justify-content:center;background-color:var(--center-channel-bg);background-image:linear-gradient(rgba(var(--center-channel-color-rgb),.08),rgba(var(--center-channel-color-rgb),.08));color:rgba(var(--center-channel-color-rgb),.56);font-size:var(--font-size-25);font-weight:var(--font-weight-semibold);letter-spacing:.01em;border-radius:var(--radius-pill)}._user-avatar-group--size-24_17zfx_67{padding-right:3px}._user-avatar-group--size-24_17zfx_67 ._user-avatar-group__item_17zfx_7{width:24px;height:24px;margin-right:-3px;outline-width:1px}._user-avatar-group--size-24_17zfx_67 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-50)}._user-avatar-group--size-28_17zfx_79{padding-right:3px}._user-avatar-group--size-28_17zfx_79 ._user-avatar-group__item_17zfx_7{width:28px;height:28px;margin-right:-3px;outline-width:2px}._user-avatar-group--size-28_17zfx_79 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-75)}._user-avatar-group--size-32_17zfx_91{padding-right:3px}._user-avatar-group--size-32_17zfx_91 ._user-avatar-group__item_17zfx_7{width:32px;height:32px;margin-right:-3px;outline-width:2px}._user-avatar-group--size-32_17zfx_91 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-75)}._user-avatar-group--size-40_17zfx_103{padding-right:5px}._user-avatar-group--size-40_17zfx_103 ._user-avatar-group__item_17zfx_7{width:40px;height:40px;margin-right:-5px;outline-width:2px}._user-avatar-group--size-40_17zfx_103 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-100)}._user-avatar-group--size-48_17zfx_115{padding-right:7px}._user-avatar-group--size-48_17zfx_115 ._user-avatar-group__item_17zfx_7{width:48px;height:48px;margin-right:-7px;outline-width:2px}._user-avatar-group--size-48_17zfx_115 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-200)}._user-avatar-group--size-56_17zfx_127{padding-right:8px}._user-avatar-group--size-56_17zfx_127 ._user-avatar-group__item_17zfx_7{width:56px;height:56px;margin-right:-8px;outline-width:2px}._user-avatar-group--size-56_17zfx_127 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-300)}._user-avatar-group--size-64_17zfx_139{padding-right:9px}._user-avatar-group--size-64_17zfx_139 ._user-avatar-group__item_17zfx_7{width:64px;height:64px;margin-right:-9px;outline-width:2px}._user-avatar-group--size-64_17zfx_139 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-400)}._user-avatar-group--size-72_17zfx_151{padding-right:10px}._user-avatar-group--size-72_17zfx_151 ._user-avatar-group__item_17zfx_7{width:72px;height:72px;margin-right:-10px;outline-width:2px}._user-avatar-group--size-72_17zfx_151 ._user-avatar-group__overflow_17zfx_55{font-size:var(--font-size-500)}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
1
2
|
export type UserAvatarGroupSize = '20' | '24' | '28' | '32' | '40' | '48' | '56' | '64' | '72';
|
|
2
3
|
export interface UserAvatarGroupItem {
|
|
3
4
|
/** Unique key for the list item. */
|
|
@@ -16,11 +17,17 @@ export interface UserAvatarGroupProps {
|
|
|
16
17
|
size?: UserAvatarGroupSize;
|
|
17
18
|
/** Optional CSS class name. */
|
|
18
19
|
className?: string;
|
|
20
|
+
/** Accessible name for the group. Default: `{count} participants`. */
|
|
21
|
+
formatGroupLabel?: (count: number) => string;
|
|
22
|
+
/** Accessible name for the +N overflow. Default: `{count} more participants`. */
|
|
23
|
+
formatOverflowLabel?: (count: number) => string;
|
|
24
|
+
/** Overflow tooltip text. Default: up to three names, then `A, B, +N more`. */
|
|
25
|
+
formatOverflowNames?: (hidden: UserAvatarGroupItem[]) => ReactNode;
|
|
19
26
|
}
|
|
20
27
|
/**
|
|
21
28
|
* A User Avatar Group displays multiple participants as a stack of overlapping avatars. It's
|
|
22
29
|
* a compact way to show "who's involved" — thread participants, channel members, call
|
|
23
30
|
* attendees — without a list.
|
|
24
31
|
*/
|
|
25
|
-
export default function UserAvatarGroup({ avatars, className, max, size, }: UserAvatarGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
export default function UserAvatarGroup({ avatars, className, max, size, formatGroupLabel, formatOverflowLabel, formatOverflowNames, }: UserAvatarGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
26
33
|
//# sourceMappingURL=UserAvatarGroup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserAvatarGroup.d.ts","sourceRoot":"","sources":["../../../src/components/user-avatar-group/UserAvatarGroup.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UserAvatarGroup.d.ts","sourceRoot":"","sources":["../../../src/components/user-avatar-group/UserAvatarGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,MAAM,mBAAmB,GAC3B,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAET,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,uFAAuF;IACvF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,iFAAiF;IACjF,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,KAAK,SAAS,CAAC;CACpE;AAgBD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,OAAO,EACP,SAAc,EACd,GAAO,EACP,IAAW,EACX,gBAA0C,EAC1C,mBAAgD,EAChD,mBAAwC,GACzC,EAAE,oBAAoB,2CAkEtB"}
|
|
@@ -1,36 +1,40 @@
|
|
|
1
|
-
import { jsxs as
|
|
1
|
+
import { jsxs as l, jsx as e } from "react/jsx-runtime";
|
|
2
2
|
import m from "../tooltip/Tooltip.js";
|
|
3
|
-
import
|
|
3
|
+
import v from "../user-avatar/UserAvatar.js";
|
|
4
4
|
import a from "./UserAvatarGroup.module.scss.js";
|
|
5
|
-
|
|
5
|
+
const b = (r) => `${r} participants`, N = (r) => `${r} more participants`;
|
|
6
|
+
function h(r) {
|
|
6
7
|
return r.length === 0 ? "" : r.length === 1 ? r[0].name : r.length <= 3 ? r.map((o) => o.name).join(", ") : `${r.slice(0, 2).map((o) => o.name).join(", ")}, +${r.length - 2} more`;
|
|
7
8
|
}
|
|
8
|
-
function
|
|
9
|
+
function d({
|
|
9
10
|
avatars: r,
|
|
10
11
|
className: o = "",
|
|
11
12
|
max: i = 3,
|
|
12
|
-
size:
|
|
13
|
+
size: s = "20",
|
|
14
|
+
formatGroupLabel: u = b,
|
|
15
|
+
formatOverflowLabel: c = N,
|
|
16
|
+
formatOverflowNames: g = h
|
|
13
17
|
}) {
|
|
14
|
-
const
|
|
18
|
+
const _ = r.slice(0, i), p = r.slice(i), n = p.length, f = [
|
|
15
19
|
a["user-avatar-group"],
|
|
16
|
-
|
|
20
|
+
s !== "20" ? a[`user-avatar-group--size-${s}`] : "",
|
|
17
21
|
o
|
|
18
22
|
].filter(Boolean).join(" ");
|
|
19
|
-
return /* @__PURE__ */
|
|
23
|
+
return /* @__PURE__ */ l(
|
|
20
24
|
"div",
|
|
21
25
|
{
|
|
22
|
-
className:
|
|
26
|
+
className: f,
|
|
23
27
|
role: "group",
|
|
24
|
-
"aria-label":
|
|
28
|
+
"aria-label": u(r.length),
|
|
25
29
|
children: [
|
|
26
|
-
|
|
30
|
+
_.map((t) => /* @__PURE__ */ l("span", { className: a["user-avatar-group__item"], children: [
|
|
27
31
|
/* @__PURE__ */ e("span", { className: a["user-avatar-group__trigger"], children: /* @__PURE__ */ e(
|
|
28
|
-
|
|
32
|
+
v,
|
|
29
33
|
{
|
|
30
34
|
src: t.src,
|
|
31
35
|
alt: t.name,
|
|
32
36
|
name: t.name,
|
|
33
|
-
size:
|
|
37
|
+
size: s
|
|
34
38
|
}
|
|
35
39
|
) }),
|
|
36
40
|
/* @__PURE__ */ e(
|
|
@@ -49,16 +53,16 @@ function h({
|
|
|
49
53
|
}
|
|
50
54
|
)
|
|
51
55
|
] }, t.key)),
|
|
52
|
-
n > 0 && /* @__PURE__ */
|
|
56
|
+
n > 0 && /* @__PURE__ */ l(
|
|
53
57
|
"span",
|
|
54
58
|
{
|
|
55
59
|
className: [
|
|
56
60
|
a["user-avatar-group__item"],
|
|
57
61
|
a["user-avatar-group__overflow"]
|
|
58
62
|
].join(" "),
|
|
59
|
-
"aria-label":
|
|
63
|
+
"aria-label": c(n),
|
|
60
64
|
children: [
|
|
61
|
-
/* @__PURE__ */
|
|
65
|
+
/* @__PURE__ */ l("span", { className: a["user-avatar-group__trigger"], children: [
|
|
62
66
|
"+",
|
|
63
67
|
n
|
|
64
68
|
] }),
|
|
@@ -72,7 +76,7 @@ function h({
|
|
|
72
76
|
{
|
|
73
77
|
arrow: "bottom",
|
|
74
78
|
className: a["user-avatar-group__tooltip"],
|
|
75
|
-
label:
|
|
79
|
+
label: g(p)
|
|
76
80
|
}
|
|
77
81
|
)
|
|
78
82
|
}
|
|
@@ -85,6 +89,6 @@ function h({
|
|
|
85
89
|
);
|
|
86
90
|
}
|
|
87
91
|
export {
|
|
88
|
-
|
|
92
|
+
d as default
|
|
89
93
|
};
|
|
90
94
|
//# sourceMappingURL=UserAvatarGroup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserAvatarGroup.js","sources":["../../../src/components/user-avatar-group/UserAvatarGroup.tsx"],"sourcesContent":["import Tooltip from '@/components/tooltip/Tooltip';\nimport UserAvatar from '@/components/user-avatar/UserAvatar';\nimport styles from './UserAvatarGroup.module.scss';\n\nexport type UserAvatarGroupSize =\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '48'\n | '56'\n | '64'\n | '72';\n\nexport interface UserAvatarGroupItem {\n /** Unique key for the list item. */\n key: string;\n /** Image URL for the avatar. Omit to render the Fallback (initials) variant. */\n src?: string;\n /** Alt text / display name for the avatar. Drives initials and fallback colour. */\n name: string;\n}\n\nexport interface UserAvatarGroupProps {\n /** Array of avatar items to display. */\n avatars: UserAvatarGroupItem[];\n /** Maximum number of avatars to show before showing the overflow count. Default: 3. */\n max?: number;\n /** Avatar size in px. Matches Figma Avatar Group size options. Default: '20'. */\n size?: UserAvatarGroupSize;\n /** Optional CSS class name. */\n className?: string;\n}\n\nfunction overflowNamesLabel(hidden: UserAvatarGroupItem[]): string {\n if (hidden.length === 0) return '';\n if (hidden.length === 1) return hidden[0].name;\n if (hidden.length <= 3) return hidden.map((a) => a.name).join(', ');\n return `${hidden\n .slice(0, 2)\n .map((a) => a.name)\n .join(', ')}, +${hidden.length - 2} more`;\n}\n\n/**\n * A User Avatar Group displays multiple participants as a stack of overlapping avatars. It's\n * a compact way to show \"who's involved\" — thread participants, channel members, call\n * attendees — without a list.\n */\nexport default function UserAvatarGroup({\n avatars,\n className = '',\n max = 3,\n size = '20',\n}: UserAvatarGroupProps) {\n const visible = avatars.slice(0, max);\n const hidden = avatars.slice(max);\n const overflow = hidden.length;\n\n const rootClass = [\n styles['user-avatar-group'],\n size !== '20' ? styles[`user-avatar-group--size-${size}`] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={rootClass}\n role=\"group\"\n aria-label={
|
|
1
|
+
{"version":3,"file":"UserAvatarGroup.js","sources":["../../../src/components/user-avatar-group/UserAvatarGroup.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport Tooltip from '@/components/tooltip/Tooltip';\nimport UserAvatar from '@/components/user-avatar/UserAvatar';\nimport styles from './UserAvatarGroup.module.scss';\n\nexport type UserAvatarGroupSize =\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '48'\n | '56'\n | '64'\n | '72';\n\nexport interface UserAvatarGroupItem {\n /** Unique key for the list item. */\n key: string;\n /** Image URL for the avatar. Omit to render the Fallback (initials) variant. */\n src?: string;\n /** Alt text / display name for the avatar. Drives initials and fallback colour. */\n name: string;\n}\n\nexport interface UserAvatarGroupProps {\n /** Array of avatar items to display. */\n avatars: UserAvatarGroupItem[];\n /** Maximum number of avatars to show before showing the overflow count. Default: 3. */\n max?: number;\n /** Avatar size in px. Matches Figma Avatar Group size options. Default: '20'. */\n size?: UserAvatarGroupSize;\n /** Optional CSS class name. */\n className?: string;\n /** Accessible name for the group. Default: `{count} participants`. */\n formatGroupLabel?: (count: number) => string;\n /** Accessible name for the +N overflow. Default: `{count} more participants`. */\n formatOverflowLabel?: (count: number) => string;\n /** Overflow tooltip text. Default: up to three names, then `A, B, +N more`. */\n formatOverflowNames?: (hidden: UserAvatarGroupItem[]) => ReactNode;\n}\n\nconst defaultFormatGroupLabel = (count: number) => `${count} participants`;\nconst defaultFormatOverflowLabel = (count: number) =>\n `${count} more participants`;\n\nfunction overflowNamesLabel(hidden: UserAvatarGroupItem[]): string {\n if (hidden.length === 0) return '';\n if (hidden.length === 1) return hidden[0].name;\n if (hidden.length <= 3) return hidden.map((a) => a.name).join(', ');\n return `${hidden\n .slice(0, 2)\n .map((a) => a.name)\n .join(', ')}, +${hidden.length - 2} more`;\n}\n\n/**\n * A User Avatar Group displays multiple participants as a stack of overlapping avatars. It's\n * a compact way to show \"who's involved\" — thread participants, channel members, call\n * attendees — without a list.\n */\nexport default function UserAvatarGroup({\n avatars,\n className = '',\n max = 3,\n size = '20',\n formatGroupLabel = defaultFormatGroupLabel,\n formatOverflowLabel = defaultFormatOverflowLabel,\n formatOverflowNames = overflowNamesLabel,\n}: UserAvatarGroupProps) {\n const visible = avatars.slice(0, max);\n const hidden = avatars.slice(max);\n const overflow = hidden.length;\n\n const rootClass = [\n styles['user-avatar-group'],\n size !== '20' ? styles[`user-avatar-group--size-${size}`] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={rootClass}\n role=\"group\"\n aria-label={formatGroupLabel(avatars.length)}\n >\n {visible.map((avatar) => (\n <span key={avatar.key} className={styles['user-avatar-group__item']}>\n <span className={styles['user-avatar-group__trigger']}>\n <UserAvatar\n src={avatar.src}\n alt={avatar.name}\n name={avatar.name}\n size={size}\n />\n </span>\n <div\n className={styles['user-avatar-group__tooltip-layer']}\n role=\"presentation\"\n >\n <Tooltip\n arrow=\"bottom\"\n className={styles['user-avatar-group__tooltip']}\n label={avatar.name}\n />\n </div>\n </span>\n ))}\n {overflow > 0 && (\n <span\n className={[\n styles['user-avatar-group__item'],\n styles['user-avatar-group__overflow'],\n ].join(' ')}\n aria-label={formatOverflowLabel(overflow)}\n >\n <span className={styles['user-avatar-group__trigger']}>\n +{overflow}\n </span>\n <div\n className={styles['user-avatar-group__tooltip-layer']}\n role=\"presentation\"\n >\n <Tooltip\n arrow=\"bottom\"\n className={styles['user-avatar-group__tooltip']}\n label={formatOverflowNames(hidden)}\n />\n </div>\n </span>\n )}\n </div>\n );\n}\n"],"names":["defaultFormatGroupLabel","count","defaultFormatOverflowLabel","overflowNamesLabel","hidden","a","UserAvatarGroup","avatars","className","max","size","formatGroupLabel","formatOverflowLabel","formatOverflowNames","visible","overflow","rootClass","styles","jsxs","avatar","jsx","UserAvatar","Tooltip"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./UserAvatarGroup.css');const r={"user-avatar-group":"_user-avatar-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./UserAvatarGroup.css');const r={"user-avatar-group":"_user-avatar-group_17zfx_2","user-avatar-group__item":"_user-avatar-group__item_17zfx_7","user-avatar-group__tooltip-layer":"_user-avatar-group__tooltip-layer_17zfx_26","user-avatar-group__trigger":"_user-avatar-group__trigger_17zfx_31","user-avatar-group__tooltip":"_user-avatar-group__tooltip_17zfx_26","user-avatar-group__overflow":"_user-avatar-group__overflow_17zfx_55","user-avatar-group--size-24":"_user-avatar-group--size-24_17zfx_67","user-avatar-group--size-28":"_user-avatar-group--size-28_17zfx_79","user-avatar-group--size-32":"_user-avatar-group--size-32_17zfx_91","user-avatar-group--size-40":"_user-avatar-group--size-40_17zfx_103","user-avatar-group--size-48":"_user-avatar-group--size-48_17zfx_115","user-avatar-group--size-56":"_user-avatar-group--size-56_17zfx_127","user-avatar-group--size-64":"_user-avatar-group--size-64_17zfx_139","user-avatar-group--size-72":"_user-avatar-group--size-72_17zfx_151"};exports.default=r;
|
|
2
2
|
//# sourceMappingURL=UserAvatarGroup.module.scss.cjs.map
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import './UserAvatarGroup.css';const r = {
|
|
2
|
-
"user-avatar-group": "_user-avatar-
|
|
3
|
-
"user-avatar-group__item": "_user-avatar-
|
|
4
|
-
"user-avatar-group__tooltip-layer": "_user-avatar-group__tooltip-
|
|
5
|
-
"user-avatar-group__trigger": "_user-avatar-
|
|
6
|
-
"user-avatar-group__tooltip": "_user-avatar-
|
|
7
|
-
"user-avatar-group__overflow": "_user-avatar-
|
|
8
|
-
"user-avatar-group--size-24": "_user-avatar-group--size-
|
|
9
|
-
"user-avatar-group--size-28": "_user-avatar-group--size-
|
|
10
|
-
"user-avatar-group--size-32": "_user-avatar-group--size-
|
|
11
|
-
"user-avatar-group--size-40": "_user-avatar-group--size-
|
|
12
|
-
"user-avatar-group--size-48": "_user-avatar-group--size-
|
|
13
|
-
"user-avatar-group--size-56": "_user-avatar-group--size-
|
|
14
|
-
"user-avatar-group--size-64": "_user-avatar-group--size-
|
|
15
|
-
"user-avatar-group--size-72": "_user-avatar-group--size-
|
|
2
|
+
"user-avatar-group": "_user-avatar-group_17zfx_2",
|
|
3
|
+
"user-avatar-group__item": "_user-avatar-group__item_17zfx_7",
|
|
4
|
+
"user-avatar-group__tooltip-layer": "_user-avatar-group__tooltip-layer_17zfx_26",
|
|
5
|
+
"user-avatar-group__trigger": "_user-avatar-group__trigger_17zfx_31",
|
|
6
|
+
"user-avatar-group__tooltip": "_user-avatar-group__tooltip_17zfx_26",
|
|
7
|
+
"user-avatar-group__overflow": "_user-avatar-group__overflow_17zfx_55",
|
|
8
|
+
"user-avatar-group--size-24": "_user-avatar-group--size-24_17zfx_67",
|
|
9
|
+
"user-avatar-group--size-28": "_user-avatar-group--size-28_17zfx_79",
|
|
10
|
+
"user-avatar-group--size-32": "_user-avatar-group--size-32_17zfx_91",
|
|
11
|
+
"user-avatar-group--size-40": "_user-avatar-group--size-40_17zfx_103",
|
|
12
|
+
"user-avatar-group--size-48": "_user-avatar-group--size-48_17zfx_115",
|
|
13
|
+
"user-avatar-group--size-56": "_user-avatar-group--size-56_17zfx_127",
|
|
14
|
+
"user-avatar-group--size-64": "_user-avatar-group--size-64_17zfx_139",
|
|
15
|
+
"user-avatar-group--size-72": "_user-avatar-group--size-72_17zfx_151"
|
|
16
16
|
};
|
|
17
17
|
export {
|
|
18
18
|
r as default
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),S=["a[href]","area[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","summary",'[contenteditable=""]','[contenteditable="true"]',"[tabindex]"].join(",");function w(r,s){for(let t=r;t;t=t.parentElement){if(t.hidden||t.hasAttribute("inert")||t.getAttribute("aria-hidden")==="true")return!0;const l=getComputedStyle(t);if(l.display==="none"||t===r&&l.visibility==="hidden")return!0;if(t===s)break}return!1}function x(r){return Array.from(r.querySelectorAll(S)).filter(s=>s.tabIndex>=0&&!s.matches(":disabled")&&!w(s,r))}const u=[];function T(r,{initialFocusRef:s,closeOnEscape:t=!0,onClose:l,active:p=!0}){const y=d.useRef(s);y.current=s;const m=d.useRef({closeOnEscape:t,onClose:l});m.current={closeOnEscape:t,onClose:l};const v=d.useRef(null),a=d.useRef(null);d.useEffect(()=>{var i;const c=document.activeElement;function b(){const o=u[u.length-1],f=v.current;return f&&u.includes(f)?o===f:a.current?a.current.wasTop&&o===a.current.below:o===void 0}const e=r.current,n=(i=y.current)==null?void 0:i.current;return n&&(e!=null&&e.contains(n))&&n.focus(),(!n||document.activeElement!==n)&&(e==null||e.focus()),()=>{b()&&c&&c.isConnected&&typeof c.focus=="function"&&c.focus()}},[r]),d.useEffect(()=>{if(!p)return;const c={};u.push(c),v.current=c,a.current=null;function b(e){var E,k;if(e.defaultPrevented||u[u.length-1]!==c)return;const n=r.current;if(!n)return;if(e.key==="Escape"){m.current.closeOnEscape&&((k=(E=m.current).onClose)==null||k.call(E));return}if(e.key!=="Tab")return;const i=x(n);if(i.length===0){e.preventDefault(),n.focus();return}const o=i[0],f=i[i.length-1],h=document.activeElement,g=!n.contains(h);e.shiftKey?(g||h===o||h===n)&&(e.preventDefault(),f.focus()):(g||h===f)&&(e.preventDefault(),o.focus())}return document.addEventListener("keydown",b),()=>{document.removeEventListener("keydown",b);const e=u.indexOf(c);a.current={wasTop:e===u.length-1,below:u[e-1]},u.splice(e,1)}},[r,p])}exports.useModalFocus=T;
|
|
2
|
+
//# sourceMappingURL=use-modal-focus.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-modal-focus.cjs","sources":["../../src/hooks/use-modal-focus.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport type { RefObject } from 'react';\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'summary',\n '[contenteditable=\"\"]',\n '[contenteditable=\"true\"]',\n '[tabindex]',\n].join(',');\n\nfunction isHidden(el: HTMLElement, root: HTMLElement): boolean {\n for (let node: HTMLElement | null = el; node; node = node.parentElement) {\n if (node.hidden || node.hasAttribute('inert')) return true;\n if (node.getAttribute('aria-hidden') === 'true') return true;\n const style = getComputedStyle(node);\n if (style.display === 'none') return true;\n if (node === el && style.visibility === 'hidden') return true;\n if (node === root) break;\n }\n return false;\n}\n\nfunction getFocusable(root: HTMLElement): HTMLElement[] {\n return Array.from(\n root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter(\n (el) => el.tabIndex >= 0 && !el.matches(':disabled') && !isHidden(el, root),\n );\n}\n\n/** Open modals in mount order; only the last one reacts to Tab and Escape. */\nconst modalStack: object[] = [];\n\nexport interface UseModalFocusOptions {\n /** Element to focus on mount. Falls back to the dialog root. */\n initialFocusRef?: RefObject<HTMLElement | null>;\n /** Close on Escape. Default true. */\n closeOnEscape?: boolean;\n onClose?: () => void;\n /**\n * When false (e.g. during an exit transition) Tab and Escape are no longer\n * handled and the modal leaves the stack, but focus is still restored on\n * unmount. Default true.\n */\n active?: boolean;\n}\n\n/**\n * Dialog focus and keyboard behavior for a modal panel: initial focus, Tab trap\n * (focusable elements computed at keypress), Escape (skipped when already\n * handled), and focus restore on unmount.\n *\n * Tab and Escape are handled by one document listener, so the trap still holds\n * when focus sits outside the dialog (e.g. after a backdrop click), and only\n * the topmost active modal responds. Events whose default was prevented (by an\n * inner widget or the host's `onKeyDown`) are ignored.\n */\nexport function useModalFocus(\n rootRef: RefObject<HTMLElement | null>,\n {\n initialFocusRef,\n closeOnEscape = true,\n onClose,\n active = true,\n }: UseModalFocusOptions,\n): void {\n const initialFocusRefRef = useRef(initialFocusRef);\n initialFocusRefRef.current = initialFocusRef;\n const latest = useRef({ closeOnEscape, onClose });\n latest.current = { closeOnEscape, onClose };\n const keyToken = useRef<object | null>(null);\n // Stack position recorded when the token leaves the stack (exit start).\n const exit = useRef<{ wasTop: boolean; below: object | undefined } | null>(\n null,\n );\n\n useEffect(() => {\n const previous = document.activeElement as HTMLElement | null;\n function shouldRestoreFocus(): boolean {\n const top = modalStack[modalStack.length - 1];\n const token = keyToken.current;\n if (token && modalStack.includes(token)) return top === token;\n if (!exit.current) return top === undefined;\n return exit.current.wasTop && top === exit.current.below;\n }\n const root = rootRef.current;\n const target = initialFocusRefRef.current?.current;\n if (target && root?.contains(target)) target.focus();\n if (!target || document.activeElement !== target) root?.focus();\n return () => {\n if (\n shouldRestoreFocus() &&\n previous &&\n previous.isConnected &&\n typeof previous.focus === 'function'\n ) {\n previous.focus();\n }\n };\n }, [rootRef]);\n\n useEffect(() => {\n if (!active) return;\n const token = {};\n modalStack.push(token);\n keyToken.current = token;\n exit.current = null;\n\n function handle(e: KeyboardEvent) {\n if (e.defaultPrevented || modalStack[modalStack.length - 1] !== token)\n return;\n const dialog = rootRef.current;\n if (!dialog) return;\n if (e.key === 'Escape') {\n if (latest.current.closeOnEscape) latest.current.onClose?.();\n return;\n }\n if (e.key !== 'Tab') return;\n const focusable = getFocusable(dialog);\n if (focusable.length === 0) {\n e.preventDefault();\n dialog.focus();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const current = document.activeElement;\n const outside = !dialog.contains(current);\n if (e.shiftKey) {\n if (outside || current === first || current === dialog) {\n e.preventDefault();\n last.focus();\n }\n } else if (outside || current === last) {\n e.preventDefault();\n first.focus();\n }\n }\n document.addEventListener('keydown', handle);\n return () => {\n document.removeEventListener('keydown', handle);\n const index = modalStack.indexOf(token);\n exit.current = {\n wasTop: index === modalStack.length - 1,\n below: modalStack[index - 1],\n };\n modalStack.splice(index, 1);\n };\n }, [rootRef, active]);\n}\n"],"names":["FOCUSABLE_SELECTOR","isHidden","el","root","node","style","getFocusable","modalStack","useModalFocus","rootRef","initialFocusRef","closeOnEscape","onClose","active","initialFocusRefRef","useRef","latest","keyToken","exit","useEffect","previous","shouldRestoreFocus","top","token","target","_a","handle","dialog","_b","focusable","first","last","current","outside","index"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
export interface UseModalFocusOptions {
|
|
3
|
+
/** Element to focus on mount. Falls back to the dialog root. */
|
|
4
|
+
initialFocusRef?: RefObject<HTMLElement | null>;
|
|
5
|
+
/** Close on Escape. Default true. */
|
|
6
|
+
closeOnEscape?: boolean;
|
|
7
|
+
onClose?: () => void;
|
|
8
|
+
/**
|
|
9
|
+
* When false (e.g. during an exit transition) Tab and Escape are no longer
|
|
10
|
+
* handled and the modal leaves the stack, but focus is still restored on
|
|
11
|
+
* unmount. Default true.
|
|
12
|
+
*/
|
|
13
|
+
active?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Dialog focus and keyboard behavior for a modal panel: initial focus, Tab trap
|
|
17
|
+
* (focusable elements computed at keypress), Escape (skipped when already
|
|
18
|
+
* handled), and focus restore on unmount.
|
|
19
|
+
*
|
|
20
|
+
* Tab and Escape are handled by one document listener, so the trap still holds
|
|
21
|
+
* when focus sits outside the dialog (e.g. after a backdrop click), and only
|
|
22
|
+
* the topmost active modal responds. Events whose default was prevented (by an
|
|
23
|
+
* inner widget or the host's `onKeyDown`) are ignored.
|
|
24
|
+
*/
|
|
25
|
+
export declare function useModalFocus(rootRef: RefObject<HTMLElement | null>, { initialFocusRef, closeOnEscape, onClose, active, }: UseModalFocusOptions): void;
|
|
26
|
+
//# sourceMappingURL=use-modal-focus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-modal-focus.d.ts","sourceRoot":"","sources":["../../src/hooks/use-modal-focus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAsCvC,MAAM,WAAW,oBAAoB;IACnC,gEAAgE;IAChE,eAAe,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,qCAAqC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACtC,EACE,eAAe,EACf,aAAoB,EACpB,OAAO,EACP,MAAa,GACd,EAAE,oBAAoB,GACtB,IAAI,CAoFN"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { useRef as m, useEffect as x } from "react";
|
|
2
|
+
const w = [
|
|
3
|
+
"a[href]",
|
|
4
|
+
"area[href]",
|
|
5
|
+
"button:not([disabled])",
|
|
6
|
+
'input:not([disabled]):not([type="hidden"])',
|
|
7
|
+
"select:not([disabled])",
|
|
8
|
+
"textarea:not([disabled])",
|
|
9
|
+
"summary",
|
|
10
|
+
'[contenteditable=""]',
|
|
11
|
+
'[contenteditable="true"]',
|
|
12
|
+
"[tabindex]"
|
|
13
|
+
].join(",");
|
|
14
|
+
function A(r, i) {
|
|
15
|
+
for (let t = r; t; t = t.parentElement) {
|
|
16
|
+
if (t.hidden || t.hasAttribute("inert") || t.getAttribute("aria-hidden") === "true") return !0;
|
|
17
|
+
const d = getComputedStyle(t);
|
|
18
|
+
if (d.display === "none" || t === r && d.visibility === "hidden") return !0;
|
|
19
|
+
if (t === i) break;
|
|
20
|
+
}
|
|
21
|
+
return !1;
|
|
22
|
+
}
|
|
23
|
+
function S(r) {
|
|
24
|
+
return Array.from(
|
|
25
|
+
r.querySelectorAll(w)
|
|
26
|
+
).filter(
|
|
27
|
+
(i) => i.tabIndex >= 0 && !i.matches(":disabled") && !A(i, r)
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
const u = [];
|
|
31
|
+
function C(r, {
|
|
32
|
+
initialFocusRef: i,
|
|
33
|
+
closeOnEscape: t = !0,
|
|
34
|
+
onClose: d,
|
|
35
|
+
active: h = !0
|
|
36
|
+
}) {
|
|
37
|
+
const y = m(i);
|
|
38
|
+
y.current = i;
|
|
39
|
+
const p = m({ closeOnEscape: t, onClose: d });
|
|
40
|
+
p.current = { closeOnEscape: t, onClose: d };
|
|
41
|
+
const v = m(null), l = m(
|
|
42
|
+
null
|
|
43
|
+
);
|
|
44
|
+
x(() => {
|
|
45
|
+
var o;
|
|
46
|
+
const c = document.activeElement;
|
|
47
|
+
function a() {
|
|
48
|
+
const s = u[u.length - 1], f = v.current;
|
|
49
|
+
return f && u.includes(f) ? s === f : l.current ? l.current.wasTop && s === l.current.below : s === void 0;
|
|
50
|
+
}
|
|
51
|
+
const e = r.current, n = (o = y.current) == null ? void 0 : o.current;
|
|
52
|
+
return n && (e != null && e.contains(n)) && n.focus(), (!n || document.activeElement !== n) && (e == null || e.focus()), () => {
|
|
53
|
+
a() && c && c.isConnected && typeof c.focus == "function" && c.focus();
|
|
54
|
+
};
|
|
55
|
+
}, [r]), x(() => {
|
|
56
|
+
if (!h) return;
|
|
57
|
+
const c = {};
|
|
58
|
+
u.push(c), v.current = c, l.current = null;
|
|
59
|
+
function a(e) {
|
|
60
|
+
var g, k;
|
|
61
|
+
if (e.defaultPrevented || u[u.length - 1] !== c)
|
|
62
|
+
return;
|
|
63
|
+
const n = r.current;
|
|
64
|
+
if (!n) return;
|
|
65
|
+
if (e.key === "Escape") {
|
|
66
|
+
p.current.closeOnEscape && ((k = (g = p.current).onClose) == null || k.call(g));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (e.key !== "Tab") return;
|
|
70
|
+
const o = S(n);
|
|
71
|
+
if (o.length === 0) {
|
|
72
|
+
e.preventDefault(), n.focus();
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const s = o[0], f = o[o.length - 1], b = document.activeElement, E = !n.contains(b);
|
|
76
|
+
e.shiftKey ? (E || b === s || b === n) && (e.preventDefault(), f.focus()) : (E || b === f) && (e.preventDefault(), s.focus());
|
|
77
|
+
}
|
|
78
|
+
return document.addEventListener("keydown", a), () => {
|
|
79
|
+
document.removeEventListener("keydown", a);
|
|
80
|
+
const e = u.indexOf(c);
|
|
81
|
+
l.current = {
|
|
82
|
+
wasTop: e === u.length - 1,
|
|
83
|
+
below: u[e - 1]
|
|
84
|
+
}, u.splice(e, 1);
|
|
85
|
+
};
|
|
86
|
+
}, [r, h]);
|
|
87
|
+
}
|
|
88
|
+
export {
|
|
89
|
+
C as useModalFocus
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=use-modal-focus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-modal-focus.js","sources":["../../src/hooks/use-modal-focus.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport type { RefObject } from 'react';\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'summary',\n '[contenteditable=\"\"]',\n '[contenteditable=\"true\"]',\n '[tabindex]',\n].join(',');\n\nfunction isHidden(el: HTMLElement, root: HTMLElement): boolean {\n for (let node: HTMLElement | null = el; node; node = node.parentElement) {\n if (node.hidden || node.hasAttribute('inert')) return true;\n if (node.getAttribute('aria-hidden') === 'true') return true;\n const style = getComputedStyle(node);\n if (style.display === 'none') return true;\n if (node === el && style.visibility === 'hidden') return true;\n if (node === root) break;\n }\n return false;\n}\n\nfunction getFocusable(root: HTMLElement): HTMLElement[] {\n return Array.from(\n root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter(\n (el) => el.tabIndex >= 0 && !el.matches(':disabled') && !isHidden(el, root),\n );\n}\n\n/** Open modals in mount order; only the last one reacts to Tab and Escape. */\nconst modalStack: object[] = [];\n\nexport interface UseModalFocusOptions {\n /** Element to focus on mount. Falls back to the dialog root. */\n initialFocusRef?: RefObject<HTMLElement | null>;\n /** Close on Escape. Default true. */\n closeOnEscape?: boolean;\n onClose?: () => void;\n /**\n * When false (e.g. during an exit transition) Tab and Escape are no longer\n * handled and the modal leaves the stack, but focus is still restored on\n * unmount. Default true.\n */\n active?: boolean;\n}\n\n/**\n * Dialog focus and keyboard behavior for a modal panel: initial focus, Tab trap\n * (focusable elements computed at keypress), Escape (skipped when already\n * handled), and focus restore on unmount.\n *\n * Tab and Escape are handled by one document listener, so the trap still holds\n * when focus sits outside the dialog (e.g. after a backdrop click), and only\n * the topmost active modal responds. Events whose default was prevented (by an\n * inner widget or the host's `onKeyDown`) are ignored.\n */\nexport function useModalFocus(\n rootRef: RefObject<HTMLElement | null>,\n {\n initialFocusRef,\n closeOnEscape = true,\n onClose,\n active = true,\n }: UseModalFocusOptions,\n): void {\n const initialFocusRefRef = useRef(initialFocusRef);\n initialFocusRefRef.current = initialFocusRef;\n const latest = useRef({ closeOnEscape, onClose });\n latest.current = { closeOnEscape, onClose };\n const keyToken = useRef<object | null>(null);\n // Stack position recorded when the token leaves the stack (exit start).\n const exit = useRef<{ wasTop: boolean; below: object | undefined } | null>(\n null,\n );\n\n useEffect(() => {\n const previous = document.activeElement as HTMLElement | null;\n function shouldRestoreFocus(): boolean {\n const top = modalStack[modalStack.length - 1];\n const token = keyToken.current;\n if (token && modalStack.includes(token)) return top === token;\n if (!exit.current) return top === undefined;\n return exit.current.wasTop && top === exit.current.below;\n }\n const root = rootRef.current;\n const target = initialFocusRefRef.current?.current;\n if (target && root?.contains(target)) target.focus();\n if (!target || document.activeElement !== target) root?.focus();\n return () => {\n if (\n shouldRestoreFocus() &&\n previous &&\n previous.isConnected &&\n typeof previous.focus === 'function'\n ) {\n previous.focus();\n }\n };\n }, [rootRef]);\n\n useEffect(() => {\n if (!active) return;\n const token = {};\n modalStack.push(token);\n keyToken.current = token;\n exit.current = null;\n\n function handle(e: KeyboardEvent) {\n if (e.defaultPrevented || modalStack[modalStack.length - 1] !== token)\n return;\n const dialog = rootRef.current;\n if (!dialog) return;\n if (e.key === 'Escape') {\n if (latest.current.closeOnEscape) latest.current.onClose?.();\n return;\n }\n if (e.key !== 'Tab') return;\n const focusable = getFocusable(dialog);\n if (focusable.length === 0) {\n e.preventDefault();\n dialog.focus();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const current = document.activeElement;\n const outside = !dialog.contains(current);\n if (e.shiftKey) {\n if (outside || current === first || current === dialog) {\n e.preventDefault();\n last.focus();\n }\n } else if (outside || current === last) {\n e.preventDefault();\n first.focus();\n }\n }\n document.addEventListener('keydown', handle);\n return () => {\n document.removeEventListener('keydown', handle);\n const index = modalStack.indexOf(token);\n exit.current = {\n wasTop: index === modalStack.length - 1,\n below: modalStack[index - 1],\n };\n modalStack.splice(index, 1);\n };\n }, [rootRef, active]);\n}\n"],"names":["FOCUSABLE_SELECTOR","isHidden","el","root","node","style","getFocusable","modalStack","useModalFocus","rootRef","initialFocusRef","closeOnEscape","onClose","active","initialFocusRefRef","useRef","latest","keyToken","exit","useEffect","previous","shouldRestoreFocus","top","token","target","_a","handle","dialog","_b","focusable","first","last","current","outside","index"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),m=require("../utils/duration.cjs"),s=150;function f(e,i="--duration-quick"){const[a,n]=r.useState(e),[u,o]=r.useState(!1);return r.useEffect(()=>{if(e){n(!0);let t=0;const l=requestAnimationFrame(()=>{t=requestAnimationFrame(()=>o(!0))});return()=>{cancelAnimationFrame(l),t&&cancelAnimationFrame(t)}}o(!1);const c=window.setTimeout(()=>n(!1),m.readDurationMs(i,s));return()=>window.clearTimeout(c)},[e,i]),{mounted:a,visible:u}}exports.POPOVER_TRANSITION_MS=s;exports.usePopoverTransition=f;
|
|
2
2
|
//# sourceMappingURL=use-popover-transition.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-popover-transition.cjs","sources":["../../src/hooks/use-popover-transition.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n
|
|
1
|
+
{"version":3,"file":"use-popover-transition.cjs","sources":["../../src/hooks/use-popover-transition.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { readDurationMs } from '@/utils/duration';\n\n/** Fallback for `--duration-quick` when the token is not available. */\nexport const POPOVER_TRANSITION_MS = 150;\n\n/**\n * Keeps a surface mounted for the duration of its exit animation so the close\n * transition can play before React unmounts the node. The exit wait is read\n * from `durationToken` (default `--duration-quick`) so it always matches the\n * CSS transition. See CLAUDE.md: \"Animation: popover panel open/close\".\n */\nexport function usePopoverTransition(\n open: boolean,\n durationToken = '--duration-quick',\n) {\n const [mounted, setMounted] = useState(open);\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (open) {\n setMounted(true);\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setVisible(true));\n });\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }\n setVisible(false);\n const t = window.setTimeout(\n () => setMounted(false),\n readDurationMs(durationToken, POPOVER_TRANSITION_MS),\n );\n return () => window.clearTimeout(t);\n }, [open, durationToken]);\n\n return { mounted, visible };\n}\n"],"names":["POPOVER_TRANSITION_MS","usePopoverTransition","open","durationToken","mounted","setMounted","useState","visible","setVisible","useEffect","raf2","raf1","t","readDurationMs"],"mappings":"4IAIaA,EAAwB,IAQ9B,SAASC,EACdC,EACAC,EAAgB,mBAChB,CACA,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAASJ,CAAI,EACrC,CAACK,EAASC,CAAU,EAAIF,EAAAA,SAAS,EAAK,EAE5CG,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAIP,EAAM,CACRG,EAAW,EAAI,EACf,IAAIK,EAAO,EACX,MAAMC,EAAO,sBAAsB,IAAM,CACvCD,EAAO,sBAAsB,IAAMF,EAAW,EAAI,CAAC,CACrD,CAAC,EACD,MAAO,IAAM,CACX,qBAAqBG,CAAI,EACrBD,wBAA2BA,CAAI,CACrC,CACF,CACAF,EAAW,EAAK,EAChB,MAAMI,EAAI,OAAO,WACf,IAAMP,EAAW,EAAK,EACtBQ,EAAAA,eAAeV,EAAeH,CAAqB,CAAA,EAErD,MAAO,IAAM,OAAO,aAAaY,CAAC,CACpC,EAAG,CAACV,EAAMC,CAAa,CAAC,EAEjB,CAAE,QAAAC,EAAS,QAAAG,CAAA,CACpB"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
/** Fallback for `--duration-quick` when the token is not available. */
|
|
1
2
|
export declare const POPOVER_TRANSITION_MS = 150;
|
|
2
3
|
/**
|
|
3
|
-
* Keeps a
|
|
4
|
-
* transition can play before React unmounts the node.
|
|
5
|
-
*
|
|
4
|
+
* Keeps a surface mounted for the duration of its exit animation so the close
|
|
5
|
+
* transition can play before React unmounts the node. The exit wait is read
|
|
6
|
+
* from `durationToken` (default `--duration-quick`) so it always matches the
|
|
7
|
+
* CSS transition. See CLAUDE.md: "Animation: popover panel open/close".
|
|
6
8
|
*/
|
|
7
|
-
export declare function usePopoverTransition(open: boolean): {
|
|
9
|
+
export declare function usePopoverTransition(open: boolean, durationToken?: string): {
|
|
8
10
|
mounted: boolean;
|
|
9
11
|
visible: boolean;
|
|
10
12
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-popover-transition.d.ts","sourceRoot":"","sources":["../../src/hooks/use-popover-transition.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC
|
|
1
|
+
{"version":3,"file":"use-popover-transition.d.ts","sourceRoot":"","sources":["../../src/hooks/use-popover-transition.ts"],"names":[],"mappings":"AAGA,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,aAAa,SAAqB;;;EA0BnC"}
|
|
@@ -1,25 +1,29 @@
|
|
|
1
|
-
import { useState as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { useState as o, useEffect as c } from "react";
|
|
2
|
+
import { readDurationMs as f } from "../utils/duration.js";
|
|
3
|
+
const l = 150;
|
|
4
|
+
function w(e, r = "--duration-quick") {
|
|
5
|
+
const [a, i] = o(e), [s, n] = o(!1);
|
|
6
|
+
return c(() => {
|
|
6
7
|
if (e) {
|
|
7
|
-
|
|
8
|
+
i(!0);
|
|
8
9
|
let t = 0;
|
|
9
|
-
const
|
|
10
|
-
t = requestAnimationFrame(() =>
|
|
10
|
+
const m = requestAnimationFrame(() => {
|
|
11
|
+
t = requestAnimationFrame(() => n(!0));
|
|
11
12
|
});
|
|
12
13
|
return () => {
|
|
13
|
-
cancelAnimationFrame(
|
|
14
|
+
cancelAnimationFrame(m), t && cancelAnimationFrame(t);
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
n(!1);
|
|
18
|
+
const u = window.setTimeout(
|
|
19
|
+
() => i(!1),
|
|
20
|
+
f(r, l)
|
|
21
|
+
);
|
|
22
|
+
return () => window.clearTimeout(u);
|
|
23
|
+
}, [e, r]), { mounted: a, visible: s };
|
|
20
24
|
}
|
|
21
25
|
export {
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
l as POPOVER_TRANSITION_MS,
|
|
27
|
+
w as usePopoverTransition
|
|
24
28
|
};
|
|
25
29
|
//# sourceMappingURL=use-popover-transition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-popover-transition.js","sources":["../../src/hooks/use-popover-transition.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n
|
|
1
|
+
{"version":3,"file":"use-popover-transition.js","sources":["../../src/hooks/use-popover-transition.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { readDurationMs } from '@/utils/duration';\n\n/** Fallback for `--duration-quick` when the token is not available. */\nexport const POPOVER_TRANSITION_MS = 150;\n\n/**\n * Keeps a surface mounted for the duration of its exit animation so the close\n * transition can play before React unmounts the node. The exit wait is read\n * from `durationToken` (default `--duration-quick`) so it always matches the\n * CSS transition. See CLAUDE.md: \"Animation: popover panel open/close\".\n */\nexport function usePopoverTransition(\n open: boolean,\n durationToken = '--duration-quick',\n) {\n const [mounted, setMounted] = useState(open);\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (open) {\n setMounted(true);\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setVisible(true));\n });\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }\n setVisible(false);\n const t = window.setTimeout(\n () => setMounted(false),\n readDurationMs(durationToken, POPOVER_TRANSITION_MS),\n );\n return () => window.clearTimeout(t);\n }, [open, durationToken]);\n\n return { mounted, visible };\n}\n"],"names":["POPOVER_TRANSITION_MS","usePopoverTransition","open","durationToken","mounted","setMounted","useState","visible","setVisible","useEffect","raf2","raf1","t","readDurationMs"],"mappings":";;AAIO,MAAMA,IAAwB;AAQ9B,SAASC,EACdC,GACAC,IAAgB,oBAChB;AACA,QAAM,CAACC,GAASC,CAAU,IAAIC,EAASJ,CAAI,GACrC,CAACK,GAASC,CAAU,IAAIF,EAAS,EAAK;AAE5C,SAAAG,EAAU,MAAM;AACd,QAAIP,GAAM;AACR,MAAAG,EAAW,EAAI;AACf,UAAIK,IAAO;AACX,YAAMC,IAAO,sBAAsB,MAAM;AACvC,QAAAD,IAAO,sBAAsB,MAAMF,EAAW,EAAI,CAAC;AAAA,MACrD,CAAC;AACD,aAAO,MAAM;AACX,6BAAqBG,CAAI,GACrBD,0BAA2BA,CAAI;AAAA,MACrC;AAAA,IACF;AACA,IAAAF,EAAW,EAAK;AAChB,UAAMI,IAAI,OAAO;AAAA,MACf,MAAMP,EAAW,EAAK;AAAA,MACtBQ,EAAeV,GAAeH,CAAqB;AAAA,IAAA;AAErD,WAAO,MAAM,OAAO,aAAaY,CAAC;AAAA,EACpC,GAAG,CAACV,GAAMC,CAAa,CAAC,GAEjB,EAAE,SAAAC,GAAS,SAAAG,EAAA;AACpB;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -80,5 +80,6 @@ export * from './hooks/use-exit-animation';
|
|
|
80
80
|
export * from './hooks/use-outside-close';
|
|
81
81
|
export * from './hooks/use-popover-transition';
|
|
82
82
|
export { toKebab } from './utils/string';
|
|
83
|
+
export type { BuiltInButtonProps, DataAttributes } from './utils/props';
|
|
83
84
|
export { default as btnStyles } from './components/button/Button.module.scss';
|
|
84
85
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function u(n,t){if(typeof document>"u")return t;const o=getComputedStyle(document.documentElement).getPropertyValue(n).trim(),e=/^(\d*\.?\d+)(ms|s)$/.exec(o);if(!e)return t;const r=parseFloat(e[1]);return e[2]==="s"?r*1e3:r}exports.readDurationMs=u;
|
|
2
|
+
//# sourceMappingURL=duration.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.cjs","sources":["../../src/utils/duration.ts"],"sourcesContent":["/**\n * Reads a duration token (e.g. `--duration-quick`) from the document root and\n * returns milliseconds, so JS timers that wait on a CSS transition follow the\n * token instead of a hard-coded copy. Falls back when the token is missing\n * (SSR, tests, hosts that did not load the stylesheet).\n */\nexport function readDurationMs(token: string, fallbackMs: number): number {\n if (typeof document === 'undefined') return fallbackMs;\n const raw = getComputedStyle(document.documentElement)\n .getPropertyValue(token)\n .trim();\n const match = /^(\\d*\\.?\\d+)(ms|s)$/.exec(raw);\n if (!match) return fallbackMs;\n const value = parseFloat(match[1]);\n return match[2] === 's' ? value * 1000 : value;\n}\n"],"names":["readDurationMs","token","fallbackMs","raw","match","value"],"mappings":"gFAMO,SAASA,EAAeC,EAAeC,EAA4B,CACxE,GAAI,OAAO,SAAa,IAAa,OAAOA,EAC5C,MAAMC,EAAM,iBAAiB,SAAS,eAAe,EAClD,iBAAiBF,CAAK,EACtB,KAAA,EACGG,EAAQ,sBAAsB,KAAKD,CAAG,EAC5C,GAAI,CAACC,EAAO,OAAOF,EACnB,MAAMG,EAAQ,WAAWD,EAAM,CAAC,CAAC,EACjC,OAAOA,EAAM,CAAC,IAAM,IAAMC,EAAQ,IAAOA,CAC3C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads a duration token (e.g. `--duration-quick`) from the document root and
|
|
3
|
+
* returns milliseconds, so JS timers that wait on a CSS transition follow the
|
|
4
|
+
* token instead of a hard-coded copy. Falls back when the token is missing
|
|
5
|
+
* (SSR, tests, hosts that did not load the stylesheet).
|
|
6
|
+
*/
|
|
7
|
+
export declare function readDurationMs(token: string, fallbackMs: number): number;
|
|
8
|
+
//# sourceMappingURL=duration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/utils/duration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CASxE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
function u(r, t) {
|
|
2
|
+
if (typeof document > "u") return t;
|
|
3
|
+
const o = getComputedStyle(document.documentElement).getPropertyValue(r).trim(), e = /^(\d*\.?\d+)(ms|s)$/.exec(o);
|
|
4
|
+
if (!e) return t;
|
|
5
|
+
const n = parseFloat(e[1]);
|
|
6
|
+
return e[2] === "s" ? n * 1e3 : n;
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
u as readDurationMs
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=duration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.js","sources":["../../src/utils/duration.ts"],"sourcesContent":["/**\n * Reads a duration token (e.g. `--duration-quick`) from the document root and\n * returns milliseconds, so JS timers that wait on a CSS transition follow the\n * token instead of a hard-coded copy. Falls back when the token is missing\n * (SSR, tests, hosts that did not load the stylesheet).\n */\nexport function readDurationMs(token: string, fallbackMs: number): number {\n if (typeof document === 'undefined') return fallbackMs;\n const raw = getComputedStyle(document.documentElement)\n .getPropertyValue(token)\n .trim();\n const match = /^(\\d*\\.?\\d+)(ms|s)$/.exec(raw);\n if (!match) return fallbackMs;\n const value = parseFloat(match[1]);\n return match[2] === 's' ? value * 1000 : value;\n}\n"],"names":["readDurationMs","token","fallbackMs","raw","match","value"],"mappings":"AAMO,SAASA,EAAeC,GAAeC,GAA4B;AACxE,MAAI,OAAO,WAAa,IAAa,QAAOA;AAC5C,QAAMC,IAAM,iBAAiB,SAAS,eAAe,EAClD,iBAAiBF,CAAK,EACtB,KAAA,GACGG,IAAQ,sBAAsB,KAAKD,CAAG;AAC5C,MAAI,CAACC,EAAO,QAAOF;AACnB,QAAMG,IAAQ,WAAWD,EAAM,CAAC,CAAC;AACjC,SAAOA,EAAM,CAAC,MAAM,MAAMC,IAAQ,MAAOA;AAC3C;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"props.cjs","sources":["../../src/utils/props.ts"],"sourcesContent":["import type { ButtonHTMLAttributes } from 'react';\n\n/** `data-*` attributes, so object literals like `{ 'data-testid': 'x' }` type-check. */\nexport type DataAttributes = {\n [key: `data-${string}`]: string | number | boolean | undefined;\n};\n\n/**\n * Extra attributes for a component's built-in button (close, dismiss, back,\n * clear). The component's own `onClick`, `aria-label`, and variant props take\n * precedence; `className` is merged.\n */\nexport type BuiltInButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'children' | 'style'\n> &\n DataAttributes;\n\nexport function mergeClassNames(\n ...names: Array<string | false | null | undefined>\n): string {\n return names.filter(Boolean).join(' ');\n}\n"],"names":["mergeClassNames","names"],"mappings":"gFAkBO,SAASA,KACXC,EACK,CACR,OAAOA,EAAM,OAAO,OAAO,EAAE,KAAK,GAAG,CACvC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ButtonHTMLAttributes } from 'react';
|
|
2
|
+
/** `data-*` attributes, so object literals like `{ 'data-testid': 'x' }` type-check. */
|
|
3
|
+
export type DataAttributes = {
|
|
4
|
+
[key: `data-${string}`]: string | number | boolean | undefined;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Extra attributes for a component's built-in button (close, dismiss, back,
|
|
8
|
+
* clear). The component's own `onClick`, `aria-label`, and variant props take
|
|
9
|
+
* precedence; `className` is merged.
|
|
10
|
+
*/
|
|
11
|
+
export type BuiltInButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'style'> & DataAttributes;
|
|
12
|
+
export declare function mergeClassNames(...names: Array<string | false | null | undefined>): string;
|
|
13
|
+
//# sourceMappingURL=props.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/utils/props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAElD,wFAAwF;AACxF,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,GAAG,EAAE,QAAQ,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CAChE,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,UAAU,GAAG,OAAO,CACrB,GACC,cAAc,CAAC;AAEjB,wBAAgB,eAAe,CAC7B,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GACjD,MAAM,CAER"}
|