cursedbelt 5.40.0 → 5.45.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/dist/react/Toast.d.ts +12 -2
- package/dist/react/Toast.d.ts.map +1 -1
- package/dist/react/Toast.js +32 -3
- package/dist/react/Toast.js.map +1 -1
- package/dist/react/analytics/MetricDrilldown.js +1 -1
- package/dist/react/charts/AreaChart.d.ts.map +1 -1
- package/dist/react/charts/AreaChart.js +5 -5
- package/dist/react/charts/AreaChart.js.map +1 -1
- package/dist/react/charts/BarChart.d.ts.map +1 -1
- package/dist/react/charts/BarChart.js +3 -3
- package/dist/react/charts/BarChart.js.map +1 -1
- package/dist/react/charts/ChartCard.d.ts +53 -0
- package/dist/react/charts/ChartCard.d.ts.map +1 -0
- package/dist/react/charts/ChartCard.js +46 -0
- package/dist/react/charts/ChartCard.js.map +1 -0
- package/dist/react/charts/ChartFrame.d.ts +12 -5
- package/dist/react/charts/ChartFrame.d.ts.map +1 -1
- package/dist/react/charts/ChartFrame.js +12 -5
- package/dist/react/charts/ChartFrame.js.map +1 -1
- package/dist/react/charts/ChartLegend.js +1 -1
- package/dist/react/charts/ChartLegend.js.map +1 -1
- package/dist/react/charts/HeatmapChart.js +3 -3
- package/dist/react/charts/HeatmapChart.js.map +1 -1
- package/dist/react/charts/IntervalTimeline.js +1 -1
- package/dist/react/charts/IntervalTimeline.js.map +1 -1
- package/dist/react/charts/LineChart.d.ts.map +1 -1
- package/dist/react/charts/LineChart.js +3 -3
- package/dist/react/charts/LineChart.js.map +1 -1
- package/dist/react/charts/TimeSeriesChart.d.ts.map +1 -1
- package/dist/react/charts/TimeSeriesChart.js +6 -6
- package/dist/react/charts/TimeSeriesChart.js.map +1 -1
- package/dist/react/charts/chartBox.d.ts +46 -0
- package/dist/react/charts/chartBox.d.ts.map +1 -0
- package/dist/react/charts/chartBox.js +45 -0
- package/dist/react/charts/chartBox.js.map +1 -0
- package/dist/react/charts/index.d.ts +2 -0
- package/dist/react/charts/index.d.ts.map +1 -1
- package/dist/react/charts/index.js +2 -0
- package/dist/react/charts/index.js.map +1 -1
- package/dist/react/charts/shared.d.ts +13 -2
- package/dist/react/charts/shared.d.ts.map +1 -1
- package/dist/react/charts/shared.js +14 -3
- package/dist/react/charts/shared.js.map +1 -1
- package/dist/react/chat/Bubble.js +4 -4
- package/dist/react/chat/Bubble.js.map +1 -1
- package/dist/react/chat/MessageScroller.js +1 -1
- package/dist/react/chat/MessageScroller.js.map +1 -1
- package/dist/react/components/ActionBar.d.ts.map +1 -1
- package/dist/react/components/ActionBar.js +63 -1
- package/dist/react/components/ActionBar.js.map +1 -1
- package/dist/react/components/AddItemsMenu.js +1 -1
- package/dist/react/components/AddItemsMenu.js.map +1 -1
- package/dist/react/components/Alert.d.ts +16 -2
- package/dist/react/components/Alert.d.ts.map +1 -1
- package/dist/react/components/Alert.js +35 -2
- package/dist/react/components/Alert.js.map +1 -1
- package/dist/react/components/AppShell.d.ts +55 -33
- package/dist/react/components/AppShell.d.ts.map +1 -1
- package/dist/react/components/AppShell.js +121 -31
- package/dist/react/components/AppShell.js.map +1 -1
- package/dist/react/components/AsyncPanel.d.ts +21 -3
- package/dist/react/components/AsyncPanel.d.ts.map +1 -1
- package/dist/react/components/AsyncPanel.js +49 -5
- package/dist/react/components/AsyncPanel.js.map +1 -1
- package/dist/react/components/BannerLane.d.ts +32 -0
- package/dist/react/components/BannerLane.d.ts.map +1 -0
- package/dist/react/components/BannerLane.js +41 -0
- package/dist/react/components/BannerLane.js.map +1 -0
- package/dist/react/components/Button.d.ts.map +1 -1
- package/dist/react/components/Button.js +2 -1
- package/dist/react/components/Button.js.map +1 -1
- package/dist/react/components/ChipFilterStrip.js +1 -1
- package/dist/react/components/ChipFilterStrip.js.map +1 -1
- package/dist/react/components/ComboboxField.d.ts.map +1 -1
- package/dist/react/components/ComboboxField.js +14 -4
- package/dist/react/components/ComboboxField.js.map +1 -1
- package/dist/react/components/CommentThread.js +2 -2
- package/dist/react/components/CommentThread.js.map +1 -1
- package/dist/react/components/ConfirmDialog.js +1 -1
- package/dist/react/components/ConfirmDialog.js.map +1 -1
- package/dist/react/components/DataTable/DataTable.d.ts +18 -2
- package/dist/react/components/DataTable/DataTable.d.ts.map +1 -1
- package/dist/react/components/DataTable/DataTable.js +51 -12
- package/dist/react/components/DataTable/DataTable.js.map +1 -1
- package/dist/react/components/DataTable/Pagination.js +1 -1
- package/dist/react/components/DataTable/Pagination.js.map +1 -1
- package/dist/react/components/DataTable/RowActions.d.ts +7 -1
- package/dist/react/components/DataTable/RowActions.d.ts.map +1 -1
- package/dist/react/components/DataTable/RowActions.js +10 -3
- package/dist/react/components/DataTable/RowActions.js.map +1 -1
- package/dist/react/components/DataTable/TableFilterBuilder.js +1 -1
- package/dist/react/components/DataTable/TableFilterBuilder.js.map +1 -1
- package/dist/react/components/DataTable/cells/CodeCell.js +1 -1
- package/dist/react/components/DataTable/cells/CodeCell.js.map +1 -1
- package/dist/react/components/DataTable/cells/LinkCell.js +1 -1
- package/dist/react/components/DataTable/cells/LinkCell.js.map +1 -1
- package/dist/react/components/DataTable/index.d.ts +1 -1
- package/dist/react/components/DataTable/index.d.ts.map +1 -1
- package/dist/react/components/DataTable/index.js.map +1 -1
- package/dist/react/components/DataTable/types.d.ts +20 -0
- package/dist/react/components/DataTable/types.d.ts.map +1 -1
- package/dist/react/components/DataTable/types.js +22 -0
- package/dist/react/components/DataTable/types.js.map +1 -1
- package/dist/react/components/DateTimeField.d.ts.map +1 -1
- package/dist/react/components/DateTimeField.js +4 -1
- package/dist/react/components/DateTimeField.js.map +1 -1
- package/dist/react/components/DeleteButton.js +2 -0
- package/dist/react/components/DeleteButton.js.map +1 -1
- package/dist/react/components/Drawer.js +3 -3
- package/dist/react/components/Drawer.js.map +1 -1
- package/dist/react/components/DropdownMenu.d.ts +16 -0
- package/dist/react/components/DropdownMenu.d.ts.map +1 -1
- package/dist/react/components/DropdownMenu.js +22 -6
- package/dist/react/components/DropdownMenu.js.map +1 -1
- package/dist/react/components/EmptyState.d.ts +10 -2
- package/dist/react/components/EmptyState.d.ts.map +1 -1
- package/dist/react/components/EmptyState.js +10 -5
- package/dist/react/components/EmptyState.js.map +1 -1
- package/dist/react/components/EventTimeline.js +1 -1
- package/dist/react/components/EventTimeline.js.map +1 -1
- package/dist/react/components/FileDropZone.js +1 -1
- package/dist/react/components/FileDropZone.js.map +1 -1
- package/dist/react/components/Grid.d.ts +9 -1
- package/dist/react/components/Grid.d.ts.map +1 -1
- package/dist/react/components/Grid.js +20 -2
- package/dist/react/components/Grid.js.map +1 -1
- package/dist/react/components/Guide.d.ts +31 -0
- package/dist/react/components/Guide.d.ts.map +1 -0
- package/dist/react/components/Guide.js +18 -0
- package/dist/react/components/Guide.js.map +1 -0
- package/dist/react/components/InfoHintImpl.d.ts +0 -13
- package/dist/react/components/InfoHintImpl.d.ts.map +1 -1
- package/dist/react/components/InfoHintImpl.js +17 -1
- package/dist/react/components/InfoHintImpl.js.map +1 -1
- package/dist/react/components/InlineEditableText.js +1 -1
- package/dist/react/components/InlineEditableText.js.map +1 -1
- package/dist/react/components/IsolatedFrame.js +1 -1
- package/dist/react/components/IsolatedFrame.js.map +1 -1
- package/dist/react/components/ListToolbar.d.ts.map +1 -1
- package/dist/react/components/ListToolbar.js +2 -2
- package/dist/react/components/ListToolbar.js.map +1 -1
- package/dist/react/components/LogViewer.d.ts +26 -2
- package/dist/react/components/LogViewer.d.ts.map +1 -1
- package/dist/react/components/LogViewer.js +41 -26
- package/dist/react/components/LogViewer.js.map +1 -1
- package/dist/react/components/Modal.d.ts +5 -1
- package/dist/react/components/Modal.d.ts.map +1 -1
- package/dist/react/components/Modal.js +18 -8
- package/dist/react/components/Modal.js.map +1 -1
- package/dist/react/components/Page.d.ts +51 -7
- package/dist/react/components/Page.d.ts.map +1 -1
- package/dist/react/components/Page.js +53 -8
- package/dist/react/components/Page.js.map +1 -1
- package/dist/react/components/PageGuideButton.d.ts +11 -0
- package/dist/react/components/PageGuideButton.d.ts.map +1 -0
- package/dist/react/components/PageGuideButton.js +13 -0
- package/dist/react/components/PageGuideButton.js.map +1 -0
- package/dist/react/components/PanelSeparator.js +1 -1
- package/dist/react/components/PanelSeparator.js.map +1 -1
- package/dist/react/components/Popover.d.ts.map +1 -1
- package/dist/react/components/Popover.js +2 -1
- package/dist/react/components/Popover.js.map +1 -1
- package/dist/react/components/PromptDialog.js +1 -1
- package/dist/react/components/PromptDialog.js.map +1 -1
- package/dist/react/components/ScrollArea.d.ts +9 -1
- package/dist/react/components/ScrollArea.d.ts.map +1 -1
- package/dist/react/components/ScrollArea.js +9 -3
- package/dist/react/components/ScrollArea.js.map +1 -1
- package/dist/react/components/Section.d.ts +5 -2
- package/dist/react/components/Section.d.ts.map +1 -1
- package/dist/react/components/Section.js +5 -2
- package/dist/react/components/Section.js.map +1 -1
- package/dist/react/components/Skeleton.d.ts +19 -1
- package/dist/react/components/Skeleton.d.ts.map +1 -1
- package/dist/react/components/Skeleton.js +24 -2
- package/dist/react/components/Skeleton.js.map +1 -1
- package/dist/react/components/StatStrip.js +1 -1
- package/dist/react/components/StatStrip.js.map +1 -1
- package/dist/react/components/StatTile.d.ts +30 -3
- package/dist/react/components/StatTile.d.ts.map +1 -1
- package/dist/react/components/StatTile.js +35 -9
- package/dist/react/components/StatTile.js.map +1 -1
- package/dist/react/components/StatTileGrid.d.ts +10 -1
- package/dist/react/components/StatTileGrid.d.ts.map +1 -1
- package/dist/react/components/StatTileGrid.js +50 -33
- package/dist/react/components/StatTileGrid.js.map +1 -1
- package/dist/react/components/StatusPill.d.ts.map +1 -1
- package/dist/react/components/StatusPill.js +26 -1
- package/dist/react/components/StatusPill.js.map +1 -1
- package/dist/react/components/Surface.d.ts +1 -1
- package/dist/react/components/Surface.d.ts.map +1 -1
- package/dist/react/components/Surface.js +20 -11
- package/dist/react/components/Surface.js.map +1 -1
- package/dist/react/components/SwatchPicker.d.ts.map +1 -1
- package/dist/react/components/SwatchPicker.js +5 -1
- package/dist/react/components/SwatchPicker.js.map +1 -1
- package/dist/react/components/Switch.js +1 -1
- package/dist/react/components/Switch.js.map +1 -1
- package/dist/react/components/WidgetHeader.js +1 -1
- package/dist/react/components/WidgetHeader.js.map +1 -1
- package/dist/react/components/calendar/CalendarLegend.js +1 -1
- package/dist/react/components/calendar/CalendarLegend.js.map +1 -1
- package/dist/react/components/calendar/DayAgenda.js +1 -1
- package/dist/react/components/calendar/DayAgenda.js.map +1 -1
- package/dist/react/components/calendar/EventChip.js +1 -1
- package/dist/react/components/calendar/EventChip.js.map +1 -1
- package/dist/react/components/calendar/MonthGrid.js +1 -1
- package/dist/react/components/calendar/MonthGrid.js.map +1 -1
- package/dist/react/components/calendar/WeekView.js +2 -2
- package/dist/react/components/calendar/WeekView.js.map +1 -1
- package/dist/react/components/cardFrame.d.ts +16 -0
- package/dist/react/components/cardFrame.d.ts.map +1 -0
- package/dist/react/components/cardFrame.js +24 -0
- package/dist/react/components/cardFrame.js.map +1 -0
- package/dist/react/components/dialog.d.ts.map +1 -1
- package/dist/react/components/dialog.js +2 -1
- package/dist/react/components/dialog.js.map +1 -1
- package/dist/react/dashboard-grid/WidgetFrame.js +2 -2
- package/dist/react/dashboard-grid/WidgetFrame.js.map +1 -1
- package/dist/react/emoji/EmojiPicker.js +1 -1
- package/dist/react/emoji/EmojiPicker.js.map +1 -1
- package/dist/react/file-tree/FileTree.d.ts +8 -1
- package/dist/react/file-tree/FileTree.d.ts.map +1 -1
- package/dist/react/file-tree/FileTree.js +29 -4
- package/dist/react/file-tree/FileTree.js.map +1 -1
- package/dist/react/filter-rail/FilterRail.js +1 -1
- package/dist/react/filter-rail/FilterRail.js.map +1 -1
- package/dist/react/icons.js +1 -1
- package/dist/react/icons.js.map +1 -1
- package/dist/react/index.d.ts +8 -5
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +5 -2
- package/dist/react/index.js.map +1 -1
- package/dist/react/lib/menuSections.d.ts +8 -0
- package/dist/react/lib/menuSections.d.ts.map +1 -0
- package/dist/react/lib/menuSections.js +37 -0
- package/dist/react/lib/menuSections.js.map +1 -0
- package/dist/react/markdown/Markdown.js +2 -2
- package/dist/react/markdown/Markdown.js.map +1 -1
- package/dist/react/media/HoverScrubVideoThumb.js +1 -1
- package/dist/react/media/HoverScrubVideoThumb.js.map +1 -1
- package/dist/react/media/MaskPainter.js +1 -1
- package/dist/react/media/MediaUploadControl.js +1 -1
- package/dist/react/media/MediaUploadControl.js.map +1 -1
- package/dist/react/media/VideoTrimmer.js +1 -1
- package/dist/react/media/VideoTrimmer.js.map +1 -1
- package/dist/react/media/denseGallery.css +5 -1
- package/dist/react/namespace/NamespaceTargetCapsule.js +1 -1
- package/dist/react/namespace/NamespaceTargetCapsule.js.map +1 -1
- package/dist/react/nav/BreadcrumbTrail.js +1 -1
- package/dist/react/nav/BreadcrumbTrail.js.map +1 -1
- package/dist/react/nav/CommandBar.d.ts +7 -1
- package/dist/react/nav/CommandBar.d.ts.map +1 -1
- package/dist/react/nav/CommandBar.js +5 -3
- package/dist/react/nav/CommandBar.js.map +1 -1
- package/dist/react/nav/PlaceBar.d.ts.map +1 -1
- package/dist/react/nav/PlaceBar.js +7 -9
- package/dist/react/nav/PlaceBar.js.map +1 -1
- package/dist/react/nav/SideNav.d.ts +12 -2
- package/dist/react/nav/SideNav.d.ts.map +1 -1
- package/dist/react/nav/SideNav.js +42 -22
- package/dist/react/nav/SideNav.js.map +1 -1
- package/dist/react/nav/TopBar.d.ts +65 -31
- package/dist/react/nav/TopBar.d.ts.map +1 -1
- package/dist/react/nav/TopBar.js +59 -24
- package/dist/react/nav/TopBar.js.map +1 -1
- package/dist/react/nav/index.d.ts +1 -1
- package/dist/react/nav/index.d.ts.map +1 -1
- package/dist/react/nav/index.js +1 -1
- package/dist/react/nav/index.js.map +1 -1
- package/dist/react/nav/navShared.d.ts +10 -1
- package/dist/react/nav/navShared.d.ts.map +1 -1
- package/dist/react/nav/navShared.js +23 -0
- package/dist/react/nav/navShared.js.map +1 -1
- package/dist/react/notifications/NotificationFeed.js +2 -2
- package/dist/react/notifications/NotificationFeed.js.map +1 -1
- package/dist/react/palette/Command.d.ts.map +1 -1
- package/dist/react/palette/Command.js +1 -1
- package/dist/react/palette/Command.js.map +1 -1
- package/dist/react/palette/CommandPalette.d.ts +13 -1
- package/dist/react/palette/CommandPalette.d.ts.map +1 -1
- package/dist/react/palette/CommandPalette.js +44 -8
- package/dist/react/palette/CommandPalette.js.map +1 -1
- package/dist/react/palette/commandSources.d.ts +57 -0
- package/dist/react/palette/commandSources.d.ts.map +1 -0
- package/dist/react/palette/commandSources.js +129 -0
- package/dist/react/palette/commandSources.js.map +1 -0
- package/dist/react/palette/index.d.ts +1 -0
- package/dist/react/palette/index.d.ts.map +1 -1
- package/dist/react/palette/index.js +1 -0
- package/dist/react/palette/index.js.map +1 -1
- package/dist/react/rich-text/RichTextEditor.js +1 -1
- package/dist/react/rich-text/RichTextEditor.js.map +1 -1
- package/dist/react/rich-text/RichTextToolbar.js +1 -1
- package/dist/react/rich-text/RichTextToolbar.js.map +1 -1
- package/dist/scripts/guardrailsEnforce.d.ts.map +1 -1
- package/dist/styles-areas/analytics.css +16 -16
- package/dist/styles-areas/auth.css +3 -3
- package/dist/styles-areas/calendar.css +6 -6
- package/dist/styles-areas/chart-table.css +1 -1
- package/dist/styles-areas/charts.css +3 -3
- package/dist/styles-areas/chat.css +7 -6
- package/dist/styles-areas/companion-link.css +2 -2
- package/dist/styles-areas/core.css +98 -89
- package/dist/styles-areas/dashboard-grid.css +4 -4
- package/dist/styles-areas/data-table.css +16 -16
- package/dist/styles-areas/disk-usage.css +5 -5
- package/dist/styles-areas/emoji.css +2 -2
- package/dist/styles-areas/fields.css +13 -14
- package/dist/styles-areas/filter-rail.css +4 -4
- package/dist/styles-areas/folder-tree.css +3 -3
- package/dist/styles-areas/markdown.css +2 -1
- package/dist/styles-areas/master-detail.css +3 -3
- package/dist/styles-areas/media-gallery.css +8 -8
- package/dist/styles-areas/media.css +12 -13
- package/dist/styles-areas/nav.css +28 -14
- package/dist/styles-areas/notifications.css +4 -4
- package/dist/styles-areas/overlays.css +4 -4
- package/dist/styles-areas/palette.css +4 -3
- package/dist/styles-areas/rich-text.css +3 -3
- package/dist/styles-areas/sharing.css +4 -3
- package/dist/styles-areas/stats.css +9 -8
- package/dist/styles-areas/test-report.css +3 -3
- package/dist/styles-areas/wizard.css +6 -5
- package/dist/styles-areas/workbench.css +10 -9
- package/dist/styles-areas/workbook-viewer.css +2 -2
- package/dist/styles-utilities.css +272 -187
- package/dist/testing/designAudit.d.ts.map +1 -1
- package/dist/testing/designAudit.js +4 -0
- package/dist/testing/designAudit.js.map +1 -1
- package/dist/testing/designBaseline.d.ts.map +1 -1
- package/dist/testing/designBaseline.js +4 -0
- package/dist/testing/designBaseline.js.map +1 -1
- package/dist/theme.css +103 -2
- package/package.json +3 -2
- package/scripts/guardrails-baseline.json +2 -1
- package/scripts/guardrailsEnforce.spec.ts +64 -0
- package/scripts/guardrailsEnforce.ts +65 -8
- package/scripts/styleAreas.ts +1 -0
- package/src/nodeTypesDeclared.spec.ts +47 -0
- package/src/react/Toast.spec.tsx +43 -0
- package/src/react/Toast.tsx +45 -2
- package/src/react/analytics/MetricDrilldown.tsx +1 -1
- package/src/react/charts/AreaChart.tsx +9 -8
- package/src/react/charts/BarChart.tsx +11 -10
- package/src/react/charts/ChartCard.tsx +146 -0
- package/src/react/charts/ChartFrame.tsx +28 -10
- package/src/react/charts/ChartLegend.tsx +1 -1
- package/src/react/charts/HeatmapChart.tsx +5 -5
- package/src/react/charts/IntervalTimeline.tsx +2 -2
- package/src/react/charts/LineChart.tsx +9 -8
- package/src/react/charts/TimeSeriesChart.tsx +11 -10
- package/src/react/charts/chartBox.spec.ts +40 -0
- package/src/react/charts/chartBox.ts +75 -0
- package/src/react/charts/index.ts +2 -0
- package/src/react/charts/shared.ts +16 -3
- package/src/react/chat/Bubble.tsx +5 -5
- package/src/react/chat/MessageScroller.tsx +1 -1
- package/src/react/components/ActionBar.spec.tsx +90 -0
- package/src/react/components/ActionBar.tsx +82 -2
- package/src/react/components/AddItemsMenu.tsx +1 -1
- package/src/react/components/Alert.spec.tsx +32 -2
- package/src/react/components/Alert.tsx +47 -3
- package/src/react/components/AppShell.spec.tsx +199 -13
- package/src/react/components/AppShell.tsx +235 -92
- package/src/react/components/AsyncPanel.spec.tsx +7 -1
- package/src/react/components/AsyncPanel.tsx +85 -5
- package/src/react/components/BannerLane.tsx +128 -0
- package/src/react/components/Button.tsx +2 -0
- package/src/react/components/ChipFilterStrip.tsx +1 -1
- package/src/react/components/ComboboxField.tsx +20 -3
- package/src/react/components/CommentThread.tsx +2 -2
- package/src/react/components/ConfirmDialog.tsx +1 -1
- package/src/react/components/DataTable/DataTable.tsx +80 -8
- package/src/react/components/DataTable/Pagination.tsx +1 -1
- package/src/react/components/DataTable/RowActions.tsx +55 -2
- package/src/react/components/DataTable/TableFilterBuilder.tsx +1 -1
- package/src/react/components/DataTable/cells/CodeCell.tsx +1 -1
- package/src/react/components/DataTable/cells/LinkCell.tsx +1 -1
- package/src/react/components/DataTable/index.ts +1 -0
- package/src/react/components/DataTable/numericColumn.spec.ts +19 -0
- package/src/react/components/DataTable/types.ts +36 -0
- package/src/react/components/DateTimeField.tsx +3 -1
- package/src/react/components/DeleteButton.tsx +3 -0
- package/src/react/components/Drawer.tsx +3 -3
- package/src/react/components/DropdownMenu.spec.tsx +55 -0
- package/src/react/components/DropdownMenu.tsx +73 -20
- package/src/react/components/EmptyState.tsx +26 -7
- package/src/react/components/EventTimeline.tsx +1 -1
- package/src/react/components/Field.width.spec.tsx +11 -0
- package/src/react/components/FileDropZone.tsx +1 -1
- package/src/react/components/Grid.spec.tsx +44 -0
- package/src/react/components/Grid.tsx +41 -11
- package/src/react/components/Guide.tsx +77 -0
- package/src/react/components/InfoHint.spec.tsx +21 -0
- package/src/react/components/InfoHintImpl.tsx +22 -1
- package/src/react/components/InlineEditableText.tsx +1 -1
- package/src/react/components/IsolatedFrame.tsx +1 -1
- package/src/react/components/ListToolbar.spec.tsx +12 -0
- package/src/react/components/ListToolbar.tsx +8 -5
- package/src/react/components/LogViewer.tsx +118 -18
- package/src/react/components/Modal.spec.tsx +17 -2
- package/src/react/components/Modal.tsx +25 -10
- package/src/react/components/MultiSelectField.spec.tsx +6 -0
- package/src/react/components/Page.spec.tsx +89 -5
- package/src/react/components/Page.tsx +100 -16
- package/src/react/components/PageGuideButton.tsx +42 -0
- package/src/react/components/PanelSeparator.tsx +1 -1
- package/src/react/components/Popover.tsx +3 -1
- package/src/react/components/PromptDialog.tsx +1 -1
- package/src/react/components/ScrollArea.spec.tsx +20 -0
- package/src/react/components/ScrollArea.tsx +19 -0
- package/src/react/components/Section.spec.tsx +82 -1
- package/src/react/components/Section.tsx +10 -4
- package/src/react/components/Skeleton.tsx +50 -2
- package/src/react/components/StatStrip.tsx +1 -1
- package/src/react/components/StatTile.tsx +84 -11
- package/src/react/components/StatTileGrid.spec.tsx +6 -1
- package/src/react/components/StatTileGrid.tsx +25 -0
- package/src/react/components/StatusPill.tsx +26 -1
- package/src/react/components/Surface.tsx +22 -14
- package/src/react/components/SwatchPicker.tsx +4 -0
- package/src/react/components/Switch.tsx +1 -1
- package/src/react/components/WidgetHeader.tsx +1 -1
- package/src/react/components/calendar/CalendarLegend.tsx +1 -1
- package/src/react/components/calendar/DayAgenda.tsx +1 -1
- package/src/react/components/calendar/EventChip.tsx +1 -1
- package/src/react/components/calendar/MonthGrid.tsx +1 -1
- package/src/react/components/calendar/WeekView.tsx +2 -2
- package/src/react/components/cardFrame.ts +28 -0
- package/src/react/components/dataDisplay.spec.tsx +176 -0
- package/src/react/components/dialog.tsx +4 -1
- package/src/react/dashboard-grid/WidgetFrame.tsx +2 -2
- package/src/react/emoji/EmojiPicker.tsx +1 -1
- package/src/react/file-tree/FileTree.spec.tsx +49 -0
- package/src/react/file-tree/FileTree.tsx +37 -4
- package/src/react/filter-rail/FilterRail.tsx +1 -1
- package/src/react/icons.tsx +1 -1
- package/src/react/index.ts +28 -3
- package/src/react/lib/menuSections.ts +33 -0
- package/src/react/markdown/Markdown.tsx +2 -2
- package/src/react/media/HoverScrubVideoThumb.tsx +2 -2
- package/src/react/media/MaskPainter.tsx +1 -1
- package/src/react/media/MediaUploadControl.tsx +1 -1
- package/src/react/media/VideoTrimmer.tsx +1 -1
- package/src/react/media/denseGallery.css +5 -1
- package/src/react/namespace/NamespaceTargetCapsule.tsx +1 -1
- package/src/react/nav/BreadcrumbTrail.tsx +2 -2
- package/src/react/nav/CommandBar.tsx +14 -3
- package/src/react/nav/PlaceBar.tsx +18 -8
- package/src/react/nav/SideNav.tsx +99 -17
- package/src/react/nav/TopBar.spec.tsx +78 -21
- package/src/react/nav/TopBar.tsx +270 -98
- package/src/react/nav/index.ts +8 -1
- package/src/react/nav/nav.spec.tsx +46 -2
- package/src/react/nav/navShared.tsx +23 -2
- package/src/react/notifications/NotificationFeed.tsx +2 -2
- package/src/react/palette/Command.tsx +1 -1
- package/src/react/palette/CommandPalette.spec.tsx +31 -0
- package/src/react/palette/CommandPalette.tsx +108 -11
- package/src/react/palette/commandSources.tsx +186 -0
- package/src/react/palette/index.ts +7 -0
- package/src/react/rich-text/RichTextEditor.tsx +1 -1
- package/src/react/rich-text/RichTextToolbar.tsx +1 -1
- package/src/styles-areas/analytics.css +16 -16
- package/src/styles-areas/auth.css +3 -3
- package/src/styles-areas/calendar.css +6 -6
- package/src/styles-areas/chart-table.css +1 -1
- package/src/styles-areas/charts.css +3 -3
- package/src/styles-areas/chat.css +7 -6
- package/src/styles-areas/companion-link.css +2 -2
- package/src/styles-areas/core.css +98 -89
- package/src/styles-areas/dashboard-grid.css +4 -4
- package/src/styles-areas/data-table.css +16 -16
- package/src/styles-areas/disk-usage.css +5 -5
- package/src/styles-areas/emoji.css +2 -2
- package/src/styles-areas/fields.css +13 -14
- package/src/styles-areas/filter-rail.css +4 -4
- package/src/styles-areas/folder-tree.css +3 -3
- package/src/styles-areas/markdown.css +2 -1
- package/src/styles-areas/master-detail.css +3 -3
- package/src/styles-areas/media-gallery.css +8 -8
- package/src/styles-areas/media.css +12 -13
- package/src/styles-areas/nav.css +28 -14
- package/src/styles-areas/notifications.css +4 -4
- package/src/styles-areas/overlays.css +4 -4
- package/src/styles-areas/palette.css +4 -3
- package/src/styles-areas/rich-text.css +3 -3
- package/src/styles-areas/sharing.css +4 -3
- package/src/styles-areas/stats.css +9 -8
- package/src/styles-areas/test-report.css +3 -3
- package/src/styles-areas/wizard.css +6 -5
- package/src/styles-areas/workbench.css +10 -9
- package/src/styles-areas/workbook-viewer.css +2 -2
- package/src/styles-utilities.css +272 -187
- package/src/testing/designAudit.ts +3 -0
- package/src/testing/designBaseline.ts +4 -0
- package/src/theme.css +103 -2
- package/src/themeDarkScopeAliases.spec.ts +65 -0
|
@@ -35,7 +35,7 @@ export function StatStrip({ items, orientation = 'horizontal', flat = false, cla
|
|
|
35
35
|
const fade = useScrollEdgeFade();
|
|
36
36
|
const row = (_jsx("div", { className: cn(horizontal ? 'flex divide-x divide-border' : 'flex flex-col divide-y divide-border', className), children: items.map((item) => {
|
|
37
37
|
const interactive = item.onClick !== undefined;
|
|
38
|
-
const itemClass = cn('group/stat flex min-w-0 flex-col gap-0.5 text-left', horizontal ? 'min-w-
|
|
38
|
+
const itemClass = cn('group/stat flex min-w-0 flex-col gap-0.5 text-left', horizontal ? 'min-w-34 flex-1 shrink-0 px-3 py-2 first:pl-1 last:pr-1' : 'px-1 py-2.5', interactive &&
|
|
39
39
|
'cursor-pointer rounded-sm transition-colors hover:bg-accent/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring');
|
|
40
40
|
const onKeyDown = interactive
|
|
41
41
|
? (e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatStrip.js","sourceRoot":"","sources":["../../../src/react/components/StatStrip.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,QAAQ,GAAiC;IAC7C,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,kBAAkB;CAC5B,CAAC;AAoCF,SAAS,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAmE;IACtG,OAAO,CACL,8BACE,gBAAM,SAAS,EAAC,yCAAyC,aACtD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACX,oCAAkB,SAAS,EAAE,EAAE,CAAC,gCAAgC,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAI,CAC3F,CAAC,CAAC,CAAC,IAAI,EACR,eAAM,SAAS,EAAC,UAAU,YAAE,IAAI,CAAC,KAAK,GAAQ,EAC7C,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CACjB,eACE,SAAS,EAAE,EAAE,CACX,oFAAoF,EACpF,kGAAkG,iBAAiB,EAAE,CACtH,YAEA,IAAI,CAAC,UAAU,GACX,CACR,CAAC,CAAC,CAAC,IAAI,IACH,EACP,eACE,SAAS,EAAE,EAAE,CACX,0DAA0D,EAC1D,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CACvD,YAEA,IAAI,CAAC,KAAK,GACN,EACN,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,+BAA+B,YAAE,IAAI,CAAC,GAAG,GAAQ,CAAC,CAAC,CAAC,IAAI,EACnF,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IACnE,CACJ,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,GAAG,YAAY,EAAE,IAAI,GAAG,KAAK,EAAE,SAAS,EAAkB;IACtG,MAAM,UAAU,GAAG,WAAW,KAAK,YAAY,CAAC;IAChD,gFAAgF;IAChF,+EAA+E;IAC/E,gFAAgF;IAChF,gFAAgF;IAChF,iDAAiD;IACjD,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,CACV,cACE,SAAS,EAAE,EAAE,CACX,UAAU,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,sCAAsC,EACnF,SAAS,CACV,YAEA,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAClB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC;YAC/C,MAAM,SAAS,GAAG,EAAE,CAClB,oDAAoD,EACpD,UAAU,CAAC,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"StatStrip.js","sourceRoot":"","sources":["../../../src/react/components/StatStrip.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
2
|
interface Progress {
|
|
3
3
|
value: number;
|
|
4
4
|
max: number;
|
|
@@ -11,6 +11,28 @@ interface Progress {
|
|
|
11
11
|
* snippets in borders"). `neutral` renders a gray bar (an explicit "inert" reading,
|
|
12
12
|
* distinct from omitting the prop, which renders no bar at all). */
|
|
13
13
|
export type StatTileTone = 'success' | 'warning' | 'danger' | 'neutral';
|
|
14
|
+
/**
|
|
15
|
+
* A budget (DAT-9): a quota, a time window or money, drawn as the tile's big value with its
|
|
16
|
+
* meter DIRECTLY underneath and the window it covers at 12px. The color turns at the
|
|
17
|
+
* thresholds — warning, then critical — and the readout says in words what the color means
|
|
18
|
+
* ("60% used"), so the color is never the only signal.
|
|
19
|
+
*/
|
|
20
|
+
export interface StatTileBudget {
|
|
21
|
+
/** Consumed, in the same unit as `max`. */
|
|
22
|
+
used: number;
|
|
23
|
+
max: number;
|
|
24
|
+
/** The window the budget covers — "Sep 30 21:01 → Oct 1 02:01". */
|
|
25
|
+
window?: ReactNode;
|
|
26
|
+
/** Fractions of `max` (0–1) where the color turns. Default 0.85 / 0.95, as `ThresholdMeter`. */
|
|
27
|
+
thresholds?: {
|
|
28
|
+
warning: number;
|
|
29
|
+
critical: number;
|
|
30
|
+
};
|
|
31
|
+
/** The words beside the percentage. Default `used`. */
|
|
32
|
+
verb?: string;
|
|
33
|
+
}
|
|
34
|
+
export type StatValueSize = 'sm' | 'md' | 'lg';
|
|
35
|
+
export declare const StatTileValueSizeProvider: import("react").Provider<StatValueSize | null>;
|
|
14
36
|
export interface StatTileProps {
|
|
15
37
|
label: string;
|
|
16
38
|
value: ReactNode;
|
|
@@ -28,7 +50,9 @@ export interface StatTileProps {
|
|
|
28
50
|
* status-word tiles ("Running" / "Executing" / "Off") must share ONE size — the
|
|
29
51
|
* auto scale would render them at three different sizes purely by string length.
|
|
30
52
|
*/
|
|
31
|
-
valueSize?:
|
|
53
|
+
valueSize?: StatValueSize;
|
|
54
|
+
/** Draw the tile as a budget — see {@link StatTileBudget}. Replaces `progress`. */
|
|
55
|
+
budget?: StatTileBudget;
|
|
32
56
|
/**
|
|
33
57
|
* Makes the WHOLE tile a click target — {@link StatTileGrid} reads this off its
|
|
34
58
|
* child and turns that cell's card into the pressable surface (hover border
|
|
@@ -91,6 +115,9 @@ export interface StatTileProps {
|
|
|
91
115
|
since?: ReactNode;
|
|
92
116
|
};
|
|
93
117
|
}
|
|
118
|
+
/** The size a value would pick ON ITS OWN — by length, so "Executing" never overflows a
|
|
119
|
+
* tile that "42" fits. {@link StatTileGrid} takes the smallest across its tiles. */
|
|
120
|
+
export declare function statValueSize(value: ReactNode): StatValueSize;
|
|
94
121
|
/**
|
|
95
122
|
* A compact dashboard stat: label + big value (auto-sized) + optional sub / spark / progress.
|
|
96
123
|
*
|
|
@@ -99,6 +126,6 @@ export interface StatTileProps {
|
|
|
99
126
|
* `h-full`: a percent height inside an auto-height `flex-wrap` row is circular, and
|
|
100
127
|
* wrapped tiles end up painting over whatever renders below the row.
|
|
101
128
|
*/
|
|
102
|
-
export declare function StatTile({ label, value, sub, spark, progress, color, icon, tone, valueSize, onPress, actionHint, help, copyValue, delta, }: StatTileProps): import("react").JSX.Element;
|
|
129
|
+
export declare function StatTile({ label, value, sub, spark, progress, color, icon, tone, valueSize, onPress, actionHint, help, copyValue, delta, budget, }: StatTileProps): import("react").JSX.Element;
|
|
103
130
|
export {};
|
|
104
131
|
//# sourceMappingURL=StatTile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatTile.d.ts","sourceRoot":"","sources":["../../../src/react/components/StatTile.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"StatTile.d.ts","sourceRoot":"","sources":["../../../src/react/components/StatTile.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAUlE,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;qEAIqE;AACrE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AASxE;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,gGAAgG;IAChG,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAcD,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAO/C,eAAO,MAAM,yBAAyB,gDAAyB,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kEAAkE;IAClE,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,mFAAmF;IACnF,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;qFACiF;IACjF,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;;;;;;;;;;;;OAgBG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAC3C;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,SAAS,CAAC;QACjB;;;;;WAKG;QACH,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;QAC/B,4EAA4E;QAC5E,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;QACpC,4EAA4E;QAC5E,KAAK,CAAC,EAAE,SAAS,CAAC;KACnB,CAAC;CACH;AAwCD;qFACqF;AACrF,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,CAK7D;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EACL,GAAG,EACH,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,OAAO,EACP,UAAU,EACV,IAAI,EACJ,SAAS,EACT,KAAK,EACL,MAAM,GACP,EAAE,aAAa,+BA+If"}
|
|
@@ -1,17 +1,36 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { Info } from 'lucide-react';
|
|
3
|
+
import { createContext, useContext } from 'react';
|
|
3
4
|
import { cn } from '../lib/cn.js';
|
|
4
5
|
import { CopyButton } from './CopyButton.js';
|
|
5
6
|
import { Sparkline } from './Sparkline.js';
|
|
6
7
|
import { TruncatedText } from './TruncatedText.js';
|
|
7
8
|
import { Tooltip } from './Tooltip.js';
|
|
8
9
|
import { TAP_TARGET_ALWAYS } from '../lib/tapTarget.js';
|
|
10
|
+
import { Progress as ProgressBar } from './Progress.js';
|
|
11
|
+
import { thresholdToneOf } from './ThresholdMeter.js';
|
|
9
12
|
const TONE_BAR = {
|
|
10
13
|
success: 'bg-success',
|
|
11
14
|
warning: 'bg-warning',
|
|
12
15
|
danger: 'bg-destructive',
|
|
13
16
|
neutral: 'bg-border-strong',
|
|
14
17
|
};
|
|
18
|
+
const BUDGET_BAR = {
|
|
19
|
+
ok: 'bg-accent-solid',
|
|
20
|
+
warning: 'bg-warning',
|
|
21
|
+
critical: 'bg-destructive',
|
|
22
|
+
};
|
|
23
|
+
const BUDGET_TEXT = {
|
|
24
|
+
ok: 'text-muted-foreground',
|
|
25
|
+
warning: 'text-warning',
|
|
26
|
+
critical: 'text-destructive',
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* The value size a {@link StatTileGrid} imposes on every tile in it (DAT-8: tiles in a row
|
|
30
|
+
* share ONE value size). `null` outside a grid — a lone tile sizes itself.
|
|
31
|
+
*/
|
|
32
|
+
const GridValueSize = createContext(null);
|
|
33
|
+
export const StatTileValueSizeProvider = GridValueSize.Provider;
|
|
15
34
|
const VALUE_SIZE = { sm: 'text-base', md: 'text-2xl', lg: 'text-3xl' };
|
|
16
35
|
/**
|
|
17
36
|
* Reveal on hover of THIS tile — `group/tile`, which {@link StatTileGrid} puts on
|
|
@@ -44,15 +63,15 @@ function defaultCopyText(label, value, sub) {
|
|
|
44
63
|
const tail = text(sub);
|
|
45
64
|
return tail.length > 0 ? `${head} (${tail})` : head;
|
|
46
65
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
66
|
+
/** The size a value would pick ON ITS OWN — by length, so "Executing" never overflows a
|
|
67
|
+
* tile that "42" fits. {@link StatTileGrid} takes the smallest across its tiles. */
|
|
68
|
+
export function statValueSize(value) {
|
|
50
69
|
const s = typeof value === 'string' ? value : typeof value === 'number' ? String(value) : '';
|
|
51
70
|
if (s.length > 12)
|
|
52
|
-
return '
|
|
71
|
+
return 'sm';
|
|
53
72
|
if (s.length > 7)
|
|
54
|
-
return '
|
|
55
|
-
return '
|
|
73
|
+
return 'md';
|
|
74
|
+
return 'lg';
|
|
56
75
|
}
|
|
57
76
|
/**
|
|
58
77
|
* A compact dashboard stat: label + big value (auto-sized) + optional sub / spark / progress.
|
|
@@ -62,13 +81,20 @@ function valueClass(value, valueSize) {
|
|
|
62
81
|
* `h-full`: a percent height inside an auto-height `flex-wrap` row is circular, and
|
|
63
82
|
* wrapped tiles end up painting over whatever renders below the row.
|
|
64
83
|
*/
|
|
65
|
-
export function StatTile({ label, value, sub, spark, progress, color, icon, tone, valueSize, onPress, actionHint, help, copyValue, delta, }) {
|
|
84
|
+
export function StatTile({ label, value, sub, spark, progress, color, icon, tone, valueSize, onPress, actionHint, help, copyValue, delta, budget, }) {
|
|
85
|
+
const gridSize = useContext(GridValueSize);
|
|
86
|
+
const size = valueSize ?? gridSize ?? statValueSize(value);
|
|
87
|
+
const budgetRatio = budget && budget.max > 0 ? Math.min(1, Math.max(0, budget.used / budget.max)) : null;
|
|
88
|
+
const budgetTone = budgetRatio == null ? null : thresholdToneOf(budgetRatio, budget?.thresholds);
|
|
89
|
+
// The BAR stops at full; the words do not — 1.11M of a 1M allowance is "111% used", and a
|
|
90
|
+
// readout clamped to 100% would hide exactly the overrun the tile exists to show.
|
|
91
|
+
const budgetPercent = budget && budget.max > 0 ? Math.round((budget.used / budget.max) * 100) : 0;
|
|
66
92
|
const pct = progress && progress.max > 0 ? Math.round((progress.value / progress.max) * 100) : null;
|
|
67
93
|
const body = (_jsxs("div", { className: cn('flex min-w-0 flex-col justify-between gap-2', tone && 'flex-1'), children: [_jsxs("div", { className: 'flex items-center justify-between gap-2', children: [_jsxs("span", { className: 'flex min-w-0 items-center gap-1', children: [_jsx(TruncatedText, { className: 'cb-meta-label min-w-0', children: label }), help ? (_jsxs(_Fragment, { children: [_jsx(Tooltip, { content: help, multiline: true, maxWidth: 300, mobile: 'tap', children: _jsx("span", { "aria-hidden": true, className: 'inline-flex size-4 shrink-0 cursor-help items-center justify-center rounded-full text-muted-foreground', children: _jsx(Info, { className: 'size-3.5' }) }) }), _jsxs("span", { className: 'sr-only', "data-cb-stat-help": true, children: [`What "${label}" means: `, help] })] })) : null] }), onPress && actionHint ? (_jsx("span", { "aria-hidden": true, className: `text-caption font-medium text-muted-foreground opacity-0 transition-opacity group-hover/tile:opacity-100 group-focus-visible/tile:opacity-100 ${TAP_TARGET_ALWAYS}`, children: actionHint })) : null, copyValue ? (_jsx(CopyButton, { value: copyValue === true
|
|
68
94
|
? () => defaultCopyText(label, value, sub)
|
|
69
|
-
: copyValue, label: `Copy ${label}`, confirmToast: false, iconSize: 13, stopPropagation: true, className: cn('size-6 shrink-0 p-0', REVEAL_ON_TILE_HOVER) })) : null, icon ? _jsx("span", { className: 'text-muted-foreground', children: icon }) : null] }), _jsx("div", { className: cn(
|
|
95
|
+
: copyValue, label: `Copy ${label}`, confirmToast: false, iconSize: 13, stopPropagation: true, className: cn('size-6 shrink-0 p-0', REVEAL_ON_TILE_HOVER) })) : null, icon ? _jsx("span", { className: 'text-muted-foreground', children: icon }) : null] }), _jsx("div", { className: cn(VALUE_SIZE[size], 'min-w-0 break-words font-semibold leading-tight tabular-nums', budgetTone && budgetTone !== 'ok' && BUDGET_TEXT[budgetTone]), "data-cb-stat-size": size, style: color ? { color } : undefined, children: value }), delta ? (_jsxs("div", { className: 'flex min-w-0 items-baseline gap-1.5 text-xs', children: [_jsxs("span", { className: cn('shrink-0 tabular-nums font-medium', DELTA_CLASS[delta.direction ?? 'flat']), children: [_jsx("span", { "aria-hidden": true, className: 'mr-0.5 text-[length:var(--text-glyph)]', children: TREND_GLYPH[delta.trend ?? 'flat'] }), delta.value] }), delta.since ? (_jsx("span", { className: 'truncate text-muted-foreground', children: delta.since })) : null] })) : null, sub ? (_jsx(Tooltip, { content: typeof sub === 'string' ? sub : undefined, children: _jsx("div", { className: 'truncate text-xs text-muted-foreground', children: sub }) })) : null, budget && budgetRatio != null && budgetTone ? (_jsxs("div", { className: 'flex min-w-0 flex-col gap-1', "data-cb-stat-budget": budgetTone, children: [_jsx(ProgressBar, { value: budgetRatio * 100, max: 100, size: 'sm', indicatorClassName: BUDGET_BAR[budgetTone], "aria-label": `${label}: ${budgetPercent}% ${budget.verb ?? 'used'}` }), _jsxs("div", { className: 'flex min-w-0 items-baseline justify-between gap-2 text-xs', children: [_jsx("span", { className: cn('shrink-0 tabular-nums font-medium', BUDGET_TEXT[budgetTone]), children: `${budgetPercent}% ${budget.verb ?? 'used'}` }), budget.window ? (_jsx("span", { className: 'min-w-0 truncate text-muted-foreground tabular-nums', children: budget.window })) : null] })] })) : null, spark ? _jsx(Sparkline, { data: spark }) : null, !budget && progress && pct != null ? (_jsxs("div", { children: [_jsx("div", { className: 'h-1.5 w-full overflow-hidden rounded-full bg-muted', children: _jsx("div", { className: cn('h-full rounded-full bg-accent-solid', progress.barClassName), style: { width: `${Math.min(100, pct)}%` } }) }), progress.label ? (_jsx("div", { className: 'mt-1 text-xs text-muted-foreground', children: progress.label })) : null] })) : null] }));
|
|
70
96
|
if (!tone)
|
|
71
97
|
return body;
|
|
72
|
-
return (_jsxs("div", { className: 'flex min-w-0 gap-
|
|
98
|
+
return (_jsxs("div", { className: 'flex min-w-0 gap-3', "data-tone": tone, children: [_jsx("span", { "aria-hidden": true, className: cn('w-1 shrink-0 self-stretch rounded-full', TONE_BAR[tone]) }), body] }));
|
|
73
99
|
}
|
|
74
100
|
//# sourceMappingURL=StatTile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatTile.js","sourceRoot":"","sources":["../../../src/react/components/StatTile.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"StatTile.js","sourceRoot":"","sources":["../../../src/react/components/StatTile.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
|
+
import { type StatValueSize } from './StatTile.js';
|
|
2
3
|
export interface StatTileGridProps {
|
|
3
4
|
/** The tiles — normally {@link StatTile}s; each child gets its own cell. */
|
|
4
5
|
children: ReactNode;
|
|
@@ -23,8 +24,16 @@ export interface StatTileGridProps {
|
|
|
23
24
|
* provides a surface (a dashboard widget frame, a padded panel).
|
|
24
25
|
*/
|
|
25
26
|
flat?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* The ONE value size every tile in the grid uses (DAT-8). Default: the smallest any tile's
|
|
29
|
+
* value would pick on its own, so "Executing" and "42" sit at the same size instead of
|
|
30
|
+
* three sizes by string length. A tile's own `valueSize` still wins for that tile.
|
|
31
|
+
*/
|
|
32
|
+
valueSize?: StatValueSize;
|
|
26
33
|
className?: string;
|
|
27
34
|
}
|
|
35
|
+
/** The smallest auto size across the grid's tiles — exported for its spec. */
|
|
36
|
+
export declare function gridValueSize(children: ReactNode): StatValueSize;
|
|
28
37
|
/**
|
|
29
38
|
* THE layout for a strip of {@link StatTile}s: a responsive `auto-fill` grid with
|
|
30
39
|
* equal-height cells, each tile on its own flat {@link Surface} card.
|
|
@@ -38,5 +47,5 @@ export interface StatTileGridProps {
|
|
|
38
47
|
* border highlight, focus ring, Enter/Space activation — the whole card is the
|
|
39
48
|
* target. Inner controls (copy buttons, links) must `stopPropagation()` on click.
|
|
40
49
|
*/
|
|
41
|
-
export declare function StatTileGrid({ children, minTileWidth, fill, flat, className, }: StatTileGridProps): import("react").JSX.Element;
|
|
50
|
+
export declare function StatTileGrid({ children, minTileWidth, fill, flat, valueSize, className, }: StatTileGridProps): import("react").JSX.Element;
|
|
42
51
|
//# sourceMappingURL=StatTileGrid.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatTileGrid.d.ts","sourceRoot":"","sources":["../../../src/react/components/StatTileGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"StatTileGrid.d.ts","sourceRoot":"","sources":["../../../src/react/components/StatTileGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGrF,OAAO,EAAE,KAAK,aAAa,EAA4C,MAAM,eAAe,CAAC;AAG7F,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,QAAQ,EAAE,SAAS,CAAC;IACpB,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,GAAG,aAAa,CAShE;AAUD;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,YAAwB,EACxB,IAAY,EACZ,IAAY,EACZ,SAAS,EACT,SAAS,GACV,EAAE,iBAAiB,+BAsDnB"}
|
|
@@ -2,7 +2,23 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { Children, isValidElement } from 'react';
|
|
3
3
|
import { cn } from '../lib/cn.js';
|
|
4
4
|
import { pressWithoutSelection } from '../lib/selection.js';
|
|
5
|
+
import { StatTileValueSizeProvider, statValueSize } from './StatTile.js';
|
|
5
6
|
import { Surface } from './Surface.js';
|
|
7
|
+
const SIZE_RANK = { sm: 0, md: 1, lg: 2 };
|
|
8
|
+
/** The smallest auto size across the grid's tiles — exported for its spec. */
|
|
9
|
+
export function gridValueSize(children) {
|
|
10
|
+
let size = 'lg';
|
|
11
|
+
Children.forEach(children, (child) => {
|
|
12
|
+
if (!isValidElement(child))
|
|
13
|
+
return;
|
|
14
|
+
if (child.props.valueSize || !('value' in child.props))
|
|
15
|
+
return;
|
|
16
|
+
const own = statValueSize(child.props.value);
|
|
17
|
+
if (SIZE_RANK[own] < SIZE_RANK[size])
|
|
18
|
+
size = own;
|
|
19
|
+
});
|
|
20
|
+
return size;
|
|
21
|
+
}
|
|
6
22
|
/**
|
|
7
23
|
* THE layout for a strip of {@link StatTile}s: a responsive `auto-fill` grid with
|
|
8
24
|
* equal-height cells, each tile on its own flat {@link Surface} card.
|
|
@@ -16,42 +32,43 @@ import { Surface } from './Surface.js';
|
|
|
16
32
|
* border highlight, focus ring, Enter/Space activation — the whole card is the
|
|
17
33
|
* target. Inner controls (copy buttons, links) must `stopPropagation()` on click.
|
|
18
34
|
*/
|
|
19
|
-
export function StatTileGrid({ children, minTileWidth = '10.5rem', fill = false, flat = false, className, }) {
|
|
35
|
+
export function StatTileGrid({ children, minTileWidth = '10.5rem', fill = false, flat = false, valueSize, className, }) {
|
|
36
|
+
const size = valueSize ?? gridValueSize(children);
|
|
20
37
|
// `min(<w>, 100%)` keeps a single narrow container from overflowing horizontally;
|
|
21
38
|
// `auto-fill` (not `auto-fit`) holds cells near minTileWidth instead of ballooning
|
|
22
39
|
// a short strip into comically wide tiles.
|
|
23
40
|
const columns = `repeat(${fill ? 'auto-fit' : 'auto-fill'}, minmax(min(${minTileWidth}, 100%), 1fr))`;
|
|
24
|
-
return (_jsx("div", { className: cn('grid gap-3', className), style: { gridTemplateColumns: columns }, children: Children.map(children, (child) => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
41
|
+
return (_jsx(StatTileValueSizeProvider, { value: size, children: _jsx("div", { className: cn('grid gap-3', className), style: { gridTemplateColumns: columns }, children: Children.map(children, (child) => {
|
|
42
|
+
if (child == null || child === false)
|
|
43
|
+
return null;
|
|
44
|
+
const onPress = isValidElement(child) ? child.props.onPress : undefined;
|
|
45
|
+
const pressProps = onPress
|
|
46
|
+
? {
|
|
47
|
+
role: 'button',
|
|
48
|
+
tabIndex: 0,
|
|
49
|
+
// 🔴 `pressWithoutSelection`, not a bare `onClick`. A pressable card is
|
|
50
|
+
// still text the reader wants to copy (owner report 2026-08-23), and a
|
|
51
|
+
// drag that ENDS inside the card fires `click` on it — so the naive
|
|
52
|
+
// wiring navigates away the instant you finish highlighting the number.
|
|
53
|
+
onClick: pressWithoutSelection(onPress),
|
|
54
|
+
onKeyDown: (e) => {
|
|
55
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
56
|
+
e.preventDefault();
|
|
57
|
+
onPress();
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
'aria-label': isValidElement(child) ? child.props.label : undefined,
|
|
61
|
+
}
|
|
62
|
+
: {};
|
|
63
|
+
// `group/tile` on EVERY cell, not only pressable ones: a tile's own
|
|
64
|
+
// hover-revealed affordances (the copy button) must appear for the tile
|
|
65
|
+
// the pointer is actually over, and a non-pressable tile has them too.
|
|
66
|
+
const interactiveClass = cn('group/tile', onPress &&
|
|
67
|
+
'cursor-pointer transition-colors hover:border-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring');
|
|
68
|
+
// A single-child `grid` cell stretches the tile to the row height without
|
|
69
|
+
// percent heights, so StatTile's `justify-between` pins sub/progress to the
|
|
70
|
+
// card bottom across equal-height siblings.
|
|
71
|
+
return flat ? (_jsx("div", { className: cn('grid min-w-0', interactiveClass), ...pressProps, children: child })) : (_jsx(Surface, { level: 'flat', pad: 'sm', radius: 'lg', className: cn('grid min-w-0', interactiveClass), ...pressProps, children: child }));
|
|
72
|
+
}) }) }));
|
|
56
73
|
}
|
|
57
74
|
//# sourceMappingURL=StatTileGrid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatTileGrid.js","sourceRoot":"","sources":["../../../src/react/components/StatTileGrid.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAsC,MAAM,OAAO,CAAC;AACrF,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"StatTileGrid.js","sourceRoot":"","sources":["../../../src/react/components/StatTileGrid.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusPill.d.ts","sourceRoot":"","sources":["../../../src/react/components/StatusPill.tsx"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpE;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCiB,CAAC;AAE/C,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAE7D;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"StatusPill.d.ts","sourceRoot":"","sources":["../../../src/react/components/StatusPill.tsx"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpE;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCiB,CAAC;AAE/C,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAE7D;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA+C3D,CAAC;AAMF,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;IAC/D;0EACsE;IACtE,MAAM,EAAE,gBAAgB,CAAC;IACzB;gEAC4D;IAC5D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;yEACqE;IACrE,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,IAAI,EACJ,GAAU,EACV,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,+BAiCjB"}
|
|
@@ -62,6 +62,14 @@ export const STATUS_ATTENTION_TONE = {
|
|
|
62
62
|
dispatched: 'success',
|
|
63
63
|
claimed: 'success',
|
|
64
64
|
active: 'success',
|
|
65
|
+
// The live states station's and roms' jobs report (forge task 2464, DAT-4): a copy, a
|
|
66
|
+
// cipher pass and a download are work in flight, the same reading as `running`.
|
|
67
|
+
downloading: 'success',
|
|
68
|
+
uploading: 'success',
|
|
69
|
+
encrypting: 'success',
|
|
70
|
+
transcoding: 'success',
|
|
71
|
+
deploying: 'success',
|
|
72
|
+
building: 'success',
|
|
65
73
|
// Broken — demands the owner
|
|
66
74
|
error: 'error',
|
|
67
75
|
failed: 'error',
|
|
@@ -69,12 +77,29 @@ export const STATUS_ATTENTION_TONE = {
|
|
|
69
77
|
offline: 'error',
|
|
70
78
|
rejected: 'error',
|
|
71
79
|
vanished: 'error',
|
|
80
|
+
// A job that stopped part-way and a record the reader cannot open are broken too — station's
|
|
81
|
+
// backup and cipher cards, its data audit (`failing`, `uncovered`, `unscheduled`) and its
|
|
82
|
+
// reach probe (`not-answering`, `looping`, `no-address`).
|
|
83
|
+
interrupted: 'error',
|
|
84
|
+
unreadable: 'error',
|
|
85
|
+
failing: 'error',
|
|
86
|
+
uncovered: 'error',
|
|
87
|
+
unscheduled: 'error',
|
|
88
|
+
'not-answering': 'error',
|
|
89
|
+
looping: 'error',
|
|
90
|
+
'no-address': 'error',
|
|
72
91
|
// Held / degraded — waiting on a person or a recovery
|
|
73
92
|
paused: 'warning',
|
|
74
93
|
degraded: 'warning',
|
|
75
94
|
unhealthy: 'warning',
|
|
76
95
|
parked: 'warning',
|
|
77
96
|
on_hold: 'warning',
|
|
97
|
+
blocked: 'warning',
|
|
98
|
+
// Stale and half-watched: it still works, and it has stopped being checked.
|
|
99
|
+
stale: 'warning',
|
|
100
|
+
unwatched: 'warning',
|
|
101
|
+
'watchdog-stale': 'warning',
|
|
102
|
+
unauditable: 'warning',
|
|
78
103
|
};
|
|
79
104
|
/** Statuses whose dot breathes (a slow pulse): live processes, plus `crashed` —
|
|
80
105
|
* the one inert state that demands attention rather than calm. */
|
|
@@ -96,6 +121,6 @@ export function StatusPill({ status, tone, dot = true, className, children, ...p
|
|
|
96
121
|
// GEOMETRY — a warning triangle — alongside the hue, so degraded/broken
|
|
97
122
|
// reads for color-blind users even when the label is truncated away.
|
|
98
123
|
((tone ?? STATUS_PILL_TONE[status]) === 'warning' ||
|
|
99
|
-
(tone ?? STATUS_PILL_TONE[status]) === 'error' ? (_jsx("span", { "aria-hidden": true, className: cn('size-0 shrink-0 border-x-4 border-b-[
|
|
124
|
+
(tone ?? STATUS_PILL_TONE[status]) === 'error' ? (_jsx("span", { "aria-hidden": true, className: cn('size-0 shrink-0 border-x-4 border-b-[length:var(--status-glyph-h)] border-x-transparent border-b-current', LIVE_STATUSES.has(status) && 'animate-pulse motion-reduce:animate-none') })) : (_jsx("span", { "aria-hidden": true, className: cn('size-1.5 shrink-0 rounded-full bg-current', LIVE_STATUSES.has(status) && 'animate-pulse motion-reduce:animate-none') }))), children ?? _jsx("span", { className: 'capitalize', children: status })] }));
|
|
100
125
|
}
|
|
101
126
|
//# sourceMappingURL=StatusPill.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusPill.js","sourceRoot":"","sources":["../../../src/react/components/StatusPill.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,KAAK,EAAmC,MAAM,YAAY,CAAC;AAEpE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iBAAiB;IACjB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,SAAS;IAChB,yBAAyB;IACzB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,IAAI,EAAE,QAAQ;IACd,2BAA2B;IAC3B,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;IAClB,SAAS;IACT,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAChB,QAAQ;IACR,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,SAAS;IACnB,eAAe;IACf,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;CACyB,CAAC;AAI/C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA8B;IAC9D,uDAAuD;IACvD,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IACjB,6BAA6B;IAC7B,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,OAAO;IACjB,sDAAsD;IACtD,MAAM,EAAE,SAAS;IACjB,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"StatusPill.js","sourceRoot":"","sources":["../../../src/react/components/StatusPill.tsx"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ export interface SurfaceProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
25
25
|
pad?: keyof typeof PAD;
|
|
26
26
|
/** Corner radius on the token scale (larger surface → larger radius). */
|
|
27
27
|
radius?: keyof typeof RADIUS;
|
|
28
|
-
/** Enable
|
|
28
|
+
/** Enable hover feedback on a `raised` or `glass` surface (clickable cards). No-op on flat/overlay. */
|
|
29
29
|
interactive?: boolean;
|
|
30
30
|
/** Render as the child element (Radix Slot) — e.g. `<Surface asChild><Link …/></Surface>`. */
|
|
31
31
|
asChild?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../src/react/components/Surface.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../src/react/components/Surface.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AASjD,QAAA,MAAM,SAAS;;;;;CA0BL,CAAC;AAOX,QAAA,MAAM,GAAG;;;;;CAAwF,CAAC;AAClG,QAAA,MAAM,MAAM;;;;CAAoE,CAAC;AAEjF,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,cAAc,CAAC;IAClE;;oCAEgC;IAChC,KAAK,CAAC,EAAE,MAAM,OAAO,SAAS,CAAC;IAC/B,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,OAAO,GAAG,CAAC;IACvB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,OAAO,MAAM,CAAC;IAC7B,uGAAuG;IACvG,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8FAA8F;IAC9F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;0EACsE;IACtE,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EACtB,KAAc,EACd,GAAU,EACV,MAAa,EACb,WAAW,EACX,OAAe,EACf,SAAS,EACT,GAAG,IAAI,EACR,EAAE,YAAY,+BAed"}
|
|
@@ -1,24 +1,27 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Slot } from '@radix-ui/react-slot';
|
|
3
3
|
import { cn } from '../lib/cn.js';
|
|
4
|
-
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
4
|
+
import { CardFrameContext, useCardNestingWarning } from './cardFrame.js';
|
|
5
|
+
// Elevation is meaning (flat | raised | overlay), not decoration. FND-11 (task 2461):
|
|
6
|
+
// an IN-FLOW card is anchored by its 1px border and carries no drop shadow — shadows
|
|
7
|
+
// belong to floating layers only, so `overlay` is the one level with one. Dark mode
|
|
8
|
+
// still reads `raised` through a lighter background; all via tokens, so the same
|
|
9
|
+
// class is correct in every theme with no `dark:` color literals.
|
|
8
10
|
const ELEVATION = {
|
|
9
11
|
flat: 'bg-surface border border-border shadow-none',
|
|
10
|
-
raised: cn('bg-card border border-border shadow-
|
|
11
|
-
// `interactive` opts a raised surface into
|
|
12
|
-
//
|
|
13
|
-
|
|
12
|
+
raised: cn('bg-card border border-border shadow-none dark:bg-card-raised',
|
|
13
|
+
// `interactive` opts a raised surface into hover feedback (clickable cards): the
|
|
14
|
+
// edge strengthens, transitioned at the motion token. No lift and no shadow — an
|
|
15
|
+
// in-flow card does not float (FND-11).
|
|
16
|
+
'data-[interactive=true]:transition-colors data-[interactive=true]:duration-[var(--duration-base)]', 'data-[interactive=true]:ease-[var(--ease-out)]', 'data-[interactive=true]:hover:border-border-strong'),
|
|
14
17
|
overlay: 'bg-popover border border-border shadow-overlay dark:bg-card-overlay',
|
|
15
18
|
// `glass` is elevation with the ambient field showing THROUGH it — the panel
|
|
16
19
|
// treatment the aurora theme is built around. Its fill, edge, blur and shadow all
|
|
17
20
|
// come from the `--glass-*` tokens (theme.css), so it is a legitimate choice under
|
|
18
21
|
// ANY theme: in the default light theme those resolve to a near-opaque white frost
|
|
19
22
|
// (glass over white is white), which is why this is safe to reach for without
|
|
20
|
-
// asking whether the app opted into a theme.
|
|
21
|
-
// `raised
|
|
23
|
+
// asking whether the app opted into a theme. Its hover feedback is a lift, not
|
|
24
|
+
// `raised`'s border swap — a glass edge that thickens on hover reads as a
|
|
22
25
|
// rendering artifact rather than as feedback.
|
|
23
26
|
glass: cn('cb-glass', 'data-[interactive=true]:transition-all data-[interactive=true]:duration-[var(--duration-base)]', 'data-[interactive=true]:ease-[var(--ease-out)]', 'data-[interactive=true]:hover:-translate-y-0.5'),
|
|
24
27
|
};
|
|
@@ -36,6 +39,12 @@ const RADIUS = { md: 'rounded-md', lg: 'rounded-lg', xl: 'rounded-xl' };
|
|
|
36
39
|
*/
|
|
37
40
|
export function Surface({ level = 'flat', pad = 'md', radius = 'lg', interactive, asChild = false, className, ...rest }) {
|
|
38
41
|
const Comp = asChild ? Slot : 'div';
|
|
39
|
-
|
|
42
|
+
// A sheet floats above the page and starts a fresh stack of levels (it provides
|
|
43
|
+
// `false`); every other Surface is an in-flow box, and a box inside it is the
|
|
44
|
+
// fourth level (LAY-5).
|
|
45
|
+
const isCard = level !== 'overlay';
|
|
46
|
+
useCardNestingWarning(isCard, 'Surface');
|
|
47
|
+
const el = (_jsx(Comp, { "data-interactive": interactive || undefined, className: cn(ELEVATION[level], PAD[pad], RADIUS[radius], className), ...rest }));
|
|
48
|
+
return _jsx(CardFrameContext.Provider, { value: isCard, children: el });
|
|
40
49
|
}
|
|
41
50
|
//# sourceMappingURL=Surface.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../src/react/components/Surface.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../src/react/components/Surface.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEzE,sFAAsF;AACtF,qFAAqF;AACrF,oFAAoF;AACpF,iFAAiF;AACjF,kEAAkE;AAClE,MAAM,SAAS,GAAG;IAChB,IAAI,EAAE,6CAA6C;IACnD,MAAM,EAAE,EAAE,CACR,8DAA8D;IAC9D,iFAAiF;IACjF,iFAAiF;IACjF,wCAAwC;IACxC,mGAAmG,EACnG,gDAAgD,EAChD,oDAAoD,CACrD;IACD,OAAO,EAAE,qEAAqE;IAC9E,6EAA6E;IAC7E,kFAAkF;IAClF,mFAAmF;IACnF,mFAAmF;IACnF,8EAA8E;IAC9E,+EAA+E;IAC/E,0EAA0E;IAC1E,8CAA8C;IAC9C,KAAK,EAAE,EAAE,CACP,UAAU,EACV,gGAAgG,EAChG,gDAAgD,EAChD,gDAAgD,CACjD;CACO,CAAC;AAEX,gFAAgF;AAChF,iFAAiF;AACjF,oFAAoF;AACpF,4EAA4E;AAC5E,6EAA6E;AAC7E,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,YAAY,EAAW,CAAC;AAClG,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAW,CAAC;AAoBjF;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,EACtB,KAAK,GAAG,MAAM,EACd,GAAG,GAAG,IAAI,EACV,MAAM,GAAG,IAAI,EACb,WAAW,EACX,OAAO,GAAG,KAAK,EACf,SAAS,EACT,GAAG,IAAI,EACM;IACb,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACpC,gFAAgF;IAChF,8EAA8E;IAC9E,wBAAwB;IACxB,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC;IACnC,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,CACT,KAAC,IAAI,wBACe,WAAW,IAAI,SAAS,EAC1C,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,KAChE,IAAI,GACR,CACH,CAAC;IACF,OAAO,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,YAAG,EAAE,GAA6B,CAAC;AACpF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwatchPicker.d.ts","sourceRoot":"","sources":["../../../src/react/components/SwatchPicker.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SwatchPicker.d.ts","sourceRoot":"","sources":["../../../src/react/components/SwatchPicker.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACrD,+EAA+E;IAC/E,KAAK,EAAE,CAAC,CAAC;IACT,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC1D,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,0EAA0E;IAC1E,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EACtD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,IAAW,EACX,YAAY,EAAE,SAAmB,EACjC,SAAS,GACV,EAAE,iBAAiB,CAAC,CAAC,CAAC,+BAkCtB"}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import * as RadioGroup from '@radix-ui/react-radio-group';
|
|
3
3
|
import { Check } from 'lucide-react';
|
|
4
4
|
import { cn } from '../lib/cn.js';
|
|
5
|
+
import { TAP_TARGET_SQUARE } from '../lib/tapTarget.js';
|
|
5
6
|
const SIZE = { sm: 'size-6', md: 'size-7', lg: 'size-9' };
|
|
6
7
|
/**
|
|
7
8
|
* A discrete color-swatch radio group — pick ONE color from a fixed palette
|
|
@@ -14,6 +15,9 @@ const SIZE = { sm: 'size-6', md: 'size-7', lg: 'size-9' };
|
|
|
14
15
|
* composes this with a native color input.
|
|
15
16
|
*/
|
|
16
17
|
export function SwatchPicker({ options, value, onChange, size = 'md', 'aria-label': ariaLabel = 'Color', className, }) {
|
|
17
|
-
return (_jsx(RadioGroup.Root, { "aria-label": ariaLabel, value: value ?? '', onValueChange: (v) => onChange(v), className: cn('flex flex-wrap items-center gap-1.5', className), children: options.map((opt) => (_jsx(RadioGroup.Item, { value: opt.value, disabled: opt.disabled, "aria-label": opt.label ?? opt.value, title: opt.label ?? opt.value, style: { backgroundColor: opt.color }, className: cn('inline-flex items-center justify-center rounded-full border border-border/40 transition-transform', SIZE[size],
|
|
18
|
+
return (_jsx(RadioGroup.Root, { "aria-label": ariaLabel, value: value ?? '', onValueChange: (v) => onChange(v), className: cn('flex flex-wrap items-center gap-1.5', className), children: options.map((opt) => (_jsx(RadioGroup.Item, { value: opt.value, disabled: opt.disabled, "aria-label": opt.label ?? opt.value, title: opt.label ?? opt.value, style: { backgroundColor: opt.color }, className: cn('inline-flex items-center justify-center rounded-full border border-border/40 transition-transform', SIZE[size],
|
|
19
|
+
// A finger needs 44px (DESIGN.md §5): the swatch itself grows on a coarse pointer, since
|
|
20
|
+
// the colour IS the button. A 28px one failed e2e/touch-targets (forge task 2514).
|
|
21
|
+
TAP_TARGET_SQUARE, 'hover:scale-110 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1', 'data-[state=checked]:ring-2 data-[state=checked]:ring-foreground data-[state=checked]:ring-offset-1', 'disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:scale-100'), children: _jsx(RadioGroup.Indicator, { asChild: true, children: _jsx(Check, { className: 'size-3.5 text-white mix-blend-difference', "aria-hidden": true }) }) }, opt.value))) }));
|
|
18
22
|
}
|
|
19
23
|
//# sourceMappingURL=SwatchPicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwatchPicker.js","sourceRoot":"","sources":["../../../src/react/components/SwatchPicker.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"SwatchPicker.js","sourceRoot":"","sources":["../../../src/react/components/SwatchPicker.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAuBxD,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAW,CAAC;AAEnE;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAA4B,EACtD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,IAAI,GAAG,IAAI,EACX,YAAY,EAAE,SAAS,GAAG,OAAO,EACjC,SAAS,GACY;IACrB,OAAO,CACL,KAAC,UAAU,CAAC,IAAI,kBACF,SAAS,EACrB,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAM,CAAC,EACtC,SAAS,EAAE,EAAE,CAAC,qCAAqC,EAAE,SAAS,CAAC,YAE9D,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACpB,KAAC,UAAU,CAAC,IAAI,IAEd,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ,gBACV,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,EAClC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,EAC7B,KAAK,EAAE,EAAE,eAAe,EAAE,GAAG,CAAC,KAAK,EAAE,EACrC,SAAS,EAAE,EAAE,CACX,mGAAmG,EACnG,IAAI,CAAC,IAAI,CAAC;YACV,yFAAyF;YACzF,mFAAmF;YACnF,iBAAiB,EACjB,qHAAqH,EACrH,qGAAqG,EACrG,0EAA0E,CAC3E,YAED,KAAC,UAAU,CAAC,SAAS,IAAC,OAAO,kBAC3B,KAAC,KAAK,IAAC,SAAS,EAAC,0CAA0C,wBAAe,GACrD,IAnBlB,GAAG,CAAC,KAAK,CAoBE,CACnB,CAAC,GACc,CACnB,CAAC;AACJ,CAAC"}
|
|
@@ -21,7 +21,7 @@ export function Switch({ className, label, labelClassName, showState, id: idProp
|
|
|
21
21
|
// never changes, so the previous hit-slop technique read as still-40×24 and
|
|
22
22
|
// kept failing orch-host's task-sources mobile scan (owner teardown,
|
|
23
23
|
// 2026-07-17 — the "cc"/"co"/etc. processing toggles all measured 40×24).
|
|
24
|
-
'pointer-coarse:h-11 pointer-coarse:w-
|
|
24
|
+
'pointer-coarse:h-11 pointer-coarse:w-18', className), ...props, children: _jsx(RadixSwitch.Thumb, { className: cn('pointer-events-none block size-5 rounded-full bg-white shadow transition-transform', 'data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0', 'pointer-coarse:size-9 pointer-coarse:data-[state=checked]:translate-x-8') }) }));
|
|
25
25
|
if (label == null && showState !== true)
|
|
26
26
|
return root;
|
|
27
27
|
return (_jsxs("label", { htmlFor: id, "data-cb-tap-target": '', className: cn('flex w-full cursor-pointer items-center justify-between gap-3 py-1.5', props.disabled && 'cursor-not-allowed', TAP_TARGET), children: [label == null ? null : (_jsx("span", { className: cn('min-w-0 text-sm text-foreground', labelClassName), children: label })), _jsxs("span", { className: 'flex shrink-0 items-center gap-2', children: [showState ? (_jsx("span", { className: 'w-7 text-xs text-muted-foreground', children: props.checked ? 'On' : 'Off' })) : null, root] })] }));
|