@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 +1 @@
1
- {"version":3,"file":"PaMonthPicker.vue2.js","sources":["../../../src/components/PaMonthPicker/PaMonthPicker.vue"],"sourcesContent":["<script lang=\"ts\">\nlet uid = 0\nexport function nextPaMonthPickerId() {\n return `pa-month-picker-${++uid}`\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(\n defineProps<{\n display?: 'popover' | 'inline'\n placeholder?: string\n label?: string\n required?: boolean\n helperText?: string\n error?: string | boolean\n valid?: boolean\n disabled?: boolean\n readonly?: boolean\n id?: string\n name?: string\n min?: Date | null\n max?: Date | null\n disabledMonths?: (date: Date) => boolean\n }>(),\n {\n display: 'popover',\n placeholder: 'mese / aaaa',\n required: false,\n error: false,\n valid: false,\n disabled: false,\n readonly: false,\n min: null,\n max: null,\n disabledMonths: undefined,\n },\n)\n\nconst model = defineModel<Date | null>({ default: null })\n\nconst rootRef = ref<HTMLElement | null>(null)\nconst triggerRef = ref<HTMLButtonElement | null>(null)\nconst gridRef = ref<HTMLDivElement | null>(null)\nconst open = ref(false)\nconst popoverId = `pa-month-picker-pop-${Math.random().toString(36).slice(2, 9)}`\nconst generatedId = nextPaMonthPickerId()\nconst triggerId = computed(() => props.id ?? generatedId)\nconst messageId = computed(() => `${triggerId.value}-msg`)\n\nconst MONTH_NAMES = [\n 'Gennaio', 'Febbraio', 'Marzo', 'Aprile',\n 'Maggio', 'Giugno', 'Luglio', 'Agosto',\n 'Settembre', 'Ottobre', 'Novembre', 'Dicembre',\n] as const\n\nconst pageYear = ref(\n model.value instanceof Date ? model.value.getFullYear() : new Date().getFullYear(),\n)\n\nconst monthFormatter = new Intl.DateTimeFormat('it-IT', {\n month: 'long',\n year: 'numeric',\n})\n\nconst displayValue = computed(() => {\n const v = model.value\n if (!(v instanceof Date) || isNaN(v.getTime())) return props.placeholder\n const s = monthFormatter.format(v)\n return s.charAt(0).toUpperCase() + s.slice(1)\n})\n\nconst placeholderShown = computed(() => !(model.value instanceof Date))\n\nconst errorActive = computed(() => Boolean(props.error))\nconst validActive = computed(() => props.valid && !errorActive.value)\nconst errorMessage = computed(() =>\n typeof props.error === 'string' && props.error.length > 0 ? props.error : null,\n)\nconst helperMessage = computed(() =>\n !errorActive.value && props.helperText ? props.helperText : null,\n)\nconst message = computed(() => errorMessage.value ?? helperMessage.value)\n\n// yyyy-mm matching <input type=\"month\">. Built from LOCAL components.\nconst serialized = computed(() => {\n const v = model.value\n if (!(v instanceof Date) || isNaN(v.getTime())) return ''\n const y = v.getFullYear()\n const m = String(v.getMonth() + 1).padStart(2, '0')\n return `${y}-${m}`\n})\n\nfunction truncateToMonthStart(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1, 0, 0, 0, 0)\n}\n\nconst truncatedMin = computed(() =>\n props.min ? truncateToMonthStart(props.min) : null,\n)\nconst truncatedMax = computed(() =>\n props.max ? truncateToMonthStart(props.max) : null,\n)\n\nfunction isMonthDisabled(monthIdx: number): boolean {\n const cellDate = new Date(pageYear.value, monthIdx, 1, 0, 0, 0, 0)\n if (truncatedMin.value && cellDate.getTime() < truncatedMin.value.getTime()) return true\n if (truncatedMax.value && cellDate.getTime() > truncatedMax.value.getTime()) return true\n return props.disabledMonths ? props.disabledMonths(cellDate) === true : false\n}\n\nconst disabledStates = computed(() =>\n Array.from({ length: 12 }, (_, idx) => isMonthDisabled(idx)),\n)\n\nconst selectedMonth = computed(() => {\n const v = model.value\n if (!(v instanceof Date) || isNaN(v.getTime())) return null\n if (v.getFullYear() !== pageYear.value) return null\n return v.getMonth()\n})\n\nfunction openPopover() {\n if (open.value || props.disabled || props.readonly) return\n // Re-anchor to the committed value's year on each open so the user always\n // lands on the page that shows their current selection.\n pageYear.value = model.value instanceof Date\n ? model.value.getFullYear()\n : new Date().getFullYear()\n open.value = true\n}\n\nfunction closePopover(returnFocus = true) {\n if (!open.value) return\n open.value = false\n if (returnFocus) triggerRef.value?.focus()\n}\n\nfunction togglePopover() {\n if (props.disabled || props.readonly) return\n open.value ? closePopover() : openPopover()\n}\n\nfunction prevYear() {\n pageYear.value -= 1\n}\n\nfunction nextYear() {\n pageYear.value += 1\n}\n\nfunction selectMonth(monthIdx: number) {\n if (props.readonly) return\n if (isMonthDisabled(monthIdx)) return\n model.value = new Date(pageYear.value, monthIdx, 1, 0, 0, 0, 0)\n if (props.display === 'popover') closePopover()\n}\n\nfunction focusTile(idx: number) {\n const buttons = gridRef.value?.querySelectorAll<HTMLButtonElement>(\n '.pa-month-picker__tile',\n )\n if (!buttons || buttons.length === 0) return\n const n = buttons.length\n const i = ((idx % n) + n) % n\n buttons[i]?.focus()\n}\n\n// Walk from `from` in `step` increments (wrapping within 0..11) until landing\n// on a non-disabled tile. If every tile is disabled, return -1 (caller stays\n// put). step in {-1, +1, -3, +3}.\nfunction nextEnabledTile(from: number, step: number): number {\n const n = 12\n for (let i = 1; i <= n; i++) {\n const candidate = (((from + step * i) % n) + n) % n\n if (!disabledStates.value[candidate]) return candidate\n }\n return -1\n}\n\nfunction focusInDirection(from: number, step: number) {\n const target = nextEnabledTile(from, step)\n if (target >= 0) focusTile(target)\n}\n\nfunction focusFirstEnabled(start: number, step: number) {\n if (!disabledStates.value[start]) {\n focusTile(start)\n return\n }\n const target = nextEnabledTile(start, step)\n if (target >= 0) focusTile(target)\n}\n\nfunction onTileKeydown(event: KeyboardEvent, idx: number) {\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault()\n focusInDirection(idx, 1)\n break\n case 'ArrowLeft':\n event.preventDefault()\n focusInDirection(idx, -1)\n break\n case 'ArrowDown':\n event.preventDefault()\n focusInDirection(idx, 3)\n break\n case 'ArrowUp':\n event.preventDefault()\n focusInDirection(idx, -3)\n break\n case 'Home':\n event.preventDefault()\n focusFirstEnabled(0, 1)\n break\n case 'End':\n event.preventDefault()\n focusFirstEnabled(11, -1)\n break\n case 'PageDown':\n event.preventDefault()\n nextYear()\n nextTick(() => focusFirstEnabled(idx, 1))\n break\n case 'PageUp':\n event.preventDefault()\n prevYear()\n nextTick(() => focusFirstEnabled(idx, 1))\n break\n }\n}\n\nfunction onDocumentMousedown(event: MouseEvent) {\n if (!rootRef.value) return\n if (!rootRef.value.contains(event.target as Node)) closePopover(false)\n}\n\nfunction onWindowKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault()\n closePopover()\n }\n}\n\nwatch(open, (isOpen) => {\n if (isOpen) {\n document.addEventListener('mousedown', onDocumentMousedown)\n window.addEventListener('keydown', onWindowKeydown)\n } else {\n document.removeEventListener('mousedown', onDocumentMousedown)\n window.removeEventListener('keydown', onWindowKeydown)\n }\n})\n\nonBeforeUnmount(() => {\n document.removeEventListener('mousedown', onDocumentMousedown)\n window.removeEventListener('keydown', onWindowKeydown)\n})\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"[\n 'pa-month-picker',\n `pa-month-picker--${display}`,\n {\n 'pa-month-picker--open': open,\n 'pa-month-picker--disabled': disabled,\n 'pa-month-picker--readonly': readonly,\n 'pa-month-picker--error': errorActive,\n 'pa-month-picker--valid': validActive,\n },\n ]\"\n >\n <label v-if=\"label\" :for=\"triggerId\" class=\"pa-month-picker__label\">\n {{ label }}<span v-if=\"required\" class=\"pa-month-picker__required\" aria-hidden=\"true\">*</span>\n </label>\n\n <button\n v-if=\"display === 'popover'\"\n :id=\"triggerId\"\n ref=\"triggerRef\"\n type=\"button\"\n :class=\"[\n 'pa-month-picker__trigger',\n {\n 'pa-month-picker__trigger--placeholder': placeholderShown,\n 'pa-month-picker__trigger--disabled': disabled,\n 'pa-month-picker__trigger--readonly': readonly && !disabled,\n 'pa-month-picker__trigger--error': errorActive && !disabled,\n 'pa-month-picker__trigger--valid': validActive && !disabled,\n },\n ]\"\n :disabled=\"disabled\"\n :aria-expanded=\"open\"\n aria-haspopup=\"dialog\"\n :aria-controls=\"popoverId\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"errorActive || undefined\"\n :aria-readonly=\"readonly || undefined\"\n :aria-describedby=\"message ? messageId : undefined\"\n @click=\"togglePopover\"\n @keydown.enter.prevent=\"togglePopover\"\n @keydown.space.prevent=\"togglePopover\"\n @keydown.down.prevent=\"openPopover\"\n >\n <span class=\"pa-month-picker__value\">{{ displayValue }}</span>\n <slot name=\"suffix\">\n <PaIcon name=\"calendar-blank\" size=\"md\" />\n </slot>\n </button>\n\n <input\n v-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"serialized\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n />\n\n <div\n v-show=\"display === 'inline' || open\"\n :id=\"popoverId\"\n :class=\"[\n 'pa-month-picker__popover',\n { 'pa-month-picker__popover--inline': display === 'inline' },\n ]\"\n role=\"dialog\"\n aria-modal=\"false\"\n >\n <div class=\"pa-month-picker__header\">\n <button\n type=\"button\"\n class=\"pa-month-picker__nav-arrow\"\n aria-label=\"Anno precedente\"\n @click=\"prevYear\"\n >\n <PaIcon name=\"caret-left\" size=\"sm\" />\n </button>\n <span class=\"pa-month-picker__year-label\" aria-live=\"polite\">\n {{ pageYear }}\n </span>\n <button\n type=\"button\"\n class=\"pa-month-picker__nav-arrow\"\n aria-label=\"Anno successivo\"\n @click=\"nextYear\"\n >\n <PaIcon name=\"caret-right\" size=\"sm\" />\n </button>\n </div>\n\n <div ref=\"gridRef\" class=\"pa-month-picker__grid\" role=\"grid\">\n <button\n v-for=\"(name, idx) in MONTH_NAMES\"\n :key=\"name\"\n type=\"button\"\n class=\"pa-month-picker__tile\"\n :class=\"{\n 'pa-month-picker__tile--selected': selectedMonth === idx,\n 'pa-month-picker__tile--disabled': disabledStates[idx],\n }\"\n :disabled=\"disabledStates[idx]\"\n :tabindex=\"disabledStates[idx] ? -1 : 0\"\n :aria-pressed=\"selectedMonth === idx\"\n @click=\"selectMonth(idx)\"\n @keydown=\"onTileKeydown($event, idx)\"\n >\n {{ name }}\n </button>\n </div>\n </div>\n\n <div\n v-if=\"message\"\n :id=\"messageId\"\n :class=\"['pa-month-picker__message', { 'pa-month-picker__message--error': errorActive }]\"\n >\n {{ message }}\n </div>\n </div>\n</template>\n\n<style scoped>\n.pa-month-picker {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n gap: var(--pa-space-2xs, 4px);\n font-family: var(--pa-font-family-sans, 'Inter', sans-serif);\n}\n\n.pa-month-picker__label {\n font: 600 14px/20px 'Inter', sans-serif;\n color: var(--pa-color-text-dark-blue, #00173d);\n}\n.pa-month-picker__required {\n margin-left: 2px;\n color: var(--pa-color-error, #de2049);\n}\n\n.pa-month-picker__message {\n font: 400 14px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-month-picker__message--error {\n color: var(--pa-color-error, #de2049);\n}\n\n.pa-month-picker__trigger {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n min-width: 240px;\n padding: 12px 16px;\n background: #ffffff;\n border: 1px solid var(--pa-color-neutral-gray, #454d56);\n border-radius: 4px;\n font: 400 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n cursor: pointer;\n text-align: left;\n}\n.pa-month-picker__trigger:hover { border-color: var(--pa-color-primary, #0071ff); }\n.pa-month-picker__trigger:focus-visible {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: 2px;\n}\n.pa-month-picker__trigger--placeholder .pa-month-picker__value {\n color: var(--pa-color-text-disabled, #5b6571);\n}\n.pa-month-picker__trigger--error {\n border-color: var(--pa-color-error, #de2049);\n}\n.pa-month-picker__trigger--error:hover {\n border-color: var(--pa-color-error, #de2049);\n}\n.pa-month-picker__trigger--valid {\n border-color: var(--pa-color-success, #008069);\n}\n.pa-month-picker__trigger--valid:hover {\n border-color: var(--pa-color-success, #008069);\n}\n.pa-month-picker__trigger--disabled,\n.pa-month-picker__trigger[disabled] {\n background: var(--pa-color-bg-disabled-gray, #e7e8e3);\n color: var(--pa-color-text-disabled, #5b6571);\n border-color: var(--pa-color-neutral-gray, #454d56);\n cursor: not-allowed;\n}\n.pa-month-picker__trigger--disabled:hover,\n.pa-month-picker__trigger[disabled]:hover {\n border-color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-month-picker__trigger--readonly:hover {\n border-color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-month-picker__value {\n flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n\n.pa-month-picker__popover {\n position: absolute; top: calc(100% + 8px); left: 0;\n z-index: 900; min-width: 280px; padding: 24px;\n background: #ffffff; border-radius: 8px;\n box-shadow: var(--pa-shadow-elevation-02, 0 0 24px #e3e5e8);\n}\n.pa-month-picker__popover--inline {\n position: static; top: auto; left: auto; display: inline-block;\n}\n\n.pa-month-picker__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 0 16px;\n}\n.pa-month-picker__year-label {\n font: 600 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-primary, #0071ff);\n}\n\n.pa-month-picker__nav-arrow {\n display: inline-flex; align-items: center; justify-content: center;\n width: 32px; height: 32px; padding: 0;\n background: #ffffff; border: 0; border-radius: 9999px;\n color: var(--pa-color-primary, #0071ff); cursor: pointer;\n}\n.pa-month-picker__nav-arrow:hover {\n background: var(--pa-color-bg-primary-light-40, #f2f6fc);\n}\n.pa-month-picker__nav-arrow:focus-visible {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: 0;\n}\n\n.pa-month-picker__grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px 24px;\n}\n\n.pa-month-picker__tile {\n padding: 12px 16px;\n background: #ffffff;\n border: 0;\n border-radius: 9999px;\n font: 400 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n cursor: pointer;\n text-align: center;\n transition: none;\n}\n.pa-month-picker__tile:hover {\n background: var(--pa-color-primary-hover, #00368f);\n color: #ffffff;\n}\n.pa-month-picker__tile:focus-visible {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: -2px;\n}\n.pa-month-picker__tile:active {\n background: var(--pa-color-primary-pressed, #00173d);\n color: #ffffff;\n}\n.pa-month-picker__tile--selected {\n background: var(--pa-color-primary, #0071ff);\n color: #ffffff;\n}\n.pa-month-picker__tile--selected:hover {\n background: var(--pa-color-primary-hover, #00368f);\n}\n.pa-month-picker__tile--disabled,\n.pa-month-picker__tile--disabled:hover,\n.pa-month-picker__tile[disabled] {\n background: #ffffff;\n color: var(--pa-color-text-disabled, #5b6571);\n pointer-events: none;\n cursor: not-allowed;\n}\n</style>\n"],"names":["uid","nextPaMonthPickerId","props","__props","model","_useModel","rootRef","ref","triggerRef","gridRef","open","popoverId","generatedId","triggerId","computed","messageId","MONTH_NAMES","pageYear","monthFormatter","displayValue","v","s","placeholderShown","errorActive","validActive","errorMessage","helperMessage","message","serialized","y","m","truncateToMonthStart","d","truncatedMin","truncatedMax","isMonthDisabled","monthIdx","cellDate","disabledStates","_","idx","selectedMonth","openPopover","closePopover","returnFocus","_a","togglePopover","prevYear","nextYear","selectMonth","focusTile","buttons","n","i","_b","nextEnabledTile","from","step","candidate","focusInDirection","target","focusFirstEnabled","start","onTileKeydown","event","nextTick","onDocumentMousedown","onWindowKeydown","watch","isOpen","onBeforeUnmount","_createElementBlock","_normalizeClass","_hoisted_2","_createElementVNode","_hoisted_4","_toDisplayString","_renderSlot","_ctx","_createVNode","PaIcon","_hoisted_6","_hoisted_7","_openBlock","_Fragment","_renderList","name","$event","_hoisted_8","_vShow","_hoisted_9"],"mappings":"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"}
1
+ {"version":3,"file":"PaMonthPicker.vue2.js","sources":["../../../src/components/PaMonthPicker/PaMonthPicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, useId, watch } from 'vue'\nimport PaIcon from '../PaIcon/PaIcon.vue'\n\nconst props = withDefaults(\n defineProps<{\n display?: 'popover' | 'inline'\n placeholder?: string\n label?: string\n required?: boolean\n helperText?: string\n error?: string | boolean\n valid?: boolean\n disabled?: boolean\n readonly?: boolean\n id?: string\n name?: string\n min?: Date | null\n max?: Date | null\n disabledMonths?: (date: Date) => boolean\n }>(),\n {\n display: 'popover',\n placeholder: 'mese / aaaa',\n required: false,\n error: false,\n valid: false,\n disabled: false,\n readonly: false,\n min: null,\n max: null,\n disabledMonths: undefined,\n },\n)\n\nconst model = defineModel<Date | null>({ default: null })\n\nconst rootRef = ref<HTMLElement | null>(null)\nconst triggerRef = ref<HTMLButtonElement | null>(null)\nconst gridRef = ref<HTMLDivElement | null>(null)\nconst open = ref(false)\nconst popoverId = `pa-month-picker-pop-${useId()}`\nconst generatedId = `pa-month-picker-${useId()}`\nconst triggerId = computed(() => props.id ?? generatedId)\nconst messageId = computed(() => `${triggerId.value}-msg`)\n\nconst MONTH_NAMES = [\n 'Gennaio', 'Febbraio', 'Marzo', 'Aprile',\n 'Maggio', 'Giugno', 'Luglio', 'Agosto',\n 'Settembre', 'Ottobre', 'Novembre', 'Dicembre',\n] as const\n\nconst pageYear = ref(\n model.value instanceof Date ? model.value.getFullYear() : new Date().getFullYear(),\n)\n\nconst monthFormatter = new Intl.DateTimeFormat('it-IT', {\n month: 'long',\n year: 'numeric',\n})\n\nconst displayValue = computed(() => {\n const v = model.value\n if (!(v instanceof Date) || isNaN(v.getTime())) return props.placeholder\n const s = monthFormatter.format(v)\n return s.charAt(0).toUpperCase() + s.slice(1)\n})\n\nconst placeholderShown = computed(() => !(model.value instanceof Date))\n\nconst errorActive = computed(() => Boolean(props.error))\nconst validActive = computed(() => props.valid && !errorActive.value)\nconst errorMessage = computed(() =>\n typeof props.error === 'string' && props.error.length > 0 ? props.error : null,\n)\nconst helperMessage = computed(() =>\n !errorActive.value && props.helperText ? props.helperText : null,\n)\nconst message = computed(() => errorMessage.value ?? helperMessage.value)\n\n// yyyy-mm matching <input type=\"month\">. Built from LOCAL components.\nconst serialized = computed(() => {\n const v = model.value\n if (!(v instanceof Date) || isNaN(v.getTime())) return ''\n const y = v.getFullYear()\n const m = String(v.getMonth() + 1).padStart(2, '0')\n return `${y}-${m}`\n})\n\nfunction truncateToMonthStart(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1, 0, 0, 0, 0)\n}\n\nconst truncatedMin = computed(() =>\n props.min ? truncateToMonthStart(props.min) : null,\n)\nconst truncatedMax = computed(() =>\n props.max ? truncateToMonthStart(props.max) : null,\n)\n\nfunction isMonthDisabled(monthIdx: number): boolean {\n const cellDate = new Date(pageYear.value, monthIdx, 1, 0, 0, 0, 0)\n if (truncatedMin.value && cellDate.getTime() < truncatedMin.value.getTime()) return true\n if (truncatedMax.value && cellDate.getTime() > truncatedMax.value.getTime()) return true\n return props.disabledMonths ? props.disabledMonths(cellDate) === true : false\n}\n\nconst disabledStates = computed(() =>\n Array.from({ length: 12 }, (_, idx) => isMonthDisabled(idx)),\n)\n\nconst selectedMonth = computed(() => {\n const v = model.value\n if (!(v instanceof Date) || isNaN(v.getTime())) return null\n if (v.getFullYear() !== pageYear.value) return null\n return v.getMonth()\n})\n\nfunction openPopover() {\n if (open.value || props.disabled || props.readonly) return\n // Re-anchor to the committed value's year on each open so the user always\n // lands on the page that shows their current selection.\n pageYear.value = model.value instanceof Date\n ? model.value.getFullYear()\n : new Date().getFullYear()\n open.value = true\n}\n\nfunction closePopover(returnFocus = true) {\n if (!open.value) return\n open.value = false\n if (returnFocus) triggerRef.value?.focus()\n}\n\nfunction togglePopover() {\n if (props.disabled || props.readonly) return\n open.value ? closePopover() : openPopover()\n}\n\nfunction prevYear() {\n pageYear.value -= 1\n}\n\nfunction nextYear() {\n pageYear.value += 1\n}\n\nfunction selectMonth(monthIdx: number) {\n if (props.readonly) return\n if (isMonthDisabled(monthIdx)) return\n model.value = new Date(pageYear.value, monthIdx, 1, 0, 0, 0, 0)\n if (props.display === 'popover') closePopover()\n}\n\nfunction focusTile(idx: number) {\n const buttons = gridRef.value?.querySelectorAll<HTMLButtonElement>(\n '.pa-month-picker__tile',\n )\n if (!buttons || buttons.length === 0) return\n const n = buttons.length\n const i = ((idx % n) + n) % n\n buttons[i]?.focus()\n}\n\n// Walk from `from` in `step` increments (wrapping within 0..11) until landing\n// on a non-disabled tile. If every tile is disabled, return -1 (caller stays\n// put). step in {-1, +1, -3, +3}.\nfunction nextEnabledTile(from: number, step: number): number {\n const n = 12\n for (let i = 1; i <= n; i++) {\n const candidate = (((from + step * i) % n) + n) % n\n if (!disabledStates.value[candidate]) return candidate\n }\n return -1\n}\n\nfunction focusInDirection(from: number, step: number) {\n const target = nextEnabledTile(from, step)\n if (target >= 0) focusTile(target)\n}\n\nfunction focusFirstEnabled(start: number, step: number) {\n if (!disabledStates.value[start]) {\n focusTile(start)\n return\n }\n const target = nextEnabledTile(start, step)\n if (target >= 0) focusTile(target)\n}\n\nfunction onTileKeydown(event: KeyboardEvent, idx: number) {\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault()\n focusInDirection(idx, 1)\n break\n case 'ArrowLeft':\n event.preventDefault()\n focusInDirection(idx, -1)\n break\n case 'ArrowDown':\n event.preventDefault()\n focusInDirection(idx, 3)\n break\n case 'ArrowUp':\n event.preventDefault()\n focusInDirection(idx, -3)\n break\n case 'Home':\n event.preventDefault()\n focusFirstEnabled(0, 1)\n break\n case 'End':\n event.preventDefault()\n focusFirstEnabled(11, -1)\n break\n case 'PageDown':\n event.preventDefault()\n nextYear()\n nextTick(() => focusFirstEnabled(idx, 1))\n break\n case 'PageUp':\n event.preventDefault()\n prevYear()\n nextTick(() => focusFirstEnabled(idx, 1))\n break\n }\n}\n\nfunction onDocumentMousedown(event: MouseEvent) {\n if (!rootRef.value) return\n if (!rootRef.value.contains(event.target as Node)) closePopover(false)\n}\n\nfunction onWindowKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault()\n closePopover()\n }\n}\n\nwatch(open, (isOpen) => {\n if (isOpen) {\n document.addEventListener('mousedown', onDocumentMousedown)\n window.addEventListener('keydown', onWindowKeydown)\n } else {\n document.removeEventListener('mousedown', onDocumentMousedown)\n window.removeEventListener('keydown', onWindowKeydown)\n }\n})\n\nonBeforeUnmount(() => {\n document.removeEventListener('mousedown', onDocumentMousedown)\n window.removeEventListener('keydown', onWindowKeydown)\n})\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"[\n 'pa-month-picker',\n `pa-month-picker--${display}`,\n {\n 'pa-month-picker--open': open,\n 'pa-month-picker--disabled': disabled,\n 'pa-month-picker--readonly': readonly,\n 'pa-month-picker--error': errorActive,\n 'pa-month-picker--valid': validActive,\n },\n ]\"\n >\n <label v-if=\"label\" :for=\"triggerId\" class=\"pa-month-picker__label\">\n {{ label }}<span v-if=\"required\" class=\"pa-month-picker__required\" aria-hidden=\"true\">*</span>\n </label>\n\n <button\n v-if=\"display === 'popover'\"\n :id=\"triggerId\"\n ref=\"triggerRef\"\n type=\"button\"\n :class=\"[\n 'pa-month-picker__trigger',\n {\n 'pa-month-picker__trigger--placeholder': placeholderShown,\n 'pa-month-picker__trigger--disabled': disabled,\n 'pa-month-picker__trigger--readonly': readonly && !disabled,\n 'pa-month-picker__trigger--error': errorActive && !disabled,\n 'pa-month-picker__trigger--valid': validActive && !disabled,\n },\n ]\"\n :disabled=\"disabled\"\n :aria-expanded=\"open\"\n aria-haspopup=\"dialog\"\n :aria-controls=\"popoverId\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"errorActive || undefined\"\n :aria-readonly=\"readonly || undefined\"\n :aria-describedby=\"message ? messageId : undefined\"\n @click=\"togglePopover\"\n @keydown.enter.prevent=\"togglePopover\"\n @keydown.space.prevent=\"togglePopover\"\n @keydown.down.prevent=\"openPopover\"\n >\n <span class=\"pa-month-picker__value\">{{ displayValue }}</span>\n <slot name=\"suffix\">\n <PaIcon name=\"calendar-blank\" size=\"md\" />\n </slot>\n </button>\n\n <input\n v-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"serialized\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n />\n\n <div\n v-show=\"display === 'inline' || open\"\n :id=\"popoverId\"\n :class=\"[\n 'pa-month-picker__popover',\n { 'pa-month-picker__popover--inline': display === 'inline' },\n ]\"\n role=\"dialog\"\n aria-modal=\"false\"\n >\n <div class=\"pa-month-picker__header\">\n <button\n type=\"button\"\n class=\"pa-month-picker__nav-arrow\"\n aria-label=\"Anno precedente\"\n @click=\"prevYear\"\n >\n <PaIcon name=\"caret-left\" size=\"sm\" />\n </button>\n <span class=\"pa-month-picker__year-label\" aria-live=\"polite\">\n {{ pageYear }}\n </span>\n <button\n type=\"button\"\n class=\"pa-month-picker__nav-arrow\"\n aria-label=\"Anno successivo\"\n @click=\"nextYear\"\n >\n <PaIcon name=\"caret-right\" size=\"sm\" />\n </button>\n </div>\n\n <div ref=\"gridRef\" class=\"pa-month-picker__grid\" role=\"grid\">\n <button\n v-for=\"(name, idx) in MONTH_NAMES\"\n :key=\"name\"\n type=\"button\"\n class=\"pa-month-picker__tile\"\n :class=\"{\n 'pa-month-picker__tile--selected': selectedMonth === idx,\n 'pa-month-picker__tile--disabled': disabledStates[idx],\n }\"\n :disabled=\"disabledStates[idx]\"\n :tabindex=\"disabledStates[idx] ? -1 : 0\"\n :aria-pressed=\"selectedMonth === idx\"\n @click=\"selectMonth(idx)\"\n @keydown=\"onTileKeydown($event, idx)\"\n >\n {{ name }}\n </button>\n </div>\n </div>\n\n <div\n v-if=\"message\"\n :id=\"messageId\"\n :class=\"['pa-month-picker__message', { 'pa-month-picker__message--error': errorActive }]\"\n >\n {{ message }}\n </div>\n </div>\n</template>\n\n<style scoped>\n.pa-month-picker {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n gap: var(--pa-space-2xs, 4px);\n font-family: var(--pa-font-family-sans, 'Inter', sans-serif);\n}\n\n.pa-month-picker__label {\n font: 600 14px/20px 'Inter', sans-serif;\n color: var(--pa-color-text-dark-blue, #00173d);\n}\n.pa-month-picker__required {\n margin-left: 2px;\n color: var(--pa-color-error, #de2049);\n}\n\n.pa-month-picker__message {\n font: 400 14px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-month-picker__message--error {\n color: var(--pa-color-error, #de2049);\n}\n\n.pa-month-picker__trigger {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n min-width: 240px;\n padding: 12px 16px;\n background: #ffffff;\n border: 1px solid var(--pa-color-neutral-gray, #454d56);\n border-radius: 4px;\n font: 400 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n cursor: pointer;\n text-align: left;\n}\n.pa-month-picker__trigger:hover { border-color: var(--pa-color-primary, #0071ff); }\n.pa-month-picker__trigger:focus-visible {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: 2px;\n}\n.pa-month-picker__trigger--placeholder .pa-month-picker__value {\n color: var(--pa-color-text-disabled, #5b6571);\n}\n.pa-month-picker__trigger--error {\n border-color: var(--pa-color-error, #de2049);\n}\n.pa-month-picker__trigger--error:hover {\n border-color: var(--pa-color-error, #de2049);\n}\n.pa-month-picker__trigger--valid {\n border-color: var(--pa-color-success, #008069);\n}\n.pa-month-picker__trigger--valid:hover {\n border-color: var(--pa-color-success, #008069);\n}\n.pa-month-picker__trigger--disabled,\n.pa-month-picker__trigger[disabled] {\n background: var(--pa-color-bg-disabled-gray, #e7e8e3);\n color: var(--pa-color-text-disabled, #5b6571);\n border-color: var(--pa-color-neutral-gray, #454d56);\n cursor: not-allowed;\n}\n.pa-month-picker__trigger--disabled:hover,\n.pa-month-picker__trigger[disabled]:hover {\n border-color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-month-picker__trigger--readonly:hover {\n border-color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-month-picker__value {\n flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n\n.pa-month-picker__popover {\n position: absolute; top: calc(100% + 8px); left: 0;\n z-index: 900; min-width: 280px; padding: 24px;\n background: #ffffff; border-radius: 8px;\n box-shadow: var(--pa-shadow-elevation-02, 0 0 24px #e3e5e8);\n}\n.pa-month-picker__popover--inline {\n position: static; top: auto; left: auto; display: inline-block;\n}\n\n.pa-month-picker__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 0 16px;\n}\n.pa-month-picker__year-label {\n font: 600 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-primary, #0071ff);\n}\n\n.pa-month-picker__nav-arrow {\n display: inline-flex; align-items: center; justify-content: center;\n width: 32px; height: 32px; padding: 0;\n background: #ffffff; border: 0; border-radius: 9999px;\n color: var(--pa-color-primary, #0071ff); cursor: pointer;\n}\n.pa-month-picker__nav-arrow:hover {\n background: var(--pa-color-bg-primary-light-40, #f2f6fc);\n}\n.pa-month-picker__nav-arrow:focus-visible {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: 0;\n}\n\n.pa-month-picker__grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px 24px;\n}\n\n.pa-month-picker__tile {\n padding: 12px 16px;\n background: #ffffff;\n border: 0;\n border-radius: 9999px;\n font: 400 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n cursor: pointer;\n text-align: center;\n transition: none;\n}\n.pa-month-picker__tile:hover {\n background: var(--pa-color-primary-hover, #00368f);\n color: #ffffff;\n}\n.pa-month-picker__tile:focus-visible {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: -2px;\n}\n.pa-month-picker__tile:active {\n background: var(--pa-color-primary-pressed, #00173d);\n color: #ffffff;\n}\n.pa-month-picker__tile--selected {\n background: var(--pa-color-primary, #0071ff);\n color: #ffffff;\n}\n.pa-month-picker__tile--selected:hover {\n background: var(--pa-color-primary-hover, #00368f);\n}\n.pa-month-picker__tile--disabled,\n.pa-month-picker__tile--disabled:hover,\n.pa-month-picker__tile[disabled] {\n background: #ffffff;\n color: var(--pa-color-text-disabled, #5b6571);\n pointer-events: none;\n cursor: not-allowed;\n}\n</style>\n"],"names":["props","__props","model","_useModel","rootRef","ref","triggerRef","gridRef","open","popoverId","useId","generatedId","triggerId","computed","messageId","MONTH_NAMES","pageYear","monthFormatter","displayValue","v","s","placeholderShown","errorActive","validActive","errorMessage","helperMessage","message","serialized","y","m","truncateToMonthStart","d","truncatedMin","truncatedMax","isMonthDisabled","monthIdx","cellDate","disabledStates","_","idx","selectedMonth","openPopover","closePopover","returnFocus","_a","togglePopover","prevYear","nextYear","selectMonth","focusTile","buttons","n","i","_b","nextEnabledTile","from","step","candidate","focusInDirection","target","focusFirstEnabled","start","onTileKeydown","event","nextTick","onDocumentMousedown","onWindowKeydown","watch","isOpen","onBeforeUnmount","_createElementBlock","_normalizeClass","_hoisted_2","_createElementVNode","_hoisted_4","_toDisplayString","_renderSlot","_ctx","_createVNode","PaIcon","_hoisted_6","_hoisted_7","_openBlock","_Fragment","_renderList","name","$event","_hoisted_8","_vShow","_hoisted_9"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import o from "./PaPagination.vue2.js";
2
2
  /* empty css */
3
- import t from "../../_virtual/_plugin-vue_export-helper.js";
4
- const i = /* @__PURE__ */ t(o, [["__scopeId", "data-v-813df5c0"]]);
3
+ import a from "../../_virtual/_plugin-vue_export-helper.js";
4
+ const i = /* @__PURE__ */ a(o, [["__scopeId", "data-v-ea76e987"]]);
5
5
  export {
6
6
  i as default
7
7
  };
@@ -1,17 +1,12 @@
1
- import { defineComponent as B, computed as o, openBlock as r, createElementBlock as c, createElementVNode as t, createVNode as p, Fragment as P, renderList as D, normalizeClass as U, toDisplayString as d, createCommentVNode as w } from "vue";
1
+ import { defineComponent as B, useId as D, computed as o, openBlock as r, createElementBlock as c, createElementVNode as t, createVNode as p, Fragment as P, renderList as w, normalizeClass as J, toDisplayString as d, createCommentVNode as U } from "vue";
2
2
  import v from "../PaIcon/PaIcon.vue.js";
3
3
  import z from "../PaSelect/PaSelect.vue.js";
4
- import { pageWindow as J } from "./usePageWindow.js";
5
- const A = ["aria-label"], T = { class: "pa-pagination__list" }, W = ["aria-label", "aria-disabled", "tabindex"], j = {
4
+ import { pageWindow as A } from "./usePageWindow.js";
5
+ const T = ["aria-label"], W = { class: "pa-pagination__list" }, j = ["aria-label", "aria-disabled", "tabindex"], q = {
6
6
  key: 0,
7
7
  class: "pa-pagination__ellipsis",
8
8
  "aria-hidden": "true"
9
- }, q = { key: 1 }, G = ["aria-label", "aria-current", "aria-disabled", "tabindex", "onClick"], H = ["aria-label", "aria-disabled", "tabindex"], K = ["aria-label"], Q = { class: "pa-pagination__items-block" }, R = { class: "pa-pagination__range" }, X = { class: "pa-pagination__num" }, Y = { class: "pa-pagination__num" }, Z = { class: "pa-pagination__page-block" }, aa = { class: "pa-pagination__range" }, ea = { class: "pa-pagination__num" }, ta = ["aria-label", "aria-disabled", "tabindex"], ia = ["aria-label", "aria-disabled", "tabindex"];
10
- let na = 0;
11
- function la() {
12
- return ++na;
13
- }
14
- const ca = /* @__PURE__ */ B({
9
+ }, G = { key: 1 }, H = ["aria-label", "aria-current", "aria-disabled", "tabindex", "onClick"], K = ["aria-label", "aria-disabled", "tabindex"], Q = ["aria-label"], R = { class: "pa-pagination__items-block" }, X = { class: "pa-pagination__range" }, Y = { class: "pa-pagination__num" }, Z = { class: "pa-pagination__num" }, aa = { class: "pa-pagination__page-block" }, ea = { class: "pa-pagination__range" }, ta = { class: "pa-pagination__num" }, ia = ["aria-label", "aria-disabled", "tabindex"], la = ["aria-label", "aria-disabled", "tabindex"], ra = /* @__PURE__ */ B({
15
10
  __name: "PaPagination",
16
11
  props: {
17
12
  variant: { default: "cursor-number" },
@@ -31,32 +26,32 @@ const ca = /* @__PURE__ */ B({
31
26
  },
32
27
  emits: ["update:currentPage", "update:pageSize"],
33
28
  setup(a, { emit: x }) {
34
- const i = a, g = x, _ = la(), f = `pa-pagination-${_}__items-select`, k = `pa-pagination-${_}__page-select`, n = o(
29
+ const i = a, g = x, _ = D(), f = `pa-pagination-${_}__items-select`, k = `pa-pagination-${_}__page-select`, l = o(
35
30
  () => i.totalItems <= 0 || i.pageSize <= 0 ? 0 : Math.ceil(i.totalItems / i.pageSize)
36
- ), l = o(
37
- () => n.value === 0 ? 0 : Math.max(1, Math.min(i.currentPage, n.value))
38
- ), L = o(() => J(l.value, n.value)), b = o(
39
- () => i.disabled || l.value <= 1 || n.value === 0
31
+ ), n = o(
32
+ () => l.value === 0 ? 0 : Math.max(1, Math.min(i.currentPage, l.value))
33
+ ), L = o(() => A(n.value, l.value)), b = o(
34
+ () => i.disabled || n.value <= 1 || l.value === 0
40
35
  ), m = o(
41
- () => i.disabled || l.value >= n.value || n.value === 0
36
+ () => i.disabled || n.value >= l.value || l.value === 0
42
37
  ), C = o(
43
- () => n.value === 0 ? 0 : (l.value - 1) * i.pageSize + 1
38
+ () => l.value === 0 ? 0 : (n.value - 1) * i.pageSize + 1
44
39
  ), I = o(
45
- () => n.value === 0 ? 0 : Math.min(l.value * i.pageSize, i.totalItems)
40
+ () => l.value === 0 ? 0 : Math.min(n.value * i.pageSize, i.totalItems)
46
41
  ), N = o(() => {
47
42
  const s = new Set(i.pageSizeOptions);
48
43
  return s.add(i.pageSize), [...s].filter((e) => e > 0).sort((e, u) => e - u).map((e) => ({ value: String(e), label: String(e) }));
49
44
  }), y = o(
50
- () => Array.from({ length: n.value }, (s, e) => ({
45
+ () => Array.from({ length: l.value }, (s, e) => ({
51
46
  value: String(e + 1),
52
47
  label: String(e + 1)
53
48
  }))
54
- ), $ = o(() => String(i.pageSize)), M = o(() => String(l.value)), V = (s) => {
55
- i.disabled || s !== l.value && g("update:currentPage", s);
49
+ ), $ = o(() => String(i.pageSize)), M = o(() => String(n.value)), V = (s) => {
50
+ i.disabled || s !== n.value && g("update:currentPage", s);
56
51
  }, S = () => {
57
- b.value || g("update:currentPage", l.value - 1);
52
+ b.value || g("update:currentPage", n.value - 1);
58
53
  }, h = () => {
59
- m.value || g("update:currentPage", l.value + 1);
54
+ m.value || g("update:currentPage", n.value + 1);
60
55
  }, E = (s) => {
61
56
  if (i.disabled) return;
62
57
  const e = Number(s);
@@ -64,14 +59,14 @@ const ca = /* @__PURE__ */ B({
64
59
  }, F = (s) => {
65
60
  if (i.disabled) return;
66
61
  const e = Number(s);
67
- !Number.isFinite(e) || e < 1 || e > n.value || g("update:currentPage", e);
62
+ !Number.isFinite(e) || e < 1 || e > l.value || g("update:currentPage", e);
68
63
  };
69
- return (s, e) => n.value > 0 && a.variant === "cursor-number" ? (r(), c("nav", {
64
+ return (s, e) => l.value > 0 && a.variant === "cursor-number" ? (r(), c("nav", {
70
65
  key: 0,
71
66
  class: "pa-pagination pa-pagination--cursor-number",
72
67
  "aria-label": a.label
73
68
  }, [
74
- t("ul", T, [
69
+ t("ul", W, [
75
70
  t("li", null, [
76
71
  t("button", {
77
72
  type: "button",
@@ -85,24 +80,24 @@ const ca = /* @__PURE__ */ B({
85
80
  name: "caret-left",
86
81
  size: "sm"
87
82
  })
88
- ], 8, W)
83
+ ], 8, j)
89
84
  ]),
90
- (r(!0), c(P, null, D(L.value, (u, O) => (r(), c(P, {
85
+ (r(!0), c(P, null, w(L.value, (u, O) => (r(), c(P, {
91
86
  key: `${u}-${O}`
92
87
  }, [
93
- u === "ellipsis" ? (r(), c("li", j, " .. ")) : (r(), c("li", q, [
88
+ u === "ellipsis" ? (r(), c("li", q, " .. ")) : (r(), c("li", G, [
94
89
  t("button", {
95
90
  type: "button",
96
- class: U(["pa-pagination__tile", {
97
- "pa-pagination__tile--current": u === l.value,
91
+ class: J(["pa-pagination__tile", {
92
+ "pa-pagination__tile--current": u === n.value,
98
93
  "pa-pagination__tile--disabled": a.disabled
99
94
  }]),
100
95
  "aria-label": a.pageLabel(u),
101
- "aria-current": u === l.value ? "page" : void 0,
96
+ "aria-current": u === n.value ? "page" : void 0,
102
97
  "aria-disabled": a.disabled ? "true" : void 0,
103
98
  tabindex: a.disabled ? -1 : 0,
104
- onClick: (sa) => V(u)
105
- }, d(u), 11, G)
99
+ onClick: (na) => V(u)
100
+ }, d(u), 11, H)
106
101
  ]))
107
102
  ], 64))), 128)),
108
103
  t("li", null, [
@@ -118,15 +113,15 @@ const ca = /* @__PURE__ */ B({
118
113
  name: "caret-right",
119
114
  size: "sm"
120
115
  })
121
- ], 8, H)
116
+ ], 8, K)
122
117
  ])
123
118
  ])
124
- ], 8, A)) : n.value > 0 && a.variant === "items-page" ? (r(), c("nav", {
119
+ ], 8, T)) : l.value > 0 && a.variant === "items-page" ? (r(), c("nav", {
125
120
  key: 1,
126
121
  class: "pa-pagination pa-pagination--items-page",
127
122
  "aria-label": a.label
128
123
  }, [
129
- t("div", Q, [
124
+ t("div", R, [
130
125
  t("label", {
131
126
  for: f,
132
127
  class: "pa-pagination__field-label"
@@ -140,10 +135,10 @@ const ca = /* @__PURE__ */ B({
140
135
  class: "pa-pagination__select",
141
136
  "onUpdate:modelValue": E
142
137
  }, null, 8, ["model-value", "options", "disabled"]),
143
- t("span", R, [
144
- t("span", X, d(C.value) + " - " + d(I.value), 1),
138
+ t("span", X, [
139
+ t("span", Y, d(C.value) + " - " + d(I.value), 1),
145
140
  t("span", null, d(a.rangeSeparator), 1),
146
- t("span", Y, d(a.totalItems), 1),
141
+ t("span", Z, d(a.totalItems), 1),
147
142
  t("span", null, d(a.itemsLabel), 1)
148
143
  ])
149
144
  ]),
@@ -151,7 +146,7 @@ const ca = /* @__PURE__ */ B({
151
146
  class: "pa-pagination__divider",
152
147
  "aria-hidden": "true"
153
148
  }, null, -1)),
154
- t("div", Z, [
149
+ t("div", aa, [
155
150
  p(z, {
156
151
  id: k,
157
152
  "model-value": M.value,
@@ -161,9 +156,9 @@ const ca = /* @__PURE__ */ B({
161
156
  class: "pa-pagination__select",
162
157
  "onUpdate:modelValue": F
163
158
  }, null, 8, ["model-value", "options", "disabled"]),
164
- t("span", aa, [
159
+ t("span", ea, [
165
160
  t("span", null, d(a.rangeSeparator), 1),
166
- t("span", ea, d(n.value), 1),
161
+ t("span", ta, d(l.value), 1),
167
162
  t("span", null, d(a.pagesLabel), 1)
168
163
  ]),
169
164
  t("button", {
@@ -178,7 +173,7 @@ const ca = /* @__PURE__ */ B({
178
173
  name: "caret-left",
179
174
  size: "sm"
180
175
  })
181
- ], 8, ta),
176
+ ], 8, ia),
182
177
  t("button", {
183
178
  type: "button",
184
179
  class: "pa-pagination__caret",
@@ -191,12 +186,12 @@ const ca = /* @__PURE__ */ B({
191
186
  name: "caret-right",
192
187
  size: "sm"
193
188
  })
194
- ], 8, ia)
189
+ ], 8, la)
195
190
  ])
196
- ], 8, K)) : w("", !0);
191
+ ], 8, Q)) : U("", !0);
197
192
  }
198
193
  });
199
194
  export {
200
- ca as default
195
+ ra as default
201
196
  };
202
197
  //# sourceMappingURL=PaPagination.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PaPagination.vue2.js","sources":["../../../src/components/PaPagination/PaPagination.vue"],"sourcesContent":["<script lang=\"ts\">\nlet paginationUid = 0\nfunction nextPaginationId() {\n return ++paginationUid\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport PaIcon from '../PaIcon/PaIcon.vue'\nimport PaSelect, { type PaSelectOption } from '../PaSelect/PaSelect.vue'\nimport { pageWindow } from './usePageWindow'\n\nexport type PaPaginationVariant = 'cursor-number' | 'items-page'\n\nexport interface PaPaginationProps {\n variant?: PaPaginationVariant\n currentPage?: number\n totalItems: number\n pageSize?: number\n pageSizeOptions?: number[]\n disabled?: boolean\n label?: string\n previousLabel?: string\n nextLabel?: string\n pageLabel?: (page: number) => string\n itemsPerPageLabel?: string\n rangeSeparator?: string\n itemsLabel?: string\n pagesLabel?: string\n}\n\nconst props = withDefaults(defineProps<PaPaginationProps>(), {\n variant: 'cursor-number',\n currentPage: 1,\n pageSize: 10,\n pageSizeOptions: () => [10, 25, 50, 100],\n disabled: false,\n label: 'Paginazione',\n previousLabel: 'Pagina precedente',\n nextLabel: 'Pagina successiva',\n pageLabel: (page: number) => `Vai alla pagina ${page}`,\n itemsPerPageLabel: 'Elementi per pagina:',\n rangeSeparator: 'di',\n itemsLabel: 'Elementi',\n pagesLabel: 'Pagine',\n})\n\nconst emit = defineEmits<{\n 'update:currentPage': [page: number]\n 'update:pageSize': [size: number]\n}>()\n\nconst instanceId = nextPaginationId()\nconst itemsSelectId = `pa-pagination-${instanceId}__items-select`\nconst pageSelectId = `pa-pagination-${instanceId}__page-select`\n\nconst totalPages = computed(() =>\n props.totalItems <= 0 || props.pageSize <= 0\n ? 0\n : Math.ceil(props.totalItems / props.pageSize),\n)\n\nconst clampedCurrent = computed(() =>\n totalPages.value === 0\n ? 0\n : Math.max(1, Math.min(props.currentPage, totalPages.value)),\n)\n\nconst entries = computed(() => pageWindow(clampedCurrent.value, totalPages.value))\n\nconst isPrevDisabled = computed(\n () => props.disabled || clampedCurrent.value <= 1 || totalPages.value === 0,\n)\nconst isNextDisabled = computed(\n () =>\n props.disabled ||\n clampedCurrent.value >= totalPages.value ||\n totalPages.value === 0,\n)\n\nconst rangeStart = computed(() =>\n totalPages.value === 0 ? 0 : (clampedCurrent.value - 1) * props.pageSize + 1,\n)\nconst rangeEnd = computed(() =>\n totalPages.value === 0\n ? 0\n : Math.min(clampedCurrent.value * props.pageSize, props.totalItems),\n)\n\nconst pageSizeSelectOptions = computed<PaSelectOption[]>(() => {\n const merged = new Set<number>(props.pageSizeOptions)\n merged.add(props.pageSize)\n return [...merged]\n .filter((n) => n > 0)\n .sort((a, b) => a - b)\n .map((n) => ({ value: String(n), label: String(n) }))\n})\n\nconst pageJumperOptions = computed<PaSelectOption[]>(() =>\n Array.from({ length: totalPages.value }, (_, i) => ({\n value: String(i + 1),\n label: String(i + 1),\n })),\n)\n\nconst pageSizeModel = computed(() => String(props.pageSize))\nconst currentPageModel = computed(() => String(clampedCurrent.value))\n\nconst onTileClick = (page: number) => {\n if (props.disabled) return\n if (page === clampedCurrent.value) return\n emit('update:currentPage', page)\n}\n\nconst onPrev = () => {\n if (isPrevDisabled.value) return\n emit('update:currentPage', clampedCurrent.value - 1)\n}\n\nconst onNext = () => {\n if (isNextDisabled.value) return\n emit('update:currentPage', clampedCurrent.value + 1)\n}\n\nconst onPageSizeChange = (value: string) => {\n if (props.disabled) return\n const n = Number(value)\n if (!Number.isFinite(n) || n <= 0) return\n emit('update:pageSize', n)\n}\n\nconst onPageJumperChange = (value: string) => {\n if (props.disabled) return\n const n = Number(value)\n if (!Number.isFinite(n) || n < 1 || n > totalPages.value) return\n emit('update:currentPage', n)\n}\n</script>\n\n<template>\n <nav v-if=\"totalPages > 0 && variant === 'cursor-number'\"\n class=\"pa-pagination pa-pagination--cursor-number\"\n :aria-label=\"label\">\n <ul class=\"pa-pagination__list\">\n <li>\n <button type=\"button\"\n class=\"pa-pagination__caret\"\n :aria-label=\"previousLabel\"\n :aria-disabled=\"isPrevDisabled ? 'true' : undefined\"\n :tabindex=\"isPrevDisabled ? -1 : 0\"\n @click=\"onPrev\">\n <PaIcon name=\"caret-left\"\n size=\"sm\" />\n </button>\n </li>\n <template v-for=\"(entry, idx) in entries\"\n :key=\"`${entry}-${idx}`\">\n <li v-if=\"entry === 'ellipsis'\"\n class=\"pa-pagination__ellipsis\"\n aria-hidden=\"true\">\n ..\n </li>\n <li v-else>\n <button type=\"button\"\n class=\"pa-pagination__tile\"\n :class=\"{\n 'pa-pagination__tile--current': entry === clampedCurrent,\n 'pa-pagination__tile--disabled': disabled,\n }\"\n :aria-label=\"pageLabel(entry)\"\n :aria-current=\"entry === clampedCurrent ? 'page' : undefined\"\n :aria-disabled=\"disabled ? 'true' : undefined\"\n :tabindex=\"disabled ? -1 : 0\"\n @click=\"onTileClick(entry)\">\n {{ entry }}\n </button>\n </li>\n </template>\n <li>\n <button type=\"button\"\n class=\"pa-pagination__caret\"\n :aria-label=\"nextLabel\"\n :aria-disabled=\"isNextDisabled ? 'true' : undefined\"\n :tabindex=\"isNextDisabled ? -1 : 0\"\n @click=\"onNext\">\n <PaIcon name=\"caret-right\"\n size=\"sm\" />\n </button>\n </li>\n </ul>\n </nav>\n\n <nav v-else-if=\"totalPages > 0 && variant === 'items-page'\"\n class=\"pa-pagination pa-pagination--items-page\"\n :aria-label=\"label\">\n <div class=\"pa-pagination__items-block\">\n <label :for=\"itemsSelectId\"\n class=\"pa-pagination__field-label\">\n {{ itemsPerPageLabel }}\n </label>\n <PaSelect :id=\"itemsSelectId\"\n :model-value=\"pageSizeModel\"\n :options=\"pageSizeSelectOptions\"\n :disabled=\"disabled\"\n size=\"lg\"\n class=\"pa-pagination__select\"\n @update:model-value=\"onPageSizeChange\" />\n <span class=\"pa-pagination__range\">\n <span class=\"pa-pagination__num\">{{ rangeStart }} - {{ rangeEnd }}</span>\n <span>{{ rangeSeparator }}</span>\n <span class=\"pa-pagination__num\">{{ totalItems }}</span>\n <span>{{ itemsLabel }}</span>\n </span>\n </div>\n <span class=\"pa-pagination__divider\"\n aria-hidden=\"true\" />\n <div class=\"pa-pagination__page-block\">\n <PaSelect :id=\"pageSelectId\"\n :model-value=\"currentPageModel\"\n :options=\"pageJumperOptions\"\n :disabled=\"disabled\"\n size=\"lg\"\n class=\"pa-pagination__select\"\n @update:model-value=\"onPageJumperChange\" />\n <span class=\"pa-pagination__range\">\n <span>{{ rangeSeparator }}</span>\n <span class=\"pa-pagination__num\">{{ totalPages }}</span>\n <span>{{ pagesLabel }}</span>\n </span>\n <button type=\"button\"\n class=\"pa-pagination__caret\"\n :aria-label=\"previousLabel\"\n :aria-disabled=\"isPrevDisabled ? 'true' : undefined\"\n :tabindex=\"isPrevDisabled ? -1 : 0\"\n @click=\"onPrev\">\n <PaIcon name=\"caret-left\"\n size=\"sm\" />\n </button>\n <button type=\"button\"\n class=\"pa-pagination__caret\"\n :aria-label=\"nextLabel\"\n :aria-disabled=\"isNextDisabled ? 'true' : undefined\"\n :tabindex=\"isNextDisabled ? -1 : 0\"\n @click=\"onNext\">\n <PaIcon name=\"caret-right\"\n size=\"sm\" />\n </button>\n </div>\n </nav>\n</template>\n\n<style scoped>\n.pa-pagination {\n display: inline-flex;\n background: var(--pa-color-bg-white);\n border: 1px solid var(--pa-color-bg-primary-light-50);\n border-radius: var(--pa-radius-smooth);\n padding: var(--pa-space-2xs);\n font-family: var(--pa-font-family-base);\n}\n\n.pa-pagination--items-page {\n display: flex;\n align-items: stretch;\n width: 100%;\n height: 74px;\n background: var(--pa-color-bg-primary-light-50);\n border: none;\n padding: 0;\n container-type: inline-size;\n}\n\n.pa-pagination__items-block {\n display: flex;\n align-items: center;\n gap: var(--pa-space-md);\n padding: var(--pa-space-2xs) var(--pa-space-sm);\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.pa-pagination__page-block {\n display: flex;\n align-items: center;\n gap: var(--pa-space-lg);\n padding: var(--pa-space-2xs) var(--pa-space-xl) var(--pa-space-2xs) var(--pa-space-lg);\n flex: 0 0 auto;\n}\n\n.pa-pagination__divider {\n width: 1px;\n height: 58px;\n align-self: center;\n background: var(--pa-color-bg-primary-light-60);\n flex: 0 0 auto;\n}\n\n.pa-pagination__field-label {\n color: var(--pa-color-text-secondary-gray);\n font-family: var(--pa-font-family-base);\n font-size: var(--pa-font-body-size);\n line-height: var(--pa-font-body-line-height);\n font-weight: var(--pa-font-body-weight);\n white-space: nowrap;\n}\n\n.pa-pagination__select {\n width: 82px;\n flex: 0 0 auto;\n}\n\n.pa-pagination__range {\n display: inline-flex;\n align-items: center;\n gap: var(--pa-space-2xs);\n color: var(--pa-color-text-secondary-gray);\n font-family: var(--pa-font-family-base);\n font-size: var(--pa-font-body-size);\n line-height: var(--pa-font-body-line-height);\n font-weight: var(--pa-font-body-weight);\n white-space: nowrap;\n}\n\n.pa-pagination__num {\n font-family: var(--pa-font-family-mono);\n font-size: 16px;\n line-height: 18px;\n}\n\n@container (max-width: 600px) {\n .pa-pagination--items-page {\n justify-content: space-between;\n padding: 16px 32px;\n }\n\n .pa-pagination__items-block {\n gap: var(--pa-space-2xs);\n flex: 0 1 auto;\n }\n\n .pa-pagination__page-block {\n padding: 0;\n gap: 0;\n flex: 0 0 auto;\n }\n\n .pa-pagination--items-page .pa-pagination__field-label,\n .pa-pagination--items-page .pa-pagination__items-block .pa-pagination__select,\n .pa-pagination--items-page .pa-pagination__divider,\n .pa-pagination--items-page .pa-pagination__page-block .pa-pagination__select,\n .pa-pagination--items-page .pa-pagination__page-block .pa-pagination__range {\n display: none;\n }\n}\n\n.pa-pagination__list {\n display: flex;\n align-items: center;\n gap: var(--pa-space-3xs);\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.pa-pagination__tile {\n min-width: 48px;\n min-height: 48px;\n padding: 14px;\n border: none;\n background: var(--pa-color-bg-white);\n border-radius: var(--pa-radius-xs);\n color: var(--pa-color-text-secondary-gray);\n font-family: var(--pa-font-family-base);\n font-size: var(--pa-font-body-size);\n line-height: var(--pa-font-body-line-height);\n font-weight: var(--pa-font-body-weight);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.pa-pagination__tile:hover:not(.pa-pagination__tile--current):not(.pa-pagination__tile--disabled) {\n background: var(--pa-color-primary-hover);\n color: var(--pa-color-text-white);\n}\n\n.pa-pagination__tile:focus {\n outline: none;\n}\n\n.pa-pagination__tile:focus-visible:not(.pa-pagination__tile--current):not(.pa-pagination__tile--disabled) {\n box-shadow: inset 0 0 0 1px var(--pa-color-primary);\n font-family: var(--pa-font-family-mono);\n font-size: 16px;\n line-height: 24px;\n}\n\n.pa-pagination__tile--current {\n background: var(--pa-color-primary-pressed);\n color: var(--pa-color-text-white);\n font-family: var(--pa-font-family-mono);\n font-size: 16px;\n line-height: 24px;\n cursor: default;\n}\n\n.pa-pagination__tile--disabled {\n background: var(--pa-color-bg-secondary-light-40);\n color: var(--pa-color-text-secondary-gray);\n font-family: var(--pa-font-family-mono);\n font-size: 16px;\n line-height: 24px;\n cursor: not-allowed;\n}\n\n.pa-pagination__tile--current.pa-pagination__tile--disabled {\n background: var(--pa-color-bg-secondary-light-40);\n color: var(--pa-color-text-secondary-gray);\n}\n\n.pa-pagination__ellipsis {\n min-width: 48px;\n min-height: 48px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--pa-color-text-secondary-gray);\n font-family: var(--pa-font-family-base);\n font-size: var(--pa-font-body-size);\n line-height: var(--pa-font-body-line-height);\n}\n\n.pa-pagination__caret {\n min-width: 48px;\n min-height: 48px;\n padding: 12px 16px;\n border: none;\n background: transparent;\n border-radius: var(--pa-radius-xs);\n color: var(--pa-color-primary);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.pa-pagination__caret:hover:not([aria-disabled='true']) {\n background: var(--pa-color-bg-primary-light-40);\n}\n\n.pa-pagination__caret:focus {\n outline: none;\n}\n\n.pa-pagination__caret:focus-visible {\n outline: var(--pa-border-sm) solid var(--pa-color-primary-focus-border);\n outline-offset: 2px;\n}\n\n.pa-pagination__caret[aria-disabled='true'] {\n color: var(--pa-color-text-disabled-gray);\n cursor: not-allowed;\n}\n</style>\n"],"names":["paginationUid","nextPaginationId","props","__props","emit","__emit","instanceId","itemsSelectId","pageSelectId","totalPages","computed","clampedCurrent","entries","pageWindow","isPrevDisabled","isNextDisabled","rangeStart","rangeEnd","pageSizeSelectOptions","merged","n","a","b","pageJumperOptions","_","i","pageSizeModel","currentPageModel","onTileClick","page","onPrev","onNext","onPageSizeChange","value","onPageJumperChange","_createElementBlock","_createElementVNode","_hoisted_2","_createVNode","PaIcon","_openBlock","_Fragment","_renderList","entry","idx","_hoisted_4","_hoisted_5","$event","_hoisted_6","_hoisted_9","PaSelect","_hoisted_10","_hoisted_11","_toDisplayString","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15"],"mappings":"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"}
1
+ {"version":3,"file":"PaPagination.vue2.js","sources":["../../../src/components/PaPagination/PaPagination.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useId } from 'vue'\nimport PaIcon from '../PaIcon/PaIcon.vue'\nimport PaSelect, { type PaSelectOption } from '../PaSelect/PaSelect.vue'\nimport { pageWindow } from './usePageWindow'\n\nexport type PaPaginationVariant = 'cursor-number' | 'items-page'\n\nexport interface PaPaginationProps {\n variant?: PaPaginationVariant\n currentPage?: number\n totalItems: number\n pageSize?: number\n pageSizeOptions?: number[]\n disabled?: boolean\n label?: string\n previousLabel?: string\n nextLabel?: string\n pageLabel?: (page: number) => string\n itemsPerPageLabel?: string\n rangeSeparator?: string\n itemsLabel?: string\n pagesLabel?: string\n}\n\nconst props = withDefaults(defineProps<PaPaginationProps>(), {\n variant: 'cursor-number',\n currentPage: 1,\n pageSize: 10,\n pageSizeOptions: () => [10, 25, 50, 100],\n disabled: false,\n label: 'Paginazione',\n previousLabel: 'Pagina precedente',\n nextLabel: 'Pagina successiva',\n pageLabel: (page: number) => `Vai alla pagina ${page}`,\n itemsPerPageLabel: 'Elementi per pagina:',\n rangeSeparator: 'di',\n itemsLabel: 'Elementi',\n pagesLabel: 'Pagine',\n})\n\nconst emit = defineEmits<{\n 'update:currentPage': [page: number]\n 'update:pageSize': [size: number]\n}>()\n\nconst instanceId = useId()\nconst itemsSelectId = `pa-pagination-${instanceId}__items-select`\nconst pageSelectId = `pa-pagination-${instanceId}__page-select`\n\nconst totalPages = computed(() =>\n props.totalItems <= 0 || props.pageSize <= 0\n ? 0\n : Math.ceil(props.totalItems / props.pageSize),\n)\n\nconst clampedCurrent = computed(() =>\n totalPages.value === 0\n ? 0\n : Math.max(1, Math.min(props.currentPage, totalPages.value)),\n)\n\nconst entries = computed(() => pageWindow(clampedCurrent.value, totalPages.value))\n\nconst isPrevDisabled = computed(\n () => props.disabled || clampedCurrent.value <= 1 || totalPages.value === 0,\n)\nconst isNextDisabled = computed(\n () =>\n props.disabled ||\n clampedCurrent.value >= totalPages.value ||\n totalPages.value === 0,\n)\n\nconst rangeStart = computed(() =>\n totalPages.value === 0 ? 0 : (clampedCurrent.value - 1) * props.pageSize + 1,\n)\nconst rangeEnd = computed(() =>\n totalPages.value === 0\n ? 0\n : Math.min(clampedCurrent.value * props.pageSize, props.totalItems),\n)\n\nconst pageSizeSelectOptions = computed<PaSelectOption[]>(() => {\n const merged = new Set<number>(props.pageSizeOptions)\n merged.add(props.pageSize)\n return [...merged]\n .filter((n) => n > 0)\n .sort((a, b) => a - b)\n .map((n) => ({ value: String(n), label: String(n) }))\n})\n\nconst pageJumperOptions = computed<PaSelectOption[]>(() =>\n Array.from({ length: totalPages.value }, (_, i) => ({\n value: String(i + 1),\n label: String(i + 1),\n })),\n)\n\nconst pageSizeModel = computed(() => String(props.pageSize))\nconst currentPageModel = computed(() => String(clampedCurrent.value))\n\nconst onTileClick = (page: number) => {\n if (props.disabled) return\n if (page === clampedCurrent.value) return\n emit('update:currentPage', page)\n}\n\nconst onPrev = () => {\n if (isPrevDisabled.value) return\n emit('update:currentPage', clampedCurrent.value - 1)\n}\n\nconst onNext = () => {\n if (isNextDisabled.value) return\n emit('update:currentPage', clampedCurrent.value + 1)\n}\n\nconst onPageSizeChange = (value: string) => {\n if (props.disabled) return\n const n = Number(value)\n if (!Number.isFinite(n) || n <= 0) return\n emit('update:pageSize', n)\n}\n\nconst onPageJumperChange = (value: string) => {\n if (props.disabled) return\n const n = Number(value)\n if (!Number.isFinite(n) || n < 1 || n > totalPages.value) return\n emit('update:currentPage', n)\n}\n</script>\n\n<template>\n <nav v-if=\"totalPages > 0 && variant === 'cursor-number'\"\n class=\"pa-pagination pa-pagination--cursor-number\"\n :aria-label=\"label\">\n <ul class=\"pa-pagination__list\">\n <li>\n <button type=\"button\"\n class=\"pa-pagination__caret\"\n :aria-label=\"previousLabel\"\n :aria-disabled=\"isPrevDisabled ? 'true' : undefined\"\n :tabindex=\"isPrevDisabled ? -1 : 0\"\n @click=\"onPrev\">\n <PaIcon name=\"caret-left\"\n size=\"sm\" />\n </button>\n </li>\n <template v-for=\"(entry, idx) in entries\"\n :key=\"`${entry}-${idx}`\">\n <li v-if=\"entry === 'ellipsis'\"\n class=\"pa-pagination__ellipsis\"\n aria-hidden=\"true\">\n ..\n </li>\n <li v-else>\n <button type=\"button\"\n class=\"pa-pagination__tile\"\n :class=\"{\n 'pa-pagination__tile--current': entry === clampedCurrent,\n 'pa-pagination__tile--disabled': disabled,\n }\"\n :aria-label=\"pageLabel(entry)\"\n :aria-current=\"entry === clampedCurrent ? 'page' : undefined\"\n :aria-disabled=\"disabled ? 'true' : undefined\"\n :tabindex=\"disabled ? -1 : 0\"\n @click=\"onTileClick(entry)\">\n {{ entry }}\n </button>\n </li>\n </template>\n <li>\n <button type=\"button\"\n class=\"pa-pagination__caret\"\n :aria-label=\"nextLabel\"\n :aria-disabled=\"isNextDisabled ? 'true' : undefined\"\n :tabindex=\"isNextDisabled ? -1 : 0\"\n @click=\"onNext\">\n <PaIcon name=\"caret-right\"\n size=\"sm\" />\n </button>\n </li>\n </ul>\n </nav>\n\n <nav v-else-if=\"totalPages > 0 && variant === 'items-page'\"\n class=\"pa-pagination pa-pagination--items-page\"\n :aria-label=\"label\">\n <div class=\"pa-pagination__items-block\">\n <label :for=\"itemsSelectId\"\n class=\"pa-pagination__field-label\">\n {{ itemsPerPageLabel }}\n </label>\n <PaSelect :id=\"itemsSelectId\"\n :model-value=\"pageSizeModel\"\n :options=\"pageSizeSelectOptions\"\n :disabled=\"disabled\"\n size=\"lg\"\n class=\"pa-pagination__select\"\n @update:model-value=\"onPageSizeChange\" />\n <span class=\"pa-pagination__range\">\n <span class=\"pa-pagination__num\">{{ rangeStart }} - {{ rangeEnd }}</span>\n <span>{{ rangeSeparator }}</span>\n <span class=\"pa-pagination__num\">{{ totalItems }}</span>\n <span>{{ itemsLabel }}</span>\n </span>\n </div>\n <span class=\"pa-pagination__divider\"\n aria-hidden=\"true\" />\n <div class=\"pa-pagination__page-block\">\n <PaSelect :id=\"pageSelectId\"\n :model-value=\"currentPageModel\"\n :options=\"pageJumperOptions\"\n :disabled=\"disabled\"\n size=\"lg\"\n class=\"pa-pagination__select\"\n @update:model-value=\"onPageJumperChange\" />\n <span class=\"pa-pagination__range\">\n <span>{{ rangeSeparator }}</span>\n <span class=\"pa-pagination__num\">{{ totalPages }}</span>\n <span>{{ pagesLabel }}</span>\n </span>\n <button type=\"button\"\n class=\"pa-pagination__caret\"\n :aria-label=\"previousLabel\"\n :aria-disabled=\"isPrevDisabled ? 'true' : undefined\"\n :tabindex=\"isPrevDisabled ? -1 : 0\"\n @click=\"onPrev\">\n <PaIcon name=\"caret-left\"\n size=\"sm\" />\n </button>\n <button type=\"button\"\n class=\"pa-pagination__caret\"\n :aria-label=\"nextLabel\"\n :aria-disabled=\"isNextDisabled ? 'true' : undefined\"\n :tabindex=\"isNextDisabled ? -1 : 0\"\n @click=\"onNext\">\n <PaIcon name=\"caret-right\"\n size=\"sm\" />\n </button>\n </div>\n </nav>\n</template>\n\n<style scoped>\n.pa-pagination {\n display: inline-flex;\n background: var(--pa-color-bg-white);\n border: 1px solid var(--pa-color-bg-primary-light-50);\n border-radius: var(--pa-radius-smooth);\n padding: var(--pa-space-2xs);\n font-family: var(--pa-font-family-base);\n}\n\n.pa-pagination--items-page {\n display: flex;\n align-items: stretch;\n width: 100%;\n height: 74px;\n background: var(--pa-color-bg-primary-light-50);\n border: none;\n padding: 0;\n container-type: inline-size;\n}\n\n.pa-pagination__items-block {\n display: flex;\n align-items: center;\n gap: var(--pa-space-md);\n padding: var(--pa-space-2xs) var(--pa-space-sm);\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.pa-pagination__page-block {\n display: flex;\n align-items: center;\n gap: var(--pa-space-lg);\n padding: var(--pa-space-2xs) var(--pa-space-xl) var(--pa-space-2xs) var(--pa-space-lg);\n flex: 0 0 auto;\n}\n\n.pa-pagination__divider {\n width: 1px;\n height: 58px;\n align-self: center;\n background: var(--pa-color-bg-primary-light-60);\n flex: 0 0 auto;\n}\n\n.pa-pagination__field-label {\n color: var(--pa-color-text-secondary-gray);\n font-family: var(--pa-font-family-base);\n font-size: var(--pa-font-body-size);\n line-height: var(--pa-font-body-line-height);\n font-weight: var(--pa-font-body-weight);\n white-space: nowrap;\n}\n\n.pa-pagination__select {\n width: 82px;\n flex: 0 0 auto;\n}\n\n.pa-pagination__range {\n display: inline-flex;\n align-items: center;\n gap: var(--pa-space-2xs);\n color: var(--pa-color-text-secondary-gray);\n font-family: var(--pa-font-family-base);\n font-size: var(--pa-font-body-size);\n line-height: var(--pa-font-body-line-height);\n font-weight: var(--pa-font-body-weight);\n white-space: nowrap;\n}\n\n.pa-pagination__num {\n font-family: var(--pa-font-family-mono);\n font-size: 16px;\n line-height: 18px;\n}\n\n@container (max-width: 600px) {\n .pa-pagination--items-page {\n justify-content: space-between;\n padding: 16px 32px;\n }\n\n .pa-pagination__items-block {\n gap: var(--pa-space-2xs);\n flex: 0 1 auto;\n }\n\n .pa-pagination__page-block {\n padding: 0;\n gap: 0;\n flex: 0 0 auto;\n }\n\n .pa-pagination--items-page .pa-pagination__field-label,\n .pa-pagination--items-page .pa-pagination__items-block .pa-pagination__select,\n .pa-pagination--items-page .pa-pagination__divider,\n .pa-pagination--items-page .pa-pagination__page-block .pa-pagination__select,\n .pa-pagination--items-page .pa-pagination__page-block .pa-pagination__range {\n display: none;\n }\n}\n\n.pa-pagination__list {\n display: flex;\n align-items: center;\n gap: var(--pa-space-3xs);\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.pa-pagination__tile {\n min-width: 48px;\n min-height: 48px;\n padding: 14px;\n border: none;\n background: var(--pa-color-bg-white);\n border-radius: var(--pa-radius-xs);\n color: var(--pa-color-text-secondary-gray);\n font-family: var(--pa-font-family-base);\n font-size: var(--pa-font-body-size);\n line-height: var(--pa-font-body-line-height);\n font-weight: var(--pa-font-body-weight);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.pa-pagination__tile:hover:not(.pa-pagination__tile--current):not(.pa-pagination__tile--disabled) {\n background: var(--pa-color-primary-hover);\n color: var(--pa-color-text-white);\n}\n\n.pa-pagination__tile:focus {\n outline: none;\n}\n\n.pa-pagination__tile:focus-visible:not(.pa-pagination__tile--current):not(.pa-pagination__tile--disabled) {\n box-shadow: inset 0 0 0 1px var(--pa-color-primary);\n font-family: var(--pa-font-family-mono);\n font-size: 16px;\n line-height: 24px;\n}\n\n.pa-pagination__tile--current {\n background: var(--pa-color-primary-pressed);\n color: var(--pa-color-text-white);\n font-family: var(--pa-font-family-mono);\n font-size: 16px;\n line-height: 24px;\n cursor: default;\n}\n\n.pa-pagination__tile--disabled {\n background: var(--pa-color-bg-secondary-light-40);\n color: var(--pa-color-text-secondary-gray);\n font-family: var(--pa-font-family-mono);\n font-size: 16px;\n line-height: 24px;\n cursor: not-allowed;\n}\n\n.pa-pagination__tile--current.pa-pagination__tile--disabled {\n background: var(--pa-color-bg-secondary-light-40);\n color: var(--pa-color-text-secondary-gray);\n}\n\n.pa-pagination__ellipsis {\n min-width: 48px;\n min-height: 48px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--pa-color-text-secondary-gray);\n font-family: var(--pa-font-family-base);\n font-size: var(--pa-font-body-size);\n line-height: var(--pa-font-body-line-height);\n}\n\n.pa-pagination__caret {\n min-width: 48px;\n min-height: 48px;\n padding: 12px 16px;\n border: none;\n background: transparent;\n border-radius: var(--pa-radius-xs);\n color: var(--pa-color-primary);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.pa-pagination__caret:hover:not([aria-disabled='true']) {\n background: var(--pa-color-bg-primary-light-40);\n}\n\n.pa-pagination__caret:focus {\n outline: none;\n}\n\n.pa-pagination__caret:focus-visible {\n outline: var(--pa-border-sm) solid var(--pa-color-primary-focus-border);\n outline-offset: 2px;\n}\n\n.pa-pagination__caret[aria-disabled='true'] {\n color: var(--pa-color-text-disabled-gray);\n cursor: not-allowed;\n}\n</style>\n"],"names":["props","__props","emit","__emit","instanceId","useId","itemsSelectId","pageSelectId","totalPages","computed","clampedCurrent","entries","pageWindow","isPrevDisabled","isNextDisabled","rangeStart","rangeEnd","pageSizeSelectOptions","merged","n","a","b","pageJumperOptions","_","i","pageSizeModel","currentPageModel","onTileClick","page","onPrev","onNext","onPageSizeChange","value","onPageJumperChange","_createElementBlock","_createElementVNode","_hoisted_2","_createVNode","PaIcon","_openBlock","_Fragment","_renderList","entry","idx","_hoisted_4","_hoisted_5","$event","_hoisted_6","_hoisted_9","PaSelect","_hoisted_10","_hoisted_11","_toDisplayString","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15"],"mappings":"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"}
@@ -14,14 +14,13 @@ export interface PaRadioGroupProps {
14
14
  disabled?: boolean;
15
15
  name?: string;
16
16
  }
17
- export declare function nextPaRadioGroupId(): string;
18
- declare const _default: import("vue").DefineComponent<PaRadioGroupProps & {
17
+ type __VLS_Props = PaRadioGroupProps;
18
+ type __VLS_PublicProps = __VLS_Props & {
19
19
  modelValue?: string;
20
- }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
20
+ };
21
+ declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
21
22
  "update:modelValue": (value: string) => any;
22
- }, string, import("vue").PublicProps, Readonly<PaRadioGroupProps & {
23
- modelValue?: string;
24
- }> & Readonly<{
23
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
25
24
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
26
25
  }>, {
27
26
  error: string | boolean;
@@ -1,10 +1,8 @@
1
1
  import o from "./PaRadioGroup.vue2.js";
2
- import { nextPaRadioGroupId as c } from "./PaRadioGroup.vue2.js";
3
2
  /* empty css */
4
3
  import r from "../../_virtual/_plugin-vue_export-helper.js";
5
- const e = /* @__PURE__ */ r(o, [["__scopeId", "data-v-ecc1af0e"]]);
4
+ const c = /* @__PURE__ */ r(o, [["__scopeId", "data-v-568cc8b4"]]);
6
5
  export {
7
- e as default,
8
- c as nextPaRadioGroupId
6
+ c as default
9
7
  };
10
8
  //# sourceMappingURL=PaRadioGroup.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PaRadioGroup.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
1
+ {"version":3,"file":"PaRadioGroup.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,16 +1,11 @@
1
- import { defineComponent as q, useModel as I, computed as l, openBlock as r, createElementBlock as d, normalizeClass as s, createTextVNode as M, toDisplayString as n, createCommentVNode as v, Fragment as $, renderList as N, withDirectives as T, createElementVNode as _, vModelRadio as C, mergeModels as R } from "vue";
2
- const A = ["aria-labelledby", "aria-required", "aria-invalid", "aria-describedby"], D = ["id"], E = {
1
+ import { defineComponent as x, useModel as I, useId as M, computed as l, openBlock as r, createElementBlock as d, normalizeClass as s, createTextVNode as $, toDisplayString as n, createCommentVNode as v, Fragment as N, renderList as T, withDirectives as C, createElementVNode as _, vModelRadio as A, mergeModels as D } from "vue";
2
+ const E = ["aria-labelledby", "aria-required", "aria-invalid", "aria-describedby"], R = ["id"], S = {
3
3
  key: 0,
4
4
  class: "pa-radio-group__required",
5
5
  "aria-hidden": "true"
6
- }, G = ["for"], P = ["id", "name", "value", "disabled"], S = { class: "pa-radio-group__option-label" }, w = ["id"];
7
- let z = 0;
8
- function F() {
9
- return `pa-radio-group-${++z}`;
10
- }
11
- const U = /* @__PURE__ */ q({
6
+ }, w = ["for"], z = ["id", "name", "value", "disabled"], F = { class: "pa-radio-group__option-label" }, G = ["id"], P = /* @__PURE__ */ x({
12
7
  __name: "PaRadioGroup",
13
- props: /* @__PURE__ */ R({
8
+ props: /* @__PURE__ */ D({
14
9
  options: {},
15
10
  label: {},
16
11
  id: {},
@@ -26,15 +21,15 @@ const U = /* @__PURE__ */ q({
26
21
  }),
27
22
  emits: ["update:modelValue"],
28
23
  setup(e) {
29
- const a = e, c = I(e, "modelValue"), h = F(), t = l(() => a.id ?? h), p = l(() => `${t.value}-label`), m = l(() => `${t.value}-msg`), x = l(() => a.name ?? `${t.value}-name`);
24
+ const a = e, c = I(e, "modelValue"), h = `pa-radio-group-${M()}`, t = l(() => a.id ?? h), p = l(() => `${t.value}-label`), m = l(() => `${t.value}-msg`), B = l(() => a.name ?? `${t.value}-name`);
30
25
  function g(f) {
31
26
  return `${t.value}-${f.value}`;
32
27
  }
33
- const i = l(() => !!a.error), b = l(() => a.valid && !i.value), B = l(
28
+ const i = l(() => !!a.error), b = l(() => a.valid && !i.value), V = l(
34
29
  () => typeof a.error == "string" && a.error.length > 0 ? a.error : null
35
- ), V = l(
30
+ ), k = l(
36
31
  () => !i.value && !b.value && a.helperText ? a.helperText : null
37
- ), u = l(() => B.value ?? V.value);
32
+ ), u = l(() => V.value ?? k.value);
38
33
  return (f, y) => (r(), d("div", {
39
34
  class: s([
40
35
  "pa-radio-group",
@@ -55,10 +50,10 @@ const U = /* @__PURE__ */ q({
55
50
  id: p.value,
56
51
  class: "pa-radio-group__label"
57
52
  }, [
58
- M(n(e.label), 1),
59
- e.required ? (r(), d("span", E, "*")) : v("", !0)
60
- ], 8, D)) : v("", !0),
61
- (r(!0), d($, null, N(e.options, (o) => (r(), d("label", {
53
+ $(n(e.label), 1),
54
+ e.required ? (r(), d("span", S, "*")) : v("", !0)
55
+ ], 8, R)) : v("", !0),
56
+ (r(!0), d(N, null, T(e.options, (o) => (r(), d("label", {
62
57
  key: o.value,
63
58
  for: g(o),
64
59
  class: s([
@@ -66,29 +61,28 @@ const U = /* @__PURE__ */ q({
66
61
  { "pa-radio-group__option--disabled": e.disabled || o.disabled }
67
62
  ])
68
63
  }, [
69
- T(_("input", {
64
+ C(_("input", {
70
65
  id: g(o),
71
- "onUpdate:modelValue": y[0] || (y[0] = (k) => c.value = k),
66
+ "onUpdate:modelValue": y[0] || (y[0] = (q) => c.value = q),
72
67
  type: "radio",
73
- name: x.value,
68
+ name: B.value,
74
69
  value: o.value,
75
70
  disabled: e.disabled || o.disabled,
76
71
  class: "pa-radio-group__input"
77
- }, null, 8, P), [
78
- [C, c.value]
72
+ }, null, 8, z), [
73
+ [A, c.value]
79
74
  ]),
80
- _("span", S, n(o.label), 1)
81
- ], 10, G))), 128)),
75
+ _("span", F, n(o.label), 1)
76
+ ], 10, w))), 128)),
82
77
  u.value ? (r(), d("div", {
83
78
  key: 1,
84
79
  id: m.value,
85
80
  class: s(["pa-radio-group__message", { "pa-radio-group__message--error": i.value }])
86
- }, n(u.value), 11, w)) : v("", !0)
87
- ], 10, A));
81
+ }, n(u.value), 11, G)) : v("", !0)
82
+ ], 10, E));
88
83
  }
89
84
  });
90
85
  export {
91
- U as default,
92
- F as nextPaRadioGroupId
86
+ P as default
93
87
  };
94
88
  //# sourceMappingURL=PaRadioGroup.vue2.js.map