@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.
Files changed (205) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +53 -22
  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 +5 -2
  197. package/dist/index.d.mts.map +1 -1
  198. package/dist/index.mjs +374 -64
  199. package/dist/index.mjs.map +1 -1
  200. package/dist/marketplace.json +70 -0
  201. package/dist/registry.json +5622 -786
  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 -22
@@ -0,0 +1,100 @@
1
+ # ButtonGroup
2
+
3
+ **Category:** inputs
4
+ **Description:** Visually joins a set of related buttons into a single segmented control
5
+
6
+ ## When to use
7
+
8
+ - Presenting several related, independent actions that read as one control (e.g. an editor toolbar)
9
+ - Visually grouping buttons that share context without implying mutual exclusivity
10
+
11
+ ## When NOT to use
12
+
13
+ - The buttons represent a single selected value among options — use ToggleGroup
14
+ - The actions are unrelated and should read as separate buttons — lay them out with spacing instead
15
+
16
+ ## Anti-patterns
17
+
18
+ ### A group with no accessible name is announced as an unlabeled region; supply aria-label or aria-labelledby
19
+
20
+ **Bad:** `<ButtonGroup><Button>Bold</Button><Button>Italic</Button></ButtonGroup>`
21
+ **Good:** `<ButtonGroup aria-label="Formatting"><Button>Bold</Button><Button>Italic</Button></ButtonGroup>`
22
+ **Why:** A group with no accessible name is announced as an unlabeled region; supply aria-label or aria-labelledby
23
+
24
+ ## Related components
25
+
26
+ - **ToggleGroup** (alternative): Use when the buttons select a value rather than fire independent actions
27
+ - **Button** (contains): A button group is a layout container for buttons
28
+
29
+ ## Accessibility rationale
30
+
31
+ Exposes role="group" so assistive tech treats the buttons as one labeled set; optional roving focus lets arrow keys traverse the buttons as a single tab stop, matching toolbar expectations
32
+
33
+ ## Props
34
+
35
+ | Name | Type | Required | Default | Description |
36
+ | ----------------- | ---------------------------- | -------- | ---------- | ------------------------------------------------------------------------- |
37
+ | `orientation` | `'horizontal' \| 'vertical'` | No | horizontal | Layout orientation of the component. |
38
+ | `size` | `'sm' \| 'md' \| 'lg'` | No | md | Visual size of the component (e.g. 'sm', 'md', 'lg'). |
39
+ | `roving` | `boolean` | No | false | When true, uses roving tabindex so arrow keys move focus between buttons. |
40
+ | `loop` | `boolean` | No | false | When true, navigation wraps around from end to start. |
41
+ | `aria-label` | `string` | No | — | Accessible label used when no visible label is present. |
42
+ | `aria-labelledby` | `string` | No | — | Id of the element that labels this component. |
43
+
44
+ ## Tokens
45
+
46
+ - `--cascivo-button-radius`
47
+ - `--cascivo-radius-control`
48
+
49
+ ## Examples
50
+
51
+ ### Joined actions
52
+
53
+ ```jsx
54
+ <ButtonGroup aria-label="Text alignment">
55
+ <Button>Left</Button>
56
+ <Button>Center</Button>
57
+ <Button>Right</Button>
58
+ </ButtonGroup>
59
+ ```
60
+
61
+ ### Vertical with roving focus
62
+
63
+ ```jsx
64
+ <ButtonGroup orientation="vertical" roving aria-label="View">
65
+ <Button>List</Button>
66
+ <Button>Grid</Button>
67
+ </ButtonGroup>
68
+ ```
69
+
70
+ ## Boundaries
71
+
72
+ | Area | Level | Note |
73
+ | ----------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
74
+ | token names | strict | Outer corner radius must resolve to --cascivo-button-radius / --cascivo-radius-control to match standalone buttons |
75
+ | children | flexible | Any focusable controls (Button, IconButton, links) may be grouped |
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 ButtonGroup component (inputs). Visually joins a set of related buttons into a single segmented control
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
+ ButtonGroup is strictly bound to these tokens — use only these, do not invent token names:
92
+ --cascivo-button-radius, --cascivo-radius-control
93
+
94
+ Accessibility: role "group", WCAG 2.2-AA, keyboard: ArrowRight/ArrowLeft/ArrowUp/ArrowDown/Home/End. Keep it AA.
95
+
96
+ Do not change (strict): token names — Outer corner radius must resolve to --cascivo-button-radius / --cascivo-radius-control to match standalone buttons
97
+ Flexible: children.
98
+
99
+ Do not invent props, tokens, or global viewport media queries.
100
+ ```
@@ -0,0 +1,117 @@
1
+ # Button
2
+
3
+ **Category:** inputs
4
+ **Description:** Triggers an action or event
5
+
6
+ ## When to use
7
+
8
+ - Triggering an action or navigation the user initiates by click/press
9
+ - Submitting a form or confirming a decision
10
+
11
+ ## When NOT to use
12
+
13
+ - Navigation between pages where a real link is semantically correct — use an anchor
14
+ - Toggling a binary setting — use Toggle; persistent selection — use Checkbox/Radio
15
+
16
+ ## Anti-patterns
17
+
18
+ ### Buttons are for actions, links for navigation — assistive tech and the browser treat them differently
19
+
20
+ **Bad:** `<Button onClick={() => navigate("/x")}>Home</Button>`
21
+ **Good:** `<a href="/x">Home</a>`
22
+ **Why:** Buttons are for actions, links for navigation — assistive tech and the browser treat them differently
23
+
24
+ ## Related components
25
+
26
+ - **Toggle** (alternative): Use for binary on/off state, not one-shot actions
27
+ - **Dropdown** (pairs-with): A button often triggers a menu
28
+
29
+ ## Accessibility rationale
30
+
31
+ Renders a native <button> so Enter/Space activation, focus, and role come from the platform; loading state uses aria-busy rather than removing the element so focus is preserved
32
+
33
+ ## Props
34
+
35
+ | Name | Type | Required | Default | Description |
36
+ | ---------- | ------------------------------------------------------ | -------- | ------- | ------------------------------------------------------------------------------------------------- |
37
+ | `variant` | `'primary' \| 'secondary' \| 'ghost' \| 'destructive'` | No | primary | Selects the visual style variant. |
38
+ | `size` | `'sm' \| 'md' \| 'lg'` | No | md | Visual size of the component (e.g. 'sm', 'md', 'lg'). |
39
+ | `loading` | `boolean` | No | false | When true, shows a loading state. |
40
+ | `disabled` | `boolean` | No | false | When true, disables the control and removes it from the tab order. |
41
+ | `asChild` | `boolean` | No | false | When true, renders the child element as the root via Slot, merging props (polymorphic rendering). |
42
+ | `onClick` | `React.MouseEventHandler<HTMLButtonElement>` | No | — | Called when the element is clicked. |
43
+
44
+ ## Tokens
45
+
46
+ - `--cascivo-color-accent`
47
+ - `--cascivo-color-accent-hover`
48
+ - `--cascivo-color-accent-active`
49
+ - `--cascivo-color-text-on-accent`
50
+ - `--cascivo-color-destructive`
51
+ - `--cascivo-radius-button`
52
+ - `--cascivo-focus-ring`
53
+ - `--cascivo-disabled-opacity`
54
+ - `--cascivo-text-ui`
55
+ - `--cascivo-text-body`
56
+
57
+ ## Examples
58
+
59
+ ### Primary
60
+
61
+ ```jsx
62
+ <Button>Click me</Button>
63
+ ```
64
+
65
+ ### Loading
66
+
67
+ ```jsx
68
+ <Button loading>Saving…</Button>
69
+ ```
70
+
71
+ ### Destructive
72
+
73
+ ```jsx
74
+ <Button variant="destructive">Delete</Button>
75
+ ```
76
+
77
+ ### As link
78
+
79
+ Render button styling on a real anchor (keeps middle-click / open-in-new-tab).
80
+
81
+ ```jsx
82
+ <Button asChild>
83
+ <a href="/pricing">View pricing</a>
84
+ </Button>
85
+ ```
86
+
87
+ ## Boundaries
88
+
89
+ | Area | Level | Note |
90
+ | ----------- | -------- | ------------------------------------------------------------------ |
91
+ | token names | strict | Visual props must resolve to --cascivo-button-\* / semantic tokens |
92
+ | label copy | flexible | Free, within tone guidance |
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 Button component (inputs). Triggers an action or event
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
+ Button is strictly bound to these tokens — use only these, do not invent token names:
109
+ --cascivo-color-accent, --cascivo-color-accent-hover, --cascivo-color-accent-active, --cascivo-color-text-on-accent, --cascivo-color-destructive, --cascivo-radius-button, --cascivo-focus-ring, --cascivo-disabled-opacity, --cascivo-text-ui, --cascivo-text-body
110
+
111
+ Accessibility: role "button", WCAG 2.2-AA, keyboard: Enter/Space. Keep it AA.
112
+
113
+ Do not change (strict): token names — Visual props must resolve to --cascivo-button-* / semantic tokens
114
+ Flexible: label copy.
115
+
116
+ Do not invent props, tokens, or global viewport media queries.
117
+ ```
@@ -0,0 +1,118 @@
1
+ # Calendar
2
+
3
+ **Category:** inputs
4
+ **Description:** An accessible standalone month-grid date picker.
5
+
6
+ ## When to use
7
+
8
+ - Showing an always-visible month grid for picking a single date (inline, not a popover)
9
+ - As the building block inside a date-picker or date-range-picker popover
10
+
11
+ ## When NOT to use
12
+
13
+ - A compact form field where an inline grid wastes space — use DatePicker (trigger + popover)
14
+ - Selecting a contiguous date range — use DateRangePicker, which composes two calendars
15
+
16
+ ## Anti-patterns
17
+
18
+ ### Local-time construction can land a midnight date on the previous day in negative-offset zones, breaking selection and range math
19
+
20
+ **Bad:** `Comparing dates with local-time getters (getHours/getDate) after constructing them with new Date(y, m, d)`
21
+ **Good:** `All arithmetic and comparisons use UTC getters/Date.UTC so DST and timezone offsets never shift a day`
22
+ **Why:** Local-time construction can land a midnight date on the previous day in negative-offset zones, breaking selection and range math
23
+
24
+ ## Related components
25
+
26
+ - **DatePicker** (alternative): Use the popover-based picker when an inline grid is too heavy for the layout
27
+ - **DateRangePicker** (contained-by): The range picker renders two Calendar instances side-by-side
28
+
29
+ ## Accessibility rationale
30
+
31
+ Renders an APG-compliant role="grid" table with role="row"/role="gridcell"; a roving tabindex keeps exactly one day focusable (the focused date) so arrow keys move focus per APG, Home/End jump to the week edges, PageUp/PageDown change month (with Shift for year), today exposes aria-current="date", selection sets data-selected with aria-selected on the cell, and out-of-range or predicate-disabled days get aria-disabled and are skipped by selection
32
+
33
+ ## Props
34
+
35
+ | Name | Type | Required | Default | Description |
36
+ | --------------- | ------------------------------------------------- | -------- | ------- | -------------------------------------------------------- |
37
+ | `value` | `Date \| null` | No | — | Controlled selected date |
38
+ | `defaultValue` | `Date` | No | — | Uncontrolled initial selected date |
39
+ | `onValueChange` | `(date: Date) => void` | No | — | Called when a day is selected |
40
+ | `min` | `Date` | No | — | Earliest selectable date |
41
+ | `max` | `Date` | No | — | Latest selectable date |
42
+ | `disabled` | `(date: Date) => boolean` | No | — | Predicate to disable individual days |
43
+ | `locale` | `string` | No | — | BCP-47 locale; defaults to the current i18n locale |
44
+ | `size` | `'sm' \| 'md' \| 'lg'` | No | — | Grid cell size |
45
+ | `labels` | `CalendarLabels` | No | — | i18n label overrides for the nav buttons |
46
+ | `month` | `number` | No | — | Controlled view month (0-11) |
47
+ | `year` | `number` | No | — | Controlled view year |
48
+ | `onViewChange` | `(view: { month: number; year: number }) => void` | No | — | Called when the visible month changes |
49
+ | `hideNav` | `boolean` | No | — | Hides the prev/next nav so a parent can drive navigation |
50
+
51
+ ## Tokens
52
+
53
+ - `--cascivo-calendar-bg`
54
+ - `--cascivo-calendar-radius`
55
+ - `--cascivo-calendar-cell-size`
56
+ - `--cascivo-calendar-day-selected-bg`
57
+ - `--cascivo-calendar-day-selected-fg`
58
+ - `--cascivo-calendar-day-today-color`
59
+ - `--cascivo-calendar-range-bg`
60
+
61
+ ## Examples
62
+
63
+ ### Basic
64
+
65
+ Uncontrolled calendar
66
+
67
+ ```jsx
68
+ <Calendar defaultValue={new Date(Date.UTC(2024, 5, 15))} />
69
+ ```
70
+
71
+ ### Constrained
72
+
73
+ Limits the selectable range
74
+
75
+ ```jsx
76
+ <Calendar min={new Date(Date.UTC(2024, 5, 1))} max={new Date(Date.UTC(2024, 5, 30))} />
77
+ ```
78
+
79
+ ### Disabled weekends
80
+
81
+ Predicate disables individual days
82
+
83
+ ```jsx
84
+ <Calendar disabled={(d) => [0, 6].includes(d.getUTCDay())} />
85
+ ```
86
+
87
+ ## Boundaries
88
+
89
+ | Area | Level | Note |
90
+ | ------------ | -------- | --------------------------------------------------------------------------------------------------------- |
91
+ | date type | strict | All date props are native Date objects compared in UTC |
92
+ | locale | flexible | Weekday labels, month label, and first-day-of-week derive from the locale via Intl (with Monday fallback) |
93
+ | view control | flexible | month/year/onViewChange/hideNav let a parent drive navigation (used by DateRangePicker) |
94
+
95
+ ## AI context prompt
96
+
97
+ Copy this into an LLM context bar before editing this component:
98
+
99
+ ```text
100
+ I am modifying the cascivo Calendar component (inputs). An accessible standalone month-grid date picker.
101
+
102
+ Architecture constraints — follow exactly:
103
+ - Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
104
+ - Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
105
+ - Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
106
+ - Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
107
+ - CSS logical properties only (RTL-safe).
108
+
109
+ Calendar is strictly bound to these tokens — use only these, do not invent token names:
110
+ --cascivo-calendar-bg, --cascivo-calendar-radius, --cascivo-calendar-cell-size, --cascivo-calendar-day-selected-bg, --cascivo-calendar-day-selected-fg, --cascivo-calendar-day-today-color, --cascivo-calendar-range-bg
111
+
112
+ Accessibility: role "grid", WCAG 2.2-AA, keyboard: ArrowLeft/ArrowRight/ArrowUp/ArrowDown/Home/End/PageUp/PageDown/Enter/Space. Keep it AA.
113
+
114
+ Do not change (strict): date type — All date props are native Date objects compared in UTC
115
+ Flexible: locale, view control.
116
+
117
+ Do not invent props, tokens, or global viewport media queries.
118
+ ```
@@ -0,0 +1,90 @@
1
+ # Card
2
+
3
+ **Category:** display
4
+ **Description:** Container for grouping related content
5
+
6
+ ## When to use
7
+
8
+ - Grouping related content into a visually distinct surface with border/shadow
9
+ - Creating scannable units in a grid or list (dashboard tiles, item summaries)
10
+ - Giving a content cluster elevation to separate it from the page background
11
+
12
+ ## When NOT to use
13
+
14
+ - Pure semantic/structural grouping with no surface — use a <section>
15
+ - Wrapping every element in a card — nesting surfaces flattens visual hierarchy
16
+
17
+ ## Anti-patterns
18
+
19
+ ### Stacked surfaces and shadows compete for attention and muddy the hierarchy
20
+
21
+ **Bad:** `Nesting Cards several levels deep for layout`
22
+ **Good:** `A single Card with internal spacing, or a plain <section>`
23
+ **Why:** Stacked surfaces and shadows compete for attention and muddy the hierarchy
24
+
25
+ ## Related components
26
+
27
+ - **Separator** (pairs-with): Use a Separator to divide regions inside a card
28
+
29
+ ## Accessibility rationale
30
+
31
+ role="region" is appropriate only when the card is a meaningful landmark; otherwise treat it as presentational — the visual surface adds no semantics on its own
32
+
33
+ ## Props
34
+
35
+ | Name | Type | Required | Default | Description |
36
+ | --------- | --------------------------------------- | -------- | ------- | --------------------------------- |
37
+ | `variant` | `'default' \| 'outlined' \| 'elevated'` | No | default | Selects the visual style variant. |
38
+ | `padding` | `'none' \| 'sm' \| 'md' \| 'lg'` | No | md | Inner padding of the component. |
39
+
40
+ ## Tokens
41
+
42
+ - `--cascivo-color-surface`
43
+ - `--cascivo-color-border`
44
+ - `--cascivo-radius-card`
45
+ - `--cascivo-shadow-md`
46
+
47
+ ## Examples
48
+
49
+ ### Basic card
50
+
51
+ ```jsx
52
+ <Card>
53
+ <CardHeader>
54
+ <CardTitle>Title</CardTitle>
55
+ </CardHeader>
56
+ <CardContent>Content here</CardContent>
57
+ </Card>
58
+ ```
59
+
60
+ ## Boundaries
61
+
62
+ | Area | Level | Note |
63
+ | ------------------- | -------- | ----------------------------------------------------------------------- |
64
+ | variant and padding | flexible | Choose elevation and density to fit the surrounding layout |
65
+ | token names | strict | Surface, border, radius, and shadow must resolve to --cascivo-\* tokens |
66
+
67
+ ## AI context prompt
68
+
69
+ Copy this into an LLM context bar before editing this component:
70
+
71
+ ```text
72
+ I am modifying the cascivo Card component (display). Container for grouping related content
73
+
74
+ Architecture constraints — follow exactly:
75
+ - Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
76
+ - Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
77
+ - Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
78
+ - Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
79
+ - CSS logical properties only (RTL-safe).
80
+
81
+ Card is strictly bound to these tokens — use only these, do not invent token names:
82
+ --cascivo-color-surface, --cascivo-color-border, --cascivo-radius-card, --cascivo-shadow-md
83
+
84
+ Accessibility: role "region", WCAG 2.2-AA. Keep it AA.
85
+
86
+ Do not change (strict): token names — Surface, border, radius, and shadow must resolve to --cascivo-* tokens
87
+ Flexible: variant and padding.
88
+
89
+ Do not invent props, tokens, or global viewport media queries.
90
+ ```
@@ -0,0 +1,101 @@
1
+ # Carousel
2
+
3
+ **Category:** display
4
+ **Description:** Scroll-snap slide deck with previous/next controls and dot indicators
5
+
6
+ ## When to use
7
+
8
+ - Presenting a sequence of media or cards the user pages through one at a time
9
+ - Image galleries, onboarding decks, or featured-content rotators
10
+ - When horizontal swiping/scrolling is a natural interaction on touch devices
11
+
12
+ ## When NOT to use
13
+
14
+ - Content users must compare side-by-side — show a grid instead
15
+ - Critical information that must always be visible — carousels hide most of their content
16
+
17
+ ## Anti-patterns
18
+
19
+ ### Auto-rotation and hidden slides reduce discoverability and accessibility of important content
20
+
21
+ **Bad:** `Auto-rotating carousel for primary navigation or key calls-to-action`
22
+ **Good:** `A static list or grid where every item is visible`
23
+ **Why:** Auto-rotation and hidden slides reduce discoverability and accessibility of important content
24
+
25
+ ## Related components
26
+
27
+ - **Tabs** (alternative): Use tabs when sections are distinct and should be directly addressable
28
+
29
+ ## Accessibility rationale
30
+
31
+ The container is a labelled region with aria-roledescription="carousel"; each slide is a labelled group ("n of total"); prev/next are real buttons and the dot indicators use roving tabindex with arrow-key navigation. Scrolling honours prefers-reduced-motion.
32
+
33
+ ## Props
34
+
35
+ | Name | Type | Required | Default | Description |
36
+ | --------------- | ------------------------- | -------- | ------- | ----------------------------------------------------- |
37
+ | `children` | `ReactNode` | No | — | Slides as children |
38
+ | `slides` | `ReactNode[]` | No | — | Slides as an array |
39
+ | `index` | `number` | No | — | Controlled active index |
40
+ | `defaultIndex` | `number` | No | 0 | The initial slide index when uncontrolled. |
41
+ | `onIndexChange` | `(index: number) => void` | No | — | Called with the new slide index when it changes. |
42
+ | `loop` | `boolean` | No | false | When true, navigation wraps around from end to start. |
43
+
44
+ ## Tokens
45
+
46
+ - `--cascivo-color-accent`
47
+ - `--cascivo-color-surface`
48
+ - `--cascivo-color-border`
49
+ - `--cascivo-color-border-strong`
50
+ - `--cascivo-radius-md`
51
+ - `--cascivo-radius-full`
52
+ - `--cascivo-focus-ring`
53
+
54
+ ## Examples
55
+
56
+ ### Basic
57
+
58
+ ```jsx
59
+ <Carousel>
60
+ <img src="/1.jpg" alt="" />
61
+ <img src="/2.jpg" alt="" />
62
+ </Carousel>
63
+ ```
64
+
65
+ ### Looping with array
66
+
67
+ ```jsx
68
+ <Carousel loop slides={[<Slide1 />, <Slide2 />, <Slide3 />]} />
69
+ ```
70
+
71
+ ## Boundaries
72
+
73
+ | Area | Level | Note |
74
+ | ------------- | -------- | -------------------------------------------------------------------------------- |
75
+ | transition | strict | Paging uses native CSS scroll-snap, not transform math — no custom easing config |
76
+ | slide content | flexible | Any ReactNode may be a slide; pass via children or the slides array |
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 Carousel component (display). Scroll-snap slide deck with previous/next controls and dot indicators
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
+ Carousel is strictly bound to these tokens — use only these, do not invent token names:
93
+ --cascivo-color-accent, --cascivo-color-surface, --cascivo-color-border, --cascivo-color-border-strong, --cascivo-radius-md, --cascivo-radius-full, --cascivo-focus-ring
94
+
95
+ Accessibility: role "group", WCAG 2.2-AA, keyboard: ArrowLeft/ArrowRight/Home/End. Keep it AA.
96
+
97
+ Do not change (strict): transition — Paging uses native CSS scroll-snap, not transform math — no custom easing config
98
+ Flexible: slide content.
99
+
100
+ Do not invent props, tokens, or global viewport media queries.
101
+ ```
@@ -0,0 +1,99 @@
1
+ # AreaChart
2
+
3
+ **Category:** chart
4
+ **Description:** Area chart with optional stacking, multi-series support, and hover tooltip.
5
+
6
+ ## When to use
7
+
8
+ - Showing cumulative volume or magnitude of a trend over continuous time
9
+ - Emphasising the total of stacked multi-series values across a range
10
+
11
+ ## When NOT to use
12
+
13
+ - Reading precise individual values — use LineChart
14
+ - Comparing discrete categories — use BarChart
15
+
16
+ ## Related components
17
+
18
+ - **LineChart** (alternative): Use when precise values matter more than filled volume
19
+ - **BarChart** (alternative): Use for discrete categorical comparison
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` | `AreaChartSeries<Datum>[]` | Yes | — | Array of data series |
30
+ | `x` | `(d: Datum) => number` | Yes | — | X-value accessor |
31
+ | `y` | `(d: Datum) => number` | Yes | — | Y-value accessor |
32
+ | `title` | `string` | Yes | — | Title text for the component. |
33
+ | `description` | `string` | No | — | Supporting description text. |
34
+ | `stacked` | `boolean` | No | — | Stack series areas |
35
+ | `curve` | `'linear' \| 'monotone' \| 'step' \| 'stepBefore' \| 'stepAfter' \| 'natural' \| 'basis' \| 'cardinal' \| 'catmullRom'` | No | monotone | Line/area interpolation curve. |
36
+ | `fill` | `'solid' \| 'gradient' \| 'pattern'` | No | solid | Area fill style — solid, a top→bottom gradient, or a pattern. |
37
+ | `patternKind` | `'dots' \| 'lines' \| 'cross'` | No | — | Pattern motif when fill="pattern". |
38
+ | `width` | `number` | No | — | Width of the component. |
39
+ | `height` | `number` | No | 300 | Height of the component. |
40
+ | `xTicks` | `number` | No | 5 | Approximate number of ticks on the x-axis. |
41
+ | `yTicks` | `number` | No | 5 | Approximate number of ticks on the y-axis. |
42
+ | `legend` | `boolean` | No | — | Whether to show the legend. |
43
+ | `tooltip` | `boolean` | No | — | Enable hover/keyboard tooltip |
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
+ | `brush` | `boolean` | No | false | Show a keyboard-operable Brush below the plot to subset the series to a window. |
50
+ | `dataZoom` | `boolean` | No | false | Show a DataZoom slider below the plot — a Brush whose body also pans the window. |
51
+ | `zoom` | `boolean` | No | false | Enable in-plot wheel/drag/keyboard zoom-pan (+/-/0) over the series index window, with a reset control and re-ticked axes. |
52
+ | `syncId` | `string` | No | — | Connect this chart to others sharing the same id — they mirror the zoom window and hovered x. |
53
+ | `tooltipMode` | `'item' \| 'axis'` | No | item | Tooltip trigger — item (nearest point) or axis (a crosshair + a shared tooltip listing every series at the hovered x). |
54
+ | `decimate` | `boolean \| { method?: 'lttb' \| 'minmax'; threshold?: number }` | No | — | Downsample dense non-stacked series before drawing (LTTB or min-max). Visual only — the fallback table keeps the full data. |
55
+ | `toolbox` | `boolean \| ToolboxOptions` | No | — | Render a keyboard-reachable toolbox — PNG/SVG export, a data-view table toggle, and restore (reset zoom). |
56
+
57
+ ## Tokens
58
+
59
+ - `--cascivo-chart-1`
60
+ - `--cascivo-chart-2`
61
+ - `--cascivo-chart-3`
62
+ - `--cascivo-chart-4`
63
+ - `--cascivo-chart-5`
64
+ - `--cascivo-chart-6`
65
+ - `--cascivo-chart-7`
66
+ - `--cascivo-chart-8`
67
+
68
+ ## Examples
69
+
70
+ ### Basic area chart
71
+
72
+ ```jsx
73
+ import { AreaChart } from '@cascivo/charts'
74
+
75
+ const series = [{ id: 'a', label: 'Revenue', data: [{x:1,y:10},{x:2,y:20}] }]
76
+ <AreaChart series={series} x={d => d.x} y={d => d.y} title="Revenue" />
77
+ ```
78
+
79
+ ## AI context prompt
80
+
81
+ Copy this into an LLM context bar before editing this component:
82
+
83
+ ```text
84
+ I am modifying the cascivo AreaChart component (chart). Area chart with optional stacking, multi-series support, and hover tooltip.
85
+
86
+ Architecture constraints — follow exactly:
87
+ - Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
88
+ - Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
89
+ - Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
90
+ - Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
91
+ - CSS logical properties only (RTL-safe).
92
+
93
+ AreaChart is strictly bound to these tokens — use only these, do not invent token names:
94
+ --cascivo-chart-1, --cascivo-chart-2, --cascivo-chart-3, --cascivo-chart-4, --cascivo-chart-5, --cascivo-chart-6, --cascivo-chart-7, --cascivo-chart-8
95
+
96
+ 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.
97
+
98
+ Do not invent props, tokens, or global viewport media queries.
99
+ ```