@nanisoft/prism-ui 0.10.2 → 0.13.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 -21
- package/dist/.tsbuildinfo +1 -1
- package/dist/blocks/app-shell-01/app-shell.js +4 -4
- package/dist/blocks/app-shell-01/index.d.ts +2 -2
- package/dist/blocks/app-shell-01/index.js +1 -1
- package/dist/blocks/auth-form-01/auth-form.d.ts +11 -1
- package/dist/blocks/auth-form-01/auth-form.d.ts.map +1 -1
- package/dist/blocks/auth-form-01/auth-form.js +11 -8
- package/dist/blocks/auth-form-01/index.d.ts +2 -2
- package/dist/blocks/auth-form-01/index.js +1 -1
- package/dist/blocks/cta-01/cta.d.ts +26 -21
- package/dist/blocks/cta-01/cta.d.ts.map +1 -1
- package/dist/blocks/cta-01/cta.js +2 -2
- package/dist/blocks/cta-01/index.d.ts +2 -2
- package/dist/blocks/cta-01/index.js +1 -1
- package/dist/blocks/data-table-01/data-table.js +7 -7
- package/dist/blocks/data-table-01/index.d.ts +2 -2
- package/dist/blocks/data-table-01/index.js +1 -1
- package/dist/blocks/empty-state-01/empty-state.d.ts +143 -0
- package/dist/blocks/empty-state-01/empty-state.d.ts.map +1 -0
- package/dist/blocks/empty-state-01/empty-state.js +104 -0
- package/dist/blocks/empty-state-01/index.d.ts +3 -0
- package/dist/blocks/empty-state-01/index.d.ts.map +1 -0
- package/dist/blocks/empty-state-01/index.js +1 -0
- package/dist/blocks/feature-grid-01/feature-grid.d.ts +28 -1
- package/dist/blocks/feature-grid-01/feature-grid.d.ts.map +1 -1
- package/dist/blocks/feature-grid-01/feature-grid.js +34 -3
- package/dist/blocks/feature-grid-01/index.d.ts +2 -2
- package/dist/blocks/feature-grid-01/index.js +1 -1
- package/dist/blocks/hero-01/hero.d.ts +35 -15
- package/dist/blocks/hero-01/hero.d.ts.map +1 -1
- package/dist/blocks/hero-01/hero.js +14 -9
- package/dist/blocks/hero-01/index.d.ts +2 -1
- package/dist/blocks/hero-01/index.d.ts.map +1 -1
- package/dist/blocks/hero-01/index.js +1 -1
- package/dist/blocks/index.d.ts +20 -20
- package/dist/blocks/index.js +19 -19
- package/dist/blocks/instrument-panel-01/index.d.ts +2 -2
- package/dist/blocks/instrument-panel-01/index.js +1 -1
- package/dist/blocks/instrument-panel-01/instrument-panel.js +1 -1
- package/dist/blocks/logo-strip-01/index.d.ts +2 -2
- package/dist/blocks/logo-strip-01/index.js +1 -1
- package/dist/blocks/logo-strip-01/logo-strip.d.ts +1 -1
- package/dist/blocks/logo-strip-01/logo-strip.js +2 -2
- package/dist/blocks/note-grid-01/index.d.ts +2 -2
- package/dist/blocks/note-grid-01/index.js +1 -1
- package/dist/blocks/note-grid-01/note-grid.d.ts +1 -1
- package/dist/blocks/note-grid-01/note-grid.js +1 -1
- package/dist/blocks/page-header-01/index.d.ts +2 -2
- package/dist/blocks/page-header-01/index.js +1 -1
- package/dist/blocks/page-header-01/page-header.d.ts +1 -1
- package/dist/blocks/page-header-01/page-header.js +4 -4
- package/dist/blocks/pricing-01/index.d.ts +1 -1
- package/dist/blocks/pricing-01/index.js +1 -1
- package/dist/blocks/pricing-01/pricing.d.ts +8 -1
- package/dist/blocks/pricing-01/pricing.d.ts.map +1 -1
- package/dist/blocks/pricing-01/pricing.js +15 -5
- package/dist/blocks/process-flow-01/index.d.ts +3 -0
- package/dist/blocks/process-flow-01/index.d.ts.map +1 -0
- package/dist/blocks/process-flow-01/index.js +1 -0
- package/dist/blocks/process-flow-01/process-flow.d.ts +118 -0
- package/dist/blocks/process-flow-01/process-flow.d.ts.map +1 -0
- package/dist/blocks/process-flow-01/process-flow.js +71 -0
- package/dist/blocks/process-rail-01/index.d.ts +2 -2
- package/dist/blocks/process-rail-01/index.js +1 -1
- package/dist/blocks/process-rail-01/process-rail.d.ts +1 -1
- package/dist/blocks/process-rail-01/process-rail.js +2 -2
- package/dist/blocks/product-grid-01/index.d.ts +2 -2
- package/dist/blocks/product-grid-01/index.js +1 -1
- package/dist/blocks/product-grid-01/product-grid.d.ts +37 -5
- package/dist/blocks/product-grid-01/product-grid.d.ts.map +1 -1
- package/dist/blocks/product-grid-01/product-grid.js +20 -6
- package/dist/blocks/run-console-01/index.d.ts +3 -0
- package/dist/blocks/run-console-01/index.d.ts.map +1 -0
- package/dist/blocks/run-console-01/index.js +1 -0
- package/dist/blocks/run-console-01/run-console.d.ts +111 -0
- package/dist/blocks/run-console-01/run-console.d.ts.map +1 -0
- package/dist/blocks/run-console-01/run-console.js +48 -0
- package/dist/blocks/settings-panel-01/index.d.ts +2 -2
- package/dist/blocks/settings-panel-01/index.js +1 -1
- package/dist/blocks/settings-panel-01/settings-panel.d.ts +11 -1
- package/dist/blocks/settings-panel-01/settings-panel.d.ts.map +1 -1
- package/dist/blocks/settings-panel-01/settings-panel.js +15 -10
- package/dist/blocks/site-footer/index.d.ts +2 -2
- package/dist/blocks/site-footer/index.js +1 -1
- package/dist/blocks/site-footer/site-footer.d.ts +1 -1
- package/dist/blocks/site-footer/site-footer.js +2 -2
- package/dist/blocks/site-header/index.d.ts +2 -2
- package/dist/blocks/site-header/index.js +1 -1
- package/dist/blocks/site-header/site-header.d.ts +2 -2
- package/dist/blocks/site-header/site-header.js +3 -3
- package/dist/blocks/site-navbar/index.d.ts +3 -0
- package/dist/blocks/site-navbar/index.d.ts.map +1 -0
- package/dist/blocks/site-navbar/index.js +1 -0
- package/dist/blocks/site-navbar/mobile-nav.d.ts +48 -0
- package/dist/blocks/site-navbar/mobile-nav.d.ts.map +1 -0
- package/dist/blocks/site-navbar/mobile-nav.js +35 -0
- package/dist/blocks/site-navbar/mode-toggle.d.ts +39 -0
- package/dist/blocks/site-navbar/mode-toggle.d.ts.map +1 -0
- package/dist/blocks/site-navbar/mode-toggle.js +39 -0
- package/dist/blocks/site-navbar/navbar-controls.d.ts +79 -0
- package/dist/blocks/site-navbar/navbar-controls.d.ts.map +1 -0
- package/dist/blocks/site-navbar/navbar-controls.js +40 -0
- package/dist/blocks/site-navbar/search-entry.d.ts +29 -0
- package/dist/blocks/site-navbar/search-entry.d.ts.map +1 -0
- package/dist/blocks/site-navbar/search-entry.js +52 -0
- package/dist/blocks/site-navbar/site-navbar.d.ts +212 -0
- package/dist/blocks/site-navbar/site-navbar.d.ts.map +1 -0
- package/dist/blocks/site-navbar/site-navbar.js +61 -0
- package/dist/blocks/site-navbar/sites-menu.d.ts +40 -0
- package/dist/blocks/site-navbar/sites-menu.d.ts.map +1 -0
- package/dist/blocks/site-navbar/sites-menu.js +48 -0
- package/dist/blocks/site-navbar/theme-menu.d.ts +47 -0
- package/dist/blocks/site-navbar/theme-menu.d.ts.map +1 -0
- package/dist/blocks/site-navbar/theme-menu.js +55 -0
- package/dist/blocks/stack-grid-01/index.d.ts +2 -2
- package/dist/blocks/stack-grid-01/index.js +1 -1
- package/dist/blocks/stack-grid-01/stack-grid.d.ts +42 -11
- package/dist/blocks/stack-grid-01/stack-grid.d.ts.map +1 -1
- package/dist/blocks/stack-grid-01/stack-grid.js +15 -7
- package/dist/blocks/stats-01/index.d.ts +9 -1
- package/dist/blocks/stats-01/index.d.ts.map +1 -1
- package/dist/blocks/stats-01/index.js +8 -1
- package/dist/blocks/stats-01/stats.d.ts +1 -1
- package/dist/blocks/stats-01/stats.js +2 -2
- package/dist/blocks/status-ledger-01/index.d.ts +2 -2
- package/dist/blocks/status-ledger-01/index.js +1 -1
- package/dist/blocks/status-ledger-01/status-ledger.d.ts +1 -1
- package/dist/blocks/status-ledger-01/status-ledger.js +2 -2
- package/dist/catalog.d.ts +1 -1
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +473 -1
- package/dist/components/index.d.ts +104 -66
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +74 -40
- package/dist/components/ui/accordion.js +1 -1
- package/dist/components/ui/alert-dialog.d.ts +119 -0
- package/dist/components/ui/alert-dialog.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog.js +82 -0
- package/dist/components/ui/alert.js +1 -1
- package/dist/components/ui/aspect-ratio.d.ts +60 -0
- package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
- package/dist/components/ui/aspect-ratio.js +61 -0
- package/dist/components/ui/avatar.js +1 -1
- package/dist/components/ui/badge.js +1 -1
- package/dist/components/ui/breadcrumb.js +1 -1
- package/dist/components/ui/button-group.d.ts +68 -0
- package/dist/components/ui/button-group.d.ts.map +1 -0
- package/dist/components/ui/button-group.js +54 -0
- package/dist/components/ui/button.js +1 -1
- package/dist/components/ui/calendar.d.ts +158 -0
- package/dist/components/ui/calendar.d.ts.map +1 -0
- package/dist/components/ui/calendar.js +216 -0
- package/dist/components/ui/card.d.ts +18 -6
- package/dist/components/ui/card.d.ts.map +1 -1
- package/dist/components/ui/card.js +23 -8
- package/dist/components/ui/carousel.d.ts +118 -0
- package/dist/components/ui/carousel.d.ts.map +1 -0
- package/dist/components/ui/carousel.js +152 -0
- package/dist/components/ui/chart-frame.d.ts +216 -0
- package/dist/components/ui/chart-frame.d.ts.map +1 -0
- package/dist/components/ui/chart-frame.js +286 -0
- package/dist/components/ui/checkbox.js +1 -1
- package/dist/components/ui/collapsible.d.ts +97 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +54 -0
- package/dist/components/ui/combobox.d.ts +141 -0
- package/dist/components/ui/combobox.d.ts.map +1 -0
- package/dist/components/ui/combobox.js +243 -0
- package/dist/components/ui/command-palette.d.ts +106 -0
- package/dist/components/ui/command-palette.d.ts.map +1 -0
- package/dist/components/ui/command-palette.js +176 -0
- package/dist/components/ui/command.d.ts +82 -0
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/components/ui/command.js +37 -0
- package/dist/components/ui/context-menu.d.ts +151 -0
- package/dist/components/ui/context-menu.d.ts.map +1 -0
- package/dist/components/ui/context-menu.js +97 -0
- package/dist/components/ui/cta-link.js +1 -1
- package/dist/components/ui/date-picker.d.ts +111 -0
- package/dist/components/ui/date-picker.d.ts.map +1 -0
- package/dist/components/ui/date-picker.js +74 -0
- package/dist/components/ui/diagram.d.ts +84 -15
- package/dist/components/ui/diagram.d.ts.map +1 -1
- package/dist/components/ui/diagram.js +77 -7
- package/dist/components/ui/dialog.js +1 -1
- package/dist/components/ui/diff.d.ts +105 -0
- package/dist/components/ui/diff.d.ts.map +1 -0
- package/dist/components/ui/diff.js +113 -0
- package/dist/components/ui/dropdown-menu.d.ts +18 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/components/ui/dropdown-menu.js +1 -1
- package/dist/components/ui/fact-list.js +1 -1
- package/dist/components/ui/field.js +1 -1
- package/dist/components/ui/form.d.ts +151 -0
- package/dist/components/ui/form.d.ts.map +1 -0
- package/dist/components/ui/form.js +73 -0
- package/dist/components/ui/hover-card.d.ts +105 -0
- package/dist/components/ui/hover-card.d.ts.map +1 -0
- package/dist/components/ui/hover-card.js +49 -0
- package/dist/components/ui/input-group.d.ts +99 -0
- package/dist/components/ui/input-group.d.ts.map +1 -0
- package/dist/components/ui/input-group.js +83 -0
- package/dist/components/ui/input.js +1 -1
- package/dist/components/ui/item.d.ts +113 -0
- package/dist/components/ui/item.d.ts.map +1 -0
- package/dist/components/ui/item.js +61 -0
- package/dist/components/ui/kbd.js +1 -1
- package/dist/components/ui/label.d.ts +58 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +29 -0
- package/dist/components/ui/live-region.d.ts +9 -0
- package/dist/components/ui/live-region.d.ts.map +1 -1
- package/dist/components/ui/live-region.js +10 -2
- package/dist/components/ui/mark.js +1 -1
- package/dist/components/ui/menubar.d.ts +197 -0
- package/dist/components/ui/menubar.d.ts.map +1 -0
- package/dist/components/ui/menubar.js +109 -0
- package/dist/components/ui/meter.d.ts +121 -0
- package/dist/components/ui/meter.d.ts.map +1 -0
- package/dist/components/ui/meter.js +82 -0
- package/dist/components/ui/native-select.d.ts +72 -0
- package/dist/components/ui/native-select.d.ts.map +1 -0
- package/dist/components/ui/native-select.js +55 -0
- package/dist/components/ui/navigation-menu.d.ts +186 -0
- package/dist/components/ui/navigation-menu.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu.js +94 -0
- package/dist/components/ui/number-field.d.ts +111 -0
- package/dist/components/ui/number-field.d.ts.map +1 -0
- package/dist/components/ui/number-field.js +84 -0
- package/dist/components/ui/one-time-code.d.ts +127 -0
- package/dist/components/ui/one-time-code.d.ts.map +1 -0
- package/dist/components/ui/one-time-code.js +57 -0
- package/dist/components/ui/pagination.js +1 -1
- package/dist/components/ui/popover.js +1 -1
- package/dist/components/ui/product-mark.d.ts +1 -1
- package/dist/components/ui/product-mark.js +1 -1
- package/dist/components/ui/product-switcher.d.ts +1 -1
- package/dist/components/ui/product-switcher.js +2 -2
- package/dist/components/ui/progress.js +1 -1
- package/dist/components/ui/prose.js +1 -1
- package/dist/components/ui/pulse-graph.js +1 -1
- package/dist/components/ui/pulse-series.js +1 -1
- package/dist/components/ui/radio-group.js +1 -1
- package/dist/components/ui/resizable.d.ts +129 -0
- package/dist/components/ui/resizable.d.ts.map +1 -0
- package/dist/components/ui/resizable.js +205 -0
- package/dist/components/ui/scroll-area.d.ts +97 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.js +68 -0
- package/dist/components/ui/search-dialog.d.ts +139 -0
- package/dist/components/ui/search-dialog.d.ts.map +1 -0
- package/dist/components/ui/search-dialog.js +178 -0
- package/dist/components/ui/section.d.ts +26 -0
- package/dist/components/ui/section.d.ts.map +1 -1
- package/dist/components/ui/section.js +32 -1
- package/dist/components/ui/select.js +1 -1
- package/dist/components/ui/separator.js +1 -1
- package/dist/components/ui/sheet.d.ts +103 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sheet.js +58 -0
- package/dist/components/ui/sidebar.d.ts +228 -0
- package/dist/components/ui/sidebar.d.ts.map +1 -0
- package/dist/components/ui/sidebar.js +172 -0
- package/dist/components/ui/signal-field.js +1 -1
- package/dist/components/ui/skeleton.js +1 -1
- package/dist/components/ui/slider.js +1 -1
- package/dist/components/ui/spinner.d.ts +79 -0
- package/dist/components/ui/spinner.d.ts.map +1 -0
- package/dist/components/ui/spinner.js +79 -0
- package/dist/components/ui/switch.js +1 -1
- package/dist/components/ui/table-sort.d.ts +97 -0
- package/dist/components/ui/table-sort.d.ts.map +1 -0
- package/dist/components/ui/table-sort.js +102 -0
- package/dist/components/ui/table.js +1 -1
- package/dist/components/ui/tabs.js +1 -1
- package/dist/components/ui/textarea.js +1 -1
- package/dist/components/ui/timeline.d.ts +106 -0
- package/dist/components/ui/timeline.d.ts.map +1 -0
- package/dist/components/ui/timeline.js +111 -0
- package/dist/components/ui/toast.d.ts +219 -0
- package/dist/components/ui/toast.d.ts.map +1 -0
- package/dist/components/ui/toast.js +270 -0
- package/dist/components/ui/toggle-group.d.ts +118 -0
- package/dist/components/ui/toggle-group.d.ts.map +1 -0
- package/dist/components/ui/toggle-group.js +194 -0
- package/dist/components/ui/toggle.d.ts +73 -0
- package/dist/components/ui/toggle.d.ts.map +1 -0
- package/dist/components/ui/toggle.js +44 -0
- package/dist/components/ui/tooltip.js +1 -1
- package/dist/components/ui/tree.js +1 -1
- package/dist/components/ui/typography.js +1 -1
- package/dist/fonts/Inter-OFL.txt +93 -93
- package/dist/index.d.ts +72 -70
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -60
- package/dist/lib/rank.d.ts +69 -0
- package/dist/lib/rank.d.ts.map +1 -0
- package/dist/lib/rank.js +77 -0
- package/dist/live/index.d.ts +22 -0
- package/dist/live/index.d.ts.map +1 -0
- package/dist/live/index.js +20 -0
- package/dist/live/run-stream-01/index.d.ts +3 -0
- package/dist/live/run-stream-01/index.d.ts.map +1 -0
- package/dist/live/run-stream-01/index.js +1 -0
- package/dist/live/run-stream-01/run-stream.d.ts +125 -0
- package/dist/live/run-stream-01/run-stream.d.ts.map +1 -0
- package/dist/live/run-stream-01/run-stream.js +111 -0
- package/dist/pages/auth-page/index.d.ts +15 -2
- package/dist/pages/auth-page/index.d.ts.map +1 -1
- package/dist/pages/auth-page/index.js +8 -4
- package/dist/pages/blog-post-page/index.js +5 -5
- package/dist/pages/dashboard-page/index.d.ts +4 -4
- package/dist/pages/dashboard-page/index.js +4 -4
- package/dist/pages/docs-shell/docs-shell.d.ts +37 -4
- package/dist/pages/docs-shell/docs-shell.d.ts.map +1 -1
- package/dist/pages/docs-shell/docs-shell.js +107 -16
- package/dist/pages/docs-shell/index.d.ts +2 -2
- package/dist/pages/docs-shell/index.js +1 -1
- package/dist/pages/index.d.ts +14 -14
- package/dist/pages/index.js +7 -7
- package/dist/pages/marketing-page/index.d.ts +6 -6
- package/dist/pages/marketing-page/index.js +5 -5
- package/dist/pages/not-found-page/index.js +4 -4
- package/dist/pages/settings-page/index.d.ts +3 -3
- package/dist/pages/settings-page/index.js +4 -4
- package/dist/provider/index.d.ts +4 -4
- package/dist/provider/index.js +2 -2
- package/dist/provider/provider.d.ts +1 -1
- package/dist/provider/provider.js +1 -1
- package/dist/provider/theme-script.d.ts +1 -1
- package/dist/provider/theme-script.js +1 -1
- package/dist/styles.css +689 -0
- package/package.json +9 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Section, SectionHeading } from '../../components/ui/section.js';
|
|
3
|
+
import { cn } from '../../lib/utils.js';
|
|
4
|
+
/**
|
|
5
|
+
* The grid tracks each column count gets.
|
|
6
|
+
*
|
|
7
|
+
* Spelled out per length, so a flow has exactly as many tracks as it declared and
|
|
8
|
+
* not one empty at the end of a row. The `sm:` step is a narrowing rather than a
|
|
9
|
+
* widening: on a narrow screen a flow becomes one column per line, because a
|
|
10
|
+
* three-up row of stage names at phone width is three columns of two words each.
|
|
11
|
+
*/
|
|
12
|
+
const TRACKS = {
|
|
13
|
+
2: 'sm:grid-cols-2',
|
|
14
|
+
3: 'sm:grid-cols-2 lg:grid-cols-3',
|
|
15
|
+
4: 'sm:grid-cols-2 lg:grid-cols-4',
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* A pipeline drawn as a flow: the stages in order, wrapping across lines.
|
|
19
|
+
*
|
|
20
|
+
* **The rail's refusal of a fifth stage is left standing.** `ProcessRail01` holds
|
|
21
|
+
* two, three or four stages and a five-element array is a compile error, and that is
|
|
22
|
+
* the same decision this Block is built beside rather than against: a rail is a
|
|
23
|
+
* claim about a sequence on one line, and a rail that quietly dropped a stage to fit
|
|
24
|
+
* a width would be a diagram of a process that is not the process. A company site
|
|
25
|
+
* states six stages, and it was drawing them as a grid of short points, where the
|
|
26
|
+
* six ordinals and the terminal label were lost and a sequence read as a set. That
|
|
27
|
+
* gap is a gap in the roster, and the honest repair is a second shape rather than a
|
|
28
|
+
* wider tuple: raising the rail's ceiling to six would make the fourth column
|
|
29
|
+
* unrepresentable as a type error, which is the property that made the original
|
|
30
|
+
* decision good.
|
|
31
|
+
*
|
|
32
|
+
* **It is one `<ol>`, and that is the part the layout is built around.** A flow that
|
|
33
|
+
* wrapped into a row per group would be several lists, and a screen reader would
|
|
34
|
+
* announce it as three lists of two, which is precisely the set-where-a-sequence-was
|
|
35
|
+
* that this Block exists to avoid. So the stages are one ordered list and the
|
|
36
|
+
* wrapping is done by the grid, which means the Block never gets to know where a
|
|
37
|
+
* line broke, and therefore cannot draw something that is only right on the widest
|
|
38
|
+
* screen.
|
|
39
|
+
*
|
|
40
|
+
* **The ordinal is the continuity mechanism, and it is treated as one.** It runs
|
|
41
|
+
* `01` through to the last stage with no restart, in the mono face, at a size a
|
|
42
|
+
* reader can scan down a column rather than read one at a time. That is what makes a
|
|
43
|
+
* wrapped flow legible: a reader who lands on stage four sees `04` and knows it
|
|
44
|
+
* continues stage three, whatever the column count happens to be at the width they
|
|
45
|
+
* are using. Nothing else in this Block is load-bearing for the sequence, and
|
|
46
|
+
* anything that needed to know where the line broke would be.
|
|
47
|
+
*
|
|
48
|
+
* **The thread is a line through the stages, not a box around each one.** Each
|
|
49
|
+
* stage draws a top border and the grid separates them by a single pixel, so a run
|
|
50
|
+
* of stages on one line reads as one line broken by hairline gaps, and the gap
|
|
51
|
+
* between two lines is wider. That is the same technique the rail uses, and it is
|
|
52
|
+
* chosen here for a specific reason: it holds at any column count, including the
|
|
53
|
+
* one-column layout a phone gets, without the Block knowing anything about it. A
|
|
54
|
+
* connector drawn between a stage and its successor would need the column count to
|
|
55
|
+
* be right, and would be wrong at every width the type does not describe.
|
|
56
|
+
*
|
|
57
|
+
* A caption of more than about twelve words wraps under a stage and the line stops
|
|
58
|
+
* reading as a line, so the caption is a line and the detail belongs above the flow
|
|
59
|
+
* in `description`.
|
|
60
|
+
*
|
|
61
|
+
* It is a server Component: no hook, no state and no client code.
|
|
62
|
+
*/
|
|
63
|
+
export function ProcessFlow01({ eyebrow, title, description, finalLabel, stages, columns = 3, headingLevel = 'h2', className, }) {
|
|
64
|
+
if (stages.length < 2) {
|
|
65
|
+
throw new Error('ProcessFlow01: a flow of fewer than two stages is a label, not a sequence, and ' +
|
|
66
|
+
'the Block would be drawing a line through nothing. ComposeProcessRail01 for a ' +
|
|
67
|
+
'two-stage rail, or pass the stages the pipeline actually has.');
|
|
68
|
+
}
|
|
69
|
+
return (_jsxs(Section, { children: [title ? (_jsx(SectionHeading, { as: headingLevel, align: "left", eyebrow: eyebrow, title: title, description: description, className: "mb-12" })) : null, _jsx("ol", { "data-slot": "process-flow", className: cn('grid gap-y-8 sm:gap-x-px sm:gap-y-10', TRACKS[columns], className), children: stages.map((stage, index) => (_jsxs("li", { "data-slot": "process-stage", "data-ordinal": String(index + 1).padStart(2, '0'), className: "border-border flex flex-col gap-2 border-t pt-4", children: [_jsxs("div", { className: "flex items-baseline justify-between gap-3", children: [_jsx("span", { className: "text-muted-foreground font-mono text-xs tabular-nums", children: String(index + 1).padStart(2, '0') }), finalLabel && index === stages.length - 1 ? (_jsx("span", { className: "text-muted-foreground font-mono text-xs", children: finalLabel })) : null] }), _jsx("span", { className: "text-sm font-semibold", children: stage.name }), _jsx("span", { className: "text-muted-foreground text-pretty text-sm", children: stage.description })] }, stage.name))) })] }));
|
|
70
|
+
}
|
|
71
|
+
export default ProcessFlow01;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { ProcessRail01, default } from './process-rail';
|
|
2
|
-
export type { ProcessRail01Props, ProcessRail01Steps, ProcessStep } from './process-rail';
|
|
1
|
+
export { ProcessRail01, default } from './process-rail.js';
|
|
2
|
+
export type { ProcessRail01Props, ProcessRail01Steps, ProcessStep } from './process-rail.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { ProcessRail01, default } from './process-rail';
|
|
1
|
+
export { ProcessRail01, default } from './process-rail.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Section, SectionHeading } from '../../components/ui/section';
|
|
3
|
-
import { cn } from '../../lib/utils';
|
|
2
|
+
import { Section, SectionHeading } from '../../components/ui/section.js';
|
|
3
|
+
import { cn } from '../../lib/utils.js';
|
|
4
4
|
/**
|
|
5
5
|
* The grid tracks each admissible length gets, keyed on the tuple's own length.
|
|
6
6
|
*
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { ProductGrid01, default } from './product-grid';
|
|
2
|
-
export type { ProductGrid01Props, ProductGrid01Product } from './product-grid';
|
|
1
|
+
export { ProductGrid01, default } from './product-grid.js';
|
|
2
|
+
export type { ProductGrid01Props, ProductGrid01Product } from './product-grid.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { ProductGrid01, default } from './product-grid';
|
|
1
|
+
export { ProductGrid01, default } from './product-grid.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type ProductMarkProps } from '../../components/ui/product-mark';
|
|
2
|
-
import { type HeadingLevel } from '../../components/ui/section';
|
|
1
|
+
import { type ProductMarkProps } from '../../components/ui/product-mark.js';
|
|
2
|
+
import { type HeadingLevel } from '../../components/ui/section.js';
|
|
3
3
|
/**
|
|
4
4
|
* One product in the grid, as the row draws it.
|
|
5
5
|
*
|
|
@@ -27,6 +27,24 @@ export type ProductGrid01Product = {
|
|
|
27
27
|
pack?: ProductMarkProps['pack'];
|
|
28
28
|
/** One line about what the product is. */
|
|
29
29
|
tagline: string;
|
|
30
|
+
/**
|
|
31
|
+
* A second line, about **this product** rather than about the set.
|
|
32
|
+
*
|
|
33
|
+
* `tagline` and this are different claims and only one of them belongs on the
|
|
34
|
+
* row. A tagline is the shortest true thing about a member, and it reads the
|
|
35
|
+
* same in every row of a set. This is a sentence that is true of *this* product
|
|
36
|
+
* and would be false or vacuous beside its neighbours, which is the test for
|
|
37
|
+
* whether it belongs here. The company site's five products each carried one
|
|
38
|
+
* ("Autonomous software creation, supervised by you."), and folding them into the
|
|
39
|
+
* tagline would have been a copy edit rather than a fix, so they were dropped and
|
|
40
|
+
* reported instead.
|
|
41
|
+
*
|
|
42
|
+
* Rendered only when passed, so a row without one draws exactly what it drew
|
|
43
|
+
* before the field existed. See `ProductGrid01`'s JSDoc for which of the two
|
|
44
|
+
* levels a sentence belongs at, because the answer is a fact about the sentence
|
|
45
|
+
* and not a preference.
|
|
46
|
+
*/
|
|
47
|
+
detail?: string;
|
|
30
48
|
/**
|
|
31
49
|
* Where the row goes. Rendered as a native anchor's `href`, so the row is a
|
|
32
50
|
* link with the browser's own affordances rather than a click handler.
|
|
@@ -101,9 +119,23 @@ export type ProductGrid01Props = {
|
|
|
101
119
|
* it, and middle-click opens it in a new tab. The mark is `aria-hidden` inside
|
|
102
120
|
* it, so the link is announced once, by name, rather than as a shape and a word.
|
|
103
121
|
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
122
|
+
* **Which level a sentence belongs at is a fact about the sentence, and this
|
|
123
|
+
* settles it.** There are two levels and both are right, for different claims:
|
|
124
|
+
*
|
|
125
|
+
* - `description` is about **the set**. "Five products, one platform." or "Every
|
|
126
|
+
* one of these runs on the same runtime." A sentence that would be equally true
|
|
127
|
+
* if you deleted any one row belongs here, and nowhere else.
|
|
128
|
+
* - `Product.detail` is about **this member**. "Quantitative trading research for
|
|
129
|
+
* the Indian market, the factory's newest build." A sentence that is false, or
|
|
130
|
+
* vacuous, beside its neighbours belongs on the row.
|
|
131
|
+
*
|
|
132
|
+
* The test is whether the sentence survives its neighbours. A tagline reads the
|
|
133
|
+
* same in every row, so it is a tagline; the company site's five products each
|
|
134
|
+
* carried a sentence true of one and not of the four beside it, and the earlier
|
|
135
|
+
* version of this note told a caller to fold those into `description`, where they
|
|
136
|
+
* would have claimed to be about all five at once. That advice lost three
|
|
137
|
+
* published sentences in a migration rather than stating the choice, so both levels
|
|
138
|
+
* exist and the question above is the one to ask.
|
|
107
139
|
*
|
|
108
140
|
* It is a server Component: no hook, no state, no client code and no mode. The
|
|
109
141
|
* mark resolves its colour through the cascade, so a page that renders this in a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-grid.d.ts","sourceRoot":"","sources":["../../../src/blocks/product-grid-01/product-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACrF,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAExF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAA;IACV;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC/B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAA;IACzC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"product-grid.d.ts","sourceRoot":"","sources":["../../../src/blocks/product-grid-01/product-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACrF,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAExF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAA;IACV;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC/B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAA;IACzC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,OAAO,EACP,YAAmB,GACpB,EAAE,kBAAkB,sCA8CpB;AAED,eAAe,aAAa,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { ProductMark } from '../../components/ui/product-mark';
|
|
3
|
-
import { Section, SectionHeading } from '../../components/ui/section';
|
|
2
|
+
import { ProductMark } from '../../components/ui/product-mark.js';
|
|
3
|
+
import { Section, SectionHeading } from '../../components/ui/section.js';
|
|
4
4
|
/**
|
|
5
5
|
* A set of products as a stack of hairline rows: a two-part mark, a name, one
|
|
6
6
|
* tagline and a destination per row.
|
|
@@ -35,9 +35,23 @@ import { Section, SectionHeading } from '../../components/ui/section';
|
|
|
35
35
|
* it, and middle-click opens it in a new tab. The mark is `aria-hidden` inside
|
|
36
36
|
* it, so the link is announced once, by name, rather than as a shape and a word.
|
|
37
37
|
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
38
|
+
* **Which level a sentence belongs at is a fact about the sentence, and this
|
|
39
|
+
* settles it.** There are two levels and both are right, for different claims:
|
|
40
|
+
*
|
|
41
|
+
* - `description` is about **the set**. "Five products, one platform." or "Every
|
|
42
|
+
* one of these runs on the same runtime." A sentence that would be equally true
|
|
43
|
+
* if you deleted any one row belongs here, and nowhere else.
|
|
44
|
+
* - `Product.detail` is about **this member**. "Quantitative trading research for
|
|
45
|
+
* the Indian market, the factory's newest build." A sentence that is false, or
|
|
46
|
+
* vacuous, beside its neighbours belongs on the row.
|
|
47
|
+
*
|
|
48
|
+
* The test is whether the sentence survives its neighbours. A tagline reads the
|
|
49
|
+
* same in every row, so it is a tagline; the company site's five products each
|
|
50
|
+
* carried a sentence true of one and not of the four beside it, and the earlier
|
|
51
|
+
* version of this note told a caller to fold those into `description`, where they
|
|
52
|
+
* would have claimed to be about all five at once. That advice lost three
|
|
53
|
+
* published sentences in a migration rather than stating the choice, so both levels
|
|
54
|
+
* exist and the question above is the one to ask.
|
|
41
55
|
*
|
|
42
56
|
* It is a server Component: no hook, no state, no client code and no mode. The
|
|
43
57
|
* mark resolves its colour through the cascade, so a page that renders this in a
|
|
@@ -46,6 +60,6 @@ import { Section, SectionHeading } from '../../components/ui/section';
|
|
|
46
60
|
export function ProductGrid01({ eyebrow, title, description, products, caption, headingLevel = 'h2', }) {
|
|
47
61
|
if (products.length === 0)
|
|
48
62
|
return null;
|
|
49
|
-
return (_jsxs(Section, { children: [title ? (_jsx(SectionHeading, { as: headingLevel, align: "left", eyebrow: eyebrow, title: title, description: description, className: "mb-12" })) : null, _jsx("ul", { "data-slot": "product-grid", className: "flex flex-col", children: products.map((product) => (_jsx("li", { "data-slot": "product-grid-row", className: "border-b first:border-t", children: _jsxs("a", { href: product.href, rel: product.newTab ? 'noopener noreferrer' : undefined, target: product.newTab ? '_blank' : undefined, className: "hover:bg-accent/50 focus-visible:ring-ring flex flex-col gap-1 px-2 py-4 transition-colors duration-fast ease-out sm:flex-row sm:items-baseline sm:gap-6 focus-visible:ring-[3px] focus-visible:outline-none", children: [_jsx("span", { className: "flex shrink-0 items-center sm:w-64", children: _jsx(ProductMark, { id: product.id, name: product.name, pack: product.pack, size: "md" }) }), _jsx("span", { className: "text-muted-foreground text-pretty text-sm", children: product.tagline })] }) }, product.id))) }), caption ? _jsx("p", { className: "text-muted-foreground mt-6 text-pretty text-sm", children: caption }) : null] }));
|
|
63
|
+
return (_jsxs(Section, { children: [title ? (_jsx(SectionHeading, { as: headingLevel, align: "left", eyebrow: eyebrow, title: title, description: description, className: "mb-12" })) : null, _jsx("ul", { "data-slot": "product-grid", className: "flex flex-col", children: products.map((product) => (_jsx("li", { "data-slot": "product-grid-row", className: "border-b first:border-t", children: _jsxs("a", { href: product.href, rel: product.newTab ? 'noopener noreferrer' : undefined, target: product.newTab ? '_blank' : undefined, className: "hover:bg-accent/50 focus-visible:ring-ring flex flex-col gap-1 px-2 py-4 transition-colors duration-fast ease-out sm:flex-row sm:items-baseline sm:gap-6 focus-visible:ring-[3px] focus-visible:outline-none", children: [_jsx("span", { className: "flex shrink-0 items-center sm:w-64", children: _jsx(ProductMark, { id: product.id, name: product.name, pack: product.pack, size: "md" }) }), _jsxs("span", { className: "flex min-w-0 flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-pretty text-sm", children: product.tagline }), product.detail ? (_jsx("span", { className: "text-pretty text-sm", children: product.detail })) : null] })] }) }, product.id))) }), caption ? _jsx("p", { className: "text-muted-foreground mt-6 text-pretty text-sm", children: caption }) : null] }));
|
|
50
64
|
}
|
|
51
65
|
export default ProductGrid01;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/run-console-01/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACrD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { RunConsole01, default } from './run-console.js';
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { type TimelineEntry } from '../../components/ui/timeline.js';
|
|
2
|
+
/**
|
|
3
|
+
* The words the Block does not have.
|
|
4
|
+
*
|
|
5
|
+
* A Block that assembled a run console out of a budget, a run's name and a list of
|
|
6
|
+
* steps would have to ship English for every one of them, and every consumer would
|
|
7
|
+
* inherit it. So all of it arrives here: the names of the two regions, the words
|
|
8
|
+
* beside the budget reading, the empty state, and the word for the whole surface.
|
|
9
|
+
* The structure is this package's; the language is the caller's.
|
|
10
|
+
*/
|
|
11
|
+
export type RunConsole01Copy = {
|
|
12
|
+
/** Names the budget region, read before its reading. */
|
|
13
|
+
budgetLabel: string;
|
|
14
|
+
/** The words for the budget's value, given the number and its maximum. */
|
|
15
|
+
budgetValue: (value: number, max: number) => string;
|
|
16
|
+
/** Names the region the steps are in, read before them. */
|
|
17
|
+
stepsLabel: string;
|
|
18
|
+
/** The heading over the whole surface. */
|
|
19
|
+
title: string;
|
|
20
|
+
/** What a reader is told while the run has produced nothing yet. */
|
|
21
|
+
waiting: string;
|
|
22
|
+
};
|
|
23
|
+
/** The props the Run console accepts. */
|
|
24
|
+
export interface RunConsole01Props {
|
|
25
|
+
/**
|
|
26
|
+
* What this run is.
|
|
27
|
+
*
|
|
28
|
+
* The caller's words, and the only thing on the surface that says which run is
|
|
29
|
+
* being looked at. A console showing three runs at once is a table, not a
|
|
30
|
+
* console.
|
|
31
|
+
*/
|
|
32
|
+
title: string;
|
|
33
|
+
/** The words this Block does not have. */
|
|
34
|
+
copy: RunConsole01Copy;
|
|
35
|
+
/** The run's events, in the order they happened. */
|
|
36
|
+
steps: readonly TimelineEntry[];
|
|
37
|
+
/**
|
|
38
|
+
* How much of the budget this run has spent, and the budget itself.
|
|
39
|
+
*
|
|
40
|
+
* Optional, because a run with no budget is ordinary: a local run, a test, a
|
|
41
|
+
* command. A Block that drew an empty budget meter for those would be showing a
|
|
42
|
+
* measurement of nothing, which is the thing a Meter exists to avoid.
|
|
43
|
+
*/
|
|
44
|
+
budget?: {
|
|
45
|
+
/** What has been spent. */
|
|
46
|
+
value: number;
|
|
47
|
+
/** The ceiling. */
|
|
48
|
+
max: number;
|
|
49
|
+
/** The values the run should be able to see at a glance, if it has any. */
|
|
50
|
+
thresholds?: readonly {
|
|
51
|
+
at: number;
|
|
52
|
+
tone: 'neutral' | 'success' | 'warning' | 'destructive';
|
|
53
|
+
}[];
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* The line under the heading, usually where the run came from.
|
|
57
|
+
*
|
|
58
|
+
* Optional rather than defaulted, because a Block that invented one would be
|
|
59
|
+
* inventing a fact about the run.
|
|
60
|
+
*/
|
|
61
|
+
detail?: string;
|
|
62
|
+
/**
|
|
63
|
+
* Whether the run is still producing events.
|
|
64
|
+
*
|
|
65
|
+
* This is the prop that makes the surface a live one rather than a picture of
|
|
66
|
+
* one, and it does exactly two things: it marks the budget region busy while
|
|
67
|
+
* events are still arriving, and it puts the steps inside a LiveRegion so an
|
|
68
|
+
* append is announced. Both are the caller's decision to make because only the
|
|
69
|
+
* caller knows whether the transport has finished.
|
|
70
|
+
*/
|
|
71
|
+
streaming?: boolean;
|
|
72
|
+
/** Layout only. */
|
|
73
|
+
className?: string;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* A run, as a heading, a budget and the steps that got there.
|
|
77
|
+
*
|
|
78
|
+
* This is the surface the fourth Kind exists for, and the reason it is a Block
|
|
79
|
+
* rather than a Component is worth stating: a run console is not one thing. It is
|
|
80
|
+
* a measurement beside a sequence beside a stream, and a reader needs all three in
|
|
81
|
+
* the same glance to answer the only question they have, which is whether the run
|
|
82
|
+
* is going to finish and what it is costing. Separating them across three
|
|
83
|
+
* components and asking a consumer to assemble that is the assembly this system
|
|
84
|
+
* exists to remove.
|
|
85
|
+
*
|
|
86
|
+
* **The budget is a Meter and the steps are a Timeline, and neither is
|
|
87
|
+
* reimplemented here.** That is the whole discipline. The budget draws the limits
|
|
88
|
+
* the caller gave it and stays neutral below all of them, because the Component
|
|
89
|
+
* cannot see that a number is a problem. The steps draw their durations to scale
|
|
90
|
+
* against the slowest one, so "where did the time go" is answerable by looking.
|
|
91
|
+
* What this Block contributes is the arrangement and the two facts that belong to
|
|
92
|
+
* neither: that the two belong in one frame, and that a run with no budget should
|
|
93
|
+
* not be given an empty one.
|
|
94
|
+
*
|
|
95
|
+
* **Streaming is one prop doing two things, and both of them are about the same
|
|
96
|
+
* decision.** It marks the region busy, because a caller that has stopped sending
|
|
97
|
+
* events has told assistive technology a stream never ends if it leaves the flag
|
|
98
|
+
* up. And it wraps the steps in a LiveRegion, so an append is announced. Neither
|
|
99
|
+
* is done by default: a run that has finished should not announce anything, and a
|
|
100
|
+
* Block cannot know which kind of run it is looking at. The prop is the caller's
|
|
101
|
+
* knowledge expressed once, and it is the reason the steps and the budget both
|
|
102
|
+
* know about the run rather than each knowing about themselves.
|
|
103
|
+
*
|
|
104
|
+
* **The empty state is the run's first moments, so it is authored.** A console
|
|
105
|
+
* with nothing in it is what a reader sees for the first second of every run, and
|
|
106
|
+
* a blank frame in that moment reads as a broken surface rather than as a run that
|
|
107
|
+
* has not started.
|
|
108
|
+
*/
|
|
109
|
+
export declare function RunConsole01({ title, copy, steps, budget, detail, streaming, className, }: RunConsole01Props): import("react").JSX.Element;
|
|
110
|
+
export default RunConsole01;
|
|
111
|
+
//# sourceMappingURL=run-console.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-console.d.ts","sourceRoot":"","sources":["../../../src/blocks/run-console-01/run-console.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAG3E;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACnD,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAA;IAClB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAA;IACb,0CAA0C;IAC1C,IAAI,EAAE,gBAAgB,CAAA;IACtB,oDAAoD;IACpD,KAAK,EAAE,SAAS,aAAa,EAAE,CAAA;IAC/B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE;QACP,2BAA2B;QAC3B,KAAK,EAAE,MAAM,CAAA;QACb,mBAAmB;QACnB,GAAG,EAAE,MAAM,CAAA;QACX,2EAA2E;QAC3E,UAAU,CAAC,EAAE,SAAS;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAA;SAAE,EAAE,CAAA;KAChG,CAAA;IACD;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,KAAK,EACL,MAAM,EACN,MAAM,EACN,SAAiB,EACjB,SAAS,GACV,EAAE,iBAAiB,+BAgFnB;AAED,eAAe,YAAY,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { LiveRegion } from '../../components/ui/live-region.js';
|
|
3
|
+
import { Meter } from '../../components/ui/meter.js';
|
|
4
|
+
import { Timeline } from '../../components/ui/timeline.js';
|
|
5
|
+
import { cn } from '../../lib/utils.js';
|
|
6
|
+
/**
|
|
7
|
+
* A run, as a heading, a budget and the steps that got there.
|
|
8
|
+
*
|
|
9
|
+
* This is the surface the fourth Kind exists for, and the reason it is a Block
|
|
10
|
+
* rather than a Component is worth stating: a run console is not one thing. It is
|
|
11
|
+
* a measurement beside a sequence beside a stream, and a reader needs all three in
|
|
12
|
+
* the same glance to answer the only question they have, which is whether the run
|
|
13
|
+
* is going to finish and what it is costing. Separating them across three
|
|
14
|
+
* components and asking a consumer to assemble that is the assembly this system
|
|
15
|
+
* exists to remove.
|
|
16
|
+
*
|
|
17
|
+
* **The budget is a Meter and the steps are a Timeline, and neither is
|
|
18
|
+
* reimplemented here.** That is the whole discipline. The budget draws the limits
|
|
19
|
+
* the caller gave it and stays neutral below all of them, because the Component
|
|
20
|
+
* cannot see that a number is a problem. The steps draw their durations to scale
|
|
21
|
+
* against the slowest one, so "where did the time go" is answerable by looking.
|
|
22
|
+
* What this Block contributes is the arrangement and the two facts that belong to
|
|
23
|
+
* neither: that the two belong in one frame, and that a run with no budget should
|
|
24
|
+
* not be given an empty one.
|
|
25
|
+
*
|
|
26
|
+
* **Streaming is one prop doing two things, and both of them are about the same
|
|
27
|
+
* decision.** It marks the region busy, because a caller that has stopped sending
|
|
28
|
+
* events has told assistive technology a stream never ends if it leaves the flag
|
|
29
|
+
* up. And it wraps the steps in a LiveRegion, so an append is announced. Neither
|
|
30
|
+
* is done by default: a run that has finished should not announce anything, and a
|
|
31
|
+
* Block cannot know which kind of run it is looking at. The prop is the caller's
|
|
32
|
+
* knowledge expressed once, and it is the reason the steps and the budget both
|
|
33
|
+
* know about the run rather than each knowing about themselves.
|
|
34
|
+
*
|
|
35
|
+
* **The empty state is the run's first moments, so it is authored.** A console
|
|
36
|
+
* with nothing in it is what a reader sees for the first second of every run, and
|
|
37
|
+
* a blank frame in that moment reads as a broken surface rather than as a run that
|
|
38
|
+
* has not started.
|
|
39
|
+
*/
|
|
40
|
+
export function RunConsole01({ title, copy, steps, budget, detail, streaming = false, className, }) {
|
|
41
|
+
const waiting = steps.length === 0;
|
|
42
|
+
// Built once and placed in one of two places, so the streaming and the finished
|
|
43
|
+
// rendering cannot drift apart. Two copies of this markup would be two answers
|
|
44
|
+
// to what a run looks like, and the second one is the one that goes stale.
|
|
45
|
+
const body = waiting ? (_jsx("p", { "data-slot": "run-console-01-waiting", className: "text-muted-foreground text-sm", children: copy.waiting })) : (_jsx(Timeline, { entries: steps, label: copy.stepsLabel, empty: copy.waiting }));
|
|
46
|
+
return (_jsxs("div", { "data-slot": "run-console-01", className: cn('border-border bg-card flex flex-col gap-6 rounded-lg border p-5', className), children: [_jsxs("header", { "data-slot": "run-console-01-header", className: "flex flex-col gap-1", children: [_jsx("h2", { className: "text-foreground text-base font-semibold tracking-tight", children: title }), detail === undefined ? null : (_jsx("p", { className: "text-muted-foreground text-sm", children: detail }))] }), budget === undefined ? null : (_jsx("div", { "data-slot": "run-console-01-budget", children: _jsx(Meter, { value: budget.value, max: budget.max, label: copy.budgetLabel, valueText: copy.budgetValue(budget.value, budget.max), thresholds: budget.thresholds, children: _jsx("span", { children: copy.budgetValue(budget.value, budget.max) }) }) })), streaming ? (_jsx(LiveRegion, { busy: true, label: copy.stepsLabel, className: "min-w-0", children: body })) : (body)] }));
|
|
47
|
+
}
|
|
48
|
+
export default RunConsole01;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { SettingsPanel01, default } from './settings-panel';
|
|
2
|
-
export type { SettingsPanel01Props, SettingsPanelField, SettingsPanelOption, SettingsPanelSection, } from './settings-panel';
|
|
1
|
+
export { SettingsPanel01, default } from './settings-panel.js';
|
|
2
|
+
export type { SettingsPanel01Props, SettingsPanelField, SettingsPanelOption, SettingsPanelSection, } from './settings-panel.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { SettingsPanel01, default } from './settings-panel';
|
|
1
|
+
export { SettingsPanel01, default } from './settings-panel.js';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type FormEvent, type ReactNode } from 'react';
|
|
2
|
+
import { type HeadingLevel } from '../../components/ui/section.js';
|
|
2
3
|
export type SettingsPanelOption = {
|
|
3
4
|
label: string;
|
|
4
5
|
value: string;
|
|
@@ -44,6 +45,15 @@ export type SettingsPanelSection = {
|
|
|
44
45
|
};
|
|
45
46
|
export type SettingsPanel01Props = {
|
|
46
47
|
title: string;
|
|
48
|
+
/**
|
|
49
|
+
* Heading level for the card's title. See `HeadingLevel`.
|
|
50
|
+
*
|
|
51
|
+
* This Block draws no Section heading of its own, so the card title is the one
|
|
52
|
+
* heading it renders and takes the level directly rather than a step below one.
|
|
53
|
+
* The groups inside take their level from this one, so moving the panel in a
|
|
54
|
+
* document moves every heading in it together.
|
|
55
|
+
*/
|
|
56
|
+
headingLevel?: HeadingLevel;
|
|
47
57
|
description?: string;
|
|
48
58
|
/** The settings groups, each rendered with a heading and its own fields. */
|
|
49
59
|
sections: SettingsPanelSection[];
|
|
@@ -66,6 +76,6 @@ export type SettingsPanel01Props = {
|
|
|
66
76
|
* block renders the card, the groups and the footer; it owns no values and no
|
|
67
77
|
* copy, so a consumer wires it to whatever form state or mutation they use.
|
|
68
78
|
*/
|
|
69
|
-
export declare function SettingsPanel01({ title, description, sections, submitLabel, onSubmit, secondaryAction, footer, }: SettingsPanel01Props): import("react").JSX.Element;
|
|
79
|
+
export declare function SettingsPanel01({ title, description, sections, submitLabel, onSubmit, secondaryAction, footer, headingLevel, }: SettingsPanel01Props): import("react").JSX.Element;
|
|
70
80
|
export default SettingsPanel01;
|
|
71
81
|
//# sourceMappingURL=settings-panel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-panel.d.ts","sourceRoot":"","sources":["../../../src/blocks/settings-panel-01/settings-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"settings-panel.d.ts","sourceRoot":"","sources":["../../../src/blocks/settings-panel-01/settings-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AA2BhE,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAG3E,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAElE,KAAK,sBAAsB,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAC1B,CAAC,sBAAsB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC,CAAC,GACF,CAAC,sBAAsB,GAAG;IACxB,IAAI,EAAE,UAAU,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC,CAAC,GACF,CAAC,sBAAsB,GAAG;IACxB,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;CAC7C,CAAC,GACF,CAAC,sBAAsB,GAAG;IACxB,IAAI,EAAE,QAAQ,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,mBAAmB,EAAE,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC,CAAC,CAAA;AAEN,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,kBAAkB,EAAE,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAA;IACb;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4EAA4E;IAC5E,QAAQ,EAAE,oBAAoB,EAAE,CAAA;IAChC,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAA;IACtD,2CAA2C;IAC3C,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IACzD,uDAAuD;IACvD,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB,CAAA;AAyFD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,eAAe,EACf,MAAM,EACN,YAAmB,GACpB,EAAE,oBAAoB,+BAyDtB;AAED,eAAe,eAAe,CAAA"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { Fragment } from 'react';
|
|
4
|
-
import { Button } from '../../components/ui/button';
|
|
5
|
-
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from '../../components/ui/card';
|
|
6
|
-
import { Field, FieldDescription, FieldGroup, FieldLabel, } from '../../components/ui/field';
|
|
7
|
-
import { Input } from '../../components/ui/input';
|
|
8
|
-
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select';
|
|
9
|
-
import { Separator } from '../../components/ui/separator';
|
|
10
|
-
import { Switch } from '../../components/ui/switch';
|
|
11
|
-
import {
|
|
4
|
+
import { Button } from '../../components/ui/button.js';
|
|
5
|
+
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from '../../components/ui/card.js';
|
|
6
|
+
import { Field, FieldDescription, FieldGroup, FieldLabel, } from '../../components/ui/field.js';
|
|
7
|
+
import { Input } from '../../components/ui/input.js';
|
|
8
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select.js';
|
|
9
|
+
import { Separator } from '../../components/ui/separator.js';
|
|
10
|
+
import { Switch } from '../../components/ui/switch.js';
|
|
11
|
+
import { childLevel } from '../../components/ui/section.js';
|
|
12
|
+
import { Textarea } from '../../components/ui/textarea.js';
|
|
12
13
|
function SettingsField({ field }) {
|
|
13
14
|
if (field.kind === 'switch') {
|
|
14
15
|
return (_jsxs(Field, { className: "flex-row items-center justify-between gap-4", children: [_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx(FieldLabel, { htmlFor: field.id, children: field.label }), field.description ? (_jsx(FieldDescription, { children: field.description })) : null] }), _jsx(Switch, { id: field.id, checked: field.checked, defaultChecked: field.defaultChecked, onCheckedChange: field.onCheckedChange, disabled: field.disabled })] }));
|
|
@@ -31,8 +32,12 @@ function SettingsField({ field }) {
|
|
|
31
32
|
* block renders the card, the groups and the footer; it owns no values and no
|
|
32
33
|
* copy, so a consumer wires it to whatever form state or mutation they use.
|
|
33
34
|
*/
|
|
34
|
-
export function SettingsPanel01({ title, description, sections, submitLabel, onSubmit, secondaryAction, footer, }) {
|
|
35
|
+
export function SettingsPanel01({ title, description, sections, submitLabel, onSubmit, secondaryAction, footer, headingLevel = 'h2', }) {
|
|
36
|
+
// The panel title is the one heading the panel renders, and a group inside it is
|
|
37
|
+
// one step below, so the whole outline moves together when the panel does.
|
|
38
|
+
const Title = headingLevel;
|
|
39
|
+
const GroupTitle = childLevel(headingLevel);
|
|
35
40
|
const hasFooter = Boolean(submitLabel || secondaryAction || footer);
|
|
36
|
-
return (_jsx("form", { onSubmit: onSubmit, className: "w-full", children: _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: title }), description ? _jsx(CardDescription, { children: description }) : null] }), _jsx(CardContent, { className: "flex flex-col", children: sections.map((section, index) => (_jsxs(Fragment, { children: [index > 0 ? _jsx(Separator, { className: "my-6" }) : null, _jsxs("section", { className: "flex flex-col gap-4", "aria-labelledby": `${section.id}-heading`, children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(
|
|
41
|
+
return (_jsx("form", { onSubmit: onSubmit, className: "w-full", children: _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: _jsx(Title, { children: title }) }), description ? _jsx(CardDescription, { children: description }) : null] }), _jsx(CardContent, { className: "flex flex-col", children: sections.map((section, index) => (_jsxs(Fragment, { children: [index > 0 ? _jsx(Separator, { className: "my-6" }) : null, _jsxs("section", { className: "flex flex-col gap-4", "aria-labelledby": `${section.id}-heading`, children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(GroupTitle, { id: `${section.id}-heading`, className: "text-lg font-semibold tracking-tight", children: section.title }), section.description ? (_jsx("p", { className: "text-muted-foreground text-sm", children: section.description })) : null] }), _jsx(FieldGroup, { children: section.fields.map((field) => (_jsx(SettingsField, { field: field }, field.id))) })] })] }, section.id))) }), hasFooter ? (_jsxs(CardFooter, { className: "justify-end gap-2", children: [footer, secondaryAction ? (_jsx(Button, { type: "button", variant: "outline", onClick: secondaryAction.onClick, children: secondaryAction.label })) : null, submitLabel ? _jsx(Button, { type: "submit", children: submitLabel }) : null] })) : null] }) }));
|
|
37
42
|
}
|
|
38
43
|
export default SettingsPanel01;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { SiteFooter, default } from './site-footer';
|
|
2
|
-
export type { SiteFooterProps, SiteFooterColumn, SiteFooterLink, SiteFooterSocial } from './site-footer';
|
|
1
|
+
export { SiteFooter, default } from './site-footer.js';
|
|
2
|
+
export type { SiteFooterProps, SiteFooterColumn, SiteFooterLink, SiteFooterSocial } from './site-footer.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { SiteFooter, default } from './site-footer';
|
|
1
|
+
export { SiteFooter, default } from './site-footer.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { ProductMark } from '../../components/ui/product-mark';
|
|
3
|
-
import { cn } from '../../lib/utils';
|
|
2
|
+
import { ProductMark } from '../../components/ui/product-mark.js';
|
|
3
|
+
import { cn } from '../../lib/utils.js';
|
|
4
4
|
/**
|
|
5
5
|
* The footer of a product site: a brand lockup, grouped destinations, the links
|
|
6
6
|
* that leave the site, and an optional slot for the legal line.
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { SiteHeader, default } from './site-header';
|
|
2
|
-
export type { SiteHeaderProps, SiteHeaderLink } from './site-header';
|
|
1
|
+
export { SiteHeader, default } from './site-header.js';
|
|
2
|
+
export type { SiteHeaderProps, SiteHeaderLink } from './site-header.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { SiteHeader, default } from './site-header';
|
|
1
|
+
export { SiteHeader, default } from './site-header.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
-
import { type SwitcherProduct } from '../../components/ui/product-switcher';
|
|
3
|
-
import { type ProductMarkProps } from '../../components/ui/product-mark';
|
|
2
|
+
import { type SwitcherProduct } from '../../components/ui/product-switcher.js';
|
|
3
|
+
import { type ProductMarkProps } from '../../components/ui/product-mark.js';
|
|
4
4
|
/**
|
|
5
5
|
* One destination in the header's own navigation.
|
|
6
6
|
*
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { ProductSwitcher, } from '../../components/ui/product-switcher';
|
|
3
|
-
import { ProductMark } from '../../components/ui/product-mark';
|
|
4
|
-
import { cn } from '../../lib/utils';
|
|
2
|
+
import { ProductSwitcher, } from '../../components/ui/product-switcher.js';
|
|
3
|
+
import { ProductMark } from '../../components/ui/product-mark.js';
|
|
4
|
+
import { cn } from '../../lib/utils.js';
|
|
5
5
|
/**
|
|
6
6
|
* The header of a product site: a brand lockup, an optional product switcher, the
|
|
7
7
|
* site's own navigation and an optional slot for application controls.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/site-navbar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACnD,YAAY,EACV,eAAe,EACf,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,mBAAmB,GACpB,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SiteNavbar, default } from './site-navbar.js';
|