@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,138 @@
|
|
|
1
|
+
import { jsx as n, jsxs as d } from "react/jsx-runtime";
|
|
2
|
+
import { Avatar as p } from "../Avatar.js";
|
|
3
|
+
import { AlertDialog as g } from "../Dialog.js";
|
|
4
|
+
import { IconButton as v } from "../IconButton.js";
|
|
5
|
+
import { Icon as u } from "../Icon.js";
|
|
6
|
+
import { Select as h, SelectItem as x } from "../Select.js";
|
|
7
|
+
import { TableEmptyState as y, DataTable as R, CellStack as b } from "../Table.js";
|
|
8
|
+
import { RelativeTime as C } from "../RelativeTime.js";
|
|
9
|
+
import { useUiStrings as m } from "../../lib/i18n/provider.js";
|
|
10
|
+
function N({
|
|
11
|
+
member: e,
|
|
12
|
+
assignableRoles: l,
|
|
13
|
+
busy: s,
|
|
14
|
+
onChangeRole: a
|
|
15
|
+
}) {
|
|
16
|
+
const t = m().membersPanel, c = l.some((o) => o.id === e.role.id) ? l : [...l, e.role], i = s || e.disabledReason !== void 0;
|
|
17
|
+
return /* @__PURE__ */ d("div", { className: "flex flex-col gap-1", children: [
|
|
18
|
+
/* @__PURE__ */ n(
|
|
19
|
+
h,
|
|
20
|
+
{
|
|
21
|
+
"aria-label": t.roleFor(e.user.name),
|
|
22
|
+
value: e.role.id,
|
|
23
|
+
onValueChange: (o) => {
|
|
24
|
+
const r = o;
|
|
25
|
+
r && r !== e.role.id && a(e.user.id, r);
|
|
26
|
+
},
|
|
27
|
+
disabled: i,
|
|
28
|
+
size: "sm",
|
|
29
|
+
children: c.map((o) => /* @__PURE__ */ n(x, { value: o.id, children: o.label }, o.id))
|
|
30
|
+
}
|
|
31
|
+
),
|
|
32
|
+
e.disabledReason && /* @__PURE__ */ n("span", { className: "text-2xs text-tertiary", children: e.disabledReason })
|
|
33
|
+
] });
|
|
34
|
+
}
|
|
35
|
+
function j({
|
|
36
|
+
member: e,
|
|
37
|
+
busy: l,
|
|
38
|
+
onRemove: s
|
|
39
|
+
}) {
|
|
40
|
+
const a = m().membersPanel, t = e.disabledReason ?? (l ? a.removing : void 0);
|
|
41
|
+
return /* @__PURE__ */ n(
|
|
42
|
+
g,
|
|
43
|
+
{
|
|
44
|
+
trigger: /* @__PURE__ */ n(
|
|
45
|
+
v,
|
|
46
|
+
{
|
|
47
|
+
icon: /* @__PURE__ */ n(u, { name: "trash-2", size: "sm" }),
|
|
48
|
+
label: a.remove(e.user.name),
|
|
49
|
+
tone: "danger",
|
|
50
|
+
size: "sm",
|
|
51
|
+
disabledReason: t
|
|
52
|
+
}
|
|
53
|
+
),
|
|
54
|
+
title: a.removeTitle(e.user.name),
|
|
55
|
+
description: e.disabledReason ?? a.removeDescription(e.user.name),
|
|
56
|
+
confirmLabel: a.removeConfirm,
|
|
57
|
+
destructive: !0,
|
|
58
|
+
loading: l,
|
|
59
|
+
onConfirm: () => s(e.user.id)
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
function S(e, l, s, a, t, c) {
|
|
64
|
+
return [
|
|
65
|
+
{
|
|
66
|
+
id: "member",
|
|
67
|
+
header: e.columnMember,
|
|
68
|
+
accessorFn: (i) => i.user.name,
|
|
69
|
+
cell: ({ row: i }) => {
|
|
70
|
+
const { user: o } = i.original, r = /* @__PURE__ */ n(b, { primary: o.name, secondary: o.email });
|
|
71
|
+
return /* @__PURE__ */ d("div", { className: "flex items-center gap-3", children: [
|
|
72
|
+
/* @__PURE__ */ n(p, { src: o.avatarUrl, name: o.name, size: "sm" }),
|
|
73
|
+
c === void 0 ? r : /* @__PURE__ */ d("div", { className: "flex min-w-0 flex-col gap-1", children: [
|
|
74
|
+
r,
|
|
75
|
+
c(i.original)
|
|
76
|
+
] })
|
|
77
|
+
] });
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
id: "role",
|
|
82
|
+
header: e.columnRole,
|
|
83
|
+
accessorFn: (i) => i.role.label,
|
|
84
|
+
cell: ({ row: i }) => /* @__PURE__ */ n(
|
|
85
|
+
N,
|
|
86
|
+
{
|
|
87
|
+
member: i.original,
|
|
88
|
+
assignableRoles: l,
|
|
89
|
+
busy: s === i.original.user.id,
|
|
90
|
+
onChangeRole: a
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
id: "joined",
|
|
96
|
+
header: e.columnJoined,
|
|
97
|
+
accessorFn: (i) => i.joinedAt,
|
|
98
|
+
cell: ({ row: i }) => /* @__PURE__ */ n("span", { className: "text-secondary", children: /* @__PURE__ */ n(C, { at: i.original.joinedAt }) })
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
id: "actions",
|
|
102
|
+
header: "",
|
|
103
|
+
enableSorting: !1,
|
|
104
|
+
cell: ({ row: i }) => /* @__PURE__ */ n("div", { className: "flex justify-end", children: /* @__PURE__ */ n(
|
|
105
|
+
j,
|
|
106
|
+
{
|
|
107
|
+
member: i.original,
|
|
108
|
+
busy: s === i.original.user.id,
|
|
109
|
+
onRemove: t
|
|
110
|
+
}
|
|
111
|
+
) })
|
|
112
|
+
}
|
|
113
|
+
];
|
|
114
|
+
}
|
|
115
|
+
function J({
|
|
116
|
+
members: e,
|
|
117
|
+
assignableRoles: l,
|
|
118
|
+
onChangeRole: s,
|
|
119
|
+
onRemove: a,
|
|
120
|
+
busyUserId: t,
|
|
121
|
+
renderMemberExtra: c,
|
|
122
|
+
emptyState: i,
|
|
123
|
+
className: o
|
|
124
|
+
}) {
|
|
125
|
+
const r = m().membersPanel, f = S(r, l, t, s, a, c);
|
|
126
|
+
return e.length === 0 ? i ?? /* @__PURE__ */ n(
|
|
127
|
+
y,
|
|
128
|
+
{
|
|
129
|
+
icon: /* @__PURE__ */ n(u, { name: "users", size: "lg", className: "text-tertiary" }),
|
|
130
|
+
title: r.emptyTitle,
|
|
131
|
+
description: r.emptyDescription
|
|
132
|
+
}
|
|
133
|
+
) : /* @__PURE__ */ n(R, { columns: f, data: e, className: o });
|
|
134
|
+
}
|
|
135
|
+
export {
|
|
136
|
+
J as MembersPanel
|
|
137
|
+
};
|
|
138
|
+
//# sourceMappingURL=MembersPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MembersPanel.js","sources":["../../../src/components/rbac/MembersPanel.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport { Avatar } from \"../Avatar\";\nimport { AlertDialog } from \"../Dialog\";\nimport { IconButton } from \"../IconButton\";\nimport { Icon } from \"../Icon\";\nimport { Select, SelectItem } from \"../Select\";\nimport { CellStack, DataTable, TableEmptyState } from \"../Table\";\nimport { RelativeTime } from \"../RelativeTime\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport type { UiStrings } from \"../../lib/i18n\";\nimport type { Role, User } from \"./types\";\n\n/* ----------------------------------------------------------------------------\n MEMBERS PANEL\n\n A team's member list: who's in it, their role, when they joined, and the\n two mutations a member list ever needs — change a member's role, or remove\n them. Composes `DataTable` (PLN-13 R-3/plan direction, 2026-09-27: \"there\n are no team-specific table components\" — this is the library's ONE table\n primitive, fed team-member rows, not a second one).\n\n PRESENTATIONAL ONLY. Every mutation is a callback; the panel never fetches\n and knows nothing about HTTP, permission keys, or what \"owner\" means to a\n consumer's own catalog — it renders whatever `members[]` / `assignableRoles[]`\n it is handed, same relationship every other `rbac/` component has with its\n data (see `types.ts`'s own header).\n\n `disabledReason` is per-row, not a panel-wide flag: a consumer computes it\n once (e.g. \"the team's only owner\" for the sole `role.key === \"owner\"` row)\n and the row's role Select and remove control both go inert with that text\n as their tooltip/description, rather than the caller re-deriving the same\n rule in two places or the panel guessing at role semantics it has no\n business knowing.\n -------------------------------------------------------------------------- */\n\nexport interface MembersPanelMember {\n user: User;\n /** The member's CURRENT role. */\n role: Role;\n /** ISO timestamp of when the member joined the team. */\n joinedAt: string;\n /** Non-null disables this row's role Select and remove control, with this\n * text as the reason shown alongside them (e.g. \"The team's only owner\"). */\n disabledReason?: string;\n}\n\nexport interface MembersPanelProps {\n members: MembersPanelMember[];\n /** The roles a member may be changed TO — the role Select's options. A row\n * whose own role is not listed still shows that role (its label is kept as\n * that row's one extra option); it is never offered to any other row. */\n assignableRoles: Role[];\n onChangeRole: (userId: string, roleId: string) => void;\n onRemove: (userId: string) => void;\n /** The id of a row currently mid-mutation. Disables just that row rather\n * than the whole panel, so an operator working through several rows in a\n * row is never blocked on the last one's round trip. */\n busyUserId?: string | null;\n /** Extra content drawn inside each member's row, below the name and email,\n * given that row's member. Absent, the row is exactly the default one. */\n renderMemberExtra?: (member: MembersPanelMember) => ReactNode;\n emptyState?: ReactNode;\n className?: string;\n}\n\nfunction RoleCell({\n member,\n assignableRoles,\n busy,\n onChangeRole,\n}: {\n member: MembersPanelMember;\n assignableRoles: Role[];\n busy: boolean;\n onChangeRole: (userId: string, roleId: string) => void;\n}) {\n const strings = useUiStrings().membersPanel;\n const options = assignableRoles.some((r) => r.id === member.role.id)\n ? assignableRoles\n : [...assignableRoles, member.role];\n const disabled = busy || member.disabledReason !== undefined;\n return (\n <div className=\"flex flex-col gap-1\">\n <Select\n aria-label={strings.roleFor(member.user.name)}\n value={member.role.id}\n onValueChange={(value) => {\n const roleId = value as string | null;\n if (roleId && roleId !== member.role.id) onChangeRole(member.user.id, roleId);\n }}\n disabled={disabled}\n size=\"sm\"\n >\n {options.map((role) => (\n <SelectItem key={role.id} value={role.id}>\n {role.label}\n </SelectItem>\n ))}\n </Select>\n {member.disabledReason && <span className=\"text-2xs text-tertiary\">{member.disabledReason}</span>}\n </div>\n );\n}\n\nfunction RemoveCell({\n member,\n busy,\n onRemove,\n}: {\n member: MembersPanelMember;\n busy: boolean;\n onRemove: (userId: string) => void;\n}) {\n const strings = useUiStrings().membersPanel;\n const disabledReason = member.disabledReason ?? (busy ? strings.removing : undefined);\n return (\n <AlertDialog\n trigger={\n <IconButton\n icon={<Icon name=\"trash-2\" size=\"sm\" />}\n label={strings.remove(member.user.name)}\n tone=\"danger\"\n size=\"sm\"\n disabledReason={disabledReason}\n />\n }\n title={strings.removeTitle(member.user.name)}\n description={member.disabledReason ?? strings.removeDescription(member.user.name)}\n confirmLabel={strings.removeConfirm}\n destructive\n loading={busy}\n onConfirm={() => onRemove(member.user.id)}\n />\n );\n}\n\nfunction buildColumns(\n strings: UiStrings[\"membersPanel\"],\n assignableRoles: Role[],\n busyUserId: string | null | undefined,\n onChangeRole: (userId: string, roleId: string) => void,\n onRemove: (userId: string) => void,\n renderMemberExtra: ((member: MembersPanelMember) => ReactNode) | undefined,\n): ColumnDef<MembersPanelMember, unknown>[] {\n return [\n {\n id: \"member\",\n header: strings.columnMember,\n accessorFn: (m) => m.user.name,\n cell: ({ row }) => {\n const { user } = row.original;\n const stack = <CellStack primary={user.name} secondary={user.email} />;\n return (\n <div className=\"flex items-center gap-3\">\n <Avatar src={user.avatarUrl} name={user.name} size=\"sm\" />\n {renderMemberExtra === undefined ? (\n stack\n ) : (\n <div className=\"flex min-w-0 flex-col gap-1\">\n {stack}\n {renderMemberExtra(row.original)}\n </div>\n )}\n </div>\n );\n },\n },\n {\n id: \"role\",\n header: strings.columnRole,\n accessorFn: (m) => m.role.label,\n cell: ({ row }) => (\n <RoleCell\n member={row.original}\n assignableRoles={assignableRoles}\n busy={busyUserId === row.original.user.id}\n onChangeRole={onChangeRole}\n />\n ),\n },\n {\n id: \"joined\",\n header: strings.columnJoined,\n accessorFn: (m) => m.joinedAt,\n cell: ({ row }) => <span className=\"text-secondary\"><RelativeTime at={row.original.joinedAt} /></span>,\n },\n {\n id: \"actions\",\n header: \"\",\n enableSorting: false,\n cell: ({ row }) => (\n <div className=\"flex justify-end\">\n <RemoveCell\n member={row.original}\n busy={busyUserId === row.original.user.id}\n onRemove={onRemove}\n />\n </div>\n ),\n },\n ];\n}\n\nexport function MembersPanel({\n members,\n assignableRoles,\n onChangeRole,\n onRemove,\n busyUserId,\n renderMemberExtra,\n emptyState,\n className,\n}: MembersPanelProps) {\n const strings = useUiStrings().membersPanel;\n const columns = buildColumns(strings, assignableRoles, busyUserId, onChangeRole, onRemove, renderMemberExtra);\n\n if (members.length === 0) {\n return (\n emptyState ?? (\n <TableEmptyState\n icon={<Icon name=\"users\" size=\"lg\" className=\"text-tertiary\" />}\n title={strings.emptyTitle}\n description={strings.emptyDescription}\n />\n )\n );\n }\n\n return <DataTable columns={columns} data={members} className={className} />;\n}\n"],"names":["RoleCell","member","assignableRoles","busy","onChangeRole","strings","useUiStrings","options","r","disabled","jsxs","jsx","Select","value","roleId","role","SelectItem","RemoveCell","onRemove","disabledReason","AlertDialog","IconButton","Icon","buildColumns","busyUserId","renderMemberExtra","m","row","user","stack","CellStack","Avatar","RelativeTime","MembersPanel","members","emptyState","className","columns","TableEmptyState","DataTable"],"mappings":"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"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { jsxs as p, jsx as e, Fragment as u } from "react/jsx-runtime";
|
|
2
|
+
import { useState as j } from "react";
|
|
3
|
+
import { Callout as C } from "../Callout.js";
|
|
4
|
+
import { CheckboxField as q } from "../Choice.js";
|
|
5
|
+
import { DescriptionList as G } from "../DescriptionList.js";
|
|
6
|
+
import { FieldSet as A } from "../Field.js";
|
|
7
|
+
import { cn as H } from "../../lib/cn.js";
|
|
8
|
+
import { DateTimeText as S } from "../DateTimeText.js";
|
|
9
|
+
import { RelativeTime as W } from "../RelativeTime.js";
|
|
10
|
+
import { useApprovalActions as O, ApprovalHeader as U, ConfirmCodeCallout as z, ApprovalError as I, ApprovalButtons as J, ExpiredNotice as M, TerminalCallout as b } from "./approvalPanelParts.js";
|
|
11
|
+
import { groupByCategory as Q } from "./permissionSections.js";
|
|
12
|
+
import { useUiStrings as x } from "../../lib/i18n/provider.js";
|
|
13
|
+
function D(t, r) {
|
|
14
|
+
return [...new Set(t)].map((i) => r.find((o) => o.key === i) ?? { key: i, label: i });
|
|
15
|
+
}
|
|
16
|
+
function V(t, r, i) {
|
|
17
|
+
const { permissionRequest: o, approval: n } = t;
|
|
18
|
+
return [
|
|
19
|
+
{ key: "key", term: o.key, value: r.keyName },
|
|
20
|
+
{
|
|
21
|
+
key: "requested",
|
|
22
|
+
term: n.requested,
|
|
23
|
+
value: /* @__PURE__ */ p(u, { children: [
|
|
24
|
+
/* @__PURE__ */ e(S, { at: r.requestedAt }),
|
|
25
|
+
" (",
|
|
26
|
+
/* @__PURE__ */ e(W, { at: r.requestedAt, tooltip: !1 }),
|
|
27
|
+
")"
|
|
28
|
+
] })
|
|
29
|
+
},
|
|
30
|
+
i && r.expiresAt ? { key: "expires", term: n.expires, value: /* @__PURE__ */ e(S, { at: r.expiresAt }) } : null
|
|
31
|
+
].filter((c) => c !== null);
|
|
32
|
+
}
|
|
33
|
+
function T({ labels: t }) {
|
|
34
|
+
return /* @__PURE__ */ e("ul", { className: "mt-1 list-disc pl-5", children: t.map((r) => /* @__PURE__ */ e("li", { children: r }, r)) });
|
|
35
|
+
}
|
|
36
|
+
function X({
|
|
37
|
+
state: t,
|
|
38
|
+
request: r,
|
|
39
|
+
permissions: i,
|
|
40
|
+
expiredNote: o
|
|
41
|
+
}) {
|
|
42
|
+
const n = x().permissionRequest, a = r.grantedKeys && r.grantedKeys.length > 0 ? D(r.grantedKeys, i).map((c) => c.label) : null;
|
|
43
|
+
switch (t) {
|
|
44
|
+
case "approved":
|
|
45
|
+
return /* @__PURE__ */ e(b, { state: t, children: a ? /* @__PURE__ */ p(u, { children: [
|
|
46
|
+
n.approvedWithList,
|
|
47
|
+
/* @__PURE__ */ e(T, { labels: a })
|
|
48
|
+
] }) : n.approvedNoList });
|
|
49
|
+
case "claimed":
|
|
50
|
+
return /* @__PURE__ */ e(b, { state: t, children: a ? /* @__PURE__ */ p(u, { children: [
|
|
51
|
+
n.claimedWithList,
|
|
52
|
+
/* @__PURE__ */ e(T, { labels: a })
|
|
53
|
+
] }) : n.claimedNoList });
|
|
54
|
+
case "denied":
|
|
55
|
+
return /* @__PURE__ */ e(b, { state: t, children: n.denied });
|
|
56
|
+
case "expired":
|
|
57
|
+
return /* @__PURE__ */ e(M, { note: o, fallback: n.expiredFallback });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function Y({
|
|
61
|
+
permission: t,
|
|
62
|
+
held: r,
|
|
63
|
+
checked: i,
|
|
64
|
+
disabled: o,
|
|
65
|
+
onCheckedChange: n
|
|
66
|
+
}) {
|
|
67
|
+
const a = x().permissionRequest, c = t.description || !r ? /* @__PURE__ */ p(u, { children: [
|
|
68
|
+
t.description && /* @__PURE__ */ e("span", { className: "block", children: t.description }),
|
|
69
|
+
!r && /* @__PURE__ */ e("span", { className: "block text-danger-text", children: a.notHeld })
|
|
70
|
+
] }) : void 0;
|
|
71
|
+
return /* @__PURE__ */ e(
|
|
72
|
+
q,
|
|
73
|
+
{
|
|
74
|
+
label: t.label,
|
|
75
|
+
description: c,
|
|
76
|
+
checked: i,
|
|
77
|
+
disabled: o || !r,
|
|
78
|
+
onCheckedChange: n
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
function ce({
|
|
83
|
+
request: t,
|
|
84
|
+
state: r,
|
|
85
|
+
permissions: i,
|
|
86
|
+
ownPermissionKeys: o,
|
|
87
|
+
onApprove: n,
|
|
88
|
+
onDeny: a,
|
|
89
|
+
expiredNote: c,
|
|
90
|
+
className: L
|
|
91
|
+
}) {
|
|
92
|
+
const f = x(), s = f.permissionRequest, k = new Set(o), g = D(t.permissionKeys, i), v = g.filter((l) => k.has(l.key)), [R, K] = j(/* @__PURE__ */ new Set()), y = v.filter((l) => !R.has(l.key)).map((l) => l.key), F = new Set(y), { busy: N, error: P, run: B } = O(), w = r === "pending";
|
|
93
|
+
function E(l, h) {
|
|
94
|
+
K((d) => {
|
|
95
|
+
const m = new Set(d);
|
|
96
|
+
return h ? m.delete(l) : m.add(l), m;
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return /* @__PURE__ */ p("div", { className: H("flex flex-col gap-5", L), children: [
|
|
100
|
+
/* @__PURE__ */ e(U, { title: s.title, state: r }),
|
|
101
|
+
/* @__PURE__ */ e(G, { entries: V(f, t, w), className: "divide-y divide-border-subtle" }),
|
|
102
|
+
/* @__PURE__ */ p("figure", { className: "flex flex-col gap-1.5", children: [
|
|
103
|
+
/* @__PURE__ */ e("figcaption", { className: "text-xs font-medium text-secondary", children: s.reasonGiven }),
|
|
104
|
+
/* @__PURE__ */ e("blockquote", { className: "border-l-2 border-accent-border bg-surface-sunken py-2 pl-3 text-sm break-words whitespace-pre-wrap text-secondary", children: t.reason })
|
|
105
|
+
] }),
|
|
106
|
+
w ? /* @__PURE__ */ p(u, { children: [
|
|
107
|
+
/* @__PURE__ */ e(z, { code: t.confirmCode }),
|
|
108
|
+
/* @__PURE__ */ e(C, { tone: "warning", title: f.approval.approveOnlyTitle, children: s.approveBody }),
|
|
109
|
+
/* @__PURE__ */ e(I, { error: P }),
|
|
110
|
+
v.length === 0 && /* @__PURE__ */ e(C, { tone: "danger", title: s.emptyTitle, children: s.emptyDescription }),
|
|
111
|
+
g.length > 0 && /* @__PURE__ */ e(A, { legend: s.legend, description: s.legendDescription, children: Q(g, s.otherCategory).map((l) => {
|
|
112
|
+
const h = l.items.map((d) => /* @__PURE__ */ e(
|
|
113
|
+
Y,
|
|
114
|
+
{
|
|
115
|
+
permission: d,
|
|
116
|
+
held: k.has(d.key),
|
|
117
|
+
checked: F.has(d.key),
|
|
118
|
+
disabled: N !== null,
|
|
119
|
+
onCheckedChange: (m) => E(d.key, m)
|
|
120
|
+
},
|
|
121
|
+
d.key
|
|
122
|
+
));
|
|
123
|
+
return l.label === void 0 ? /* @__PURE__ */ e("div", { className: "flex flex-col gap-3", children: h }, "all") : /* @__PURE__ */ e(A, { legend: l.label, className: "gap-2.5", children: h }, l.label);
|
|
124
|
+
}) }),
|
|
125
|
+
/* @__PURE__ */ e(
|
|
126
|
+
J,
|
|
127
|
+
{
|
|
128
|
+
busy: N,
|
|
129
|
+
run: B,
|
|
130
|
+
onApprove: () => n(y),
|
|
131
|
+
onDeny: a,
|
|
132
|
+
approveDisabled: y.length === 0
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
] }) : /* @__PURE__ */ e(X, { state: r, request: t, permissions: i, expiredNote: c })
|
|
136
|
+
] });
|
|
137
|
+
}
|
|
138
|
+
export {
|
|
139
|
+
ce as PermissionRequestPanel
|
|
140
|
+
};
|
|
141
|
+
//# sourceMappingURL=PermissionRequestPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionRequestPanel.js","sources":["../../../src/components/rbac/PermissionRequestPanel.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Callout } from \"../Callout\";\nimport { CheckboxField } from \"../Choice\";\nimport { DescriptionList, type DescriptionListEntry } from \"../DescriptionList\";\nimport { FieldSet } from \"../Field\";\nimport { cn } from \"../../lib/cn\";\nimport { DateTimeText } from \"../DateTimeText\";\nimport { RelativeTime } from \"../RelativeTime\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport type { UiStrings } from \"../../lib/i18n\";\nimport {\n ApprovalButtons,\n ApprovalError,\n ApprovalHeader,\n ConfirmCodeCallout,\n ExpiredNotice,\n TerminalCallout,\n useApprovalActions,\n type AccessRequestState,\n type ExpiredNote,\n} from \"./approvalPanelParts\";\nimport { groupByCategory } from \"./permissionSections\";\nimport type { Permission } from \"./types\";\n\n/* ----------------------------------------------------------------------------\n PERMISSION REQUEST PANEL (DX-4433)\n\n THE SCREEN A PERSON SEES WHEN AN AGENT THAT ALREADY HOLDS A KEY ASKS FOR MORE.\n The key exists and acts with a role; the agent hit something that role does\n not allow and asked for specific permissions, with a reason. Approving adds\n the ones the person leaves checked to that key, on top of its role. This\n panel is the whole decision: which key is asking, why, the code to compare,\n which of the requested permissions to grant, approve or deny. It is the\n sibling of `AccessRequestPanel` (a request for a key and a role), and shares\n its header, confirm code, terminal callouts and busy / error handling with it\n (`approvalPanelParts`), so the two cards read as one screen.\n\n PRESENTATIONAL, like its sibling. It fetches nothing and knows no endpoint.\n `state` is whatever the consumer's server derived and is never assumed to\n follow a click: after `onApprove` resolves the panel stays \"pending\" until\n the consumer hands it `state=\"approved\"` (and `request.grantedKeys`).\n A rejection from `onApprove` / `onDeny` shows its message and re-enables the\n buttons.\n\n THE PERSON CAN GRANT LESS, NEVER MORE. Every grantable permission starts\n CHECKED, because the person is answering the agent's own ask, and unchecking\n is how a subset is approved: `onApprove` receives exactly the checked keys.\n A requested permission the approver does not hold (`ownPermissionKeys`) is\n shown unchecked and disabled with the reason, and is never passed to\n `onApprove`: nobody can hand out what they lack. The server refuses it\n anyway, so the disabled row is the same rule shown before the round trip.\n Approve is disabled while nothing is checked; Deny never is. With nothing\n grantable the panel says so and keeps only Deny.\n\n THE REASON IS THE AGENT'S WORDS, SO IT IS DATA. It renders as quoted plain\n text (React escapes it; no markdown, no links). The confirm code is for\n comparing, not copying, exactly as in `AccessRequestPanel`.\n\n A permission key the catalog does not know renders with the raw key as its\n label: an agent can ask for a key this consumer's catalog lacks, and the\n person must still see what is being asked rather than a blank row.\n ---------------------------------------------------------------------------- */\n\nexport interface PermissionRequest {\n /** The name of the key that is asking: what the agent's key is called. */\n keyName: string;\n /** The agent's stated reason, plain text. */\n reason: string;\n /** The permission keys requested, in the order the agent listed them. */\n permissionKeys: string[];\n /** ISO instant. */\n requestedAt: string;\n /** ISO instant. Shown while the request is pending. */\n expiresAt?: string;\n /** The short code the agent also displays. Compared by eye, never entered. */\n confirmCode: string;\n /** What was actually granted (a subset of `permissionKeys`). Shown once the request is approved or claimed. */\n grantedKeys?: string[];\n}\n\nexport interface PermissionRequestPanelProps {\n request: PermissionRequest;\n state: AccessRequestState;\n /** The permission catalog: labels, categories and descriptions for the requested keys. */\n permissions: Permission[];\n /** What the approver holds. A requested permission outside this set is shown disabled and can never be granted. */\n ownPermissionKeys: string[];\n /** Receives exactly the permission keys left checked. */\n onApprove: (permissionKeys: string[]) => Promise<void>;\n onDeny: () => Promise<void>;\n /**\n * Why an expired request expired and what its requester does next. Used only in the `expired` state; without it the readout says only\n * that nothing was granted.\n */\n expiredNote?: ExpiredNote;\n className?: string;\n}\n\n/** The catalog entry for each distinct requested key, in request order; a key the catalog lacks stands for itself. */\nfunction requestedPermissions(keys: string[], catalog: Permission[]): Permission[] {\n return [...new Set(keys)].map((key) => catalog.find((p) => p.key === key) ?? { key, label: key });\n}\n\nfunction factEntries(strings: UiStrings, request: PermissionRequest, pending: boolean): DescriptionListEntry[] {\n const { permissionRequest, approval } = strings;\n const entries: (DescriptionListEntry | null)[] = [\n { key: \"key\", term: permissionRequest.key, value: request.keyName },\n {\n key: \"requested\",\n term: approval.requested,\n value: (\n <>\n <DateTimeText at={request.requestedAt} /> (<RelativeTime at={request.requestedAt} tooltip={false} />)\n </>\n ),\n },\n pending && request.expiresAt ? { key: \"expires\", term: approval.expires, value: <DateTimeText at={request.expiresAt} /> } : null,\n ];\n return entries.filter((entry): entry is DescriptionListEntry => entry !== null);\n}\n\nfunction GrantedList({ labels }: { labels: string[] }) {\n return (\n <ul className=\"mt-1 list-disc pl-5\">\n {labels.map((label) => (\n <li key={label}>{label}</li>\n ))}\n </ul>\n );\n}\n\nfunction TerminalNotice({\n state,\n request,\n permissions,\n expiredNote,\n}: {\n state: Exclude<AccessRequestState, \"pending\">;\n request: PermissionRequest;\n permissions: Permission[];\n expiredNote: ExpiredNote | undefined;\n}) {\n const strings = useUiStrings().permissionRequest;\n const granted = request.grantedKeys && request.grantedKeys.length > 0\n ? requestedPermissions(request.grantedKeys, permissions).map((p) => p.label)\n : null;\n switch (state) {\n case \"approved\":\n return (\n <TerminalCallout state={state}>\n {granted ? (\n <>\n {strings.approvedWithList}\n <GrantedList labels={granted} />\n </>\n ) : (\n strings.approvedNoList\n )}\n </TerminalCallout>\n );\n case \"claimed\":\n return (\n <TerminalCallout state={state}>\n {granted ? (\n <>\n {strings.claimedWithList}\n <GrantedList labels={granted} />\n </>\n ) : (\n strings.claimedNoList\n )}\n </TerminalCallout>\n );\n case \"denied\":\n return (\n <TerminalCallout state={state}>\n {strings.denied}\n </TerminalCallout>\n );\n case \"expired\":\n return <ExpiredNotice note={expiredNote} fallback={strings.expiredFallback} />;\n }\n}\n\nfunction PermissionCheckbox({\n permission,\n held,\n checked,\n disabled,\n onCheckedChange,\n}: {\n permission: Permission;\n held: boolean;\n checked: boolean;\n disabled: boolean;\n onCheckedChange: (checked: boolean) => void;\n}) {\n const strings = useUiStrings().permissionRequest;\n const description =\n permission.description || !held ? (\n <>\n {permission.description && <span className=\"block\">{permission.description}</span>}\n {!held && <span className=\"block text-danger-text\">{strings.notHeld}</span>}\n </>\n ) : undefined;\n return (\n <CheckboxField\n label={permission.label}\n description={description}\n checked={checked}\n disabled={disabled || !held}\n onCheckedChange={onCheckedChange}\n />\n );\n}\n\nexport function PermissionRequestPanel({\n request,\n state,\n permissions,\n ownPermissionKeys,\n onApprove,\n onDeny,\n expiredNote,\n className,\n}: PermissionRequestPanelProps) {\n const allStrings = useUiStrings();\n const strings = allStrings.permissionRequest;\n const own = new Set(ownPermissionKeys);\n const requested = requestedPermissions(request.permissionKeys, permissions);\n const grantable = requested.filter((p) => own.has(p.key));\n // What the person unchecked, not what they checked: every grantable permission starts checked, and the checked set is\n // derived, so permissions that arrive or become grantable after mount start checked too and Approve can never submit a\n // key the rows show as unavailable.\n const [dropped, setDropped] = useState<ReadonlySet<string>>(new Set());\n const checkedKeys = grantable.filter((p) => !dropped.has(p.key)).map((p) => p.key);\n const checked = new Set(checkedKeys);\n const { busy, error, run } = useApprovalActions();\n\n const pending = state === \"pending\";\n\n function toggle(key: string, on: boolean) {\n setDropped((prev) => {\n const next = new Set(prev);\n if (on) next.delete(key);\n else next.add(key);\n return next;\n });\n }\n\n return (\n <div className={cn(\"flex flex-col gap-5\", className)}>\n <ApprovalHeader title={strings.title} state={state} />\n\n <DescriptionList entries={factEntries(allStrings, request, pending)} className=\"divide-y divide-border-subtle\" />\n\n <figure className=\"flex flex-col gap-1.5\">\n <figcaption className=\"text-xs font-medium text-secondary\">{strings.reasonGiven}</figcaption>\n <blockquote className=\"border-l-2 border-accent-border bg-surface-sunken py-2 pl-3 text-sm break-words whitespace-pre-wrap text-secondary\">\n {request.reason}\n </blockquote>\n </figure>\n\n {pending ? (\n <>\n <ConfirmCodeCallout code={request.confirmCode} />\n\n <Callout tone=\"warning\" title={allStrings.approval.approveOnlyTitle}>\n {strings.approveBody}\n </Callout>\n\n <ApprovalError error={error} />\n\n {grantable.length === 0 && (\n <Callout tone=\"danger\" title={strings.emptyTitle}>\n {strings.emptyDescription}\n </Callout>\n )}\n\n {requested.length > 0 && (\n <FieldSet legend={strings.legend} description={strings.legendDescription}>\n {groupByCategory(requested, strings.otherCategory).map((section) => {\n const rows = section.items.map((permission) => (\n <PermissionCheckbox\n key={permission.key}\n permission={permission}\n held={own.has(permission.key)}\n checked={checked.has(permission.key)}\n disabled={busy !== null}\n onCheckedChange={(on) => toggle(permission.key, on)}\n />\n ));\n return section.label === undefined ? (\n <div key=\"all\" className=\"flex flex-col gap-3\">\n {rows}\n </div>\n ) : (\n <FieldSet key={section.label} legend={section.label} className=\"gap-2.5\">\n {rows}\n </FieldSet>\n );\n })}\n </FieldSet>\n )}\n\n <ApprovalButtons\n busy={busy}\n run={run}\n onApprove={() => onApprove(checkedKeys)}\n onDeny={onDeny}\n approveDisabled={checkedKeys.length === 0}\n />\n </>\n ) : (\n <TerminalNotice state={state} request={request} permissions={permissions} expiredNote={expiredNote} />\n )}\n </div>\n );\n}\n"],"names":["requestedPermissions","keys","catalog","key","p","factEntries","strings","request","pending","permissionRequest","approval","jsxs","Fragment","jsx","DateTimeText","RelativeTime","entry","GrantedList","labels","label","TerminalNotice","state","permissions","expiredNote","useUiStrings","granted","TerminalCallout","ExpiredNotice","PermissionCheckbox","permission","held","checked","disabled","onCheckedChange","description","CheckboxField","PermissionRequestPanel","ownPermissionKeys","onApprove","onDeny","className","allStrings","own","requested","grantable","dropped","setDropped","useState","checkedKeys","busy","error","run","useApprovalActions","toggle","on","prev","next","cn","ApprovalHeader","DescriptionList","ConfirmCodeCallout","Callout","ApprovalError","FieldSet","section","rows","ApprovalButtons"],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { jsx as i, jsxs as y } from "react/jsx-runtime";
|
|
2
|
+
import { useState as p } from "react";
|
|
3
|
+
import { Callout as C } from "../Callout.js";
|
|
4
|
+
import { Field as u } from "../Field.js";
|
|
5
|
+
import { ImageUploadField as T } from "../ImageUploadField.js";
|
|
6
|
+
import { Input as h } from "../Input.js";
|
|
7
|
+
import { useSaveFlow as k, StagedFormActions as q } from "./stagedForm.js";
|
|
8
|
+
import { useStagedImage as z } from "./useStagedImage.js";
|
|
9
|
+
import { useUiStrings as B } from "../../lib/i18n/provider.js";
|
|
10
|
+
function X({
|
|
11
|
+
account: e,
|
|
12
|
+
onSave: N,
|
|
13
|
+
onUploadAvatar: D,
|
|
14
|
+
saveLabel: c,
|
|
15
|
+
discardLabel: I,
|
|
16
|
+
className: j
|
|
17
|
+
}) {
|
|
18
|
+
const g = B(), l = g.profileForm, [n, f] = p(e.name), [d, S] = p(e.username ?? ""), [s, F] = p(e.email), a = z(e.avatarUrl, D), { saving: t, saved: w, error: U, edit: m, save: A } = k(l.failedMessage), o = e.username !== void 0, v = e.username ?? "", b = n.trim() !== e.name || o && d.trim() !== v || s.trim() !== e.email || a.dirty, E = n !== e.name || o && d !== v || s !== e.email || a.dirty, x = b && n.trim().length > 0 && s.trim().length > 0 && !t && !a.uploading;
|
|
19
|
+
function M() {
|
|
20
|
+
if (!x) return;
|
|
21
|
+
const r = {
|
|
22
|
+
name: n.trim(),
|
|
23
|
+
username: o ? d.trim() : void 0,
|
|
24
|
+
email: s.trim()
|
|
25
|
+
};
|
|
26
|
+
a.dirty && (r.avatarUrl = a.value), A(() => N(r));
|
|
27
|
+
}
|
|
28
|
+
function P() {
|
|
29
|
+
m(() => {
|
|
30
|
+
f(e.name), S(v), F(e.email), a.discard();
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return /* @__PURE__ */ i("div", { className: j, children: /* @__PURE__ */ y("div", { className: "flex flex-col gap-5", children: [
|
|
34
|
+
w && !b && /* @__PURE__ */ i(C, { tone: "success", title: l.saved }),
|
|
35
|
+
U && /* @__PURE__ */ i(C, { tone: "danger", title: l.failedTitle, children: U }),
|
|
36
|
+
/* @__PURE__ */ i(
|
|
37
|
+
T,
|
|
38
|
+
{
|
|
39
|
+
label: l.avatar,
|
|
40
|
+
value: a.value,
|
|
41
|
+
shape: "circle",
|
|
42
|
+
disabled: t,
|
|
43
|
+
onUpload: a.upload,
|
|
44
|
+
onChange: (r) => m(() => a.stage(r)),
|
|
45
|
+
description: a.dirty ? g.stagedForm.imageNote("avatar", c ?? g.stagedForm.save, a.value === null) : void 0
|
|
46
|
+
}
|
|
47
|
+
),
|
|
48
|
+
/* @__PURE__ */ y("div", { className: "grid gap-4 sm:grid-cols-2", children: [
|
|
49
|
+
/* @__PURE__ */ i(u, { label: l.name, children: /* @__PURE__ */ i(h, { value: n, onChange: (r) => m(() => f(r.target.value)), disabled: t }) }),
|
|
50
|
+
o && /* @__PURE__ */ i(u, { label: l.username, children: /* @__PURE__ */ i(
|
|
51
|
+
h,
|
|
52
|
+
{
|
|
53
|
+
value: d,
|
|
54
|
+
onChange: (r) => m(() => S(r.target.value)),
|
|
55
|
+
disabled: t,
|
|
56
|
+
leading: /* @__PURE__ */ i("span", { "aria-hidden": !0, children: "@" })
|
|
57
|
+
}
|
|
58
|
+
) }),
|
|
59
|
+
/* @__PURE__ */ i(u, { label: l.email, children: /* @__PURE__ */ i(
|
|
60
|
+
h,
|
|
61
|
+
{
|
|
62
|
+
type: "email",
|
|
63
|
+
value: s,
|
|
64
|
+
onChange: (r) => m(() => F(r.target.value)),
|
|
65
|
+
disabled: t
|
|
66
|
+
}
|
|
67
|
+
) })
|
|
68
|
+
] }),
|
|
69
|
+
/* @__PURE__ */ i(
|
|
70
|
+
q,
|
|
71
|
+
{
|
|
72
|
+
onSave: M,
|
|
73
|
+
onDiscard: P,
|
|
74
|
+
canSave: x,
|
|
75
|
+
canDiscard: E && !a.uploading,
|
|
76
|
+
saving: t,
|
|
77
|
+
saveLabel: c,
|
|
78
|
+
discardLabel: I
|
|
79
|
+
}
|
|
80
|
+
)
|
|
81
|
+
] }) });
|
|
82
|
+
}
|
|
83
|
+
export {
|
|
84
|
+
X as ProfileForm
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=ProfileForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfileForm.js","sources":["../../../src/components/rbac/ProfileForm.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Callout } from \"../Callout\";\nimport { Field } from \"../Field\";\nimport { ImageUploadField } from \"../ImageUploadField\";\nimport { Input } from \"../Input\";\nimport { useUiStrings } from \"../../lib/i18n\";\nimport { StagedFormActions, useSaveFlow } from \"./stagedForm\";\nimport { useStagedImage } from \"./useStagedImage\";\n\n/* ============================================================================\n PROFILE FORM\n\n THE ATOMIC, CONTROLLED HALF OF ACCOUNT IDENTITY — name, username, email,\n avatar, and one `onSave`. Nothing here reads `useRBAC()`, knows about roles\n or permissions, or has an opinion about impersonation; that is precisely\n what makes it a separate component from `ProfilePage` rather than a mode of\n it (see that file's own header for how the two compose). A consumer that\n only wants an identity-editing card somewhere OTHER than a full profile\n page — a settings drawer, an onboarding step — uses this directly.\n\n DX-4131 — THE AVATAR IS STAGED, NOT SAVED ON UPLOAD. `onUploadAvatar` only\n has to put the file somewhere and resolve with its URL; nothing about the\n account may change then. The picked (or removed) avatar is held as form\n state, previewed at once with a \"Not saved yet\" note, and handed to `onSave`\n — with the text fields — when Save is clicked. Discard drops every edit,\n the avatar included, without a request. (The avatar used to persist the\n moment its upload resolved while the text fields waited for Save, so one\n form had two save models and a new picture could not be taken back.)\n\n `onSave` RECEIVES `avatarUrl` ONLY WHEN THE AVATAR CHANGED. The key is\n absent for a text-only Save (keep the stored avatar), `null` for a staged\n removal, a URL for a staged upload — the same three states a `PATCH` body\n carries (omitted keeps, `null` clears, string sets).\n\n SEEDED ONCE FROM `account`, THEN LOCAL — same convention `RoleEditorDialog`\n uses for its own label/description fields (see that file's header): this\n form's local draft does not silently overwrite itself if `account` changes\n underneath it (e.g. a background refetch), because that would discard\n whatever the operator is mid-typing. A consumer that needs the draft to\n follow a genuinely new account (switching accounts, not refreshing the same\n one) remounts this component with a `key` — the standard React answer to\n \"start this local state over.\" (The staged avatar follows the saved one\n until it is staged — see `useStagedImage`.)\n ========================================================================= */\n\nexport interface ProfileFormAccount {\n name: string;\n /** Omit entirely for a consumer whose account model has no separate\n * username concept — the field simply does not render (see `types.ts`'s\n * own `User.username` doc for the same optional-field convention). */\n username?: string;\n email: string;\n avatarUrl?: string | null;\n}\n\nexport interface ProfileFormSaveInput {\n name: string;\n username?: string;\n email: string;\n /** Present only when the avatar changed: a URL sets it, `null` removes it. */\n avatarUrl?: string | null;\n}\n\nexport interface ProfileFormProps {\n account: ProfileFormAccount;\n onSave: (input: ProfileFormSaveInput) => Promise<void>;\n /** Uploads the file to storage and resolves with its URL. Must NOT change the\n * account — the avatar is only persisted by `onSave`. */\n onUploadAvatar: (file: File) => Promise<string>;\n saveLabel?: string;\n discardLabel?: string;\n className?: string;\n}\n\nexport function ProfileForm({\n account,\n onSave,\n onUploadAvatar,\n saveLabel,\n discardLabel,\n className,\n}: ProfileFormProps) {\n const allStrings = useUiStrings();\n const strings = allStrings.profileForm;\n const [name, setName] = useState(account.name);\n const [username, setUsername] = useState(account.username ?? \"\");\n const [email, setEmail] = useState(account.email);\n const avatar = useStagedImage(account.avatarUrl, onUploadAvatar);\n const { saving, saved, error, edit, save } = useSaveFlow(strings.failedMessage);\n\n const hasUsername = account.username !== undefined;\n const savedUsername = account.username ?? \"\";\n // `changed` is what Save would send (trimmed values); `touched` is any difference at all, so\n // a stray trailing space can still be discarded though there is nothing to save.\n const changed =\n name.trim() !== account.name ||\n (hasUsername && username.trim() !== savedUsername) ||\n email.trim() !== account.email ||\n avatar.dirty;\n const touched =\n name !== account.name || (hasUsername && username !== savedUsername) || email !== account.email || avatar.dirty;\n const canSave = changed && name.trim().length > 0 && email.trim().length > 0 && !saving && !avatar.uploading;\n\n function handleSave() {\n if (!canSave) return;\n const input: ProfileFormSaveInput = {\n name: name.trim(),\n username: hasUsername ? username.trim() : undefined,\n email: email.trim(),\n };\n if (avatar.dirty) input.avatarUrl = avatar.value;\n void save(() => onSave(input));\n }\n\n function handleDiscard() {\n edit(() => {\n setName(account.name);\n setUsername(savedUsername);\n setEmail(account.email);\n avatar.discard();\n });\n }\n\n return (\n <div className={className}>\n <div className=\"flex flex-col gap-5\">\n {saved && !changed && <Callout tone=\"success\" title={strings.saved} />}\n {error && <Callout tone=\"danger\" title={strings.failedTitle}>{error}</Callout>}\n\n <ImageUploadField\n label={strings.avatar}\n value={avatar.value}\n shape=\"circle\"\n disabled={saving}\n onUpload={avatar.upload}\n onChange={(url) => edit(() => avatar.stage(url))}\n description={avatar.dirty ? allStrings.stagedForm.imageNote(\"avatar\", saveLabel ?? allStrings.stagedForm.save, avatar.value === null) : undefined}\n />\n\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <Field label={strings.name}>\n <Input value={name} onChange={(event) => edit(() => setName(event.target.value))} disabled={saving} />\n </Field>\n {hasUsername && (\n <Field label={strings.username}>\n <Input\n value={username}\n onChange={(event) => edit(() => setUsername(event.target.value))}\n disabled={saving}\n leading={<span aria-hidden>@</span>}\n />\n </Field>\n )}\n <Field label={strings.email}>\n <Input\n type=\"email\"\n value={email}\n onChange={(event) => edit(() => setEmail(event.target.value))}\n disabled={saving}\n />\n </Field>\n </div>\n\n <StagedFormActions\n onSave={handleSave}\n onDiscard={handleDiscard}\n canSave={canSave}\n canDiscard={touched && !avatar.uploading}\n saving={saving}\n saveLabel={saveLabel}\n discardLabel={discardLabel}\n />\n </div>\n </div>\n );\n}\n"],"names":["ProfileForm","account","onSave","onUploadAvatar","saveLabel","discardLabel","className","allStrings","useUiStrings","strings","name","setName","useState","username","setUsername","email","setEmail","avatar","useStagedImage","saving","saved","error","edit","save","useSaveFlow","hasUsername","savedUsername","changed","touched","canSave","handleSave","input","handleDiscard","jsxs","jsx","Callout","ImageUploadField","url","Field","Input","event","StagedFormActions"],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx as e, jsxs as a, Fragment as P } from "react/jsx-runtime";
|
|
2
|
+
import { useState as h } from "react";
|
|
3
|
+
import { Avatar as R } from "../Avatar.js";
|
|
4
|
+
import { Field as g } from "../Field.js";
|
|
5
|
+
import { Icon as I } from "../Icon.js";
|
|
6
|
+
import { Input as u } from "../Input.js";
|
|
7
|
+
import { useRBAC as y } from "./RBACProvider.js";
|
|
8
|
+
import { ProfileForm as k } from "./ProfileForm.js";
|
|
9
|
+
import { useUiStrings as b } from "../../lib/i18n/provider.js";
|
|
10
|
+
import { emphasis as N } from "../../lib/i18n/emphasis.js";
|
|
11
|
+
function S({
|
|
12
|
+
account: r,
|
|
13
|
+
onSave: s,
|
|
14
|
+
onUploadAvatar: i,
|
|
15
|
+
heading: m = !0,
|
|
16
|
+
className: n
|
|
17
|
+
}) {
|
|
18
|
+
const t = b().profilePage, { actualUser: l, actualRole: p, effectiveRole: o, grantedPermissions: f, isImpersonating: v, currentTeam: c } = y(), d = !!(r && s && i);
|
|
19
|
+
return /* @__PURE__ */ e("div", { className: n, children: /* @__PURE__ */ a("div", { className: "flex flex-col gap-6", children: [
|
|
20
|
+
(m || !d) && /* @__PURE__ */ a("div", { className: "flex items-center gap-4", children: [
|
|
21
|
+
!d && /* @__PURE__ */ e(R, { name: l.name, src: l.avatarUrl, size: "xl" }),
|
|
22
|
+
m && /* @__PURE__ */ a("div", { className: "min-w-0", children: [
|
|
23
|
+
/* @__PURE__ */ e("h1", { className: "font-display text-xl font-semibold text-primary", children: t.title }),
|
|
24
|
+
c && /* @__PURE__ */ e("p", { className: "truncate text-sm text-tertiary", children: c.name })
|
|
25
|
+
] })
|
|
26
|
+
] }),
|
|
27
|
+
d ? /* @__PURE__ */ e(
|
|
28
|
+
k,
|
|
29
|
+
{
|
|
30
|
+
account: r,
|
|
31
|
+
onSave: s,
|
|
32
|
+
onUploadAvatar: i
|
|
33
|
+
}
|
|
34
|
+
) : /* @__PURE__ */ e(C, {}),
|
|
35
|
+
/* @__PURE__ */ a("div", { className: "flex flex-col gap-3 border-t border-border-subtle pt-5", children: [
|
|
36
|
+
/* @__PURE__ */ e("h2", { className: "font-display text-md font-semibold text-primary", children: t.rolesHeading }),
|
|
37
|
+
v && p && /* @__PURE__ */ e("p", { role: "status", className: "text-xs text-tertiary", children: t.viewingAs(o?.label ?? "", p.label, N) }),
|
|
38
|
+
o ? /* @__PURE__ */ a(P, { children: [
|
|
39
|
+
/* @__PURE__ */ e("p", { className: "text-sm text-secondary", children: t.holdsRole(o.label, c?.name, N) }),
|
|
40
|
+
f.length > 0 ? /* @__PURE__ */ e("ul", { className: "flex flex-col gap-2", children: f.map((x) => /* @__PURE__ */ a("li", { className: "flex items-start gap-2 text-sm text-secondary", children: [
|
|
41
|
+
/* @__PURE__ */ e(I, { name: "check", size: "sm", className: "mt-0.5 shrink-0 text-success" }),
|
|
42
|
+
/* @__PURE__ */ e("span", { children: x.label })
|
|
43
|
+
] }, x.key)) }) : /* @__PURE__ */ e("p", { className: "text-sm text-tertiary", children: t.noPermissions })
|
|
44
|
+
] }) : /* @__PURE__ */ e("p", { className: "text-sm text-tertiary", children: t.noRole })
|
|
45
|
+
] })
|
|
46
|
+
] }) });
|
|
47
|
+
}
|
|
48
|
+
function C() {
|
|
49
|
+
const r = b().profilePage, { actualUser: s } = y(), [i, m] = h(s.name), [n, t] = h(s.email);
|
|
50
|
+
return /* @__PURE__ */ a("div", { className: "grid gap-4 sm:grid-cols-2", children: [
|
|
51
|
+
/* @__PURE__ */ e(g, { label: r.name, children: /* @__PURE__ */ e(u, { value: i, onChange: (l) => m(l.target.value) }) }),
|
|
52
|
+
/* @__PURE__ */ e(g, { label: r.email, children: /* @__PURE__ */ e(u, { type: "email", value: n, onChange: (l) => t(l.target.value) }) })
|
|
53
|
+
] });
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
S as ProfilePage
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=ProfilePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfilePage.js","sources":["../../../src/components/rbac/ProfilePage.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Avatar } from \"../Avatar\";\nimport { Field } from \"../Field\";\nimport { Icon } from \"../Icon\";\nimport { Input } from \"../Input\";\nimport { emphasis, useUiStrings } from \"../../lib/i18n\";\nimport { useRBAC } from \"./RBACProvider\";\nimport { ProfileForm, type ProfileFormAccount, type ProfileFormSaveInput } from \"./ProfileForm\";\n\n/* ============================================================================\n PROFILE PAGE\n\n IDENTITY VS. ROLE, KEPT DELIBERATELY SEPARATE. The name/email/avatar block\n always shows `actualUser` — impersonation swaps which ROLE the app treats\n you as, never which USER you are, so \"who am I\" and \"what can I currently\n do\" are two different questions answered from two different fields\n (`actualUser` vs. `effectiveRole`).\n\n \"WHAT CAN I CURRENTLY DO\" USES `effectiveRole`, ON PURPOSE. Everywhere else\n in an app built on this library, impersonation is meant to change what the\n UI shows — that is the entire feature. Profile is an ordinary page, not\n Dev Tools, so it plays along with the impersonated view like any other\n screen would; the one exemption from that rule belongs solely to\n `canAccessDevTools` (see `RBACProvider.tsx`). A banner still names the\n difference explicitly while impersonating, so nobody reads a stranger's\n permissions and mistakes them for their own standing access.\n\n DX-3411 — PROPS-DRIVEN IDENTITY, OPTIONAL AND BACKWARD-COMPATIBLE. This page\n used to have no props at all: the name/email inputs were local `useState`,\n editable but inert, on purpose (this library never owns a save action).\n `account` / `onSave` / `onUploadAvatar` add that save action WITHOUT taking\n away the old shape — omit all three (or just `onSave`/`onUploadAvatar`, the\n two this page actually needs to make identity SAVABLE) and the page falls\n straight back to the original read-only-but-editable `actualUser` display,\n pixel for pixel, exactly as every existing consumer already gets. Passing\n them swaps that block for `ProfileForm` — the new, atomic, `useRBAC()`-free\n controlled component this card also introduces (see its own header) — while\n the roles & permissions section below stays exactly what it always was:\n read-only, sourced from `useRBAC()`, and unaffected by whether identity is\n savable.\n ========================================================================= */\n\nexport interface ProfilePageProps {\n /** The identity fields to edit. Omit to keep the original read-only (but\n * still locally-editable) `actualUser` display. */\n account?: ProfileFormAccount;\n onSave?: (input: ProfileFormSaveInput) => Promise<void>;\n /** Uploads the file and resolves with its URL; the avatar is persisted only by `onSave` (DX-4131). */\n onUploadAvatar?: (file: File) => Promise<string>;\n /** DX-4029: `false` omits the page's own title text (the `<h1>` and the\n * team-name line) so a host layout can own the screen's one `<h1>`. The\n * read-only avatar (content, not title) stays, and the default `true` is\n * the unchanged render. */\n heading?: boolean;\n className?: string;\n}\n\nexport function ProfilePage({\n account,\n onSave,\n onUploadAvatar,\n heading = true,\n className,\n}: ProfilePageProps) {\n const strings = useUiStrings().profilePage;\n const { actualUser, actualRole, effectiveRole, grantedPermissions, isImpersonating, currentTeam } = useRBAC();\n\n /* All three of `account`/`onSave`/`onUploadAvatar` are needed to make\n identity genuinely savable — a consumer that supplies `account` without\n the two callbacks would get a form with no way to act on it, which is\n worse than the plain read-only display it would otherwise fall back to. */\n const savable = Boolean(account && onSave && onUploadAvatar);\n\n return (\n <div className={className}>\n <div className=\"flex flex-col gap-6\">\n {(heading || !savable) && (\n <div className=\"flex items-center gap-4\">\n {/* The savable form renders its OWN avatar control (`ImageUploadField`,\n inside `ProfileForm`) — showing a second, read-only avatar here\n too would just be the same picture twice. */}\n {!savable && <Avatar name={actualUser.name} src={actualUser.avatarUrl} size=\"xl\" />}\n {/* DX-4029: no title block at all when the host owns the h1, so no empty\n row or gap is left behind. */}\n {heading && (\n <div className=\"min-w-0\">\n <h1 className=\"font-display text-xl font-semibold text-primary\">{strings.title}</h1>\n {currentTeam && <p className=\"truncate text-sm text-tertiary\">{currentTeam.name}</p>}\n </div>\n )}\n </div>\n )}\n\n {savable ? (\n <ProfileForm\n account={account!}\n onSave={onSave!}\n onUploadAvatar={onUploadAvatar!}\n />\n ) : (\n <ProfilePageReadOnlyIdentity />\n )}\n\n <div className=\"flex flex-col gap-3 border-t border-border-subtle pt-5\">\n <h2 className=\"font-display text-md font-semibold text-primary\">{strings.rolesHeading}</h2>\n\n {isImpersonating && actualRole && (\n <p role=\"status\" className=\"text-xs text-tertiary\">\n {strings.viewingAs(effectiveRole?.label ?? \"\", actualRole.label, emphasis)}\n </p>\n )}\n\n {effectiveRole ? (\n <>\n <p className=\"text-sm text-secondary\">\n {strings.holdsRole(effectiveRole.label, currentTeam?.name, emphasis)}\n </p>\n {grantedPermissions.length > 0 ? (\n <ul className=\"flex flex-col gap-2\">\n {grantedPermissions.map((permission) => (\n <li key={permission.key} className=\"flex items-start gap-2 text-sm text-secondary\">\n <Icon name=\"check\" size=\"sm\" className=\"mt-0.5 shrink-0 text-success\" />\n <span>{permission.label}</span>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-sm text-tertiary\">{strings.noPermissions}</p>\n )}\n </>\n ) : (\n <p className=\"text-sm text-tertiary\">{strings.noRole}</p>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * The ORIGINAL name/email block, unmoved and unchanged — `useState` seeded\n * from `actualUser`, editable but wired to nothing, exactly as this page has\n * always behaved for a consumer that supplies no save action. Split into its\n * own function only so `ProfilePage` doesn't have to hold two unrelated\n * `useState` pairs (this one, and whatever `ProfileForm` owns) live in the\n * same component at once depending on a prop.\n */\nfunction ProfilePageReadOnlyIdentity() {\n const strings = useUiStrings().profilePage;\n const { actualUser } = useRBAC();\n const [name, setName] = useState(actualUser.name);\n const [email, setEmail] = useState(actualUser.email);\n\n return (\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <Field label={strings.name}>\n <Input value={name} onChange={(event) => setName(event.target.value)} />\n </Field>\n <Field label={strings.email}>\n <Input type=\"email\" value={email} onChange={(event) => setEmail(event.target.value)} />\n </Field>\n </div>\n );\n}\n"],"names":["ProfilePage","account","onSave","onUploadAvatar","heading","className","strings","useUiStrings","actualUser","actualRole","effectiveRole","grantedPermissions","isImpersonating","currentTeam","useRBAC","savable","jsxs","jsx","Avatar","ProfileForm","ProfilePageReadOnlyIdentity","emphasis","Fragment","permission","Icon","name","setName","useState","email","setEmail","Field","Input","event"],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { useState as y, useMemo as i, useCallback as I, useContext as k, createContext as K } from "react";
|
|
3
|
+
const x = K(null);
|
|
4
|
+
function j({
|
|
5
|
+
currentUser: t,
|
|
6
|
+
roles: o,
|
|
7
|
+
permissions: u,
|
|
8
|
+
teams: c,
|
|
9
|
+
memberships: d,
|
|
10
|
+
currentTeamId: f,
|
|
11
|
+
canAccessDevTools: C,
|
|
12
|
+
children: B
|
|
13
|
+
}) {
|
|
14
|
+
const [e, g] = y(null), R = i(
|
|
15
|
+
() => c.find((n) => n.id === f),
|
|
16
|
+
[c, f]
|
|
17
|
+
), l = i(() => {
|
|
18
|
+
const n = d.find(
|
|
19
|
+
(v) => v.userId === t.id && v.teamId === f
|
|
20
|
+
);
|
|
21
|
+
if (n)
|
|
22
|
+
return o.find((v) => v.id === n.roleId);
|
|
23
|
+
}, [d, o, t.id, f]), a = i(
|
|
24
|
+
() => e ? o.find((n) => n.id === e) : l,
|
|
25
|
+
[e, o, l]
|
|
26
|
+
), s = i(
|
|
27
|
+
() => new Set(a?.permissionKeys ?? []),
|
|
28
|
+
[a]
|
|
29
|
+
), A = I(
|
|
30
|
+
(n) => s.has(n),
|
|
31
|
+
[s]
|
|
32
|
+
), w = i(
|
|
33
|
+
() => u.filter((n) => s.has(n.key)),
|
|
34
|
+
[u, s]
|
|
35
|
+
), P = i(
|
|
36
|
+
() => C(t, o, d),
|
|
37
|
+
[C, t, o, d]
|
|
38
|
+
), h = i(
|
|
39
|
+
() => ({
|
|
40
|
+
actualUser: t,
|
|
41
|
+
currentTeam: R,
|
|
42
|
+
actualRole: l,
|
|
43
|
+
viewingAsRoleId: e,
|
|
44
|
+
setViewingAsRoleId: g,
|
|
45
|
+
effectiveRole: a,
|
|
46
|
+
effectivePermissionKeys: s,
|
|
47
|
+
grantedPermissions: w,
|
|
48
|
+
hasPermission: A,
|
|
49
|
+
canAccessDevTools: P,
|
|
50
|
+
isImpersonating: e !== null,
|
|
51
|
+
roles: o,
|
|
52
|
+
permissions: u,
|
|
53
|
+
teams: c
|
|
54
|
+
}),
|
|
55
|
+
[
|
|
56
|
+
t,
|
|
57
|
+
R,
|
|
58
|
+
l,
|
|
59
|
+
e,
|
|
60
|
+
a,
|
|
61
|
+
s,
|
|
62
|
+
w,
|
|
63
|
+
A,
|
|
64
|
+
P,
|
|
65
|
+
o,
|
|
66
|
+
u,
|
|
67
|
+
c
|
|
68
|
+
]
|
|
69
|
+
);
|
|
70
|
+
return /* @__PURE__ */ r(x.Provider, { value: h, children: B });
|
|
71
|
+
}
|
|
72
|
+
function D() {
|
|
73
|
+
const t = k(x);
|
|
74
|
+
if (!t)
|
|
75
|
+
throw new Error("useRBAC must be used within an <RBACProvider>.");
|
|
76
|
+
return t;
|
|
77
|
+
}
|
|
78
|
+
export {
|
|
79
|
+
j as RBACProvider,
|
|
80
|
+
D as useRBAC
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=RBACProvider.js.map
|