rizzo-css 0.0.11 → 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 (233) 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 +98 -42
  5. package/dist/rizzo.min.css +3 -2
  6. package/package.json +5 -3
  7. package/scaffold/astro-app/README.md +13 -2
  8. package/scaffold/astro-app/src/components/Accordion.astro +178 -0
  9. package/scaffold/astro-app/src/components/Alert.astro +131 -0
  10. package/scaffold/astro-app/src/components/Avatar.astro +59 -0
  11. package/scaffold/astro-app/src/components/Badge.astro +24 -0
  12. package/scaffold/astro-app/src/components/Breadcrumb.astro +61 -0
  13. package/scaffold/astro-app/src/components/Button.astro +3 -0
  14. package/scaffold/astro-app/src/components/Card.astro +18 -0
  15. package/scaffold/astro-app/src/components/Checkbox.astro +38 -0
  16. package/scaffold/astro-app/src/components/CodeBlock.astro +393 -0
  17. package/scaffold/astro-app/src/components/CopyToClipboard.astro +219 -0
  18. package/scaffold/astro-app/src/components/Divider.astro +37 -0
  19. package/scaffold/astro-app/src/components/Dropdown.astro +807 -0
  20. package/scaffold/astro-app/src/components/FormGroup.astro +59 -0
  21. package/scaffold/astro-app/src/components/FrameworkSwitcher.astro +72 -0
  22. package/scaffold/astro-app/src/components/Input.astro +59 -0
  23. package/scaffold/astro-app/src/components/Modal.astro +212 -0
  24. package/scaffold/astro-app/src/components/Navbar.astro +701 -0
  25. package/scaffold/astro-app/src/components/Pagination.astro +240 -0
  26. package/scaffold/astro-app/src/components/ProgressBar.astro +65 -0
  27. package/scaffold/astro-app/src/components/Radio.astro +38 -0
  28. package/scaffold/astro-app/src/components/Search.astro +1259 -0
  29. package/scaffold/astro-app/src/components/Select.astro +49 -0
  30. package/scaffold/astro-app/src/components/Settings.astro +382 -0
  31. package/scaffold/astro-app/src/components/Spinner.astro +30 -0
  32. package/scaffold/astro-app/src/components/Table.astro +181 -0
  33. package/scaffold/astro-app/src/components/Tabs.astro +223 -0
  34. package/scaffold/astro-app/src/components/Textarea.astro +58 -0
  35. package/scaffold/astro-app/src/components/ThemeSwitcher.astro +504 -0
  36. package/scaffold/astro-app/src/components/Toast.astro +30 -0
  37. package/scaffold/astro-app/src/components/Tooltip.astro +32 -0
  38. package/scaffold/astro-app/src/components/icons/Brush.astro +10 -0
  39. package/scaffold/astro-app/src/components/icons/Cake.astro +11 -0
  40. package/scaffold/astro-app/src/components/icons/Check.astro +29 -0
  41. package/scaffold/astro-app/src/components/icons/Cherry.astro +11 -0
  42. package/scaffold/astro-app/src/components/icons/ChevronDown.astro +29 -0
  43. package/scaffold/astro-app/src/components/icons/Circle.astro +29 -0
  44. package/scaffold/astro-app/src/components/icons/Close.astro +30 -0
  45. package/scaffold/astro-app/src/components/icons/Cmd.astro +26 -0
  46. package/scaffold/astro-app/src/components/icons/Copy.astro +30 -0
  47. package/scaffold/astro-app/src/components/icons/Eye.astro +30 -0
  48. package/scaffold/astro-app/src/components/icons/Filter.astro +29 -0
  49. package/scaffold/astro-app/src/components/icons/Flame.astro +28 -0
  50. package/scaffold/astro-app/src/components/icons/Flower.astro +11 -0
  51. package/scaffold/astro-app/src/components/icons/Gear.astro +30 -0
  52. package/scaffold/astro-app/src/components/icons/Heart.astro +28 -0
  53. package/scaffold/astro-app/src/components/icons/IceCream.astro +31 -0
  54. package/scaffold/astro-app/src/components/icons/Leaf.astro +29 -0
  55. package/scaffold/astro-app/src/components/icons/Lemon.astro +11 -0
  56. package/scaffold/astro-app/src/components/icons/Moon.astro +29 -0
  57. package/scaffold/astro-app/src/components/icons/Owl.astro +34 -0
  58. package/scaffold/astro-app/src/components/icons/Palette.astro +33 -0
  59. package/scaffold/astro-app/src/components/icons/Rainbow.astro +31 -0
  60. package/scaffold/astro-app/src/components/icons/Search.astro +30 -0
  61. package/scaffold/astro-app/src/components/icons/Shield.astro +28 -0
  62. package/scaffold/astro-app/src/components/icons/Snowflake.astro +34 -0
  63. package/scaffold/astro-app/src/components/icons/Sort.astro +30 -0
  64. package/scaffold/astro-app/src/components/icons/Sun.astro +29 -0
  65. package/scaffold/astro-app/src/components/icons/Sunset.astro +10 -0
  66. package/scaffold/astro-app/src/components/icons/Zap.astro +9 -0
  67. package/scaffold/astro-app/src/components/icons/devicons/Astro.astro +53 -0
  68. package/scaffold/astro-app/src/components/icons/devicons/Bash.astro +34 -0
  69. package/scaffold/astro-app/src/components/icons/devicons/Css3.astro +29 -0
  70. package/scaffold/astro-app/src/components/icons/devicons/Git.astro +24 -0
  71. package/scaffold/astro-app/src/components/icons/devicons/Html5.astro +27 -0
  72. package/scaffold/astro-app/src/components/icons/devicons/Javascript.astro +25 -0
  73. package/scaffold/astro-app/src/components/icons/devicons/Nodejs.astro +47 -0
  74. package/scaffold/astro-app/src/components/icons/devicons/Plaintext.astro +33 -0
  75. package/scaffold/astro-app/src/components/icons/devicons/React.astro +27 -0
  76. package/scaffold/astro-app/src/components/icons/devicons/Svelte.astro +25 -0
  77. package/scaffold/astro-app/src/components/icons/devicons/Vue.astro +26 -0
  78. package/scaffold/astro-app/src/config/frameworks.ts +26 -0
  79. package/scaffold/astro-app/src/config/themes.ts +54 -0
  80. package/scaffold/astro-app/src/layouts/DocsLayout.astro +204 -0
  81. package/scaffold/astro-app/src/layouts/Layout.astro +11 -2
  82. package/scaffold/astro-app/src/pages/components/accordion.astro +172 -0
  83. package/scaffold/astro-app/src/pages/components/alert.astro +250 -0
  84. package/scaffold/astro-app/src/pages/components/avatar.astro +102 -0
  85. package/scaffold/astro-app/src/pages/components/badge.astro +119 -0
  86. package/scaffold/astro-app/src/pages/components/breadcrumb.astro +124 -0
  87. package/scaffold/astro-app/src/pages/components/button.astro +74 -0
  88. package/scaffold/astro-app/src/pages/components/cards.astro +247 -0
  89. package/scaffold/astro-app/src/pages/components/copy-to-clipboard.astro +49 -0
  90. package/scaffold/astro-app/src/pages/components/divider.astro +74 -0
  91. package/scaffold/astro-app/src/pages/components/dropdown.astro +394 -0
  92. package/scaffold/astro-app/src/pages/components/forms.astro +367 -0
  93. package/scaffold/astro-app/src/pages/components/icons.astro +246 -0
  94. package/scaffold/astro-app/src/pages/components/modal.astro +152 -0
  95. package/scaffold/astro-app/src/pages/components/navbar.astro +80 -0
  96. package/scaffold/astro-app/src/pages/components/pagination.astro +126 -0
  97. package/scaffold/astro-app/src/pages/components/progress-bar.astro +94 -0
  98. package/scaffold/astro-app/src/pages/components/search.astro +155 -0
  99. package/scaffold/astro-app/src/pages/components/settings.astro +78 -0
  100. package/scaffold/astro-app/src/pages/components/spinner.astro +81 -0
  101. package/scaffold/astro-app/src/pages/components/table.astro +144 -0
  102. package/scaffold/astro-app/src/pages/components/tabs.astro +220 -0
  103. package/scaffold/astro-app/src/pages/components/theme-switcher.astro +67 -0
  104. package/scaffold/astro-app/src/pages/components/toast.astro +157 -0
  105. package/scaffold/astro-app/src/pages/components/tooltip.astro +209 -0
  106. package/scaffold/astro-app/src/pages/components.astro +290 -0
  107. package/scaffold/astro-app/src/pages/docs/accessibility.astro +9 -0
  108. package/scaffold/astro-app/src/pages/docs/colors.astro +9 -0
  109. package/scaffold/astro-app/src/pages/docs/design-system.astro +9 -0
  110. package/scaffold/astro-app/src/pages/docs/getting-started.astro +9 -0
  111. package/scaffold/astro-app/src/pages/docs/index.astro +15 -0
  112. package/scaffold/astro-app/src/pages/docs/themes/[theme].astro +14 -0
  113. package/scaffold/astro-app/src/pages/docs/theming.astro +10 -0
  114. package/scaffold/astro-app/src/pages/index.astro +5 -11
  115. package/scaffold/svelte/Table.svelte +6 -5
  116. package/scaffold/svelte/Tabs.svelte +3 -1
  117. package/scaffold/svelte-app/README.md +9 -2
  118. package/scaffold/svelte-app/src/app.html +1 -1
  119. package/scaffold/svelte-app/src/lib/rizzo/Accordion.svelte +128 -0
  120. package/scaffold/svelte-app/src/lib/rizzo/Alert.svelte +85 -0
  121. package/scaffold/svelte-app/src/lib/rizzo/Avatar.svelte +39 -0
  122. package/scaffold/svelte-app/src/lib/rizzo/Badge.svelte +31 -0
  123. package/scaffold/svelte-app/src/lib/rizzo/Breadcrumb.svelte +49 -0
  124. package/scaffold/svelte-app/src/lib/rizzo/Button.svelte +27 -0
  125. package/scaffold/svelte-app/src/lib/rizzo/Card.svelte +17 -0
  126. package/scaffold/svelte-app/src/lib/rizzo/Checkbox.svelte +37 -0
  127. package/scaffold/svelte-app/src/lib/rizzo/CopyToClipboard.svelte +79 -0
  128. package/scaffold/svelte-app/src/lib/rizzo/Divider.svelte +28 -0
  129. package/scaffold/svelte-app/src/lib/rizzo/Dropdown.svelte +254 -0
  130. package/scaffold/svelte-app/src/lib/rizzo/FormGroup.svelte +51 -0
  131. package/scaffold/svelte-app/src/lib/rizzo/Input.svelte +59 -0
  132. package/scaffold/svelte-app/src/lib/rizzo/Modal.svelte +157 -0
  133. package/scaffold/svelte-app/src/lib/rizzo/Pagination.svelte +93 -0
  134. package/scaffold/svelte-app/src/lib/rizzo/ProgressBar.svelte +58 -0
  135. package/scaffold/svelte-app/src/lib/rizzo/Radio.svelte +38 -0
  136. package/scaffold/svelte-app/src/lib/rizzo/Select.svelte +51 -0
  137. package/scaffold/svelte-app/src/lib/rizzo/Spinner.svelte +14 -0
  138. package/scaffold/svelte-app/src/lib/rizzo/Table.svelte +158 -0
  139. package/scaffold/svelte-app/src/lib/rizzo/Tabs.svelte +117 -0
  140. package/scaffold/svelte-app/src/lib/rizzo/Textarea.svelte +59 -0
  141. package/scaffold/svelte-app/src/lib/rizzo/ThemeSwitcher.svelte +315 -0
  142. package/scaffold/svelte-app/src/lib/rizzo/Toast.svelte +33 -0
  143. package/scaffold/svelte-app/src/lib/rizzo/Tooltip.svelte +19 -0
  144. package/scaffold/svelte-app/src/lib/rizzo/icons/Check.svelte +29 -0
  145. package/scaffold/svelte-app/src/lib/rizzo/icons/ChevronDown.svelte +29 -0
  146. package/scaffold/svelte-app/src/lib/rizzo/icons/Circle.svelte +29 -0
  147. package/scaffold/svelte-app/src/lib/rizzo/icons/Close.svelte +30 -0
  148. package/scaffold/svelte-app/src/lib/rizzo/icons/Cmd.svelte +27 -0
  149. package/scaffold/svelte-app/src/lib/rizzo/icons/Copy.svelte +30 -0
  150. package/scaffold/svelte-app/src/lib/rizzo/icons/Eye.svelte +30 -0
  151. package/scaffold/svelte-app/src/lib/rizzo/icons/Filter.svelte +29 -0
  152. package/scaffold/svelte-app/src/lib/rizzo/icons/Gear.svelte +30 -0
  153. package/scaffold/svelte-app/src/lib/rizzo/icons/IceCream.svelte +31 -0
  154. package/scaffold/svelte-app/src/lib/rizzo/icons/Moon.svelte +29 -0
  155. package/scaffold/svelte-app/src/lib/rizzo/icons/Owl.svelte +34 -0
  156. package/scaffold/svelte-app/src/lib/rizzo/icons/Palette.svelte +33 -0
  157. package/scaffold/svelte-app/src/lib/rizzo/icons/Rainbow.svelte +31 -0
  158. package/scaffold/svelte-app/src/lib/rizzo/icons/Search.svelte +30 -0
  159. package/scaffold/svelte-app/src/lib/rizzo/icons/Snowflake.svelte +34 -0
  160. package/scaffold/svelte-app/src/lib/rizzo/icons/Sort.svelte +30 -0
  161. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Astro.svelte +45 -0
  162. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Bash.svelte +28 -0
  163. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Css3.svelte +23 -0
  164. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Git.svelte +18 -0
  165. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Html5.svelte +21 -0
  166. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Javascript.svelte +19 -0
  167. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Nodejs.svelte +44 -0
  168. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Plaintext.svelte +24 -0
  169. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/React.svelte +21 -0
  170. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/SvelteIcon.svelte +19 -0
  171. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Vue.svelte +20 -0
  172. package/scaffold/svelte-app/src/lib/rizzo/index.ts +33 -0
  173. package/scaffold/svelte-app/src/lib/rizzo-docs/CodeBlock.svelte +239 -0
  174. package/scaffold/svelte-app/src/lib/rizzo-docs/SvelteDocPage.svelte +99 -0
  175. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AccordionDoc.svelte +53 -0
  176. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AlertDoc.svelte +114 -0
  177. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AvatarDoc.svelte +92 -0
  178. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BadgeDoc.svelte +60 -0
  179. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BreadcrumbDoc.svelte +55 -0
  180. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ButtonDoc.svelte +55 -0
  181. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CardsDoc.svelte +173 -0
  182. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComingSoon.svelte +12 -0
  183. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComponentsOverview.svelte +92 -0
  184. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CopyToClipboardDoc.svelte +26 -0
  185. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DividerDoc.svelte +105 -0
  186. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DropdownDoc.svelte +161 -0
  187. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/FormsDoc.svelte +375 -0
  188. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/IconsDoc.svelte +246 -0
  189. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Index.svelte +8 -0
  190. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ModalDoc.svelte +50 -0
  191. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/NavbarDoc.svelte +79 -0
  192. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/PaginationDoc.svelte +44 -0
  193. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ProgressBarDoc.svelte +95 -0
  194. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SearchDoc.svelte +147 -0
  195. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SettingsDoc.svelte +158 -0
  196. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SpinnerDoc.svelte +41 -0
  197. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TableDoc.svelte +116 -0
  198. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TabsDoc.svelte +152 -0
  199. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ThemeSwitcherDoc.svelte +181 -0
  200. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Theming.svelte +6 -0
  201. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ToastDoc.svelte +136 -0
  202. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TooltipDoc.svelte +57 -0
  203. package/scaffold/svelte-app/src/routes/+page.svelte +2 -2
  204. package/scaffold/svelte-app/src/routes/components/+page.svelte +4 -0
  205. package/scaffold/svelte-app/src/routes/components/[slug]/+page.svelte +7 -0
  206. package/scaffold/vanilla/README.md +20 -8
  207. package/scaffold/vanilla/components/accordion.html +187 -0
  208. package/scaffold/vanilla/components/alert.html +187 -0
  209. package/scaffold/vanilla/components/avatar.html +187 -0
  210. package/scaffold/vanilla/components/badge.html +187 -0
  211. package/scaffold/vanilla/components/breadcrumb.html +187 -0
  212. package/scaffold/vanilla/components/button.html +187 -0
  213. package/scaffold/vanilla/components/cards.html +187 -0
  214. package/scaffold/vanilla/components/copy-to-clipboard.html +187 -0
  215. package/scaffold/vanilla/components/divider.html +187 -0
  216. package/scaffold/vanilla/components/dropdown.html +187 -0
  217. package/scaffold/vanilla/components/forms.html +187 -0
  218. package/scaffold/vanilla/components/icons.html +187 -0
  219. package/scaffold/vanilla/components/index.html +212 -0
  220. package/scaffold/vanilla/components/modal.html +187 -0
  221. package/scaffold/vanilla/components/navbar.html +187 -0
  222. package/scaffold/vanilla/components/pagination.html +187 -0
  223. package/scaffold/vanilla/components/progress-bar.html +187 -0
  224. package/scaffold/vanilla/components/search.html +187 -0
  225. package/scaffold/vanilla/components/settings.html +187 -0
  226. package/scaffold/vanilla/components/spinner.html +187 -0
  227. package/scaffold/vanilla/components/table.html +187 -0
  228. package/scaffold/vanilla/components/tabs.html +187 -0
  229. package/scaffold/vanilla/components/theme-switcher.html +187 -0
  230. package/scaffold/vanilla/components/toast.html +187 -0
  231. package/scaffold/vanilla/components/tooltip.html +187 -0
  232. package/scaffold/vanilla/index.html +17 -283
  233. package/scaffold/vanilla/js/main.js +748 -0
@@ -0,0 +1,367 @@
1
+ ---
2
+ import DocsLayout from '../../layouts/DocsLayout.astro';
3
+ import FormGroup from '../../components/FormGroup.astro';
4
+ import Input from '../../components/Input.astro';
5
+ import Textarea from '../../components/Textarea.astro';
6
+ import Select from '../../components/Select.astro';
7
+ import Checkbox from '../../components/Checkbox.astro';
8
+ import Radio from '../../components/Radio.astro';
9
+ import CodeBlock from '../../components/CodeBlock.astro';
10
+ ---
11
+
12
+ <DocsLayout title="Form Components — Astro" description="Accessible form components with validation states and examples">
13
+
14
+ <p class="docs__read-docs">Read the full docs for this component at <a href="https://rizzo-css.vercel.app/docs/components/forms" target="_blank" rel="noopener noreferrer">https://rizzo-css.vercel.app/docs/components/forms</a>.</p>
15
+
16
+ <section>
17
+ <h2>Form Components</h2>
18
+ <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>
19
+ </section>
20
+
21
+ <section>
22
+ <h2>FormGroup</h2>
23
+ <p>The <code>FormGroup</code> component provides a wrapper for form fields with labels, help text, and error/success messages.</p>
24
+
25
+ <h3>Props</h3>
26
+ <ul>
27
+ <li><code>label</code> (string, optional) - Label text</li>
28
+ <li><code>labelFor</code> (string, optional) - ID of the input element</li>
29
+ <li><code>required</code> (boolean, optional) - Shows required indicator</li>
30
+ <li><code>help</code> (string, optional) - Help text displayed below input</li>
31
+ <li><code>error</code> (string, optional) - Error message</li>
32
+ <li><code>success</code> (string, optional) - Success message</li>
33
+ <li><code>class</code> (string, optional) - Additional CSS classes</li>
34
+ </ul>
35
+
36
+ <div class="example">
37
+ <div class="example-title">Live Example</div>
38
+ <FormGroup label="Email Address" labelFor="email-example" required help="We'll never share your email">
39
+ <Input type="email" id="email-example" name="email" placeholder="you@example.com" />
40
+ </FormGroup>
41
+ </div>
42
+
43
+ <h3>Code Example</h3>
44
+ <CodeBlock code={`---
45
+ import FormGroup from '../../components/FormGroup.astro';
46
+ import Input from '../../components/Input.astro';
47
+ ---
48
+
49
+ <FormGroup label="Email Address" labelFor="email" required help="We'll never share your email">
50
+ <Input type="email" id="email" name="email" placeholder="you@example.com" />
51
+ </FormGroup>`} language="astro" />
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> (string, optional) - Input ID</li>
62
+ <li><code>name</code> (string, optional) - Input name</li>
63
+ <li><code>value</code> (string, optional) - Input value</li>
64
+ <li><code>placeholder</code> (string, optional) - Placeholder text</li>
65
+ <li><code>required</code> (boolean, optional) - Required field</li>
66
+ <li><code>disabled</code> (boolean, optional) - Disabled state</li>
67
+ <li><code>readonly</code> (boolean, optional) - Read-only state</li>
68
+ <li><code>size</code> ('sm' | 'md' | 'lg', optional) - Input size (default: 'md')</li>
69
+ <li><code>error</code> (boolean, optional) - Error state</li>
70
+ <li><code>success</code> (boolean, optional) - Success state</li>
71
+ </ul>
72
+
73
+ <h3>Input Types</h3>
74
+ <div class="example">
75
+ <div class="example-title">Live Examples</div>
76
+ <FormGroup label="Text Input" labelFor="text-input">
77
+ <Input type="text" id="text-input" name="text" placeholder="Enter text" />
78
+ </FormGroup>
79
+ <FormGroup label="Email Input" labelFor="email-input">
80
+ <Input type="email" id="email-input" name="email" placeholder="you@example.com" />
81
+ </FormGroup>
82
+ <FormGroup label="Password Input" labelFor="password-input">
83
+ <Input type="password" id="password-input" name="password" placeholder="Enter password" />
84
+ </FormGroup>
85
+ <FormGroup label="Number Input" labelFor="number-input">
86
+ <Input type="number" id="number-input" name="number" placeholder="Enter number" />
87
+ </FormGroup>
88
+ </div>
89
+
90
+ <h3>Input Sizes</h3>
91
+ <div class="example">
92
+ <div class="example-title">Live Examples</div>
93
+ <FormGroup label="Small Input" labelFor="input-sm">
94
+ <Input type="text" id="input-sm" name="input-sm" size="sm" placeholder="Small input" />
95
+ </FormGroup>
96
+ <FormGroup label="Medium Input (default)" labelFor="input-md">
97
+ <Input type="text" id="input-md" name="input-md" size="md" placeholder="Medium input" />
98
+ </FormGroup>
99
+ <FormGroup label="Large Input" labelFor="input-lg">
100
+ <Input type="text" id="input-lg" name="input-lg" size="lg" placeholder="Large input" />
101
+ </FormGroup>
102
+ </div>
103
+
104
+ <h3>Validation States</h3>
105
+ <div class="example">
106
+ <div class="example-title">Live Examples</div>
107
+ <FormGroup label="Error State" labelFor="input-error" error="This field is required">
108
+ <Input type="text" id="input-error" name="input-error" error placeholder="Enter text" />
109
+ </FormGroup>
110
+ <FormGroup label="Success State" labelFor="input-success" success="Looks good!">
111
+ <Input type="text" id="input-success" name="input-success" success value="Valid input" />
112
+ </FormGroup>
113
+ </div>
114
+
115
+ <h3>Code Example</h3>
116
+ <CodeBlock code={`---
117
+ import FormGroup from '../../components/FormGroup.astro';
118
+ import Input from '../../components/Input.astro';
119
+ ---
120
+
121
+ <FormGroup label="Email" labelFor="email" required>
122
+ <Input type="email" id="email" name="email" placeholder="you@example.com" />
123
+ </FormGroup>
124
+
125
+ <!-- With error state -->
126
+ <FormGroup label="Email" labelFor="email-error" error="Invalid email address">
127
+ <Input type="email" id="email-error" name="email" error />
128
+ </FormGroup>`} language="astro" />
129
+ </section>
130
+
131
+ <section>
132
+ <h2>Textarea</h2>
133
+ <p>The <code>Textarea</code> component for multi-line text input.</p>
134
+
135
+ <h3>Props</h3>
136
+ <ul>
137
+ <li><code>id</code>, <code>name</code>, <code>value</code>, <code>placeholder</code>, <code>required</code>, <code>disabled</code>, <code>readonly</code></li>
138
+ <li><code>rows</code> (number, optional) - Number of rows (default: 4)</li>
139
+ <li><code>cols</code> (number, optional) - Number of columns</li>
140
+ <li><code>size</code>, <code>error</code>, <code>success</code> - Same as Input</li>
141
+ </ul>
142
+
143
+ <div class="example">
144
+ <div class="example-title">Live Example</div>
145
+ <FormGroup label="Message" labelFor="textarea-example" help="Enter your message here">
146
+ <Textarea id="textarea-example" name="message" rows={5} placeholder="Your message..." />
147
+ </FormGroup>
148
+ </div>
149
+
150
+ <h3>Code Example</h3>
151
+ <CodeBlock code={`---
152
+ import FormGroup from '../../components/FormGroup.astro';
153
+ import Textarea from '../../components/Textarea.astro';
154
+ ---
155
+
156
+ <FormGroup label="Message" labelFor="message" help="Enter your message here">
157
+ <Textarea id="message" name="message" rows={5} placeholder="Your message..." />
158
+ </FormGroup>`} language="astro" />
159
+ </section>
160
+
161
+ <section>
162
+ <h2>Select</h2>
163
+ <p>The <code>Select</code> component for dropdown selections.</p>
164
+
165
+ <h3>Props</h3>
166
+ <ul>
167
+ <li><code>id</code>, <code>name</code>, <code>value</code>, <code>required</code>, <code>disabled</code></li>
168
+ <li><code>size</code>, <code>error</code>, <code>success</code> - Same as Input</li>
169
+ </ul>
170
+
171
+ <div class="example">
172
+ <div class="example-title">Live Example</div>
173
+ <FormGroup label="Country" labelFor="select-example" required>
174
+ <Select id="select-example" name="country">
175
+ <option value="">Select a country</option>
176
+ <option value="us">United States</option>
177
+ <option value="ca">Canada</option>
178
+ <option value="uk">United Kingdom</option>
179
+ <option value="au">Australia</option>
180
+ </Select>
181
+ </FormGroup>
182
+ </div>
183
+
184
+ <h3>Code Example</h3>
185
+ <CodeBlock code={`---
186
+ import FormGroup from '../../components/FormGroup.astro';
187
+ import Select from '../../components/Select.astro';
188
+ ---
189
+
190
+ <FormGroup label="Country" labelFor="country" required>
191
+ <Select id="country" name="country">
192
+ <option value="">Select a country</option>
193
+ <option value="us">United States</option>
194
+ <option value="ca">Canada</option>
195
+ <option value="uk">United Kingdom</option>
196
+ </Select>
197
+ </FormGroup>`} language="astro" />
198
+ </section>
199
+
200
+ <section>
201
+ <h2>Checkbox</h2>
202
+ <p>The <code>Checkbox</code> component for single or multiple selections.</p>
203
+
204
+ <h3>Props</h3>
205
+ <ul>
206
+ <li><code>id</code>, <code>name</code>, <code>value</code>, <code>checked</code>, <code>required</code>, <code>disabled</code></li>
207
+ <li><code>ariaLabel</code> (string, optional) - Accessible label</li>
208
+ <li><code>ariaDescribedby</code> (string, optional) - ID of element that describes this checkbox</li>
209
+ </ul>
210
+
211
+ <div class="example">
212
+ <div class="example-title">Live Examples</div>
213
+ <FormGroup label="Preferences">
214
+ <div class="checkbox-group">
215
+ <label class="checkbox-label">
216
+ <Checkbox id="newsletter" name="preferences" value="newsletter" />
217
+ Subscribe to newsletter
218
+ </label>
219
+ <label class="checkbox-label">
220
+ <Checkbox id="updates" name="preferences" value="updates" />
221
+ Receive product updates
222
+ </label>
223
+ <label class="checkbox-label">
224
+ <Checkbox id="marketing" name="preferences" value="marketing" />
225
+ Marketing communications
226
+ </label>
227
+ </div>
228
+ </FormGroup>
229
+ </div>
230
+
231
+ <h3>Code Example</h3>
232
+ <CodeBlock code={`---
233
+ import Checkbox from '../../components/Checkbox.astro';
234
+ ---
235
+
236
+ <label class="checkbox-label">
237
+ <Checkbox id="newsletter" name="preferences" value="newsletter" />
238
+ Subscribe to newsletter
239
+ </label>
240
+
241
+ <!-- Checkbox Group -->
242
+ <div class="checkbox-group">
243
+ <label class="checkbox-label">
244
+ <Checkbox id="opt1" name="options" value="1" />
245
+ Option 1
246
+ </label>
247
+ <label class="checkbox-label">
248
+ <Checkbox id="opt2" name="options" value="2" />
249
+ Option 2
250
+ </label>
251
+ </div>`} language="astro" />
252
+ </section>
253
+
254
+ <section>
255
+ <h2>Radio</h2>
256
+ <p>The <code>Radio</code> component for single selection from multiple options.</p>
257
+
258
+ <h3>Props</h3>
259
+ <ul>
260
+ <li><code>id</code>, <code>name</code>, <code>value</code>, <code>checked</code>, <code>required</code>, <code>disabled</code></li>
261
+ <li><code>ariaLabel</code>, <code>ariaDescribedby</code> - Same as Checkbox</li>
262
+ </ul>
263
+
264
+ <div class="example">
265
+ <div class="example-title">Live Example</div>
266
+ <FormGroup label="Payment Method" required>
267
+ <div class="radio-group">
268
+ <label class="radio-label">
269
+ <Radio id="payment-card" name="payment" value="card" checked />
270
+ Credit Card
271
+ </label>
272
+ <label class="radio-label">
273
+ <Radio id="payment-paypal" name="payment" value="paypal" />
274
+ PayPal
275
+ </label>
276
+ <label class="radio-label">
277
+ <Radio id="payment-bank" name="payment" value="bank" />
278
+ Bank Transfer
279
+ </label>
280
+ </div>
281
+ </FormGroup>
282
+ </div>
283
+
284
+ <h3>Code Example</h3>
285
+ <CodeBlock code={`---
286
+ import Radio from '../../components/Radio.astro';
287
+ ---
288
+
289
+ <fieldset>
290
+ <legend>Payment Method</legend>
291
+ <div class="radio-group">
292
+ <label class="radio-label">
293
+ <Radio id="payment-card" name="payment" value="card" checked />
294
+ Credit Card
295
+ </label>
296
+ <label class="radio-label">
297
+ <Radio id="payment-paypal" name="payment" value="paypal" />
298
+ PayPal
299
+ </label>
300
+ </div>
301
+ </fieldset>`} language="astro" />
302
+ </section>
303
+
304
+ <section>
305
+ <h2>Complete Form Example</h2>
306
+ <div class="example">
307
+ <div class="example-title">Live Example</div>
308
+ <form style="max-width: 600px;">
309
+ <FormGroup label="Full Name" labelFor="form-name" required>
310
+ <Input type="text" id="form-name" name="name" placeholder="John Doe" required />
311
+ </FormGroup>
312
+
313
+ <FormGroup label="Email Address" labelFor="form-email" required help="We'll never share your email">
314
+ <Input type="email" id="form-email" name="email" placeholder="you@example.com" required />
315
+ </FormGroup>
316
+
317
+ <FormGroup label="Country" labelFor="form-country" required>
318
+ <Select id="form-country" name="country" required>
319
+ <option value="">Select a country</option>
320
+ <option value="us">United States</option>
321
+ <option value="ca">Canada</option>
322
+ <option value="uk">United Kingdom</option>
323
+ </Select>
324
+ </FormGroup>
325
+
326
+ <FormGroup label="Message" labelFor="form-message">
327
+ <Textarea id="form-message" name="message" rows={4} placeholder="Your message..." />
328
+ </FormGroup>
329
+
330
+ <FormGroup>
331
+ <label class="checkbox-label">
332
+ <Checkbox id="form-consent" name="consent" value="yes" required />
333
+ I agree to the terms and conditions
334
+ </label>
335
+ </FormGroup>
336
+
337
+ <button type="submit" class="btn btn-primary">Submit</button>
338
+ </form>
339
+ </div>
340
+ </section>
341
+
342
+ <section>
343
+ <h2>Accessibility</h2>
344
+ <p>All form components follow accessibility best practices:</p>
345
+ <ul>
346
+ <li>Proper label associations using <code>for</code> and <code>id</code> attributes</li>
347
+ <li>ARIA attributes for validation states (<code>aria-invalid</code>, <code>aria-describedby</code>)</li>
348
+ <li>Error messages with <code>role="alert"</code> for screen readers</li>
349
+ <li>Keyboard navigation support</li>
350
+ <li>Focus indicators using theme accent color</li>
351
+ <li>Required field indicators</li>
352
+ </ul>
353
+ </section>
354
+
355
+ <section>
356
+ <h2>Styling</h2>
357
+ <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>
358
+
359
+ <h3>Customization</h3>
360
+ <p>You can customize form inputs using CSS variables or by adding custom classes:</p>
361
+ <CodeBlock code={`.custom-input {
362
+ border-radius: var(--radius-lg);
363
+ padding: var(--spacing-4);
364
+ }`} language="css" />
365
+ <p><strong>Svelte & Vanilla:</strong> <a href="/docs/svelte/components/forms">Svelte</a> · <a href="/docs/vanilla/components/forms">Vanilla</a> — same BEM classes, structure, and examples.</p>
366
+ </section>
367
+ </DocsLayout>