@eslamdevui/ui 3.2.0 → 3.2.2

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 (186) hide show
  1. package/.nuxt/ui/alert.ts +5 -0
  2. package/.nuxt/ui/auth-form.ts +20 -0
  3. package/.nuxt/ui/badge.ts +5 -0
  4. package/.nuxt/ui/banner.ts +105 -0
  5. package/.nuxt/ui/blog-post.ts +140 -0
  6. package/.nuxt/ui/blog-posts.ts +14 -0
  7. package/.nuxt/ui/button-group.ts +13 -0
  8. package/.nuxt/ui/button.ts +5 -0
  9. package/.nuxt/ui/carousel.ts +5 -0
  10. package/.nuxt/ui/changelog-version.ts +41 -0
  11. package/.nuxt/ui/changelog-versions.ts +8 -0
  12. package/.nuxt/ui/chat-palette.ts +8 -0
  13. package/.nuxt/ui/content/content-navigation.ts +341 -0
  14. package/.nuxt/ui/content/content-search-button.ts +6 -0
  15. package/.nuxt/ui/content/content-search.ts +6 -0
  16. package/.nuxt/ui/content/content-surround.ts +39 -0
  17. package/.nuxt/ui/content/content-toc.ts +150 -0
  18. package/.nuxt/ui/content/index.ts +5 -0
  19. package/.nuxt/ui/content-navigation.ts +6 -4
  20. package/.nuxt/ui/content-surround.ts +5 -0
  21. package/.nuxt/ui/dashboard-navbar.ts +5 -0
  22. package/.nuxt/ui/dashboard-sidebar-collapse.ts +5 -0
  23. package/.nuxt/ui/dashboard-sidebar-toggle.ts +5 -0
  24. package/.nuxt/ui/dashboard-sidebar.ts +10 -0
  25. package/.nuxt/ui/error.ts +9 -0
  26. package/.nuxt/ui/footer-columns.ts +28 -0
  27. package/.nuxt/ui/footer.ts +11 -0
  28. package/.nuxt/ui/header.ts +30 -0
  29. package/.nuxt/ui/index.ts +80 -2
  30. package/.nuxt/ui/input-menu.ts +9 -0
  31. package/.nuxt/ui/input-number.ts +5 -0
  32. package/.nuxt/ui/input-tags.ts +9 -0
  33. package/.nuxt/ui/input.ts +9 -0
  34. package/.nuxt/ui/main.ts +3 -0
  35. package/.nuxt/ui/page-accordion.ts +7 -0
  36. package/.nuxt/ui/page-anchors.ts +30 -0
  37. package/.nuxt/ui/page-aside.ts +10 -0
  38. package/.nuxt/ui/page-body.ts +3 -0
  39. package/.nuxt/ui/page-card.ts +276 -0
  40. package/.nuxt/ui/page-columns.ts +3 -0
  41. package/.nuxt/ui/page-cta.ts +72 -0
  42. package/.nuxt/ui/page-feature.ts +31 -0
  43. package/.nuxt/ui/page-grid.ts +3 -0
  44. package/.nuxt/ui/page-header.ts +18 -0
  45. package/.nuxt/ui/page-hero.ts +46 -0
  46. package/.nuxt/ui/page-links.ts +25 -0
  47. package/.nuxt/ui/page-list.ts +8 -0
  48. package/.nuxt/ui/page-logos.ts +15 -0
  49. package/.nuxt/ui/page-marquee.ts +66 -0
  50. package/.nuxt/ui/page-section.ts +88 -0
  51. package/.nuxt/ui/page.ts +32 -0
  52. package/.nuxt/ui/pricing-plan.ts +101 -0
  53. package/.nuxt/ui/pricing-plans.ts +27 -0
  54. package/.nuxt/ui/pricing-table.ts +51 -0
  55. package/.nuxt/ui/prose/a.ts +6 -0
  56. package/.nuxt/ui/prose/accordion-item.ts +3 -0
  57. package/.nuxt/ui/prose/accordion.ts +6 -0
  58. package/.nuxt/ui/prose/badge.ts +3 -0
  59. package/.nuxt/ui/prose/blockquote.ts +3 -0
  60. package/.nuxt/ui/prose/callout.ts +129 -0
  61. package/.nuxt/ui/prose/card-group.ts +3 -0
  62. package/.nuxt/ui/prose/card.ts +119 -0
  63. package/.nuxt/ui/prose/code-collapse.ts +19 -0
  64. package/.nuxt/ui/prose/code-group.ts +13 -0
  65. package/.nuxt/ui/prose/code-icon.ts +66 -0
  66. package/.nuxt/ui/prose/code-preview.ts +14 -0
  67. package/.nuxt/ui/prose/code-tree.ts +28 -0
  68. package/.nuxt/ui/prose/code.ts +27 -0
  69. package/.nuxt/ui/prose/collapsible.ts +12 -0
  70. package/.nuxt/ui/prose/em.ts +3 -0
  71. package/.nuxt/ui/prose/field-group.ts +3 -0
  72. package/.nuxt/ui/prose/field.ts +11 -0
  73. package/.nuxt/ui/prose/h1.ts +6 -0
  74. package/.nuxt/ui/prose/h2.ts +14 -0
  75. package/.nuxt/ui/prose/h3.ts +14 -0
  76. package/.nuxt/ui/prose/h4.ts +6 -0
  77. package/.nuxt/ui/prose/hr.ts +3 -0
  78. package/.nuxt/ui/prose/icon.ts +3 -0
  79. package/.nuxt/ui/prose/img.ts +3 -0
  80. package/.nuxt/ui/prose/index.ts +41 -0
  81. package/.nuxt/ui/prose/kbd.ts +3 -0
  82. package/.nuxt/ui/prose/li.ts +3 -0
  83. package/.nuxt/ui/prose/ol.ts +3 -0
  84. package/.nuxt/ui/prose/p.ts +3 -0
  85. package/.nuxt/ui/prose/pre.ts +17 -0
  86. package/.nuxt/ui/prose/steps.ts +19 -0
  87. package/.nuxt/ui/prose/strong.ts +3 -0
  88. package/.nuxt/ui/prose/table.ts +6 -0
  89. package/.nuxt/ui/prose/tabs-item.ts +3 -0
  90. package/.nuxt/ui/prose/tabs.ts +5 -0
  91. package/.nuxt/ui/prose/tbody.ts +3 -0
  92. package/.nuxt/ui/prose/td.ts +3 -0
  93. package/.nuxt/ui/prose/th.ts +3 -0
  94. package/.nuxt/ui/prose/thead.ts +3 -0
  95. package/.nuxt/ui/prose/tr.ts +3 -0
  96. package/.nuxt/ui/prose/ul.ts +3 -0
  97. package/.nuxt/ui/select-menu.ts +9 -0
  98. package/.nuxt/ui/select.ts +9 -0
  99. package/.nuxt/ui/textarea.ts +9 -0
  100. package/.nuxt/ui/toast.ts +5 -0
  101. package/.nuxt/ui/user.ts +106 -0
  102. package/dist/module.json +1 -1
  103. package/dist/module.mjs +2 -2
  104. package/dist/runtime/components/AuthForm.vue +195 -0
  105. package/dist/runtime/components/AuthForm.vue.d.ts +85 -0
  106. package/dist/runtime/components/Banner.vue +113 -0
  107. package/dist/runtime/components/Banner.vue.d.ts +68 -0
  108. package/dist/runtime/components/BlogPost.vue +141 -0
  109. package/dist/runtime/components/BlogPost.vue.d.ts +59 -0
  110. package/dist/runtime/components/BlogPosts.vue +33 -0
  111. package/dist/runtime/components/BlogPosts.vue.d.ts +30 -0
  112. package/dist/runtime/components/ChangelogVersion.vue +165 -0
  113. package/dist/runtime/components/ChangelogVersion.vue.d.ts +58 -0
  114. package/dist/runtime/components/ChangelogVersions.vue +54 -0
  115. package/dist/runtime/components/ChangelogVersions.vue.d.ts +74 -0
  116. package/dist/runtime/components/ChatPalette.vue +32 -0
  117. package/dist/runtime/components/ChatPalette.vue.d.ts +24 -0
  118. package/dist/runtime/components/ChatPrompt.vue.d.ts +1 -1
  119. package/dist/runtime/components/CommandPalette.vue.d.ts +3 -3
  120. package/dist/runtime/components/DashboardSidebarToggle.vue.d.ts +1 -1
  121. package/dist/runtime/components/Error.vue.d.ts +1 -1
  122. package/dist/runtime/components/Footer.vue +44 -0
  123. package/dist/runtime/components/Footer.vue.d.ts +29 -0
  124. package/dist/runtime/components/FooterColumns.vue +68 -0
  125. package/dist/runtime/components/FooterColumns.vue.d.ts +52 -0
  126. package/dist/runtime/components/Header.vue +137 -0
  127. package/dist/runtime/components/Header.vue.d.ts +72 -0
  128. package/dist/runtime/components/InputMenu.vue.d.ts +3 -3
  129. package/dist/runtime/components/Main.vue +23 -0
  130. package/dist/runtime/components/Main.vue.d.ts +20 -0
  131. package/dist/runtime/components/Page.vue +37 -0
  132. package/dist/runtime/components/Page.vue.d.ts +25 -0
  133. package/dist/runtime/components/PageAccordion.vue +26 -0
  134. package/dist/runtime/components/PageAccordion.vue.d.ts +21 -0
  135. package/dist/runtime/components/PageAnchors.vue +50 -0
  136. package/dist/runtime/components/PageAnchors.vue.d.ts +42 -0
  137. package/dist/runtime/components/PageAside.vue +36 -0
  138. package/dist/runtime/components/PageAside.vue.d.ts +27 -0
  139. package/dist/runtime/components/PageBody.vue +23 -0
  140. package/dist/runtime/components/PageBody.vue.d.ts +18 -0
  141. package/dist/runtime/components/PageCTA.vue +58 -0
  142. package/dist/runtime/components/PageCTA.vue.d.ts +49 -0
  143. package/dist/runtime/components/PageCard.vue +121 -0
  144. package/dist/runtime/components/PageCard.vue.d.ts +71 -0
  145. package/dist/runtime/components/PageColumns.vue +23 -0
  146. package/dist/runtime/components/PageColumns.vue.d.ts +18 -0
  147. package/dist/runtime/components/PageFeature.vue +71 -0
  148. package/dist/runtime/components/PageFeature.vue.d.ts +43 -0
  149. package/dist/runtime/components/PageGrid.vue +23 -0
  150. package/dist/runtime/components/PageGrid.vue.d.ts +18 -0
  151. package/dist/runtime/components/PageHeader.vue +58 -0
  152. package/dist/runtime/components/PageHeader.vue.d.ts +35 -0
  153. package/dist/runtime/components/PageHero.vue +67 -0
  154. package/dist/runtime/components/PageHero.vue.d.ts +49 -0
  155. package/dist/runtime/components/PageLinks.vue +55 -0
  156. package/dist/runtime/components/PageLinks.vue.d.ts +44 -0
  157. package/dist/runtime/components/PageList.vue +24 -0
  158. package/dist/runtime/components/PageList.vue.d.ts +21 -0
  159. package/dist/runtime/components/PageLogos.vue +64 -0
  160. package/dist/runtime/components/PageLogos.vue.d.ts +32 -0
  161. package/dist/runtime/components/PageMarquee.vue +40 -0
  162. package/dist/runtime/components/PageMarquee.vue.d.ts +32 -0
  163. package/dist/runtime/components/PageSection.vue +88 -0
  164. package/dist/runtime/components/PageSection.vue.d.ts +64 -0
  165. package/dist/runtime/components/PricingPlan.vue +129 -0
  166. package/dist/runtime/components/PricingPlan.vue.d.ts +109 -0
  167. package/dist/runtime/components/PricingPlans.vue +45 -0
  168. package/dist/runtime/components/PricingPlans.vue.d.ts +41 -0
  169. package/dist/runtime/components/PricingTable.vue +235 -0
  170. package/dist/runtime/components/PricingTable.vue.d.ts +98 -0
  171. package/dist/runtime/components/SelectMenu.vue.d.ts +3 -3
  172. package/dist/runtime/components/Tabs.vue +1 -0
  173. package/dist/runtime/components/User.vue +69 -0
  174. package/dist/runtime/components/User.vue.d.ts +46 -0
  175. package/dist/runtime/components/content/ContentSearchButton.vue.d.ts +57 -11
  176. package/dist/runtime/components/content/ContentSurround.vue +2 -2
  177. package/dist/runtime/components/content/ContentSurround.vue.d.ts +45 -52
  178. package/dist/runtime/components/content/ContentToc.vue +27 -15
  179. package/dist/runtime/components/content/ContentToc.vue.d.ts +79 -81
  180. package/dist/runtime/types/index.d.ts +33 -0
  181. package/dist/runtime/types/index.js +33 -0
  182. package/dist/shared/{ui.DQZ75GCP.mjs → ui.DErCA3YU.mjs} +1247 -50
  183. package/dist/unplugin.mjs +1 -1
  184. package/dist/vite.mjs +1 -1
  185. package/package.json +1 -1
  186. package/.nuxt/ui/prose.ts +0 -321
@@ -0,0 +1,50 @@
1
+ <script>
2
+ import theme from "#build/ui/page-anchors";
3
+ </script>
4
+
5
+ <script setup>
6
+ import { computed } from "vue";
7
+ import { Primitive } from "reka-ui";
8
+ import { pickLinkProps } from "../utils/link";
9
+ import { useAppConfig } from "#imports";
10
+ import { tv } from "../utils/tv";
11
+ const props = defineProps({
12
+ as: { type: null, required: false, default: "nav" },
13
+ links: { type: Array, required: false },
14
+ class: { type: null, required: false },
15
+ ui: { type: null, required: false }
16
+ });
17
+ const slots = defineSlots();
18
+ const appConfig = useAppConfig();
19
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.pageAnchors || {} })());
20
+ </script>
21
+
22
+ <template>
23
+ <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
24
+ <ul :class="ui.list({ class: props.ui?.list })">
25
+ <li v-for="(link, index) in links" :key="index" :class="ui.item({ class: [props.ui?.item, link.ui?.item] })">
26
+ <ULink v-slot="{ active, ...slotProps }" v-bind="pickLinkProps(link)" custom>
27
+ <ULinkBase v-bind="slotProps" :class="ui.link({ class: [props.ui?.link, link.ui?.link, link.class], active })">
28
+ <slot name="link" :link="link" :active="active">
29
+ <div v-if="link.icon || !!slots['link-leading']" :class="ui.linkLeading({ class: [props.ui?.linkLeading, link.ui?.linkLeading], active })">
30
+ <slot name="link-leading" :link="link" :active="active">
31
+ <UIcon v-if="link.icon" :name="link.icon" :class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, link.ui?.linkLeadingIcon], active })" />
32
+ </slot>
33
+ </div>
34
+
35
+ <span v-if="link.label || !!slots['link-label']" :class="ui.linkLabel({ class: [props.ui?.linkLabel, link.ui?.linkLabel], active })">
36
+ <slot name="link-label" :link="link" :active="active">
37
+ {{ link.label }}
38
+ </slot>
39
+
40
+ <UIcon v-if="link.target === '_blank'" :name="appConfig.ui.icons.external" :class="ui.linkLabelExternalIcon({ class: [props.ui?.linkLabelExternalIcon, link.ui?.linkLabelExternalIcon], active })" />
41
+ </span>
42
+
43
+ <slot name="link-trailing" :link="link" :active="active" />
44
+ </slot>
45
+ </ULinkBase>
46
+ </ULink>
47
+ </li>
48
+ </ul>
49
+ </Primitive>
50
+ </template>
@@ -0,0 +1,42 @@
1
+ import theme from '#build/ui/page-anchors';
2
+ import type { AppConfig } from '@nuxt/schema';
3
+ import type { LinkProps, ComponentConfig } from '../types';
4
+ type PageAnchors = ComponentConfig<typeof theme, AppConfig, 'pageAnchors'>;
5
+ export interface PageAnchor extends Omit<LinkProps, 'custom'> {
6
+ label: string;
7
+ /**
8
+ * @IconifyIcon
9
+ */
10
+ icon?: string;
11
+ class?: any;
12
+ ui?: Pick<PageAnchors['slots'], 'item' | 'link' | 'linkLabel' | 'linkLabelExternalIcon' | 'linkLeading' | 'linkLeadingIcon'>;
13
+ }
14
+ export interface PageAnchorsProps<T extends PageAnchor = PageAnchor> {
15
+ /**
16
+ * The element or component this component should render as.
17
+ * @defaultValue 'nav'
18
+ */
19
+ as?: any;
20
+ links?: T[];
21
+ class?: any;
22
+ ui?: PageAnchors['slots'];
23
+ }
24
+ type SlotProps<T> = (props: {
25
+ link: T;
26
+ active: boolean;
27
+ }) => any;
28
+ export interface PageAnchorsSlots<T extends PageAnchor = PageAnchor> {
29
+ 'link': SlotProps<T>;
30
+ 'link-leading': SlotProps<T>;
31
+ 'link-label': SlotProps<T>;
32
+ 'link-trailing': SlotProps<T>;
33
+ }
34
+ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<PageAnchorsProps<PageAnchor>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<PageAnchorsProps<PageAnchor>> & Readonly<{}>, {
35
+ as: any;
36
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, PageAnchorsSlots<PageAnchor>>;
37
+ export default _default;
38
+ type __VLS_WithSlots<T, S> = T & {
39
+ new (): {
40
+ $slots: S;
41
+ };
42
+ };
@@ -0,0 +1,36 @@
1
+ <script>
2
+ import theme from "#build/ui/page-aside";
3
+ </script>
4
+
5
+ <script setup>
6
+ import { computed } from "vue";
7
+ import { Primitive } from "reka-ui";
8
+ import { useAppConfig } from "#imports";
9
+ import { tv } from "../utils/tv";
10
+ const props = defineProps({
11
+ as: { type: null, required: false, default: "aside" },
12
+ class: { type: null, required: false },
13
+ ui: { type: null, required: false }
14
+ });
15
+ const slots = defineSlots();
16
+ const appConfig = useAppConfig();
17
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.pageAside || {} })());
18
+ </script>
19
+
20
+ <template>
21
+ <Primitive :as="as" :class="ui.root({ class: [props.ui?.root, props.class] })">
22
+ <div :class="ui.container({ class: props.ui?.container })">
23
+ <div v-if="!!slots.top" :class="ui.top({ class: props.ui?.top })">
24
+ <div :class="ui.topHeader({ class: props.ui?.topHeader })" />
25
+ <div :class="ui.topBody({ class: props.ui?.topBody })">
26
+ <slot name="top" />
27
+ </div>
28
+ <div :class="ui.topFooter({ class: props.ui?.topFooter })" />
29
+ </div>
30
+
31
+ <slot />
32
+
33
+ <slot name="bottom" />
34
+ </div>
35
+ </Primitive>
36
+ </template>
@@ -0,0 +1,27 @@
1
+ import theme from '#build/ui/page-aside';
2
+ import type { AppConfig } from '@nuxt/schema';
3
+ import type { ComponentConfig } from '../types';
4
+ type PageAside = ComponentConfig<typeof theme, AppConfig, 'pageAside'>;
5
+ export interface PageAsideProps {
6
+ /**
7
+ * The element or component this component should render as.
8
+ * @defaultValue 'aside'
9
+ */
10
+ as?: any;
11
+ class?: any;
12
+ ui?: PageAside['slots'];
13
+ }
14
+ export interface PageAsideSlots {
15
+ top(props?: {}): any;
16
+ default(props?: {}): any;
17
+ bottom(props?: {}): any;
18
+ }
19
+ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<PageAsideProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<PageAsideProps> & Readonly<{}>, {
20
+ as: any;
21
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, PageAsideSlots>;
22
+ export default _default;
23
+ type __VLS_WithSlots<T, S> = T & {
24
+ new (): {
25
+ $slots: S;
26
+ };
27
+ };
@@ -0,0 +1,23 @@
1
+ <script>
2
+ import theme from "#build/ui/page-body";
3
+ </script>
4
+
5
+ <script setup>
6
+ import { computed } from "vue";
7
+ import { Primitive } from "reka-ui";
8
+ import { useAppConfig } from "#imports";
9
+ import { tv } from "../utils/tv";
10
+ const props = defineProps({
11
+ as: { type: null, required: false },
12
+ class: { type: null, required: false }
13
+ });
14
+ defineSlots();
15
+ const appConfig = useAppConfig();
16
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.pageBody || {} }));
17
+ </script>
18
+
19
+ <template>
20
+ <Primitive :as="as" :class="ui({ class: props.class })">
21
+ <slot />
22
+ </Primitive>
23
+ </template>
@@ -0,0 +1,18 @@
1
+ export interface PageBodyProps {
2
+ /**
3
+ * The element or component this component should render as.
4
+ * @defaultValue 'div'
5
+ */
6
+ as?: any;
7
+ class?: any;
8
+ }
9
+ export interface PageBodySlots {
10
+ default(props?: {}): any;
11
+ }
12
+ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<PageBodyProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<PageBodyProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, PageBodySlots>;
13
+ export default _default;
14
+ type __VLS_WithSlots<T, S> = T & {
15
+ new (): {
16
+ $slots: S;
17
+ };
18
+ };
@@ -0,0 +1,58 @@
1
+ <script>
2
+ import theme from "#build/ui/page-cta";
3
+ </script>
4
+
5
+ <script setup>
6
+ import { computed } from "vue";
7
+ import { Primitive } from "reka-ui";
8
+ import { useAppConfig } from "#imports";
9
+ import { tv } from "../utils/tv";
10
+ const props = defineProps({
11
+ as: { type: null, required: false },
12
+ class: { type: null, required: false },
13
+ title: { type: String, required: false },
14
+ description: { type: String, required: false },
15
+ orientation: { type: null, required: false, default: "vertical" },
16
+ reverse: { type: Boolean, required: false },
17
+ variant: { type: null, required: false },
18
+ links: { type: Array, required: false },
19
+ ui: { type: null, required: false }
20
+ });
21
+ const slots = defineSlots();
22
+ const appConfig = useAppConfig();
23
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.pageCTA || {} })({
24
+ variant: props.variant,
25
+ orientation: props.orientation,
26
+ reverse: props.reverse,
27
+ title: !!props.title || !!slots.title
28
+ }));
29
+ </script>
30
+
31
+ <template>
32
+ <Primitive :as="as" :data-orientation="orientation" :class="ui.root({ class: [props.ui?.root, props.class] })">
33
+ <UContainer :class="ui.container({ class: props.ui?.container })">
34
+ <div :class="ui.wrapper({ class: props.ui?.wrapper })">
35
+ <h2 v-if="title || !!slots.title" :class="ui.title({ class: props.ui?.title })">
36
+ <slot name="title">
37
+ {{ title }}
38
+ </slot>
39
+ </h2>
40
+
41
+ <div v-if="description || !!slots.description" :class="ui.description({ class: props.ui?.description })">
42
+ <slot name="description">
43
+ {{ description }}
44
+ </slot>
45
+ </div>
46
+
47
+ <div v-if="links?.length || !!slots.links" :class="ui.links({ class: props.ui?.links })">
48
+ <slot name="links">
49
+ <UButton v-for="(link, index) in links" :key="index" size="lg" v-bind="link" />
50
+ </slot>
51
+ </div>
52
+ </div>
53
+
54
+ <slot v-if="!!slots.default" />
55
+ <div v-else-if="orientation === 'horizontal'" class="hidden lg:block" />
56
+ </UContainer>
57
+ </Primitive>
58
+ </template>
@@ -0,0 +1,49 @@
1
+ import theme from '#build/ui/page-cta';
2
+ import type { AppConfig } from '@nuxt/schema';
3
+ import type { ButtonProps, ComponentConfig } from '../types';
4
+ type PageCTA = ComponentConfig<typeof theme, AppConfig, 'pageCTA'>;
5
+ export interface PageCTAProps {
6
+ /**
7
+ * The element or component this component should render as.
8
+ * @defaultValue 'div'
9
+ */
10
+ as?: any;
11
+ class?: any;
12
+ title?: string;
13
+ description?: string;
14
+ /**
15
+ * The orientation of the page cta.
16
+ * @defaultValue 'vertical'
17
+ */
18
+ orientation?: PageCTA['variants']['orientation'];
19
+ /**
20
+ * Reverse the order of the default slot.
21
+ * @defaultValue false
22
+ */
23
+ reverse?: boolean;
24
+ /**
25
+ * @defaultValue 'outline'
26
+ */
27
+ variant?: PageCTA['variants']['variant'];
28
+ /**
29
+ * Display a list of Button under the description.
30
+ * `{ size: 'lg' }`{lang="ts-type"}
31
+ */
32
+ links?: ButtonProps[];
33
+ ui?: PageCTA['slots'];
34
+ }
35
+ export interface PageCTASlots {
36
+ default(props?: {}): any;
37
+ title(props?: {}): any;
38
+ description(props?: {}): any;
39
+ links(props?: {}): any;
40
+ }
41
+ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<PageCTAProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<PageCTAProps> & Readonly<{}>, {
42
+ orientation: PageCTA["variants"]["orientation"];
43
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, PageCTASlots>;
44
+ export default _default;
45
+ type __VLS_WithSlots<T, S> = T & {
46
+ new (): {
47
+ $slots: S;
48
+ };
49
+ };
@@ -0,0 +1,121 @@
1
+ <script>
2
+ import theme from "#build/ui/page-card";
3
+ </script>
4
+
5
+ <script setup>
6
+ import { computed, ref, watch } from "vue";
7
+ import { Primitive } from "reka-ui";
8
+ import { useMouseInElement, pausableFilter } from "@vueuse/core";
9
+ import { useAppConfig } from "#imports";
10
+ import { getSlotChildrenText } from "../utils";
11
+ import { tv } from "../utils/tv";
12
+ defineOptions({ inheritAttrs: false });
13
+ const props = defineProps({
14
+ as: { type: null, required: false },
15
+ icon: { type: String, required: false },
16
+ title: { type: String, required: false },
17
+ description: { type: String, required: false },
18
+ orientation: { type: null, required: false, default: "vertical" },
19
+ reverse: { type: Boolean, required: false },
20
+ highlight: { type: Boolean, required: false },
21
+ highlightColor: { type: null, required: false },
22
+ spotlight: { type: Boolean, required: false },
23
+ spotlightColor: { type: null, required: false },
24
+ variant: { type: null, required: false },
25
+ to: { type: null, required: false },
26
+ target: { type: [String, Object, null], required: false },
27
+ onClick: { type: Function, required: false },
28
+ class: { type: null, required: false },
29
+ ui: { type: null, required: false }
30
+ });
31
+ const slots = defineSlots();
32
+ const cardRef = ref();
33
+ const motionControl = pausableFilter();
34
+ const appConfig = useAppConfig();
35
+ const { elementX, elementY } = useMouseInElement(cardRef, {
36
+ eventFilter: motionControl.eventFilter
37
+ });
38
+ const spotlight = computed(() => props.spotlight && (elementX.value !== 0 || elementY.value !== 0));
39
+ watch(() => props.spotlight, (value) => {
40
+ if (value) {
41
+ motionControl.resume();
42
+ } else {
43
+ motionControl.pause();
44
+ }
45
+ }, { immediate: true });
46
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.pageCard || {} })({
47
+ orientation: props.orientation,
48
+ reverse: props.reverse,
49
+ variant: props.variant,
50
+ to: !!props.to || !!props.onClick,
51
+ title: !!props.title || !!slots.title,
52
+ highlight: props.highlight,
53
+ highlightColor: props.highlightColor,
54
+ spotlight: spotlight.value,
55
+ spotlightColor: props.spotlightColor
56
+ }));
57
+ const ariaLabel = computed(() => {
58
+ const slotText = slots.title && getSlotChildrenText(slots.title());
59
+ return (slotText || props.title || "Card link").trim();
60
+ });
61
+ </script>
62
+
63
+ <template>
64
+ <Primitive
65
+ ref="cardRef"
66
+ :as="as"
67
+ :data-orientation="orientation"
68
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
69
+ :style="spotlight && { '--spotlight-x': `${elementX}px`, '--spotlight-y': `${elementY}px` }"
70
+ @click="onClick"
71
+ >
72
+ <div v-if="props.spotlight" :class="ui.spotlight({ class: props.ui?.spotlight })" />
73
+
74
+ <div :class="ui.container({ class: props.ui?.container })">
75
+ <div v-if="!!slots.header || !!slots.body || (icon || !!slots.leading) || (title || !!slots.title) || (description || !!slots.description) || !!slots.footer" :class="ui.wrapper({ class: props.ui?.wrapper })">
76
+ <div v-if="!!slots.header" :class="ui.header({ class: props.ui?.header })">
77
+ <slot name="header" />
78
+ </div>
79
+
80
+ <div v-if="icon || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
81
+ <slot name="leading">
82
+ <UIcon v-if="icon" :name="icon" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
83
+ </slot>
84
+ </div>
85
+
86
+ <div v-if="!!slots.body || (title || !!slots.title) || (description || !!slots.description)" :class="ui.body({ class: props.ui?.body })">
87
+ <slot name="body">
88
+ <div v-if="title || !!slots.title" :class="ui.title({ class: props.ui?.title })">
89
+ <slot name="title">
90
+ {{ title }}
91
+ </slot>
92
+ </div>
93
+
94
+ <div v-if="description || !!slots.description" :class="ui.description({ class: props.ui?.description })">
95
+ <slot name="description">
96
+ {{ description }}
97
+ </slot>
98
+ </div>
99
+ </slot>
100
+ </div>
101
+
102
+ <div v-if="!!slots.footer" :class="ui.footer({ class: props.ui?.footer })">
103
+ <slot name="footer" />
104
+ </div>
105
+ </div>
106
+
107
+ <slot />
108
+ </div>
109
+
110
+ <ULink
111
+ v-if="to"
112
+ :aria-label="ariaLabel"
113
+ v-bind="{ to, target, ...$attrs }"
114
+ class="focus:outline-none peer"
115
+ tabindex="-1"
116
+ raw
117
+ >
118
+ <span class="absolute inset-0" aria-hidden="true" />
119
+ </ULink>
120
+ </Primitive>
121
+ </template>
@@ -0,0 +1,71 @@
1
+ import theme from '#build/ui/page-card';
2
+ import type { AppConfig } from '@nuxt/schema';
3
+ import type { LinkProps, ComponentConfig } from '../types';
4
+ type PageCard = ComponentConfig<typeof theme, AppConfig, 'pageCard'>;
5
+ export interface PageCardProps {
6
+ /**
7
+ * The element or component this component should render as.
8
+ * @defaultValue 'div'
9
+ */
10
+ as?: any;
11
+ /**
12
+ * The icon displayed above the title.
13
+ * @IconifyIcon
14
+ */
15
+ icon?: string;
16
+ title?: string;
17
+ description?: string;
18
+ /**
19
+ * The orientation of the page card.
20
+ * @defaultValue 'vertical'
21
+ */
22
+ orientation?: PageCard['variants']['orientation'];
23
+ /**
24
+ * Reverse the order of the default slot.
25
+ * @defaultValue false
26
+ */
27
+ reverse?: boolean;
28
+ /**
29
+ * Display a line around the page card.
30
+ */
31
+ highlight?: boolean;
32
+ /**
33
+ * @defaultValue 'primary'
34
+ */
35
+ highlightColor?: PageCard['variants']['highlightColor'];
36
+ /**
37
+ * Display a spotlight effect that follows your mouse cursor and highlights borders on hover.
38
+ */
39
+ spotlight?: boolean;
40
+ /**
41
+ * @defaultValue 'primary'
42
+ */
43
+ spotlightColor?: PageCard['variants']['spotlightColor'];
44
+ /**
45
+ * @defaultValue 'outline'
46
+ */
47
+ variant?: PageCard['variants']['variant'];
48
+ to?: LinkProps['to'];
49
+ target?: LinkProps['target'];
50
+ onClick?: (event: MouseEvent) => void | Promise<void>;
51
+ class?: any;
52
+ ui?: PageCard['slots'];
53
+ }
54
+ export interface PageCardSlots {
55
+ header(props?: {}): any;
56
+ body(props?: {}): any;
57
+ leading(props?: {}): any;
58
+ title(props?: {}): any;
59
+ description(props?: {}): any;
60
+ footer(props?: {}): any;
61
+ default(props?: {}): any;
62
+ }
63
+ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<PageCardProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<PageCardProps> & Readonly<{}>, {
64
+ orientation: PageCard["variants"]["orientation"];
65
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, PageCardSlots>;
66
+ export default _default;
67
+ type __VLS_WithSlots<T, S> = T & {
68
+ new (): {
69
+ $slots: S;
70
+ };
71
+ };
@@ -0,0 +1,23 @@
1
+ <script>
2
+ import theme from "#build/ui/page-columns";
3
+ </script>
4
+
5
+ <script setup>
6
+ import { computed } from "vue";
7
+ import { Primitive } from "reka-ui";
8
+ import { useAppConfig } from "#imports";
9
+ import { tv } from "../utils/tv";
10
+ const props = defineProps({
11
+ as: { type: null, required: false },
12
+ class: { type: null, required: false }
13
+ });
14
+ defineSlots();
15
+ const appConfig = useAppConfig();
16
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.pageColumns || {} }));
17
+ </script>
18
+
19
+ <template>
20
+ <Primitive :as="as" :class="ui({ class: props.class })">
21
+ <slot />
22
+ </Primitive>
23
+ </template>
@@ -0,0 +1,18 @@
1
+ export interface PageColumnsProps {
2
+ /**
3
+ * The element or component this component should render as.
4
+ * @defaultValue 'div'
5
+ */
6
+ as?: any;
7
+ class?: any;
8
+ }
9
+ export interface PageColumnsSlots {
10
+ default(props?: {}): any;
11
+ }
12
+ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<PageColumnsProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<PageColumnsProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, PageColumnsSlots>;
13
+ export default _default;
14
+ type __VLS_WithSlots<T, S> = T & {
15
+ new (): {
16
+ $slots: S;
17
+ };
18
+ };
@@ -0,0 +1,71 @@
1
+ <script>
2
+ import theme from "#build/ui/page-feature";
3
+ </script>
4
+
5
+ <script setup>
6
+ import { computed } from "vue";
7
+ import { Primitive } from "reka-ui";
8
+ import { getSlotChildrenText } from "../utils";
9
+ import { useAppConfig } from "#imports";
10
+ import { tv } from "../utils/tv";
11
+ defineOptions({ inheritAttrs: false });
12
+ const props = defineProps({
13
+ as: { type: null, required: false },
14
+ icon: { type: String, required: false },
15
+ title: { type: String, required: false },
16
+ description: { type: String, required: false },
17
+ orientation: { type: null, required: false, default: "horizontal" },
18
+ to: { type: null, required: false },
19
+ target: { type: [String, Object, null], required: false },
20
+ onClick: { type: Function, required: false },
21
+ class: { type: null, required: false },
22
+ ui: { type: null, required: false }
23
+ });
24
+ const slots = defineSlots();
25
+ const appConfig = useAppConfig();
26
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.pageFeature || {} })({
27
+ orientation: props.orientation,
28
+ title: !!props.title || !!slots.title
29
+ }));
30
+ const ariaLabel = computed(() => {
31
+ const slotText = slots.title && getSlotChildrenText(slots.title());
32
+ return (slotText || props.title || "Feature link").trim();
33
+ });
34
+ </script>
35
+
36
+ <template>
37
+ <Primitive :as="as" :data-orientation="orientation" :class="ui.root({ class: [props.ui?.root, props.class] })" @click="onClick">
38
+ <div v-if="icon || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
39
+ <slot name="leading">
40
+ <UIcon v-if="icon" :name="icon" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
41
+ </slot>
42
+ </div>
43
+
44
+ <div :class="ui.wrapper({ class: props.ui?.wrapper })">
45
+ <ULink
46
+ v-if="to"
47
+ :aria-label="ariaLabel"
48
+ v-bind="{ to, target, ...$attrs }"
49
+ class="focus:outline-none peer"
50
+ tabindex="-1"
51
+ raw
52
+ >
53
+ <span class="absolute inset-0" aria-hidden="true" />
54
+ </ULink>
55
+
56
+ <slot>
57
+ <div v-if="title || !!slots.title" :class="ui.title({ class: props.ui?.title })">
58
+ <slot name="title">
59
+ {{ title }}
60
+ </slot>
61
+ </div>
62
+
63
+ <div v-if="description || !!slots.description" :class="ui.description({ class: props.ui?.description })">
64
+ <slot name="description">
65
+ {{ description }}
66
+ </slot>
67
+ </div>
68
+ </slot>
69
+ </div>
70
+ </Primitive>
71
+ </template>
@@ -0,0 +1,43 @@
1
+ import theme from '#build/ui/page-feature';
2
+ import type { AppConfig } from '@nuxt/schema';
3
+ import type { LinkProps, ComponentConfig } from '../types';
4
+ type PageFeature = ComponentConfig<typeof theme, AppConfig, 'pageFeature'>;
5
+ export interface PageFeatureProps {
6
+ /**
7
+ * The element or component this component should render as.
8
+ * @defaultValue 'div'
9
+ */
10
+ as?: any;
11
+ /**
12
+ * The icon displayed next to the title when `orientation` is `horizontal` and above the title when `orientation` is `vertical`.
13
+ * @IconifyIcon
14
+ */
15
+ icon?: string;
16
+ title?: string;
17
+ description?: string;
18
+ /**
19
+ * The orientation of the page feature.
20
+ * @defaultValue 'horizontal'
21
+ */
22
+ orientation?: PageFeature['variants']['orientation'];
23
+ to?: LinkProps['to'];
24
+ target?: LinkProps['target'];
25
+ onClick?: (event: MouseEvent) => void | Promise<void>;
26
+ class?: any;
27
+ ui?: PageFeature['slots'];
28
+ }
29
+ export interface PageFeatureSlots {
30
+ leading(props?: {}): any;
31
+ title(props?: {}): any;
32
+ description(props?: {}): any;
33
+ default(props?: {}): any;
34
+ }
35
+ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<PageFeatureProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<PageFeatureProps> & Readonly<{}>, {
36
+ orientation: PageFeature["variants"]["orientation"];
37
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, PageFeatureSlots>;
38
+ export default _default;
39
+ type __VLS_WithSlots<T, S> = T & {
40
+ new (): {
41
+ $slots: S;
42
+ };
43
+ };