@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,59 @@
|
|
|
1
|
+
import { createContext, useContext, useMemo } from "react";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
//#region src/lib/overlay-depth.tsx
|
|
4
|
+
const OverlayStackContext = createContext([]);
|
|
5
|
+
/**
|
|
6
|
+
* Tells everything under it that a modal surface is open, so a raft-ui
|
|
7
|
+
* Dialog, AlertDialog or Drawer opened from inside draws the lighter nested
|
|
8
|
+
* scrim (design/foundations/elevation.md#stacked-overlays). raft-ui's own
|
|
9
|
+
* roots add one by themselves; an app's own modal (its own backdrop, Esc and
|
|
10
|
+
* focus) wraps its scrim and its content in one to join the stack, and reads
|
|
11
|
+
* `useParentOverlayKind` inside it to pick its own scrim. Modal overlays only:
|
|
12
|
+
* a non-modal one passes `modal={false}`, adds nothing, and must not call
|
|
13
|
+
* `useParentOverlayKind` (it would read the layer below as its own).
|
|
14
|
+
*/
|
|
15
|
+
function OverlayLayerProvider({ kind, modal, children }) {
|
|
16
|
+
const stack = useContext(OverlayStackContext);
|
|
17
|
+
const value = useMemo(() => modal ? [...stack, kind] : stack, [
|
|
18
|
+
stack,
|
|
19
|
+
kind,
|
|
20
|
+
modal
|
|
21
|
+
]);
|
|
22
|
+
return /* @__PURE__ */ jsx(OverlayStackContext.Provider, {
|
|
23
|
+
value,
|
|
24
|
+
children
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The modal surface this overlay's own surface was opened from, or null when
|
|
29
|
+
* it is the first. Call it inside the surface's own `OverlayLayerProvider`
|
|
30
|
+
* (for raft-ui's overlays, inside their root): the last entry is the surface
|
|
31
|
+
* itself and the one before it is its parent. Not null means the surface is
|
|
32
|
+
* stacked over another and draws `layer-backdrop-nested` instead of
|
|
33
|
+
* `layer-backdrop`. Modal overlays only: under `modal={false}` nothing is
|
|
34
|
+
* added, so the last entry is the parent and this returns the wrong layer. It reads React context, so it sees the surfaces whose
|
|
35
|
+
* tree this one is rendered in, portals included; one opened from outside
|
|
36
|
+
* that tree is not stacked on it here.
|
|
37
|
+
*/
|
|
38
|
+
function useParentOverlayKind() {
|
|
39
|
+
const stack = useContext(OverlayStackContext);
|
|
40
|
+
return stack.length >= 2 ? stack[stack.length - 2] : null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Wraps a dialog or drawer root's children in its layer. Base UI lets those
|
|
44
|
+
* children be a render function (`({ payload }) => …`), so keep that shape.
|
|
45
|
+
*/
|
|
46
|
+
function withOverlayLayer(kind, modal, children) {
|
|
47
|
+
if (typeof children === "function") return (...args) => /* @__PURE__ */ jsx(OverlayLayerProvider, {
|
|
48
|
+
kind,
|
|
49
|
+
modal,
|
|
50
|
+
children: children(...args)
|
|
51
|
+
});
|
|
52
|
+
return /* @__PURE__ */ jsx(OverlayLayerProvider, {
|
|
53
|
+
kind,
|
|
54
|
+
modal,
|
|
55
|
+
children
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
export { OverlayLayerProvider, useParentOverlayKind, withOverlayLayer };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useSyncExternalStore } from "react";
|
|
2
|
+
//#region src/lib/phone-media.ts
|
|
3
|
+
/**
|
|
4
|
+
* A phone: a touch screen narrower than the desktop layout. The complement, on
|
|
5
|
+
* both axes, of the desktop query `(width >= 48rem) and (pointer: fine)`
|
|
6
|
+
* (design/foundations/spacing.md): a narrow window with a mouse keeps the
|
|
7
|
+
* desktop behaviour, and so does a tablet used by touch, which is wide.
|
|
8
|
+
*/
|
|
9
|
+
const PHONE_MEDIA_QUERY = "(width < 48rem) and (pointer: coarse)";
|
|
10
|
+
function subscribe(onStoreChange) {
|
|
11
|
+
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return () => void 0;
|
|
12
|
+
const media = window.matchMedia(PHONE_MEDIA_QUERY);
|
|
13
|
+
media.addEventListener("change", onStoreChange);
|
|
14
|
+
return () => media.removeEventListener("change", onStoreChange);
|
|
15
|
+
}
|
|
16
|
+
function getSnapshot() {
|
|
17
|
+
return typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(width < 48rem) and (pointer: coarse)").matches;
|
|
18
|
+
}
|
|
19
|
+
/** Whether `PHONE_MEDIA_QUERY` matches. `false` on the server and before hydration. */
|
|
20
|
+
function usePhoneMedia() {
|
|
21
|
+
return useSyncExternalStore(subscribe, getSnapshot, () => false);
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { PHONE_MEDIA_QUERY, usePhoneMedia };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/lib/presence.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* The five status lights of the design system. Each colour is a fixed
|
|
4
|
+
* meaning: online green, busy (an agent at work) yellow, error orange,
|
|
5
|
+
* offline stone, an external agent cyan. One map, read by Status and by the
|
|
6
|
+
* avatar's dot through the same `--status-color`.
|
|
7
|
+
*/
|
|
8
|
+
export declare const PRESENCE_COLOR: {
|
|
9
|
+
readonly online: "[--status-color:var(--presence-online)]";
|
|
10
|
+
readonly busy: "[--status-color:var(--presence-busy)]";
|
|
11
|
+
readonly error: "[--status-color:var(--presence-error)]";
|
|
12
|
+
readonly offline: "[--status-color:var(--presence-offline)]";
|
|
13
|
+
readonly external: "[--status-color:var(--presence-external)]";
|
|
14
|
+
};
|
|
15
|
+
export type Presence = keyof typeof PRESENCE_COLOR;
|
|
16
|
+
//#endregion
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/lib/presence.ts
|
|
2
|
+
/**
|
|
3
|
+
* The five status lights of the design system. Each colour is a fixed
|
|
4
|
+
* meaning: online green, busy (an agent at work) yellow, error orange,
|
|
5
|
+
* offline stone, an external agent cyan. One map, read by Status and by the
|
|
6
|
+
* avatar's dot through the same `--status-color`.
|
|
7
|
+
*/
|
|
8
|
+
const PRESENCE_COLOR = {
|
|
9
|
+
online: "[--status-color:var(--presence-online)]",
|
|
10
|
+
busy: "[--status-color:var(--presence-busy)]",
|
|
11
|
+
error: "[--status-color:var(--presence-error)]",
|
|
12
|
+
offline: "[--status-color:var(--presence-offline)]",
|
|
13
|
+
external: "[--status-color:var(--presence-external)]"
|
|
14
|
+
};
|
|
15
|
+
//#endregion
|
|
16
|
+
export { PRESENCE_COLOR };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/lib/row-tone.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* What a place in a list is to you, shared by every row that lists places
|
|
4
|
+
* (ListRow, SidebarItem): something waits for you (`unread`), you muted it
|
|
5
|
+
* (`muted`), or you are not in it: offline or not joined (`away`).
|
|
6
|
+
*/
|
|
7
|
+
export type RowTone = "default" | "unread" | "muted" | "away";
|
|
8
|
+
//#endregion
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/lib/search-hit.ts
|
|
2
|
+
/**
|
|
3
|
+
* The DS search hit: what you looked for sits on a `you` fill, yellow in every
|
|
4
|
+
* theme, with ink type in the surrounding font and weight. No edge and no bold
|
|
5
|
+
* (stdrc, 2026-10-24): a ring made a hit look like one more badge beside a
|
|
6
|
+
* row's "DM" or "Channel" tag and cut the descenders, and it is the mention of
|
|
7
|
+
* you that keeps the ring. 1px of fill above and below (`py-px`) keeps
|
|
8
|
+
* the descenders inside it. Every place that marks a hit (message text,
|
|
9
|
+
* Markdown, search results) uses this; `[font:inherit]` drops the browser's
|
|
10
|
+
* mark styling.
|
|
11
|
+
*/
|
|
12
|
+
const searchHit = [
|
|
13
|
+
"[font:inherit]",
|
|
14
|
+
"rounded-sticker bg-you px-[2px] py-px box-decoration-clone",
|
|
15
|
+
"text-sticker-ink"
|
|
16
|
+
];
|
|
17
|
+
//#endregion
|
|
18
|
+
export { searchHit };
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { useCallback, useLayoutEffect, useState } from "react";
|
|
2
|
+
//#region src/lib/stacked-actions.ts
|
|
3
|
+
/**
|
|
4
|
+
* The row of buttons while `data-stacked` is set: a full-width column. A
|
|
5
|
+
* button alone in a wrapper (a tooltip's trigger) fills the width too.
|
|
6
|
+
*
|
|
7
|
+
* Until the row has been measured and painted once (`data-measured`), its
|
|
8
|
+
* buttons have no transition. The first measure lands after the buttons were
|
|
9
|
+
* styled as a row, so a stacked ghost Cancel would otherwise fade its frame in
|
|
10
|
+
* as the dialog opens; the first painted frame must already be the stack.
|
|
11
|
+
*/
|
|
12
|
+
const stackedActions = [
|
|
13
|
+
"data-stacked:flex-col-reverse",
|
|
14
|
+
"data-stacked:items-stretch",
|
|
15
|
+
"data-stacked:*:data-[slot=button]:w-full data-stacked:[&>*>[data-slot=button]:only-child]:w-full",
|
|
16
|
+
"not-data-measured:**:data-[slot=button]:transition-none"
|
|
17
|
+
];
|
|
18
|
+
function assignRef(ref, value) {
|
|
19
|
+
if (typeof ref === "function") ref(value);
|
|
20
|
+
else if (ref) ref.current = value;
|
|
21
|
+
}
|
|
22
|
+
function contentWidth(element) {
|
|
23
|
+
const style = getComputedStyle(element);
|
|
24
|
+
return element.getBoundingClientRect().width - (Number.parseFloat(style.paddingLeft) || 0) - (Number.parseFloat(style.paddingRight) || 0) - (Number.parseFloat(style.borderLeftWidth) || 0) - (Number.parseFloat(style.borderRightWidth) || 0);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Whether a row of buttons must stack: laid out as a row (`data-stacked` off
|
|
28
|
+
* for the measure and put back at once, inside one frame, so nothing is
|
|
29
|
+
* painted in between and the layouts never flip back and forth), its children
|
|
30
|
+
* run past the content box of `frame`. Children that may shrink (a label that
|
|
31
|
+
* truncates or wraps) shrink first, so only content that can't, the buttons,
|
|
32
|
+
* counts as not fitting. Undefined while the frame is hidden (a sheet hides
|
|
33
|
+
* its footer), so nothing is decided then.
|
|
34
|
+
*/
|
|
35
|
+
function rowOverflows(row, frame) {
|
|
36
|
+
if (!(frame.getBoundingClientRect().width > 0)) return void 0;
|
|
37
|
+
const wasStacked = row.hasAttribute("data-stacked");
|
|
38
|
+
if (wasStacked) row.removeAttribute("data-stacked");
|
|
39
|
+
const available = contentWidth(frame);
|
|
40
|
+
let start = Number.POSITIVE_INFINITY;
|
|
41
|
+
let end = Number.NEGATIVE_INFINITY;
|
|
42
|
+
for (const child of row.children) {
|
|
43
|
+
const box = child.getBoundingClientRect();
|
|
44
|
+
if (box.width === 0 && box.height === 0) continue;
|
|
45
|
+
const style = getComputedStyle(child);
|
|
46
|
+
start = Math.min(start, box.left - (Number.parseFloat(style.marginLeft) || 0));
|
|
47
|
+
end = Math.max(end, box.right + (Number.parseFloat(style.marginRight) || 0));
|
|
48
|
+
}
|
|
49
|
+
if (wasStacked) row.setAttribute("data-stacked", "");
|
|
50
|
+
return end - start > available + .5;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Sets `data-stacked` on a footer's row of buttons when it doesn't fit on one
|
|
54
|
+
* line (rowOverflows). Pass the returned ref to the row. It must fit its own
|
|
55
|
+
* content box, or with `inParent` (the group of buttons beside a note) its
|
|
56
|
+
* parent's. As BannerAction's `data-wrap`, it measures again when the footer
|
|
57
|
+
* resizes, the buttons change or a web font arrives.
|
|
58
|
+
*/
|
|
59
|
+
function useStackedActions(ref, inParent = false) {
|
|
60
|
+
const [row, setRow] = useState(null);
|
|
61
|
+
const [stacked, setStacked] = useState(false);
|
|
62
|
+
const callbackRef = useCallback((node) => {
|
|
63
|
+
setRow(node);
|
|
64
|
+
assignRef(ref, node);
|
|
65
|
+
}, [ref]);
|
|
66
|
+
useLayoutEffect(() => {
|
|
67
|
+
const frame = inParent ? row?.parentElement : row;
|
|
68
|
+
if (!row || !frame || typeof ResizeObserver === "undefined") return;
|
|
69
|
+
let raf = 0;
|
|
70
|
+
let settle = 0;
|
|
71
|
+
const measure = () => {
|
|
72
|
+
const overflows = rowOverflows(row, frame);
|
|
73
|
+
if (overflows === void 0) return;
|
|
74
|
+
setStacked(overflows);
|
|
75
|
+
if (!settle && !row.hasAttribute("data-measured")) settle = requestAnimationFrame(() => {
|
|
76
|
+
settle = requestAnimationFrame(() => row.setAttribute("data-measured", ""));
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
const schedule = () => {
|
|
80
|
+
cancelAnimationFrame(raf);
|
|
81
|
+
raf = requestAnimationFrame(measure);
|
|
82
|
+
};
|
|
83
|
+
measure();
|
|
84
|
+
const resize = new ResizeObserver(schedule);
|
|
85
|
+
resize.observe(frame);
|
|
86
|
+
resize.observe(row);
|
|
87
|
+
for (const child of row.children) resize.observe(child);
|
|
88
|
+
const mutation = new MutationObserver(schedule);
|
|
89
|
+
mutation.observe(row, {
|
|
90
|
+
childList: true,
|
|
91
|
+
characterData: true,
|
|
92
|
+
subtree: true
|
|
93
|
+
});
|
|
94
|
+
const fonts = typeof document.fonts === "undefined" ? void 0 : document.fonts;
|
|
95
|
+
let live = true;
|
|
96
|
+
fonts?.ready.then(() => {
|
|
97
|
+
if (live) schedule();
|
|
98
|
+
});
|
|
99
|
+
fonts?.addEventListener("loadingdone", schedule);
|
|
100
|
+
return () => {
|
|
101
|
+
live = false;
|
|
102
|
+
cancelAnimationFrame(raf);
|
|
103
|
+
cancelAnimationFrame(settle);
|
|
104
|
+
resize.disconnect();
|
|
105
|
+
mutation.disconnect();
|
|
106
|
+
fonts?.removeEventListener("loadingdone", schedule);
|
|
107
|
+
};
|
|
108
|
+
}, [row, inParent]);
|
|
109
|
+
return [stacked, callbackRef];
|
|
110
|
+
}
|
|
111
|
+
//#endregion
|
|
112
|
+
export { stackedActions, useStackedActions };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CSSProperties } from "react";
|
|
2
|
+
//#region src/lib/styled-props.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Base UI components type `className` as `string | ((state) => string)`, but our
|
|
5
|
+
* tv() recipes only accept a plain string. `StyledProps` narrows a Base UI
|
|
6
|
+
* component's props to a string `className` so they can flow into a recipe.
|
|
7
|
+
*
|
|
8
|
+
* The state-callback form is intentionally dropped: our components express every
|
|
9
|
+
* state through `data-*` variants in the recipe, so a caller never needs it.
|
|
10
|
+
*/
|
|
11
|
+
export type StyledProps<P> = Omit<P, "className" | "style"> & {
|
|
12
|
+
className?: string;
|
|
13
|
+
style?: CSSProperties;
|
|
14
|
+
};
|
|
15
|
+
//#endregion
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { useCallback, useRef } from "react";
|
|
2
|
+
/** How long after a tap a click on the same control is the browser's echo of it. */
|
|
3
|
+
const ECHO_CLICK_MS = 800;
|
|
4
|
+
const DISABLED = ":disabled, [aria-disabled=\"true\"], [data-disabled]";
|
|
5
|
+
function findTouch(list, id) {
|
|
6
|
+
if (!list) return void 0;
|
|
7
|
+
for (let i = 0; i < list.length; i++) {
|
|
8
|
+
const touch = list[i];
|
|
9
|
+
if (touch && touch.identifier === id) return touch;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function isTextEntry(node) {
|
|
13
|
+
if (!node) return false;
|
|
14
|
+
if (node.isContentEditable || node.tagName === "TEXTAREA") return true;
|
|
15
|
+
return node.tagName === "INPUT" && !NON_TEXT_INPUTS.has(node.type);
|
|
16
|
+
}
|
|
17
|
+
const NON_TEXT_INPUTS = /* @__PURE__ */ new Set([
|
|
18
|
+
"button",
|
|
19
|
+
"checkbox",
|
|
20
|
+
"color",
|
|
21
|
+
"file",
|
|
22
|
+
"hidden",
|
|
23
|
+
"image",
|
|
24
|
+
"radio",
|
|
25
|
+
"range",
|
|
26
|
+
"reset",
|
|
27
|
+
"submit"
|
|
28
|
+
]);
|
|
29
|
+
function isStylus(touch) {
|
|
30
|
+
return touch.touchType === "stylus";
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Make `element` activate on a tap's `touchend`. Returns a function that
|
|
34
|
+
* removes the listeners. Does nothing outside a browser.
|
|
35
|
+
*/
|
|
36
|
+
function attachTapActivation(element) {
|
|
37
|
+
const view = element.ownerDocument?.defaultView;
|
|
38
|
+
if (!view) return () => void 0;
|
|
39
|
+
const now = () => view.performance?.now() ?? Date.now();
|
|
40
|
+
let gesture = null;
|
|
41
|
+
let clicking = false;
|
|
42
|
+
let swallowClickUntil = -Infinity;
|
|
43
|
+
const onTouchStart = (event) => {
|
|
44
|
+
swallowClickUntil = -Infinity;
|
|
45
|
+
const touch = event.touches.length === 1 ? event.changedTouches[0] : void 0;
|
|
46
|
+
gesture = touch && !isStylus(touch) ? {
|
|
47
|
+
id: touch.identifier,
|
|
48
|
+
x: touch.clientX,
|
|
49
|
+
y: touch.clientY,
|
|
50
|
+
at: now(),
|
|
51
|
+
moved: false
|
|
52
|
+
} : null;
|
|
53
|
+
};
|
|
54
|
+
const onTouchMove = (event) => {
|
|
55
|
+
if (!gesture || gesture.moved) return;
|
|
56
|
+
const touch = findTouch(event.touches, gesture.id);
|
|
57
|
+
if (!touch) return;
|
|
58
|
+
if (Math.hypot(touch.clientX - gesture.x, touch.clientY - gesture.y) > 10) gesture.moved = true;
|
|
59
|
+
};
|
|
60
|
+
const onTouchCancel = () => {
|
|
61
|
+
gesture = null;
|
|
62
|
+
};
|
|
63
|
+
const onTouchEnd = (event) => {
|
|
64
|
+
const started = gesture;
|
|
65
|
+
gesture = null;
|
|
66
|
+
if (!started || started.moved || event.touches.length > 0) return;
|
|
67
|
+
const touch = findTouch(event.changedTouches, started.id);
|
|
68
|
+
if (!touch) return;
|
|
69
|
+
if (Math.hypot(touch.clientX - started.x, touch.clientY - started.y) > 10) return;
|
|
70
|
+
if (now() - started.at >= 500) return;
|
|
71
|
+
if (!event.cancelable) return;
|
|
72
|
+
if (element.matches(DISABLED)) return;
|
|
73
|
+
const box = element.getBoundingClientRect();
|
|
74
|
+
if (!(touch.clientX >= box.left && touch.clientX <= box.right && touch.clientY >= box.top && touch.clientY <= box.bottom)) return;
|
|
75
|
+
event.preventDefault();
|
|
76
|
+
swallowClickUntil = now() + ECHO_CLICK_MS;
|
|
77
|
+
const focusedBefore = element.ownerDocument.activeElement;
|
|
78
|
+
clicking = true;
|
|
79
|
+
try {
|
|
80
|
+
element.click();
|
|
81
|
+
} finally {
|
|
82
|
+
clicking = false;
|
|
83
|
+
}
|
|
84
|
+
const focusedAfter = element.ownerDocument.activeElement;
|
|
85
|
+
if (focusedAfter === focusedBefore && !isTextEntry(focusedAfter)) element.focus({
|
|
86
|
+
preventScroll: true,
|
|
87
|
+
focusVisible: false
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
const endEchoWindow = () => {
|
|
91
|
+
swallowClickUntil = -Infinity;
|
|
92
|
+
};
|
|
93
|
+
const onPointerDown = (event) => {
|
|
94
|
+
if (event.pointerType !== "touch") endEchoWindow();
|
|
95
|
+
};
|
|
96
|
+
const onClick = (event) => {
|
|
97
|
+
if (clicking || now() > swallowClickUntil) return;
|
|
98
|
+
swallowClickUntil = -Infinity;
|
|
99
|
+
event.preventDefault();
|
|
100
|
+
event.stopImmediatePropagation();
|
|
101
|
+
};
|
|
102
|
+
const passive = { passive: true };
|
|
103
|
+
element.addEventListener("touchstart", onTouchStart, passive);
|
|
104
|
+
element.addEventListener("touchmove", onTouchMove, passive);
|
|
105
|
+
element.addEventListener("touchcancel", onTouchCancel, passive);
|
|
106
|
+
element.addEventListener("pointerdown", onPointerDown, passive);
|
|
107
|
+
element.addEventListener("keydown", endEchoWindow, passive);
|
|
108
|
+
element.addEventListener("touchend", onTouchEnd, { passive: false });
|
|
109
|
+
element.addEventListener("click", onClick, { capture: true });
|
|
110
|
+
return () => {
|
|
111
|
+
element.removeEventListener("touchstart", onTouchStart);
|
|
112
|
+
element.removeEventListener("touchmove", onTouchMove);
|
|
113
|
+
element.removeEventListener("touchcancel", onTouchCancel);
|
|
114
|
+
element.removeEventListener("pointerdown", onPointerDown);
|
|
115
|
+
element.removeEventListener("keydown", endEchoWindow);
|
|
116
|
+
element.removeEventListener("touchend", onTouchEnd);
|
|
117
|
+
element.removeEventListener("click", onClick, { capture: true });
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* A ref callback that gives the element it is set to tap activation
|
|
122
|
+
* (`attachTapActivation`), and removes it when the element goes or
|
|
123
|
+
* `enabled` turns false. Merge it with the control's other refs.
|
|
124
|
+
*/
|
|
125
|
+
function useTapActivation(enabled = true) {
|
|
126
|
+
const detachRef = useRef(null);
|
|
127
|
+
return useCallback((node) => {
|
|
128
|
+
detachRef.current?.();
|
|
129
|
+
detachRef.current = enabled && node ? attachTapActivation(node) : null;
|
|
130
|
+
}, [enabled]);
|
|
131
|
+
}
|
|
132
|
+
//#endregion
|
|
133
|
+
export { attachTapActivation, useTapActivation };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/lib/theme/theme-context.d.ts
|
|
2
|
+
/** Colour mode. Raft is the only visual family; "system" follows the OS. */
|
|
3
|
+
export type ThemeMode = "light" | "dark" | "system";
|
|
4
|
+
export type ResolvedThemeMode = Exclude<ThemeMode, "system">;
|
|
5
|
+
export type ThemeState = {
|
|
6
|
+
mode: ThemeMode;
|
|
7
|
+
resolvedMode: ResolvedThemeMode;
|
|
8
|
+
setMode: (mode: ThemeMode) => void;
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ThemeMode } from "./theme-context.mjs";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
//#region src/lib/theme/theme-provider.d.ts
|
|
4
|
+
export interface ThemeProviderProps {
|
|
5
|
+
/** Controlled colour mode. */
|
|
6
|
+
mode?: ThemeMode;
|
|
7
|
+
defaultMode?: ThemeMode;
|
|
8
|
+
onModeChange?: (mode: ThemeMode) => void;
|
|
9
|
+
/** Persist an uncontrolled mode under this localStorage key. */
|
|
10
|
+
storageKey?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Put the resolved mode on `document.documentElement` (`.light` / `.dark`
|
|
13
|
+
* and `color-scheme`), and track the input modality there
|
|
14
|
+
* (`data-input-modality`, see `installInputModality`), which keeps focus
|
|
15
|
+
* rings to keyboard navigation. Defaults to true for the app-level provider;
|
|
16
|
+
* set it to false for nested previews and islands that must not touch the
|
|
17
|
+
* page root.
|
|
18
|
+
*/
|
|
19
|
+
syncDom?: boolean;
|
|
20
|
+
children: ReactNode;
|
|
21
|
+
}
|
|
22
|
+
export declare function ThemeProvider({ mode, defaultMode, onModeChange, storageKey, syncDom, children }: ThemeProviderProps): import("react").JSX.Element;
|
|
23
|
+
//#endregion
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { ThemeStateContext } from "./theme-context.mjs";
|
|
3
|
+
import { installInputModality } from "../input-modality.mjs";
|
|
4
|
+
import { useCallback, useEffect, useMemo, useState, useSyncExternalStore } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
//#region src/lib/theme/theme-provider.tsx
|
|
7
|
+
function readStoredMode(storageKey, fallback) {
|
|
8
|
+
if (typeof window === "undefined" || !storageKey) return fallback;
|
|
9
|
+
const stored = window.localStorage.getItem(storageKey);
|
|
10
|
+
return stored === "light" || stored === "dark" || stored === "system" ? stored : fallback;
|
|
11
|
+
}
|
|
12
|
+
function subscribeSystemMode(onStoreChange) {
|
|
13
|
+
if (typeof window === "undefined") return () => void 0;
|
|
14
|
+
const media = window.matchMedia("(prefers-color-scheme: dark)");
|
|
15
|
+
media.addEventListener("change", onStoreChange);
|
|
16
|
+
return () => media.removeEventListener("change", onStoreChange);
|
|
17
|
+
}
|
|
18
|
+
function getSystemMode() {
|
|
19
|
+
if (typeof window === "undefined") return "light";
|
|
20
|
+
return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
21
|
+
}
|
|
22
|
+
function ThemeProvider({ mode, defaultMode = "light", onModeChange, storageKey, syncDom = true, children }) {
|
|
23
|
+
const [uncontrolledMode, setUncontrolledMode] = useState(() => readStoredMode(storageKey, defaultMode));
|
|
24
|
+
const activeMode = mode ?? uncontrolledMode;
|
|
25
|
+
const systemMode = useSyncExternalStore(subscribeSystemMode, getSystemMode, () => "light");
|
|
26
|
+
const resolvedMode = activeMode === "system" ? systemMode : activeMode;
|
|
27
|
+
const setMode = useCallback((nextMode) => {
|
|
28
|
+
if (mode === void 0) {
|
|
29
|
+
setUncontrolledMode(nextMode);
|
|
30
|
+
if (typeof window !== "undefined" && storageKey) window.localStorage.setItem(storageKey, nextMode);
|
|
31
|
+
}
|
|
32
|
+
onModeChange?.(nextMode);
|
|
33
|
+
}, [
|
|
34
|
+
mode,
|
|
35
|
+
onModeChange,
|
|
36
|
+
storageKey
|
|
37
|
+
]);
|
|
38
|
+
const themeState = useMemo(() => ({
|
|
39
|
+
mode: activeMode,
|
|
40
|
+
resolvedMode,
|
|
41
|
+
setMode
|
|
42
|
+
}), [
|
|
43
|
+
activeMode,
|
|
44
|
+
resolvedMode,
|
|
45
|
+
setMode
|
|
46
|
+
]);
|
|
47
|
+
useEffect(() => syncDom ? installInputModality() : void 0, [syncDom]);
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (!syncDom) return;
|
|
50
|
+
const root = document.documentElement;
|
|
51
|
+
root.classList.toggle("light", resolvedMode === "light");
|
|
52
|
+
root.classList.toggle("dark", resolvedMode === "dark");
|
|
53
|
+
root.style.colorScheme = resolvedMode;
|
|
54
|
+
}, [resolvedMode, syncDom]);
|
|
55
|
+
return /* @__PURE__ */ jsx(ThemeStateContext.Provider, {
|
|
56
|
+
value: themeState,
|
|
57
|
+
children
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
//#endregion
|
|
61
|
+
export { ThemeProvider };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { cn } from "../../cn.mjs";
|
|
2
|
+
import { useTheme } from "./use-theme.mjs";
|
|
3
|
+
//#region src/lib/theme/theme-scope.ts
|
|
4
|
+
/**
|
|
5
|
+
* Carry the provider's resolved mode (`light` / `dark`) onto content that
|
|
6
|
+
* renders outside its subtree (a portal), so a dark island's popup stays dark.
|
|
7
|
+
*/
|
|
8
|
+
function resolveThemeScopeProps({ className, ...props }, { resolvedMode }) {
|
|
9
|
+
const resolvedClassName = typeof className === "function" ? (state) => cn(className(state), resolvedMode) : typeof className === "string" ? cn(className, resolvedMode) : className ?? resolvedMode;
|
|
10
|
+
return {
|
|
11
|
+
...props,
|
|
12
|
+
className: resolvedClassName
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function useThemeScopeProps(props) {
|
|
16
|
+
return resolveThemeScopeProps(props, useTheme());
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { resolveThemeScopeProps, useThemeScopeProps };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ThemeStateContext } from "./theme-context.mjs";
|
|
2
|
+
import { use } from "react";
|
|
3
|
+
//#region src/lib/theme/use-theme.ts
|
|
4
|
+
/** Read and update the colour mode. */
|
|
5
|
+
function useTheme() {
|
|
6
|
+
return use(ThemeStateContext);
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { useTheme };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { PointerSensor, TouchSensor, TouchSensorOptions } from "@dnd-kit/core";
|
|
2
|
+
//#region src/lib/touch-drag.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* How a finger picks up something that can be dragged
|
|
5
|
+
* (design/foundations/states.md#dragging-on-a-touch-screen):
|
|
6
|
+
*
|
|
7
|
+
* - hold still for `TOUCH_DRAG_HOLD_MS`: the item is armed, the same moment a
|
|
8
|
+
* long press opens a menu (raft-ui's ContextMenuTrigger, iOS: 500ms);
|
|
9
|
+
* - then move by `TOUCH_DRAG_DISTANCE_PX`: the drag starts, and whoever owns a
|
|
10
|
+
* menu that opened closes it in `onDragStart`;
|
|
11
|
+
* - move by more than `TOUCH_DRAG_TOLERANCE_PX` before the hold is up, or put a
|
|
12
|
+
* second finger down: it was a scroll or a pinch, and the item lets go.
|
|
13
|
+
*
|
|
14
|
+
* dnd-kit's delay constraint starts the drag the moment the hold is up, at the
|
|
15
|
+
* same time as the long press opens the menu, so the two fight. Starting on the
|
|
16
|
+
* first move after the hold lets holding still mean "menu" and holding then
|
|
17
|
+
* moving mean "drag", as on iOS.
|
|
18
|
+
*
|
|
19
|
+
* Pair it with `MouseOnlyPointerSensor`, not dnd-kit's PointerSensor: a phone
|
|
20
|
+
* sends `pointerdown` (pointerType "touch") before `touchstart`, and the sensor
|
|
21
|
+
* that takes the press first keeps it, so a PointerSensor would pick up every
|
|
22
|
+
* touch on its distance and this sensor would never run.
|
|
23
|
+
*/
|
|
24
|
+
export declare const TOUCH_DRAG_HOLD_MS = 500;
|
|
25
|
+
export declare const TOUCH_DRAG_DISTANCE_PX = 10;
|
|
26
|
+
export declare const TOUCH_DRAG_TOLERANCE_PX = 10;
|
|
27
|
+
export type HoldThenMoveOptions = {
|
|
28
|
+
/** How long the finger stays still before a move can start the drag. */
|
|
29
|
+
holdMs?: number;
|
|
30
|
+
/** How far the finger moves after the hold to start the drag. */
|
|
31
|
+
distance?: number;
|
|
32
|
+
/** How far the finger may drift during the hold before it counts as a scroll. */
|
|
33
|
+
tolerance?: number;
|
|
34
|
+
};
|
|
35
|
+
/** A TouchSensor that starts a drag on the first move after a still hold (see above). */
|
|
36
|
+
export declare const HoldThenMoveTouchSensor: typeof TouchSensor;
|
|
37
|
+
/**
|
|
38
|
+
* dnd-kit's PointerSensor for a mouse and a pen only: a finger's pointerdown is
|
|
39
|
+
* left to `HoldThenMoveTouchSensor`. While it holds a drag, Escape puts the
|
|
40
|
+
* item back and reaches nothing else.
|
|
41
|
+
*/
|
|
42
|
+
export declare const MouseOnlyPointerSensor: typeof PointerSensor;
|
|
43
|
+
/**
|
|
44
|
+
* `useSensor(HoldThenMoveTouchSensor, …)` with the activation the sensor relies
|
|
45
|
+
* on: no constraint dnd-kit would act on by itself, so only a move after the
|
|
46
|
+
* hold starts the drag.
|
|
47
|
+
*/
|
|
48
|
+
export declare function useHoldThenMoveTouchSensor({ holdMs, distance, tolerance }?: HoldThenMoveOptions): import("@dnd-kit/core").SensorDescriptor<TouchSensorOptions>;
|
|
49
|
+
/** The mouse / pen sensor that goes with it: picks up after `distance` px. */
|
|
50
|
+
export declare function useMouseOnlyPointerSensor(distance: number): import("@dnd-kit/core").SensorDescriptor<{
|
|
51
|
+
activationConstraint: {
|
|
52
|
+
distance: number;
|
|
53
|
+
};
|
|
54
|
+
}>;
|
|
55
|
+
//#endregion
|