rizzo-css 0.0.12 → 0.0.13

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 (230) hide show
  1. package/.env.example +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +17 -3
  4. package/bin/rizzo-css.js +93 -43
  5. package/package.json +5 -3
  6. package/scaffold/astro-app/README.md +13 -2
  7. package/scaffold/astro-app/src/components/Accordion.astro +178 -0
  8. package/scaffold/astro-app/src/components/Alert.astro +131 -0
  9. package/scaffold/astro-app/src/components/Avatar.astro +59 -0
  10. package/scaffold/astro-app/src/components/Badge.astro +24 -0
  11. package/scaffold/astro-app/src/components/Breadcrumb.astro +61 -0
  12. package/scaffold/astro-app/src/components/Button.astro +3 -0
  13. package/scaffold/astro-app/src/components/Card.astro +18 -0
  14. package/scaffold/astro-app/src/components/Checkbox.astro +38 -0
  15. package/scaffold/astro-app/src/components/CodeBlock.astro +393 -0
  16. package/scaffold/astro-app/src/components/CopyToClipboard.astro +219 -0
  17. package/scaffold/astro-app/src/components/Divider.astro +37 -0
  18. package/scaffold/astro-app/src/components/Dropdown.astro +807 -0
  19. package/scaffold/astro-app/src/components/FormGroup.astro +59 -0
  20. package/scaffold/astro-app/src/components/FrameworkSwitcher.astro +72 -0
  21. package/scaffold/astro-app/src/components/Input.astro +59 -0
  22. package/scaffold/astro-app/src/components/Modal.astro +212 -0
  23. package/scaffold/astro-app/src/components/Navbar.astro +701 -0
  24. package/scaffold/astro-app/src/components/Pagination.astro +240 -0
  25. package/scaffold/astro-app/src/components/ProgressBar.astro +65 -0
  26. package/scaffold/astro-app/src/components/Radio.astro +38 -0
  27. package/scaffold/astro-app/src/components/Search.astro +1259 -0
  28. package/scaffold/astro-app/src/components/Select.astro +49 -0
  29. package/scaffold/astro-app/src/components/Settings.astro +382 -0
  30. package/scaffold/astro-app/src/components/Spinner.astro +30 -0
  31. package/scaffold/astro-app/src/components/Table.astro +181 -0
  32. package/scaffold/astro-app/src/components/Tabs.astro +223 -0
  33. package/scaffold/astro-app/src/components/Textarea.astro +58 -0
  34. package/scaffold/astro-app/src/components/ThemeSwitcher.astro +504 -0
  35. package/scaffold/astro-app/src/components/Toast.astro +30 -0
  36. package/scaffold/astro-app/src/components/Tooltip.astro +32 -0
  37. package/scaffold/astro-app/src/components/icons/Brush.astro +10 -0
  38. package/scaffold/astro-app/src/components/icons/Cake.astro +11 -0
  39. package/scaffold/astro-app/src/components/icons/Check.astro +29 -0
  40. package/scaffold/astro-app/src/components/icons/Cherry.astro +11 -0
  41. package/scaffold/astro-app/src/components/icons/ChevronDown.astro +29 -0
  42. package/scaffold/astro-app/src/components/icons/Circle.astro +29 -0
  43. package/scaffold/astro-app/src/components/icons/Close.astro +30 -0
  44. package/scaffold/astro-app/src/components/icons/Cmd.astro +26 -0
  45. package/scaffold/astro-app/src/components/icons/Copy.astro +30 -0
  46. package/scaffold/astro-app/src/components/icons/Eye.astro +30 -0
  47. package/scaffold/astro-app/src/components/icons/Filter.astro +29 -0
  48. package/scaffold/astro-app/src/components/icons/Flame.astro +28 -0
  49. package/scaffold/astro-app/src/components/icons/Flower.astro +11 -0
  50. package/scaffold/astro-app/src/components/icons/Gear.astro +30 -0
  51. package/scaffold/astro-app/src/components/icons/Heart.astro +28 -0
  52. package/scaffold/astro-app/src/components/icons/IceCream.astro +31 -0
  53. package/scaffold/astro-app/src/components/icons/Leaf.astro +29 -0
  54. package/scaffold/astro-app/src/components/icons/Lemon.astro +11 -0
  55. package/scaffold/astro-app/src/components/icons/Moon.astro +29 -0
  56. package/scaffold/astro-app/src/components/icons/Owl.astro +34 -0
  57. package/scaffold/astro-app/src/components/icons/Palette.astro +33 -0
  58. package/scaffold/astro-app/src/components/icons/Rainbow.astro +31 -0
  59. package/scaffold/astro-app/src/components/icons/Search.astro +30 -0
  60. package/scaffold/astro-app/src/components/icons/Shield.astro +28 -0
  61. package/scaffold/astro-app/src/components/icons/Snowflake.astro +34 -0
  62. package/scaffold/astro-app/src/components/icons/Sort.astro +30 -0
  63. package/scaffold/astro-app/src/components/icons/Sun.astro +29 -0
  64. package/scaffold/astro-app/src/components/icons/Sunset.astro +10 -0
  65. package/scaffold/astro-app/src/components/icons/Zap.astro +9 -0
  66. package/scaffold/astro-app/src/components/icons/devicons/Astro.astro +53 -0
  67. package/scaffold/astro-app/src/components/icons/devicons/Bash.astro +34 -0
  68. package/scaffold/astro-app/src/components/icons/devicons/Css3.astro +29 -0
  69. package/scaffold/astro-app/src/components/icons/devicons/Git.astro +24 -0
  70. package/scaffold/astro-app/src/components/icons/devicons/Html5.astro +27 -0
  71. package/scaffold/astro-app/src/components/icons/devicons/Javascript.astro +25 -0
  72. package/scaffold/astro-app/src/components/icons/devicons/Nodejs.astro +47 -0
  73. package/scaffold/astro-app/src/components/icons/devicons/Plaintext.astro +33 -0
  74. package/scaffold/astro-app/src/components/icons/devicons/React.astro +27 -0
  75. package/scaffold/astro-app/src/components/icons/devicons/Svelte.astro +25 -0
  76. package/scaffold/astro-app/src/components/icons/devicons/Vue.astro +26 -0
  77. package/scaffold/astro-app/src/config/frameworks.ts +26 -0
  78. package/scaffold/astro-app/src/config/themes.ts +54 -0
  79. package/scaffold/astro-app/src/layouts/DocsLayout.astro +204 -0
  80. package/scaffold/astro-app/src/layouts/Layout.astro +11 -2
  81. package/scaffold/astro-app/src/pages/components/accordion.astro +172 -0
  82. package/scaffold/astro-app/src/pages/components/alert.astro +250 -0
  83. package/scaffold/astro-app/src/pages/components/avatar.astro +102 -0
  84. package/scaffold/astro-app/src/pages/components/badge.astro +119 -0
  85. package/scaffold/astro-app/src/pages/components/breadcrumb.astro +124 -0
  86. package/scaffold/astro-app/src/pages/components/button.astro +74 -0
  87. package/scaffold/astro-app/src/pages/components/cards.astro +247 -0
  88. package/scaffold/astro-app/src/pages/components/copy-to-clipboard.astro +49 -0
  89. package/scaffold/astro-app/src/pages/components/divider.astro +74 -0
  90. package/scaffold/astro-app/src/pages/components/dropdown.astro +394 -0
  91. package/scaffold/astro-app/src/pages/components/forms.astro +367 -0
  92. package/scaffold/astro-app/src/pages/components/icons.astro +246 -0
  93. package/scaffold/astro-app/src/pages/components/modal.astro +152 -0
  94. package/scaffold/astro-app/src/pages/components/navbar.astro +80 -0
  95. package/scaffold/astro-app/src/pages/components/pagination.astro +126 -0
  96. package/scaffold/astro-app/src/pages/components/progress-bar.astro +94 -0
  97. package/scaffold/astro-app/src/pages/components/search.astro +155 -0
  98. package/scaffold/astro-app/src/pages/components/settings.astro +78 -0
  99. package/scaffold/astro-app/src/pages/components/spinner.astro +81 -0
  100. package/scaffold/astro-app/src/pages/components/table.astro +144 -0
  101. package/scaffold/astro-app/src/pages/components/tabs.astro +220 -0
  102. package/scaffold/astro-app/src/pages/components/theme-switcher.astro +67 -0
  103. package/scaffold/astro-app/src/pages/components/toast.astro +157 -0
  104. package/scaffold/astro-app/src/pages/components/tooltip.astro +209 -0
  105. package/scaffold/astro-app/src/pages/components.astro +290 -0
  106. package/scaffold/astro-app/src/pages/docs/accessibility.astro +9 -0
  107. package/scaffold/astro-app/src/pages/docs/colors.astro +9 -0
  108. package/scaffold/astro-app/src/pages/docs/design-system.astro +9 -0
  109. package/scaffold/astro-app/src/pages/docs/getting-started.astro +9 -0
  110. package/scaffold/astro-app/src/pages/docs/index.astro +15 -0
  111. package/scaffold/astro-app/src/pages/docs/themes/[theme].astro +14 -0
  112. package/scaffold/astro-app/src/pages/docs/theming.astro +10 -0
  113. package/scaffold/astro-app/src/pages/index.astro +5 -11
  114. package/scaffold/svelte-app/README.md +9 -2
  115. package/scaffold/svelte-app/src/app.html +1 -1
  116. package/scaffold/svelte-app/src/lib/rizzo/Accordion.svelte +128 -0
  117. package/scaffold/svelte-app/src/lib/rizzo/Alert.svelte +85 -0
  118. package/scaffold/svelte-app/src/lib/rizzo/Avatar.svelte +39 -0
  119. package/scaffold/svelte-app/src/lib/rizzo/Badge.svelte +31 -0
  120. package/scaffold/svelte-app/src/lib/rizzo/Breadcrumb.svelte +49 -0
  121. package/scaffold/svelte-app/src/lib/rizzo/Button.svelte +27 -0
  122. package/scaffold/svelte-app/src/lib/rizzo/Card.svelte +17 -0
  123. package/scaffold/svelte-app/src/lib/rizzo/Checkbox.svelte +37 -0
  124. package/scaffold/svelte-app/src/lib/rizzo/CopyToClipboard.svelte +79 -0
  125. package/scaffold/svelte-app/src/lib/rizzo/Divider.svelte +28 -0
  126. package/scaffold/svelte-app/src/lib/rizzo/Dropdown.svelte +254 -0
  127. package/scaffold/svelte-app/src/lib/rizzo/FormGroup.svelte +51 -0
  128. package/scaffold/svelte-app/src/lib/rizzo/Input.svelte +59 -0
  129. package/scaffold/svelte-app/src/lib/rizzo/Modal.svelte +157 -0
  130. package/scaffold/svelte-app/src/lib/rizzo/Pagination.svelte +93 -0
  131. package/scaffold/svelte-app/src/lib/rizzo/ProgressBar.svelte +58 -0
  132. package/scaffold/svelte-app/src/lib/rizzo/Radio.svelte +38 -0
  133. package/scaffold/svelte-app/src/lib/rizzo/Select.svelte +51 -0
  134. package/scaffold/svelte-app/src/lib/rizzo/Spinner.svelte +14 -0
  135. package/scaffold/svelte-app/src/lib/rizzo/Table.svelte +158 -0
  136. package/scaffold/svelte-app/src/lib/rizzo/Tabs.svelte +117 -0
  137. package/scaffold/svelte-app/src/lib/rizzo/Textarea.svelte +59 -0
  138. package/scaffold/svelte-app/src/lib/rizzo/ThemeSwitcher.svelte +315 -0
  139. package/scaffold/svelte-app/src/lib/rizzo/Toast.svelte +33 -0
  140. package/scaffold/svelte-app/src/lib/rizzo/Tooltip.svelte +19 -0
  141. package/scaffold/svelte-app/src/lib/rizzo/icons/Check.svelte +29 -0
  142. package/scaffold/svelte-app/src/lib/rizzo/icons/ChevronDown.svelte +29 -0
  143. package/scaffold/svelte-app/src/lib/rizzo/icons/Circle.svelte +29 -0
  144. package/scaffold/svelte-app/src/lib/rizzo/icons/Close.svelte +30 -0
  145. package/scaffold/svelte-app/src/lib/rizzo/icons/Cmd.svelte +27 -0
  146. package/scaffold/svelte-app/src/lib/rizzo/icons/Copy.svelte +30 -0
  147. package/scaffold/svelte-app/src/lib/rizzo/icons/Eye.svelte +30 -0
  148. package/scaffold/svelte-app/src/lib/rizzo/icons/Filter.svelte +29 -0
  149. package/scaffold/svelte-app/src/lib/rizzo/icons/Gear.svelte +30 -0
  150. package/scaffold/svelte-app/src/lib/rizzo/icons/IceCream.svelte +31 -0
  151. package/scaffold/svelte-app/src/lib/rizzo/icons/Moon.svelte +29 -0
  152. package/scaffold/svelte-app/src/lib/rizzo/icons/Owl.svelte +34 -0
  153. package/scaffold/svelte-app/src/lib/rizzo/icons/Palette.svelte +33 -0
  154. package/scaffold/svelte-app/src/lib/rizzo/icons/Rainbow.svelte +31 -0
  155. package/scaffold/svelte-app/src/lib/rizzo/icons/Search.svelte +30 -0
  156. package/scaffold/svelte-app/src/lib/rizzo/icons/Snowflake.svelte +34 -0
  157. package/scaffold/svelte-app/src/lib/rizzo/icons/Sort.svelte +30 -0
  158. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Astro.svelte +45 -0
  159. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Bash.svelte +28 -0
  160. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Css3.svelte +23 -0
  161. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Git.svelte +18 -0
  162. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Html5.svelte +21 -0
  163. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Javascript.svelte +19 -0
  164. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Nodejs.svelte +44 -0
  165. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Plaintext.svelte +24 -0
  166. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/React.svelte +21 -0
  167. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/SvelteIcon.svelte +19 -0
  168. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Vue.svelte +20 -0
  169. package/scaffold/svelte-app/src/lib/rizzo/index.ts +33 -0
  170. package/scaffold/svelte-app/src/lib/rizzo-docs/CodeBlock.svelte +239 -0
  171. package/scaffold/svelte-app/src/lib/rizzo-docs/SvelteDocPage.svelte +99 -0
  172. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AccordionDoc.svelte +53 -0
  173. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AlertDoc.svelte +114 -0
  174. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AvatarDoc.svelte +92 -0
  175. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BadgeDoc.svelte +60 -0
  176. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BreadcrumbDoc.svelte +55 -0
  177. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ButtonDoc.svelte +55 -0
  178. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CardsDoc.svelte +173 -0
  179. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComingSoon.svelte +12 -0
  180. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComponentsOverview.svelte +92 -0
  181. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CopyToClipboardDoc.svelte +26 -0
  182. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DividerDoc.svelte +105 -0
  183. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DropdownDoc.svelte +161 -0
  184. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/FormsDoc.svelte +375 -0
  185. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/IconsDoc.svelte +246 -0
  186. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Index.svelte +8 -0
  187. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ModalDoc.svelte +50 -0
  188. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/NavbarDoc.svelte +79 -0
  189. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/PaginationDoc.svelte +44 -0
  190. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ProgressBarDoc.svelte +95 -0
  191. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SearchDoc.svelte +147 -0
  192. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SettingsDoc.svelte +158 -0
  193. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SpinnerDoc.svelte +41 -0
  194. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TableDoc.svelte +116 -0
  195. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TabsDoc.svelte +152 -0
  196. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ThemeSwitcherDoc.svelte +181 -0
  197. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Theming.svelte +6 -0
  198. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ToastDoc.svelte +136 -0
  199. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TooltipDoc.svelte +57 -0
  200. package/scaffold/svelte-app/src/routes/+page.svelte +2 -2
  201. package/scaffold/svelte-app/src/routes/components/+page.svelte +4 -0
  202. package/scaffold/svelte-app/src/routes/components/[slug]/+page.svelte +7 -0
  203. package/scaffold/vanilla/README.md +11 -4
  204. package/scaffold/vanilla/components/accordion.html +187 -0
  205. package/scaffold/vanilla/components/alert.html +187 -0
  206. package/scaffold/vanilla/components/avatar.html +187 -0
  207. package/scaffold/vanilla/components/badge.html +187 -0
  208. package/scaffold/vanilla/components/breadcrumb.html +187 -0
  209. package/scaffold/vanilla/components/button.html +187 -0
  210. package/scaffold/vanilla/components/cards.html +187 -0
  211. package/scaffold/vanilla/components/copy-to-clipboard.html +187 -0
  212. package/scaffold/vanilla/components/divider.html +187 -0
  213. package/scaffold/vanilla/components/dropdown.html +187 -0
  214. package/scaffold/vanilla/components/forms.html +187 -0
  215. package/scaffold/vanilla/components/icons.html +187 -0
  216. package/scaffold/vanilla/components/index.html +212 -0
  217. package/scaffold/vanilla/components/modal.html +187 -0
  218. package/scaffold/vanilla/components/navbar.html +187 -0
  219. package/scaffold/vanilla/components/pagination.html +187 -0
  220. package/scaffold/vanilla/components/progress-bar.html +187 -0
  221. package/scaffold/vanilla/components/search.html +187 -0
  222. package/scaffold/vanilla/components/settings.html +187 -0
  223. package/scaffold/vanilla/components/spinner.html +187 -0
  224. package/scaffold/vanilla/components/table.html +187 -0
  225. package/scaffold/vanilla/components/tabs.html +187 -0
  226. package/scaffold/vanilla/components/theme-switcher.html +187 -0
  227. package/scaffold/vanilla/components/toast.html +187 -0
  228. package/scaffold/vanilla/components/tooltip.html +187 -0
  229. package/scaffold/vanilla/index.html +16 -6
  230. package/scaffold/vanilla/js/main.js +4 -3
@@ -0,0 +1,144 @@
1
+ ---
2
+ import DocsLayout from '../../layouts/DocsLayout.astro';
3
+ import TableComponent from '../../components/Table.astro';
4
+ import CodeBlock from '../../components/CodeBlock.astro';
5
+ ---
6
+
7
+ <DocsLayout title="Table Component — Astro" description="Accessible data table with sorting and optional filtering">
8
+
9
+ <p class="docs__read-docs">Read the full docs for this component at <a href="https://rizzo-css.vercel.app/docs/components/table" target="_blank" rel="noopener noreferrer">https://rizzo-css.vercel.app/docs/components/table</a>.</p>
10
+
11
+ <section>
12
+ <h2>Table Component</h2>
13
+ <p>An accessible data table for displaying tabular data. Supports column header sorting (click or Enter/Space), optional filter input to search across all columns, striped rows, and responsive horizontal scroll.</p>
14
+
15
+ <h3>Props</h3>
16
+ <ul>
17
+ <li><code>columns</code> (array, required) - Column definitions: <code>{'{ key, label, sortable?, type? }'}</code>. <code>type</code> is <code>'string'</code> or <code>'number'</code> for sort order.</li>
18
+ <li><code>data</code> (array, required) - Row data: array of objects with keys matching column <code>key</code>.</li>
19
+ <li><code>caption</code> (string, optional) - Table caption for accessibility.</li>
20
+ <li><code>sortable</code> (boolean, optional) - Enable column header sorting (default: true).</li>
21
+ <li><code>filterable</code> (boolean, optional) - Show filter input above table (default: false).</li>
22
+ <li><code>filterPlaceholder</code> (string, optional) - Placeholder for filter input (default: "Filter table…").</li>
23
+ <li><code>striped</code> (boolean, optional) - Striped rows (default: true).</li>
24
+ <li><code>class</code> (string, optional) - Additional CSS classes.</li>
25
+ </ul>
26
+
27
+ <h3>Basic Usage</h3>
28
+ <div class="example">
29
+ <div class="example-title">Live Example</div>
30
+ <TableComponent
31
+ caption="Sample data"
32
+ columns={[
33
+ { key: 'name', label: 'Name' },
34
+ { key: 'role', label: 'Role' },
35
+ { key: 'status', label: 'Status' },
36
+ ]}
37
+ data={[
38
+ { name: 'Alice', role: 'Developer', status: 'Active' },
39
+ { name: 'Bob', role: 'Designer', status: 'Active' },
40
+ { name: 'Carol', role: 'Manager', status: 'Away' },
41
+ ]}
42
+ />
43
+ </div>
44
+ <CodeBlock code={`---
45
+ import Table from '../../components/Table.astro';
46
+ ---
47
+
48
+ <Table
49
+ caption="Sample data"
50
+ columns={[
51
+ { key: 'name', label: 'Name' },
52
+ { key: 'role', label: 'Role' },
53
+ { key: 'status', label: 'Status' },
54
+ ]}
55
+ data={[
56
+ { name: 'Alice', role: 'Developer', status: 'Active' },
57
+ { name: 'Bob', role: 'Designer', status: 'Active' },
58
+ { name: 'Carol', role: 'Manager', status: 'Away' },
59
+ ]}
60
+ />`} language="astro" />
61
+
62
+ <h3>With Sorting (number column)</h3>
63
+ <p>Set <code>type: 'number'</code> on columns that should sort numerically.</p>
64
+ <div class="example">
65
+ <div class="example-title">Live Example</div>
66
+ <TableComponent
67
+ caption="Scores"
68
+ columns={[
69
+ { key: 'name', label: 'Name' },
70
+ { key: 'score', label: 'Score', type: 'number' },
71
+ { key: 'level', label: 'Level', type: 'number' },
72
+ ]}
73
+ data={[
74
+ { name: 'Alice', score: 92, level: 3 },
75
+ { name: 'Bob', score: 87, level: 2 },
76
+ { name: 'Carol', score: 95, level: 4 },
77
+ ]}
78
+ />
79
+ </div>
80
+ <CodeBlock code={`<Table
81
+ caption="Scores"
82
+ columns={[
83
+ { key: 'name', label: 'Name' },
84
+ { key: 'score', label: 'Score', type: 'number' },
85
+ { key: 'level', label: 'Level', type: 'number' },
86
+ ]}
87
+ data={[
88
+ { name: 'Alice', score: 92, level: 3 },
89
+ { name: 'Bob', score: 87, level: 2 },
90
+ { name: 'Carol', score: 95, level: 4 },
91
+ ]}
92
+ />`} language="astro" />
93
+
94
+ <h3>With Filter</h3>
95
+ <p>Use <code>filterable</code> to show a search input that filters rows by any column.</p>
96
+ <div class="example">
97
+ <div class="example-title">Live Example</div>
98
+ <TableComponent
99
+ caption="Filterable list"
100
+ columns={[
101
+ { key: 'name', label: 'Name' },
102
+ { key: 'role', label: 'Role' },
103
+ { key: 'status', label: 'Status' },
104
+ ]}
105
+ data={[
106
+ { name: 'Alice', role: 'Developer', status: 'Active' },
107
+ { name: 'Bob', role: 'Designer', status: 'Active' },
108
+ { name: 'Carol', role: 'Manager', status: 'Away' },
109
+ { name: 'Dave', role: 'Developer', status: 'Active' },
110
+ ]}
111
+ filterable
112
+ filterPlaceholder="Search…"
113
+ />
114
+ </div>
115
+ <CodeBlock code={`<Table
116
+ caption="Filterable list"
117
+ columns={[...]}
118
+ data={[...]}
119
+ filterable
120
+ filterPlaceholder="Search…"
121
+ />`} language="astro" />
122
+
123
+ <h3>Without Stripes</h3>
124
+ <div class="example">
125
+ <div class="example-title">Live Example</div>
126
+ <TableComponent
127
+ caption="Plain table"
128
+ columns={[{ key: 'a', label: 'A' }, { key: 'b', label: 'B' }]}
129
+ data={[{ a: '1', b: '2' }, { a: '3', b: '4' }]}
130
+ striped={false}
131
+ />
132
+ </div>
133
+
134
+ <h3>Features</h3>
135
+ <ul>
136
+ <li><strong>Accessible</strong> - Semantic <code>&lt;table&gt;</code>, <code>&lt;caption&gt;</code>, <code>scope="col"</code>, <code>aria-sort</code> on sortable headers, keyboard (Enter/Space) to sort.</li>
137
+ <li><strong>Sorting</strong> - Sortable column headers use the Sort icon; click to sort ascending/descending; <code>type: 'number'</code> for numeric sort.</li>
138
+ <li><strong>Filtering</strong> - Optional filter input with Filter icon; rows are shown/hidden by matching text in any cell.</li>
139
+ <li><strong>Striped rows</strong> - Optional alternating row background; row hover uses theme colors for contrast.</li>
140
+ <li><strong>Responsive</strong> - Table wrapper scrolls horizontally on small screens.</li>
141
+ </ul>
142
+ <p><strong>Svelte & Vanilla:</strong> <a href="/docs/svelte/components/table">Svelte</a> · Vanilla: same HTML and BEM as in Usage above; add minimal JS for sorting/filter if needed.</p>
143
+ </section>
144
+ </DocsLayout>
@@ -0,0 +1,220 @@
1
+ ---
2
+ import DocsLayout from '../../layouts/DocsLayout.astro';
3
+ import TabsComponent from '../../components/Tabs.astro';
4
+ import CodeBlock from '../../components/CodeBlock.astro';
5
+ ---
6
+
7
+ <DocsLayout title="Tabs Component — Astro" description="Accessible tabs component with keyboard navigation and ARIA tab pattern">
8
+
9
+ <p class="docs__read-docs">Read the full docs for this component at <a href="https://rizzo-css.vercel.app/docs/components/tabs" target="_blank" rel="noopener noreferrer">https://rizzo-css.vercel.app/docs/components/tabs</a>.</p>
10
+
11
+ <section>
12
+ <h2>Tabs Component</h2>
13
+ <p>An accessible tabs component for organizing content into multiple panels. Supports full keyboard navigation and follows ARIA tab pattern best practices.</p>
14
+
15
+ <h3>Props</h3>
16
+ <ul>
17
+ <li><code>tabs</code> (array, required) - Array of tab objects with <code>id</code> and <code>label</code> properties</li>
18
+ <li><code>id</code> (string, optional) - Unique identifier for the tabs component</li>
19
+ <li><code>defaultTab</code> (string, optional) - ID of the tab to show by default (defaults to first tab)</li>
20
+ <li><code>variant</code> (string, optional) - Visual variant: <code>'default'</code>, <code>'pills'</code>, or <code>'underline'</code> (default: <code>'default'</code>)</li>
21
+ <li><code>class</code> (string, optional) - Additional CSS classes</li>
22
+ </ul>
23
+
24
+ <h3>Tab Object Structure</h3>
25
+ <ul>
26
+ <li><code>id</code> (string, required) - Unique identifier for the tab</li>
27
+ <li><code>label</code> (string, required) - Display text for the tab button</li>
28
+ <li><code>content</code> (string, optional) - HTML content for the tab panel (alternative to using slots)</li>
29
+ </ul>
30
+
31
+ <h3>Basic Usage</h3>
32
+ <p>Provide panel content as children in the same order as the tabs array:</p>
33
+ <div class="example">
34
+ <div class="example-title">Live Example</div>
35
+ <TabsComponent
36
+ tabs={[
37
+ { id: 'overview', label: 'Overview' },
38
+ { id: 'features', label: 'Features' },
39
+ { id: 'pricing', label: 'Pricing' },
40
+ ]}
41
+ >
42
+ <div>
43
+ <h4>Overview</h4>
44
+ <p>This is the overview content. It provides a general introduction to the topic.</p>
45
+ </div>
46
+ <div>
47
+ <h4>Features</h4>
48
+ <ul>
49
+ <li>Feature 1: Accessible design</li>
50
+ <li>Feature 2: Keyboard navigation</li>
51
+ <li>Feature 3: Theme-aware styling</li>
52
+ </ul>
53
+ </div>
54
+ <div>
55
+ <h4>Pricing</h4>
56
+ <p>Choose the plan that works best for you.</p>
57
+ </div>
58
+ </TabsComponent>
59
+ </div>
60
+
61
+ <CodeBlock code={`---
62
+ import Tabs from '../../components/Tabs.astro';
63
+ ---
64
+
65
+ <Tabs
66
+ tabs={[
67
+ { id: 'overview', label: 'Overview' },
68
+ { id: 'features', label: 'Features' },
69
+ { id: 'pricing', label: 'Pricing' },
70
+ ]}
71
+ >
72
+ <div>
73
+ <h4>Overview</h4>
74
+ <p>Overview content here</p>
75
+ </div>
76
+ <div>
77
+ <h4>Features</h4>
78
+ <p>Features content here</p>
79
+ </div>
80
+ <div>
81
+ <h4>Pricing</h4>
82
+ <p>Pricing content here</p>
83
+ </div>
84
+ </Tabs>`} language="astro" />
85
+
86
+ <h3>With Content Property</h3>
87
+ <p>You can also provide content directly in the tab object:</p>
88
+ <div class="example">
89
+ <div class="example-title">Live Example</div>
90
+ <TabsComponent
91
+ tabs={[
92
+ { id: 'tab1', label: 'Tab 1', content: '<p>Content for tab 1</p>' },
93
+ { id: 'tab2', label: 'Tab 2', content: '<p>Content for tab 2</p>' },
94
+ { id: 'tab3', label: 'Tab 3', content: '<p>Content for tab 3</p>' },
95
+ ]}
96
+ />
97
+ </div>
98
+
99
+ <CodeBlock code={`<Tabs
100
+ tabs={[
101
+ { id: 'tab1', label: 'Tab 1', content: '<p>Content for tab 1</p>' },
102
+ { id: 'tab2', label: 'Tab 2', content: '<p>Content for tab 2</p>' },
103
+ { id: 'tab3', label: 'Tab 3', content: '<p>Content for tab 3</p>' },
104
+ ]}
105
+ />`} language="astro" />
106
+
107
+ <h3>Variants</h3>
108
+
109
+ <h4>Default Variant</h4>
110
+ <div class="example">
111
+ <div class="example-title">Live Example</div>
112
+ <TabsComponent
113
+ variant="default"
114
+ tabs={[
115
+ { id: 'default1', label: 'Tab 1' },
116
+ { id: 'default2', label: 'Tab 2' },
117
+ { id: 'default3', label: 'Tab 3' },
118
+ ]}
119
+ >
120
+ <div><p>Default variant with bottom border indicator</p></div>
121
+ <div><p>Tab 2 content</p></div>
122
+ <div><p>Tab 3 content</p></div>
123
+ </TabsComponent>
124
+ </div>
125
+
126
+ <h4>Pills Variant</h4>
127
+ <div class="example">
128
+ <div class="example-title">Live Example</div>
129
+ <TabsComponent
130
+ variant="pills"
131
+ tabs={[
132
+ { id: 'pills1', label: 'Tab 1' },
133
+ { id: 'pills2', label: 'Tab 2' },
134
+ { id: 'pills3', label: 'Tab 3' },
135
+ ]}
136
+ >
137
+ <div><p>Pills variant with filled background for active tab</p></div>
138
+ <div><p>Tab 2 content</p></div>
139
+ <div><p>Tab 3 content</p></div>
140
+ </TabsComponent>
141
+ </div>
142
+
143
+ <h4>Underline Variant</h4>
144
+ <div class="example">
145
+ <div class="example-title">Live Example</div>
146
+ <TabsComponent
147
+ variant="underline"
148
+ tabs={[
149
+ { id: 'underline1', label: 'Tab 1' },
150
+ { id: 'underline2', label: 'Tab 2' },
151
+ { id: 'underline3', label: 'Tab 3' },
152
+ ]}
153
+ >
154
+ <div><p>Underline variant with thicker bottom border for active tab</p></div>
155
+ <div><p>Tab 2 content</p></div>
156
+ <div><p>Tab 3 content</p></div>
157
+ </TabsComponent>
158
+ </div>
159
+
160
+ <h3>Default Tab</h3>
161
+ <p>You can specify which tab should be active by default:</p>
162
+ <div class="example">
163
+ <div class="example-title">Live Example</div>
164
+ <TabsComponent
165
+ defaultTab="second"
166
+ tabs={[
167
+ { id: 'first', label: 'First' },
168
+ { id: 'second', label: 'Second' },
169
+ { id: 'third', label: 'Third' },
170
+ ]}
171
+ >
172
+ <div><p>First tab content</p></div>
173
+ <div><p>Second tab is active by default</p></div>
174
+ <div><p>Third tab content</p></div>
175
+ </TabsComponent>
176
+ </div>
177
+
178
+ <CodeBlock code={`<Tabs
179
+ defaultTab="second"
180
+ tabs={[
181
+ { id: 'first', label: 'First' },
182
+ { id: 'second', label: 'Second' },
183
+ { id: 'third', label: 'Third' },
184
+ ]}
185
+ >
186
+ <div>First tab content</div>
187
+ <div>Second tab content</div>
188
+ <div>Third tab content</div>
189
+ </Tabs>`} language="astro" />
190
+
191
+ <h3>Features</h3>
192
+ <ul>
193
+ <li><strong>ARIA Tab Pattern</strong> - Full ARIA support with <code>role="tablist"</code>, <code>role="tab"</code>, <code>role="tabpanel"</code>, <code>aria-selected</code>, <code>aria-controls</code>, and <code>aria-labelledby</code></li>
194
+ <li><strong>Keyboard Navigation</strong> - Arrow keys (Left/Right or Up/Down), Home, End, Enter, and Space for activation</li>
195
+ <li><strong>Three Variants</strong> - Default (border indicator), Pills (filled background), and Underline (thicker border)</li>
196
+ <li><strong>Theme-Aware</strong> - Automatically adapts to all 14 available themes</li>
197
+ <li><strong>Responsive</strong> - Horizontal scrolling on mobile for many tabs</li>
198
+ <li><strong>Accessible</strong> - WCAG AA compliant with proper focus indicators</li>
199
+ </ul>
200
+
201
+ <h3>Keyboard Navigation</h3>
202
+ <ul>
203
+ <li><strong>Arrow Right / Arrow Down</strong> - Move to next tab</li>
204
+ <li><strong>Arrow Left / Arrow Up</strong> - Move to previous tab</li>
205
+ <li><strong>Home</strong> - Move to first tab</li>
206
+ <li><strong>End</strong> - Move to last tab</li>
207
+ <li><strong>Enter / Space</strong> - Activate focused tab</li>
208
+ <li><strong>Tab</strong> - Move focus to tab panel content</li>
209
+ </ul>
210
+
211
+ <h3>Accessibility</h3>
212
+ <ul>
213
+ <li><strong>ARIA Attributes</strong> - Proper <code>role</code>, <code>aria-selected</code>, <code>aria-controls</code>, <code>aria-labelledby</code>, and <code>aria-hidden</code> attributes</li>
214
+ <li><strong>Focus Management</strong> - Only active tab is in tab order (<code>tabindex="0"</code>), others are <code>tabindex="-1"</code></li>
215
+ <li><strong>Screen Reader Support</strong> - Proper announcements when tabs change</li>
216
+ <li><strong>Focus Indicators</strong> - Visible focus outline using <code>--accent</code> color</li>
217
+ </ul>
218
+ <p><strong>Svelte & Vanilla:</strong> <a href="/docs/svelte/components/tabs">Svelte</a> · Vanilla: same HTML and BEM as in Usage above; add minimal JS for tab switch and keyboard.</p>
219
+ </section>
220
+ </DocsLayout>
@@ -0,0 +1,67 @@
1
+ ---
2
+ import DocsLayout from '../../layouts/DocsLayout.astro';
3
+ import ThemeSwitcher from '../../components/ThemeSwitcher.astro';
4
+ import CodeBlock from '../../components/CodeBlock.astro';
5
+ ---
6
+
7
+ <DocsLayout title="Theme Switcher Component — Astro" description="Accessible theme switcher with theme icons and keyboard navigation">
8
+
9
+ <p class="docs__read-docs">Read the full docs for this component at <a href="https://rizzo-css.vercel.app/docs/components/theme-switcher" target="_blank" rel="noopener noreferrer">https://rizzo-css.vercel.app/docs/components/theme-switcher</a>.</p>
10
+
11
+ <section>
12
+ <h2>Theme Switcher Component</h2>
13
+ <p>The ThemeSwitcher is integrated into the Settings panel, but can also be used standalone.</p>
14
+
15
+ <div class="example">
16
+ <div class="example-title">Live Example</div>
17
+ <p>Try switching themes using the theme switcher below:</p>
18
+ <ThemeSwitcher />
19
+ </div>
20
+
21
+ <h3>Usage</h3>
22
+ <CodeBlock code={`---
23
+ import ThemeSwitcher from '../../components/ThemeSwitcher.astro';
24
+ ---
25
+
26
+ <ThemeSwitcher />`} language="astro" />
27
+
28
+ <h3>Features</h3>
29
+ <p>The theme switcher:</p>
30
+ <ul>
31
+ <li><strong>Preference (System)</strong> – Choose System to follow OS light/dark; theme updates when you change the OS preference.</li>
32
+ <li><strong>Preview panel</strong> – Always visible when the menu is open (on viewports &gt;480px). Shows a fixed “Preview” label; the theme name, swatch, and accent bar show the <strong>current</strong> theme by default and the <strong>hovered</strong> theme on hover/focus. Full-height divider between list and preview. Hidden on small viewports.</li>
33
+ <li>Groups themes by Preference, Dark, and Light; each theme has a unique icon.</li>
34
+ <li>Shows active theme name and icon in the trigger button.</li>
35
+ <li>When System is selected, both System and the applied theme show the active background and accent bar.</li>
36
+ <li>Persists selection in <code>localStorage</code> (key <code>theme</code>: theme id or <code>system</code>).</li>
37
+ <li>First visit uses initial <code>data-theme</code> or OS preference.</li>
38
+ <li>Full keyboard navigation (see below).</li>
39
+ </ul>
40
+
41
+ <h3>Keyboard Navigation</h3>
42
+ <ul>
43
+ <li><code>Enter</code> or <code>Space</code> - Open/close menu</li>
44
+ <li><code>ArrowDown</code> - Open menu and focus first option</li>
45
+ <li><code>ArrowUp</code> - Open menu and focus last option</li>
46
+ <li><code>ArrowDown/ArrowUp</code> - Navigate options within menu</li>
47
+ <li><code>Home</code> - Jump to first option</li>
48
+ <li><code>End</code> - Jump to last option</li>
49
+ <li><code>Enter</code> or <code>Space</code> - Select theme</li>
50
+ <li><code>Escape</code> - Close menu</li>
51
+ <li><code>Tab</code> - Close menu and continue tabbing</li>
52
+ </ul>
53
+
54
+ <h3>Building your own theme switcher</h3>
55
+ <p>All 14 themes are included in the Rizzo CSS bundle. Switching themes is done by setting <code>data-theme</code> on <code>&lt;html&gt;</code> and persisting the choice in <code>localStorage</code> (key <code>theme</code>). You can use the ThemeSwitcher component above, or build a custom UI with the same behavior.</p>
56
+ <p><strong>Theme utilities</strong> (see <a href="/docs/getting-started#javascript-utilities">Getting Started – JavaScript utilities</a>):</p>
57
+ <ul>
58
+ <li><code>applyTheme(value)</code> – Sets <code>data-theme</code> and saves to <code>localStorage</code>. Use a theme id (e.g. <code>github-dark-classic</code>) or <code>system</code> to follow OS light/dark. Dispatches <code>rizzo-theme-change</code>.</li>
59
+ <li><code>getThemeLabel(value)</code> / <code>getThemeInfo(value)</code> – Display names for theme ids and for <code>system</code>.</li>
60
+ <li><code>getStoredTheme()</code> – Current stored value (<code>theme</code> id or <code>system</code>).</li>
61
+ <li><code>resolveSystemTheme()</code> – Resolves OS preference to a concrete theme id (dark → GitHub Dark Classic, light → GitHub Light).</li>
62
+ <li>Constants: <code>THEME_SYSTEM</code>, <code>DEFAULT_THEME_DARK</code>, <code>DEFAULT_THEME_LIGHT</code>.</li>
63
+ </ul>
64
+ <p><strong>Theme IDs:</strong> Run <code>npx rizzo-css theme</code> to list all 14 ids, or see <a href="/docs/theming#available-themes">Theming – Available themes</a>. To sync a custom UI when the theme changes elsewhere, listen for the <code>rizzo-theme-change</code> event.</p>
65
+ <p><strong>Svelte & Vanilla:</strong> <a href="/docs/svelte/components/theme-switcher">Svelte</a> (live Svelte component) · <a href="/docs/vanilla/components/theme-switcher">Vanilla</a> (live example + copyable HTML). Or use theme utilities (<code>applyTheme</code>, <code>getThemeLabel</code>) and see <a href="/docs/theming#building-your-own-theme-switcher">Building your own theme switcher</a>.</p>
66
+ </section>
67
+ </DocsLayout>
@@ -0,0 +1,157 @@
1
+ ---
2
+ import DocsLayout from '../../layouts/DocsLayout.astro';
3
+ import CodeBlock from '../../components/CodeBlock.astro';
4
+ ---
5
+
6
+ <DocsLayout title="Toast Component — Astro" description="Fixed position toast notifications with auto-dismiss and programmatic control">
7
+
8
+ <p class="docs__read-docs">Read the full docs for this component at <a href="https://rizzo-css.vercel.app/docs/components/toast" target="_blank" rel="noopener noreferrer">https://rizzo-css.vercel.app/docs/components/toast</a>.</p>
9
+
10
+ <section>
11
+ <h2>Toast Notifications</h2>
12
+ <p>Toast notifications are fixed-position alerts that appear in a corner or center of the screen. They're perfect for non-intrusive notifications, success messages, and temporary feedback.</p>
13
+
14
+ <h3>Programmatic Toast Creation</h3>
15
+ <p>The easiest way to show toasts is using the <code>showToast()</code> function:</p>
16
+
17
+ <div class="example">
18
+ <div class="example-title">Live Examples</div>
19
+ <div style="display: flex; flex-wrap: wrap; gap: var(--spacing-3);">
20
+ <button class="btn btn-success" onclick="window.showToast && window.showToast('Success! Your changes have been saved.', { variant: 'success' })">Show Success Toast</button>
21
+ <button class="btn btn-error" onclick="window.showToast && window.showToast('Error! Something went wrong.', { variant: 'error' })">Show Error Toast</button>
22
+ <button class="btn btn-warning" onclick="window.showToast && window.showToast('Warning! Please review your changes.', { variant: 'warning' })">Show Warning Toast</button>
23
+ <button class="btn btn-info" onclick="window.showToast && window.showToast('Info: New features are available.', { variant: 'info' })">Show Info Toast</button>
24
+ </div>
25
+ </div>
26
+
27
+ <h3>Toast Positions</h3>
28
+ <p>Toasts can be positioned in six different locations:</p>
29
+
30
+ <div class="example">
31
+ <div class="example-title">Position Examples</div>
32
+ <div style="display: flex; flex-wrap: wrap; gap: var(--spacing-3);">
33
+ <button class="btn btn-primary" onclick="window.showToast && window.showToast('Top Right Toast', { position: 'top-right' })">Top Right</button>
34
+ <button class="btn btn-primary" onclick="window.showToast && window.showToast('Top Left Toast', { position: 'top-left' })">Top Left</button>
35
+ <button class="btn btn-primary" onclick="window.showToast && window.showToast('Top Center Toast', { position: 'top-center' })">Top Center</button>
36
+ <button class="btn btn-primary" onclick="window.showToast && window.showToast('Bottom Right Toast', { position: 'bottom-right' })">Bottom Right</button>
37
+ <button class="btn btn-primary" onclick="window.showToast && window.showToast('Bottom Left Toast', { position: 'bottom-left' })">Bottom Left</button>
38
+ <button class="btn btn-primary" onclick="window.showToast && window.showToast('Bottom Center Toast', { position: 'bottom-center' })">Bottom Center</button>
39
+ </div>
40
+ </div>
41
+
42
+ <h3>Auto-Dismiss</h3>
43
+ <p>Toasts automatically dismiss after 5 seconds by default. You can customize the duration:</p>
44
+
45
+ <div class="example">
46
+ <div class="example-title">Auto-Dismiss Examples</div>
47
+ <div style="display: flex; flex-wrap: wrap; gap: var(--spacing-3);">
48
+ <button class="btn btn-primary" onclick="window.showToast && window.showToast('This toast dismisses in 3 seconds', { autoDismiss: 3000 })">3 Second Toast</button>
49
+ <button class="btn btn-primary" onclick="window.showToast && window.showToast('This toast dismisses in 7 seconds', { autoDismiss: 7000 })">7 Second Toast</button>
50
+ <button class="btn btn-primary" onclick="window.showToast && window.showToast('This toast will not auto-dismiss', { autoDismiss: 0 })">No Auto-Dismiss</button>
51
+ </div>
52
+ </div>
53
+
54
+ <h3>Multiple Toasts</h3>
55
+ <p>Multiple toasts stack vertically in the same position:</p>
56
+
57
+ <div class="example">
58
+ <div class="example-title">Stacked Toasts</div>
59
+ <div style="display: flex; flex-wrap: wrap; gap: var(--spacing-3);">
60
+ <button class="btn btn-primary" onclick="if(window.showToast){window.showToast('First toast', { variant: 'success' }); setTimeout(function() { window.showToast('Second toast', { variant: 'info' }); }, 500); setTimeout(function() { window.showToast('Third toast', { variant: 'warning' }); }, 1000);}">Show Multiple Toasts</button>
61
+ <button class="btn" onclick="window.removeAllToasts && window.removeAllToasts()">Clear All Toasts</button>
62
+ </div>
63
+ </div>
64
+
65
+ <h3>Usage</h3>
66
+ <p>Import the toast utility and use it programmatically:</p>
67
+ <CodeBlock code={`// Import toast utility
68
+ import { showToast, removeToast, removeAllToasts } from '../utils/toast';
69
+
70
+ // Show a simple toast
71
+ showToast('Success! Your changes have been saved.', {
72
+ variant: 'success'
73
+ });
74
+
75
+ // Show toast with custom options
76
+ showToast('Error occurred', {
77
+ variant: 'error',
78
+ position: 'top-right',
79
+ autoDismiss: 5000,
80
+ dismissible: true
81
+ });
82
+
83
+ // Remove a specific toast by ID
84
+ const toastId = showToast('This will be removed', { variant: 'info' });
85
+ setTimeout(() => removeToast(toastId), 2000);
86
+
87
+ // Remove all toasts
88
+ removeAllToasts();`} language="javascript" />
89
+
90
+ <p>Or use the global functions (available after importing the utility):</p>
91
+ <CodeBlock code={`// Global functions (available on window)
92
+ window.showToast('Success!', { variant: 'success' });
93
+ window.removeToast('toast-id');
94
+ window.removeAllToasts();`} language="javascript" />
95
+
96
+ <h3>Toast Options</h3>
97
+ <ul>
98
+ <li><code>variant</code> (string, optional) - Toast variant: <code>"success"</code>, <code>"error"</code>, <code>"warning"</code>, or <code>"info"</code> (default: <code>"info"</code>)</li>
99
+ <li><code>dismissible</code> (boolean, optional) - Whether the toast can be manually dismissed (default: <code>true</code>)</li>
100
+ <li><code>autoDismiss</code> (number, optional) - Auto-dismiss duration in milliseconds. Set to <code>0</code> to disable (default: <code>5000</code>)</li>
101
+ <li><code>position</code> (string, optional) - Toast position: <code>"top-right"</code>, <code>"top-left"</code>, <code>"top-center"</code>, <code>"bottom-right"</code>, <code>"bottom-left"</code>, <code>"bottom-center"</code> (default: <code>"top-right"</code>)</li>
102
+ <li><code>id</code> (string, optional) - Unique ID for the toast. If not provided, a random ID will be generated</li>
103
+ </ul>
104
+
105
+ <h3>Features</h3>
106
+ <ul>
107
+ <li>Fixed positioning in six locations (top/bottom + left/center/right)</li>
108
+ <li>Automatic stacking of multiple toasts</li>
109
+ <li>Auto-dismiss with customizable duration (default: 5 seconds)</li>
110
+ <li>Smooth slide-in animations (respects <code>prefers-reduced-motion</code>)</li>
111
+ <li>All alert variants supported (success, error, warning, info)</li>
112
+ <li>Programmatic control via <code>showToast()</code>, <code>removeToast()</code>, <code>removeAllToasts()</code></li>
113
+ <li>Mobile responsive (full width on mobile)</li>
114
+ <li>Accessible with ARIA attributes</li>
115
+ <li>Theme-aware styling</li>
116
+ </ul>
117
+
118
+ <h3>Toast Component (Static)</h3>
119
+ <p>For static toast components in Astro templates, you can use the <code>Toast</code> component:</p>
120
+ <CodeBlock code={`---
121
+ import Toast from '../../components/Toast.astro';
122
+ ---
123
+
124
+ <Toast variant="success" position="top-right" autoDismiss={5000}>
125
+ Your changes have been saved!
126
+ </Toast>`} language="astro" />
127
+
128
+ <p><strong>Note:</strong> For dynamic toast notifications, use the programmatic <code>showToast()</code> function instead. The toast functions are available globally on all pages via <code>window.showToast()</code>, <code>window.removeToast()</code>, and <code>window.removeAllToasts()</code>.</p>
129
+ <p><strong>Svelte & Vanilla:</strong> <a href="/docs/svelte/components/toast">Svelte</a> · Vanilla: same HTML and BEM for static toasts; use <code>showToast()</code> / <code>removeToast()</code> for dynamic (included in scaffold).</p>
130
+ </section>
131
+ </DocsLayout>
132
+
133
+ <script is:inline>
134
+ // Toast functions are available via window.showToast from Layout.astro
135
+ // All onclick handlers use window.showToast directly
136
+ // This script just verifies they're available and logs for debugging
137
+ (function() {
138
+ function checkFunctions() {
139
+ if (typeof window !== 'undefined' && window.showToast) {
140
+ // console.log('Toast functions verified:', {
141
+ // showToast: typeof window.showToast,
142
+ // removeAllToasts: typeof window.removeAllToasts,
143
+ // removeToast: typeof window.removeToast
144
+ // });
145
+ } else {
146
+ console.warn('Toast functions not yet available, retrying...');
147
+ setTimeout(checkFunctions, 50);
148
+ }
149
+ }
150
+
151
+ if (document.readyState === 'loading') {
152
+ document.addEventListener('DOMContentLoaded', checkFunctions);
153
+ } else {
154
+ checkFunctions();
155
+ }
156
+ })();
157
+ </script>