@rimelight/ui 0.0.5 → 0.0.7

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 (315) hide show
  1. package/LICENSE +21 -21
  2. package/package.json +22 -14
  3. package/src/components/BlogPost.astro +195 -0
  4. package/src/components/DynamicShowcase.astro +681 -0
  5. package/src/components/ExtendedCarousel.astro +107 -0
  6. package/src/components/FormattedDate.astro +6 -2
  7. package/src/components/Head.astro +153 -0
  8. package/src/components/ProjectPost.astro +197 -0
  9. package/src/components/RLHead.astro +3 -0
  10. package/src/components/ThemeToggle.astro +30 -42
  11. package/src/components/astro/RLAButton.astro +32 -42
  12. package/src/components/astro/RLAHeader.astro +75 -0
  13. package/src/components/nuxt/index.ts +1 -0
  14. package/src/components/vue/RLVButton.vue +50 -37
  15. package/src/components/vue/RLVHeader.vue +78 -0
  16. package/src/composables/index.ts +1 -1
  17. package/src/composables/{useComponentUI.ts → useUi.ts} +3 -3
  18. package/src/config/index.ts +0 -2
  19. package/src/config/site.config.ts +1 -1
  20. package/src/env.d.ts +13 -16
  21. package/src/integrations/ui.ts +106 -81
  22. package/src/integrations/vue-entrypoint.ts +6 -0
  23. package/src/middleware/sri.ts +2 -2
  24. package/src/styles/index.css +2 -0
  25. package/src/themes/button.theme.ts +350 -34
  26. package/src/themes/header.theme.ts +33 -0
  27. package/src/themes/index.ts +3 -1
  28. package/src/utils/index.ts +1 -2
  29. package/i18n-data.json +0 -186
  30. package/src/components/MissingTranslationBanner.astro +0 -39
  31. package/src/components/accordion/Accordion.astro +0 -257
  32. package/src/components/accordion/AccordionContent.astro +0 -34
  33. package/src/components/accordion/AccordionItem.astro +0 -29
  34. package/src/components/accordion/AccordionTrigger.astro +0 -33
  35. package/src/components/alert/Alert.astro +0 -34
  36. package/src/components/alert/AlertDescription.astro +0 -15
  37. package/src/components/alert/AlertTitle.astro +0 -17
  38. package/src/components/alert-dialog/AlertDialog.astro +0 -275
  39. package/src/components/alert-dialog/AlertDialogAction.astro +0 -46
  40. package/src/components/alert-dialog/AlertDialogCancel.astro +0 -46
  41. package/src/components/alert-dialog/AlertDialogContent.astro +0 -52
  42. package/src/components/alert-dialog/AlertDialogDescription.astro +0 -18
  43. package/src/components/alert-dialog/AlertDialogFooter.astro +0 -16
  44. package/src/components/alert-dialog/AlertDialogHeader.astro +0 -14
  45. package/src/components/alert-dialog/AlertDialogTitle.astro +0 -20
  46. package/src/components/alert-dialog/AlertDialogTrigger.astro +0 -47
  47. package/src/components/aspect-ratio/AspectRatio.astro +0 -32
  48. package/src/components/avatar/Avatar.astro +0 -29
  49. package/src/components/avatar/AvatarFallback.astro +0 -18
  50. package/src/components/avatar/AvatarImage.astro +0 -66
  51. package/src/components/badge/Badge.astro +0 -57
  52. package/src/components/breadcrumb/Breadcrumb.astro +0 -12
  53. package/src/components/breadcrumb/BreadcrumbEllipsis.astro +0 -29
  54. package/src/components/breadcrumb/BreadcrumbItem.astro +0 -15
  55. package/src/components/breadcrumb/BreadcrumbLink.astro +0 -24
  56. package/src/components/breadcrumb/BreadcrumbList.astro +0 -17
  57. package/src/components/breadcrumb/BreadcrumbPage.astro +0 -22
  58. package/src/components/breadcrumb/BreadcrumbSeparator.astro +0 -24
  59. package/src/components/button/Button.astro +0 -58
  60. package/src/components/button-group/ButtonGroup.astro +0 -64
  61. package/src/components/button-group/ButtonGroupSeparator.astro +0 -20
  62. package/src/components/button-group/ButtonGroupText.astro +0 -19
  63. package/src/components/card/Card.astro +0 -36
  64. package/src/components/card/CardAction.astro +0 -16
  65. package/src/components/card/CardContent.astro +0 -16
  66. package/src/components/card/CardDescription.astro +0 -16
  67. package/src/components/card/CardFooter.astro +0 -16
  68. package/src/components/card/CardHeader.astro +0 -19
  69. package/src/components/card/CardTitle.astro +0 -16
  70. package/src/components/carousel/Carousel.astro +0 -55
  71. package/src/components/carousel/CarouselContent.astro +0 -26
  72. package/src/components/carousel/CarouselItem.astro +0 -26
  73. package/src/components/carousel/CarouselNext.astro +0 -39
  74. package/src/components/carousel/CarouselPrevious.astro +0 -41
  75. package/src/components/carousel/carousel-script.ts +0 -188
  76. package/src/components/carousel/index.ts +0 -1
  77. package/src/components/checkbox/Checkbox.astro +0 -133
  78. package/src/components/collapsible/Collapsible.astro +0 -161
  79. package/src/components/collapsible/CollapsibleContent.astro +0 -22
  80. package/src/components/collapsible/CollapsibleTrigger.astro +0 -44
  81. package/src/components/dialog/Dialog.astro +0 -389
  82. package/src/components/dialog/DialogClose.astro +0 -35
  83. package/src/components/dialog/DialogContent.astro +0 -78
  84. package/src/components/dialog/DialogDescription.astro +0 -14
  85. package/src/components/dialog/DialogFooter.astro +0 -14
  86. package/src/components/dialog/DialogHeader.astro +0 -14
  87. package/src/components/dialog/DialogTitle.astro +0 -18
  88. package/src/components/dialog/DialogTrigger.astro +0 -47
  89. package/src/components/dropdown/Dropdown.astro +0 -604
  90. package/src/components/dropdown/DropdownContent.astro +0 -118
  91. package/src/components/dropdown/DropdownItem.astro +0 -48
  92. package/src/components/dropdown/DropdownLabel.astro +0 -29
  93. package/src/components/dropdown/DropdownSeparator.astro +0 -21
  94. package/src/components/dropdown/DropdownShortcut.astro +0 -17
  95. package/src/components/dropdown/DropdownSub.astro +0 -15
  96. package/src/components/dropdown/DropdownSubContent.astro +0 -39
  97. package/src/components/dropdown/DropdownSubTrigger.astro +0 -34
  98. package/src/components/dropdown/DropdownTrigger.astro +0 -52
  99. package/src/components/dropzone/Dropzone.astro +0 -236
  100. package/src/components/dropzone/DropzoneFilesList.astro +0 -26
  101. package/src/components/dropzone/DropzoneLoadingIndicator.astro +0 -10
  102. package/src/components/dropzone/DropzoneUploadIndicator.astro +0 -10
  103. package/src/components/embeds/YoutubeEmbed.astro +0 -94
  104. package/src/components/hero/Hero.astro +0 -166
  105. package/src/components/icons/Flag.astro +0 -62
  106. package/src/components/image/ExtendedImage.astro +0 -46
  107. package/src/components/image/Image.astro +0 -25
  108. package/src/components/input/Input.astro +0 -27
  109. package/src/components/input-group/InputGroup.astro +0 -28
  110. package/src/components/input-group/InputGroupAddon.astro +0 -76
  111. package/src/components/input-group/InputGroupButton.astro +0 -36
  112. package/src/components/input-group/InputGroupInput.astro +0 -18
  113. package/src/components/input-group/InputGroupText.astro +0 -17
  114. package/src/components/input-group/InputGroupTextarea.astro +0 -22
  115. package/src/components/input-otp/InputOtp.astro +0 -352
  116. package/src/components/input-otp/InputOtpGroup.astro +0 -16
  117. package/src/components/input-otp/InputOtpSeparator.astro +0 -25
  118. package/src/components/input-otp/InputOtpSlot.astro +0 -50
  119. package/src/components/input-otp/InputOtpTypes.ts +0 -6
  120. package/src/components/item/Item.astro +0 -52
  121. package/src/components/item/ItemActions.astro +0 -16
  122. package/src/components/item/ItemContent.astro +0 -16
  123. package/src/components/item/ItemDescription.astro +0 -19
  124. package/src/components/item/ItemFooter.astro +0 -16
  125. package/src/components/item/ItemGroup.astro +0 -16
  126. package/src/components/item/ItemHeader.astro +0 -16
  127. package/src/components/item/ItemMedia.astro +0 -40
  128. package/src/components/item/ItemSeparator.astro +0 -23
  129. package/src/components/item/ItemTitle.astro +0 -16
  130. package/src/components/kbd/Kbd.astro +0 -21
  131. package/src/components/kbd/KbdGroup.astro +0 -16
  132. package/src/components/label/Label.astro +0 -24
  133. package/src/components/marquee/Marquee.astro +0 -73
  134. package/src/components/native-select/NativeSelect.astro +0 -68
  135. package/src/components/native-select/NativeSelectOptGroup.astro +0 -15
  136. package/src/components/native-select/NativeSelectOption.astro +0 -15
  137. package/src/components/pagination/Pagination.astro +0 -20
  138. package/src/components/pagination/PaginationContent.astro +0 -16
  139. package/src/components/pagination/PaginationEllipsis.astro +0 -37
  140. package/src/components/pagination/PaginationItem.astro +0 -16
  141. package/src/components/pagination/PaginationLink.astro +0 -27
  142. package/src/components/pagination/PaginationNext.astro +0 -33
  143. package/src/components/pagination/PaginationPrevious.astro +0 -33
  144. package/src/components/popover/Popover.astro +0 -717
  145. package/src/components/popover/PopoverContent.astro +0 -102
  146. package/src/components/popover/PopoverDescription.astro +0 -14
  147. package/src/components/popover/PopoverHeader.astro +0 -14
  148. package/src/components/popover/PopoverTitle.astro +0 -14
  149. package/src/components/popover/PopoverTrigger.astro +0 -51
  150. package/src/components/progress/Progress.astro +0 -154
  151. package/src/components/prose/Prose.astro +0 -619
  152. package/src/components/radio-group/RadioGroup.astro +0 -162
  153. package/src/components/radio-group/RadioGroupItem.astro +0 -133
  154. package/src/components/radio-group/RadioGroupTypes.ts +0 -6
  155. package/src/components/section/Section.astro +0 -167
  156. package/src/components/select/Select.astro +0 -752
  157. package/src/components/select/SelectContent.astro +0 -94
  158. package/src/components/select/SelectGroup.astro +0 -9
  159. package/src/components/select/SelectItem.astro +0 -51
  160. package/src/components/select/SelectLabel.astro +0 -14
  161. package/src/components/select/SelectSearch.astro +0 -49
  162. package/src/components/select/SelectSeparator.astro +0 -12
  163. package/src/components/select/SelectTrigger.astro +0 -56
  164. package/src/components/select/SelectTypes.ts +0 -13
  165. package/src/components/select/SelectValue.astro +0 -19
  166. package/src/components/separator/Separator.astro +0 -36
  167. package/src/components/sheet/Sheet.astro +0 -15
  168. package/src/components/sheet/SheetClose.astro +0 -15
  169. package/src/components/sheet/SheetContent.astro +0 -89
  170. package/src/components/sheet/SheetDescription.astro +0 -16
  171. package/src/components/sheet/SheetFooter.astro +0 -16
  172. package/src/components/sheet/SheetHeader.astro +0 -16
  173. package/src/components/sheet/SheetTitle.astro +0 -16
  174. package/src/components/sheet/SheetTrigger.astro +0 -15
  175. package/src/components/sidebar/Sidebar.astro +0 -231
  176. package/src/components/sidebar/SidebarContent.astro +0 -25
  177. package/src/components/sidebar/SidebarFooter.astro +0 -22
  178. package/src/components/sidebar/SidebarGroup.astro +0 -22
  179. package/src/components/sidebar/SidebarGroupContent.astro +0 -22
  180. package/src/components/sidebar/SidebarGroupLabel.astro +0 -53
  181. package/src/components/sidebar/SidebarHeader.astro +0 -22
  182. package/src/components/sidebar/SidebarInput.astro +0 -24
  183. package/src/components/sidebar/SidebarInset.astro +0 -22
  184. package/src/components/sidebar/SidebarMenu.astro +0 -22
  185. package/src/components/sidebar/SidebarMenuAction.astro +0 -63
  186. package/src/components/sidebar/SidebarMenuBadge.astro +0 -31
  187. package/src/components/sidebar/SidebarMenuButton.astro +0 -124
  188. package/src/components/sidebar/SidebarMenuItem.astro +0 -22
  189. package/src/components/sidebar/SidebarMenuSkeleton.astro +0 -43
  190. package/src/components/sidebar/SidebarMenuSub.astro +0 -25
  191. package/src/components/sidebar/SidebarMenuSubButton.astro +0 -52
  192. package/src/components/sidebar/SidebarMenuSubItem.astro +0 -17
  193. package/src/components/sidebar/SidebarProvider.astro +0 -215
  194. package/src/components/sidebar/SidebarRail.astro +0 -72
  195. package/src/components/sidebar/SidebarSeparator.astro +0 -25
  196. package/src/components/sidebar/SidebarTrigger.astro +0 -69
  197. package/src/components/skeleton/Skeleton.astro +0 -14
  198. package/src/components/slider/Slider.astro +0 -425
  199. package/src/components/spinner/Spinner.astro +0 -23
  200. package/src/components/switch/Switch.astro +0 -192
  201. package/src/components/switch/SwitchTypes.ts +0 -6
  202. package/src/components/table/Table.astro +0 -20
  203. package/src/components/table/TableBody.astro +0 -18
  204. package/src/components/table/TableCaption.astro +0 -18
  205. package/src/components/table/TableCell.astro +0 -18
  206. package/src/components/table/TableFoot.astro +0 -18
  207. package/src/components/table/TableHead.astro +0 -18
  208. package/src/components/table/TableHeader.astro +0 -18
  209. package/src/components/table/TableRow.astro +0 -17
  210. package/src/components/tabs/Tabs.astro +0 -270
  211. package/src/components/tabs/TabsContent.astro +0 -28
  212. package/src/components/tabs/TabsList.astro +0 -23
  213. package/src/components/tabs/TabsTrigger.astro +0 -34
  214. package/src/components/textarea/Textarea.astro +0 -31
  215. package/src/components/toast/ToastDescription.astro +0 -22
  216. package/src/components/toast/ToastItem.astro +0 -56
  217. package/src/components/toast/ToastTemplate.astro +0 -27
  218. package/src/components/toast/ToastTitle.astro +0 -59
  219. package/src/components/toast/Toaster.astro +0 -981
  220. package/src/components/toast/index.ts +0 -1
  221. package/src/components/toast/toast-manager.ts +0 -234
  222. package/src/components/toggle/Toggle.astro +0 -174
  223. package/src/components/toggle/ToggleTypes.ts +0 -14
  224. package/src/components/tooltip/Tooltip.astro +0 -422
  225. package/src/components/tooltip/TooltipContent.astro +0 -83
  226. package/src/components/tooltip/TooltipTrigger.astro +0 -13
  227. package/src/components/video/Video.astro +0 -121
  228. package/src/config/cookies.ts +0 -5
  229. package/src/config/links.ts +0 -4
  230. package/src/domain/cms/index.ts +0 -1
  231. package/src/domain/cms/types.ts +0 -20
  232. package/src/domain/i18n/constants.ts +0 -21
  233. package/src/domain/i18n/cookie-storage.ts +0 -13
  234. package/src/domain/i18n/country-to-locale-map.ts +0 -67
  235. package/src/domain/i18n/fallbacks.generated.ts +0 -230
  236. package/src/domain/i18n/fetcher.ts +0 -278
  237. package/src/domain/i18n/flags.ts +0 -16
  238. package/src/domain/i18n/format.ts +0 -90
  239. package/src/domain/i18n/index.ts +0 -10
  240. package/src/domain/i18n/middleware/i18n.ts +0 -161
  241. package/src/domain/i18n/resolve-locale.ts +0 -55
  242. package/src/domain/i18n/runtime-constants.ts +0 -14
  243. package/src/domain/i18n/schema.ts +0 -29
  244. package/src/domain/index.ts +0 -4
  245. package/src/domain/seo/constants.ts +0 -6
  246. package/src/domain/seo/index.ts +0 -3
  247. package/src/domain/seo/services/index.ts +0 -3
  248. package/src/domain/seo/services/llms.ts +0 -56
  249. package/src/domain/seo/services/robots.ts +0 -12
  250. package/src/domain/seo/services/sitemap.ts +0 -56
  251. package/src/domain/seo/utils.ts +0 -36
  252. package/src/domain/theme/constants.ts +0 -6
  253. package/src/domain/theme/index.ts +0 -2
  254. package/src/domain/theme/schema.ts +0 -10
  255. package/src/i18n.generated.d.ts +0 -202
  256. package/src/lib/component-preview.ts +0 -73
  257. package/src/lib/index.ts +0 -6
  258. package/src/lib/remark/remark-modified-time.ts +0 -13
  259. package/src/lib/showcase-preview-elements.ts +0 -408
  260. package/src/lib/showcase-renderer.ts +0 -218
  261. package/src/lib/showcase-utils.ts +0 -189
  262. package/src/lib/turnstile.ts +0 -35
  263. package/src/lib/utils/starwind/positioning.ts +0 -318
  264. package/src/locales/de/blog.json +0 -9
  265. package/src/locales/de/common.json +0 -19
  266. package/src/locales/de/errors.json +0 -6
  267. package/src/locales/de/home.json +0 -20
  268. package/src/locales/de/messages.json +0 -8
  269. package/src/locales/de/nav.json +0 -13
  270. package/src/locales/de/projects.json +0 -9
  271. package/src/locales/de/services.json +0 -43
  272. package/src/locales/en/blog.json +0 -9
  273. package/src/locales/en/chat.json +0 -29
  274. package/src/locales/en/common.json +0 -19
  275. package/src/locales/en/cookie_notice.json +0 -11
  276. package/src/locales/en/editor.json +0 -24
  277. package/src/locales/en/errors.json +0 -6
  278. package/src/locales/en/home.json +0 -20
  279. package/src/locales/en/messages.json +0 -8
  280. package/src/locales/en/nav.json +0 -13
  281. package/src/locales/en/projects.json +0 -9
  282. package/src/locales/en/services.json +0 -43
  283. package/src/locales/es/blog.json +0 -9
  284. package/src/locales/es/common.json +0 -19
  285. package/src/locales/es/errors.json +0 -6
  286. package/src/locales/es/home.json +0 -20
  287. package/src/locales/es/messages.json +0 -8
  288. package/src/locales/es/nav.json +0 -13
  289. package/src/locales/es/projects.json +0 -9
  290. package/src/locales/es/services.json +0 -43
  291. package/src/locales/ja/blog.json +0 -9
  292. package/src/locales/ja/common.json +0 -19
  293. package/src/locales/ja/errors.json +0 -6
  294. package/src/locales/ja/home.json +0 -20
  295. package/src/locales/ja/messages.json +0 -8
  296. package/src/locales/ja/nav.json +0 -13
  297. package/src/locales/ja/projects.json +0 -9
  298. package/src/locales/ja/services.json +0 -43
  299. package/src/locales/pt/blog.json +0 -9
  300. package/src/locales/pt/chat.json +0 -29
  301. package/src/locales/pt/common.json +0 -19
  302. package/src/locales/pt/cookie_notice.json +0 -11
  303. package/src/locales/pt/editor.json +0 -24
  304. package/src/locales/pt/errors.json +0 -6
  305. package/src/locales/pt/home.json +0 -20
  306. package/src/locales/pt/messages.json +0 -8
  307. package/src/locales/pt/nav.json +0 -13
  308. package/src/locales/pt/projects.json +0 -9
  309. package/src/locales/pt/services.json +0 -43
  310. package/src/utils/server/cookies.ts +0 -98
  311. package/src/utils/server/index.ts +0 -1
  312. package/src/utils/shared/deep-merge.ts +0 -36
  313. package/src/utils/shared/index.ts +0 -3
  314. package/src/utils/shared/parse-boolean.ts +0 -14
  315. /package/src/utils/{shared/embed.ts → embed.ts} +0 -0
@@ -1,94 +0,0 @@
1
- ---
2
- import { getYoutubeEmbedUrl, getYoutubeThumbnail } from "../../utils";
3
- import { Image } from "astro:assets";
4
- import IconCirclePlay from "~icons/lucide/circle-play";
5
-
6
- export interface YoutubeEmbedProps {
7
- src: string;
8
- title?: string;
9
- class?: string;
10
- }
11
- type Props = YoutubeEmbedProps;
12
-
13
- const { src, title = "YouTube video player", class: className } = Astro.props;
14
-
15
- const embedUrl = getYoutubeEmbedUrl(src);
16
- const thumbnail = await getYoutubeThumbnail(src);
17
- const isPlayable = Boolean(embedUrl);
18
- const ariaLabel = isPlayable ? "Play YouTube video" : "YouTube video unavailable";
19
- ---
20
-
21
- <div class:list={["group relative aspect-video h-full w-full cursor-pointer overflow-hidden", className]} data-youtube-video>
22
- <button
23
- type="button"
24
- class="absolute inset-0 aspect-video h-full w-full overflow-hidden"
25
- data-youtube-trigger
26
- aria-label={ariaLabel}
27
- data-embed-url={isPlayable ? embedUrl : undefined}
28
- disabled={!isPlayable}
29
- data-video-title={title}
30
- >
31
- <Image
32
- layout="full-width"
33
- src={thumbnail}
34
- width={1280}
35
- height={720}
36
- class="h-full w-full object-cover"
37
- alt={title}
38
- />
39
- </button>
40
-
41
- <div
42
- class="pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-20"
43
- style="width: 80px; height: 80px;"
44
- >
45
- <IconCirclePlay
46
- class="w-full h-full op-80 group-hover:op-100 text-white transition-all"
47
- />
48
- </div>
49
- </div>
50
-
51
- <script>
52
- const setupYoutubeEmbeds = () => {
53
- document.querySelectorAll("[data-youtube-video]").forEach((root) => {
54
- // Avoid duplicated listeners
55
- if (root.getAttribute("data-hydrated") === "true") return;
56
-
57
- const trigger = root.querySelector("[data-youtube-trigger]");
58
- if (!(trigger instanceof HTMLButtonElement)) return;
59
-
60
- const embedUrl = trigger.dataset.embedUrl;
61
- const title = trigger.dataset.videoTitle;
62
- if (!embedUrl) return;
63
-
64
- const activate = () => {
65
- const iframe = document.createElement("iframe");
66
- iframe.src = embedUrl;
67
- iframe.title = title || "YouTube video player";
68
- iframe.allow =
69
- "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share";
70
- iframe.allowFullscreen = true;
71
- iframe.loading = "lazy";
72
- iframe.referrerPolicy = "strict-origin-when-cross-origin";
73
- iframe.classList.add("w-full", "h-full", "absolute", "inset-0");
74
-
75
- root.replaceChildren(iframe);
76
- };
77
-
78
- // click and accessibility activation
79
- trigger.addEventListener("click", activate, { once: true });
80
- trigger.addEventListener("keydown", (event) => {
81
- if (event.key === "Enter" || event.key === " ") {
82
- event.preventDefault();
83
- activate();
84
- }
85
- }, { once: true });
86
-
87
- root.setAttribute("data-hydrated", "true");
88
- });
89
- };
90
-
91
- // Run on initial load and view transitions
92
- setupYoutubeEmbeds();
93
- document.addEventListener("astro:after-swap", setupYoutubeEmbeds);
94
- </script>
@@ -1,166 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cv } from "css-variants";
4
-
5
- import type { button } from "../button/Button.astro";
6
- import Button from "../button/Button.astro";
7
-
8
- export interface HeroAction {
9
- text: string;
10
- href: string;
11
- variant?: NonNullable<Parameters<typeof button>[0]>["variant"];
12
- icon?: any;
13
- }
14
-
15
- export interface HeroProps extends HTMLAttributes<"section">, NonNullable<Parameters<typeof heroVariants>[0]> {
16
- /** Main title text */
17
- title?: string;
18
- /** Description text */
19
- description?: string;
20
- /** Action buttons */
21
- actions?: HeroAction[];
22
- }
23
-
24
- type Props = HeroProps;
25
-
26
- const heroVariants = cv({
27
- base: "container py-5xl",
28
-
29
- variants: {
30
- orientation: {
31
- vertical: "flex flex-col gap-2xl items-center",
32
- horizontal: "flex flex-col gap-2xl items-center lg:grid lg:grid-cols-2 lg:items-center lg:gap-4xl",
33
- },
34
- alignment: {
35
- left: "text-start items-start",
36
- center: "text-center items-center",
37
- right: "text-end items-end",
38
- },
39
- inverted: {
40
- true: "",
41
- false: "",
42
- },
43
- },
44
- compoundVariants: [
45
- {
46
- orientation: "vertical",
47
- inverted: false,
48
- className: "flex-col-reverse",
49
- },
50
- {
51
- orientation: "vertical",
52
- inverted: true,
53
- className: "flex-col",
54
- },
55
- {
56
- orientation: "horizontal",
57
- inverted: false,
58
- className: "lg:[&_.hero-content-wrapper]:order-1 lg:[&_.hero-content]:order-2",
59
- },
60
- {
61
- orientation: "horizontal",
62
- inverted: true,
63
- className: "lg:[&_.hero-content]:order-1 lg:[&_.hero-content-wrapper]:order-2",
64
- },
65
- {
66
- orientation: "horizontal",
67
- className: "[&_.hero-content]:text-start [&_.hero-content]:items-start lg:text-start lg:items-start",
68
- },
69
- ],
70
- defaultVariants: {
71
- orientation: "vertical",
72
- alignment: "center",
73
- inverted: false,
74
- },
75
- });
76
-
77
- const {
78
- title,
79
- description,
80
- actions = [],
81
- orientation = "vertical",
82
- alignment = "center",
83
- inverted = false,
84
- class: className,
85
- ...rest
86
- } = Astro.props;
87
-
88
- const effectiveAlignment = orientation === "horizontal" ? "left" : alignment;
89
- ---
90
-
91
- <section class="relative w-full overflow-hidden" {...rest}>
92
- <div class="absolute inset-0 -z-10" aria-hidden="true">
93
- <slot name="bg" />
94
- </div>
95
-
96
- <div class:list={[heroVariants({ orientation, alignment, inverted }), className]}>
97
- <div
98
- class:list={[
99
- "hero-content-wrapper flex flex-col w-full",
100
- orientation === "vertical" && [
101
- effectiveAlignment === "center" && "mx-auto",
102
- effectiveAlignment === "left" && "mr-auto",
103
- effectiveAlignment === "right" && "ml-auto",
104
- ],
105
- effectiveAlignment === "center" && "text-center items-center",
106
- effectiveAlignment === "left" && "text-start items-start",
107
- effectiveAlignment === "right" && "text-end items-end",
108
- ]}
109
- data-slot="main"
110
- >
111
- {
112
- title && (
113
- <h1 class="font-heading text-4xl font-bold tracking-tight text-pretty lg:text-5xl xl:text-6xl">
114
- {title}
115
- </h1>
116
- )
117
- }
118
- {
119
- description && (
120
- <p class="text-muted-foreground mt-xl text-pretty lg:text-lg">
121
- {description}
122
- </p>
123
- )
124
- }
125
- {
126
- actions.length > 0 && (
127
- <div
128
- class:list={[
129
- "mt-2xl flex w-full flex-wrap gap-xs md:w-fit",
130
- effectiveAlignment === "center" && "justify-center mx-auto",
131
- effectiveAlignment === "left" && "justify-start",
132
- effectiveAlignment === "right" && "justify-end md:ml-auto",
133
- ]}
134
- >
135
- {actions.map(({ text, href, variant, icon: Icon }) => (
136
- <Button variant={variant} class="group w-full md:w-auto" href={href}>
137
- {text}
138
- {Icon && (
139
- <Icon class="transition-transform group-hover:translate-x-5xs" />
140
- )}
141
- </Button>
142
- ))}
143
- </div>
144
- )
145
- }
146
- </div>
147
-
148
- {
149
- Astro.slots.has("content") && (
150
- <div
151
- class:list={[
152
- "hero-content w-full flex",
153
- effectiveAlignment === "center" && "justify-center",
154
- effectiveAlignment === "left" && "justify-start",
155
- effectiveAlignment === "right" && "justify-end",
156
- ]}
157
- data-slot="content"
158
- >
159
- <slot name="content" />
160
- </div>
161
- )
162
- }
163
- </div>
164
- </section>
165
-
166
-
@@ -1,62 +0,0 @@
1
- ---
2
- import IconGlobe from "~icons/lucide/globe"
3
- import FlagUS from "~icons/flag/us-4x3"
4
- import FlagDE from "~icons/flag/de-4x3"
5
- import FlagES from "~icons/flag/es-4x3"
6
- import FlagJP from "~icons/flag/jp-4x3"
7
- import FlagBR from "~icons/flag/br-4x3"
8
-
9
- import type { FlagCode } from '../../domain/i18n/flags'
10
-
11
- const FLAG_COMPONENTS: Record<string, any> = {
12
- // Legacy short codes
13
- us: FlagUS,
14
- de: FlagDE,
15
- es: FlagES,
16
- jp: FlagJP,
17
- br: FlagBR,
18
-
19
- // Full library codes
20
- 'us-4x3': FlagUS,
21
- 'de-4x3': FlagDE,
22
- 'es-4x3': FlagES,
23
- 'jp-4x3': FlagJP,
24
- 'br-4x3': FlagBR,
25
- }
26
-
27
- export interface FlagProps {
28
- code: FlagCode | string | null;
29
- size?: number;
30
- title?: string;
31
- class?: string;
32
- [key: string]: any;
33
- }
34
- type Props = FlagProps;
35
-
36
- const { code, size = 16, title, class: className, ...rest } = Astro.props
37
- const Svg = code ? FLAG_COMPONENTS[code] : undefined
38
- ---
39
-
40
- {
41
- Svg ? (
42
- <Svg
43
- width={size}
44
- height={size}
45
- class={className}
46
- aria-hidden={title ? 'false' : 'true'}
47
- role={title ? 'img' : 'presentation'}
48
- {...rest}
49
- >
50
- {title && <title>{title}</title>}
51
- </Svg>
52
- ) : (
53
- <IconGlobe
54
- width={size}
55
- height={size}
56
- aria-hidden={title ? undefined : true}
57
- role={title ? 'img' : 'presentation'}
58
- class={className}
59
- {...rest}
60
- />
61
- )
62
- }
@@ -1,46 +0,0 @@
1
- ---
2
- import type { ComponentProps } from "astro/types";
3
- // eslint-disable-next-line @typescript-eslint/consistent-type-imports
4
- import Image from "./Image.astro";
5
-
6
- type Props = ComponentProps<typeof Image> & {
7
- darkSrc?: any;
8
- };
9
-
10
- const { src, darkSrc, class: className, ...rest } = Astro.props;
11
-
12
- const isSvg = (source: any) => {
13
- if (!source) return false;
14
- const url = typeof source === 'string' ? source : (source.src || '');
15
- if (!url) return false;
16
- return url.split('?')[0].toLowerCase().endsWith('.svg') || source.format === 'svg';
17
- };
18
-
19
- const getSrc = (source: any) => {
20
- if (typeof source === 'string') return source;
21
- return source?.src || source;
22
- };
23
- ---
24
-
25
- {
26
- darkSrc ? (
27
- <div class="contents group/extended-image">
28
- {isSvg(src) ? (
29
- <img src={getSrc(src)} class:list={[className, "dark:hidden"]} {...(rest as any)} />
30
- ) : (
31
- <Image src={src} class:list={[className, "dark:hidden"]} {...(rest as any)} />
32
- )}
33
- {isSvg(darkSrc) ? (
34
- <img src={getSrc(darkSrc)} class:list={[className, "hidden dark:block"]} {...(rest as any)} />
35
- ) : (
36
- <Image src={darkSrc} class:list={[className, "hidden dark:block"]} {...(rest as any)} />
37
- )}
38
- </div>
39
- ) : isSvg(src) ? (
40
- <img src={getSrc(src)} class={className} {...(rest as any)} />
41
- ) : (
42
- <Image src={src} class={className} {...(rest as any)} />
43
- )
44
- }
45
-
46
-
@@ -1,25 +0,0 @@
1
- ---
2
- import type { ComponentProps } from "astro/types";
3
- // eslint-disable-next-line @typescript-eslint/consistent-type-imports
4
- import { Image as AstroImage } from "astro:assets";
5
- import { cv } from "css-variants";
6
-
7
- export const image = cv({ base: "starwind-image" });
8
-
9
- type Props = Partial<ComponentProps<typeof AstroImage>> & { inferSize?: boolean };
10
-
11
- const { class: className, src, alt = "", inferSize = true, ...rest } = Astro.props;
12
- ---
13
-
14
- {
15
- src && (
16
- <AstroImage
17
- class:list={[image(), className]}
18
- src={src}
19
- alt={alt}
20
- inferSize={inferSize}
21
- {...(rest as any)}
22
- data-slot="image"
23
- />
24
- )
25
- }
@@ -1,27 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cv } from "css-variants";
4
-
5
- type VariantProps<T extends (...args: any) => any> = NonNullable<Parameters<T>[0]>;
6
-
7
- type Props = HTMLAttributes<"input"> & VariantProps<typeof input>;
8
-
9
- export const input = cv({
10
- base: [
11
- "border-input dark:bg-input/30 text-foreground w-full rounded-md b bg-transparent shadow-xs",
12
- "focus-visible:border-outline focus-visible:ring-outline/50 transition-[color,box-shadow] focus-visible:ring-3",
13
- "file:text-foreground file:my-auto file:mr-3xs file:h-full file:border-0 file:bg-transparent file:text-sm file:font-medium",
14
- "disabled:cursor-not-allowed disabled:op-50",
15
- "aria-invalid:border-error aria-invalid:focus-visible:ring-error/40",
16
- "peer placeholder:text-muted-foreground",
17
- ],
18
- variants: {
19
- size: { sm: "h-2xl px-3xs text-sm", md: "h-3xl px-xs text-base", lg: "h-3xl px-2xl text-lg" },
20
- },
21
- defaultVariants: { size: "md" },
22
- });
23
-
24
- const { size, class: className, ...rest } = Astro.props;
25
- ---
26
-
27
- <input class:list={[input({ size }), className]} {...rest} data-slot="input" />
@@ -1,28 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cv } from "css-variants";
4
-
5
- type Props = HTMLAttributes<"div">;
6
-
7
- export const inputGroup = cv({
8
- base: [
9
- "border-input dark:bg-input/30 group/input-group relative flex h-11 w-full min-w-0 items-center rounded-lg b transition-colors outline-none",
10
- "has-[[data-slot=input-group-control]:focus-visible]:border-outline has-[[data-slot=input-group-control]:focus-visible]:ring-outline/50 has-[[data-slot=input-group-control]:focus-visible]:ring-3",
11
- "has-[[data-slot][aria-invalid=true]]:border-error has-[[data-slot][aria-invalid=true]]:ring-error/40 has-[[data-slot][aria-invalid=true]]:ring-3",
12
- "has-disabled:bg-input/50 has-disabled:op-50",
13
- "has-[>textarea]:h-auto",
14
- "has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col",
15
- "has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col",
16
- "has-[>[data-align=block-end]]:[&>[data-slot=input-group-control]]:pt-3",
17
- "has-[>[data-align=block-start]]:[&>[data-slot=input-group-control]]:pb-3",
18
- "has-[>[data-align=inline-end]]:[&>[data-slot=input-group-control]]:pr-1.5",
19
- "has-[>[data-align=inline-start]]:[&>[data-slot=input-group-control]]:pl-1.5",
20
- ],
21
- });
22
-
23
- const { class: className, ...rest } = Astro.props;
24
- ---
25
-
26
- <div role="group" class:list={[inputGroup(), className]} {...rest} data-slot="input-group">
27
- <slot />
28
- </div>
@@ -1,76 +0,0 @@
1
- ---
2
- import { cv } from "css-variants";
3
-
4
- export const inputGroupAddon = cv({
5
- base: [
6
- "text-muted-foreground flex cursor-text items-center justify-center gap-md text-sm font-medium select-none",
7
- "group-data-[disabled=true]/input-group:op-50 [&>kbd]:rounded-xs [&>svg:not([class*='size-'])]:size-4",
8
- ],
9
- variants: {
10
- align: {
11
- "inline-start": "order-first pl-2.5 has-[>button]:ml-[-0.3rem]",
12
- "inline-end": "order-last pr-2.5 has-[>button]:mr-[-0.3rem]",
13
- "block-start":
14
- "order-first w-full justify-start px-3 pt-2 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-2.5",
15
- "block-end":
16
- "order-last w-full justify-start px-3 pb-2 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-2.5",
17
- },
18
- },
19
- defaultVariants: {
20
- align: "inline-start",
21
- },
22
- });
23
-
24
- const { align, class: className, ...rest } = Astro.props;
25
- ---
26
-
27
- <div
28
- role="group"
29
- data-align={align}
30
- class:list={[inputGroupAddon({ align }), className]}
31
- {...rest}
32
- data-slot="input-group-addon"
33
- >
34
- <slot />
35
- </div>
36
-
37
- <script>
38
- class InputGroupAddonHandler {
39
- private addon: HTMLElement;
40
-
41
- constructor(addon: HTMLElement) {
42
- this.addon = addon;
43
- this.setupEventListeners();
44
- }
45
-
46
- private setupEventListeners(): void {
47
- this.addon.addEventListener("click", (e) => this.handleClick(e));
48
- }
49
-
50
- private handleClick(e: MouseEvent): void {
51
- if ((e.target as HTMLElement).closest("button")) return;
52
-
53
- const input = this.addon.parentElement?.querySelector("input, textarea") as
54
- | HTMLInputElement
55
- | HTMLTextAreaElement;
56
-
57
- if (input) {
58
- input.focus();
59
- }
60
- }
61
- }
62
-
63
- const addonInstances = new WeakMap<HTMLElement, InputGroupAddonHandler>();
64
-
65
- const setupAddons = () => {
66
- document.querySelectorAll<HTMLElement>('[data-slot="input-group-addon"]').forEach((addon) => {
67
- if (!addonInstances.has(addon)) {
68
- addonInstances.set(addon, new InputGroupAddonHandler(addon));
69
- }
70
- });
71
- };
72
-
73
- setupAddons();
74
- document.addEventListener("astro:after-swap", setupAddons);
75
- document.addEventListener("starwind:init", setupAddons);
76
- </script>
@@ -1,36 +0,0 @@
1
- ---
2
- import type { ComponentProps } from "astro/types";
3
- import { cv } from "css-variants";
4
-
5
- type VariantProps<T extends (...args: any) => any> = NonNullable<Parameters<T>[0]>;
6
-
7
- // eslint-disable-next-line typescript/consistent-type-imports
8
- import Button from "../button/Button.astro";
9
-
10
- type Props = Omit<ComponentProps<typeof Button>, "size"> & VariantProps<typeof inputGroupButton>;
11
-
12
- export const inputGroupButton = cv({
13
- base: "gap-3xs rounded-sm shadow-none",
14
- variants: {
15
- size: {
16
- sm: "h-8 px-2",
17
- "icon-sm": "size-8 p-0 has-[>svg]:p-0",
18
- },
19
- },
20
- defaultVariants: {
21
- size: "sm",
22
- },
23
- });
24
-
25
- const { type = "button", variant = "ghost", size, class: className, ...rest } = Astro.props;
26
- ---
27
-
28
- <Button
29
- type={type}
30
- data-size={size}
31
- class:list={[inputGroupButton({ size: size as "sm" }), className]}
32
- {...rest}
33
- >
34
- <slot />
35
- </Button>
36
-
@@ -1,18 +0,0 @@
1
- ---
2
- import type { ComponentProps } from "astro/types";
3
- import { cv } from "css-variants";
4
-
5
- // eslint-disable-next-line typescript/consistent-type-imports
6
- import Input from "../input/Input.astro";
7
-
8
- type Props = ComponentProps<typeof Input>;
9
-
10
- export const inputGroupInput = cv({
11
- base: "h-full flex-1 rounded-none border-0 shadow-none ring-0 outline-none focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent",
12
- });
13
-
14
- const { class: className, ...rest } = Astro.props;
15
- ---
16
-
17
- <Input class:list={[inputGroupInput(), className]} {...rest} data-slot="input-group-control" />
18
-
@@ -1,17 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
-
4
- type Props = HTMLAttributes<"span">;
5
-
6
- const { class: className, ...rest } = Astro.props;
7
- ---
8
-
9
- <span
10
- class:list={[
11
- "text-muted-foreground flex items-center gap-md text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4.5",
12
- className,
13
- ]}
14
- {...rest}
15
- >
16
- <slot />
17
- </span>
@@ -1,22 +0,0 @@
1
- ---
2
- import type { ComponentProps } from "astro/types";
3
- import { cv } from "css-variants";
4
-
5
- // eslint-disable-next-line typescript/consistent-type-imports
6
- import Textarea from "../textarea/Textarea.astro";
7
-
8
- type Props = ComponentProps<typeof Textarea>;
9
-
10
- export const inputGroupTextarea = cv({
11
- base: "h-full flex-1 resize-none rounded-none border-0 shadow-none ring-0 outline-none focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent",
12
- });
13
-
14
- const { class: className, ...rest } = Astro.props;
15
- ---
16
-
17
- <Textarea
18
- class:list={[inputGroupTextarea(), className]}
19
- {...rest}
20
- data-slot="input-group-control"
21
- />
22
-