@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.
Files changed (114) hide show
  1. package/dist/components/PaAccordion/PaAccordion.vue.d.ts +0 -1
  2. package/dist/components/PaAccordion/PaAccordion.vue.js +3 -5
  3. package/dist/components/PaAccordion/PaAccordion.vue.js.map +1 -1
  4. package/dist/components/PaAccordion/PaAccordion.vue2.js +24 -30
  5. package/dist/components/PaAccordion/PaAccordion.vue2.js.map +1 -1
  6. package/dist/components/PaBanner/PaBanner.vue.js +6 -6
  7. package/dist/components/PaBanner/PaBanner.vue2.js +26 -28
  8. package/dist/components/PaBanner/PaBanner.vue2.js.map +1 -1
  9. package/dist/components/PaCard/PaCard.vue.d.ts +17 -14
  10. package/dist/components/PaCard/PaCard.vue.js +2 -2
  11. package/dist/components/PaCard/PaCard.vue2.js +37 -42
  12. package/dist/components/PaCard/PaCard.vue2.js.map +1 -1
  13. package/dist/components/PaCheckbox/PaCheckbox.vue.d.ts +5 -6
  14. package/dist/components/PaCheckbox/PaCheckbox.vue.js +2 -4
  15. package/dist/components/PaCheckbox/PaCheckbox.vue.js.map +1 -1
  16. package/dist/components/PaCheckbox/PaCheckbox.vue2.js +20 -26
  17. package/dist/components/PaCheckbox/PaCheckbox.vue2.js.map +1 -1
  18. package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue.d.ts +5 -6
  19. package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue.js +2 -4
  20. package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue.js.map +1 -1
  21. package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue2.js +25 -31
  22. package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue2.js.map +1 -1
  23. package/dist/components/PaDatePicker/PaDatePicker.vue.d.ts +13 -26
  24. package/dist/components/PaDatePicker/PaDatePicker.vue.js +4 -6
  25. package/dist/components/PaDatePicker/PaDatePicker.vue.js.map +1 -1
  26. package/dist/components/PaDatePicker/PaDatePicker.vue2.js +52 -58
  27. package/dist/components/PaDatePicker/PaDatePicker.vue2.js.map +1 -1
  28. package/dist/components/PaDrawer/PaDrawer.vue.js +2 -2
  29. package/dist/components/PaDrawer/PaDrawer.vue2.js +37 -41
  30. package/dist/components/PaDrawer/PaDrawer.vue2.js.map +1 -1
  31. package/dist/components/PaFileUpload/PaFileUpload.vue.d.ts +0 -1
  32. package/dist/components/PaFileUpload/PaFileUpload.vue.js +3 -5
  33. package/dist/components/PaFileUpload/PaFileUpload.vue.js.map +1 -1
  34. package/dist/components/PaFileUpload/PaFileUpload.vue2.js +22 -28
  35. package/dist/components/PaFileUpload/PaFileUpload.vue2.js.map +1 -1
  36. package/dist/components/PaFooter/PaFooter.vue.js +1 -1
  37. package/dist/components/PaFooter/PaFooter.vue2.js +43 -48
  38. package/dist/components/PaFooter/PaFooter.vue2.js.map +1 -1
  39. package/dist/components/PaHeaderDesktop/PaHeaderDesktop.vue.js +1 -1
  40. package/dist/components/PaHeaderDesktop/PaHeaderDesktop.vue2.js +61 -66
  41. package/dist/components/PaHeaderDesktop/PaHeaderDesktop.vue2.js.map +1 -1
  42. package/dist/components/PaHeaderMobile/PaHeaderMobile.vue.js +2 -2
  43. package/dist/components/PaHeaderMobile/PaHeaderMobile.vue2.js +69 -74
  44. package/dist/components/PaHeaderMobile/PaHeaderMobile.vue2.js.map +1 -1
  45. package/dist/components/PaHero/PaHero.vue.d.ts +15 -12
  46. package/dist/components/PaHero/PaHero.vue.js +2 -2
  47. package/dist/components/PaHero/PaHero.vue2.js +36 -41
  48. package/dist/components/PaHero/PaHero.vue2.js.map +1 -1
  49. package/dist/components/PaInput/PaInput.vue.d.ts +15 -13
  50. package/dist/components/PaInput/PaInput.vue.js +4 -6
  51. package/dist/components/PaInput/PaInput.vue.js.map +1 -1
  52. package/dist/components/PaInput/PaInput.vue2.js +27 -33
  53. package/dist/components/PaInput/PaInput.vue2.js.map +1 -1
  54. package/dist/components/PaModal/PaModal.vue.d.ts +14 -11
  55. package/dist/components/PaModal/PaModal.vue.js +3 -3
  56. package/dist/components/PaModal/PaModal.vue2.js +41 -46
  57. package/dist/components/PaModal/PaModal.vue2.js.map +1 -1
  58. package/dist/components/PaMonthPicker/PaMonthPicker.vue.d.ts +13 -26
  59. package/dist/components/PaMonthPicker/PaMonthPicker.vue.js +2 -4
  60. package/dist/components/PaMonthPicker/PaMonthPicker.vue.js.map +1 -1
  61. package/dist/components/PaMonthPicker/PaMonthPicker.vue2.js +64 -70
  62. package/dist/components/PaMonthPicker/PaMonthPicker.vue2.js.map +1 -1
  63. package/dist/components/PaPagination/PaPagination.vue.js +2 -2
  64. package/dist/components/PaPagination/PaPagination.vue2.js +41 -46
  65. package/dist/components/PaPagination/PaPagination.vue2.js.map +1 -1
  66. package/dist/components/PaRadioGroup/PaRadioGroup.vue.d.ts +5 -6
  67. package/dist/components/PaRadioGroup/PaRadioGroup.vue.js +2 -4
  68. package/dist/components/PaRadioGroup/PaRadioGroup.vue.js.map +1 -1
  69. package/dist/components/PaRadioGroup/PaRadioGroup.vue2.js +22 -28
  70. package/dist/components/PaRadioGroup/PaRadioGroup.vue2.js.map +1 -1
  71. package/dist/components/PaRangePicker/PaRangePicker.vue.d.ts +0 -1
  72. package/dist/components/PaRangePicker/PaRangePicker.vue.js +4 -6
  73. package/dist/components/PaRangePicker/PaRangePicker.vue.js.map +1 -1
  74. package/dist/components/PaRangePicker/PaRangePicker.vue2.js +75 -81
  75. package/dist/components/PaRangePicker/PaRangePicker.vue2.js.map +1 -1
  76. package/dist/components/PaSearchBar/PaSearchBar.vue.d.ts +0 -1
  77. package/dist/components/PaSearchBar/PaSearchBar.vue.js +3 -5
  78. package/dist/components/PaSearchBar/PaSearchBar.vue.js.map +1 -1
  79. package/dist/components/PaSearchBar/PaSearchBar.vue2.js +55 -61
  80. package/dist/components/PaSearchBar/PaSearchBar.vue2.js.map +1 -1
  81. package/dist/components/PaSelect/PaSelect.vue.d.ts +5 -6
  82. package/dist/components/PaSelect/PaSelect.vue.js +4 -6
  83. package/dist/components/PaSelect/PaSelect.vue.js.map +1 -1
  84. package/dist/components/PaSelect/PaSelect.vue2.js +25 -31
  85. package/dist/components/PaSelect/PaSelect.vue2.js.map +1 -1
  86. package/dist/components/PaTabs/PaTabs.vue.js +1 -1
  87. package/dist/components/PaTabs/PaTabs.vue2.js +17 -19
  88. package/dist/components/PaTabs/PaTabs.vue2.js.map +1 -1
  89. package/dist/components/PaTextarea/PaTextarea.vue.d.ts +5 -6
  90. package/dist/components/PaTextarea/PaTextarea.vue.js +4 -6
  91. package/dist/components/PaTextarea/PaTextarea.vue.js.map +1 -1
  92. package/dist/components/PaTextarea/PaTextarea.vue2.js +16 -22
  93. package/dist/components/PaTextarea/PaTextarea.vue2.js.map +1 -1
  94. package/dist/components/PaTimePicker/PaTimePicker.vue.d.ts +0 -1
  95. package/dist/components/PaTimePicker/PaTimePicker.vue.js +2 -4
  96. package/dist/components/PaTimePicker/PaTimePicker.vue.js.map +1 -1
  97. package/dist/components/PaTimePicker/PaTimePicker.vue2.js +44 -50
  98. package/dist/components/PaTimePicker/PaTimePicker.vue2.js.map +1 -1
  99. package/dist/components/PaTitleBar/PaTitleBar.vue.d.ts +12 -9
  100. package/dist/components/PaTitleBar/PaTitleBar.vue.js +2 -2
  101. package/dist/components/PaTitleBar/PaTitleBar.vue2.js +34 -39
  102. package/dist/components/PaTitleBar/PaTitleBar.vue2.js.map +1 -1
  103. package/dist/components/PaToggle/PaToggle.vue.d.ts +0 -1
  104. package/dist/components/PaToggle/PaToggle.vue.js +2 -4
  105. package/dist/components/PaToggle/PaToggle.vue.js.map +1 -1
  106. package/dist/components/PaToggle/PaToggle.vue2.js +20 -26
  107. package/dist/components/PaToggle/PaToggle.vue2.js.map +1 -1
  108. package/dist/components/PaYearPicker/PaYearPicker.vue.d.ts +13 -26
  109. package/dist/components/PaYearPicker/PaYearPicker.vue.js +4 -6
  110. package/dist/components/PaYearPicker/PaYearPicker.vue.js.map +1 -1
  111. package/dist/components/PaYearPicker/PaYearPicker.vue2.js +70 -76
  112. package/dist/components/PaYearPicker/PaYearPicker.vue2.js.map +1 -1
  113. package/dist/style.css +1 -1
  114. package/package.json +3 -3
@@ -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":"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"}
@@ -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
  };
@@ -1,49 +1,44 @@
1
- import { defineComponent as z, useSlots as j, computed as n, ref as C, onMounted as x, onBeforeUnmount as F, openBlock as e, createElementBlock as t, normalizeClass as T, createElementVNode as d, toDisplayString as f, createVNode as $, createCommentVNode as l, renderSlot as _, Fragment as b, renderList as v, createBlock as D, withCtx as K, createStaticVNode as U, createTextVNode as X } from "vue";
1
+ import { defineComponent as z, useSlots as j, useId as x, computed as n, ref as C, onMounted as D, onBeforeUnmount as F, openBlock as e, createElementBlock as t, normalizeClass as T, createElementVNode as d, toDisplayString as f, createVNode as $, createCommentVNode as l, renderSlot as _, Fragment as b, renderList as v, createBlock as K, withCtx as X, createStaticVNode as U, createTextVNode as Z } from "vue";
2
2
  import M from "../PaIcon/PaIcon.vue.js";
3
- import Z from "../PaAccordion/PaAccordion.vue.js";
4
- const q = {
3
+ import q from "../PaAccordion/PaAccordion.vue.js";
4
+ const G = {
5
5
  key: 0,
6
6
  class: "pa-footer__band pa-footer__band--back-to-top"
7
- }, G = ["aria-label"], H = { class: "pa-footer__back-to-top-label" }, J = {
7
+ }, H = ["aria-label"], J = { class: "pa-footer__back-to-top-label" }, W = {
8
8
  key: 1,
9
9
  class: "pa-footer__band pa-footer__band--sitemap"
10
- }, W = { class: "pa-footer__sitemap-grid" }, Y = ["href"], ee = {
10
+ }, Y = { class: "pa-footer__sitemap-grid" }, ee = ["href"], te = {
11
11
  key: 0,
12
12
  class: "pa-footer__sitemap-heading"
13
- }, te = ["href"], oe = {
13
+ }, oe = ["href"], ae = {
14
14
  key: 2,
15
15
  class: "pa-footer__band pa-footer__band--contact"
16
- }, ae = { class: "pa-footer__contact-content" }, se = {
16
+ }, se = { class: "pa-footer__contact-content" }, re = {
17
17
  key: 0,
18
18
  class: "pa-footer__logo"
19
- }, re = { class: "pa-footer__contact-stack" }, le = {
19
+ }, le = { class: "pa-footer__contact-stack" }, ne = {
20
20
  key: 0,
21
21
  class: "pa-footer__address"
22
- }, ne = {
22
+ }, ie = {
23
23
  key: 0,
24
24
  class: "pa-footer__address-title"
25
- }, ie = {
25
+ }, de = {
26
26
  key: 1,
27
27
  class: "pa-footer__socials"
28
- }, de = ["href", "aria-label"], ce = {
28
+ }, ce = ["href", "aria-label"], ue = {
29
29
  key: 2,
30
30
  class: "pa-footer__contact-extra"
31
- }, ue = {
31
+ }, pe = {
32
32
  key: 3,
33
33
  class: "pa-footer__band pa-footer__band--privacy"
34
- }, pe = { class: "pa-footer__privacy-content" }, fe = {
34
+ }, fe = { class: "pa-footer__privacy-content" }, _e = {
35
35
  key: 0,
36
36
  class: "pa-footer__republic-emblem",
37
37
  "aria-hidden": "true"
38
- }, _e = {
38
+ }, he = {
39
39
  key: 1,
40
40
  class: "pa-footer__copyright"
41
- };
42
- let he = 0;
43
- function be() {
44
- return ++he;
45
- }
46
- const me = /* @__PURE__ */ z({
41
+ }, ye = /* @__PURE__ */ z({
47
42
  __name: "PaFooter",
48
43
  props: {
49
44
  backToTop: { type: [Boolean, Object], default: !0 },
@@ -55,7 +50,7 @@ const me = /* @__PURE__ */ z({
55
50
  },
56
51
  emits: ["back-to-top"],
57
52
  setup(i, { emit: R }) {
58
- const a = i, E = R, c = j(), P = `pa-footer-${be()}`, V = n(() => a.backToTop !== !1), k = n(() => typeof a.backToTop == "object" && a.backToTop !== null ? a.backToTop.label ?? "Torna su" : "Torna su"), N = n(() => typeof a.backToTop == "object" && a.backToTop !== null ? a.backToTop.ariaLabel ?? k.value : k.value), I = n(
53
+ const a = i, E = R, c = j(), P = `pa-footer-${x()}`, V = n(() => a.backToTop !== !1), k = n(() => typeof a.backToTop == "object" && a.backToTop !== null ? a.backToTop.label ?? "Torna su" : "Torna su"), N = n(() => typeof a.backToTop == "object" && a.backToTop !== null ? a.backToTop.ariaLabel ?? k.value : k.value), I = n(
59
54
  () => a.sitemap.length > 0 || !!c.sitemap
60
55
  ), w = n(
61
56
  () => !!c.address || !!(a.address && (a.address.title || a.address.lines && a.address.lines.length > 0))
@@ -71,7 +66,7 @@ const me = /* @__PURE__ */ z({
71
66
  () => B.value || Q.value
72
67
  ), g = C(null), y = C(!1);
73
68
  let h = null;
74
- x(() => {
69
+ D(() => {
75
70
  g.value && (typeof ResizeObserver > "u" || (h = new ResizeObserver((s) => {
76
71
  const r = s[0];
77
72
  r && (y.value = r.contentRect.width <= 720);
@@ -103,40 +98,40 @@ const me = /* @__PURE__ */ z({
103
98
  class: T(["pa-footer", { "pa-footer--mobile": y.value }]),
104
99
  role: "contentinfo"
105
100
  }, [
106
- V.value ? (e(), t("div", q, [
101
+ V.value ? (e(), t("div", G, [
107
102
  d("button", {
108
103
  type: "button",
109
104
  class: "pa-footer__back-to-top",
110
105
  "aria-label": N.value,
111
106
  onClick: S
112
107
  }, [
113
- d("span", H, f(k.value), 1),
108
+ d("span", J, f(k.value), 1),
114
109
  $(M, {
115
110
  name: "arrow-up",
116
111
  size: "sm",
117
112
  class: "pa-footer__back-to-top-icon"
118
113
  })
119
- ], 8, G),
114
+ ], 8, H),
120
115
  r[0] || (r[0] = d("div", {
121
116
  class: "pa-footer__divider",
122
117
  "aria-hidden": "true"
123
118
  }, null, -1))
124
119
  ])) : l("", !0),
125
- I.value ? (e(), t("div", J, [
120
+ I.value ? (e(), t("div", W, [
126
121
  _(s.$slots, "sitemap", {}, () => [
127
- d("div", W, [
122
+ d("div", Y, [
128
123
  (e(!0), t(b, null, v(i.sitemap, (o, u) => (e(), t(b, { key: u }, [
129
- y.value && o.heading && o.heading.length > 0 ? (e(), D(Z, {
124
+ y.value && o.heading && o.heading.length > 0 ? (e(), K(q, {
130
125
  key: 0,
131
126
  title: o.heading,
132
127
  class: "pa-footer__column pa-footer__column--heading-led pa-footer__column--accordion"
133
128
  }, {
134
- default: K(() => [
129
+ default: X(() => [
135
130
  (e(!0), t(b, null, v(o.links, (p, m) => (e(), t("a", {
136
131
  key: m,
137
132
  href: p.href,
138
133
  class: "pa-footer__link pa-footer__link--small"
139
- }, f(p.label), 9, Y))), 128))
134
+ }, f(p.label), 9, ee))), 128))
140
135
  ]),
141
136
  _: 2
142
137
  }, 1032, ["title"])) : (e(), t("div", {
@@ -146,7 +141,7 @@ const me = /* @__PURE__ */ z({
146
141
  o.heading && o.heading.length > 0 ? "pa-footer__column--heading-led" : "pa-footer__column--headingless"
147
142
  ])
148
143
  }, [
149
- o.heading && o.heading.length > 0 ? (e(), t("h3", ee, f(o.heading), 1)) : l("", !0),
144
+ o.heading && o.heading.length > 0 ? (e(), t("h3", te, f(o.heading), 1)) : l("", !0),
150
145
  (e(!0), t(b, null, v(o.links, (p, m) => (e(), t("a", {
151
146
  key: m,
152
147
  href: p.href,
@@ -154,23 +149,23 @@ const me = /* @__PURE__ */ z({
154
149
  "pa-footer__link",
155
150
  o.heading && o.heading.length > 0 ? "pa-footer__link--small" : "pa-footer__link--large"
156
151
  ])
157
- }, f(p.label), 11, te))), 128))
152
+ }, f(p.label), 11, oe))), 128))
158
153
  ], 2))
159
154
  ], 64))), 128))
160
155
  ])
161
156
  ], !0)
162
157
  ])) : l("", !0),
163
- O.value ? (e(), t("div", oe, [
164
- d("div", ae, [
165
- s.$slots.logo ? (e(), t("div", se, [
158
+ O.value ? (e(), t("div", ae, [
159
+ d("div", se, [
160
+ s.$slots.logo ? (e(), t("div", re, [
166
161
  _(s.$slots, "logo", {}, void 0, !0)
167
162
  ])) : l("", !0),
168
- d("div", re, [
169
- w.value ? (e(), t("div", le, [
163
+ d("div", le, [
164
+ w.value ? (e(), t("div", ne, [
170
165
  _(s.$slots, "address", {}, () => {
171
166
  var o;
172
167
  return [
173
- i.address && i.address.title ? (e(), t("p", ne, f(i.address.title), 1)) : l("", !0),
168
+ i.address && i.address.title ? (e(), t("p", ie, f(i.address.title), 1)) : l("", !0),
174
169
  (e(!0), t(b, null, v(((o = i.address) == null ? void 0 : o.lines) ?? [], (u, p) => (e(), t("p", {
175
170
  key: p,
176
171
  class: "pa-footer__address-line"
@@ -178,7 +173,7 @@ const me = /* @__PURE__ */ z({
178
173
  ];
179
174
  }, !0)
180
175
  ])) : l("", !0),
181
- L.value ? (e(), t("div", ie, [
176
+ L.value ? (e(), t("div", de, [
182
177
  _(s.$slots, "socials", {}, () => [
183
178
  (e(!0), t(b, null, v(i.socials, (o, u) => (e(), t("a", {
184
179
  key: u,
@@ -190,29 +185,29 @@ const me = /* @__PURE__ */ z({
190
185
  name: o.icon,
191
186
  size: "md"
192
187
  }, null, 8, ["name"])
193
- ], 8, de))), 128))
188
+ ], 8, ce))), 128))
194
189
  ], !0)
195
190
  ])) : l("", !0),
196
- s.$slots["contact-extra"] ? (e(), t("div", ce, [
191
+ s.$slots["contact-extra"] ? (e(), t("div", ue, [
197
192
  _(s.$slots, "contact-extra", {}, void 0, !0)
198
193
  ])) : l("", !0)
199
194
  ])
200
195
  ])
201
196
  ])) : l("", !0),
202
- A.value ? (e(), t("div", ue, [
197
+ A.value ? (e(), t("div", pe, [
203
198
  r[2] || (r[2] = d("div", {
204
199
  class: "pa-footer__divider",
205
200
  "aria-hidden": "true"
206
201
  }, null, -1)),
207
- d("div", pe, [
208
- s.$slots["privacy-logo"] || i.showRepublicEmblem ? (e(), t("span", fe, [
202
+ d("div", fe, [
203
+ s.$slots["privacy-logo"] || i.showRepublicEmblem ? (e(), t("span", _e, [
209
204
  _(s.$slots, "privacy-logo", {}, () => [
210
- r[1] || (r[1] = U('<svg viewBox="0 0 44 50" width="44" height="50" xmlns="http://www.w3.org/2000/svg" fill="currentColor" data-v-920bddf5><circle cx="22" cy="22" r="14" fill="none" stroke="currentColor" stroke-width="1.5" data-v-920bddf5></circle><path d="M22 9 L24.47 16.6 L32.46 16.6 L26 21.3 L28.47 28.9 L22 24.2 L15.53 28.9 L18 21.3 L11.54 16.6 L19.53 16.6 Z" data-v-920bddf5></path><path d="M6 38 Q12 32 22 38 Q32 32 38 38" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" data-v-920bddf5></path><path d="M9 42 Q14 38 22 42 Q30 38 35 42" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" data-v-920bddf5></path><path d="M14 46 Q18 44 22 46 Q26 44 30 46" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" data-v-920bddf5></path></svg>', 1))
205
+ r[1] || (r[1] = U('<svg viewBox="0 0 44 50" width="44" height="50" xmlns="http://www.w3.org/2000/svg" fill="currentColor" data-v-0e4e7bbd><circle cx="22" cy="22" r="14" fill="none" stroke="currentColor" stroke-width="1.5" data-v-0e4e7bbd></circle><path d="M22 9 L24.47 16.6 L32.46 16.6 L26 21.3 L28.47 28.9 L22 24.2 L15.53 28.9 L18 21.3 L11.54 16.6 L19.53 16.6 Z" data-v-0e4e7bbd></path><path d="M6 38 Q12 32 22 38 Q32 32 38 38" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" data-v-0e4e7bbd></path><path d="M9 42 Q14 38 22 42 Q30 38 35 42" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" data-v-0e4e7bbd></path><path d="M14 46 Q18 44 22 46 Q26 44 30 46" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" data-v-0e4e7bbd></path></svg>', 1))
211
206
  ], !0)
212
207
  ])) : l("", !0),
213
- B.value ? (e(), t("p", _e, [
208
+ B.value ? (e(), t("p", he, [
214
209
  _(s.$slots, "copyright", {}, () => [
215
- X(f(i.copyright), 1)
210
+ Z(f(i.copyright), 1)
216
211
  ], !0)
217
212
  ])) : l("", !0)
218
213
  ])
@@ -221,6 +216,6 @@ const me = /* @__PURE__ */ z({
221
216
  }
222
217
  });
223
218
  export {
224
- me as default
219
+ ye as default
225
220
  };
226
221
  //# sourceMappingURL=PaFooter.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PaFooter.vue2.js","sources":["../../../src/components/PaFooter/PaFooter.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PaIconName } from '../PaIcon/PaIcon.vue'\n\nlet footerUid = 0\nfunction nextFooterId() {\n return ++footerUid\n}\n\nexport interface PaFooterBackToTopConfig {\n label?: string\n ariaLabel?: string\n}\n\nexport interface PaFooterLink {\n label: string\n href: string\n}\n\nexport interface PaFooterColumn {\n heading?: string\n links: PaFooterLink[]\n}\n\nexport interface PaFooterAddress {\n title?: string\n lines: string[]\n}\n\nexport interface PaFooterSocial {\n icon: PaIconName\n href: string\n label: string\n}\n\nexport interface PaFooterBackToTopEventPayload {\n originalEvent: MouseEvent\n preventDefault: () => void\n defaultPrevented: boolean\n}\n\nexport interface PaFooterProps {\n backToTop?: boolean | PaFooterBackToTopConfig\n sitemap?: PaFooterColumn[]\n address?: PaFooterAddress\n socials?: PaFooterSocial[]\n copyright?: string\n showRepublicEmblem?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, useSlots } from 'vue'\nimport PaIcon from '../PaIcon/PaIcon.vue'\nimport PaAccordion from '../PaAccordion/PaAccordion.vue'\n\nconst MOBILE_BREAKPOINT_PX = 720\n\nconst props = withDefaults(defineProps<PaFooterProps>(), {\n backToTop: true,\n sitemap: () => [],\n address: undefined,\n socials: () => [],\n copyright: undefined,\n showRepublicEmblem: true,\n})\n\nconst emit = defineEmits<{\n 'back-to-top': [PaFooterBackToTopEventPayload]\n}>()\n\nconst slots = useSlots()\n\nconst footerId = `pa-footer-${nextFooterId()}`\n\nconst backToTopEnabled = computed(() => props.backToTop !== false)\n\nconst backToTopLabel = computed(() => {\n if (typeof props.backToTop === 'object' && props.backToTop !== null) {\n return props.backToTop.label ?? 'Torna su'\n }\n return 'Torna su'\n})\n\nconst backToTopAriaLabel = computed(() => {\n if (typeof props.backToTop === 'object' && props.backToTop !== null) {\n return props.backToTop.ariaLabel ?? backToTopLabel.value\n }\n return backToTopLabel.value\n})\n\nconst sitemapBandVisible = computed(\n () => props.sitemap.length > 0 || !!slots.sitemap,\n)\n\nconst hasAddress = computed(\n () =>\n !!slots.address ||\n !!(\n props.address &&\n (props.address.title ||\n (props.address.lines && props.address.lines.length > 0))\n ),\n)\n\nconst hasSocials = computed(\n () => !!slots.socials || props.socials.length > 0,\n)\n\nconst contactBandVisible = computed(\n () =>\n !!slots.logo ||\n hasAddress.value ||\n hasSocials.value ||\n !!slots['contact-extra'],\n)\n\nconst hasCopyrightText = computed(\n () => !!slots.copyright || !!(props.copyright && props.copyright.length > 0),\n)\n\nconst hasPrivacyLogo = computed(\n () => !!slots['privacy-logo'] || props.showRepublicEmblem,\n)\n\nconst privacyBandVisible = computed(\n () => hasCopyrightText.value || hasPrivacyLogo.value,\n)\n\nconst footerRoot = ref<HTMLElement | null>(null)\nconst isMobile = ref(false)\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n if (!footerRoot.value) return\n if (typeof ResizeObserver === 'undefined') return\n resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n isMobile.value = entry.contentRect.width <= MOBILE_BREAKPOINT_PX\n })\n resizeObserver.observe(footerRoot.value)\n})\n\nonBeforeUnmount(() => {\n resizeObserver?.disconnect()\n resizeObserver = null\n})\n\nfunction onBackToTopClick(originalEvent: MouseEvent) {\n let defaultPrevented = false\n const payload: PaFooterBackToTopEventPayload = {\n originalEvent,\n get defaultPrevented() {\n return defaultPrevented\n },\n preventDefault() {\n defaultPrevented = true\n },\n }\n emit('back-to-top', payload)\n\n if (defaultPrevented) return\n if (typeof window === 'undefined') return\n\n const prefersReducedMotion =\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches\n window.scrollTo({\n top: 0,\n behavior: prefersReducedMotion ? 'auto' : 'smooth',\n })\n}\n</script>\n\n<template>\n <footer\n :id=\"footerId\"\n ref=\"footerRoot\"\n class=\"pa-footer\"\n :class=\"{ 'pa-footer--mobile': isMobile }\"\n role=\"contentinfo\"\n >\n <div\n v-if=\"backToTopEnabled\"\n class=\"pa-footer__band pa-footer__band--back-to-top\"\n >\n <button\n type=\"button\"\n class=\"pa-footer__back-to-top\"\n :aria-label=\"backToTopAriaLabel\"\n @click=\"onBackToTopClick\"\n >\n <span class=\"pa-footer__back-to-top-label\">{{ backToTopLabel }}</span>\n <PaIcon name=\"arrow-up\" size=\"sm\" class=\"pa-footer__back-to-top-icon\" />\n </button>\n <div class=\"pa-footer__divider\" aria-hidden=\"true\" />\n </div>\n\n <div\n v-if=\"sitemapBandVisible\"\n class=\"pa-footer__band pa-footer__band--sitemap\"\n >\n <slot name=\"sitemap\">\n <div class=\"pa-footer__sitemap-grid\">\n <template v-for=\"(column, columnIndex) in sitemap\" :key=\"columnIndex\">\n <PaAccordion\n v-if=\"isMobile && column.heading && column.heading.length > 0\"\n :title=\"column.heading\"\n class=\"pa-footer__column pa-footer__column--heading-led pa-footer__column--accordion\"\n >\n <a\n v-for=\"(link, linkIndex) in column.links\"\n :key=\"linkIndex\"\n :href=\"link.href\"\n class=\"pa-footer__link pa-footer__link--small\"\n >\n {{ link.label }}\n </a>\n </PaAccordion>\n <div\n v-else\n class=\"pa-footer__column\"\n :class=\"\n column.heading && column.heading.length > 0\n ? 'pa-footer__column--heading-led'\n : 'pa-footer__column--headingless'\n \"\n >\n <h3\n v-if=\"column.heading && column.heading.length > 0\"\n class=\"pa-footer__sitemap-heading\"\n >\n {{ column.heading }}\n </h3>\n <a\n v-for=\"(link, linkIndex) in column.links\"\n :key=\"linkIndex\"\n :href=\"link.href\"\n class=\"pa-footer__link\"\n :class=\"\n column.heading && column.heading.length > 0\n ? 'pa-footer__link--small'\n : 'pa-footer__link--large'\n \"\n >\n {{ link.label }}\n </a>\n </div>\n </template>\n </div>\n </slot>\n </div>\n\n <div\n v-if=\"contactBandVisible\"\n class=\"pa-footer__band pa-footer__band--contact\"\n >\n <div class=\"pa-footer__contact-content\">\n <div v-if=\"$slots.logo\" class=\"pa-footer__logo\">\n <slot name=\"logo\" />\n </div>\n <div class=\"pa-footer__contact-stack\">\n <div v-if=\"hasAddress\" class=\"pa-footer__address\">\n <slot name=\"address\">\n <p\n v-if=\"address && address.title\"\n class=\"pa-footer__address-title\"\n >\n {{ address.title }}\n </p>\n <p\n v-for=\"(line, lineIndex) in address?.lines ?? []\"\n :key=\"lineIndex\"\n class=\"pa-footer__address-line\"\n >\n {{ line }}\n </p>\n </slot>\n </div>\n <div v-if=\"hasSocials\" class=\"pa-footer__socials\">\n <slot name=\"socials\">\n <a\n v-for=\"(social, socialIndex) in socials\"\n :key=\"socialIndex\"\n :href=\"social.href\"\n :aria-label=\"social.label\"\n class=\"pa-footer__social\"\n >\n <PaIcon :name=\"social.icon\" size=\"md\" />\n </a>\n </slot>\n </div>\n <div v-if=\"$slots['contact-extra']\" class=\"pa-footer__contact-extra\">\n <slot name=\"contact-extra\" />\n </div>\n </div>\n </div>\n </div>\n\n <div\n v-if=\"privacyBandVisible\"\n class=\"pa-footer__band pa-footer__band--privacy\"\n >\n <div class=\"pa-footer__divider\" aria-hidden=\"true\" />\n <div class=\"pa-footer__privacy-content\">\n <span\n v-if=\"$slots['privacy-logo'] || showRepublicEmblem\"\n class=\"pa-footer__republic-emblem\"\n aria-hidden=\"true\"\n >\n <slot name=\"privacy-logo\">\n <svg\n viewBox=\"0 0 44 50\"\n width=\"44\"\n height=\"50\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n >\n <circle\n cx=\"22\"\n cy=\"22\"\n r=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n <path d=\"M22 9 L24.47 16.6 L32.46 16.6 L26 21.3 L28.47 28.9 L22 24.2 L15.53 28.9 L18 21.3 L11.54 16.6 L19.53 16.6 Z\" />\n <path\n d=\"M6 38 Q12 32 22 38 Q32 32 38 38\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n <path\n d=\"M9 42 Q14 38 22 42 Q30 38 35 42\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n <path\n d=\"M14 46 Q18 44 22 46 Q26 44 30 46\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </slot>\n </span>\n <p v-if=\"hasCopyrightText\" class=\"pa-footer__copyright\">\n <slot name=\"copyright\">{{ copyright }}</slot>\n </p>\n </div>\n </div>\n </footer>\n</template>\n\n<style scoped>\n/* Full-bleed: the bands' background spans the viewport even when the\n footer sits inside a max-width frame. Assumes a horizontally centered\n ancestor (`.pa-page-frame` is `margin: 0 auto`); inner content stays\n boxed to the container width below. */\n.pa-footer {\n display: block;\n container-type: inline-size;\n width: 100vw;\n margin-left: calc(50% - 50vw);\n font-family: var(--pa-font-family-base);\n color: var(--pa-color-text-white);\n}\n\n.pa-footer__band {\n width: 100%;\n}\n\n.pa-footer__divider {\n height: 1px;\n width: 100%;\n background-color: var(--pa-color-bg-primary-dark-110);\n}\n\n/* ---------- Back-to-top band ---------- */\n\n.pa-footer__band--back-to-top {\n background-color: var(--pa-color-bg-primary-dark-110);\n padding-top: var(--pa-space-md);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--pa-space-md);\n}\n\n.pa-footer__back-to-top {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--pa-space-sm);\n width: 201px;\n height: 48px;\n padding: 13px 49px;\n background-color: transparent;\n border: var(--pa-border-xs) solid var(--pa-color-accent);\n border-radius: var(--pa-radius-smooth);\n color: var(--pa-color-accent);\n cursor: pointer;\n font-family: inherit;\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}\n\n.pa-footer__back-to-top:focus-visible {\n outline: var(--pa-border-sm) solid var(--pa-color-accent);\n outline-offset: 2px;\n}\n\n.pa-footer__back-to-top-label {\n white-space: nowrap;\n}\n\n.pa-footer__back-to-top-icon {\n color: var(--pa-color-accent);\n}\n\n/* ---------- Sitemap band ---------- */\n\n.pa-footer__band--sitemap {\n background-color: var(--pa-color-bg-primary-dark-120);\n padding-top: var(--pa-space-sm);\n}\n\n.pa-footer__sitemap-grid {\n max-width: var(--pa-layout-container-max);\n width: 100%;\n margin: 0 auto;\n padding: 0 var(--pa-space-sm);\n box-sizing: border-box;\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n column-gap: 28px;\n row-gap: 0;\n}\n\n.pa-footer__column {\n display: flex;\n flex-direction: column;\n padding: var(--pa-space-2xl) 0;\n}\n\n.pa-footer__column--headingless {\n gap: var(--pa-space-xs);\n}\n\n.pa-footer__column--heading-led {\n gap: 12px;\n}\n\n.pa-footer__sitemap-grid > .pa-footer__column:nth-of-type(n + 4) {\n border-top: var(--pa-border-xs) solid var(--pa-color-bg-primary-dark-110);\n}\n\n.pa-footer__sitemap-grid > .pa-footer__column:nth-of-type(n + 4) .pa-footer__sitemap-heading {\n color: var(--pa-color-text-white);\n}\n\n.pa-footer__sitemap-heading {\n margin: 0;\n font-family: inherit;\n font-size: 18px;\n line-height: 27px;\n font-weight: 700;\n color: var(--pa-color-accent);\n}\n\n.pa-footer__link {\n color: var(--pa-color-accent);\n text-decoration: none;\n}\n\n.pa-footer__link:hover {\n text-decoration: underline;\n}\n\n.pa-footer__link:focus-visible {\n outline: var(--pa-border-sm) solid var(--pa-color-accent);\n outline-offset: 2px;\n}\n\n.pa-footer__link--large {\n font-size: 20px;\n line-height: 30px;\n font-weight: 600;\n}\n\n.pa-footer__link--small {\n font-size: 16px;\n line-height: 20px;\n font-weight: 400;\n}\n\n/* ---------- Contact band ---------- */\n\n.pa-footer__band--contact {\n background-color: var(--pa-color-bg-primary-dark-120);\n padding-top: var(--pa-space-sm);\n}\n\n.pa-footer__contact-content {\n max-width: var(--pa-layout-container-max);\n width: 100%;\n margin: 0 auto;\n padding: 0 var(--pa-space-sm);\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--pa-space-md);\n padding-bottom: var(--pa-space-md);\n}\n\n.pa-footer__logo {\n display: flex;\n align-items: flex-start;\n flex-shrink: 0;\n}\n\n.pa-footer__contact-stack {\n display: flex;\n flex-direction: column;\n gap: var(--pa-space-sm);\n}\n\n.pa-footer__address {\n max-width: 270px;\n color: var(--pa-color-text-white);\n}\n\n.pa-footer__address-title {\n margin: 0;\n font-family: inherit;\n font-size: 16px;\n line-height: 20px;\n font-weight: 600;\n color: var(--pa-color-text-white);\n}\n\n.pa-footer__address-line {\n margin: 0;\n font-family: inherit;\n font-size: 16px;\n line-height: 20px;\n font-weight: 400;\n color: var(--pa-color-text-white);\n}\n\n.pa-footer__socials {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 375px;\n padding: var(--pa-space-sm) 0;\n}\n\n.pa-footer__social {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--pa-color-text-white);\n text-decoration: none;\n}\n\n.pa-footer__social:focus-visible {\n outline: var(--pa-border-sm) solid var(--pa-color-accent);\n outline-offset: 2px;\n border-radius: var(--pa-radius-smooth);\n}\n\n.pa-footer__contact-extra {\n width: 100%;\n}\n\n/* ---------- Privacy band ---------- */\n\n.pa-footer__band--privacy {\n background-color: var(--pa-color-bg-primary-dark-110);\n padding-bottom: var(--pa-space-sm);\n display: flex;\n flex-direction: column;\n gap: var(--pa-space-sm);\n}\n\n.pa-footer__privacy-content {\n max-width: 600px;\n width: 100%;\n margin: 0 auto;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--pa-space-sm);\n flex-wrap: wrap;\n}\n\n.pa-footer__republic-emblem {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--pa-color-text-white);\n flex-shrink: 0;\n}\n\n.pa-footer__copyright {\n margin: 0;\n flex: 1 1 auto;\n text-align: center;\n font-family: var(--pa-font-family-base);\n font-size: 14px;\n line-height: 21px;\n font-weight: 400;\n color: var(--pa-color-text-white);\n}\n\n/* ---------- Mobile @container collapse ---------- */\n\n@container (max-width: 720px) {\n .pa-footer__sitemap-grid {\n grid-template-columns: 1fr;\n padding: 0;\n }\n\n .pa-footer__column {\n padding: var(--pa-space-md) var(--pa-space-sm);\n }\n\n .pa-footer__column--headingless:not(:last-of-type) {\n border-bottom: var(--pa-border-xs) solid var(--pa-color-bg-primary-dark-110);\n }\n\n .pa-footer__column--accordion {\n padding: 0;\n border-top: var(--pa-border-xs) solid var(--pa-color-bg-primary-dark-110);\n }\n\n .pa-footer__contact-content {\n flex-direction: column;\n align-items: stretch;\n padding: 0 var(--pa-space-sm) var(--pa-space-sm);\n }\n\n .pa-footer__contact-stack {\n width: 100%;\n }\n\n .pa-footer__socials {\n width: 100%;\n }\n\n .pa-footer__privacy-content {\n padding: 0 var(--pa-space-md);\n }\n}\n\n/* PaAccordion dark recolor — scoped to PaFooter only */\n.pa-footer :deep(.pa-accordion__header) {\n background: var(--pa-color-bg-primary-dark-120);\n border-radius: 0;\n padding: 22px var(--pa-space-sm);\n color: var(--pa-color-text-white);\n font-size: 18px;\n line-height: 27px;\n font-weight: 700;\n}\n\n.pa-footer :deep(.pa-accordion:not([data-open=\"true\"]) .pa-accordion__header:hover),\n.pa-footer :deep(.pa-accordion[data-open=\"true\"] .pa-accordion__header),\n.pa-footer :deep(.pa-accordion[data-open=\"true\"] .pa-accordion__header:hover) {\n background: var(--pa-color-bg-primary-dark-120);\n}\n\n.pa-footer :deep(.pa-accordion__chevron) {\n color: var(--pa-color-text-white);\n}\n\n.pa-footer :deep(.pa-accordion__body) {\n background: var(--pa-color-bg-primary-dark-120);\n color: var(--pa-color-accent);\n padding: 12px var(--pa-space-sm) var(--pa-space-md);\n display: flex;\n flex-direction: column;\n gap: var(--pa-space-md);\n border-top: var(--pa-border-xs) solid var(--pa-color-bg-primary-dark-110);\n}\n</style>\n"],"names":["footerUid","nextFooterId","props","__props","emit","__emit","slots","useSlots","footerId","backToTopEnabled","computed","backToTopLabel","backToTopAriaLabel","sitemapBandVisible","hasAddress","hasSocials","contactBandVisible","hasCopyrightText","hasPrivacyLogo","privacyBandVisible","footerRoot","ref","isMobile","resizeObserver","onMounted","entries","entry","onBeforeUnmount","onBackToTopClick","originalEvent","defaultPrevented","prefersReducedMotion","_createElementBlock","_normalizeClass","_openBlock","_hoisted_1","_createElementVNode","_hoisted_3","_toDisplayString","_createVNode","PaIcon","_hoisted_4","_renderSlot","_ctx","_hoisted_5","_Fragment","_renderList","column","columnIndex","_createBlock","PaAccordion","link","linkIndex","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","$slots","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_a","line","lineIndex","_hoisted_15","social","socialIndex","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21"],"mappings":"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"}
1
+ {"version":3,"file":"PaFooter.vue2.js","sources":["../../../src/components/PaFooter/PaFooter.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PaIconName } from '../PaIcon/PaIcon.vue'\n\nexport interface PaFooterBackToTopConfig {\n label?: string\n ariaLabel?: string\n}\n\nexport interface PaFooterLink {\n label: string\n href: string\n}\n\nexport interface PaFooterColumn {\n heading?: string\n links: PaFooterLink[]\n}\n\nexport interface PaFooterAddress {\n title?: string\n lines: string[]\n}\n\nexport interface PaFooterSocial {\n icon: PaIconName\n href: string\n label: string\n}\n\nexport interface PaFooterBackToTopEventPayload {\n originalEvent: MouseEvent\n preventDefault: () => void\n defaultPrevented: boolean\n}\n\nexport interface PaFooterProps {\n backToTop?: boolean | PaFooterBackToTopConfig\n sitemap?: PaFooterColumn[]\n address?: PaFooterAddress\n socials?: PaFooterSocial[]\n copyright?: string\n showRepublicEmblem?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, useId, useSlots } from 'vue'\nimport PaIcon from '../PaIcon/PaIcon.vue'\nimport PaAccordion from '../PaAccordion/PaAccordion.vue'\n\nconst MOBILE_BREAKPOINT_PX = 720\n\nconst props = withDefaults(defineProps<PaFooterProps>(), {\n backToTop: true,\n sitemap: () => [],\n address: undefined,\n socials: () => [],\n copyright: undefined,\n showRepublicEmblem: true,\n})\n\nconst emit = defineEmits<{\n 'back-to-top': [PaFooterBackToTopEventPayload]\n}>()\n\nconst slots = useSlots()\n\nconst footerId = `pa-footer-${useId()}`\n\nconst backToTopEnabled = computed(() => props.backToTop !== false)\n\nconst backToTopLabel = computed(() => {\n if (typeof props.backToTop === 'object' && props.backToTop !== null) {\n return props.backToTop.label ?? 'Torna su'\n }\n return 'Torna su'\n})\n\nconst backToTopAriaLabel = computed(() => {\n if (typeof props.backToTop === 'object' && props.backToTop !== null) {\n return props.backToTop.ariaLabel ?? backToTopLabel.value\n }\n return backToTopLabel.value\n})\n\nconst sitemapBandVisible = computed(\n () => props.sitemap.length > 0 || !!slots.sitemap,\n)\n\nconst hasAddress = computed(\n () =>\n !!slots.address ||\n !!(\n props.address &&\n (props.address.title ||\n (props.address.lines && props.address.lines.length > 0))\n ),\n)\n\nconst hasSocials = computed(\n () => !!slots.socials || props.socials.length > 0,\n)\n\nconst contactBandVisible = computed(\n () =>\n !!slots.logo ||\n hasAddress.value ||\n hasSocials.value ||\n !!slots['contact-extra'],\n)\n\nconst hasCopyrightText = computed(\n () => !!slots.copyright || !!(props.copyright && props.copyright.length > 0),\n)\n\nconst hasPrivacyLogo = computed(\n () => !!slots['privacy-logo'] || props.showRepublicEmblem,\n)\n\nconst privacyBandVisible = computed(\n () => hasCopyrightText.value || hasPrivacyLogo.value,\n)\n\nconst footerRoot = ref<HTMLElement | null>(null)\nconst isMobile = ref(false)\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n if (!footerRoot.value) return\n if (typeof ResizeObserver === 'undefined') return\n resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n isMobile.value = entry.contentRect.width <= MOBILE_BREAKPOINT_PX\n })\n resizeObserver.observe(footerRoot.value)\n})\n\nonBeforeUnmount(() => {\n resizeObserver?.disconnect()\n resizeObserver = null\n})\n\nfunction onBackToTopClick(originalEvent: MouseEvent) {\n let defaultPrevented = false\n const payload: PaFooterBackToTopEventPayload = {\n originalEvent,\n get defaultPrevented() {\n return defaultPrevented\n },\n preventDefault() {\n defaultPrevented = true\n },\n }\n emit('back-to-top', payload)\n\n if (defaultPrevented) return\n if (typeof window === 'undefined') return\n\n const prefersReducedMotion =\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches\n window.scrollTo({\n top: 0,\n behavior: prefersReducedMotion ? 'auto' : 'smooth',\n })\n}\n</script>\n\n<template>\n <footer\n :id=\"footerId\"\n ref=\"footerRoot\"\n class=\"pa-footer\"\n :class=\"{ 'pa-footer--mobile': isMobile }\"\n role=\"contentinfo\"\n >\n <div\n v-if=\"backToTopEnabled\"\n class=\"pa-footer__band pa-footer__band--back-to-top\"\n >\n <button\n type=\"button\"\n class=\"pa-footer__back-to-top\"\n :aria-label=\"backToTopAriaLabel\"\n @click=\"onBackToTopClick\"\n >\n <span class=\"pa-footer__back-to-top-label\">{{ backToTopLabel }}</span>\n <PaIcon name=\"arrow-up\" size=\"sm\" class=\"pa-footer__back-to-top-icon\" />\n </button>\n <div class=\"pa-footer__divider\" aria-hidden=\"true\" />\n </div>\n\n <div\n v-if=\"sitemapBandVisible\"\n class=\"pa-footer__band pa-footer__band--sitemap\"\n >\n <slot name=\"sitemap\">\n <div class=\"pa-footer__sitemap-grid\">\n <template v-for=\"(column, columnIndex) in sitemap\" :key=\"columnIndex\">\n <PaAccordion\n v-if=\"isMobile && column.heading && column.heading.length > 0\"\n :title=\"column.heading\"\n class=\"pa-footer__column pa-footer__column--heading-led pa-footer__column--accordion\"\n >\n <a\n v-for=\"(link, linkIndex) in column.links\"\n :key=\"linkIndex\"\n :href=\"link.href\"\n class=\"pa-footer__link pa-footer__link--small\"\n >\n {{ link.label }}\n </a>\n </PaAccordion>\n <div\n v-else\n class=\"pa-footer__column\"\n :class=\"\n column.heading && column.heading.length > 0\n ? 'pa-footer__column--heading-led'\n : 'pa-footer__column--headingless'\n \"\n >\n <h3\n v-if=\"column.heading && column.heading.length > 0\"\n class=\"pa-footer__sitemap-heading\"\n >\n {{ column.heading }}\n </h3>\n <a\n v-for=\"(link, linkIndex) in column.links\"\n :key=\"linkIndex\"\n :href=\"link.href\"\n class=\"pa-footer__link\"\n :class=\"\n column.heading && column.heading.length > 0\n ? 'pa-footer__link--small'\n : 'pa-footer__link--large'\n \"\n >\n {{ link.label }}\n </a>\n </div>\n </template>\n </div>\n </slot>\n </div>\n\n <div\n v-if=\"contactBandVisible\"\n class=\"pa-footer__band pa-footer__band--contact\"\n >\n <div class=\"pa-footer__contact-content\">\n <div v-if=\"$slots.logo\" class=\"pa-footer__logo\">\n <slot name=\"logo\" />\n </div>\n <div class=\"pa-footer__contact-stack\">\n <div v-if=\"hasAddress\" class=\"pa-footer__address\">\n <slot name=\"address\">\n <p\n v-if=\"address && address.title\"\n class=\"pa-footer__address-title\"\n >\n {{ address.title }}\n </p>\n <p\n v-for=\"(line, lineIndex) in address?.lines ?? []\"\n :key=\"lineIndex\"\n class=\"pa-footer__address-line\"\n >\n {{ line }}\n </p>\n </slot>\n </div>\n <div v-if=\"hasSocials\" class=\"pa-footer__socials\">\n <slot name=\"socials\">\n <a\n v-for=\"(social, socialIndex) in socials\"\n :key=\"socialIndex\"\n :href=\"social.href\"\n :aria-label=\"social.label\"\n class=\"pa-footer__social\"\n >\n <PaIcon :name=\"social.icon\" size=\"md\" />\n </a>\n </slot>\n </div>\n <div v-if=\"$slots['contact-extra']\" class=\"pa-footer__contact-extra\">\n <slot name=\"contact-extra\" />\n </div>\n </div>\n </div>\n </div>\n\n <div\n v-if=\"privacyBandVisible\"\n class=\"pa-footer__band pa-footer__band--privacy\"\n >\n <div class=\"pa-footer__divider\" aria-hidden=\"true\" />\n <div class=\"pa-footer__privacy-content\">\n <span\n v-if=\"$slots['privacy-logo'] || showRepublicEmblem\"\n class=\"pa-footer__republic-emblem\"\n aria-hidden=\"true\"\n >\n <slot name=\"privacy-logo\">\n <svg\n viewBox=\"0 0 44 50\"\n width=\"44\"\n height=\"50\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n >\n <circle\n cx=\"22\"\n cy=\"22\"\n r=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n <path d=\"M22 9 L24.47 16.6 L32.46 16.6 L26 21.3 L28.47 28.9 L22 24.2 L15.53 28.9 L18 21.3 L11.54 16.6 L19.53 16.6 Z\" />\n <path\n d=\"M6 38 Q12 32 22 38 Q32 32 38 38\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n <path\n d=\"M9 42 Q14 38 22 42 Q30 38 35 42\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n <path\n d=\"M14 46 Q18 44 22 46 Q26 44 30 46\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </slot>\n </span>\n <p v-if=\"hasCopyrightText\" class=\"pa-footer__copyright\">\n <slot name=\"copyright\">{{ copyright }}</slot>\n </p>\n </div>\n </div>\n </footer>\n</template>\n\n<style scoped>\n/* Full-bleed: the bands' background spans the viewport even when the\n footer sits inside a max-width frame. Assumes a horizontally centered\n ancestor (`.pa-page-frame` is `margin: 0 auto`); inner content stays\n boxed to the container width below. */\n.pa-footer {\n display: block;\n container-type: inline-size;\n width: 100vw;\n margin-left: calc(50% - 50vw);\n font-family: var(--pa-font-family-base);\n color: var(--pa-color-text-white);\n}\n\n.pa-footer__band {\n width: 100%;\n}\n\n.pa-footer__divider {\n height: 1px;\n width: 100%;\n background-color: var(--pa-color-bg-primary-dark-110);\n}\n\n/* ---------- Back-to-top band ---------- */\n\n.pa-footer__band--back-to-top {\n background-color: var(--pa-color-bg-primary-dark-110);\n padding-top: var(--pa-space-md);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--pa-space-md);\n}\n\n.pa-footer__back-to-top {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--pa-space-sm);\n width: 201px;\n height: 48px;\n padding: 13px 49px;\n background-color: transparent;\n border: var(--pa-border-xs) solid var(--pa-color-accent);\n border-radius: var(--pa-radius-smooth);\n color: var(--pa-color-accent);\n cursor: pointer;\n font-family: inherit;\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}\n\n.pa-footer__back-to-top:focus-visible {\n outline: var(--pa-border-sm) solid var(--pa-color-accent);\n outline-offset: 2px;\n}\n\n.pa-footer__back-to-top-label {\n white-space: nowrap;\n}\n\n.pa-footer__back-to-top-icon {\n color: var(--pa-color-accent);\n}\n\n/* ---------- Sitemap band ---------- */\n\n.pa-footer__band--sitemap {\n background-color: var(--pa-color-bg-primary-dark-120);\n padding-top: var(--pa-space-sm);\n}\n\n.pa-footer__sitemap-grid {\n max-width: var(--pa-layout-container-max);\n width: 100%;\n margin: 0 auto;\n padding: 0 var(--pa-space-sm);\n box-sizing: border-box;\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n column-gap: 28px;\n row-gap: 0;\n}\n\n.pa-footer__column {\n display: flex;\n flex-direction: column;\n padding: var(--pa-space-2xl) 0;\n}\n\n.pa-footer__column--headingless {\n gap: var(--pa-space-xs);\n}\n\n.pa-footer__column--heading-led {\n gap: 12px;\n}\n\n.pa-footer__sitemap-grid > .pa-footer__column:nth-of-type(n + 4) {\n border-top: var(--pa-border-xs) solid var(--pa-color-bg-primary-dark-110);\n}\n\n.pa-footer__sitemap-grid > .pa-footer__column:nth-of-type(n + 4) .pa-footer__sitemap-heading {\n color: var(--pa-color-text-white);\n}\n\n.pa-footer__sitemap-heading {\n margin: 0;\n font-family: inherit;\n font-size: 18px;\n line-height: 27px;\n font-weight: 700;\n color: var(--pa-color-accent);\n}\n\n.pa-footer__link {\n color: var(--pa-color-accent);\n text-decoration: none;\n}\n\n.pa-footer__link:hover {\n text-decoration: underline;\n}\n\n.pa-footer__link:focus-visible {\n outline: var(--pa-border-sm) solid var(--pa-color-accent);\n outline-offset: 2px;\n}\n\n.pa-footer__link--large {\n font-size: 20px;\n line-height: 30px;\n font-weight: 600;\n}\n\n.pa-footer__link--small {\n font-size: 16px;\n line-height: 20px;\n font-weight: 400;\n}\n\n/* ---------- Contact band ---------- */\n\n.pa-footer__band--contact {\n background-color: var(--pa-color-bg-primary-dark-120);\n padding-top: var(--pa-space-sm);\n}\n\n.pa-footer__contact-content {\n max-width: var(--pa-layout-container-max);\n width: 100%;\n margin: 0 auto;\n padding: 0 var(--pa-space-sm);\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--pa-space-md);\n padding-bottom: var(--pa-space-md);\n}\n\n.pa-footer__logo {\n display: flex;\n align-items: flex-start;\n flex-shrink: 0;\n}\n\n.pa-footer__contact-stack {\n display: flex;\n flex-direction: column;\n gap: var(--pa-space-sm);\n}\n\n.pa-footer__address {\n max-width: 270px;\n color: var(--pa-color-text-white);\n}\n\n.pa-footer__address-title {\n margin: 0;\n font-family: inherit;\n font-size: 16px;\n line-height: 20px;\n font-weight: 600;\n color: var(--pa-color-text-white);\n}\n\n.pa-footer__address-line {\n margin: 0;\n font-family: inherit;\n font-size: 16px;\n line-height: 20px;\n font-weight: 400;\n color: var(--pa-color-text-white);\n}\n\n.pa-footer__socials {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 375px;\n padding: var(--pa-space-sm) 0;\n}\n\n.pa-footer__social {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--pa-color-text-white);\n text-decoration: none;\n}\n\n.pa-footer__social:focus-visible {\n outline: var(--pa-border-sm) solid var(--pa-color-accent);\n outline-offset: 2px;\n border-radius: var(--pa-radius-smooth);\n}\n\n.pa-footer__contact-extra {\n width: 100%;\n}\n\n/* ---------- Privacy band ---------- */\n\n.pa-footer__band--privacy {\n background-color: var(--pa-color-bg-primary-dark-110);\n padding-bottom: var(--pa-space-sm);\n display: flex;\n flex-direction: column;\n gap: var(--pa-space-sm);\n}\n\n.pa-footer__privacy-content {\n max-width: 600px;\n width: 100%;\n margin: 0 auto;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--pa-space-sm);\n flex-wrap: wrap;\n}\n\n.pa-footer__republic-emblem {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--pa-color-text-white);\n flex-shrink: 0;\n}\n\n.pa-footer__copyright {\n margin: 0;\n flex: 1 1 auto;\n text-align: center;\n font-family: var(--pa-font-family-base);\n font-size: 14px;\n line-height: 21px;\n font-weight: 400;\n color: var(--pa-color-text-white);\n}\n\n/* ---------- Mobile @container collapse ---------- */\n\n@container (max-width: 720px) {\n .pa-footer__sitemap-grid {\n grid-template-columns: 1fr;\n padding: 0;\n }\n\n .pa-footer__column {\n padding: var(--pa-space-md) var(--pa-space-sm);\n }\n\n .pa-footer__column--headingless:not(:last-of-type) {\n border-bottom: var(--pa-border-xs) solid var(--pa-color-bg-primary-dark-110);\n }\n\n .pa-footer__column--accordion {\n padding: 0;\n border-top: var(--pa-border-xs) solid var(--pa-color-bg-primary-dark-110);\n }\n\n .pa-footer__contact-content {\n flex-direction: column;\n align-items: stretch;\n padding: 0 var(--pa-space-sm) var(--pa-space-sm);\n }\n\n .pa-footer__contact-stack {\n width: 100%;\n }\n\n .pa-footer__socials {\n width: 100%;\n }\n\n .pa-footer__privacy-content {\n padding: 0 var(--pa-space-md);\n }\n}\n\n/* PaAccordion dark recolor — scoped to PaFooter only */\n.pa-footer :deep(.pa-accordion__header) {\n background: var(--pa-color-bg-primary-dark-120);\n border-radius: 0;\n padding: 22px var(--pa-space-sm);\n color: var(--pa-color-text-white);\n font-size: 18px;\n line-height: 27px;\n font-weight: 700;\n}\n\n.pa-footer :deep(.pa-accordion:not([data-open=\"true\"]) .pa-accordion__header:hover),\n.pa-footer :deep(.pa-accordion[data-open=\"true\"] .pa-accordion__header),\n.pa-footer :deep(.pa-accordion[data-open=\"true\"] .pa-accordion__header:hover) {\n background: var(--pa-color-bg-primary-dark-120);\n}\n\n.pa-footer :deep(.pa-accordion__chevron) {\n color: var(--pa-color-text-white);\n}\n\n.pa-footer :deep(.pa-accordion__body) {\n background: var(--pa-color-bg-primary-dark-120);\n color: var(--pa-color-accent);\n padding: 12px var(--pa-space-sm) var(--pa-space-md);\n display: flex;\n flex-direction: column;\n gap: var(--pa-space-md);\n border-top: var(--pa-border-xs) solid var(--pa-color-bg-primary-dark-110);\n}\n</style>\n"],"names":["props","__props","emit","__emit","slots","useSlots","footerId","useId","backToTopEnabled","computed","backToTopLabel","backToTopAriaLabel","sitemapBandVisible","hasAddress","hasSocials","contactBandVisible","hasCopyrightText","hasPrivacyLogo","privacyBandVisible","footerRoot","ref","isMobile","resizeObserver","onMounted","entries","entry","onBeforeUnmount","onBackToTopClick","originalEvent","defaultPrevented","prefersReducedMotion","_createElementBlock","_normalizeClass","_openBlock","_hoisted_1","_createElementVNode","_hoisted_3","_toDisplayString","_createVNode","PaIcon","_hoisted_4","_renderSlot","_ctx","_hoisted_5","_Fragment","_renderList","column","columnIndex","_createBlock","PaAccordion","link","linkIndex","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","$slots","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_a","line","lineIndex","_hoisted_15","social","socialIndex","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import o from "./PaHeaderDesktop.vue2.js";
2
2
  /* empty css */
3
3
  import t from "../../_virtual/_plugin-vue_export-helper.js";
4
- const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-089f6d82"]]);
4
+ const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-80c37be4"]]);
5
5
  export {
6
6
  p as default
7
7
  };