@50arms/ui 0.0.0-stage → 35.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +193 -2
- package/dist/components/Accordion.js +68 -0
- package/dist/components/Accordion.js.map +1 -0
- package/dist/components/AgentWorkingSpinner.js +46 -0
- package/dist/components/AgentWorkingSpinner.js.map +1 -0
- package/dist/components/AppShell.js +228 -0
- package/dist/components/AppShell.js.map +1 -0
- package/dist/components/Attention.js +130 -0
- package/dist/components/Attention.js.map +1 -0
- package/dist/components/Avatar.js +99 -0
- package/dist/components/Avatar.js.map +1 -0
- package/dist/components/Badge.js +143 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Board.js +292 -0
- package/dist/components/Board.js.map +1 -0
- package/dist/components/Button.js +327 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Callout.js +106 -0
- package/dist/components/Callout.js.map +1 -0
- package/dist/components/Card.js +140 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/Choice.js +361 -0
- package/dist/components/Choice.js.map +1 -0
- package/dist/components/CodeEditor.js +384 -0
- package/dist/components/CodeEditor.js.map +1 -0
- package/dist/components/ColorPicker.js +174 -0
- package/dist/components/ColorPicker.js.map +1 -0
- package/dist/components/Combobox.js +212 -0
- package/dist/components/Combobox.js.map +1 -0
- package/dist/components/CommandPalette.js +163 -0
- package/dist/components/CommandPalette.js.map +1 -0
- package/dist/components/ConcentricRing.js +60 -0
- package/dist/components/ConcentricRing.js.map +1 -0
- package/dist/components/ConnectionCard.js +98 -0
- package/dist/components/ConnectionCard.js.map +1 -0
- package/dist/components/ContextItemRow.js +49 -0
- package/dist/components/ContextItemRow.js.map +1 -0
- package/dist/components/CopyValue.js +57 -0
- package/dist/components/CopyValue.js.map +1 -0
- package/dist/components/CountBadge.js +26 -0
- package/dist/components/CountBadge.js.map +1 -0
- package/dist/components/DateCalendar.js +156 -0
- package/dist/components/DateCalendar.js.map +1 -0
- package/dist/components/DateField.js +166 -0
- package/dist/components/DateField.js.map +1 -0
- package/dist/components/DatePicker.js +56 -0
- package/dist/components/DatePicker.js.map +1 -0
- package/dist/components/DateTimeText.js +19 -0
- package/dist/components/DateTimeText.js.map +1 -0
- package/dist/components/DescriptionList.js +25 -0
- package/dist/components/DescriptionList.js.map +1 -0
- package/dist/components/Dialog.js +332 -0
- package/dist/components/Dialog.js.map +1 -0
- package/dist/components/DragDrop.js +395 -0
- package/dist/components/DragDrop.js.map +1 -0
- package/dist/components/Drawer.js +100 -0
- package/dist/components/Drawer.js.map +1 -0
- package/dist/components/EditGutter.js +110 -0
- package/dist/components/EditGutter.js.map +1 -0
- package/dist/components/EmojiPicker.js +174 -0
- package/dist/components/EmojiPicker.js.map +1 -0
- package/dist/components/ErrorBoundary.js +47 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/Field.js +115 -0
- package/dist/components/Field.js.map +1 -0
- package/dist/components/FileUpload.js +128 -0
- package/dist/components/FileUpload.js.map +1 -0
- package/dist/components/FilterMenu.js +256 -0
- package/dist/components/FilterMenu.js.map +1 -0
- package/dist/components/GatesSection.js +79 -0
- package/dist/components/GatesSection.js.map +1 -0
- package/dist/components/Icon.js +50 -0
- package/dist/components/Icon.js.map +1 -0
- package/dist/components/IconButton.js +59 -0
- package/dist/components/IconButton.js.map +1 -0
- package/dist/components/IconStack.js +69 -0
- package/dist/components/IconStack.js.map +1 -0
- package/dist/components/ImageUploadField.js +146 -0
- package/dist/components/ImageUploadField.js.map +1 -0
- package/dist/components/InlineEdit.js +432 -0
- package/dist/components/InlineEdit.js.map +1 -0
- package/dist/components/InlineMarkdownEdit.js +184 -0
- package/dist/components/InlineMarkdownEdit.js.map +1 -0
- package/dist/components/Input.js +156 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/LegalDocument.js +155 -0
- package/dist/components/LegalDocument.js.map +1 -0
- package/dist/components/LineDiff.js +95 -0
- package/dist/components/LineDiff.js.map +1 -0
- package/dist/components/ListHeader.js +72 -0
- package/dist/components/ListHeader.js.map +1 -0
- package/dist/components/Loading.js +111 -0
- package/dist/components/Loading.js.map +1 -0
- package/dist/components/Markdown.js +28 -0
- package/dist/components/Markdown.js.map +1 -0
- package/dist/components/MarkdownEditor.js +467 -0
- package/dist/components/MarkdownEditor.js.map +1 -0
- package/dist/components/Menu.js +185 -0
- package/dist/components/Menu.js.map +1 -0
- package/dist/components/Navigation.js +87 -0
- package/dist/components/Navigation.js.map +1 -0
- package/dist/components/NumberInput.js +119 -0
- package/dist/components/NumberInput.js.map +1 -0
- package/dist/components/OTPInput.js +71 -0
- package/dist/components/OTPInput.js.map +1 -0
- package/dist/components/OrderedEntityManager.js +170 -0
- package/dist/components/OrderedEntityManager.js.map +1 -0
- package/dist/components/PagedWindowList.js +74 -0
- package/dist/components/PagedWindowList.js.map +1 -0
- package/dist/components/PaginationBar.js +95 -0
- package/dist/components/PaginationBar.js.map +1 -0
- package/dist/components/Panel.js +396 -0
- package/dist/components/Panel.js.map +1 -0
- package/dist/components/PasswordInput.js +32 -0
- package/dist/components/PasswordInput.js.map +1 -0
- package/dist/components/PasswordRequirements.js +25 -0
- package/dist/components/PasswordRequirements.js.map +1 -0
- package/dist/components/PatchDiff.js +96 -0
- package/dist/components/PatchDiff.js.map +1 -0
- package/dist/components/PendingVeil.js +18 -0
- package/dist/components/PendingVeil.js.map +1 -0
- package/dist/components/Popover.js +214 -0
- package/dist/components/Popover.js.map +1 -0
- package/dist/components/Progress.js +419 -0
- package/dist/components/Progress.js.map +1 -0
- package/dist/components/RatingScale.js +89 -0
- package/dist/components/RatingScale.js.map +1 -0
- package/dist/components/ReadMore.js +232 -0
- package/dist/components/ReadMore.js.map +1 -0
- package/dist/components/RecordCard.js +202 -0
- package/dist/components/RecordCard.js.map +1 -0
- package/dist/components/RelativeTime.js +29 -0
- package/dist/components/RelativeTime.js.map +1 -0
- package/dist/components/SandboxedFrame.js +135 -0
- package/dist/components/SandboxedFrame.js.map +1 -0
- package/dist/components/SearchInput.js +38 -0
- package/dist/components/SearchInput.js.map +1 -0
- package/dist/components/SecretField.js +228 -0
- package/dist/components/SecretField.js.map +1 -0
- package/dist/components/SectionNav.js +42 -0
- package/dist/components/SectionNav.js.map +1 -0
- package/dist/components/Select.js +172 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/SequenceDiagram.js +109 -0
- package/dist/components/SequenceDiagram.js.map +1 -0
- package/dist/components/SettingRow.js +124 -0
- package/dist/components/SettingRow.js.map +1 -0
- package/dist/components/SignOffRings.js +36 -0
- package/dist/components/SignOffRings.js.map +1 -0
- package/dist/components/Slider.js +353 -0
- package/dist/components/Slider.js.map +1 -0
- package/dist/components/SolutionChoice.js +89 -0
- package/dist/components/SolutionChoice.js.map +1 -0
- package/dist/components/SortMenu.js +75 -0
- package/dist/components/SortMenu.js.map +1 -0
- package/dist/components/Spinner.js +42 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/Stat.js +148 -0
- package/dist/components/Stat.js.map +1 -0
- package/dist/components/StatusSelect.js +119 -0
- package/dist/components/StatusSelect.js.map +1 -0
- package/dist/components/Surface.js +210 -0
- package/dist/components/Surface.js.map +1 -0
- package/dist/components/Table.js +300 -0
- package/dist/components/Table.js.map +1 -0
- package/dist/components/Tabs.js +288 -0
- package/dist/components/Tabs.js.map +1 -0
- package/dist/components/ThemeMenu.js +198 -0
- package/dist/components/ThemeMenu.js.map +1 -0
- package/dist/components/Toast.js +217 -0
- package/dist/components/Toast.js.map +1 -0
- package/dist/components/Toggle.js +147 -0
- package/dist/components/Toggle.js.map +1 -0
- package/dist/components/ToggleMatrix.js +157 -0
- package/dist/components/ToggleMatrix.js.map +1 -0
- package/dist/components/Tree.js +125 -0
- package/dist/components/Tree.js.map +1 -0
- package/dist/components/TriStateSwitch.js +111 -0
- package/dist/components/TriStateSwitch.js.map +1 -0
- package/dist/components/VideoPlayer.js +64 -0
- package/dist/components/VideoPlayer.js.map +1 -0
- package/dist/components/auth/AcceptInvitationCard.js +110 -0
- package/dist/components/auth/AcceptInvitationCard.js.map +1 -0
- package/dist/components/auth/AuthLayout.js +18 -0
- package/dist/components/auth/AuthLayout.js.map +1 -0
- package/dist/components/auth/ForgotPasswordForm.js +44 -0
- package/dist/components/auth/ForgotPasswordForm.js.map +1 -0
- package/dist/components/auth/LoginForm.js +76 -0
- package/dist/components/auth/LoginForm.js.map +1 -0
- package/dist/components/auth/ResetPasswordForm.js +69 -0
- package/dist/components/auth/ResetPasswordForm.js.map +1 -0
- package/dist/components/auth/SignInProviders.js +45 -0
- package/dist/components/auth/SignInProviders.js.map +1 -0
- package/dist/components/auth/SignupCard.js +204 -0
- package/dist/components/auth/SignupCard.js.map +1 -0
- package/dist/components/auth/TermsAcceptance.js +43 -0
- package/dist/components/auth/TermsAcceptance.js.map +1 -0
- package/dist/components/board/context.js +32 -0
- package/dist/components/board/context.js.map +1 -0
- package/dist/components/board/recipe.js +94 -0
- package/dist/components/board/recipe.js.map +1 -0
- package/dist/components/calendar/CalendarMonth.js +299 -0
- package/dist/components/calendar/CalendarMonth.js.map +1 -0
- package/dist/components/calendar/CalendarTimeGrid.js +430 -0
- package/dist/components/calendar/CalendarTimeGrid.js.map +1 -0
- package/dist/components/calendar/EventActions.js +101 -0
- package/dist/components/calendar/EventActions.js.map +1 -0
- package/dist/components/calendar/format.js +73 -0
- package/dist/components/calendar/format.js.map +1 -0
- package/dist/components/calendar/palette.js +31 -0
- package/dist/components/calendar/palette.js.map +1 -0
- package/dist/components/calendar/use-calendar-drag.js +149 -0
- package/dist/components/calendar/use-calendar-drag.js.map +1 -0
- package/dist/components/calendar/use-event-keyboard.js +87 -0
- package/dist/components/calendar/use-event-keyboard.js.map +1 -0
- package/dist/components/calendar/use-grid-navigation.js +79 -0
- package/dist/components/calendar/use-grid-navigation.js.map +1 -0
- package/dist/components/calendar/use-now.js +27 -0
- package/dist/components/calendar/use-now.js.map +1 -0
- package/dist/components/card-face/AcRingGlyph.js +39 -0
- package/dist/components/card-face/AcRingGlyph.js.map +1 -0
- package/dist/components/card-face/BoardCardAgentSlot.js +17 -0
- package/dist/components/card-face/BoardCardAgentSlot.js.map +1 -0
- package/dist/components/card-face/CardFace.js +109 -0
- package/dist/components/card-face/CardFace.js.map +1 -0
- package/dist/components/card-face/CardTypeBadge.js +17 -0
- package/dist/components/card-face/CardTypeBadge.js.map +1 -0
- package/dist/components/card-face/EffortBadge.js +11 -0
- package/dist/components/card-face/EffortBadge.js.map +1 -0
- package/dist/components/card-face/GateRingGlyph.js +31 -0
- package/dist/components/card-face/GateRingGlyph.js.map +1 -0
- package/dist/components/card-face/OverflowRow.js +70 -0
- package/dist/components/card-face/OverflowRow.js.map +1 -0
- package/dist/components/card-face/TapTip.js +32 -0
- package/dist/components/card-face/TapTip.js.map +1 -0
- package/dist/components/card-face/hit-area.js +6 -0
- package/dist/components/card-face/hit-area.js.map +1 -0
- package/dist/components/card-face/vocabulary.js +102 -0
- package/dist/components/card-face/vocabulary.js.map +1 -0
- package/dist/components/chart/BarList.js +78 -0
- package/dist/components/chart/BarList.js.map +1 -0
- package/dist/components/chart/LineChart.js +310 -0
- package/dist/components/chart/LineChart.js.map +1 -0
- package/dist/components/chart/ShareBar.js +141 -0
- package/dist/components/chart/ShareBar.js.map +1 -0
- package/dist/components/chart/TimeSeriesChart.js +305 -0
- package/dist/components/chart/TimeSeriesChart.js.map +1 -0
- package/dist/components/chart/label-metrics.js +17 -0
- package/dist/components/chart/label-metrics.js.map +1 -0
- package/dist/components/chart/line-chart-axis.js +38 -0
- package/dist/components/chart/line-chart-axis.js.map +1 -0
- package/dist/components/chart/line-chart-scale.js +132 -0
- package/dist/components/chart/line-chart-scale.js.map +1 -0
- package/dist/components/chart/line-series-style.js +22 -0
- package/dist/components/chart/line-series-style.js.map +1 -0
- package/dist/components/chart/share-bar-labels.js +14 -0
- package/dist/components/chart/share-bar-labels.js.map +1 -0
- package/dist/components/chart/shared.js +157 -0
- package/dist/components/chart/shared.js.map +1 -0
- package/dist/components/chart/time-series-scale.js +51 -0
- package/dist/components/chart/time-series-scale.js.map +1 -0
- package/dist/components/chat/Attachment.js +316 -0
- package/dist/components/chat/Attachment.js.map +1 -0
- package/dist/components/chat/Chat.js +171 -0
- package/dist/components/chat/Chat.js.map +1 -0
- package/dist/components/chat/Composer.js +274 -0
- package/dist/components/chat/Composer.js.map +1 -0
- package/dist/components/chat/ContextMeter.js +202 -0
- package/dist/components/chat/ContextMeter.js.map +1 -0
- package/dist/components/chat/EffortControl.js +116 -0
- package/dist/components/chat/EffortControl.js.map +1 -0
- package/dist/components/chat/FileCover.js +78 -0
- package/dist/components/chat/FileCover.js.map +1 -0
- package/dist/components/chat/Message.js +356 -0
- package/dist/components/chat/Message.js.map +1 -0
- package/dist/components/chat/MessageScroller.js +104 -0
- package/dist/components/chat/MessageScroller.js.map +1 -0
- package/dist/components/chat/ModelSelector.js +156 -0
- package/dist/components/chat/ModelSelector.js.map +1 -0
- package/dist/components/chat/StreamingMarkdown.js +42 -0
- package/dist/components/chat/StreamingMarkdown.js.map +1 -0
- package/dist/components/chat/download-file.js +9 -0
- package/dist/components/chat/download-file.js.map +1 -0
- package/dist/components/chat/file-icon.js +39 -0
- package/dist/components/chat/file-icon.js.map +1 -0
- package/dist/components/checklist/StatusChecklist.js +103 -0
- package/dist/components/checklist/StatusChecklist.js.map +1 -0
- package/dist/components/checklist/tally.js +29 -0
- package/dist/components/checklist/tally.js.map +1 -0
- package/dist/components/code-editor/context.js +13 -0
- package/dist/components/code-editor/context.js.map +1 -0
- package/dist/components/code-editor/editing.js +93 -0
- package/dist/components/code-editor/editing.js.map +1 -0
- package/dist/components/code-editor/highlight.js +27 -0
- package/dist/components/code-editor/highlight.js.map +1 -0
- package/dist/components/code-editor/recipe.js +75 -0
- package/dist/components/code-editor/recipe.js.map +1 -0
- package/dist/components/date-timeline/DateTimeline.js +358 -0
- package/dist/components/date-timeline/DateTimeline.js.map +1 -0
- package/dist/components/date-timeline/TimelineRow.js +100 -0
- package/dist/components/date-timeline/TimelineRow.js.map +1 -0
- package/dist/components/date-timeline/useBarDrag.js +44 -0
- package/dist/components/date-timeline/useBarDrag.js.map +1 -0
- package/dist/components/date-timeline/useMarkerDrag.js +40 -0
- package/dist/components/date-timeline/useMarkerDrag.js.map +1 -0
- package/dist/components/date-timeline/useTimelineZoom.js +44 -0
- package/dist/components/date-timeline/useTimelineZoom.js.map +1 -0
- package/dist/components/drag-drop/context.js +37 -0
- package/dist/components/drag-drop/context.js.map +1 -0
- package/dist/components/drag-drop/recipe.js +270 -0
- package/dist/components/drag-drop/recipe.js.map +1 -0
- package/dist/components/drag-drop/shift.js +157 -0
- package/dist/components/drag-drop/shift.js.map +1 -0
- package/dist/components/edit/activation.js +10 -0
- package/dist/components/edit/activation.js.map +1 -0
- package/dist/components/edit/outcome.js +47 -0
- package/dist/components/edit/outcome.js.map +1 -0
- package/dist/components/edit/use-edit-session.js +146 -0
- package/dist/components/edit/use-edit-session.js.map +1 -0
- package/dist/components/file-viewer/FileViewer.js +97 -0
- package/dist/components/file-viewer/FileViewer.js.map +1 -0
- package/dist/components/file-viewer/PageNumberJumpField.js +47 -0
- package/dist/components/file-viewer/PageNumberJumpField.js.map +1 -0
- package/dist/components/file-viewer/ViewerControls.js +122 -0
- package/dist/components/file-viewer/ViewerControls.js.map +1 -0
- package/dist/components/file-viewer/ViewerRail.js +57 -0
- package/dist/components/file-viewer/ViewerRail.js.map +1 -0
- package/dist/components/file-viewer/ViewerStage.js +112 -0
- package/dist/components/file-viewer/ViewerStage.js.map +1 -0
- package/dist/components/file-viewer/frames.js +37 -0
- package/dist/components/file-viewer/frames.js.map +1 -0
- package/dist/components/file-viewer/use-frame-cursor.js +32 -0
- package/dist/components/file-viewer/use-frame-cursor.js.map +1 -0
- package/dist/components/file-viewer/use-viewer-keys.js +50 -0
- package/dist/components/file-viewer/use-viewer-keys.js.map +1 -0
- package/dist/components/file-viewer/use-viewer-zoom.js +68 -0
- package/dist/components/file-viewer/use-viewer-zoom.js.map +1 -0
- package/dist/components/focus-web/FocusWeb.js +322 -0
- package/dist/components/focus-web/FocusWeb.js.map +1 -0
- package/dist/components/focus-web/layout.js +34 -0
- package/dist/components/focus-web/layout.js.map +1 -0
- package/dist/components/graph-explorer/GraphExplorer.js +441 -0
- package/dist/components/graph-explorer/GraphExplorer.js.map +1 -0
- package/dist/components/graph-explorer/camera-math.js +102 -0
- package/dist/components/graph-explorer/camera-math.js.map +1 -0
- package/dist/components/graph-explorer/tree-layout.js +103 -0
- package/dist/components/graph-explorer/tree-layout.js.map +1 -0
- package/dist/components/graph-explorer/use-camera.js +82 -0
- package/dist/components/graph-explorer/use-camera.js.map +1 -0
- package/dist/components/graph-explorer/viewport-gesture.js +107 -0
- package/dist/components/graph-explorer/viewport-gesture.js.map +1 -0
- package/dist/components/kanban/KanbanBoard.js +219 -0
- package/dist/components/kanban/KanbanBoard.js.map +1 -0
- package/dist/components/kanban/recipe.js +144 -0
- package/dist/components/kanban/recipe.js.map +1 -0
- package/dist/components/markdown/Affordances.js +398 -0
- package/dist/components/markdown/Affordances.js.map +1 -0
- package/dist/components/markdown/AttachmentStrip.js +128 -0
- package/dist/components/markdown/AttachmentStrip.js.map +1 -0
- package/dist/components/markdown/ImageUpload.js +45 -0
- package/dist/components/markdown/ImageUpload.js.map +1 -0
- package/dist/components/media-error.js +7 -0
- package/dist/components/media-error.js.map +1 -0
- package/dist/components/nav-sections.js +61 -0
- package/dist/components/nav-sections.js.map +1 -0
- package/dist/components/node-canvas/NodeCanvas.js +384 -0
- package/dist/components/node-canvas/NodeCanvas.js.map +1 -0
- package/dist/components/node-canvas/layout.js +237 -0
- package/dist/components/node-canvas/layout.js.map +1 -0
- package/dist/components/node-canvas/use-canvas-gestures.js +143 -0
- package/dist/components/node-canvas/use-canvas-gestures.js.map +1 -0
- package/dist/components/openapi/OpenApiViewer.js +137 -0
- package/dist/components/openapi/OpenApiViewer.js.map +1 -0
- package/dist/components/openapi/OperationCard.js +145 -0
- package/dist/components/openapi/OperationCard.js.map +1 -0
- package/dist/components/openapi/SchemaView.js +68 -0
- package/dist/components/openapi/SchemaView.js.map +1 -0
- package/dist/components/openapi/resolve.js +102 -0
- package/dist/components/openapi/resolve.js.map +1 -0
- package/dist/components/openapi/types.js +5 -0
- package/dist/components/openapi/types.js.map +1 -0
- package/dist/components/overlay-shell.js +29 -0
- package/dist/components/overlay-shell.js.map +1 -0
- package/dist/components/overlay-stack.js +27 -0
- package/dist/components/overlay-stack.js.map +1 -0
- package/dist/components/paged-window/PageBlock.js +50 -0
- package/dist/components/paged-window/PageBlock.js.map +1 -0
- package/dist/components/provenance/ConfidenceBar.js +60 -0
- package/dist/components/provenance/ConfidenceBar.js.map +1 -0
- package/dist/components/provenance/ConfidenceMeter.js +36 -0
- package/dist/components/provenance/ConfidenceMeter.js.map +1 -0
- package/dist/components/provenance/ConfidenceReadout.js +31 -0
- package/dist/components/provenance/ConfidenceReadout.js.map +1 -0
- package/dist/components/provenance/ProvenanceBadge.js +44 -0
- package/dist/components/provenance/ProvenanceBadge.js.map +1 -0
- package/dist/components/provenance/ProvenanceDetail.js +114 -0
- package/dist/components/provenance/ProvenanceDetail.js.map +1 -0
- package/dist/components/provenance/ProvenanceDisclosure.js +111 -0
- package/dist/components/provenance/ProvenanceDisclosure.js.map +1 -0
- package/dist/components/provenance/absence.js +31 -0
- package/dist/components/provenance/absence.js.map +1 -0
- package/dist/components/provenance/types.js +30 -0
- package/dist/components/provenance/types.js.map +1 -0
- package/dist/components/rbac/AccessRequestPanel.js +153 -0
- package/dist/components/rbac/AccessRequestPanel.js.map +1 -0
- package/dist/components/rbac/AccountMenu.js +118 -0
- package/dist/components/rbac/AccountMenu.js.map +1 -0
- package/dist/components/rbac/AgentKeysList.js +20 -0
- package/dist/components/rbac/AgentKeysList.js.map +1 -0
- package/dist/components/rbac/ApiKeysPanel.js +172 -0
- package/dist/components/rbac/ApiKeysPanel.js.map +1 -0
- package/dist/components/rbac/ApiKeysTable.js +167 -0
- package/dist/components/rbac/ApiKeysTable.js.map +1 -0
- package/dist/components/rbac/Brand.js +13 -0
- package/dist/components/rbac/Brand.js.map +1 -0
- package/dist/components/rbac/Can.js +18 -0
- package/dist/components/rbac/Can.js.map +1 -0
- package/dist/components/rbac/ChangePasswordForm.js +73 -0
- package/dist/components/rbac/ChangePasswordForm.js.map +1 -0
- package/dist/components/rbac/DangerZone.js +27 -0
- package/dist/components/rbac/DangerZone.js.map +1 -0
- package/dist/components/rbac/DevToolsPopover.js +140 -0
- package/dist/components/rbac/DevToolsPopover.js.map +1 -0
- package/dist/components/rbac/EndedLine.js +24 -0
- package/dist/components/rbac/EndedLine.js.map +1 -0
- package/dist/components/rbac/InvitationsList.js +148 -0
- package/dist/components/rbac/InvitationsList.js.map +1 -0
- package/dist/components/rbac/InviteMembersDialog.js +97 -0
- package/dist/components/rbac/InviteMembersDialog.js.map +1 -0
- package/dist/components/rbac/MembersPanel.js +138 -0
- package/dist/components/rbac/MembersPanel.js.map +1 -0
- package/dist/components/rbac/PermissionRequestPanel.js +141 -0
- package/dist/components/rbac/PermissionRequestPanel.js.map +1 -0
- package/dist/components/rbac/ProfileForm.js +86 -0
- package/dist/components/rbac/ProfileForm.js.map +1 -0
- package/dist/components/rbac/ProfilePage.js +58 -0
- package/dist/components/rbac/ProfilePage.js.map +1 -0
- package/dist/components/rbac/RBACProvider.js +82 -0
- package/dist/components/rbac/RBACProvider.js.map +1 -0
- package/dist/components/rbac/RoleEditorDialog.js +90 -0
- package/dist/components/rbac/RoleEditorDialog.js.map +1 -0
- package/dist/components/rbac/RoleKeyPicker.js +77 -0
- package/dist/components/rbac/RoleKeyPicker.js.map +1 -0
- package/dist/components/rbac/RolePermissionMatrix.js +37 -0
- package/dist/components/rbac/RolePermissionMatrix.js.map +1 -0
- package/dist/components/rbac/RolesPermissionsPage.js +142 -0
- package/dist/components/rbac/RolesPermissionsPage.js.map +1 -0
- package/dist/components/rbac/SessionsList.js +146 -0
- package/dist/components/rbac/SessionsList.js.map +1 -0
- package/dist/components/rbac/TeamSettingsForm.js +69 -0
- package/dist/components/rbac/TeamSettingsForm.js.map +1 -0
- package/dist/components/rbac/TeamSwitcher.js +66 -0
- package/dist/components/rbac/TeamSwitcher.js.map +1 -0
- package/dist/components/rbac/approvalPanelParts.js +130 -0
- package/dist/components/rbac/approvalPanelParts.js.map +1 -0
- package/dist/components/rbac/permissionSections.js +8 -0
- package/dist/components/rbac/permissionSections.js.map +1 -0
- package/dist/components/rbac/stagedForm.js +42 -0
- package/dist/components/rbac/stagedForm.js.map +1 -0
- package/dist/components/rbac/useStagedImage.js +21 -0
- package/dist/components/rbac/useStagedImage.js.map +1 -0
- package/dist/components/roadmap/PhaseManager.js +48 -0
- package/dist/components/roadmap/PhaseManager.js.map +1 -0
- package/dist/components/roadmap/RoadmapItemCard.js +96 -0
- package/dist/components/roadmap/RoadmapItemCard.js.map +1 -0
- package/dist/components/roadmap/RoadmapPage.js +34 -0
- package/dist/components/roadmap/RoadmapPage.js.map +1 -0
- package/dist/components/roadmap/RoadmapSwimlaneBoard.js +91 -0
- package/dist/components/roadmap/RoadmapSwimlaneBoard.js.map +1 -0
- package/dist/components/roadmap/TrackManager.js +58 -0
- package/dist/components/roadmap/TrackManager.js.map +1 -0
- package/dist/components/roadmap/UseCaseCard.js +93 -0
- package/dist/components/roadmap/UseCaseCard.js.map +1 -0
- package/dist/components/roadmap/UseCaseLedgerPage.js +98 -0
- package/dist/components/roadmap/UseCaseLedgerPage.js.map +1 -0
- package/dist/components/roadmap/chip-tones.js +9 -0
- package/dist/components/roadmap/chip-tones.js.map +1 -0
- package/dist/components/roadmap/derive.js +28 -0
- package/dist/components/roadmap/derive.js.map +1 -0
- package/dist/components/stepper/Stepper.js +276 -0
- package/dist/components/stepper/Stepper.js.map +1 -0
- package/dist/components/stepper/derive.js +53 -0
- package/dist/components/stepper/derive.js.map +1 -0
- package/dist/confidence.css +222 -0
- package/dist/fonts/bricolage-grotesque-0.woff2 +0 -0
- package/dist/fonts/bricolage-grotesque-1.woff2 +0 -0
- package/dist/fonts/bricolage-grotesque-2.woff2 +0 -0
- package/dist/fonts/figtree-0.woff2 +0 -0
- package/dist/fonts/figtree-1.woff2 +0 -0
- package/dist/fonts/figtree-2.woff2 +0 -0
- package/dist/fonts/figtree-3.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-0.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-1.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-10.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-11.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-2.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-3.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-4.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-5.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-6.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-7.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-8.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-9.woff2 +0 -0
- package/dist/fonts.css +187 -0
- package/dist/icons/data.js +233 -0
- package/dist/icons/data.js.map +1 -0
- package/dist/index.js +942 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/attention.js +75 -0
- package/dist/lib/attention.js.map +1 -0
- package/dist/lib/board/anchor.js +14 -0
- package/dist/lib/board/anchor.js.map +1 -0
- package/dist/lib/board/model.js +41 -0
- package/dist/lib/board/model.js.map +1 -0
- package/dist/lib/board/move.js +161 -0
- package/dist/lib/board/move.js.map +1 -0
- package/dist/lib/board/position.js +11 -0
- package/dist/lib/board/position.js.map +1 -0
- package/dist/lib/board/rejection.js +22 -0
- package/dist/lib/board/rejection.js.map +1 -0
- package/dist/lib/board/use-board.js +43 -0
- package/dist/lib/board/use-board.js.map +1 -0
- package/dist/lib/calendar/band-packer.js +44 -0
- package/dist/lib/calendar/band-packer.js.map +1 -0
- package/dist/lib/calendar/drag.js +74 -0
- package/dist/lib/calendar/drag.js.map +1 -0
- package/dist/lib/calendar/lane-packer.js +67 -0
- package/dist/lib/calendar/lane-packer.js.map +1 -0
- package/dist/lib/calendar/segments.js +82 -0
- package/dist/lib/calendar/segments.js.map +1 -0
- package/dist/lib/calendar/types.js +7 -0
- package/dist/lib/calendar/types.js.map +1 -0
- package/dist/lib/chart-palette.js +27 -0
- package/dist/lib/chart-palette.js.map +1 -0
- package/dist/lib/clipboard.js +30 -0
- package/dist/lib/clipboard.js.map +1 -0
- package/dist/lib/cn.js +9 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/color.js +24 -0
- package/dist/lib/color.js.map +1 -0
- package/dist/lib/component-guidance.js +297 -0
- package/dist/lib/component-guidance.js.map +1 -0
- package/dist/lib/confidence.js +22 -0
- package/dist/lib/confidence.js.map +1 -0
- package/dist/lib/date-timeline/scale.js +197 -0
- package/dist/lib/date-timeline/scale.js.map +1 -0
- package/dist/lib/design-frame/document.js +44 -0
- package/dist/lib/design-frame/document.js.map +1 -0
- package/dist/lib/design-frame/mini-app-script.js +107 -0
- package/dist/lib/design-frame/mini-app-script.js.map +1 -0
- package/dist/lib/design-frame/mini-app.js +12 -0
- package/dist/lib/design-frame/mini-app.js.map +1 -0
- package/dist/lib/design-frame/protocol.js +46 -0
- package/dist/lib/design-frame/protocol.js.map +1 -0
- package/dist/lib/dev-warn.js +17 -0
- package/dist/lib/dev-warn.js.map +1 -0
- package/dist/lib/dnd/announce.js +120 -0
- package/dist/lib/dnd/announce.js.map +1 -0
- package/dist/lib/dnd/autoscroll.js +123 -0
- package/dist/lib/dnd/autoscroll.js.map +1 -0
- package/dist/lib/dnd/cross-drop.js +11 -0
- package/dist/lib/dnd/cross-drop.js.map +1 -0
- package/dist/lib/dnd/geometry.js +99 -0
- package/dist/lib/dnd/geometry.js.map +1 -0
- package/dist/lib/dnd/sensors/gesture.js +86 -0
- package/dist/lib/dnd/sensors/gesture.js.map +1 -0
- package/dist/lib/dnd/sensors/keyboard.js +47 -0
- package/dist/lib/dnd/sensors/keyboard.js.map +1 -0
- package/dist/lib/dnd/sensors/pointer.js +32 -0
- package/dist/lib/dnd/sensors/pointer.js.map +1 -0
- package/dist/lib/dnd/session.js +256 -0
- package/dist/lib/dnd/session.js.map +1 -0
- package/dist/lib/dnd/use-drag.js +90 -0
- package/dist/lib/dnd/use-drag.js.map +1 -0
- package/dist/lib/dom/scroll-ancestor.js +18 -0
- package/dist/lib/dom/scroll-ancestor.js.map +1 -0
- package/dist/lib/format.js +23 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/group-in-order.js +13 -0
- package/dist/lib/group-in-order.js.map +1 -0
- package/dist/lib/header-fold.js +11 -0
- package/dist/lib/header-fold.js.map +1 -0
- package/dist/lib/i18n/areas/auth-provenance-flows.js +156 -0
- package/dist/lib/i18n/areas/auth-provenance-flows.js.map +1 -0
- package/dist/lib/i18n/areas/board.js +35 -0
- package/dist/lib/i18n/areas/board.js.map +1 -0
- package/dist/lib/i18n/areas/card-face.js +10 -0
- package/dist/lib/i18n/areas/card-face.js.map +1 -0
- package/dist/lib/i18n/areas/chat-chart.js +118 -0
- package/dist/lib/i18n/areas/chat-chart.js.map +1 -0
- package/dist/lib/i18n/areas/code-editor.js +24 -0
- package/dist/lib/i18n/areas/code-editor.js.map +1 -0
- package/dist/lib/i18n/areas/date-timeline.js +21 -0
- package/dist/lib/i18n/areas/date-timeline.js.map +1 -0
- package/dist/lib/i18n/areas/dates.js +71 -0
- package/dist/lib/i18n/areas/dates.js.map +1 -0
- package/dist/lib/i18n/areas/docs-views.js +183 -0
- package/dist/lib/i18n/areas/docs-views.js.map +1 -0
- package/dist/lib/i18n/areas/feedback.js +75 -0
- package/dist/lib/i18n/areas/feedback.js.map +1 -0
- package/dist/lib/i18n/areas/formats.js +24 -0
- package/dist/lib/i18n/areas/formats.js.map +1 -0
- package/dist/lib/i18n/areas/forms.js +110 -0
- package/dist/lib/i18n/areas/forms.js.map +1 -0
- package/dist/lib/i18n/areas/keys.js +25 -0
- package/dist/lib/i18n/areas/keys.js.map +1 -0
- package/dist/lib/i18n/areas/markdown.js +136 -0
- package/dist/lib/i18n/areas/markdown.js.map +1 -0
- package/dist/lib/i18n/areas/move-rejected.js +14 -0
- package/dist/lib/i18n/areas/move-rejected.js.map +1 -0
- package/dist/lib/i18n/areas/navigation.js +104 -0
- package/dist/lib/i18n/areas/navigation.js.map +1 -0
- package/dist/lib/i18n/areas/rbac.js +331 -0
- package/dist/lib/i18n/areas/rbac.js.map +1 -0
- package/dist/lib/i18n/emphasis.js +6 -0
- package/dist/lib/i18n/emphasis.js.map +1 -0
- package/dist/lib/i18n/number-format.js +9 -0
- package/dist/lib/i18n/number-format.js.map +1 -0
- package/dist/lib/i18n/plural.js +9 -0
- package/dist/lib/i18n/plural.js.map +1 -0
- package/dist/lib/i18n/provider.js +27 -0
- package/dist/lib/i18n/provider.js.map +1 -0
- package/dist/lib/i18n/strings.js +38 -0
- package/dist/lib/i18n/strings.js.map +1 -0
- package/dist/lib/icons.js +17 -0
- package/dist/lib/icons.js.map +1 -0
- package/dist/lib/interactive-target.js +9 -0
- package/dist/lib/interactive-target.js.map +1 -0
- package/dist/lib/intl-cache.js +69 -0
- package/dist/lib/intl-cache.js.map +1 -0
- package/dist/lib/legal-document.js +37 -0
- package/dist/lib/legal-document.js.map +1 -0
- package/dist/lib/line-diff-model.js +51 -0
- package/dist/lib/line-diff-model.js.map +1 -0
- package/dist/lib/markdown/attachments.js +71 -0
- package/dist/lib/markdown/attachments.js.map +1 -0
- package/dist/lib/markdown/caret-map.js +153 -0
- package/dist/lib/markdown/caret-map.js.map +1 -0
- package/dist/lib/markdown/caret.js +35 -0
- package/dist/lib/markdown/caret.js.map +1 -0
- package/dist/lib/markdown/commands.js +443 -0
- package/dist/lib/markdown/commands.js.map +1 -0
- package/dist/lib/markdown/convert.js +153 -0
- package/dist/lib/markdown/convert.js.map +1 -0
- package/dist/lib/markdown/dom.js +89 -0
- package/dist/lib/markdown/dom.js.map +1 -0
- package/dist/lib/markdown/edit.js +92 -0
- package/dist/lib/markdown/edit.js.map +1 -0
- package/dist/lib/markdown/history.js +79 -0
- package/dist/lib/markdown/history.js.map +1 -0
- package/dist/lib/markdown/hotkeys.js +63 -0
- package/dist/lib/markdown/hotkeys.js.map +1 -0
- package/dist/lib/markdown/image-pipeline.js +236 -0
- package/dist/lib/markdown/image-pipeline.js.map +1 -0
- package/dist/lib/markdown/images.js +85 -0
- package/dist/lib/markdown/images.js.map +1 -0
- package/dist/lib/markdown/input.js +210 -0
- package/dist/lib/markdown/input.js.map +1 -0
- package/dist/lib/markdown/keys.js +37 -0
- package/dist/lib/markdown/keys.js.map +1 -0
- package/dist/lib/markdown/paste.js +180 -0
- package/dist/lib/markdown/paste.js.map +1 -0
- package/dist/lib/markdown/position.js +111 -0
- package/dist/lib/markdown/position.js.map +1 -0
- package/dist/lib/markdown/project.js +108 -0
- package/dist/lib/markdown/project.js.map +1 -0
- package/dist/lib/markdown/reconcile.js +127 -0
- package/dist/lib/markdown/reconcile.js.map +1 -0
- package/dist/lib/markdown/surface.js +373 -0
- package/dist/lib/markdown/surface.js.map +1 -0
- package/dist/lib/motion.js +22 -0
- package/dist/lib/motion.js.map +1 -0
- package/dist/lib/pad.js +7 -0
- package/dist/lib/pad.js.map +1 -0
- package/dist/lib/paged-window/layout.js +15 -0
- package/dist/lib/paged-window/layout.js.map +1 -0
- package/dist/lib/paged-window/list-owner.js +21 -0
- package/dist/lib/paged-window/list-owner.js.map +1 -0
- package/dist/lib/paged-window/records-binding.js +239 -0
- package/dist/lib/paged-window/records-binding.js.map +1 -0
- package/dist/lib/paged-window/store.js +562 -0
- package/dist/lib/paged-window/store.js.map +1 -0
- package/dist/lib/paged-window/use-measured-pitch.js +38 -0
- package/dist/lib/paged-window/use-measured-pitch.js.map +1 -0
- package/dist/lib/paged-window/use-page-visibility.js +36 -0
- package/dist/lib/paged-window/use-page-visibility.js.map +1 -0
- package/dist/lib/paged-window/use-paged-window.js +43 -0
- package/dist/lib/paged-window/use-paged-window.js.map +1 -0
- package/dist/lib/paged-window/use-scroll-root.js +12 -0
- package/dist/lib/paged-window/use-scroll-root.js.map +1 -0
- package/dist/lib/persist.js +84 -0
- package/dist/lib/persist.js.map +1 -0
- package/dist/lib/preference-values.js +13 -0
- package/dist/lib/preference-values.js.map +1 -0
- package/dist/lib/preferences.js +86 -0
- package/dist/lib/preferences.js.map +1 -0
- package/dist/lib/reads/hooks.js +156 -0
- package/dist/lib/reads/hooks.js.map +1 -0
- package/dist/lib/reads/optimistic.js +169 -0
- package/dist/lib/reads/optimistic.js.map +1 -0
- package/dist/lib/reads/refetch.js +108 -0
- package/dist/lib/reads/refetch.js.map +1 -0
- package/dist/lib/reads/slots.js +215 -0
- package/dist/lib/reads/slots.js.map +1 -0
- package/dist/lib/realtime/hooks.js +40 -0
- package/dist/lib/realtime/hooks.js.map +1 -0
- package/dist/lib/realtime/provider.js +25 -0
- package/dist/lib/realtime/provider.js.map +1 -0
- package/dist/lib/realtime/registry.js +472 -0
- package/dist/lib/realtime/registry.js.map +1 -0
- package/dist/lib/records/define-record-type.js +33 -0
- package/dist/lib/records/define-record-type.js.map +1 -0
- package/dist/lib/records/hooks.js +39 -0
- package/dist/lib/records/hooks.js.map +1 -0
- package/dist/lib/records/store.js +572 -0
- package/dist/lib/records/store.js.map +1 -0
- package/dist/lib/records/wire.js +58 -0
- package/dist/lib/records/wire.js.map +1 -0
- package/dist/lib/reduced-motion-help.js +19 -0
- package/dist/lib/reduced-motion-help.js.map +1 -0
- package/dist/lib/scroll-caret.js +18 -0
- package/dist/lib/scroll-caret.js.map +1 -0
- package/dist/lib/sim/createSimStore.js +54 -0
- package/dist/lib/sim/createSimStore.js.map +1 -0
- package/dist/lib/sim/latency.js +28 -0
- package/dist/lib/sim/latency.js.map +1 -0
- package/dist/lib/sim/registry.js +13 -0
- package/dist/lib/sim/registry.js.map +1 -0
- package/dist/lib/sim/settings.js +41 -0
- package/dist/lib/sim/settings.js.map +1 -0
- package/dist/lib/submit-shortcut.js +25 -0
- package/dist/lib/submit-shortcut.js.map +1 -0
- package/dist/lib/syntax/index.js +33 -0
- package/dist/lib/syntax/index.js.map +1 -0
- package/dist/lib/syntax/languages/bash.js +77 -0
- package/dist/lib/syntax/languages/bash.js.map +1 -0
- package/dist/lib/syntax/languages/css.js +81 -0
- package/dist/lib/syntax/languages/css.js.map +1 -0
- package/dist/lib/syntax/languages/html.js +91 -0
- package/dist/lib/syntax/languages/html.js.map +1 -0
- package/dist/lib/syntax/languages/index.js +49 -0
- package/dist/lib/syntax/languages/index.js.map +1 -0
- package/dist/lib/syntax/languages/javascript.js +133 -0
- package/dist/lib/syntax/languages/javascript.js.map +1 -0
- package/dist/lib/syntax/languages/json.js +45 -0
- package/dist/lib/syntax/languages/json.js.map +1 -0
- package/dist/lib/syntax/languages/mongodb.js +24 -0
- package/dist/lib/syntax/languages/mongodb.js.map +1 -0
- package/dist/lib/syntax/languages/plain.js +10 -0
- package/dist/lib/syntax/languages/plain.js.map +1 -0
- package/dist/lib/syntax/languages/sql.js +113 -0
- package/dist/lib/syntax/languages/sql.js.map +1 -0
- package/dist/lib/syntax/languages/vue.js +31 -0
- package/dist/lib/syntax/languages/vue.js.map +1 -0
- package/dist/lib/syntax/languages/yaml.js +55 -0
- package/dist/lib/syntax/languages/yaml.js.map +1 -0
- package/dist/lib/syntax/markdown/grammar.js +52 -0
- package/dist/lib/syntax/markdown/grammar.js.map +1 -0
- package/dist/lib/syntax/markdown/inline.js +477 -0
- package/dist/lib/syntax/markdown/inline.js.map +1 -0
- package/dist/lib/syntax/markdown/parse.js +464 -0
- package/dist/lib/syntax/markdown/parse.js.map +1 -0
- package/dist/lib/syntax/markdown/refs.js +94 -0
- package/dist/lib/syntax/markdown/refs.js.map +1 -0
- package/dist/lib/syntax/markdown/render.js +230 -0
- package/dist/lib/syntax/markdown/render.js.map +1 -0
- package/dist/lib/syntax/markdown/spans.js +40 -0
- package/dist/lib/syntax/markdown/spans.js.map +1 -0
- package/dist/lib/syntax/registry.js +55 -0
- package/dist/lib/syntax/registry.js.map +1 -0
- package/dist/lib/syntax/tokenize.js +96 -0
- package/dist/lib/syntax/tokenize.js.map +1 -0
- package/dist/lib/time/instant.js +7 -0
- package/dist/lib/time/instant.js.map +1 -0
- package/dist/lib/time/plain.js +83 -0
- package/dist/lib/time/plain.js.map +1 -0
- package/dist/lib/time/relativeAge.js +20 -0
- package/dist/lib/time/relativeAge.js.map +1 -0
- package/dist/lib/time/relativeClock.js +59 -0
- package/dist/lib/time/relativeClock.js.map +1 -0
- package/dist/lib/time/types.js +23 -0
- package/dist/lib/time/types.js.map +1 -0
- package/dist/lib/time/zone.js +148 -0
- package/dist/lib/time/zone.js.map +1 -0
- package/dist/lib/use-controllable.js +16 -0
- package/dist/lib/use-controllable.js.map +1 -0
- package/dist/lib/use-fill-height.js +49 -0
- package/dist/lib/use-fill-height.js.map +1 -0
- package/dist/lib/use-hydrated.js +14 -0
- package/dist/lib/use-hydrated.js.map +1 -0
- package/dist/lib/use-media-query.js +30 -0
- package/dist/lib/use-media-query.js.map +1 -0
- package/dist/lib/use-relabel-base-ui-dismiss.js +26 -0
- package/dist/lib/use-relabel-base-ui-dismiss.js.map +1 -0
- package/dist/lib/use-release-snap-drag.js +29 -0
- package/dist/lib/use-release-snap-drag.js.map +1 -0
- package/dist/lib/use-roving-options.js +18 -0
- package/dist/lib/use-roving-options.js.map +1 -0
- package/dist/lib/values/absent.js +5 -0
- package/dist/lib/values/absent.js.map +1 -0
- package/dist/lib/values/boolean.js +13 -0
- package/dist/lib/values/boolean.js.map +1 -0
- package/dist/lib/values/currency.js +23 -0
- package/dist/lib/values/currency.js.map +1 -0
- package/dist/lib/values/date.js +35 -0
- package/dist/lib/values/date.js.map +1 -0
- package/dist/lib/values/datetime.js +54 -0
- package/dist/lib/values/datetime.js.map +1 -0
- package/dist/lib/values/locale-date.js +60 -0
- package/dist/lib/values/locale-date.js.map +1 -0
- package/dist/lib/values/number.js +16 -0
- package/dist/lib/values/number.js.map +1 -0
- package/dist/pure.js +379 -0
- package/dist/pure.js.map +1 -0
- package/dist/styles.css +190 -0
- package/dist/theme.css +360 -0
- package/dist/types/components/Accordion.d.ts +15 -0
- package/dist/types/components/AgentWorkingSpinner.d.ts +23 -0
- package/dist/types/components/AppShell.d.ts +164 -0
- package/dist/types/components/Attention.d.ts +87 -0
- package/dist/types/components/Avatar.d.ts +154 -0
- package/dist/types/components/Badge.d.ts +131 -0
- package/dist/types/components/Board.d.ts +239 -0
- package/dist/types/components/Button.d.ts +208 -0
- package/dist/types/components/Callout.d.ts +163 -0
- package/dist/types/components/Card.d.ts +219 -0
- package/dist/types/components/Choice.d.ts +127 -0
- package/dist/types/components/CodeEditor.d.ts +86 -0
- package/dist/types/components/ColorPicker.d.ts +14 -0
- package/dist/types/components/Combobox.d.ts +43 -0
- package/dist/types/components/CommandPalette.d.ts +35 -0
- package/dist/types/components/ConcentricRing.d.ts +61 -0
- package/dist/types/components/ConnectionCard.d.ts +64 -0
- package/dist/types/components/ContextItemRow.d.ts +35 -0
- package/dist/types/components/CopyValue.d.ts +14 -0
- package/dist/types/components/CountBadge.d.ts +14 -0
- package/dist/types/components/DateCalendar.d.ts +30 -0
- package/dist/types/components/DateField.d.ts +29 -0
- package/dist/types/components/DatePicker.d.ts +20 -0
- package/dist/types/components/DateTimeText.d.ts +9 -0
- package/dist/types/components/DescriptionList.d.ts +40 -0
- package/dist/types/components/Dialog.d.ts +269 -0
- package/dist/types/components/DragDrop.d.ts +196 -0
- package/dist/types/components/Drawer.d.ts +163 -0
- package/dist/types/components/EditGutter.d.ts +44 -0
- package/dist/types/components/EmojiPicker.d.ts +30 -0
- package/dist/types/components/ErrorBoundary.d.ts +43 -0
- package/dist/types/components/Field.d.ts +37 -0
- package/dist/types/components/FileUpload.d.ts +22 -0
- package/dist/types/components/FilterMenu.d.ts +120 -0
- package/dist/types/components/GatesSection.d.ts +79 -0
- package/dist/types/components/Icon.d.ts +40 -0
- package/dist/types/components/IconButton.d.ts +69 -0
- package/dist/types/components/IconStack.d.ts +28 -0
- package/dist/types/components/ImageUploadField.d.ts +38 -0
- package/dist/types/components/InlineEdit.d.ts +183 -0
- package/dist/types/components/InlineMarkdownEdit.d.ts +100 -0
- package/dist/types/components/Input.d.ts +128 -0
- package/dist/types/components/LegalDocument.d.ts +23 -0
- package/dist/types/components/LineDiff.d.ts +53 -0
- package/dist/types/components/ListHeader.d.ts +45 -0
- package/dist/types/components/Loading.d.ts +131 -0
- package/dist/types/components/Markdown.d.ts +35 -0
- package/dist/types/components/MarkdownEditor.d.ts +129 -0
- package/dist/types/components/Menu.d.ts +157 -0
- package/dist/types/components/Navigation.d.ts +67 -0
- package/dist/types/components/NumberInput.d.ts +177 -0
- package/dist/types/components/OTPInput.d.ts +13 -0
- package/dist/types/components/OrderedEntityManager.d.ts +64 -0
- package/dist/types/components/PagedWindowList.d.ts +23 -0
- package/dist/types/components/PaginationBar.d.ts +31 -0
- package/dist/types/components/Panel.d.ts +94 -0
- package/dist/types/components/PasswordInput.d.ts +7 -0
- package/dist/types/components/PasswordRequirements.d.ts +11 -0
- package/dist/types/components/PatchDiff.d.ts +38 -0
- package/dist/types/components/PendingVeil.d.ts +8 -0
- package/dist/types/components/Popover.d.ts +231 -0
- package/dist/types/components/Progress.d.ts +580 -0
- package/dist/types/components/RatingScale.d.ts +30 -0
- package/dist/types/components/ReadMore.d.ts +26 -0
- package/dist/types/components/RecordCard.d.ts +413 -0
- package/dist/types/components/RelativeTime.d.ts +17 -0
- package/dist/types/components/SandboxedFrame.d.ts +37 -0
- package/dist/types/components/SearchInput.d.ts +6 -0
- package/dist/types/components/SecretField.d.ts +90 -0
- package/dist/types/components/SectionNav.d.ts +15 -0
- package/dist/types/components/Select.d.ts +53 -0
- package/dist/types/components/SequenceDiagram.d.ts +15 -0
- package/dist/types/components/SettingRow.d.ts +144 -0
- package/dist/types/components/SignOffRings.d.ts +29 -0
- package/dist/types/components/Slider.d.ts +255 -0
- package/dist/types/components/SolutionChoice.d.ts +49 -0
- package/dist/types/components/SortMenu.d.ts +45 -0
- package/dist/types/components/Spinner.d.ts +29 -0
- package/dist/types/components/Stat.d.ts +136 -0
- package/dist/types/components/StatusSelect.d.ts +93 -0
- package/dist/types/components/Surface.d.ts +145 -0
- package/dist/types/components/Table.d.ts +164 -0
- package/dist/types/components/Tabs.d.ts +142 -0
- package/dist/types/components/ThemeMenu.d.ts +56 -0
- package/dist/types/components/Toast.d.ts +63 -0
- package/dist/types/components/Toggle.d.ts +168 -0
- package/dist/types/components/ToggleMatrix.d.ts +51 -0
- package/dist/types/components/Tree.d.ts +20 -0
- package/dist/types/components/TriStateSwitch.d.ts +63 -0
- package/dist/types/components/VideoPlayer.d.ts +26 -0
- package/dist/types/components/auth/AcceptInvitationCard.d.ts +54 -0
- package/dist/types/components/auth/AuthLayout.d.ts +12 -0
- package/dist/types/components/auth/ForgotPasswordForm.d.ts +6 -0
- package/dist/types/components/auth/LoginForm.d.ts +13 -0
- package/dist/types/components/auth/ResetPasswordForm.d.ts +9 -0
- package/dist/types/components/auth/SignInProviders.d.ts +56 -0
- package/dist/types/components/auth/SignupCard.d.ts +62 -0
- package/dist/types/components/auth/TermsAcceptance.d.ts +14 -0
- package/dist/types/components/auth/index.d.ts +8 -0
- package/dist/types/components/board/context.d.ts +65 -0
- package/dist/types/components/board/recipe.d.ts +97 -0
- package/dist/types/components/calendar/CalendarMonth.d.ts +32 -0
- package/dist/types/components/calendar/CalendarTimeGrid.d.ts +74 -0
- package/dist/types/components/calendar/EventActions.d.ts +16 -0
- package/dist/types/components/calendar/format.d.ts +42 -0
- package/dist/types/components/calendar/palette.d.ts +17 -0
- package/dist/types/components/calendar/use-calendar-drag.d.ts +53 -0
- package/dist/types/components/calendar/use-event-keyboard.d.ts +23 -0
- package/dist/types/components/calendar/use-grid-navigation.d.ts +47 -0
- package/dist/types/components/calendar/use-now.d.ts +20 -0
- package/dist/types/components/card-face/AcRingGlyph.d.ts +20 -0
- package/dist/types/components/card-face/BoardCardAgentSlot.d.ts +19 -0
- package/dist/types/components/card-face/CardFace.d.ts +106 -0
- package/dist/types/components/card-face/CardTypeBadge.d.ts +21 -0
- package/dist/types/components/card-face/EffortBadge.d.ts +9 -0
- package/dist/types/components/card-face/GateRingGlyph.d.ts +22 -0
- package/dist/types/components/card-face/OverflowRow.d.ts +40 -0
- package/dist/types/components/card-face/TapTip.d.ts +15 -0
- package/dist/types/components/card-face/hit-area.d.ts +20 -0
- package/dist/types/components/card-face/vocabulary.d.ts +83 -0
- package/dist/types/components/chart/BarList.d.ts +27 -0
- package/dist/types/components/chart/LineChart.d.ts +64 -0
- package/dist/types/components/chart/ShareBar.d.ts +26 -0
- package/dist/types/components/chart/TimeSeriesChart.d.ts +60 -0
- package/dist/types/components/chart/label-metrics.d.ts +9 -0
- package/dist/types/components/chart/line-chart-axis.d.ts +14 -0
- package/dist/types/components/chart/line-chart-scale.d.ts +55 -0
- package/dist/types/components/chart/line-series-style.d.ts +14 -0
- package/dist/types/components/chart/share-bar-labels.d.ts +17 -0
- package/dist/types/components/chart/shared.d.ts +122 -0
- package/dist/types/components/chart/time-series-scale.d.ts +29 -0
- package/dist/types/components/chat/Attachment.d.ts +125 -0
- package/dist/types/components/chat/Chat.d.ts +60 -0
- package/dist/types/components/chat/Composer.d.ts +62 -0
- package/dist/types/components/chat/ContextMeter.d.ts +45 -0
- package/dist/types/components/chat/EffortControl.d.ts +23 -0
- package/dist/types/components/chat/FileCover.d.ts +14 -0
- package/dist/types/components/chat/Message.d.ts +66 -0
- package/dist/types/components/chat/MessageScroller.d.ts +18 -0
- package/dist/types/components/chat/ModelSelector.d.ts +44 -0
- package/dist/types/components/chat/StreamingMarkdown.d.ts +11 -0
- package/dist/types/components/chat/download-file.d.ts +7 -0
- package/dist/types/components/chat/file-icon.d.ts +29 -0
- package/dist/types/components/chat/types.d.ts +165 -0
- package/dist/types/components/checklist/StatusChecklist.d.ts +37 -0
- package/dist/types/components/checklist/index.d.ts +3 -0
- package/dist/types/components/checklist/tally.d.ts +19 -0
- package/dist/types/components/checklist/types.d.ts +28 -0
- package/dist/types/components/code-editor/context.d.ts +32 -0
- package/dist/types/components/code-editor/editing.d.ts +39 -0
- package/dist/types/components/code-editor/highlight.d.ts +20 -0
- package/dist/types/components/code-editor/recipe.d.ts +109 -0
- package/dist/types/components/date-timeline/DateTimeline.d.ts +99 -0
- package/dist/types/components/date-timeline/TimelineRow.d.ts +22 -0
- package/dist/types/components/date-timeline/useBarDrag.d.ts +15 -0
- package/dist/types/components/date-timeline/useMarkerDrag.d.ts +14 -0
- package/dist/types/components/date-timeline/useTimelineZoom.d.ts +23 -0
- package/dist/types/components/drag-drop/context.d.ts +85 -0
- package/dist/types/components/drag-drop/recipe.d.ts +163 -0
- package/dist/types/components/drag-drop/shift.d.ts +153 -0
- package/dist/types/components/edit/activation.d.ts +21 -0
- package/dist/types/components/edit/outcome.d.ts +29 -0
- package/dist/types/components/edit/use-edit-session.d.ts +77 -0
- package/dist/types/components/file-viewer/FileViewer.d.ts +2 -0
- package/dist/types/components/file-viewer/PageNumberJumpField.d.ts +9 -0
- package/dist/types/components/file-viewer/ViewerControls.d.ts +20 -0
- package/dist/types/components/file-viewer/ViewerRail.d.ts +10 -0
- package/dist/types/components/file-viewer/ViewerStage.d.ts +22 -0
- package/dist/types/components/file-viewer/frames.d.ts +28 -0
- package/dist/types/components/file-viewer/index.d.ts +3 -0
- package/dist/types/components/file-viewer/types.d.ts +70 -0
- package/dist/types/components/file-viewer/use-frame-cursor.d.ts +13 -0
- package/dist/types/components/file-viewer/use-viewer-keys.d.ts +24 -0
- package/dist/types/components/file-viewer/use-viewer-zoom.d.ts +29 -0
- package/dist/types/components/focus-web/FocusWeb.d.ts +3 -0
- package/dist/types/components/focus-web/index.d.ts +4 -0
- package/dist/types/components/focus-web/layout.d.ts +55 -0
- package/dist/types/components/focus-web/types.d.ts +131 -0
- package/dist/types/components/graph-explorer/GraphExplorer.d.ts +42 -0
- package/dist/types/components/graph-explorer/camera-math.d.ts +119 -0
- package/dist/types/components/graph-explorer/index.d.ts +5 -0
- package/dist/types/components/graph-explorer/tree-layout.d.ts +67 -0
- package/dist/types/components/graph-explorer/types.d.ts +62 -0
- package/dist/types/components/graph-explorer/use-camera.d.ts +81 -0
- package/dist/types/components/graph-explorer/viewport-gesture.d.ts +32 -0
- package/dist/types/components/kanban/KanbanBoard.d.ts +72 -0
- package/dist/types/components/kanban/recipe.d.ts +73 -0
- package/dist/types/components/kanban/types.d.ts +55 -0
- package/dist/types/components/markdown/Affordances.d.ts +105 -0
- package/dist/types/components/markdown/AttachmentStrip.d.ts +25 -0
- package/dist/types/components/markdown/ImageUpload.d.ts +56 -0
- package/dist/types/components/media-error.d.ts +11 -0
- package/dist/types/components/nav-sections.d.ts +10 -0
- package/dist/types/components/node-canvas/NodeCanvas.d.ts +66 -0
- package/dist/types/components/node-canvas/index.d.ts +3 -0
- package/dist/types/components/node-canvas/layout.d.ts +29 -0
- package/dist/types/components/node-canvas/types.d.ts +207 -0
- package/dist/types/components/node-canvas/use-canvas-gestures.d.ts +39 -0
- package/dist/types/components/openapi/OpenApiViewer.d.ts +14 -0
- package/dist/types/components/openapi/OperationCard.d.ts +33 -0
- package/dist/types/components/openapi/SchemaView.d.ts +14 -0
- package/dist/types/components/openapi/index.d.ts +6 -0
- package/dist/types/components/openapi/resolve.d.ts +72 -0
- package/dist/types/components/openapi/types.d.ts +128 -0
- package/dist/types/components/overlay-shell.d.ts +48 -0
- package/dist/types/components/overlay-stack.d.ts +18 -0
- package/dist/types/components/paged-window/PageBlock.d.ts +31 -0
- package/dist/types/components/provenance/ConfidenceBar.d.ts +118 -0
- package/dist/types/components/provenance/ConfidenceMeter.d.ts +21 -0
- package/dist/types/components/provenance/ConfidenceReadout.d.ts +17 -0
- package/dist/types/components/provenance/ProvenanceBadge.d.ts +23 -0
- package/dist/types/components/provenance/ProvenanceDetail.d.ts +109 -0
- package/dist/types/components/provenance/ProvenanceDisclosure.d.ts +107 -0
- package/dist/types/components/provenance/absence.d.ts +37 -0
- package/dist/types/components/provenance/index.d.ts +7 -0
- package/dist/types/components/provenance/types.d.ts +137 -0
- package/dist/types/components/rbac/AccessRequestPanel.d.ts +92 -0
- package/dist/types/components/rbac/AccountMenu.d.ts +46 -0
- package/dist/types/components/rbac/AgentKeysList.d.ts +20 -0
- package/dist/types/components/rbac/ApiKeysPanel.d.ts +26 -0
- package/dist/types/components/rbac/ApiKeysTable.d.ts +63 -0
- package/dist/types/components/rbac/Brand.d.ts +8 -0
- package/dist/types/components/rbac/Can.d.ts +19 -0
- package/dist/types/components/rbac/ChangePasswordForm.d.ts +18 -0
- package/dist/types/components/rbac/DangerZone.d.ts +8 -0
- package/dist/types/components/rbac/DevToolsPopover.d.ts +36 -0
- package/dist/types/components/rbac/EndedLine.d.ts +21 -0
- package/dist/types/components/rbac/InvitationsList.d.ts +39 -0
- package/dist/types/components/rbac/InviteMembersDialog.d.ts +21 -0
- package/dist/types/components/rbac/MembersPanel.d.ts +31 -0
- package/dist/types/components/rbac/PermissionRequestPanel.d.ts +36 -0
- package/dist/types/components/rbac/ProfileForm.d.ts +27 -0
- package/dist/types/components/rbac/ProfilePage.d.ts +16 -0
- package/dist/types/components/rbac/RBACProvider.d.ts +69 -0
- package/dist/types/components/rbac/RoleEditorDialog.d.ts +28 -0
- package/dist/types/components/rbac/RoleKeyPicker.d.ts +24 -0
- package/dist/types/components/rbac/RolePermissionMatrix.d.ts +21 -0
- package/dist/types/components/rbac/RolesPermissionsPage.d.ts +24 -0
- package/dist/types/components/rbac/SessionsList.d.ts +35 -0
- package/dist/types/components/rbac/TeamSettingsForm.d.ts +22 -0
- package/dist/types/components/rbac/TeamSwitcher.d.ts +5 -0
- package/dist/types/components/rbac/approvalPanelParts.d.ts +69 -0
- package/dist/types/components/rbac/index.d.ts +25 -0
- package/dist/types/components/rbac/permissionSections.d.ts +8 -0
- package/dist/types/components/rbac/stagedForm.d.ts +25 -0
- package/dist/types/components/rbac/types.d.ts +65 -0
- package/dist/types/components/rbac/useStagedImage.d.ts +15 -0
- package/dist/types/components/roadmap/PhaseManager.d.ts +19 -0
- package/dist/types/components/roadmap/RoadmapItemCard.d.ts +51 -0
- package/dist/types/components/roadmap/RoadmapPage.d.ts +12 -0
- package/dist/types/components/roadmap/RoadmapSwimlaneBoard.d.ts +15 -0
- package/dist/types/components/roadmap/TrackManager.d.ts +19 -0
- package/dist/types/components/roadmap/UseCaseCard.d.ts +30 -0
- package/dist/types/components/roadmap/UseCaseLedgerPage.d.ts +29 -0
- package/dist/types/components/roadmap/chip-tones.d.ts +2 -0
- package/dist/types/components/roadmap/derive.d.ts +39 -0
- package/dist/types/components/roadmap/index.d.ts +10 -0
- package/dist/types/components/roadmap/types.d.ts +86 -0
- package/dist/types/components/stepper/Stepper.d.ts +79 -0
- package/dist/types/components/stepper/derive.d.ts +49 -0
- package/dist/types/components/stepper/index.d.ts +3 -0
- package/dist/types/components/stepper/types.d.ts +118 -0
- package/dist/types/icons/data.d.ts +2054 -0
- package/dist/types/index.d.ts +209 -0
- package/dist/types/lib/attention.d.ts +62 -0
- package/dist/types/lib/board/anchor.d.ts +69 -0
- package/dist/types/lib/board/index.d.ts +17 -0
- package/dist/types/lib/board/model.d.ts +43 -0
- package/dist/types/lib/board/move.d.ts +181 -0
- package/dist/types/lib/board/position.d.ts +22 -0
- package/dist/types/lib/board/rejection.d.ts +8 -0
- package/dist/types/lib/board/types.d.ts +294 -0
- package/dist/types/lib/board/use-board.d.ts +47 -0
- package/dist/types/lib/calendar/band-packer.d.ts +53 -0
- package/dist/types/lib/calendar/drag.d.ts +125 -0
- package/dist/types/lib/calendar/index.d.ts +4 -0
- package/dist/types/lib/calendar/lane-packer.d.ts +88 -0
- package/dist/types/lib/calendar/segments.d.ts +91 -0
- package/dist/types/lib/calendar/types.d.ts +166 -0
- package/dist/types/lib/chart-palette.d.ts +14 -0
- package/dist/types/lib/clipboard.d.ts +12 -0
- package/dist/types/lib/cn.d.ts +7 -0
- package/dist/types/lib/color.d.ts +14 -0
- package/dist/types/lib/component-guidance.d.ts +15 -0
- package/dist/types/lib/confidence.d.ts +28 -0
- package/dist/types/lib/date-timeline/scale.d.ts +143 -0
- package/dist/types/lib/design-frame/document.d.ts +39 -0
- package/dist/types/lib/design-frame/mini-app-script.d.ts +29 -0
- package/dist/types/lib/design-frame/mini-app.d.ts +17 -0
- package/dist/types/lib/design-frame/protocol.d.ts +78 -0
- package/dist/types/lib/dev-warn.d.ts +10 -0
- package/dist/types/lib/dnd/announce.d.ts +124 -0
- package/dist/types/lib/dnd/autoscroll.d.ts +88 -0
- package/dist/types/lib/dnd/cross-drop.d.ts +18 -0
- package/dist/types/lib/dnd/geometry.d.ts +126 -0
- package/dist/types/lib/dnd/index.d.ts +17 -0
- package/dist/types/lib/dnd/sensors/gesture.d.ts +37 -0
- package/dist/types/lib/dnd/sensors/keyboard.d.ts +54 -0
- package/dist/types/lib/dnd/sensors/pointer.d.ts +59 -0
- package/dist/types/lib/dnd/session.d.ts +124 -0
- package/dist/types/lib/dnd/types.d.ts +226 -0
- package/dist/types/lib/dnd/use-drag.d.ts +82 -0
- package/dist/types/lib/dom/scroll-ancestor.d.ts +15 -0
- package/dist/types/lib/format.d.ts +33 -0
- package/dist/types/lib/group-in-order.d.ts +13 -0
- package/dist/types/lib/header-fold.d.ts +10 -0
- package/dist/types/lib/i18n/areas/auth-provenance-flows.d.ts +287 -0
- package/dist/types/lib/i18n/areas/board.d.ts +51 -0
- package/dist/types/lib/i18n/areas/card-face.d.ts +8 -0
- package/dist/types/lib/i18n/areas/chat-chart.d.ts +202 -0
- package/dist/types/lib/i18n/areas/code-editor.d.ts +40 -0
- package/dist/types/lib/i18n/areas/date-timeline.d.ts +36 -0
- package/dist/types/lib/i18n/areas/dates.d.ts +103 -0
- package/dist/types/lib/i18n/areas/docs-views.d.ts +297 -0
- package/dist/types/lib/i18n/areas/feedback.d.ts +132 -0
- package/dist/types/lib/i18n/areas/formats.d.ts +30 -0
- package/dist/types/lib/i18n/areas/forms.d.ts +182 -0
- package/dist/types/lib/i18n/areas/keys.d.ts +15 -0
- package/dist/types/lib/i18n/areas/markdown.d.ts +150 -0
- package/dist/types/lib/i18n/areas/move-rejected.d.ts +16 -0
- package/dist/types/lib/i18n/areas/navigation.d.ts +185 -0
- package/dist/types/lib/i18n/areas/rbac.d.ts +633 -0
- package/dist/types/lib/i18n/emphasis.d.ts +3 -0
- package/dist/types/lib/i18n/index.d.ts +10 -0
- package/dist/types/lib/i18n/number-format.d.ts +5 -0
- package/dist/types/lib/i18n/plural.d.ts +7 -0
- package/dist/types/lib/i18n/provider.d.ts +16 -0
- package/dist/types/lib/i18n/strings.d.ts +18 -0
- package/dist/types/lib/icons.d.ts +22 -0
- package/dist/types/lib/interactive-target.d.ts +3 -0
- package/dist/types/lib/intl-cache.d.ts +31 -0
- package/dist/types/lib/legal-document.d.ts +82 -0
- package/dist/types/lib/line-diff-model.d.ts +39 -0
- package/dist/types/lib/markdown/attachments.d.ts +50 -0
- package/dist/types/lib/markdown/caret-map.d.ts +69 -0
- package/dist/types/lib/markdown/caret.d.ts +6 -0
- package/dist/types/lib/markdown/commands.d.ts +186 -0
- package/dist/types/lib/markdown/convert.d.ts +99 -0
- package/dist/types/lib/markdown/dom.d.ts +30 -0
- package/dist/types/lib/markdown/edit.d.ts +16 -0
- package/dist/types/lib/markdown/history.d.ts +59 -0
- package/dist/types/lib/markdown/hotkeys.d.ts +63 -0
- package/dist/types/lib/markdown/image-pipeline.d.ts +173 -0
- package/dist/types/lib/markdown/images.d.ts +138 -0
- package/dist/types/lib/markdown/input.d.ts +38 -0
- package/dist/types/lib/markdown/keys.d.ts +34 -0
- package/dist/types/lib/markdown/paste.d.ts +9 -0
- package/dist/types/lib/markdown/position.d.ts +43 -0
- package/dist/types/lib/markdown/project.d.ts +88 -0
- package/dist/types/lib/markdown/reconcile.d.ts +63 -0
- package/dist/types/lib/markdown/surface.d.ts +236 -0
- package/dist/types/lib/motion.d.ts +30 -0
- package/dist/types/lib/pad.d.ts +6 -0
- package/dist/types/lib/paged-window/index.d.ts +2 -0
- package/dist/types/lib/paged-window/layout.d.ts +21 -0
- package/dist/types/lib/paged-window/list-owner.d.ts +12 -0
- package/dist/types/lib/paged-window/records-binding.d.ts +102 -0
- package/dist/types/lib/paged-window/store.d.ts +307 -0
- package/dist/types/lib/paged-window/use-measured-pitch.d.ts +34 -0
- package/dist/types/lib/paged-window/use-page-visibility.d.ts +20 -0
- package/dist/types/lib/paged-window/use-paged-window.d.ts +61 -0
- package/dist/types/lib/paged-window/use-scroll-root.d.ts +18 -0
- package/dist/types/lib/persist.d.ts +57 -0
- package/dist/types/lib/preference-values.d.ts +72 -0
- package/dist/types/lib/preferences.d.ts +26 -0
- package/dist/types/lib/reads/hooks.d.ts +49 -0
- package/dist/types/lib/reads/index.d.ts +5 -0
- package/dist/types/lib/reads/optimistic.d.ts +119 -0
- package/dist/types/lib/reads/refetch.d.ts +83 -0
- package/dist/types/lib/reads/slots.d.ts +137 -0
- package/dist/types/lib/reads/types.d.ts +155 -0
- package/dist/types/lib/realtime/hooks.d.ts +38 -0
- package/dist/types/lib/realtime/index.d.ts +4 -0
- package/dist/types/lib/realtime/provider.d.ts +38 -0
- package/dist/types/lib/realtime/registry.d.ts +225 -0
- package/dist/types/lib/realtime/types.d.ts +242 -0
- package/dist/types/lib/records/define-record-type.d.ts +29 -0
- package/dist/types/lib/records/hooks.d.ts +46 -0
- package/dist/types/lib/records/index.d.ts +5 -0
- package/dist/types/lib/records/store.d.ts +289 -0
- package/dist/types/lib/records/types.d.ts +195 -0
- package/dist/types/lib/records/wire.d.ts +96 -0
- package/dist/types/lib/reduced-motion-help.d.ts +23 -0
- package/dist/types/lib/scroll-caret.d.ts +6 -0
- package/dist/types/lib/sim/createSimStore.d.ts +18 -0
- package/dist/types/lib/sim/index.d.ts +5 -0
- package/dist/types/lib/sim/latency.d.ts +10 -0
- package/dist/types/lib/sim/registry.d.ts +14 -0
- package/dist/types/lib/sim/settings.d.ts +11 -0
- package/dist/types/lib/sim/types.d.ts +3 -0
- package/dist/types/lib/submit-shortcut.d.ts +24 -0
- package/dist/types/lib/syntax/index.d.ts +16 -0
- package/dist/types/lib/syntax/languages/bash.d.ts +1 -0
- package/dist/types/lib/syntax/languages/css.d.ts +1 -0
- package/dist/types/lib/syntax/languages/html.d.ts +17 -0
- package/dist/types/lib/syntax/languages/index.d.ts +33 -0
- package/dist/types/lib/syntax/languages/javascript.d.ts +22 -0
- package/dist/types/lib/syntax/languages/json.d.ts +1 -0
- package/dist/types/lib/syntax/languages/mongodb.d.ts +1 -0
- package/dist/types/lib/syntax/languages/plain.d.ts +9 -0
- package/dist/types/lib/syntax/languages/sql.d.ts +4 -0
- package/dist/types/lib/syntax/languages/vue.d.ts +1 -0
- package/dist/types/lib/syntax/languages/yaml.d.ts +1 -0
- package/dist/types/lib/syntax/markdown/frames.d.ts +145 -0
- package/dist/types/lib/syntax/markdown/grammar.d.ts +1 -0
- package/dist/types/lib/syntax/markdown/index.d.ts +5 -0
- package/dist/types/lib/syntax/markdown/inline.d.ts +21 -0
- package/dist/types/lib/syntax/markdown/parse.d.ts +15 -0
- package/dist/types/lib/syntax/markdown/refs.d.ts +47 -0
- package/dist/types/lib/syntax/markdown/render.d.ts +25 -0
- package/dist/types/lib/syntax/markdown/spans.d.ts +84 -0
- package/dist/types/lib/syntax/markdown/types.d.ts +108 -0
- package/dist/types/lib/syntax/registry.d.ts +37 -0
- package/dist/types/lib/syntax/tokenize.d.ts +17 -0
- package/dist/types/lib/syntax/types.d.ts +119 -0
- package/dist/types/lib/time/index.d.ts +4 -0
- package/dist/types/lib/time/instant.d.ts +2 -0
- package/dist/types/lib/time/plain.d.ts +61 -0
- package/dist/types/lib/time/relativeAge.d.ts +18 -0
- package/dist/types/lib/time/relativeClock.d.ts +8 -0
- package/dist/types/lib/time/types.d.ts +87 -0
- package/dist/types/lib/time/zone.d.ts +106 -0
- package/dist/types/lib/use-controllable.d.ts +14 -0
- package/dist/types/lib/use-fill-height.d.ts +26 -0
- package/dist/types/lib/use-hydrated.d.ts +8 -0
- package/dist/types/lib/use-media-query.d.ts +29 -0
- package/dist/types/lib/use-relabel-base-ui-dismiss.d.ts +6 -0
- package/dist/types/lib/use-release-snap-drag.d.ts +25 -0
- package/dist/types/lib/use-roving-options.d.ts +10 -0
- package/dist/types/lib/values/absent.d.ts +7 -0
- package/dist/types/lib/values/boolean.d.ts +29 -0
- package/dist/types/lib/values/currency.d.ts +22 -0
- package/dist/types/lib/values/date.d.ts +30 -0
- package/dist/types/lib/values/datetime.d.ts +48 -0
- package/dist/types/lib/values/index.d.ts +5 -0
- package/dist/types/lib/values/locale-date.d.ts +34 -0
- package/dist/types/lib/values/number.d.ts +27 -0
- package/dist/types/pure.d.ts +48 -0
- package/package.json +136 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionsList.js","sources":["../../../src/components/rbac/SessionsList.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport { AlertDialog } from \"../Dialog\";\nimport { Badge } from \"../Badge\";\nimport { CellStack, DataTable, TableEmptyState } from \"../Table\";\nimport { Icon } from \"../Icon\";\nimport { IconButton } from \"../IconButton\";\nimport { copyText } from \"../../lib/clipboard\";\nimport { DateTimeText } from \"../DateTimeText\";\nimport { RelativeTime } from \"../RelativeTime\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport type { UiStrings } from \"../../lib/i18n\";\nimport { EndedLine, IdleLine, type EndedState, type IdleState } from \"./EndedLine\";\n\n/* ----------------------------------------------------------------------------\n SESSIONS LIST\n\n ACCOUNT SECURITY'S OWN `DataTable` — same relationship `MembersPanel` has\n with the table primitive (see that file's own header: \"there are no\n team-specific table components\"). One row per signed-in session, a\n \"Current\" badge on whichever row is this one, and a revoke action on every\n OTHER row — the row that IS the current session has nothing to revoke\n itself out from under.\n\n PRESENTATIONAL ONLY, no exception for the confirm step: `onRevoke` is the\n one side effect, fired only after the `AlertDialog` confirms. This library\n never guesses that a destructive account action was fine to skip a\n confirmation for.\n ---------------------------------------------------------------------------- */\n\nexport interface Session {\n id: number;\n /** A human label for the session — \"Chrome on macOS\", \"iPhone app\", whatever\n * the consumer's own backend derives from the user agent. */\n name: string;\n /** ISO instant. */\n createdAt: string;\n /** ISO instant. */\n lastUsedAt: string;\n /** ISO instant, or `null`/omitted for a session with no expiry. */\n expiresAt?: string | null;\n userAgent?: string;\n ip?: string;\n /** True for exactly one row — the session this UI is currently running in. */\n current: boolean;\n /** DX-5246: set on a session that has ended (signed out, revoked or expired): the consumer's own words for how it ended (`label`) and the ISO instant it did (`at`). An ended row shows them under its name and offers no revoke. */\n ended?: EndedState;\n /** DX-5246: set on a session that still works but nobody is using (idle): the consumer's own words (`label`) and the ISO instant it was last in use (`at`). An idle row shows them under its name and keeps its revoke. */\n idle?: IdleState;\n /** DX-5247: the id of the browser the session was made in, a debugging label. Shown (first 9 characters) with a copy control in the Browser column; the whole id is what is copied. Omit for a session that has none: the cell reads \"—\". */\n browserId?: string;\n /** DX-5247: true on every row whose `browserId` is the browser this UI is running in: it gets a \"This browser\" badge and a tinted row. */\n thisBrowser?: boolean;\n}\n\nexport interface SessionsListProps {\n sessions: Session[];\n onRevoke: (id: number) => Promise<void>;\n /** The id of a session currently mid-revoke. Disables just that row. */\n busyId?: number | null;\n emptyState?: ReactNode;\n className?: string;\n}\n\nfunction RevokeCell({\n session,\n busy,\n onRevoke,\n}: {\n session: Session;\n busy: boolean;\n onRevoke: (id: number) => Promise<void>;\n}) {\n const strings = useUiStrings().sessionsList;\n const [confirmOpen, setConfirmOpen] = useState(false);\n\n if (session.current) {\n return <span className=\"text-2xs text-tertiary\">{strings.thisSession}</span>;\n }\n // DX-5246: nothing left to revoke on a session that has already ended.\n if (session.ended !== undefined) return null;\n\n return (\n <AlertDialog\n open={confirmOpen}\n onOpenChange={setConfirmOpen}\n trigger={\n <IconButton\n icon={<Icon name=\"log-out\" size=\"sm\" />}\n label={strings.revoke(session.name)}\n tone=\"danger\"\n size=\"sm\"\n disabledReason={busy ? strings.revoking : undefined}\n />\n }\n title={strings.revokeTitle(session.name)}\n description={strings.revokeDescription}\n confirmLabel={strings.revokeConfirm}\n destructive\n loading={busy}\n onConfirm={() => {\n void onRevoke(session.id);\n setConfirmOpen(false);\n }}\n />\n );\n}\n\n/** How many leading characters of a browser id are shown; the whole id is what a copy puts on the clipboard. */\nconst BROWSER_ID_SHOWN = 9;\nconst COPIED_RESET_MS = 2000;\n\nfunction BrowserCell({ session }: { session: Session }) {\n const strings = useUiStrings().sessionsList;\n const [copied, setCopied] = useState(false);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(\n () => () => {\n if (timer.current !== null) clearTimeout(timer.current);\n },\n [],\n );\n if (session.browserId === undefined) return <span className=\"text-tertiary\">—</span>;\n const browserId = session.browserId;\n const copy = async () => {\n try {\n await copyText(browserId);\n setCopied(true);\n } catch {\n setCopied(false);\n }\n if (timer.current !== null) clearTimeout(timer.current);\n timer.current = setTimeout(() => setCopied(false), COPIED_RESET_MS);\n };\n return (\n <div className=\"flex items-center gap-1.5\">\n <code className=\"font-mono text-sm text-primary\" data-testid=\"session-browser-id\">\n {browserId.slice(0, BROWSER_ID_SHOWN)}\n </code>\n <IconButton\n icon={<Icon name={copied ? \"check\" : \"copy\"} size=\"sm\" />}\n label={strings.copyBrowserId(browserId.slice(0, BROWSER_ID_SHOWN))}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => void copy()}\n />\n {session.thisBrowser && (\n <Badge tone=\"accent\" size=\"sm\" dot>\n {strings.thisBrowser}\n </Badge>\n )}\n </div>\n );\n}\n\nfunction buildColumns(\n strings: UiStrings[\"sessionsList\"],\n busyId: number | null | undefined,\n onRevoke: (id: number) => Promise<void>,\n): ColumnDef<Session, unknown>[] {\n return [\n {\n id: \"session\",\n header: strings.columnSession,\n accessorFn: (s) => s.name,\n cell: ({ row }) => {\n const session = row.original;\n const secondary = [session.userAgent, session.ip].filter(Boolean).join(\" · \");\n return (\n <div className=\"flex items-center gap-2.5\">\n <span className=\"grid size-8 shrink-0 place-items-center rounded-full bg-surface-inset text-tertiary\">\n <Icon name=\"monitor\" size=\"sm\" />\n </span>\n <div className=\"flex min-w-0 flex-col gap-1\">\n <CellStack primary={session.name} secondary={secondary || undefined} />\n {session.ended && <EndedLine ended={session.ended} />}\n {session.idle && <IdleLine idle={session.idle} />}\n </div>\n {session.current && (\n <Badge tone=\"accent\" size=\"sm\" dot>\n {strings.current}\n </Badge>\n )}\n </div>\n );\n },\n },\n {\n id: \"browser\",\n header: strings.columnBrowser,\n accessorFn: (s) => s.browserId ?? \"\",\n cell: ({ row }) => <BrowserCell session={row.original} />,\n },\n {\n id: \"lastUsed\",\n header: strings.columnLastUsed,\n accessorFn: (s) => s.lastUsedAt,\n cell: ({ row }) => <span className=\"text-secondary\"><RelativeTime at={row.original.lastUsedAt} /></span>,\n },\n {\n id: \"created\",\n header: strings.columnCreated,\n accessorFn: (s) => s.createdAt,\n cell: ({ row }) => <span className=\"text-secondary\"><RelativeTime at={row.original.createdAt} /></span>,\n },\n {\n id: \"expires\",\n header: strings.columnExpires,\n accessorFn: (s) => s.expiresAt ?? \"\",\n cell: ({ row }) => (\n <span className=\"text-secondary\">\n {row.original.expiresAt ? <DateTimeText at={row.original.expiresAt} /> : strings.never}\n </span>\n ),\n },\n {\n id: \"actions\",\n header: \"\",\n enableSorting: false,\n cell: ({ row }) => (\n <div className=\"flex justify-end\">\n <RevokeCell session={row.original} busy={busyId === row.original.id} onRevoke={onRevoke} />\n </div>\n ),\n },\n ];\n}\n\nexport function SessionsList({ sessions, onRevoke, busyId, emptyState, className }: SessionsListProps) {\n const strings = useUiStrings().sessionsList;\n if (sessions.length === 0) {\n return (\n emptyState ?? (\n <TableEmptyState\n icon={<Icon name=\"monitor\" size=\"lg\" className=\"text-tertiary\" />}\n title={strings.emptyTitle}\n />\n )\n );\n }\n\n const columns = buildColumns(strings, busyId, onRevoke);\n return <DataTable columns={columns} data={sessions} getRowId={(s) => String(s.id)} getRowClassName={(s) => (s.thisBrowser ? \"bg-accent-subtle\" : undefined)} className={className} />;\n}\n"],"names":["RevokeCell","session","busy","onRevoke","strings","useUiStrings","confirmOpen","setConfirmOpen","useState","jsx","AlertDialog","IconButton","Icon","BROWSER_ID_SHOWN","COPIED_RESET_MS","BrowserCell","copied","setCopied","timer","useRef","useEffect","browserId","copy","copyText","jsxs","Badge","buildColumns","busyId","s","row","secondary","CellStack","EndedLine","IdleLine","RelativeTime","DateTimeText","SessionsList","sessions","emptyState","className","TableEmptyState","columns","DataTable"],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsx as o, jsxs as C } from "react/jsx-runtime";
|
|
2
|
+
import { useState as D } from "react";
|
|
3
|
+
import { Callout as m } from "../Callout.js";
|
|
4
|
+
import { Field as I } from "../Field.js";
|
|
5
|
+
import { ImageUploadField as T } from "../ImageUploadField.js";
|
|
6
|
+
import { Input as j } from "../Input.js";
|
|
7
|
+
import { useSaveFlow as q, StagedFormActions as w } from "./stagedForm.js";
|
|
8
|
+
import { useStagedImage as A } from "./useStagedImage.js";
|
|
9
|
+
import { useUiStrings as B } from "../../lib/i18n/provider.js";
|
|
10
|
+
function Q({
|
|
11
|
+
team: i,
|
|
12
|
+
onSave: v,
|
|
13
|
+
onUploadLogo: h,
|
|
14
|
+
readOnly: n = !1,
|
|
15
|
+
saveLabel: c,
|
|
16
|
+
discardLabel: S,
|
|
17
|
+
className: F
|
|
18
|
+
}) {
|
|
19
|
+
const l = B(), t = l.teamSettingsForm, [a, g] = D(i.name), e = A(i.logoUrl, h), { saving: r, saved: x, error: u, edit: s, save: U } = q(t.failedMessage), p = a.trim() !== i.name || e.dirty, N = a !== i.name || e.dirty, f = !n && p && a.trim().length > 0 && !r && !e.uploading;
|
|
20
|
+
function b() {
|
|
21
|
+
f && U(() => v(e.dirty ? { name: a.trim(), logoUrl: e.value } : { name: a.trim() }));
|
|
22
|
+
}
|
|
23
|
+
function y() {
|
|
24
|
+
s(() => {
|
|
25
|
+
g(i.name), e.discard();
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return /* @__PURE__ */ o("div", { className: F, children: /* @__PURE__ */ C("div", { className: "flex flex-col gap-5", children: [
|
|
29
|
+
x && !p && /* @__PURE__ */ o(m, { tone: "success", title: t.saved }),
|
|
30
|
+
u && /* @__PURE__ */ o(m, { tone: "danger", title: t.failedTitle, children: u }),
|
|
31
|
+
n && /* @__PURE__ */ o(m, { tone: "neutral", title: t.readOnlyTitle, children: t.readOnlyBody }),
|
|
32
|
+
/* @__PURE__ */ o(
|
|
33
|
+
T,
|
|
34
|
+
{
|
|
35
|
+
label: t.logo,
|
|
36
|
+
value: e.value,
|
|
37
|
+
shape: "square",
|
|
38
|
+
disabled: n || r,
|
|
39
|
+
onUpload: e.upload,
|
|
40
|
+
onChange: (d) => s(() => e.stage(d)),
|
|
41
|
+
description: e.dirty ? l.stagedForm.imageNote("logo", c ?? l.stagedForm.save, e.value === null) : void 0
|
|
42
|
+
}
|
|
43
|
+
),
|
|
44
|
+
/* @__PURE__ */ o(I, { label: t.teamName, children: /* @__PURE__ */ o(
|
|
45
|
+
j,
|
|
46
|
+
{
|
|
47
|
+
value: a,
|
|
48
|
+
onChange: (d) => s(() => g(d.target.value)),
|
|
49
|
+
disabled: n || r
|
|
50
|
+
}
|
|
51
|
+
) }),
|
|
52
|
+
!n && /* @__PURE__ */ o(
|
|
53
|
+
w,
|
|
54
|
+
{
|
|
55
|
+
onSave: b,
|
|
56
|
+
onDiscard: y,
|
|
57
|
+
canSave: f,
|
|
58
|
+
canDiscard: N && !e.uploading,
|
|
59
|
+
saving: r,
|
|
60
|
+
saveLabel: c,
|
|
61
|
+
discardLabel: S
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
] }) });
|
|
65
|
+
}
|
|
66
|
+
export {
|
|
67
|
+
Q as TeamSettingsForm
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=TeamSettingsForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeamSettingsForm.js","sources":["../../../src/components/rbac/TeamSettingsForm.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Callout } from \"../Callout\";\nimport { Field } from \"../Field\";\nimport { ImageUploadField } from \"../ImageUploadField\";\nimport { Input } from \"../Input\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport { StagedFormActions, useSaveFlow } from \"./stagedForm\";\nimport { useStagedImage } from \"./useStagedImage\";\n\n/* ============================================================================\n TEAM SETTINGS FORM\n\n Rename the team and set its logo as ONE form with ONE Save — mirrors\n `ProfileForm`'s shape (module header there explains the \"seeded once, then\n local\" convention this file reuses verbatim).\n\n DX-4131 — THE LOGO IS STAGED, NOT SAVED ON UPLOAD. `onUploadLogo` only has\n to put the file somewhere and resolve with its URL; nothing about the team\n record may change then. The picked (or removed) logo is held as form state,\n previewed at once with a \"Not saved yet\" note, and handed to `onSave` — with\n the name — when Save is clicked. Discard drops the name edit AND the staged\n logo without a request. (It used to persist the moment the upload resolved,\n with Save gated on the name alone: an upload with no Save, and a logo\n change the Save button could not even see.)\n\n `onSave` RECEIVES `logoUrl` ONLY WHEN THE LOGO CHANGED. The key is absent\n for a rename-only Save (keep the stored logo), `null` for a staged removal,\n a URL for a staged upload — the same three states a `PATCH` body carries\n (omitted keeps, `null` clears, string sets). Sending `logoUrl: undefined`\n would JSON-serialise the same, but the key is left out so a consumer that\n spreads the input into a request body cannot clear a logo by accident.\n\n `readOnly` IS THE WHOLE OF THE PERMISSION GATE THIS COMPONENT NEEDS — it\n never reads `useRBAC()` or a permission key itself (G-5 split test: a\n presentational component takes data/callbacks, never danxbot's permission\n names). The consuming page decides `readOnly` from whether the viewer\n holds `team.update`, per PLN-13's permission catalog.\n ========================================================================= */\n\nexport interface TeamSettingsFormTeam {\n name: string;\n logoUrl?: string | null;\n}\n\nexport interface TeamSettingsFormSaveInput {\n name: string;\n /** Present only when the logo changed: a URL sets it, `null` removes it. */\n logoUrl?: string | null;\n}\n\nexport interface TeamSettingsFormProps {\n team: TeamSettingsFormTeam;\n onSave: (input: TeamSettingsFormSaveInput) => Promise<void>;\n /** Uploads the file to storage and resolves with its URL. Must NOT change the\n * team record — the logo is only persisted by `onSave`. */\n onUploadLogo: (file: File) => Promise<string>;\n /** The viewer lacks `team.update` — every control renders disabled. */\n readOnly?: boolean;\n saveLabel?: string;\n discardLabel?: string;\n className?: string;\n}\n\nexport function TeamSettingsForm({\n team,\n onSave,\n onUploadLogo,\n readOnly = false,\n saveLabel,\n discardLabel,\n className,\n}: TeamSettingsFormProps) {\n const allStrings = useUiStrings();\n const strings = allStrings.teamSettingsForm;\n const [name, setName] = useState(team.name);\n const logo = useStagedImage(team.logoUrl, onUploadLogo);\n const { saving, saved, error, edit, save } = useSaveFlow(strings.failedMessage);\n\n // `changed` is what Save would send (the trimmed name); `touched` is any difference at all, so\n // a stray trailing space can still be discarded though there is nothing to save.\n const changed = name.trim() !== team.name || logo.dirty;\n const touched = name !== team.name || logo.dirty;\n const canSave = !readOnly && changed && name.trim().length > 0 && !saving && !logo.uploading;\n\n function handleSave() {\n if (!canSave) return;\n void save(() => onSave(logo.dirty ? { name: name.trim(), logoUrl: logo.value } : { name: name.trim() }));\n }\n\n function handleDiscard() {\n edit(() => {\n setName(team.name);\n logo.discard();\n });\n }\n\n return (\n <div className={className}>\n <div className=\"flex flex-col gap-5\">\n {saved && !changed && <Callout tone=\"success\" title={strings.saved} />}\n {error && <Callout tone=\"danger\" title={strings.failedTitle}>{error}</Callout>}\n {readOnly && (\n <Callout tone=\"neutral\" title={strings.readOnlyTitle}>\n {strings.readOnlyBody}\n </Callout>\n )}\n\n <ImageUploadField\n label={strings.logo}\n value={logo.value}\n shape=\"square\"\n disabled={readOnly || saving}\n onUpload={logo.upload}\n onChange={(url) => edit(() => logo.stage(url))}\n description={logo.dirty ? allStrings.stagedForm.imageNote(\"logo\", saveLabel ?? allStrings.stagedForm.save, logo.value === null) : undefined}\n />\n\n <Field label={strings.teamName}>\n <Input\n value={name}\n onChange={(event) => edit(() => setName(event.target.value))}\n disabled={readOnly || saving}\n />\n </Field>\n\n {!readOnly && (\n <StagedFormActions\n onSave={handleSave}\n onDiscard={handleDiscard}\n canSave={canSave}\n canDiscard={touched && !logo.uploading}\n saving={saving}\n saveLabel={saveLabel}\n discardLabel={discardLabel}\n />\n )}\n </div>\n </div>\n );\n}\n"],"names":["TeamSettingsForm","team","onSave","onUploadLogo","readOnly","saveLabel","discardLabel","className","allStrings","useUiStrings","strings","name","setName","useState","logo","useStagedImage","saving","saved","error","edit","save","useSaveFlow","changed","touched","canSave","handleSave","handleDiscard","jsxs","jsx","Callout","ImageUploadField","url","Field","Input","event","StagedFormActions"],"mappings":";;;;;;;;;AA+DO,SAASA,EAAiB;AAAA,EAC/B,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AACF,GAA0B;AACxB,QAAMC,IAAaC,EAAA,GACbC,IAAUF,EAAW,kBACrB,CAACG,GAAMC,CAAO,IAAIC,EAASZ,EAAK,IAAI,GACpCa,IAAOC,EAAed,EAAK,SAASE,CAAY,GAChD,EAAE,QAAAa,GAAQ,OAAAC,GAAO,OAAAC,GAAO,MAAAC,GAAM,MAAAC,MAASC,EAAYX,EAAQ,aAAa,GAIxEY,IAAUX,EAAK,KAAA,MAAWV,EAAK,QAAQa,EAAK,OAC5CS,IAAUZ,MAASV,EAAK,QAAQa,EAAK,OACrCU,IAAU,CAACpB,KAAYkB,KAAWX,EAAK,OAAO,SAAS,KAAK,CAACK,KAAU,CAACF,EAAK;AAEnF,WAASW,IAAa;AACpB,IAAKD,KACAJ,EAAK,MAAMlB,EAAOY,EAAK,QAAQ,EAAE,MAAMH,EAAK,KAAA,GAAQ,SAASG,EAAK,UAAU,EAAE,MAAMH,EAAK,KAAA,EAAK,CAAG,CAAC;AAAA,EACzG;AAEA,WAASe,IAAgB;AACvB,IAAAP,EAAK,MAAM;AACT,MAAAP,EAAQX,EAAK,IAAI,GACjBa,EAAK,QAAA;AAAA,IACP,CAAC;AAAA,EACH;AAEA,2BACG,OAAA,EAAI,WAAAP,GACH,UAAA,gBAAAoB,EAAC,OAAA,EAAI,WAAU,uBACZ,UAAA;AAAA,IAAAV,KAAS,CAACK,KAAW,gBAAAM,EAACC,GAAA,EAAQ,MAAK,WAAU,OAAOnB,EAAQ,OAAO;AAAA,IACnEQ,uBAAUW,GAAA,EAAQ,MAAK,UAAS,OAAOnB,EAAQ,aAAc,UAAAQ,EAAA,CAAM;AAAA,IACnEd,uBACEyB,GAAA,EAAQ,MAAK,WAAU,OAAOnB,EAAQ,eACpC,UAAAA,EAAQ,aAAA,CACX;AAAA,IAGF,gBAAAkB;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,OAAOpB,EAAQ;AAAA,QACf,OAAOI,EAAK;AAAA,QACZ,OAAM;AAAA,QACN,UAAUV,KAAYY;AAAA,QACtB,UAAUF,EAAK;AAAA,QACf,UAAU,CAACiB,MAAQZ,EAAK,MAAML,EAAK,MAAMiB,CAAG,CAAC;AAAA,QAC7C,aAAajB,EAAK,QAAQN,EAAW,WAAW,UAAU,QAAQH,KAAaG,EAAW,WAAW,MAAMM,EAAK,UAAU,IAAI,IAAI;AAAA,MAAA;AAAA,IAAA;AAAA,IAGpI,gBAAAc,EAACI,GAAA,EAAM,OAAOtB,EAAQ,UACpB,UAAA,gBAAAkB;AAAA,MAACK;AAAA,MAAA;AAAA,QACC,OAAOtB;AAAA,QACP,UAAU,CAACuB,MAAUf,EAAK,MAAMP,EAAQsB,EAAM,OAAO,KAAK,CAAC;AAAA,QAC3D,UAAU9B,KAAYY;AAAA,MAAA;AAAA,IAAA,GAE1B;AAAA,IAEC,CAACZ,KACA,gBAAAwB;AAAA,MAACO;AAAA,MAAA;AAAA,QACC,QAAQV;AAAA,QACR,WAAWC;AAAA,QACX,SAAAF;AAAA,QACA,YAAYD,KAAW,CAACT,EAAK;AAAA,QAC7B,QAAAE;AAAA,QACA,WAAAX;AAAA,QACA,cAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,EAAA,CAEJ,EAAA,CACF;AAEJ;"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsxs as s, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { Avatar as m } from "../Avatar.js";
|
|
3
|
+
import { Icon as d } from "../Icon.js";
|
|
4
|
+
import { Popover as u, PopoverClose as x } from "../Popover.js";
|
|
5
|
+
import { cn as n } from "../../lib/cn.js";
|
|
6
|
+
import { useRBAC as f } from "./RBACProvider.js";
|
|
7
|
+
import { useUiStrings as h } from "../../lib/i18n/provider.js";
|
|
8
|
+
const v = [
|
|
9
|
+
"dx-tap flex w-full items-center gap-2.5 rounded-md px-2.5 py-2",
|
|
10
|
+
"text-left text-sm text-secondary outline-none",
|
|
11
|
+
"transition-[var(--tx-colors)] duration-(--dur-instant)",
|
|
12
|
+
"hover:bg-surface-hover hover:text-primary",
|
|
13
|
+
"focus-visible:bg-surface-hover focus-visible:text-primary"
|
|
14
|
+
], b = "text-2xs font-semibold tracking-widest text-tertiary uppercase";
|
|
15
|
+
function z({ onSwitchTeam: i, className: o }) {
|
|
16
|
+
const a = h().teamSwitcher, { currentTeam: r, teams: c } = f();
|
|
17
|
+
if (!r) return null;
|
|
18
|
+
const p = c.length > 1 && !!i, l = /* @__PURE__ */ s("span", { className: "flex min-w-0 items-center gap-2.5", children: [
|
|
19
|
+
/* @__PURE__ */ e(m, { name: r.name, src: r.logoUrl, size: "sm", shape: "rounded" }),
|
|
20
|
+
/* @__PURE__ */ e("span", { className: "truncate text-sm font-semibold text-primary", children: r.name })
|
|
21
|
+
] });
|
|
22
|
+
return p ? /* @__PURE__ */ e(
|
|
23
|
+
u,
|
|
24
|
+
{
|
|
25
|
+
align: "start",
|
|
26
|
+
width: "calc(18rem*var(--ui-scale))",
|
|
27
|
+
className: o,
|
|
28
|
+
trigger: /* @__PURE__ */ s(
|
|
29
|
+
"button",
|
|
30
|
+
{
|
|
31
|
+
type: "button",
|
|
32
|
+
"aria-label": a.switchFrom(r.name),
|
|
33
|
+
className: n(
|
|
34
|
+
"dx-tap flex w-full items-center justify-between gap-2 rounded-md px-1 py-1.5",
|
|
35
|
+
"outline-none transition-[var(--tx-colors),box-shadow] duration-(--dur-fast) ease-hover",
|
|
36
|
+
"hover:bg-surface-active focus-visible:shadow-[0_0_0_3px_var(--focus-halo)]"
|
|
37
|
+
),
|
|
38
|
+
children: [
|
|
39
|
+
l,
|
|
40
|
+
/* @__PURE__ */ e(d, { name: "chevrons-up-down", size: "sm", className: "shrink-0 text-tertiary" })
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
),
|
|
44
|
+
children: /* @__PURE__ */ s("div", { className: "flex w-full min-w-0 flex-col gap-0.5", children: [
|
|
45
|
+
/* @__PURE__ */ e("span", { className: n(b, "px-1.5 pt-1 pb-1.5"), children: a.switchTeam }),
|
|
46
|
+
c.map((t) => /* @__PURE__ */ e(x, { children: /* @__PURE__ */ s(
|
|
47
|
+
"button",
|
|
48
|
+
{
|
|
49
|
+
type: "button",
|
|
50
|
+
className: n(v, t.id === r.id && "text-primary"),
|
|
51
|
+
onClick: () => i(t.id),
|
|
52
|
+
children: [
|
|
53
|
+
/* @__PURE__ */ e(m, { name: t.name, src: t.logoUrl, size: "xs", shape: "rounded" }),
|
|
54
|
+
/* @__PURE__ */ e("span", { className: "min-w-0 flex-1 truncate", children: t.name }),
|
|
55
|
+
t.id === r.id && /* @__PURE__ */ e(d, { name: "check", size: "xs", className: "shrink-0 text-success" })
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
) }, t.id))
|
|
59
|
+
] })
|
|
60
|
+
}
|
|
61
|
+
) : /* @__PURE__ */ e("div", { className: n("flex items-center px-1 py-1.5", o), "aria-label": a.currentTeam, children: l });
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
z as TeamSwitcher
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=TeamSwitcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeamSwitcher.js","sources":["../../../src/components/rbac/TeamSwitcher.tsx"],"sourcesContent":["import { Avatar } from \"../Avatar\";\nimport { Icon } from \"../Icon\";\nimport { Popover, PopoverClose } from \"../Popover\";\nimport { cn } from \"../../lib/cn\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport { useRBAC } from \"./RBACProvider\";\n\n/* ============================================================================\n TEAM SWITCHER\n\n The current team's brand (logo + name), and — for anyone belonging to more\n than one team — a menu to jump between them. This is deliberately its own\n component rather than a section bolted onto `AccountMenu`: it belongs in\n the header brand slot, not the account popover, so a person can see and\n change which team they're in without opening their account menu at all.\n `AccountMenu`'s own \"Switch team\" section (same data, same `onSwitchTeam`\n callback) remains for the account-menu path; the two are independent\n entry points to the identical action, not a duplicate implementation —\n this component owns no team-switching logic of its own, only the trigger\n + list UI, exactly like `AccountMenu` does for its rows.\n\n NO ROUTER, NO FETCH. `onSwitchTeam` is the only side effect this component\n ever produces; the consumer owns what happens to the network and the URL\n after that (mirrors the `AccountMenu` / `Popover.tsx` contract note).\n ========================================================================= */\n\nconst ITEM = [\n \"dx-tap flex w-full items-center gap-2.5 rounded-md px-2.5 py-2\",\n \"text-left text-sm text-secondary outline-none\",\n \"transition-[var(--tx-colors)] duration-(--dur-instant)\",\n \"hover:bg-surface-hover hover:text-primary\",\n \"focus-visible:bg-surface-hover focus-visible:text-primary\",\n];\n\nconst SECTION_LABEL = \"text-2xs font-semibold tracking-widest text-tertiary uppercase\";\n\nexport interface TeamSwitcherProps {\n onSwitchTeam?: (teamId: string) => void;\n className?: string;\n}\n\nexport function TeamSwitcher({ onSwitchTeam, className }: TeamSwitcherProps) {\n const strings = useUiStrings().teamSwitcher;\n const { currentTeam, teams } = useRBAC();\n\n /* No current team resolved (a membership/team mismatch upstream) — there is\n nothing sensible to render as a trigger, so the switcher renders nothing\n rather than a blank or placeholder brand. A consumer relying on this\n always having a value has a data bug to fix upstream, not a fallback to\n paper over here. */\n if (!currentTeam) return null;\n\n const canSwitch = teams.length > 1 && !!onSwitchTeam;\n\n const brand = (\n <span className=\"flex min-w-0 items-center gap-2.5\">\n <Avatar name={currentTeam.name} src={currentTeam.logoUrl} size=\"sm\" shape=\"rounded\" />\n <span className=\"truncate text-sm font-semibold text-primary\">{currentTeam.name}</span>\n </span>\n );\n\n /* Nothing to switch TO (a single-team consumer, or no callback supplied) —\n render the brand as plain, non-interactive content. A trigger with\n nowhere to go is worse than no trigger at all, same rule `AccountMenu`\n applies to its own optional rows. */\n if (!canSwitch) {\n return (\n <div className={cn(\"flex items-center px-1 py-1.5\", className)} aria-label={strings.currentTeam}>\n {brand}\n </div>\n );\n }\n\n return (\n <Popover\n align=\"start\"\n width=\"calc(18rem*var(--ui-scale))\"\n className={className}\n trigger={\n <button\n type=\"button\"\n aria-label={strings.switchFrom(currentTeam.name)}\n className={cn(\n \"dx-tap flex w-full items-center justify-between gap-2 rounded-md px-1 py-1.5\",\n \"outline-none transition-[var(--tx-colors),box-shadow] duration-(--dur-fast) ease-hover\",\n \"hover:bg-surface-active focus-visible:shadow-[0_0_0_3px_var(--focus-halo)]\",\n )}\n >\n {brand}\n <Icon name=\"chevrons-up-down\" size=\"sm\" className=\"shrink-0 text-tertiary\" />\n </button>\n }\n >\n <div className=\"flex w-full min-w-0 flex-col gap-0.5\">\n <span className={cn(SECTION_LABEL, \"px-1.5 pt-1 pb-1.5\")}>{strings.switchTeam}</span>\n {teams.map((team) => (\n <PopoverClose key={team.id}>\n <button\n type=\"button\"\n className={cn(ITEM, team.id === currentTeam.id && \"text-primary\")}\n onClick={() => onSwitchTeam(team.id)}\n >\n <Avatar name={team.name} src={team.logoUrl} size=\"xs\" shape=\"rounded\" />\n <span className=\"min-w-0 flex-1 truncate\">{team.name}</span>\n {team.id === currentTeam.id && (\n <Icon name=\"check\" size=\"xs\" className=\"shrink-0 text-success\" />\n )}\n </button>\n </PopoverClose>\n ))}\n </div>\n </Popover>\n );\n}\n"],"names":["ITEM","SECTION_LABEL","TeamSwitcher","onSwitchTeam","className","strings","useUiStrings","currentTeam","teams","useRBAC","canSwitch","brand","jsxs","jsx","Avatar","Popover","cn","Icon","team","PopoverClose"],"mappings":";;;;;;;AA0BA,MAAMA,IAAO;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,IAAgB;AAOf,SAASC,EAAa,EAAE,cAAAC,GAAc,WAAAC,KAAgC;AAC3E,QAAMC,IAAUC,IAAe,cACzB,EAAE,aAAAC,GAAa,OAAAC,EAAA,IAAUC,EAAA;AAO/B,MAAI,CAACF,EAAa,QAAO;AAEzB,QAAMG,IAAYF,EAAM,SAAS,KAAK,CAAC,CAACL,GAElCQ,IACJ,gBAAAC,EAAC,QAAA,EAAK,WAAU,qCACd,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAO,MAAMP,EAAY,MAAM,KAAKA,EAAY,SAAS,MAAK,MAAK,OAAM,UAAA,CAAU;AAAA,IACpF,gBAAAM,EAAC,QAAA,EAAK,WAAU,+CAA+C,YAAY,KAAA,CAAK;AAAA,EAAA,GAClF;AAOF,SAAKH,IASH,gBAAAG;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,WAAAX;AAAA,MACA,SACE,gBAAAQ;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,cAAYP,EAAQ,WAAWE,EAAY,IAAI;AAAA,UAC/C,WAAWS;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAGD,UAAA;AAAA,YAAAL;AAAA,8BACAM,GAAA,EAAK,MAAK,oBAAmB,MAAK,MAAK,WAAU,yBAAA,CAAyB;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAI/E,UAAA,gBAAAL,EAAC,OAAA,EAAI,WAAU,wCACb,UAAA;AAAA,QAAA,gBAAAC,EAAC,UAAK,WAAWG,EAAGf,GAAe,oBAAoB,GAAI,YAAQ,YAAW;AAAA,QAC7EO,EAAM,IAAI,CAACU,wBACTC,GAAA,EACC,UAAA,gBAAAP;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAWI,EAAGhB,GAAMkB,EAAK,OAAOX,EAAY,MAAM,cAAc;AAAA,YAChE,SAAS,MAAMJ,EAAae,EAAK,EAAE;AAAA,YAEnC,UAAA;AAAA,cAAA,gBAAAL,EAACC,GAAA,EAAO,MAAMI,EAAK,MAAM,KAAKA,EAAK,SAAS,MAAK,MAAK,OAAM,UAAA,CAAU;AAAA,cACtE,gBAAAL,EAAC,QAAA,EAAK,WAAU,2BAA2B,YAAK,MAAK;AAAA,cACpDK,EAAK,OAAOX,EAAY,MACvB,gBAAAM,EAACI,GAAA,EAAK,MAAK,SAAQ,MAAK,MAAK,WAAU,wBAAA,CAAwB;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,EAEnE,GAXiBC,EAAK,EAYxB,CACD;AAAA,MAAA,EAAA,CACH;AAAA,IAAA;AAAA,EAAA,IA3CA,gBAAAL,EAAC,OAAA,EAAI,WAAWG,EAAG,iCAAiCZ,CAAS,GAAG,cAAYC,EAAQ,aACjF,UAAAM,EAAA,CACH;AA4CN;"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { jsxs as d, jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { useState as f } from "react";
|
|
3
|
+
import { Badge as v } from "../Badge.js";
|
|
4
|
+
import { Button as u } from "../Button.js";
|
|
5
|
+
import { Callout as p } from "../Callout.js";
|
|
6
|
+
import { Field as x } from "../Field.js";
|
|
7
|
+
import { Icon as C } from "../Icon.js";
|
|
8
|
+
import { Input as N } from "../Input.js";
|
|
9
|
+
import { useUiStrings as i } from "../../lib/i18n/provider.js";
|
|
10
|
+
const y = {
|
|
11
|
+
pending: "warning",
|
|
12
|
+
approved: "success",
|
|
13
|
+
denied: "danger",
|
|
14
|
+
expired: "muted",
|
|
15
|
+
claimed: "info"
|
|
16
|
+
};
|
|
17
|
+
function z({ title: e, state: n, revokedLabel: t }) {
|
|
18
|
+
const o = i().approval;
|
|
19
|
+
return /* @__PURE__ */ d("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [
|
|
20
|
+
/* @__PURE__ */ r("h2", { className: "text-xs font-semibold tracking-widest text-tertiary uppercase", children: e }),
|
|
21
|
+
/* @__PURE__ */ r(v, { tone: t === void 0 ? y[n] : "danger", dot: !0, children: t ?? o.state[n] })
|
|
22
|
+
] });
|
|
23
|
+
}
|
|
24
|
+
function I({ code: e }) {
|
|
25
|
+
const n = i().approval;
|
|
26
|
+
return /* @__PURE__ */ r(p, { tone: "info", title: n.confirmCodeTitle, icon: /* @__PURE__ */ r(C, { name: "shield-check", size: "sm" }), children: /* @__PURE__ */ d("div", { className: "flex flex-col gap-1", children: [
|
|
27
|
+
/* @__PURE__ */ r("span", { className: "font-mono text-3xl font-semibold tracking-[0.25em] break-all text-primary", "data-testid": "confirm-code", children: e }),
|
|
28
|
+
/* @__PURE__ */ r("span", { children: n.confirmCodeCompare })
|
|
29
|
+
] }) });
|
|
30
|
+
}
|
|
31
|
+
function c(e) {
|
|
32
|
+
return e.replace(/\s+/g, "").toUpperCase();
|
|
33
|
+
}
|
|
34
|
+
function E(e, n) {
|
|
35
|
+
return c(e) === c(n);
|
|
36
|
+
}
|
|
37
|
+
const T = 4;
|
|
38
|
+
function O({ expected: e, value: n, onValueChange: t }) {
|
|
39
|
+
const o = i().approval, a = c(e).length, l = c(n).length >= a && !E(n, e);
|
|
40
|
+
return /* @__PURE__ */ r(
|
|
41
|
+
x,
|
|
42
|
+
{
|
|
43
|
+
label: o.confirmCodeLabel,
|
|
44
|
+
description: o.confirmCodeEntryHint,
|
|
45
|
+
error: l ? o.confirmCodeMismatch : void 0,
|
|
46
|
+
children: /* @__PURE__ */ r(
|
|
47
|
+
N,
|
|
48
|
+
{
|
|
49
|
+
value: n,
|
|
50
|
+
onChange: (s) => t(s.target.value),
|
|
51
|
+
maxLength: a + T,
|
|
52
|
+
autoComplete: "off",
|
|
53
|
+
autoCapitalize: "characters",
|
|
54
|
+
spellCheck: !1,
|
|
55
|
+
className: "font-mono tracking-[0.25em] uppercase",
|
|
56
|
+
"data-testid": "confirm-code-input"
|
|
57
|
+
}
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
const w = {
|
|
63
|
+
approved: "success",
|
|
64
|
+
claimed: "info",
|
|
65
|
+
denied: "neutral",
|
|
66
|
+
expired: "warning"
|
|
67
|
+
};
|
|
68
|
+
function g({ state: e, children: n }) {
|
|
69
|
+
const t = i().approval;
|
|
70
|
+
return /* @__PURE__ */ r(p, { tone: w[e], title: t.terminalTitle[e], children: n });
|
|
71
|
+
}
|
|
72
|
+
function H() {
|
|
73
|
+
const e = i().approval, [n, t] = f(null), [o, a] = f(null);
|
|
74
|
+
async function l(s, h) {
|
|
75
|
+
t(s), a(null);
|
|
76
|
+
try {
|
|
77
|
+
await h();
|
|
78
|
+
} catch (m) {
|
|
79
|
+
a({
|
|
80
|
+
action: s,
|
|
81
|
+
message: m instanceof Error ? m.message : e.failedMessage[s]
|
|
82
|
+
});
|
|
83
|
+
} finally {
|
|
84
|
+
t(null);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return { busy: n, error: o, run: l };
|
|
88
|
+
}
|
|
89
|
+
function R({ error: e }) {
|
|
90
|
+
const n = i().approval;
|
|
91
|
+
return e === null ? null : /* @__PURE__ */ r(p, { tone: "danger", live: !0, title: n.failedTitle[e.action], children: e.message });
|
|
92
|
+
}
|
|
93
|
+
function U({
|
|
94
|
+
busy: e,
|
|
95
|
+
run: n,
|
|
96
|
+
onApprove: t,
|
|
97
|
+
onDeny: o,
|
|
98
|
+
approveDisabled: a
|
|
99
|
+
}) {
|
|
100
|
+
const l = i().approval;
|
|
101
|
+
return /* @__PURE__ */ d("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
|
|
102
|
+
/* @__PURE__ */ r(u, { variant: "outline", onClick: () => {
|
|
103
|
+
n("deny", o);
|
|
104
|
+
}, disabled: e !== null, loading: e === "deny", children: l.deny }),
|
|
105
|
+
/* @__PURE__ */ r(u, { onClick: () => {
|
|
106
|
+
n("approve", t);
|
|
107
|
+
}, disabled: a || e !== null, loading: e === "approve", children: l.approve })
|
|
108
|
+
] });
|
|
109
|
+
}
|
|
110
|
+
function D({ note: e, fallback: n }) {
|
|
111
|
+
const t = i().approval;
|
|
112
|
+
return e === void 0 ? /* @__PURE__ */ r(g, { state: "expired", children: n }) : /* @__PURE__ */ r(g, { state: "expired", children: /* @__PURE__ */ d("div", { className: "flex flex-col gap-1", children: [
|
|
113
|
+
/* @__PURE__ */ r("span", { className: "font-medium text-primary", children: e.reason }),
|
|
114
|
+
/* @__PURE__ */ r("span", { children: e.nextStep }),
|
|
115
|
+
/* @__PURE__ */ r("span", { children: t.expiredNothingGranted })
|
|
116
|
+
] }) });
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
U as ApprovalButtons,
|
|
120
|
+
R as ApprovalError,
|
|
121
|
+
z as ApprovalHeader,
|
|
122
|
+
I as ConfirmCodeCallout,
|
|
123
|
+
O as ConfirmCodeEntry,
|
|
124
|
+
D as ExpiredNotice,
|
|
125
|
+
g as TerminalCallout,
|
|
126
|
+
E as confirmCodeMatches,
|
|
127
|
+
c as normalizeConfirmCode,
|
|
128
|
+
H as useApprovalActions
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=approvalPanelParts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvalPanelParts.js","sources":["../../../src/components/rbac/approvalPanelParts.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { Badge, type BadgeProps } from \"../Badge\";\nimport { Button } from \"../Button\";\nimport { Callout, type CalloutProps } from \"../Callout\";\nimport { Field } from \"../Field\";\nimport { Icon } from \"../Icon\";\nimport { Input } from \"../Input\";\nimport { useUiStrings } from \"../../lib/i18n\";\n\n/* ----------------------------------------------------------------------------\n APPROVAL PANEL PARTS (DX-4433)\n\n THE PIECES EVERY \"A PERSON APPROVES SOMETHING ASKING TO ACT AS THEM\" CARD\n SHARES. `AccessRequestPanel` (approve a key and pick its role) and\n `PermissionRequestPanel` (approve extra permissions on a key that already\n exists) are the same screen with a different decision in the middle: the same\n header and state badge, the same compare-only confirm code, the same\n terminal callouts, the same busy / error handling around Approve and Deny.\n They live here so the two cards cannot drift apart. Not exported from the\n package: a consumer reaches them through the two panels.\n ---------------------------------------------------------------------------- */\n\nexport type AccessRequestState = \"pending\" | \"approved\" | \"denied\" | \"expired\" | \"claimed\";\n\n/** Why a request expired and what its requester does next, in the consumer's words; the Expired readout leads with them. */\nexport interface ExpiredNote {\n /** Why the request is over, e.g. \"The agent's session ended.\". */\n reason: string;\n /** What the requester must do to get access, e.g. \"The agent must reconnect and ask again.\". */\n nextStep: string;\n}\n\nconst STATE_TONE: Record<AccessRequestState, NonNullable<BadgeProps[\"tone\"]>> = {\n pending: \"warning\",\n approved: \"success\",\n denied: \"danger\",\n expired: \"muted\",\n claimed: \"info\",\n};\n\nexport function ApprovalHeader({ title, state, revokedLabel }: { title: string; state: AccessRequestState; revokedLabel?: string }) {\n const strings = useUiStrings().approval;\n return (\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <h2 className=\"text-xs font-semibold tracking-widest text-tertiary uppercase\">{title}</h2>\n {/* DX-4856: a revoked key outranks the request's own state, which stays `claimed` for good. */}\n <Badge tone={revokedLabel === undefined ? STATE_TONE[state] : \"danger\"} dot>\n {revokedLabel ?? strings.state[state]}\n </Badge>\n </div>\n );\n}\n\n/** The code is for comparing, never copying: plain large text, no copy control (see `AccessRequestPanel`). */\nexport function ConfirmCodeCallout({ code }: { code: string }) {\n const strings = useUiStrings().approval;\n return (\n <Callout tone=\"info\" title={strings.confirmCodeTitle} icon={<Icon name=\"shield-check\" size=\"sm\" />}>\n <div className=\"flex flex-col gap-1\">\n <span className=\"font-mono text-3xl font-semibold tracking-[0.25em] break-all text-primary\" data-testid=\"confirm-code\">\n {code}\n </span>\n <span>{strings.confirmCodeCompare}</span>\n </div>\n </Callout>\n );\n}\n\n/** A typed confirm code is compared in upper case with every space removed; dashes are part of the code. */\nexport function normalizeConfirmCode(value: string): string {\n return value.replace(/\\s+/g, \"\").toUpperCase();\n}\n\n/** True when what was typed is the expected code, in either case and ignoring spaces. */\nexport function confirmCodeMatches(typed: string, expected: string): boolean {\n return normalizeConfirmCode(typed) === normalizeConfirmCode(expected);\n}\n\n// A paste may carry spaces around the code, so the field takes a few characters more than the code has.\nconst CODE_ENTRY_SLACK = 4;\n\n/**\n * The entry step for a confirm code (DX-4467): the approver types the code the requester shows instead of reading it\n * off this screen, so the code is never rendered here and cannot be copied from the page.\n */\nexport function ConfirmCodeEntry({ expected, value, onValueChange }: { expected: string; value: string; onValueChange: (next: string) => void }) {\n const strings = useUiStrings().approval;\n const expectedLength = normalizeConfirmCode(expected).length;\n const wrong = normalizeConfirmCode(value).length >= expectedLength && !confirmCodeMatches(value, expected);\n return (\n <Field\n label={strings.confirmCodeLabel}\n description={strings.confirmCodeEntryHint}\n error={wrong ? strings.confirmCodeMismatch : undefined}\n >\n <Input\n value={value}\n onChange={(event) => onValueChange(event.target.value)}\n maxLength={expectedLength + CODE_ENTRY_SLACK}\n autoComplete=\"off\"\n autoCapitalize=\"characters\"\n spellCheck={false}\n className=\"font-mono tracking-[0.25em] uppercase\"\n data-testid=\"confirm-code-input\"\n />\n </Field>\n );\n}\n\nconst TERMINAL_TONE: Record<Exclude<AccessRequestState, \"pending\">, NonNullable<CalloutProps[\"tone\"]>> = {\n approved: \"success\",\n claimed: \"info\",\n denied: \"neutral\",\n expired: \"warning\",\n};\n\n/** The readout for a settled request: the tone and title are shared, the sentence says what it meant for this requester. */\nexport function TerminalCallout({ state, children }: { state: Exclude<AccessRequestState, \"pending\">; children: ReactNode }) {\n const strings = useUiStrings().approval;\n return (\n <Callout tone={TERMINAL_TONE[state]} title={strings.terminalTitle[state]}>\n {children}\n </Callout>\n );\n}\n\ntype ApprovalAction = \"approve\" | \"deny\";\n\n/**\n * Busy / error state around the two decisions. A rejected promise shows its message and re-enables the buttons; a\n * resolved one leaves the panel as it was, because `state` is the consumer's server's answer, never assumed here.\n */\nexport function useApprovalActions() {\n const strings = useUiStrings().approval;\n const [busy, setBusy] = useState<ApprovalAction | null>(null);\n const [error, setError] = useState<{ action: ApprovalAction; message: string } | null>(null);\n\n async function run(action: ApprovalAction, call: () => Promise<void>) {\n setBusy(action);\n setError(null);\n try {\n await call();\n } catch (cause) {\n setError({\n action,\n message: cause instanceof Error ? cause.message : strings.failedMessage[action],\n });\n } finally {\n setBusy(null);\n }\n }\n\n return { busy, error, run };\n}\n\nexport function ApprovalError({ error }: { error: { action: ApprovalAction; message: string } | null }) {\n const strings = useUiStrings().approval;\n if (error === null) return null;\n return (\n <Callout tone=\"danger\" live title={strings.failedTitle[error.action]}>\n {error.message}\n </Callout>\n );\n}\n\nexport function ApprovalButtons({\n busy,\n run,\n onApprove,\n onDeny,\n approveDisabled,\n}: {\n busy: ApprovalAction | null;\n run: (action: ApprovalAction, call: () => Promise<void>) => Promise<void>;\n onApprove: () => Promise<void>;\n onDeny: () => Promise<void>;\n /** True when there is nothing valid to approve. Deny is never disabled by this. */\n approveDisabled: boolean;\n}) {\n const strings = useUiStrings().approval;\n return (\n <div className=\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\">\n <Button variant=\"outline\" onClick={() => void run(\"deny\", onDeny)} disabled={busy !== null} loading={busy === \"deny\"}>\n {strings.deny}\n </Button>\n <Button onClick={() => void run(\"approve\", onApprove)} disabled={approveDisabled || busy !== null} loading={busy === \"approve\"}>\n {strings.approve}\n </Button>\n </div>\n );\n}\n\n/** The Expired readout: with a note it names the cause and the requester's next step, without one it only says nothing was granted. */\nexport function ExpiredNotice({ note, fallback }: { note: ExpiredNote | undefined; fallback: string }) {\n const strings = useUiStrings().approval;\n if (note === undefined) return <TerminalCallout state=\"expired\">{fallback}</TerminalCallout>;\n return (\n <TerminalCallout state=\"expired\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"font-medium text-primary\">{note.reason}</span>\n <span>{note.nextStep}</span>\n <span>{strings.expiredNothingGranted}</span>\n </div>\n </TerminalCallout>\n );\n}\n"],"names":["STATE_TONE","ApprovalHeader","title","state","revokedLabel","strings","useUiStrings","jsxs","jsx","Badge","ConfirmCodeCallout","code","Callout","Icon","normalizeConfirmCode","value","confirmCodeMatches","typed","expected","CODE_ENTRY_SLACK","ConfirmCodeEntry","onValueChange","expectedLength","wrong","Field","Input","event","TERMINAL_TONE","TerminalCallout","children","useApprovalActions","busy","setBusy","useState","error","setError","run","action","call","cause","ApprovalError","ApprovalButtons","onApprove","onDeny","approveDisabled","Button","ExpiredNotice","note","fallback"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissionSections.js","sources":["../../../src/components/rbac/permissionSections.ts"],"sourcesContent":["import { groupInOrder } from \"../../lib/group-in-order\";\nimport type { Permission } from \"./types\";\n\n/* DX-4433: shared by `RolePermissionMatrix` (rows under a category header) and `PermissionRequestPanel` (checkboxes under a\n category legend), so the grouping rule has exactly one implementation. Not exported from the package. */\n\nexport interface PermissionSection {\n /** `undefined` when nothing in this matrix carries a `category` — see below. */\n label: string | undefined;\n items: Permission[];\n}\n\n/** Buckets permissions by `category` (the grouping rule is `groupInOrder`'s, shared with `ToggleMatrix`). */\nexport function groupByCategory(permissions: Permission[], otherLabel: string): PermissionSection[] {\n return groupInOrder(permissions, (permission) => permission.category, otherLabel);\n}\n"],"names":["groupByCategory","permissions","otherLabel","groupInOrder","permission"],"mappings":";AAaO,SAASA,EAAgBC,GAA2BC,GAAyC;AAClG,SAAOC,EAAaF,GAAa,CAACG,MAAeA,EAAW,UAAUF,CAAU;AAClF;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsxs as g, jsx as u } from "react/jsx-runtime";
|
|
2
|
+
import { useState as c, useCallback as f } from "react";
|
|
3
|
+
import { Button as m } from "../Button.js";
|
|
4
|
+
import { useUiStrings as p } from "../../lib/i18n/provider.js";
|
|
5
|
+
function k(t) {
|
|
6
|
+
const [a, r] = c(!1), [o, e] = c(!1), [i, s] = c(null), n = f((l) => {
|
|
7
|
+
l(), e(!1), s(null);
|
|
8
|
+
}, []), v = f(
|
|
9
|
+
async (l) => {
|
|
10
|
+
r(!0), s(null);
|
|
11
|
+
try {
|
|
12
|
+
await l(), e(!0);
|
|
13
|
+
} catch (d) {
|
|
14
|
+
s(d instanceof Error ? d.message : t);
|
|
15
|
+
} finally {
|
|
16
|
+
r(!1);
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
[t]
|
|
20
|
+
);
|
|
21
|
+
return { saving: a, saved: o, error: i, edit: n, save: v };
|
|
22
|
+
}
|
|
23
|
+
function w({
|
|
24
|
+
onSave: t,
|
|
25
|
+
onDiscard: a,
|
|
26
|
+
canSave: r,
|
|
27
|
+
canDiscard: o,
|
|
28
|
+
saving: e,
|
|
29
|
+
saveLabel: i,
|
|
30
|
+
discardLabel: s
|
|
31
|
+
}) {
|
|
32
|
+
const n = p().stagedForm;
|
|
33
|
+
return /* @__PURE__ */ g("div", { className: "flex flex-wrap gap-2", children: [
|
|
34
|
+
/* @__PURE__ */ u(m, { onClick: t, disabled: !r, loading: e, children: i ?? n.save }),
|
|
35
|
+
/* @__PURE__ */ u(m, { variant: "outline", onClick: a, disabled: !o || e, children: s ?? n.discard })
|
|
36
|
+
] });
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
w as StagedFormActions,
|
|
40
|
+
k as useSaveFlow
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=stagedForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stagedForm.js","sources":["../../../src/components/rbac/stagedForm.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\nimport { Button } from \"../Button\";\nimport { useUiStrings } from \"../../lib/i18n\";\n\n/* ============================================================================\n STAGED FORM (DX-4131)\n\n What `TeamSettingsForm` and `ProfileForm` share besides the staged image\n (`useStagedImage`): the save lifecycle and the Save/Discard row. Internal and\n unexported — one copy, so the two forms cannot drift on when a \"saved\"\n confirmation shows, what an edit clears, or when Discard is allowed.\n\n THE EDIT RULE. Every edit, and Discard, goes through `edit`, which retires the\n last outcome: a stale \"saved\" or error would describe a form that no longer\n exists (a Discard that left \"saved\" set would flash it back the moment the\n draft became clean again).\n ========================================================================= */\n\nexport interface SaveFlow {\n saving: boolean;\n /** The last Save resolved and nothing has been edited since. */\n saved: boolean;\n error: string | null;\n /** Run a draft change (an edit, or a Discard) and retire the last outcome. */\n edit: (change: () => void) => void;\n /** Run the consumer's `onSave`; a rejection's message (or `failureMessage`) becomes `error`. */\n save: (run: () => Promise<void>) => Promise<void>;\n}\n\nexport function useSaveFlow(failureMessage: string): SaveFlow {\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const edit = useCallback((change: () => void) => {\n change();\n setSaved(false);\n setError(null);\n }, []);\n\n const save = useCallback(\n async (run: () => Promise<void>) => {\n setSaving(true);\n setError(null);\n try {\n await run();\n setSaved(true);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : failureMessage);\n } finally {\n setSaving(false);\n }\n },\n [failureMessage],\n );\n\n return { saving, saved, error, edit, save };\n}\n\nexport interface StagedFormActionsProps {\n onSave: () => void;\n onDiscard: () => void;\n /** The draft is valid, changed, and nothing is in flight. */\n canSave: boolean;\n /** The draft differs from what is saved in ANY way, including whitespace Save would trim away. */\n canDiscard: boolean;\n saving: boolean;\n /** The Save button's text; omit for the built-in one. */\n saveLabel?: string;\n /** The Discard button's text; omit for the built-in one. */\n discardLabel?: string;\n}\n\nexport function StagedFormActions({\n onSave,\n onDiscard,\n canSave,\n canDiscard,\n saving,\n saveLabel,\n discardLabel,\n}: StagedFormActionsProps) {\n const strings = useUiStrings().stagedForm;\n return (\n <div className=\"flex flex-wrap gap-2\">\n <Button onClick={onSave} disabled={!canSave} loading={saving}>\n {saveLabel ?? strings.save}\n </Button>\n <Button variant=\"outline\" onClick={onDiscard} disabled={!canDiscard || saving}>\n {discardLabel ?? strings.discard}\n </Button>\n </div>\n );\n}\n"],"names":["useSaveFlow","failureMessage","saving","setSaving","useState","saved","setSaved","error","setError","edit","useCallback","change","save","run","cause","StagedFormActions","onSave","onDiscard","canSave","canDiscard","saveLabel","discardLabel","strings","useUiStrings","jsxs","jsx","Button"],"mappings":";;;;AA6BO,SAASA,EAAYC,GAAkC;AAC5D,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK,GACpC,CAACC,GAAOC,CAAQ,IAAIF,EAAS,EAAK,GAClC,CAACG,GAAOC,CAAQ,IAAIJ,EAAwB,IAAI,GAEhDK,IAAOC,EAAY,CAACC,MAAuB;AAC/C,IAAAA,EAAA,GACAL,EAAS,EAAK,GACdE,EAAS,IAAI;AAAA,EACf,GAAG,CAAA,CAAE,GAECI,IAAOF;AAAA,IACX,OAAOG,MAA6B;AAClC,MAAAV,EAAU,EAAI,GACdK,EAAS,IAAI;AACb,UAAI;AACF,cAAMK,EAAA,GACNP,EAAS,EAAI;AAAA,MACf,SAASQ,GAAO;AACd,QAAAN,EAASM,aAAiB,QAAQA,EAAM,UAAUb,CAAc;AAAA,MAClE,UAAA;AACE,QAAAE,EAAU,EAAK;AAAA,MACjB;AAAA,IACF;AAAA,IACA,CAACF,CAAc;AAAA,EAAA;AAGjB,SAAO,EAAE,QAAAC,GAAQ,OAAAG,GAAO,OAAAE,GAAO,MAAAE,GAAM,MAAAG,EAAA;AACvC;AAgBO,SAASG,EAAkB;AAAA,EAChC,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAjB;AAAA,EACA,WAAAkB;AAAA,EACA,cAAAC;AACF,GAA2B;AACzB,QAAMC,IAAUC,IAAe;AAC/B,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAO,SAASV,GAAQ,UAAU,CAACE,GAAS,SAAShB,GACnD,UAAAkB,KAAaE,EAAQ,KAAA,CACxB;AAAA,IACA,gBAAAG,EAACC,GAAA,EAAO,SAAQ,WAAU,SAAST,GAAW,UAAU,CAACE,KAAcjB,GACpE,UAAAmB,KAAgBC,EAAQ,QAAA,CAC3B;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useState as o, useCallback as s } from "react";
|
|
2
|
+
function y(c, n) {
|
|
3
|
+
const l = c ?? null, [t, a] = o(null), [d, u] = o(!1);
|
|
4
|
+
t && t.url === l && a(null);
|
|
5
|
+
const r = t ? t.url : l, i = s((e) => a({ url: e }), []), g = s(() => a(null), []), f = s(
|
|
6
|
+
async (e) => {
|
|
7
|
+
u(!0);
|
|
8
|
+
try {
|
|
9
|
+
return await n(e);
|
|
10
|
+
} finally {
|
|
11
|
+
u(!1);
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
[n]
|
|
15
|
+
);
|
|
16
|
+
return { value: r, dirty: r !== l, uploading: d, stage: i, discard: g, upload: f };
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
y as useStagedImage
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=useStagedImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStagedImage.js","sources":["../../../src/components/rbac/useStagedImage.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\n/* ============================================================================\n USE STAGED IMAGE (DX-4131)\n\n The one piece of state `TeamSettingsForm`'s logo and `ProfileForm`'s avatar\n share: an image that is PICKED and PREVIEWED immediately but only PERSISTED\n when the consumer's Save runs. Internal to the rbac forms — deliberately not\n exported from the package, so the public surface stays the two forms and the\n `logoUrl`/`avatarUrl` contract they document.\n\n THE CONTRACT THIS HOOK ENCODES, which both forms turn into their `onSave`\n input. `dirty` is true exactly while the staged value differs from the saved\n one; the form then puts the key in its `onSave` input (a string sets the\n image, `null` removes it), and while `dirty` is false it leaves the key OUT\n ENTIRELY — an omitted key means \"keep what is stored\", so a rename-only Save\n can never wipe an image. That is the same three-state rule a `PATCH` body\n follows (omitted keeps, `null` clears, string sets).\n\n STAGED OVER SAVED, NOT A COPY OF IT. Only an explicit stage/remove writes\n `staged`; until then the value IS the `saved` prop, so a background refetch\n of the saved image shows through instead of being masked by a stale copy.\n The staged value is dropped the moment it equals the saved one — which is\n exactly what a successful Save does when the parent passes the new URL back —\n so a LATER change to the saved image shows through too, instead of the form\n holding the old staged URL and sending it back on the next Save. (So the\n `saved` prop is expected to change only once a Save has succeeded; a parent\n that updates it optimistically and rolls back on failure loses the staged\n image with the rollback.)\n\n `upload` wraps the consumer's `onUpload` only to expose `uploading`, so a\n form can hold Save back while a pick is in flight — otherwise a click during\n the upload would save without the image that is about to arrive. The URL it\n resolves with is RETURNED (for `ImageUploadField` to hand to `onChange`),\n never staged here: staging happens in the one `stage` call the field's\n `onChange` makes.\n ========================================================================= */\n\nexport interface StagedImage {\n /** What to show: the staged URL (or `null` for a staged removal), else the saved one. */\n value: string | null;\n /** The staged value differs from the saved one — the form must send it on Save. */\n dirty: boolean;\n /** A pick is mid-upload. */\n uploading: boolean;\n /** Stage a URL, or `null` to stage a removal. */\n stage: (url: string | null) => void;\n /** Drop the staged value and go back to the saved one. */\n discard: () => void;\n /** Pass to `ImageUploadField.onUpload`. */\n upload: (file: File) => Promise<string>;\n}\n\nexport function useStagedImage(\n saved: string | null | undefined,\n onUpload: (file: File) => Promise<string>,\n): StagedImage {\n const savedUrl = saved ?? null;\n // `{ url }` rather than `string | null | undefined`: a staged `null` (remove) must be\n // distinguishable from \"nothing staged\".\n const [staged, setStaged] = useState<{ url: string | null } | null>(null);\n const [uploading, setUploading] = useState(false);\n\n // Adjusting state during render (the React-sanctioned way to derive from props): the\n // staged value has been saved (or was staged back to the saved one), so stop holding it.\n if (staged && staged.url === savedUrl) setStaged(null);\n\n const value = staged ? staged.url : savedUrl;\n\n const stage = useCallback((url: string | null) => setStaged({ url }), []);\n const discard = useCallback(() => setStaged(null), []);\n\n const upload = useCallback(\n async (file: File) => {\n setUploading(true);\n try {\n return await onUpload(file);\n } finally {\n setUploading(false);\n }\n },\n [onUpload],\n );\n\n return { value, dirty: value !== savedUrl, uploading, stage, discard, upload };\n}\n\n"],"names":["useStagedImage","saved","onUpload","savedUrl","staged","setStaged","useState","uploading","setUploading","value","stage","useCallback","url","discard","upload","file"],"mappings":";AAqDO,SAASA,EACdC,GACAC,GACa;AACb,QAAMC,IAAWF,KAAS,MAGpB,CAACG,GAAQC,CAAS,IAAIC,EAAwC,IAAI,GAClE,CAACC,GAAWC,CAAY,IAAIF,EAAS,EAAK;AAIhD,EAAIF,KAAUA,EAAO,QAAQD,OAAoB,IAAI;AAErD,QAAMM,IAAQL,IAASA,EAAO,MAAMD,GAE9BO,IAAQC,EAAY,CAACC,MAAuBP,EAAU,EAAE,KAAAO,EAAA,CAAK,GAAG,EAAE,GAClEC,IAAUF,EAAY,MAAMN,EAAU,IAAI,GAAG,CAAA,CAAE,GAE/CS,IAASH;AAAA,IACb,OAAOI,MAAe;AACpB,MAAAP,EAAa,EAAI;AACjB,UAAI;AACF,eAAO,MAAMN,EAASa,CAAI;AAAA,MAC5B,UAAA;AACE,QAAAP,EAAa,EAAK;AAAA,MACpB;AAAA,IACF;AAAA,IACA,CAACN,CAAQ;AAAA,EAAA;AAGX,SAAO,EAAE,OAAAO,GAAO,OAAOA,MAAUN,GAAU,WAAAI,GAAW,OAAAG,GAAO,SAAAG,GAAS,QAAAC,EAAA;AACxE;"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import { Badge as u } from "../Badge.js";
|
|
3
|
+
import { OrderedEntityManager as b } from "../OrderedEntityManager.js";
|
|
4
|
+
import { useUiStrings as h } from "../../lib/i18n/provider.js";
|
|
5
|
+
import { useNumberFormat as M } from "../../lib/i18n/number-format.js";
|
|
6
|
+
function F({
|
|
7
|
+
phases: s,
|
|
8
|
+
roadmapItems: d,
|
|
9
|
+
onCreate: m,
|
|
10
|
+
onRename: c,
|
|
11
|
+
onReorder: l,
|
|
12
|
+
onDelete: p,
|
|
13
|
+
className: g
|
|
14
|
+
}) {
|
|
15
|
+
const e = h().phaseManager, r = M(), o = /* @__PURE__ */ new Map();
|
|
16
|
+
for (const t of d)
|
|
17
|
+
o.set(t.phaseId, (o.get(t.phaseId) ?? 0) + 1);
|
|
18
|
+
function f(t) {
|
|
19
|
+
const n = o.get(t.id) ?? 0, a = n > 0;
|
|
20
|
+
return {
|
|
21
|
+
badge: a && /* @__PURE__ */ i(u, { size: "sm", tone: "warning", className: "shrink-0", children: e.inUse(n, r(n)) }),
|
|
22
|
+
disabledReason: a ? e.deleteBlocked(n, r(n), t.name) : void 0
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
return /* @__PURE__ */ i(
|
|
26
|
+
b,
|
|
27
|
+
{
|
|
28
|
+
items: s,
|
|
29
|
+
title: e.title,
|
|
30
|
+
description: e.description,
|
|
31
|
+
emptyMessage: e.empty,
|
|
32
|
+
addFieldLabel: e.addFieldLabel,
|
|
33
|
+
addPlaceholder: e.addPlaceholder,
|
|
34
|
+
containerId: "phases",
|
|
35
|
+
containerLabel: e.containerLabel,
|
|
36
|
+
onCreate: m,
|
|
37
|
+
onRename: c,
|
|
38
|
+
onReorder: l,
|
|
39
|
+
onDelete: p,
|
|
40
|
+
rowStatus: f,
|
|
41
|
+
className: g
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
export {
|
|
46
|
+
F as PhaseManager
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=PhaseManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhaseManager.js","sources":["../../../src/components/roadmap/PhaseManager.tsx"],"sourcesContent":["import { useNumberFormat, useUiStrings } from \"../../lib/i18n\";\nimport { Badge } from \"../Badge\";\nimport { OrderedEntityManager, type OrderedEntityRowStatus } from \"../OrderedEntityManager\";\nimport type { Phase, RoadmapItem } from \"./types\";\n\n/* ============================================================================\n PHASE MANAGER — dev-only CRUD surface for the `Phase` list.\n\n Mounted only inside `UseCaseLedgerPage`, never `RoadmapPage` — Phase is an\n internal planning concern (which bucket an item sorts into), not something\n a prospect looking at the public roadmap needs to reorder.\n\n CALLBACKS, NOT STORE AWARENESS — the exact pattern `AccountMenu` already\n uses (see that file's own banner). This component reads `phases` and\n `roadmapItems` as plain props and fires `onCreate` / `onRename` /\n `onReorder` / `onDelete`; it has no idea a `createSimStore` exists on the\n other side of those calls, so a consuming app can wire the same four\n callbacks straight to a real API with zero changes here.\n\n THE STATE MACHINE AND ROW CHROME LIVE IN `OrderedEntityManager` (DX-3254) —\n this file's only job is `rowStatus`, below, which is the delete guard.\n\n THE DELETE GUARD IS THE POINT OF THIS FILE. A `RoadmapItem.phaseId` is\n required — there is no \"no phase\" state (`types.ts`) — so deleting a Phase\n still referenced by an item would either orphan that item's `phaseId` or\n force a silent cascade delete, and neither is a decision this component is\n allowed to make quietly. Blocking is paired with a Badge that STATES the\n count, always rendered next to the disabled action — never a disabled\n button standing alone with no visible reason.\n\n THE BADGE WAS NOT ENOUGH, and it is worth recording why, because the first\n version of this file believed it was. A Badge reading \"In use by 11 items\"\n sits BESIDE the control; it is a fact about the row, and a reader has to\n infer that it is also the reason the button beside it will not respond.\n Meanwhile the button itself was natively `disabled`, which under this\n library's `disabled:pointer-events-none` removes it from hit-testing\n entirely — so the one gesture anybody makes when a control ignores them\n (point at it and wait) produced nothing at all. The guard was doing exactly\n its job and still read as a broken button.\n\n The refusal now lives ON the control, via `IconButton`'s `disabledReason` —\n which is the only way to turn one off, so it cannot be dropped. The Badge\n stays: it is the at-a-glance form, readable without pointing at anything.\n ========================================================================= */\n\nexport interface PhaseManagerProps {\n phases: Phase[];\n /** Read-only — used only to compute the delete guard below. */\n roadmapItems: RoadmapItem[];\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: (phase: { name: string; order: number }) => void;\n onRename: (id: string, name: string) => void;\n /** The full phase list, reordered and renumbered (`order` === new index) —\n the caller persists each row's new `order`, e.g. one `update` per id. */\n onReorder: (phases: Phase[]) => void;\n onDelete: (id: string) => void;\n className?: string;\n}\n\nexport function PhaseManager({\n phases,\n roadmapItems,\n onCreate,\n onRename,\n onReorder,\n onDelete,\n className,\n}: PhaseManagerProps) {\n const strings = useUiStrings().phaseManager;\n const fmt = useNumberFormat();\n /* Counted once per render rather than re-scanning `roadmapItems` per row —\n the same reasoning `groupByGoalRef` documents in the sibling board/ledger\n files, applied to a smaller map. */\n const inUseCount = new Map<string, number>();\n for (const item of roadmapItems) {\n inUseCount.set(item.phaseId, (inUseCount.get(item.phaseId) ?? 0) + 1);\n }\n\n function rowStatus(phase: Phase): OrderedEntityRowStatus {\n const inUse = inUseCount.get(phase.id) ?? 0;\n const blocked = inUse > 0;\n return {\n badge: blocked && (\n <Badge size=\"sm\" tone=\"warning\" className=\"shrink-0\">\n {strings.inUse(inUse, fmt(inUse))}\n </Badge>\n ),\n disabledReason: blocked\n ? strings.deleteBlocked(inUse, fmt(inUse), phase.name)\n : undefined,\n };\n }\n\n return (\n <OrderedEntityManager\n items={phases}\n title={strings.title}\n description={strings.description}\n emptyMessage={strings.empty}\n addFieldLabel={strings.addFieldLabel}\n addPlaceholder={strings.addPlaceholder}\n containerId=\"phases\"\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":["PhaseManager","phases","roadmapItems","onCreate","onRename","onReorder","onDelete","className","strings","useUiStrings","fmt","useNumberFormat","inUseCount","item","rowStatus","phase","inUse","blocked","jsx","Badge","OrderedEntityManager"],"mappings":";;;;;AA4DO,SAASA,EAAa;AAAA,EAC3B,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AACF,GAAsB;AACpB,QAAMC,IAAUC,IAAe,cACzBC,IAAMC,EAAA,GAINC,wBAAiB,IAAA;AACvB,aAAWC,KAAQX;AACjB,IAAAU,EAAW,IAAIC,EAAK,UAAUD,EAAW,IAAIC,EAAK,OAAO,KAAK,KAAK,CAAC;AAGtE,WAASC,EAAUC,GAAsC;AACvD,UAAMC,IAAQJ,EAAW,IAAIG,EAAM,EAAE,KAAK,GACpCE,IAAUD,IAAQ;AACxB,WAAO;AAAA,MACL,OAAOC,KACL,gBAAAC,EAACC,GAAA,EAAM,MAAK,MAAK,MAAK,WAAU,WAAU,YACvC,YAAQ,MAAMH,GAAON,EAAIM,CAAK,CAAC,GAClC;AAAA,MAEF,gBAAgBC,IACZT,EAAQ,cAAcQ,GAAON,EAAIM,CAAK,GAAGD,EAAM,IAAI,IACnD;AAAA,IAAA;AAAA,EAER;AAEA,SACE,gBAAAG;AAAA,IAACE;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,WAAAQ;AAAA,MACA,WAAAP;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|