rizzo-css 0.0.16 → 0.0.18

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 (259) hide show
  1. package/README.md +4 -4
  2. package/bin/rizzo-css.js +473 -164
  3. package/dist/rizzo.min.css +4 -1
  4. package/package.json +9 -4
  5. package/scaffold/astro-minimal/.env.example +3 -0
  6. package/scaffold/astro-minimal/README.md +36 -0
  7. package/scaffold/astro-minimal/package.json +13 -0
  8. package/scaffold/astro-minimal/src/layouts/Layout.astro +28 -0
  9. package/scaffold/astro-minimal/src/pages/index.astro +10 -0
  10. package/scaffold/svelte-minimal/.env.example +3 -0
  11. package/scaffold/svelte-minimal/README.md +37 -0
  12. package/scaffold/svelte-minimal/package.json +20 -0
  13. package/scaffold/svelte-minimal/src/app.d.ts +11 -0
  14. package/scaffold/svelte-minimal/src/app.html +15 -0
  15. package/scaffold/svelte-minimal/src/routes/+layout.svelte +1 -0
  16. package/scaffold/svelte-minimal/src/routes/+page.svelte +5 -0
  17. package/scaffold/svelte-minimal/svelte.config.js +10 -0
  18. package/scaffold/svelte-minimal/tsconfig.json +11 -0
  19. package/scaffold/vanilla/README.md +4 -4
  20. package/scaffold/vanilla/components/accordion.html +18 -0
  21. package/scaffold/vanilla/components/alert.html +18 -0
  22. package/scaffold/vanilla/components/avatar.html +18 -0
  23. package/scaffold/vanilla/components/badge.html +18 -0
  24. package/scaffold/vanilla/components/breadcrumb.html +18 -0
  25. package/scaffold/vanilla/components/button.html +18 -0
  26. package/scaffold/vanilla/components/cards.html +18 -0
  27. package/scaffold/vanilla/components/copy-to-clipboard.html +18 -0
  28. package/scaffold/vanilla/components/divider.html +18 -0
  29. package/scaffold/vanilla/components/dropdown.html +18 -0
  30. package/scaffold/vanilla/components/forms.html +18 -0
  31. package/scaffold/vanilla/components/icons.html +18 -0
  32. package/scaffold/vanilla/components/index.html +18 -0
  33. package/scaffold/vanilla/components/modal.html +18 -0
  34. package/scaffold/vanilla/components/navbar.html +18 -0
  35. package/scaffold/vanilla/components/pagination.html +18 -0
  36. package/scaffold/vanilla/components/progress-bar.html +18 -0
  37. package/scaffold/vanilla/components/search.html +18 -0
  38. package/scaffold/vanilla/components/settings.html +18 -0
  39. package/scaffold/vanilla/components/spinner.html +18 -0
  40. package/scaffold/vanilla/components/table.html +18 -0
  41. package/scaffold/vanilla/components/tabs.html +18 -0
  42. package/scaffold/vanilla/components/theme-switcher.html +18 -0
  43. package/scaffold/vanilla/components/toast.html +18 -0
  44. package/scaffold/vanilla/components/tooltip.html +18 -0
  45. package/scaffold/vanilla/index.html +18 -0
  46. package/scaffold/astro-app/README.md +0 -43
  47. package/scaffold/astro-app/package.json +0 -1
  48. package/scaffold/astro-app/src/components/Accordion.astro +0 -178
  49. package/scaffold/astro-app/src/components/Alert.astro +0 -131
  50. package/scaffold/astro-app/src/components/Avatar.astro +0 -59
  51. package/scaffold/astro-app/src/components/Badge.astro +0 -24
  52. package/scaffold/astro-app/src/components/Breadcrumb.astro +0 -61
  53. package/scaffold/astro-app/src/components/Button.astro +0 -3
  54. package/scaffold/astro-app/src/components/Card.astro +0 -18
  55. package/scaffold/astro-app/src/components/Checkbox.astro +0 -38
  56. package/scaffold/astro-app/src/components/CodeBlock.astro +0 -393
  57. package/scaffold/astro-app/src/components/CopyToClipboard.astro +0 -219
  58. package/scaffold/astro-app/src/components/Divider.astro +0 -37
  59. package/scaffold/astro-app/src/components/DocsSidebar.astro +0 -51
  60. package/scaffold/astro-app/src/components/Dropdown.astro +0 -807
  61. package/scaffold/astro-app/src/components/FormGroup.astro +0 -59
  62. package/scaffold/astro-app/src/components/FrameworkSwitcher.astro +0 -72
  63. package/scaffold/astro-app/src/components/Input.astro +0 -59
  64. package/scaffold/astro-app/src/components/Modal.astro +0 -212
  65. package/scaffold/astro-app/src/components/Navbar.astro +0 -623
  66. package/scaffold/astro-app/src/components/Pagination.astro +0 -240
  67. package/scaffold/astro-app/src/components/ProgressBar.astro +0 -65
  68. package/scaffold/astro-app/src/components/Radio.astro +0 -38
  69. package/scaffold/astro-app/src/components/Search.astro +0 -1259
  70. package/scaffold/astro-app/src/components/Select.astro +0 -49
  71. package/scaffold/astro-app/src/components/Settings.astro +0 -382
  72. package/scaffold/astro-app/src/components/Spinner.astro +0 -30
  73. package/scaffold/astro-app/src/components/Table.astro +0 -181
  74. package/scaffold/astro-app/src/components/Tabs.astro +0 -223
  75. package/scaffold/astro-app/src/components/Textarea.astro +0 -58
  76. package/scaffold/astro-app/src/components/ThemeIcon.astro +0 -50
  77. package/scaffold/astro-app/src/components/ThemeSwitcher.astro +0 -504
  78. package/scaffold/astro-app/src/components/Toast.astro +0 -30
  79. package/scaffold/astro-app/src/components/Tooltip.astro +0 -32
  80. package/scaffold/astro-app/src/components/icons/Brush.astro +0 -10
  81. package/scaffold/astro-app/src/components/icons/Cake.astro +0 -11
  82. package/scaffold/astro-app/src/components/icons/Check.astro +0 -29
  83. package/scaffold/astro-app/src/components/icons/Cherry.astro +0 -11
  84. package/scaffold/astro-app/src/components/icons/ChevronDown.astro +0 -29
  85. package/scaffold/astro-app/src/components/icons/Circle.astro +0 -29
  86. package/scaffold/astro-app/src/components/icons/Close.astro +0 -30
  87. package/scaffold/astro-app/src/components/icons/Cmd.astro +0 -26
  88. package/scaffold/astro-app/src/components/icons/Copy.astro +0 -30
  89. package/scaffold/astro-app/src/components/icons/Eye.astro +0 -30
  90. package/scaffold/astro-app/src/components/icons/Filter.astro +0 -29
  91. package/scaffold/astro-app/src/components/icons/Flame.astro +0 -28
  92. package/scaffold/astro-app/src/components/icons/Flower.astro +0 -11
  93. package/scaffold/astro-app/src/components/icons/Gear.astro +0 -30
  94. package/scaffold/astro-app/src/components/icons/Heart.astro +0 -28
  95. package/scaffold/astro-app/src/components/icons/IceCream.astro +0 -31
  96. package/scaffold/astro-app/src/components/icons/Leaf.astro +0 -29
  97. package/scaffold/astro-app/src/components/icons/Lemon.astro +0 -11
  98. package/scaffold/astro-app/src/components/icons/Moon.astro +0 -29
  99. package/scaffold/astro-app/src/components/icons/Owl.astro +0 -34
  100. package/scaffold/astro-app/src/components/icons/Palette.astro +0 -33
  101. package/scaffold/astro-app/src/components/icons/Rainbow.astro +0 -31
  102. package/scaffold/astro-app/src/components/icons/Search.astro +0 -30
  103. package/scaffold/astro-app/src/components/icons/Shield.astro +0 -28
  104. package/scaffold/astro-app/src/components/icons/Snowflake.astro +0 -34
  105. package/scaffold/astro-app/src/components/icons/Sort.astro +0 -30
  106. package/scaffold/astro-app/src/components/icons/Sun.astro +0 -29
  107. package/scaffold/astro-app/src/components/icons/Sunset.astro +0 -10
  108. package/scaffold/astro-app/src/components/icons/Zap.astro +0 -9
  109. package/scaffold/astro-app/src/components/icons/devicons/Astro.astro +0 -53
  110. package/scaffold/astro-app/src/components/icons/devicons/Bash.astro +0 -34
  111. package/scaffold/astro-app/src/components/icons/devicons/Css3.astro +0 -29
  112. package/scaffold/astro-app/src/components/icons/devicons/Git.astro +0 -24
  113. package/scaffold/astro-app/src/components/icons/devicons/Html5.astro +0 -27
  114. package/scaffold/astro-app/src/components/icons/devicons/Javascript.astro +0 -25
  115. package/scaffold/astro-app/src/components/icons/devicons/Nodejs.astro +0 -47
  116. package/scaffold/astro-app/src/components/icons/devicons/Plaintext.astro +0 -33
  117. package/scaffold/astro-app/src/components/icons/devicons/React.astro +0 -27
  118. package/scaffold/astro-app/src/components/icons/devicons/Svelte.astro +0 -25
  119. package/scaffold/astro-app/src/components/icons/devicons/Vue.astro +0 -26
  120. package/scaffold/astro-app/src/config/frameworks.ts +0 -26
  121. package/scaffold/astro-app/src/config/themes.ts +0 -54
  122. package/scaffold/astro-app/src/layouts/DocsLayout.astro +0 -263
  123. package/scaffold/astro-app/src/layouts/Layout.astro +0 -41
  124. package/scaffold/astro-app/src/pages/components/accordion.astro +0 -172
  125. package/scaffold/astro-app/src/pages/components/alert.astro +0 -250
  126. package/scaffold/astro-app/src/pages/components/avatar.astro +0 -102
  127. package/scaffold/astro-app/src/pages/components/badge.astro +0 -119
  128. package/scaffold/astro-app/src/pages/components/breadcrumb.astro +0 -124
  129. package/scaffold/astro-app/src/pages/components/button.astro +0 -74
  130. package/scaffold/astro-app/src/pages/components/cards.astro +0 -247
  131. package/scaffold/astro-app/src/pages/components/copy-to-clipboard.astro +0 -49
  132. package/scaffold/astro-app/src/pages/components/divider.astro +0 -74
  133. package/scaffold/astro-app/src/pages/components/dropdown.astro +0 -394
  134. package/scaffold/astro-app/src/pages/components/forms.astro +0 -367
  135. package/scaffold/astro-app/src/pages/components/icons.astro +0 -246
  136. package/scaffold/astro-app/src/pages/components/modal.astro +0 -152
  137. package/scaffold/astro-app/src/pages/components/navbar.astro +0 -80
  138. package/scaffold/astro-app/src/pages/components/pagination.astro +0 -126
  139. package/scaffold/astro-app/src/pages/components/progress-bar.astro +0 -94
  140. package/scaffold/astro-app/src/pages/components/search.astro +0 -155
  141. package/scaffold/astro-app/src/pages/components/settings.astro +0 -78
  142. package/scaffold/astro-app/src/pages/components/spinner.astro +0 -81
  143. package/scaffold/astro-app/src/pages/components/table.astro +0 -144
  144. package/scaffold/astro-app/src/pages/components/tabs.astro +0 -220
  145. package/scaffold/astro-app/src/pages/components/theme-switcher.astro +0 -69
  146. package/scaffold/astro-app/src/pages/components/toast.astro +0 -157
  147. package/scaffold/astro-app/src/pages/components/tooltip.astro +0 -209
  148. package/scaffold/astro-app/src/pages/components.astro +0 -290
  149. package/scaffold/astro-app/src/pages/docs/accessibility.astro +0 -9
  150. package/scaffold/astro-app/src/pages/docs/colors.astro +0 -9
  151. package/scaffold/astro-app/src/pages/docs/design-system.astro +0 -9
  152. package/scaffold/astro-app/src/pages/docs/getting-started.astro +0 -9
  153. package/scaffold/astro-app/src/pages/docs/index.astro +0 -15
  154. package/scaffold/astro-app/src/pages/docs/themes/[theme].astro +0 -14
  155. package/scaffold/astro-app/src/pages/docs/theming.astro +0 -10
  156. package/scaffold/astro-app/src/pages/index.astro +0 -24
  157. package/scaffold/svelte-app/README.md +0 -39
  158. package/scaffold/svelte-app/package.json +0 -22
  159. package/scaffold/svelte-app/src/app.d.ts +0 -28
  160. package/scaffold/svelte-app/src/app.html +0 -21
  161. package/scaffold/svelte-app/src/lib/assets/favicon.svg +0 -1
  162. package/scaffold/svelte-app/src/lib/rizzo/Accordion.svelte +0 -128
  163. package/scaffold/svelte-app/src/lib/rizzo/Alert.svelte +0 -85
  164. package/scaffold/svelte-app/src/lib/rizzo/Avatar.svelte +0 -39
  165. package/scaffold/svelte-app/src/lib/rizzo/Badge.svelte +0 -31
  166. package/scaffold/svelte-app/src/lib/rizzo/Breadcrumb.svelte +0 -49
  167. package/scaffold/svelte-app/src/lib/rizzo/Button.svelte +0 -27
  168. package/scaffold/svelte-app/src/lib/rizzo/Card.svelte +0 -17
  169. package/scaffold/svelte-app/src/lib/rizzo/Checkbox.svelte +0 -37
  170. package/scaffold/svelte-app/src/lib/rizzo/CopyToClipboard.svelte +0 -79
  171. package/scaffold/svelte-app/src/lib/rizzo/Divider.svelte +0 -28
  172. package/scaffold/svelte-app/src/lib/rizzo/Dropdown.svelte +0 -254
  173. package/scaffold/svelte-app/src/lib/rizzo/FormGroup.svelte +0 -51
  174. package/scaffold/svelte-app/src/lib/rizzo/Input.svelte +0 -59
  175. package/scaffold/svelte-app/src/lib/rizzo/Modal.svelte +0 -157
  176. package/scaffold/svelte-app/src/lib/rizzo/Pagination.svelte +0 -93
  177. package/scaffold/svelte-app/src/lib/rizzo/ProgressBar.svelte +0 -58
  178. package/scaffold/svelte-app/src/lib/rizzo/Radio.svelte +0 -38
  179. package/scaffold/svelte-app/src/lib/rizzo/Select.svelte +0 -51
  180. package/scaffold/svelte-app/src/lib/rizzo/Spinner.svelte +0 -14
  181. package/scaffold/svelte-app/src/lib/rizzo/Table.svelte +0 -158
  182. package/scaffold/svelte-app/src/lib/rizzo/Tabs.svelte +0 -117
  183. package/scaffold/svelte-app/src/lib/rizzo/Textarea.svelte +0 -59
  184. package/scaffold/svelte-app/src/lib/rizzo/ThemeIcon.svelte +0 -54
  185. package/scaffold/svelte-app/src/lib/rizzo/ThemeSwitcher.svelte +0 -315
  186. package/scaffold/svelte-app/src/lib/rizzo/Toast.svelte +0 -33
  187. package/scaffold/svelte-app/src/lib/rizzo/Tooltip.svelte +0 -19
  188. package/scaffold/svelte-app/src/lib/rizzo/icons/Check.svelte +0 -29
  189. package/scaffold/svelte-app/src/lib/rizzo/icons/ChevronDown.svelte +0 -29
  190. package/scaffold/svelte-app/src/lib/rizzo/icons/Circle.svelte +0 -29
  191. package/scaffold/svelte-app/src/lib/rizzo/icons/Close.svelte +0 -30
  192. package/scaffold/svelte-app/src/lib/rizzo/icons/Cmd.svelte +0 -27
  193. package/scaffold/svelte-app/src/lib/rizzo/icons/Copy.svelte +0 -30
  194. package/scaffold/svelte-app/src/lib/rizzo/icons/Eye.svelte +0 -30
  195. package/scaffold/svelte-app/src/lib/rizzo/icons/Filter.svelte +0 -29
  196. package/scaffold/svelte-app/src/lib/rizzo/icons/Gear.svelte +0 -30
  197. package/scaffold/svelte-app/src/lib/rizzo/icons/IceCream.svelte +0 -31
  198. package/scaffold/svelte-app/src/lib/rizzo/icons/Moon.svelte +0 -29
  199. package/scaffold/svelte-app/src/lib/rizzo/icons/Owl.svelte +0 -34
  200. package/scaffold/svelte-app/src/lib/rizzo/icons/Palette.svelte +0 -33
  201. package/scaffold/svelte-app/src/lib/rizzo/icons/Rainbow.svelte +0 -31
  202. package/scaffold/svelte-app/src/lib/rizzo/icons/Search.svelte +0 -30
  203. package/scaffold/svelte-app/src/lib/rizzo/icons/Snowflake.svelte +0 -34
  204. package/scaffold/svelte-app/src/lib/rizzo/icons/Sort.svelte +0 -30
  205. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Astro.svelte +0 -45
  206. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Bash.svelte +0 -28
  207. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Css3.svelte +0 -23
  208. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Git.svelte +0 -18
  209. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Html5.svelte +0 -21
  210. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Javascript.svelte +0 -19
  211. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Nodejs.svelte +0 -44
  212. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Plaintext.svelte +0 -24
  213. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/React.svelte +0 -21
  214. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/SvelteIcon.svelte +0 -19
  215. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Vue.svelte +0 -20
  216. package/scaffold/svelte-app/src/lib/rizzo/index.ts +0 -35
  217. package/scaffold/svelte-app/src/lib/rizzo-docs/CodeBlock.svelte +0 -239
  218. package/scaffold/svelte-app/src/lib/rizzo-docs/SvelteDocPage.svelte +0 -99
  219. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AccordionDoc.svelte +0 -53
  220. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AlertDoc.svelte +0 -114
  221. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AvatarDoc.svelte +0 -92
  222. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BadgeDoc.svelte +0 -60
  223. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BreadcrumbDoc.svelte +0 -55
  224. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ButtonDoc.svelte +0 -55
  225. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CardsDoc.svelte +0 -173
  226. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComingSoon.svelte +0 -12
  227. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComponentsOverview.svelte +0 -92
  228. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CopyToClipboardDoc.svelte +0 -26
  229. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DividerDoc.svelte +0 -105
  230. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DropdownDoc.svelte +0 -161
  231. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/FormsDoc.svelte +0 -375
  232. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/IconsDoc.svelte +0 -246
  233. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Index.svelte +0 -8
  234. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ModalDoc.svelte +0 -50
  235. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/NavbarDoc.svelte +0 -79
  236. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/PaginationDoc.svelte +0 -44
  237. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ProgressBarDoc.svelte +0 -95
  238. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SearchDoc.svelte +0 -147
  239. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SettingsDoc.svelte +0 -158
  240. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SpinnerDoc.svelte +0 -41
  241. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TableDoc.svelte +0 -116
  242. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TabsDoc.svelte +0 -152
  243. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ThemeSwitcherDoc.svelte +0 -189
  244. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Theming.svelte +0 -6
  245. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ToastDoc.svelte +0 -136
  246. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TooltipDoc.svelte +0 -57
  247. package/scaffold/svelte-app/src/routes/+layout.svelte +0 -10
  248. package/scaffold/svelte-app/src/routes/+page.svelte +0 -31
  249. package/scaffold/svelte-app/src/routes/components/+page.svelte +0 -4
  250. package/scaffold/svelte-app/src/routes/components/[slug]/+page.svelte +0 -7
  251. package/scaffold/svelte-app/static/robots.txt +0 -3
  252. package/scaffold/svelte-app/svelte.config.js +0 -13
  253. package/scaffold/svelte-app/tsconfig.json +0 -21
  254. package/scaffold/svelte-app/vite.config.ts +0 -6
  255. /package/scaffold/{astro-app → astro-minimal}/astro.config.mjs +0 -0
  256. /package/scaffold/{astro-app → astro-minimal}/public/.gitkeep +0 -0
  257. /package/scaffold/{astro-app → astro-minimal}/public/favicon.svg +0 -0
  258. /package/scaffold/{astro-app → astro-minimal}/tsconfig.json +0 -0
  259. /package/scaffold/{svelte-app → svelte-minimal}/static/.gitkeep +0 -0
@@ -1,393 +0,0 @@
1
- ---
2
- import Copy from './icons/Copy.astro';
3
- import Check from './icons/Check.astro';
4
- import Css3 from './icons/devicons/Css3.astro';
5
- import Html5 from './icons/devicons/Html5.astro';
6
- import Javascript from './icons/devicons/Javascript.astro';
7
- import Nodejs from './icons/devicons/Nodejs.astro';
8
- import AstroIcon from './icons/devicons/Astro.astro';
9
- import Plaintext from './icons/devicons/Plaintext.astro';
10
- import Git from './icons/devicons/Git.astro';
11
- import Bash from './icons/devicons/Bash.astro';
12
- import Svelte from './icons/devicons/Svelte.astro';
13
- import React from './icons/devicons/React.astro';
14
- import Vue from './icons/devicons/Vue.astro';
15
-
16
- interface Props {
17
- code: string;
18
- language?: string;
19
- class?: string;
20
- }
21
-
22
- const {
23
- code,
24
- language = '',
25
- class: className = '',
26
- } = Astro.props;
27
-
28
- const languageLabel = language || '';
29
- const languageLower = language.toLowerCase();
30
-
31
- const codeId = `code-${Math.random().toString(36).substr(2, 9)}`;
32
- const copyButtonId = `copy-btn-${Math.random().toString(36).substr(2, 9)}`;
33
- ---
34
-
35
- <div class={`code-block ${className}`.trim()}>
36
- <div class="code-block__header">
37
- {language && (
38
- <span class="code-block__language" aria-label={languageLabel}>
39
- {languageLower === 'css' && (
40
- <>
41
- <Css3 width={20} height={20} class="code-block__language-icon" />
42
- <span class="code-block__language-text">{languageLabel}</span>
43
- </>
44
- )}
45
- {languageLower === 'html' && (
46
- <>
47
- <Html5 width={20} height={20} class="code-block__language-icon" />
48
- <span class="code-block__language-text">{languageLabel}</span>
49
- </>
50
- )}
51
- {languageLower === 'javascript' && (
52
- <>
53
- <Javascript width={20} height={20} class="code-block__language-icon" />
54
- <span class="code-block__language-text">{languageLabel}</span>
55
- </>
56
- )}
57
- {languageLower === 'nodejs' && (
58
- <>
59
- <Nodejs width={20} height={20} class="code-block__language-icon" />
60
- <span class="code-block__language-text">{languageLabel}</span>
61
- </>
62
- )}
63
- {languageLower === 'astro' && (
64
- <>
65
- <AstroIcon width={20} height={20} class="code-block__language-icon" />
66
- <span class="code-block__language-text">{languageLabel}</span>
67
- </>
68
- )}
69
- {languageLower === 'plaintext' && (
70
- <>
71
- <Plaintext width={20} height={20} class="code-block__language-icon" />
72
- <span class="code-block__language-text">{languageLabel}</span>
73
- </>
74
- )}
75
- {languageLower === 'git' && (
76
- <>
77
- <Git width={20} height={20} class="code-block__language-icon" />
78
- <span class="code-block__language-text">{languageLabel}</span>
79
- </>
80
- )}
81
- {languageLower === 'svelte' && (
82
- <>
83
- <Svelte width={20} height={20} class="code-block__language-icon" />
84
- <span class="code-block__language-text">{languageLabel}</span>
85
- </>
86
- )}
87
- {(languageLower === 'react' || languageLower === 'jsx' || languageLower === 'tsx') && (
88
- <>
89
- <React width={20} height={20} class="code-block__language-icon" />
90
- <span class="code-block__language-text">{languageLabel}</span>
91
- </>
92
- )}
93
- {languageLower === 'vue' && (
94
- <>
95
- <Vue width={20} height={20} class="code-block__language-icon" />
96
- <span class="code-block__language-text">{languageLabel}</span>
97
- </>
98
- )}
99
- {(languageLower === 'bash' || languageLower === 'shell' || languageLower === 'sh') && (
100
- <>
101
- <Bash width={20} height={20} class="code-block__language-icon" />
102
- <span class="code-block__language-text">{languageLabel}</span>
103
- </>
104
- )}
105
- {!['css', 'html', 'javascript', 'nodejs', 'astro', 'plaintext', 'git', 'svelte', 'react', 'jsx', 'tsx', 'vue', 'bash', 'shell', 'sh'].includes(languageLower) && (
106
- <span class="code-block__language-text">{language}</span>
107
- )}
108
- <span class="sr-only">{languageLabel}</span>
109
- </span>
110
- )}
111
- <span class="tooltip-host" data-tooltip="Copy code to clipboard">
112
- <button
113
- type="button"
114
- class="code-block__copy-btn"
115
- aria-label="Copy code to clipboard"
116
- data-code-id={codeId}
117
- id={copyButtonId}
118
- >
119
- <span class="code-block__copy-icon code-block__copy-icon--copy" aria-hidden="true">
120
- <Copy width={20} height={20} />
121
- </span>
122
- <span class="code-block__copy-icon code-block__copy-icon--check" aria-hidden="true">
123
- <Check width={20} height={20} />
124
- </span>
125
- <span class="sr-only">Copy code</span>
126
- </button>
127
- </span>
128
- </div>
129
- <pre><code id={codeId}>{code}</code></pre>
130
- </div>
131
-
132
- <script is:inline>
133
- (function initCodeBlockCopy() {
134
- const init = () => {
135
- const copyButtons = document.querySelectorAll('.code-block__copy-btn');
136
-
137
- copyButtons.forEach((button) => {
138
- if (button.hasAttribute('data-copy-initialized')) return;
139
- button.setAttribute('data-copy-initialized', 'true');
140
-
141
- const codeId = button.getAttribute('data-code-id');
142
- if (!codeId) return;
143
-
144
- const codeElement = document.getElementById(codeId);
145
- if (!codeElement) return;
146
-
147
- const copyIcon = button.querySelector('.code-block__copy-icon--copy');
148
- const checkIcon = button.querySelector('.code-block__copy-icon--check');
149
-
150
- // Remove title elements from SVG icons to prevent tooltip conflicts
151
- const copyIconSvg = copyIcon?.querySelector('svg');
152
- const checkIconSvg = checkIcon?.querySelector('svg');
153
- if (copyIconSvg) {
154
- const copyTitle = copyIconSvg.querySelector('title');
155
- if (copyTitle) copyTitle.remove();
156
- }
157
- if (checkIconSvg) {
158
- const checkTitle = checkIconSvg.querySelector('title');
159
- if (checkTitle) checkTitle.remove();
160
- }
161
-
162
- const copyToClipboard = async () => {
163
- const codeText = codeElement.textContent || '';
164
-
165
- if (!codeText) return;
166
-
167
- try {
168
- await navigator.clipboard.writeText(codeText);
169
-
170
- // Show success state
171
- if (copyIcon) copyIcon.classList.add('code-block__copy-icon--hidden');
172
- if (checkIcon) checkIcon.classList.remove('code-block__copy-icon--hidden');
173
- button.setAttribute('aria-label', 'Code copied!');
174
- const tooltipHost = button.closest('.tooltip-host');
175
- if (tooltipHost) tooltipHost.setAttribute('data-tooltip', 'Code copied!');
176
-
177
- // Reset after 2 seconds
178
- setTimeout(() => {
179
- if (copyIcon) copyIcon.classList.remove('code-block__copy-icon--hidden');
180
- if (checkIcon) checkIcon.classList.add('code-block__copy-icon--hidden');
181
- button.setAttribute('aria-label', 'Copy code to clipboard');
182
- if (tooltipHost) tooltipHost.setAttribute('data-tooltip', 'Copy code to clipboard');
183
- }, 2000);
184
- } catch (err) {
185
- // Fallback for older browsers
186
- const textArea = document.createElement('textarea');
187
- textArea.value = codeText;
188
- textArea.style.position = 'fixed';
189
- textArea.style.left = '-999999px';
190
- document.body.appendChild(textArea);
191
- textArea.focus();
192
- textArea.select();
193
-
194
- try {
195
- document.execCommand('copy');
196
- if (copyIcon) copyIcon.classList.add('code-block__copy-icon--hidden');
197
- if (checkIcon) checkIcon.classList.remove('code-block__copy-icon--hidden');
198
- button.setAttribute('aria-label', 'Code copied!');
199
- const tooltipHostFallback = button.closest('.tooltip-host');
200
- if (tooltipHostFallback) tooltipHostFallback.setAttribute('data-tooltip', 'Code copied!');
201
-
202
- setTimeout(() => {
203
- if (copyIcon) copyIcon.classList.remove('code-block__copy-icon--hidden');
204
- if (checkIcon) checkIcon.classList.add('code-block__copy-icon--hidden');
205
- button.setAttribute('aria-label', 'Copy code to clipboard');
206
- if (tooltipHostFallback) tooltipHostFallback.setAttribute('data-tooltip', 'Copy code to clipboard');
207
- }, 2000);
208
- } catch (fallbackErr) {
209
- console.error('Failed to copy:', fallbackErr);
210
- }
211
-
212
- document.body.removeChild(textArea);
213
- }
214
- };
215
-
216
- button.addEventListener('click', copyToClipboard);
217
-
218
- // Keyboard support
219
- button.addEventListener('keydown', (e) => {
220
- if (e && 'key' in e) {
221
- const keyEvent = e;
222
- if (keyEvent.key === 'Enter' || keyEvent.key === ' ') {
223
- keyEvent.preventDefault();
224
- copyToClipboard();
225
- }
226
- }
227
- });
228
- });
229
- };
230
-
231
- if (document.readyState === 'loading') {
232
- document.addEventListener('DOMContentLoaded', init);
233
- } else {
234
- init();
235
- }
236
- })();
237
- </script>
238
-
239
- <style>
240
- .code-block {
241
- position: relative;
242
- margin: var(--spacing-4) 0;
243
- border-radius: var(--radius-lg);
244
- overflow: visible;
245
- background-color: var(--background-alt);
246
- border: 1px solid var(--border);
247
- }
248
-
249
- .code-block__header {
250
- display: flex;
251
- align-items: center;
252
- justify-content: space-between;
253
- padding: var(--spacing-2) var(--spacing-3);
254
- background-color: var(--background);
255
- border-bottom: 1px solid var(--border);
256
- border-radius: var(--radius-lg) var(--radius-lg) 0 0;
257
- overflow: visible;
258
- position: relative;
259
- z-index: 1;
260
- }
261
-
262
- .code-block__language {
263
- display: flex;
264
- align-items: center;
265
- gap: var(--spacing-2);
266
- font-size: var(--font-size-xs);
267
- color: var(--text-dim);
268
- text-transform: uppercase;
269
- letter-spacing: var(--letter-spacing-wider);
270
- font-weight: var(--font-weight-medium);
271
- }
272
-
273
- .code-block__language-icon {
274
- display: block;
275
- flex-shrink: 0;
276
- color: var(--text-dim);
277
- width: var(--spacing-5); /* 20px - larger for better visibility */
278
- height: var(--spacing-5);
279
- }
280
-
281
- .code-block__language-icon svg {
282
- width: 100%;
283
- height: 100%;
284
- }
285
-
286
- .code-block__language-text {
287
- display: none;
288
- }
289
-
290
- /* Show text next to icon on large screens */
291
- @media (width >= 768px) {
292
- .code-block__language-text {
293
- display: inline;
294
- }
295
- }
296
-
297
- .code-block__copy-btn {
298
- display: flex;
299
- align-items: center;
300
- justify-content: center;
301
- padding: var(--spacing-2);
302
- min-width: var(--spacing-8);
303
- height: var(--spacing-8);
304
- margin-left: auto;
305
- background-color: var(--background-alt);
306
- border: 1px solid var(--border);
307
- border-radius: var(--radius-md);
308
- color: var(--text);
309
- cursor: pointer;
310
- transition: background-color var(--transition-base), border-color var(--transition-base), color var(--transition-base);
311
- position: relative;
312
- }
313
-
314
- .code-block__copy-btn:hover {
315
- background-color: var(--background);
316
- border-color: var(--accent);
317
- color: var(--accent);
318
- }
319
-
320
- .code-block__copy-btn:focus-visible {
321
- outline: var(--outline-width) solid var(--accent);
322
- outline-offset: var(--outline-offset);
323
- }
324
-
325
- .code-block__copy-icon {
326
- position: absolute;
327
- display: flex;
328
- align-items: center;
329
- justify-content: center;
330
- width: var(--spacing-5); /* 20px - larger for better visibility */
331
- height: var(--spacing-5);
332
- transition: opacity var(--transition-base), transform var(--transition-base);
333
- }
334
-
335
- .code-block__copy-icon svg {
336
- width: 100%;
337
- height: 100%;
338
- }
339
-
340
- .code-block__copy-icon--copy {
341
- opacity: 1;
342
- transform: scale(1);
343
- }
344
-
345
- .code-block__copy-icon--check {
346
- opacity: 0;
347
- transform: scale(0.8);
348
- }
349
-
350
- .code-block__copy-icon--check:not(.code-block__copy-icon--hidden) {
351
- opacity: 1;
352
- transform: scale(1);
353
- }
354
-
355
- .code-block__copy-icon--copy.code-block__copy-icon--hidden {
356
- opacity: 0;
357
- transform: scale(0.8);
358
- }
359
-
360
- .code-block pre {
361
- margin: 0;
362
- padding: var(--spacing-4);
363
- overflow-x: auto;
364
- background-color: var(--background-alt);
365
- border-radius: 0 0 var(--radius-lg) var(--radius-lg);
366
- }
367
-
368
- .code-block code {
369
- font-family: var(--font-family-mono);
370
- font-size: var(--font-size-sm);
371
- line-height: var(--line-height-relaxed);
372
- color: var(--text);
373
- white-space: pre;
374
- word-wrap: normal;
375
- }
376
-
377
- @media (width <= 640px) {
378
- .code-block__header {
379
- flex-direction: row; /* Keep horizontal layout on mobile */
380
- align-items: center; /* Vertically center all items */
381
- gap: var(--spacing-2);
382
- }
383
-
384
- .code-block__language {
385
- align-items: center; /* Ensure language icon is vertically centered */
386
- }
387
-
388
- .code-block__copy-btn {
389
- margin-left: auto; /* Push copy button to the right */
390
- flex-shrink: 0; /* Prevent copy button from shrinking */
391
- }
392
- }
393
- </style>
@@ -1,219 +0,0 @@
1
- ---
2
- import Copy from './icons/Copy.astro';
3
- import Check from './icons/Check.astro';
4
-
5
- interface Props {
6
- value: string;
7
- label?: string;
8
- format?: string;
9
- class?: string;
10
- id?: string;
11
- }
12
-
13
- const {
14
- value,
15
- label,
16
- format,
17
- class: className = '',
18
- id,
19
- } = Astro.props;
20
-
21
- const buttonId = id || `copy-btn-${Math.random().toString(36).substr(2, 9)}`;
22
- const defaultTooltip = label || 'Copy to clipboard';
23
- ---
24
-
25
- <span class="tooltip-host" data-tooltip={defaultTooltip}>
26
- <button
27
- type="button"
28
- class={`copy-to-clipboard ${className}`.trim()}
29
- data-copy-value={value}
30
- data-copy-format={format}
31
- aria-label={label || `Copy ${value} to clipboard`}
32
- id={buttonId}
33
- >
34
- <span class="copy-to-clipboard__text">{value}</span>
35
- <span class="copy-to-clipboard__icon copy-to-clipboard__icon--copy" aria-hidden="true">
36
- <Copy width={16} height={16} />
37
- </span>
38
- <span class="copy-to-clipboard__icon copy-to-clipboard__icon--check" aria-hidden="true">
39
- <Check width={16} height={16} />
40
- </span>
41
- <span class="copy-to-clipboard__feedback" aria-live="polite"></span>
42
- </button>
43
- </span>
44
-
45
- <script>
46
- (function initCopyToClipboard() {
47
- // Wait for DOM to be ready
48
- const init = () => {
49
- const buttons = document.querySelectorAll('.copy-to-clipboard');
50
-
51
- buttons.forEach((button) => {
52
- // Skip if already initialized
53
- if (button.hasAttribute('data-copy-initialized')) return;
54
- button.setAttribute('data-copy-initialized', 'true');
55
-
56
- const tooltipHost = button.closest('.tooltip-host');
57
- const defaultTooltip = tooltipHost ? (tooltipHost.getAttribute('data-tooltip') || 'Copy to clipboard') : 'Copy to clipboard';
58
- const defaultAriaLabel = button.getAttribute('aria-label') || 'Copy to clipboard';
59
- if (tooltipHost) tooltipHost.setAttribute('data-tooltip', defaultTooltip);
60
- button.setAttribute('data-copy-aria-label', defaultAriaLabel);
61
- if (tooltipHost) tooltipHost.setAttribute('data-copy-default-tooltip', defaultTooltip);
62
-
63
- const getValue = () => button.getAttribute('data-copy-value') || '';
64
- const getFormat = () => button.getAttribute('data-copy-format') || '';
65
- const feedback = button.querySelector('.copy-to-clipboard__feedback');
66
- const copyIcon = button.querySelector('.copy-to-clipboard__icon--copy');
67
- const checkIcon = button.querySelector('.copy-to-clipboard__icon--check');
68
- const textSpan = button.querySelector('.copy-to-clipboard__text');
69
-
70
- // Update text span with current value
71
- const updateDisplay = () => {
72
- const value = getValue();
73
- if (textSpan) {
74
- textSpan.textContent = value || '';
75
- }
76
- };
77
-
78
- // Initial display update
79
- updateDisplay();
80
-
81
- // Watch for attribute changes (for dynamic updates)
82
- const observer = new MutationObserver((mutations) => {
83
- let shouldUpdate = false;
84
- mutations.forEach((mutation) => {
85
- if (mutation.type === 'attributes') {
86
- if (mutation.attributeName === 'data-copy-value' || mutation.attributeName === 'data-copy-format') {
87
- shouldUpdate = true;
88
- }
89
- }
90
- });
91
- if (shouldUpdate) {
92
- // Use requestAnimationFrame to ensure DOM is ready
93
- requestAnimationFrame(() => {
94
- updateDisplay();
95
- });
96
- }
97
- });
98
- observer.observe(button, {
99
- attributes: true,
100
- attributeFilter: ['data-copy-value', 'data-copy-format'],
101
- attributeOldValue: false
102
- });
103
-
104
- // Listen for custom value-updated event
105
- button.addEventListener('value-updated', (event) => {
106
- if (event && event.detail && event.detail.value) {
107
- updateDisplay();
108
- }
109
- });
110
-
111
- // Fallback: Periodically check for value changes (in case MutationObserver misses something)
112
- let lastValue = getValue();
113
- const intervalId = setInterval(() => {
114
- const currentValue = getValue();
115
- if (currentValue !== lastValue) {
116
- lastValue = currentValue;
117
- updateDisplay();
118
- }
119
- }, 300);
120
-
121
- // Store interval ID for potential cleanup (though we don't need to clean it up in this case)
122
- button.setAttribute('data-copy-interval-id', intervalId.toString());
123
-
124
- const copyToClipboard = async () => {
125
- // Always read fresh value on click (in case it was updated dynamically)
126
- let value = getValue();
127
- const format = getFormat();
128
-
129
- // If value is still empty, try reading from text span as fallback
130
- if (!value && textSpan) {
131
- value = textSpan.textContent || '';
132
- }
133
-
134
- if (!value) {
135
- return;
136
- }
137
-
138
- try {
139
- await navigator.clipboard.writeText(value);
140
-
141
- // Show success state
142
- if (copyIcon) copyIcon.classList.add('copy-to-clipboard__icon--hidden');
143
- if (checkIcon) checkIcon.classList.remove('copy-to-clipboard__icon--hidden');
144
- if (feedback) {
145
- feedback.textContent = format ? `Copied ${format}!` : 'Copied!';
146
- }
147
- const tooltipHost = button.closest('.tooltip-host');
148
- if (tooltipHost) tooltipHost.setAttribute('data-tooltip', format ? `Copied ${format}!` : 'Copied!');
149
- button.setAttribute('aria-label', format ? `Copied ${format}!` : 'Copied!');
150
-
151
- // Reset after 2 seconds
152
- setTimeout(() => {
153
- if (copyIcon) copyIcon.classList.remove('copy-to-clipboard__icon--hidden');
154
- if (checkIcon) checkIcon.classList.add('copy-to-clipboard__icon--hidden');
155
- if (feedback) {
156
- feedback.textContent = '';
157
- }
158
- if (tooltipHost) tooltipHost.setAttribute('data-tooltip', tooltipHost.getAttribute('data-copy-default-tooltip') || defaultTooltip);
159
- button.setAttribute('aria-label', defaultAriaLabel);
160
- }, 2000);
161
- } catch (err) {
162
- // Fallback for older browsers
163
- const textArea = document.createElement('textarea');
164
- textArea.value = value;
165
- textArea.style.position = 'fixed';
166
- textArea.style.left = '-999999px';
167
- document.body.appendChild(textArea);
168
- textArea.focus();
169
- textArea.select();
170
-
171
- try {
172
- document.execCommand('copy');
173
- if (copyIcon) copyIcon.classList.add('copy-to-clipboard__icon--hidden');
174
- if (checkIcon) checkIcon.classList.remove('copy-to-clipboard__icon--hidden');
175
- if (feedback) {
176
- feedback.textContent = format ? `Copied ${format}!` : 'Copied!';
177
- }
178
- const tooltipHostFb = button.closest('.tooltip-host');
179
- if (tooltipHostFb) tooltipHostFb.setAttribute('data-tooltip', format ? `Copied ${format}!` : 'Copied!');
180
- button.setAttribute('aria-label', format ? `Copied ${format}!` : 'Copied!');
181
-
182
- setTimeout(() => {
183
- if (copyIcon) copyIcon.classList.remove('copy-to-clipboard__icon--hidden');
184
- if (checkIcon) checkIcon.classList.add('copy-to-clipboard__icon--hidden');
185
- if (feedback) {
186
- feedback.textContent = '';
187
- }
188
- if (tooltipHostFb) tooltipHostFb.setAttribute('data-tooltip', tooltipHostFb.getAttribute('data-copy-default-tooltip') || defaultTooltip);
189
- button.setAttribute('aria-label', defaultAriaLabel);
190
- }, 2000);
191
- } catch (fallbackErr) {
192
- if (feedback) {
193
- feedback.textContent = 'Failed to copy';
194
- }
195
- }
196
-
197
- document.body.removeChild(textArea);
198
- }
199
- };
200
-
201
- button.addEventListener('click', copyToClipboard);
202
-
203
- // Keyboard support
204
- button.addEventListener('keydown', (e) => {
205
- if (e.key === 'Enter' || e.key === ' ') {
206
- e.preventDefault();
207
- copyToClipboard();
208
- }
209
- });
210
- });
211
- };
212
-
213
- if (document.readyState === 'loading') {
214
- document.addEventListener('DOMContentLoaded', init);
215
- } else {
216
- init();
217
- }
218
- })();
219
- </script>
@@ -1,37 +0,0 @@
1
- ---
2
- interface Props {
3
- /** Orientation of the divider line */
4
- orientation?: 'horizontal' | 'vertical';
5
- /** Optional label (e.g. "OR") shown in the middle; only used for horizontal */
6
- label?: string;
7
- class?: string;
8
- }
9
-
10
- const {
11
- orientation = 'horizontal',
12
- label,
13
- class: className = '',
14
- } = Astro.props;
15
-
16
- const orientationClass = `divider--${orientation}`;
17
- const hasLabel = Boolean(label && label.trim());
18
- const labelClass = hasLabel ? 'divider--labeled' : '';
19
- const classes = `divider ${orientationClass} ${labelClass} ${className}`.trim();
20
- ---
21
-
22
- <div
23
- class={classes}
24
- role="separator"
25
- aria-orientation={orientation}
26
- aria-label={label?.trim() || undefined}
27
- >
28
- {hasLabel && orientation === 'horizontal' ? (
29
- <>
30
- <span class="divider__line" aria-hidden="true" />
31
- <span class="divider__label">{label!.trim()}</span>
32
- <span class="divider__line" aria-hidden="true" />
33
- </>
34
- ) : (
35
- <span class="divider__line" aria-hidden="true" />
36
- )}
37
- </div>
@@ -1,51 +0,0 @@
1
- ---
2
- import { DOCS_NAV } from '../config/docsNav';
3
- import type { Framework } from '../config/frameworks';
4
-
5
- interface Props {
6
- currentPath: string;
7
- framework: Framework;
8
- }
9
-
10
- const { currentPath, framework } = Astro.props;
11
- const pathPrefix = framework.pathPrefix; // /docs or /docs/svelte or /docs/vanilla
12
-
13
- function fullHref(link: { href: string; frameworkOnly?: boolean }) {
14
- const base = link.frameworkOnly ? pathPrefix : '/docs';
15
- return `${base}/${link.href}`;
16
- }
17
-
18
- function isActive(link: { href: string; frameworkOnly?: boolean }): boolean {
19
- const path = currentPath.replace(/\/$/, '');
20
- const href = fullHref(link);
21
- if (path === href) return true;
22
- if (path.startsWith(href + '/')) return true;
23
- return false;
24
- }
25
- ---
26
-
27
- <aside id="docs-sidebar" class="docs-sidebar" aria-label="Documentation navigation">
28
- <nav class="docs-sidebar__nav">
29
- {DOCS_NAV.map((group) => (
30
- <div class="docs-sidebar__group">
31
- <h2 class="docs-sidebar__group-label">{group.label}</h2>
32
- <ul class="docs-sidebar__list">
33
- {group.links.map((link) => {
34
- const href = fullHref(link);
35
- const active = isActive(link);
36
- return (
37
- <li class="docs-sidebar__item">
38
- <a
39
- href={href}
40
- class={`docs-sidebar__link ${active ? 'docs-sidebar__link--active' : ''}`}
41
- >
42
- {link.label}
43
- </a>
44
- </li>
45
- );
46
- })}
47
- </ul>
48
- </div>
49
- ))}
50
- </nav>
51
- </aside>