iryx-ui 0.18.4 → 0.19.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 (79) hide show
  1. package/README.md +37 -0
  2. package/dist/component-names.d.ts +8 -0
  3. package/dist/component-names.js +10 -2
  4. package/dist/components/ColorPicker.vue_vue_type_script_setup_true_lang.js +38 -32
  5. package/dist/marketing/BrowserFrame.js +5 -0
  6. package/dist/marketing/BrowserFrame.vue.d.ts +40 -0
  7. package/dist/marketing/BrowserFrame.vue_vue_type_script_setup_true_lang.js +57 -0
  8. package/dist/marketing/FeatureCard.js +5 -0
  9. package/dist/marketing/FeatureCard.vue.d.ts +40 -0
  10. package/dist/marketing/FeatureCard.vue_vue_type_script_setup_true_lang.js +55 -0
  11. package/dist/marketing/Hero.js +5 -0
  12. package/dist/marketing/Hero.vue.d.ts +64 -0
  13. package/dist/marketing/Hero.vue_vue_type_script_setup_true_lang.js +94 -0
  14. package/dist/marketing/PricingCard.js +5 -0
  15. package/dist/marketing/PricingCard.vue.d.ts +70 -0
  16. package/dist/marketing/PricingCard.vue_vue_type_script_setup_true_lang.js +94 -0
  17. package/dist/marketing/PricingTable.js +5 -0
  18. package/dist/marketing/PricingTable.vue.d.ts +41 -0
  19. package/dist/marketing/PricingTable.vue_vue_type_script_setup_true_lang.js +57 -0
  20. package/dist/marketing/Section.js +5 -0
  21. package/dist/marketing/Section.vue.d.ts +53 -0
  22. package/dist/marketing/Section.vue_vue_type_script_setup_true_lang.js +78 -0
  23. package/dist/marketing/TestimonialCard.js +5 -0
  24. package/dist/marketing/TestimonialCard.vue.d.ts +41 -0
  25. package/dist/marketing/TestimonialCard.vue_vue_type_script_setup_true_lang.js +61 -0
  26. package/dist/marketing/index.d.ts +7 -0
  27. package/dist/marketing/index.js +20 -0
  28. package/dist/marketing.d.ts +30 -0
  29. package/dist/marketing.js +9 -0
  30. package/dist/nuxt.d.ts +5 -0
  31. package/dist/nuxt.js +19 -13
  32. package/dist/plugin.d.ts +6 -1
  33. package/dist/plugin.js +3 -2
  34. package/dist/theme/accordion.js +1 -1
  35. package/dist/theme/alert.js +1 -1
  36. package/dist/theme/app-shell.js +1 -1
  37. package/dist/theme/banner.js +1 -1
  38. package/dist/theme/breadcrumb.js +1 -1
  39. package/dist/theme/browser-frame.d.ts +59 -0
  40. package/dist/theme/browser-frame.js +20 -0
  41. package/dist/theme/calendar.js +2 -2
  42. package/dist/theme/checkbox.js +1 -1
  43. package/dist/theme/collapsible.js +1 -1
  44. package/dist/theme/color-picker.js +2 -2
  45. package/dist/theme/combobox.js +2 -2
  46. package/dist/theme/date-picker.js +1 -1
  47. package/dist/theme/dialog.js +1 -1
  48. package/dist/theme/drawer.js +1 -1
  49. package/dist/theme/editable.js +1 -1
  50. package/dist/theme/feature-card.d.ts +41 -0
  51. package/dist/theme/feature-card.js +20 -0
  52. package/dist/theme/file-upload.js +1 -1
  53. package/dist/theme/hero.d.ts +98 -0
  54. package/dist/theme/hero.js +45 -0
  55. package/dist/theme/input.d.ts +2 -2
  56. package/dist/theme/input.js +2 -2
  57. package/dist/theme/menubar.js +1 -1
  58. package/dist/theme/navigation-menu.js +1 -1
  59. package/dist/theme/password-input.js +1 -1
  60. package/dist/theme/pin-input.js +1 -1
  61. package/dist/theme/popover.js +1 -1
  62. package/dist/theme/pricing-card.d.ts +62 -0
  63. package/dist/theme/pricing-card.js +23 -0
  64. package/dist/theme/radio-group.js +1 -1
  65. package/dist/theme/section.d.ts +140 -0
  66. package/dist/theme/section.js +48 -0
  67. package/dist/theme/sidebar.js +1 -1
  68. package/dist/theme/signature-pad.js +1 -1
  69. package/dist/theme/stepper.js +1 -1
  70. package/dist/theme/switch.js +1 -1
  71. package/dist/theme/table.js +2 -2
  72. package/dist/theme/tabs.js +1 -1
  73. package/dist/theme/tags-input.js +2 -2
  74. package/dist/theme/testimonial-card.d.ts +53 -0
  75. package/dist/theme/testimonial-card.js +20 -0
  76. package/dist/theme/toast.js +2 -2
  77. package/dist/theme/tree.js +1 -1
  78. package/package.json +5 -1
  79. package/theme.css +172 -0
@@ -0,0 +1,70 @@
1
+ import type { ClassValue } from '../class-value';
2
+ export interface PricingCardProps {
3
+ name?: string;
4
+ /**
5
+ * The price, already formatted — `'€19'`, `'Free'`, `'Custom'`. A string
6
+ * rather than a number: the card never formats currency, because it does not
7
+ * know the locale and half the plans in the world do not name a figure.
8
+ */
9
+ price?: string;
10
+ /** What the price is per, e.g. `'/ month'`. */
11
+ period?: string;
12
+ description?: string;
13
+ /** One line each. Every line gets a tick. */
14
+ features?: string[];
15
+ /** Label for the button. Leave out and no button renders. */
16
+ cta?: string;
17
+ /**
18
+ * The plan being pushed: a ring, a heavier shadow and a solid button. One
19
+ * card in a row should carry it.
20
+ */
21
+ featured?: boolean;
22
+ /** Text of the badge shown on the featured card. */
23
+ badge?: string;
24
+ /** Skip built-in classes; you take over styling entirely. */
25
+ unstyled?: boolean;
26
+ class?: ClassValue;
27
+ /** Override classes per slot, e.g. `{ amount: 'text-5xl' }`. */
28
+ ui?: {
29
+ root?: string;
30
+ header?: string;
31
+ name?: string;
32
+ price?: string;
33
+ amount?: string;
34
+ period?: string;
35
+ description?: string;
36
+ features?: string;
37
+ feature?: string;
38
+ featureIcon?: string;
39
+ };
40
+ }
41
+ declare var __VLS_9: {}, __VLS_11: {}, __VLS_19: {}, __VLS_21: {}, __VLS_28: {}, __VLS_31: {};
42
+ type __VLS_Slots = {} & {
43
+ name?: (props: typeof __VLS_9) => any;
44
+ } & {
45
+ badge?: (props: typeof __VLS_11) => any;
46
+ } & {
47
+ price?: (props: typeof __VLS_19) => any;
48
+ } & {
49
+ description?: (props: typeof __VLS_21) => any;
50
+ } & {
51
+ default?: (props: typeof __VLS_28) => any;
52
+ } & {
53
+ footer?: (props: typeof __VLS_31) => any;
54
+ };
55
+ declare const __VLS_base: import("vue").DefineComponent<PricingCardProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
56
+ select: () => any;
57
+ }, string, import("vue").PublicProps, Readonly<PricingCardProps> & Readonly<{
58
+ onSelect?: (() => any) | undefined;
59
+ }>, {
60
+ unstyled: boolean;
61
+ badge: string;
62
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
63
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
64
+ declare const _default: typeof __VLS_export;
65
+ export default _default;
66
+ type __VLS_WithSlots<T, S> = T & {
67
+ new (): {
68
+ $slots: S;
69
+ };
70
+ };
@@ -0,0 +1,94 @@
1
+ import { useIryxUiConfig as e } from "../config.js";
2
+ import t from "../components/Icon.js";
3
+ import n from "../components/Button.js";
4
+ import r from "../components/Badge.js";
5
+ import i from "../components/Card.js";
6
+ import { pricingCardTheme as a } from "../theme/pricing-card.js";
7
+ import { Fragment as o, computed as s, createBlock as c, createCommentVNode as l, createElementBlock as u, createElementVNode as d, createSlots as f, createTextVNode as p, createVNode as m, defineComponent as h, normalizeClass as g, openBlock as _, renderList as v, renderSlot as y, toDisplayString as b, unref as x, useSlots as S, withCtx as C } from "vue";
8
+ import { Tick02Icon as w } from "@hugeicons/core-free-icons";
9
+ //#region src/marketing/PricingCard.vue?vue&type=script&setup=true&lang.ts
10
+ var T = /*@__PURE__*/ h({
11
+ __name: "PricingCard",
12
+ props: {
13
+ name: {},
14
+ price: {},
15
+ period: {},
16
+ description: {},
17
+ features: {},
18
+ cta: {},
19
+ featured: { type: Boolean },
20
+ badge: { default: "Most popular" },
21
+ unstyled: {
22
+ type: Boolean,
23
+ default: void 0
24
+ },
25
+ class: { type: [
26
+ String,
27
+ Boolean,
28
+ null,
29
+ Array
30
+ ] },
31
+ ui: {}
32
+ },
33
+ emits: ["select"],
34
+ setup(h, { emit: T }) {
35
+ let E = h, D = T, O = S(), k = e(), A = s(() => E.unstyled ?? k.unstyled), j = s(() => a({ featured: E.featured }));
36
+ function M(e, t) {
37
+ return A.value ? [E.ui?.[e], t] : j.value[e]({ class: [E.ui?.[e], t] });
38
+ }
39
+ let N = s(() => !!(E.name ?? O.name) || !!(E.featured && E.badge)), P = s(() => !!(E.cta ?? O.footer));
40
+ return (e, a) => (_(), c(i, {
41
+ unstyled: E.unstyled,
42
+ class: g(M("root", E.class))
43
+ }, f({
44
+ default: C(() => [
45
+ E.price != null || x(O).price ? (_(), u("p", {
46
+ key: 0,
47
+ class: g(M("price"))
48
+ }, [y(e.$slots, "price", {}, () => [d("span", { class: g(M("amount")) }, b(E.price), 3), E.period ? (_(), u("span", {
49
+ key: 0,
50
+ class: g(M("period"))
51
+ }, b(E.period), 3)) : l("", !0)])], 2)) : l("", !0),
52
+ E.description || x(O).description ? (_(), u("p", {
53
+ key: 1,
54
+ class: g(M("description"))
55
+ }, [y(e.$slots, "description", {}, () => [p(b(E.description), 1)])], 2)) : l("", !0),
56
+ E.features?.length ? (_(), u("ul", {
57
+ key: 2,
58
+ class: g(M("features"))
59
+ }, [(_(!0), u(o, null, v(E.features, (e) => (_(), u("li", {
60
+ key: e,
61
+ class: g(M("feature"))
62
+ }, [m(t, {
63
+ icon: x(w),
64
+ class: g(M("featureIcon"))
65
+ }, null, 8, ["icon", "class"]), p(" " + b(e), 1)], 2))), 128))], 2)) : l("", !0),
66
+ y(e.$slots, "default")
67
+ ]),
68
+ _: 2
69
+ }, [N.value ? {
70
+ name: "header",
71
+ fn: C(() => [d("div", { class: g(M("header")) }, [d("h3", { class: g(M("name")) }, [y(e.$slots, "name", {}, () => [p(b(E.name), 1)])], 2), y(e.$slots, "badge", {}, () => [E.featured && E.badge ? (_(), c(r, {
72
+ key: 0,
73
+ size: "sm"
74
+ }, {
75
+ default: C(() => [p(b(E.badge), 1)]),
76
+ _: 1
77
+ })) : l("", !0)])], 2)]),
78
+ key: "0"
79
+ } : void 0, P.value ? {
80
+ name: "footer",
81
+ fn: C(() => [y(e.$slots, "footer", {}, () => [m(n, {
82
+ variant: E.featured ? "solid" : "outline",
83
+ block: "",
84
+ onClick: a[0] ||= (e) => D("select")
85
+ }, {
86
+ default: C(() => [p(b(E.cta), 1)]),
87
+ _: 1
88
+ }, 8, ["variant"])])]),
89
+ key: "1"
90
+ } : void 0]), 1032, ["unstyled", "class"]));
91
+ }
92
+ });
93
+ //#endregion
94
+ export { T as default };
@@ -0,0 +1,5 @@
1
+ import e from "./PricingTable.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/marketing/PricingTable.vue
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
@@ -0,0 +1,41 @@
1
+ import type { ClassValue } from '../class-value';
2
+ import type { PricingCardProps } from './PricingCard.vue';
3
+ export interface PricingPlan extends PricingCardProps {
4
+ /** Identity for the list and for the `select` event. */
5
+ id?: string | number;
6
+ }
7
+ export interface PricingTableProps {
8
+ /** Render as a different element or component. */
9
+ as?: string;
10
+ plans?: PricingPlan[];
11
+ /** Badge for the featured plan. A plan's own `badge` wins over it. */
12
+ badge?: string;
13
+ /**
14
+ * Columns from `lg` up. Defaults to one per plan, which is right until there
15
+ * are more than four — past that, set it and let them wrap.
16
+ */
17
+ columns?: 1 | 2 | 3 | 4;
18
+ /** Skip built-in classes; you take over styling entirely. */
19
+ unstyled?: boolean;
20
+ class?: ClassValue;
21
+ }
22
+ declare var __VLS_8: {};
23
+ type __VLS_Slots = {} & {
24
+ default?: (props: typeof __VLS_8) => any;
25
+ };
26
+ declare const __VLS_base: import("vue").DefineComponent<PricingTableProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
27
+ select: (plan: PricingPlan) => any;
28
+ }, string, import("vue").PublicProps, Readonly<PricingTableProps> & Readonly<{
29
+ onSelect?: ((plan: PricingPlan) => any) | undefined;
30
+ }>, {
31
+ unstyled: boolean;
32
+ as: string;
33
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
34
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
35
+ declare const _default: typeof __VLS_export;
36
+ export default _default;
37
+ type __VLS_WithSlots<T, S> = T & {
38
+ new (): {
39
+ $slots: S;
40
+ };
41
+ };
@@ -0,0 +1,57 @@
1
+ import { useIryxUiConfig as e } from "../config.js";
2
+ import t from "./PricingCard.js";
3
+ import { Fragment as n, computed as r, createBlock as i, createElementBlock as a, defineComponent as o, mergeProps as s, normalizeClass as c, openBlock as l, renderList as u, renderSlot as d, unref as f, withCtx as p } from "vue";
4
+ import { Primitive as m } from "reka-ui";
5
+ //#region src/marketing/PricingTable.vue?vue&type=script&setup=true&lang.ts
6
+ var h = /*@__PURE__*/ o({
7
+ __name: "PricingTable",
8
+ props: {
9
+ as: { default: "div" },
10
+ plans: {},
11
+ badge: {},
12
+ columns: {},
13
+ unstyled: {
14
+ type: Boolean,
15
+ default: void 0
16
+ },
17
+ class: { type: [
18
+ String,
19
+ Boolean,
20
+ null,
21
+ Array
22
+ ] }
23
+ },
24
+ emits: ["select"],
25
+ setup(o, { emit: h }) {
26
+ let g = o, _ = h, v = e(), y = r(() => g.unstyled ?? v.unstyled), b = {
27
+ 1: "",
28
+ 2: "sm:grid-cols-2",
29
+ 3: "lg:grid-cols-3",
30
+ 4: "sm:grid-cols-2 lg:grid-cols-4"
31
+ }, x = r(() => {
32
+ let e = g.columns ?? Math.min(g.plans?.length ?? 1, 4);
33
+ return y.value ? g.class : [
34
+ "grid items-start gap-4",
35
+ b[e],
36
+ g.class
37
+ ];
38
+ });
39
+ return (e, r) => (l(), i(f(m), {
40
+ as: g.as,
41
+ class: c(x.value)
42
+ }, {
43
+ default: p(() => [d(e.$slots, "default", {}, () => [(l(!0), a(n, null, u(g.plans, (e, n) => (l(), i(t, s({ key: e.id ?? e.name ?? n }, { ref_for: !0 }, e, {
44
+ badge: e.badge ?? g.badge,
45
+ unstyled: g.unstyled,
46
+ onSelect: (t) => _("select", e)
47
+ }), null, 16, [
48
+ "badge",
49
+ "unstyled",
50
+ "onSelect"
51
+ ]))), 128))])]),
52
+ _: 3
53
+ }, 8, ["as", "class"]));
54
+ }
55
+ });
56
+ //#endregion
57
+ export { h as default };
@@ -0,0 +1,5 @@
1
+ import e from "./Section.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/marketing/Section.vue
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
@@ -0,0 +1,53 @@
1
+ import type { ClassValue } from '../class-value';
2
+ export interface SectionProps {
3
+ /** Render as a different element or component. */
4
+ as?: string;
5
+ /** Small line above the heading, e.g. `Pricing`. */
6
+ eyebrow?: string;
7
+ heading?: string;
8
+ description?: string;
9
+ /** `muted` tints the band, to separate it from the sections either side. */
10
+ tone?: 'default' | 'muted';
11
+ /** Rule along the top edge. */
12
+ bordered?: boolean;
13
+ align?: 'start' | 'center';
14
+ /** Vertical rhythm. `none` leaves it to you. */
15
+ padding?: 'none' | 'sm' | 'md' | 'lg';
16
+ /** Maximum content width, passed to the container. */
17
+ size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';
18
+ /** Skip built-in classes; you take over styling entirely. */
19
+ unstyled?: boolean;
20
+ class?: ClassValue;
21
+ /** Override classes per slot, e.g. `{ heading: 'text-5xl' }`. */
22
+ ui?: {
23
+ root?: string;
24
+ container?: string;
25
+ header?: string;
26
+ eyebrow?: string;
27
+ heading?: string;
28
+ description?: string;
29
+ body?: string;
30
+ };
31
+ }
32
+ declare var __VLS_14: {}, __VLS_16: {}, __VLS_18: {}, __VLS_20: {};
33
+ type __VLS_Slots = {} & {
34
+ eyebrow?: (props: typeof __VLS_14) => any;
35
+ } & {
36
+ heading?: (props: typeof __VLS_16) => any;
37
+ } & {
38
+ description?: (props: typeof __VLS_18) => any;
39
+ } & {
40
+ default?: (props: typeof __VLS_20) => any;
41
+ };
42
+ declare const __VLS_base: import("vue").DefineComponent<SectionProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<SectionProps> & Readonly<{}>, {
43
+ unstyled: boolean;
44
+ as: string;
45
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
46
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
47
+ declare const _default: typeof __VLS_export;
48
+ export default _default;
49
+ type __VLS_WithSlots<T, S> = T & {
50
+ new (): {
51
+ $slots: S;
52
+ };
53
+ };
@@ -0,0 +1,78 @@
1
+ import { useIryxUiConfig as e } from "../config.js";
2
+ import t from "../components/Container.js";
3
+ import { sectionTheme as n } from "../theme/section.js";
4
+ import { computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createTextVNode as s, createVNode as c, defineComponent as l, normalizeClass as u, openBlock as d, renderSlot as f, toDisplayString as p, unref as m, useSlots as h, withCtx as g } from "vue";
5
+ import { Primitive as _ } from "reka-ui";
6
+ //#region src/marketing/Section.vue?vue&type=script&setup=true&lang.ts
7
+ var v = /*@__PURE__*/ l({
8
+ __name: "Section",
9
+ props: {
10
+ as: { default: "section" },
11
+ eyebrow: {},
12
+ heading: {},
13
+ description: {},
14
+ tone: {},
15
+ bordered: { type: Boolean },
16
+ align: {},
17
+ padding: {},
18
+ size: {},
19
+ unstyled: {
20
+ type: Boolean,
21
+ default: void 0
22
+ },
23
+ class: { type: [
24
+ String,
25
+ Boolean,
26
+ null,
27
+ Array
28
+ ] },
29
+ ui: {}
30
+ },
31
+ setup(l) {
32
+ let v = l, y = h(), b = e(), x = r(() => v.unstyled ?? b.unstyled), S = r(() => !!(v.eyebrow ?? v.heading ?? v.description) || !!(y.eyebrow ?? y.heading ?? y.description)), C = r(() => n({
33
+ tone: v.tone,
34
+ bordered: v.bordered,
35
+ align: v.align,
36
+ padding: v.padding,
37
+ hasHeader: S.value
38
+ }));
39
+ function w(e, t) {
40
+ return x.value ? [v.ui?.[e], t] : C.value[e]({ class: [v.ui?.[e], t] });
41
+ }
42
+ let T = r(() => w("root", v.class));
43
+ return (e, n) => (d(), i(m(_), {
44
+ as: v.as,
45
+ class: u(T.value)
46
+ }, {
47
+ default: g(() => [c(t, {
48
+ size: v.size,
49
+ class: u(v.ui?.container)
50
+ }, {
51
+ default: g(() => [S.value ? (d(), o("div", {
52
+ key: 0,
53
+ class: u(w("header"))
54
+ }, [
55
+ v.eyebrow || m(y).eyebrow ? (d(), o("p", {
56
+ key: 0,
57
+ class: u(w("eyebrow"))
58
+ }, [f(e.$slots, "eyebrow", {}, () => [s(p(v.eyebrow), 1)])], 2)) : a("", !0),
59
+ v.heading || m(y).heading ? (d(), o("h2", {
60
+ key: 1,
61
+ class: u(w("heading"))
62
+ }, [f(e.$slots, "heading", {}, () => [s(p(v.heading), 1)])], 2)) : a("", !0),
63
+ v.description || m(y).description ? (d(), o("p", {
64
+ key: 2,
65
+ class: u(w("description"))
66
+ }, [f(e.$slots, "description", {}, () => [s(p(v.description), 1)])], 2)) : a("", !0)
67
+ ], 2)) : a("", !0), m(y).default ? (d(), o("div", {
68
+ key: 1,
69
+ class: u(w("body"))
70
+ }, [f(e.$slots, "default")], 2)) : a("", !0)]),
71
+ _: 3
72
+ }, 8, ["size", "class"])]),
73
+ _: 3
74
+ }, 8, ["as", "class"]));
75
+ }
76
+ });
77
+ //#endregion
78
+ export { v as default };
@@ -0,0 +1,5 @@
1
+ import e from "./TestimonialCard.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/marketing/TestimonialCard.vue
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
@@ -0,0 +1,41 @@
1
+ import type { ClassValue } from '../class-value';
2
+ export interface TestimonialCardProps {
3
+ /** What they said. Curly quotes are added around it. */
4
+ quote?: string;
5
+ /** Who said it. Also derives the avatar's initials. */
6
+ name?: string;
7
+ /** Their job, company, or both. */
8
+ role?: string;
9
+ /** Their photo. Initials stand in without one. */
10
+ avatar?: string;
11
+ size?: 'sm' | 'md' | 'lg';
12
+ /** Skip built-in classes; you take over styling entirely. */
13
+ unstyled?: boolean;
14
+ class?: ClassValue;
15
+ /** Override classes per slot, e.g. `{ quote: 'italic' }`. */
16
+ ui?: {
17
+ root?: string;
18
+ quote?: string;
19
+ author?: string;
20
+ identity?: string;
21
+ name?: string;
22
+ role?: string;
23
+ };
24
+ }
25
+ declare var __VLS_8: {}, __VLS_11: {};
26
+ type __VLS_Slots = {} & {
27
+ default?: (props: typeof __VLS_8) => any;
28
+ } & {
29
+ author?: (props: typeof __VLS_11) => any;
30
+ };
31
+ declare const __VLS_base: import("vue").DefineComponent<TestimonialCardProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<TestimonialCardProps> & Readonly<{}>, {
32
+ unstyled: boolean;
33
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
34
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
35
+ declare const _default: typeof __VLS_export;
36
+ export default _default;
37
+ type __VLS_WithSlots<T, S> = T & {
38
+ new (): {
39
+ $slots: S;
40
+ };
41
+ };
@@ -0,0 +1,61 @@
1
+ import { useIryxUiConfig as e } from "../config.js";
2
+ import t from "../components/Avatar.js";
3
+ import n from "../components/Card.js";
4
+ import { testimonialCardTheme as r } from "../theme/testimonial-card.js";
5
+ import { computed as i, createBlock as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, createSlots as l, createTextVNode as u, createVNode as d, defineComponent as f, normalizeClass as p, openBlock as m, renderSlot as h, toDisplayString as g, unref as _, useSlots as v, withCtx as y } from "vue";
6
+ //#region src/marketing/TestimonialCard.vue?vue&type=script&setup=true&lang.ts
7
+ var b = /*@__PURE__*/ f({
8
+ __name: "TestimonialCard",
9
+ props: {
10
+ quote: {},
11
+ name: {},
12
+ role: {},
13
+ avatar: {},
14
+ size: {},
15
+ unstyled: {
16
+ type: Boolean,
17
+ default: void 0
18
+ },
19
+ class: { type: [
20
+ String,
21
+ Boolean,
22
+ null,
23
+ Array
24
+ ] },
25
+ ui: {}
26
+ },
27
+ setup(f) {
28
+ let b = f, x = v(), S = e(), C = i(() => b.unstyled ?? S.unstyled), w = i(() => r({ size: b.size }));
29
+ function T(e, t) {
30
+ return C.value ? [b.ui?.[e], t] : w.value[e]({ class: [b.ui?.[e], t] });
31
+ }
32
+ let E = i(() => !!(b.name ?? b.role) || !!x.author);
33
+ return (e, r) => (m(), a(n, {
34
+ unstyled: b.unstyled,
35
+ class: p(T("root", b.class))
36
+ }, l({
37
+ default: y(() => [b.quote || _(x).default ? (m(), s("blockquote", {
38
+ key: 0,
39
+ class: p(T("quote"))
40
+ }, [h(e.$slots, "default", {}, () => [u(" “" + g(b.quote) + "” ", 1)])], 2)) : o("", !0)]),
41
+ _: 2
42
+ }, [E.value ? {
43
+ name: "footer",
44
+ fn: y(() => [h(e.$slots, "author", {}, () => [c("div", { class: p(T("author")) }, [d(t, {
45
+ src: b.avatar,
46
+ name: b.name,
47
+ alt: "",
48
+ size: "sm"
49
+ }, null, 8, ["src", "name"]), c("div", { class: p(T("identity")) }, [b.name ? (m(), s("p", {
50
+ key: 0,
51
+ class: p(T("name"))
52
+ }, g(b.name), 3)) : o("", !0), b.role ? (m(), s("p", {
53
+ key: 1,
54
+ class: p(T("role"))
55
+ }, g(b.role), 3)) : o("", !0)], 2)], 2)])]),
56
+ key: "0"
57
+ } : void 0]), 1032, ["unstyled", "class"]));
58
+ }
59
+ });
60
+ //#endregion
61
+ export { b as default };
@@ -0,0 +1,7 @@
1
+ export { default as BrowserFrame } from './BrowserFrame.vue';
2
+ export { default as FeatureCard } from './FeatureCard.vue';
3
+ export { default as Hero } from './Hero.vue';
4
+ export { default as PricingCard } from './PricingCard.vue';
5
+ export { default as PricingTable } from './PricingTable.vue';
6
+ export { default as Section } from './Section.vue';
7
+ export { default as TestimonialCard } from './TestimonialCard.vue';
@@ -0,0 +1,20 @@
1
+ import { __exportAll as e } from "../_virtual/_rolldown/runtime.js";
2
+ import t from "./BrowserFrame.js";
3
+ import n from "./FeatureCard.js";
4
+ import r from "./Hero.js";
5
+ import i from "./PricingCard.js";
6
+ import a from "./PricingTable.js";
7
+ import o from "./Section.js";
8
+ import s from "./TestimonialCard.js";
9
+ //#region src/marketing/index.ts
10
+ var c = /* @__PURE__ */ e({
11
+ BrowserFrame: () => t,
12
+ FeatureCard: () => n,
13
+ Hero: () => r,
14
+ PricingCard: () => i,
15
+ PricingTable: () => a,
16
+ Section: () => o,
17
+ TestimonialCard: () => s
18
+ });
19
+ //#endregion
20
+ export { c as marketing_exports };
@@ -0,0 +1,30 @@
1
+ import * as marketingComponents from './marketing/index';
2
+ export type { BrowserFrameProps } from './marketing/BrowserFrame.vue';
3
+ export type { FeatureCardProps } from './marketing/FeatureCard.vue';
4
+ export type { HeroProps } from './marketing/Hero.vue';
5
+ export * from './marketing/index';
6
+ export type { PricingCardProps } from './marketing/PricingCard.vue';
7
+ export type { PricingPlan, PricingTableProps } from './marketing/PricingTable.vue';
8
+ export type { SectionProps } from './marketing/Section.vue';
9
+ export type { TestimonialCardProps } from './marketing/TestimonialCard.vue';
10
+ /**
11
+ * Every marketing component, keyed by name. Pass to the plugin's `components`
12
+ * option to register them globally alongside the core set:
13
+ *
14
+ * ```ts
15
+ * app.use(createIryxUi({ components: marketingComponents }))
16
+ * ```
17
+ */
18
+ export { marketingComponents };
19
+ /**
20
+ * Marketing components under the default `I` prefix. Declared only when this
21
+ * subpath is imported, so a project that never uses it keeps the core
22
+ * `GlobalComponents` untouched.
23
+ */
24
+ export type IryxUiMarketingGlobalComponents = {
25
+ [K in keyof typeof marketingComponents as `I${K}`]: (typeof marketingComponents)[K];
26
+ };
27
+ declare module 'vue' {
28
+ interface GlobalComponents extends IryxUiMarketingGlobalComponents {
29
+ }
30
+ }
@@ -0,0 +1,9 @@
1
+ import e from "./marketing/BrowserFrame.js";
2
+ import t from "./marketing/FeatureCard.js";
3
+ import n from "./marketing/Hero.js";
4
+ import r from "./marketing/PricingCard.js";
5
+ import i from "./marketing/PricingTable.js";
6
+ import a from "./marketing/Section.js";
7
+ import o from "./marketing/TestimonialCard.js";
8
+ import { marketing_exports as s } from "./marketing/index.js";
9
+ export { e as BrowserFrame, t as FeatureCard, n as Hero, r as PricingCard, i as PricingTable, a as Section, o as TestimonialCard, s as marketingComponents };
package/dist/nuxt.d.ts CHANGED
@@ -5,6 +5,11 @@ export interface ModuleOptions {
5
5
  prefix: string;
6
6
  /** Render bare Reka UI primitives without Iryx's Tailwind classes. */
7
7
  unstyled: boolean;
8
+ /**
9
+ * Also auto-import the blocks from `iryx-ui/marketing`. Off by default, so an
10
+ * app that has no use for a hero never pulls one into its bundle.
11
+ */
12
+ blocks: boolean;
8
13
  /** Startup appearance. A preference the user already stored wins over this. */
9
14
  appearance?: Appearance;
10
15
  /** Color theme: a preset name (`'violet'`, `'rose'`) or a custom theme. */
package/dist/nuxt.js CHANGED
@@ -1,7 +1,7 @@
1
- import { componentNames as e } from "./component-names.js";
2
- import { addComponent as t, addPluginTemplate as n, defineNuxtModule as r } from "@nuxt/kit";
1
+ import { componentNames as e, marketingComponentNames as t } from "./component-names.js";
2
+ import { addComponent as n, addPluginTemplate as r, defineNuxtModule as i } from "@nuxt/kit";
3
3
  //#region src/nuxt.ts
4
- var i = r({
4
+ var a = i({
5
5
  meta: {
6
6
  name: "iryx-ui",
7
7
  configKey: "iryxUi",
@@ -9,25 +9,31 @@ var i = r({
9
9
  },
10
10
  defaults: {
11
11
  prefix: "I",
12
- unstyled: !1
12
+ unstyled: !1,
13
+ blocks: !1
13
14
  },
14
- setup(r) {
15
- for (let n of e) t({
16
- name: `${r.prefix}${n}`,
17
- export: n,
15
+ setup(i) {
16
+ for (let t of e) n({
17
+ name: `${i.prefix}${t}`,
18
+ export: t,
18
19
  filePath: "iryx-ui"
19
20
  });
20
- n({
21
+ if (i.blocks) for (let e of t) n({
22
+ name: `${i.prefix}${e}`,
23
+ export: e,
24
+ filePath: "iryx-ui/marketing"
25
+ });
26
+ r({
21
27
  filename: "iryx-ui.config.mjs",
22
28
  getContents: () => `
23
29
  import { applyTheme, initAppearance, iryxUiConfigKey } from 'iryx-ui'
24
30
  import { defineNuxtPlugin } from '#app'
25
31
 
26
32
  export default defineNuxtPlugin((nuxtApp) => {
27
- nuxtApp.vueApp.provide(iryxUiConfigKey, ${JSON.stringify({ unstyled: r.unstyled })})
33
+ nuxtApp.vueApp.provide(iryxUiConfigKey, ${JSON.stringify({ unstyled: i.unstyled })})
28
34
  if (import.meta.client) {
29
- ${r.theme ? `applyTheme(${JSON.stringify(r.theme)})` : ""}
30
- ${r.appearance ? `initAppearance(${JSON.stringify(r.appearance)})` : ""}
35
+ ${i.theme ? `applyTheme(${JSON.stringify(i.theme)})` : ""}
36
+ ${i.appearance ? `initAppearance(${JSON.stringify(i.appearance)})` : ""}
31
37
  }
32
38
  })
33
39
  `
@@ -35,4 +41,4 @@ export default defineNuxtPlugin((nuxtApp) => {
35
41
  }
36
42
  });
37
43
  //#endregion
38
- export { i as default };
44
+ export { a as default };