docs-please 0.2.0-beta.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 (120) hide show
  1. package/README.md +63 -0
  2. package/app/app.config.ts +13 -0
  3. package/app/app.vue +17 -0
  4. package/app/assets/css/main.css +367 -0
  5. package/app/components/Icons.ts +163 -0
  6. package/app/components/app/AppFooter.vue +24 -0
  7. package/app/components/app/AppHeader.vue +58 -0
  8. package/app/components/content/BrowserFrame.vue +21 -0
  9. package/app/components/content/Callout.vue +80 -0
  10. package/app/components/content/Caution.vue +25 -0
  11. package/app/components/content/CodeBlockCommand.vue +92 -0
  12. package/app/components/content/CodeCollapsibleWrapper.vue +50 -0
  13. package/app/components/content/CodeTabs.vue +14 -0
  14. package/app/components/content/ComponentPreview.vue +71 -0
  15. package/app/components/content/ComponentsList.vue +24 -0
  16. package/app/components/content/CopyButton.vue +39 -0
  17. package/app/components/content/FeatureCard.vue +25 -0
  18. package/app/components/content/LinkedCard.vue +19 -0
  19. package/app/components/content/Note.vue +25 -0
  20. package/app/components/content/ProseA.vue +18 -0
  21. package/app/components/content/ProseBlockQuote.vue +8 -0
  22. package/app/components/content/ProseCode.vue +8 -0
  23. package/app/components/content/ProseH1.vue +7 -0
  24. package/app/components/content/ProseH2.vue +8 -0
  25. package/app/components/content/ProseH3.vue +9 -0
  26. package/app/components/content/ProseH4.vue +9 -0
  27. package/app/components/content/ProseH5.vue +7 -0
  28. package/app/components/content/ProseH6.vue +7 -0
  29. package/app/components/content/ProseHr.vue +6 -0
  30. package/app/components/content/ProseIcon.vue +32 -0
  31. package/app/components/content/ProseImg.vue +6 -0
  32. package/app/components/content/ProseLi.vue +8 -0
  33. package/app/components/content/ProseOl.vue +8 -0
  34. package/app/components/content/ProseP.vue +14 -0
  35. package/app/components/content/ProsePre.vue +80 -0
  36. package/app/components/content/ProseStrong.vue +8 -0
  37. package/app/components/content/ProseTable.vue +26 -0
  38. package/app/components/content/ProseTd.vue +8 -0
  39. package/app/components/content/ProseTh.vue +8 -0
  40. package/app/components/content/ProseTr.vue +8 -0
  41. package/app/components/content/ProseUl.vue +8 -0
  42. package/app/components/content/Step.vue +18 -0
  43. package/app/components/content/Steps.vue +18 -0
  44. package/app/components/content/Tabs.vue +129 -0
  45. package/app/components/content/TabsItem.vue +26 -0
  46. package/app/components/content/Tip.vue +25 -0
  47. package/app/components/content/UButton.vue +34 -0
  48. package/app/components/content/UColorModeImage.vue +48 -0
  49. package/app/components/content/UPageCard.vue +83 -0
  50. package/app/components/content/UPageGrid.vue +18 -0
  51. package/app/components/content/UPageHero.vue +92 -0
  52. package/app/components/content/UPageSection.vue +90 -0
  53. package/app/components/content/Warning.vue +25 -0
  54. package/app/components/docs/DocsPageHeader.vue +20 -0
  55. package/app/components/docs/DocsPageNav.vue +31 -0
  56. package/app/components/docs/DocsSidebar.vue +97 -0
  57. package/app/components/docs/DocsTableOfContents.vue +64 -0
  58. package/app/components/ui/accordion/Accordion.vue +22 -0
  59. package/app/components/ui/accordion/AccordionContent.vue +23 -0
  60. package/app/components/ui/accordion/AccordionItem.vue +24 -0
  61. package/app/components/ui/accordion/AccordionTrigger.vue +37 -0
  62. package/app/components/ui/accordion/index.ts +4 -0
  63. package/app/components/ui/alert/Alert.vue +21 -0
  64. package/app/components/ui/alert/AlertDescription.vue +17 -0
  65. package/app/components/ui/alert/AlertTitle.vue +17 -0
  66. package/app/components/ui/alert/index.ts +28 -0
  67. package/app/components/ui/button/Button.vue +29 -0
  68. package/app/components/ui/button/index.ts +38 -0
  69. package/app/components/ui/card/Card.vue +22 -0
  70. package/app/components/ui/card/CardAction.vue +17 -0
  71. package/app/components/ui/card/CardContent.vue +17 -0
  72. package/app/components/ui/card/CardDescription.vue +17 -0
  73. package/app/components/ui/card/CardFooter.vue +17 -0
  74. package/app/components/ui/card/CardHeader.vue +17 -0
  75. package/app/components/ui/card/CardTitle.vue +17 -0
  76. package/app/components/ui/card/index.ts +7 -0
  77. package/app/components/ui/collapsible/Collapsible.vue +19 -0
  78. package/app/components/ui/collapsible/CollapsibleContent.vue +15 -0
  79. package/app/components/ui/collapsible/CollapsibleTrigger.vue +15 -0
  80. package/app/components/ui/collapsible/index.ts +3 -0
  81. package/app/components/ui/separator/Separator.vue +29 -0
  82. package/app/components/ui/separator/index.ts +1 -0
  83. package/app/components/ui/switch/Switch.vue +35 -0
  84. package/app/components/ui/switch/index.ts +1 -0
  85. package/app/components/ui/table/Table.vue +16 -0
  86. package/app/components/ui/table/TableBody.vue +14 -0
  87. package/app/components/ui/table/TableCaption.vue +14 -0
  88. package/app/components/ui/table/TableCell.vue +21 -0
  89. package/app/components/ui/table/TableEmpty.vue +34 -0
  90. package/app/components/ui/table/TableFooter.vue +14 -0
  91. package/app/components/ui/table/TableHead.vue +14 -0
  92. package/app/components/ui/table/TableHeader.vue +14 -0
  93. package/app/components/ui/table/TableRow.vue +14 -0
  94. package/app/components/ui/table/index.ts +9 -0
  95. package/app/components/ui/tabs/Tabs.vue +15 -0
  96. package/app/components/ui/tabs/TabsContent.vue +20 -0
  97. package/app/components/ui/tabs/TabsList.vue +23 -0
  98. package/app/components/ui/tabs/TabsTrigger.vue +27 -0
  99. package/app/components/ui/tabs/index.ts +4 -0
  100. package/app/components/ui/tooltip/Tooltip.vue +19 -0
  101. package/app/components/ui/tooltip/TooltipContent.vue +34 -0
  102. package/app/components/ui/tooltip/TooltipProvider.vue +14 -0
  103. package/app/components/ui/tooltip/TooltipTrigger.vue +15 -0
  104. package/app/components/ui/tooltip/index.ts +4 -0
  105. package/app/composables/useConfig.ts +24 -0
  106. package/app/composables/useNavigation.ts +43 -0
  107. package/app/layouts/default.vue +12 -0
  108. package/app/layouts/docs.vue +27 -0
  109. package/app/lib/utils.ts +7 -0
  110. package/app/pages/[...slug].vue +97 -0
  111. package/app/pages/index.vue +29 -0
  112. package/app/plugins/ssr-width.ts +5 -0
  113. package/content.config.ts +36 -0
  114. package/i18n/locales/en.json +14 -0
  115. package/modules/config.ts +38 -0
  116. package/modules/css.ts +38 -0
  117. package/modules/shadcn.ts +116 -0
  118. package/nuxt.config.ts +125 -0
  119. package/nuxt.schema.ts +68 -0
  120. package/package.json +81 -0
@@ -0,0 +1,38 @@
1
+ import type { VariantProps } from 'class-variance-authority'
2
+ import { cva } from 'class-variance-authority'
3
+
4
+ export { default as Button } from './Button.vue'
5
+
6
+ export const buttonVariants = cva(
7
+ 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*=\'size-\'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default:
12
+ 'bg-primary text-primary-foreground hover:bg-primary/90',
13
+ destructive:
14
+ 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',
15
+ outline:
16
+ 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',
17
+ secondary:
18
+ 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
19
+ ghost:
20
+ 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',
21
+ link: 'text-primary underline-offset-4 hover:underline',
22
+ },
23
+ size: {
24
+ 'default': 'h-9 px-4 py-2 has-[>svg]:px-3',
25
+ 'sm': 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',
26
+ 'lg': 'h-10 rounded-md px-6 has-[>svg]:px-4',
27
+ 'icon': 'size-9',
28
+ 'icon-sm': 'size-8',
29
+ 'icon-lg': 'size-10',
30
+ },
31
+ },
32
+ defaultVariants: {
33
+ variant: 'default',
34
+ size: 'default',
35
+ },
36
+ },
37
+ )
38
+ export type ButtonVariants = VariantProps<typeof buttonVariants>
@@ -0,0 +1,22 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <div
12
+ data-slot="card"
13
+ :class="
14
+ cn(
15
+ 'bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm',
16
+ props.class,
17
+ )
18
+ "
19
+ >
20
+ <slot />
21
+ </div>
22
+ </template>
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <div
12
+ data-slot="card-action"
13
+ :class="cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', props.class)"
14
+ >
15
+ <slot />
16
+ </div>
17
+ </template>
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <div
12
+ data-slot="card-content"
13
+ :class="cn('px-6', props.class)"
14
+ >
15
+ <slot />
16
+ </div>
17
+ </template>
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <p
12
+ data-slot="card-description"
13
+ :class="cn('text-muted-foreground text-sm', props.class)"
14
+ >
15
+ <slot />
16
+ </p>
17
+ </template>
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <div
12
+ data-slot="card-footer"
13
+ :class="cn('flex items-center px-6 [.border-t]:pt-6', props.class)"
14
+ >
15
+ <slot />
16
+ </div>
17
+ </template>
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <div
12
+ data-slot="card-header"
13
+ :class="cn('@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6', props.class)"
14
+ >
15
+ <slot />
16
+ </div>
17
+ </template>
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <h3
12
+ data-slot="card-title"
13
+ :class="cn('leading-none font-semibold', props.class)"
14
+ >
15
+ <slot />
16
+ </h3>
17
+ </template>
@@ -0,0 +1,7 @@
1
+ export { default as Card } from './Card.vue'
2
+ export { default as CardAction } from './CardAction.vue'
3
+ export { default as CardContent } from './CardContent.vue'
4
+ export { default as CardDescription } from './CardDescription.vue'
5
+ export { default as CardFooter } from './CardFooter.vue'
6
+ export { default as CardHeader } from './CardHeader.vue'
7
+ export { default as CardTitle } from './CardTitle.vue'
@@ -0,0 +1,19 @@
1
+ <script setup lang="ts">
2
+ import type { CollapsibleRootEmits, CollapsibleRootProps } from 'reka-ui'
3
+ import { CollapsibleRoot, useForwardPropsEmits } from 'reka-ui'
4
+
5
+ const props = defineProps<CollapsibleRootProps>()
6
+ const emits = defineEmits<CollapsibleRootEmits>()
7
+
8
+ const forwarded = useForwardPropsEmits(props, emits)
9
+ </script>
10
+
11
+ <template>
12
+ <CollapsibleRoot
13
+ v-slot="slotProps"
14
+ data-slot="collapsible"
15
+ v-bind="forwarded"
16
+ >
17
+ <slot v-bind="slotProps" />
18
+ </CollapsibleRoot>
19
+ </template>
@@ -0,0 +1,15 @@
1
+ <script setup lang="ts">
2
+ import type { CollapsibleContentProps } from 'reka-ui'
3
+ import { CollapsibleContent } from 'reka-ui'
4
+
5
+ const props = defineProps<CollapsibleContentProps>()
6
+ </script>
7
+
8
+ <template>
9
+ <CollapsibleContent
10
+ data-slot="collapsible-content"
11
+ v-bind="props"
12
+ >
13
+ <slot />
14
+ </CollapsibleContent>
15
+ </template>
@@ -0,0 +1,15 @@
1
+ <script setup lang="ts">
2
+ import type { CollapsibleTriggerProps } from 'reka-ui'
3
+ import { CollapsibleTrigger } from 'reka-ui'
4
+
5
+ const props = defineProps<CollapsibleTriggerProps>()
6
+ </script>
7
+
8
+ <template>
9
+ <CollapsibleTrigger
10
+ data-slot="collapsible-trigger"
11
+ v-bind="props"
12
+ >
13
+ <slot />
14
+ </CollapsibleTrigger>
15
+ </template>
@@ -0,0 +1,3 @@
1
+ export { default as Collapsible } from './Collapsible.vue'
2
+ export { default as CollapsibleContent } from './CollapsibleContent.vue'
3
+ export { default as CollapsibleTrigger } from './CollapsibleTrigger.vue'
@@ -0,0 +1,29 @@
1
+ <script setup lang="ts">
2
+ import type { SeparatorProps } from 'reka-ui'
3
+ import type { HTMLAttributes } from 'vue'
4
+ import { reactiveOmit } from '@vueuse/core'
5
+ import { Separator } from 'reka-ui'
6
+ import { cn } from '~/lib/utils'
7
+
8
+ const props = withDefaults(defineProps<
9
+ SeparatorProps & { class?: HTMLAttributes['class'] }
10
+ >(), {
11
+ orientation: 'horizontal',
12
+ decorative: true,
13
+ })
14
+
15
+ const delegatedProps = reactiveOmit(props, 'class')
16
+ </script>
17
+
18
+ <template>
19
+ <Separator
20
+ data-slot="separator"
21
+ v-bind="delegatedProps"
22
+ :class="
23
+ cn(
24
+ 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',
25
+ props.class,
26
+ )
27
+ "
28
+ />
29
+ </template>
@@ -0,0 +1 @@
1
+ export { default as Separator } from './Separator.vue'
@@ -0,0 +1,35 @@
1
+ <script setup lang="ts">
2
+ import type { SwitchRootEmits, SwitchRootProps } from 'reka-ui'
3
+ import type { HTMLAttributes } from 'vue'
4
+ import { reactiveOmit } from '@vueuse/core'
5
+ import {
6
+ SwitchRoot,
7
+ SwitchThumb,
8
+ useForwardPropsEmits,
9
+ } from 'reka-ui'
10
+ import { cn } from '~/lib/utils'
11
+
12
+ const props = defineProps<SwitchRootProps & { class?: HTMLAttributes['class'] }>()
13
+
14
+ const emits = defineEmits<SwitchRootEmits>()
15
+
16
+ const delegatedProps = reactiveOmit(props, 'class')
17
+
18
+ const forwarded = useForwardPropsEmits(delegatedProps, emits)
19
+ </script>
20
+
21
+ <template>
22
+ <SwitchRoot
23
+ v-bind="forwarded"
24
+ :class="cn(
25
+ 'peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',
26
+ props.class,
27
+ )"
28
+ >
29
+ <SwitchThumb
30
+ :class="cn('pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0')"
31
+ >
32
+ <slot name="thumb" />
33
+ </SwitchThumb>
34
+ </SwitchRoot>
35
+ </template>
@@ -0,0 +1 @@
1
+ export { default as Switch } from './Switch.vue'
@@ -0,0 +1,16 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <div class="relative w-full overflow-auto">
12
+ <table :class="cn('w-full caption-bottom text-sm', props.class)">
13
+ <slot />
14
+ </table>
15
+ </div>
16
+ </template>
@@ -0,0 +1,14 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <tbody :class="cn('[&_tr:last-child]:border-0', props.class)">
12
+ <slot />
13
+ </tbody>
14
+ </template>
@@ -0,0 +1,14 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <caption :class="cn('mt-4 text-sm text-muted-foreground', props.class)">
12
+ <slot />
13
+ </caption>
14
+ </template>
@@ -0,0 +1,21 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <td
12
+ :class="
13
+ cn(
14
+ 'p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-0.5',
15
+ props.class,
16
+ )
17
+ "
18
+ >
19
+ <slot />
20
+ </td>
21
+ </template>
@@ -0,0 +1,34 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { reactiveOmit } from '@vueuse/core'
4
+ import { cn } from '~/lib/utils'
5
+ import TableCell from './TableCell.vue'
6
+ import TableRow from './TableRow.vue'
7
+
8
+ const props = withDefaults(defineProps<{
9
+ class?: HTMLAttributes['class']
10
+ colspan?: number
11
+ }>(), {
12
+ colspan: 1,
13
+ })
14
+
15
+ const delegatedProps = reactiveOmit(props, 'class')
16
+ </script>
17
+
18
+ <template>
19
+ <TableRow>
20
+ <TableCell
21
+ :class="
22
+ cn(
23
+ 'p-4 whitespace-nowrap align-middle text-sm text-foreground',
24
+ props.class,
25
+ )
26
+ "
27
+ v-bind="delegatedProps"
28
+ >
29
+ <div class="flex items-center justify-center py-10">
30
+ <slot />
31
+ </div>
32
+ </TableCell>
33
+ </TableRow>
34
+ </template>
@@ -0,0 +1,14 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <tfoot :class="cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', props.class)">
12
+ <slot />
13
+ </tfoot>
14
+ </template>
@@ -0,0 +1,14 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <th :class="cn('h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-0.5', props.class)">
12
+ <slot />
13
+ </th>
14
+ </template>
@@ -0,0 +1,14 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <thead :class="cn('[&_tr]:border-b', props.class)">
12
+ <slot />
13
+ </thead>
14
+ </template>
@@ -0,0 +1,14 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue'
3
+ import { cn } from '~/lib/utils'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <tr :class="cn('border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted', props.class)">
12
+ <slot />
13
+ </tr>
14
+ </template>
@@ -0,0 +1,9 @@
1
+ export { default as Table } from './Table.vue'
2
+ export { default as TableBody } from './TableBody.vue'
3
+ export { default as TableCaption } from './TableCaption.vue'
4
+ export { default as TableCell } from './TableCell.vue'
5
+ export { default as TableEmpty } from './TableEmpty.vue'
6
+ export { default as TableFooter } from './TableFooter.vue'
7
+ export { default as TableHead } from './TableHead.vue'
8
+ export { default as TableHeader } from './TableHeader.vue'
9
+ export { default as TableRow } from './TableRow.vue'
@@ -0,0 +1,15 @@
1
+ <script setup lang="ts">
2
+ import type { TabsRootEmits, TabsRootProps } from 'reka-ui'
3
+ import { TabsRoot, useForwardPropsEmits } from 'reka-ui'
4
+
5
+ const props = defineProps<TabsRootProps>()
6
+ const emits = defineEmits<TabsRootEmits>()
7
+
8
+ const forwarded = useForwardPropsEmits(props, emits)
9
+ </script>
10
+
11
+ <template>
12
+ <TabsRoot v-bind="forwarded">
13
+ <slot />
14
+ </TabsRoot>
15
+ </template>
@@ -0,0 +1,20 @@
1
+ <script setup lang="ts">
2
+ import type { TabsContentProps } from 'reka-ui'
3
+ import type { HTMLAttributes } from 'vue'
4
+ import { reactiveOmit } from '@vueuse/core'
5
+ import { TabsContent } from 'reka-ui'
6
+ import { cn } from '~/lib/utils'
7
+
8
+ const props = defineProps<TabsContentProps & { class?: HTMLAttributes['class'] }>()
9
+
10
+ const delegatedProps = reactiveOmit(props, 'class')
11
+ </script>
12
+
13
+ <template>
14
+ <TabsContent
15
+ :class="cn('mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', props.class)"
16
+ v-bind="delegatedProps"
17
+ >
18
+ <slot />
19
+ </TabsContent>
20
+ </template>
@@ -0,0 +1,23 @@
1
+ <script setup lang="ts">
2
+ import type { TabsListProps } from 'reka-ui'
3
+ import type { HTMLAttributes } from 'vue'
4
+ import { reactiveOmit } from '@vueuse/core'
5
+ import { TabsList } from 'reka-ui'
6
+ import { cn } from '~/lib/utils'
7
+
8
+ const props = defineProps<TabsListProps & { class?: HTMLAttributes['class'] }>()
9
+
10
+ const delegatedProps = reactiveOmit(props, 'class')
11
+ </script>
12
+
13
+ <template>
14
+ <TabsList
15
+ v-bind="delegatedProps"
16
+ :class="cn(
17
+ 'inline-flex items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground',
18
+ props.class,
19
+ )"
20
+ >
21
+ <slot />
22
+ </TabsList>
23
+ </template>
@@ -0,0 +1,27 @@
1
+ <script setup lang="ts">
2
+ import type { TabsTriggerProps } from 'reka-ui'
3
+ import type { HTMLAttributes } from 'vue'
4
+ import { reactiveOmit } from '@vueuse/core'
5
+ import { TabsTrigger, useForwardProps } from 'reka-ui'
6
+ import { cn } from '~/lib/utils'
7
+
8
+ const props = defineProps<TabsTriggerProps & { class?: HTMLAttributes['class'] }>()
9
+
10
+ const delegatedProps = reactiveOmit(props, 'class')
11
+
12
+ const forwardedProps = useForwardProps(delegatedProps)
13
+ </script>
14
+
15
+ <template>
16
+ <TabsTrigger
17
+ v-bind="forwardedProps"
18
+ :class="cn(
19
+ 'inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow',
20
+ props.class,
21
+ )"
22
+ >
23
+ <span class="truncate">
24
+ <slot />
25
+ </span>
26
+ </TabsTrigger>
27
+ </template>
@@ -0,0 +1,4 @@
1
+ export { default as Tabs } from './Tabs.vue'
2
+ export { default as TabsContent } from './TabsContent.vue'
3
+ export { default as TabsList } from './TabsList.vue'
4
+ export { default as TabsTrigger } from './TabsTrigger.vue'
@@ -0,0 +1,19 @@
1
+ <script setup lang="ts">
2
+ import type { TooltipRootEmits, TooltipRootProps } from 'reka-ui'
3
+ import { TooltipRoot, useForwardPropsEmits } from 'reka-ui'
4
+
5
+ const props = defineProps<TooltipRootProps>()
6
+ const emits = defineEmits<TooltipRootEmits>()
7
+
8
+ const forwarded = useForwardPropsEmits(props, emits)
9
+ </script>
10
+
11
+ <template>
12
+ <TooltipRoot
13
+ v-slot="slotProps"
14
+ data-slot="tooltip"
15
+ v-bind="forwarded"
16
+ >
17
+ <slot v-bind="slotProps" />
18
+ </TooltipRoot>
19
+ </template>
@@ -0,0 +1,34 @@
1
+ <script setup lang="ts">
2
+ import type { TooltipContentEmits, TooltipContentProps } from 'reka-ui'
3
+ import type { HTMLAttributes } from 'vue'
4
+ import { reactiveOmit } from '@vueuse/core'
5
+ import { TooltipArrow, TooltipContent, TooltipPortal, useForwardPropsEmits } from 'reka-ui'
6
+ import { cn } from '@/lib/utils'
7
+
8
+ defineOptions({
9
+ inheritAttrs: false,
10
+ })
11
+
12
+ const props = withDefaults(defineProps<TooltipContentProps & { class?: HTMLAttributes['class'] }>(), {
13
+ sideOffset: 4,
14
+ })
15
+
16
+ const emits = defineEmits<TooltipContentEmits>()
17
+
18
+ const delegatedProps = reactiveOmit(props, 'class')
19
+ const forwarded = useForwardPropsEmits(delegatedProps, emits)
20
+ </script>
21
+
22
+ <template>
23
+ <TooltipPortal>
24
+ <TooltipContent
25
+ data-slot="tooltip-content"
26
+ v-bind="{ ...forwarded, ...$attrs }"
27
+ :class="cn('bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md px-3 py-1.5 text-xs text-balance', props.class)"
28
+ >
29
+ <slot />
30
+
31
+ <TooltipArrow class="bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" />
32
+ </TooltipContent>
33
+ </TooltipPortal>
34
+ </template>
@@ -0,0 +1,14 @@
1
+ <script setup lang="ts">
2
+ import type { TooltipProviderProps } from 'reka-ui'
3
+ import { TooltipProvider } from 'reka-ui'
4
+
5
+ const props = withDefaults(defineProps<TooltipProviderProps>(), {
6
+ delayDuration: 0,
7
+ })
8
+ </script>
9
+
10
+ <template>
11
+ <TooltipProvider v-bind="props">
12
+ <slot />
13
+ </TooltipProvider>
14
+ </template>