@botiverse/raft-ui 0.51.0 → 0.52.1
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 +26 -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,194 @@
|
|
|
1
|
+
import { cn } from "../../cn.mjs";
|
|
2
|
+
import { Button } from "../button/button.mjs";
|
|
3
|
+
import { DialogSheetContext, dialogSheet, useDialogSheet } from "./dialog-sheet-context.mjs";
|
|
4
|
+
import { DialogContent } from "./dialog.mjs";
|
|
5
|
+
import { useMobileViewport } from "../../lib/use-mobile-viewport.mjs";
|
|
6
|
+
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
7
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { createPortal } from "react-dom";
|
|
9
|
+
//#region src/components/dialog/dialog-sheet.tsx
|
|
10
|
+
/**
|
|
11
|
+
* DialogContent for a dialog with several fields, a long list or steps. On a
|
|
12
|
+
* desktop and a tablet it is DialogContent, the same DOM and classes. Below
|
|
13
|
+
* 768px it is a sheet: docked to the bottom, 90% of the screen tall, sliding
|
|
14
|
+
* up over its scrim; `DialogHeader` becomes a pushed page's head (× at the
|
|
15
|
+
* start, the title, the `DialogCommit` button at the end), `DialogFooter` is
|
|
16
|
+
* hidden (× is Cancel) and `DialogBody` scrolls on the phone's 16px margin
|
|
17
|
+
* above the home indicator. Base UI keeps Esc, focus and close.
|
|
18
|
+
*/
|
|
19
|
+
function DialogSheetContent({ className, overlay, style, ref, children, ...props }) {
|
|
20
|
+
const phone = useMobileViewport();
|
|
21
|
+
const [commitSlot, setCommitSlot] = useState(null);
|
|
22
|
+
const [bodyEndSlot, setBodyEndSlot] = useState(null);
|
|
23
|
+
const [popup, setPopup] = useState(null);
|
|
24
|
+
const keyboardBox = useSheetKeyboardBox(phone);
|
|
25
|
+
useRevealNewProblems(phone ? popup : null);
|
|
26
|
+
const state = useMemo(() => ({
|
|
27
|
+
sheet: phone,
|
|
28
|
+
commitSlot: phone ? commitSlot : null,
|
|
29
|
+
setCommitSlot,
|
|
30
|
+
bodyEndSlot: phone ? bodyEndSlot : null,
|
|
31
|
+
setBodyEndSlot
|
|
32
|
+
}), [
|
|
33
|
+
phone,
|
|
34
|
+
commitSlot,
|
|
35
|
+
bodyEndSlot
|
|
36
|
+
]);
|
|
37
|
+
const setRef = useCallback((element) => {
|
|
38
|
+
setPopup(element);
|
|
39
|
+
assignRef(ref, element);
|
|
40
|
+
}, [ref]);
|
|
41
|
+
const sheet = dialogSheet();
|
|
42
|
+
const sheetOverlay = useMemo(() => overlay === false ? false : {
|
|
43
|
+
...typeof overlay === "object" ? overlay : null,
|
|
44
|
+
className: cn(dialogSheet().overlay(), typeof overlay === "object" ? overlay.className : ""),
|
|
45
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
46
|
+
"aria-hidden": true,
|
|
47
|
+
className: "absolute inset-0"
|
|
48
|
+
})
|
|
49
|
+
}, [overlay]);
|
|
50
|
+
const sheetStyle = useMemo(() => keyboardBox ? {
|
|
51
|
+
...style,
|
|
52
|
+
...keyboardBox
|
|
53
|
+
} : style, [style, keyboardBox]);
|
|
54
|
+
return /* @__PURE__ */ jsx(DialogContent, {
|
|
55
|
+
...props,
|
|
56
|
+
ref: setRef,
|
|
57
|
+
overlay: phone ? sheetOverlay : overlay,
|
|
58
|
+
className: phone ? cn(className, sheet.content()) : className,
|
|
59
|
+
style: phone ? sheetStyle : style,
|
|
60
|
+
"data-sheet": phone ? "" : void 0,
|
|
61
|
+
children: /* @__PURE__ */ jsx(DialogSheetContext.Provider, {
|
|
62
|
+
value: state,
|
|
63
|
+
children
|
|
64
|
+
})
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function assignRef(ref, value) {
|
|
68
|
+
if (typeof ref === "function") ref(value);
|
|
69
|
+
else if (ref) ref.current = value;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The dialog's one commit button: a `Button`, written where it goes on a
|
|
73
|
+
* desktop (the end of `DialogFooter`). In a `DialogSheetContent` below 768px
|
|
74
|
+
* it is drawn at the end of the sheet's head instead, the same button (color,
|
|
75
|
+
* words, disabled and loading state) at `size="md"`. In a flow of steps, write
|
|
76
|
+
* each step's button as one (Next, then the last step's action).
|
|
77
|
+
*
|
|
78
|
+
* A submit button stays its form's default button in the head: it is tied to
|
|
79
|
+
* the form it was written in by the form's `id` (the `form` attribute), so a
|
|
80
|
+
* click and Enter in a field submit, and neither does while it is disabled.
|
|
81
|
+
* Give that form an `id`, or pass `form`. Without one a click still submits
|
|
82
|
+
* the form, but Enter in a field doesn't.
|
|
83
|
+
*/
|
|
84
|
+
function DialogCommit({ size, form, onClick, ...props }) {
|
|
85
|
+
const { commitSlot } = useDialogSheet();
|
|
86
|
+
const anchorRef = useRef(null);
|
|
87
|
+
const [writtenIn, setWrittenIn] = useState(null);
|
|
88
|
+
useLayoutEffect(() => {
|
|
89
|
+
if (!commitSlot || form) return;
|
|
90
|
+
const found = anchorRef.current?.closest("form") ?? null;
|
|
91
|
+
setWrittenIn(found);
|
|
92
|
+
if (process.env.NODE_ENV === "production" || props.type !== "submit" || found?.id) return;
|
|
93
|
+
console.warn(found ? "raft-ui: a submit DialogCommit is drawn in a phone sheet's head, outside its form, and the form has no id, so Enter in a field doesn't submit it (a click still does). Give the form an id, or pass `form` to DialogCommit." : "raft-ui: a submit DialogCommit in a phone sheet isn't inside a form and has no `form`, so it submits nothing. Pass `form` with the form's id.");
|
|
94
|
+
}, [
|
|
95
|
+
commitSlot,
|
|
96
|
+
form,
|
|
97
|
+
props.type
|
|
98
|
+
]);
|
|
99
|
+
const handleClick = useCallback((event) => {
|
|
100
|
+
onClick?.(event);
|
|
101
|
+
if (!event.defaultPrevented && props.type === "submit" && writtenIn && !writtenIn.id) {
|
|
102
|
+
event.preventDefault();
|
|
103
|
+
writtenIn.requestSubmit();
|
|
104
|
+
}
|
|
105
|
+
}, [
|
|
106
|
+
onClick,
|
|
107
|
+
props.type,
|
|
108
|
+
writtenIn
|
|
109
|
+
]);
|
|
110
|
+
if (!commitSlot) return /* @__PURE__ */ jsx(Button, {
|
|
111
|
+
size,
|
|
112
|
+
form,
|
|
113
|
+
onClick,
|
|
114
|
+
...props
|
|
115
|
+
});
|
|
116
|
+
const linkedForm = form ?? (writtenIn?.id || void 0);
|
|
117
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
|
|
118
|
+
ref: anchorRef,
|
|
119
|
+
hidden: true
|
|
120
|
+
}), createPortal(/* @__PURE__ */ jsx(Button, {
|
|
121
|
+
size: "md",
|
|
122
|
+
form: linkedForm,
|
|
123
|
+
onClick: handleClick,
|
|
124
|
+
...props
|
|
125
|
+
}), commitSlot)] });
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The sheet's box while the on-screen keyboard is up: docked to the top of the
|
|
129
|
+
* keyboard, as tall as the visual viewport allows up to its usual 90% of the
|
|
130
|
+
* window. With the keyboard up the visual viewport is shorter than that, so
|
|
131
|
+
* the sheet fills it: the head stays in view and the body scrolls above the
|
|
132
|
+
* keyboard. `undefined` otherwise (the CSS box).
|
|
133
|
+
*/
|
|
134
|
+
function useSheetKeyboardBox(active) {
|
|
135
|
+
const [box, setBox] = useState(void 0);
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
const viewport = typeof window === "undefined" ? void 0 : window.visualViewport;
|
|
138
|
+
if (!active || !viewport) return;
|
|
139
|
+
const update = () => {
|
|
140
|
+
const focused = document.activeElement;
|
|
141
|
+
const keyboardUp = (focused instanceof HTMLInputElement || focused instanceof HTMLTextAreaElement || focused instanceof HTMLElement && focused.isContentEditable) && window.innerHeight - viewport.height > 100;
|
|
142
|
+
const height = Math.round(Math.min(viewport.height, window.innerHeight * .9));
|
|
143
|
+
const top = Math.round(Math.max(viewport.offsetTop, 0) + viewport.height - height);
|
|
144
|
+
setBox((previous) => {
|
|
145
|
+
if (!keyboardUp) return void 0;
|
|
146
|
+
return previous?.top === `${top}px` && previous?.height === `${height}px` ? previous : {
|
|
147
|
+
top: `${top}px`,
|
|
148
|
+
bottom: "auto",
|
|
149
|
+
height: `${height}px`
|
|
150
|
+
};
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
viewport.addEventListener("resize", update);
|
|
154
|
+
viewport.addEventListener("scroll", update, { passive: true });
|
|
155
|
+
document.addEventListener("focusin", update);
|
|
156
|
+
document.addEventListener("focusout", update);
|
|
157
|
+
return () => {
|
|
158
|
+
viewport.removeEventListener("resize", update);
|
|
159
|
+
viewport.removeEventListener("scroll", update);
|
|
160
|
+
document.removeEventListener("focusin", update);
|
|
161
|
+
document.removeEventListener("focusout", update);
|
|
162
|
+
};
|
|
163
|
+
}, [active]);
|
|
164
|
+
return active ? box : void 0;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* The commit is at the top of a sheet, so an error a failed commit adds near
|
|
168
|
+
* the bottom of a long form would appear out of sight. A problem added after
|
|
169
|
+
* the sheet opens (an alert, or a warning or destructive Banner) is scrolled
|
|
170
|
+
* into view.
|
|
171
|
+
*/
|
|
172
|
+
const PROBLEM_SELECTOR = "[role=alert], [data-slot=banner][data-status=warning], [data-slot=banner][data-status=destructive]";
|
|
173
|
+
function useRevealNewProblems(popup) {
|
|
174
|
+
useEffect(() => {
|
|
175
|
+
if (!popup || typeof MutationObserver === "undefined") return;
|
|
176
|
+
const observer = new MutationObserver((records) => {
|
|
177
|
+
for (const record of records) for (const node of record.addedNodes) {
|
|
178
|
+
if (!(node instanceof Element)) continue;
|
|
179
|
+
const problem = node.matches(PROBLEM_SELECTOR) ? node : node.querySelector(PROBLEM_SELECTOR);
|
|
180
|
+
if (problem) {
|
|
181
|
+
problem.scrollIntoView?.({ block: "nearest" });
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
observer.observe(popup, {
|
|
187
|
+
childList: true,
|
|
188
|
+
subtree: true
|
|
189
|
+
});
|
|
190
|
+
return () => observer.disconnect();
|
|
191
|
+
}, [popup]);
|
|
192
|
+
}
|
|
193
|
+
//#endregion
|
|
194
|
+
export { DialogCommit, DialogSheetContent };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { StyledProps } from "../../lib/styled-props.mjs";
|
|
2
|
+
import { ButtonProps } from "../button/button.mjs";
|
|
3
|
+
import "../button/index.mjs";
|
|
4
|
+
import { PanelActionProps } from "../panel/panel-action.mjs";
|
|
5
|
+
import { Dialog } from "@base-ui/react/dialog";
|
|
6
|
+
import { ComponentPropsWithRef, ReactNode } from "react";
|
|
7
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
8
|
+
//#region src/components/dialog/dialog.d.ts
|
|
9
|
+
export type DialogProps = Dialog.Root.Props;
|
|
10
|
+
declare function Dialog$1({ children, ...props }: DialogProps): import("react").JSX.Element;
|
|
11
|
+
export type DialogTriggerProps = Dialog.Trigger.Props;
|
|
12
|
+
export declare function DialogTrigger(props: DialogTriggerProps): import("react").JSX.Element;
|
|
13
|
+
export type DialogPortalProps = Dialog.Portal.Props;
|
|
14
|
+
export declare function DialogPortal(props: DialogPortalProps): import("react").JSX.Element;
|
|
15
|
+
export type DialogOverlayProps = StyledProps<Dialog.Backdrop.Props> & {
|
|
16
|
+
layer?: 0 | 1;
|
|
17
|
+
};
|
|
18
|
+
export declare function DialogOverlay({ className, layer, ...props }: DialogOverlayProps): import("react").JSX.Element;
|
|
19
|
+
export type DialogContentProps = StyledProps<Dialog.Popup.Props> & {
|
|
20
|
+
portalProps?: DialogPortalProps;
|
|
21
|
+
overlay?: false | DialogOverlayProps;
|
|
22
|
+
size?: "sm" | "md" | "lg" | "wide";
|
|
23
|
+
layer?: 0 | 1;
|
|
24
|
+
};
|
|
25
|
+
export declare function DialogContent({ className, children, portalProps, overlay, size, layer, ...props }: DialogContentProps): import("react").JSX.Element;
|
|
26
|
+
export type DialogCloseProps = Dialog.Close.Props & Pick<ButtonProps, "variant" | "size"> & {
|
|
27
|
+
className?: string;
|
|
28
|
+
children?: ReactNode;
|
|
29
|
+
};
|
|
30
|
+
export declare function DialogClose({ className, variant, size, children, render, "aria-label": ariaLabel, ...props }: DialogCloseProps): import("react").JSX.Element;
|
|
31
|
+
export type DialogSheetBackProps = PanelActionProps;
|
|
32
|
+
/**
|
|
33
|
+
* Back, in a later step of a flow drawn as a phone sheet: it takes the head's
|
|
34
|
+
* start in place of × (stdrc, 2026-10-22). The sheet is a stack of steps, and
|
|
35
|
+
* Back undoes one, as on a pushed page; Esc still closes. Put it in
|
|
36
|
+
* `DialogHeader` beside the `DialogClose`, from the second step on; it draws
|
|
37
|
+
* nothing outside a sheet, where Back stays in the footer. Its icon is
|
|
38
|
+
* `arrow-left`, as every Back (Alignment, "The ends of a header").
|
|
39
|
+
*/
|
|
40
|
+
export declare function DialogSheetBack({ className, children, "aria-label": ariaLabel, ...props }: DialogSheetBackProps): import("react").JSX.Element | null;
|
|
41
|
+
export type DialogHeaderProps = ComponentPropsWithRef<"div"> & {
|
|
42
|
+
/** A pinned bar of a scrolling (`size="wide"`) dialog. */
|
|
43
|
+
bar?: boolean;
|
|
44
|
+
};
|
|
45
|
+
export declare function DialogHeader({ className, bar, children, ...props }: DialogHeaderProps): import("react").JSX.Element;
|
|
46
|
+
export type DialogBodyProps = ComponentPropsWithRef<"div"> & {
|
|
47
|
+
/** A pinned bar of a scrolling (`size="wide"`) dialog. */
|
|
48
|
+
bar?: boolean;
|
|
49
|
+
};
|
|
50
|
+
export declare function DialogBody({ className, bar, children, ...props }: DialogBodyProps): import("react").JSX.Element;
|
|
51
|
+
export type DialogFooterProps = ComponentPropsWithRef<"div"> & {
|
|
52
|
+
/** A pinned bar of a scrolling (`size="wide"`) dialog. */
|
|
53
|
+
bar?: boolean;
|
|
54
|
+
};
|
|
55
|
+
export declare function DialogFooter({ className, bar, hidden, children, ref, ...props }: DialogFooterProps): import("react").JSX.Element;
|
|
56
|
+
export type DialogFooterNoteProps = ComponentPropsWithRef<"p">;
|
|
57
|
+
/**
|
|
58
|
+
* One short line at the start of `DialogFooter` that says what the commit
|
|
59
|
+
* button will do ("You'll be billed $8 per member each month"). Muted footnote
|
|
60
|
+
* text, start-aligned and never cut. Only in a `lg` or `wide` dialog, and at
|
|
61
|
+
* most 40 characters: on a desktop it is one line beside the buttons and never
|
|
62
|
+
* wraps; on a phone it goes above the buttons when they don't fit beside it,
|
|
63
|
+
* and may wrap to 2 lines. In a phone sheet, which has no footer, it moves
|
|
64
|
+
* to the end of the body. Longer copy belongs in the body. A footer holds a note or a `TextLink`,
|
|
65
|
+
* never both.
|
|
66
|
+
*/
|
|
67
|
+
export declare function DialogFooterNote({ className, children, ...props }: DialogFooterNoteProps): import("react").JSX.Element | null;
|
|
68
|
+
export type DialogTitleProps = StyledProps<Dialog.Title.Props>;
|
|
69
|
+
export declare function DialogTitle({ className, ...props }: DialogTitleProps): import("react").JSX.Element;
|
|
70
|
+
export type DialogDescriptionProps = StyledProps<Dialog.Description.Props>;
|
|
71
|
+
export declare function DialogDescription({ className, ...props }: DialogDescriptionProps): import("react").JSX.Element;
|
|
72
|
+
export type DialogSurfaceProps = useRender.ComponentProps<"div">;
|
|
73
|
+
/**
|
|
74
|
+
* The dialog's frame — the popover layer, the dialog radius, the seam ring
|
|
75
|
+
* and the float shadow — for a centred modal whose lifecycle the app owns
|
|
76
|
+
* (its own backdrop, Escape and focus handling). It neither positions nor
|
|
77
|
+
* animates itself: the host centres it, and a centred modal has no motion.
|
|
78
|
+
* DialogContent draws the same frame for a Base UI dialog.
|
|
79
|
+
*/
|
|
80
|
+
export declare function DialogSurface({ className, render, children, ...props }: DialogSurfaceProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
81
|
+
export type DialogNavProps = useRender.ComponentProps<"nav">;
|
|
82
|
+
/** The section list of a wide (`size="wide"`) dialog, inside a `bar` body. */
|
|
83
|
+
export declare function DialogNav({ className, render, ...props }: DialogNavProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
84
|
+
//#endregion
|
|
85
|
+
export { Dialog$1 as Dialog };
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
import { cn } from "../../cn.mjs";
|
|
2
|
+
import { decisionWidth } from "../../lib/decision-width.mjs";
|
|
3
|
+
import { headEdgePull } from "../../lib/head-edges.mjs";
|
|
4
|
+
import { stackedActions, useStackedActions } from "../../lib/stacked-actions.mjs";
|
|
5
|
+
import { tv } from "../../lib/tv.mjs";
|
|
6
|
+
import { useThemeScopeProps } from "../../lib/theme/theme-scope.mjs";
|
|
7
|
+
import { useParentOverlayKind, withOverlayLayer } from "../../lib/overlay-depth.mjs";
|
|
8
|
+
import { Button } from "../button/button.mjs";
|
|
9
|
+
import { DialogSheetHeadContext, DialogSheetReset, dialogSheet, useDialogSheet, useInDialogSheetHead } from "./dialog-sheet-context.mjs";
|
|
10
|
+
import { TextLink } from "../text-link/text-link.mjs";
|
|
11
|
+
import { PanelAction } from "../panel/panel-action.mjs";
|
|
12
|
+
import { Dialog } from "@base-ui/react/dialog";
|
|
13
|
+
import { ArrowLeft, X } from "lucide-react";
|
|
14
|
+
import { Children, createContext, isValidElement, useContext, useEffect } from "react";
|
|
15
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
16
|
+
import { mergeProps } from "@base-ui/react/merge-props";
|
|
17
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
18
|
+
import { createPortal } from "react-dom";
|
|
19
|
+
//#region src/components/dialog/dialog.tsx
|
|
20
|
+
const dialog = tv({
|
|
21
|
+
slots: {
|
|
22
|
+
overlay: ["fixed inset-0 z-50 bg-layer-backdrop"],
|
|
23
|
+
content: [
|
|
24
|
+
"fixed top-1/2 left-1/2 z-50 flex w-[calc(100%-2rem)] -translate-1/2 flex-col",
|
|
25
|
+
"max-h-[calc(100dvh-2rem)] outline-none",
|
|
26
|
+
"overflow-clip rounded-dialog bg-layer-popover text-foreground",
|
|
27
|
+
"shadow-float ring-1 ring-line-seam"
|
|
28
|
+
],
|
|
29
|
+
header: [
|
|
30
|
+
"grid shrink-0 grid-cols-[minmax(0,1fr)_max-content] items-center min-w-0",
|
|
31
|
+
"gap-2 px-5 pt-5",
|
|
32
|
+
headEdgePull
|
|
33
|
+
],
|
|
34
|
+
body: [
|
|
35
|
+
"min-w-0 flex-1 overflow-y-auto",
|
|
36
|
+
"px-5 pt-1.5 pb-5 first:pt-5",
|
|
37
|
+
"font-sans text-subhead text-foreground-muted"
|
|
38
|
+
],
|
|
39
|
+
footer: [
|
|
40
|
+
"flex shrink-0 items-center justify-end",
|
|
41
|
+
...stackedActions,
|
|
42
|
+
"gap-2 px-5 pb-5 first:pt-5 [[data-slot=dialog-header]+&]:pt-5",
|
|
43
|
+
"*:data-[slot=text-link]:text-footnote"
|
|
44
|
+
],
|
|
45
|
+
footerNote: ["m-0 md:me-2 md:flex-1", "text-start font-sans text-footnote text-pretty text-foreground-muted md:whitespace-nowrap"],
|
|
46
|
+
footerActions: [
|
|
47
|
+
"ms-auto flex shrink-0 items-center justify-end gap-2",
|
|
48
|
+
...stackedActions,
|
|
49
|
+
"data-stacked:ms-0 data-stacked:w-full"
|
|
50
|
+
],
|
|
51
|
+
title: ["m-0 min-w-0 text-foreground", "font-sans text-headline font-bold"],
|
|
52
|
+
description: ["m-0", "font-sans text-subhead text-foreground-muted"]
|
|
53
|
+
},
|
|
54
|
+
variants: {
|
|
55
|
+
size: {
|
|
56
|
+
sm: { content: [decisionWidth] },
|
|
57
|
+
md: { content: ["max-w-md"] },
|
|
58
|
+
lg: { content: ["max-w-160"] },
|
|
59
|
+
wide: { content: ["max-w-4xl h-[min(760px,calc(100dvh-2rem))]"] }
|
|
60
|
+
},
|
|
61
|
+
bar: {
|
|
62
|
+
false: {},
|
|
63
|
+
true: {
|
|
64
|
+
header: ["flex h-14 shrink-0 items-center gap-2 border-b px-5 py-0", "border-line-seam pt-0 [&>[data-slot=dialog-close]]:my-0"],
|
|
65
|
+
body: ["flex min-h-0 flex-1 overflow-hidden p-0", "px-0 pt-0 pb-0 first:pt-0 text-foreground"],
|
|
66
|
+
footer: ["shrink-0 border-t px-5 py-3", "border-line-seam pt-3 pb-3 first:pt-3 [[data-slot=dialog-header]+&]:pt-3"]
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
layer: {
|
|
70
|
+
0: {
|
|
71
|
+
overlay: [],
|
|
72
|
+
content: []
|
|
73
|
+
},
|
|
74
|
+
1: {
|
|
75
|
+
overlay: ["z-60"],
|
|
76
|
+
content: ["z-60"]
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
nested: {
|
|
80
|
+
false: {},
|
|
81
|
+
true: { overlay: ["bg-layer-backdrop-nested"] }
|
|
82
|
+
},
|
|
83
|
+
start: {
|
|
84
|
+
false: {},
|
|
85
|
+
true: { footer: ["flex-wrap justify-between"] }
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
defaultVariants: {
|
|
89
|
+
size: "md",
|
|
90
|
+
bar: false
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
function Dialog$1({ children, ...props }) {
|
|
94
|
+
return /* @__PURE__ */ jsx(Dialog.Root, {
|
|
95
|
+
"data-slot": "dialog",
|
|
96
|
+
...props,
|
|
97
|
+
children: withOverlayLayer("dialog", props.modal !== false, children)
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function DialogTrigger(props) {
|
|
101
|
+
return /* @__PURE__ */ jsx(Dialog.Trigger, {
|
|
102
|
+
"data-slot": "dialog-trigger",
|
|
103
|
+
...props
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
function DialogPortal(props) {
|
|
107
|
+
return /* @__PURE__ */ jsx(Dialog.Portal, {
|
|
108
|
+
"data-slot": "dialog-portal",
|
|
109
|
+
...useThemeScopeProps(props)
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
function DialogOverlay({ className, layer, ...props }) {
|
|
113
|
+
const nested = useParentOverlayKind() != null;
|
|
114
|
+
const { overlay } = dialog({
|
|
115
|
+
layer,
|
|
116
|
+
nested
|
|
117
|
+
});
|
|
118
|
+
return /* @__PURE__ */ jsx(Dialog.Backdrop, {
|
|
119
|
+
"data-slot": "dialog-overlay",
|
|
120
|
+
"data-nested": nested ? "" : void 0,
|
|
121
|
+
forceRender: true,
|
|
122
|
+
className: overlay({ className }),
|
|
123
|
+
...props
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
const DialogSizeContext = createContext(void 0);
|
|
127
|
+
function DialogContent({ className, children, portalProps, overlay, size, layer, ...props }) {
|
|
128
|
+
const { content } = dialog({
|
|
129
|
+
size,
|
|
130
|
+
layer
|
|
131
|
+
});
|
|
132
|
+
const overlayProps = typeof overlay === "object" ? overlay : {};
|
|
133
|
+
return /* @__PURE__ */ jsxs(DialogPortal, {
|
|
134
|
+
...portalProps,
|
|
135
|
+
children: [overlay === false ? null : /* @__PURE__ */ jsx(DialogOverlay, {
|
|
136
|
+
layer,
|
|
137
|
+
...overlayProps
|
|
138
|
+
}), /* @__PURE__ */ jsx(Dialog.Popup, {
|
|
139
|
+
"data-slot": "dialog-content",
|
|
140
|
+
className: content({ className }),
|
|
141
|
+
...props,
|
|
142
|
+
children: /* @__PURE__ */ jsx(DialogSizeContext.Provider, {
|
|
143
|
+
value: size ?? (/(^|\s)max-w-/.test(className ?? "") ? void 0 : "md"),
|
|
144
|
+
children: /* @__PURE__ */ jsx(DialogSheetReset, { children })
|
|
145
|
+
})
|
|
146
|
+
})]
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
function DialogClose({ className, variant, size, children, render, "aria-label": ariaLabel, ...props }) {
|
|
150
|
+
const inSheetHead = useInDialogSheetHead();
|
|
151
|
+
if (render) return /* @__PURE__ */ jsx(Dialog.Close, {
|
|
152
|
+
"data-slot": "dialog-close",
|
|
153
|
+
render,
|
|
154
|
+
"aria-label": ariaLabel,
|
|
155
|
+
...props,
|
|
156
|
+
children
|
|
157
|
+
});
|
|
158
|
+
if (inSheetHead) return /* @__PURE__ */ jsx(Dialog.Close, {
|
|
159
|
+
"data-slot": "dialog-close",
|
|
160
|
+
render: /* @__PURE__ */ jsx(PanelAction, {
|
|
161
|
+
"aria-label": ariaLabel ?? "Close",
|
|
162
|
+
className
|
|
163
|
+
}),
|
|
164
|
+
...props,
|
|
165
|
+
children: children ?? /* @__PURE__ */ jsx(X, {})
|
|
166
|
+
});
|
|
167
|
+
return /* @__PURE__ */ jsx(Dialog.Close, {
|
|
168
|
+
"data-slot": "dialog-close",
|
|
169
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
170
|
+
variant: variant ?? "ghost",
|
|
171
|
+
size: size ?? "icon-md",
|
|
172
|
+
"aria-label": ariaLabel ?? "Close",
|
|
173
|
+
className: cn("-my-1.5", className)
|
|
174
|
+
}),
|
|
175
|
+
...props,
|
|
176
|
+
children: children ?? /* @__PURE__ */ jsx(X, { className: "size-4.5" })
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Back, in a later step of a flow drawn as a phone sheet: it takes the head's
|
|
181
|
+
* start in place of × (stdrc, 2026-10-22). The sheet is a stack of steps, and
|
|
182
|
+
* Back undoes one, as on a pushed page; Esc still closes. Put it in
|
|
183
|
+
* `DialogHeader` beside the `DialogClose`, from the second step on; it draws
|
|
184
|
+
* nothing outside a sheet, where Back stays in the footer. Its icon is
|
|
185
|
+
* `arrow-left`, as every Back (Alignment, "The ends of a header").
|
|
186
|
+
*/
|
|
187
|
+
function DialogSheetBack({ className, children, "aria-label": ariaLabel, ...props }) {
|
|
188
|
+
if (!useInDialogSheetHead()) return null;
|
|
189
|
+
return /* @__PURE__ */ jsx(PanelAction, {
|
|
190
|
+
activateOnTouchEnd: true,
|
|
191
|
+
"data-slot": "dialog-sheet-back",
|
|
192
|
+
"aria-label": ariaLabel ?? "Back",
|
|
193
|
+
className,
|
|
194
|
+
...props,
|
|
195
|
+
children: children ?? /* @__PURE__ */ jsx(ArrowLeft, {})
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
function DialogHeader({ className, bar = false, children, ...props }) {
|
|
199
|
+
const { sheet, setCommitSlot } = useDialogSheet();
|
|
200
|
+
const items = sheet ? Children.toArray(children) : [];
|
|
201
|
+
const backs = items.filter((item) => isValidElement(item) && item.type === DialogSheetBack);
|
|
202
|
+
const closes = items.filter((item) => isValidElement(item) && item.type === DialogClose);
|
|
203
|
+
const missingLeading = sheet && backs.length === 0 && closes.length === 0;
|
|
204
|
+
useEffect(() => {
|
|
205
|
+
if (process.env.NODE_ENV === "production" || !missingLeading) return;
|
|
206
|
+
console.warn("raft-ui: a DialogHeader drawn as a phone sheet has no DialogClose (or DialogSheetBack) as a direct child, so the sheet has no × at the start of its head. Put DialogClose directly in DialogHeader, not inside a Tooltip, a Fragment or a component of your own.");
|
|
207
|
+
}, [missingLeading]);
|
|
208
|
+
if (sheet) {
|
|
209
|
+
const rest = items.filter((item) => !backs.includes(item) && !closes.includes(item));
|
|
210
|
+
const head = dialogSheet();
|
|
211
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
212
|
+
"data-slot": "dialog-header",
|
|
213
|
+
"data-sheet": "",
|
|
214
|
+
className: dialog({ bar: false }).header({ className: cn(head.header(), className) }),
|
|
215
|
+
...props,
|
|
216
|
+
children: [/* @__PURE__ */ jsxs(DialogSheetHeadContext.Provider, {
|
|
217
|
+
value: true,
|
|
218
|
+
children: [backs.length > 0 ? backs : closes, rest]
|
|
219
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
220
|
+
ref: setCommitSlot,
|
|
221
|
+
"data-slot": "dialog-commit-slot",
|
|
222
|
+
className: head.commitSlot()
|
|
223
|
+
})]
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
const { header } = dialog({ bar });
|
|
227
|
+
return /* @__PURE__ */ jsx("div", {
|
|
228
|
+
"data-slot": "dialog-header",
|
|
229
|
+
className: header({ className }),
|
|
230
|
+
...props,
|
|
231
|
+
children
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
function DialogBody({ className, bar = false, children, ...props }) {
|
|
235
|
+
const { sheet, setBodyEndSlot } = useDialogSheet();
|
|
236
|
+
const { body } = dialog({ bar });
|
|
237
|
+
const sheetBody = sheet ? cn(bar && dialogSheet().barBody(), dialogSheet().body()) : void 0;
|
|
238
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
239
|
+
"data-slot": "dialog-body",
|
|
240
|
+
className: body({ className: sheetBody ? cn(sheetBody, className) : className }),
|
|
241
|
+
...props,
|
|
242
|
+
children: [children, sheet ? /* @__PURE__ */ jsx("div", {
|
|
243
|
+
ref: setBodyEndSlot,
|
|
244
|
+
"data-slot": "dialog-sheet-body-end",
|
|
245
|
+
className: dialogSheet().bodyEnd()
|
|
246
|
+
}) : null]
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
function DialogFooter({ className, bar = false, hidden, children, ref, ...props }) {
|
|
250
|
+
const { sheet, bodyEndSlot } = useDialogSheet();
|
|
251
|
+
const items = Children.toArray(children);
|
|
252
|
+
const start = items.find((item) => isValidElement(item) && item.type === DialogFooterNote && hasNoteContent(item.props.children)) ?? (isValidElement(items[0]) && items[0].type === TextLink ? items[0] : void 0);
|
|
253
|
+
const [stacked, rowRef] = useStackedActions(start == null ? ref : void 0, start != null);
|
|
254
|
+
const { footer, footerActions } = dialog({
|
|
255
|
+
bar,
|
|
256
|
+
start: start != null
|
|
257
|
+
});
|
|
258
|
+
const stackedProps = stacked ? { "data-stacked": "" } : {};
|
|
259
|
+
if (start == null) return /* @__PURE__ */ jsx("div", {
|
|
260
|
+
"data-slot": "dialog-footer",
|
|
261
|
+
ref: rowRef,
|
|
262
|
+
className: footer({ className }),
|
|
263
|
+
hidden: sheet || hidden,
|
|
264
|
+
...stackedProps,
|
|
265
|
+
...props,
|
|
266
|
+
children
|
|
267
|
+
});
|
|
268
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [sheet && bodyEndSlot ? createPortal(start, bodyEndSlot) : null, /* @__PURE__ */ jsxs("div", {
|
|
269
|
+
"data-slot": "dialog-footer",
|
|
270
|
+
ref,
|
|
271
|
+
className: footer({ className }),
|
|
272
|
+
hidden: sheet || hidden,
|
|
273
|
+
...props,
|
|
274
|
+
children: [sheet ? null : start, /* @__PURE__ */ jsx("div", {
|
|
275
|
+
"data-slot": "dialog-footer-actions",
|
|
276
|
+
ref: rowRef,
|
|
277
|
+
className: footerActions(),
|
|
278
|
+
...stackedProps,
|
|
279
|
+
children: items.filter((item) => item !== start)
|
|
280
|
+
})]
|
|
281
|
+
})] });
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Whether a note has anything to show: not only null, false or "", but also
|
|
285
|
+
* whitespace and an empty array (`{items.map(...)}` of nothing). Numbers,
|
|
286
|
+
* 0 included, and elements count.
|
|
287
|
+
*/
|
|
288
|
+
function hasNoteContent(children) {
|
|
289
|
+
return Children.toArray(children).some((child) => typeof child !== "string" || child.trim() !== "");
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* One short line at the start of `DialogFooter` that says what the commit
|
|
293
|
+
* button will do ("You'll be billed $8 per member each month"). Muted footnote
|
|
294
|
+
* text, start-aligned and never cut. Only in a `lg` or `wide` dialog, and at
|
|
295
|
+
* most 40 characters: on a desktop it is one line beside the buttons and never
|
|
296
|
+
* wraps; on a phone it goes above the buttons when they don't fit beside it,
|
|
297
|
+
* and may wrap to 2 lines. In a phone sheet, which has no footer, it moves
|
|
298
|
+
* to the end of the body. Longer copy belongs in the body. A footer holds a note or a `TextLink`,
|
|
299
|
+
* never both.
|
|
300
|
+
*/
|
|
301
|
+
function DialogFooterNote({ className, children, ...props }) {
|
|
302
|
+
const { footerNote } = dialog();
|
|
303
|
+
const size = useContext(DialogSizeContext);
|
|
304
|
+
useEffect(() => {
|
|
305
|
+
if (process.env.NODE_ENV === "production") return;
|
|
306
|
+
if (size === "sm" || size === "md") console.warn(`raft-ui: a DialogFooterNote is in a size="${size}" dialog. A footer note fits beside the buttons only in a size="lg" or size="wide" dialog; put the sentence in DialogBody instead.`);
|
|
307
|
+
}, [size]);
|
|
308
|
+
if (!hasNoteContent(children)) return null;
|
|
309
|
+
return /* @__PURE__ */ jsx("p", {
|
|
310
|
+
"data-slot": "dialog-footer-note",
|
|
311
|
+
className: footerNote({ className }),
|
|
312
|
+
...props,
|
|
313
|
+
children
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
function DialogTitle({ className, ...props }) {
|
|
317
|
+
const inSheetHead = useInDialogSheetHead();
|
|
318
|
+
const { title } = dialog();
|
|
319
|
+
const classes = inSheetHead ? cn(dialogSheet().title(), className) : className;
|
|
320
|
+
return /* @__PURE__ */ jsx(Dialog.Title, {
|
|
321
|
+
"data-slot": "dialog-title",
|
|
322
|
+
className: title({ className: classes }),
|
|
323
|
+
...props
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
function DialogDescription({ className, ...props }) {
|
|
327
|
+
const { description } = dialog();
|
|
328
|
+
return /* @__PURE__ */ jsx(Dialog.Description, {
|
|
329
|
+
"data-slot": "dialog-description",
|
|
330
|
+
className: description({ className }),
|
|
331
|
+
...props
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
const dialogSurface = tv({ slots: { root: [
|
|
335
|
+
"flex min-w-0 flex-col outline-none",
|
|
336
|
+
"overflow-clip rounded-dialog bg-layer-popover text-foreground",
|
|
337
|
+
"shadow-float ring-1 ring-line-seam"
|
|
338
|
+
] } });
|
|
339
|
+
/**
|
|
340
|
+
* The dialog's frame — the popover layer, the dialog radius, the seam ring
|
|
341
|
+
* and the float shadow — for a centred modal whose lifecycle the app owns
|
|
342
|
+
* (its own backdrop, Escape and focus handling). It neither positions nor
|
|
343
|
+
* animates itself: the host centres it, and a centred modal has no motion.
|
|
344
|
+
* DialogContent draws the same frame for a Base UI dialog.
|
|
345
|
+
*/
|
|
346
|
+
function DialogSurface({ className, render, children, ...props }) {
|
|
347
|
+
const { root } = dialogSurface();
|
|
348
|
+
return useRender({
|
|
349
|
+
defaultTagName: "div",
|
|
350
|
+
render,
|
|
351
|
+
props: mergeProps({
|
|
352
|
+
"data-slot": "dialog-surface",
|
|
353
|
+
className: root({ className })
|
|
354
|
+
}, props, { children: /* @__PURE__ */ jsx(DialogSheetReset, { children }) })
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
const dialogNav = tv({ slots: { root: ["flex shrink-0 flex-col overflow-y-auto", "w-52 gap-0.5 border-r border-line-seam py-2 max-md:hidden"] } });
|
|
358
|
+
/** The section list of a wide (`size="wide"`) dialog, inside a `bar` body. */
|
|
359
|
+
function DialogNav({ className, render, ...props }) {
|
|
360
|
+
const { root } = dialogNav();
|
|
361
|
+
return useRender({
|
|
362
|
+
defaultTagName: "nav",
|
|
363
|
+
render,
|
|
364
|
+
props: mergeProps({
|
|
365
|
+
"data-slot": "dialog-nav",
|
|
366
|
+
className: root({ className })
|
|
367
|
+
}, props)
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
//#endregion
|
|
371
|
+
export { Dialog$1 as Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogFooterNote, DialogHeader, DialogNav, DialogOverlay, DialogPortal, DialogSheetBack, DialogSurface, DialogTitle, DialogTrigger };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Dialog, DialogBody, DialogBodyProps, DialogClose, DialogCloseProps, DialogContent, DialogContentProps, DialogDescription, DialogDescriptionProps, DialogFooter, DialogFooterNote, DialogFooterNoteProps, DialogFooterProps, DialogHeader, DialogHeaderProps, DialogNav, DialogNavProps, DialogOverlay, DialogOverlayProps, DialogPortal, DialogPortalProps, DialogProps, DialogSheetBack, DialogSheetBackProps, DialogSurface, DialogSurfaceProps, DialogTitle, DialogTitleProps, DialogTrigger, DialogTriggerProps } from "./dialog.mjs";
|
|
2
|
+
import { DialogCommit, DialogCommitProps, DialogSheetContent, DialogSheetContentProps } from "./dialog-sheet.mjs";
|
|
3
|
+
export { Dialog, DialogBody, type DialogBodyProps, DialogClose, type DialogCloseProps, DialogCommit, type DialogCommitProps, DialogContent, type DialogContentProps, DialogDescription, type DialogDescriptionProps, DialogFooter, DialogFooterNote, type DialogFooterNoteProps, type DialogFooterProps, DialogHeader, type DialogHeaderProps, DialogNav, type DialogNavProps, DialogOverlay, type DialogOverlayProps, DialogPortal, type DialogPortalProps, type DialogProps, DialogSheetBack, type DialogSheetBackProps, DialogSheetContent, type DialogSheetContentProps, DialogSurface, type DialogSurfaceProps, DialogTitle, type DialogTitleProps, DialogTrigger, type DialogTriggerProps };
|