bitboss-ui 0.2.7 → 0.2.9
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/dist/index101.js +3 -3
- package/dist/index103.js +2 -2
- package/dist/index109.js +1 -1
- package/dist/index11.js +2 -2
- package/dist/index111.js +4 -4
- package/dist/index113.js +1 -1
- package/dist/index116.js +1 -1
- package/dist/index117.js +1 -1
- package/dist/index118.js +1 -1
- package/dist/index119.js +1 -1
- package/dist/index121.js +1 -1
- package/dist/index125.js +1 -1
- package/dist/index126.js +1 -1
- package/dist/index128.js +2 -2
- package/dist/index15.js +8 -8
- package/dist/index17.js +9 -9
- package/dist/index19.js +59 -59
- package/dist/index19.js.map +1 -1
- package/dist/index195.js +2 -3
- package/dist/index195.js.map +1 -1
- package/dist/index196.js +4 -35
- package/dist/index196.js.map +1 -1
- package/dist/index197.js +2 -6
- package/dist/index197.js.map +1 -1
- package/dist/index198.js +5 -2
- package/dist/index198.js.map +1 -1
- package/dist/index199.js +16 -2
- package/dist/index199.js.map +1 -1
- package/dist/index200.js +16 -4
- package/dist/index200.js.map +1 -1
- package/dist/index201.js +18 -234
- package/dist/index201.js.map +1 -1
- package/dist/index202.js +18 -349
- package/dist/index202.js.map +1 -1
- package/dist/index203.js +25 -130
- package/dist/index203.js.map +1 -1
- package/dist/index204.js +8 -5
- package/dist/index204.js.map +1 -1
- package/dist/index205.js +2 -19
- package/dist/index205.js.map +1 -1
- package/dist/index206.js +351 -2
- package/dist/index206.js.map +1 -1
- package/dist/index207.js +2 -2
- package/dist/index207.js.map +1 -1
- package/dist/index208.js +6 -186
- package/dist/index208.js.map +1 -1
- package/dist/index209.js +369 -23
- package/dist/index209.js.map +1 -1
- package/dist/index21.js +2 -2
- package/dist/index210.js +3 -369
- package/dist/index210.js.map +1 -1
- package/dist/index211.js +35 -16
- package/dist/index211.js.map +1 -1
- package/dist/index212.js +10 -16
- package/dist/index212.js.map +1 -1
- package/dist/index213.js +131 -17
- package/dist/index213.js.map +1 -1
- package/dist/index214.js +2 -29
- package/dist/index214.js.map +1 -1
- package/dist/index215.js +186 -8
- package/dist/index215.js.map +1 -1
- package/dist/index216.js +23 -3
- package/dist/index216.js.map +1 -1
- package/dist/index217.js +2 -3
- package/dist/index217.js.map +1 -1
- package/dist/index218.js +235 -2
- package/dist/index218.js.map +1 -1
- package/dist/index219.js +3 -2
- package/dist/index219.js.map +1 -1
- package/dist/index220.js +3 -10
- package/dist/index220.js.map +1 -1
- package/dist/index222.js +4 -4
- package/dist/index223.js +4 -4
- package/dist/index225.js +1 -1
- package/dist/index226.js +3 -434
- package/dist/index226.js.map +1 -1
- package/dist/index227.js +294 -88
- package/dist/index227.js.map +1 -1
- package/dist/index228.js +6 -2
- package/dist/index228.js.map +1 -1
- package/dist/index229.js +2 -200
- package/dist/index229.js.map +1 -1
- package/dist/index23.js +1 -1
- package/dist/index230.js +2 -4
- package/dist/index230.js.map +1 -1
- package/dist/index231.js +2 -6
- package/dist/index231.js.map +1 -1
- package/dist/index232.js +2 -2
- package/dist/index233.js +2 -295
- package/dist/index233.js.map +1 -1
- package/dist/index234.js +2 -2
- package/dist/index235.js +117 -2
- package/dist/index235.js.map +1 -1
- package/dist/index236.js +100 -111
- package/dist/index236.js.map +1 -1
- package/dist/index237.js +68 -105
- package/dist/index237.js.map +1 -1
- package/dist/index238.js +2 -2
- package/dist/index238.js.map +1 -1
- package/dist/index239.js +2 -2
- package/dist/index239.js.map +1 -1
- package/dist/index240.js +162 -2
- package/dist/index240.js.map +1 -1
- package/dist/index241.js +2 -2
- package/dist/index242.js +430 -219
- package/dist/index242.js.map +1 -1
- package/dist/index243.js +83 -252
- package/dist/index243.js.map +1 -1
- package/dist/index244.js +197 -159
- package/dist/index244.js.map +1 -1
- package/dist/index245.js +2 -2
- package/dist/index246.js +224 -69
- package/dist/index246.js.map +1 -1
- package/dist/index247.js +258 -2
- package/dist/index247.js.map +1 -1
- package/dist/index248.js +38 -2
- package/dist/index248.js.map +1 -1
- package/dist/index249.js +2 -38
- package/dist/index249.js.map +1 -1
- package/dist/index25.js +2 -2
- package/dist/index250.js +2 -2
- package/dist/index250.js.map +1 -1
- package/dist/index251.js +2 -2
- package/dist/index251.js.map +1 -1
- package/dist/index252.js +1 -1
- package/dist/index253.js +2 -2
- package/dist/index29.js +3 -3
- package/dist/index31.js +6 -6
- package/dist/index33.js +2 -2
- package/dist/index35.js +2 -2
- package/dist/index47.js +1 -1
- package/dist/index49.js +1 -1
- package/dist/index65.js +3 -3
- package/dist/index72.js +1 -1
- package/dist/index75.js +34 -34
- package/dist/index75.js.map +1 -1
- package/dist/index79.js +3 -3
- package/dist/index8.js +53 -54
- package/dist/index8.js.map +1 -1
- package/dist/index81.js +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/dist/index75.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineComponent as q, ref as s, useAttrs as G, computed as
|
|
2
|
-
import { useFocusTrap as oe } from "./
|
|
1
|
+
import { defineComponent as q, ref as s, useAttrs as G, computed as m, onMounted as J, watch as Q, onBeforeUnmount as X, openBlock as y, createBlock as Y, Teleport as Z, createElementVNode as o, mergeProps as N, createElementBlock as w, renderSlot as l, createTextVNode as ee, toDisplayString as z, createCommentVNode as B, nextTick as te } from "vue";
|
|
2
|
+
import { useFocusTrap as oe } from "./index211.js";
|
|
3
3
|
import { useId as L } from "./index7.js";
|
|
4
4
|
import { wait as O } from "./index122.js";
|
|
5
5
|
const se = { class: "bb-offcanvas-close" }, ae = { class: "bb-offcanvas-close__content" }, ne = { class: "bb-offcanvas-close__label" }, le = /* @__PURE__ */ o("span", { class: "bb-offcanvas-close__icon" }, [
|
|
@@ -37,15 +37,15 @@ const se = { class: "bb-offcanvas-close" }, ae = { class: "bb-offcanvas-close__c
|
|
|
37
37
|
},
|
|
38
38
|
emits: ["shown", "hidden", "update:modelValue"],
|
|
39
39
|
setup(x, { emit: E }) {
|
|
40
|
-
const e = x,
|
|
40
|
+
const e = x, c = E, h = `title_${L().id.value}`, _ = `description_${L().id.value}`, d = s(null), V = s(null), S = s(null), T = s(null), A = s(null), M = s(null), W = G(), { activate: R, deactivate: I } = oe(V, {
|
|
41
41
|
clickOutsideDeactivates: !0,
|
|
42
42
|
/* On esc deactivate the trap, return focus and then close the modal */
|
|
43
43
|
escapeDeactivates: () => (te(() => {
|
|
44
|
-
|
|
44
|
+
c("update:modelValue", !1);
|
|
45
45
|
}), !0)
|
|
46
|
-
}), $ =
|
|
46
|
+
}), $ = m(() => e.closeLabel), f = s(!1), i = s(!1), g = s(!0), u = s(!1), v = s(e.eager || e.modelValue), C = s(null), F = m(() => i.value || u.value);
|
|
47
47
|
J(() => {
|
|
48
|
-
e.modelValue && D();
|
|
48
|
+
e.modelValue && !(f.value || i.value) && D();
|
|
49
49
|
}), Q(
|
|
50
50
|
() => e.modelValue,
|
|
51
51
|
() => {
|
|
@@ -61,33 +61,33 @@ const se = { class: "bb-offcanvas-close" }, ae = { class: "bb-offcanvas-close__c
|
|
|
61
61
|
});
|
|
62
62
|
const D = async () => {
|
|
63
63
|
if (e.modelValue) {
|
|
64
|
-
|
|
64
|
+
v.value || (v.value = !0), document.activeElement && (C.value = document.activeElement), g.value = !1, u.value = !1, i.value = !0;
|
|
65
65
|
let t = Number(
|
|
66
66
|
document.body.dataset.openCanvases ?? "0"
|
|
67
67
|
);
|
|
68
68
|
t++, document.body.dataset.openCanvases = t.toString();
|
|
69
69
|
const a = window.innerWidth - document.documentElement.clientWidth;
|
|
70
|
-
document.body.style.overflow = "hidden", document.body.style.paddingRight = `${a}px`, await O(e.transitionDuration),
|
|
70
|
+
document.body.style.overflow = "hidden", document.body.style.paddingRight = `${a}px`, await O(e.transitionDuration), i.value = !1, f.value = !0, c("shown"), R();
|
|
71
71
|
} else {
|
|
72
|
-
I(),
|
|
72
|
+
I(), i.value = !1, f.value = !1, u.value = !0, await O(e.transitionDuration);
|
|
73
73
|
let t = Number(
|
|
74
74
|
document.body.dataset.openCanvases ?? "0"
|
|
75
75
|
);
|
|
76
|
-
t--, document.body.dataset.openCanvases = t.toString(), t || (document.body.style.overflow = "auto", document.body.style.paddingRight = "0px"), u.value = !1, g.value = !0,
|
|
76
|
+
t--, document.body.dataset.openCanvases = t.toString(), t || (document.body.style.overflow = "auto", document.body.style.paddingRight = "0px"), u.value = !1, g.value = !0, c("hidden"), C.value instanceof HTMLElement && C.value.focus();
|
|
77
77
|
}
|
|
78
|
-
},
|
|
78
|
+
}, p = (t) => {
|
|
79
79
|
t.target === d.value && t.preventDefault();
|
|
80
80
|
}, H = (t) => {
|
|
81
|
-
e.disabled || F.value || d.value && t.target === d.value && (e.persistent ||
|
|
81
|
+
e.disabled || F.value || d.value && t.target === d.value && (e.persistent || c("update:modelValue", !1));
|
|
82
82
|
}, k = () => {
|
|
83
|
-
e.disabled ||
|
|
84
|
-
}, K =
|
|
83
|
+
e.disabled || c("update:modelValue", !1);
|
|
84
|
+
}, K = m(() => {
|
|
85
85
|
const t = [
|
|
86
86
|
{
|
|
87
87
|
"bb-offcanvas bb-offcanvas__overlay": !0,
|
|
88
88
|
"bb-offcanvas--fullscreen": e.fullscreen,
|
|
89
|
-
"bb-offcanvas--open":
|
|
90
|
-
"bb-offcanvas--opening":
|
|
89
|
+
"bb-offcanvas--open": f.value,
|
|
90
|
+
"bb-offcanvas--opening": i.value,
|
|
91
91
|
"bb-offcanvas--closed": g.value,
|
|
92
92
|
"bb-offcanvas--closing": u.value,
|
|
93
93
|
[`bb-offcanvas--transition-${e.transition}`]: !0,
|
|
@@ -96,10 +96,10 @@ const se = { class: "bb-offcanvas-close" }, ae = { class: "bb-offcanvas-close__c
|
|
|
96
96
|
e.overlayClasses
|
|
97
97
|
].flat(), a = {
|
|
98
98
|
onClick: H,
|
|
99
|
-
onScroll:
|
|
100
|
-
onTouchmove:
|
|
101
|
-
onWheel:
|
|
102
|
-
onKeydown:
|
|
99
|
+
onScroll: p,
|
|
100
|
+
onTouchmove: p,
|
|
101
|
+
onWheel: p,
|
|
102
|
+
onKeydown: p
|
|
103
103
|
}, n = {
|
|
104
104
|
transitionDuration: e.transitionDuration / 1e3 + "s"
|
|
105
105
|
};
|
|
@@ -109,7 +109,7 @@ const se = { class: "bb-offcanvas-close" }, ae = { class: "bb-offcanvas-close__c
|
|
|
109
109
|
...a,
|
|
110
110
|
...W
|
|
111
111
|
};
|
|
112
|
-
}), P =
|
|
112
|
+
}), P = m(() => {
|
|
113
113
|
const t = [
|
|
114
114
|
{
|
|
115
115
|
"bb-offcanvas__panel": !0,
|
|
@@ -120,18 +120,18 @@ const se = { class: "bb-offcanvas-close" }, ae = { class: "bb-offcanvas-close__c
|
|
|
120
120
|
role: "dialog",
|
|
121
121
|
"aria-modal": !0
|
|
122
122
|
};
|
|
123
|
-
|
|
124
|
-
let n, U,
|
|
125
|
-
const
|
|
123
|
+
v.value && (a["aria-labelledby"] = h, e.description && (a["aria-describedby"] = _));
|
|
124
|
+
let n, U, r;
|
|
125
|
+
const b = {
|
|
126
126
|
sm: 384,
|
|
127
127
|
md: 652,
|
|
128
128
|
lg: 896
|
|
129
129
|
};
|
|
130
|
-
e.direction === "left" || e.direction === "right" ? e.fullscreen ? n = "100%" : typeof e.size == "number" ? n = e.size + "px" : e.size in
|
|
130
|
+
e.direction === "left" || e.direction === "right" ? e.fullscreen ? n = "100%" : typeof e.size == "number" ? n = e.size + "px" : e.size in b ? n = b[e.size] + "px" : n = e.size + "px" : e.fullscreen ? r = "100%" : typeof e.size == "number" ? r = e.size + "px" : e.size in b ? r = b[e.size] + "px" : Number.isNaN(Number(e.size)) ? e.size === "auto" && (r = "auto") : r = e.size + "px";
|
|
131
131
|
const j = {
|
|
132
132
|
maxWidth: n,
|
|
133
133
|
maxHeight: U,
|
|
134
|
-
height:
|
|
134
|
+
height: r,
|
|
135
135
|
transitionDuration: e.transitionDuration / 1e3 + "s"
|
|
136
136
|
};
|
|
137
137
|
return {
|
|
@@ -140,7 +140,7 @@ const se = { class: "bb-offcanvas-close" }, ae = { class: "bb-offcanvas-close__c
|
|
|
140
140
|
...a
|
|
141
141
|
};
|
|
142
142
|
});
|
|
143
|
-
return (t, a) => (
|
|
143
|
+
return (t, a) => (y(), Y(Z, { to: "body" }, [
|
|
144
144
|
o("div", N(K.value, {
|
|
145
145
|
ref_key: "overlay",
|
|
146
146
|
ref: d
|
|
@@ -149,7 +149,7 @@ const se = { class: "bb-offcanvas-close" }, ae = { class: "bb-offcanvas-close__c
|
|
|
149
149
|
ref_key: "panel",
|
|
150
150
|
ref: V
|
|
151
151
|
}), [
|
|
152
|
-
|
|
152
|
+
v.value ? (y(), w("div", {
|
|
153
153
|
key: 0,
|
|
154
154
|
class: "bb-offcanvas__content",
|
|
155
155
|
ref_key: "content",
|
|
@@ -162,20 +162,20 @@ const se = { class: "bb-offcanvas-close" }, ae = { class: "bb-offcanvas-close__c
|
|
|
162
162
|
ref: T
|
|
163
163
|
}, [
|
|
164
164
|
l(t.$slots, "header", {
|
|
165
|
-
titleId:
|
|
165
|
+
titleId: h,
|
|
166
166
|
close: k,
|
|
167
167
|
title: t.title
|
|
168
168
|
}, () => [
|
|
169
169
|
o("span", {
|
|
170
170
|
class: "bb-offcanvas__title",
|
|
171
|
-
id:
|
|
171
|
+
id: h
|
|
172
172
|
}, [
|
|
173
173
|
l(t.$slots, "title", { text: t.title }, () => [
|
|
174
174
|
ee(z(t.title), 1)
|
|
175
175
|
])
|
|
176
176
|
]),
|
|
177
177
|
o("span", se, [
|
|
178
|
-
t.showClose ? (
|
|
178
|
+
t.showClose ? (y(), w("button", {
|
|
179
179
|
key: 0,
|
|
180
180
|
onClick: k,
|
|
181
181
|
type: "button"
|
|
@@ -196,12 +196,12 @@ const se = { class: "bb-offcanvas-close" }, ae = { class: "bb-offcanvas-close__c
|
|
|
196
196
|
ref: A
|
|
197
197
|
}, [
|
|
198
198
|
l(t.$slots, "description", {
|
|
199
|
-
descriptionId:
|
|
199
|
+
descriptionId: _,
|
|
200
200
|
text: t.description
|
|
201
201
|
}, () => [
|
|
202
|
-
t.description ? (
|
|
202
|
+
t.description ? (y(), w("div", {
|
|
203
203
|
key: 0,
|
|
204
|
-
id:
|
|
204
|
+
id: _,
|
|
205
205
|
class: "bb-offcanvas__description"
|
|
206
206
|
}, z(t.description), 1)) : B("", !0)
|
|
207
207
|
]),
|
package/dist/index75.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index75.js","sources":["../src/components/BbOffCanvas/BbOffCanvas.vue?vue&type=script&setup=true&lang.ts"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, mergeProps as _mergeProps, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"bb-offcanvas-close\" }\nconst _hoisted_2 = { class: \"bb-offcanvas-close__content\" }\nconst _hoisted_3 = { class: \"bb-offcanvas-close__label\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"bb-offcanvas-close__icon\" }, [\n /*#__PURE__*/_createElementVNode(\"svg\", {\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, [\n /*#__PURE__*/_createElementVNode(\"path\", {\n d: \"M23 23L1 1M23 1L1 23\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\"\n })\n ])\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"10000 10000 0%\"} }, null, -1)\n\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useAttrs, watch } from \"vue\";\nimport { useFocusTrap } from \"@vueuse/integrations/useFocusTrap\";\nimport { useId } from \"@/composables/useId\";\nimport { wait } from \"@/utilities/functions/wait\";\nimport type { CommonProps, Size } from \"@/types/CommonProps\";\n\nexport type Sizes = {\n sm: number;\n md: number;\n lg: number;\n};\n\nexport type BbOffCanvasProps = Pick<\n CommonProps,\n | \"closeLabel\"\n | \"compact\"\n | \"disabled\"\n | \"eager\"\n | \"panelClasses\"\n | \"overlayClasses\"\n | \"persistent\"\n | \"showClose\"\n | \"title\"\n | \"transition\"\n | \"transitionDuration\"\n> &\n Size<Sizes> & {\n /**\n * Description of the content of the modal. Extremely useful for accessibility reasons.\n */\n description?: string;\n /**\n * Displays the modala as fulscreen with no margin to the page\n */\n fullscreen?: boolean;\n /**\n * Defines the state open / closed of the modal.\n */\n modelValue?: boolean | null;\n /**\n * Defines the direction the offcanvas should appear from\n */\n direction?: \"left\" | \"top\" | \"right\" | \"bottom\";\n };\n\nexport type BbOffCanvasEvents = {\n (e: \"shown\"): void;\n (e: \"hidden\"): void;\n (e: \"update:modelValue\", value: boolean): void;\n};\n\nexport type BbOffCanvasSlots = {\n header?: (props: {\n titleId: typeof titleId;\n close: typeof onCloseClick;\n title: BbOffCanvasProps[\"title\"];\n }) => any;\n title?: (props: { text: BbOffCanvasProps[\"title\"] }) => any;\n close?: (props: { text: BbOffCanvasProps[\"closeLabel\"] }) => any;\n description?: (props: {\n descriptionId: typeof descriptionId;\n text: BbOffCanvasProps[\"description\"];\n }) => any;\n default?: (props: {}) => any;\n content?: (props: { close: typeof onCloseClick }) => any;\n footer?: (props: {}) => any;\n};\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'BbOffCanvas',\n props: {\n closeLabel: { default: \"Chiudi\" },\n compact: { type: Boolean },\n disabled: { type: Boolean },\n eager: { type: Boolean },\n panelClasses: { default: () => [] },\n overlayClasses: { default: () => [] },\n persistent: { type: Boolean },\n showClose: { type: Boolean, default: true },\n title: {},\n transition: { default: \"fade\" },\n transitionDuration: { default: 350 },\n size: { default: \"sm\" },\n description: {},\n fullscreen: { type: Boolean },\n modelValue: { type: [Boolean, null] },\n direction: { default: \"left\" }\n },\n emits: [\"shown\", \"hidden\", \"update:modelValue\"],\n setup(__props: any, { emit: __emit }) {\n\nconst props = __props;\n\nconst emit = __emit;\n\n\n\nconst titleId = `title_${useId().id.value}`;\nconst descriptionId = `description_${useId().id.value}`;\n\nconst overlay = ref<HTMLElement | null>(null);\nconst panel = ref<HTMLElement | null>(null);\nconst content = ref<HTMLElement | null>(null);\nconst header = ref<HTMLElement | null>(null);\nconst body = ref<HTMLElement | null>(null);\nconst footer = ref<HTMLElement | null>(null);\nconst attrs = useAttrs();\n\nconst { activate, deactivate } = useFocusTrap(panel, {\n clickOutsideDeactivates: true,\n /* On esc deactivate the trap, return focus and then close the modal */\n escapeDeactivates: () => {\n nextTick(() => {\n emit(\"update:modelValue\", false);\n });\n return true;\n },\n});\n\nconst closeLabel = computed(() => props.closeLabel);\n\nconst open = ref(false);\nconst opening = ref(false);\nconst closed = ref(true);\nconst closing = ref(false);\nconst hasRenderedAtLeastOnce = ref(props.eager || props.modelValue);\nconst lastFocusedElement = ref<Element | null>(null);\n\nconst busy = computed(() => opening.value || closing.value);\n\nonMounted(() => {\n if (props.modelValue) {\n alignToModelValue();\n }\n});\n\n/**\n * Every time modelValue changes align the display to it\n */\nwatch(\n () => props.modelValue,\n () => {\n alignToModelValue();\n }\n);\nonBeforeUnmount(() => {\n if (props.modelValue) {\n let currentlyOpenCanvases = Number(\n document.body.dataset[\"openCanvases\"] ?? \"0\"\n );\n // This prevents overscroll chaining (additional scrolling to the body when the modal has been completely scrolled)\n currentlyOpenCanvases--;\n document.body.dataset[\"openCanvases\"] = currentlyOpenCanvases.toString();\n if (!currentlyOpenCanvases) {\n document.body.style.overflow = \"auto\";\n document.body.style.paddingRight = \"0px\";\n }\n }\n});\n\n/**\n * When modelValue becomes true if the component wasn't rendered render it\n * and wait for it to be on the page (or transitions would not work).\n * Stash the latest focused element so we can return it later when it closes.\n * Focus on the panel upon opening.\n * ---\n * Notice all interactions update modelValue and then this function aligns the display to it\n */\nconst alignToModelValue = async () => {\n if (props.modelValue) {\n if (!hasRenderedAtLeastOnce.value) {\n hasRenderedAtLeastOnce.value = true;\n }\n if (document.activeElement) {\n lastFocusedElement.value = document.activeElement;\n }\n\n closed.value = false;\n closing.value = false;\n opening.value = true;\n\n // This prevents overscroll chaining (additional scrolling to the body when the modal has been completely scrolled)\n\n let currentlyOpenCanvases = Number(\n document.body.dataset[\"openCanvases\"] ?? \"0\"\n );\n currentlyOpenCanvases++;\n document.body.dataset[\"openCanvases\"] = currentlyOpenCanvases.toString();\n const scrollBarWidth =\n window.innerWidth - document.documentElement.clientWidth;\n document.body.style.overflow = \"hidden\";\n document.body.style.paddingRight = `${scrollBarWidth}px`;\n\n await wait(props.transitionDuration);\n\n opening.value = false;\n open.value = true;\n emit(\"shown\");\n activate();\n } else {\n deactivate();\n opening.value = false;\n open.value = false;\n closing.value = true;\n\n await wait(props.transitionDuration);\n\n let currentlyOpenCanvases = Number(\n document.body.dataset[\"openCanvases\"] ?? \"0\"\n );\n // This prevents overscroll chaining (additional scrolling to the body when the modal has been completely scrolled)\n currentlyOpenCanvases--;\n document.body.dataset[\"openCanvases\"] = currentlyOpenCanvases.toString();\n if (!currentlyOpenCanvases) {\n document.body.style.overflow = \"auto\";\n document.body.style.paddingRight = \"0px\";\n }\n closing.value = false;\n closed.value = true;\n emit(\"hidden\");\n if (lastFocusedElement.value instanceof HTMLElement) {\n lastFocusedElement.value.focus();\n }\n }\n};\n\n/**\n * Disable scrolling\n */\nconst onOverlayScroll = (event: UIEvent) => {\n if (event.target === overlay.value) {\n event.preventDefault();\n }\n};\n\n/**\n * Close the modal on overlay click if not persistent\n */\nconst onOverlayClick = (event: MouseEvent) => {\n if (props.disabled || busy.value) return;\n if (overlay.value) {\n if (event.target === overlay.value) {\n if (!props.persistent) {\n emit(\"update:modelValue\", false);\n }\n }\n }\n};\n\n/**\n * On click on the X button\n */\nconst onCloseClick = () => {\n if (props.disabled) return;\n emit(\"update:modelValue\", false);\n};\n\nconst overlayAttributes = computed(() => {\n const classes = [\n {\n \"bb-offcanvas bb-offcanvas__overlay\": true,\n \"bb-offcanvas--fullscreen\": props.fullscreen,\n \"bb-offcanvas--open\": open.value,\n \"bb-offcanvas--opening\": opening.value,\n \"bb-offcanvas--closed\": closed.value,\n \"bb-offcanvas--closing\": closing.value,\n [`bb-offcanvas--transition-${props.transition}`]: true,\n [`bb-offcanvas--${props.direction}`]: true,\n },\n props.overlayClasses,\n ].flat();\n const eventListeners = {\n onClick: onOverlayClick,\n onScroll: onOverlayScroll,\n onTouchmove: onOverlayScroll,\n onWheel: onOverlayScroll,\n onKeydown: onOverlayScroll,\n };\n\n const style = {\n transitionDuration: props.transitionDuration / 1000 + \"s\",\n };\n return {\n class: classes,\n style,\n ...eventListeners,\n ...attrs,\n };\n});\n\nconst panelAttributes = computed(() => {\n const classes = [\n {\n \"bb-offcanvas__panel\": true,\n \"bb-offcanvas__panel--compact\": props.compact,\n },\n props.panelClasses,\n ].flat();\n\n const accessibilityAttrs: {\n [key: string]: string | boolean;\n } = {\n role: \"dialog\",\n \"aria-modal\": true,\n };\n\n if (hasRenderedAtLeastOnce.value) {\n accessibilityAttrs[\"aria-labelledby\"] = titleId;\n\n if (props.description)\n accessibilityAttrs[\"aria-describedby\"] = descriptionId;\n }\n\n let maxWidth;\n let maxHeight;\n let height;\n const sizes: Sizes = {\n sm: 384,\n md: 652,\n lg: 896,\n };\n if (props.direction === \"left\" || props.direction === \"right\") {\n if (props.fullscreen) maxWidth = \"100%\";\n else if (typeof props.size === \"number\") maxWidth = props.size + \"px\";\n else if (props.size in sizes)\n maxWidth = sizes[props.size as keyof Sizes] + \"px\";\n else maxWidth = props.size + \"px\";\n } else {\n if (props.fullscreen) height = \"100%\";\n else if (typeof props.size === \"number\") height = props.size + \"px\";\n else if (props.size in sizes)\n height = sizes[props.size as keyof Sizes] + \"px\";\n else if (!Number.isNaN(Number(props.size))) height = props.size + \"px\";\n else if (props.size === \"auto\") height = \"auto\";\n }\n\n const style = {\n maxWidth,\n maxHeight,\n height,\n transitionDuration: props.transitionDuration / 1000 + \"s\",\n };\n\n return {\n class: classes,\n style,\n ...accessibilityAttrs,\n };\n});\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n _createElementVNode(\"div\", _mergeProps(overlayAttributes.value, {\n ref_key: \"overlay\",\n ref: overlay\n }), [\n _createElementVNode(\"div\", _mergeProps(panelAttributes.value, {\n ref_key: \"panel\",\n ref: panel\n }), [\n (hasRenderedAtLeastOnce.value)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"bb-offcanvas__content\",\n ref_key: \"content\",\n ref: content\n }, [\n _renderSlot(_ctx.$slots, \"content\", { close: onCloseClick }, () => [\n _createElementVNode(\"div\", {\n class: \"bb-offcanvas__header\",\n ref_key: \"header\",\n ref: header\n }, [\n _renderSlot(_ctx.$slots, \"header\", {\n titleId: titleId,\n close: onCloseClick,\n title: _ctx.title\n }, () => [\n _createElementVNode(\"span\", {\n class: \"bb-offcanvas__title\",\n id: titleId\n }, [\n _renderSlot(_ctx.$slots, \"title\", { text: _ctx.title }, () => [\n _createTextVNode(_toDisplayString(_ctx.title), 1)\n ])\n ]),\n _createElementVNode(\"span\", _hoisted_1, [\n (_ctx.showClose)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: onCloseClick,\n type: \"button\"\n }, [\n _renderSlot(_ctx.$slots, \"close\", { text: closeLabel.value }, () => [\n _createElementVNode(\"span\", _hoisted_2, [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(closeLabel.value), 1),\n _hoisted_4\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ], 512),\n _createElementVNode(\"div\", {\n class: \"bb-offcanvas__body\",\n ref_key: \"body\",\n ref: body\n }, [\n _renderSlot(_ctx.$slots, \"description\", {\n descriptionId: descriptionId,\n text: _ctx.description\n }, () => [\n (_ctx.description)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n id: descriptionId,\n class: \"bb-offcanvas__description\"\n }, _toDisplayString(_ctx.description), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _renderSlot(_ctx.$slots, \"default\")\n ], 512),\n _hoisted_5,\n _createElementVNode(\"div\", {\n class: \"bb-offcanvas__footer\",\n ref_key: \"footer\",\n ref: footer\n }, [\n _renderSlot(_ctx.$slots, \"footer\")\n ], 512)\n ])\n ], 512))\n : _createCommentVNode(\"\", true)\n ], 16)\n ], 16)\n ]))\n}\n}\n\n})"],"names":["_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createElementVNode","_hoisted_5","_sfc_main","_defineComponent","__props","__emit","props","emit","titleId","useId","descriptionId","overlay","ref","panel","content","header","body","footer","attrs","useAttrs","activate","deactivate","useFocusTrap","nextTick","closeLabel","computed","open","opening","closed","closing","hasRenderedAtLeastOnce","lastFocusedElement","busy","onMounted","alignToModelValue","watch","onBeforeUnmount","currentlyOpenCanvases","scrollBarWidth","wait","onOverlayScroll","event","onOverlayClick","onCloseClick","overlayAttributes","classes","eventListeners","style","panelAttributes","accessibilityAttrs","maxWidth","maxHeight","height","sizes","_ctx","_cache","_openBlock","_createBlock","_Teleport","_mergeProps","_createElementBlock","_renderSlot","_createTextVNode","_toDisplayString","_createCommentVNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index75.js","sources":["../src/components/BbOffCanvas/BbOffCanvas.vue?vue&type=script&setup=true&lang.ts"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, mergeProps as _mergeProps, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"bb-offcanvas-close\" }\nconst _hoisted_2 = { class: \"bb-offcanvas-close__content\" }\nconst _hoisted_3 = { class: \"bb-offcanvas-close__label\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"bb-offcanvas-close__icon\" }, [\n /*#__PURE__*/_createElementVNode(\"svg\", {\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, [\n /*#__PURE__*/_createElementVNode(\"path\", {\n d: \"M23 23L1 1M23 1L1 23\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\"\n })\n ])\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"div\", { style: {\"flex\":\"10000 10000 0%\"} }, null, -1)\n\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useAttrs, watch } from \"vue\";\nimport { useFocusTrap } from \"@vueuse/integrations/useFocusTrap\";\nimport { useId } from \"@/composables/useId\";\nimport { wait } from \"@/utilities/functions/wait\";\nimport type { CommonProps, Size } from \"@/types/CommonProps\";\n\nexport type Sizes = {\n sm: number;\n md: number;\n lg: number;\n};\n\nexport type BbOffCanvasProps = Pick<\n CommonProps,\n | \"closeLabel\"\n | \"compact\"\n | \"disabled\"\n | \"eager\"\n | \"panelClasses\"\n | \"overlayClasses\"\n | \"persistent\"\n | \"showClose\"\n | \"title\"\n | \"transition\"\n | \"transitionDuration\"\n> &\n Size<Sizes> & {\n /**\n * Description of the content of the modal. Extremely useful for accessibility reasons.\n */\n description?: string;\n /**\n * Displays the modala as fulscreen with no margin to the page\n */\n fullscreen?: boolean;\n /**\n * Defines the state open / closed of the modal.\n */\n modelValue?: boolean | null;\n /**\n * Defines the direction the offcanvas should appear from\n */\n direction?: \"left\" | \"top\" | \"right\" | \"bottom\";\n };\n\nexport type BbOffCanvasEvents = {\n (e: \"shown\"): void;\n (e: \"hidden\"): void;\n (e: \"update:modelValue\", value: boolean): void;\n};\n\nexport type BbOffCanvasSlots = {\n header?: (props: {\n titleId: typeof titleId;\n close: typeof onCloseClick;\n title: BbOffCanvasProps[\"title\"];\n }) => any;\n title?: (props: { text: BbOffCanvasProps[\"title\"] }) => any;\n close?: (props: { text: BbOffCanvasProps[\"closeLabel\"] }) => any;\n description?: (props: {\n descriptionId: typeof descriptionId;\n text: BbOffCanvasProps[\"description\"];\n }) => any;\n default?: (props: {}) => any;\n content?: (props: { close: typeof onCloseClick }) => any;\n footer?: (props: {}) => any;\n};\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'BbOffCanvas',\n props: {\n closeLabel: { default: \"Chiudi\" },\n compact: { type: Boolean },\n disabled: { type: Boolean },\n eager: { type: Boolean },\n panelClasses: { default: () => [] },\n overlayClasses: { default: () => [] },\n persistent: { type: Boolean },\n showClose: { type: Boolean, default: true },\n title: {},\n transition: { default: \"fade\" },\n transitionDuration: { default: 350 },\n size: { default: \"sm\" },\n description: {},\n fullscreen: { type: Boolean },\n modelValue: { type: [Boolean, null] },\n direction: { default: \"left\" }\n },\n emits: [\"shown\", \"hidden\", \"update:modelValue\"],\n setup(__props: any, { emit: __emit }) {\n\nconst props = __props;\n\nconst emit = __emit;\n\n\n\nconst titleId = `title_${useId().id.value}`;\nconst descriptionId = `description_${useId().id.value}`;\n\nconst overlay = ref<HTMLElement | null>(null);\nconst panel = ref<HTMLElement | null>(null);\nconst content = ref<HTMLElement | null>(null);\nconst header = ref<HTMLElement | null>(null);\nconst body = ref<HTMLElement | null>(null);\nconst footer = ref<HTMLElement | null>(null);\nconst attrs = useAttrs();\n\nconst { activate, deactivate } = useFocusTrap(panel, {\n clickOutsideDeactivates: true,\n /* On esc deactivate the trap, return focus and then close the modal */\n escapeDeactivates: () => {\n nextTick(() => {\n emit(\"update:modelValue\", false);\n });\n return true;\n },\n});\n\nconst closeLabel = computed(() => props.closeLabel);\n\nconst open = ref(false);\nconst opening = ref(false);\nconst closed = ref(true);\nconst closing = ref(false);\nconst hasRenderedAtLeastOnce = ref(props.eager || props.modelValue);\nconst lastFocusedElement = ref<Element | null>(null);\n\nconst busy = computed(() => opening.value || closing.value);\n\nonMounted(() => {\n /**\n * Do not realign if open or opening\n */\n if (props.modelValue && !(open.value || opening.value)) {\n alignToModelValue();\n }\n});\n\n/**\n * Every time modelValue changes align the display to it\n */\nwatch(\n () => props.modelValue,\n () => {\n alignToModelValue();\n }\n);\nonBeforeUnmount(() => {\n if (props.modelValue) {\n let currentlyOpenCanvases = Number(\n document.body.dataset[\"openCanvases\"] ?? \"0\"\n );\n // This prevents overscroll chaining (additional scrolling to the body when the modal has been completely scrolled)\n currentlyOpenCanvases--;\n document.body.dataset[\"openCanvases\"] = currentlyOpenCanvases.toString();\n if (!currentlyOpenCanvases) {\n document.body.style.overflow = \"auto\";\n document.body.style.paddingRight = \"0px\";\n }\n }\n});\n\n/**\n * When modelValue becomes true if the component wasn't rendered render it\n * and wait for it to be on the page (or transitions would not work).\n * Stash the latest focused element so we can return it later when it closes.\n * Focus on the panel upon opening.\n * ---\n * Notice all interactions update modelValue and then this function aligns the display to it\n */\nconst alignToModelValue = async () => {\n if (props.modelValue) {\n if (!hasRenderedAtLeastOnce.value) {\n hasRenderedAtLeastOnce.value = true;\n }\n if (document.activeElement) {\n lastFocusedElement.value = document.activeElement;\n }\n\n closed.value = false;\n closing.value = false;\n opening.value = true;\n\n // This prevents overscroll chaining (additional scrolling to the body when the modal has been completely scrolled)\n\n let currentlyOpenCanvases = Number(\n document.body.dataset[\"openCanvases\"] ?? \"0\"\n );\n currentlyOpenCanvases++;\n document.body.dataset[\"openCanvases\"] = currentlyOpenCanvases.toString();\n const scrollBarWidth =\n window.innerWidth - document.documentElement.clientWidth;\n document.body.style.overflow = \"hidden\";\n document.body.style.paddingRight = `${scrollBarWidth}px`;\n\n await wait(props.transitionDuration);\n\n opening.value = false;\n open.value = true;\n emit(\"shown\");\n activate();\n } else {\n deactivate();\n opening.value = false;\n open.value = false;\n closing.value = true;\n\n await wait(props.transitionDuration);\n\n let currentlyOpenCanvases = Number(\n document.body.dataset[\"openCanvases\"] ?? \"0\"\n );\n // This prevents overscroll chaining (additional scrolling to the body when the modal has been completely scrolled)\n currentlyOpenCanvases--;\n document.body.dataset[\"openCanvases\"] = currentlyOpenCanvases.toString();\n if (!currentlyOpenCanvases) {\n document.body.style.overflow = \"auto\";\n document.body.style.paddingRight = \"0px\";\n }\n closing.value = false;\n closed.value = true;\n emit(\"hidden\");\n if (lastFocusedElement.value instanceof HTMLElement) {\n lastFocusedElement.value.focus();\n }\n }\n};\n\n/**\n * Disable scrolling\n */\nconst onOverlayScroll = (event: UIEvent) => {\n if (event.target === overlay.value) {\n event.preventDefault();\n }\n};\n\n/**\n * Close the modal on overlay click if not persistent\n */\nconst onOverlayClick = (event: MouseEvent) => {\n if (props.disabled || busy.value) return;\n if (overlay.value) {\n if (event.target === overlay.value) {\n if (!props.persistent) {\n emit(\"update:modelValue\", false);\n }\n }\n }\n};\n\n/**\n * On click on the X button\n */\nconst onCloseClick = () => {\n if (props.disabled) return;\n emit(\"update:modelValue\", false);\n};\n\nconst overlayAttributes = computed(() => {\n const classes = [\n {\n \"bb-offcanvas bb-offcanvas__overlay\": true,\n \"bb-offcanvas--fullscreen\": props.fullscreen,\n \"bb-offcanvas--open\": open.value,\n \"bb-offcanvas--opening\": opening.value,\n \"bb-offcanvas--closed\": closed.value,\n \"bb-offcanvas--closing\": closing.value,\n [`bb-offcanvas--transition-${props.transition}`]: true,\n [`bb-offcanvas--${props.direction}`]: true,\n },\n props.overlayClasses,\n ].flat();\n const eventListeners = {\n onClick: onOverlayClick,\n onScroll: onOverlayScroll,\n onTouchmove: onOverlayScroll,\n onWheel: onOverlayScroll,\n onKeydown: onOverlayScroll,\n };\n\n const style = {\n transitionDuration: props.transitionDuration / 1000 + \"s\",\n };\n return {\n class: classes,\n style,\n ...eventListeners,\n ...attrs,\n };\n});\n\nconst panelAttributes = computed(() => {\n const classes = [\n {\n \"bb-offcanvas__panel\": true,\n \"bb-offcanvas__panel--compact\": props.compact,\n },\n props.panelClasses,\n ].flat();\n\n const accessibilityAttrs: {\n [key: string]: string | boolean;\n } = {\n role: \"dialog\",\n \"aria-modal\": true,\n };\n\n if (hasRenderedAtLeastOnce.value) {\n accessibilityAttrs[\"aria-labelledby\"] = titleId;\n\n if (props.description)\n accessibilityAttrs[\"aria-describedby\"] = descriptionId;\n }\n\n let maxWidth;\n let maxHeight;\n let height;\n const sizes: Sizes = {\n sm: 384,\n md: 652,\n lg: 896,\n };\n if (props.direction === \"left\" || props.direction === \"right\") {\n if (props.fullscreen) maxWidth = \"100%\";\n else if (typeof props.size === \"number\") maxWidth = props.size + \"px\";\n else if (props.size in sizes)\n maxWidth = sizes[props.size as keyof Sizes] + \"px\";\n else maxWidth = props.size + \"px\";\n } else {\n if (props.fullscreen) height = \"100%\";\n else if (typeof props.size === \"number\") height = props.size + \"px\";\n else if (props.size in sizes)\n height = sizes[props.size as keyof Sizes] + \"px\";\n else if (!Number.isNaN(Number(props.size))) height = props.size + \"px\";\n else if (props.size === \"auto\") height = \"auto\";\n }\n\n const style = {\n maxWidth,\n maxHeight,\n height,\n transitionDuration: props.transitionDuration / 1000 + \"s\",\n };\n\n return {\n class: classes,\n style,\n ...accessibilityAttrs,\n };\n});\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n _createElementVNode(\"div\", _mergeProps(overlayAttributes.value, {\n ref_key: \"overlay\",\n ref: overlay\n }), [\n _createElementVNode(\"div\", _mergeProps(panelAttributes.value, {\n ref_key: \"panel\",\n ref: panel\n }), [\n (hasRenderedAtLeastOnce.value)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"bb-offcanvas__content\",\n ref_key: \"content\",\n ref: content\n }, [\n _renderSlot(_ctx.$slots, \"content\", { close: onCloseClick }, () => [\n _createElementVNode(\"div\", {\n class: \"bb-offcanvas__header\",\n ref_key: \"header\",\n ref: header\n }, [\n _renderSlot(_ctx.$slots, \"header\", {\n titleId: titleId,\n close: onCloseClick,\n title: _ctx.title\n }, () => [\n _createElementVNode(\"span\", {\n class: \"bb-offcanvas__title\",\n id: titleId\n }, [\n _renderSlot(_ctx.$slots, \"title\", { text: _ctx.title }, () => [\n _createTextVNode(_toDisplayString(_ctx.title), 1)\n ])\n ]),\n _createElementVNode(\"span\", _hoisted_1, [\n (_ctx.showClose)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: onCloseClick,\n type: \"button\"\n }, [\n _renderSlot(_ctx.$slots, \"close\", { text: closeLabel.value }, () => [\n _createElementVNode(\"span\", _hoisted_2, [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(closeLabel.value), 1),\n _hoisted_4\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ], 512),\n _createElementVNode(\"div\", {\n class: \"bb-offcanvas__body\",\n ref_key: \"body\",\n ref: body\n }, [\n _renderSlot(_ctx.$slots, \"description\", {\n descriptionId: descriptionId,\n text: _ctx.description\n }, () => [\n (_ctx.description)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n id: descriptionId,\n class: \"bb-offcanvas__description\"\n }, _toDisplayString(_ctx.description), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _renderSlot(_ctx.$slots, \"default\")\n ], 512),\n _hoisted_5,\n _createElementVNode(\"div\", {\n class: \"bb-offcanvas__footer\",\n ref_key: \"footer\",\n ref: footer\n }, [\n _renderSlot(_ctx.$slots, \"footer\")\n ], 512)\n ])\n ], 512))\n : _createCommentVNode(\"\", true)\n ], 16)\n ], 16)\n ]))\n}\n}\n\n})"],"names":["_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createElementVNode","_hoisted_5","_sfc_main","_defineComponent","__props","__emit","props","emit","titleId","useId","descriptionId","overlay","ref","panel","content","header","body","footer","attrs","useAttrs","activate","deactivate","useFocusTrap","nextTick","closeLabel","computed","open","opening","closed","closing","hasRenderedAtLeastOnce","lastFocusedElement","busy","onMounted","alignToModelValue","watch","onBeforeUnmount","currentlyOpenCanvases","scrollBarWidth","wait","onOverlayScroll","event","onOverlayClick","onCloseClick","overlayAttributes","classes","eventListeners","style","panelAttributes","accessibilityAttrs","maxWidth","maxHeight","height","sizes","_ctx","_cache","_openBlock","_createBlock","_Teleport","_mergeProps","_createElementBlock","_renderSlot","_createTextVNode","_toDisplayString","_createCommentVNode"],"mappings":";;;;AAGA,MAAMA,KAAa,EAAE,OAAO,wBACtBC,KAAa,EAAE,OAAO,iCACtBC,KAAa,EAAE,OAAO,+BACtBC,KAA8CC,gBAAAA,EAAA,QAAQ,EAAE,OAAO,8BAA8B;AAAA,oBAChE,OAAO;AAAA,IACtC,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EAAA,GACN;AAAA,sBACgC,QAAQ;AAAA,MACvC,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,IAAA,CACnB;AAAA,EAAA,CACF;AACH,GAAG,EAAE,GACCC,KAA8CD,gBAAAA,EAAA,OAAO,EAAE,OAAO,EAAC,MAAO,mBAAqB,GAAA,MAAM,EAAE,GAuE7EE,KAAiBC,gBAAAA,EAAA;AAAA,EAC3C,QAAQ;AAAA,EACR,OAAO;AAAA,IACL,YAAY,EAAE,SAAS,SAAS;AAAA,IAChC,SAAS,EAAE,MAAM,QAAQ;AAAA,IACzB,UAAU,EAAE,MAAM,QAAQ;AAAA,IAC1B,OAAO,EAAE,MAAM,QAAQ;AAAA,IACvB,cAAc,EAAE,SAAS,MAAM,GAAG;AAAA,IAClC,gBAAgB,EAAE,SAAS,MAAM,GAAG;AAAA,IACpC,YAAY,EAAE,MAAM,QAAQ;AAAA,IAC5B,WAAW,EAAE,MAAM,SAAS,SAAS,GAAK;AAAA,IAC1C,OAAO,CAAC;AAAA,IACR,YAAY,EAAE,SAAS,OAAO;AAAA,IAC9B,oBAAoB,EAAE,SAAS,IAAI;AAAA,IACnC,MAAM,EAAE,SAAS,KAAK;AAAA,IACtB,aAAa,CAAC;AAAA,IACd,YAAY,EAAE,MAAM,QAAQ;AAAA,IAC5B,YAAY,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;AAAA,IACpC,WAAW,EAAE,SAAS,OAAO;AAAA,EAC/B;AAAA,EACA,OAAO,CAAC,SAAS,UAAU,mBAAmB;AAAA,EAC9C,MAAMC,GAAc,EAAE,MAAMC,KAAU;AAExC,UAAMC,IAAQF,GAERG,IAAOF,GAIPG,IAAU,SAASC,EAAM,EAAE,GAAG,KAAK,IACnCC,IAAgB,eAAeD,EAAM,EAAE,GAAG,KAAK,IAE/CE,IAAUC,EAAwB,IAAI,GACtCC,IAAQD,EAAwB,IAAI,GACpCE,IAAUF,EAAwB,IAAI,GACtCG,IAASH,EAAwB,IAAI,GACrCI,IAAOJ,EAAwB,IAAI,GACnCK,IAASL,EAAwB,IAAI,GACrCM,IAAQC,KAER,EAAE,UAAAC,GAAU,YAAAC,MAAeC,GAAaT,GAAO;AAAA,MACnD,yBAAyB;AAAA;AAAA,MAEzB,mBAAmB,OACjBU,GAAS,MAAM;AACb,QAAAhB,EAAK,qBAAqB,EAAK;AAAA,MAAA,CAChC,GACM;AAAA,IACT,CACD,GAEKiB,IAAaC,EAAS,MAAMnB,EAAM,UAAU,GAE5CoB,IAAOd,EAAI,EAAK,GAChBe,IAAUf,EAAI,EAAK,GACnBgB,IAAShB,EAAI,EAAI,GACjBiB,IAAUjB,EAAI,EAAK,GACnBkB,IAAyBlB,EAAIN,EAAM,SAASA,EAAM,UAAU,GAC5DyB,IAAqBnB,EAAoB,IAAI,GAE7CoB,IAAOP,EAAS,MAAME,EAAQ,SAASE,EAAQ,KAAK;AAE1D,IAAAI,EAAU,MAAM;AAId,MAAI3B,EAAM,cAAc,EAAEoB,EAAK,SAASC,EAAQ,UAC5BO;IACpB,CACD,GAKDC;AAAA,MACE,MAAM7B,EAAM;AAAA,MACZ,MAAM;AACc,QAAA4B;MACpB;AAAA,IAAA,GAEFE,EAAgB,MAAM;AACpB,UAAI9B,EAAM,YAAY;AACpB,YAAI+B,IAAwB;AAAA,UAC1B,SAAS,KAAK,QAAQ,gBAAmB;AAAA,QAAA;AAG3C,QAAAA,KACA,SAAS,KAAK,QAAQ,eAAkBA,EAAsB,YACzDA,MACM,SAAA,KAAK,MAAM,WAAW,QACtB,SAAA,KAAK,MAAM,eAAe;AAAA,MAEvC;AAAA,IAAA,CACD;AAUD,UAAMH,IAAoB,YAAY;AACpC,UAAI5B,EAAM,YAAY;AAChB,QAACwB,EAAuB,UAC1BA,EAAuB,QAAQ,KAE7B,SAAS,kBACXC,EAAmB,QAAQ,SAAS,gBAGtCH,EAAO,QAAQ,IACfC,EAAQ,QAAQ,IAChBF,EAAQ,QAAQ;AAIhB,YAAIU,IAAwB;AAAA,UAC1B,SAAS,KAAK,QAAQ,gBAAmB;AAAA,QAAA;AAE3C,QAAAA,KACA,SAAS,KAAK,QAAQ,eAAkBA,EAAsB;AAC9D,cAAMC,IACJ,OAAO,aAAa,SAAS,gBAAgB;AACtC,iBAAA,KAAK,MAAM,WAAW,UAC/B,SAAS,KAAK,MAAM,eAAe,GAAGA,CAAc,MAE9C,MAAAC,EAAKjC,EAAM,kBAAkB,GAEnCqB,EAAQ,QAAQ,IAChBD,EAAK,QAAQ,IACbnB,EAAK,OAAO,GACHa;MAAA,OACJ;AACM,QAAAC,KACXM,EAAQ,QAAQ,IAChBD,EAAK,QAAQ,IACbG,EAAQ,QAAQ,IAEV,MAAAU,EAAKjC,EAAM,kBAAkB;AAEnC,YAAI+B,IAAwB;AAAA,UAC1B,SAAS,KAAK,QAAQ,gBAAmB;AAAA,QAAA;AAG3C,QAAAA,KACA,SAAS,KAAK,QAAQ,eAAkBA,EAAsB,YACzDA,MACM,SAAA,KAAK,MAAM,WAAW,QACtB,SAAA,KAAK,MAAM,eAAe,QAErCR,EAAQ,QAAQ,IAChBD,EAAO,QAAQ,IACfrB,EAAK,QAAQ,GACTwB,EAAmB,iBAAiB,eACtCA,EAAmB,MAAM;MAE7B;AAAA,IAAA,GAMIS,IAAkB,CAACC,MAAmB;AACtC,MAAAA,EAAM,WAAW9B,EAAQ,SAC3B8B,EAAM,eAAe;AAAA,IACvB,GAMIC,IAAiB,CAACD,MAAsB;AACxC,MAAAnC,EAAM,YAAY0B,EAAK,SACvBrB,EAAQ,SACN8B,EAAM,WAAW9B,EAAQ,UACtBL,EAAM,cACTC,EAAK,qBAAqB,EAAK;AAAA,IAGrC,GAMIoC,IAAe,MAAM;AACzB,MAAIrC,EAAM,YACVC,EAAK,qBAAqB,EAAK;AAAA,IAAA,GAG3BqC,IAAoBnB,EAAS,MAAM;AACvC,YAAMoB,IAAU;AAAA,QACd;AAAA,UACE,sCAAsC;AAAA,UACtC,4BAA4BvC,EAAM;AAAA,UAClC,sBAAsBoB,EAAK;AAAA,UAC3B,yBAAyBC,EAAQ;AAAA,UACjC,wBAAwBC,EAAO;AAAA,UAC/B,yBAAyBC,EAAQ;AAAA,UACjC,CAAC,4BAA4BvB,EAAM,UAAU,EAAE,GAAG;AAAA,UAClD,CAAC,iBAAiBA,EAAM,SAAS,EAAE,GAAG;AAAA,QACxC;AAAA,QACAA,EAAM;AAAA,QACN,KAAK,GACDwC,IAAiB;AAAA,QACrB,SAASJ;AAAA,QACT,UAAUF;AAAA,QACV,aAAaA;AAAA,QACb,SAASA;AAAA,QACT,WAAWA;AAAA,MAAA,GAGPO,IAAQ;AAAA,QACZ,oBAAoBzC,EAAM,qBAAqB,MAAO;AAAA,MAAA;AAEjD,aAAA;AAAA,QACL,OAAOuC;AAAA,QACP,OAAAE;AAAA,QACA,GAAGD;AAAA,QACH,GAAG5B;AAAA,MAAA;AAAA,IACL,CACD,GAEK8B,IAAkBvB,EAAS,MAAM;AACrC,YAAMoB,IAAU;AAAA,QACd;AAAA,UACE,uBAAuB;AAAA,UACvB,gCAAgCvC,EAAM;AAAA,QACxC;AAAA,QACAA,EAAM;AAAA,QACN,KAAK,GAED2C,IAEF;AAAA,QACF,MAAM;AAAA,QACN,cAAc;AAAA,MAAA;AAGhB,MAAInB,EAAuB,UACzBmB,EAAmB,iBAAiB,IAAIzC,GAEpCF,EAAM,gBACR2C,EAAmB,kBAAkB,IAAIvC;AAGzC,UAAAwC,GACAC,GACAC;AACJ,YAAMC,IAAe;AAAA,QACnB,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAEN,MAAI/C,EAAM,cAAc,UAAUA,EAAM,cAAc,UAChDA,EAAM,aAAuB4C,IAAA,SACxB,OAAO5C,EAAM,QAAS,WAAU4C,IAAW5C,EAAM,OAAO,OACxDA,EAAM,QAAQ+C,IACVH,IAAAG,EAAM/C,EAAM,IAAmB,IAAI,OAC3C4C,IAAW5C,EAAM,OAAO,OAEzBA,EAAM,aAAqB8C,IAAA,SACtB,OAAO9C,EAAM,QAAS,WAAU8C,IAAS9C,EAAM,OAAO,OACtDA,EAAM,QAAQ+C,IACZD,IAAAC,EAAM/C,EAAM,IAAmB,IAAI,OACpC,OAAO,MAAM,OAAOA,EAAM,IAAI,CAAC,IAChCA,EAAM,SAAS,WAAiB8C,IAAA,UADGA,IAAS9C,EAAM,OAAO;AAIpE,YAAMyC,IAAQ;AAAA,QACZ,UAAAG;AAAA,QACA,WAAAC;AAAA,QACA,QAAAC;AAAA,QACA,oBAAoB9C,EAAM,qBAAqB,MAAO;AAAA,MAAA;AAGjD,aAAA;AAAA,QACL,OAAOuC;AAAA,QACP,OAAAE;AAAA,QACA,GAAGE;AAAA,MAAA;AAAA,IACL,CACD;AAEM,WAAA,CAACK,GAAUC,OACRC,EAAc,GAAAC,EAAaC,GAAW,EAAE,IAAI,UAAU;AAAA,MAC5D1D,EAAoB,OAAO2D,EAAYf,EAAkB,OAAO;AAAA,QAC9D,SAAS;AAAA,QACT,KAAKjC;AAAA,MAAA,CACN,GAAG;AAAA,QACFX,EAAoB,OAAO2D,EAAYX,EAAgB,OAAO;AAAA,UAC5D,SAAS;AAAA,UACT,KAAKnC;AAAA,QAAA,CACN,GAAG;AAAA,UACDiB,EAAuB,SACnB0B,KAAcI,EAAoB,OAAO;AAAA,YACxC,KAAK;AAAA,YACL,OAAO;AAAA,YACP,SAAS;AAAA,YACT,KAAK9C;AAAA,UAAA,GACJ;AAAA,YACD+C,EAAYP,EAAK,QAAQ,WAAW,EAAE,OAAOX,EAAA,GAAgB,MAAM;AAAA,cACjE3C,EAAoB,OAAO;AAAA,gBACzB,OAAO;AAAA,gBACP,SAAS;AAAA,gBACT,KAAKe;AAAA,cAAA,GACJ;AAAA,gBACD8C,EAAYP,EAAK,QAAQ,UAAU;AAAA,kBACjC,SAAA9C;AAAA,kBACA,OAAOmC;AAAA,kBACP,OAAOW,EAAK;AAAA,gBAAA,GACX,MAAM;AAAA,kBACPtD,EAAoB,QAAQ;AAAA,oBAC1B,OAAO;AAAA,oBACP,IAAIQ;AAAA,kBAAA,GACH;AAAA,oBACDqD,EAAYP,EAAK,QAAQ,SAAS,EAAE,MAAMA,EAAK,MAAM,GAAG,MAAM;AAAA,sBAC5DQ,GAAiBC,EAAiBT,EAAK,KAAK,GAAG,CAAC;AAAA,oBAAA,CACjD;AAAA,kBAAA,CACF;AAAA,kBACDtD,EAAoB,QAAQJ,IAAY;AAAA,oBACrC0D,EAAK,aACDE,KAAcI,EAAoB,UAAU;AAAA,sBAC3C,KAAK;AAAA,sBACL,SAASjB;AAAA,sBACT,MAAM;AAAA,oBAAA,GACL;AAAA,sBACDkB,EAAYP,EAAK,QAAQ,SAAS,EAAE,MAAM9B,EAAW,MAAM,GAAG,MAAM;AAAA,wBAClExB,EAAoB,QAAQH,IAAY;AAAA,0BACtCG,EAAoB,QAAQF,IAAYiE,EAAiBvC,EAAW,KAAK,GAAG,CAAC;AAAA,0BAC7EzB;AAAA,wBAAA,CACD;AAAA,sBAAA,CACF;AAAA,oBAAA,CACF,KACDiE,EAAoB,IAAI,EAAI;AAAA,kBAAA,CACjC;AAAA,gBAAA,CACF;AAAA,iBACA,GAAG;AAAA,cACNhE,EAAoB,OAAO;AAAA,gBACzB,OAAO;AAAA,gBACP,SAAS;AAAA,gBACT,KAAKgB;AAAA,cAAA,GACJ;AAAA,gBACD6C,EAAYP,EAAK,QAAQ,eAAe;AAAA,kBACtC,eAAA5C;AAAA,kBACA,MAAM4C,EAAK;AAAA,gBAAA,GACV,MAAM;AAAA,kBACNA,EAAK,eACDE,KAAcI,EAAoB,OAAO;AAAA,oBACxC,KAAK;AAAA,oBACL,IAAIlD;AAAA,oBACJ,OAAO;AAAA,kBAAA,GACNqD,EAAiBT,EAAK,WAAW,GAAG,CAAC,KACxCU,EAAoB,IAAI,EAAI;AAAA,gBAAA,CACjC;AAAA,gBACDH,EAAYP,EAAK,QAAQ,SAAS;AAAA,iBACjC,GAAG;AAAA,cACNrD;AAAA,cACAD,EAAoB,OAAO;AAAA,gBACzB,OAAO;AAAA,gBACP,SAAS;AAAA,gBACT,KAAKiB;AAAA,cAAA,GACJ;AAAA,gBACD4C,EAAYP,EAAK,QAAQ,QAAQ;AAAA,iBAChC,GAAG;AAAA,YAAA,CACP;AAAA,UACA,GAAA,GAAG,KACNU,EAAoB,IAAI,EAAI;AAAA,WAC/B,EAAE;AAAA,SACJ,EAAE;AAAA,IAAA,CACN;AAAA,EAEH;AAEA,CAAC;"}
|
package/dist/index79.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { defineComponent as N, ref as a, computed as C, openBlock as f, createElementBlock as $, mergeProps as T, createElementVNode as s, renderSlot as B, normalizeProps as V, guardReactiveProps as I, unref as m, createBlock as P, Teleport as R, normalizeClass as U, normalizeStyle as j, withCtx as G, createCommentVNode as D, nextTick as J } from "vue";
|
|
2
2
|
import { useFloating as K, arrow as Q } from "./index222.js";
|
|
3
|
-
import { useFocusTrap as W } from "./
|
|
3
|
+
import { useFocusTrap as W } from "./index211.js";
|
|
4
4
|
import { useId as X } from "./index7.js";
|
|
5
5
|
import { wait as E } from "./index122.js";
|
|
6
6
|
import Y from "./index9.js";
|
|
7
7
|
import "./index10.js";
|
|
8
|
-
import { autoUpdate as Z } from "./
|
|
9
|
-
import { flip as ee, offset as oe, shift as te } from "./
|
|
8
|
+
import { autoUpdate as Z } from "./index206.js";
|
|
9
|
+
import { flip as ee, offset as oe, shift as te } from "./index209.js";
|
|
10
10
|
const ae = ["id"], re = { class: "bb-popover__bubble" }, ne = /* @__PURE__ */ s("span", { class: "bb-popover__close-label" }, "Chiudi", -1), se = /* @__PURE__ */ s("svg", {
|
|
11
11
|
viewBox: "0 0 24 24",
|
|
12
12
|
fill: "none",
|
package/dist/index8.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { reactive as L, watch as
|
|
1
|
+
import { reactive as L, watch as f, toValue as Y, computed as g, provide as D } from "vue";
|
|
2
2
|
import { mapValues as G } from "./index127.js";
|
|
3
3
|
import { useStepper as H } from "./index128.js";
|
|
4
4
|
import { useRoute as Q } from "./index129.js";
|
|
5
5
|
import { useRouter as X } from "./index130.js";
|
|
6
6
|
import { isNotNil as p } from "./index124.js";
|
|
7
7
|
const Z = Symbol(), R = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>[\s\S]+))/, J = (i) => {
|
|
8
|
-
var r,
|
|
8
|
+
var r, u;
|
|
9
9
|
const e = i.match(R);
|
|
10
|
-
return ((r = e == null ? void 0 : e.groups) == null ? void 0 : r.step) ?? ((
|
|
11
|
-
},
|
|
10
|
+
return ((r = e == null ? void 0 : e.groups) == null ? void 0 : r.step) ?? ((u = e == null ? void 0 : e.groups) == null ? void 0 : u.step2) ?? null;
|
|
11
|
+
}, ae = (i) => {
|
|
12
12
|
if (!i.name)
|
|
13
13
|
throw new Error(
|
|
14
14
|
"You need to provide a unique name for the current wizard instance to be used to save data"
|
|
15
15
|
);
|
|
16
|
-
const e = Q(), r = X(),
|
|
17
|
-
if (
|
|
16
|
+
const e = Q(), r = X(), u = i.useNavigation ?? !0, q = i.navigationMode ?? "query", b = i.persist ?? !0;
|
|
17
|
+
if (u && (!e.value || !r))
|
|
18
18
|
throw new Error(
|
|
19
19
|
"Navigation is enabled but could not retrieve the router instance in useWizard."
|
|
20
20
|
);
|
|
@@ -25,22 +25,22 @@ const Z = Symbol(), R = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>[
|
|
|
25
25
|
JSON.parse(sessionStorage.getItem(i.name))
|
|
26
26
|
) : i.initialState
|
|
27
27
|
);
|
|
28
|
-
b &&
|
|
28
|
+
b && f(n, () => {
|
|
29
29
|
sessionStorage.setItem(i.name, JSON.stringify(n));
|
|
30
30
|
});
|
|
31
|
-
const W = Y(i.steps), o =
|
|
31
|
+
const W = Y(i.steps), o = g(
|
|
32
32
|
() => Object.entries(W).reduce(
|
|
33
|
-
(t, [s,
|
|
33
|
+
(t, [s, a]) => (a.condition && !a.condition(n) || (t[s] = { ...a, key: s }), t),
|
|
34
34
|
{}
|
|
35
35
|
)
|
|
36
|
-
),
|
|
36
|
+
), m = g(
|
|
37
37
|
() => G(o.value, (t) => ({
|
|
38
38
|
...t,
|
|
39
39
|
isValid: t.isValid ? t.isValid(n) : !0
|
|
40
40
|
}))
|
|
41
41
|
);
|
|
42
42
|
let c = null;
|
|
43
|
-
if (
|
|
43
|
+
if (u && p(e.value)) {
|
|
44
44
|
let t = null;
|
|
45
45
|
if (q === "query")
|
|
46
46
|
e.value.query.step && (t = e.value.query.step);
|
|
@@ -54,23 +54,23 @@ const Z = Symbol(), R = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>[
|
|
|
54
54
|
for (const t in o.value) {
|
|
55
55
|
if (t === c)
|
|
56
56
|
break;
|
|
57
|
-
const s =
|
|
57
|
+
const s = m.value[t];
|
|
58
58
|
if (!s || !s.isValid) {
|
|
59
59
|
c = null;
|
|
60
60
|
break;
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
const {
|
|
64
|
-
steps:
|
|
64
|
+
steps: S,
|
|
65
65
|
current: T,
|
|
66
66
|
goToNext: V,
|
|
67
67
|
goToPrevious: N,
|
|
68
|
-
goTo:
|
|
68
|
+
goTo: d,
|
|
69
69
|
index: $,
|
|
70
|
-
at:
|
|
71
|
-
get:
|
|
72
|
-
goBackTo:
|
|
73
|
-
isAfter:
|
|
70
|
+
at: w,
|
|
71
|
+
get: O,
|
|
72
|
+
goBackTo: x,
|
|
73
|
+
isAfter: k,
|
|
74
74
|
isBefore: P,
|
|
75
75
|
isCurrent: j,
|
|
76
76
|
isFirst: A,
|
|
@@ -81,19 +81,19 @@ const Z = Symbol(), R = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>[
|
|
|
81
81
|
previous: M,
|
|
82
82
|
stepNames: U
|
|
83
83
|
} = H(
|
|
84
|
-
|
|
84
|
+
m,
|
|
85
85
|
c || Object.values(o.value)[0].key
|
|
86
|
-
), l =
|
|
86
|
+
), l = g(() => Object.keys(o.value)[$.value]);
|
|
87
87
|
if (D(Z, {
|
|
88
88
|
goToNext: V,
|
|
89
89
|
goToPrevious: N,
|
|
90
90
|
current: T,
|
|
91
91
|
data: n,
|
|
92
|
-
steps:
|
|
93
|
-
at:
|
|
94
|
-
get:
|
|
95
|
-
goBackTo:
|
|
96
|
-
isAfter:
|
|
92
|
+
steps: S,
|
|
93
|
+
at: w,
|
|
94
|
+
get: O,
|
|
95
|
+
goBackTo: x,
|
|
96
|
+
isAfter: k,
|
|
97
97
|
isBefore: P,
|
|
98
98
|
isCurrent: j,
|
|
99
99
|
isFirst: A,
|
|
@@ -103,9 +103,9 @@ const Z = Symbol(), R = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>[
|
|
|
103
103
|
next: I,
|
|
104
104
|
previous: M,
|
|
105
105
|
stepNames: U
|
|
106
|
-
}),
|
|
106
|
+
}), u)
|
|
107
107
|
if (q === "query")
|
|
108
|
-
|
|
108
|
+
f(
|
|
109
109
|
l,
|
|
110
110
|
() => {
|
|
111
111
|
p(r) && p(e.value) && r.push({
|
|
@@ -114,7 +114,7 @@ const Z = Symbol(), R = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>[
|
|
|
114
114
|
});
|
|
115
115
|
},
|
|
116
116
|
{ immediate: !0 }
|
|
117
|
-
),
|
|
117
|
+
), f(
|
|
118
118
|
() => {
|
|
119
119
|
var t;
|
|
120
120
|
return (t = e.value) == null ? void 0 : t.query.step;
|
|
@@ -123,36 +123,36 @@ const Z = Symbol(), R = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>[
|
|
|
123
123
|
if (t) {
|
|
124
124
|
const s = t;
|
|
125
125
|
if (s in o.value) {
|
|
126
|
-
const
|
|
127
|
-
|
|
126
|
+
const a = s, v = Object.keys(o.value);
|
|
127
|
+
v.slice(
|
|
128
128
|
0,
|
|
129
|
-
|
|
129
|
+
v.indexOf(a)
|
|
130
130
|
).every(
|
|
131
131
|
(B) => {
|
|
132
132
|
var y;
|
|
133
|
-
return (y =
|
|
133
|
+
return (y = m.value[B]) == null ? void 0 : y.isValid;
|
|
134
134
|
}
|
|
135
|
-
) &&
|
|
135
|
+
) && d(a);
|
|
136
136
|
}
|
|
137
137
|
} else
|
|
138
|
-
|
|
138
|
+
d(S.value[0]);
|
|
139
139
|
}
|
|
140
140
|
);
|
|
141
141
|
else {
|
|
142
|
-
const t =
|
|
142
|
+
const t = g(() => {
|
|
143
143
|
if (p(e.value))
|
|
144
144
|
return J(e.value.fullPath);
|
|
145
145
|
});
|
|
146
|
-
|
|
146
|
+
f(
|
|
147
147
|
l,
|
|
148
|
-
() => {
|
|
149
|
-
p(e.value) && p(r) && (e.value.path.includes("step") ? r.push({
|
|
148
|
+
async () => {
|
|
149
|
+
p(e.value) && p(r) && (e.value.path.includes("step") ? await r.push({
|
|
150
150
|
query: e.value.query,
|
|
151
151
|
path: e.value.path.replace(
|
|
152
152
|
R,
|
|
153
153
|
`step/${l.value}`
|
|
154
154
|
)
|
|
155
|
-
}) : r.push({
|
|
155
|
+
}) : await r.push({
|
|
156
156
|
query: e.value.query,
|
|
157
157
|
// Normalizes paths with / and without
|
|
158
158
|
path: (e.value.path + `/step/${l.value}`).replace(
|
|
@@ -163,40 +163,39 @@ const Z = Symbol(), R = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>[
|
|
|
163
163
|
}));
|
|
164
164
|
},
|
|
165
165
|
{ immediate: !0, flush: "post" }
|
|
166
|
-
),
|
|
166
|
+
), f(
|
|
167
167
|
() => t.value,
|
|
168
168
|
(s) => {
|
|
169
169
|
if (s) {
|
|
170
|
-
const
|
|
171
|
-
if (
|
|
172
|
-
const
|
|
170
|
+
const a = s;
|
|
171
|
+
if (a in o.value) {
|
|
172
|
+
const v = a, h = Object.keys(o.value);
|
|
173
173
|
h.slice(
|
|
174
174
|
0,
|
|
175
|
-
h.indexOf(
|
|
175
|
+
h.indexOf(v)
|
|
176
176
|
).every(
|
|
177
177
|
(y) => {
|
|
178
178
|
var E;
|
|
179
179
|
return (E = o.value[y]) == null ? void 0 : E.isValid;
|
|
180
180
|
}
|
|
181
|
-
) && v
|
|
181
|
+
) && d(v);
|
|
182
182
|
}
|
|
183
|
-
}
|
|
184
|
-
v(g.value[0]);
|
|
183
|
+
}
|
|
185
184
|
}
|
|
186
185
|
);
|
|
187
186
|
}
|
|
188
187
|
return {
|
|
189
|
-
steps:
|
|
188
|
+
steps: S,
|
|
190
189
|
current: T,
|
|
191
190
|
goToNext: V,
|
|
192
191
|
goToPrevious: N,
|
|
193
|
-
goTo:
|
|
192
|
+
goTo: d,
|
|
194
193
|
key: l,
|
|
195
194
|
data: n,
|
|
196
|
-
at:
|
|
197
|
-
get:
|
|
198
|
-
goBackTo:
|
|
199
|
-
isAfter:
|
|
195
|
+
at: w,
|
|
196
|
+
get: O,
|
|
197
|
+
goBackTo: x,
|
|
198
|
+
isAfter: k,
|
|
200
199
|
isBefore: P,
|
|
201
200
|
isCurrent: j,
|
|
202
201
|
isFirst: A,
|
|
@@ -209,7 +208,7 @@ const Z = Symbol(), R = /((step\/)(?<step>[\s\S]+?)(?=[/?]))|((step\/)(?<step2>[
|
|
|
209
208
|
};
|
|
210
209
|
};
|
|
211
210
|
export {
|
|
212
|
-
|
|
211
|
+
ae as useWizard,
|
|
213
212
|
Z as wizardInjectionKey
|
|
214
213
|
};
|
|
215
214
|
//# sourceMappingURL=index8.js.map
|
package/dist/index8.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index8.js","sources":["../src/composables/useWizard.ts"],"sourcesContent":["import { computed, provide, reactive, watch, toValue } from \"vue\";\nimport { mapValues } from \"@/utilities/functions/mapValues\";\nimport { useStepper } from \"@vueuse/core\";\nimport { useRoute } from \"./useRoute\";\nimport { useRouter } from \"./useRouter\";\nimport type { ComputedRef, MaybeRef } from \"vue\";\nimport { isNotNil } from \"@/utilities/functions/isNotNil\";\n\nexport const wizardInjectionKey = Symbol();\nexport type Step<U> = {\n /**\n * Function that accepts a state object and returns a boolean.\n * When step are accessed at the end of the pipeline the result\n * is provided so you don't have to run the function yourself.\n * It determines if the validation has passed for the step.\n */\n isValid?: (state: U) => boolean;\n /**\n * Function that accepts a state object and returns a boolean.\n * When step are accessed at the end of the pipeline the result\n * is provided so you don't have to run the function yourself.\n * Steps that do not pass the condition are removed.\n */\n condition?: (state: U) => boolean;\n [key: string]: any;\n};\nexport type WizardState<T extends Record<string, any>> = Pick<\n ReturnType<typeof useWizard<T>>,\n | \"data\"\n | \"goToNext\"\n | \"goToPrevious\"\n | \"current\"\n | \"steps\"\n | \"at\"\n | \"get\"\n | \"goBackTo\"\n | \"isAfter\"\n | \"isBefore\"\n | \"isCurrent\"\n | \"isFirst\"\n | \"isLast\"\n | \"isNext\"\n | \"isPrevious\"\n | \"next\"\n | \"previous\"\n | \"stepNames\"\n>;\n\nconst regexMatchStep =\n /((step\\/)(?<step>[\\s\\S]+?)(?=[/?]))|((step\\/)(?<step2>[\\s\\S]+))/;\n/**\n * With a url that follows the rule xyz.com/anything/step/:nameofthestep[/?query]\n * will match the :nameofthestep substring\n */\nconst extractStepFromUrl = (url: string) => {\n const match = url.match(regexMatchStep);\n return match?.groups?.step ?? match?.groups?.step2 ?? null;\n};\nexport const useWizard = <T extends object>(params: {\n /**\n * The steps definition for the wizard\n */\n steps: MaybeRef<Record<string, Step<T>>>;\n /**\n * Name of the wizard used to persist state\n */\n name: string;\n /**\n * Initial set of data to be made available throughout\n */\n initialState: T;\n /**\n * When navogation is enabled, to whether use the query parameters or an entire substring of the URL like xyz/steps/....\n * The latter useful with nuxt so you can leverage the automatic import of components based on the URL.\n */\n navigationMode?: \"query\" | \"route\";\n /**\n * Whether to use navigation at all. When disabled no query or URL is changed.\n */\n useNavigation?: boolean;\n /**\n *\n */\n persist?: boolean;\n}) => {\n if (!params.name) {\n throw new Error(\n \"You need to provide a unique name for the current wizard instance to be used to save data\"\n );\n }\n const route = useRoute();\n const router = useRouter();\n\n const useNavigation = params.useNavigation ?? true;\n const navigationMode = params.navigationMode ?? \"query\";\n const persist = params.persist ?? true;\n\n if (useNavigation && (!route.value || !router)) {\n throw new Error(\n \"Navigation is enabled but could not retrieve the router instance in useWizard.\"\n );\n }\n\n /**\n * Initial state is either read from session storage or the one provided\n */\n const innerState = reactive<typeof params.initialState>(\n persist && sessionStorage.getItem(params.name)\n ? Object.assign(\n {},\n params.initialState,\n JSON.parse(sessionStorage.getItem(params.name)!)\n )\n : params.initialState\n );\n\n if (persist) {\n /**\n * Every time the state changes save it to sessionStorage\n */\n watch(innerState, () => {\n sessionStorage.setItem(params.name, JSON.stringify(innerState));\n });\n }\n\n /**\n * Steps can be passed as ref so we need to unwrap them\n */\n const unwrappedSteps = toValue(params.steps);\n const filteredSteps = computed(() =>\n Object.entries(unwrappedSteps).reduce(\n (acc: typeof unwrappedSteps, [key, step]) => {\n if (step.condition) {\n if (!step.condition(innerState as T)) {\n return acc;\n }\n }\n acc[key] = { ...step, key };\n return acc;\n },\n {}\n )\n );\n\n /**\n * Steps can have a isValid function that receives the current state\n * but we don't want to have to call it every single time so we call it once here\n */\n const mappedSteps = computed(() =>\n mapValues(filteredSteps.value, (step) => {\n return {\n ...step,\n isValid: step.isValid ? step.isValid(innerState as T) : true,\n };\n })\n );\n\n /**\n * Get the initial step from the query.\n * If it exists check that every step before it is also valid\n * so user cannot manually jump by changing the URL\n */\n let initialStep = null;\n if (useNavigation && isNotNil(route.value)) {\n let step: string | null = null;\n if (navigationMode === \"query\") {\n if (route.value.query.step) {\n step = route.value.query.step as string;\n }\n } else {\n const stepFromUrl = extractStepFromUrl(route.value.fullPath);\n if (stepFromUrl) {\n step = stepFromUrl;\n }\n }\n initialStep = step;\n }\n\n if (initialStep) {\n for (const stepName in filteredSteps.value) {\n if (stepName === initialStep) break;\n const current = mappedSteps.value[stepName];\n if (!current || !current.isValid) {\n initialStep = null;\n break;\n }\n }\n }\n\n /**\n * Define the state of the wizard\n * A few data come from useStepper\n */\n const {\n steps,\n current,\n goToNext,\n goToPrevious,\n goTo,\n index,\n at,\n get,\n goBackTo,\n isAfter,\n isBefore,\n isCurrent,\n isFirst,\n isLast,\n isNext,\n isPrevious,\n next,\n previous,\n stepNames,\n } = useStepper(\n mappedSteps as any,\n initialStep || Object.values(filteredSteps.value)[0].key\n );\n\n const key = computed(() => Object.keys(filteredSteps.value)[index.value]);\n\n /**\n * Complete state object\n */\n const state = {\n goToNext,\n goToPrevious,\n current: current as ComputedRef<Step<T> & { isValid: boolean }>,\n data: innerState,\n steps,\n at,\n get,\n goBackTo,\n isAfter,\n isBefore,\n isCurrent,\n isFirst,\n isLast,\n isNext,\n isPrevious,\n next,\n previous,\n stepNames,\n };\n\n provide(wizardInjectionKey, state);\n\n if (useNavigation) {\n if (navigationMode === \"query\") {\n /**\n * Every time the current step changes update route\n */\n watch(\n key,\n () => {\n if (isNotNil(router) && isNotNil(route.value)) {\n router.push({\n ...route,\n query: { ...route.value.query, step: key.value ?? null },\n });\n }\n },\n { immediate: true }\n );\n\n /**\n * Every time the route changes align the current step to the route\n */\n watch(\n () => route.value?.query.step,\n (value) => {\n if (value) {\n const stepAsString = value as string;\n if (stepAsString in filteredSteps.value) {\n const stepAsKey = stepAsString;\n const stepKeys = Object.keys(filteredSteps.value);\n const stepsPriorToTarget = stepKeys.slice(\n 0,\n stepKeys.indexOf(stepAsKey)\n );\n const allValid = stepsPriorToTarget.every(\n (key) => mappedSteps.value[key]?.isValid\n );\n if (allValid) {\n goTo(stepAsKey);\n }\n }\n } else {\n goTo(steps.value[0]);\n }\n }\n );\n } else {\n const stepFromUrl = computed(() => {\n if (isNotNil(route.value)) {\n return extractStepFromUrl(route.value.fullPath);\n }\n });\n\n /**\n * Every time the current step changes update route\n */\n watch(\n key,\n () => {\n if (isNotNil(route.value) && isNotNil(router)) {\n if (route.value.path.includes(\"step\")) {\n router.push({\n query: route.value.query,\n path: route.value.path.replace(\n regexMatchStep,\n `step/${key.value}`\n ),\n });\n } else {\n router.push({\n query: route.value.query,\n // Normalizes paths with / and without\n path: (route.value.path + `/step/${key.value}`).replace(\n \"//\",\n \"/\"\n ),\n replace: true,\n });\n }\n }\n },\n { immediate: true, flush: 'post' }\n );\n\n /**\n * Every time the route changes align the current step to the route\n */\n watch(\n () => stepFromUrl.value,\n (value) => {\n if (value) {\n const stepAsString = value as string;\n if (stepAsString in filteredSteps.value) {\n const stepAsKey = stepAsString;\n const stepKeys = Object.keys(filteredSteps.value);\n const stepsPriorToTarget = stepKeys.slice(\n 0,\n stepKeys.indexOf(stepAsKey)\n );\n const allValid = stepsPriorToTarget.every(\n (key) => filteredSteps.value[key]?.isValid\n );\n if (allValid) {\n goTo(stepAsKey);\n }\n }\n } else {\n goTo(steps.value[0]);\n }\n }\n );\n }\n }\n\n return {\n steps,\n current: current as ComputedRef<Step<T> & { isValid: boolean }>,\n goToNext,\n goToPrevious,\n goTo,\n key,\n data: innerState,\n at,\n get,\n goBackTo,\n isAfter,\n isBefore,\n isCurrent,\n isFirst,\n isLast,\n isNext,\n isPrevious,\n next,\n previous,\n stepNames,\n };\n};\n"],"names":["wizardInjectionKey","regexMatchStep","extractStepFromUrl","url","match","_a","_b","useWizard","params","route","useRoute","router","useRouter","useNavigation","navigationMode","persist","innerState","reactive","watch","unwrappedSteps","toValue","filteredSteps","computed","acc","key","step","mappedSteps","mapValues","initialStep","isNotNil","stepFromUrl","stepName","current","steps","goToNext","goToPrevious","goTo","index","at","get","goBackTo","isAfter","isBefore","isCurrent","isFirst","isLast","isNext","isPrevious","next","previous","stepNames","useStepper","provide","value","stepAsString","stepAsKey","stepKeys"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index8.js","sources":["../src/composables/useWizard.ts"],"sourcesContent":["import { computed, provide, reactive, watch, toValue } from \"vue\";\nimport { mapValues } from \"@/utilities/functions/mapValues\";\nimport { useStepper } from \"@vueuse/core\";\nimport { useRoute } from \"./useRoute\";\nimport { useRouter } from \"./useRouter\";\nimport type { ComputedRef, MaybeRef } from \"vue\";\nimport { isNotNil } from \"@/utilities/functions/isNotNil\";\n\nexport const wizardInjectionKey = Symbol();\nexport type Step<U> = {\n /**\n * Function that accepts a state object and returns a boolean.\n * When step are accessed at the end of the pipeline the result\n * is provided so you don't have to run the function yourself.\n * It determines if the validation has passed for the step.\n */\n isValid?: (state: U) => boolean;\n /**\n * Function that accepts a state object and returns a boolean.\n * When step are accessed at the end of the pipeline the result\n * is provided so you don't have to run the function yourself.\n * Steps that do not pass the condition are removed.\n */\n condition?: (state: U) => boolean;\n [key: string]: any;\n};\nexport type WizardState<T extends Record<string, any>> = Pick<\n ReturnType<typeof useWizard<T>>,\n | \"data\"\n | \"goToNext\"\n | \"goToPrevious\"\n | \"current\"\n | \"steps\"\n | \"at\"\n | \"get\"\n | \"goBackTo\"\n | \"isAfter\"\n | \"isBefore\"\n | \"isCurrent\"\n | \"isFirst\"\n | \"isLast\"\n | \"isNext\"\n | \"isPrevious\"\n | \"next\"\n | \"previous\"\n | \"stepNames\"\n>;\n\nconst regexMatchStep =\n /((step\\/)(?<step>[\\s\\S]+?)(?=[/?]))|((step\\/)(?<step2>[\\s\\S]+))/;\n/**\n * With a url that follows the rule xyz.com/anything/step/:nameofthestep[/?query]\n * will match the :nameofthestep substring\n */\nconst extractStepFromUrl = (url: string) => {\n const match = url.match(regexMatchStep);\n return match?.groups?.step ?? match?.groups?.step2 ?? null;\n};\nexport const useWizard = <T extends object>(params: {\n /**\n * The steps definition for the wizard\n */\n steps: MaybeRef<Record<string, Step<T>>>;\n /**\n * Name of the wizard used to persist state\n */\n name: string;\n /**\n * Initial set of data to be made available throughout\n */\n initialState: T;\n /**\n * When navogation is enabled, to whether use the query parameters or an entire substring of the URL like xyz/steps/....\n * The latter useful with nuxt so you can leverage the automatic import of components based on the URL.\n */\n navigationMode?: \"query\" | \"route\";\n /**\n * Whether to use navigation at all. When disabled no query or URL is changed.\n */\n useNavigation?: boolean;\n /**\n *\n */\n persist?: boolean;\n}) => {\n if (!params.name) {\n throw new Error(\n \"You need to provide a unique name for the current wizard instance to be used to save data\"\n );\n }\n const route = useRoute();\n const router = useRouter();\n\n const useNavigation = params.useNavigation ?? true;\n const navigationMode = params.navigationMode ?? \"query\";\n const persist = params.persist ?? true;\n\n if (useNavigation && (!route.value || !router)) {\n throw new Error(\n \"Navigation is enabled but could not retrieve the router instance in useWizard.\"\n );\n }\n\n /**\n * Initial state is either read from session storage or the one provided\n */\n const innerState = reactive<typeof params.initialState>(\n persist && sessionStorage.getItem(params.name)\n ? Object.assign(\n {},\n params.initialState,\n JSON.parse(sessionStorage.getItem(params.name)!)\n )\n : params.initialState\n );\n\n if (persist) {\n /**\n * Every time the state changes save it to sessionStorage\n */\n watch(innerState, () => {\n sessionStorage.setItem(params.name, JSON.stringify(innerState));\n });\n }\n\n /**\n * Steps can be passed as ref so we need to unwrap them\n */\n const unwrappedSteps = toValue(params.steps);\n const filteredSteps = computed(() =>\n Object.entries(unwrappedSteps).reduce(\n (acc: typeof unwrappedSteps, [key, step]) => {\n if (step.condition) {\n if (!step.condition(innerState as T)) {\n return acc;\n }\n }\n acc[key] = { ...step, key };\n return acc;\n },\n {}\n )\n );\n\n /**\n * Steps can have a isValid function that receives the current state\n * but we don't want to have to call it every single time so we call it once here\n */\n const mappedSteps = computed(() =>\n mapValues(filteredSteps.value, (step) => {\n return {\n ...step,\n isValid: step.isValid ? step.isValid(innerState as T) : true,\n };\n })\n );\n\n /**\n * Get the initial step from the query.\n * If it exists check that every step before it is also valid\n * so user cannot manually jump by changing the URL\n */\n let initialStep = null;\n if (useNavigation && isNotNil(route.value)) {\n let step: string | null = null;\n if (navigationMode === \"query\") {\n if (route.value.query.step) {\n step = route.value.query.step as string;\n }\n } else {\n const stepFromUrl = extractStepFromUrl(route.value.fullPath);\n if (stepFromUrl) {\n step = stepFromUrl;\n }\n }\n initialStep = step;\n }\n\n if (initialStep) {\n for (const stepName in filteredSteps.value) {\n if (stepName === initialStep) break;\n const current = mappedSteps.value[stepName];\n if (!current || !current.isValid) {\n initialStep = null;\n break;\n }\n }\n }\n\n /**\n * Define the state of the wizard\n * A few data come from useStepper\n */\n const {\n steps,\n current,\n goToNext,\n goToPrevious,\n goTo,\n index,\n at,\n get,\n goBackTo,\n isAfter,\n isBefore,\n isCurrent,\n isFirst,\n isLast,\n isNext,\n isPrevious,\n next,\n previous,\n stepNames,\n } = useStepper(\n mappedSteps as any,\n initialStep || Object.values(filteredSteps.value)[0].key\n );\n\n const key = computed(() => Object.keys(filteredSteps.value)[index.value]);\n\n /**\n * Complete state object\n */\n const state = {\n goToNext,\n goToPrevious,\n current: current as ComputedRef<Step<T> & { isValid: boolean }>,\n data: innerState,\n steps,\n at,\n get,\n goBackTo,\n isAfter,\n isBefore,\n isCurrent,\n isFirst,\n isLast,\n isNext,\n isPrevious,\n next,\n previous,\n stepNames,\n };\n\n provide(wizardInjectionKey, state);\n\n if (useNavigation) {\n if (navigationMode === \"query\") {\n /**\n * Every time the current step changes update route\n */\n watch(\n key,\n () => {\n if (isNotNil(router) && isNotNil(route.value)) {\n router.push({\n ...route,\n query: { ...route.value.query, step: key.value ?? null },\n });\n }\n },\n { immediate: true }\n );\n\n /**\n * Every time the route changes align the current step to the route\n */\n watch(\n () => route.value?.query.step,\n (value) => {\n if (value) {\n const stepAsString = value as string;\n if (stepAsString in filteredSteps.value) {\n const stepAsKey = stepAsString;\n const stepKeys = Object.keys(filteredSteps.value);\n const stepsPriorToTarget = stepKeys.slice(\n 0,\n stepKeys.indexOf(stepAsKey)\n );\n const allValid = stepsPriorToTarget.every(\n (key) => mappedSteps.value[key]?.isValid\n );\n if (allValid) {\n goTo(stepAsKey);\n }\n }\n } else {\n goTo(steps.value[0]);\n }\n }\n );\n } else {\n const stepFromUrl = computed(() => {\n if (isNotNil(route.value)) {\n return extractStepFromUrl(route.value.fullPath);\n }\n });\n\n /**\n * Every time the current step changes update route\n */\n watch(\n key,\n async () => {\n if (isNotNil(route.value) && isNotNil(router)) {\n if (route.value.path.includes(\"step\")) {\n await router.push({\n query: route.value.query,\n path: route.value.path.replace(\n regexMatchStep,\n `step/${key.value}`\n ),\n });\n } else {\n await router.push({\n query: route.value.query,\n // Normalizes paths with / and without\n path: (route.value.path + `/step/${key.value}`).replace(\n \"//\",\n \"/\"\n ),\n replace: true,\n });\n }\n }\n },\n { immediate: true, flush: 'post' }\n );\n\n /**\n * Every time the route changes align the current step to the route\n */\n watch(\n () => stepFromUrl.value,\n (value) => {\n if (value) {\n const stepAsString = value as string;\n if (stepAsString in filteredSteps.value) {\n const stepAsKey = stepAsString;\n const stepKeys = Object.keys(filteredSteps.value);\n const stepsPriorToTarget = stepKeys.slice(\n 0,\n stepKeys.indexOf(stepAsKey)\n );\n const allValid = stepsPriorToTarget.every(\n (key) => filteredSteps.value[key]?.isValid\n );\n if (allValid) {\n goTo(stepAsKey);\n }\n }\n }\n }\n );\n }\n }\n\n return {\n steps,\n current: current as ComputedRef<Step<T> & { isValid: boolean }>,\n goToNext,\n goToPrevious,\n goTo,\n key,\n data: innerState,\n at,\n get,\n goBackTo,\n isAfter,\n isBefore,\n isCurrent,\n isFirst,\n isLast,\n isNext,\n isPrevious,\n next,\n previous,\n stepNames,\n };\n};\n"],"names":["wizardInjectionKey","regexMatchStep","extractStepFromUrl","url","match","_a","_b","useWizard","params","route","useRoute","router","useRouter","useNavigation","navigationMode","persist","innerState","reactive","watch","unwrappedSteps","toValue","filteredSteps","computed","acc","key","step","mappedSteps","mapValues","initialStep","isNotNil","stepFromUrl","stepName","current","steps","goToNext","goToPrevious","goTo","index","at","get","goBackTo","isAfter","isBefore","isCurrent","isFirst","isLast","isNext","isPrevious","next","previous","stepNames","useStepper","provide","value","stepAsString","stepAsKey","stepKeys"],"mappings":"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"}
|