@mattermost/compass-ui 0.1.0-alpha.27 → 0.1.0-alpha.28
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/dist/compass-ui.css +16 -0
- package/dist/components/admin-console-footer/AdminConsoleFooter.css +1 -1
- package/dist/components/admin-console-footer/AdminConsoleFooter.module.scss.cjs +1 -1
- package/dist/components/admin-console-footer/AdminConsoleFooter.module.scss.js +7 -7
- package/dist/components/admin-console-header/AdminConsoleHeader.css +1 -1
- package/dist/components/admin-console-header/AdminConsoleHeader.module.scss.cjs +1 -1
- package/dist/components/admin-console-header/AdminConsoleHeader.module.scss.js +8 -8
- package/dist/components/admin-panel/AdminPanel.css +1 -1
- package/dist/components/admin-panel/AdminPanel.module.scss.cjs +1 -1
- package/dist/components/admin-panel/AdminPanel.module.scss.js +5 -5
- package/dist/components/admin-panel-footer/AdminPanelFooter.css +1 -1
- package/dist/components/admin-panel-footer/AdminPanelFooter.module.scss.cjs +1 -1
- package/dist/components/admin-panel-footer/AdminPanelFooter.module.scss.js +5 -5
- package/dist/components/admin-panel-header/AdminPanelHeader.cjs +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.cjs.map +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.css +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.d.ts +6 -0
- package/dist/components/admin-panel-header/AdminPanelHeader.d.ts.map +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.js +145 -109
- package/dist/components/admin-panel-header/AdminPanelHeader.js.map +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.cjs +1 -1
- package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.js +11 -10
- package/dist/components/admin-panel-header/AdminPanelHeader.module.scss.js.map +1 -1
- package/dist/components/attachment-card/AttachmentCard.css +1 -1
- package/dist/components/attachment-card/AttachmentCard.module.scss.cjs +1 -1
- package/dist/components/attachment-card/AttachmentCard.module.scss.js +22 -19
- package/dist/components/attachment-card/AttachmentCard.module.scss.js.map +1 -1
- package/dist/components/button/Button.css +1 -1
- package/dist/components/button/Button.module.scss.cjs +1 -1
- package/dist/components/button/Button.module.scss.js +20 -19
- package/dist/components/button/Button.module.scss.js.map +1 -1
- package/dist/components/card-button/CardButton.css +1 -1
- package/dist/components/card-button/CardButton.module.scss.cjs +1 -1
- package/dist/components/card-button/CardButton.module.scss.js +7 -7
- package/dist/components/card-button/CardButtonGroup.css +1 -1
- package/dist/components/card-button/CardButtonGroup.module.scss.cjs +1 -1
- package/dist/components/card-button/CardButtonGroup.module.scss.js +1 -1
- package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.css +1 -1
- package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.module.scss.cjs +1 -1
- package/dist/components/channel-info-msg-header/ChannelInfoMsgHeader.module.scss.js +8 -8
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.css +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts +66 -7
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +163 -93
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.cjs +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js +35 -22
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js.map +1 -1
- package/dist/components/checkbox/Checkbox.css +1 -1
- package/dist/components/checkbox/Checkbox.module.scss.cjs +1 -1
- package/dist/components/checkbox/Checkbox.module.scss.js +7 -7
- package/dist/components/chip/Chip.cjs +1 -1
- package/dist/components/chip/Chip.cjs.map +1 -1
- package/dist/components/chip/Chip.css +1 -1
- package/dist/components/chip/Chip.d.ts.map +1 -1
- package/dist/components/chip/Chip.js +8 -8
- package/dist/components/chip/Chip.js.map +1 -1
- package/dist/components/chip/Chip.module.scss.cjs +1 -1
- package/dist/components/chip/Chip.module.scss.js +13 -10
- package/dist/components/chip/Chip.module.scss.js.map +1 -1
- package/dist/components/chip/ChipGroup.cjs +1 -1
- package/dist/components/chip/ChipGroup.cjs.map +1 -1
- package/dist/components/chip/ChipGroup.css +1 -1
- package/dist/components/chip/ChipGroup.d.ts +1 -1
- package/dist/components/chip/ChipGroup.d.ts.map +1 -1
- package/dist/components/chip/ChipGroup.js +30 -30
- package/dist/components/chip/ChipGroup.js.map +1 -1
- package/dist/components/chip/ChipGroup.module.scss.cjs +1 -1
- package/dist/components/chip/ChipGroup.module.scss.js +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 +10 -0
- package/dist/components/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.js +269 -252
- 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 +34 -31
- package/dist/components/combobox/Combobox.module.scss.js.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.cjs +1 -1
- package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.css +1 -1
- package/dist/components/date-range-picker/DateRangePicker.d.ts +14 -1
- package/dist/components/date-range-picker/DateRangePicker.d.ts.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.js +217 -195
- 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 +29 -26
- package/dist/components/date-range-picker/DateRangePicker.module.scss.js.map +1 -1
- package/dist/components/divider/Divider.css +1 -1
- package/dist/components/divider/Divider.module.scss.cjs +1 -1
- package/dist/components/divider/Divider.module.scss.js +1 -1
- package/dist/components/dropdown/Dropdown.css +1 -1
- package/dist/components/dropdown/Dropdown.module.scss.cjs +1 -1
- package/dist/components/dropdown/Dropdown.module.scss.js +23 -22
- package/dist/components/dropdown/Dropdown.module.scss.js.map +1 -1
- package/dist/components/emoji/Emoji.css +1 -1
- package/dist/components/emoji/Emoji.module.scss.cjs +1 -1
- package/dist/components/emoji/Emoji.module.scss.js +12 -12
- package/dist/components/emoji-button/EmojiButton.css +1 -1
- package/dist/components/emoji-button/EmojiButton.module.scss.cjs +1 -1
- package/dist/components/emoji-button/EmojiButton.module.scss.js +12 -9
- package/dist/components/emoji-button/EmojiButton.module.scss.js.map +1 -1
- package/dist/components/emoji-popover/EmojiPopover.css +1 -1
- package/dist/components/emoji-popover/EmojiPopover.module.scss.cjs +1 -1
- package/dist/components/emoji-popover/EmojiPopover.module.scss.js +21 -21
- package/dist/components/empty-state/EmptyState.css +1 -1
- package/dist/components/empty-state/EmptyState.module.scss.cjs +1 -1
- package/dist/components/empty-state/EmptyState.module.scss.js +7 -7
- package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.css +1 -1
- package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.module.scss.cjs +1 -1
- package/dist/components/feature-discovery-panel/FeatureDiscoveryPanel.module.scss.js +9 -9
- package/dist/components/field/FieldClearButton.css +1 -1
- package/dist/components/field/FieldClearButton.module.scss.cjs +1 -1
- package/dist/components/field/FieldClearButton.module.scss.js +3 -3
- package/dist/components/field-message/FieldMessage.css +1 -1
- package/dist/components/field-message/FieldMessage.module.scss.cjs +1 -1
- package/dist/components/field-message/FieldMessage.module.scss.js +7 -7
- package/dist/components/global-banner/GlobalBanner.css +1 -1
- package/dist/components/global-banner/GlobalBanner.module.scss.cjs +1 -1
- package/dist/components/global-banner/GlobalBanner.module.scss.js +10 -10
- package/dist/components/icon/Icon.css +1 -1
- package/dist/components/icon/Icon.module.scss.cjs +1 -1
- package/dist/components/icon/Icon.module.scss.js +13 -13
- package/dist/components/icon-button/IconButton.css +1 -1
- package/dist/components/icon-button/IconButton.module.scss.cjs +1 -1
- package/dist/components/icon-button/IconButton.module.scss.js +19 -16
- package/dist/components/icon-button/IconButton.module.scss.js.map +1 -1
- package/dist/components/illustration/Illustration.css +1 -1
- package/dist/components/illustration/Illustration.module.scss.cjs +1 -1
- package/dist/components/illustration/Illustration.module.scss.js +1 -1
- package/dist/components/image-preview/ImagePreview.css +1 -1
- package/dist/components/image-preview/ImagePreview.module.scss.cjs +1 -1
- package/dist/components/image-preview/ImagePreview.module.scss.js +15 -15
- package/dist/components/link-preview/LinkPreview.css +1 -1
- package/dist/components/link-preview/LinkPreview.module.scss.cjs +1 -1
- package/dist/components/link-preview/LinkPreview.module.scss.js +14 -14
- package/dist/components/mention-badge/MentionBadge.css +1 -1
- package/dist/components/mention-badge/MentionBadge.module.scss.cjs +1 -1
- package/dist/components/mention-badge/MentionBadge.module.scss.js +9 -9
- package/dist/components/menu-group-heading/MenuGroupHeading.css +1 -1
- package/dist/components/menu-group-heading/MenuGroupHeading.module.scss.cjs +1 -1
- package/dist/components/menu-group-heading/MenuGroupHeading.module.scss.js +2 -2
- package/dist/components/menu-item/MenuItem.css +1 -1
- package/dist/components/menu-item/MenuItem.module.scss.cjs +1 -1
- package/dist/components/menu-item/MenuItem.module.scss.js +18 -18
- package/dist/components/message-actions/MessageActions.css +1 -1
- package/dist/components/message-actions/MessageActions.module.scss.cjs +1 -1
- package/dist/components/message-actions/MessageActions.module.scss.js +2 -2
- package/dist/components/message-header/MessageHeader.css +1 -1
- package/dist/components/message-header/MessageHeader.module.scss.cjs +1 -1
- package/dist/components/message-header/MessageHeader.module.scss.js +3 -3
- package/dist/components/message-separator/MessageSeparator.css +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/modal/Modal.cjs +1 -1
- package/dist/components/modal/Modal.cjs.map +1 -1
- package/dist/components/modal/Modal.css +1 -1
- package/dist/components/modal/Modal.d.ts +11 -1
- package/dist/components/modal/Modal.d.ts.map +1 -1
- package/dist/components/modal/Modal.js +38 -36
- package/dist/components/modal/Modal.js.map +1 -1
- package/dist/components/modal/Modal.module.scss.cjs +1 -1
- package/dist/components/modal/Modal.module.scss.js +11 -11
- package/dist/components/modal/ModalOverlay.css +1 -1
- package/dist/components/modal/ModalOverlay.module.scss.cjs +1 -1
- package/dist/components/modal/ModalOverlay.module.scss.js +5 -5
- package/dist/components/modal-footer/ModalFooter.css +1 -1
- package/dist/components/modal-footer/ModalFooter.module.scss.cjs +1 -1
- package/dist/components/modal-footer/ModalFooter.module.scss.js +11 -11
- package/dist/components/modal-header/ModalHeader.cjs +1 -1
- package/dist/components/modal-header/ModalHeader.cjs.map +1 -1
- package/dist/components/modal-header/ModalHeader.css +1 -1
- package/dist/components/modal-header/ModalHeader.d.ts +13 -3
- package/dist/components/modal-header/ModalHeader.d.ts.map +1 -1
- package/dist/components/modal-header/ModalHeader.js +61 -55
- package/dist/components/modal-header/ModalHeader.js.map +1 -1
- package/dist/components/modal-header/ModalHeader.module.scss.cjs +1 -1
- package/dist/components/modal-header/ModalHeader.module.scss.js +18 -16
- package/dist/components/modal-header/ModalHeader.module.scss.js.map +1 -1
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.css +1 -1
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.cjs +1 -1
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js +8 -5
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js.map +1 -1
- package/dist/components/new-message-banner/NewMessageBanner.css +1 -1
- package/dist/components/new-message-banner/NewMessageBanner.module.scss.cjs +1 -1
- package/dist/components/new-message-banner/NewMessageBanner.module.scss.js +9 -9
- package/dist/components/pagination-dots/PaginationDots.css +1 -1
- package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
- package/dist/components/pagination-dots/PaginationDots.module.scss.js +10 -10
- package/dist/components/password-input/PasswordInput.css +1 -1
- package/dist/components/password-input/PasswordInput.module.scss.cjs +1 -1
- package/dist/components/password-input/PasswordInput.module.scss.js +15 -14
- package/dist/components/password-input/PasswordInput.module.scss.js.map +1 -1
- package/dist/components/permalink-preview/PermalinkPreview.css +1 -1
- package/dist/components/permalink-preview/PermalinkPreview.module.scss.cjs +1 -1
- package/dist/components/permalink-preview/PermalinkPreview.module.scss.js +13 -13
- package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.css +1 -1
- package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.module.scss.cjs +1 -1
- package/dist/components/pinned-saved-indicators/PinnedSavedIndicators.module.scss.js +7 -7
- package/dist/components/popover-menu/PopoverMenu.css +1 -1
- package/dist/components/popover-menu/PopoverMenu.module.scss.cjs +1 -1
- package/dist/components/popover-menu/PopoverMenu.module.scss.js +13 -13
- package/dist/components/popover-notice/PopoverNotice.css +1 -1
- package/dist/components/popover-notice/PopoverNotice.module.scss.cjs +1 -1
- package/dist/components/popover-notice/PopoverNotice.module.scss.js +14 -14
- package/dist/components/profile-popover/ProfilePopover.css +1 -1
- package/dist/components/profile-popover/ProfilePopover.module.scss.cjs +1 -1
- package/dist/components/profile-popover/ProfilePopover.module.scss.js +33 -33
- package/dist/components/progress-bar/ProgressBar.css +1 -1
- package/dist/components/progress-bar/ProgressBar.module.scss.cjs +1 -1
- package/dist/components/progress-bar/ProgressBar.module.scss.js +9 -9
- package/dist/components/radio/Radio.css +1 -1
- package/dist/components/radio/Radio.module.scss.cjs +1 -1
- package/dist/components/radio/Radio.module.scss.js +12 -12
- package/dist/components/reaction-button/ReactionButton.css +1 -1
- package/dist/components/reaction-button/ReactionButton.module.scss.cjs +1 -1
- package/dist/components/reaction-button/ReactionButton.module.scss.js +8 -8
- package/dist/components/reactions-row/ReactionsRow.css +1 -1
- package/dist/components/reactions-row/ReactionsRow.module.scss.cjs +1 -1
- package/dist/components/reactions-row/ReactionsRow.module.scss.js +8 -8
- 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.css +1 -1
- package/dist/components/right-sidebar-header/RightSidebarHeader.d.ts.map +1 -1
- package/dist/components/right-sidebar-header/RightSidebarHeader.js +39 -36
- package/dist/components/right-sidebar-header/RightSidebarHeader.js.map +1 -1
- package/dist/components/right-sidebar-header/RightSidebarHeader.module.scss.cjs +1 -1
- package/dist/components/right-sidebar-header/RightSidebarHeader.module.scss.js +12 -13
- package/dist/components/right-sidebar-header/RightSidebarHeader.module.scss.js.map +1 -1
- package/dist/components/scrollbar/Scrollbar.css +1 -1
- package/dist/components/scrollbar/Scrollbar.module.scss.cjs +1 -1
- package/dist/components/scrollbar/Scrollbar.module.scss.js +5 -5
- package/dist/components/search-input/SearchInput.css +1 -1
- package/dist/components/search-input/SearchInput.module.scss.cjs +1 -1
- package/dist/components/search-input/SearchInput.module.scss.js +15 -15
- package/dist/components/search-tip-banner/SearchTipBanner.css +1 -1
- package/dist/components/search-tip-banner/SearchTipBanner.module.scss.cjs +1 -1
- package/dist/components/search-tip-banner/SearchTipBanner.module.scss.js +3 -3
- package/dist/components/section-notice/SectionNotice.css +1 -1
- package/dist/components/section-notice/SectionNotice.module.scss.cjs +1 -1
- package/dist/components/section-notice/SectionNotice.module.scss.js +12 -12
- package/dist/components/segmented-control/SegmentedControl.cjs +2 -0
- package/dist/components/segmented-control/SegmentedControl.cjs.map +1 -0
- package/dist/components/segmented-control/SegmentedControl.css +1 -0
- package/dist/components/segmented-control/SegmentedControl.d.ts +71 -0
- package/dist/components/segmented-control/SegmentedControl.d.ts.map +1 -0
- package/dist/components/segmented-control/SegmentedControl.js +173 -0
- package/dist/components/segmented-control/SegmentedControl.js.map +1 -0
- package/dist/components/segmented-control/SegmentedControl.module.scss.cjs +2 -0
- package/dist/components/segmented-control/SegmentedControl.module.scss.cjs.map +1 -0
- package/dist/components/segmented-control/SegmentedControl.module.scss.js +20 -0
- package/dist/components/segmented-control/SegmentedControl.module.scss.js.map +1 -0
- package/dist/components/segmented-control/index.cjs +2 -0
- package/dist/components/segmented-control/index.cjs.map +1 -0
- package/dist/components/segmented-control/index.d.ts +3 -0
- package/dist/components/segmented-control/index.d.ts.map +1 -0
- package/dist/components/segmented-control/index.js +5 -0
- package/dist/components/segmented-control/index.js.map +1 -0
- package/dist/components/select/Select.cjs +1 -1
- package/dist/components/select/Select.cjs.map +1 -1
- package/dist/components/select/Select.css +1 -1
- package/dist/components/select/Select.d.ts +14 -0
- package/dist/components/select/Select.d.ts.map +1 -1
- package/dist/components/select/Select.js +151 -130
- package/dist/components/select/Select.js.map +1 -1
- package/dist/components/select/Select.module.scss.cjs +1 -1
- package/dist/components/select/Select.module.scss.js +28 -26
- package/dist/components/select/Select.module.scss.js.map +1 -1
- package/dist/components/shortcut-tag/ShortcutTag.css +1 -1
- package/dist/components/shortcut-tag/ShortcutTag.module.scss.cjs +1 -1
- package/dist/components/shortcut-tag/ShortcutTag.module.scss.js +7 -7
- package/dist/components/spinner/Spinner.css +1 -1
- package/dist/components/spinner/Spinner.module.scss.cjs +1 -1
- package/dist/components/spinner/Spinner.module.scss.js +2 -2
- package/dist/components/status-badge/StatusBadge.cjs +1 -1
- package/dist/components/status-badge/StatusBadge.cjs.map +1 -1
- package/dist/components/status-badge/StatusBadge.css +1 -1
- package/dist/components/status-badge/StatusBadge.d.ts +3 -1
- package/dist/components/status-badge/StatusBadge.d.ts.map +1 -1
- package/dist/components/status-badge/StatusBadge.js +16 -15
- package/dist/components/status-badge/StatusBadge.js.map +1 -1
- package/dist/components/status-badge/StatusBadge.module.scss.cjs +1 -1
- package/dist/components/status-badge/StatusBadge.module.scss.js +11 -11
- package/dist/components/switch/Switch.css +1 -1
- package/dist/components/switch/Switch.module.scss.cjs +1 -1
- package/dist/components/switch/Switch.module.scss.js +8 -8
- package/dist/components/tabs/Tabs.css +1 -1
- package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
- package/dist/components/tabs/Tabs.module.scss.js +16 -13
- package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
- package/dist/components/tag/Tag.css +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/team-avatar/TeamAvatar.css +1 -1
- package/dist/components/team-avatar/TeamAvatar.module.scss.cjs +1 -1
- package/dist/components/team-avatar/TeamAvatar.module.scss.js +17 -17
- package/dist/components/text-area/TextArea.css +1 -1
- package/dist/components/text-area/TextArea.module.scss.cjs +1 -1
- package/dist/components/text-area/TextArea.module.scss.js +12 -12
- package/dist/components/text-input/TextInput.css +1 -1
- package/dist/components/text-input/TextInput.module.scss.cjs +1 -1
- package/dist/components/text-input/TextInput.module.scss.js +19 -19
- 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 +14 -14
- 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 +19 -20
- package/dist/components/thread-footer/ThreadFooter.module.scss.js.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.css +1 -1
- package/dist/components/thread-list-item/ThreadListItem.module.scss.cjs +1 -1
- package/dist/components/thread-list-item/ThreadListItem.module.scss.js +26 -26
- package/dist/components/tile-button/TileButton.css +1 -1
- package/dist/components/tile-button/TileButton.module.scss.cjs +1 -1
- package/dist/components/tile-button/TileButton.module.scss.js +6 -6
- package/dist/components/toast/Toast.css +1 -1
- package/dist/components/toast/Toast.module.scss.cjs +1 -1
- package/dist/components/toast/Toast.module.scss.js +11 -11
- package/dist/components/tooltip/Tooltip.cjs +1 -1
- package/dist/components/tooltip/Tooltip.cjs.map +1 -1
- package/dist/components/tooltip/Tooltip.css +1 -1
- package/dist/components/tooltip/Tooltip.d.ts +10 -1
- package/dist/components/tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/tooltip/Tooltip.js +29 -17
- package/dist/components/tooltip/Tooltip.js.map +1 -1
- package/dist/components/tooltip/Tooltip.module.scss.cjs +1 -1
- package/dist/components/tooltip/Tooltip.module.scss.js +7 -6
- package/dist/components/tooltip/Tooltip.module.scss.js.map +1 -1
- package/dist/components/tooltip/index.d.ts +1 -1
- package/dist/components/tooltip/index.d.ts.map +1 -1
- package/dist/components/tour-point/TourPoint.css +1 -1
- package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
- package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
- package/dist/components/unread-badge/UnreadBadge.css +1 -1
- package/dist/components/unread-badge/UnreadBadge.module.scss.cjs +1 -1
- package/dist/components/unread-badge/UnreadBadge.module.scss.js +5 -5
- package/dist/components/user-avatar/UserAvatar.cjs +1 -1
- package/dist/components/user-avatar/UserAvatar.cjs.map +1 -1
- package/dist/components/user-avatar/UserAvatar.css +1 -1
- package/dist/components/user-avatar/UserAvatar.d.ts +18 -8
- package/dist/components/user-avatar/UserAvatar.d.ts.map +1 -1
- package/dist/components/user-avatar/UserAvatar.js +84 -52
- package/dist/components/user-avatar/UserAvatar.js.map +1 -1
- package/dist/components/user-avatar/UserAvatar.module.scss.cjs +1 -1
- package/dist/components/user-avatar/UserAvatar.module.scss.js +33 -26
- package/dist/components/user-avatar/UserAvatar.module.scss.js.map +1 -1
- package/dist/components/user-avatar-group/UserAvatarGroup.css +1 -1
- package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.cjs +1 -1
- package/dist/components/user-avatar-group/UserAvatarGroup.module.scss.js +14 -14
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -55
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Combobox.js","sources":["../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n FocusEvent,\n FocusEventHandler,\n InputHTMLAttributes,\n KeyboardEvent,\n KeyboardEventHandler,\n MouseEvent,\n ReactNode,\n} from 'react';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport CloseCircleIcon from '@mattermost/compass-icons/components/close-circle';\nimport PlusIcon from '@mattermost/compass-icons/components/plus';\nimport Chip from '@/components/chip/Chip';\nimport ChipGroup from '@/components/chip/ChipGroup';\nimport type { ChipSize } from '@/components/chip/Chip';\nimport Icon from '@/components/icon/Icon';\nimport { IconSlotContext } from '@/components/icon/Icon';\nimport type { IconSize } from '@/components/icon/Icon';\nimport MenuItem from '@/components/menu-item/MenuItem';\nimport type {\n MenuItemOwnedProps,\n MenuItemPassthroughProps,\n} from '@/components/menu-item/MenuItem';\nimport PopoverMenu, {\n PopoverMenuScroll,\n} from '@/components/popover-menu/PopoverMenu';\nimport Spinner from '@/components/spinner/Spinner';\nimport TeamAvatar from '@/components/team-avatar/TeamAvatar';\nimport UserAvatar from '@/components/user-avatar/UserAvatar';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport { mergeMenuItemProps } from '@/utils/menuItemProps';\nimport type { BuiltInButtonProps, DataAttributes } from '@/utils/props';\nimport { mergeClassNames } from '@/utils/props';\nimport { toKebab } from '@/utils/string';\nimport styles from './Combobox.module.scss';\n\nexport type ComboboxSize = 'small' | 'medium' | 'large';\n\n// Combobox rows use `onClick`, so `onPointerUp` is left for callers.\ntype ComboboxMenuItemProps = MenuItemPassthroughProps<\n Exclude<MenuItemOwnedProps, 'onPointerUp'>\n>;\n\nexport type ComboboxOption = {\n value: string;\n /** Kept as `string`: the default filter, create-row matching, and the single-select input text all read it. */\n label: string;\n disabled?: boolean;\n /** Leading content for the list row (icon or avatar node). */\n leadingVisual?: ReactNode;\n /** Avatar for chips / list when a photo is preferred over `leadingVisual`. */\n leadingAvatar?: { src: string; alt: string };\n /**\n * Team avatar for the list row — a non-interactive `TeamAvatar` (`variant=\"menu\"`, 24px) with an\n * image or an initials fallback. The row's `label` names the team and `MenuItem` hides the\n * leading visual from assistive tech, so `alt` is optional. List rows only; chips don't render\n * it. With neither `src` nor `initials`, the fallback shows the first two letters of `label`.\n * `leadingVisual` and `leadingAvatar` take precedence.\n */\n leadingTeamAvatar?: { src?: string; initials?: string; alt?: string };\n /** Accepts translated nodes. */\n secondaryLabel?: ReactNode;\n /**\n * Extra `MenuItem` props for this row (e.g. `secondaryLabelPosition`, `tag`,\n * `trailingVisual`, `className`). Overrides the `menuItemProps` set on the\n * Combobox; the props Combobox owns (ARIA, selection, handlers) can't be set.\n */\n menuItemProps?: ComboboxMenuItemProps;\n};\n\n/**\n * Native input attributes `Combobox` sets or can't honor, so they're left out\n * of `ComboboxProps`. The ones it renders (`role`, `type`, `autoComplete`,\n * `aria-expanded`, …) also win at runtime over anything spread onto the input.\n */\nexport type ComboboxOwnedInputProps =\n // Value model: Combobox's own `value` / `defaultValue` / `onChange` / `multiple` / `size`.\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'multiple'\n | 'size'\n | 'type'\n | 'children'\n | 'dangerouslySetInnerHTML'\n // Combobox semantics.\n | 'role'\n | 'autoComplete'\n | 'spellCheck'\n | 'list'\n | 'aria-expanded'\n | 'aria-controls'\n | 'aria-activedescendant'\n | 'aria-autocomplete'\n | 'aria-busy'\n | 'aria-haspopup'\n | 'aria-invalid'\n | 'aria-required'\n // First-class props with Combobox meaning (re-declared below).\n | 'required'\n // No form participation or constraint validation yet.\n | 'name'\n | 'form'\n | 'formAction'\n | 'formEncType'\n | 'formMethod'\n | 'formNoValidate'\n | 'formTarget'\n | 'readOnly'\n | 'maxLength'\n | 'minLength'\n | 'pattern'\n | 'min'\n | 'max'\n | 'step'\n // Not meaningful for a text combobox.\n | 'accept'\n | 'alt'\n | 'capture'\n | 'checked'\n | 'defaultChecked'\n | 'height'\n | 'width'\n | 'src';\n\n/**\n * Extra native input attributes (`data-*`, `aria-describedby`,\n * `aria-errormessage`, `aria-labelledby`, `autoFocus`, `tabIndex`, `style`,\n * `onFocus`, …) go on the `<input role=\"combobox\">`, the element the ref\n * targets. `className` goes on the root. Attributes in\n * `ComboboxOwnedInputProps` can't be set.\n */\nexport interface ComboboxProps\n extends\n Omit<InputHTMLAttributes<HTMLInputElement>, ComboboxOwnedInputProps>,\n DataAttributes {\n options: ComboboxOption[];\n /**\n * `MenuItem` props applied to every option row, e.g.\n * `menuItemProps={{ secondaryLabelPosition: 'inline' }}`. A row's own\n * `menuItemProps` wins. Not applied to the create row.\n */\n menuItemProps?: ComboboxMenuItemProps;\n /** When true, selected values render as removable chips. Default: false. */\n multiple?: boolean;\n value?: string | string[] | null;\n defaultValue?: string | string[] | null;\n onChange?: (value: string | string[] | null) => void;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (value: string) => void;\n label?: ReactNode;\n placeholder?: string;\n leadingIcon?: ReactNode;\n size?: ComboboxSize;\n invalid?: boolean;\n disabled?: boolean;\n /**\n * Marks the field required for assistive tech (`aria-required=\"true\"`).\n * No native `required`, so the browser doesn't validate; the host does.\n * Safe in `multiple` mode, where the input is empty once chips are picked.\n * Default: false.\n */\n required?: boolean;\n /**\n * Client-side filter. `true` (default) matches labels case-insensitively.\n * `false` shows all options (caller filters via `inputValue` / `onInputChange`).\n */\n filter?: boolean | ((option: ComboboxOption, query: string) => boolean);\n /** Shown when there are no rows to pick from. Default: \"No results\". */\n emptyMessage?: ReactNode;\n /**\n * When true, the menu shows a loading row (with Spinner) in place of the\n * empty message. Set while async results are in flight.\n */\n loading?: boolean;\n /** Loading row text. Default: \"Loading…\". */\n loadingMessage?: ReactNode;\n /**\n * Option objects for the current value(s), used for chips and the\n * single-select label when a value is missing from `options` (e.g. an async\n * search that no longer returns it, or values preselected on load). Values\n * found in `options` resolve from there first.\n */\n selectedOptions?: ComboboxOption[];\n /**\n * When true, typed text that matches no option offers a create row. Created\n * values not found in `options` or `selectedOptions` display their raw value\n * as the label.\n */\n creatable?: boolean;\n /**\n * Called with the trimmed input when the create row is chosen. When set, the\n * host owns adding the value (`onChange` is not called). When omitted, the\n * input is committed as the value through `onChange`.\n */\n onCreateOption?: (inputValue: string) => void;\n /** Create row label. Default: `Create \"{inputValue}\"`. */\n formatCreateLabel?: (inputValue: string) => ReactNode;\n /**\n * Single mode: when a value is set, shows a clear button inside the control\n * that calls `onChange(null)`. Ignored with `multiple` (chips have their own\n * remove control). Default: false.\n */\n clearable?: boolean;\n /**\n * Opens the menu when the input receives focus, including keyboard Tab focus,\n * `autoFocus` and focus handed back by the clear button. Off by default:\n * focus alone doesn't open the menu, which then opens on pointer press,\n * typing, or ↓ / ↑. Turn it on only for hosts that need the old\n * focus-to-open behavior.\n */\n openOnFocus?: boolean;\n /**\n * When false, Enter on the input with the menu closed is prevented and stops\n * propagating, so it can't submit a surrounding form or reach host key\n * listeners. Default: true (Enter with the menu closed behaves like Enter in a\n * text input). Enter with the menu open is always handled by Combobox.\n */\n submitOnEnter?: boolean;\n /** Accessible name for the clear button. Default: \"Clear\". */\n clearLabel?: string;\n /** Extra attributes for the clear button (e.g. `data-testid`). */\n clearButtonProps?: BuiltInButtonProps;\n /**\n * Accessible name for the chip group in `multiple` mode. Default:\n * `{label} selections` when `label` is a string, otherwise \"Selected\".\n */\n selectionsLabel?: string;\n /**\n * Accessible name for the options list when `label` isn't a string and no\n * `aria-label` is set. Default: \"Options\".\n */\n listboxLabel?: string;\n className?: string;\n id?: string;\n 'aria-label'?: string;\n /**\n * Runs after Combobox's own focus handling. Focus alone doesn't open the\n * menu. Also runs when the clear button hands focus back to the input.\n */\n onFocus?: FocusEventHandler<HTMLInputElement>;\n /**\n * Runs after Combobox's own blur handling, on every input blur — including\n * when focus moves to the clear button or a chip's remove button. Not called\n * when those buttons blur.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Runs after Combobox's own key handling. `event.defaultPrevented` is true\n * when Combobox handled the key (arrows, Home / End while open, Enter while\n * the menu is open (picking the highlighted row, if any), Enter with the menu\n * closed when `submitOnEnter` is false, Escape while open, Backspace removing\n * a chip); those Enter and Escape presses also stop propagating. Calling\n * `preventDefault()` here doesn't stop Combobox's handling. Any `onChange`\n * the key caused has already been called, but host state read here is\n * still from before that change.\n */\n onKeyDown?: KeyboardEventHandler<HTMLInputElement>;\n /** Portal mount node for the menu; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled menu. */\n zIndex?: number;\n}\n\nconst POPUP_MAX_HEIGHT = 280;\n\nconst CHIP_SIZE_BY_COMBOBOX: Record<ComboboxSize, ChipSize> = {\n small: 'small',\n medium: 'medium',\n large: 'large',\n};\n\nconst CLEAR_ICON_SIZE: Record<ComboboxSize, IconSize> = {\n small: '12',\n medium: '16',\n large: '16',\n};\n\nfunction defaultSelectionsLabel(label: ReactNode): string {\n return typeof label === 'string' ? `${label} selections` : 'Selected';\n}\n\ntype ComboboxRow =\n | { kind: 'option'; option: ComboboxOption }\n | { kind: 'create'; inputValue: string };\n\nfunction defaultFormatCreateLabel(inputValue: string): ReactNode {\n return `Create \"${inputValue}\"`;\n}\n\nfunction isRowDisabled(row: ComboboxRow): boolean {\n return row.kind === 'option' && row.option.disabled === true;\n}\n\nfunction defaultFilter(option: ComboboxOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction toSingleValue(\n value: string | string[] | null | undefined,\n): string | null {\n if (value == null) return null;\n if (Array.isArray(value)) return value[0] ?? null;\n return value === '' ? null : value;\n}\n\nfunction toMultiValue(value: string | string[] | null | undefined): string[] {\n if (value == null) return [];\n if (Array.isArray(value)) return value;\n return value === '' ? [] : [value];\n}\n\nfunction optionLeadingVisual(option: ComboboxOption): ReactNode | undefined {\n if (option.leadingVisual != null) return option.leadingVisual;\n if (option.leadingAvatar != null) {\n return (\n <UserAvatar\n src={option.leadingAvatar.src}\n alt={option.leadingAvatar.alt}\n size=\"24\"\n />\n );\n }\n if (option.leadingTeamAvatar != null) {\n return (\n <TeamAvatar\n src={option.leadingTeamAvatar.src}\n initials={\n option.leadingTeamAvatar.initials ??\n (option.leadingTeamAvatar.src\n ? undefined\n : Array.from(option.label).slice(0, 2).join(''))\n }\n alt={option.leadingTeamAvatar.alt}\n size=\"24\"\n variant=\"menu\"\n />\n );\n }\n return undefined;\n}\n\n/**\n * { value: 'town-square', label: 'Town Square' }, { value: 'off-topic', label: 'Off-Topic'\n * }, { value: 'design', label: 'Design' }, { value: 'engineering', label: 'Engineering' }, {\n * value: 'releases', label: 'Releases' }, ];\n */\nconst Combobox = forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(\n {\n options,\n menuItemProps,\n multiple = false,\n value: valueProp,\n defaultValue,\n onChange,\n inputValue: inputValueProp,\n defaultInputValue = '',\n onInputChange,\n label,\n placeholder,\n leadingIcon,\n size = 'medium',\n invalid = false,\n disabled = false,\n filter = true,\n emptyMessage = 'No results',\n loading = false,\n loadingMessage = 'Loading…',\n selectedOptions,\n creatable = false,\n onCreateOption,\n formatCreateLabel = defaultFormatCreateLabel,\n clearable = false,\n openOnFocus = false,\n submitOnEnter = true,\n clearLabel = 'Clear',\n clearButtonProps,\n selectionsLabel,\n listboxLabel = 'Options',\n className = '',\n id: idProp,\n 'aria-label': ariaLabel,\n 'aria-describedby': describedBy,\n required = false,\n onFocus,\n onBlur,\n onKeyDown,\n portalContainer = null,\n zIndex,\n ...rest\n },\n ref,\n) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const listboxId = `${id}-listbox`;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isValueControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState<\n string | string[] | null\n >(() => {\n if (defaultValue !== undefined) return defaultValue;\n return multiple ? [] : null;\n });\n\n const rawValue = isValueControlled ? valueProp! : uncontrolledValue;\n const singleValue = multiple ? null : toSingleValue(rawValue);\n const multiValue = useMemo(\n () => (multiple ? toMultiValue(rawValue) : []),\n [multiple, rawValue],\n );\n\n const isInputControlled = inputValueProp !== undefined;\n const [uncontrolledInput, setUncontrolledInput] = useState(defaultInputValue);\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n // Hover moves the highlight without scrolling; only keyboard changes scroll the row into view.\n const activatedByPointer = useRef(false);\n const selectAllFrame = useRef<number | null>(null);\n const hoverRow = useCallback(\n (index: number) => {\n if (index === activeIndex) return;\n activatedByPointer.current = true;\n setActiveIndex(index);\n },\n [activeIndex],\n );\n const [queryOverride, setQueryOverride] = useState<string | null>(null);\n\n const resolveOption = useCallback(\n (optionValue: string): ComboboxOption | undefined =>\n options.find((o) => o.value === optionValue) ??\n selectedOptions?.find((o) => o.value === optionValue) ??\n (creatable ? { value: optionValue, label: optionValue } : undefined),\n [options, selectedOptions, creatable],\n );\n\n const selectedOption = useMemo(\n () => (singleValue == null ? undefined : resolveOption(singleValue)),\n [resolveOption, singleValue],\n );\n\n // Single-select: show the selected label until the user starts typing a filter.\n // `queryOverride !== null` means the field is in filter-edit mode.\n const displayInput = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return selectedOption?.label ?? uncontrolledInput;\n })();\n\n const filterQuery = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return '';\n })();\n\n const setInputDisplay = useCallback(\n (next: string) => {\n if (!isInputControlled) {\n setUncontrolledInput(next);\n if (!multiple) setQueryOverride(next);\n }\n onInputChange?.(next);\n },\n [isInputControlled, multiple, onInputChange],\n );\n\n const commitValue = useCallback(\n (next: string | string[] | null) => {\n if (!isValueControlled) setUncontrolledValue(next);\n onChange?.(next);\n },\n [isValueControlled, onChange],\n );\n\n const filteredOptions = useMemo(() => {\n if (filter === false) return options;\n const fn = typeof filter === 'function' ? filter : defaultFilter;\n return options.filter((o) => fn(o, filterQuery));\n }, [options, filter, filterQuery]);\n\n const createInput = creatable ? filterQuery.trim() : '';\n const showCreateRow = useMemo(() => {\n if (createInput === '') return false;\n const needle = createInput.toLowerCase();\n const matches = (text: string) => text.toLowerCase() === needle;\n const knownOptions = [...options, ...(selectedOptions ?? [])];\n if (knownOptions.some((o) => matches(o.label) || matches(o.value))) {\n return false;\n }\n const current = multiple\n ? multiValue\n : singleValue != null\n ? [singleValue]\n : [];\n return !current.some(matches);\n }, [\n createInput,\n options,\n selectedOptions,\n multiple,\n multiValue,\n singleValue,\n ]);\n\n const rows = useMemo<ComboboxRow[]>(\n () => [\n ...filteredOptions.map((option) => ({ kind: 'option' as const, option })),\n ...(showCreateRow\n ? [{ kind: 'create' as const, inputValue: createInput }]\n : []),\n ],\n [filteredOptions, showCreateRow, createInput],\n );\n\n const rowId = useCallback(\n (row: ComboboxRow) =>\n row.kind === 'option'\n ? `${listboxId}-option-${row.option.value}`\n : `${listboxId}-create`,\n [listboxId],\n );\n\n const { mounted: popupMounted, visible: popupVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n maxHeight,\n style: popupStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(anchorRef, popupMounted, {\n preferredHeight: POPUP_MAX_HEIGHT,\n maxHeightCap: POPUP_MAX_HEIGHT,\n portalContainer,\n zIndex,\n });\n\n const close = useCallback(() => {\n setIsOpen(false);\n setActiveIndex(-1);\n if (!multiple && !isInputControlled) {\n setQueryOverride(null);\n setUncontrolledInput('');\n }\n }, [multiple, isInputControlled]);\n\n const open = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled]);\n\n useOutsideClose(rootRef, isOpen, close, portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n setActiveIndex((prev) => {\n if (rows.length === 0) return -1;\n if (prev >= 0 && prev < rows.length) return prev;\n const selectedIdx = rows.findIndex(\n (row) =>\n row.kind === 'option' &&\n (multiple\n ? multiValue.includes(row.option.value)\n : row.option.value === singleValue),\n );\n return selectedIdx >= 0 ? selectedIdx : 0;\n });\n }, [isOpen, rows, multiple, multiValue, singleValue]);\n\n const isSelected = useCallback(\n (optionValue: string) =>\n multiple ? multiValue.includes(optionValue) : singleValue === optionValue,\n [multiple, multiValue, singleValue],\n );\n\n const selectOption = useCallback(\n (option: ComboboxOption) => {\n if (option.disabled) return;\n\n if (multiple) {\n const next = multiValue.includes(option.value)\n ? multiValue.filter((v) => v !== option.value)\n : [...multiValue, option.value];\n commitValue(next);\n setInputDisplay('');\n close();\n inputRef.current?.focus();\n return;\n }\n\n commitValue(option.value);\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.(option.label);\n }\n close();\n },\n [\n multiple,\n multiValue,\n commitValue,\n setInputDisplay,\n isInputControlled,\n onInputChange,\n close,\n ],\n );\n\n const createValue = useCallback(\n (inputValue: string) => {\n if (onCreateOption) {\n onCreateOption(inputValue);\n } else if (multiple) {\n commitValue([...multiValue, inputValue]);\n } else {\n commitValue(inputValue);\n }\n\n if (multiple) {\n setInputDisplay('');\n close();\n inputRef.current?.focus();\n return;\n }\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.(inputValue);\n }\n close();\n },\n [\n onCreateOption,\n multiple,\n multiValue,\n commitValue,\n setInputDisplay,\n isInputControlled,\n onInputChange,\n close,\n ],\n );\n\n const selectRow = useCallback(\n (row: ComboboxRow) => {\n if (row.kind === 'create') createValue(row.inputValue);\n else selectOption(row.option);\n },\n [createValue, selectOption],\n );\n\n const clearValue = useCallback(() => {\n commitValue(null);\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.('');\n }\n inputRef.current?.focus();\n }, [commitValue, isInputControlled, onInputChange]);\n\n const removeValue = useCallback(\n (optionValue: string) => {\n if (!multiple) return;\n commitValue(multiValue.filter((v) => v !== optionValue));\n },\n [multiple, multiValue, commitValue],\n );\n\n const moveActive = useCallback(\n (delta: number) => {\n activatedByPointer.current = false;\n const enabled = rows\n .map((row, i) => ({ row, i }))\n .filter(({ row }) => !isRowDisabled(row));\n if (enabled.length === 0) {\n setActiveIndex(-1);\n return;\n }\n setActiveIndex((prev) => {\n const currentPos = enabled.findIndex(({ i }) => i === prev);\n const nextPos =\n currentPos < 0\n ? delta > 0\n ? 0\n : enabled.length - 1\n : (currentPos + delta + enabled.length) % enabled.length;\n return enabled[nextPos].i;\n });\n },\n [rows],\n );\n\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return;\n if (activatedByPointer.current) {\n activatedByPointer.current = false;\n return;\n }\n const row = rows[activeIndex];\n if (!row) return;\n document.getElementById(rowId(row))?.scrollIntoView?.({ block: 'nearest' });\n }, [isOpen, activeIndex, rows, rowId]);\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n cancelSelectAll();\n const next = e.target.value;\n setInputDisplay(next);\n if (!isOpen) open();\n setActiveIndex(0);\n };\n\n const cancelSelectAll = () => {\n if (selectAllFrame.current === null) return;\n cancelAnimationFrame(selectAllFrame.current);\n selectAllFrame.current = null;\n };\n\n useEffect(() => cancelSelectAll, []);\n\n const handleFocus = () => {\n setIsFocused(true);\n if (openOnFocus) open();\n // Select-all so the next keystroke replaces the selected label (filter mode).\n // Cancelled if the user types, navigates or leaves before the frame runs.\n if (!multiple && !isInputControlled && selectedOption) {\n cancelSelectAll();\n selectAllFrame.current = requestAnimationFrame(() => {\n selectAllFrame.current = null;\n inputRef.current?.select();\n });\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLElement>) => {\n // Delay so option mousedown can run first\n const related = e.relatedTarget as Node | null;\n if (related && rootRef.current?.contains(related)) return;\n cancelSelectAll();\n setIsFocused(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n cancelSelectAll();\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n // APG: opening with ArrowUp puts the highlight on the last option.\n for (let i = rows.length - 1; i >= 0; i--) {\n if (!isRowDisabled(rows[i])) {\n setActiveIndex(i);\n break;\n }\n }\n open();\n } else moveActive(-1);\n break;\n case 'Home':\n if (isOpen && rows.length > 0) {\n e.preventDefault();\n setActiveIndex(\n Math.max(\n 0,\n rows.findIndex((row) => !isRowDisabled(row)),\n ),\n );\n }\n break;\n case 'End':\n if (isOpen && rows.length > 0) {\n e.preventDefault();\n for (let i = rows.length - 1; i >= 0; i--) {\n if (!isRowDisabled(rows[i])) {\n setActiveIndex(i);\n break;\n }\n }\n }\n break;\n case 'Enter':\n // keyCode 229 covers older Safari, which doesn't set isComposing\n if (e.nativeEvent.isComposing || e.keyCode === 229) break;\n if (isOpen || !submitOnEnter) {\n e.preventDefault();\n e.stopPropagation();\n }\n if (isOpen && activeIndex >= 0 && rows[activeIndex]) {\n selectRow(rows[activeIndex]);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n e.stopPropagation();\n close();\n }\n break;\n case 'Backspace':\n if (multiple && displayInput === '' && multiValue.length > 0) {\n e.preventDefault();\n removeValue(multiValue[multiValue.length - 1]);\n }\n break;\n case 'Tab':\n close();\n break;\n default:\n break;\n }\n };\n\n const handleInputFocus = (e: FocusEvent<HTMLInputElement>) => {\n handleFocus();\n onFocus?.(e);\n };\n\n const handleInputBlur = (e: FocusEvent<HTMLInputElement>) => {\n handleBlur(e);\n onBlur?.(e);\n };\n\n const handleInputKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n handleKeyDown(e);\n onKeyDown?.(e);\n };\n\n const handleWrapperMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n // Don't steal focus from chips, their remove buttons, or the clear button\n if ((e.target as HTMLElement).closest('[data-chip], [data-combobox-clear]'))\n return;\n if (e.target !== inputRef.current) {\n e.preventDefault();\n inputRef.current?.focus();\n }\n if (!isOpen) open();\n };\n\n const handlePopupMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n // Text fields in a custom empty or loading message still need to take focus\n if (\n (e.target as HTMLElement).closest(\n 'input, textarea, select, [contenteditable=\"true\"]',\n )\n )\n return;\n e.preventDefault();\n };\n\n const hasSelection = multiple\n ? multiValue.length > 0\n : singleValue != null && singleValue !== '';\n const hasInputText = displayInput.length > 0;\n const showClearButton = clearable && !multiple && hasSelection && !disabled;\n const labelFloated = isFocused || isOpen || hasSelection || hasInputText;\n\n const activeRow = activeIndex >= 0 ? rows[activeIndex] : undefined;\n const activeDescendant = activeRow != null ? rowId(activeRow) : undefined;\n\n // Without `selectedOptions`, values in `options` keep their list order (the\n // original behavior); with it, chips follow value order so they don't jump\n // around as async results change.\n const chipOptions = useMemo<ComboboxOption[]>(() => {\n if (!multiple) return [];\n if (selectedOptions == null) {\n const fromOptions = options.filter((o) => multiValue.includes(o.value));\n if (!creatable) return fromOptions;\n const listed = new Set(fromOptions.map((o) => o.value));\n return [\n ...fromOptions,\n ...multiValue\n .filter((v) => !listed.has(v))\n .map((v) => ({ value: v, label: v })),\n ];\n }\n return multiValue\n .map(resolveOption)\n .filter((o): o is ComboboxOption => o != null);\n }, [\n multiple,\n selectedOptions,\n options,\n multiValue,\n creatable,\n resolveOption,\n ]);\n\n const sizeClass = styles[`combobox--size-${toKebab(size)}`];\n const hasChips = multiple && chipOptions.length > 0;\n const rootClass = [\n styles.combobox,\n sizeClass,\n invalid ? styles['combobox--invalid'] : '',\n label != null && labelFloated ? styles['combobox--label-floated'] : '',\n leadingIcon != null ? styles['combobox--has-leading-icon'] : '',\n hasChips ? styles['combobox--has-chips'] : '',\n isOpen ? styles['combobox--open'] : '',\n disabled ? styles['combobox--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} ref={rootRef}>\n <div className={styles.combobox__wrapper} ref={anchorRef}>\n {label != null && (\n <label className={styles.combobox__label} htmlFor={id}>\n {label}\n </label>\n )}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions -- pointer convenience; the input owns keyboard interaction */}\n <div\n className={styles.combobox__inner}\n onMouseDown={handleWrapperMouseDown}\n >\n {leadingIcon != null && (\n <span className={styles['combobox__leading-icon']} aria-hidden>\n <IconSlotContext.Provider value={{ size: '16' }}>\n {leadingIcon}\n </IconSlotContext.Provider>\n </span>\n )}\n <div className={styles.combobox__value}>\n {multiple && chipOptions.length > 0 && (\n <ChipGroup\n aria-label={selectionsLabel ?? defaultSelectionsLabel(label)}\n disabled={disabled}\n >\n {chipOptions.map((option) => (\n <Chip\n key={option.value}\n size={CHIP_SIZE_BY_COMBOBOX[size]}\n leadingAvatar={option.leadingAvatar}\n leadingIcon={\n option.leadingAvatar == null\n ? option.leadingVisual\n : undefined\n }\n onRemove={\n disabled\n ? undefined\n : (ev) => {\n ev.stopPropagation();\n removeValue(option.value);\n }\n }\n >\n {option.label}\n </Chip>\n ))}\n </ChipGroup>\n )}\n <input\n {...rest}\n ref={setInputRef}\n id={id}\n className={styles.combobox__control}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={disabled}\n placeholder={\n multiple && chipOptions.length > 0 ? undefined : placeholder\n }\n value={displayInput}\n aria-label={ariaLabel}\n aria-describedby={describedBy || undefined}\n aria-required={required ? true : undefined}\n aria-invalid={invalid ? true : undefined}\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeDescendant}\n aria-busy={loading || undefined}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n />\n </div>\n {showClearButton && (\n <button\n {...clearButtonProps}\n type=\"button\"\n className={mergeClassNames(\n styles.combobox__clear,\n clearButtonProps?.className,\n )}\n aria-label={clearLabel}\n data-combobox-clear=\"\"\n onClick={clearValue}\n onKeyDown={(e) => {\n // preventDefault() cancels the native click, so clear here.\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n clearValue();\n }\n clearButtonProps?.onKeyDown?.(e);\n }}\n onBlur={(e) => {\n clearButtonProps?.onBlur?.(e);\n handleBlur(e);\n }}\n >\n <Icon size={CLEAR_ICON_SIZE[size]} glyph={<CloseCircleIcon />} />\n </button>\n )}\n <span className={styles['combobox__trailing-icon']} aria-hidden>\n <Icon size=\"12\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n </div>\n\n {popupMounted &&\n renderPortal(\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions -- keeps focus on the input for presses anywhere in the menu\n <div\n ref={portalRef}\n className={[\n styles.combobox__popup,\n placement === 'above' ? styles['combobox__popup--above'] : '',\n popupVisible ? styles['combobox__popup--visible'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popupStyle}\n onMouseDown={handlePopupMouseDown}\n >\n <PopoverMenu className={styles.combobox__menu}>\n <PopoverMenuScroll maxHeight={maxHeight}>\n {rows.length > 0 && (\n <ul\n id={listboxId}\n className={styles.combobox__list}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-label={\n typeof label === 'string'\n ? label\n : (ariaLabel ?? listboxLabel)\n }\n >\n {rows.map((row, index) => {\n const active = index === activeIndex;\n if (row.kind === 'create') {\n return (\n <li\n key={rowId(row)}\n className={styles.combobox__option}\n role=\"presentation\"\n >\n <MenuItem\n id={rowId(row)}\n role=\"option\"\n label={formatCreateLabel(row.inputValue)}\n leadingVisual={<Icon glyph={<PlusIcon />} />}\n active={active}\n aria-selected={false}\n onMouseEnter={() => hoverRow(index)}\n onClick={() => createValue(row.inputValue)}\n />\n </li>\n );\n }\n const { option } = row;\n const selected = isSelected(option.value);\n const leading = optionLeadingVisual(option);\n return (\n <li\n key={option.value}\n className={styles.combobox__option}\n role=\"presentation\"\n >\n <MenuItem\n {...mergeMenuItemProps(\n menuItemProps,\n option.menuItemProps,\n )}\n id={rowId(row)}\n role=\"option\"\n label={option.label}\n secondaryLabel={option.secondaryLabel}\n leadingElement={leading != null}\n leadingVisual={leading}\n trailingElement={selected}\n active={active}\n disabled={option.disabled}\n aria-selected={selected}\n onMouseEnter={() => hoverRow(index)}\n onClick={() => selectOption(option)}\n />\n </li>\n );\n })}\n </ul>\n )}\n {loading ? (\n <div className={styles.combobox__loading} role=\"status\">\n <Spinner size=\"16\" aria-hidden />\n <span>{loadingMessage}</span>\n </div>\n ) : (\n rows.length === 0 && (\n <p className={styles.combobox__empty}>{emptyMessage}</p>\n )\n )}\n </PopoverMenuScroll>\n </PopoverMenu>\n </div>,\n )}\n </div>\n );\n});\n\nexport default Combobox;\n"],"names":["POPUP_MAX_HEIGHT","CHIP_SIZE_BY_COMBOBOX","CLEAR_ICON_SIZE","defaultSelectionsLabel","label","defaultFormatCreateLabel","inputValue","isRowDisabled","row","defaultFilter","option","query","toSingleValue","value","toMultiValue","optionLeadingVisual","jsx","UserAvatar","TeamAvatar","Combobox","forwardRef","options","menuItemProps","multiple","valueProp","defaultValue","onChange","inputValueProp","defaultInputValue","onInputChange","placeholder","leadingIcon","size","invalid","disabled","filter","emptyMessage","loading","loadingMessage","selectedOptions","creatable","onCreateOption","formatCreateLabel","clearable","openOnFocus","submitOnEnter","clearLabel","clearButtonProps","selectionsLabel","listboxLabel","className","idProp","ariaLabel","describedBy","required","onFocus","onBlur","onKeyDown","portalContainer","zIndex","rest","ref","generatedId","useId","id","listboxId","rootRef","useRef","anchorRef","inputRef","setInputRef","useCallback","node","isValueControlled","uncontrolledValue","setUncontrolledValue","useState","rawValue","singleValue","multiValue","useMemo","isInputControlled","uncontrolledInput","setUncontrolledInput","isOpen","setIsOpen","isFocused","setIsFocused","activeIndex","setActiveIndex","activatedByPointer","selectAllFrame","hoverRow","index","queryOverride","setQueryOverride","resolveOption","optionValue","o","selectedOption","displayInput","filterQuery","setInputDisplay","next","commitValue","filteredOptions","fn","createInput","showCreateRow","needle","matches","text","rows","rowId","popupMounted","popupVisible","usePopoverTransition","placement","maxHeight","popupStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","open","useOutsideClose","useEffect","prev","selectedIdx","isSelected","selectOption","v","_a","createValue","selectRow","clearValue","removeValue","moveActive","delta","enabled","i","currentPos","nextPos","_b","handleInputChange","cancelSelectAll","handleFocus","handleBlur","related","handleKeyDown","handleInputFocus","handleInputBlur","handleInputKeyDown","handleWrapperMouseDown","handlePopupMouseDown","hasSelection","hasInputText","showClearButton","labelFloated","activeRow","activeDescendant","chipOptions","fromOptions","listed","sizeClass","styles","toKebab","hasChips","rootClass","jsxs","IconSlotContext","ChipGroup","Chip","ev","mergeClassNames","Icon","CloseCircleIcon","ChevronDownIcon","PopoverMenu","PopoverMenuScroll","active","MenuItem","PlusIcon","selected","leading","mergeMenuItemProps","Spinner"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Combobox.js","sources":["../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n FocusEvent,\n FocusEventHandler,\n InputHTMLAttributes,\n KeyboardEvent,\n KeyboardEventHandler,\n MouseEvent,\n ReactNode,\n} from 'react';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport CloseCircleIcon from '@mattermost/compass-icons/components/close-circle';\nimport PlusIcon from '@mattermost/compass-icons/components/plus';\nimport Chip from '@/components/chip/Chip';\nimport ChipGroup from '@/components/chip/ChipGroup';\nimport type { ChipSize } from '@/components/chip/Chip';\nimport Icon from '@/components/icon/Icon';\nimport { IconSlotContext } from '@/components/icon/Icon';\nimport type { IconSize } from '@/components/icon/Icon';\nimport {\n hasFieldMessage,\n isFieldInvalid,\n mergeFieldDescribedBy,\n} from '@/components/field/fieldDescribedBy';\nimport FieldMessage from '@/components/field-message/FieldMessage';\nimport type { FieldMessageTone } from '@/components/field-message/FieldMessage';\nimport MenuItem from '@/components/menu-item/MenuItem';\nimport type {\n MenuItemOwnedProps,\n MenuItemPassthroughProps,\n} from '@/components/menu-item/MenuItem';\nimport PopoverMenu, {\n PopoverMenuScroll,\n} from '@/components/popover-menu/PopoverMenu';\nimport Spinner from '@/components/spinner/Spinner';\nimport TeamAvatar from '@/components/team-avatar/TeamAvatar';\nimport UserAvatar from '@/components/user-avatar/UserAvatar';\nimport { useAnchoredPopupPortal } from '@/hooks/use-anchored-popup-portal';\nimport { useOutsideClose } from '@/hooks/use-outside-close';\nimport { usePopoverTransition } from '@/hooks/use-popover-transition';\nimport { mergeMenuItemProps } from '@/utils/menuItemProps';\nimport type { BuiltInButtonProps, DataAttributes } from '@/utils/props';\nimport { mergeClassNames } from '@/utils/props';\nimport { toKebab } from '@/utils/string';\nimport styles from './Combobox.module.scss';\n\nexport type ComboboxSize = 'small' | 'medium' | 'large';\n\n// Combobox rows use `onClick`, so `onPointerUp` is left for callers.\ntype ComboboxMenuItemProps = MenuItemPassthroughProps<\n Exclude<MenuItemOwnedProps, 'onPointerUp'>\n>;\n\nexport type ComboboxOption = {\n value: string;\n /** Kept as `string`: the default filter, create-row matching, and the single-select input text all read it. */\n label: string;\n disabled?: boolean;\n /** Leading content for the list row (icon or avatar node). */\n leadingVisual?: ReactNode;\n /** Avatar for chips / list when a photo is preferred over `leadingVisual`. */\n leadingAvatar?: { src: string; alt: string };\n /**\n * Team avatar for the list row — a non-interactive `TeamAvatar` (`variant=\"menu\"`, 24px) with an\n * image or an initials fallback. The row's `label` names the team and `MenuItem` hides the\n * leading visual from assistive tech, so `alt` is optional. List rows only; chips don't render\n * it. With neither `src` nor `initials`, the fallback shows the first two letters of `label`.\n * `leadingVisual` and `leadingAvatar` take precedence.\n */\n leadingTeamAvatar?: { src?: string; initials?: string; alt?: string };\n /** Accepts translated nodes. */\n secondaryLabel?: ReactNode;\n /**\n * Extra `MenuItem` props for this row (e.g. `secondaryLabelPosition`, `tag`,\n * `trailingVisual`, `className`). Overrides the `menuItemProps` set on the\n * Combobox; the props Combobox owns (ARIA, selection, handlers) can't be set.\n */\n menuItemProps?: ComboboxMenuItemProps;\n};\n\n/**\n * Native input attributes `Combobox` sets or can't honor, so they're left out\n * of `ComboboxProps`. The ones it renders (`role`, `type`, `autoComplete`,\n * `aria-expanded`, …) also win at runtime over anything spread onto the input.\n */\nexport type ComboboxOwnedInputProps =\n // Value model: Combobox's own `value` / `defaultValue` / `onChange` / `multiple` / `size`.\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'multiple'\n | 'size'\n | 'type'\n | 'children'\n | 'dangerouslySetInnerHTML'\n // Combobox semantics.\n | 'role'\n | 'autoComplete'\n | 'spellCheck'\n | 'list'\n | 'aria-expanded'\n | 'aria-controls'\n | 'aria-activedescendant'\n | 'aria-autocomplete'\n | 'aria-busy'\n | 'aria-haspopup'\n | 'aria-invalid'\n | 'aria-required'\n // First-class props with Combobox meaning (re-declared below).\n | 'required'\n // No form participation or constraint validation yet.\n | 'name'\n | 'form'\n | 'formAction'\n | 'formEncType'\n | 'formMethod'\n | 'formNoValidate'\n | 'formTarget'\n | 'readOnly'\n | 'maxLength'\n | 'minLength'\n | 'pattern'\n | 'min'\n | 'max'\n | 'step'\n // Not meaningful for a text combobox.\n | 'accept'\n | 'alt'\n | 'capture'\n | 'checked'\n | 'defaultChecked'\n | 'height'\n | 'width'\n | 'src';\n\n/**\n * Extra native input attributes (`data-*`, `aria-describedby`,\n * `aria-errormessage`, `aria-labelledby`, `autoFocus`, `tabIndex`, `style`,\n * `onFocus`, …) go on the `<input role=\"combobox\">`, the element the ref\n * targets. `className` goes on the root. Attributes in\n * `ComboboxOwnedInputProps` can't be set.\n */\nexport interface ComboboxProps\n extends\n Omit<InputHTMLAttributes<HTMLInputElement>, ComboboxOwnedInputProps>,\n DataAttributes {\n options: ComboboxOption[];\n /**\n * `MenuItem` props applied to every option row, e.g.\n * `menuItemProps={{ secondaryLabelPosition: 'inline' }}`. A row's own\n * `menuItemProps` wins. Not applied to the create row.\n */\n menuItemProps?: ComboboxMenuItemProps;\n /** When true, selected values render as removable chips. Default: false. */\n multiple?: boolean;\n value?: string | string[] | null;\n defaultValue?: string | string[] | null;\n onChange?: (value: string | string[] | null) => void;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (value: string) => void;\n label?: ReactNode;\n placeholder?: string;\n leadingIcon?: ReactNode;\n size?: ComboboxSize;\n /** When true, shows invalid/error styling. */\n invalid?: boolean;\n /**\n * Field message under the field. Accepts translated nodes (e.g. `<FormattedMessage/>`).\n * Defaults to error tone (invalid chrome) when set without `messageTone`. It is linked to\n * the input with `aria-describedby`.\n */\n message?: ReactNode;\n /** Visual tone for `message`. Default: `error` when `message` is set. */\n messageTone?: FieldMessageTone;\n disabled?: boolean;\n /**\n * Marks the field required for assistive tech (`aria-required=\"true\"`).\n * No native `required`, so the browser doesn't validate; the host does.\n * Safe in `multiple` mode, where the input is empty once chips are picked.\n * Default: false.\n */\n required?: boolean;\n /**\n * Client-side filter. `true` (default) matches labels case-insensitively.\n * `false` shows all options (caller filters via `inputValue` / `onInputChange`).\n */\n filter?: boolean | ((option: ComboboxOption, query: string) => boolean);\n /** Shown when there are no rows to pick from. Default: \"No results\". */\n emptyMessage?: ReactNode;\n /**\n * When true, the menu shows a loading row (with Spinner) in place of the\n * empty message. Set while async results are in flight.\n */\n loading?: boolean;\n /** Loading row text. Default: \"Loading…\". */\n loadingMessage?: ReactNode;\n /**\n * Option objects for the current value(s), used for chips and the\n * single-select label when a value is missing from `options` (e.g. an async\n * search that no longer returns it, or values preselected on load). Values\n * found in `options` resolve from there first.\n */\n selectedOptions?: ComboboxOption[];\n /**\n * When true, typed text that matches no option offers a create row. Created\n * values not found in `options` or `selectedOptions` display their raw value\n * as the label.\n */\n creatable?: boolean;\n /**\n * Called with the trimmed input when the create row is chosen. When set, the\n * host owns adding the value (`onChange` is not called). When omitted, the\n * input is committed as the value through `onChange`.\n */\n onCreateOption?: (inputValue: string) => void;\n /** Create row label. Default: `Create \"{inputValue}\"`. */\n formatCreateLabel?: (inputValue: string) => ReactNode;\n /**\n * Single mode: when a value is set, shows a clear button inside the control\n * that calls `onChange(null)`. Ignored with `multiple` (chips have their own\n * remove control). Default: false.\n */\n clearable?: boolean;\n /**\n * Opens the menu when the input receives focus, including keyboard Tab focus,\n * `autoFocus` and focus handed back by the clear button. Off by default:\n * focus alone doesn't open the menu, which then opens on pointer press,\n * typing, or ↓ / ↑. Turn it on only for hosts that need the old\n * focus-to-open behavior.\n */\n openOnFocus?: boolean;\n /**\n * When false, Enter on the input with the menu closed is prevented and stops\n * propagating, so it can't submit a surrounding form or reach host key\n * listeners. Default: true (Enter with the menu closed behaves like Enter in a\n * text input). Enter with the menu open is always handled by Combobox.\n */\n submitOnEnter?: boolean;\n /** Accessible name for the clear button. Default: \"Clear\". */\n clearLabel?: string;\n /** Extra attributes for the clear button (e.g. `data-testid`). */\n clearButtonProps?: BuiltInButtonProps;\n /**\n * Accessible name for the chip group in `multiple` mode. Default:\n * `{label} selections` when `label` is a string, otherwise \"Selected\".\n */\n selectionsLabel?: string;\n /**\n * Accessible name for the options list when `label` isn't a string and no\n * `aria-label` is set. Default: \"Options\".\n */\n listboxLabel?: string;\n className?: string;\n id?: string;\n 'aria-label'?: string;\n /**\n * Runs after Combobox's own focus handling. Focus alone doesn't open the\n * menu. Also runs when the clear button hands focus back to the input.\n */\n onFocus?: FocusEventHandler<HTMLInputElement>;\n /**\n * Runs after Combobox's own blur handling, on every input blur — including\n * when focus moves to the clear button or a chip's remove button. Not called\n * when those buttons blur.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Runs after Combobox's own key handling. `event.defaultPrevented` is true\n * when Combobox handled the key (arrows, Home / End while open, Enter while\n * the menu is open (picking the highlighted row, if any), Enter with the menu\n * closed when `submitOnEnter` is false, Escape while open, Backspace removing\n * a chip); those Enter and Escape presses also stop propagating. Calling\n * `preventDefault()` here doesn't stop Combobox's handling. Any `onChange`\n * the key caused has already been called, but host state read here is\n * still from before that change.\n */\n onKeyDown?: KeyboardEventHandler<HTMLInputElement>;\n /** Portal mount node for the menu; defaults to `document.body`. */\n portalContainer?: HTMLElement | null;\n /** Stacking order for the portaled menu. */\n zIndex?: number;\n}\n\nconst POPUP_MAX_HEIGHT = 280;\n\nconst CHIP_SIZE_BY_COMBOBOX: Record<ComboboxSize, ChipSize> = {\n small: 'small',\n medium: 'medium',\n large: 'large',\n};\n\nconst CLEAR_ICON_SIZE: Record<ComboboxSize, IconSize> = {\n small: '12',\n medium: '16',\n large: '16',\n};\n\nfunction defaultSelectionsLabel(label: ReactNode): string {\n return typeof label === 'string' ? `${label} selections` : 'Selected';\n}\n\ntype ComboboxRow =\n | { kind: 'option'; option: ComboboxOption }\n | { kind: 'create'; inputValue: string };\n\nfunction defaultFormatCreateLabel(inputValue: string): ReactNode {\n return `Create \"${inputValue}\"`;\n}\n\nfunction isRowDisabled(row: ComboboxRow): boolean {\n return row.kind === 'option' && row.option.disabled === true;\n}\n\nfunction defaultFilter(option: ComboboxOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction toSingleValue(\n value: string | string[] | null | undefined,\n): string | null {\n if (value == null) return null;\n if (Array.isArray(value)) return value[0] ?? null;\n return value === '' ? null : value;\n}\n\nfunction toMultiValue(value: string | string[] | null | undefined): string[] {\n if (value == null) return [];\n if (Array.isArray(value)) return value;\n return value === '' ? [] : [value];\n}\n\nfunction optionLeadingVisual(option: ComboboxOption): ReactNode | undefined {\n if (option.leadingVisual != null) return option.leadingVisual;\n if (option.leadingAvatar != null) {\n return (\n <UserAvatar\n src={option.leadingAvatar.src}\n alt={option.leadingAvatar.alt}\n size=\"24\"\n />\n );\n }\n if (option.leadingTeamAvatar != null) {\n return (\n <TeamAvatar\n src={option.leadingTeamAvatar.src}\n initials={\n option.leadingTeamAvatar.initials ??\n (option.leadingTeamAvatar.src\n ? undefined\n : Array.from(option.label).slice(0, 2).join(''))\n }\n alt={option.leadingTeamAvatar.alt}\n size=\"24\"\n variant=\"menu\"\n />\n );\n }\n return undefined;\n}\n\n/**\n * { value: 'town-square', label: 'Town Square' }, { value: 'off-topic', label: 'Off-Topic'\n * }, { value: 'design', label: 'Design' }, { value: 'engineering', label: 'Engineering' }, {\n * value: 'releases', label: 'Releases' }, ];\n */\nconst Combobox = forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(\n {\n options,\n menuItemProps,\n multiple = false,\n value: valueProp,\n defaultValue,\n onChange,\n inputValue: inputValueProp,\n defaultInputValue = '',\n onInputChange,\n label,\n placeholder,\n leadingIcon,\n size = 'medium',\n invalid = false,\n message,\n messageTone,\n disabled = false,\n filter = true,\n emptyMessage = 'No results',\n loading = false,\n loadingMessage = 'Loading…',\n selectedOptions,\n creatable = false,\n onCreateOption,\n formatCreateLabel = defaultFormatCreateLabel,\n clearable = false,\n openOnFocus = false,\n submitOnEnter = true,\n clearLabel = 'Clear',\n clearButtonProps,\n selectionsLabel,\n listboxLabel = 'Options',\n className = '',\n id: idProp,\n 'aria-label': ariaLabel,\n 'aria-describedby': describedBy,\n required = false,\n onFocus,\n onBlur,\n onKeyDown,\n portalContainer = null,\n zIndex,\n ...rest\n },\n ref,\n) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const listboxId = `${id}-listbox`;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isValueControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState<\n string | string[] | null\n >(() => {\n if (defaultValue !== undefined) return defaultValue;\n return multiple ? [] : null;\n });\n\n const rawValue = isValueControlled ? valueProp! : uncontrolledValue;\n const singleValue = multiple ? null : toSingleValue(rawValue);\n const multiValue = useMemo(\n () => (multiple ? toMultiValue(rawValue) : []),\n [multiple, rawValue],\n );\n\n const isInputControlled = inputValueProp !== undefined;\n const [uncontrolledInput, setUncontrolledInput] = useState(defaultInputValue);\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n // Hover moves the highlight without scrolling; only keyboard changes scroll the row into view.\n const activatedByPointer = useRef(false);\n const selectAllFrame = useRef<number | null>(null);\n const hoverRow = useCallback(\n (index: number) => {\n if (index === activeIndex) return;\n activatedByPointer.current = true;\n setActiveIndex(index);\n },\n [activeIndex],\n );\n const [queryOverride, setQueryOverride] = useState<string | null>(null);\n\n const resolveOption = useCallback(\n (optionValue: string): ComboboxOption | undefined =>\n options.find((o) => o.value === optionValue) ??\n selectedOptions?.find((o) => o.value === optionValue) ??\n (creatable ? { value: optionValue, label: optionValue } : undefined),\n [options, selectedOptions, creatable],\n );\n\n const selectedOption = useMemo(\n () => (singleValue == null ? undefined : resolveOption(singleValue)),\n [resolveOption, singleValue],\n );\n\n // Single-select: show the selected label until the user starts typing a filter.\n // `queryOverride !== null` means the field is in filter-edit mode.\n const displayInput = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return selectedOption?.label ?? uncontrolledInput;\n })();\n\n const filterQuery = (() => {\n if (isInputControlled) return inputValueProp!;\n if (multiple) return uncontrolledInput;\n if (queryOverride !== null) return queryOverride;\n return '';\n })();\n\n const setInputDisplay = useCallback(\n (next: string) => {\n if (!isInputControlled) {\n setUncontrolledInput(next);\n if (!multiple) setQueryOverride(next);\n }\n onInputChange?.(next);\n },\n [isInputControlled, multiple, onInputChange],\n );\n\n const commitValue = useCallback(\n (next: string | string[] | null) => {\n if (!isValueControlled) setUncontrolledValue(next);\n onChange?.(next);\n },\n [isValueControlled, onChange],\n );\n\n const filteredOptions = useMemo(() => {\n if (filter === false) return options;\n const fn = typeof filter === 'function' ? filter : defaultFilter;\n return options.filter((o) => fn(o, filterQuery));\n }, [options, filter, filterQuery]);\n\n const createInput = creatable ? filterQuery.trim() : '';\n const showCreateRow = useMemo(() => {\n if (createInput === '') return false;\n const needle = createInput.toLowerCase();\n const matches = (text: string) => text.toLowerCase() === needle;\n const knownOptions = [...options, ...(selectedOptions ?? [])];\n if (knownOptions.some((o) => matches(o.label) || matches(o.value))) {\n return false;\n }\n const current = multiple\n ? multiValue\n : singleValue != null\n ? [singleValue]\n : [];\n return !current.some(matches);\n }, [\n createInput,\n options,\n selectedOptions,\n multiple,\n multiValue,\n singleValue,\n ]);\n\n const rows = useMemo<ComboboxRow[]>(\n () => [\n ...filteredOptions.map((option) => ({ kind: 'option' as const, option })),\n ...(showCreateRow\n ? [{ kind: 'create' as const, inputValue: createInput }]\n : []),\n ],\n [filteredOptions, showCreateRow, createInput],\n );\n\n const rowId = useCallback(\n (row: ComboboxRow) =>\n row.kind === 'option'\n ? `${listboxId}-option-${row.option.value}`\n : `${listboxId}-create`,\n [listboxId],\n );\n\n const { mounted: popupMounted, visible: popupVisible } =\n usePopoverTransition(isOpen);\n\n const {\n placement,\n maxHeight,\n style: popupStyle,\n portalRef,\n renderPortal,\n } = useAnchoredPopupPortal(anchorRef, popupMounted, {\n preferredHeight: POPUP_MAX_HEIGHT,\n maxHeightCap: POPUP_MAX_HEIGHT,\n portalContainer,\n zIndex,\n });\n\n const close = useCallback(() => {\n setIsOpen(false);\n setActiveIndex(-1);\n if (!multiple && !isInputControlled) {\n setQueryOverride(null);\n setUncontrolledInput('');\n }\n }, [multiple, isInputControlled]);\n\n const open = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled]);\n\n useOutsideClose(rootRef, isOpen, close, portalRef);\n\n useEffect(() => {\n if (!isOpen) return;\n setActiveIndex((prev) => {\n if (rows.length === 0) return -1;\n if (prev >= 0 && prev < rows.length) return prev;\n const selectedIdx = rows.findIndex(\n (row) =>\n row.kind === 'option' &&\n (multiple\n ? multiValue.includes(row.option.value)\n : row.option.value === singleValue),\n );\n return selectedIdx >= 0 ? selectedIdx : 0;\n });\n }, [isOpen, rows, multiple, multiValue, singleValue]);\n\n const isSelected = useCallback(\n (optionValue: string) =>\n multiple ? multiValue.includes(optionValue) : singleValue === optionValue,\n [multiple, multiValue, singleValue],\n );\n\n const selectOption = useCallback(\n (option: ComboboxOption) => {\n if (option.disabled) return;\n\n if (multiple) {\n const next = multiValue.includes(option.value)\n ? multiValue.filter((v) => v !== option.value)\n : [...multiValue, option.value];\n commitValue(next);\n setInputDisplay('');\n close();\n inputRef.current?.focus();\n return;\n }\n\n commitValue(option.value);\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.(option.label);\n }\n close();\n },\n [\n multiple,\n multiValue,\n commitValue,\n setInputDisplay,\n isInputControlled,\n onInputChange,\n close,\n ],\n );\n\n const createValue = useCallback(\n (inputValue: string) => {\n if (onCreateOption) {\n onCreateOption(inputValue);\n } else if (multiple) {\n commitValue([...multiValue, inputValue]);\n } else {\n commitValue(inputValue);\n }\n\n if (multiple) {\n setInputDisplay('');\n close();\n inputRef.current?.focus();\n return;\n }\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.(inputValue);\n }\n close();\n },\n [\n onCreateOption,\n multiple,\n multiValue,\n commitValue,\n setInputDisplay,\n isInputControlled,\n onInputChange,\n close,\n ],\n );\n\n const selectRow = useCallback(\n (row: ComboboxRow) => {\n if (row.kind === 'create') createValue(row.inputValue);\n else selectOption(row.option);\n },\n [createValue, selectOption],\n );\n\n const clearValue = useCallback(() => {\n commitValue(null);\n if (!isInputControlled) {\n setUncontrolledInput('');\n setQueryOverride(null);\n } else {\n onInputChange?.('');\n }\n inputRef.current?.focus();\n }, [commitValue, isInputControlled, onInputChange]);\n\n const removeValue = useCallback(\n (optionValue: string) => {\n if (!multiple) return;\n commitValue(multiValue.filter((v) => v !== optionValue));\n },\n [multiple, multiValue, commitValue],\n );\n\n const moveActive = useCallback(\n (delta: number) => {\n activatedByPointer.current = false;\n const enabled = rows\n .map((row, i) => ({ row, i }))\n .filter(({ row }) => !isRowDisabled(row));\n if (enabled.length === 0) {\n setActiveIndex(-1);\n return;\n }\n setActiveIndex((prev) => {\n const currentPos = enabled.findIndex(({ i }) => i === prev);\n const nextPos =\n currentPos < 0\n ? delta > 0\n ? 0\n : enabled.length - 1\n : (currentPos + delta + enabled.length) % enabled.length;\n return enabled[nextPos].i;\n });\n },\n [rows],\n );\n\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return;\n if (activatedByPointer.current) {\n activatedByPointer.current = false;\n return;\n }\n const row = rows[activeIndex];\n if (!row) return;\n document.getElementById(rowId(row))?.scrollIntoView?.({ block: 'nearest' });\n }, [isOpen, activeIndex, rows, rowId]);\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n cancelSelectAll();\n const next = e.target.value;\n setInputDisplay(next);\n if (!isOpen) open();\n setActiveIndex(0);\n };\n\n const cancelSelectAll = () => {\n if (selectAllFrame.current === null) return;\n cancelAnimationFrame(selectAllFrame.current);\n selectAllFrame.current = null;\n };\n\n useEffect(() => cancelSelectAll, []);\n\n const handleFocus = () => {\n setIsFocused(true);\n if (openOnFocus) open();\n // Select-all so the next keystroke replaces the selected label (filter mode).\n // Cancelled if the user types, navigates or leaves before the frame runs.\n if (!multiple && !isInputControlled && selectedOption) {\n cancelSelectAll();\n selectAllFrame.current = requestAnimationFrame(() => {\n selectAllFrame.current = null;\n inputRef.current?.select();\n });\n }\n };\n\n const handleBlur = (e: FocusEvent<HTMLElement>) => {\n // Delay so option mousedown can run first\n const related = e.relatedTarget as Node | null;\n if (related && rootRef.current?.contains(related)) return;\n cancelSelectAll();\n setIsFocused(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n cancelSelectAll();\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) open();\n else moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n // APG: opening with ArrowUp puts the highlight on the last option.\n for (let i = rows.length - 1; i >= 0; i--) {\n if (!isRowDisabled(rows[i])) {\n setActiveIndex(i);\n break;\n }\n }\n open();\n } else moveActive(-1);\n break;\n case 'Home':\n if (isOpen && rows.length > 0) {\n e.preventDefault();\n setActiveIndex(\n Math.max(\n 0,\n rows.findIndex((row) => !isRowDisabled(row)),\n ),\n );\n }\n break;\n case 'End':\n if (isOpen && rows.length > 0) {\n e.preventDefault();\n for (let i = rows.length - 1; i >= 0; i--) {\n if (!isRowDisabled(rows[i])) {\n setActiveIndex(i);\n break;\n }\n }\n }\n break;\n case 'Enter':\n // keyCode 229 covers older Safari, which doesn't set isComposing\n if (e.nativeEvent.isComposing || e.keyCode === 229) break;\n if (isOpen || !submitOnEnter) {\n e.preventDefault();\n e.stopPropagation();\n }\n if (isOpen && activeIndex >= 0 && rows[activeIndex]) {\n selectRow(rows[activeIndex]);\n }\n break;\n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n e.stopPropagation();\n close();\n }\n break;\n case 'Backspace':\n if (multiple && displayInput === '' && multiValue.length > 0) {\n e.preventDefault();\n removeValue(multiValue[multiValue.length - 1]);\n }\n break;\n case 'Tab':\n close();\n break;\n default:\n break;\n }\n };\n\n const handleInputFocus = (e: FocusEvent<HTMLInputElement>) => {\n handleFocus();\n onFocus?.(e);\n };\n\n const handleInputBlur = (e: FocusEvent<HTMLInputElement>) => {\n handleBlur(e);\n onBlur?.(e);\n };\n\n const handleInputKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n handleKeyDown(e);\n onKeyDown?.(e);\n };\n\n const handleWrapperMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n // Don't steal focus from chips, their remove buttons, or the clear button\n if ((e.target as HTMLElement).closest('[data-chip], [data-combobox-clear]'))\n return;\n if (e.target !== inputRef.current) {\n e.preventDefault();\n inputRef.current?.focus();\n }\n if (!isOpen) open();\n };\n\n const handlePopupMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n // Text fields in a custom empty or loading message still need to take focus\n if (\n (e.target as HTMLElement).closest(\n 'input, textarea, select, [contenteditable=\"true\"]',\n )\n )\n return;\n e.preventDefault();\n };\n\n const hasSelection = multiple\n ? multiValue.length > 0\n : singleValue != null && singleValue !== '';\n const hasInputText = displayInput.length > 0;\n const showClearButton = clearable && !multiple && hasSelection && !disabled;\n const labelFloated = isFocused || isOpen || hasSelection || hasInputText;\n\n const activeRow = activeIndex >= 0 ? rows[activeIndex] : undefined;\n const activeDescendant = activeRow != null ? rowId(activeRow) : undefined;\n\n // Without `selectedOptions`, values in `options` keep their list order (the\n // original behavior); with it, chips follow value order so they don't jump\n // around as async results change.\n const chipOptions = useMemo<ComboboxOption[]>(() => {\n if (!multiple) return [];\n if (selectedOptions == null) {\n const fromOptions = options.filter((o) => multiValue.includes(o.value));\n if (!creatable) return fromOptions;\n const listed = new Set(fromOptions.map((o) => o.value));\n return [\n ...fromOptions,\n ...multiValue\n .filter((v) => !listed.has(v))\n .map((v) => ({ value: v, label: v })),\n ];\n }\n return multiValue\n .map(resolveOption)\n .filter((o): o is ComboboxOption => o != null);\n }, [\n multiple,\n selectedOptions,\n options,\n multiValue,\n creatable,\n resolveOption,\n ]);\n\n const sizeClass = styles[`combobox--size-${toKebab(size)}`];\n const hasChips = multiple && chipOptions.length > 0;\n const showInvalid = isFieldInvalid(invalid, message, messageTone);\n const showMessage = hasFieldMessage(message);\n const messageId = showMessage ? `${id}-message` : undefined;\n const rootClass = [\n styles.combobox,\n sizeClass,\n showInvalid ? styles['combobox--invalid'] : '',\n label != null && labelFloated ? styles['combobox--label-floated'] : '',\n leadingIcon != null ? styles['combobox--has-leading-icon'] : '',\n hasChips ? styles['combobox--has-chips'] : '',\n isOpen ? styles['combobox--open'] : '',\n disabled ? styles['combobox--disabled'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass} ref={rootRef}>\n <div className={styles.combobox__wrapper} ref={anchorRef}>\n {label != null && (\n <label className={styles.combobox__label} htmlFor={id}>\n {label}\n </label>\n )}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions -- pointer convenience; the input owns keyboard interaction */}\n <div\n className={styles.combobox__inner}\n onMouseDown={handleWrapperMouseDown}\n >\n {leadingIcon != null && (\n <span className={styles['combobox__leading-icon']} aria-hidden>\n <IconSlotContext.Provider value={{ size: '16' }}>\n {leadingIcon}\n </IconSlotContext.Provider>\n </span>\n )}\n <div className={styles.combobox__value}>\n {multiple && chipOptions.length > 0 && (\n <ChipGroup\n aria-label={selectionsLabel ?? defaultSelectionsLabel(label)}\n disabled={disabled}\n >\n {chipOptions.map((option) => (\n <Chip\n key={option.value}\n size={CHIP_SIZE_BY_COMBOBOX[size]}\n leadingAvatar={option.leadingAvatar}\n leadingIcon={\n option.leadingAvatar == null\n ? option.leadingVisual\n : undefined\n }\n onRemove={\n disabled\n ? undefined\n : (ev) => {\n ev.stopPropagation();\n removeValue(option.value);\n }\n }\n >\n {option.label}\n </Chip>\n ))}\n </ChipGroup>\n )}\n <input\n {...rest}\n ref={setInputRef}\n id={id}\n className={styles.combobox__control}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={disabled}\n placeholder={\n multiple && chipOptions.length > 0 ? undefined : placeholder\n }\n value={displayInput}\n aria-label={ariaLabel}\n aria-describedby={mergeFieldDescribedBy(\n describedBy,\n messageId,\n undefined,\n )}\n aria-required={required ? true : undefined}\n aria-invalid={showInvalid ? true : undefined}\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeDescendant}\n aria-busy={loading || undefined}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n />\n </div>\n {showClearButton && (\n <button\n {...clearButtonProps}\n type=\"button\"\n className={mergeClassNames(\n styles.combobox__clear,\n clearButtonProps?.className,\n )}\n aria-label={clearLabel}\n data-combobox-clear=\"\"\n onClick={clearValue}\n onKeyDown={(e) => {\n // preventDefault() cancels the native click, so clear here.\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n clearValue();\n }\n clearButtonProps?.onKeyDown?.(e);\n }}\n onBlur={(e) => {\n clearButtonProps?.onBlur?.(e);\n handleBlur(e);\n }}\n >\n <Icon size={CLEAR_ICON_SIZE[size]} glyph={<CloseCircleIcon />} />\n </button>\n )}\n <span className={styles['combobox__trailing-icon']} aria-hidden>\n <Icon size=\"12\" glyph={<ChevronDownIcon />} />\n </span>\n </div>\n </div>\n\n {showMessage && (\n <FieldMessage\n id={messageId}\n className={styles['combobox__message']}\n message={message}\n tone={messageTone ?? 'error'}\n />\n )}\n\n {popupMounted &&\n renderPortal(\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions -- keeps focus on the input for presses anywhere in the menu\n <div\n ref={portalRef}\n className={[\n styles.combobox__popup,\n placement === 'above' ? styles['combobox__popup--above'] : '',\n popupVisible ? styles['combobox__popup--visible'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={popupStyle}\n onMouseDown={handlePopupMouseDown}\n >\n <PopoverMenu className={styles.combobox__menu}>\n <PopoverMenuScroll maxHeight={maxHeight}>\n {rows.length > 0 && (\n <ul\n id={listboxId}\n className={styles.combobox__list}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-label={\n typeof label === 'string'\n ? label\n : (ariaLabel ?? listboxLabel)\n }\n >\n {rows.map((row, index) => {\n const active = index === activeIndex;\n if (row.kind === 'create') {\n return (\n <li\n key={rowId(row)}\n className={styles.combobox__option}\n role=\"presentation\"\n >\n <MenuItem\n id={rowId(row)}\n role=\"option\"\n label={formatCreateLabel(row.inputValue)}\n leadingVisual={<Icon glyph={<PlusIcon />} />}\n active={active}\n aria-selected={false}\n onMouseEnter={() => hoverRow(index)}\n onClick={() => createValue(row.inputValue)}\n />\n </li>\n );\n }\n const { option } = row;\n const selected = isSelected(option.value);\n const leading = optionLeadingVisual(option);\n return (\n <li\n key={option.value}\n className={styles.combobox__option}\n role=\"presentation\"\n >\n <MenuItem\n {...mergeMenuItemProps(\n menuItemProps,\n option.menuItemProps,\n )}\n id={rowId(row)}\n role=\"option\"\n label={option.label}\n secondaryLabel={option.secondaryLabel}\n leadingElement={leading != null}\n leadingVisual={leading}\n trailingElement={selected}\n active={active}\n disabled={option.disabled}\n aria-selected={selected}\n onMouseEnter={() => hoverRow(index)}\n onClick={() => selectOption(option)}\n />\n </li>\n );\n })}\n </ul>\n )}\n {loading ? (\n <div className={styles.combobox__loading} role=\"status\">\n <Spinner size=\"16\" aria-hidden />\n <span>{loadingMessage}</span>\n </div>\n ) : (\n rows.length === 0 && (\n <p className={styles.combobox__empty}>{emptyMessage}</p>\n )\n )}\n </PopoverMenuScroll>\n </PopoverMenu>\n </div>,\n )}\n </div>\n );\n});\n\nexport default Combobox;\n"],"names":["POPUP_MAX_HEIGHT","CHIP_SIZE_BY_COMBOBOX","CLEAR_ICON_SIZE","defaultSelectionsLabel","label","defaultFormatCreateLabel","inputValue","isRowDisabled","row","defaultFilter","option","query","toSingleValue","value","toMultiValue","optionLeadingVisual","jsx","UserAvatar","TeamAvatar","Combobox","forwardRef","options","menuItemProps","multiple","valueProp","defaultValue","onChange","inputValueProp","defaultInputValue","onInputChange","placeholder","leadingIcon","size","invalid","message","messageTone","disabled","filter","emptyMessage","loading","loadingMessage","selectedOptions","creatable","onCreateOption","formatCreateLabel","clearable","openOnFocus","submitOnEnter","clearLabel","clearButtonProps","selectionsLabel","listboxLabel","className","idProp","ariaLabel","describedBy","required","onFocus","onBlur","onKeyDown","portalContainer","zIndex","rest","ref","generatedId","useId","id","listboxId","rootRef","useRef","anchorRef","inputRef","setInputRef","useCallback","node","isValueControlled","uncontrolledValue","setUncontrolledValue","useState","rawValue","singleValue","multiValue","useMemo","isInputControlled","uncontrolledInput","setUncontrolledInput","isOpen","setIsOpen","isFocused","setIsFocused","activeIndex","setActiveIndex","activatedByPointer","selectAllFrame","hoverRow","index","queryOverride","setQueryOverride","resolveOption","optionValue","o","selectedOption","displayInput","filterQuery","setInputDisplay","next","commitValue","filteredOptions","fn","createInput","showCreateRow","needle","matches","text","rows","rowId","popupMounted","popupVisible","usePopoverTransition","placement","maxHeight","popupStyle","portalRef","renderPortal","useAnchoredPopupPortal","close","open","useOutsideClose","useEffect","prev","selectedIdx","isSelected","selectOption","v","_a","createValue","selectRow","clearValue","removeValue","moveActive","delta","enabled","i","currentPos","nextPos","_b","handleInputChange","cancelSelectAll","handleFocus","handleBlur","related","handleKeyDown","handleInputFocus","handleInputBlur","handleInputKeyDown","handleWrapperMouseDown","handlePopupMouseDown","hasSelection","hasInputText","showClearButton","labelFloated","activeRow","activeDescendant","chipOptions","fromOptions","listed","sizeClass","styles","toKebab","hasChips","showInvalid","isFieldInvalid","showMessage","hasFieldMessage","messageId","rootClass","jsxs","IconSlotContext","ChipGroup","Chip","ev","mergeFieldDescribedBy","mergeClassNames","Icon","CloseCircleIcon","ChevronDownIcon","FieldMessage","PopoverMenu","PopoverMenuScroll","active","MenuItem","PlusIcon","selected","leading","mergeMenuItemProps","Spinner"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./Combobox.css');const o="
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./Combobox.css');const o="_combobox_kv957_13",_="_combobox__wrapper_kv957_19",b="_combobox__label_kv957_37",c="_combobox__message_kv957_67",m="_combobox__inner_kv957_70",x="_combobox__value_kv957_86",e="_combobox__control_kv957_96",n="_combobox__clear_kv957_134",l="_combobox__popup_kv957_168",i="_combobox__menu_kv957_184",s="_combobox__empty_kv957_189",a="_combobox__loading_kv957_197",p="_combobox__list_kv957_207",t="_combobox__option_kv957_212",v={combobox:o,combobox__wrapper:_,"combobox--disabled":"_combobox--disabled_kv957_27",combobox__label:b,"combobox--label-floated":"_combobox--label-floated_kv957_58",combobox__message:c,combobox__inner:m,"combobox__leading-icon":"_combobox__leading-icon_kv957_78",combobox__value:x,combobox__control:e,"combobox__trailing-icon":"_combobox__trailing-icon_kv957_121","combobox--open":"_combobox--open_kv957_131",combobox__clear:n,"focus-ring-in":"_focus-ring-in_kv957_1",combobox__popup:l,"combobox__popup--above":"_combobox__popup--above_kv957_175","combobox__popup--visible":"_combobox__popup--visible_kv957_178",combobox__menu:i,combobox__empty:s,combobox__loading:a,combobox__list:p,combobox__option:t,"combobox--size-small":"_combobox--size-small_kv957_216","combobox--has-chips":"_combobox--has-chips_kv957_224","combobox--has-leading-icon":"_combobox--has-leading-icon_kv957_227","combobox--size-medium":"_combobox--size-medium_kv957_244","combobox--size-large":"_combobox--size-large_kv957_277","combobox--invalid":"_combobox--invalid_kv957_310"};exports.combobox=o;exports.combobox__clear=n;exports.combobox__control=e;exports.combobox__empty=s;exports.combobox__inner=m;exports.combobox__label=b;exports.combobox__list=p;exports.combobox__loading=a;exports.combobox__menu=i;exports.combobox__message=c;exports.combobox__option=t;exports.combobox__popup=l;exports.combobox__value=x;exports.combobox__wrapper=_;exports.default=v;
|
|
2
2
|
//# sourceMappingURL=Combobox.module.scss.cjs.map
|
|
@@ -1,45 +1,48 @@
|
|
|
1
|
-
import './Combobox.css';const o = "
|
|
1
|
+
import './Combobox.css';const o = "_combobox_kv957_13", _ = "_combobox__wrapper_kv957_19", b = "_combobox__label_kv957_37", c = "_combobox__message_kv957_67", m = "_combobox__inner_kv957_70", x = "_combobox__value_kv957_86", e = "_combobox__control_kv957_96", n = "_combobox__clear_kv957_134", i = "_combobox__popup_kv957_168", l = "_combobox__menu_kv957_184", s = "_combobox__empty_kv957_189", a = "_combobox__loading_kv957_197", p = "_combobox__list_kv957_207", v = "_combobox__option_kv957_212", t = {
|
|
2
2
|
combobox: o,
|
|
3
3
|
combobox__wrapper: _,
|
|
4
|
-
"combobox--disabled": "_combobox--
|
|
4
|
+
"combobox--disabled": "_combobox--disabled_kv957_27",
|
|
5
5
|
combobox__label: b,
|
|
6
|
-
"combobox--label-floated": "_combobox--label-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
"combobox--label-floated": "_combobox--label-floated_kv957_58",
|
|
7
|
+
combobox__message: c,
|
|
8
|
+
combobox__inner: m,
|
|
9
|
+
"combobox__leading-icon": "_combobox__leading-icon_kv957_78",
|
|
10
|
+
combobox__value: x,
|
|
11
|
+
combobox__control: e,
|
|
12
|
+
"combobox__trailing-icon": "_combobox__trailing-icon_kv957_121",
|
|
13
|
+
"combobox--open": "_combobox--open_kv957_131",
|
|
14
|
+
combobox__clear: n,
|
|
15
|
+
"focus-ring-in": "_focus-ring-in_kv957_1",
|
|
16
|
+
combobox__popup: i,
|
|
17
|
+
"combobox__popup--above": "_combobox__popup--above_kv957_175",
|
|
18
|
+
"combobox__popup--visible": "_combobox__popup--visible_kv957_178",
|
|
19
|
+
combobox__menu: l,
|
|
20
|
+
combobox__empty: s,
|
|
19
21
|
combobox__loading: a,
|
|
20
22
|
combobox__list: p,
|
|
21
|
-
combobox__option:
|
|
22
|
-
"combobox--size-small": "_combobox--size-
|
|
23
|
-
"combobox--has-chips": "_combobox--has-
|
|
24
|
-
"combobox--has-leading-icon": "_combobox--has-leading-
|
|
25
|
-
"combobox--size-medium": "_combobox--size-
|
|
26
|
-
"combobox--size-large": "_combobox--size-
|
|
27
|
-
"combobox--invalid": "_combobox--
|
|
23
|
+
combobox__option: v,
|
|
24
|
+
"combobox--size-small": "_combobox--size-small_kv957_216",
|
|
25
|
+
"combobox--has-chips": "_combobox--has-chips_kv957_224",
|
|
26
|
+
"combobox--has-leading-icon": "_combobox--has-leading-icon_kv957_227",
|
|
27
|
+
"combobox--size-medium": "_combobox--size-medium_kv957_244",
|
|
28
|
+
"combobox--size-large": "_combobox--size-large_kv957_277",
|
|
29
|
+
"combobox--invalid": "_combobox--invalid_kv957_310"
|
|
28
30
|
};
|
|
29
31
|
export {
|
|
30
32
|
o as combobox,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
n as combobox__clear,
|
|
34
|
+
e as combobox__control,
|
|
35
|
+
s as combobox__empty,
|
|
36
|
+
m as combobox__inner,
|
|
35
37
|
b as combobox__label,
|
|
36
38
|
p as combobox__list,
|
|
37
39
|
a as combobox__loading,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
l as combobox__menu,
|
|
41
|
+
c as combobox__message,
|
|
42
|
+
v as combobox__option,
|
|
43
|
+
i as combobox__popup,
|
|
44
|
+
x as combobox__value,
|
|
42
45
|
_ as combobox__wrapper,
|
|
43
|
-
|
|
46
|
+
t as default
|
|
44
47
|
};
|
|
45
48
|
//# sourceMappingURL=Combobox.module.scss.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Combobox.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Combobox.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),s=require("react"),Xe=require("../button/Button.cjs"),$=require("../icon-button/IconButton.cjs"),N=require("../icon/Icon.cjs"),__De=require("@mattermost/compass-icons/components/calendar-outline.js"),De=__De?.default??__De,__ea=require("@mattermost/compass-icons/components/chevron-down.js"),ea=__ea?.default??__ea,__aa=require("@mattermost/compass-icons/components/chevron-left.js"),aa=__aa?.default??__aa,__ta=require("@mattermost/compass-icons/components/chevron-right.js"),ta=__ta?.default??__ta,na=require("../../hooks/use-anchored-popup-portal.cjs"),ra=require("../../hooks/use-outside-close.cjs"),sa=require("../../hooks/use-popover-transition.cjs"),n=require("./DateRangePicker.module.scss.cjs"),la=360,oa=["Su","Mo","Tu","We","Th","Fr","Sa"],ne=["January","February","March","April","May","June","July","August","September","October","November","December"];function ca(i){if(!i)return"";const[r,p,m]=i.split("-");return`${p}/${m}/${r}`}function re(i,r,p){return`${i}-${String(r+1).padStart(2,"0")}-${String(p).padStart(2,"0")}`}function se(i,r){return new Date(i,r+1,0).getDate()}function ia(i,r){return new Date(i,r,1).getDay()}function le(i,r){return i===r}function ua(i,r,p){if(!r||!p)return!1;const[m,j]=r<p?[r,p]:[p,r];return i>m&&i<j}function F(i,r,p){if(!i)return null;const[m,j,S]=i.split("-").map(Number);return m===r&&j===p+1?S:null}function da({className:i="",mode:r="date",value:p,startDate:m,endDate:j,onChange:S,onRangeChange:O,disabled:_,required:xe,onFocus:P,onBlur:B,label:E,id:je,"aria-label":oe,"aria-labelledby":ce,"aria-describedby":Se,portalContainer:Ie=null,zIndex:we,placeholder:z="mm/dd/yyyy",formatDate:Y=ca,monthNames:K=ne,shortMonthNames:Ce=K===ne?ne.map(H=>H.slice(0,3)):K,weekdayNames:Ne=oa,dialogLabel:ie="Date picker",todayLabel:Ee="Today",previousMonthLabel:Me="Previous month",nextMonthLabel:qe="Next month"}){const H=s.useId(),M=je??H,ue=`${M}-popover`,de=`${M}-label`,fe=`${M}-value`,I=E!=null&&typeof E!="boolean"&&E!=="",L=s.useRef(null),U=s.useRef(null),V=s.useRef(null),w=new Date,W=re(w.getFullYear(),w.getMonth(),w.getDate()),[c,q]=s.useState(w.getFullYear()),[o,R]=s.useState(w.getMonth()),[u,J]=s.useState(!1),[Re,pe]=s.useState(!1),[Z,b]=s.useState(1),[Ae,Te]=s.useState(""),[$e,ge]=s.useState(""),[Fe,he]=s.useState(""),D=p??Ae,d=m??$e,h=j??Fe,ke=r==="date"?!!D:!!d,{mounted:G,visible:Q}=sa.usePopoverTransition(u),{placement:Oe,style:Pe,portalRef:A,renderPortal:Be}=na.useAnchoredPopupPortal(U,G,{preferredHeight:la,portalContainer:Ie,zIndex:we,matchWidth:!1}),k=s.useCallback((e=!0)=>{var a;J(!1),e&&((a=U.current)==null||a.focus())},[]);ra.useOutsideClose(L,u,()=>k(!0),A),s.useEffect(()=>{if(!u)return;function e(a){a.key==="Escape"&&(a.preventDefault(),k(!0))}return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[u,k]),s.useEffect(()=>{if(!u)return;function e(a){var f,g;const l=a.target;l&&((f=L.current)!=null&&f.contains(l)||(g=A.current)!=null&&g.contains(l)||k(!1))}return document.addEventListener("focusin",e),()=>document.removeEventListener("focusin",e)},[u,k,A]);const v=se(c,o),ze=s.useCallback(()=>{if(r==="date"){const a=F(D,c,o);if(a)return a}else{const a=F(h,c,o);if(a)return a;const l=F(d,c,o);if(l)return l}const e=F(W,c,o);return e||1},[r,D,d,h,c,o,W]);s.useEffect(()=>{if(!u||!Q)return;const e=ze();b(e);const a=requestAnimationFrame(()=>{var l,f;(f=(l=V.current)==null?void 0:l.querySelector(`[data-day="${e}"]`))==null||f.focus()});return()=>cancelAnimationFrame(a)},[u,Q]);const y=s.useCallback(e=>{b(e),requestAnimationFrame(()=>{var a,l;(l=(a=V.current)==null?void 0:a.querySelector(`[data-day="${e}"]`))==null||l.focus()})},[]),X=s.useCallback(()=>{_||J(e=>!e)},[_]),Ye=s.useCallback(()=>{R(e=>e===0?(q(a=>a-1),11):e-1)},[]),Ke=s.useCallback(()=>{R(e=>e===11?(q(a=>a+1),0):e+1)},[]),x=s.useCallback((e,a)=>{const l=e===-1?o===0?11:o-1:o===11?0:o+1,f=e===-1?o===0?c-1:c:o===11?c+1:c,g=se(f,l);q(f),R(l),y(Math.min(a,g))},[o,c,y]),He=s.useCallback(()=>{const e=new Date;q(e.getFullYear()),R(e.getMonth()),y(e.getDate())},[y]),ee=s.useCallback((e,a)=>{if(r==="date")S?S(e):Te(e),k(!0);else if(!d||d&&h)ge(e),he(""),b(a);else{const[l,f]=e>=d?[d,e]:[e,d];O?O(l,f):(ge(l),he(f)),k(!0)}},[r,d,h,S,O,k]),C=s.useCallback(e=>{const a=Z+e;if(a>=1&&a<=v){y(a);return}a<1?x(-1,se(o===0?c-1:c,o===0?11:o-1)+a):x(1,a-v)},[Z,v,o,c,y,x]),Le=s.useCallback((e,a)=>{switch(e.key){case"ArrowLeft":e.preventDefault(),C(-1);break;case"ArrowRight":e.preventDefault(),C(1);break;case"ArrowUp":e.preventDefault(),C(-7);break;case"ArrowDown":e.preventDefault(),C(7);break;case"Home":e.preventDefault(),y(1);break;case"End":e.preventDefault(),y(v);break;case"PageUp":e.preventDefault(),x(-1,a);break;case"PageDown":e.preventDefault(),x(1,a);break;case"Enter":case" ":e.preventDefault(),b(a),ee(re(c,o,a),a);break}},[C,y,v,x,ee,c,o]),Ue=s.useCallback(e=>{if(!_)switch(e.key){case"Enter":case" ":e.preventDefault(),X();break;case"ArrowDown":u||(e.preventDefault(),J(!0));break;case"Escape":u&&(e.preventDefault(),k(!0));break}},[_,X,u,k]);s.useEffect(()=>{u&&b(e=>Math.min(Math.max(1,e),v))},[u,v,o,c]);const Ve=ia(c,o),T=[...Array(Ve).fill(null),...Array.from({length:v},(e,a)=>a+1)];for(;T.length%7!==0;)T.push(null);const ye=[];for(let e=0;e<T.length;e+=7)ye.push(T.slice(e,e+7));const ae=r==="date"?D?Y(D):"":d?`${Y(d)}${h?` – ${Y(h)}`:""}`:"",We=[n.default["date-range-picker"],u?n.default["date-range-picker--open"]:"",_?n.default["date-range-picker--disabled"]:"",I?n.default["date-range-picker--has-label"]:"",I&&(u||Re||ke)?n.default["date-range-picker--label-floated"]:"",i].filter(Boolean).join(" ");return t.jsxs("div",{ref:L,className:We,children:[I&&t.jsx("span",{id:de,className:n.default["date-range-picker__label"],children:E}),t.jsxs("div",{ref:U,className:n.default["date-range-picker__trigger"],role:"combobox","aria-haspopup":"dialog","aria-expanded":u,"aria-controls":G?ue:void 0,"aria-disabled":_||void 0,"aria-required":xe||void 0,"aria-label":oe??(ce==null&&!I&&!ae&&!z?ie:void 0),"aria-labelledby":ce??(oe==null?I?de:ae||z?fe:void 0:void 0),"aria-describedby":Se,tabIndex:_?-1:0,id:M,"data-has-value":ke?"":void 0,onClick:X,onKeyDown:Ue,onFocus:e=>{pe(!0),P==null||P(e)},onBlur:e=>{pe(!1),B==null||B(e)},children:[t.jsx("span",{className:n.default["date-range-picker__calendar-icon"],"aria-hidden":!0,children:t.jsx(N.default,{size:"16",glyph:t.jsx(De,{})})}),t.jsx("span",{id:fe,className:n.default["date-range-picker__value"],children:ae||z}),t.jsx("span",{className:n.default["date-range-picker__chevron"],"aria-hidden":!0,children:t.jsx(N.default,{size:"12",glyph:t.jsx(ea,{})})})]}),G&&Be(t.jsxs("div",{ref:A,id:ue,className:[n.default["date-range-picker__popover"],Oe==="above"?n.default["date-range-picker__popover--above"]:"",Q?n.default["date-range-picker__popover--visible"]:""].filter(Boolean).join(" "),style:Pe,role:"dialog","aria-modal":"false","aria-label":ie,children:[t.jsxs("div",{className:n.default["date-range-picker__header"],children:[t.jsxs("span",{className:n.default["date-range-picker__month-label"],"aria-live":"polite",children:[Ce[o]," ",c]}),t.jsxs("div",{className:n.default["date-range-picker__header-actions"],children:[t.jsx(Xe.default,{emphasis:"quaternary",size:"small",compact:!0,leadingIcon:t.jsx(N.default,{size:"16",glyph:t.jsx(De,{})}),onClick:He,children:Ee}),t.jsxs("div",{className:n.default["date-range-picker__nav-buttons"],children:[t.jsx($.default,{size:"medium",padding:"compact",icon:t.jsx(N.default,{size:$.ICON_BUTTON_ICON_SIZES.medium,glyph:t.jsx(aa,{})}),onClick:Ye,"aria-label":Me}),t.jsx($.default,{size:"medium",padding:"compact",icon:t.jsx(N.default,{size:$.ICON_BUTTON_ICON_SIZES.medium,glyph:t.jsx(ta,{})}),onClick:Ke,"aria-label":qe})]})]})]}),t.jsx("div",{className:n.default["date-range-picker__weekdays"],"aria-hidden":!0,children:Ne.map((e,a)=>t.jsx("span",{className:n.default["date-range-picker__weekday"],children:e},a))}),t.jsx("div",{ref:V,className:n.default["date-range-picker__grid"],role:"grid","aria-label":`${K[o]} ${c}`,children:ye.map((e,a)=>t.jsx("div",{className:n.default["date-range-picker__week"],role:"row",children:e.map((l,f)=>{if(l==null)return t.jsx("span",{className:n.default["date-range-picker__day-empty"],role:"gridcell"},f);const g=re(c,o,l),ve=g===W,me=r==="range"&&le(g,d),_e=r==="range"&&!!h&&le(g,h),te=r==="date"?le(g,D):me||_e,Je=r==="range"&&ua(g,d,h),be=r==="range"&&!!d&&!!h&&d!==h,Ze=[n.default["date-range-picker__day-cell"],Je?n.default["date-range-picker__day-cell--in-range"]:"",be&&me?n.default["date-range-picker__day-cell--range-start"]:"",be&&_e?n.default["date-range-picker__day-cell--range-end"]:""].filter(Boolean).join(" "),Ge=[n.default["date-range-picker__day"],te?n.default["date-range-picker__day--selected"]:"",ve&&!te?n.default["date-range-picker__day--today"]:""].filter(Boolean).join(" ");return t.jsx("div",{className:Ze,role:"gridcell",children:t.jsx("button",{type:"button",className:Ge,"data-day":l,tabIndex:Z===l?0:-1,onClick:()=>ee(g,l),onFocus:()=>b(l),onKeyDown:Qe=>Le(Qe,l),"aria-label":g,"aria-pressed":te,"aria-current":ve?"date":void 0,children:l})},f)})},a))})]}))]})}exports.default=da;
|
|
2
2
|
//# sourceMappingURL=DateRangePicker.cjs.map
|