rizzo-css 0.0.17 → 0.0.19

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 (261) hide show
  1. package/README.md +4 -4
  2. package/bin/rizzo-css.js +329 -118
  3. package/dist/rizzo.min.css +3 -3
  4. package/package.json +7 -3
  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/CliCommandTabs.astro +0 -90
  57. package/scaffold/astro-app/src/components/CodeBlock.astro +0 -393
  58. package/scaffold/astro-app/src/components/CopyToClipboard.astro +0 -219
  59. package/scaffold/astro-app/src/components/Divider.astro +0 -37
  60. package/scaffold/astro-app/src/components/DocsSidebar.astro +0 -51
  61. package/scaffold/astro-app/src/components/Dropdown.astro +0 -807
  62. package/scaffold/astro-app/src/components/FormGroup.astro +0 -59
  63. package/scaffold/astro-app/src/components/FrameworkSwitcher.astro +0 -72
  64. package/scaffold/astro-app/src/components/Input.astro +0 -59
  65. package/scaffold/astro-app/src/components/Modal.astro +0 -212
  66. package/scaffold/astro-app/src/components/Navbar.astro +0 -623
  67. package/scaffold/astro-app/src/components/PackageInstallTabs.astro +0 -87
  68. package/scaffold/astro-app/src/components/Pagination.astro +0 -240
  69. package/scaffold/astro-app/src/components/ProgressBar.astro +0 -65
  70. package/scaffold/astro-app/src/components/Radio.astro +0 -38
  71. package/scaffold/astro-app/src/components/Search.astro +0 -1259
  72. package/scaffold/astro-app/src/components/Select.astro +0 -49
  73. package/scaffold/astro-app/src/components/Settings.astro +0 -382
  74. package/scaffold/astro-app/src/components/Spinner.astro +0 -30
  75. package/scaffold/astro-app/src/components/Table.astro +0 -181
  76. package/scaffold/astro-app/src/components/Tabs.astro +0 -223
  77. package/scaffold/astro-app/src/components/Textarea.astro +0 -58
  78. package/scaffold/astro-app/src/components/ThemeIcon.astro +0 -50
  79. package/scaffold/astro-app/src/components/ThemeSwitcher.astro +0 -504
  80. package/scaffold/astro-app/src/components/Toast.astro +0 -30
  81. package/scaffold/astro-app/src/components/Tooltip.astro +0 -32
  82. package/scaffold/astro-app/src/components/icons/Brush.astro +0 -10
  83. package/scaffold/astro-app/src/components/icons/Cake.astro +0 -11
  84. package/scaffold/astro-app/src/components/icons/Check.astro +0 -29
  85. package/scaffold/astro-app/src/components/icons/Cherry.astro +0 -11
  86. package/scaffold/astro-app/src/components/icons/ChevronDown.astro +0 -29
  87. package/scaffold/astro-app/src/components/icons/Circle.astro +0 -29
  88. package/scaffold/astro-app/src/components/icons/Close.astro +0 -30
  89. package/scaffold/astro-app/src/components/icons/Cmd.astro +0 -26
  90. package/scaffold/astro-app/src/components/icons/Copy.astro +0 -30
  91. package/scaffold/astro-app/src/components/icons/Eye.astro +0 -30
  92. package/scaffold/astro-app/src/components/icons/Filter.astro +0 -29
  93. package/scaffold/astro-app/src/components/icons/Flame.astro +0 -28
  94. package/scaffold/astro-app/src/components/icons/Flower.astro +0 -11
  95. package/scaffold/astro-app/src/components/icons/Gear.astro +0 -30
  96. package/scaffold/astro-app/src/components/icons/Heart.astro +0 -28
  97. package/scaffold/astro-app/src/components/icons/IceCream.astro +0 -31
  98. package/scaffold/astro-app/src/components/icons/Leaf.astro +0 -29
  99. package/scaffold/astro-app/src/components/icons/Lemon.astro +0 -11
  100. package/scaffold/astro-app/src/components/icons/Moon.astro +0 -29
  101. package/scaffold/astro-app/src/components/icons/Owl.astro +0 -34
  102. package/scaffold/astro-app/src/components/icons/Palette.astro +0 -33
  103. package/scaffold/astro-app/src/components/icons/Rainbow.astro +0 -31
  104. package/scaffold/astro-app/src/components/icons/Search.astro +0 -30
  105. package/scaffold/astro-app/src/components/icons/Shield.astro +0 -28
  106. package/scaffold/astro-app/src/components/icons/Snowflake.astro +0 -34
  107. package/scaffold/astro-app/src/components/icons/Sort.astro +0 -30
  108. package/scaffold/astro-app/src/components/icons/Sun.astro +0 -29
  109. package/scaffold/astro-app/src/components/icons/Sunset.astro +0 -10
  110. package/scaffold/astro-app/src/components/icons/Zap.astro +0 -9
  111. package/scaffold/astro-app/src/components/icons/devicons/Astro.astro +0 -53
  112. package/scaffold/astro-app/src/components/icons/devicons/Bash.astro +0 -34
  113. package/scaffold/astro-app/src/components/icons/devicons/Css3.astro +0 -29
  114. package/scaffold/astro-app/src/components/icons/devicons/Git.astro +0 -24
  115. package/scaffold/astro-app/src/components/icons/devicons/Html5.astro +0 -27
  116. package/scaffold/astro-app/src/components/icons/devicons/Javascript.astro +0 -25
  117. package/scaffold/astro-app/src/components/icons/devicons/Nodejs.astro +0 -47
  118. package/scaffold/astro-app/src/components/icons/devicons/Plaintext.astro +0 -33
  119. package/scaffold/astro-app/src/components/icons/devicons/React.astro +0 -27
  120. package/scaffold/astro-app/src/components/icons/devicons/Svelte.astro +0 -25
  121. package/scaffold/astro-app/src/components/icons/devicons/Vue.astro +0 -26
  122. package/scaffold/astro-app/src/config/frameworks.ts +0 -26
  123. package/scaffold/astro-app/src/config/themes.ts +0 -54
  124. package/scaffold/astro-app/src/layouts/DocsLayout.astro +0 -263
  125. package/scaffold/astro-app/src/layouts/Layout.astro +0 -41
  126. package/scaffold/astro-app/src/pages/components/accordion.astro +0 -172
  127. package/scaffold/astro-app/src/pages/components/alert.astro +0 -250
  128. package/scaffold/astro-app/src/pages/components/avatar.astro +0 -102
  129. package/scaffold/astro-app/src/pages/components/badge.astro +0 -119
  130. package/scaffold/astro-app/src/pages/components/breadcrumb.astro +0 -124
  131. package/scaffold/astro-app/src/pages/components/button.astro +0 -74
  132. package/scaffold/astro-app/src/pages/components/cards.astro +0 -247
  133. package/scaffold/astro-app/src/pages/components/copy-to-clipboard.astro +0 -49
  134. package/scaffold/astro-app/src/pages/components/divider.astro +0 -74
  135. package/scaffold/astro-app/src/pages/components/dropdown.astro +0 -394
  136. package/scaffold/astro-app/src/pages/components/forms.astro +0 -367
  137. package/scaffold/astro-app/src/pages/components/icons.astro +0 -246
  138. package/scaffold/astro-app/src/pages/components/modal.astro +0 -152
  139. package/scaffold/astro-app/src/pages/components/navbar.astro +0 -80
  140. package/scaffold/astro-app/src/pages/components/pagination.astro +0 -126
  141. package/scaffold/astro-app/src/pages/components/progress-bar.astro +0 -94
  142. package/scaffold/astro-app/src/pages/components/search.astro +0 -155
  143. package/scaffold/astro-app/src/pages/components/settings.astro +0 -78
  144. package/scaffold/astro-app/src/pages/components/spinner.astro +0 -81
  145. package/scaffold/astro-app/src/pages/components/table.astro +0 -144
  146. package/scaffold/astro-app/src/pages/components/tabs.astro +0 -220
  147. package/scaffold/astro-app/src/pages/components/theme-switcher.astro +0 -69
  148. package/scaffold/astro-app/src/pages/components/toast.astro +0 -157
  149. package/scaffold/astro-app/src/pages/components/tooltip.astro +0 -209
  150. package/scaffold/astro-app/src/pages/components.astro +0 -290
  151. package/scaffold/astro-app/src/pages/docs/accessibility.astro +0 -9
  152. package/scaffold/astro-app/src/pages/docs/colors.astro +0 -9
  153. package/scaffold/astro-app/src/pages/docs/design-system.astro +0 -9
  154. package/scaffold/astro-app/src/pages/docs/getting-started.astro +0 -9
  155. package/scaffold/astro-app/src/pages/docs/index.astro +0 -15
  156. package/scaffold/astro-app/src/pages/docs/themes/[theme].astro +0 -14
  157. package/scaffold/astro-app/src/pages/docs/theming.astro +0 -10
  158. package/scaffold/astro-app/src/pages/index.astro +0 -24
  159. package/scaffold/svelte-app/README.md +0 -39
  160. package/scaffold/svelte-app/package.json +0 -22
  161. package/scaffold/svelte-app/src/app.d.ts +0 -28
  162. package/scaffold/svelte-app/src/app.html +0 -21
  163. package/scaffold/svelte-app/src/lib/assets/favicon.svg +0 -1
  164. package/scaffold/svelte-app/src/lib/rizzo/Accordion.svelte +0 -128
  165. package/scaffold/svelte-app/src/lib/rizzo/Alert.svelte +0 -85
  166. package/scaffold/svelte-app/src/lib/rizzo/Avatar.svelte +0 -39
  167. package/scaffold/svelte-app/src/lib/rizzo/Badge.svelte +0 -31
  168. package/scaffold/svelte-app/src/lib/rizzo/Breadcrumb.svelte +0 -49
  169. package/scaffold/svelte-app/src/lib/rizzo/Button.svelte +0 -27
  170. package/scaffold/svelte-app/src/lib/rizzo/Card.svelte +0 -17
  171. package/scaffold/svelte-app/src/lib/rizzo/Checkbox.svelte +0 -37
  172. package/scaffold/svelte-app/src/lib/rizzo/CopyToClipboard.svelte +0 -79
  173. package/scaffold/svelte-app/src/lib/rizzo/Divider.svelte +0 -28
  174. package/scaffold/svelte-app/src/lib/rizzo/Dropdown.svelte +0 -254
  175. package/scaffold/svelte-app/src/lib/rizzo/FormGroup.svelte +0 -51
  176. package/scaffold/svelte-app/src/lib/rizzo/Input.svelte +0 -59
  177. package/scaffold/svelte-app/src/lib/rizzo/Modal.svelte +0 -157
  178. package/scaffold/svelte-app/src/lib/rizzo/Pagination.svelte +0 -93
  179. package/scaffold/svelte-app/src/lib/rizzo/ProgressBar.svelte +0 -58
  180. package/scaffold/svelte-app/src/lib/rizzo/Radio.svelte +0 -38
  181. package/scaffold/svelte-app/src/lib/rizzo/Select.svelte +0 -51
  182. package/scaffold/svelte-app/src/lib/rizzo/Spinner.svelte +0 -14
  183. package/scaffold/svelte-app/src/lib/rizzo/Table.svelte +0 -158
  184. package/scaffold/svelte-app/src/lib/rizzo/Tabs.svelte +0 -117
  185. package/scaffold/svelte-app/src/lib/rizzo/Textarea.svelte +0 -59
  186. package/scaffold/svelte-app/src/lib/rizzo/ThemeIcon.svelte +0 -54
  187. package/scaffold/svelte-app/src/lib/rizzo/ThemeSwitcher.svelte +0 -315
  188. package/scaffold/svelte-app/src/lib/rizzo/Toast.svelte +0 -33
  189. package/scaffold/svelte-app/src/lib/rizzo/Tooltip.svelte +0 -19
  190. package/scaffold/svelte-app/src/lib/rizzo/icons/Check.svelte +0 -29
  191. package/scaffold/svelte-app/src/lib/rizzo/icons/ChevronDown.svelte +0 -29
  192. package/scaffold/svelte-app/src/lib/rizzo/icons/Circle.svelte +0 -29
  193. package/scaffold/svelte-app/src/lib/rizzo/icons/Close.svelte +0 -30
  194. package/scaffold/svelte-app/src/lib/rizzo/icons/Cmd.svelte +0 -27
  195. package/scaffold/svelte-app/src/lib/rizzo/icons/Copy.svelte +0 -30
  196. package/scaffold/svelte-app/src/lib/rizzo/icons/Eye.svelte +0 -30
  197. package/scaffold/svelte-app/src/lib/rizzo/icons/Filter.svelte +0 -29
  198. package/scaffold/svelte-app/src/lib/rizzo/icons/Gear.svelte +0 -30
  199. package/scaffold/svelte-app/src/lib/rizzo/icons/IceCream.svelte +0 -31
  200. package/scaffold/svelte-app/src/lib/rizzo/icons/Moon.svelte +0 -29
  201. package/scaffold/svelte-app/src/lib/rizzo/icons/Owl.svelte +0 -34
  202. package/scaffold/svelte-app/src/lib/rizzo/icons/Palette.svelte +0 -33
  203. package/scaffold/svelte-app/src/lib/rizzo/icons/Rainbow.svelte +0 -31
  204. package/scaffold/svelte-app/src/lib/rizzo/icons/Search.svelte +0 -30
  205. package/scaffold/svelte-app/src/lib/rizzo/icons/Snowflake.svelte +0 -34
  206. package/scaffold/svelte-app/src/lib/rizzo/icons/Sort.svelte +0 -30
  207. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Astro.svelte +0 -45
  208. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Bash.svelte +0 -28
  209. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Css3.svelte +0 -23
  210. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Git.svelte +0 -18
  211. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Html5.svelte +0 -21
  212. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Javascript.svelte +0 -19
  213. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Nodejs.svelte +0 -44
  214. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Plaintext.svelte +0 -24
  215. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/React.svelte +0 -21
  216. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/SvelteIcon.svelte +0 -19
  217. package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Vue.svelte +0 -20
  218. package/scaffold/svelte-app/src/lib/rizzo/index.ts +0 -35
  219. package/scaffold/svelte-app/src/lib/rizzo-docs/CodeBlock.svelte +0 -239
  220. package/scaffold/svelte-app/src/lib/rizzo-docs/SvelteDocPage.svelte +0 -99
  221. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AccordionDoc.svelte +0 -53
  222. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AlertDoc.svelte +0 -114
  223. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AvatarDoc.svelte +0 -92
  224. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BadgeDoc.svelte +0 -60
  225. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BreadcrumbDoc.svelte +0 -55
  226. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ButtonDoc.svelte +0 -55
  227. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CardsDoc.svelte +0 -173
  228. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComingSoon.svelte +0 -12
  229. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComponentsOverview.svelte +0 -92
  230. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CopyToClipboardDoc.svelte +0 -26
  231. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DividerDoc.svelte +0 -105
  232. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DropdownDoc.svelte +0 -161
  233. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/FormsDoc.svelte +0 -375
  234. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/IconsDoc.svelte +0 -246
  235. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Index.svelte +0 -8
  236. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ModalDoc.svelte +0 -50
  237. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/NavbarDoc.svelte +0 -79
  238. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/PaginationDoc.svelte +0 -44
  239. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ProgressBarDoc.svelte +0 -95
  240. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SearchDoc.svelte +0 -147
  241. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SettingsDoc.svelte +0 -158
  242. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SpinnerDoc.svelte +0 -41
  243. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TableDoc.svelte +0 -116
  244. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TabsDoc.svelte +0 -152
  245. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ThemeSwitcherDoc.svelte +0 -189
  246. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Theming.svelte +0 -6
  247. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ToastDoc.svelte +0 -136
  248. package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TooltipDoc.svelte +0 -57
  249. package/scaffold/svelte-app/src/routes/+layout.svelte +0 -10
  250. package/scaffold/svelte-app/src/routes/+page.svelte +0 -31
  251. package/scaffold/svelte-app/src/routes/components/+page.svelte +0 -4
  252. package/scaffold/svelte-app/src/routes/components/[slug]/+page.svelte +0 -7
  253. package/scaffold/svelte-app/static/robots.txt +0 -3
  254. package/scaffold/svelte-app/svelte.config.js +0 -13
  255. package/scaffold/svelte-app/tsconfig.json +0 -21
  256. package/scaffold/svelte-app/vite.config.ts +0 -6
  257. /package/scaffold/{astro-app → astro-minimal}/astro.config.mjs +0 -0
  258. /package/scaffold/{astro-app → astro-minimal}/public/.gitkeep +0 -0
  259. /package/scaffold/{astro-app → astro-minimal}/public/favicon.svg +0 -0
  260. /package/scaffold/{astro-app → astro-minimal}/tsconfig.json +0 -0
  261. /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>