@50arms/ui 0.0.0-stage → 35.2.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 +169 -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 +332 -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 +22 -0
- package/dist/types/components/rbac/ApiKeysPanel.d.ts +26 -0
- package/dist/types/components/rbac/ApiKeysTable.d.ts +65 -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 +635 -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":"RBACProvider.js","sources":["../../../src/components/rbac/RBACProvider.tsx"],"sourcesContent":["import {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport type { Permission, Role, Team, TeamMembership, User } from \"./types\";\n\n/* ============================================================================\n RBAC PROVIDER\n\n This is the ONE place in the library that turns a consumer's roles,\n permissions, memberships and team into an answer to \"what can the current\n view do?\" — everything downstream (`AccountMenu`, `DevToolsPopover`,\n `RolePermissionMatrix`, the two pages) reads the derived shape below and\n never re-derives it, so there is exactly one place a future change to the\n derivation logic has to happen.\n\n THE ROLE THE LIBRARY REFUSES TO PLAY: it never knows what a role IS. It\n compares `Role.id` values, unions `Role.permissionKeys` into a `Set`, and\n looks up a `Permission.label` to show a human a sentence — the same\n arm's-length relationship `DataTable` has with the rows a consumer hands it.\n A component here that special-cased a role by name would be exactly the\n defect this file exists to prevent.\n\n IMPERSONATION IS A ROLE SWAP, NOT A USER SWAP. `viewingAsRoleId` never\n changes `actualUser` — the type contract has no notion of \"become a\n different person,\" only \"see the app as a different role would.\" That is\n why `actualUser` is a fixed field on the hook result and every other field\n that varies with impersonation is named `effective*`.\n ========================================================================= */\n\nexport interface RBACProviderProps {\n currentUser: User;\n roles: Role[];\n permissions: Permission[];\n teams: Team[];\n /** All memberships for `currentUser`, across every team — not just the current one. */\n memberships: TeamMembership[];\n currentTeamId: string;\n /**\n * Decides who may open the Dev Tools \"view as\" escape hatch.\n *\n * Deliberately a predicate over the consumer's OWN data (`user`, `roles`,\n * `memberships`) rather than a boolean prop or a hardcoded role check. The\n * library has no idea what \"admin enough to use dev tools\" means for any\n * given consumer — one app might key it off a role id, another off a team\n * membership count, another off a flag on `User` this contract doesn't even\n * define. Only the consumer's own data model can answer that, so the\n * decision is handed back to them wholesale.\n */\n canAccessDevTools: (user: User, roles: Role[], memberships: TeamMembership[]) => boolean;\n children: ReactNode;\n}\n\nexport interface RBACHookResult {\n actualUser: User;\n currentTeam: Team | undefined;\n /** The role backing `actualUser`'s own membership in `currentTeamId` — never affected by impersonation. */\n actualRole: Role | undefined;\n /** `null` when not impersonating. */\n viewingAsRoleId: string | null;\n setViewingAsRoleId: (id: string | null) => void;\n /** `actualRole`, unless impersonating — then the impersonated role. */\n effectiveRole: Role | undefined;\n effectivePermissionKeys: Set<string>;\n /** `permissions`, filtered to the ones `effectiveRole` actually grants —\n * every surface that lists \"what can this role do\" (`AccountMenu`,\n * `ProfilePage`) reads this instead of re-deriving the same filter\n * (DX-3254: the two used to keep independent copies of it). */\n grantedPermissions: Permission[];\n hasPermission: (key: string) => boolean;\n /**\n * Whether the REAL logged-in user may open Dev Tools.\n *\n * See the block comment above `evaluateCanAccessDevTools` below for why this\n * is computed from `actualUser`/`roles`/`memberships` and can NEVER be\n * re-derived from `effectiveRole` / `viewingAsRoleId` — that is the entire\n * point of this field existing on the hook at all.\n */\n canAccessDevTools: boolean;\n isImpersonating: boolean;\n roles: Role[];\n permissions: Permission[];\n teams: Team[];\n}\n\nconst RBACContext = createContext<RBACHookResult | null>(null);\n\nexport function RBACProvider({\n currentUser,\n roles,\n permissions,\n teams,\n memberships,\n currentTeamId,\n canAccessDevTools,\n children,\n}: RBACProviderProps) {\n /* Impersonation is view-local UI state, not something a consumer persists —\n it lives here, in the provider, and resets to \"not impersonating\" on\n every fresh mount (a reload of the app is the same as clicking \"Reset to\n actual\"). Session-persisting it would mean a support engineer who forgot\n to reset before closing their laptop comes back tomorrow still wearing\n someone else's permissions, which is a worse failure mode than having to\n re-pick the role once. */\n const [viewingAsRoleId, setViewingAsRoleId] = useState<string | null>(null);\n\n const currentTeam = useMemo(\n () => teams.find((team) => team.id === currentTeamId),\n [teams, currentTeamId],\n );\n\n const actualRole = useMemo(() => {\n /* Both conditions are checked even though the prop doc promises\n `memberships` is already scoped to `currentUser` — a provider that is\n ever handed an unfiltered list should still resolve the CORRECT\n membership rather than silently pick up a different user's row that\n happens to share a team id. */\n const membership = memberships.find(\n (candidate) => candidate.userId === currentUser.id && candidate.teamId === currentTeamId,\n );\n if (!membership) return undefined;\n return roles.find((role) => role.id === membership.roleId);\n }, [memberships, roles, currentUser.id, currentTeamId]);\n\n const effectiveRole = useMemo(\n () => (viewingAsRoleId ? roles.find((role) => role.id === viewingAsRoleId) : actualRole),\n [viewingAsRoleId, roles, actualRole],\n );\n\n const effectivePermissionKeys = useMemo(\n () => new Set(effectiveRole?.permissionKeys ?? []),\n [effectiveRole],\n );\n\n const hasPermission = useCallback(\n (key: string) => effectivePermissionKeys.has(key),\n [effectivePermissionKeys],\n );\n\n const grantedPermissions = useMemo(\n () => permissions.filter((permission) => effectivePermissionKeys.has(permission.key)),\n [permissions, effectivePermissionKeys],\n );\n\n /* ---------------------------------------------------------------------\n THE GUARANTEE THIS WHOLE FILE EXISTS FOR.\n\n `canAccessDevTools` is evaluated against `currentUser` / `roles` /\n `memberships` — the PROVIDER'S OWN PROPS — and nothing derived from\n `viewingAsRoleId` or `effectiveRole` appears anywhere in this\n dependency list. That omission is deliberate, not an oversight: Dev\n Tools is the control that UNDOES impersonation, so if its own\n visibility were computed from the impersonated view, impersonating any\n role the predicate rejects would hide the only door back out. A support\n engineer who wanted to see the app as a locked-down role would find\n themselves stuck in it, and the one truth Dev Tools cannot recover from\n losing is a way to reset itself.\n\n Read literally: this line answers \"can the REAL PERSON currently at\n the keyboard use Dev Tools,\" and impersonation never gets a vote.\n ------------------------------------------------------------------ */\n const canAccessDevToolsValue = useMemo(\n () => canAccessDevTools(currentUser, roles, memberships),\n [canAccessDevTools, currentUser, roles, memberships],\n );\n\n const value = useMemo<RBACHookResult>(\n () => ({\n actualUser: currentUser,\n currentTeam,\n actualRole,\n viewingAsRoleId,\n setViewingAsRoleId,\n effectiveRole,\n effectivePermissionKeys,\n grantedPermissions,\n hasPermission,\n canAccessDevTools: canAccessDevToolsValue,\n isImpersonating: viewingAsRoleId !== null,\n roles,\n permissions,\n teams,\n }),\n [\n currentUser,\n currentTeam,\n actualRole,\n viewingAsRoleId,\n effectiveRole,\n effectivePermissionKeys,\n grantedPermissions,\n hasPermission,\n canAccessDevToolsValue,\n roles,\n permissions,\n teams,\n ],\n );\n\n return <RBACContext.Provider value={value}>{children}</RBACContext.Provider>;\n}\n\n/**\n * Reads the RBAC context.\n *\n * Throws rather than returning `undefined` — the same shape as\n * `useDragDrop` / `useDragDropContainer` (`drag-drop/context.ts`) and every\n * other multi-part context in this library. A component that silently\n * received `undefined` here would fail wherever it FIRST tries to read a\n * field off the result, several lines and possibly several components away\n * from the actual mistake (forgetting the `<RBACProvider>` wrapper) — a\n * blank permissions list is a much harder bug to trace back than a thrown\n * error naming the missing provider.\n */\nexport function useRBAC(): RBACHookResult {\n const value = useContext(RBACContext);\n if (!value) {\n throw new Error(\"useRBAC must be used within an <RBACProvider>.\");\n }\n return value;\n}\n"],"names":["RBACContext","createContext","RBACProvider","currentUser","roles","permissions","teams","memberships","currentTeamId","canAccessDevTools","children","viewingAsRoleId","setViewingAsRoleId","useState","currentTeam","useMemo","team","actualRole","membership","candidate","role","effectiveRole","effectivePermissionKeys","hasPermission","useCallback","key","grantedPermissions","permission","canAccessDevToolsValue","value","jsx","useRBAC","useContext"],"mappings":";;AAyFA,MAAMA,IAAcC,EAAqC,IAAI;AAEtD,SAASC,EAAa;AAAA,EAC3B,aAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,UAAAC;AACF,GAAsB;AAQpB,QAAM,CAACC,GAAiBC,CAAkB,IAAIC,EAAwB,IAAI,GAEpEC,IAAcC;AAAA,IAClB,MAAMT,EAAM,KAAK,CAACU,MAASA,EAAK,OAAOR,CAAa;AAAA,IACpD,CAACF,GAAOE,CAAa;AAAA,EAAA,GAGjBS,IAAaF,EAAQ,MAAM;AAM/B,UAAMG,IAAaX,EAAY;AAAA,MAC7B,CAACY,MAAcA,EAAU,WAAWhB,EAAY,MAAMgB,EAAU,WAAWX;AAAA,IAAA;AAE7E,QAAKU;AACL,aAAOd,EAAM,KAAK,CAACgB,MAASA,EAAK,OAAOF,EAAW,MAAM;AAAA,EAC3D,GAAG,CAACX,GAAaH,GAAOD,EAAY,IAAIK,CAAa,CAAC,GAEhDa,IAAgBN;AAAA,IACpB,MAAOJ,IAAkBP,EAAM,KAAK,CAACgB,MAASA,EAAK,OAAOT,CAAe,IAAIM;AAAA,IAC7E,CAACN,GAAiBP,GAAOa,CAAU;AAAA,EAAA,GAG/BK,IAA0BP;AAAA,IAC9B,MAAM,IAAI,IAAIM,GAAe,kBAAkB,CAAA,CAAE;AAAA,IACjD,CAACA,CAAa;AAAA,EAAA,GAGVE,IAAgBC;AAAA,IACpB,CAACC,MAAgBH,EAAwB,IAAIG,CAAG;AAAA,IAChD,CAACH,CAAuB;AAAA,EAAA,GAGpBI,IAAqBX;AAAA,IACzB,MAAMV,EAAY,OAAO,CAACsB,MAAeL,EAAwB,IAAIK,EAAW,GAAG,CAAC;AAAA,IACpF,CAACtB,GAAaiB,CAAuB;AAAA,EAAA,GAoBjCM,IAAyBb;AAAA,IAC7B,MAAMN,EAAkBN,GAAaC,GAAOG,CAAW;AAAA,IACvD,CAACE,GAAmBN,GAAaC,GAAOG,CAAW;AAAA,EAAA,GAG/CsB,IAAQd;AAAA,IACZ,OAAO;AAAA,MACL,YAAYZ;AAAA,MACZ,aAAAW;AAAA,MACA,YAAAG;AAAA,MACA,iBAAAN;AAAA,MACA,oBAAAC;AAAA,MACA,eAAAS;AAAA,MACA,yBAAAC;AAAA,MACA,oBAAAI;AAAA,MACA,eAAAH;AAAA,MACA,mBAAmBK;AAAA,MACnB,iBAAiBjB,MAAoB;AAAA,MACrC,OAAAP;AAAA,MACA,aAAAC;AAAA,MACA,OAAAC;AAAA,IAAA;AAAA,IAEF;AAAA,MACEH;AAAA,MACAW;AAAA,MACAG;AAAA,MACAN;AAAA,MACAU;AAAA,MACAC;AAAA,MACAI;AAAA,MACAH;AAAA,MACAK;AAAA,MACAxB;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA;AAAA,EACF;AAGF,SAAO,gBAAAwB,EAAC9B,EAAY,UAAZ,EAAqB,OAAA6B,GAAe,UAAAnB,EAAA,CAAS;AACvD;AAcO,SAASqB,IAA0B;AACxC,QAAMF,IAAQG,EAAWhC,CAAW;AACpC,MAAI,CAAC6B;AACH,UAAM,IAAI,MAAM,gDAAgD;AAElE,SAAOA;AACT;"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { jsx as t, jsxs as d, Fragment as F } from "react/jsx-runtime";
|
|
2
|
+
import { useState as u, useEffect as N } from "react";
|
|
3
|
+
import { Button as D } from "../Button.js";
|
|
4
|
+
import { Dialog as T } from "../Dialog.js";
|
|
5
|
+
import { Field as m } from "../Field.js";
|
|
6
|
+
import { Input as j, Textarea as k } from "../Input.js";
|
|
7
|
+
import { Select as L, SelectItem as S } from "../Select.js";
|
|
8
|
+
import { useUiStrings as R } from "../../lib/i18n/provider.js";
|
|
9
|
+
const c = "__none__";
|
|
10
|
+
function y({
|
|
11
|
+
mode: l,
|
|
12
|
+
open: o,
|
|
13
|
+
onOpenChange: p,
|
|
14
|
+
cloneFromRoles: a,
|
|
15
|
+
initialLabel: h = "",
|
|
16
|
+
initialDescription: f = "",
|
|
17
|
+
loading: i = !1,
|
|
18
|
+
onSubmit: I,
|
|
19
|
+
className: _
|
|
20
|
+
}) {
|
|
21
|
+
const e = R().roleEditorDialog, [n, b] = u(h), [v, g] = u(f), [s, x] = u(c);
|
|
22
|
+
N(() => {
|
|
23
|
+
o && (b(h), g(f), x(c));
|
|
24
|
+
}, [o]);
|
|
25
|
+
const C = n.trim().length > 0 && !i, E = () => {
|
|
26
|
+
C && I({
|
|
27
|
+
label: n.trim(),
|
|
28
|
+
description: v.trim(),
|
|
29
|
+
cloneFromRoleId: l === "create" && s !== c ? s : void 0
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
return /* @__PURE__ */ t(
|
|
33
|
+
T,
|
|
34
|
+
{
|
|
35
|
+
open: o,
|
|
36
|
+
onOpenChange: p,
|
|
37
|
+
title: l === "create" ? e.createTitle : e.editTitle,
|
|
38
|
+
description: l === "create" ? e.createDescription : e.editDescription,
|
|
39
|
+
className: _,
|
|
40
|
+
actions: /* @__PURE__ */ d(F, { children: [
|
|
41
|
+
/* @__PURE__ */ t(D, { variant: "outline", onClick: () => p(!1), disabled: i, children: e.cancel }),
|
|
42
|
+
/* @__PURE__ */ t(D, { onClick: E, disabled: !C, loading: i, children: l === "create" ? e.create : e.save })
|
|
43
|
+
] }),
|
|
44
|
+
children: /* @__PURE__ */ d("div", { className: "flex flex-col gap-4", children: [
|
|
45
|
+
/* @__PURE__ */ t(m, { label: e.label, children: /* @__PURE__ */ t(
|
|
46
|
+
j,
|
|
47
|
+
{
|
|
48
|
+
value: n,
|
|
49
|
+
onChange: (r) => b(r.target.value),
|
|
50
|
+
placeholder: e.labelPlaceholder,
|
|
51
|
+
disabled: i,
|
|
52
|
+
autoFocus: !0
|
|
53
|
+
}
|
|
54
|
+
) }),
|
|
55
|
+
/* @__PURE__ */ t(m, { label: e.description, description: e.descriptionHint, children: /* @__PURE__ */ t(
|
|
56
|
+
k,
|
|
57
|
+
{
|
|
58
|
+
value: v,
|
|
59
|
+
onChange: (r) => g(r.target.value),
|
|
60
|
+
rows: 3,
|
|
61
|
+
disabled: i
|
|
62
|
+
}
|
|
63
|
+
) }),
|
|
64
|
+
l === "create" && a && a.length > 0 && /* @__PURE__ */ t(
|
|
65
|
+
m,
|
|
66
|
+
{
|
|
67
|
+
label: e.cloneLabel,
|
|
68
|
+
description: e.cloneDescription,
|
|
69
|
+
children: /* @__PURE__ */ d(
|
|
70
|
+
L,
|
|
71
|
+
{
|
|
72
|
+
value: s,
|
|
73
|
+
onValueChange: (r) => x(r ?? c),
|
|
74
|
+
disabled: i,
|
|
75
|
+
children: [
|
|
76
|
+
/* @__PURE__ */ t(S, { value: c, children: e.cloneNone }),
|
|
77
|
+
a.map((r) => /* @__PURE__ */ t(S, { value: r.id, children: r.label }, r.id))
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
] })
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
export {
|
|
88
|
+
y as RoleEditorDialog
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=RoleEditorDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleEditorDialog.js","sources":["../../../src/components/rbac/RoleEditorDialog.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { Button } from \"../Button\";\nimport { Dialog } from \"../Dialog\";\nimport { Field } from \"../Field\";\nimport { Input, Textarea } from \"../Input\";\nimport { Select, SelectItem } from \"../Select\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport type { Role } from \"./types\";\n\n/* ============================================================================\n ROLE EDITOR DIALOG\n\n One dialog, two modes. CREATE names a brand-new custom role and, optionally,\n seeds its permission set from an existing role (\"clone from\") so an operator\n never has to rebuild a near-duplicate permission set one checkbox at a time\n in the matrix afterward. EDIT renames/re-describes an existing role — its\n PERMISSION set is not edited here at all; that stays the matrix's job\n (`RolePermissionMatrix`'s `editable`/`onChange`), so this dialog never\n duplicates that surface.\n\n PRESENTATIONAL ONLY, same relationship every other `rbac/` component has\n with its data (`types.ts`'s own header): `onSubmit` hands back plain field\n values, and the consumer decides what \"create\" or \"rename\" means against\n its own API. Local `useState` only, reset whenever `open` flips true — the\n same \"no persistence layer\" contract `ProfilePage`'s own header describes.\n ========================================================================= */\n\nexport interface RoleEditorDialogSubmitInput {\n label: string;\n description: string;\n /** Only ever sent from CREATE mode — see this file's own header. `undefined` when no clone-from role was picked. */\n cloneFromRoleId?: string;\n}\n\nexport interface RoleEditorDialogProps {\n mode: \"create\" | \"edit\";\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /**\n * CREATE mode only — the roles offered as \"clone permissions from\" (a\n * consumer typically hands every role the matrix already shows, owner\n * included: cloning owner's COMPUTED set is a legitimate way to seed a\n * near-owner role). Omitted or empty simply hides the field — a consumer\n * with nothing to clone from does not owe this dialog an empty array.\n */\n cloneFromRoles?: Role[];\n /** EDIT mode — the role's current values, so the fields open pre-filled rather than blank. */\n initialLabel?: string;\n initialDescription?: string;\n /** Disables the form and shows a busy submit button while a save is in flight. */\n loading?: boolean;\n onSubmit: (input: RoleEditorDialogSubmitInput) => void;\n className?: string;\n}\n\n// I18N-ALLOW: sentinel select value meaning no role was chosen to clone\nconst NO_CLONE = \"__none__\";\n\nexport function RoleEditorDialog({\n mode,\n open,\n onOpenChange,\n cloneFromRoles,\n initialLabel = \"\",\n initialDescription = \"\",\n loading = false,\n onSubmit,\n className,\n}: RoleEditorDialogProps) {\n const strings = useUiStrings().roleEditorDialog;\n const [label, setLabel] = useState(initialLabel);\n const [description, setDescription] = useState(initialDescription);\n const [cloneFromRoleId, setCloneFromRoleId] = useState<string>(NO_CLONE);\n\n // Re-seed from the initial values every time the dialog OPENS — the same\n // \"one struct of local state, reset on open\" shape a consumer reaching for\n // this dialog from a menu-per-row list needs (a fresh `key` per row would\n // work too, but resetting here means the consumer never has to think about\n // it either way).\n useEffect(() => {\n if (!open) return;\n setLabel(initialLabel);\n setDescription(initialDescription);\n setCloneFromRoleId(NO_CLONE);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const canSubmit = label.trim().length > 0 && !loading;\n\n const handleSubmit = () => {\n if (!canSubmit) return;\n onSubmit({\n label: label.trim(),\n description: description.trim(),\n cloneFromRoleId:\n mode === \"create\" && cloneFromRoleId !== NO_CLONE ? cloneFromRoleId : undefined,\n });\n };\n\n return (\n <Dialog\n open={open}\n onOpenChange={onOpenChange}\n title={mode === \"create\" ? strings.createTitle : strings.editTitle}\n description={mode === \"create\" ? strings.createDescription : strings.editDescription}\n className={className}\n actions={\n <>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)} disabled={loading}>\n {strings.cancel}\n </Button>\n <Button onClick={handleSubmit} disabled={!canSubmit} loading={loading}>\n {mode === \"create\" ? strings.create : strings.save}\n </Button>\n </>\n }\n >\n <div className=\"flex flex-col gap-4\">\n <Field label={strings.label}>\n <Input\n value={label}\n onChange={(event) => setLabel(event.target.value)}\n placeholder={strings.labelPlaceholder}\n disabled={loading}\n autoFocus\n />\n </Field>\n <Field label={strings.description} description={strings.descriptionHint}>\n <Textarea\n value={description}\n onChange={(event) => setDescription(event.target.value)}\n rows={3}\n disabled={loading}\n />\n </Field>\n {mode === \"create\" && cloneFromRoles && cloneFromRoles.length > 0 && (\n <Field\n label={strings.cloneLabel}\n description={strings.cloneDescription}\n >\n <Select\n value={cloneFromRoleId}\n onValueChange={(value) => setCloneFromRoleId((value as string | null) ?? NO_CLONE)}\n disabled={loading}\n >\n <SelectItem value={NO_CLONE}>{strings.cloneNone}</SelectItem>\n {cloneFromRoles.map((role) => (\n <SelectItem key={role.id} value={role.id}>\n {role.label}\n </SelectItem>\n ))}\n </Select>\n </Field>\n )}\n </div>\n </Dialog>\n );\n}\n"],"names":["NO_CLONE","RoleEditorDialog","mode","open","onOpenChange","cloneFromRoles","initialLabel","initialDescription","loading","onSubmit","className","strings","useUiStrings","label","setLabel","useState","description","setDescription","cloneFromRoleId","setCloneFromRoleId","useEffect","canSubmit","handleSubmit","jsx","Dialog","jsxs","Fragment","Button","Field","Input","event","Textarea","Select","value","SelectItem","role"],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { jsxs as p, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { useId as h } from "react";
|
|
3
|
+
import { cn as x } from "../../lib/cn.js";
|
|
4
|
+
import { RadioGroup as y, RadioCard as v } from "../Choice.js";
|
|
5
|
+
import { useUiStrings as K } from "../../lib/i18n/provider.js";
|
|
6
|
+
function m(i, l) {
|
|
7
|
+
return i.permissionKeys.filter((e) => !l.has(e));
|
|
8
|
+
}
|
|
9
|
+
function R(i, l, e, n) {
|
|
10
|
+
const t = m(i, l);
|
|
11
|
+
if (t.length === 0) return null;
|
|
12
|
+
const a = t.map((r) => e.find((c) => c.key === r)?.label ?? r);
|
|
13
|
+
return n(a);
|
|
14
|
+
}
|
|
15
|
+
function k(i, l, e) {
|
|
16
|
+
const n = l.find((t) => t.id === i);
|
|
17
|
+
return n !== void 0 && m(n, e).length === 0;
|
|
18
|
+
}
|
|
19
|
+
function w(i, l) {
|
|
20
|
+
let e = null;
|
|
21
|
+
for (const n of i)
|
|
22
|
+
m(n, l).length > 0 || (e === null || n.permissionKeys.length < e.permissionKeys.length) && (e = n);
|
|
23
|
+
return e?.id ?? "";
|
|
24
|
+
}
|
|
25
|
+
function C({
|
|
26
|
+
roles: i,
|
|
27
|
+
permissions: l,
|
|
28
|
+
ownPermissionKeys: e,
|
|
29
|
+
value: n,
|
|
30
|
+
onValueChange: t,
|
|
31
|
+
label: a,
|
|
32
|
+
description: r,
|
|
33
|
+
disabled: c,
|
|
34
|
+
className: g
|
|
35
|
+
}) {
|
|
36
|
+
const d = K().roleKeyPicker, u = h(), b = new Set(e);
|
|
37
|
+
return (
|
|
38
|
+
/* Not a `Field`: `Field` labels its single control, which would name every
|
|
39
|
+
radio card with the heading. The group is labelled by its own heading and
|
|
40
|
+
each card by its own `label`. */
|
|
41
|
+
/* @__PURE__ */ p("div", { className: x("flex flex-col gap-2", g), children: [
|
|
42
|
+
/* @__PURE__ */ p("div", { className: "flex flex-col gap-0.5", children: [
|
|
43
|
+
/* @__PURE__ */ o("span", { id: u, className: "text-sm font-medium text-primary", children: a ?? d.label }),
|
|
44
|
+
/* @__PURE__ */ o("span", { className: "text-2xs text-tertiary", children: r ?? d.description })
|
|
45
|
+
] }),
|
|
46
|
+
/* @__PURE__ */ o(
|
|
47
|
+
y,
|
|
48
|
+
{
|
|
49
|
+
value: n,
|
|
50
|
+
onValueChange: (s) => t(s),
|
|
51
|
+
disabled: c,
|
|
52
|
+
"aria-labelledby": u,
|
|
53
|
+
children: i.map((s) => {
|
|
54
|
+
const f = R(s, b, l, d.unavailable);
|
|
55
|
+
return /* @__PURE__ */ o(
|
|
56
|
+
v,
|
|
57
|
+
{
|
|
58
|
+
value: s.id,
|
|
59
|
+
label: s.label,
|
|
60
|
+
description: f ?? s.description,
|
|
61
|
+
disabled: f !== null
|
|
62
|
+
},
|
|
63
|
+
s.id
|
|
64
|
+
);
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
)
|
|
68
|
+
] })
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
export {
|
|
72
|
+
C as RoleKeyPicker,
|
|
73
|
+
k as isRoleSelectable,
|
|
74
|
+
w as leastPrivilegeRoleId,
|
|
75
|
+
R as roleUnavailableReason
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=RoleKeyPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleKeyPicker.js","sources":["../../../src/components/rbac/RoleKeyPicker.tsx"],"sourcesContent":["import { useId } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport { RadioCard, RadioGroup } from \"../Choice\";\nimport type { Permission, Role } from \"./types\";\n\n/* ----------------------------------------------------------------------------\n ROLE KEY PICKER\n\n THE ONE \"PICK A ROLE FOR A CREDENTIAL\" CONTROL. A credential acts as its\n owner with a role chosen when it is issued, and the same rule applies\n wherever one is issued: a role holding a permission the issuer lacks cannot\n be chosen, and the picker says which permission. `ApiKeysPanel` (a person\n makes a key) and `AccessRequestPanel` (a person approves an agent's request)\n both render this, so the rule has exactly one implementation.\n\n The server refuses an over-broad role anyway, so a disabled card is the same\n rule shown before the round trip, not a second rule. The picker never knows\n what a role or permission IS: it compares `Role.permissionKeys` against the\n `ownPermissionKeys` the consumer hands it and names the missing ones through\n `permissions[].label`.\n\n IT HOLDS NO STATE. `value` / `onValueChange` are the consumer's, so a caller\n chooses whether to start with nothing selected (`ApiKeysPanel`: a scoped\n credential is never broad by omission) or with `leastPrivilegeRoleId`\n (`AccessRequestPanel`: approving defaults to the narrowest role that is\n allowed).\n ---------------------------------------------------------------------------- */\n\nexport interface RoleKeyPickerProps {\n roles: Role[];\n /** The permission catalog, used to name the permissions that make a role unavailable. */\n permissions: Permission[];\n /** What the issuer holds. A role holding anything outside this set cannot be chosen. */\n ownPermissionKeys: string[];\n /** The chosen role id, or `\"\"` for none. */\n value: string;\n onValueChange: (roleId: string) => void;\n /** The group's visible heading. */\n label?: string;\n /** One line under the heading. */\n description?: string;\n disabled?: boolean;\n className?: string;\n}\n\n/** The permissions `role` holds that the issuer doesn't. Empty when the role can be chosen. */\nfunction missingPermissionKeys(role: Role, own: ReadonlySet<string>): string[] {\n return role.permissionKeys.filter((key) => !own.has(key));\n}\n\n/** Why `role` can't be chosen, naming the missing permissions by label. `null` when it can. */\nexport function roleUnavailableReason(\n role: Role,\n own: ReadonlySet<string>,\n permissions: Permission[],\n unavailable: (permissionLabels: string[]) => string,\n): string | null {\n const missing = missingPermissionKeys(role, own);\n if (missing.length === 0) return null;\n const names = missing.map((key) => permissions.find((p) => p.key === key)?.label ?? key);\n return unavailable(names);\n}\n\n/** Whether `roleId` names a role in `roles` that the issuer may choose. */\nexport function isRoleSelectable(roleId: string, roles: Role[], own: ReadonlySet<string>): boolean {\n const role = roles.find((r) => r.id === roleId);\n return role !== undefined && missingPermissionKeys(role, own).length === 0;\n}\n\n/** The id of the selectable role holding the fewest permissions (the first of any tie), or `\"\"` when none is selectable. */\nexport function leastPrivilegeRoleId(roles: Role[], own: ReadonlySet<string>): string {\n let best: Role | null = null;\n for (const role of roles) {\n if (missingPermissionKeys(role, own).length > 0) continue;\n if (best === null || role.permissionKeys.length < best.permissionKeys.length) best = role;\n }\n return best?.id ?? \"\";\n}\n\nexport function RoleKeyPicker({\n roles,\n permissions,\n ownPermissionKeys,\n value,\n onValueChange,\n label,\n description,\n disabled,\n className,\n}: RoleKeyPickerProps) {\n const strings = useUiStrings().roleKeyPicker;\n const labelId = useId();\n const own = new Set(ownPermissionKeys);\n\n return (\n /* Not a `Field`: `Field` labels its single control, which would name every\n radio card with the heading. The group is labelled by its own heading and\n each card by its own `label`. */\n <div className={cn(\"flex flex-col gap-2\", className)}>\n <div className=\"flex flex-col gap-0.5\">\n <span id={labelId} className=\"text-sm font-medium text-primary\">\n {label ?? strings.label}\n </span>\n <span className=\"text-2xs text-tertiary\">{description ?? strings.description}</span>\n </div>\n <RadioGroup\n value={value}\n onValueChange={(next) => onValueChange(next as string)}\n disabled={disabled}\n aria-labelledby={labelId}\n >\n {roles.map((role) => {\n const reason = roleUnavailableReason(role, own, permissions, strings.unavailable);\n return (\n <RadioCard\n key={role.id}\n value={role.id}\n label={role.label}\n description={reason ?? role.description}\n disabled={reason !== null}\n />\n );\n })}\n </RadioGroup>\n </div>\n );\n}\n"],"names":["missingPermissionKeys","role","own","key","roleUnavailableReason","permissions","unavailable","missing","names","p","isRoleSelectable","roleId","roles","r","leastPrivilegeRoleId","best","RoleKeyPicker","ownPermissionKeys","value","onValueChange","label","description","disabled","className","strings","useUiStrings","labelId","useId","cn","jsxs","jsx","RadioGroup","next","reason","RadioCard"],"mappings":";;;;;AA+CA,SAASA,EAAsBC,GAAYC,GAAoC;AAC7E,SAAOD,EAAK,eAAe,OAAO,CAACE,MAAQ,CAACD,EAAI,IAAIC,CAAG,CAAC;AAC1D;AAGO,SAASC,EACdH,GACAC,GACAG,GACAC,GACe;AACf,QAAMC,IAAUP,EAAsBC,GAAMC,CAAG;AAC/C,MAAIK,EAAQ,WAAW,EAAG,QAAO;AACjC,QAAMC,IAAQD,EAAQ,IAAI,CAACJ,MAAQE,EAAY,KAAK,CAACI,MAAMA,EAAE,QAAQN,CAAG,GAAG,SAASA,CAAG;AACvF,SAAOG,EAAYE,CAAK;AAC1B;AAGO,SAASE,EAAiBC,GAAgBC,GAAeV,GAAmC;AACjG,QAAMD,IAAOW,EAAM,KAAK,CAACC,MAAMA,EAAE,OAAOF,CAAM;AAC9C,SAAOV,MAAS,UAAaD,EAAsBC,GAAMC,CAAG,EAAE,WAAW;AAC3E;AAGO,SAASY,EAAqBF,GAAeV,GAAkC;AACpF,MAAIa,IAAoB;AACxB,aAAWd,KAAQW;AACjB,IAAIZ,EAAsBC,GAAMC,CAAG,EAAE,SAAS,MAC1Ca,MAAS,QAAQd,EAAK,eAAe,SAASc,EAAK,eAAe,YAAQA,IAAOd;AAEvF,SAAOc,GAAM,MAAM;AACrB;AAEO,SAASC,EAAc;AAAA,EAC5B,OAAAJ;AAAA,EACA,aAAAP;AAAA,EACA,mBAAAY;AAAA,EACA,OAAAC;AAAA,EACA,eAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AACF,GAAuB;AACrB,QAAMC,IAAUC,IAAe,eACzBC,IAAUC,EAAA,GACVzB,IAAM,IAAI,IAAIe,CAAiB;AAErC;AAAA;AAAA;AAAA;AAAA,sBAIG,OAAA,EAAI,WAAWW,EAAG,uBAAuBL,CAAS,GACjD,UAAA;AAAA,MAAA,gBAAAM,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,QAAA,gBAAAC,EAAC,UAAK,IAAIJ,GAAS,WAAU,oCAC1B,UAAAN,KAASI,EAAQ,MAAA,CACpB;AAAA,0BACC,QAAA,EAAK,WAAU,0BAA0B,UAAAH,KAAeG,EAAQ,YAAA,CAAY;AAAA,MAAA,GAC/E;AAAA,MACA,gBAAAM;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,OAAAb;AAAA,UACA,eAAe,CAACc,MAASb,EAAca,CAAc;AAAA,UACrD,UAAAV;AAAA,UACA,mBAAiBI;AAAA,UAEhB,UAAAd,EAAM,IAAI,CAACX,MAAS;AACnB,kBAAMgC,IAAS7B,EAAsBH,GAAMC,GAAKG,GAAamB,EAAQ,WAAW;AAChF,mBACE,gBAAAM;AAAA,cAACI;AAAA,cAAA;AAAA,gBAEC,OAAOjC,EAAK;AAAA,gBACZ,OAAOA,EAAK;AAAA,gBACZ,aAAagC,KAAUhC,EAAK;AAAA,gBAC5B,UAAUgC,MAAW;AAAA,cAAA;AAAA,cAJhBhC,EAAK;AAAA,YAAA;AAAA,UAOhB,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,EAAA,CACF;AAAA;AAEJ;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo as i } from "react";
|
|
3
|
+
import { ToggleMatrix as b } from "../ToggleMatrix.js";
|
|
4
|
+
import { useUiStrings as f } from "../../lib/i18n/provider.js";
|
|
5
|
+
function w({
|
|
6
|
+
roles: a,
|
|
7
|
+
permissions: r,
|
|
8
|
+
editable: c = !1,
|
|
9
|
+
onChange: n
|
|
10
|
+
}) {
|
|
11
|
+
const e = f().rolePermissionMatrix, s = i(
|
|
12
|
+
() => r.map((o) => ({ id: o.key, label: o.label, description: o.description, group: o.category, lockedReason: o.lockedReason })),
|
|
13
|
+
[r]
|
|
14
|
+
), d = i(
|
|
15
|
+
() => a.map((o) => ({ id: o.id, label: o.label, lockedReason: o.locked ? e.locked(o.label) : void 0 })),
|
|
16
|
+
[a, e]
|
|
17
|
+
), p = i(() => new Map(a.map((o) => [o.id, new Set(o.permissionKeys)])), [a]);
|
|
18
|
+
return /* @__PURE__ */ m(
|
|
19
|
+
b,
|
|
20
|
+
{
|
|
21
|
+
caption: e.caption,
|
|
22
|
+
rowHeader: e.permission,
|
|
23
|
+
rows: s,
|
|
24
|
+
columns: d,
|
|
25
|
+
cell: (o, t) => ({ state: p.get(t)?.has(o) ? "on" : "off" }),
|
|
26
|
+
readOnly: !c,
|
|
27
|
+
onChange: n === void 0 ? void 0 : (o, t, l) => n(t, o, l),
|
|
28
|
+
rowDescription: "tooltip",
|
|
29
|
+
otherGroupLabel: e.otherCategory,
|
|
30
|
+
cellLabel: (o, t, l) => e.cell(t.label, o.label, l)
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
w as RolePermissionMatrix
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=RolePermissionMatrix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RolePermissionMatrix.js","sources":["../../../src/components/rbac/RolePermissionMatrix.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport { ToggleMatrix, type ToggleMatrixColumn, type ToggleMatrixRow } from \"../ToggleMatrix\";\nimport type { Permission, Role } from \"./types\";\n\n/* ============================================================================\n ROLE / PERMISSION MATRIX\n\n Permissions run down the rows, roles run across the columns, and a check\n mark sits wherever `role.permissionKeys.includes(permission.key)` — the\n only fact this component knows. It has no idea a \"Widgets\" category or an\n \"Owner\" role is a real thing anywhere; group headers come from whatever\n `permission.category` strings a consumer happens to supply, in the order\n those strings are first encountered, and disappear entirely if nobody\n supplied any.\n\n DX-4963: AN ADAPTER OVER `ToggleMatrix`. The grid, its sticky header, group\n rows, cells and read-only/editable behaviour are the generic matrix's;\n this file maps roles onto columns, permissions onto rows and `permissionKeys`\n membership onto cells, and words the screen-reader sentences for permissions.\n Anything else that is a grid of on/off switches (a connection's \"What syncs\")\n draws the same `ToggleMatrix` directly, so they cannot drift apart.\n ========================================================================= */\n\nexport interface RolePermissionMatrixProps {\n roles: Role[];\n permissions: Permission[];\n /**\n * DX-3414 — turns each cell into a toggle. Defaults to `false` (the\n * original read-only matrix, unchanged pixel-for-pixel and test-for-test).\n * A `role.locked` column stays READ-ONLY even when `editable` — see\n * `Role.locked`'s own doc comment (`types.ts`): a consumer's rules forbid\n * touching that role at all, and the matrix has no business knowing why.\n */\n editable?: boolean;\n /**\n * Fired when an editable, unlocked cell is toggled. `granted` is the NEW\n * value the caller should persist — the matrix holds no state of its own\n * (PLN-13 R-3: presentational, no fetch); a consumer wires this to its own\n * mutation and re-renders with the updated `roles` once it lands.\n */\n onChange?: (roleId: string, permissionKey: string, granted: boolean) => void;\n}\n\nexport function RolePermissionMatrix({\n roles,\n permissions,\n editable = false,\n onChange,\n}: RolePermissionMatrixProps) {\n const strings = useUiStrings().rolePermissionMatrix;\n const rows = useMemo<ToggleMatrixRow[]>(\n () => permissions.map((permission) => ({ id: permission.key, label: permission.label, description: permission.description, group: permission.category, lockedReason: permission.lockedReason })),\n [permissions],\n );\n const columns = useMemo<ToggleMatrixColumn[]>(\n () => roles.map((role) => ({ id: role.id, label: role.label, lockedReason: role.locked ? strings.locked(role.label) : undefined })),\n [roles, strings],\n );\n const keysByRole = useMemo(() => new Map(roles.map((role) => [role.id, new Set(role.permissionKeys)])), [roles]);\n\n return (\n <ToggleMatrix\n caption={strings.caption}\n rowHeader={strings.permission}\n rows={rows}\n columns={columns}\n cell={(permissionKey, roleId) => ({ state: keysByRole.get(roleId)?.has(permissionKey) ? \"on\" : \"off\" })}\n readOnly={!editable}\n onChange={onChange === undefined ? undefined : (permissionKey, roleId, granted) => onChange(roleId, permissionKey, granted)}\n // I18N-ALLOW: a prop value naming a layout, never user text\n rowDescription=\"tooltip\"\n otherGroupLabel={strings.otherCategory}\n cellLabel={(row, column, granted) => strings.cell(column.label, row.label, granted)}\n />\n );\n}\n"],"names":["RolePermissionMatrix","roles","permissions","editable","onChange","strings","useUiStrings","rows","useMemo","permission","columns","role","keysByRole","jsx","ToggleMatrix","permissionKey","roleId","granted","row","column"],"mappings":";;;;AA4CO,SAASA,EAAqB;AAAA,EACnC,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,UAAAC;AACF,GAA8B;AAC5B,QAAMC,IAAUC,IAAe,sBACzBC,IAAOC;AAAA,IACX,MAAMN,EAAY,IAAI,CAACO,OAAgB,EAAE,IAAIA,EAAW,KAAK,OAAOA,EAAW,OAAO,aAAaA,EAAW,aAAa,OAAOA,EAAW,UAAU,cAAcA,EAAW,aAAA,EAAe;AAAA,IAC/L,CAACP,CAAW;AAAA,EAAA,GAERQ,IAAUF;AAAA,IACd,MAAMP,EAAM,IAAI,CAACU,OAAU,EAAE,IAAIA,EAAK,IAAI,OAAOA,EAAK,OAAO,cAAcA,EAAK,SAASN,EAAQ,OAAOM,EAAK,KAAK,IAAI,OAAA,EAAY;AAAA,IAClI,CAACV,GAAOI,CAAO;AAAA,EAAA,GAEXO,IAAaJ,EAAQ,MAAM,IAAI,IAAIP,EAAM,IAAI,CAACU,MAAS,CAACA,EAAK,IAAI,IAAI,IAAIA,EAAK,cAAc,CAAC,CAAC,CAAC,GAAG,CAACV,CAAK,CAAC;AAE/G,SACE,gBAAAY;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,SAAST,EAAQ;AAAA,MACjB,WAAWA,EAAQ;AAAA,MACnB,MAAAE;AAAA,MACA,SAAAG;AAAA,MACA,MAAM,CAACK,GAAeC,OAAY,EAAE,OAAOJ,EAAW,IAAII,CAAM,GAAG,IAAID,CAAa,IAAI,OAAO,MAAA;AAAA,MAC/F,UAAU,CAACZ;AAAA,MACX,UAAUC,MAAa,SAAY,SAAY,CAACW,GAAeC,GAAQC,MAAYb,EAASY,GAAQD,GAAeE,CAAO;AAAA,MAE1H,gBAAe;AAAA,MACf,iBAAiBZ,EAAQ;AAAA,MACzB,WAAW,CAACa,GAAKC,GAAQF,MAAYZ,EAAQ,KAAKc,EAAO,OAAOD,EAAI,OAAOD,CAAO;AAAA,IAAA;AAAA,EAAA;AAGxF;"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { jsxs as l, jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import { useState as N } from "react";
|
|
3
|
+
import { AlertDialog as C } from "../Dialog.js";
|
|
4
|
+
import { Button as j } from "../Button.js";
|
|
5
|
+
import { IconButton as h } from "../IconButton.js";
|
|
6
|
+
import { Icon as c } from "../Icon.js";
|
|
7
|
+
import { RolePermissionMatrix as E } from "./RolePermissionMatrix.js";
|
|
8
|
+
import { RoleEditorDialog as P } from "./RoleEditorDialog.js";
|
|
9
|
+
import { useUiStrings as S } from "../../lib/i18n/provider.js";
|
|
10
|
+
function U({
|
|
11
|
+
roles: m,
|
|
12
|
+
permissions: y,
|
|
13
|
+
editable: r = !1,
|
|
14
|
+
onChangePermission: k,
|
|
15
|
+
onCreateRole: d,
|
|
16
|
+
onRenameRole: a,
|
|
17
|
+
onDeleteRole: o,
|
|
18
|
+
onResetRole: p,
|
|
19
|
+
busyRoleId: f,
|
|
20
|
+
heading: u = !0,
|
|
21
|
+
className: w
|
|
22
|
+
}) {
|
|
23
|
+
const t = S().rolesPermissionsPage, [s, x] = N(null), [n, g] = N(null), v = () => x(null), z = (e) => {
|
|
24
|
+
s?.mode === "create" ? d?.(e) : s?.mode === "edit" && a?.(s.role.id, { label: e.label, description: e.description }), v();
|
|
25
|
+
};
|
|
26
|
+
return /* @__PURE__ */ l("div", { className: w, children: [
|
|
27
|
+
/* @__PURE__ */ l("div", { className: "flex flex-col gap-5", children: [
|
|
28
|
+
(u || r && d) && /* @__PURE__ */ l("div", { className: `flex items-start gap-4 ${u ? "justify-between" : "justify-end"}`, children: [
|
|
29
|
+
u && /* @__PURE__ */ l("div", { children: [
|
|
30
|
+
/* @__PURE__ */ i("h1", { className: "font-display text-xl font-semibold text-primary", children: t.title }),
|
|
31
|
+
/* @__PURE__ */ i("p", { className: "text-sm text-tertiary", children: r ? t.subtitleEditable : t.subtitleReadOnly })
|
|
32
|
+
] }),
|
|
33
|
+
r && d && /* @__PURE__ */ i(
|
|
34
|
+
j,
|
|
35
|
+
{
|
|
36
|
+
size: "sm",
|
|
37
|
+
leadingIcon: /* @__PURE__ */ i(c, { name: "plus", size: "sm" }),
|
|
38
|
+
onClick: () => x({ mode: "create" }),
|
|
39
|
+
children: t.newRole
|
|
40
|
+
}
|
|
41
|
+
)
|
|
42
|
+
] }),
|
|
43
|
+
/* @__PURE__ */ i(
|
|
44
|
+
E,
|
|
45
|
+
{
|
|
46
|
+
roles: m,
|
|
47
|
+
permissions: y,
|
|
48
|
+
editable: r,
|
|
49
|
+
onChange: k
|
|
50
|
+
}
|
|
51
|
+
),
|
|
52
|
+
r && (a || o || p) && /* @__PURE__ */ l("div", { className: "flex flex-col gap-2", children: [
|
|
53
|
+
/* @__PURE__ */ i("h2", { className: "text-xs font-semibold tracking-widest text-tertiary uppercase", children: t.manageRoles }),
|
|
54
|
+
/* @__PURE__ */ i("ul", { className: "flex flex-col gap-1.5", children: m.map((e) => {
|
|
55
|
+
const b = f === e.id;
|
|
56
|
+
return e.locked ? null : /* @__PURE__ */ l(
|
|
57
|
+
"li",
|
|
58
|
+
{
|
|
59
|
+
className: "flex items-center justify-between gap-3 rounded-lg border border-border-subtle bg-surface px-4 py-2.5",
|
|
60
|
+
children: [
|
|
61
|
+
/* @__PURE__ */ l("div", { className: "min-w-0", children: [
|
|
62
|
+
/* @__PURE__ */ i("p", { className: "truncate text-sm font-medium text-primary", children: e.label }),
|
|
63
|
+
e.description && /* @__PURE__ */ i("p", { className: "truncate text-2xs text-tertiary", children: e.description })
|
|
64
|
+
] }),
|
|
65
|
+
/* @__PURE__ */ l("div", { className: "flex shrink-0 items-center gap-1", children: [
|
|
66
|
+
e.system && p && /* @__PURE__ */ i(
|
|
67
|
+
h,
|
|
68
|
+
{
|
|
69
|
+
icon: /* @__PURE__ */ i(c, { name: "rotate-ccw", size: "sm" }),
|
|
70
|
+
label: t.reset(e.label),
|
|
71
|
+
size: "sm",
|
|
72
|
+
disabledReason: b ? t.working : void 0,
|
|
73
|
+
onClick: () => p(e.id)
|
|
74
|
+
}
|
|
75
|
+
),
|
|
76
|
+
a && /* @__PURE__ */ i(
|
|
77
|
+
h,
|
|
78
|
+
{
|
|
79
|
+
icon: /* @__PURE__ */ i(c, { name: "pencil", size: "sm" }),
|
|
80
|
+
label: t.edit(e.label),
|
|
81
|
+
size: "sm",
|
|
82
|
+
disabledReason: b ? t.working : void 0,
|
|
83
|
+
onClick: () => x({ mode: "edit", role: e })
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
o && e.deletable !== !1 && /* @__PURE__ */ i(
|
|
87
|
+
h,
|
|
88
|
+
{
|
|
89
|
+
icon: /* @__PURE__ */ i(c, { name: "trash-2", size: "sm" }),
|
|
90
|
+
label: t.delete(e.label),
|
|
91
|
+
tone: "danger",
|
|
92
|
+
size: "sm",
|
|
93
|
+
disabledReason: b ? t.working : void 0,
|
|
94
|
+
onClick: () => g(e)
|
|
95
|
+
}
|
|
96
|
+
)
|
|
97
|
+
] })
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
e.id
|
|
101
|
+
);
|
|
102
|
+
}) })
|
|
103
|
+
] })
|
|
104
|
+
] }),
|
|
105
|
+
r && (d || a) && /* @__PURE__ */ i(
|
|
106
|
+
P,
|
|
107
|
+
{
|
|
108
|
+
mode: s?.mode ?? "create",
|
|
109
|
+
open: s !== null,
|
|
110
|
+
onOpenChange: (e) => {
|
|
111
|
+
e || v();
|
|
112
|
+
},
|
|
113
|
+
cloneFromRoles: s?.mode === "create" ? m : void 0,
|
|
114
|
+
initialLabel: s?.mode === "edit" ? s.role.label : void 0,
|
|
115
|
+
initialDescription: s?.mode === "edit" ? s.role.description : void 0,
|
|
116
|
+
loading: s?.mode === "edit" && f === s.role.id,
|
|
117
|
+
onSubmit: z
|
|
118
|
+
}
|
|
119
|
+
),
|
|
120
|
+
o && /* @__PURE__ */ i(
|
|
121
|
+
C,
|
|
122
|
+
{
|
|
123
|
+
open: n !== null,
|
|
124
|
+
onOpenChange: (e) => {
|
|
125
|
+
e || g(null);
|
|
126
|
+
},
|
|
127
|
+
title: n ? t.deleteTitle(n.label) : "",
|
|
128
|
+
description: t.deleteDescription,
|
|
129
|
+
confirmLabel: t.deleteConfirm,
|
|
130
|
+
destructive: !0,
|
|
131
|
+
loading: n !== null && f === n.id,
|
|
132
|
+
onConfirm: () => {
|
|
133
|
+
n && o(n.id), g(null);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
)
|
|
137
|
+
] });
|
|
138
|
+
}
|
|
139
|
+
export {
|
|
140
|
+
U as RolesPermissionsPage
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=RolesPermissionsPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RolesPermissionsPage.js","sources":["../../../src/components/rbac/RolesPermissionsPage.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { AlertDialog } from \"../Dialog\";\nimport { Button } from \"../Button\";\nimport { IconButton } from \"../IconButton\";\nimport { Icon } from \"../Icon\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport { RolePermissionMatrix } from \"./RolePermissionMatrix\";\nimport { RoleEditorDialog, type RoleEditorDialogSubmitInput } from \"./RoleEditorDialog\";\nimport type { Permission, Role } from \"./types\";\n\n/* ----------------------------------------------------------------------------\n ROLES & PERMISSIONS PAGE\n\n DX-3414 — PROPS-DRIVEN, unlike its previous `useRBAC()`-reading self: an\n editable page needs mutation callbacks (create/rename/delete/reset a role,\n toggle a permission) that `useRBAC()` — read/impersonation state only, see\n that hook's own header — has no way to supply. Same relationship every\n other `rbac/` component in this file has with its data (`types.ts`'s own\n header): this page fetches nothing, knows no danxbot type, and owns no\n permission key. A consumer wanting the old \"just mount it, useRBAC handles\n the rest\" convenience reads `roles`/`permissions` off `useRBAC()` itself and\n passes them straight through — one line moved from here to there, not lost.\n\n `editable` GATES EVERYTHING BEYOND THE MATRIX. A `false` (or omitted)\n viewer sees exactly the old read-only page: matrix, no \"New role\" button,\n no per-role manage list. A consumer decides `editable` from whatever its\n own permission model says (danxbot: `team.roles.manage`) — this component\n has no opinion on what that check should be.\n\n ROLE MANAGEMENT is a plain list below the matrix, not more matrix columns —\n a rename/delete/reset action per role reads naturally as \"one row, one\n role, its own controls\" and would crowd an already-dense grid if squeezed\n into a header cell instead.\n -------------------------------------------------------------------------- */\n\nexport interface RolesPermissionsPageProps {\n roles: Role[];\n permissions: Permission[];\n /** Gates the \"New role\" button, the manage-roles list, and the matrix's own `editable`. Defaults to `false` — read-only, pixel-identical to the page before this card. */\n editable?: boolean;\n /** Fired when an editable, unlocked matrix cell is toggled. Required to make the matrix respond; omit alongside `editable={false}`. */\n onChangePermission?: (roleId: string, permissionKey: string, granted: boolean) => void;\n onCreateRole?: (input: RoleEditorDialogSubmitInput) => void;\n onRenameRole?: (roleId: string, input: { label: string; description: string }) => void;\n onDeleteRole?: (roleId: string) => void;\n /** Restores a SYSTEM role's seeded permission set — offered only for a role with `role.system` true (never `locked`; see `Role.locked`'s own doc comment for why owner never reaches this list at all). */\n onResetRole?: (roleId: string) => void;\n /** The id of a role currently mid-mutation. Disables just that row's controls, not the whole page. */\n busyRoleId?: string | null;\n /** DX-4029: `false` omits the page's own title text (the `<h1>` and the explanatory line) so a host layout can own the screen's one `<h1>`. The \"New role\" button stays: it is the only create-role entry point. Default `true` is the unchanged render. */\n heading?: boolean;\n className?: string;\n}\n\ntype EditorState = { mode: \"create\" } | { mode: \"edit\"; role: Role };\n\nexport function RolesPermissionsPage({\n roles,\n permissions,\n editable = false,\n onChangePermission,\n onCreateRole,\n onRenameRole,\n onDeleteRole,\n onResetRole,\n busyRoleId,\n heading = true,\n className,\n}: RolesPermissionsPageProps) {\n const strings = useUiStrings().rolesPermissionsPage;\n const [editor, setEditor] = useState<EditorState | null>(null);\n const [deleteTarget, setDeleteTarget] = useState<Role | null>(null);\n\n const closeEditor = () => setEditor(null);\n\n const handleEditorSubmit = (input: RoleEditorDialogSubmitInput) => {\n if (editor?.mode === \"create\") {\n onCreateRole?.(input);\n } else if (editor?.mode === \"edit\") {\n onRenameRole?.(editor.role.id, { label: input.label, description: input.description });\n }\n closeEditor();\n };\n\n return (\n <div className={className}>\n <div className=\"flex flex-col gap-5\">\n {(heading || (editable && onCreateRole)) && (\n <div className={`flex items-start gap-4 ${heading ? \"justify-between\" : \"justify-end\"}`}>\n {heading && (\n <div>\n <h1 className=\"font-display text-xl font-semibold text-primary\">{strings.title}</h1>\n <p className=\"text-sm text-tertiary\">\n {editable ? strings.subtitleEditable : strings.subtitleReadOnly}\n </p>\n </div>\n )}\n {editable && onCreateRole && (\n <Button\n size=\"sm\"\n leadingIcon={<Icon name=\"plus\" size=\"sm\" />}\n onClick={() => setEditor({ mode: \"create\" })}\n >\n {strings.newRole}\n </Button>\n )}\n </div>\n )}\n\n <RolePermissionMatrix\n roles={roles}\n permissions={permissions}\n editable={editable}\n onChange={onChangePermission}\n />\n\n {editable && (onRenameRole || onDeleteRole || onResetRole) && (\n <div className=\"flex flex-col gap-2\">\n <h2 className=\"text-xs font-semibold tracking-widest text-tertiary uppercase\">{strings.manageRoles}</h2>\n <ul className=\"flex flex-col gap-1.5\">\n {roles.map((role) => {\n const busy = busyRoleId === role.id;\n if (role.locked) {\n // Owner (or whatever a consumer marks `locked`) carries no\n // row here at all — there is nothing this list could offer\n // it (`team-roles-db.ts`'s own header: nothing about it is\n // stored, so nothing about it can be managed).\n return null;\n }\n return (\n <li\n key={role.id}\n className=\"flex items-center justify-between gap-3 rounded-lg border border-border-subtle bg-surface px-4 py-2.5\"\n >\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-primary\">{role.label}</p>\n {role.description && (\n <p className=\"truncate text-2xs text-tertiary\">{role.description}</p>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {role.system && onResetRole && (\n <IconButton\n icon={<Icon name=\"rotate-ccw\" size=\"sm\" />}\n label={strings.reset(role.label)}\n size=\"sm\"\n disabledReason={busy ? strings.working : undefined}\n onClick={() => onResetRole(role.id)}\n />\n )}\n {onRenameRole && (\n <IconButton\n icon={<Icon name=\"pencil\" size=\"sm\" />}\n label={strings.edit(role.label)}\n size=\"sm\"\n disabledReason={busy ? strings.working : undefined}\n onClick={() => setEditor({ mode: \"edit\", role })}\n />\n )}\n {onDeleteRole && role.deletable !== false && (\n <IconButton\n icon={<Icon name=\"trash-2\" size=\"sm\" />}\n label={strings.delete(role.label)}\n tone=\"danger\"\n size=\"sm\"\n disabledReason={busy ? strings.working : undefined}\n onClick={() => setDeleteTarget(role)}\n />\n )}\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </div>\n\n {editable && (onCreateRole || onRenameRole) && (\n <RoleEditorDialog\n mode={editor?.mode ?? \"create\"}\n open={editor !== null}\n onOpenChange={(next) => {\n if (!next) closeEditor();\n }}\n cloneFromRoles={editor?.mode === \"create\" ? roles : undefined}\n initialLabel={editor?.mode === \"edit\" ? editor.role.label : undefined}\n initialDescription={editor?.mode === \"edit\" ? editor.role.description : undefined}\n // Only an EDIT can be \"busy\" against a known role id — a create\n // has no id yet to match `busyRoleId` against, so it is never\n // shown as loading by this alone (a consumer's own `onCreateRole`\n // is free to close the dialog itself once the create settles).\n loading={editor?.mode === \"edit\" && busyRoleId === editor.role.id}\n onSubmit={handleEditorSubmit}\n />\n )}\n\n {onDeleteRole && (\n <AlertDialog\n open={deleteTarget !== null}\n onOpenChange={(next) => {\n if (!next) setDeleteTarget(null);\n }}\n title={deleteTarget ? strings.deleteTitle(deleteTarget.label) : \"\"}\n description={strings.deleteDescription}\n confirmLabel={strings.deleteConfirm}\n destructive\n loading={deleteTarget !== null && busyRoleId === deleteTarget.id}\n onConfirm={() => {\n if (deleteTarget) onDeleteRole(deleteTarget.id);\n setDeleteTarget(null);\n }}\n />\n )}\n </div>\n );\n}\n"],"names":["RolesPermissionsPage","roles","permissions","editable","onChangePermission","onCreateRole","onRenameRole","onDeleteRole","onResetRole","busyRoleId","heading","className","strings","useUiStrings","editor","setEditor","useState","deleteTarget","setDeleteTarget","closeEditor","handleEditorSubmit","input","jsxs","jsx","Button","Icon","RolePermissionMatrix","role","busy","IconButton","RoleEditorDialog","next","AlertDialog"],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { jsx as r, jsxs as d } from "react/jsx-runtime";
|
|
2
|
+
import { useState as p, useRef as x, useEffect as v } from "react";
|
|
3
|
+
import { AlertDialog as y } from "../Dialog.js";
|
|
4
|
+
import { Badge as g } from "../Badge.js";
|
|
5
|
+
import { TableEmptyState as b, DataTable as w, CellStack as N } from "../Table.js";
|
|
6
|
+
import { Icon as a } from "../Icon.js";
|
|
7
|
+
import { IconButton as h } from "../IconButton.js";
|
|
8
|
+
import { copyText as C } from "../../lib/clipboard.js";
|
|
9
|
+
import { DateTimeText as S } from "../DateTimeText.js";
|
|
10
|
+
import { RelativeTime as u } from "../RelativeTime.js";
|
|
11
|
+
import { EndedLine as T, IdleLine as I } from "./EndedLine.js";
|
|
12
|
+
import { useUiStrings as m } from "../../lib/i18n/provider.js";
|
|
13
|
+
function k({
|
|
14
|
+
session: t,
|
|
15
|
+
busy: s,
|
|
16
|
+
onRevoke: o
|
|
17
|
+
}) {
|
|
18
|
+
const e = m().sessionsList, [i, n] = p(!1);
|
|
19
|
+
return t.current ? /* @__PURE__ */ r("span", { className: "text-2xs text-tertiary", children: e.thisSession }) : t.ended !== void 0 ? null : /* @__PURE__ */ r(
|
|
20
|
+
y,
|
|
21
|
+
{
|
|
22
|
+
open: i,
|
|
23
|
+
onOpenChange: n,
|
|
24
|
+
trigger: /* @__PURE__ */ r(
|
|
25
|
+
h,
|
|
26
|
+
{
|
|
27
|
+
icon: /* @__PURE__ */ r(a, { name: "log-out", size: "sm" }),
|
|
28
|
+
label: e.revoke(t.name),
|
|
29
|
+
tone: "danger",
|
|
30
|
+
size: "sm",
|
|
31
|
+
disabledReason: s ? e.revoking : void 0
|
|
32
|
+
}
|
|
33
|
+
),
|
|
34
|
+
title: e.revokeTitle(t.name),
|
|
35
|
+
description: e.revokeDescription,
|
|
36
|
+
confirmLabel: e.revokeConfirm,
|
|
37
|
+
destructive: !0,
|
|
38
|
+
loading: s,
|
|
39
|
+
onConfirm: () => {
|
|
40
|
+
o(t.id), n(!1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
const f = 9, B = 2e3;
|
|
46
|
+
function z({ session: t }) {
|
|
47
|
+
const s = m().sessionsList, [o, e] = p(!1), i = x(null);
|
|
48
|
+
if (v(
|
|
49
|
+
() => () => {
|
|
50
|
+
i.current !== null && clearTimeout(i.current);
|
|
51
|
+
},
|
|
52
|
+
[]
|
|
53
|
+
), t.browserId === void 0) return /* @__PURE__ */ r("span", { className: "text-tertiary", children: "—" });
|
|
54
|
+
const n = t.browserId, c = async () => {
|
|
55
|
+
try {
|
|
56
|
+
await C(n), e(!0);
|
|
57
|
+
} catch {
|
|
58
|
+
e(!1);
|
|
59
|
+
}
|
|
60
|
+
i.current !== null && clearTimeout(i.current), i.current = setTimeout(() => e(!1), B);
|
|
61
|
+
};
|
|
62
|
+
return /* @__PURE__ */ d("div", { className: "flex items-center gap-1.5", children: [
|
|
63
|
+
/* @__PURE__ */ r("code", { className: "font-mono text-sm text-primary", "data-testid": "session-browser-id", children: n.slice(0, f) }),
|
|
64
|
+
/* @__PURE__ */ r(
|
|
65
|
+
h,
|
|
66
|
+
{
|
|
67
|
+
icon: /* @__PURE__ */ r(a, { name: o ? "check" : "copy", size: "sm" }),
|
|
68
|
+
label: s.copyBrowserId(n.slice(0, f)),
|
|
69
|
+
variant: "ghost",
|
|
70
|
+
size: "sm",
|
|
71
|
+
onClick: () => {
|
|
72
|
+
c();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
),
|
|
76
|
+
t.thisBrowser && /* @__PURE__ */ r(g, { tone: "accent", size: "sm", dot: !0, children: s.thisBrowser })
|
|
77
|
+
] });
|
|
78
|
+
}
|
|
79
|
+
function A(t, s, o) {
|
|
80
|
+
return [
|
|
81
|
+
{
|
|
82
|
+
id: "session",
|
|
83
|
+
header: t.columnSession,
|
|
84
|
+
accessorFn: (e) => e.name,
|
|
85
|
+
cell: ({ row: e }) => {
|
|
86
|
+
const i = e.original, n = [i.userAgent, i.ip].filter(Boolean).join(" · ");
|
|
87
|
+
return /* @__PURE__ */ d("div", { className: "flex items-center gap-2.5", children: [
|
|
88
|
+
/* @__PURE__ */ r("span", { className: "grid size-8 shrink-0 place-items-center rounded-full bg-surface-inset text-tertiary", children: /* @__PURE__ */ r(a, { name: "monitor", size: "sm" }) }),
|
|
89
|
+
/* @__PURE__ */ d("div", { className: "flex min-w-0 flex-col gap-1", children: [
|
|
90
|
+
/* @__PURE__ */ r(N, { primary: i.name, secondary: n || void 0 }),
|
|
91
|
+
i.ended && /* @__PURE__ */ r(T, { ended: i.ended }),
|
|
92
|
+
i.idle && /* @__PURE__ */ r(I, { idle: i.idle })
|
|
93
|
+
] }),
|
|
94
|
+
i.current && /* @__PURE__ */ r(g, { tone: "accent", size: "sm", dot: !0, children: t.current })
|
|
95
|
+
] });
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: "browser",
|
|
100
|
+
header: t.columnBrowser,
|
|
101
|
+
accessorFn: (e) => e.browserId ?? "",
|
|
102
|
+
cell: ({ row: e }) => /* @__PURE__ */ r(z, { session: e.original })
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
id: "lastUsed",
|
|
106
|
+
header: t.columnLastUsed,
|
|
107
|
+
accessorFn: (e) => e.lastUsedAt,
|
|
108
|
+
cell: ({ row: e }) => /* @__PURE__ */ r("span", { className: "text-secondary", children: /* @__PURE__ */ r(u, { at: e.original.lastUsedAt }) })
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
id: "created",
|
|
112
|
+
header: t.columnCreated,
|
|
113
|
+
accessorFn: (e) => e.createdAt,
|
|
114
|
+
cell: ({ row: e }) => /* @__PURE__ */ r("span", { className: "text-secondary", children: /* @__PURE__ */ r(u, { at: e.original.createdAt }) })
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: "expires",
|
|
118
|
+
header: t.columnExpires,
|
|
119
|
+
accessorFn: (e) => e.expiresAt ?? "",
|
|
120
|
+
cell: ({ row: e }) => /* @__PURE__ */ r("span", { className: "text-secondary", children: e.original.expiresAt ? /* @__PURE__ */ r(S, { at: e.original.expiresAt }) : t.never })
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
id: "actions",
|
|
124
|
+
header: "",
|
|
125
|
+
enableSorting: !1,
|
|
126
|
+
cell: ({ row: e }) => /* @__PURE__ */ r("div", { className: "flex justify-end", children: /* @__PURE__ */ r(k, { session: e.original, busy: s === e.original.id, onRevoke: o }) })
|
|
127
|
+
}
|
|
128
|
+
];
|
|
129
|
+
}
|
|
130
|
+
function P({ sessions: t, onRevoke: s, busyId: o, emptyState: e, className: i }) {
|
|
131
|
+
const n = m().sessionsList;
|
|
132
|
+
if (t.length === 0)
|
|
133
|
+
return e ?? /* @__PURE__ */ r(
|
|
134
|
+
b,
|
|
135
|
+
{
|
|
136
|
+
icon: /* @__PURE__ */ r(a, { name: "monitor", size: "lg", className: "text-tertiary" }),
|
|
137
|
+
title: n.emptyTitle
|
|
138
|
+
}
|
|
139
|
+
);
|
|
140
|
+
const c = A(n, o, s);
|
|
141
|
+
return /* @__PURE__ */ r(w, { columns: c, data: t, getRowId: (l) => String(l.id), getRowClassName: (l) => l.thisBrowser ? "bg-accent-subtle" : void 0, className: i });
|
|
142
|
+
}
|
|
143
|
+
export {
|
|
144
|
+
P as SessionsList
|
|
145
|
+
};
|
|
146
|
+
//# sourceMappingURL=SessionsList.js.map
|