@cascivo/mcp 0.2.0 → 0.3.3
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 +1 -1
- package/README.md +53 -23
- package/dist/context/accordion.md +93 -0
- package/dist/context/action-sheet.md +117 -0
- package/dist/context/alert-dialog.md +122 -0
- package/dist/context/alert.md +110 -0
- package/dist/context/app-shell.md +98 -0
- package/dist/context/aspect-ratio.md +92 -0
- package/dist/context/avatar-group.md +111 -0
- package/dist/context/avatar.md +100 -0
- package/dist/context/badge.md +119 -0
- package/dist/context/block/console-app.md +66 -0
- package/dist/context/block/dashboard-charts.md +61 -0
- package/dist/context/block/empty-dashboard.md +60 -0
- package/dist/context/block/login-page.md +60 -0
- package/dist/context/block/notification-center.md +61 -0
- package/dist/context/block/page-with-breadcrumb.md +54 -0
- package/dist/context/block/settings-form-page.md +60 -0
- package/dist/context/block/sidebar-app.md +55 -0
- package/dist/context/block/stats-cards.md +61 -0
- package/dist/context/block/users-table-page.md +61 -0
- package/dist/context/blockquote.md +95 -0
- package/dist/context/bottom-sheet.md +112 -0
- package/dist/context/breadcrumb.md +106 -0
- package/dist/context/button-group.md +100 -0
- package/dist/context/button.md +117 -0
- package/dist/context/calendar.md +118 -0
- package/dist/context/card.md +90 -0
- package/dist/context/carousel.md +101 -0
- package/dist/context/chart/area-chart.md +99 -0
- package/dist/context/chart/bar-chart.md +114 -0
- package/dist/context/chart/boxplot.md +82 -0
- package/dist/context/chart/bubble-chart.md +80 -0
- package/dist/context/chart/bullet.md +75 -0
- package/dist/context/chart/calendar.md +79 -0
- package/dist/context/chart/candlestick.md +104 -0
- package/dist/context/chart/combo-chart.md +78 -0
- package/dist/context/chart/funnel.md +87 -0
- package/dist/context/chart/gauge.md +87 -0
- package/dist/context/chart/heatmap.md +77 -0
- package/dist/context/chart/histogram.md +74 -0
- package/dist/context/chart/kpi.md +70 -0
- package/dist/context/chart/line-chart.md +113 -0
- package/dist/context/chart/meter.md +71 -0
- package/dist/context/chart/pie-chart.md +126 -0
- package/dist/context/chart/polar.md +92 -0
- package/dist/context/chart/radar.md +81 -0
- package/dist/context/chart/radial-bar.md +96 -0
- package/dist/context/chart/sankey.md +89 -0
- package/dist/context/chart/scatter-chart.md +90 -0
- package/dist/context/chart/sparkline.md +69 -0
- package/dist/context/chart/stream.md +88 -0
- package/dist/context/chart/sunburst.md +93 -0
- package/dist/context/chart/treemap.md +84 -0
- package/dist/context/chat-bubble.md +116 -0
- package/dist/context/checkbox-card.md +104 -0
- package/dist/context/checkbox.md +104 -0
- package/dist/context/code-snippet.md +118 -0
- package/dist/context/code.md +103 -0
- package/dist/context/collapsible.md +104 -0
- package/dist/context/color-picker.md +101 -0
- package/dist/context/combobox.md +125 -0
- package/dist/context/command-menu.md +121 -0
- package/dist/context/comparison.md +117 -0
- package/dist/context/contained-list.md +103 -0
- package/dist/context/context-menu.md +103 -0
- package/dist/context/copy-button.md +106 -0
- package/dist/context/data-list.md +99 -0
- package/dist/context/data-table.md +149 -0
- package/dist/context/date-picker.md +116 -0
- package/dist/context/date-range-picker.md +113 -0
- package/dist/context/dock.md +117 -0
- package/dist/context/drawer.md +111 -0
- package/dist/context/dropdown.md +96 -0
- package/dist/context/editable.md +101 -0
- package/dist/context/editor/code-editor.md +146 -0
- package/dist/context/editor/highlight.md +74 -0
- package/dist/context/empty-state.md +101 -0
- package/dist/context/fab.md +128 -0
- package/dist/context/field.md +118 -0
- package/dist/context/file-uploader.md +121 -0
- package/dist/context/filter.md +129 -0
- package/dist/context/flow/flow-background.md +103 -0
- package/dist/context/flow/flow-canvas.md +82 -0
- package/dist/context/flow/flow-controls.md +84 -0
- package/dist/context/flow/flow-edge.md +128 -0
- package/dist/context/flow/flow-handle.md +83 -0
- package/dist/context/flow/flow-minimap.md +89 -0
- package/dist/context/flow/flow-node.md +97 -0
- package/dist/context/flow/flow-panel.md +75 -0
- package/dist/context/flow/flow-story.md +145 -0
- package/dist/context/flow/flow.md +139 -0
- package/dist/context/form.md +104 -0
- package/dist/context/header-panel.md +96 -0
- package/dist/context/header.md +104 -0
- package/dist/context/heading.md +107 -0
- package/dist/context/hover-card.md +108 -0
- package/dist/context/icon-button.md +115 -0
- package/dist/context/image.md +115 -0
- package/dist/context/indicator.md +95 -0
- package/dist/context/inline-loading.md +101 -0
- package/dist/context/input-group.md +122 -0
- package/dist/context/input.md +101 -0
- package/dist/context/item.md +109 -0
- package/dist/context/join.md +97 -0
- package/dist/context/kbd.md +100 -0
- package/dist/context/label.md +117 -0
- package/dist/context/layout/app-shell.md +85 -0
- package/dist/context/layout/auth-layout.md +74 -0
- package/dist/context/layout/auto-grid.md +69 -0
- package/dist/context/layout/center.md +67 -0
- package/dist/context/layout/columns.md +70 -0
- package/dist/context/layout/dashboard-layout.md +68 -0
- package/dist/context/layout/grid.md +70 -0
- package/dist/context/layout/masonry.md +70 -0
- package/dist/context/layout/page-header.md +75 -0
- package/dist/context/layout/section.md +69 -0
- package/dist/context/layout/settings-layout.md +68 -0
- package/dist/context/layout/spacer.md +64 -0
- package/dist/context/layout/split-view.md +71 -0
- package/dist/context/layout/stack.md +93 -0
- package/dist/context/link.md +112 -0
- package/dist/context/list.md +109 -0
- package/dist/context/log-viewer.md +124 -0
- package/dist/context/menu-button.md +137 -0
- package/dist/context/menu.md +108 -0
- package/dist/context/menubar.md +92 -0
- package/dist/context/modal.md +96 -0
- package/dist/context/multi-select.md +104 -0
- package/dist/context/native-select.md +118 -0
- package/dist/context/navigation-menu.md +95 -0
- package/dist/context/notification.md +116 -0
- package/dist/context/number-input.md +117 -0
- package/dist/context/otp-input.md +98 -0
- package/dist/context/overflow-menu.md +107 -0
- package/dist/context/pagination.md +123 -0
- package/dist/context/password-input.md +100 -0
- package/dist/context/popover.md +108 -0
- package/dist/context/progress-bar.md +107 -0
- package/dist/context/progress-circle.md +101 -0
- package/dist/context/progress-indicator.md +105 -0
- package/dist/context/progress.md +109 -0
- package/dist/context/prose.md +110 -0
- package/dist/context/pull-to-refresh.md +101 -0
- package/dist/context/qr-code.md +101 -0
- package/dist/context/radial-progress.md +117 -0
- package/dist/context/radio-card.md +95 -0
- package/dist/context/radio.md +94 -0
- package/dist/context/rating-group.md +97 -0
- package/dist/context/relative-time.md +90 -0
- package/dist/context/resizable.md +102 -0
- package/dist/context/scroll-area.md +101 -0
- package/dist/context/search.md +113 -0
- package/dist/context/section/cta.md +83 -0
- package/dist/context/section/feature-grid.md +98 -0
- package/dist/context/section/hero.md +101 -0
- package/dist/context/section/media-masonry.md +77 -0
- package/dist/context/section/page-footer.md +101 -0
- package/dist/context/section/stats-band.md +81 -0
- package/dist/context/segmented-control.md +101 -0
- package/dist/context/select.md +101 -0
- package/dist/context/separator.md +88 -0
- package/dist/context/sheet.md +100 -0
- package/dist/context/shell-header.md +105 -0
- package/dist/context/side-nav.md +134 -0
- package/dist/context/skeleton.md +101 -0
- package/dist/context/skip-nav.md +103 -0
- package/dist/context/slider.md +98 -0
- package/dist/context/spinner.md +89 -0
- package/dist/context/stack.md +96 -0
- package/dist/context/stat.md +101 -0
- package/dist/context/status.md +105 -0
- package/dist/context/steps.md +124 -0
- package/dist/context/structured-list.md +107 -0
- package/dist/context/swap.md +100 -0
- package/dist/context/swipe-item.md +110 -0
- package/dist/context/switcher.md +97 -0
- package/dist/context/tabs.md +93 -0
- package/dist/context/tag.md +110 -0
- package/dist/context/tags-input.md +94 -0
- package/dist/context/text.md +111 -0
- package/dist/context/textarea.md +98 -0
- package/dist/context/tile.md +116 -0
- package/dist/context/time-picker.md +102 -0
- package/dist/context/timeline.md +93 -0
- package/dist/context/toast.md +91 -0
- package/dist/context/toc.md +110 -0
- package/dist/context/toggle-group.md +118 -0
- package/dist/context/toggle.md +103 -0
- package/dist/context/toggletip.md +119 -0
- package/dist/context/tooltip.md +92 -0
- package/dist/context/tree-view.md +107 -0
- package/dist/context/user.md +100 -0
- package/dist/context/visually-hidden.md +90 -0
- package/dist/context.json +22456 -0
- package/dist/index.d.mts +3 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +73 -32
- package/dist/index.mjs.map +1 -1
- package/dist/marketplace.json +70 -0
- package/dist/registry.json +2832 -358
- package/dist/tokens.catalog.json +2375 -0
- package/dist/tokens.variants.json +3291 -0
- package/package.json +4 -3
- package/readme.body.md +53 -23
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Sparkline
|
|
2
|
+
|
|
3
|
+
**Category:** chart
|
|
4
|
+
**Description:** Compact inline sparkline for embedding trend data in dashboards or KPI cards.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Embedding a compact micro-trend inline in text, tables, or KPI cards
|
|
9
|
+
- Conveying direction at a glance where a full chart would be too large
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- Reading precise values or axes are needed — use LineChart
|
|
14
|
+
- As a standalone primary chart with its own panel
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **LineChart** (alternative): Use as a full chart when axes and tooltips are needed
|
|
19
|
+
- **Kpi** (contained-by): Commonly embedded inside a KPI card as a trend indicator
|
|
20
|
+
|
|
21
|
+
## Accessibility rationale
|
|
22
|
+
|
|
23
|
+
Renders with role="img" and requires a label prop for screen reader labeling.
|
|
24
|
+
|
|
25
|
+
## Props
|
|
26
|
+
|
|
27
|
+
| Name | Type | Required | Default | Description |
|
|
28
|
+
| -------- | ---------- | -------- | ------- | --------------------------- |
|
|
29
|
+
| `data` | `number[]` | Yes | — | Array of numeric values |
|
|
30
|
+
| `label` | `string` | Yes | — | Accessible label |
|
|
31
|
+
| `width` | `number` | No | 80 | Width of the component. |
|
|
32
|
+
| `height` | `number` | No | 32 | Height of the component. |
|
|
33
|
+
| `color` | `string` | No | — | Stroke color (CSS value) |
|
|
34
|
+
| `endDot` | `boolean` | No | — | Show dot at last data point |
|
|
35
|
+
|
|
36
|
+
## Tokens
|
|
37
|
+
|
|
38
|
+
- `--cascivo-chart-1`
|
|
39
|
+
|
|
40
|
+
## Examples
|
|
41
|
+
|
|
42
|
+
### Inline sparkline
|
|
43
|
+
|
|
44
|
+
```jsx
|
|
45
|
+
import { Sparkline } from '@cascivo/charts'
|
|
46
|
+
;<Sparkline data={[10, 20, 15, 30, 25]} label="Trend" endDot />
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## AI context prompt
|
|
50
|
+
|
|
51
|
+
Copy this into an LLM context bar before editing this component:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
I am modifying the cascivo Sparkline component (chart). Compact inline sparkline for embedding trend data in dashboards or KPI cards.
|
|
55
|
+
|
|
56
|
+
Architecture constraints — follow exactly:
|
|
57
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
58
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
59
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
60
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
61
|
+
- CSS logical properties only (RTL-safe).
|
|
62
|
+
|
|
63
|
+
Sparkline is strictly bound to these tokens — use only these, do not invent token names:
|
|
64
|
+
--cascivo-chart-1
|
|
65
|
+
|
|
66
|
+
Accessibility: role "img", WCAG 2.1-AA. Keep it AA.
|
|
67
|
+
|
|
68
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
69
|
+
```
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Stream
|
|
2
|
+
|
|
3
|
+
**Category:** chart
|
|
4
|
+
**Description:** Streamgraph — stacked areas on a centered (silhouette) flowing baseline.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Showing how several series ebb and flow over time as proportions of a whole
|
|
9
|
+
- An organic, aesthetic alternative to a stacked area chart
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- Reading precise values — use LineChart or AreaChart
|
|
14
|
+
- Few categories with exact comparison — use BarChart
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **AreaChart** (alternative): Use a zero-baseline stacked area for precise reading
|
|
19
|
+
|
|
20
|
+
## Accessibility rationale
|
|
21
|
+
|
|
22
|
+
Renders role="img" with a title and a fallback data table.
|
|
23
|
+
|
|
24
|
+
## Props
|
|
25
|
+
|
|
26
|
+
| Name | Type | Required | Default | Description |
|
|
27
|
+
| ------------- | ------------------------ | -------- | ---------- | --------------------------------------------------------------------- |
|
|
28
|
+
| `series` | `StreamSeries[]` | Yes | — | Series, each with values[] aligned to categories. |
|
|
29
|
+
| `categories` | `(string \| number)[]` | Yes | — | X-axis labels aligned with each series values. |
|
|
30
|
+
| `title` | `string` | Yes | — | Title text for the component. |
|
|
31
|
+
| `description` | `string` | No | — | Supporting description text. |
|
|
32
|
+
| `offset` | `'silhouette' \| 'zero'` | No | silhouette | silhouette centers the stack (streamgraph); zero is a baseline stack. |
|
|
33
|
+
| `curve` | `Curve` | No | basis | Interpolation curve. |
|
|
34
|
+
| `width` | `number` | No | — | Width of the component. |
|
|
35
|
+
| `height` | `number` | No | 300 | Height of the component. |
|
|
36
|
+
| `legend` | `boolean` | No | — | Whether to show the legend. |
|
|
37
|
+
| `tooltip` | `boolean` | No | — | Whether to show tooltips on hover. |
|
|
38
|
+
| `className` | `string` | No | — | Additional CSS class names merged onto the root element. |
|
|
39
|
+
| `plain` | `boolean` | No | false | When true, renders a minimal variant without chart chrome. |
|
|
40
|
+
|
|
41
|
+
## Tokens
|
|
42
|
+
|
|
43
|
+
- `--cascivo-chart-1`
|
|
44
|
+
- `--cascivo-chart-2`
|
|
45
|
+
- `--cascivo-chart-3`
|
|
46
|
+
- `--cascivo-chart-4`
|
|
47
|
+
- `--cascivo-chart-5`
|
|
48
|
+
- `--cascivo-chart-6`
|
|
49
|
+
- `--cascivo-chart-7`
|
|
50
|
+
- `--cascivo-chart-8`
|
|
51
|
+
|
|
52
|
+
## Examples
|
|
53
|
+
|
|
54
|
+
### Streamgraph
|
|
55
|
+
|
|
56
|
+
```jsx
|
|
57
|
+
import { Stream } from '@cascivo/charts'
|
|
58
|
+
;<Stream
|
|
59
|
+
title="Topics over time"
|
|
60
|
+
categories={['Jan', 'Feb', 'Mar', 'Apr']}
|
|
61
|
+
series={[
|
|
62
|
+
{ id: 'a', label: 'A', values: [4, 6, 5, 8] },
|
|
63
|
+
{ id: 'b', label: 'B', values: [2, 3, 7, 4] },
|
|
64
|
+
]}
|
|
65
|
+
/>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## AI context prompt
|
|
69
|
+
|
|
70
|
+
Copy this into an LLM context bar before editing this component:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
I am modifying the cascivo Stream component (chart). Streamgraph — stacked areas on a centered (silhouette) flowing baseline.
|
|
74
|
+
|
|
75
|
+
Architecture constraints — follow exactly:
|
|
76
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
77
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
78
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
79
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
80
|
+
- CSS logical properties only (RTL-safe).
|
|
81
|
+
|
|
82
|
+
Stream is strictly bound to these tokens — use only these, do not invent token names:
|
|
83
|
+
--cascivo-chart-1, --cascivo-chart-2, --cascivo-chart-3, --cascivo-chart-4, --cascivo-chart-5, --cascivo-chart-6, --cascivo-chart-7, --cascivo-chart-8
|
|
84
|
+
|
|
85
|
+
Accessibility: role "img", WCAG 2.1-AA, keyboard: Tab (focus chart)/ArrowLeft/ArrowRight (navigate)/Escape (clear focus). Keep it AA.
|
|
86
|
+
|
|
87
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
88
|
+
```
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Sunburst
|
|
2
|
+
|
|
3
|
+
**Category:** chart
|
|
4
|
+
**Description:** Radial hierarchy — concentric rings where each node is an annular segment sized by value.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Showing a part-of-whole hierarchy across multiple levels
|
|
9
|
+
- A radial alternative to a Treemap for nested proportions
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- A flat set of proportions — use PieChart
|
|
14
|
+
- Precise leaf comparison — use a Treemap or bars
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **Treemap** (alternative): Use the rectilinear layout for dense leaves
|
|
19
|
+
|
|
20
|
+
## Accessibility rationale
|
|
21
|
+
|
|
22
|
+
Renders role="img" with a title and a fallback path/value table.
|
|
23
|
+
|
|
24
|
+
## Props
|
|
25
|
+
|
|
26
|
+
| Name | Type | Required | Default | Description |
|
|
27
|
+
| ------------- | ---------- | -------- | ------- | ----------------------------------------------------------------- |
|
|
28
|
+
| `data` | `HierNode` | Yes | — | Root of the tree; leaves carry value, parents sum their children. |
|
|
29
|
+
| `title` | `string` | Yes | — | Title text for the component. |
|
|
30
|
+
| `description` | `string` | No | — | Supporting description text. |
|
|
31
|
+
| `size` | `number` | No | — | Square shorthand (width === height). |
|
|
32
|
+
| `width` | `number` | No | — | Width of the component. |
|
|
33
|
+
| `height` | `number` | No | 300 | Height of the component. |
|
|
34
|
+
| `tooltip` | `boolean` | No | — | Whether to show tooltips on hover. |
|
|
35
|
+
| `className` | `string` | No | — | Additional CSS class names merged onto the root element. |
|
|
36
|
+
| `plain` | `boolean` | No | false | When true, renders a minimal variant without chart chrome. |
|
|
37
|
+
|
|
38
|
+
## Tokens
|
|
39
|
+
|
|
40
|
+
- `--cascivo-chart-1`
|
|
41
|
+
- `--cascivo-chart-2`
|
|
42
|
+
- `--cascivo-chart-3`
|
|
43
|
+
- `--cascivo-chart-4`
|
|
44
|
+
- `--cascivo-chart-5`
|
|
45
|
+
- `--cascivo-chart-6`
|
|
46
|
+
- `--cascivo-chart-7`
|
|
47
|
+
- `--cascivo-chart-8`
|
|
48
|
+
|
|
49
|
+
## Examples
|
|
50
|
+
|
|
51
|
+
### Sunburst
|
|
52
|
+
|
|
53
|
+
```jsx
|
|
54
|
+
import { Sunburst } from '@cascivo/charts'
|
|
55
|
+
;<Sunburst
|
|
56
|
+
title="Disk usage"
|
|
57
|
+
data={{
|
|
58
|
+
label: 'root',
|
|
59
|
+
children: [
|
|
60
|
+
{
|
|
61
|
+
label: 'src',
|
|
62
|
+
children: [
|
|
63
|
+
{ label: 'app', value: 40 },
|
|
64
|
+
{ label: 'lib', value: 25 },
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
{ label: 'docs', value: 15 },
|
|
68
|
+
],
|
|
69
|
+
}}
|
|
70
|
+
/>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## AI context prompt
|
|
74
|
+
|
|
75
|
+
Copy this into an LLM context bar before editing this component:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
I am modifying the cascivo Sunburst component (chart). Radial hierarchy — concentric rings where each node is an annular segment sized by value.
|
|
79
|
+
|
|
80
|
+
Architecture constraints — follow exactly:
|
|
81
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
82
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
83
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
84
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
85
|
+
- CSS logical properties only (RTL-safe).
|
|
86
|
+
|
|
87
|
+
Sunburst is strictly bound to these tokens — use only these, do not invent token names:
|
|
88
|
+
--cascivo-chart-1, --cascivo-chart-2, --cascivo-chart-3, --cascivo-chart-4, --cascivo-chart-5, --cascivo-chart-6, --cascivo-chart-7, --cascivo-chart-8
|
|
89
|
+
|
|
90
|
+
Accessibility: role "img", WCAG 2.1-AA, keyboard: Tab (focus chart)/ArrowLeft/ArrowRight (navigate nodes)/Escape (clear focus). Keep it AA.
|
|
91
|
+
|
|
92
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
93
|
+
```
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Treemap
|
|
2
|
+
|
|
3
|
+
**Category:** chart
|
|
4
|
+
**Description:** Squarified treemap for visualizing part-to-whole hierarchical data.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Showing part-to-whole proportions across many segments in a compact area
|
|
9
|
+
- Visualising hierarchical magnitude where slice size encodes value
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- Few segments where a simple split reads better — use PieChart for ≤5
|
|
14
|
+
- Precise value comparison — area encoding is approximate
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **PieChart** (alternative): Use for part-of-whole with five or fewer flat segments
|
|
19
|
+
- **Heatmap** (alternative): Use for magnitude across a two-dimensional grid
|
|
20
|
+
|
|
21
|
+
## Accessibility rationale
|
|
22
|
+
|
|
23
|
+
Renders with role="img" and requires a title prop for screen reader labeling.
|
|
24
|
+
|
|
25
|
+
## Props
|
|
26
|
+
|
|
27
|
+
| Name | Type | Required | Default | Description |
|
|
28
|
+
| ------------- | ------------------------------------------------ | -------- | ------- | --------------------------------------------------------------------- |
|
|
29
|
+
| `data` | `{ id: string; label: string; value: number }[]` | Yes | — | The hierarchical data to render as nested rectangles. |
|
|
30
|
+
| `title` | `string` | Yes | — | Title text for the component. |
|
|
31
|
+
| `description` | `string` | No | — | Supporting description text. |
|
|
32
|
+
| `width` | `number` | No | — | Width of the component. |
|
|
33
|
+
| `height` | `number` | No | 320 | Height of the component. |
|
|
34
|
+
| `className` | `string` | No | — | Additional CSS class names merged onto the root element. |
|
|
35
|
+
| `plain` | `boolean` | No | false | Marks only — no axes, grid lines, or legend. For micro/inline charts. |
|
|
36
|
+
|
|
37
|
+
## Tokens
|
|
38
|
+
|
|
39
|
+
- `--cascivo-chart-1`
|
|
40
|
+
- `--cascivo-chart-2`
|
|
41
|
+
- `--cascivo-chart-3`
|
|
42
|
+
- `--cascivo-chart-4`
|
|
43
|
+
- `--cascivo-chart-5`
|
|
44
|
+
- `--cascivo-chart-6`
|
|
45
|
+
- `--cascivo-chart-7`
|
|
46
|
+
- `--cascivo-chart-8`
|
|
47
|
+
|
|
48
|
+
## Examples
|
|
49
|
+
|
|
50
|
+
### Basic treemap
|
|
51
|
+
|
|
52
|
+
```jsx
|
|
53
|
+
import { Treemap } from '@cascivo/charts'
|
|
54
|
+
|
|
55
|
+
const data = [
|
|
56
|
+
{id:'a',label:'Alpha',value:40},
|
|
57
|
+
{id:'b',label:'Beta',value:25},
|
|
58
|
+
{id:'c',label:'Gamma',value:20},
|
|
59
|
+
{id:'d',label:'Delta',value:15},
|
|
60
|
+
]
|
|
61
|
+
<Treemap data={data} title="Market share" />
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## AI context prompt
|
|
65
|
+
|
|
66
|
+
Copy this into an LLM context bar before editing this component:
|
|
67
|
+
|
|
68
|
+
```text
|
|
69
|
+
I am modifying the cascivo Treemap component (chart). Squarified treemap for visualizing part-to-whole hierarchical data.
|
|
70
|
+
|
|
71
|
+
Architecture constraints — follow exactly:
|
|
72
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
73
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
74
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
75
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
76
|
+
- CSS logical properties only (RTL-safe).
|
|
77
|
+
|
|
78
|
+
Treemap is strictly bound to these tokens — use only these, do not invent token names:
|
|
79
|
+
--cascivo-chart-1, --cascivo-chart-2, --cascivo-chart-3, --cascivo-chart-4, --cascivo-chart-5, --cascivo-chart-6, --cascivo-chart-7, --cascivo-chart-8
|
|
80
|
+
|
|
81
|
+
Accessibility: role "img", WCAG 2.1-AA. Keep it AA.
|
|
82
|
+
|
|
83
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
84
|
+
```
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# ChatBubble
|
|
2
|
+
|
|
3
|
+
**Category:** display
|
|
4
|
+
**Description:** Message bubble for chat and messaging UIs with avatar, name, and timestamp support
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Chat UIs and messaging features showing conversation history
|
|
9
|
+
- Comment threads with a bubble-style layout
|
|
10
|
+
- Customer support widgets displaying agent and user messages
|
|
11
|
+
|
|
12
|
+
## When NOT to use
|
|
13
|
+
|
|
14
|
+
- General content cards without a conversational context — use Card
|
|
15
|
+
- Inline comments that do not need a bubble visual treatment
|
|
16
|
+
|
|
17
|
+
## Anti-patterns
|
|
18
|
+
|
|
19
|
+
### ChatBubble implies a back-and-forth conversation; use Card for standalone content pieces
|
|
20
|
+
|
|
21
|
+
**Bad:** `Using ChatBubble for notification cards or feed items`
|
|
22
|
+
**Good:** `<Card> or <Alert> for non-conversational content`
|
|
23
|
+
**Why:** ChatBubble implies a back-and-forth conversation; use Card for standalone content pieces
|
|
24
|
+
|
|
25
|
+
## Related components
|
|
26
|
+
|
|
27
|
+
- **Card** (alternative): Use for general content display that is not part of a conversation
|
|
28
|
+
- **Avatar** (pairs-with): Pass an Avatar as the avatar prop to identify the message sender
|
|
29
|
+
|
|
30
|
+
## Accessibility rationale
|
|
31
|
+
|
|
32
|
+
Pure layout component with role="none". Wrap a list of ChatBubble elements in an element with role="log" and aria-live="polite" to announce new messages to screen readers.
|
|
33
|
+
|
|
34
|
+
## Props
|
|
35
|
+
|
|
36
|
+
| Name | Type | Required | Default | Description |
|
|
37
|
+
| ----------- | ------------------ | -------- | ------- | -------------------------------------------------------- |
|
|
38
|
+
| `children` | `React.ReactNode` | Yes | — | Content rendered inside the component. |
|
|
39
|
+
| `side` | `'start' \| 'end'` | No | start | Edge the component is anchored to. |
|
|
40
|
+
| `avatar` | `React.ReactNode` | No | — | Avatar element shown beside the message. |
|
|
41
|
+
| `name` | `string` | No | — | Display name of the message sender. |
|
|
42
|
+
| `time` | `string` | No | — | Timestamp text shown with the message. |
|
|
43
|
+
| `className` | `string` | No | — | Additional CSS class names merged onto the root element. |
|
|
44
|
+
|
|
45
|
+
## Tokens
|
|
46
|
+
|
|
47
|
+
- `--cascivo-color-surface`
|
|
48
|
+
- `--cascivo-color-text`
|
|
49
|
+
- `--cascivo-color-text-muted`
|
|
50
|
+
- `--cascivo-color-text-subtle`
|
|
51
|
+
- `--cascivo-color-accent`
|
|
52
|
+
- `--cascivo-color-accent-content`
|
|
53
|
+
- `--cascivo-radius-overlay`
|
|
54
|
+
- `--cascivo-radius-indicator`
|
|
55
|
+
|
|
56
|
+
## Examples
|
|
57
|
+
|
|
58
|
+
### Incoming message
|
|
59
|
+
|
|
60
|
+
Message from another user, aligned to the start
|
|
61
|
+
|
|
62
|
+
```jsx
|
|
63
|
+
<ChatBubble side="start" name="Alice" time="10:42 AM">
|
|
64
|
+
Hey, how are you?
|
|
65
|
+
</ChatBubble>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Outgoing message
|
|
69
|
+
|
|
70
|
+
Current user message, aligned to the end with accent background
|
|
71
|
+
|
|
72
|
+
```jsx
|
|
73
|
+
<ChatBubble side="end" time="10:43 AM">
|
|
74
|
+
Doing great, thanks!
|
|
75
|
+
</ChatBubble>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### With avatar
|
|
79
|
+
|
|
80
|
+
Message with an avatar beside the bubble
|
|
81
|
+
|
|
82
|
+
```jsx
|
|
83
|
+
<ChatBubble side="start" avatar={<Avatar src="/alice.png" size="sm" />} name="Alice">
|
|
84
|
+
See you tomorrow!
|
|
85
|
+
</ChatBubble>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Boundaries
|
|
89
|
+
|
|
90
|
+
| Area | Level | Note |
|
|
91
|
+
| ------------ | -------- | ------------------------------------------------------------------------- |
|
|
92
|
+
| avatar slot | flexible | Accepts any ReactNode — Avatar, initials, icon, or nothing |
|
|
93
|
+
| body content | flexible | children accepts rich content including images, links, and formatted text |
|
|
94
|
+
|
|
95
|
+
## AI context prompt
|
|
96
|
+
|
|
97
|
+
Copy this into an LLM context bar before editing this component:
|
|
98
|
+
|
|
99
|
+
```text
|
|
100
|
+
I am modifying the cascivo ChatBubble component (display). Message bubble for chat and messaging UIs with avatar, name, and timestamp support
|
|
101
|
+
|
|
102
|
+
Architecture constraints — follow exactly:
|
|
103
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
104
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
105
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
106
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
107
|
+
- CSS logical properties only (RTL-safe).
|
|
108
|
+
|
|
109
|
+
ChatBubble is strictly bound to these tokens — use only these, do not invent token names:
|
|
110
|
+
--cascivo-color-surface, --cascivo-color-text, --cascivo-color-text-muted, --cascivo-color-text-subtle, --cascivo-color-accent, --cascivo-color-accent-content, --cascivo-radius-overlay, --cascivo-radius-indicator
|
|
111
|
+
|
|
112
|
+
Accessibility: role "none", WCAG 2.2-AA. Keep it AA.
|
|
113
|
+
Flexible: avatar slot, body content.
|
|
114
|
+
|
|
115
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
116
|
+
```
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# CheckboxCard
|
|
2
|
+
|
|
3
|
+
**Category:** inputs
|
|
4
|
+
**Description:** Multi-selectable card backed by a native checkbox. Use multiple independent CheckboxCards for multi-select scenarios.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Multi-select where each option needs a title and supporting description (feature toggles, add-ons)
|
|
9
|
+
- Presenting selectable options as larger, scannable click targets rather than a dense checkbox list
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- A simple labelled boolean in a form — use Checkbox
|
|
14
|
+
- Choosing exactly one option from a set — use RadioCard or Radio
|
|
15
|
+
|
|
16
|
+
## Anti-patterns
|
|
17
|
+
|
|
18
|
+
### Each CheckboxCard is an independent native checkbox — nothing enforces a single selection across them
|
|
19
|
+
|
|
20
|
+
**Bad:** `Using CheckboxCard for mutually exclusive options`
|
|
21
|
+
**Good:** `Use RadioCard so only one can be selected`
|
|
22
|
+
**Why:** Each CheckboxCard is an independent native checkbox — nothing enforces a single selection across them
|
|
23
|
+
|
|
24
|
+
### The description is a single supporting line; long content breaks the card layout and scannability
|
|
25
|
+
|
|
26
|
+
**Bad:** `Cramming a paragraph of marketing copy into description`
|
|
27
|
+
**Good:** `undefined`
|
|
28
|
+
**Why:** The description is a single supporting line; long content breaks the card layout and scannability
|
|
29
|
+
|
|
30
|
+
## Related components
|
|
31
|
+
|
|
32
|
+
- **Checkbox** (alternative): Use the plain checkbox when a title/description card is overkill
|
|
33
|
+
- **RadioCard** (alternative): Use for single-select card groups
|
|
34
|
+
|
|
35
|
+
## Accessibility rationale
|
|
36
|
+
|
|
37
|
+
Backed by a native <input type="checkbox"> inside a <label>, so the entire card is clickable and role, checked state, Space activation, and label association come from the platform; the SVG glyph is aria-hidden as it is purely decorative
|
|
38
|
+
|
|
39
|
+
## Props
|
|
40
|
+
|
|
41
|
+
| Name | Type | Required | Default | Description |
|
|
42
|
+
| ----------------- | ---------------------------- | -------- | ------- | ------------------------ |
|
|
43
|
+
| `title` | `ReactNode` | Yes | — | Card title |
|
|
44
|
+
| `description` | `ReactNode` | No | — | Optional description |
|
|
45
|
+
| `checked` | `boolean` | No | — | Controlled checked state |
|
|
46
|
+
| `defaultChecked` | `boolean` | No | — | Uncontrolled default |
|
|
47
|
+
| `onCheckedChange` | `(checked: boolean) => void` | No | — | Change callback |
|
|
48
|
+
| `disabled` | `boolean` | No | — | Disables the card |
|
|
49
|
+
|
|
50
|
+
## Tokens
|
|
51
|
+
|
|
52
|
+
- `--cascivo-color-accent`
|
|
53
|
+
- `--cascivo-color-border`
|
|
54
|
+
- `--cascivo-radius-surface`
|
|
55
|
+
|
|
56
|
+
## Examples
|
|
57
|
+
|
|
58
|
+
### Feature toggles
|
|
59
|
+
|
|
60
|
+
Multi-select feature toggles
|
|
61
|
+
|
|
62
|
+
```jsx
|
|
63
|
+
<div style={{ display: 'grid', gap: 12 }}>
|
|
64
|
+
<CheckboxCard
|
|
65
|
+
title="Automated backups"
|
|
66
|
+
description="Daily snapshots, 30-day retention"
|
|
67
|
+
defaultChecked
|
|
68
|
+
/>
|
|
69
|
+
<CheckboxCard title="Monitoring" description="Metrics + alerting" />
|
|
70
|
+
<CheckboxCard title="Audit log" description="Requires Team plan" disabled />
|
|
71
|
+
</div>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Boundaries
|
|
75
|
+
|
|
76
|
+
| Area | Level | Note |
|
|
77
|
+
| -------------------------- | -------- | --------------------------------------------------------------------------------------------------- |
|
|
78
|
+
| controlled vs uncontrolled | flexible | Supports both checked + onCheckedChange and defaultChecked |
|
|
79
|
+
| token names | strict | Card styling resolves to --cascivo-color-accent / --cascivo-color-border / --cascivo-radius-surface |
|
|
80
|
+
|
|
81
|
+
## AI context prompt
|
|
82
|
+
|
|
83
|
+
Copy this into an LLM context bar before editing this component:
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
I am modifying the cascivo CheckboxCard component (inputs). Multi-selectable card backed by a native checkbox. Use multiple independent CheckboxCards for multi-select scenarios.
|
|
87
|
+
|
|
88
|
+
Architecture constraints — follow exactly:
|
|
89
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
90
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
91
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
92
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
93
|
+
- CSS logical properties only (RTL-safe).
|
|
94
|
+
|
|
95
|
+
CheckboxCard is strictly bound to these tokens — use only these, do not invent token names:
|
|
96
|
+
--cascivo-color-accent, --cascivo-color-border, --cascivo-radius-surface
|
|
97
|
+
|
|
98
|
+
Accessibility: role "checkbox", WCAG 2.2-AA, keyboard: Space. Keep it AA.
|
|
99
|
+
|
|
100
|
+
Do not change (strict): token names — Card styling resolves to --cascivo-color-accent / --cascivo-color-border / --cascivo-radius-surface
|
|
101
|
+
Flexible: controlled vs uncontrolled.
|
|
102
|
+
|
|
103
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
104
|
+
```
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Checkbox
|
|
2
|
+
|
|
3
|
+
**Category:** inputs
|
|
4
|
+
**Description:** Binary toggle for forms, with indeterminate support
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Selecting zero or more options from a list where each choice is independent
|
|
9
|
+
- A single opt-in within a form (accept terms, subscribe) submitted alongside other fields
|
|
10
|
+
- A "select all" control that needs an indeterminate (partial) state
|
|
11
|
+
|
|
12
|
+
## When NOT to use
|
|
13
|
+
|
|
14
|
+
- A binary setting that applies immediately on change — use Toggle
|
|
15
|
+
- Choosing exactly one option from a mutually exclusive set — use Radio
|
|
16
|
+
|
|
17
|
+
## Anti-patterns
|
|
18
|
+
|
|
19
|
+
### Checkbox signals a form value to be submitted; Toggle signals an immediate on/off state change
|
|
20
|
+
|
|
21
|
+
**Bad:** `<Checkbox label="Dark mode" /> that flips a setting live`
|
|
22
|
+
**Good:** `<Toggle label="Dark mode" />`
|
|
23
|
+
**Why:** Checkbox signals a form value to be submitted; Toggle signals an immediate on/off state change
|
|
24
|
+
|
|
25
|
+
### Independent checkboxes let the user select both or neither, which a single exclusive choice should not allow
|
|
26
|
+
|
|
27
|
+
**Bad:** `Two checkboxes for one either/or choice`
|
|
28
|
+
**Good:** `Use Radio for mutually exclusive options`
|
|
29
|
+
**Why:** Independent checkboxes let the user select both or neither, which a single exclusive choice should not allow
|
|
30
|
+
|
|
31
|
+
## Related components
|
|
32
|
+
|
|
33
|
+
- **Toggle** (alternative): Use for immediate binary settings rather than form values
|
|
34
|
+
- **Radio** (alternative): Use for selecting exactly one from a mutually exclusive set
|
|
35
|
+
- **CheckboxCard** (alternative): Use the card variant when each option needs a title plus description
|
|
36
|
+
|
|
37
|
+
## Accessibility rationale
|
|
38
|
+
|
|
39
|
+
Renders a native <input type="checkbox"> wrapped in a <label>, so role, checked/indeterminate state, Space activation, and label association come from the platform; the indeterminate visual is set on the DOM node since it is a property not an attribute
|
|
40
|
+
|
|
41
|
+
## Props
|
|
42
|
+
|
|
43
|
+
| Name | Type | Required | Default | Description |
|
|
44
|
+
| --------------- | -------------------------------------------- | -------- | ------- | ------------------------------------------------------------------ |
|
|
45
|
+
| `label` | `string` | No | — | Text label for the control. |
|
|
46
|
+
| `checked` | `boolean` | No | — | Whether the control is checked (controlled). |
|
|
47
|
+
| `indeterminate` | `boolean` | No | false | When true, renders the mixed/indeterminate state. |
|
|
48
|
+
| `disabled` | `boolean` | No | false | When true, disables the control and removes it from the tab order. |
|
|
49
|
+
| `onChange` | `React.ChangeEventHandler<HTMLInputElement>` | No | — | Called when the value changes. |
|
|
50
|
+
|
|
51
|
+
## Tokens
|
|
52
|
+
|
|
53
|
+
- `--cascivo-color-surface`
|
|
54
|
+
- `--cascivo-color-accent`
|
|
55
|
+
- `--cascivo-color-border-strong`
|
|
56
|
+
- `--cascivo-color-text-on-accent`
|
|
57
|
+
- `--cascivo-radius-sm`
|
|
58
|
+
- `--cascivo-focus-ring`
|
|
59
|
+
|
|
60
|
+
## Examples
|
|
61
|
+
|
|
62
|
+
### With label
|
|
63
|
+
|
|
64
|
+
```jsx
|
|
65
|
+
<Checkbox label="Accept terms" />
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Indeterminate
|
|
69
|
+
|
|
70
|
+
```jsx
|
|
71
|
+
<Checkbox label="Select all" indeterminate />
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Boundaries
|
|
75
|
+
|
|
76
|
+
| Area | Level | Note |
|
|
77
|
+
| ------------------ | -------- | --------------------------------------------------------------------------------------- |
|
|
78
|
+
| native input props | flexible | Spreads InputHTMLAttributes — name, value, required, checked, onChange all pass through |
|
|
79
|
+
| token names | strict | Control styling resolves to semantic --cascivo-color-\* / --cascivo-radius-sm tokens |
|
|
80
|
+
|
|
81
|
+
## AI context prompt
|
|
82
|
+
|
|
83
|
+
Copy this into an LLM context bar before editing this component:
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
I am modifying the cascivo Checkbox component (inputs). Binary toggle for forms, with indeterminate support
|
|
87
|
+
|
|
88
|
+
Architecture constraints — follow exactly:
|
|
89
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
90
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
91
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
92
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
93
|
+
- CSS logical properties only (RTL-safe).
|
|
94
|
+
|
|
95
|
+
Checkbox is strictly bound to these tokens — use only these, do not invent token names:
|
|
96
|
+
--cascivo-color-surface, --cascivo-color-accent, --cascivo-color-border-strong, --cascivo-color-text-on-accent, --cascivo-radius-sm, --cascivo-focus-ring
|
|
97
|
+
|
|
98
|
+
Accessibility: role "checkbox", WCAG 2.2-AA, keyboard: Space. Keep it AA.
|
|
99
|
+
|
|
100
|
+
Do not change (strict): token names — Control styling resolves to semantic --cascivo-color-* / --cascivo-radius-sm tokens
|
|
101
|
+
Flexible: native input props.
|
|
102
|
+
|
|
103
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
104
|
+
```
|