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,161 @@
1
+ <script lang="ts">
2
+ import Dropdown from '$lib/rizzo/Dropdown.svelte';
3
+ import CodeBlock from '$lib/rizzo-docs/CodeBlock.svelte';
4
+
5
+ const basicItems = [
6
+ { label: 'Edit', value: 'edit', onClick: (v) => console.log('Action:', v) },
7
+ { label: 'Delete', value: 'delete', onClick: (v) => console.log('Action:', v) },
8
+ { separator: true },
9
+ { label: 'Settings', href: '/settings' },
10
+ ];
11
+
12
+ const linkItems = [
13
+ { label: 'Home', href: '/' },
14
+ { label: 'Documentation', href: '/docs' },
15
+ { label: 'Components', href: '/docs/components' },
16
+ { separator: true },
17
+ { label: 'GitHub', href: 'https://github.com' },
18
+ ];
19
+
20
+ const disabledItems = [
21
+ { label: 'Available Option', value: 'available' },
22
+ { label: 'Disabled Option', value: 'disabled', disabled: true },
23
+ { separator: true },
24
+ { label: 'Another Option', value: 'another' },
25
+ ];
26
+
27
+ const submenuItems = [
28
+ {
29
+ label: 'Edit',
30
+ submenu: [
31
+ { label: 'Cut', value: 'cut', onClick: (v) => console.log('Submenu:', v) },
32
+ { label: 'Copy', value: 'copy', onClick: (v) => console.log('Submenu:', v) },
33
+ { label: 'Paste', value: 'paste', onClick: (v) => console.log('Submenu:', v) },
34
+ { separator: true },
35
+ {
36
+ label: 'Advanced',
37
+ submenu: [
38
+ { label: 'Find & Replace', value: 'find-replace', onClick: (v) => console.log('Submenu:', v) },
39
+ { label: 'Go to Line', value: 'go-to-line', onClick: (v) => console.log('Submenu:', v) },
40
+ { label: 'Format Document', value: 'format', onClick: (v) => console.log('Submenu:', v) },
41
+ ],
42
+ },
43
+ ],
44
+ },
45
+ {
46
+ label: 'View',
47
+ submenu: [
48
+ { label: 'Zoom In', value: 'zoom-in', onClick: (v) => console.log('Submenu:', v) },
49
+ { label: 'Zoom Out', value: 'zoom-out', onClick: (v) => console.log('Submenu:', v) },
50
+ { label: 'Reset Zoom', value: 'reset-zoom', onClick: (v) => console.log('Submenu:', v) },
51
+ ],
52
+ },
53
+ { separator: true },
54
+ { label: 'Help', href: '/docs' },
55
+ { label: 'Settings', href: '/docs/components/settings' },
56
+ ];
57
+
58
+ const positionItems = [
59
+ { label: 'Item 1', value: '1' },
60
+ { label: 'Item 2', value: '2' },
61
+ { label: 'Item 3', value: '3' },
62
+ ];
63
+ </script>
64
+
65
+ <section>
66
+ <h2>Dropdown component</h2>
67
+ <p>An accessible dropdown menu component for displaying lists of actions or options. Supports menu items, separators, links, submenus, and click handlers. Matches the <a href="/docs/components/dropdown">Astro dropdown</a> in look and behavior.</p>
68
+
69
+ <h3>Basic usage</h3>
70
+ <div class="example">
71
+ <h4 class="example-title">Live example</h4>
72
+ <Dropdown trigger="Actions" items={basicItems} />
73
+ </div>
74
+
75
+ <h3>With links</h3>
76
+ <div class="example">
77
+ <h4 class="example-title">Live example</h4>
78
+ <Dropdown trigger="Navigate" items={linkItems} />
79
+ </div>
80
+
81
+ <h3>With disabled items</h3>
82
+ <div class="example">
83
+ <h4 class="example-title">Live example</h4>
84
+ <Dropdown trigger="Options" items={disabledItems} />
85
+ </div>
86
+
87
+ <h3>Nested submenus</h3>
88
+ <div class="example">
89
+ <h4 class="example-title">Live example</h4>
90
+ <Dropdown trigger="Actions" items={submenuItems} />
91
+ </div>
92
+
93
+ <h3>Menu positioning</h3>
94
+ <div class="example">
95
+ <h4 class="example-title">Live examples</h4>
96
+ <div class="example-row">
97
+ <div>
98
+ <p class="example-label">Left</p>
99
+ <Dropdown trigger="Left position" position="left" items={positionItems} />
100
+ </div>
101
+ <div class="example-right">
102
+ <p class="example-label">Right</p>
103
+ <Dropdown trigger="Right position" position="right" items={positionItems} />
104
+ </div>
105
+ </div>
106
+ </div>
107
+
108
+ <h3>Usage</h3>
109
+ <CodeBlock
110
+ code={`<script>
111
+ import Dropdown from './components/svelte/Dropdown.svelte';
112
+ </script>
113
+
114
+ <Dropdown
115
+ trigger="Options"
116
+ items={[
117
+ { label: 'Save', onClick: (v) => save(v) },
118
+ { label: 'Docs', href: '/docs' },
119
+ { separator: true },
120
+ { label: 'More', submenu: [{ label: 'A', value: 'a' }, { label: 'B', value: 'b' }] },
121
+ ]}
122
+ />`}
123
+ language="svelte"
124
+ />
125
+ </section>
126
+
127
+ <style>
128
+ .example {
129
+ margin: var(--spacing-6) 0;
130
+ padding: var(--spacing-4);
131
+ background: var(--background-alt);
132
+ border: 1px solid var(--border);
133
+ border-radius: var(--radius-lg);
134
+ }
135
+ .example-title {
136
+ font-size: var(--font-size-sm);
137
+ font-weight: var(--font-weight-medium);
138
+ color: var(--text-dim);
139
+ margin-bottom: var(--spacing-3);
140
+ text-transform: uppercase;
141
+ letter-spacing: var(--letter-spacing-wider);
142
+ }
143
+ .example-row {
144
+ display: flex;
145
+ justify-content: space-between;
146
+ align-items: flex-start;
147
+ gap: var(--spacing-4);
148
+ flex-wrap: wrap;
149
+ }
150
+ .example-label {
151
+ margin: 0 0 var(--spacing-2) 0;
152
+ font-size: var(--font-size-sm);
153
+ color: var(--text-dim);
154
+ }
155
+ .example-right {
156
+ margin-left: auto;
157
+ }
158
+ .example-right .example-label {
159
+ text-align: right;
160
+ }
161
+ </style>
@@ -0,0 +1,375 @@
1
+ <script lang="ts">
2
+ import FormGroup from '$lib/rizzo/FormGroup.svelte';
3
+ import Input from '$lib/rizzo/Input.svelte';
4
+ import Checkbox from '$lib/rizzo/Checkbox.svelte';
5
+ import Textarea from '$lib/rizzo/Textarea.svelte';
6
+ import Select from '$lib/rizzo/Select.svelte';
7
+ import Radio from '$lib/rizzo/Radio.svelte';
8
+ import CodeBlock from '$lib/rizzo-docs/CodeBlock.svelte';
9
+
10
+ let paymentMethod = $state('card');
11
+ </script>
12
+
13
+ <section>
14
+ <h2>Form Components</h2>
15
+ <p>Rizzo CSS includes a comprehensive set of accessible form components built with semantic HTML and ARIA attributes. All form components use theme variables and support validation states.</p>
16
+ </section>
17
+
18
+ <section>
19
+ <h2>FormGroup</h2>
20
+ <p>The <code>FormGroup</code> component provides a wrapper for form fields with labels, help text, and error/success messages.</p>
21
+
22
+ <h3>Props</h3>
23
+ <ul>
24
+ <li><code>label</code> (string, optional) - Label text</li>
25
+ <li><code>labelFor</code> (string, optional) - ID of the input element</li>
26
+ <li><code>required</code> (boolean, optional) - Shows required indicator</li>
27
+ <li><code>help</code> (string, optional) - Help text displayed below input</li>
28
+ <li><code>error</code> (string, optional) - Error message</li>
29
+ <li><code>success</code> (string, optional) - Success message</li>
30
+ <li><code>class</code> (string, optional) - Additional CSS classes</li>
31
+ </ul>
32
+
33
+ <div class="example">
34
+ <div class="example-title">Live Example</div>
35
+ <FormGroup label="Email Address" labelFor="email-example" required help="We'll never share your email">
36
+ <Input type="email" id="email-example" name="email" placeholder="you@example.com" />
37
+ </FormGroup>
38
+ </div>
39
+
40
+ <h3>Code Example</h3>
41
+ <CodeBlock
42
+ code={`<script>
43
+ import FormGroup from './components/svelte/FormGroup.svelte';
44
+ import Input from './components/svelte/Input.svelte';
45
+ </script>
46
+
47
+ <FormGroup label="Email Address" labelFor="email" required help="We'll never share your email">
48
+ <Input id="email" type="email" name="email" placeholder="you@example.com" />
49
+ </FormGroup>`}
50
+ language="svelte"
51
+ />
52
+ </section>
53
+
54
+ <section>
55
+ <h2>Input</h2>
56
+ <p>The <code>Input</code> component supports various input types with validation states and sizes.</p>
57
+
58
+ <h3>Props</h3>
59
+ <ul>
60
+ <li><code>type</code> (string, optional) - Input type (text, email, password, number, tel, url, search, date, time, datetime-local, month, week)</li>
61
+ <li><code>id</code>, <code>name</code>, <code>value</code>, <code>placeholder</code>, <code>required</code>, <code>disabled</code>, <code>readonly</code></li>
62
+ <li><code>size</code> ('sm' | 'md' | 'lg', optional) - Input size (default: 'md')</li>
63
+ <li><code>error</code> (boolean, optional) - Error state</li>
64
+ <li><code>success</code> (boolean, optional) - Success state</li>
65
+ </ul>
66
+
67
+ <h3>Input Types</h3>
68
+ <div class="example">
69
+ <div class="example-title">Live Examples</div>
70
+ <FormGroup label="Text Input" labelFor="text-input">
71
+ <Input type="text" id="text-input" name="text" placeholder="Enter text" />
72
+ </FormGroup>
73
+ <FormGroup label="Email Input" labelFor="email-input">
74
+ <Input type="email" id="email-input" name="email" placeholder="you@example.com" />
75
+ </FormGroup>
76
+ <FormGroup label="Password Input" labelFor="password-input">
77
+ <Input type="password" id="password-input" name="password" placeholder="Enter password" />
78
+ </FormGroup>
79
+ <FormGroup label="Number Input" labelFor="number-input">
80
+ <Input type="number" id="number-input" name="number" placeholder="Enter number" />
81
+ </FormGroup>
82
+ </div>
83
+
84
+ <h3>Input Sizes</h3>
85
+ <div class="example">
86
+ <div class="example-title">Live Examples</div>
87
+ <FormGroup label="Small Input" labelFor="input-sm">
88
+ <Input type="text" id="input-sm" name="input-sm" size="sm" placeholder="Small input" />
89
+ </FormGroup>
90
+ <FormGroup label="Medium Input (default)" labelFor="input-md">
91
+ <Input type="text" id="input-md" name="input-md" size="md" placeholder="Medium input" />
92
+ </FormGroup>
93
+ <FormGroup label="Large Input" labelFor="input-lg">
94
+ <Input type="text" id="input-lg" name="input-lg" size="lg" placeholder="Large input" />
95
+ </FormGroup>
96
+ </div>
97
+
98
+ <h3>Validation States</h3>
99
+ <div class="example">
100
+ <div class="example-title">Live Examples</div>
101
+ <FormGroup label="Error State" labelFor="input-error" error="This field is required">
102
+ <Input type="text" id="input-error" name="input-error" error placeholder="Enter text" />
103
+ </FormGroup>
104
+ <FormGroup label="Success State" labelFor="input-success" success="Looks good!">
105
+ <Input type="text" id="input-success" name="input-success" success value="Valid input" />
106
+ </FormGroup>
107
+ </div>
108
+
109
+ <h3>Code Example</h3>
110
+ <CodeBlock
111
+ code={`<FormGroup label="Email" labelFor="email" required>
112
+ <Input id="email" type="email" name="email" placeholder="you@example.com" />
113
+ </FormGroup>
114
+
115
+ <!-- With error state -->
116
+ <FormGroup label="Email" labelFor="email-error" error="Invalid email address">
117
+ <Input id="email-error" type="email" name="email" error />
118
+ </FormGroup>`}
119
+ language="svelte"
120
+ />
121
+ </section>
122
+
123
+ <section>
124
+ <h2>Textarea</h2>
125
+ <p>The <code>Textarea</code> component for multi-line text input.</p>
126
+
127
+ <h3>Props</h3>
128
+ <ul>
129
+ <li><code>id</code>, <code>name</code>, <code>value</code>, <code>placeholder</code>, <code>required</code>, <code>disabled</code>, <code>readonly</code></li>
130
+ <li><code>rows</code> (number, optional) - Number of rows (default: 4)</li>
131
+ <li><code>cols</code> (number, optional) - Number of columns</li>
132
+ <li><code>size</code>, <code>error</code>, <code>success</code> - Same as Input</li>
133
+ </ul>
134
+
135
+ <div class="example">
136
+ <div class="example-title">Live Example</div>
137
+ <FormGroup label="Message" labelFor="textarea-example" help="Enter your message here">
138
+ <Textarea id="textarea-example" name="message" rows={5} placeholder="Your message..." />
139
+ </FormGroup>
140
+ </div>
141
+
142
+ <h3>Code Example</h3>
143
+ <CodeBlock
144
+ code={`<FormGroup label="Message" labelFor="message" help="Enter your message here">
145
+ <Textarea id="message" name="message" rows={5} placeholder="Your message..." />
146
+ </FormGroup>`}
147
+ language="svelte"
148
+ />
149
+ </section>
150
+
151
+ <section>
152
+ <h2>Select</h2>
153
+ <p>The <code>Select</code> component for dropdown selections.</p>
154
+
155
+ <h3>Props</h3>
156
+ <ul>
157
+ <li><code>id</code>, <code>name</code>, <code>value</code>, <code>required</code>, <code>disabled</code></li>
158
+ <li><code>size</code>, <code>error</code>, <code>success</code> - Same as Input</li>
159
+ </ul>
160
+
161
+ <div class="example">
162
+ <div class="example-title">Live Example</div>
163
+ <FormGroup label="Country" labelFor="select-example" required>
164
+ <Select id="select-example" name="country">
165
+ <option value="">Select a country</option>
166
+ <option value="us">United States</option>
167
+ <option value="ca">Canada</option>
168
+ <option value="uk">United Kingdom</option>
169
+ <option value="au">Australia</option>
170
+ </Select>
171
+ </FormGroup>
172
+ </div>
173
+
174
+ <h3>Code Example</h3>
175
+ <CodeBlock
176
+ code={`<FormGroup label="Country" labelFor="country" required>
177
+ <Select id="country" name="country">
178
+ <option value="">Select a country</option>
179
+ <option value="us">United States</option>
180
+ <option value="ca">Canada</option>
181
+ <option value="uk">United Kingdom</option>
182
+ </Select>
183
+ </FormGroup>`}
184
+ language="svelte"
185
+ />
186
+ </section>
187
+
188
+ <section>
189
+ <h2>Checkbox</h2>
190
+ <p>The <code>Checkbox</code> component for single or multiple selections.</p>
191
+
192
+ <h3>Props</h3>
193
+ <ul>
194
+ <li><code>id</code>, <code>name</code>, <code>value</code>, <code>checked</code>, <code>required</code>, <code>disabled</code></li>
195
+ <li><code>ariaLabel</code> (string, optional) - Accessible label</li>
196
+ <li><code>ariaDescribedby</code> (string, optional) - ID of element that describes this checkbox</li>
197
+ </ul>
198
+
199
+ <div class="example">
200
+ <div class="example-title">Live Examples</div>
201
+ <FormGroup label="Preferences">
202
+ <div class="checkbox-group">
203
+ <label class="checkbox-label">
204
+ <Checkbox id="newsletter" name="preferences" value="newsletter" />
205
+ Subscribe to newsletter
206
+ </label>
207
+ <label class="checkbox-label">
208
+ <Checkbox id="updates" name="preferences" value="updates" />
209
+ Receive product updates
210
+ </label>
211
+ <label class="checkbox-label">
212
+ <Checkbox id="marketing" name="preferences" value="marketing" />
213
+ Marketing communications
214
+ </label>
215
+ </div>
216
+ </FormGroup>
217
+ </div>
218
+
219
+ <h3>Code Example</h3>
220
+ <CodeBlock
221
+ code={`<label class="checkbox-label">
222
+ <Checkbox id="newsletter" name="preferences" value="newsletter" />
223
+ Subscribe to newsletter
224
+ </label>
225
+
226
+ <!-- Checkbox Group -->
227
+ <div class="checkbox-group">
228
+ <label class="checkbox-label">
229
+ <Checkbox id="opt1" name="options" value="1" />
230
+ Option 1
231
+ </label>
232
+ <label class="checkbox-label">
233
+ <Checkbox id="opt2" name="options" value="2" />
234
+ Option 2
235
+ </label>
236
+ </div>`}
237
+ language="svelte"
238
+ />
239
+ </section>
240
+
241
+ <section>
242
+ <h2>Radio</h2>
243
+ <p>The <code>Radio</code> component for single selection from multiple options.</p>
244
+
245
+ <h3>Props</h3>
246
+ <ul>
247
+ <li><code>id</code>, <code>name</code>, <code>value</code>, <code>checked</code>, <code>required</code>, <code>disabled</code></li>
248
+ <li><code>group</code> (bindable, optional) - Bound value for the selected option (use same bound variable for all radios in the group)</li>
249
+ <li><code>ariaLabel</code>, <code>ariaDescribedby</code> - Same as Checkbox</li>
250
+ </ul>
251
+
252
+ <div class="example">
253
+ <div class="example-title">Live Example</div>
254
+ <FormGroup label="Payment Method" required>
255
+ <div class="radio-group">
256
+ <label class="radio-label">
257
+ <Radio name="payment" id="payment-card" value="card" bind:group={paymentMethod} />
258
+ Credit Card
259
+ </label>
260
+ <label class="radio-label">
261
+ <Radio name="payment" id="payment-paypal" value="paypal" bind:group={paymentMethod} />
262
+ PayPal
263
+ </label>
264
+ <label class="radio-label">
265
+ <Radio name="payment" id="payment-bank" value="bank" bind:group={paymentMethod} />
266
+ Bank Transfer
267
+ </label>
268
+ </div>
269
+ </FormGroup>
270
+ </div>
271
+
272
+ <h3>Code Example</h3>
273
+ <CodeBlock
274
+ code={`<script>
275
+ let payment = $state('card');
276
+ </script>
277
+
278
+ <div class="radio-group">
279
+ <label class="radio-label">
280
+ <Radio name="payment" id="payment-card" value="card" bind:group={payment} />
281
+ Credit Card
282
+ </label>
283
+ <label class="radio-label">
284
+ <Radio name="payment" id="payment-paypal" value="paypal" bind:group={payment} />
285
+ PayPal
286
+ </label>
287
+ </div>`}
288
+ language="svelte"
289
+ />
290
+ </section>
291
+
292
+ <section>
293
+ <h2>Complete Form Example</h2>
294
+ <div class="example">
295
+ <div class="example-title">Live Example</div>
296
+ <form style="max-width: 600px;">
297
+ <FormGroup label="Full Name" labelFor="form-name" required>
298
+ <Input type="text" id="form-name" name="name" placeholder="John Doe" required />
299
+ </FormGroup>
300
+
301
+ <FormGroup label="Email Address" labelFor="form-email" required help="We'll never share your email">
302
+ <Input type="email" id="form-email" name="email" placeholder="you@example.com" required />
303
+ </FormGroup>
304
+
305
+ <FormGroup label="Country" labelFor="form-country" required>
306
+ <Select id="form-country" name="country" required>
307
+ <option value="">Select a country</option>
308
+ <option value="us">United States</option>
309
+ <option value="ca">Canada</option>
310
+ <option value="uk">United Kingdom</option>
311
+ </Select>
312
+ </FormGroup>
313
+
314
+ <FormGroup label="Message" labelFor="form-message">
315
+ <Textarea id="form-message" name="message" rows={4} placeholder="Your message..." />
316
+ </FormGroup>
317
+
318
+ <FormGroup>
319
+ <label class="checkbox-label">
320
+ <Checkbox id="form-consent" name="consent" value="yes" required />
321
+ I agree to the terms and conditions
322
+ </label>
323
+ </FormGroup>
324
+
325
+ <button type="submit" class="btn btn-primary">Submit</button>
326
+ </form>
327
+ </div>
328
+ </section>
329
+
330
+ <section>
331
+ <h2>Accessibility</h2>
332
+ <p>All form components follow accessibility best practices:</p>
333
+ <ul>
334
+ <li>Proper label associations using <code>for</code> and <code>id</code> attributes</li>
335
+ <li>ARIA attributes for validation states (<code>aria-invalid</code>, <code>aria-describedby</code>)</li>
336
+ <li>Error messages with <code>role="alert"</code> for screen readers</li>
337
+ <li>Keyboard navigation support</li>
338
+ <li>Focus indicators using theme accent color</li>
339
+ <li>Required field indicators</li>
340
+ </ul>
341
+ </section>
342
+
343
+ <section>
344
+ <h2>Styling</h2>
345
+ <p>All form components use semantic theme variables and automatically adapt to the selected theme. Form styles are defined in <code>src/styles/forms.css</code>.</p>
346
+
347
+ <h3>Customization</h3>
348
+ <p>You can customize form inputs using CSS variables or by adding custom classes:</p>
349
+ <CodeBlock
350
+ code={`.custom-input {
351
+ border-radius: var(--radius-lg);
352
+ padding: var(--spacing-4);
353
+ }`}
354
+ language="css"
355
+ />
356
+ <p><strong>Astro &amp; Vanilla:</strong> <a href="/docs/components/forms">Astro</a> · <a href="/docs/vanilla/components/forms">Vanilla</a> — same BEM classes and HTML structure.</p>
357
+ </section>
358
+
359
+ <style>
360
+ .example {
361
+ margin: var(--spacing-6) 0;
362
+ padding: var(--spacing-4);
363
+ background: var(--background-alt);
364
+ border: 1px solid var(--border);
365
+ border-radius: var(--radius-lg);
366
+ }
367
+ .example-title {
368
+ font-size: var(--font-size-sm);
369
+ font-weight: var(--font-weight-medium);
370
+ color: var(--text-dim);
371
+ margin-bottom: var(--spacing-3);
372
+ text-transform: uppercase;
373
+ letter-spacing: var(--letter-spacing-wider);
374
+ }
375
+ </style>