@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 @@
|
|
|
1
|
+
{"version":3,"file":"TimeSeriesChart.js","sources":["../../../src/components/chart/TimeSeriesChart.tsx"],"sourcesContent":["import { useId, useRef, useState, type KeyboardEvent, type ReactNode, type Ref } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { useUiLocale, useUiStrings } from \"../../lib/i18n\";\nimport { CHART_SERIES_COUNT, chartSeriesColor } from \"../../lib/chart-palette\";\nimport {\n ChartEmpty,\n ChartTable,\n ChartTip,\n LEGEND_FRAME,\n LegendItem,\n LegendList,\n LegendSwatch,\n LegendToggle,\n OTHER_KEY,\n TipBody,\n ValueGrid,\n XTickLabel,\n defaultFormatValue,\n plotLayout,\n useElementWidth,\n useHiddenSeries,\n} from \"./shared\";\nimport { LABEL_CHAR_PX, LABEL_PAD_PX } from \"./label-metrics\";\nimport { bucketIndexAt, niceTicks, timeFormatters } from \"./time-series-scale\";\n\n/* ============================================================================\n TIME SERIES CHART — stacked values over time buckets (DX-4328).\n\n THE FORM. Change over time with a part-to-whole split inside every bucket:\n one stacked column per bucket, because a bucket is a discrete span (an hour,\n a day) and a column is how a span reads even when there is only one of them.\n `variant=\"area\"` draws the same stack as bands joined across the buckets, for\n a long run of buckets where the shape matters more than any one span.\n\n THE CALLER BUCKETS. Values arrive already summed per bucket, ordered and\n gap-free; this component fetches nothing and aggregates nothing, and it knows\n nothing about what the values are (tokens, dollars): `formatValue` is how a\n value reads, so switching the measure is the caller swapping data and\n formatter, with no chart-owned state to reset.\n\n COLOUR FOLLOWS POSITION, never rank. Series take the categorical chart\n palette in input order, never cycled; the 9th member onward folds into the\n neutral `Other` (merged with any series the caller marks `role: \"other\"`).\n Hiding a series from the legend never repaints the others.\n\n UNMEASURED SPANS are a second kind of mark: a `block` sits in the bucket that\n holds its `at`, stacked on that bucket's measured segments, and is HATCHED in\n a neutral ink — never a palette colour — so it cannot be read as one more\n series. Its `kind` names it in the legend; the first kind hatches at 45\n degrees and the second at 135, the only two angles that cannot be read as a\n gridline. Its value counts toward the bucket total.\n\n READING A VALUE. Every bucket is one `img` stop with a tooltip listing each\n series' value and the total; the buckets are a single tab stop and the arrow\n keys (Home, End) move between them. The legend toggles a series and, when\n `onSelectSeries` is given, its name selects it; clicking a band does the same.\n A visually hidden table carries every number, hidden series included.\n\n TEXT WEARS INK, never the series colour. Marks carry the hue; labels, ticks\n and tooltip text are ink tokens.\n\n THE GEOMETRY (pinned by test): columns at most 24px wide, a 2px surface gap\n between stacked segments and between touching columns, only the top of a\n column rounded (4px), the axis from zero, hairline solid grid.\n\n NO MOTION. Nothing here animates, so there is nothing for reduced motion to\n take away.\n ========================================================================= */\n\nexport type TimeSeriesRole = \"member\" | \"other\";\n\nexport interface TimeSeriesSeries {\n /** Unique within the chart. */\n key: string;\n label: string;\n /** `other` is the neutral remainder: drawn last, in a neutral tone, never selectable. @default \"member\" */\n role?: TimeSeriesRole;\n /** One value per bucket, same order. Finite and >= 0 — anything else throws. */\n points: readonly number[];\n}\n\n/** A named kind of unmeasured span: its label is its legend entry. At most two (45 and 135 degree hatching). */\nexport interface TimeSeriesBlockKind {\n key: string;\n label: string;\n}\n\n/** A span the chart cannot place in time, drawn hatched in the bucket that holds `at`. */\nexport interface TimeSeriesBlock {\n /** Unique within the chart. */\n id: string;\n /** Epoch ms; must fall inside one of the buckets. */\n at: number;\n /** Finite and >= 0. Counts toward the bucket total. */\n value: number;\n /** What this span is, for its tooltip line and the table. */\n label: string;\n /** A `TimeSeriesBlockKind.key`. */\n kind: string;\n}\n\nexport interface TimeSeriesChartProps {\n /** Each bucket's start, epoch ms, strictly ascending. */\n buckets: readonly number[];\n /** The width of one bucket in ms; null only when there are no buckets. */\n bucketMs: number | null;\n /** In stacking order, bottom first; also the palette order. */\n series: readonly TimeSeriesSeries[];\n blocks?: readonly TimeSeriesBlock[];\n blockKinds?: readonly TimeSeriesBlockKind[];\n /** What the chart measures, e.g. \"Tokens over time\". Names the group and captions the table. */\n label: string;\n /** @default \"bar\" */\n variant?: \"bar\" | \"area\";\n /** How a raw value reads in the tooltip and the table. @default locale-formatted number */\n formatValue?: (value: number) => string;\n /** How a value reads on the y axis; use a compact form here. @default `formatValue` */\n formatAxis?: (value: number) => string;\n /** IANA zone the buckets are labelled in, e.g. \"UTC\". @default the viewer's */\n timeZone?: string;\n /** Called with a member series' key when its band or its legend name is clicked. */\n onSelectSeries?: (key: string) => void;\n /** Plot height in px. @default 240 */\n height?: number;\n /** Said when there is nothing to draw. @default the built-in \"No data\" */\n emptyLabel?: string;\n /** Said over the axis when every value is zero. @default the built-in \"All values are zero\" */\n zeroLabel?: string;\n className?: string;\n ref?: Ref<HTMLDivElement>;\n}\n\nconst BAR_MAX = 24;\nconst GAP = 2;\nconst RADIUS = 4;\nconst MARGIN = { top: 8, right: 8, bottom: 36 };\nconst HATCH = 6;\n\ninterface Member {\n key: string;\n label: string;\n color: string;\n other: boolean;\n points: number[];\n}\n\ninterface Piece {\n /** Stable id of the mark: a member key, `fold:other` or `block:<id>`. */\n id: string;\n label: string;\n color: string;\n value: number;\n block: TimeSeriesBlock | null;\n member: Member | null;\n}\n\nfunction validate(props: TimeSeriesChartProps): void {\n const { buckets, bucketMs, series, blocks = [], blockKinds = [] } = props;\n if (buckets.length > 0 && (bucketMs === null || !Number.isFinite(bucketMs) || bucketMs <= 0)) {\n throw new Error(`TimeSeriesChart: bucketMs must be a positive number when there are buckets; got ${bucketMs}.`);\n }\n buckets.forEach((b, i) => {\n if (!Number.isFinite(b)) throw new Error(`TimeSeriesChart: bucket ${i} is ${b}; buckets are finite epoch ms.`);\n if (i > 0 && b <= buckets[i - 1]!) throw new Error(`TimeSeriesChart: buckets must be strictly ascending (bucket ${i}).`);\n });\n const keys = new Set<string>();\n for (const s of series) {\n if (keys.has(s.key)) throw new Error(`TimeSeriesChart: duplicate series key \"${s.key}\".`);\n keys.add(s.key);\n if (s.points.length !== buckets.length) {\n throw new Error(`TimeSeriesChart: \"${s.key}\" has ${s.points.length} points for ${buckets.length} buckets.`);\n }\n for (const p of s.points) {\n if (!Number.isFinite(p) || p < 0) throw new Error(`TimeSeriesChart: \"${s.key}\" has value ${p}; values must be finite and >= 0.`);\n }\n }\n if (blockKinds.length > 2) throw new Error(`TimeSeriesChart: at most 2 block kinds (45 and 135 degree hatching); got ${blockKinds.length}.`);\n const kinds = new Set(blockKinds.map((k) => k.key));\n const ids = new Set<string>();\n for (const b of blocks) {\n if (ids.has(b.id)) throw new Error(`TimeSeriesChart: duplicate block id \"${b.id}\".`);\n ids.add(b.id);\n if (!Number.isFinite(b.value) || b.value < 0) throw new Error(`TimeSeriesChart: block \"${b.id}\" has value ${b.value}; values must be finite and >= 0.`);\n if (!kinds.has(b.kind)) throw new Error(`TimeSeriesChart: block \"${b.id}\" has kind \"${b.kind}\", which is not in blockKinds.`);\n if (bucketMs === null || bucketIndexAt(buckets, bucketMs, b.at) < 0) {\n throw new Error(`TimeSeriesChart: block \"${b.id}\" at ${b.at} falls inside no bucket.`);\n }\n }\n}\n\n/** Members in palette order, with the 9th onward and every `other` series merged into one trailing Other. */\nfunction toMembers(series: readonly TimeSeriesSeries[], bucketCount: number, otherLabel: string): Member[] {\n const members: Member[] = [];\n const rest: TimeSeriesSeries[] = [];\n for (const s of series) {\n if (s.role === \"other\" || members.length >= CHART_SERIES_COUNT) rest.push(s);\n else members.push({ key: s.key, label: s.label, color: chartSeriesColor(members.length), other: false, points: [...s.points] });\n }\n if (rest.length > 0) {\n const explicit = rest.filter((s) => s.role === \"other\");\n members.push({\n key: OTHER_KEY,\n label: explicit.length === rest.length && explicit.length === 1 ? explicit[0]!.label : otherLabel,\n color: \"var(--text-tertiary)\",\n other: true,\n points: Array.from({ length: bucketCount }, (_, i) => rest.reduce((sum, s) => sum + s.points[i]!, 0)),\n });\n }\n return members;\n}\n\n/** A column whose top corners are rounded and whose baseline end is square. */\nfunction topRounded(x: number, y: number, w: number, h: number): string {\n const r = Math.min(RADIUS, w / 2, h);\n return `M${x},${y + h}V${y + r}Q${x},${y} ${x + r},${y}H${x + w - r}Q${x + w},${y} ${x + w},${y + r}V${y + h}Z`;\n}\n\nfunction hatchFill(kind: number, id: string): string {\n return `url(#${id}-hatch-${kind})`;\n}\n\n/** The CSS hatch used for the legend swatch of a block kind — the same two angles the marks use. */\nfunction hatchSwatch(kind: number): string {\n const angle = kind === 0 ? 45 : 135;\n return `repeating-linear-gradient(${angle}deg, var(--text-tertiary) 0 1.5px, var(--surface-inset) 1.5px 4px)`;\n}\n\nexport function TimeSeriesChart(props: TimeSeriesChartProps) {\n validate(props);\n const {\n buckets,\n bucketMs,\n series,\n blocks = [],\n blockKinds = [],\n label,\n variant = \"bar\",\n formatValue: formatCaller,\n timeZone,\n onSelectSeries,\n height = 240,\n emptyLabel: emptyCaller,\n zeroLabel: zeroCaller,\n className,\n ref,\n } = props;\n const locale = useUiLocale();\n const strings = useUiStrings().chart;\n const words = strings.timeSeriesChart;\n const emptyLabel = emptyCaller ?? words.empty;\n const zeroLabel = zeroCaller ?? words.zero;\n const formatValue = formatCaller ?? ((value: number) => defaultFormatValue(value, locale));\n const formatAxis = props.formatAxis ?? formatValue;\n\n const uid = useId().replace(/:/g, \"\");\n const measureRef = useRef<HTMLDivElement>(null);\n const [hidden, toggle] = useHiddenSeries();\n const [hover, setHover] = useState<number | null>(null);\n const [focus, setFocus] = useState<number | null>(null);\n const [roving, setRoving] = useState(0);\n\n const measured = useElementWidth(measureRef);\n\n const n = buckets.length;\n const members = toMembers(series, n, strings.other);\n const kindIndex = new Map(blockKinds.map((k, i) => [k.key, i]));\n const blocksByBucket: TimeSeriesBlock[][] = Array.from({ length: n }, () => []);\n for (const b of blocks) blocksByBucket[bucketIndexAt(buckets, bucketMs!, b.at)]!.push(b);\n\n if (n === 0 || (members.length === 0 && blocks.length === 0)) {\n return <ChartEmpty ref={ref} label={label} text={emptyLabel} height={height} className={className} />;\n }\n\n const shown = members.filter((m) => !hidden.has(m.key));\n const pieces = (i: number): Piece[] => [\n ...shown\n .filter((m) => m.points[i]! > 0)\n .map((m): Piece => ({ id: m.key, label: m.label, color: m.color, value: m.points[i]!, block: null, member: m })),\n ...blocksByBucket[i]!\n .filter((b) => b.value > 0)\n .map((b): Piece => ({ id: `block:${b.id}`, label: b.label, color: \"\", value: b.value, block: b, member: null })),\n ];\n const totals = buckets.map((_, i) => pieces(i).reduce((sum, p) => sum + p.value, 0));\n const dataMax = Math.max(0, ...totals);\n const zero = dataMax === 0;\n const nice = niceTicks(dataMax);\n // Nothing to scale: the axis is its zero line alone, never an invented \"1 token\" top tick.\n const ticks = zero ? [0] : nice.ticks;\n const yMax = nice.max;\n\n const bucketWidth = bucketMs!;\n const tf = timeFormatters(bucketWidth, locale, timeZone);\n const axisLabels = ticks.map(formatAxis);\n const { left, W, plotW, plotH } = plotLayout(measured, height, MARGIN, axisLabels);\n const slot = plotW / n;\n const barW = Math.max(1, Math.min(BAR_MAX, slot - GAP));\n const cx = (i: number) => left + slot * (i + 0.5);\n const y = (v: number) => MARGIN.top + plotH * (1 - v / yMax);\n const base = y(0);\n const area = variant === \"area\" && n > 1;\n\n const xLabels = buckets.map((b, i) => tf.tick(b, i === 0 ? null : buckets[i - 1]!));\n const labelChars = Math.max(...xLabels.map((l) => Math.max(l.primary.length, (l.secondary ?? \"\").length)));\n const step = Math.max(1, Math.ceil((labelChars * LABEL_CHAR_PX + LABEL_PAD_PX) / slot));\n\n const active = hover ?? focus;\n const move = (e: KeyboardEvent<SVGGElement>, i: number) => {\n const to = e.key === \"ArrowRight\" ? i + 1 : e.key === \"ArrowLeft\" ? i - 1 : e.key === \"Home\" ? 0 : e.key === \"End\" ? n - 1 : null;\n if (to === null) return;\n e.preventDefault();\n const target = Math.min(n - 1, Math.max(0, to));\n setRoving(target);\n (e.currentTarget.parentElement?.querySelector(`[data-bucket-index=\"${target}\"]`) as SVGGElement | null)?.focus();\n };\n\n const select = onSelectSeries === undefined ? undefined : (m: Member) => (m.other ? undefined : () => onSelectSeries(m.key));\n\n const tipFor = (i: number): ReactNode => {\n const rows = pieces(i);\n return (\n <TipBody\n label={tf.full(buckets[i]!)}\n lines={[\n ...[...rows].reverse().map((p) => (\n <span key={p.id} className=\"flex items-center gap-1.5\">\n {p.block ? (\n <span aria-hidden style={{ background: hatchSwatch(kindIndex.get(p.block.kind)!) }} className=\"size-2.5 shrink-0 rounded-[2px]\" />\n ) : (\n <span aria-hidden style={{ backgroundColor: p.color }} className=\"size-2.5 shrink-0 rounded-[2px]\" />\n )}\n <span className=\"font-medium text-primary\">{formatValue(p.value)}</span>\n <span>{p.label}</span>\n </span>\n )),\n <span key=\"total\" className=\"font-medium text-primary\">\n {words.total(formatValue(totals[i]!))}\n </span>,\n ]}\n />\n );\n };\n\n const ariaFor = (i: number): string => {\n const parts = pieces(i).map((p) => words.bucketPart(p.label, formatValue(p.value)));\n return words.bucket(tf.full(buckets[i]!), parts, formatValue(totals[i]!));\n };\n\n /* ---- the marks ---- */\n /** Each piece of bucket `i` as a vertical span, bottom first: a 2px surface gap sits under every piece but the first. */\n const stacked = (i: number) => {\n const rows = pieces(i);\n let cum = 0;\n return rows.map((piece, k) => {\n const top = y(cum + piece.value);\n const bottom = y(cum) - (k > 0 ? GAP : 0);\n cum += piece.value;\n return { piece, top, height: Math.max(bottom - top, 1), last: k === rows.length - 1 };\n });\n };\n\n const columnMarks = (i: number): ReactNode =>\n stacked(i).map(({ piece: p, top, height, last }) => {\n const x = cx(i) - barW / 2;\n const pick = p.member && select ? select(p.member) : undefined;\n const common = {\n fill: p.block ? hatchFill(kindIndex.get(p.block.kind)!, uid) : p.color,\n \"data-segment\": p.member && !p.member.other ? p.member.key : undefined,\n \"data-other\": p.member?.other || undefined,\n \"data-block\": p.block?.id,\n onClick: pick,\n className: cn(pick && \"cursor-pointer hover:opacity-80\"),\n };\n return last ? (\n <path key={p.id} d={topRounded(x, top, barW, height)} {...common} />\n ) : (\n <rect key={p.id} x={x} y={top} width={barW} height={height} {...common} />\n );\n });\n\n const bands = (() => {\n if (!area) return null;\n const cum = new Array<number>(n).fill(0);\n return shown.map((m) => {\n const lower = [...cum];\n for (let i = 0; i < n; i++) cum[i]! += m.points[i]!;\n if (m.points.every((v) => v === 0)) return null;\n const upper = [...cum];\n const d =\n upper.map((v, i) => `${i === 0 ? \"M\" : \"L\"}${cx(i)},${y(v)}`).join(\"\") +\n [...lower].reverse().map((v, i) => `L${cx(n - 1 - i)},${y(v)}`).join(\"\") +\n \"Z\";\n const pick = select?.(m);\n return (\n <path\n key={m.key}\n d={d}\n fill={m.color}\n data-segment={m.other ? undefined : m.key}\n data-other={m.other || undefined}\n style={{ stroke: \"var(--surface)\", strokeWidth: GAP, strokeLinejoin: \"round\" }}\n onClick={pick}\n className={cn(pick && \"cursor-pointer hover:opacity-80\")}\n />\n );\n });\n })();\n\n /** In the area variant a block rides on top of the stack in its own bucket's span. */\n const areaBlocks = (i: number): ReactNode =>\n stacked(i).map(({ piece: p, top, height }) => {\n if (!p.block) return null;\n const w = Math.max(1, slot - GAP);\n return (\n <path\n key={p.id}\n d={topRounded(cx(i) - w / 2, top, w, height)}\n fill={hatchFill(kindIndex.get(p.block.kind)!, uid)}\n data-block={p.block.id}\n />\n );\n });\n\n const usedKinds = blockKinds.filter((k) => blocks.some((b) => b.kind === k.key));\n const legend = members.length + usedKinds.length >= 2;\n\n const tableColumns = [...members.map((m) => m.label), ...usedKinds.map((k) => k.label), words.columnTotal];\n /** A bucket's total with every series counted, hidden or not: the table is the data, not the current view. */\n const fullTotal = (i: number) =>\n members.reduce((sum, m) => sum + m.points[i]!, 0) + blocksByBucket[i]!.reduce((sum, b) => sum + b.value, 0);\n\n return (\n /* The hidden table is absolutely positioned and as wide as its widest row; clipping at this box\n keeps it out of the page's scroll width. */\n <div ref={ref} role=\"group\" aria-label={label} className={cn(\"relative flex w-full min-w-0 flex-col gap-3 overflow-clip\", className)}>\n <div ref={measureRef} className=\"w-full min-w-0\">\n <svg\n width={W}\n height={height}\n viewBox={`0 0 ${W} ${height}`}\n role=\"group\"\n aria-label={words.plot(label)}\n data-time-series\n data-variant={area ? \"area\" : \"bar\"}\n className=\"block max-w-full overflow-visible\"\n >\n <defs>\n {[0, 1].map((k) => (\n <pattern\n key={k}\n id={`${uid}-hatch-${k}`}\n patternUnits=\"userSpaceOnUse\"\n width={HATCH}\n height={HATCH}\n patternTransform={`rotate(${k === 0 ? 45 : -45})`}\n >\n <rect width={HATCH} height={HATCH} fill=\"var(--surface-inset)\" />\n <line x1=\"0\" y1=\"0\" x2=\"0\" y2={HATCH} stroke=\"var(--text-tertiary)\" strokeWidth=\"1.5\" />\n </pattern>\n ))}\n </defs>\n\n {/* The grid and the y axis: hairline, solid, recessive. The zero line is the baseline marks grow from. */}\n <g aria-hidden>\n <ValueGrid ticks={ticks} labels={axisLabels} left={left} right={W - MARGIN.right} y={y} />\n {xLabels.map((l, i) =>\n i % step === 0 ? (\n <XTickLabel key={buckets[i]} at={buckets[i]!} x={cx(i)} y={base + 14} primary={l.primary} secondary={l.secondary} />\n ) : null,\n )}\n </g>\n\n {bands}\n\n {buckets.map((start, i) => {\n const slotX = left + slot * i;\n return (\n <ChartTip key={start} content={tipFor(i)}>\n <g\n role=\"img\"\n tabIndex={i === roving ? 0 : -1}\n aria-label={ariaFor(i)}\n data-bucket={start}\n data-bucket-index={i}\n data-total={totals[i]}\n onPointerEnter={() => setHover(i)}\n onPointerLeave={() => setHover(null)}\n onFocusCapture={() => {\n setFocus(i);\n setRoving(i);\n }}\n onBlurCapture={() => setFocus(null)}\n onKeyDown={(e) => move(e, i)}\n className=\"outline-none [&:focus-visible>[data-focus-ring]]:stroke-border-interactive\"\n >\n {/* The hit target is the whole slot, full plot height — wider and taller than any mark. */}\n <rect x={slotX} y={MARGIN.top} width={slot} height={plotH} fill=\"transparent\" />\n {active === i && (\n <rect data-active x={slotX} y={MARGIN.top} width={slot} height={plotH} className=\"fill-surface-hover\" />\n )}\n {area ? areaBlocks(i) : columnMarks(i)}\n {area && active === i && (\n <line x1={cx(i)} x2={cx(i)} y1={MARGIN.top} y2={base} strokeWidth={1} className=\"stroke-border-strong\" />\n )}\n <rect\n data-focus-ring\n x={slotX + 1}\n y={MARGIN.top}\n width={Math.max(slot - 2, 1)}\n height={plotH}\n fill=\"none\"\n strokeWidth={2}\n rx={RADIUS}\n stroke=\"transparent\"\n />\n </g>\n </ChartTip>\n );\n })}\n\n {zero && (\n <text\n data-zero\n x={left + plotW / 2}\n y={MARGIN.top + plotH / 2}\n textAnchor=\"middle\"\n dy=\"0.32em\"\n className=\"fill-tertiary text-sm\"\n >\n {shown.length === 0 && members.length > 0 ? words.allHidden : zeroLabel}\n </text>\n )}\n </svg>\n </div>\n\n {legend && (\n <LegendList label={words.legend}>\n {members.map((m) => {\n const off = hidden.has(m.key);\n const swatch = <LegendSwatch color={m.color} off={off} />;\n const toggleMember = () => toggle(m.key);\n return (\n <LegendItem key={m.key} id={m.key} other={m.other}>\n {select?.(m) ? (\n <>\n <LegendToggle name={words.showSeries(m.label)} off={off} onToggle={toggleMember} className=\"justify-center\">\n {swatch}\n </LegendToggle>\n <button type=\"button\" onClick={select(m)} data-legend-select className={cn(LEGEND_FRAME, off && \"line-through\")}>\n <span className=\"truncate\">{m.label}</span>\n </button>\n </>\n ) : (\n <LegendToggle name={words.showSeries(m.label)} off={off} onToggle={toggleMember} className={cn(off && \"line-through\")}>\n {swatch}\n <span className=\"truncate\">{m.label}</span>\n </LegendToggle>\n )}\n </LegendItem>\n );\n })}\n {usedKinds.map((k) => (\n <li key={k.key} data-legend-block={k.key} className=\"flex min-h-6 min-w-0 items-center gap-1.5 px-1 text-xs text-secondary\">\n <span\n aria-hidden\n data-swatch\n style={{ background: hatchSwatch(kindIndex.get(k.key)!) }}\n className=\"size-2.5 shrink-0 rounded-[2px]\"\n />\n <span className=\"truncate\">{k.label}</span>\n </li>\n ))}\n </LegendList>\n )}\n\n {/* Firefox paints a table caption outside the table's own sr-only clip; the wrapper clips it. */}\n <div className=\"sr-only\">\n <ChartTable\n caption={label}\n columns={tableColumns}\n rows={buckets.map((b, i) => ({\n key: String(b),\n header: tf.full(b),\n cells: [\n ...members.map((m) => formatValue(m.points[i]!)),\n ...usedKinds.map((k) => formatValue(blocksByBucket[i]!.filter((x) => x.kind === k.key).reduce((s, x) => s + x.value, 0))),\n formatValue(fullTotal(i)),\n ],\n }))}\n />\n </div>\n </div>\n );\n}\n"],"names":["BAR_MAX","GAP","RADIUS","MARGIN","HATCH","validate","props","buckets","bucketMs","series","blocks","blockKinds","b","i","keys","s","p","kinds","k","ids","bucketIndexAt","toMembers","bucketCount","otherLabel","members","rest","CHART_SERIES_COUNT","chartSeriesColor","explicit","OTHER_KEY","_","sum","topRounded","x","y","w","h","r","hatchFill","kind","id","hatchSwatch","TimeSeriesChart","label","variant","formatCaller","timeZone","onSelectSeries","height","emptyCaller","zeroCaller","className","ref","locale","useUiLocale","strings","useUiStrings","words","emptyLabel","zeroLabel","formatValue","value","defaultFormatValue","formatAxis","uid","useId","measureRef","useRef","hidden","toggle","useHiddenSeries","hover","setHover","useState","focus","setFocus","roving","setRoving","measured","useElementWidth","n","kindIndex","blocksByBucket","ChartEmpty","shown","m","pieces","totals","dataMax","zero","nice","niceTicks","ticks","yMax","tf","timeFormatters","axisLabels","left","W","plotW","plotH","plotLayout","slot","barW","cx","v","base","area","xLabels","labelChars","l","step","LABEL_CHAR_PX","LABEL_PAD_PX","active","move","e","to","target","select","tipFor","rows","jsx","TipBody","jsxs","ariaFor","parts","stacked","cum","piece","top","bottom","columnMarks","last","pick","common","cn","bands","lower","d","areaBlocks","usedKinds","legend","tableColumns","fullTotal","ValueGrid","XTickLabel","start","slotX","ChartTip","LegendList","off","swatch","LegendSwatch","toggleMember","LegendItem","Fragment","LegendToggle","LEGEND_FRAME","ChartTable"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const L = 600, n = 160, o = 8.5, c = 10;
|
|
2
|
+
function s(t) {
|
|
3
|
+
let _ = 0;
|
|
4
|
+
for (const A of t) _ = Math.max(_, A.length);
|
|
5
|
+
return Math.ceil(_ * 8.5) + 10;
|
|
6
|
+
}
|
|
7
|
+
const P = 6, B = 14;
|
|
8
|
+
export {
|
|
9
|
+
L as FALLBACK_WIDTH,
|
|
10
|
+
P as LABEL_CHAR_PX,
|
|
11
|
+
B as LABEL_PAD_PX,
|
|
12
|
+
n as MIN_WIDTH,
|
|
13
|
+
o as Y_LABEL_CHAR_PX,
|
|
14
|
+
c as Y_LABEL_GAP_PX,
|
|
15
|
+
s as yAxisMargin
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=label-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label-metrics.js","sources":["../../../src/components/chart/label-metrics.ts"],"sourcesContent":["/* ----------------------------------------------------------------------------\n HOW WIDE A TIME CHART DRAWS AND HOW WIDE ITS LABELS ARE (DX-4933): numbers\n the two time charts and the line chart's pure axis code agree on. No React in\n here, so pure modules can import them.\n -------------------------------------------------------------------------- */\n\n/** Before the first measurement (and where there is no layout at all) a chart draws at this width. */\nexport const FALLBACK_WIDTH = 600;\nexport const MIN_WIDTH = 160;\n/* DXUI-53: a y-axis label is measured wider per character than an x label: tabular digits are ~6.2px but \"%\" and similar glyphs are wider\n (live \"100%\" measured 34px), so the left margin uses the widest case. Gap = the space between the label's right edge and the plot. */\nexport const Y_LABEL_CHAR_PX = 8.5;\nexport const Y_LABEL_GAP_PX = 10;\n\n/** Room the plot leaves on its left so the widest y-axis label sits fully inside the svg. */\nexport function yAxisMargin(axisLabels: readonly string[]): number {\n let widest = 0;\n for (const l of axisLabels) widest = Math.max(widest, l.length);\n return Math.ceil(widest * Y_LABEL_CHAR_PX) + Y_LABEL_GAP_PX;\n}\n\n/* Text is measured by character count, not by the DOM: an axis label is about this wide per character at the chart's 2xs size, plus air. */\nexport const LABEL_CHAR_PX = 6;\nexport const LABEL_PAD_PX = 14;\n"],"names":["FALLBACK_WIDTH","MIN_WIDTH","Y_LABEL_CHAR_PX","Y_LABEL_GAP_PX","yAxisMargin","axisLabels","widest","l","LABEL_CHAR_PX","LABEL_PAD_PX"],"mappings":"AAOO,MAAMA,IAAiB,KACjBC,IAAY,KAGZC,IAAkB,KAClBC,IAAiB;AAGvB,SAASC,EAAYC,GAAuC;AACjE,MAAIC,IAAS;AACb,aAAWC,KAAKF,EAAY,CAAAC,IAAS,KAAK,IAAIA,GAAQC,EAAE,MAAM;AAC9D,SAAO,KAAK,KAAKD,IAAS,GAAe,IAAI;AAC/C;AAGO,MAAME,IAAgB,GAChBC,IAAe;"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { dateFormat as h } from "../../lib/intl-cache.js";
|
|
2
|
+
import { LABEL_PAD_PX as p, LABEL_CHAR_PX as _ } from "./label-metrics.js";
|
|
3
|
+
import { TICK_STEPS as y } from "./line-chart-scale.js";
|
|
4
|
+
import { timeFormatters as g, MINUTE_MS as M } from "./time-series-scale.js";
|
|
5
|
+
const A = 24;
|
|
6
|
+
function L(t, n, i, u) {
|
|
7
|
+
if (u) return (r) => ({ primary: u(r), secondary: null });
|
|
8
|
+
const c = h(i, { month: "short", day: "numeric", timeZone: n }), m = h(i, { hour: "numeric", minute: "2-digit", second: "2-digit", timeZone: n }), f = g(t, i, n);
|
|
9
|
+
let a = null;
|
|
10
|
+
return (r) => {
|
|
11
|
+
const o = a;
|
|
12
|
+
return a = r, t >= M ? f.tick(r, o) : { primary: m.format(r), secondary: o === null || c.format(o) !== c.format(r) ? c.format(r) : null };
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function S(t, n, i, u, c, m) {
|
|
16
|
+
const f = (e, s) => {
|
|
17
|
+
const d = L(s, u, c, m);
|
|
18
|
+
return e.map((l) => ({ t: l, ...d(l) }));
|
|
19
|
+
}, a = (e) => {
|
|
20
|
+
let s = 0;
|
|
21
|
+
for (const d of e) s = Math.max(s, Math.min(A, Math.max(d.primary.length, (d.secondary ?? "").length)));
|
|
22
|
+
return e.length * (s * _ + p) <= i;
|
|
23
|
+
};
|
|
24
|
+
if (n === t) return f([t], M);
|
|
25
|
+
const r = Math.floor(i / (p + _));
|
|
26
|
+
let o = null;
|
|
27
|
+
for (const e of y) {
|
|
28
|
+
if ((n - t) / e.stepMs > r) continue;
|
|
29
|
+
const s = e.ticks(t, n, u, c);
|
|
30
|
+
if (!(s.length < 2) && (o = f(s, e.stepMs), a(o)))
|
|
31
|
+
return o;
|
|
32
|
+
}
|
|
33
|
+
return o ?? f([t, n], 1e3);
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
S as axisTicks
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=line-chart-axis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-chart-axis.js","sources":["../../../src/components/chart/line-chart-axis.ts"],"sourcesContent":["/* ----------------------------------------------------------------------------\n THE TIME AXIS OF A LINE CHART (DX-4933): which instants get a tick, and what\n each tick says. Pure (no React): it imports only the other pure modules.\n -------------------------------------------------------------------------- */\n\nimport { dateFormat } from \"@/lib/intl-cache\";\nimport { LABEL_CHAR_PX, LABEL_PAD_PX } from \"./label-metrics\";\nimport { TICK_STEPS } from \"./line-chart-scale\";\nimport { MINUTE_MS, timeFormatters } from \"./time-series-scale\";\n\nexport interface AxisTick {\n t: number;\n primary: string;\n secondary: string | null;\n}\n\nconst MAX_TICK_LABEL_CHARS = 24;\n\n/** How a tick of spacing `stepMs` reads: the caller's one line, or a time of day with the date where the day changes. */\nfunction reader(stepMs: number, timeZone: string | undefined, locale: string, formatAxisTime: ((t: number) => string) | undefined) {\n if (formatAxisTime) return (t: number): Omit<AxisTick, \"t\"> => ({ primary: formatAxisTime(t), secondary: null });\n const date = dateFormat(locale, { month: \"short\", day: \"numeric\", timeZone });\n const seconds = dateFormat(locale, { hour: \"numeric\", minute: \"2-digit\", second: \"2-digit\", timeZone });\n const tf = timeFormatters(stepMs, locale, timeZone);\n let previous: number | null = null;\n return (t: number) => {\n const prev = previous;\n previous = t;\n if (stepMs >= MINUTE_MS) return tf.tick(t, prev);\n // Under a minute the time of day needs its seconds, which `timeFormatters` does not print.\n return { primary: seconds.format(t), secondary: prev === null || date.format(prev) !== date.format(t) ? date.format(t) : null };\n };\n}\n\n/**\n * The smallest round spacing whose labels fit side by side on a plot `plotW`\n * wide, ticks on the zone's wall clock (midnights, hours, month starts). A span\n * of no length is one tick. When no spacing fits, the widest one that gave two\n * ticks is used and its labels crowd. When no spacing gave two ticks (a span\n * shorter than the tightest spacing, or so long that even the widest would have\n * more ticks than could be labelled) the axis is its two ends.\n */\nexport function axisTicks(\n min: number,\n max: number,\n plotW: number,\n timeZone: string | undefined,\n locale: string,\n formatAxisTime: ((t: number) => string) | undefined,\n): AxisTick[] {\n const build = (ticks: readonly number[], stepMs: number): AxisTick[] => {\n const read = reader(stepMs, timeZone, locale, formatAxisTime);\n return ticks.map((t) => ({ t, ...read(t) }));\n };\n const fits = (ticks: readonly AxisTick[]) => {\n let chars = 0;\n for (const k of ticks) chars = Math.max(chars, Math.min(MAX_TICK_LABEL_CHARS, Math.max(k.primary.length, (k.secondary ?? \"\").length)));\n return ticks.length * (chars * LABEL_CHAR_PX + LABEL_PAD_PX) <= plotW;\n };\n\n if (max === min) return build([min], MINUTE_MS);\n const widest = Math.floor(plotW / (LABEL_PAD_PX + LABEL_CHAR_PX));\n let last: AxisTick[] | null = null;\n for (const step of TICK_STEPS) {\n // Skip a spacing before generating its ticks when even the narrowest label could not fit them all.\n if ((max - min) / step.stepMs > widest) continue;\n const ticks = step.ticks(min, max, timeZone, locale);\n if (ticks.length < 2) continue;\n last = build(ticks, step.stepMs);\n if (fits(last)) return last;\n }\n return last ?? build([min, max], 1_000);\n}\n"],"names":["MAX_TICK_LABEL_CHARS","reader","stepMs","timeZone","locale","formatAxisTime","t","date","dateFormat","seconds","tf","timeFormatters","previous","prev","MINUTE_MS","axisTicks","min","max","plotW","build","ticks","read","fits","chars","k","LABEL_CHAR_PX","LABEL_PAD_PX","widest","last","step","TICK_STEPS"],"mappings":";;;;AAgBA,MAAMA,IAAuB;AAG7B,SAASC,EAAOC,GAAgBC,GAA8BC,GAAgBC,GAAqD;AACjI,MAAIA,EAAgB,QAAO,CAACC,OAAoC,EAAE,SAASD,EAAeC,CAAC,GAAG,WAAW;AACzG,QAAMC,IAAOC,EAAWJ,GAAQ,EAAE,OAAO,SAAS,KAAK,WAAW,UAAAD,GAAU,GACtEM,IAAUD,EAAWJ,GAAQ,EAAE,MAAM,WAAW,QAAQ,WAAW,QAAQ,WAAW,UAAAD,EAAA,CAAU,GAChGO,IAAKC,EAAeT,GAAQE,GAAQD,CAAQ;AAClD,MAAIS,IAA0B;AAC9B,SAAO,CAACN,MAAc;AACpB,UAAMO,IAAOD;AAEb,WADAA,IAAWN,GACPJ,KAAUY,IAAkBJ,EAAG,KAAKJ,GAAGO,CAAI,IAExC,EAAE,SAASJ,EAAQ,OAAOH,CAAC,GAAG,WAAWO,MAAS,QAAQN,EAAK,OAAOM,CAAI,MAAMN,EAAK,OAAOD,CAAC,IAAIC,EAAK,OAAOD,CAAC,IAAI,KAAA;AAAA,EAC3H;AACF;AAUO,SAASS,EACdC,GACAC,GACAC,GACAf,GACAC,GACAC,GACY;AACZ,QAAMc,IAAQ,CAACC,GAA0BlB,MAA+B;AACtE,UAAMmB,IAAOpB,EAAOC,GAAQC,GAAUC,GAAQC,CAAc;AAC5D,WAAOe,EAAM,IAAI,CAACd,OAAO,EAAE,GAAAA,GAAG,GAAGe,EAAKf,CAAC,EAAA,EAAI;AAAA,EAC7C,GACMgB,IAAO,CAACF,MAA+B;AAC3C,QAAIG,IAAQ;AACZ,eAAWC,KAAKJ,EAAO,CAAAG,IAAQ,KAAK,IAAIA,GAAO,KAAK,IAAIvB,GAAsB,KAAK,IAAIwB,EAAE,QAAQ,SAASA,EAAE,aAAa,IAAI,MAAM,CAAC,CAAC;AACrI,WAAOJ,EAAM,UAAUG,IAAQE,IAAgBC,MAAiBR;AAAA,EAClE;AAEA,MAAID,MAAQD,EAAK,QAAOG,EAAM,CAACH,CAAG,GAAGF,CAAS;AAC9C,QAAMa,IAAS,KAAK,MAAMT,KAASQ,IAAeD,EAAc;AAChE,MAAIG,IAA0B;AAC9B,aAAWC,KAAQC,GAAY;AAE7B,SAAKb,IAAMD,KAAOa,EAAK,SAASF,EAAQ;AACxC,UAAMP,IAAQS,EAAK,MAAMb,GAAKC,GAAKd,GAAUC,CAAM;AACnD,QAAI,EAAAgB,EAAM,SAAS,OACnBQ,IAAOT,EAAMC,GAAOS,EAAK,MAAM,GAC3BP,EAAKM,CAAI;AAAG,aAAOA;AAAA,EACzB;AACA,SAAOA,KAAQT,EAAM,CAACH,GAAKC,CAAG,GAAG,GAAK;AACxC;"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { dateFormat as y } from "../../lib/intl-cache.js";
|
|
2
|
+
import { MINUTE_MS as s, DAY_MS as d } from "./time-series-scale.js";
|
|
3
|
+
const f = 1e3, M = 36e5;
|
|
4
|
+
function m(t, r, e) {
|
|
5
|
+
if (r === void 0) return -new Date(t).getTimezoneOffset() * s;
|
|
6
|
+
const n = y(e, {
|
|
7
|
+
timeZone: r,
|
|
8
|
+
numberingSystem: "latn",
|
|
9
|
+
calendar: "gregory",
|
|
10
|
+
hourCycle: "h23",
|
|
11
|
+
year: "numeric",
|
|
12
|
+
month: "numeric",
|
|
13
|
+
day: "numeric",
|
|
14
|
+
hour: "numeric",
|
|
15
|
+
minute: "numeric",
|
|
16
|
+
second: "numeric"
|
|
17
|
+
}).formatToParts(t), u = (c) => Number(n.find((a) => a.type === c).value);
|
|
18
|
+
return Date.UTC(u("year"), u("month") - 1, u("day"), u("hour"), u("minute"), u("second")) - Math.floor(t / f) * f;
|
|
19
|
+
}
|
|
20
|
+
const S = d;
|
|
21
|
+
function v(t, r, e) {
|
|
22
|
+
const n = t - m(t, r, e), u = t - m(n - S, r, e), o = t - m(n + S, r, e), c = (l) => l + m(l, r, e) === t, a = [u, o].filter(c);
|
|
23
|
+
return a.length > 0 ? Math.min(...a) : u;
|
|
24
|
+
}
|
|
25
|
+
function I(t, r, e, n, u) {
|
|
26
|
+
const o = [];
|
|
27
|
+
let c = -1 / 0;
|
|
28
|
+
for (let a = Math.ceil((t + m(t, n, u)) / e) * e; ; a += e) {
|
|
29
|
+
const l = v(a, n, u);
|
|
30
|
+
if (l > r) break;
|
|
31
|
+
l >= t && l > c && (o.push(l), c = l);
|
|
32
|
+
}
|
|
33
|
+
return o;
|
|
34
|
+
}
|
|
35
|
+
function k(t, r, e, n, u) {
|
|
36
|
+
const o = new Date(t + m(t, n, u));
|
|
37
|
+
let c = o.getUTCFullYear() * 12 + o.getUTCMonth();
|
|
38
|
+
Date.UTC(o.getUTCFullYear(), o.getUTCMonth(), 1) < o.getTime() && (c += 1);
|
|
39
|
+
const a = [];
|
|
40
|
+
for (let l = Math.ceil(c / e) * e; ; l += e) {
|
|
41
|
+
const i = v(Date.UTC(Math.floor(l / 12), l % 12, 1), n, u);
|
|
42
|
+
if (i > r) break;
|
|
43
|
+
i >= t && a.push(i);
|
|
44
|
+
}
|
|
45
|
+
return a;
|
|
46
|
+
}
|
|
47
|
+
const C = [
|
|
48
|
+
f,
|
|
49
|
+
2 * f,
|
|
50
|
+
5 * f,
|
|
51
|
+
10 * f,
|
|
52
|
+
15 * f,
|
|
53
|
+
30 * f,
|
|
54
|
+
s,
|
|
55
|
+
2 * s,
|
|
56
|
+
5 * s,
|
|
57
|
+
10 * s,
|
|
58
|
+
15 * s,
|
|
59
|
+
30 * s,
|
|
60
|
+
M,
|
|
61
|
+
2 * M,
|
|
62
|
+
3 * M,
|
|
63
|
+
6 * M,
|
|
64
|
+
12 * M
|
|
65
|
+
], N = [1, 2, 7, 14], U = [1, 3, 6, 12, 24, 60, 120], O = [
|
|
66
|
+
...[...C, ...N.map((t) => t * d)].map((t) => ({ stepMs: t, ticks: (r, e, n, u) => I(r, e, t, n, u) })),
|
|
67
|
+
...U.map((t) => ({ stepMs: t * 30 * d, ticks: (r, e, n, u) => k(r, e, t, n, u) }))
|
|
68
|
+
], b = (t) => typeof t == "number" ? t : t.t;
|
|
69
|
+
function D(t, r) {
|
|
70
|
+
const e = (o) => b(t[o]);
|
|
71
|
+
let n = 0, u = t.length - 1;
|
|
72
|
+
for (; n < u; ) {
|
|
73
|
+
const o = n + u >> 1;
|
|
74
|
+
e(o) < r ? n = o + 1 : u = o;
|
|
75
|
+
}
|
|
76
|
+
return n > 0 && r - e(n - 1) <= e(n) - r ? n - 1 : n;
|
|
77
|
+
}
|
|
78
|
+
function x(t, r) {
|
|
79
|
+
if (t.length === 0 || r < t[0].t || r > t[t.length - 1].t) return null;
|
|
80
|
+
const e = D(t, r), n = t[e];
|
|
81
|
+
if (n.t === r) return n.value;
|
|
82
|
+
const [u, o] = n.t < r ? [n, t[e + 1]] : [t[e - 1], n];
|
|
83
|
+
return u.value + (o.value - u.value) * (r - u.t) / (o.t - u.t);
|
|
84
|
+
}
|
|
85
|
+
function E(t) {
|
|
86
|
+
const r = /* @__PURE__ */ new Set();
|
|
87
|
+
for (const e of t) for (const n of e) r.add(n.t);
|
|
88
|
+
return [...r].sort((e, n) => e - n);
|
|
89
|
+
}
|
|
90
|
+
function F(t) {
|
|
91
|
+
let r = 1 / 0, e = -1 / 0;
|
|
92
|
+
for (const n of t)
|
|
93
|
+
n.length !== 0 && (r = Math.min(r, n[0].t), e = Math.max(e, n[n.length - 1].t));
|
|
94
|
+
return r <= e ? { min: r, max: e } : null;
|
|
95
|
+
}
|
|
96
|
+
function Y(t) {
|
|
97
|
+
if (t.length === 0) return { count: 0, first: null, last: null, lowest: null, highest: null };
|
|
98
|
+
let r = 1 / 0, e = -1 / 0;
|
|
99
|
+
for (const n of t)
|
|
100
|
+
r = Math.min(r, n.value), e = Math.max(e, n.value);
|
|
101
|
+
return { count: t.length, first: t[0].t, last: t[t.length - 1].t, lowest: r, highest: e };
|
|
102
|
+
}
|
|
103
|
+
function A(t, r, e) {
|
|
104
|
+
if (t.length <= e * 2) return t;
|
|
105
|
+
const n = [];
|
|
106
|
+
let u = Number.NaN, o = 0, c = 0, a = 0, l = 0;
|
|
107
|
+
const i = () => {
|
|
108
|
+
if (!Number.isNaN(u))
|
|
109
|
+
for (const g of [.../* @__PURE__ */ new Set([o, c, a, l])].sort((h, T) => h - T)) n.push(t[g]);
|
|
110
|
+
};
|
|
111
|
+
return t.forEach((g, h) => {
|
|
112
|
+
const T = Math.floor(r(g.t));
|
|
113
|
+
if (T !== u) {
|
|
114
|
+
i(), u = T, o = c = a = l = h;
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
g.value < t[c].value && (c = h), g.value > t[a].value && (a = h), l = h;
|
|
118
|
+
}), i(), n;
|
|
119
|
+
}
|
|
120
|
+
export {
|
|
121
|
+
O as TICK_STEPS,
|
|
122
|
+
A as decimate,
|
|
123
|
+
E as mergeInstants,
|
|
124
|
+
k as monthTicks,
|
|
125
|
+
D as nearestIndex,
|
|
126
|
+
Y as summarize,
|
|
127
|
+
F as timeBounds,
|
|
128
|
+
I as timeTicks,
|
|
129
|
+
x as valueAt,
|
|
130
|
+
m as zoneOffsetMs
|
|
131
|
+
};
|
|
132
|
+
//# sourceMappingURL=line-chart-scale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-chart-scale.js","sources":["../../../src/components/chart/line-chart-scale.ts"],"sourcesContent":["/* ----------------------------------------------------------------------------\n THE ARITHMETIC OF A LINE CHART (DX-4933) — pure functions, no React, so the\n time axis, the nearest-point lookup and the thinning of a long series are\n tested as numbers and not as pixels.\n\n A time-series chart has buckets; a line chart has instants. These are the\n pieces that only exist for instants. The value axis (`niceTicks`) and the\n way a tick label reads (`timeFormatters`) are the time-series chart's, in\n `time-series-scale.ts`.\n\n Every loop over points here is a plain loop or a binary search, never a\n spread into `Math.max(...)`: a series may be a hundred thousand points long\n and a spread that long exceeds the engine's argument limit.\n -------------------------------------------------------------------------- */\n\nimport { dateFormat } from \"@/lib/intl-cache\";\nimport { DAY_MS, MINUTE_MS } from \"./time-series-scale\";\n\nexport interface LinePoint {\n /** Epoch ms. */\n t: number;\n /** Finite and >= 0. */\n value: number;\n}\n\nconst SECOND_MS = 1_000;\nconst HOUR_MS = 3_600_000;\n\n/**\n * How far the wall clock in `timeZone` is ahead of UTC at instant `t`, in ms\n * (negative west of Greenwich). `undefined` is the viewer's own zone. The parts\n * are read as Latin digits in the Gregorian calendar whatever `locale` is, so a\n * Thai or Arabic locale cannot turn the year or the hour into something\n * `Number` cannot read.\n */\nexport function zoneOffsetMs(t: number, timeZone: string | undefined, locale: string): number {\n if (timeZone === undefined) return -new Date(t).getTimezoneOffset() * MINUTE_MS;\n const parts = dateFormat(locale, {\n timeZone,\n numberingSystem: \"latn\",\n calendar: \"gregory\",\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n }).formatToParts(t);\n const get = (type: string) => Number(parts.find((p) => p.type === type)!.value);\n const wall = Date.UTC(get(\"year\"), get(\"month\") - 1, get(\"day\"), get(\"hour\"), get(\"minute\"), get(\"second\"));\n return wall - Math.floor(t / SECOND_MS) * SECOND_MS;\n}\n\n/** How far either side of a wall time its clock is read for the offsets in force around it: longer than any change's reach, shorter than two changes. */\nconst OFFSET_PROBE_MS = DAY_MS;\n\n/**\n * The instant at which the zone's wall clock reads `wall` (a wall time written as\n * if it were UTC). A clock change near `wall` leaves two candidate instants, one\n * per offset in force around it (`wall - offset`), and each is kept only if the\n * clock really reads `wall` there. A wall time that happens twice (the clock went\n * back) resolves to its first occurrence. One the clock skipped (it went forward\n * over it, as Havana and Santiago do at midnight) reads nothing at either, and\n * resolves to the instant the clock would have reached it on the old offset: the\n * moment the skipped span begins, which for a tick on the hour or at midnight is\n * the first instant of that day that exists.\n */\nfunction wallToInstant(wall: number, timeZone: string | undefined, locale: string): number {\n const near = wall - zoneOffsetMs(wall, timeZone, locale);\n const before = wall - zoneOffsetMs(near - OFFSET_PROBE_MS, timeZone, locale);\n const after = wall - zoneOffsetMs(near + OFFSET_PROBE_MS, timeZone, locale);\n const reads = (t: number) => t + zoneOffsetMs(t, timeZone, locale) === wall;\n const valid = [before, after].filter(reads);\n return valid.length > 0 ? Math.min(...valid) : before;\n}\n\n/** Every multiple of `step` on the zone's wall clock whose instant is inside `[min, max]`, ascending. */\nexport function timeTicks(min: number, max: number, step: number, timeZone: string | undefined, locale: string): number[] {\n const ticks: number[] = [];\n let last = -Infinity;\n for (let wall = Math.ceil((min + zoneOffsetMs(min, timeZone, locale)) / step) * step; ; wall += step) {\n const t = wallToInstant(wall, timeZone, locale);\n if (t > max) break;\n if (t >= min && t > last) {\n ticks.push(t);\n last = t;\n }\n }\n return ticks;\n}\n\n/** The first instant of every `months`-th month (counted from January of year 0) inside `[min, max]`, on the zone's calendar. */\nexport function monthTicks(min: number, max: number, months: number, timeZone: string | undefined, locale: string): number[] {\n const start = new Date(min + zoneOffsetMs(min, timeZone, locale));\n let monthIndex = start.getUTCFullYear() * 12 + start.getUTCMonth();\n if (Date.UTC(start.getUTCFullYear(), start.getUTCMonth(), 1) < start.getTime()) monthIndex += 1;\n const ticks: number[] = [];\n for (let k = Math.ceil(monthIndex / months) * months; ; k += months) {\n const t = wallToInstant(Date.UTC(Math.floor(k / 12), k % 12, 1), timeZone, locale);\n if (t > max) break;\n if (t >= min) ticks.push(t);\n }\n return ticks;\n}\n\nexport interface TickStep {\n /** About how far apart the ticks are, ms: decides how many there could be and how a label reads. */\n stepMs: number;\n ticks: (min: number, max: number, timeZone: string | undefined, locale: string) => number[];\n}\n\nconst SUB_DAY_MS = [\n SECOND_MS,\n 2 * SECOND_MS,\n 5 * SECOND_MS,\n 10 * SECOND_MS,\n 15 * SECOND_MS,\n 30 * SECOND_MS,\n MINUTE_MS,\n 2 * MINUTE_MS,\n 5 * MINUTE_MS,\n 10 * MINUTE_MS,\n 15 * MINUTE_MS,\n 30 * MINUTE_MS,\n HOUR_MS,\n 2 * HOUR_MS,\n 3 * HOUR_MS,\n 6 * HOUR_MS,\n 12 * HOUR_MS,\n];\nconst DAYS = [1, 2, 7, 14];\nconst MONTHS = [1, 3, 6, 12, 24, 60, 120];\n\n/** Every spacing the time axis may use, tightest first: seconds to hours, days, then calendar months to decades. */\nexport const TICK_STEPS: readonly TickStep[] = [\n ...[...SUB_DAY_MS, ...DAYS.map((d) => d * DAY_MS)].map((stepMs): TickStep => ({ stepMs, ticks: (a, b, zone, locale) => timeTicks(a, b, stepMs, zone, locale) })),\n ...MONTHS.map((months): TickStep => ({ stepMs: months * 30 * DAY_MS, ticks: (a, b, zone, locale) => monthTicks(a, b, months, zone, locale) })),\n];\n\nconst instantOf = (item: number | LinePoint): number => (typeof item === \"number\" ? item : item.t);\n\n/** Index of the entry of `items` (ascending instants, or points by `t`) closest to `t`; the earlier one on a tie. `items` must not be empty. */\nexport function nearestIndex(items: readonly number[] | readonly LinePoint[], t: number): number {\n const at = (i: number) => instantOf(items[i]!);\n let lo = 0;\n let hi = items.length - 1;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (at(mid) < t) lo = mid + 1;\n else hi = mid;\n }\n if (lo > 0 && t - at(lo - 1) <= at(lo) - t) return lo - 1;\n return lo;\n}\n\n/** The series' value at instant `t`: a point's own value at its instant, a straight line between neighbours elsewhere, null outside the series' span. */\nexport function valueAt(points: readonly LinePoint[], t: number): number | null {\n if (points.length === 0 || t < points[0]!.t || t > points[points.length - 1]!.t) return null;\n const i = nearestIndex(points, t);\n const p = points[i]!;\n if (p.t === t) return p.value;\n const [a, b] = p.t < t ? [p, points[i + 1]!] : [points[i - 1]!, p];\n return a.value + ((b.value - a.value) * (t - a.t)) / (b.t - a.t);\n}\n\n/** Every distinct instant any series has a point at, ascending: the places a keyboard cursor can stand. */\nexport function mergeInstants(series: readonly (readonly LinePoint[])[]): number[] {\n const all = new Set<number>();\n for (const points of series) for (const p of points) all.add(p.t);\n return [...all].sort((a, b) => a - b);\n}\n\n/** The earliest and latest instant over every series' ascending points, or null when none has a point. */\nexport function timeBounds(series: readonly (readonly LinePoint[])[]): { min: number; max: number } | null {\n let min = Infinity;\n let max = -Infinity;\n for (const points of series) {\n if (points.length === 0) continue;\n min = Math.min(min, points[0]!.t);\n max = Math.max(max, points[points.length - 1]!.t);\n }\n return min <= max ? { min, max } : null;\n}\n\nexport interface PointSummary {\n count: number;\n /** Null when the series has no point. */\n first: number | null;\n last: number | null;\n lowest: number | null;\n highest: number | null;\n}\n\n/** A series reduced to what the text alternative says about it: how many points, the span in time, the range of values. */\nexport function summarize(points: readonly LinePoint[]): PointSummary {\n if (points.length === 0) return { count: 0, first: null, last: null, lowest: null, highest: null };\n let lowest = Infinity;\n let highest = -Infinity;\n for (const p of points) {\n lowest = Math.min(lowest, p.value);\n highest = Math.max(highest, p.value);\n }\n return { count: points.length, first: points[0]!.t, last: points[points.length - 1]!.t, lowest, highest };\n}\n\n/**\n * Thin a long series to what the screen can show: when there are more points\n * than twice the pixel columns, keep each column's first, lowest, highest and\n * last point, in time order. A spike or a drop that spans less than a pixel\n * survives, and the path stays a few hundred segments however many points came\n * in. A series that already fits is returned as it is. `x` maps an instant to\n * its pixel.\n */\nexport function decimate(points: readonly LinePoint[], x: (t: number) => number, columns: number): readonly LinePoint[] {\n if (points.length <= columns * 2) return points;\n const kept: LinePoint[] = [];\n let column = Number.NaN;\n let first = 0;\n let low = 0;\n let high = 0;\n let last = 0;\n const flush = () => {\n if (Number.isNaN(column)) return;\n for (const i of [...new Set([first, low, high, last])].sort((a, b) => a - b)) kept.push(points[i]!);\n };\n points.forEach((p, i) => {\n const c = Math.floor(x(p.t));\n if (c !== column) {\n flush();\n column = c;\n first = low = high = last = i;\n return;\n }\n if (p.value < points[low]!.value) low = i;\n if (p.value > points[high]!.value) high = i;\n last = i;\n });\n flush();\n return kept;\n}\n"],"names":["SECOND_MS","HOUR_MS","zoneOffsetMs","timeZone","locale","MINUTE_MS","parts","dateFormat","get","type","p","OFFSET_PROBE_MS","DAY_MS","wallToInstant","wall","near","before","after","reads","t","valid","timeTicks","min","max","step","ticks","last","monthTicks","months","start","monthIndex","k","SUB_DAY_MS","DAYS","MONTHS","TICK_STEPS","d","stepMs","a","b","zone","instantOf","item","nearestIndex","items","at","i","lo","hi","mid","valueAt","points","mergeInstants","series","all","timeBounds","summarize","lowest","highest","decimate","x","columns","kept","column","first","low","high","flush","c"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
function a(r, e) {
|
|
2
|
+
if (r === void 0) return { color: e, swatch: e };
|
|
3
|
+
if (r === "danger") return { color: "var(--danger)", swatch: "var(--danger)" };
|
|
4
|
+
if (r === "striped")
|
|
5
|
+
return {
|
|
6
|
+
color: "var(--text-primary)",
|
|
7
|
+
underlay: "var(--surface)",
|
|
8
|
+
dash: "4 4",
|
|
9
|
+
swatch: "repeating-linear-gradient(90deg, var(--text-primary) 0 4px, var(--surface) 4px 8px)"
|
|
10
|
+
};
|
|
11
|
+
if (r === "dashed")
|
|
12
|
+
return {
|
|
13
|
+
color: "var(--accent)",
|
|
14
|
+
dash: "8 5",
|
|
15
|
+
swatch: "repeating-linear-gradient(90deg, var(--accent) 0 8px, transparent 8px 13px)"
|
|
16
|
+
};
|
|
17
|
+
throw new Error(`LineChart: unknown series style "${String(r)}"; use "striped", "danger" or "dashed".`);
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
a as lineSeriesPaint
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=line-series-style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-series-style.js","sources":["../../../src/components/chart/line-series-style.ts"],"sourcesContent":["/* DXUI-43 - how a LineChart series is painted. React-free so which paint a style resolves to is testable as logic. */\n\n/** `striped`: a black-and-white striped line. `danger`: the danger (red) token. `dashed`: a long-dash line in the accent token, no underlay, so it reads apart from `striped`. */\nexport type LineSeriesStyle = \"striped\" | \"danger\" | \"dashed\";\n\nexport interface LineSeriesPaint {\n /** The line's colour, also the dots', the cursor dot's and the markers'. */\n color: string;\n /** A solid line drawn under the line (the other stripe colour); only a striped line has one. */\n underlay?: string;\n /** The line's `stroke-dasharray`; only a striped line has one. */\n dash?: string;\n /** A CSS `background` for the legend chip and the tooltip swatch, matching the line. */\n swatch: string;\n}\n\nconst STRIPE = 4;\n/** DXUI-50: the dashed style's dash and gap, longer than a stripe so the two read apart at a glance. */\nconst DASH = 8;\nconst DASH_GAP = 5;\n\n/** `fallback` is the palette colour for the series' position, kept when the series names no style. Theme tokens only: ink over surface flips with the theme. */\nexport function lineSeriesPaint(style: LineSeriesStyle | undefined, fallback: string): LineSeriesPaint {\n if (style === undefined) return { color: fallback, swatch: fallback };\n if (style === \"danger\") return { color: \"var(--danger)\", swatch: \"var(--danger)\" };\n if (style === \"striped\") {\n return {\n color: \"var(--text-primary)\",\n underlay: \"var(--surface)\",\n dash: `${STRIPE} ${STRIPE}`,\n swatch: `repeating-linear-gradient(90deg, var(--text-primary) 0 ${STRIPE}px, var(--surface) ${STRIPE}px ${STRIPE * 2}px)`,\n };\n }\n if (style === \"dashed\") {\n return {\n color: \"var(--accent)\",\n dash: `${DASH} ${DASH_GAP}`,\n swatch: `repeating-linear-gradient(90deg, var(--accent) 0 ${DASH}px, transparent ${DASH}px ${DASH + DASH_GAP}px)`,\n };\n }\n throw new Error(`LineChart: unknown series style \"${String(style)}\"; use \"striped\", \"danger\" or \"dashed\".`);\n}\n"],"names":["lineSeriesPaint","style","fallback"],"mappings":"AAsBO,SAASA,EAAgBC,GAAoCC,GAAmC;AACrG,MAAID,MAAU,OAAW,QAAO,EAAE,OAAOC,GAAU,QAAQA,EAAA;AAC3D,MAAID,MAAU,SAAU,QAAO,EAAE,OAAO,iBAAiB,QAAQ,gBAAA;AACjE,MAAIA,MAAU;AACZ,WAAO;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,IAA4G;AAGxH,MAAIA,MAAU;AACZ,WAAO;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,IAAoG;AAGhH,QAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAK,CAAC,yCAAyC;AAC5G;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const h = 4;
|
|
2
|
+
function i(s, d) {
|
|
3
|
+
const r = [], c = /* @__PURE__ */ new Set();
|
|
4
|
+
for (const e of [...s].sort((t, n) => n.share - t.share || t.center - n.center)) {
|
|
5
|
+
const t = e.center - e.width / 2 >= -0.5 && e.center + e.width / 2 <= d + 0.5, n = r.every((o) => Math.abs(e.center - o.center) >= (e.width + o.width) / 2 + 4);
|
|
6
|
+
t && n ? r.push(e) : c.add(e.key);
|
|
7
|
+
}
|
|
8
|
+
return c;
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
h as LABEL_GAP,
|
|
12
|
+
i as labelsToDrop
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=share-bar-labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share-bar-labels.js","sources":["../../../src/components/chart/share-bar-labels.ts"],"sourcesContent":["/* ----------------------------------------------------------------------------\n WHICH SHARE LABELS A SHARE BAR CAN PRINT (DXUI-5): the geometry only, no React.\n A label is printed under its segment when its box lies inside the bar and clears\n every larger-share label already printed; otherwise it is not drawn there and its\n share is read in the legend row instead.\n -------------------------------------------------------------------------- */\n\n/** The smallest clear space, in px, left between two direct labels that sit side by side. */\nexport const LABEL_GAP = 4;\n\n/** Sub-pixel layout rounding is not an overflow. */\nconst EPSILON = 0.5;\n\n/** One direct label as laid out. All lengths are px, measured from the bar's LEFT edge (physical, also in RTL). */\nexport interface LabelBox {\n key: string;\n share: number;\n /** Offset of the label's centre (its segment's centre) from the bar's left edge. */\n center: number;\n /** Width of the printed label. */\n width: number;\n}\n\n/**\n * The keys of the labels that must NOT be drawn: one whose box (`center ± width / 2`) leaves `[0, barWidth]`\n * (a clipping ancestor would cut it to a wrong number), or that comes within `LABEL_GAP` of a larger-share\n * label already kept. The larger share wins a contested spot, so the answer does not depend on input order.\n */\nexport function labelsToDrop(boxes: readonly LabelBox[], barWidth: number): Set<string> {\n const kept: LabelBox[] = [];\n const dropped = new Set<string>();\n for (const b of [...boxes].sort((x, y) => y.share - x.share || x.center - y.center)) {\n const inside = b.center - b.width / 2 >= -EPSILON && b.center + b.width / 2 <= barWidth + EPSILON;\n const clear = kept.every((k) => Math.abs(b.center - k.center) >= (b.width + k.width) / 2 + LABEL_GAP);\n if (inside && clear) kept.push(b);\n else dropped.add(b.key);\n }\n return dropped;\n}\n"],"names":["LABEL_GAP","labelsToDrop","boxes","barWidth","kept","dropped","b","x","y","inside","clear","k"],"mappings":"AAQO,MAAMA,IAAY;AAoBlB,SAASC,EAAaC,GAA4BC,GAA+B;AACtF,QAAMC,IAAmB,CAAA,GACnBC,wBAAc,IAAA;AACpB,aAAWC,KAAK,CAAC,GAAGJ,CAAK,EAAE,KAAK,CAACK,GAAGC,MAAMA,EAAE,QAAQD,EAAE,SAASA,EAAE,SAASC,EAAE,MAAM,GAAG;AACnF,UAAMC,IAASH,EAAE,SAASA,EAAE,QAAQ,KAAK,QAAYA,EAAE,SAASA,EAAE,QAAQ,KAAKH,IAAW,KACpFO,IAAQN,EAAK,MAAM,CAACO,MAAM,KAAK,IAAIL,EAAE,SAASK,EAAE,MAAM,MAAML,EAAE,QAAQK,EAAE,SAAS,IAAI,CAAS;AACpG,IAAIF,KAAUC,IAAON,EAAK,KAAKE,CAAC,IAC3BD,EAAQ,IAAIC,EAAE,GAAG;AAAA,EACxB;AACA,SAAOD;AACT;"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { jsxs as s, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { useState as l, cloneElement as u, useCallback as m, useLayoutEffect as f } from "react";
|
|
3
|
+
import { cn as c } from "../../lib/cn.js";
|
|
4
|
+
import { yAxisMargin as h, FALLBACK_WIDTH as p, MIN_WIDTH as x } from "./label-metrics.js";
|
|
5
|
+
import { numberFormat as b, formatPercent as g } from "../../lib/intl-cache.js";
|
|
6
|
+
import { Tooltip as y } from "../Popover.js";
|
|
7
|
+
const S = "fold:other", A = (t) => `id:${t}`;
|
|
8
|
+
function W(t, n) {
|
|
9
|
+
const r = /* @__PURE__ */ new Set();
|
|
10
|
+
for (const e of n) {
|
|
11
|
+
if (!Number.isFinite(e.value) || e.value < 0)
|
|
12
|
+
throw new Error(`${t}: "${e.id}" has value ${e.value}; values must be finite and >= 0.`);
|
|
13
|
+
if (r.has(e.id)) throw new Error(`${t}: duplicate id "${e.id}".`);
|
|
14
|
+
r.add(e.id);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function $(t, n) {
|
|
18
|
+
const r = (a, i) => g(a * 100, n, i), e = t * 100;
|
|
19
|
+
return !Number.isFinite(e) || e <= 0 ? r(0, 0) : e < 1 ? `<${r(0.01, 0)}` : e < 10 ? r(Number(e.toFixed(1)) / 100, 1) : r(Math.round(e) / 100, 0);
|
|
20
|
+
}
|
|
21
|
+
function D(t, n) {
|
|
22
|
+
return b(n, { maximumFractionDigits: 2 }).format(t);
|
|
23
|
+
}
|
|
24
|
+
function H({ content: t, children: n }) {
|
|
25
|
+
const [r, e] = l(!1);
|
|
26
|
+
return /* @__PURE__ */ o(y, { content: t, open: r, onOpenChange: e, children: u(n, { onFocus: () => e(!0), onBlur: () => e(!1) }) });
|
|
27
|
+
}
|
|
28
|
+
function _({ label: t, lines: n }) {
|
|
29
|
+
return /* @__PURE__ */ s("div", { className: "flex flex-col gap-0.5", children: [
|
|
30
|
+
/* @__PURE__ */ o("span", { className: "font-semibold text-primary", children: t }),
|
|
31
|
+
n.map((r, e) => /* @__PURE__ */ o("span", { className: "font-normal tabular-nums text-secondary", children: r }, e))
|
|
32
|
+
] });
|
|
33
|
+
}
|
|
34
|
+
function w({
|
|
35
|
+
caption: t,
|
|
36
|
+
columns: n,
|
|
37
|
+
rows: r
|
|
38
|
+
}) {
|
|
39
|
+
return /* @__PURE__ */ s("table", { className: "sr-only", "data-chart-table": !0, children: [
|
|
40
|
+
/* @__PURE__ */ o("caption", { children: t }),
|
|
41
|
+
/* @__PURE__ */ o("thead", { children: /* @__PURE__ */ o("tr", { children: n.map((e) => /* @__PURE__ */ o("th", { scope: "col", children: e }, e)) }) }),
|
|
42
|
+
/* @__PURE__ */ o("tbody", { children: r.map((e) => /* @__PURE__ */ s("tr", { children: [
|
|
43
|
+
/* @__PURE__ */ o("th", { scope: "row", children: e.header }),
|
|
44
|
+
e.cells.map((a, i) => /* @__PURE__ */ o("td", { children: a }, i))
|
|
45
|
+
] }, e.key)) })
|
|
46
|
+
] });
|
|
47
|
+
}
|
|
48
|
+
function G(t) {
|
|
49
|
+
const [n, r] = l(0);
|
|
50
|
+
return f(() => {
|
|
51
|
+
const e = t.current;
|
|
52
|
+
if (!e) return;
|
|
53
|
+
const a = () => r(e.getBoundingClientRect().width);
|
|
54
|
+
a();
|
|
55
|
+
const i = new ResizeObserver(a);
|
|
56
|
+
return i.observe(e), () => i.disconnect();
|
|
57
|
+
}, [t]), n;
|
|
58
|
+
}
|
|
59
|
+
function M({
|
|
60
|
+
label: t,
|
|
61
|
+
text: n,
|
|
62
|
+
height: r,
|
|
63
|
+
className: e,
|
|
64
|
+
ref: a
|
|
65
|
+
}) {
|
|
66
|
+
return /* @__PURE__ */ s("div", { ref: a, role: "group", "aria-label": t, className: c("flex w-full min-w-0 flex-col", e), children: [
|
|
67
|
+
/* @__PURE__ */ o(
|
|
68
|
+
"div",
|
|
69
|
+
{
|
|
70
|
+
"data-empty": "none",
|
|
71
|
+
style: { height: r },
|
|
72
|
+
className: "flex w-full items-center justify-center rounded-md bg-surface-inset px-4 text-center text-sm text-tertiary",
|
|
73
|
+
children: n
|
|
74
|
+
}
|
|
75
|
+
),
|
|
76
|
+
/* @__PURE__ */ o("div", { className: "sr-only", children: /* @__PURE__ */ o(w, { caption: t, columns: [], rows: [] }) })
|
|
77
|
+
] });
|
|
78
|
+
}
|
|
79
|
+
function O(t, n, r, e) {
|
|
80
|
+
const a = h(e), i = Math.max(t || p, x);
|
|
81
|
+
return { left: a, W: i, plotW: i - a - r.right, plotH: n - r.top - r.bottom };
|
|
82
|
+
}
|
|
83
|
+
function B({
|
|
84
|
+
ticks: t,
|
|
85
|
+
labels: n,
|
|
86
|
+
left: r,
|
|
87
|
+
right: e,
|
|
88
|
+
y: a
|
|
89
|
+
}) {
|
|
90
|
+
return t.map((i, d) => /* @__PURE__ */ s("g", { "data-y-tick": i, children: [
|
|
91
|
+
/* @__PURE__ */ o("line", { x1: r, x2: e, y1: a(i), y2: a(i), strokeWidth: 1, className: i === 0 ? "stroke-border" : "stroke-border-subtle" }),
|
|
92
|
+
/* @__PURE__ */ o("text", { x: r - 8, y: a(i), dy: "0.32em", textAnchor: "end", className: "fill-secondary text-2xs tabular-nums", children: n[d] })
|
|
93
|
+
] }, i));
|
|
94
|
+
}
|
|
95
|
+
function I({ at: t, x: n, y: r, primary: e, secondary: a }) {
|
|
96
|
+
return /* @__PURE__ */ s("text", { "data-x-tick": t, x: n, y: r, textAnchor: "middle", className: "fill-secondary text-2xs", children: [
|
|
97
|
+
/* @__PURE__ */ o("tspan", { x: n, children: e }),
|
|
98
|
+
a && /* @__PURE__ */ o("tspan", { x: n, dy: "1.25em", className: "fill-tertiary", children: a })
|
|
99
|
+
] });
|
|
100
|
+
}
|
|
101
|
+
function R() {
|
|
102
|
+
const [t, n] = l(/* @__PURE__ */ new Set()), r = m(
|
|
103
|
+
(e) => n((a) => {
|
|
104
|
+
const i = new Set(a);
|
|
105
|
+
return i.delete(e) || i.add(e), i;
|
|
106
|
+
}),
|
|
107
|
+
[]
|
|
108
|
+
);
|
|
109
|
+
return [t, r];
|
|
110
|
+
}
|
|
111
|
+
const N = "flex min-h-6 min-w-6 cursor-pointer items-center gap-1.5 rounded-md px-1 text-xs text-secondary hover:bg-surface-hover";
|
|
112
|
+
function j({ label: t, children: n }) {
|
|
113
|
+
return /* @__PURE__ */ o("ul", { role: "list", "aria-label": t, "data-legend": !0, className: "flex flex-wrap gap-x-4 gap-y-1", children: n });
|
|
114
|
+
}
|
|
115
|
+
function K({ id: t, other: n, children: r }) {
|
|
116
|
+
return /* @__PURE__ */ o("li", { "data-legend-item": t, "data-other": n || void 0, className: "flex min-w-0 items-center", children: r });
|
|
117
|
+
}
|
|
118
|
+
function z({
|
|
119
|
+
color: t,
|
|
120
|
+
swatch: n,
|
|
121
|
+
off: r,
|
|
122
|
+
className: e = "size-2.5 shrink-0 rounded-[2px] border"
|
|
123
|
+
}) {
|
|
124
|
+
return /* @__PURE__ */ o("span", { "aria-hidden": !0, "data-swatch": !0, style: { background: r ? "transparent" : n ?? t, borderColor: t }, className: e });
|
|
125
|
+
}
|
|
126
|
+
const E = "border border-transparent aria-pressed:border-border-strong";
|
|
127
|
+
function V({
|
|
128
|
+
name: t,
|
|
129
|
+
off: n,
|
|
130
|
+
onToggle: r,
|
|
131
|
+
className: e,
|
|
132
|
+
children: a
|
|
133
|
+
}) {
|
|
134
|
+
return /* @__PURE__ */ o("button", { type: "button", "aria-pressed": !n, "aria-label": t, onClick: r, "data-legend-toggle": !0, className: c(N, E, e), children: a });
|
|
135
|
+
}
|
|
136
|
+
export {
|
|
137
|
+
M as ChartEmpty,
|
|
138
|
+
w as ChartTable,
|
|
139
|
+
H as ChartTip,
|
|
140
|
+
N as LEGEND_FRAME,
|
|
141
|
+
K as LegendItem,
|
|
142
|
+
j as LegendList,
|
|
143
|
+
z as LegendSwatch,
|
|
144
|
+
V as LegendToggle,
|
|
145
|
+
S as OTHER_KEY,
|
|
146
|
+
_ as TipBody,
|
|
147
|
+
B as ValueGrid,
|
|
148
|
+
I as XTickLabel,
|
|
149
|
+
W as assertChartData,
|
|
150
|
+
D as defaultFormatValue,
|
|
151
|
+
$ as formatShare,
|
|
152
|
+
O as plotLayout,
|
|
153
|
+
A as rowKey,
|
|
154
|
+
G as useElementWidth,
|
|
155
|
+
R as useHiddenSeries
|
|
156
|
+
};
|
|
157
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sources":["../../../src/components/chart/shared.tsx"],"sourcesContent":["import { cloneElement, useCallback, useLayoutEffect, useState, type ReactElement, type ReactNode, type Ref, type RefObject } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { FALLBACK_WIDTH, MIN_WIDTH, yAxisMargin } from \"./label-metrics\";\nimport { formatPercent, numberFormat } from \"../../lib/intl-cache\";\nimport { Tooltip } from \"../Popover\";\n\n/* ----------------------------------------------------------------------------\n WHAT ShareBar AND BarList HAVE IN COMMON (DX-3963).\n\n Three things, and only three: the input contract that fails loudly, the way\n a share reads as a number, and the two pieces of text-equivalent every chart\n owes (a tooltip a keyboard can reach, and a table a screen reader can walk).\n -------------------------------------------------------------------------- */\n\n/** The React key of a folded \"Other\" row. Caller ids are keyed `id:<id>`, so no caller id can equal it. */\nexport const OTHER_KEY = \"fold:other\";\nexport const rowKey = (id: string) => `id:${id}`;\n\nexport interface ChartDatum {\n id: string;\n value: number;\n}\n\n/**\n * Refuse an input a chart cannot draw truthfully, at the point it arrives.\n * A negative magnitude has no length, a NaN has no share, and a duplicate id\n * would collapse two rows into one React key — each is a caller bug that a\n * clamped or skipped row would hide.\n */\nexport function assertChartData(component: string, data: readonly ChartDatum[]): void {\n const seen = new Set<string>();\n for (const d of data) {\n if (!Number.isFinite(d.value) || d.value < 0) {\n throw new Error(`${component}: \"${d.id}\" has value ${d.value}; values must be finite and >= 0.`);\n }\n if (seen.has(d.id)) throw new Error(`${component}: duplicate id \"${d.id}\".`);\n seen.add(d.id);\n }\n}\n\n/**\n * A share as a person reads it: a whole number from 10% up, one decimal below\n * (`4.5%`), and `<1%` for a real but tiny share so a nonzero segment is never\n * printed as `0%`. A zero total reads `0%`, never `NaN%`.\n */\nexport function formatShare(fraction: number, locale: string): string {\n const percent = (fraction: number, maximumFractionDigits: number) => formatPercent(fraction * 100, locale, maximumFractionDigits);\n const pct = fraction * 100;\n if (!Number.isFinite(pct) || pct <= 0) return percent(0, 0);\n if (pct < 1) return `<${percent(0.01, 0)}`;\n if (pct < 10) return percent(Number(pct.toFixed(1)) / 100, 1);\n return percent(Math.round(pct) / 100, 0);\n}\n\n/** The default way a raw value reads. Callers pass `formatValue` for units. */\nexport function defaultFormatValue(value: number, locale: string): string {\n return numberFormat(locale, { maximumFractionDigits: 2 }).format(value);\n}\n\n/**\n * A tooltip a keyboard and a finger can reach. Base UI opens its tooltip on\n * hover and on KEYBOARD focus only — a tap or a programmatic focus never\n * mounts it (DX-3014) — so the open state is held here and a plain `focus`\n * opens it too. Escape and blur close it; hover is still Base UI's own.\n */\nexport function ChartTip({ content, children }: { content: ReactNode; children: ReactElement<Record<string, unknown>> }) {\n const [open, setOpen] = useState(false);\n return (\n <Tooltip content={content} open={open} onOpenChange={setOpen}>\n {cloneElement(children, { onFocus: () => setOpen(true), onBlur: () => setOpen(false) })}\n </Tooltip>\n );\n}\n\n/** What a tooltip says about one mark — ink tokens only, never the series colour. */\nexport function TipBody({ label, lines }: { label: ReactNode; lines: readonly ReactNode[] }) {\n return (\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"font-semibold text-primary\">{label}</span>\n {lines.map((line, i) => (\n <span key={i} className=\"font-normal tabular-nums text-secondary\">\n {line}\n </span>\n ))}\n </div>\n );\n}\n\n/**\n * The visually hidden table every chart carries — the text-equivalent of its\n * marks, in reading order, so colour and length are never the only way in.\n * `sr-only` keeps it in the accessibility tree and out of the layout.\n */\nexport function ChartTable({\n caption,\n columns,\n rows,\n}: {\n caption: string;\n columns: readonly string[];\n rows: readonly { key: string; header: ReactNode; cells: readonly ReactNode[] }[];\n}) {\n return (\n <table className=\"sr-only\" data-chart-table>\n <caption>{caption}</caption>\n <thead>\n <tr>\n {columns.map((c) => (\n <th key={c} scope=\"col\">\n {c}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((r) => (\n <tr key={r.key}>\n <th scope=\"row\">{r.header}</th>\n {r.cells.map((cell, i) => (\n <td key={i}>{cell}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n\n/* ----------------------------------------------------------------------------\n WHAT THE TWO TIME CHARTS HAVE IN COMMON (DX-4933): they draw an SVG at the\n width of the box that holds it (the numbers are in `label-metrics`).\n -------------------------------------------------------------------------- */\n\n/** The width of the element `ref` points at, kept current as it resizes; 0 until the first measurement. */\nexport function useElementWidth(ref: RefObject<HTMLElement | null>): number {\n const [width, setWidth] = useState(0);\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n const read = () => setWidth(el.getBoundingClientRect().width);\n read();\n const ro = new ResizeObserver(read);\n ro.observe(el);\n return () => ro.disconnect();\n }, [ref]);\n return width;\n}\n\n/* ----------------------------------------------------------------------------\n THE FRAME EVERY TIME CHART DRAWS (DX-4933): the deliberate empty state, the\n plot's geometry from its measured width, the value grid, an x tick, and the\n legend whose entries show and hide a series. TimeSeriesChart and LineChart\n each used to carry their own copy.\n -------------------------------------------------------------------------- */\n\n/** What a chart says when it has nothing to draw: the caption's group, a placeholder of the plot's height, and an empty table. */\nexport function ChartEmpty({\n label,\n text,\n height,\n className,\n ref,\n}: {\n label: string;\n text: string;\n height: number;\n className?: string;\n ref?: Ref<HTMLDivElement>;\n}) {\n return (\n <div ref={ref} role=\"group\" aria-label={label} className={cn(\"flex w-full min-w-0 flex-col\", className)}>\n <div\n data-empty=\"none\"\n style={{ height }}\n className=\"flex w-full items-center justify-center rounded-md bg-surface-inset px-4 text-center text-sm text-tertiary\"\n >\n {text}\n </div>\n <div className=\"sr-only\">\n <ChartTable caption={label} columns={[]} rows={[]} />\n </div>\n </div>\n );\n}\n\nexport interface PlotMargin {\n top: number;\n right: number;\n bottom: number;\n}\n\nexport interface PlotLayout {\n /** Left edge of the plot: room for the widest y label. */\n left: number;\n /** The svg's width. */\n W: number;\n plotW: number;\n plotH: number;\n}\n\n/** The plot's box inside an svg as wide as `measured` (or the fallback width where there is no layout). */\nexport function plotLayout(measured: number, height: number, margin: PlotMargin, axisLabels: readonly string[]): PlotLayout {\n const left = yAxisMargin(axisLabels);\n const W = Math.max(measured || FALLBACK_WIDTH, MIN_WIDTH);\n return { left, W, plotW: W - left - margin.right, plotH: height - margin.top - margin.bottom };\n}\n\n/** One horizontal gridline per tick with its label to the left. The zero line is the baseline marks grow from. */\nexport function ValueGrid({\n ticks,\n labels,\n left,\n right,\n y,\n}: {\n ticks: readonly number[];\n labels: readonly string[];\n left: number;\n /** The x the lines end at. */\n right: number;\n y: (value: number) => number;\n}) {\n return ticks.map((t, k) => (\n <g key={t} data-y-tick={t}>\n <line x1={left} x2={right} y1={y(t)} y2={y(t)} strokeWidth={1} className={t === 0 ? \"stroke-border\" : \"stroke-border-subtle\"} />\n <text x={left - 8} y={y(t)} dy=\"0.32em\" textAnchor=\"end\" className=\"fill-secondary text-2xs tabular-nums\">\n {labels[k]}\n </text>\n </g>\n ));\n}\n\n/** An x tick: a primary line, and a secondary one when the day (or year) changed. `at` names it for tests and probes. */\nexport function XTickLabel({ at, x, y, primary, secondary }: { at: number; x: number; y: number; primary: string; secondary: string | null }) {\n return (\n <text data-x-tick={at} x={x} y={y} textAnchor=\"middle\" className=\"fill-secondary text-2xs\">\n <tspan x={x}>{primary}</tspan>\n {secondary && (\n <tspan x={x} dy=\"1.25em\" className=\"fill-tertiary\">\n {secondary}\n </tspan>\n )}\n </text>\n );\n}\n\n/** The set of series keys the viewer has hidden from the legend, and the toggle that flips one. */\nexport function useHiddenSeries(): readonly [ReadonlySet<string>, (key: string) => void] {\n const [hidden, setHidden] = useState<ReadonlySet<string>>(new Set());\n const toggle = useCallback(\n (key: string) =>\n setHidden((prev) => {\n const next = new Set(prev);\n if (!next.delete(key)) next.add(key);\n return next;\n }),\n [],\n );\n return [hidden, toggle];\n}\n\nexport const LEGEND_FRAME = \"flex min-h-6 min-w-6 cursor-pointer items-center gap-1.5 rounded-md px-1 text-xs text-secondary hover:bg-surface-hover\";\n\nexport function LegendList({ label, children }: { label: string; children: ReactNode }) {\n return (\n <ul role=\"list\" aria-label={label} data-legend className=\"flex flex-wrap gap-x-4 gap-y-1\">\n {children}\n </ul>\n );\n}\n\nexport function LegendItem({ id, other, children }: { id: string; other?: boolean; children: ReactNode }) {\n return (\n <li data-legend-item={id} data-other={other || undefined} className=\"flex min-w-0 items-center\">\n {children}\n </li>\n );\n}\n\n/** The colour box (or, with `className`, another shape) beside a legend name: filled while the series shows, an outline while hidden. */\nexport function LegendSwatch({\n color,\n swatch,\n off,\n className = \"size-2.5 shrink-0 rounded-[2px] border\",\n}: {\n color: string;\n /** A CSS `background` for a swatch that is not one flat colour (a striped line); wins over `color` while the series shows. */\n swatch?: string;\n off: boolean;\n className?: string;\n}) {\n return <span aria-hidden data-swatch style={{ background: off ? \"transparent\" : (swatch ?? color), borderColor: color }} className={className} />;\n}\n\n/* DX-5084: a shown series wears a hairline outline and a hidden one has none, so a\n hovered shown toggle and a hovered hidden toggle (same hover fill) still differ\n (audit:hover claim C). The border is always 1px, transparent when hidden, so the\n toggle never changes size. */\nconst LEGEND_TOGGLE_STATE = \"border border-transparent aria-pressed:border-border-strong\";\n\n/** The button that shows or hides one series; `name` is its accessible name. */\nexport function LegendToggle({\n name,\n off,\n onToggle,\n className,\n children,\n}: {\n name: string;\n off: boolean;\n onToggle: () => void;\n className?: string;\n children: ReactNode;\n}) {\n return (\n <button type=\"button\" aria-pressed={!off} aria-label={name} onClick={onToggle} data-legend-toggle className={cn(LEGEND_FRAME, LEGEND_TOGGLE_STATE, className)}>\n {children}\n </button>\n );\n}\n"],"names":["OTHER_KEY","rowKey","id","assertChartData","component","data","seen","d","formatShare","fraction","locale","percent","maximumFractionDigits","formatPercent","pct","defaultFormatValue","value","numberFormat","ChartTip","content","children","open","setOpen","useState","jsx","Tooltip","cloneElement","TipBody","label","lines","jsxs","line","i","ChartTable","caption","columns","rows","c","r","cell","useElementWidth","ref","width","setWidth","useLayoutEffect","el","read","ro","ChartEmpty","text","height","className","cn","plotLayout","measured","margin","axisLabels","left","yAxisMargin","W","FALLBACK_WIDTH","MIN_WIDTH","ValueGrid","ticks","labels","right","y","t","k","XTickLabel","at","x","primary","secondary","useHiddenSeries","hidden","setHidden","toggle","useCallback","key","prev","next","LEGEND_FRAME","LegendList","LegendItem","other","LegendSwatch","color","swatch","off","LEGEND_TOGGLE_STATE","LegendToggle","name","onToggle"],"mappings":"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"}
|