@robuust-digital/vue-components 2.6.4 → 2.6.6

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ ## 2.6.6 (06-05-2026)
2
+
3
+ ### Fixed
4
+
5
+ * `Dialogs`: Detect Inertia `Form` components in dialog `isForm` handling so submit actions behave like native forms
6
+
7
+ ## 2.6.5 (05-05-2026)
8
+
9
+ ### Added
10
+
11
+ * `Dropdown`: Added open-state synchronization and external close support for coordinating sibling dropdowns
12
+
13
+ ### Updated
14
+
15
+ * `Dropdown` docs: Documented open-state synchronization and the Headless UI programmatic open limitation
16
+
17
+ ### Fixed
18
+
19
+ * `Build`: Pin TypeScript to a compatible version so declaration files are generated non-empty again
20
+
1
21
  ## 2.6.4 (20-04-2026)
2
22
 
3
23
  ### Added
@@ -1,7 +1,7 @@
1
1
  import { defineComponent as E, openBlock as v, createBlock as k, unref as e, withCtx as d, createVNode as s, withModifiers as T, createElementVNode as o, normalizeClass as m, renderSlot as i, createElementBlock as p, createTextVNode as F, toDisplayString as L, createCommentVNode as g } from "vue";
2
2
  import { TransitionRoot as I, Dialog as N, TransitionChild as C, DialogPanel as R, DialogTitle as u } from "@headlessui/vue";
3
3
  import { _ as $ } from "./ButtonBase.vue_vue_type_script_setup_true_lang-ZYVNEyNx.js";
4
- import { u as V } from "./Modal.vue_vue_type_script_setup_true_lang-MN3D46CX.js";
4
+ import { u as V } from "./Modal.vue_vue_type_script_setup_true_lang-CdMsCCBi.js";
5
5
  import { r as B } from "./XMarkIcon-CPr_Rd8y.js";
6
6
  const A = {
7
7
  class: "rvc-drawer-presentation",
@@ -0,0 +1,150 @@
1
+ import { openBlock as r, createElementBlock as k, createElementVNode as D, defineComponent as w, watch as b, createBlock as d, unref as o, normalizeClass as g, withCtx as s, createVNode as i, renderSlot as c, mergeProps as B, Transition as A, Fragment as L, renderList as N, resolveDynamicComponent as y, createCommentVNode as O, createTextVNode as V, toDisplayString as x } from "vue";
2
+ import { Menu as I, MenuButton as C, MenuItems as Z, MenuItem as h } from "@headlessui/vue";
3
+ import { _ as q } from "./ButtonBase.vue_vue_type_script_setup_true_lang-ZYVNEyNx.js";
4
+ function E(t, u) {
5
+ return r(), k("svg", {
6
+ xmlns: "http://www.w3.org/2000/svg",
7
+ viewBox: "0 0 20 20",
8
+ fill: "currentColor",
9
+ "aria-hidden": "true",
10
+ "data-slot": "icon"
11
+ }, [
12
+ D("path", { d: "M10 3a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM10 8.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM11.5 15.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0Z" })
13
+ ]);
14
+ }
15
+ const z = /* @__PURE__ */ w({
16
+ inheritAttrs: !1,
17
+ __name: "Dropdown",
18
+ props: {
19
+ items: {},
20
+ alignLeft: { type: Boolean, default: !1 },
21
+ fullWidth: { type: Boolean, default: !1 },
22
+ label: { default: "Options" },
23
+ open: { type: [Boolean, null], default: null },
24
+ rootClass: { default: "" }
25
+ },
26
+ emits: ["dropdown:click", "update:open"],
27
+ setup(t, { emit: u }) {
28
+ const m = u, M = w({
29
+ name: "DropdownMenuStateBridge",
30
+ props: {
31
+ close: {
32
+ type: Function,
33
+ required: !0
34
+ },
35
+ menuOpen: {
36
+ type: Boolean,
37
+ required: !0
38
+ },
39
+ open: {
40
+ type: Boolean,
41
+ default: null
42
+ }
43
+ },
44
+ emits: ["update:open"],
45
+ setup(n, { emit: a }) {
46
+ return b(
47
+ () => n.menuOpen,
48
+ (l) => a("update:open", l)
49
+ ), b(
50
+ () => n.open,
51
+ (l) => {
52
+ l === !1 && n.menuOpen && n.close();
53
+ }
54
+ ), () => null;
55
+ }
56
+ }), $ = (n) => {
57
+ const {
58
+ as: a,
59
+ bindAs: l,
60
+ event: p,
61
+ icon: e,
62
+ name: f,
63
+ ...v
64
+ } = n;
65
+ return v;
66
+ };
67
+ return (n, a) => (r(), d(o(I), {
68
+ as: "div",
69
+ class: g(["rvc-dropdown", t.rootClass])
70
+ }, {
71
+ default: s(({ open: l, close: p }) => [
72
+ i(o(M), {
73
+ open: t.open,
74
+ "menu-open": l,
75
+ close: p,
76
+ "onUpdate:open": a[0] || (a[0] = (e) => m("update:open", e))
77
+ }, null, 8, ["open", "menu-open", "close"]),
78
+ c(n.$slots, "button", {
79
+ label: t.label,
80
+ button: o(C)
81
+ }, () => [
82
+ i(o(C), B({
83
+ as: q,
84
+ label: t.label,
85
+ color: "light",
86
+ icon: o(E),
87
+ "icon-left": t.alignLeft
88
+ }, n.$attrs), null, 16, ["label", "icon", "icon-left"])
89
+ ]),
90
+ i(A, {
91
+ "enter-active-class": "rvc-dropdown-transition-enter",
92
+ "enter-from-class": "rvc-dropdown-transition-enter-from",
93
+ "enter-to-class": "rvc-dropdown-transition-enter-to",
94
+ "leave-active-class": "rvc-dropdown-transition-leave",
95
+ "leave-from-class": "rvc-dropdown-transition-leave-from",
96
+ "leave-to-class": "rvc-dropdown-transition-leave-to"
97
+ }, {
98
+ default: s(() => [
99
+ i(o(Z), {
100
+ class: g([
101
+ "rvc-dropdown-items",
102
+ {
103
+ "rvc-dropdown-items-left": t.alignLeft,
104
+ "rvc-dropdown-items-full": t.fullWidth
105
+ }
106
+ ])
107
+ }, {
108
+ default: s(() => [
109
+ c(n.$slots, "items", {
110
+ items: t.items,
111
+ menuItem: o(h)
112
+ }, () => [
113
+ (r(!0), k(L, null, N(t.items, (e, f) => (r(), d(o(h), {
114
+ key: `${f}-dropdown-item`,
115
+ as: "template"
116
+ }, {
117
+ default: s(() => [
118
+ c(n.$slots, "item", { item: e }, () => [
119
+ (r(), d(y(e.as ? e.as : "button"), B({ class: "rvc-dropdown-item" }, { ref_for: !0 }, $(e), {
120
+ as: e.bindAs ? e.bindAs : void 0,
121
+ onClick: (v) => (m("dropdown:click", e), e.event ? e.event() : null)
122
+ }), {
123
+ default: s(() => [
124
+ e.icon ? (r(), d(y(e.icon), {
125
+ key: 0,
126
+ class: "rvc-dropdown-item-icon"
127
+ })) : O("", !0),
128
+ V(" " + x(e.name), 1)
129
+ ]),
130
+ _: 2
131
+ }, 1040, ["as", "onClick"]))
132
+ ])
133
+ ]),
134
+ _: 2
135
+ }, 1024))), 128))
136
+ ])
137
+ ]),
138
+ _: 3
139
+ }, 8, ["class"])
140
+ ]),
141
+ _: 3
142
+ })
143
+ ]),
144
+ _: 3
145
+ }, 8, ["class"]));
146
+ }
147
+ });
148
+ export {
149
+ z as _
150
+ };
@@ -0,0 +1,203 @@
1
+ import { ref as $, computed as y, defineComponent as L, openBlock as p, createBlock as I, unref as t, withCtx as c, createVNode as i, withModifiers as N, createElementVNode as d, normalizeClass as T, renderSlot as s, createElementBlock as w, createTextVNode as h, toDisplayString as D, createCommentVNode as R } from "vue";
2
+ import { TransitionRoot as S, Dialog as V, TransitionChild as B, DialogPanel as M, DialogTitle as g } from "@headlessui/vue";
3
+ import { _ as E } from "./ButtonBase.vue_vue_type_script_setup_true_lang-ZYVNEyNx.js";
4
+ import { r as F } from "./XMarkIcon-CPr_Rd8y.js";
5
+ function A(e) {
6
+ const u = $(null), C = $(!1), a = y(() => {
7
+ if (typeof e.as == "string")
8
+ return e.as.toLowerCase() === "form";
9
+ const r = e.as, m = r.name ?? r.__name;
10
+ return (typeof m == "string" ? m.toLowerCase() : "") === "form";
11
+ }), b = y(() => `${e.id}-title`), f = y(() => `${e.id}-content`), v = y(() => u.value?.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'));
12
+ return {
13
+ contentRef: u,
14
+ ready: C,
15
+ isForm: a,
16
+ titleId: b,
17
+ descriptionId: f,
18
+ initialFocusElement: v
19
+ };
20
+ }
21
+ const H = {
22
+ role: "presentation",
23
+ class: "rvc-modal-presentation"
24
+ }, q = { class: "rvc-modal-container" }, x = {
25
+ key: 0,
26
+ class: "rvc-modal-header"
27
+ }, z = { class: "rvc-modal-header-inner" }, P = { class: "rvc-modal-close-wrapper" }, j = ["id"], G = {
28
+ key: 2,
29
+ class: "rvc-modal-footer"
30
+ }, U = /* @__PURE__ */ L({
31
+ __name: "Modal",
32
+ props: {
33
+ as: { default: "div" },
34
+ id: {},
35
+ title: {},
36
+ showClose: { type: Boolean, default: !1 },
37
+ spinning: { type: Boolean, default: !1 },
38
+ submitLabel: { default: "Confirm" },
39
+ cancelLabel: { default: "Cancel" },
40
+ panelClass: { default: "rvc-modal-panel-max-width" },
41
+ resetHeader: { type: Boolean, default: !1 },
42
+ resetFooter: { type: Boolean, default: !1 }
43
+ },
44
+ emits: ["modal:open", "modal:opened", "modal:close", "modal:save", "modal:closed"],
45
+ setup(e, { emit: u }) {
46
+ const C = e, a = u, {
47
+ contentRef: b,
48
+ ready: f,
49
+ isForm: v,
50
+ titleId: r,
51
+ descriptionId: m,
52
+ initialFocusElement: k
53
+ } = A(C);
54
+ return (n, o) => (p(), I(t(S), { as: "template" }, {
55
+ default: c(() => [
56
+ i(t(V), {
57
+ as: e.as,
58
+ class: "rvc-modal",
59
+ static: "",
60
+ "aria-modal": "true",
61
+ role: "dialog",
62
+ "initial-focus": t(k),
63
+ "aria-labelledby": t(r),
64
+ onClose: o[7] || (o[7] = (l) => a("modal:close")),
65
+ onSubmit: o[8] || (o[8] = N((l) => a("modal:save", l), ["prevent"]))
66
+ }, {
67
+ default: c(() => [
68
+ i(t(B), {
69
+ as: "template",
70
+ enter: "rvc-modal-backdrop-transition-enter",
71
+ "enter-from": "rvc-modal-backdrop-transition-enter-from",
72
+ "enter-to": "rvc-modal-backdrop-transition-enter-to",
73
+ leave: "rvc-modal-backdrop-transition-leave",
74
+ "leave-from": "rvc-modal-backdrop-transition-leave-from",
75
+ "leave-to": "rvc-modal-backdrop-transition-leave-to",
76
+ onBeforeEnter: o[0] || (o[0] = (l) => a("modal:open")),
77
+ onAfterEnter: o[1] || (o[1] = (l) => a("modal:opened"))
78
+ }, {
79
+ default: c(() => [...o[9] || (o[9] = [
80
+ d("div", {
81
+ "aria-hidden": "true",
82
+ class: "rvc-modal-backdrop"
83
+ }, null, -1)
84
+ ])]),
85
+ _: 1
86
+ }),
87
+ d("div", H, [
88
+ d("div", q, [
89
+ i(t(B), {
90
+ as: "template",
91
+ enter: "rvc-modal-transition-enter",
92
+ "enter-from": "rvc-modal-transition-enter-from",
93
+ "enter-to": "rvc-modal-transition-enter-to",
94
+ leave: "rvc-modal-transition-leave",
95
+ "leave-from": "rvc-modal-transition-leave-from",
96
+ "leave-to": "rvc-modal-transition-leave-to",
97
+ onBeforeEnter: o[5] || (o[5] = (l) => f.value = !0),
98
+ onAfterLeave: o[6] || (o[6] = (l) => (f.value = !1, a("modal:closed")))
99
+ }, {
100
+ default: c(() => [
101
+ i(t(M), {
102
+ class: T(["rvc-modal-panel", e.panelClass]),
103
+ "aria-busy": e.spinning,
104
+ "aria-describedby": t(m)
105
+ }, {
106
+ default: c(() => [
107
+ s(n.$slots, "panel", {
108
+ title: e.title,
109
+ loading: e.spinning,
110
+ isForm: t(v),
111
+ titleId: t(r),
112
+ descriptionId: t(m),
113
+ contentRef: t(b),
114
+ dialogTitle: t(g),
115
+ emitClose: () => a("modal:close"),
116
+ emitSave: (l = void 0) => a("modal:save", l)
117
+ }, () => [
118
+ e.resetHeader ? s(n.$slots, "header", { key: 1 }) : (p(), w("header", x, [
119
+ s(n.$slots, "header", {
120
+ title: e.title,
121
+ showClose: e.showClose
122
+ }, () => [
123
+ d("div", z, [
124
+ s(n.$slots, "title", {
125
+ id: t(r),
126
+ dialogTitle: t(g),
127
+ title: e.title
128
+ }, () => [
129
+ i(t(g), {
130
+ id: t(r),
131
+ class: "rvc-modal-title"
132
+ }, {
133
+ default: c(() => [
134
+ h(D(e.title), 1)
135
+ ]),
136
+ _: 1
137
+ }, 8, ["id"])
138
+ ]),
139
+ e.showClose ? s(n.$slots, "close", {
140
+ key: 0,
141
+ icon: t(F),
142
+ emitClose: () => a("modal:close")
143
+ }, () => [
144
+ d("div", P, [
145
+ d("button", {
146
+ type: "button",
147
+ class: "rvc-modal-close",
148
+ "aria-label": "Close panel",
149
+ onClick: o[2] || (o[2] = (l) => a("modal:close"))
150
+ }, [
151
+ i(t(F), { "aria-hidden": "true" })
152
+ ])
153
+ ])
154
+ ]) : R("", !0)
155
+ ])
156
+ ])
157
+ ])),
158
+ d("div", {
159
+ id: t(m),
160
+ ref_key: "contentRef",
161
+ ref: b,
162
+ class: "rvc-modal-content"
163
+ }, [
164
+ s(n.$slots, "default", { ready: t(f) })
165
+ ], 8, j),
166
+ e.resetFooter ? s(n.$slots, "footer", { key: 3 }) : (p(), w("footer", G, [
167
+ s(n.$slots, "footer", { loading: e.spinning }, () => [
168
+ i(E, {
169
+ type: t(v) ? "submit" : "button",
170
+ label: e.submitLabel,
171
+ spinning: e.spinning,
172
+ disabled: e.spinning,
173
+ onClick: o[3] || (o[3] = (l) => !t(v) && a("modal:save"))
174
+ }, null, 8, ["type", "label", "spinning", "disabled"]),
175
+ i(E, {
176
+ type: "button",
177
+ color: "light",
178
+ label: e.cancelLabel,
179
+ onClick: o[4] || (o[4] = (l) => a("modal:close"))
180
+ }, null, 8, ["label"])
181
+ ])
182
+ ]))
183
+ ])
184
+ ]),
185
+ _: 3
186
+ }, 8, ["class", "aria-busy", "aria-describedby"])
187
+ ]),
188
+ _: 3
189
+ })
190
+ ])
191
+ ])
192
+ ]),
193
+ _: 3
194
+ }, 8, ["as", "initial-focus", "aria-labelledby"])
195
+ ]),
196
+ _: 3
197
+ }));
198
+ }
199
+ });
200
+ export {
201
+ U as _,
202
+ A as u
203
+ };
@@ -3,7 +3,7 @@ import { useEditor as N, EditorContent as T } from "@tiptap/vue-3";
3
3
  import j from "@tiptap/starter-kit";
4
4
  import { _ as z } from "./Tooltip.vue_vue_type_script_setup_true_lang-B3MHy48T.js";
5
5
  import { _ as D } from "./FormInput.vue_vue_type_script_setup_true_lang-Bg7YPGyY.js";
6
- import { _ as I } from "./Modal.vue_vue_type_script_setup_true_lang-MN3D46CX.js";
6
+ import { _ as I } from "./Modal.vue_vue_type_script_setup_true_lang-CdMsCCBi.js";
7
7
  function q(n, c) {
8
8
  return s(), r("svg", {
9
9
  xmlns: "http://www.w3.org/2000/svg",
@@ -1,5 +1,5 @@
1
- import { _ as a } from "../_shared/Drawer.vue_vue_type_script_setup_true_lang-DjP68vua.js";
2
- import { _ as f } from "../_shared/Modal.vue_vue_type_script_setup_true_lang-MN3D46CX.js";
1
+ import { _ as a } from "../_shared/Drawer.vue_vue_type_script_setup_true_lang-DeAu2U_2.js";
2
+ import { _ as f } from "../_shared/Modal.vue_vue_type_script_setup_true_lang-CdMsCCBi.js";
3
3
  export {
4
4
  a as Drawer,
5
5
  f as Modal
package/dist/dialogs.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { AllowedComponentProps } from 'vue';
2
+ import { Component } from 'vue';
2
3
  import { ComponentCustomProps } from 'vue';
3
4
  import { ComponentOptionsMixin } from 'vue';
4
5
  import { ComponentProvideOptions } from 'vue';
@@ -25,7 +26,7 @@ declare const __VLS_component: DefineComponent<DrawerProps, {}, {}, {}, {}, Comp
25
26
  "onDrawer:save"?: ((event?: Event | undefined) => any) | undefined;
26
27
  "onDrawer:closed"?: (() => any) | undefined;
27
28
  }>, {
28
- as: string;
29
+ as: string | Component;
29
30
  spinning: boolean;
30
31
  showClose: boolean;
31
32
  scrolledDown: boolean;
@@ -52,7 +53,7 @@ declare const __VLS_component_2: DefineComponent<ModalProps, {}, {}, {}, {}, Com
52
53
  "onModal:save"?: ((event?: Event | undefined) => any) | undefined;
53
54
  "onModal:closed"?: (() => any) | undefined;
54
55
  }>, {
55
- as: string;
56
+ as: string | Component;
56
57
  spinning: boolean;
57
58
  showClose: boolean;
58
59
  submitLabel: string;
@@ -267,7 +268,7 @@ declare type __VLS_WithTemplateSlots_2<T, S> = T & {
267
268
  export declare const Drawer: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
268
269
 
269
270
  declare interface DrawerProps {
270
- as?: string;
271
+ as?: string | Component;
271
272
  id: string;
272
273
  title: string;
273
274
  showClose?: boolean;
@@ -284,7 +285,7 @@ declare interface DrawerProps {
284
285
  export declare const Modal: __VLS_WithTemplateSlots_2<typeof __VLS_component_2, __VLS_TemplateResult_2["slots"]>;
285
286
 
286
287
  declare interface ModalProps {
287
- as?: string;
288
+ as?: string | Component;
288
289
  id: string;
289
290
  title: string;
290
291
  showClose?: boolean;
@@ -1,4 +1,4 @@
1
- import { _ as o } from "../_shared/Dropdown.vue_vue_type_script_setup_true_lang-L_lQEUBC.js";
1
+ import { _ as o } from "../_shared/Dropdown.vue_vue_type_script_setup_true_lang-Cv3HwIyF.js";
2
2
  export {
3
3
  o as Dropdown,
4
4
  o as default
@@ -15,10 +15,13 @@ import { VNodeProps } from 'vue';
15
15
 
16
16
  declare const __VLS_component: DefineComponent<DropdownProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
17
17
  "dropdown:click": (item: DropdownItem) => any;
18
+ "update:open": (value: boolean) => any;
18
19
  }, string, PublicProps, Readonly<DropdownProps> & Readonly<{
19
20
  "onDropdown:click"?: ((item: DropdownItem) => any) | undefined;
21
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
20
22
  }>, {
21
23
  label: string;
24
+ open: boolean | null;
22
25
  rootClass: string;
23
26
  alignLeft: boolean;
24
27
  fullWidth: boolean;
@@ -137,6 +140,7 @@ declare interface DropdownProps {
137
140
  alignLeft?: boolean;
138
141
  fullWidth?: boolean;
139
142
  label?: string;
143
+ open?: boolean | null;
140
144
  rootClass?: string;
141
145
  }
142
146
 
@@ -3,11 +3,11 @@ import { _ as d } from "../_shared/ChevronDownIcon-BYWciGnh.js";
3
3
  import { _ as n } from "../_shared/ButtonBase.vue_vue_type_script_setup_true_lang-ZYVNEyNx.js";
4
4
  import { _ as h } from "../_shared/FormInput.vue_vue_type_script_setup_true_lang-Bg7YPGyY.js";
5
5
  import { _ as g } from "../_shared/Combobox.vue_vue_type_script_setup_true_lang-BwTRzqr6.js";
6
- import { _ as B } from "../_shared/Drawer.vue_vue_type_script_setup_true_lang-DjP68vua.js";
7
- import { _ as F } from "../_shared/Modal.vue_vue_type_script_setup_true_lang-MN3D46CX.js";
8
- import { _ as A } from "../_shared/Dropdown.vue_vue_type_script_setup_true_lang-L_lQEUBC.js";
6
+ import { _ as B } from "../_shared/Drawer.vue_vue_type_script_setup_true_lang-DeAu2U_2.js";
7
+ import { _ as F } from "../_shared/Modal.vue_vue_type_script_setup_true_lang-CdMsCCBi.js";
8
+ import { _ as A } from "../_shared/Dropdown.vue_vue_type_script_setup_true_lang-Cv3HwIyF.js";
9
9
  import { _ as E } from "../_shared/Lightswitch.vue_vue_type_script_setup_true_lang-hiuDVfo5.js";
10
- import { _ as S } from "../_shared/RichTextEditor.vue_vue_type_script_setup_true_lang-t14vKtCW.js";
10
+ import { _ as S } from "../_shared/RichTextEditor.vue_vue_type_script_setup_true_lang-Miebq2nL.js";
11
11
  import { _ as y } from "../_shared/Toast.vue_vue_type_script_setup_true_lang-DS6keeu7.js";
12
12
  import { _ as L } from "../_shared/Tooltip.vue_vue_type_script_setup_true_lang-B3MHy48T.js";
13
13
  export {
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { AlignedPlacement } from '@floating-ui/vue';
2
2
  import { AllowedComponentProps } from 'vue';
3
+ import { Component } from 'vue';
3
4
  import { ComponentCustomProps } from 'vue';
4
5
  import { ComponentOptionsMixin } from 'vue';
5
6
  import { ComponentProvideOptions } from 'vue';
@@ -98,7 +99,7 @@ declare const __VLS_component_13: DefineComponent<DrawerProps, {}, {}, {}, {}, C
98
99
  "onDrawer:save"?: ((event?: Event | undefined) => any) | undefined;
99
100
  "onDrawer:closed"?: (() => any) | undefined;
100
101
  }>, {
101
- as: string;
102
+ as: string | Component;
102
103
  spinning: boolean;
103
104
  showClose: boolean;
104
105
  scrolledDown: boolean;
@@ -125,7 +126,7 @@ declare const __VLS_component_14: DefineComponent<ModalProps, {}, {}, {}, {}, Co
125
126
  "onModal:save"?: ((event?: Event | undefined) => any) | undefined;
126
127
  "onModal:closed"?: (() => any) | undefined;
127
128
  }>, {
128
- as: string;
129
+ as: string | Component;
129
130
  spinning: boolean;
130
131
  showClose: boolean;
131
132
  submitLabel: string;
@@ -139,10 +140,13 @@ contentRef: HTMLDivElement;
139
140
 
140
141
  declare const __VLS_component_15: DefineComponent<DropdownProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
141
142
  "dropdown:click": (item: DropdownItem) => any;
143
+ "update:open": (value: boolean) => any;
142
144
  }, string, PublicProps, Readonly<DropdownProps> & Readonly<{
143
145
  "onDropdown:click"?: ((item: DropdownItem) => any) | undefined;
146
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
144
147
  }>, {
145
148
  label: string;
149
+ open: boolean | null;
146
150
  rootClass: string;
147
151
  alignLeft: boolean;
148
152
  fullWidth: boolean;
@@ -1215,7 +1219,7 @@ declare interface DataTableSortBy {
1215
1219
  export declare const Drawer: __VLS_WithTemplateSlots_13<typeof __VLS_component_13, __VLS_TemplateResult_13["slots"]>;
1216
1220
 
1217
1221
  declare interface DrawerProps {
1218
- as?: string;
1222
+ as?: string | Component;
1219
1223
  id: string;
1220
1224
  title: string;
1221
1225
  showClose?: boolean;
@@ -1245,6 +1249,7 @@ declare interface DropdownProps {
1245
1249
  alignLeft?: boolean;
1246
1250
  fullWidth?: boolean;
1247
1251
  label?: string;
1252
+ open?: boolean | null;
1248
1253
  rootClass?: string;
1249
1254
  }
1250
1255
 
@@ -1320,7 +1325,7 @@ declare interface LightswitchProps {
1320
1325
  export declare const Modal: __VLS_WithTemplateSlots_14<typeof __VLS_component_14, __VLS_TemplateResult_14["slots"]>;
1321
1326
 
1322
1327
  declare interface ModalProps {
1323
- as?: string;
1328
+ as?: string | Component;
1324
1329
  id: string;
1325
1330
  title: string;
1326
1331
  showClose?: boolean;
@@ -1,4 +1,4 @@
1
- import { _ as t } from "../_shared/RichTextEditor.vue_vue_type_script_setup_true_lang-t14vKtCW.js";
1
+ import { _ as t } from "../_shared/RichTextEditor.vue_vue_type_script_setup_true_lang-Miebq2nL.js";
2
2
  export {
3
3
  t as RichTextEditor,
4
4
  t as default
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robuust-digital/vue-components",
3
- "version": "2.6.4",
3
+ "version": "2.6.6",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -142,7 +142,7 @@
142
142
  "stylelint-config-property-sort-order-smacss": "^11.1.0",
143
143
  "stylelint-config-standard": "^40.0.0",
144
144
  "tailwindcss": "^4.1.17",
145
- "typescript": "^5.9.3",
145
+ "typescript": "5.9.3",
146
146
  "vite": "^7.2.2",
147
147
  "vite-plugin-dts": "^4.5.4",
148
148
  "vite-plugin-static-copy": "3.4.0",
@@ -1,115 +0,0 @@
1
- import { openBlock as r, createElementBlock as p, createElementVNode as B, defineComponent as M, createBlock as l, unref as n, normalizeClass as u, withCtx as a, renderSlot as s, createVNode as i, mergeProps as f, Transition as $, Fragment as y, renderList as A, resolveDynamicComponent as m, createCommentVNode as L, createTextVNode as N, toDisplayString as V } from "vue";
2
- import { Menu as x, MenuButton as v, MenuItems as D, MenuItem as w } from "@headlessui/vue";
3
- import { _ as I } from "./ButtonBase.vue_vue_type_script_setup_true_lang-ZYVNEyNx.js";
4
- function Z(t, c) {
5
- return r(), p("svg", {
6
- xmlns: "http://www.w3.org/2000/svg",
7
- viewBox: "0 0 20 20",
8
- fill: "currentColor",
9
- "aria-hidden": "true",
10
- "data-slot": "icon"
11
- }, [
12
- B("path", { d: "M10 3a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM10 8.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM11.5 15.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0Z" })
13
- ]);
14
- }
15
- const z = /* @__PURE__ */ M({
16
- inheritAttrs: !1,
17
- __name: "Dropdown",
18
- props: {
19
- items: {},
20
- alignLeft: { type: Boolean, default: !1 },
21
- fullWidth: { type: Boolean, default: !1 },
22
- label: { default: "Options" },
23
- rootClass: { default: "" }
24
- },
25
- emits: ["dropdown:click"],
26
- setup(t, { emit: c }) {
27
- const b = c, g = (o) => {
28
- const {
29
- as: h,
30
- bindAs: e,
31
- event: d,
32
- icon: C,
33
- name: E,
34
- ...k
35
- } = o;
36
- return k;
37
- };
38
- return (o, h) => (r(), l(n(x), {
39
- as: "div",
40
- class: u(["rvc-dropdown", t.rootClass])
41
- }, {
42
- default: a(() => [
43
- s(o.$slots, "button", {
44
- label: t.label,
45
- button: n(v)
46
- }, () => [
47
- i(n(v), f({
48
- as: I,
49
- label: t.label,
50
- color: "light",
51
- icon: n(Z),
52
- "icon-left": t.alignLeft
53
- }, o.$attrs), null, 16, ["label", "icon", "icon-left"])
54
- ]),
55
- i($, {
56
- "enter-active-class": "rvc-dropdown-transition-enter",
57
- "enter-from-class": "rvc-dropdown-transition-enter-from",
58
- "enter-to-class": "rvc-dropdown-transition-enter-to",
59
- "leave-active-class": "rvc-dropdown-transition-leave",
60
- "leave-from-class": "rvc-dropdown-transition-leave-from",
61
- "leave-to-class": "rvc-dropdown-transition-leave-to"
62
- }, {
63
- default: a(() => [
64
- i(n(D), {
65
- class: u([
66
- "rvc-dropdown-items",
67
- {
68
- "rvc-dropdown-items-left": t.alignLeft,
69
- "rvc-dropdown-items-full": t.fullWidth
70
- }
71
- ])
72
- }, {
73
- default: a(() => [
74
- s(o.$slots, "items", {
75
- items: t.items,
76
- menuItem: n(w)
77
- }, () => [
78
- (r(!0), p(y, null, A(t.items, (e, d) => (r(), l(n(w), {
79
- key: `${d}-dropdown-item`,
80
- as: "template"
81
- }, {
82
- default: a(() => [
83
- s(o.$slots, "item", { item: e }, () => [
84
- (r(), l(m(e.as ? e.as : "button"), f({ class: "rvc-dropdown-item" }, { ref_for: !0 }, g(e), {
85
- as: e.bindAs ? e.bindAs : void 0,
86
- onClick: (C) => (b("dropdown:click", e), e.event ? e.event() : null)
87
- }), {
88
- default: a(() => [
89
- e.icon ? (r(), l(m(e.icon), {
90
- key: 0,
91
- class: "rvc-dropdown-item-icon"
92
- })) : L("", !0),
93
- N(" " + V(e.name), 1)
94
- ]),
95
- _: 2
96
- }, 1040, ["as", "onClick"]))
97
- ])
98
- ]),
99
- _: 2
100
- }, 1024))), 128))
101
- ])
102
- ]),
103
- _: 3
104
- }, 8, ["class"])
105
- ]),
106
- _: 3
107
- })
108
- ]),
109
- _: 3
110
- }, 8, ["class"]));
111
- }
112
- });
113
- export {
114
- z as _
115
- };
@@ -1,198 +0,0 @@
1
- import { ref as k, computed as b, defineComponent as I, openBlock as C, createBlock as T, unref as e, withCtx as d, createVNode as i, withModifiers as h, createElementVNode as r, normalizeClass as D, renderSlot as s, createElementBlock as $, createTextVNode as L, toDisplayString as R, createCommentVNode as S } from "vue";
2
- import { TransitionRoot as N, Dialog as V, TransitionChild as B, DialogPanel as A, DialogTitle as g } from "@headlessui/vue";
3
- import { _ as w } from "./ButtonBase.vue_vue_type_script_setup_true_lang-ZYVNEyNx.js";
4
- import { r as E } from "./XMarkIcon-CPr_Rd8y.js";
5
- function H(t) {
6
- const v = k(null), y = k(!1), l = b(() => t.as === "form"), f = b(() => `${t.id}-title`), m = b(() => `${t.id}-content`), c = b(() => v.value?.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'));
7
- return {
8
- contentRef: v,
9
- ready: y,
10
- isForm: l,
11
- titleId: f,
12
- descriptionId: m,
13
- initialFocusElement: c
14
- };
15
- }
16
- const M = {
17
- role: "presentation",
18
- class: "rvc-modal-presentation"
19
- }, q = { class: "rvc-modal-container" }, x = {
20
- key: 0,
21
- class: "rvc-modal-header"
22
- }, z = { class: "rvc-modal-header-inner" }, P = { class: "rvc-modal-close-wrapper" }, j = ["id"], G = {
23
- key: 2,
24
- class: "rvc-modal-footer"
25
- }, U = /* @__PURE__ */ I({
26
- __name: "Modal",
27
- props: {
28
- as: { default: "div" },
29
- id: {},
30
- title: {},
31
- showClose: { type: Boolean, default: !1 },
32
- spinning: { type: Boolean, default: !1 },
33
- submitLabel: { default: "Confirm" },
34
- cancelLabel: { default: "Cancel" },
35
- panelClass: { default: "rvc-modal-panel-max-width" },
36
- resetHeader: { type: Boolean, default: !1 },
37
- resetFooter: { type: Boolean, default: !1 }
38
- },
39
- emits: ["modal:open", "modal:opened", "modal:close", "modal:save", "modal:closed"],
40
- setup(t, { emit: v }) {
41
- const y = t, l = v, {
42
- contentRef: f,
43
- ready: m,
44
- isForm: c,
45
- titleId: u,
46
- descriptionId: p,
47
- initialFocusElement: F
48
- } = H(y);
49
- return (n, o) => (C(), T(e(N), { as: "template" }, {
50
- default: d(() => [
51
- i(e(V), {
52
- as: t.as,
53
- class: "rvc-modal",
54
- static: "",
55
- "aria-modal": "true",
56
- role: "dialog",
57
- "initial-focus": e(F),
58
- "aria-labelledby": e(u),
59
- onClose: o[7] || (o[7] = (a) => l("modal:close")),
60
- onSubmit: o[8] || (o[8] = h((a) => l("modal:save", a), ["prevent"]))
61
- }, {
62
- default: d(() => [
63
- i(e(B), {
64
- as: "template",
65
- enter: "rvc-modal-backdrop-transition-enter",
66
- "enter-from": "rvc-modal-backdrop-transition-enter-from",
67
- "enter-to": "rvc-modal-backdrop-transition-enter-to",
68
- leave: "rvc-modal-backdrop-transition-leave",
69
- "leave-from": "rvc-modal-backdrop-transition-leave-from",
70
- "leave-to": "rvc-modal-backdrop-transition-leave-to",
71
- onBeforeEnter: o[0] || (o[0] = (a) => l("modal:open")),
72
- onAfterEnter: o[1] || (o[1] = (a) => l("modal:opened"))
73
- }, {
74
- default: d(() => [...o[9] || (o[9] = [
75
- r("div", {
76
- "aria-hidden": "true",
77
- class: "rvc-modal-backdrop"
78
- }, null, -1)
79
- ])]),
80
- _: 1
81
- }),
82
- r("div", M, [
83
- r("div", q, [
84
- i(e(B), {
85
- as: "template",
86
- enter: "rvc-modal-transition-enter",
87
- "enter-from": "rvc-modal-transition-enter-from",
88
- "enter-to": "rvc-modal-transition-enter-to",
89
- leave: "rvc-modal-transition-leave",
90
- "leave-from": "rvc-modal-transition-leave-from",
91
- "leave-to": "rvc-modal-transition-leave-to",
92
- onBeforeEnter: o[5] || (o[5] = (a) => m.value = !0),
93
- onAfterLeave: o[6] || (o[6] = (a) => (m.value = !1, l("modal:closed")))
94
- }, {
95
- default: d(() => [
96
- i(e(A), {
97
- class: D(["rvc-modal-panel", t.panelClass]),
98
- "aria-busy": t.spinning,
99
- "aria-describedby": e(p)
100
- }, {
101
- default: d(() => [
102
- s(n.$slots, "panel", {
103
- title: t.title,
104
- loading: t.spinning,
105
- isForm: e(c),
106
- titleId: e(u),
107
- descriptionId: e(p),
108
- contentRef: e(f),
109
- dialogTitle: e(g),
110
- emitClose: () => l("modal:close"),
111
- emitSave: (a = void 0) => l("modal:save", a)
112
- }, () => [
113
- t.resetHeader ? s(n.$slots, "header", { key: 1 }) : (C(), $("header", x, [
114
- s(n.$slots, "header", {
115
- title: t.title,
116
- showClose: t.showClose
117
- }, () => [
118
- r("div", z, [
119
- s(n.$slots, "title", {
120
- id: e(u),
121
- dialogTitle: e(g),
122
- title: t.title
123
- }, () => [
124
- i(e(g), {
125
- id: e(u),
126
- class: "rvc-modal-title"
127
- }, {
128
- default: d(() => [
129
- L(R(t.title), 1)
130
- ]),
131
- _: 1
132
- }, 8, ["id"])
133
- ]),
134
- t.showClose ? s(n.$slots, "close", {
135
- key: 0,
136
- icon: e(E),
137
- emitClose: () => l("modal:close")
138
- }, () => [
139
- r("div", P, [
140
- r("button", {
141
- type: "button",
142
- class: "rvc-modal-close",
143
- "aria-label": "Close panel",
144
- onClick: o[2] || (o[2] = (a) => l("modal:close"))
145
- }, [
146
- i(e(E), { "aria-hidden": "true" })
147
- ])
148
- ])
149
- ]) : S("", !0)
150
- ])
151
- ])
152
- ])),
153
- r("div", {
154
- id: e(p),
155
- ref_key: "contentRef",
156
- ref: f,
157
- class: "rvc-modal-content"
158
- }, [
159
- s(n.$slots, "default", { ready: e(m) })
160
- ], 8, j),
161
- t.resetFooter ? s(n.$slots, "footer", { key: 3 }) : (C(), $("footer", G, [
162
- s(n.$slots, "footer", { loading: t.spinning }, () => [
163
- i(w, {
164
- type: e(c) ? "submit" : "button",
165
- label: t.submitLabel,
166
- spinning: t.spinning,
167
- disabled: t.spinning,
168
- onClick: o[3] || (o[3] = (a) => !e(c) && l("modal:save"))
169
- }, null, 8, ["type", "label", "spinning", "disabled"]),
170
- i(w, {
171
- type: "button",
172
- color: "light",
173
- label: t.cancelLabel,
174
- onClick: o[4] || (o[4] = (a) => l("modal:close"))
175
- }, null, 8, ["label"])
176
- ])
177
- ]))
178
- ])
179
- ]),
180
- _: 3
181
- }, 8, ["class", "aria-busy", "aria-describedby"])
182
- ]),
183
- _: 3
184
- })
185
- ])
186
- ])
187
- ]),
188
- _: 3
189
- }, 8, ["as", "initial-focus", "aria-labelledby"])
190
- ]),
191
- _: 3
192
- }));
193
- }
194
- });
195
- export {
196
- U as _,
197
- H as u
198
- };