@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,128 @@
|
|
|
1
|
+
import { jsxs as a, jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { useId as U, useRef as C, useState as y } from "react";
|
|
3
|
+
import { cn as u } from "../lib/cn.js";
|
|
4
|
+
import { formatBytes as c } from "../lib/format.js";
|
|
5
|
+
import { Icon as i } from "./Icon.js";
|
|
6
|
+
import { IconButton as F } from "./IconButton.js";
|
|
7
|
+
import { Progress as L } from "./Progress.js";
|
|
8
|
+
import { useUiLocale as O, useUiStrings as R } from "../lib/i18n/provider.js";
|
|
9
|
+
function J({
|
|
10
|
+
files: m = [],
|
|
11
|
+
onFilesAdded: D,
|
|
12
|
+
onFileRemoved: k,
|
|
13
|
+
accept: w,
|
|
14
|
+
multiple: j = !0,
|
|
15
|
+
maxSize: t,
|
|
16
|
+
disabled: d = !1,
|
|
17
|
+
label: z,
|
|
18
|
+
hint: g,
|
|
19
|
+
className: B
|
|
20
|
+
}) {
|
|
21
|
+
const x = U(), n = O(), o = R().fileUpload, l = C(0), [h, f] = y(!1), [b, _] = y([]);
|
|
22
|
+
function v(e) {
|
|
23
|
+
if (!e) return;
|
|
24
|
+
const p = Array.from(e), I = t ? p.filter((s) => s.size > t) : [], N = t ? p.filter((s) => s.size <= t) : p;
|
|
25
|
+
_(
|
|
26
|
+
I.map((s) => o.tooBig(s.name, c(s.size, n), c(t, n)))
|
|
27
|
+
), N.length && D?.(N);
|
|
28
|
+
}
|
|
29
|
+
return /* @__PURE__ */ a("div", { className: u("flex w-full min-w-0 flex-col gap-3", B), children: [
|
|
30
|
+
/* @__PURE__ */ a(
|
|
31
|
+
"label",
|
|
32
|
+
{
|
|
33
|
+
htmlFor: x,
|
|
34
|
+
onDragEnter: (e) => {
|
|
35
|
+
e.preventDefault(), l.current++, f(!0);
|
|
36
|
+
},
|
|
37
|
+
onDragLeave: (e) => {
|
|
38
|
+
e.preventDefault(), l.current--, l.current <= 0 && f(!1);
|
|
39
|
+
},
|
|
40
|
+
onDragOver: (e) => e.preventDefault(),
|
|
41
|
+
onDrop: (e) => {
|
|
42
|
+
e.preventDefault(), l.current = 0, f(!1), d || v(e.dataTransfer.files);
|
|
43
|
+
},
|
|
44
|
+
className: u(
|
|
45
|
+
"flex cursor-pointer flex-col items-center justify-center gap-2 rounded-xl px-6 py-10 text-center",
|
|
46
|
+
/* `dx-ground-sunken`: the interaction fills mix from the surface a
|
|
47
|
+
thing is painted ON, and this well is two ramp steps below the
|
|
48
|
+
default. Without it the hover lift is measured from the wrong
|
|
49
|
+
floor. tokens.css, "GROUND SCOPES". */
|
|
50
|
+
"dx-ground-sunken border-2 border-dashed border-border bg-surface-sunken",
|
|
51
|
+
"transition-[var(--tx-colors),scale] duration-(--dur-fast) ease-hover",
|
|
52
|
+
"hover:border-border-interactive hover:bg-surface-hover",
|
|
53
|
+
/* The zone grows very slightly under a dragged file. It is the only
|
|
54
|
+
feedback available at the moment the pointer is holding something
|
|
55
|
+
and the cursor itself cannot change. */
|
|
56
|
+
h && "scale-[1.01] border-control bg-control-subtle",
|
|
57
|
+
d && "pointer-events-none opacity-45",
|
|
58
|
+
"has-focus-visible:border-control has-focus-visible:shadow-[0_0_0_3px_var(--control-focus-halo)]"
|
|
59
|
+
),
|
|
60
|
+
children: [
|
|
61
|
+
/* @__PURE__ */ r(
|
|
62
|
+
"span",
|
|
63
|
+
{
|
|
64
|
+
className: u(
|
|
65
|
+
"grid size-12 place-items-center rounded-full bg-surface-raised text-tertiary",
|
|
66
|
+
"transition-[var(--tx-colors),translate] duration-(--dur-base) ease-snappy",
|
|
67
|
+
h && "-translate-y-1 bg-control text-control-contrast"
|
|
68
|
+
),
|
|
69
|
+
children: /* @__PURE__ */ r(i, { name: "upload", size: "lg" })
|
|
70
|
+
}
|
|
71
|
+
),
|
|
72
|
+
/* @__PURE__ */ r("span", { className: "text-sm font-medium text-primary", children: z ?? o.dropOrBrowse }),
|
|
73
|
+
g && /* @__PURE__ */ r("span", { className: "text-2xs text-tertiary", children: g }),
|
|
74
|
+
t && /* @__PURE__ */ r("span", { className: "text-2xs text-tertiary", children: o.upTo(c(t, n)) }),
|
|
75
|
+
/* @__PURE__ */ r(
|
|
76
|
+
"input",
|
|
77
|
+
{
|
|
78
|
+
id: x,
|
|
79
|
+
type: "file",
|
|
80
|
+
accept: w,
|
|
81
|
+
multiple: j,
|
|
82
|
+
disabled: d,
|
|
83
|
+
onChange: (e) => {
|
|
84
|
+
v(e.target.files), e.target.value = "";
|
|
85
|
+
},
|
|
86
|
+
className: "sr-only"
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
),
|
|
92
|
+
b.length > 0 && /* @__PURE__ */ r("ul", { role: "alert", className: "flex flex-col gap-1", children: b.map((e) => /* @__PURE__ */ a("li", { className: "flex items-start gap-1.5 text-2xs text-danger-text", children: [
|
|
93
|
+
/* @__PURE__ */ r(i, { name: "circle-alert", size: "xs", className: "mt-px shrink-0" }),
|
|
94
|
+
e
|
|
95
|
+
] }, e)) }),
|
|
96
|
+
m.length > 0 && /* @__PURE__ */ r("ul", { className: "flex flex-col gap-2", children: m.map((e) => /* @__PURE__ */ a(
|
|
97
|
+
"li",
|
|
98
|
+
{
|
|
99
|
+
className: "flex items-center gap-3 rounded-lg border border-border bg-surface p-3 animate-rise-in",
|
|
100
|
+
children: [
|
|
101
|
+
/* @__PURE__ */ r("span", { className: "grid size-9 shrink-0 place-items-center rounded-md bg-surface-inset text-tertiary", children: /* @__PURE__ */ r(i, { name: e.error ? "circle-alert" : "file", size: "sm", className: e.error ? "text-danger" : void 0 }) }),
|
|
102
|
+
/* @__PURE__ */ a("span", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
|
|
103
|
+
/* @__PURE__ */ a("span", { className: "flex items-baseline justify-between gap-3", children: [
|
|
104
|
+
/* @__PURE__ */ r("span", { className: "truncate text-sm font-medium text-primary", children: e.file.name }),
|
|
105
|
+
/* @__PURE__ */ r("span", { className: "shrink-0 font-mono text-2xs tabular-nums text-tertiary", children: c(e.file.size, n) })
|
|
106
|
+
] }),
|
|
107
|
+
e.error ? /* @__PURE__ */ r("span", { className: "text-2xs text-danger-text", children: e.error }) : e.progress !== void 0 && e.progress < 100 && /* @__PURE__ */ r(L, { value: e.progress, size: "sm", showValue: !1 })
|
|
108
|
+
] }),
|
|
109
|
+
/* @__PURE__ */ r(
|
|
110
|
+
F,
|
|
111
|
+
{
|
|
112
|
+
size: "xs",
|
|
113
|
+
tone: "danger",
|
|
114
|
+
label: o.remove(e.file.name),
|
|
115
|
+
icon: /* @__PURE__ */ r(i, { name: "x", size: "xs" }),
|
|
116
|
+
onClick: () => k?.(e.id)
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
e.id
|
|
122
|
+
)) })
|
|
123
|
+
] });
|
|
124
|
+
}
|
|
125
|
+
export {
|
|
126
|
+
J as FileUpload
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=FileUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUpload.js","sources":["../../src/components/FileUpload.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useId, useRef, useState } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { formatBytes } from \"../lib/format\";\nimport { useUiLocale, useUiStrings } from \"../lib/i18n\";\nimport { Icon } from \"./Icon\";\nimport { IconButton } from \"./IconButton\";\nimport { Progress } from \"./Progress\";\n\n/* ----------------------------------------------------------------------------\n FILE UPLOAD\n\n THE DROP ZONE IS THE EASY HALF, and the half most implementations stop at.\n The parts that decide whether it feels reliable:\n\n - It is a real <input type=\"file\"> with a <label>, so it is focusable, is\n announced correctly, and opens the picker on Enter — none of which a\n div with an onClick does.\n - Drag state is counted, not toggled. `dragenter`/`dragleave` fire for\n every CHILD element the pointer crosses, so a naive boolean flickers off\n the moment the cursor moves over the icon inside the zone. A depth\n counter is the fix, and its absence is the single most common bug in\n hand-rolled drop zones.\n - Rejected files say WHY. \"Invalid file\" tells someone nothing; naming the\n limit they exceeded lets them fix it without guessing.\n\n Upload progress belongs to the caller — this component knows about files,\n not about your transport.\n -------------------------------------------------------------------------- */\n\nexport type UploadFile = {\n id: string;\n file: File;\n /** 0–100 while uploading; omit when the caller is not tracking it. */\n progress?: number;\n error?: string;\n};\n\nexport interface FileUploadProps {\n files?: UploadFile[];\n onFilesAdded?: (files: File[]) => void;\n onFileRemoved?: (id: string) => void;\n accept?: string;\n multiple?: boolean;\n /** Bytes. Files over this are rejected with a message naming the limit. */\n maxSize?: number;\n disabled?: boolean;\n label?: ReactNode;\n hint?: ReactNode;\n className?: string;\n}\n\nexport function FileUpload({\n files = [],\n onFilesAdded,\n onFileRemoved,\n accept,\n multiple = true,\n maxSize,\n disabled = false,\n label,\n hint,\n className,\n}: FileUploadProps) {\n const inputId = useId();\n const locale = useUiLocale();\n const strings = useUiStrings().fileUpload;\n /* A COUNTER, not a boolean — see the note above. */\n const dragDepth = useRef(0);\n const [dragging, setDragging] = useState(false);\n const [rejected, setRejected] = useState<string[]>([]);\n\n function accept_(list: FileList | null) {\n if (!list) return;\n const incoming = Array.from(list);\n const tooBig = maxSize ? incoming.filter((f) => f.size > maxSize) : [];\n const ok = maxSize ? incoming.filter((f) => f.size <= maxSize) : incoming;\n\n setRejected(\n tooBig.map((f) => strings.tooBig(f.name, formatBytes(f.size, locale), formatBytes(maxSize!, locale))),\n );\n if (ok.length) onFilesAdded?.(ok);\n }\n\n return (\n <div className={cn(\"flex w-full min-w-0 flex-col gap-3\", className)}>\n <label\n htmlFor={inputId}\n onDragEnter={(e) => {\n e.preventDefault();\n dragDepth.current++;\n setDragging(true);\n }}\n onDragLeave={(e) => {\n e.preventDefault();\n dragDepth.current--;\n if (dragDepth.current <= 0) setDragging(false);\n }}\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault();\n dragDepth.current = 0;\n setDragging(false);\n if (!disabled) accept_(e.dataTransfer.files);\n }}\n className={cn(\n \"flex cursor-pointer flex-col items-center justify-center gap-2 rounded-xl px-6 py-10 text-center\",\n /* `dx-ground-sunken`: the interaction fills mix from the surface a\n thing is painted ON, and this well is two ramp steps below the\n default. Without it the hover lift is measured from the wrong\n floor. tokens.css, \"GROUND SCOPES\". */\n \"dx-ground-sunken border-2 border-dashed border-border bg-surface-sunken\",\n \"transition-[var(--tx-colors),scale] duration-(--dur-fast) ease-hover\",\n \"hover:border-border-interactive hover:bg-surface-hover\",\n /* The zone grows very slightly under a dragged file. It is the only\n feedback available at the moment the pointer is holding something\n and the cursor itself cannot change. */\n dragging && \"scale-[1.01] border-control bg-control-subtle\",\n disabled && \"pointer-events-none opacity-45\",\n \"has-focus-visible:border-control has-focus-visible:shadow-[0_0_0_3px_var(--control-focus-halo)]\",\n )}\n >\n <span\n className={cn(\n \"grid size-12 place-items-center rounded-full bg-surface-raised text-tertiary\",\n \"transition-[var(--tx-colors),translate] duration-(--dur-base) ease-snappy\",\n dragging && \"-translate-y-1 bg-control text-control-contrast\",\n )}\n >\n <Icon name=\"upload\" size=\"lg\" />\n </span>\n <span className=\"text-sm font-medium text-primary\">{label ?? strings.dropOrBrowse}</span>\n {hint && <span className=\"text-2xs text-tertiary\">{hint}</span>}\n {maxSize && (\n <span className=\"text-2xs text-tertiary\">{strings.upTo(formatBytes(maxSize, locale))}</span>\n )}\n <input\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(e) => {\n accept_(e.target.files);\n /* Cleared so re-picking the SAME file fires change again — without\n this, removing a file and re-adding it silently does nothing. */\n e.target.value = \"\";\n }}\n className=\"sr-only\"\n />\n </label>\n\n {rejected.length > 0 && (\n <ul role=\"alert\" className=\"flex flex-col gap-1\">\n {rejected.map((message) => (\n <li key={message} className=\"flex items-start gap-1.5 text-2xs text-danger-text\">\n <Icon name=\"circle-alert\" size=\"xs\" className=\"mt-px shrink-0\" />\n {message}\n </li>\n ))}\n </ul>\n )}\n\n {files.length > 0 && (\n <ul className=\"flex flex-col gap-2\">\n {files.map((item) => (\n <li\n key={item.id}\n className=\"flex items-center gap-3 rounded-lg border border-border bg-surface p-3 animate-rise-in\"\n >\n <span className=\"grid size-9 shrink-0 place-items-center rounded-md bg-surface-inset text-tertiary\">\n <Icon name={item.error ? \"circle-alert\" : \"file\"} size=\"sm\" className={item.error ? \"text-danger\" : undefined} />\n </span>\n <span className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"flex items-baseline justify-between gap-3\">\n <span className=\"truncate text-sm font-medium text-primary\">{item.file.name}</span>\n <span className=\"shrink-0 font-mono text-2xs tabular-nums text-tertiary\">\n {formatBytes(item.file.size, locale)}\n </span>\n </span>\n {item.error ? (\n <span className=\"text-2xs text-danger-text\">{item.error}</span>\n ) : (\n item.progress !== undefined &&\n item.progress < 100 && (\n <Progress value={item.progress} size=\"sm\" showValue={false} />\n )\n )}\n </span>\n {/* Destructive: removing a queued file discards it. The tone is\n an enhancement on top of the name, never the only signal. */}\n <IconButton\n size=\"xs\"\n tone=\"danger\"\n label={strings.remove(item.file.name)}\n icon={<Icon name=\"x\" size=\"xs\" />}\n onClick={() => onFileRemoved?.(item.id)}\n />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n"],"names":["FileUpload","files","onFilesAdded","onFileRemoved","accept","multiple","maxSize","disabled","label","hint","className","inputId","useId","locale","useUiLocale","strings","useUiStrings","dragDepth","useRef","dragging","setDragging","useState","rejected","setRejected","accept_","list","incoming","tooBig","f","ok","formatBytes","cn","jsxs","jsx","Icon","message","item","Progress","IconButton"],"mappings":";;;;;;;;AAoDO,SAASA,EAAW;AAAA,EACzB,OAAAC,IAAQ,CAAA;AAAA,EACR,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,SAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC;AACF,GAAoB;AAClB,QAAMC,IAAUC,EAAA,GACVC,IAASC,EAAA,GACTC,IAAUC,IAAe,YAEzBC,IAAYC,EAAO,CAAC,GACpB,CAACC,GAAUC,CAAW,IAAIC,EAAS,EAAK,GACxC,CAACC,GAAUC,CAAW,IAAIF,EAAmB,CAAA,CAAE;AAErD,WAASG,EAAQC,GAAuB;AACtC,QAAI,CAACA,EAAM;AACX,UAAMC,IAAW,MAAM,KAAKD,CAAI,GAC1BE,IAASrB,IAAUoB,EAAS,OAAO,CAACE,MAAMA,EAAE,OAAOtB,CAAO,IAAI,CAAA,GAC9DuB,IAAKvB,IAAUoB,EAAS,OAAO,CAACE,MAAMA,EAAE,QAAQtB,CAAO,IAAIoB;AAEjE,IAAAH;AAAA,MACEI,EAAO,IAAI,CAACC,MAAMb,EAAQ,OAAOa,EAAE,MAAME,EAAYF,EAAE,MAAMf,CAAM,GAAGiB,EAAYxB,GAAUO,CAAM,CAAC,CAAC;AAAA,IAAA,GAElGgB,EAAG,UAAQ3B,IAAe2B,CAAE;AAAA,EAClC;AAEA,2BACG,OAAA,EAAI,WAAWE,EAAG,sCAAsCrB,CAAS,GAChE,UAAA;AAAA,IAAA,gBAAAsB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAASrB;AAAA,QACT,aAAa,CAAC,MAAM;AAClB,YAAE,eAAA,GACFM,EAAU,WACVG,EAAY,EAAI;AAAA,QAClB;AAAA,QACA,aAAa,CAAC,MAAM;AAClB,YAAE,eAAA,GACFH,EAAU,WACNA,EAAU,WAAW,KAAGG,EAAY,EAAK;AAAA,QAC/C;AAAA,QACA,YAAY,CAAC,MAAM,EAAE,eAAA;AAAA,QACrB,QAAQ,CAAC,MAAM;AACb,YAAE,eAAA,GACFH,EAAU,UAAU,GACpBG,EAAY,EAAK,GACZb,KAAUiB,EAAQ,EAAE,aAAa,KAAK;AAAA,QAC7C;AAAA,QACA,WAAWO;AAAA,UACT;AAAA;AAAA;AAAA;AAAA;AAAA,UAKA;AAAA,UACA;AAAA,UACA;AAAA;AAAA;AAAA;AAAA,UAIAZ,KAAY;AAAA,UACZZ,KAAY;AAAA,UACZ;AAAA,QAAA;AAAA,QAGF,UAAA;AAAA,UAAA,gBAAA0B;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWF;AAAA,gBACT;AAAA,gBACA;AAAA,gBACAZ,KAAY;AAAA,cAAA;AAAA,cAGd,UAAA,gBAAAc,EAACC,GAAA,EAAK,MAAK,UAAS,MAAK,KAAA,CAAK;AAAA,YAAA;AAAA,UAAA;AAAA,4BAE/B,QAAA,EAAK,WAAU,oCAAoC,UAAA1B,KAASO,EAAQ,cAAa;AAAA,UACjFN,KAAQ,gBAAAwB,EAAC,QAAA,EAAK,WAAU,0BAA0B,UAAAxB,GAAK;AAAA,UACvDH,KACC,gBAAA2B,EAAC,QAAA,EAAK,WAAU,0BAA0B,UAAAlB,EAAQ,KAAKe,EAAYxB,GAASO,CAAM,CAAC,EAAA,CAAE;AAAA,UAEvF,gBAAAoB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAItB;AAAA,cACJ,MAAK;AAAA,cACL,QAAAP;AAAA,cACA,UAAAC;AAAA,cACA,UAAAE;AAAA,cACA,UAAU,CAAC,MAAM;AACf,gBAAAiB,EAAQ,EAAE,OAAO,KAAK,GAGtB,EAAE,OAAO,QAAQ;AAAA,cACnB;AAAA,cACA,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACZ;AAAA,MAAA;AAAA,IAAA;AAAA,IAGDF,EAAS,SAAS,KACjB,gBAAAW,EAAC,MAAA,EAAG,MAAK,SAAQ,WAAU,uBACxB,UAAAX,EAAS,IAAI,CAACa,MACb,gBAAAH,EAAC,MAAA,EAAiB,WAAU,sDAC1B,UAAA;AAAA,MAAA,gBAAAC,EAACC,KAAK,MAAK,gBAAe,MAAK,MAAK,WAAU,kBAAiB;AAAA,MAC9DC;AAAA,IAAA,KAFMA,CAGT,CACD,GACH;AAAA,IAGDlC,EAAM,SAAS,KACd,gBAAAgC,EAAC,MAAA,EAAG,WAAU,uBACX,UAAAhC,EAAM,IAAI,CAACmC,MACV,gBAAAJ;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAK,WAAU,qFACd,UAAA,gBAAAA,EAACC,GAAA,EAAK,MAAME,EAAK,QAAQ,iBAAiB,QAAQ,MAAK,MAAK,WAAWA,EAAK,QAAQ,gBAAgB,QAAW,GACjH;AAAA,UACA,gBAAAJ,EAAC,QAAA,EAAK,WAAU,sCACd,UAAA;AAAA,YAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,6CACd,UAAA;AAAA,cAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,6CAA6C,UAAAG,EAAK,KAAK,MAAK;AAAA,cAC5E,gBAAAH,EAAC,UAAK,WAAU,0DACb,YAAYG,EAAK,KAAK,MAAMvB,CAAM,EAAA,CACrC;AAAA,YAAA,GACF;AAAA,YACCuB,EAAK,QACJ,gBAAAH,EAAC,QAAA,EAAK,WAAU,6BAA6B,UAAAG,EAAK,OAAM,IAExDA,EAAK,aAAa,UAClBA,EAAK,WAAW,OACd,gBAAAH,EAACI,GAAA,EAAS,OAAOD,EAAK,UAAU,MAAK,MAAK,WAAW,GAAA,CAAO;AAAA,UAAA,GAGlE;AAAA,UAGA,gBAAAH;AAAA,YAACK;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAOvB,EAAQ,OAAOqB,EAAK,KAAK,IAAI;AAAA,cACpC,MAAM,gBAAAH,EAACC,GAAA,EAAK,MAAK,KAAI,MAAK,MAAK;AAAA,cAC/B,SAAS,MAAM/B,IAAgBiC,EAAK,EAAE;AAAA,YAAA;AAAA,UAAA;AAAA,QACxC;AAAA,MAAA;AAAA,MA9BKA,EAAK;AAAA,IAAA,CAgCb,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { jsx as o, jsxs as g, Fragment as G } from "react/jsx-runtime";
|
|
2
|
+
import { useId as K, useState as f, useRef as L, useEffect as D, useCallback as X } from "react";
|
|
3
|
+
import { cn as S } from "../lib/cn.js";
|
|
4
|
+
import { formatDate as F } from "../lib/values/date.js";
|
|
5
|
+
import { Badge as q, BADGE_TONE_TEXT as Q } from "./Badge.js";
|
|
6
|
+
import { Button as T } from "./Button.js";
|
|
7
|
+
import { SwitchField as Y } from "./Choice.js";
|
|
8
|
+
import { DateField as P } from "./DateField.js";
|
|
9
|
+
import { Icon as E } from "./Icon.js";
|
|
10
|
+
import { IconButton as Z } from "./IconButton.js";
|
|
11
|
+
import { Input as H } from "./Input.js";
|
|
12
|
+
import { Popover as ee } from "./Popover.js";
|
|
13
|
+
import { Toggle as te } from "./Toggle.js";
|
|
14
|
+
import { useUiStrings as V, useUiLocale as ne } from "../lib/i18n/provider.js";
|
|
15
|
+
import { useNumberFormat as W } from "../lib/i18n/number-format.js";
|
|
16
|
+
function Ne(e) {
|
|
17
|
+
return { kind: "single", ...e };
|
|
18
|
+
}
|
|
19
|
+
function Oe(e) {
|
|
20
|
+
return { kind: "multiple", ...e };
|
|
21
|
+
}
|
|
22
|
+
function M(e) {
|
|
23
|
+
const n = e.options.find((r) => r.tone !== void 0 && r.color !== void 0);
|
|
24
|
+
if (n !== void 0)
|
|
25
|
+
throw new Error(`FilterMenu: filter ${JSON.stringify(e.key)} option ${JSON.stringify(n.value)} has both a tone and a color. A color replaces the tone; give one.`);
|
|
26
|
+
const t = e.options.filter((r) => r.icon !== void 0).length;
|
|
27
|
+
if (t !== 0 && t !== e.options.length)
|
|
28
|
+
throw new Error(
|
|
29
|
+
`FilterMenu: filter ${JSON.stringify(e.key)} gives an icon to ${t} of its ${e.options.length} options. Give every option an icon or none, so the chips stay one shape.`
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
function U(e, n) {
|
|
33
|
+
const t = e.options.find((r) => r.value === n);
|
|
34
|
+
if (t === void 0 && e.keepUnlisted === !0) return { value: n, label: n };
|
|
35
|
+
if (t === void 0)
|
|
36
|
+
throw new Error(
|
|
37
|
+
`FilterMenu: filter ${JSON.stringify(e.key)} is set to a value no option offers: no option carries the value ${JSON.stringify(n)}. The control would name a filter that is not on offer; pass an option for every value the filter can hold.`
|
|
38
|
+
);
|
|
39
|
+
return t;
|
|
40
|
+
}
|
|
41
|
+
function B(e) {
|
|
42
|
+
switch (e.kind) {
|
|
43
|
+
case "single":
|
|
44
|
+
return M(e), e.value === void 0 ? [] : [{ id: e.value, option: U(e, e.value), remove: () => e.onValueChange(void 0) }];
|
|
45
|
+
case "multiple":
|
|
46
|
+
return M(e), e.value.map((n) => ({
|
|
47
|
+
id: n,
|
|
48
|
+
option: U(e, n),
|
|
49
|
+
remove: () => e.onValueChange(e.value.filter((t) => t !== n))
|
|
50
|
+
}));
|
|
51
|
+
case "boolean":
|
|
52
|
+
return e.value ? [{ id: e.key, remove: () => e.onValueChange(!1) }] : [];
|
|
53
|
+
case "date-range":
|
|
54
|
+
return e.value.from === null && e.value.to === null ? [] : [{ id: e.key, remove: () => e.onValueChange({ from: null, to: null }) }];
|
|
55
|
+
case "text":
|
|
56
|
+
return e.value.trim() === "" ? [] : [{ id: e.key, remove: () => e.onValueChange("") }];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function Fe(e) {
|
|
60
|
+
return e.reduce((n, t) => n + B(t).length, 0);
|
|
61
|
+
}
|
|
62
|
+
function _(e, n) {
|
|
63
|
+
if (e.kind === "multiple") {
|
|
64
|
+
e.onValueChange(e.value.includes(n) ? e.value.filter((t) => t !== n) : [...e.value, n]);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
e.onValueChange(e.value === n ? void 0 : n);
|
|
68
|
+
}
|
|
69
|
+
function Se({ fields: e, onClearAll: n, "aria-label": t, icon: r = "filter", size: u = "sm", align: m = "end", className: s }) {
|
|
70
|
+
const l = V().filterMenu, i = W(), c = K(), v = e.map((h) => ({ field: h, entries: B(h) })), w = ae(), p = v.reduce((h, { entries: d }) => h + d.length, 0);
|
|
71
|
+
return /* @__PURE__ */ o(
|
|
72
|
+
ee,
|
|
73
|
+
{
|
|
74
|
+
align: m,
|
|
75
|
+
"aria-labelledby": c,
|
|
76
|
+
trigger: /* @__PURE__ */ o(
|
|
77
|
+
Z,
|
|
78
|
+
{
|
|
79
|
+
icon: /* @__PURE__ */ g(G, { children: [
|
|
80
|
+
/* @__PURE__ */ o(E, { name: r, size: "sm" }),
|
|
81
|
+
p > 0 && /* @__PURE__ */ o("span", { className: "text-xs font-semibold tabular-nums", children: i(p) })
|
|
82
|
+
] }),
|
|
83
|
+
label: l.triggerName(t, p, i(p)),
|
|
84
|
+
variant: "outline",
|
|
85
|
+
size: u,
|
|
86
|
+
className: S(p > 0 && "aspect-auto w-auto gap-1 px-2", s)
|
|
87
|
+
}
|
|
88
|
+
),
|
|
89
|
+
children: /* @__PURE__ */ g("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
|
|
90
|
+
/* @__PURE__ */ g("div", { className: "flex items-center justify-between gap-3", children: [
|
|
91
|
+
/* @__PURE__ */ o("span", { id: c, className: "text-2xs font-medium uppercase tracking-wide text-tertiary", children: t }),
|
|
92
|
+
p > 0 && /* @__PURE__ */ o(T, { variant: "ghost", size: "xs", onClick: n, children: l.clearAll })
|
|
93
|
+
] }),
|
|
94
|
+
v.map(({ field: h, entries: d }) => /* @__PURE__ */ o(re, { field: h, chosen: d.map((x) => x.id), loads: w }, h.key))
|
|
95
|
+
] })
|
|
96
|
+
}
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
function ae() {
|
|
100
|
+
const [e, n] = f({}), t = L(/* @__PURE__ */ new Set()), r = L(!0);
|
|
101
|
+
D(() => (r.current = !0, () => {
|
|
102
|
+
r.current = !1;
|
|
103
|
+
}), []);
|
|
104
|
+
const u = X((m, s = !1) => {
|
|
105
|
+
const l = m.loadOptions;
|
|
106
|
+
if (l === void 0 || t.current.has(m.key) && !s) return;
|
|
107
|
+
t.current.add(m.key), n((c) => ({ ...c, [m.key]: { status: "loading" } }));
|
|
108
|
+
const i = (c) => {
|
|
109
|
+
r.current && n((v) => ({ ...v, [m.key]: c }));
|
|
110
|
+
};
|
|
111
|
+
l().then(
|
|
112
|
+
(c) => i({ status: "ready", options: c }),
|
|
113
|
+
() => i({ status: "failed" })
|
|
114
|
+
);
|
|
115
|
+
}, []);
|
|
116
|
+
return { stateOf: (m) => e[m], start: u };
|
|
117
|
+
}
|
|
118
|
+
function re({ field: e, chosen: n, loads: t }) {
|
|
119
|
+
const r = K();
|
|
120
|
+
return e.kind === "boolean" ? /* @__PURE__ */ o(Y, { label: e.label, size: "sm", checked: e.value, onCheckedChange: (u) => e.onValueChange(u), fieldClassName: "w-fit" }) : /* @__PURE__ */ g("div", { role: "group", "aria-labelledby": r, className: "flex min-w-0 flex-col gap-1.5", children: [
|
|
121
|
+
/* @__PURE__ */ o("span", { id: r, className: "text-xs font-medium text-secondary", children: e.label }),
|
|
122
|
+
e.kind === "date-range" ? /* @__PURE__ */ o(le, { field: e }) : e.kind === "text" ? /* @__PURE__ */ o(ie, { field: e }) : /* @__PURE__ */ o(oe, { field: e, chosen: n, loads: t })
|
|
123
|
+
] });
|
|
124
|
+
}
|
|
125
|
+
function oe({ field: e, chosen: n, loads: t }) {
|
|
126
|
+
const r = V().filterMenu, u = W(), [m, s] = f(""), [l, i] = f([]), [c, v] = f(!1), [w, p] = f(null), h = L(!1), { start: d } = t, x = e.loadOptions !== void 0;
|
|
127
|
+
D(() => {
|
|
128
|
+
x && d(e);
|
|
129
|
+
}, [x, d, e.key]);
|
|
130
|
+
const b = t.stateOf(e.key), y = m.trim(), k = y.toLocaleLowerCase(), I = b?.status === "ready" ? b.options : e.options, C = l.length === 0 ? I : [...I, ...l.filter((a) => !I.some((z) => z.value === a.value))];
|
|
131
|
+
b?.status === "ready" && M({ ...e, options: C });
|
|
132
|
+
const N = e.searchable === !0 && k !== "" ? C.filter((a) => `${a.label} ${a.description ?? ""}`.toLocaleLowerCase().includes(k)) : C, R = e.searchable === !0 && e.maxShown !== void 0 && N.length > e.maxShown, $ = R ? N.slice(0, e.maxShown) : N, j = x && (b === void 0 || b.status === "loading"), J = x && b?.status === "failed", O = e.searchable === !0 && e.onCreate !== void 0 && y !== "" && !C.some((a) => a.label.toLocaleLowerCase() === k || a.value.toLocaleLowerCase() === k), A = () => {
|
|
133
|
+
!O || e.onCreate === void 0 || h.current || (h.current = !0, v(!0), p(null), e.onCreate(y).then(
|
|
134
|
+
(a) => {
|
|
135
|
+
h.current = !1, v(!1), i((z) => [...z, a]), s(""), _(e, a.value);
|
|
136
|
+
},
|
|
137
|
+
(a) => {
|
|
138
|
+
h.current = !1, v(!1), p(a instanceof Error ? a.message : String(a));
|
|
139
|
+
}
|
|
140
|
+
));
|
|
141
|
+
};
|
|
142
|
+
return /* @__PURE__ */ g(G, { children: [
|
|
143
|
+
e.searchable === !0 && /* @__PURE__ */ o(
|
|
144
|
+
H,
|
|
145
|
+
{
|
|
146
|
+
type: "search",
|
|
147
|
+
size: "sm",
|
|
148
|
+
"aria-label": r.searchOptions(e.label),
|
|
149
|
+
placeholder: r.searchOptions(e.label),
|
|
150
|
+
leading: /* @__PURE__ */ o(E, { name: "search", size: "sm" }),
|
|
151
|
+
value: m,
|
|
152
|
+
onChange: (a) => {
|
|
153
|
+
s(a.target.value), p(null);
|
|
154
|
+
},
|
|
155
|
+
onKeyDown: (a) => {
|
|
156
|
+
a.key === "Enter" && O && (a.preventDefault(), A());
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
),
|
|
160
|
+
w !== null && /* @__PURE__ */ o("span", { role: "alert", className: "text-xs text-danger-text", children: w }),
|
|
161
|
+
j && /* @__PURE__ */ o("span", { role: "status", className: "text-xs text-tertiary", children: r.loadingOptions }),
|
|
162
|
+
J && /* @__PURE__ */ g("div", { role: "alert", className: "flex min-w-0 flex-wrap items-center gap-2 text-xs text-tertiary", children: [
|
|
163
|
+
/* @__PURE__ */ o("span", { children: r.loadFailed(e.label) }),
|
|
164
|
+
/* @__PURE__ */ o(T, { variant: "ghost", size: "xs", onClick: () => t.start(e, !0), children: r.tryAgain })
|
|
165
|
+
] }),
|
|
166
|
+
R && /* @__PURE__ */ o("span", { className: "text-xs text-tertiary", children: r.firstOfMatches(u($.length), u(N.length), y) }),
|
|
167
|
+
!j && !J && /* @__PURE__ */ g("div", { className: S("flex min-w-0 gap-1.5", e.layout === "list" ? "flex-col items-stretch" : "flex-wrap", e.searchable === !0 && "max-h-48 overflow-y-auto"), children: [
|
|
168
|
+
$.map((a) => /* @__PURE__ */ g(
|
|
169
|
+
te,
|
|
170
|
+
{
|
|
171
|
+
size: "sm",
|
|
172
|
+
pressed: n.includes(a.value),
|
|
173
|
+
onPressedChange: () => _(e, a.value),
|
|
174
|
+
className: S("border border-border", (a.description !== void 0 || e.layout === "list") && se),
|
|
175
|
+
children: [
|
|
176
|
+
a.color !== void 0 && /* @__PURE__ */ o("span", { "aria-hidden": "true", "data-option-color": a.color, className: "size-2 shrink-0 rounded-full bg-(--badge-color)", style: { "--badge-color": a.color } }),
|
|
177
|
+
a.icon !== void 0 && /* @__PURE__ */ o(E, { name: a.icon, size: "sm", className: a.tone === void 0 ? void 0 : Q[a.tone] }),
|
|
178
|
+
a.label,
|
|
179
|
+
a.description !== void 0 && /* @__PURE__ */ o("span", { className: "min-w-0 truncate font-normal text-tertiary", children: a.description })
|
|
180
|
+
]
|
|
181
|
+
},
|
|
182
|
+
a.value
|
|
183
|
+
)),
|
|
184
|
+
O && /* @__PURE__ */ o(T, { variant: "ghost", size: "sm", disabled: c, "aria-busy": c, onClick: A, className: "justify-start", children: c ? r.creating : (e.createLabel ?? r.createOption)(y) }),
|
|
185
|
+
$.length === 0 && !O && /* @__PURE__ */ o("span", { className: "text-xs text-tertiary", children: r.noMatches })
|
|
186
|
+
] })
|
|
187
|
+
] });
|
|
188
|
+
}
|
|
189
|
+
const se = "min-w-0 max-w-full shrink justify-start";
|
|
190
|
+
function le({ field: e }) {
|
|
191
|
+
const n = V().filterMenu;
|
|
192
|
+
return /* @__PURE__ */ g("div", { className: "flex min-w-0 flex-wrap items-center gap-2", children: [
|
|
193
|
+
/* @__PURE__ */ o(P, { "aria-label": n.dateFrom(e.label), value: e.value.from, onValueChange: (t) => e.onValueChange({ ...e.value, from: t }) }),
|
|
194
|
+
/* @__PURE__ */ o(P, { "aria-label": n.dateTo(e.label), value: e.value.to, onValueChange: (t) => e.onValueChange({ ...e.value, to: t }) })
|
|
195
|
+
] });
|
|
196
|
+
}
|
|
197
|
+
function ie({ field: e }) {
|
|
198
|
+
const [n, t] = f(e.value);
|
|
199
|
+
D(() => t(e.value), [e.value]);
|
|
200
|
+
const r = () => {
|
|
201
|
+
n !== e.value && e.onValueChange(n);
|
|
202
|
+
};
|
|
203
|
+
return /* @__PURE__ */ o(
|
|
204
|
+
H,
|
|
205
|
+
{
|
|
206
|
+
size: "sm",
|
|
207
|
+
"aria-label": e.label,
|
|
208
|
+
placeholder: e.placeholder,
|
|
209
|
+
value: n,
|
|
210
|
+
onChange: (u) => t(u.target.value),
|
|
211
|
+
onKeyDown: (u) => {
|
|
212
|
+
u.key === "Enter" && r();
|
|
213
|
+
},
|
|
214
|
+
onBlur: r
|
|
215
|
+
}
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
function Ee({ fields: e, className: n }) {
|
|
219
|
+
const t = V().filterMenu, r = ne(), u = e.flatMap((s) => B(s).map((l) => ({ field: s, entry: l })));
|
|
220
|
+
if (u.length === 0) return null;
|
|
221
|
+
const m = (s, l) => {
|
|
222
|
+
if (l.option !== void 0) return l.option.label;
|
|
223
|
+
if (s.kind === "date-range") {
|
|
224
|
+
const { from: i, to: c } = s.value;
|
|
225
|
+
return i !== null && c !== null ? t.dateRange(F(i, r), F(c, r)) : i !== null ? t.dateRangeFrom(F(i, r)) : c !== null ? t.dateRangeUntil(F(c, r)) : null;
|
|
226
|
+
}
|
|
227
|
+
return s.kind === "text" ? s.value.trim() : null;
|
|
228
|
+
};
|
|
229
|
+
return /* @__PURE__ */ o("div", { className: S("flex min-w-0 flex-wrap items-center gap-1.5", n), children: u.map(({ field: s, entry: l }) => {
|
|
230
|
+
const i = m(s, l);
|
|
231
|
+
return /* @__PURE__ */ o(
|
|
232
|
+
q,
|
|
233
|
+
{
|
|
234
|
+
"data-filter-chip": `${s.key}:${l.id}`,
|
|
235
|
+
tone: l.option?.tone ?? "neutral",
|
|
236
|
+
color: l.option?.color,
|
|
237
|
+
icon: l.option?.icon !== void 0 ? /* @__PURE__ */ o(E, { name: l.option.icon, size: "xs" }) : void 0,
|
|
238
|
+
dismiss: {
|
|
239
|
+
label: i === null ? t.removeFlag(s.label) : t.removeFilter(s.label, i),
|
|
240
|
+
onDismiss: l.remove
|
|
241
|
+
},
|
|
242
|
+
children: i === null ? s.label : t.chipLabel(s.label, i)
|
|
243
|
+
},
|
|
244
|
+
`${s.key}:${l.id}`
|
|
245
|
+
);
|
|
246
|
+
}) });
|
|
247
|
+
}
|
|
248
|
+
export {
|
|
249
|
+
Ee as FilterChips,
|
|
250
|
+
Se as FilterMenu,
|
|
251
|
+
se as OPTION_WITH_DESCRIPTION,
|
|
252
|
+
Fe as activeFilterCount,
|
|
253
|
+
Oe as multipleFilter,
|
|
254
|
+
Ne as singleFilter
|
|
255
|
+
};
|
|
256
|
+
//# sourceMappingURL=FilterMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterMenu.js","sources":["../../src/components/FilterMenu.tsx"],"sourcesContent":["import { useCallback, useEffect, useId, useRef, useState, type CSSProperties, type ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useNumberFormat, useUiLocale, useUiStrings } from \"../lib/i18n\";\nimport { formatDate } from \"../lib/values/date\";\nimport { Badge, BADGE_TONE_TEXT, type BadgeProps } from \"./Badge\";\nimport { Button } from \"./Button\";\nimport type { ButtonProps } from \"./Button\";\nimport { SwitchField } from \"./Choice\";\nimport { DateField } from \"./DateField\";\nimport { Icon, type IconName } from \"./Icon\";\nimport { IconButton } from \"./IconButton\";\nimport { Input } from \"./Input\";\nimport { Popover } from \"./Popover\";\nimport { Toggle } from \"./Toggle\";\n\n/* ============================================================================\n FILTER MENU - the one control for narrowing a list (DX-5374): an icon button\n that opens a popover of labelled filters, and a row of removable chips that\n says which are on.\n\n WHY NOT A ROW OF SELECTS. A list with five filters drawn as five full-width\n dropdowns spends the whole top of the screen on controls that all say\n \"Select...\", hides what is applied inside each closed box, and cannot show\n two values of one filter. Here the closed control is one icon button (the\n count of what is on beside the funnel), every filter is a labelled group\n inside the popover - its options visible at a glance - and what is currently\n applied is a chip row that is always on screen and takes a filter off with\n one click.\n\n THE TRIGGER IS ICON-ONLY, like SortMenu's. The funnel plus the number of\n active filters; the control's name and that number are its accessible name\n and tooltip.\n\n A FIELD HAS A `kind`, AND THE KIND SAYS HOW IT IS DRAWN. Every filter a list\n in the apps has needs one of these, so a screen never drops back to a loose\n control beside the button:\n single one value of a closed set, as toggle chips (pressing the active one turns it off)\n multiple any number of values of a closed set, as toggle chips\n boolean an on/off switch (the label is the switch's)\n date-range a From and a To date box\n text a text box, applied on Enter or when it loses focus\n `single` and `multiple` take `searchable` for a long set (every team, every\n user): a search box over a scrolling list, so the popover does not grow with\n the set.\n\n STRUCTURE ONLY. This knows nothing of any list: a field is a key, a label,\n a kind, its current value and the change callback. The caller keeps the state\n (a URL, a store). `onClearAll` is ONE callback and not a loop over the\n fields, because a caller that stores all of its filters in one object would\n otherwise overwrite itself once per field.\n\n OPTIONS CARRY AN ICON AND A TONE. An option's `icon` and `tone` draw in the\n popover's chip and in the active chip, so a \"bug\" filter looks like the bug\n it filters. Give every option of a field an icon, or none: a field that mixes\n them throws, so the chips stay one shape. An option whose colour a person\n chose carries a `color` instead of a `tone` (DXUI-74): a dot in the popover,\n a `Badge` `color` on the chip.\n ========================================================================= */\n\nexport type FilterTone = NonNullable<BadgeProps[\"tone\"]>;\n\nexport interface FilterOption<Value extends string = string> {\n value: Value;\n /** The option as a person names it (\"New\", \"Bug\"). */\n label: string;\n /** DX-5436: secondary text drawn after the label in the popover and matched by the search box; never on the active chip, which stays the label alone. */\n description?: string;\n /** A registered icon drawn before the label in the popover and on the active chip. */\n icon?: IconName;\n /** The colour of the icon and of the active chip. Absent, neutral. */\n tone?: FilterTone;\n /**\n * DXUI-74: a CSS colour (hex, `rgb()`, `oklch()`, a `var()`) for an option whose colour a person chose and so cannot be one of the fixed `tone`s (a roadmap phase's).\n * The active chip is a `Badge` in that `color`; the option in the popover leads with a dot of it. Give it instead of `tone`, never both: the option throws.\n */\n color?: string;\n}\n\ninterface FilterFieldBase {\n /** Stable id of the filter. */\n key: string;\n /** The filter as a person names it (\"Status\"). Heads its group and prefixes its chips. */\n label: string;\n}\n\ninterface OptionFilterBase<Value extends string> extends FilterFieldBase {\n /** The options on offer. With `loadOptions` these are the ones known before it resolves (often none); once it resolves, its result is what the popover offers. */\n options: readonly FilterOption<Value>[];\n /** A search box over a scrolling list of the options, for a long set. */\n searchable?: boolean;\n /**\n * DXUI-40: reads the options the first time the popover opens, once. The result is kept for as long as the menu is mounted;\n * while it runs the popover says it is loading, and a rejection draws a Try again button that reads it again. The trigger and\n * the chips never change shape: they draw from `options` and the applied values alone.\n */\n loadOptions?: () => Promise<readonly FilterOption<Value>[]>;\n /** DXUI-40: a `searchable` field draws at most this many matches, with a \"First N of M\" line above them when more match. Absent, every match. */\n maxShown?: number;\n /** DXUI-40: `list` draws one option per line instead of wrapping chips. */\n layout?: \"wrap\" | \"list\";\n /** DXUI-40: an applied value that no option offers is kept and drawn as a chip by its value, instead of throwing. For a value that comes from a URL and may name something the list no longer has, or that is set before `loadOptions` resolves. */\n keepUnlisted?: boolean;\n /**\n * DXUI-42: on a `searchable` field, typed text (trimmed, not blank) that matches no option exactly adds a `Create \"<text>\"` row. Choosing it\n * (click, or Enter in the search box) awaits this with the trimmed text; the option it returns is applied to the field, the search clears,\n * and a `loadOptions` field lists it without a reload. A rejection shows its message under the search box and applies nothing; the row\n * cannot be chosen again while it runs. The caller must offer the returned option in `options` once it re-renders (its chip is drawn from\n * there), or set `keepUnlisted`.\n */\n onCreate?: (text: string) => Promise<FilterOption<Value>>;\n /** DXUI-42: the Create row's label for the typed text; absent, the library's localised string. */\n createLabel?: (text: string) => string;\n}\n\n/*\n The change callbacks are declared as METHODS on purpose: method parameters are checked bivariantly, so a\n `FilterSingleField<\"new\" | \"done\">` is a `FilterField` (the `string` default) and a screen's fields stay typed by their own\n value sets without a cast. `singleFilter` and `multipleFilter` give the inference.\n*/\n\n/** One value of a closed set at a time: pressing the active option turns the filter off. */\nexport interface FilterSingleField<Value extends string = string> extends OptionFilterBase<Value> {\n kind: \"single\";\n /** The chosen value; `undefined` is \"any\". */\n value: Value | undefined;\n onValueChange(value: Value | undefined): void;\n}\n\n/** Any number of values of a closed set at once. */\nexport interface FilterMultipleField<Value extends string = string> extends OptionFilterBase<Value> {\n kind: \"multiple\";\n value: readonly Value[];\n onValueChange(value: Value[]): void;\n}\n\n/** An on/off switch. The filter is active while it is on. */\nexport interface FilterBooleanField extends FilterFieldBase {\n kind: \"boolean\";\n value: boolean;\n onValueChange(value: boolean): void;\n}\n\n/** A calendar range as ISO dates (`2025-03-11`); either end may be open (`null`). */\nexport interface FilterDateRange {\n from: string | null;\n to: string | null;\n}\n\nexport interface FilterDateRangeField extends FilterFieldBase {\n kind: \"date-range\";\n value: FilterDateRange;\n onValueChange(value: FilterDateRange): void;\n}\n\n/** Free text, reported when the person presses Enter or leaves the box. An empty (or blank) text is \"any\". */\nexport interface FilterTextField extends FilterFieldBase {\n kind: \"text\";\n value: string;\n placeholder?: string;\n onValueChange(value: string): void;\n}\n\nexport type FilterField<Value extends string = string> =\n | FilterSingleField<Value>\n | FilterMultipleField<Value>\n | FilterBooleanField\n | FilterDateRangeField\n | FilterTextField;\n\n/** A single-value field, typed by its own value set: the value and the callback share `Value`, inferred from the options. */\nexport function singleFilter<Value extends string>(field: Omit<FilterSingleField<Value>, \"kind\">): FilterField {\n return { kind: \"single\", ...field };\n}\n\n/** A multi-value field, typed by its own value set. */\nexport function multipleFilter<Value extends string>(field: Omit<FilterMultipleField<Value>, \"kind\">): FilterField {\n return { kind: \"multiple\", ...field };\n}\n\n/** One value a field is set to: a chip, and the one step that turns it off. */\ninterface ActiveEntry {\n /** The option's value, or the field's key for a field that has no options. */\n id: string;\n option?: FilterOption;\n remove: () => void;\n}\n\nfunction checkOptions(field: OptionFilterBase<string>): void {\n const both = field.options.find((option) => option.tone !== undefined && option.color !== undefined);\n if (both !== undefined) {\n throw new Error(`FilterMenu: filter ${JSON.stringify(field.key)} option ${JSON.stringify(both.value)} has both a tone and a color. A color replaces the tone; give one.`);\n }\n const withIcon = field.options.filter((option) => option.icon !== undefined).length;\n if (withIcon !== 0 && withIcon !== field.options.length) {\n throw new Error(\n `FilterMenu: filter ${JSON.stringify(field.key)} gives an icon to ${withIcon} of its ${field.options.length} options. ` +\n `Give every option an icon or none, so the chips stay one shape.`,\n );\n }\n}\n\nfunction optionOf(field: OptionFilterBase<string>, value: string): FilterOption {\n const option = field.options.find((candidate) => candidate.value === value);\n if (option === undefined && field.keepUnlisted === true) return { value, label: value };\n if (option === undefined) {\n throw new Error(\n `FilterMenu: filter ${JSON.stringify(field.key)} is set to a value no option offers: no option carries the value ${JSON.stringify(value)}. ` +\n `The control would name a filter that is not on offer; pass an option for every value the filter can hold.`,\n );\n }\n return option;\n}\n\n/** What a field is set to, validated: a value no option offers throws here, so a stale value fails on the render and not only after the popover opens. */\nfunction activeEntries(field: FilterField): ActiveEntry[] {\n switch (field.kind) {\n case \"single\": {\n checkOptions(field);\n if (field.value === undefined) return [];\n return [{ id: field.value, option: optionOf(field, field.value), remove: () => field.onValueChange(undefined) }];\n }\n case \"multiple\": {\n checkOptions(field);\n return field.value.map((value) => ({\n id: value,\n option: optionOf(field, value),\n remove: () => field.onValueChange(field.value.filter((v) => v !== value)),\n }));\n }\n case \"boolean\":\n return field.value ? [{ id: field.key, remove: () => field.onValueChange(false) }] : [];\n case \"date-range\":\n return field.value.from === null && field.value.to === null\n ? []\n : [{ id: field.key, remove: () => field.onValueChange({ from: null, to: null }) }];\n case \"text\":\n return field.value.trim() === \"\" ? [] : [{ id: field.key, remove: () => field.onValueChange(\"\") }];\n }\n}\n\n/** How many filters are on across the fields (each value of a `multiple` field counts; a date range counts once). */\nexport function activeFilterCount(fields: readonly FilterField[]): number {\n return fields.reduce((sum, field) => sum + activeEntries(field).length, 0);\n}\n\nfunction toggleValue(field: FilterSingleField | FilterMultipleField, value: string): void {\n if (field.kind === \"multiple\") {\n field.onValueChange(field.value.includes(value) ? field.value.filter((v) => v !== value) : [...field.value, value]);\n return;\n }\n field.onValueChange(field.value === value ? undefined : value);\n}\n\nexport interface FilterMenuProps {\n fields: readonly FilterField[];\n /** Turns every filter off in one step. */\n onClearAll: () => void;\n /** Names the control for assistive technology, e.g. \"Filter feedback\". The number of active filters is appended to it. */\n \"aria-label\": string;\n /** The button's icon: the funnel by default; a list that filters by one kind of thing names it instead (a thread's tags: `tag`). */\n icon?: IconName;\n size?: ButtonProps[\"size\"];\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n}\n\nexport function FilterMenu({ fields, onClearAll, \"aria-label\": ariaLabel, icon = \"filter\", size = \"sm\", align = \"end\", className }: FilterMenuProps) {\n const strings = useUiStrings().filterMenu;\n const fmt = useNumberFormat();\n const nameId = useId();\n const perField = fields.map((field) => ({ field, entries: activeEntries(field) }));\n const loads = useOptionLoads();\n const active = perField.reduce((sum, { entries }) => sum + entries.length, 0);\n\n return (\n <Popover\n align={align}\n aria-labelledby={nameId}\n trigger={\n <IconButton\n icon={\n <>\n <Icon name={icon} size=\"sm\" />\n {active > 0 && <span className=\"text-xs font-semibold tabular-nums\">{fmt(active)}</span>}\n </>\n }\n label={strings.triggerName(ariaLabel, active, fmt(active))}\n variant=\"outline\"\n size={size}\n className={cn(active > 0 && \"aspect-auto w-auto gap-1 px-2\", className)}\n />\n }\n >\n <div className=\"flex w-full min-w-0 flex-col gap-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <span id={nameId} className=\"text-2xs font-medium uppercase tracking-wide text-tertiary\">\n {ariaLabel}\n </span>\n {active > 0 && (\n <Button variant=\"ghost\" size=\"xs\" onClick={onClearAll}>\n {strings.clearAll}\n </Button>\n )}\n </div>\n {perField.map(({ field, entries }) => (\n <FilterGroup key={field.key} field={field} chosen={entries.map((entry) => entry.id)} loads={loads} />\n ))}\n </div>\n </Popover>\n );\n}\n\ntype OptionLoad = { status: \"loading\" } | { status: \"failed\" } | { status: \"ready\"; options: readonly FilterOption[] };\n\ninterface OptionLoads {\n stateOf: (key: string) => OptionLoad | undefined;\n /** Starts the field's loader unless it already ran (or is running): the once-only guarantee. `retry` runs it again after a failure. */\n start: (field: OptionFilterBase<string>, retry?: boolean) => void;\n}\n\n/** The loaded options of every field, kept by field key for as long as the menu is mounted. Field objects are rebuilt on every render of the caller, so the cache cannot live on them. */\nfunction useOptionLoads(): OptionLoads {\n const [states, setStates] = useState<Record<string, OptionLoad>>({});\n const started = useRef(new Set<string>());\n const mounted = useRef(true);\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n const start = useCallback((field: OptionFilterBase<string>, retry = false) => {\n const loader = field.loadOptions;\n if (loader === undefined || (started.current.has(field.key) && !retry)) return;\n started.current.add(field.key);\n setStates((prev) => ({ ...prev, [field.key]: { status: \"loading\" } }));\n const settle = (next: OptionLoad) => {\n if (mounted.current) setStates((prev) => ({ ...prev, [field.key]: next }));\n };\n loader().then(\n (options) => settle({ status: \"ready\", options }),\n () => settle({ status: \"failed\" }),\n );\n }, []);\n return { stateOf: (key) => states[key], start };\n}\n\nfunction FilterGroup({ field, chosen, loads }: { field: FilterField; chosen: readonly string[]; loads: OptionLoads }) {\n const labelId = useId();\n if (field.kind === \"boolean\") {\n return <SwitchField label={field.label} size=\"sm\" checked={field.value} onCheckedChange={(checked) => field.onValueChange(checked)} fieldClassName=\"w-fit\" />;\n }\n return (\n <div role=\"group\" aria-labelledby={labelId} className=\"flex min-w-0 flex-col gap-1.5\">\n <span id={labelId} className=\"text-xs font-medium text-secondary\">\n {field.label}\n </span>\n {field.kind === \"date-range\" ? (\n <DateRangeInputs field={field} />\n ) : field.kind === \"text\" ? (\n <TextInput field={field} />\n ) : (\n <OptionToggles field={field} chosen={chosen} loads={loads} />\n )}\n </div>\n );\n}\n\nfunction OptionToggles({ field, chosen, loads }: { field: FilterSingleField | FilterMultipleField; chosen: readonly string[]; loads: OptionLoads }) {\n const strings = useUiStrings().filterMenu;\n const fmt = useNumberFormat();\n const [search, setSearch] = useState(\"\");\n const [created, setCreated] = useState<readonly FilterOption[]>([]);\n const [creating, setCreating] = useState(false);\n const [createError, setCreateError] = useState<string | null>(null);\n const createBusy = useRef(false);\n const { start } = loads;\n const hasLoader = field.loadOptions !== undefined;\n // The groups mount when the popover opens, so this is the first-open read; the hook's once-only guard covers every later open.\n useEffect(() => {\n if (hasLoader) start(field);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- the loader is read from the field at mount; a new closure each render must not re-run it\n }, [hasLoader, start, field.key]);\n const load = loads.stateOf(field.key);\n const trimmed = search.trim();\n const needle = trimmed.toLocaleLowerCase();\n const base = load?.status === \"ready\" ? load.options : field.options;\n const loaded = created.length === 0 ? base : [...base, ...created.filter((option) => !base.some((known) => known.value === option.value))];\n if (load?.status === \"ready\") checkOptions({ ...field, options: loaded });\n const matches = field.searchable === true && needle !== \"\" ? loaded.filter((option) => `${option.label} ${option.description ?? \"\"}`.toLocaleLowerCase().includes(needle)) : loaded;\n const capped = field.searchable === true && field.maxShown !== undefined && matches.length > field.maxShown;\n const shown = capped ? matches.slice(0, field.maxShown) : matches;\n const pending = hasLoader && (load === undefined || load.status === \"loading\");\n const failed = hasLoader && load?.status === \"failed\";\n const canCreate =\n field.searchable === true &&\n field.onCreate !== undefined &&\n trimmed !== \"\" &&\n !loaded.some((option) => option.label.toLocaleLowerCase() === needle || option.value.toLocaleLowerCase() === needle);\n const create = () => {\n if (!canCreate || field.onCreate === undefined || createBusy.current) return;\n createBusy.current = true;\n setCreating(true);\n setCreateError(null);\n field.onCreate(trimmed).then(\n (option) => {\n createBusy.current = false;\n setCreating(false);\n setCreated((prev) => [...prev, option]);\n setSearch(\"\");\n toggleValue(field, option.value);\n },\n (error: unknown) => {\n createBusy.current = false;\n setCreating(false);\n setCreateError(error instanceof Error ? error.message : String(error));\n },\n );\n };\n return (\n <>\n {field.searchable === true && (\n <Input\n type=\"search\"\n size=\"sm\"\n aria-label={strings.searchOptions(field.label)}\n placeholder={strings.searchOptions(field.label)}\n leading={<Icon name=\"search\" size=\"sm\" />}\n value={search}\n onChange={(event) => {\n setSearch(event.target.value);\n setCreateError(null);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && canCreate) {\n event.preventDefault();\n create();\n }\n }}\n />\n )}\n {createError !== null && (\n <span role=\"alert\" className=\"text-xs text-danger-text\">\n {createError}\n </span>\n )}\n {pending && (\n <span role=\"status\" className=\"text-xs text-tertiary\">\n {strings.loadingOptions}\n </span>\n )}\n {failed && (\n <div role=\"alert\" className=\"flex min-w-0 flex-wrap items-center gap-2 text-xs text-tertiary\">\n <span>{strings.loadFailed(field.label)}</span>\n <Button variant=\"ghost\" size=\"xs\" onClick={() => loads.start(field, true)}>\n {strings.tryAgain}\n </Button>\n </div>\n )}\n {capped && <span className=\"text-xs text-tertiary\">{strings.firstOfMatches(fmt(shown.length), fmt(matches.length), trimmed)}</span>}\n {!pending && !failed && (\n <div className={cn(\"flex min-w-0 gap-1.5\", field.layout === \"list\" ? \"flex-col items-stretch\" : \"flex-wrap\", field.searchable === true && \"max-h-48 overflow-y-auto\")}>\n {shown.map((option) => (\n <Toggle\n key={option.value}\n size=\"sm\"\n pressed={chosen.includes(option.value)}\n onPressedChange={() => toggleValue(field, option.value)}\n // DX-5436: a Toggle never shrinks by default, so one carrying a description is let shrink to the group's width and its description truncates.\n className={cn(\"border border-border\", (option.description !== undefined || field.layout === \"list\") && OPTION_WITH_DESCRIPTION)}\n >\n {option.color !== undefined && (\n <span aria-hidden=\"true\" data-option-color={option.color} className=\"size-2 shrink-0 rounded-full bg-(--badge-color)\" style={{ \"--badge-color\": option.color } as CSSProperties} />\n )}\n {option.icon !== undefined && (\n <Icon name={option.icon} size=\"sm\" className={option.tone === undefined ? undefined : BADGE_TONE_TEXT[option.tone]} />\n )}\n {option.label}\n {option.description !== undefined && <span className=\"min-w-0 truncate font-normal text-tertiary\">{option.description}</span>}\n </Toggle>\n ))}\n {canCreate && (\n <Button variant=\"ghost\" size=\"sm\" disabled={creating} aria-busy={creating} onClick={create} className=\"justify-start\">\n {creating ? strings.creating : (field.createLabel ?? strings.createOption)(trimmed)}\n </Button>\n )}\n {shown.length === 0 && !canCreate && <span className=\"text-xs text-tertiary\">{strings.noMatches}</span>}\n </div>\n )}\n </>\n );\n}\n\n/** An option toggle that carries a description: at most the group's width, and allowed to shrink so the description's `truncate` applies. */\nexport const OPTION_WITH_DESCRIPTION = \"min-w-0 max-w-full shrink justify-start\";\n\nfunction DateRangeInputs({ field }: { field: FilterDateRangeField }) {\n const strings = useUiStrings().filterMenu;\n return (\n <div className=\"flex min-w-0 flex-wrap items-center gap-2\">\n <DateField aria-label={strings.dateFrom(field.label)} value={field.value.from} onValueChange={(from) => field.onValueChange({ ...field.value, from })} />\n <DateField aria-label={strings.dateTo(field.label)} value={field.value.to} onValueChange={(to) => field.onValueChange({ ...field.value, to })} />\n </div>\n );\n}\n\n/** A text filter keeps what is being typed until Enter or blur, so the list is asked once per search and not once per keystroke. */\nfunction TextInput({ field }: { field: FilterTextField }) {\n const [draft, setDraft] = useState(field.value);\n useEffect(() => setDraft(field.value), [field.value]);\n const commit = () => {\n if (draft !== field.value) field.onValueChange(draft);\n };\n return (\n <Input\n size=\"sm\"\n aria-label={field.label}\n placeholder={field.placeholder}\n value={draft}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") commit();\n }}\n onBlur={commit}\n />\n );\n}\n\nexport interface FilterChipsProps {\n fields: readonly FilterField[];\n className?: string;\n}\n\n/** One removable chip per active filter value. Draws nothing while no filter is on. */\nexport function FilterChips({ fields, className }: FilterChipsProps): ReactNode {\n const strings = useUiStrings().filterMenu;\n const locale = useUiLocale();\n const chips = fields.flatMap((field) => activeEntries(field).map((entry) => ({ field, entry })));\n if (chips.length === 0) return null;\n\n /** The value half of a chip: the option's label, or what the field is set to. A boolean has none: its chip is the label. */\n const valueText = (field: FilterField, entry: ActiveEntry): string | null => {\n if (entry.option !== undefined) return entry.option.label;\n if (field.kind === \"date-range\") {\n const { from, to } = field.value;\n if (from !== null && to !== null) return strings.dateRange(formatDate(from, locale), formatDate(to, locale));\n if (from !== null) return strings.dateRangeFrom(formatDate(from, locale));\n if (to !== null) return strings.dateRangeUntil(formatDate(to, locale));\n return null;\n }\n if (field.kind === \"text\") return field.value.trim();\n return null;\n };\n\n return (\n <div className={cn(\"flex min-w-0 flex-wrap items-center gap-1.5\", className)}>\n {chips.map(({ field, entry }) => {\n const value = valueText(field, entry);\n return (\n <Badge\n key={`${field.key}:${entry.id}`}\n data-filter-chip={`${field.key}:${entry.id}`}\n tone={entry.option?.tone ?? \"neutral\"}\n color={entry.option?.color}\n icon={entry.option?.icon !== undefined ? <Icon name={entry.option.icon} size=\"xs\" /> : undefined}\n dismiss={{\n label: value === null ? strings.removeFlag(field.label) : strings.removeFilter(field.label, value),\n onDismiss: entry.remove,\n }}\n >\n {value === null ? field.label : strings.chipLabel(field.label, value)}\n </Badge>\n );\n })}\n </div>\n );\n}\n"],"names":["singleFilter","field","multipleFilter","checkOptions","both","option","withIcon","optionOf","value","candidate","activeEntries","v","activeFilterCount","fields","sum","toggleValue","FilterMenu","onClearAll","ariaLabel","icon","size","align","className","strings","useUiStrings","fmt","useNumberFormat","nameId","useId","perField","loads","useOptionLoads","active","entries","jsx","Popover","IconButton","jsxs","Fragment","Icon","cn","Button","FilterGroup","entry","states","setStates","useState","started","useRef","mounted","useEffect","start","useCallback","retry","loader","prev","settle","next","options","key","chosen","labelId","SwitchField","checked","DateRangeInputs","TextInput","OptionToggles","search","setSearch","created","setCreated","creating","setCreating","createError","setCreateError","createBusy","hasLoader","load","trimmed","needle","base","loaded","known","matches","capped","shown","pending","failed","canCreate","create","error","Input","event","Toggle","OPTION_WITH_DESCRIPTION","BADGE_TONE_TEXT","DateField","from","to","draft","setDraft","commit","FilterChips","locale","useUiLocale","chips","valueText","formatDate","Badge"],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { jsx as e, jsxs as n } from "react/jsx-runtime";
|
|
2
|
+
import { cn as a } from "../lib/cn.js";
|
|
3
|
+
import { BADGE_TONE_TEXT as h, Badge as m } from "./Badge.js";
|
|
4
|
+
import { Icon as o } from "./Icon.js";
|
|
5
|
+
import { Markdown as x } from "./Markdown.js";
|
|
6
|
+
import { Popover as u } from "./Popover.js";
|
|
7
|
+
import { ReadMore as p } from "./ReadMore.js";
|
|
8
|
+
import { Collapsible as b } from "./Surface.js";
|
|
9
|
+
import { RefText as N } from "../lib/syntax/markdown/refs.js";
|
|
10
|
+
function v({ title: l, icon: i, aside: t }) {
|
|
11
|
+
return /* @__PURE__ */ n("h3", { className: "flex items-center gap-1.5 text-2xs font-semibold tracking-widest text-tertiary uppercase", children: [
|
|
12
|
+
i,
|
|
13
|
+
l,
|
|
14
|
+
t === void 0 ? null : /* @__PURE__ */ e("span", { className: "tabular tracking-normal normal-case", children: t })
|
|
15
|
+
] });
|
|
16
|
+
}
|
|
17
|
+
function R({ phases: l, noVerdictLabel: i, className: t }) {
|
|
18
|
+
return /* @__PURE__ */ e("div", { className: a("flex flex-col gap-5", t), children: l.map((r) => /* @__PURE__ */ n("section", { "aria-label": r.title, className: "flex flex-col gap-2", children: [
|
|
19
|
+
/* @__PURE__ */ e(v, { title: r.title, icon: /* @__PURE__ */ e(o, { name: r.icon, size: "xs" }), aside: r.aside }),
|
|
20
|
+
/* @__PURE__ */ e("p", { className: "text-xs text-secondary", children: r.description }),
|
|
21
|
+
/* @__PURE__ */ e("ul", { className: "flex flex-col gap-2", children: r.gates.map((c) => /* @__PURE__ */ e(w, { gate: c, noVerdictLabel: i }, c.id)) })
|
|
22
|
+
] }, r.id)) });
|
|
23
|
+
}
|
|
24
|
+
function y({ help: l, label: i }) {
|
|
25
|
+
return /* @__PURE__ */ e(
|
|
26
|
+
u,
|
|
27
|
+
{
|
|
28
|
+
openOnHover: !0,
|
|
29
|
+
openOnFocus: !0,
|
|
30
|
+
delay: 100,
|
|
31
|
+
side: "bottom",
|
|
32
|
+
align: "start",
|
|
33
|
+
width: "24rem",
|
|
34
|
+
"aria-label": i,
|
|
35
|
+
trigger: /* @__PURE__ */ e(
|
|
36
|
+
"button",
|
|
37
|
+
{
|
|
38
|
+
type: "button",
|
|
39
|
+
"aria-label": i,
|
|
40
|
+
className: "inline-flex shrink-0 cursor-pointer rounded-full text-tertiary hover:text-primary focus-visible:text-primary",
|
|
41
|
+
children: /* @__PURE__ */ e(o, { name: "circle-help", size: "sm" })
|
|
42
|
+
}
|
|
43
|
+
),
|
|
44
|
+
children: /* @__PURE__ */ e("div", { className: "text-sm text-secondary", children: l })
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
function w({ gate: l, noVerdictLabel: i }) {
|
|
49
|
+
const t = /* @__PURE__ */ n("div", { className: "flex items-center gap-2", children: [
|
|
50
|
+
/* @__PURE__ */ n("div", { className: a("flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1", l.inactive && "opacity-70"), children: [
|
|
51
|
+
l.inactive ? null : /* @__PURE__ */ e(o, { name: l.icon, size: "sm", className: h[l.tone] }),
|
|
52
|
+
/* @__PURE__ */ e("span", { className: a("min-w-0 truncate text-sm", l.inactive ? "text-tertiary" : "text-primary"), children: l.name }),
|
|
53
|
+
l.helpLabel === void 0 ? null : /* @__PURE__ */ e(y, { help: l.help, label: l.helpLabel }),
|
|
54
|
+
l.inactive ? null : /* @__PURE__ */ e(m, { tone: l.tone, size: "sm", children: l.verdictLabel }),
|
|
55
|
+
l.inactive || l.signedOff === void 0 ? null : /* @__PURE__ */ e("span", { className: "text-xs text-tertiary", children: l.signedOff })
|
|
56
|
+
] }),
|
|
57
|
+
l.control === void 0 ? null : /* @__PURE__ */ e("div", { className: "flex shrink-0 items-center", children: l.control })
|
|
58
|
+
] });
|
|
59
|
+
if (l.inactive)
|
|
60
|
+
return /* @__PURE__ */ e("li", { className: "rounded-md border border-border-subtle p-3", children: t });
|
|
61
|
+
const r = l.findings?.items ?? [], c = l.findings?.label, d = l.message?.trim() ?? "";
|
|
62
|
+
return /* @__PURE__ */ n("li", { className: "flex flex-col gap-2 rounded-md border border-border-subtle p-3", children: [
|
|
63
|
+
t,
|
|
64
|
+
d === "" ? /* @__PURE__ */ e("p", { className: "text-xs text-tertiary", children: i }) : /* @__PURE__ */ e("div", { className: "text-sm text-secondary", children: /* @__PURE__ */ e(p, { lines: 3, children: /* @__PURE__ */ e(x, { children: d }) }) }),
|
|
65
|
+
l.note === void 0 ? null : /* @__PURE__ */ e("div", { className: "text-xs text-secondary", children: l.note }),
|
|
66
|
+
r.length === 0 ? null : /* @__PURE__ */ e(b, { trigger: /* @__PURE__ */ e("span", { className: "text-xs font-semibold text-secondary", children: c }), children: /* @__PURE__ */ e("ul", { className: "flex flex-col gap-2 pt-2", children: r.map((s, f) => /* @__PURE__ */ n("li", { className: "flex flex-col gap-1 border-l-2 border-border pl-3", children: [
|
|
67
|
+
/* @__PURE__ */ n("span", { className: "flex flex-wrap items-center gap-2", children: [
|
|
68
|
+
/* @__PURE__ */ e("span", { className: "text-sm font-medium text-primary", children: /* @__PURE__ */ e(N, { children: s.title }) }),
|
|
69
|
+
/* @__PURE__ */ e(m, { tone: "neutral", size: "sm", children: s.status })
|
|
70
|
+
] }),
|
|
71
|
+
s.description.trim() === "" ? null : /* @__PURE__ */ e("div", { className: "text-sm text-secondary", children: /* @__PURE__ */ e(p, { lines: 3, children: /* @__PURE__ */ e(x, { children: s.description }) }) })
|
|
72
|
+
] }, `${s.title}-${f}`)) }) })
|
|
73
|
+
] });
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
R as GatesSection,
|
|
77
|
+
v as SectionHeading
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=GatesSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GatesSection.js","sources":["../../src/components/GatesSection.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Badge, BADGE_TONE_TEXT, type BadgeProps } from \"./Badge\";\nimport { Icon, type IconName } from \"./Icon\";\nimport { Markdown } from \"./Markdown\";\nimport { Popover } from \"./Popover\";\nimport { ReadMore } from \"./ReadMore\";\nimport { Collapsible } from \"./Surface\";\nimport { RefText } from \"../lib/syntax/markdown\";\n\n/* ============================================================================\n QUALITY GATES, PHASE BY PHASE (DX-5428, from danxbot's card detail) — each\n gate's verdict, the reviewer's message and any findings, read-only: a verdict\n is a reviewer's sign-off.\n\n The component holds no gate vocabulary. The caller resolves every gate's tone,\n icon and verdict word, every title and sentence, and hands over only what to\n draw; a phase with no gates is the caller's to leave out.\n ========================================================================= */\n\n/** One finding a gate's reviewer raised. */\nexport interface GatesSectionFinding {\n title: string;\n /** Its status word, in the caller's language. */\n status: string;\n /** Markdown; blank draws no body. */\n description: string;\n}\n\n/** What every gate card has, carried or not. */\ninterface GatesSectionGateBase {\n id: string;\n /** DXUI-36: a readable label (\"Dependency Plan\"), drawn in the normal text font, never a code identifier in monospace. */\n name: string;\n /** DXUI-34: drawn at the right end of the header row (a host's on/off switch); the name truncates before it moves. */\n control?: ReactNode;\n}\n\n/** DXUI-34: a help icon after the name opens a popover with `help` (rich content) on hover, keyboard focus and tap; its accessible name is `helpLabel`, e.g. \"About Dependency Review\". */\ntype GatesSectionGateHelp = { help: ReactNode; helpLabel: string } | { help?: undefined; helpLabel?: undefined };\n\n/** A gate the card carries: its verdict, message, note and findings are drawn. */\nexport type GatesSectionCarriedGate = GatesSectionGateBase & GatesSectionGateHelp & GatesSectionCarriedFields;\n\ninterface GatesSectionCarriedFields {\n /** DXUI-34: omit, or false, for a carried gate. */\n inactive?: false;\n tone: NonNullable<BadgeProps[\"tone\"]>;\n icon: IconName;\n /** The verdict word the badge reads. */\n verdictLabel: string;\n /** When and by whom it was signed off, e.g. a `RelativeTime` with a prefix; omit while unsigned. */\n signedOff?: ReactNode;\n /** The reviewer's verdict, markdown; blank or omitted draws `noVerdictLabel` instead. */\n message?: string;\n /** Why this gate holds this card, drawn under the message; omit for none. */\n note?: ReactNode;\n /** What this gate's reviewer raised: the collapsible's trigger (\"2 findings\") and the findings under it. Omit, or give no items, for none. */\n findings?: { label: string; items: readonly GatesSectionFinding[] };\n}\n\n/** DXUI-34: a gate the card does not carry (switched off): its header alone, muted, with no badge, verdict line, note or findings. */\nexport type GatesSectionInactiveGate = GatesSectionGateBase & GatesSectionGateHelp & { inactive: true };\n\nexport type GatesSectionGate = GatesSectionCarriedGate | GatesSectionInactiveGate;\n\nexport interface GatesSectionPhase {\n id: string;\n title: string;\n description: string;\n icon: IconName;\n /** A short readout after the title, e.g. \"1/2 passed\". */\n aside: string;\n gates: readonly GatesSectionGate[];\n}\n\nexport interface GatesSectionProps {\n phases: readonly GatesSectionPhase[];\n /** Said under a gate whose reviewer left no message. */\n noVerdictLabel: string;\n className?: string;\n}\n\n/**\n * A labelled section's small-caps heading: an optional icon, the title, and an optional readout after it (\"1/2 passed\").\n * Exported so a host's own section wrapper (danxbot's card-tab `Subsection`) draws the very same heading.\n */\nexport function SectionHeading({ title, icon, aside }: { title: string; icon?: ReactNode; aside?: ReactNode }) {\n return (\n <h3 className=\"flex items-center gap-1.5 text-2xs font-semibold tracking-widest text-tertiary uppercase\">\n {icon}\n {title}\n {aside === undefined ? null : <span className=\"tabular tracking-normal normal-case\">{aside}</span>}\n </h3>\n );\n}\n\nexport function GatesSection({ phases, noVerdictLabel, className }: GatesSectionProps) {\n return (\n <div className={cn(\"flex flex-col gap-5\", className)}>\n {phases.map((phase) => (\n <section key={phase.id} aria-label={phase.title} className=\"flex flex-col gap-2\">\n <SectionHeading title={phase.title} icon={<Icon name={phase.icon} size=\"xs\" />} aside={phase.aside} />\n <p className=\"text-xs text-secondary\">{phase.description}</p>\n <ul className=\"flex flex-col gap-2\">\n {phase.gates.map((gate) => (\n <GateRow key={gate.id} gate={gate} noVerdictLabel={noVerdictLabel} />\n ))}\n </ul>\n </section>\n ))}\n </div>\n );\n}\n\n/** The help icon and its popover: opens on hover, on tap and click, and on keyboard focus. */\nfunction GateHelp({ help, label }: { help: ReactNode; label: string }) {\n return (\n <Popover\n openOnHover\n openOnFocus\n delay={100}\n side=\"bottom\"\n align=\"start\"\n width=\"24rem\"\n aria-label={label}\n trigger={\n <button\n type=\"button\"\n aria-label={label}\n className=\"inline-flex shrink-0 cursor-pointer rounded-full text-tertiary hover:text-primary focus-visible:text-primary\"\n >\n <Icon name=\"circle-help\" size=\"sm\" />\n </button>\n }\n >\n <div className=\"text-sm text-secondary\">{help}</div>\n </Popover>\n );\n}\n\nfunction GateRow({ gate, noVerdictLabel }: { gate: GatesSectionGate; noVerdictLabel: string }) {\n const header = (\n <div className=\"flex items-center gap-2\">\n <div className={cn(\"flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-1\", gate.inactive && \"opacity-70\")}>\n {gate.inactive ? null : <Icon name={gate.icon} size=\"sm\" className={BADGE_TONE_TEXT[gate.tone]} />}\n <span className={cn(\"min-w-0 truncate text-sm\", gate.inactive ? \"text-tertiary\" : \"text-primary\")}>{gate.name}</span>\n {gate.helpLabel === undefined ? null : <GateHelp help={gate.help} label={gate.helpLabel} />}\n {gate.inactive ? null : (\n <Badge tone={gate.tone} size=\"sm\">\n {gate.verdictLabel}\n </Badge>\n )}\n {gate.inactive || gate.signedOff === undefined ? null : <span className=\"text-xs text-tertiary\">{gate.signedOff}</span>}\n </div>\n {gate.control === undefined ? null : <div className=\"flex shrink-0 items-center\">{gate.control}</div>}\n </div>\n );\n if (gate.inactive) {\n return <li className=\"rounded-md border border-border-subtle p-3\">{header}</li>;\n }\n const findings = gate.findings?.items ?? [];\n const findingsLabel = gate.findings?.label;\n const message = gate.message?.trim() ?? \"\";\n return (\n <li className=\"flex flex-col gap-2 rounded-md border border-border-subtle p-3\">\n {header}\n {message === \"\" ? (\n <p className=\"text-xs text-tertiary\">{noVerdictLabel}</p>\n ) : (\n <div className=\"text-sm text-secondary\">\n <ReadMore lines={3}>\n <Markdown>{message}</Markdown>\n </ReadMore>\n </div>\n )}\n {gate.note === undefined ? null : <div className=\"text-xs text-secondary\">{gate.note}</div>}\n {findings.length === 0 ? null : (\n <Collapsible trigger={<span className=\"text-xs font-semibold text-secondary\">{findingsLabel}</span>}>\n <ul className=\"flex flex-col gap-2 pt-2\">\n {findings.map((finding, index) => (\n <li key={`${finding.title}-${index}`} className=\"flex flex-col gap-1 border-l-2 border-border pl-3\">\n <span className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-sm font-medium text-primary\">\n <RefText>{finding.title}</RefText>\n </span>\n <Badge tone=\"neutral\" size=\"sm\">\n {finding.status}\n </Badge>\n </span>\n {finding.description.trim() === \"\" ? null : (\n <div className=\"text-sm text-secondary\">\n <ReadMore lines={3}>\n <Markdown>{finding.description}</Markdown>\n </ReadMore>\n </div>\n )}\n </li>\n ))}\n </ul>\n </Collapsible>\n )}\n </li>\n );\n}\n"],"names":["SectionHeading","title","icon","aside","jsxs","GatesSection","phases","noVerdictLabel","className","cn","phase","jsx","Icon","gate","GateRow","GateHelp","help","label","Popover","header","BADGE_TONE_TEXT","Badge","findings","findingsLabel","message","ReadMore","Markdown","Collapsible","finding","index","RefText"],"mappings":"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"}
|