@nadicodeai/ui 0.20.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +4 -3
- package/README.md +14 -21
- package/dist/agents.d.ts +10 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +9 -0
- package/dist/components/badge.d.ts +1 -1
- package/dist/components/brand-icons/apple.d.ts +18 -0
- package/dist/components/brand-icons/apple.d.ts.map +1 -0
- package/dist/components/brand-icons/apple.js +22 -0
- package/dist/components/brand-icons/brand-icon.d.ts +22 -0
- package/dist/components/brand-icons/brand-icon.d.ts.map +1 -0
- package/dist/components/brand-icons/brand-icon.js +26 -0
- package/dist/components/brand-icons/linux.d.ts +18 -0
- package/dist/components/brand-icons/linux.d.ts.map +1 -0
- package/dist/components/brand-icons/linux.js +25 -0
- package/dist/components/brand-icons/windows.d.ts +18 -0
- package/dist/components/brand-icons/windows.d.ts.map +1 -0
- package/dist/components/brand-icons/windows.js +22 -0
- package/dist/components/brand-icons.d.ts +5 -0
- package/dist/components/brand-icons.d.ts.map +1 -0
- package/dist/components/brand-icons.js +10 -0
- package/dist/components/button.d.ts +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/card-marketing.js +2 -2
- package/dist/components/card.d.ts +4 -3
- package/dist/components/card.d.ts.map +1 -1
- package/dist/components/card.js +12 -2
- package/dist/components/chart-breakdown-table.js +1 -1
- package/dist/components/chart-bullet-bar.d.ts +18 -2
- package/dist/components/chart-bullet-bar.d.ts.map +1 -1
- package/dist/components/chart-bullet-bar.js +62 -9
- package/dist/components/chart-date-range-control.d.ts +11 -1
- package/dist/components/chart-date-range-control.d.ts.map +1 -1
- package/dist/components/chart-date-range-control.js +13 -3
- package/dist/components/chart-entity-colors.d.ts +7 -1
- package/dist/components/chart-entity-colors.d.ts.map +1 -1
- package/dist/components/chart-entity-colors.js +7 -1
- package/dist/components/chart-kpi-stat.d.ts.map +1 -1
- package/dist/components/chart-kpi-stat.js +1 -1
- package/dist/components/chart-time-series.d.ts.map +1 -1
- package/dist/components/chart-time-series.js +62 -4
- package/dist/components/chart.js +2 -2
- package/dist/components/code-editor-mockup.js +1 -1
- package/dist/components/nav-bar.js +1 -1
- package/dist/components/radio-group.d.ts +1 -1
- package/dist/components/radio-group.d.ts.map +1 -1
- package/dist/components/radio-group.js +2 -2
- package/dist/components/theme-mode-switcher.d.ts +10 -3
- package/dist/components/theme-mode-switcher.d.ts.map +1 -1
- package/dist/components/theme-mode-switcher.js +14 -7
- package/dist/components/use-case-bento.d.ts +2 -4
- package/dist/components/use-case-bento.d.ts.map +1 -1
- package/dist/components/use-case-bento.js +2 -3
- package/dist/eslint/index.js +91 -0
- package/dist/eslint/rules/jsx-class-utility.js +231 -0
- package/dist/eslint/rules/no-deprecated-zod-api.js +156 -0
- package/dist/eslint/rules/no-design-system-src-import.js +11 -0
- package/dist/eslint/rules/no-invalid-token-utility.js +46 -0
- package/dist/eslint/rules/no-native-visible-control.js +86 -0
- package/dist/eslint/rules/no-raw-color-utility.js +109 -0
- package/dist/eslint/rules/no-raw-focus-ring-width.js +30 -0
- package/dist/eslint/rules/no-raw-logo-import.js +41 -0
- package/dist/eslint/rules/no-shadcn-appearance-override.js +191 -0
- package/dist/eslint/rules/no-token-category-bypass.js +53 -0
- package/dist/eslint/rules/no-ui-src-import.js +10 -0
- package/dist/eslint/rules/no-unpinned-vercel-functions-import.js +100 -0
- package/dist/eslint/rules/src-import-boundary.js +207 -0
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +0 -1
- package/dist/index.d.ts +1 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -16
- package/dist/internal/assistant-ui/attachment.d.ts +5 -0
- package/dist/internal/assistant-ui/attachment.d.ts.map +1 -0
- package/dist/internal/assistant-ui/attachment.js +93 -0
- package/dist/internal/assistant-ui/follow-up-suggestions.d.ts +3 -0
- package/dist/internal/assistant-ui/follow-up-suggestions.d.ts.map +1 -0
- package/dist/internal/assistant-ui/follow-up-suggestions.js +8 -0
- package/dist/internal/assistant-ui/markdown-text.d.ts +2 -0
- package/dist/internal/assistant-ui/markdown-text.d.ts.map +1 -0
- package/dist/internal/assistant-ui/markdown-text.js +54 -0
- package/dist/internal/assistant-ui/reasoning.d.ts +31 -0
- package/dist/internal/assistant-ui/reasoning.d.ts.map +1 -0
- package/dist/internal/assistant-ui/reasoning.js +118 -0
- package/dist/internal/assistant-ui/thread.d.ts +26 -0
- package/dist/internal/assistant-ui/thread.d.ts.map +1 -0
- package/dist/internal/assistant-ui/thread.js +118 -0
- package/dist/internal/assistant-ui/tool-fallback.d.ts +10 -0
- package/dist/internal/assistant-ui/tool-fallback.d.ts.map +1 -0
- package/dist/internal/assistant-ui/tool-fallback.js +163 -0
- package/dist/internal/assistant-ui/tool-group.d.ts +18 -0
- package/dist/internal/assistant-ui/tool-group.d.ts.map +1 -0
- package/dist/internal/assistant-ui/tool-group.js +44 -0
- package/dist/internal/assistant-ui/tooltip-icon-button.d.ts +8 -0
- package/dist/internal/assistant-ui/tooltip-icon-button.d.ts.map +1 -0
- package/dist/internal/assistant-ui/tooltip-icon-button.js +10 -0
- package/dist/styles/globals.css +3 -209
- package/docs/agents/nadicodeai-ui.md +4 -6
- package/docs/component-classification.md +1 -1
- package/docs/consuming-cross-repo.md +32 -3
- package/docs/contract.md +16 -6
- package/docs/migration/base-ui-migration.md +0 -11
- package/docs/product-compositions.md +1 -1
- package/llms.txt +5 -6
- package/package.json +17 -29
- package/skills/nadicodeai-ui/SKILL.md +5 -7
- package/dist/ai-elements.d.ts +0 -49
- package/dist/ai-elements.d.ts.map +0 -1
- package/dist/ai-elements.js +0 -48
- package/dist/components/agent-avatar.d.ts +0 -7
- package/dist/components/agent-avatar.d.ts.map +0 -1
- package/dist/components/agent-avatar.js +0 -6
- package/dist/components/agent-chat.d.ts +0 -20
- package/dist/components/agent-chat.d.ts.map +0 -1
- package/dist/components/agent-chat.js +0 -10
- package/dist/components/agent-composer.d.ts +0 -56
- package/dist/components/agent-composer.d.ts.map +0 -1
- package/dist/components/agent-composer.js +0 -56
- package/dist/components/agent-message.d.ts +0 -117
- package/dist/components/agent-message.d.ts.map +0 -1
- package/dist/components/agent-message.js +0 -99
- package/dist/components/agent-thread.d.ts +0 -26
- package/dist/components/agent-thread.d.ts.map +0 -1
- package/dist/components/agent-thread.js +0 -63
- package/dist/components/agent-tool-approval.d.ts +0 -27
- package/dist/components/agent-tool-approval.d.ts.map +0 -1
- package/dist/components/agent-tool-approval.js +0 -43
- package/dist/components/ai-elements/agent.d.ts +0 -27
- package/dist/components/ai-elements/agent.d.ts.map +0 -1
- package/dist/components/ai-elements/agent.js +0 -25
- package/dist/components/ai-elements/artifact.d.ts +0 -24
- package/dist/components/ai-elements/artifact.d.ts.map +0 -1
- package/dist/components/ai-elements/artifact.js +0 -20
- package/dist/components/ai-elements/attachments.d.ts +0 -55
- package/dist/components/ai-elements/attachments.d.ts.map +0 -1
- package/dist/components/ai-elements/attachments.js +0 -125
- package/dist/components/ai-elements/audio-player.d.ts +0 -30
- package/dist/components/ai-elements/audio-player.d.ts.map +0 -1
- package/dist/components/ai-elements/audio-player.js +0 -41
- package/dist/components/ai-elements/canvas.d.ts +0 -8
- package/dist/components/ai-elements/canvas.d.ts.map +0 -1
- package/dist/components/ai-elements/canvas.js +0 -5
- package/dist/components/ai-elements/chain-of-thought.d.ts +0 -30
- package/dist/components/ai-elements/chain-of-thought.d.ts.map +0 -1
- package/dist/components/ai-elements/chain-of-thought.js +0 -49
- package/dist/components/ai-elements/checkpoint.d.ts +0 -12
- package/dist/components/ai-elements/checkpoint.d.ts.map +0 -1
- package/dist/components/ai-elements/checkpoint.js +0 -10
- package/dist/components/ai-elements/code-block.d.ts +0 -53
- package/dist/components/ai-elements/code-block.d.ts.map +0 -1
- package/dist/components/ai-elements/code-block.js +0 -239
- package/dist/components/ai-elements/commit.d.ts +0 -65
- package/dist/components/ai-elements/commit.d.ts.map +0 -1
- package/dist/components/ai-elements/commit.js +0 -83
- package/dist/components/ai-elements/confirmation.d.ts +0 -50
- package/dist/components/ai-elements/confirmation.d.ts.map +0 -1
- package/dist/components/ai-elements/confirmation.js +0 -57
- package/dist/components/ai-elements/connection.d.ts +0 -6
- package/dist/components/ai-elements/connection.d.ts.map +0 -1
- package/dist/components/ai-elements/connection.js +0 -10
- package/dist/components/ai-elements/context.d.ts +0 -33
- package/dist/components/ai-elements/context.d.ts.map +0 -1
- package/dist/components/ai-elements/context.js +0 -147
- package/dist/components/ai-elements/controls.d.ts +0 -5
- package/dist/components/ai-elements/controls.d.ts.map +0 -1
- package/dist/components/ai-elements/controls.js +0 -5
- package/dist/components/ai-elements/conversation.d.ts +0 -24
- package/dist/components/ai-elements/conversation.d.ts.map +0 -1
- package/dist/components/ai-elements/conversation.js +0 -41
- package/dist/components/ai-elements/edge.d.ts +0 -6
- package/dist/components/ai-elements/edge.d.ts.map +0 -1
- package/dist/components/ai-elements/edge.js +0 -88
- package/dist/components/ai-elements/environment-variables.d.ts +0 -39
- package/dist/components/ai-elements/environment-variables.d.ts.map +0 -1
- package/dist/components/ai-elements/environment-variables.js +0 -60
- package/dist/components/ai-elements/file-tree.d.ts +0 -27
- package/dist/components/ai-elements/file-tree.d.ts.map +0 -1
- package/dist/components/ai-elements/file-tree.js +0 -73
- package/dist/components/ai-elements/image.d.ts +0 -7
- package/dist/components/ai-elements/image.d.ts.map +0 -1
- package/dist/components/ai-elements/image.js +0 -3
- package/dist/components/ai-elements/inline-citation.d.ts +0 -39
- package/dist/components/ai-elements/inline-citation.d.ts.map +0 -1
- package/dist/components/ai-elements/inline-citation.js +0 -86
- package/dist/components/ai-elements/jsx-preview.d.ts +0 -30
- package/dist/components/ai-elements/jsx-preview.d.ts.map +0 -1
- package/dist/components/ai-elements/jsx-preview.js +0 -159
- package/dist/components/ai-elements/message.d.ts +0 -38
- package/dist/components/ai-elements/message.d.ts.map +0 -1
- package/dist/components/ai-elements/message.js +0 -91
- package/dist/components/ai-elements/mic-selector.d.ts +0 -46
- package/dist/components/ai-elements/mic-selector.d.ts.map +0 -1
- package/dist/components/ai-elements/mic-selector.js +0 -180
- package/dist/components/ai-elements/model-selector.d.ts +0 -36
- package/dist/components/ai-elements/model-selector.d.ts.map +0 -1
- package/dist/components/ai-elements/model-selector.js +0 -18
- package/dist/components/ai-elements/node.d.ts +0 -22
- package/dist/components/ai-elements/node.d.ts.map +0 -1
- package/dist/components/ai-elements/node.js +0 -12
- package/dist/components/ai-elements/open-in-chat.d.ts +0 -27
- package/dist/components/ai-elements/open-in-chat.d.ts.map +0 -1
- package/dist/components/ai-elements/open-in-chat.js +0 -81
- package/dist/components/ai-elements/package-info.d.ts +0 -30
- package/dist/components/ai-elements/package-info.d.ts.map +0 -1
- package/dist/components/ai-elements/package-info.js +0 -50
- package/dist/components/ai-elements/panel.d.ts +0 -6
- package/dist/components/ai-elements/panel.d.ts.map +0 -1
- package/dist/components/ai-elements/panel.js +0 -5
- package/dist/components/ai-elements/persona.d.ts +0 -49
- package/dist/components/ai-elements/persona.d.ts.map +0 -1
- package/dist/components/ai-elements/persona.js +0 -175
- package/dist/components/ai-elements/plan.d.ts +0 -27
- package/dist/components/ai-elements/plan.d.ts.map +0 -1
- package/dist/components/ai-elements/plan.js +0 -34
- package/dist/components/ai-elements/prompt-input.d.ts +0 -149
- package/dist/components/ai-elements/prompt-input.d.ts.map +0 -1
- package/dist/components/ai-elements/prompt-input.js +0 -704
- package/dist/components/ai-elements/queue.d.ts +0 -62
- package/dist/components/ai-elements/queue.d.ts.map +0 -1
- package/dist/components/ai-elements/queue.js +0 -24
- package/dist/components/ai-elements/reasoning.d.ts +0 -27
- package/dist/components/ai-elements/reasoning.d.ts.map +0 -1
- package/dist/components/ai-elements/reasoning.js +0 -92
- package/dist/components/ai-elements/sandbox.d.ts +0 -25
- package/dist/components/ai-elements/sandbox.d.ts.map +0 -1
- package/dist/components/ai-elements/sandbox.js +0 -15
- package/dist/components/ai-elements/schema-display.d.ts +0 -56
- package/dist/components/ai-elements/schema-display.d.ts.map +0 -1
- package/dist/components/ai-elements/schema-display.js +0 -90
- package/dist/components/ai-elements/shimmer.d.ts +0 -10
- package/dist/components/ai-elements/shimmer.d.ts.map +0 -1
- package/dist/components/ai-elements/shimmer.js +0 -11
- package/dist/components/ai-elements/snippet.d.ts +0 -19
- package/dist/components/ai-elements/snippet.d.ts.map +0 -1
- package/dist/components/ai-elements/snippet.js +0 -32
- package/dist/components/ai-elements/sources.d.ts +0 -13
- package/dist/components/ai-elements/sources.d.ts.map +0 -1
- package/dist/components/ai-elements/sources.js +0 -9
- package/dist/components/ai-elements/speech-input.d.ts +0 -55
- package/dist/components/ai-elements/speech-input.d.ts.map +0 -1
- package/dist/components/ai-elements/speech-input.js +0 -187
- package/dist/components/ai-elements/stack-trace.d.ts +0 -38
- package/dist/components/ai-elements/stack-trace.d.ts.map +0 -1
- package/dist/components/ai-elements/stack-trace.js +0 -181
- package/dist/components/ai-elements/suggestion.d.ts +0 -11
- package/dist/components/ai-elements/suggestion.d.ts.map +0 -1
- package/dist/components/ai-elements/suggestion.js +0 -13
- package/dist/components/ai-elements/task.d.ts +0 -15
- package/dist/components/ai-elements/task.d.ts.map +0 -1
- package/dist/components/ai-elements/task.js +0 -10
- package/dist/components/ai-elements/terminal.d.ts +0 -28
- package/dist/components/ai-elements/terminal.d.ts.map +0 -1
- package/dist/components/ai-elements/terminal.js +0 -55
- package/dist/components/ai-elements/test-results.d.ts +0 -59
- package/dist/components/ai-elements/test-results.d.ts.map +0 -1
- package/dist/components/ai-elements/test-results.js +0 -98
- package/dist/components/ai-elements/tool.d.ts +0 -32
- package/dist/components/ai-elements/tool.d.ts.map +0 -1
- package/dist/components/ai-elements/tool.js +0 -49
- package/dist/components/ai-elements/toolbar.d.ts +0 -6
- package/dist/components/ai-elements/toolbar.d.ts.map +0 -1
- package/dist/components/ai-elements/toolbar.js +0 -5
- package/dist/components/ai-elements/transcription.d.ts +0 -17
- package/dist/components/ai-elements/transcription.d.ts.map +0 -1
- package/dist/components/ai-elements/transcription.js +0 -36
- package/dist/components/ai-elements/voice-selector.d.ts +0 -65
- package/dist/components/ai-elements/voice-selector.d.ts.map +0 -1
- package/dist/components/ai-elements/voice-selector.js +0 -224
- package/dist/components/ai-elements/web-preview.d.ts +0 -35
- package/dist/components/ai-elements/web-preview.d.ts.map +0 -1
- package/dist/components/ai-elements/web-preview.js +0 -66
- package/dist/components/artifact-panel.d.ts +0 -130
- package/dist/components/artifact-panel.d.ts.map +0 -1
- package/dist/components/artifact-panel.js +0 -180
- package/dist/components/attachment.d.ts +0 -24
- package/dist/components/attachment.d.ts.map +0 -1
- package/dist/components/attachment.js +0 -68
- package/dist/components/bubble.d.ts +0 -17
- package/dist/components/bubble.d.ts.map +0 -1
- package/dist/components/bubble.js +0 -59
- package/dist/components/demo-surface.d.ts +0 -34
- package/dist/components/demo-surface.d.ts.map +0 -1
- package/dist/components/demo-surface.js +0 -21
- package/dist/components/files-preview.d.ts +0 -36
- package/dist/components/files-preview.d.ts.map +0 -1
- package/dist/components/files-preview.js +0 -85
- package/dist/components/marker.d.ts +0 -11
- package/dist/components/marker.d.ts.map +0 -1
- package/dist/components/marker.js +0 -34
- package/dist/components/message-scroller.d.ts +0 -17
- package/dist/components/message-scroller.d.ts.map +0 -1
- package/dist/components/message-scroller.js +0 -29
- package/dist/components/message.d.ts +0 -11
- package/dist/components/message.d.ts.map +0 -1
- package/dist/components/message.js +0 -21
- package/dist/components/state-notice.d.ts +0 -13
- package/dist/components/state-notice.d.ts.map +0 -1
- package/dist/components/state-notice.js +0 -8
- package/dist/components/watch-it-work-band.d.ts +0 -12
- package/dist/components/watch-it-work-band.d.ts.map +0 -1
- package/dist/components/watch-it-work-band.js +0 -8
- package/dist/hooks/use-controllable-state.d.ts +0 -9
- package/dist/hooks/use-controllable-state.d.ts.map +0 -1
- package/dist/hooks/use-controllable-state.js +0 -23
- package/dist/lib/agent-attachment.d.ts +0 -11
- package/dist/lib/agent-attachment.d.ts.map +0 -1
- package/dist/lib/agent-attachment.js +0 -19
- package/dist/lib/agent-contracts.d.ts +0 -132
- package/dist/lib/agent-contracts.d.ts.map +0 -1
- package/dist/lib/agent-contracts.js +0 -6
- package/dist/lib/agent-state.d.ts +0 -22
- package/dist/lib/agent-state.d.ts.map +0 -1
- package/dist/lib/agent-state.js +0 -96
- package/dist/lib/agent-work-state.d.ts +0 -36
- package/dist/lib/agent-work-state.d.ts.map +0 -1
- package/dist/lib/agent-work-state.js +0 -36
- package/dist/lib/message-scroller-primitive/components.d.ts +0 -17
- package/dist/lib/message-scroller-primitive/components.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/components.js +0 -204
- package/dist/lib/message-scroller-primitive/geometry.d.ts +0 -51
- package/dist/lib/message-scroller-primitive/geometry.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/geometry.js +0 -199
- package/dist/lib/message-scroller-primitive/index.d.ts +0 -12
- package/dist/lib/message-scroller-primitive/index.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/index.js +0 -12
- package/dist/lib/message-scroller-primitive/stores.d.ts +0 -6
- package/dist/lib/message-scroller-primitive/stores.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/stores.js +0 -53
- package/dist/lib/message-scroller-primitive/types.d.ts +0 -88
- package/dist/lib/message-scroller-primitive/types.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/types.js +0 -40
- package/dist/lib/message-scroller-primitive/use-message-scroller-commands.d.ts +0 -19
- package/dist/lib/message-scroller-primitive/use-message-scroller-commands.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/use-message-scroller-commands.js +0 -188
- package/dist/lib/message-scroller-primitive/use-message-scroller-controller.d.ts +0 -7
- package/dist/lib/message-scroller-primitive/use-message-scroller-controller.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/use-message-scroller-controller.js +0 -506
- package/dist/lib/message-scroller-primitive/use-message-scroller-refs.d.ts +0 -49
- package/dist/lib/message-scroller-primitive/use-message-scroller-refs.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/use-message-scroller-refs.js +0 -90
- package/dist/lib/message-scroller-primitive/use-render.d.ts +0 -22
- package/dist/lib/message-scroller-primitive/use-render.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/use-render.js +0 -113
- package/dist/lib/message-scroller-primitive/utils.d.ts +0 -4
- package/dist/lib/message-scroller-primitive/utils.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/utils.js +0 -9
- package/docs/agent-work-surfaces.md +0 -132
- package/docs/migration/ai-elements-vendoring.md +0 -29
- package/docs/terminal-tui-semantics.md +0 -172
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { MessageScrollerButton as Button, MessageScrollerContent as Content, MessageScrollerItem as Item, MessageScrollerProvider as Provider, MessageScroller as Root, MessageScrollerViewport as Viewport } from "./components";
|
|
2
|
-
export declare const MessageScroller: {
|
|
3
|
-
Provider: typeof Provider;
|
|
4
|
-
Root: typeof Root;
|
|
5
|
-
Viewport: typeof Viewport;
|
|
6
|
-
Content: typeof Content;
|
|
7
|
-
Item: typeof Item;
|
|
8
|
-
Button: typeof Button;
|
|
9
|
-
};
|
|
10
|
-
export { useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, } from "./components";
|
|
11
|
-
export type { MessageScrollerDefaultScrollPosition, MessageScrollerScrollAlign, MessageScrollerScrollOptions, MessageScrollerScrollable, MessageScrollerVisibilityState, } from "./types";
|
|
12
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/message-scroller-primitive/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,qBAAqB,IAAI,MAAM,EAC/B,sBAAsB,IAAI,OAAO,EACjC,mBAAmB,IAAI,IAAI,EAC3B,uBAAuB,IAAI,QAAQ,EACnC,eAAe,IAAI,IAAI,EACvB,uBAAuB,IAAI,QAAQ,EACpC,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,eAAe;;;;;;;CAO3B,CAAC;AAEF,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,oCAAoC,EACpC,0BAA0B,EAC1B,4BAA4B,EAC5B,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,SAAS,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// Vendored from @shadcn/react 0.2.1 (upstream github.com/shadcn-ui).
|
|
2
|
-
// Adapted only for repo import paths and formatting; not added as an npm dependency.
|
|
3
|
-
import { MessageScrollerButton as Button, MessageScrollerContent as Content, MessageScrollerItem as Item, MessageScrollerProvider as Provider, MessageScroller as Root, MessageScrollerViewport as Viewport, } from "./components.js";
|
|
4
|
-
export const MessageScroller = {
|
|
5
|
-
Provider,
|
|
6
|
-
Root,
|
|
7
|
-
Viewport,
|
|
8
|
-
Content,
|
|
9
|
-
Item,
|
|
10
|
-
Button,
|
|
11
|
-
};
|
|
12
|
-
export { useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, } from "./components.js";
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { MessageScrollerScrollable, MessageScrollerStore, MessageScrollerVisibilityStore } from "./types";
|
|
2
|
-
declare function createMessageScrollerStore<T>(initialSnapshot: T, isEqual: (a: T, b: T) => boolean): MessageScrollerStore<T>;
|
|
3
|
-
declare function createMessageScrollerVisibilityStore(): MessageScrollerVisibilityStore;
|
|
4
|
-
declare function areScrollStatesEqual(current: MessageScrollerScrollable, next: MessageScrollerScrollable): boolean;
|
|
5
|
-
export { areScrollStatesEqual, createMessageScrollerStore, createMessageScrollerVisibilityStore };
|
|
6
|
-
//# sourceMappingURL=stores.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stores.d.ts","sourceRoot":"","sources":["../../../src/lib/message-scroller-primitive/stores.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EAEpB,8BAA8B,EAC/B,MAAM,SAAS,CAAC;AA4CjB,iBAAS,0BAA0B,CAAC,CAAC,EACnC,eAAe,EAAE,CAAC,EAClB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,GAC/B,oBAAoB,CAAC,CAAC,CAAC,CAEzB;AAED,iBAAS,oCAAoC,IAAI,8BAA8B,CAE9E;AAED,iBAAS,oBAAoB,CAAC,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,yBAAyB,WAEhG;AAmBD,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,oCAAoC,EAAE,CAAC"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
// Vendored from @shadcn/react 0.2.1 (upstream github.com/shadcn-ui).
|
|
2
|
-
// Adapted only for repo import paths and formatting; not added as an npm dependency.
|
|
3
|
-
import { EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE } from "./types.js";
|
|
4
|
-
// Generic useSyncExternalStore backing: a stable snapshot (referentially equal
|
|
5
|
-
// while isEqual holds, so subscribers only re-render on real transitions) plus
|
|
6
|
-
// optional reference-counting via the subscribe-time lifecycle callbacks.
|
|
7
|
-
function createExternalStore(initialSnapshot, isEqual) {
|
|
8
|
-
let snapshot = initialSnapshot;
|
|
9
|
-
const listeners = new Set();
|
|
10
|
-
return {
|
|
11
|
-
getSnapshot: () => snapshot,
|
|
12
|
-
hasListeners: () => listeners.size > 0,
|
|
13
|
-
setSnapshot: (nextSnapshot) => {
|
|
14
|
-
if (isEqual(snapshot, nextSnapshot)) {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
snapshot = nextSnapshot;
|
|
18
|
-
listeners.forEach((listener) => listener());
|
|
19
|
-
},
|
|
20
|
-
subscribe: (listener, onFirstSubscribe, onLastUnsubscribe) => {
|
|
21
|
-
const wasEmpty = listeners.size === 0;
|
|
22
|
-
listeners.add(listener);
|
|
23
|
-
if (wasEmpty) {
|
|
24
|
-
onFirstSubscribe?.();
|
|
25
|
-
}
|
|
26
|
-
return () => {
|
|
27
|
-
listeners.delete(listener);
|
|
28
|
-
if (listeners.size === 0) {
|
|
29
|
-
onLastUnsubscribe?.();
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
function createMessageScrollerStore(initialSnapshot, isEqual) {
|
|
36
|
-
return createExternalStore(initialSnapshot, isEqual);
|
|
37
|
-
}
|
|
38
|
-
function createMessageScrollerVisibilityStore() {
|
|
39
|
-
return createExternalStore(EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE, areVisibilityStatesEqual);
|
|
40
|
-
}
|
|
41
|
-
function areScrollStatesEqual(current, next) {
|
|
42
|
-
return current.start === next.start && current.end === next.end;
|
|
43
|
-
}
|
|
44
|
-
function areVisibilityStatesEqual(current, next) {
|
|
45
|
-
if (current.currentAnchorId !== next.currentAnchorId) {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
if (current.visibleMessageIds.length !== next.visibleMessageIds.length) {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
return current.visibleMessageIds.every((messageId, index) => messageId === next.visibleMessageIds[index]);
|
|
52
|
-
}
|
|
53
|
-
export { areScrollStatesEqual, createMessageScrollerStore, createMessageScrollerVisibilityStore };
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import type * as React from "react";
|
|
2
|
-
import type { UseRenderComponentProps } from "./use-render";
|
|
3
|
-
declare const DEFAULT_SCROLL_EDGE_THRESHOLD = 8;
|
|
4
|
-
declare const DEFAULT_SCROLL_PREVIOUS_ITEM_PEEK = 64;
|
|
5
|
-
declare const DEFAULT_SCROLL_MARGIN = 0;
|
|
6
|
-
declare const SCROLL_POSITION_EPSILON = 0.5;
|
|
7
|
-
declare const AUTOSCROLLING_CLEAR_DELAY = 180;
|
|
8
|
-
declare const USER_SCROLL_KEYS: Set<string>;
|
|
9
|
-
type MessageScrollerMode = "following-bottom" | "free-scrolling" | "anchored-to-message" | "settling-jump";
|
|
10
|
-
type MessageScrollerDefaultScrollPosition = "start" | "end" | "last-anchor";
|
|
11
|
-
type MessageScrollerButtonDirection = "start" | "end";
|
|
12
|
-
type MessageScrollerScrollAlign = "start" | "center" | "end" | "nearest";
|
|
13
|
-
type MessageScrollerScrollOptions = {
|
|
14
|
-
align?: MessageScrollerScrollAlign;
|
|
15
|
-
behavior?: ScrollBehavior;
|
|
16
|
-
scrollMargin?: number;
|
|
17
|
-
};
|
|
18
|
-
type MessageScrollerScrollable = {
|
|
19
|
-
start: boolean;
|
|
20
|
-
end: boolean;
|
|
21
|
-
};
|
|
22
|
-
type MessageScrollerVisibilityState = {
|
|
23
|
-
currentAnchorId: string | null;
|
|
24
|
-
visibleMessageIds: string[];
|
|
25
|
-
};
|
|
26
|
-
type MessageScrollerProviderProps = {
|
|
27
|
-
children?: React.ReactNode;
|
|
28
|
-
autoScroll?: boolean;
|
|
29
|
-
defaultScrollPosition?: MessageScrollerDefaultScrollPosition;
|
|
30
|
-
scrollEdgeThreshold?: number;
|
|
31
|
-
scrollPreviousItemPeek?: number;
|
|
32
|
-
scrollMargin?: number;
|
|
33
|
-
};
|
|
34
|
-
type MessageScrollerProps = React.ComponentProps<"div">;
|
|
35
|
-
type MessageScrollerViewportProps = React.ComponentProps<"div"> & {
|
|
36
|
-
preserveScrollOnPrepend?: boolean;
|
|
37
|
-
};
|
|
38
|
-
type MessageScrollerContentProps = React.ComponentProps<"div"> & {
|
|
39
|
-
spacerClassName?: string;
|
|
40
|
-
};
|
|
41
|
-
type MessageScrollerItemProps = React.ComponentProps<"div"> & {
|
|
42
|
-
messageId?: string;
|
|
43
|
-
scrollAnchor?: boolean;
|
|
44
|
-
};
|
|
45
|
-
type MessageScrollerButtonRenderState = {
|
|
46
|
-
active: boolean;
|
|
47
|
-
direction: MessageScrollerButtonDirection;
|
|
48
|
-
};
|
|
49
|
-
type MessageScrollerButtonProps = UseRenderComponentProps<"button", MessageScrollerButtonRenderState> & {
|
|
50
|
-
behavior?: ScrollBehavior;
|
|
51
|
-
direction?: MessageScrollerButtonDirection;
|
|
52
|
-
};
|
|
53
|
-
type MessageScrollerStore<T> = {
|
|
54
|
-
getSnapshot: () => T;
|
|
55
|
-
setSnapshot: (nextSnapshot: T) => void;
|
|
56
|
-
subscribe: (listener: () => void) => () => void;
|
|
57
|
-
};
|
|
58
|
-
type MessageScrollerVisibilityStore = {
|
|
59
|
-
getSnapshot: () => MessageScrollerVisibilityState;
|
|
60
|
-
hasListeners: () => boolean;
|
|
61
|
-
setSnapshot: (nextSnapshot: MessageScrollerVisibilityState) => void;
|
|
62
|
-
subscribe: (listener: () => void, onFirstSubscribe: () => void, onLastUnsubscribe: () => void) => () => void;
|
|
63
|
-
};
|
|
64
|
-
type MessageScrollerRegisterMessage = (messageId: string, element: HTMLElement | null, removedElement?: HTMLElement | null) => void;
|
|
65
|
-
type MessageScrollerContextValue = {
|
|
66
|
-
handleContentChange: () => void;
|
|
67
|
-
handleResize: () => void;
|
|
68
|
-
observeVisibility: () => void;
|
|
69
|
-
preserveScrollOnPrependRef: React.RefObject<boolean>;
|
|
70
|
-
scrollToEnd: (options?: MessageScrollerScrollOptions) => boolean;
|
|
71
|
-
scrollToMessage: (messageId: string, options?: MessageScrollerScrollOptions) => boolean;
|
|
72
|
-
scrollToStart: (options?: MessageScrollerScrollOptions) => boolean;
|
|
73
|
-
setContentElement: (element: HTMLDivElement | null) => void;
|
|
74
|
-
setRootElement: (element: HTMLDivElement | null) => void;
|
|
75
|
-
setSpacerElement: (element: HTMLDivElement | null) => void;
|
|
76
|
-
setViewportElement: (element: HTMLDivElement | null) => void;
|
|
77
|
-
stateStore: MessageScrollerStore<MessageScrollerScrollable>;
|
|
78
|
-
syncAfterScroll: () => void;
|
|
79
|
-
unobserveVisibility: () => void;
|
|
80
|
-
userScrollIntent: () => void;
|
|
81
|
-
viewportRef: React.RefObject<HTMLDivElement | null>;
|
|
82
|
-
visibilityStore: MessageScrollerVisibilityStore;
|
|
83
|
-
};
|
|
84
|
-
declare const EMPTY_MESSAGE_SCROLLER_SCROLLABLE: MessageScrollerScrollable;
|
|
85
|
-
declare const EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE: MessageScrollerVisibilityState;
|
|
86
|
-
export { AUTOSCROLLING_CLEAR_DELAY, DEFAULT_SCROLL_EDGE_THRESHOLD, DEFAULT_SCROLL_MARGIN, DEFAULT_SCROLL_PREVIOUS_ITEM_PEEK, EMPTY_MESSAGE_SCROLLER_SCROLLABLE, EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE, SCROLL_POSITION_EPSILON, USER_SCROLL_KEYS, };
|
|
87
|
-
export type { MessageScrollerButtonDirection, MessageScrollerButtonProps, MessageScrollerButtonRenderState, MessageScrollerContentProps, MessageScrollerContextValue, MessageScrollerDefaultScrollPosition, MessageScrollerItemProps, MessageScrollerMode, MessageScrollerProps, MessageScrollerProviderProps, MessageScrollerRegisterMessage, MessageScrollerScrollAlign, MessageScrollerScrollOptions, MessageScrollerScrollable, MessageScrollerStore, MessageScrollerViewportProps, MessageScrollerVisibilityState, MessageScrollerVisibilityStore, };
|
|
88
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/message-scroller-primitive/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
// Vendored from @shadcn/react 0.2.1 (upstream github.com/shadcn-ui).
|
|
2
|
-
// Adapted only for repo import paths and formatting; not added as an npm dependency.
|
|
3
|
-
// Default scrollEdgeThreshold. Sub-pixel tolerance so edge detection does not
|
|
4
|
-
// flicker across engines that round scrollTop differently.
|
|
5
|
-
const DEFAULT_SCROLL_EDGE_THRESHOLD = 8;
|
|
6
|
-
// Default scrollPreviousItemPeek. Pixels of the previous item kept visible above
|
|
7
|
-
// a newly anchored row.
|
|
8
|
-
const DEFAULT_SCROLL_PREVIOUS_ITEM_PEEK = 64;
|
|
9
|
-
// Default scrollMargin for scrollToMessage and programmatic targets.
|
|
10
|
-
const DEFAULT_SCROLL_MARGIN = 0;
|
|
11
|
-
// Two fractional scrollTop values within this range are treated as equal, to
|
|
12
|
-
// absorb zoom and HiDPI rounding drift.
|
|
13
|
-
const SCROLL_POSITION_EPSILON = 0.5;
|
|
14
|
-
// How long (ms) data-autoscrolling stays set during a programmatic smooth scroll
|
|
15
|
-
// before clearing.
|
|
16
|
-
const AUTOSCROLLING_CLEAR_DELAY = 180;
|
|
17
|
-
// Viewport keys that count as deliberate scroll intent and release follow-bottom.
|
|
18
|
-
const USER_SCROLL_KEYS = new Set([
|
|
19
|
-
"ArrowDown",
|
|
20
|
-
"ArrowUp",
|
|
21
|
-
"End",
|
|
22
|
-
"Home",
|
|
23
|
-
"PageDown",
|
|
24
|
-
"PageUp",
|
|
25
|
-
" ", // Space key.
|
|
26
|
-
]);
|
|
27
|
-
// Initial MessageScrollerScrollable before measurement. Stable reference for the
|
|
28
|
-
// server and first-render snapshot.
|
|
29
|
-
const EMPTY_MESSAGE_SCROLLER_SCROLLABLE = {
|
|
30
|
-
start: false,
|
|
31
|
-
end: false,
|
|
32
|
-
};
|
|
33
|
-
// Shared empty array so empty visibility snapshots stay referentially stable.
|
|
34
|
-
const EMPTY_VISIBLE_MESSAGE_IDS = [];
|
|
35
|
-
// Initial MessageScrollerVisibilityState. Nothing tracked, no current anchor.
|
|
36
|
-
const EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE = {
|
|
37
|
-
currentAnchorId: null,
|
|
38
|
-
visibleMessageIds: EMPTY_VISIBLE_MESSAGE_IDS,
|
|
39
|
-
};
|
|
40
|
-
export { AUTOSCROLLING_CLEAR_DELAY, DEFAULT_SCROLL_EDGE_THRESHOLD, DEFAULT_SCROLL_MARGIN, DEFAULT_SCROLL_PREVIOUS_ITEM_PEEK, EMPTY_MESSAGE_SCROLLER_SCROLLABLE, EMPTY_MESSAGE_SCROLLER_VISIBILITY_STATE, SCROLL_POSITION_EPSILON, USER_SCROLL_KEYS, };
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { MessageScrollerScrollOptions } from "./types";
|
|
2
|
-
import type { MessageScrollerRefs } from "./use-message-scroller-refs";
|
|
3
|
-
declare function useMessageScrollerCommands({ refs, commitScrollState, scheduleStateCommit, scheduleVisibilitySync, }: {
|
|
4
|
-
refs: MessageScrollerRefs;
|
|
5
|
-
commitScrollState: () => void;
|
|
6
|
-
scheduleStateCommit: () => void;
|
|
7
|
-
scheduleVisibilitySync: () => void;
|
|
8
|
-
}): {
|
|
9
|
-
flushPendingScrollToMessage: () => boolean;
|
|
10
|
-
reanchorToAnchoredMessage: () => boolean;
|
|
11
|
-
scrollToElement: (element: HTMLElement, { align, behavior, scrollMargin, }?: MessageScrollerScrollOptions, { keepPreviousPeek, }?: {
|
|
12
|
-
keepPreviousPeek?: boolean;
|
|
13
|
-
}) => boolean;
|
|
14
|
-
scrollToEnd: ({ behavior }?: MessageScrollerScrollOptions) => boolean;
|
|
15
|
-
scrollToMessage: (messageId: string, options?: MessageScrollerScrollOptions) => boolean;
|
|
16
|
-
scrollToStart: ({ behavior }?: MessageScrollerScrollOptions) => boolean;
|
|
17
|
-
};
|
|
18
|
-
export { useMessageScrollerCommands };
|
|
19
|
-
//# sourceMappingURL=use-message-scroller-commands.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-message-scroller-commands.d.ts","sourceRoot":"","sources":["../../../src/lib/message-scroller-primitive/use-message-scroller-commands.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAKvE,iBAAS,0BAA0B,CAAC,EAClC,IAAI,EACJ,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACvB,EAAE;IACD,IAAI,EAAE,mBAAmB,CAAC;IAC1B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,sBAAsB,EAAE,MAAM,IAAI,CAAC;CACpC;;;+BA8Ic,WAAW,uCAKjB,4BAA4B,0BAG5B;QACD,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B;iCAjCqB,4BAA4B;iCAkGxC,MAAM,YAAY,4BAA4B;mCAnHlC,4BAA4B;EAsLvD;AAED,OAAO,EAAE,0BAA0B,EAAE,CAAC"}
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
// Vendored from @shadcn/react 0.2.1 (upstream github.com/shadcn-ui).
|
|
2
|
-
// Adapted only for repo import paths and formatting; not added as an npm dependency.
|
|
3
|
-
import * as React from "react";
|
|
4
|
-
import { getElementScrollTop, getElementViewportTop, getMaxScrollTop, getTailSpacerHeight, } from "./geometry.js";
|
|
5
|
-
import { AUTOSCROLLING_CLEAR_DELAY, SCROLL_POSITION_EPSILON } from "./types.js";
|
|
6
|
-
// Imperative scroll primitives, split from the controller so the move mechanics
|
|
7
|
-
// live apart from the policy that decides when to run them. Each command resolves
|
|
8
|
-
// a target scrollTop and returns false when the viewport is not mounted yet.
|
|
9
|
-
function useMessageScrollerCommands({ refs, commitScrollState, scheduleStateCommit, scheduleVisibilitySync, }) {
|
|
10
|
-
const { streamingTurnRef, autoScrollRef, autoscrollingRef, autoscrollingTimeoutRef, contentRef, defaultScrollPositionAppliedRef, itemCountRef, messageElementsRef, modeRef, pendingScrollToMessageRef, prependRestoreRef, scrollMarginRef, scrollPreviousItemPeekRef, spacerGapRef, spacerHeightRef, spacerRef, viewportRef, } = refs;
|
|
11
|
-
const setAutoScrolling = React.useCallback((autoscrolling) => {
|
|
12
|
-
if (autoscrollingTimeoutRef.current !== null) {
|
|
13
|
-
window.clearTimeout(autoscrollingTimeoutRef.current);
|
|
14
|
-
autoscrollingTimeoutRef.current = null;
|
|
15
|
-
}
|
|
16
|
-
if (autoscrollingRef.current !== autoscrolling) {
|
|
17
|
-
autoscrollingRef.current = autoscrolling;
|
|
18
|
-
commitScrollState();
|
|
19
|
-
}
|
|
20
|
-
if (autoscrolling) {
|
|
21
|
-
autoscrollingTimeoutRef.current = window.setTimeout(() => {
|
|
22
|
-
autoscrollingTimeoutRef.current = null;
|
|
23
|
-
autoscrollingRef.current = false;
|
|
24
|
-
commitScrollState();
|
|
25
|
-
}, AUTOSCROLLING_CLEAR_DELAY);
|
|
26
|
-
}
|
|
27
|
-
}, [commitScrollState]);
|
|
28
|
-
const setTailSpacerHeight = React.useCallback((height) => {
|
|
29
|
-
const spacer = spacerRef.current;
|
|
30
|
-
if (!spacer) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
const nextHeight = Math.max(0, Math.ceil(height));
|
|
34
|
-
if (spacerHeightRef.current === nextHeight) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
spacerHeightRef.current = nextHeight;
|
|
38
|
-
spacer.hidden = nextHeight === 0;
|
|
39
|
-
spacer.style.height = `${nextHeight}px`;
|
|
40
|
-
spacer.style.marginTop = nextHeight > 0 ? `${-spacerGapRef.current}px` : "";
|
|
41
|
-
}, []);
|
|
42
|
-
const scrollToPosition = React.useCallback((scrollTop, { behavior = "auto", autoscrolling = false, } = {}) => {
|
|
43
|
-
const viewport = viewportRef.current;
|
|
44
|
-
if (!viewport) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const nextScrollTop = Math.max(0, scrollTop);
|
|
48
|
-
if (Math.abs(viewport.scrollTop - nextScrollTop) <= SCROLL_POSITION_EPSILON) {
|
|
49
|
-
viewport.scrollTop = nextScrollTop;
|
|
50
|
-
commitScrollState();
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
if (autoscrolling) {
|
|
54
|
-
setAutoScrolling(true);
|
|
55
|
-
}
|
|
56
|
-
viewport.scrollTo({
|
|
57
|
-
top: nextScrollTop,
|
|
58
|
-
behavior,
|
|
59
|
-
});
|
|
60
|
-
scheduleStateCommit();
|
|
61
|
-
}, [commitScrollState, scheduleStateCommit, setAutoScrolling]);
|
|
62
|
-
const scrollToStart = React.useCallback(({ behavior = "auto" } = {}) => {
|
|
63
|
-
if (!viewportRef.current) {
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
setTailSpacerHeight(0);
|
|
67
|
-
streamingTurnRef.current = null;
|
|
68
|
-
modeRef.current = "free-scrolling";
|
|
69
|
-
scrollToPosition(0, { behavior });
|
|
70
|
-
scheduleVisibilitySync();
|
|
71
|
-
return true;
|
|
72
|
-
}, [scheduleVisibilitySync, scrollToPosition, setTailSpacerHeight]);
|
|
73
|
-
const scrollToEnd = React.useCallback(({ behavior = "auto" } = {}) => {
|
|
74
|
-
const viewport = viewportRef.current;
|
|
75
|
-
if (!viewport) {
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
setTailSpacerHeight(0);
|
|
79
|
-
streamingTurnRef.current = null;
|
|
80
|
-
modeRef.current = autoScrollRef.current ? "following-bottom" : "free-scrolling";
|
|
81
|
-
scrollToPosition(getMaxScrollTop(viewport), {
|
|
82
|
-
autoscrolling: true,
|
|
83
|
-
behavior,
|
|
84
|
-
});
|
|
85
|
-
scheduleVisibilitySync();
|
|
86
|
-
return true;
|
|
87
|
-
}, [scheduleVisibilitySync, scrollToPosition, setTailSpacerHeight]);
|
|
88
|
-
const scrollToElement = React.useCallback((element, { align = "start", behavior = "auto", scrollMargin = scrollMarginRef.current, } = {}, { keepPreviousPeek = false, } = {}) => {
|
|
89
|
-
const content = contentRef.current;
|
|
90
|
-
const viewport = viewportRef.current;
|
|
91
|
-
if (!content || !viewport || !content.contains(element)) {
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
const scrollTop = getElementScrollTop({
|
|
95
|
-
align,
|
|
96
|
-
element,
|
|
97
|
-
scrollMargin: keepPreviousPeek
|
|
98
|
-
? scrollMargin + scrollPreviousItemPeekRef.current
|
|
99
|
-
: scrollMargin,
|
|
100
|
-
spacer: spacerRef.current,
|
|
101
|
-
viewport,
|
|
102
|
-
});
|
|
103
|
-
const nextSpacerHeight = getTailSpacerHeight({
|
|
104
|
-
content,
|
|
105
|
-
scrollTop,
|
|
106
|
-
spacer: spacerRef.current,
|
|
107
|
-
viewport,
|
|
108
|
-
});
|
|
109
|
-
setTailSpacerHeight(nextSpacerHeight);
|
|
110
|
-
// Seed the prepend anchor with the jump target so a prepend that lands
|
|
111
|
-
// before this scroll settles still preserves the jumped-to row; once it
|
|
112
|
-
// settles, syncAfterScroll's capturePrependAnchor re-captures it from the
|
|
113
|
-
// first visible row.
|
|
114
|
-
prependRestoreRef.current = {
|
|
115
|
-
element,
|
|
116
|
-
viewportTop: getElementViewportTop(element, viewport),
|
|
117
|
-
};
|
|
118
|
-
modeRef.current = keepPreviousPeek ? "anchored-to-message" : "settling-jump";
|
|
119
|
-
streamingTurnRef.current = keepPreviousPeek ? element : null;
|
|
120
|
-
scrollToPosition(scrollTop, { behavior });
|
|
121
|
-
scheduleVisibilitySync();
|
|
122
|
-
return true;
|
|
123
|
-
}, [scheduleVisibilitySync, scrollToPosition, setTailSpacerHeight]);
|
|
124
|
-
const reanchorToAnchoredMessage = React.useCallback(() => {
|
|
125
|
-
const element = streamingTurnRef.current;
|
|
126
|
-
if (!element || !element.isConnected || modeRef.current !== "anchored-to-message") {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
// Re-run the placement so the tail spacer is recomputed for the new content
|
|
130
|
-
// height and the turn is held at the reading line.
|
|
131
|
-
return scrollToElement(element, { align: "start" }, { keepPreviousPeek: true });
|
|
132
|
-
}, [scrollToElement]);
|
|
133
|
-
// The target row may not be mounted yet (e.g. an async-loaded transcript).
|
|
134
|
-
// When it is missing the request is queued in pendingScrollToMessageRef and
|
|
135
|
-
// flushed later — on registerMessage for that id, or on the next content
|
|
136
|
-
// change. An explicit jump also marks the mount default as applied, so
|
|
137
|
-
// defaultScrollPosition does not override it.
|
|
138
|
-
const scrollToMessage = React.useCallback((messageId, options) => {
|
|
139
|
-
const element = messageElementsRef.current.get(messageId);
|
|
140
|
-
if (!element) {
|
|
141
|
-
if (itemCountRef.current === 0) {
|
|
142
|
-
pendingScrollToMessageRef.current = {
|
|
143
|
-
messageId,
|
|
144
|
-
options,
|
|
145
|
-
};
|
|
146
|
-
defaultScrollPositionAppliedRef.current = true;
|
|
147
|
-
return true;
|
|
148
|
-
}
|
|
149
|
-
return false;
|
|
150
|
-
}
|
|
151
|
-
defaultScrollPositionAppliedRef.current = true;
|
|
152
|
-
if (scrollToElement(element, options)) {
|
|
153
|
-
pendingScrollToMessageRef.current = null;
|
|
154
|
-
return true;
|
|
155
|
-
}
|
|
156
|
-
pendingScrollToMessageRef.current = {
|
|
157
|
-
messageId,
|
|
158
|
-
options,
|
|
159
|
-
};
|
|
160
|
-
return true;
|
|
161
|
-
}, [scrollToElement]);
|
|
162
|
-
const flushPendingScrollToMessage = React.useCallback(() => {
|
|
163
|
-
const pending = pendingScrollToMessageRef.current;
|
|
164
|
-
if (!pending) {
|
|
165
|
-
return false;
|
|
166
|
-
}
|
|
167
|
-
const element = messageElementsRef.current.get(pending.messageId);
|
|
168
|
-
if (!element) {
|
|
169
|
-
return false;
|
|
170
|
-
}
|
|
171
|
-
const handled = scrollToElement(element, pending.options);
|
|
172
|
-
if (!handled) {
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
pendingScrollToMessageRef.current = null;
|
|
176
|
-
defaultScrollPositionAppliedRef.current = true;
|
|
177
|
-
return true;
|
|
178
|
-
}, [scrollToElement]);
|
|
179
|
-
return {
|
|
180
|
-
flushPendingScrollToMessage,
|
|
181
|
-
reanchorToAnchoredMessage,
|
|
182
|
-
scrollToElement,
|
|
183
|
-
scrollToEnd,
|
|
184
|
-
scrollToMessage,
|
|
185
|
-
scrollToStart,
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
export { useMessageScrollerCommands };
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { MessageScrollerContextValue, MessageScrollerProviderProps, MessageScrollerRegisterMessage } from "./types";
|
|
2
|
-
declare function useMessageScrollerController({ autoScroll, defaultScrollPosition, scrollEdgeThreshold, scrollPreviousItemPeek, scrollMargin, }: MessageScrollerProviderProps): {
|
|
3
|
-
context: MessageScrollerContextValue;
|
|
4
|
-
registerMessage: MessageScrollerRegisterMessage;
|
|
5
|
-
};
|
|
6
|
-
export { useMessageScrollerController };
|
|
7
|
-
//# sourceMappingURL=use-message-scroller-controller.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-message-scroller-controller.d.ts","sourceRoot":"","sources":["../../../src/lib/message-scroller-primitive/use-message-scroller-controller.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAE/B,MAAM,SAAS,CAAC;AAqBjB,iBAAS,4BAA4B,CAAC,EACpC,UAAkB,EAClB,qBAA6B,EAC7B,mBAAmD,EACnD,sBAA0D,EAC1D,YAAoC,GACrC,EAAE,4BAA4B;;;EA8nB9B;AAED,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
|