@brumaombra/ui-vintage 0.2.2 → 0.4.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 (62) hide show
  1. package/README.md +9 -9
  2. package/dist/{BackgroundGrid-Cxvbtefm.js → BackgroundGrid-BJDDcLzF.js} +1 -1
  3. package/dist/{Busy-DSyPtpVD.js → Busy-D1u_LUYu.js} +5 -13
  4. package/dist/{CalendarPrevButton.vue_vue_type_script_setup_true_lang-Dqz6DIGp.js → CalendarPrevButton.vue_vue_type_script_setup_true_lang-BA4Aw_Sl.js} +17 -29
  5. package/dist/CardFooter.vue_vue_type_script_setup_true_lang-B1eS9wge.js +40 -0
  6. package/dist/{DialogPortal-BTVR2QvT.js → DialogPortal-D81oXsCY.js} +1 -13
  7. package/dist/{DialogTitle.vue_vue_type_script_setup_true_lang-83YQbiAn.js → DialogTitle.vue_vue_type_script_setup_true_lang-BG4dvMRo.js} +5 -18
  8. package/dist/{DialogTrigger-CjJ8QNL_.js → DialogTrigger-BQbSAHMb.js} +33 -3
  9. package/dist/HugeiconsIcon.vue-CurGbgrJ.js +125 -0
  10. package/dist/MessageToast-C1L25W2l.js +76 -0
  11. package/dist/{NativeSelectOption.vue_vue_type_script_setup_true_lang-CWhL2Lw8.js → NativeSelectOption.vue_vue_type_script_setup_true_lang-COnFRt8g.js} +4 -3
  12. package/dist/{SheetTitle.vue_vue_type_script_setup_true_lang-fx9jbBwT.js → SheetTitle.vue_vue_type_script_setup_true_lang-BQbpsE2c.js} +3 -11
  13. package/dist/alert-dialog.js +1 -2
  14. package/dist/background-grid.js +1 -1
  15. package/dist/badge.js +50 -0
  16. package/dist/busy-indicator.js +1 -1
  17. package/dist/busy.js +1 -1
  18. package/dist/calendar.js +1 -1
  19. package/dist/card.js +7 -40
  20. package/dist/command.js +6 -13
  21. package/dist/components/confirm-dialog/index.d.ts +2 -2
  22. package/dist/components/dashboard-shell/DashboardShell.vue.d.ts +1 -0
  23. package/dist/components/error-page/ErrorPage.vue.d.ts +51 -0
  24. package/dist/components/error-page/index.d.ts +2 -0
  25. package/dist/components/landing/index.d.ts +6 -0
  26. package/dist/components/landing/landing-content/LandingContent.vue.d.ts +22 -0
  27. package/dist/components/landing/landing-content/index.d.ts +2 -0
  28. package/dist/components/landing/landing-footer/LandingFooter.vue.d.ts +44 -0
  29. package/dist/components/landing/landing-footer/index.d.ts +3 -0
  30. package/dist/components/landing/landing-navbar/LandingNavbar.vue.d.ts +25 -0
  31. package/dist/components/landing/landing-navbar/index.d.ts +2 -0
  32. package/dist/components/landing/landing-shell/LandingShell.vue.d.ts +32 -0
  33. package/dist/components/landing/landing-shell/index.d.ts +2 -0
  34. package/dist/components/message-dialog/index.d.ts +2 -2
  35. package/dist/components/message-toast/MessageToast.vue.d.ts +2 -0
  36. package/dist/components/message-toast/index.d.ts +2 -0
  37. package/dist/components/message-toast/message-toast-state.d.ts +18 -0
  38. package/dist/components/slider-form-component/SliderFormComponent.vue.d.ts +3 -3
  39. package/dist/components/ui/badge/Badge.vue.d.ts +24 -0
  40. package/dist/components/ui/badge/index.d.ts +6 -0
  41. package/dist/components/ui/button/index.d.ts +1 -1
  42. package/dist/components/ui/dialog/DialogContent.vue.d.ts +1 -4
  43. package/dist/components/ui/popover/PopoverContent.vue.d.ts +1 -1
  44. package/dist/confirm-dialog.js +13 -19
  45. package/dist/dashboard-shell.js +10 -3
  46. package/dist/date-picker.js +6 -15
  47. package/dist/dialog.js +6 -14
  48. package/dist/error-page.js +113 -0
  49. package/dist/landing.js +239 -0
  50. package/dist/message-dialog.js +22 -54
  51. package/dist/message-toast.js +103 -0
  52. package/dist/native-select.js +1 -1
  53. package/dist/select.js +17 -16
  54. package/dist/sheet.js +2 -3
  55. package/dist/sidebar.js +3 -13
  56. package/dist/style.css +378 -67
  57. package/package.json +19 -2
  58. package/dist/DialogClose-DDtZ0Em0.js +0 -36
  59. package/dist/check-iejznCzf.js +0 -11
  60. package/dist/chevron-down-DP-oz-sL.js +0 -13
  61. package/dist/createLucideIcon-CCMB2vDW.js +0 -130
  62. package/dist/info-DZrSmi42.js +0 -15
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, openBlock, createBlock, unref, withCtx, createVNode, renderSlot, createCommentVNode, createElementBlock, Fragment, renderList, createTextVNode, toDisplayString, resolveDynamicComponent, mergeProps, createElementVNode, normalizeClass } from "vue";
2
- import { B as BackgroundGrid } from "./BackgroundGrid-Cxvbtefm.js";
2
+ import { B as BackgroundGrid } from "./BackgroundGrid-BJDDcLzF.js";
3
3
  import { _ as _sfc_main$e } from "./Separator.vue_vue_type_script_setup_true_lang-CMRkdntA.js";
4
4
  import { SidebarProvider as _sfc_main$1, Sidebar as _sfc_main$2, SidebarHeader as _sfc_main$3, SidebarContent as _sfc_main$4, SidebarGroup as _sfc_main$5, SidebarGroupLabel as _sfc_main$6, SidebarGroupContent as _sfc_main$7, SidebarMenu as _sfc_main$8, SidebarMenuItem as _sfc_main$9, SidebarMenuButton as _sfc_main$a, SidebarFooter as _sfc_main$b, SidebarInset as _sfc_main$c, SidebarTrigger as _sfc_main$d } from "./sidebar.js";
5
5
  import { c as cn } from "./utils-Bz4m9VPB.js";
@@ -33,10 +33,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
33
33
  setup(__props) {
34
34
  const props = __props;
35
35
  const getSidebarItemLinkProps = (item) => {
36
+ const sharedProps = item.newTab ? { target: "_blank", rel: "noopener noreferrer" } : {};
36
37
  if (props.sidebarLinkComponent === "a") {
37
- return { href: item.href ?? "#" };
38
+ return {
39
+ href: item.href ?? "#",
40
+ ...sharedProps
41
+ };
38
42
  }
39
- return { to: item.to ?? item.href ?? "/" };
43
+ return {
44
+ to: item.to ?? item.href ?? "/",
45
+ ...sharedProps
46
+ };
40
47
  };
41
48
  return (_ctx, _cache) => {
42
49
  return openBlock(), createBlock(unref(_sfc_main$1), null, {
@@ -1,21 +1,9 @@
1
1
  import { defineComponent, ref, computed, openBlock, createBlock, unref, withCtx, createVNode, normalizeClass, createTextVNode, toDisplayString } from "vue";
2
- import { $ as $14e0f24ef4ac5c92$export$d0bdf45af03a6ea3, l as $14e0f24ef4ac5c92$export$aa8b41735afcabd2, m as $fb18d541ea1ad717$export$ad991b66133851cf, _ as _sfc_main$5 } from "./CalendarPrevButton.vue_vue_type_script_setup_true_lang-Dqz6DIGp.js";
2
+ import { $ as $14e0f24ef4ac5c92$export$d0bdf45af03a6ea3, l as $14e0f24ef4ac5c92$export$aa8b41735afcabd2, m as $fb18d541ea1ad717$export$ad991b66133851cf, _ as _sfc_main$5 } from "./CalendarPrevButton.vue_vue_type_script_setup_true_lang-BA4Aw_Sl.js";
3
+ import { H as HugeiconsIcon, c as cL } from "./HugeiconsIcon.vue-CurGbgrJ.js";
3
4
  import { c as cn } from "./utils-Bz4m9VPB.js";
4
5
  import { Button as _sfc_main$3 } from "./button.js";
5
6
  import { _ as _sfc_main$1, a as _sfc_main$2, b as _sfc_main$4 } from "./PopoverTrigger.vue_vue_type_script_setup_true_lang-DFZJvU_P.js";
6
- import { c as createLucideIcon } from "./createLucideIcon-CCMB2vDW.js";
7
- /**
8
- * @license lucide-vue-next v1.0.0 - ISC
9
- *
10
- * This source code is licensed under the ISC license.
11
- * See the LICENSE file in the root directory of this source tree.
12
- */
13
- const Calendar = createLucideIcon("calendar", [
14
- ["path", { d: "M8 2v4", key: "1cmpym" }],
15
- ["path", { d: "M16 2v4", key: "4m81vk" }],
16
- ["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
17
- ["path", { d: "M3 10h18", key: "8toen8" }]
18
- ]);
19
7
  const _sfc_main = /* @__PURE__ */ defineComponent({
20
8
  __name: "DatePicker",
21
9
  props: {
@@ -55,7 +43,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
55
43
  class: normalizeClass(unref(cn)("w-[240px] justify-start text-left font-normal", !date.value && "text-muted-foreground", props.class))
56
44
  }, {
57
45
  default: withCtx(() => [
58
- createVNode(unref(Calendar), { class: "size-4" }),
46
+ createVNode(unref(HugeiconsIcon), {
47
+ icon: unref(cL),
48
+ class: "size-4"
49
+ }, null, 8, ["icon"]),
59
50
  createTextVNode(" " + toDisplayString(date.value ? unref(formatter).format(date.value.toDate(unref($14e0f24ef4ac5c92$export$aa8b41735afcabd2)())) : _ctx.placeholder), 1)
60
51
  ]),
61
52
  _: 1
package/dist/dialog.js CHANGED
@@ -1,13 +1,12 @@
1
- import { _, a, b, c, d, e } from "./DialogTitle.vue_vue_type_script_setup_true_lang-83YQbiAn.js";
2
- import { defineComponent, openBlock, createBlock, unref, mergeProps, withCtx, renderSlot, createElementBlock, normalizeClass, createVNode, createTextVNode, createCommentVNode, createElementVNode } from "vue";
3
- import { D as DialogClose_default } from "./DialogClose-DDtZ0Em0.js";
1
+ import { _, a, b, c, d, e } from "./DialogTitle.vue_vue_type_script_setup_true_lang-BG4dvMRo.js";
2
+ import { defineComponent, openBlock, createBlock, unref, mergeProps, withCtx, renderSlot, createElementBlock, normalizeClass, createVNode, createTextVNode, createCommentVNode } from "vue";
3
+ import { D as DialogClose_default, a as DialogTrigger_default } from "./DialogTrigger-BQbSAHMb.js";
4
4
  import { c as cn } from "./utils-Bz4m9VPB.js";
5
5
  import { Button as _sfc_main$4 } from "./button.js";
6
6
  import { u as useForwardPropsEmits } from "./useForwardPropsEmits-DmumnZO5.js";
7
7
  import { D as DialogOverlay_default, a as DialogContent_default } from "./DialogTitle-CLuntLBB.js";
8
- import { D as DialogPortal_default, X } from "./DialogPortal-BTVR2QvT.js";
8
+ import { D as DialogPortal_default } from "./DialogPortal-D81oXsCY.js";
9
9
  import { r as reactiveOmit } from "./index-qGMU40e1.js";
10
- import { D as DialogTrigger_default } from "./DialogTrigger-CjJ8QNL_.js";
11
10
  const _sfc_main$3 = /* @__PURE__ */ defineComponent({
12
11
  __name: "DialogClose",
13
12
  props: {
@@ -37,7 +36,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
37
36
  return (_ctx, _cache) => {
38
37
  return openBlock(), createElementBlock("div", {
39
38
  "data-slot": "dialog-footer",
40
- class: normalizeClass(unref(cn)("flex flex-col-reverse gap-3 border-t border-border px-5 py-4 sm:flex-row-reverse sm:px-6", props.class))
39
+ class: normalizeClass(unref(cn)("flex flex-col-reverse gap-3 border-t border-border pt-4 sm:flex-row-reverse", props.class))
41
40
  }, [
42
41
  renderSlot(_ctx.$slots, "default"),
43
42
  _ctx.showCloseButton ? (openBlock(), createBlock(unref(DialogClose_default), {
@@ -96,14 +95,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
96
95
  })
97
96
  }), {
98
97
  default: withCtx(() => [
99
- renderSlot(_ctx.$slots, "default"),
100
- createVNode(unref(DialogClose_default), { class: "absolute top-4 right-4 rounded border border-border bg-card p-1 text-muted-foreground transition-all duration-200 hover:bg-accent hover:text-foreground" }, {
101
- default: withCtx(() => [
102
- createVNode(unref(X), { class: "w-4 h-4" }),
103
- _cache[1] || (_cache[1] = createElementVNode("span", { class: "sr-only" }, "Close", -1))
104
- ]),
105
- _: 1
106
- })
98
+ renderSlot(_ctx.$slots, "default")
107
99
  ]),
108
100
  _: 3
109
101
  }, 16, ["class"])
@@ -0,0 +1,113 @@
1
+ import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, unref, createBlock, createCommentVNode, createElementVNode, renderSlot, createVNode, withCtx, toDisplayString, createTextVNode } from "vue";
2
+ import { H as HugeiconsIcon, m as mn } from "./HugeiconsIcon.vue-CurGbgrJ.js";
3
+ import { B as BackgroundGrid } from "./BackgroundGrid-BJDDcLzF.js";
4
+ import { Button as _sfc_main$4 } from "./button.js";
5
+ import { _ as _sfc_main$1 } from "./Card.vue_vue_type_script_setup_true_lang-6ol3rxy1.js";
6
+ import { _ as _sfc_main$2, a as _sfc_main$3 } from "./CardFooter.vue_vue_type_script_setup_true_lang-B1eS9wge.js";
7
+ import { c as cn } from "./utils-Bz4m9VPB.js";
8
+ const _hoisted_1 = { class: "relative z-10 mx-auto flex min-h-screen w-full max-w-6xl items-center justify-center px-4 py-10 sm:px-6 lg:px-8" };
9
+ const _hoisted_2 = { class: "w-full max-w-xl" };
10
+ const _hoisted_3 = {
11
+ key: 0,
12
+ class: "mb-4 flex justify-end gap-3"
13
+ };
14
+ const _hoisted_4 = { class: "text-sm font-semibold uppercase tracking-[0.24em] text-[var(--button-primary-light)] dark:text-[var(--button-primary-dark)]" };
15
+ const _hoisted_5 = { class: "mt-3 text-2xl font-bold" };
16
+ const _hoisted_6 = { class: "mt-4 text-sm leading-7 text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)] sm:text-base" };
17
+ const _sfc_main = /* @__PURE__ */ defineComponent({
18
+ __name: "ErrorPage",
19
+ props: {
20
+ statusCode: { default: 500 },
21
+ label: { default: "Error" },
22
+ title: { default: void 0 },
23
+ message: { default: void 0 },
24
+ actionLabel: { default: "Go back" },
25
+ showBackground: { type: Boolean, default: true },
26
+ showDefaultAction: { type: Boolean, default: true },
27
+ class: { default: void 0 },
28
+ cardClass: { default: void 0 },
29
+ contentClass: { default: void 0 },
30
+ footerClass: { default: void 0 }
31
+ },
32
+ emits: ["action"],
33
+ setup(__props, { emit: __emit }) {
34
+ const props = __props;
35
+ const emit = __emit;
36
+ const resolvedStatusCode = computed(() => String(props.statusCode ?? 500));
37
+ const resolvedTitle = computed(() => {
38
+ if (props.title) return props.title;
39
+ if (resolvedStatusCode.value === "404") return "Page not found";
40
+ return "Something went wrong";
41
+ });
42
+ const resolvedMessage = computed(() => {
43
+ if (props.message) return props.message;
44
+ if (resolvedStatusCode.value === "404") return "The page you requested could not be found or may have been moved.";
45
+ return "An unexpected error interrupted the current flow. Please try again or go back to a safe page.";
46
+ });
47
+ const handleAction = () => {
48
+ emit("action");
49
+ };
50
+ return (_ctx, _cache) => {
51
+ return openBlock(), createElementBlock("div", {
52
+ class: normalizeClass(unref(cn)("relative min-h-screen bg-[var(--bg-main-light)] text-[var(--text-primary-light)] dark:bg-[var(--bg-main-dark)] dark:text-[var(--text-primary-dark)]", props.class))
53
+ }, [
54
+ props.showBackground ? (openBlock(), createBlock(BackgroundGrid, { key: 0 })) : createCommentVNode("", true),
55
+ createElementVNode("main", _hoisted_1, [
56
+ createElementVNode("div", _hoisted_2, [
57
+ _ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_3, [
58
+ renderSlot(_ctx.$slots, "toolbar")
59
+ ])) : createCommentVNode("", true),
60
+ createVNode(unref(_sfc_main$1), {
61
+ class: normalizeClass(props.cardClass)
62
+ }, {
63
+ default: withCtx(() => [
64
+ createVNode(unref(_sfc_main$2), {
65
+ class: normalizeClass(unref(cn)("space-y-8", props.contentClass))
66
+ }, {
67
+ default: withCtx(() => [
68
+ renderSlot(_ctx.$slots, "brand"),
69
+ createElementVNode("div", null, [
70
+ createElementVNode("div", _hoisted_4, toDisplayString(props.label) + " " + toDisplayString(resolvedStatusCode.value), 1),
71
+ createElementVNode("h1", _hoisted_5, toDisplayString(resolvedTitle.value), 1),
72
+ createElementVNode("p", _hoisted_6, toDisplayString(resolvedMessage.value), 1)
73
+ ])
74
+ ]),
75
+ _: 3
76
+ }, 8, ["class"]),
77
+ createVNode(unref(_sfc_main$3), {
78
+ class: normalizeClass(unref(cn)("items-start flex-col gap-3 sm:flex-row sm:items-center", props.footerClass))
79
+ }, {
80
+ default: withCtx(() => [
81
+ renderSlot(_ctx.$slots, "actions", { onAction: handleAction }, () => [
82
+ props.showDefaultAction ? (openBlock(), createBlock(unref(_sfc_main$4), {
83
+ key: 0,
84
+ variant: "default",
85
+ onClick: handleAction
86
+ }, {
87
+ default: withCtx(() => [
88
+ createVNode(unref(HugeiconsIcon), {
89
+ icon: unref(mn),
90
+ "stroke-width": 1.8,
91
+ class: "size-4"
92
+ }, null, 8, ["icon"]),
93
+ createTextVNode(" " + toDisplayString(props.actionLabel), 1)
94
+ ]),
95
+ _: 1
96
+ })) : createCommentVNode("", true)
97
+ ])
98
+ ]),
99
+ _: 3
100
+ }, 8, ["class"])
101
+ ]),
102
+ _: 3
103
+ }, 8, ["class"])
104
+ ])
105
+ ])
106
+ ], 2);
107
+ };
108
+ }
109
+ });
110
+ export {
111
+ _sfc_main as ErrorPage,
112
+ _sfc_main as default
113
+ };
@@ -0,0 +1,239 @@
1
+ import { defineComponent, openBlock, createElementBlock, normalizeClass, unref, createElementVNode, renderSlot, useSlots, computed, createBlock, createCommentVNode, Fragment, toDisplayString, renderList, resolveDynamicComponent, mergeProps, withCtx, createTextVNode } from "vue";
2
+ import { c as cn } from "./utils-Bz4m9VPB.js";
3
+ import { B as BackgroundGrid } from "./BackgroundGrid-BJDDcLzF.js";
4
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
5
+ __name: "LandingNavbar",
6
+ props: {
7
+ class: {},
8
+ containerClass: {},
9
+ leftClass: {},
10
+ rightClass: {}
11
+ },
12
+ setup(__props) {
13
+ const props = __props;
14
+ return (_ctx, _cache) => {
15
+ return openBlock(), createElementBlock("header", {
16
+ class: normalizeClass(unref(cn)("z-30 flex h-20 w-full flex-wrap sm:flex-nowrap sm:justify-start", props.class))
17
+ }, [
18
+ createElementVNode("nav", {
19
+ class: normalizeClass(unref(cn)("mx-auto flex max-w-6xl basis-full items-center justify-between px-3 sm:px-6 lg:px-8", props.containerClass))
20
+ }, [
21
+ createElementVNode("div", {
22
+ class: normalizeClass(unref(cn)("flex items-center", props.leftClass))
23
+ }, [
24
+ renderSlot(_ctx.$slots, "left")
25
+ ], 2),
26
+ createElementVNode("div", {
27
+ class: normalizeClass(unref(cn)("flex items-center justify-end gap-3", props.rightClass))
28
+ }, [
29
+ renderSlot(_ctx.$slots, "right")
30
+ ], 2)
31
+ ], 2)
32
+ ], 2);
33
+ };
34
+ }
35
+ });
36
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
37
+ __name: "LandingContent",
38
+ props: {
39
+ class: {},
40
+ containerClass: {}
41
+ },
42
+ setup(__props) {
43
+ const props = __props;
44
+ return (_ctx, _cache) => {
45
+ return openBlock(), createElementBlock("main", {
46
+ class: normalizeClass(unref(cn)("relative z-10 flex-1", props.class))
47
+ }, [
48
+ createElementVNode("div", {
49
+ class: normalizeClass(unref(cn)("mx-auto w-full max-w-6xl px-3 py-6 sm:px-6 lg:px-8 lg:py-14", props.containerClass))
50
+ }, [
51
+ renderSlot(_ctx.$slots, "default")
52
+ ], 2)
53
+ ], 2);
54
+ };
55
+ }
56
+ });
57
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
58
+ __name: "LandingShell",
59
+ props: {
60
+ showBackground: { type: Boolean, default: true },
61
+ rootClass: {},
62
+ navbarClass: {},
63
+ mainClass: {},
64
+ contentContainerClass: {},
65
+ footerClass: {}
66
+ },
67
+ setup(__props) {
68
+ const props = __props;
69
+ const slots = useSlots();
70
+ const hasStructuredSlots = computed(() => {
71
+ return Boolean(slots.navbar || slots.content || slots.footer);
72
+ });
73
+ return (_ctx, _cache) => {
74
+ return openBlock(), createElementBlock("div", {
75
+ class: normalizeClass(unref(cn)("relative flex min-h-screen flex-col bg-background text-foreground", props.rootClass))
76
+ }, [
77
+ props.showBackground ? (openBlock(), createBlock(BackgroundGrid, { key: 0 })) : createCommentVNode("", true),
78
+ hasStructuredSlots.value ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
79
+ createElementVNode("header", {
80
+ class: normalizeClass(unref(cn)("relative z-10", props.navbarClass))
81
+ }, [
82
+ renderSlot(_ctx.$slots, "navbar")
83
+ ], 2),
84
+ createElementVNode("main", {
85
+ class: normalizeClass(unref(cn)("relative z-10 flex-1", props.mainClass))
86
+ }, [
87
+ createElementVNode("div", {
88
+ class: normalizeClass(unref(cn)("mx-auto w-full max-w-6xl px-3 py-6 sm:px-6 lg:px-8 lg:py-14", props.contentContainerClass))
89
+ }, [
90
+ renderSlot(_ctx.$slots, "content", {}, () => [
91
+ renderSlot(_ctx.$slots, "default")
92
+ ])
93
+ ], 2)
94
+ ], 2),
95
+ createElementVNode("footer", {
96
+ class: normalizeClass(unref(cn)("relative z-10", props.footerClass))
97
+ }, [
98
+ renderSlot(_ctx.$slots, "footer")
99
+ ], 2)
100
+ ], 64)) : renderSlot(_ctx.$slots, "default", { key: 2 })
101
+ ], 2);
102
+ };
103
+ }
104
+ });
105
+ const _hoisted_1 = { class: "grid grid-cols-1 gap-8 md:grid-cols-4" };
106
+ const _hoisted_2 = { class: "mb-4 text-lg font-semibold tracking-tight text-foreground" };
107
+ const _hoisted_3 = {
108
+ key: 0,
109
+ class: "max-w-sm text-sm leading-relaxed text-muted-foreground"
110
+ };
111
+ const _hoisted_4 = { class: "md:text-right" };
112
+ const _hoisted_5 = { class: "mb-4 font-semibold text-foreground" };
113
+ const _hoisted_6 = { class: "space-y-3 text-sm" };
114
+ const _hoisted_7 = { class: "mb-4 font-semibold text-foreground" };
115
+ const _hoisted_8 = { class: "space-y-3 text-sm" };
116
+ const _hoisted_9 = { key: 0 };
117
+ const _hoisted_10 = ["href"];
118
+ const _sfc_main = /* @__PURE__ */ defineComponent({
119
+ __name: "LandingFooter",
120
+ props: {
121
+ appName: {},
122
+ appDescription: { default: "" },
123
+ sections: { default: () => [] },
124
+ linkComponent: { default: "a" },
125
+ copyrightName: { default: "" },
126
+ allRightsReservedText: { default: "All rights reserved." },
127
+ madeByText: { default: "" },
128
+ madeByName: { default: "" },
129
+ madeByLink: { default: "" },
130
+ year: { default: () => (/* @__PURE__ */ new Date()).getFullYear() },
131
+ showBottomBar: { type: Boolean, default: true },
132
+ class: {},
133
+ containerClass: {},
134
+ brandClass: {},
135
+ sectionsClass: {},
136
+ bottomBarClass: {}
137
+ },
138
+ setup(__props) {
139
+ const props = __props;
140
+ const resolvedCopyrightName = computed(() => props.copyrightName || props.appName);
141
+ const getLinkProps = (link) => {
142
+ const sharedProps = link.newTab ? { target: "_blank", rel: "noopener noreferrer" } : {};
143
+ if (props.linkComponent === "a") {
144
+ return {
145
+ href: link.href ?? "#",
146
+ ...sharedProps
147
+ };
148
+ }
149
+ return {
150
+ to: link.to ?? link.href ?? "/",
151
+ ...sharedProps
152
+ };
153
+ };
154
+ return (_ctx, _cache) => {
155
+ var _a, _b, _c;
156
+ return openBlock(), createElementBlock("footer", {
157
+ class: normalizeClass(unref(cn)("relative z-10 border-t border-border bg-card", props.class))
158
+ }, [
159
+ createElementVNode("div", {
160
+ class: normalizeClass(unref(cn)("mx-auto max-w-7xl px-4 py-12 sm:px-6 lg:px-8", props.containerClass))
161
+ }, [
162
+ createElementVNode("div", _hoisted_1, [
163
+ createElementVNode("div", {
164
+ class: normalizeClass(unref(cn)("col-span-1 md:col-span-2", props.brandClass))
165
+ }, [
166
+ createElementVNode("div", _hoisted_2, toDisplayString(props.appName), 1),
167
+ props.appDescription ? (openBlock(), createElementBlock("p", _hoisted_3, toDisplayString(props.appDescription), 1)) : createCommentVNode("", true)
168
+ ], 2),
169
+ ((_a = props.sections) == null ? void 0 : _a.length) === 1 ? (openBlock(), createElementBlock("div", {
170
+ key: 0,
171
+ class: normalizeClass(unref(cn)("min-w-0 md:col-span-2 md:flex md:justify-end", props.sectionsClass))
172
+ }, [
173
+ createElementVNode("div", _hoisted_4, [
174
+ createElementVNode("h3", _hoisted_5, toDisplayString((_b = props.sections[0]) == null ? void 0 : _b.title), 1),
175
+ createElementVNode("ul", _hoisted_6, [
176
+ (openBlock(true), createElementBlock(Fragment, null, renderList((_c = props.sections[0]) == null ? void 0 : _c.links, (link) => {
177
+ return openBlock(), createElementBlock("li", {
178
+ key: link.id
179
+ }, [
180
+ (openBlock(), createBlock(resolveDynamicComponent(props.linkComponent), mergeProps({ ref_for: true }, getLinkProps(link), { class: "text-muted-foreground transition-colors duration-200 hover:text-foreground" }), {
181
+ default: withCtx(() => [
182
+ createTextVNode(toDisplayString(link.label), 1)
183
+ ]),
184
+ _: 2
185
+ }, 1040))
186
+ ]);
187
+ }), 128))
188
+ ])
189
+ ])
190
+ ], 2)) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(props.sections, (section) => {
191
+ return openBlock(), createElementBlock("div", {
192
+ key: section.id,
193
+ class: normalizeClass(unref(cn)("min-w-0", props.sectionsClass))
194
+ }, [
195
+ createElementVNode("h3", _hoisted_7, toDisplayString(section.title), 1),
196
+ createElementVNode("ul", _hoisted_8, [
197
+ (openBlock(true), createElementBlock(Fragment, null, renderList(section.links, (link) => {
198
+ return openBlock(), createElementBlock("li", {
199
+ key: link.id
200
+ }, [
201
+ (openBlock(), createBlock(resolveDynamicComponent(props.linkComponent), mergeProps({ ref_for: true }, getLinkProps(link), { class: "text-muted-foreground transition-colors duration-200 hover:text-foreground" }), {
202
+ default: withCtx(() => [
203
+ createTextVNode(toDisplayString(link.label), 1)
204
+ ]),
205
+ _: 2
206
+ }, 1040))
207
+ ]);
208
+ }), 128))
209
+ ])
210
+ ], 2);
211
+ }), 128))
212
+ ]),
213
+ props.showBottomBar ? (openBlock(), createElementBlock("div", {
214
+ key: 0,
215
+ class: normalizeClass(unref(cn)("mt-12 flex flex-col items-center justify-between gap-4 border-t border-border pt-8 text-sm text-muted-foreground md:flex-row", props.bottomBarClass))
216
+ }, [
217
+ createElementVNode("div", null, " © " + toDisplayString(props.year) + " " + toDisplayString(resolvedCopyrightName.value) + ". " + toDisplayString(props.allRightsReservedText), 1),
218
+ props.madeByText && props.madeByName && props.madeByLink ? (openBlock(), createElementBlock("div", _hoisted_9, [
219
+ createTextVNode(toDisplayString(props.madeByText) + " ", 1),
220
+ createElementVNode("a", {
221
+ href: props.madeByLink,
222
+ target: "_blank",
223
+ rel: "noopener noreferrer",
224
+ class: "font-medium text-foreground hover:underline"
225
+ }, toDisplayString(props.madeByName), 9, _hoisted_10)
226
+ ])) : createCommentVNode("", true)
227
+ ], 2)) : createCommentVNode("", true)
228
+ ], 2)
229
+ ], 2);
230
+ };
231
+ }
232
+ });
233
+ export {
234
+ _sfc_main$2 as LandingContent,
235
+ _sfc_main as LandingFooter,
236
+ _sfc_main$3 as LandingNavbar,
237
+ _sfc_main$1 as LandingShell,
238
+ _sfc_main$3 as default
239
+ };
@@ -1,20 +1,7 @@
1
1
  import { reactive, render, h, markRaw, defineComponent, computed, openBlock, createBlock, unref, withCtx, createElementVNode, normalizeClass, resolveDynamicComponent, createVNode, createTextVNode, toDisplayString, createCommentVNode } from "vue";
2
+ import { A as AE, $ as $o, T as TWr, H as HugeiconsIcon } from "./HugeiconsIcon.vue-CurGbgrJ.js";
2
3
  import { _ as _sfc_main$1, a as _sfc_main$2, b as _sfc_main$3, c as _sfc_main$4, d as _sfc_main$5, e as _sfc_main$6 } from "./AlertDialogTitle.vue_vue_type_script_setup_true_lang-Ca0g2mVz.js";
3
4
  import { Button as _sfc_main$7 } from "./button.js";
4
- import { I as Info } from "./info-DZrSmi42.js";
5
- import { c as createLucideIcon } from "./createLucideIcon-CCMB2vDW.js";
6
- import { C as Check } from "./check-iejznCzf.js";
7
- /**
8
- * @license lucide-vue-next v1.0.0 - ISC
9
- *
10
- * This source code is licensed under the ISC license.
11
- * See the LICENSE file in the root directory of this source tree.
12
- */
13
- const CircleAlert = createLucideIcon("circle-alert", [
14
- ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
15
- ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
16
- ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
17
- ]);
18
5
  const messageDialogQueue = [];
19
6
  let nextMessageDialogId = 0;
20
7
  const DIALOG_CLOSE_DURATION_MS = 300;
@@ -84,17 +71,13 @@ const scheduleCloseCurrentMessageDialog = () => {
84
71
  };
85
72
  const closeMessageDialog = () => {
86
73
  const current = messageDialogState.current;
87
- if (!current || !messageDialogState.isOpen) {
88
- return;
89
- }
74
+ if (!current || !messageDialogState.isOpen) return;
90
75
  current.resolve();
91
76
  scheduleCloseCurrentMessageDialog();
92
77
  };
93
78
  const resolveActiveMessageDialog = () => {
94
79
  const current = messageDialogState.current;
95
- if (!current || messageDialogState.busy) {
96
- return;
97
- }
80
+ if (!current || messageDialogState.busy) return;
98
81
  current.resolve();
99
82
  scheduleCloseCurrentMessageDialog();
100
83
  };
@@ -121,46 +104,25 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
121
104
  __name: "MessageDialog",
122
105
  setup(__props) {
123
106
  const currentDialog = computed(() => messageDialogState.current);
124
- const messageIcon = computed(() => {
107
+ const defaultMessageIcon = computed(() => {
125
108
  const current = currentDialog.value;
126
- if (!current) {
127
- return Info;
128
- }
129
- if (current.options.icon) {
130
- return current.options.icon;
131
- }
132
- if (current.options.type === "Error") {
133
- return CircleAlert;
134
- }
135
- if (current.options.type === "Success") {
136
- return Check;
137
- }
138
- return Info;
109
+ if (!current) return AE;
110
+ if (current.options.type === "Error") return $o;
111
+ if (current.options.type === "Success") return TWr;
112
+ return AE;
139
113
  });
140
114
  const messageIconClasses = computed(() => {
141
115
  const current = currentDialog.value;
142
- if (!current) {
143
- return "border-[var(--border)] bg-[var(--bg-surface-light)] dark:bg-[var(--bg-surface-dark)]";
144
- }
145
- if (current.options.type === "Error") {
146
- return "border-red-200 bg-red-50 dark:border-red-900/50 dark:bg-red-950/30";
147
- }
148
- if (current.options.type === "Success") {
149
- return "border-green-200 bg-green-50 dark:border-green-900/50 dark:bg-green-950/30";
150
- }
116
+ if (!current) return "border-[var(--border)] bg-[var(--bg-surface-light)] dark:bg-[var(--bg-surface-dark)]";
117
+ if (current.options.type === "Error") return "border-red-200 bg-red-50 dark:border-red-900/50 dark:bg-red-950/30";
118
+ if (current.options.type === "Success") return "border-green-200 bg-green-50 dark:border-green-900/50 dark:bg-green-950/30";
151
119
  return "border-[var(--border)] bg-[var(--bg-surface-light)] dark:bg-[var(--bg-surface-dark)]";
152
120
  });
153
121
  const messageGlyphClasses = computed(() => {
154
122
  const current = currentDialog.value;
155
- if (!current) {
156
- return "text-blue-600";
157
- }
158
- if (current.options.type === "Error") {
159
- return "text-red-600";
160
- }
161
- if (current.options.type === "Success") {
162
- return "text-green-600";
163
- }
123
+ if (!current) return "text-blue-600";
124
+ if (current.options.type === "Error") return "text-red-600";
125
+ if (current.options.type === "Success") return "text-green-600";
164
126
  return "text-blue-600";
165
127
  });
166
128
  const handleOpenChange = (open) => {
@@ -181,10 +143,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
181
143
  createElementVNode("div", {
182
144
  class: normalizeClass(["flex size-12 shrink-0 self-center items-center justify-center rounded border sm:size-10 sm:self-start", messageIconClasses.value])
183
145
  }, [
184
- (openBlock(), createBlock(resolveDynamicComponent(messageIcon.value), {
146
+ currentDialog.value.options.icon ? (openBlock(), createBlock(resolveDynamicComponent(currentDialog.value.options.icon), {
147
+ key: 0,
148
+ "stroke-width": 1.8,
149
+ class: normalizeClass(["size-6", messageGlyphClasses.value])
150
+ }, null, 8, ["class"])) : (openBlock(), createBlock(unref(HugeiconsIcon), {
151
+ key: 1,
152
+ icon: defaultMessageIcon.value,
185
153
  "stroke-width": 1.8,
186
154
  class: normalizeClass(["size-6", messageGlyphClasses.value])
187
- }, null, 8, ["class"]))
155
+ }, null, 8, ["icon", "class"]))
188
156
  ], 2),
189
157
  createVNode(unref(_sfc_main$3), { class: "sm:pt-0" }, {
190
158
  default: withCtx(() => [