@mattermost/compass-ui 0.1.0-alpha.10 â 0.1.0-alpha.12
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 +5 -4
- package/dist/components/action-button/ActionButton.cjs +1 -1
- 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 +36 -31
- 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.map +1 -1
- package/dist/components/admin-console-header/AdminConsoleHeader.js.map +1 -1
- package/dist/components/admin-panel/AdminPanel.cjs.map +1 -1
- package/dist/components/admin-panel/AdminPanel.d.ts.map +1 -1
- package/dist/components/admin-panel/AdminPanel.js.map +1 -1
- package/dist/components/admin-panel/index.d.ts +1 -1
- package/dist/components/admin-panel/index.d.ts.map +1 -1
- package/dist/components/admin-panel-footer/AdminPanelFooter.cjs.map +1 -1
- package/dist/components/admin-panel-footer/AdminPanelFooter.d.ts.map +1 -1
- package/dist/components/admin-panel-footer/AdminPanelFooter.js +1 -8
- package/dist/components/admin-panel-footer/AdminPanelFooter.js.map +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.cjs.map +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.d.ts.map +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.js +2 -16
- package/dist/components/admin-panel-header/AdminPanelHeader.js.map +1 -1
- package/dist/components/attachment-card/AttachmentCard.cjs.map +1 -1
- package/dist/components/attachment-card/AttachmentCard.d.ts.map +1 -1
- package/dist/components/attachment-card/AttachmentCard.js.map +1 -1
- package/dist/components/button/Button.cjs +1 -1
- package/dist/components/button/Button.cjs.map +1 -1
- package/dist/components/button/Button.d.ts +4 -3
- package/dist/components/button/Button.d.ts.map +1 -1
- package/dist/components/button/Button.js +39 -23
- package/dist/components/button/Button.js.map +1 -1
- package/dist/components/card-button/CardButton.cjs +1 -1
- package/dist/components/card-button/CardButton.cjs.map +1 -1
- package/dist/components/card-button/CardButton.d.ts +2 -1
- package/dist/components/card-button/CardButton.d.ts.map +1 -1
- package/dist/components/card-button/CardButton.js +47 -42
- package/dist/components/card-button/CardButton.js.map +1 -1
- package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.cjs.map +1 -1
- package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.js.map +1 -1
- package/dist/components/checkbox/Checkbox.cjs +1 -1
- package/dist/components/checkbox/Checkbox.cjs.map +1 -1
- package/dist/components/checkbox/Checkbox.d.ts +2 -1
- package/dist/components/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/checkbox/Checkbox.js +39 -37
- package/dist/components/checkbox/Checkbox.js.map +1 -1
- package/dist/components/chip/Chip.cjs.map +1 -1
- package/dist/components/chip/Chip.d.ts.map +1 -1
- package/dist/components/chip/Chip.js.map +1 -1
- package/dist/components/chip/ChipGroup.cjs.map +1 -1
- package/dist/components/chip/ChipGroup.d.ts.map +1 -1
- package/dist/components/chip/ChipGroup.js.map +1 -1
- 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 +30 -1
- package/dist/components/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.js +381 -276
- 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 +24 -22
- package/dist/components/combobox/Combobox.module.scss.js.map +1 -1
- package/dist/components/combobox/index.d.ts +1 -1
- package/dist/components/combobox/index.d.ts.map +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.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.js +27 -10
- 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/Emoji.cjs.map +1 -1
- package/dist/components/emoji/Emoji.d.ts.map +1 -1
- package/dist/components/emoji/Emoji.js +1 -5
- package/dist/components/emoji/Emoji.js.map +1 -1
- package/dist/components/emoji-button/EmojiButton.cjs.map +1 -1
- package/dist/components/emoji-button/EmojiButton.d.ts.map +1 -1
- package/dist/components/emoji-button/EmojiButton.js +10 -1
- package/dist/components/emoji-button/EmojiButton.js.map +1 -1
- package/dist/components/emoji-popover/EmojiPopover.cjs.map +1 -1
- package/dist/components/emoji-popover/EmojiPopover.d.ts.map +1 -1
- package/dist/components/emoji-popover/EmojiPopover.js +34 -17
- package/dist/components/emoji-popover/EmojiPopover.js.map +1 -1
- package/dist/components/empty-state/EmptyState.cjs.map +1 -1
- package/dist/components/empty-state/EmptyState.d.ts +2 -2
- package/dist/components/empty-state/EmptyState.d.ts.map +1 -1
- package/dist/components/empty-state/EmptyState.js.map +1 -1
- package/dist/components/error-message/ErrorMessage.cjs.map +1 -1
- package/dist/components/error-message/ErrorMessage.d.ts +3 -2
- package/dist/components/error-message/ErrorMessage.d.ts.map +1 -1
- package/dist/components/error-message/ErrorMessage.js.map +1 -1
- package/dist/components/icon/Icon.js +2 -2
- package/dist/components/icon/index.d.ts +1 -1
- package/dist/components/icon/index.d.ts.map +1 -1
- package/dist/components/icon-button/IconButton.cjs +1 -1
- package/dist/components/icon-button/IconButton.cjs.map +1 -1
- package/dist/components/icon-button/IconButton.d.ts +2 -1
- package/dist/components/icon-button/IconButton.d.ts.map +1 -1
- package/dist/components/icon-button/IconButton.js +61 -57
- package/dist/components/icon-button/IconButton.js.map +1 -1
- package/dist/components/image-preview/ImagePreview.cjs.map +1 -1
- package/dist/components/image-preview/ImagePreview.d.ts.map +1 -1
- package/dist/components/image-preview/ImagePreview.js +8 -1
- package/dist/components/image-preview/ImagePreview.js.map +1 -1
- package/dist/components/link-preview/LinkPreview.cjs.map +1 -1
- package/dist/components/link-preview/LinkPreview.d.ts.map +1 -1
- package/dist/components/link-preview/LinkPreview.js +1 -7
- package/dist/components/link-preview/LinkPreview.js.map +1 -1
- package/dist/components/link-preview/index.d.ts +1 -1
- package/dist/components/link-preview/index.d.ts.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 +4 -3
- package/dist/components/menu-item/MenuItem.d.ts.map +1 -1
- package/dist/components/menu-item/MenuItem.js +55 -43
- package/dist/components/menu-item/MenuItem.js.map +1 -1
- package/dist/components/message-actions/index.d.ts +1 -1
- package/dist/components/message-actions/index.d.ts.map +1 -1
- package/dist/components/message-separator/MessageSeparator.cjs.map +1 -1
- package/dist/components/message-separator/MessageSeparator.css +1 -1
- package/dist/components/message-separator/MessageSeparator.d.ts.map +1 -1
- package/dist/components/message-separator/MessageSeparator.js +8 -1
- package/dist/components/message-separator/MessageSeparator.js.map +1 -1
- package/dist/components/message-separator/MessageSeparator.module.scss.cjs +1 -1
- package/dist/components/message-separator/MessageSeparator.module.scss.js +11 -11
- package/dist/components/new-message-banner/NewMessageBanner.cjs.map +1 -1
- package/dist/components/new-message-banner/NewMessageBanner.d.ts.map +1 -1
- package/dist/components/new-message-banner/NewMessageBanner.js +1 -5
- package/dist/components/new-message-banner/NewMessageBanner.js.map +1 -1
- 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.css +1 -1
- package/dist/components/permalink-preview/PermalinkPreview.d.ts +9 -2
- package/dist/components/permalink-preview/PermalinkPreview.d.ts.map +1 -1
- package/dist/components/permalink-preview/PermalinkPreview.js +66 -25
- package/dist/components/permalink-preview/PermalinkPreview.js.map +1 -1
- package/dist/components/permalink-preview/PermalinkPreview.module.scss.cjs +1 -1
- package/dist/components/permalink-preview/PermalinkPreview.module.scss.js +13 -9
- package/dist/components/permalink-preview/PermalinkPreview.module.scss.js.map +1 -1
- package/dist/components/popover-menu/PopoverMenu.cjs.map +1 -1
- package/dist/components/popover-menu/PopoverMenu.d.ts +1 -2
- package/dist/components/popover-menu/PopoverMenu.d.ts.map +1 -1
- package/dist/components/popover-menu/PopoverMenu.js.map +1 -1
- package/dist/components/popover-notice/PopoverNotice.cjs.map +1 -1
- package/dist/components/popover-notice/PopoverNotice.d.ts +4 -3
- package/dist/components/popover-notice/PopoverNotice.d.ts.map +1 -1
- package/dist/components/popover-notice/PopoverNotice.js.map +1 -1
- package/dist/components/profile-popover/ProfilePopover.cjs.map +1 -1
- package/dist/components/profile-popover/ProfilePopover.d.ts.map +1 -1
- package/dist/components/profile-popover/ProfilePopover.js +14 -1
- 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.css +1 -1
- package/dist/components/progress-bar/ProgressBar.d.ts +6 -1
- package/dist/components/progress-bar/ProgressBar.d.ts.map +1 -1
- package/dist/components/progress-bar/ProgressBar.js +21 -15
- package/dist/components/progress-bar/ProgressBar.js.map +1 -1
- package/dist/components/progress-bar/ProgressBar.module.scss.cjs +1 -1
- package/dist/components/progress-bar/ProgressBar.module.scss.js +9 -8
- package/dist/components/progress-bar/ProgressBar.module.scss.js.map +1 -1
- package/dist/components/radio/Radio.cjs +1 -1
- package/dist/components/radio/Radio.cjs.map +1 -1
- package/dist/components/radio/Radio.d.ts +2 -1
- package/dist/components/radio/Radio.d.ts.map +1 -1
- package/dist/components/radio/Radio.js +15 -13
- package/dist/components/radio/Radio.js.map +1 -1
- package/dist/components/reactions-row/ReactionsRow.cjs.map +1 -1
- package/dist/components/reactions-row/ReactionsRow.d.ts.map +1 -1
- 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 +4 -2
- package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts.map +1 -1
- package/dist/components/right-sidebar-header/RightSidebarHeader.js +51 -43
- package/dist/components/right-sidebar-header/RightSidebarHeader.js.map +1 -1
- package/dist/components/search-input/SearchInput.cjs.map +1 -1
- package/dist/components/search-input/SearchInput.d.ts.map +1 -1
- package/dist/components/search-input/SearchInput.js.map +1 -1
- package/dist/components/section-notice/SectionNotice.cjs.map +1 -1
- package/dist/components/section-notice/SectionNotice.d.ts +4 -4
- package/dist/components/section-notice/SectionNotice.d.ts.map +1 -1
- package/dist/components/section-notice/SectionNotice.js.map +1 -1
- package/dist/components/select/Select.cjs.map +1 -1
- package/dist/components/select/Select.d.ts.map +1 -1
- package/dist/components/select/Select.js.map +1 -1
- package/dist/components/switch/Switch.cjs +1 -1
- package/dist/components/switch/Switch.cjs.map +1 -1
- package/dist/components/switch/Switch.d.ts +2 -1
- package/dist/components/switch/Switch.d.ts.map +1 -1
- package/dist/components/switch/Switch.js +31 -29
- package/dist/components/switch/Switch.js.map +1 -1
- 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 +6 -2
- package/dist/components/tabs/Tabs.d.ts.map +1 -1
- package/dist/components/tabs/Tabs.js +47 -39
- 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/tag/Tag.cjs.map +1 -1
- package/dist/components/tag/Tag.css +1 -1
- package/dist/components/tag/Tag.d.ts +2 -2
- package/dist/components/tag/Tag.d.ts.map +1 -1
- package/dist/components/tag/Tag.js.map +1 -1
- package/dist/components/tag/Tag.module.scss.cjs +1 -1
- package/dist/components/tag/Tag.module.scss.js +11 -11
- 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.map +1 -1
- package/dist/components/thread-footer/ThreadFooter.js +39 -43
- 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 -17
- package/dist/components/thread-footer/ThreadFooter.module.scss.js.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.cjs.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.d.ts.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.js +3 -1
- package/dist/components/thread-list-item/ThreadListItem.js.map +1 -1
- package/dist/components/toast/Toast.cjs.map +1 -1
- package/dist/components/toast/Toast.d.ts +3 -2
- package/dist/components/toast/Toast.d.ts.map +1 -1
- package/dist/components/toast/Toast.js.map +1 -1
- package/dist/components/tooltip/Tooltip.cjs +1 -1
- package/dist/components/tooltip/Tooltip.cjs.map +1 -1
- package/dist/components/tooltip/Tooltip.d.ts +3 -3
- package/dist/components/tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/tooltip/Tooltip.js +9 -9
- package/dist/components/tooltip/Tooltip.js.map +1 -1
- package/dist/components/tour-point/TourPoint.cjs.map +1 -1
- package/dist/components/tour-point/TourPoint.d.ts.map +1 -1
- package/dist/components/tour-point/TourPoint.js +8 -6
- package/dist/components/tour-point/TourPoint.js.map +1 -1
- package/dist/components/user-avatar-group/UserAvatarGroup.cjs.map +1 -1
- package/dist/components/user-avatar-group/UserAvatarGroup.d.ts.map +1 -1
- package/dist/components/user-avatar-group/UserAvatarGroup.js +23 -30
- package/dist/components/user-avatar-group/UserAvatarGroup.js.map +1 -1
- package/dist/hooks/use-anchored-popup-portal.cjs.map +1 -1
- package/dist/hooks/use-anchored-popup-portal.d.ts.map +1 -1
- package/dist/hooks/use-anchored-popup-portal.js +1 -3
- package/dist/hooks/use-anchored-popup-portal.js.map +1 -1
- package/dist/illustrations/incoming-webhook.svg.cjs +1 -1
- package/dist/illustrations/incoming-webhook.svg.cjs.map +1 -1
- package/dist/illustrations/incoming-webhook.svg.js +1 -1
- package/dist/illustrations/incoming-webhook.svg.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +0 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +170 -204
- package/dist/index.js.map +1 -1
- package/dist/utils/anchoredPopupPlacement.cjs.map +1 -1
- package/dist/utils/anchoredPopupPlacement.d.ts.map +1 -1
- package/dist/utils/anchoredPopupPlacement.js +4 -1
- package/dist/utils/anchoredPopupPlacement.js.map +1 -1
- package/package.json +1 -44
- package/dist/components/admin-console-sidebar/AdminConsoleSidebar.cjs +0 -2
- package/dist/components/admin-console-sidebar/AdminConsoleSidebar.cjs.map +0 -1
- package/dist/components/admin-console-sidebar/AdminConsoleSidebar.css +0 -1
- package/dist/components/admin-console-sidebar/AdminConsoleSidebar.d.ts +0 -12
- package/dist/components/admin-console-sidebar/AdminConsoleSidebar.d.ts.map +0 -1
- package/dist/components/admin-console-sidebar/AdminConsoleSidebar.js +0 -122
- package/dist/components/admin-console-sidebar/AdminConsoleSidebar.js.map +0 -1
- package/dist/components/admin-console-sidebar/AdminConsoleSidebar.module.scss.cjs +0 -2
- package/dist/components/admin-console-sidebar/AdminConsoleSidebar.module.scss.cjs.map +0 -1
- package/dist/components/admin-console-sidebar/AdminConsoleSidebar.module.scss.js +0 -20
- package/dist/components/admin-console-sidebar/AdminConsoleSidebar.module.scss.js.map +0 -1
- package/dist/components/admin-console-sidebar/adminConsoleSidebarModel.d.ts +0 -14
- package/dist/components/admin-console-sidebar/adminConsoleSidebarModel.d.ts.map +0 -1
- package/dist/components/admin-console-sidebar/index.cjs +0 -2
- package/dist/components/admin-console-sidebar/index.cjs.map +0 -1
- package/dist/components/admin-console-sidebar/index.d.ts +0 -4
- package/dist/components/admin-console-sidebar/index.d.ts.map +0 -1
- package/dist/components/admin-console-sidebar/index.js +0 -5
- package/dist/components/admin-console-sidebar/index.js.map +0 -1
- package/dist/components/channel-category-menu/ChannelCategoryMenu.cjs +0 -2
- package/dist/components/channel-category-menu/ChannelCategoryMenu.cjs.map +0 -1
- package/dist/components/channel-category-menu/ChannelCategoryMenu.css +0 -1
- package/dist/components/channel-category-menu/ChannelCategoryMenu.d.ts +0 -10
- package/dist/components/channel-category-menu/ChannelCategoryMenu.d.ts.map +0 -1
- package/dist/components/channel-category-menu/ChannelCategoryMenu.js +0 -103
- package/dist/components/channel-category-menu/ChannelCategoryMenu.js.map +0 -1
- package/dist/components/channel-category-menu/ChannelCategoryMenu.module.scss.cjs +0 -2
- package/dist/components/channel-category-menu/ChannelCategoryMenu.module.scss.cjs.map +0 -1
- package/dist/components/channel-category-menu/ChannelCategoryMenu.module.scss.js +0 -8
- package/dist/components/channel-category-menu/ChannelCategoryMenu.module.scss.js.map +0 -1
- package/dist/components/channel-category-menu/index.cjs +0 -2
- package/dist/components/channel-category-menu/index.cjs.map +0 -1
- package/dist/components/channel-category-menu/index.d.ts +0 -3
- package/dist/components/channel-category-menu/index.d.ts.map +0 -1
- package/dist/components/channel-category-menu/index.js +0 -5
- package/dist/components/channel-category-menu/index.js.map +0 -1
- package/dist/components/channel-header-menu/ChannelHeaderMenu.cjs +0 -2
- package/dist/components/channel-header-menu/ChannelHeaderMenu.cjs.map +0 -1
- package/dist/components/channel-header-menu/ChannelHeaderMenu.d.ts +0 -8
- package/dist/components/channel-header-menu/ChannelHeaderMenu.d.ts.map +0 -1
- package/dist/components/channel-header-menu/ChannelHeaderMenu.js +0 -115
- package/dist/components/channel-header-menu/ChannelHeaderMenu.js.map +0 -1
- package/dist/components/channel-header-menu/index.cjs +0 -2
- package/dist/components/channel-header-menu/index.cjs.map +0 -1
- package/dist/components/channel-header-menu/index.d.ts +0 -3
- package/dist/components/channel-header-menu/index.d.ts.map +0 -1
- package/dist/components/channel-header-menu/index.js +0 -5
- package/dist/components/channel-header-menu/index.js.map +0 -1
- package/dist/components/channel-menu/ChannelMenu.cjs +0 -2
- package/dist/components/channel-menu/ChannelMenu.cjs.map +0 -1
- package/dist/components/channel-menu/ChannelMenu.d.ts +0 -8
- package/dist/components/channel-menu/ChannelMenu.d.ts.map +0 -1
- package/dist/components/channel-menu/ChannelMenu.js +0 -91
- package/dist/components/channel-menu/ChannelMenu.js.map +0 -1
- package/dist/components/channel-menu/index.cjs +0 -2
- package/dist/components/channel-menu/index.cjs.map +0 -1
- package/dist/components/channel-menu/index.d.ts +0 -3
- package/dist/components/channel-menu/index.d.ts.map +0 -1
- package/dist/components/channel-menu/index.js +0 -5
- package/dist/components/channel-menu/index.js.map +0 -1
- package/dist/components/channels-sidebar/ChannelsSidebar.cjs +0 -2
- package/dist/components/channels-sidebar/ChannelsSidebar.cjs.map +0 -1
- package/dist/components/channels-sidebar/ChannelsSidebar.css +0 -1
- package/dist/components/channels-sidebar/ChannelsSidebar.d.ts +0 -57
- package/dist/components/channels-sidebar/ChannelsSidebar.d.ts.map +0 -1
- package/dist/components/channels-sidebar/ChannelsSidebar.js +0 -177
- package/dist/components/channels-sidebar/ChannelsSidebar.js.map +0 -1
- package/dist/components/channels-sidebar/ChannelsSidebar.module.scss.cjs +0 -2
- package/dist/components/channels-sidebar/ChannelsSidebar.module.scss.cjs.map +0 -1
- package/dist/components/channels-sidebar/ChannelsSidebar.module.scss.js +0 -35
- package/dist/components/channels-sidebar/ChannelsSidebar.module.scss.js.map +0 -1
- package/dist/components/channels-sidebar/channelsSidebarModel.cjs +0 -2
- package/dist/components/channels-sidebar/channelsSidebarModel.cjs.map +0 -1
- package/dist/components/channels-sidebar/channelsSidebarModel.d.ts +0 -22
- package/dist/components/channels-sidebar/channelsSidebarModel.d.ts.map +0 -1
- package/dist/components/channels-sidebar/channelsSidebarModel.js +0 -20
- package/dist/components/channels-sidebar/channelsSidebarModel.js.map +0 -1
- package/dist/components/channels-sidebar/index.cjs +0 -2
- package/dist/components/channels-sidebar/index.cjs.map +0 -1
- package/dist/components/channels-sidebar/index.d.ts +0 -6
- package/dist/components/channels-sidebar/index.d.ts.map +0 -1
- package/dist/components/channels-sidebar/index.js +0 -12
- package/dist/components/channels-sidebar/index.js.map +0 -1
- package/dist/components/global-header/GlobalHeader.cjs +0 -2
- package/dist/components/global-header/GlobalHeader.cjs.map +0 -1
- package/dist/components/global-header/GlobalHeader.css +0 -1
- package/dist/components/global-header/GlobalHeader.d.ts +0 -28
- package/dist/components/global-header/GlobalHeader.d.ts.map +0 -1
- package/dist/components/global-header/GlobalHeader.js +0 -157
- package/dist/components/global-header/GlobalHeader.js.map +0 -1
- package/dist/components/global-header/GlobalHeader.module.scss.cjs +0 -2
- package/dist/components/global-header/GlobalHeader.module.scss.cjs.map +0 -1
- package/dist/components/global-header/GlobalHeader.module.scss.js +0 -20
- package/dist/components/global-header/GlobalHeader.module.scss.js.map +0 -1
- package/dist/components/global-header/index.cjs +0 -2
- package/dist/components/global-header/index.cjs.map +0 -1
- package/dist/components/global-header/index.d.ts +0 -3
- package/dist/components/global-header/index.d.ts.map +0 -1
- package/dist/components/global-header/index.js +0 -5
- package/dist/components/global-header/index.js.map +0 -1
- package/dist/components/help-menu/HelpMenu.cjs +0 -2
- package/dist/components/help-menu/HelpMenu.cjs.map +0 -1
- package/dist/components/help-menu/HelpMenu.d.ts +0 -8
- package/dist/components/help-menu/HelpMenu.d.ts.map +0 -1
- package/dist/components/help-menu/HelpMenu.js +0 -64
- package/dist/components/help-menu/HelpMenu.js.map +0 -1
- package/dist/components/help-menu/index.cjs +0 -2
- package/dist/components/help-menu/index.cjs.map +0 -1
- package/dist/components/help-menu/index.d.ts +0 -3
- package/dist/components/help-menu/index.d.ts.map +0 -1
- package/dist/components/help-menu/index.js +0 -5
- package/dist/components/help-menu/index.js.map +0 -1
- package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.cjs +0 -2
- package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.cjs.map +0 -1
- package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.d.ts +0 -12
- package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.d.ts.map +0 -1
- package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.js +0 -172
- package/dist/components/message-more-options-menu/MessageMoreOptionsMenu.js.map +0 -1
- package/dist/components/message-more-options-menu/index.cjs +0 -2
- package/dist/components/message-more-options-menu/index.cjs.map +0 -1
- package/dist/components/message-more-options-menu/index.d.ts +0 -3
- package/dist/components/message-more-options-menu/index.d.ts.map +0 -1
- package/dist/components/message-more-options-menu/index.js +0 -5
- package/dist/components/message-more-options-menu/index.js.map +0 -1
- package/dist/components/plus-menu/PlusMenu.cjs +0 -2
- package/dist/components/plus-menu/PlusMenu.cjs.map +0 -1
- package/dist/components/plus-menu/PlusMenu.d.ts +0 -8
- package/dist/components/plus-menu/PlusMenu.d.ts.map +0 -1
- package/dist/components/plus-menu/PlusMenu.js +0 -69
- package/dist/components/plus-menu/PlusMenu.js.map +0 -1
- package/dist/components/plus-menu/index.cjs +0 -2
- package/dist/components/plus-menu/index.cjs.map +0 -1
- package/dist/components/plus-menu/index.d.ts +0 -3
- package/dist/components/plus-menu/index.d.ts.map +0 -1
- package/dist/components/plus-menu/index.js +0 -5
- package/dist/components/plus-menu/index.js.map +0 -1
- package/dist/components/product-switcher-menu/ProductSwitcherMenu.cjs +0 -2
- package/dist/components/product-switcher-menu/ProductSwitcherMenu.cjs.map +0 -1
- package/dist/components/product-switcher-menu/ProductSwitcherMenu.css +0 -1
- package/dist/components/product-switcher-menu/ProductSwitcherMenu.d.ts +0 -47
- package/dist/components/product-switcher-menu/ProductSwitcherMenu.d.ts.map +0 -1
- package/dist/components/product-switcher-menu/ProductSwitcherMenu.js +0 -110
- package/dist/components/product-switcher-menu/ProductSwitcherMenu.js.map +0 -1
- package/dist/components/product-switcher-menu/ProductSwitcherMenu.module.scss.cjs +0 -2
- package/dist/components/product-switcher-menu/ProductSwitcherMenu.module.scss.cjs.map +0 -1
- package/dist/components/product-switcher-menu/ProductSwitcherMenu.module.scss.js +0 -8
- package/dist/components/product-switcher-menu/ProductSwitcherMenu.module.scss.js.map +0 -1
- package/dist/components/product-switcher-menu/index.cjs +0 -2
- package/dist/components/product-switcher-menu/index.cjs.map +0 -1
- package/dist/components/product-switcher-menu/index.d.ts +0 -4
- package/dist/components/product-switcher-menu/index.d.ts.map +0 -1
- package/dist/components/product-switcher-menu/index.js +0 -6
- package/dist/components/product-switcher-menu/index.js.map +0 -1
- package/dist/components/team-menu/TeamMenu.cjs +0 -2
- package/dist/components/team-menu/TeamMenu.cjs.map +0 -1
- package/dist/components/team-menu/TeamMenu.css +0 -1
- package/dist/components/team-menu/TeamMenu.d.ts +0 -15
- package/dist/components/team-menu/TeamMenu.d.ts.map +0 -1
- package/dist/components/team-menu/TeamMenu.js +0 -107
- package/dist/components/team-menu/TeamMenu.js.map +0 -1
- package/dist/components/team-menu/TeamMenu.module.scss.cjs +0 -2
- package/dist/components/team-menu/TeamMenu.module.scss.cjs.map +0 -1
- package/dist/components/team-menu/TeamMenu.module.scss.js +0 -7
- package/dist/components/team-menu/TeamMenu.module.scss.js.map +0 -1
- package/dist/components/team-menu/index.cjs +0 -2
- package/dist/components/team-menu/index.cjs.map +0 -1
- package/dist/components/team-menu/index.d.ts +0 -3
- package/dist/components/team-menu/index.d.ts.map +0 -1
- package/dist/components/team-menu/index.js +0 -5
- package/dist/components/team-menu/index.js.map +0 -1
- package/dist/components/team-sidebar/TeamSidebar.cjs +0 -2
- package/dist/components/team-sidebar/TeamSidebar.cjs.map +0 -1
- package/dist/components/team-sidebar/TeamSidebar.css +0 -1
- package/dist/components/team-sidebar/TeamSidebar.d.ts +0 -21
- package/dist/components/team-sidebar/TeamSidebar.d.ts.map +0 -1
- package/dist/components/team-sidebar/TeamSidebar.js +0 -85
- package/dist/components/team-sidebar/TeamSidebar.js.map +0 -1
- package/dist/components/team-sidebar/TeamSidebar.module.scss.cjs +0 -2
- package/dist/components/team-sidebar/TeamSidebar.module.scss.cjs.map +0 -1
- package/dist/components/team-sidebar/TeamSidebar.module.scss.js +0 -13
- package/dist/components/team-sidebar/TeamSidebar.module.scss.js.map +0 -1
- package/dist/components/team-sidebar/index.cjs +0 -2
- package/dist/components/team-sidebar/index.cjs.map +0 -1
- package/dist/components/team-sidebar/index.d.ts +0 -3
- package/dist/components/team-sidebar/index.d.ts.map +0 -1
- package/dist/components/team-sidebar/index.js +0 -5
- package/dist/components/team-sidebar/index.js.map +0 -1
- package/dist/components/thread-actions-menu/ThreadActionsMenu.cjs +0 -2
- package/dist/components/thread-actions-menu/ThreadActionsMenu.cjs.map +0 -1
- package/dist/components/thread-actions-menu/ThreadActionsMenu.d.ts +0 -8
- package/dist/components/thread-actions-menu/ThreadActionsMenu.d.ts.map +0 -1
- package/dist/components/thread-actions-menu/ThreadActionsMenu.js +0 -77
- package/dist/components/thread-actions-menu/ThreadActionsMenu.js.map +0 -1
- package/dist/components/thread-actions-menu/index.cjs +0 -2
- package/dist/components/thread-actions-menu/index.cjs.map +0 -1
- package/dist/components/thread-actions-menu/index.d.ts +0 -3
- package/dist/components/thread-actions-menu/index.d.ts.map +0 -1
- package/dist/components/thread-actions-menu/index.js +0 -5
- package/dist/components/thread-actions-menu/index.js.map +0 -1
- package/dist/index.css +0 -162
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateRangePicker.js","sources":["../../../src/components/date-range-picker/DateRangePicker.tsx"],"sourcesContent":["import type { InputHTMLAttributes, KeyboardEvent } from 'react';\nimport { useState, useCallback, useEffect, useId, useRef } from 'react';\nimport Button from '@/components/button/Button';\nimport IconButton, {\n ICON_BUTTON_ICON_SIZES,\n} from '@/components/icon-button/IconButton';\nimport Icon from '@/components/icon/Icon';\nimport CalendarOutlineIcon from '@mattermost/compass-icons/components/calendar-outline';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport ChevronLeftIcon from '@mattermost/compass-icons/components/chevron-left';\nimport ChevronRightIcon from '@mattermost/compass-icons/components/chevron-right';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport styles from './DateRangePicker.module.scss';\n\nexport type DateRangePickerMode = 'date' | 'range';\n\nexport interface DateRangePickerProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'defaultValue' | 'onChange' | 'type' | 'size'\n> {\n /** Optional CSS class name applied to the root element. */\n className?: string;\n /** Selection mode: single date or range. Default: 'date'. */\n mode?: DateRangePickerMode;\n /** Controlled selected date (single mode). ISO string yyyy-mm-dd. */\n value?: string;\n /** Controlled start date (range mode). ISO string. */\n startDate?: string;\n /** Controlled end date (range mode). ISO string. */\n endDate?: string;\n /** Called when a date is selected (single mode). */\n onChange?: (date: string) => void;\n /** Called when range changes (range mode). */\n onRangeChange?: (start: string, end: string) => void;\n /** Portal mount node for the calendar; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled calendar. */\n zIndex?: number;\n}\n\n/** Approximate calendar panel height for the initial flip decision. */\nconst CALENDAR_PREFERRED_HEIGHT = 360;\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nfunction formatDateDisplay(iso: string): string {\n if (!iso) return '';\n const [y, m, d] = iso.split('-');\n return `${m}/${d}/${y}`;\n}\n\nfunction toIso(year: number, month: number, day: number): string {\n return `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n}\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfWeek(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nfunction isSameDay(a: string, b: string): boolean {\n return a === b;\n}\n\nfunction isBetween(date: string, start: string, end: string): boolean {\n if (!start || !end) return false;\n const [s, e] = start < end ? [start, end] : [end, start];\n return date > s && date < e;\n}\n\nfunction dayFromIso(iso: string, year: number, month: number): number | null {\n if (!iso) return null;\n const [y, m, d] = iso.split('-').map(Number);\n if (y === year && m === month + 1) return d;\n return null;\n}\n\n/**\n * The Date and Range Picker lets people pick a single date or a start/end range from a\n * calendar. The trigger is a compact field; the calendar is a popover anchored 4px below it.\n */\nexport default function DateRangePicker({\n className = '',\n mode = 'date',\n value,\n startDate,\n endDate,\n onChange,\n onRangeChange,\n disabled,\n id: idProp,\n portalContainer = null,\n zIndex,\n}: DateRangePickerProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const popoverId = `${id}-popover`;\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n\n const today = new Date();\n const todayIso = toIso(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n );\n\n // Calendar display state\n const [displayYear, setDisplayYear] = useState(today.getFullYear());\n const [displayMonth, setDisplayMonth] = useState(today.getMonth());\n const [isOpen, setIsOpen] = useState(false);\n /** Roving tabindex day-of-month within the visible grid. */\n const [focusedDay, setFocusedDay] = useState(1);\n\n // Internal selection state (uncontrolled fallback)\n const [internalDate, setInternalDate] = useState('');\n const [internalStart, setInternalStart] = useState('');\n const [internalEnd, setInternalEnd] = useState('');\n\n const selectedDate = value ?? internalDate;\n const selectedStart = startDate ?? internalStart;\n const selectedEnd = endDate ?? internalEnd;\n\n const hasValue =\n mode === 'date' ? Boolean(selectedDate) : Boolean(selectedStart);\n\n const { mounted: popoverMounted, visible: popoverVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n style: popoverStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(triggerRef, popoverMounted, {\n preferredHeight: CALENDAR_PREFERRED_HEIGHT,\n portalContainer,\n zIndex,\n matchWidth: false,\n });\n\n const close = useCallback((restoreFocus = true) => {\n setIsOpen(false);\n if (restoreFocus) {\n triggerRef.current?.focus();\n }\n }, []);\n\n useOutsideClose(rootRef, isOpen, () => close(true), portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n function handleKeyDown(e: globalThis.KeyboardEvent) {\n if (e.key === 'Escape') {\n e.preventDefault();\n close(true);\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, close]);\n\n // Close when focus leaves the field and the portaled calendar.\n useEffect(() => {\n if (!isOpen) return;\n\n function handleFocusIn(e: FocusEvent) {\n const target = e.target as Node | null;\n if (!target) return;\n if (rootRef.current?.contains(target)) return;\n if (portalRef.current?.contains(target)) return;\n close(false);\n }\n\n document.addEventListener('focusin', handleFocusIn);\n return () => document.removeEventListener('focusin', handleFocusIn);\n }, [isOpen, close, portalRef]);\n\n const daysInMonth = getDaysInMonth(displayYear, displayMonth);\n\n const initialFocusDay = useCallback(() => {\n if (mode === 'date') {\n const fromValue = dayFromIso(selectedDate, displayYear, displayMonth);\n if (fromValue) return fromValue;\n } else {\n const fromEnd = dayFromIso(selectedEnd, displayYear, displayMonth);\n if (fromEnd) return fromEnd;\n const fromStart = dayFromIso(selectedStart, displayYear, displayMonth);\n if (fromStart) return fromStart;\n }\n const fromToday = dayFromIso(todayIso, displayYear, displayMonth);\n if (fromToday) return fromToday;\n return 1;\n }, [\n mode,\n selectedDate,\n selectedStart,\n selectedEnd,\n displayYear,\n displayMonth,\n todayIso,\n ]);\n\n // On open: after the enter transition enables pointer-events, move focus\n // into the day grid (selected day, today, or the 1st).\n useEffect(() => {\n if (!isOpen || !popoverVisible) return;\n const day = initialFocusDay();\n setFocusedDay(day);\n const frame = requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n return () => cancelAnimationFrame(frame);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- open/visible transition only\n }, [isOpen, popoverVisible]);\n\n const focusDayButton = useCallback((day: number) => {\n setFocusedDay(day);\n requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n }, []);\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n setIsOpen((open) => !open);\n }, [disabled]);\n\n const handlePrevMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 0) {\n setDisplayYear((y) => y - 1);\n return 11;\n }\n return m - 1;\n });\n }, []);\n\n const handleNextMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 11) {\n setDisplayYear((y) => y + 1);\n return 0;\n }\n return m + 1;\n });\n }, []);\n\n const goToAdjacentMonth = useCallback(\n (direction: -1 | 1, preferDay: number) => {\n const nextMonth =\n direction === -1\n ? displayMonth === 0\n ? 11\n : displayMonth - 1\n : displayMonth === 11\n ? 0\n : displayMonth + 1;\n const nextYear =\n direction === -1\n ? displayMonth === 0\n ? displayYear - 1\n : displayYear\n : displayMonth === 11\n ? displayYear + 1\n : displayYear;\n const maxDay = getDaysInMonth(nextYear, nextMonth);\n setDisplayYear(nextYear);\n setDisplayMonth(nextMonth);\n focusDayButton(Math.min(preferDay, maxDay));\n },\n [displayMonth, displayYear, focusDayButton],\n );\n\n const handleToday = useCallback(() => {\n const now = new Date();\n setDisplayYear(now.getFullYear());\n setDisplayMonth(now.getMonth());\n focusDayButton(now.getDate());\n }, [focusDayButton]);\n\n const handleDayClick = useCallback(\n (iso: string, day: number) => {\n if (mode === 'date') {\n if (onChange) {\n onChange(iso);\n } else {\n setInternalDate(iso);\n }\n close(true);\n } else {\n // range mode: first click = start, second = end\n if (!selectedStart || (selectedStart && selectedEnd)) {\n setInternalStart(iso);\n setInternalEnd('');\n setFocusedDay(day);\n } else {\n const [s, e] =\n iso >= selectedStart ? [selectedStart, iso] : [iso, selectedStart];\n if (onRangeChange) {\n onRangeChange(s, e);\n } else {\n setInternalStart(s);\n setInternalEnd(e);\n }\n close(true);\n }\n }\n },\n [mode, selectedStart, selectedEnd, onChange, onRangeChange, close],\n );\n\n const moveFocusedDay = useCallback(\n (delta: number) => {\n const next = focusedDay + delta;\n if (next >= 1 && next <= daysInMonth) {\n focusDayButton(next);\n return;\n }\n if (next < 1) {\n goToAdjacentMonth(-1, getDaysInMonth(\n displayMonth === 0 ? displayYear - 1 : displayYear,\n displayMonth === 0 ? 11 : displayMonth - 1,\n ) + next);\n } else {\n goToAdjacentMonth(1, next - daysInMonth);\n }\n },\n [\n focusedDay,\n daysInMonth,\n displayMonth,\n displayYear,\n focusDayButton,\n goToAdjacentMonth,\n ],\n );\n\n const handleDayKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>, day: number) => {\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n moveFocusedDay(-1);\n break;\n case 'ArrowRight':\n e.preventDefault();\n moveFocusedDay(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n moveFocusedDay(-7);\n break;\n case 'ArrowDown':\n e.preventDefault();\n moveFocusedDay(7);\n break;\n case 'Home':\n e.preventDefault();\n focusDayButton(1);\n break;\n case 'End':\n e.preventDefault();\n focusDayButton(daysInMonth);\n break;\n case 'PageUp':\n e.preventDefault();\n goToAdjacentMonth(-1, day);\n break;\n case 'PageDown':\n e.preventDefault();\n goToAdjacentMonth(1, day);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n setFocusedDay(day);\n handleDayClick(toIso(displayYear, displayMonth, day), day);\n break;\n default:\n break;\n }\n },\n [\n moveFocusedDay,\n focusDayButton,\n daysInMonth,\n goToAdjacentMonth,\n handleDayClick,\n displayYear,\n displayMonth,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n handleToggle();\n break;\n case 'ArrowDown':\n if (!isOpen) {\n e.preventDefault();\n setIsOpen(true);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close(true);\n }\n break;\n default:\n break;\n }\n },\n [disabled, handleToggle, isOpen, close],\n );\n\n // Keep focusedDay in range when the month changes (nav buttons / PageUp).\n useEffect(() => {\n if (!isOpen) return;\n setFocusedDay((d) => Math.min(Math.max(1, d), daysInMonth));\n }, [isOpen, daysInMonth, displayMonth, displayYear]);\n\n // Build calendar grid\n const firstDay = getFirstDayOfWeek(displayYear, displayMonth);\n\n // Build weeks (rows of 7 cells; null = empty)\n const cells: (number | null)[] = [\n ...Array(firstDay).fill(null),\n ...Array.from({ length: daysInMonth }, (_, i) => i + 1),\n ];\n // Pad to complete last row\n while (cells.length % 7 !== 0) cells.push(null);\n const weeks: (number | null)[][] = [];\n for (let i = 0; i < cells.length; i += 7) weeks.push(cells.slice(i, i + 7));\n\n const displayValue =\n mode === 'date'\n ? formatDateDisplay(selectedDate)\n : selectedStart\n ? `${formatDateDisplay(selectedStart)}${selectedEnd ? ` â ${formatDateDisplay(selectedEnd)}` : ''}`\n : '';\n\n const rootClass = [\n styles['date-range-picker'],\n isOpen ? styles['date-range-picker--open'] : '',\n disabled ? styles['date-range-picker--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={rootRef} className={rootClass}>\n {/* Trigger input */}\n <div\n ref={triggerRef}\n className={styles['date-range-picker__trigger']}\n role=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={popoverMounted ? popoverId : undefined}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : 0}\n id={id}\n data-has-value={hasValue ? '' : undefined}\n onClick={handleToggle}\n onKeyDown={handleTriggerKeyDown}\n >\n <span className={styles['date-range-picker__calendar-icon']} aria-hidden>\n <Icon size=\"16\" glyph={<CalendarOutlineIcon />} />\n </span>\n <span className={styles['date-range-picker__value']}>\n {displayValue || 'mm/dd/yyyy'}\n </span>\n <span className={styles['date-range-picker__chevron']} aria-hidden>\n <Icon size=\"16\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n\n {/* Calendar popover */}\n {popoverMounted &&\n renderPortal(\n <div\n ref={portalRef}\n id={popoverId}\n className={[\n styles['date-range-picker__popover'],\n placement === 'above'\n ? styles['date-range-picker__popover--above']\n : '',\n popoverVisible\n ? styles['date-range-picker__popover--visible']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popoverStyle}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label=\"Date picker\"\n >\n {/* Header */}\n <div className={styles['date-range-picker__header']}>\n <span className={styles['date-range-picker__month-label']} aria-live=\"polite\">\n {MONTHS[displayMonth]} {displayYear}\n </span>\n <div className={styles['date-range-picker__header-actions']}>\n <Button\n emphasis=\"quaternary\"\n size=\"small\"\n leadingIcon={<Icon size=\"16\" glyph={<CalendarOutlineIcon />} />}\n onClick={handleToday}\n >\n Today\n </Button>\n <div className={styles['date-range-picker__nav-buttons']}>\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronLeftIcon />}\n />\n }\n onClick={handlePrevMonth}\n aria-label=\"Previous month\"\n />\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronRightIcon />}\n />\n }\n onClick={handleNextMonth}\n aria-label=\"Next month\"\n />\n </div>\n </div>\n </div>\n\n {/* Weekday headers */}\n <div className={styles['date-range-picker__weekdays']} aria-hidden>\n {WEEKDAYS.map((d) => (\n <span key={d} className={styles['date-range-picker__weekday']}>\n {d}\n </span>\n ))}\n </div>\n\n {/* Date grid */}\n <div\n ref={gridRef}\n className={styles['date-range-picker__grid']}\n role=\"grid\"\n aria-label={`${MONTHS[displayMonth]} ${displayYear}`}\n >\n {weeks.map((week, wi) => (\n <div\n key={wi}\n className={styles['date-range-picker__week']}\n role=\"row\"\n >\n {week.map((day, di) => {\n if (day == null) {\n return (\n <span\n key={di}\n className={styles['date-range-picker__day-empty']}\n role=\"gridcell\"\n />\n );\n }\n const iso = toIso(displayYear, displayMonth, day);\n const isToday = iso === todayIso;\n const isRangeStart =\n mode === 'range' && isSameDay(iso, selectedStart);\n const isRangeEnd =\n mode === 'range' &&\n Boolean(selectedEnd) &&\n isSameDay(iso, selectedEnd);\n const isSelected =\n mode === 'date'\n ? isSameDay(iso, selectedDate)\n : isRangeStart || isRangeEnd;\n const isInRange =\n mode === 'range' &&\n isBetween(iso, selectedStart, selectedEnd);\n const hasRangeSpan =\n mode === 'range' &&\n Boolean(selectedStart) &&\n Boolean(selectedEnd) &&\n selectedStart !== selectedEnd;\n\n const cellClass = [\n styles['date-range-picker__day-cell'],\n isInRange\n ? styles['date-range-picker__day-cell--in-range']\n : '',\n hasRangeSpan && isRangeStart\n ? styles['date-range-picker__day-cell--range-start']\n : '',\n hasRangeSpan && isRangeEnd\n ? styles['date-range-picker__day-cell--range-end']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const dayClass = [\n styles['date-range-picker__day'],\n isSelected ? styles['date-range-picker__day--selected'] : '',\n isToday && !isSelected\n ? styles['date-range-picker__day--today']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div key={di} className={cellClass} role=\"gridcell\">\n <button\n type=\"button\"\n className={dayClass}\n data-day={day}\n tabIndex={focusedDay === day ? 0 : -1}\n onClick={() => handleDayClick(iso, day)}\n onFocus={() => setFocusedDay(day)}\n onKeyDown={(e) => handleDayKeyDown(e, day)}\n aria-label={iso}\n aria-pressed={isSelected}\n aria-current={isToday ? 'date' : undefined}\n >\n {day}\n </button>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>,\n )}\n </div>\n );\n}\n"],"names":["CALENDAR_PREFERRED_HEIGHT","WEEKDAYS","MONTHS","formatDateDisplay","iso","y","m","d","toIso","year","month","day","getDaysInMonth","getFirstDayOfWeek","isSameDay","a","b","isBetween","date","start","end","s","e","dayFromIso","DateRangePicker","className","mode","value","startDate","endDate","onChange","onRangeChange","disabled","idProp","portalContainer","zIndex","generatedId","useId","id","popoverId","rootRef","useRef","triggerRef","gridRef","today","todayIso","displayYear","setDisplayYear","useState","displayMonth","setDisplayMonth","isOpen","setIsOpen","focusedDay","setFocusedDay","internalDate","setInternalDate","internalStart","setInternalStart","internalEnd","setInternalEnd","selectedDate","selectedStart","selectedEnd","hasValue","popoverMounted","popoverVisible","usePopoverTransition","placement","popoverStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","useCallback","restoreFocus","_a","useOutsideClose","useEffect","handleKeyDown","handleFocusIn","target","_b","daysInMonth","initialFocusDay","fromValue","fromEnd","fromStart","fromToday","frame","focusDayButton","handleToggle","open","handlePrevMonth","handleNextMonth","goToAdjacentMonth","direction","preferDay","nextMonth","nextYear","maxDay","handleToday","now","handleDayClick","moveFocusedDay","delta","next","handleDayKeyDown","handleTriggerKeyDown","firstDay","cells","_","i","weeks","displayValue","rootClass","styles","jsxs","jsx","Icon","CalendarOutlineIcon","ChevronDownIcon","Button","IconButton","ICON_BUTTON_ICON_SIZES","ChevronLeftIcon","ChevronRightIcon","week","wi","di","isToday","isRangeStart","isRangeEnd","isSelected","isInRange","hasRangeSpan","cellClass","dayClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateRangePicker.js","sources":["../../../src/components/date-range-picker/DateRangePicker.tsx"],"sourcesContent":["import type { InputHTMLAttributes, KeyboardEvent } from 'react';\nimport { useState, useCallback, useEffect, useId, useRef } from 'react';\nimport Button from '@/components/button/Button';\nimport IconButton, {\n ICON_BUTTON_ICON_SIZES,\n} from '@/components/icon-button/IconButton';\nimport Icon from '@/components/icon/Icon';\nimport CalendarOutlineIcon from '@mattermost/compass-icons/components/calendar-outline';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport ChevronLeftIcon from '@mattermost/compass-icons/components/chevron-left';\nimport ChevronRightIcon from '@mattermost/compass-icons/components/chevron-right';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport styles from './DateRangePicker.module.scss';\n\nexport type DateRangePickerMode = 'date' | 'range';\n\nexport interface DateRangePickerProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'defaultValue' | 'onChange' | 'type' | 'size'\n> {\n /** Optional CSS class name applied to the root element. */\n className?: string;\n /** Selection mode: single date or range. Default: 'date'. */\n mode?: DateRangePickerMode;\n /** Controlled selected date (single mode). ISO string yyyy-mm-dd. */\n value?: string;\n /** Controlled start date (range mode). ISO string. */\n startDate?: string;\n /** Controlled end date (range mode). ISO string. */\n endDate?: string;\n /** Called when a date is selected (single mode). */\n onChange?: (date: string) => void;\n /** Called when range changes (range mode). */\n onRangeChange?: (start: string, end: string) => void;\n /** Portal mount node for the calendar; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled calendar. */\n zIndex?: number;\n}\n\n/** Approximate calendar panel height for the initial flip decision. */\nconst CALENDAR_PREFERRED_HEIGHT = 360;\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nfunction formatDateDisplay(iso: string): string {\n if (!iso) return '';\n const [y, m, d] = iso.split('-');\n return `${m}/${d}/${y}`;\n}\n\nfunction toIso(year: number, month: number, day: number): string {\n return `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n}\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfWeek(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nfunction isSameDay(a: string, b: string): boolean {\n return a === b;\n}\n\nfunction isBetween(date: string, start: string, end: string): boolean {\n if (!start || !end) return false;\n const [s, e] = start < end ? [start, end] : [end, start];\n return date > s && date < e;\n}\n\nfunction dayFromIso(iso: string, year: number, month: number): number | null {\n if (!iso) return null;\n const [y, m, d] = iso.split('-').map(Number);\n if (y === year && m === month + 1) return d;\n return null;\n}\n\n/**\n * The Date and Range Picker lets people pick a single date or a start/end range from a\n * calendar. The trigger is a compact field; the calendar is a popover anchored 4px below it.\n */\nexport default function DateRangePicker({\n className = '',\n mode = 'date',\n value,\n startDate,\n endDate,\n onChange,\n onRangeChange,\n disabled,\n id: idProp,\n portalContainer = null,\n zIndex,\n}: DateRangePickerProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const popoverId = `${id}-popover`;\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n\n const today = new Date();\n const todayIso = toIso(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n );\n\n // Calendar display state\n const [displayYear, setDisplayYear] = useState(today.getFullYear());\n const [displayMonth, setDisplayMonth] = useState(today.getMonth());\n const [isOpen, setIsOpen] = useState(false);\n /** Roving tabindex day-of-month within the visible grid. */\n const [focusedDay, setFocusedDay] = useState(1);\n\n // Internal selection state (uncontrolled fallback)\n const [internalDate, setInternalDate] = useState('');\n const [internalStart, setInternalStart] = useState('');\n const [internalEnd, setInternalEnd] = useState('');\n\n const selectedDate = value ?? internalDate;\n const selectedStart = startDate ?? internalStart;\n const selectedEnd = endDate ?? internalEnd;\n\n const hasValue =\n mode === 'date' ? Boolean(selectedDate) : Boolean(selectedStart);\n\n const { mounted: popoverMounted, visible: popoverVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n style: popoverStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(triggerRef, popoverMounted, {\n preferredHeight: CALENDAR_PREFERRED_HEIGHT,\n portalContainer,\n zIndex,\n matchWidth: false,\n });\n\n const close = useCallback((restoreFocus = true) => {\n setIsOpen(false);\n if (restoreFocus) {\n triggerRef.current?.focus();\n }\n }, []);\n\n useOutsideClose(rootRef, isOpen, () => close(true), portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n function handleKeyDown(e: globalThis.KeyboardEvent) {\n if (e.key === 'Escape') {\n e.preventDefault();\n close(true);\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, close]);\n\n // Close when focus leaves the field and the portaled calendar.\n useEffect(() => {\n if (!isOpen) return;\n\n function handleFocusIn(e: FocusEvent) {\n const target = e.target as Node | null;\n if (!target) return;\n if (rootRef.current?.contains(target)) return;\n if (portalRef.current?.contains(target)) return;\n close(false);\n }\n\n document.addEventListener('focusin', handleFocusIn);\n return () => document.removeEventListener('focusin', handleFocusIn);\n }, [isOpen, close, portalRef]);\n\n const daysInMonth = getDaysInMonth(displayYear, displayMonth);\n\n const initialFocusDay = useCallback(() => {\n if (mode === 'date') {\n const fromValue = dayFromIso(selectedDate, displayYear, displayMonth);\n if (fromValue) return fromValue;\n } else {\n const fromEnd = dayFromIso(selectedEnd, displayYear, displayMonth);\n if (fromEnd) return fromEnd;\n const fromStart = dayFromIso(selectedStart, displayYear, displayMonth);\n if (fromStart) return fromStart;\n }\n const fromToday = dayFromIso(todayIso, displayYear, displayMonth);\n if (fromToday) return fromToday;\n return 1;\n }, [\n mode,\n selectedDate,\n selectedStart,\n selectedEnd,\n displayYear,\n displayMonth,\n todayIso,\n ]);\n\n // On open: after the enter transition enables pointer-events, move focus\n // into the day grid (selected day, today, or the 1st).\n useEffect(() => {\n if (!isOpen || !popoverVisible) return;\n const day = initialFocusDay();\n setFocusedDay(day);\n const frame = requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n return () => cancelAnimationFrame(frame);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- open/visible transition only\n }, [isOpen, popoverVisible]);\n\n const focusDayButton = useCallback((day: number) => {\n setFocusedDay(day);\n requestAnimationFrame(() => {\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${day}\"]`)\n ?.focus();\n });\n }, []);\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n setIsOpen((open) => !open);\n }, [disabled]);\n\n const handlePrevMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 0) {\n setDisplayYear((y) => y - 1);\n return 11;\n }\n return m - 1;\n });\n }, []);\n\n const handleNextMonth = useCallback(() => {\n setDisplayMonth((m) => {\n if (m === 11) {\n setDisplayYear((y) => y + 1);\n return 0;\n }\n return m + 1;\n });\n }, []);\n\n const goToAdjacentMonth = useCallback(\n (direction: -1 | 1, preferDay: number) => {\n const nextMonth =\n direction === -1\n ? displayMonth === 0\n ? 11\n : displayMonth - 1\n : displayMonth === 11\n ? 0\n : displayMonth + 1;\n const nextYear =\n direction === -1\n ? displayMonth === 0\n ? displayYear - 1\n : displayYear\n : displayMonth === 11\n ? displayYear + 1\n : displayYear;\n const maxDay = getDaysInMonth(nextYear, nextMonth);\n setDisplayYear(nextYear);\n setDisplayMonth(nextMonth);\n focusDayButton(Math.min(preferDay, maxDay));\n },\n [displayMonth, displayYear, focusDayButton],\n );\n\n const handleToday = useCallback(() => {\n const now = new Date();\n setDisplayYear(now.getFullYear());\n setDisplayMonth(now.getMonth());\n focusDayButton(now.getDate());\n }, [focusDayButton]);\n\n const handleDayClick = useCallback(\n (iso: string, day: number) => {\n if (mode === 'date') {\n if (onChange) {\n onChange(iso);\n } else {\n setInternalDate(iso);\n }\n close(true);\n } else {\n // range mode: first click = start, second = end\n if (!selectedStart || (selectedStart && selectedEnd)) {\n setInternalStart(iso);\n setInternalEnd('');\n setFocusedDay(day);\n } else {\n const [s, e] =\n iso >= selectedStart ? [selectedStart, iso] : [iso, selectedStart];\n if (onRangeChange) {\n onRangeChange(s, e);\n } else {\n setInternalStart(s);\n setInternalEnd(e);\n }\n close(true);\n }\n }\n },\n [mode, selectedStart, selectedEnd, onChange, onRangeChange, close],\n );\n\n const moveFocusedDay = useCallback(\n (delta: number) => {\n const next = focusedDay + delta;\n if (next >= 1 && next <= daysInMonth) {\n focusDayButton(next);\n return;\n }\n if (next < 1) {\n goToAdjacentMonth(\n -1,\n getDaysInMonth(\n displayMonth === 0 ? displayYear - 1 : displayYear,\n displayMonth === 0 ? 11 : displayMonth - 1,\n ) + next,\n );\n } else {\n goToAdjacentMonth(1, next - daysInMonth);\n }\n },\n [\n focusedDay,\n daysInMonth,\n displayMonth,\n displayYear,\n focusDayButton,\n goToAdjacentMonth,\n ],\n );\n\n const handleDayKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>, day: number) => {\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n moveFocusedDay(-1);\n break;\n case 'ArrowRight':\n e.preventDefault();\n moveFocusedDay(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n moveFocusedDay(-7);\n break;\n case 'ArrowDown':\n e.preventDefault();\n moveFocusedDay(7);\n break;\n case 'Home':\n e.preventDefault();\n focusDayButton(1);\n break;\n case 'End':\n e.preventDefault();\n focusDayButton(daysInMonth);\n break;\n case 'PageUp':\n e.preventDefault();\n goToAdjacentMonth(-1, day);\n break;\n case 'PageDown':\n e.preventDefault();\n goToAdjacentMonth(1, day);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n setFocusedDay(day);\n handleDayClick(toIso(displayYear, displayMonth, day), day);\n break;\n default:\n break;\n }\n },\n [\n moveFocusedDay,\n focusDayButton,\n daysInMonth,\n goToAdjacentMonth,\n handleDayClick,\n displayYear,\n displayMonth,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n handleToggle();\n break;\n case 'ArrowDown':\n if (!isOpen) {\n e.preventDefault();\n setIsOpen(true);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n close(true);\n }\n break;\n default:\n break;\n }\n },\n [disabled, handleToggle, isOpen, close],\n );\n\n // Keep focusedDay in range when the month changes (nav buttons / PageUp).\n useEffect(() => {\n if (!isOpen) return;\n setFocusedDay((d) => Math.min(Math.max(1, d), daysInMonth));\n }, [isOpen, daysInMonth, displayMonth, displayYear]);\n\n // Build calendar grid\n const firstDay = getFirstDayOfWeek(displayYear, displayMonth);\n\n // Build weeks (rows of 7 cells; null = empty)\n const cells: (number | null)[] = [\n ...Array(firstDay).fill(null),\n ...Array.from({ length: daysInMonth }, (_, i) => i + 1),\n ];\n // Pad to complete last row\n while (cells.length % 7 !== 0) cells.push(null);\n const weeks: (number | null)[][] = [];\n for (let i = 0; i < cells.length; i += 7) weeks.push(cells.slice(i, i + 7));\n\n const displayValue =\n mode === 'date'\n ? formatDateDisplay(selectedDate)\n : selectedStart\n ? `${formatDateDisplay(selectedStart)}${selectedEnd ? ` â ${formatDateDisplay(selectedEnd)}` : ''}`\n : '';\n\n const rootClass = [\n styles['date-range-picker'],\n isOpen ? styles['date-range-picker--open'] : '',\n disabled ? styles['date-range-picker--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={rootRef} className={rootClass}>\n {/* Trigger input */}\n <div\n ref={triggerRef}\n className={styles['date-range-picker__trigger']}\n role=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={popoverMounted ? popoverId : undefined}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : 0}\n id={id}\n data-has-value={hasValue ? '' : undefined}\n onClick={handleToggle}\n onKeyDown={handleTriggerKeyDown}\n >\n <span\n className={styles['date-range-picker__calendar-icon']}\n aria-hidden\n >\n <Icon size=\"16\" glyph={<CalendarOutlineIcon />} />\n </span>\n <span className={styles['date-range-picker__value']}>\n {displayValue || 'mm/dd/yyyy'}\n </span>\n <span className={styles['date-range-picker__chevron']} aria-hidden>\n <Icon size=\"16\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n\n {/* Calendar popover */}\n {popoverMounted &&\n renderPortal(\n <div\n ref={portalRef}\n id={popoverId}\n className={[\n styles['date-range-picker__popover'],\n placement === 'above'\n ? styles['date-range-picker__popover--above']\n : '',\n popoverVisible\n ? styles['date-range-picker__popover--visible']\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popoverStyle}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label=\"Date picker\"\n >\n {/* Header */}\n <div className={styles['date-range-picker__header']}>\n <span\n className={styles['date-range-picker__month-label']}\n aria-live=\"polite\"\n >\n {MONTHS[displayMonth]} {displayYear}\n </span>\n <div className={styles['date-range-picker__header-actions']}>\n <Button\n emphasis=\"quaternary\"\n size=\"small\"\n leadingIcon={\n <Icon size=\"16\" glyph={<CalendarOutlineIcon />} />\n }\n onClick={handleToday}\n >\n Today\n </Button>\n <div className={styles['date-range-picker__nav-buttons']}>\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronLeftIcon />}\n />\n }\n onClick={handlePrevMonth}\n aria-label=\"Previous month\"\n />\n <IconButton\n size=\"medium\"\n padding=\"compact\"\n icon={\n <Icon\n size={ICON_BUTTON_ICON_SIZES['medium']}\n glyph={<ChevronRightIcon />}\n />\n }\n onClick={handleNextMonth}\n aria-label=\"Next month\"\n />\n </div>\n </div>\n </div>\n\n {/* Weekday headers */}\n <div className={styles['date-range-picker__weekdays']} aria-hidden>\n {WEEKDAYS.map((d) => (\n <span key={d} className={styles['date-range-picker__weekday']}>\n {d}\n </span>\n ))}\n </div>\n\n {/* Date grid */}\n <div\n ref={gridRef}\n className={styles['date-range-picker__grid']}\n role=\"grid\"\n aria-label={`${MONTHS[displayMonth]} ${displayYear}`}\n >\n {weeks.map((week, wi) => (\n <div\n key={wi}\n className={styles['date-range-picker__week']}\n role=\"row\"\n >\n {week.map((day, di) => {\n if (day == null) {\n return (\n <span\n key={di}\n className={styles['date-range-picker__day-empty']}\n role=\"gridcell\"\n />\n );\n }\n const iso = toIso(displayYear, displayMonth, day);\n const isToday = iso === todayIso;\n const isRangeStart =\n mode === 'range' && isSameDay(iso, selectedStart);\n const isRangeEnd =\n mode === 'range' &&\n Boolean(selectedEnd) &&\n isSameDay(iso, selectedEnd);\n const isSelected =\n mode === 'date'\n ? isSameDay(iso, selectedDate)\n : isRangeStart || isRangeEnd;\n const isInRange =\n mode === 'range' &&\n isBetween(iso, selectedStart, selectedEnd);\n const hasRangeSpan =\n mode === 'range' &&\n Boolean(selectedStart) &&\n Boolean(selectedEnd) &&\n selectedStart !== selectedEnd;\n\n const cellClass = [\n styles['date-range-picker__day-cell'],\n isInRange\n ? styles['date-range-picker__day-cell--in-range']\n : '',\n hasRangeSpan && isRangeStart\n ? styles['date-range-picker__day-cell--range-start']\n : '',\n hasRangeSpan && isRangeEnd\n ? styles['date-range-picker__day-cell--range-end']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const dayClass = [\n styles['date-range-picker__day'],\n isSelected\n ? styles['date-range-picker__day--selected']\n : '',\n isToday && !isSelected\n ? styles['date-range-picker__day--today']\n : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div key={di} className={cellClass} role=\"gridcell\">\n <button\n type=\"button\"\n className={dayClass}\n data-day={day}\n tabIndex={focusedDay === day ? 0 : -1}\n onClick={() => handleDayClick(iso, day)}\n onFocus={() => setFocusedDay(day)}\n onKeyDown={(e) => handleDayKeyDown(e, day)}\n aria-label={iso}\n aria-pressed={isSelected}\n aria-current={isToday ? 'date' : undefined}\n >\n {day}\n </button>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>,\n )}\n </div>\n );\n}\n"],"names":["CALENDAR_PREFERRED_HEIGHT","WEEKDAYS","MONTHS","formatDateDisplay","iso","y","m","d","toIso","year","month","day","getDaysInMonth","getFirstDayOfWeek","isSameDay","a","b","isBetween","date","start","end","s","e","dayFromIso","DateRangePicker","className","mode","value","startDate","endDate","onChange","onRangeChange","disabled","idProp","portalContainer","zIndex","generatedId","useId","id","popoverId","rootRef","useRef","triggerRef","gridRef","today","todayIso","displayYear","setDisplayYear","useState","displayMonth","setDisplayMonth","isOpen","setIsOpen","focusedDay","setFocusedDay","internalDate","setInternalDate","internalStart","setInternalStart","internalEnd","setInternalEnd","selectedDate","selectedStart","selectedEnd","hasValue","popoverMounted","popoverVisible","usePopoverTransition","placement","popoverStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","useCallback","restoreFocus","_a","useOutsideClose","useEffect","handleKeyDown","handleFocusIn","target","_b","daysInMonth","initialFocusDay","fromValue","fromEnd","fromStart","fromToday","frame","focusDayButton","handleToggle","open","handlePrevMonth","handleNextMonth","goToAdjacentMonth","direction","preferDay","nextMonth","nextYear","maxDay","handleToday","now","handleDayClick","moveFocusedDay","delta","next","handleDayKeyDown","handleTriggerKeyDown","firstDay","cells","_","i","weeks","displayValue","rootClass","styles","jsxs","jsx","Icon","CalendarOutlineIcon","ChevronDownIcon","Button","IconButton","ICON_BUTTON_ICON_SIZES","ChevronLeftIcon","ChevronRightIcon","week","wi","di","isToday","isRangeStart","isRangeEnd","isSelected","isInRange","hasRangeSpan","cellClass","dayClass"],"mappings":";;;;;;;;;;;;;AA2CA,MAAMA,KAA4B,KAE5BC,KAAW,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,GAEpDC,KAAS;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAASC,EAAkBC,GAAqB;AAC9C,MAAI,CAACA,EAAK,QAAO;AACjB,QAAM,CAACC,GAAGC,GAAGC,CAAC,IAAIH,EAAI,MAAM,GAAG;AAC/B,SAAO,GAAGE,CAAC,IAAIC,CAAC,IAAIF,CAAC;AACvB;AAEA,SAASG,EAAMC,GAAcC,GAAeC,GAAqB;AAC/D,SAAO,GAAGF,CAAI,IAAI,OAAOC,IAAQ,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAOC,CAAG,EAAE,SAAS,GAAG,GAAG,CAAC;AACtF;AAEA,SAASC,EAAeH,GAAcC,GAAuB;AAC3D,SAAO,IAAI,KAAKD,GAAMC,IAAQ,GAAG,CAAC,EAAE,QAAA;AACtC;AAEA,SAASG,GAAkBJ,GAAcC,GAAuB;AAC9D,SAAO,IAAI,KAAKD,GAAMC,GAAO,CAAC,EAAE,OAAA;AAClC;AAEA,SAASI,EAAUC,GAAWC,GAAoB;AAChD,SAAOD,MAAMC;AACf;AAEA,SAASC,GAAUC,GAAcC,GAAeC,GAAsB;AACpE,MAAI,CAACD,KAAS,CAACC,EAAK,QAAO;AAC3B,QAAM,CAACC,GAAGC,CAAC,IAAIH,IAAQC,IAAM,CAACD,GAAOC,CAAG,IAAI,CAACA,GAAKD,CAAK;AACvD,SAAOD,IAAOG,KAAKH,IAAOI;AAC5B;AAEA,SAASC,EAAWnB,GAAaK,GAAcC,GAA8B;AAC3E,MAAI,CAACN,EAAK,QAAO;AACjB,QAAM,CAACC,GAAGC,GAAGC,CAAC,IAAIH,EAAI,MAAM,GAAG,EAAE,IAAI,MAAM;AAC3C,SAAIC,MAAMI,KAAQH,MAAMI,IAAQ,IAAUH,IACnC;AACT;AAMA,SAAwBiB,GAAgB;AAAA,EACtC,WAAAC,IAAY;AAAA,EACZ,MAAAC,IAAO;AAAA,EACP,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,UAAAC;AAAA,EACA,IAAIC;AAAA,EACJ,iBAAAC,KAAkB;AAAA,EAClB,QAAAC;AACF,GAAyB;AACvB,QAAMC,KAAcC,GAAA,GACdC,KAAKL,MAAUG,IACfG,KAAY,GAAGD,EAAE,YACjBE,IAAUC,EAAuB,IAAI,GACrCC,IAAaD,EAAuB,IAAI,GACxCE,IAAUF,EAAuB,IAAI,GAErCG,wBAAY,KAAA,GACZC,IAAWrC;AAAA,IACfoC,EAAM,YAAA;AAAA,IACNA,EAAM,SAAA;AAAA,IACNA,EAAM,QAAA;AAAA,EAAQ,GAIV,CAACE,GAAaC,CAAc,IAAIC,EAASJ,EAAM,aAAa,GAC5D,CAACK,GAAcC,CAAe,IAAIF,EAASJ,EAAM,UAAU,GAC3D,CAACO,GAAQC,CAAS,IAAIJ,EAAS,EAAK,GAEpC,CAACK,GAAYC,CAAa,IAAIN,EAAS,CAAC,GAGxC,CAACO,IAAcC,EAAe,IAAIR,EAAS,EAAE,GAC7C,CAACS,IAAeC,EAAgB,IAAIV,EAAS,EAAE,GAC/C,CAACW,IAAaC,EAAc,IAAIZ,EAAS,EAAE,GAE3Ca,IAAelC,KAAS4B,IACxBO,IAAgBlC,KAAa6B,IAC7BM,IAAclC,KAAW8B,IAEzBK,KACJtC,MAAS,SAAS,EAAQmC,IAAgB,EAAQC,GAE9C,EAAE,SAASG,GAAgB,SAASC,EAAA,IACxCC,GAAqBhB,CAAM,GAEvB;AAAA,IACJ,WAAAiB;AAAA,IACA,OAAOC;AAAA,IACP,WAAAC;AAAA,IACA,cAAAC;AAAA,EAAA,IACEC,GAAuB9B,GAAYuB,GAAgB;AAAA,IACrD,iBAAiBjE;AAAA,IACjB,iBAAAkC;AAAA,IACA,QAAAC;AAAA,IACA,YAAY;AAAA,EAAA,CACb,GAEKsC,IAAQC,EAAY,CAACC,IAAe,OAAS;;AACjD,IAAAvB,EAAU,EAAK,GACXuB,OACFC,IAAAlC,EAAW,YAAX,QAAAkC,EAAoB;AAAA,EAExB,GAAG,CAAA,CAAE;AAEL,EAAAC,GAAgBrC,GAASW,GAAQ,MAAMsB,EAAM,EAAI,GAAGH,CAAS,GAE7DQ,EAAU,MAAM;AACd,QAAI,CAAC3B,EAAQ;AACb,aAAS4B,EAAczD,GAA6B;AAClD,MAAIA,EAAE,QAAQ,aACZA,EAAE,eAAA,GACFmD,EAAM,EAAI;AAAA,IAEd;AACA,oBAAS,iBAAiB,WAAWM,CAAa,GAC3C,MAAM,SAAS,oBAAoB,WAAWA,CAAa;AAAA,EACpE,GAAG,CAAC5B,GAAQsB,CAAK,CAAC,GAGlBK,EAAU,MAAM;AACd,QAAI,CAAC3B,EAAQ;AAEb,aAAS6B,EAAc1D,GAAe;;AACpC,YAAM2D,IAAS3D,EAAE;AACjB,MAAK2D,OACDL,IAAApC,EAAQ,YAAR,QAAAoC,EAAiB,SAASK,OAC1BC,IAAAZ,EAAU,YAAV,QAAAY,EAAmB,SAASD,MAChCR,EAAM,EAAK;AAAA,IACb;AAEA,oBAAS,iBAAiB,WAAWO,CAAa,GAC3C,MAAM,SAAS,oBAAoB,WAAWA,CAAa;AAAA,EACpE,GAAG,CAAC7B,GAAQsB,GAAOH,CAAS,CAAC;AAE7B,QAAMa,IAAcvE,EAAekC,GAAaG,CAAY,GAEtDmC,KAAkBV,EAAY,MAAM;AACxC,QAAIhD,MAAS,QAAQ;AACnB,YAAM2D,IAAY9D,EAAWsC,GAAcf,GAAaG,CAAY;AACpE,UAAIoC,EAAW,QAAOA;AAAA,IACxB,OAAO;AACL,YAAMC,IAAU/D,EAAWwC,GAAajB,GAAaG,CAAY;AACjE,UAAIqC,EAAS,QAAOA;AACpB,YAAMC,IAAYhE,EAAWuC,GAAehB,GAAaG,CAAY;AACrE,UAAIsC,EAAW,QAAOA;AAAA,IACxB;AACA,UAAMC,IAAYjE,EAAWsB,GAAUC,GAAaG,CAAY;AAChE,WAAIuC,KACG;AAAA,EACT,GAAG;AAAA,IACD9D;AAAA,IACAmC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAjB;AAAA,IACAG;AAAA,IACAJ;AAAA,EAAA,CACD;AAID,EAAAiC,EAAU,MAAM;AACd,QAAI,CAAC3B,KAAU,CAACe,EAAgB;AAChC,UAAMvD,IAAMyE,GAAA;AACZ,IAAA9B,EAAc3C,CAAG;AACjB,UAAM8E,IAAQ,sBAAsB,MAAM;;AACxC,OAAAP,KAAAN,IAAAjC,EAAQ,YAAR,gBAAAiC,EACI,cAA2B,cAAcjE,CAAG,UADhD,QAAAuE,EAEI;AAAA,IACN,CAAC;AACD,WAAO,MAAM,qBAAqBO,CAAK;AAAA,EAEzC,GAAG,CAACtC,GAAQe,CAAc,CAAC;AAE3B,QAAMwB,IAAiBhB,EAAY,CAAC/D,MAAgB;AAClD,IAAA2C,EAAc3C,CAAG,GACjB,sBAAsB,MAAM;;AAC1B,OAAAuE,KAAAN,IAAAjC,EAAQ,YAAR,gBAAAiC,EACI,cAA2B,cAAcjE,CAAG,UADhD,QAAAuE,EAEI;AAAA,IACN,CAAC;AAAA,EACH,GAAG,CAAA,CAAE,GAECS,IAAejB,EAAY,MAAM;AACrC,IAAI1C,KACJoB,EAAU,CAACwC,MAAS,CAACA,CAAI;AAAA,EAC3B,GAAG,CAAC5D,CAAQ,CAAC,GAEP6D,KAAkBnB,EAAY,MAAM;AACxC,IAAAxB,EAAgB,CAAC5C,MACXA,MAAM,KACRyC,EAAe,CAAC1C,MAAMA,IAAI,CAAC,GACpB,MAEFC,IAAI,CACZ;AAAA,EACH,GAAG,CAAA,CAAE,GAECwF,KAAkBpB,EAAY,MAAM;AACxC,IAAAxB,EAAgB,CAAC5C,MACXA,MAAM,MACRyC,EAAe,CAAC1C,MAAMA,IAAI,CAAC,GACpB,KAEFC,IAAI,CACZ;AAAA,EACH,GAAG,CAAA,CAAE,GAECyF,IAAoBrB;AAAA,IACxB,CAACsB,GAAmBC,MAAsB;AACxC,YAAMC,IACJF,MAAc,KACV/C,MAAiB,IACf,KACAA,IAAe,IACjBA,MAAiB,KACf,IACAA,IAAe,GACjBkD,IACJH,MAAc,KACV/C,MAAiB,IACfH,IAAc,IACdA,IACFG,MAAiB,KACfH,IAAc,IACdA,GACFsD,IAASxF,EAAeuF,GAAUD,CAAS;AACjD,MAAAnD,EAAeoD,CAAQ,GACvBjD,EAAgBgD,CAAS,GACzBR,EAAe,KAAK,IAAIO,GAAWG,CAAM,CAAC;AAAA,IAC5C;AAAA,IACA,CAACnD,GAAcH,GAAa4C,CAAc;AAAA,EAAA,GAGtCW,KAAc3B,EAAY,MAAM;AACpC,UAAM4B,wBAAU,KAAA;AAChB,IAAAvD,EAAeuD,EAAI,aAAa,GAChCpD,EAAgBoD,EAAI,UAAU,GAC9BZ,EAAeY,EAAI,SAAS;AAAA,EAC9B,GAAG,CAACZ,CAAc,CAAC,GAEba,IAAiB7B;AAAA,IACrB,CAACtE,GAAaO,MAAgB;AAC5B,UAAIe,MAAS;AACX,QAAII,IACFA,EAAS1B,CAAG,IAEZoD,GAAgBpD,CAAG,GAErBqE,EAAM,EAAI;AAAA,eAGN,CAACX,KAAkBA,KAAiBC;AACtC,QAAAL,GAAiBtD,CAAG,GACpBwD,GAAe,EAAE,GACjBN,EAAc3C,CAAG;AAAA,WACZ;AACL,cAAM,CAACU,GAAGC,CAAC,IACTlB,KAAO0D,IAAgB,CAACA,GAAe1D,CAAG,IAAI,CAACA,GAAK0D,CAAa;AACnE,QAAI/B,IACFA,EAAcV,GAAGC,CAAC,KAElBoC,GAAiBrC,CAAC,GAClBuC,GAAetC,CAAC,IAElBmD,EAAM,EAAI;AAAA,MACZ;AAAA,IAEJ;AAAA,IACA,CAAC/C,GAAMoC,GAAeC,GAAajC,GAAUC,GAAe0C,CAAK;AAAA,EAAA,GAG7D+B,IAAiB9B;AAAA,IACrB,CAAC+B,MAAkB;AACjB,YAAMC,IAAOrD,IAAaoD;AAC1B,UAAIC,KAAQ,KAAKA,KAAQvB,GAAa;AACpC,QAAAO,EAAegB,CAAI;AACnB;AAAA,MACF;AACA,MAAIA,IAAO,IACTX;AAAA,QACE;AAAA,QACAnF;AAAA,UACEqC,MAAiB,IAAIH,IAAc,IAAIA;AAAA,UACvCG,MAAiB,IAAI,KAAKA,IAAe;AAAA,QAAA,IACvCyD;AAAA,MAAA,IAGNX,EAAkB,GAAGW,IAAOvB,CAAW;AAAA,IAE3C;AAAA,IACA;AAAA,MACE9B;AAAA,MACA8B;AAAA,MACAlC;AAAA,MACAH;AAAA,MACA4C;AAAA,MACAK;AAAA,IAAA;AAAA,EACF,GAGIY,KAAmBjC;AAAA,IACvB,CAAC,GAAqC/D,MAAgB;AACpD,cAAQ,EAAE,KAAA;AAAA,QACR,KAAK;AACH,YAAE,eAAA,GACF6F,EAAe,EAAE;AACjB;AAAA,QACF,KAAK;AACH,YAAE,eAAA,GACFA,EAAe,CAAC;AAChB;AAAA,QACF,KAAK;AACH,YAAE,eAAA,GACFA,EAAe,EAAE;AACjB;AAAA,QACF,KAAK;AACH,YAAE,eAAA,GACFA,EAAe,CAAC;AAChB;AAAA,QACF,KAAK;AACH,YAAE,eAAA,GACFd,EAAe,CAAC;AAChB;AAAA,QACF,KAAK;AACH,YAAE,eAAA,GACFA,EAAeP,CAAW;AAC1B;AAAA,QACF,KAAK;AACH,YAAE,eAAA,GACFY,EAAkB,IAAIpF,CAAG;AACzB;AAAA,QACF,KAAK;AACH,YAAE,eAAA,GACFoF,EAAkB,GAAGpF,CAAG;AACxB;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,YAAE,eAAA,GACF2C,EAAc3C,CAAG,GACjB4F,EAAe/F,EAAMsC,GAAaG,GAActC,CAAG,GAAGA,CAAG;AACzD;AAAA,MAEA;AAAA,IAEN;AAAA,IACA;AAAA,MACE6F;AAAA,MACAd;AAAA,MACAP;AAAA,MACAY;AAAA,MACAQ;AAAA,MACAzD;AAAA,MACAG;AAAA,IAAA;AAAA,EACF,GAGI2D,KAAuBlC;AAAA,IAC3B,CAAC,MAAqC;AACpC,UAAI,CAAA1C;AACJ,gBAAQ,EAAE,KAAA;AAAA,UACR,KAAK;AAAA,UACL,KAAK;AACH,cAAE,eAAA,GACF2D,EAAA;AACA;AAAA,UACF,KAAK;AACH,YAAKxC,MACH,EAAE,eAAA,GACFC,EAAU,EAAI;AAEhB;AAAA,UACF,KAAK;AACH,YAAID,MACF,EAAE,eAAA,GACFsB,EAAM,EAAI;AAEZ;AAAA,QAEA;AAAA,IAEN;AAAA,IACA,CAACzC,GAAU2D,GAAcxC,GAAQsB,CAAK;AAAA,EAAA;AAIxC,EAAAK,EAAU,MAAM;AACd,IAAK3B,KACLG,EAAc,CAAC/C,MAAM,KAAK,IAAI,KAAK,IAAI,GAAGA,CAAC,GAAG4E,CAAW,CAAC;AAAA,EAC5D,GAAG,CAAChC,GAAQgC,GAAalC,GAAcH,CAAW,CAAC;AAGnD,QAAM+D,KAAWhG,GAAkBiC,GAAaG,CAAY,GAGtD6D,IAA2B;AAAA,IAC/B,GAAG,MAAMD,EAAQ,EAAE,KAAK,IAAI;AAAA,IAC5B,GAAG,MAAM,KAAK,EAAE,QAAQ1B,EAAA,GAAe,CAAC4B,GAAGC,MAAMA,IAAI,CAAC;AAAA,EAAA;AAGxD,SAAOF,EAAM,SAAS,MAAM,IAAG,CAAAA,EAAM,KAAK,IAAI;AAC9C,QAAMG,KAA6B,CAAA;AACnC,WAASD,IAAI,GAAGA,IAAIF,EAAM,QAAQE,KAAK,EAAG,CAAAC,GAAM,KAAKH,EAAM,MAAME,GAAGA,IAAI,CAAC,CAAC;AAE1E,QAAME,KACJxF,MAAS,SACLvB,EAAkB0D,CAAY,IAC9BC,IACE,GAAG3D,EAAkB2D,CAAa,CAAC,GAAGC,IAAc,MAAM5D,EAAkB4D,CAAW,CAAC,KAAK,EAAE,KAC/F,IAEFoD,KAAY;AAAA,IAChBC,EAAO,mBAAmB;AAAA,IAC1BjE,IAASiE,EAAO,yBAAyB,IAAI;AAAA,IAC7CpF,IAAWoF,EAAO,6BAA6B,IAAI;AAAA,IACnD3F;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAA4F,EAAC,OAAA,EAAI,KAAK7E,GAAS,WAAW2E,IAE5B,UAAA;AAAA,IAAA,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK3E;AAAA,QACL,WAAW0E,EAAO,4BAA4B;AAAA,QAC9C,MAAK;AAAA,QACL,iBAAc;AAAA,QACd,iBAAejE;AAAA,QACf,iBAAec,IAAiB1B,KAAY;AAAA,QAC5C,iBAAeP,KAAY;AAAA,QAC3B,UAAUA,IAAW,KAAK;AAAA,QAC1B,IAAAM;AAAA,QACA,kBAAgB0B,KAAW,KAAK;AAAA,QAChC,SAAS2B;AAAA,QACT,WAAWiB;AAAA,QAEX,UAAA;AAAA,UAAA,gBAAAU;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWF,EAAO,kCAAkC;AAAA,cACpD,eAAW;AAAA,cAEX,4BAACG,GAAA,EAAK,MAAK,MAAK,OAAO,gBAAAD,EAACE,MAAoB,EAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,4BAEjD,QAAA,EAAK,WAAWJ,EAAO,0BAA0B,GAC/C,gBAAgB,cACnB;AAAA,4BACC,QAAA,EAAK,WAAWA,EAAO,4BAA4B,GAAG,eAAW,IAChE,UAAA,gBAAAE,EAACC,GAAA,EAAK,MAAK,MAAK,OAAO,gBAAAD,EAACG,IAAA,EAAgB,GAAI,EAAA,CAC9C;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIDxD,KACCM;AAAA,MACE,gBAAA8C;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK/C;AAAA,UACL,IAAI/B;AAAA,UACJ,WAAW;AAAA,YACT6E,EAAO,4BAA4B;AAAA,YACnChD,OAAc,UACVgD,EAAO,mCAAmC,IAC1C;AAAA,YACJlD,IACIkD,EAAO,qCAAqC,IAC5C;AAAA,UAAA,EAEH,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,UACX,OAAO/C;AAAA,UACP,MAAK;AAAA,UACL,cAAW;AAAA,UACX,cAAW;AAAA,UAGX,UAAA;AAAA,YAAA,gBAAAgD,EAAC,OAAA,EAAI,WAAWD,EAAO,2BAA2B,GAChD,UAAA;AAAA,cAAA,gBAAAC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAWD,EAAO,gCAAgC;AAAA,kBAClD,aAAU;AAAA,kBAET,UAAA;AAAA,oBAAAlH,GAAO+C,CAAY;AAAA,oBAAE;AAAA,oBAAEH;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAE1B,gBAAAuE,EAAC,OAAA,EAAI,WAAWD,EAAO,mCAAmC,GACxD,UAAA;AAAA,gBAAA,gBAAAE;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACC,UAAS;AAAA,oBACT,MAAK;AAAA,oBACL,+BACGH,GAAA,EAAK,MAAK,MAAK,OAAO,gBAAAD,EAACE,MAAoB,GAAI;AAAA,oBAElD,SAASnB;AAAA,oBACV,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGD,gBAAAgB,EAAC,OAAA,EAAI,WAAWD,EAAO,gCAAgC,GACrD,UAAA;AAAA,kBAAA,gBAAAE;AAAA,oBAACK;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAAQ;AAAA,sBACR,MACE,gBAAAL;AAAA,wBAACC;AAAA,wBAAA;AAAA,0BACC,MAAMK,GAAuB;AAAA,0BAC7B,yBAAQC,IAAA,CAAA,CAAgB;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAG5B,SAAShC;AAAA,sBACT,cAAW;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEb,gBAAAyB;AAAA,oBAACK;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAAQ;AAAA,sBACR,MACE,gBAAAL;AAAA,wBAACC;AAAA,wBAAA;AAAA,0BACC,MAAMK,GAAuB;AAAA,0BAC7B,yBAAQE,IAAA,CAAA,CAAiB;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAG7B,SAAShC;AAAA,sBACT,cAAW;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACb,EAAA,CACF;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,GACF;AAAA,YAGA,gBAAAwB,EAAC,SAAI,WAAWF,EAAO,6BAA6B,GAAG,eAAW,IAC/D,UAAAnH,GAAS,IAAI,CAACM,MACb,gBAAA+G,EAAC,UAAa,WAAWF,EAAO,4BAA4B,GACzD,UAAA7G,EAAA,GADQA,CAEX,CACD,EAAA,CACH;AAAA,YAGA,gBAAA+G;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAK3E;AAAA,gBACL,WAAWyE,EAAO,yBAAyB;AAAA,gBAC3C,MAAK;AAAA,gBACL,cAAY,GAAGlH,GAAO+C,CAAY,CAAC,IAAIH,CAAW;AAAA,gBAEjD,UAAAmE,GAAM,IAAI,CAACc,GAAMC,MAChB,gBAAAV;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,WAAWF,EAAO,yBAAyB;AAAA,oBAC3C,MAAK;AAAA,oBAEJ,UAAAW,EAAK,IAAI,CAACpH,GAAKsH,MAAO;AACrB,0BAAItH,KAAO;AACT,+BACE,gBAAA2G;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BAEC,WAAWF,EAAO,8BAA8B;AAAA,4BAChD,MAAK;AAAA,0BAAA;AAAA,0BAFAa;AAAA,wBAAA;AAMX,4BAAM7H,IAAMI,EAAMsC,GAAaG,GAActC,CAAG,GAC1CuH,KAAU9H,MAAQyC,GAClBsF,KACJzG,MAAS,WAAWZ,EAAUV,GAAK0D,CAAa,GAC5CsE,KACJ1G,MAAS,WACT,EAAQqC,KACRjD,EAAUV,GAAK2D,CAAW,GACtBsE,IACJ3G,MAAS,SACLZ,EAAUV,GAAKyD,CAAY,IAC3BsE,MAAgBC,IAChBE,KACJ5G,MAAS,WACTT,GAAUb,GAAK0D,GAAeC,CAAW,GACrCwE,KACJ7G,MAAS,WACT,EAAQoC,KACR,EAAQC,KACRD,MAAkBC,GAEdyE,KAAY;AAAA,wBAChBpB,EAAO,6BAA6B;AAAA,wBACpCkB,KACIlB,EAAO,uCAAuC,IAC9C;AAAA,wBACJmB,MAAgBJ,KACZf,EAAO,0CAA0C,IACjD;AAAA,wBACJmB,MAAgBH,KACZhB,EAAO,wCAAwC,IAC/C;AAAA,sBAAA,EAEH,OAAO,OAAO,EACd,KAAK,GAAG,GAELqB,KAAW;AAAA,wBACfrB,EAAO,wBAAwB;AAAA,wBAC/BiB,IACIjB,EAAO,kCAAkC,IACzC;AAAA,wBACJc,MAAW,CAACG,IACRjB,EAAO,+BAA+B,IACtC;AAAA,sBAAA,EAEH,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,6BACE,gBAAAE,EAAC,OAAA,EAAa,WAAWkB,IAAW,MAAK,YACvC,UAAA,gBAAAlB;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,MAAK;AAAA,0BACL,WAAWmB;AAAA,0BACX,YAAU9H;AAAA,0BACV,UAAU0C,MAAe1C,IAAM,IAAI;AAAA,0BACnC,SAAS,MAAM4F,EAAenG,GAAKO,CAAG;AAAA,0BACtC,SAAS,MAAM2C,EAAc3C,CAAG;AAAA,0BAChC,WAAW,CAACW,OAAMqF,GAAiBrF,IAAGX,CAAG;AAAA,0BACzC,cAAYP;AAAA,0BACZ,gBAAciI;AAAA,0BACd,gBAAcH,KAAU,SAAS;AAAA,0BAEhC,UAAAvH;AAAA,wBAAA;AAAA,sBAAA,KAbKsH,CAeV;AAAA,oBAEJ,CAAC;AAAA,kBAAA;AAAA,kBAhFID;AAAA,gBAAA,CAkFR;AAAA,cAAA;AAAA,YAAA;AAAA,UACH;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF,GACJ;AAEJ;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./DateRangePicker.css');const e={"date-range-picker":"_date-range-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./DateRangePicker.css');const e={"date-range-picker":"_date-range-picker_18hzd_2","date-range-picker__trigger":"_date-range-picker__trigger_18hzd_9","date-range-picker--disabled":"_date-range-picker--disabled_18hzd_21","date-range-picker--open":"_date-range-picker--open_18hzd_21","date-range-picker__calendar-icon":"_date-range-picker__calendar-icon_18hzd_38","date-range-picker__value":"_date-range-picker__value_18hzd_50","date-range-picker__chevron":"_date-range-picker__chevron_18hzd_68","date-range-picker__popover":"_date-range-picker__popover_18hzd_84","date-range-picker__popover--above":"_date-range-picker__popover--above_18hzd_103","date-range-picker__popover--visible":"_date-range-picker__popover--visible_18hzd_106","date-range-picker__header":"_date-range-picker__header_18hzd_112","date-range-picker__month-label":"_date-range-picker__month-label_18hzd_118","date-range-picker__header-actions":"_date-range-picker__header-actions_18hzd_129","date-range-picker__nav-buttons":"_date-range-picker__nav-buttons_18hzd_135","date-range-picker__weekdays":"_date-range-picker__weekdays_18hzd_139","date-range-picker__weekday":"_date-range-picker__weekday_18hzd_139","date-range-picker__grid":"_date-range-picker__grid_18hzd_159","date-range-picker__week":"_date-range-picker__week_18hzd_139","date-range-picker__day-empty":"_date-range-picker__day-empty_18hzd_169","date-range-picker__day-cell":"_date-range-picker__day-cell_18hzd_173","date-range-picker__day-cell--in-range":"_date-range-picker__day-cell--in-range_18hzd_182","date-range-picker__day-cell--range-start":"_date-range-picker__day-cell--range-start_18hzd_182","date-range-picker__day-cell--range-end":"_date-range-picker__day-cell--range-end_18hzd_182","date-range-picker__day":"_date-range-picker__day_18hzd_169","date-range-picker__day--selected":"_date-range-picker__day--selected_18hzd_225","date-range-picker__day--today":"_date-range-picker__day--today_18hzd_238"};exports.default=e;
|
|
2
2
|
//# sourceMappingURL=DateRangePicker.module.scss.cjs.map
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import './DateRangePicker.css';const e = {
|
|
2
|
-
"date-range-picker": "_date-range-
|
|
3
|
-
"date-range-picker__trigger": "_date-range-
|
|
4
|
-
"date-range-picker--disabled": "_date-range-picker--
|
|
5
|
-
"date-range-picker--open": "_date-range-picker--
|
|
6
|
-
"date-range-picker__calendar-icon": "_date-range-picker__calendar-
|
|
7
|
-
"date-range-picker__value": "_date-range-
|
|
8
|
-
"date-range-picker__chevron": "_date-range-
|
|
9
|
-
"date-range-picker__popover": "_date-range-
|
|
10
|
-
"date-range-picker__popover--above": "_date-range-picker__popover--
|
|
11
|
-
"date-range-picker__popover--visible": "_date-range-picker__popover--
|
|
12
|
-
"date-range-picker__header": "_date-range-
|
|
13
|
-
"date-range-picker__month-label": "_date-range-picker__month-
|
|
14
|
-
"date-range-picker__header-actions": "_date-range-picker__header-
|
|
15
|
-
"date-range-picker__nav-buttons": "_date-range-picker__nav-
|
|
16
|
-
"date-range-picker__weekdays": "_date-range-
|
|
17
|
-
"date-range-picker__weekday": "_date-range-
|
|
18
|
-
"date-range-picker__grid": "_date-range-
|
|
19
|
-
"date-range-picker__week": "_date-range-
|
|
20
|
-
"date-range-picker__day-empty": "_date-range-picker__day-
|
|
21
|
-
"date-range-picker__day-cell": "_date-range-picker__day-
|
|
22
|
-
"date-range-picker__day-cell--in-range": "_date-range-picker__day-cell--in-
|
|
23
|
-
"date-range-picker__day-cell--range-start": "_date-range-picker__day-cell--range-
|
|
24
|
-
"date-range-picker__day-cell--range-end": "_date-range-picker__day-cell--range-
|
|
25
|
-
"date-range-picker__day": "_date-range-
|
|
26
|
-
"date-range-picker__day--selected": "_date-range-picker__day--
|
|
27
|
-
"date-range-picker__day--today": "_date-range-picker__day--
|
|
2
|
+
"date-range-picker": "_date-range-picker_18hzd_2",
|
|
3
|
+
"date-range-picker__trigger": "_date-range-picker__trigger_18hzd_9",
|
|
4
|
+
"date-range-picker--disabled": "_date-range-picker--disabled_18hzd_21",
|
|
5
|
+
"date-range-picker--open": "_date-range-picker--open_18hzd_21",
|
|
6
|
+
"date-range-picker__calendar-icon": "_date-range-picker__calendar-icon_18hzd_38",
|
|
7
|
+
"date-range-picker__value": "_date-range-picker__value_18hzd_50",
|
|
8
|
+
"date-range-picker__chevron": "_date-range-picker__chevron_18hzd_68",
|
|
9
|
+
"date-range-picker__popover": "_date-range-picker__popover_18hzd_84",
|
|
10
|
+
"date-range-picker__popover--above": "_date-range-picker__popover--above_18hzd_103",
|
|
11
|
+
"date-range-picker__popover--visible": "_date-range-picker__popover--visible_18hzd_106",
|
|
12
|
+
"date-range-picker__header": "_date-range-picker__header_18hzd_112",
|
|
13
|
+
"date-range-picker__month-label": "_date-range-picker__month-label_18hzd_118",
|
|
14
|
+
"date-range-picker__header-actions": "_date-range-picker__header-actions_18hzd_129",
|
|
15
|
+
"date-range-picker__nav-buttons": "_date-range-picker__nav-buttons_18hzd_135",
|
|
16
|
+
"date-range-picker__weekdays": "_date-range-picker__weekdays_18hzd_139",
|
|
17
|
+
"date-range-picker__weekday": "_date-range-picker__weekday_18hzd_139",
|
|
18
|
+
"date-range-picker__grid": "_date-range-picker__grid_18hzd_159",
|
|
19
|
+
"date-range-picker__week": "_date-range-picker__week_18hzd_139",
|
|
20
|
+
"date-range-picker__day-empty": "_date-range-picker__day-empty_18hzd_169",
|
|
21
|
+
"date-range-picker__day-cell": "_date-range-picker__day-cell_18hzd_173",
|
|
22
|
+
"date-range-picker__day-cell--in-range": "_date-range-picker__day-cell--in-range_18hzd_182",
|
|
23
|
+
"date-range-picker__day-cell--range-start": "_date-range-picker__day-cell--range-start_18hzd_182",
|
|
24
|
+
"date-range-picker__day-cell--range-end": "_date-range-picker__day-cell--range-end_18hzd_182",
|
|
25
|
+
"date-range-picker__day": "_date-range-picker__day_18hzd_169",
|
|
26
|
+
"date-range-picker__day--selected": "_date-range-picker__day--selected_18hzd_225",
|
|
27
|
+
"date-range-picker__day--today": "_date-range-picker__day--today_18hzd_238"
|
|
28
28
|
};
|
|
29
29
|
export {
|
|
30
30
|
e as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Emoji.cjs","sources":["../../../src/components/emoji/Emoji.tsx"],"sourcesContent":["import styles from './Emoji.module.scss';\n\nexport type EmojiSize =\n | '10'\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '52'\n | '64'\n | '104';\n\nexport interface EmojiProps {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"đ\", \"đ\"). */\n emoji: string;\n /** Size from the Mattermost icon scale. Default 24. */\n size?: EmojiSize;\n}\n\nconst SIZE_CLASS_MAP: Record<EmojiSize, string> = {\n '10': styles['emoji--size-10'],\n '12': styles['emoji--size-12'],\n '16': styles['emoji--size-16'],\n '20': styles['emoji--size-20'],\n '24': styles['emoji--size-24'],\n '28': styles['emoji--size-28'],\n '32': styles['emoji--size-32'],\n '40': styles['emoji--size-40'],\n '52': styles['emoji--size-52'],\n '64': styles['emoji--size-64'],\n '104': styles['emoji--size-104'],\n};\n\n/**\n * Emoji is a compact, inline visual for conveying emotion, intent, or status â on messages,\n * in reactions, in pickers, or sprinkled through UI copy. The component standardises sizing\n * so native Unicode and custom workspace emoji render at a consistent footprint alongside\n * Icon.\n */\nexport default function Emoji({\n className = '',\n emoji,\n size = '24',\n}: EmojiProps) {\n const sizeClass = SIZE_CLASS_MAP[size];\n const rootClass = [
|
|
1
|
+
{"version":3,"file":"Emoji.cjs","sources":["../../../src/components/emoji/Emoji.tsx"],"sourcesContent":["import styles from './Emoji.module.scss';\n\nexport type EmojiSize =\n | '10'\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '52'\n | '64'\n | '104';\n\nexport interface EmojiProps {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"đ\", \"đ\"). */\n emoji: string;\n /** Size from the Mattermost icon scale. Default 24. */\n size?: EmojiSize;\n}\n\nconst SIZE_CLASS_MAP: Record<EmojiSize, string> = {\n '10': styles['emoji--size-10'],\n '12': styles['emoji--size-12'],\n '16': styles['emoji--size-16'],\n '20': styles['emoji--size-20'],\n '24': styles['emoji--size-24'],\n '28': styles['emoji--size-28'],\n '32': styles['emoji--size-32'],\n '40': styles['emoji--size-40'],\n '52': styles['emoji--size-52'],\n '64': styles['emoji--size-64'],\n '104': styles['emoji--size-104'],\n};\n\n/**\n * Emoji is a compact, inline visual for conveying emotion, intent, or status â on messages,\n * in reactions, in pickers, or sprinkled through UI copy. The component standardises sizing\n * so native Unicode and custom workspace emoji render at a consistent footprint alongside\n * Icon.\n */\nexport default function Emoji({\n className = '',\n emoji,\n size = '24',\n}: EmojiProps) {\n const sizeClass = SIZE_CLASS_MAP[size];\n const rootClass = [styles.emoji, sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span className={rootClass} role=\"img\" aria-hidden>\n {emoji}\n </span>\n );\n}\n"],"names":["SIZE_CLASS_MAP","styles","Emoji","className","emoji","size","sizeClass","rootClass","jsx"],"mappings":"sLAwBMA,EAA4C,CAChD,GAAMC,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,GAAMA,EAAAA,QAAO,gBAAgB,EAC7B,IAAOA,EAAAA,QAAO,iBAAiB,CACjC,EAQA,SAAwBC,EAAM,CAC5B,UAAAC,EAAY,GACZ,MAAAC,EACA,KAAAC,EAAO,IACT,EAAe,CACb,MAAMC,EAAYN,EAAeK,CAAI,EAC/BE,EAAY,CAACN,UAAO,MAAOK,EAAWH,CAAS,EAClD,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACEK,MAAC,QAAK,UAAWD,EAAW,KAAK,MAAM,cAAW,GAC/C,SAAAH,CAAA,CACH,CAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Emoji.d.ts","sourceRoot":"","sources":["../../../src/components/emoji/Emoji.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GACjB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,CAAC;AAEV,MAAM,WAAW,UAAU;IACzB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAgBD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,SAAc,EACd,KAAK,EACL,IAAW,GACZ,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"Emoji.d.ts","sourceRoot":"","sources":["../../../src/components/emoji/Emoji.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GACjB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,CAAC;AAEV,MAAM,WAAW,UAAU;IACzB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAgBD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,SAAc,EACd,KAAK,EACL,IAAW,GACZ,EAAE,UAAU,2CAWZ"}
|
|
@@ -18,11 +18,7 @@ function a({
|
|
|
18
18
|
emoji: o,
|
|
19
19
|
size: s = "24"
|
|
20
20
|
}) {
|
|
21
|
-
const m = t[s], j = [
|
|
22
|
-
e.emoji,
|
|
23
|
-
m,
|
|
24
|
-
i
|
|
25
|
-
].filter(Boolean).join(" ");
|
|
21
|
+
const m = t[s], j = [e.emoji, m, i].filter(Boolean).join(" ");
|
|
26
22
|
return /* @__PURE__ */ r("span", { className: j, role: "img", "aria-hidden": !0, children: o });
|
|
27
23
|
}
|
|
28
24
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Emoji.js","sources":["../../../src/components/emoji/Emoji.tsx"],"sourcesContent":["import styles from './Emoji.module.scss';\n\nexport type EmojiSize =\n | '10'\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '52'\n | '64'\n | '104';\n\nexport interface EmojiProps {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"đ\", \"đ\"). */\n emoji: string;\n /** Size from the Mattermost icon scale. Default 24. */\n size?: EmojiSize;\n}\n\nconst SIZE_CLASS_MAP: Record<EmojiSize, string> = {\n '10': styles['emoji--size-10'],\n '12': styles['emoji--size-12'],\n '16': styles['emoji--size-16'],\n '20': styles['emoji--size-20'],\n '24': styles['emoji--size-24'],\n '28': styles['emoji--size-28'],\n '32': styles['emoji--size-32'],\n '40': styles['emoji--size-40'],\n '52': styles['emoji--size-52'],\n '64': styles['emoji--size-64'],\n '104': styles['emoji--size-104'],\n};\n\n/**\n * Emoji is a compact, inline visual for conveying emotion, intent, or status â on messages,\n * in reactions, in pickers, or sprinkled through UI copy. The component standardises sizing\n * so native Unicode and custom workspace emoji render at a consistent footprint alongside\n * Icon.\n */\nexport default function Emoji({\n className = '',\n emoji,\n size = '24',\n}: EmojiProps) {\n const sizeClass = SIZE_CLASS_MAP[size];\n const rootClass = [
|
|
1
|
+
{"version":3,"file":"Emoji.js","sources":["../../../src/components/emoji/Emoji.tsx"],"sourcesContent":["import styles from './Emoji.module.scss';\n\nexport type EmojiSize =\n | '10'\n | '12'\n | '16'\n | '20'\n | '24'\n | '28'\n | '32'\n | '40'\n | '52'\n | '64'\n | '104';\n\nexport interface EmojiProps {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"đ\", \"đ\"). */\n emoji: string;\n /** Size from the Mattermost icon scale. Default 24. */\n size?: EmojiSize;\n}\n\nconst SIZE_CLASS_MAP: Record<EmojiSize, string> = {\n '10': styles['emoji--size-10'],\n '12': styles['emoji--size-12'],\n '16': styles['emoji--size-16'],\n '20': styles['emoji--size-20'],\n '24': styles['emoji--size-24'],\n '28': styles['emoji--size-28'],\n '32': styles['emoji--size-32'],\n '40': styles['emoji--size-40'],\n '52': styles['emoji--size-52'],\n '64': styles['emoji--size-64'],\n '104': styles['emoji--size-104'],\n};\n\n/**\n * Emoji is a compact, inline visual for conveying emotion, intent, or status â on messages,\n * in reactions, in pickers, or sprinkled through UI copy. The component standardises sizing\n * so native Unicode and custom workspace emoji render at a consistent footprint alongside\n * Icon.\n */\nexport default function Emoji({\n className = '',\n emoji,\n size = '24',\n}: EmojiProps) {\n const sizeClass = SIZE_CLASS_MAP[size];\n const rootClass = [styles.emoji, sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span className={rootClass} role=\"img\" aria-hidden>\n {emoji}\n </span>\n );\n}\n"],"names":["SIZE_CLASS_MAP","styles","Emoji","className","emoji","size","sizeClass","rootClass","jsx"],"mappings":";;AAwBA,MAAMA,IAA4C;AAAA,EAChD,IAAMC,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,IAAMA,EAAO,gBAAgB;AAAA,EAC7B,KAAOA,EAAO,iBAAiB;AACjC;AAQA,SAAwBC,EAAM;AAAA,EAC5B,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,MAAAC,IAAO;AACT,GAAe;AACb,QAAMC,IAAYN,EAAeK,CAAI,GAC/BE,IAAY,CAACN,EAAO,OAAOK,GAAWH,CAAS,EAClD,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAK,EAAC,UAAK,WAAWD,GAAW,MAAK,OAAM,eAAW,IAC/C,UAAAH,EAAA,CACH;AAEJ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiButton.cjs","sources":["../../../src/components/emoji-button/EmojiButton.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes } from 'react';\nimport { toKebab } from '@/utils/string';\nimport Emoji from '@/components/emoji/Emoji';\nimport type { EmojiSize } from '@/components/emoji/Emoji';\nimport styles from './EmojiButton.module.scss';\n\nexport type EmojiButtonSize = 'x-small' | 'small' | 'medium' | 'large';\n\n/** Emoji size (px string) per EmojiButton size. Use when you need to override the emoji independently. */\nexport const EMOJI_BUTTON_EMOJI_SIZES: Record<EmojiButtonSize, EmojiSize> = {\n 'x-small': '12',\n small: '20',\n medium: '24',\n large: '28',\n};\n\nexport type EmojiButtonPadding = 'default' | 'compact';\n\nexport interface EmojiButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"đ\", \"đ\"). */\n emoji: string;\n /** Size variant. Default: small. */\n size?: EmojiButtonSize;\n /** Reduces padding within each size tier, matching IconButton compact. Default: default. */\n padding?: EmojiButtonPadding;\n /** When true, forces the subtler pressed/active visual. */\n active?: boolean;\n /** When true, shows toggled/selected state. */\n toggled?: boolean;\n}\n\n/**\n * EmojiButton is a compact, label-free button that renders an emoji as its visual â the\n * emoji-picker counterpart to IconButton. Use it for emoji selection grids, skin-tone\n * selectors, and any surface where an emoji character is the primary affordance.\n *\n * Every EmojiButton must pair with an `aria-label` that names the action or the emoji it\n * represents.\n */\nexport default function EmojiButton({\n className = '',\n emoji,\n size = 'small',\n padding = 'default',\n active = false,\n toggled,\n type = 'button',\n ...rest\n}: EmojiButtonProps) {\n const sizeClass = styles[`emoji-button--size-${toKebab(size)}`];\n const paddingClass
|
|
1
|
+
{"version":3,"file":"EmojiButton.cjs","sources":["../../../src/components/emoji-button/EmojiButton.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes } from 'react';\nimport { toKebab } from '@/utils/string';\nimport Emoji from '@/components/emoji/Emoji';\nimport type { EmojiSize } from '@/components/emoji/Emoji';\nimport styles from './EmojiButton.module.scss';\n\nexport type EmojiButtonSize = 'x-small' | 'small' | 'medium' | 'large';\n\n/** Emoji size (px string) per EmojiButton size. Use when you need to override the emoji independently. */\nexport const EMOJI_BUTTON_EMOJI_SIZES: Record<EmojiButtonSize, EmojiSize> = {\n 'x-small': '12',\n small: '20',\n medium: '24',\n large: '28',\n};\n\nexport type EmojiButtonPadding = 'default' | 'compact';\n\nexport interface EmojiButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"đ\", \"đ\"). */\n emoji: string;\n /** Size variant. Default: small. */\n size?: EmojiButtonSize;\n /** Reduces padding within each size tier, matching IconButton compact. Default: default. */\n padding?: EmojiButtonPadding;\n /** When true, forces the subtler pressed/active visual. */\n active?: boolean;\n /** When true, shows toggled/selected state. */\n toggled?: boolean;\n}\n\n/**\n * EmojiButton is a compact, label-free button that renders an emoji as its visual â the\n * emoji-picker counterpart to IconButton. Use it for emoji selection grids, skin-tone\n * selectors, and any surface where an emoji character is the primary affordance.\n *\n * Every EmojiButton must pair with an `aria-label` that names the action or the emoji it\n * represents.\n */\nexport default function EmojiButton({\n className = '',\n emoji,\n size = 'small',\n padding = 'default',\n active = false,\n toggled,\n type = 'button',\n ...rest\n}: EmojiButtonProps) {\n const sizeClass = styles[`emoji-button--size-${toKebab(size)}`];\n const paddingClass =\n padding === 'compact' ? styles['emoji-button--padding-compact'] : '';\n const activeClass = active ? styles['emoji-button--active'] : '';\n const toggledClass = toggled ? styles['emoji-button--toggled'] : '';\n\n const rootClass = [\n styles['emoji-button'],\n sizeClass,\n paddingClass,\n activeClass,\n toggledClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n type={type}\n className={rootClass}\n aria-pressed={toggled !== undefined ? toggled : undefined}\n {...rest}\n >\n <span className={styles['emoji-button__emoji']}>\n <Emoji emoji={emoji} size={EMOJI_BUTTON_EMOJI_SIZES[size]} />\n </span>\n </button>\n );\n}\n"],"names":["EMOJI_BUTTON_EMOJI_SIZES","EmojiButton","className","emoji","size","padding","active","toggled","type","rest","sizeClass","styles","toKebab","paddingClass","activeClass","toggledClass","rootClass","jsx","Emoji"],"mappings":"gQASaA,EAA+D,CAC1E,UAAW,KACX,MAAO,KACP,OAAQ,KACR,MAAO,IACT,EA2BA,SAAwBC,EAAY,CAClC,UAAAC,EAAY,GACZ,MAAAC,EACA,KAAAC,EAAO,QACP,QAAAC,EAAU,UACV,OAAAC,EAAS,GACT,QAAAC,EACA,KAAAC,EAAO,SACP,GAAGC,CACL,EAAqB,CACnB,MAAMC,EAAYC,EAAAA,QAAO,sBAAsBC,EAAAA,QAAQR,CAAI,CAAC,EAAE,EACxDS,EACJR,IAAY,UAAYM,EAAAA,QAAO,+BAA+B,EAAI,GAC9DG,EAAcR,EAASK,UAAO,sBAAsB,EAAI,GACxDI,EAAeR,EAAUI,UAAO,uBAAuB,EAAI,GAE3DK,EAAY,CAChBL,EAAAA,QAAO,cAAc,EACrBD,EACAG,EACAC,EACAC,EACAb,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACEe,EAAAA,IAAC,SAAA,CACC,KAAAT,EACA,UAAWQ,EACX,eAAcT,IAAY,OAAYA,EAAU,OAC/C,GAAGE,EAEJ,SAAAQ,EAAAA,IAAC,OAAA,CAAK,UAAWN,EAAAA,QAAO,qBAAqB,EAC3C,SAAAM,EAAAA,IAACC,EAAAA,QAAA,CAAM,MAAAf,EAAc,KAAMH,EAAyBI,CAAI,EAAG,CAAA,CAC7D,CAAA,CAAA,CAGN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiButton.d.ts","sourceRoot":"","sources":["../../../src/components/emoji-button/EmojiButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG1D,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEvE,0GAA0G;AAC1G,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,eAAe,EAAE,SAAS,CAKvE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC/E,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,SAAc,EACd,KAAK,EACL,IAAc,EACd,OAAmB,EACnB,MAAc,EACd,OAAO,EACP,IAAe,EACf,GAAG,IAAI,EACR,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"EmojiButton.d.ts","sourceRoot":"","sources":["../../../src/components/emoji-button/EmojiButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG1D,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEvE,0GAA0G;AAC1G,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,eAAe,EAAE,SAAS,CAKvE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC/E,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,SAAc,EACd,KAAK,EACL,IAAc,EACd,OAAmB,EACnB,MAAc,EACd,OAAO,EACP,IAAe,EACf,GAAG,IAAI,EACR,EAAE,gBAAgB,2CA8BlB"}
|
|
@@ -26,7 +26,16 @@ function x({
|
|
|
26
26
|
j,
|
|
27
27
|
e
|
|
28
28
|
].filter(Boolean).join(" ");
|
|
29
|
-
return /* @__PURE__ */ s(
|
|
29
|
+
return /* @__PURE__ */ s(
|
|
30
|
+
"button",
|
|
31
|
+
{
|
|
32
|
+
type: l,
|
|
33
|
+
className: p,
|
|
34
|
+
"aria-pressed": t !== void 0 ? t : void 0,
|
|
35
|
+
...r,
|
|
36
|
+
children: /* @__PURE__ */ s("span", { className: o["emoji-button__emoji"], children: /* @__PURE__ */ s(f, { emoji: i, size: C[a] }) })
|
|
37
|
+
}
|
|
38
|
+
);
|
|
30
39
|
}
|
|
31
40
|
export {
|
|
32
41
|
C as EMOJI_BUTTON_EMOJI_SIZES,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiButton.js","sources":["../../../src/components/emoji-button/EmojiButton.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes } from 'react';\nimport { toKebab } from '@/utils/string';\nimport Emoji from '@/components/emoji/Emoji';\nimport type { EmojiSize } from '@/components/emoji/Emoji';\nimport styles from './EmojiButton.module.scss';\n\nexport type EmojiButtonSize = 'x-small' | 'small' | 'medium' | 'large';\n\n/** Emoji size (px string) per EmojiButton size. Use when you need to override the emoji independently. */\nexport const EMOJI_BUTTON_EMOJI_SIZES: Record<EmojiButtonSize, EmojiSize> = {\n 'x-small': '12',\n small: '20',\n medium: '24',\n large: '28',\n};\n\nexport type EmojiButtonPadding = 'default' | 'compact';\n\nexport interface EmojiButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"đ\", \"đ\"). */\n emoji: string;\n /** Size variant. Default: small. */\n size?: EmojiButtonSize;\n /** Reduces padding within each size tier, matching IconButton compact. Default: default. */\n padding?: EmojiButtonPadding;\n /** When true, forces the subtler pressed/active visual. */\n active?: boolean;\n /** When true, shows toggled/selected state. */\n toggled?: boolean;\n}\n\n/**\n * EmojiButton is a compact, label-free button that renders an emoji as its visual â the\n * emoji-picker counterpart to IconButton. Use it for emoji selection grids, skin-tone\n * selectors, and any surface where an emoji character is the primary affordance.\n *\n * Every EmojiButton must pair with an `aria-label` that names the action or the emoji it\n * represents.\n */\nexport default function EmojiButton({\n className = '',\n emoji,\n size = 'small',\n padding = 'default',\n active = false,\n toggled,\n type = 'button',\n ...rest\n}: EmojiButtonProps) {\n const sizeClass = styles[`emoji-button--size-${toKebab(size)}`];\n const paddingClass
|
|
1
|
+
{"version":3,"file":"EmojiButton.js","sources":["../../../src/components/emoji-button/EmojiButton.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes } from 'react';\nimport { toKebab } from '@/utils/string';\nimport Emoji from '@/components/emoji/Emoji';\nimport type { EmojiSize } from '@/components/emoji/Emoji';\nimport styles from './EmojiButton.module.scss';\n\nexport type EmojiButtonSize = 'x-small' | 'small' | 'medium' | 'large';\n\n/** Emoji size (px string) per EmojiButton size. Use when you need to override the emoji independently. */\nexport const EMOJI_BUTTON_EMOJI_SIZES: Record<EmojiButtonSize, EmojiSize> = {\n 'x-small': '12',\n small: '20',\n medium: '24',\n large: '28',\n};\n\nexport type EmojiButtonPadding = 'default' | 'compact';\n\nexport interface EmojiButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Optional CSS class name. */\n className?: string;\n /** Emoji character(s) to display (e.g. \"đ\", \"đ\"). */\n emoji: string;\n /** Size variant. Default: small. */\n size?: EmojiButtonSize;\n /** Reduces padding within each size tier, matching IconButton compact. Default: default. */\n padding?: EmojiButtonPadding;\n /** When true, forces the subtler pressed/active visual. */\n active?: boolean;\n /** When true, shows toggled/selected state. */\n toggled?: boolean;\n}\n\n/**\n * EmojiButton is a compact, label-free button that renders an emoji as its visual â the\n * emoji-picker counterpart to IconButton. Use it for emoji selection grids, skin-tone\n * selectors, and any surface where an emoji character is the primary affordance.\n *\n * Every EmojiButton must pair with an `aria-label` that names the action or the emoji it\n * represents.\n */\nexport default function EmojiButton({\n className = '',\n emoji,\n size = 'small',\n padding = 'default',\n active = false,\n toggled,\n type = 'button',\n ...rest\n}: EmojiButtonProps) {\n const sizeClass = styles[`emoji-button--size-${toKebab(size)}`];\n const paddingClass =\n padding === 'compact' ? styles['emoji-button--padding-compact'] : '';\n const activeClass = active ? styles['emoji-button--active'] : '';\n const toggledClass = toggled ? styles['emoji-button--toggled'] : '';\n\n const rootClass = [\n styles['emoji-button'],\n sizeClass,\n paddingClass,\n activeClass,\n toggledClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n type={type}\n className={rootClass}\n aria-pressed={toggled !== undefined ? toggled : undefined}\n {...rest}\n >\n <span className={styles['emoji-button__emoji']}>\n <Emoji emoji={emoji} size={EMOJI_BUTTON_EMOJI_SIZES[size]} />\n </span>\n </button>\n );\n}\n"],"names":["EMOJI_BUTTON_EMOJI_SIZES","EmojiButton","className","emoji","size","padding","active","toggled","type","rest","sizeClass","styles","toKebab","paddingClass","activeClass","toggledClass","rootClass","jsx","Emoji"],"mappings":";;;;AASO,MAAMA,IAA+D;AAAA,EAC1E,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AA2BA,SAAwBC,EAAY;AAAA,EAClC,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,QAAAC,IAAS;AAAA,EACT,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,GAAGC;AACL,GAAqB;AACnB,QAAMC,IAAYC,EAAO,sBAAsBC,EAAQR,CAAI,CAAC,EAAE,GACxDS,IACJR,MAAY,YAAYM,EAAO,+BAA+B,IAAI,IAC9DG,IAAcR,IAASK,EAAO,sBAAsB,IAAI,IACxDI,IAAeR,IAAUI,EAAO,uBAAuB,IAAI,IAE3DK,IAAY;AAAA,IAChBL,EAAO,cAAc;AAAA,IACrBD;AAAA,IACAG;AAAA,IACAC;AAAA,IACAC;AAAA,IACAb;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAe;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAAT;AAAA,MACA,WAAWQ;AAAA,MACX,gBAAcT,MAAY,SAAYA,IAAU;AAAA,MAC/C,GAAGE;AAAA,MAEJ,UAAA,gBAAAQ,EAAC,QAAA,EAAK,WAAWN,EAAO,qBAAqB,GAC3C,UAAA,gBAAAM,EAACC,GAAA,EAAM,OAAAf,GAAc,MAAMH,EAAyBI,CAAI,GAAG,EAAA,CAC7D;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiPopover.cjs","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 = ['', '\\u{1F3FB}', '\\u{1F3FC}', '\\u{1F3FD}', '\\u{1F3FE}', '\\u{1F3FF}'];\n\nconst MODIFIER_BASES = new Set([\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(categories[0]?.id ?? '');\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 ? 'search-results' : '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 = group.getBoundingClientRect().top - scroller.getBoundingClientRect().top + scroller.scrollTop;\n scroller.scrollTo({ top, behavior: 'smooth' });\n }\n\n const rootClass = [styles['emoji-popover'], className].filter(Boolean).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={() => { setHoveredEmoji(displayed); setHoveredBase(emoji); }}\n onMouseLeave={() => { setHoveredEmoji(null); setHoveredBase(null); }}\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 key={cat.id} ref={(el) => { groupRefs.current[cat.id] = el; }} className={styles['emoji-popover__group']}>\n <MenuGroupHeading label={cat.label} />\n <div\n className={[\n styles['emoji-popover__emoji-row'],\n cat.wrap === false ? styles['emoji-popover__emoji-row--nowrap'] : '',\n ].filter(Boolean).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 ? styles['emoji-popover__header-main--hidden'] : '',\n ].filter(Boolean).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 ? styles['emoji-popover__skin-tone-picker--visible'] : '',\n ].filter(Boolean).join(' ')}\n inert={!showSkinTonePicker}\n aria-hidden={!showSkinTonePicker || undefined}\n >\n <span className={styles['emoji-popover__skin-tone-label']}>Skin tone</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={() => { setSkinToneIndex(i); setShowSkinTonePicker(false); }}\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={() => { setActiveCategoryId(cat.id); scrollToCategory(cat.id); }}\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}>{renderBody()}</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","e","IconButton","Icon","CloseIcon","Scrollbar","Fragment","Emoji","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EmojiPopover.cjs","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","e","IconButton","Icon","CloseIcon","Scrollbar","Fragment","Emoji","Button"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiPopover.d.ts","sourceRoot":"","sources":["../../../src/components/emoji-popover/EmojiPopover.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAc3C,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"EmojiPopover.d.ts","sourceRoot":"","sources":["../../../src/components/emoji-popover/EmojiPopover.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAc3C,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AA6DD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,SAAc,EACd,UAAU,EACV,UAAe,EACf,YAAiB,EACjB,SAAiB,EACjB,aAAa,EACb,QAAQ,EACR,kBAAkB,EAClB,gBAAiC,GAClC,EAAE,iBAAiB,2CAkRnB"}
|
|
@@ -12,7 +12,14 @@ import ne from "../scrollbar/Scrollbar.js";
|
|
|
12
12
|
import se from "../search-input/SearchInput.js";
|
|
13
13
|
import le from "../../illustrations/search.svg.js";
|
|
14
14
|
import i from "./EmojiPopover.module.scss.js";
|
|
15
|
-
const P = ["đī¸", "đđģ", "đđŧ", "đđŊ", "đđž", "đđŋ"], ae = [
|
|
15
|
+
const P = ["đī¸", "đđģ", "đđŧ", "đđŊ", "đđž", "đđŋ"], ae = [
|
|
16
|
+
"",
|
|
17
|
+
"đģ",
|
|
18
|
+
"đŧ",
|
|
19
|
+
"đŊ",
|
|
20
|
+
"đž",
|
|
21
|
+
"đŋ"
|
|
22
|
+
], te = /* @__PURE__ */ new Set([
|
|
16
23
|
"đ",
|
|
17
24
|
"đ¤",
|
|
18
25
|
"â",
|
|
@@ -69,7 +76,9 @@ function Ce({
|
|
|
69
76
|
customEmojiLabel: H = "Custom emoji"
|
|
70
77
|
}) {
|
|
71
78
|
var R;
|
|
72
|
-
const [l, $] = t(D), [A, F] = t(
|
|
79
|
+
const [l, $] = t(D), [A, F] = t(
|
|
80
|
+
((R = s[0]) == null ? void 0 : R.id) ?? ""
|
|
81
|
+
), [N, y] = t(null), [K, I] = t(null), [v, L] = t(0), [a, h] = t(!1), S = _(null), C = `${Y()}-skin-tone-picker`, Q = ae[v], b = _(null), w = _({});
|
|
73
82
|
Z(() => {
|
|
74
83
|
var e;
|
|
75
84
|
k && ((e = S.current) == null || e.focus());
|
|
@@ -120,21 +129,29 @@ function Ce({
|
|
|
120
129
|
) : f === "search-results" ? /* @__PURE__ */ o("div", { className: i["emoji-popover__emoji-list"], children: /* @__PURE__ */ n("div", { className: i["emoji-popover__group"], children: [
|
|
121
130
|
/* @__PURE__ */ o(O, { label: "Search Results" }),
|
|
122
131
|
/* @__PURE__ */ o("div", { className: i["emoji-popover__emoji-row"], children: T.map(E) })
|
|
123
|
-
] }) }) : /* @__PURE__ */ o("div", { className: i["emoji-popover__emoji-list"], children: s.map((e) => /* @__PURE__ */ n(
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
132
|
+
] }) }) : /* @__PURE__ */ o("div", { className: i["emoji-popover__emoji-list"], children: s.map((e) => /* @__PURE__ */ n(
|
|
133
|
+
"div",
|
|
134
|
+
{
|
|
135
|
+
ref: (r) => {
|
|
136
|
+
w.current[e.id] = r;
|
|
137
|
+
},
|
|
138
|
+
className: i["emoji-popover__group"],
|
|
139
|
+
children: [
|
|
140
|
+
/* @__PURE__ */ o(O, { label: e.label }),
|
|
141
|
+
/* @__PURE__ */ o(
|
|
142
|
+
"div",
|
|
143
|
+
{
|
|
144
|
+
className: [
|
|
145
|
+
i["emoji-popover__emoji-row"],
|
|
146
|
+
e.wrap === !1 ? i["emoji-popover__emoji-row--nowrap"] : ""
|
|
147
|
+
].filter(Boolean).join(" "),
|
|
148
|
+
children: e.emojis.map(E)
|
|
149
|
+
}
|
|
150
|
+
)
|
|
151
|
+
]
|
|
152
|
+
},
|
|
153
|
+
e.id
|
|
154
|
+
)) });
|
|
138
155
|
return /* @__PURE__ */ n("div", { className: J, children: [
|
|
139
156
|
/* @__PURE__ */ n("div", { className: i["emoji-popover__header"], children: [
|
|
140
157
|
/* @__PURE__ */ n("div", { className: i["emoji-popover__header-panels"], children: [
|