@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,92 @@
|
|
|
1
|
+
# AspectRatio
|
|
2
|
+
|
|
3
|
+
**Category:** layout
|
|
4
|
+
**Description:** Constrains content to a fixed width-to-height ratio
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Reserving a stable box for media that loads asynchronously, avoiding layout shift
|
|
9
|
+
- Embedding responsive iframes (video, maps) at a known proportion
|
|
10
|
+
- Keeping thumbnails or covers uniform across a grid
|
|
11
|
+
|
|
12
|
+
## When NOT to use
|
|
13
|
+
|
|
14
|
+
- Content whose height should grow with text — let it size naturally
|
|
15
|
+
- A single fixed-pixel image where width and height are already known
|
|
16
|
+
|
|
17
|
+
## Anti-patterns
|
|
18
|
+
|
|
19
|
+
### A fixed ratio clips or distorts content that needs variable height
|
|
20
|
+
|
|
21
|
+
**Bad:** `Wrapping text content that must expand to fit its lines`
|
|
22
|
+
**Good:** `Reserve AspectRatio for media; let prose flow at its intrinsic height`
|
|
23
|
+
**Why:** A fixed ratio clips or distorts content that needs variable height
|
|
24
|
+
|
|
25
|
+
## Related components
|
|
26
|
+
|
|
27
|
+
- **Card** (contained-by): Commonly holds a cover image inside a Card media region
|
|
28
|
+
|
|
29
|
+
## Accessibility rationale
|
|
30
|
+
|
|
31
|
+
Purely presentational wrapper with no role; the inner media element carries its own semantics and alt text
|
|
32
|
+
|
|
33
|
+
## Props
|
|
34
|
+
|
|
35
|
+
| Name | Type | Required | Default | Description |
|
|
36
|
+
| ---------- | ----------- | -------- | ------- | -------------------------------------------------------------------- |
|
|
37
|
+
| `ratio` | `number` | No | 16 / 9 | Width-to-height ratio applied via the CSS aspect-ratio property |
|
|
38
|
+
| `children` | `ReactNode` | No | — | Content to fill the ratio box (typically an image, video, or iframe) |
|
|
39
|
+
|
|
40
|
+
## Tokens
|
|
41
|
+
|
|
42
|
+
- `--cascivo-aspect-ratio`
|
|
43
|
+
|
|
44
|
+
## Examples
|
|
45
|
+
|
|
46
|
+
### Image at 16:9
|
|
47
|
+
|
|
48
|
+
```jsx
|
|
49
|
+
<AspectRatio ratio={16 / 9}>
|
|
50
|
+
<img src="/cover.jpg" alt="Cover" />
|
|
51
|
+
</AspectRatio>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Square
|
|
55
|
+
|
|
56
|
+
```jsx
|
|
57
|
+
<AspectRatio ratio={1}>
|
|
58
|
+
<img src="/avatar.jpg" alt="Avatar" />
|
|
59
|
+
</AspectRatio>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Boundaries
|
|
63
|
+
|
|
64
|
+
| Area | Level | Note |
|
|
65
|
+
| ------------ | -------- | ---------------------------------------------------------------- |
|
|
66
|
+
| ratio | flexible | Any positive number; common values are 16/9, 4/3, 1, 3/2 |
|
|
67
|
+
| child sizing | strict | The single child is stretched to fill; provide one media element |
|
|
68
|
+
|
|
69
|
+
## AI context prompt
|
|
70
|
+
|
|
71
|
+
Copy this into an LLM context bar before editing this component:
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
I am modifying the cascivo AspectRatio component (layout). Constrains content to a fixed width-to-height ratio
|
|
75
|
+
|
|
76
|
+
Architecture constraints — follow exactly:
|
|
77
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
78
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
79
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
80
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
81
|
+
- CSS logical properties only (RTL-safe).
|
|
82
|
+
|
|
83
|
+
AspectRatio is strictly bound to these tokens — use only these, do not invent token names:
|
|
84
|
+
--cascivo-aspect-ratio
|
|
85
|
+
|
|
86
|
+
Accessibility: role "none", WCAG 2.2-AA. Keep it AA.
|
|
87
|
+
|
|
88
|
+
Do not change (strict): child sizing — The single child is stretched to fill; provide one media element
|
|
89
|
+
Flexible: ratio.
|
|
90
|
+
|
|
91
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
92
|
+
```
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# AvatarGroup
|
|
2
|
+
|
|
3
|
+
**Category:** display
|
|
4
|
+
**Description:** Overlapping stack of avatars with a max cap and an i18n-labelled +N overflow chip
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Showing several people compactly as an overlapping stack (collaborators, attendees, reviewers)
|
|
9
|
+
- Capping a long list of avatars with a +N overflow chip
|
|
10
|
+
- A facepile in a card header, table cell, or activity row
|
|
11
|
+
|
|
12
|
+
## When NOT to use
|
|
13
|
+
|
|
14
|
+
- A single identity with a name — use User or Avatar
|
|
15
|
+
- A selectable list of people — use a list/menu with checkboxes
|
|
16
|
+
|
|
17
|
+
## Anti-patterns
|
|
18
|
+
|
|
19
|
+
### Without a max the row grows unbounded; a cap plus total keeps it compact and accurate
|
|
20
|
+
|
|
21
|
+
**Bad:** `<AvatarGroup>{hundredsOfAvatars}</AvatarGroup> with no max`
|
|
22
|
+
**Good:** `<AvatarGroup max={5} total={120}>{avatars}</AvatarGroup>`
|
|
23
|
+
**Why:** Without a max the row grows unbounded; a cap plus total keeps it compact and accurate
|
|
24
|
+
|
|
25
|
+
## Related components
|
|
26
|
+
|
|
27
|
+
- **Avatar** (contains): AvatarGroup arranges Avatar children and adds an overflow chip
|
|
28
|
+
- **User** (alternative): Use User for a single labelled identity row
|
|
29
|
+
|
|
30
|
+
## Accessibility rationale
|
|
31
|
+
|
|
32
|
+
The stack is a labelled group; the +N chip carries an i18n-defaulted aria-label ("{count} more") so the hidden count is announced, not conveyed by the chip text alone
|
|
33
|
+
|
|
34
|
+
## Props
|
|
35
|
+
|
|
36
|
+
| Name | Type | Required | Default | Description |
|
|
37
|
+
| --------- | ---------------------- | -------- | ------- | -------------------------------------------------------------------------- |
|
|
38
|
+
| `max` | `number` | No | — | Cap the number of visible avatars |
|
|
39
|
+
| `total` | `number` | No | — | Override the total count used for the +N chip |
|
|
40
|
+
| `spacing` | `'sm' \| 'md' \| 'lg'` | No | md | Spacing between items. |
|
|
41
|
+
| `isGrid` | `boolean` | No | false | When true, lays the avatars out in a grid instead of an overlapping stack. |
|
|
42
|
+
| `labels` | `AvatarGroupLabels` | No | — | Overrides for the component’s user-visible strings (i18n). |
|
|
43
|
+
|
|
44
|
+
## Tokens
|
|
45
|
+
|
|
46
|
+
- `--cascivo-color-surface`
|
|
47
|
+
- `--cascivo-color-text-muted`
|
|
48
|
+
- `--cascivo-space-2`
|
|
49
|
+
- `--cascivo-text-xs`
|
|
50
|
+
|
|
51
|
+
## Examples
|
|
52
|
+
|
|
53
|
+
### Basic
|
|
54
|
+
|
|
55
|
+
```jsx
|
|
56
|
+
<AvatarGroup>
|
|
57
|
+
<Avatar fallback="A" />
|
|
58
|
+
<Avatar fallback="B" />
|
|
59
|
+
<Avatar fallback="C" />
|
|
60
|
+
</AvatarGroup>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### With max
|
|
64
|
+
|
|
65
|
+
```jsx
|
|
66
|
+
<AvatarGroup max={3}>
|
|
67
|
+
{users.map((u) => (
|
|
68
|
+
<Avatar key={u.id} src={u.src} alt={u.name} />
|
|
69
|
+
))}
|
|
70
|
+
</AvatarGroup>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Grid
|
|
74
|
+
|
|
75
|
+
```jsx
|
|
76
|
+
<AvatarGroup isGrid max={8}>
|
|
77
|
+
{avatars}
|
|
78
|
+
</AvatarGroup>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Boundaries
|
|
82
|
+
|
|
83
|
+
| Area | Level | Note |
|
|
84
|
+
| -------------- | -------- | -------------------------------------------------------------------------------- |
|
|
85
|
+
| spacing | flexible | Pick the overlap that fits the surrounding density |
|
|
86
|
+
| overflow label | strict | The +N label must come from i18n (builtin.avatarGroup.more or a labels override) |
|
|
87
|
+
|
|
88
|
+
## AI context prompt
|
|
89
|
+
|
|
90
|
+
Copy this into an LLM context bar before editing this component:
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
I am modifying the cascivo AvatarGroup component (display). Overlapping stack of avatars with a max cap and an i18n-labelled +N overflow chip
|
|
94
|
+
|
|
95
|
+
Architecture constraints — follow exactly:
|
|
96
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
97
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
98
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
99
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
100
|
+
- CSS logical properties only (RTL-safe).
|
|
101
|
+
|
|
102
|
+
AvatarGroup is strictly bound to these tokens — use only these, do not invent token names:
|
|
103
|
+
--cascivo-color-surface, --cascivo-color-text-muted, --cascivo-space-2, --cascivo-text-xs
|
|
104
|
+
|
|
105
|
+
Accessibility: role "group", WCAG 2.2-AA. Keep it AA.
|
|
106
|
+
|
|
107
|
+
Do not change (strict): overflow label — The +N label must come from i18n (builtin.avatarGroup.more or a labels override)
|
|
108
|
+
Flexible: spacing.
|
|
109
|
+
|
|
110
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
111
|
+
```
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Avatar
|
|
2
|
+
|
|
3
|
+
**Category:** display
|
|
4
|
+
**Description:** Displays a user image with initials fallback
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Representing a person or entity with a thumbnail image and initials fallback
|
|
9
|
+
- Showing presence/status alongside an identity (status prop)
|
|
10
|
+
- Compactly identifying authors in lists, comments, and headers
|
|
11
|
+
|
|
12
|
+
## When NOT to use
|
|
13
|
+
|
|
14
|
+
- Decorative imagery unrelated to identity — use a plain <img>
|
|
15
|
+
- A generic icon or logo with no person/entity meaning
|
|
16
|
+
|
|
17
|
+
## Anti-patterns
|
|
18
|
+
|
|
19
|
+
### Without alt/fallback the identity is invisible to assistive tech and breaks on image load failure
|
|
20
|
+
|
|
21
|
+
**Bad:** `<Avatar src="/logo.png" /> with no alt and no fallback`
|
|
22
|
+
**Good:** `<Avatar src="/jane.jpg" alt="Jane Doe" fallback="JD" />`
|
|
23
|
+
**Why:** Without alt/fallback the identity is invisible to assistive tech and breaks on image load failure
|
|
24
|
+
|
|
25
|
+
## Related components
|
|
26
|
+
|
|
27
|
+
- **Status** (alternative): Use Status for a standalone state dot not attached to an identity
|
|
28
|
+
|
|
29
|
+
## Accessibility rationale
|
|
30
|
+
|
|
31
|
+
role="img" with alt names the person; on image error it falls back to initials so the identity survives; the status dot carries an accessible label rather than relying on color alone
|
|
32
|
+
|
|
33
|
+
## Props
|
|
34
|
+
|
|
35
|
+
| Name | Type | Required | Default | Description |
|
|
36
|
+
| ---------- | -------------------------------------- | -------- | ------- | ----------------------------------------------------- |
|
|
37
|
+
| `src` | `string` | No | — | Image source URL. |
|
|
38
|
+
| `alt` | `string` | No | — | Alternative text describing the image. |
|
|
39
|
+
| `fallback` | `string` | No | — | Initials shown when no image is available |
|
|
40
|
+
| `size` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | No | md | Visual size of the component (e.g. 'sm', 'md', 'lg'). |
|
|
41
|
+
| `status` | `'online' \| 'offline' \| 'busy'` | No | — | Status state. |
|
|
42
|
+
|
|
43
|
+
## Tokens
|
|
44
|
+
|
|
45
|
+
- `--cascivo-color-accent-subtle`
|
|
46
|
+
- `--cascivo-color-success`
|
|
47
|
+
- `--cascivo-color-destructive`
|
|
48
|
+
- `--cascivo-radius-full`
|
|
49
|
+
|
|
50
|
+
## Examples
|
|
51
|
+
|
|
52
|
+
### Image
|
|
53
|
+
|
|
54
|
+
```jsx
|
|
55
|
+
<Avatar src="/jane.jpg" alt="Jane Doe" />
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Fallback
|
|
59
|
+
|
|
60
|
+
```jsx
|
|
61
|
+
<Avatar fallback="JD" alt="Jane Doe" />
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### With status
|
|
65
|
+
|
|
66
|
+
```jsx
|
|
67
|
+
<Avatar fallback="JD" status="online" />
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Boundaries
|
|
71
|
+
|
|
72
|
+
| Area | Level | Note |
|
|
73
|
+
| ----------- | -------- | ----------------------------------------------------------------------- |
|
|
74
|
+
| size | flexible | Pick the size that fits the surrounding density |
|
|
75
|
+
| token names | strict | Fallback and status colors must resolve to --cascivo-\* semantic tokens |
|
|
76
|
+
|
|
77
|
+
## AI context prompt
|
|
78
|
+
|
|
79
|
+
Copy this into an LLM context bar before editing this component:
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
I am modifying the cascivo Avatar component (display). Displays a user image with initials fallback
|
|
83
|
+
|
|
84
|
+
Architecture constraints — follow exactly:
|
|
85
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
86
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
87
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
88
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
89
|
+
- CSS logical properties only (RTL-safe).
|
|
90
|
+
|
|
91
|
+
Avatar is strictly bound to these tokens — use only these, do not invent token names:
|
|
92
|
+
--cascivo-color-accent-subtle, --cascivo-color-success, --cascivo-color-destructive, --cascivo-radius-full
|
|
93
|
+
|
|
94
|
+
Accessibility: role "img", WCAG 2.2-AA. Keep it AA.
|
|
95
|
+
|
|
96
|
+
Do not change (strict): token names — Fallback and status colors must resolve to --cascivo-* semantic tokens
|
|
97
|
+
Flexible: size.
|
|
98
|
+
|
|
99
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
100
|
+
```
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Badge
|
|
2
|
+
|
|
3
|
+
**Category:** display
|
|
4
|
+
**Description:** Small status label or category indicator
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- Labeling an item with a short, static status or category (e.g. "New", "Beta")
|
|
9
|
+
- Annotating an element with a count or state that is not interactive
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- A removable or interactive chip (filters, selections) — use Tag
|
|
14
|
+
- A standalone system state with a colored dot — use Status
|
|
15
|
+
|
|
16
|
+
## Anti-patterns
|
|
17
|
+
|
|
18
|
+
### Badge is a non-interactive label; interactive/removable labels belong to Tag with proper button semantics
|
|
19
|
+
|
|
20
|
+
**Bad:** `<Badge onClick={removeFilter}>Active</Badge>`
|
|
21
|
+
**Good:** `<Tag onDismiss={removeFilter}>Active</Tag>`
|
|
22
|
+
**Why:** Badge is a non-interactive label; interactive/removable labels belong to Tag with proper button semantics
|
|
23
|
+
|
|
24
|
+
## Related components
|
|
25
|
+
|
|
26
|
+
- **Tag** (alternative): Tag is the interactive, dismissible counterpart
|
|
27
|
+
- **Status** (alternative): Status pairs a colored dot with a label for live system state
|
|
28
|
+
|
|
29
|
+
## Accessibility rationale
|
|
30
|
+
|
|
31
|
+
role="status" lets assistive tech expose the label as state; meaning is reinforced by text, never by color alone
|
|
32
|
+
|
|
33
|
+
## Props
|
|
34
|
+
|
|
35
|
+
| Name | Type | Required | Default | Description |
|
|
36
|
+
| --------- | ---------------------------------------------------------------------------------- | -------- | ------- | ----------------------------------------------------- |
|
|
37
|
+
| `variant` | `'default' \| 'secondary' \| 'success' \| 'warning' \| 'destructive' \| 'outline'` | No | default | Selects the visual style variant. |
|
|
38
|
+
| `size` | `'sm' \| 'md'` | No | md | Visual size of the component (e.g. 'sm', 'md', 'lg'). |
|
|
39
|
+
|
|
40
|
+
## Tokens
|
|
41
|
+
|
|
42
|
+
- `--cascivo-font-sans`
|
|
43
|
+
- `--cascivo-font-medium`
|
|
44
|
+
- `--cascivo-radius-badge`
|
|
45
|
+
- `--cascivo-space-1`
|
|
46
|
+
- `--cascivo-space-2`
|
|
47
|
+
- `--cascivo-space-3`
|
|
48
|
+
- `--cascivo-text-xs`
|
|
49
|
+
- `--cascivo-leading-normal`
|
|
50
|
+
- `--cascivo-color-accent`
|
|
51
|
+
- `--cascivo-color-text-on-accent`
|
|
52
|
+
- `--cascivo-color-bg-subtle`
|
|
53
|
+
- `--cascivo-color-text`
|
|
54
|
+
- `--cascivo-color-border`
|
|
55
|
+
- `--cascivo-color-border-strong`
|
|
56
|
+
- `--cascivo-color-success-subtle`
|
|
57
|
+
- `--cascivo-color-success-foreground`
|
|
58
|
+
- `--cascivo-color-warning-subtle`
|
|
59
|
+
- `--cascivo-color-warning-foreground`
|
|
60
|
+
- `--cascivo-color-destructive-subtle`
|
|
61
|
+
- `--cascivo-color-destructive-foreground`
|
|
62
|
+
- `--cascivo-color-primary`
|
|
63
|
+
- `--cascivo-color-primary-content`
|
|
64
|
+
- `--cascivo-color-info`
|
|
65
|
+
- `--cascivo-color-info-content`
|
|
66
|
+
- `--cascivo-color-error`
|
|
67
|
+
- `--cascivo-color-error-content`
|
|
68
|
+
|
|
69
|
+
## Examples
|
|
70
|
+
|
|
71
|
+
### Default
|
|
72
|
+
|
|
73
|
+
```jsx
|
|
74
|
+
<Badge>New</Badge>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Success
|
|
78
|
+
|
|
79
|
+
```jsx
|
|
80
|
+
<Badge variant="success">Active</Badge>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Destructive
|
|
84
|
+
|
|
85
|
+
```jsx
|
|
86
|
+
<Badge variant="destructive">Deprecated</Badge>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Boundaries
|
|
90
|
+
|
|
91
|
+
| Area | Level | Note |
|
|
92
|
+
| ----------- | -------- | ------------------------------------------------------------------------------ |
|
|
93
|
+
| variant | flexible | Choose the variant that matches the semantic meaning |
|
|
94
|
+
| token names | strict | Colors and radius must resolve to --cascivo-\* tokens (--cascivo-radius-badge) |
|
|
95
|
+
|
|
96
|
+
## AI context prompt
|
|
97
|
+
|
|
98
|
+
Copy this into an LLM context bar before editing this component:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
I am modifying the cascivo Badge component (display). Small status label or category indicator
|
|
102
|
+
|
|
103
|
+
Architecture constraints — follow exactly:
|
|
104
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
105
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
106
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
107
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
108
|
+
- CSS logical properties only (RTL-safe).
|
|
109
|
+
|
|
110
|
+
Badge is strictly bound to these tokens — use only these, do not invent token names:
|
|
111
|
+
--cascivo-font-sans, --cascivo-font-medium, --cascivo-radius-badge, --cascivo-space-1, --cascivo-space-2, --cascivo-space-3, --cascivo-text-xs, --cascivo-leading-normal, --cascivo-color-accent, --cascivo-color-text-on-accent, --cascivo-color-bg-subtle, --cascivo-color-text, --cascivo-color-border, --cascivo-color-border-strong, --cascivo-color-success-subtle, --cascivo-color-success-foreground, --cascivo-color-warning-subtle, --cascivo-color-warning-foreground, --cascivo-color-destructive-subtle, --cascivo-color-destructive-foreground, --cascivo-color-primary, --cascivo-color-primary-content, --cascivo-color-info, --cascivo-color-info-content, --cascivo-color-error, --cascivo-color-error-content
|
|
112
|
+
|
|
113
|
+
Accessibility: role "status", WCAG 2.2-AA. Keep it AA.
|
|
114
|
+
|
|
115
|
+
Do not change (strict): token names — Colors and radius must resolve to --cascivo-* tokens (--cascivo-radius-badge)
|
|
116
|
+
Flexible: variant.
|
|
117
|
+
|
|
118
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
119
|
+
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# ConsoleApp
|
|
2
|
+
|
|
3
|
+
**Category:** display
|
|
4
|
+
**Description:** Carbon-parity console shell: ShellHeader + icon-rail SideNav + HeaderPanel notifications/switcher + collapsible aside + main content.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- A Carbon-parity console shell with icon-rail nav, header panels, and aside
|
|
9
|
+
- Admin or operations consoles needing dense, app-like navigation
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- A simpler sidebar app — use SidebarApp
|
|
14
|
+
- A bare shell to fully customise — use AppShell
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **SidebarApp** (alternative): Use for a lighter, less dense sidebar app frame
|
|
19
|
+
- **AppShell** (alternative): Use the bare shell to compose custom console chrome
|
|
20
|
+
|
|
21
|
+
## Accessibility rationale
|
|
22
|
+
|
|
23
|
+
Provides header, navigation, and complementary landmarks for screen reader orientation.
|
|
24
|
+
|
|
25
|
+
## Tokens
|
|
26
|
+
|
|
27
|
+
- `--cascivo-shell-header-block-size`
|
|
28
|
+
- `--cascivo-shell-panel-inline-size`
|
|
29
|
+
- `--cascivo-shell-aside-inline-size`
|
|
30
|
+
- `--cascivo-color-border`
|
|
31
|
+
- `--cascivo-color-surface`
|
|
32
|
+
- `--cascivo-color-scrim`
|
|
33
|
+
- `--cascivo-motion-enter`
|
|
34
|
+
- `--cascivo-motion-exit`
|
|
35
|
+
|
|
36
|
+
## Examples
|
|
37
|
+
|
|
38
|
+
### Default
|
|
39
|
+
|
|
40
|
+
Full console shell demo
|
|
41
|
+
|
|
42
|
+
```jsx
|
|
43
|
+
<ConsoleApp />
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## AI context prompt
|
|
47
|
+
|
|
48
|
+
Copy this into an LLM context bar before editing this component:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
I am modifying the cascivo ConsoleApp component (display). Carbon-parity console shell: ShellHeader + icon-rail SideNav + HeaderPanel notifications/switcher + collapsible aside + main content.
|
|
52
|
+
|
|
53
|
+
Architecture constraints — follow exactly:
|
|
54
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
55
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
56
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
57
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
58
|
+
- CSS logical properties only (RTL-safe).
|
|
59
|
+
|
|
60
|
+
ConsoleApp is strictly bound to these tokens — use only these, do not invent token names:
|
|
61
|
+
--cascivo-shell-header-block-size, --cascivo-shell-panel-inline-size, --cascivo-shell-aside-inline-size, --cascivo-color-border, --cascivo-color-surface, --cascivo-color-scrim, --cascivo-motion-enter, --cascivo-motion-exit
|
|
62
|
+
|
|
63
|
+
Accessibility: role "generic", WCAG 2.1-AA, keyboard: Escape/Tab. Keep it AA.
|
|
64
|
+
|
|
65
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
66
|
+
```
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# DashboardCharts
|
|
2
|
+
|
|
3
|
+
**Category:** display
|
|
4
|
+
**Description:** Dashboard layout with KPI tiles, line chart, bar chart, and pie chart.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- A prebuilt dashboard with KPI tiles, line, bar, and pie charts
|
|
9
|
+
- Quickly demonstrating or scaffolding an analytics overview
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- You only need the layout frame — use DashboardLayout
|
|
14
|
+
- A single metric display — use a Kpi card
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **DashboardLayout** (contained-by): Composes the dashboard layout frame
|
|
19
|
+
- **StatsCards** (alternative): Use when you only need the KPI tile row
|
|
20
|
+
|
|
21
|
+
## Accessibility rationale
|
|
22
|
+
|
|
23
|
+
Charts within render with role="img" and titled labels for screen readers.
|
|
24
|
+
|
|
25
|
+
## Props
|
|
26
|
+
|
|
27
|
+
| Name | Type | Required | Default | Description |
|
|
28
|
+
| ----------- | -------- | -------- | ------- | ------------------------------------------------------------------------ |
|
|
29
|
+
| `className` | `string` | No | — | Additional CSS class names merged onto the root DashboardLayout element. |
|
|
30
|
+
|
|
31
|
+
## Examples
|
|
32
|
+
|
|
33
|
+
### Default
|
|
34
|
+
|
|
35
|
+
Charts dashboard demo
|
|
36
|
+
|
|
37
|
+
```jsx
|
|
38
|
+
<DashboardCharts />
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## AI context prompt
|
|
42
|
+
|
|
43
|
+
Copy this into an LLM context bar before editing this component:
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
I am modifying the cascivo DashboardCharts component (display). Dashboard layout with KPI tiles, line chart, bar chart, and pie chart.
|
|
47
|
+
|
|
48
|
+
Architecture constraints — follow exactly:
|
|
49
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
50
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
51
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
52
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
53
|
+
- CSS logical properties only (RTL-safe).
|
|
54
|
+
|
|
55
|
+
DashboardCharts is strictly bound to these tokens — use only these, do not invent token names:
|
|
56
|
+
none declared
|
|
57
|
+
|
|
58
|
+
Accessibility: role "generic", WCAG 2.1-AA. Keep it AA.
|
|
59
|
+
|
|
60
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
61
|
+
```
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# EmptyDashboard
|
|
2
|
+
|
|
3
|
+
**Category:** display
|
|
4
|
+
**Description:** Dashboard page showing an empty state with a call-to-action button.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- A first-run or zero-data dashboard with an empty state and primary CTA
|
|
9
|
+
- Guiding users to create their first item
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- Data already exists — use DashboardCharts or DashboardLayout
|
|
14
|
+
- A generic empty state inside a component — use an inline EmptyState
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **DashboardCharts** (alternative): Use once the dashboard has data to display
|
|
19
|
+
|
|
20
|
+
## Accessibility rationale
|
|
21
|
+
|
|
22
|
+
Provides a main landmark with a clear heading and actionable CTA.
|
|
23
|
+
|
|
24
|
+
## Props
|
|
25
|
+
|
|
26
|
+
| Name | Type | Required | Default | Description |
|
|
27
|
+
| -------------- | ------------ | -------- | ------- | -------------------------- |
|
|
28
|
+
| `onCreateItem` | `() => void` | No | — | Create item button handler |
|
|
29
|
+
|
|
30
|
+
## Examples
|
|
31
|
+
|
|
32
|
+
### Default
|
|
33
|
+
|
|
34
|
+
Empty dashboard
|
|
35
|
+
|
|
36
|
+
```jsx
|
|
37
|
+
<EmptyDashboard />
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## AI context prompt
|
|
41
|
+
|
|
42
|
+
Copy this into an LLM context bar before editing this component:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
I am modifying the cascivo EmptyDashboard component (display). Dashboard page showing an empty state with a call-to-action button.
|
|
46
|
+
|
|
47
|
+
Architecture constraints — follow exactly:
|
|
48
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
49
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
50
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
51
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
52
|
+
- CSS logical properties only (RTL-safe).
|
|
53
|
+
|
|
54
|
+
EmptyDashboard is strictly bound to these tokens — use only these, do not invent token names:
|
|
55
|
+
none declared
|
|
56
|
+
|
|
57
|
+
Accessibility: role "generic", WCAG 2.1-AA. Keep it AA.
|
|
58
|
+
|
|
59
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
60
|
+
```
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# LoginPage
|
|
2
|
+
|
|
3
|
+
**Category:** display
|
|
4
|
+
**Description:** Authentication login page with email and password form.
|
|
5
|
+
|
|
6
|
+
## When to use
|
|
7
|
+
|
|
8
|
+
- A complete login page with email and password form
|
|
9
|
+
- Standing up authentication quickly with validation built in
|
|
10
|
+
|
|
11
|
+
## When NOT to use
|
|
12
|
+
|
|
13
|
+
- You only need the centered auth frame — use AuthLayout
|
|
14
|
+
- A multi-step signup or onboarding flow
|
|
15
|
+
|
|
16
|
+
## Related components
|
|
17
|
+
|
|
18
|
+
- **AuthLayout** (contained-by): Renders inside the centered auth layout
|
|
19
|
+
|
|
20
|
+
## Accessibility rationale
|
|
21
|
+
|
|
22
|
+
Form fields are labeled and validation messages are associated for screen readers.
|
|
23
|
+
|
|
24
|
+
## Props
|
|
25
|
+
|
|
26
|
+
| Name | Type | Required | Default | Description |
|
|
27
|
+
| ---------- | ------------------------------- | -------- | ------- | --------------------------------------- |
|
|
28
|
+
| `onSubmit` | `(values: LoginValues) => void` | No | — | Called with valid form values on submit |
|
|
29
|
+
|
|
30
|
+
## Examples
|
|
31
|
+
|
|
32
|
+
### Default
|
|
33
|
+
|
|
34
|
+
Login page
|
|
35
|
+
|
|
36
|
+
```jsx
|
|
37
|
+
<LoginPage />
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## AI context prompt
|
|
41
|
+
|
|
42
|
+
Copy this into an LLM context bar before editing this component:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
I am modifying the cascivo LoginPage component (display). Authentication login page with email and password form.
|
|
46
|
+
|
|
47
|
+
Architecture constraints — follow exactly:
|
|
48
|
+
- Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
|
|
49
|
+
- Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
|
|
50
|
+
- Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
|
|
51
|
+
- Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
|
|
52
|
+
- CSS logical properties only (RTL-safe).
|
|
53
|
+
|
|
54
|
+
LoginPage is strictly bound to these tokens — use only these, do not invent token names:
|
|
55
|
+
none declared
|
|
56
|
+
|
|
57
|
+
Accessibility: role "generic", WCAG 2.1-AA. Keep it AA.
|
|
58
|
+
|
|
59
|
+
Do not invent props, tokens, or global viewport media queries.
|
|
60
|
+
```
|