@semplice-studio/pa-design-system 0.1.1 → 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.
Files changed (119) hide show
  1. package/README.md +85 -128
  2. package/dist/components/PaAccordion/PaAccordion.vue.d.ts +0 -1
  3. package/dist/components/PaAccordion/PaAccordion.vue.js +3 -5
  4. package/dist/components/PaAccordion/PaAccordion.vue.js.map +1 -1
  5. package/dist/components/PaAccordion/PaAccordion.vue2.js +24 -30
  6. package/dist/components/PaAccordion/PaAccordion.vue2.js.map +1 -1
  7. package/dist/components/PaBanner/PaBanner.vue.js +6 -6
  8. package/dist/components/PaBanner/PaBanner.vue2.js +26 -28
  9. package/dist/components/PaBanner/PaBanner.vue2.js.map +1 -1
  10. package/dist/components/PaCard/PaCard.vue.d.ts +17 -14
  11. package/dist/components/PaCard/PaCard.vue.js +2 -2
  12. package/dist/components/PaCard/PaCard.vue2.js +37 -42
  13. package/dist/components/PaCard/PaCard.vue2.js.map +1 -1
  14. package/dist/components/PaCheckbox/PaCheckbox.vue.d.ts +5 -6
  15. package/dist/components/PaCheckbox/PaCheckbox.vue.js +2 -4
  16. package/dist/components/PaCheckbox/PaCheckbox.vue.js.map +1 -1
  17. package/dist/components/PaCheckbox/PaCheckbox.vue2.js +20 -26
  18. package/dist/components/PaCheckbox/PaCheckbox.vue2.js.map +1 -1
  19. package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue.d.ts +5 -6
  20. package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue.js +2 -4
  21. package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue.js.map +1 -1
  22. package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue2.js +25 -31
  23. package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue2.js.map +1 -1
  24. package/dist/components/PaDatePicker/PaDatePicker.vue.d.ts +13 -26
  25. package/dist/components/PaDatePicker/PaDatePicker.vue.js +4 -6
  26. package/dist/components/PaDatePicker/PaDatePicker.vue.js.map +1 -1
  27. package/dist/components/PaDatePicker/PaDatePicker.vue2.js +53 -59
  28. package/dist/components/PaDatePicker/PaDatePicker.vue2.js.map +1 -1
  29. package/dist/components/PaDrawer/PaDrawer.vue.js +2 -2
  30. package/dist/components/PaDrawer/PaDrawer.vue2.js +37 -41
  31. package/dist/components/PaDrawer/PaDrawer.vue2.js.map +1 -1
  32. package/dist/components/PaFileUpload/PaFileUpload.vue.d.ts +0 -1
  33. package/dist/components/PaFileUpload/PaFileUpload.vue.js +3 -5
  34. package/dist/components/PaFileUpload/PaFileUpload.vue.js.map +1 -1
  35. package/dist/components/PaFileUpload/PaFileUpload.vue2.js +22 -28
  36. package/dist/components/PaFileUpload/PaFileUpload.vue2.js.map +1 -1
  37. package/dist/components/PaFooter/PaFooter.vue.js +1 -1
  38. package/dist/components/PaFooter/PaFooter.vue2.js +43 -48
  39. package/dist/components/PaFooter/PaFooter.vue2.js.map +1 -1
  40. package/dist/components/PaHeaderDesktop/PaHeaderDesktop.vue.js +1 -1
  41. package/dist/components/PaHeaderDesktop/PaHeaderDesktop.vue2.js +61 -66
  42. package/dist/components/PaHeaderDesktop/PaHeaderDesktop.vue2.js.map +1 -1
  43. package/dist/components/PaHeaderMobile/PaHeaderMobile.vue.js +2 -2
  44. package/dist/components/PaHeaderMobile/PaHeaderMobile.vue2.js +69 -74
  45. package/dist/components/PaHeaderMobile/PaHeaderMobile.vue2.js.map +1 -1
  46. package/dist/components/PaHero/PaHero.vue.d.ts +15 -12
  47. package/dist/components/PaHero/PaHero.vue.js +2 -2
  48. package/dist/components/PaHero/PaHero.vue2.js +36 -41
  49. package/dist/components/PaHero/PaHero.vue2.js.map +1 -1
  50. package/dist/components/PaInput/PaInput.vue.d.ts +15 -13
  51. package/dist/components/PaInput/PaInput.vue.js +4 -6
  52. package/dist/components/PaInput/PaInput.vue.js.map +1 -1
  53. package/dist/components/PaInput/PaInput.vue2.js +27 -33
  54. package/dist/components/PaInput/PaInput.vue2.js.map +1 -1
  55. package/dist/components/PaModal/PaModal.vue.d.ts +14 -11
  56. package/dist/components/PaModal/PaModal.vue.js +3 -3
  57. package/dist/components/PaModal/PaModal.vue2.js +41 -46
  58. package/dist/components/PaModal/PaModal.vue2.js.map +1 -1
  59. package/dist/components/PaMonthPicker/PaMonthPicker.vue.d.ts +13 -26
  60. package/dist/components/PaMonthPicker/PaMonthPicker.vue.js +2 -4
  61. package/dist/components/PaMonthPicker/PaMonthPicker.vue.js.map +1 -1
  62. package/dist/components/PaMonthPicker/PaMonthPicker.vue2.js +64 -70
  63. package/dist/components/PaMonthPicker/PaMonthPicker.vue2.js.map +1 -1
  64. package/dist/components/PaPagination/PaPagination.vue.js +2 -2
  65. package/dist/components/PaPagination/PaPagination.vue2.js +41 -46
  66. package/dist/components/PaPagination/PaPagination.vue2.js.map +1 -1
  67. package/dist/components/PaRadioGroup/PaRadioGroup.vue.d.ts +5 -6
  68. package/dist/components/PaRadioGroup/PaRadioGroup.vue.js +2 -4
  69. package/dist/components/PaRadioGroup/PaRadioGroup.vue.js.map +1 -1
  70. package/dist/components/PaRadioGroup/PaRadioGroup.vue2.js +22 -28
  71. package/dist/components/PaRadioGroup/PaRadioGroup.vue2.js.map +1 -1
  72. package/dist/components/PaRangePicker/PaRangePicker.vue.d.ts +0 -1
  73. package/dist/components/PaRangePicker/PaRangePicker.vue.js +4 -6
  74. package/dist/components/PaRangePicker/PaRangePicker.vue.js.map +1 -1
  75. package/dist/components/PaRangePicker/PaRangePicker.vue2.js +76 -82
  76. package/dist/components/PaRangePicker/PaRangePicker.vue2.js.map +1 -1
  77. package/dist/components/PaSearchBar/PaSearchBar.vue.d.ts +0 -1
  78. package/dist/components/PaSearchBar/PaSearchBar.vue.js +3 -5
  79. package/dist/components/PaSearchBar/PaSearchBar.vue.js.map +1 -1
  80. package/dist/components/PaSearchBar/PaSearchBar.vue2.js +55 -61
  81. package/dist/components/PaSearchBar/PaSearchBar.vue2.js.map +1 -1
  82. package/dist/components/PaSelect/PaSelect.vue.d.ts +5 -6
  83. package/dist/components/PaSelect/PaSelect.vue.js +4 -6
  84. package/dist/components/PaSelect/PaSelect.vue.js.map +1 -1
  85. package/dist/components/PaSelect/PaSelect.vue2.js +25 -31
  86. package/dist/components/PaSelect/PaSelect.vue2.js.map +1 -1
  87. package/dist/components/PaTabs/PaTabs.vue.js +1 -1
  88. package/dist/components/PaTabs/PaTabs.vue2.js +17 -19
  89. package/dist/components/PaTabs/PaTabs.vue2.js.map +1 -1
  90. package/dist/components/PaTextarea/PaTextarea.vue.d.ts +5 -6
  91. package/dist/components/PaTextarea/PaTextarea.vue.js +4 -6
  92. package/dist/components/PaTextarea/PaTextarea.vue.js.map +1 -1
  93. package/dist/components/PaTextarea/PaTextarea.vue2.js +16 -22
  94. package/dist/components/PaTextarea/PaTextarea.vue2.js.map +1 -1
  95. package/dist/components/PaTimePicker/PaTimePicker.vue.d.ts +0 -1
  96. package/dist/components/PaTimePicker/PaTimePicker.vue.js +2 -4
  97. package/dist/components/PaTimePicker/PaTimePicker.vue.js.map +1 -1
  98. package/dist/components/PaTimePicker/PaTimePicker.vue2.js +44 -50
  99. package/dist/components/PaTimePicker/PaTimePicker.vue2.js.map +1 -1
  100. package/dist/components/PaTitleBar/PaTitleBar.vue.d.ts +12 -9
  101. package/dist/components/PaTitleBar/PaTitleBar.vue.js +2 -2
  102. package/dist/components/PaTitleBar/PaTitleBar.vue2.js +34 -39
  103. package/dist/components/PaTitleBar/PaTitleBar.vue2.js.map +1 -1
  104. package/dist/components/PaToggle/PaToggle.vue.d.ts +0 -1
  105. package/dist/components/PaToggle/PaToggle.vue.js +2 -4
  106. package/dist/components/PaToggle/PaToggle.vue.js.map +1 -1
  107. package/dist/components/PaToggle/PaToggle.vue2.js +20 -26
  108. package/dist/components/PaToggle/PaToggle.vue2.js.map +1 -1
  109. package/dist/components/PaYearPicker/PaYearPicker.vue.d.ts +13 -26
  110. package/dist/components/PaYearPicker/PaYearPicker.vue.js +4 -6
  111. package/dist/components/PaYearPicker/PaYearPicker.vue.js.map +1 -1
  112. package/dist/components/PaYearPicker/PaYearPicker.vue2.js +70 -76
  113. package/dist/components/PaYearPicker/PaYearPicker.vue2.js.map +1 -1
  114. package/dist/style.css +1 -1
  115. package/docs/design-system.md +590 -0
  116. package/docs/layouts.md +297 -0
  117. package/docs/page-composition-examples.md +286 -0
  118. package/docs/public-surface.md +68 -0
  119. package/package.json +8 -4
@@ -1,16 +1,11 @@
1
- import { defineComponent as M, useModel as O, computed as f, ref as x, watch as U, nextTick as P, onBeforeUnmount as q, openBlock as n, createBlock as D, Teleport as j, createElementVNode as v, normalizeClass as R, createVNode as w, Transition as S, withCtx as y, createElementBlock as p, createCommentVNode as i, resolveDynamicComponent as G, createTextVNode as H, toDisplayString as J, renderSlot as T, mergeModels as Q } from "vue";
2
- import X from "../PaIcon/PaIcon.vue.js";
3
- const Y = ["aria-labelledby"], Z = { class: "pa-drawer__header" }, ee = ["aria-label"], te = { class: "pa-drawer__body" }, oe = {
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__ */ Q({
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 = le(), 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 = x(null), m = x(null);
28
- let r = null, h = "", _ = "", s = !1, c = !1;
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 (e) {
65
- if (r = document.activeElement, F(), I(), await P(), d.showClose && m.value)
66
- m.value.focus();
67
- else if (o.value) {
68
- const a = k(o.value);
69
- a.length > 0 ? a[0].focus() : o.value.focus();
70
- }
71
- } else
72
- C(), E(), r && document.contains(r) && r.focus(), r = null;
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
- ), q(() => {
71
+ ), j(() => {
76
72
  C(), E();
77
73
  });
78
74
  function B() {
79
75
  l.value = !1;
80
76
  }
81
- return (e, a) => (n(), D(j, { to: "body" }, [
77
+ return (e, a) => (n(), x(G, { to: "body" }, [
82
78
  v("div", {
83
- class: R(["pa-drawer__wrapper", { "pa-drawer__wrapper--active": l.value }])
79
+ class: D(["pa-drawer__wrapper", { "pa-drawer__wrapper--active": l.value }])
84
80
  }, [
85
- w(S, {
81
+ y(S, {
86
82
  name: "pa-drawer-backdrop",
87
83
  appear: ""
88
84
  }, {
89
- default: y(() => [
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
- })) : i("", !0)
90
+ })) : r("", !0)
95
91
  ]),
96
92
  _: 1
97
93
  }),
98
- w(S, {
94
+ y(S, {
99
95
  name: `pa-drawer-${t.position}`,
100
96
  appear: ""
101
97
  }, {
102
- default: y(() => [
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: R([
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", Z, [
119
- t.title ? (n(), D(G(N.value), {
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: y(() => [
125
- H(J(t.title), 1)
120
+ default: w(() => [
121
+ J(Q(t.title), 1)
126
122
  ]),
127
123
  _: 1
128
- }, 8, ["id"])) : i("", !0),
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
- w(X, {
134
+ y(Y, {
139
135
  name: "x",
140
136
  size: "sm"
141
137
  })
142
- ], 8, ee)) : i("", !0)
138
+ ], 8, te)) : r("", !0)
143
139
  ]),
144
- v("div", te, [
140
+ v("div", oe, [
145
141
  T(e.$slots, "default", {}, void 0, !0)
146
142
  ]),
147
- e.$slots.footer ? (n(), p("div", oe, [
143
+ e.$slots.footer ? (n(), p("div", ae, [
148
144
  T(e.$slots, "footer", {}, void 0, !0)
149
- ])) : i("", !0)
150
- ], 42, Y)) : i("", !0)
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":"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"}
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,4 +1,3 @@
1
- export declare function nextPaFileUploadId(): string;
2
1
  export interface PaFileUploadProps {
3
2
  label?: string;
4
3
  helperText?: string;
@@ -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 a from "../../_virtual/_plugin-vue_export-helper.js";
5
- const e = /* @__PURE__ */ a(o, [["__scopeId", "data-v-3ba1b228"]]);
3
+ import t from "../../_virtual/_plugin-vue_export-helper.js";
4
+ const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-d1518cb0"]]);
6
5
  export {
7
- e as default,
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":";;;;"}
@@ -1,19 +1,14 @@
1
- import { defineComponent as R, useModel as U, computed as t, ref as y, openBlock as u, createElementBlock as f, normalizeClass as C, createTextVNode as k, toDisplayString as p, createCommentVNode as m, createElementVNode as z, createVNode as q, withCtx as M, createBlock as D, mergeModels as T } from "vue";
2
- import G from "../PaButton/PaButton.vue.js";
3
- import K from "../PaChip/PaChip.vue.js";
4
- import j from "../PaIcon/PaIcon.vue.js";
5
- const H = ["for"], J = {
1
+ import { defineComponent as R, useModel as D, useId as G, computed as t, ref as y, openBlock as u, createElementBlock as f, normalizeClass as C, createTextVNode as k, toDisplayString as p, createCommentVNode as m, createElementVNode as z, createVNode as q, withCtx as M, createBlock as K, mergeModels as T } from "vue";
2
+ import U from "../PaButton/PaButton.vue.js";
3
+ import j from "../PaChip/PaChip.vue.js";
4
+ import H from "../PaIcon/PaIcon.vue.js";
5
+ const J = ["for"], O = {
6
6
  key: 0,
7
7
  class: "pa-file-upload__required"
8
- }, O = {
8
+ }, Q = {
9
9
  key: 1,
10
10
  class: "pa-file-upload__helper"
11
- }, Q = { class: "pa-file-upload__row" }, X = ["id", "accept", "name", "required", "disabled", "aria-invalid", "aria-describedby"], Y = ["id"];
12
- let Z = 0;
13
- function ee() {
14
- return `pa-file-upload-${++Z}`;
15
- }
16
- const re = /* @__PURE__ */ R({
11
+ }, X = { class: "pa-file-upload__row" }, Y = ["id", "accept", "name", "required", "disabled", "aria-invalid", "aria-describedby"], Z = ["id"], te = /* @__PURE__ */ R({
17
12
  __name: "PaFileUpload",
18
13
  props: /* @__PURE__ */ T({
19
14
  label: {},
@@ -34,7 +29,7 @@ const re = /* @__PURE__ */ R({
34
29
  }),
35
30
  emits: /* @__PURE__ */ T(["invalid"], ["update:modelValue"]),
36
31
  setup(e, { emit: $ }) {
37
- const l = e, d = U(e, "modelValue"), g = $, L = ee(), h = t(() => l.id ?? L), x = t(() => `${h.value}-msg`), v = y(null), o = y("");
32
+ const l = e, d = D(e, "modelValue"), g = $, L = `pa-file-upload-${G()}`, h = t(() => l.id ?? L), x = t(() => `${h.value}-msg`), v = y(null), o = y("");
38
33
  function S(a) {
39
34
  return a < 1024 ? `${a} B` : a < 1024 * 1024 ? `${(a / 1024).toFixed(1)} KB` : a < 1024 * 1024 * 1024 ? `${(a / (1024 * 1024)).toFixed(1)} MB` : `${(a / (1024 * 1024 * 1024)).toFixed(1)} GB`;
40
35
  }
@@ -53,13 +48,13 @@ const re = /* @__PURE__ */ R({
53
48
  }
54
49
  const w = t(
55
50
  () => typeof l.error == "string" && l.error.length > 0 ? l.error : ""
56
- ), F = t(() => !!l.error), s = t(
57
- () => F.value || o.value !== ""
58
- ), B = t(() => l.valid && !s.value), E = t(
51
+ ), E = t(() => !!l.error), s = t(
52
+ () => E.value || o.value !== ""
53
+ ), B = t(() => l.valid && !s.value), F = t(
59
54
  () => w.value || o.value || ""
60
55
  ), I = t(
61
56
  () => !s.value && !B.value && l.helperText ? l.helperText : ""
62
- ), b = t(() => E.value || I.value);
57
+ ), b = t(() => F.value || I.value);
63
58
  function N() {
64
59
  var a;
65
60
  l.disabled || (a = v.value) == null || a.click();
@@ -103,18 +98,18 @@ const re = /* @__PURE__ */ R({
103
98
  class: "pa-file-upload__label"
104
99
  }, [
105
100
  k(p(e.label), 1),
106
- e.required ? (u(), f("span", J, "*")) : m("", !0)
107
- ], 8, H)) : m("", !0),
108
- e.helperText ? (u(), f("div", O, p(e.helperText), 1)) : m("", !0),
109
- z("div", Q, [
110
- q(G, {
101
+ e.required ? (u(), f("span", O, "*")) : m("", !0)
102
+ ], 8, J)) : m("", !0),
103
+ e.helperText ? (u(), f("div", Q, p(e.helperText), 1)) : m("", !0),
104
+ z("div", X, [
105
+ q(U, {
111
106
  variant: "primary",
112
107
  size: "sm",
113
108
  disabled: e.disabled,
114
109
  onClick: N
115
110
  }, {
116
111
  "icon-right": M(() => [
117
- q(j, {
112
+ q(H, {
118
113
  name: "arrow-right",
119
114
  size: "sm"
120
115
  })
@@ -137,9 +132,9 @@ const re = /* @__PURE__ */ R({
137
132
  "aria-invalid": s.value || void 0,
138
133
  "aria-describedby": b.value ? x.value : void 0,
139
134
  onChange: P
140
- }, null, 40, X)
135
+ }, null, 40, Y)
141
136
  ]),
142
- d.value ? (u(), D(K, {
137
+ d.value ? (u(), K(j, {
143
138
  key: 2,
144
139
  variant: "dismissible",
145
140
  label: e.chipLabel(d.value),
@@ -153,12 +148,11 @@ const re = /* @__PURE__ */ R({
153
148
  "pa-file-upload__message",
154
149
  { "pa-file-upload__message--error": s.value }
155
150
  ])
156
- }, p(b.value), 11, Y)) : m("", !0)
151
+ }, p(b.value), 11, Z)) : m("", !0)
157
152
  ], 2));
158
153
  }
159
154
  });
160
155
  export {
161
- re as default,
162
- ee as nextPaFileUploadId
156
+ te as default
163
157
  };
164
158
  //# sourceMappingURL=PaFileUpload.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PaFileUpload.vue2.js","sources":["../../../src/components/PaFileUpload/PaFileUpload.vue"],"sourcesContent":["<script lang=\"ts\">\nlet uid = 0\nexport function nextPaFileUploadId() {\n return `pa-file-upload-${++uid}`\n}\n\nexport interface PaFileUploadProps {\n label?: string\n helperText?: string\n buttonLabel?: string\n chipLabel?: (file: File) => string\n accept?: string\n maxSize?: number\n id?: string\n name?: string\n error?: string | boolean\n valid?: boolean\n required?: boolean\n disabled?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport PaButton from '../PaButton/PaButton.vue'\nimport PaChip from '../PaChip/PaChip.vue'\nimport PaIcon from '../PaIcon/PaIcon.vue'\n\nconst props = withDefaults(defineProps<PaFileUploadProps>(), {\n buttonLabel: 'Carica file',\n chipLabel: (file: File) => file.name,\n error: false,\n valid: false,\n required: false,\n disabled: false,\n})\n\nconst model = defineModel<File | null>({ default: null })\n\nconst emit = defineEmits<{\n invalid: [{ file: File; reason: 'maxSize' | 'accept' }]\n}>()\n\nconst generatedId = nextPaFileUploadId()\nconst inputId = computed(() => props.id ?? generatedId)\nconst messageId = computed(() => `${inputId.value}-msg`)\n\nconst inputRef = ref<HTMLInputElement | null>(null)\nconst internalError = ref('')\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`\n}\n\nfunction acceptMatches(file: File, accept: string): boolean {\n const tokens = accept\n .split(',')\n .map((t) => t.trim().toLowerCase())\n .filter(Boolean)\n if (tokens.length === 0) return true\n const fileType = file.type.toLowerCase()\n const fileName = file.name.toLowerCase()\n return tokens.some((token) => {\n if (token.startsWith('.')) return fileName.endsWith(token)\n if (token.endsWith('/*')) {\n const prefix = token.slice(0, -1)\n return fileType.startsWith(prefix)\n }\n return fileType === token\n })\n}\n\nconst consumerErrorMessage = computed(() =>\n typeof props.error === 'string' && props.error.length > 0 ? props.error : '',\n)\nconst consumerErrorActive = computed(() => Boolean(props.error))\n\nconst errorActive = computed(\n () => consumerErrorActive.value || internalError.value !== '',\n)\nconst validActive = computed(() => props.valid && !errorActive.value)\n\nconst errorMessage = computed(() =>\n consumerErrorMessage.value || internalError.value || '',\n)\nconst helperMessage = computed(() =>\n !errorActive.value && !validActive.value && props.helperText\n ? props.helperText\n : '',\n)\nconst message = computed(() => errorMessage.value || helperMessage.value)\n\nfunction openPicker() {\n if (props.disabled) return\n inputRef.value?.click()\n}\n\nfunction onChange(event: Event) {\n const target = event.target as HTMLInputElement\n const file = target.files?.[0] ?? null\n\n if (!file) {\n model.value = null\n return\n }\n\n internalError.value = ''\n\n if (props.maxSize !== undefined && file.size > props.maxSize) {\n internalError.value = `Il file supera la dimensione massima di ${formatBytes(\n props.maxSize,\n )}`\n emit('invalid', { file, reason: 'maxSize' })\n target.value = ''\n return\n }\n\n if (props.accept && !acceptMatches(file, props.accept)) {\n internalError.value = 'Tipo di file non supportato'\n emit('invalid', { file, reason: 'accept' })\n target.value = ''\n return\n }\n\n model.value = file\n}\n\nfunction clear() {\n model.value = null\n internalError.value = ''\n if (inputRef.value) inputRef.value.value = ''\n}\n</script>\n\n<template>\n <div\n :class=\"[\n 'pa-file-upload',\n {\n 'pa-file-upload--error': errorActive,\n 'pa-file-upload--valid': validActive,\n 'pa-file-upload--required': required,\n 'pa-file-upload--disabled': disabled,\n },\n ]\"\n >\n <label\n v-if=\"label\"\n :for=\"inputId\"\n class=\"pa-file-upload__label\"\n >\n {{ label }}<span v-if=\"required\" class=\"pa-file-upload__required\">*</span>\n </label>\n <div\n v-if=\"helperText\"\n class=\"pa-file-upload__helper\"\n >{{ helperText }}</div>\n <div class=\"pa-file-upload__row\">\n <PaButton\n variant=\"primary\"\n size=\"sm\"\n :disabled=\"disabled\"\n @click=\"openPicker\"\n >\n <template #icon-right>\n <PaIcon name=\"arrow-right\" size=\"sm\" />\n </template>\n {{ buttonLabel }}\n </PaButton>\n <input\n :id=\"inputId\"\n ref=\"inputRef\"\n type=\"file\"\n class=\"pa-file-upload__input\"\n :accept=\"accept\"\n :name=\"name\"\n :required=\"required\"\n :disabled=\"disabled\"\n :aria-invalid=\"errorActive || undefined\"\n :aria-describedby=\"message ? messageId : undefined\"\n @change=\"onChange\"\n />\n </div>\n <PaChip\n v-if=\"model\"\n variant=\"dismissible\"\n :label=\"chipLabel(model)\"\n :disabled=\"disabled\"\n @close=\"clear\"\n />\n <div\n v-if=\"message\"\n :id=\"messageId\"\n :class=\"[\n 'pa-file-upload__message',\n { 'pa-file-upload__message--error': errorActive },\n ]\"\n >{{ message }}</div>\n </div>\n</template>\n\n<style scoped>\n.pa-file-upload {\n display: inline-flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--pa-space-2xs);\n font-family: var(--pa-font-family-base);\n}\n\n.pa-file-upload__label {\n font-size: var(--pa-font-label-sm-size);\n line-height: var(--pa-font-label-sm-line-height);\n font-weight: var(--pa-font-label-sm-weight);\n color: var(--pa-color-text-secondary-gray);\n}\n\n.pa-file-upload__required {\n margin-left: 2px;\n color: var(--pa-color-error);\n}\n\n.pa-file-upload__helper {\n font-size: var(--pa-font-label-helper-size);\n line-height: var(--pa-font-label-helper-line-height);\n font-weight: var(--pa-font-label-helper-weight);\n color: var(--pa-color-text-secondary-gray);\n}\n\n.pa-file-upload__row {\n display: inline-flex;\n align-items: center;\n margin-top: var(--pa-space-2xs);\n}\n\n.pa-file-upload__input {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.pa-file-upload__row + .pa-chip {\n margin-top: var(--pa-space-2xs);\n}\n\n.pa-file-upload__message {\n font-size: var(--pa-font-label-helper-size);\n line-height: var(--pa-font-label-helper-line-height);\n font-weight: var(--pa-font-label-helper-weight);\n color: var(--pa-color-text-secondary-gray);\n}\n\n.pa-file-upload__message--error {\n color: var(--pa-color-error);\n}\n</style>\n"],"names":["uid","nextPaFileUploadId","props","__props","model","_useModel","emit","__emit","generatedId","inputId","computed","messageId","inputRef","ref","internalError","formatBytes","bytes","acceptMatches","file","accept","tokens","t","fileType","fileName","token","prefix","consumerErrorMessage","consumerErrorActive","errorActive","validActive","errorMessage","helperMessage","message","openPicker","_a","onChange","event","target","clear","_createElementBlock","_normalizeClass","_hoisted_2","_hoisted_3","_toDisplayString","_createElementVNode","_hoisted_4","_createVNode","PaButton","PaIcon","_createTextVNode","_createBlock","PaChip","_hoisted_6"],"mappings":"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"}
1
+ {"version":3,"file":"PaFileUpload.vue2.js","sources":["../../../src/components/PaFileUpload/PaFileUpload.vue"],"sourcesContent":["<script lang=\"ts\">\n\nexport interface PaFileUploadProps {\n label?: string\n helperText?: string\n buttonLabel?: string\n chipLabel?: (file: File) => string\n accept?: string\n maxSize?: number\n id?: string\n name?: string\n error?: string | boolean\n valid?: boolean\n required?: boolean\n disabled?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useId } from 'vue'\nimport PaButton from '../PaButton/PaButton.vue'\nimport PaChip from '../PaChip/PaChip.vue'\nimport PaIcon from '../PaIcon/PaIcon.vue'\n\nconst props = withDefaults(defineProps<PaFileUploadProps>(), {\n buttonLabel: 'Carica file',\n chipLabel: (file: File) => file.name,\n error: false,\n valid: false,\n required: false,\n disabled: false,\n})\n\nconst model = defineModel<File | null>({ default: null })\n\nconst emit = defineEmits<{\n invalid: [{ file: File; reason: 'maxSize' | 'accept' }]\n}>()\n\nconst generatedId = `pa-file-upload-${useId()}`\nconst inputId = computed(() => props.id ?? generatedId)\nconst messageId = computed(() => `${inputId.value}-msg`)\n\nconst inputRef = ref<HTMLInputElement | null>(null)\nconst internalError = ref('')\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`\n}\n\nfunction acceptMatches(file: File, accept: string): boolean {\n const tokens = accept\n .split(',')\n .map((t) => t.trim().toLowerCase())\n .filter(Boolean)\n if (tokens.length === 0) return true\n const fileType = file.type.toLowerCase()\n const fileName = file.name.toLowerCase()\n return tokens.some((token) => {\n if (token.startsWith('.')) return fileName.endsWith(token)\n if (token.endsWith('/*')) {\n const prefix = token.slice(0, -1)\n return fileType.startsWith(prefix)\n }\n return fileType === token\n })\n}\n\nconst consumerErrorMessage = computed(() =>\n typeof props.error === 'string' && props.error.length > 0 ? props.error : '',\n)\nconst consumerErrorActive = computed(() => Boolean(props.error))\n\nconst errorActive = computed(\n () => consumerErrorActive.value || internalError.value !== '',\n)\nconst validActive = computed(() => props.valid && !errorActive.value)\n\nconst errorMessage = computed(() =>\n consumerErrorMessage.value || internalError.value || '',\n)\nconst helperMessage = computed(() =>\n !errorActive.value && !validActive.value && props.helperText\n ? props.helperText\n : '',\n)\nconst message = computed(() => errorMessage.value || helperMessage.value)\n\nfunction openPicker() {\n if (props.disabled) return\n inputRef.value?.click()\n}\n\nfunction onChange(event: Event) {\n const target = event.target as HTMLInputElement\n const file = target.files?.[0] ?? null\n\n if (!file) {\n model.value = null\n return\n }\n\n internalError.value = ''\n\n if (props.maxSize !== undefined && file.size > props.maxSize) {\n internalError.value = `Il file supera la dimensione massima di ${formatBytes(\n props.maxSize,\n )}`\n emit('invalid', { file, reason: 'maxSize' })\n target.value = ''\n return\n }\n\n if (props.accept && !acceptMatches(file, props.accept)) {\n internalError.value = 'Tipo di file non supportato'\n emit('invalid', { file, reason: 'accept' })\n target.value = ''\n return\n }\n\n model.value = file\n}\n\nfunction clear() {\n model.value = null\n internalError.value = ''\n if (inputRef.value) inputRef.value.value = ''\n}\n</script>\n\n<template>\n <div\n :class=\"[\n 'pa-file-upload',\n {\n 'pa-file-upload--error': errorActive,\n 'pa-file-upload--valid': validActive,\n 'pa-file-upload--required': required,\n 'pa-file-upload--disabled': disabled,\n },\n ]\"\n >\n <label\n v-if=\"label\"\n :for=\"inputId\"\n class=\"pa-file-upload__label\"\n >\n {{ label }}<span v-if=\"required\" class=\"pa-file-upload__required\">*</span>\n </label>\n <div\n v-if=\"helperText\"\n class=\"pa-file-upload__helper\"\n >{{ helperText }}</div>\n <div class=\"pa-file-upload__row\">\n <PaButton\n variant=\"primary\"\n size=\"sm\"\n :disabled=\"disabled\"\n @click=\"openPicker\"\n >\n <template #icon-right>\n <PaIcon name=\"arrow-right\" size=\"sm\" />\n </template>\n {{ buttonLabel }}\n </PaButton>\n <input\n :id=\"inputId\"\n ref=\"inputRef\"\n type=\"file\"\n class=\"pa-file-upload__input\"\n :accept=\"accept\"\n :name=\"name\"\n :required=\"required\"\n :disabled=\"disabled\"\n :aria-invalid=\"errorActive || undefined\"\n :aria-describedby=\"message ? messageId : undefined\"\n @change=\"onChange\"\n />\n </div>\n <PaChip\n v-if=\"model\"\n variant=\"dismissible\"\n :label=\"chipLabel(model)\"\n :disabled=\"disabled\"\n @close=\"clear\"\n />\n <div\n v-if=\"message\"\n :id=\"messageId\"\n :class=\"[\n 'pa-file-upload__message',\n { 'pa-file-upload__message--error': errorActive },\n ]\"\n >{{ message }}</div>\n </div>\n</template>\n\n<style scoped>\n.pa-file-upload {\n display: inline-flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--pa-space-2xs);\n font-family: var(--pa-font-family-base);\n}\n\n.pa-file-upload__label {\n font-size: var(--pa-font-label-sm-size);\n line-height: var(--pa-font-label-sm-line-height);\n font-weight: var(--pa-font-label-sm-weight);\n color: var(--pa-color-text-secondary-gray);\n}\n\n.pa-file-upload__required {\n margin-left: 2px;\n color: var(--pa-color-error);\n}\n\n.pa-file-upload__helper {\n font-size: var(--pa-font-label-helper-size);\n line-height: var(--pa-font-label-helper-line-height);\n font-weight: var(--pa-font-label-helper-weight);\n color: var(--pa-color-text-secondary-gray);\n}\n\n.pa-file-upload__row {\n display: inline-flex;\n align-items: center;\n margin-top: var(--pa-space-2xs);\n}\n\n.pa-file-upload__input {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.pa-file-upload__row + .pa-chip {\n margin-top: var(--pa-space-2xs);\n}\n\n.pa-file-upload__message {\n font-size: var(--pa-font-label-helper-size);\n line-height: var(--pa-font-label-helper-line-height);\n font-weight: var(--pa-font-label-helper-weight);\n color: var(--pa-color-text-secondary-gray);\n}\n\n.pa-file-upload__message--error {\n color: var(--pa-color-error);\n}\n</style>\n"],"names":["props","__props","model","_useModel","emit","__emit","generatedId","useId","inputId","computed","messageId","inputRef","ref","internalError","formatBytes","bytes","acceptMatches","file","accept","tokens","t","fileType","fileName","token","prefix","consumerErrorMessage","consumerErrorActive","errorActive","validActive","errorMessage","helperMessage","message","openPicker","_a","onChange","event","target","clear","_createElementBlock","_normalizeClass","_hoisted_2","_hoisted_3","_toDisplayString","_createElementVNode","_hoisted_4","_createVNode","PaButton","PaIcon","_createTextVNode","_createBlock","PaChip","_hoisted_6"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,UAAMA,IAAQC,GASRC,IAAQC,EAAwBF,GAAA,YAAkB,GAElDG,IAAOC,GAIPC,IAAc,kBAAkBC,EAAA,CAAO,IACvCC,IAAUC,EAAS,MAAMT,EAAM,MAAMM,CAAW,GAChDI,IAAYD,EAAS,MAAM,GAAGD,EAAQ,KAAK,MAAM,GAEjDG,IAAWC,EAA6B,IAAI,GAC5CC,IAAgBD,EAAI,EAAE;AAE5B,aAASE,EAAYC,GAAuB;AAC1C,aAAIA,IAAQ,OAAa,GAAGA,CAAK,OAC7BA,IAAQ,OAAO,OAAa,IAAIA,IAAQ,MAAM,QAAQ,CAAC,CAAC,QACxDA,IAAQ,OAAO,OAAO,OAAa,IAAIA,KAAS,OAAO,OAAO,QAAQ,CAAC,CAAC,QACrE,IAAIA,KAAS,OAAO,OAAO,OAAO,QAAQ,CAAC,CAAC;AAAA,IACrD;AAEA,aAASC,EAAcC,GAAYC,GAAyB;AAC1D,YAAMC,IAASD,EACZ,MAAM,GAAG,EACT,IAAI,CAACE,MAAMA,EAAE,OAAO,YAAA,CAAa,EACjC,OAAO,OAAO;AACjB,UAAID,EAAO,WAAW,EAAG,QAAO;AAChC,YAAME,IAAWJ,EAAK,KAAK,YAAA,GACrBK,IAAWL,EAAK,KAAK,YAAA;AAC3B,aAAOE,EAAO,KAAK,CAACI,MAAU;AAC5B,YAAIA,EAAM,WAAW,GAAG,EAAG,QAAOD,EAAS,SAASC,CAAK;AACzD,YAAIA,EAAM,SAAS,IAAI,GAAG;AACxB,gBAAMC,IAASD,EAAM,MAAM,GAAG,EAAE;AAChC,iBAAOF,EAAS,WAAWG,CAAM;AAAA,QACnC;AACA,eAAOH,MAAaE;AAAA,MACtB,CAAC;AAAA,IACH;AAEA,UAAME,IAAuBhB;AAAA,MAAS,MACpC,OAAOT,EAAM,SAAU,YAAYA,EAAM,MAAM,SAAS,IAAIA,EAAM,QAAQ;AAAA,IAAA,GAEtE0B,IAAsBjB,EAAS,MAAM,EAAQT,EAAM,KAAM,GAEzD2B,IAAclB;AAAA,MAClB,MAAMiB,EAAoB,SAASb,EAAc,UAAU;AAAA,IAAA,GAEvDe,IAAcnB,EAAS,MAAMT,EAAM,SAAS,CAAC2B,EAAY,KAAK,GAE9DE,IAAepB;AAAA,MAAS,MAC5BgB,EAAqB,SAASZ,EAAc,SAAS;AAAA,IAAA,GAEjDiB,IAAgBrB;AAAA,MAAS,MAC7B,CAACkB,EAAY,SAAS,CAACC,EAAY,SAAS5B,EAAM,aAC9CA,EAAM,aACN;AAAA,IAAA,GAEA+B,IAAUtB,EAAS,MAAMoB,EAAa,SAASC,EAAc,KAAK;AAExE,aAASE,IAAa;;AACpB,MAAIhC,EAAM,aACViC,IAAAtB,EAAS,UAAT,QAAAsB,EAAgB;AAAA,IAClB;AAEA,aAASC,EAASC,GAAc;;AAC9B,YAAMC,IAASD,EAAM,QACflB,MAAOgB,IAAAG,EAAO,UAAP,gBAAAH,EAAe,OAAM;AAElC,UAAI,CAAChB,GAAM;AACT,QAAAf,EAAM,QAAQ;AACd;AAAA,MACF;AAIA,UAFAW,EAAc,QAAQ,IAElBb,EAAM,YAAY,UAAaiB,EAAK,OAAOjB,EAAM,SAAS;AAC5D,QAAAa,EAAc,QAAQ,2CAA2CC;AAAA,UAC/Dd,EAAM;AAAA,QAAA,CACP,IACDI,EAAK,WAAW,EAAE,MAAAa,GAAM,QAAQ,WAAW,GAC3CmB,EAAO,QAAQ;AACf;AAAA,MACF;AAEA,UAAIpC,EAAM,UAAU,CAACgB,EAAcC,GAAMjB,EAAM,MAAM,GAAG;AACtD,QAAAa,EAAc,QAAQ,+BACtBT,EAAK,WAAW,EAAE,MAAAa,GAAM,QAAQ,UAAU,GAC1CmB,EAAO,QAAQ;AACf;AAAA,MACF;AAEA,MAAAlC,EAAM,QAAQe;AAAA,IAChB;AAEA,aAASoB,IAAQ;AACf,MAAAnC,EAAM,QAAQ,MACdW,EAAc,QAAQ,IAClBF,EAAS,UAAOA,EAAS,MAAM,QAAQ;AAAA,IAC7C;2BAIE2B,EA+DM,OAAA;AAAA,MA9DH,OAAKC,EAAA;AAAA;;mCAAqEZ,EAAA;AAAA,mCAA8CC,EAAA;AAAA,sCAAiD3B,EAAA;AAAA,sCAA8CA,EAAA;AAAA,QAAA;AAAA;;MAWhNA,EAAA,cADRqC,EAMQ,SAAA;AAAA;QAJL,KAAK9B,EAAA;AAAA,QACN,OAAM;AAAA,MAAA;YAEHP,EAAA,KAAK,GAAA,CAAA;AAAA,QAAeA,EAAA,iBAAZqC,EAA+D,QAA/DE,GAAuD,GAAC;;MAG7DvC,EAAA,mBADRqC,EAGuB,OAHvBG,GAGuBC,EAAnBzC,EAAA,UAAU,GAAA,CAAA;MACd0C,EAyBM,OAzBNC,GAyBM;AAAA,QAxBJC,EAUWC,GAAA;AAAA,UATT,SAAQ;AAAA,UACR,MAAK;AAAA,UACJ,UAAU7C,EAAA;AAAA,UACV,SAAO+B;AAAA,QAAA;UAEG,gBACT,MAAuC;AAAA,YAAvCa,EAAuCE,GAAA;AAAA,cAA/B,MAAK;AAAA,cAAc,MAAK;AAAA,YAAA;;qBACvB,MACX;AAAA,YADWC,EAAA,QACR/C,EAAA,WAAW,GAAA,CAAA;AAAA,UAAA;;;QAEhB0C,EAYE,SAAA;AAAA,UAXC,IAAInC,EAAA;AAAA,mBACD;AAAA,UAAJ,KAAIG;AAAA,UACJ,MAAK;AAAA,UACL,OAAM;AAAA,UACL,QAAQV,EAAA;AAAA,UACR,MAAMA,EAAA;AAAA,UACN,UAAUA,EAAA;AAAA,UACV,UAAUA,EAAA;AAAA,UACV,gBAAc0B,EAAA,SAAe;AAAA,UAC7B,oBAAkBI,EAAA,QAAUrB,EAAA,QAAY;AAAA,UACxC,UAAAwB;AAAA,QAAA;;MAIGhC,EAAA,cADR+C,EAMEC,GAAA;AAAA;QAJA,SAAQ;AAAA,QACP,OAAOjD,EAAA,UAAUC,EAAA,KAAK;AAAA,QACtB,UAAUD,EAAA;AAAA,QACV,SAAOoC;AAAA,MAAA;MAGFN,EAAA,cADRO,EAOoB,OAAA;AAAA;QALjB,IAAI5B,EAAA;AAAA,QACJ,OAAK6B,EAAA;AAAA;8CAAmFZ,EAAA,MAAA;AAAA,QAAW;WAIlGI,EAAA,KAAO,GAAA,IAAAoB,CAAA;;;;"}
@@ -1,7 +1,7 @@
1
1
  import o from "./PaFooter.vue2.js";
2
2
  /* empty css */
3
3
  import t from "../../_virtual/_plugin-vue_export-helper.js";
4
- const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-920bddf5"]]);
4
+ const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-0e4e7bbd"]]);
5
5
  export {
6
6
  m as default
7
7
  };