@50arms/ui 0.0.0-stage → 35.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +193 -2
- package/dist/components/Accordion.js +68 -0
- package/dist/components/Accordion.js.map +1 -0
- package/dist/components/AgentWorkingSpinner.js +46 -0
- package/dist/components/AgentWorkingSpinner.js.map +1 -0
- package/dist/components/AppShell.js +228 -0
- package/dist/components/AppShell.js.map +1 -0
- package/dist/components/Attention.js +130 -0
- package/dist/components/Attention.js.map +1 -0
- package/dist/components/Avatar.js +99 -0
- package/dist/components/Avatar.js.map +1 -0
- package/dist/components/Badge.js +143 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Board.js +292 -0
- package/dist/components/Board.js.map +1 -0
- package/dist/components/Button.js +327 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Callout.js +106 -0
- package/dist/components/Callout.js.map +1 -0
- package/dist/components/Card.js +140 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/Choice.js +361 -0
- package/dist/components/Choice.js.map +1 -0
- package/dist/components/CodeEditor.js +384 -0
- package/dist/components/CodeEditor.js.map +1 -0
- package/dist/components/ColorPicker.js +174 -0
- package/dist/components/ColorPicker.js.map +1 -0
- package/dist/components/Combobox.js +212 -0
- package/dist/components/Combobox.js.map +1 -0
- package/dist/components/CommandPalette.js +163 -0
- package/dist/components/CommandPalette.js.map +1 -0
- package/dist/components/ConcentricRing.js +60 -0
- package/dist/components/ConcentricRing.js.map +1 -0
- package/dist/components/ConnectionCard.js +98 -0
- package/dist/components/ConnectionCard.js.map +1 -0
- package/dist/components/ContextItemRow.js +49 -0
- package/dist/components/ContextItemRow.js.map +1 -0
- package/dist/components/CopyValue.js +57 -0
- package/dist/components/CopyValue.js.map +1 -0
- package/dist/components/CountBadge.js +26 -0
- package/dist/components/CountBadge.js.map +1 -0
- package/dist/components/DateCalendar.js +156 -0
- package/dist/components/DateCalendar.js.map +1 -0
- package/dist/components/DateField.js +166 -0
- package/dist/components/DateField.js.map +1 -0
- package/dist/components/DatePicker.js +56 -0
- package/dist/components/DatePicker.js.map +1 -0
- package/dist/components/DateTimeText.js +19 -0
- package/dist/components/DateTimeText.js.map +1 -0
- package/dist/components/DescriptionList.js +25 -0
- package/dist/components/DescriptionList.js.map +1 -0
- package/dist/components/Dialog.js +332 -0
- package/dist/components/Dialog.js.map +1 -0
- package/dist/components/DragDrop.js +395 -0
- package/dist/components/DragDrop.js.map +1 -0
- package/dist/components/Drawer.js +100 -0
- package/dist/components/Drawer.js.map +1 -0
- package/dist/components/EditGutter.js +110 -0
- package/dist/components/EditGutter.js.map +1 -0
- package/dist/components/EmojiPicker.js +174 -0
- package/dist/components/EmojiPicker.js.map +1 -0
- package/dist/components/ErrorBoundary.js +47 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/Field.js +115 -0
- package/dist/components/Field.js.map +1 -0
- package/dist/components/FileUpload.js +128 -0
- package/dist/components/FileUpload.js.map +1 -0
- package/dist/components/FilterMenu.js +256 -0
- package/dist/components/FilterMenu.js.map +1 -0
- package/dist/components/GatesSection.js +79 -0
- package/dist/components/GatesSection.js.map +1 -0
- package/dist/components/Icon.js +50 -0
- package/dist/components/Icon.js.map +1 -0
- package/dist/components/IconButton.js +59 -0
- package/dist/components/IconButton.js.map +1 -0
- package/dist/components/IconStack.js +69 -0
- package/dist/components/IconStack.js.map +1 -0
- package/dist/components/ImageUploadField.js +146 -0
- package/dist/components/ImageUploadField.js.map +1 -0
- package/dist/components/InlineEdit.js +432 -0
- package/dist/components/InlineEdit.js.map +1 -0
- package/dist/components/InlineMarkdownEdit.js +184 -0
- package/dist/components/InlineMarkdownEdit.js.map +1 -0
- package/dist/components/Input.js +156 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/LegalDocument.js +155 -0
- package/dist/components/LegalDocument.js.map +1 -0
- package/dist/components/LineDiff.js +95 -0
- package/dist/components/LineDiff.js.map +1 -0
- package/dist/components/ListHeader.js +72 -0
- package/dist/components/ListHeader.js.map +1 -0
- package/dist/components/Loading.js +111 -0
- package/dist/components/Loading.js.map +1 -0
- package/dist/components/Markdown.js +28 -0
- package/dist/components/Markdown.js.map +1 -0
- package/dist/components/MarkdownEditor.js +467 -0
- package/dist/components/MarkdownEditor.js.map +1 -0
- package/dist/components/Menu.js +185 -0
- package/dist/components/Menu.js.map +1 -0
- package/dist/components/Navigation.js +87 -0
- package/dist/components/Navigation.js.map +1 -0
- package/dist/components/NumberInput.js +119 -0
- package/dist/components/NumberInput.js.map +1 -0
- package/dist/components/OTPInput.js +71 -0
- package/dist/components/OTPInput.js.map +1 -0
- package/dist/components/OrderedEntityManager.js +170 -0
- package/dist/components/OrderedEntityManager.js.map +1 -0
- package/dist/components/PagedWindowList.js +74 -0
- package/dist/components/PagedWindowList.js.map +1 -0
- package/dist/components/PaginationBar.js +95 -0
- package/dist/components/PaginationBar.js.map +1 -0
- package/dist/components/Panel.js +396 -0
- package/dist/components/Panel.js.map +1 -0
- package/dist/components/PasswordInput.js +32 -0
- package/dist/components/PasswordInput.js.map +1 -0
- package/dist/components/PasswordRequirements.js +25 -0
- package/dist/components/PasswordRequirements.js.map +1 -0
- package/dist/components/PatchDiff.js +96 -0
- package/dist/components/PatchDiff.js.map +1 -0
- package/dist/components/PendingVeil.js +18 -0
- package/dist/components/PendingVeil.js.map +1 -0
- package/dist/components/Popover.js +214 -0
- package/dist/components/Popover.js.map +1 -0
- package/dist/components/Progress.js +419 -0
- package/dist/components/Progress.js.map +1 -0
- package/dist/components/RatingScale.js +89 -0
- package/dist/components/RatingScale.js.map +1 -0
- package/dist/components/ReadMore.js +232 -0
- package/dist/components/ReadMore.js.map +1 -0
- package/dist/components/RecordCard.js +202 -0
- package/dist/components/RecordCard.js.map +1 -0
- package/dist/components/RelativeTime.js +29 -0
- package/dist/components/RelativeTime.js.map +1 -0
- package/dist/components/SandboxedFrame.js +135 -0
- package/dist/components/SandboxedFrame.js.map +1 -0
- package/dist/components/SearchInput.js +38 -0
- package/dist/components/SearchInput.js.map +1 -0
- package/dist/components/SecretField.js +228 -0
- package/dist/components/SecretField.js.map +1 -0
- package/dist/components/SectionNav.js +42 -0
- package/dist/components/SectionNav.js.map +1 -0
- package/dist/components/Select.js +172 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/SequenceDiagram.js +109 -0
- package/dist/components/SequenceDiagram.js.map +1 -0
- package/dist/components/SettingRow.js +124 -0
- package/dist/components/SettingRow.js.map +1 -0
- package/dist/components/SignOffRings.js +36 -0
- package/dist/components/SignOffRings.js.map +1 -0
- package/dist/components/Slider.js +353 -0
- package/dist/components/Slider.js.map +1 -0
- package/dist/components/SolutionChoice.js +89 -0
- package/dist/components/SolutionChoice.js.map +1 -0
- package/dist/components/SortMenu.js +75 -0
- package/dist/components/SortMenu.js.map +1 -0
- package/dist/components/Spinner.js +42 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/Stat.js +148 -0
- package/dist/components/Stat.js.map +1 -0
- package/dist/components/StatusSelect.js +119 -0
- package/dist/components/StatusSelect.js.map +1 -0
- package/dist/components/Surface.js +210 -0
- package/dist/components/Surface.js.map +1 -0
- package/dist/components/Table.js +300 -0
- package/dist/components/Table.js.map +1 -0
- package/dist/components/Tabs.js +288 -0
- package/dist/components/Tabs.js.map +1 -0
- package/dist/components/ThemeMenu.js +198 -0
- package/dist/components/ThemeMenu.js.map +1 -0
- package/dist/components/Toast.js +217 -0
- package/dist/components/Toast.js.map +1 -0
- package/dist/components/Toggle.js +147 -0
- package/dist/components/Toggle.js.map +1 -0
- package/dist/components/ToggleMatrix.js +157 -0
- package/dist/components/ToggleMatrix.js.map +1 -0
- package/dist/components/Tree.js +125 -0
- package/dist/components/Tree.js.map +1 -0
- package/dist/components/TriStateSwitch.js +111 -0
- package/dist/components/TriStateSwitch.js.map +1 -0
- package/dist/components/VideoPlayer.js +64 -0
- package/dist/components/VideoPlayer.js.map +1 -0
- package/dist/components/auth/AcceptInvitationCard.js +110 -0
- package/dist/components/auth/AcceptInvitationCard.js.map +1 -0
- package/dist/components/auth/AuthLayout.js +18 -0
- package/dist/components/auth/AuthLayout.js.map +1 -0
- package/dist/components/auth/ForgotPasswordForm.js +44 -0
- package/dist/components/auth/ForgotPasswordForm.js.map +1 -0
- package/dist/components/auth/LoginForm.js +76 -0
- package/dist/components/auth/LoginForm.js.map +1 -0
- package/dist/components/auth/ResetPasswordForm.js +69 -0
- package/dist/components/auth/ResetPasswordForm.js.map +1 -0
- package/dist/components/auth/SignInProviders.js +45 -0
- package/dist/components/auth/SignInProviders.js.map +1 -0
- package/dist/components/auth/SignupCard.js +204 -0
- package/dist/components/auth/SignupCard.js.map +1 -0
- package/dist/components/auth/TermsAcceptance.js +43 -0
- package/dist/components/auth/TermsAcceptance.js.map +1 -0
- package/dist/components/board/context.js +32 -0
- package/dist/components/board/context.js.map +1 -0
- package/dist/components/board/recipe.js +94 -0
- package/dist/components/board/recipe.js.map +1 -0
- package/dist/components/calendar/CalendarMonth.js +299 -0
- package/dist/components/calendar/CalendarMonth.js.map +1 -0
- package/dist/components/calendar/CalendarTimeGrid.js +430 -0
- package/dist/components/calendar/CalendarTimeGrid.js.map +1 -0
- package/dist/components/calendar/EventActions.js +101 -0
- package/dist/components/calendar/EventActions.js.map +1 -0
- package/dist/components/calendar/format.js +73 -0
- package/dist/components/calendar/format.js.map +1 -0
- package/dist/components/calendar/palette.js +31 -0
- package/dist/components/calendar/palette.js.map +1 -0
- package/dist/components/calendar/use-calendar-drag.js +149 -0
- package/dist/components/calendar/use-calendar-drag.js.map +1 -0
- package/dist/components/calendar/use-event-keyboard.js +87 -0
- package/dist/components/calendar/use-event-keyboard.js.map +1 -0
- package/dist/components/calendar/use-grid-navigation.js +79 -0
- package/dist/components/calendar/use-grid-navigation.js.map +1 -0
- package/dist/components/calendar/use-now.js +27 -0
- package/dist/components/calendar/use-now.js.map +1 -0
- package/dist/components/card-face/AcRingGlyph.js +39 -0
- package/dist/components/card-face/AcRingGlyph.js.map +1 -0
- package/dist/components/card-face/BoardCardAgentSlot.js +17 -0
- package/dist/components/card-face/BoardCardAgentSlot.js.map +1 -0
- package/dist/components/card-face/CardFace.js +109 -0
- package/dist/components/card-face/CardFace.js.map +1 -0
- package/dist/components/card-face/CardTypeBadge.js +17 -0
- package/dist/components/card-face/CardTypeBadge.js.map +1 -0
- package/dist/components/card-face/EffortBadge.js +11 -0
- package/dist/components/card-face/EffortBadge.js.map +1 -0
- package/dist/components/card-face/GateRingGlyph.js +31 -0
- package/dist/components/card-face/GateRingGlyph.js.map +1 -0
- package/dist/components/card-face/OverflowRow.js +70 -0
- package/dist/components/card-face/OverflowRow.js.map +1 -0
- package/dist/components/card-face/TapTip.js +32 -0
- package/dist/components/card-face/TapTip.js.map +1 -0
- package/dist/components/card-face/hit-area.js +6 -0
- package/dist/components/card-face/hit-area.js.map +1 -0
- package/dist/components/card-face/vocabulary.js +102 -0
- package/dist/components/card-face/vocabulary.js.map +1 -0
- package/dist/components/chart/BarList.js +78 -0
- package/dist/components/chart/BarList.js.map +1 -0
- package/dist/components/chart/LineChart.js +310 -0
- package/dist/components/chart/LineChart.js.map +1 -0
- package/dist/components/chart/ShareBar.js +141 -0
- package/dist/components/chart/ShareBar.js.map +1 -0
- package/dist/components/chart/TimeSeriesChart.js +305 -0
- package/dist/components/chart/TimeSeriesChart.js.map +1 -0
- package/dist/components/chart/label-metrics.js +17 -0
- package/dist/components/chart/label-metrics.js.map +1 -0
- package/dist/components/chart/line-chart-axis.js +38 -0
- package/dist/components/chart/line-chart-axis.js.map +1 -0
- package/dist/components/chart/line-chart-scale.js +132 -0
- package/dist/components/chart/line-chart-scale.js.map +1 -0
- package/dist/components/chart/line-series-style.js +22 -0
- package/dist/components/chart/line-series-style.js.map +1 -0
- package/dist/components/chart/share-bar-labels.js +14 -0
- package/dist/components/chart/share-bar-labels.js.map +1 -0
- package/dist/components/chart/shared.js +157 -0
- package/dist/components/chart/shared.js.map +1 -0
- package/dist/components/chart/time-series-scale.js +51 -0
- package/dist/components/chart/time-series-scale.js.map +1 -0
- package/dist/components/chat/Attachment.js +316 -0
- package/dist/components/chat/Attachment.js.map +1 -0
- package/dist/components/chat/Chat.js +171 -0
- package/dist/components/chat/Chat.js.map +1 -0
- package/dist/components/chat/Composer.js +274 -0
- package/dist/components/chat/Composer.js.map +1 -0
- package/dist/components/chat/ContextMeter.js +202 -0
- package/dist/components/chat/ContextMeter.js.map +1 -0
- package/dist/components/chat/EffortControl.js +116 -0
- package/dist/components/chat/EffortControl.js.map +1 -0
- package/dist/components/chat/FileCover.js +78 -0
- package/dist/components/chat/FileCover.js.map +1 -0
- package/dist/components/chat/Message.js +356 -0
- package/dist/components/chat/Message.js.map +1 -0
- package/dist/components/chat/MessageScroller.js +104 -0
- package/dist/components/chat/MessageScroller.js.map +1 -0
- package/dist/components/chat/ModelSelector.js +156 -0
- package/dist/components/chat/ModelSelector.js.map +1 -0
- package/dist/components/chat/StreamingMarkdown.js +42 -0
- package/dist/components/chat/StreamingMarkdown.js.map +1 -0
- package/dist/components/chat/download-file.js +9 -0
- package/dist/components/chat/download-file.js.map +1 -0
- package/dist/components/chat/file-icon.js +39 -0
- package/dist/components/chat/file-icon.js.map +1 -0
- package/dist/components/checklist/StatusChecklist.js +103 -0
- package/dist/components/checklist/StatusChecklist.js.map +1 -0
- package/dist/components/checklist/tally.js +29 -0
- package/dist/components/checklist/tally.js.map +1 -0
- package/dist/components/code-editor/context.js +13 -0
- package/dist/components/code-editor/context.js.map +1 -0
- package/dist/components/code-editor/editing.js +93 -0
- package/dist/components/code-editor/editing.js.map +1 -0
- package/dist/components/code-editor/highlight.js +27 -0
- package/dist/components/code-editor/highlight.js.map +1 -0
- package/dist/components/code-editor/recipe.js +75 -0
- package/dist/components/code-editor/recipe.js.map +1 -0
- package/dist/components/date-timeline/DateTimeline.js +358 -0
- package/dist/components/date-timeline/DateTimeline.js.map +1 -0
- package/dist/components/date-timeline/TimelineRow.js +100 -0
- package/dist/components/date-timeline/TimelineRow.js.map +1 -0
- package/dist/components/date-timeline/useBarDrag.js +44 -0
- package/dist/components/date-timeline/useBarDrag.js.map +1 -0
- package/dist/components/date-timeline/useMarkerDrag.js +40 -0
- package/dist/components/date-timeline/useMarkerDrag.js.map +1 -0
- package/dist/components/date-timeline/useTimelineZoom.js +44 -0
- package/dist/components/date-timeline/useTimelineZoom.js.map +1 -0
- package/dist/components/drag-drop/context.js +37 -0
- package/dist/components/drag-drop/context.js.map +1 -0
- package/dist/components/drag-drop/recipe.js +270 -0
- package/dist/components/drag-drop/recipe.js.map +1 -0
- package/dist/components/drag-drop/shift.js +157 -0
- package/dist/components/drag-drop/shift.js.map +1 -0
- package/dist/components/edit/activation.js +10 -0
- package/dist/components/edit/activation.js.map +1 -0
- package/dist/components/edit/outcome.js +47 -0
- package/dist/components/edit/outcome.js.map +1 -0
- package/dist/components/edit/use-edit-session.js +146 -0
- package/dist/components/edit/use-edit-session.js.map +1 -0
- package/dist/components/file-viewer/FileViewer.js +97 -0
- package/dist/components/file-viewer/FileViewer.js.map +1 -0
- package/dist/components/file-viewer/PageNumberJumpField.js +47 -0
- package/dist/components/file-viewer/PageNumberJumpField.js.map +1 -0
- package/dist/components/file-viewer/ViewerControls.js +122 -0
- package/dist/components/file-viewer/ViewerControls.js.map +1 -0
- package/dist/components/file-viewer/ViewerRail.js +57 -0
- package/dist/components/file-viewer/ViewerRail.js.map +1 -0
- package/dist/components/file-viewer/ViewerStage.js +112 -0
- package/dist/components/file-viewer/ViewerStage.js.map +1 -0
- package/dist/components/file-viewer/frames.js +37 -0
- package/dist/components/file-viewer/frames.js.map +1 -0
- package/dist/components/file-viewer/use-frame-cursor.js +32 -0
- package/dist/components/file-viewer/use-frame-cursor.js.map +1 -0
- package/dist/components/file-viewer/use-viewer-keys.js +50 -0
- package/dist/components/file-viewer/use-viewer-keys.js.map +1 -0
- package/dist/components/file-viewer/use-viewer-zoom.js +68 -0
- package/dist/components/file-viewer/use-viewer-zoom.js.map +1 -0
- package/dist/components/focus-web/FocusWeb.js +322 -0
- package/dist/components/focus-web/FocusWeb.js.map +1 -0
- package/dist/components/focus-web/layout.js +34 -0
- package/dist/components/focus-web/layout.js.map +1 -0
- package/dist/components/graph-explorer/GraphExplorer.js +441 -0
- package/dist/components/graph-explorer/GraphExplorer.js.map +1 -0
- package/dist/components/graph-explorer/camera-math.js +102 -0
- package/dist/components/graph-explorer/camera-math.js.map +1 -0
- package/dist/components/graph-explorer/tree-layout.js +103 -0
- package/dist/components/graph-explorer/tree-layout.js.map +1 -0
- package/dist/components/graph-explorer/use-camera.js +82 -0
- package/dist/components/graph-explorer/use-camera.js.map +1 -0
- package/dist/components/graph-explorer/viewport-gesture.js +107 -0
- package/dist/components/graph-explorer/viewport-gesture.js.map +1 -0
- package/dist/components/kanban/KanbanBoard.js +219 -0
- package/dist/components/kanban/KanbanBoard.js.map +1 -0
- package/dist/components/kanban/recipe.js +144 -0
- package/dist/components/kanban/recipe.js.map +1 -0
- package/dist/components/markdown/Affordances.js +398 -0
- package/dist/components/markdown/Affordances.js.map +1 -0
- package/dist/components/markdown/AttachmentStrip.js +128 -0
- package/dist/components/markdown/AttachmentStrip.js.map +1 -0
- package/dist/components/markdown/ImageUpload.js +45 -0
- package/dist/components/markdown/ImageUpload.js.map +1 -0
- package/dist/components/media-error.js +7 -0
- package/dist/components/media-error.js.map +1 -0
- package/dist/components/nav-sections.js +61 -0
- package/dist/components/nav-sections.js.map +1 -0
- package/dist/components/node-canvas/NodeCanvas.js +384 -0
- package/dist/components/node-canvas/NodeCanvas.js.map +1 -0
- package/dist/components/node-canvas/layout.js +237 -0
- package/dist/components/node-canvas/layout.js.map +1 -0
- package/dist/components/node-canvas/use-canvas-gestures.js +143 -0
- package/dist/components/node-canvas/use-canvas-gestures.js.map +1 -0
- package/dist/components/openapi/OpenApiViewer.js +137 -0
- package/dist/components/openapi/OpenApiViewer.js.map +1 -0
- package/dist/components/openapi/OperationCard.js +145 -0
- package/dist/components/openapi/OperationCard.js.map +1 -0
- package/dist/components/openapi/SchemaView.js +68 -0
- package/dist/components/openapi/SchemaView.js.map +1 -0
- package/dist/components/openapi/resolve.js +102 -0
- package/dist/components/openapi/resolve.js.map +1 -0
- package/dist/components/openapi/types.js +5 -0
- package/dist/components/openapi/types.js.map +1 -0
- package/dist/components/overlay-shell.js +29 -0
- package/dist/components/overlay-shell.js.map +1 -0
- package/dist/components/overlay-stack.js +27 -0
- package/dist/components/overlay-stack.js.map +1 -0
- package/dist/components/paged-window/PageBlock.js +50 -0
- package/dist/components/paged-window/PageBlock.js.map +1 -0
- package/dist/components/provenance/ConfidenceBar.js +60 -0
- package/dist/components/provenance/ConfidenceBar.js.map +1 -0
- package/dist/components/provenance/ConfidenceMeter.js +36 -0
- package/dist/components/provenance/ConfidenceMeter.js.map +1 -0
- package/dist/components/provenance/ConfidenceReadout.js +31 -0
- package/dist/components/provenance/ConfidenceReadout.js.map +1 -0
- package/dist/components/provenance/ProvenanceBadge.js +44 -0
- package/dist/components/provenance/ProvenanceBadge.js.map +1 -0
- package/dist/components/provenance/ProvenanceDetail.js +114 -0
- package/dist/components/provenance/ProvenanceDetail.js.map +1 -0
- package/dist/components/provenance/ProvenanceDisclosure.js +111 -0
- package/dist/components/provenance/ProvenanceDisclosure.js.map +1 -0
- package/dist/components/provenance/absence.js +31 -0
- package/dist/components/provenance/absence.js.map +1 -0
- package/dist/components/provenance/types.js +30 -0
- package/dist/components/provenance/types.js.map +1 -0
- package/dist/components/rbac/AccessRequestPanel.js +153 -0
- package/dist/components/rbac/AccessRequestPanel.js.map +1 -0
- package/dist/components/rbac/AccountMenu.js +118 -0
- package/dist/components/rbac/AccountMenu.js.map +1 -0
- package/dist/components/rbac/AgentKeysList.js +20 -0
- package/dist/components/rbac/AgentKeysList.js.map +1 -0
- package/dist/components/rbac/ApiKeysPanel.js +172 -0
- package/dist/components/rbac/ApiKeysPanel.js.map +1 -0
- package/dist/components/rbac/ApiKeysTable.js +167 -0
- package/dist/components/rbac/ApiKeysTable.js.map +1 -0
- package/dist/components/rbac/Brand.js +13 -0
- package/dist/components/rbac/Brand.js.map +1 -0
- package/dist/components/rbac/Can.js +18 -0
- package/dist/components/rbac/Can.js.map +1 -0
- package/dist/components/rbac/ChangePasswordForm.js +73 -0
- package/dist/components/rbac/ChangePasswordForm.js.map +1 -0
- package/dist/components/rbac/DangerZone.js +27 -0
- package/dist/components/rbac/DangerZone.js.map +1 -0
- package/dist/components/rbac/DevToolsPopover.js +140 -0
- package/dist/components/rbac/DevToolsPopover.js.map +1 -0
- package/dist/components/rbac/EndedLine.js +24 -0
- package/dist/components/rbac/EndedLine.js.map +1 -0
- package/dist/components/rbac/InvitationsList.js +148 -0
- package/dist/components/rbac/InvitationsList.js.map +1 -0
- package/dist/components/rbac/InviteMembersDialog.js +97 -0
- package/dist/components/rbac/InviteMembersDialog.js.map +1 -0
- package/dist/components/rbac/MembersPanel.js +138 -0
- package/dist/components/rbac/MembersPanel.js.map +1 -0
- package/dist/components/rbac/PermissionRequestPanel.js +141 -0
- package/dist/components/rbac/PermissionRequestPanel.js.map +1 -0
- package/dist/components/rbac/ProfileForm.js +86 -0
- package/dist/components/rbac/ProfileForm.js.map +1 -0
- package/dist/components/rbac/ProfilePage.js +58 -0
- package/dist/components/rbac/ProfilePage.js.map +1 -0
- package/dist/components/rbac/RBACProvider.js +82 -0
- package/dist/components/rbac/RBACProvider.js.map +1 -0
- package/dist/components/rbac/RoleEditorDialog.js +90 -0
- package/dist/components/rbac/RoleEditorDialog.js.map +1 -0
- package/dist/components/rbac/RoleKeyPicker.js +77 -0
- package/dist/components/rbac/RoleKeyPicker.js.map +1 -0
- package/dist/components/rbac/RolePermissionMatrix.js +37 -0
- package/dist/components/rbac/RolePermissionMatrix.js.map +1 -0
- package/dist/components/rbac/RolesPermissionsPage.js +142 -0
- package/dist/components/rbac/RolesPermissionsPage.js.map +1 -0
- package/dist/components/rbac/SessionsList.js +146 -0
- package/dist/components/rbac/SessionsList.js.map +1 -0
- package/dist/components/rbac/TeamSettingsForm.js +69 -0
- package/dist/components/rbac/TeamSettingsForm.js.map +1 -0
- package/dist/components/rbac/TeamSwitcher.js +66 -0
- package/dist/components/rbac/TeamSwitcher.js.map +1 -0
- package/dist/components/rbac/approvalPanelParts.js +130 -0
- package/dist/components/rbac/approvalPanelParts.js.map +1 -0
- package/dist/components/rbac/permissionSections.js +8 -0
- package/dist/components/rbac/permissionSections.js.map +1 -0
- package/dist/components/rbac/stagedForm.js +42 -0
- package/dist/components/rbac/stagedForm.js.map +1 -0
- package/dist/components/rbac/useStagedImage.js +21 -0
- package/dist/components/rbac/useStagedImage.js.map +1 -0
- package/dist/components/roadmap/PhaseManager.js +48 -0
- package/dist/components/roadmap/PhaseManager.js.map +1 -0
- package/dist/components/roadmap/RoadmapItemCard.js +96 -0
- package/dist/components/roadmap/RoadmapItemCard.js.map +1 -0
- package/dist/components/roadmap/RoadmapPage.js +34 -0
- package/dist/components/roadmap/RoadmapPage.js.map +1 -0
- package/dist/components/roadmap/RoadmapSwimlaneBoard.js +91 -0
- package/dist/components/roadmap/RoadmapSwimlaneBoard.js.map +1 -0
- package/dist/components/roadmap/TrackManager.js +58 -0
- package/dist/components/roadmap/TrackManager.js.map +1 -0
- package/dist/components/roadmap/UseCaseCard.js +93 -0
- package/dist/components/roadmap/UseCaseCard.js.map +1 -0
- package/dist/components/roadmap/UseCaseLedgerPage.js +98 -0
- package/dist/components/roadmap/UseCaseLedgerPage.js.map +1 -0
- package/dist/components/roadmap/chip-tones.js +9 -0
- package/dist/components/roadmap/chip-tones.js.map +1 -0
- package/dist/components/roadmap/derive.js +28 -0
- package/dist/components/roadmap/derive.js.map +1 -0
- package/dist/components/stepper/Stepper.js +276 -0
- package/dist/components/stepper/Stepper.js.map +1 -0
- package/dist/components/stepper/derive.js +53 -0
- package/dist/components/stepper/derive.js.map +1 -0
- package/dist/confidence.css +222 -0
- package/dist/fonts/bricolage-grotesque-0.woff2 +0 -0
- package/dist/fonts/bricolage-grotesque-1.woff2 +0 -0
- package/dist/fonts/bricolage-grotesque-2.woff2 +0 -0
- package/dist/fonts/figtree-0.woff2 +0 -0
- package/dist/fonts/figtree-1.woff2 +0 -0
- package/dist/fonts/figtree-2.woff2 +0 -0
- package/dist/fonts/figtree-3.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-0.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-1.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-10.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-11.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-2.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-3.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-4.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-5.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-6.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-7.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-8.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-9.woff2 +0 -0
- package/dist/fonts.css +187 -0
- package/dist/icons/data.js +233 -0
- package/dist/icons/data.js.map +1 -0
- package/dist/index.js +942 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/attention.js +75 -0
- package/dist/lib/attention.js.map +1 -0
- package/dist/lib/board/anchor.js +14 -0
- package/dist/lib/board/anchor.js.map +1 -0
- package/dist/lib/board/model.js +41 -0
- package/dist/lib/board/model.js.map +1 -0
- package/dist/lib/board/move.js +161 -0
- package/dist/lib/board/move.js.map +1 -0
- package/dist/lib/board/position.js +11 -0
- package/dist/lib/board/position.js.map +1 -0
- package/dist/lib/board/rejection.js +22 -0
- package/dist/lib/board/rejection.js.map +1 -0
- package/dist/lib/board/use-board.js +43 -0
- package/dist/lib/board/use-board.js.map +1 -0
- package/dist/lib/calendar/band-packer.js +44 -0
- package/dist/lib/calendar/band-packer.js.map +1 -0
- package/dist/lib/calendar/drag.js +74 -0
- package/dist/lib/calendar/drag.js.map +1 -0
- package/dist/lib/calendar/lane-packer.js +67 -0
- package/dist/lib/calendar/lane-packer.js.map +1 -0
- package/dist/lib/calendar/segments.js +82 -0
- package/dist/lib/calendar/segments.js.map +1 -0
- package/dist/lib/calendar/types.js +7 -0
- package/dist/lib/calendar/types.js.map +1 -0
- package/dist/lib/chart-palette.js +27 -0
- package/dist/lib/chart-palette.js.map +1 -0
- package/dist/lib/clipboard.js +30 -0
- package/dist/lib/clipboard.js.map +1 -0
- package/dist/lib/cn.js +9 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/color.js +24 -0
- package/dist/lib/color.js.map +1 -0
- package/dist/lib/component-guidance.js +297 -0
- package/dist/lib/component-guidance.js.map +1 -0
- package/dist/lib/confidence.js +22 -0
- package/dist/lib/confidence.js.map +1 -0
- package/dist/lib/date-timeline/scale.js +197 -0
- package/dist/lib/date-timeline/scale.js.map +1 -0
- package/dist/lib/design-frame/document.js +44 -0
- package/dist/lib/design-frame/document.js.map +1 -0
- package/dist/lib/design-frame/mini-app-script.js +107 -0
- package/dist/lib/design-frame/mini-app-script.js.map +1 -0
- package/dist/lib/design-frame/mini-app.js +12 -0
- package/dist/lib/design-frame/mini-app.js.map +1 -0
- package/dist/lib/design-frame/protocol.js +46 -0
- package/dist/lib/design-frame/protocol.js.map +1 -0
- package/dist/lib/dev-warn.js +17 -0
- package/dist/lib/dev-warn.js.map +1 -0
- package/dist/lib/dnd/announce.js +120 -0
- package/dist/lib/dnd/announce.js.map +1 -0
- package/dist/lib/dnd/autoscroll.js +123 -0
- package/dist/lib/dnd/autoscroll.js.map +1 -0
- package/dist/lib/dnd/cross-drop.js +11 -0
- package/dist/lib/dnd/cross-drop.js.map +1 -0
- package/dist/lib/dnd/geometry.js +99 -0
- package/dist/lib/dnd/geometry.js.map +1 -0
- package/dist/lib/dnd/sensors/gesture.js +86 -0
- package/dist/lib/dnd/sensors/gesture.js.map +1 -0
- package/dist/lib/dnd/sensors/keyboard.js +47 -0
- package/dist/lib/dnd/sensors/keyboard.js.map +1 -0
- package/dist/lib/dnd/sensors/pointer.js +32 -0
- package/dist/lib/dnd/sensors/pointer.js.map +1 -0
- package/dist/lib/dnd/session.js +256 -0
- package/dist/lib/dnd/session.js.map +1 -0
- package/dist/lib/dnd/use-drag.js +90 -0
- package/dist/lib/dnd/use-drag.js.map +1 -0
- package/dist/lib/dom/scroll-ancestor.js +18 -0
- package/dist/lib/dom/scroll-ancestor.js.map +1 -0
- package/dist/lib/format.js +23 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/group-in-order.js +13 -0
- package/dist/lib/group-in-order.js.map +1 -0
- package/dist/lib/header-fold.js +11 -0
- package/dist/lib/header-fold.js.map +1 -0
- package/dist/lib/i18n/areas/auth-provenance-flows.js +156 -0
- package/dist/lib/i18n/areas/auth-provenance-flows.js.map +1 -0
- package/dist/lib/i18n/areas/board.js +35 -0
- package/dist/lib/i18n/areas/board.js.map +1 -0
- package/dist/lib/i18n/areas/card-face.js +10 -0
- package/dist/lib/i18n/areas/card-face.js.map +1 -0
- package/dist/lib/i18n/areas/chat-chart.js +118 -0
- package/dist/lib/i18n/areas/chat-chart.js.map +1 -0
- package/dist/lib/i18n/areas/code-editor.js +24 -0
- package/dist/lib/i18n/areas/code-editor.js.map +1 -0
- package/dist/lib/i18n/areas/date-timeline.js +21 -0
- package/dist/lib/i18n/areas/date-timeline.js.map +1 -0
- package/dist/lib/i18n/areas/dates.js +71 -0
- package/dist/lib/i18n/areas/dates.js.map +1 -0
- package/dist/lib/i18n/areas/docs-views.js +183 -0
- package/dist/lib/i18n/areas/docs-views.js.map +1 -0
- package/dist/lib/i18n/areas/feedback.js +75 -0
- package/dist/lib/i18n/areas/feedback.js.map +1 -0
- package/dist/lib/i18n/areas/formats.js +24 -0
- package/dist/lib/i18n/areas/formats.js.map +1 -0
- package/dist/lib/i18n/areas/forms.js +110 -0
- package/dist/lib/i18n/areas/forms.js.map +1 -0
- package/dist/lib/i18n/areas/keys.js +25 -0
- package/dist/lib/i18n/areas/keys.js.map +1 -0
- package/dist/lib/i18n/areas/markdown.js +136 -0
- package/dist/lib/i18n/areas/markdown.js.map +1 -0
- package/dist/lib/i18n/areas/move-rejected.js +14 -0
- package/dist/lib/i18n/areas/move-rejected.js.map +1 -0
- package/dist/lib/i18n/areas/navigation.js +104 -0
- package/dist/lib/i18n/areas/navigation.js.map +1 -0
- package/dist/lib/i18n/areas/rbac.js +331 -0
- package/dist/lib/i18n/areas/rbac.js.map +1 -0
- package/dist/lib/i18n/emphasis.js +6 -0
- package/dist/lib/i18n/emphasis.js.map +1 -0
- package/dist/lib/i18n/number-format.js +9 -0
- package/dist/lib/i18n/number-format.js.map +1 -0
- package/dist/lib/i18n/plural.js +9 -0
- package/dist/lib/i18n/plural.js.map +1 -0
- package/dist/lib/i18n/provider.js +27 -0
- package/dist/lib/i18n/provider.js.map +1 -0
- package/dist/lib/i18n/strings.js +38 -0
- package/dist/lib/i18n/strings.js.map +1 -0
- package/dist/lib/icons.js +17 -0
- package/dist/lib/icons.js.map +1 -0
- package/dist/lib/interactive-target.js +9 -0
- package/dist/lib/interactive-target.js.map +1 -0
- package/dist/lib/intl-cache.js +69 -0
- package/dist/lib/intl-cache.js.map +1 -0
- package/dist/lib/legal-document.js +37 -0
- package/dist/lib/legal-document.js.map +1 -0
- package/dist/lib/line-diff-model.js +51 -0
- package/dist/lib/line-diff-model.js.map +1 -0
- package/dist/lib/markdown/attachments.js +71 -0
- package/dist/lib/markdown/attachments.js.map +1 -0
- package/dist/lib/markdown/caret-map.js +153 -0
- package/dist/lib/markdown/caret-map.js.map +1 -0
- package/dist/lib/markdown/caret.js +35 -0
- package/dist/lib/markdown/caret.js.map +1 -0
- package/dist/lib/markdown/commands.js +443 -0
- package/dist/lib/markdown/commands.js.map +1 -0
- package/dist/lib/markdown/convert.js +153 -0
- package/dist/lib/markdown/convert.js.map +1 -0
- package/dist/lib/markdown/dom.js +89 -0
- package/dist/lib/markdown/dom.js.map +1 -0
- package/dist/lib/markdown/edit.js +92 -0
- package/dist/lib/markdown/edit.js.map +1 -0
- package/dist/lib/markdown/history.js +79 -0
- package/dist/lib/markdown/history.js.map +1 -0
- package/dist/lib/markdown/hotkeys.js +63 -0
- package/dist/lib/markdown/hotkeys.js.map +1 -0
- package/dist/lib/markdown/image-pipeline.js +236 -0
- package/dist/lib/markdown/image-pipeline.js.map +1 -0
- package/dist/lib/markdown/images.js +85 -0
- package/dist/lib/markdown/images.js.map +1 -0
- package/dist/lib/markdown/input.js +210 -0
- package/dist/lib/markdown/input.js.map +1 -0
- package/dist/lib/markdown/keys.js +37 -0
- package/dist/lib/markdown/keys.js.map +1 -0
- package/dist/lib/markdown/paste.js +180 -0
- package/dist/lib/markdown/paste.js.map +1 -0
- package/dist/lib/markdown/position.js +111 -0
- package/dist/lib/markdown/position.js.map +1 -0
- package/dist/lib/markdown/project.js +108 -0
- package/dist/lib/markdown/project.js.map +1 -0
- package/dist/lib/markdown/reconcile.js +127 -0
- package/dist/lib/markdown/reconcile.js.map +1 -0
- package/dist/lib/markdown/surface.js +373 -0
- package/dist/lib/markdown/surface.js.map +1 -0
- package/dist/lib/motion.js +22 -0
- package/dist/lib/motion.js.map +1 -0
- package/dist/lib/pad.js +7 -0
- package/dist/lib/pad.js.map +1 -0
- package/dist/lib/paged-window/layout.js +15 -0
- package/dist/lib/paged-window/layout.js.map +1 -0
- package/dist/lib/paged-window/list-owner.js +21 -0
- package/dist/lib/paged-window/list-owner.js.map +1 -0
- package/dist/lib/paged-window/records-binding.js +239 -0
- package/dist/lib/paged-window/records-binding.js.map +1 -0
- package/dist/lib/paged-window/store.js +562 -0
- package/dist/lib/paged-window/store.js.map +1 -0
- package/dist/lib/paged-window/use-measured-pitch.js +38 -0
- package/dist/lib/paged-window/use-measured-pitch.js.map +1 -0
- package/dist/lib/paged-window/use-page-visibility.js +36 -0
- package/dist/lib/paged-window/use-page-visibility.js.map +1 -0
- package/dist/lib/paged-window/use-paged-window.js +43 -0
- package/dist/lib/paged-window/use-paged-window.js.map +1 -0
- package/dist/lib/paged-window/use-scroll-root.js +12 -0
- package/dist/lib/paged-window/use-scroll-root.js.map +1 -0
- package/dist/lib/persist.js +84 -0
- package/dist/lib/persist.js.map +1 -0
- package/dist/lib/preference-values.js +13 -0
- package/dist/lib/preference-values.js.map +1 -0
- package/dist/lib/preferences.js +86 -0
- package/dist/lib/preferences.js.map +1 -0
- package/dist/lib/reads/hooks.js +156 -0
- package/dist/lib/reads/hooks.js.map +1 -0
- package/dist/lib/reads/optimistic.js +169 -0
- package/dist/lib/reads/optimistic.js.map +1 -0
- package/dist/lib/reads/refetch.js +108 -0
- package/dist/lib/reads/refetch.js.map +1 -0
- package/dist/lib/reads/slots.js +215 -0
- package/dist/lib/reads/slots.js.map +1 -0
- package/dist/lib/realtime/hooks.js +40 -0
- package/dist/lib/realtime/hooks.js.map +1 -0
- package/dist/lib/realtime/provider.js +25 -0
- package/dist/lib/realtime/provider.js.map +1 -0
- package/dist/lib/realtime/registry.js +472 -0
- package/dist/lib/realtime/registry.js.map +1 -0
- package/dist/lib/records/define-record-type.js +33 -0
- package/dist/lib/records/define-record-type.js.map +1 -0
- package/dist/lib/records/hooks.js +39 -0
- package/dist/lib/records/hooks.js.map +1 -0
- package/dist/lib/records/store.js +572 -0
- package/dist/lib/records/store.js.map +1 -0
- package/dist/lib/records/wire.js +58 -0
- package/dist/lib/records/wire.js.map +1 -0
- package/dist/lib/reduced-motion-help.js +19 -0
- package/dist/lib/reduced-motion-help.js.map +1 -0
- package/dist/lib/scroll-caret.js +18 -0
- package/dist/lib/scroll-caret.js.map +1 -0
- package/dist/lib/sim/createSimStore.js +54 -0
- package/dist/lib/sim/createSimStore.js.map +1 -0
- package/dist/lib/sim/latency.js +28 -0
- package/dist/lib/sim/latency.js.map +1 -0
- package/dist/lib/sim/registry.js +13 -0
- package/dist/lib/sim/registry.js.map +1 -0
- package/dist/lib/sim/settings.js +41 -0
- package/dist/lib/sim/settings.js.map +1 -0
- package/dist/lib/submit-shortcut.js +25 -0
- package/dist/lib/submit-shortcut.js.map +1 -0
- package/dist/lib/syntax/index.js +33 -0
- package/dist/lib/syntax/index.js.map +1 -0
- package/dist/lib/syntax/languages/bash.js +77 -0
- package/dist/lib/syntax/languages/bash.js.map +1 -0
- package/dist/lib/syntax/languages/css.js +81 -0
- package/dist/lib/syntax/languages/css.js.map +1 -0
- package/dist/lib/syntax/languages/html.js +91 -0
- package/dist/lib/syntax/languages/html.js.map +1 -0
- package/dist/lib/syntax/languages/index.js +49 -0
- package/dist/lib/syntax/languages/index.js.map +1 -0
- package/dist/lib/syntax/languages/javascript.js +133 -0
- package/dist/lib/syntax/languages/javascript.js.map +1 -0
- package/dist/lib/syntax/languages/json.js +45 -0
- package/dist/lib/syntax/languages/json.js.map +1 -0
- package/dist/lib/syntax/languages/mongodb.js +24 -0
- package/dist/lib/syntax/languages/mongodb.js.map +1 -0
- package/dist/lib/syntax/languages/plain.js +10 -0
- package/dist/lib/syntax/languages/plain.js.map +1 -0
- package/dist/lib/syntax/languages/sql.js +113 -0
- package/dist/lib/syntax/languages/sql.js.map +1 -0
- package/dist/lib/syntax/languages/vue.js +31 -0
- package/dist/lib/syntax/languages/vue.js.map +1 -0
- package/dist/lib/syntax/languages/yaml.js +55 -0
- package/dist/lib/syntax/languages/yaml.js.map +1 -0
- package/dist/lib/syntax/markdown/grammar.js +52 -0
- package/dist/lib/syntax/markdown/grammar.js.map +1 -0
- package/dist/lib/syntax/markdown/inline.js +477 -0
- package/dist/lib/syntax/markdown/inline.js.map +1 -0
- package/dist/lib/syntax/markdown/parse.js +464 -0
- package/dist/lib/syntax/markdown/parse.js.map +1 -0
- package/dist/lib/syntax/markdown/refs.js +94 -0
- package/dist/lib/syntax/markdown/refs.js.map +1 -0
- package/dist/lib/syntax/markdown/render.js +230 -0
- package/dist/lib/syntax/markdown/render.js.map +1 -0
- package/dist/lib/syntax/markdown/spans.js +40 -0
- package/dist/lib/syntax/markdown/spans.js.map +1 -0
- package/dist/lib/syntax/registry.js +55 -0
- package/dist/lib/syntax/registry.js.map +1 -0
- package/dist/lib/syntax/tokenize.js +96 -0
- package/dist/lib/syntax/tokenize.js.map +1 -0
- package/dist/lib/time/instant.js +7 -0
- package/dist/lib/time/instant.js.map +1 -0
- package/dist/lib/time/plain.js +83 -0
- package/dist/lib/time/plain.js.map +1 -0
- package/dist/lib/time/relativeAge.js +20 -0
- package/dist/lib/time/relativeAge.js.map +1 -0
- package/dist/lib/time/relativeClock.js +59 -0
- package/dist/lib/time/relativeClock.js.map +1 -0
- package/dist/lib/time/types.js +23 -0
- package/dist/lib/time/types.js.map +1 -0
- package/dist/lib/time/zone.js +148 -0
- package/dist/lib/time/zone.js.map +1 -0
- package/dist/lib/use-controllable.js +16 -0
- package/dist/lib/use-controllable.js.map +1 -0
- package/dist/lib/use-fill-height.js +49 -0
- package/dist/lib/use-fill-height.js.map +1 -0
- package/dist/lib/use-hydrated.js +14 -0
- package/dist/lib/use-hydrated.js.map +1 -0
- package/dist/lib/use-media-query.js +30 -0
- package/dist/lib/use-media-query.js.map +1 -0
- package/dist/lib/use-relabel-base-ui-dismiss.js +26 -0
- package/dist/lib/use-relabel-base-ui-dismiss.js.map +1 -0
- package/dist/lib/use-release-snap-drag.js +29 -0
- package/dist/lib/use-release-snap-drag.js.map +1 -0
- package/dist/lib/use-roving-options.js +18 -0
- package/dist/lib/use-roving-options.js.map +1 -0
- package/dist/lib/values/absent.js +5 -0
- package/dist/lib/values/absent.js.map +1 -0
- package/dist/lib/values/boolean.js +13 -0
- package/dist/lib/values/boolean.js.map +1 -0
- package/dist/lib/values/currency.js +23 -0
- package/dist/lib/values/currency.js.map +1 -0
- package/dist/lib/values/date.js +35 -0
- package/dist/lib/values/date.js.map +1 -0
- package/dist/lib/values/datetime.js +54 -0
- package/dist/lib/values/datetime.js.map +1 -0
- package/dist/lib/values/locale-date.js +60 -0
- package/dist/lib/values/locale-date.js.map +1 -0
- package/dist/lib/values/number.js +16 -0
- package/dist/lib/values/number.js.map +1 -0
- package/dist/pure.js +379 -0
- package/dist/pure.js.map +1 -0
- package/dist/styles.css +190 -0
- package/dist/theme.css +360 -0
- package/dist/types/components/Accordion.d.ts +15 -0
- package/dist/types/components/AgentWorkingSpinner.d.ts +23 -0
- package/dist/types/components/AppShell.d.ts +164 -0
- package/dist/types/components/Attention.d.ts +87 -0
- package/dist/types/components/Avatar.d.ts +154 -0
- package/dist/types/components/Badge.d.ts +131 -0
- package/dist/types/components/Board.d.ts +239 -0
- package/dist/types/components/Button.d.ts +208 -0
- package/dist/types/components/Callout.d.ts +163 -0
- package/dist/types/components/Card.d.ts +219 -0
- package/dist/types/components/Choice.d.ts +127 -0
- package/dist/types/components/CodeEditor.d.ts +86 -0
- package/dist/types/components/ColorPicker.d.ts +14 -0
- package/dist/types/components/Combobox.d.ts +43 -0
- package/dist/types/components/CommandPalette.d.ts +35 -0
- package/dist/types/components/ConcentricRing.d.ts +61 -0
- package/dist/types/components/ConnectionCard.d.ts +64 -0
- package/dist/types/components/ContextItemRow.d.ts +35 -0
- package/dist/types/components/CopyValue.d.ts +14 -0
- package/dist/types/components/CountBadge.d.ts +14 -0
- package/dist/types/components/DateCalendar.d.ts +30 -0
- package/dist/types/components/DateField.d.ts +29 -0
- package/dist/types/components/DatePicker.d.ts +20 -0
- package/dist/types/components/DateTimeText.d.ts +9 -0
- package/dist/types/components/DescriptionList.d.ts +40 -0
- package/dist/types/components/Dialog.d.ts +269 -0
- package/dist/types/components/DragDrop.d.ts +196 -0
- package/dist/types/components/Drawer.d.ts +163 -0
- package/dist/types/components/EditGutter.d.ts +44 -0
- package/dist/types/components/EmojiPicker.d.ts +30 -0
- package/dist/types/components/ErrorBoundary.d.ts +43 -0
- package/dist/types/components/Field.d.ts +37 -0
- package/dist/types/components/FileUpload.d.ts +22 -0
- package/dist/types/components/FilterMenu.d.ts +120 -0
- package/dist/types/components/GatesSection.d.ts +79 -0
- package/dist/types/components/Icon.d.ts +40 -0
- package/dist/types/components/IconButton.d.ts +69 -0
- package/dist/types/components/IconStack.d.ts +28 -0
- package/dist/types/components/ImageUploadField.d.ts +38 -0
- package/dist/types/components/InlineEdit.d.ts +183 -0
- package/dist/types/components/InlineMarkdownEdit.d.ts +100 -0
- package/dist/types/components/Input.d.ts +128 -0
- package/dist/types/components/LegalDocument.d.ts +23 -0
- package/dist/types/components/LineDiff.d.ts +53 -0
- package/dist/types/components/ListHeader.d.ts +45 -0
- package/dist/types/components/Loading.d.ts +131 -0
- package/dist/types/components/Markdown.d.ts +35 -0
- package/dist/types/components/MarkdownEditor.d.ts +129 -0
- package/dist/types/components/Menu.d.ts +157 -0
- package/dist/types/components/Navigation.d.ts +67 -0
- package/dist/types/components/NumberInput.d.ts +177 -0
- package/dist/types/components/OTPInput.d.ts +13 -0
- package/dist/types/components/OrderedEntityManager.d.ts +64 -0
- package/dist/types/components/PagedWindowList.d.ts +23 -0
- package/dist/types/components/PaginationBar.d.ts +31 -0
- package/dist/types/components/Panel.d.ts +94 -0
- package/dist/types/components/PasswordInput.d.ts +7 -0
- package/dist/types/components/PasswordRequirements.d.ts +11 -0
- package/dist/types/components/PatchDiff.d.ts +38 -0
- package/dist/types/components/PendingVeil.d.ts +8 -0
- package/dist/types/components/Popover.d.ts +231 -0
- package/dist/types/components/Progress.d.ts +580 -0
- package/dist/types/components/RatingScale.d.ts +30 -0
- package/dist/types/components/ReadMore.d.ts +26 -0
- package/dist/types/components/RecordCard.d.ts +413 -0
- package/dist/types/components/RelativeTime.d.ts +17 -0
- package/dist/types/components/SandboxedFrame.d.ts +37 -0
- package/dist/types/components/SearchInput.d.ts +6 -0
- package/dist/types/components/SecretField.d.ts +90 -0
- package/dist/types/components/SectionNav.d.ts +15 -0
- package/dist/types/components/Select.d.ts +53 -0
- package/dist/types/components/SequenceDiagram.d.ts +15 -0
- package/dist/types/components/SettingRow.d.ts +144 -0
- package/dist/types/components/SignOffRings.d.ts +29 -0
- package/dist/types/components/Slider.d.ts +255 -0
- package/dist/types/components/SolutionChoice.d.ts +49 -0
- package/dist/types/components/SortMenu.d.ts +45 -0
- package/dist/types/components/Spinner.d.ts +29 -0
- package/dist/types/components/Stat.d.ts +136 -0
- package/dist/types/components/StatusSelect.d.ts +93 -0
- package/dist/types/components/Surface.d.ts +145 -0
- package/dist/types/components/Table.d.ts +164 -0
- package/dist/types/components/Tabs.d.ts +142 -0
- package/dist/types/components/ThemeMenu.d.ts +56 -0
- package/dist/types/components/Toast.d.ts +63 -0
- package/dist/types/components/Toggle.d.ts +168 -0
- package/dist/types/components/ToggleMatrix.d.ts +51 -0
- package/dist/types/components/Tree.d.ts +20 -0
- package/dist/types/components/TriStateSwitch.d.ts +63 -0
- package/dist/types/components/VideoPlayer.d.ts +26 -0
- package/dist/types/components/auth/AcceptInvitationCard.d.ts +54 -0
- package/dist/types/components/auth/AuthLayout.d.ts +12 -0
- package/dist/types/components/auth/ForgotPasswordForm.d.ts +6 -0
- package/dist/types/components/auth/LoginForm.d.ts +13 -0
- package/dist/types/components/auth/ResetPasswordForm.d.ts +9 -0
- package/dist/types/components/auth/SignInProviders.d.ts +56 -0
- package/dist/types/components/auth/SignupCard.d.ts +62 -0
- package/dist/types/components/auth/TermsAcceptance.d.ts +14 -0
- package/dist/types/components/auth/index.d.ts +8 -0
- package/dist/types/components/board/context.d.ts +65 -0
- package/dist/types/components/board/recipe.d.ts +97 -0
- package/dist/types/components/calendar/CalendarMonth.d.ts +32 -0
- package/dist/types/components/calendar/CalendarTimeGrid.d.ts +74 -0
- package/dist/types/components/calendar/EventActions.d.ts +16 -0
- package/dist/types/components/calendar/format.d.ts +42 -0
- package/dist/types/components/calendar/palette.d.ts +17 -0
- package/dist/types/components/calendar/use-calendar-drag.d.ts +53 -0
- package/dist/types/components/calendar/use-event-keyboard.d.ts +23 -0
- package/dist/types/components/calendar/use-grid-navigation.d.ts +47 -0
- package/dist/types/components/calendar/use-now.d.ts +20 -0
- package/dist/types/components/card-face/AcRingGlyph.d.ts +20 -0
- package/dist/types/components/card-face/BoardCardAgentSlot.d.ts +19 -0
- package/dist/types/components/card-face/CardFace.d.ts +106 -0
- package/dist/types/components/card-face/CardTypeBadge.d.ts +21 -0
- package/dist/types/components/card-face/EffortBadge.d.ts +9 -0
- package/dist/types/components/card-face/GateRingGlyph.d.ts +22 -0
- package/dist/types/components/card-face/OverflowRow.d.ts +40 -0
- package/dist/types/components/card-face/TapTip.d.ts +15 -0
- package/dist/types/components/card-face/hit-area.d.ts +20 -0
- package/dist/types/components/card-face/vocabulary.d.ts +83 -0
- package/dist/types/components/chart/BarList.d.ts +27 -0
- package/dist/types/components/chart/LineChart.d.ts +64 -0
- package/dist/types/components/chart/ShareBar.d.ts +26 -0
- package/dist/types/components/chart/TimeSeriesChart.d.ts +60 -0
- package/dist/types/components/chart/label-metrics.d.ts +9 -0
- package/dist/types/components/chart/line-chart-axis.d.ts +14 -0
- package/dist/types/components/chart/line-chart-scale.d.ts +55 -0
- package/dist/types/components/chart/line-series-style.d.ts +14 -0
- package/dist/types/components/chart/share-bar-labels.d.ts +17 -0
- package/dist/types/components/chart/shared.d.ts +122 -0
- package/dist/types/components/chart/time-series-scale.d.ts +29 -0
- package/dist/types/components/chat/Attachment.d.ts +125 -0
- package/dist/types/components/chat/Chat.d.ts +60 -0
- package/dist/types/components/chat/Composer.d.ts +62 -0
- package/dist/types/components/chat/ContextMeter.d.ts +45 -0
- package/dist/types/components/chat/EffortControl.d.ts +23 -0
- package/dist/types/components/chat/FileCover.d.ts +14 -0
- package/dist/types/components/chat/Message.d.ts +66 -0
- package/dist/types/components/chat/MessageScroller.d.ts +18 -0
- package/dist/types/components/chat/ModelSelector.d.ts +44 -0
- package/dist/types/components/chat/StreamingMarkdown.d.ts +11 -0
- package/dist/types/components/chat/download-file.d.ts +7 -0
- package/dist/types/components/chat/file-icon.d.ts +29 -0
- package/dist/types/components/chat/types.d.ts +165 -0
- package/dist/types/components/checklist/StatusChecklist.d.ts +37 -0
- package/dist/types/components/checklist/index.d.ts +3 -0
- package/dist/types/components/checklist/tally.d.ts +19 -0
- package/dist/types/components/checklist/types.d.ts +28 -0
- package/dist/types/components/code-editor/context.d.ts +32 -0
- package/dist/types/components/code-editor/editing.d.ts +39 -0
- package/dist/types/components/code-editor/highlight.d.ts +20 -0
- package/dist/types/components/code-editor/recipe.d.ts +109 -0
- package/dist/types/components/date-timeline/DateTimeline.d.ts +99 -0
- package/dist/types/components/date-timeline/TimelineRow.d.ts +22 -0
- package/dist/types/components/date-timeline/useBarDrag.d.ts +15 -0
- package/dist/types/components/date-timeline/useMarkerDrag.d.ts +14 -0
- package/dist/types/components/date-timeline/useTimelineZoom.d.ts +23 -0
- package/dist/types/components/drag-drop/context.d.ts +85 -0
- package/dist/types/components/drag-drop/recipe.d.ts +163 -0
- package/dist/types/components/drag-drop/shift.d.ts +153 -0
- package/dist/types/components/edit/activation.d.ts +21 -0
- package/dist/types/components/edit/outcome.d.ts +29 -0
- package/dist/types/components/edit/use-edit-session.d.ts +77 -0
- package/dist/types/components/file-viewer/FileViewer.d.ts +2 -0
- package/dist/types/components/file-viewer/PageNumberJumpField.d.ts +9 -0
- package/dist/types/components/file-viewer/ViewerControls.d.ts +20 -0
- package/dist/types/components/file-viewer/ViewerRail.d.ts +10 -0
- package/dist/types/components/file-viewer/ViewerStage.d.ts +22 -0
- package/dist/types/components/file-viewer/frames.d.ts +28 -0
- package/dist/types/components/file-viewer/index.d.ts +3 -0
- package/dist/types/components/file-viewer/types.d.ts +70 -0
- package/dist/types/components/file-viewer/use-frame-cursor.d.ts +13 -0
- package/dist/types/components/file-viewer/use-viewer-keys.d.ts +24 -0
- package/dist/types/components/file-viewer/use-viewer-zoom.d.ts +29 -0
- package/dist/types/components/focus-web/FocusWeb.d.ts +3 -0
- package/dist/types/components/focus-web/index.d.ts +4 -0
- package/dist/types/components/focus-web/layout.d.ts +55 -0
- package/dist/types/components/focus-web/types.d.ts +131 -0
- package/dist/types/components/graph-explorer/GraphExplorer.d.ts +42 -0
- package/dist/types/components/graph-explorer/camera-math.d.ts +119 -0
- package/dist/types/components/graph-explorer/index.d.ts +5 -0
- package/dist/types/components/graph-explorer/tree-layout.d.ts +67 -0
- package/dist/types/components/graph-explorer/types.d.ts +62 -0
- package/dist/types/components/graph-explorer/use-camera.d.ts +81 -0
- package/dist/types/components/graph-explorer/viewport-gesture.d.ts +32 -0
- package/dist/types/components/kanban/KanbanBoard.d.ts +72 -0
- package/dist/types/components/kanban/recipe.d.ts +73 -0
- package/dist/types/components/kanban/types.d.ts +55 -0
- package/dist/types/components/markdown/Affordances.d.ts +105 -0
- package/dist/types/components/markdown/AttachmentStrip.d.ts +25 -0
- package/dist/types/components/markdown/ImageUpload.d.ts +56 -0
- package/dist/types/components/media-error.d.ts +11 -0
- package/dist/types/components/nav-sections.d.ts +10 -0
- package/dist/types/components/node-canvas/NodeCanvas.d.ts +66 -0
- package/dist/types/components/node-canvas/index.d.ts +3 -0
- package/dist/types/components/node-canvas/layout.d.ts +29 -0
- package/dist/types/components/node-canvas/types.d.ts +207 -0
- package/dist/types/components/node-canvas/use-canvas-gestures.d.ts +39 -0
- package/dist/types/components/openapi/OpenApiViewer.d.ts +14 -0
- package/dist/types/components/openapi/OperationCard.d.ts +33 -0
- package/dist/types/components/openapi/SchemaView.d.ts +14 -0
- package/dist/types/components/openapi/index.d.ts +6 -0
- package/dist/types/components/openapi/resolve.d.ts +72 -0
- package/dist/types/components/openapi/types.d.ts +128 -0
- package/dist/types/components/overlay-shell.d.ts +48 -0
- package/dist/types/components/overlay-stack.d.ts +18 -0
- package/dist/types/components/paged-window/PageBlock.d.ts +31 -0
- package/dist/types/components/provenance/ConfidenceBar.d.ts +118 -0
- package/dist/types/components/provenance/ConfidenceMeter.d.ts +21 -0
- package/dist/types/components/provenance/ConfidenceReadout.d.ts +17 -0
- package/dist/types/components/provenance/ProvenanceBadge.d.ts +23 -0
- package/dist/types/components/provenance/ProvenanceDetail.d.ts +109 -0
- package/dist/types/components/provenance/ProvenanceDisclosure.d.ts +107 -0
- package/dist/types/components/provenance/absence.d.ts +37 -0
- package/dist/types/components/provenance/index.d.ts +7 -0
- package/dist/types/components/provenance/types.d.ts +137 -0
- package/dist/types/components/rbac/AccessRequestPanel.d.ts +92 -0
- package/dist/types/components/rbac/AccountMenu.d.ts +46 -0
- package/dist/types/components/rbac/AgentKeysList.d.ts +20 -0
- package/dist/types/components/rbac/ApiKeysPanel.d.ts +26 -0
- package/dist/types/components/rbac/ApiKeysTable.d.ts +63 -0
- package/dist/types/components/rbac/Brand.d.ts +8 -0
- package/dist/types/components/rbac/Can.d.ts +19 -0
- package/dist/types/components/rbac/ChangePasswordForm.d.ts +18 -0
- package/dist/types/components/rbac/DangerZone.d.ts +8 -0
- package/dist/types/components/rbac/DevToolsPopover.d.ts +36 -0
- package/dist/types/components/rbac/EndedLine.d.ts +21 -0
- package/dist/types/components/rbac/InvitationsList.d.ts +39 -0
- package/dist/types/components/rbac/InviteMembersDialog.d.ts +21 -0
- package/dist/types/components/rbac/MembersPanel.d.ts +31 -0
- package/dist/types/components/rbac/PermissionRequestPanel.d.ts +36 -0
- package/dist/types/components/rbac/ProfileForm.d.ts +27 -0
- package/dist/types/components/rbac/ProfilePage.d.ts +16 -0
- package/dist/types/components/rbac/RBACProvider.d.ts +69 -0
- package/dist/types/components/rbac/RoleEditorDialog.d.ts +28 -0
- package/dist/types/components/rbac/RoleKeyPicker.d.ts +24 -0
- package/dist/types/components/rbac/RolePermissionMatrix.d.ts +21 -0
- package/dist/types/components/rbac/RolesPermissionsPage.d.ts +24 -0
- package/dist/types/components/rbac/SessionsList.d.ts +35 -0
- package/dist/types/components/rbac/TeamSettingsForm.d.ts +22 -0
- package/dist/types/components/rbac/TeamSwitcher.d.ts +5 -0
- package/dist/types/components/rbac/approvalPanelParts.d.ts +69 -0
- package/dist/types/components/rbac/index.d.ts +25 -0
- package/dist/types/components/rbac/permissionSections.d.ts +8 -0
- package/dist/types/components/rbac/stagedForm.d.ts +25 -0
- package/dist/types/components/rbac/types.d.ts +65 -0
- package/dist/types/components/rbac/useStagedImage.d.ts +15 -0
- package/dist/types/components/roadmap/PhaseManager.d.ts +19 -0
- package/dist/types/components/roadmap/RoadmapItemCard.d.ts +51 -0
- package/dist/types/components/roadmap/RoadmapPage.d.ts +12 -0
- package/dist/types/components/roadmap/RoadmapSwimlaneBoard.d.ts +15 -0
- package/dist/types/components/roadmap/TrackManager.d.ts +19 -0
- package/dist/types/components/roadmap/UseCaseCard.d.ts +30 -0
- package/dist/types/components/roadmap/UseCaseLedgerPage.d.ts +29 -0
- package/dist/types/components/roadmap/chip-tones.d.ts +2 -0
- package/dist/types/components/roadmap/derive.d.ts +39 -0
- package/dist/types/components/roadmap/index.d.ts +10 -0
- package/dist/types/components/roadmap/types.d.ts +86 -0
- package/dist/types/components/stepper/Stepper.d.ts +79 -0
- package/dist/types/components/stepper/derive.d.ts +49 -0
- package/dist/types/components/stepper/index.d.ts +3 -0
- package/dist/types/components/stepper/types.d.ts +118 -0
- package/dist/types/icons/data.d.ts +2054 -0
- package/dist/types/index.d.ts +209 -0
- package/dist/types/lib/attention.d.ts +62 -0
- package/dist/types/lib/board/anchor.d.ts +69 -0
- package/dist/types/lib/board/index.d.ts +17 -0
- package/dist/types/lib/board/model.d.ts +43 -0
- package/dist/types/lib/board/move.d.ts +181 -0
- package/dist/types/lib/board/position.d.ts +22 -0
- package/dist/types/lib/board/rejection.d.ts +8 -0
- package/dist/types/lib/board/types.d.ts +294 -0
- package/dist/types/lib/board/use-board.d.ts +47 -0
- package/dist/types/lib/calendar/band-packer.d.ts +53 -0
- package/dist/types/lib/calendar/drag.d.ts +125 -0
- package/dist/types/lib/calendar/index.d.ts +4 -0
- package/dist/types/lib/calendar/lane-packer.d.ts +88 -0
- package/dist/types/lib/calendar/segments.d.ts +91 -0
- package/dist/types/lib/calendar/types.d.ts +166 -0
- package/dist/types/lib/chart-palette.d.ts +14 -0
- package/dist/types/lib/clipboard.d.ts +12 -0
- package/dist/types/lib/cn.d.ts +7 -0
- package/dist/types/lib/color.d.ts +14 -0
- package/dist/types/lib/component-guidance.d.ts +15 -0
- package/dist/types/lib/confidence.d.ts +28 -0
- package/dist/types/lib/date-timeline/scale.d.ts +143 -0
- package/dist/types/lib/design-frame/document.d.ts +39 -0
- package/dist/types/lib/design-frame/mini-app-script.d.ts +29 -0
- package/dist/types/lib/design-frame/mini-app.d.ts +17 -0
- package/dist/types/lib/design-frame/protocol.d.ts +78 -0
- package/dist/types/lib/dev-warn.d.ts +10 -0
- package/dist/types/lib/dnd/announce.d.ts +124 -0
- package/dist/types/lib/dnd/autoscroll.d.ts +88 -0
- package/dist/types/lib/dnd/cross-drop.d.ts +18 -0
- package/dist/types/lib/dnd/geometry.d.ts +126 -0
- package/dist/types/lib/dnd/index.d.ts +17 -0
- package/dist/types/lib/dnd/sensors/gesture.d.ts +37 -0
- package/dist/types/lib/dnd/sensors/keyboard.d.ts +54 -0
- package/dist/types/lib/dnd/sensors/pointer.d.ts +59 -0
- package/dist/types/lib/dnd/session.d.ts +124 -0
- package/dist/types/lib/dnd/types.d.ts +226 -0
- package/dist/types/lib/dnd/use-drag.d.ts +82 -0
- package/dist/types/lib/dom/scroll-ancestor.d.ts +15 -0
- package/dist/types/lib/format.d.ts +33 -0
- package/dist/types/lib/group-in-order.d.ts +13 -0
- package/dist/types/lib/header-fold.d.ts +10 -0
- package/dist/types/lib/i18n/areas/auth-provenance-flows.d.ts +287 -0
- package/dist/types/lib/i18n/areas/board.d.ts +51 -0
- package/dist/types/lib/i18n/areas/card-face.d.ts +8 -0
- package/dist/types/lib/i18n/areas/chat-chart.d.ts +202 -0
- package/dist/types/lib/i18n/areas/code-editor.d.ts +40 -0
- package/dist/types/lib/i18n/areas/date-timeline.d.ts +36 -0
- package/dist/types/lib/i18n/areas/dates.d.ts +103 -0
- package/dist/types/lib/i18n/areas/docs-views.d.ts +297 -0
- package/dist/types/lib/i18n/areas/feedback.d.ts +132 -0
- package/dist/types/lib/i18n/areas/formats.d.ts +30 -0
- package/dist/types/lib/i18n/areas/forms.d.ts +182 -0
- package/dist/types/lib/i18n/areas/keys.d.ts +15 -0
- package/dist/types/lib/i18n/areas/markdown.d.ts +150 -0
- package/dist/types/lib/i18n/areas/move-rejected.d.ts +16 -0
- package/dist/types/lib/i18n/areas/navigation.d.ts +185 -0
- package/dist/types/lib/i18n/areas/rbac.d.ts +633 -0
- package/dist/types/lib/i18n/emphasis.d.ts +3 -0
- package/dist/types/lib/i18n/index.d.ts +10 -0
- package/dist/types/lib/i18n/number-format.d.ts +5 -0
- package/dist/types/lib/i18n/plural.d.ts +7 -0
- package/dist/types/lib/i18n/provider.d.ts +16 -0
- package/dist/types/lib/i18n/strings.d.ts +18 -0
- package/dist/types/lib/icons.d.ts +22 -0
- package/dist/types/lib/interactive-target.d.ts +3 -0
- package/dist/types/lib/intl-cache.d.ts +31 -0
- package/dist/types/lib/legal-document.d.ts +82 -0
- package/dist/types/lib/line-diff-model.d.ts +39 -0
- package/dist/types/lib/markdown/attachments.d.ts +50 -0
- package/dist/types/lib/markdown/caret-map.d.ts +69 -0
- package/dist/types/lib/markdown/caret.d.ts +6 -0
- package/dist/types/lib/markdown/commands.d.ts +186 -0
- package/dist/types/lib/markdown/convert.d.ts +99 -0
- package/dist/types/lib/markdown/dom.d.ts +30 -0
- package/dist/types/lib/markdown/edit.d.ts +16 -0
- package/dist/types/lib/markdown/history.d.ts +59 -0
- package/dist/types/lib/markdown/hotkeys.d.ts +63 -0
- package/dist/types/lib/markdown/image-pipeline.d.ts +173 -0
- package/dist/types/lib/markdown/images.d.ts +138 -0
- package/dist/types/lib/markdown/input.d.ts +38 -0
- package/dist/types/lib/markdown/keys.d.ts +34 -0
- package/dist/types/lib/markdown/paste.d.ts +9 -0
- package/dist/types/lib/markdown/position.d.ts +43 -0
- package/dist/types/lib/markdown/project.d.ts +88 -0
- package/dist/types/lib/markdown/reconcile.d.ts +63 -0
- package/dist/types/lib/markdown/surface.d.ts +236 -0
- package/dist/types/lib/motion.d.ts +30 -0
- package/dist/types/lib/pad.d.ts +6 -0
- package/dist/types/lib/paged-window/index.d.ts +2 -0
- package/dist/types/lib/paged-window/layout.d.ts +21 -0
- package/dist/types/lib/paged-window/list-owner.d.ts +12 -0
- package/dist/types/lib/paged-window/records-binding.d.ts +102 -0
- package/dist/types/lib/paged-window/store.d.ts +307 -0
- package/dist/types/lib/paged-window/use-measured-pitch.d.ts +34 -0
- package/dist/types/lib/paged-window/use-page-visibility.d.ts +20 -0
- package/dist/types/lib/paged-window/use-paged-window.d.ts +61 -0
- package/dist/types/lib/paged-window/use-scroll-root.d.ts +18 -0
- package/dist/types/lib/persist.d.ts +57 -0
- package/dist/types/lib/preference-values.d.ts +72 -0
- package/dist/types/lib/preferences.d.ts +26 -0
- package/dist/types/lib/reads/hooks.d.ts +49 -0
- package/dist/types/lib/reads/index.d.ts +5 -0
- package/dist/types/lib/reads/optimistic.d.ts +119 -0
- package/dist/types/lib/reads/refetch.d.ts +83 -0
- package/dist/types/lib/reads/slots.d.ts +137 -0
- package/dist/types/lib/reads/types.d.ts +155 -0
- package/dist/types/lib/realtime/hooks.d.ts +38 -0
- package/dist/types/lib/realtime/index.d.ts +4 -0
- package/dist/types/lib/realtime/provider.d.ts +38 -0
- package/dist/types/lib/realtime/registry.d.ts +225 -0
- package/dist/types/lib/realtime/types.d.ts +242 -0
- package/dist/types/lib/records/define-record-type.d.ts +29 -0
- package/dist/types/lib/records/hooks.d.ts +46 -0
- package/dist/types/lib/records/index.d.ts +5 -0
- package/dist/types/lib/records/store.d.ts +289 -0
- package/dist/types/lib/records/types.d.ts +195 -0
- package/dist/types/lib/records/wire.d.ts +96 -0
- package/dist/types/lib/reduced-motion-help.d.ts +23 -0
- package/dist/types/lib/scroll-caret.d.ts +6 -0
- package/dist/types/lib/sim/createSimStore.d.ts +18 -0
- package/dist/types/lib/sim/index.d.ts +5 -0
- package/dist/types/lib/sim/latency.d.ts +10 -0
- package/dist/types/lib/sim/registry.d.ts +14 -0
- package/dist/types/lib/sim/settings.d.ts +11 -0
- package/dist/types/lib/sim/types.d.ts +3 -0
- package/dist/types/lib/submit-shortcut.d.ts +24 -0
- package/dist/types/lib/syntax/index.d.ts +16 -0
- package/dist/types/lib/syntax/languages/bash.d.ts +1 -0
- package/dist/types/lib/syntax/languages/css.d.ts +1 -0
- package/dist/types/lib/syntax/languages/html.d.ts +17 -0
- package/dist/types/lib/syntax/languages/index.d.ts +33 -0
- package/dist/types/lib/syntax/languages/javascript.d.ts +22 -0
- package/dist/types/lib/syntax/languages/json.d.ts +1 -0
- package/dist/types/lib/syntax/languages/mongodb.d.ts +1 -0
- package/dist/types/lib/syntax/languages/plain.d.ts +9 -0
- package/dist/types/lib/syntax/languages/sql.d.ts +4 -0
- package/dist/types/lib/syntax/languages/vue.d.ts +1 -0
- package/dist/types/lib/syntax/languages/yaml.d.ts +1 -0
- package/dist/types/lib/syntax/markdown/frames.d.ts +145 -0
- package/dist/types/lib/syntax/markdown/grammar.d.ts +1 -0
- package/dist/types/lib/syntax/markdown/index.d.ts +5 -0
- package/dist/types/lib/syntax/markdown/inline.d.ts +21 -0
- package/dist/types/lib/syntax/markdown/parse.d.ts +15 -0
- package/dist/types/lib/syntax/markdown/refs.d.ts +47 -0
- package/dist/types/lib/syntax/markdown/render.d.ts +25 -0
- package/dist/types/lib/syntax/markdown/spans.d.ts +84 -0
- package/dist/types/lib/syntax/markdown/types.d.ts +108 -0
- package/dist/types/lib/syntax/registry.d.ts +37 -0
- package/dist/types/lib/syntax/tokenize.d.ts +17 -0
- package/dist/types/lib/syntax/types.d.ts +119 -0
- package/dist/types/lib/time/index.d.ts +4 -0
- package/dist/types/lib/time/instant.d.ts +2 -0
- package/dist/types/lib/time/plain.d.ts +61 -0
- package/dist/types/lib/time/relativeAge.d.ts +18 -0
- package/dist/types/lib/time/relativeClock.d.ts +8 -0
- package/dist/types/lib/time/types.d.ts +87 -0
- package/dist/types/lib/time/zone.d.ts +106 -0
- package/dist/types/lib/use-controllable.d.ts +14 -0
- package/dist/types/lib/use-fill-height.d.ts +26 -0
- package/dist/types/lib/use-hydrated.d.ts +8 -0
- package/dist/types/lib/use-media-query.d.ts +29 -0
- package/dist/types/lib/use-relabel-base-ui-dismiss.d.ts +6 -0
- package/dist/types/lib/use-release-snap-drag.d.ts +25 -0
- package/dist/types/lib/use-roving-options.d.ts +10 -0
- package/dist/types/lib/values/absent.d.ts +7 -0
- package/dist/types/lib/values/boolean.d.ts +29 -0
- package/dist/types/lib/values/currency.d.ts +22 -0
- package/dist/types/lib/values/date.d.ts +30 -0
- package/dist/types/lib/values/datetime.d.ts +48 -0
- package/dist/types/lib/values/index.d.ts +5 -0
- package/dist/types/lib/values/locale-date.d.ts +34 -0
- package/dist/types/lib/values/number.d.ts +27 -0
- package/dist/types/pure.d.ts +48 -0
- package/package.json +136 -4
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { jsx as f, jsxs as h } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as S, useEffect as T, useContext as k, useState as W, useCallback as p, createContext as C } from "react";
|
|
3
|
+
import { Tabs as d } from "@base-ui/react/tabs";
|
|
4
|
+
import { tv as z } from "tailwind-variants";
|
|
5
|
+
import { cn as u } from "../lib/cn.js";
|
|
6
|
+
import { reducedMotion as A } from "../lib/motion.js";
|
|
7
|
+
import { Icon as g } from "./Icon.js";
|
|
8
|
+
import { IconButton as x } from "./IconButton.js";
|
|
9
|
+
const m = z({
|
|
10
|
+
slots: {
|
|
11
|
+
root: "flex min-w-0 flex-col gap-4",
|
|
12
|
+
/* A STRIP THAT OUTGROWS ITS CONTAINER SCROLLS ITSELF, and three of these
|
|
13
|
+
utilities are what make that true rather than one.
|
|
14
|
+
|
|
15
|
+
`overflow-x-auto` is the scroller. `min-w-0` is what lets the strip be
|
|
16
|
+
narrower than the tabs inside it — a flex item's automatic minimum is its
|
|
17
|
+
CONTENT, so without this the strip is floored at the full width of its
|
|
18
|
+
tabs and pushes its parent wide instead of scrolling. `overscroll-x-contain`
|
|
19
|
+
stops a trackpad fling that reaches the end of the strip from chaining
|
|
20
|
+
into the page and scrolling the whole document sideways, which is the
|
|
21
|
+
version of this bug that only appears on a laptop.
|
|
22
|
+
|
|
23
|
+
`shrink-0` is about the OTHER axis and is not a contradiction. `Tabs`'
|
|
24
|
+
root is a flex COLUMN, so shrink applies to height: inside a bounded
|
|
25
|
+
column — a tabbed panel filling a fixed-height card — a strip without it
|
|
26
|
+
gets squashed toward zero to make room for the panel, and the tab labels
|
|
27
|
+
clip. Width is settled by `align-items: stretch` and `min-w-0` above,
|
|
28
|
+
which `shrink-0` does not touch. */
|
|
29
|
+
list: "relative flex min-w-0 shrink-0 items-center gap-1 overflow-x-auto overscroll-x-contain",
|
|
30
|
+
/* z-10 / z-0: the indicator is a LATER DOM sibling than the tabs (see
|
|
31
|
+
TabList), so with both at `z-auto` the indicator paints on top of the
|
|
32
|
+
labels. `line` survives that by accident — its indicator is a 2px bar
|
|
33
|
+
below the text. `pill`'s is a full-size opaque panel, and it covered the
|
|
34
|
+
selected label completely. Ordering the two explicitly states the
|
|
35
|
+
invariant the sibling structure depends on: the indicator is always
|
|
36
|
+
BEHIND the label, whatever shape a variant gives it. */
|
|
37
|
+
tab: [
|
|
38
|
+
/* justify-center is inert until `dx-tap` widens a short label past its
|
|
39
|
+
own padding on a touch pointer — without it that extra width all lands
|
|
40
|
+
on the right and the label sits off-centre under its own indicator. */
|
|
41
|
+
"dx-tap relative z-10 flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap",
|
|
42
|
+
"font-medium text-tertiary outline-none",
|
|
43
|
+
"transition-colors duration-(--dur-fast) ease-hover",
|
|
44
|
+
"hover:text-secondary",
|
|
45
|
+
/* `data-active`, NOT `data-selected`. Base UI marks the current tab with
|
|
46
|
+
`data-active` (measured on the rendered DOM: the selected tab carries
|
|
47
|
+
`data-active`, `aria-selected="true"`, and no `data-selected` at all),
|
|
48
|
+
so the rule written against `data-selected` matched nothing and the
|
|
49
|
+
current tab's label sat at text-tertiary like every other. It looked
|
|
50
|
+
right only because the indicator underneath it marks the selection —
|
|
51
|
+
the same silent-dead-variant shape as the `data-side-top:` arrow rules,
|
|
52
|
+
and equally invisible from the source. */
|
|
53
|
+
"data-active:text-primary",
|
|
54
|
+
/* Selected AND hovered holds full strength. The two rules above weigh
|
|
55
|
+
the same, so pointing at the CURRENT tab could dim its label from
|
|
56
|
+
primary to secondary — selection reading weaker under the pointer.
|
|
57
|
+
|
|
58
|
+
A tab's hover is deliberately text-only: the tab paints ABOVE its own
|
|
59
|
+
indicator (z-10 over z-0, see the note on `tab`), so a background on
|
|
60
|
+
hover would cover the underline and the pill panel that mark it. */
|
|
61
|
+
"data-active:hover:text-primary",
|
|
62
|
+
"data-disabled:pointer-events-none data-disabled:opacity-45"
|
|
63
|
+
],
|
|
64
|
+
indicator: [
|
|
65
|
+
"absolute z-0 rounded-full bg-accent",
|
|
66
|
+
"translate-x-[var(--active-tab-left)] w-[var(--active-tab-width)]",
|
|
67
|
+
/* DX-4996: the slide is for a CHANGE OF SELECTION only. Colour always eases; position and width carry a transition only while `data-sliding`
|
|
68
|
+
is set (TabList sets it for the length of a selection change), so a mark arriving, a resize, a font load or a first paint puts the
|
|
69
|
+
indicator on the new geometry at once instead of travelling there from where the tab used to be. */
|
|
70
|
+
"transition-[var(--tx-colors)] duration-(--dur-slow) ease-emphasis",
|
|
71
|
+
"data-sliding:transition-[var(--tx-colors),translate,width]"
|
|
72
|
+
],
|
|
73
|
+
panel: "min-w-0 outline-none"
|
|
74
|
+
},
|
|
75
|
+
variants: {
|
|
76
|
+
variant: {
|
|
77
|
+
/* Underline: the default. Reads as navigation within one surface. */
|
|
78
|
+
line: {
|
|
79
|
+
list: "border-b border-border",
|
|
80
|
+
tab: "px-3 py-2.5 text-sm",
|
|
81
|
+
indicator: "bottom-0 left-0 h-0.5"
|
|
82
|
+
},
|
|
83
|
+
/* Pill: for switching a view's mode, where the tabs are a control
|
|
84
|
+
rather than a section header. */
|
|
85
|
+
pill: {
|
|
86
|
+
list: "gap-1 rounded-lg bg-surface-inset p-1",
|
|
87
|
+
tab: "rounded-md px-3 py-1.5 text-sm data-active:text-primary",
|
|
88
|
+
indicator: "inset-y-1 left-0 rounded-md bg-surface shadow-sm"
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
/* FILLING THE HEIGHT THE GROUP WAS GIVEN — see `TabsProps.fill` for when
|
|
92
|
+
to ask for it and why it is not the default.
|
|
93
|
+
|
|
94
|
+
Two utilities on each of two slots, and all four are load-bearing.
|
|
95
|
+
`flex-1` is what claims the free space; `min-h-0` is what lets the box
|
|
96
|
+
be SHORTER than its content, without which a flex item's automatic
|
|
97
|
+
minimum size is its content and the column grows instead of letting a
|
|
98
|
+
descendant scroll. The panel additionally becomes a flex COLUMN,
|
|
99
|
+
because `flex-1` on a screen inside it is inert against a block parent
|
|
100
|
+
— the same fact `AppShell`'s content column was changed for, one
|
|
101
|
+
landmark down.
|
|
102
|
+
|
|
103
|
+
The strip needs nothing: `list` already carries `shrink-0`, which is
|
|
104
|
+
exactly what stops a bounded column squashing the labels to make room
|
|
105
|
+
for the panel. */
|
|
106
|
+
fill: {
|
|
107
|
+
true: {
|
|
108
|
+
root: "min-h-0 flex-1",
|
|
109
|
+
panel: "flex min-h-0 flex-1 flex-col"
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
defaultVariants: { variant: "line", fill: !1 }
|
|
114
|
+
}), L = C(!1);
|
|
115
|
+
function D({ variant: e, fill: a = !1, className: s, children: o, ref: n, ...t }) {
|
|
116
|
+
const r = m({ variant: e, fill: a });
|
|
117
|
+
return /* @__PURE__ */ f(L, { value: a, children: /* @__PURE__ */ f(d.Root, { ref: n, className: u(r.root(), s), ...t, children: o }) });
|
|
118
|
+
}
|
|
119
|
+
const y = 48, N = 0.8;
|
|
120
|
+
function M(e) {
|
|
121
|
+
const [a, s] = W({ before: !1, after: !1 }), o = p(() => {
|
|
122
|
+
const t = e.current, r = t?.querySelector('[role="tab"][data-active]'), c = t?.querySelector('[role="presentation"]');
|
|
123
|
+
if (!t || !r || !c) return;
|
|
124
|
+
const i = r.getBoundingClientRect(), l = t.getBoundingClientRect();
|
|
125
|
+
c.style.setProperty("--active-tab-left", `${i.left - l.left + t.scrollLeft - t.clientLeft}px`), c.style.setProperty("--active-tab-width", `${i.width}px`);
|
|
126
|
+
}, [e]), n = p(() => {
|
|
127
|
+
const t = e.current;
|
|
128
|
+
if (!t) return;
|
|
129
|
+
const r = t.scrollLeft > 1, c = t.scrollLeft + t.clientWidth < t.scrollWidth - 1;
|
|
130
|
+
s((i) => i.before === r && i.after === c ? i : { before: r, after: c });
|
|
131
|
+
}, [e]);
|
|
132
|
+
return T(() => {
|
|
133
|
+
const t = e.current;
|
|
134
|
+
if (!t) return;
|
|
135
|
+
n(), t.addEventListener("scroll", n, { passive: !0 });
|
|
136
|
+
const r = new ResizeObserver(() => {
|
|
137
|
+
o(), n();
|
|
138
|
+
});
|
|
139
|
+
r.observe(t);
|
|
140
|
+
for (const i of Array.from(t.children)) r.observe(i);
|
|
141
|
+
const c = new MutationObserver(() => {
|
|
142
|
+
r.disconnect(), r.observe(t);
|
|
143
|
+
for (const i of Array.from(t.children)) r.observe(i);
|
|
144
|
+
n();
|
|
145
|
+
});
|
|
146
|
+
return c.observe(t, { childList: !0 }), () => {
|
|
147
|
+
t.removeEventListener("scroll", n), r.disconnect(), c.disconnect();
|
|
148
|
+
};
|
|
149
|
+
}, [e, n, o]), a;
|
|
150
|
+
}
|
|
151
|
+
const _ = "[mask-image:linear-gradient(to_right,transparent_0px,#000_calc(var(--tabs-fade-before)*1px),#000_calc(100%-var(--tabs-fade-after)*1px),transparent_100%)]";
|
|
152
|
+
function q({ before: e, after: a }) {
|
|
153
|
+
return {
|
|
154
|
+
"--tabs-fade-before": e ? y : 0,
|
|
155
|
+
"--tabs-fade-after": a ? y : 0
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function w(e) {
|
|
159
|
+
if (e.scrollWidth <= e.clientWidth) return;
|
|
160
|
+
const a = e.querySelector('[role="tab"][data-active]');
|
|
161
|
+
if (!a) return;
|
|
162
|
+
const s = 24, o = a.offsetLeft - e.clientLeft, n = o + a.offsetWidth, t = e.scrollLeft;
|
|
163
|
+
let r = t;
|
|
164
|
+
if (o - s < t) r = o - s;
|
|
165
|
+
else if (n + s > t + e.clientWidth) r = n + s - e.clientWidth;
|
|
166
|
+
else return;
|
|
167
|
+
r = Math.max(0, Math.min(r, e.scrollWidth - e.clientWidth)), !(Math.abs(r - t) < 1) && e.scrollTo({ left: r, behavior: A() ? "auto" : "smooth" });
|
|
168
|
+
}
|
|
169
|
+
function E(e) {
|
|
170
|
+
const a = e.querySelector('[role="presentation"]');
|
|
171
|
+
if (!a) return;
|
|
172
|
+
a.setAttribute("data-sliding", "");
|
|
173
|
+
const s = String(performance.now());
|
|
174
|
+
a.dataset.slidingToken = s, requestAnimationFrame(
|
|
175
|
+
() => requestAnimationFrame(() => {
|
|
176
|
+
const o = typeof a.getAnimations == "function" ? a.getAnimations() : [];
|
|
177
|
+
Promise.allSettled(o.map((n) => n.finished)).then(() => {
|
|
178
|
+
a.dataset.slidingToken === s && (a.removeAttribute("data-sliding"), delete a.dataset.slidingToken);
|
|
179
|
+
});
|
|
180
|
+
})
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
function V({ className: e, children: a, variant: s, scrollLabels: o }) {
|
|
184
|
+
const n = m({ variant: s }), t = S(null);
|
|
185
|
+
T(() => {
|
|
186
|
+
const i = t.current;
|
|
187
|
+
if (!i) return;
|
|
188
|
+
w(i);
|
|
189
|
+
const l = new MutationObserver(() => {
|
|
190
|
+
w(i), E(i);
|
|
191
|
+
});
|
|
192
|
+
return l.observe(i, {
|
|
193
|
+
subtree: !0,
|
|
194
|
+
attributes: !0,
|
|
195
|
+
attributeFilter: ["data-active"]
|
|
196
|
+
}), () => l.disconnect();
|
|
197
|
+
}, []);
|
|
198
|
+
const r = M(t), c = (i) => {
|
|
199
|
+
const l = t.current;
|
|
200
|
+
if (!l) return;
|
|
201
|
+
const v = l.scrollWidth - l.clientWidth, b = Math.max(0, Math.min(l.scrollLeft + i * l.clientWidth * N, v));
|
|
202
|
+
l.scrollTo({ left: b, behavior: A() ? "auto" : "smooth" }), (b <= 1 || b >= v - 1) && l.querySelector('[role="tab"][data-active]')?.focus({ preventScroll: !0 });
|
|
203
|
+
};
|
|
204
|
+
return /* @__PURE__ */ h(
|
|
205
|
+
"div",
|
|
206
|
+
{
|
|
207
|
+
"data-tabs-strip": "",
|
|
208
|
+
"data-overflow-before": r.before,
|
|
209
|
+
"data-overflow-after": r.after,
|
|
210
|
+
className: "relative min-w-0 shrink-0",
|
|
211
|
+
children: [
|
|
212
|
+
/* @__PURE__ */ h(d.List, { ref: t, className: u(n.list(), (r.before || r.after) && _, e), style: q(r), children: [
|
|
213
|
+
a,
|
|
214
|
+
/* @__PURE__ */ f(d.Indicator, { className: n.indicator() })
|
|
215
|
+
] }),
|
|
216
|
+
o && r.before && /* @__PURE__ */ f(
|
|
217
|
+
x,
|
|
218
|
+
{
|
|
219
|
+
label: o.before,
|
|
220
|
+
icon: /* @__PURE__ */ f(g, { name: "chevron-left", size: "sm" }),
|
|
221
|
+
variant: "ghost",
|
|
222
|
+
size: "sm",
|
|
223
|
+
onClick: () => c(-1),
|
|
224
|
+
className: "absolute top-1/2 left-0 z-20 -translate-y-1/2"
|
|
225
|
+
}
|
|
226
|
+
),
|
|
227
|
+
o && r.after && /* @__PURE__ */ f(
|
|
228
|
+
x,
|
|
229
|
+
{
|
|
230
|
+
label: o.after,
|
|
231
|
+
icon: /* @__PURE__ */ f(g, { name: "chevron-right", size: "sm" }),
|
|
232
|
+
variant: "ghost",
|
|
233
|
+
size: "sm",
|
|
234
|
+
onClick: () => c(1),
|
|
235
|
+
className: "absolute top-1/2 right-0 z-20 -translate-y-1/2"
|
|
236
|
+
}
|
|
237
|
+
)
|
|
238
|
+
]
|
|
239
|
+
}
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
function X({ className: e, children: a, variant: s, ref: o, ...n }) {
|
|
243
|
+
const t = m({ variant: s });
|
|
244
|
+
return /* @__PURE__ */ f(d.Tab, { ref: o, className: u(t.tab(), e), ...n, children: a });
|
|
245
|
+
}
|
|
246
|
+
function G({ className: e, children: a, ref: s, ...o }) {
|
|
247
|
+
const n = m({ fill: k(L) });
|
|
248
|
+
return /* @__PURE__ */ f(
|
|
249
|
+
d.Panel,
|
|
250
|
+
{
|
|
251
|
+
ref: s,
|
|
252
|
+
className: u(
|
|
253
|
+
n.panel(),
|
|
254
|
+
/* Content fades and rises a little on arrival. Deliberately subtle and
|
|
255
|
+
quick — a panel that makes an entrance every time you switch tabs
|
|
256
|
+
becomes tiring within a minute of real use. */
|
|
257
|
+
"data-starting-style:opacity-0 data-starting-style:translate-y-1",
|
|
258
|
+
/* THE EXIT IS NOT OPTIONAL, AND ITS ABSENCE WAS NOT COSMETIC.
|
|
259
|
+
|
|
260
|
+
Declaring a transition on a panel makes Base UI keep the OUTGOING one
|
|
261
|
+
mounted until that transition finishes. With only a starting style
|
|
262
|
+
declared there was nothing for the exit to animate: the leaving panel
|
|
263
|
+
sat at `opacity: 1` with `inert` and `data-ending-style` set, waiting
|
|
264
|
+
for a transition that would never run — so it never unmounted.
|
|
265
|
+
|
|
266
|
+
The symptom is not a missing fade. It is that PANELS ACCUMULATE: open
|
|
267
|
+
four tabs and all four are on screen at once, stacked, the inert ones
|
|
268
|
+
unreachable but fully painted. The tab list looks correct throughout,
|
|
269
|
+
which is what makes it read as a layout bug rather than a tab bug.
|
|
270
|
+
|
|
271
|
+
Found in a consuming app whose workspace has eight tabs, by opening
|
|
272
|
+
the page. Every test passed. */
|
|
273
|
+
"data-ending-style:opacity-0 data-ending-style:translate-y-1",
|
|
274
|
+
"transition-[var(--tx-colors),opacity,translate] duration-(--dur-base) ease-entrance",
|
|
275
|
+
e
|
|
276
|
+
),
|
|
277
|
+
...o,
|
|
278
|
+
children: a
|
|
279
|
+
}
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
export {
|
|
283
|
+
X as Tab,
|
|
284
|
+
V as TabList,
|
|
285
|
+
G as TabPanel,
|
|
286
|
+
D as Tabs
|
|
287
|
+
};
|
|
288
|
+
//# sourceMappingURL=Tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.js","sources":["../../src/components/Tabs.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useRef, useState, type ReactNode, type Ref } from \"react\";\nimport { Tabs as BaseTabs } from \"@base-ui/react/tabs\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"../lib/cn\";\nimport { reducedMotion } from \"../lib/motion\";\nimport { Icon } from \"./Icon\";\nimport { IconButton } from \"./IconButton\";\n\n/* ----------------------------------------------------------------------------\n TABS\n\n THE INDICATOR SLIDES. That is the whole point of having one: a bar that\n jumps between tabs tells you the selection changed, while a bar that travels\n tells you WHERE IT CAME FROM — which is what stops someone losing their\n place in a row of six. Base UI publishes the active tab's position and width\n as `--active-tab-left` / `--active-tab-width`, so the movement is two\n transitions on one absolutely-positioned element, not a measurement loop.\n\n The label does NOT change weight on selection. Bolding the active tab\n changes its width, which shoves every tab after it sideways and makes the\n indicator chase a moving target. Colour carries the state; the metrics stay\n still.\n -------------------------------------------------------------------------- */\n\nconst tabs = tv({\n slots: {\n root: \"flex min-w-0 flex-col gap-4\",\n /* A STRIP THAT OUTGROWS ITS CONTAINER SCROLLS ITSELF, and three of these\n utilities are what make that true rather than one.\n\n `overflow-x-auto` is the scroller. `min-w-0` is what lets the strip be\n narrower than the tabs inside it — a flex item's automatic minimum is its\n CONTENT, so without this the strip is floored at the full width of its\n tabs and pushes its parent wide instead of scrolling. `overscroll-x-contain`\n stops a trackpad fling that reaches the end of the strip from chaining\n into the page and scrolling the whole document sideways, which is the\n version of this bug that only appears on a laptop.\n\n `shrink-0` is about the OTHER axis and is not a contradiction. `Tabs`'\n root is a flex COLUMN, so shrink applies to height: inside a bounded\n column — a tabbed panel filling a fixed-height card — a strip without it\n gets squashed toward zero to make room for the panel, and the tab labels\n clip. Width is settled by `align-items: stretch` and `min-w-0` above,\n which `shrink-0` does not touch. */\n list: \"relative flex min-w-0 shrink-0 items-center gap-1 overflow-x-auto overscroll-x-contain\",\n /* z-10 / z-0: the indicator is a LATER DOM sibling than the tabs (see\n TabList), so with both at `z-auto` the indicator paints on top of the\n labels. `line` survives that by accident — its indicator is a 2px bar\n below the text. `pill`'s is a full-size opaque panel, and it covered the\n selected label completely. Ordering the two explicitly states the\n invariant the sibling structure depends on: the indicator is always\n BEHIND the label, whatever shape a variant gives it. */\n tab: [\n /* justify-center is inert until `dx-tap` widens a short label past its\n own padding on a touch pointer — without it that extra width all lands\n on the right and the label sits off-centre under its own indicator. */\n \"dx-tap relative z-10 flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap\",\n \"font-medium text-tertiary outline-none\",\n \"transition-colors duration-(--dur-fast) ease-hover\",\n \"hover:text-secondary\",\n /* `data-active`, NOT `data-selected`. Base UI marks the current tab with\n `data-active` (measured on the rendered DOM: the selected tab carries\n `data-active`, `aria-selected=\"true\"`, and no `data-selected` at all),\n so the rule written against `data-selected` matched nothing and the\n current tab's label sat at text-tertiary like every other. It looked\n right only because the indicator underneath it marks the selection —\n the same silent-dead-variant shape as the `data-side-top:` arrow rules,\n and equally invisible from the source. */\n \"data-active:text-primary\",\n /* Selected AND hovered holds full strength. The two rules above weigh\n the same, so pointing at the CURRENT tab could dim its label from\n primary to secondary — selection reading weaker under the pointer.\n\n A tab's hover is deliberately text-only: the tab paints ABOVE its own\n indicator (z-10 over z-0, see the note on `tab`), so a background on\n hover would cover the underline and the pill panel that mark it. */\n \"data-active:hover:text-primary\",\n \"data-disabled:pointer-events-none data-disabled:opacity-45\",\n ],\n indicator: [\n \"absolute z-0 rounded-full bg-accent\",\n \"translate-x-[var(--active-tab-left)] w-[var(--active-tab-width)]\",\n /* DX-4996: the slide is for a CHANGE OF SELECTION only. Colour always eases; position and width carry a transition only while `data-sliding`\n is set (TabList sets it for the length of a selection change), so a mark arriving, a resize, a font load or a first paint puts the\n indicator on the new geometry at once instead of travelling there from where the tab used to be. */\n \"transition-[var(--tx-colors)] duration-(--dur-slow) ease-emphasis\",\n \"data-sliding:transition-[var(--tx-colors),translate,width]\",\n ],\n panel: \"min-w-0 outline-none\",\n },\n variants: {\n variant: {\n /* Underline: the default. Reads as navigation within one surface. */\n line: {\n list: \"border-b border-border\",\n tab: \"px-3 py-2.5 text-sm\",\n indicator: \"bottom-0 left-0 h-0.5\",\n },\n /* Pill: for switching a view's mode, where the tabs are a control\n rather than a section header. */\n pill: {\n list: \"gap-1 rounded-lg bg-surface-inset p-1\",\n tab: \"rounded-md px-3 py-1.5 text-sm data-active:text-primary\",\n indicator: \"inset-y-1 left-0 rounded-md bg-surface shadow-sm\",\n },\n },\n /* FILLING THE HEIGHT THE GROUP WAS GIVEN — see `TabsProps.fill` for when\n to ask for it and why it is not the default.\n\n Two utilities on each of two slots, and all four are load-bearing.\n `flex-1` is what claims the free space; `min-h-0` is what lets the box\n be SHORTER than its content, without which a flex item's automatic\n minimum size is its content and the column grows instead of letting a\n descendant scroll. The panel additionally becomes a flex COLUMN,\n because `flex-1` on a screen inside it is inert against a block parent\n — the same fact `AppShell`'s content column was changed for, one\n landmark down.\n\n The strip needs nothing: `list` already carries `shrink-0`, which is\n exactly what stops a bounded column squashing the labels to make room\n for the panel. */\n fill: {\n true: {\n root: \"min-h-0 flex-1\",\n panel: \"flex min-h-0 flex-1 flex-col\",\n },\n },\n },\n defaultVariants: { variant: \"line\", fill: false },\n});\n\n/* The panel is a SEPARATE component from the group, and `fill` is a property\n of the group's box rather than of any one panel — so asking for it once on\n `Tabs` has to reach every `TabPanel` under it. A prop on each panel would\n let the two disagree, which is a state with no meaning: a group that fills\n its height and a panel inside it that does not is just the same auto-height\n break one level down. */\nconst FillContext = createContext(false);\n\nexport interface TabsProps\n extends Omit<BaseTabs.Root.Props, \"className\">,\n VariantProps<typeof tabs> {\n /**\n * Fill the height this group was given, instead of sizing to the content of\n * whichever panel is open.\n *\n * THIS IS THE SHAPE `AppShell` ASKS FOR AND A TABBED SCREEN COULD NOT GIVE.\n * The shell bounds the viewport and hands its content column a real height;\n * its own instruction to a screen that wants to use it is \"write `flex-1\n * min-h-0`, and never name a viewport unit\". A tabbed screen was the one\n * arrangement where that could not be honoured — the root here passes a\n * height DOWN (it is already a flex column) but claims none of its own, and\n * the panel below it is a plain block, so the two together are an\n * auto-height gap in the middle of an otherwise sound chain. The only way\n * through was for the content inside to name a fraction of the viewport,\n * which is precisely the arithmetic the shell exists to have ended.\n *\n * OPT-IN, AND THAT IS THE DESIGN RATHER THAN CAUTION. A tab group inside a\n * card is the ordinary case and must keep sizing to its content. It also\n * cannot be a default safely: a consumer rendering SEVERAL panels at once\n * (Base UI also keeps an OUTGOING panel mounted for the length of its exit\n * transition, so even a one-panel group briefly has two) would have them\n * split the same free space between them. Filling is a claim about the box\n * this group was handed, so the caller who knows that box is the one who\n * makes it.\n *\n * @default false\n */\n fill?: boolean;\n className?: string;\n ref?: Ref<HTMLDivElement>;\n}\n\nexport function Tabs({ variant, fill = false, className, children, ref, ...props }: TabsProps) {\n const s = tabs({ variant, fill });\n return (\n <FillContext value={fill}>\n <BaseTabs.Root ref={ref} className={cn(s.root(), className)} {...props}>\n {children}\n </BaseTabs.Root>\n </FillContext>\n );\n}\n\nexport interface TabListProps {\n className?: string;\n children: ReactNode;\n variant?: VariantProps<typeof tabs>[\"variant\"];\n /**\n * The words for the two scroll buttons a strip that overflows grows on the edge that has more tabs. DX-4973.\n *\n * ABSENT MEANS FADE ONLY. A strip wider than its box always fades its content out at the edge that has more (that is the cue, and it\n * needs no colour: it fades the tabs themselves, not a patch of the surface over them). The buttons are the part a keyboard or a\n * screen reader can act on, and the library has no default language, so the caller supplies what they say (\"Show earlier tabs\",\n * \"Show later tabs\") rather than the strip speaking English by itself. Pass them wherever a strip can overflow. A button shows\n * only on the edge that has more.\n */\n scrollLabels?: { before: string; after: string };\n}\n\n/** How wide the fade is, and how far a button press scrolls (a fraction of the visible strip, so a tab or two stays in view). */\nconst FADE_PX = 48;\nconst SCROLL_FRACTION = 0.8;\n\n/**\n * Which edges of a scrolling strip have more beyond them, kept current as it scrolls, is resized, or gains and loses tabs. DX-4973.\n * One pixel of slack, because `scrollLeft` is fractional on a scaled display and an end that reads 0.4px short is the end.\n */\nfunction useOverflowEdges(list: { current: HTMLElement | null }) {\n const [edges, setEdges] = useState({ before: false, after: false });\n\n /* DX-4996: Base UI re-measures the indicator when a tab resizes, but through a React state update that lands a task AFTER the resize\n observer fires - one painted frame with the underline where the tab used to be. Writing the same numbers from here, in the observer\n callback itself, closes that frame; Base UI's own render then writes identical values. */\n const syncIndicator = useCallback(() => {\n const el = list.current;\n const active = el?.querySelector<HTMLElement>('[role=\"tab\"][data-active]');\n const indicator = el?.querySelector<HTMLElement>('[role=\"presentation\"]');\n if (!el || !active || !indicator) return;\n const a = active.getBoundingClientRect();\n const l = el.getBoundingClientRect();\n indicator.style.setProperty(\"--active-tab-left\", `${a.left - l.left + el.scrollLeft - el.clientLeft}px`);\n indicator.style.setProperty(\"--active-tab-width\", `${a.width}px`);\n }, [list]);\n\n const measure = useCallback(() => {\n const el = list.current;\n if (!el) return;\n const before = el.scrollLeft > 1;\n const after = el.scrollLeft + el.clientWidth < el.scrollWidth - 1;\n setEdges((prev) => (prev.before === before && prev.after === after ? prev : { before, after }));\n }, [list]);\n\n useEffect(() => {\n const el = list.current;\n if (!el) return;\n measure();\n el.addEventListener(\"scroll\", measure, { passive: true });\n /* The strip's own box changing, and the box of every tab changing (a longer label, a tab added), are both reasons the answer moved. */\n const resize = new ResizeObserver(() => {\n syncIndicator();\n measure();\n });\n resize.observe(el);\n for (const child of Array.from(el.children)) resize.observe(child);\n const mutation = new MutationObserver(() => {\n resize.disconnect();\n resize.observe(el);\n for (const child of Array.from(el.children)) resize.observe(child);\n measure();\n });\n mutation.observe(el, { childList: true });\n return () => {\n el.removeEventListener(\"scroll\", measure);\n resize.disconnect();\n mutation.disconnect();\n };\n }, [list, measure, syncIndicator]);\n\n return edges;\n}\n\n/* Fade the strip's own content out where there is more: a mask, so the colour behind the tabs is never needed. The two widths are custom\n properties (pixels, unitless, 0 on an edge with nothing beyond it) read by one class, so the same rule serves every combination of edges. */\nconst FADE_CLASS =\n \"[mask-image:linear-gradient(to_right,transparent_0px,#000_calc(var(--tabs-fade-before)*1px),#000_calc(100%-var(--tabs-fade-after)*1px),transparent_100%)]\";\n\nfunction fadeStyle({ before, after }: { before: boolean; after: boolean }) {\n return {\n \"--tabs-fade-before\": before ? FADE_PX : 0,\n \"--tabs-fade-after\": after ? FADE_PX : 0,\n } as React.CSSProperties;\n}\n\n/**\n * Bring the selected tab inside the strip's own scroll window.\n *\n * A STRIP THAT SCROLLS BUT STRANDS THE SELECTION IS WORSE THAN ONE THAT\n * OVERFLOWS. Overflowing at least leaves the selected tab somewhere on the\n * page; a scroller leaves it clipped, with the indicator — the whole mechanism\n * for showing where the selection went — sliding to a position nobody can see.\n * The strip has to follow the selection, and it has to do it on every route\n * that changes the value, not only on the click that a browser would have\n * scrolled focus for anyway.\n *\n * `offsetLeft`, NOT `getBoundingClientRect`. The strip is `relative`, so a\n * tab's `offsetParent` IS the strip and `offsetLeft` is already in the\n * scroller's own coordinate space — the same space `scrollLeft` is written in.\n * A client rect would be in viewport coordinates and would have to be\n * corrected by the strip's own position and current scroll, which is the same\n * arithmetic done twice with a chance to get it wrong. `clientLeft` is\n * subtracted because a border sits outside that space.\n *\n * `scrollTo` ON THE STRIP, NEVER `scrollIntoView`. `scrollIntoView` walks every\n * scrollable ancestor, so revealing a tab can scroll the page under the reader\n * — and on a tabbed panel inside a dialog it moves the dialog too.\n */\nfunction revealActiveTab(list: HTMLElement): void {\n if (list.scrollWidth <= list.clientWidth) return;\n\n const active = list.querySelector<HTMLElement>('[role=\"tab\"][data-active]');\n if (!active) return;\n\n /* A sliver of the neighbouring tab stays visible, so the strip reads as\n \"there is more this way\" rather than as a strip that happens to end. */\n const peek = 24;\n const left = active.offsetLeft - list.clientLeft;\n const right = left + active.offsetWidth;\n const from = list.scrollLeft;\n\n let to = from;\n if (left - peek < from) to = left - peek;\n else if (right + peek > from + list.clientWidth) to = right + peek - list.clientWidth;\n else return;\n\n to = Math.max(0, Math.min(to, list.scrollWidth - list.clientWidth));\n if (Math.abs(to - from) < 1) return;\n\n /* Smooth, unless the reader asked for less. A programmatic scroll is exactly\n the vestibular trigger the preference exists for, and unlike a transition\n it has no reduced version — it is a glide or it is a jump. */\n list.scrollTo({ left: to, behavior: reducedMotion() ? \"auto\" : \"smooth\" });\n}\n\n/**\n * Let the indicator travel for this selection change, then stop it travelling. DX-4996.\n *\n * THE SLIDE TELLS YOU WHERE THE SELECTION CAME FROM, which only a change of selection has to say. The same transition on a layout change\n * made the underline glide for ~300ms every time a health mark widened an earlier tab, and sit visibly under the wrong tab to anything\n * that looked in that window (a screenshot, a hidden document whose animation clock is stopped). So the transition is opt-in per\n * selection: `data-sliding` goes on before the browser styles the new position (this runs in the mutation microtask, ahead of the next\n * style pass) and comes off once the transitions it started have finished or been cancelled.\n *\n * Cleared after two frames by what is actually running (`getAnimations`) rather than by a timer, so it matches the real duration, and a\n * reduced-motion zero duration (nothing running) clears at once.\n */\nfunction slideIndicator(list: HTMLElement): void {\n const indicator = list.querySelector<HTMLElement>('[role=\"presentation\"]');\n if (!indicator) return;\n indicator.setAttribute(\"data-sliding\", \"\");\n const token = String(performance.now());\n indicator.dataset.slidingToken = token;\n requestAnimationFrame(() =>\n requestAnimationFrame(() => {\n const running = typeof indicator.getAnimations === \"function\" ? indicator.getAnimations() : [];\n void Promise.allSettled(running.map((a) => a.finished)).then(() => {\n if (indicator.dataset.slidingToken !== token) return; // a newer selection change owns the flag now\n indicator.removeAttribute(\"data-sliding\");\n delete indicator.dataset.slidingToken;\n });\n }),\n );\n}\n\nexport function TabList({ className, children, variant, scrollLabels }: TabListProps) {\n const s = tabs({ variant });\n const list = useRef<HTMLDivElement | null>(null);\n\n /* WATCHED ON THE DOM RATHER THAN ON A VALUE, because this component is not\n given one. `TabList` renders whatever tabs it is handed and Base UI owns\n the selection, so the honest observable is the attribute Base UI writes —\n and observing it covers every route into a change at once: a click, an\n arrow key, and a consumer setting `value` from somewhere else entirely.\n A `value` prop threaded down here would only cover the third. */\n useEffect(() => {\n const el = list.current;\n if (!el) return;\n /* Once on mount as well: a strip whose selected tab starts off-screen is\n the same defect, arrived at without any change to observe. */\n revealActiveTab(el);\n const observer = new MutationObserver(() => {\n revealActiveTab(el);\n slideIndicator(el);\n });\n observer.observe(el, {\n subtree: true,\n attributes: true,\n attributeFilter: [\"data-active\"],\n });\n return () => observer.disconnect();\n }, []);\n\n const edges = useOverflowEdges(list);\n\n /* Scroll toward an edge by most of a strip. When that press reaches the end, the button is about to leave the DOM, and a focused\n element that leaves drops focus to the page: hand it to the selected tab first. */\n const scrollToward = (direction: 1 | -1) => {\n const el = list.current;\n if (!el) return;\n const max = el.scrollWidth - el.clientWidth;\n const to = Math.max(0, Math.min(el.scrollLeft + direction * el.clientWidth * SCROLL_FRACTION, max));\n el.scrollTo({ left: to, behavior: reducedMotion() ? \"auto\" : \"smooth\" });\n if (to <= 1 || to >= max - 1) el.querySelector<HTMLElement>('[role=\"tab\"][data-active]')?.focus({ preventScroll: true });\n };\n\n return (\n <div\n data-tabs-strip=\"\"\n data-overflow-before={edges.before}\n data-overflow-after={edges.after}\n className=\"relative min-w-0 shrink-0\"\n >\n <BaseTabs.List ref={list} className={cn(s.list(), (edges.before || edges.after) && FADE_CLASS, className)} style={fadeStyle(edges)}>\n {children}\n {/* The indicator is a SIBLING of the tabs, not a child of the selected\n one — a child would be destroyed and recreated on every change, which\n is exactly what makes an indicator jump instead of travel. */}\n <BaseTabs.Indicator className={s.indicator()} />\n </BaseTabs.List>\n {/* Outside the list, so the tablist holds tabs and nothing else, and over the faded edge, where the fade says there is more. */}\n {scrollLabels && edges.before && (\n <IconButton\n label={scrollLabels.before}\n icon={<Icon name=\"chevron-left\" size=\"sm\" />}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => scrollToward(-1)}\n className=\"absolute top-1/2 left-0 z-20 -translate-y-1/2\"\n />\n )}\n {scrollLabels && edges.after && (\n <IconButton\n label={scrollLabels.after}\n icon={<Icon name=\"chevron-right\" size=\"sm\" />}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => scrollToward(1)}\n className=\"absolute top-1/2 right-0 z-20 -translate-y-1/2\"\n />\n )}\n </div>\n );\n}\n\nexport interface TabProps extends Omit<BaseTabs.Tab.Props, \"className\"> {\n className?: string;\n variant?: VariantProps<typeof tabs>[\"variant\"];\n ref?: Ref<HTMLButtonElement>;\n}\n\nexport function Tab({ className, children, variant, ref, ...props }: TabProps) {\n const s = tabs({ variant });\n return (\n <BaseTabs.Tab ref={ref} className={cn(s.tab(), className)} {...props}>\n {children}\n </BaseTabs.Tab>\n );\n}\n\nexport interface TabPanelProps extends Omit<BaseTabs.Panel.Props, \"className\"> {\n className?: string;\n ref?: Ref<HTMLDivElement>;\n}\n\nexport function TabPanel({ className, children, ref, ...props }: TabPanelProps) {\n /* From the GROUP, never from a prop here — see `FillContext`. */\n const s = tabs({ fill: useContext(FillContext) });\n return (\n <BaseTabs.Panel\n ref={ref}\n className={cn(\n s.panel(),\n /* Content fades and rises a little on arrival. Deliberately subtle and\n quick — a panel that makes an entrance every time you switch tabs\n becomes tiring within a minute of real use. */\n \"data-starting-style:opacity-0 data-starting-style:translate-y-1\",\n /* THE EXIT IS NOT OPTIONAL, AND ITS ABSENCE WAS NOT COSMETIC.\n\n Declaring a transition on a panel makes Base UI keep the OUTGOING one\n mounted until that transition finishes. With only a starting style\n declared there was nothing for the exit to animate: the leaving panel\n sat at `opacity: 1` with `inert` and `data-ending-style` set, waiting\n for a transition that would never run — so it never unmounted.\n\n The symptom is not a missing fade. It is that PANELS ACCUMULATE: open\n four tabs and all four are on screen at once, stacked, the inert ones\n unreachable but fully painted. The tab list looks correct throughout,\n which is what makes it read as a layout bug rather than a tab bug.\n\n Found in a consuming app whose workspace has eight tabs, by opening\n the page. Every test passed. */\n \"data-ending-style:opacity-0 data-ending-style:translate-y-1\",\n \"transition-[var(--tx-colors),opacity,translate] duration-(--dur-base) ease-entrance\",\n className,\n )}\n {...props}\n >\n {children}\n </BaseTabs.Panel>\n );\n}\n"],"names":["tabs","tv","FillContext","createContext","Tabs","variant","fill","className","children","ref","props","s","jsx","BaseTabs","cn","FADE_PX","SCROLL_FRACTION","useOverflowEdges","list","edges","setEdges","useState","syncIndicator","useCallback","el","active","indicator","a","measure","before","after","prev","useEffect","resize","child","mutation","FADE_CLASS","fadeStyle","revealActiveTab","peek","left","right","from","to","reducedMotion","slideIndicator","token","running","TabList","scrollLabels","useRef","observer","scrollToward","direction","max","jsxs","IconButton","Icon","Tab","TabPanel","useContext"],"mappings":"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"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { jsx as a, jsxs as s } from "react/jsx-runtime";
|
|
2
|
+
import { Button as v } from "./Button.js";
|
|
3
|
+
import { Callout as C } from "./Callout.js";
|
|
4
|
+
import { Icon as h } from "./Icon.js";
|
|
5
|
+
import { Popover as S } from "./Popover.js";
|
|
6
|
+
import { Slider as k } from "./Slider.js";
|
|
7
|
+
import { Switch as w } from "./Choice.js";
|
|
8
|
+
import { useTheme as p, useUiScale as M, useContrast as R, useMotionPreference as z } from "../lib/preferences.js";
|
|
9
|
+
import { useReducedMotion as E, OS_REDUCE as I } from "../lib/motion.js";
|
|
10
|
+
import { useMediaQuery as T } from "../lib/use-media-query.js";
|
|
11
|
+
import { reducedMotionHelp as j, detectPlatform as H } from "../lib/reduced-motion-help.js";
|
|
12
|
+
import { useUiStrings as d } from "../lib/i18n/provider.js";
|
|
13
|
+
const l = ["sm", "md", "lg"], P = ["system", "full", "reduced"];
|
|
14
|
+
function A(e, r, n) {
|
|
15
|
+
return r === "full" ? e.full : r === "reduced" ? e.reduced : n ? e.systemReduced : e.systemFull;
|
|
16
|
+
}
|
|
17
|
+
function O() {
|
|
18
|
+
const e = d().themeMenu, r = j(
|
|
19
|
+
H(navigator),
|
|
20
|
+
e.osSteps
|
|
21
|
+
);
|
|
22
|
+
return /* @__PURE__ */ s(
|
|
23
|
+
C,
|
|
24
|
+
{
|
|
25
|
+
tone: "warning",
|
|
26
|
+
title: e.systemReducesTitle,
|
|
27
|
+
"data-motion-os-help": r.platform,
|
|
28
|
+
children: [
|
|
29
|
+
/* @__PURE__ */ a("p", { children: r.href ? /* @__PURE__ */ a("a", { href: r.href, className: "font-medium text-accent-text underline underline-offset-2", children: r.steps }) : r.steps }),
|
|
30
|
+
/* @__PURE__ */ a("p", { children: e.systemReducesAdvice })
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
const U = { sm: "0.85rem", md: "1.05rem", lg: "1.3rem" };
|
|
36
|
+
function L({
|
|
37
|
+
label: e,
|
|
38
|
+
hint: r,
|
|
39
|
+
control: n
|
|
40
|
+
}) {
|
|
41
|
+
return /* @__PURE__ */ s("div", { className: "flex items-center justify-between gap-4", children: [
|
|
42
|
+
/* @__PURE__ */ s("span", { className: "flex min-w-0 flex-col gap-0.5", children: [
|
|
43
|
+
/* @__PURE__ */ a("span", { className: "text-sm font-medium text-primary", children: e }),
|
|
44
|
+
r && /* @__PURE__ */ a("span", { className: "text-2xs text-tertiary text-pretty", children: r })
|
|
45
|
+
] }),
|
|
46
|
+
n
|
|
47
|
+
] });
|
|
48
|
+
}
|
|
49
|
+
function V(e) {
|
|
50
|
+
return e === "dark" ? "moon" : "sun";
|
|
51
|
+
}
|
|
52
|
+
function Z({ className: e, triggerClassName: r, iconOnly: n = !1 }) {
|
|
53
|
+
const i = d().themeMenu, { theme: m } = p();
|
|
54
|
+
return /* @__PURE__ */ a(
|
|
55
|
+
S,
|
|
56
|
+
{
|
|
57
|
+
align: "end",
|
|
58
|
+
width: "calc(20rem*var(--ui-scale))",
|
|
59
|
+
className: e,
|
|
60
|
+
trigger: /* @__PURE__ */ s(
|
|
61
|
+
v,
|
|
62
|
+
{
|
|
63
|
+
size: "sm",
|
|
64
|
+
variant: n ? "ghost" : "outline",
|
|
65
|
+
iconOnly: n,
|
|
66
|
+
className: r,
|
|
67
|
+
"aria-label": i.triggerLabel,
|
|
68
|
+
children: [
|
|
69
|
+
/* @__PURE__ */ a(h, { name: V(m), size: "sm" }),
|
|
70
|
+
!n && /* @__PURE__ */ a("span", { className: "hidden sm:inline", children: i.appearance })
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
),
|
|
74
|
+
children: /* @__PURE__ */ a(_, {})
|
|
75
|
+
}
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
function _() {
|
|
79
|
+
const e = d().themeMenu, { theme: r, setTheme: n } = p(), { scale: i, setScale: m } = M(), { contrast: x, setContrast: g } = R(), { motion: c, setMotion: b } = z(), u = E(), y = T(I), N = l.indexOf(i);
|
|
80
|
+
return /* @__PURE__ */ s("div", { "data-theme-menu-panel": "", className: "flex w-full min-w-0 flex-col gap-5", children: [
|
|
81
|
+
/* @__PURE__ */ s("div", { className: "flex flex-col gap-2.5", children: [
|
|
82
|
+
/* @__PURE__ */ a("span", { className: "text-2xs font-semibold tracking-widest text-tertiary uppercase", children: e.theme }),
|
|
83
|
+
/* @__PURE__ */ a(
|
|
84
|
+
"div",
|
|
85
|
+
{
|
|
86
|
+
role: "radiogroup",
|
|
87
|
+
"aria-label": e.theme,
|
|
88
|
+
className: "flex gap-1 rounded-lg bg-surface-inset p-1",
|
|
89
|
+
children: ["light", "dark"].map((t) => /* @__PURE__ */ s(
|
|
90
|
+
"button",
|
|
91
|
+
{
|
|
92
|
+
type: "button",
|
|
93
|
+
role: "radio",
|
|
94
|
+
"aria-checked": r === t,
|
|
95
|
+
onClick: () => n(t),
|
|
96
|
+
className: f(r === t),
|
|
97
|
+
children: [
|
|
98
|
+
/* @__PURE__ */ a(h, { name: t === "dark" ? "moon" : "sun", size: "sm" }),
|
|
99
|
+
e.themes[t]
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
t
|
|
103
|
+
))
|
|
104
|
+
}
|
|
105
|
+
)
|
|
106
|
+
] }),
|
|
107
|
+
/* @__PURE__ */ s("div", { className: "flex flex-col gap-2", children: [
|
|
108
|
+
/* @__PURE__ */ a("span", { className: "text-2xs font-semibold tracking-widest text-tertiary uppercase", children: e.textSize }),
|
|
109
|
+
/* @__PURE__ */ s("div", { className: "px-[calc(var(--spacing)*2.75)]", children: [
|
|
110
|
+
/* @__PURE__ */ a("div", { className: "relative h-5 select-none", "aria-hidden": !0, children: l.map((t, o) => /* @__PURE__ */ a(
|
|
111
|
+
"span",
|
|
112
|
+
{
|
|
113
|
+
className: i === t ? "absolute bottom-0 -translate-x-1/2 font-display leading-none text-accent-text" : "absolute bottom-0 -translate-x-1/2 font-display leading-none text-tertiary",
|
|
114
|
+
style: {
|
|
115
|
+
left: `${o / (l.length - 1) * 100}%`,
|
|
116
|
+
fontSize: U[t],
|
|
117
|
+
/* `translate`, not `transform` — same Tailwind v4 property as
|
|
118
|
+
the Slider's own extreme labels. */
|
|
119
|
+
...o === 0 ? { translate: "none", left: 0 } : {},
|
|
120
|
+
...o === l.length - 1 ? { translate: "none", left: "auto", right: 0 } : {}
|
|
121
|
+
},
|
|
122
|
+
children: "Aa"
|
|
123
|
+
},
|
|
124
|
+
t
|
|
125
|
+
)) }),
|
|
126
|
+
/* @__PURE__ */ a(
|
|
127
|
+
k,
|
|
128
|
+
{
|
|
129
|
+
"aria-label": e.textSize,
|
|
130
|
+
min: 0,
|
|
131
|
+
max: 2,
|
|
132
|
+
step: 1,
|
|
133
|
+
value: N,
|
|
134
|
+
onValueChange: (t) => m(l[Number(t)]),
|
|
135
|
+
showValue: !1,
|
|
136
|
+
tooltip: "never",
|
|
137
|
+
marks: l.map((t, o) => ({ value: o, label: e.scales[t] })),
|
|
138
|
+
format: (t) => e.scales[l[t]]
|
|
139
|
+
}
|
|
140
|
+
)
|
|
141
|
+
] })
|
|
142
|
+
] }),
|
|
143
|
+
/* @__PURE__ */ a("div", { className: "flex flex-col gap-3.5 border-t border-border-subtle pt-4", children: /* @__PURE__ */ a(
|
|
144
|
+
L,
|
|
145
|
+
{
|
|
146
|
+
label: e.highContrast,
|
|
147
|
+
hint: e.highContrastHint,
|
|
148
|
+
control: /* @__PURE__ */ a(
|
|
149
|
+
w,
|
|
150
|
+
{
|
|
151
|
+
checked: x === "aa",
|
|
152
|
+
onCheckedChange: (t) => g(t ? "aa" : "design"),
|
|
153
|
+
"aria-label": e.highContrast
|
|
154
|
+
}
|
|
155
|
+
)
|
|
156
|
+
}
|
|
157
|
+
) }),
|
|
158
|
+
/* @__PURE__ */ s("div", { className: "flex flex-col gap-2.5", children: [
|
|
159
|
+
/* @__PURE__ */ a("span", { className: "text-2xs font-semibold tracking-widest text-tertiary uppercase", children: e.motion }),
|
|
160
|
+
/* @__PURE__ */ a(
|
|
161
|
+
"div",
|
|
162
|
+
{
|
|
163
|
+
role: "radiogroup",
|
|
164
|
+
"aria-label": e.motion,
|
|
165
|
+
className: "flex gap-1 rounded-lg bg-surface-inset p-1",
|
|
166
|
+
children: P.map((t) => /* @__PURE__ */ a(
|
|
167
|
+
"button",
|
|
168
|
+
{
|
|
169
|
+
type: "button",
|
|
170
|
+
role: "radio",
|
|
171
|
+
"aria-checked": c === t,
|
|
172
|
+
onClick: () => b(t),
|
|
173
|
+
className: f(c === t),
|
|
174
|
+
children: e.motionChoices[t]
|
|
175
|
+
},
|
|
176
|
+
t
|
|
177
|
+
))
|
|
178
|
+
}
|
|
179
|
+
),
|
|
180
|
+
/* @__PURE__ */ a("p", { "data-motion-effective": u ? "reduced" : "full", className: "text-2xs text-tertiary text-pretty", children: A(e.motionHint, c, u) }),
|
|
181
|
+
y && c === "system" && /* @__PURE__ */ a(O, {})
|
|
182
|
+
] })
|
|
183
|
+
] });
|
|
184
|
+
}
|
|
185
|
+
function f(e) {
|
|
186
|
+
return [
|
|
187
|
+
"dx-tap flex flex-1 items-center justify-center gap-2 rounded-md px-3 py-2",
|
|
188
|
+
"text-sm font-medium",
|
|
189
|
+
"transition-[var(--tx-colors),box-shadow] duration-(--dur-fast) ease-hover",
|
|
190
|
+
e ? "bg-surface text-primary shadow-sm" : "text-tertiary hover:text-secondary"
|
|
191
|
+
].join(" ");
|
|
192
|
+
}
|
|
193
|
+
export {
|
|
194
|
+
Z as ThemeMenu,
|
|
195
|
+
_ as ThemePanel,
|
|
196
|
+
V as themeIcon
|
|
197
|
+
};
|
|
198
|
+
//# sourceMappingURL=ThemeMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeMenu.js","sources":["../../src/components/ThemeMenu.tsx"],"sourcesContent":["import { useUiStrings, type UiStrings } from \"../lib/i18n\";\nimport { Button } from \"./Button\";\nimport { Callout } from \"./Callout\";\nimport { Icon, type IconName } from \"./Icon\";\nimport { Popover } from \"./Popover\";\nimport { Slider } from \"./Slider\";\nimport { Switch } from \"./Choice\";\nimport {\n useTheme,\n useUiScale,\n useContrast,\n useMotionPreference,\n} from \"../lib/preferences\";\nimport { OS_REDUCE, useReducedMotion } from \"../lib/motion\";\nimport { useMediaQuery } from \"../lib/use-media-query\";\nimport { detectPlatform, reducedMotionHelp } from \"../lib/reduced-motion-help\";\nimport type { MotionPreference, Theme, UiScale } from \"../lib/preference-values\";\n\n/* ============================================================================\n THEME MENU — every display preference behind one control.\n\n These four settings were four separate buttons in the header, which is the\n arrangement that seems obvious right up until you count them. They are all\n answers to the same question — \"how should this look for me?\" — and a person\n adjusting one very often wants to adjust another. Four buttons make that\n four separate hunts across a crowded header; one popover makes it one place\n you learn once.\n\n Scale is a SLIDER rather than three buttons because it is an ordered\n quantity, and a slider is the control that says so. The specimen row above\n it previews the actual sizes, so the choice is visible before it is made.\n\n THIS COMPONENT OWNS TWO BOXES, AND ONLY ONE OF THEM CAN BE `className`.\n\n It supplies both the trigger and the popup, which is the arrangement that\n makes a single `className` ambiguous — and it resolved the ambiguity in the\n direction a caller does not expect, because `Popover` puts `className` on the\n POPUP. For a while that was the only styling prop here, so the one prop that\n existed went somewhere invisible and nothing reached the button at all.\n\n The fix is not to move `className` — a consumer sizes the panel with it, and\n quietly repointing a prop is a breaking change that no version number would\n admit to. It is to name the second box: `triggerClassName`, exactly as\n `Collapsible` already does for the same reason.\n\n And a class is the WRONG tool for the case that prompted this anyway. Making\n the trigger icon-only from outside means re-deriving `Button`'s square box by\n hand AND out-specifying the label's `hidden sm:inline` with an `!` — a copy\n of two internal decisions that will drift the first time either moves. So\n `iconOnly` is a MODE: it forwards `Button`'s own `iconOnly` variant and drops\n the label from the tree, and the accessible name never depended on the\n visible text in the first place.\n ========================================================================= */\n\nconst SCALES: UiScale[] = [\"sm\", \"md\", \"lg\"];\nconst MOTION_CHOICES: MotionPreference[] = [\"system\", \"full\", \"reduced\"];\n\n/** What the motion choice means right now, including what \"System\" resolved to. */\nfunction motionHint(hints: UiStrings[\"themeMenu\"][\"motionHint\"], motion: MotionPreference, reduced: boolean): string {\n if (motion === \"full\") return hints.full;\n if (motion === \"reduced\") return hints.reduced;\n return reduced ? hints.systemReduced : hints.systemFull;\n}\n\n/* DX-4504 - the warning, and the way out, for the OS this runs on. Shown only while the choice is System: under\n Full the animations run, and under Reduced the person asked for exactly this. Live through the media query's\n `change` event (`useMediaQuery`), so switching the OS setting back updates the open menu. */\nfunction SystemReducesMotion() {\n const strings = useUiStrings().themeMenu;\n const help = reducedMotionHelp(\n detectPlatform(navigator as Navigator & { userAgentData?: { platform?: string } }),\n strings.osSteps,\n );\n return (\n <Callout\n tone=\"warning\"\n title={strings.systemReducesTitle}\n data-motion-os-help={help.platform}\n >\n <p>\n {help.href ? (\n <a href={help.href} className=\"font-medium text-accent-text underline underline-offset-2\">\n {help.steps}\n </a>\n ) : (\n help.steps\n )}\n </p>\n <p>{strings.systemReducesAdvice}</p>\n </Callout>\n );\n}\n/* Fixed px on purpose: sized by the scale token, all three specimens would\n move together and always look identical no matter which is selected. */\nconst SPECIMEN: Record<UiScale, string> = { sm: \"0.85rem\", md: \"1.05rem\", lg: \"1.3rem\" };\n\nfunction Setting({\n label,\n hint,\n control,\n}: {\n label: string;\n hint?: string;\n control: React.ReactNode;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-4\">\n <span className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"text-sm font-medium text-primary\">{label}</span>\n {hint && <span className=\"text-2xs text-tertiary text-pretty\">{hint}</span>}\n </span>\n {control}\n </div>\n );\n}\n\nexport interface ThemeMenuProps {\n /**\n * Restyles the POPUP, not the trigger — see `triggerClassName` below.\n *\n * Stated rather than left to be discovered, because the discovery is\n * expensive and has already been made once. This is the only styling prop\n * this component had, `Popover` forwards it to `Popover.Popup`, and a caller\n * reaching for \"the class that styles this component\" reasonably expects it\n * on the button they can see. It is kept where it is because a consumer sizes\n * the panel with it; moving it would be a silent breaking change wearing a\n * bug fix's clothes.\n */\n className?: string;\n /**\n * Restyles the TRIGGER.\n *\n * Named after `Collapsible.triggerClassName`, which exists for exactly this\n * situation one component over: a component that supplies its own trigger has\n * two boxes a caller might mean, and only one of them can have `className`.\n * Prefer `iconOnly` below when the goal is the icon-only shape — that is a\n * MODE this component knows how to enter, and re-drawing it from classes\n * means re-deriving `Button`'s square box by hand.\n */\n triggerClassName?: string;\n /**\n * Drop the \"Appearance\" label and render the trigger as a square icon button.\n *\n * Named after `Button.iconOnly`, which is the variant it forwards to — the\n * width is pinned to the control height there, so the hit area stays square\n * and can never fall below the tap minimum.\n *\n * WHY A MODE AND NOT A CLASS. The label is `hidden sm:inline`: present from\n * 640px up, which is most screens the app runs on. So \"make it icon-only\"\n * from the outside means a descendant selector plus an `!` to out-specify a\n * responsive rule, next to a hand-copy of `Button`'s `px-0 aspect-square` —\n * which is what the consuming app that reported this shipped, and which\n * drifts the moment either of those changes here. The mode removes the label\n * from the tree instead of fighting a media query for it.\n *\n * The accessible name is unaffected: `aria-label=\"Appearance settings\"` is on\n * the button in both modes, and it is what a screen reader announces either\n * way — the visible text was never the name.\n */\n iconOnly?: boolean;\n}\n\n/** The glyph of the Appearance button: the sun in the light theme, the moon in the dark. A folded account-menu entry draws the same one. */\nexport function themeIcon(theme: Theme): IconName {\n return theme === \"dark\" ? \"moon\" : \"sun\";\n}\n\nexport function ThemeMenu({ className, triggerClassName, iconOnly = false }: ThemeMenuProps) {\n const strings = useUiStrings().themeMenu;\n const { theme } = useTheme();\n\n return (\n <Popover\n align=\"end\"\n width=\"calc(20rem*var(--ui-scale))\"\n className={className}\n trigger={\n <Button\n size=\"sm\"\n variant={iconOnly ? \"ghost\" : \"outline\"}\n iconOnly={iconOnly}\n className={triggerClassName}\n aria-label={strings.triggerLabel}\n >\n <Icon name={themeIcon(theme)} size=\"sm\" />\n {/* Not rendered, rather than hidden — see `iconOnly`. `hidden\n sm:inline` is a RESPONSIVE rule, so hiding it from outside means\n out-specifying a media query; not rendering it costs nothing and\n cannot be undone by a breakpoint. */}\n {!iconOnly && <span className=\"hidden sm:inline\">{strings.appearance}</span>}\n </Button>\n }\n >\n {/* DX-4086 — the design width lives on the popup (`width` below), which renders at\n exactly that width capped by the clamp (Popover.tsx), so the panel just fills it. */}\n <ThemePanel />\n </Popover>\n );\n}\n\n/**\n * DX-5319 - the Appearance popup's body on its own: theme, text size, contrast, motion. `ThemeMenu` draws it in its popover;\n * an app whose header folded the Appearance button into the account menu (`useHeaderFold`) has no trigger left to anchor a popover\n * to, so it draws this same panel in a `Dialog`. One body, two containers.\n */\nexport function ThemePanel() {\n const strings = useUiStrings().themeMenu;\n const { theme, setTheme } = useTheme();\n const { scale, setScale } = useUiScale();\n const { contrast, setContrast } = useContrast();\n const { motion, setMotion } = useMotionPreference();\n const reduced = useReducedMotion();\n const osReduces = useMediaQuery(OS_REDUCE);\n\n const scaleIndex = SCALES.indexOf(scale);\n\n return (\n <div data-theme-menu-panel=\"\" className=\"flex w-full min-w-0 flex-col gap-5\">\n <div className=\"flex flex-col gap-2.5\">\n <span className=\"text-2xs font-semibold tracking-widest text-tertiary uppercase\">\n {strings.theme}\n </span>\n {/* A segmented control rather than a switch: these are two named\n choices, not an on/off state, and \"dark mode: off\" is a worse\n description of \"light\" than \"light\" is. */}\n <div\n role=\"radiogroup\"\n aria-label={strings.theme}\n className=\"flex gap-1 rounded-lg bg-surface-inset p-1\"\n >\n {([\"light\", \"dark\"] as Theme[]).map((option) => (\n <button\n key={option}\n type=\"button\"\n role=\"radio\"\n aria-checked={theme === option}\n onClick={() => setTheme(option)}\n className={cnRadio(theme === option)}\n >\n <Icon name={option === \"dark\" ? \"moon\" : \"sun\"} size=\"sm\" />\n {strings.themes[option]}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <span className=\"text-2xs font-semibold tracking-widest text-tertiary uppercase\">\n {strings.textSize}\n </span>\n {/* The specimens sit ABOVE the slider, aligned to its stops, so the\n scale reads as a preview strip rather than three abstract steps.\n\n POSITIONED THE SAME WAY THE SLIDER'S MARKS ARE, and for the same\n reason they have to be: the marks are absolutely placed at\n 0% / 50% / 100% and centred on their ticks, so anything laid out\n by BOX EDGES cannot agree with them. `justify-between` did exactly\n that — it pins the outer edges while the marks pin centres, so the\n two rows drifted by 10, 4 and 14px, and the gap GREW with the\n specimen font-size spread because bigger boxes push their own\n edges further out. Deriving both rows from the same percentages\n makes them agree at any size. */}\n {/* DX-3785 — `px-[calc(var(--spacing)*2.75)]` insets BOTH rows below\n by (a bit more than) half of the Slider's (default `md`) thumb\n diameter at its LARGEST rendered size. The thumb is centred on\n its 0%/100% stops, so at either end part of it draws OUTSIDE the\n track it is percent-positioned against — by design, every\n slider in this library does this, and it is normally invisible\n because whatever contains the slider has side padding wider\n than a half-thumb. This popover's content column does not: it\n is `w-full` inside a flex column with no horizontal padding of\n its own (the popup's padding is outside it, see `Popover`'s\n `POPUP_CLAMP` / `SCROLLER`), so the bled pixels landed past the\n SCROLLER's own edge. That box has `overflow-y-auto`, and CSS\n computes a 'visible' overflow-x on the OTHER axis up to 'auto'\n the moment its partner isn't 'visible' (spec: overflow-x/-y\n can't be visible+non-visible) — so the bleed stopped being\n invisible paint and became a horizontal scrollbar plus a\n genuinely wider scroll range than the popup.\n\n THE THUMB IS NOT A FIXED SIZE. `hover:scale-110` and\n `data-dragging:scale-110` (`Slider.tsx`'s `thumb` slot) grow it\n 10% on hover, focus-drag and drag — and a CSS `transform` DOES\n enlarge an element's SCROLLABLE overflow area (unlike\n `box-shadow`, which the spec excludes from it), so the resting\n half-radius (`size-4.5` ÷ 2 = 2.25 spacing units) is not enough:\n at rest the thumb fit, but the moment it was hovered or dragged\n at the `Large` end the scaled-up circle pushed past the inset\n and the scrollbar came back. `2.75` is `size-4.5` ÷ 2 × 1.1\n (2.475) rounded up with room to spare, so the padding already\n covers the hovered/focused/dragging size and does not need a\n `:hover`/`:focus`/`data-dragging` variant of its own. */}\n <div className=\"px-[calc(var(--spacing)*2.75)]\">\n <div className=\"relative h-5 select-none\" aria-hidden>\n {SCALES.map((option, i) => (\n <span\n key={option}\n className={\n scale === option\n ? \"absolute bottom-0 -translate-x-1/2 font-display leading-none text-accent-text\"\n : \"absolute bottom-0 -translate-x-1/2 font-display leading-none text-tertiary\"\n }\n style={{\n left: `${(i / (SCALES.length - 1)) * 100}%`,\n fontSize: SPECIMEN[option],\n /* `translate`, not `transform` — same Tailwind v4 property as\n the Slider's own extreme labels. */\n ...(i === 0 ? { translate: \"none\", left: 0 } : {}),\n ...(i === SCALES.length - 1\n ? { translate: \"none\", left: \"auto\", right: 0 }\n : {}),\n }}\n >\n {/* I18N-ALLOW: the \"Aa\" type specimen shows the glyph size; it is a sample of letters and not a word */}\n Aa\n </span>\n ))}\n </div>\n <Slider\n aria-label={strings.textSize}\n min={0}\n max={2}\n step={1}\n value={scaleIndex}\n onValueChange={(v) => setScale(SCALES[Number(v)])}\n showValue={false}\n /* I18N-ALLOW: Slider tooltip display mode token, not text */\n tooltip=\"never\"\n marks={SCALES.map((option, i) => ({ value: i, label: strings.scales[option] }))}\n format={(v) => strings.scales[SCALES[v]]}\n />\n </div>\n </div>\n\n <div className=\"flex flex-col gap-3.5 border-t border-border-subtle pt-4\">\n <Setting\n label={strings.highContrast}\n hint={strings.highContrastHint}\n control={\n <Switch\n checked={contrast === \"aa\"}\n onCheckedChange={(on) => setContrast(on ? \"aa\" : \"design\")}\n aria-label={strings.highContrast}\n />\n }\n />\n </div>\n\n {/* DX-4504 - three named choices, not a \"Reduce motion\" switch. A switch could only say on or off, and with\n the preference at `system` it read OFF on a machine whose OS reduces motion (Windows \"Animation effects\"\n off), so the person was told motion was on and got none. The hint says what the system choice resolves\n to, and \"Full\" is the explicit way to see motion on such a machine. */}\n <div className=\"flex flex-col gap-2.5\">\n <span className=\"text-2xs font-semibold tracking-widest text-tertiary uppercase\">\n {strings.motion}\n </span>\n <div\n role=\"radiogroup\"\n aria-label={strings.motion}\n className=\"flex gap-1 rounded-lg bg-surface-inset p-1\"\n >\n {MOTION_CHOICES.map((option) => (\n <button\n key={option}\n type=\"button\"\n role=\"radio\"\n aria-checked={motion === option}\n onClick={() => setMotion(option)}\n className={cnRadio(motion === option)}\n >\n {strings.motionChoices[option]}\n </button>\n ))}\n </div>\n <p data-motion-effective={reduced ? \"reduced\" : \"full\"} className=\"text-2xs text-tertiary text-pretty\">\n {motionHint(strings.motionHint, motion, reduced)}\n </p>\n {osReduces && motion === \"system\" && <SystemReducesMotion />}\n </div>\n </div>\n );\n}\n\n/** Segmented-control button styling, shared by the theme and motion choices. */\nfunction cnRadio(selected: boolean) {\n return [\n \"dx-tap flex flex-1 items-center justify-center gap-2 rounded-md px-3 py-2\",\n \"text-sm font-medium\",\n \"transition-[var(--tx-colors),box-shadow] duration-(--dur-fast) ease-hover\",\n selected\n ? \"bg-surface text-primary shadow-sm\"\n : \"text-tertiary hover:text-secondary\",\n ].join(\" \");\n}\n"],"names":["SCALES","MOTION_CHOICES","motionHint","hints","motion","reduced","SystemReducesMotion","strings","useUiStrings","help","reducedMotionHelp","detectPlatform","jsxs","Callout","jsx","SPECIMEN","Setting","label","hint","control","themeIcon","theme","ThemeMenu","className","triggerClassName","iconOnly","useTheme","Popover","Button","Icon","ThemePanel","setTheme","scale","setScale","useUiScale","contrast","setContrast","useContrast","setMotion","useMotionPreference","useReducedMotion","osReduces","useMediaQuery","OS_REDUCE","scaleIndex","option","cnRadio","i","Slider","v","Switch","on","selected"],"mappings":"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"}
|