fulldev-ui 0.9.3 → 0.10.0

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 (258) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +100 -16
  3. package/package.json +3 -2
  4. package/public/r/accordion.json +3 -5
  5. package/public/r/alert-dialog.json +1 -1
  6. package/public/r/alert.json +0 -5
  7. package/public/r/article-1.json +1 -1
  8. package/public/r/article-2.json +1 -1
  9. package/public/r/articles-1.json +1 -1
  10. package/public/r/articles-2.json +1 -1
  11. package/public/r/articles-3.json +1 -1
  12. package/public/r/avatar.json +1 -16
  13. package/public/r/badge.json +1 -1
  14. package/public/r/banner-1.json +5 -3
  15. package/public/r/banner-2.json +1 -1
  16. package/public/r/banner.json +5 -3
  17. package/public/r/blocks-1.json +6 -3
  18. package/public/r/breadcrumb.json +4 -4
  19. package/public/r/button.json +1 -1
  20. package/public/r/card.json +4 -4
  21. package/public/r/carousel.json +5 -5
  22. package/public/r/checkbox.json +1 -1
  23. package/public/r/combobox.json +8 -8
  24. package/public/r/command.json +6 -6
  25. package/public/r/components.json +1 -7
  26. package/public/r/contact-1.json +4 -2
  27. package/public/r/contact-2.json +4 -2
  28. package/public/r/contact-3.json +11 -3
  29. package/public/r/content-1.json +11 -3
  30. package/public/r/content-2.json +11 -3
  31. package/public/r/content-3.json +7 -1
  32. package/public/r/content-4.json +11 -3
  33. package/public/r/cta-2.json +7 -1
  34. package/public/r/cta-4.json +7 -1
  35. package/public/r/cta-5.json +11 -3
  36. package/public/r/cta-6.json +7 -1
  37. package/public/r/dialog.json +6 -6
  38. package/public/r/doc-1.json +6 -3
  39. package/public/r/dropdown-menu.json +9 -11
  40. package/public/r/features-1.json +5 -3
  41. package/public/r/features-2.json +5 -3
  42. package/public/r/features-4.json +5 -3
  43. package/public/r/features-5.json +4 -2
  44. package/public/r/field.json +2 -7
  45. package/public/r/footer-1.json +5 -3
  46. package/public/r/footer-2.json +5 -3
  47. package/public/r/footer-3.json +5 -3
  48. package/public/r/header-1.json +1 -1
  49. package/public/r/header.json +3 -0
  50. package/public/r/hero-13.json +1 -1
  51. package/public/r/hero-4.json +5 -3
  52. package/public/r/hero-5.json +5 -3
  53. package/public/r/hero-6.json +5 -3
  54. package/public/r/hero-7.json +5 -3
  55. package/public/r/hero-8.json +1 -1
  56. package/public/r/hero-9.json +5 -3
  57. package/public/r/hover-card.json +2 -2
  58. package/public/r/icon.json +1 -1
  59. package/public/r/input-group.json +1 -1
  60. package/public/r/item.json +2 -20
  61. package/public/r/kbd.json +2 -2
  62. package/public/r/layout.json +4 -7
  63. package/public/r/links-2.json +5 -3
  64. package/public/r/marquee.json +1 -1
  65. package/public/r/native-select.json +3 -3
  66. package/public/r/navigation-menu.json +6 -8
  67. package/public/r/page.json +17 -0
  68. package/public/r/popover.json +1 -1
  69. package/public/r/pricing-1.json +5 -3
  70. package/public/r/pricing-2.json +5 -3
  71. package/public/r/pricing-3.json +5 -3
  72. package/public/r/products-1.json +1 -1
  73. package/public/r/products-4.json +1 -1
  74. package/public/r/products-5.json +1 -1
  75. package/public/r/radio-group.json +1 -1
  76. package/public/r/rating.json +3 -3
  77. package/public/r/registry.json +186 -450
  78. package/public/r/reviews-1.json +5 -3
  79. package/public/r/reviews-2.json +5 -3
  80. package/public/r/reviews-3.json +5 -3
  81. package/public/r/reviews-4.json +1 -1
  82. package/public/r/reviews-5.json +5 -3
  83. package/public/r/select.json +6 -8
  84. package/public/r/services-1.json +11 -3
  85. package/public/r/services-2.json +7 -1
  86. package/public/r/services-3.json +7 -1
  87. package/public/r/services-4.json +11 -3
  88. package/public/r/services-5.json +5 -3
  89. package/public/r/services-6.json +11 -3
  90. package/public/r/services-7.json +11 -3
  91. package/public/r/sheet.json +6 -3
  92. package/public/r/sidebar-1.json +4 -2
  93. package/public/r/sidebar.json +10 -7
  94. package/public/r/slider.json +1 -1
  95. package/public/r/spinner.json +3 -3
  96. package/public/r/switch.json +1 -1
  97. package/public/r/theme-toggle.json +5 -3
  98. package/public/r/tooltip.json +1 -1
  99. package/public/r/typography.json +16 -16
  100. package/public/r/video.json +1 -1
  101. package/registry.json +186 -450
  102. package/src/components/blocks/article-1.astro +1 -1
  103. package/src/components/blocks/article-2.astro +1 -1
  104. package/src/components/blocks/articles-1.astro +1 -1
  105. package/src/components/blocks/articles-2.astro +2 -2
  106. package/src/components/blocks/articles-3.astro +1 -1
  107. package/src/components/blocks/banner-1.astro +3 -5
  108. package/src/components/blocks/banner-2.astro +1 -1
  109. package/src/components/blocks/blocks-1.astro +25 -37
  110. package/src/components/blocks/contact-3.astro +4 -3
  111. package/src/components/blocks/content-1.astro +5 -4
  112. package/src/components/blocks/content-2.astro +6 -5
  113. package/src/components/blocks/content-3.astro +9 -2
  114. package/src/components/blocks/content-4.astro +6 -5
  115. package/src/components/blocks/cta-2.astro +4 -3
  116. package/src/components/blocks/cta-4.astro +3 -2
  117. package/src/components/blocks/cta-5.astro +6 -5
  118. package/src/components/blocks/cta-6.astro +4 -3
  119. package/src/components/blocks/doc-1.astro +28 -56
  120. package/src/components/blocks/features-1.astro +3 -1
  121. package/src/components/blocks/features-2.astro +4 -2
  122. package/src/components/blocks/features-4.astro +3 -1
  123. package/src/components/blocks/footer-1.astro +26 -12
  124. package/src/components/blocks/footer-2.astro +24 -12
  125. package/src/components/blocks/footer-3.astro +26 -12
  126. package/src/components/blocks/header-1.astro +2 -3
  127. package/src/components/blocks/hero-13.astro +1 -1
  128. package/src/components/blocks/hero-4.astro +2 -2
  129. package/src/components/blocks/hero-5.astro +3 -3
  130. package/src/components/blocks/hero-6.astro +3 -3
  131. package/src/components/blocks/hero-7.astro +3 -3
  132. package/src/components/blocks/hero-8.astro +1 -1
  133. package/src/components/blocks/hero-9.astro +2 -2
  134. package/src/components/blocks/links-2.astro +3 -5
  135. package/src/components/blocks/pricing-1.astro +3 -2
  136. package/src/components/blocks/pricing-2.astro +3 -2
  137. package/src/components/blocks/pricing-3.astro +3 -2
  138. package/src/components/blocks/products-1.astro +1 -1
  139. package/src/components/blocks/products-4.astro +2 -2
  140. package/src/components/blocks/products-5.astro +4 -4
  141. package/src/components/blocks/reviews-1.astro +2 -2
  142. package/src/components/blocks/reviews-2.astro +2 -2
  143. package/src/components/blocks/reviews-3.astro +2 -2
  144. package/src/components/blocks/reviews-4.astro +4 -4
  145. package/src/components/blocks/reviews-5.astro +16 -25
  146. package/src/components/blocks/services-1.astro +7 -9
  147. package/src/components/blocks/services-2.astro +5 -4
  148. package/src/components/blocks/services-3.astro +6 -5
  149. package/src/components/blocks/services-4.astro +7 -9
  150. package/src/components/blocks/services-5.astro +3 -4
  151. package/src/components/blocks/services-6.astro +7 -6
  152. package/src/components/blocks/services-7.astro +7 -9
  153. package/src/components/blocks/sidebar-1.astro +42 -97
  154. package/src/components/ui/accordion/accordion-trigger.astro +7 -8
  155. package/src/components/ui/alert-dialog/alert-dialog.astro +23 -3
  156. package/src/components/ui/avatar/avatar.astro +1 -1
  157. package/src/components/ui/badge/badge.astro +1 -0
  158. package/src/components/ui/banner/banner-container.astro +3 -3
  159. package/src/components/ui/breadcrumb/breadcrumb-ellipsis.astro +2 -2
  160. package/src/components/ui/breadcrumb/breadcrumb-separator.astro +2 -2
  161. package/src/components/ui/button/button-variants.ts +8 -7
  162. package/src/components/ui/card/card-content.astro +1 -1
  163. package/src/components/ui/card/card-footer.astro +1 -1
  164. package/src/components/ui/card/card-header.astro +1 -1
  165. package/src/components/ui/card/card.astro +1 -1
  166. package/src/components/ui/carousel/carousel-next.astro +3 -3
  167. package/src/components/ui/carousel/carousel-previous.astro +3 -3
  168. package/src/components/ui/checkbox/checkbox.astro +1 -1
  169. package/src/components/ui/combobox/combobox-input.astro +2 -2
  170. package/src/components/ui/combobox/combobox-item.astro +4 -4
  171. package/src/components/ui/combobox/combobox-list.astro +1 -1
  172. package/src/components/ui/combobox/combobox-trigger.astro +2 -5
  173. package/src/components/ui/combobox/combobox.astro +3 -0
  174. package/src/components/ui/command/command-dialog.astro +10 -10
  175. package/src/components/ui/command/command-input.astro +2 -2
  176. package/src/components/ui/command/command-item.astro +4 -5
  177. package/src/components/ui/dialog/dialog-close.astro +2 -2
  178. package/src/components/ui/dialog/dialog-content.astro +2 -2
  179. package/src/components/ui/dialog/dialog.astro +26 -3
  180. package/src/components/ui/dropdown-menu/dropdown-menu-checkbox-item.astro +4 -5
  181. package/src/components/ui/dropdown-menu/dropdown-menu-content.astro +4 -4
  182. package/src/components/ui/dropdown-menu/dropdown-menu-item.astro +1 -1
  183. package/src/components/ui/dropdown-menu/dropdown-menu-label.astro +1 -1
  184. package/src/components/ui/dropdown-menu/dropdown-menu-radio-item.astro +4 -5
  185. package/src/components/ui/dropdown-menu/dropdown-menu-shortcut.astro +1 -1
  186. package/src/components/ui/dropdown-menu/dropdown-menu.astro +3 -0
  187. package/src/components/ui/field/field-label.astro +1 -1
  188. package/src/components/ui/field/field-title.astro +1 -1
  189. package/src/components/ui/hover-card/hover-card-content.astro +4 -4
  190. package/src/components/ui/hover-card/hover-card.astro +2 -2
  191. package/src/components/ui/icon/icon.astro +8 -17
  192. package/src/components/ui/input-group/input-group-button.astro +0 -1
  193. package/src/components/ui/item/item-media.astro +1 -1
  194. package/src/components/ui/item/item.astro +0 -18
  195. package/src/components/ui/kbd/kbd-group.astro +1 -1
  196. package/src/components/ui/kbd/kbd.astro +1 -1
  197. package/src/components/ui/layout/layout-body.astro +1 -1
  198. package/src/components/ui/layout/layout-head.astro +3 -2
  199. package/src/components/ui/layout/layout-main.astro +1 -1
  200. package/src/components/ui/layout/layout.astro +4 -0
  201. package/src/components/ui/marquee/marquee.astro +50 -69
  202. package/src/components/ui/native-select/native-select.astro +2 -3
  203. package/src/components/ui/navigation-menu/navigation-menu-content.astro +1 -1
  204. package/src/components/ui/navigation-menu/navigation-menu-list.astro +1 -1
  205. package/src/components/ui/navigation-menu/navigation-menu-trigger.astro +2 -3
  206. package/src/components/ui/navigation-menu/navigation-menu.astro +1 -1
  207. package/src/components/ui/popover/popover-content.astro +1 -1
  208. package/src/components/ui/radio-group/radio-group-item.astro +3 -3
  209. package/src/components/ui/rating/rating.astro +3 -3
  210. package/src/components/ui/select/select-content.astro +1 -1
  211. package/src/components/ui/select/select-item.astro +4 -4
  212. package/src/components/ui/select/select-trigger.astro +3 -6
  213. package/src/components/ui/select/select.astro +6 -0
  214. package/src/components/ui/sheet/sheet-content.astro +4 -5
  215. package/src/components/ui/sidebar/sidebar-menu-button.astro +13 -10
  216. package/src/components/ui/sidebar/sidebar-menu-sub-button.astro +10 -8
  217. package/src/components/ui/sidebar/sidebar-provider.astro +1 -13
  218. package/src/components/ui/sidebar/sidebar-rail.astro +1 -1
  219. package/src/components/ui/sidebar/sidebar-trigger.astro +3 -3
  220. package/src/components/ui/sidebar/sidebar.astro +1 -1
  221. package/src/components/ui/slider/slider.astro +6 -4
  222. package/src/components/ui/spinner/spinner.astro +4 -4
  223. package/src/components/ui/switch/switch.astro +1 -1
  224. package/src/components/ui/theme-toggle/theme-toggle.astro +4 -3
  225. package/src/components/ui/tooltip/tooltip-content.astro +1 -1
  226. package/src/components/ui/typography/typography-a.astro +19 -4
  227. package/src/components/ui/typography/typography-blockquote.astro +26 -6
  228. package/src/components/ui/typography/typography-h1.astro +7 -9
  229. package/src/components/ui/typography/typography-h2.astro +12 -9
  230. package/src/components/ui/typography/typography-h3.astro +7 -9
  231. package/src/components/ui/typography/typography-h4.astro +7 -9
  232. package/src/components/ui/typography/typography-inline-code.astro +28 -12
  233. package/src/components/ui/typography/typography-lead.astro +29 -4
  234. package/src/components/ui/typography/typography-list-item.astro +25 -9
  235. package/src/components/ui/typography/typography-list.astro +29 -11
  236. package/src/components/ui/typography/typography-p.astro +26 -6
  237. package/src/components/ui/typography/typography-table-cell.astro +32 -13
  238. package/src/components/ui/typography/typography-table-head.astro +27 -13
  239. package/src/components/ui/typography/typography-table-row.astro +23 -13
  240. package/src/components/ui/typography/typography-table.astro +29 -20
  241. package/src/components/ui/typography/typography.astro +172 -46
  242. package/src/components/ui/video/video.astro +11 -27
  243. package/src/styles/global.css +2 -15
  244. package/public/r/beta-repo-setup.json +0 -125
  245. package/public/r/blocks.json +0 -91
  246. package/public/r/content-5.json +0 -17
  247. package/public/r/content-6.json +0 -17
  248. package/public/r/gradient.json +0 -17
  249. package/public/r/init.json +0 -23
  250. package/public/r/tile.json +0 -27
  251. package/src/components/blocks/content-5.astro +0 -115
  252. package/src/components/blocks/content-6.astro +0 -91
  253. package/src/components/ui/gradient/gradient.astro +0 -45
  254. package/src/components/ui/gradient/index.ts +0 -1
  255. package/src/components/ui/tile/index.ts +0 -3
  256. package/src/components/ui/tile/tile-content.astro +0 -17
  257. package/src/components/ui/tile/tile-group.astro +0 -76
  258. package/src/components/ui/tile/tile.astro +0 -46
@@ -1,4 +1,14 @@
1
1
  ---
2
+ import ArrowLeft from "@lucide/astro/icons/arrow-left"
3
+ import ArrowRight from "@lucide/astro/icons/arrow-right"
4
+ import Check from "@lucide/astro/icons/check"
5
+ import ChevronDown from "@lucide/astro/icons/chevron-down"
6
+ import Copy from "@lucide/astro/icons/copy"
7
+ import ExternalLink from "@lucide/astro/icons/external-link"
8
+ import Claude from "simple-icons-astro/Claude"
9
+ import Cursor from "simple-icons-astro/Cursor"
10
+ import Markdown from "simple-icons-astro/Markdown"
11
+
2
12
  import { cn } from "@/lib/utils"
3
13
  import { Button } from "@/components/ui/button"
4
14
  import { buttonVariants } from "@/components/ui/button/button-variants"
@@ -13,7 +23,6 @@ import {
13
23
  DropdownMenuContent,
14
24
  DropdownMenuTrigger,
15
25
  } from "@/components/ui/dropdown-menu"
16
- import { Icon } from "@/components/ui/icon"
17
26
  import { SectionContainer } from "@/components/ui/section"
18
27
  import {
19
28
  Toc,
@@ -137,7 +146,7 @@ const openLinks = markdownUrl
137
146
  </TypographyH1>
138
147
  {
139
148
  description && (
140
- <TypographyLead class="max-w-2xl text-base! leading-7">
149
+ <TypographyLead size="sm" class="max-w-2xl leading-7">
141
150
  {description}
142
151
  </TypographyLead>
143
152
  )
@@ -154,16 +163,8 @@ const openLinks = markdownUrl
154
163
  data-source={copyButton?.source}
155
164
  aria-label={labels.copyMarkdown}
156
165
  >
157
- <Icon
158
- name="copy"
159
- data-copy-icon
160
- class="docs-copy-icon size-3.5"
161
- />
162
- <Icon
163
- name="check"
164
- data-check-icon
165
- class="docs-check-icon hidden size-3.5"
166
- />
166
+ <Copy data-copy-icon class="docs-copy-icon size-3.5" />
167
+ <Check data-check-icon class="docs-check-icon hidden size-3.5" />
167
168
  <span>{labels.copyMarkdown}</span>
168
169
  </Button>
169
170
  )
@@ -175,7 +176,7 @@ const openLinks = markdownUrl
175
176
  class={buttonVariants({ variant: "outline", size: "xs" })}
176
177
  >
177
178
  <span>{labels.openIn}</span>
178
- <Icon name="chevron-down" class="size-3.5 opacity-70" />
179
+ <ChevronDown class="size-3.5 opacity-70" />
179
180
  </DropdownMenuTrigger>
180
181
  <DropdownMenuContent align="end" sideOffset={6} class="w-56">
181
182
  {openLinks.map((link) => (
@@ -185,9 +186,7 @@ const openLinks = markdownUrl
185
186
  rel="noreferrer noopener"
186
187
  class="hover:bg-accent hover:text-accent-foreground flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none"
187
188
  >
188
- {link.icon === "markdown" && (
189
- <Icon name="markdown" class="size-4 fill-current" />
190
- )}
189
+ {link.icon === "markdown" && <Markdown class="size-4" />}
191
190
  {link.icon === "chatgpt" && (
192
191
  <svg
193
192
  role="img"
@@ -199,17 +198,10 @@ const openLinks = markdownUrl
199
198
  <path d="M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.182a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .511 4.91 6.051 6.051 0 0 0 6.515 2.9A5.985 5.985 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.989 5.989 0 0 0 3.998-2.9 6.056 6.056 0 0 0-.748-7.073ZM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.142-.081 4.778-2.758a.795.795 0 0 0 .393-.681v-6.737l2.02 1.169a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.495 4.494Zm-9.66-4.125a4.471 4.471 0 0 1-.535-3.014l.142.085 4.783 2.758a.771.771 0 0 0 .781 0l5.843-3.368v2.332a.08.08 0 0 1-.034.062L9.74 19.95a4.499 4.499 0 0 1-6.14-1.646ZM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.677l5.814 3.354-2.02 1.169a.076.076 0 0 1-.071 0l-4.83-2.787A4.504 4.504 0 0 1 2.34 7.872Zm16.596 3.856-5.833-3.388L15.12 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.104v-5.677a.79.79 0 0 0-.407-.667Zm2.011-3.024-.142-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.499 4.499 0 0 1 6.68 4.66ZM8.307 12.863l-2.02-1.164a.08.08 0 0 1-.038-.057V6.074a4.499 4.499 0 0 1 7.376-3.453l-.142.08-4.778 2.758a.795.795 0 0 0-.393.681Zm1.097-2.365 2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5Z" />
200
199
  </svg>
201
200
  )}
202
- {link.icon === "claude" && (
203
- <Icon name="claude" class="size-4 fill-current" />
204
- )}
205
- {link.icon === "cursor" && (
206
- <Icon name="cursor" class="size-4 fill-current" />
207
- )}
201
+ {link.icon === "claude" && <Claude class="size-4" />}
202
+ {link.icon === "cursor" && <Cursor class="size-4" />}
208
203
  <span>{link.label}</span>
209
- <Icon
210
- name="external-link"
211
- class="text-muted-foreground ml-auto size-3.5"
212
- />
204
+ <ExternalLink class="text-muted-foreground ml-auto size-3.5" />
213
205
  </a>
214
206
  ))}
215
207
  </DropdownMenuContent>
@@ -236,7 +228,7 @@ const openLinks = markdownUrl
236
228
  variant="outline"
237
229
  class="h-auto min-w-0 items-center justify-start gap-2 px-3 py-2 whitespace-normal"
238
230
  >
239
- <Icon name="arrow-left" class="size-4" />
231
+ <ArrowLeft class="size-4" />
240
232
  <span class="truncate text-sm font-medium">
241
233
  {previousPage.title}
242
234
  </span>
@@ -253,7 +245,7 @@ const openLinks = markdownUrl
253
245
  class="h-auto min-w-0 items-center justify-end gap-2 px-3 py-2 text-right whitespace-normal"
254
246
  >
255
247
  <span class="truncate text-sm font-medium">{nextPage.title}</span>
256
- <Icon name="arrow-right" class="size-4" />
248
+ <ArrowRight class="size-4" />
257
249
  </Button>
258
250
  ) : (
259
251
  <div aria-hidden="true" />
@@ -322,30 +314,7 @@ const openLinks = markdownUrl
322
314
  pre.before(wrapper)
323
315
  wrapper.append(pre, button)
324
316
  })
325
-
326
- const writeToClipboard = async (text) => {
327
- if (navigator.clipboard && window.isSecureContext) {
328
- try {
329
- await navigator.clipboard.writeText(text)
330
- return true
331
- } catch {
332
- return false
333
- }
334
- }
335
-
336
- return false
337
- }
338
-
339
- const showCopySuccess = (button) => {
340
- button.querySelector("[data-copy-icon]")?.classList.add("hidden")
341
- button.querySelector("[data-check-icon]")?.classList.remove("hidden")
342
- setTimeout(() => {
343
- button.querySelector("[data-copy-icon]")?.classList.remove("hidden")
344
- button.querySelector("[data-check-icon]")?.classList.add("hidden")
345
- }, 1200)
346
- }
347
-
348
- document.addEventListener("click", async (event) => {
317
+ document.addEventListener("click", (event) => {
349
318
  const button = event.target?.closest?.(
350
319
  "[id^='docs-copy-page-'], .docs-code-copy"
351
320
  )
@@ -356,9 +325,12 @@ const openLinks = markdownUrl
356
325
  .closest(".docs-code-block")
357
326
  ?.querySelector("pre")
358
327
  ?.textContent?.replace(/\n$/, "")
359
- if (!source) return
360
-
361
- const copied = await writeToClipboard(source)
362
- if (copied) showCopySuccess(button)
328
+ button.querySelector("[data-copy-icon]")?.classList.add("hidden")
329
+ button.querySelector("[data-check-icon]")?.classList.remove("hidden")
330
+ navigator.clipboard?.writeText(source ?? "")
331
+ setTimeout(() => {
332
+ button.querySelector("[data-copy-icon]")?.classList.remove("hidden")
333
+ button.querySelector("[data-check-icon]")?.classList.add("hidden")
334
+ }, 1200)
363
335
  })
364
336
  </script>
@@ -1,4 +1,6 @@
1
1
  ---
2
+ import ArrowRightIcon from "@lucide/astro/icons/arrow-right"
3
+
2
4
  import { cn } from "@/lib/utils"
3
5
  import { Button } from "@/components/ui/button"
4
6
  import { Icon } from "@/components/ui/icon"
@@ -78,7 +80,7 @@ const { class: className, title, description, buttons, features } = Astro.props
78
80
  class="text-primary mt-auto inline-flex items-center gap-1 text-sm font-medium hover:underline"
79
81
  >
80
82
  {feature.linkText}
81
- <Icon name="arrow-right" class="size-3.5" />
83
+ <ArrowRightIcon class="size-3.5" />
82
84
  </a>
83
85
  )}
84
86
  </div>
@@ -55,10 +55,12 @@ const { class: className, title, description, buttons, features } = Astro.props
55
55
  }
56
56
  </SectionContainer>
57
57
  <SectionContainer>
58
- <div class="grid overflow-hidden rounded-xl sm:grid-cols-2 lg:grid-cols-3">
58
+ <div
59
+ class="ring-foreground/10 bg-border grid gap-px overflow-hidden rounded-xl ring-1 ring-inset sm:grid-cols-2 lg:grid-cols-3"
60
+ >
59
61
  {
60
62
  features.map((feature) => (
61
- <div class="group/feature hover:bg-accent/30 relative flex flex-col items-center gap-4 border-b p-7 text-center transition-colors sm:nth-last-[-n+2]:border-b-0 lg:nth-last-[-n+3]:border-b-0">
63
+ <div class="bg-background group/feature hover:bg-accent/30 relative flex flex-col items-center gap-4 p-7 text-center transition-colors">
62
64
  <div class="bg-primary/10 text-primary ring-primary/15 flex size-10 items-center justify-center rounded-lg ring-1 transition-transform ring-inset group-hover/feature:scale-105">
63
65
  <Icon name={feature.icon} class="size-5" />
64
66
  </div>
@@ -1,4 +1,6 @@
1
1
  ---
2
+ import ArrowRightIcon from "@lucide/astro/icons/arrow-right"
3
+
2
4
  import { cn } from "@/lib/utils"
3
5
  import { Button } from "@/components/ui/button"
4
6
  import { Icon } from "@/components/ui/icon"
@@ -79,7 +81,7 @@ const { class: className, title, description, buttons, features } = Astro.props
79
81
  class="text-primary mt-auto inline-flex items-center gap-1 text-sm font-medium hover:underline"
80
82
  >
81
83
  {feature.linkText}
82
- <Icon name="arrow-right" class="size-3.5" />
84
+ <ArrowRightIcon class="size-3.5" />
83
85
  </a>
84
86
  )}
85
87
  </div>
@@ -1,6 +1,9 @@
1
1
  ---
2
+ import Discord from "simple-icons-astro/Discord"
3
+ import Github from "simple-icons-astro/Github"
4
+ import X from "simple-icons-astro/X"
5
+
2
6
  import { cn } from "@/lib/utils"
3
- import { Icon } from "@/components/ui/icon"
4
7
  import { Logo, LogoText } from "@/components/ui/logo"
5
8
  import { Section, SectionContainer } from "@/components/ui/section"
6
9
  import { Separator } from "@/components/ui/separator"
@@ -34,6 +37,12 @@ const {
34
37
  columns,
35
38
  copyright,
36
39
  } = Astro.props
40
+
41
+ const iconMap: Record<string, any> = {
42
+ github: Github,
43
+ discord: Discord,
44
+ x: X,
45
+ }
37
46
  ---
38
47
 
39
48
  <footer class={cn("", className)}>
@@ -50,17 +59,22 @@ const {
50
59
  {
51
60
  socials && socials.length > 0 && (
52
61
  <div class="flex items-center gap-3">
53
- {socials.map((social) => (
54
- <a
55
- href={social.href}
56
- class="text-muted-foreground hover:text-foreground transition-colors"
57
- aria-label={social.label}
58
- target="_blank"
59
- rel="noreferrer"
60
- >
61
- <Icon name={social.icon} class="size-4" />
62
- </a>
63
- ))}
62
+ {socials.map((social) => {
63
+ const IconComp = iconMap[social.icon]
64
+ return (
65
+ <a
66
+ href={social.href}
67
+ class="text-muted-foreground hover:text-foreground transition-colors"
68
+ aria-label={social.label}
69
+ target="_blank"
70
+ rel="noreferrer"
71
+ >
72
+ {IconComp && (
73
+ <IconComp class="size-4" fill="currentColor" />
74
+ )}
75
+ </a>
76
+ )
77
+ })}
64
78
  </div>
65
79
  )
66
80
  }
@@ -1,6 +1,9 @@
1
1
  ---
2
+ import Discord from "simple-icons-astro/Discord"
3
+ import Github from "simple-icons-astro/Github"
4
+ import X from "simple-icons-astro/X"
5
+
2
6
  import { cn } from "@/lib/utils"
3
- import { Icon } from "@/components/ui/icon"
4
7
  import { Logo, LogoText } from "@/components/ui/logo"
5
8
  import { Section, SectionContainer } from "@/components/ui/section"
6
9
  import { Separator } from "@/components/ui/separator"
@@ -31,6 +34,12 @@ const {
31
34
  socials,
32
35
  copyright,
33
36
  } = Astro.props
37
+
38
+ const iconMap: Record<string, any> = {
39
+ github: Github,
40
+ discord: Discord,
41
+ x: X,
42
+ }
34
43
  ---
35
44
 
36
45
  <footer class={cn("", className)}>
@@ -59,17 +68,20 @@ const {
59
68
  {
60
69
  socials && socials.length > 0 && (
61
70
  <div class="flex items-center justify-center gap-3">
62
- {socials.map((social) => (
63
- <a
64
- href={social.href}
65
- class="text-muted-foreground hover:text-foreground transition-colors"
66
- aria-label={social.label}
67
- target="_blank"
68
- rel="noreferrer"
69
- >
70
- <Icon name={social.icon} class="size-4" />
71
- </a>
72
- ))}
71
+ {socials.map((social) => {
72
+ const IconComp = iconMap[social.icon]
73
+ return (
74
+ <a
75
+ href={social.href}
76
+ class="text-muted-foreground hover:text-foreground transition-colors"
77
+ aria-label={social.label}
78
+ target="_blank"
79
+ rel="noreferrer"
80
+ >
81
+ {IconComp && <IconComp class="size-4" fill="currentColor" />}
82
+ </a>
83
+ )
84
+ })}
73
85
  </div>
74
86
  )
75
87
  }
@@ -1,6 +1,9 @@
1
1
  ---
2
+ import Discord from "simple-icons-astro/Discord"
3
+ import Github from "simple-icons-astro/Github"
4
+ import X from "simple-icons-astro/X"
5
+
2
6
  import { cn } from "@/lib/utils"
3
- import { Icon } from "@/components/ui/icon"
4
7
  import { Logo, LogoText } from "@/components/ui/logo"
5
8
  import { Section, SectionContainer } from "@/components/ui/section"
6
9
  import { Separator } from "@/components/ui/separator"
@@ -39,6 +42,12 @@ const {
39
42
  copyright,
40
43
  bottomLinks,
41
44
  } = Astro.props
45
+
46
+ const iconMap: Record<string, any> = {
47
+ github: Github,
48
+ discord: Discord,
49
+ x: X,
50
+ }
42
51
  ---
43
52
 
44
53
  <footer class={cn("", className)}>
@@ -55,17 +64,22 @@ const {
55
64
  {
56
65
  socials && socials.length > 0 && (
57
66
  <div class="flex items-center gap-3">
58
- {socials.map((social) => (
59
- <a
60
- href={social.href}
61
- class="text-muted-foreground hover:text-foreground transition-colors"
62
- aria-label={social.label}
63
- target="_blank"
64
- rel="noreferrer"
65
- >
66
- <Icon name={social.icon} class="size-4" />
67
- </a>
68
- ))}
67
+ {socials.map((social) => {
68
+ const IconComp = iconMap[social.icon]
69
+ return (
70
+ <a
71
+ href={social.href}
72
+ class="text-muted-foreground hover:text-foreground transition-colors"
73
+ aria-label={social.label}
74
+ target="_blank"
75
+ rel="noreferrer"
76
+ >
77
+ {IconComp && (
78
+ <IconComp class="size-4" fill="currentColor" />
79
+ )}
80
+ </a>
81
+ )
82
+ })}
69
83
  </div>
70
84
  )
71
85
  }
@@ -33,7 +33,6 @@ type Props = {
33
33
  navigation: {
34
34
  label: string
35
35
  href: string
36
- active?: boolean
37
36
  links?: {
38
37
  label: string
39
38
  href: string
@@ -51,7 +50,7 @@ const { class: className, logo, navigation, buttons } = Astro.props
51
50
  ---
52
51
 
53
52
  <Header class={cn("", className)}>
54
- <HeaderContainer class="items-center justify-between gap-4">
53
+ <HeaderContainer class="justify-between gap-4">
55
54
  <HeaderGroup>
56
55
  <Logo href={logo.href}>
57
56
  <LogoImage
@@ -68,7 +67,7 @@ const { class: className, logo, navigation, buttons } = Astro.props
68
67
  {
69
68
  navigation.map((item, index) => (
70
69
  <NavigationMenuItem value={`nav-${index}`}>
71
- <NavigationMenuLink href={item.href} active={item.active}>
70
+ <NavigationMenuLink href={item.href}>
72
71
  {item.label}
73
72
  </NavigationMenuLink>
74
73
  </NavigationMenuItem>
@@ -57,7 +57,7 @@ const { class: className, title, description, buttons, image } = Astro.props
57
57
  <Image
58
58
  src={image.src}
59
59
  alt={image.alt}
60
- class="aspect-4/3 w-full rounded-xl border object-cover"
60
+ class="aspect-[4/3] w-full rounded-xl border object-cover"
61
61
  widths={[640, 960, 1280]}
62
62
  sizes="(min-width: 1024px) 75vw, 100vw"
63
63
  loading="eager"
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  import type { ImageMetadata } from "astro"
3
3
  import { Image } from "astro:assets"
4
+ import { CheckIcon } from "@lucide/astro"
4
5
 
5
6
  import { cn } from "@/lib/utils"
6
7
  import { Button } from "@/components/ui/button"
7
- import { Icon } from "@/components/ui/icon"
8
8
  import { Section, SectionContainer } from "@/components/ui/section"
9
9
 
10
10
  type Props = {
@@ -51,7 +51,7 @@ const {
51
51
  {
52
52
  features.map((feature) => (
53
53
  <li class="flex items-center gap-2 text-sm">
54
- <Icon name="check" class="text-primary size-4 shrink-0" />
54
+ <CheckIcon class="text-primary size-4 shrink-0" />
55
55
  {feature}
56
56
  </li>
57
57
  ))
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  import type { ImageMetadata } from "astro"
3
3
  import { Image } from "astro:assets"
4
+ import { CheckIcon } from "@lucide/astro"
4
5
 
5
6
  import { cn } from "@/lib/utils"
6
7
  import {
@@ -10,7 +11,6 @@ import {
10
11
  AvatarImage,
11
12
  } from "@/components/ui/avatar"
12
13
  import { Button } from "@/components/ui/button"
13
- import { Icon } from "@/components/ui/icon"
14
14
  import { Rating } from "@/components/ui/rating"
15
15
  import { Section, SectionContainer } from "@/components/ui/section"
16
16
 
@@ -67,7 +67,7 @@ const {
67
67
  {
68
68
  features.map((feature) => (
69
69
  <li class="flex items-center gap-3 text-sm">
70
- <Icon name="check" class="text-primary size-4 shrink-0" />
70
+ <CheckIcon class="text-primary size-4 shrink-0" />
71
71
  {feature}
72
72
  </li>
73
73
  ))
@@ -113,7 +113,7 @@ const {
113
113
  <Image
114
114
  src={image.src}
115
115
  alt={image.alt}
116
- class="aspect-4/3 w-full rounded-xl border object-cover"
116
+ class="aspect-[4/3] w-full rounded-xl border object-cover"
117
117
  widths={[640, 960, 1280]}
118
118
  sizes="(min-width: 1024px) 50vw, 100vw"
119
119
  loading="eager"
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  import type { ImageMetadata } from "astro"
3
3
  import { Image } from "astro:assets"
4
+ import { CheckIcon } from "@lucide/astro"
4
5
 
5
6
  import { cn } from "@/lib/utils"
6
7
  import {
@@ -10,7 +11,6 @@ import {
10
11
  AvatarImage,
11
12
  } from "@/components/ui/avatar"
12
13
  import { Button } from "@/components/ui/button"
13
- import { Icon } from "@/components/ui/icon"
14
14
  import { Rating } from "@/components/ui/rating"
15
15
  import { Section, SectionContainer } from "@/components/ui/section"
16
16
 
@@ -55,7 +55,7 @@ const {
55
55
  <Image
56
56
  src={image.src}
57
57
  alt={image.alt}
58
- class="aspect-4/3 w-full rounded-xl border object-cover"
58
+ class="aspect-[4/3] w-full rounded-xl border object-cover"
59
59
  widths={[640, 960, 1280]}
60
60
  sizes="(min-width: 1024px) 50vw, 100vw"
61
61
  loading="eager"
@@ -75,7 +75,7 @@ const {
75
75
  {
76
76
  features.map((feature) => (
77
77
  <li class="flex items-center gap-3 text-sm">
78
- <Icon name="check" class="text-primary size-4 shrink-0" />
78
+ <CheckIcon class="text-primary size-4 shrink-0" />
79
79
  {feature}
80
80
  </li>
81
81
  ))
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  import type { ImageMetadata } from "astro"
3
3
  import { Image } from "astro:assets"
4
+ import { CheckIcon } from "@lucide/astro"
4
5
 
5
6
  import { cn } from "@/lib/utils"
6
7
  import {
@@ -10,7 +11,6 @@ import {
10
11
  AvatarImage,
11
12
  } from "@/components/ui/avatar"
12
13
  import { Button } from "@/components/ui/button"
13
- import { Icon } from "@/components/ui/icon"
14
14
  import { Rating } from "@/components/ui/rating"
15
15
  import { Section, SectionContainer } from "@/components/ui/section"
16
16
 
@@ -69,7 +69,7 @@ const {
69
69
  {
70
70
  features.map((feature) => (
71
71
  <li class="flex items-center gap-3 text-sm">
72
- <Icon name="check" class="text-primary size-4 shrink-0" />
72
+ <CheckIcon class="text-primary size-4 shrink-0" />
73
73
  {feature}
74
74
  </li>
75
75
  ))
@@ -115,7 +115,7 @@ const {
115
115
  <Image
116
116
  src={image.src}
117
117
  alt={image.alt}
118
- class="aspect-4/3 w-full rounded-xl border object-cover"
118
+ class="aspect-[4/3] w-full rounded-xl border object-cover"
119
119
  widths={[640, 960, 1280]}
120
120
  sizes="(min-width: 1024px) 60vw, 100vw"
121
121
  loading="eager"
@@ -60,7 +60,7 @@ const { class: className, title, description, buttons, image } = Astro.props
60
60
  <Image
61
61
  src={image.src}
62
62
  alt={image.alt}
63
- class="aspect-4/3 w-full rounded-xl border object-cover"
63
+ class="aspect-[4/3] w-full rounded-xl border object-cover"
64
64
  widths={[640, 960, 1280]}
65
65
  sizes="(min-width: 1024px) 75vw, 100vw"
66
66
  loading="eager"
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  import type { ImageMetadata } from "astro"
3
3
  import { Image } from "astro:assets"
4
+ import { CheckIcon } from "@lucide/astro"
4
5
 
5
6
  import { cn } from "@/lib/utils"
6
7
  import {
@@ -10,7 +11,6 @@ import {
10
11
  AvatarImage,
11
12
  } from "@/components/ui/avatar"
12
13
  import { Button } from "@/components/ui/button"
13
- import { Icon } from "@/components/ui/icon"
14
14
  import { Rating } from "@/components/ui/rating"
15
15
  import { Section, SectionContainer } from "@/components/ui/section"
16
16
 
@@ -67,7 +67,7 @@ const {
67
67
  {
68
68
  features.map((feature) => (
69
69
  <li class="flex items-center gap-3 text-sm">
70
- <Icon name="check" class="text-primary size-4 shrink-0" />
70
+ <CheckIcon class="text-primary size-4 shrink-0" />
71
71
  {feature}
72
72
  </li>
73
73
  ))
@@ -1,6 +1,7 @@
1
1
  ---
2
+ import ArrowRightIcon from "@lucide/astro/icons/arrow-right"
3
+
2
4
  import { cn } from "@/lib/utils"
3
- import { Icon } from "@/components/ui/icon"
4
5
  import { Section, SectionContainer } from "@/components/ui/section"
5
6
 
6
7
  type Props = {
@@ -40,10 +41,7 @@ const { class: className, title, description, links } = Astro.props
40
41
  >
41
42
  <span class="flex min-w-0 items-center justify-between gap-3">
42
43
  <span class="text-sm font-medium">{item.title}</span>
43
- <Icon
44
- name="arrow-right"
45
- class="text-muted-foreground size-3.5 shrink-0 transition-transform group-hover/link:translate-x-0.5"
46
- />
44
+ <ArrowRightIcon class="text-muted-foreground size-3.5 shrink-0 transition-transform group-hover/link:translate-x-0.5" />
47
45
  </span>
48
46
  <span class="text-muted-foreground mt-1 block text-sm leading-6">
49
47
  {item.description}
@@ -1,4 +1,6 @@
1
1
  ---
2
+ import { CheckIcon } from "@lucide/astro"
3
+
2
4
  import { cn } from "@/lib/utils"
3
5
  import { Badge } from "@/components/ui/badge"
4
6
  import { Button } from "@/components/ui/button"
@@ -10,7 +12,6 @@ import {
10
12
  CardHeader,
11
13
  CardTitle,
12
14
  } from "@/components/ui/card"
13
- import { Icon } from "@/components/ui/icon"
14
15
  import { Price, PriceUnit, PriceValue } from "@/components/ui/price"
15
16
  import { Section, SectionContainer } from "@/components/ui/section"
16
17
  import { Separator } from "@/components/ui/separator"
@@ -80,7 +81,7 @@ const { class: className, title, description, plans } = Astro.props
80
81
  <ul class="flex flex-col gap-3">
81
82
  {plan.features.map((feature) => (
82
83
  <li class="flex items-center gap-3 text-sm">
83
- <Icon name="check" class="text-primary size-4 shrink-0" />
84
+ <CheckIcon class="text-primary size-4 shrink-0" />
84
85
  {feature}
85
86
  </li>
86
87
  ))}
@@ -1,4 +1,6 @@
1
1
  ---
2
+ import { CheckIcon } from "@lucide/astro"
3
+
2
4
  import { cn } from "@/lib/utils"
3
5
  import { Button } from "@/components/ui/button"
4
6
  import {
@@ -9,7 +11,6 @@ import {
9
11
  CardHeader,
10
12
  CardTitle,
11
13
  } from "@/components/ui/card"
12
- import { Icon } from "@/components/ui/icon"
13
14
  import { Price, PriceUnit, PriceValue } from "@/components/ui/price"
14
15
  import { Section, SectionContainer } from "@/components/ui/section"
15
16
  import { Separator } from "@/components/ui/separator"
@@ -74,7 +75,7 @@ const { class: className, title, description, plans } = Astro.props
74
75
  <ul class="flex flex-col gap-3">
75
76
  {plan.features.map((feature) => (
76
77
  <li class="flex items-center gap-3 text-sm">
77
- <Icon name="check" class="text-primary size-4 shrink-0" />
78
+ <CheckIcon class="text-primary size-4 shrink-0" />
78
79
  {feature}
79
80
  </li>
80
81
  ))}