@botiverse/raft-ui 0.51.0 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/components/activity-inbox/activity-inbox-shell.d.mts +12 -0
- package/dist/components/activity-inbox/activity-inbox-shell.mjs +39 -0
- package/dist/components/activity-inbox/activity-inbox-shell.recipe.mjs +14 -0
- package/dist/components/activity-inbox/activity-inbox-sidebar.d.mts +6 -0
- package/dist/components/activity-inbox/activity-inbox-sidebar.mjs +22 -0
- package/dist/components/activity-inbox/activity-inbox-sidebar.recipe.mjs +22 -0
- package/dist/components/activity-inbox/activity-inbox-toolbar.d.mts +9 -0
- package/dist/components/activity-inbox/activity-inbox-toolbar.mjs +29 -0
- package/dist/components/activity-inbox/activity-inbox-toolbar.recipe.mjs +14 -0
- package/dist/components/activity-inbox/index.d.mts +4 -0
- package/dist/components/alert-dialog/alert-dialog.d.mts +41 -0
- package/dist/components/alert-dialog/alert-dialog.mjs +163 -0
- package/dist/components/alert-dialog/index.d.mts +2 -0
- package/dist/components/announcement-dialog/announcement-dialog.d.mts +18 -0
- package/dist/components/announcement-dialog/announcement-dialog.mjs +121 -0
- package/dist/components/announcement-dialog/index.d.mts +3 -0
- package/dist/components/app-rail/app-rail.d.mts +31 -0
- package/dist/components/app-rail/app-rail.mjs +126 -0
- package/dist/components/app-rail/app-rail.recipe.mjs +47 -0
- package/dist/components/app-rail/index.d.mts +2 -0
- package/dist/components/app-shell/app-shell.d.mts +27 -0
- package/dist/components/app-shell/app-shell.mjs +217 -0
- package/dist/components/app-shell/index.d.mts +2 -0
- package/dist/components/avatar/avatar.d.mts +169 -0
- package/dist/components/avatar/avatar.mjs +298 -0
- package/dist/components/avatar/index.d.mts +2 -0
- package/dist/components/badge/badge.d.mts +89 -0
- package/dist/components/badge/badge.mjs +203 -0
- package/dist/components/badge/index.d.mts +2 -0
- package/dist/components/banner/banner.d.mts +141 -0
- package/dist/components/banner/banner.mjs +228 -0
- package/dist/components/banner/index.d.mts +2 -0
- package/dist/components/button/button.d.mts +257 -0
- package/dist/components/button/button.mjs +177 -0
- package/dist/components/button/index.d.mts +2 -0
- package/dist/components/card/card.d.mts +21 -0
- package/dist/components/card/card.mjs +114 -0
- package/dist/components/card/card.recipe.d.mts +105 -0
- package/dist/components/card/card.recipe.mjs +67 -0
- package/dist/components/card/index.d.mts +2 -0
- package/dist/components/checkbox/checkbox-indicator.d.mts +92 -0
- package/dist/components/checkbox/checkbox-indicator.mjs +61 -0
- package/dist/components/checkbox/checkbox.d.mts +9 -0
- package/dist/components/checkbox/checkbox.mjs +40 -0
- package/dist/components/checkbox/index.d.mts +3 -0
- package/dist/components/choice-list/choice-list.d.mts +103 -0
- package/dist/components/choice-list/choice-list.mjs +301 -0
- package/dist/components/choice-list/choice-list.recipe.mjs +44 -0
- package/dist/components/choice-list/index.d.mts +2 -0
- package/dist/components/code-block/code-block.d.mts +30 -0
- package/dist/components/code-block/code-block.mjs +151 -0
- package/dist/components/code-block/code-block.recipe.mjs +47 -0
- package/dist/components/code-block/index.d.mts +2 -0
- package/dist/components/combobox/combobox.d.mts +69 -0
- package/dist/components/combobox/combobox.mjs +438 -0
- package/dist/components/combobox/index.d.mts +2 -0
- package/dist/components/combobox-select/combobox-select.d.mts +4 -0
- package/dist/components/combobox-select/combobox-select.list-side.mjs +16 -0
- package/dist/components/combobox-select/combobox-select.mjs +473 -0
- package/dist/components/combobox-select/combobox-select.options.mjs +21 -0
- package/dist/components/combobox-select/combobox-select.types.d.mts +83 -0
- package/dist/components/combobox-select/index.d.mts +3 -0
- package/dist/components/comment/comment-card.d.mts +40 -0
- package/dist/components/comment/comment-card.mjs +83 -0
- package/dist/components/comment/comment-entry.d.mts +24 -0
- package/dist/components/comment/comment-entry.mjs +75 -0
- package/dist/components/comment/comment-highlight.d.mts +18 -0
- package/dist/components/comment/comment-highlight.mjs +33 -0
- package/dist/components/comment/comment-margin-layout.d.mts +32 -0
- package/dist/components/comment/comment-margin-layout.mjs +44 -0
- package/dist/components/comment/comment-margin.d.mts +29 -0
- package/dist/components/comment/comment-margin.mjs +164 -0
- package/dist/components/comment/comment-marker.d.mts +16 -0
- package/dist/components/comment/comment-marker.mjs +24 -0
- package/dist/components/comment/comment.recipe.mjs +58 -0
- package/dist/components/comment/index.d.mts +8 -0
- package/dist/components/comment/use-comment-margin-fits.d.mts +16 -0
- package/dist/components/comment/use-comment-margin-fits.mjs +34 -0
- package/dist/components/composer/composer-attachment.recipe.mjs +85 -0
- package/dist/components/composer/composer-attachments-scroll-area.d.mts +5 -0
- package/dist/components/composer/composer-attachments-scroll-area.mjs +93 -0
- package/dist/components/composer/composer-attachments.d.mts +27 -0
- package/dist/components/composer/composer-attachments.mjs +147 -0
- package/dist/components/composer/composer-drop-overlay.d.mts +9 -0
- package/dist/components/composer/composer-drop-overlay.mjs +60 -0
- package/dist/components/composer/composer-drop-overlay.recipe.mjs +23 -0
- package/dist/components/composer/composer-root.d.mts +5 -0
- package/dist/components/composer/composer-root.mjs +18 -0
- package/dist/components/composer/composer-suggestion-list.d.mts +139 -0
- package/dist/components/composer/composer-suggestion-list.mjs +160 -0
- package/dist/components/composer/composer-toolbar-label.d.mts +5 -0
- package/dist/components/composer/composer-toolbar-label.mjs +24 -0
- package/dist/components/composer/composer.d.mts +20 -0
- package/dist/components/composer/composer.mjs +88 -0
- package/dist/components/composer/composer.recipe.mjs +29 -0
- package/dist/components/composer/index.d.mts +10 -0
- package/dist/components/composer/sortable-composer-attachments.d.mts +37 -0
- package/dist/components/composer/sortable-composer-attachments.mjs +247 -0
- package/dist/components/composer/use-composer-suggestions.d.mts +83 -0
- package/dist/components/composer/use-composer-suggestions.mjs +207 -0
- package/dist/components/context-menu/context-menu.d.mts +53 -0
- package/dist/components/context-menu/context-menu.mjs +275 -0
- package/dist/components/context-menu/index.d.mts +2 -0
- package/dist/components/conversation-panel/conversation-panel-empty-state.d.mts +9 -0
- package/dist/components/conversation-panel/conversation-panel-empty-state.mjs +57 -0
- package/dist/components/conversation-panel/conversation-panel.d.mts +20 -0
- package/dist/components/conversation-panel/conversation-panel.mjs +63 -0
- package/dist/components/conversation-panel/conversation-panel.recipe.mjs +15 -0
- package/dist/components/conversation-panel/index.d.mts +3 -0
- package/dist/components/copyable-code/copyable-code.d.mts +72 -0
- package/dist/components/copyable-code/copyable-code.mjs +153 -0
- package/dist/components/copyable-code/index.d.mts +2 -0
- package/dist/components/description-list/description-list.d.mts +59 -0
- package/dist/components/description-list/description-list.mjs +96 -0
- package/dist/components/description-list/index.d.mts +2 -0
- package/dist/components/dialog/dialog-sheet-context.mjs +58 -0
- package/dist/components/dialog/dialog-sheet.d.mts +31 -0
- package/dist/components/dialog/dialog-sheet.mjs +194 -0
- package/dist/components/dialog/dialog.d.mts +85 -0
- package/dist/components/dialog/dialog.mjs +371 -0
- package/dist/components/dialog/index.d.mts +3 -0
- package/dist/components/drag/drag-announcements.d.mts +72 -0
- package/dist/components/drag/drag-announcements.mjs +115 -0
- package/dist/components/drag/drag-lift.d.mts +100 -0
- package/dist/components/drag/drag-lift.mjs +276 -0
- package/dist/components/drag/drag-lists.d.mts +98 -0
- package/dist/components/drag/drag-lists.mjs +258 -0
- package/dist/components/drag/drag-sensors.d.mts +87 -0
- package/dist/components/drag/drag-sensors.mjs +169 -0
- package/dist/components/drag/drag.recipe.d.mts +7 -0
- package/dist/components/drag/drag.recipe.mjs +30 -0
- package/dist/components/drag/drop-placeholder.d.mts +41 -0
- package/dist/components/drag/drop-placeholder.mjs +161 -0
- package/dist/components/drag/index.d.mts +8 -0
- package/dist/components/drawer/drawer.d.mts +34 -0
- package/dist/components/drawer/drawer.mjs +202 -0
- package/dist/components/drawer/drawer.recipe.mjs +175 -0
- package/dist/components/drawer/index.d.mts +2 -0
- package/dist/components/dropdown-menu/dropdown-menu.d.mts +62 -0
- package/dist/components/dropdown-menu/dropdown-menu.mjs +319 -0
- package/dist/components/dropdown-menu/index.d.mts +2 -0
- package/dist/components/ellipsis/ellipsis.d.mts +55 -0
- package/dist/components/ellipsis/ellipsis.mjs +320 -0
- package/dist/components/ellipsis/index.d.mts +3 -0
- package/dist/components/empty-state/empty-state.d.mts +15 -0
- package/dist/components/empty-state/empty-state.mjs +102 -0
- package/dist/components/empty-state/index.d.mts +2 -0
- package/dist/components/field/field.d.mts +79 -0
- package/dist/components/field/field.mjs +100 -0
- package/dist/components/field/index.d.mts +2 -0
- package/dist/components/file-preview/file-preview.d.mts +17 -0
- package/dist/components/file-preview/file-preview.mjs +210 -0
- package/dist/components/file-preview/file-preview.recipe.d.mts +99 -0
- package/dist/components/file-preview/file-preview.recipe.mjs +39 -0
- package/dist/components/file-preview/index.d.mts +2 -0
- package/dist/components/files/files.d.mts +35 -0
- package/dist/components/files/files.mjs +69 -0
- package/dist/components/files/files.recipe.mjs +40 -0
- package/dist/components/files/index.d.mts +2 -0
- package/dist/components/filter-chip/filter-chip.d.mts +25 -0
- package/dist/components/filter-chip/filter-chip.mjs +59 -0
- package/dist/components/filter-chip/index.d.mts +2 -0
- package/dist/components/float-button/float-button.d.mts +36 -0
- package/dist/components/float-button/float-button.mjs +116 -0
- package/dist/components/float-button/float-button.position.d.mts +6 -0
- package/dist/components/float-button/float-button.position.mjs +41 -0
- package/dist/components/float-button/index.d.mts +3 -0
- package/dist/components/form-section/form-section.d.mts +16 -0
- package/dist/components/form-section/form-section.mjs +53 -0
- package/dist/components/form-section/index.d.mts +2 -0
- package/dist/components/icon-tile/icon-tile.d.mts +97 -0
- package/dist/components/icon-tile/icon-tile.mjs +49 -0
- package/dist/components/icon-tile/index.d.mts +2 -0
- package/dist/components/icons/action-icons.d.mts +34 -0
- package/dist/components/icons/action-icons.mjs +383 -0
- package/dist/components/icons/conversation-icons.d.mts +12 -0
- package/dist/components/icons/conversation-icons.mjs +147 -0
- package/dist/components/icons/index.d.mts +4 -0
- package/dist/components/icons/object-icons.d.mts +6 -0
- package/dist/components/icons/object-icons.mjs +27 -0
- package/dist/components/inbox-item/inbox-item-leading-badge.d.mts +13 -0
- package/dist/components/inbox-item/inbox-item-leading-badge.mjs +27 -0
- package/dist/components/inbox-item/inbox-item-skeleton.d.mts +46 -0
- package/dist/components/inbox-item/inbox-item-skeleton.mjs +89 -0
- package/dist/components/inbox-item/inbox-item-skeleton.recipe.mjs +20 -0
- package/dist/components/inbox-item/inbox-item.d.mts +71 -0
- package/dist/components/inbox-item/inbox-item.mjs +276 -0
- package/dist/components/inbox-item/inbox-item.recipe.mjs +137 -0
- package/dist/components/inbox-item/index.d.mts +2 -0
- package/dist/components/inline-code/index.d.mts +2 -0
- package/dist/components/inline-code/inline-code.d.mts +8 -0
- package/dist/components/inline-code/inline-code.mjs +30 -0
- package/dist/components/input/index.d.mts +2 -0
- package/dist/components/input/input.d.mts +16 -0
- package/dist/components/input/input.mjs +20 -0
- package/dist/components/input/input.recipe.mjs +12 -0
- package/dist/components/input-group/index.d.mts +2 -0
- package/dist/components/input-group/input-group.d.mts +93 -0
- package/dist/components/input-group/input-group.mjs +178 -0
- package/dist/components/kbd/index.d.mts +2 -0
- package/dist/components/kbd/kbd.d.mts +7 -0
- package/dist/components/kbd/kbd.mjs +34 -0
- package/dist/components/label/index.d.mts +2 -0
- package/dist/components/label/label.d.mts +60 -0
- package/dist/components/label/label.mjs +75 -0
- package/dist/components/legacy-task-panel/index.d.mts +2 -0
- package/dist/components/legacy-task-panel/legacy-task-panel.d.mts +57 -0
- package/dist/components/legacy-task-panel/legacy-task-panel.mjs +234 -0
- package/dist/components/legacy-task-panel/legacy-task-panel.recipe.mjs +30 -0
- package/dist/components/lightbox/index.d.mts +2 -0
- package/dist/components/lightbox/lightbox.d.mts +55 -0
- package/dist/components/lightbox/lightbox.mjs +336 -0
- package/dist/components/list-row/index.d.mts +2 -0
- package/dist/components/list-row/list-row-skeleton.d.mts +21 -0
- package/dist/components/list-row/list-row-skeleton.mjs +43 -0
- package/dist/components/list-row/list-row.d.mts +66 -0
- package/dist/components/list-row/list-row.mjs +167 -0
- package/dist/components/list-row/list-row.recipe.d.mts +126 -0
- package/dist/components/list-row/list-row.recipe.mjs +94 -0
- package/dist/components/live-agent-activity-bar/index.d.mts +2 -0
- package/dist/components/live-agent-activity-bar/live-agent-activity-bar.d.mts +25 -0
- package/dist/components/live-agent-activity-bar/live-agent-activity-bar.mjs +107 -0
- package/dist/components/logo/index.d.mts +2 -0
- package/dist/components/logo/raft-logo.d.mts +9 -0
- package/dist/components/logo/raft-logo.mjs +63 -0
- package/dist/components/markdown/index.d.mts +2 -0
- package/dist/components/markdown/markdown-parts.d.mts +54 -0
- package/dist/components/markdown/markdown-parts.mjs +153 -0
- package/dist/components/markdown/markdown.recipe.mjs +77 -0
- package/dist/components/message-action-card/index.d.mts +2 -0
- package/dist/components/message-action-card/message-action-card-content.recipe.mjs +50 -0
- package/dist/components/message-action-card/message-action-card.d.mts +95 -0
- package/dist/components/message-action-card/message-action-card.mjs +298 -0
- package/dist/components/message-action-card/message-action-card.recipe.mjs +47 -0
- package/dist/components/message-attachment/index.d.mts +5 -0
- package/dist/components/message-attachment/message-attachment.d.mts +27 -0
- package/dist/components/message-attachment/message-attachment.mjs +129 -0
- package/dist/components/message-attachment/message-attachment.recipe.mjs +36 -0
- package/dist/components/message-attachment/message-image-gallery-rows.d.mts +47 -0
- package/dist/components/message-attachment/message-image-gallery-rows.mjs +55 -0
- package/dist/components/message-attachment/message-image-gallery.d.mts +32 -0
- package/dist/components/message-attachment/message-image-gallery.mjs +105 -0
- package/dist/components/message-attachment/message-image-gallery.recipe.mjs +61 -0
- package/dist/components/message-attachment/message-video-preview.d.mts +19 -0
- package/dist/components/message-attachment/message-video-preview.mjs +92 -0
- package/dist/components/message-attachment/message-video-preview.recipe.mjs +33 -0
- package/dist/components/message-embed/index.d.mts +2 -0
- package/dist/components/message-embed/message-embed.d.mts +12 -0
- package/dist/components/message-embed/message-embed.mjs +42 -0
- package/dist/components/message-embed/message-embed.recipe.mjs +14 -0
- package/dist/components/message-forwarded-bundle/index.d.mts +2 -0
- package/dist/components/message-forwarded-bundle/message-forwarded-bundle.d.mts +92 -0
- package/dist/components/message-forwarded-bundle/message-forwarded-bundle.mjs +324 -0
- package/dist/components/message-forwarded-bundle/message-forwarded-bundle.recipe.mjs +81 -0
- package/dist/components/message-item/index.d.mts +13 -0
- package/dist/components/message-item/message-footer.d.mts +20 -0
- package/dist/components/message-item/message-footer.mjs +54 -0
- package/dist/components/message-item/message-footer.recipe.mjs +46 -0
- package/dist/components/message-item/message-item-content.d.mts +22 -0
- package/dist/components/message-item/message-item-content.mjs +81 -0
- package/dist/components/message-item/message-item-delegated.d.mts +38 -0
- package/dist/components/message-item/message-item-delegated.mjs +72 -0
- package/dist/components/message-item/message-item-gutter.d.mts +10 -0
- package/dist/components/message-item/message-item-gutter.mjs +41 -0
- package/dist/components/message-item/message-item-header.d.mts +29 -0
- package/dist/components/message-item/message-item-header.mjs +107 -0
- package/dist/components/message-item/message-item-label.mjs +113 -0
- package/dist/components/message-item/message-item-root.d.mts +25 -0
- package/dist/components/message-item/message-item-root.mjs +39 -0
- package/dist/components/message-item/message-item-toolbar.d.mts +9 -0
- package/dist/components/message-item/message-item-toolbar.mjs +131 -0
- package/dist/components/message-item/message-item.recipe.d.mts +101 -0
- package/dist/components/message-item/message-item.recipe.mjs +114 -0
- package/dist/components/message-item/message-multi-select.d.mts +15 -0
- package/dist/components/message-item/message-multi-select.mjs +49 -0
- package/dist/components/message-item/message-multi-select.recipe.mjs +23 -0
- package/dist/components/message-item/message-reaction.d.mts +39 -0
- package/dist/components/message-item/message-reaction.mjs +188 -0
- package/dist/components/message-item/message-reaction.recipe.mjs +76 -0
- package/dist/components/message-item/message-reference.d.mts +50 -0
- package/dist/components/message-item/message-reference.mjs +111 -0
- package/dist/components/message-item/message-reference.recipe.d.mts +6 -0
- package/dist/components/message-item/message-reference.recipe.mjs +63 -0
- package/dist/components/message-item/message-text-selection-toolbar.d.mts +24 -0
- package/dist/components/message-item/message-text-selection-toolbar.mjs +13 -0
- package/dist/components/message-list/index.d.mts +4 -0
- package/dist/components/message-list/message-list-jump.d.mts +21 -0
- package/dist/components/message-list/message-list-jump.mjs +73 -0
- package/dist/components/message-list/message-list-markers.d.mts +13 -0
- package/dist/components/message-list/message-list-markers.mjs +70 -0
- package/dist/components/message-list/message-list.d.mts +7 -0
- package/dist/components/message-list/message-list.mjs +52 -0
- package/dist/components/message-list/message-list.recipe.mjs +54 -0
- package/dist/components/message-quoted-preview/index.d.mts +2 -0
- package/dist/components/message-quoted-preview/message-quoted-preview.d.mts +40 -0
- package/dist/components/message-quoted-preview/message-quoted-preview.mjs +144 -0
- package/dist/components/message-quoted-preview/message-quoted-preview.recipe.mjs +38 -0
- package/dist/components/message-replies/index.d.mts +2 -0
- package/dist/components/message-replies/message-replies.d.mts +17 -0
- package/dist/components/message-replies/message-replies.mjs +79 -0
- package/dist/components/message-replies/message-replies.recipe.mjs +25 -0
- package/dist/components/message-translation/index.d.mts +2 -0
- package/dist/components/message-translation/message-translation.d.mts +20 -0
- package/dist/components/message-translation/message-translation.mjs +64 -0
- package/dist/components/message-translation/message-translation.recipe.mjs +27 -0
- package/dist/components/meter/index.d.mts +2 -0
- package/dist/components/meter/meter.d.mts +107 -0
- package/dist/components/meter/meter.mjs +118 -0
- package/dist/components/mobile-nav/index.d.mts +3 -0
- package/dist/components/mobile-nav/mobile-nav-server.d.mts +71 -0
- package/dist/components/mobile-nav/mobile-nav-server.mjs +287 -0
- package/dist/components/mobile-nav/mobile-nav.d.mts +12 -0
- package/dist/components/mobile-nav/mobile-nav.mjs +73 -0
- package/dist/components/mode-bar/index.d.mts +2 -0
- package/dist/components/mode-bar/mode-bar.d.mts +33 -0
- package/dist/components/mode-bar/mode-bar.mjs +115 -0
- package/dist/components/notification-center/index.d.mts +2 -0
- package/dist/components/notification-center/notification-center.d.mts +225 -0
- package/dist/components/notification-center/notification-center.mjs +340 -0
- package/dist/components/panel/index.d.mts +7 -0
- package/dist/components/panel/panel-action.d.mts +15 -0
- package/dist/components/panel/panel-action.mjs +23 -0
- package/dist/components/panel/panel-action.recipe.mjs +40 -0
- package/dist/components/panel/panel-header.d.mts +34 -0
- package/dist/components/panel/panel-header.mjs +135 -0
- package/dist/components/panel/panel-header.recipe.mjs +78 -0
- package/dist/components/panel/panel-notice.d.mts +16 -0
- package/dist/components/panel/panel-notice.mjs +77 -0
- package/dist/components/panel/panel-split-action.d.mts +34 -0
- package/dist/components/panel/panel-split-action.mjs +69 -0
- package/dist/components/panel/panel-split-action.recipe.mjs +53 -0
- package/dist/components/panel/panel-toggle-action.d.mts +6 -0
- package/dist/components/panel/panel-toggle-action.mjs +15 -0
- package/dist/components/panel/panel.d.mts +25 -0
- package/dist/components/panel/panel.mjs +96 -0
- package/dist/components/panel/panel.recipe.mjs +24 -0
- package/dist/components/picker-trigger-button/index.d.mts +2 -0
- package/dist/components/picker-trigger-button/picker-trigger-button.d.mts +7 -0
- package/dist/components/picker-trigger-button/picker-trigger-button.mjs +36 -0
- package/dist/components/popover/index.d.mts +2 -0
- package/dist/components/popover/popover.d.mts +41 -0
- package/dist/components/popover/popover.mjs +184 -0
- package/dist/components/preview-card/index.d.mts +2 -0
- package/dist/components/preview-card/preview-card.d.mts +43 -0
- package/dist/components/preview-card/preview-card.mjs +197 -0
- package/dist/components/profile-panel/index.d.mts +2 -0
- package/dist/components/profile-panel/profile-panel.d.mts +14 -0
- package/dist/components/profile-panel/profile-panel.mjs +46 -0
- package/dist/components/profile-panel/profile-panel.recipe.mjs +14 -0
- package/dist/components/progress/index.d.mts +2 -0
- package/dist/components/progress/progress.d.mts +119 -0
- package/dist/components/progress/progress.mjs +139 -0
- package/dist/components/pull-to-refresh/index.d.mts +4 -0
- package/dist/components/pull-to-refresh/pull-to-refresh-gesture.d.mts +30 -0
- package/dist/components/pull-to-refresh/pull-to-refresh-gesture.mjs +134 -0
- package/dist/components/pull-to-refresh/pull-to-refresh-indicator.d.mts +21 -0
- package/dist/components/pull-to-refresh/pull-to-refresh-indicator.mjs +153 -0
- package/dist/components/pull-to-refresh/pull-to-refresh-material-progress.mjs +150 -0
- package/dist/components/pull-to-refresh/use-pull-to-refresh.d.mts +55 -0
- package/dist/components/pull-to-refresh/use-pull-to-refresh.mjs +156 -0
- package/dist/components/radio-group/index.d.mts +2 -0
- package/dist/components/radio-group/radio-group.d.mts +14 -0
- package/dist/components/radio-group/radio-group.mjs +59 -0
- package/dist/components/resizable/index.d.mts +2 -0
- package/dist/components/resizable/resizable.d.mts +15 -0
- package/dist/components/resizable/resizable.mjs +39 -0
- package/dist/components/resizable/resizable.recipe.mjs +24 -0
- package/dist/components/scroll-area/index.d.mts +2 -0
- package/dist/components/scroll-area/scroll-area.d.mts +17 -0
- package/dist/components/scroll-area/scroll-area.mjs +55 -0
- package/dist/components/scroll-area/scroll-area.recipe.mjs +23 -0
- package/dist/components/search/index.d.mts +6 -0
- package/dist/components/search/search-entity.d.mts +24 -0
- package/dist/components/search/search-entity.mjs +106 -0
- package/dist/components/search/search-entity.recipe.mjs +41 -0
- package/dist/components/search/search-message.d.mts +25 -0
- package/dist/components/search/search-message.mjs +115 -0
- package/dist/components/search/search-message.recipe.mjs +32 -0
- package/dist/components/search/search-thread.d.mts +17 -0
- package/dist/components/search/search-thread.mjs +79 -0
- package/dist/components/search/search-thread.recipe.mjs +16 -0
- package/dist/components/search/search-trigger.d.mts +15 -0
- package/dist/components/search/search-trigger.mjs +59 -0
- package/dist/components/search/search.d.mts +23 -0
- package/dist/components/search/search.mjs +88 -0
- package/dist/components/search/search.recipe.mjs +22 -0
- package/dist/components/segmented-control/index.d.mts +2 -0
- package/dist/components/segmented-control/segmented-control.d.mts +38 -0
- package/dist/components/segmented-control/segmented-control.mjs +306 -0
- package/dist/components/select/index.d.mts +2 -0
- package/dist/components/select/select.d.mts +95 -0
- package/dist/components/select/select.mjs +483 -0
- package/dist/components/separator/index.d.mts +2 -0
- package/dist/components/separator/separator.d.mts +10 -0
- package/dist/components/separator/separator.mjs +49 -0
- package/dist/components/sidebar/index.d.mts +5 -0
- package/dist/components/sidebar/sidebar-item.d.mts +64 -0
- package/dist/components/sidebar/sidebar-item.mjs +201 -0
- package/dist/components/sidebar/sidebar-item.recipe.mjs +100 -0
- package/dist/components/sidebar/sidebar-menu.d.mts +13 -0
- package/dist/components/sidebar/sidebar-menu.mjs +67 -0
- package/dist/components/sidebar/sidebar-menu.recipe.mjs +22 -0
- package/dist/components/sidebar/sidebar-section.d.mts +41 -0
- package/dist/components/sidebar/sidebar-section.mjs +164 -0
- package/dist/components/sidebar/sidebar-section.recipe.mjs +45 -0
- package/dist/components/sidebar/sidebar.d.mts +17 -0
- package/dist/components/sidebar/sidebar.mjs +149 -0
- package/dist/components/sidebar/sidebar.recipe.mjs +37 -0
- package/dist/components/skeleton/index.d.mts +2 -0
- package/dist/components/skeleton/skeleton.d.mts +50 -0
- package/dist/components/skeleton/skeleton.mjs +29 -0
- package/dist/components/spinner/index.d.mts +2 -0
- package/dist/components/spinner/spinner.d.mts +77 -0
- package/dist/components/spinner/spinner.mjs +118 -0
- package/dist/components/status/index.d.mts +2 -0
- package/dist/components/status/status.d.mts +143 -0
- package/dist/components/status/status.mjs +56 -0
- package/dist/components/steps/index.d.mts +3 -0
- package/dist/components/steps/otter-indicator.d.mts +17 -0
- package/dist/components/steps/otter-indicator.mjs +331 -0
- package/dist/components/steps/steps.d.mts +50 -0
- package/dist/components/steps/steps.mjs +174 -0
- package/dist/components/switch/index.d.mts +2 -0
- package/dist/components/switch/switch.d.mts +9 -0
- package/dist/components/switch/switch.mjs +50 -0
- package/dist/components/system-message/index.d.mts +2 -0
- package/dist/components/system-message/system-message.d.mts +27 -0
- package/dist/components/system-message/system-message.mjs +113 -0
- package/dist/components/system-message/system-message.recipe.mjs +34 -0
- package/dist/components/table/index.d.mts +2 -0
- package/dist/components/table/table.d.mts +35 -0
- package/dist/components/table/table.mjs +102 -0
- package/dist/components/table/table.recipe.mjs +31 -0
- package/dist/components/tabs/index.d.mts +2 -0
- package/dist/components/tabs/tabs.d.mts +185 -0
- package/dist/components/tabs/tabs.mjs +528 -0
- package/dist/components/task-board/index.d.mts +2 -0
- package/dist/components/task-board/task-board-column.recipe.mjs +46 -0
- package/dist/components/task-board/task-board.d.mts +40 -0
- package/dist/components/task-board/task-board.mjs +155 -0
- package/dist/components/task-card/index.d.mts +2 -0
- package/dist/components/task-card/task-card-status.recipe.mjs +17 -0
- package/dist/components/task-card/task-card.d.mts +30 -0
- package/dist/components/task-card/task-card.mjs +141 -0
- package/dist/components/task-card/task-card.recipe.mjs +39 -0
- package/dist/components/task-dnd/index.d.mts +2 -0
- package/dist/components/task-dnd/task-dnd.d.mts +75 -0
- package/dist/components/task-dnd/task-dnd.mjs +341 -0
- package/dist/components/task-dnd/task-dnd.recipe.mjs +20 -0
- package/dist/components/task-list/index.d.mts +2 -0
- package/dist/components/task-list/task-list-section.recipe.mjs +37 -0
- package/dist/components/task-list/task-list.d.mts +34 -0
- package/dist/components/task-list/task-list.mjs +119 -0
- package/dist/components/tasks/index.d.mts +7 -0
- package/dist/components/tasks/task-chip.d.mts +14 -0
- package/dist/components/tasks/task-chip.mjs +81 -0
- package/dist/components/tasks/task-loading.d.mts +7 -0
- package/dist/components/tasks/task-loading.mjs +32 -0
- package/dist/components/tasks/task-loading.recipe.mjs +8 -0
- package/dist/components/tasks/task-status-badge.d.mts +24 -0
- package/dist/components/tasks/task-status-badge.mjs +24 -0
- package/dist/components/tasks/task-status-icon.d.mts +13 -0
- package/dist/components/tasks/task-status-icon.mjs +90 -0
- package/dist/components/tasks/task-status.recipe.d.mts +62 -0
- package/dist/components/tasks/task-status.recipe.mjs +33 -0
- package/dist/components/tasks/tasks-panel.d.mts +22 -0
- package/dist/components/tasks/tasks-panel.mjs +114 -0
- package/dist/components/tasks/tasks-panel.recipe.mjs +36 -0
- package/dist/components/text/index.d.mts +2 -0
- package/dist/components/text/text.d.mts +186 -0
- package/dist/components/text/text.mjs +114 -0
- package/dist/components/text-link/index.d.mts +2 -0
- package/dist/components/text-link/text-link.d.mts +36 -0
- package/dist/components/text-link/text-link.mjs +60 -0
- package/dist/components/text-selection-toolbar/index.d.mts +3 -0
- package/dist/components/text-selection-toolbar/text-selection-anchor.d.mts +22 -0
- package/dist/components/text-selection-toolbar/text-selection-anchor.mjs +106 -0
- package/dist/components/text-selection-toolbar/text-selection-toolbar.d.mts +20 -0
- package/dist/components/text-selection-toolbar/text-selection-toolbar.mjs +41 -0
- package/dist/components/text-selection-toolbar/text-selection-toolbar.recipe.mjs +19 -0
- package/dist/components/textarea/index.d.mts +2 -0
- package/dist/components/textarea/textarea.d.mts +16 -0
- package/dist/components/textarea/textarea.mjs +62 -0
- package/dist/components/thread-panel/index.d.mts +2 -0
- package/dist/components/thread-panel/thread-panel.d.mts +31 -0
- package/dist/components/thread-panel/thread-panel.mjs +162 -0
- package/dist/components/thread-panel/thread-panel.recipe.mjs +36 -0
- package/dist/components/timeline/index.d.mts +2 -0
- package/dist/components/timeline/timeline.d.mts +44 -0
- package/dist/components/timeline/timeline.mjs +81 -0
- package/dist/components/toast/index.d.mts +2 -0
- package/dist/components/toast/toast.d.mts +263 -0
- package/dist/components/toast/toast.mjs +556 -0
- package/dist/components/toggle-group/index.d.mts +2 -0
- package/dist/components/toggle-group/toggle-group.d.mts +15 -0
- package/dist/components/toggle-group/toggle-group.mjs +64 -0
- package/dist/components/tooltip/index.d.mts +2 -0
- package/dist/components/tooltip/tooltip.d.mts +18 -0
- package/dist/components/tooltip/tooltip.mjs +197 -0
- package/dist/components/virtual-list/ItemColumns.mjs +37 -0
- package/dist/components/virtual-list/VirtualList.d.mts +4 -0
- package/dist/components/virtual-list/VirtualList.mjs +1401 -0
- package/dist/components/virtual-list/VirtualListContext.mjs +5 -0
- package/dist/components/virtual-list/hooks/use-event-callback.mjs +10 -0
- package/dist/components/virtual-list/hooks/use-ios-momentum-compensation.mjs +148 -0
- package/dist/components/virtual-list/hooks/use-keyboard-scroll.mjs +42 -0
- package/dist/components/virtual-list/hooks/use-latest-ref.mjs +10 -0
- package/dist/components/virtual-list/hooks/use-layout-effect-with-previous.mjs +16 -0
- package/dist/components/virtual-list/hooks/use-memo-with-previous.mjs +22 -0
- package/dist/components/virtual-list/hooks/use-non-passive-wheel.mjs +23 -0
- package/dist/components/virtual-list/hooks/use-non-virtual-content-resize.mjs +28 -0
- package/dist/components/virtual-list/hooks/use-scroll-anchor.mjs +55 -0
- package/dist/components/virtual-list/index.d.mts +5 -0
- package/dist/components/virtual-list/public-types.d.mts +341 -0
- package/dist/components/virtual-list/resize-observer/ResizeObserverWrapper.d.mts +5 -0
- package/dist/components/virtual-list/resize-observer/ResizeObserverWrapper.mjs +70 -0
- package/dist/components/virtual-list/resize-observer/resize-observer-delegate.d.mts +6 -0
- package/dist/components/virtual-list/resize-observer/resize-observer-delegate.mjs +54 -0
- package/dist/components/virtual-list/utils/align.mjs +19 -0
- package/dist/components/virtual-list/utils/constants.mjs +30 -0
- package/dist/components/virtual-list/utils/fenwick-tree.mjs +66 -0
- package/dist/components/virtual-list/utils/items-anchor.mjs +49 -0
- package/dist/components/virtual-list/utils/measure.mjs +77 -0
- package/dist/components/virtual-list/utils/platform.mjs +39 -0
- package/dist/components/virtual-list/utils/range.mjs +103 -0
- package/dist/components/virtual-list/utils/size-cache.mjs +35 -0
- package/dist/components/workspace-button/index.d.mts +2 -0
- package/dist/components/workspace-button/workspace-button.d.mts +9 -0
- package/dist/components/workspace-button/workspace-button.mjs +28 -0
- package/dist/index.d.mts +239 -4864
- package/dist/index.mjs +142 -17054
- package/dist/lib/chip-remove.mjs +17 -0
- package/dist/lib/data-attributes.d.mts +5 -0
- package/dist/lib/decision-width.mjs +9 -0
- package/dist/lib/default-native-button.mjs +8 -0
- package/dist/lib/desktop-media.mjs +10 -0
- package/dist/lib/drag-escape.mjs +37 -0
- package/dist/lib/frame-insets.mjs +127 -0
- package/dist/lib/head-edges.mjs +44 -0
- package/dist/lib/hud-text-action.mjs +10 -0
- package/dist/lib/inline-chip.mjs +30 -0
- package/dist/lib/input-modality.d.mts +36 -0
- package/dist/lib/input-modality.mjs +186 -0
- package/dist/lib/list-cell.mjs +21 -0
- package/dist/lib/located.d.mts +25 -0
- package/dist/lib/located.mjs +28 -0
- package/dist/lib/overlay-depth.d.mts +42 -0
- package/dist/lib/overlay-depth.mjs +59 -0
- package/dist/lib/phone-media.mjs +24 -0
- package/dist/lib/presence.d.mts +16 -0
- package/dist/lib/presence.mjs +16 -0
- package/dist/lib/row-tone.d.mts +8 -0
- package/dist/lib/search-hit.mjs +18 -0
- package/dist/lib/stacked-actions.mjs +112 -0
- package/dist/lib/styled-props.d.mts +15 -0
- package/dist/lib/tap-activation.mjs +133 -0
- package/dist/lib/theme/theme-context.d.mts +10 -0
- package/dist/lib/theme/theme-context.mjs +9 -0
- package/dist/lib/theme/theme-provider.d.mts +23 -0
- package/dist/lib/theme/theme-provider.mjs +61 -0
- package/dist/lib/theme/theme-scope.mjs +19 -0
- package/dist/lib/theme/use-theme.d.mts +5 -0
- package/dist/lib/theme/use-theme.mjs +9 -0
- package/dist/lib/touch-drag.d.mts +55 -0
- package/dist/lib/touch-drag.mjs +151 -0
- package/dist/lib/truncation.d.mts +26 -0
- package/dist/lib/truncation.mjs +153 -0
- package/dist/lib/tv.d.mts +2 -0
- package/dist/lib/tv.mjs +14 -0
- package/dist/lib/use-copy-to-clipboard.mjs +58 -0
- package/dist/lib/use-merged-ref.mjs +60 -0
- package/dist/lib/use-mobile-viewport.mjs +17 -0
- package/dist/lib/use-overflow-title.mjs +49 -0
- package/dist/lib/use-scrollbar-size.d.mts +16 -0
- package/dist/lib/use-scrollbar-size.mjs +46 -0
- package/dist/lib/use-truncated.d.mts +20 -0
- package/dist/lib/use-truncated.mjs +34 -0
- package/dist/lib/without-children.d.mts +8 -0
- package/dist/wip.d.mts +61 -1190
- package/dist/wip.mjs +43 -2970
- package/package.json +8 -1
- package/dist/index-C3ymUW98.d.mts +0 -1816
- package/dist/mode-bar-tGnYByXp.mjs +0 -7564
- package/dist/style.css +0 -1395
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { AvatarBadgeProps } from "../avatar/avatar.mjs";
|
|
2
|
+
import "../avatar/index.mjs";
|
|
3
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
4
|
+
//#region src/components/message-item/message-item-delegated.d.ts
|
|
5
|
+
export type MessageItemDelegatedByProps = useRender.ComponentProps<"span">;
|
|
6
|
+
/**
|
|
7
|
+
* Says an assistant sent the message for its owner, the sender: "sent by
|
|
8
|
+
* Friday". Put it in `MessageItemHeader` after `MessageItemSenderGroup`, and
|
|
9
|
+
* the assistant's name in `MessageItemDelegatedByName` or
|
|
10
|
+
* `MessageItemDelegatedByButton`. The words, and the spaces around the name,
|
|
11
|
+
* come from the product. It takes at most 45% of the line: past that only
|
|
12
|
+
* the name truncates, never the words.
|
|
13
|
+
*/
|
|
14
|
+
export declare function MessageItemDelegatedBy({ className, render, ...props }: MessageItemDelegatedByProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
15
|
+
export type MessageItemDelegatedByNameProps = useRender.ComponentProps<"span">;
|
|
16
|
+
/** The assistant's name in `MessageItemDelegatedBy`, the part that truncates. */
|
|
17
|
+
export declare function MessageItemDelegatedByName({ className, render, ...props }: MessageItemDelegatedByNameProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
18
|
+
export type MessageItemDelegatedByButtonProps = useRender.ComponentProps<"button">;
|
|
19
|
+
/**
|
|
20
|
+
* The assistant's name when it opens the assistant's profile: a `<button>`
|
|
21
|
+
* (or a link through `render`) that underlines on hover and truncates like
|
|
22
|
+
* `MessageItemDelegatedByName`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function MessageItemDelegatedByButton({ className, render, ...props }: MessageItemDelegatedByButtonProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
25
|
+
export type MessageItemDelegatedAvatarProps = Omit<AvatarBadgeProps, "presence" | "offset"> & {
|
|
26
|
+
/** The assistant was deleted: its face is grayed and faded, over the
|
|
27
|
+
* row's surface, never the owner's avatar. */
|
|
28
|
+
deleted?: boolean;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* The assistant's face on its owner's avatar, in the corner a presence light
|
|
32
|
+
* takes: put it inside the owner's `md` `Avatar` with a `2xs` agent `Avatar`
|
|
33
|
+
* as its child. It is hidden from assistive technology, because
|
|
34
|
+
* `MessageItemDelegatedBy` already says who sent the message. Only on a
|
|
35
|
+
* person's avatar: an agent's corner is its presence light.
|
|
36
|
+
*/
|
|
37
|
+
export declare function MessageItemDelegatedAvatar({ className, deleted, ...props }: MessageItemDelegatedAvatarProps): import("react").JSX.Element;
|
|
38
|
+
//#endregion
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { AvatarBadge } from "../avatar/avatar.mjs";
|
|
2
|
+
import { messageItem } from "./message-item.recipe.mjs";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { mergeProps } from "@base-ui/react/merge-props";
|
|
5
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
6
|
+
//#region src/components/message-item/message-item-delegated.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Says an assistant sent the message for its owner, the sender: "sent by
|
|
9
|
+
* Friday". Put it in `MessageItemHeader` after `MessageItemSenderGroup`, and
|
|
10
|
+
* the assistant's name in `MessageItemDelegatedByName` or
|
|
11
|
+
* `MessageItemDelegatedByButton`. The words, and the spaces around the name,
|
|
12
|
+
* come from the product. It takes at most 45% of the line: past that only
|
|
13
|
+
* the name truncates, never the words.
|
|
14
|
+
*/
|
|
15
|
+
function MessageItemDelegatedBy({ className, render, ...props }) {
|
|
16
|
+
const { delegatedBy } = messageItem();
|
|
17
|
+
const defaultProps = { className: delegatedBy({ className }) };
|
|
18
|
+
return useRender({
|
|
19
|
+
defaultTagName: "span",
|
|
20
|
+
render,
|
|
21
|
+
props: mergeProps(defaultProps, props),
|
|
22
|
+
state: { slot: "message-item-delegated-by" }
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/** The assistant's name in `MessageItemDelegatedBy`, the part that truncates. */
|
|
26
|
+
function MessageItemDelegatedByName({ className, render, ...props }) {
|
|
27
|
+
const { delegatedByName } = messageItem();
|
|
28
|
+
const defaultProps = { className: delegatedByName({ className }) };
|
|
29
|
+
return useRender({
|
|
30
|
+
defaultTagName: "span",
|
|
31
|
+
render,
|
|
32
|
+
props: mergeProps(defaultProps, props),
|
|
33
|
+
state: { slot: "message-item-delegated-by-name" }
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The assistant's name when it opens the assistant's profile: a `<button>`
|
|
38
|
+
* (or a link through `render`) that underlines on hover and truncates like
|
|
39
|
+
* `MessageItemDelegatedByName`.
|
|
40
|
+
*/
|
|
41
|
+
function MessageItemDelegatedByButton({ className, render, ...props }) {
|
|
42
|
+
const { delegatedByButton } = messageItem();
|
|
43
|
+
const defaultProps = {
|
|
44
|
+
type: "button",
|
|
45
|
+
className: delegatedByButton({ className })
|
|
46
|
+
};
|
|
47
|
+
return useRender({
|
|
48
|
+
defaultTagName: "button",
|
|
49
|
+
render,
|
|
50
|
+
props: mergeProps(defaultProps, props),
|
|
51
|
+
state: { slot: "message-item-delegated-by-button" }
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The assistant's face on its owner's avatar, in the corner a presence light
|
|
56
|
+
* takes: put it inside the owner's `md` `Avatar` with a `2xs` agent `Avatar`
|
|
57
|
+
* as its child. It is hidden from assistive technology, because
|
|
58
|
+
* `MessageItemDelegatedBy` already says who sent the message. Only on a
|
|
59
|
+
* person's avatar: an agent's corner is its presence light.
|
|
60
|
+
*/
|
|
61
|
+
function MessageItemDelegatedAvatar({ className, deleted, ...props }) {
|
|
62
|
+
const { delegatedAvatar } = messageItem();
|
|
63
|
+
return /* @__PURE__ */ jsx(AvatarBadge, {
|
|
64
|
+
"aria-hidden": true,
|
|
65
|
+
"data-deleted": deleted ? "" : void 0,
|
|
66
|
+
className: delegatedAvatar({ className }),
|
|
67
|
+
render: /* @__PURE__ */ jsx("span", {}),
|
|
68
|
+
...props
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
//#endregion
|
|
72
|
+
export { MessageItemDelegatedAvatar, MessageItemDelegatedBy, MessageItemDelegatedByButton, MessageItemDelegatedByName };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
2
|
+
//#region src/components/message-item/message-item-gutter.d.ts
|
|
3
|
+
export type MessageItemGutterProps = useRender.ComponentProps<"div">;
|
|
4
|
+
export declare function MessageItemGutter({ className, render, ...props }: MessageItemGutterProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
5
|
+
export type MessageItemAvatarSlotProps = useRender.ComponentProps<"div">;
|
|
6
|
+
export declare function MessageItemAvatarSlot({ className, render, ...props }: MessageItemAvatarSlotProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
7
|
+
export type MessageItemContinuationTimeProps = useRender.ComponentProps<"time">;
|
|
8
|
+
/** Left-gutter hover clock for continuation rows, a `<time>`: pass the moment in `dateTime`. Show the hour and minute only, in the person's 12h/24h format, with no AM/PM (`6:35`, `18:35`). */
|
|
9
|
+
export declare function MessageItemContinuationTime({ className, id, render, ...props }: MessageItemContinuationTimeProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
10
|
+
//#endregion
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { useMessageItemLabelId } from "./message-item-label.mjs";
|
|
2
|
+
import { messageItem } from "./message-item.recipe.mjs";
|
|
3
|
+
import { mergeProps } from "@base-ui/react/merge-props";
|
|
4
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
5
|
+
//#region src/components/message-item/message-item-gutter.tsx
|
|
6
|
+
function MessageItemGutter({ className, render, ...props }) {
|
|
7
|
+
const { gutter } = messageItem();
|
|
8
|
+
const defaultProps = { className: gutter({ className }) };
|
|
9
|
+
return useRender({
|
|
10
|
+
defaultTagName: "div",
|
|
11
|
+
render,
|
|
12
|
+
props: mergeProps(defaultProps, props),
|
|
13
|
+
state: { slot: "message-item-gutter" }
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function MessageItemAvatarSlot({ className, render, ...props }) {
|
|
17
|
+
const { avatarSlot } = messageItem();
|
|
18
|
+
const defaultProps = { className: avatarSlot({ className }) };
|
|
19
|
+
return useRender({
|
|
20
|
+
defaultTagName: "div",
|
|
21
|
+
render,
|
|
22
|
+
props: mergeProps(defaultProps, props),
|
|
23
|
+
state: { slot: "message-item-avatar-slot" }
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/** Left-gutter hover clock for continuation rows, a `<time>`: pass the moment in `dateTime`. Show the hour and minute only, in the person's 12h/24h format, with no AM/PM (`6:35`, `18:35`). */
|
|
27
|
+
function MessageItemContinuationTime({ className, id, render, ...props }) {
|
|
28
|
+
const { continuationTime } = messageItem();
|
|
29
|
+
const defaultProps = {
|
|
30
|
+
id: useMessageItemLabelId("time", id),
|
|
31
|
+
className: continuationTime({ className })
|
|
32
|
+
};
|
|
33
|
+
return useRender({
|
|
34
|
+
defaultTagName: "time",
|
|
35
|
+
render,
|
|
36
|
+
props: mergeProps(defaultProps, props),
|
|
37
|
+
state: { slot: "message-item-continuation-time" }
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { MessageItemAvatarSlot, MessageItemContinuationTime, MessageItemGutter };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
2
|
+
//#region src/components/message-item/message-item-header.d.ts
|
|
3
|
+
export type MessageItemHeaderProps = useRender.ComponentProps<"div">;
|
|
4
|
+
export declare function MessageItemHeader({ className, render, ...props }: MessageItemHeaderProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
5
|
+
export type MessageItemSenderGroupProps = useRender.ComponentProps<"span">;
|
|
6
|
+
/**
|
|
7
|
+
* Holds the sender, its badges and its role, and decides who gives way when
|
|
8
|
+
* the header runs out of room: the role truncates first, then the name. The
|
|
9
|
+
* badges stay whole beside the name, and the time, outside the group, never
|
|
10
|
+
* truncates.
|
|
11
|
+
*/
|
|
12
|
+
export declare function MessageItemSenderGroup({ className, render, ...props }: MessageItemSenderGroupProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
13
|
+
export type MessageItemSenderProps = useRender.ComponentProps<"span">;
|
|
14
|
+
export declare function MessageItemSender({ className, id, render, ...props }: MessageItemSenderProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
15
|
+
export type MessageItemSenderButtonProps = useRender.ComponentProps<"button">;
|
|
16
|
+
export declare function MessageItemSenderButton({ className, id, render, ...props }: MessageItemSenderButtonProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
17
|
+
export type MessageItemSenderBadgesProps = useRender.ComponentProps<"span">;
|
|
18
|
+
export declare function MessageItemSenderBadges({ className, render, ...props }: MessageItemSenderBadgesProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
19
|
+
export type MessageItemMetaProps = useRender.ComponentProps<"span">;
|
|
20
|
+
export declare function MessageItemMeta({ className, render, ...props }: MessageItemMetaProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
21
|
+
export type MessageItemTimeProps = useRender.ComponentProps<"time">;
|
|
22
|
+
/**
|
|
23
|
+
* The message's time, right after the sender. A `<time>`: pass the moment in
|
|
24
|
+
* `dateTime` (ISO 8601) and the full date and time as its tooltip.
|
|
25
|
+
*/
|
|
26
|
+
export declare function MessageItemTime({ className, id, render, ...props }: MessageItemTimeProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
27
|
+
export type MessageItemInlineStatusProps = useRender.ComponentProps<"span">;
|
|
28
|
+
export declare function MessageItemInlineStatus({ className, render, ...props }: MessageItemInlineStatusProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
29
|
+
//#endregion
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { useMessageItemLabelId } from "./message-item-label.mjs";
|
|
2
|
+
import { messageItem } from "./message-item.recipe.mjs";
|
|
3
|
+
import { mergeProps } from "@base-ui/react/merge-props";
|
|
4
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
5
|
+
//#region src/components/message-item/message-item-header.tsx
|
|
6
|
+
function MessageItemHeader({ className, render, ...props }) {
|
|
7
|
+
const { header } = messageItem();
|
|
8
|
+
const defaultProps = { className: header({ className }) };
|
|
9
|
+
return useRender({
|
|
10
|
+
defaultTagName: "div",
|
|
11
|
+
render,
|
|
12
|
+
props: mergeProps(defaultProps, props),
|
|
13
|
+
state: { slot: "message-item-header" }
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Holds the sender, its badges and its role, and decides who gives way when
|
|
18
|
+
* the header runs out of room: the role truncates first, then the name. The
|
|
19
|
+
* badges stay whole beside the name, and the time, outside the group, never
|
|
20
|
+
* truncates.
|
|
21
|
+
*/
|
|
22
|
+
function MessageItemSenderGroup({ className, render, ...props }) {
|
|
23
|
+
const { senderGroup } = messageItem();
|
|
24
|
+
const defaultProps = { className: senderGroup({ className }) };
|
|
25
|
+
return useRender({
|
|
26
|
+
defaultTagName: "span",
|
|
27
|
+
render,
|
|
28
|
+
props: mergeProps(defaultProps, props),
|
|
29
|
+
state: { slot: "message-item-sender-group" }
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function MessageItemSender({ className, id, render, ...props }) {
|
|
33
|
+
const { sender } = messageItem();
|
|
34
|
+
const defaultProps = {
|
|
35
|
+
id: useMessageItemLabelId("sender", id),
|
|
36
|
+
className: sender({ className })
|
|
37
|
+
};
|
|
38
|
+
return useRender({
|
|
39
|
+
defaultTagName: "span",
|
|
40
|
+
render,
|
|
41
|
+
props: mergeProps(defaultProps, props),
|
|
42
|
+
state: { slot: "message-item-sender" }
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function MessageItemSenderButton({ className, id, render, ...props }) {
|
|
46
|
+
const { senderButton } = messageItem();
|
|
47
|
+
const defaultProps = {
|
|
48
|
+
type: "button",
|
|
49
|
+
id: useMessageItemLabelId("sender", id),
|
|
50
|
+
className: senderButton({ className })
|
|
51
|
+
};
|
|
52
|
+
return useRender({
|
|
53
|
+
defaultTagName: "button",
|
|
54
|
+
render,
|
|
55
|
+
props: mergeProps(defaultProps, props),
|
|
56
|
+
state: { slot: "message-item-sender-button" }
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function MessageItemSenderBadges({ className, render, ...props }) {
|
|
60
|
+
const { senderBadges } = messageItem();
|
|
61
|
+
const defaultProps = { className: senderBadges({ className }) };
|
|
62
|
+
return useRender({
|
|
63
|
+
defaultTagName: "span",
|
|
64
|
+
render,
|
|
65
|
+
props: mergeProps(defaultProps, props),
|
|
66
|
+
state: { slot: "message-item-sender-badges" }
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function MessageItemMeta({ className, render, ...props }) {
|
|
70
|
+
const { meta } = messageItem();
|
|
71
|
+
const defaultProps = { className: meta({ className }) };
|
|
72
|
+
return useRender({
|
|
73
|
+
defaultTagName: "span",
|
|
74
|
+
render,
|
|
75
|
+
props: mergeProps(defaultProps, props),
|
|
76
|
+
state: { slot: "message-item-meta" }
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The message's time, right after the sender. A `<time>`: pass the moment in
|
|
81
|
+
* `dateTime` (ISO 8601) and the full date and time as its tooltip.
|
|
82
|
+
*/
|
|
83
|
+
function MessageItemTime({ className, id, render, ...props }) {
|
|
84
|
+
const { time } = messageItem();
|
|
85
|
+
const defaultProps = {
|
|
86
|
+
id: useMessageItemLabelId("time", id),
|
|
87
|
+
className: time({ className })
|
|
88
|
+
};
|
|
89
|
+
return useRender({
|
|
90
|
+
defaultTagName: "time",
|
|
91
|
+
render,
|
|
92
|
+
props: mergeProps(defaultProps, props),
|
|
93
|
+
state: { slot: "message-item-time" }
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
function MessageItemInlineStatus({ className, render, ...props }) {
|
|
97
|
+
const { inlineStatus } = messageItem();
|
|
98
|
+
const defaultProps = { className: inlineStatus({ className }) };
|
|
99
|
+
return useRender({
|
|
100
|
+
defaultTagName: "span",
|
|
101
|
+
render,
|
|
102
|
+
props: mergeProps(defaultProps, props),
|
|
103
|
+
state: { slot: "message-item-inline-status" }
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
//#endregion
|
|
107
|
+
export { MessageItemHeader, MessageItemInlineStatus, MessageItemMeta, MessageItemSender, MessageItemSenderBadges, MessageItemSenderButton, MessageItemSenderGroup, MessageItemTime };
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { createContext, isValidElement, useContext, useId, useLayoutEffect, useRef, useState } from "react";
|
|
2
|
+
//#region src/components/message-item/message-item-label.ts
|
|
3
|
+
const MessageItemLabelContext = createContext(null);
|
|
4
|
+
const MessageItemLabelProvider = MessageItemLabelContext.Provider;
|
|
5
|
+
/**
|
|
6
|
+
* The id of a sender or time part, registered with the MessageItem around it.
|
|
7
|
+
* A consumer's own `id` wins and is the one registered. Outside a MessageItem
|
|
8
|
+
* the part gets no id.
|
|
9
|
+
*/
|
|
10
|
+
function useMessageItemLabelId(part, id) {
|
|
11
|
+
const registry = useContext(MessageItemLabelContext);
|
|
12
|
+
const generatedId = useId();
|
|
13
|
+
const resolvedId = id ?? (registry ? generatedId : void 0);
|
|
14
|
+
useLayoutEffect(() => {
|
|
15
|
+
if (!registry || !resolvedId) return void 0;
|
|
16
|
+
return registry.register(part, resolvedId);
|
|
17
|
+
}, [
|
|
18
|
+
registry,
|
|
19
|
+
part,
|
|
20
|
+
resolvedId
|
|
21
|
+
]);
|
|
22
|
+
return resolvedId;
|
|
23
|
+
}
|
|
24
|
+
/** Roles that can't be named: on them the row writes no `aria-labelledby`. */
|
|
25
|
+
const NAMELESS_ROLES = /* @__PURE__ */ new Set([
|
|
26
|
+
"none",
|
|
27
|
+
"presentation",
|
|
28
|
+
"generic"
|
|
29
|
+
]);
|
|
30
|
+
/**
|
|
31
|
+
* The row's side: a stable registry for its parts and a ref for its element.
|
|
32
|
+
* The row writes `role="article"` and `aria-labelledby` itself, and only once
|
|
33
|
+
* something names it: a sender or time part, or the consumer's `aria-label` or
|
|
34
|
+
* `aria-labelledby`. A row with none of them (a receipt card in the text
|
|
35
|
+
* column, say) stays a plain `div`, not an article with no name.
|
|
36
|
+
*
|
|
37
|
+
* A consumer's `role` or `aria-labelledby` is rendered by React and left
|
|
38
|
+
* alone. A consumer's `aria-label`, or a role that takes no name, turns the
|
|
39
|
+
* parts' `aria-labelledby` off, since it would win over the label.
|
|
40
|
+
*/
|
|
41
|
+
function useMessageItemLabel(consumer) {
|
|
42
|
+
const consumerRef = useRef(consumer);
|
|
43
|
+
const [label] = useState(() => {
|
|
44
|
+
const parts = {
|
|
45
|
+
sender: [],
|
|
46
|
+
time: []
|
|
47
|
+
};
|
|
48
|
+
let element = null;
|
|
49
|
+
const write = (name, value) => {
|
|
50
|
+
if (!element) return;
|
|
51
|
+
if (!value) element.removeAttribute(name);
|
|
52
|
+
else if (element.getAttribute(name) !== value) element.setAttribute(name, value);
|
|
53
|
+
};
|
|
54
|
+
const sync = () => {
|
|
55
|
+
const { role, ariaLabel, ariaLabelledBy } = consumerRef.current;
|
|
56
|
+
const ids = [...parts.sender, ...parts.time].join(" ");
|
|
57
|
+
if (role === void 0) write("role", ids !== "" || ariaLabel !== void 0 || ariaLabelledBy !== void 0 ? "article" : "");
|
|
58
|
+
if (ariaLabelledBy === void 0) {
|
|
59
|
+
const nameable = role === void 0 || !NAMELESS_ROLES.has(role);
|
|
60
|
+
write("aria-labelledby", ariaLabel === void 0 && nameable ? ids : "");
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const registry = { register(part, id) {
|
|
64
|
+
parts[part].push(id);
|
|
65
|
+
sync();
|
|
66
|
+
return () => {
|
|
67
|
+
const index = parts[part].indexOf(id);
|
|
68
|
+
if (index !== -1) parts[part].splice(index, 1);
|
|
69
|
+
sync();
|
|
70
|
+
};
|
|
71
|
+
} };
|
|
72
|
+
const ref = (node) => {
|
|
73
|
+
element = node;
|
|
74
|
+
sync();
|
|
75
|
+
};
|
|
76
|
+
return {
|
|
77
|
+
registry,
|
|
78
|
+
ref,
|
|
79
|
+
sync
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
const { role, ariaLabel, ariaLabelledBy } = consumer;
|
|
83
|
+
useLayoutEffect(() => {
|
|
84
|
+
consumerRef.current = {
|
|
85
|
+
role,
|
|
86
|
+
ariaLabel,
|
|
87
|
+
ariaLabelledBy
|
|
88
|
+
};
|
|
89
|
+
label.sync();
|
|
90
|
+
}, [
|
|
91
|
+
role,
|
|
92
|
+
ariaLabel,
|
|
93
|
+
ariaLabelledBy,
|
|
94
|
+
label
|
|
95
|
+
]);
|
|
96
|
+
return label;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The consumer's role and name, from MessageItem's props and, where `render`
|
|
100
|
+
* is an element, from that element's props, which Base UI merges over them.
|
|
101
|
+
* A `render` function's props can't be read: pass them to MessageItem.
|
|
102
|
+
*/
|
|
103
|
+
function readConsumerLabel(props, render) {
|
|
104
|
+
const own = isValidElement(render) ? render.props : {};
|
|
105
|
+
const pick = (key) => key in own ? own[key] : props[key];
|
|
106
|
+
return {
|
|
107
|
+
role: pick("role"),
|
|
108
|
+
ariaLabel: pick("aria-label"),
|
|
109
|
+
ariaLabelledBy: pick("aria-labelledby")
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//#endregion
|
|
113
|
+
export { MessageItemLabelProvider, readConsumerLabel, useMessageItemLabel, useMessageItemLabelId };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { MessageItemVariantProps } from "./message-item.recipe.mjs";
|
|
2
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
3
|
+
//#region src/components/message-item/message-item-root.d.ts
|
|
4
|
+
export type MessageItemProps = useRender.ComponentProps<"div"> & Pick<MessageItemVariantProps, "compact"> & {
|
|
5
|
+
/**
|
|
6
|
+
* The message someone just jumped to: the row shows `info-soft` at once
|
|
7
|
+
* and fades it out by `LOCATED_MS` (design/foundations/states.md#located).
|
|
8
|
+
* Pass `useLocated(request)`, which turns it off after `LOCATED_MS` and
|
|
9
|
+
* restarts it on the next jump; a search match, a checked row or an open
|
|
10
|
+
* popup keeps its own fill instead.
|
|
11
|
+
*/
|
|
12
|
+
located?: boolean;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* One message: an `article` named by its sender and its time
|
|
16
|
+
* (`aria-labelledby` pointing at `MessageItemSender` or
|
|
17
|
+
* `MessageItemSenderButton`, then `MessageItemTime` or
|
|
18
|
+
* `MessageItemContinuationTime`). A row with neither, and no `aria-label` or
|
|
19
|
+
* `aria-labelledby`, is a plain `div`. Pass `role`, `aria-label` or
|
|
20
|
+
* `aria-labelledby` on MessageItem or on a `render` element to override
|
|
21
|
+
* either; a `render` function's props can't be read, so pass them on
|
|
22
|
+
* MessageItem then.
|
|
23
|
+
*/
|
|
24
|
+
export declare function MessageItem({ className, compact, located, render, ...props }: MessageItemProps): import("react").JSX.Element;
|
|
25
|
+
//#endregion
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { MessageItemLabelProvider, readConsumerLabel, useMessageItemLabel } from "./message-item-label.mjs";
|
|
2
|
+
import { messageItem } from "./message-item.recipe.mjs";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { mergeProps } from "@base-ui/react/merge-props";
|
|
5
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
6
|
+
//#region src/components/message-item/message-item-root.tsx
|
|
7
|
+
/**
|
|
8
|
+
* One message: an `article` named by its sender and its time
|
|
9
|
+
* (`aria-labelledby` pointing at `MessageItemSender` or
|
|
10
|
+
* `MessageItemSenderButton`, then `MessageItemTime` or
|
|
11
|
+
* `MessageItemContinuationTime`). A row with neither, and no `aria-label` or
|
|
12
|
+
* `aria-labelledby`, is a plain `div`. Pass `role`, `aria-label` or
|
|
13
|
+
* `aria-labelledby` on MessageItem or on a `render` element to override
|
|
14
|
+
* either; a `render` function's props can't be read, so pass them on
|
|
15
|
+
* MessageItem then.
|
|
16
|
+
*/
|
|
17
|
+
function MessageItem({ className, compact, located = false, render, ...props }) {
|
|
18
|
+
const { root } = messageItem({ compact });
|
|
19
|
+
const label = useMessageItemLabel(readConsumerLabel(props, render));
|
|
20
|
+
const defaultProps = {
|
|
21
|
+
"data-message-item": "",
|
|
22
|
+
"data-compact": compact ? "true" : void 0,
|
|
23
|
+
"data-located": located ? "" : void 0,
|
|
24
|
+
className: root({ className })
|
|
25
|
+
};
|
|
26
|
+
const element = useRender({
|
|
27
|
+
defaultTagName: "div",
|
|
28
|
+
render,
|
|
29
|
+
ref: label.ref,
|
|
30
|
+
props: mergeProps(defaultProps, props),
|
|
31
|
+
state: { slot: "message-item" }
|
|
32
|
+
});
|
|
33
|
+
return /* @__PURE__ */ jsx(MessageItemLabelProvider, {
|
|
34
|
+
value: label.registry,
|
|
35
|
+
children: element
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { MessageItem };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
2
|
+
//#region src/components/message-item/message-item-toolbar.d.ts
|
|
3
|
+
export type MessageItemToolbarProps = useRender.ComponentProps<"div">;
|
|
4
|
+
export declare function MessageItemToolbar({ className, render, ref, ...props }: MessageItemToolbarProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
5
|
+
export type MessageItemToolbarButtonProps = useRender.ComponentProps<"button"> & {
|
|
6
|
+
active?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare function MessageItemToolbarButton({ active, className, render, ...props }: MessageItemToolbarButtonProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
9
|
+
//#endregion
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { messageItem } from "./message-item.recipe.mjs";
|
|
2
|
+
import { mergeProps } from "@base-ui/react/merge-props";
|
|
3
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
4
|
+
//#region src/components/message-item/message-item-toolbar.tsx
|
|
5
|
+
const TOOLBAR_WIDTH = "--mi-toolbar-width";
|
|
6
|
+
/**
|
|
7
|
+
* Five buttons' width (5 × 28px, 4 × 4px apart, 4px from the frame each
|
|
8
|
+
* side): what the row fades until the toolbar has measured itself.
|
|
9
|
+
*/
|
|
10
|
+
const FALLBACK_WIDTH = "164px";
|
|
11
|
+
/**
|
|
12
|
+
* Toolbars watched while their row shows them, each with its row, and the one
|
|
13
|
+
* ResizeObserver that watches them: it exists only while a toolbar shows.
|
|
14
|
+
*/
|
|
15
|
+
const watched = /* @__PURE__ */ new Map();
|
|
16
|
+
let resizeObserver = null;
|
|
17
|
+
function writeWidth(toolbar, row) {
|
|
18
|
+
row.style.setProperty(TOOLBAR_WIDTH, `${toolbar.offsetWidth}px`);
|
|
19
|
+
}
|
|
20
|
+
/** The recipe's has-data-popup-open / data-popup-open on the row. */
|
|
21
|
+
function hasOpenPopup(row) {
|
|
22
|
+
return row.hasAttribute("data-popup-open") || row.querySelector("[data-popup-open]") !== null;
|
|
23
|
+
}
|
|
24
|
+
function resized(entries) {
|
|
25
|
+
for (const entry of entries) {
|
|
26
|
+
const target = entry.target;
|
|
27
|
+
const row = watched.get(target);
|
|
28
|
+
if (row) writeWidth(target, row);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function unwatch(toolbar) {
|
|
32
|
+
if (!watched.delete(toolbar)) return;
|
|
33
|
+
resizeObserver?.unobserve(toolbar);
|
|
34
|
+
if (watched.size > 0) return;
|
|
35
|
+
resizeObserver?.disconnect();
|
|
36
|
+
resizeObserver = null;
|
|
37
|
+
}
|
|
38
|
+
function watch(toolbar, row) {
|
|
39
|
+
if (watched.has(toolbar)) return;
|
|
40
|
+
writeWidth(toolbar, row);
|
|
41
|
+
if (typeof ResizeObserver === "undefined") return;
|
|
42
|
+
for (const [other, otherRow] of watched) if (!otherRow.matches(":hover, :focus-within") && !hasOpenPopup(otherRow)) unwatch(other);
|
|
43
|
+
resizeObserver ??= new ResizeObserver(resized);
|
|
44
|
+
watched.set(toolbar, row);
|
|
45
|
+
resizeObserver.observe(toolbar);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Tells the row how wide the toolbar is (`--mi-toolbar-width` on the row), so
|
|
49
|
+
* the header can fade out its end under the toolbar while it shows: the
|
|
50
|
+
* header keeps no room for the toolbar (message-item.md, "The hover
|
|
51
|
+
* toolbar"), and the toolbar's card only reaches part of the sender line.
|
|
52
|
+
* A toolbar with more or fewer actions covers exactly its own width; nothing
|
|
53
|
+
* on the row moves.
|
|
54
|
+
*
|
|
55
|
+
* Measured when the toolbar is about to show, not when it mounts: every row
|
|
56
|
+
* of a timeline renders a toolbar, and the width matters only on the row the
|
|
57
|
+
* pointer or focus is on. So mounting costs no React state (one commit per
|
|
58
|
+
* row) and no ResizeObserver per row. The row's `pointerenter` and `focusin`
|
|
59
|
+
* write the width in the input event's own task, before the frame that
|
|
60
|
+
* applies the row's :hover / :focus-within styles, so the first frame that
|
|
61
|
+
* shows the toolbar already masks its width; the toolbar is laid out at rest
|
|
62
|
+
* (only its opacity is 0), so its `offsetWidth` is right then. A popup opens
|
|
63
|
+
* from the toolbar only after a hover or a focus, so it finds the width
|
|
64
|
+
* written. While the row shows the toolbar, one ResizeObserver shared by all
|
|
65
|
+
* rows watches it, so a button added while it shows re-measures; it lets go
|
|
66
|
+
* when the pointer and focus have left the row and no popup is open, and is
|
|
67
|
+
* disconnected once no toolbar shows.
|
|
68
|
+
*
|
|
69
|
+
* On attach the row gets five buttons' width (164px) as a fallback: a plain
|
|
70
|
+
* DOM write, no commit and no read, so a show that ever came without a
|
|
71
|
+
* pointerenter or focusin (a row that appears under a resting pointer) fades
|
|
72
|
+
* too much rather than leaving letters beside the card. Rows without a
|
|
73
|
+
* toolbar never get the property, so their header's gradient stays invalid
|
|
74
|
+
* and masks nothing.
|
|
75
|
+
*
|
|
76
|
+
* A stable callback ref with a cleanup (React 19), merged with the caller's
|
|
77
|
+
* ref by `useRender`.
|
|
78
|
+
*/
|
|
79
|
+
function measureWidthOnShow(toolbar) {
|
|
80
|
+
const row = toolbar?.closest("[data-message-item]");
|
|
81
|
+
if (!toolbar || !row) return void 0;
|
|
82
|
+
const show = () => watch(toolbar, row);
|
|
83
|
+
const pointerLeft = () => {
|
|
84
|
+
if (!row.matches(":focus-within") && !hasOpenPopup(row)) unwatch(toolbar);
|
|
85
|
+
};
|
|
86
|
+
const focusLeft = (event) => {
|
|
87
|
+
const next = event.relatedTarget instanceof Node ? event.relatedTarget : null;
|
|
88
|
+
if (row.contains(next) || row.matches(":hover") || hasOpenPopup(row)) return;
|
|
89
|
+
unwatch(toolbar);
|
|
90
|
+
};
|
|
91
|
+
row.style.setProperty(TOOLBAR_WIDTH, FALLBACK_WIDTH);
|
|
92
|
+
row.addEventListener("pointerenter", show);
|
|
93
|
+
row.addEventListener("focusin", show);
|
|
94
|
+
row.addEventListener("pointerleave", pointerLeft);
|
|
95
|
+
row.addEventListener("focusout", focusLeft);
|
|
96
|
+
return () => {
|
|
97
|
+
row.removeEventListener("pointerenter", show);
|
|
98
|
+
row.removeEventListener("focusin", show);
|
|
99
|
+
row.removeEventListener("pointerleave", pointerLeft);
|
|
100
|
+
row.removeEventListener("focusout", focusLeft);
|
|
101
|
+
unwatch(toolbar);
|
|
102
|
+
row.style.removeProperty(TOOLBAR_WIDTH);
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function MessageItemToolbar({ className, render, ref, ...props }) {
|
|
106
|
+
const { toolbar } = messageItem();
|
|
107
|
+
const defaultProps = { className: toolbar({ className }) };
|
|
108
|
+
return useRender({
|
|
109
|
+
defaultTagName: "div",
|
|
110
|
+
render,
|
|
111
|
+
ref: ref ? [ref, measureWidthOnShow] : measureWidthOnShow,
|
|
112
|
+
props: mergeProps(defaultProps, props),
|
|
113
|
+
state: { slot: "message-item-toolbar" }
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
function MessageItemToolbarButton({ active = false, className, render, ...props }) {
|
|
117
|
+
const { toolbarButton } = messageItem();
|
|
118
|
+
const defaultProps = {
|
|
119
|
+
type: "button",
|
|
120
|
+
"data-active": active ? "true" : void 0,
|
|
121
|
+
className: toolbarButton({ className })
|
|
122
|
+
};
|
|
123
|
+
return useRender({
|
|
124
|
+
defaultTagName: "button",
|
|
125
|
+
render,
|
|
126
|
+
props: mergeProps(defaultProps, props),
|
|
127
|
+
state: { slot: "message-item-toolbar-button" }
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
//#endregion
|
|
131
|
+
export { MessageItemToolbar, MessageItemToolbarButton };
|