@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,185 @@
|
|
|
1
|
+
import { jsxs as d, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { Menu as a } from "@base-ui/react/menu";
|
|
3
|
+
import { cn as s } from "../lib/cn.js";
|
|
4
|
+
import { Icon as x } from "./Icon.js";
|
|
5
|
+
import { Spinner as f } from "./Spinner.js";
|
|
6
|
+
import { ANCHORED_POPUP_SURFACE as b, ANCHORED_POPUP_MOTION as N } from "./overlay-shell.js";
|
|
7
|
+
const v = [
|
|
8
|
+
"min-w-[var(--anchor-width)] max-h-[var(--available-height)] overflow-y-auto",
|
|
9
|
+
b,
|
|
10
|
+
"p-1",
|
|
11
|
+
...N
|
|
12
|
+
], h = [
|
|
13
|
+
"dx-tap relative flex cursor-pointer select-none items-center gap-2.5 rounded-md py-2 pr-2.5 pl-8",
|
|
14
|
+
"text-sm text-secondary outline-none",
|
|
15
|
+
"transition-[var(--tx-colors)] duration-(--dur-instant)",
|
|
16
|
+
/* `data-highlighted` covers keyboard AND pointer, so the highlight never
|
|
17
|
+
splits into two competing states when the mouse moves mid-navigation. */
|
|
18
|
+
"data-highlighted:bg-surface-hover data-highlighted:text-primary",
|
|
19
|
+
"data-disabled:pointer-events-none data-disabled:not-data-loading:opacity-45",
|
|
20
|
+
"data-loading:cursor-wait"
|
|
21
|
+
], k = [
|
|
22
|
+
"bg-control-subtle font-medium text-control-text",
|
|
23
|
+
"data-selected:data-highlighted:bg-control-subtle-hover"
|
|
24
|
+
], I = [
|
|
25
|
+
"data-highlighted:bg-danger-subtle data-highlighted:text-danger-text",
|
|
26
|
+
"active:bg-danger-subtle-hover"
|
|
27
|
+
];
|
|
28
|
+
function z({
|
|
29
|
+
trigger: t,
|
|
30
|
+
side: r = "bottom",
|
|
31
|
+
align: n = "end",
|
|
32
|
+
open: o,
|
|
33
|
+
onOpenChange: i,
|
|
34
|
+
finalFocus: l,
|
|
35
|
+
className: c,
|
|
36
|
+
children: u
|
|
37
|
+
}) {
|
|
38
|
+
return /* @__PURE__ */ d(a.Root, { open: o, onOpenChange: i, children: [
|
|
39
|
+
/* @__PURE__ */ e(a.Trigger, { render: t }),
|
|
40
|
+
/* @__PURE__ */ e(a.Portal, { children: /* @__PURE__ */ e(
|
|
41
|
+
a.Positioner,
|
|
42
|
+
{
|
|
43
|
+
side: r,
|
|
44
|
+
align: n,
|
|
45
|
+
sideOffset: 6,
|
|
46
|
+
className: "z-(--z-popover) outline-none",
|
|
47
|
+
children: /* @__PURE__ */ e(a.Popup, { finalFocus: l, className: s(v, c), children: u })
|
|
48
|
+
}
|
|
49
|
+
) })
|
|
50
|
+
] });
|
|
51
|
+
}
|
|
52
|
+
const y = [
|
|
53
|
+
"text-warning-text",
|
|
54
|
+
"data-highlighted:bg-warning-subtle data-highlighted:text-warning-text",
|
|
55
|
+
"active:bg-warning-subtle-hover"
|
|
56
|
+
];
|
|
57
|
+
function G({
|
|
58
|
+
className: t,
|
|
59
|
+
icon: r,
|
|
60
|
+
selected: n,
|
|
61
|
+
tone: o = "neutral",
|
|
62
|
+
description: i,
|
|
63
|
+
loading: l = !1,
|
|
64
|
+
disabled: c,
|
|
65
|
+
children: u,
|
|
66
|
+
ref: g,
|
|
67
|
+
...p
|
|
68
|
+
}) {
|
|
69
|
+
const m = l ? /* @__PURE__ */ e(f, { size: "sm" }) : r;
|
|
70
|
+
return /* @__PURE__ */ d(
|
|
71
|
+
a.Item,
|
|
72
|
+
{
|
|
73
|
+
ref: g,
|
|
74
|
+
disabled: c || l,
|
|
75
|
+
"data-loading": l || void 0,
|
|
76
|
+
"aria-busy": l || void 0,
|
|
77
|
+
"data-selected": n || void 0,
|
|
78
|
+
className: s(
|
|
79
|
+
h,
|
|
80
|
+
o === "danger" && I,
|
|
81
|
+
o === "warning" && y,
|
|
82
|
+
n && k,
|
|
83
|
+
i && "items-start",
|
|
84
|
+
t
|
|
85
|
+
),
|
|
86
|
+
...p,
|
|
87
|
+
children: [
|
|
88
|
+
m && /* @__PURE__ */ e("span", { className: s("absolute left-2 flex size-4 items-center justify-center", i && "top-2.5"), children: m }),
|
|
89
|
+
i ? /* @__PURE__ */ d("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
|
|
90
|
+
/* @__PURE__ */ e("span", { children: u }),
|
|
91
|
+
/* @__PURE__ */ e("span", { className: "text-xs leading-snug text-tertiary", children: i })
|
|
92
|
+
] }) : u
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
function T({ className: t, children: r, ...n }) {
|
|
98
|
+
return /* @__PURE__ */ e(a.RadioGroup, { className: s("flex flex-col", t), ...n, children: r });
|
|
99
|
+
}
|
|
100
|
+
function _({ className: t, children: r, ref: n, ...o }) {
|
|
101
|
+
return /* @__PURE__ */ d(
|
|
102
|
+
a.RadioItem,
|
|
103
|
+
{
|
|
104
|
+
ref: n,
|
|
105
|
+
className: s(
|
|
106
|
+
h,
|
|
107
|
+
"data-checked:bg-control-subtle data-checked:font-medium data-checked:text-control-text",
|
|
108
|
+
/* Checked AND highlighted — see SELECTED_ITEM. Base UI spells this
|
|
109
|
+
state `data-checked` on a radio item, so the stacked rule has to be
|
|
110
|
+
written out again rather than reused. */
|
|
111
|
+
"data-checked:data-highlighted:bg-control-subtle-hover",
|
|
112
|
+
t
|
|
113
|
+
),
|
|
114
|
+
...o,
|
|
115
|
+
children: [
|
|
116
|
+
/* @__PURE__ */ e(a.RadioItemIndicator, { className: "absolute left-2 grid place-items-center", children: /* @__PURE__ */ e(x, { name: "check", size: "sm", className: "animate-scale-in text-control-text" }) }),
|
|
117
|
+
r
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
function C({
|
|
123
|
+
className: t,
|
|
124
|
+
icon: r,
|
|
125
|
+
description: n,
|
|
126
|
+
indicator: o,
|
|
127
|
+
children: i,
|
|
128
|
+
ref: l,
|
|
129
|
+
...c
|
|
130
|
+
}) {
|
|
131
|
+
return /* @__PURE__ */ d(
|
|
132
|
+
a.CheckboxItem,
|
|
133
|
+
{
|
|
134
|
+
ref: l,
|
|
135
|
+
className: s(h, "group/toggle items-start pr-3", t),
|
|
136
|
+
...c,
|
|
137
|
+
children: [
|
|
138
|
+
r && /* @__PURE__ */ e("span", { className: "absolute top-2.5 left-2 flex size-4 items-center justify-center", children: r }),
|
|
139
|
+
/* @__PURE__ */ d("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
|
|
140
|
+
/* @__PURE__ */ e("span", { children: i }),
|
|
141
|
+
n && /* @__PURE__ */ e("span", { className: "text-xs leading-snug text-tertiary", children: n })
|
|
142
|
+
] }),
|
|
143
|
+
o ? /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "mt-px flex shrink-0 items-center", children: o }) : /* @__PURE__ */ e(
|
|
144
|
+
"span",
|
|
145
|
+
{
|
|
146
|
+
"aria-hidden": "true",
|
|
147
|
+
className: s(
|
|
148
|
+
"mt-0.5 flex h-4 w-7 shrink-0 items-center rounded-full border border-border bg-surface-raised p-px",
|
|
149
|
+
"transition-[var(--tx-colors)] duration-(--dur-fast)",
|
|
150
|
+
"group-data-checked/toggle:border-control group-data-checked/toggle:bg-control"
|
|
151
|
+
),
|
|
152
|
+
children: /* @__PURE__ */ e(
|
|
153
|
+
"span",
|
|
154
|
+
{
|
|
155
|
+
className: s(
|
|
156
|
+
"block size-3 rounded-full bg-tertiary transition-[var(--tx-colors),transform,translate] duration-(--dur-fast)",
|
|
157
|
+
"group-data-checked/toggle:translate-x-3 group-data-checked/toggle:bg-surface"
|
|
158
|
+
)
|
|
159
|
+
}
|
|
160
|
+
)
|
|
161
|
+
}
|
|
162
|
+
)
|
|
163
|
+
]
|
|
164
|
+
}
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
function A({ label: t, children: r }) {
|
|
168
|
+
return /* @__PURE__ */ d(a.Group, { children: [
|
|
169
|
+
t && /* @__PURE__ */ e(a.GroupLabel, { className: "px-2 py-1.5 text-2xs font-semibold tracking-wide text-tertiary uppercase", children: t }),
|
|
170
|
+
r
|
|
171
|
+
] });
|
|
172
|
+
}
|
|
173
|
+
function S({ className: t }) {
|
|
174
|
+
return /* @__PURE__ */ e(a.Separator, { className: s("my-1 h-px bg-border-subtle", t) });
|
|
175
|
+
}
|
|
176
|
+
export {
|
|
177
|
+
z as Menu,
|
|
178
|
+
C as MenuCheckboxItem,
|
|
179
|
+
A as MenuGroup,
|
|
180
|
+
G as MenuItem,
|
|
181
|
+
T as MenuRadioGroup,
|
|
182
|
+
_ as MenuRadioItem,
|
|
183
|
+
S as MenuSeparator
|
|
184
|
+
};
|
|
185
|
+
//# sourceMappingURL=Menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.js","sources":["../../src/components/Menu.tsx"],"sourcesContent":["import type { ReactNode, Ref } from \"react\";\nimport { Menu as BaseMenu } from \"@base-ui/react/menu\";\nimport { cn } from \"../lib/cn\";\nimport { Icon } from \"./Icon\";\nimport { Spinner } from \"./Spinner\";\nimport { ANCHORED_POPUP_MOTION, ANCHORED_POPUP_SURFACE } from \"./overlay-shell\";\n\n/* ----------------------------------------------------------------------------\n Menu — a popup of actions or a single-choice setting.\n\n The popup animates from `--transform-origin`, which Base UI's positioner\n sets from the side it actually landed on. That matters more than it sounds:\n near a viewport edge the menu flips, and a fixed origin then makes it grow\n from the wrong corner — pointing away from the control that opened it.\n\n Exit is faster and does not scale back down. Re-animating geometry on\n dismissal makes every close feel like an undo.\n -------------------------------------------------------------------------- */\n\nconst POPUP = [\n \"min-w-[var(--anchor-width)] max-h-[var(--available-height)] overflow-y-auto\",\n ANCHORED_POPUP_SURFACE,\n \"p-1\",\n ...ANCHORED_POPUP_MOTION,\n];\n\nconst ITEM = [\n \"dx-tap relative flex cursor-pointer select-none items-center gap-2.5 rounded-md py-2 pr-2.5 pl-8\",\n \"text-sm text-secondary outline-none\",\n \"transition-[var(--tx-colors)] duration-(--dur-instant)\",\n /* `data-highlighted` covers keyboard AND pointer, so the highlight never\n splits into two competing states when the mouse moves mid-navigation. */\n \"data-highlighted:bg-surface-hover data-highlighted:text-primary\",\n \"data-disabled:pointer-events-none data-disabled:not-data-loading:opacity-45\",\n \"data-loading:cursor-wait\",\n];\n\n/* The CURRENT choice in a menu, and that choice under the pointer.\n\n Two fills rather than one: with only the first, moving onto the checked row\n repaints it with the plain highlight above and it reads as unchecked while\n you point at it. Both conditions are stacked on the second rule so it\n out-specifies the single-condition highlight — class order does not decide\n it. */\nconst SELECTED_ITEM = [\n \"bg-control-subtle font-medium text-control-text\",\n \"data-selected:data-highlighted:bg-control-subtle-hover\",\n];\n\n/* THE DESTRUCTIVE ROW — `Button`'s `ghost-danger` variant, translated onto the\n attribute a menu actually uses.\n\n TWO DECISIONS ARE INHERITED FROM `Button`, DELIBERATELY, so a \"Delete\" row\n and a \"Delete\" button are the same control wearing different geometry.\n\n QUIET AT REST. The resting colour is the ordinary row's; the danger arrives\n on approach. A menu whose last item is red before you touch it turns the\n whole popup into a warning, and spends that signal on the fifteen times\n somebody opened the menu for something else. `Button` documents the same\n choice at length and this is the same argument, not a second one.\n\n THE TINT IS A BACKGROUND, NOT ONLY A HUE. A filled plate changes luminance,\n so the row still reads as armed for someone who cannot separate red from\n grey — for whom a hue rotation is the entire signal and therefore no signal.\n\n ONE DECISION IS NOT INHERITED, AND IT IS THE POINT OF PUTTING THIS HERE.\n `Button` keys on `hover:` and `focus-visible:` because those are the two ways\n a button is approached. A menu row is approached a third way — arrowing onto\n it moves the highlight WITHOUT moving the pointer and WITHOUT taking DOM\n focus, since Base UI keeps focus on the popup and marks the active row with\n `data-highlighted`. So a consumer copying `hover:bg-danger-subtle` across\n gets a delete row that is only ever marked for a mouse. `data-highlighted`\n covers pointer and keyboard in one attribute, which is why `ITEM` above uses\n it for the neutral highlight too.\n\n Stacked ordering matters: this list is merged AFTER `ITEM`, so twMerge\n displaces the neutral `data-highlighted:` fill rather than leaving two rules\n under one modifier for stylesheet order to decide between. */\nconst DANGER_ITEM = [\n \"data-highlighted:bg-danger-subtle data-highlighted:text-danger-text\",\n \"active:bg-danger-subtle-hover\",\n];\n\nexport interface MenuProps {\n /** The control that opens the menu. */\n trigger: ReactNode;\n /** Which side of the trigger the popup prefers. */\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** How the popup lines up along that side. */\n align?: \"start\" | \"center\" | \"end\";\n /**\n * Controlled open state.\n *\n * Not decoration: a menu that advertises a keyboard shortcut has to know\n * when it is open in order to honour it, and a caller cannot listen for a\n * key that only applies while a popup it cannot see is showing.\n */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /**\n * Where focus goes when the menu closes. Default: back to the trigger. A function runs at every close and answers\n * `true` for that default, `false` to leave focus where the closing action put it, or an element to focus. A row\n * whose action removes the trigger or moves focus on (a delete, a rename field) answers `false`, or focus would be\n * pulled back to a trigger that is gone, or off the field the action just focused.\n */\n finalFocus?: boolean | (() => boolean | HTMLElement | null);\n className?: string;\n children: ReactNode;\n}\n\nexport function Menu({\n trigger,\n side = \"bottom\",\n align = \"end\",\n open,\n onOpenChange,\n finalFocus,\n className,\n children,\n}: MenuProps) {\n return (\n <BaseMenu.Root open={open} onOpenChange={onOpenChange}>\n <BaseMenu.Trigger render={trigger as React.ReactElement} />\n <BaseMenu.Portal>\n <BaseMenu.Positioner\n side={side}\n align={align}\n sideOffset={6}\n className=\"z-(--z-popover) outline-none\"\n >\n <BaseMenu.Popup finalFocus={finalFocus} className={cn(POPUP, className)}>{children}</BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n\n/**\n * Neutral, destructive, or a caution.\n *\n * Not a palette: a menu row is picked, not read, so each tone beyond neutral\n * is a property of the ACTION. `danger` says \"this deletes something\";\n * `warning` says \"this works, but not in the state the thing is in right\n * now\" (promote docs before the plan is complete, publish a draft). `Badge`\n * has seven because a badge's whole job is to carry a state.\n */\nexport type MenuItemTone = \"neutral\" | \"danger\" | \"warning\";\n\n/* THE CAUTION ROW. Unlike `DANGER_ITEM` it is NOT quiet at rest, and that is\n deliberate rather than inconsistent: a destructive action is dangerous\n always, so its colour waits for approach to avoid turning the popup into an\n alarm; a caution is a fact about the CURRENT STATE of the thing the row acts\n on (\"the plan is not finished\"), so a reader choosing between rows needs it\n BEFORE they approach. It is carried by the amber label AND the caller's\n warning glyph in the icon slot, so colour alone is never the signal.\n Merged after `ITEM` for the same twMerge-displaces-the-neutral-highlight\n reason as `DANGER_ITEM`. */\nconst WARNING_ITEM = [\n \"text-warning-text\",\n \"data-highlighted:bg-warning-subtle data-highlighted:text-warning-text\",\n \"active:bg-warning-subtle-hover\",\n];\n\nexport interface MenuItemProps extends Omit<BaseMenu.Item.Props, \"className\"> {\n className?: string;\n /**\n * Leading icon, positioned absolutely at the row's left edge, inside the\n * `pl-8` the row's own padding already reserves for it.\n *\n * A ROW WITH AN ICON MUST USE THIS, NOT AN INLINE `<Icon>` AMONG `children`.\n * `ITEM`'s `pl-8` exists so an icon rendered here lines up consistently\n * across every row in the same popup — an icon laid out inline as a normal\n * flex child instead sits to the RIGHT of that padding, one full\n * icon-width further in than a row using this prop. That drift is exactly\n * what misaligned this app's account menu before this prop existed:\n * `children` carried a hand-rolled `<span className=\"flex items-center\n * gap-2\">` wrapping icon and label together, which reads fine in isolation\n * and wrong the moment a differently-iconed row shares the same popup.\n */\n icon?: ReactNode;\n /**\n * Marks this row as the current choice among alternatives.\n *\n * For menus that ARE a choice but are not a radio group — a model picker\n * that draws its own tick, say. Without it the only signal is the tick, and\n * a tick is not a state a pointer can see it is already on.\n */\n selected?: boolean;\n /**\n * `danger` marks the row destructive. Resting state is unchanged.\n *\n * Same sentence as `IconButton.tone`, and the same contract behind it — the\n * row is quiet until approached, and \"approached\" here includes arrowing onto\n * it, which a `hover:` rule cannot see. See `DANGER_ITEM` above for why that\n * distinction is the reason this lives in the library rather than in each\n * consumer's stylesheet.\n *\n * A DANGER ROW THAT IS ALSO `selected` DRAWS AS SELECTED. The two are merged\n * in that order deliberately: \"this is the one you are on\" is the more urgent\n * of the two things to say, and a destructive action is a poor candidate for\n * being the current choice in the first place.\n */\n tone?: MenuItemTone;\n /**\n * A second, quieter line saying what picking the row DOES (or why it is\n * cautioned) — shown under the label, like `MenuCheckboxItem.description`.\n * Without it a caller hand-builds a two-line `children` stack, and the row's\n * icon (absolutely positioned for a one-line row) stops lining up with it.\n */\n description?: ReactNode;\n /**\n * DX-6426 - what this row sends is out and unanswered: the row's icon slot shows a spinner and the row refuses a second activation until it is\n * answered. Pass it from the pending state of the write. The row is not dimmed (it is working, not unavailable).\n */\n loading?: boolean;\n ref?: Ref<HTMLDivElement>;\n}\n\nexport function MenuItem({\n className,\n icon,\n selected,\n tone = \"neutral\",\n description,\n loading = false,\n disabled,\n children,\n ref,\n ...props\n}: MenuItemProps) {\n const lead = loading ? <Spinner size=\"sm\" /> : icon;\n return (\n <BaseMenu.Item\n ref={ref}\n disabled={disabled || loading}\n data-loading={loading || undefined}\n aria-busy={loading || undefined}\n /* The attribute, not just the class: it is what the stacked\n `data-selected:data-highlighted:` rule keys on, and what a probe can\n find the chosen row by. */\n data-selected={selected || undefined}\n className={cn(\n ITEM,\n tone === \"danger\" && DANGER_ITEM,\n tone === \"warning\" && WARNING_ITEM,\n selected && SELECTED_ITEM,\n description && \"items-start\",\n className,\n )}\n {...props}\n >\n {/* See the `icon` prop doc above for why this must be an absolutely\n positioned span rather than an inline child. */}\n {lead && (\n <span className={cn(\"absolute left-2 flex size-4 items-center justify-center\", description && \"top-2.5\")}>\n {lead}\n </span>\n )}\n {description ? (\n <span className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n <span>{children}</span>\n <span className=\"text-xs leading-snug text-tertiary\">{description}</span>\n </span>\n ) : (\n children\n )}\n </BaseMenu.Item>\n );\n}\n\nexport interface MenuRadioGroupProps extends Omit<BaseMenu.RadioGroup.Props, \"className\"> {\n className?: string;\n}\n\n/** Single-choice group — for a setting rather than a list of actions. */\nexport function MenuRadioGroup({ className, children, ...props }: MenuRadioGroupProps) {\n return (\n <BaseMenu.RadioGroup className={cn(\"flex flex-col\", className)} {...props}>\n {children}\n </BaseMenu.RadioGroup>\n );\n}\n\nexport interface MenuRadioItemProps extends Omit<BaseMenu.RadioItem.Props, \"className\"> {\n className?: string;\n ref?: Ref<HTMLDivElement>;\n}\n\nexport function MenuRadioItem({ className, children, ref, ...props }: MenuRadioItemProps) {\n return (\n <BaseMenu.RadioItem\n ref={ref}\n className={cn(\n ITEM,\n \"data-checked:bg-control-subtle data-checked:font-medium data-checked:text-control-text\",\n /* Checked AND highlighted — see SELECTED_ITEM. Base UI spells this\n state `data-checked` on a radio item, so the stacked rule has to be\n written out again rather than reused. */\n \"data-checked:data-highlighted:bg-control-subtle-hover\",\n className,\n )}\n {...props}\n >\n <BaseMenu.RadioItemIndicator className=\"absolute left-2 grid place-items-center\">\n <Icon name=\"check\" size=\"sm\" className=\"animate-scale-in text-control-text\" />\n </BaseMenu.RadioItemIndicator>\n {children}\n </BaseMenu.RadioItem>\n );\n}\n\nexport interface MenuCheckboxItemProps extends Omit<BaseMenu.CheckboxItem.Props, \"className\"> {\n className?: string;\n /** Leading icon — same slot, and same reason it is a prop, as `MenuItem.icon`. */\n icon?: ReactNode;\n /**\n * A second, quieter line saying what the toggle DOES — shown under the label.\n * A switch row that cannot say what it controls sends the reader to a help\n * page; one line here is the whole help page.\n */\n description?: ReactNode;\n /**\n * Draws the state in place of the trailing switch.\n *\n * For a setting whose on/off is better said by a meaningful glyph than by a\n * generic track and thumb - a plan's sign-off, say: a filled check when signed,\n * an empty \"not approved\" mark when not. The caller hands in the glyph for the\n * CURRENT state (it already holds `checked`); the switch is then not drawn at\n * all, so the row never states its state twice. The row stays a\n * `menuitemcheckbox` carrying `aria-checked`, which is what assistive tech\n * reads - the indicator is decoration and is hidden from it.\n */\n indicator?: ReactNode;\n ref?: Ref<HTMLDivElement>;\n}\n\n/**\n * An independent on/off setting inside a menu.\n *\n * A `MenuItem` is an ACTION and closes the menu when picked; a setting that is\n * flipped three at a time must not. Base UI's checkbox item keeps the menu open\n * (`closeOnClick` defaults to `false` here, not by our choice) and announces\n * itself as `menuitemcheckbox` with `aria-checked`, which a `MenuItem` carrying\n * a hand-drawn tick cannot — that is the reason this is its own row and not a\n * `selected` `MenuItem`.\n *\n * The state is drawn as a small trailing switch rather than a leading tick:\n * every other row in the same popup puts its icon on the left, and a tick there\n * reads as \"this is the current choice among alternatives\" (`MenuRadioItem`),\n * not \"this is on\". The track is fill AND thumb position, so on/off survives\n * the loss of colour.\n */\nexport function MenuCheckboxItem({\n className,\n icon,\n description,\n indicator,\n children,\n ref,\n ...props\n}: MenuCheckboxItemProps) {\n return (\n <BaseMenu.CheckboxItem\n ref={ref}\n className={cn(ITEM, \"group/toggle items-start pr-3\", className)}\n {...props}\n >\n {icon && <span className=\"absolute top-2.5 left-2 flex size-4 items-center justify-center\">{icon}</span>}\n <span className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n <span>{children}</span>\n {description && <span className=\"text-xs leading-snug text-tertiary\">{description}</span>}\n </span>\n {indicator ? (\n <span aria-hidden=\"true\" className=\"mt-px flex shrink-0 items-center\">\n {indicator}\n </span>\n ) : (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"mt-0.5 flex h-4 w-7 shrink-0 items-center rounded-full border border-border bg-surface-raised p-px\",\n \"transition-[var(--tx-colors)] duration-(--dur-fast)\",\n \"group-data-checked/toggle:border-control group-data-checked/toggle:bg-control\",\n )}\n >\n <span\n className={cn(\n \"block size-3 rounded-full bg-tertiary transition-[var(--tx-colors),transform,translate] duration-(--dur-fast)\",\n \"group-data-checked/toggle:translate-x-3 group-data-checked/toggle:bg-surface\",\n )}\n />\n </span>\n )}\n </BaseMenu.CheckboxItem>\n );\n}\n\nexport interface MenuGroupProps {\n /**\n * The group's heading. A prop rather than a child component, so a label\n * cannot be placed outside a group — where it would throw at render.\n */\n label?: ReactNode;\n children: ReactNode;\n}\n\nexport function MenuGroup({ label, children }: MenuGroupProps) {\n return (\n <BaseMenu.Group>\n {label && (\n <BaseMenu.GroupLabel className=\"px-2 py-1.5 text-2xs font-semibold tracking-wide text-tertiary uppercase\">\n {label}\n </BaseMenu.GroupLabel>\n )}\n {children}\n </BaseMenu.Group>\n );\n}\n\nexport function MenuSeparator({ className }: { className?: string }) {\n return <BaseMenu.Separator className={cn(\"my-1 h-px bg-border-subtle\", className)} />;\n}\n"],"names":["POPUP","ANCHORED_POPUP_SURFACE","ANCHORED_POPUP_MOTION","ITEM","SELECTED_ITEM","DANGER_ITEM","Menu","trigger","side","align","open","onOpenChange","finalFocus","className","children","jsxs","BaseMenu","jsx","cn","WARNING_ITEM","MenuItem","icon","selected","tone","description","loading","disabled","ref","props","lead","Spinner","MenuRadioGroup","MenuRadioItem","Icon","MenuCheckboxItem","indicator","MenuGroup","label","MenuSeparator"],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { jsx as n, jsxs as p } from "react/jsx-runtime";
|
|
2
|
+
import { cn as u } from "../lib/cn.js";
|
|
3
|
+
import { Icon as h } from "./Icon.js";
|
|
4
|
+
import { Button as v } from "./Button.js";
|
|
5
|
+
import { IconButton as f } from "./IconButton.js";
|
|
6
|
+
import { useBelow as b } from "../lib/use-media-query.js";
|
|
7
|
+
import { useUiStrings as x } from "../lib/i18n/provider.js";
|
|
8
|
+
import { useNumberFormat as w } from "../lib/i18n/number-format.js";
|
|
9
|
+
function I({ items: r, maxItems: a = 4, className: e }) {
|
|
10
|
+
const i = x().navigation, t = r.length > a ? [r[0], "ellipsis", ...r.slice(-2)] : r;
|
|
11
|
+
return /* @__PURE__ */ n("nav", { "aria-label": i.breadcrumb, className: u("min-w-0", e), children: /* @__PURE__ */ n("ol", { className: "flex min-w-0 flex-wrap items-center gap-1 text-sm", children: t.map((s, o) => {
|
|
12
|
+
const d = o === t.length - 1;
|
|
13
|
+
return /* @__PURE__ */ p("li", { className: "flex min-w-0 items-center gap-1", children: [
|
|
14
|
+
o > 0 && /* @__PURE__ */ n(h, { name: "chevron-right", size: "xs", className: "shrink-0 text-tertiary" }),
|
|
15
|
+
s === "ellipsis" ? /* @__PURE__ */ n("span", { className: "px-1 text-tertiary", "aria-hidden": !0, children: "…" }) : d ? (
|
|
16
|
+
/* The current page is NOT a link, and carries aria-current.
|
|
17
|
+
A link to where you already are is a small lie that screen
|
|
18
|
+
readers repeat out loud. */
|
|
19
|
+
/* @__PURE__ */ n("span", { "aria-current": "page", className: "truncate font-medium text-primary", children: s.label })
|
|
20
|
+
) : /* @__PURE__ */ n(
|
|
21
|
+
"a",
|
|
22
|
+
{
|
|
23
|
+
href: s.href ?? "#",
|
|
24
|
+
onClick: s.onClick,
|
|
25
|
+
className: "truncate rounded-sm px-1 text-tertiary transition-colors duration-(--dur-fast) hover:text-accent-text",
|
|
26
|
+
children: s.label
|
|
27
|
+
}
|
|
28
|
+
)
|
|
29
|
+
] }, o);
|
|
30
|
+
}) }) });
|
|
31
|
+
}
|
|
32
|
+
function L({
|
|
33
|
+
page: r,
|
|
34
|
+
pageCount: a,
|
|
35
|
+
onPageChange: e,
|
|
36
|
+
siblings: i = 1,
|
|
37
|
+
className: l
|
|
38
|
+
}) {
|
|
39
|
+
const t = x().navigation, s = w(), o = b("sm"), d = N(r, a, o ? 0 : i);
|
|
40
|
+
return /* @__PURE__ */ p("nav", { "aria-label": t.pagination, className: u("flex items-center gap-1", l), children: [
|
|
41
|
+
/* @__PURE__ */ n(
|
|
42
|
+
f,
|
|
43
|
+
{
|
|
44
|
+
label: t.previousPage,
|
|
45
|
+
icon: /* @__PURE__ */ n(h, { name: "chevron-left", size: "sm" }),
|
|
46
|
+
disabledReason: r <= 1 ? t.onFirstPage : void 0,
|
|
47
|
+
onClick: () => e(r - 1)
|
|
48
|
+
}
|
|
49
|
+
),
|
|
50
|
+
d.map(
|
|
51
|
+
(c, g) => c === "gap" ? /* @__PURE__ */ n("span", { className: "px-1 text-tertiary", "aria-hidden": !0, children: "…" }, `gap-${g}`) : /* @__PURE__ */ n(
|
|
52
|
+
v,
|
|
53
|
+
{
|
|
54
|
+
size: "sm",
|
|
55
|
+
variant: c === r ? "solid" : "ghost",
|
|
56
|
+
"aria-label": t.page(s(c)),
|
|
57
|
+
"aria-current": c === r ? "page" : void 0,
|
|
58
|
+
onClick: () => e(c),
|
|
59
|
+
className: "min-w-(--control-sm) tabular-nums",
|
|
60
|
+
children: c
|
|
61
|
+
},
|
|
62
|
+
c
|
|
63
|
+
)
|
|
64
|
+
),
|
|
65
|
+
/* @__PURE__ */ n(
|
|
66
|
+
f,
|
|
67
|
+
{
|
|
68
|
+
label: t.nextPage,
|
|
69
|
+
icon: /* @__PURE__ */ n(h, { name: "chevron-right", size: "sm" }),
|
|
70
|
+
disabledReason: r >= a ? t.onLastPage : void 0,
|
|
71
|
+
onClick: () => e(r + 1)
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
] });
|
|
75
|
+
}
|
|
76
|
+
function N(r, a, e) {
|
|
77
|
+
const i = e * 2 + 5;
|
|
78
|
+
if (a <= i) return m(1, a);
|
|
79
|
+
const l = Math.max(r - e, 1), t = Math.min(r + e, a), s = l > 3, o = t < a - 2;
|
|
80
|
+
return !s && o ? [...m(1, i - 2), "gap", a] : s && !o ? [1, "gap", ...m(a - i + 3, a)] : [1, "gap", ...m(l, t), "gap", a];
|
|
81
|
+
}
|
|
82
|
+
const m = (r, a) => Array.from({ length: a - r + 1 }, (e, i) => r + i);
|
|
83
|
+
export {
|
|
84
|
+
I as Breadcrumb,
|
|
85
|
+
L as Pagination
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=Navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Navigation.js","sources":["../../src/components/Navigation.tsx"],"sourcesContent":["import type { MouseEvent, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useNumberFormat, useUiStrings } from \"../lib/i18n\";\nimport { Icon } from \"./Icon\";\nimport { Button } from \"./Button\";\nimport { IconButton } from \"./IconButton\";\nimport { useBelow } from \"../lib/use-media-query\";\n\n/* ============================================================================\n BREADCRUMB + PAGINATION — the two small navigation pieces every app needs\n and almost every design system treats as an afterthought.\n ========================================================================= */\n\nexport type Crumb = {\n label: ReactNode;\n href?: string;\n /**\n * Receives the click event, which a client-side router NEEDS in order to\n * suppress the browser's own navigation.\n *\n * The anchor below keeps its real `href` (hover URL, ctrl/cmd-click to a new\n * tab) and only falls back to `#` when there is none, so a crumb with an\n * `href` and a router-driven `onClick` used to do the client-side navigation\n * AND a full page load. Take the event and suppress it:\n *\n * ```tsx\n * onClick: (e) => {\n * // A modified or middle click is a request for a new tab — let it through.\n * if (e.defaultPrevented || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;\n * e.preventDefault();\n * navigate(crumb.href);\n * }\n * ```\n *\n * A zero-argument `() => void` handler still type-checks. The last crumb is\n * the current page, a non-link span, and never fires this.\n */\n onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;\n};\n\nexport interface BreadcrumbProps {\n items: Crumb[];\n /**\n * Collapse the middle when the trail is longer than this.\n *\n * A trail that wraps to two lines has stopped being a trail. Collapsing\n * keeps the two ends — where you came from and where you are — which is the\n * information people actually use; the middle is nearly always scenery.\n */\n maxItems?: number;\n className?: string;\n}\n\nexport function Breadcrumb({ items, maxItems = 4, className }: BreadcrumbProps) {\n const strings = useUiStrings().navigation;\n const collapsed = items.length > maxItems;\n const shown: (Crumb | \"ellipsis\")[] = collapsed\n ? [items[0], \"ellipsis\", ...items.slice(-2)]\n : items;\n\n return (\n <nav aria-label={strings.breadcrumb} className={cn(\"min-w-0\", className)}>\n <ol className=\"flex min-w-0 flex-wrap items-center gap-1 text-sm\">\n {shown.map((item, i) => {\n const last = i === shown.length - 1;\n return (\n <li key={i} className=\"flex min-w-0 items-center gap-1\">\n {i > 0 && (\n <Icon name=\"chevron-right\" size=\"xs\" className=\"shrink-0 text-tertiary\" />\n )}\n {item === \"ellipsis\" ? (\n <span className=\"px-1 text-tertiary\" aria-hidden>\n …\n </span>\n ) : last ? (\n /* The current page is NOT a link, and carries aria-current.\n A link to where you already are is a small lie that screen\n readers repeat out loud. */\n <span aria-current=\"page\" className=\"truncate font-medium text-primary\">\n {item.label}\n </span>\n ) : (\n <a\n href={item.href ?? \"#\"}\n onClick={item.onClick}\n className=\"truncate rounded-sm px-1 text-tertiary transition-colors duration-(--dur-fast) hover:text-accent-text\"\n >\n {item.label}\n </a>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n\nexport interface PaginationProps {\n page: number;\n pageCount: number;\n onPageChange: (page: number) => void;\n /**\n * How many numbers to show around the current page.\n *\n * CLAMPED TO 0 BELOW 640px, whatever is passed. Every control in this row is\n * at least 44px wide once the pointer is coarse, so the default window is\n * nine targets plus eight gaps — 428px, which does not fit a 375px phone and\n * pushed the entire page sideways. Fewer numbers is the only thing that can\n * give here: a horizontally scrolling pagination control is a worse answer\n * than a shorter one, because the pages you cannot see are the ones you were\n * looking for.\n */\n siblings?: number;\n className?: string;\n}\n\n/**\n * Numbered pagination with a stable width.\n *\n * The window of page numbers is padded so the control does not change size as\n * you move through it — a row of buttons that grows and shrinks under the\n * pointer makes people misclick, and it is the single most common flaw in\n * hand-rolled pagination.\n */\nexport function Pagination({\n page,\n pageCount,\n onPageChange,\n siblings = 1,\n className,\n}: PaginationProps) {\n const strings = useUiStrings().navigation;\n const fmt = useNumberFormat();\n /* The stable-width promise above holds WITHIN a width class, which is what it\n is for — the control must not resize as you page through it. Crossing a\n breakpoint is a different event, and one nobody is mid-click for. */\n const narrow = useBelow(\"sm\");\n const pages = paginationWindow(page, pageCount, narrow ? 0 : siblings);\n\n return (\n <nav aria-label={strings.pagination} className={cn(\"flex items-center gap-1\", className)}>\n {/* At the first page this used to be a natively-disabled button: no\n cursor, no hover, and nothing at all if you pointed at it wondering\n why the arrow had stopped working. `disabledReason` says so. */}\n <IconButton\n label={strings.previousPage}\n icon={<Icon name=\"chevron-left\" size=\"sm\" />}\n disabledReason={page <= 1 ? strings.onFirstPage : undefined}\n onClick={() => onPageChange(page - 1)}\n />\n\n {pages.map((entry, i) =>\n entry === \"gap\" ? (\n <span key={`gap-${i}`} className=\"px-1 text-tertiary\" aria-hidden>\n …\n </span>\n ) : (\n <Button\n key={entry}\n size=\"sm\"\n variant={entry === page ? \"solid\" : \"ghost\"}\n aria-label={strings.page(fmt(entry))}\n aria-current={entry === page ? \"page\" : undefined}\n onClick={() => onPageChange(entry)}\n className=\"min-w-(--control-sm) tabular-nums\"\n >\n {entry}\n </Button>\n ),\n )}\n\n <IconButton\n label={strings.nextPage}\n icon={<Icon name=\"chevron-right\" size=\"sm\" />}\n disabledReason={page >= pageCount ? strings.onLastPage : undefined}\n onClick={() => onPageChange(page + 1)}\n />\n </nav>\n );\n}\n\n/**\n * The visible page numbers, always the same COUNT.\n *\n * Near the ends there are no siblings on one side, so the window borrows the\n * missing slots from the other side. Without that, the control is narrower on\n * page 1 than on page 5 and everything after it shifts as you page through.\n */\nfunction paginationWindow(page: number, pageCount: number, siblings: number): (number | \"gap\")[] {\n const slots = siblings * 2 + 5; // first, last, two gaps, and the window\n if (pageCount <= slots) return range(1, pageCount);\n\n const left = Math.max(page - siblings, 1);\n const right = Math.min(page + siblings, pageCount);\n const showLeftGap = left > 3;\n const showRightGap = right < pageCount - 2;\n\n // I18N-ALLOW: page-list gap sentinel; its render branch prints an ellipsis\n if (!showLeftGap && showRightGap) return [...range(1, slots - 2), \"gap\", pageCount];\n // I18N-ALLOW: page-list gap sentinel; its render branch prints an ellipsis\n if (showLeftGap && !showRightGap) return [1, \"gap\", ...range(pageCount - slots + 3, pageCount)];\n // I18N-ALLOW: page-list gap sentinel; its render branch prints an ellipsis\n return [1, \"gap\", ...range(left, right), \"gap\", pageCount];\n}\n\nconst range = (from: number, to: number) =>\n Array.from({ length: to - from + 1 }, (_, i) => from + i);\n"],"names":["Breadcrumb","items","maxItems","className","strings","useUiStrings","shown","cn","jsx","item","i","last","jsxs","Icon","Pagination","page","pageCount","onPageChange","siblings","fmt","useNumberFormat","narrow","useBelow","pages","paginationWindow","IconButton","entry","Button","slots","range","left","right","showLeftGap","showRightGap","from","to","_"],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { jsxs as o, jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { NumberField as t } from "@base-ui/react/number-field";
|
|
3
|
+
import { tv as j } from "tailwind-variants";
|
|
4
|
+
import { cn as i } from "../lib/cn.js";
|
|
5
|
+
import { Icon as s } from "./Icon.js";
|
|
6
|
+
import { parseCurrency as C } from "../lib/values/currency.js";
|
|
7
|
+
import { useUiLocale as F } from "../lib/i18n/provider.js";
|
|
8
|
+
const P = j({
|
|
9
|
+
slots: {
|
|
10
|
+
group: [
|
|
11
|
+
"flex w-full min-w-0 items-stretch overflow-hidden rounded-md",
|
|
12
|
+
"border border-field-border bg-field",
|
|
13
|
+
"transition-[var(--tx-colors),box-shadow] duration-(--dur-fast) ease-hover",
|
|
14
|
+
"hover:not-has-disabled:border-field-border-hover",
|
|
15
|
+
"has-focus:border-control has-focus:shadow-[0_0_0_3px_var(--control-focus-halo)]",
|
|
16
|
+
"has-data-invalid:border-danger",
|
|
17
|
+
"has-disabled:opacity-45"
|
|
18
|
+
],
|
|
19
|
+
input: [
|
|
20
|
+
"w-full min-w-0 bg-transparent font-mono tabular-nums text-primary",
|
|
21
|
+
"outline-none placeholder:font-sans placeholder:text-field-placeholder",
|
|
22
|
+
"disabled:cursor-not-allowed"
|
|
23
|
+
],
|
|
24
|
+
stepper: [
|
|
25
|
+
/* The steppers are the width-constrained case: the group already takes
|
|
26
|
+
its height from --control-*, so on a touch pointer only w-8/w-10 keeps
|
|
27
|
+
them under the floor. The input beside them is flexible and gives the
|
|
28
|
+
width up. */
|
|
29
|
+
"dx-tap grid shrink-0 cursor-pointer place-items-center text-tertiary select-none",
|
|
30
|
+
"transition-[var(--tx-colors)] duration-(--dur-instant)",
|
|
31
|
+
"hover:bg-surface-hover hover:text-primary",
|
|
32
|
+
"active:bg-surface-active",
|
|
33
|
+
"disabled:pointer-events-none disabled:opacity-40"
|
|
34
|
+
],
|
|
35
|
+
scrub: "cursor-ew-resize text-xs font-medium text-secondary select-none"
|
|
36
|
+
},
|
|
37
|
+
variants: {
|
|
38
|
+
size: {
|
|
39
|
+
sm: { group: "h-control-sm", input: "text-xs", stepper: "w-8" },
|
|
40
|
+
md: { group: "h-control-md", input: "text-sm", stepper: "w-10" },
|
|
41
|
+
lg: { group: "h-control-lg rounded-lg", input: "text-md", stepper: "w-12" }
|
|
42
|
+
},
|
|
43
|
+
/**
|
|
44
|
+
* Centered is the field's own long-standing look — a value read the way a
|
|
45
|
+
* calculator or a stepper shows one, and unchanged for every existing
|
|
46
|
+
* caller (SG-907 adds this variant; it does not touch the default). A
|
|
47
|
+
* data-entry field reads the opposite way: left-aligned, like every other
|
|
48
|
+
* text box beside it, so a column of them lines up on their leading edge
|
|
49
|
+
* rather than swimming around a shared centre.
|
|
50
|
+
*/
|
|
51
|
+
align: {
|
|
52
|
+
center: { input: "text-center" },
|
|
53
|
+
start: { input: "text-left" }
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
defaultVariants: { size: "md", align: "center" }
|
|
57
|
+
}), R = /[-−-‒–—﹣]/;
|
|
58
|
+
function B({
|
|
59
|
+
size: f,
|
|
60
|
+
align: b,
|
|
61
|
+
className: h,
|
|
62
|
+
hideSteppers: d = !1,
|
|
63
|
+
scrubLabel: c,
|
|
64
|
+
ref: x,
|
|
65
|
+
"aria-label": g,
|
|
66
|
+
"aria-labelledby": w,
|
|
67
|
+
"aria-describedby": y,
|
|
68
|
+
placeholder: N,
|
|
69
|
+
allowDecimal: D,
|
|
70
|
+
onKeyDown: v,
|
|
71
|
+
onPaste: K,
|
|
72
|
+
...l
|
|
73
|
+
}) {
|
|
74
|
+
const a = P({ size: f, align: b }), z = F(), m = l.min, I = l.format, u = D ?? I?.maximumFractionDigits !== 0, p = m != null && m >= 0, _ = (e) => {
|
|
75
|
+
!u && e.key === "." && !e.ctrlKey && !e.metaKey && !e.altKey || p && R.test(e.key) && !e.ctrlKey && !e.metaKey && !e.altKey ? e.preventDefault() : v?.(e);
|
|
76
|
+
}, k = (e) => {
|
|
77
|
+
const A = e.clipboardData?.getData("text/plain") ?? "", n = C(A, z);
|
|
78
|
+
if (n !== null) {
|
|
79
|
+
if (!u && !Number.isInteger(n)) {
|
|
80
|
+
e.preventDefault();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (p && n < 0) {
|
|
84
|
+
e.preventDefault();
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
K?.(e);
|
|
89
|
+
};
|
|
90
|
+
return /* @__PURE__ */ o(t.Root, { ref: x, className: i("flex w-full min-w-0 flex-col gap-1.5", h), ...l, children: [
|
|
91
|
+
c && /* @__PURE__ */ o(t.ScrubArea, { className: a.scrub(), children: [
|
|
92
|
+
/* @__PURE__ */ o("span", { className: "inline-flex items-center gap-1", children: [
|
|
93
|
+
/* @__PURE__ */ r(s, { name: "arrow-up-down", size: "xs", className: "rotate-90" }),
|
|
94
|
+
c
|
|
95
|
+
] }),
|
|
96
|
+
/* @__PURE__ */ r(t.ScrubAreaCursor, { className: "drop-shadow-md", children: /* @__PURE__ */ r(s, { name: "arrow-up-down", size: "sm", className: "rotate-90 text-primary" }) })
|
|
97
|
+
] }),
|
|
98
|
+
/* @__PURE__ */ o(t.Group, { className: a.group(), children: [
|
|
99
|
+
!d && /* @__PURE__ */ r(t.Decrement, { className: i(a.stepper(), "border-r border-field-border"), children: /* @__PURE__ */ r(s, { name: "minus", size: "sm" }) }),
|
|
100
|
+
/* @__PURE__ */ r(
|
|
101
|
+
t.Input,
|
|
102
|
+
{
|
|
103
|
+
className: a.input(),
|
|
104
|
+
"aria-label": g,
|
|
105
|
+
"aria-labelledby": w,
|
|
106
|
+
"aria-describedby": y,
|
|
107
|
+
placeholder: N,
|
|
108
|
+
onKeyDown: _,
|
|
109
|
+
onPaste: k
|
|
110
|
+
}
|
|
111
|
+
),
|
|
112
|
+
!d && /* @__PURE__ */ r(t.Increment, { className: i(a.stepper(), "border-l border-field-border"), children: /* @__PURE__ */ r(s, { name: "plus", size: "sm" }) })
|
|
113
|
+
] })
|
|
114
|
+
] });
|
|
115
|
+
}
|
|
116
|
+
export {
|
|
117
|
+
B as NumberInput
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=NumberInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberInput.js","sources":["../../src/components/NumberInput.tsx"],"sourcesContent":["import type { KeyboardEvent, ClipboardEvent, Ref } from \"react\";\nimport { NumberField } from \"@base-ui/react/number-field\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"../lib/cn\";\nimport { Icon } from \"./Icon\";\nimport { parseCurrency } from \"../lib/values/currency\";\nimport { useUiLocale } from \"../lib/i18n\";\n\n/* ----------------------------------------------------------------------------\n NUMBER INPUT\n\n NOT `<input type=\"number\">`. That control is genuinely broken in ways nobody\n can style around: the spinners are a different size and shape in every\n engine, a scroll wheel over a focused field silently changes the value, and\n several browsers accept \"e\", \"+\" and \"-\" anywhere in the string and then\n report the whole field as empty rather than invalid. Base UI's field is a\n text input with real numeric behaviour behind it.\n\n THREE WAYS TO CHANGE THE VALUE, because people reach for different ones:\n type it, press the steppers, or DRAG the label sideways. The scrub area is\n the one nobody expects and everybody keeps using once they find it — it\n turns \"nudge this by a bit\" into a gesture instead of eleven clicks.\n\n Tabular figures, always: a value that changes width as it counts makes the\n steppers beside it shift under the pointer.\n -------------------------------------------------------------------------- */\n\nconst numberInput = tv({\n slots: {\n group: [\n \"flex w-full min-w-0 items-stretch overflow-hidden rounded-md\",\n \"border border-field-border bg-field\",\n \"transition-[var(--tx-colors),box-shadow] duration-(--dur-fast) ease-hover\",\n \"hover:not-has-disabled:border-field-border-hover\",\n \"has-focus:border-control has-focus:shadow-[0_0_0_3px_var(--control-focus-halo)]\",\n \"has-data-invalid:border-danger\",\n \"has-disabled:opacity-45\",\n ],\n input: [\n \"w-full min-w-0 bg-transparent font-mono tabular-nums text-primary\",\n \"outline-none placeholder:font-sans placeholder:text-field-placeholder\",\n \"disabled:cursor-not-allowed\",\n ],\n stepper: [\n /* The steppers are the width-constrained case: the group already takes\n its height from --control-*, so on a touch pointer only w-8/w-10 keeps\n them under the floor. The input beside them is flexible and gives the\n width up. */\n \"dx-tap grid shrink-0 cursor-pointer place-items-center text-tertiary select-none\",\n \"transition-[var(--tx-colors)] duration-(--dur-instant)\",\n \"hover:bg-surface-hover hover:text-primary\",\n \"active:bg-surface-active\",\n \"disabled:pointer-events-none disabled:opacity-40\",\n ],\n scrub: \"cursor-ew-resize text-xs font-medium text-secondary select-none\",\n },\n variants: {\n size: {\n sm: { group: \"h-control-sm\", input: \"text-xs\", stepper: \"w-8\" },\n md: { group: \"h-control-md\", input: \"text-sm\", stepper: \"w-10\" },\n lg: { group: \"h-control-lg rounded-lg\", input: \"text-md\", stepper: \"w-12\" },\n },\n /**\n * Centered is the field's own long-standing look — a value read the way a\n * calculator or a stepper shows one, and unchanged for every existing\n * caller (SG-907 adds this variant; it does not touch the default). A\n * data-entry field reads the opposite way: left-aligned, like every other\n * text box beside it, so a column of them lines up on their leading edge\n * rather than swimming around a shared centre.\n */\n align: {\n center: { input: \"text-center\" },\n start: { input: \"text-left\" },\n },\n },\n defaultVariants: { size: \"md\", align: \"center\" },\n});\n\n/**\n * The five props below are declared here, EXPLICITLY, rather than left to flow through the\n * `Omit<NumberField.Root.Props, ...>` this interface otherwise extends (SG-907).\n *\n * `NumberField.Root` renders a `<div>` — `aria-label`/`aria-labelledby`/`aria-describedby` are\n * universal ARIA attributes TypeScript accepts on any element, so they type-checked and silently\n * landed on that wrapping div, never reaching the `<input>` a screen reader (or\n * `getByRole(\"textbox\", { name })`) actually reads the accessible name from. `placeholder` was\n * worse: `NumberFieldRootProps` never declared it at all, so a caller could not pass one through\n * this component regardless of which element it would have reached. Both are fixed the same way\n * — destructured out of the props this component accepts from its caller, forwarded to\n * `NumberField.Input` below, which is exactly where `<input>`-shaped props belong.\n *\n * `name` stays out of this list on purpose. It is already declared on `NumberFieldRootProps`\n * itself (not inherited from the generic div props the way the three ARIA attributes are), and\n * Base UI's own `NumberField.Root` reads it to name a HIDDEN native `<input type=\"hidden\">` it\n * renders for real form submission — never the visible text `<input>`, which the library\n * deliberately gives no `name` of its own so a form posts the field exactly once. Moving `name`\n * onto the visible input here would give the form two same-named inputs instead of fixing\n * anything.\n */\nexport interface NumberInputProps\n extends Omit<NumberField.Root.Props, \"className\" | \"render\" | \"aria-label\" | \"aria-labelledby\" | \"aria-describedby\">,\n VariantProps<typeof numberInput> {\n className?: string;\n /** Hide the +/− buttons — for a field driven by typing or scrubbing alone. */\n hideSteppers?: boolean;\n /**\n * A draggable label. Dragging it left or right changes the value.\n *\n * Worth adding wherever the exact number matters less than the relationship\n * between it and what it affects — a delay, a threshold, a weight.\n */\n scrubLabel?: string;\n ref?: Ref<HTMLDivElement>;\n /** The accessible name — reaches the `<input>` itself, never the wrapping group (SG-907). */\n \"aria-label\"?: string;\n /** @see `aria-label`'s own note above — same fix, same reason. */\n \"aria-labelledby\"?: string;\n /** @see `aria-label`'s own note above — same fix, same reason. */\n \"aria-describedby\"?: string;\n /** What an empty field says. Reaches the `<input>` — `NumberFieldRootProps` never had one. */\n placeholder?: string;\n /**\n * Whether a decimal separator may be typed or pasted at all.\n *\n * Base UI's own `NumberField` keeps the decimal key typeable even under an integer-only\n * `format` (its own source: \"must stay typeable regardless of whether the format renders a\n * fraction\") and instead ROUNDS a typed fraction away on blur — `3.7` silently becomes `4`,\n * which is a value the reviewer never typed. `allowDecimal={false}` refuses the keystroke (and\n * a pasted fraction) outright, so nothing the reviewer entered is ever changed behind their\n * back. Defaults to `false` exactly when `format?.maximumFractionDigits === 0` — an\n * integer-only format refuses a decimal point unless a caller explicitly asks otherwise.\n */\n allowDecimal?: boolean;\n}\n\n/** ASCII and the small set of Unicode minus glyphs a paste (or an IME) might carry. */\nconst MINUS_RE = /[-−-‒–—﹣]/;\n\nexport function NumberInput({\n size,\n align,\n className,\n hideSteppers = false,\n scrubLabel,\n ref,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n placeholder,\n allowDecimal,\n onKeyDown,\n onPaste,\n ...props\n}: NumberInputProps) {\n const s = numberInput({ size, align });\n const locale = useUiLocale();\n const min = props.min;\n const format = props.format;\n const resolvedAllowDecimal = allowDecimal ?? format?.maximumFractionDigits !== 0;\n const refuseNegative = min != null && min >= 0;\n\n /**\n * Blocks the keystroke, rather than letting it insert and correcting it later — a value a\n * reviewer typed must never be changed behind their back. `event.preventDefault()` here runs\n * BEFORE `NumberField.Input`'s own `onKeyDown` (Base UI merges rightmost-first — see\n * `mergeProps`'s own doc comment), and that handler's first line bails out on exactly\n * `event.defaultPrevented`, so blocking here is enough to stop the character reaching the\n * field at all; nothing downstream still needs to notice it.\n */\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (!resolvedAllowDecimal && event.key === \".\" && !event.ctrlKey && !event.metaKey && !event.altKey) {\n event.preventDefault();\n } else if (refuseNegative && MINUS_RE.test(event.key) && !event.ctrlKey && !event.metaKey && !event.altKey) {\n event.preventDefault();\n } else {\n onKeyDown?.(event as never);\n }\n };\n\n /**\n * A paste is one event carrying a whole string, not a single character — `$1,500.00` must be\n * ACCEPTED (SG-907 AC), so this cannot reject on sight of \".\" the way the keystroke guard does.\n * It parses what was actually pasted (`parseCurrency`, which already strips \"$\"/\",\"/parens the\n * same way this app's own typed-value refusal does) and refuses only a paste that would\n * actually introduce a fraction on a no-decimal field, or a negative on a non-negative one —\n * everything else reaches `NumberField.Input`'s own paste handling unchanged.\n */\n const handlePaste = (event: ClipboardEvent<HTMLInputElement>) => {\n const text = event.clipboardData?.getData(\"text/plain\") ?? \"\";\n const parsed = parseCurrency(text, locale);\n if (parsed !== null) {\n if (!resolvedAllowDecimal && !Number.isInteger(parsed)) {\n event.preventDefault();\n return;\n }\n if (refuseNegative && parsed < 0) {\n event.preventDefault();\n return;\n }\n }\n onPaste?.(event as never);\n };\n\n return (\n <NumberField.Root ref={ref} className={cn(\"flex w-full min-w-0 flex-col gap-1.5\", className)} {...props}>\n {scrubLabel && (\n <NumberField.ScrubArea className={s.scrub()}>\n <span className=\"inline-flex items-center gap-1\">\n <Icon name=\"arrow-up-down\" size=\"xs\" className=\"rotate-90\" />\n {scrubLabel}\n </span>\n {/* The cursor swaps to a horizontal resize glyph and the pointer is\n locked, so the drag can run past the edge of the screen without\n stopping — which is what makes a wide range usable in one gesture. */}\n <NumberField.ScrubAreaCursor className=\"drop-shadow-md\">\n <Icon name=\"arrow-up-down\" size=\"sm\" className=\"rotate-90 text-primary\" />\n </NumberField.ScrubAreaCursor>\n </NumberField.ScrubArea>\n )}\n\n <NumberField.Group className={s.group()}>\n {!hideSteppers && (\n <NumberField.Decrement className={cn(s.stepper(), \"border-r border-field-border\")}>\n <Icon name=\"minus\" size=\"sm\" />\n </NumberField.Decrement>\n )}\n <NumberField.Input\n className={s.input()}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n placeholder={placeholder}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n />\n {!hideSteppers && (\n <NumberField.Increment className={cn(s.stepper(), \"border-l border-field-border\")}>\n <Icon name=\"plus\" size=\"sm\" />\n </NumberField.Increment>\n )}\n </NumberField.Group>\n </NumberField.Root>\n );\n}\n"],"names":["numberInput","tv","MINUS_RE","NumberInput","size","align","className","hideSteppers","scrubLabel","ref","ariaLabel","ariaLabelledBy","ariaDescribedBy","placeholder","allowDecimal","onKeyDown","onPaste","props","s","locale","useUiLocale","min","format","resolvedAllowDecimal","refuseNegative","handleKeyDown","event","handlePaste","text","parsed","parseCurrency","jsxs","NumberField","cn","jsx","Icon"],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as o, jsxs as l } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as m, useEffect as b, useCallback as h } from "react";
|
|
3
|
+
import { OTPField as i } from "@base-ui/react/otp-field";
|
|
4
|
+
import { cn as c } from "../lib/cn.js";
|
|
5
|
+
function y({
|
|
6
|
+
length: a = 6,
|
|
7
|
+
groupAfter: s,
|
|
8
|
+
className: f,
|
|
9
|
+
autoFocus: n,
|
|
10
|
+
ref: e,
|
|
11
|
+
...p
|
|
12
|
+
}) {
|
|
13
|
+
const d = m(null);
|
|
14
|
+
b(() => {
|
|
15
|
+
n && d.current?.querySelector("input")?.focus();
|
|
16
|
+
}, [n]);
|
|
17
|
+
const u = h(
|
|
18
|
+
(r) => {
|
|
19
|
+
d.current = r, typeof e == "function" ? e(r) : e && (e.current = r);
|
|
20
|
+
},
|
|
21
|
+
[e]
|
|
22
|
+
);
|
|
23
|
+
return /* @__PURE__ */ o(
|
|
24
|
+
i.Root,
|
|
25
|
+
{
|
|
26
|
+
ref: u,
|
|
27
|
+
length: a,
|
|
28
|
+
className: c("flex items-center gap-2", f),
|
|
29
|
+
...p,
|
|
30
|
+
children: Array.from({ length: a }, (r, t) => /* @__PURE__ */ l("span", { className: "flex items-center gap-2", children: [
|
|
31
|
+
/* @__PURE__ */ l("span", { className: "relative", children: [
|
|
32
|
+
/* @__PURE__ */ o(
|
|
33
|
+
i.Input,
|
|
34
|
+
{
|
|
35
|
+
"data-autofocus": n && t === 0 ? "" : void 0,
|
|
36
|
+
className: c(
|
|
37
|
+
"peer",
|
|
38
|
+
"grid h-control-md w-11 place-items-center rounded-md",
|
|
39
|
+
"border border-field-border bg-field",
|
|
40
|
+
"text-center font-mono text-lg tabular-nums text-primary",
|
|
41
|
+
"transition-[var(--tx-colors),box-shadow] duration-(--dur-fast) ease-hover",
|
|
42
|
+
"hover:not-disabled:border-field-border-hover",
|
|
43
|
+
/* DX-5127: the box holding real focus IS the active slot (the
|
|
44
|
+
next digit goes into the focused box), so it gets the ring;
|
|
45
|
+
Base UI has no per-slot "active" attribute. A filled box
|
|
46
|
+
reads as filled: stronger border and a tinted background. */
|
|
47
|
+
"focus:border-control focus:shadow-[0_0_0_3px_var(--control-focus-halo)]",
|
|
48
|
+
"data-filled:border-border-strong data-filled:bg-surface-sunken",
|
|
49
|
+
"data-invalid:border-danger",
|
|
50
|
+
"disabled:opacity-45",
|
|
51
|
+
"outline-none"
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
),
|
|
55
|
+
/* @__PURE__ */ o(
|
|
56
|
+
"span",
|
|
57
|
+
{
|
|
58
|
+
"aria-hidden": !0,
|
|
59
|
+
className: "pointer-events-none absolute left-1/2 top-1/2 hidden h-5 w-px -translate-x-1/2 -translate-y-1/2 bg-primary peer-focus:peer-not-data-filled:block motion-safe:peer-focus:peer-not-data-filled:animate-[dx-otp-caret_1s_steps(1)_infinite]"
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
] }),
|
|
63
|
+
s && t === s - 1 && t < a - 1 && /* @__PURE__ */ o("span", { "aria-hidden": !0, className: "h-px w-2.5 rounded-full bg-border-strong" })
|
|
64
|
+
] }, t))
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
export {
|
|
69
|
+
y as OTPInput
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=OTPInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OTPInput.js","sources":["../../src/components/OTPInput.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, type Ref } from \"react\";\nimport { OTPField } from \"@base-ui/react/otp-field\";\nimport { cn } from \"../lib/cn\";\n\n/* ----------------------------------------------------------------------------\n OTP INPUT\n\n The reason a one-time code gets its own component rather than a text field\n is entirely about what happens around the typing:\n\n PASTE fills every box at once. People paste these codes far more often\n than they type them, and a field that takes only the first character\n of a pasted string is the single most infuriating version of this\n control.\n BACKSPACE steps back into the previous box when the current one is empty,\n instead of stopping dead.\n AUTOFILL from an SMS works, because the underlying input keeps\n `autocomplete=\"one-time-code\"` — separate inputs per digit break\n that, which is why the hand-rolled six-input version is wrong even\n when it looks identical.\n\n The caret is drawn, not native. A real caret in a centred single-character\n box sits beside the digit rather than under the next slot, so the active box\n is marked with a ring and a blinking bar instead.\n -------------------------------------------------------------------------- */\n\nexport interface OTPInputProps\n extends Omit<OTPField.Root.Props, \"className\" | \"render\" | \"length\"> {\n /** How many characters. 6 is the near-universal default. */\n length?: number;\n /** Draw a gap after this many characters — \"123 456\" reads faster than \"123456\". */\n groupAfter?: number;\n className?: string;\n /** Focus the first box when the input appears, so typing lands at once. */\n autoFocus?: boolean;\n ref?: Ref<HTMLDivElement>;\n}\n\nexport function OTPInput({\n length = 6,\n groupAfter,\n className,\n autoFocus,\n ref,\n ...props\n}: OTPInputProps) {\n const rootRef = useRef<HTMLDivElement | null>(null);\n // DX-5127: the root is a div, so the DOM autofocus attribute does nothing;\n // focus the first box ourselves when the input mounts.\n useEffect(() => {\n if (autoFocus) rootRef.current?.querySelector(\"input\")?.focus();\n }, [autoFocus]);\n const setRoot = useCallback(\n (node: HTMLDivElement | null) => {\n rootRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n return (\n <OTPField.Root\n ref={setRoot}\n length={length}\n className={cn(\"flex items-center gap-2\", className)}\n {...props}\n >\n {/* Slots take their index from their POSITION, not a prop — which is\n why the count lives on the root and these are rendered bare. */}\n {Array.from({ length }, (_, index) => (\n <span key={index} className=\"flex items-center gap-2\">\n <span className=\"relative\">\n <OTPField.Input\n data-autofocus={autoFocus && index === 0 ? \"\" : undefined}\n className={cn(\n \"peer\",\n \"grid h-control-md w-11 place-items-center rounded-md\",\n \"border border-field-border bg-field\",\n \"text-center font-mono text-lg tabular-nums text-primary\",\n \"transition-[var(--tx-colors),box-shadow] duration-(--dur-fast) ease-hover\",\n \"hover:not-disabled:border-field-border-hover\",\n /* DX-5127: the box holding real focus IS the active slot (the\n next digit goes into the focused box), so it gets the ring;\n Base UI has no per-slot \"active\" attribute. A filled box\n reads as filled: stronger border and a tinted background. */\n \"focus:border-control focus:shadow-[0_0_0_3px_var(--control-focus-halo)]\",\n \"data-filled:border-border-strong data-filled:bg-surface-sunken\",\n \"data-invalid:border-danger\",\n \"disabled:opacity-45\",\n \"outline-none\",\n )}\n />\n {/* The drawn caret: only in the focused, still-empty box. */}\n <span\n aria-hidden\n className=\"pointer-events-none absolute left-1/2 top-1/2 hidden h-5 w-px -translate-x-1/2 -translate-y-1/2 bg-primary peer-focus:peer-not-data-filled:block motion-safe:peer-focus:peer-not-data-filled:animate-[dx-otp-caret_1s_steps(1)_infinite]\"\n />\n </span>\n {groupAfter && index === groupAfter - 1 && index < length - 1 && (\n <span aria-hidden className=\"h-px w-2.5 rounded-full bg-border-strong\" />\n )}\n </span>\n ))}\n </OTPField.Root>\n );\n}\n"],"names":["OTPInput","length","groupAfter","className","autoFocus","ref","props","rootRef","useRef","useEffect","setRoot","useCallback","node","jsx","OTPField","cn","_","index","jsxs"],"mappings":";;;;AAsCO,SAASA,EAAS;AAAA,EACvB,QAAAC,IAAS;AAAA,EACT,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,KAAAC;AAAA,EACA,GAAGC;AACL,GAAkB;AAChB,QAAMC,IAAUC,EAA8B,IAAI;AAGlD,EAAAC,EAAU,MAAM;AACd,IAAIL,KAAWG,EAAQ,SAAS,cAAc,OAAO,GAAG,MAAA;AAAA,EAC1D,GAAG,CAACH,CAAS,CAAC;AACd,QAAMM,IAAUC;AAAA,IACd,CAACC,MAAgC;AAC/B,MAAAL,EAAQ,UAAUK,GACd,OAAOP,KAAQ,aAAYA,EAAIO,CAAI,IAC9BP,QAAS,UAAUO;AAAA,IAC9B;AAAA,IACA,CAACP,CAAG;AAAA,EAAA;AAEN,SACE,gBAAAQ;AAAA,IAACC,EAAS;AAAA,IAAT;AAAA,MACC,KAAKJ;AAAA,MACL,QAAAT;AAAA,MACA,WAAWc,EAAG,2BAA2BZ,CAAS;AAAA,MACjD,GAAGG;AAAA,MAIH,UAAA,MAAM,KAAK,EAAE,QAAAL,EAAA,GAAU,CAACe,GAAGC,MAC1B,gBAAAC,EAAC,QAAA,EAAiB,WAAU,2BAC1B,UAAA;AAAA,QAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,YACd,UAAA;AAAA,UAAA,gBAAAL;AAAA,YAACC,EAAS;AAAA,YAAT;AAAA,cACC,kBAAgBV,KAAaa,MAAU,IAAI,KAAK;AAAA,cAChD,WAAWF;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,UAGF,gBAAAF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAW;AAAA,cACX,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACZ,GACF;AAAA,QACCX,KAAce,MAAUf,IAAa,KAAKe,IAAQhB,IAAS,KAC1D,gBAAAY,EAAC,QAAA,EAAK,eAAW,IAAC,WAAU,2CAAA,CAA2C;AAAA,MAAA,EAAA,GA7BhEI,CA+BX,CACD;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|