@50arms/ui 0.0.0-stage → 35.1.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/LICENSE +21 -0
- package/README.md +193 -2
- package/dist/components/Accordion.js +68 -0
- package/dist/components/Accordion.js.map +1 -0
- package/dist/components/AgentWorkingSpinner.js +46 -0
- package/dist/components/AgentWorkingSpinner.js.map +1 -0
- package/dist/components/AppShell.js +228 -0
- package/dist/components/AppShell.js.map +1 -0
- package/dist/components/Attention.js +130 -0
- package/dist/components/Attention.js.map +1 -0
- package/dist/components/Avatar.js +99 -0
- package/dist/components/Avatar.js.map +1 -0
- package/dist/components/Badge.js +143 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Board.js +292 -0
- package/dist/components/Board.js.map +1 -0
- package/dist/components/Button.js +327 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Callout.js +106 -0
- package/dist/components/Callout.js.map +1 -0
- package/dist/components/Card.js +140 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/Choice.js +361 -0
- package/dist/components/Choice.js.map +1 -0
- package/dist/components/CodeEditor.js +384 -0
- package/dist/components/CodeEditor.js.map +1 -0
- package/dist/components/ColorPicker.js +174 -0
- package/dist/components/ColorPicker.js.map +1 -0
- package/dist/components/Combobox.js +212 -0
- package/dist/components/Combobox.js.map +1 -0
- package/dist/components/CommandPalette.js +163 -0
- package/dist/components/CommandPalette.js.map +1 -0
- package/dist/components/ConcentricRing.js +60 -0
- package/dist/components/ConcentricRing.js.map +1 -0
- package/dist/components/ConnectionCard.js +98 -0
- package/dist/components/ConnectionCard.js.map +1 -0
- package/dist/components/ContextItemRow.js +49 -0
- package/dist/components/ContextItemRow.js.map +1 -0
- package/dist/components/CopyValue.js +57 -0
- package/dist/components/CopyValue.js.map +1 -0
- package/dist/components/CountBadge.js +26 -0
- package/dist/components/CountBadge.js.map +1 -0
- package/dist/components/DateCalendar.js +156 -0
- package/dist/components/DateCalendar.js.map +1 -0
- package/dist/components/DateField.js +166 -0
- package/dist/components/DateField.js.map +1 -0
- package/dist/components/DatePicker.js +56 -0
- package/dist/components/DatePicker.js.map +1 -0
- package/dist/components/DateTimeText.js +19 -0
- package/dist/components/DateTimeText.js.map +1 -0
- package/dist/components/DescriptionList.js +25 -0
- package/dist/components/DescriptionList.js.map +1 -0
- package/dist/components/Dialog.js +332 -0
- package/dist/components/Dialog.js.map +1 -0
- package/dist/components/DragDrop.js +395 -0
- package/dist/components/DragDrop.js.map +1 -0
- package/dist/components/Drawer.js +100 -0
- package/dist/components/Drawer.js.map +1 -0
- package/dist/components/EditGutter.js +110 -0
- package/dist/components/EditGutter.js.map +1 -0
- package/dist/components/EmojiPicker.js +174 -0
- package/dist/components/EmojiPicker.js.map +1 -0
- package/dist/components/ErrorBoundary.js +47 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/Field.js +115 -0
- package/dist/components/Field.js.map +1 -0
- package/dist/components/FileUpload.js +128 -0
- package/dist/components/FileUpload.js.map +1 -0
- package/dist/components/FilterMenu.js +256 -0
- package/dist/components/FilterMenu.js.map +1 -0
- package/dist/components/GatesSection.js +79 -0
- package/dist/components/GatesSection.js.map +1 -0
- package/dist/components/Icon.js +50 -0
- package/dist/components/Icon.js.map +1 -0
- package/dist/components/IconButton.js +59 -0
- package/dist/components/IconButton.js.map +1 -0
- package/dist/components/IconStack.js +69 -0
- package/dist/components/IconStack.js.map +1 -0
- package/dist/components/ImageUploadField.js +146 -0
- package/dist/components/ImageUploadField.js.map +1 -0
- package/dist/components/InlineEdit.js +432 -0
- package/dist/components/InlineEdit.js.map +1 -0
- package/dist/components/InlineMarkdownEdit.js +184 -0
- package/dist/components/InlineMarkdownEdit.js.map +1 -0
- package/dist/components/Input.js +156 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/LegalDocument.js +155 -0
- package/dist/components/LegalDocument.js.map +1 -0
- package/dist/components/LineDiff.js +95 -0
- package/dist/components/LineDiff.js.map +1 -0
- package/dist/components/ListHeader.js +72 -0
- package/dist/components/ListHeader.js.map +1 -0
- package/dist/components/Loading.js +111 -0
- package/dist/components/Loading.js.map +1 -0
- package/dist/components/Markdown.js +28 -0
- package/dist/components/Markdown.js.map +1 -0
- package/dist/components/MarkdownEditor.js +467 -0
- package/dist/components/MarkdownEditor.js.map +1 -0
- package/dist/components/Menu.js +185 -0
- package/dist/components/Menu.js.map +1 -0
- package/dist/components/Navigation.js +87 -0
- package/dist/components/Navigation.js.map +1 -0
- package/dist/components/NumberInput.js +119 -0
- package/dist/components/NumberInput.js.map +1 -0
- package/dist/components/OTPInput.js +71 -0
- package/dist/components/OTPInput.js.map +1 -0
- package/dist/components/OrderedEntityManager.js +170 -0
- package/dist/components/OrderedEntityManager.js.map +1 -0
- package/dist/components/PagedWindowList.js +74 -0
- package/dist/components/PagedWindowList.js.map +1 -0
- package/dist/components/PaginationBar.js +95 -0
- package/dist/components/PaginationBar.js.map +1 -0
- package/dist/components/Panel.js +396 -0
- package/dist/components/Panel.js.map +1 -0
- package/dist/components/PasswordInput.js +32 -0
- package/dist/components/PasswordInput.js.map +1 -0
- package/dist/components/PasswordRequirements.js +25 -0
- package/dist/components/PasswordRequirements.js.map +1 -0
- package/dist/components/PatchDiff.js +96 -0
- package/dist/components/PatchDiff.js.map +1 -0
- package/dist/components/PendingVeil.js +18 -0
- package/dist/components/PendingVeil.js.map +1 -0
- package/dist/components/Popover.js +214 -0
- package/dist/components/Popover.js.map +1 -0
- package/dist/components/Progress.js +419 -0
- package/dist/components/Progress.js.map +1 -0
- package/dist/components/RatingScale.js +89 -0
- package/dist/components/RatingScale.js.map +1 -0
- package/dist/components/ReadMore.js +232 -0
- package/dist/components/ReadMore.js.map +1 -0
- package/dist/components/RecordCard.js +202 -0
- package/dist/components/RecordCard.js.map +1 -0
- package/dist/components/RelativeTime.js +29 -0
- package/dist/components/RelativeTime.js.map +1 -0
- package/dist/components/SandboxedFrame.js +135 -0
- package/dist/components/SandboxedFrame.js.map +1 -0
- package/dist/components/SearchInput.js +38 -0
- package/dist/components/SearchInput.js.map +1 -0
- package/dist/components/SecretField.js +228 -0
- package/dist/components/SecretField.js.map +1 -0
- package/dist/components/SectionNav.js +42 -0
- package/dist/components/SectionNav.js.map +1 -0
- package/dist/components/Select.js +172 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/SequenceDiagram.js +109 -0
- package/dist/components/SequenceDiagram.js.map +1 -0
- package/dist/components/SettingRow.js +124 -0
- package/dist/components/SettingRow.js.map +1 -0
- package/dist/components/SignOffRings.js +36 -0
- package/dist/components/SignOffRings.js.map +1 -0
- package/dist/components/Slider.js +353 -0
- package/dist/components/Slider.js.map +1 -0
- package/dist/components/SolutionChoice.js +89 -0
- package/dist/components/SolutionChoice.js.map +1 -0
- package/dist/components/SortMenu.js +75 -0
- package/dist/components/SortMenu.js.map +1 -0
- package/dist/components/Spinner.js +42 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/Stat.js +148 -0
- package/dist/components/Stat.js.map +1 -0
- package/dist/components/StatusSelect.js +119 -0
- package/dist/components/StatusSelect.js.map +1 -0
- package/dist/components/Surface.js +210 -0
- package/dist/components/Surface.js.map +1 -0
- package/dist/components/Table.js +300 -0
- package/dist/components/Table.js.map +1 -0
- package/dist/components/Tabs.js +288 -0
- package/dist/components/Tabs.js.map +1 -0
- package/dist/components/ThemeMenu.js +198 -0
- package/dist/components/ThemeMenu.js.map +1 -0
- package/dist/components/Toast.js +217 -0
- package/dist/components/Toast.js.map +1 -0
- package/dist/components/Toggle.js +147 -0
- package/dist/components/Toggle.js.map +1 -0
- package/dist/components/ToggleMatrix.js +157 -0
- package/dist/components/ToggleMatrix.js.map +1 -0
- package/dist/components/Tree.js +125 -0
- package/dist/components/Tree.js.map +1 -0
- package/dist/components/TriStateSwitch.js +111 -0
- package/dist/components/TriStateSwitch.js.map +1 -0
- package/dist/components/VideoPlayer.js +64 -0
- package/dist/components/VideoPlayer.js.map +1 -0
- package/dist/components/auth/AcceptInvitationCard.js +110 -0
- package/dist/components/auth/AcceptInvitationCard.js.map +1 -0
- package/dist/components/auth/AuthLayout.js +18 -0
- package/dist/components/auth/AuthLayout.js.map +1 -0
- package/dist/components/auth/ForgotPasswordForm.js +44 -0
- package/dist/components/auth/ForgotPasswordForm.js.map +1 -0
- package/dist/components/auth/LoginForm.js +76 -0
- package/dist/components/auth/LoginForm.js.map +1 -0
- package/dist/components/auth/ResetPasswordForm.js +69 -0
- package/dist/components/auth/ResetPasswordForm.js.map +1 -0
- package/dist/components/auth/SignInProviders.js +45 -0
- package/dist/components/auth/SignInProviders.js.map +1 -0
- package/dist/components/auth/SignupCard.js +204 -0
- package/dist/components/auth/SignupCard.js.map +1 -0
- package/dist/components/auth/TermsAcceptance.js +43 -0
- package/dist/components/auth/TermsAcceptance.js.map +1 -0
- package/dist/components/board/context.js +32 -0
- package/dist/components/board/context.js.map +1 -0
- package/dist/components/board/recipe.js +94 -0
- package/dist/components/board/recipe.js.map +1 -0
- package/dist/components/calendar/CalendarMonth.js +299 -0
- package/dist/components/calendar/CalendarMonth.js.map +1 -0
- package/dist/components/calendar/CalendarTimeGrid.js +430 -0
- package/dist/components/calendar/CalendarTimeGrid.js.map +1 -0
- package/dist/components/calendar/EventActions.js +101 -0
- package/dist/components/calendar/EventActions.js.map +1 -0
- package/dist/components/calendar/format.js +73 -0
- package/dist/components/calendar/format.js.map +1 -0
- package/dist/components/calendar/palette.js +31 -0
- package/dist/components/calendar/palette.js.map +1 -0
- package/dist/components/calendar/use-calendar-drag.js +149 -0
- package/dist/components/calendar/use-calendar-drag.js.map +1 -0
- package/dist/components/calendar/use-event-keyboard.js +87 -0
- package/dist/components/calendar/use-event-keyboard.js.map +1 -0
- package/dist/components/calendar/use-grid-navigation.js +79 -0
- package/dist/components/calendar/use-grid-navigation.js.map +1 -0
- package/dist/components/calendar/use-now.js +27 -0
- package/dist/components/calendar/use-now.js.map +1 -0
- package/dist/components/card-face/AcRingGlyph.js +39 -0
- package/dist/components/card-face/AcRingGlyph.js.map +1 -0
- package/dist/components/card-face/BoardCardAgentSlot.js +17 -0
- package/dist/components/card-face/BoardCardAgentSlot.js.map +1 -0
- package/dist/components/card-face/CardFace.js +109 -0
- package/dist/components/card-face/CardFace.js.map +1 -0
- package/dist/components/card-face/CardTypeBadge.js +17 -0
- package/dist/components/card-face/CardTypeBadge.js.map +1 -0
- package/dist/components/card-face/EffortBadge.js +11 -0
- package/dist/components/card-face/EffortBadge.js.map +1 -0
- package/dist/components/card-face/GateRingGlyph.js +31 -0
- package/dist/components/card-face/GateRingGlyph.js.map +1 -0
- package/dist/components/card-face/OverflowRow.js +70 -0
- package/dist/components/card-face/OverflowRow.js.map +1 -0
- package/dist/components/card-face/TapTip.js +32 -0
- package/dist/components/card-face/TapTip.js.map +1 -0
- package/dist/components/card-face/hit-area.js +6 -0
- package/dist/components/card-face/hit-area.js.map +1 -0
- package/dist/components/card-face/vocabulary.js +102 -0
- package/dist/components/card-face/vocabulary.js.map +1 -0
- package/dist/components/chart/BarList.js +78 -0
- package/dist/components/chart/BarList.js.map +1 -0
- package/dist/components/chart/LineChart.js +310 -0
- package/dist/components/chart/LineChart.js.map +1 -0
- package/dist/components/chart/ShareBar.js +141 -0
- package/dist/components/chart/ShareBar.js.map +1 -0
- package/dist/components/chart/TimeSeriesChart.js +305 -0
- package/dist/components/chart/TimeSeriesChart.js.map +1 -0
- package/dist/components/chart/label-metrics.js +17 -0
- package/dist/components/chart/label-metrics.js.map +1 -0
- package/dist/components/chart/line-chart-axis.js +38 -0
- package/dist/components/chart/line-chart-axis.js.map +1 -0
- package/dist/components/chart/line-chart-scale.js +132 -0
- package/dist/components/chart/line-chart-scale.js.map +1 -0
- package/dist/components/chart/line-series-style.js +22 -0
- package/dist/components/chart/line-series-style.js.map +1 -0
- package/dist/components/chart/share-bar-labels.js +14 -0
- package/dist/components/chart/share-bar-labels.js.map +1 -0
- package/dist/components/chart/shared.js +157 -0
- package/dist/components/chart/shared.js.map +1 -0
- package/dist/components/chart/time-series-scale.js +51 -0
- package/dist/components/chart/time-series-scale.js.map +1 -0
- package/dist/components/chat/Attachment.js +316 -0
- package/dist/components/chat/Attachment.js.map +1 -0
- package/dist/components/chat/Chat.js +171 -0
- package/dist/components/chat/Chat.js.map +1 -0
- package/dist/components/chat/Composer.js +274 -0
- package/dist/components/chat/Composer.js.map +1 -0
- package/dist/components/chat/ContextMeter.js +202 -0
- package/dist/components/chat/ContextMeter.js.map +1 -0
- package/dist/components/chat/EffortControl.js +116 -0
- package/dist/components/chat/EffortControl.js.map +1 -0
- package/dist/components/chat/FileCover.js +78 -0
- package/dist/components/chat/FileCover.js.map +1 -0
- package/dist/components/chat/Message.js +356 -0
- package/dist/components/chat/Message.js.map +1 -0
- package/dist/components/chat/MessageScroller.js +104 -0
- package/dist/components/chat/MessageScroller.js.map +1 -0
- package/dist/components/chat/ModelSelector.js +156 -0
- package/dist/components/chat/ModelSelector.js.map +1 -0
- package/dist/components/chat/StreamingMarkdown.js +42 -0
- package/dist/components/chat/StreamingMarkdown.js.map +1 -0
- package/dist/components/chat/download-file.js +9 -0
- package/dist/components/chat/download-file.js.map +1 -0
- package/dist/components/chat/file-icon.js +39 -0
- package/dist/components/chat/file-icon.js.map +1 -0
- package/dist/components/checklist/StatusChecklist.js +103 -0
- package/dist/components/checklist/StatusChecklist.js.map +1 -0
- package/dist/components/checklist/tally.js +29 -0
- package/dist/components/checklist/tally.js.map +1 -0
- package/dist/components/code-editor/context.js +13 -0
- package/dist/components/code-editor/context.js.map +1 -0
- package/dist/components/code-editor/editing.js +93 -0
- package/dist/components/code-editor/editing.js.map +1 -0
- package/dist/components/code-editor/highlight.js +27 -0
- package/dist/components/code-editor/highlight.js.map +1 -0
- package/dist/components/code-editor/recipe.js +75 -0
- package/dist/components/code-editor/recipe.js.map +1 -0
- package/dist/components/date-timeline/DateTimeline.js +358 -0
- package/dist/components/date-timeline/DateTimeline.js.map +1 -0
- package/dist/components/date-timeline/TimelineRow.js +100 -0
- package/dist/components/date-timeline/TimelineRow.js.map +1 -0
- package/dist/components/date-timeline/useBarDrag.js +44 -0
- package/dist/components/date-timeline/useBarDrag.js.map +1 -0
- package/dist/components/date-timeline/useMarkerDrag.js +40 -0
- package/dist/components/date-timeline/useMarkerDrag.js.map +1 -0
- package/dist/components/date-timeline/useTimelineZoom.js +44 -0
- package/dist/components/date-timeline/useTimelineZoom.js.map +1 -0
- package/dist/components/drag-drop/context.js +37 -0
- package/dist/components/drag-drop/context.js.map +1 -0
- package/dist/components/drag-drop/recipe.js +270 -0
- package/dist/components/drag-drop/recipe.js.map +1 -0
- package/dist/components/drag-drop/shift.js +157 -0
- package/dist/components/drag-drop/shift.js.map +1 -0
- package/dist/components/edit/activation.js +10 -0
- package/dist/components/edit/activation.js.map +1 -0
- package/dist/components/edit/outcome.js +47 -0
- package/dist/components/edit/outcome.js.map +1 -0
- package/dist/components/edit/use-edit-session.js +146 -0
- package/dist/components/edit/use-edit-session.js.map +1 -0
- package/dist/components/file-viewer/FileViewer.js +97 -0
- package/dist/components/file-viewer/FileViewer.js.map +1 -0
- package/dist/components/file-viewer/PageNumberJumpField.js +47 -0
- package/dist/components/file-viewer/PageNumberJumpField.js.map +1 -0
- package/dist/components/file-viewer/ViewerControls.js +122 -0
- package/dist/components/file-viewer/ViewerControls.js.map +1 -0
- package/dist/components/file-viewer/ViewerRail.js +57 -0
- package/dist/components/file-viewer/ViewerRail.js.map +1 -0
- package/dist/components/file-viewer/ViewerStage.js +112 -0
- package/dist/components/file-viewer/ViewerStage.js.map +1 -0
- package/dist/components/file-viewer/frames.js +37 -0
- package/dist/components/file-viewer/frames.js.map +1 -0
- package/dist/components/file-viewer/use-frame-cursor.js +32 -0
- package/dist/components/file-viewer/use-frame-cursor.js.map +1 -0
- package/dist/components/file-viewer/use-viewer-keys.js +50 -0
- package/dist/components/file-viewer/use-viewer-keys.js.map +1 -0
- package/dist/components/file-viewer/use-viewer-zoom.js +68 -0
- package/dist/components/file-viewer/use-viewer-zoom.js.map +1 -0
- package/dist/components/focus-web/FocusWeb.js +322 -0
- package/dist/components/focus-web/FocusWeb.js.map +1 -0
- package/dist/components/focus-web/layout.js +34 -0
- package/dist/components/focus-web/layout.js.map +1 -0
- package/dist/components/graph-explorer/GraphExplorer.js +441 -0
- package/dist/components/graph-explorer/GraphExplorer.js.map +1 -0
- package/dist/components/graph-explorer/camera-math.js +102 -0
- package/dist/components/graph-explorer/camera-math.js.map +1 -0
- package/dist/components/graph-explorer/tree-layout.js +103 -0
- package/dist/components/graph-explorer/tree-layout.js.map +1 -0
- package/dist/components/graph-explorer/use-camera.js +82 -0
- package/dist/components/graph-explorer/use-camera.js.map +1 -0
- package/dist/components/graph-explorer/viewport-gesture.js +107 -0
- package/dist/components/graph-explorer/viewport-gesture.js.map +1 -0
- package/dist/components/kanban/KanbanBoard.js +219 -0
- package/dist/components/kanban/KanbanBoard.js.map +1 -0
- package/dist/components/kanban/recipe.js +144 -0
- package/dist/components/kanban/recipe.js.map +1 -0
- package/dist/components/markdown/Affordances.js +398 -0
- package/dist/components/markdown/Affordances.js.map +1 -0
- package/dist/components/markdown/AttachmentStrip.js +128 -0
- package/dist/components/markdown/AttachmentStrip.js.map +1 -0
- package/dist/components/markdown/ImageUpload.js +45 -0
- package/dist/components/markdown/ImageUpload.js.map +1 -0
- package/dist/components/media-error.js +7 -0
- package/dist/components/media-error.js.map +1 -0
- package/dist/components/nav-sections.js +61 -0
- package/dist/components/nav-sections.js.map +1 -0
- package/dist/components/node-canvas/NodeCanvas.js +384 -0
- package/dist/components/node-canvas/NodeCanvas.js.map +1 -0
- package/dist/components/node-canvas/layout.js +237 -0
- package/dist/components/node-canvas/layout.js.map +1 -0
- package/dist/components/node-canvas/use-canvas-gestures.js +143 -0
- package/dist/components/node-canvas/use-canvas-gestures.js.map +1 -0
- package/dist/components/openapi/OpenApiViewer.js +137 -0
- package/dist/components/openapi/OpenApiViewer.js.map +1 -0
- package/dist/components/openapi/OperationCard.js +145 -0
- package/dist/components/openapi/OperationCard.js.map +1 -0
- package/dist/components/openapi/SchemaView.js +68 -0
- package/dist/components/openapi/SchemaView.js.map +1 -0
- package/dist/components/openapi/resolve.js +102 -0
- package/dist/components/openapi/resolve.js.map +1 -0
- package/dist/components/openapi/types.js +5 -0
- package/dist/components/openapi/types.js.map +1 -0
- package/dist/components/overlay-shell.js +29 -0
- package/dist/components/overlay-shell.js.map +1 -0
- package/dist/components/overlay-stack.js +27 -0
- package/dist/components/overlay-stack.js.map +1 -0
- package/dist/components/paged-window/PageBlock.js +50 -0
- package/dist/components/paged-window/PageBlock.js.map +1 -0
- package/dist/components/provenance/ConfidenceBar.js +60 -0
- package/dist/components/provenance/ConfidenceBar.js.map +1 -0
- package/dist/components/provenance/ConfidenceMeter.js +36 -0
- package/dist/components/provenance/ConfidenceMeter.js.map +1 -0
- package/dist/components/provenance/ConfidenceReadout.js +31 -0
- package/dist/components/provenance/ConfidenceReadout.js.map +1 -0
- package/dist/components/provenance/ProvenanceBadge.js +44 -0
- package/dist/components/provenance/ProvenanceBadge.js.map +1 -0
- package/dist/components/provenance/ProvenanceDetail.js +114 -0
- package/dist/components/provenance/ProvenanceDetail.js.map +1 -0
- package/dist/components/provenance/ProvenanceDisclosure.js +111 -0
- package/dist/components/provenance/ProvenanceDisclosure.js.map +1 -0
- package/dist/components/provenance/absence.js +31 -0
- package/dist/components/provenance/absence.js.map +1 -0
- package/dist/components/provenance/types.js +30 -0
- package/dist/components/provenance/types.js.map +1 -0
- package/dist/components/rbac/AccessRequestPanel.js +153 -0
- package/dist/components/rbac/AccessRequestPanel.js.map +1 -0
- package/dist/components/rbac/AccountMenu.js +118 -0
- package/dist/components/rbac/AccountMenu.js.map +1 -0
- package/dist/components/rbac/AgentKeysList.js +20 -0
- package/dist/components/rbac/AgentKeysList.js.map +1 -0
- package/dist/components/rbac/ApiKeysPanel.js +172 -0
- package/dist/components/rbac/ApiKeysPanel.js.map +1 -0
- package/dist/components/rbac/ApiKeysTable.js +167 -0
- package/dist/components/rbac/ApiKeysTable.js.map +1 -0
- package/dist/components/rbac/Brand.js +13 -0
- package/dist/components/rbac/Brand.js.map +1 -0
- package/dist/components/rbac/Can.js +18 -0
- package/dist/components/rbac/Can.js.map +1 -0
- package/dist/components/rbac/ChangePasswordForm.js +73 -0
- package/dist/components/rbac/ChangePasswordForm.js.map +1 -0
- package/dist/components/rbac/DangerZone.js +27 -0
- package/dist/components/rbac/DangerZone.js.map +1 -0
- package/dist/components/rbac/DevToolsPopover.js +140 -0
- package/dist/components/rbac/DevToolsPopover.js.map +1 -0
- package/dist/components/rbac/EndedLine.js +24 -0
- package/dist/components/rbac/EndedLine.js.map +1 -0
- package/dist/components/rbac/InvitationsList.js +148 -0
- package/dist/components/rbac/InvitationsList.js.map +1 -0
- package/dist/components/rbac/InviteMembersDialog.js +97 -0
- package/dist/components/rbac/InviteMembersDialog.js.map +1 -0
- package/dist/components/rbac/MembersPanel.js +138 -0
- package/dist/components/rbac/MembersPanel.js.map +1 -0
- package/dist/components/rbac/PermissionRequestPanel.js +141 -0
- package/dist/components/rbac/PermissionRequestPanel.js.map +1 -0
- package/dist/components/rbac/ProfileForm.js +86 -0
- package/dist/components/rbac/ProfileForm.js.map +1 -0
- package/dist/components/rbac/ProfilePage.js +58 -0
- package/dist/components/rbac/ProfilePage.js.map +1 -0
- package/dist/components/rbac/RBACProvider.js +82 -0
- package/dist/components/rbac/RBACProvider.js.map +1 -0
- package/dist/components/rbac/RoleEditorDialog.js +90 -0
- package/dist/components/rbac/RoleEditorDialog.js.map +1 -0
- package/dist/components/rbac/RoleKeyPicker.js +77 -0
- package/dist/components/rbac/RoleKeyPicker.js.map +1 -0
- package/dist/components/rbac/RolePermissionMatrix.js +37 -0
- package/dist/components/rbac/RolePermissionMatrix.js.map +1 -0
- package/dist/components/rbac/RolesPermissionsPage.js +142 -0
- package/dist/components/rbac/RolesPermissionsPage.js.map +1 -0
- package/dist/components/rbac/SessionsList.js +146 -0
- package/dist/components/rbac/SessionsList.js.map +1 -0
- package/dist/components/rbac/TeamSettingsForm.js +69 -0
- package/dist/components/rbac/TeamSettingsForm.js.map +1 -0
- package/dist/components/rbac/TeamSwitcher.js +66 -0
- package/dist/components/rbac/TeamSwitcher.js.map +1 -0
- package/dist/components/rbac/approvalPanelParts.js +130 -0
- package/dist/components/rbac/approvalPanelParts.js.map +1 -0
- package/dist/components/rbac/permissionSections.js +8 -0
- package/dist/components/rbac/permissionSections.js.map +1 -0
- package/dist/components/rbac/stagedForm.js +42 -0
- package/dist/components/rbac/stagedForm.js.map +1 -0
- package/dist/components/rbac/useStagedImage.js +21 -0
- package/dist/components/rbac/useStagedImage.js.map +1 -0
- package/dist/components/roadmap/PhaseManager.js +48 -0
- package/dist/components/roadmap/PhaseManager.js.map +1 -0
- package/dist/components/roadmap/RoadmapItemCard.js +96 -0
- package/dist/components/roadmap/RoadmapItemCard.js.map +1 -0
- package/dist/components/roadmap/RoadmapPage.js +34 -0
- package/dist/components/roadmap/RoadmapPage.js.map +1 -0
- package/dist/components/roadmap/RoadmapSwimlaneBoard.js +91 -0
- package/dist/components/roadmap/RoadmapSwimlaneBoard.js.map +1 -0
- package/dist/components/roadmap/TrackManager.js +58 -0
- package/dist/components/roadmap/TrackManager.js.map +1 -0
- package/dist/components/roadmap/UseCaseCard.js +93 -0
- package/dist/components/roadmap/UseCaseCard.js.map +1 -0
- package/dist/components/roadmap/UseCaseLedgerPage.js +98 -0
- package/dist/components/roadmap/UseCaseLedgerPage.js.map +1 -0
- package/dist/components/roadmap/chip-tones.js +9 -0
- package/dist/components/roadmap/chip-tones.js.map +1 -0
- package/dist/components/roadmap/derive.js +28 -0
- package/dist/components/roadmap/derive.js.map +1 -0
- package/dist/components/stepper/Stepper.js +276 -0
- package/dist/components/stepper/Stepper.js.map +1 -0
- package/dist/components/stepper/derive.js +53 -0
- package/dist/components/stepper/derive.js.map +1 -0
- package/dist/confidence.css +222 -0
- package/dist/fonts/bricolage-grotesque-0.woff2 +0 -0
- package/dist/fonts/bricolage-grotesque-1.woff2 +0 -0
- package/dist/fonts/bricolage-grotesque-2.woff2 +0 -0
- package/dist/fonts/figtree-0.woff2 +0 -0
- package/dist/fonts/figtree-1.woff2 +0 -0
- package/dist/fonts/figtree-2.woff2 +0 -0
- package/dist/fonts/figtree-3.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-0.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-1.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-10.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-11.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-2.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-3.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-4.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-5.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-6.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-7.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-8.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-9.woff2 +0 -0
- package/dist/fonts.css +187 -0
- package/dist/icons/data.js +233 -0
- package/dist/icons/data.js.map +1 -0
- package/dist/index.js +942 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/attention.js +75 -0
- package/dist/lib/attention.js.map +1 -0
- package/dist/lib/board/anchor.js +14 -0
- package/dist/lib/board/anchor.js.map +1 -0
- package/dist/lib/board/model.js +41 -0
- package/dist/lib/board/model.js.map +1 -0
- package/dist/lib/board/move.js +161 -0
- package/dist/lib/board/move.js.map +1 -0
- package/dist/lib/board/position.js +11 -0
- package/dist/lib/board/position.js.map +1 -0
- package/dist/lib/board/rejection.js +22 -0
- package/dist/lib/board/rejection.js.map +1 -0
- package/dist/lib/board/use-board.js +43 -0
- package/dist/lib/board/use-board.js.map +1 -0
- package/dist/lib/calendar/band-packer.js +44 -0
- package/dist/lib/calendar/band-packer.js.map +1 -0
- package/dist/lib/calendar/drag.js +74 -0
- package/dist/lib/calendar/drag.js.map +1 -0
- package/dist/lib/calendar/lane-packer.js +67 -0
- package/dist/lib/calendar/lane-packer.js.map +1 -0
- package/dist/lib/calendar/segments.js +82 -0
- package/dist/lib/calendar/segments.js.map +1 -0
- package/dist/lib/calendar/types.js +7 -0
- package/dist/lib/calendar/types.js.map +1 -0
- package/dist/lib/chart-palette.js +27 -0
- package/dist/lib/chart-palette.js.map +1 -0
- package/dist/lib/clipboard.js +30 -0
- package/dist/lib/clipboard.js.map +1 -0
- package/dist/lib/cn.js +9 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/color.js +24 -0
- package/dist/lib/color.js.map +1 -0
- package/dist/lib/component-guidance.js +297 -0
- package/dist/lib/component-guidance.js.map +1 -0
- package/dist/lib/confidence.js +22 -0
- package/dist/lib/confidence.js.map +1 -0
- package/dist/lib/date-timeline/scale.js +197 -0
- package/dist/lib/date-timeline/scale.js.map +1 -0
- package/dist/lib/design-frame/document.js +44 -0
- package/dist/lib/design-frame/document.js.map +1 -0
- package/dist/lib/design-frame/mini-app-script.js +107 -0
- package/dist/lib/design-frame/mini-app-script.js.map +1 -0
- package/dist/lib/design-frame/mini-app.js +12 -0
- package/dist/lib/design-frame/mini-app.js.map +1 -0
- package/dist/lib/design-frame/protocol.js +46 -0
- package/dist/lib/design-frame/protocol.js.map +1 -0
- package/dist/lib/dev-warn.js +17 -0
- package/dist/lib/dev-warn.js.map +1 -0
- package/dist/lib/dnd/announce.js +120 -0
- package/dist/lib/dnd/announce.js.map +1 -0
- package/dist/lib/dnd/autoscroll.js +123 -0
- package/dist/lib/dnd/autoscroll.js.map +1 -0
- package/dist/lib/dnd/cross-drop.js +11 -0
- package/dist/lib/dnd/cross-drop.js.map +1 -0
- package/dist/lib/dnd/geometry.js +99 -0
- package/dist/lib/dnd/geometry.js.map +1 -0
- package/dist/lib/dnd/sensors/gesture.js +86 -0
- package/dist/lib/dnd/sensors/gesture.js.map +1 -0
- package/dist/lib/dnd/sensors/keyboard.js +47 -0
- package/dist/lib/dnd/sensors/keyboard.js.map +1 -0
- package/dist/lib/dnd/sensors/pointer.js +32 -0
- package/dist/lib/dnd/sensors/pointer.js.map +1 -0
- package/dist/lib/dnd/session.js +256 -0
- package/dist/lib/dnd/session.js.map +1 -0
- package/dist/lib/dnd/use-drag.js +90 -0
- package/dist/lib/dnd/use-drag.js.map +1 -0
- package/dist/lib/dom/scroll-ancestor.js +18 -0
- package/dist/lib/dom/scroll-ancestor.js.map +1 -0
- package/dist/lib/format.js +23 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/group-in-order.js +13 -0
- package/dist/lib/group-in-order.js.map +1 -0
- package/dist/lib/header-fold.js +11 -0
- package/dist/lib/header-fold.js.map +1 -0
- package/dist/lib/i18n/areas/auth-provenance-flows.js +156 -0
- package/dist/lib/i18n/areas/auth-provenance-flows.js.map +1 -0
- package/dist/lib/i18n/areas/board.js +35 -0
- package/dist/lib/i18n/areas/board.js.map +1 -0
- package/dist/lib/i18n/areas/card-face.js +10 -0
- package/dist/lib/i18n/areas/card-face.js.map +1 -0
- package/dist/lib/i18n/areas/chat-chart.js +118 -0
- package/dist/lib/i18n/areas/chat-chart.js.map +1 -0
- package/dist/lib/i18n/areas/code-editor.js +24 -0
- package/dist/lib/i18n/areas/code-editor.js.map +1 -0
- package/dist/lib/i18n/areas/date-timeline.js +21 -0
- package/dist/lib/i18n/areas/date-timeline.js.map +1 -0
- package/dist/lib/i18n/areas/dates.js +71 -0
- package/dist/lib/i18n/areas/dates.js.map +1 -0
- package/dist/lib/i18n/areas/docs-views.js +183 -0
- package/dist/lib/i18n/areas/docs-views.js.map +1 -0
- package/dist/lib/i18n/areas/feedback.js +75 -0
- package/dist/lib/i18n/areas/feedback.js.map +1 -0
- package/dist/lib/i18n/areas/formats.js +24 -0
- package/dist/lib/i18n/areas/formats.js.map +1 -0
- package/dist/lib/i18n/areas/forms.js +110 -0
- package/dist/lib/i18n/areas/forms.js.map +1 -0
- package/dist/lib/i18n/areas/keys.js +25 -0
- package/dist/lib/i18n/areas/keys.js.map +1 -0
- package/dist/lib/i18n/areas/markdown.js +136 -0
- package/dist/lib/i18n/areas/markdown.js.map +1 -0
- package/dist/lib/i18n/areas/move-rejected.js +14 -0
- package/dist/lib/i18n/areas/move-rejected.js.map +1 -0
- package/dist/lib/i18n/areas/navigation.js +104 -0
- package/dist/lib/i18n/areas/navigation.js.map +1 -0
- package/dist/lib/i18n/areas/rbac.js +331 -0
- package/dist/lib/i18n/areas/rbac.js.map +1 -0
- package/dist/lib/i18n/emphasis.js +6 -0
- package/dist/lib/i18n/emphasis.js.map +1 -0
- package/dist/lib/i18n/number-format.js +9 -0
- package/dist/lib/i18n/number-format.js.map +1 -0
- package/dist/lib/i18n/plural.js +9 -0
- package/dist/lib/i18n/plural.js.map +1 -0
- package/dist/lib/i18n/provider.js +27 -0
- package/dist/lib/i18n/provider.js.map +1 -0
- package/dist/lib/i18n/strings.js +38 -0
- package/dist/lib/i18n/strings.js.map +1 -0
- package/dist/lib/icons.js +17 -0
- package/dist/lib/icons.js.map +1 -0
- package/dist/lib/interactive-target.js +9 -0
- package/dist/lib/interactive-target.js.map +1 -0
- package/dist/lib/intl-cache.js +69 -0
- package/dist/lib/intl-cache.js.map +1 -0
- package/dist/lib/legal-document.js +37 -0
- package/dist/lib/legal-document.js.map +1 -0
- package/dist/lib/line-diff-model.js +51 -0
- package/dist/lib/line-diff-model.js.map +1 -0
- package/dist/lib/markdown/attachments.js +71 -0
- package/dist/lib/markdown/attachments.js.map +1 -0
- package/dist/lib/markdown/caret-map.js +153 -0
- package/dist/lib/markdown/caret-map.js.map +1 -0
- package/dist/lib/markdown/caret.js +35 -0
- package/dist/lib/markdown/caret.js.map +1 -0
- package/dist/lib/markdown/commands.js +443 -0
- package/dist/lib/markdown/commands.js.map +1 -0
- package/dist/lib/markdown/convert.js +153 -0
- package/dist/lib/markdown/convert.js.map +1 -0
- package/dist/lib/markdown/dom.js +89 -0
- package/dist/lib/markdown/dom.js.map +1 -0
- package/dist/lib/markdown/edit.js +92 -0
- package/dist/lib/markdown/edit.js.map +1 -0
- package/dist/lib/markdown/history.js +79 -0
- package/dist/lib/markdown/history.js.map +1 -0
- package/dist/lib/markdown/hotkeys.js +63 -0
- package/dist/lib/markdown/hotkeys.js.map +1 -0
- package/dist/lib/markdown/image-pipeline.js +236 -0
- package/dist/lib/markdown/image-pipeline.js.map +1 -0
- package/dist/lib/markdown/images.js +85 -0
- package/dist/lib/markdown/images.js.map +1 -0
- package/dist/lib/markdown/input.js +210 -0
- package/dist/lib/markdown/input.js.map +1 -0
- package/dist/lib/markdown/keys.js +37 -0
- package/dist/lib/markdown/keys.js.map +1 -0
- package/dist/lib/markdown/paste.js +180 -0
- package/dist/lib/markdown/paste.js.map +1 -0
- package/dist/lib/markdown/position.js +111 -0
- package/dist/lib/markdown/position.js.map +1 -0
- package/dist/lib/markdown/project.js +108 -0
- package/dist/lib/markdown/project.js.map +1 -0
- package/dist/lib/markdown/reconcile.js +127 -0
- package/dist/lib/markdown/reconcile.js.map +1 -0
- package/dist/lib/markdown/surface.js +373 -0
- package/dist/lib/markdown/surface.js.map +1 -0
- package/dist/lib/motion.js +22 -0
- package/dist/lib/motion.js.map +1 -0
- package/dist/lib/pad.js +7 -0
- package/dist/lib/pad.js.map +1 -0
- package/dist/lib/paged-window/layout.js +15 -0
- package/dist/lib/paged-window/layout.js.map +1 -0
- package/dist/lib/paged-window/list-owner.js +21 -0
- package/dist/lib/paged-window/list-owner.js.map +1 -0
- package/dist/lib/paged-window/records-binding.js +239 -0
- package/dist/lib/paged-window/records-binding.js.map +1 -0
- package/dist/lib/paged-window/store.js +562 -0
- package/dist/lib/paged-window/store.js.map +1 -0
- package/dist/lib/paged-window/use-measured-pitch.js +38 -0
- package/dist/lib/paged-window/use-measured-pitch.js.map +1 -0
- package/dist/lib/paged-window/use-page-visibility.js +36 -0
- package/dist/lib/paged-window/use-page-visibility.js.map +1 -0
- package/dist/lib/paged-window/use-paged-window.js +43 -0
- package/dist/lib/paged-window/use-paged-window.js.map +1 -0
- package/dist/lib/paged-window/use-scroll-root.js +12 -0
- package/dist/lib/paged-window/use-scroll-root.js.map +1 -0
- package/dist/lib/persist.js +84 -0
- package/dist/lib/persist.js.map +1 -0
- package/dist/lib/preference-values.js +13 -0
- package/dist/lib/preference-values.js.map +1 -0
- package/dist/lib/preferences.js +86 -0
- package/dist/lib/preferences.js.map +1 -0
- package/dist/lib/reads/hooks.js +156 -0
- package/dist/lib/reads/hooks.js.map +1 -0
- package/dist/lib/reads/optimistic.js +169 -0
- package/dist/lib/reads/optimistic.js.map +1 -0
- package/dist/lib/reads/refetch.js +108 -0
- package/dist/lib/reads/refetch.js.map +1 -0
- package/dist/lib/reads/slots.js +215 -0
- package/dist/lib/reads/slots.js.map +1 -0
- package/dist/lib/realtime/hooks.js +40 -0
- package/dist/lib/realtime/hooks.js.map +1 -0
- package/dist/lib/realtime/provider.js +25 -0
- package/dist/lib/realtime/provider.js.map +1 -0
- package/dist/lib/realtime/registry.js +472 -0
- package/dist/lib/realtime/registry.js.map +1 -0
- package/dist/lib/records/define-record-type.js +33 -0
- package/dist/lib/records/define-record-type.js.map +1 -0
- package/dist/lib/records/hooks.js +39 -0
- package/dist/lib/records/hooks.js.map +1 -0
- package/dist/lib/records/store.js +572 -0
- package/dist/lib/records/store.js.map +1 -0
- package/dist/lib/records/wire.js +58 -0
- package/dist/lib/records/wire.js.map +1 -0
- package/dist/lib/reduced-motion-help.js +19 -0
- package/dist/lib/reduced-motion-help.js.map +1 -0
- package/dist/lib/scroll-caret.js +18 -0
- package/dist/lib/scroll-caret.js.map +1 -0
- package/dist/lib/sim/createSimStore.js +54 -0
- package/dist/lib/sim/createSimStore.js.map +1 -0
- package/dist/lib/sim/latency.js +28 -0
- package/dist/lib/sim/latency.js.map +1 -0
- package/dist/lib/sim/registry.js +13 -0
- package/dist/lib/sim/registry.js.map +1 -0
- package/dist/lib/sim/settings.js +41 -0
- package/dist/lib/sim/settings.js.map +1 -0
- package/dist/lib/submit-shortcut.js +25 -0
- package/dist/lib/submit-shortcut.js.map +1 -0
- package/dist/lib/syntax/index.js +33 -0
- package/dist/lib/syntax/index.js.map +1 -0
- package/dist/lib/syntax/languages/bash.js +77 -0
- package/dist/lib/syntax/languages/bash.js.map +1 -0
- package/dist/lib/syntax/languages/css.js +81 -0
- package/dist/lib/syntax/languages/css.js.map +1 -0
- package/dist/lib/syntax/languages/html.js +91 -0
- package/dist/lib/syntax/languages/html.js.map +1 -0
- package/dist/lib/syntax/languages/index.js +49 -0
- package/dist/lib/syntax/languages/index.js.map +1 -0
- package/dist/lib/syntax/languages/javascript.js +133 -0
- package/dist/lib/syntax/languages/javascript.js.map +1 -0
- package/dist/lib/syntax/languages/json.js +45 -0
- package/dist/lib/syntax/languages/json.js.map +1 -0
- package/dist/lib/syntax/languages/mongodb.js +24 -0
- package/dist/lib/syntax/languages/mongodb.js.map +1 -0
- package/dist/lib/syntax/languages/plain.js +10 -0
- package/dist/lib/syntax/languages/plain.js.map +1 -0
- package/dist/lib/syntax/languages/sql.js +113 -0
- package/dist/lib/syntax/languages/sql.js.map +1 -0
- package/dist/lib/syntax/languages/vue.js +31 -0
- package/dist/lib/syntax/languages/vue.js.map +1 -0
- package/dist/lib/syntax/languages/yaml.js +55 -0
- package/dist/lib/syntax/languages/yaml.js.map +1 -0
- package/dist/lib/syntax/markdown/grammar.js +52 -0
- package/dist/lib/syntax/markdown/grammar.js.map +1 -0
- package/dist/lib/syntax/markdown/inline.js +477 -0
- package/dist/lib/syntax/markdown/inline.js.map +1 -0
- package/dist/lib/syntax/markdown/parse.js +464 -0
- package/dist/lib/syntax/markdown/parse.js.map +1 -0
- package/dist/lib/syntax/markdown/refs.js +94 -0
- package/dist/lib/syntax/markdown/refs.js.map +1 -0
- package/dist/lib/syntax/markdown/render.js +230 -0
- package/dist/lib/syntax/markdown/render.js.map +1 -0
- package/dist/lib/syntax/markdown/spans.js +40 -0
- package/dist/lib/syntax/markdown/spans.js.map +1 -0
- package/dist/lib/syntax/registry.js +55 -0
- package/dist/lib/syntax/registry.js.map +1 -0
- package/dist/lib/syntax/tokenize.js +96 -0
- package/dist/lib/syntax/tokenize.js.map +1 -0
- package/dist/lib/time/instant.js +7 -0
- package/dist/lib/time/instant.js.map +1 -0
- package/dist/lib/time/plain.js +83 -0
- package/dist/lib/time/plain.js.map +1 -0
- package/dist/lib/time/relativeAge.js +20 -0
- package/dist/lib/time/relativeAge.js.map +1 -0
- package/dist/lib/time/relativeClock.js +59 -0
- package/dist/lib/time/relativeClock.js.map +1 -0
- package/dist/lib/time/types.js +23 -0
- package/dist/lib/time/types.js.map +1 -0
- package/dist/lib/time/zone.js +148 -0
- package/dist/lib/time/zone.js.map +1 -0
- package/dist/lib/use-controllable.js +16 -0
- package/dist/lib/use-controllable.js.map +1 -0
- package/dist/lib/use-fill-height.js +49 -0
- package/dist/lib/use-fill-height.js.map +1 -0
- package/dist/lib/use-hydrated.js +14 -0
- package/dist/lib/use-hydrated.js.map +1 -0
- package/dist/lib/use-media-query.js +30 -0
- package/dist/lib/use-media-query.js.map +1 -0
- package/dist/lib/use-relabel-base-ui-dismiss.js +26 -0
- package/dist/lib/use-relabel-base-ui-dismiss.js.map +1 -0
- package/dist/lib/use-release-snap-drag.js +29 -0
- package/dist/lib/use-release-snap-drag.js.map +1 -0
- package/dist/lib/use-roving-options.js +18 -0
- package/dist/lib/use-roving-options.js.map +1 -0
- package/dist/lib/values/absent.js +5 -0
- package/dist/lib/values/absent.js.map +1 -0
- package/dist/lib/values/boolean.js +13 -0
- package/dist/lib/values/boolean.js.map +1 -0
- package/dist/lib/values/currency.js +23 -0
- package/dist/lib/values/currency.js.map +1 -0
- package/dist/lib/values/date.js +35 -0
- package/dist/lib/values/date.js.map +1 -0
- package/dist/lib/values/datetime.js +54 -0
- package/dist/lib/values/datetime.js.map +1 -0
- package/dist/lib/values/locale-date.js +60 -0
- package/dist/lib/values/locale-date.js.map +1 -0
- package/dist/lib/values/number.js +16 -0
- package/dist/lib/values/number.js.map +1 -0
- package/dist/pure.js +379 -0
- package/dist/pure.js.map +1 -0
- package/dist/styles.css +190 -0
- package/dist/theme.css +360 -0
- package/dist/types/components/Accordion.d.ts +15 -0
- package/dist/types/components/AgentWorkingSpinner.d.ts +23 -0
- package/dist/types/components/AppShell.d.ts +164 -0
- package/dist/types/components/Attention.d.ts +87 -0
- package/dist/types/components/Avatar.d.ts +154 -0
- package/dist/types/components/Badge.d.ts +131 -0
- package/dist/types/components/Board.d.ts +239 -0
- package/dist/types/components/Button.d.ts +208 -0
- package/dist/types/components/Callout.d.ts +163 -0
- package/dist/types/components/Card.d.ts +219 -0
- package/dist/types/components/Choice.d.ts +127 -0
- package/dist/types/components/CodeEditor.d.ts +86 -0
- package/dist/types/components/ColorPicker.d.ts +14 -0
- package/dist/types/components/Combobox.d.ts +43 -0
- package/dist/types/components/CommandPalette.d.ts +35 -0
- package/dist/types/components/ConcentricRing.d.ts +61 -0
- package/dist/types/components/ConnectionCard.d.ts +64 -0
- package/dist/types/components/ContextItemRow.d.ts +35 -0
- package/dist/types/components/CopyValue.d.ts +14 -0
- package/dist/types/components/CountBadge.d.ts +14 -0
- package/dist/types/components/DateCalendar.d.ts +30 -0
- package/dist/types/components/DateField.d.ts +29 -0
- package/dist/types/components/DatePicker.d.ts +20 -0
- package/dist/types/components/DateTimeText.d.ts +9 -0
- package/dist/types/components/DescriptionList.d.ts +40 -0
- package/dist/types/components/Dialog.d.ts +269 -0
- package/dist/types/components/DragDrop.d.ts +196 -0
- package/dist/types/components/Drawer.d.ts +163 -0
- package/dist/types/components/EditGutter.d.ts +44 -0
- package/dist/types/components/EmojiPicker.d.ts +30 -0
- package/dist/types/components/ErrorBoundary.d.ts +43 -0
- package/dist/types/components/Field.d.ts +37 -0
- package/dist/types/components/FileUpload.d.ts +22 -0
- package/dist/types/components/FilterMenu.d.ts +120 -0
- package/dist/types/components/GatesSection.d.ts +79 -0
- package/dist/types/components/Icon.d.ts +40 -0
- package/dist/types/components/IconButton.d.ts +69 -0
- package/dist/types/components/IconStack.d.ts +28 -0
- package/dist/types/components/ImageUploadField.d.ts +38 -0
- package/dist/types/components/InlineEdit.d.ts +183 -0
- package/dist/types/components/InlineMarkdownEdit.d.ts +100 -0
- package/dist/types/components/Input.d.ts +128 -0
- package/dist/types/components/LegalDocument.d.ts +23 -0
- package/dist/types/components/LineDiff.d.ts +53 -0
- package/dist/types/components/ListHeader.d.ts +45 -0
- package/dist/types/components/Loading.d.ts +131 -0
- package/dist/types/components/Markdown.d.ts +35 -0
- package/dist/types/components/MarkdownEditor.d.ts +129 -0
- package/dist/types/components/Menu.d.ts +157 -0
- package/dist/types/components/Navigation.d.ts +67 -0
- package/dist/types/components/NumberInput.d.ts +177 -0
- package/dist/types/components/OTPInput.d.ts +13 -0
- package/dist/types/components/OrderedEntityManager.d.ts +64 -0
- package/dist/types/components/PagedWindowList.d.ts +23 -0
- package/dist/types/components/PaginationBar.d.ts +31 -0
- package/dist/types/components/Panel.d.ts +94 -0
- package/dist/types/components/PasswordInput.d.ts +7 -0
- package/dist/types/components/PasswordRequirements.d.ts +11 -0
- package/dist/types/components/PatchDiff.d.ts +38 -0
- package/dist/types/components/PendingVeil.d.ts +8 -0
- package/dist/types/components/Popover.d.ts +231 -0
- package/dist/types/components/Progress.d.ts +580 -0
- package/dist/types/components/RatingScale.d.ts +30 -0
- package/dist/types/components/ReadMore.d.ts +26 -0
- package/dist/types/components/RecordCard.d.ts +413 -0
- package/dist/types/components/RelativeTime.d.ts +17 -0
- package/dist/types/components/SandboxedFrame.d.ts +37 -0
- package/dist/types/components/SearchInput.d.ts +6 -0
- package/dist/types/components/SecretField.d.ts +90 -0
- package/dist/types/components/SectionNav.d.ts +15 -0
- package/dist/types/components/Select.d.ts +53 -0
- package/dist/types/components/SequenceDiagram.d.ts +15 -0
- package/dist/types/components/SettingRow.d.ts +144 -0
- package/dist/types/components/SignOffRings.d.ts +29 -0
- package/dist/types/components/Slider.d.ts +255 -0
- package/dist/types/components/SolutionChoice.d.ts +49 -0
- package/dist/types/components/SortMenu.d.ts +45 -0
- package/dist/types/components/Spinner.d.ts +29 -0
- package/dist/types/components/Stat.d.ts +136 -0
- package/dist/types/components/StatusSelect.d.ts +93 -0
- package/dist/types/components/Surface.d.ts +145 -0
- package/dist/types/components/Table.d.ts +164 -0
- package/dist/types/components/Tabs.d.ts +142 -0
- package/dist/types/components/ThemeMenu.d.ts +56 -0
- package/dist/types/components/Toast.d.ts +63 -0
- package/dist/types/components/Toggle.d.ts +168 -0
- package/dist/types/components/ToggleMatrix.d.ts +51 -0
- package/dist/types/components/Tree.d.ts +20 -0
- package/dist/types/components/TriStateSwitch.d.ts +63 -0
- package/dist/types/components/VideoPlayer.d.ts +26 -0
- package/dist/types/components/auth/AcceptInvitationCard.d.ts +54 -0
- package/dist/types/components/auth/AuthLayout.d.ts +12 -0
- package/dist/types/components/auth/ForgotPasswordForm.d.ts +6 -0
- package/dist/types/components/auth/LoginForm.d.ts +13 -0
- package/dist/types/components/auth/ResetPasswordForm.d.ts +9 -0
- package/dist/types/components/auth/SignInProviders.d.ts +56 -0
- package/dist/types/components/auth/SignupCard.d.ts +62 -0
- package/dist/types/components/auth/TermsAcceptance.d.ts +14 -0
- package/dist/types/components/auth/index.d.ts +8 -0
- package/dist/types/components/board/context.d.ts +65 -0
- package/dist/types/components/board/recipe.d.ts +97 -0
- package/dist/types/components/calendar/CalendarMonth.d.ts +32 -0
- package/dist/types/components/calendar/CalendarTimeGrid.d.ts +74 -0
- package/dist/types/components/calendar/EventActions.d.ts +16 -0
- package/dist/types/components/calendar/format.d.ts +42 -0
- package/dist/types/components/calendar/palette.d.ts +17 -0
- package/dist/types/components/calendar/use-calendar-drag.d.ts +53 -0
- package/dist/types/components/calendar/use-event-keyboard.d.ts +23 -0
- package/dist/types/components/calendar/use-grid-navigation.d.ts +47 -0
- package/dist/types/components/calendar/use-now.d.ts +20 -0
- package/dist/types/components/card-face/AcRingGlyph.d.ts +20 -0
- package/dist/types/components/card-face/BoardCardAgentSlot.d.ts +19 -0
- package/dist/types/components/card-face/CardFace.d.ts +106 -0
- package/dist/types/components/card-face/CardTypeBadge.d.ts +21 -0
- package/dist/types/components/card-face/EffortBadge.d.ts +9 -0
- package/dist/types/components/card-face/GateRingGlyph.d.ts +22 -0
- package/dist/types/components/card-face/OverflowRow.d.ts +40 -0
- package/dist/types/components/card-face/TapTip.d.ts +15 -0
- package/dist/types/components/card-face/hit-area.d.ts +20 -0
- package/dist/types/components/card-face/vocabulary.d.ts +83 -0
- package/dist/types/components/chart/BarList.d.ts +27 -0
- package/dist/types/components/chart/LineChart.d.ts +64 -0
- package/dist/types/components/chart/ShareBar.d.ts +26 -0
- package/dist/types/components/chart/TimeSeriesChart.d.ts +60 -0
- package/dist/types/components/chart/label-metrics.d.ts +9 -0
- package/dist/types/components/chart/line-chart-axis.d.ts +14 -0
- package/dist/types/components/chart/line-chart-scale.d.ts +55 -0
- package/dist/types/components/chart/line-series-style.d.ts +14 -0
- package/dist/types/components/chart/share-bar-labels.d.ts +17 -0
- package/dist/types/components/chart/shared.d.ts +122 -0
- package/dist/types/components/chart/time-series-scale.d.ts +29 -0
- package/dist/types/components/chat/Attachment.d.ts +125 -0
- package/dist/types/components/chat/Chat.d.ts +60 -0
- package/dist/types/components/chat/Composer.d.ts +62 -0
- package/dist/types/components/chat/ContextMeter.d.ts +45 -0
- package/dist/types/components/chat/EffortControl.d.ts +23 -0
- package/dist/types/components/chat/FileCover.d.ts +14 -0
- package/dist/types/components/chat/Message.d.ts +66 -0
- package/dist/types/components/chat/MessageScroller.d.ts +18 -0
- package/dist/types/components/chat/ModelSelector.d.ts +44 -0
- package/dist/types/components/chat/StreamingMarkdown.d.ts +11 -0
- package/dist/types/components/chat/download-file.d.ts +7 -0
- package/dist/types/components/chat/file-icon.d.ts +29 -0
- package/dist/types/components/chat/types.d.ts +165 -0
- package/dist/types/components/checklist/StatusChecklist.d.ts +37 -0
- package/dist/types/components/checklist/index.d.ts +3 -0
- package/dist/types/components/checklist/tally.d.ts +19 -0
- package/dist/types/components/checklist/types.d.ts +28 -0
- package/dist/types/components/code-editor/context.d.ts +32 -0
- package/dist/types/components/code-editor/editing.d.ts +39 -0
- package/dist/types/components/code-editor/highlight.d.ts +20 -0
- package/dist/types/components/code-editor/recipe.d.ts +109 -0
- package/dist/types/components/date-timeline/DateTimeline.d.ts +99 -0
- package/dist/types/components/date-timeline/TimelineRow.d.ts +22 -0
- package/dist/types/components/date-timeline/useBarDrag.d.ts +15 -0
- package/dist/types/components/date-timeline/useMarkerDrag.d.ts +14 -0
- package/dist/types/components/date-timeline/useTimelineZoom.d.ts +23 -0
- package/dist/types/components/drag-drop/context.d.ts +85 -0
- package/dist/types/components/drag-drop/recipe.d.ts +163 -0
- package/dist/types/components/drag-drop/shift.d.ts +153 -0
- package/dist/types/components/edit/activation.d.ts +21 -0
- package/dist/types/components/edit/outcome.d.ts +29 -0
- package/dist/types/components/edit/use-edit-session.d.ts +77 -0
- package/dist/types/components/file-viewer/FileViewer.d.ts +2 -0
- package/dist/types/components/file-viewer/PageNumberJumpField.d.ts +9 -0
- package/dist/types/components/file-viewer/ViewerControls.d.ts +20 -0
- package/dist/types/components/file-viewer/ViewerRail.d.ts +10 -0
- package/dist/types/components/file-viewer/ViewerStage.d.ts +22 -0
- package/dist/types/components/file-viewer/frames.d.ts +28 -0
- package/dist/types/components/file-viewer/index.d.ts +3 -0
- package/dist/types/components/file-viewer/types.d.ts +70 -0
- package/dist/types/components/file-viewer/use-frame-cursor.d.ts +13 -0
- package/dist/types/components/file-viewer/use-viewer-keys.d.ts +24 -0
- package/dist/types/components/file-viewer/use-viewer-zoom.d.ts +29 -0
- package/dist/types/components/focus-web/FocusWeb.d.ts +3 -0
- package/dist/types/components/focus-web/index.d.ts +4 -0
- package/dist/types/components/focus-web/layout.d.ts +55 -0
- package/dist/types/components/focus-web/types.d.ts +131 -0
- package/dist/types/components/graph-explorer/GraphExplorer.d.ts +42 -0
- package/dist/types/components/graph-explorer/camera-math.d.ts +119 -0
- package/dist/types/components/graph-explorer/index.d.ts +5 -0
- package/dist/types/components/graph-explorer/tree-layout.d.ts +67 -0
- package/dist/types/components/graph-explorer/types.d.ts +62 -0
- package/dist/types/components/graph-explorer/use-camera.d.ts +81 -0
- package/dist/types/components/graph-explorer/viewport-gesture.d.ts +32 -0
- package/dist/types/components/kanban/KanbanBoard.d.ts +72 -0
- package/dist/types/components/kanban/recipe.d.ts +73 -0
- package/dist/types/components/kanban/types.d.ts +55 -0
- package/dist/types/components/markdown/Affordances.d.ts +105 -0
- package/dist/types/components/markdown/AttachmentStrip.d.ts +25 -0
- package/dist/types/components/markdown/ImageUpload.d.ts +56 -0
- package/dist/types/components/media-error.d.ts +11 -0
- package/dist/types/components/nav-sections.d.ts +10 -0
- package/dist/types/components/node-canvas/NodeCanvas.d.ts +66 -0
- package/dist/types/components/node-canvas/index.d.ts +3 -0
- package/dist/types/components/node-canvas/layout.d.ts +29 -0
- package/dist/types/components/node-canvas/types.d.ts +207 -0
- package/dist/types/components/node-canvas/use-canvas-gestures.d.ts +39 -0
- package/dist/types/components/openapi/OpenApiViewer.d.ts +14 -0
- package/dist/types/components/openapi/OperationCard.d.ts +33 -0
- package/dist/types/components/openapi/SchemaView.d.ts +14 -0
- package/dist/types/components/openapi/index.d.ts +6 -0
- package/dist/types/components/openapi/resolve.d.ts +72 -0
- package/dist/types/components/openapi/types.d.ts +128 -0
- package/dist/types/components/overlay-shell.d.ts +48 -0
- package/dist/types/components/overlay-stack.d.ts +18 -0
- package/dist/types/components/paged-window/PageBlock.d.ts +31 -0
- package/dist/types/components/provenance/ConfidenceBar.d.ts +118 -0
- package/dist/types/components/provenance/ConfidenceMeter.d.ts +21 -0
- package/dist/types/components/provenance/ConfidenceReadout.d.ts +17 -0
- package/dist/types/components/provenance/ProvenanceBadge.d.ts +23 -0
- package/dist/types/components/provenance/ProvenanceDetail.d.ts +109 -0
- package/dist/types/components/provenance/ProvenanceDisclosure.d.ts +107 -0
- package/dist/types/components/provenance/absence.d.ts +37 -0
- package/dist/types/components/provenance/index.d.ts +7 -0
- package/dist/types/components/provenance/types.d.ts +137 -0
- package/dist/types/components/rbac/AccessRequestPanel.d.ts +92 -0
- package/dist/types/components/rbac/AccountMenu.d.ts +46 -0
- package/dist/types/components/rbac/AgentKeysList.d.ts +20 -0
- package/dist/types/components/rbac/ApiKeysPanel.d.ts +26 -0
- package/dist/types/components/rbac/ApiKeysTable.d.ts +63 -0
- package/dist/types/components/rbac/Brand.d.ts +8 -0
- package/dist/types/components/rbac/Can.d.ts +19 -0
- package/dist/types/components/rbac/ChangePasswordForm.d.ts +18 -0
- package/dist/types/components/rbac/DangerZone.d.ts +8 -0
- package/dist/types/components/rbac/DevToolsPopover.d.ts +36 -0
- package/dist/types/components/rbac/EndedLine.d.ts +21 -0
- package/dist/types/components/rbac/InvitationsList.d.ts +39 -0
- package/dist/types/components/rbac/InviteMembersDialog.d.ts +21 -0
- package/dist/types/components/rbac/MembersPanel.d.ts +31 -0
- package/dist/types/components/rbac/PermissionRequestPanel.d.ts +36 -0
- package/dist/types/components/rbac/ProfileForm.d.ts +27 -0
- package/dist/types/components/rbac/ProfilePage.d.ts +16 -0
- package/dist/types/components/rbac/RBACProvider.d.ts +69 -0
- package/dist/types/components/rbac/RoleEditorDialog.d.ts +28 -0
- package/dist/types/components/rbac/RoleKeyPicker.d.ts +24 -0
- package/dist/types/components/rbac/RolePermissionMatrix.d.ts +21 -0
- package/dist/types/components/rbac/RolesPermissionsPage.d.ts +24 -0
- package/dist/types/components/rbac/SessionsList.d.ts +35 -0
- package/dist/types/components/rbac/TeamSettingsForm.d.ts +22 -0
- package/dist/types/components/rbac/TeamSwitcher.d.ts +5 -0
- package/dist/types/components/rbac/approvalPanelParts.d.ts +69 -0
- package/dist/types/components/rbac/index.d.ts +25 -0
- package/dist/types/components/rbac/permissionSections.d.ts +8 -0
- package/dist/types/components/rbac/stagedForm.d.ts +25 -0
- package/dist/types/components/rbac/types.d.ts +65 -0
- package/dist/types/components/rbac/useStagedImage.d.ts +15 -0
- package/dist/types/components/roadmap/PhaseManager.d.ts +19 -0
- package/dist/types/components/roadmap/RoadmapItemCard.d.ts +51 -0
- package/dist/types/components/roadmap/RoadmapPage.d.ts +12 -0
- package/dist/types/components/roadmap/RoadmapSwimlaneBoard.d.ts +15 -0
- package/dist/types/components/roadmap/TrackManager.d.ts +19 -0
- package/dist/types/components/roadmap/UseCaseCard.d.ts +30 -0
- package/dist/types/components/roadmap/UseCaseLedgerPage.d.ts +29 -0
- package/dist/types/components/roadmap/chip-tones.d.ts +2 -0
- package/dist/types/components/roadmap/derive.d.ts +39 -0
- package/dist/types/components/roadmap/index.d.ts +10 -0
- package/dist/types/components/roadmap/types.d.ts +86 -0
- package/dist/types/components/stepper/Stepper.d.ts +79 -0
- package/dist/types/components/stepper/derive.d.ts +49 -0
- package/dist/types/components/stepper/index.d.ts +3 -0
- package/dist/types/components/stepper/types.d.ts +118 -0
- package/dist/types/icons/data.d.ts +2054 -0
- package/dist/types/index.d.ts +209 -0
- package/dist/types/lib/attention.d.ts +62 -0
- package/dist/types/lib/board/anchor.d.ts +69 -0
- package/dist/types/lib/board/index.d.ts +17 -0
- package/dist/types/lib/board/model.d.ts +43 -0
- package/dist/types/lib/board/move.d.ts +181 -0
- package/dist/types/lib/board/position.d.ts +22 -0
- package/dist/types/lib/board/rejection.d.ts +8 -0
- package/dist/types/lib/board/types.d.ts +294 -0
- package/dist/types/lib/board/use-board.d.ts +47 -0
- package/dist/types/lib/calendar/band-packer.d.ts +53 -0
- package/dist/types/lib/calendar/drag.d.ts +125 -0
- package/dist/types/lib/calendar/index.d.ts +4 -0
- package/dist/types/lib/calendar/lane-packer.d.ts +88 -0
- package/dist/types/lib/calendar/segments.d.ts +91 -0
- package/dist/types/lib/calendar/types.d.ts +166 -0
- package/dist/types/lib/chart-palette.d.ts +14 -0
- package/dist/types/lib/clipboard.d.ts +12 -0
- package/dist/types/lib/cn.d.ts +7 -0
- package/dist/types/lib/color.d.ts +14 -0
- package/dist/types/lib/component-guidance.d.ts +15 -0
- package/dist/types/lib/confidence.d.ts +28 -0
- package/dist/types/lib/date-timeline/scale.d.ts +143 -0
- package/dist/types/lib/design-frame/document.d.ts +39 -0
- package/dist/types/lib/design-frame/mini-app-script.d.ts +29 -0
- package/dist/types/lib/design-frame/mini-app.d.ts +17 -0
- package/dist/types/lib/design-frame/protocol.d.ts +78 -0
- package/dist/types/lib/dev-warn.d.ts +10 -0
- package/dist/types/lib/dnd/announce.d.ts +124 -0
- package/dist/types/lib/dnd/autoscroll.d.ts +88 -0
- package/dist/types/lib/dnd/cross-drop.d.ts +18 -0
- package/dist/types/lib/dnd/geometry.d.ts +126 -0
- package/dist/types/lib/dnd/index.d.ts +17 -0
- package/dist/types/lib/dnd/sensors/gesture.d.ts +37 -0
- package/dist/types/lib/dnd/sensors/keyboard.d.ts +54 -0
- package/dist/types/lib/dnd/sensors/pointer.d.ts +59 -0
- package/dist/types/lib/dnd/session.d.ts +124 -0
- package/dist/types/lib/dnd/types.d.ts +226 -0
- package/dist/types/lib/dnd/use-drag.d.ts +82 -0
- package/dist/types/lib/dom/scroll-ancestor.d.ts +15 -0
- package/dist/types/lib/format.d.ts +33 -0
- package/dist/types/lib/group-in-order.d.ts +13 -0
- package/dist/types/lib/header-fold.d.ts +10 -0
- package/dist/types/lib/i18n/areas/auth-provenance-flows.d.ts +287 -0
- package/dist/types/lib/i18n/areas/board.d.ts +51 -0
- package/dist/types/lib/i18n/areas/card-face.d.ts +8 -0
- package/dist/types/lib/i18n/areas/chat-chart.d.ts +202 -0
- package/dist/types/lib/i18n/areas/code-editor.d.ts +40 -0
- package/dist/types/lib/i18n/areas/date-timeline.d.ts +36 -0
- package/dist/types/lib/i18n/areas/dates.d.ts +103 -0
- package/dist/types/lib/i18n/areas/docs-views.d.ts +297 -0
- package/dist/types/lib/i18n/areas/feedback.d.ts +132 -0
- package/dist/types/lib/i18n/areas/formats.d.ts +30 -0
- package/dist/types/lib/i18n/areas/forms.d.ts +182 -0
- package/dist/types/lib/i18n/areas/keys.d.ts +15 -0
- package/dist/types/lib/i18n/areas/markdown.d.ts +150 -0
- package/dist/types/lib/i18n/areas/move-rejected.d.ts +16 -0
- package/dist/types/lib/i18n/areas/navigation.d.ts +185 -0
- package/dist/types/lib/i18n/areas/rbac.d.ts +633 -0
- package/dist/types/lib/i18n/emphasis.d.ts +3 -0
- package/dist/types/lib/i18n/index.d.ts +10 -0
- package/dist/types/lib/i18n/number-format.d.ts +5 -0
- package/dist/types/lib/i18n/plural.d.ts +7 -0
- package/dist/types/lib/i18n/provider.d.ts +16 -0
- package/dist/types/lib/i18n/strings.d.ts +18 -0
- package/dist/types/lib/icons.d.ts +22 -0
- package/dist/types/lib/interactive-target.d.ts +3 -0
- package/dist/types/lib/intl-cache.d.ts +31 -0
- package/dist/types/lib/legal-document.d.ts +82 -0
- package/dist/types/lib/line-diff-model.d.ts +39 -0
- package/dist/types/lib/markdown/attachments.d.ts +50 -0
- package/dist/types/lib/markdown/caret-map.d.ts +69 -0
- package/dist/types/lib/markdown/caret.d.ts +6 -0
- package/dist/types/lib/markdown/commands.d.ts +186 -0
- package/dist/types/lib/markdown/convert.d.ts +99 -0
- package/dist/types/lib/markdown/dom.d.ts +30 -0
- package/dist/types/lib/markdown/edit.d.ts +16 -0
- package/dist/types/lib/markdown/history.d.ts +59 -0
- package/dist/types/lib/markdown/hotkeys.d.ts +63 -0
- package/dist/types/lib/markdown/image-pipeline.d.ts +173 -0
- package/dist/types/lib/markdown/images.d.ts +138 -0
- package/dist/types/lib/markdown/input.d.ts +38 -0
- package/dist/types/lib/markdown/keys.d.ts +34 -0
- package/dist/types/lib/markdown/paste.d.ts +9 -0
- package/dist/types/lib/markdown/position.d.ts +43 -0
- package/dist/types/lib/markdown/project.d.ts +88 -0
- package/dist/types/lib/markdown/reconcile.d.ts +63 -0
- package/dist/types/lib/markdown/surface.d.ts +236 -0
- package/dist/types/lib/motion.d.ts +30 -0
- package/dist/types/lib/pad.d.ts +6 -0
- package/dist/types/lib/paged-window/index.d.ts +2 -0
- package/dist/types/lib/paged-window/layout.d.ts +21 -0
- package/dist/types/lib/paged-window/list-owner.d.ts +12 -0
- package/dist/types/lib/paged-window/records-binding.d.ts +102 -0
- package/dist/types/lib/paged-window/store.d.ts +307 -0
- package/dist/types/lib/paged-window/use-measured-pitch.d.ts +34 -0
- package/dist/types/lib/paged-window/use-page-visibility.d.ts +20 -0
- package/dist/types/lib/paged-window/use-paged-window.d.ts +61 -0
- package/dist/types/lib/paged-window/use-scroll-root.d.ts +18 -0
- package/dist/types/lib/persist.d.ts +57 -0
- package/dist/types/lib/preference-values.d.ts +72 -0
- package/dist/types/lib/preferences.d.ts +26 -0
- package/dist/types/lib/reads/hooks.d.ts +49 -0
- package/dist/types/lib/reads/index.d.ts +5 -0
- package/dist/types/lib/reads/optimistic.d.ts +119 -0
- package/dist/types/lib/reads/refetch.d.ts +83 -0
- package/dist/types/lib/reads/slots.d.ts +137 -0
- package/dist/types/lib/reads/types.d.ts +155 -0
- package/dist/types/lib/realtime/hooks.d.ts +38 -0
- package/dist/types/lib/realtime/index.d.ts +4 -0
- package/dist/types/lib/realtime/provider.d.ts +38 -0
- package/dist/types/lib/realtime/registry.d.ts +225 -0
- package/dist/types/lib/realtime/types.d.ts +242 -0
- package/dist/types/lib/records/define-record-type.d.ts +29 -0
- package/dist/types/lib/records/hooks.d.ts +46 -0
- package/dist/types/lib/records/index.d.ts +5 -0
- package/dist/types/lib/records/store.d.ts +289 -0
- package/dist/types/lib/records/types.d.ts +195 -0
- package/dist/types/lib/records/wire.d.ts +96 -0
- package/dist/types/lib/reduced-motion-help.d.ts +23 -0
- package/dist/types/lib/scroll-caret.d.ts +6 -0
- package/dist/types/lib/sim/createSimStore.d.ts +18 -0
- package/dist/types/lib/sim/index.d.ts +5 -0
- package/dist/types/lib/sim/latency.d.ts +10 -0
- package/dist/types/lib/sim/registry.d.ts +14 -0
- package/dist/types/lib/sim/settings.d.ts +11 -0
- package/dist/types/lib/sim/types.d.ts +3 -0
- package/dist/types/lib/submit-shortcut.d.ts +24 -0
- package/dist/types/lib/syntax/index.d.ts +16 -0
- package/dist/types/lib/syntax/languages/bash.d.ts +1 -0
- package/dist/types/lib/syntax/languages/css.d.ts +1 -0
- package/dist/types/lib/syntax/languages/html.d.ts +17 -0
- package/dist/types/lib/syntax/languages/index.d.ts +33 -0
- package/dist/types/lib/syntax/languages/javascript.d.ts +22 -0
- package/dist/types/lib/syntax/languages/json.d.ts +1 -0
- package/dist/types/lib/syntax/languages/mongodb.d.ts +1 -0
- package/dist/types/lib/syntax/languages/plain.d.ts +9 -0
- package/dist/types/lib/syntax/languages/sql.d.ts +4 -0
- package/dist/types/lib/syntax/languages/vue.d.ts +1 -0
- package/dist/types/lib/syntax/languages/yaml.d.ts +1 -0
- package/dist/types/lib/syntax/markdown/frames.d.ts +145 -0
- package/dist/types/lib/syntax/markdown/grammar.d.ts +1 -0
- package/dist/types/lib/syntax/markdown/index.d.ts +5 -0
- package/dist/types/lib/syntax/markdown/inline.d.ts +21 -0
- package/dist/types/lib/syntax/markdown/parse.d.ts +15 -0
- package/dist/types/lib/syntax/markdown/refs.d.ts +47 -0
- package/dist/types/lib/syntax/markdown/render.d.ts +25 -0
- package/dist/types/lib/syntax/markdown/spans.d.ts +84 -0
- package/dist/types/lib/syntax/markdown/types.d.ts +108 -0
- package/dist/types/lib/syntax/registry.d.ts +37 -0
- package/dist/types/lib/syntax/tokenize.d.ts +17 -0
- package/dist/types/lib/syntax/types.d.ts +119 -0
- package/dist/types/lib/time/index.d.ts +4 -0
- package/dist/types/lib/time/instant.d.ts +2 -0
- package/dist/types/lib/time/plain.d.ts +61 -0
- package/dist/types/lib/time/relativeAge.d.ts +18 -0
- package/dist/types/lib/time/relativeClock.d.ts +8 -0
- package/dist/types/lib/time/types.d.ts +87 -0
- package/dist/types/lib/time/zone.d.ts +106 -0
- package/dist/types/lib/use-controllable.d.ts +14 -0
- package/dist/types/lib/use-fill-height.d.ts +26 -0
- package/dist/types/lib/use-hydrated.d.ts +8 -0
- package/dist/types/lib/use-media-query.d.ts +29 -0
- package/dist/types/lib/use-relabel-base-ui-dismiss.d.ts +6 -0
- package/dist/types/lib/use-release-snap-drag.d.ts +25 -0
- package/dist/types/lib/use-roving-options.d.ts +10 -0
- package/dist/types/lib/values/absent.d.ts +7 -0
- package/dist/types/lib/values/boolean.d.ts +29 -0
- package/dist/types/lib/values/currency.d.ts +22 -0
- package/dist/types/lib/values/date.d.ts +30 -0
- package/dist/types/lib/values/datetime.d.ts +48 -0
- package/dist/types/lib/values/index.d.ts +5 -0
- package/dist/types/lib/values/locale-date.d.ts +34 -0
- package/dist/types/lib/values/number.d.ts +27 -0
- package/dist/types/pure.d.ts +48 -0
- package/package.json +136 -4
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsxs as s, Fragment as p, jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import { useState as m } from "react";
|
|
3
|
+
import { Button as f } from "../Button.js";
|
|
4
|
+
import { Input as d } from "../Input.js";
|
|
5
|
+
import { useUiStrings as g } from "../../lib/i18n/provider.js";
|
|
6
|
+
function P({ onJump: u, noMatch: c }) {
|
|
7
|
+
const r = g().fileViewer, [n, i] = m(""), [o, t] = m(null), a = () => {
|
|
8
|
+
const e = n.trim();
|
|
9
|
+
if (!/^\d+$/.test(e)) {
|
|
10
|
+
t(r.enterPageNumber);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (!u(Number(e))) {
|
|
14
|
+
t(c(e));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
t(null), i("");
|
|
18
|
+
};
|
|
19
|
+
return /* @__PURE__ */ s(p, { children: [
|
|
20
|
+
/* @__PURE__ */ s("div", { className: "flex items-center gap-1.5", children: [
|
|
21
|
+
/* @__PURE__ */ l(
|
|
22
|
+
d,
|
|
23
|
+
{
|
|
24
|
+
"aria-label": r.jumpToPage,
|
|
25
|
+
size: "sm",
|
|
26
|
+
inputMode: "numeric",
|
|
27
|
+
autoComplete: "off",
|
|
28
|
+
placeholder: r.pageNumberPlaceholder,
|
|
29
|
+
value: n,
|
|
30
|
+
onChange: (e) => {
|
|
31
|
+
i(e.target.value.replace(/\D/g, "")), t(null);
|
|
32
|
+
},
|
|
33
|
+
onKeyDown: (e) => {
|
|
34
|
+
e.key === "Enter" && (e.preventDefault(), a());
|
|
35
|
+
},
|
|
36
|
+
className: "flex-1"
|
|
37
|
+
}
|
|
38
|
+
),
|
|
39
|
+
/* @__PURE__ */ l(f, { variant: "outline", size: "xs", disabled: !n.trim(), onClick: a, children: r.go })
|
|
40
|
+
] }),
|
|
41
|
+
o ? /* @__PURE__ */ l("p", { className: "text-2xs text-danger-text", children: o }) : null
|
|
42
|
+
] });
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
P as PageNumberJumpField
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=PageNumberJumpField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageNumberJumpField.js","sources":["../../../src/components/file-viewer/PageNumberJumpField.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport { Button } from \"../Button\";\nimport { Input } from \"../Input\";\n\n/* ============================================================================\n PAGE NUMBER JUMP FIELD (DX-4398, ported from gpt-manager's SG-833 component)\n\n \"Type a page number, press Go or Enter\" — the input, the Go button and ONE\n inline error line. Generic over \"a page number\": it never learns what a page\n or a document is, so the file viewer's popover and a host's own inline picker\n (gpt-manager's `PageCitationPicker`) share it instead of each hand-rolling the\n interaction. Each caller keeps its own chrome, its own match logic and its own\n error wording.\n\n A TEXT INPUT WITH `inputMode=\"numeric\"`, NOT `type=\"number\"`: `NumberInput`'s\n header rules that out (spinners and scroll-to-change are for adjusting a\n quantity, not typing a destination). Digits only is enforced on every\n keystroke, so a letter never appears in the field.\n ========================================================================= */\n\nexport interface PageNumberJumpFieldProps {\n /** Attempts the jump for the typed number; returns whether a match was found.\n `false` renders `noMatch(typed)` as the inline error. */\n onJump: (pageNumber: number) => boolean;\n /** The error line for a page number that did not match, phrased by the caller —\n one names the document (\"No page 999 in report.pdf.\"), another does not. */\n noMatch: (typed: string) => string;\n}\n\nexport function PageNumberJumpField({ onJump, noMatch }: PageNumberJumpFieldProps) {\n const strings = useUiStrings().fileViewer;\n const [value, setValue] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n\n const submit = () => {\n const typed = value.trim();\n if (!/^\\d+$/.test(typed)) {\n setError(strings.enterPageNumber);\n return;\n }\n if (!onJump(Number(typed))) {\n setError(noMatch(typed));\n return;\n }\n setError(null);\n setValue(\"\");\n };\n\n return (\n <>\n <div className=\"flex items-center gap-1.5\">\n <Input\n aria-label={strings.jumpToPage}\n size=\"sm\"\n inputMode=\"numeric\"\n autoComplete=\"off\"\n placeholder={strings.pageNumberPlaceholder}\n value={value}\n onChange={(event) => {\n setValue(event.target.value.replace(/\\D/g, \"\"));\n setError(null);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n submit();\n }\n }}\n className=\"flex-1\"\n />\n <Button variant=\"outline\" size=\"xs\" disabled={!value.trim()} onClick={submit}>\n {strings.go}\n </Button>\n </div>\n {error ? <p className=\"text-2xs text-danger-text\">{error}</p> : null}\n </>\n );\n}\n"],"names":["PageNumberJumpField","onJump","noMatch","strings","useUiStrings","value","setValue","useState","error","setError","submit","typed","jsxs","Fragment","jsx","Input","event","Button"],"mappings":";;;;;AA8BO,SAASA,EAAoB,EAAE,QAAAC,GAAQ,SAAAC,KAAqC;AACjF,QAAMC,IAAUC,IAAe,YACzB,CAACC,GAAOC,CAAQ,IAAIC,EAAS,EAAE,GAC/B,CAACC,GAAOC,CAAQ,IAAIF,EAAwB,IAAI,GAEhDG,IAAS,MAAM;AACnB,UAAMC,IAAQN,EAAM,KAAA;AACpB,QAAI,CAAC,QAAQ,KAAKM,CAAK,GAAG;AACxB,MAAAF,EAASN,EAAQ,eAAe;AAChC;AAAA,IACF;AACA,QAAI,CAACF,EAAO,OAAOU,CAAK,CAAC,GAAG;AAC1B,MAAAF,EAASP,EAAQS,CAAK,CAAC;AACvB;AAAA,IACF;AACA,IAAAF,EAAS,IAAI,GACbH,EAAS,EAAE;AAAA,EACb;AAEA,SACE,gBAAAM,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,MAAA,gBAAAE;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,cAAYZ,EAAQ;AAAA,UACpB,MAAK;AAAA,UACL,WAAU;AAAA,UACV,cAAa;AAAA,UACb,aAAaA,EAAQ;AAAA,UACrB,OAAAE;AAAA,UACA,UAAU,CAACW,MAAU;AACnB,YAAAV,EAASU,EAAM,OAAO,MAAM,QAAQ,OAAO,EAAE,CAAC,GAC9CP,EAAS,IAAI;AAAA,UACf;AAAA,UACA,WAAW,CAACO,MAAU;AACpB,YAAIA,EAAM,QAAQ,YAChBA,EAAM,eAAA,GACNN,EAAA;AAAA,UAEJ;AAAA,UACA,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZ,gBAAAI,EAACG,GAAA,EAAO,SAAQ,WAAU,MAAK,MAAK,UAAU,CAACZ,EAAM,KAAA,GAAQ,SAASK,GACnE,YAAQ,GAAA,CACX;AAAA,IAAA,GACF;AAAA,IACCF,IAAQ,gBAAAM,EAAC,KAAA,EAAE,WAAU,6BAA6B,aAAM,IAAO;AAAA,EAAA,GAClE;AAEJ;"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { jsxs as p, jsx as e, Fragment as j } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo as O, useState as T } from "react";
|
|
3
|
+
import { formatPercent as M } from "../../lib/intl-cache.js";
|
|
4
|
+
import { Button as v } from "../Button.js";
|
|
5
|
+
import { Icon as s } from "../Icon.js";
|
|
6
|
+
import { IconButton as a } from "../IconButton.js";
|
|
7
|
+
import { Popover as J } from "../Popover.js";
|
|
8
|
+
import { PageNumberJumpField as y } from "./PageNumberJumpField.js";
|
|
9
|
+
import { useUiStrings as b, useUiLocale as V } from "../../lib/i18n/provider.js";
|
|
10
|
+
import { useNumberFormat as k } from "../../lib/i18n/number-format.js";
|
|
11
|
+
function Q({ frame: n, onGo: d }) {
|
|
12
|
+
const l = b().fileViewer, i = k(), m = n.page?.number;
|
|
13
|
+
return /* @__PURE__ */ p("div", { className: "flex items-center gap-1", children: [
|
|
14
|
+
/* @__PURE__ */ e(
|
|
15
|
+
a,
|
|
16
|
+
{
|
|
17
|
+
size: "xs",
|
|
18
|
+
icon: /* @__PURE__ */ e(s, { name: "chevron-left", size: "xs" }),
|
|
19
|
+
label: l.previous,
|
|
20
|
+
disabledReason: n.index === 0 ? l.firstOne : void 0,
|
|
21
|
+
onClick: () => d(n.index - 1)
|
|
22
|
+
}
|
|
23
|
+
),
|
|
24
|
+
/* @__PURE__ */ e("span", { className: "min-w-20 text-center text-2xs tabular-nums text-secondary", children: m == null ? l.position(i(n.index + 1), i(n.total)) : l.pagePosition(i(m), i(n.index + 1), i(n.total)) }),
|
|
25
|
+
/* @__PURE__ */ e(
|
|
26
|
+
a,
|
|
27
|
+
{
|
|
28
|
+
size: "xs",
|
|
29
|
+
icon: /* @__PURE__ */ e(s, { name: "chevron-right", size: "xs" }),
|
|
30
|
+
label: l.next,
|
|
31
|
+
disabledReason: n.index >= n.total - 1 ? l.lastOne : void 0,
|
|
32
|
+
onClick: () => d(n.index + 1)
|
|
33
|
+
}
|
|
34
|
+
)
|
|
35
|
+
] });
|
|
36
|
+
}
|
|
37
|
+
function X({ frame: n, frames: d, go: l, zoom: i, zoomable: m, markLabel: g, headerActions: C, onDownload: u, labelled: h = !1 }) {
|
|
38
|
+
const t = b().fileViewer, N = V(), w = k(), r = O(
|
|
39
|
+
() => d.filter((o) => o.page?.marked).map((o) => o.index),
|
|
40
|
+
[d]
|
|
41
|
+
), f = (o) => {
|
|
42
|
+
if (r.length === 0) return;
|
|
43
|
+
const c = o === 1 ? r.find((x) => x > n.index) ?? r[0] : [...r].reverse().find((x) => x < n.index) ?? r[r.length - 1];
|
|
44
|
+
c !== void 0 && l(c);
|
|
45
|
+
}, F = (o) => {
|
|
46
|
+
const c = d.find((x) => x.file.id === n.file.id && x.page?.number === o);
|
|
47
|
+
return c ? (l(c.index), !0) : !1;
|
|
48
|
+
}, P = (n.file.pages?.length ?? 0) > 1, [I, z] = T(!1);
|
|
49
|
+
return /* @__PURE__ */ p(j, { children: [
|
|
50
|
+
r.length > 0 ? /* @__PURE__ */ p("div", { className: "flex items-center gap-1", children: [
|
|
51
|
+
/* @__PURE__ */ e(
|
|
52
|
+
a,
|
|
53
|
+
{
|
|
54
|
+
size: "xs",
|
|
55
|
+
icon: /* @__PURE__ */ e(s, { name: "chevrons-left", size: "xs" }),
|
|
56
|
+
label: t.previousMark(g),
|
|
57
|
+
onClick: () => f(-1)
|
|
58
|
+
}
|
|
59
|
+
),
|
|
60
|
+
/* @__PURE__ */ e("span", { className: "min-w-16 text-center text-2xs tabular-nums text-tertiary", children: t.markCount(w(r.length), g) }),
|
|
61
|
+
/* @__PURE__ */ e(
|
|
62
|
+
a,
|
|
63
|
+
{
|
|
64
|
+
size: "xs",
|
|
65
|
+
icon: /* @__PURE__ */ e(s, { name: "chevrons-right", size: "xs" }),
|
|
66
|
+
label: t.nextMark(g),
|
|
67
|
+
onClick: () => f(1)
|
|
68
|
+
}
|
|
69
|
+
)
|
|
70
|
+
] }) : null,
|
|
71
|
+
P ? /* @__PURE__ */ e(
|
|
72
|
+
J,
|
|
73
|
+
{
|
|
74
|
+
open: I,
|
|
75
|
+
onOpenChange: z,
|
|
76
|
+
align: "end",
|
|
77
|
+
"aria-label": t.jumpToPage,
|
|
78
|
+
trigger: h ? /* @__PURE__ */ e(v, { size: "xs", variant: "ghost", leadingIcon: /* @__PURE__ */ e(s, { name: "list-ordered", size: "xs" }), children: t.jumpToPage }) : /* @__PURE__ */ e(a, { size: "xs", icon: /* @__PURE__ */ e(s, { name: "list-ordered", size: "xs" }), label: t.jumpToPage }),
|
|
79
|
+
children: /* @__PURE__ */ e("div", { className: "flex w-52 flex-col gap-1.5 p-2", children: /* @__PURE__ */ e(
|
|
80
|
+
y,
|
|
81
|
+
{
|
|
82
|
+
onJump: (o) => {
|
|
83
|
+
const c = F(o);
|
|
84
|
+
return c && z(!1), c;
|
|
85
|
+
},
|
|
86
|
+
noMatch: t.noPageInFile
|
|
87
|
+
}
|
|
88
|
+
) })
|
|
89
|
+
}
|
|
90
|
+
) : null,
|
|
91
|
+
m ? /* @__PURE__ */ p("div", { className: "flex items-center gap-1", children: [
|
|
92
|
+
/* @__PURE__ */ e(a, { size: "xs", icon: /* @__PURE__ */ e(s, { name: "zoom-out", size: "xs" }), label: t.zoomOut, onClick: i.zoomOut }),
|
|
93
|
+
/* @__PURE__ */ e("span", { className: "min-w-12 text-center text-2xs tabular-nums text-tertiary", children: i.percent === null ? "—" : M(i.percent, N) }),
|
|
94
|
+
/* @__PURE__ */ e(a, { size: "xs", icon: /* @__PURE__ */ e(s, { name: "zoom-in", size: "xs" }), label: t.zoomIn, onClick: i.zoomIn }),
|
|
95
|
+
i.canToggle ? /* @__PURE__ */ e(
|
|
96
|
+
a,
|
|
97
|
+
{
|
|
98
|
+
size: "xs",
|
|
99
|
+
icon: /* @__PURE__ */ e(s, { name: i.atFit ? "scan" : "maximize", size: "xs" }),
|
|
100
|
+
label: n.page ? t.fitWidth : t.fitWindow,
|
|
101
|
+
"aria-pressed": i.atFit,
|
|
102
|
+
onClick: () => i.atFit ? i.toggleActual() : i.reset()
|
|
103
|
+
}
|
|
104
|
+
) : null
|
|
105
|
+
] }) : null,
|
|
106
|
+
C?.(n),
|
|
107
|
+
u && h ? /* @__PURE__ */ e(v, { size: "xs", variant: "ghost", leadingIcon: /* @__PURE__ */ e(s, { name: "download", size: "xs" }), onClick: () => u(n.file), children: t.download }) : u ? /* @__PURE__ */ e(
|
|
108
|
+
a,
|
|
109
|
+
{
|
|
110
|
+
size: "xs",
|
|
111
|
+
icon: /* @__PURE__ */ e(s, { name: "download", size: "xs" }),
|
|
112
|
+
label: t.downloadFile(n.file.name),
|
|
113
|
+
onClick: () => u(n.file)
|
|
114
|
+
}
|
|
115
|
+
) : null
|
|
116
|
+
] });
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
Q as FrameNav,
|
|
120
|
+
X as ViewerControls
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=ViewerControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewerControls.js","sources":["../../../src/components/file-viewer/ViewerControls.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { useNumberFormat, useUiLocale, useUiStrings } from \"../../lib/i18n\";\nimport { formatPercent } from \"../../lib/intl-cache\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { IconButton } from \"../IconButton\";\nimport { Popover } from \"../Popover\";\nimport { PageNumberJumpField } from \"./PageNumberJumpField\";\nimport type { ViewerFile, ViewerFrame } from \"./types\";\nimport type { useViewerZoom } from \"./use-viewer-zoom\";\n\n/* ============================================================================\n VIEWER CONTROLS (DX-4398)\n\n The header's controls. `FrameNav` (previous, next, \"3 of 7\") is always inline:\n it is the one primary control and the thing a phone most needs.\n `ViewerControls` is everything else — mark navigation, jump to a page number,\n zoom and fit, the host's `headerActions`, Download — and is ONE React subtree\n rendered in exactly one place at a time: inline from `lg` up, inside the\n overflow Popover below it (see `FileViewer`). It has to be a child of that\n Popover, not portalled into it from outside: a Popover or Menu inside it\n (the jump field, one the host puts in `headerActions`) is only a child of the\n overflow popover for Base UI — and so only keeps it open — if it is a child in\n React's tree.\n ========================================================================= */\n\nexport function FrameNav({ frame, onGo }: { frame: ViewerFrame; onGo: (next: number) => void }) {\n const strings = useUiStrings().fileViewer;\n const fmt = useNumberFormat();\n const number = frame.page?.number;\n return (\n <div className=\"flex items-center gap-1\">\n <IconButton\n size=\"xs\"\n icon={<Icon name=\"chevron-left\" size=\"xs\" />}\n label={strings.previous}\n disabledReason={frame.index === 0 ? strings.firstOne : undefined}\n onClick={() => onGo(frame.index - 1)}\n />\n <span className=\"min-w-20 text-center text-2xs tabular-nums text-secondary\">\n {number === null || number === undefined\n ? strings.position(fmt(frame.index + 1), fmt(frame.total))\n : strings.pagePosition(fmt(number), fmt(frame.index + 1), fmt(frame.total))}\n </span>\n <IconButton\n size=\"xs\"\n icon={<Icon name=\"chevron-right\" size=\"xs\" />}\n label={strings.next}\n disabledReason={frame.index >= frame.total - 1 ? strings.lastOne : undefined}\n onClick={() => onGo(frame.index + 1)}\n />\n </div>\n );\n}\n\nexport interface ViewerControlsProps {\n frame: ViewerFrame;\n frames: ViewerFrame[];\n go: (index: number) => void;\n zoom: ReturnType<typeof useViewerZoom>;\n zoomable: boolean;\n markLabel: string;\n headerActions?: (frame: ViewerFrame) => ReactNode;\n onDownload?: (file: ViewerFile) => void;\n /** In the overflow popover: the entries say what they are, not just draw it. */\n labelled?: boolean;\n}\n\nexport function ViewerControls({ frame, frames, go, zoom, zoomable, markLabel, headerActions, onDownload, labelled = false }: ViewerControlsProps) {\n const strings = useUiStrings().fileViewer;\n const locale = useUiLocale();\n const fmt = useNumberFormat();\n const markedIndexes = useMemo(\n () => frames.filter((candidate) => candidate.page?.marked).map((candidate) => candidate.index),\n [frames],\n );\n const goToMark = (direction: 1 | -1) => {\n if (markedIndexes.length === 0) return;\n const ahead =\n direction === 1\n ? (markedIndexes.find((at) => at > frame.index) ?? markedIndexes[0])\n : ([...markedIndexes].reverse().find((at) => at < frame.index) ?? markedIndexes[markedIndexes.length - 1]);\n if (ahead !== undefined) go(ahead);\n };\n\n /* Jump to a printed page number, inside the CURRENT file only. */\n const jumpToPageNumber = (pageNumber: number): boolean => {\n const target = frames.find((candidate) => candidate.file.id === frame.file.id && candidate.page?.number === pageNumber);\n if (!target) return false;\n go(target.index);\n return true;\n };\n const canJump = (frame.file.pages?.length ?? 0) > 1;\n const [jumpOpen, setJumpOpen] = useState(false);\n\n return (\n <>\n {markedIndexes.length > 0 ? (\n <div className=\"flex items-center gap-1\">\n <IconButton\n size=\"xs\"\n icon={<Icon name=\"chevrons-left\" size=\"xs\" />}\n label={strings.previousMark(markLabel)}\n onClick={() => goToMark(-1)}\n />\n <span className=\"min-w-16 text-center text-2xs tabular-nums text-tertiary\">\n {strings.markCount(fmt(markedIndexes.length), markLabel)}\n </span>\n <IconButton\n size=\"xs\"\n icon={<Icon name=\"chevrons-right\" size=\"xs\" />}\n label={strings.nextMark(markLabel)}\n onClick={() => goToMark(1)}\n />\n </div>\n ) : null}\n {canJump ? (\n <Popover\n open={jumpOpen}\n onOpenChange={setJumpOpen}\n align=\"end\"\n aria-label={strings.jumpToPage}\n trigger={\n labelled ? (\n <Button size=\"xs\" variant=\"ghost\" leadingIcon={<Icon name=\"list-ordered\" size=\"xs\" />}>\n {strings.jumpToPage}\n </Button>\n ) : (\n <IconButton size=\"xs\" icon={<Icon name=\"list-ordered\" size=\"xs\" />} label={strings.jumpToPage} />\n )\n }\n >\n <div className=\"flex w-52 flex-col gap-1.5 p-2\">\n <PageNumberJumpField\n onJump={(pageNumber) => {\n const found = jumpToPageNumber(pageNumber);\n if (found) setJumpOpen(false);\n return found;\n }}\n noMatch={strings.noPageInFile}\n />\n </div>\n </Popover>\n ) : null}\n {zoomable ? (\n <div className=\"flex items-center gap-1\">\n <IconButton size=\"xs\" icon={<Icon name=\"zoom-out\" size=\"xs\" />} label={strings.zoomOut} onClick={zoom.zoomOut} />\n <span className=\"min-w-12 text-center text-2xs tabular-nums text-tertiary\">\n {zoom.percent === null ? \"—\" : formatPercent(zoom.percent, locale)}\n </span>\n <IconButton size=\"xs\" icon={<Icon name=\"zoom-in\" size=\"xs\" />} label={strings.zoomIn} onClick={zoom.zoomIn} />\n {zoom.canToggle ? (\n <IconButton\n size=\"xs\"\n icon={<Icon name={zoom.atFit ? \"scan\" : \"maximize\"} size=\"xs\" />}\n label={frame.page ? strings.fitWidth : strings.fitWindow}\n aria-pressed={zoom.atFit}\n onClick={() => (zoom.atFit ? zoom.toggleActual() : zoom.reset())}\n />\n ) : null}\n </div>\n ) : null}\n {headerActions?.(frame)}\n {onDownload && labelled ? (\n <Button size=\"xs\" variant=\"ghost\" leadingIcon={<Icon name=\"download\" size=\"xs\" />} onClick={() => onDownload(frame.file)}>\n {strings.download}\n </Button>\n ) : onDownload ? (\n <IconButton\n size=\"xs\"\n icon={<Icon name=\"download\" size=\"xs\" />}\n label={strings.downloadFile(frame.file.name)}\n onClick={() => onDownload(frame.file)}\n />\n ) : null}\n </>\n );\n}\n"],"names":["FrameNav","frame","onGo","strings","useUiStrings","fmt","useNumberFormat","number","jsxs","jsx","IconButton","Icon","ViewerControls","frames","go","zoom","zoomable","markLabel","headerActions","onDownload","labelled","locale","useUiLocale","markedIndexes","useMemo","candidate","goToMark","direction","ahead","at","jumpToPageNumber","pageNumber","target","canJump","jumpOpen","setJumpOpen","useState","Fragment","Popover","Button","PageNumberJumpField","found","formatPercent"],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsx as r, jsxs as u } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as p, useEffect as g } from "react";
|
|
3
|
+
import { cn as m } from "../../lib/cn.js";
|
|
4
|
+
import { TileMedia as x } from "../chat/Attachment.js";
|
|
5
|
+
import { frameLabel as d, frameKeyOf as h } from "./frames.js";
|
|
6
|
+
import { useUiStrings as w } from "../../lib/i18n/provider.js";
|
|
7
|
+
import { useNumberFormat as v } from "../../lib/i18n/number-format.js";
|
|
8
|
+
function N(s) {
|
|
9
|
+
const { file: t, page: n } = s;
|
|
10
|
+
return n ? { id: n.id, name: t.name, thumbnailUrl: n.thumbUrl ?? n.url } : t;
|
|
11
|
+
}
|
|
12
|
+
function F({ frames: s, index: t, markLabel: n, onSelect: b, hidden: f }) {
|
|
13
|
+
const i = w().fileViewer, a = v(), c = p(null);
|
|
14
|
+
return g(() => {
|
|
15
|
+
c.current?.scrollIntoView({ block: "nearest", inline: "nearest" });
|
|
16
|
+
}, [t]), /* @__PURE__ */ r(
|
|
17
|
+
"nav",
|
|
18
|
+
{
|
|
19
|
+
"aria-label": i.filesInViewer,
|
|
20
|
+
hidden: f,
|
|
21
|
+
"data-viewer-rail": !0,
|
|
22
|
+
className: m(
|
|
23
|
+
"flex-none overflow-auto border-border-subtle bg-surface p-2",
|
|
24
|
+
"max-sm:order-last max-sm:border-t sm:w-36 sm:border-r"
|
|
25
|
+
),
|
|
26
|
+
children: /* @__PURE__ */ r("ol", { className: "flex gap-2 sm:flex-col", children: s.map((e) => {
|
|
27
|
+
const o = e.index === t, l = e.page?.marked === !0;
|
|
28
|
+
return /* @__PURE__ */ r("li", { ref: o ? c : null, className: "flex-none", children: /* @__PURE__ */ u(
|
|
29
|
+
"button",
|
|
30
|
+
{
|
|
31
|
+
type: "button",
|
|
32
|
+
"aria-current": o ? "true" : void 0,
|
|
33
|
+
"aria-label": l ? i.markedFrame(d(e, i, a), n) : d(e, i, a),
|
|
34
|
+
"data-marked": l ? "true" : void 0,
|
|
35
|
+
onClick: () => b(e.index),
|
|
36
|
+
className: m(
|
|
37
|
+
"relative block h-20 w-24 cursor-pointer overflow-hidden rounded-md border text-left outline-none sm:h-28 sm:w-full",
|
|
38
|
+
"focus-visible:ring-2 focus-visible:ring-focus-ring",
|
|
39
|
+
o ? "border-accent ring-2 ring-accent" : l ? "border-warning" : "border-border"
|
|
40
|
+
),
|
|
41
|
+
children: [
|
|
42
|
+
/* @__PURE__ */ r("span", { className: "absolute inset-0 grid place-items-center bg-surface-inset", children: /* @__PURE__ */ r(x, { file: N(e), iconSize: "lg", className: "size-full object-cover object-top" }) }),
|
|
43
|
+
/* @__PURE__ */ u("span", { className: "absolute inset-x-0 bottom-0 flex items-center justify-between gap-1 bg-scrim px-1 py-0.5 text-2xs text-inverse", children: [
|
|
44
|
+
/* @__PURE__ */ r("span", { className: "truncate", children: e.page ? e.page.number ?? "—" : e.file.name }),
|
|
45
|
+
l ? /* @__PURE__ */ r("span", { "aria-hidden": "true", className: "size-1.5 flex-none rounded-full bg-warning" }) : null
|
|
46
|
+
] })
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
) }, h(e));
|
|
50
|
+
}) })
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
F as ViewerRail
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=ViewerRail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewerRail.js","sources":["../../../src/components/file-viewer/ViewerRail.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { useNumberFormat, useUiStrings } from \"../../lib/i18n\";\nimport { TileMedia } from \"../chat/Attachment\";\nimport { frameKeyOf, frameLabel } from \"./frames\";\nimport type { ChatFile } from \"../chat/types\";\nimport type { ViewerFrame } from \"./types\";\n\n/* ============================================================================\n VIEWER RAIL (DX-4398)\n\n The thumbnail strip: a column at the left from `sm` up, a horizontal strip\n under the stage below it. It is the same element at every width — only its\n flow direction changes in CSS — so the collapse toggle controls one thing and\n a phone can still reach any frame.\n\n MARKED FRAMES GET A WARNING BORDER AND A DOT; everything else is quiet. On a\n 434-page record that contrast IS the navigation: the reader is looking for\n five pages and the rail has to make those five findable without scrolling for\n them (which is also why the header carries previous/next-mark controls).\n\n THUMBNAILS ARE `TileMedia`, the one answer the attachment tile already gives\n (a picture, a video's still frame, or the type icon) — never `FileCover` or\n `VideoPlayer`, whose `<video controls>` inside a `<button>` is invalid. Every\n picture is `loading=\"lazy\"`, so opening a long document fetches the handful of\n thumbnails actually on screen rather than four hundred.\n ========================================================================= */\n\n/** What `TileMedia` needs to draw this frame's thumbnail. A page has no file of\n its own, so it is drawn as a picture of its (smaller) render. */\nfunction thumbnailOf(frame: ViewerFrame): ChatFile {\n const { file, page } = frame;\n if (!page) return file;\n return { id: page.id, name: file.name, thumbnailUrl: page.thumbUrl ?? page.url };\n}\n\nexport interface ViewerRailProps {\n frames: ViewerFrame[];\n index: number;\n markLabel: string;\n onSelect: (index: number) => void;\n /** Collapsed by the header toggle. Stays in the DOM, so a host can re-open it. */\n hidden: boolean;\n}\n\nexport function ViewerRail({ frames, index, markLabel, onSelect, hidden }: ViewerRailProps) {\n const strings = useUiStrings().fileViewer;\n const fmt = useNumberFormat();\n const activeRef = useRef<HTMLLIElement | null>(null);\n\n useEffect(() => {\n activeRef.current?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n }, [index]);\n\n return (\n <nav\n aria-label={strings.filesInViewer}\n hidden={hidden}\n data-viewer-rail\n className={cn(\n \"flex-none overflow-auto border-border-subtle bg-surface p-2\",\n \"max-sm:order-last max-sm:border-t sm:w-36 sm:border-r\",\n )}\n >\n <ol className=\"flex gap-2 sm:flex-col\">\n {frames.map((frame) => {\n const current = frame.index === index;\n const marked = frame.page?.marked === true;\n return (\n <li key={frameKeyOf(frame)} ref={current ? activeRef : null} className=\"flex-none\">\n {/* UI-LIBRARY-CHECK: considered the `Attachment` tile with `selected`; it does\n not fit. It is a fixed 4:3 tile for a FILE (a name caption, download and\n remove actions, a preview trigger of its own) while a rail item is one\n FRAME, which for a page is not a file at all; the rail needs\n `aria-current` on the control itself and a mark ring the tile has no\n state for. The picture is still `TileMedia`, the one thing they share. */}\n <button\n type=\"button\"\n aria-current={current ? \"true\" : undefined}\n aria-label={marked ? strings.markedFrame(frameLabel(frame, strings, fmt), markLabel) : frameLabel(frame, strings, fmt)}\n data-marked={marked ? \"true\" : undefined}\n onClick={() => onSelect(frame.index)}\n className={cn(\n \"relative block h-20 w-24 cursor-pointer overflow-hidden rounded-md border text-left outline-none sm:h-28 sm:w-full\",\n \"focus-visible:ring-2 focus-visible:ring-focus-ring\",\n current ? \"border-accent ring-2 ring-accent\" : marked ? \"border-warning\" : \"border-border\",\n )}\n >\n <span className=\"absolute inset-0 grid place-items-center bg-surface-inset\">\n <TileMedia file={thumbnailOf(frame)} iconSize=\"lg\" className=\"size-full object-cover object-top\" />\n </span>\n <span className=\"absolute inset-x-0 bottom-0 flex items-center justify-between gap-1 bg-scrim px-1 py-0.5 text-2xs text-inverse\">\n <span className=\"truncate\">{frame.page ? (frame.page.number ?? \"—\") : frame.file.name}</span>\n {marked ? <span aria-hidden=\"true\" className=\"size-1.5 flex-none rounded-full bg-warning\" /> : null}\n </span>\n </button>\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n"],"names":["thumbnailOf","frame","file","page","ViewerRail","frames","index","markLabel","onSelect","hidden","strings","useUiStrings","fmt","useNumberFormat","activeRef","useRef","useEffect","jsx","cn","current","marked","jsxs","frameLabel","TileMedia","frameKeyOf"],"mappings":";;;;;;;AA8BA,SAASA,EAAYC,GAA8B;AACjD,QAAM,EAAE,MAAAC,GAAM,MAAAC,EAAA,IAASF;AACvB,SAAKE,IACE,EAAE,IAAIA,EAAK,IAAI,MAAMD,EAAK,MAAM,cAAcC,EAAK,YAAYA,EAAK,IAAA,IADzDD;AAEpB;AAWO,SAASE,EAAW,EAAE,QAAAC,GAAQ,OAAAC,GAAO,WAAAC,GAAW,UAAAC,GAAU,QAAAC,KAA2B;AAC1F,QAAMC,IAAUC,IAAe,YACzBC,IAAMC,EAAA,GACNC,IAAYC,EAA6B,IAAI;AAEnD,SAAAC,EAAU,MAAM;AACd,IAAAF,EAAU,SAAS,eAAe,EAAE,OAAO,WAAW,QAAQ,WAAW;AAAA,EAC3E,GAAG,CAACR,CAAK,CAAC,GAGR,gBAAAW;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,cAAYP,EAAQ;AAAA,MACpB,QAAAD;AAAA,MACA,oBAAgB;AAAA,MAChB,WAAWS;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAGF,4BAAC,MAAA,EAAG,WAAU,0BACX,UAAAb,EAAO,IAAI,CAACJ,MAAU;AACrB,cAAMkB,IAAUlB,EAAM,UAAUK,GAC1Bc,IAASnB,EAAM,MAAM,WAAW;AACtC,iCACG,MAAA,EAA2B,KAAKkB,IAAUL,IAAY,MAAM,WAAU,aAOrE,UAAA,gBAAAO;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,gBAAcF,IAAU,SAAS;AAAA,YACjC,cAAYC,IAASV,EAAQ,YAAYY,EAAWrB,GAAOS,GAASE,CAAG,GAAGL,CAAS,IAAIe,EAAWrB,GAAOS,GAASE,CAAG;AAAA,YACrH,eAAaQ,IAAS,SAAS;AAAA,YAC/B,SAAS,MAAMZ,EAASP,EAAM,KAAK;AAAA,YACnC,WAAWiB;AAAA,cACT;AAAA,cACA;AAAA,cACAC,IAAU,qCAAqCC,IAAS,mBAAmB;AAAA,YAAA;AAAA,YAG7E,UAAA;AAAA,cAAA,gBAAAH,EAAC,QAAA,EAAK,WAAU,6DACd,UAAA,gBAAAA,EAACM,GAAA,EAAU,MAAMvB,EAAYC,CAAK,GAAG,UAAS,MAAK,WAAU,qCAAoC,GACnG;AAAA,cACA,gBAAAoB,EAAC,QAAA,EAAK,WAAU,kHACd,UAAA;AAAA,gBAAA,gBAAAJ,EAAC,QAAA,EAAK,WAAU,YAAY,UAAAhB,EAAM,OAAQA,EAAM,KAAK,UAAU,MAAOA,EAAM,KAAK,MAAK;AAAA,gBACrFmB,IAAS,gBAAAH,EAAC,QAAA,EAAK,eAAY,QAAO,WAAU,8CAA6C,IAAK;AAAA,cAAA,EAAA,CACjG;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,KAzBKO,EAAWvB,CAAK,CA2BzB;AAAA,MAEJ,CAAC,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { jsx as e, jsxs as n } from "react/jsx-runtime";
|
|
2
|
+
import { useState as z } from "react";
|
|
3
|
+
import { formatBytes as F } from "../../lib/format.js";
|
|
4
|
+
import { isInteractiveTarget as I } from "../../lib/interactive-target.js";
|
|
5
|
+
import { Button as x } from "../Button.js";
|
|
6
|
+
import { Icon as u } from "../Icon.js";
|
|
7
|
+
import { Spinner as V } from "../Spinner.js";
|
|
8
|
+
import { VideoPlayer as S } from "../VideoPlayer.js";
|
|
9
|
+
import { isImageFile as B, isVideoFile as C, fileIconFor as K } from "../chat/file-icon.js";
|
|
10
|
+
import { frameKeyOf as T, frameLabel as j } from "./frames.js";
|
|
11
|
+
import { useUiStrings as h, useUiLocale as L } from "../../lib/i18n/provider.js";
|
|
12
|
+
import { useNumberFormat as U } from "../../lib/i18n/number-format.js";
|
|
13
|
+
function G(t, l) {
|
|
14
|
+
return t.page ? { kind: "zoom", fit: "width" } : l != null ? { kind: "custom", fit: null } : t.file.url && B(t.file) ? { kind: "zoom", fit: "contain" } : t.file.url && C(t.file) ? { kind: "video", fit: null } : { kind: "file", fit: null };
|
|
15
|
+
}
|
|
16
|
+
function J({ frame: t, kind: l, custom: f, zoom: r, onDownload: a, overlay: p }) {
|
|
17
|
+
const s = h().fileViewer, v = U(), w = L(), d = T(t), [N, b] = z(null), y = N === d, { file: i } = t;
|
|
18
|
+
let c;
|
|
19
|
+
if (l === "custom")
|
|
20
|
+
c = f;
|
|
21
|
+
else if (l === "video")
|
|
22
|
+
c = /* @__PURE__ */ e("div", { className: "grid size-full place-items-center p-4", children: /* @__PURE__ */ e(
|
|
23
|
+
S,
|
|
24
|
+
{
|
|
25
|
+
src: i.url,
|
|
26
|
+
title: i.name,
|
|
27
|
+
poster: i.thumbnailUrl,
|
|
28
|
+
onDownload: a ? () => a(i) : void 0,
|
|
29
|
+
className: "max-h-full w-full max-w-5xl"
|
|
30
|
+
},
|
|
31
|
+
d
|
|
32
|
+
) });
|
|
33
|
+
else if (l === "zoom" && y)
|
|
34
|
+
c = /* @__PURE__ */ e("div", { className: "grid size-full place-items-center px-8 text-center", children: /* @__PURE__ */ n("div", { className: "flex flex-col items-center gap-3", children: [
|
|
35
|
+
/* @__PURE__ */ e(u, { name: "image-off", size: "lg", className: "text-tertiary" }),
|
|
36
|
+
/* @__PURE__ */ e("p", { className: "max-w-sm text-xs text-secondary", children: t.page ? s.pageImageFailed : s.imageFailed }),
|
|
37
|
+
a ? /* @__PURE__ */ e(g, { file: i, onDownload: a }) : null
|
|
38
|
+
] }) });
|
|
39
|
+
else if (l === "zoom") {
|
|
40
|
+
const k = t.page ? t.page.url : i.url;
|
|
41
|
+
c = /* @__PURE__ */ n(
|
|
42
|
+
"div",
|
|
43
|
+
{
|
|
44
|
+
ref: r.bindViewport,
|
|
45
|
+
"data-viewer-viewport": !0,
|
|
46
|
+
className: "absolute inset-0 overflow-hidden",
|
|
47
|
+
style: { touchAction: "none", cursor: r.panning ? "grabbing" : "grab" },
|
|
48
|
+
onDoubleClick: (o) => {
|
|
49
|
+
if (I(o.target)) return;
|
|
50
|
+
const m = o.currentTarget.getBoundingClientRect();
|
|
51
|
+
r.toggleActual({ x: o.clientX - m.left, y: o.clientY - m.top });
|
|
52
|
+
},
|
|
53
|
+
children: [
|
|
54
|
+
r.measured ? null : /* @__PURE__ */ e("div", { className: "absolute inset-0 grid place-items-center", children: /* @__PURE__ */ e(V, { size: "lg", label: s.loading }) }),
|
|
55
|
+
/* @__PURE__ */ e(
|
|
56
|
+
"div",
|
|
57
|
+
{
|
|
58
|
+
className: "absolute left-0 top-0 origin-top-left will-change-transform",
|
|
59
|
+
style: { transform: `translate(${r.camera.x}px, ${r.camera.y}px) scale(${r.camera.scale})` },
|
|
60
|
+
children: /* @__PURE__ */ e(
|
|
61
|
+
"img",
|
|
62
|
+
{
|
|
63
|
+
src: k,
|
|
64
|
+
alt: j(t, s, v),
|
|
65
|
+
className: "block max-w-none select-none bg-surface shadow-lg [-webkit-user-drag:none]",
|
|
66
|
+
style: r.measured ? void 0 : { width: "1px", opacity: 0 },
|
|
67
|
+
onLoad: (o) => {
|
|
68
|
+
const m = o.currentTarget;
|
|
69
|
+
r.setContentSize({ width: m.naturalWidth, height: m.naturalHeight });
|
|
70
|
+
},
|
|
71
|
+
onError: () => b(d)
|
|
72
|
+
},
|
|
73
|
+
d
|
|
74
|
+
)
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
} else
|
|
81
|
+
c = /* @__PURE__ */ e("div", { className: "grid size-full place-items-center px-8 text-center", children: /* @__PURE__ */ n("div", { className: "flex flex-col items-center gap-3", children: [
|
|
82
|
+
/* @__PURE__ */ e(u, { name: K(i), size: "xl", className: "text-tertiary" }),
|
|
83
|
+
/* @__PURE__ */ n("div", { children: [
|
|
84
|
+
/* @__PURE__ */ e("p", { className: "text-sm font-medium text-primary", children: i.name }),
|
|
85
|
+
i.size === void 0 ? null : /* @__PURE__ */ e("p", { className: "mt-0.5 text-xs text-tertiary", children: F(i.size, w) })
|
|
86
|
+
] }),
|
|
87
|
+
/* @__PURE__ */ e("p", { className: "max-w-sm text-xs text-tertiary", children: s.noPreview }),
|
|
88
|
+
/* @__PURE__ */ n("div", { className: "flex flex-wrap items-center justify-center gap-2", children: [
|
|
89
|
+
i.url ? /* @__PURE__ */ n(x, { variant: "outline", render: /* @__PURE__ */ e("a", { href: i.url, target: "_blank", rel: "noopener noreferrer" }), children: [
|
|
90
|
+
/* @__PURE__ */ e(u, { name: "external-link", size: "sm" }),
|
|
91
|
+
s.openInNewTab
|
|
92
|
+
] }) : null,
|
|
93
|
+
a ? /* @__PURE__ */ e(g, { file: i, onDownload: a }) : null
|
|
94
|
+
] })
|
|
95
|
+
] }) });
|
|
96
|
+
return /* @__PURE__ */ n("div", { className: "relative min-h-0 flex-1 overflow-hidden bg-surface-sunken", "data-viewer-stage": !0, children: [
|
|
97
|
+
c,
|
|
98
|
+
p ? /* @__PURE__ */ e("div", { className: "pointer-events-none absolute inset-0", children: p }) : null
|
|
99
|
+
] });
|
|
100
|
+
}
|
|
101
|
+
function g({ file: t, onDownload: l }) {
|
|
102
|
+
const f = h().fileViewer;
|
|
103
|
+
return /* @__PURE__ */ n(x, { variant: "outline", onClick: () => l(t), children: [
|
|
104
|
+
/* @__PURE__ */ e(u, { name: "download", size: "sm" }),
|
|
105
|
+
f.download
|
|
106
|
+
] });
|
|
107
|
+
}
|
|
108
|
+
export {
|
|
109
|
+
J as ViewerStage,
|
|
110
|
+
G as stageKindOf
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=ViewerStage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewerStage.js","sources":["../../../src/components/file-viewer/ViewerStage.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { formatBytes } from \"../../lib/format\";\nimport { useNumberFormat, useUiLocale, useUiStrings } from \"../../lib/i18n\";\nimport { isInteractiveTarget } from \"../../lib/interactive-target\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { Spinner } from \"../Spinner\";\nimport { VideoPlayer } from \"../VideoPlayer\";\nimport { fileIconFor, isImageFile, isVideoFile } from \"../chat/file-icon\";\nimport type { useViewerZoom, ViewerFit } from \"./use-viewer-zoom\";\nimport { frameKeyOf, frameLabel } from \"./frames\";\nimport type { ViewerFile, ViewerFrame } from \"./types\";\n\n/* ============================================================================\n VIEWER STAGE (DX-4398)\n\n What is on screen for one frame, by kind:\n - a PAGE, or an IMAGE with a url -> a zoomable `<img>` (the camera moves it)\n - a VIDEO with a url -> `VideoPlayer`\n - anything else, or no url -> the type icon, the name, the size, and\n the ways out: Open in a new tab, Download\n Never an iframe, an `<object>` or an `<embed>`: an embed of an arbitrary\n attachment is a security surface, and a half-working PDF preview is worse than\n an honest \"open it\" because people trust what they see. A PDF is browsable\n here only when the host supplies `pages`.\n\n ONLY THE CURRENT FRAME'S MEDIA IS MOUNTED, so stepping away from a video stops\n it, and a document of four hundred pages holds one `<img>`.\n\n THE OVERLAY IS A SIBLING OF THE ZOOM VIEWPORT, NOT A CHILD of the element that\n carries the wheel and drag handlers. In the source the quote panel sat inside\n the zoom viewport, so a wheel over the quotes zoomed the page and dragging to\n select a quote panned it. Here the wrapper is `pointer-events-none` and the\n host's panel opts back in; its events never reach the viewport.\n ========================================================================= */\n\nexport type ViewerZoom = ReturnType<typeof useViewerZoom>;\n\n/** How a frame is shown. `fit` is null for everything the camera does not move. */\nexport interface StageKind {\n kind: \"zoom\" | \"video\" | \"file\" | \"custom\";\n /** How the frame opens; null for everything the camera does not move. */\n fit: ViewerFit | null;\n}\n\nexport function stageKindOf(frame: ViewerFrame, custom: ReactNode): StageKind {\n if (frame.page) return { kind: \"zoom\", fit: \"width\" };\n if (custom !== null && custom !== undefined) return { kind: \"custom\", fit: null };\n if (frame.file.url && isImageFile(frame.file)) return { kind: \"zoom\", fit: \"contain\" };\n if (frame.file.url && isVideoFile(frame.file)) return { kind: \"video\", fit: null };\n return { kind: \"file\", fit: null };\n}\n\nexport interface ViewerStageProps {\n frame: ViewerFrame;\n /** What `stageKindOf` said about this frame (the shell already needed it). */\n kind: StageKind[\"kind\"];\n /** The host's `renderBody(file)` result for a pageless file. */\n custom: ReactNode;\n zoom: ViewerZoom;\n onDownload?: (file: ViewerFile) => void;\n overlay: ReactNode;\n}\n\nexport function ViewerStage({ frame, kind, custom, zoom, onDownload, overlay }: ViewerStageProps) {\n const strings = useUiStrings().fileViewer;\n const fmt = useNumberFormat();\n const locale = useUiLocale();\n const key = frameKeyOf(frame);\n /* The failed frame, not a boolean: stepping to another frame is a different\n picture and gets its own chance without an effect to reset anything. */\n const [failedKey, setFailedKey] = useState<string | null>(null);\n const failed = failedKey === key;\n const { file } = frame;\n\n let body: ReactNode;\n if (kind === \"custom\") {\n body = custom;\n } else if (kind === \"video\") {\n body = (\n <div className=\"grid size-full place-items-center p-4\">\n <VideoPlayer\n key={key}\n /* `kind` is \"video\" only when `stageKindOf` saw a url. */\n src={file.url!}\n title={file.name}\n poster={file.thumbnailUrl}\n onDownload={onDownload ? () => onDownload(file) : undefined}\n className=\"max-h-full w-full max-w-5xl\"\n />\n </div>\n );\n } else if (kind === \"zoom\" && failed) {\n body = (\n <div className=\"grid size-full place-items-center px-8 text-center\">\n <div className=\"flex flex-col items-center gap-3\">\n <Icon name=\"image-off\" size=\"lg\" className=\"text-tertiary\" />\n <p className=\"max-w-sm text-xs text-secondary\">\n {frame.page ? strings.pageImageFailed : strings.imageFailed}\n </p>\n {onDownload ? <DownloadButton file={file} onDownload={onDownload} /> : null}\n </div>\n </div>\n );\n } else if (kind === \"zoom\") {\n /* A page has its own url; a pageless \"zoom\" frame is an image `stageKindOf` saw a url on. */\n const source = frame.page ? frame.page.url : file.url!;\n body = (\n <div\n ref={zoom.bindViewport}\n data-viewer-viewport\n className=\"absolute inset-0 overflow-hidden\"\n /* `touch-action: none` is what makes pinch reach the pointer handlers at\n all — without it the browser claims the gesture for its own page zoom\n and no pointermove is ever delivered. */\n style={{ touchAction: \"none\", cursor: zoom.panning ? \"grabbing\" : \"grab\" }}\n onDoubleClick={(event) => {\n if (isInteractiveTarget(event.target)) return;\n const rect = event.currentTarget.getBoundingClientRect();\n zoom.toggleActual({ x: event.clientX - rect.left, y: event.clientY - rect.top });\n }}\n >\n {zoom.measured ? null : (\n <div className=\"absolute inset-0 grid place-items-center\">\n <Spinner size=\"lg\" label={strings.loading} />\n </div>\n )}\n <div\n className=\"absolute left-0 top-0 origin-top-left will-change-transform\"\n style={{ transform: `translate(${zoom.camera.x}px, ${zoom.camera.y}px) scale(${zoom.camera.scale})` }}\n >\n <img\n key={key}\n src={source}\n alt={frameLabel(frame, strings, fmt)}\n /* Not `draggable={false}`: the library bans the HTML5 drag attributes\n outright (dnd-a11y.test.ts). The CSS says the same to the browsers\n that read it, and a native image drag that does start is a\n pointercancel, which the gesture handles. */\n className=\"block max-w-none select-none bg-surface shadow-lg [-webkit-user-drag:none]\"\n style={zoom.measured ? undefined : { width: \"1px\", opacity: 0 }}\n onLoad={(event) => {\n const image = event.currentTarget;\n zoom.setContentSize({ width: image.naturalWidth, height: image.naturalHeight });\n }}\n onError={() => setFailedKey(key)}\n />\n </div>\n </div>\n );\n } else {\n body = (\n <div className=\"grid size-full place-items-center px-8 text-center\">\n <div className=\"flex flex-col items-center gap-3\">\n <Icon name={fileIconFor(file)} size=\"xl\" className=\"text-tertiary\" />\n <div>\n <p className=\"text-sm font-medium text-primary\">{file.name}</p>\n {file.size === undefined ? null : <p className=\"mt-0.5 text-xs text-tertiary\">{formatBytes(file.size, locale)}</p>}\n </div>\n <p className=\"max-w-sm text-xs text-tertiary\">\n {strings.noPreview}\n </p>\n <div className=\"flex flex-wrap items-center justify-center gap-2\">\n {file.url ? (\n <Button variant=\"outline\" render={<a href={file.url} target=\"_blank\" rel=\"noopener noreferrer\" />}>\n <Icon name=\"external-link\" size=\"sm\" />\n {strings.openInNewTab}\n </Button>\n ) : null}\n {onDownload ? <DownloadButton file={file} onDownload={onDownload} /> : null}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"relative min-h-0 flex-1 overflow-hidden bg-surface-sunken\" data-viewer-stage>\n {body}\n {overlay ? <div className=\"pointer-events-none absolute inset-0\">{overlay}</div> : null}\n </div>\n );\n}\n\nfunction DownloadButton({ file, onDownload }: { file: ViewerFile; onDownload: (file: ViewerFile) => void }) {\n const strings = useUiStrings().fileViewer;\n return (\n <Button variant=\"outline\" onClick={() => onDownload(file)}>\n <Icon name=\"download\" size=\"sm\" />\n {strings.download}\n </Button>\n );\n}\n"],"names":["stageKindOf","frame","custom","isImageFile","isVideoFile","ViewerStage","kind","zoom","onDownload","overlay","strings","useUiStrings","fmt","useNumberFormat","locale","useUiLocale","key","frameKeyOf","failedKey","setFailedKey","useState","failed","file","body","jsx","VideoPlayer","jsxs","Icon","DownloadButton","source","event","isInteractiveTarget","rect","Spinner","frameLabel","image","fileIconFor","formatBytes","Button"],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
function a(n) {
|
|
2
|
+
const e = n.flatMap(
|
|
3
|
+
(i) => i.pages && i.pages.length > 0 ? i.pages.map((l) => ({ file: i, page: l })) : [{ file: i, page: null }]
|
|
4
|
+
);
|
|
5
|
+
return e.map((i, l) => ({ ...i, index: l, total: e.length }));
|
|
6
|
+
}
|
|
7
|
+
function g(n) {
|
|
8
|
+
return { fileId: n.file.id, pageId: n.page?.id ?? null, index: n.index };
|
|
9
|
+
}
|
|
10
|
+
function p(n) {
|
|
11
|
+
return `${n.file.id}\0${n.page?.id ?? ""}`;
|
|
12
|
+
}
|
|
13
|
+
function o(n, e) {
|
|
14
|
+
if (n.length === 0) return null;
|
|
15
|
+
if (e) {
|
|
16
|
+
const i = n.find((l) => l.file.id === e.fileId && (l.page?.id ?? null) === e.pageId);
|
|
17
|
+
return i || (n[Math.min(e.index, n.length - 1)] ?? null);
|
|
18
|
+
}
|
|
19
|
+
return n[0] ?? null;
|
|
20
|
+
}
|
|
21
|
+
function f(n, e) {
|
|
22
|
+
const i = (t) => !e.fileId || t.file.id === e.fileId, l = n.filter(i), d = l.length > 0 ? l : n;
|
|
23
|
+
return (e.pageId ? d.find((t) => t.page?.id === e.pageId) : void 0) ?? d.find((t) => t.page?.marked) ?? d[0] ?? null;
|
|
24
|
+
}
|
|
25
|
+
function r(n, e, i) {
|
|
26
|
+
const { file: l, page: d } = n;
|
|
27
|
+
return d ? d.number === null || d.number === void 0 ? e.unnumberedPageOf(l.name) : e.pageOf(l.name, i(d.number)) : l.name;
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
g as cursorOf,
|
|
31
|
+
p as frameKeyOf,
|
|
32
|
+
r as frameLabel,
|
|
33
|
+
a as framesOf,
|
|
34
|
+
o as resolveCursor,
|
|
35
|
+
f as startFrame
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=frames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frames.js","sources":["../../../src/components/file-viewer/frames.ts"],"sourcesContent":["import type { UiStrings } from \"../../lib/i18n\";\nimport type { ViewerFile, ViewerFrame } from \"./types\";\n\n/* ============================================================================\n FRAMES — pure, no DOM. (DX-4398)\n\n A frame is one thing on the stage: a file without pages is ONE frame, a file\n with N pages is N frames. Every step, jump and position readout is over\n frames, so a multi-page PDF between two images steps image, page 1, page 2,\n ..., image with the same Next button.\n\n THE READER'S POSITION IS HELD AS IDS, never as an index (see `Cursor`): a live\n change to `files` — a file someone else removed — must keep the reader on the\n same frame, and an index silently slides to its neighbour.\n ========================================================================= */\n\n/** Where the reader is. The ids are the truth; `index` only says where to land\n when both have vanished (the nearest position). */\nexport interface Cursor {\n fileId: string;\n pageId: string | null;\n index: number;\n}\n\nexport function framesOf(files: readonly ViewerFile[]): ViewerFrame[] {\n const placed: Array<Pick<ViewerFrame, \"file\" | \"page\">> = files.flatMap((file) =>\n file.pages && file.pages.length > 0\n ? file.pages.map((page): Pick<ViewerFrame, \"file\" | \"page\"> => ({ file, page }))\n : [{ file, page: null }],\n );\n return placed.map((frame, index) => ({ ...frame, index, total: placed.length }));\n}\n\nexport function cursorOf(frame: ViewerFrame): Cursor {\n return { fileId: frame.file.id, pageId: frame.page?.id ?? null, index: frame.index };\n}\n\n/** A stable identity for the frame on the stage, for keys and change detection. */\nexport function frameKeyOf(frame: ViewerFrame): string {\n return `${frame.file.id}\\u0000${frame.page?.id ?? \"\"}`;\n}\n\n/** The frame the cursor names, else the one nearest its last index. */\nexport function resolveCursor(frames: readonly ViewerFrame[], cursor: Cursor | null): ViewerFrame | null {\n if (frames.length === 0) return null;\n if (cursor) {\n const named = frames.find((frame) => frame.file.id === cursor.fileId && (frame.page?.id ?? null) === cursor.pageId);\n if (named) return named;\n return frames[Math.min(cursor.index, frames.length - 1)] ?? null;\n }\n return frames[0] ?? null;\n}\n\nexport interface Start {\n fileId?: string | null;\n pageId?: string | null;\n}\n\n/**\n * Where a viewer opens: the frame whose page id is `pageId` (inside `fileId`\n * when given), else the first marked frame (inside `fileId` when given), else\n * the first frame (of `fileId` when given). An id that matches nothing falls\n * through to the next rule — a stale deep link opens the document, not nothing.\n */\nexport function startFrame(frames: readonly ViewerFrame[], start: Start): ViewerFrame | null {\n const inFile = (frame: ViewerFrame) => !start.fileId || frame.file.id === start.fileId;\n const scoped = frames.filter(inFile);\n const pool = scoped.length > 0 ? scoped : frames;\n const byPage = start.pageId ? pool.find((frame) => frame.page?.id === start.pageId) : undefined;\n return byPage ?? pool.find((frame) => frame.page?.marked) ?? pool[0] ?? null;\n}\n\n/** The frame's name, for a screen reader and for an alt attribute. */\nexport function frameLabel(frame: ViewerFrame, strings: UiStrings[\"fileViewer\"], fmt: (n: number) => string): string {\n const { file, page } = frame;\n if (!page) return file.name;\n return page.number === null || page.number === undefined\n ? strings.unnumberedPageOf(file.name)\n : strings.pageOf(file.name, fmt(page.number));\n}\n"],"names":["framesOf","files","placed","file","page","frame","index","cursorOf","frameKeyOf","resolveCursor","frames","cursor","named","startFrame","start","inFile","scoped","pool","frameLabel","strings","fmt"],"mappings":"AAwBO,SAASA,EAASC,GAA6C;AACpE,QAAMC,IAAoDD,EAAM;AAAA,IAAQ,CAACE,MACvEA,EAAK,SAASA,EAAK,MAAM,SAAS,IAC9BA,EAAK,MAAM,IAAI,CAACC,OAA8C,EAAE,MAAAD,GAAM,MAAAC,EAAA,EAAO,IAC7E,CAAC,EAAE,MAAAD,GAAM,MAAM,KAAA,CAAM;AAAA,EAAA;AAE3B,SAAOD,EAAO,IAAI,CAACG,GAAOC,OAAW,EAAE,GAAGD,GAAO,OAAAC,GAAO,OAAOJ,EAAO,OAAA,EAAS;AACjF;AAEO,SAASK,EAASF,GAA4B;AACnD,SAAO,EAAE,QAAQA,EAAM,KAAK,IAAI,QAAQA,EAAM,MAAM,MAAM,MAAM,OAAOA,EAAM,MAAA;AAC/E;AAGO,SAASG,EAAWH,GAA4B;AACrD,SAAO,GAAGA,EAAM,KAAK,EAAE,KAASA,EAAM,MAAM,MAAM,EAAE;AACtD;AAGO,SAASI,EAAcC,GAAgCC,GAA2C;AACvG,MAAID,EAAO,WAAW,EAAG,QAAO;AAChC,MAAIC,GAAQ;AACV,UAAMC,IAAQF,EAAO,KAAK,CAACL,MAAUA,EAAM,KAAK,OAAOM,EAAO,WAAWN,EAAM,MAAM,MAAM,UAAUM,EAAO,MAAM;AAClH,WAAIC,MACGF,EAAO,KAAK,IAAIC,EAAO,OAAOD,EAAO,SAAS,CAAC,CAAC,KAAK;AAAA,EAC9D;AACA,SAAOA,EAAO,CAAC,KAAK;AACtB;AAaO,SAASG,EAAWH,GAAgCI,GAAkC;AAC3F,QAAMC,IAAS,CAACV,MAAuB,CAACS,EAAM,UAAUT,EAAM,KAAK,OAAOS,EAAM,QAC1EE,IAASN,EAAO,OAAOK,CAAM,GAC7BE,IAAOD,EAAO,SAAS,IAAIA,IAASN;AAE1C,UADeI,EAAM,SAASG,EAAK,KAAK,CAACZ,MAAUA,EAAM,MAAM,OAAOS,EAAM,MAAM,IAAI,WACrEG,EAAK,KAAK,CAACZ,MAAUA,EAAM,MAAM,MAAM,KAAKY,EAAK,CAAC,KAAK;AAC1E;AAGO,SAASC,EAAWb,GAAoBc,GAAkCC,GAAoC;AACnH,QAAM,EAAE,MAAAjB,GAAM,MAAAC,EAAA,IAASC;AACvB,SAAKD,IACEA,EAAK,WAAW,QAAQA,EAAK,WAAW,SAC3Ce,EAAQ,iBAAiBhB,EAAK,IAAI,IAClCgB,EAAQ,OAAOhB,EAAK,MAAMiB,EAAIhB,EAAK,MAAM,CAAC,IAH5BD,EAAK;AAIzB;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useState as c, useMemo as p, useCallback as v, useRef as w, useEffect as F } from "react";
|
|
2
|
+
import { framesOf as R, resolveCursor as b, cursorOf as f, frameKeyOf as k, startFrame as y } from "./frames.js";
|
|
3
|
+
function K({ open: r, files: s, initialFileId: h, initialPageId: I, onFrameChange: u }) {
|
|
4
|
+
const [i, x] = c(s);
|
|
5
|
+
s.length > 0 && s !== i && x(s);
|
|
6
|
+
const l = s.length > 0 ? s : i, n = p(() => R(l), [l]), m = () => {
|
|
7
|
+
const e = y(n, { fileId: h, pageId: I });
|
|
8
|
+
return e ? f(e) : null;
|
|
9
|
+
}, [o, a] = c(() => r ? m() : null), [C, O] = c(r), t = b(n, o);
|
|
10
|
+
if (r !== C)
|
|
11
|
+
O(r), r && a(m());
|
|
12
|
+
else if (r && t) {
|
|
13
|
+
const e = f(t);
|
|
14
|
+
(!o || o.fileId !== e.fileId || o.pageId !== e.pageId || o.index !== e.index) && a(e);
|
|
15
|
+
}
|
|
16
|
+
const M = v(
|
|
17
|
+
(e) => {
|
|
18
|
+
const g = n[Math.max(0, Math.min(n.length - 1, e))];
|
|
19
|
+
g && a(f(g));
|
|
20
|
+
},
|
|
21
|
+
[n]
|
|
22
|
+
), d = w(u);
|
|
23
|
+
d.current = u;
|
|
24
|
+
const $ = t ? `${k(t)}\0${t.index}\0${t.total}` : "";
|
|
25
|
+
return F(() => {
|
|
26
|
+
r && t && d.current?.(t);
|
|
27
|
+
}, [r, $]), { frames: n, frame: t, go: M };
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
K as useFrameCursor
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=use-frame-cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-frame-cursor.js","sources":["../../../src/components/file-viewer/use-frame-cursor.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cursorOf, frameKeyOf, framesOf, resolveCursor, startFrame, type Cursor } from \"./frames\";\nimport type { ViewerFile, ViewerFrame } from \"./types\";\n\n/* ============================================================================\n FRAME CURSOR (DX-4398)\n\n Which frame the reader is on, kept as IDS (see `frames.ts`), uncontrolled:\n read from `initial*` each time `open` turns true and never afterwards, observed\n through `onFrameChange`. There is no controlled counterpart, because a pair is\n two sources of truth for one thing.\n ========================================================================= */\n\nexport interface UseFrameCursorOptions {\n open: boolean;\n files: ViewerFile[];\n initialFileId?: string | null;\n initialPageId?: string | null;\n onFrameChange?: (frame: ViewerFrame) => void;\n}\n\nexport function useFrameCursor({ open, files, initialFileId, initialPageId, onFrameChange }: UseFrameCursorOptions) {\n /* DX-4039: a host closes the viewer by clearing `files` while the Dialog is\n still animating out for several frames. Rendering from the prop alone\n repainted that exit empty. So the LAST non-empty list is held and rendered.\n Set during render (React's derived-state pattern), not in an effect, so the\n held list is in place on the very frame the prop clears. */\n const [held, setHeld] = useState(files);\n if (files.length > 0 && files !== held) setHeld(files);\n const shown = files.length > 0 ? files : held;\n const frames = useMemo(() => framesOf(shown), [shown]);\n\n const openingCursor = (): Cursor | null => {\n const first = startFrame(frames, { fileId: initialFileId, pageId: initialPageId });\n return first ? cursorOf(first) : null;\n };\n const [cursor, setCursor] = useState<Cursor | null>(() => (open ? openingCursor() : null));\n const [wasOpen, setWasOpen] = useState(open);\n const frame = resolveCursor(frames, cursor);\n if (open !== wasOpen) {\n setWasOpen(open);\n if (open) setCursor(openingCursor());\n } else if (open && frame) {\n /* Keep the ids truthful: a vanished frame has fallen to its nearest\n neighbour, and an earlier removal moved the index. */\n const resolved = cursorOf(frame);\n if (!cursor || cursor.fileId !== resolved.fileId || cursor.pageId !== resolved.pageId || cursor.index !== resolved.index) {\n setCursor(resolved);\n }\n }\n\n const go = useCallback(\n (next: number) => {\n const target = frames[Math.max(0, Math.min(frames.length - 1, next))];\n if (target) setCursor(cursorOf(target));\n },\n [frames],\n );\n\n /* On open and on every step, never on a re-render that left the frame alone.\n Told through a ref so a new callback identity is not a change. */\n const onFrameChangeRef = useRef(onFrameChange);\n onFrameChangeRef.current = onFrameChange;\n const signature = frame ? `${frameKeyOf(frame)}\\u0000${frame.index}\\u0000${frame.total}` : \"\";\n useEffect(() => {\n if (open && frame) onFrameChangeRef.current?.(frame);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- the signature IS the frame's identity; the object is rebuilt every render\n }, [open, signature]);\n\n return { frames, frame, go };\n}\n"],"names":["useFrameCursor","open","files","initialFileId","initialPageId","onFrameChange","held","setHeld","useState","shown","frames","useMemo","framesOf","openingCursor","first","startFrame","cursorOf","cursor","setCursor","wasOpen","setWasOpen","frame","resolveCursor","resolved","go","useCallback","next","target","onFrameChangeRef","useRef","signature","frameKeyOf","useEffect"],"mappings":";;AAqBO,SAASA,EAAe,EAAE,MAAAC,GAAM,OAAAC,GAAO,eAAAC,GAAe,eAAAC,GAAe,eAAAC,KAAwC;AAMlH,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAASN,CAAK;AACtC,EAAIA,EAAM,SAAS,KAAKA,MAAUI,OAAcJ,CAAK;AACrD,QAAMO,IAAQP,EAAM,SAAS,IAAIA,IAAQI,GACnCI,IAASC,EAAQ,MAAMC,EAASH,CAAK,GAAG,CAACA,CAAK,CAAC,GAE/CI,IAAgB,MAAqB;AACzC,UAAMC,IAAQC,EAAWL,GAAQ,EAAE,QAAQP,GAAe,QAAQC,GAAe;AACjF,WAAOU,IAAQE,EAASF,CAAK,IAAI;AAAA,EACnC,GACM,CAACG,GAAQC,CAAS,IAAIV,EAAwB,MAAOP,IAAOY,EAAA,IAAkB,IAAK,GACnF,CAACM,GAASC,CAAU,IAAIZ,EAASP,CAAI,GACrCoB,IAAQC,EAAcZ,GAAQO,CAAM;AAC1C,MAAIhB,MAASkB;AACX,IAAAC,EAAWnB,CAAI,GACXA,KAAMiB,EAAUL,GAAe;AAAA,WAC1BZ,KAAQoB,GAAO;AAGxB,UAAME,IAAWP,EAASK,CAAK;AAC/B,KAAI,CAACJ,KAAUA,EAAO,WAAWM,EAAS,UAAUN,EAAO,WAAWM,EAAS,UAAUN,EAAO,UAAUM,EAAS,UACjHL,EAAUK,CAAQ;AAAA,EAEtB;AAEA,QAAMC,IAAKC;AAAA,IACT,CAACC,MAAiB;AAChB,YAAMC,IAASjB,EAAO,KAAK,IAAI,GAAG,KAAK,IAAIA,EAAO,SAAS,GAAGgB,CAAI,CAAC,CAAC;AACpE,MAAIC,KAAQT,EAAUF,EAASW,CAAM,CAAC;AAAA,IACxC;AAAA,IACA,CAACjB,CAAM;AAAA,EAAA,GAKHkB,IAAmBC,EAAOxB,CAAa;AAC7C,EAAAuB,EAAiB,UAAUvB;AAC3B,QAAMyB,IAAYT,IAAQ,GAAGU,EAAWV,CAAK,CAAC,KAASA,EAAM,KAAK,KAASA,EAAM,KAAK,KAAK;AAC3F,SAAAW,EAAU,MAAM;AACd,IAAI/B,KAAQoB,KAAOO,EAAiB,UAAUP,CAAK;AAAA,EAErD,GAAG,CAACpB,GAAM6B,CAAS,CAAC,GAEb,EAAE,QAAApB,GAAQ,OAAAW,GAAO,IAAAG,EAAA;AAC1B;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { useState as l, useRef as d, useEffect as k } from "react";
|
|
2
|
+
const p = "input, textarea, select, video, audio, [contenteditable]:not([contenteditable='false'])";
|
|
3
|
+
function m(a) {
|
|
4
|
+
const [r, i] = l(null), o = d(a);
|
|
5
|
+
return o.current = a, k(() => {
|
|
6
|
+
if (!r) return;
|
|
7
|
+
const s = (e) => {
|
|
8
|
+
const c = e.target;
|
|
9
|
+
if (!(c instanceof Element) || e.ctrlKey || e.metaKey || e.altKey || c.closest(p)) return;
|
|
10
|
+
const { go: n, index: u, total: f, zoom: t } = o.current;
|
|
11
|
+
switch (e.key) {
|
|
12
|
+
case "ArrowRight":
|
|
13
|
+
case "PageDown":
|
|
14
|
+
n(u + 1);
|
|
15
|
+
break;
|
|
16
|
+
case "ArrowLeft":
|
|
17
|
+
case "PageUp":
|
|
18
|
+
n(u - 1);
|
|
19
|
+
break;
|
|
20
|
+
case "Home":
|
|
21
|
+
n(0);
|
|
22
|
+
break;
|
|
23
|
+
case "End":
|
|
24
|
+
n(f - 1);
|
|
25
|
+
break;
|
|
26
|
+
case "+":
|
|
27
|
+
case "=":
|
|
28
|
+
if (!t) return;
|
|
29
|
+
t.zoomIn();
|
|
30
|
+
break;
|
|
31
|
+
case "-":
|
|
32
|
+
if (!t) return;
|
|
33
|
+
t.zoomOut();
|
|
34
|
+
break;
|
|
35
|
+
case "0":
|
|
36
|
+
if (!t) return;
|
|
37
|
+
t.reset();
|
|
38
|
+
break;
|
|
39
|
+
default:
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
e.preventDefault();
|
|
43
|
+
};
|
|
44
|
+
return r.addEventListener("keydown", s), () => r.removeEventListener("keydown", s);
|
|
45
|
+
}, [r]), i;
|
|
46
|
+
}
|
|
47
|
+
export {
|
|
48
|
+
m as useViewerKeys
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=use-viewer-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-viewer-keys.js","sources":["../../../src/components/file-viewer/use-viewer-keys.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\n/* Targets that keep their own keys: an editable field (typing a page number) and\n a media element (arrow-seeking a video). */\nconst OWN_KEYS_TARGETS = \"input, textarea, select, video, audio, [contenteditable]:not([contenteditable='false'])\";\n\nexport interface ViewerKeyActions {\n go: (index: number) => void;\n index: number;\n total: number;\n /** Null when the frame is not zoomable: the zoom keys are then not handled. */\n zoom: { zoomIn: () => void; zoomOut: () => void; reset: () => void } | null;\n}\n\n/**\n * The viewer's keyboard (DX-4398): Arrow, PageUp/PageDown, Home and End step\n * frames; `+`, `-` and `0` zoom. Returns the callback ref for the Dialog popup.\n *\n * A NATIVE listener on the popup element, not a document one and not a React\n * `onKeyDown`: Base UI's popup stops propagation of the arrow, Home, End and Page\n * keys (they belong to composite widgets), so by the time a key reached\n * `document` it was gone. On the popup itself it runs first. It only ever sees\n * keys aimed at the viewer's own DOM: a key inside a portalled Popover (the\n * overflow menu) has a target outside the popup, so it never gets here. Escape is\n * not handled: it is the Dialog's.\n */\nexport function useViewerKeys(actions: ViewerKeyActions) {\n const [popup, setPopup] = useState<HTMLDivElement | null>(null);\n const live = useRef(actions);\n live.current = actions;\n\n useEffect(() => {\n if (!popup) return;\n const onKey = (event: KeyboardEvent) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n if (event.ctrlKey || event.metaKey || event.altKey) return;\n if (target.closest(OWN_KEYS_TARGETS)) return;\n const { go, index, total, zoom } = live.current;\n switch (event.key) {\n case \"ArrowRight\":\n case \"PageDown\":\n go(index + 1);\n break;\n case \"ArrowLeft\":\n case \"PageUp\":\n go(index - 1);\n break;\n case \"Home\":\n go(0);\n break;\n case \"End\":\n go(total - 1);\n break;\n case \"+\":\n case \"=\":\n if (!zoom) return;\n zoom.zoomIn();\n break;\n case \"-\":\n if (!zoom) return;\n zoom.zoomOut();\n break;\n case \"0\":\n if (!zoom) return;\n zoom.reset();\n break;\n default:\n return;\n }\n event.preventDefault();\n };\n popup.addEventListener(\"keydown\", onKey);\n return () => popup.removeEventListener(\"keydown\", onKey);\n }, [popup]);\n\n return setPopup;\n}\n"],"names":["OWN_KEYS_TARGETS","useViewerKeys","actions","popup","setPopup","useState","live","useRef","useEffect","onKey","event","target","go","index","total","zoom"],"mappings":";AAIA,MAAMA,IAAmB;AAsBlB,SAASC,EAAcC,GAA2B;AACvD,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAgC,IAAI,GACxDC,IAAOC,EAAOL,CAAO;AAC3B,SAAAI,EAAK,UAAUJ,GAEfM,EAAU,MAAM;AACd,QAAI,CAACL,EAAO;AACZ,UAAMM,IAAQ,CAACC,MAAyB;AACtC,YAAMC,IAASD,EAAM;AAGrB,UAFI,EAAEC,aAAkB,YACpBD,EAAM,WAAWA,EAAM,WAAWA,EAAM,UACxCC,EAAO,QAAQX,CAAgB,EAAG;AACtC,YAAM,EAAE,IAAAY,GAAI,OAAAC,GAAO,OAAAC,GAAO,MAAAC,EAAA,IAAST,EAAK;AACxC,cAAQI,EAAM,KAAA;AAAA,QACZ,KAAK;AAAA,QACL,KAAK;AACH,UAAAE,EAAGC,IAAQ,CAAC;AACZ;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,UAAAD,EAAGC,IAAQ,CAAC;AACZ;AAAA,QACF,KAAK;AACH,UAAAD,EAAG,CAAC;AACJ;AAAA,QACF,KAAK;AACH,UAAAA,EAAGE,IAAQ,CAAC;AACZ;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,cAAI,CAACC,EAAM;AACX,UAAAA,EAAK,OAAA;AACL;AAAA,QACF,KAAK;AACH,cAAI,CAACA,EAAM;AACX,UAAAA,EAAK,QAAA;AACL;AAAA,QACF,KAAK;AACH,cAAI,CAACA,EAAM;AACX,UAAAA,EAAK,MAAA;AACL;AAAA,QACF;AACE;AAAA,MAAA;AAEJ,MAAAL,EAAM,eAAA;AAAA,IACR;AACA,WAAAP,EAAM,iBAAiB,WAAWM,CAAK,GAChC,MAAMN,EAAM,oBAAoB,WAAWM,CAAK;AAAA,EACzD,GAAG,CAACN,CAAK,CAAC,GAEHC;AACT;"}
|