@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,22 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cv } from "css-variants";
4
-
5
- export interface SidebarMenuItemProps extends HTMLAttributes<"li"> {}
6
- type Props = SidebarMenuItemProps;
7
-
8
- export const sidebarMenuItem = cv({
9
- base: "group/menu-item relative",
10
- });
11
-
12
- const { class: className, ...rest } = Astro.props;
13
- ---
14
-
15
- <li
16
- class:list={[sidebarMenuItem(), className]}
17
- data-sidebar="menu-item"
18
- {...rest}
19
- data-slot="sidebar-menu-item"
20
- >
21
- <slot />
22
- </li>
@@ -1,43 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cv } from "css-variants";
4
-
5
- import Skeleton from "../skeleton/Skeleton.astro";
6
-
7
- const sidebarMenuSkeleton = cv({
8
- base: "flex h-8 items-center gap-md rounded-md px-2",
9
- });
10
-
11
- export interface SidebarMenuSkeletonProps extends HTMLAttributes<"div"> {
12
- /**
13
- * Whether to show the icon skeleton
14
- * @default false
15
- */
16
- showIcon?: boolean;
17
- /**
18
- * Width of the text skeleton (random 50-90% if not specified)
19
- */
20
- width?: string;
21
- }
22
-
23
- type Props = SidebarMenuSkeletonProps;
24
-
25
- const { showIcon = false, width, class: className, ...rest } = Astro.props;
26
-
27
- const skeletonWidth = width || `${Math.floor(Math.random() * 40) + 50}%`;
28
- ---
29
-
30
- <div
31
- class:list={[sidebarMenuSkeleton(), className]}
32
- data-sidebar="menu-skeleton"
33
- {...rest}
34
- data-slot="sidebar-menu-skeleton"
35
- >
36
- {showIcon && <Skeleton class="size-4 rounded-md" data-sidebar="menu-skeleton-icon" />}
37
- <Skeleton
38
- class="h-4 max-w-(--skeleton-width) flex-1"
39
- style={`--skeleton-width: ${skeletonWidth}`}
40
- data-sidebar="menu-skeleton-text"
41
- />
42
- </div>
43
-
@@ -1,25 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cv } from "css-variants";
4
-
5
- export interface SidebarMenuSubProps extends HTMLAttributes<"ul"> {}
6
- type Props = SidebarMenuSubProps;
7
-
8
- export const sidebarMenuSub = cv({
9
- base: [
10
- "border-sidebar-border mx-4.5 flex min-w-0 translate-x-px flex-col gap-5xs b-l px-2.5 py-6xs",
11
- "group-data-[collapsible=icon]:hidden",
12
- ],
13
- });
14
-
15
- const { class: className, ...rest } = Astro.props;
16
- ---
17
-
18
- <ul
19
- class:list={[sidebarMenuSub(), className]}
20
- data-sidebar="menu-sub"
21
- {...rest}
22
- data-slot="sidebar-menu-sub"
23
- >
24
- <slot />
25
- </ul>
@@ -1,52 +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
- export interface SidebarMenuSubButtonProps extends HTMLAttributes<"a">, VariantProps<typeof sidebarMenuSubButton> {
8
- /**
9
- * Whether the menu sub item is currently active
10
- */
11
- isActive?: boolean;
12
- }
13
-
14
- type Props = SidebarMenuSubButtonProps;
15
-
16
- export const sidebarMenuSubButton = cv({
17
- base: [
18
- "text-sidebar-foreground ring-sidebar-outline",
19
- "flex h-3xs min-w-0 -translate-x-px items-center gap-md overflow-hidden rounded-md px-2.5",
20
- "outline-hidden",
21
- "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
22
- "focus-visible:ring-2",
23
- "active:bg-sidebar-accent active:text-sidebar-accent-foreground",
24
- "disabled:pointer-events-none disabled:op-50",
25
- "aria-disabled:pointer-events-none aria-disabled:op-50",
26
- "[&>svg]:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
27
- "data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground",
28
- ],
29
- variants: {
30
- size: {
31
- sm: "text-sm",
32
- md: "text-base",
33
- },
34
- },
35
- defaultVariants: {
36
- size: "md",
37
- },
38
- });
39
-
40
- const { size, isActive = false, class: className, ...rest } = Astro.props;
41
- ---
42
-
43
- <a
44
- class:list={[sidebarMenuSubButton({ size }), className]}
45
- data-sidebar="menu-sub-button"
46
- data-size={size || "md"}
47
- data-active={isActive}
48
- {...rest}
49
- data-slot="sidebar-menu-sub-button"
50
- >
51
- <slot />
52
- </a>
@@ -1,17 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
-
4
- export interface SidebarMenuSubItemProps extends HTMLAttributes<"li"> {}
5
- type Props = SidebarMenuSubItemProps;
6
-
7
- const { class: className, ...rest } = Astro.props;
8
- ---
9
-
10
- <li
11
- class:list={["group/menu-sub-item relative", className]}
12
- data-sidebar="menu-sub-item"
13
- {...rest}
14
- data-slot="sidebar-menu-sub-item"
15
- >
16
- <slot />
17
- </li>
@@ -1,215 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cv } from "css-variants";
4
-
5
- export interface SidebarProviderProps extends HTMLAttributes<"div"> {
6
- /**
7
- * Default open state of the sidebar
8
- * @default true
9
- */
10
- defaultOpen?: boolean;
11
- /**
12
- * Keyboard shortcut to toggle the sidebar
13
- * @default "b"
14
- */
15
- keyboardShortcut?: string;
16
- }
17
-
18
- type Props = SidebarProviderProps;
19
-
20
- export const sidebarProvider = cv({
21
- base: [
22
- "starwind-sidebar-provider",
23
- "group/sidebar-wrapper flex min-h-svh w-full",
24
- "has-data-[variant=inset]:bg-sidebar",
25
- ],
26
- });
27
-
28
- const {
29
- defaultOpen = true,
30
- keyboardShortcut = "b",
31
- class: className,
32
- style,
33
- ...rest
34
- } = Astro.props;
35
-
36
- const SIDEBAR_WIDTH = "18rem";
37
- const SIDEBAR_WIDTH_ICON = "3.5rem";
38
-
39
- // Parse style prop to extract CSS variable overrides
40
- const styleObj = typeof style === "string" ? {} : ((style as Record<string, string>) ?? {});
41
- const mergedStyle = {
42
- "--sidebar-width": styleObj["--sidebar-width"] ?? SIDEBAR_WIDTH,
43
- "--sidebar-width-icon": styleObj["--sidebar-width-icon"] ?? SIDEBAR_WIDTH_ICON,
44
- ...styleObj,
45
- };
46
- ---
47
-
48
- <div
49
- class:list={[sidebarProvider(), className]}
50
- data-state={defaultOpen ? "expanded" : "collapsed"}
51
- data-mobile-open="false"
52
- data-keyboard-shortcut={keyboardShortcut}
53
- style={mergedStyle}
54
- {...rest}
55
- data-slot="sidebar-provider"
56
- >
57
- <slot />
58
- </div>
59
-
60
- <script>
61
- class SidebarController {
62
- private provider: HTMLElement;
63
- private boundKeyHandler: (e: KeyboardEvent) => void;
64
- private boundResizeHandler: () => void;
65
- private wasMobile: boolean = false;
66
-
67
- constructor(provider: HTMLElement) {
68
- this.provider = provider;
69
- this.boundKeyHandler = this.handleKeydown.bind(this);
70
- this.boundResizeHandler = this.handleResize.bind(this);
71
- this.wasMobile = this.isMobile();
72
- this.setupKeyboardShortcut();
73
- this.setupCustomEvents();
74
- this.setupResizeListener();
75
- }
76
-
77
- private handleKeydown(e: KeyboardEvent) {
78
- // Skip if focus is in an editable element
79
- const target = e.target as HTMLElement | null;
80
- if (target) {
81
- const tagName = target.tagName.toLowerCase();
82
- if (
83
- tagName === "input" ||
84
- tagName === "textarea" ||
85
- tagName === "select" ||
86
- target.isContentEditable ||
87
- target.closest("[contenteditable='true']")
88
- ) {
89
- return;
90
- }
91
- }
92
-
93
- const shortcut = this.provider.getAttribute("data-keyboard-shortcut") || "b";
94
- if (e.key === shortcut && (e.metaKey || e.ctrlKey)) {
95
- e.preventDefault();
96
- this.toggle();
97
- }
98
- }
99
-
100
- private setupKeyboardShortcut() {
101
- document.removeEventListener("keydown", this.boundKeyHandler);
102
- document.addEventListener("keydown", this.boundKeyHandler);
103
- }
104
-
105
- private setupCustomEvents() {
106
- this.provider.addEventListener("sidebar:toggle", () => this.toggle());
107
- this.provider.addEventListener("sidebar:open", () => this.setOpen(true));
108
- this.provider.addEventListener("sidebar:close", () => this.setOpen(false));
109
- this.provider.addEventListener("sidebar:toggle-mobile", () => this.toggleMobile());
110
- this.provider.addEventListener("sidebar:open-mobile", () => this.setMobileOpen(true));
111
- this.provider.addEventListener("sidebar:close-mobile", () => this.setMobileOpen(false));
112
- }
113
-
114
- private handleResize() {
115
- const isMobileNow = this.isMobile();
116
- // Close mobile sheet when transitioning from mobile to desktop
117
- if (this.wasMobile && !isMobileNow) {
118
- this.setMobileOpen(false);
119
- }
120
- this.wasMobile = isMobileNow;
121
- }
122
-
123
- private setupResizeListener() {
124
- window.removeEventListener("resize", this.boundResizeHandler);
125
- window.addEventListener("resize", this.boundResizeHandler);
126
- }
127
-
128
- isMobile(): boolean {
129
- // Check if desktop sidebar is hidden (has display: none from hidden class)
130
- const desktopSidebar = this.provider.querySelector<HTMLElement>('[data-slot="sidebar"]');
131
- if (!desktopSidebar) return false;
132
- return getComputedStyle(desktopSidebar).display === "none";
133
- }
134
-
135
- getState(): "expanded" | "collapsed" {
136
- return this.provider.getAttribute("data-state") as "expanded" | "collapsed";
137
- }
138
-
139
- isOpen(): boolean {
140
- return this.getState() === "expanded";
141
- }
142
-
143
- isMobileOpen(): boolean {
144
- return this.provider.getAttribute("data-mobile-open") === "true";
145
- }
146
-
147
- toggle() {
148
- if (this.isMobile()) {
149
- this.toggleMobile();
150
- } else {
151
- this.setOpen(!this.isOpen());
152
- }
153
- }
154
-
155
- setOpen(open: boolean) {
156
- const state = open ? "expanded" : "collapsed";
157
- this.provider.setAttribute("data-state", state);
158
- this.provider.dispatchEvent(new CustomEvent("sidebar:change", { detail: { open, state } }));
159
- }
160
-
161
- toggleMobile() {
162
- // Check the actual dialog state instead of our tracked state
163
- const mobileSheet = this.provider.querySelector<HTMLElement>(".starwind-sheet");
164
- const dialogContent = mobileSheet?.querySelector<HTMLElement>(".starwind-dialog-content");
165
- const isCurrentlyOpen = dialogContent?.dataset.state === "open";
166
-
167
- this.setMobileOpen(!isCurrentlyOpen);
168
- }
169
-
170
- setMobileOpen(open: boolean) {
171
- this.provider.setAttribute("data-mobile-open", String(open));
172
-
173
- // Find the mobile sidebar Sheet and use Dialog's programmatic API
174
- const mobileSheet = this.provider.querySelector<HTMLElement>(".starwind-sheet");
175
- if (mobileSheet) {
176
- const eventName = open ? "dialog:open" : "dialog:close";
177
- mobileSheet.dispatchEvent(new CustomEvent(eventName));
178
- }
179
-
180
- this.provider.dispatchEvent(new CustomEvent("sidebar:mobile-change", { detail: { open } }));
181
- }
182
-
183
- destroy() {
184
- document.removeEventListener("keydown", this.boundKeyHandler);
185
- window.removeEventListener("resize", this.boundResizeHandler);
186
- }
187
- }
188
-
189
- const sidebarInstances = new WeakMap<HTMLElement, SidebarController>();
190
- const trackedProviders = new Set<HTMLElement>();
191
-
192
- const cleanupSidebars = () => {
193
- // Destroy controllers for providers no longer in DOM
194
- for (const provider of trackedProviders) {
195
- if (!document.contains(provider)) {
196
- sidebarInstances.get(provider)?.destroy();
197
- trackedProviders.delete(provider);
198
- }
199
- }
200
- };
201
-
202
- const setupSidebars = () => {
203
- document.querySelectorAll<HTMLElement>(".starwind-sidebar-provider").forEach((provider) => {
204
- if (!sidebarInstances.has(provider)) {
205
- sidebarInstances.set(provider, new SidebarController(provider));
206
- trackedProviders.add(provider);
207
- }
208
- });
209
- };
210
-
211
- setupSidebars();
212
- document.addEventListener("astro:before-swap", cleanupSidebars);
213
- document.addEventListener("astro:after-swap", setupSidebars);
214
- document.addEventListener("starwind:init", setupSidebars);
215
- </script>
@@ -1,72 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cv } from "css-variants";
4
-
5
- export interface SidebarRailProps extends HTMLAttributes<"button"> {}
6
- type Props = SidebarRailProps;
7
-
8
- export const sidebarRail = cv({
9
- base: [
10
- "starwind-sidebar-rail",
11
- "absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex",
12
- "group-data-[side=left]:-right-4 group-data-[side=right]:left-0",
13
- "after:absolute after:inset-y-0 after:left-1/2 after:w-6xs",
14
- "hover:after:bg-sidebar-border",
15
- "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
16
- "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize",
17
- "[[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
18
- "hover:group-data-[collapsible=offcanvas]:bg-sidebar",
19
- "group-data-[collapsible=offcanvas]:translate-x-0",
20
- "group-data-[collapsible=offcanvas]:after:left-full",
21
- "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
22
- "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
23
- ],
24
- });
25
-
26
- const { class: className, ...rest } = Astro.props;
27
- ---
28
-
29
- <button
30
- type="button"
31
- class:list={[sidebarRail(), className]}
32
- data-sidebar="rail"
33
- aria-label="Toggle Sidebar"
34
- tabindex="-1"
35
- {...rest}
36
- data-slot="sidebar-rail"></button>
37
-
38
- <script>
39
- class SidebarRailHandler {
40
- private rail: HTMLElement;
41
- private provider: HTMLElement | null;
42
-
43
- constructor(rail: HTMLElement) {
44
- this.rail = rail;
45
- this.provider = rail.closest<HTMLElement>('[data-slot="sidebar-provider"]');
46
- this.init();
47
- }
48
-
49
- private init() {
50
- this.rail.addEventListener("click", this.handleClick.bind(this));
51
- }
52
-
53
- private handleClick() {
54
- if (this.provider) {
55
- this.provider.dispatchEvent(new CustomEvent("sidebar:toggle"));
56
- }
57
- }
58
- }
59
-
60
- const railInstances = new WeakMap<HTMLElement, SidebarRailHandler>();
61
-
62
- const setupSidebarRails = () => {
63
- document.querySelectorAll<HTMLElement>(".starwind-sidebar-rail").forEach((rail) => {
64
- if (railInstances.has(rail)) return;
65
- railInstances.set(rail, new SidebarRailHandler(rail));
66
- });
67
- };
68
-
69
- setupSidebarRails();
70
- document.addEventListener("astro:after-swap", setupSidebarRails);
71
- document.addEventListener("starwind:init", setupSidebarRails);
72
- </script>
@@ -1,25 +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 Separator from "../separator/Separator.astro";
7
-
8
- const sidebarSeparator = cv({
9
- base: "bg-sidebar-border mx-5xs w-auto",
10
- });
11
-
12
- export interface SidebarSeparatorProps extends ComponentProps<typeof Separator> {}
13
- type Props = SidebarSeparatorProps;
14
-
15
- const { orientation = "horizontal", class: className, ...rest } = Astro.props;
16
- ---
17
-
18
- <Separator
19
- orientation={orientation}
20
- class:list={[sidebarSeparator(), className]}
21
- data-sidebar="separator"
22
- {...rest}
23
- data-slot="sidebar-separator"
24
- />
25
-
@@ -1,69 +0,0 @@
1
- ---
2
- import type { ComponentProps } from "astro/types";
3
- import { cv } from "css-variants";
4
- import IconPanelLeft from "~icons/lucide/panel-left";
5
-
6
- const sidebarTrigger = cv({
7
- base: "starwind-sidebar-trigger",
8
- });
9
-
10
- // eslint-disable-next-line typescript/consistent-type-imports
11
- import Button from "../button/Button.astro";
12
-
13
- export interface SidebarTriggerProps extends ComponentProps<typeof Button> {}
14
- type Props = SidebarTriggerProps;
15
-
16
- const { class: className, size = "icon-sm", variant = "ghost", ...rest } = Astro.props;
17
- ---
18
-
19
- <Button
20
- variant={variant}
21
- size={size}
22
- class:list={[sidebarTrigger(), className]}
23
- data-sidebar="trigger"
24
- aria-label="Toggle Sidebar"
25
- {...rest}
26
- data-slot="sidebar-trigger"
27
- >
28
- <slot name="icon">
29
- <IconPanelLeft />
30
- </slot>
31
- <span class="sr-only">Toggle Sidebar</span>
32
- </Button>
33
-
34
- <script>
35
- class SidebarTriggerHandler {
36
- private trigger: HTMLElement;
37
- private provider: HTMLElement | null;
38
-
39
- constructor(trigger: HTMLElement) {
40
- this.trigger = trigger;
41
- this.provider = trigger.closest<HTMLElement>('[data-slot="sidebar-provider"]');
42
- this.init();
43
- }
44
-
45
- private init() {
46
- this.trigger.addEventListener("click", this.handleClick.bind(this));
47
- }
48
-
49
- private handleClick() {
50
- if (this.provider) {
51
- this.provider.dispatchEvent(new CustomEvent("sidebar:toggle"));
52
- }
53
- }
54
- }
55
-
56
- const triggerInstances = new WeakMap<HTMLElement, SidebarTriggerHandler>();
57
-
58
- const setupSidebarTriggers = () => {
59
- document.querySelectorAll<HTMLElement>(".starwind-sidebar-trigger").forEach((trigger) => {
60
- if (triggerInstances.has(trigger)) return;
61
- triggerInstances.set(trigger, new SidebarTriggerHandler(trigger));
62
- });
63
- };
64
-
65
- setupSidebarTriggers();
66
- document.addEventListener("astro:after-swap", setupSidebarTriggers);
67
- document.addEventListener("starwind:init", setupSidebarTriggers);
68
- </script>
69
-
@@ -1,14 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cv } from "css-variants";
4
-
5
- type Props = HTMLAttributes<"div">;
6
-
7
- const { class: className, ...rest } = Astro.props;
8
-
9
- export const skeleton = cv({
10
- base: "bg-muted animate-pulse rounded-md",
11
- });
12
- ---
13
-
14
- <div class:list={[skeleton(), className]} {...rest} data-slot="skeleton"></div>