fulldev-ui 0.12.0 → 0.13.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 (130) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/package.json +24 -20
  3. package/public/r/accordion.json +1 -1
  4. package/public/r/alert-dialog.json +1 -1
  5. package/public/r/aspect-ratio.json +23 -0
  6. package/public/r/attachment.json +66 -0
  7. package/public/r/button-group.json +41 -0
  8. package/public/r/carousel.json +8 -8
  9. package/public/r/collapsible.json +1 -1
  10. package/public/r/combobox.json +4 -4
  11. package/public/r/command.json +2 -2
  12. package/public/r/components.json +8 -0
  13. package/public/r/dialog.json +1 -1
  14. package/public/r/doc-1.json +1 -1
  15. package/public/r/drawer.json +109 -0
  16. package/public/r/dropdown-menu.json +1 -1
  17. package/public/r/hover-card.json +2 -2
  18. package/public/r/init.json +1 -1
  19. package/public/r/navigation-menu.json +2 -2
  20. package/public/r/pagination.json +59 -0
  21. package/public/r/popover.json +1 -1
  22. package/public/r/radio-group.json +1 -1
  23. package/public/r/registry.json +414 -24
  24. package/public/r/resizable.json +36 -0
  25. package/public/r/reviews-3.json +1 -1
  26. package/public/r/select.json +1 -1
  27. package/public/r/sheet.json +1 -1
  28. package/public/r/sidebar.json +1 -1
  29. package/public/r/slider.json +2 -2
  30. package/public/r/switch.json +1 -1
  31. package/public/r/tabs.json +1 -1
  32. package/public/r/toast.json +80 -0
  33. package/public/r/toggle-group.json +34 -0
  34. package/public/r/toggle.json +1 -1
  35. package/public/r/tooltip.json +1 -1
  36. package/public/r/typography.json +21 -16
  37. package/registry/init/global.css +2 -0
  38. package/registry.json +375 -24
  39. package/src/components/blocks/doc-1.astro +76 -0
  40. package/src/components/blocks/reviews-3.astro +1 -1
  41. package/src/components/ui/aspect-ratio/aspect-ratio.astro +25 -0
  42. package/src/components/ui/aspect-ratio/index.ts +1 -0
  43. package/src/components/ui/attachment/attachment-action.astro +20 -0
  44. package/src/components/ui/attachment/attachment-actions.astro +20 -0
  45. package/src/components/ui/attachment/attachment-content.astro +20 -0
  46. package/src/components/ui/attachment/attachment-description.astro +20 -0
  47. package/src/components/ui/attachment/attachment-group.astro +20 -0
  48. package/src/components/ui/attachment/attachment-media.astro +36 -0
  49. package/src/components/ui/attachment/attachment-title.astro +20 -0
  50. package/src/components/ui/attachment/attachment-trigger.astro +24 -0
  51. package/src/components/ui/attachment/attachment.astro +52 -0
  52. package/src/components/ui/attachment/index.ts +9 -0
  53. package/src/components/ui/button-group/button-group-separator.astro +29 -0
  54. package/src/components/ui/button-group/button-group-text.astro +20 -0
  55. package/src/components/ui/button-group/button-group-variants.ts +20 -0
  56. package/src/components/ui/button-group/button-group.astro +30 -0
  57. package/src/components/ui/button-group/index.ts +7 -0
  58. package/src/components/ui/carousel/carousel-content.astro +11 -13
  59. package/src/components/ui/carousel/carousel-item.astro +2 -5
  60. package/src/components/ui/carousel/carousel-next.astro +0 -3
  61. package/src/components/ui/carousel/carousel-previous.astro +0 -3
  62. package/src/components/ui/carousel/carousel.astro +19 -219
  63. package/src/components/ui/carousel/index.ts +1 -5
  64. package/src/components/ui/combobox/combobox-input.astro +11 -4
  65. package/src/components/ui/combobox/combobox-trigger.astro +7 -7
  66. package/src/components/ui/drawer/drawer-close.astro +13 -0
  67. package/src/components/ui/drawer/drawer-content.astro +43 -0
  68. package/src/components/ui/drawer/drawer-description.astro +17 -0
  69. package/src/components/ui/drawer/drawer-footer.astro +17 -0
  70. package/src/components/ui/drawer/drawer-header.astro +17 -0
  71. package/src/components/ui/drawer/drawer-indent-background.astro +11 -0
  72. package/src/components/ui/drawer/drawer-indent.astro +11 -0
  73. package/src/components/ui/drawer/drawer-overlay.astro +21 -0
  74. package/src/components/ui/drawer/drawer-popup.astro +36 -0
  75. package/src/components/ui/drawer/drawer-portal.astro +27 -0
  76. package/src/components/ui/drawer/drawer-provider.astro +11 -0
  77. package/src/components/ui/drawer/drawer-swipe-handle.astro +20 -0
  78. package/src/components/ui/drawer/drawer-title.astro +17 -0
  79. package/src/components/ui/drawer/drawer-trigger.astro +21 -0
  80. package/src/components/ui/drawer/drawer-viewport.astro +21 -0
  81. package/src/components/ui/drawer/drawer-virtual-keyboard-provider.astro +11 -0
  82. package/src/components/ui/drawer/drawer.astro +60 -0
  83. package/src/components/ui/drawer/index.ts +28 -0
  84. package/src/components/ui/navigation-menu/navigation-menu.astro +2 -2
  85. package/src/components/ui/pagination/index.ts +7 -0
  86. package/src/components/ui/pagination/pagination-content.astro +17 -0
  87. package/src/components/ui/pagination/pagination-ellipsis.astro +22 -0
  88. package/src/components/ui/pagination/pagination-item.astro +11 -0
  89. package/src/components/ui/pagination/pagination-link.astro +41 -0
  90. package/src/components/ui/pagination/pagination-next.astro +27 -0
  91. package/src/components/ui/pagination/pagination-previous.astro +27 -0
  92. package/src/components/ui/pagination/pagination.astro +19 -0
  93. package/src/components/ui/resizable/index.ts +4 -0
  94. package/src/components/ui/resizable/resizable-handle.astro +32 -0
  95. package/src/components/ui/resizable/resizable-panel.astro +36 -0
  96. package/src/components/ui/resizable/resizable.astro +43 -0
  97. package/src/components/ui/slider/slider.astro +1 -1
  98. package/src/components/ui/toast/index.ts +26 -0
  99. package/src/components/ui/toast/toast-action.astro +25 -0
  100. package/src/components/ui/toast/toast-close.astro +27 -0
  101. package/src/components/ui/toast/toast-content.astro +20 -0
  102. package/src/components/ui/toast/toast-description.astro +18 -0
  103. package/src/components/ui/toast/toast-icon.astro +37 -0
  104. package/src/components/ui/toast/toast-item.astro +28 -0
  105. package/src/components/ui/toast/toast-template.astro +11 -0
  106. package/src/components/ui/toast/toast-title.astro +17 -0
  107. package/src/components/ui/toast/toast-viewport.astro +20 -0
  108. package/src/components/ui/toast/toast.astro +51 -0
  109. package/src/components/ui/toast/toaster.astro +37 -0
  110. package/src/components/ui/toggle-group/index.ts +2 -0
  111. package/src/components/ui/toggle-group/toggle-group-item.astro +44 -0
  112. package/src/components/ui/toggle-group/toggle-group.astro +74 -0
  113. package/src/components/ui/typography/typeset.css +441 -0
  114. package/src/components/ui/typography/typography-a.astro +13 -22
  115. package/src/components/ui/typography/typography-blockquote.astro +4 -23
  116. package/src/components/ui/typography/typography-h1.astro +13 -26
  117. package/src/components/ui/typography/typography-h2.astro +13 -31
  118. package/src/components/ui/typography/typography-h3.astro +9 -26
  119. package/src/components/ui/typography/typography-h4.astro +9 -26
  120. package/src/components/ui/typography/typography-inline-code.astro +8 -27
  121. package/src/components/ui/typography/typography-lead.astro +4 -26
  122. package/src/components/ui/typography/typography-list-item.astro +4 -24
  123. package/src/components/ui/typography/typography-list.astro +10 -40
  124. package/src/components/ui/typography/typography-p.astro +9 -28
  125. package/src/components/ui/typography/typography-table-cell.astro +9 -40
  126. package/src/components/ui/typography/typography-table-head.astro +9 -35
  127. package/src/components/ui/typography/typography-table-row.astro +4 -23
  128. package/src/components/ui/typography/typography-table.astro +8 -28
  129. package/src/components/ui/typography/typography.astro +10 -283
  130. package/src/styles/global.css +2 -0
@@ -15,7 +15,7 @@
15
15
  "files": [
16
16
  {
17
17
  "path": "src/components/blocks/reviews-3.astro",
18
- "content": "---\nimport type { ImageMetadata } from \"astro\"\nimport type { HTMLAttributes } from \"astro/types\"\nimport QuoteIcon from \"@lucide/astro/icons/quote\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n} from \"@/components/ui/carousel\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionContainer,\n SectionDescription,\n SectionTitle,\n} from \"@/components/ui/section\"\n\ntype Props = HTMLAttributes<\"section\"> & {\n title?: string\n description?: string\n reviews: {\n rating: number\n quote: string\n image?: ImageMetadata\n initials: string\n name: string\n role: string\n }[]\n}\n\nconst { class: className, title, description, reviews, ...props } = Astro.props\n---\n\n<Section class={cn(\"\", className)} {...props}>\n {\n (title || description) && (\n <SectionContainer class=\"items-center gap-4 text-center\">\n {title && <SectionTitle>{title}</SectionTitle>}\n {description && (\n <SectionDescription class=\"max-w-2xl\">\n {description}\n </SectionDescription>\n )}\n </SectionContainer>\n )\n }\n <SectionContainer>\n <Carousel opts={{ loop: true, align: \"center\" }} class=\"mx-auto max-w-3xl\">\n <CarouselContent>\n {\n reviews.map((item) => (\n <CarouselItem>\n <div class=\"flex flex-col items-center gap-6 px-4 py-8 text-center\">\n <QuoteIcon class=\"text-primary size-10\" />\n <Rating value={item.rating} />\n <blockquote class=\"text-foreground text-xl leading-relaxed font-medium text-balance sm:text-2xl\">\n {item.quote}\n </blockquote>\n <div class=\"flex items-center gap-3 pt-2\">\n <Avatar size=\"lg\">\n <AvatarImage src={item.image} alt={item.name} />\n <AvatarFallback>{item.initials}</AvatarFallback>\n </Avatar>\n <div class=\"text-left\">\n <p class=\"text-foreground text-sm font-medium\">\n {item.name}\n </p>\n <p class=\"text-muted-foreground text-xs\">{item.role}</p>\n </div>\n </div>\n </div>\n </CarouselItem>\n ))\n }\n </CarouselContent>\n <CarouselPrevious />\n <CarouselNext />\n </Carousel>\n </SectionContainer>\n</Section>\n",
18
+ "content": "---\nimport type { ImageMetadata } from \"astro\"\nimport type { HTMLAttributes } from \"astro/types\"\nimport QuoteIcon from \"@lucide/astro/icons/quote\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport {\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n} from \"@/components/ui/carousel\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionContainer,\n SectionDescription,\n SectionTitle,\n} from \"@/components/ui/section\"\n\ntype Props = HTMLAttributes<\"section\"> & {\n title?: string\n description?: string\n reviews: {\n rating: number\n quote: string\n image?: ImageMetadata\n initials: string\n name: string\n role: string\n }[]\n}\n\nconst { class: className, title, description, reviews, ...props } = Astro.props\n---\n\n<Section class={cn(\"\", className)} {...props}>\n {\n (title || description) && (\n <SectionContainer class=\"items-center gap-4 text-center\">\n {title && <SectionTitle>{title}</SectionTitle>}\n {description && (\n <SectionDescription class=\"max-w-2xl\">\n {description}\n </SectionDescription>\n )}\n </SectionContainer>\n )\n }\n <SectionContainer>\n <Carousel loop drag class=\"mx-auto w-[calc(100%-6rem)] max-w-3xl\">\n <CarouselContent>\n {\n reviews.map((item) => (\n <CarouselItem>\n <div class=\"flex flex-col items-center gap-6 px-4 py-8 text-center\">\n <QuoteIcon class=\"text-primary size-10\" />\n <Rating value={item.rating} />\n <blockquote class=\"text-foreground text-xl leading-relaxed font-medium text-balance sm:text-2xl\">\n {item.quote}\n </blockquote>\n <div class=\"flex items-center gap-3 pt-2\">\n <Avatar size=\"lg\">\n <AvatarImage src={item.image} alt={item.name} />\n <AvatarFallback>{item.initials}</AvatarFallback>\n </Avatar>\n <div class=\"text-left\">\n <p class=\"text-foreground text-sm font-medium\">\n {item.name}\n </p>\n <p class=\"text-muted-foreground text-xs\">{item.role}</p>\n </div>\n </div>\n </div>\n </CarouselItem>\n ))\n }\n </CarouselContent>\n <CarouselPrevious />\n <CarouselNext />\n </Carousel>\n </SectionContainer>\n</Section>\n",
19
19
  "type": "registry:block"
20
20
  }
21
21
  ],
@@ -4,7 +4,7 @@
4
4
  "title": "Select",
5
5
  "description": "Displays a list of options for the user to pick from, triggered by a button.",
6
6
  "dependencies": [
7
- "@data-slot/select@^1.0.1",
7
+ "@data-slot/select@^1.0.2",
8
8
  "@lucide/astro"
9
9
  ],
10
10
  "files": [
@@ -4,7 +4,7 @@
4
4
  "title": "Sheet",
5
5
  "description": "A sliding panel component that appears from the edge of the screen.",
6
6
  "dependencies": [
7
- "@data-slot/dialog@^1.0.1",
7
+ "@data-slot/dialog@^1.0.2",
8
8
  "@lucide/astro"
9
9
  ],
10
10
  "registryDependencies": [
@@ -4,7 +4,7 @@
4
4
  "title": "Sidebar",
5
5
  "description": "A composable, themeable, and customizable Astro sidebar component.",
6
6
  "dependencies": [
7
- "@data-slot/tooltip@^1.0.1",
7
+ "@data-slot/tooltip@^1.0.2",
8
8
  "@lucide/astro"
9
9
  ],
10
10
  "registryDependencies": [
@@ -4,12 +4,12 @@
4
4
  "title": "Slider",
5
5
  "description": "An input where the user selects a value from within a given range.",
6
6
  "dependencies": [
7
- "@data-slot/slider@^1.0.1"
7
+ "@data-slot/slider@^1.0.2"
8
8
  ],
9
9
  "files": [
10
10
  {
11
11
  "path": "src/components/ui/slider/slider.astro",
12
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype SliderValue = number | [number, number]\ntype ThumbAlignment = \"center\" | \"edge\" | \"edge-client-only\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n defaultValue?: SliderValue\n min?: number\n max?: number\n step?: number\n largeStep?: number\n orientation?: \"horizontal\" | \"vertical\"\n thumbAlignment?: ThumbAlignment\n disabled?: boolean\n}\n\nconst {\n class: className,\n defaultValue,\n min,\n max,\n step,\n largeStep,\n orientation = \"horizontal\",\n thumbAlignment = \"center\",\n disabled,\n ...props\n} = Astro.props\n\nconst serializedDefaultValue = Array.isArray(defaultValue)\n ? defaultValue.join(\",\")\n : defaultValue\nconst thumbCount = String(serializedDefaultValue ?? \"\").includes(\",\") ? 2 : 1\n---\n\n<div\n data-slot=\"slider\"\n data-default-value={serializedDefaultValue}\n data-min={min}\n data-max={max}\n data-step={step}\n data-large-step={largeStep}\n data-orientation={orientation}\n data-thumb-alignment={thumbAlignment}\n data-disabled={disabled ? \"true\" : undefined}\n class={cn(\n \"data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full\",\n className\n )}\n {...props}\n>\n <div\n data-slot=\"slider-control\"\n data-orientation={orientation}\n data-disabled={disabled ? \"true\" : undefined}\n class=\"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\"\n >\n <div\n data-slot=\"slider-track\"\n class=\"bg-muted relative grow overflow-hidden rounded-full select-none data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\"\n >\n <div\n data-slot=\"slider-range\"\n class=\"bg-primary select-none data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n >\n </div>\n </div>\n {\n Array.from({ length: thumbCount }).map(() => (\n <div\n data-slot=\"slider-thumb\"\n class=\"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] select-none hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden data-[disabled]:pointer-events-none data-[disabled]:opacity-50\"\n />\n ))\n }\n </div>\n</div>\n\n<script>\n import { create } from \"@data-slot/slider\"\n\n const controllers: ReturnType<typeof create> = []\n const initialize = () => controllers.push(...create())\n initialize()\n document.addEventListener(\"astro:page-load\", initialize)\n document.addEventListener(\"astro:before-swap\", () => {\n for (const controller of controllers) controller.destroy()\n controllers.length = 0\n })\n</script>\n",
12
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype SliderValue = number | [number, number]\ntype ThumbAlignment = \"center\" | \"edge\" | \"edge-client-only\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n defaultValue?: SliderValue\n min?: number\n max?: number\n step?: number\n largeStep?: number\n orientation?: \"horizontal\" | \"vertical\"\n thumbAlignment?: ThumbAlignment\n disabled?: boolean\n}\n\nconst {\n class: className,\n defaultValue,\n min,\n max,\n step,\n largeStep,\n orientation = \"horizontal\",\n thumbAlignment = \"edge\",\n disabled,\n ...props\n} = Astro.props\n\nconst serializedDefaultValue = Array.isArray(defaultValue)\n ? defaultValue.join(\",\")\n : defaultValue\nconst thumbCount = String(serializedDefaultValue ?? \"\").includes(\",\") ? 2 : 1\n---\n\n<div\n data-slot=\"slider\"\n data-default-value={serializedDefaultValue}\n data-min={min}\n data-max={max}\n data-step={step}\n data-large-step={largeStep}\n data-orientation={orientation}\n data-thumb-alignment={thumbAlignment}\n data-disabled={disabled ? \"true\" : undefined}\n class={cn(\n \"data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full\",\n className\n )}\n {...props}\n>\n <div\n data-slot=\"slider-control\"\n data-orientation={orientation}\n data-disabled={disabled ? \"true\" : undefined}\n class=\"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\"\n >\n <div\n data-slot=\"slider-track\"\n class=\"bg-muted relative grow overflow-hidden rounded-full select-none data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\"\n >\n <div\n data-slot=\"slider-range\"\n class=\"bg-primary select-none data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n >\n </div>\n </div>\n {\n Array.from({ length: thumbCount }).map(() => (\n <div\n data-slot=\"slider-thumb\"\n class=\"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] select-none hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden data-[disabled]:pointer-events-none data-[disabled]:opacity-50\"\n />\n ))\n }\n </div>\n</div>\n\n<script>\n import { create } from \"@data-slot/slider\"\n\n const controllers: ReturnType<typeof create> = []\n const initialize = () => controllers.push(...create())\n initialize()\n document.addEventListener(\"astro:page-load\", initialize)\n document.addEventListener(\"astro:before-swap\", () => {\n for (const controller of controllers) controller.destroy()\n controllers.length = 0\n })\n</script>\n",
13
13
  "type": "registry:ui"
14
14
  },
15
15
  {
@@ -4,7 +4,7 @@
4
4
  "title": "Switch",
5
5
  "description": "A control that allows the user to toggle between checked and not checked.",
6
6
  "dependencies": [
7
- "@data-slot/switch@^1.0.1"
7
+ "@data-slot/switch@^1.0.2"
8
8
  ],
9
9
  "files": [
10
10
  {
@@ -4,7 +4,7 @@
4
4
  "title": "Tabs",
5
5
  "description": "A set of layered sections of content, known as tabs, that display one panel of content at a time.",
6
6
  "dependencies": [
7
- "@data-slot/tabs@^1.0.1"
7
+ "@data-slot/tabs@^1.0.2"
8
8
  ],
9
9
  "files": [
10
10
  {
@@ -0,0 +1,80 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "toast",
4
+ "title": "Toast",
5
+ "description": "A brief notification that appears without interrupting the user.",
6
+ "dependencies": [
7
+ "@data-slot/toast@^1.0.2",
8
+ "@lucide/astro"
9
+ ],
10
+ "registryDependencies": [
11
+ "@fulldev/button"
12
+ ],
13
+ "files": [
14
+ {
15
+ "path": "src/components/ui/toast/index.ts",
16
+ "content": "export { default as Toast } from \"./toast.astro\"\nexport { default as ToastTemplate } from \"./toast-template.astro\"\nexport { default as ToastViewport } from \"./toast-viewport.astro\"\nexport { default as ToastItem } from \"./toast-item.astro\"\nexport { default as ToastContent } from \"./toast-content.astro\"\nexport { default as ToastIcon } from \"./toast-icon.astro\"\nexport { default as ToastTitle } from \"./toast-title.astro\"\nexport { default as ToastDescription } from \"./toast-description.astro\"\nexport { default as ToastAction } from \"./toast-action.astro\"\nexport { default as ToastClose } from \"./toast-close.astro\"\nexport { default as Toaster } from \"./toaster.astro\"\n\nexport type {\n ToastActionEvent,\n ToastClearableField,\n ToastController,\n ToastOptions,\n ToastPosition,\n ToastPromiseErrorValue,\n ToastPromiseHandle,\n ToastPromiseOptions,\n ToastPromiseState,\n ToastPromiseStateValue,\n ToastShowOptions,\n ToastUpdateOptions,\n} from \"@data-slot/toast\"\n",
17
+ "type": "registry:ui"
18
+ },
19
+ {
20
+ "path": "src/components/ui/toast/toast-action.astro",
21
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants } from \"@/components/ui/button\"\n\ntype Props = HTMLAttributes<\"button\">\n\nconst {\n class: className,\n hidden = true,\n type = \"button\",\n ...props\n} = Astro.props\n---\n\n<button\n data-slot=\"toast-action\"\n type={type}\n class={cn(buttonVariants({ variant: \"outline\", size: \"sm\" }), className)}\n hidden={hidden}\n {...props}\n>\n <slot />\n</button>\n",
22
+ "type": "registry:ui"
23
+ },
24
+ {
25
+ "path": "src/components/ui/toast/toast-close.astro",
26
+ "content": "---\nimport type { ComponentProps } from \"astro/types\"\nimport XIcon from \"@lucide/astro/icons/x\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\ntype Props = ComponentProps<typeof Button>\n\nconst { class: className, ...props } = Astro.props\n---\n\n<Button\n data-slot=\"toast-close\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label=\"Close notification\"\n class={cn(\n \"text-muted-foreground hover:text-foreground relative shrink-0 after:absolute after:-inset-2 after:content-['']\",\n className\n )}\n {...props}\n>\n <slot>\n <XIcon aria-hidden=\"true\" />\n </slot>\n</Button>\n",
27
+ "type": "registry:ui"
28
+ },
29
+ {
30
+ "path": "src/components/ui/toast/toast-content.astro",
31
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<div\n data-slot=\"toast-content\"\n class={cn(\n \"flex min-h-16 items-center gap-3 overflow-hidden p-4 transition-opacity duration-200\",\n className\n )}\n {...props}\n>\n <slot />\n</div>\n",
32
+ "type": "registry:ui"
33
+ },
34
+ {
35
+ "path": "src/components/ui/toast/toast-description.astro",
36
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { class: className, hidden = true, ...props } = Astro.props\n---\n\n<div\n data-slot=\"toast-description\"\n class={cn(\"text-muted-foreground text-sm\", className)}\n hidden={hidden}\n {...props}\n>\n <slot />\n</div>\n",
37
+ "type": "registry:ui"
38
+ },
39
+ {
40
+ "path": "src/components/ui/toast/toast-icon.astro",
41
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport CircleCheckIcon from \"@lucide/astro/icons/circle-check\"\nimport InfoIcon from \"@lucide/astro/icons/info\"\nimport LoaderIcon from \"@lucide/astro/icons/loader-circle\"\nimport OctagonXIcon from \"@lucide/astro/icons/octagon-x\"\nimport TriangleAlertIcon from \"@lucide/astro/icons/triangle-alert\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"span\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<span\n data-slot=\"toast-icon\"\n class={cn(\n \"shrink-0 group-data-[type=error]/toast-item:[&_[data-toast-icon=error]]:block group-data-[type=info]/toast-item:[&_[data-toast-icon=info]]:block group-data-[type=loading]/toast-item:[&_[data-toast-icon=loading]]:block group-data-[type=success]/toast-item:[&_[data-toast-icon=success]]:block group-data-[type=warning]/toast-item:[&_[data-toast-icon=warning]]:block [&_svg]:hidden [&_svg]:size-4\",\n className\n )}\n {...props}\n>\n <CircleCheckIcon data-toast-icon=\"success\" aria-hidden=\"true\" />\n <InfoIcon data-toast-icon=\"info\" aria-hidden=\"true\" />\n <TriangleAlertIcon data-toast-icon=\"warning\" aria-hidden=\"true\" />\n <OctagonXIcon\n data-toast-icon=\"error\"\n class=\"text-destructive\"\n aria-hidden=\"true\"\n />\n <LoaderIcon\n data-toast-icon=\"loading\"\n class=\"animate-spin\"\n aria-hidden=\"true\"\n />\n</span>\n",
42
+ "type": "registry:ui"
43
+ },
44
+ {
45
+ "path": "src/components/ui/toast/toast-item.astro",
46
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"li\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<li\n data-slot=\"toast-item\"\n role=\"status\"\n aria-atomic=\"true\"\n class={cn(\n \"group/toast-item bg-popover text-popover-foreground ring-foreground/10 focus-visible:border-ring focus-visible:ring-ring/50 pointer-events-auto absolute inset-x-0 z-[calc(1000-var(--toast-index))] box-border w-full rounded-xl opacity-0 shadow-lg ring-1 transition-[transform,opacity,height,box-shadow] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] will-change-transform outline-none select-none group-data-[position=bottom-center]/toast-viewport:bottom-0 group-data-[position=bottom-center]/toast-viewport:origin-bottom group-data-[position=bottom-left]/toast-viewport:bottom-0 group-data-[position=bottom-left]/toast-viewport:origin-bottom group-data-[position=bottom-right]/toast-viewport:bottom-0 group-data-[position=bottom-right]/toast-viewport:origin-bottom group-data-[position=top-center]/toast-viewport:top-0 group-data-[position=top-center]/toast-viewport:origin-top group-data-[position=top-left]/toast-viewport:top-0 group-data-[position=top-left]/toast-viewport:origin-top group-data-[position=top-right]/toast-viewport:top-0 group-data-[position=top-right]/toast-viewport:origin-top focus-visible:ring-3\",\n \"[transform:translate3d(0,calc(var(--toast-lift,-1)*-100%),0)] data-[mounted=true]:[transform:translate3d(0,0,0)] data-[mounted=true]:opacity-100 data-[swiping=true]:transition-none data-[visible=false]:pointer-events-none data-[visible=false]:opacity-0\",\n \"data-[mounted=true]:data-[expanded=true]:h-(--toast-initial-height) data-[mounted=true]:data-[expanded=true]:[transform:translate3d(0,calc(var(--toast-offset,0px)*var(--toast-lift,-1)),0)] data-[mounted=true]:data-[expanded=false]:data-[front=false]:h-(--toast-front-height) data-[mounted=true]:data-[expanded=false]:data-[front=false]:[transform:translate3d(0,calc(var(--toast-collapsed-offset-y,0px)*var(--toast-lift,-1)),0)_scale(calc(1-var(--toast-index,0)*0.05))]\",\n \"data-[removed=true]:data-[front=false]:data-[expanded=false]:[transform:translate3d(0,40%,0)] data-[removed=true]:data-[front=false]:data-[expanded=false]:opacity-0 data-[removed=true]:data-[front=false]:data-[expanded=true]:[transform:translate3d(0,calc(var(--toast-lift,-1)*var(--toast-offset,0px)+var(--toast-lift,-1)*-100%),0)] data-[removed=true]:data-[front=false]:data-[expanded=true]:opacity-0 data-[removed=true]:data-[front=true]:[transform:translate3d(0,calc(var(--toast-lift,-1)*-100%),0)] data-[removed=true]:data-[front=true]:opacity-0\",\n \"data-[swiping=true]:data-[expanded=true]:[transform:translate3d(var(--toast-swipe-amount-x,0px),calc(var(--toast-offset,0px)*var(--toast-lift,-1)+var(--toast-swipe-amount-y,0px)),0)] data-[swiping=true]:data-[front=false]:data-[expanded=false]:[transform:translate3d(var(--toast-swipe-amount-x,0px),calc(var(--toast-collapsed-offset-y,0px)*var(--toast-lift,-1)+var(--toast-swipe-amount-y,0px)),0)_scale(calc(1-var(--toast-index,0)*0.05))] data-[swiping=true]:data-[front=true]:[transform:translate3d(var(--toast-swipe-amount-x,0px),var(--toast-swipe-amount-y,0px),0)]\",\n \"data-[removed=true]:data-[swipe-out=true]:opacity-0 data-[removed=true]:data-[swipe-out=true]:data-[front=false]:data-[expanded=false]:[transform:translate3d(var(--toast-swipe-end-x,0px),calc(var(--toast-collapsed-offset-y,0px)*var(--toast-lift,-1)+var(--toast-swipe-end-y,0px)),0)_scale(calc(1-var(--toast-index,0)*0.05))] data-[removed=true]:data-[swipe-out=true]:data-[front=false]:data-[expanded=true]:[transform:translate3d(var(--toast-swipe-end-x,0px),calc(var(--toast-lift,-1)*var(--toast-offset,0px)+var(--toast-swipe-end-y,0px)),0)] data-[removed=true]:data-[swipe-out=true]:data-[front=true]:[transform:translate3d(var(--toast-swipe-end-x,0px),var(--toast-swipe-end-y,0px),0)]\",\n \"after:absolute after:left-0 after:h-[calc(var(--toast-gap,0px)+1px)] after:w-full after:content-[''] group-data-[position=bottom-center]/toast-viewport:after:bottom-full group-data-[position=bottom-left]/toast-viewport:after:bottom-full group-data-[position=bottom-right]/toast-viewport:after:bottom-full group-data-[position=top-center]/toast-viewport:after:top-full group-data-[position=top-left]/toast-viewport:after:top-full group-data-[position=top-right]/toast-viewport:after:top-full data-[expanded=false]:data-[front=false]:data-open:[&>*]:opacity-0\",\n className\n )}\n {...props}\n>\n <slot />\n</li>\n",
47
+ "type": "registry:ui"
48
+ },
49
+ {
50
+ "path": "src/components/ui/toast/toast-template.astro",
51
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { ...props } = Astro.props\n---\n\n<template data-slot=\"toast-template\" {...props}>\n <slot />\n</template>\n",
52
+ "type": "registry:ui"
53
+ },
54
+ {
55
+ "path": "src/components/ui/toast/toast-title.astro",
56
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<div\n data-slot=\"toast-title\"\n class={cn(\"text-sm font-medium\", className)}\n {...props}\n>\n <slot />\n</div>\n",
57
+ "type": "registry:ui"
58
+ },
59
+ {
60
+ "path": "src/components/ui/toast/toast-viewport.astro",
61
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"ol\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<ol\n data-slot=\"toast-viewport\"\n class={cn(\n \"group/toast-viewport pointer-events-none fixed z-50 m-0 h-(--toast-stack-size,0px) w-[min(24rem,calc(100vw-2rem))] list-none p-0 outline-none [--toast-collapsed-peek:0.75rem] [--toast-gap:0.75rem] data-[position=bottom-center]:bottom-4 data-[position=bottom-center]:left-1/2 data-[position=bottom-center]:-translate-x-1/2 data-[position=bottom-left]:bottom-4 data-[position=bottom-left]:left-4 data-[position=bottom-right]:right-4 data-[position=bottom-right]:bottom-4 data-[position=top-center]:top-4 data-[position=top-center]:left-1/2 data-[position=top-center]:-translate-x-1/2 data-[position=top-left]:top-4 data-[position=top-left]:left-4 data-[position=top-right]:top-4 data-[position=top-right]:right-4\",\n className\n )}\n {...props}\n>\n <slot />\n</ol>\n",
62
+ "type": "registry:ui"
63
+ },
64
+ {
65
+ "path": "src/components/ui/toast/toast.astro",
66
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport type { ToastPosition } from \"@data-slot/toast\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n limit?: number\n duration?: number\n position?: ToastPosition\n pauseOnHover?: boolean\n pauseOnFocus?: boolean\n portal?: boolean\n}\n\nconst {\n class: className,\n limit,\n duration,\n position,\n pauseOnHover,\n pauseOnFocus,\n portal,\n ...props\n} = Astro.props\n---\n\n<div\n data-slot=\"toast\"\n data-limit={limit}\n data-duration={duration}\n data-position={position}\n data-pause-on-hover={pauseOnHover}\n data-pause-on-focus={pauseOnFocus}\n data-portal={portal}\n class={className}\n {...props}\n>\n <slot />\n</div>\n\n<script>\n import { create } from \"@data-slot/toast\"\n\n const controllers: ReturnType<typeof create> = []\n const initialize = () => controllers.push(...create())\n initialize()\n document.addEventListener(\"astro:page-load\", initialize)\n document.addEventListener(\"astro:before-swap\", () => {\n for (const controller of controllers) controller.destroy()\n controllers.length = 0\n })\n</script>\n",
67
+ "type": "registry:ui"
68
+ },
69
+ {
70
+ "path": "src/components/ui/toast/toaster.astro",
71
+ "content": "---\nimport type { ComponentProps } from \"astro/types\"\n\nimport ToastAction from \"./toast-action.astro\"\nimport ToastClose from \"./toast-close.astro\"\nimport ToastContent from \"./toast-content.astro\"\nimport ToastDescription from \"./toast-description.astro\"\nimport ToastIcon from \"./toast-icon.astro\"\nimport ToastItem from \"./toast-item.astro\"\nimport ToastTemplate from \"./toast-template.astro\"\nimport ToastTitle from \"./toast-title.astro\"\nimport ToastViewport from \"./toast-viewport.astro\"\nimport Toast from \"./toast.astro\"\n\ntype Props = ComponentProps<typeof Toast> & {\n viewportClass?: string\n}\n\nconst { viewportClass, ...props } = Astro.props\n---\n\n<Toast {...props}>\n <ToastTemplate>\n <ToastItem>\n <ToastContent>\n <ToastIcon />\n <div class=\"flex min-w-0 flex-1 flex-col gap-1\">\n <ToastTitle />\n <ToastDescription />\n </div>\n <ToastAction />\n <ToastClose />\n </ToastContent>\n </ToastItem>\n </ToastTemplate>\n <ToastViewport class={viewportClass} />\n</Toast>\n",
72
+ "type": "registry:ui"
73
+ }
74
+ ],
75
+ "docs": "https://ui.full.dev/components/toast/",
76
+ "categories": [
77
+ "ui"
78
+ ],
79
+ "type": "registry:ui"
80
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "toggle-group",
4
+ "title": "Toggle Group",
5
+ "description": "A set of two-state buttons that can be toggled independently or as a single choice.",
6
+ "dependencies": [
7
+ "@data-slot/toggle-group@^1.0.2"
8
+ ],
9
+ "registryDependencies": [
10
+ "@fulldev/toggle"
11
+ ],
12
+ "files": [
13
+ {
14
+ "path": "src/components/ui/toggle-group/index.ts",
15
+ "content": "export { default as ToggleGroup } from \"./toggle-group.astro\"\nexport { default as ToggleGroupItem } from \"./toggle-group-item.astro\"\n",
16
+ "type": "registry:ui"
17
+ },
18
+ {
19
+ "path": "src/components/ui/toggle-group/toggle-group-item.astro",
20
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n toggleVariants,\n type ToggleVariantProps,\n} from \"@/components/ui/toggle/toggle-variants\"\n\ntype Props = HTMLAttributes<\"button\"> &\n ToggleVariantProps & {\n value: string\n disabled?: boolean\n }\n\nconst {\n class: className,\n value,\n disabled,\n variant = \"default\",\n size = \"default\",\n type = \"button\",\n ...props\n} = Astro.props\n---\n\n<button\n data-slot=\"toggle-group-item\"\n data-value={value}\n data-disabled={disabled ? \"\" : undefined}\n type={type}\n disabled={disabled}\n aria-pressed=\"false\"\n class={cn(\n \"data-[state=on]:bg-muted shrink-0 group-aria-disabled/toggle-group:pointer-events-none group-aria-disabled/toggle-group:opacity-50 focus:z-10 focus-visible:z-10\",\n \"group-data-[variant=outline]/toggle-group:border-input group-data-[variant=default]/toggle-group:border-0 group-data-[variant=default]/toggle-group:shadow-none group-data-[variant=outline]/toggle-group:border group-data-[variant=outline]/toggle-group:shadow-xs group-data-[variant=default]/toggle-group:data-[state=off]:bg-transparent group-data-[variant=outline]/toggle-group:data-[state=off]:bg-transparent\",\n \"group-data-[size=default]/toggle-group:h-9 group-data-[size=default]/toggle-group:min-w-9 group-data-[size=default]/toggle-group:px-2.5 group-data-[size=lg]/toggle-group:h-10 group-data-[size=lg]/toggle-group:min-w-10 group-data-[size=lg]/toggle-group:px-2.5 group-data-[size=sm]/toggle-group:h-8 group-data-[size=sm]/toggle-group:min-w-8 group-data-[size=sm]/toggle-group:px-2.5 group-data-[size=default]/toggle-group:has-data-[icon=inline-end]:pr-2 group-data-[size=lg]/toggle-group:has-data-[icon=inline-end]:pr-2 group-data-[size=sm]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[size=default]/toggle-group:has-data-[icon=inline-start]:pl-2 group-data-[size=lg]/toggle-group:has-data-[icon=inline-start]:pl-2 group-data-[size=sm]/toggle-group:has-data-[icon=inline-start]:pl-1.5\",\n toggleVariants({ variant, size }),\n className\n )}\n {...props}\n>\n <slot />\n</button>\n",
21
+ "type": "registry:ui"
22
+ },
23
+ {
24
+ "path": "src/components/ui/toggle-group/toggle-group.astro",
25
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport type { ToggleVariantProps } from \"@/components/ui/toggle/toggle-variants\"\n\ntype Props = HTMLAttributes<\"div\"> &\n ToggleVariantProps & {\n defaultValue?: string | string[]\n multiple?: boolean\n orientation?: \"horizontal\" | \"vertical\"\n loop?: boolean\n disabled?: boolean\n spacing?: number\n }\n\nconst {\n class: className,\n style,\n defaultValue,\n multiple,\n orientation = \"horizontal\",\n loop,\n disabled,\n variant,\n size,\n spacing = 2,\n ...props\n} = Astro.props\n\nconst serializedDefaultValue = Array.isArray(defaultValue)\n ? defaultValue.join(\" \")\n : defaultValue\n\nconst resolvedStyle =\n typeof style === \"string\"\n ? `--gap: ${spacing}; ${style}`\n : { \"--gap\": spacing, ...(style ?? {}) }\n---\n\n<div\n data-slot=\"toggle-group\"\n data-default-value={serializedDefaultValue}\n data-multiple={multiple ? \"\" : undefined}\n data-orientation={orientation}\n data-horizontal={orientation === \"horizontal\" ? \"\" : undefined}\n data-vertical={orientation === \"vertical\" ? \"\" : undefined}\n data-loop={loop}\n data-disabled={disabled ? \"\" : undefined}\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n style={resolvedStyle}\n class={cn(\n \"group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-md data-vertical:flex-col data-vertical:items-stretch data-[spacing=0]:data-[variant=outline]:shadow-xs [&[data-orientation=horizontal][data-spacing='0']>[data-slot=toggle-group-item]:first-child]:rounded-l-md [&[data-orientation=horizontal][data-spacing='0']>[data-slot=toggle-group-item]:last-child]:rounded-r-md [&[data-orientation=horizontal][data-spacing='0'][data-variant=outline]>[data-slot=toggle-group-item]:not(:first-child)]:border-l-0 [&[data-orientation=vertical][data-spacing='0']>[data-slot=toggle-group-item]:first-child]:rounded-t-md [&[data-orientation=vertical][data-spacing='0']>[data-slot=toggle-group-item]:last-child]:rounded-b-md [&[data-orientation=vertical][data-spacing='0'][data-variant=outline]>[data-slot=toggle-group-item]:not(:first-child)]:border-t-0 [&[data-spacing='0']>[data-slot=toggle-group-item]]:rounded-none [&[data-spacing='0']>[data-slot=toggle-group-item]]:px-2 [&[data-spacing='0']>[data-slot=toggle-group-item]]:shadow-none [&[data-spacing='0']>[data-slot=toggle-group-item]:has([data-icon=inline-end])]:pr-1.5 [&[data-spacing='0']>[data-slot=toggle-group-item]:has([data-icon=inline-start])]:pl-1.5\",\n className\n )}\n {...props}\n>\n <slot />\n</div>\n\n<script>\n import { create } from \"@data-slot/toggle-group\"\n\n const controllers: ReturnType<typeof create> = []\n const initialize = () => controllers.push(...create())\n initialize()\n document.addEventListener(\"astro:page-load\", initialize)\n document.addEventListener(\"astro:before-swap\", () => {\n for (const controller of controllers) controller.destroy()\n controllers.length = 0\n })\n</script>\n",
26
+ "type": "registry:ui"
27
+ }
28
+ ],
29
+ "docs": "https://ui.full.dev/components/toggle-group/",
30
+ "categories": [
31
+ "ui"
32
+ ],
33
+ "type": "registry:ui"
34
+ }
@@ -4,7 +4,7 @@
4
4
  "title": "Toggle",
5
5
  "description": "A two-state button that can be either on or off.",
6
6
  "dependencies": [
7
- "@data-slot/toggle@^1.0.1"
7
+ "@data-slot/toggle@^1.0.2"
8
8
  ],
9
9
  "files": [
10
10
  {
@@ -4,7 +4,7 @@
4
4
  "title": "Tooltip",
5
5
  "description": "Displays contextual information when a user hovers or focuses a trigger.",
6
6
  "dependencies": [
7
- "@data-slot/tooltip@^1.0.1"
7
+ "@data-slot/tooltip@^1.0.2"
8
8
  ],
9
9
  "files": [
10
10
  {
@@ -6,88 +6,93 @@
6
6
  "files": [
7
7
  {
8
8
  "path": "src/components/ui/typography/typography.astro",
9
- "content": "---\nimport type { HTMLTag, Polymorphic } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props<Tag extends HTMLTag> = Polymorphic<{ as: Tag; size?: Size }>\n\nconst {\n as: Tag = \"div\",\n class: className,\n size = \"default\",\n ...props\n} = Astro.props\n---\n\n<Tag\n data-slot=\"typography\"\n data-size={size}\n class={cn(\"text-foreground text-base\", className)}\n {...props}\n>\n <slot />\n</Tag>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography\"]\n > :is(\n [data-slot=\"typography-lead\"],\n [data-slot=\"typography-table-container\"],\n div,\n section,\n article,\n aside,\n nav,\n figure,\n details,\n pre,\n small,\n dl,\n img,\n picture,\n video,\n iframe\n ):not(:first-child) {\n @apply mt-6;\n }\n\n [data-slot=\"typography\"] > h1 {\n @apply scroll-m-20 text-4xl font-semibold tracking-tight text-balance;\n }\n\n [data-slot=\"typography\"] > h2 {\n @apply scroll-m-20 text-3xl font-semibold tracking-tight;\n }\n\n [data-slot=\"typography\"] > h2:first-child {\n @apply mt-0;\n }\n\n [data-slot=\"typography\"] > h2:not(:first-child) {\n @apply mt-10;\n }\n\n [data-slot=\"typography\"] > h3 {\n @apply scroll-m-20 text-2xl font-semibold tracking-tight;\n }\n\n [data-slot=\"typography\"] > h3:not(:first-child) {\n @apply mt-8;\n }\n\n [data-slot=\"typography\"] > h4 {\n @apply scroll-m-20 text-xl font-semibold tracking-tight;\n }\n\n [data-slot=\"typography\"] > h4:not(:first-child) {\n @apply mt-8;\n }\n\n [data-slot=\"typography\"]\n > :is(h1, h2, h3, h4)\n + :is(\n [data-slot=\"typography-lead\"],\n [data-slot=\"typography-table-container\"],\n div,\n section,\n article,\n aside,\n nav,\n figure,\n details,\n p,\n blockquote,\n pre,\n ul,\n ol,\n table,\n small,\n dl,\n img,\n picture,\n video,\n iframe\n ) {\n @apply mt-4;\n }\n\n [data-slot=\"typography\"] > p {\n @apply text-base leading-7;\n }\n\n [data-slot=\"typography\"] > p:not(:first-child) {\n @apply mt-6;\n }\n\n [data-slot=\"typography\"]\n > :is(h1, h2, h3, h4)\n + :is(p, [data-slot=\"typography-lead\"]):not(:first-child) {\n @apply mt-4;\n }\n\n [data-slot=\"typography\"] > a:not([data-slot]),\n [data-slot=\"typography\"]\n > :is(p, blockquote, ul, ol, dl, table)\n a:not([data-slot]) {\n @apply text-foreground font-medium underline underline-offset-4;\n }\n\n [data-slot=\"typography\"] > blockquote {\n @apply mt-6 border-l-2 pl-6 text-base italic;\n }\n\n [data-slot=\"typography\"] > hr {\n @apply border-border my-8;\n }\n\n [data-slot=\"typography\"] > pre {\n @apply border-border bg-muted/60 overflow-x-auto rounded-xl border p-4 text-sm;\n }\n\n [data-slot=\"typography\"] > .docs-code-block {\n @apply border-border bg-muted/60 relative overflow-hidden rounded-xl border;\n }\n\n [data-slot=\"typography\"] > .docs-code-block > pre,\n [data-slot=\"typography\"] > .docs-code-block > pre.astro-code {\n @apply m-0 rounded-none border-0 !bg-transparent p-4 pr-14 text-sm leading-[var(--text-sm--line-height)];\n font-family: var(--font-mono);\n }\n\n [data-slot=\"typography\"] > .docs-code-block > pre.astro-code code {\n @apply text-sm leading-[var(--text-sm--line-height)] !text-[var(--shiki-light,var(--foreground))];\n }\n\n .dark [data-slot=\"typography\"] > .docs-code-block > pre.astro-code code {\n @apply !text-[var(--shiki-dark,var(--foreground))];\n }\n\n .dark\n [data-slot=\"typography\"]\n > .docs-code-block\n > pre.astro-code\n span[style*=\"--shiki-dark\"] {\n @apply ![font-weight:var(--shiki-dark-font-weight,inherit)] !text-[var(--shiki-dark)] ![font-style:var(--shiki-dark-font-style,inherit)] ![text-decoration:var(--shiki-dark-text-decoration,inherit)];\n }\n\n [data-slot=\"typography\"] > .docs-code-block > .docs-code-copy {\n @apply border-border bg-background text-muted-foreground hover:bg-accent hover:text-accent-foreground absolute top-3 right-3 z-10 inline-flex size-8 items-center justify-center rounded-md border shadow-sm transition-colors;\n }\n\n [data-slot=\"typography\"] > .docs-code-block svg {\n @apply size-4;\n }\n\n [data-slot=\"typography\"] > ul,\n [data-slot=\"typography\"] > ol {\n @apply my-6 ml-6 text-base;\n }\n\n [data-slot=\"typography\"] > ul {\n @apply list-disc;\n }\n\n [data-slot=\"typography\"] > ol {\n @apply list-decimal;\n }\n\n [data-slot=\"typography\"] > ul > li,\n [data-slot=\"typography\"] > ol > li {\n @apply mt-2;\n }\n\n [data-slot=\"typography\"] > [data-slot=\"typography-lead\"] {\n @apply text-muted-foreground;\n }\n\n [data-slot=\"typography\"][data-size=\"sm\"] > [data-slot=\"typography-lead\"] {\n @apply text-base;\n }\n\n [data-slot=\"typography\"] > [data-slot=\"typography-lead\"],\n [data-slot=\"typography\"][data-size=\"default\"]\n > [data-slot=\"typography-lead\"] {\n @apply text-lg;\n }\n\n [data-slot=\"typography\"][data-size=\"lg\"] > [data-slot=\"typography-lead\"] {\n @apply text-xl;\n }\n\n [data-slot=\"typography\"] > small {\n @apply block leading-none font-medium;\n }\n\n [data-slot=\"typography\"] > small {\n @apply text-sm;\n }\n\n [data-slot=\"typography\"] > table {\n @apply border-border my-6 block w-full overflow-x-auto rounded-lg border;\n border-collapse: separate;\n border-spacing: 0;\n }\n\n [data-slot=\"typography\"] > table th,\n [data-slot=\"typography\"] > table td {\n @apply border-border border-b px-4 py-2 text-left align-top whitespace-nowrap;\n }\n\n [data-slot=\"typography\"] > table th {\n @apply text-foreground bg-muted/40 font-medium;\n }\n\n [data-slot=\"typography\"] > table tr:last-child td {\n @apply border-b-0;\n }\n\n [data-slot=\"typography\"] > table thead,\n [data-slot=\"typography\"] > table tbody,\n [data-slot=\"typography\"] > table tr {\n @apply w-full;\n }\n\n [data-slot=\"typography\"] > table tr {\n @apply grid grid-cols-[minmax(0,1fr)_minmax(0,1fr)_minmax(0,1fr)];\n }\n\n [data-slot=\"typography\"] > table tr {\n @apply even:bg-muted/40 m-0 border-t p-0 first:border-t-0;\n }\n\n [data-slot=\"typography\"] > table th {\n @apply border-r px-4 py-2 text-left font-bold last:border-r-0;\n }\n\n [data-slot=\"typography\"] > table th[align=\"center\"] {\n @apply text-center;\n }\n\n [data-slot=\"typography\"] > table th[align=\"right\"] {\n @apply text-right;\n }\n\n [data-slot=\"typography\"] > table td {\n @apply border-r px-4 py-2 text-left last:border-r-0;\n }\n\n [data-slot=\"typography\"] > table td[align=\"center\"] {\n @apply text-center;\n }\n\n [data-slot=\"typography\"] > table td[align=\"right\"] {\n @apply text-right;\n }\n\n [data-slot=\"typography\"] > table tbody tr:last-child td {\n @apply border-b-0;\n }\n\n [data-slot=\"typography\"] :not(pre) > code {\n @apply bg-muted relative rounded px-[0.3rem] py-[0.2rem] font-mono text-sm font-semibold;\n }\n\n [data-slot=\"typography\"] > table :not(pre) > code {\n @apply rounded-md text-sm leading-5 font-normal;\n }\n\n [data-slot=\"typography\"] > pre.astro-code {\n @apply border-border !bg-muted/60 rounded-xl border p-4 text-sm leading-[var(--text-sm--line-height)];\n }\n\n [data-slot=\"typography\"] > pre.astro-code code {\n @apply !text-inherit;\n }\n\n .dark [data-slot=\"typography\"] > pre.astro-code {\n @apply !text-[var(--shiki-dark,var(--foreground))];\n }\n\n .dark [data-slot=\"typography\"] > pre.astro-code span[style*=\"--shiki-dark\"] {\n @apply ![font-weight:var(--shiki-dark-font-weight,inherit)] !text-[var(--shiki-dark)] ![font-style:var(--shiki-dark-font-style,inherit)] ![text-decoration:var(--shiki-dark-text-decoration,inherit)];\n }\n</style>\n",
9
+ "content": "---\nimport type { HTMLTag, Polymorphic } from \"astro/types\"\n\nimport \"./typeset.css\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props<Tag extends HTMLTag> = Polymorphic<{ as: Tag; size?: Size }>\n\nconst {\n as: Tag = \"div\",\n class: className,\n size = \"default\",\n ...props\n} = Astro.props\n\nconst sizeClass =\n size === \"sm\"\n ? \"[--typeset-flow:1.125em] [--typeset-leading:1.7] [--typeset-size:0.875rem]\"\n : size === \"lg\"\n ? \"[--typeset-flow:1.5em] [--typeset-leading:1.8] [--typeset-size:1.125rem]\"\n : \"[--typeset-flow:1.25em] [--typeset-leading:1.75] [--typeset-size:1rem]\"\n---\n\n<Tag\n data-slot=\"typography\"\n data-size={size}\n class={cn(\"typeset\", sizeClass, className)}\n {...props}\n>\n <slot />\n</Tag>\n",
10
10
  "type": "registry:ui"
11
11
  },
12
12
  {
13
13
  "path": "src/components/ui/typography/typography-a.astro",
14
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"a\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<a data-slot=\"typography-a\" data-size={size} class={cn(className)} {...props}>\n <slot />\n</a>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-a\"],\n [data-slot=\"typography\"] > a:not([data-slot]) {\n @apply text-primary font-medium underline underline-offset-4;\n }\n\n [data-slot=\"typography-a\"][data-size=\"sm\"] {\n @apply text-sm;\n }\n\n [data-slot=\"typography-a\"][data-size=\"default\"] {\n @apply text-base;\n }\n\n [data-slot=\"typography-a\"][data-size=\"lg\"] {\n @apply text-lg;\n }\n</style>\n",
14
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"a\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-sm\" : size === \"lg\" ? \"text-lg\" : \"text-base\"\n---\n\n<a\n data-slot=\"typography-a\"\n data-size={size}\n class={cn(\n \"text-primary font-medium underline underline-offset-4\",\n sizeClass,\n className\n )}\n {...props}\n>\n <slot />\n</a>\n",
15
15
  "type": "registry:ui"
16
16
  },
17
17
  {
18
18
  "path": "src/components/ui/typography/typography-blockquote.astro",
19
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"blockquote\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<blockquote\n data-slot=\"typography-blockquote\"\n data-size={size}\n class={cn(className)}\n {...props}\n>\n <slot />\n</blockquote>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-blockquote\"],\n [data-slot=\"typography\"] > blockquote {\n @apply mt-6 border-l-2 pl-6 italic;\n }\n\n [data-slot=\"typography-blockquote\"][data-size=\"sm\"] {\n @apply text-sm;\n }\n\n [data-slot=\"typography-blockquote\"][data-size=\"default\"],\n [data-slot=\"typography\"] > blockquote {\n @apply text-base;\n }\n\n [data-slot=\"typography-blockquote\"][data-size=\"lg\"] {\n @apply text-lg;\n }\n</style>\n",
19
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"blockquote\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-sm\" : size === \"lg\" ? \"text-lg\" : \"text-base\"\n---\n\n<blockquote\n data-slot=\"typography-blockquote\"\n data-size={size}\n class={cn(\"mt-6 border-l-2 pl-6 italic\", sizeClass, className)}\n {...props}\n>\n <slot />\n</blockquote>\n",
20
20
  "type": "registry:ui"
21
21
  },
22
22
  {
23
23
  "path": "src/components/ui/typography/typography-h1.astro",
24
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"h1\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<h1 data-slot=\"typography-h1\" data-size={size} class={cn(className)} {...props}>\n <slot />\n</h1>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-h1\"],\n [data-slot=\"typography\"] > h1 {\n @apply scroll-m-20 font-semibold tracking-tight text-balance;\n }\n\n [data-slot=\"typography-h1\"][data-size=\"sm\"],\n [data-slot=\"typography\"][data-size=\"sm\"] > h1 {\n @apply text-3xl;\n }\n\n [data-slot=\"typography-h1\"][data-size=\"default\"],\n [data-slot=\"typography\"] > h1,\n [data-slot=\"typography\"][data-size=\"default\"] > h1 {\n @apply text-4xl;\n }\n\n [data-slot=\"typography-h1\"][data-size=\"lg\"],\n [data-slot=\"typography\"][data-size=\"lg\"] > h1 {\n @apply text-5xl;\n }\n</style>\n",
24
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"h1\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-3xl\" : size === \"lg\" ? \"text-5xl\" : \"text-4xl\"\n---\n\n<h1\n data-slot=\"typography-h1\"\n data-size={size}\n class={cn(\n \"scroll-m-20 font-semibold tracking-tight text-balance\",\n sizeClass,\n className\n )}\n {...props}\n>\n <slot />\n</h1>\n",
25
25
  "type": "registry:ui"
26
26
  },
27
27
  {
28
28
  "path": "src/components/ui/typography/typography-h2.astro",
29
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"h2\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<h2 data-slot=\"typography-h2\" data-size={size} class={cn(className)} {...props}>\n <slot />\n</h2>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-h2\"],\n [data-slot=\"typography\"] > h2 {\n @apply scroll-m-20 font-semibold tracking-tight;\n }\n\n [data-slot=\"typography-h2\"][data-size=\"sm\"],\n [data-slot=\"typography\"][data-size=\"sm\"] > h2 {\n @apply text-2xl;\n }\n\n [data-slot=\"typography-h2\"][data-size=\"default\"],\n [data-slot=\"typography\"] > h2,\n [data-slot=\"typography\"][data-size=\"default\"] > h2 {\n @apply text-3xl;\n }\n\n [data-slot=\"typography-h2\"][data-size=\"lg\"],\n [data-slot=\"typography\"][data-size=\"lg\"] > h2 {\n @apply text-4xl;\n }\n\n [data-slot=\"typography-h2\"]:first-child,\n [data-slot=\"typography\"] > h2:first-child {\n @apply mt-0;\n }\n</style>\n",
29
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"h2\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-2xl\" : size === \"lg\" ? \"text-4xl\" : \"text-3xl\"\n---\n\n<h2\n data-slot=\"typography-h2\"\n data-size={size}\n class={cn(\n \"scroll-m-20 font-semibold tracking-tight first:mt-0\",\n sizeClass,\n className\n )}\n {...props}\n>\n <slot />\n</h2>\n",
30
30
  "type": "registry:ui"
31
31
  },
32
32
  {
33
33
  "path": "src/components/ui/typography/typography-h3.astro",
34
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"h3\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<h3 data-slot=\"typography-h3\" data-size={size} class={cn(className)} {...props}>\n <slot />\n</h3>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-h3\"],\n [data-slot=\"typography\"] > h3 {\n @apply scroll-m-20 font-semibold tracking-tight;\n }\n\n [data-slot=\"typography-h3\"][data-size=\"sm\"],\n [data-slot=\"typography\"][data-size=\"sm\"] > h3 {\n @apply text-xl;\n }\n\n [data-slot=\"typography-h3\"][data-size=\"default\"],\n [data-slot=\"typography\"] > h3,\n [data-slot=\"typography\"][data-size=\"default\"] > h3 {\n @apply text-2xl;\n }\n\n [data-slot=\"typography-h3\"][data-size=\"lg\"],\n [data-slot=\"typography\"][data-size=\"lg\"] > h3 {\n @apply text-3xl;\n }\n</style>\n",
34
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"h3\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-xl\" : size === \"lg\" ? \"text-3xl\" : \"text-2xl\"\n---\n\n<h3\n data-slot=\"typography-h3\"\n data-size={size}\n class={cn(\"scroll-m-20 font-semibold tracking-tight\", sizeClass, className)}\n {...props}\n>\n <slot />\n</h3>\n",
35
35
  "type": "registry:ui"
36
36
  },
37
37
  {
38
38
  "path": "src/components/ui/typography/typography-h4.astro",
39
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"h4\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<h4 data-slot=\"typography-h4\" data-size={size} class={cn(className)} {...props}>\n <slot />\n</h4>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-h4\"],\n [data-slot=\"typography\"] > h4 {\n @apply scroll-m-20 font-semibold tracking-tight;\n }\n\n [data-slot=\"typography-h4\"][data-size=\"sm\"],\n [data-slot=\"typography\"][data-size=\"sm\"] > h4 {\n @apply text-lg;\n }\n\n [data-slot=\"typography-h4\"][data-size=\"default\"],\n [data-slot=\"typography\"] > h4,\n [data-slot=\"typography\"][data-size=\"default\"] > h4 {\n @apply text-xl;\n }\n\n [data-slot=\"typography-h4\"][data-size=\"lg\"],\n [data-slot=\"typography\"][data-size=\"lg\"] > h4 {\n @apply text-2xl;\n }\n</style>\n",
39
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"h4\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-lg\" : size === \"lg\" ? \"text-2xl\" : \"text-xl\"\n---\n\n<h4\n data-slot=\"typography-h4\"\n data-size={size}\n class={cn(\"scroll-m-20 font-semibold tracking-tight\", sizeClass, className)}\n {...props}\n>\n <slot />\n</h4>\n",
40
40
  "type": "registry:ui"
41
41
  },
42
42
  {
43
43
  "path": "src/components/ui/typography/typography-inline-code.astro",
44
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"code\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<code\n data-slot=\"typography-inline-code\"\n data-size={size}\n class={cn(className)}\n {...props}\n>\n <slot />\n</code>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-inline-code\"],\n [data-slot=\"typography\"] :not(pre) > code {\n @apply bg-muted relative rounded px-[0.3rem] py-[0.2rem] font-mono font-semibold;\n }\n\n [data-slot=\"typography-inline-code\"][data-size=\"sm\"] {\n @apply text-xs;\n }\n\n [data-slot=\"typography-inline-code\"][data-size=\"default\"],\n [data-slot=\"typography\"] :not(pre) > code {\n @apply text-sm;\n }\n\n [data-slot=\"typography-inline-code\"][data-size=\"lg\"] {\n @apply text-base;\n }\n\n [data-slot=\"typography\"] > table :not(pre) > code {\n @apply rounded-md text-sm leading-5 font-normal;\n }\n</style>\n",
44
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"code\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-xs\" : size === \"lg\" ? \"text-base\" : \"text-sm\"\n---\n\n<code\n data-slot=\"typography-inline-code\"\n data-size={size}\n class={cn(\n \"bg-muted relative rounded px-[0.3rem] py-[0.2rem] font-mono font-semibold\",\n sizeClass,\n className\n )}\n {...props}\n>\n <slot />\n</code>\n",
45
45
  "type": "registry:ui"
46
46
  },
47
47
  {
48
48
  "path": "src/components/ui/typography/typography-lead.astro",
49
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"p\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<p\n data-slot=\"typography-lead\"\n data-size={size}\n class={cn(className)}\n {...props}\n>\n <slot />\n</p>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-lead\"] {\n @apply text-muted-foreground;\n }\n\n [data-slot=\"typography-lead\"][data-size=\"sm\"],\n [data-slot=\"typography\"][data-size=\"sm\"] > [data-slot=\"typography-lead\"] {\n @apply text-base;\n }\n\n [data-slot=\"typography-lead\"][data-size=\"default\"],\n [data-slot=\"typography\"] > [data-slot=\"typography-lead\"],\n [data-slot=\"typography\"][data-size=\"default\"]\n > [data-slot=\"typography-lead\"] {\n @apply text-lg;\n }\n\n [data-slot=\"typography-lead\"][data-size=\"lg\"],\n [data-slot=\"typography\"][data-size=\"lg\"] > [data-slot=\"typography-lead\"] {\n @apply text-xl;\n }\n</style>\n",
49
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"p\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-base\" : size === \"lg\" ? \"text-xl\" : \"text-lg\"\n---\n\n<p\n data-slot=\"typography-lead\"\n data-size={size}\n class={cn(\"text-muted-foreground\", sizeClass, className)}\n {...props}\n>\n <slot />\n</p>\n",
50
50
  "type": "registry:ui"
51
51
  },
52
52
  {
53
53
  "path": "src/components/ui/typography/typography-list.astro",
54
- "content": "---\nimport type { HTMLTag, Polymorphic } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props<Tag extends \"ul\" | \"ol\"> = Polymorphic<{ as: Tag; size?: Size }>\n\nconst {\n as: Tag = \"ul\",\n class: className,\n size = \"default\",\n ...props\n} = Astro.props\n---\n\n<Tag\n data-slot=\"typography-list\"\n data-size={size}\n data-ordered={Tag === \"ol\" ? \"\" : undefined}\n class={cn(className)}\n {...props}\n>\n <slot />\n</Tag>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-list\"],\n [data-slot=\"typography\"] > ul,\n [data-slot=\"typography\"] > ol {\n @apply my-6 ml-6;\n }\n\n [data-slot=\"typography-list\"][data-size=\"sm\"] {\n @apply text-sm;\n }\n\n [data-slot=\"typography-list\"][data-size=\"default\"],\n [data-slot=\"typography\"] > ul,\n [data-slot=\"typography\"] > ol {\n @apply text-base;\n }\n\n [data-slot=\"typography-list\"][data-size=\"lg\"] {\n @apply text-lg;\n }\n\n [data-slot=\"typography-list\"]:not([data-ordered]),\n [data-slot=\"typography\"] > ul {\n @apply list-disc;\n }\n\n [data-slot=\"typography-list\"][data-ordered],\n [data-slot=\"typography\"] > ol {\n @apply list-decimal;\n }\n\n [data-slot=\"typography-list\"] > li {\n @apply mt-2;\n }\n</style>\n",
54
+ "content": "---\nimport type { Polymorphic } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props<Tag extends \"ul\" | \"ol\"> = Polymorphic<{ as: Tag; size?: Size }>\n\nconst {\n as: Tag = \"ul\",\n class: className,\n size = \"default\",\n ...props\n} = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-sm\" : size === \"lg\" ? \"text-lg\" : \"text-base\"\n---\n\n<Tag\n data-slot=\"typography-list\"\n data-size={size}\n data-ordered={Tag === \"ol\" ? \"\" : undefined}\n class={cn(\n \"my-6 ml-6\",\n Tag === \"ol\" ? \"list-decimal\" : \"list-disc\",\n sizeClass,\n className\n )}\n {...props}\n>\n <slot />\n</Tag>\n",
55
55
  "type": "registry:ui"
56
56
  },
57
57
  {
58
58
  "path": "src/components/ui/typography/typography-list-item.astro",
59
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"li\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<li\n data-slot=\"typography-list-item\"\n data-size={size}\n class={cn(className)}\n {...props}\n>\n <slot />\n</li>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-list-item\"],\n [data-slot=\"typography-list\"] > li,\n [data-slot=\"typography\"] > ul > li,\n [data-slot=\"typography\"] > ol > li {\n @apply mt-2;\n }\n\n [data-slot=\"typography-list-item\"][data-size=\"sm\"] {\n @apply text-sm;\n }\n\n [data-slot=\"typography-list-item\"][data-size=\"default\"] {\n @apply text-base;\n }\n\n [data-slot=\"typography-list-item\"][data-size=\"lg\"] {\n @apply text-lg;\n }\n</style>\n",
59
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"li\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-sm\" : size === \"lg\" ? \"text-lg\" : \"text-base\"\n---\n\n<li\n data-slot=\"typography-list-item\"\n data-size={size}\n class={cn(\"mt-2\", sizeClass, className)}\n {...props}\n>\n <slot />\n</li>\n",
60
60
  "type": "registry:ui"
61
61
  },
62
62
  {
63
63
  "path": "src/components/ui/typography/typography-p.astro",
64
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"p\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<p data-slot=\"typography-p\" data-size={size} class={cn(className)} {...props}>\n <slot />\n</p>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-p\"],\n [data-slot=\"typography\"] > p {\n @apply leading-7;\n }\n\n [data-slot=\"typography-p\"][data-size=\"sm\"] {\n @apply text-sm;\n }\n\n [data-slot=\"typography-p\"][data-size=\"default\"],\n [data-slot=\"typography\"] > p {\n @apply text-base;\n }\n\n [data-slot=\"typography-p\"][data-size=\"lg\"] {\n @apply text-lg;\n }\n\n [data-slot=\"typography-p\"]:not(:first-child),\n [data-slot=\"typography\"] > p:not(:first-child) {\n @apply mt-6;\n }\n</style>\n",
64
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"p\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-sm\" : size === \"lg\" ? \"text-lg\" : \"text-base\"\n---\n\n<p\n data-slot=\"typography-p\"\n data-size={size}\n class={cn(\"leading-7 [&:not(:first-child)]:mt-6\", sizeClass, className)}\n {...props}\n>\n <slot />\n</p>\n",
65
65
  "type": "registry:ui"
66
66
  },
67
67
  {
68
68
  "path": "src/components/ui/typography/typography-table.astro",
69
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"table\"> & {\n containerClass?: string\n size?: Size\n}\n\nconst {\n class: className,\n containerClass,\n size = \"default\",\n ...props\n} = Astro.props\n---\n\n<div\n data-slot=\"typography-table-container\"\n data-size={size}\n class={cn(containerClass)}\n>\n <table\n data-slot=\"typography-table\"\n data-size={size}\n class={cn(className)}\n {...props}\n >\n <slot />\n </table>\n</div>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-table-container\"] {\n @apply border-border my-6 w-full overflow-y-auto rounded-xl border;\n }\n\n [data-slot=\"typography-table\"],\n [data-slot=\"typography\"] > table {\n @apply w-full border-collapse;\n }\n\n [data-slot=\"typography-table\"][data-size=\"sm\"] {\n @apply text-sm;\n }\n\n [data-slot=\"typography-table\"][data-size=\"default\"],\n [data-slot=\"typography\"] > table {\n @apply text-base;\n }\n\n [data-slot=\"typography-table\"][data-size=\"lg\"] {\n @apply text-lg;\n }\n</style>\n",
69
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"table\"> & {\n containerClass?: string\n size?: Size\n}\n\nconst {\n class: className,\n containerClass,\n size = \"default\",\n ...props\n} = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-sm\" : size === \"lg\" ? \"text-lg\" : \"text-base\"\n---\n\n<div\n data-slot=\"typography-table-container\"\n data-size={size}\n class={cn(\n \"border-border my-6 w-full overflow-x-auto rounded-xl border\",\n containerClass\n )}\n>\n <table\n data-slot=\"typography-table\"\n data-size={size}\n class={cn(\"w-full border-collapse\", sizeClass, className)}\n {...props}\n >\n <slot />\n </table>\n</div>\n",
70
70
  "type": "registry:ui"
71
71
  },
72
72
  {
73
73
  "path": "src/components/ui/typography/typography-table-row.astro",
74
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"tr\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<tr\n data-slot=\"typography-table-row\"\n data-size={size}\n class={cn(className)}\n {...props}\n>\n <slot />\n</tr>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-table-row\"],\n [data-slot=\"typography-table\"] tr,\n [data-slot=\"typography\"] > table tr {\n @apply even:bg-muted m-0 border-t p-0;\n }\n\n [data-slot=\"typography-table-row\"][data-size=\"sm\"] {\n @apply text-sm;\n }\n\n [data-slot=\"typography-table-row\"][data-size=\"default\"] {\n @apply text-base;\n }\n\n [data-slot=\"typography-table-row\"][data-size=\"lg\"] {\n @apply text-lg;\n }\n</style>\n",
74
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"tr\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-sm\" : size === \"lg\" ? \"text-lg\" : \"text-base\"\n---\n\n<tr\n data-slot=\"typography-table-row\"\n data-size={size}\n class={cn(\"even:bg-muted m-0 border-t p-0\", sizeClass, className)}\n {...props}\n>\n <slot />\n</tr>\n",
75
75
  "type": "registry:ui"
76
76
  },
77
77
  {
78
78
  "path": "src/components/ui/typography/typography-table-head.astro",
79
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"th\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<th\n data-slot=\"typography-table-head\"\n data-size={size}\n class={cn(className)}\n {...props}\n>\n <slot />\n</th>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-table-head\"],\n [data-slot=\"typography-table\"] th,\n [data-slot=\"typography\"] > table th {\n @apply border-border border-b px-4 py-3 text-left font-semibold;\n }\n\n [data-slot=\"typography-table-head\"][data-size=\"sm\"] {\n @apply text-sm;\n }\n\n [data-slot=\"typography-table-head\"][data-size=\"default\"] {\n @apply text-base;\n }\n\n [data-slot=\"typography-table-head\"][data-size=\"lg\"] {\n @apply text-lg;\n }\n\n [data-slot=\"typography-table-head\"][align=\"center\"],\n [data-slot=\"typography-table\"] th[align=\"center\"],\n [data-slot=\"typography\"] > table th[align=\"center\"] {\n @apply text-center;\n }\n\n [data-slot=\"typography-table-head\"][align=\"right\"],\n [data-slot=\"typography-table\"] th[align=\"right\"],\n [data-slot=\"typography\"] > table th[align=\"right\"] {\n @apply text-right;\n }\n</style>\n",
79
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"th\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-sm\" : size === \"lg\" ? \"text-lg\" : \"text-base\"\n---\n\n<th\n data-slot=\"typography-table-head\"\n data-size={size}\n class={cn(\n \"border-border border-b px-4 py-3 text-left font-semibold\",\n \"[&[align=center]]:text-center [&[align=right]]:text-right\",\n sizeClass,\n className\n )}\n {...props}\n>\n <slot />\n</th>\n",
80
80
  "type": "registry:ui"
81
81
  },
82
82
  {
83
83
  "path": "src/components/ui/typography/typography-table-cell.astro",
84
- "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"td\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<td\n data-slot=\"typography-table-cell\"\n data-size={size}\n class={cn(className)}\n {...props}\n>\n <slot />\n</td>\n\n<style is:global>\n @reference \"@/styles/global.css\";\n\n [data-slot=\"typography-table-cell\"],\n [data-slot=\"typography-table\"] td,\n [data-slot=\"typography\"] > table td {\n @apply border-border border-t px-4 py-3 text-left align-middle;\n }\n\n [data-slot=\"typography-table-cell\"][data-size=\"sm\"] {\n @apply text-sm;\n }\n\n [data-slot=\"typography-table-cell\"][data-size=\"default\"] {\n @apply text-base;\n }\n\n [data-slot=\"typography-table-cell\"][data-size=\"lg\"] {\n @apply text-lg;\n }\n\n [data-slot=\"typography-table\"] tbody tr:last-child td,\n [data-slot=\"typography\"] > table tbody tr:last-child td {\n @apply border-b-0;\n }\n\n [data-slot=\"typography-table-cell\"][align=\"center\"],\n [data-slot=\"typography-table\"] td[align=\"center\"],\n [data-slot=\"typography\"] > table td[align=\"center\"] {\n @apply text-center;\n }\n\n [data-slot=\"typography-table-cell\"][align=\"right\"],\n [data-slot=\"typography-table\"] td[align=\"right\"],\n [data-slot=\"typography\"] > table td[align=\"right\"] {\n @apply text-right;\n }\n</style>\n",
84
+ "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Size = \"sm\" | \"default\" | \"lg\"\ntype Props = HTMLAttributes<\"td\"> & {\n size?: Size\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n\nconst sizeClass =\n size === \"sm\" ? \"text-sm\" : size === \"lg\" ? \"text-lg\" : \"text-base\"\n---\n\n<td\n data-slot=\"typography-table-cell\"\n data-size={size}\n class={cn(\n \"border-border border-t px-4 py-3 text-left align-middle\",\n \"[&[align=center]]:text-center [&[align=right]]:text-right\",\n sizeClass,\n className\n )}\n {...props}\n>\n <slot />\n</td>\n",
85
85
  "type": "registry:ui"
86
86
  },
87
87
  {
88
88
  "path": "src/components/ui/typography/index.ts",
89
89
  "content": "export { default as Typography } from \"./typography.astro\"\nexport { default as TypographyA } from \"./typography-a.astro\"\nexport { default as TypographyBlockquote } from \"./typography-blockquote.astro\"\nexport { default as TypographyH1 } from \"./typography-h1.astro\"\nexport { default as TypographyH2 } from \"./typography-h2.astro\"\nexport { default as TypographyH3 } from \"./typography-h3.astro\"\nexport { default as TypographyH4 } from \"./typography-h4.astro\"\nexport { default as TypographyInlineCode } from \"./typography-inline-code.astro\"\nexport { default as TypographyLead } from \"./typography-lead.astro\"\nexport { default as TypographyList } from \"./typography-list.astro\"\nexport { default as TypographyListItem } from \"./typography-list-item.astro\"\nexport { default as TypographyP } from \"./typography-p.astro\"\nexport { default as TypographyTable } from \"./typography-table.astro\"\nexport { default as TypographyTableCell } from \"./typography-table-cell.astro\"\nexport { default as TypographyTableHead } from \"./typography-table-head.astro\"\nexport { default as TypographyTableRow } from \"./typography-table-row.astro\"\n",
90
90
  "type": "registry:ui"
91
+ },
92
+ {
93
+ "path": "src/components/ui/typography/typeset.css",
94
+ "content": "/*\n * shadcn/typeset\n * https://ui.shadcn.com/docs/typeset.\n */\n\n@layer components {\n .typeset {\n --typeset-font-body: inherit;\n --typeset-font-heading: var(--font-heading);\n --typeset-font-mono: var(--font-mono);\n --typeset-size: 1em;\n --typeset-leading: 1.75;\n --typeset-flow: 1.25em;\n }\n}\n\n@layer components {\n .typeset {\n font-family: var(--typeset-font-body);\n font-size: calc(var(--typeset-size) * 1.125);\n line-height: var(--typeset-leading);\n color: var(--color-foreground, currentColor);\n overflow-wrap: break-word;\n margin-trim: block-start;\n\n @media (min-width: 48rem), print {\n font-size: var(--typeset-size);\n }\n\n --typeset-muted: var(\n --color-muted-foreground,\n color-mix(in oklab, currentColor 60%, transparent)\n );\n --typeset-rule: var(\n --color-border,\n color-mix(in oklab, currentColor 20%, transparent)\n );\n }\n\n .typeset\n *:not(\n :where(\n .not-typeset,\n [data-not-typeset],\n .not-typeset *,\n [data-not-typeset] *\n )\n ) {\n &:where(p) {\n margin-block-start: var(--typeset-flow);\n margin-block-end: 0;\n }\n &:where(h1, h2, h3, h4, h5, h6) {\n color: var(--color-foreground, currentColor);\n font-family: var(--typeset-font-heading);\n font-weight: 600;\n margin-block-end: 0;\n }\n &:where(h1) {\n font-size: 1.75em;\n line-height: 1.3;\n margin-block-start: var(--typeset-flow);\n }\n &:where(h2) {\n font-size: 1.25em;\n line-height: 1.4;\n margin-block-start: calc(var(--typeset-flow) * 1.4);\n }\n &:where(h3) {\n font-size: 1.125em;\n line-height: 1.45;\n margin-block-start: var(--typeset-flow);\n }\n &:where(h4) {\n font-size: 1em;\n line-height: 1.5;\n margin-block-start: var(--typeset-flow);\n }\n &:where(h5) {\n font-size: 0.875em;\n line-height: 1.5;\n font-weight: 500;\n color: var(--typeset-muted);\n margin-block-start: calc(var(--typeset-flow) / 0.875);\n }\n &:where(h6) {\n font-size: 0.8125em;\n line-height: 1.5;\n font-weight: 500;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--typeset-muted);\n margin-block-start: calc(var(--typeset-flow) / 0.8125);\n }\n &:where([id]) {\n scroll-margin-block-start: var(--typeset-flow);\n }\n &:where(h1 + *, h2 + *, h3 + *, h4 + *, h5 + *, h6 + *) {\n margin-block-start: 1em;\n }\n &:where(:is(h1, h2, h3, h4) :is(code)) {\n font-size: 0.9em;\n }\n &:where(a) {\n color: inherit;\n font-weight: 500;\n text-decoration-line: underline;\n text-decoration-color: color-mix(in oklab, currentColor 30%, transparent);\n }\n &:where(a:hover) {\n text-decoration-color: currentColor;\n }\n &:where(a:focus-visible) {\n outline: 2px solid var(--color-ring, currentColor);\n outline-offset: 2px;\n border-radius: 0.125em;\n }\n &:where(:is(h1, h2, h3, h4, h5, h6) :is(a)) {\n font-weight: inherit;\n }\n &:where(strong, b) {\n font-weight: 600;\n }\n &:where(:is(h1, h2, h3, h4) :is(strong, b)) {\n font-weight: 600;\n }\n &:where(mark) {\n background-color: color-mix(\n in oklab,\n oklch(0.86 0.17 95) 40%,\n transparent\n );\n color: inherit;\n padding: 0.05em 0.15em;\n border-radius: 0.2em;\n }\n &:where(abbr[title]) {\n text-decoration-line: underline;\n text-decoration-style: dotted;\n text-underline-offset: 0.2em;\n cursor: help;\n }\n &:where(del, s) {\n color: var(--typeset-muted);\n text-decoration-line: line-through;\n }\n &:where(sup, sub) {\n font-size: 0.75em;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n &:where(sup) {\n top: -0.5em;\n }\n &:where(sub) {\n bottom: -0.25em;\n }\n &:where(sup a) {\n text-decoration-line: none;\n font-weight: 500;\n }\n &:where(ul) {\n list-style-type: disc;\n }\n &:where(ol) {\n list-style-type: decimal;\n }\n &:where(ul ul) {\n list-style-type: circle;\n }\n &:where(ul ul ul) {\n list-style-type: square;\n }\n &:where(ol[type=\"a\" i]) {\n list-style-type: lower-alpha;\n }\n &:where(ol[type=\"i\" i]) {\n list-style-type: lower-roman;\n }\n &:where(ol[type=\"A\" s]) {\n list-style-type: upper-alpha;\n }\n &:where(ol[type=\"I\" s]) {\n list-style-type: upper-roman;\n }\n &:where(ul, ol) {\n margin-block-start: var(--typeset-flow);\n margin-block-end: 0;\n padding-inline-start: 1.5em;\n }\n &:where(li) {\n margin-block-start: 0.5em;\n padding-inline-start: 0.4em;\n }\n &:where(li > p, li > ul, li > ol) {\n margin-block-start: 0.5em;\n }\n &:where(ul > li)::marker,\n &:where(ol > li)::marker {\n color: var(--typeset-muted);\n }\n &:where(ul.contains-task-list) {\n list-style-type: none;\n padding-inline-start: 0.25em;\n }\n &:where(li.task-list-item > input[type=\"checkbox\"]) {\n margin-inline-end: 0.5em;\n vertical-align: -0.1em;\n accent-color: var(--color-primary, currentColor);\n }\n &:where(details) {\n margin-block-start: var(--typeset-flow);\n margin-block-end: 0;\n }\n &:where(summary) {\n cursor: pointer;\n font-weight: 500;\n }\n &:where(summary)::marker {\n color: var(--typeset-muted);\n }\n &:where(kbd) {\n font-family: inherit;\n font-size: 0.85em;\n font-weight: 500;\n border: 1px solid var(--typeset-rule);\n border-block-end-width: 2px;\n border-radius: min(calc(var(--radius, 0.5em) * 0.6), 0.35em);\n padding: 0.0625em 0.35em;\n }\n &:where(dl) {\n margin-block-start: var(--typeset-flow);\n margin-block-end: 0;\n }\n &:where(dt) {\n font-weight: 500;\n margin-block-start: 1em;\n }\n &:where(dt + dt) {\n margin-block-start: 0.25em;\n }\n &:where(dd) {\n margin-block-start: 0.25em;\n margin-inline-start: 0;\n padding-inline-start: 1em;\n color: var(--typeset-muted);\n }\n &:where(:not(pre) > code) {\n background-color: var(\n --color-muted,\n color-mix(in oklab, currentColor 8%, transparent)\n );\n font-family: var(--typeset-font-mono);\n font-size: 0.85em;\n border-radius: min(calc(var(--radius, 0.5em) * 0.6), 0.35em);\n padding: 0.125em 0.3em;\n }\n &:where(pre) {\n background-color: var(\n --color-muted,\n color-mix(in oklab, currentColor 8%, transparent)\n );\n font-family: var(--typeset-font-mono);\n font-size: 0.875em;\n line-height: 1.5;\n tab-size: 2;\n direction: ltr;\n border-radius: var(--radius, 0.5em);\n padding: 0.75em 1em;\n overflow-x: auto;\n margin-block-start: calc(var(--typeset-flow) / 0.875);\n margin-block-end: 0;\n }\n &:where(pre code) {\n background-color: transparent;\n font-family: inherit;\n font-size: inherit;\n padding: 0;\n border-radius: 0;\n }\n &:where(blockquote) {\n border-inline-start: 2px solid var(--typeset-rule);\n padding-inline-start: 1em;\n margin-block-start: var(--typeset-flow);\n margin-block-end: 0;\n margin-inline: 0;\n }\n &:where(hr) {\n border: 0;\n border-block-start: 1px solid var(--typeset-rule);\n margin-block-start: calc(var(--typeset-flow) * 2.4);\n margin-block-end: 0;\n }\n &:where(hr + h1, hr + h2, hr + h3, hr + h4) {\n margin-block-start: var(--typeset-flow);\n }\n &:where(.footnotes, [data-footnotes]) {\n margin-block-start: calc(var(--typeset-flow) * 2);\n border-block-start: 1px solid var(--typeset-rule);\n padding-block-start: var(--typeset-flow);\n font-size: 0.875em;\n color: var(--typeset-muted);\n }\n &:where(math[display=\"block\"]) {\n margin-block-start: var(--typeset-flow);\n margin-block-end: 0;\n overflow-x: auto;\n overflow-y: hidden;\n padding-block: 0.25em;\n }\n &:where(img, video) {\n border-radius: var(--radius, 0.5em);\n max-width: 100%;\n height: auto;\n margin-block-start: var(--typeset-flow);\n margin-block-end: 0;\n }\n &:where(p img) {\n margin-block-start: 0;\n }\n &:where(figure) {\n margin-block-start: var(--typeset-flow);\n margin-block-end: 0;\n margin-inline: 0;\n }\n &:where(figcaption, caption) {\n color: var(--typeset-muted);\n font-size: 0.875em;\n text-align: center;\n margin-block-start: calc(0.75em / 0.875);\n }\n &:where(caption) {\n caption-side: bottom;\n }\n &:where(table) {\n max-width: 100%;\n font-size: 1em;\n line-height: 1.5;\n font-variant-numeric: tabular-nums;\n border-collapse: separate;\n border-spacing: 0;\n border-block-end: 1px solid var(--typeset-rule);\n margin-block-start: var(--typeset-flow);\n margin-block-end: 0;\n }\n &:where(.typeset-scroll) {\n overflow-x: auto;\n margin-block-start: var(--typeset-flow);\n }\n &:where(.typeset-scroll > *) {\n margin-block-start: 0;\n }\n &:where(.typeset-scroll table) {\n width: max-content;\n max-width: none;\n }\n &:where(thead th) {\n font-weight: 500;\n text-align: start;\n white-space: nowrap;\n padding: 0.65em 1em;\n }\n &:where(:is(tbody, tfoot) :is(td, th)) {\n padding: 0.75em 1em;\n text-align: start;\n vertical-align: top;\n border-block-start: 1px solid var(--typeset-rule);\n }\n &:where(tbody th, tfoot th) {\n font-weight: 500;\n }\n &:where(th:first-child, td:first-child) {\n padding-inline-start: 0;\n }\n &:where(th[align=\"center\"], td[align=\"center\"]) {\n text-align: center;\n }\n &:where(th[align=\"right\"], td[align=\"right\"]) {\n text-align: end;\n }\n &:where(li > blockquote, li > table, li > figure) {\n margin-block-start: 0.5em;\n }\n &:where(li > pre) {\n margin-block-start: calc(0.5em / 0.875);\n }\n @media print {\n &:where(pre, table, blockquote, figure) {\n break-inside: avoid;\n }\n &:where(h1, h2, h3, h4) {\n break-after: avoid;\n }\n }\n @media (forced-colors: active) {\n &:where(:not(pre) > code) {\n border: 1px solid;\n }\n }\n }\n\n .typeset\n > :where(:first-child):not(\n :where(\n .not-typeset,\n [data-not-typeset],\n .not-typeset *,\n [data-not-typeset] *\n )\n ),\n .typeset\n > :where(:first-child)\n > :where(:first-child):not(\n :where(\n .not-typeset,\n [data-not-typeset],\n .not-typeset *,\n [data-not-typeset] *\n )\n ),\n .typeset\n :where(\n li > :first-child,\n blockquote > :first-child,\n td > :first-child,\n th > :first-child,\n dd > :first-child,\n figure > :first-child,\n figure > picture > img\n ):not(\n :where(\n .not-typeset,\n [data-not-typeset],\n .not-typeset *,\n [data-not-typeset] *\n )\n ) {\n margin-block-start: 0;\n }\n}\n",
95
+ "type": "registry:ui"
91
96
  }
92
97
  ],
93
98
  "docs": "https://ui.full.dev/components/typography/",
@@ -115,6 +115,8 @@
115
115
  }
116
116
 
117
117
  @theme inline {
118
+ --font-heading: var(--font-sans);
119
+
118
120
  --color-background: var(--background);
119
121
  --color-foreground: var(--foreground);
120
122
  --color-card: var(--card);