daisy-ui-kit 5.0.0-pre.3 → 5.0.0-pre.30

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 (151) hide show
  1. package/app/components/Accordion.vue +29 -0
  2. package/app/components/Alert.vue +36 -0
  3. package/app/components/Avatar.vue +131 -0
  4. package/app/components/AvatarGroup.vue +22 -0
  5. package/app/components/Badge.vue +72 -0
  6. package/app/components/Breadcrumbs.vue +7 -0
  7. package/app/components/Button.vue +140 -0
  8. package/app/components/Calendar.vue +175 -0
  9. package/app/components/CalendarInput.vue +275 -0
  10. package/app/components/CalendarSkeleton.vue +87 -0
  11. package/app/components/Card.vue +51 -0
  12. package/app/components/CardActions.vue +13 -0
  13. package/app/components/CardBody.vue +13 -0
  14. package/app/components/CardTitle.vue +11 -0
  15. package/app/components/Carousel.vue +24 -0
  16. package/app/components/CarouselItem.vue +5 -0
  17. package/app/components/Chat.vue +26 -0
  18. package/app/components/ChatBubble.vue +31 -0
  19. package/app/components/ChatFooter.vue +5 -0
  20. package/app/components/ChatHeader.vue +5 -0
  21. package/app/components/ChatImage.vue +5 -0
  22. package/app/components/Checkbox.vue +51 -0
  23. package/app/components/Collapse.vue +75 -0
  24. package/app/components/CollapseContent.vue +5 -0
  25. package/app/components/CollapseTitle.vue +15 -0
  26. package/app/components/Countdown.vue +15 -0
  27. package/app/components/CountdownTimers.vue +69 -0
  28. package/app/components/Counter.vue +21 -0
  29. package/app/components/Crumb.vue +5 -0
  30. package/app/components/DaisyLink.vue +56 -0
  31. package/app/components/Diff.vue +11 -0
  32. package/app/components/Divider.vue +43 -0
  33. package/app/components/Dock.vue +57 -0
  34. package/app/components/DockItem.vue +27 -0
  35. package/app/components/DockLabel.vue +5 -0
  36. package/app/components/Drawer.vue +50 -0
  37. package/app/components/DrawerContent.vue +20 -0
  38. package/app/components/DrawerSide.vue +21 -0
  39. package/app/components/Dropdown.vue +106 -0
  40. package/app/components/DropdownButton.vue +23 -0
  41. package/app/components/DropdownContent.vue +127 -0
  42. package/app/components/DropdownTarget.vue +21 -0
  43. package/app/components/Fab.vue +16 -0
  44. package/app/components/FabClose.vue +18 -0
  45. package/app/components/FabMainAction.vue +5 -0
  46. package/app/components/FabTrigger.vue +117 -0
  47. package/app/components/Fieldset.vue +20 -0
  48. package/app/components/FileInput.vue +53 -0
  49. package/app/components/Filter.vue +129 -0
  50. package/app/components/Flex.vue +89 -0
  51. package/app/components/FlexItem.vue +62 -0
  52. package/app/components/Footer.vue +31 -0
  53. package/app/components/FooterTitle.vue +18 -0
  54. package/app/components/FormControl.vue +5 -0
  55. package/app/components/Hero.vue +18 -0
  56. package/app/components/HeroContent.vue +18 -0
  57. package/app/components/HeroOverlay.vue +5 -0
  58. package/app/components/Hover3D.vue +22 -0
  59. package/app/components/HoverGallery.vue +11 -0
  60. package/app/components/Indicator.vue +20 -0
  61. package/app/components/IndicatorItem.vue +43 -0
  62. package/app/components/Input.vue +116 -0
  63. package/app/components/Join.vue +5 -0
  64. package/app/components/Kbd.vue +25 -0
  65. package/app/components/Label.vue +100 -0
  66. package/app/components/List.vue +5 -0
  67. package/app/components/ListColGrow.vue +5 -0
  68. package/app/components/ListColWrap.vue +5 -0
  69. package/app/components/ListRow.vue +5 -0
  70. package/app/components/LoadingBall.vue +42 -0
  71. package/app/components/LoadingBars.vue +42 -0
  72. package/app/components/LoadingDots.vue +42 -0
  73. package/app/components/LoadingInfinity.vue +42 -0
  74. package/app/components/LoadingRing.vue +42 -0
  75. package/app/components/LoadingSpinner.vue +42 -0
  76. package/app/components/Mask.vue +49 -0
  77. package/app/components/Menu.vue +30 -0
  78. package/app/components/MenuExpand.vue +92 -0
  79. package/app/components/MenuExpandToggle.vue +20 -0
  80. package/app/components/MenuItem.vue +39 -0
  81. package/app/components/MenuTitle.vue +5 -0
  82. package/app/components/MockupBrowser.vue +5 -0
  83. package/app/components/MockupBrowserToolbar.vue +5 -0
  84. package/app/components/MockupCode.vue +4 -0
  85. package/app/components/MockupPhone.vue +14 -0
  86. package/app/components/MockupWindow.vue +5 -0
  87. package/app/components/Modal.vue +63 -0
  88. package/app/components/ModalAction.vue +5 -0
  89. package/app/components/ModalBox.vue +5 -0
  90. package/app/components/NavButton.vue +12 -0
  91. package/app/components/Navbar.vue +12 -0
  92. package/app/components/NavbarCenter.vue +11 -0
  93. package/app/components/NavbarEnd.vue +11 -0
  94. package/app/components/NavbarStart.vue +11 -0
  95. package/app/components/Progress.vue +46 -0
  96. package/app/components/Prose.vue +37 -0
  97. package/app/components/RadialProgress.vue +36 -0
  98. package/app/components/Radio.vue +69 -0
  99. package/app/components/RadioGroup.vue +47 -0
  100. package/app/components/Range.vue +201 -0
  101. package/app/components/RangeMeasure.vue +87 -0
  102. package/app/components/RangeMeasureTick.vue +69 -0
  103. package/app/components/Rating.vue +197 -0
  104. package/app/components/Select.vue +101 -0
  105. package/app/components/Skeleton.vue +5 -0
  106. package/app/components/SkeletonText.vue +11 -0
  107. package/app/components/Stack.vue +30 -0
  108. package/app/components/Stat.vue +19 -0
  109. package/app/components/StatActions.vue +5 -0
  110. package/app/components/StatDesc.vue +5 -0
  111. package/app/components/StatFigure.vue +5 -0
  112. package/app/components/StatTitle.vue +5 -0
  113. package/app/components/StatValue.vue +5 -0
  114. package/app/components/Stats.vue +5 -0
  115. package/app/components/Status.vue +43 -0
  116. package/app/components/Step.vue +34 -0
  117. package/app/components/StepIcon.vue +5 -0
  118. package/app/components/Steps.vue +23 -0
  119. package/app/components/Swap.vue +56 -0
  120. package/app/components/Tab.vue +56 -0
  121. package/app/components/TabContent.vue +29 -0
  122. package/app/components/Table.vue +32 -0
  123. package/app/components/Tabs.vue +53 -0
  124. package/app/components/Text.vue +166 -0
  125. package/app/components/TextArea.vue +106 -0
  126. package/app/components/TextRotate.vue +24 -0
  127. package/app/components/ThemeController.vue +45 -0
  128. package/app/components/ThemeProvider.vue +302 -0
  129. package/app/components/ThemeTile.vue +50 -0
  130. package/app/components/Timeline.vue +22 -0
  131. package/app/components/TimelineEnd.vue +14 -0
  132. package/app/components/TimelineItem.vue +5 -0
  133. package/app/components/TimelineLine.vue +29 -0
  134. package/app/components/TimelineMiddle.vue +5 -0
  135. package/app/components/TimelineStart.vue +14 -0
  136. package/app/components/Toast.vue +67 -0
  137. package/app/components/Toggle.vue +60 -0
  138. package/app/components/Tooltip.vue +137 -0
  139. package/app/components/TooltipContent.vue +283 -0
  140. package/app/components/TooltipTarget.vue +20 -0
  141. package/app/components/ValidatorHint.vue +5 -0
  142. package/app/composables/__tests__/use-calendar.test.ts +239 -0
  143. package/app/composables/use-calendar.ts +288 -0
  144. package/app/composables/use-daisy-theme.ts +131 -0
  145. package/app/composables/use-toast.ts +345 -0
  146. package/app/composables/useSearch.ts +22 -0
  147. package/app/utils/drawer-utils.ts +34 -0
  148. package/app/utils/position-area.ts +40 -0
  149. package/nuxt.d.ts +13 -0
  150. package/nuxt.js +31 -0
  151. package/package.json +50 -22
@@ -0,0 +1,21 @@
1
+ <script setup>
2
+ import { inject } from 'vue'
3
+
4
+ const id = inject('dropdownId')
5
+ const isOpen = inject('isDropdownOpen')
6
+ const buttonEl = inject('buttonEl')
7
+ </script>
8
+
9
+ <template>
10
+ <div
11
+ :id="id"
12
+ ref="buttonEl"
13
+ :aria-expanded="isOpen"
14
+ aria-haspopup="menu"
15
+ :popovertarget="`${id}-content`"
16
+ :style="{ 'anchor-name': `--${id}` }"
17
+ class="dropdown-target"
18
+ >
19
+ <slot />
20
+ </div>
21
+ </template>
@@ -0,0 +1,16 @@
1
+ <script setup lang="ts">
2
+ defineProps<{
3
+ flower?: boolean
4
+ }>()
5
+ </script>
6
+
7
+ <template>
8
+ <div
9
+ class="fab"
10
+ :class="{
11
+ 'fab-flower': flower,
12
+ }"
13
+ >
14
+ <slot />
15
+ </div>
16
+ </template>
@@ -0,0 +1,18 @@
1
+ <script setup lang="ts">
2
+ function handleMouseDown(event: MouseEvent) {
3
+ event.preventDefault()
4
+ const fab = (event.currentTarget as HTMLElement)?.closest('.fab')
5
+ if (fab instanceof HTMLElement) {
6
+ fab.blur()
7
+ }
8
+ if (document.activeElement instanceof HTMLElement) {
9
+ document.activeElement.blur()
10
+ }
11
+ }
12
+ </script>
13
+
14
+ <template>
15
+ <div class="fab-close" @mousedown="handleMouseDown">
16
+ <slot />
17
+ </div>
18
+ </template>
@@ -0,0 +1,5 @@
1
+ <template>
2
+ <div class="fab-main-action">
3
+ <slot />
4
+ </div>
5
+ </template>
@@ -0,0 +1,117 @@
1
+ <script setup lang="ts">
2
+ defineOptions({
3
+ inheritAttrs: false,
4
+ })
5
+
6
+ const props = withDefaults(
7
+ defineProps<{
8
+ btn?: boolean
9
+ join?: boolean
10
+ close?: boolean
11
+
12
+ color?: string
13
+ neutral?: boolean
14
+ primary?: boolean
15
+ secondary?: boolean
16
+ accent?: boolean
17
+ info?: boolean
18
+ success?: boolean
19
+ warning?: boolean
20
+ error?: boolean
21
+
22
+ ghost?: boolean
23
+ link?: boolean
24
+ glass?: boolean
25
+ outline?: boolean
26
+ dash?: boolean
27
+ soft?: boolean
28
+
29
+ shape?: 'circle' | 'square' | 'wide' | 'block'
30
+ circle?: boolean
31
+ square?: boolean
32
+ wide?: boolean
33
+ block?: boolean
34
+
35
+ noAnimation?: boolean
36
+ active?: boolean
37
+
38
+ size?: 'lg' | 'md' | 'sm' | 'xs' | 'xl'
39
+ xl?: boolean
40
+ lg?: boolean
41
+ md?: boolean
42
+ sm?: boolean
43
+ xs?: boolean
44
+ }>(),
45
+ {
46
+ btn: true,
47
+ },
48
+ )
49
+
50
+ function handleMouseDown(event: MouseEvent) {
51
+ if (!props.close) return
52
+ const fab = (event.currentTarget as HTMLElement)?.closest('.fab')
53
+ // Only close if FAB is already open (has focus within)
54
+ if (fab instanceof HTMLElement && fab.matches(':focus-within')) {
55
+ event.preventDefault()
56
+ fab.blur()
57
+ if (document.activeElement instanceof HTMLElement) {
58
+ document.activeElement.blur()
59
+ }
60
+ }
61
+ }
62
+ </script>
63
+
64
+ <template>
65
+ <div
66
+ tabindex="0"
67
+ role="button"
68
+ v-bind="$attrs"
69
+ :class="{
70
+ btn,
71
+ 'join-item': join,
72
+
73
+ 'btn-neutral': neutral || color === 'neutral',
74
+ 'btn-primary': primary || color === 'primary',
75
+ 'btn-secondary': secondary || color === 'secondary',
76
+ 'btn-accent': accent || color === 'accent',
77
+ 'btn-info': info || color === 'info',
78
+ 'btn-success': success || color === 'success',
79
+ 'btn-warning': warning || color === 'warning',
80
+ 'btn-error': error || color === 'error',
81
+
82
+ 'text-primary': (primary || color === 'primary') && link,
83
+ 'text-secondary': (secondary || color === 'secondary') && link,
84
+ 'text-neutral': (neutral || color === 'neutral') && link,
85
+ 'text-accent': (accent || color === 'accent') && link,
86
+ 'text-info': (info || color === 'info') && link,
87
+ 'text-success': (success || color === 'success') && link,
88
+ 'text-warning': (warning || color === 'warning') && link,
89
+ 'text-error': (error || color === 'error') && link,
90
+
91
+ glass,
92
+
93
+ 'btn-circle': circle || shape === 'circle',
94
+ 'btn-square': square || shape === 'square',
95
+ 'btn-wide': wide || shape === 'wide',
96
+ 'btn-block': block || shape === 'block',
97
+
98
+ 'btn-xl': xl || size === 'xl',
99
+ 'btn-lg': lg || size === 'lg',
100
+ 'btn-md': md || size === 'md',
101
+ 'btn-sm': sm || size === 'sm',
102
+ 'btn-xs': xs || size === 'xs',
103
+
104
+ 'btn-outline': outline,
105
+ 'btn-dash': dash,
106
+ 'btn-ghost': ghost,
107
+ 'btn-soft': soft,
108
+ 'btn-link': link,
109
+
110
+ 'no-animation': noAnimation,
111
+ 'btn-active': active,
112
+ }"
113
+ @mousedown="handleMouseDown"
114
+ >
115
+ <slot />
116
+ </div>
117
+ </template>
@@ -0,0 +1,20 @@
1
+ <script setup lang="ts">
2
+ defineOptions({
3
+ inheritAttrs: false,
4
+ })
5
+
6
+ const { is = 'fieldset', legend } = defineProps<{
7
+ is?: string
8
+ legend?: string
9
+ }>()
10
+ </script>
11
+
12
+ <template>
13
+ <component :is="is" v-bind="$attrs" class="fieldset bg-base-200 border-base-300 rounded-box border p-4">
14
+ <legend v-if="legend" class="fieldset-legend">
15
+ {{ legend }}
16
+ </legend>
17
+ <slot v-else name="legend" />
18
+ <slot />
19
+ </component>
20
+ </template>
@@ -0,0 +1,53 @@
1
+ <script setup lang="ts">
2
+ defineProps<{
3
+ join?: boolean
4
+
5
+ color?: string
6
+ primary?: boolean
7
+ secondary?: boolean
8
+ accent?: boolean
9
+ info?: boolean
10
+ success?: boolean
11
+ warning?: boolean
12
+ error?: boolean
13
+
14
+ ghost?: boolean
15
+ disabled?: boolean
16
+
17
+ size?: 'xl' | 'lg' | 'md' | 'sm' | 'xs'
18
+ xl?: boolean
19
+ lg?: boolean
20
+ md?: boolean
21
+ sm?: boolean
22
+ xs?: boolean
23
+ }>()
24
+ defineEmits(['files'])
25
+ </script>
26
+
27
+ <template>
28
+ <input
29
+ type="file"
30
+ :disabled="disabled"
31
+ class="file-input"
32
+ :class="{
33
+ 'join-item': join,
34
+
35
+ 'file-input-primary': primary || color === 'primary',
36
+ 'file-input-secondary': secondary || color === 'secondary',
37
+ 'file-input-accent': accent || color === 'accent',
38
+ 'file-input-info': info || color === 'info',
39
+ 'file-input-success': success || color === 'success',
40
+ 'file-input-warning': warning || color === 'warning',
41
+ 'file-input-error': error || color === 'error',
42
+
43
+ 'file-input-xl': xl || size === 'xl',
44
+ 'file-input-lg': lg || size === 'lg',
45
+ 'file-input-md': md || size === 'md',
46
+ 'file-input-sm': sm || size === 'sm',
47
+ 'file-input-xs': xs || size === 'xs',
48
+
49
+ 'file-input-ghost': ghost,
50
+ }"
51
+ @input="$emit('files', ($event.target as any).value)"
52
+ />
53
+ </template>
@@ -0,0 +1,129 @@
1
+ <script setup lang="ts">
2
+ import { computed } from 'vue'
3
+
4
+ defineOptions({
5
+ inheritAttrs: false,
6
+ })
7
+
8
+ const props = withDefaults(
9
+ defineProps<{
10
+ is?: string
11
+ name: string
12
+ items: FilterItemInput[]
13
+ modelValue?: any
14
+ resetLabel?: string
15
+ position?: 'start' | 'end'
16
+ start?: boolean
17
+ end?: boolean
18
+
19
+ color?: string
20
+ neutral?: boolean
21
+ primary?: boolean
22
+ secondary?: boolean
23
+ accent?: boolean
24
+ info?: boolean
25
+ success?: boolean
26
+ warning?: boolean
27
+ error?: boolean
28
+
29
+ size?: 'xl' | 'lg' | 'md' | 'sm' | 'xs'
30
+ xl?: boolean
31
+ lg?: boolean
32
+ md?: boolean
33
+ sm?: boolean
34
+ xs?: boolean
35
+ }>(),
36
+ {
37
+ resetLabel: 'All',
38
+ is: 'div',
39
+ },
40
+ )
41
+
42
+ const emit = defineEmits(['update:modelValue'])
43
+
44
+ interface FilterItem {
45
+ label: string
46
+ value: any
47
+ }
48
+
49
+ type FilterItemInput = string | FilterItem
50
+
51
+ const currentValue = computed({
52
+ get: () => props.modelValue,
53
+ set(val) {
54
+ emit('update:modelValue', val)
55
+ },
56
+ })
57
+
58
+ const normalizedItems = computed(() => {
59
+ return props.items.map(item => {
60
+ if (typeof item === 'string') {
61
+ return { label: item, value: item }
62
+ }
63
+ return item
64
+ })
65
+ })
66
+ </script>
67
+
68
+ <template>
69
+ <component :is="props.is" v-bind="$attrs" class="filter">
70
+ <!-- Reset button at start -->
71
+ <input
72
+ v-if="resetLabel && (start || position === 'start')"
73
+ v-model="currentValue"
74
+ class="btn filter-reset"
75
+ type="radio"
76
+ :class="{
77
+ 'btn-xl': size === 'xl' || xl,
78
+ 'btn-lg': size === 'lg' || lg,
79
+ 'btn-md': size === 'md' || md,
80
+ 'btn-sm': size === 'sm' || sm,
81
+ 'btn-xs': size === 'xs' || xs,
82
+ }"
83
+ :name="name"
84
+ :aria-label="resetLabel"
85
+ :value="null"
86
+ />
87
+
88
+ <!-- Filter items -->
89
+ <template v-for="(item, index) in normalizedItems" :key="index">
90
+ <input
91
+ v-model="currentValue"
92
+ class="btn"
93
+ :class="{
94
+ 'btn-neutral': color === 'neutral' || neutral,
95
+ 'btn-primary': color === 'primary' || primary,
96
+ 'btn-secondary': color === 'secondary' || secondary,
97
+ 'btn-accent': color === 'accent' || accent,
98
+ 'btn-info': color === 'info' || info,
99
+ 'btn-success': color === 'success' || success,
100
+ 'btn-warning': color === 'warning' || warning,
101
+ 'btn-error': color === 'error' || error,
102
+ 'btn-xl': size === 'xl' || xl,
103
+ 'btn-lg': size === 'lg' || lg,
104
+ 'btn-md': size === 'md' || md,
105
+ 'btn-sm': size === 'sm' || sm,
106
+ 'btn-xs': size === 'xs' || xs,
107
+ }"
108
+ type="radio"
109
+ :name="name"
110
+ :aria-label="item.label"
111
+ :value="item.value"
112
+ />
113
+ </template>
114
+
115
+ <!-- Reset button at end -->
116
+ <input
117
+ v-if="resetLabel && (end || position === 'end')"
118
+ v-model="currentValue"
119
+ class="btn filter-reset"
120
+ type="radio"
121
+ :name="name"
122
+ :aria-label="resetLabel"
123
+ :value="null"
124
+ />
125
+
126
+ <!-- Optional slot for custom items -->
127
+ <slot />
128
+ </component>
129
+ </template>
@@ -0,0 +1,89 @@
1
+ <script setup lang="ts">
2
+ defineOptions({
3
+ inheritAttrs: false,
4
+ })
5
+
6
+ const { is = 'div', ...props } = defineProps<{
7
+ is?: string | object
8
+ join?: boolean
9
+
10
+ // https://tailwindcss.com/docs/flex
11
+ flex?: boolean
12
+ flex1?: boolean
13
+ flexAuto?: boolean
14
+ flexInitial?: boolean
15
+ none?: boolean
16
+
17
+ // justify
18
+ justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly'
19
+ justifyStart?: boolean
20
+ justifyEnd?: boolean
21
+ justifyCenter?: boolean
22
+ justifyBetween?: boolean
23
+ justifyAround?: boolean
24
+ justifyEvenly?: boolean
25
+
26
+ // align
27
+ items?: 'start' | 'end' | 'center' | 'baseline' | 'stretch'
28
+ itemsStart?: boolean
29
+ itemsEnd?: boolean
30
+ itemsCenter?: boolean
31
+ itemsBaseline?: boolean
32
+ itemsStretch?: boolean
33
+
34
+ grow?: boolean
35
+
36
+ // https://tailwindcss.com/docs/flex-direction
37
+ direction?: 'row' | 'col' | 'row-reverse' | 'col-reverse'
38
+ row?: boolean
39
+ col?: boolean
40
+ reverse?: boolean
41
+
42
+ // https://tailwindcss.com/docs/flex-wrap
43
+ wrap?: boolean
44
+ nowrap?: boolean
45
+ wrapReverse?: boolean
46
+ }>()
47
+ </script>
48
+
49
+ <template>
50
+ <component
51
+ :is="is"
52
+ v-bind="$attrs"
53
+ class="flex"
54
+ :class="{
55
+ 'join-item': props.join,
56
+
57
+ 'flex-1': props.flex1,
58
+ 'flex-auto': props.flexAuto,
59
+ 'flex-initial': props.flexInitial,
60
+ 'flex-none': props.none,
61
+
62
+ 'justify-start': props.justifyStart,
63
+ 'justify-end': props.justifyEnd,
64
+ 'justify-center': props.justifyCenter,
65
+ 'justify-between': props.justifyBetween,
66
+ 'justify-around': props.justifyAround,
67
+ 'justify-evenly': props.justifyEvenly,
68
+
69
+ 'items-start': props.itemsStart,
70
+ 'items-end': props.itemsEnd,
71
+ 'items-center': props.itemsCenter,
72
+ 'items-baseline': props.itemsBaseline,
73
+ 'items-stretch': props.itemsStretch,
74
+
75
+ 'flex-grow': props.grow,
76
+
77
+ 'flex-row': props.direction === 'row' || props.row,
78
+ 'flex-col': props.direction === 'col' || props.col,
79
+ 'flex-row-reverse': props.direction === 'row-reverse' || (props.row && props.reverse),
80
+ 'flex-col-reverse': props.direction === 'col-reverse' || (props.col && props.reverse),
81
+
82
+ 'flex-wrap': props.wrap,
83
+ 'flex-wrap-reverse': props.wrapReverse,
84
+ 'flex-nowrap': props.nowrap,
85
+ }"
86
+ >
87
+ <slot />
88
+ </component>
89
+ </template>
@@ -0,0 +1,62 @@
1
+ <script setup lang="ts">
2
+ import { computed } from 'vue'
3
+
4
+ const props = withDefaults(
5
+ defineProps<{
6
+ is?: any
7
+ join?: boolean
8
+
9
+ // https://tailwindcss.com/docs/flex
10
+ flex?: boolean
11
+ flex1?: boolean
12
+ flexAuto?: boolean
13
+ flexInitial?: boolean
14
+ none?: boolean
15
+
16
+ grow?: boolean
17
+
18
+ // https://tailwindcss.com/docs/flex-direction
19
+ direction?: 'row' | 'col' | 'row-reverse' | 'col-reverse'
20
+ row?: boolean
21
+ col?: boolean
22
+ reverse?: boolean
23
+
24
+ // https://tailwindcss.com/docs/flex-wrap
25
+ wrap?: boolean
26
+ nowrap?: boolean
27
+ wrapReverse?: boolean
28
+ }>(),
29
+ {
30
+ is: 'div',
31
+ flex: false,
32
+ },
33
+ )
34
+
35
+ const classes = computed(() => {
36
+ return {
37
+ 'join-item': props.join,
38
+
39
+ 'flex-1': props.flex1,
40
+ 'flex-auto': props.flexAuto,
41
+ 'flex-initial': props.flexInitial,
42
+ 'flex-none': props.none,
43
+
44
+ 'flex-grow': props.grow,
45
+
46
+ 'flex-row': props.direction === 'row' || props.row,
47
+ 'flex-col': props.direction === 'col' || props.col,
48
+ 'flex-row-reverse': props.direction === 'row-reverse' || (props.row && props.reverse),
49
+ 'flex-col-reverse': props.direction === 'col-reverse' || (props.col && props.reverse),
50
+
51
+ 'flex-wrap': props.wrap,
52
+ 'flex-wrap-reverse': props.wrapReverse,
53
+ 'flex-nowrap': props.nowrap,
54
+ }
55
+ })
56
+ </script>
57
+
58
+ <template>
59
+ <component :is="is" class="flex" :class="classes">
60
+ <slot />
61
+ </component>
62
+ </template>
@@ -0,0 +1,31 @@
1
+ <script setup lang="ts">
2
+ import Text from './Text.vue'
3
+
4
+ const props = withDefaults(
5
+ defineProps<{
6
+ center?: boolean
7
+ is?: string
8
+ orientation?: 'horizontal' | 'vertical'
9
+ horizontal?: boolean
10
+ vertical?: boolean
11
+ }>(),
12
+ {
13
+ center: false,
14
+ is: 'footer',
15
+ },
16
+ )
17
+ </script>
18
+
19
+ <template>
20
+ <Text
21
+ :is="is"
22
+ class="footer"
23
+ :class="{
24
+ 'divider-center': props.center,
25
+ 'divider-horizontal': props.horizontal || props.orientation === 'horizontal',
26
+ 'divider-vertical': props.vertical || props.orientation === 'vertical',
27
+ }"
28
+ >
29
+ <slot />
30
+ </Text>
31
+ </template>
@@ -0,0 +1,18 @@
1
+ <script setup lang="ts">
2
+ import Text from './Text.vue'
3
+
4
+ withDefaults(
5
+ defineProps<{
6
+ is?: string
7
+ }>(),
8
+ {
9
+ is: 'span',
10
+ },
11
+ )
12
+ </script>
13
+
14
+ <template>
15
+ <Text :is="is" class="footer-title">
16
+ <slot />
17
+ </Text>
18
+ </template>
@@ -0,0 +1,5 @@
1
+ <template>
2
+ <Flex col class="form-control">
3
+ <slot />
4
+ </Flex>
5
+ </template>
@@ -0,0 +1,18 @@
1
+ <script setup lang="ts">
2
+ import Text from './Text.vue'
3
+
4
+ withDefaults(
5
+ defineProps<{
6
+ is?: string
7
+ }>(),
8
+ {
9
+ is: 'div',
10
+ },
11
+ )
12
+ </script>
13
+
14
+ <template>
15
+ <Text :is="is" class="hero">
16
+ <slot />
17
+ </Text>
18
+ </template>
@@ -0,0 +1,18 @@
1
+ <script setup lang="ts">
2
+ import Text from './Text.vue'
3
+
4
+ withDefaults(
5
+ defineProps<{
6
+ is?: string
7
+ }>(),
8
+ {
9
+ is: 'div',
10
+ },
11
+ )
12
+ </script>
13
+
14
+ <template>
15
+ <Text :is="is" class="hero-content">
16
+ <slot />
17
+ </Text>
18
+ </template>
@@ -0,0 +1,5 @@
1
+ <template>
2
+ <div class="hero-overlay">
3
+ <slot />
4
+ </div>
5
+ </template>
@@ -0,0 +1,22 @@
1
+ <script setup lang="ts">
2
+ const props = defineProps<{
3
+ is?: any
4
+ disabled?: boolean
5
+ }>()
6
+ </script>
7
+
8
+ <template>
9
+ <component :is="props.is || 'div'" :class="{ 'hover-3d': !props.disabled }">
10
+ <slot />
11
+ <template v-if="!props.disabled">
12
+ <div></div>
13
+ <div></div>
14
+ <div></div>
15
+ <div></div>
16
+ <div></div>
17
+ <div></div>
18
+ <div></div>
19
+ <div></div>
20
+ </template>
21
+ </component>
22
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ const props = defineProps<{
3
+ is?: any
4
+ }>()
5
+ </script>
6
+
7
+ <template>
8
+ <component :is="props.is || 'figure'" class="hover-gallery">
9
+ <slot />
10
+ </component>
11
+ </template>