@semplice-studio/pa-design-system 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/PaAccordion/PaAccordion.vue.d.ts +0 -1
- package/dist/components/PaAccordion/PaAccordion.vue.js +3 -5
- package/dist/components/PaAccordion/PaAccordion.vue.js.map +1 -1
- package/dist/components/PaAccordion/PaAccordion.vue2.js +24 -30
- package/dist/components/PaAccordion/PaAccordion.vue2.js.map +1 -1
- package/dist/components/PaBanner/PaBanner.vue.js +6 -6
- package/dist/components/PaBanner/PaBanner.vue2.js +26 -28
- package/dist/components/PaBanner/PaBanner.vue2.js.map +1 -1
- package/dist/components/PaCard/PaCard.vue.d.ts +17 -14
- package/dist/components/PaCard/PaCard.vue.js +2 -2
- package/dist/components/PaCard/PaCard.vue2.js +37 -42
- package/dist/components/PaCard/PaCard.vue2.js.map +1 -1
- package/dist/components/PaCheckbox/PaCheckbox.vue.d.ts +5 -6
- package/dist/components/PaCheckbox/PaCheckbox.vue.js +2 -4
- package/dist/components/PaCheckbox/PaCheckbox.vue.js.map +1 -1
- package/dist/components/PaCheckbox/PaCheckbox.vue2.js +20 -26
- package/dist/components/PaCheckbox/PaCheckbox.vue2.js.map +1 -1
- package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue.d.ts +5 -6
- package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue.js +2 -4
- package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue.js.map +1 -1
- package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue2.js +25 -31
- package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue2.js.map +1 -1
- package/dist/components/PaDatePicker/PaDatePicker.vue.d.ts +13 -26
- package/dist/components/PaDatePicker/PaDatePicker.vue.js +4 -6
- package/dist/components/PaDatePicker/PaDatePicker.vue.js.map +1 -1
- package/dist/components/PaDatePicker/PaDatePicker.vue2.js +52 -58
- package/dist/components/PaDatePicker/PaDatePicker.vue2.js.map +1 -1
- package/dist/components/PaDrawer/PaDrawer.vue.js +2 -2
- package/dist/components/PaDrawer/PaDrawer.vue2.js +37 -41
- package/dist/components/PaDrawer/PaDrawer.vue2.js.map +1 -1
- package/dist/components/PaFileUpload/PaFileUpload.vue.d.ts +0 -1
- package/dist/components/PaFileUpload/PaFileUpload.vue.js +3 -5
- package/dist/components/PaFileUpload/PaFileUpload.vue.js.map +1 -1
- package/dist/components/PaFileUpload/PaFileUpload.vue2.js +22 -28
- package/dist/components/PaFileUpload/PaFileUpload.vue2.js.map +1 -1
- package/dist/components/PaFooter/PaFooter.vue.js +1 -1
- package/dist/components/PaFooter/PaFooter.vue2.js +43 -48
- package/dist/components/PaFooter/PaFooter.vue2.js.map +1 -1
- package/dist/components/PaHeaderDesktop/PaHeaderDesktop.vue.js +1 -1
- package/dist/components/PaHeaderDesktop/PaHeaderDesktop.vue2.js +61 -66
- package/dist/components/PaHeaderDesktop/PaHeaderDesktop.vue2.js.map +1 -1
- package/dist/components/PaHeaderMobile/PaHeaderMobile.vue.js +2 -2
- package/dist/components/PaHeaderMobile/PaHeaderMobile.vue2.js +69 -74
- package/dist/components/PaHeaderMobile/PaHeaderMobile.vue2.js.map +1 -1
- package/dist/components/PaHero/PaHero.vue.d.ts +15 -12
- package/dist/components/PaHero/PaHero.vue.js +2 -2
- package/dist/components/PaHero/PaHero.vue2.js +36 -41
- package/dist/components/PaHero/PaHero.vue2.js.map +1 -1
- package/dist/components/PaInput/PaInput.vue.d.ts +15 -13
- package/dist/components/PaInput/PaInput.vue.js +4 -6
- package/dist/components/PaInput/PaInput.vue.js.map +1 -1
- package/dist/components/PaInput/PaInput.vue2.js +27 -33
- package/dist/components/PaInput/PaInput.vue2.js.map +1 -1
- package/dist/components/PaModal/PaModal.vue.d.ts +14 -11
- package/dist/components/PaModal/PaModal.vue.js +3 -3
- package/dist/components/PaModal/PaModal.vue2.js +41 -46
- package/dist/components/PaModal/PaModal.vue2.js.map +1 -1
- package/dist/components/PaMonthPicker/PaMonthPicker.vue.d.ts +13 -26
- package/dist/components/PaMonthPicker/PaMonthPicker.vue.js +2 -4
- package/dist/components/PaMonthPicker/PaMonthPicker.vue.js.map +1 -1
- package/dist/components/PaMonthPicker/PaMonthPicker.vue2.js +64 -70
- package/dist/components/PaMonthPicker/PaMonthPicker.vue2.js.map +1 -1
- package/dist/components/PaPagination/PaPagination.vue.js +2 -2
- package/dist/components/PaPagination/PaPagination.vue2.js +41 -46
- package/dist/components/PaPagination/PaPagination.vue2.js.map +1 -1
- package/dist/components/PaRadioGroup/PaRadioGroup.vue.d.ts +5 -6
- package/dist/components/PaRadioGroup/PaRadioGroup.vue.js +2 -4
- package/dist/components/PaRadioGroup/PaRadioGroup.vue.js.map +1 -1
- package/dist/components/PaRadioGroup/PaRadioGroup.vue2.js +22 -28
- package/dist/components/PaRadioGroup/PaRadioGroup.vue2.js.map +1 -1
- package/dist/components/PaRangePicker/PaRangePicker.vue.d.ts +0 -1
- package/dist/components/PaRangePicker/PaRangePicker.vue.js +4 -6
- package/dist/components/PaRangePicker/PaRangePicker.vue.js.map +1 -1
- package/dist/components/PaRangePicker/PaRangePicker.vue2.js +75 -81
- package/dist/components/PaRangePicker/PaRangePicker.vue2.js.map +1 -1
- package/dist/components/PaSearchBar/PaSearchBar.vue.d.ts +0 -1
- package/dist/components/PaSearchBar/PaSearchBar.vue.js +3 -5
- package/dist/components/PaSearchBar/PaSearchBar.vue.js.map +1 -1
- package/dist/components/PaSearchBar/PaSearchBar.vue2.js +55 -61
- package/dist/components/PaSearchBar/PaSearchBar.vue2.js.map +1 -1
- package/dist/components/PaSelect/PaSelect.vue.d.ts +5 -6
- package/dist/components/PaSelect/PaSelect.vue.js +4 -6
- package/dist/components/PaSelect/PaSelect.vue.js.map +1 -1
- package/dist/components/PaSelect/PaSelect.vue2.js +25 -31
- package/dist/components/PaSelect/PaSelect.vue2.js.map +1 -1
- package/dist/components/PaTabs/PaTabs.vue.js +1 -1
- package/dist/components/PaTabs/PaTabs.vue2.js +17 -19
- package/dist/components/PaTabs/PaTabs.vue2.js.map +1 -1
- package/dist/components/PaTextarea/PaTextarea.vue.d.ts +5 -6
- package/dist/components/PaTextarea/PaTextarea.vue.js +4 -6
- package/dist/components/PaTextarea/PaTextarea.vue.js.map +1 -1
- package/dist/components/PaTextarea/PaTextarea.vue2.js +16 -22
- package/dist/components/PaTextarea/PaTextarea.vue2.js.map +1 -1
- package/dist/components/PaTimePicker/PaTimePicker.vue.d.ts +0 -1
- package/dist/components/PaTimePicker/PaTimePicker.vue.js +2 -4
- package/dist/components/PaTimePicker/PaTimePicker.vue.js.map +1 -1
- package/dist/components/PaTimePicker/PaTimePicker.vue2.js +44 -50
- package/dist/components/PaTimePicker/PaTimePicker.vue2.js.map +1 -1
- package/dist/components/PaTitleBar/PaTitleBar.vue.d.ts +12 -9
- package/dist/components/PaTitleBar/PaTitleBar.vue.js +2 -2
- package/dist/components/PaTitleBar/PaTitleBar.vue2.js +34 -39
- package/dist/components/PaTitleBar/PaTitleBar.vue2.js.map +1 -1
- package/dist/components/PaToggle/PaToggle.vue.d.ts +0 -1
- package/dist/components/PaToggle/PaToggle.vue.js +2 -4
- package/dist/components/PaToggle/PaToggle.vue.js.map +1 -1
- package/dist/components/PaToggle/PaToggle.vue2.js +20 -26
- package/dist/components/PaToggle/PaToggle.vue2.js.map +1 -1
- package/dist/components/PaYearPicker/PaYearPicker.vue.d.ts +13 -26
- package/dist/components/PaYearPicker/PaYearPicker.vue.js +4 -6
- package/dist/components/PaYearPicker/PaYearPicker.vue.js.map +1 -1
- package/dist/components/PaYearPicker/PaYearPicker.vue2.js +70 -76
- package/dist/components/PaYearPicker/PaYearPicker.vue2.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +3 -3
|
@@ -1,19 +1,14 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { DatePicker as
|
|
1
|
+
import { defineComponent as H, useModel as J, ref as M, useId as N, computed as n, watch as Q, onBeforeUnmount as X, openBlock as u, createElementBlock as c, normalizeClass as f, createTextVNode as Z, toDisplayString as C, createCommentVNode as v, withKeys as q, withModifiers as E, createElementVNode as g, renderSlot as ee, createVNode as y, withDirectives as ae, unref as te, withCtx as P, vShow as ie, mergeModels as ne } from "vue";
|
|
2
|
+
import { DatePicker as re } from "v-calendar";
|
|
3
3
|
/* empty css */
|
|
4
|
-
import
|
|
5
|
-
const
|
|
4
|
+
import S from "../PaIcon/PaIcon.vue.js";
|
|
5
|
+
const le = ["for"], de = {
|
|
6
6
|
key: 0,
|
|
7
7
|
class: "pa-date-picker__required",
|
|
8
8
|
"aria-hidden": "true"
|
|
9
|
-
},
|
|
10
|
-
let me = 0;
|
|
11
|
-
function fe() {
|
|
12
|
-
return `pa-date-picker-${++me}`;
|
|
13
|
-
}
|
|
14
|
-
const be = /* @__PURE__ */ G({
|
|
9
|
+
}, oe = ["id", "disabled", "aria-expanded", "aria-required", "aria-invalid", "aria-readonly", "aria-describedby", "onKeydown"], se = { class: "pa-date-picker__value" }, ue = ["name", "value", "disabled", "readonly", "required"], ce = ["onClick"], ve = ["onClick"], me = ["id"], ke = /* @__PURE__ */ H({
|
|
15
10
|
__name: "PaDatePicker",
|
|
16
|
-
props: /* @__PURE__ */
|
|
11
|
+
props: /* @__PURE__ */ ne({
|
|
17
12
|
display: { default: "popover" },
|
|
18
13
|
placeholder: { default: "gg/mm/aaaa" },
|
|
19
14
|
label: {},
|
|
@@ -34,17 +29,17 @@ const be = /* @__PURE__ */ G({
|
|
|
34
29
|
}),
|
|
35
30
|
emits: ["update:modelValue"],
|
|
36
31
|
setup(t) {
|
|
37
|
-
const a = t, d =
|
|
32
|
+
const a = t, d = J(t, "modelValue"), k = M(null), _ = M(null), r = M(!1), B = `pa-date-picker-pop-${N()}`, Y = `pa-date-picker-${N()}`, b = n(() => a.id ?? Y), F = n(() => `${b.value}-msg`), z = new Intl.DateTimeFormat("it-IT", {
|
|
38
33
|
day: "2-digit",
|
|
39
34
|
month: "2-digit",
|
|
40
35
|
year: "numeric"
|
|
41
|
-
}),
|
|
42
|
-
() => d.value instanceof Date ?
|
|
43
|
-
),
|
|
36
|
+
}), K = n(
|
|
37
|
+
() => d.value instanceof Date ? z.format(d.value) : a.placeholder
|
|
38
|
+
), R = n(() => !(d.value instanceof Date)), s = n(() => !!a.error), V = n(() => a.valid && !s.value), A = n(
|
|
44
39
|
() => typeof a.error == "string" && a.error.length > 0 ? a.error : null
|
|
45
|
-
),
|
|
40
|
+
), W = n(
|
|
46
41
|
() => !s.value && a.helperText ? a.helperText : null
|
|
47
|
-
), h = n(() =>
|
|
42
|
+
), h = n(() => A.value ?? W.value), O = n(() => {
|
|
48
43
|
const e = d.value;
|
|
49
44
|
if (!(e instanceof Date) || isNaN(e.getTime())) return "";
|
|
50
45
|
const i = e.getFullYear(), o = String(e.getMonth() + 1).padStart(2, "0"), T = String(e.getDate()).padStart(2, "0");
|
|
@@ -56,17 +51,17 @@ const be = /* @__PURE__ */ G({
|
|
|
56
51
|
function $(e, i) {
|
|
57
52
|
return new Date(e.getFullYear(), e.getMonth(), e.getDate() + i, 0, 0, 0, 0);
|
|
58
53
|
}
|
|
59
|
-
function
|
|
54
|
+
function U(e) {
|
|
60
55
|
const i = l(e);
|
|
61
56
|
return a.min && i.getTime() < l(a.min).getTime() || a.max && i.getTime() > l(a.max).getTime() ? !0 : a.disabledDates ? a.disabledDates(i) === !0 : !1;
|
|
62
57
|
}
|
|
63
|
-
const
|
|
58
|
+
const j = n(() => {
|
|
64
59
|
const e = [];
|
|
65
60
|
if (a.min && e.push({ start: null, end: $(l(a.min), -1) }), a.max && e.push({ start: $(l(a.max), 1), end: null }), a.disabledDates) {
|
|
66
|
-
const i = d.value instanceof Date ? d.value.getFullYear() : (/* @__PURE__ */ new Date()).getFullYear(), o = a.min ? l(a.min) : new Date(i - 5, 0, 1, 0, 0, 0, 0), T = a.max ? l(a.max) : new Date(i + 5, 11, 31, 0, 0, 0, 0),
|
|
67
|
-
for (;
|
|
68
|
-
const
|
|
69
|
-
a.disabledDates(
|
|
61
|
+
const i = d.value instanceof Date ? d.value.getFullYear() : (/* @__PURE__ */ new Date()).getFullYear(), o = a.min ? l(a.min) : new Date(i - 5, 0, 1, 0, 0, 0, 0), T = a.max ? l(a.max) : new Date(i + 5, 11, 31, 0, 0, 0, 0), p = new Date(o.getTime());
|
|
62
|
+
for (; p.getTime() <= T.getTime(); ) {
|
|
63
|
+
const L = l(p);
|
|
64
|
+
a.disabledDates(L) && e.push(L), p.setDate(p.getDate() + 1);
|
|
70
65
|
}
|
|
71
66
|
}
|
|
72
67
|
return e;
|
|
@@ -81,10 +76,10 @@ const be = /* @__PURE__ */ G({
|
|
|
81
76
|
function w() {
|
|
82
77
|
a.disabled || a.readonly || (r.value ? m() : I());
|
|
83
78
|
}
|
|
84
|
-
function
|
|
79
|
+
function G(e) {
|
|
85
80
|
if (a.readonly) return;
|
|
86
81
|
const i = l(e.date);
|
|
87
|
-
|
|
82
|
+
U(i) || (d.value = i, a.display === "popover" && m());
|
|
88
83
|
}
|
|
89
84
|
function D(e) {
|
|
90
85
|
k.value && (k.value.contains(e.target) || m(!1));
|
|
@@ -92,14 +87,14 @@ const be = /* @__PURE__ */ G({
|
|
|
92
87
|
function x(e) {
|
|
93
88
|
e.key === "Escape" && (e.preventDefault(), m());
|
|
94
89
|
}
|
|
95
|
-
return
|
|
90
|
+
return Q(r, (e) => {
|
|
96
91
|
e ? (document.addEventListener("mousedown", D), window.addEventListener("keydown", x)) : (document.removeEventListener("mousedown", D), window.removeEventListener("keydown", x));
|
|
97
|
-
}),
|
|
92
|
+
}), X(() => {
|
|
98
93
|
document.removeEventListener("mousedown", D), window.removeEventListener("keydown", x);
|
|
99
94
|
}), (e, i) => (u(), c("div", {
|
|
100
95
|
ref_key: "rootRef",
|
|
101
96
|
ref: k,
|
|
102
|
-
class:
|
|
97
|
+
class: f([
|
|
103
98
|
"pa-date-picker",
|
|
104
99
|
`pa-date-picker--${t.display}`,
|
|
105
100
|
{
|
|
@@ -116,19 +111,19 @@ const be = /* @__PURE__ */ G({
|
|
|
116
111
|
for: b.value,
|
|
117
112
|
class: "pa-date-picker__label"
|
|
118
113
|
}, [
|
|
119
|
-
|
|
120
|
-
t.required ? (u(), c("span",
|
|
121
|
-
], 8,
|
|
114
|
+
Z(C(t.label), 1),
|
|
115
|
+
t.required ? (u(), c("span", de, "*")) : v("", !0)
|
|
116
|
+
], 8, le)) : v("", !0),
|
|
122
117
|
t.display === "popover" ? (u(), c("button", {
|
|
123
118
|
key: 1,
|
|
124
119
|
id: b.value,
|
|
125
120
|
ref_key: "triggerRef",
|
|
126
121
|
ref: _,
|
|
127
122
|
type: "button",
|
|
128
|
-
class:
|
|
123
|
+
class: f([
|
|
129
124
|
"pa-date-picker__trigger",
|
|
130
125
|
{
|
|
131
|
-
"pa-date-picker__trigger--placeholder":
|
|
126
|
+
"pa-date-picker__trigger--placeholder": R.value,
|
|
132
127
|
"pa-date-picker__trigger--disabled": t.disabled,
|
|
133
128
|
"pa-date-picker__trigger--readonly": t.readonly && !t.disabled,
|
|
134
129
|
"pa-date-picker__trigger--error": s.value && !t.disabled,
|
|
@@ -145,85 +140,84 @@ const be = /* @__PURE__ */ G({
|
|
|
145
140
|
"aria-describedby": h.value ? F.value : void 0,
|
|
146
141
|
onClick: w,
|
|
147
142
|
onKeydown: [
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
143
|
+
q(E(w, ["prevent"]), ["enter"]),
|
|
144
|
+
q(E(w, ["prevent"]), ["space"]),
|
|
145
|
+
q(E(I, ["prevent"]), ["down"])
|
|
151
146
|
]
|
|
152
147
|
}, [
|
|
153
|
-
g("span",
|
|
154
|
-
|
|
155
|
-
y(
|
|
148
|
+
g("span", se, C(K.value), 1),
|
|
149
|
+
ee(e.$slots, "suffix", {}, () => [
|
|
150
|
+
y(S, {
|
|
156
151
|
name: "calendar-blank",
|
|
157
152
|
size: "md"
|
|
158
153
|
})
|
|
159
154
|
], !0)
|
|
160
|
-
], 42,
|
|
155
|
+
], 42, oe)) : v("", !0),
|
|
161
156
|
t.name ? (u(), c("input", {
|
|
162
157
|
key: 2,
|
|
163
158
|
type: "hidden",
|
|
164
159
|
name: t.name,
|
|
165
|
-
value:
|
|
160
|
+
value: O.value,
|
|
166
161
|
disabled: t.disabled,
|
|
167
162
|
readonly: t.readonly,
|
|
168
163
|
required: t.required
|
|
169
|
-
}, null, 8,
|
|
170
|
-
|
|
164
|
+
}, null, 8, ue)) : v("", !0),
|
|
165
|
+
ae(g("div", {
|
|
171
166
|
id: B,
|
|
172
|
-
class:
|
|
167
|
+
class: f([
|
|
173
168
|
"pa-date-picker__popover",
|
|
174
169
|
{ "pa-date-picker__popover--inline": t.display === "inline" }
|
|
175
170
|
]),
|
|
176
171
|
role: "dialog",
|
|
177
172
|
"aria-modal": "false"
|
|
178
173
|
}, [
|
|
179
|
-
y(
|
|
174
|
+
y(te(re), {
|
|
180
175
|
"model-value": d.value,
|
|
181
176
|
locale: { id: "it-IT", firstDayOfWeek: 2 },
|
|
182
177
|
"is-required": !1,
|
|
183
|
-
"disabled-dates":
|
|
184
|
-
onDayclick:
|
|
178
|
+
"disabled-dates": j.value,
|
|
179
|
+
onDayclick: G
|
|
185
180
|
}, {
|
|
186
|
-
"nav-prev-button":
|
|
181
|
+
"nav-prev-button": P(({ click: o }) => [
|
|
187
182
|
g("button", {
|
|
188
183
|
type: "button",
|
|
189
184
|
class: "pa-date-picker__nav-arrow",
|
|
190
185
|
"aria-label": "Mese precedente",
|
|
191
186
|
onClick: o
|
|
192
187
|
}, [
|
|
193
|
-
y(
|
|
188
|
+
y(S, {
|
|
194
189
|
name: "caret-left",
|
|
195
190
|
size: "sm"
|
|
196
191
|
})
|
|
197
|
-
], 8,
|
|
192
|
+
], 8, ce)
|
|
198
193
|
]),
|
|
199
|
-
"nav-next-button":
|
|
194
|
+
"nav-next-button": P(({ click: o }) => [
|
|
200
195
|
g("button", {
|
|
201
196
|
type: "button",
|
|
202
197
|
class: "pa-date-picker__nav-arrow",
|
|
203
198
|
"aria-label": "Mese successivo",
|
|
204
199
|
onClick: o
|
|
205
200
|
}, [
|
|
206
|
-
y(
|
|
201
|
+
y(S, {
|
|
207
202
|
name: "caret-right",
|
|
208
203
|
size: "sm"
|
|
209
204
|
})
|
|
210
|
-
], 8,
|
|
205
|
+
], 8, ve)
|
|
211
206
|
]),
|
|
212
207
|
_: 1
|
|
213
208
|
}, 8, ["model-value", "disabled-dates"])
|
|
214
209
|
], 2), [
|
|
215
|
-
[
|
|
210
|
+
[ie, t.display === "inline" || r.value]
|
|
216
211
|
]),
|
|
217
212
|
h.value ? (u(), c("div", {
|
|
218
213
|
key: 3,
|
|
219
214
|
id: F.value,
|
|
220
|
-
class:
|
|
221
|
-
}, C(h.value), 11,
|
|
215
|
+
class: f(["pa-date-picker__message", { "pa-date-picker__message--error": s.value }])
|
|
216
|
+
}, C(h.value), 11, me)) : v("", !0)
|
|
222
217
|
], 2));
|
|
223
218
|
}
|
|
224
219
|
});
|
|
225
220
|
export {
|
|
226
|
-
|
|
227
|
-
fe as nextPaDatePickerId
|
|
221
|
+
ke as default
|
|
228
222
|
};
|
|
229
223
|
//# sourceMappingURL=PaDatePicker.vue2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaDatePicker.vue2.js","sources":["../../../src/components/PaDatePicker/PaDatePicker.vue"],"sourcesContent":["<script lang=\"ts\">\nlet uid = 0\nexport function nextPaDatePickerId() {\n return `pa-date-picker-${++uid}`\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { DatePicker as VDatePicker } from 'v-calendar'\nimport 'v-calendar/style.css'\nimport PaIcon from '../PaIcon/PaIcon.vue'\n\nconst props = withDefaults(\n defineProps<{\n display?: 'popover' | 'inline'\n placeholder?: string\n label?: string\n required?: boolean\n helperText?: string\n error?: string | boolean\n valid?: boolean\n disabled?: boolean\n readonly?: boolean\n id?: string\n name?: string\n min?: Date | null\n max?: Date | null\n disabledDates?: (date: Date) => boolean\n }>(),\n {\n display: 'popover',\n placeholder: 'gg/mm/aaaa',\n required: false,\n error: false,\n valid: false,\n disabled: false,\n readonly: false,\n min: null,\n max: null,\n disabledDates: undefined,\n },\n)\n\nconst model = defineModel<Date | null>({ default: null })\n\nconst rootRef = ref<HTMLElement | null>(null)\nconst triggerRef = ref<HTMLButtonElement | null>(null)\nconst open = ref(false)\nconst popoverId = `pa-date-picker-pop-${Math.random().toString(36).slice(2, 9)}`\nconst generatedId = nextPaDatePickerId()\nconst triggerId = computed(() => props.id ?? generatedId)\nconst messageId = computed(() => `${triggerId.value}-msg`)\n\nconst dateFormatter = new Intl.DateTimeFormat('it-IT', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n})\n\nconst displayValue = computed(() =>\n model.value instanceof Date ? dateFormatter.format(model.value) : props.placeholder,\n)\n\nconst placeholderShown = computed(() => !(model.value instanceof Date))\n\nconst errorActive = computed(() => Boolean(props.error))\nconst validActive = computed(() => props.valid && !errorActive.value)\nconst errorMessage = computed(() =>\n typeof props.error === 'string' && props.error.length > 0 ? props.error : null,\n)\nconst helperMessage = computed(() =>\n !errorActive.value && props.helperText ? props.helperText : null,\n)\nconst message = computed(() => errorMessage.value ?? helperMessage.value)\n\n// Built from LOCAL components — NEVER `.toISOString().slice(0, 10)`, which\n// returns UTC and lands on the previous day in any UTC-positive timezone.\nconst serialized = computed(() => {\n const v = model.value\n if (!(v instanceof Date) || isNaN(v.getTime())) return ''\n const y = v.getFullYear()\n const m = String(v.getMonth() + 1).padStart(2, '0')\n const d = String(v.getDate()).padStart(2, '0')\n return `${y}-${m}-${d}`\n})\n\nfunction localMidnight(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0)\n}\nfunction addDays(d: Date, n: number): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate() + n, 0, 0, 0, 0)\n}\n\nfunction isDisabledDate(d: Date): boolean {\n const m = localMidnight(d)\n if (props.min && m.getTime() < localMidnight(props.min).getTime()) return true\n if (props.max && m.getTime() > localMidnight(props.max).getTime()) return true\n return props.disabledDates ? props.disabledDates(m) === true : false\n}\n\n// V-Calendar's `disabled-dates` accepts only Date / range entries (no\n// functions). To keep a single source of truth for visual disable + native\n// keyboard skip, we enumerate predicate-true days within a bounded window\n// (min/max if set, else ±5y around the model's anchor year) and push them as\n// individual Date entries alongside the min/max ranges.\nconst disabledDatesForVCalendar = computed(() => {\n const list: unknown[] = []\n if (props.min) list.push({ start: null, end: addDays(localMidnight(props.min), -1) })\n if (props.max) list.push({ start: addDays(localMidnight(props.max), 1), end: null })\n if (props.disabledDates) {\n const anchorYear =\n model.value instanceof Date ? model.value.getFullYear() : new Date().getFullYear()\n const winStart = props.min\n ? localMidnight(props.min)\n : new Date(anchorYear - 5, 0, 1, 0, 0, 0, 0)\n const winEnd = props.max\n ? localMidnight(props.max)\n : new Date(anchorYear + 5, 11, 31, 0, 0, 0, 0)\n const cursor = new Date(winStart.getTime())\n while (cursor.getTime() <= winEnd.getTime()) {\n const day = localMidnight(cursor)\n if (props.disabledDates(day)) list.push(day)\n cursor.setDate(cursor.getDate() + 1)\n }\n }\n return list\n})\n\nfunction openPopover() {\n if (open.value || props.disabled || props.readonly) return\n open.value = true\n}\n\nfunction closePopover(returnFocus = true) {\n if (!open.value) return\n open.value = false\n if (returnFocus) triggerRef.value?.focus()\n}\n\nfunction togglePopover() {\n if (props.disabled || props.readonly) return\n open.value ? closePopover() : openPopover()\n}\n\n// The ONLY writer to `model`. V-Calendar receives :model-value one-way and\n// never v-models back into us — the reactive feedback loop is what crashed\n// the previous v1.32 attempt.\n//\n// Normalize to local midnight: V-Calendar's day.date may carry a non-midnight\n// wall-clock time that, once serialized via `.toISOString()`, lands on the\n// previous day in any UTC-positive timezone. Storing local midnight keeps\n// `getFullYear / getMonth / getDate` and any locale-aware formatter aligned.\nfunction onDayClick(day: { date: Date }) {\n if (props.readonly) return\n const picked = localMidnight(day.date)\n if (isDisabledDate(picked)) return\n model.value = picked\n if (props.display === 'popover') closePopover()\n}\n\nfunction onDocumentMousedown(event: MouseEvent) {\n if (!rootRef.value) return\n if (!rootRef.value.contains(event.target as Node)) closePopover(false)\n}\n\nfunction onWindowKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault()\n closePopover()\n }\n}\n\nwatch(open, (isOpen) => {\n if (isOpen) {\n document.addEventListener('mousedown', onDocumentMousedown)\n window.addEventListener('keydown', onWindowKeydown)\n } else {\n document.removeEventListener('mousedown', onDocumentMousedown)\n window.removeEventListener('keydown', onWindowKeydown)\n }\n})\n\nonBeforeUnmount(() => {\n document.removeEventListener('mousedown', onDocumentMousedown)\n window.removeEventListener('keydown', onWindowKeydown)\n})\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"[\n 'pa-date-picker',\n `pa-date-picker--${display}`,\n {\n 'pa-date-picker--open': open,\n 'pa-date-picker--disabled': disabled,\n 'pa-date-picker--readonly': readonly,\n 'pa-date-picker--error': errorActive,\n 'pa-date-picker--valid': validActive,\n },\n ]\"\n >\n <label v-if=\"label\" :for=\"triggerId\" class=\"pa-date-picker__label\">\n {{ label }}<span v-if=\"required\" class=\"pa-date-picker__required\" aria-hidden=\"true\">*</span>\n </label>\n\n <button\n v-if=\"display === 'popover'\"\n :id=\"triggerId\"\n ref=\"triggerRef\"\n type=\"button\"\n :class=\"[\n 'pa-date-picker__trigger',\n {\n 'pa-date-picker__trigger--placeholder': placeholderShown,\n 'pa-date-picker__trigger--disabled': disabled,\n 'pa-date-picker__trigger--readonly': readonly && !disabled,\n 'pa-date-picker__trigger--error': errorActive && !disabled,\n 'pa-date-picker__trigger--valid': validActive && !disabled,\n },\n ]\"\n :disabled=\"disabled\"\n :aria-expanded=\"open\"\n aria-haspopup=\"dialog\"\n :aria-controls=\"popoverId\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"errorActive || undefined\"\n :aria-readonly=\"readonly || undefined\"\n :aria-describedby=\"message ? messageId : undefined\"\n @click=\"togglePopover\"\n @keydown.enter.prevent=\"togglePopover\"\n @keydown.space.prevent=\"togglePopover\"\n @keydown.down.prevent=\"openPopover\"\n >\n <span class=\"pa-date-picker__value\">{{ displayValue }}</span>\n <slot name=\"suffix\">\n <PaIcon name=\"calendar-blank\" size=\"md\" />\n </slot>\n </button>\n\n <input\n v-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"serialized\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n />\n\n <div\n v-show=\"display === 'inline' || open\"\n :id=\"popoverId\"\n :class=\"[\n 'pa-date-picker__popover',\n { 'pa-date-picker__popover--inline': display === 'inline' },\n ]\"\n role=\"dialog\"\n aria-modal=\"false\"\n >\n <VDatePicker\n :model-value=\"model\"\n :locale=\"{ id: 'it-IT', firstDayOfWeek: 2 }\"\n :is-required=\"false\"\n :disabled-dates=\"disabledDatesForVCalendar\"\n @dayclick=\"onDayClick\"\n >\n <template #nav-prev-button=\"{ click }\">\n <button\n type=\"button\"\n class=\"pa-date-picker__nav-arrow\"\n aria-label=\"Mese precedente\"\n @click=\"click\"\n >\n <PaIcon name=\"caret-left\" size=\"sm\" />\n </button>\n </template>\n <template #nav-next-button=\"{ click }\">\n <button\n type=\"button\"\n class=\"pa-date-picker__nav-arrow\"\n aria-label=\"Mese successivo\"\n @click=\"click\"\n >\n <PaIcon name=\"caret-right\" size=\"sm\" />\n </button>\n </template>\n </VDatePicker>\n </div>\n\n <div\n v-if=\"message\"\n :id=\"messageId\"\n :class=\"['pa-date-picker__message', { 'pa-date-picker__message--error': errorActive }]\"\n >\n {{ message }}\n </div>\n </div>\n</template>\n\n<style scoped>\n.pa-date-picker {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n gap: var(--pa-space-2xs, 4px);\n font-family: var(--pa-font-family-sans, 'Inter', sans-serif);\n}\n\n.pa-date-picker__label {\n font: 600 14px/20px 'Inter', sans-serif;\n color: var(--pa-color-text-dark-blue, #00173d);\n}\n.pa-date-picker__required {\n margin-left: 2px;\n color: var(--pa-color-error, #de2049);\n}\n\n.pa-date-picker__trigger {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n min-width: 240px;\n padding: 12px 16px;\n background: #ffffff;\n border: 1px solid var(--pa-color-neutral-gray, #454d56);\n border-radius: 4px;\n font: 400 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n cursor: pointer;\n text-align: left;\n}\n.pa-date-picker__trigger:hover { border-color: var(--pa-color-primary, #0071ff); }\n.pa-date-picker__trigger:focus-visible {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: 2px;\n}\n.pa-date-picker__trigger--placeholder .pa-date-picker__value {\n color: var(--pa-color-text-disabled, #5b6571);\n}\n.pa-date-picker__trigger--error {\n border-color: var(--pa-color-error, #de2049);\n}\n.pa-date-picker__trigger--error:hover {\n border-color: var(--pa-color-error, #de2049);\n}\n.pa-date-picker__trigger--valid {\n border-color: var(--pa-color-success, #008069);\n}\n.pa-date-picker__trigger--valid:hover {\n border-color: var(--pa-color-success, #008069);\n}\n.pa-date-picker__trigger--disabled,\n.pa-date-picker__trigger[disabled] {\n background: var(--pa-color-bg-disabled-gray, #e7e8e3);\n color: var(--pa-color-text-disabled, #5b6571);\n border-color: var(--pa-color-neutral-gray, #454d56);\n cursor: not-allowed;\n}\n.pa-date-picker__trigger--disabled:hover,\n.pa-date-picker__trigger[disabled]:hover {\n border-color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-date-picker__trigger--readonly:hover {\n border-color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-date-picker__value {\n flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n\n.pa-date-picker__message {\n font: 400 14px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-date-picker__message--error {\n color: var(--pa-color-error, #de2049);\n}\n\n.pa-date-picker__popover {\n position: absolute;\n top: calc(100% + 8px);\n left: 0;\n z-index: 900; min-width: 280px; padding: 24px;\n background: #ffffff; border-radius: 8px;\n box-shadow: var(--pa-shadow-elevation-02, 0 0 24px #e3e5e8);\n}\n.pa-date-picker__popover--inline {\n position: static; top: auto; left: auto; display: inline-block;\n}\n/* Anchor the absolute popover under the trigger (not under the label). */\n.pa-date-picker:has(.pa-date-picker__label) .pa-date-picker__popover:not(.pa-date-picker__popover--inline) {\n top: auto;\n}\n\n.pa-date-picker :deep(.pa-date-picker__nav-arrow) {\n display: inline-flex; align-items: center; justify-content: center;\n width: 32px; height: 32px; padding: 0;\n background: #ffffff; border: 0; border-radius: 9999px;\n color: var(--pa-color-primary, #0071ff); cursor: pointer;\n}\n.pa-date-picker :deep(.pa-date-picker__nav-arrow:hover) {\n background: var(--pa-color-bg-primary-light-40, #f2f6fc);\n}\n.pa-date-picker :deep(.pa-date-picker__nav-arrow:focus-visible) {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: 0;\n}\n\n.pa-date-picker :deep(.vc-container) {\n --vc-bg: #ffffff; --vc-border: transparent; --vc-rounded: 0;\n --vc-font-family: 'Inter', sans-serif;\n font-family: 'Inter', sans-serif;\n background: #ffffff; border: 0;\n color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-date-picker :deep(.vc-header) { padding: 0 0 16px; }\n.pa-date-picker :deep(.vc-title) {\n font: 600 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-primary, #0071ff);\n pointer-events: none;\n}\n.pa-date-picker :deep(.vc-weeks) { padding: 0; }\n.pa-date-picker :deep(.vc-weekday) {\n font: 600 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n padding: 8px 0; text-transform: capitalize;\n}\n.pa-date-picker :deep(.vc-day) { min-height: 36px; }\n.pa-date-picker :deep(.vc-day-content) {\n font: 400 16px/18px 'Roboto Mono', monospace;\n color: var(--pa-color-neutral-gray, #454d56);\n width: 32px; height: 32px; border-radius: 9999px; transition: none;\n}\n.pa-date-picker :deep(.vc-day-content:hover) {\n background: var(--pa-color-primary-hover, #00368f); color: #ffffff;\n}\n.pa-date-picker :deep(.vc-day-content:focus-visible) {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: -2px; background: transparent;\n color: var(--pa-color-primary, #0071ff);\n}\n.pa-date-picker :deep(.vc-day-content:active) {\n background: var(--pa-color-primary-pressed, #00173d); color: #ffffff;\n}\n.pa-date-picker :deep(.vc-highlight) {\n background: var(--pa-color-primary, #0071ff) !important;\n border-radius: 9999px;\n}\n.pa-date-picker :deep(.vc-highlight-content-solid) {\n color: #ffffff !important;\n font: 400 16px/18px 'Roboto Mono', monospace;\n}\n.pa-date-picker :deep(.vc-day.is-not-in-month .vc-day-content),\n.pa-date-picker :deep(.vc-day.is-disabled .vc-day-content) {\n color: var(--pa-color-text-disabled, #5b6571);\n pointer-events: none;\n}\n.pa-date-picker :deep(.vc-pane-layout) { gap: 0; }\n.pa-date-picker :deep(.vc-arrow) { display: none; }\n</style>\n"],"names":["uid","nextPaDatePickerId","props","__props","model","_useModel","rootRef","ref","triggerRef","open","popoverId","generatedId","triggerId","computed","messageId","dateFormatter","displayValue","placeholderShown","errorActive","validActive","errorMessage","helperMessage","message","serialized","v","y","m","d","localMidnight","addDays","n","isDisabledDate","disabledDatesForVCalendar","list","anchorYear","winStart","winEnd","cursor","day","openPopover","closePopover","returnFocus","_a","togglePopover","onDayClick","picked","onDocumentMousedown","event","onWindowKeydown","watch","isOpen","onBeforeUnmount","_createElementBlock","_normalizeClass","_hoisted_2","_createElementVNode","_hoisted_4","_toDisplayString","_renderSlot","_ctx","_createVNode","PaIcon","_unref","VDatePicker","_withCtx","click","_vShow","_hoisted_8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PaDatePicker.vue2.js","sources":["../../../src/components/PaDatePicker/PaDatePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, useId, watch } from 'vue'\nimport { DatePicker as VDatePicker } from 'v-calendar'\nimport 'v-calendar/style.css'\nimport PaIcon from '../PaIcon/PaIcon.vue'\n\nconst props = withDefaults(\n defineProps<{\n display?: 'popover' | 'inline'\n placeholder?: string\n label?: string\n required?: boolean\n helperText?: string\n error?: string | boolean\n valid?: boolean\n disabled?: boolean\n readonly?: boolean\n id?: string\n name?: string\n min?: Date | null\n max?: Date | null\n disabledDates?: (date: Date) => boolean\n }>(),\n {\n display: 'popover',\n placeholder: 'gg/mm/aaaa',\n required: false,\n error: false,\n valid: false,\n disabled: false,\n readonly: false,\n min: null,\n max: null,\n disabledDates: undefined,\n },\n)\n\nconst model = defineModel<Date | null>({ default: null })\n\nconst rootRef = ref<HTMLElement | null>(null)\nconst triggerRef = ref<HTMLButtonElement | null>(null)\nconst open = ref(false)\nconst popoverId = `pa-date-picker-pop-${useId()}`\nconst generatedId = `pa-date-picker-${useId()}`\nconst triggerId = computed(() => props.id ?? generatedId)\nconst messageId = computed(() => `${triggerId.value}-msg`)\n\nconst dateFormatter = new Intl.DateTimeFormat('it-IT', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n})\n\nconst displayValue = computed(() =>\n model.value instanceof Date ? dateFormatter.format(model.value) : props.placeholder,\n)\n\nconst placeholderShown = computed(() => !(model.value instanceof Date))\n\nconst errorActive = computed(() => Boolean(props.error))\nconst validActive = computed(() => props.valid && !errorActive.value)\nconst errorMessage = computed(() =>\n typeof props.error === 'string' && props.error.length > 0 ? props.error : null,\n)\nconst helperMessage = computed(() =>\n !errorActive.value && props.helperText ? props.helperText : null,\n)\nconst message = computed(() => errorMessage.value ?? helperMessage.value)\n\n// Built from LOCAL components — NEVER `.toISOString().slice(0, 10)`, which\n// returns UTC and lands on the previous day in any UTC-positive timezone.\nconst serialized = computed(() => {\n const v = model.value\n if (!(v instanceof Date) || isNaN(v.getTime())) return ''\n const y = v.getFullYear()\n const m = String(v.getMonth() + 1).padStart(2, '0')\n const d = String(v.getDate()).padStart(2, '0')\n return `${y}-${m}-${d}`\n})\n\nfunction localMidnight(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0)\n}\nfunction addDays(d: Date, n: number): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate() + n, 0, 0, 0, 0)\n}\n\nfunction isDisabledDate(d: Date): boolean {\n const m = localMidnight(d)\n if (props.min && m.getTime() < localMidnight(props.min).getTime()) return true\n if (props.max && m.getTime() > localMidnight(props.max).getTime()) return true\n return props.disabledDates ? props.disabledDates(m) === true : false\n}\n\n// V-Calendar's `disabled-dates` accepts only Date / range entries (no\n// functions). To keep a single source of truth for visual disable + native\n// keyboard skip, we enumerate predicate-true days within a bounded window\n// (min/max if set, else ±5y around the model's anchor year) and push them as\n// individual Date entries alongside the min/max ranges.\nconst disabledDatesForVCalendar = computed(() => {\n const list: unknown[] = []\n if (props.min) list.push({ start: null, end: addDays(localMidnight(props.min), -1) })\n if (props.max) list.push({ start: addDays(localMidnight(props.max), 1), end: null })\n if (props.disabledDates) {\n const anchorYear =\n model.value instanceof Date ? model.value.getFullYear() : new Date().getFullYear()\n const winStart = props.min\n ? localMidnight(props.min)\n : new Date(anchorYear - 5, 0, 1, 0, 0, 0, 0)\n const winEnd = props.max\n ? localMidnight(props.max)\n : new Date(anchorYear + 5, 11, 31, 0, 0, 0, 0)\n const cursor = new Date(winStart.getTime())\n while (cursor.getTime() <= winEnd.getTime()) {\n const day = localMidnight(cursor)\n if (props.disabledDates(day)) list.push(day)\n cursor.setDate(cursor.getDate() + 1)\n }\n }\n return list\n})\n\nfunction openPopover() {\n if (open.value || props.disabled || props.readonly) return\n open.value = true\n}\n\nfunction closePopover(returnFocus = true) {\n if (!open.value) return\n open.value = false\n if (returnFocus) triggerRef.value?.focus()\n}\n\nfunction togglePopover() {\n if (props.disabled || props.readonly) return\n open.value ? closePopover() : openPopover()\n}\n\n// The ONLY writer to `model`. V-Calendar receives :model-value one-way and\n// never v-models back into us — the reactive feedback loop is what crashed\n// the previous v1.32 attempt.\n//\n// Normalize to local midnight: V-Calendar's day.date may carry a non-midnight\n// wall-clock time that, once serialized via `.toISOString()`, lands on the\n// previous day in any UTC-positive timezone. Storing local midnight keeps\n// `getFullYear / getMonth / getDate` and any locale-aware formatter aligned.\nfunction onDayClick(day: { date: Date }) {\n if (props.readonly) return\n const picked = localMidnight(day.date)\n if (isDisabledDate(picked)) return\n model.value = picked\n if (props.display === 'popover') closePopover()\n}\n\nfunction onDocumentMousedown(event: MouseEvent) {\n if (!rootRef.value) return\n if (!rootRef.value.contains(event.target as Node)) closePopover(false)\n}\n\nfunction onWindowKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault()\n closePopover()\n }\n}\n\nwatch(open, (isOpen) => {\n if (isOpen) {\n document.addEventListener('mousedown', onDocumentMousedown)\n window.addEventListener('keydown', onWindowKeydown)\n } else {\n document.removeEventListener('mousedown', onDocumentMousedown)\n window.removeEventListener('keydown', onWindowKeydown)\n }\n})\n\nonBeforeUnmount(() => {\n document.removeEventListener('mousedown', onDocumentMousedown)\n window.removeEventListener('keydown', onWindowKeydown)\n})\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"[\n 'pa-date-picker',\n `pa-date-picker--${display}`,\n {\n 'pa-date-picker--open': open,\n 'pa-date-picker--disabled': disabled,\n 'pa-date-picker--readonly': readonly,\n 'pa-date-picker--error': errorActive,\n 'pa-date-picker--valid': validActive,\n },\n ]\"\n >\n <label v-if=\"label\" :for=\"triggerId\" class=\"pa-date-picker__label\">\n {{ label }}<span v-if=\"required\" class=\"pa-date-picker__required\" aria-hidden=\"true\">*</span>\n </label>\n\n <button\n v-if=\"display === 'popover'\"\n :id=\"triggerId\"\n ref=\"triggerRef\"\n type=\"button\"\n :class=\"[\n 'pa-date-picker__trigger',\n {\n 'pa-date-picker__trigger--placeholder': placeholderShown,\n 'pa-date-picker__trigger--disabled': disabled,\n 'pa-date-picker__trigger--readonly': readonly && !disabled,\n 'pa-date-picker__trigger--error': errorActive && !disabled,\n 'pa-date-picker__trigger--valid': validActive && !disabled,\n },\n ]\"\n :disabled=\"disabled\"\n :aria-expanded=\"open\"\n aria-haspopup=\"dialog\"\n :aria-controls=\"popoverId\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"errorActive || undefined\"\n :aria-readonly=\"readonly || undefined\"\n :aria-describedby=\"message ? messageId : undefined\"\n @click=\"togglePopover\"\n @keydown.enter.prevent=\"togglePopover\"\n @keydown.space.prevent=\"togglePopover\"\n @keydown.down.prevent=\"openPopover\"\n >\n <span class=\"pa-date-picker__value\">{{ displayValue }}</span>\n <slot name=\"suffix\">\n <PaIcon name=\"calendar-blank\" size=\"md\" />\n </slot>\n </button>\n\n <input\n v-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"serialized\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n />\n\n <div\n v-show=\"display === 'inline' || open\"\n :id=\"popoverId\"\n :class=\"[\n 'pa-date-picker__popover',\n { 'pa-date-picker__popover--inline': display === 'inline' },\n ]\"\n role=\"dialog\"\n aria-modal=\"false\"\n >\n <VDatePicker\n :model-value=\"model\"\n :locale=\"{ id: 'it-IT', firstDayOfWeek: 2 }\"\n :is-required=\"false\"\n :disabled-dates=\"disabledDatesForVCalendar\"\n @dayclick=\"onDayClick\"\n >\n <template #nav-prev-button=\"{ click }\">\n <button\n type=\"button\"\n class=\"pa-date-picker__nav-arrow\"\n aria-label=\"Mese precedente\"\n @click=\"click\"\n >\n <PaIcon name=\"caret-left\" size=\"sm\" />\n </button>\n </template>\n <template #nav-next-button=\"{ click }\">\n <button\n type=\"button\"\n class=\"pa-date-picker__nav-arrow\"\n aria-label=\"Mese successivo\"\n @click=\"click\"\n >\n <PaIcon name=\"caret-right\" size=\"sm\" />\n </button>\n </template>\n </VDatePicker>\n </div>\n\n <div\n v-if=\"message\"\n :id=\"messageId\"\n :class=\"['pa-date-picker__message', { 'pa-date-picker__message--error': errorActive }]\"\n >\n {{ message }}\n </div>\n </div>\n</template>\n\n<style scoped>\n.pa-date-picker {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n gap: var(--pa-space-2xs, 4px);\n font-family: var(--pa-font-family-sans, 'Inter', sans-serif);\n}\n\n.pa-date-picker__label {\n font: 600 14px/20px 'Inter', sans-serif;\n color: var(--pa-color-text-dark-blue, #00173d);\n}\n.pa-date-picker__required {\n margin-left: 2px;\n color: var(--pa-color-error, #de2049);\n}\n\n.pa-date-picker__trigger {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n min-width: 240px;\n padding: 12px 16px;\n background: #ffffff;\n border: 1px solid var(--pa-color-neutral-gray, #454d56);\n border-radius: 4px;\n font: 400 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n cursor: pointer;\n text-align: left;\n}\n.pa-date-picker__trigger:hover { border-color: var(--pa-color-primary, #0071ff); }\n.pa-date-picker__trigger:focus-visible {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: 2px;\n}\n.pa-date-picker__trigger--placeholder .pa-date-picker__value {\n color: var(--pa-color-text-disabled, #5b6571);\n}\n.pa-date-picker__trigger--error {\n border-color: var(--pa-color-error, #de2049);\n}\n.pa-date-picker__trigger--error:hover {\n border-color: var(--pa-color-error, #de2049);\n}\n.pa-date-picker__trigger--valid {\n border-color: var(--pa-color-success, #008069);\n}\n.pa-date-picker__trigger--valid:hover {\n border-color: var(--pa-color-success, #008069);\n}\n.pa-date-picker__trigger--disabled,\n.pa-date-picker__trigger[disabled] {\n background: var(--pa-color-bg-disabled-gray, #e7e8e3);\n color: var(--pa-color-text-disabled, #5b6571);\n border-color: var(--pa-color-neutral-gray, #454d56);\n cursor: not-allowed;\n}\n.pa-date-picker__trigger--disabled:hover,\n.pa-date-picker__trigger[disabled]:hover {\n border-color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-date-picker__trigger--readonly:hover {\n border-color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-date-picker__value {\n flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n\n.pa-date-picker__message {\n font: 400 14px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-date-picker__message--error {\n color: var(--pa-color-error, #de2049);\n}\n\n.pa-date-picker__popover {\n position: absolute;\n top: calc(100% + 8px);\n left: 0;\n z-index: 900; min-width: 280px; padding: 24px;\n background: #ffffff; border-radius: 8px;\n box-shadow: var(--pa-shadow-elevation-02, 0 0 24px #e3e5e8);\n}\n.pa-date-picker__popover--inline {\n position: static; top: auto; left: auto; display: inline-block;\n}\n/* Anchor the absolute popover under the trigger (not under the label). */\n.pa-date-picker:has(.pa-date-picker__label) .pa-date-picker__popover:not(.pa-date-picker__popover--inline) {\n top: auto;\n}\n\n.pa-date-picker :deep(.pa-date-picker__nav-arrow) {\n display: inline-flex; align-items: center; justify-content: center;\n width: 32px; height: 32px; padding: 0;\n background: #ffffff; border: 0; border-radius: 9999px;\n color: var(--pa-color-primary, #0071ff); cursor: pointer;\n}\n.pa-date-picker :deep(.pa-date-picker__nav-arrow:hover) {\n background: var(--pa-color-bg-primary-light-40, #f2f6fc);\n}\n.pa-date-picker :deep(.pa-date-picker__nav-arrow:focus-visible) {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: 0;\n}\n\n.pa-date-picker :deep(.vc-container) {\n --vc-bg: #ffffff; --vc-border: transparent; --vc-rounded: 0;\n --vc-font-family: 'Inter', sans-serif;\n font-family: 'Inter', sans-serif;\n background: #ffffff; border: 0;\n color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-date-picker :deep(.vc-header) { padding: 0 0 16px; }\n.pa-date-picker :deep(.vc-title) {\n font: 600 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-primary, #0071ff);\n pointer-events: none;\n}\n.pa-date-picker :deep(.vc-weeks) { padding: 0; }\n.pa-date-picker :deep(.vc-weekday) {\n font: 600 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n padding: 8px 0; text-transform: capitalize;\n}\n.pa-date-picker :deep(.vc-day) { min-height: 36px; }\n.pa-date-picker :deep(.vc-day-content) {\n font: 400 16px/18px 'Roboto Mono', monospace;\n color: var(--pa-color-neutral-gray, #454d56);\n width: 32px; height: 32px; border-radius: 9999px; transition: none;\n}\n.pa-date-picker :deep(.vc-day-content:hover) {\n background: var(--pa-color-primary-hover, #00368f); color: #ffffff;\n}\n.pa-date-picker :deep(.vc-day-content:focus-visible) {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: -2px; background: transparent;\n color: var(--pa-color-primary, #0071ff);\n}\n.pa-date-picker :deep(.vc-day-content:active) {\n background: var(--pa-color-primary-pressed, #00173d); color: #ffffff;\n}\n.pa-date-picker :deep(.vc-highlight) {\n background: var(--pa-color-primary, #0071ff) !important;\n border-radius: 9999px;\n}\n.pa-date-picker :deep(.vc-highlight-content-solid) {\n color: #ffffff !important;\n font: 400 16px/18px 'Roboto Mono', monospace;\n}\n.pa-date-picker :deep(.vc-day.is-not-in-month .vc-day-content),\n.pa-date-picker :deep(.vc-day.is-disabled .vc-day-content) {\n color: var(--pa-color-text-disabled, #5b6571);\n pointer-events: none;\n}\n.pa-date-picker :deep(.vc-pane-layout) { gap: 0; }\n.pa-date-picker :deep(.vc-arrow) { display: none; }\n</style>\n"],"names":["props","__props","model","_useModel","rootRef","ref","triggerRef","open","popoverId","useId","generatedId","triggerId","computed","messageId","dateFormatter","displayValue","placeholderShown","errorActive","validActive","errorMessage","helperMessage","message","serialized","v","y","m","d","localMidnight","addDays","n","isDisabledDate","disabledDatesForVCalendar","list","anchorYear","winStart","winEnd","cursor","day","openPopover","closePopover","returnFocus","_a","togglePopover","onDayClick","picked","onDocumentMousedown","event","onWindowKeydown","watch","isOpen","onBeforeUnmount","_createElementBlock","_normalizeClass","_hoisted_2","_createElementVNode","_hoisted_4","_toDisplayString","_renderSlot","_ctx","_createVNode","PaIcon","_unref","VDatePicker","_withCtx","click","_vShow","_hoisted_8"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import o from "./PaDrawer.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import r from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const
|
|
4
|
+
const p = /* @__PURE__ */ r(o, [["__scopeId", "data-v-1250bb84"]]);
|
|
5
5
|
export {
|
|
6
|
-
|
|
6
|
+
p as default
|
|
7
7
|
};
|
|
8
8
|
//# sourceMappingURL=PaDrawer.vue.js.map
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
import { defineComponent as M, useModel as O, computed as f, ref as
|
|
2
|
-
import
|
|
3
|
-
const
|
|
1
|
+
import { defineComponent as M, useModel as O, useId as P, computed as f, ref as R, watch as U, nextTick as q, onBeforeUnmount as j, openBlock as n, createBlock as x, Teleport as G, createElementVNode as v, normalizeClass as D, createVNode as y, Transition as S, withCtx as w, createElementBlock as p, createCommentVNode as r, resolveDynamicComponent as H, createTextVNode as J, toDisplayString as Q, renderSlot as T, mergeModels as X } from "vue";
|
|
2
|
+
import Y from "../PaIcon/PaIcon.vue.js";
|
|
3
|
+
const Z = ["aria-labelledby"], ee = { class: "pa-drawer__header" }, te = ["aria-label"], oe = { class: "pa-drawer__body" }, ae = {
|
|
4
4
|
key: 0,
|
|
5
5
|
class: "pa-drawer__footer"
|
|
6
|
-
}
|
|
7
|
-
let ae = 0;
|
|
8
|
-
function le() {
|
|
9
|
-
return ++ae;
|
|
10
|
-
}
|
|
11
|
-
const ie = /* @__PURE__ */ M({
|
|
6
|
+
}, ie = /* @__PURE__ */ M({
|
|
12
7
|
__name: "PaDrawer",
|
|
13
|
-
props: /* @__PURE__ */
|
|
8
|
+
props: /* @__PURE__ */ X({
|
|
14
9
|
title: {},
|
|
15
10
|
titleLevel: { default: 2 },
|
|
16
11
|
showClose: { type: Boolean, default: !0 },
|
|
@@ -24,8 +19,8 @@ const ie = /* @__PURE__ */ M({
|
|
|
24
19
|
}),
|
|
25
20
|
emits: ["update:open"],
|
|
26
21
|
setup(t) {
|
|
27
|
-
const d = t, l = O(t, "open"), A =
|
|
28
|
-
let
|
|
22
|
+
const d = t, l = O(t, "open"), A = P(), z = f(() => d.id ?? `pa-drawer-${A}`), b = f(() => `${z.value}__title`), K = f(() => d.title ? b.value : void 0), N = f(() => `h${d.titleLevel}`), o = R(null), m = R(null);
|
|
23
|
+
let i = null, h = "", _ = "", s = !1, c = !1;
|
|
29
24
|
const V = 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
30
25
|
function k(e) {
|
|
31
26
|
return Array.from(e.querySelectorAll(V));
|
|
@@ -61,45 +56,46 @@ const ie = /* @__PURE__ */ M({
|
|
|
61
56
|
U(
|
|
62
57
|
l,
|
|
63
58
|
async (e) => {
|
|
64
|
-
if (
|
|
65
|
-
if (
|
|
66
|
-
m.value
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
59
|
+
if (!(typeof document > "u"))
|
|
60
|
+
if (e) {
|
|
61
|
+
if (i = document.activeElement, F(), I(), await q(), d.showClose && m.value)
|
|
62
|
+
m.value.focus();
|
|
63
|
+
else if (o.value) {
|
|
64
|
+
const a = k(o.value);
|
|
65
|
+
a.length > 0 ? a[0].focus() : o.value.focus();
|
|
66
|
+
}
|
|
67
|
+
} else
|
|
68
|
+
C(), E(), i && document.contains(i) && i.focus(), i = null;
|
|
73
69
|
},
|
|
74
70
|
{ flush: "post", immediate: !0 }
|
|
75
|
-
),
|
|
71
|
+
), j(() => {
|
|
76
72
|
C(), E();
|
|
77
73
|
});
|
|
78
74
|
function B() {
|
|
79
75
|
l.value = !1;
|
|
80
76
|
}
|
|
81
|
-
return (e, a) => (n(),
|
|
77
|
+
return (e, a) => (n(), x(G, { to: "body" }, [
|
|
82
78
|
v("div", {
|
|
83
|
-
class:
|
|
79
|
+
class: D(["pa-drawer__wrapper", { "pa-drawer__wrapper--active": l.value }])
|
|
84
80
|
}, [
|
|
85
|
-
|
|
81
|
+
y(S, {
|
|
86
82
|
name: "pa-drawer-backdrop",
|
|
87
83
|
appear: ""
|
|
88
84
|
}, {
|
|
89
|
-
default:
|
|
85
|
+
default: w(() => [
|
|
90
86
|
l.value ? (n(), p("div", {
|
|
91
87
|
key: 0,
|
|
92
88
|
class: "pa-drawer__backdrop",
|
|
93
89
|
onClick: B
|
|
94
|
-
})) :
|
|
90
|
+
})) : r("", !0)
|
|
95
91
|
]),
|
|
96
92
|
_: 1
|
|
97
93
|
}),
|
|
98
|
-
|
|
94
|
+
y(S, {
|
|
99
95
|
name: `pa-drawer-${t.position}`,
|
|
100
96
|
appear: ""
|
|
101
97
|
}, {
|
|
102
|
-
default:
|
|
98
|
+
default: w(() => [
|
|
103
99
|
l.value ? (n(), p("div", {
|
|
104
100
|
key: 0,
|
|
105
101
|
ref_key: "drawerRef",
|
|
@@ -108,24 +104,24 @@ const ie = /* @__PURE__ */ M({
|
|
|
108
104
|
"aria-modal": "true",
|
|
109
105
|
tabindex: "-1",
|
|
110
106
|
"aria-labelledby": K.value,
|
|
111
|
-
class:
|
|
107
|
+
class: D([
|
|
112
108
|
"pa-drawer",
|
|
113
109
|
`pa-drawer--${t.position}`,
|
|
114
110
|
`pa-drawer--${t.size}`
|
|
115
111
|
]),
|
|
116
112
|
onKeydown: W
|
|
117
113
|
}, [
|
|
118
|
-
v("div",
|
|
119
|
-
t.title ? (n(),
|
|
114
|
+
v("div", ee, [
|
|
115
|
+
t.title ? (n(), x(H(N.value), {
|
|
120
116
|
key: 0,
|
|
121
117
|
id: b.value,
|
|
122
118
|
class: "pa-drawer__title"
|
|
123
119
|
}, {
|
|
124
|
-
default:
|
|
125
|
-
|
|
120
|
+
default: w(() => [
|
|
121
|
+
J(Q(t.title), 1)
|
|
126
122
|
]),
|
|
127
123
|
_: 1
|
|
128
|
-
}, 8, ["id"])) :
|
|
124
|
+
}, 8, ["id"])) : r("", !0),
|
|
129
125
|
t.showClose ? (n(), p("button", {
|
|
130
126
|
key: 1,
|
|
131
127
|
ref_key: "closeButtonRef",
|
|
@@ -135,19 +131,19 @@ const ie = /* @__PURE__ */ M({
|
|
|
135
131
|
"aria-label": t.closeLabel,
|
|
136
132
|
onClick: B
|
|
137
133
|
}, [
|
|
138
|
-
|
|
134
|
+
y(Y, {
|
|
139
135
|
name: "x",
|
|
140
136
|
size: "sm"
|
|
141
137
|
})
|
|
142
|
-
], 8,
|
|
138
|
+
], 8, te)) : r("", !0)
|
|
143
139
|
]),
|
|
144
|
-
v("div",
|
|
140
|
+
v("div", oe, [
|
|
145
141
|
T(e.$slots, "default", {}, void 0, !0)
|
|
146
142
|
]),
|
|
147
|
-
e.$slots.footer ? (n(), p("div",
|
|
143
|
+
e.$slots.footer ? (n(), p("div", ae, [
|
|
148
144
|
T(e.$slots, "footer", {}, void 0, !0)
|
|
149
|
-
])) :
|
|
150
|
-
], 42,
|
|
145
|
+
])) : r("", !0)
|
|
146
|
+
], 42, Z)) : r("", !0)
|
|
151
147
|
]),
|
|
152
148
|
_: 3
|
|
153
149
|
}, 8, ["name"])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaDrawer.vue2.js","sources":["../../../src/components/PaDrawer/PaDrawer.vue"],"sourcesContent":["<script lang=\"ts\">\nlet drawerUid = 0\nfunction nextDrawerId() {\n return ++drawerUid\n}\n\nexport type PaDrawerPosition = 'right' | 'left' | 'top' | 'bottom'\nexport type PaDrawerSize = 'sm' | 'md' | 'lg'\n\nexport interface PaDrawerProps {\n title?: string\n titleLevel?: 1 | 2 | 3 | 4 | 5 | 6\n showClose?: boolean\n closeLabel?: string\n position?: PaDrawerPosition\n size?: PaDrawerSize\n id?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue'\nimport PaIcon from '../PaIcon/PaIcon.vue'\n\nconst props = withDefaults(defineProps<PaDrawerProps>(), {\n titleLevel: 2,\n showClose: true,\n closeLabel: 'Chiudi',\n position: 'right',\n size: 'md',\n})\n\nconst open = defineModel<boolean>('open', { default: false })\n\nconst uid = nextDrawerId()\nconst baseId = computed(() => props.id ?? `pa-drawer-${uid}`)\nconst titleId = computed(() => `${baseId.value}__title`)\nconst labelledBy = computed(() => (props.title ? titleId.value : undefined))\nconst titleTag = computed(() => `h${props.titleLevel}` as const)\n\nconst drawerRef = ref<HTMLElement | null>(null)\nconst closeButtonRef = ref<HTMLButtonElement | null>(null)\n\nlet previouslyFocusedElement: HTMLElement | null = null\nlet originalBodyOverflow = ''\nlet originalBodyPaddingRight = ''\nlet scrollLockActive = false\nlet escListenerAttached = false\n\nconst FOCUSABLE_SELECTOR =\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n\nfunction getFocusable(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR))\n}\n\nfunction onDrawerKeydown(event: KeyboardEvent) {\n if (event.key !== 'Tab' || !drawerRef.value) return\n const focusable = getFocusable(drawerRef.value)\n if (focusable.length === 0) {\n event.preventDefault()\n drawerRef.value.focus()\n return\n }\n const first = focusable[0]!\n const last = focusable[focusable.length - 1]!\n const active = document.activeElement as HTMLElement | null\n if (event.shiftKey) {\n if (active === first || !drawerRef.value.contains(active)) {\n event.preventDefault()\n last.focus()\n }\n } else {\n if (active === last || !drawerRef.value.contains(active)) {\n event.preventDefault()\n first.focus()\n }\n }\n}\n\nfunction onWindowKeydownEsc(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault()\n open.value = false\n }\n}\n\nfunction lockScroll() {\n if (scrollLockActive) return\n originalBodyOverflow = document.body.style.overflow\n originalBodyPaddingRight = document.body.style.paddingRight\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n document.body.style.overflow = 'hidden'\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`\n }\n scrollLockActive = true\n}\n\nfunction unlockScroll() {\n if (!scrollLockActive) return\n document.body.style.overflow = originalBodyOverflow\n document.body.style.paddingRight = originalBodyPaddingRight\n scrollLockActive = false\n}\n\nfunction attachEsc() {\n if (escListenerAttached) return\n window.addEventListener('keydown', onWindowKeydownEsc)\n escListenerAttached = true\n}\n\nfunction detachEsc() {\n if (!escListenerAttached) return\n window.removeEventListener('keydown', onWindowKeydownEsc)\n escListenerAttached = false\n}\n\nwatch(\n open,\n async (next) => {\n if (next) {\n previouslyFocusedElement = document.activeElement as HTMLElement | null\n lockScroll()\n attachEsc()\n await nextTick()\n if (props.showClose && closeButtonRef.value) {\n closeButtonRef.value.focus()\n } else if (drawerRef.value) {\n const focusable = getFocusable(drawerRef.value)\n if (focusable.length > 0) {\n focusable[0]!.focus()\n } else {\n drawerRef.value.focus()\n }\n }\n } else {\n detachEsc()\n unlockScroll()\n if (previouslyFocusedElement && document.contains(previouslyFocusedElement)) {\n previouslyFocusedElement.focus()\n }\n previouslyFocusedElement = null\n }\n },\n { flush: 'post', immediate: true },\n)\n\nonBeforeUnmount(() => {\n detachEsc()\n unlockScroll()\n})\n\nfunction close() {\n open.value = false\n}\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div class=\"pa-drawer__wrapper\" :class=\"{ 'pa-drawer__wrapper--active': open }\">\n <Transition name=\"pa-drawer-backdrop\" appear>\n <div v-if=\"open\" class=\"pa-drawer__backdrop\" @click=\"close\" />\n </Transition>\n <Transition :name=\"`pa-drawer-${position}`\" appear>\n <div\n v-if=\"open\"\n ref=\"drawerRef\"\n role=\"dialog\"\n aria-modal=\"true\"\n tabindex=\"-1\"\n :aria-labelledby=\"labelledBy\"\n :class=\"[\n 'pa-drawer',\n `pa-drawer--${position}`,\n `pa-drawer--${size}`,\n ]\"\n @keydown=\"onDrawerKeydown\"\n >\n <div class=\"pa-drawer__header\">\n <component\n :is=\"titleTag\"\n v-if=\"title\"\n :id=\"titleId\"\n class=\"pa-drawer__title\"\n >\n {{ title }}\n </component>\n <button\n v-if=\"showClose\"\n ref=\"closeButtonRef\"\n type=\"button\"\n class=\"pa-drawer__close\"\n :aria-label=\"closeLabel\"\n @click=\"close\"\n >\n <PaIcon name=\"x\" size=\"sm\" />\n </button>\n </div>\n <div class=\"pa-drawer__body\">\n <slot />\n </div>\n <div v-if=\"$slots.footer\" class=\"pa-drawer__footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </Transition>\n </div>\n </Teleport>\n</template>\n\n<style scoped>\n.pa-drawer__wrapper {\n position: fixed;\n inset: 0;\n z-index: 1000;\n container-type: inline-size;\n pointer-events: none;\n}\n\n.pa-drawer__backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 1000;\n pointer-events: auto;\n}\n\n.pa-drawer {\n position: fixed;\n z-index: 1001;\n background: var(--pa-color-bg-white);\n box-shadow: var(--pa-shadow-elevation-01);\n display: flex;\n flex-direction: column;\n padding: 32px;\n pointer-events: auto;\n font-family: var(--pa-font-family-base);\n box-sizing: border-box;\n}\n\n.pa-drawer:focus {\n outline: none;\n}\n\n.pa-drawer--sm {\n --pa-drawer-width: 400px;\n --pa-drawer-height: 320px;\n}\n\n.pa-drawer--md {\n --pa-drawer-width: 550px;\n --pa-drawer-height: 480px;\n}\n\n.pa-drawer--lg {\n --pa-drawer-width: 720px;\n --pa-drawer-height: 640px;\n}\n\n.pa-drawer--right {\n top: 0;\n right: 0;\n height: 100vh;\n width: var(--pa-drawer-width);\n max-width: 100vw;\n}\n\n.pa-drawer--left {\n top: 0;\n left: 0;\n height: 100vh;\n width: var(--pa-drawer-width);\n max-width: 100vw;\n}\n\n.pa-drawer--top {\n top: 0;\n left: 0;\n width: 100vw;\n height: var(--pa-drawer-height);\n max-height: 100vh;\n}\n\n.pa-drawer--bottom {\n bottom: 0;\n left: 0;\n width: 100vw;\n height: var(--pa-drawer-height);\n max-height: 100vh;\n}\n\n.pa-drawer__header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--pa-space-sm);\n width: 100%;\n flex-shrink: 0;\n}\n\n.pa-drawer__title {\n margin: 0;\n flex: 1 1 auto;\n min-width: 0;\n font-weight: 600;\n font-size: 20px;\n line-height: 24px;\n letter-spacing: -0.5px;\n color: var(--pa-color-primary);\n}\n\n.pa-drawer__close {\n flex: 0 0 auto;\n width: 44px;\n height: 44px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--pa-radius-smooth);\n background: transparent;\n border: none;\n color: var(--pa-color-primary);\n cursor: pointer;\n padding: 0;\n margin: -10px -10px 0 0;\n}\n\n.pa-drawer__close:hover {\n background: var(--pa-color-bg-secondary-light-50);\n}\n\n.pa-drawer__close:focus-visible {\n outline: var(--pa-border-sm) solid var(--pa-color-primary-focus-border);\n outline-offset: 2px;\n}\n\n.pa-drawer__body {\n flex: 1 1 auto;\n overflow-y: auto;\n width: 100%;\n margin-top: var(--pa-space-sm);\n}\n\n.pa-drawer__footer {\n display: flex;\n align-items: center;\n gap: var(--pa-space-sm);\n min-height: 64px;\n padding: var(--pa-space-xs) var(--pa-space-lg);\n margin: 0 calc(-1 * var(--pa-space-lg)) calc(-1 * var(--pa-space-lg))\n calc(-1 * var(--pa-space-lg));\n background: var(--pa-color-primary);\n color: var(--pa-color-text-white);\n flex-shrink: 0;\n}\n\n.pa-drawer-backdrop-enter-from,\n.pa-drawer-backdrop-leave-to {\n opacity: 0;\n}\n\n.pa-drawer-backdrop-enter-active {\n transition: opacity 200ms ease-out;\n}\n\n.pa-drawer-backdrop-leave-active {\n transition: opacity 200ms ease-in;\n}\n\n.pa-drawer-right-enter-from,\n.pa-drawer-right-leave-to {\n transform: translateX(100%);\n}\n\n.pa-drawer-left-enter-from,\n.pa-drawer-left-leave-to {\n transform: translateX(-100%);\n}\n\n.pa-drawer-top-enter-from,\n.pa-drawer-top-leave-to {\n transform: translateY(-100%);\n}\n\n.pa-drawer-bottom-enter-from,\n.pa-drawer-bottom-leave-to {\n transform: translateY(100%);\n}\n\n.pa-drawer-right-enter-active,\n.pa-drawer-left-enter-active,\n.pa-drawer-top-enter-active,\n.pa-drawer-bottom-enter-active {\n transition: transform 250ms ease-out;\n}\n\n.pa-drawer-right-leave-active,\n.pa-drawer-left-leave-active,\n.pa-drawer-top-leave-active,\n.pa-drawer-bottom-leave-active {\n transition: transform 200ms ease-in;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pa-drawer-backdrop-enter-active,\n .pa-drawer-backdrop-leave-active,\n .pa-drawer-right-enter-active,\n .pa-drawer-right-leave-active,\n .pa-drawer-left-enter-active,\n .pa-drawer-left-leave-active,\n .pa-drawer-top-enter-active,\n .pa-drawer-top-leave-active,\n .pa-drawer-bottom-enter-active,\n .pa-drawer-bottom-leave-active {\n transition-duration: 0ms;\n }\n}\n\n@container (max-width: 600px) {\n .pa-drawer {\n padding: var(--pa-space-md);\n }\n\n .pa-drawer--right,\n .pa-drawer--left {\n width: 100vw;\n max-width: none;\n }\n\n .pa-drawer--top,\n .pa-drawer--bottom {\n height: 100vh;\n max-height: none;\n }\n\n .pa-drawer__title {\n font-size: 18px;\n line-height: 22px;\n }\n\n .pa-drawer__footer {\n padding: var(--pa-space-xs) var(--pa-space-md);\n margin: 0 calc(-1 * var(--pa-space-md)) calc(-1 * var(--pa-space-md))\n calc(-1 * var(--pa-space-md));\n }\n}\n</style>\n"],"names":["drawerUid","nextDrawerId","props","__props","open","_useModel","uid","baseId","computed","titleId","labelledBy","titleTag","drawerRef","ref","closeButtonRef","previouslyFocusedElement","originalBodyOverflow","originalBodyPaddingRight","scrollLockActive","escListenerAttached","FOCUSABLE_SELECTOR","getFocusable","root","onDrawerKeydown","event","focusable","first","last","active","onWindowKeydownEsc","lockScroll","scrollbarWidth","unlockScroll","attachEsc","detachEsc","watch","next","nextTick","onBeforeUnmount","close","_createBlock","_Teleport","_createElementVNode","_normalizeClass","_createVNode","_Transition","_createElementBlock","_hoisted_2","_openBlock","_resolveDynamicComponent","PaIcon","_hoisted_4","_renderSlot","_ctx","$slots","_hoisted_5"],"mappings":";;;;;;AACA,IAAIA,KAAY;AAChB,SAASC,KAAe;AACtB,SAAO,EAAED;AACX;;;;;;;;;;;;;;;;;AAoBA,UAAME,IAAQC,GAQRC,IAAOC,EAAoBF,GAAC,MAA0B,GAEtDG,IAAML,GAAA,GACNM,IAASC,EAAS,MAAMN,EAAM,MAAM,aAAaI,CAAG,EAAE,GACtDG,IAAUD,EAAS,MAAM,GAAGD,EAAO,KAAK,SAAS,GACjDG,IAAaF,EAAS,MAAON,EAAM,QAAQO,EAAQ,QAAQ,MAAU,GACrEE,IAAWH,EAAS,MAAM,IAAIN,EAAM,UAAU,EAAW,GAEzDU,IAAYC,EAAwB,IAAI,GACxCC,IAAiBD,EAA8B,IAAI;AAEzD,QAAIE,IAA+C,MAC/CC,IAAuB,IACvBC,IAA2B,IAC3BC,IAAmB,IACnBC,IAAsB;AAE1B,UAAMC,IACJ;AAEF,aAASC,EAAaC,GAAkC;AACtD,aAAO,MAAM,KAAKA,EAAK,iBAA8BF,CAAkB,CAAC;AAAA,IAC1E;AAEA,aAASG,EAAgBC,GAAsB;AAC7C,UAAIA,EAAM,QAAQ,SAAS,CAACZ,EAAU,MAAO;AAC7C,YAAMa,IAAYJ,EAAaT,EAAU,KAAK;AAC9C,UAAIa,EAAU,WAAW,GAAG;AAC1B,QAAAD,EAAM,eAAA,GACNZ,EAAU,MAAM,MAAA;AAChB;AAAA,MACF;AACA,YAAMc,IAAQD,EAAU,CAAC,GACnBE,IAAOF,EAAUA,EAAU,SAAS,CAAC,GACrCG,IAAS,SAAS;AACxB,MAAIJ,EAAM,YACJI,MAAWF,KAAS,CAACd,EAAU,MAAM,SAASgB,CAAM,OACtDJ,EAAM,eAAA,GACNG,EAAK,MAAA,MAGHC,MAAWD,KAAQ,CAACf,EAAU,MAAM,SAASgB,CAAM,OACrDJ,EAAM,eAAA,GACNE,EAAM,MAAA;AAAA,IAGZ;AAEA,aAASG,EAAmBL,GAAsB;AAChD,MAAIA,EAAM,QAAQ,aAChBA,EAAM,eAAA,GACNpB,EAAK,QAAQ;AAAA,IAEjB;AAEA,aAAS0B,IAAa;AACpB,UAAIZ,EAAkB;AACtB,MAAAF,IAAuB,SAAS,KAAK,MAAM,UAC3CC,IAA2B,SAAS,KAAK,MAAM;AAC/C,YAAMc,IAAiB,OAAO,aAAa,SAAS,gBAAgB;AACpE,eAAS,KAAK,MAAM,WAAW,UAC3BA,IAAiB,MACnB,SAAS,KAAK,MAAM,eAAe,GAAGA,CAAc,OAEtDb,IAAmB;AAAA,IACrB;AAEA,aAASc,IAAe;AACtB,MAAKd,MACL,SAAS,KAAK,MAAM,WAAWF,GAC/B,SAAS,KAAK,MAAM,eAAeC,GACnCC,IAAmB;AAAA,IACrB;AAEA,aAASe,IAAY;AACnB,MAAId,MACJ,OAAO,iBAAiB,WAAWU,CAAkB,GACrDV,IAAsB;AAAA,IACxB;AAEA,aAASe,IAAY;AACnB,MAAKf,MACL,OAAO,oBAAoB,WAAWU,CAAkB,GACxDV,IAAsB;AAAA,IACxB;AAEA,IAAAgB;AAAA,MACE/B;AAAA,MACA,OAAOgC,MAAS;AACd,YAAIA;AAKF,cAJArB,IAA2B,SAAS,eACpCe,EAAA,GACAG,EAAA,GACA,MAAMI,EAAA,GACFnC,EAAM,aAAaY,EAAe;AACpC,YAAAA,EAAe,MAAM,MAAA;AAAA,mBACZF,EAAU,OAAO;AAC1B,kBAAMa,IAAYJ,EAAaT,EAAU,KAAK;AAC9C,YAAIa,EAAU,SAAS,IACrBA,EAAU,CAAC,EAAG,MAAA,IAEdb,EAAU,MAAM,MAAA;AAAA,UAEpB;AAAA;AAEA,UAAAsB,EAAA,GACAF,EAAA,GACIjB,KAA4B,SAAS,SAASA,CAAwB,KACxEA,EAAyB,MAAA,GAE3BA,IAA2B;AAAA,MAE/B;AAAA,MACA,EAAE,OAAO,QAAQ,WAAW,GAAA;AAAA,IAAK,GAGnCuB,EAAgB,MAAM;AACpB,MAAAJ,EAAA,GACAF,EAAA;AAAA,IACF,CAAC;AAED,aAASO,IAAQ;AACf,MAAAnC,EAAK,QAAQ;AAAA,IACf;2BAIEoC,EAiDWC,GAAA,EAjDD,IAAG,UAAM;AAAA,MACjBC,EA+CM,OAAA;AAAA,QA/CD,OAAKC,EAAA,CAAC,sBAAoB,EAAA,8BAAyCvC,EAAA,OAAI,CAAA;AAAA,MAAA;QAC1EwC,EAEaC,GAAA;AAAA,UAFD,MAAK;AAAA,UAAqB,QAAA;AAAA,QAAA;qBACpC,MAA8D;AAAA,YAAnDzC,EAAA,cAAX0C,EAA8D,OAAA;AAAA;cAA7C,OAAM;AAAA,cAAuB,SAAOP;AAAA,YAAA;;;;QAEvDK,EA0CaC,GAAA;AAAA,UA1CA,mBAAmB1C,EAAA,QAAQ;AAAA,UAAI,QAAA;AAAA,QAAA;qBAC1C,MAwCM;AAAA,YAvCEC,EAAA,cADR0C,EAwCM,OAAA;AAAA;uBAtCA;AAAA,cAAJ,KAAIlC;AAAA,cACJ,MAAK;AAAA,cACL,cAAW;AAAA,cACX,UAAS;AAAA,cACR,mBAAiBF,EAAA;AAAA,cACjB,OAAKiC,EAAA;AAAA;8BAAuDxC,EAAA,QAAQ;AAAA,8BAA8BA,EAAA,IAAI;AAAA,cAAA;cAKtG,WAASoB;AAAA,YAAA;cAEVmB,EAmBM,OAnBNK,GAmBM;AAAA,gBAhBI5C,EAAA,SAFR6C,EAAA,GAAAR,EAOYS,EANLtC,EAAA,KAAQ,GAAA;AAAA;kBAEZ,IAAIF,EAAA;AAAA,kBACL,OAAM;AAAA,gBAAA;6BAEN,MAAW;AAAA,wBAARN,EAAA,KAAK,GAAA,CAAA;AAAA,kBAAA;;;gBAGFA,EAAA,kBADR2C,EASS,UAAA;AAAA;2BAPH;AAAA,kBAAJ,KAAIhC;AAAA,kBACJ,MAAK;AAAA,kBACL,OAAM;AAAA,kBACL,cAAYX,EAAA;AAAA,kBACZ,SAAOoC;AAAA,gBAAA;kBAERK,EAA6BM,GAAA;AAAA,oBAArB,MAAK;AAAA,oBAAI,MAAK;AAAA,kBAAA;;;cAG1BR,EAEM,OAFNS,IAEM;AAAA,gBADJC,EAAQC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,cAAA;cAECC,EAAAA,OAAO,UAAlBN,KAAAF,EAEM,OAFNS,IAEM;AAAA,gBADJH,EAAsBC,EAAA,QAAA,UAAA,CAAA,GAAA,QAAA,EAAA;AAAA,cAAA;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"PaDrawer.vue2.js","sources":["../../../src/components/PaDrawer/PaDrawer.vue"],"sourcesContent":["<script lang=\"ts\">\n\nexport type PaDrawerPosition = 'right' | 'left' | 'top' | 'bottom'\nexport type PaDrawerSize = 'sm' | 'md' | 'lg'\n\nexport interface PaDrawerProps {\n title?: string\n titleLevel?: 1 | 2 | 3 | 4 | 5 | 6\n showClose?: boolean\n closeLabel?: string\n position?: PaDrawerPosition\n size?: PaDrawerSize\n id?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, useId, watch } from 'vue'\nimport PaIcon from '../PaIcon/PaIcon.vue'\n\nconst props = withDefaults(defineProps<PaDrawerProps>(), {\n titleLevel: 2,\n showClose: true,\n closeLabel: 'Chiudi',\n position: 'right',\n size: 'md',\n})\n\nconst open = defineModel<boolean>('open', { default: false })\n\nconst uid = useId()\nconst baseId = computed(() => props.id ?? `pa-drawer-${uid}`)\nconst titleId = computed(() => `${baseId.value}__title`)\nconst labelledBy = computed(() => (props.title ? titleId.value : undefined))\nconst titleTag = computed(() => `h${props.titleLevel}` as const)\n\nconst drawerRef = ref<HTMLElement | null>(null)\nconst closeButtonRef = ref<HTMLButtonElement | null>(null)\n\nlet previouslyFocusedElement: HTMLElement | null = null\nlet originalBodyOverflow = ''\nlet originalBodyPaddingRight = ''\nlet scrollLockActive = false\nlet escListenerAttached = false\n\nconst FOCUSABLE_SELECTOR =\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n\nfunction getFocusable(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR))\n}\n\nfunction onDrawerKeydown(event: KeyboardEvent) {\n if (event.key !== 'Tab' || !drawerRef.value) return\n const focusable = getFocusable(drawerRef.value)\n if (focusable.length === 0) {\n event.preventDefault()\n drawerRef.value.focus()\n return\n }\n const first = focusable[0]!\n const last = focusable[focusable.length - 1]!\n const active = document.activeElement as HTMLElement | null\n if (event.shiftKey) {\n if (active === first || !drawerRef.value.contains(active)) {\n event.preventDefault()\n last.focus()\n }\n } else {\n if (active === last || !drawerRef.value.contains(active)) {\n event.preventDefault()\n first.focus()\n }\n }\n}\n\nfunction onWindowKeydownEsc(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault()\n open.value = false\n }\n}\n\nfunction lockScroll() {\n if (scrollLockActive) return\n originalBodyOverflow = document.body.style.overflow\n originalBodyPaddingRight = document.body.style.paddingRight\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n document.body.style.overflow = 'hidden'\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`\n }\n scrollLockActive = true\n}\n\nfunction unlockScroll() {\n if (!scrollLockActive) return\n document.body.style.overflow = originalBodyOverflow\n document.body.style.paddingRight = originalBodyPaddingRight\n scrollLockActive = false\n}\n\nfunction attachEsc() {\n if (escListenerAttached) return\n window.addEventListener('keydown', onWindowKeydownEsc)\n escListenerAttached = true\n}\n\nfunction detachEsc() {\n if (!escListenerAttached) return\n window.removeEventListener('keydown', onWindowKeydownEsc)\n escListenerAttached = false\n}\n\nwatch(\n open,\n async (next) => {\n if (typeof document === 'undefined') return\n if (next) {\n previouslyFocusedElement = document.activeElement as HTMLElement | null\n lockScroll()\n attachEsc()\n await nextTick()\n if (props.showClose && closeButtonRef.value) {\n closeButtonRef.value.focus()\n } else if (drawerRef.value) {\n const focusable = getFocusable(drawerRef.value)\n if (focusable.length > 0) {\n focusable[0]!.focus()\n } else {\n drawerRef.value.focus()\n }\n }\n } else {\n detachEsc()\n unlockScroll()\n if (previouslyFocusedElement && document.contains(previouslyFocusedElement)) {\n previouslyFocusedElement.focus()\n }\n previouslyFocusedElement = null\n }\n },\n { flush: 'post', immediate: true },\n)\n\nonBeforeUnmount(() => {\n detachEsc()\n unlockScroll()\n})\n\nfunction close() {\n open.value = false\n}\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div class=\"pa-drawer__wrapper\" :class=\"{ 'pa-drawer__wrapper--active': open }\">\n <Transition name=\"pa-drawer-backdrop\" appear>\n <div v-if=\"open\" class=\"pa-drawer__backdrop\" @click=\"close\" />\n </Transition>\n <Transition :name=\"`pa-drawer-${position}`\" appear>\n <div\n v-if=\"open\"\n ref=\"drawerRef\"\n role=\"dialog\"\n aria-modal=\"true\"\n tabindex=\"-1\"\n :aria-labelledby=\"labelledBy\"\n :class=\"[\n 'pa-drawer',\n `pa-drawer--${position}`,\n `pa-drawer--${size}`,\n ]\"\n @keydown=\"onDrawerKeydown\"\n >\n <div class=\"pa-drawer__header\">\n <component\n :is=\"titleTag\"\n v-if=\"title\"\n :id=\"titleId\"\n class=\"pa-drawer__title\"\n >\n {{ title }}\n </component>\n <button\n v-if=\"showClose\"\n ref=\"closeButtonRef\"\n type=\"button\"\n class=\"pa-drawer__close\"\n :aria-label=\"closeLabel\"\n @click=\"close\"\n >\n <PaIcon name=\"x\" size=\"sm\" />\n </button>\n </div>\n <div class=\"pa-drawer__body\">\n <slot />\n </div>\n <div v-if=\"$slots.footer\" class=\"pa-drawer__footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </Transition>\n </div>\n </Teleport>\n</template>\n\n<style scoped>\n.pa-drawer__wrapper {\n position: fixed;\n inset: 0;\n z-index: 1000;\n container-type: inline-size;\n pointer-events: none;\n}\n\n.pa-drawer__backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 1000;\n pointer-events: auto;\n}\n\n.pa-drawer {\n position: fixed;\n z-index: 1001;\n background: var(--pa-color-bg-white);\n box-shadow: var(--pa-shadow-elevation-01);\n display: flex;\n flex-direction: column;\n padding: 32px;\n pointer-events: auto;\n font-family: var(--pa-font-family-base);\n box-sizing: border-box;\n}\n\n.pa-drawer:focus {\n outline: none;\n}\n\n.pa-drawer--sm {\n --pa-drawer-width: 400px;\n --pa-drawer-height: 320px;\n}\n\n.pa-drawer--md {\n --pa-drawer-width: 550px;\n --pa-drawer-height: 480px;\n}\n\n.pa-drawer--lg {\n --pa-drawer-width: 720px;\n --pa-drawer-height: 640px;\n}\n\n.pa-drawer--right {\n top: 0;\n right: 0;\n height: 100vh;\n width: var(--pa-drawer-width);\n max-width: 100vw;\n}\n\n.pa-drawer--left {\n top: 0;\n left: 0;\n height: 100vh;\n width: var(--pa-drawer-width);\n max-width: 100vw;\n}\n\n.pa-drawer--top {\n top: 0;\n left: 0;\n width: 100vw;\n height: var(--pa-drawer-height);\n max-height: 100vh;\n}\n\n.pa-drawer--bottom {\n bottom: 0;\n left: 0;\n width: 100vw;\n height: var(--pa-drawer-height);\n max-height: 100vh;\n}\n\n.pa-drawer__header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--pa-space-sm);\n width: 100%;\n flex-shrink: 0;\n}\n\n.pa-drawer__title {\n margin: 0;\n flex: 1 1 auto;\n min-width: 0;\n font-weight: 600;\n font-size: 20px;\n line-height: 24px;\n letter-spacing: -0.5px;\n color: var(--pa-color-primary);\n}\n\n.pa-drawer__close {\n flex: 0 0 auto;\n width: 44px;\n height: 44px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--pa-radius-smooth);\n background: transparent;\n border: none;\n color: var(--pa-color-primary);\n cursor: pointer;\n padding: 0;\n margin: -10px -10px 0 0;\n}\n\n.pa-drawer__close:hover {\n background: var(--pa-color-bg-secondary-light-50);\n}\n\n.pa-drawer__close:focus-visible {\n outline: var(--pa-border-sm) solid var(--pa-color-primary-focus-border);\n outline-offset: 2px;\n}\n\n.pa-drawer__body {\n flex: 1 1 auto;\n overflow-y: auto;\n width: 100%;\n margin-top: var(--pa-space-sm);\n}\n\n.pa-drawer__footer {\n display: flex;\n align-items: center;\n gap: var(--pa-space-sm);\n min-height: 64px;\n padding: var(--pa-space-xs) var(--pa-space-lg);\n margin: 0 calc(-1 * var(--pa-space-lg)) calc(-1 * var(--pa-space-lg))\n calc(-1 * var(--pa-space-lg));\n background: var(--pa-color-primary);\n color: var(--pa-color-text-white);\n flex-shrink: 0;\n}\n\n.pa-drawer-backdrop-enter-from,\n.pa-drawer-backdrop-leave-to {\n opacity: 0;\n}\n\n.pa-drawer-backdrop-enter-active {\n transition: opacity 200ms ease-out;\n}\n\n.pa-drawer-backdrop-leave-active {\n transition: opacity 200ms ease-in;\n}\n\n.pa-drawer-right-enter-from,\n.pa-drawer-right-leave-to {\n transform: translateX(100%);\n}\n\n.pa-drawer-left-enter-from,\n.pa-drawer-left-leave-to {\n transform: translateX(-100%);\n}\n\n.pa-drawer-top-enter-from,\n.pa-drawer-top-leave-to {\n transform: translateY(-100%);\n}\n\n.pa-drawer-bottom-enter-from,\n.pa-drawer-bottom-leave-to {\n transform: translateY(100%);\n}\n\n.pa-drawer-right-enter-active,\n.pa-drawer-left-enter-active,\n.pa-drawer-top-enter-active,\n.pa-drawer-bottom-enter-active {\n transition: transform 250ms ease-out;\n}\n\n.pa-drawer-right-leave-active,\n.pa-drawer-left-leave-active,\n.pa-drawer-top-leave-active,\n.pa-drawer-bottom-leave-active {\n transition: transform 200ms ease-in;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pa-drawer-backdrop-enter-active,\n .pa-drawer-backdrop-leave-active,\n .pa-drawer-right-enter-active,\n .pa-drawer-right-leave-active,\n .pa-drawer-left-enter-active,\n .pa-drawer-left-leave-active,\n .pa-drawer-top-enter-active,\n .pa-drawer-top-leave-active,\n .pa-drawer-bottom-enter-active,\n .pa-drawer-bottom-leave-active {\n transition-duration: 0ms;\n }\n}\n\n@container (max-width: 600px) {\n .pa-drawer {\n padding: var(--pa-space-md);\n }\n\n .pa-drawer--right,\n .pa-drawer--left {\n width: 100vw;\n max-width: none;\n }\n\n .pa-drawer--top,\n .pa-drawer--bottom {\n height: 100vh;\n max-height: none;\n }\n\n .pa-drawer__title {\n font-size: 18px;\n line-height: 22px;\n }\n\n .pa-drawer__footer {\n padding: var(--pa-space-xs) var(--pa-space-md);\n margin: 0 calc(-1 * var(--pa-space-md)) calc(-1 * var(--pa-space-md))\n calc(-1 * var(--pa-space-md));\n }\n}\n</style>\n"],"names":["props","__props","open","_useModel","uid","useId","baseId","computed","titleId","labelledBy","titleTag","drawerRef","ref","closeButtonRef","previouslyFocusedElement","originalBodyOverflow","originalBodyPaddingRight","scrollLockActive","escListenerAttached","FOCUSABLE_SELECTOR","getFocusable","root","onDrawerKeydown","event","focusable","first","last","active","onWindowKeydownEsc","lockScroll","scrollbarWidth","unlockScroll","attachEsc","detachEsc","watch","next","nextTick","onBeforeUnmount","close","_createBlock","_Teleport","_createElementVNode","_normalizeClass","_createVNode","_Transition","_createElementBlock","_hoisted_2","_openBlock","_resolveDynamicComponent","PaIcon","_hoisted_4","_renderSlot","_ctx","$slots","_hoisted_5"],"mappings":"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"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import o from "./PaFileUpload.vue2.js";
|
|
2
|
-
import { nextPaFileUploadId as f } from "./PaFileUpload.vue2.js";
|
|
3
2
|
/* empty css */
|
|
4
|
-
import
|
|
5
|
-
const
|
|
3
|
+
import t from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-d1518cb0"]]);
|
|
6
5
|
export {
|
|
7
|
-
|
|
8
|
-
f as nextPaFileUploadId
|
|
6
|
+
m as default
|
|
9
7
|
};
|
|
10
8
|
//# sourceMappingURL=PaFileUpload.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaFileUpload.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PaFileUpload.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|