rizzo-css 0.0.12 → 0.0.14

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 (235) 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 +166 -85
  5. package/package.json +5 -3
  6. package/scaffold/astro/ThemeSwitcher.astro +504 -0
  7. package/scaffold/astro/themes.ts +54 -0
  8. package/scaffold/astro-app/README.md +13 -2
  9. package/scaffold/astro-app/src/components/Accordion.astro +178 -0
  10. package/scaffold/astro-app/src/components/Alert.astro +131 -0
  11. package/scaffold/astro-app/src/components/Avatar.astro +59 -0
  12. package/scaffold/astro-app/src/components/Badge.astro +24 -0
  13. package/scaffold/astro-app/src/components/Breadcrumb.astro +61 -0
  14. package/scaffold/astro-app/src/components/Button.astro +3 -0
  15. package/scaffold/astro-app/src/components/Card.astro +18 -0
  16. package/scaffold/astro-app/src/components/Checkbox.astro +38 -0
  17. package/scaffold/astro-app/src/components/CodeBlock.astro +393 -0
  18. package/scaffold/astro-app/src/components/CopyToClipboard.astro +219 -0
  19. package/scaffold/astro-app/src/components/Divider.astro +37 -0
  20. package/scaffold/astro-app/src/components/Dropdown.astro +807 -0
  21. package/scaffold/astro-app/src/components/FormGroup.astro +59 -0
  22. package/scaffold/astro-app/src/components/FrameworkSwitcher.astro +72 -0
  23. package/scaffold/astro-app/src/components/Input.astro +59 -0
  24. package/scaffold/astro-app/src/components/Modal.astro +212 -0
  25. package/scaffold/astro-app/src/components/Navbar.astro +701 -0
  26. package/scaffold/astro-app/src/components/Pagination.astro +240 -0
  27. package/scaffold/astro-app/src/components/ProgressBar.astro +65 -0
  28. package/scaffold/astro-app/src/components/Radio.astro +38 -0
  29. package/scaffold/astro-app/src/components/Search.astro +1259 -0
  30. package/scaffold/astro-app/src/components/Select.astro +49 -0
  31. package/scaffold/astro-app/src/components/Settings.astro +382 -0
  32. package/scaffold/astro-app/src/components/Spinner.astro +30 -0
  33. package/scaffold/astro-app/src/components/Table.astro +181 -0
  34. package/scaffold/astro-app/src/components/Tabs.astro +223 -0
  35. package/scaffold/astro-app/src/components/Textarea.astro +58 -0
  36. package/scaffold/astro-app/src/components/ThemeSwitcher.astro +504 -0
  37. package/scaffold/astro-app/src/components/Toast.astro +30 -0
  38. package/scaffold/astro-app/src/components/Tooltip.astro +32 -0
  39. package/scaffold/astro-app/src/components/icons/Brush.astro +10 -0
  40. package/scaffold/astro-app/src/components/icons/Cake.astro +11 -0
  41. package/scaffold/astro-app/src/components/icons/Check.astro +29 -0
  42. package/scaffold/astro-app/src/components/icons/Cherry.astro +11 -0
  43. package/scaffold/astro-app/src/components/icons/ChevronDown.astro +29 -0
  44. package/scaffold/astro-app/src/components/icons/Circle.astro +29 -0
  45. package/scaffold/astro-app/src/components/icons/Close.astro +30 -0
  46. package/scaffold/astro-app/src/components/icons/Cmd.astro +26 -0
  47. package/scaffold/astro-app/src/components/icons/Copy.astro +30 -0
  48. package/scaffold/astro-app/src/components/icons/Eye.astro +30 -0
  49. package/scaffold/astro-app/src/components/icons/Filter.astro +29 -0
  50. package/scaffold/astro-app/src/components/icons/Flame.astro +28 -0
  51. package/scaffold/astro-app/src/components/icons/Flower.astro +11 -0
  52. package/scaffold/astro-app/src/components/icons/Gear.astro +30 -0
  53. package/scaffold/astro-app/src/components/icons/Heart.astro +28 -0
  54. package/scaffold/astro-app/src/components/icons/IceCream.astro +31 -0
  55. package/scaffold/astro-app/src/components/icons/Leaf.astro +29 -0
  56. package/scaffold/astro-app/src/components/icons/Lemon.astro +11 -0
  57. package/scaffold/astro-app/src/components/icons/Moon.astro +29 -0
  58. package/scaffold/astro-app/src/components/icons/Owl.astro +34 -0
  59. package/scaffold/astro-app/src/components/icons/Palette.astro +33 -0
  60. package/scaffold/astro-app/src/components/icons/Rainbow.astro +31 -0
  61. package/scaffold/astro-app/src/components/icons/Search.astro +30 -0
  62. package/scaffold/astro-app/src/components/icons/Shield.astro +28 -0
  63. package/scaffold/astro-app/src/components/icons/Snowflake.astro +34 -0
  64. package/scaffold/astro-app/src/components/icons/Sort.astro +30 -0
  65. package/scaffold/astro-app/src/components/icons/Sun.astro +29 -0
  66. package/scaffold/astro-app/src/components/icons/Sunset.astro +10 -0
  67. package/scaffold/astro-app/src/components/icons/Zap.astro +9 -0
  68. package/scaffold/astro-app/src/components/icons/devicons/Astro.astro +53 -0
  69. package/scaffold/astro-app/src/components/icons/devicons/Bash.astro +34 -0
  70. package/scaffold/astro-app/src/components/icons/devicons/Css3.astro +29 -0
  71. package/scaffold/astro-app/src/components/icons/devicons/Git.astro +24 -0
  72. package/scaffold/astro-app/src/components/icons/devicons/Html5.astro +27 -0
  73. package/scaffold/astro-app/src/components/icons/devicons/Javascript.astro +25 -0
  74. package/scaffold/astro-app/src/components/icons/devicons/Nodejs.astro +47 -0
  75. package/scaffold/astro-app/src/components/icons/devicons/Plaintext.astro +33 -0
  76. package/scaffold/astro-app/src/components/icons/devicons/React.astro +27 -0
  77. package/scaffold/astro-app/src/components/icons/devicons/Svelte.astro +25 -0
  78. package/scaffold/astro-app/src/components/icons/devicons/Vue.astro +26 -0
  79. package/scaffold/astro-app/src/config/frameworks.ts +26 -0
  80. package/scaffold/astro-app/src/config/themes.ts +54 -0
  81. package/scaffold/astro-app/src/layouts/DocsLayout.astro +204 -0
  82. package/scaffold/astro-app/src/layouts/Layout.astro +11 -2
  83. package/scaffold/astro-app/src/pages/components/accordion.astro +172 -0
  84. package/scaffold/astro-app/src/pages/components/alert.astro +250 -0
  85. package/scaffold/astro-app/src/pages/components/avatar.astro +102 -0
  86. package/scaffold/astro-app/src/pages/components/badge.astro +119 -0
  87. package/scaffold/astro-app/src/pages/components/breadcrumb.astro +124 -0
  88. package/scaffold/astro-app/src/pages/components/button.astro +74 -0
  89. package/scaffold/astro-app/src/pages/components/cards.astro +247 -0
  90. package/scaffold/astro-app/src/pages/components/copy-to-clipboard.astro +49 -0
  91. package/scaffold/astro-app/src/pages/components/divider.astro +74 -0
  92. package/scaffold/astro-app/src/pages/components/dropdown.astro +394 -0
  93. package/scaffold/astro-app/src/pages/components/forms.astro +367 -0
  94. package/scaffold/astro-app/src/pages/components/icons.astro +246 -0
  95. package/scaffold/astro-app/src/pages/components/modal.astro +152 -0
  96. package/scaffold/astro-app/src/pages/components/navbar.astro +80 -0
  97. package/scaffold/astro-app/src/pages/components/pagination.astro +126 -0
  98. package/scaffold/astro-app/src/pages/components/progress-bar.astro +94 -0
  99. package/scaffold/astro-app/src/pages/components/search.astro +155 -0
  100. package/scaffold/astro-app/src/pages/components/settings.astro +78 -0
  101. package/scaffold/astro-app/src/pages/components/spinner.astro +81 -0
  102. package/scaffold/astro-app/src/pages/components/table.astro +144 -0
  103. package/scaffold/astro-app/src/pages/components/tabs.astro +220 -0
  104. package/scaffold/astro-app/src/pages/components/theme-switcher.astro +67 -0
  105. package/scaffold/astro-app/src/pages/components/toast.astro +157 -0
  106. package/scaffold/astro-app/src/pages/components/tooltip.astro +209 -0
  107. package/scaffold/astro-app/src/pages/components.astro +290 -0
  108. package/scaffold/astro-app/src/pages/docs/accessibility.astro +9 -0
  109. package/scaffold/astro-app/src/pages/docs/colors.astro +9 -0
  110. package/scaffold/astro-app/src/pages/docs/design-system.astro +9 -0
  111. package/scaffold/astro-app/src/pages/docs/getting-started.astro +9 -0
  112. package/scaffold/astro-app/src/pages/docs/index.astro +15 -0
  113. package/scaffold/astro-app/src/pages/docs/themes/[theme].astro +14 -0
  114. package/scaffold/astro-app/src/pages/docs/theming.astro +10 -0
  115. package/scaffold/astro-app/src/pages/index.astro +5 -11
  116. package/scaffold/svelte/ThemeSwitcher.svelte +315 -0
  117. package/scaffold/svelte/theme.ts +65 -0
  118. package/scaffold/svelte/themes.ts +54 -0
  119. package/scaffold/svelte-app/README.md +9 -2
  120. package/scaffold/svelte-app/src/app.html +1 -1
  121. package/scaffold/svelte-app/src/lib/rizzo/Accordion.svelte +128 -0
  122. package/scaffold/svelte-app/src/lib/rizzo/Alert.svelte +85 -0
  123. package/scaffold/svelte-app/src/lib/rizzo/Avatar.svelte +39 -0
  124. package/scaffold/svelte-app/src/lib/rizzo/Badge.svelte +31 -0
  125. package/scaffold/svelte-app/src/lib/rizzo/Breadcrumb.svelte +49 -0
  126. package/scaffold/svelte-app/src/lib/rizzo/Button.svelte +27 -0
  127. package/scaffold/svelte-app/src/lib/rizzo/Card.svelte +17 -0
  128. package/scaffold/svelte-app/src/lib/rizzo/Checkbox.svelte +37 -0
  129. package/scaffold/svelte-app/src/lib/rizzo/CopyToClipboard.svelte +79 -0
  130. package/scaffold/svelte-app/src/lib/rizzo/Divider.svelte +28 -0
  131. package/scaffold/svelte-app/src/lib/rizzo/Dropdown.svelte +254 -0
  132. package/scaffold/svelte-app/src/lib/rizzo/FormGroup.svelte +51 -0
  133. package/scaffold/svelte-app/src/lib/rizzo/Input.svelte +59 -0
  134. package/scaffold/svelte-app/src/lib/rizzo/Modal.svelte +157 -0
  135. package/scaffold/svelte-app/src/lib/rizzo/Pagination.svelte +93 -0
  136. package/scaffold/svelte-app/src/lib/rizzo/ProgressBar.svelte +58 -0
  137. package/scaffold/svelte-app/src/lib/rizzo/Radio.svelte +38 -0
  138. package/scaffold/svelte-app/src/lib/rizzo/Select.svelte +51 -0
  139. package/scaffold/svelte-app/src/lib/rizzo/Spinner.svelte +14 -0
  140. package/scaffold/svelte-app/src/lib/rizzo/Table.svelte +158 -0
  141. package/scaffold/svelte-app/src/lib/rizzo/Tabs.svelte +117 -0
  142. package/scaffold/svelte-app/src/lib/rizzo/Textarea.svelte +59 -0
  143. package/scaffold/svelte-app/src/lib/rizzo/ThemeSwitcher.svelte +315 -0
  144. package/scaffold/svelte-app/src/lib/rizzo/Toast.svelte +33 -0
  145. package/scaffold/svelte-app/src/lib/rizzo/Tooltip.svelte +19 -0
  146. package/scaffold/svelte-app/src/lib/rizzo/icons/Check.svelte +29 -0
  147. package/scaffold/svelte-app/src/lib/rizzo/icons/ChevronDown.svelte +29 -0
  148. package/scaffold/svelte-app/src/lib/rizzo/icons/Circle.svelte +29 -0
  149. package/scaffold/svelte-app/src/lib/rizzo/icons/Close.svelte +30 -0
  150. package/scaffold/svelte-app/src/lib/rizzo/icons/Cmd.svelte +27 -0
  151. package/scaffold/svelte-app/src/lib/rizzo/icons/Copy.svelte +30 -0
  152. package/scaffold/svelte-app/src/lib/rizzo/icons/Eye.svelte +30 -0
  153. package/scaffold/svelte-app/src/lib/rizzo/icons/Filter.svelte +29 -0
  154. package/scaffold/svelte-app/src/lib/rizzo/icons/Gear.svelte +30 -0
  155. package/scaffold/svelte-app/src/lib/rizzo/icons/IceCream.svelte +31 -0
  156. package/scaffold/svelte-app/src/lib/rizzo/icons/Moon.svelte +29 -0
  157. package/scaffold/svelte-app/src/lib/rizzo/icons/Owl.svelte +34 -0
  158. package/scaffold/svelte-app/src/lib/rizzo/icons/Palette.svelte +33 -0
  159. package/scaffold/svelte-app/src/lib/rizzo/icons/Rainbow.svelte +31 -0
  160. package/scaffold/svelte-app/src/lib/rizzo/icons/Search.svelte +30 -0
  161. package/scaffold/svelte-app/src/lib/rizzo/icons/Snowflake.svelte +34 -0
  162. package/scaffold/svelte-app/src/lib/rizzo/icons/Sort.svelte +30 -0
  163. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Astro.svelte +45 -0
  164. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Bash.svelte +28 -0
  165. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Css3.svelte +23 -0
  166. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Git.svelte +18 -0
  167. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Html5.svelte +21 -0
  168. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Javascript.svelte +19 -0
  169. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Nodejs.svelte +44 -0
  170. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Plaintext.svelte +24 -0
  171. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/React.svelte +21 -0
  172. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/SvelteIcon.svelte +19 -0
  173. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Vue.svelte +20 -0
  174. package/scaffold/svelte-app/src/lib/rizzo/index.ts +33 -0
  175. package/scaffold/svelte-app/src/lib/rizzo-docs/CodeBlock.svelte +239 -0
  176. package/scaffold/svelte-app/src/lib/rizzo-docs/SvelteDocPage.svelte +99 -0
  177. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AccordionDoc.svelte +53 -0
  178. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AlertDoc.svelte +114 -0
  179. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AvatarDoc.svelte +92 -0
  180. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BadgeDoc.svelte +60 -0
  181. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BreadcrumbDoc.svelte +55 -0
  182. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ButtonDoc.svelte +55 -0
  183. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CardsDoc.svelte +173 -0
  184. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComingSoon.svelte +12 -0
  185. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComponentsOverview.svelte +92 -0
  186. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CopyToClipboardDoc.svelte +26 -0
  187. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DividerDoc.svelte +105 -0
  188. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DropdownDoc.svelte +161 -0
  189. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/FormsDoc.svelte +375 -0
  190. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/IconsDoc.svelte +246 -0
  191. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Index.svelte +8 -0
  192. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ModalDoc.svelte +50 -0
  193. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/NavbarDoc.svelte +79 -0
  194. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/PaginationDoc.svelte +44 -0
  195. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ProgressBarDoc.svelte +95 -0
  196. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SearchDoc.svelte +147 -0
  197. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SettingsDoc.svelte +158 -0
  198. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SpinnerDoc.svelte +41 -0
  199. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TableDoc.svelte +116 -0
  200. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TabsDoc.svelte +152 -0
  201. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ThemeSwitcherDoc.svelte +181 -0
  202. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Theming.svelte +6 -0
  203. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ToastDoc.svelte +136 -0
  204. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TooltipDoc.svelte +57 -0
  205. package/scaffold/svelte-app/src/routes/+page.svelte +2 -2
  206. package/scaffold/svelte-app/src/routes/components/+page.svelte +4 -0
  207. package/scaffold/svelte-app/src/routes/components/[slug]/+page.svelte +7 -0
  208. package/scaffold/vanilla/README.md +11 -4
  209. package/scaffold/vanilla/components/accordion.html +193 -0
  210. package/scaffold/vanilla/components/alert.html +193 -0
  211. package/scaffold/vanilla/components/avatar.html +193 -0
  212. package/scaffold/vanilla/components/badge.html +193 -0
  213. package/scaffold/vanilla/components/breadcrumb.html +193 -0
  214. package/scaffold/vanilla/components/button.html +193 -0
  215. package/scaffold/vanilla/components/cards.html +193 -0
  216. package/scaffold/vanilla/components/copy-to-clipboard.html +193 -0
  217. package/scaffold/vanilla/components/divider.html +193 -0
  218. package/scaffold/vanilla/components/dropdown.html +193 -0
  219. package/scaffold/vanilla/components/forms.html +193 -0
  220. package/scaffold/vanilla/components/icons.html +193 -0
  221. package/scaffold/vanilla/components/index.html +218 -0
  222. package/scaffold/vanilla/components/modal.html +193 -0
  223. package/scaffold/vanilla/components/navbar.html +193 -0
  224. package/scaffold/vanilla/components/pagination.html +193 -0
  225. package/scaffold/vanilla/components/progress-bar.html +193 -0
  226. package/scaffold/vanilla/components/search.html +193 -0
  227. package/scaffold/vanilla/components/settings.html +193 -0
  228. package/scaffold/vanilla/components/spinner.html +193 -0
  229. package/scaffold/vanilla/components/table.html +193 -0
  230. package/scaffold/vanilla/components/tabs.html +193 -0
  231. package/scaffold/vanilla/components/theme-switcher.html +193 -0
  232. package/scaffold/vanilla/components/toast.html +193 -0
  233. package/scaffold/vanilla/components/tooltip.html +193 -0
  234. package/scaffold/vanilla/index.html +22 -6
  235. package/scaffold/vanilla/js/main.js +4 -3
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ width?: number;
4
+ height?: number;
5
+ class?: string;
6
+ }
7
+ let { width = 16, height = 16, class: className = '' }: Props = $props();
8
+ </script>
9
+ <svg
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ {width}
12
+ {height}
13
+ viewBox="0 0 128 128"
14
+ class={className}
15
+ aria-hidden="true"
16
+ >
17
+ <g fill="#61dafb">
18
+ <circle cx="64" cy="64" r="11.4"/>
19
+ <path d="M107.3 45.2c-2.2-.8-4.5-1.6-6.9-2.3c.6-2.4 1.1-4.8 1.5-7.1c2.1-13.2-.2-22.5-6.6-26.1c-1.9-1.1-4-1.6-6.4-1.6c-7 0-15.9 5.2-24.9 13.9c-9-8.7-17.9-13.9-24.9-13.9c-2.4 0-4.5.5-6.4 1.6c-6.4 3.7-8.7 13-6.6 26.1c.4 2.3.9 4.7 1.5 7.1c-2.4.7-4.7 1.4-6.9 2.3C8.2 50 1.4 56.6 1.4 64s6.9 14 19.3 18.8c2.2.8 4.5 1.6 6.9 2.3c-.6 2.4-1.1 4.8-1.5 7.1c-2.1 13.2.2 22.5 6.6 26.1c1.9 1.1 4 1.6 6.4 1.6c7.1 0 16-5.2 24.9-13.9c9 8.7 17.9 13.9 24.9 13.9c2.4 0 4.5-.5 6.4-1.6c6.4-3.7 8.7-13 6.6-26.1c-.4-2.3-.9-4.7-1.5-7.1c2.4-.7 4.7-1.4 6.9-2.3c12.5-4.8 19.3-11.4 19.3-18.8s-6.8-14-19.3-18.8M92.5 14.7c4.1 2.4 5.5 9.8 3.8 20.3c-.3 2.1-.8 4.3-1.4 6.6c-5.2-1.2-10.7-2-16.5-2.5c-3.4-4.8-6.9-9.1-10.4-13c7.4-7.3 14.9-12.3 21-12.3c1.3 0 2.5.3 3.5.9M81.3 74c-1.8 3.2-3.9 6.4-6.1 9.6c-3.7.3-7.4.4-11.2.4c-3.9 0-7.6-.1-11.2-.4q-3.3-4.8-6-9.6c-1.9-3.3-3.7-6.7-5.3-10c1.6-3.3 3.4-6.7 5.3-10c1.8-3.2 3.9-6.4 6.1-9.6c3.7-.3 7.4-.4 11.2-.4c3.9 0 7.6.1 11.2.4q3.3 4.8 6 9.6c1.9 3.3 3.7 6.7 5.3 10c-1.7 3.3-3.4 6.6-5.3 10m8.3-3.3c1.5 3.5 2.7 6.9 3.8 10.3c-3.4.8-7 1.4-10.8 1.9c1.2-1.9 2.5-3.9 3.6-6c1.2-2.1 2.3-4.2 3.4-6.2M64 97.8c-2.4-2.6-4.7-5.4-6.9-8.3c2.3.1 4.6.2 6.9.2s4.6-.1 6.9-.2c-2.2 2.9-4.5 5.7-6.9 8.3m-18.6-15c-3.8-.5-7.4-1.1-10.8-1.9c1.1-3.3 2.3-6.8 3.8-10.3c1.1 2 2.2 4.1 3.4 6.1c1.2 2.2 2.4 4.1 3.6 6.1m-7-25.5c-1.5-3.5-2.7-6.9-3.8-10.3c3.4-.8 7-1.4 10.8-1.9c-1.2 1.9-2.5 3.9-3.6 6c-1.2 2.1-2.3 4.2-3.4 6.2M64 30.2c2.4 2.6 4.7 5.4 6.9 8.3c-2.3-.1-4.6-.2-6.9-.2s-4.6.1-6.9.2c2.2-2.9 4.5-5.7 6.9-8.3m22.2 21l-3.6-6c3.8.5 7.4 1.1 10.8 1.9c-1.1 3.3-2.3 6.8-3.8 10.3c-1.1-2.1-2.2-4.2-3.4-6.2M31.7 35c-1.7-10.5-.3-17.9 3.8-20.3c1-.6 2.2-.9 3.5-.9c6 0 13.5 4.9 21 12.3c-3.5 3.8-7 8.2-10.4 13c-5.8.5-11.3 1.4-16.5 2.5c-.6-2.3-1-4.5-1.4-6.6M7 64c0-4.7 5.7-9.7 15.7-13.4c2-.8 4.2-1.5 6.4-2.1c1.6 5 3.6 10.3 6 15.6c-2.4 5.3-4.5 10.5-6 15.5C15.3 75.6 7 69.6 7 64m28.5 49.3c-4.1-2.4-5.5-9.8-3.8-20.3c.3-2.1.8-4.3 1.4-6.6c5.2 1.2 10.7 2 16.5 2.5c3.4 4.8 6.9 9.1 10.4 13c-7.4 7.3-14.9 12.3-21 12.3c-1.3 0-2.5-.3-3.5-.9M96.3 93c1.7 10.5.3 17.9-3.8 20.3c-1 .6-2.2.9-3.5.9c-6 0-13.5-4.9-21-12.3c3.5-3.8 7-8.2 10.4-13c5.8-.5 11.3-1.4 16.5-2.5c.6 2.3 1 4.5 1.4 6.6m9-15.6c-2 .8-4.2 1.5-6.4 2.1c-1.6-5-3.6-10.3-6-15.6c2.4-5.3 4.5-10.5 6-15.5c13.8 4 22.1 10 22.1 15.6c0 4.7-5.8 9.7-15.7 13.4"/>
20
+ </g>
21
+ </svg>
@@ -0,0 +1,19 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ width?: number;
4
+ height?: number;
5
+ class?: string;
6
+ }
7
+ let { width = 16, height = 16, class: className = '' }: Props = $props();
8
+ </script>
9
+ <svg
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ {width}
12
+ {height}
13
+ viewBox="0 0 128 128"
14
+ class={className}
15
+ aria-hidden="true"
16
+ >
17
+ <path fill="#ff3e00" d="M110.43 16.936C98.553-.076 75.09-5.118 58.13 5.696l-29.792 19a34.2 34.2 0 0 0-15.48 22.897a25.478 30.64 0 0 0-.572 6.396a36.15 36.15 0 0 0 4.163 16.73A34.4 34.4 0 0 0 11.34 83.5a25.348 30.483 0 0 0 .345 14.412a36.5 36.5 0 0 0 5.9 13.152c11.878 17.01 35.394 22.053 52.3 11.24l29.762-19.001a34.13 34.13 0 0 0 15.438-22.918a35.5 35.5 0 0 0 .572-6.386a36.2 36.2 0 0 0-4.112-16.71a34.4 34.4 0 0 0 5.112-12.77c.369-2.11.557-4.245.562-6.386a36.4 36.4 0 0 0-6.787-21.178z"/>
18
+ <path fill="#fff" d="M55.219 112.662a28.463 34.23 0 0 1-5.954.76a23.64 23.64 0 0 1-19.435-10.187a21.9 21.9 0 0 1-4.08-12.74a15.658 18.83 0 0 1 .333-3.833a15.425 18.55 0 0 1 .72-2.782l.561-1.708l1.52 1.156a38.7 38.7 0 0 0 11.658 5.834l1.104.333l-.104 1.104v.573a6.63 6.63 0 0 0 1.228 3.854a7.1 7.1 0 0 0 2.538 2.288a8.262 9.936 0 0 0 3.312.837a8.251 9.923 0 0 0 1.79-.229a7.272 8.745 0 0 0 1.833-.802l29.76-19.094a6.26 6.26 0 0 0 2.904-5.302a6.62 6.62 0 0 0-1.26-3.844a7.14 7.14 0 0 0-2.553-2.252a8.313 9.997 0 0 0-3.307-.81a8.246 9.917 0 0 0-1.79.23a6.938 8.344 0 0 0-1.822.801l-11.346 7.25a24.376 29.314 0 0 1-6.048 2.656a23.64 23.64 0 0 1-25.39-9.416a21.94 21.94 0 0 1-4.08-12.74c.002-1.285.114-2.567.333-3.833a20.65 20.65 0 0 1 9.286-13.781l29.792-18.99a21.9 21.9 0 0 1 6.048-2.667a24 24 0 0 1 5.954-.75A23.68 23.68 0 0 1 98.22 24.745a21.94 21.94 0 0 1 4.029 12.75a15.748 18.939 0 0 1-.334 3.844a15.407 18.529 0 0 1-.718 2.781l-.562 1.708l-1.52-1.114a38.4 38.4 0 0 0-11.658-5.834l-1.104-.343l.104-1.105v-.572a6.7 6.7 0 0 0-1.228-3.865a7.1 7.1 0 0 0-2.55-2.25a8.309 9.992 0 0 0-3.3-.813a8.221 9.887 0 0 0-1.77.271a6.819 8.2 0 0 0-1.831.802l-29.793 18.99a5.88 7.071 0 0 0-1.836 1.79a4.75 5.713 0 0 0-.963 2.377a5.037 6.057 0 0 0-.136 1.104a6.62 6.62 0 0 0 1.228 3.844a7.1 7.1 0 0 0 2.549 2.25a8.299 9.98 0 0 0 3.301.812a8.247 9.918 0 0 0 1.79-.23a6.943 8.35 0 0 0 1.833-.801l11.367-7.292a24.218 29.125 0 0 1 6.048-2.656a28.526 34.305 0 0 1 5.954-.76A23.66 23.66 0 0 1 96.566 60.61a21.94 21.94 0 0 1 3.737 16.614a20.6 20.6 0 0 1-9.286 13.781l-29.74 18.99a24.308 29.233 0 0 1-6.057 2.667z"/>
19
+ </svg>
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ width?: number;
4
+ height?: number;
5
+ class?: string;
6
+ }
7
+ let { width = 16, height = 16, class: className = '' }: Props = $props();
8
+ </script>
9
+ <svg
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ {width}
12
+ {height}
13
+ viewBox="0 0 128 128"
14
+ class={className}
15
+ aria-hidden="true"
16
+ >
17
+ <path fill="none" d="m0 8.934l49.854.158l14.167 24.47l14.432-24.47L128 8.935l-63.834 110.14zm126.98.637l-24.36.02l-38.476 66.053L25.691 9.592L.942 9.572l63.211 107.89zm-25.149-.008l-22.745.168l-15.053 24.647L49.216 9.73l-22.794-.168l37.731 64.476zm-75.834-.17l23.002.009m-23.002-.01l23.002.01"/>
18
+ <path fill="#35495e" d="m25.997 9.393l23.002.009L64.035 34.36L79.018 9.404L102 9.398L64.15 75.053z"/>
19
+ <path fill="#41b883" d="m.91 9.569l25.067-.172l38.15 65.659L101.98 9.401l25.11.026l-62.966 108.06z"/>
20
+ </svg>
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Svelte components — same BEM classes and design system as Astro.
3
+ * Import from this file or from individual components.
4
+ */
5
+ export { default as Button } from './Button.svelte';
6
+ export { default as Badge } from './Badge.svelte';
7
+ export { default as Card } from './Card.svelte';
8
+ export { default as Divider } from './Divider.svelte';
9
+ export { default as Spinner } from './Spinner.svelte';
10
+ export { default as ProgressBar } from './ProgressBar.svelte';
11
+ export { default as Avatar } from './Avatar.svelte';
12
+ export { default as Alert } from './Alert.svelte';
13
+ export { default as Breadcrumb } from './Breadcrumb.svelte';
14
+ export type { BreadcrumbItem } from './Breadcrumb.svelte';
15
+ export { default as FormGroup } from './FormGroup.svelte';
16
+ export { default as Input } from './Input.svelte';
17
+ export { default as Checkbox } from './Checkbox.svelte';
18
+ export { default as Textarea } from './Textarea.svelte';
19
+ export { default as Select } from './Select.svelte';
20
+ export { default as Radio } from './Radio.svelte';
21
+ export { default as CopyToClipboard } from './CopyToClipboard.svelte';
22
+ export { default as Tooltip } from './Tooltip.svelte';
23
+ export { default as Pagination } from './Pagination.svelte';
24
+ export { default as Tabs } from './Tabs.svelte';
25
+ export type { Tab } from './Tabs.svelte';
26
+ export { default as Accordion } from './Accordion.svelte';
27
+ export type { AccordionItem } from './Accordion.svelte';
28
+ export { default as Dropdown } from './Dropdown.svelte';
29
+ export type { MenuItem } from './Dropdown.svelte';
30
+ export { default as Modal } from './Modal.svelte';
31
+ export { default as Toast } from './Toast.svelte';
32
+ export { default as Table } from './Table.svelte';
33
+ export type { TableColumn } from './Table.svelte';
@@ -0,0 +1,239 @@
1
+ <script lang="ts">
2
+ import Copy from '$lib/rizzo/icons/Copy.svelte';
3
+ import Check from '$lib/rizzo/icons/Check.svelte';
4
+ import Css3 from '$lib/rizzo/icons/devicons/Css3.svelte';
5
+ import Html5 from '$lib/rizzo/icons/devicons/Html5.svelte';
6
+ import Javascript from '$lib/rizzo/icons/devicons/Javascript.svelte';
7
+ import Nodejs from '$lib/rizzo/icons/devicons/Nodejs.svelte';
8
+ import AstroIcon from '$lib/rizzo/icons/devicons/Astro.svelte';
9
+ import Plaintext from '$lib/rizzo/icons/devicons/Plaintext.svelte';
10
+ import Git from '$lib/rizzo/icons/devicons/Git.svelte';
11
+ import SvelteIcon from '$lib/rizzo/icons/devicons/SvelteIcon.svelte';
12
+ import React from '$lib/rizzo/icons/devicons/React.svelte';
13
+ import Vue from '$lib/rizzo/icons/devicons/Vue.svelte';
14
+ import Bash from '$lib/rizzo/icons/devicons/Bash.svelte';
15
+
16
+ interface Props {
17
+ code: string;
18
+ language?: string;
19
+ class?: string;
20
+ }
21
+ let { code, language = '', class: className = '' }: Props = $props();
22
+ let copied = $state(false);
23
+ const languageLabel = $derived(language || '');
24
+ const languageLower = $derived(language.toLowerCase());
25
+
26
+ async function copyCode() {
27
+ try {
28
+ await navigator.clipboard.writeText(code);
29
+ copied = true;
30
+ setTimeout(() => (copied = false), 2000);
31
+ } catch {
32
+ const ta = document.createElement('textarea');
33
+ ta.value = code;
34
+ ta.style.position = 'fixed';
35
+ ta.style.left = '-999999px';
36
+ document.body.appendChild(ta);
37
+ ta.focus();
38
+ ta.select();
39
+ try {
40
+ document.execCommand('copy');
41
+ copied = true;
42
+ setTimeout(() => (copied = false), 2000);
43
+ } finally {
44
+ document.body.removeChild(ta);
45
+ }
46
+ }
47
+ }
48
+
49
+ </script>
50
+
51
+ <div class={`code-block ${className}`.trim()}>
52
+ <div class="code-block__header">
53
+ {#if language}
54
+ <span class="code-block__language" aria-label={languageLabel}>
55
+ {#if languageLower === 'css'}
56
+ <span class="code-block__language-icon" aria-hidden="true">
57
+ <Css3 width={20} height={20} />
58
+ </span>
59
+ {:else if languageLower === 'html'}
60
+ <span class="code-block__language-icon" aria-hidden="true">
61
+ <Html5 width={20} height={20} />
62
+ </span>
63
+ {:else if languageLower === 'javascript'}
64
+ <span class="code-block__language-icon" aria-hidden="true">
65
+ <Javascript width={20} height={20} />
66
+ </span>
67
+ {:else if languageLower === 'nodejs'}
68
+ <span class="code-block__language-icon" aria-hidden="true">
69
+ <Nodejs width={20} height={20} />
70
+ </span>
71
+ {:else if languageLower === 'astro'}
72
+ <span class="code-block__language-icon" aria-hidden="true">
73
+ <AstroIcon width={20} height={20} />
74
+ </span>
75
+ {:else if languageLower === 'plaintext'}
76
+ <span class="code-block__language-icon" aria-hidden="true">
77
+ <Plaintext width={20} height={20} class="code-block__plaintext-icon" />
78
+ </span>
79
+ {:else if languageLower === 'git'}
80
+ <span class="code-block__language-icon" aria-hidden="true">
81
+ <Git width={20} height={20} />
82
+ </span>
83
+ {:else if languageLower === 'svelte'}
84
+ <span class="code-block__language-icon" aria-hidden="true">
85
+ <SvelteIcon width={20} height={20} />
86
+ </span>
87
+ {:else if languageLower === 'react' || languageLower === 'jsx' || languageLower === 'tsx'}
88
+ <span class="code-block__language-icon" aria-hidden="true">
89
+ <React width={20} height={20} />
90
+ </span>
91
+ {:else if languageLower === 'vue'}
92
+ <span class="code-block__language-icon" aria-hidden="true">
93
+ <Vue width={20} height={20} />
94
+ </span>
95
+ {:else if languageLower === 'bash' || languageLower === 'shell' || languageLower === 'sh'}
96
+ <span class="code-block__language-icon" aria-hidden="true">
97
+ <Bash width={20} height={20} class="code-block__bash-icon" />
98
+ </span>
99
+ {/if}
100
+ <span class="code-block__language-text">{language}</span>
101
+ <span class="sr-only">{languageLabel}</span>
102
+ </span>
103
+ {/if}
104
+ <span class="tooltip-host" data-tooltip={copied ? 'Copied!' : 'Copy code'}>
105
+ <button
106
+ type="button"
107
+ class="code-block__copy-btn"
108
+ aria-label={copied ? 'Copied!' : 'Copy code'}
109
+ onclick={copyCode}
110
+ >
111
+ {#if copied}
112
+ <span class="code-block__copy-icon code-block__copy-icon--check" aria-hidden="true">
113
+ <Check width={20} height={20} />
114
+ </span>
115
+ {:else}
116
+ <span class="code-block__copy-icon code-block__copy-icon--copy" aria-hidden="true">
117
+ <Copy width={20} height={20} />
118
+ </span>
119
+ {/if}
120
+ </button>
121
+ </span>
122
+ </div>
123
+ <pre><code>{code}</code></pre>
124
+ </div>
125
+
126
+ <style>
127
+ .code-block {
128
+ position: relative;
129
+ margin: var(--spacing-4) 0;
130
+ border-radius: var(--radius-lg);
131
+ overflow: visible;
132
+ background-color: var(--background-alt);
133
+ border: 1px solid var(--border);
134
+ }
135
+ .code-block__header {
136
+ display: flex;
137
+ align-items: center;
138
+ justify-content: space-between;
139
+ padding: var(--spacing-2) var(--spacing-3);
140
+ background-color: var(--background);
141
+ border-bottom: 1px solid var(--border);
142
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
143
+ overflow: visible;
144
+ position: relative;
145
+ z-index: 1;
146
+ }
147
+ .code-block__language {
148
+ display: flex;
149
+ align-items: center;
150
+ gap: var(--spacing-2);
151
+ font-size: var(--font-size-xs);
152
+ color: var(--text-dim);
153
+ text-transform: uppercase;
154
+ letter-spacing: var(--letter-spacing-wider);
155
+ font-weight: var(--font-weight-medium);
156
+ }
157
+ .code-block__language-icon {
158
+ display: block;
159
+ flex-shrink: 0;
160
+ width: var(--spacing-5);
161
+ height: var(--spacing-5);
162
+ color: var(--text-dim);
163
+ }
164
+ .code-block__language-icon svg {
165
+ width: 100%;
166
+ height: 100%;
167
+ display: block;
168
+ }
169
+ .code-block__plaintext-icon {
170
+ color: var(--text-dim);
171
+ }
172
+ .code-block__plaintext-icon :global(path) {
173
+ fill: currentColor;
174
+ }
175
+ .code-block__bash-icon {
176
+ color: var(--text-dim);
177
+ }
178
+ .code-block__bash-icon :global(.bash-icon__main) {
179
+ fill: currentColor;
180
+ }
181
+ .code-block__language-text {
182
+ display: none;
183
+ }
184
+ @media (width >= 768px) {
185
+ .code-block__language-text {
186
+ display: inline;
187
+ }
188
+ }
189
+ .code-block__copy-btn {
190
+ display: flex;
191
+ align-items: center;
192
+ justify-content: center;
193
+ padding: var(--spacing-2);
194
+ min-width: var(--spacing-8);
195
+ height: var(--spacing-8);
196
+ margin-left: auto;
197
+ background-color: var(--background-alt);
198
+ border: 1px solid var(--border);
199
+ border-radius: var(--radius-md);
200
+ color: var(--text);
201
+ cursor: pointer;
202
+ transition: background-color var(--transition-base), border-color var(--transition-base), color var(--transition-base);
203
+ }
204
+ .code-block__copy-btn:hover {
205
+ background-color: var(--background);
206
+ border-color: var(--accent);
207
+ color: var(--accent);
208
+ }
209
+ .code-block__copy-btn:focus-visible {
210
+ outline: var(--outline-width) solid var(--accent);
211
+ outline-offset: var(--outline-offset);
212
+ }
213
+ .code-block pre {
214
+ margin: 0;
215
+ padding: var(--spacing-4);
216
+ overflow-x: auto;
217
+ background-color: var(--background-alt);
218
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
219
+ }
220
+ .code-block code {
221
+ font-family: var(--font-family-mono);
222
+ font-size: var(--font-size-sm);
223
+ line-height: var(--line-height-relaxed);
224
+ color: var(--text);
225
+ white-space: pre;
226
+ word-wrap: normal;
227
+ }
228
+ .sr-only {
229
+ position: absolute;
230
+ width: 1px;
231
+ height: 1px;
232
+ padding: 0;
233
+ margin: -1px;
234
+ overflow: hidden;
235
+ clip: rect(0, 0, 0, 0);
236
+ white-space: nowrap;
237
+ border: 0;
238
+ }
239
+ </style>
@@ -0,0 +1,99 @@
1
+ <script lang="ts">
2
+ import Index from './pages/Index.svelte';
3
+ import ComponentsOverview from './pages/ComponentsOverview.svelte';
4
+ import ComingSoon from './pages/ComingSoon.svelte';
5
+ import ButtonDoc from './pages/ButtonDoc.svelte';
6
+ import BadgeDoc from './pages/BadgeDoc.svelte';
7
+ import CardsDoc from './pages/CardsDoc.svelte';
8
+ import DividerDoc from './pages/DividerDoc.svelte';
9
+ import SpinnerDoc from './pages/SpinnerDoc.svelte';
10
+ import ProgressBarDoc from './pages/ProgressBarDoc.svelte';
11
+ import AvatarDoc from './pages/AvatarDoc.svelte';
12
+ import AlertDoc from './pages/AlertDoc.svelte';
13
+ import BreadcrumbDoc from './pages/BreadcrumbDoc.svelte';
14
+ import FormsDoc from './pages/FormsDoc.svelte';
15
+ import CopyToClipboardDoc from './pages/CopyToClipboardDoc.svelte';
16
+ import TooltipDoc from './pages/TooltipDoc.svelte';
17
+ import PaginationDoc from './pages/PaginationDoc.svelte';
18
+ import TabsDoc from './pages/TabsDoc.svelte';
19
+ import AccordionDoc from './pages/AccordionDoc.svelte';
20
+ import DropdownDoc from './pages/DropdownDoc.svelte';
21
+ import ModalDoc from './pages/ModalDoc.svelte';
22
+ import ToastDoc from './pages/ToastDoc.svelte';
23
+ import TableDoc from './pages/TableDoc.svelte';
24
+ import IconsDoc from './pages/IconsDoc.svelte';
25
+ import NavbarDoc from './pages/NavbarDoc.svelte';
26
+ import SearchDoc from './pages/SearchDoc.svelte';
27
+ import SettingsDoc from './pages/SettingsDoc.svelte';
28
+ import ThemeSwitcherDoc from './pages/ThemeSwitcherDoc.svelte';
29
+
30
+ interface Props {
31
+ /** Slug from URL (e.g. "components/badge"). Pass string so SSR and client hydrate the same. */
32
+ slug?: string | undefined;
33
+ }
34
+ let { slug }: Props = $props();
35
+
36
+ const path = $derived(
37
+ typeof slug === 'string' && slug !== '' ? slug.split('/').filter(Boolean) : []
38
+ );
39
+ const first = $derived(path[0] ?? '');
40
+ const second = $derived(path[1] ?? '');
41
+ </script>
42
+
43
+ <div class="svelte-doc-page-root">
44
+ {#if path.length === 0 || (path.length === 1 && first === '')}
45
+ <Index />
46
+ {:else if first === 'components' && !second}
47
+ <ComponentsOverview />
48
+ {:else if first === 'components' && second === 'button'}
49
+ <ButtonDoc />
50
+ {:else if first === 'components' && second === 'badge'}
51
+ <BadgeDoc />
52
+ {:else if first === 'components' && second === 'cards'}
53
+ <CardsDoc />
54
+ {:else if first === 'components' && second === 'divider'}
55
+ <DividerDoc />
56
+ {:else if first === 'components' && second === 'spinner'}
57
+ <SpinnerDoc />
58
+ {:else if first === 'components' && second === 'progress-bar'}
59
+ <ProgressBarDoc />
60
+ {:else if first === 'components' && second === 'avatar'}
61
+ <AvatarDoc />
62
+ {:else if first === 'components' && second === 'alert'}
63
+ <AlertDoc />
64
+ {:else if first === 'components' && second === 'breadcrumb'}
65
+ <BreadcrumbDoc />
66
+ {:else if first === 'components' && second === 'forms'}
67
+ <FormsDoc />
68
+ {:else if first === 'components' && second === 'copy-to-clipboard'}
69
+ <CopyToClipboardDoc />
70
+ {:else if first === 'components' && second === 'tooltip'}
71
+ <TooltipDoc />
72
+ {:else if first === 'components' && second === 'pagination'}
73
+ <PaginationDoc />
74
+ {:else if first === 'components' && second === 'tabs'}
75
+ <TabsDoc />
76
+ {:else if first === 'components' && second === 'accordion'}
77
+ <AccordionDoc />
78
+ {:else if first === 'components' && second === 'dropdown'}
79
+ <DropdownDoc />
80
+ {:else if first === 'components' && second === 'modal'}
81
+ <ModalDoc />
82
+ {:else if first === 'components' && second === 'toast'}
83
+ <ToastDoc />
84
+ {:else if first === 'components' && second === 'table'}
85
+ <TableDoc />
86
+ {:else if first === 'components' && second === 'icons'}
87
+ <IconsDoc />
88
+ {:else if first === 'components' && second === 'navbar'}
89
+ <NavbarDoc />
90
+ {:else if first === 'components' && second === 'search'}
91
+ <SearchDoc />
92
+ {:else if first === 'components' && second === 'settings'}
93
+ <SettingsDoc />
94
+ {:else if first === 'components' && second === 'theme-switcher'}
95
+ <ThemeSwitcherDoc />
96
+ {:else}
97
+ <ComingSoon title={second ? second.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase()) : first} />
98
+ {/if}
99
+ </div>
@@ -0,0 +1,53 @@
1
+ <script lang="ts">
2
+ import Accordion from '$lib/rizzo/Accordion.svelte';
3
+ import CodeBlock from '$lib/rizzo-docs/CodeBlock.svelte';
4
+
5
+ const items = [
6
+ { id: 'one', title: 'Section one', content: '<p>Content for section one.</p>' },
7
+ { id: 'two', title: 'Section two', content: '<p>Content for section two.</p>' },
8
+ { id: 'three', title: 'Section three', content: '<p>Content for section three.</p>' },
9
+ ];
10
+ </script>
11
+
12
+ <section>
13
+ <h2>Accordion component</h2>
14
+ <p>Expandable panels with single or multiple open. Keyboard (Arrow keys, Home, End, Enter/Space) and ARIA.</p>
15
+
16
+ <h3>Props</h3>
17
+ <ul>
18
+ <li><code>items</code> (array, required) — Objects with <code>id</code>, <code>title</code>, optional <code>content</code> (HTML string)</li>
19
+ <li><code>id</code> (string, optional) — Unique accordion id</li>
20
+ <li><code>allowMultiple</code> (boolean, optional) — Allow multiple panels open (default: false)</li>
21
+ <li><code>defaultExpanded</code> (string | string[], optional) — ID(s) to expand by default</li>
22
+ <li><code>class</code> (string, optional) — Additional CSS classes</li>
23
+ </ul>
24
+
25
+ <h3>Single open (default)</h3>
26
+ <div class="example">
27
+ <div class="example-title">Live example</div>
28
+ <Accordion {items} defaultExpanded="one" />
29
+ </div>
30
+
31
+ <h3>Allow multiple</h3>
32
+ <div class="example">
33
+ <div class="example-title">Live example</div>
34
+ <Accordion {items} allowMultiple defaultExpanded={['one', 'two']} />
35
+ </div>
36
+
37
+ <h3>Usage</h3>
38
+ <CodeBlock
39
+ code={`<script>
40
+ import Accordion from './components/svelte/Accordion.svelte';
41
+ </script>
42
+
43
+ <Accordion
44
+ items={[
45
+ { id: 'a', title: 'Panel A', content: '<p>Content A.</p>' },
46
+ { id: 'b', title: 'Panel B', content: '<p>Content B.</p>' },
47
+ ]}
48
+ defaultExpanded="a"
49
+ />
50
+ <Accordion items={items} allowMultiple />`}
51
+ language="svelte"
52
+ />
53
+ </section>
@@ -0,0 +1,114 @@
1
+ <script lang="ts">
2
+ import Alert from '$lib/rizzo/Alert.svelte';
3
+ import CodeBlock from '$lib/rizzo-docs/CodeBlock.svelte';
4
+
5
+ type AlertItem = { id: string; variant: 'success' | 'error' | 'warning' | 'info'; message: string; dismissible: boolean; autoDismiss?: number };
6
+ let liveAlerts = $state<AlertItem[]>([]);
7
+ let autoDismissAlerts = $state<AlertItem[]>([]);
8
+
9
+ function showAlert(variant: AlertItem['variant'], message: string, dismissible = true, autoDismiss = 0, target: 'live' | 'auto' = 'live') {
10
+ const item: AlertItem = {
11
+ id: crypto.randomUUID(),
12
+ variant,
13
+ message,
14
+ dismissible,
15
+ ...(autoDismiss > 0 ? { autoDismiss } : {}),
16
+ };
17
+ if (target === 'auto') autoDismissAlerts = [...autoDismissAlerts, item];
18
+ else liveAlerts = [...liveAlerts, item];
19
+ }
20
+
21
+ function removeLive(id: string) {
22
+ liveAlerts = liveAlerts.filter((a) => a.id !== id);
23
+ }
24
+ function removeAutoDismiss(id: string) {
25
+ autoDismissAlerts = autoDismissAlerts.filter((a) => a.id !== id);
26
+ }
27
+
28
+ const msgAuto3 = 'This alert will auto-dismiss in 3 seconds';
29
+ const msgAuto5 = 'This alert will auto-dismiss in 5 seconds';
30
+ const msgAuto7 = 'This alert will auto-dismiss in 7 seconds';
31
+ </script>
32
+
33
+ <section>
34
+ <h2>Alert component</h2>
35
+ <p>Variants: success, error, warning, info. Optional dismissible and auto-dismiss.</p>
36
+
37
+ <h3>Variants (show on click)</h3>
38
+ <p>Click the buttons below to see each variant in action:</p>
39
+ <div class="example">
40
+ <div class="example-title">Live examples</div>
41
+ <div class="example-buttons">
42
+ <button type="button" class="btn btn-success" onclick={() => showAlert('success', 'Success! Your changes have been saved successfully.')}>Show Success Alert</button>
43
+ <button type="button" class="btn btn-error" onclick={() => showAlert('error', 'Error! Something went wrong. Please try again.')}>Show Error Alert</button>
44
+ <button type="button" class="btn btn-warning" onclick={() => showAlert('warning', 'Warning! This action cannot be undone.')}>Show Warning Alert</button>
45
+ <button type="button" class="btn btn-info" onclick={() => showAlert('info', 'Info: New features are available in the latest update.')}>Show Info Alert</button>
46
+ </div>
47
+ <div class="example-stack example-alert-container">
48
+ {#each liveAlerts as item (item.id)}
49
+ <Alert variant={item.variant} dismissible={item.dismissible} autoDismiss={item.autoDismiss} onDismiss={() => removeLive(item.id)}>
50
+ {item.message}
51
+ </Alert>
52
+ {/each}
53
+ </div>
54
+ </div>
55
+
56
+ <h3>Auto-dismiss</h3>
57
+ <p>Alerts can automatically dismiss after a set duration:</p>
58
+ <div class="example">
59
+ <div class="example-title">Auto-dismiss examples</div>
60
+ <div class="example-buttons">
61
+ <button type="button" class="btn btn-primary" onclick={() => showAlert('success', msgAuto3, true, 3000, 'auto')}>3 second</button>
62
+ <button type="button" class="btn btn-primary" onclick={() => showAlert('info', msgAuto5, true, 5000, 'auto')}>5 second</button>
63
+ <button type="button" class="btn btn-primary" onclick={() => showAlert('warning', msgAuto7, true, 7000, 'auto')}>7 second</button>
64
+ </div>
65
+ <div class="example-stack example-alert-container">
66
+ {#each autoDismissAlerts as item (item.id)}
67
+ <Alert variant={item.variant} dismissible={item.dismissible} autoDismiss={item.autoDismiss} onDismiss={() => removeAutoDismiss(item.id)}>
68
+ {item.message}
69
+ </Alert>
70
+ {/each}
71
+ </div>
72
+ </div>
73
+
74
+ <h3>Static examples</h3>
75
+ <div class="example">
76
+ <div class="example-title">Inline alerts</div>
77
+ <div class="example-stack">
78
+ <Alert variant="success">Success message.</Alert>
79
+ <Alert variant="error">Error message.</Alert>
80
+ <Alert variant="warning">Warning message.</Alert>
81
+ <Alert variant="info" dismissible>Dismissible info alert.</Alert>
82
+ </div>
83
+ </div>
84
+
85
+ <h3>Usage</h3>
86
+ <CodeBlock
87
+ code={`<script>
88
+ import Alert from './components/svelte/Alert.svelte';
89
+ </script>
90
+
91
+ <Alert variant="success">Saved.</Alert>
92
+ <Alert variant="error" dismissible>Something went wrong.</Alert>
93
+ <Alert variant="info" autoDismiss={5000}>Auto-dismiss in 5s.</Alert>`}
94
+ language="svelte"
95
+ />
96
+ </section>
97
+
98
+ <style>
99
+ .example-stack {
100
+ display: flex;
101
+ flex-direction: column;
102
+ gap: var(--spacing-3);
103
+ }
104
+ .example-buttons {
105
+ display: flex;
106
+ flex-wrap: wrap;
107
+ gap: var(--spacing-3);
108
+ margin-bottom: var(--spacing-4);
109
+ }
110
+ .example-alert-container {
111
+ min-height: 1px;
112
+ margin-top: var(--spacing-4);
113
+ }
114
+ </style>