@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,96 @@
|
|
|
1
|
+
import { jsxs as r, jsx as e, Fragment as A } from "react/jsx-runtime";
|
|
2
|
+
import { useState as j, useId as E } from "react";
|
|
3
|
+
import { Badge as i } from "../Badge.js";
|
|
4
|
+
import { Card as F } from "../Card.js";
|
|
5
|
+
import { Icon as R } from "../Icon.js";
|
|
6
|
+
import { cn as d } from "../../lib/cn.js";
|
|
7
|
+
import { toneForIndex as h } from "./chip-tones.js";
|
|
8
|
+
import { deriveRoadmapItemStatus as T, trackIds as _ } from "./derive.js";
|
|
9
|
+
import { UseCaseCard as B } from "./UseCaseCard.js";
|
|
10
|
+
import { useUiStrings as D } from "../../lib/i18n/provider.js";
|
|
11
|
+
import { useNumberFormat as M } from "../../lib/i18n/number-format.js";
|
|
12
|
+
const U = {
|
|
13
|
+
planned: { tone: "neutral" },
|
|
14
|
+
"in-progress": { tone: "warning", live: !0 },
|
|
15
|
+
shipped: { tone: "success" },
|
|
16
|
+
unresolved: { tone: "danger" }
|
|
17
|
+
};
|
|
18
|
+
function W({
|
|
19
|
+
item: o,
|
|
20
|
+
domain: g,
|
|
21
|
+
domainIndex: v,
|
|
22
|
+
phase: y,
|
|
23
|
+
phaseIndex: b,
|
|
24
|
+
useCases: n,
|
|
25
|
+
tracks: l,
|
|
26
|
+
onUseCaseStatusChange: c,
|
|
27
|
+
onUseCaseBuiltChange: p,
|
|
28
|
+
defaultExpanded: N = !1,
|
|
29
|
+
className: w
|
|
30
|
+
}) {
|
|
31
|
+
const f = D().roadmap, I = M(), [a, S] = j(N), x = T(n, _(l)), s = U[x], u = E();
|
|
32
|
+
return /* @__PURE__ */ r(F, { variant: "raised", padding: "md", className: d("gap-3", w), children: [
|
|
33
|
+
/* @__PURE__ */ r("div", { className: "flex flex-wrap items-start justify-between gap-3", children: [
|
|
34
|
+
/* @__PURE__ */ r("div", { className: "flex min-w-0 flex-wrap items-center gap-2", children: [
|
|
35
|
+
/* @__PURE__ */ e(i, { size: "sm", tone: "neutral", className: "font-mono", children: o.ref }),
|
|
36
|
+
/* @__PURE__ */ e("h4", { className: "min-w-0 truncate font-display text-md font-semibold text-primary", children: o.title })
|
|
37
|
+
] }),
|
|
38
|
+
/* @__PURE__ */ e(i, { size: "sm", tone: s.tone, dot: s.live, pulse: s.live, children: f.itemStatus[x] })
|
|
39
|
+
] }),
|
|
40
|
+
/* @__PURE__ */ r("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
41
|
+
/* @__PURE__ */ e(i, { size: "sm", tone: h(v), children: g.name }),
|
|
42
|
+
/* @__PURE__ */ e(i, { size: "sm", tone: h(b), children: y.name })
|
|
43
|
+
] }),
|
|
44
|
+
o.summary && /* @__PURE__ */ e("p", { className: "text-sm text-secondary text-pretty", children: o.summary }),
|
|
45
|
+
n.length > 0 && /* @__PURE__ */ r(A, { children: [
|
|
46
|
+
/* @__PURE__ */ r(
|
|
47
|
+
"button",
|
|
48
|
+
{
|
|
49
|
+
type: "button",
|
|
50
|
+
onClick: () => S((t) => !t),
|
|
51
|
+
"aria-expanded": a,
|
|
52
|
+
"aria-controls": u,
|
|
53
|
+
className: d(
|
|
54
|
+
"dx-tap flex w-fit items-center gap-1.5 rounded-md px-2 py-1",
|
|
55
|
+
"text-xs font-medium text-tertiary transition-colors duration-(--dur-fast)",
|
|
56
|
+
"hover:bg-surface-hover hover:text-primary"
|
|
57
|
+
),
|
|
58
|
+
children: [
|
|
59
|
+
/* @__PURE__ */ e(
|
|
60
|
+
R,
|
|
61
|
+
{
|
|
62
|
+
name: "chevron-right",
|
|
63
|
+
size: "xs",
|
|
64
|
+
className: d(
|
|
65
|
+
/* The colour half is not optional: naming a transition REPLACES
|
|
66
|
+
the global one, so a bare `transition-transform` leaves this
|
|
67
|
+
chevron cutting between themes while the label beside it
|
|
68
|
+
fades. `audit:motion` counts that, and it was not run when
|
|
69
|
+
this shipped. */
|
|
70
|
+
"transition-[var(--tx-colors),transform] duration-(--dur-base) ease-snappy",
|
|
71
|
+
a && "rotate-90"
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
),
|
|
75
|
+
f.toggleUseCases(n.length, I(n.length), a)
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
),
|
|
79
|
+
a && /* @__PURE__ */ e("div", { id: u, className: "flex flex-col gap-2 border-t border-border-subtle pt-3", children: n.map((t) => /* @__PURE__ */ e(
|
|
80
|
+
B,
|
|
81
|
+
{
|
|
82
|
+
useCase: t,
|
|
83
|
+
tracks: l,
|
|
84
|
+
onStatusChange: c ? (m) => c(t.ref, m) : void 0,
|
|
85
|
+
onBuiltChange: p ? (m, z) => p(t.ref, m, z) : void 0
|
|
86
|
+
},
|
|
87
|
+
t.ref
|
|
88
|
+
)) })
|
|
89
|
+
] })
|
|
90
|
+
] });
|
|
91
|
+
}
|
|
92
|
+
export {
|
|
93
|
+
U as ROADMAP_ITEM_STATUS_BADGE,
|
|
94
|
+
W as RoadmapItemCard
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=RoadmapItemCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoadmapItemCard.js","sources":["../../../src/components/roadmap/RoadmapItemCard.tsx"],"sourcesContent":["import { useId, useState } from \"react\";\nimport { Badge, type BadgeProps } from \"../Badge\";\nimport { Card } from \"../Card\";\nimport { Icon } from \"../Icon\";\nimport { cn } from \"../../lib/cn\";\nimport { useNumberFormat, useUiStrings } from \"../../lib/i18n\";\nimport { toneForIndex } from \"./chip-tones\";\nimport { deriveRoadmapItemStatus, trackIds } from \"./derive\";\nimport type { Domain, Phase, RoadmapItem, RoadmapItemStatus, Track, UseCase, UseCaseStatus } from \"./types\";\nimport { UseCaseCard } from \"./UseCaseCard\";\n\n/* ----------------------------------------------------------------------------\n ROADMAP ITEM CARD\n\n Exported so `RoadmapSwimlaneBoard` can label its per-status counts with the\n same tones without a second lookup table drifting out of sync with this one.\n Keyed on `RoadmapItemStatus`, a closed 4-value union owned by `types.ts` —\n fixed structure, not consumer data, so this is not the hardcoded-domain\n violation the rest of the file works hard to avoid.\n -------------------------------------------------------------------------- */\nexport const ROADMAP_ITEM_STATUS_BADGE: Record<RoadmapItemStatus, { tone: BadgeProps[\"tone\"]; live?: boolean }> = {\n planned: { tone: \"neutral\" },\n \"in-progress\": { tone: \"warning\", live: true },\n shipped: { tone: \"success\" },\n unresolved: { tone: \"danger\" },\n};\n\nexport interface RoadmapItemCardProps {\n item: RoadmapItem;\n domain: Domain;\n /** `domain`'s position in the FULL `domains[]` list the caller was handed —\n computed once by the caller (`domains.findIndex(...)`, or a `.map()`\n index), never re-derived here. Drives the domain Badge's cycling tone\n via `toneForIndex`, the same \"the card computes nothing it wasn't\n explicitly handed\" pattern already used for `useCases` below. */\n domainIndex: number;\n phase: Phase;\n /** Same pattern as `domainIndex`, for `phase`. */\n phaseIndex: number;\n /** This item's OWN use cases (already filtered by `goalRef === item.ref`) —\n the card computes its status from exactly this list and renders nothing\n more, so a caller handing it the wrong slice silently mis-derives status\n rather than the card silently re-filtering a different assumption. */\n useCases: UseCase[];\n /** The consumer's build tracks, in display order. Threaded straight through\n to every `UseCaseCard`, and used for this item's own status rollup —\n \"shipped\" means every live use case is verified AND built on all of them,\n so an item cannot report shipped off a built interface alone. */\n tracks: readonly Track[];\n /** Forwarded to each `UseCaseCard`'s `onStatusChange` as\n `onUseCaseStatusChange(useCase.ref, status)`. Omitted (the default,\n `RoadmapSwimlaneBoard`'s customer-facing use) keeps every `UseCaseCard`\n read-only — see `UseCaseCard`'s own `onStatusChange` doc. */\n onUseCaseStatusChange?: (ref: string, status: UseCaseStatus) => void;\n /** Same forwarding as `onUseCaseStatusChange`, for the build chips. */\n onUseCaseBuiltChange?: (ref: string, trackId: string, built: boolean) => void;\n defaultExpanded?: boolean;\n className?: string;\n}\n\n/**\n * A single roadmap item, expandable to reveal the use cases behind it.\n *\n * COLLAPSED BY DEFAULT, REVEALED BY A CLICK — this is the literal \"click a\n * roadmap item to see the use cases inside it\" interaction from the product\n * spec, not a static list that happens to render inside a card. A disclosure\n * button (`aria-expanded` + `aria-controls`) rather than making the whole card\n * clickable: a card-sized hit target with no visible affordance is the classic\n * \"is this a link or a label\" ambiguity, and a card is also where a consumer\n * may reasonably want to add its OWN click behaviour (e.g. deep-linking) later\n * without fighting this one for the same element.\n */\nexport function RoadmapItemCard({\n item,\n domain,\n domainIndex,\n phase,\n phaseIndex,\n useCases,\n tracks,\n onUseCaseStatusChange,\n onUseCaseBuiltChange,\n defaultExpanded = false,\n className,\n}: RoadmapItemCardProps) {\n const strings = useUiStrings().roadmap;\n const fmt = useNumberFormat();\n const [expanded, setExpanded] = useState(defaultExpanded);\n const itemStatus = deriveRoadmapItemStatus(useCases, trackIds(tracks));\n const status = ROADMAP_ITEM_STATUS_BADGE[itemStatus];\n const panelId = useId();\n\n return (\n <Card variant=\"raised\" padding=\"md\" className={cn(\"gap-3\", className)}>\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-2\">\n <Badge size=\"sm\" tone=\"neutral\" className=\"font-mono\">\n {item.ref}\n </Badge>\n <h4 className=\"min-w-0 truncate font-display text-md font-semibold text-primary\">\n {item.title}\n </h4>\n </div>\n <Badge size=\"sm\" tone={status.tone} dot={status.live} pulse={status.live}>\n {strings.itemStatus[itemStatus]}\n </Badge>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n {/* Domain and Phase are both open-vocabulary, user-managed lists —\n neither carries a fixed meaning the way a status enum does, so\n their tone is cycled by list POSITION rather than hardcoded. Two\n Badges rather than a Badge + plain text now that Phase is a real\n managed entity (`types.ts`) and not free text. */}\n <Badge size=\"sm\" tone={toneForIndex(domainIndex)}>\n {domain.name}\n </Badge>\n <Badge size=\"sm\" tone={toneForIndex(phaseIndex)}>\n {phase.name}\n </Badge>\n </div>\n\n {item.summary && <p className=\"text-sm text-secondary text-pretty\">{item.summary}</p>}\n\n {useCases.length > 0 && (\n <>\n <button\n type=\"button\"\n onClick={() => setExpanded((current) => !current)}\n aria-expanded={expanded}\n aria-controls={panelId}\n className={cn(\n \"dx-tap flex w-fit items-center gap-1.5 rounded-md px-2 py-1\",\n \"text-xs font-medium text-tertiary transition-colors duration-(--dur-fast)\",\n \"hover:bg-surface-hover hover:text-primary\",\n )}\n >\n <Icon\n name=\"chevron-right\"\n size=\"xs\"\n className={cn(\n /* The colour half is not optional: naming a transition REPLACES\n the global one, so a bare `transition-transform` leaves this\n chevron cutting between themes while the label beside it\n fades. `audit:motion` counts that, and it was not run when\n this shipped. */\n \"transition-[var(--tx-colors),transform] duration-(--dur-base) ease-snappy\",\n expanded && \"rotate-90\",\n )}\n />\n {strings.toggleUseCases(useCases.length, fmt(useCases.length), expanded)}\n </button>\n\n {expanded && (\n <div id={panelId} className=\"flex flex-col gap-2 border-t border-border-subtle pt-3\">\n {useCases.map((useCase) => (\n <UseCaseCard\n key={useCase.ref}\n useCase={useCase}\n tracks={tracks}\n onStatusChange={\n onUseCaseStatusChange\n ? (status) => onUseCaseStatusChange(useCase.ref, status)\n : undefined\n }\n onBuiltChange={\n onUseCaseBuiltChange\n ? (trackId, built) => onUseCaseBuiltChange(useCase.ref, trackId, built)\n : undefined\n }\n />\n ))}\n </div>\n )}\n </>\n )}\n </Card>\n );\n}\n"],"names":["ROADMAP_ITEM_STATUS_BADGE","RoadmapItemCard","item","domain","domainIndex","phase","phaseIndex","useCases","tracks","onUseCaseStatusChange","onUseCaseBuiltChange","defaultExpanded","className","strings","useUiStrings","fmt","useNumberFormat","expanded","setExpanded","useState","itemStatus","deriveRoadmapItemStatus","trackIds","status","panelId","useId","jsxs","Card","cn","jsx","Badge","toneForIndex","Fragment","current","Icon","useCase","UseCaseCard","trackId","built"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsxs as r, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { cn as n } from "../../lib/cn.js";
|
|
3
|
+
import { RoadmapSwimlaneBoard as p } from "./RoadmapSwimlaneBoard.js";
|
|
4
|
+
import { useUiStrings as c } from "../../lib/i18n/provider.js";
|
|
5
|
+
function h({
|
|
6
|
+
domains: t,
|
|
7
|
+
phases: o,
|
|
8
|
+
items: i,
|
|
9
|
+
useCases: l,
|
|
10
|
+
tracks: m,
|
|
11
|
+
className: s
|
|
12
|
+
}) {
|
|
13
|
+
const a = c().roadmap;
|
|
14
|
+
return /* @__PURE__ */ r("div", { className: n("flex min-w-0 flex-col gap-6", s), children: [
|
|
15
|
+
/* @__PURE__ */ r("header", { className: "flex flex-col gap-1", children: [
|
|
16
|
+
/* @__PURE__ */ e("h1", { className: "font-display text-lg font-semibold text-primary", children: a.pageTitle }),
|
|
17
|
+
/* @__PURE__ */ e("p", { className: "text-sm text-secondary", children: a.pageSubtitle })
|
|
18
|
+
] }),
|
|
19
|
+
/* @__PURE__ */ e(
|
|
20
|
+
p,
|
|
21
|
+
{
|
|
22
|
+
domains: t,
|
|
23
|
+
phases: o,
|
|
24
|
+
items: i,
|
|
25
|
+
useCases: l,
|
|
26
|
+
tracks: m
|
|
27
|
+
}
|
|
28
|
+
)
|
|
29
|
+
] });
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
h as RoadmapPage
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=RoadmapPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoadmapPage.js","sources":["../../../src/components/roadmap/RoadmapPage.tsx"],"sourcesContent":["import { cn } from \"../../lib/cn\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport { RoadmapSwimlaneBoard } from \"./RoadmapSwimlaneBoard\";\nimport type { Domain, Phase, RoadmapItem, Track, UseCase } from \"./types\";\n\n/* ----------------------------------------------------------------------------\n ROADMAP PAGE — the customer-facing shell.\n\n Deliberately thin: every filtering decision (customer-visibility, the\n planned/in-progress/shipped columns, dropping \"unresolved\") lives in\n `RoadmapSwimlaneBoard`. Duplicating even one of those rules here would give\n the same behaviour two places to drift apart from each other.\n -------------------------------------------------------------------------- */\n\nexport interface RoadmapPageProps {\n domains: Domain[];\n phases: Phase[];\n items: RoadmapItem[];\n useCases: UseCase[];\n /** Passed straight through — see `RoadmapSwimlaneBoard` for why the build\n tracks stay visible on the customer-facing board. */\n tracks: Track[];\n className?: string;\n}\n\nexport function RoadmapPage({\n domains,\n phases,\n items,\n useCases,\n tracks,\n className,\n}: RoadmapPageProps) {\n const strings = useUiStrings().roadmap;\n return (\n <div className={cn(\"flex min-w-0 flex-col gap-6\", className)}>\n <header className=\"flex flex-col gap-1\">\n <h1 className=\"font-display text-lg font-semibold text-primary\">{strings.pageTitle}</h1>\n <p className=\"text-sm text-secondary\">{strings.pageSubtitle}</p>\n </header>\n\n <RoadmapSwimlaneBoard\n domains={domains}\n phases={phases}\n items={items}\n useCases={useCases}\n tracks={tracks}\n />\n </div>\n );\n}\n"],"names":["RoadmapPage","domains","phases","items","useCases","tracks","className","strings","useUiStrings","cn","jsxs","jsx","RoadmapSwimlaneBoard"],"mappings":";;;;AAyBO,SAASA,EAAY;AAAA,EAC1B,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AACF,GAAqB;AACnB,QAAMC,IAAUC,IAAe;AAC/B,2BACG,OAAA,EAAI,WAAWC,EAAG,+BAA+BH,CAAS,GACzD,UAAA;AAAA,IAAA,gBAAAI,EAAC,UAAA,EAAO,WAAU,uBAChB,UAAA;AAAA,MAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,mDAAmD,UAAAJ,EAAQ,WAAU;AAAA,MACnF,gBAAAI,EAAC,KAAA,EAAE,WAAU,0BAA0B,YAAQ,aAAA,CAAa;AAAA,IAAA,GAC9D;AAAA,IAEA,gBAAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,SAAAX;AAAA,QACA,QAAAC;AAAA,QACA,OAAAC;AAAA,QACA,UAAAC;AAAA,QACA,QAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { jsx as t, jsxs as p } from "react/jsx-runtime";
|
|
2
|
+
import { Badge as I } from "../Badge.js";
|
|
3
|
+
import { cn as x } from "../../lib/cn.js";
|
|
4
|
+
import { trackIds as R, deriveRoadmapItemStatus as S } from "./derive.js";
|
|
5
|
+
import { ROADMAP_ITEM_STATUS_BADGE as B, RoadmapItemCard as A } from "./RoadmapItemCard.js";
|
|
6
|
+
import { useUiStrings as C } from "../../lib/i18n/provider.js";
|
|
7
|
+
const k = ["planned", "in-progress", "shipped"];
|
|
8
|
+
function E(l) {
|
|
9
|
+
const r = /* @__PURE__ */ new Map();
|
|
10
|
+
for (const s of l) {
|
|
11
|
+
const i = r.get(s.goalRef);
|
|
12
|
+
i ? i.push(s) : r.set(s.goalRef, [s]);
|
|
13
|
+
}
|
|
14
|
+
return r;
|
|
15
|
+
}
|
|
16
|
+
function G(l, r) {
|
|
17
|
+
const s = l.findIndex((i) => i.id === r);
|
|
18
|
+
if (s === -1) throw new Error(`No Phase with id "${r}" in the phases[] list.`);
|
|
19
|
+
return { phase: l[s], index: s };
|
|
20
|
+
}
|
|
21
|
+
function P({
|
|
22
|
+
domains: l,
|
|
23
|
+
phases: r,
|
|
24
|
+
items: s,
|
|
25
|
+
useCases: i,
|
|
26
|
+
tracks: f,
|
|
27
|
+
className: g
|
|
28
|
+
}) {
|
|
29
|
+
const o = C().roadmap, u = E(i), b = R(f), w = s.filter((e) => e.customerVisible), h = l.map((e, c) => ({
|
|
30
|
+
domain: e,
|
|
31
|
+
domainIndex: c,
|
|
32
|
+
items: w.filter((d) => d.domainSlug === e.slug)
|
|
33
|
+
})).filter((e) => e.items.length > 0);
|
|
34
|
+
return h.length === 0 ? /* @__PURE__ */ t(
|
|
35
|
+
"div",
|
|
36
|
+
{
|
|
37
|
+
className: x(
|
|
38
|
+
"rounded-xl border border-dashed border-border-subtle bg-surface-sunken p-8 text-center",
|
|
39
|
+
g
|
|
40
|
+
),
|
|
41
|
+
children: /* @__PURE__ */ t("p", { className: "text-sm text-tertiary", children: o.empty })
|
|
42
|
+
}
|
|
43
|
+
) : /* @__PURE__ */ t("div", { className: x("flex min-w-0 flex-col gap-8", g), children: h.map(({ domain: e, domainIndex: c, items: d }) => /* @__PURE__ */ p("section", { "aria-labelledby": `swimlane-${e.slug}`, className: "flex flex-col gap-3", children: [
|
|
44
|
+
/* @__PURE__ */ t(
|
|
45
|
+
"h3",
|
|
46
|
+
{
|
|
47
|
+
id: `swimlane-${e.slug}`,
|
|
48
|
+
className: "font-display text-md font-semibold text-primary",
|
|
49
|
+
children: e.name
|
|
50
|
+
}
|
|
51
|
+
),
|
|
52
|
+
/* @__PURE__ */ t("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-3", children: k.map((a) => {
|
|
53
|
+
const m = d.filter(
|
|
54
|
+
(n) => S(u.get(n.ref) ?? [], b) === a
|
|
55
|
+
), y = B[a].tone;
|
|
56
|
+
return /* @__PURE__ */ p(
|
|
57
|
+
"div",
|
|
58
|
+
{
|
|
59
|
+
className: "flex min-w-0 flex-col gap-3 rounded-lg bg-surface-sunken p-3",
|
|
60
|
+
children: [
|
|
61
|
+
/* @__PURE__ */ p("div", { className: "flex items-center justify-between gap-2", children: [
|
|
62
|
+
/* @__PURE__ */ t("span", { className: "text-2xs font-semibold uppercase tracking-widest text-tertiary", children: o.itemStatus[a] }),
|
|
63
|
+
/* @__PURE__ */ t(I, { size: "sm", tone: y, children: m.length })
|
|
64
|
+
] }),
|
|
65
|
+
/* @__PURE__ */ t("div", { className: "flex flex-col gap-3", children: m.length === 0 ? /* @__PURE__ */ t("p", { className: "text-xs text-tertiary", children: o.cellEmpty }) : m.map((n) => {
|
|
66
|
+
const { phase: N, index: v } = G(r, n.phaseId);
|
|
67
|
+
return /* @__PURE__ */ t(
|
|
68
|
+
A,
|
|
69
|
+
{
|
|
70
|
+
item: n,
|
|
71
|
+
domain: e,
|
|
72
|
+
domainIndex: c,
|
|
73
|
+
phase: N,
|
|
74
|
+
phaseIndex: v,
|
|
75
|
+
useCases: u.get(n.ref) ?? [],
|
|
76
|
+
tracks: f
|
|
77
|
+
},
|
|
78
|
+
n.ref
|
|
79
|
+
);
|
|
80
|
+
}) })
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
a
|
|
84
|
+
);
|
|
85
|
+
}) })
|
|
86
|
+
] }, e.slug)) });
|
|
87
|
+
}
|
|
88
|
+
export {
|
|
89
|
+
P as RoadmapSwimlaneBoard
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=RoadmapSwimlaneBoard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoadmapSwimlaneBoard.js","sources":["../../../src/components/roadmap/RoadmapSwimlaneBoard.tsx"],"sourcesContent":["import { Badge } from \"../Badge\";\nimport { cn } from \"../../lib/cn\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport { deriveRoadmapItemStatus, trackIds } from \"./derive\";\nimport { ROADMAP_ITEM_STATUS_BADGE, RoadmapItemCard } from \"./RoadmapItemCard\";\nimport type { Domain, Phase, RoadmapItem, RoadmapItemStatus, Track, UseCase } from \"./types\";\n\n/* ----------------------------------------------------------------------------\n ROADMAP SWIMLANE BOARD — the customer-facing view.\n\n ONLY THREE COLUMNS EXIST HERE, deliberately omitting \"unresolved\" from the\n list below rather than rendering it and hiding it with CSS. \"Unresolved\"\n means a roadmap item has no live (non-rejected) use case backing it — that\n is an internal signal that someone needs to make a call, not something to\n show a prospect evaluating the product. Because the column filter below is a\n plain `status === column.status` match, an unresolved item simply never\n matches ANY column and drops out on its own — the same \"falls out of the\n filter naturally\" mechanism that removes an all-internal domain's row,\n applied one level down. No second special case needed.\n -------------------------------------------------------------------------- */\n\nconst BOARD_COLUMNS: Exclude<RoadmapItemStatus, \"unresolved\">[] = [\"planned\", \"in-progress\", \"shipped\"];\n\n/** Buckets use cases by their parent item's `ref` once, so an N-item board does\n N lookups instead of N full scans of the whole use-case list. */\nfunction groupByGoalRef(useCases: UseCase[]): Map<string, UseCase[]> {\n const byGoal = new Map<string, UseCase[]>();\n for (const useCase of useCases) {\n const bucket = byGoal.get(useCase.goalRef);\n if (bucket) bucket.push(useCase);\n else byGoal.set(useCase.goalRef, [useCase]);\n }\n return byGoal;\n}\n\n/** Same reasoning as `groupByGoalRef` above: a shared helper for a five-line\n lookup would be more indirection than the duplication it removes. A\n `RoadmapItem.phaseId` is required — no \"no phase\" state — so a miss here\n is bad data, not an absent-value case to quietly default around. */\nfunction resolvePhase(phases: Phase[], phaseId: string): { phase: Phase; index: number } {\n const index = phases.findIndex((phase) => phase.id === phaseId);\n if (index === -1) throw new Error(`No Phase with id \"${phaseId}\" in the phases[] list.`);\n return { phase: phases[index], index };\n}\n\nexport interface RoadmapSwimlaneBoardProps {\n domains: Domain[];\n phases: Phase[];\n items: RoadmapItem[];\n useCases: UseCase[];\n /** The consumer's build tracks — shown on every use case here too, NOT\n hidden from the customer-facing view. It is tempting to drop the second\n track from a prospect's board, and it is the wrong instinct: \"the\n interface is built and the service behind it lands on this date\" is a\n stronger and more honest thing to show than a single ambiguous tick. */\n tracks: readonly Track[];\n className?: string;\n}\n\nexport function RoadmapSwimlaneBoard({\n domains,\n phases,\n items,\n useCases,\n tracks,\n className,\n}: RoadmapSwimlaneBoardProps) {\n const strings = useUiStrings().roadmap;\n const useCasesByGoal = groupByGoalRef(useCases);\n const ids = trackIds(tracks);\n const visibleItems = items.filter((item) => item.customerVisible);\n\n const rows = domains\n .map((domain, domainIndex) => ({\n domain,\n domainIndex,\n items: visibleItems.filter((item) => item.domainSlug === domain.slug),\n }))\n /* A domain with zero customer-visible items renders NO row at all. This is\n not a guard clause bolted on top — it is what filtering-then-mapping\n naturally produces, so a domain that is entirely internal (every item in\n it `customerVisible: false`) simply never appears, with no branch in this\n file that even mentions \"internal domain\" as a concept. */\n .filter((row) => row.items.length > 0);\n\n if (rows.length === 0) {\n return (\n <div\n className={cn(\n \"rounded-xl border border-dashed border-border-subtle bg-surface-sunken p-8 text-center\",\n className,\n )}\n >\n <p className=\"text-sm text-tertiary\">{strings.empty}</p>\n </div>\n );\n }\n\n return (\n <div className={cn(\"flex min-w-0 flex-col gap-8\", className)}>\n {rows.map(({ domain, domainIndex, items: domainItems }) => (\n <section key={domain.slug} aria-labelledby={`swimlane-${domain.slug}`} className=\"flex flex-col gap-3\">\n <h3\n id={`swimlane-${domain.slug}`}\n className=\"font-display text-md font-semibold text-primary\"\n >\n {domain.name}\n </h3>\n\n {/* CSS grid, not a <table> — these are cards grouped into three\n buckets, not tabular data with row/column relationships a screen\n reader should announce as a grid. */}\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-3\">\n {BOARD_COLUMNS.map((column) => {\n const cellItems = domainItems.filter(\n (item) =>\n deriveRoadmapItemStatus(useCasesByGoal.get(item.ref) ?? [], ids) === column,\n );\n const columnTone = ROADMAP_ITEM_STATUS_BADGE[column].tone;\n\n return (\n <div\n key={column}\n className=\"flex min-w-0 flex-col gap-3 rounded-lg bg-surface-sunken p-3\"\n >\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-2xs font-semibold uppercase tracking-widest text-tertiary\">\n {strings.itemStatus[column]}\n </span>\n <Badge size=\"sm\" tone={columnTone}>\n {cellItems.length}\n </Badge>\n </div>\n\n <div className=\"flex flex-col gap-3\">\n {cellItems.length === 0 ? (\n <p className=\"text-xs text-tertiary\">{strings.cellEmpty}</p>\n ) : (\n cellItems.map((item) => {\n const { phase, index: phaseIndex } = resolvePhase(phases, item.phaseId);\n return (\n <RoadmapItemCard\n key={item.ref}\n item={item}\n domain={domain}\n domainIndex={domainIndex}\n phase={phase}\n phaseIndex={phaseIndex}\n useCases={useCasesByGoal.get(item.ref) ?? []}\n tracks={tracks}\n />\n );\n })\n )}\n </div>\n </div>\n );\n })}\n </div>\n </section>\n ))}\n </div>\n );\n}\n"],"names":["BOARD_COLUMNS","groupByGoalRef","useCases","byGoal","useCase","bucket","resolvePhase","phases","phaseId","index","phase","RoadmapSwimlaneBoard","domains","items","tracks","className","strings","useUiStrings","useCasesByGoal","ids","trackIds","visibleItems","item","rows","domain","domainIndex","row","jsx","cn","domainItems","jsxs","column","cellItems","deriveRoadmapItemStatus","columnTone","ROADMAP_ITEM_STATUS_BADGE","Badge","phaseIndex","RoadmapItemCard"],"mappings":";;;;;;AAqBA,MAAMA,IAA4D,CAAC,WAAW,eAAe,SAAS;AAItG,SAASC,EAAeC,GAA6C;AACnE,QAAMC,wBAAa,IAAA;AACnB,aAAWC,KAAWF,GAAU;AAC9B,UAAMG,IAASF,EAAO,IAAIC,EAAQ,OAAO;AACzC,IAAIC,IAAQA,EAAO,KAAKD,CAAO,MACnB,IAAIA,EAAQ,SAAS,CAACA,CAAO,CAAC;AAAA,EAC5C;AACA,SAAOD;AACT;AAMA,SAASG,EAAaC,GAAiBC,GAAkD;AACvF,QAAMC,IAAQF,EAAO,UAAU,CAACG,MAAUA,EAAM,OAAOF,CAAO;AAC9D,MAAIC,MAAU,GAAI,OAAM,IAAI,MAAM,qBAAqBD,CAAO,yBAAyB;AACvF,SAAO,EAAE,OAAOD,EAAOE,CAAK,GAAG,OAAAA,EAAA;AACjC;AAgBO,SAASE,EAAqB;AAAA,EACnC,SAAAC;AAAA,EACA,QAAAL;AAAA,EACA,OAAAM;AAAA,EACA,UAAAX;AAAA,EACA,QAAAY;AAAA,EACA,WAAAC;AACF,GAA8B;AAC5B,QAAMC,IAAUC,IAAe,SACzBC,IAAiBjB,EAAeC,CAAQ,GACxCiB,IAAMC,EAASN,CAAM,GACrBO,IAAeR,EAAM,OAAO,CAACS,MAASA,EAAK,eAAe,GAE1DC,IAAOX,EACV,IAAI,CAACY,GAAQC,OAAiB;AAAA,IAC7B,QAAAD;AAAA,IACA,aAAAC;AAAA,IACA,OAAOJ,EAAa,OAAO,CAACC,MAASA,EAAK,eAAeE,EAAO,IAAI;AAAA,EAAA,EACpE,EAMD,OAAO,CAACE,MAAQA,EAAI,MAAM,SAAS,CAAC;AAEvC,SAAIH,EAAK,WAAW,IAEhB,gBAAAI;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAb;AAAA,MAAA;AAAA,MAGF,UAAA,gBAAAY,EAAC,KAAA,EAAE,WAAU,yBAAyB,YAAQ,MAAA,CAAM;AAAA,IAAA;AAAA,EAAA,IAMxD,gBAAAA,EAAC,OAAA,EAAI,WAAWC,EAAG,+BAA+Bb,CAAS,GACxD,UAAAQ,EAAK,IAAI,CAAC,EAAE,QAAAC,GAAQ,aAAAC,GAAa,OAAOI,EAAA,MACvC,gBAAAC,EAAC,WAAA,EAA0B,mBAAiB,YAAYN,EAAO,IAAI,IAAI,WAAU,uBAC/E,UAAA;AAAA,IAAA,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI,YAAYH,EAAO,IAAI;AAAA,QAC3B,WAAU;AAAA,QAET,UAAAA,EAAO;AAAA,MAAA;AAAA,IAAA;AAAA,sBAMT,OAAA,EAAI,WAAU,yCACZ,UAAAxB,EAAc,IAAI,CAAC+B,MAAW;AAC7B,YAAMC,IAAYH,EAAY;AAAA,QAC5B,CAACP,MACCW,EAAwBf,EAAe,IAAII,EAAK,GAAG,KAAK,IAAIH,CAAG,MAAMY;AAAA,MAAA,GAEnEG,IAAaC,EAA0BJ,CAAM,EAAE;AAErD,aACE,gBAAAD;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2CACb,UAAA;AAAA,cAAA,gBAAAH,EAAC,UAAK,WAAU,kEACb,UAAAX,EAAQ,WAAWe,CAAM,GAC5B;AAAA,gCACCK,GAAA,EAAM,MAAK,MAAK,MAAMF,GACpB,YAAU,OAAA,CACb;AAAA,YAAA,GACF;AAAA,8BAEC,OAAA,EAAI,WAAU,uBACZ,UAAAF,EAAU,WAAW,IACpB,gBAAAL,EAAC,KAAA,EAAE,WAAU,yBAAyB,UAAAX,EAAQ,UAAA,CAAU,IAExDgB,EAAU,IAAI,CAACV,MAAS;AACtB,oBAAM,EAAE,OAAAZ,GAAO,OAAO2B,EAAA,IAAe/B,EAAaC,GAAQe,EAAK,OAAO;AACtE,qBACE,gBAAAK;AAAA,gBAACW;AAAA,gBAAA;AAAA,kBAEC,MAAAhB;AAAA,kBACA,QAAAE;AAAA,kBACA,aAAAC;AAAA,kBACA,OAAAf;AAAA,kBACA,YAAA2B;AAAA,kBACA,UAAUnB,EAAe,IAAII,EAAK,GAAG,KAAK,CAAA;AAAA,kBAC1C,QAAAR;AAAA,gBAAA;AAAA,gBAPKQ,EAAK;AAAA,cAAA;AAAA,YAUhB,CAAC,EAAA,CAEL;AAAA,UAAA;AAAA,QAAA;AAAA,QAhCKS;AAAA,MAAA;AAAA,IAmCX,CAAC,EAAA,CACH;AAAA,EAAA,EAAA,GAzDYP,EAAO,IA0DrB,CACD,GACH;AAEJ;"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import { Badge as g } from "../Badge.js";
|
|
3
|
+
import { OrderedEntityManager as f } from "../OrderedEntityManager.js";
|
|
4
|
+
import { trackProgress as k } from "./derive.js";
|
|
5
|
+
import { useUiStrings as h } from "../../lib/i18n/provider.js";
|
|
6
|
+
import { useNumberFormat as L } from "../../lib/i18n/number-format.js";
|
|
7
|
+
function B({
|
|
8
|
+
tracks: s,
|
|
9
|
+
useCases: n,
|
|
10
|
+
onCreate: d,
|
|
11
|
+
onRename: c,
|
|
12
|
+
onReorder: l,
|
|
13
|
+
onDelete: m,
|
|
14
|
+
className: p
|
|
15
|
+
}) {
|
|
16
|
+
const e = h().trackManager, t = L();
|
|
17
|
+
function u(a) {
|
|
18
|
+
const { built: r, live: b } = k(n, a.id), o = r > 0;
|
|
19
|
+
return {
|
|
20
|
+
/* Progress is the reading this row exists to give: how far the whole
|
|
21
|
+
ledger has got along THIS axis. It doubles as the visible reason the
|
|
22
|
+
delete guard applies, so a disabled button never stands alone
|
|
23
|
+
without one — unlike `PhaseManager`'s badge, this one is ALWAYS
|
|
24
|
+
shown, not just while blocked. */
|
|
25
|
+
badge: /* @__PURE__ */ i(g, { size: "sm", tone: o ? "success" : "neutral", className: "shrink-0 tabular", children: e.progress(r, t(r), t(b)) }),
|
|
26
|
+
/* The reason used to be folded into `aria-label`, which put it in the
|
|
27
|
+
NAME slot: it renamed the control for a screen reader and told a
|
|
28
|
+
sighted user nothing at all, because the natively-disabled button
|
|
29
|
+
could not be hovered. `disabledReason` keeps the name stable and
|
|
30
|
+
carries the explanation as a description both audiences can
|
|
31
|
+
actually reach. */
|
|
32
|
+
disabledReason: o ? e.deleteBlocked(r, t(r), a.name) : void 0
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return /* @__PURE__ */ i(
|
|
36
|
+
f,
|
|
37
|
+
{
|
|
38
|
+
items: s,
|
|
39
|
+
title: e.title,
|
|
40
|
+
description: e.description,
|
|
41
|
+
emptyMessage: e.empty,
|
|
42
|
+
addFieldLabel: e.addFieldLabel,
|
|
43
|
+
addPlaceholder: e.addPlaceholder,
|
|
44
|
+
containerId: "tracks",
|
|
45
|
+
containerLabel: e.containerLabel,
|
|
46
|
+
onCreate: d,
|
|
47
|
+
onRename: c,
|
|
48
|
+
onReorder: l,
|
|
49
|
+
onDelete: m,
|
|
50
|
+
rowStatus: u,
|
|
51
|
+
className: p
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
B as TrackManager
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=TrackManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrackManager.js","sources":["../../../src/components/roadmap/TrackManager.tsx"],"sourcesContent":["import { useNumberFormat, useUiStrings } from \"../../lib/i18n\";\nimport { Badge } from \"../Badge\";\nimport { OrderedEntityManager, type OrderedEntityRowStatus } from \"../OrderedEntityManager\";\nimport { trackProgress } from \"./derive\";\nimport type { Track, UseCase } from \"./types\";\n\n/* ============================================================================\n TRACK MANAGER — dev-only CRUD surface for the `Track` list.\n\n The sibling of `PhaseManager`, and deliberately built to the same shape: it\n reads plain props and fires callbacks, with no idea whether a store or a\n real API is on the other side. Mounted inside `UseCaseLedgerPage`, never\n `RoadmapPage` — which axes a team builds along is an internal planning\n concern, even though the resulting build state is shown publicly. The\n shared state machine and row chrome live in `OrderedEntityManager` (DX-3254)\n — this file's only job is `rowStatus`, below.\n\n THE DELETE GUARD IS DIFFERENT FROM PHASE'S, ON PURPOSE. A phase is blocked\n from deletion by any reference at all, because `RoadmapItem.phaseId` is\n required and an orphaned id is unrepresentable. A track has no such\n structural requirement — `UseCase.built` is a map, and a key nobody reads is\n merely dead, not invalid. So the guard here blocks only on a track that\n something is actually recorded as BUILT on: deleting that discards a real\n record of work, which is a decision this component must not make quietly.\n A track nothing is built on yet is free to delete, and says so by simply\n enabling the button.\n ========================================================================= */\n\nexport interface TrackManagerProps {\n tracks: Track[];\n /** Read-only — used only to compute progress and the delete guard below. */\n useCases: UseCase[];\n /** `order` is pre-computed by this component (next after the current max)\n so the caller only has to assign an id and persist. */\n onCreate: (track: { name: string; order: number }) => void;\n onRename: (id: string, name: string) => void;\n /** The full track list, reordered and renumbered (`order` === new index) —\n the caller persists each row's new `order`, e.g. one `update` per id. */\n onReorder: (tracks: Track[]) => void;\n onDelete: (id: string) => void;\n className?: string;\n}\n\nexport function TrackManager({\n tracks,\n useCases,\n onCreate,\n onRename,\n onReorder,\n onDelete,\n className,\n}: TrackManagerProps) {\n const strings = useUiStrings().trackManager;\n const fmt = useNumberFormat();\n function rowStatus(track: Track): OrderedEntityRowStatus {\n const { built, live } = trackProgress(useCases, track.id);\n const blocked = built > 0;\n return {\n /* Progress is the reading this row exists to give: how far the whole\n ledger has got along THIS axis. It doubles as the visible reason the\n delete guard applies, so a disabled button never stands alone\n without one — unlike `PhaseManager`'s badge, this one is ALWAYS\n shown, not just while blocked. */\n badge: (\n <Badge size=\"sm\" tone={blocked ? \"success\" : \"neutral\"} className=\"shrink-0 tabular\">\n {strings.progress(built, fmt(built), fmt(live))}\n </Badge>\n ),\n /* The reason used to be folded into `aria-label`, which put it in the\n NAME slot: it renamed the control for a screen reader and told a\n sighted user nothing at all, because the natively-disabled button\n could not be hovered. `disabledReason` keeps the name stable and\n carries the explanation as a description both audiences can\n actually reach. */\n disabledReason: blocked\n ? strings.deleteBlocked(built, fmt(built), track.name)\n : undefined,\n };\n }\n\n return (\n <OrderedEntityManager\n items={tracks}\n title={strings.title}\n description={strings.description}\n emptyMessage={strings.empty}\n addFieldLabel={strings.addFieldLabel}\n addPlaceholder={strings.addPlaceholder}\n containerId=\"tracks\"\n containerLabel={strings.containerLabel}\n onCreate={onCreate}\n onRename={onRename}\n onReorder={onReorder}\n onDelete={onDelete}\n rowStatus={rowStatus}\n className={className}\n />\n );\n}\n"],"names":["TrackManager","tracks","useCases","onCreate","onRename","onReorder","onDelete","className","strings","useUiStrings","fmt","useNumberFormat","rowStatus","track","built","live","trackProgress","blocked","Badge","jsx","OrderedEntityManager"],"mappings":";;;;;;AA2CO,SAASA,EAAa;AAAA,EAC3B,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AACF,GAAsB;AACpB,QAAMC,IAAUC,IAAe,cACzBC,IAAMC,EAAA;AACZ,WAASC,EAAUC,GAAsC;AACvD,UAAM,EAAE,OAAAC,GAAO,MAAAC,EAAA,IAASC,EAAcd,GAAUW,EAAM,EAAE,GAClDI,IAAUH,IAAQ;AACxB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAML,yBACGI,GAAA,EAAM,MAAK,MAAK,MAAMD,IAAU,YAAY,WAAW,WAAU,oBAC/D,UAAAT,EAAQ,SAASM,GAAOJ,EAAII,CAAK,GAAGJ,EAAIK,CAAI,CAAC,GAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQF,gBAAgBE,IACZT,EAAQ,cAAcM,GAAOJ,EAAII,CAAK,GAAGD,EAAM,IAAI,IACnD;AAAA,IAAA;AAAA,EAER;AAEA,SACE,gBAAAM;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAOnB;AAAA,MACP,OAAOO,EAAQ;AAAA,MACf,aAAaA,EAAQ;AAAA,MACrB,cAAcA,EAAQ;AAAA,MACtB,eAAeA,EAAQ;AAAA,MACvB,gBAAgBA,EAAQ;AAAA,MACxB,aAAY;AAAA,MACZ,gBAAgBA,EAAQ;AAAA,MACxB,UAAAL;AAAA,MACA,UAAAC;AAAA,MACA,WAAAC;AAAA,MACA,UAAAC;AAAA,MACA,WAAAM;AAAA,MACA,WAAAL;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { jsxs as i, jsx as e, Fragment as b } from "react/jsx-runtime";
|
|
2
|
+
import { Accordion as f, AccordionItem as g } from "../Accordion.js";
|
|
3
|
+
import { Badge as d } from "../Badge.js";
|
|
4
|
+
import { Icon as a } from "../Icon.js";
|
|
5
|
+
import { StatusSelect as N } from "../StatusSelect.js";
|
|
6
|
+
import { cn as z } from "../../lib/cn.js";
|
|
7
|
+
import { useUiStrings as y } from "../../lib/i18n/provider.js";
|
|
8
|
+
const c = {
|
|
9
|
+
pending: { tone: "neutral", icon: /* @__PURE__ */ e(a, { name: "circle-dashed", size: "xs" }) },
|
|
10
|
+
"in-progress": {
|
|
11
|
+
tone: "warning",
|
|
12
|
+
icon: /* @__PURE__ */ e(a, { name: "loader-circle", size: "xs", className: "animate-spin" }),
|
|
13
|
+
live: !0
|
|
14
|
+
},
|
|
15
|
+
verified: { tone: "success", icon: /* @__PURE__ */ e(a, { name: "circle-check", size: "xs" }) },
|
|
16
|
+
rejected: { tone: "danger", icon: /* @__PURE__ */ e(a, { name: "circle-x", size: "xs" }) }
|
|
17
|
+
};
|
|
18
|
+
function w(r) {
|
|
19
|
+
return Object.keys(c).map((t) => ({
|
|
20
|
+
value: t,
|
|
21
|
+
label: r[t],
|
|
22
|
+
tone: c[t].tone,
|
|
23
|
+
icon: c[t].icon,
|
|
24
|
+
dot: c[t].live,
|
|
25
|
+
pulse: c[t].live
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
function F({
|
|
29
|
+
useCase: r,
|
|
30
|
+
tracks: t,
|
|
31
|
+
onStatusChange: m,
|
|
32
|
+
onBuiltChange: p,
|
|
33
|
+
className: h
|
|
34
|
+
}) {
|
|
35
|
+
const l = y().useCaseCard, o = c[r.status];
|
|
36
|
+
return /* @__PURE__ */ i(
|
|
37
|
+
"article",
|
|
38
|
+
{
|
|
39
|
+
className: z(
|
|
40
|
+
"flex min-w-0 flex-col gap-2 rounded-lg border border-border-subtle bg-surface-sunken p-3",
|
|
41
|
+
h
|
|
42
|
+
),
|
|
43
|
+
children: [
|
|
44
|
+
/* @__PURE__ */ i("header", { className: "flex flex-wrap items-start justify-between gap-2", children: [
|
|
45
|
+
/* @__PURE__ */ i("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
46
|
+
/* @__PURE__ */ e(d, { size: "sm", tone: "neutral", className: "font-mono", children: r.ref }),
|
|
47
|
+
/* @__PURE__ */ e("h5", { className: "min-w-0 truncate text-sm font-semibold text-primary", children: r.title })
|
|
48
|
+
] }),
|
|
49
|
+
/* @__PURE__ */ i("div", { className: "flex shrink-0 flex-wrap items-center gap-1.5", children: [
|
|
50
|
+
m ? /* @__PURE__ */ e(
|
|
51
|
+
N,
|
|
52
|
+
{
|
|
53
|
+
size: "sm",
|
|
54
|
+
"aria-label": l.statusFor(r.ref),
|
|
55
|
+
value: r.status,
|
|
56
|
+
options: w(l.status),
|
|
57
|
+
onValueChange: m
|
|
58
|
+
}
|
|
59
|
+
) : /* @__PURE__ */ e(d, { size: "sm", tone: o.tone, icon: o.icon, dot: o.live, pulse: o.live, children: l.status[r.status] }),
|
|
60
|
+
t.map((n) => {
|
|
61
|
+
const s = r.built[n.id] === !0, u = l.trackBuilt(n.name, s), x = /* @__PURE__ */ i(b, { children: [
|
|
62
|
+
/* @__PURE__ */ e(a, { name: s ? "circle-check" : "circle-dashed", size: "xs" }),
|
|
63
|
+
/* @__PURE__ */ e("span", { "aria-hidden": "true", children: n.name }),
|
|
64
|
+
/* @__PURE__ */ e("span", { className: "sr-only", children: u })
|
|
65
|
+
] });
|
|
66
|
+
return p ? /* @__PURE__ */ e(
|
|
67
|
+
"button",
|
|
68
|
+
{
|
|
69
|
+
type: "button",
|
|
70
|
+
"aria-pressed": s,
|
|
71
|
+
"aria-label": u,
|
|
72
|
+
onClick: () => p(n.id, !s),
|
|
73
|
+
className: "dx-tap rounded-full",
|
|
74
|
+
children: /* @__PURE__ */ e(d, { size: "sm", tone: s ? "success" : "neutral", className: "gap-1", children: /* @__PURE__ */ i("span", { "aria-hidden": "true", className: "flex items-center gap-1", children: [
|
|
75
|
+
/* @__PURE__ */ e(a, { name: s ? "circle-check" : "circle-dashed", size: "xs" }),
|
|
76
|
+
n.name
|
|
77
|
+
] }) })
|
|
78
|
+
},
|
|
79
|
+
n.id
|
|
80
|
+
) : /* @__PURE__ */ e(d, { size: "sm", tone: s ? "success" : "neutral", className: "gap-1", children: x }, n.id);
|
|
81
|
+
})
|
|
82
|
+
] })
|
|
83
|
+
] }),
|
|
84
|
+
/* @__PURE__ */ e("p", { className: "text-sm text-secondary text-pretty", children: r.description }),
|
|
85
|
+
r.background && /* @__PURE__ */ e(f, { className: "-mx-3 -mb-3 border-t border-border-subtle px-3", children: /* @__PURE__ */ e(g, { value: `${r.ref}-background`, title: l.background, className: "border-b-0", children: /* @__PURE__ */ e("p", { className: "text-secondary text-pretty", children: r.background }) }) })
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
export {
|
|
91
|
+
F as UseCaseCard
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=UseCaseCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UseCaseCard.js","sources":["../../../src/components/roadmap/UseCaseCard.tsx"],"sourcesContent":["import { Accordion, AccordionItem } from \"../Accordion\";\nimport { Badge, type BadgeProps } from \"../Badge\";\nimport { Icon } from \"../Icon\";\nimport { StatusSelect, type StatusOption } from \"../StatusSelect\";\nimport { cn } from \"../../lib/cn\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport type { Track, UseCase, UseCaseStatus } from \"./types\";\n\n/* ----------------------------------------------------------------------------\n USE-CASE CARD — the leaf of the Domain -> RoadmapItem -> UseCase hierarchy.\n\n The status/tone table below is keyed on `UseCaseStatus`, which is a closed\n 4-value union OWNED BY THIS LIBRARY (`types.ts`), not consumer data — so this\n is structure, not the \"never hardcode a domain name\" violation the ledger is\n built to avoid. A consumer's use-case TITLES and DESCRIPTIONS never appear on\n the left of a lookup table in this file; only the fixed status enum does.\n\n \"in-progress\" is the only status that pulses (the Badge) / spins (its icon).\n Both are reserved for something genuinely live (see Badge's own rationale for\n `pulse`) — \"pending\" and \"verified\" are settled states, so animating them\n would just be noise that never turns off.\n ---------------------------------------------------------------------------- */\n\nconst STATUS_BADGE: Record<\n UseCaseStatus,\n { tone: BadgeProps[\"tone\"]; icon: React.ReactNode; live?: boolean }\n> = {\n pending: { tone: \"neutral\", icon: <Icon name=\"circle-dashed\" size=\"xs\" /> },\n \"in-progress\": {\n tone: \"warning\",\n icon: <Icon name=\"loader-circle\" size=\"xs\" className=\"animate-spin\" />,\n live: true,\n },\n verified: { tone: \"success\", icon: <Icon name=\"circle-check\" size=\"xs\" /> },\n rejected: { tone: \"danger\", icon: <Icon name=\"circle-x\" size=\"xs\" /> },\n};\n\n/** One source of truth for `StatusSelect`'s option list, so it can never\n drift out of sync with `STATUS_BADGE`'s tones/icons/labels. */\nfunction statusOptions(labels: Record<UseCaseStatus, string>): StatusOption<UseCaseStatus>[] {\n return (Object.keys(STATUS_BADGE) as UseCaseStatus[]).map((value) => ({\n value,\n label: labels[value],\n tone: STATUS_BADGE[value].tone,\n icon: STATUS_BADGE[value].icon,\n dot: STATUS_BADGE[value].live,\n pulse: STATUS_BADGE[value].live,\n }));\n}\n\nexport interface UseCaseCardProps {\n useCase: UseCase;\n /**\n * The build tracks to report against, in display order — the consumer's own\n * list, whatever it named them. A track absent from `useCase.built` reads as\n * not built.\n *\n * Required rather than optional: a card that silently renders no build state\n * because a caller forgot the prop is exactly the \"looks finished, says\n * nothing\" failure the ledger exists to prevent.\n */\n tracks: readonly Track[];\n /**\n * Makes `status` user-settable: supplying this swaps the read-only status\n * Badge for a `Select`. Omitted (the default) keeps the Badge — so\n * `RoadmapPage`'s customer-facing rendering of this card, if it ever\n * renders one directly, is never forced into an editable control just\n * because this component knows how to be one.\n */\n onStatusChange?: (status: UseCaseStatus) => void;\n /**\n * Same opt-in shape as `onStatusChange`, for the build chips: supply it and\n * each track chip becomes a toggle button; omit it and they stay plain\n * badges. The customer-facing roadmap omits it.\n */\n onBuiltChange?: (trackId: string, built: boolean) => void;\n className?: string;\n}\n\nexport function UseCaseCard({\n useCase,\n tracks,\n onStatusChange,\n onBuiltChange,\n className,\n}: UseCaseCardProps) {\n const strings = useUiStrings().useCaseCard;\n const status = STATUS_BADGE[useCase.status];\n\n return (\n <article\n className={cn(\n \"flex min-w-0 flex-col gap-2 rounded-lg border border-border-subtle bg-surface-sunken p-3\",\n className,\n )}\n >\n <header className=\"flex flex-wrap items-start justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge size=\"sm\" tone=\"neutral\" className=\"font-mono\">\n {useCase.ref}\n </Badge>\n <h5 className=\"min-w-0 truncate text-sm font-semibold text-primary\">{useCase.title}</h5>\n </div>\n\n {/* Grouped as one unit so they wrap together rather than the implemented\n badge ever landing alone on its own line under the status badge. */}\n <div className=\"flex shrink-0 flex-wrap items-center gap-1.5\">\n {onStatusChange ? (\n <StatusSelect\n size=\"sm\"\n aria-label={strings.statusFor(useCase.ref)}\n value={useCase.status}\n options={statusOptions(strings.status)}\n onValueChange={onStatusChange}\n />\n ) : (\n <Badge size=\"sm\" tone={status.tone} icon={status.icon} dot={status.live} pulse={status.live}>\n {strings.status[useCase.status]}\n </Badge>\n )}\n {tracks.map((track) => {\n const built = useCase.built[track.id] === true;\n /* THE TRACK NAME IS ALWAYS ON THE CHIP, never just a tick. A bare\n checkmark makes the reader remember which axis this column was —\n and the entire reason tracks exist is that two of them disagree,\n so the one place the name must never be implied is here. */\n const label = strings.trackBuilt(track.name, built);\n const content = (\n <>\n <Icon name={built ? \"circle-check\" : \"circle-dashed\"} size=\"xs\" />\n <span aria-hidden=\"true\">{track.name}</span>\n <span className=\"sr-only\">{label}</span>\n </>\n );\n\n return onBuiltChange ? (\n <button\n key={track.id}\n type=\"button\"\n aria-pressed={built}\n aria-label={label}\n onClick={() => onBuiltChange(track.id, !built)}\n className=\"dx-tap rounded-full\"\n >\n <Badge size=\"sm\" tone={built ? \"success\" : \"neutral\"} className=\"gap-1\">\n <span aria-hidden=\"true\" className=\"flex items-center gap-1\">\n <Icon name={built ? \"circle-check\" : \"circle-dashed\"} size=\"xs\" />\n {track.name}\n </span>\n </Badge>\n </button>\n ) : (\n <Badge key={track.id} size=\"sm\" tone={built ? \"success\" : \"neutral\"} className=\"gap-1\">\n {content}\n </Badge>\n );\n })}\n </div>\n </header>\n\n <p className=\"text-sm text-secondary text-pretty\">{useCase.description}</p>\n\n {/* Only rendered when there is something to collapse — an Accordion\n wrapping empty content would still draw a trigger row for a section\n that can never say anything. */}\n {useCase.background && (\n <Accordion className=\"-mx-3 -mb-3 border-t border-border-subtle px-3\">\n <AccordionItem value={`${useCase.ref}-background`} title={strings.background} className=\"border-b-0\">\n <p className=\"text-secondary text-pretty\">{useCase.background}</p>\n </AccordionItem>\n </Accordion>\n )}\n </article>\n );\n}\n"],"names":["STATUS_BADGE","jsx","Icon","statusOptions","labels","value","UseCaseCard","useCase","tracks","onStatusChange","onBuiltChange","className","strings","useUiStrings","status","jsxs","cn","Badge","StatusSelect","track","built","label","content","Fragment","Accordion","AccordionItem"],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { jsxs as o, jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import { useState as b, useMemo as h } from "react";
|
|
3
|
+
import { Field as v } from "../Field.js";
|
|
4
|
+
import { Select as w, SelectItem as g } from "../Select.js";
|
|
5
|
+
import { cn as M } from "../../lib/cn.js";
|
|
6
|
+
import { trackIds as D, deriveRoadmapItemStatus as E } from "./derive.js";
|
|
7
|
+
import { RoadmapItemCard as G } from "./RoadmapItemCard.js";
|
|
8
|
+
import { useUiStrings as P } from "../../lib/i18n/provider.js";
|
|
9
|
+
const T = ["all", "planned", "in-progress", "shipped", "unresolved"], x = "all";
|
|
10
|
+
function V(s) {
|
|
11
|
+
const r = /* @__PURE__ */ new Map();
|
|
12
|
+
for (const t of s) {
|
|
13
|
+
const a = r.get(t.goalRef);
|
|
14
|
+
a ? a.push(t) : r.set(t.goalRef, [t]);
|
|
15
|
+
}
|
|
16
|
+
return r;
|
|
17
|
+
}
|
|
18
|
+
function _(s, r) {
|
|
19
|
+
const t = s.findIndex((a) => a.id === r);
|
|
20
|
+
if (t === -1) throw new Error(`No Phase with id "${r}" in the phases[] list.`);
|
|
21
|
+
return { phase: s[t], index: t };
|
|
22
|
+
}
|
|
23
|
+
function J({
|
|
24
|
+
domains: s,
|
|
25
|
+
phases: r,
|
|
26
|
+
items: t,
|
|
27
|
+
useCases: a,
|
|
28
|
+
tracks: p,
|
|
29
|
+
onUseCaseStatusChange: C,
|
|
30
|
+
onUseCaseBuiltChange: I,
|
|
31
|
+
className: F
|
|
32
|
+
}) {
|
|
33
|
+
const N = P(), n = N.useCaseLedger, [m, L] = b(x), [f, R] = b("all"), u = h(() => V(a), [a]), S = h(() => D(p), [p]), y = h(() => s.map((e, c) => ({ domain: e, domainIndex: c })).filter(({ domain: e }) => m === x || e.slug === m).map(({ domain: e, domainIndex: c }) => ({
|
|
34
|
+
domain: e,
|
|
35
|
+
domainIndex: c,
|
|
36
|
+
items: t.filter((d) => d.domainSlug === e.slug).filter((d) => {
|
|
37
|
+
if (f === "all") return !0;
|
|
38
|
+
const i = u.get(d.ref) ?? [];
|
|
39
|
+
return E(i, S) === f;
|
|
40
|
+
})
|
|
41
|
+
})).filter((e) => e.items.length > 0), [s, t, m, f, u, S]);
|
|
42
|
+
return /* @__PURE__ */ o("div", { className: M("flex min-w-0 flex-col gap-6", F), children: [
|
|
43
|
+
/* @__PURE__ */ o("header", { className: "flex flex-col gap-1", children: [
|
|
44
|
+
/* @__PURE__ */ l("h1", { className: "font-display text-lg font-semibold text-primary", children: n.title }),
|
|
45
|
+
/* @__PURE__ */ l("p", { className: "text-sm text-secondary", children: n.subtitle })
|
|
46
|
+
] }),
|
|
47
|
+
/* @__PURE__ */ o("div", { className: "flex flex-wrap items-end gap-3", children: [
|
|
48
|
+
/* @__PURE__ */ l(v, { label: n.domain, className: "w-48", children: /* @__PURE__ */ o(w, { value: m, onValueChange: (e) => L(String(e)), children: [
|
|
49
|
+
/* @__PURE__ */ l(g, { value: x, children: n.allDomains }),
|
|
50
|
+
s.map((e) => /* @__PURE__ */ l(g, { value: e.slug, children: e.name }, e.slug))
|
|
51
|
+
] }) }),
|
|
52
|
+
/* @__PURE__ */ l(v, { label: n.status, className: "w-48", children: /* @__PURE__ */ l(
|
|
53
|
+
w,
|
|
54
|
+
{
|
|
55
|
+
value: f,
|
|
56
|
+
onValueChange: (e) => R(e),
|
|
57
|
+
children: T.map((e) => /* @__PURE__ */ l(g, { value: e, children: e === "all" ? n.allStatuses : N.roadmap.itemStatus[e] }, e))
|
|
58
|
+
}
|
|
59
|
+
) })
|
|
60
|
+
] }),
|
|
61
|
+
y.length === 0 ? /* @__PURE__ */ l("p", { className: "text-sm text-tertiary", children: n.noMatch }) : /* @__PURE__ */ l("div", { className: "flex flex-col gap-8", children: y.map(({ domain: e, domainIndex: c, items: d }) => /* @__PURE__ */ o(
|
|
62
|
+
"section",
|
|
63
|
+
{
|
|
64
|
+
"aria-labelledby": `ledger-${e.slug}`,
|
|
65
|
+
className: "flex flex-col gap-3",
|
|
66
|
+
children: [
|
|
67
|
+
/* @__PURE__ */ o("div", { className: "flex flex-col gap-1", children: [
|
|
68
|
+
/* @__PURE__ */ l("h2", { id: `ledger-${e.slug}`, className: "font-display text-md font-semibold text-primary", children: e.name }),
|
|
69
|
+
e.description && /* @__PURE__ */ l("p", { className: "text-sm text-secondary", children: e.description })
|
|
70
|
+
] }),
|
|
71
|
+
/* @__PURE__ */ l("div", { className: "flex flex-col gap-3", children: d.map((i) => {
|
|
72
|
+
const { phase: U, index: A } = _(r, i.phaseId);
|
|
73
|
+
return /* @__PURE__ */ l(
|
|
74
|
+
G,
|
|
75
|
+
{
|
|
76
|
+
item: i,
|
|
77
|
+
domain: e,
|
|
78
|
+
domainIndex: c,
|
|
79
|
+
phase: U,
|
|
80
|
+
phaseIndex: A,
|
|
81
|
+
useCases: u.get(i.ref) ?? [],
|
|
82
|
+
tracks: p,
|
|
83
|
+
onUseCaseStatusChange: C,
|
|
84
|
+
onUseCaseBuiltChange: I
|
|
85
|
+
},
|
|
86
|
+
i.ref
|
|
87
|
+
);
|
|
88
|
+
}) })
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
e.slug
|
|
92
|
+
)) })
|
|
93
|
+
] });
|
|
94
|
+
}
|
|
95
|
+
export {
|
|
96
|
+
J as UseCaseLedgerPage
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=UseCaseLedgerPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UseCaseLedgerPage.js","sources":["../../../src/components/roadmap/UseCaseLedgerPage.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { Field } from \"../Field\";\nimport { Select, SelectItem } from \"../Select\";\nimport { cn } from \"../../lib/cn\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport { deriveRoadmapItemStatus, trackIds } from \"./derive\";\nimport { RoadmapItemCard } from \"./RoadmapItemCard\";\nimport type { Domain, Phase, RoadmapItem, RoadmapItemStatus, Track, UseCase, UseCaseStatus } from \"./types\";\n\ntype StatusFilter = \"all\" | RoadmapItemStatus;\n\nconst STATUS_FILTER_VALUES: StatusFilter[] = [\"all\", \"planned\", \"in-progress\", \"shipped\", \"unresolved\"];\n\n// I18N-ALLOW: sentinel filter value meaning every domain\nconst ALL_DOMAINS = \"all\";\n\n/** Buckets use cases by their parent item's `ref` once per render rather than\n once per item — the same shape `RoadmapSwimlaneBoard` uses, kept local here\n because a shared helper for a four-line loop would be more indirection than\n the duplication it removes. */\nfunction groupByGoalRef(useCases: UseCase[]): Map<string, UseCase[]> {\n const byGoal = new Map<string, UseCase[]>();\n for (const useCase of useCases) {\n const bucket = byGoal.get(useCase.goalRef);\n if (bucket) bucket.push(useCase);\n else byGoal.set(useCase.goalRef, [useCase]);\n }\n return byGoal;\n}\n\n/** Same reasoning as `groupByGoalRef` above: a shared helper for a five-line\n lookup would be more indirection than the duplication it removes. A\n `RoadmapItem.phaseId` is required — no \"no phase\" state — so a miss here\n is bad data, not an absent-value case to quietly default around. */\nfunction resolvePhase(phases: Phase[], phaseId: string): { phase: Phase; index: number } {\n const index = phases.findIndex((phase) => phase.id === phaseId);\n if (index === -1) throw new Error(`No Phase with id \"${phaseId}\" in the phases[] list.`);\n return { phase: phases[index], index };\n}\n\nexport interface UseCaseLedgerPageProps {\n domains: Domain[];\n phases: Phase[];\n items: RoadmapItem[];\n useCases: UseCase[];\n /** The consumer's build tracks, in display order — every use case reports\n against all of them, and an item is only \"shipped\" once each live case is\n verified and built on every one. Mount `TrackManager` beside this page\n to manage the list. */\n tracks: Track[];\n /** Forwarded to every `RoadmapItemCard` -> `UseCaseCard` on this page,\n making every use case's status genuinely user-settable here. Omitted\n keeps every status read-only, the same default `UseCaseCard` itself\n carries. */\n onUseCaseStatusChange?: (ref: string, status: UseCaseStatus) => void;\n /** Same forwarding, for the build chips: supply it and every track chip on\n this page becomes a toggle. Omitted keeps them read-only badges. */\n onUseCaseBuiltChange?: (ref: string, trackId: string, built: boolean) => void;\n className?: string;\n}\n\n/**\n * Dev-facing ledger — the operator's view of EVERYTHING, unlike `RoadmapPage`\n * which filters to `customerVisible` items only. No visibility filtering\n * happens here on purpose: this is the surface where an internal-only item, or\n * one still \"unresolved\" because a use case needs a human decision, is\n * supposed to be visible.\n */\nexport function UseCaseLedgerPage({\n domains,\n phases,\n items,\n useCases,\n tracks,\n onUseCaseStatusChange,\n onUseCaseBuiltChange,\n className,\n}: UseCaseLedgerPageProps) {\n const strings = useUiStrings();\n const ledger = strings.useCaseLedger;\n const [domainFilter, setDomainFilter] = useState<string>(ALL_DOMAINS);\n const [statusFilter, setStatusFilter] = useState<StatusFilter>(\"all\");\n\n const useCasesByGoal = useMemo(() => groupByGoalRef(useCases), [useCases]);\n const ids = useMemo(() => trackIds(tracks), [tracks]);\n\n const rows = useMemo(() => {\n return domains\n /* Indexed BEFORE the domain filter narrows the list, so `domainIndex`\n (and therefore the tone `RoadmapItemCard` cycles from it) reflects\n each domain's position in the FULL list — stable regardless of which\n filter is currently applied. */\n .map((domain, domainIndex) => ({ domain, domainIndex }))\n .filter(({ domain }) => domainFilter === ALL_DOMAINS || domain.slug === domainFilter)\n .map(({ domain, domainIndex }) => ({\n domain,\n domainIndex,\n items: items\n .filter((item) => item.domainSlug === domain.slug)\n .filter((item) => {\n if (statusFilter === \"all\") return true;\n const itemUseCases = useCasesByGoal.get(item.ref) ?? [];\n return deriveRoadmapItemStatus(itemUseCases, ids) === statusFilter;\n }),\n }))\n .filter((row) => row.items.length > 0);\n }, [domains, items, domainFilter, statusFilter, useCasesByGoal, ids]);\n\n return (\n <div className={cn(\"flex min-w-0 flex-col gap-6\", className)}>\n <header className=\"flex flex-col gap-1\">\n <h1 className=\"font-display text-lg font-semibold text-primary\">{ledger.title}</h1>\n <p className=\"text-sm text-secondary\">\n {ledger.subtitle}\n </p>\n </header>\n\n <div className=\"flex flex-wrap items-end gap-3\">\n <Field label={ledger.domain} className=\"w-48\">\n <Select value={domainFilter} onValueChange={(value) => setDomainFilter(String(value))}>\n <SelectItem value={ALL_DOMAINS}>{ledger.allDomains}</SelectItem>\n {domains.map((domain) => (\n <SelectItem key={domain.slug} value={domain.slug}>\n {domain.name}\n </SelectItem>\n ))}\n </Select>\n </Field>\n\n <Field label={ledger.status} className=\"w-48\">\n <Select\n value={statusFilter}\n onValueChange={(value) => setStatusFilter(value as StatusFilter)}\n >\n {STATUS_FILTER_VALUES.map((value) => (\n <SelectItem key={value} value={value}>\n {value === \"all\" ? ledger.allStatuses : strings.roadmap.itemStatus[value]}\n </SelectItem>\n ))}\n </Select>\n </Field>\n </div>\n\n {rows.length === 0 ? (\n <p className=\"text-sm text-tertiary\">{ledger.noMatch}</p>\n ) : (\n <div className=\"flex flex-col gap-8\">\n {rows.map(({ domain, domainIndex, items: domainItems }) => (\n <section\n key={domain.slug}\n aria-labelledby={`ledger-${domain.slug}`}\n className=\"flex flex-col gap-3\"\n >\n <div className=\"flex flex-col gap-1\">\n <h2 id={`ledger-${domain.slug}`} className=\"font-display text-md font-semibold text-primary\">\n {domain.name}\n </h2>\n {domain.description && <p className=\"text-sm text-secondary\">{domain.description}</p>}\n </div>\n\n <div className=\"flex flex-col gap-3\">\n {domainItems.map((item) => {\n const { phase, index: phaseIndex } = resolvePhase(phases, item.phaseId);\n return (\n <RoadmapItemCard\n key={item.ref}\n item={item}\n domain={domain}\n domainIndex={domainIndex}\n phase={phase}\n phaseIndex={phaseIndex}\n useCases={useCasesByGoal.get(item.ref) ?? []}\n tracks={tracks}\n onUseCaseStatusChange={onUseCaseStatusChange}\n onUseCaseBuiltChange={onUseCaseBuiltChange}\n />\n );\n })}\n </div>\n </section>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"names":["STATUS_FILTER_VALUES","ALL_DOMAINS","groupByGoalRef","useCases","byGoal","useCase","bucket","resolvePhase","phases","phaseId","index","phase","UseCaseLedgerPage","domains","items","tracks","onUseCaseStatusChange","onUseCaseBuiltChange","className","strings","useUiStrings","ledger","domainFilter","setDomainFilter","useState","statusFilter","setStatusFilter","useCasesByGoal","useMemo","ids","trackIds","rows","domain","domainIndex","item","itemUseCases","deriveRoadmapItemStatus","row","cn","jsxs","jsx","Field","Select","value","SelectItem","domainItems","phaseIndex","RoadmapItemCard"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chip-tones.js","sources":["../../../src/components/roadmap/chip-tones.ts"],"sourcesContent":["/* ----------------------------------------------------------------------------\n CHIP TONE CYCLING — deterministic by list position, not by name.\n\n Keying off a stable list INDEX (rather than hashing a slug/name) is what\n makes two items in the SAME position always agree across renders, with no\n memoization required and no chance of two differently-spelled names\n colliding on the same hash bucket. The caller computes the index once from\n the full list (`domains.findIndex(...)`, or simply a `.map()` index) and\n hands it down — see `RoadmapItemCard`'s `domainIndex` / `phaseIndex` props.\n\n `danger` IS DELIBERATELY EXCLUDED. It is already load-bearing for the\n semantic \"Rejected\" / \"Unresolved\" status Badges a few pixels away on the\n same card (`UseCaseCard`, `RoadmapItemCard`) — reusing it for \"this happens\n to be the Nth domain/phase in the list\" would read as an error where none\n exists.\n ---------------------------------------------------------------------------- */\n\nexport const CATEGORY_TONES = [\"accent\", \"brand\", \"info\", \"success\", \"warning\", \"neutral\"] as const;\n\nexport function toneForIndex(i: number): (typeof CATEGORY_TONES)[number] {\n return CATEGORY_TONES[i % CATEGORY_TONES.length];\n}\n"],"names":["CATEGORY_TONES","toneForIndex","i"],"mappings":"AAiBO,MAAMA,IAAiB,CAAC,UAAU,SAAS,QAAQ,WAAW,WAAW,SAAS;AAElF,SAASC,EAAaC,GAA4C;AACvE,SAAOF,EAAeE,IAAIF,EAAe,MAAM;AACjD;"}
|