@mattermost/compass-ui 0.1.0-alpha.12 → 0.1.0-alpha.13
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 +64 -60
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
- 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.d.ts +17 -3
- package/dist/components/modal/Modal.d.ts.map +1 -1
- package/dist/components/modal/Modal.js +38 -26
- package/dist/components/modal/Modal.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-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 +12 -12
- 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 +14 -14
- 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 +11 -3
- package/dist/components/tabs/Tabs.d.ts.map +1 -1
- package/dist/components/tabs/Tabs.js +56 -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 +9 -9
- 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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- 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 +1 -6
- package/dist/node_modules/simplebar-react/dist/simplebar.min.css +0 -1
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { jsxs as n, jsx as o, Fragment as
|
|
2
|
-
import { useState as
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
1
|
+
import { jsxs as n, jsx as o, Fragment as ae } from "react/jsx-runtime";
|
|
2
|
+
import { useState as c, useRef as _, useId as te, useEffect as ce } from "react";
|
|
3
|
+
import __pe from "@mattermost/compass-icons/components/close.js";const pe=__pe&&__pe.default?__pe.default:__pe;
|
|
4
|
+
import me from "../button/Button.js";
|
|
5
|
+
import de from "../emoji/Emoji.js";
|
|
6
6
|
import j from "../emoji-button/EmojiButton.js";
|
|
7
|
-
import
|
|
7
|
+
import ue from "../empty-state/EmptyState.js";
|
|
8
8
|
import M from "../icon/Icon.js";
|
|
9
9
|
import x from "../icon-button/IconButton.js";
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
10
|
+
import L from "../menu-group-heading/MenuGroupHeading.js";
|
|
11
|
+
import ve from "../scrollbar/Scrollbar.js";
|
|
12
|
+
import he from "../search-input/SearchInput.js";
|
|
13
|
+
import fe from "../../illustrations/search.svg.js";
|
|
14
14
|
import i from "./EmojiPopover.module.scss.js";
|
|
15
|
-
const
|
|
15
|
+
const _e = (s) => s === 0 ? "Default skin tone" : `Skin tone ${s}`, O = ["🖐️", "🖐🏻", "🖐🏼", "🖐🏽", "🖐🏾", "🖐🏿"], je = [
|
|
16
16
|
"",
|
|
17
17
|
"🏻",
|
|
18
18
|
"🏼",
|
|
19
19
|
"🏽",
|
|
20
20
|
"🏾",
|
|
21
21
|
"🏿"
|
|
22
|
-
],
|
|
22
|
+
], ke = /* @__PURE__ */ new Set([
|
|
23
23
|
"👋",
|
|
24
24
|
"🤚",
|
|
25
25
|
"✋",
|
|
@@ -61,47 +61,57 @@ const P = ["🖐️", "🖐🏻", "🖐🏼", "🖐🏽", "🖐🏾", "🖐🏿"
|
|
|
61
61
|
"🦻",
|
|
62
62
|
"👃"
|
|
63
63
|
]);
|
|
64
|
-
function
|
|
65
|
-
return !
|
|
64
|
+
function ge(s, l) {
|
|
65
|
+
return !l || !ke.has(s) ? s : s.replace("️", "") + l;
|
|
66
66
|
}
|
|
67
|
-
function
|
|
68
|
-
className:
|
|
69
|
-
categories:
|
|
67
|
+
function Oe({
|
|
68
|
+
className: s = "",
|
|
69
|
+
categories: l,
|
|
70
70
|
shortcodes: m = {},
|
|
71
|
-
defaultQuery:
|
|
71
|
+
defaultQuery: P = "",
|
|
72
72
|
autoFocus: k = !1,
|
|
73
73
|
onEmojiSelect: d,
|
|
74
74
|
onSearch: u,
|
|
75
75
|
onCustomEmojiClick: g,
|
|
76
|
-
customEmojiLabel:
|
|
76
|
+
customEmojiLabel: D = "Custom emoji",
|
|
77
|
+
searchPlaceholder: F = "Search emojis",
|
|
78
|
+
searchClearLabel: H,
|
|
79
|
+
searchResultsLabel: $ = "Search Results",
|
|
80
|
+
emptyTitle: A = "No emojis found",
|
|
81
|
+
emptyDescription: K = "Try a different search term.",
|
|
82
|
+
previewHintLabel: Q = "Select an Emoji",
|
|
83
|
+
skinToneButtonLabel: q = "Select skin tone",
|
|
84
|
+
skinToneLabel: G = "Skin tone",
|
|
85
|
+
formatSkinToneLabel: V = _e,
|
|
86
|
+
closeSkinTonePickerLabel: J = "Close skin tone picker"
|
|
77
87
|
}) {
|
|
78
88
|
var R;
|
|
79
|
-
const [
|
|
80
|
-
((R =
|
|
81
|
-
), [N, y] =
|
|
82
|
-
|
|
89
|
+
const [a, U] = c(P), [W, X] = c(
|
|
90
|
+
((R = l[0]) == null ? void 0 : R.id) ?? ""
|
|
91
|
+
), [N, y] = c(null), [Y, I] = c(null), [v, Z] = c(0), [t, h] = c(!1), S = _(null), b = `${te()}-skin-tone-picker`, ee = je[v], C = _(null), w = _({});
|
|
92
|
+
ce(() => {
|
|
83
93
|
var e;
|
|
84
94
|
k && ((e = S.current) == null || e.focus());
|
|
85
95
|
}, [k]);
|
|
86
96
|
const B = (e) => {
|
|
87
|
-
|
|
88
|
-
},
|
|
89
|
-
function
|
|
97
|
+
U(e), u == null || u(e);
|
|
98
|
+
}, oe = [...new Set(l.flatMap((e) => e.emojis))], T = a ? oe.filter((e) => (m[e] ?? "").includes(a.toLowerCase()) || e === a) : [], f = a ? T.length > 0 ? "search-results" : "empty" : "default";
|
|
99
|
+
function ie(e) {
|
|
90
100
|
return m[e] ? `:${m[e]}:` : e;
|
|
91
101
|
}
|
|
92
|
-
function
|
|
93
|
-
const r = w.current[e], p =
|
|
102
|
+
function re(e) {
|
|
103
|
+
const r = w.current[e], p = C.current;
|
|
94
104
|
if (!r || !p) return;
|
|
95
|
-
const
|
|
96
|
-
p.scrollTo({ top:
|
|
105
|
+
const le = r.getBoundingClientRect().top - p.getBoundingClientRect().top + p.scrollTop;
|
|
106
|
+
p.scrollTo({ top: le, behavior: "smooth" });
|
|
97
107
|
}
|
|
98
|
-
const
|
|
108
|
+
const ne = [i["emoji-popover"], s].filter(Boolean).join(" "), se = {
|
|
99
109
|
"aria-label": "",
|
|
100
110
|
width: "80px",
|
|
101
111
|
height: "60px",
|
|
102
|
-
children: /* @__PURE__ */ o(
|
|
112
|
+
children: /* @__PURE__ */ o(fe, {})
|
|
103
113
|
}, E = (e) => {
|
|
104
|
-
const r =
|
|
114
|
+
const r = ge(e, ee);
|
|
105
115
|
return /* @__PURE__ */ o(
|
|
106
116
|
j,
|
|
107
117
|
{
|
|
@@ -120,16 +130,16 @@ function Ce({
|
|
|
120
130
|
e
|
|
121
131
|
);
|
|
122
132
|
}, z = () => f === "empty" ? /* @__PURE__ */ o(
|
|
123
|
-
|
|
133
|
+
ue,
|
|
124
134
|
{
|
|
125
|
-
illustration:
|
|
126
|
-
title:
|
|
127
|
-
description:
|
|
135
|
+
illustration: se,
|
|
136
|
+
title: A,
|
|
137
|
+
description: K
|
|
128
138
|
}
|
|
129
139
|
) : f === "search-results" ? /* @__PURE__ */ o("div", { className: i["emoji-popover__emoji-list"], children: /* @__PURE__ */ n("div", { className: i["emoji-popover__group"], children: [
|
|
130
|
-
/* @__PURE__ */ o(
|
|
140
|
+
/* @__PURE__ */ o(L, { label: $ }),
|
|
131
141
|
/* @__PURE__ */ o("div", { className: i["emoji-popover__emoji-row"], children: T.map(E) })
|
|
132
|
-
] }) }) : /* @__PURE__ */ o("div", { className: i["emoji-popover__emoji-list"], children:
|
|
142
|
+
] }) }) : /* @__PURE__ */ o("div", { className: i["emoji-popover__emoji-list"], children: l.map((e) => /* @__PURE__ */ n(
|
|
133
143
|
"div",
|
|
134
144
|
{
|
|
135
145
|
ref: (r) => {
|
|
@@ -137,7 +147,7 @@ function Ce({
|
|
|
137
147
|
},
|
|
138
148
|
className: i["emoji-popover__group"],
|
|
139
149
|
children: [
|
|
140
|
-
/* @__PURE__ */ o(
|
|
150
|
+
/* @__PURE__ */ o(L, { label: e.label }),
|
|
141
151
|
/* @__PURE__ */ o(
|
|
142
152
|
"div",
|
|
143
153
|
{
|
|
@@ -152,7 +162,7 @@ function Ce({
|
|
|
152
162
|
},
|
|
153
163
|
e.id
|
|
154
164
|
)) });
|
|
155
|
-
return /* @__PURE__ */ n("div", { className:
|
|
165
|
+
return /* @__PURE__ */ n("div", { className: ne, children: [
|
|
156
166
|
/* @__PURE__ */ n("div", { className: i["emoji-popover__header"], children: [
|
|
157
167
|
/* @__PURE__ */ n("div", { className: i["emoji-popover__header-panels"], children: [
|
|
158
168
|
/* @__PURE__ */ o(
|
|
@@ -160,31 +170,32 @@ function Ce({
|
|
|
160
170
|
{
|
|
161
171
|
className: [
|
|
162
172
|
i["emoji-popover__header-main"],
|
|
163
|
-
|
|
173
|
+
t ? i["emoji-popover__header-main--hidden"] : ""
|
|
164
174
|
].filter(Boolean).join(" "),
|
|
165
|
-
inert:
|
|
166
|
-
"aria-hidden":
|
|
175
|
+
inert: t,
|
|
176
|
+
"aria-hidden": t || void 0,
|
|
167
177
|
children: /* @__PURE__ */ n("div", { className: i["emoji-popover__search-row"], children: [
|
|
168
178
|
/* @__PURE__ */ o(
|
|
169
|
-
|
|
179
|
+
he,
|
|
170
180
|
{
|
|
171
181
|
ref: S,
|
|
172
|
-
placeholder:
|
|
182
|
+
placeholder: F,
|
|
173
183
|
size: "small",
|
|
174
184
|
className: i["emoji-popover__search-input"],
|
|
175
|
-
value:
|
|
185
|
+
value: a,
|
|
176
186
|
onChange: (e) => B(e.target.value),
|
|
177
|
-
onClear: () => B("")
|
|
187
|
+
onClear: () => B(""),
|
|
188
|
+
clearLabel: H
|
|
178
189
|
}
|
|
179
190
|
),
|
|
180
|
-
!
|
|
191
|
+
!a && /* @__PURE__ */ o(
|
|
181
192
|
j,
|
|
182
193
|
{
|
|
183
|
-
emoji:
|
|
194
|
+
emoji: O[v],
|
|
184
195
|
size: "small",
|
|
185
|
-
"aria-label":
|
|
186
|
-
"aria-expanded":
|
|
187
|
-
"aria-controls":
|
|
196
|
+
"aria-label": q,
|
|
197
|
+
"aria-expanded": t,
|
|
198
|
+
"aria-controls": b,
|
|
188
199
|
onClick: () => h(!0)
|
|
189
200
|
}
|
|
190
201
|
)
|
|
@@ -194,24 +205,24 @@ function Ce({
|
|
|
194
205
|
/* @__PURE__ */ n(
|
|
195
206
|
"div",
|
|
196
207
|
{
|
|
197
|
-
id:
|
|
208
|
+
id: b,
|
|
198
209
|
className: [
|
|
199
210
|
i["emoji-popover__skin-tone-picker"],
|
|
200
|
-
|
|
211
|
+
t ? i["emoji-popover__skin-tone-picker--visible"] : ""
|
|
201
212
|
].filter(Boolean).join(" "),
|
|
202
|
-
inert: !
|
|
203
|
-
"aria-hidden": !
|
|
213
|
+
inert: !t,
|
|
214
|
+
"aria-hidden": !t || void 0,
|
|
204
215
|
children: [
|
|
205
|
-
/* @__PURE__ */ o("span", { className: i["emoji-popover__skin-tone-label"], children:
|
|
206
|
-
/* @__PURE__ */ o("div", { className: i["emoji-popover__skin-tone-options"], children:
|
|
216
|
+
/* @__PURE__ */ o("span", { className: i["emoji-popover__skin-tone-label"], children: G }),
|
|
217
|
+
/* @__PURE__ */ o("div", { className: i["emoji-popover__skin-tone-options"], children: O.map((e, r) => /* @__PURE__ */ o(
|
|
207
218
|
j,
|
|
208
219
|
{
|
|
209
220
|
emoji: e,
|
|
210
221
|
size: "small",
|
|
211
222
|
toggled: v === r,
|
|
212
|
-
"aria-label": r
|
|
223
|
+
"aria-label": V(r),
|
|
213
224
|
onClick: () => {
|
|
214
|
-
|
|
225
|
+
Z(r), h(!1);
|
|
215
226
|
}
|
|
216
227
|
},
|
|
217
228
|
r
|
|
@@ -221,8 +232,8 @@ function Ce({
|
|
|
221
232
|
{
|
|
222
233
|
size: "small",
|
|
223
234
|
padding: "compact",
|
|
224
|
-
icon: /* @__PURE__ */ o(M, { glyph: /* @__PURE__ */ o(
|
|
225
|
-
"aria-label":
|
|
235
|
+
icon: /* @__PURE__ */ o(M, { glyph: /* @__PURE__ */ o(pe, {}), size: "16" }),
|
|
236
|
+
"aria-label": J,
|
|
226
237
|
onClick: () => h(!1)
|
|
227
238
|
}
|
|
228
239
|
)
|
|
@@ -230,32 +241,32 @@ function Ce({
|
|
|
230
241
|
}
|
|
231
242
|
)
|
|
232
243
|
] }),
|
|
233
|
-
!
|
|
244
|
+
!a && /* @__PURE__ */ o("div", { className: i["emoji-popover__categories"], children: l.map((e) => /* @__PURE__ */ o(
|
|
234
245
|
x,
|
|
235
246
|
{
|
|
236
247
|
size: "small",
|
|
237
248
|
padding: "compact",
|
|
238
249
|
icon: /* @__PURE__ */ o(M, { glyph: /* @__PURE__ */ o(e.icon, {}), size: "16" }),
|
|
239
250
|
"aria-label": e.label,
|
|
240
|
-
active:
|
|
251
|
+
active: W === e.id,
|
|
241
252
|
onClick: () => {
|
|
242
|
-
|
|
253
|
+
X(e.id), re(e.id);
|
|
243
254
|
}
|
|
244
255
|
},
|
|
245
256
|
e.id
|
|
246
257
|
)) })
|
|
247
258
|
] }),
|
|
248
|
-
/* @__PURE__ */ o("div", { className: i["emoji-popover__scroll-view"], children: f === "empty" ? z() : /* @__PURE__ */ o(
|
|
259
|
+
/* @__PURE__ */ o("div", { className: i["emoji-popover__scroll-view"], children: f === "empty" ? z() : /* @__PURE__ */ o(ve, { alwaysVisible: !0, ref: C, children: z() }) }),
|
|
249
260
|
/* @__PURE__ */ n("div", { className: i["emoji-popover__footer"], children: [
|
|
250
|
-
/* @__PURE__ */ o("div", { className: i["emoji-popover__footer-preview"], children: N ? /* @__PURE__ */ n(
|
|
251
|
-
/* @__PURE__ */ o(
|
|
252
|
-
/* @__PURE__ */ o("span", { className: i["emoji-popover__footer-shortcode"], children:
|
|
253
|
-
] }) : /* @__PURE__ */ o("span", { className: i["emoji-popover__footer-hint"], children:
|
|
254
|
-
g && /* @__PURE__ */ o(
|
|
261
|
+
/* @__PURE__ */ o("div", { className: i["emoji-popover__footer-preview"], children: N ? /* @__PURE__ */ n(ae, { children: [
|
|
262
|
+
/* @__PURE__ */ o(de, { emoji: N, size: "32" }),
|
|
263
|
+
/* @__PURE__ */ o("span", { className: i["emoji-popover__footer-shortcode"], children: ie(Y ?? "") })
|
|
264
|
+
] }) : /* @__PURE__ */ o("span", { className: i["emoji-popover__footer-hint"], children: Q }) }),
|
|
265
|
+
g && /* @__PURE__ */ o(me, { emphasis: "tertiary", size: "small", onClick: g, children: D })
|
|
255
266
|
] })
|
|
256
267
|
] });
|
|
257
268
|
}
|
|
258
269
|
export {
|
|
259
|
-
|
|
270
|
+
Oe as default
|
|
260
271
|
};
|
|
261
272
|
//# sourceMappingURL=EmojiPopover.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiPopover.js","sources":["../../../src/components/emoji-popover/EmojiPopover.tsx"],"sourcesContent":["import { useEffect, useId, useRef, useState } from 'react';\nimport type { ComponentType } from 'react';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport Button from '@/components/button/Button';\nimport Emoji from '@/components/emoji/Emoji';\nimport EmojiButton from '@/components/emoji-button/EmojiButton';\nimport EmptyState from '@/components/empty-state/EmptyState';\nimport Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport MenuGroupHeading from '@/components/menu-group-heading/MenuGroupHeading';\nimport Scrollbar from '@/components/scrollbar/Scrollbar';\nimport SearchInput from '@/components/search-input/SearchInput';\nimport SearchIllustration from '@/illustrations/search';\nimport styles from './EmojiPopover.module.scss';\n\nexport interface EmojiCategory {\n id: string;\n label: string;\n /** Icon component rendered in the category navigation bar. */\n icon: ComponentType;\n emojis: string[];\n /** When false the row does not wrap (e.g. Recently Used). @default true */\n wrap?: boolean;\n}\n\nexport interface EmojiPopoverProps {\n className?: string;\n /** Emoji categories to display, supplied by the host. */\n categories: EmojiCategory[];\n /** Map of base emoji → shortcode name used for footer display. */\n shortcodes?: Record<string, string>;\n /** Pre-seeds the search field. Useful for static specimen demos. */\n defaultQuery?: string;\n /** Focus the search field on mount. */\n autoFocus?: boolean;\n /** Called with the selected emoji character. */\n onEmojiSelect?: (emoji: string) => void;\n /**\n * Called on every query change. Use this to trigger async custom-emoji\n * searches on the host side; local filtering over `categories` always runs.\n */\n onSearch?: (query: string) => void;\n /** Shows a tertiary button in the footer right. Omit to hide the button. */\n onCustomEmojiClick?: () => void;\n /** Label for the custom emoji button. @default 'Custom emoji' */\n customEmojiLabel?: string;\n}\n\nconst SKIN_TONES = ['🖐️', '🖐🏻', '🖐🏼', '🖐🏽', '🖐🏾', '🖐🏿'];\nconst SKIN_TONE_MODIFIERS = [\n '',\n '\\u{1F3FB}',\n '\\u{1F3FC}',\n '\\u{1F3FD}',\n '\\u{1F3FE}',\n '\\u{1F3FF}',\n];\n\nconst MODIFIER_BASES = new Set([\n '👋',\n '🤚',\n '✋',\n '🖐️',\n '🖖',\n '👌',\n '🤌',\n '🤏',\n '✌️',\n '🤞',\n '🫰',\n '🤟',\n '🤘',\n '🤙',\n '👈',\n '👉',\n '👆',\n '👇',\n '☝️',\n '🫵',\n '👍',\n '👎',\n '✊',\n '👊',\n '🤛',\n '🤜',\n '👏',\n '🙌',\n '🫶',\n '👐',\n '🤲',\n '🙏',\n '💅',\n '🤳',\n '💪',\n '🦵',\n '🦶',\n '👂',\n '🦻',\n '👃',\n]);\n\nfunction applyModifier(emoji: string, modifier: string): string {\n if (!modifier || !MODIFIER_BASES.has(emoji)) return emoji;\n // Strip VS16 before the modifier so composed sequences render correctly\n return emoji.replace('️', '') + modifier;\n}\n\nexport default function EmojiPopover({\n className = '',\n categories,\n shortcodes = {},\n defaultQuery = '',\n autoFocus = false,\n onEmojiSelect,\n onSearch,\n onCustomEmojiClick,\n customEmojiLabel = 'Custom emoji',\n}: EmojiPopoverProps) {\n const [query, setQuery] = useState(defaultQuery);\n const [activeCategoryId, setActiveCategoryId] = useState(\n categories[0]?.id ?? '',\n );\n const [hoveredEmoji, setHoveredEmoji] = useState<string | null>(null);\n const [hoveredBase, setHoveredBase] = useState<string | null>(null);\n const [skinToneIndex, setSkinToneIndex] = useState(0);\n const [showSkinTonePicker, setShowSkinTonePicker] = useState(false);\n\n const searchRef = useRef<HTMLInputElement>(null);\n const generatedId = useId();\n const skinTonePickerId = `${generatedId}-skin-tone-picker`;\n const skinToneModifier = SKIN_TONE_MODIFIERS[skinToneIndex];\n const scrollRef = useRef<HTMLDivElement>(null);\n const groupRefs = useRef<Record<string, HTMLDivElement | null>>({});\n\n useEffect(() => {\n if (autoFocus) searchRef.current?.focus();\n }, [autoFocus]);\n\n const handleQueryChange = (next: string) => {\n setQuery(next);\n onSearch?.(next);\n };\n\n const allEmojis = [...new Set(categories.flatMap((c) => c.emojis))];\n const searchResults = query\n ? allEmojis.filter((emoji) => {\n const name = shortcodes[emoji] ?? '';\n return name.includes(query.toLowerCase()) || emoji === query;\n })\n : [];\n\n const computedState = query\n ? searchResults.length > 0\n ? 'search-results'\n : 'empty'\n : 'default';\n\n function getShortcode(emoji: string): string {\n return shortcodes[emoji] ? `:${shortcodes[emoji]}:` : emoji;\n }\n\n function scrollToCategory(id: string) {\n const group = groupRefs.current[id];\n const scroller = scrollRef.current;\n if (!group || !scroller) return;\n const top =\n group.getBoundingClientRect().top -\n scroller.getBoundingClientRect().top +\n scroller.scrollTop;\n scroller.scrollTo({ top, behavior: 'smooth' });\n }\n\n const rootClass = [styles['emoji-popover'], className]\n .filter(Boolean)\n .join(' ');\n\n const emptyIllustration = {\n 'aria-label': '' as const,\n width: '80px',\n height: '60px',\n children: <SearchIllustration />,\n };\n\n const renderEmoji = (emoji: string) => {\n const displayed = applyModifier(emoji, skinToneModifier);\n return (\n <EmojiButton\n key={emoji}\n emoji={displayed}\n size=\"medium\"\n padding=\"compact\"\n aria-label={displayed}\n onMouseEnter={() => {\n setHoveredEmoji(displayed);\n setHoveredBase(emoji);\n }}\n onMouseLeave={() => {\n setHoveredEmoji(null);\n setHoveredBase(null);\n }}\n onClick={() => onEmojiSelect?.(displayed)}\n />\n );\n };\n\n const renderBody = () => {\n if (computedState === 'empty') {\n return (\n <EmptyState\n illustration={emptyIllustration}\n title=\"No emojis found\"\n description=\"Try a different search term.\"\n />\n );\n }\n\n if (computedState === 'search-results') {\n return (\n <div className={styles['emoji-popover__emoji-list']}>\n <div className={styles['emoji-popover__group']}>\n <MenuGroupHeading label=\"Search Results\" />\n <div className={styles['emoji-popover__emoji-row']}>\n {searchResults.map(renderEmoji)}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={styles['emoji-popover__emoji-list']}>\n {categories.map((cat) => (\n <div\n key={cat.id}\n ref={(el) => {\n groupRefs.current[cat.id] = el;\n }}\n className={styles['emoji-popover__group']}\n >\n <MenuGroupHeading label={cat.label} />\n <div\n className={[\n styles['emoji-popover__emoji-row'],\n cat.wrap === false\n ? styles['emoji-popover__emoji-row--nowrap']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {cat.emojis.map(renderEmoji)}\n </div>\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <div className={rootClass}>\n <div className={styles['emoji-popover__header']}>\n <div className={styles['emoji-popover__header-panels']}>\n <div\n className={[\n styles['emoji-popover__header-main'],\n showSkinTonePicker\n ? styles['emoji-popover__header-main--hidden']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n inert={showSkinTonePicker}\n aria-hidden={showSkinTonePicker || undefined}\n >\n <div className={styles['emoji-popover__search-row']}>\n <SearchInput\n ref={searchRef}\n placeholder=\"Search emojis\"\n size=\"small\"\n className={styles['emoji-popover__search-input']}\n value={query}\n onChange={(e) => handleQueryChange(e.target.value)}\n onClear={() => handleQueryChange('')}\n />\n {!query && (\n <EmojiButton\n emoji={SKIN_TONES[skinToneIndex]}\n size=\"small\"\n aria-label=\"Select skin tone\"\n aria-expanded={showSkinTonePicker}\n aria-controls={skinTonePickerId}\n onClick={() => setShowSkinTonePicker(true)}\n />\n )}\n </div>\n </div>\n\n <div\n id={skinTonePickerId}\n className={[\n styles['emoji-popover__skin-tone-picker'],\n showSkinTonePicker\n ? styles['emoji-popover__skin-tone-picker--visible']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n inert={!showSkinTonePicker}\n aria-hidden={!showSkinTonePicker || undefined}\n >\n <span className={styles['emoji-popover__skin-tone-label']}>\n Skin tone\n </span>\n <div className={styles['emoji-popover__skin-tone-options']}>\n {SKIN_TONES.map((emoji, i) => (\n <EmojiButton\n key={i}\n emoji={emoji}\n size=\"small\"\n toggled={skinToneIndex === i}\n aria-label={i === 0 ? 'Default skin tone' : `Skin tone ${i}`}\n onClick={() => {\n setSkinToneIndex(i);\n setShowSkinTonePicker(false);\n }}\n />\n ))}\n </div>\n <IconButton\n size=\"small\"\n padding=\"compact\"\n icon={<Icon glyph={<CloseIcon />} size=\"16\" />}\n aria-label=\"Close skin tone picker\"\n onClick={() => setShowSkinTonePicker(false)}\n />\n </div>\n </div>\n\n {!query && (\n <div className={styles['emoji-popover__categories']}>\n {categories.map((cat) => (\n <IconButton\n key={cat.id}\n size=\"small\"\n padding=\"compact\"\n icon={<Icon glyph={<cat.icon />} size=\"16\" />}\n aria-label={cat.label}\n active={activeCategoryId === cat.id}\n onClick={() => {\n setActiveCategoryId(cat.id);\n scrollToCategory(cat.id);\n }}\n />\n ))}\n </div>\n )}\n </div>\n\n <div className={styles['emoji-popover__scroll-view']}>\n {computedState === 'empty' ? (\n renderBody()\n ) : (\n <Scrollbar alwaysVisible ref={scrollRef}>\n {renderBody()}\n </Scrollbar>\n )}\n </div>\n\n <div className={styles['emoji-popover__footer']}>\n <div className={styles['emoji-popover__footer-preview']}>\n {hoveredEmoji ? (\n <>\n <Emoji emoji={hoveredEmoji} size=\"32\" />\n <span className={styles['emoji-popover__footer-shortcode']}>\n {getShortcode(hoveredBase ?? '')}\n </span>\n </>\n ) : (\n <span className={styles['emoji-popover__footer-hint']}>\n Select an Emoji\n </span>\n )}\n </div>\n {onCustomEmojiClick && (\n <Button emphasis=\"tertiary\" size=\"small\" onClick={onCustomEmojiClick}>\n {customEmojiLabel}\n </Button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["SKIN_TONES","SKIN_TONE_MODIFIERS","MODIFIER_BASES","applyModifier","emoji","modifier","EmojiPopover","className","categories","shortcodes","defaultQuery","autoFocus","onEmojiSelect","onSearch","onCustomEmojiClick","customEmojiLabel","query","setQuery","useState","activeCategoryId","setActiveCategoryId","_a","hoveredEmoji","setHoveredEmoji","hoveredBase","setHoveredBase","skinToneIndex","setSkinToneIndex","showSkinTonePicker","setShowSkinTonePicker","searchRef","useRef","skinTonePickerId","useId","skinToneModifier","scrollRef","groupRefs","useEffect","handleQueryChange","next","allEmojis","c","searchResults","computedState","getShortcode","scrollToCategory","id","group","scroller","top","rootClass","styles","emptyIllustration","SearchIllustration","renderEmoji","displayed","jsx","EmojiButton","renderBody","EmptyState","jsxs","MenuGroupHeading","cat","el","SearchInput","i","IconButton","Icon","CloseIcon","Scrollbar","Fragment","Emoji","Button"],"mappings":";;;;;;;;;;;;;;AAgDA,MAAMA,IAAa,CAAC,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,MAAM,GAC3DC,KAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,yBAAqB,IAAI;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAASC,GAAcC,GAAeC,GAA0B;AAC9D,SAAI,CAACA,KAAY,CAACH,GAAe,IAAIE,CAAK,IAAUA,IAE7CA,EAAM,QAAQ,KAAK,EAAE,IAAIC;AAClC;AAEA,SAAwBC,GAAa;AAAA,EACnC,WAAAC,IAAY;AAAA,EACZ,YAAAC;AAAA,EACA,YAAAC,IAAa,CAAA;AAAA,EACb,cAAAC,IAAe;AAAA,EACf,WAAAC,IAAY;AAAA,EACZ,eAAAC;AAAA,EACA,UAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,kBAAAC,IAAmB;AACrB,GAAsB;;AACpB,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAASR,CAAY,GACzC,CAACS,GAAkBC,CAAmB,IAAIF;AAAA,MAC9CG,IAAAb,EAAW,CAAC,MAAZ,gBAAAa,EAAe,OAAM;AAAA,EAAA,GAEjB,CAACC,GAAcC,CAAe,IAAIL,EAAwB,IAAI,GAC9D,CAACM,GAAaC,CAAc,IAAIP,EAAwB,IAAI,GAC5D,CAACQ,GAAeC,CAAgB,IAAIT,EAAS,CAAC,GAC9C,CAACU,GAAoBC,CAAqB,IAAIX,EAAS,EAAK,GAE5DY,IAAYC,EAAyB,IAAI,GAEzCC,IAAmB,GADLC,EAAA,CACmB,qBACjCC,IAAmBjC,GAAoByB,CAAa,GACpDS,IAAYJ,EAAuB,IAAI,GACvCK,IAAYL,EAA8C,EAAE;AAElE,EAAAM,EAAU,MAAM;;AACd,IAAI1B,OAAWU,IAAAS,EAAU,YAAV,QAAAT,EAAmB;AAAA,EACpC,GAAG,CAACV,CAAS,CAAC;AAEd,QAAM2B,IAAoB,CAACC,MAAiB;AAC1C,IAAAtB,EAASsB,CAAI,GACb1B,KAAA,QAAAA,EAAW0B;AAAA,EACb,GAEMC,IAAY,CAAC,GAAG,IAAI,IAAIhC,EAAW,QAAQ,CAACiC,MAAMA,EAAE,MAAM,CAAC,CAAC,GAC5DC,IAAgB1B,IAClBwB,EAAU,OAAO,CAACpC,OACHK,EAAWL,CAAK,KAAK,IACtB,SAASY,EAAM,YAAA,CAAa,KAAKZ,MAAUY,CACxD,IACD,CAAA,GAEE2B,IAAgB3B,IAClB0B,EAAc,SAAS,IACrB,mBACA,UACF;AAEJ,WAASE,EAAaxC,GAAuB;AAC3C,WAAOK,EAAWL,CAAK,IAAI,IAAIK,EAAWL,CAAK,CAAC,MAAMA;AAAA,EACxD;AAEA,WAASyC,EAAiBC,GAAY;AACpC,UAAMC,IAAQX,EAAU,QAAQU,CAAE,GAC5BE,IAAWb,EAAU;AAC3B,QAAI,CAACY,KAAS,CAACC,EAAU;AACzB,UAAMC,IACJF,EAAM,wBAAwB,MAC9BC,EAAS,sBAAA,EAAwB,MACjCA,EAAS;AACX,IAAAA,EAAS,SAAS,EAAE,KAAAC,GAAK,UAAU,UAAU;AAAA,EAC/C;AAEA,QAAMC,IAAY,CAACC,EAAO,eAAe,GAAG5C,CAAS,EAClD,OAAO,OAAO,EACd,KAAK,GAAG,GAEL6C,IAAoB;AAAA,IACxB,cAAc;AAAA,IACd,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,4BAAWC,IAAA,CAAA,CAAmB;AAAA,EAAA,GAG1BC,IAAc,CAAClD,MAAkB;AACrC,UAAMmD,IAAYpD,GAAcC,GAAO8B,CAAgB;AACvD,WACE,gBAAAsB;AAAA,MAACC;AAAA,MAAA;AAAA,QAEC,OAAOF;AAAA,QACP,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,cAAYA;AAAA,QACZ,cAAc,MAAM;AAClB,UAAAhC,EAAgBgC,CAAS,GACzB9B,EAAerB,CAAK;AAAA,QACtB;AAAA,QACA,cAAc,MAAM;AAClB,UAAAmB,EAAgB,IAAI,GACpBE,EAAe,IAAI;AAAA,QACrB;AAAA,QACA,SAAS,MAAMb,KAAA,gBAAAA,EAAgB2C;AAAA,MAAS;AAAA,MAbnCnD;AAAA,IAAA;AAAA,EAgBX,GAEMsD,IAAa,MACbf,MAAkB,UAElB,gBAAAa;AAAA,IAACG;AAAA,IAAA;AAAA,MACC,cAAcP;AAAA,MACd,OAAM;AAAA,MACN,aAAY;AAAA,IAAA;AAAA,EAAA,IAKdT,MAAkB,mBAElB,gBAAAa,EAAC,OAAA,EAAI,WAAWL,EAAO,2BAA2B,GAChD,UAAA,gBAAAS,EAAC,OAAA,EAAI,WAAWT,EAAO,sBAAsB,GAC3C,UAAA;AAAA,IAAA,gBAAAK,EAACK,GAAA,EAAiB,OAAM,iBAAA,CAAiB;AAAA,IACzC,gBAAAL,EAAC,SAAI,WAAWL,EAAO,0BAA0B,GAC9C,UAAAT,EAAc,IAAIY,CAAW,EAAA,CAChC;AAAA,EAAA,EAAA,CACF,EAAA,CACF,IAKF,gBAAAE,EAAC,SAAI,WAAWL,EAAO,2BAA2B,GAC/C,UAAA3C,EAAW,IAAI,CAACsD,MACf,gBAAAF;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,KAAK,CAACG,MAAO;AACX,QAAA3B,EAAU,QAAQ0B,EAAI,EAAE,IAAIC;AAAA,MAC9B;AAAA,MACA,WAAWZ,EAAO,sBAAsB;AAAA,MAExC,UAAA;AAAA,QAAA,gBAAAK,EAACK,GAAA,EAAiB,OAAOC,EAAI,MAAA,CAAO;AAAA,QACpC,gBAAAN;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACTL,EAAO,0BAA0B;AAAA,cACjCW,EAAI,SAAS,KACTX,EAAO,kCAAkC,IACzC;AAAA,YAAA,EAEH,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,YAEV,UAAAW,EAAI,OAAO,IAAIR,CAAW;AAAA,UAAA;AAAA,QAAA;AAAA,MAC7B;AAAA,IAAA;AAAA,IAlBKQ,EAAI;AAAA,EAAA,CAoBZ,GACH;AAIJ,SACE,gBAAAF,EAAC,OAAA,EAAI,WAAWV,GACd,UAAA;AAAA,IAAA,gBAAAU,EAAC,OAAA,EAAI,WAAWT,EAAO,uBAAuB,GAC5C,UAAA;AAAA,MAAA,gBAAAS,EAAC,OAAA,EAAI,WAAWT,EAAO,8BAA8B,GACnD,UAAA;AAAA,QAAA,gBAAAK;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACTL,EAAO,4BAA4B;AAAA,cACnCvB,IACIuB,EAAO,oCAAoC,IAC3C;AAAA,YAAA,EAEH,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,YACX,OAAOvB;AAAA,YACP,eAAaA,KAAsB;AAAA,YAEnC,UAAA,gBAAAgC,EAAC,OAAA,EAAI,WAAWT,EAAO,2BAA2B,GAChD,UAAA;AAAA,cAAA,gBAAAK;AAAA,gBAACQ;AAAA,gBAAA;AAAA,kBACC,KAAKlC;AAAA,kBACL,aAAY;AAAA,kBACZ,MAAK;AAAA,kBACL,WAAWqB,EAAO,6BAA6B;AAAA,kBAC/C,OAAOnC;AAAA,kBACP,UAAU,CAAC,MAAMsB,EAAkB,EAAE,OAAO,KAAK;AAAA,kBACjD,SAAS,MAAMA,EAAkB,EAAE;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEpC,CAACtB,KACA,gBAAAwC;AAAA,gBAACC;AAAA,gBAAA;AAAA,kBACC,OAAOzD,EAAW0B,CAAa;AAAA,kBAC/B,MAAK;AAAA,kBACL,cAAW;AAAA,kBACX,iBAAeE;AAAA,kBACf,iBAAeI;AAAA,kBACf,SAAS,MAAMH,EAAsB,EAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YAC3C,EAAA,CAEJ;AAAA,UAAA;AAAA,QAAA;AAAA,QAGF,gBAAA+B;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAI5B;AAAA,YACJ,WAAW;AAAA,cACTmB,EAAO,iCAAiC;AAAA,cACxCvB,IACIuB,EAAO,0CAA0C,IACjD;AAAA,YAAA,EAEH,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,YACX,OAAO,CAACvB;AAAA,YACR,eAAa,CAACA,KAAsB;AAAA,YAEpC,UAAA;AAAA,cAAA,gBAAA4B,EAAC,QAAA,EAAK,WAAWL,EAAO,gCAAgC,GAAG,UAAA,aAE3D;AAAA,cACA,gBAAAK,EAAC,OAAA,EAAI,WAAWL,EAAO,kCAAkC,GACtD,UAAAnD,EAAW,IAAI,CAACI,GAAO6D,MACtB,gBAAAT;AAAA,gBAACC;AAAA,gBAAA;AAAA,kBAEC,OAAArD;AAAA,kBACA,MAAK;AAAA,kBACL,SAASsB,MAAkBuC;AAAA,kBAC3B,cAAYA,MAAM,IAAI,sBAAsB,aAAaA,CAAC;AAAA,kBAC1D,SAAS,MAAM;AACb,oBAAAtC,EAAiBsC,CAAC,GAClBpC,EAAsB,EAAK;AAAA,kBAC7B;AAAA,gBAAA;AAAA,gBARKoC;AAAA,cAAA,CAUR,GACH;AAAA,cACA,gBAAAT;AAAA,gBAACU;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,wBAAOC,GAAA,EAAK,yBAAQC,IAAA,EAAU,GAAI,MAAK,MAAK;AAAA,kBAC5C,cAAW;AAAA,kBACX,SAAS,MAAMvC,EAAsB,EAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,YAC5C;AAAA,UAAA;AAAA,QAAA;AAAA,MACF,GACF;AAAA,MAEC,CAACb,KACA,gBAAAwC,EAAC,OAAA,EAAI,WAAWL,EAAO,2BAA2B,GAC/C,UAAA3C,EAAW,IAAI,CAACsD,MACf,gBAAAN;AAAA,QAACU;AAAA,QAAA;AAAA,UAEC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,MAAM,gBAAAV,EAACW,GAAA,EAAK,OAAO,gBAAAX,EAACM,EAAI,MAAJ,CAAA,CAAS,GAAI,MAAK,KAAA,CAAK;AAAA,UAC3C,cAAYA,EAAI;AAAA,UAChB,QAAQ3C,MAAqB2C,EAAI;AAAA,UACjC,SAAS,MAAM;AACb,YAAA1C,EAAoB0C,EAAI,EAAE,GAC1BjB,EAAiBiB,EAAI,EAAE;AAAA,UACzB;AAAA,QAAA;AAAA,QATKA,EAAI;AAAA,MAAA,CAWZ,EAAA,CACH;AAAA,IAAA,GAEJ;AAAA,sBAEC,OAAA,EAAI,WAAWX,EAAO,4BAA4B,GAChD,gBAAkB,UACjBO,EAAA,IAEA,gBAAAF,EAACa,MAAU,eAAa,IAAC,KAAKlC,GAC3B,UAAAuB,KACH,GAEJ;AAAA,IAEA,gBAAAE,EAAC,OAAA,EAAI,WAAWT,EAAO,uBAAuB,GAC5C,UAAA;AAAA,MAAA,gBAAAK,EAAC,SAAI,WAAWL,EAAO,+BAA+B,GACnD,cACC,gBAAAS,EAAAU,GAAA,EACE,UAAA;AAAA,QAAA,gBAAAd,EAACe,IAAA,EAAM,OAAOjD,GAAc,MAAK,MAAK;AAAA,QACtC,gBAAAkC,EAAC,UAAK,WAAWL,EAAO,iCAAiC,GACtD,UAAAP,EAAapB,KAAe,EAAE,EAAA,CACjC;AAAA,MAAA,EAAA,CACF,sBAEC,QAAA,EAAK,WAAW2B,EAAO,4BAA4B,GAAG,6BAEvD,EAAA,CAEJ;AAAA,MACCrC,uBACE0D,IAAA,EAAO,UAAS,YAAW,MAAK,SAAQ,SAAS1D,GAC/C,UAAAC,EAAA,CACH;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;"}
|
|
1
|
+
{"version":3,"file":"EmojiPopover.js","sources":["../../../src/components/emoji-popover/EmojiPopover.tsx"],"sourcesContent":["import { useEffect, useId, useRef, useState } from 'react';\nimport type { ComponentType, ReactNode } from 'react';\nimport CloseIcon from '@mattermost/compass-icons/components/close';\nimport Button from '@/components/button/Button';\nimport Emoji from '@/components/emoji/Emoji';\nimport EmojiButton from '@/components/emoji-button/EmojiButton';\nimport EmptyState from '@/components/empty-state/EmptyState';\nimport Icon from '@/components/icon/Icon';\nimport IconButton from '@/components/icon-button/IconButton';\nimport MenuGroupHeading from '@/components/menu-group-heading/MenuGroupHeading';\nimport Scrollbar from '@/components/scrollbar/Scrollbar';\nimport SearchInput from '@/components/search-input/SearchInput';\nimport SearchIllustration from '@/illustrations/search';\nimport styles from './EmojiPopover.module.scss';\n\nexport interface EmojiCategory {\n id: string;\n /** Group heading and category button name. Kept as `string`: it's the button's `aria-label`. */\n label: string;\n /** Icon component rendered in the category navigation bar. */\n icon: ComponentType;\n emojis: string[];\n /** When false the row does not wrap (e.g. Recently Used). @default true */\n wrap?: boolean;\n}\n\nexport interface EmojiPopoverProps {\n className?: string;\n /** Emoji categories to display, supplied by the host. */\n categories: EmojiCategory[];\n /** Map of base emoji → shortcode name used for footer display. */\n shortcodes?: Record<string, string>;\n /** Pre-seeds the search field. Useful for static specimen demos. */\n defaultQuery?: string;\n /** Focus the search field on mount. */\n autoFocus?: boolean;\n /** Called with the selected emoji character. */\n onEmojiSelect?: (emoji: string) => void;\n /**\n * Called on every query change. Use this to trigger async custom-emoji\n * searches on the host side; local filtering over `categories` always runs.\n */\n onSearch?: (query: string) => void;\n /** Shows a tertiary button in the footer right. Omit to hide the button. */\n onCustomEmojiClick?: () => void;\n /** Label for the custom emoji button. Accepts translated nodes. @default 'Custom emoji' */\n customEmojiLabel?: ReactNode;\n /** Search field placeholder. @default 'Search emojis' */\n searchPlaceholder?: string;\n /** Accessible name for the search clear button. @default 'Clear search' */\n searchClearLabel?: string;\n /** Heading above search results. @default 'Search Results' */\n searchResultsLabel?: ReactNode;\n /** Empty search title. @default 'No emojis found' */\n emptyTitle?: ReactNode;\n /** Empty search description. @default 'Try a different search term.' */\n emptyDescription?: ReactNode;\n /** Footer hint when no emoji is hovered. @default 'Select an Emoji' */\n previewHintLabel?: ReactNode;\n /** Accessible name for the skin tone button. @default 'Select skin tone' */\n skinToneButtonLabel?: string;\n /** Skin tone picker heading. @default 'Skin tone' */\n skinToneLabel?: ReactNode;\n /** Accessible name per skin tone (0 = default). @default 'Default skin tone' / `Skin tone {index}` */\n formatSkinToneLabel?: (index: number) => string;\n /** Accessible name for closing the skin tone picker. @default 'Close skin tone picker' */\n closeSkinTonePickerLabel?: string;\n}\n\nconst defaultFormatSkinToneLabel = (index: number) =>\n index === 0 ? 'Default skin tone' : `Skin tone ${index}`;\n\nconst SKIN_TONES = ['🖐️', '🖐🏻', '🖐🏼', '🖐🏽', '🖐🏾', '🖐🏿'];\nconst SKIN_TONE_MODIFIERS = [\n '',\n '\\u{1F3FB}',\n '\\u{1F3FC}',\n '\\u{1F3FD}',\n '\\u{1F3FE}',\n '\\u{1F3FF}',\n];\n\nconst MODIFIER_BASES = new Set([\n '👋',\n '🤚',\n '✋',\n '🖐️',\n '🖖',\n '👌',\n '🤌',\n '🤏',\n '✌️',\n '🤞',\n '🫰',\n '🤟',\n '🤘',\n '🤙',\n '👈',\n '👉',\n '👆',\n '👇',\n '☝️',\n '🫵',\n '👍',\n '👎',\n '✊',\n '👊',\n '🤛',\n '🤜',\n '👏',\n '🙌',\n '🫶',\n '👐',\n '🤲',\n '🙏',\n '💅',\n '🤳',\n '💪',\n '🦵',\n '🦶',\n '👂',\n '🦻',\n '👃',\n]);\n\nfunction applyModifier(emoji: string, modifier: string): string {\n if (!modifier || !MODIFIER_BASES.has(emoji)) return emoji;\n // Strip VS16 before the modifier so composed sequences render correctly\n return emoji.replace('️', '') + modifier;\n}\n\nexport default function EmojiPopover({\n className = '',\n categories,\n shortcodes = {},\n defaultQuery = '',\n autoFocus = false,\n onEmojiSelect,\n onSearch,\n onCustomEmojiClick,\n customEmojiLabel = 'Custom emoji',\n searchPlaceholder = 'Search emojis',\n searchClearLabel,\n searchResultsLabel = 'Search Results',\n emptyTitle = 'No emojis found',\n emptyDescription = 'Try a different search term.',\n previewHintLabel = 'Select an Emoji',\n skinToneButtonLabel = 'Select skin tone',\n skinToneLabel = 'Skin tone',\n formatSkinToneLabel = defaultFormatSkinToneLabel,\n closeSkinTonePickerLabel = 'Close skin tone picker',\n}: EmojiPopoverProps) {\n const [query, setQuery] = useState(defaultQuery);\n const [activeCategoryId, setActiveCategoryId] = useState(\n categories[0]?.id ?? '',\n );\n const [hoveredEmoji, setHoveredEmoji] = useState<string | null>(null);\n const [hoveredBase, setHoveredBase] = useState<string | null>(null);\n const [skinToneIndex, setSkinToneIndex] = useState(0);\n const [showSkinTonePicker, setShowSkinTonePicker] = useState(false);\n\n const searchRef = useRef<HTMLInputElement>(null);\n const generatedId = useId();\n const skinTonePickerId = `${generatedId}-skin-tone-picker`;\n const skinToneModifier = SKIN_TONE_MODIFIERS[skinToneIndex];\n const scrollRef = useRef<HTMLDivElement>(null);\n const groupRefs = useRef<Record<string, HTMLDivElement | null>>({});\n\n useEffect(() => {\n if (autoFocus) searchRef.current?.focus();\n }, [autoFocus]);\n\n const handleQueryChange = (next: string) => {\n setQuery(next);\n onSearch?.(next);\n };\n\n const allEmojis = [...new Set(categories.flatMap((c) => c.emojis))];\n const searchResults = query\n ? allEmojis.filter((emoji) => {\n const name = shortcodes[emoji] ?? '';\n return name.includes(query.toLowerCase()) || emoji === query;\n })\n : [];\n\n const computedState = query\n ? searchResults.length > 0\n ? 'search-results'\n : 'empty'\n : 'default';\n\n function getShortcode(emoji: string): string {\n return shortcodes[emoji] ? `:${shortcodes[emoji]}:` : emoji;\n }\n\n function scrollToCategory(id: string) {\n const group = groupRefs.current[id];\n const scroller = scrollRef.current;\n if (!group || !scroller) return;\n const top =\n group.getBoundingClientRect().top -\n scroller.getBoundingClientRect().top +\n scroller.scrollTop;\n scroller.scrollTo({ top, behavior: 'smooth' });\n }\n\n const rootClass = [styles['emoji-popover'], className]\n .filter(Boolean)\n .join(' ');\n\n const emptyIllustration = {\n 'aria-label': '' as const,\n width: '80px',\n height: '60px',\n children: <SearchIllustration />,\n };\n\n const renderEmoji = (emoji: string) => {\n const displayed = applyModifier(emoji, skinToneModifier);\n return (\n <EmojiButton\n key={emoji}\n emoji={displayed}\n size=\"medium\"\n padding=\"compact\"\n aria-label={displayed}\n onMouseEnter={() => {\n setHoveredEmoji(displayed);\n setHoveredBase(emoji);\n }}\n onMouseLeave={() => {\n setHoveredEmoji(null);\n setHoveredBase(null);\n }}\n onClick={() => onEmojiSelect?.(displayed)}\n />\n );\n };\n\n const renderBody = () => {\n if (computedState === 'empty') {\n return (\n <EmptyState\n illustration={emptyIllustration}\n title={emptyTitle}\n description={emptyDescription}\n />\n );\n }\n\n if (computedState === 'search-results') {\n return (\n <div className={styles['emoji-popover__emoji-list']}>\n <div className={styles['emoji-popover__group']}>\n <MenuGroupHeading label={searchResultsLabel} />\n <div className={styles['emoji-popover__emoji-row']}>\n {searchResults.map(renderEmoji)}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={styles['emoji-popover__emoji-list']}>\n {categories.map((cat) => (\n <div\n key={cat.id}\n ref={(el) => {\n groupRefs.current[cat.id] = el;\n }}\n className={styles['emoji-popover__group']}\n >\n <MenuGroupHeading label={cat.label} />\n <div\n className={[\n styles['emoji-popover__emoji-row'],\n cat.wrap === false\n ? styles['emoji-popover__emoji-row--nowrap']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {cat.emojis.map(renderEmoji)}\n </div>\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <div className={rootClass}>\n <div className={styles['emoji-popover__header']}>\n <div className={styles['emoji-popover__header-panels']}>\n <div\n className={[\n styles['emoji-popover__header-main'],\n showSkinTonePicker\n ? styles['emoji-popover__header-main--hidden']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n inert={showSkinTonePicker}\n aria-hidden={showSkinTonePicker || undefined}\n >\n <div className={styles['emoji-popover__search-row']}>\n <SearchInput\n ref={searchRef}\n placeholder={searchPlaceholder}\n size=\"small\"\n className={styles['emoji-popover__search-input']}\n value={query}\n onChange={(e) => handleQueryChange(e.target.value)}\n onClear={() => handleQueryChange('')}\n clearLabel={searchClearLabel}\n />\n {!query && (\n <EmojiButton\n emoji={SKIN_TONES[skinToneIndex]}\n size=\"small\"\n aria-label={skinToneButtonLabel}\n aria-expanded={showSkinTonePicker}\n aria-controls={skinTonePickerId}\n onClick={() => setShowSkinTonePicker(true)}\n />\n )}\n </div>\n </div>\n\n <div\n id={skinTonePickerId}\n className={[\n styles['emoji-popover__skin-tone-picker'],\n showSkinTonePicker\n ? styles['emoji-popover__skin-tone-picker--visible']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n inert={!showSkinTonePicker}\n aria-hidden={!showSkinTonePicker || undefined}\n >\n <span className={styles['emoji-popover__skin-tone-label']}>\n {skinToneLabel}\n </span>\n <div className={styles['emoji-popover__skin-tone-options']}>\n {SKIN_TONES.map((emoji, i) => (\n <EmojiButton\n key={i}\n emoji={emoji}\n size=\"small\"\n toggled={skinToneIndex === i}\n aria-label={formatSkinToneLabel(i)}\n onClick={() => {\n setSkinToneIndex(i);\n setShowSkinTonePicker(false);\n }}\n />\n ))}\n </div>\n <IconButton\n size=\"small\"\n padding=\"compact\"\n icon={<Icon glyph={<CloseIcon />} size=\"16\" />}\n aria-label={closeSkinTonePickerLabel}\n onClick={() => setShowSkinTonePicker(false)}\n />\n </div>\n </div>\n\n {!query && (\n <div className={styles['emoji-popover__categories']}>\n {categories.map((cat) => (\n <IconButton\n key={cat.id}\n size=\"small\"\n padding=\"compact\"\n icon={<Icon glyph={<cat.icon />} size=\"16\" />}\n aria-label={cat.label}\n active={activeCategoryId === cat.id}\n onClick={() => {\n setActiveCategoryId(cat.id);\n scrollToCategory(cat.id);\n }}\n />\n ))}\n </div>\n )}\n </div>\n\n <div className={styles['emoji-popover__scroll-view']}>\n {computedState === 'empty' ? (\n renderBody()\n ) : (\n <Scrollbar alwaysVisible ref={scrollRef}>\n {renderBody()}\n </Scrollbar>\n )}\n </div>\n\n <div className={styles['emoji-popover__footer']}>\n <div className={styles['emoji-popover__footer-preview']}>\n {hoveredEmoji ? (\n <>\n <Emoji emoji={hoveredEmoji} size=\"32\" />\n <span className={styles['emoji-popover__footer-shortcode']}>\n {getShortcode(hoveredBase ?? '')}\n </span>\n </>\n ) : (\n <span className={styles['emoji-popover__footer-hint']}>\n {previewHintLabel}\n </span>\n )}\n </div>\n {onCustomEmojiClick && (\n <Button emphasis=\"tertiary\" size=\"small\" onClick={onCustomEmojiClick}>\n {customEmojiLabel}\n </Button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["defaultFormatSkinToneLabel","index","SKIN_TONES","SKIN_TONE_MODIFIERS","MODIFIER_BASES","applyModifier","emoji","modifier","EmojiPopover","className","categories","shortcodes","defaultQuery","autoFocus","onEmojiSelect","onSearch","onCustomEmojiClick","customEmojiLabel","searchPlaceholder","searchClearLabel","searchResultsLabel","emptyTitle","emptyDescription","previewHintLabel","skinToneButtonLabel","skinToneLabel","formatSkinToneLabel","closeSkinTonePickerLabel","query","setQuery","useState","activeCategoryId","setActiveCategoryId","_a","hoveredEmoji","setHoveredEmoji","hoveredBase","setHoveredBase","skinToneIndex","setSkinToneIndex","showSkinTonePicker","setShowSkinTonePicker","searchRef","useRef","skinTonePickerId","useId","skinToneModifier","scrollRef","groupRefs","useEffect","handleQueryChange","next","allEmojis","c","searchResults","computedState","getShortcode","scrollToCategory","id","group","scroller","top","rootClass","styles","emptyIllustration","SearchIllustration","renderEmoji","displayed","jsx","EmojiButton","renderBody","EmptyState","jsxs","MenuGroupHeading","cat","el","SearchInput","i","IconButton","Icon","CloseIcon","Scrollbar","Fragment","Emoji","Button"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),n=require("../button/Button.cjs"),d=require("../illustration/Illustration.cjs"),c=require("../scrollbar/Scrollbar.cjs"),t=require("./EmptyState.module.scss.cjs");function m({illustration:l,title:u,description:s,action:a,className:r="",...i}){return e.jsx(c.default,{...i,className:[t.default["empty-state"],r].filter(Boolean).join(" "),children:e.jsxs("div",{className:t.default["empty-state__container"],children:[l!=null&&e.jsx("div",{className:t.default["empty-state__illustration"],children:e.jsx(d.default,{...l})}),e.jsxs("div",{className:t.default["empty-state__titles"],children:[e.jsx("h2",{className:t.default["empty-state__title"],children:u}),s!=null&&e.jsx("p",{className:t.default["empty-state__description"],children:s})]}),a!=null&&e.jsx("div",{className:t.default["empty-state__action"],children:e.jsx(n.default,{...a})})]})})}exports.default=m;
|
|
2
2
|
//# sourceMappingURL=EmptyState.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmptyState.cjs","sources":["../../../src/components/empty-state/EmptyState.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport Button from '@/components/button/Button';\nimport type { ButtonProps } from '@/components/button/Button';\nimport Illustration from '@/components/illustration/Illustration';\nimport type { IllustrationProps } from '@/components/illustration/Illustration';\nimport Scrollbar from '@/components/scrollbar/Scrollbar';\nimport styles from './EmptyState.module.scss';\n\nexport interface EmptyStateProps {\n /** Illustration props (children = the SVG component). Rendered above the title. */\n illustration?: IllustrationProps;\n /** Main heading. Accepts translated nodes (e.g. `<FormattedMessage/>`). */\n title: ReactNode;\n /** Body description. Supports ReactNode for inline formatting. */\n description?: ReactNode;\n /** Button props (children = label). Rendered below the description. */\n action?: ButtonProps;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * Empty State fills a view that has no content yet — no saved messages, no mentions, no\n * search results, no files. It pairs an illustration with a short explanation and, when\n * there's something the user can do next, a single action.\n */\nexport default function EmptyState({\n illustration,\n title,\n description,\n action,\n className = '',\n}: EmptyStateProps) {\n return (\n <Scrollbar\n className={[styles['empty-state'], className].filter(Boolean).join(' ')}\n >\n <div className={styles['empty-state__container']}>\n {illustration != null && (\n <div className={styles['empty-state__illustration']}>\n <Illustration {...illustration} />\n </div>\n )}\n <div className={styles['empty-state__titles']}>\n <h2 className={styles['empty-state__title']}>{title}</h2>\n {description != null && (\n <p className={styles['empty-state__description']}>{description}</p>\n )}\n </div>\n {action != null && (\n <div className={styles['empty-state__action']}>\n <Button {...action} />\n </div>\n )}\n </div>\n </Scrollbar>\n );\n}\n"],"names":["EmptyState","illustration","title","description","action","className","jsx","Scrollbar","styles","jsxs","Illustration","Button"],"mappings":"
|
|
1
|
+
{"version":3,"file":"EmptyState.cjs","sources":["../../../src/components/empty-state/EmptyState.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react';\nimport Button from '@/components/button/Button';\nimport type { ButtonProps } from '@/components/button/Button';\nimport Illustration from '@/components/illustration/Illustration';\nimport type { IllustrationProps } from '@/components/illustration/Illustration';\nimport Scrollbar from '@/components/scrollbar/Scrollbar';\nimport styles from './EmptyState.module.scss';\n\nexport interface EmptyStateProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title' | 'children' | 'onScroll'\n> {\n /** Illustration props (children = the SVG component). Rendered above the title. */\n illustration?: IllustrationProps;\n /** Main heading. Accepts translated nodes (e.g. `<FormattedMessage/>`). */\n title: ReactNode;\n /** Body description. Supports ReactNode for inline formatting. */\n description?: ReactNode;\n /** Button props (children = label). Rendered below the description. */\n action?: ButtonProps;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * Empty State fills a view that has no content yet — no saved messages, no mentions, no\n * search results, no files. It pairs an illustration with a short explanation and, when\n * there's something the user can do next, a single action.\n */\nexport default function EmptyState({\n illustration,\n title,\n description,\n action,\n className = '',\n ...rest\n}: EmptyStateProps) {\n return (\n <Scrollbar\n {...rest}\n className={[styles['empty-state'], className].filter(Boolean).join(' ')}\n >\n <div className={styles['empty-state__container']}>\n {illustration != null && (\n <div className={styles['empty-state__illustration']}>\n <Illustration {...illustration} />\n </div>\n )}\n <div className={styles['empty-state__titles']}>\n <h2 className={styles['empty-state__title']}>{title}</h2>\n {description != null && (\n <p className={styles['empty-state__description']}>{description}</p>\n )}\n </div>\n {action != null && (\n <div className={styles['empty-state__action']}>\n <Button {...action} />\n </div>\n )}\n </div>\n </Scrollbar>\n );\n}\n"],"names":["EmptyState","illustration","title","description","action","className","rest","jsx","Scrollbar","styles","jsxs","Illustration","Button"],"mappings":"mTA6BA,SAAwBA,EAAW,CACjC,aAAAC,EACA,MAAAC,EACA,YAAAC,EACA,OAAAC,EACA,UAAAC,EAAY,GACZ,GAAGC,CACL,EAAoB,CAClB,OACEC,EAAAA,IAACC,EAAAA,QAAA,CACE,GAAGF,EACJ,UAAW,CAACG,UAAO,aAAa,EAAGJ,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAEtE,SAAAK,EAAAA,KAAC,MAAA,CAAI,UAAWD,UAAO,wBAAwB,EAC5C,SAAA,CAAAR,GAAgB,MACfM,EAAAA,IAAC,MAAA,CAAI,UAAWE,EAAAA,QAAO,2BAA2B,EAChD,SAAAF,EAAAA,IAACI,EAAAA,QAAA,CAAc,GAAGV,CAAA,CAAc,CAAA,CAClC,EAEFS,EAAAA,KAAC,MAAA,CAAI,UAAWD,EAAAA,QAAO,qBAAqB,EAC1C,SAAA,CAAAF,MAAC,KAAA,CAAG,UAAWE,EAAAA,QAAO,oBAAoB,EAAI,SAAAP,EAAM,EACnDC,GAAe,MACdI,EAAAA,IAAC,IAAA,CAAE,UAAWE,EAAAA,QAAO,0BAA0B,EAAI,SAAAN,CAAA,CAAY,CAAA,EAEnE,EACCC,GAAU,MACTG,EAAAA,IAAC,MAAA,CAAI,UAAWE,EAAAA,QAAO,qBAAqB,EAC1C,SAAAF,EAAAA,IAACK,EAAAA,QAAA,CAAQ,GAAGR,CAAA,CAAQ,CAAA,CACtB,CAAA,CAAA,CAEJ,CAAA,CAAA,CAGN"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
1
|
+
import { HTMLAttributes, ReactNode } from 'react';
|
|
2
2
|
import { ButtonProps } from '../button/Button';
|
|
3
3
|
import { IllustrationProps } from '../illustration/Illustration';
|
|
4
|
-
export interface EmptyStateProps {
|
|
4
|
+
export interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'children' | 'onScroll'> {
|
|
5
5
|
/** Illustration props (children = the SVG component). Rendered above the title. */
|
|
6
6
|
illustration?: IllustrationProps;
|
|
7
7
|
/** Main heading. Accepts translated nodes (e.g. `<FormattedMessage/>`). */
|
|
@@ -18,5 +18,5 @@ export interface EmptyStateProps {
|
|
|
18
18
|
* search results, no files. It pairs an illustration with a short explanation and, when
|
|
19
19
|
* there's something the user can do next, a single action.
|
|
20
20
|
*/
|
|
21
|
-
export default function EmptyState({ illustration, title, description, action, className, }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export default function EmptyState({ illustration, title, description, action, className, ...rest }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
|
|
22
22
|
//# sourceMappingURL=EmptyState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../src/components/empty-state/EmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../../../src/components/empty-state/EmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAIhF,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,cAAc,CAAC,cAAc,CAAC,EAC9B,OAAO,GAAG,UAAU,GAAG,UAAU,CAClC;IACC,mFAAmF;IACnF,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,2EAA2E;IAC3E,KAAK,EAAE,SAAS,CAAC;IACjB,kEAAkE;IAClE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,uEAAuE;IACvE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,YAAY,EACZ,KAAK,EACL,WAAW,EACX,MAAM,EACN,SAAc,EACd,GAAG,IAAI,EACR,EAAE,eAAe,2CA0BjB"}
|
|
@@ -1,31 +1,33 @@
|
|
|
1
1
|
import { jsx as t, jsxs as m } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
2
|
+
import o from "../button/Button.js";
|
|
3
|
+
import c from "../illustration/Illustration.js";
|
|
4
|
+
import p from "../scrollbar/Scrollbar.js";
|
|
5
5
|
import e from "./EmptyState.module.scss.js";
|
|
6
|
-
function
|
|
6
|
+
function u({
|
|
7
7
|
illustration: l,
|
|
8
8
|
title: r,
|
|
9
9
|
description: s,
|
|
10
10
|
action: a,
|
|
11
|
-
className: i = ""
|
|
11
|
+
className: i = "",
|
|
12
|
+
...n
|
|
12
13
|
}) {
|
|
13
14
|
return /* @__PURE__ */ t(
|
|
14
|
-
|
|
15
|
+
p,
|
|
15
16
|
{
|
|
17
|
+
...n,
|
|
16
18
|
className: [e["empty-state"], i].filter(Boolean).join(" "),
|
|
17
19
|
children: /* @__PURE__ */ m("div", { className: e["empty-state__container"], children: [
|
|
18
|
-
l != null && /* @__PURE__ */ t("div", { className: e["empty-state__illustration"], children: /* @__PURE__ */ t(
|
|
20
|
+
l != null && /* @__PURE__ */ t("div", { className: e["empty-state__illustration"], children: /* @__PURE__ */ t(c, { ...l }) }),
|
|
19
21
|
/* @__PURE__ */ m("div", { className: e["empty-state__titles"], children: [
|
|
20
22
|
/* @__PURE__ */ t("h2", { className: e["empty-state__title"], children: r }),
|
|
21
23
|
s != null && /* @__PURE__ */ t("p", { className: e["empty-state__description"], children: s })
|
|
22
24
|
] }),
|
|
23
|
-
a != null && /* @__PURE__ */ t("div", { className: e["empty-state__action"], children: /* @__PURE__ */ t(
|
|
25
|
+
a != null && /* @__PURE__ */ t("div", { className: e["empty-state__action"], children: /* @__PURE__ */ t(o, { ...a }) })
|
|
24
26
|
] })
|
|
25
27
|
}
|
|
26
28
|
);
|
|
27
29
|
}
|
|
28
30
|
export {
|
|
29
|
-
|
|
31
|
+
u as default
|
|
30
32
|
};
|
|
31
33
|
//# sourceMappingURL=EmptyState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmptyState.js","sources":["../../../src/components/empty-state/EmptyState.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport Button from '@/components/button/Button';\nimport type { ButtonProps } from '@/components/button/Button';\nimport Illustration from '@/components/illustration/Illustration';\nimport type { IllustrationProps } from '@/components/illustration/Illustration';\nimport Scrollbar from '@/components/scrollbar/Scrollbar';\nimport styles from './EmptyState.module.scss';\n\nexport interface EmptyStateProps {\n /** Illustration props (children = the SVG component). Rendered above the title. */\n illustration?: IllustrationProps;\n /** Main heading. Accepts translated nodes (e.g. `<FormattedMessage/>`). */\n title: ReactNode;\n /** Body description. Supports ReactNode for inline formatting. */\n description?: ReactNode;\n /** Button props (children = label). Rendered below the description. */\n action?: ButtonProps;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * Empty State fills a view that has no content yet — no saved messages, no mentions, no\n * search results, no files. It pairs an illustration with a short explanation and, when\n * there's something the user can do next, a single action.\n */\nexport default function EmptyState({\n illustration,\n title,\n description,\n action,\n className = '',\n}: EmptyStateProps) {\n return (\n <Scrollbar\n className={[styles['empty-state'], className].filter(Boolean).join(' ')}\n >\n <div className={styles['empty-state__container']}>\n {illustration != null && (\n <div className={styles['empty-state__illustration']}>\n <Illustration {...illustration} />\n </div>\n )}\n <div className={styles['empty-state__titles']}>\n <h2 className={styles['empty-state__title']}>{title}</h2>\n {description != null && (\n <p className={styles['empty-state__description']}>{description}</p>\n )}\n </div>\n {action != null && (\n <div className={styles['empty-state__action']}>\n <Button {...action} />\n </div>\n )}\n </div>\n </Scrollbar>\n );\n}\n"],"names":["EmptyState","illustration","title","description","action","className","jsx","Scrollbar","styles","jsxs","Illustration","Button"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"EmptyState.js","sources":["../../../src/components/empty-state/EmptyState.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react';\nimport Button from '@/components/button/Button';\nimport type { ButtonProps } from '@/components/button/Button';\nimport Illustration from '@/components/illustration/Illustration';\nimport type { IllustrationProps } from '@/components/illustration/Illustration';\nimport Scrollbar from '@/components/scrollbar/Scrollbar';\nimport styles from './EmptyState.module.scss';\n\nexport interface EmptyStateProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title' | 'children' | 'onScroll'\n> {\n /** Illustration props (children = the SVG component). Rendered above the title. */\n illustration?: IllustrationProps;\n /** Main heading. Accepts translated nodes (e.g. `<FormattedMessage/>`). */\n title: ReactNode;\n /** Body description. Supports ReactNode for inline formatting. */\n description?: ReactNode;\n /** Button props (children = label). Rendered below the description. */\n action?: ButtonProps;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * Empty State fills a view that has no content yet — no saved messages, no mentions, no\n * search results, no files. It pairs an illustration with a short explanation and, when\n * there's something the user can do next, a single action.\n */\nexport default function EmptyState({\n illustration,\n title,\n description,\n action,\n className = '',\n ...rest\n}: EmptyStateProps) {\n return (\n <Scrollbar\n {...rest}\n className={[styles['empty-state'], className].filter(Boolean).join(' ')}\n >\n <div className={styles['empty-state__container']}>\n {illustration != null && (\n <div className={styles['empty-state__illustration']}>\n <Illustration {...illustration} />\n </div>\n )}\n <div className={styles['empty-state__titles']}>\n <h2 className={styles['empty-state__title']}>{title}</h2>\n {description != null && (\n <p className={styles['empty-state__description']}>{description}</p>\n )}\n </div>\n {action != null && (\n <div className={styles['empty-state__action']}>\n <Button {...action} />\n </div>\n )}\n </div>\n </Scrollbar>\n );\n}\n"],"names":["EmptyState","illustration","title","description","action","className","rest","jsx","Scrollbar","styles","jsxs","Illustration","Button"],"mappings":";;;;;AA6BA,SAAwBA,EAAW;AAAA,EACjC,cAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,GAAoB;AAClB,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGF;AAAA,MACJ,WAAW,CAACG,EAAO,aAAa,GAAGJ,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAEtE,UAAA,gBAAAK,EAAC,OAAA,EAAI,WAAWD,EAAO,wBAAwB,GAC5C,UAAA;AAAA,QAAAR,KAAgB,QACf,gBAAAM,EAAC,OAAA,EAAI,WAAWE,EAAO,2BAA2B,GAChD,UAAA,gBAAAF,EAACI,GAAA,EAAc,GAAGV,EAAA,CAAc,EAAA,CAClC;AAAA,QAEF,gBAAAS,EAAC,OAAA,EAAI,WAAWD,EAAO,qBAAqB,GAC1C,UAAA;AAAA,UAAA,gBAAAF,EAAC,MAAA,EAAG,WAAWE,EAAO,oBAAoB,GAAI,UAAAP,GAAM;AAAA,UACnDC,KAAe,QACd,gBAAAI,EAAC,KAAA,EAAE,WAAWE,EAAO,0BAA0B,GAAI,UAAAN,EAAA,CAAY;AAAA,QAAA,GAEnE;AAAA,QACCC,KAAU,QACT,gBAAAG,EAAC,OAAA,EAAI,WAAWE,EAAO,qBAAqB,GAC1C,UAAA,gBAAAF,EAACK,GAAA,EAAQ,GAAGR,EAAA,CAAQ,EAAA,CACtB;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),o=require("../icon/Icon.cjs"),__n=require("@mattermost/compass-icons/components/alert-circle-outline.js"),n=__n?.default??__n,r=require("./ErrorMessage.module.scss.cjs");function i({className:s="",message:t,...a}){const l=[r.default["error-message"],s].filter(Boolean).join(" ");return e.jsxs("div",{...a,className:l,role:"alert",children:[e.jsx("span",{className:r.default["error-message__icon"],"aria-hidden":!0,children:e.jsx(o.default,{size:"12",glyph:e.jsx(n,{})})}),e.jsx("span",{className:r.default["error-message__text"],children:t})]})}exports.default=i;
|
|
2
2
|
//# sourceMappingURL=ErrorMessage.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorMessage.cjs","sources":["../../../src/components/error-message/ErrorMessage.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport Icon from '@/components/icon/Icon';\nimport AlertCircleOutlineIcon from '@mattermost/compass-icons/components/alert-circle-outline';\nimport styles from './ErrorMessage.module.scss';\n\nexport interface ErrorMessageProps {\n /** Optional CSS class name. */\n className?: string;\n /** The error message. Accepts translated nodes (e.g. `<FormattedMessage/>`). */\n message: ReactNode;\n}\n\n/**\n * Error Message is the inline red error line that appears below a form input when validation\n * fails. It pairs an alert glyph with a short, human-readable explanation so the user can\n * fix the field and move on.\n */\nexport default function ErrorMessage({\n className = '',\n message,\n}: ErrorMessageProps) {\n const rootClass = [styles['error-message'], className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} role=\"alert\">\n <span className={styles['error-message__icon']} aria-hidden>\n <Icon size=\"12\" glyph={<AlertCircleOutlineIcon />} />\n </span>\n <span className={styles['error-message__text']}>{message}</span>\n </div>\n );\n}\n"],"names":["ErrorMessage","className","message","
|
|
1
|
+
{"version":3,"file":"ErrorMessage.cjs","sources":["../../../src/components/error-message/ErrorMessage.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react';\nimport Icon from '@/components/icon/Icon';\nimport AlertCircleOutlineIcon from '@mattermost/compass-icons/components/alert-circle-outline';\nimport styles from './ErrorMessage.module.scss';\n\nexport interface ErrorMessageProps extends HTMLAttributes<HTMLDivElement> {\n /** Optional CSS class name. */\n className?: string;\n /** The error message. Accepts translated nodes (e.g. `<FormattedMessage/>`). */\n message: ReactNode;\n}\n\n/**\n * Error Message is the inline red error line that appears below a form input when validation\n * fails. It pairs an alert glyph with a short, human-readable explanation so the user can\n * fix the field and move on.\n */\nexport default function ErrorMessage({\n className = '',\n message,\n ...rest\n}: ErrorMessageProps) {\n const rootClass = [styles['error-message'], className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div {...rest} className={rootClass} role=\"alert\">\n <span className={styles['error-message__icon']} aria-hidden>\n <Icon size=\"12\" glyph={<AlertCircleOutlineIcon />} />\n </span>\n <span className={styles['error-message__text']}>{message}</span>\n </div>\n );\n}\n"],"names":["ErrorMessage","className","message","rest","rootClass","styles","jsx","Icon","AlertCircleOutlineIcon"],"mappings":"kSAiBA,SAAwBA,EAAa,CACnC,UAAAC,EAAY,GACZ,QAAAC,EACA,GAAGC,CACL,EAAsB,CACpB,MAAMC,EAAY,CAACC,UAAO,eAAe,EAAGJ,CAAS,EAClD,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,cACG,MAAA,CAAK,GAAGE,EAAM,UAAWC,EAAW,KAAK,QACxC,SAAA,CAAAE,MAAC,OAAA,CAAK,UAAWD,EAAAA,QAAO,qBAAqB,EAAG,cAAW,GACzD,SAAAC,EAAAA,IAACC,EAAAA,QAAA,CAAK,KAAK,KAAK,MAAOD,EAAAA,IAACE,EAAA,CAAA,CAAuB,EAAI,EACrD,QACC,OAAA,CAAK,UAAWH,EAAAA,QAAO,qBAAqB,EAAI,SAAAH,CAAA,CAAQ,CAAA,EAC3D,CAEJ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
export interface ErrorMessageProps {
|
|
1
|
+
import { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export interface ErrorMessageProps extends HTMLAttributes<HTMLDivElement> {
|
|
3
3
|
/** Optional CSS class name. */
|
|
4
4
|
className?: string;
|
|
5
5
|
/** The error message. Accepts translated nodes (e.g. `<FormattedMessage/>`). */
|
|
@@ -10,5 +10,5 @@ export interface ErrorMessageProps {
|
|
|
10
10
|
* fails. It pairs an alert glyph with a short, human-readable explanation so the user can
|
|
11
11
|
* fix the field and move on.
|
|
12
12
|
*/
|
|
13
|
-
export default function ErrorMessage({ className, message, }: ErrorMessageProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export default function ErrorMessage({ className, message, ...rest }: ErrorMessageProps): import("react/jsx-runtime").JSX.Element;
|
|
14
14
|
//# sourceMappingURL=ErrorMessage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorMessage.d.ts","sourceRoot":"","sources":["../../../src/components/error-message/ErrorMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ErrorMessage.d.ts","sourceRoot":"","sources":["../../../src/components/error-message/ErrorMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvD,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACvE,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,OAAO,EAAE,SAAS,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,SAAc,EACd,OAAO,EACP,GAAG,IAAI,EACR,EAAE,iBAAiB,2CAanB"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import { jsxs as i, jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import l from "../icon/Icon.js";
|
|
3
|
+
import __n from "@mattermost/compass-icons/components/alert-circle-outline.js";const n=__n&&__n.default?__n.default:__n;
|
|
4
4
|
import e from "./ErrorMessage.module.scss.js";
|
|
5
|
-
function
|
|
5
|
+
function f({
|
|
6
6
|
className: s = "",
|
|
7
|
-
message: o
|
|
7
|
+
message: o,
|
|
8
|
+
...a
|
|
8
9
|
}) {
|
|
9
|
-
const
|
|
10
|
-
return /* @__PURE__ */
|
|
11
|
-
/* @__PURE__ */ r("span", { className: e["error-message__icon"], "aria-hidden": !0, children: /* @__PURE__ */ r(
|
|
10
|
+
const t = [e["error-message"], s].filter(Boolean).join(" ");
|
|
11
|
+
return /* @__PURE__ */ i("div", { ...a, className: t, role: "alert", children: [
|
|
12
|
+
/* @__PURE__ */ r("span", { className: e["error-message__icon"], "aria-hidden": !0, children: /* @__PURE__ */ r(l, { size: "12", glyph: /* @__PURE__ */ r(n, {}) }) }),
|
|
12
13
|
/* @__PURE__ */ r("span", { className: e["error-message__text"], children: o })
|
|
13
14
|
] });
|
|
14
15
|
}
|
|
15
16
|
export {
|
|
16
|
-
|
|
17
|
+
f as default
|
|
17
18
|
};
|
|
18
19
|
//# sourceMappingURL=ErrorMessage.js.map
|