@cascivo/mcp 0.2.0 → 0.3.4

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.
Files changed (205) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +53 -23
  3. package/dist/context/accordion.md +93 -0
  4. package/dist/context/action-sheet.md +117 -0
  5. package/dist/context/alert-dialog.md +122 -0
  6. package/dist/context/alert.md +110 -0
  7. package/dist/context/app-shell.md +98 -0
  8. package/dist/context/aspect-ratio.md +92 -0
  9. package/dist/context/avatar-group.md +111 -0
  10. package/dist/context/avatar.md +100 -0
  11. package/dist/context/badge.md +119 -0
  12. package/dist/context/block/console-app.md +66 -0
  13. package/dist/context/block/dashboard-charts.md +61 -0
  14. package/dist/context/block/empty-dashboard.md +60 -0
  15. package/dist/context/block/login-page.md +60 -0
  16. package/dist/context/block/notification-center.md +61 -0
  17. package/dist/context/block/page-with-breadcrumb.md +54 -0
  18. package/dist/context/block/settings-form-page.md +60 -0
  19. package/dist/context/block/sidebar-app.md +55 -0
  20. package/dist/context/block/stats-cards.md +61 -0
  21. package/dist/context/block/users-table-page.md +61 -0
  22. package/dist/context/blockquote.md +95 -0
  23. package/dist/context/bottom-sheet.md +112 -0
  24. package/dist/context/breadcrumb.md +106 -0
  25. package/dist/context/button-group.md +100 -0
  26. package/dist/context/button.md +117 -0
  27. package/dist/context/calendar.md +118 -0
  28. package/dist/context/card.md +90 -0
  29. package/dist/context/carousel.md +101 -0
  30. package/dist/context/chart/area-chart.md +99 -0
  31. package/dist/context/chart/bar-chart.md +114 -0
  32. package/dist/context/chart/boxplot.md +82 -0
  33. package/dist/context/chart/bubble-chart.md +80 -0
  34. package/dist/context/chart/bullet.md +75 -0
  35. package/dist/context/chart/calendar.md +79 -0
  36. package/dist/context/chart/candlestick.md +104 -0
  37. package/dist/context/chart/combo-chart.md +78 -0
  38. package/dist/context/chart/funnel.md +87 -0
  39. package/dist/context/chart/gauge.md +87 -0
  40. package/dist/context/chart/heatmap.md +77 -0
  41. package/dist/context/chart/histogram.md +74 -0
  42. package/dist/context/chart/kpi.md +70 -0
  43. package/dist/context/chart/line-chart.md +113 -0
  44. package/dist/context/chart/meter.md +71 -0
  45. package/dist/context/chart/pie-chart.md +126 -0
  46. package/dist/context/chart/polar.md +92 -0
  47. package/dist/context/chart/radar.md +81 -0
  48. package/dist/context/chart/radial-bar.md +96 -0
  49. package/dist/context/chart/sankey.md +89 -0
  50. package/dist/context/chart/scatter-chart.md +90 -0
  51. package/dist/context/chart/sparkline.md +69 -0
  52. package/dist/context/chart/stream.md +88 -0
  53. package/dist/context/chart/sunburst.md +93 -0
  54. package/dist/context/chart/treemap.md +84 -0
  55. package/dist/context/chat-bubble.md +116 -0
  56. package/dist/context/checkbox-card.md +104 -0
  57. package/dist/context/checkbox.md +104 -0
  58. package/dist/context/code-snippet.md +118 -0
  59. package/dist/context/code.md +103 -0
  60. package/dist/context/collapsible.md +104 -0
  61. package/dist/context/color-picker.md +101 -0
  62. package/dist/context/combobox.md +125 -0
  63. package/dist/context/command-menu.md +121 -0
  64. package/dist/context/comparison.md +117 -0
  65. package/dist/context/contained-list.md +103 -0
  66. package/dist/context/context-menu.md +103 -0
  67. package/dist/context/copy-button.md +106 -0
  68. package/dist/context/data-list.md +99 -0
  69. package/dist/context/data-table.md +149 -0
  70. package/dist/context/date-picker.md +116 -0
  71. package/dist/context/date-range-picker.md +113 -0
  72. package/dist/context/dock.md +117 -0
  73. package/dist/context/drawer.md +111 -0
  74. package/dist/context/dropdown.md +96 -0
  75. package/dist/context/editable.md +101 -0
  76. package/dist/context/editor/code-editor.md +146 -0
  77. package/dist/context/editor/highlight.md +74 -0
  78. package/dist/context/empty-state.md +101 -0
  79. package/dist/context/fab.md +128 -0
  80. package/dist/context/field.md +118 -0
  81. package/dist/context/file-uploader.md +121 -0
  82. package/dist/context/filter.md +129 -0
  83. package/dist/context/flow/flow-background.md +103 -0
  84. package/dist/context/flow/flow-canvas.md +82 -0
  85. package/dist/context/flow/flow-controls.md +84 -0
  86. package/dist/context/flow/flow-edge.md +128 -0
  87. package/dist/context/flow/flow-handle.md +83 -0
  88. package/dist/context/flow/flow-minimap.md +89 -0
  89. package/dist/context/flow/flow-node.md +97 -0
  90. package/dist/context/flow/flow-panel.md +75 -0
  91. package/dist/context/flow/flow-story.md +145 -0
  92. package/dist/context/flow/flow.md +139 -0
  93. package/dist/context/form.md +104 -0
  94. package/dist/context/header-panel.md +96 -0
  95. package/dist/context/header.md +104 -0
  96. package/dist/context/heading.md +107 -0
  97. package/dist/context/hover-card.md +108 -0
  98. package/dist/context/icon-button.md +115 -0
  99. package/dist/context/image.md +115 -0
  100. package/dist/context/indicator.md +95 -0
  101. package/dist/context/inline-loading.md +101 -0
  102. package/dist/context/input-group.md +122 -0
  103. package/dist/context/input.md +101 -0
  104. package/dist/context/item.md +109 -0
  105. package/dist/context/join.md +97 -0
  106. package/dist/context/kbd.md +100 -0
  107. package/dist/context/label.md +117 -0
  108. package/dist/context/layout/app-shell.md +85 -0
  109. package/dist/context/layout/auth-layout.md +74 -0
  110. package/dist/context/layout/auto-grid.md +69 -0
  111. package/dist/context/layout/center.md +67 -0
  112. package/dist/context/layout/columns.md +70 -0
  113. package/dist/context/layout/dashboard-layout.md +68 -0
  114. package/dist/context/layout/grid.md +70 -0
  115. package/dist/context/layout/masonry.md +70 -0
  116. package/dist/context/layout/page-header.md +75 -0
  117. package/dist/context/layout/section.md +69 -0
  118. package/dist/context/layout/settings-layout.md +68 -0
  119. package/dist/context/layout/spacer.md +64 -0
  120. package/dist/context/layout/split-view.md +71 -0
  121. package/dist/context/layout/stack.md +93 -0
  122. package/dist/context/link.md +112 -0
  123. package/dist/context/list.md +109 -0
  124. package/dist/context/log-viewer.md +124 -0
  125. package/dist/context/menu-button.md +137 -0
  126. package/dist/context/menu.md +108 -0
  127. package/dist/context/menubar.md +92 -0
  128. package/dist/context/modal.md +96 -0
  129. package/dist/context/multi-select.md +104 -0
  130. package/dist/context/native-select.md +118 -0
  131. package/dist/context/navigation-menu.md +95 -0
  132. package/dist/context/notification.md +116 -0
  133. package/dist/context/number-input.md +117 -0
  134. package/dist/context/otp-input.md +98 -0
  135. package/dist/context/overflow-menu.md +107 -0
  136. package/dist/context/pagination.md +123 -0
  137. package/dist/context/password-input.md +100 -0
  138. package/dist/context/popover.md +108 -0
  139. package/dist/context/progress-bar.md +107 -0
  140. package/dist/context/progress-circle.md +101 -0
  141. package/dist/context/progress-indicator.md +105 -0
  142. package/dist/context/progress.md +109 -0
  143. package/dist/context/prose.md +110 -0
  144. package/dist/context/pull-to-refresh.md +101 -0
  145. package/dist/context/qr-code.md +101 -0
  146. package/dist/context/radial-progress.md +117 -0
  147. package/dist/context/radio-card.md +95 -0
  148. package/dist/context/radio.md +94 -0
  149. package/dist/context/rating-group.md +97 -0
  150. package/dist/context/relative-time.md +90 -0
  151. package/dist/context/resizable.md +102 -0
  152. package/dist/context/scroll-area.md +101 -0
  153. package/dist/context/search.md +113 -0
  154. package/dist/context/section/cta.md +83 -0
  155. package/dist/context/section/feature-grid.md +98 -0
  156. package/dist/context/section/hero.md +101 -0
  157. package/dist/context/section/media-masonry.md +77 -0
  158. package/dist/context/section/page-footer.md +101 -0
  159. package/dist/context/section/stats-band.md +81 -0
  160. package/dist/context/segmented-control.md +101 -0
  161. package/dist/context/select.md +101 -0
  162. package/dist/context/separator.md +88 -0
  163. package/dist/context/sheet.md +100 -0
  164. package/dist/context/shell-header.md +105 -0
  165. package/dist/context/side-nav.md +134 -0
  166. package/dist/context/skeleton.md +101 -0
  167. package/dist/context/skip-nav.md +103 -0
  168. package/dist/context/slider.md +98 -0
  169. package/dist/context/spinner.md +89 -0
  170. package/dist/context/stack.md +96 -0
  171. package/dist/context/stat.md +101 -0
  172. package/dist/context/status.md +105 -0
  173. package/dist/context/steps.md +124 -0
  174. package/dist/context/structured-list.md +107 -0
  175. package/dist/context/swap.md +100 -0
  176. package/dist/context/swipe-item.md +110 -0
  177. package/dist/context/switcher.md +97 -0
  178. package/dist/context/tabs.md +93 -0
  179. package/dist/context/tag.md +110 -0
  180. package/dist/context/tags-input.md +94 -0
  181. package/dist/context/text.md +111 -0
  182. package/dist/context/textarea.md +98 -0
  183. package/dist/context/tile.md +116 -0
  184. package/dist/context/time-picker.md +102 -0
  185. package/dist/context/timeline.md +93 -0
  186. package/dist/context/toast.md +91 -0
  187. package/dist/context/toc.md +110 -0
  188. package/dist/context/toggle-group.md +118 -0
  189. package/dist/context/toggle.md +103 -0
  190. package/dist/context/toggletip.md +119 -0
  191. package/dist/context/tooltip.md +92 -0
  192. package/dist/context/tree-view.md +107 -0
  193. package/dist/context/user.md +100 -0
  194. package/dist/context/visually-hidden.md +90 -0
  195. package/dist/context.json +22456 -0
  196. package/dist/index.d.mts +3 -1
  197. package/dist/index.d.mts.map +1 -1
  198. package/dist/index.mjs +73 -32
  199. package/dist/index.mjs.map +1 -1
  200. package/dist/marketplace.json +70 -0
  201. package/dist/registry.json +2832 -358
  202. package/dist/tokens.catalog.json +2375 -0
  203. package/dist/tokens.variants.json +3291 -0
  204. package/package.json +4 -3
  205. package/readme.body.md +53 -23
@@ -0,0 +1,98 @@
1
+ # AppShell
2
+
3
+ **Category:** layout
4
+ **Description:** Sticky-header + full-height side-nav + single-scroll-container layout with an animated, accessible nav toggle.
5
+
6
+ ## When to use
7
+
8
+ - Building an application screen with a persistent header and side navigation
9
+ - You want the header burger to toggle the side nav with an animated, accessible show/hide out of the box
10
+ - You need one scroll container (the main area) with a fixed header and full-height nav
11
+
12
+ ## When NOT to use
13
+
14
+ - Marketing/document pages where the whole page should scroll — use a plain Header instead
15
+ - A single, always-visible sidebar with no toggle — compose SideNav directly
16
+ - You need a persisted collapsible sidebar, a top progress bar, or a right aside — that is the richer copy-paste `layout/app-shell` (different props: `sideNav`/`aside`/`persistKey`/`state`), not this drop-in.
17
+
18
+ ## Anti-patterns
19
+
20
+ ### fr units have no definite size to resolve against on a shrink-to-fit flex item, so the track never animates
21
+
22
+ **Bad:** `Animating the nav collapse with grid-template-columns: 1fr → 0fr on an auto-width sidebar`
23
+ **Good:** `AppShell animates an explicit inline-size (desktop) / transform (mobile drawer)`
24
+ **Why:** fr units have no definite size to resolve against on a shrink-to-fit flex item, so the track never animates
25
+
26
+ ## Related components
27
+
28
+ - **layout/app-shell** (alternative): A richer, copy-paste-only app shell with a persisted collapsible sidebar, a signal-driven top progress bar, an error strip, and a right aside. Same `AppShell` name, different prop surface (`sideNav`/`aside`/`persistKey`/`state`). Choose this npm drop-in for a simple header + toggleable nav; choose layout/app-shell when you need persistence/progress/aside.
29
+ - **ShellHeader** (pairs-with): Provides the top bar and burger AppShell binds to the nav
30
+ - **SideNav** (pairs-with): The side navigation AppShell lays out full-height
31
+
32
+ ## Accessibility rationale
33
+
34
+ The hidden nav uses transform/inline-size + inert (never display:none alone), so it stays in the a11y tree and is keyboard-reachable when open while leaving the tab order when closed; Escape and a scrim close the mobile drawer and focus returns to the toggle.
35
+
36
+ ## Props
37
+
38
+ | Name | Type | Required | Default | Description |
39
+ | -------------- | ------------------------- | -------- | ------- | ---------------------------------------------------------------------------------------------------------------- |
40
+ | `header` | `ReactNode` | Yes | — | Top bar (typically a ShellHeader). If a React element, its onMenuClick/menuExpanded are bound to the nav toggle. |
41
+ | `nav` | `ReactNode` | No | — | Side navigation (typically a SideNav). Fills full height and scrolls internally. |
42
+ | `children` | `ReactNode` | Yes | — | Main content, rendered inside the single scroll container. |
43
+ | `footer` | `ReactNode` | No | — | Optional footer pinned below the content area. |
44
+ | `open` | `boolean` | No | — | Controlled nav open/visible state. Omit for uncontrolled. |
45
+ | `defaultOpen` | `boolean` | No | — | Initial open state when uncontrolled. Defaults open on desktop, closed on small screens. |
46
+ | `onOpenChange` | `(open: boolean) => void` | No | — | Fired when the nav requests open/close (burger, Escape, scrim). |
47
+
48
+ ## Tokens
49
+
50
+ - `--cascivo-shell-aside-inline-size`
51
+ - `--cascivo-shell-panel-inline-size`
52
+ - `--cascivo-motion-emphasis`
53
+ - `--cascivo-z-raised`
54
+ - `--cascivo-z-overlay`
55
+ - `--cascivo-color-foreground`
56
+ - `--cascivo-color-background`
57
+
58
+ ## Examples
59
+
60
+ ### Header + SideNav + content
61
+
62
+ The burger in ShellHeader toggles the SideNav automatically.
63
+
64
+ ```jsx
65
+ <AppShell header={<ShellHeader brand={{ name: 'Acme' }} />} nav={<SideNav items={items} />}>
66
+ <h1>Dashboard</h1>
67
+ </AppShell>
68
+ ```
69
+
70
+ ### Controlled open
71
+
72
+ ```jsx
73
+ <AppShell header={header} nav={nav} open={open.value} onOpenChange={(v) => (open.value = v)}>
74
+
75
+ </AppShell>
76
+ ```
77
+
78
+ ## AI context prompt
79
+
80
+ Copy this into an LLM context bar before editing this component:
81
+
82
+ ```text
83
+ I am modifying the cascivo AppShell component (layout). Sticky-header + full-height side-nav + single-scroll-container layout with an animated, accessible nav toggle.
84
+
85
+ Architecture constraints — follow exactly:
86
+ - Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
87
+ - Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
88
+ - Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
89
+ - Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
90
+ - CSS logical properties only (RTL-safe).
91
+
92
+ AppShell is strictly bound to these tokens — use only these, do not invent token names:
93
+ --cascivo-shell-aside-inline-size, --cascivo-shell-panel-inline-size, --cascivo-motion-emphasis, --cascivo-z-raised, --cascivo-z-overlay, --cascivo-color-foreground, --cascivo-color-background
94
+
95
+ Accessibility: role "none", WCAG 2.2-AA, keyboard: Escape. Keep it AA.
96
+
97
+ Do not invent props, tokens, or global viewport media queries.
98
+ ```
@@ -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
+ ```