@cascivo/mcp 0.1.8 → 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 -22
- 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 +5 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +374 -64
- package/dist/index.mjs.map +1 -1
- package/dist/marketplace.json +70 -0
- package/dist/registry.json +5622 -786
- package/dist/tokens.catalog.json +2375 -0
- package/dist/tokens.variants.json +3291 -0
- package/package.json +4 -3
- package/readme.body.md +53 -22
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# BarChart
|
|
2
|
+
|
|
3
|
+
**Category:** chart
|
|
4
|
+
**Description:** Bar chart with vertical/horizontal orientation, grouped or stacked modes, and multi-series support.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Comparing discrete categorical values across groups
|
|
9
|
+
- Showing grouped or stacked multi-series data per category
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- Showing trends over continuous time — use LineChart
|
|
14
|
+
- Part-of-whole proportions — use PieChart for ≤5 categories
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **LineChart** (alternative): Use for trends over continuous time
|
|
19
|
+
- **Histogram** (alternative): Use to show the distribution of a continuous variable
|
|
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
|
+
| `series` | `BarChartSeries<Datum>[]` | Yes | — | Series array. Each series accepts an optional `color` (any CSS color) overriding the positional palette for that series/stacked layer. |
|
|
30
|
+
| `x` | `(d: Datum) => string` | Yes | — | Accessor returning the category label for a datum. |
|
|
31
|
+
| `y` | `(d: Datum) => number` | Yes | — | Accessor returning the numeric value for a datum. |
|
|
32
|
+
| `title` | `string` | Yes | — | Title text for the component. |
|
|
33
|
+
| `description` | `string` | No | — | Supporting description text. |
|
|
34
|
+
| `orientation` | `'vertical' \| 'horizontal'` | No | vertical | Layout orientation of the component. |
|
|
35
|
+
| `mode` | `'grouped' \| 'stacked' \| 'percent'` | No | grouped | 'percent' stacks each category and normalizes it to 100%. |
|
|
36
|
+
| `width` | `number` | No | — | Width of the component. |
|
|
37
|
+
| `height` | `number` | No | 300 | Height of the component. |
|
|
38
|
+
| `xTicks` | `number` | No | — | Approximate number of ticks on the x-axis. |
|
|
39
|
+
| `yTicks` | `number` | No | 5 | Approximate number of ticks on the y-axis. |
|
|
40
|
+
| `xLabelEvery` | `number` | No | — | Show every Nth category label (always the last) to thin a crowded x-axis. |
|
|
41
|
+
| `legend` | `boolean` | No | — | Whether to show the legend. |
|
|
42
|
+
| `tooltip` | `boolean` | No | — | Whether to show tooltips on hover. |
|
|
43
|
+
| `tooltipFormat` | `(p: ChartPoint) => string` | No | — | Custom tooltip formatter. The stacked default lists "label · total" + each non-zero layer in its color. |
|
|
44
|
+
| `className` | `string` | No | — | Additional CSS class names merged onto the root element. |
|
|
45
|
+
| `plain` | `boolean` | No | false | Marks only — no axes, grid lines, or legend. For micro/inline charts. |
|
|
46
|
+
| `annotations` | `Annotation[]` | No | — | Reference lines, shaded bands, and markers drawn over the plot (e.g. a target/threshold line). |
|
|
47
|
+
| `labels` | `boolean \| { format?: (v: number) => string; position?: string }` | No | — | Print each value as a label on the mark (collision-aware, decorative/aria-hidden). |
|
|
48
|
+
| `onSelect` | `(point: ChartPoint) => void` | No | — | Fired when a point is clicked or activated (Enter/Space) — for drill-down. |
|
|
49
|
+
| `fill` | `'solid' \| 'gradient' \| 'pattern'` | No | solid | Bar fill style — solid, a gradient, or a pattern. |
|
|
50
|
+
| `patternKind` | `'dots' \| 'lines' \| 'cross'` | No | — | Pattern motif when fill="pattern". |
|
|
51
|
+
|
|
52
|
+
## Tokens
|
|
53
|
+
|
|
54
|
+
- `--cascivo-chart-1`
|
|
55
|
+
- `--cascivo-chart-2`
|
|
56
|
+
- `--cascivo-chart-3`
|
|
57
|
+
- `--cascivo-chart-4`
|
|
58
|
+
- `--cascivo-chart-5`
|
|
59
|
+
- `--cascivo-chart-6`
|
|
60
|
+
- `--cascivo-chart-7`
|
|
61
|
+
- `--cascivo-chart-8`
|
|
62
|
+
|
|
63
|
+
## Examples
|
|
64
|
+
|
|
65
|
+
### Basic bar chart
|
|
66
|
+
|
|
67
|
+
```jsx
|
|
68
|
+
import { BarChart } from '@cascivo/charts'
|
|
69
|
+
|
|
70
|
+
const series = [{ id: 'a', label: 'Sales', data: [{x:'Jan',y:100},{x:'Feb',y:150}] }]
|
|
71
|
+
<BarChart series={series} x={d => d.x} y={d => d.y} title="Sales" />
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Stacked bar from row-oriented data
|
|
75
|
+
|
|
76
|
+
```jsx
|
|
77
|
+
import { BarChart, toStackedSeries } from '@cascivo/charts'
|
|
78
|
+
|
|
79
|
+
// Pivot { label, segments[] } rows into series + x/y. Per-segment color is preserved.
|
|
80
|
+
const rows = [
|
|
81
|
+
{ label: 'Mon', segments: [
|
|
82
|
+
{ key: 'Done', value: 5, color: 'var(--cascivo-color-success)' },
|
|
83
|
+
{ key: 'Blocked', value: 2, color: 'var(--cascivo-color-destructive)' },
|
|
84
|
+
] },
|
|
85
|
+
{ label: 'Tue', segments: [
|
|
86
|
+
{ key: 'Done', value: 8, color: 'var(--cascivo-color-success)' },
|
|
87
|
+
{ key: 'Blocked', value: 1, color: 'var(--cascivo-color-destructive)' },
|
|
88
|
+
] },
|
|
89
|
+
]
|
|
90
|
+
// Tooltip shows "Mon · 7" then each non-zero layer in its color.
|
|
91
|
+
<BarChart mode="stacked" tooltip {...toStackedSeries(rows)} title="Throughput" />
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## AI context prompt
|
|
95
|
+
|
|
96
|
+
Copy this into an LLM context bar before editing this component:
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
I am modifying the cascivo BarChart component (chart). Bar chart with vertical/horizontal orientation, grouped or stacked modes, and multi-series support.
|
|
100
|
+
|
|
101
|
+
Architecture constraints — follow exactly:
|
|
102
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
103
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
104
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
105
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
106
|
+
- CSS logical properties only (RTL-safe).
|
|
107
|
+
|
|
108
|
+
BarChart is strictly bound to these tokens — use only these, do not invent token names:
|
|
109
|
+
--cascivo-chart-1, --cascivo-chart-2, --cascivo-chart-3, --cascivo-chart-4, --cascivo-chart-5, --cascivo-chart-6, --cascivo-chart-7, --cascivo-chart-8
|
|
110
|
+
|
|
111
|
+
Accessibility: role "img", WCAG 2.1-AA. Keep it AA.
|
|
112
|
+
|
|
113
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
114
|
+
```
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Boxplot
|
|
2
|
+
|
|
3
|
+
**Category:** chart
|
|
4
|
+
**Description:** Box-and-whisker plot with five-number summary and outlier dots per series.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Comparing the distribution spread, median, and quartiles across groups
|
|
9
|
+
- Surfacing outliers and skew in statistical data
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- Showing the full shape of a single distribution — use Histogram
|
|
14
|
+
- Comparing single aggregate values — use BarChart
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **Histogram** (alternative): Use to show the full frequency shape of one distribution
|
|
19
|
+
- **BarChart** (alternative): Use when only aggregate values matter, not spread
|
|
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
|
+
| `series` | `{ id: string; label: string; values: number[] }[]` | Yes | — | Array of series each with raw numeric values |
|
|
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 boxplot
|
|
51
|
+
|
|
52
|
+
```jsx
|
|
53
|
+
import { Boxplot } from '@cascivo/charts'
|
|
54
|
+
|
|
55
|
+
const series = [
|
|
56
|
+
{ id: 'a', label: 'Group A', values: [1,2,3,4,5,6,7,8,9,10] },
|
|
57
|
+
{ id: 'b', label: 'Group B', values: [3,5,6,7,8,8,9,9,10,15] },
|
|
58
|
+
]
|
|
59
|
+
<Boxplot series={series} title="Comparison" />
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## AI context prompt
|
|
63
|
+
|
|
64
|
+
Copy this into an LLM context bar before editing this component:
|
|
65
|
+
|
|
66
|
+
```text
|
|
67
|
+
I am modifying the cascivo Boxplot component (chart). Box-and-whisker plot with five-number summary and outlier dots per series.
|
|
68
|
+
|
|
69
|
+
Architecture constraints — follow exactly:
|
|
70
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
71
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
72
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
73
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
74
|
+
- CSS logical properties only (RTL-safe).
|
|
75
|
+
|
|
76
|
+
Boxplot is strictly bound to these tokens — use only these, do not invent token names:
|
|
77
|
+
--cascivo-chart-1, --cascivo-chart-2, --cascivo-chart-3, --cascivo-chart-4, --cascivo-chart-5, --cascivo-chart-6, --cascivo-chart-7, --cascivo-chart-8
|
|
78
|
+
|
|
79
|
+
Accessibility: role "img", WCAG 2.1-AA. Keep it AA.
|
|
80
|
+
|
|
81
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
82
|
+
```
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# BubbleChart
|
|
2
|
+
|
|
3
|
+
**Category:** chart
|
|
4
|
+
**Description:** Bubble chart mapping x, y, and size dimensions; radius is area-proportional via sqrt scale.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Plotting three dimensions at once — x, y, and a size-encoded magnitude
|
|
9
|
+
- Comparing entities where relative scale matters alongside position
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- Showing only a 2D correlation — use ScatterChart
|
|
14
|
+
- Comparing many small magnitudes where size differences are unreadable
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **ScatterChart** (alternative): Use when there is no third size dimension to encode
|
|
19
|
+
|
|
20
|
+
## Accessibility rationale
|
|
21
|
+
|
|
22
|
+
Renders with role="img" and requires a title prop for screen reader labeling.
|
|
23
|
+
|
|
24
|
+
## Props
|
|
25
|
+
|
|
26
|
+
| Name | Type | Required | Default | Description |
|
|
27
|
+
| ------------- | -------------------------------------------------------------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
28
|
+
| `series` | `{ name: string; data: { x: number; y: number; size: number }[] }[]` | Yes | — | The data series to plot. |
|
|
29
|
+
| `title` | `string` | Yes | — | Title text for the component. |
|
|
30
|
+
| `description` | `string` | No | — | Supporting description text. |
|
|
31
|
+
| `width` | `number` | No | — | Width of the component. |
|
|
32
|
+
| `height` | `number` | No | 320 | Height of the component. |
|
|
33
|
+
| `tooltip` | `boolean` | No | — | Enable hover/keyboard tooltip |
|
|
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
|
+
| `glyph` | `GlyphShape \| ((d, seriesId) => GlyphShape)` | No | — | Point glyph shape (circle/square/diamond/triangle/cross/star) — a fixed shape or a function to encode a category by shape. |
|
|
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
|
+
### Basic bubble chart
|
|
52
|
+
|
|
53
|
+
```jsx
|
|
54
|
+
import { BubbleChart } from '@cascivo/charts'
|
|
55
|
+
|
|
56
|
+
const series = [{ name: 'Group A', data: [{x:1,y:2,size:10},{x:3,y:4,size:30}] }]
|
|
57
|
+
<BubbleChart series={series} title="Bubble" />
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## AI context prompt
|
|
61
|
+
|
|
62
|
+
Copy this into an LLM context bar before editing this component:
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
I am modifying the cascivo BubbleChart component (chart). Bubble chart mapping x, y, and size dimensions; radius is area-proportional via sqrt scale.
|
|
66
|
+
|
|
67
|
+
Architecture constraints — follow exactly:
|
|
68
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
69
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
70
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
71
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
72
|
+
- CSS logical properties only (RTL-safe).
|
|
73
|
+
|
|
74
|
+
BubbleChart is strictly bound to these tokens — use only these, do not invent token names:
|
|
75
|
+
--cascivo-chart-1, --cascivo-chart-2, --cascivo-chart-3, --cascivo-chart-4, --cascivo-chart-5, --cascivo-chart-6, --cascivo-chart-7, --cascivo-chart-8
|
|
76
|
+
|
|
77
|
+
Accessibility: role "img", WCAG 2.1-AA, keyboard: Tab (focus chart)/ArrowLeft/ArrowRight (navigate points)/Home/End (first/last point)/Escape (clear focus). Keep it AA.
|
|
78
|
+
|
|
79
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
80
|
+
```
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Bullet
|
|
2
|
+
|
|
3
|
+
**Category:** chart
|
|
4
|
+
**Description:** Bullet chart with background range bands, measure bar, and target tick.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Showing a single measure against a target with qualitative range bands
|
|
9
|
+
- Compact dashboard KPIs where space for a full gauge is limited
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- Displaying a metric without a target or comparative range — use Kpi
|
|
14
|
+
- Showing a simple completion or rated value — use Meter
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **Meter** (alternative): Use for a rated value within a range without a target marker
|
|
19
|
+
- **Kpi** (alternative): Use for a single headline metric with a delta
|
|
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
|
+
| `value` | `number` | Yes | — | Current measure value |
|
|
30
|
+
| `target` | `number` | Yes | — | Target marker value |
|
|
31
|
+
| `ranges` | `number[]` | Yes | — | Qualitative range breakpoints (sorted ascending) |
|
|
32
|
+
| `label` | `string` | Yes | — | Text label for the control. |
|
|
33
|
+
| `min` | `number` | No | 0 | Minimum allowed value. |
|
|
34
|
+
| `max` | `number` | No | — | Domain maximum (defaults to last range) |
|
|
35
|
+
| `width` | `number` | No | 300 | Width of the component. |
|
|
36
|
+
| `height` | `number` | No | 40 | Height of the component. |
|
|
37
|
+
| `className` | `string` | No | — | Additional CSS class names merged onto the root element. |
|
|
38
|
+
|
|
39
|
+
## Tokens
|
|
40
|
+
|
|
41
|
+
- `--cascivo-chart-1`
|
|
42
|
+
- `--cascivo-color-neutral-200`
|
|
43
|
+
- `--cascivo-color-neutral-300`
|
|
44
|
+
- `--cascivo-color-neutral-400`
|
|
45
|
+
|
|
46
|
+
## Examples
|
|
47
|
+
|
|
48
|
+
### Basic bullet chart
|
|
49
|
+
|
|
50
|
+
```jsx
|
|
51
|
+
import { Bullet } from '@cascivo/charts'
|
|
52
|
+
;<Bullet value={72} target={80} ranges={[40, 70, 100]} label="Revenue %" />
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## AI context prompt
|
|
56
|
+
|
|
57
|
+
Copy this into an LLM context bar before editing this component:
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
I am modifying the cascivo Bullet component (chart). Bullet chart with background range bands, measure bar, and target tick.
|
|
61
|
+
|
|
62
|
+
Architecture constraints — follow exactly:
|
|
63
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
64
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
65
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
66
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
67
|
+
- CSS logical properties only (RTL-safe).
|
|
68
|
+
|
|
69
|
+
Bullet is strictly bound to these tokens — use only these, do not invent token names:
|
|
70
|
+
--cascivo-chart-1, --cascivo-color-neutral-200, --cascivo-color-neutral-300, --cascivo-color-neutral-400
|
|
71
|
+
|
|
72
|
+
Accessibility: role "img", WCAG 2.1-AA. Keep it AA.
|
|
73
|
+
|
|
74
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
75
|
+
```
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Calendar
|
|
2
|
+
|
|
3
|
+
**Category:** chart
|
|
4
|
+
**Description:** Calendar heatmap — a week-column grid of day cells colored by value (GitHub-style).
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Showing a daily value over weeks/months (activity, contributions)
|
|
9
|
+
- Spotting weekly/seasonal patterns at a glance
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- Precise daily values — use a LineChart
|
|
14
|
+
- Non-date categories — use Heatmap
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **Heatmap** (alternative): Use for arbitrary x/y category grids
|
|
19
|
+
|
|
20
|
+
## Accessibility rationale
|
|
21
|
+
|
|
22
|
+
Renders role="img" with a title and a fallback day/value table.
|
|
23
|
+
|
|
24
|
+
## Props
|
|
25
|
+
|
|
26
|
+
| Name | Type | Required | Default | Description |
|
|
27
|
+
| ------------- | ------------------ | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------ |
|
|
28
|
+
| `data` | `CalendarDatum[]` | Yes | — | Days: { day: string \| Date, value }. |
|
|
29
|
+
| `title` | `string` | Yes | — | Title text for the component. |
|
|
30
|
+
| `description` | `string` | No | — | Supporting description text. |
|
|
31
|
+
| `from` | `string \| Date` | No | — | Range start (defaults to min day). |
|
|
32
|
+
| `to` | `string \| Date` | No | — | Range end (defaults to max day). |
|
|
33
|
+
| `width` | `number` | No | — | Width of the component. |
|
|
34
|
+
| `height` | `number` | No | 160 | Height of the component. |
|
|
35
|
+
| `tooltip` | `boolean` | No | — | Whether to show tooltips on hover. |
|
|
36
|
+
| `className` | `string` | No | — | Additional CSS class names merged onto the root element. |
|
|
37
|
+
| `plain` | `boolean` | No | false | When true, renders a minimal variant without chart chrome. |
|
|
38
|
+
| `visualMap` | `VisualMapOptions` | No | — | Map day value → CVD-safe colour (continuous or piecewise) via a keyboard-operable legend that filters the visible range. |
|
|
39
|
+
|
|
40
|
+
## Tokens
|
|
41
|
+
|
|
42
|
+
- `--cascivo-chart-2`
|
|
43
|
+
|
|
44
|
+
## Examples
|
|
45
|
+
|
|
46
|
+
### Contribution calendar
|
|
47
|
+
|
|
48
|
+
```jsx
|
|
49
|
+
import { Calendar } from '@cascivo/charts'
|
|
50
|
+
;<Calendar
|
|
51
|
+
title="Activity"
|
|
52
|
+
data={[
|
|
53
|
+
{ day: '2026-01-01', value: 3 },
|
|
54
|
+
{ day: '2026-01-02', value: 7 },
|
|
55
|
+
]}
|
|
56
|
+
/>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## AI context prompt
|
|
60
|
+
|
|
61
|
+
Copy this into an LLM context bar before editing this component:
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
I am modifying the cascivo Calendar component (chart). Calendar heatmap — a week-column grid of day cells colored by value (GitHub-style).
|
|
65
|
+
|
|
66
|
+
Architecture constraints — follow exactly:
|
|
67
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
68
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
69
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
70
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
71
|
+
- CSS logical properties only (RTL-safe).
|
|
72
|
+
|
|
73
|
+
Calendar is strictly bound to these tokens — use only these, do not invent token names:
|
|
74
|
+
--cascivo-chart-2
|
|
75
|
+
|
|
76
|
+
Accessibility: role "img", WCAG 2.1-AA, keyboard: Tab (focus chart)/ArrowLeft/ArrowRight (navigate days)/Escape (clear focus). Keep it AA.
|
|
77
|
+
|
|
78
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
79
|
+
```
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Candlestick
|
|
2
|
+
|
|
3
|
+
**Category:** chart
|
|
4
|
+
**Description:** OHLC financial chart — each period a high–low wick and an open↔close body, coloured up/down.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Showing open/high/low/close price movement over time
|
|
9
|
+
- Financial or trading dashboards needing per-period range + direction
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- A single value trend — use LineChart
|
|
14
|
+
- Non-financial categorical data — use BarChart
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **LineChart** (alternative): Use when only the closing price trend matters
|
|
19
|
+
|
|
20
|
+
## Accessibility rationale
|
|
21
|
+
|
|
22
|
+
Renders with role="img"; OHLC values are in the fallback table and tooltip.
|
|
23
|
+
|
|
24
|
+
## Props
|
|
25
|
+
|
|
26
|
+
| Name | Type | Required | Default | Description |
|
|
27
|
+
| ------------- | -------------------- | -------- | ------- | -------------------------------------------------------------------------- |
|
|
28
|
+
| `data` | `CandlestickDatum[]` | Yes | — | One candle per period: { t, open, high, low, close, volume? }. |
|
|
29
|
+
| `title` | `string` | Yes | — | Chart title (also aria-label). |
|
|
30
|
+
| `description` | `string` | No | — | Supporting description text. |
|
|
31
|
+
| `width` | `number` | No | — | Width of the component. |
|
|
32
|
+
| `height` | `number` | No | 320 | Height of the component. |
|
|
33
|
+
| `yTicks` | `number` | No | 5 | Approximate number of ticks on the y-axis. |
|
|
34
|
+
| `upColor` | `string` | No | — | Colour for up candles (close ≥ open). |
|
|
35
|
+
| `downColor` | `string` | No | — | Colour for down candles (close < open). |
|
|
36
|
+
| `volume` | `boolean` | No | false | Render volume bars beneath the candles. |
|
|
37
|
+
| `tooltip` | `boolean` | No | — | Enable hover tooltip (OHLC). |
|
|
38
|
+
| `className` | `string` | No | — | Additional CSS class names merged onto the root element. |
|
|
39
|
+
| `plain` | `boolean` | No | false | Marks only — no axes. For micro/inline charts. |
|
|
40
|
+
| `annotations` | `Annotation[]` | No | — | Reference lines/bands/markers over the plot (e.g. a last-price rule). |
|
|
41
|
+
| `brush` | `boolean` | No | — | Keyboard-operable Brush below the plot to subset the candles to a window. |
|
|
42
|
+
| `dataZoom` | `boolean` | No | — | DataZoom slider below the plot — a Brush whose body also pans the window. |
|
|
43
|
+
| `zoom` | `boolean` | No | — | In-plot wheel/drag/keyboard zoom-pan (+/-/0) over the candle index window. |
|
|
44
|
+
| `syncId` | `string` | No | — | Connect charts sharing this id — they mirror the zoom window. |
|
|
45
|
+
| `tooltipMode` | `'item' \| 'axis'` | No | item | item (nearest candle) or axis (crosshair + OHLC at the hovered x). |
|
|
46
|
+
|
|
47
|
+
## Tokens
|
|
48
|
+
|
|
49
|
+
- `--cascivo-chart-2`
|
|
50
|
+
- `--cascivo-chart-4`
|
|
51
|
+
- `--cascivo-chart-grid`
|
|
52
|
+
|
|
53
|
+
## Examples
|
|
54
|
+
|
|
55
|
+
### OHLC price series
|
|
56
|
+
|
|
57
|
+
```jsx
|
|
58
|
+
import { Candlestick } from '@cascivo/charts'
|
|
59
|
+
;<Candlestick
|
|
60
|
+
title="ACME daily"
|
|
61
|
+
tooltip
|
|
62
|
+
data={[
|
|
63
|
+
{ t: 'Mon', open: 10, high: 14, low: 9, close: 13 },
|
|
64
|
+
{ t: 'Tue', open: 13, high: 15, low: 11, close: 11 },
|
|
65
|
+
{ t: 'Wed', open: 11, high: 12, low: 8, close: 9 },
|
|
66
|
+
]}
|
|
67
|
+
/>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Zoomable with a last-price rule
|
|
71
|
+
|
|
72
|
+
```jsx
|
|
73
|
+
<Candlestick
|
|
74
|
+
title="ACME daily"
|
|
75
|
+
data={candles}
|
|
76
|
+
volume
|
|
77
|
+
zoom
|
|
78
|
+
dataZoom
|
|
79
|
+
tooltipMode="axis"
|
|
80
|
+
annotations={[{ kind: 'line', axis: 'y', value: lastClose, label: '42.77' }]}
|
|
81
|
+
/>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## AI context prompt
|
|
85
|
+
|
|
86
|
+
Copy this into an LLM context bar before editing this component:
|
|
87
|
+
|
|
88
|
+
```text
|
|
89
|
+
I am modifying the cascivo Candlestick component (chart). OHLC financial chart — each period a high–low wick and an open↔close body, coloured up/down.
|
|
90
|
+
|
|
91
|
+
Architecture constraints — follow exactly:
|
|
92
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
93
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
94
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
95
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
96
|
+
- CSS logical properties only (RTL-safe).
|
|
97
|
+
|
|
98
|
+
Candlestick is strictly bound to these tokens — use only these, do not invent token names:
|
|
99
|
+
--cascivo-chart-2, --cascivo-chart-4, --cascivo-chart-grid
|
|
100
|
+
|
|
101
|
+
Accessibility: role "img", WCAG 2.1-AA, keyboard: Tab (focus chart)/ArrowLeft/ArrowRight (navigate candles)/+/- (zoom), 0 (reset) when zoom enabled/Escape (clear focus). Keep it AA.
|
|
102
|
+
|
|
103
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
104
|
+
```
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# ComboChart
|
|
2
|
+
|
|
3
|
+
**Category:** chart
|
|
4
|
+
**Description:** Combination bar + line chart on shared or dual y-axes.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Overlaying two related metrics with different scales (e.g. volume bars + rate line)
|
|
9
|
+
- Pairing categorical totals with a continuous trend on a dual y-axis
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- Both metrics share a scale and type — use BarChart or LineChart
|
|
14
|
+
- More than two series of differing types — clarity breaks down
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **BarChart** (alternative): Use when all series are categorical comparisons
|
|
19
|
+
- **LineChart** (alternative): Use when all series are trends on one scale
|
|
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
|
+
| `bars` | `{ label: string; value: number }[]` | Yes | — | Bar series data |
|
|
30
|
+
| `line` | `{ x: number; y: number }[]` | Yes | — | Line series data points |
|
|
31
|
+
| `title` | `string` | Yes | — | Title text for the component. |
|
|
32
|
+
| `description` | `string` | No | — | Supporting description text. |
|
|
33
|
+
| `secondAxis` | `boolean` | No | — | Render line on a secondary right y-axis |
|
|
34
|
+
| `width` | `number` | No | — | Width of the component. |
|
|
35
|
+
| `height` | `number` | No | 320 | Height of the component. |
|
|
36
|
+
| `tooltip` | `boolean` | No | — | Enable hover/keyboard tooltip |
|
|
37
|
+
| `className` | `string` | No | — | Additional CSS class names merged onto the root element. |
|
|
38
|
+
| `plain` | `boolean` | No | false | Marks only — no axes, grid lines, or legend. For micro/inline charts. |
|
|
39
|
+
| `annotations` | `Annotation[]` | No | — | Reference lines, shaded bands, and markers drawn over the plot (e.g. a target/threshold line). |
|
|
40
|
+
|
|
41
|
+
## Tokens
|
|
42
|
+
|
|
43
|
+
- `--cascivo-chart-1`
|
|
44
|
+
- `--cascivo-chart-2`
|
|
45
|
+
|
|
46
|
+
## Examples
|
|
47
|
+
|
|
48
|
+
### Basic combo chart
|
|
49
|
+
|
|
50
|
+
```jsx
|
|
51
|
+
import { ComboChart } from '@cascivo/charts'
|
|
52
|
+
|
|
53
|
+
const bars = [{label:'Jan',value:100},{label:'Feb',value:120},{label:'Mar',value:90}]
|
|
54
|
+
const line = [{x:0,y:50},{x:1,y:70},{x:2,y:60}]
|
|
55
|
+
<ComboChart bars={bars} line={line} title="Sales vs Target" />
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## AI context prompt
|
|
59
|
+
|
|
60
|
+
Copy this into an LLM context bar before editing this component:
|
|
61
|
+
|
|
62
|
+
```text
|
|
63
|
+
I am modifying the cascivo ComboChart component (chart). Combination bar + line chart on shared or dual y-axes.
|
|
64
|
+
|
|
65
|
+
Architecture constraints — follow exactly:
|
|
66
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
67
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
68
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
69
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
70
|
+
- CSS logical properties only (RTL-safe).
|
|
71
|
+
|
|
72
|
+
ComboChart is strictly bound to these tokens — use only these, do not invent token names:
|
|
73
|
+
--cascivo-chart-1, --cascivo-chart-2
|
|
74
|
+
|
|
75
|
+
Accessibility: role "img", WCAG 2.1-AA, keyboard: Tab (focus chart)/ArrowLeft/ArrowRight (navigate points)/Home/End (first/last point)/Escape (clear focus). Keep it AA.
|
|
76
|
+
|
|
77
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
78
|
+
```
|