@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,111 @@
1
+ # Text
2
+
3
+ **Category:** display
4
+ **Description:** Body text with size, weight, and muted variants
5
+
6
+ ## When to use
7
+
8
+ - Rendering body copy, paragraphs, and inline text in app UI
9
+ - Applying size/weight/muted treatment to secondary or emphasized text
10
+ - Inline emphasis inside flow content (as="span")
11
+
12
+ ## When NOT to use
13
+
14
+ - Section or page titles — use Heading for the document outline
15
+ - Long-form authored/markdown content — use Prose
16
+
17
+ ## Anti-patterns
18
+
19
+ ### Visually-large Text has no heading semantics, so it is missing from the document outline
20
+
21
+ **Bad:** `<Text size="lg" weight="semibold"> used as a page title`
22
+ **Good:** `<Heading level={1}>`
23
+ **Why:** Visually-large Text has no heading semantics, so it is missing from the document outline
24
+
25
+ ## Related components
26
+
27
+ - **Heading** (alternative): Heading carries outline semantics; Text is plain body copy
28
+
29
+ ## Accessibility rationale
30
+
31
+ Renders the chosen native element (p/span/div) without imposing roles; muted styling keeps contrast within AA so secondary text stays readable
32
+
33
+ ## Props
34
+
35
+ | Name | Type | Required | Default | Description |
36
+ | -------- | ------------------------------------ | -------- | ------- | ----------------------------------------------------- |
37
+ | `as` | `'p' \| 'span' \| 'div'` | No | p | The HTML element to render as. |
38
+ | `size` | `'sm' \| 'md' \| 'lg'` | No | md | Visual size of the component (e.g. 'sm', 'md', 'lg'). |
39
+ | `weight` | `'normal' \| 'medium' \| 'semibold'` | No | normal | Font weight ('normal' \| 'medium' \| 'semibold'). |
40
+ | `muted` | `boolean` | No | false | When true, renders in a muted/subtle color. |
41
+
42
+ ## Tokens
43
+
44
+ - `--cascivo-font-sans`
45
+ - `--cascivo-font-normal`
46
+ - `--cascivo-font-medium`
47
+ - `--cascivo-font-semibold`
48
+ - `--cascivo-leading-normal`
49
+ - `--cascivo-color-text`
50
+ - `--cascivo-color-text-subtle`
51
+ - `--cascivo-text-sm`
52
+ - `--cascivo-text-base`
53
+ - `--cascivo-text-lg`
54
+
55
+ ## Examples
56
+
57
+ ### Default
58
+
59
+ ```jsx
60
+ <Text>Body copy reads at the base size.</Text>
61
+ ```
62
+
63
+ ### Muted helper
64
+
65
+ ```jsx
66
+ <Text size="sm" muted>
67
+ Secondary information
68
+ </Text>
69
+ ```
70
+
71
+ ### Inline span
72
+
73
+ Use as="span" inside other flow content
74
+
75
+ ```jsx
76
+ <Text as="span" weight="semibold">
77
+ emphasis
78
+ </Text>
79
+ ```
80
+
81
+ ## Boundaries
82
+
83
+ | Area | Level | Note |
84
+ | ------------------ | -------- | ------------------------------------------------------------ |
85
+ | as / size / weight | flexible | Choose element and treatment to fit context |
86
+ | token names | strict | Font, leading, and color must resolve to --cascivo-\* tokens |
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 Text component (display). Body text with size, weight, and muted variants
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
+ Text is strictly bound to these tokens — use only these, do not invent token names:
103
+ --cascivo-font-sans, --cascivo-font-normal, --cascivo-font-medium, --cascivo-font-semibold, --cascivo-leading-normal, --cascivo-color-text, --cascivo-color-text-subtle, --cascivo-text-sm, --cascivo-text-base, --cascivo-text-lg
104
+
105
+ Accessibility: role "paragraph", WCAG 2.2-AA. Keep it AA.
106
+
107
+ Do not change (strict): token names — Font, leading, and color must resolve to --cascivo-* tokens
108
+ Flexible: as / size / weight.
109
+
110
+ Do not invent props, tokens, or global viewport media queries.
111
+ ```
@@ -0,0 +1,98 @@
1
+ # Textarea
2
+
3
+ **Category:** inputs
4
+ **Description:** Multi-line text input with optional label, hint, and error state
5
+
6
+ ## When to use
7
+
8
+ - Capturing multi-line free text such as messages, descriptions, or comments
9
+ - Input where line breaks are meaningful and the content may wrap to several rows
10
+ - Form fields that benefit from a visible hint or validation error beneath the control
11
+
12
+ ## When NOT to use
13
+
14
+ - A single short value like a name or email — use Input
15
+ - A constrained numeric value — use NumberInput
16
+
17
+ ## Anti-patterns
18
+
19
+ ### A one-line value belongs in Input; a textarea invites unwanted line breaks and submits via Enter differently
20
+
21
+ **Bad:** `<Textarea label="Email" rows={1} />`
22
+ **Good:** `<Input type="email" label="Email" />`
23
+ **Why:** A one-line value belongs in Input; a textarea invites unwanted line breaks and submits via Enter differently
24
+
25
+ ## Related components
26
+
27
+ - **Input** (alternative): Use for single-line values
28
+ - **Form** (contained-by): Typically grouped with other fields inside a form
29
+
30
+ ## Accessibility rationale
31
+
32
+ Renders a native <textarea> with aria-multiline; hint and error text are associated via aria-describedby and errors use role="alert" with aria-invalid so assistive tech announces validation state.
33
+
34
+ ## Props
35
+
36
+ | Name | Type | Required | Default | Description |
37
+ | ---------- | -------------------------------- | -------- | -------- | ------------------------------------------------------------------------------ |
38
+ | `label` | `string` | No | — | Text label for the control. |
39
+ | `hint` | `string` | No | — | Supplementary hint text shown with the control. |
40
+ | `error` | `string` | No | — | Error message shown when the value is invalid. |
41
+ | `rows` | `number` | No | 4 | Number of visible text rows. |
42
+ | `resize` | `'none' \| 'vertical' \| 'both'` | No | vertical | Which directions the textarea can be resized ('none' \| 'vertical' \| 'both'). |
43
+ | `disabled` | `boolean` | No | false | When true, disables the control and removes it from the tab order. |
44
+
45
+ ## Tokens
46
+
47
+ - `--cascivo-color-surface`
48
+ - `--cascivo-color-border`
49
+ - `--cascivo-color-accent`
50
+ - `--cascivo-color-destructive`
51
+ - `--cascivo-radius-input`
52
+ - `--cascivo-focus-ring`
53
+
54
+ ## Examples
55
+
56
+ ### With label
57
+
58
+ ```jsx
59
+ <Textarea label="Message" placeholder="Type here…" />
60
+ ```
61
+
62
+ ### With error
63
+
64
+ ```jsx
65
+ <Textarea label="Bio" error="Bio is required" />
66
+ ```
67
+
68
+ ## Boundaries
69
+
70
+ | Area | Level | Note |
71
+ | --------------- | -------- | -------------------------------------------------------------------------------- |
72
+ | token names | strict | Border/focus/error colors must resolve to --cascivo-color-\* / focus-ring tokens |
73
+ | resize and rows | flexible | Consumer chooses initial rows and whether the field can resize |
74
+
75
+ ## AI context prompt
76
+
77
+ Copy this into an LLM context bar before editing this component:
78
+
79
+ ```text
80
+ I am modifying the cascivo Textarea component (inputs). Multi-line text input with optional label, hint, and error state
81
+
82
+ Architecture constraints — follow exactly:
83
+ - Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
84
+ - Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
85
+ - Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
86
+ - Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
87
+ - CSS logical properties only (RTL-safe).
88
+
89
+ Textarea is strictly bound to these tokens — use only these, do not invent token names:
90
+ --cascivo-color-surface, --cascivo-color-border, --cascivo-color-accent, --cascivo-color-destructive, --cascivo-radius-input, --cascivo-focus-ring
91
+
92
+ Accessibility: role "textbox", WCAG 2.2-AA, keyboard: Tab/Shift+Tab. Keep it AA.
93
+
94
+ Do not change (strict): token names — Border/focus/error colors must resolve to --cascivo-color-* / focus-ring tokens
95
+ Flexible: resize and rows.
96
+
97
+ Do not invent props, tokens, or global viewport media queries.
98
+ ```
@@ -0,0 +1,116 @@
1
+ # Tile
2
+
3
+ **Category:** inputs
4
+ **Description:** A selectable card with radio (single) or checkbox (multi) semantics, toggled by click or keyboard
5
+
6
+ ## When to use
7
+
8
+ - A visually rich, clickable choice card in a single- or multi-select group
9
+ - Plan/option pickers where each option needs an icon and supporting content
10
+ - A larger touch target than a plain radio or checkbox
11
+
12
+ ## When NOT to use
13
+
14
+ - A simple inline boolean — use Checkbox or Toggle
15
+ - A dense list of text-only options — use RadioGroup or a Select
16
+
17
+ ## Anti-patterns
18
+
19
+ ### Single (radio) tiles cannot be unselected by clicking; use multi for toggleable behavior
20
+
21
+ **Bad:** `<Tile value="on">Enable</Tile> // used as a standalone on/off control`
22
+ **Good:** `<Tile value="on" selectable="multi">Enable</Tile> // multi allows deselect`
23
+ **Why:** Single (radio) tiles cannot be unselected by clicking; use multi for toggleable behavior
24
+
25
+ ## Related components
26
+
27
+ - **RadioCard** (alternative): RadioCard wraps a native input in a group; Tile is a standalone ARIA radio/checkbox
28
+ - **CheckboxCard** (alternative): Use CheckboxCard when native checkbox form semantics are required
29
+
30
+ ## Accessibility rationale
31
+
32
+ Exposes role="radio" (single) or role="checkbox" (multi) with aria-checked reflecting selection, is focusable, and toggles on Space/Enter. aria-disabled and a -1 tabindex remove disabled tiles from interaction.
33
+
34
+ ## Props
35
+
36
+ | Name | Type | Required | Default | Description |
37
+ | ----------------- | ------------------------- | -------- | ------- | ------------------------------------------------------------------------------------------------- |
38
+ | `value` | `string` | Yes | — | Identifies this tile within a group. |
39
+ | `selected` | `boolean` | No | — | Controlled selected state. |
40
+ | `defaultSelected` | `boolean` | No | — | Initial selected state for uncontrolled use. |
41
+ | `onSelect` | `(value: string) => void` | No | — | Called with this tile's value whenever it is toggled on (or off for multi). |
42
+ | `selectable` | `'single' \| 'multi'` | No | single | Single = radio semantics (toggle on); multi = checkbox semantics (toggle on/off). |
43
+ | `disabled` | `boolean` | No | — | When true, disables the control and removes it from the tab order. |
44
+ | `icon` | `React.ReactNode` | No | — | Optional leading icon/visual. |
45
+ | `asChild` | `boolean` | No | — | When true, renders the child element as the root via Slot, merging props (polymorphic rendering). |
46
+ | `children` | `React.ReactNode` | No | — | Content rendered inside the component. |
47
+ | `className` | `string` | No | — | Additional CSS class names merged onto the root element. |
48
+
49
+ ## Tokens
50
+
51
+ - `--cascivo-color-bg`
52
+ - `--cascivo-color-border`
53
+ - `--cascivo-color-border-strong`
54
+ - `--cascivo-color-accent`
55
+ - `--cascivo-color-text`
56
+ - `--cascivo-color-text-muted`
57
+ - `--cascivo-radius-surface`
58
+ - `--cascivo-focus-ring`
59
+
60
+ ## Examples
61
+
62
+ ### Single-select group
63
+
64
+ ```jsx
65
+ <div role="radiogroup" aria-label="Plan">
66
+ <Tile value="starter" selected={plan === 'starter'} onSelect={setPlan}>
67
+ Starter
68
+ </Tile>
69
+ <Tile value="pro" selected={plan === 'pro'} onSelect={setPlan}>
70
+ Pro
71
+ </Tile>
72
+ </div>
73
+ ```
74
+
75
+ ### Multi-select with icon
76
+
77
+ Multi tiles toggle on and off like a checkbox.
78
+
79
+ ```jsx
80
+ <Tile value="notifications" selectable="multi" icon={<BellIcon />} defaultSelected>
81
+ Email notifications
82
+ </Tile>
83
+ ```
84
+
85
+ ## Boundaries
86
+
87
+ | Area | Level | Note |
88
+ | -------------- | -------- | ---------------------------------------------------------------- |
89
+ | selectable | strict | single (radio, select-only) \| multi (checkbox, toggle) |
90
+ | selected state | flexible | Controlled (selected/onSelect) or uncontrolled (defaultSelected) |
91
+ | element | flexible | asChild renders onto a custom element via Slot |
92
+
93
+ ## AI context prompt
94
+
95
+ Copy this into an LLM context bar before editing this component:
96
+
97
+ ```text
98
+ I am modifying the cascivo Tile component (inputs). A selectable card with radio (single) or checkbox (multi) semantics, toggled by click or keyboard
99
+
100
+ Architecture constraints — follow exactly:
101
+ - Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
102
+ - Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
103
+ - Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
104
+ - Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
105
+ - CSS logical properties only (RTL-safe).
106
+
107
+ Tile is strictly bound to these tokens — use only these, do not invent token names:
108
+ --cascivo-color-bg, --cascivo-color-border, --cascivo-color-border-strong, --cascivo-color-accent, --cascivo-color-text, --cascivo-color-text-muted, --cascivo-radius-surface, --cascivo-focus-ring
109
+
110
+ Accessibility: role "radio", WCAG 2.2-AA, keyboard: Enter/Space. Keep it AA.
111
+
112
+ Do not change (strict): selectable — single (radio, select-only) | multi (checkbox, toggle)
113
+ Flexible: selected state, element.
114
+
115
+ Do not invent props, tokens, or global viewport media queries.
116
+ ```
@@ -0,0 +1,102 @@
1
+ # TimePicker
2
+
3
+ **Category:** inputs
4
+ **Description:** Native time input wrapper with label, hint, error, and size variants
5
+
6
+ ## When to use
7
+
8
+ - Capturing a time of day (HH:mm) in a form, such as a meeting or reminder time
9
+ - You want the native OS time entry UX with built-in formatting and validation
10
+ - A time field that needs a label, hint, error, or min/max bounds
11
+
12
+ ## When NOT to use
13
+
14
+ - Picking a calendar date — use DatePicker
15
+ - A free-form or non-time text value — use Input
16
+
17
+ ## Anti-patterns
18
+
19
+ ### A plain Input cannot enforce time format or offer the native time UI; TimePicker gives parsing and locale handling for free
20
+
21
+ **Bad:** `<Input placeholder="HH:mm" /> // hand-rolled time field`
22
+ **Good:** `<TimePicker label="Start" />`
23
+ **Why:** A plain Input cannot enforce time format or offer the native time UI; TimePicker gives parsing and locale handling for free
24
+
25
+ ## Related components
26
+
27
+ - **DatePicker** (alternative): Use when a calendar date is needed instead of a time
28
+ - **Input** (alternative): Use for non-time free-text values
29
+
30
+ ## Accessibility rationale
31
+
32
+ Renders a native <input type="time"> so segmented HH/mm entry, format enforcement, and keyboard support come from the platform; error text is linked via aria-describedby with aria-invalid.
33
+
34
+ ## Props
35
+
36
+ | Name | Type | Required | Default | Description |
37
+ | -------------- | ------------------------- | -------- | ------- | ------------------------------------------------------------------ |
38
+ | `value` | `string` | No | — | Controlled value (HH:mm) |
39
+ | `defaultValue` | `string` | No | — | The initial value when uncontrolled. |
40
+ | `onChange` | `(value: string) => void` | No | — | Called when the value changes. |
41
+ | `min` | `string` | No | — | Minimum allowed value. |
42
+ | `max` | `string` | No | — | Maximum allowed value. |
43
+ | `step` | `number` | No | — | Increment between allowed values. |
44
+ | `label` | `string` | No | — | Text label for the control. |
45
+ | `hint` | `string` | No | — | Supplementary hint text shown with the control. |
46
+ | `error` | `string` | No | — | Error message shown when the value is invalid. |
47
+ | `size` | `'sm' \| 'md' \| 'lg'` | No | 'md' | Visual size of the component (e.g. 'sm', 'md', 'lg'). |
48
+ | `disabled` | `boolean` | No | — | When true, disables the control and removes it from the tab order. |
49
+ | `className` | `string` | No | — | Additional CSS class names merged onto the root element. |
50
+
51
+ ## Tokens
52
+
53
+ - `--cascivo-color-surface`
54
+ - `--cascivo-color-bg-subtle`
55
+ - `--cascivo-color-border`
56
+ - `--cascivo-color-border-strong`
57
+ - `--cascivo-color-text`
58
+ - `--cascivo-color-text-muted`
59
+ - `--cascivo-color-accent`
60
+ - `--cascivo-color-danger`
61
+ - `--cascivo-radius-input`
62
+ - `--cascivo-radius-md`
63
+
64
+ ## Examples
65
+
66
+ ### Basic time picker
67
+
68
+ ```jsx
69
+ <TimePicker label="Meeting time" onChange={(v) => console.log(v)} />
70
+ ```
71
+
72
+ ## Boundaries
73
+
74
+ | Area | Level | Note |
75
+ | ------------ | -------- | --------------------------------------------------------------- |
76
+ | value format | strict | Value is a 24-hour HH:mm string driven by the native time input |
77
+ | min/max/step | flexible | Consumer-defined bounds and step granularity |
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 TimePicker component (inputs). Native time input wrapper with label, hint, error, and size variants
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
+ TimePicker is strictly bound to these tokens — use only these, do not invent token names:
94
+ --cascivo-color-surface, --cascivo-color-bg-subtle, --cascivo-color-border, --cascivo-color-border-strong, --cascivo-color-text, --cascivo-color-text-muted, --cascivo-color-accent, --cascivo-color-danger, --cascivo-radius-input, --cascivo-radius-md
95
+
96
+ Accessibility: role "textbox", WCAG 2.2-AA, keyboard: Tab. Keep it AA.
97
+
98
+ Do not change (strict): value format — Value is a 24-hour HH:mm string driven by the native time input
99
+ Flexible: min/max/step.
100
+
101
+ Do not invent props, tokens, or global viewport media queries.
102
+ ```
@@ -0,0 +1,93 @@
1
+ # Timeline
2
+
3
+ **Category:** display
4
+ **Description:** Ordered sequence of events with status markers and a connector line
5
+
6
+ ## When to use
7
+
8
+ - Showing an ordered sequence of events over time (activity feeds, order tracking)
9
+ - Communicating progress through discrete stages with complete/current/upcoming status
10
+ - Presenting a chronological history where order is meaningful
11
+
12
+ ## When NOT to use
13
+
14
+ - Interactive multi-step navigation the user controls — use Tabs or a Stepper
15
+ - Unordered lists where sequence carries no meaning — use List
16
+
17
+ ## Anti-patterns
18
+
19
+ ### Multiple current markers make the active position ambiguous for assistive tech
20
+
21
+ **Bad:** `Marking several items as status="current" at once`
22
+ **Good:** `Exactly one current item so aria-current="step" points to a single position`
23
+ **Why:** Multiple current markers make the active position ambiguous for assistive tech
24
+
25
+ ## Related components
26
+
27
+ - **List** (alternative): List is for unordered prose; Timeline conveys ordered, time-stamped events
28
+
29
+ ## Accessibility rationale
30
+
31
+ Rendered as an ordered list (ol/li) to convey sequence; the active item carries aria-current="step" and decorative markers are aria-hidden so screen readers read only the text
32
+
33
+ ## Props
34
+
35
+ | Name | Type | Required | Default | Description |
36
+ | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ------------------------------------ |
37
+ | `items` | `{ id: string; title: ReactNode; description?: ReactNode; time?: string; icon?: ReactNode; status?: "complete" \| "current" \| "upcoming" }[]` | Yes | — | The items to render. |
38
+ | `orientation` | `'vertical' \| 'horizontal'` | No | vertical | Layout orientation of the component. |
39
+
40
+ ## Tokens
41
+
42
+ - `--cascivo-color-border`
43
+ - `--cascivo-color-border-strong`
44
+ - `--cascivo-color-surface`
45
+ - `--cascivo-color-success`
46
+ - `--cascivo-color-primary`
47
+ - `--cascivo-radius-full`
48
+
49
+ ## Examples
50
+
51
+ ### Vertical timeline with statuses
52
+
53
+ ```jsx
54
+ <Timeline
55
+ items={[
56
+ { id: '1', title: 'Order placed', time: '09:00', status: 'complete' },
57
+ { id: '2', title: 'Shipped', time: '12:30', status: 'current' },
58
+ { id: '3', title: 'Delivered', status: 'upcoming' },
59
+ ]}
60
+ />
61
+ ```
62
+
63
+ ## Boundaries
64
+
65
+ | Area | Level | Note |
66
+ | ---------------- | -------- | ---------------------------------------------------------------------- |
67
+ | orientation | flexible | vertical for feeds, horizontal for compact progress strips |
68
+ | status semantics | strict | Use a single current item; status drives marker colour via data-status |
69
+
70
+ ## AI context prompt
71
+
72
+ Copy this into an LLM context bar before editing this component:
73
+
74
+ ```text
75
+ I am modifying the cascivo Timeline component (display). Ordered sequence of events with status markers and a connector line
76
+
77
+ Architecture constraints — follow exactly:
78
+ - Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
79
+ - Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
80
+ - Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
81
+ - Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
82
+ - CSS logical properties only (RTL-safe).
83
+
84
+ Timeline is strictly bound to these tokens — use only these, do not invent token names:
85
+ --cascivo-color-border, --cascivo-color-border-strong, --cascivo-color-surface, --cascivo-color-success, --cascivo-color-primary, --cascivo-radius-full
86
+
87
+ Accessibility: role "list", WCAG 2.2-AA. Keep it AA.
88
+
89
+ Do not change (strict): status semantics — Use a single current item; status drives marker colour via data-status
90
+ Flexible: orientation.
91
+
92
+ Do not invent props, tokens, or global viewport media queries.
93
+ ```
@@ -0,0 +1,91 @@
1
+ # Toast
2
+
3
+ **Category:** overlay
4
+ **Description:** Transient notification surfaced via the useToast hook
5
+
6
+ ## When to use
7
+
8
+ - Confirming that a background or just-completed action succeeded or failed (e.g. "Saved")
9
+ - Brief, transient feedback that should auto-dismiss without interrupting the task
10
+ - Non-blocking notifications that can stack and disappear on their own
11
+
12
+ ## When NOT to use
13
+
14
+ - A persistent, inline message tied to a specific region of the page — use Alert
15
+ - Feedback that requires the user to acknowledge or decide before continuing — use Modal or AlertDialog
16
+
17
+ ## Anti-patterns
18
+
19
+ ### Toasts auto-dismiss and are easy to miss; a destructive decision needs a blocking dialog the user must confirm
20
+
21
+ **Bad:** `toast({ title: "Delete this account?", duration: 0 })`
22
+ **Good:** `<AlertDialog title="Delete this account?" />`
23
+ **Why:** Toasts auto-dismiss and are easy to miss; a destructive decision needs a blocking dialog the user must confirm
24
+
25
+ ## Related components
26
+
27
+ - **Alert** (alternative): Use for persistent inline status that stays until resolved
28
+ - **Modal** (alternative): Use when the user must acknowledge before proceeding
29
+
30
+ ## Accessibility rationale
31
+
32
+ Toasts render into a labelled region; non-critical ones use role="status" with aria-live="polite", while destructive variants escalate to role="alert" with aria-live="assertive" so urgency is conveyed without stealing focus.
33
+
34
+ ## Props
35
+
36
+ | Name | Type | Required | Default | Description |
37
+ | ------------- | ------------------------------------------------------ | -------- | ------- | ---------------------------------------------------------- |
38
+ | `title` | `string` | Yes | — | Title text for the component. |
39
+ | `description` | `string` | No | — | Supporting description text. |
40
+ | `variant` | `'default' \| 'success' \| 'warning' \| 'destructive'` | No | default | Selects the visual style variant. |
41
+ | `duration` | `number` | No | 5000 | How long (ms) the toast stays visible before auto-dismiss. |
42
+
43
+ ## Tokens
44
+
45
+ - `--cascivo-color-surface-overlay`
46
+ - `--cascivo-color-success`
47
+ - `--cascivo-color-warning`
48
+ - `--cascivo-color-destructive`
49
+ - `--cascivo-radius-md`
50
+ - `--cascivo-z-toast`
51
+
52
+ ## Examples
53
+
54
+ ### Trigger
55
+
56
+ ```jsx
57
+ const { toast } = useToast()
58
+ toast({ title: 'Saved', variant: 'success' })
59
+ ```
60
+
61
+ ## Boundaries
62
+
63
+ | Area | Level | Note |
64
+ | -------- | -------- | ---------------------------------------------------------------------------------------------- |
65
+ | variant | strict | Limited to default \| success \| warning \| destructive — drives color and live-region urgency |
66
+ | duration | flexible | Consumer can tune auto-dismiss timing (default 5000ms) |
67
+
68
+ ## AI context prompt
69
+
70
+ Copy this into an LLM context bar before editing this component:
71
+
72
+ ```text
73
+ I am modifying the cascivo Toast component (overlay). Transient notification surfaced via the useToast hook
74
+
75
+ Architecture constraints — follow exactly:
76
+ - Signals only (useSignal/useComputed/useSignalEffect from @cascivo/core). Never useState/useEffect/useContext/useReducer.
77
+ - Style only through --cascivo-* custom properties. No Tailwind, no inline styles, no CSS-in-JS.
78
+ - Responsive via @container queries on the canonical scale (30rem/40rem/64rem/80rem). Do not use global viewport @media breakpoints.
79
+ - Visual states (hover/focus/active/disabled) via CSS pseudo-classes, not JS.
80
+ - CSS logical properties only (RTL-safe).
81
+
82
+ Toast is strictly bound to these tokens — use only these, do not invent token names:
83
+ --cascivo-color-surface-overlay, --cascivo-color-success, --cascivo-color-warning, --cascivo-color-destructive, --cascivo-radius-md, --cascivo-z-toast
84
+
85
+ Accessibility: role "status", WCAG 2.2-AA, keyboard: Tab. Keep it AA.
86
+
87
+ Do not change (strict): variant — Limited to default | success | warning | destructive — drives color and live-region urgency
88
+ Flexible: duration.
89
+
90
+ Do not invent props, tokens, or global viewport media queries.
91
+ ```