@semplice-studio/pa-design-system 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/PaAccordion/PaAccordion.vue.d.ts +0 -1
- package/dist/components/PaAccordion/PaAccordion.vue.js +3 -5
- package/dist/components/PaAccordion/PaAccordion.vue.js.map +1 -1
- package/dist/components/PaAccordion/PaAccordion.vue2.js +24 -30
- package/dist/components/PaAccordion/PaAccordion.vue2.js.map +1 -1
- package/dist/components/PaBanner/PaBanner.vue.js +6 -6
- package/dist/components/PaBanner/PaBanner.vue2.js +26 -28
- package/dist/components/PaBanner/PaBanner.vue2.js.map +1 -1
- package/dist/components/PaCard/PaCard.vue.d.ts +17 -14
- package/dist/components/PaCard/PaCard.vue.js +2 -2
- package/dist/components/PaCard/PaCard.vue2.js +37 -42
- package/dist/components/PaCard/PaCard.vue2.js.map +1 -1
- package/dist/components/PaCheckbox/PaCheckbox.vue.d.ts +5 -6
- package/dist/components/PaCheckbox/PaCheckbox.vue.js +2 -4
- package/dist/components/PaCheckbox/PaCheckbox.vue.js.map +1 -1
- package/dist/components/PaCheckbox/PaCheckbox.vue2.js +20 -26
- package/dist/components/PaCheckbox/PaCheckbox.vue2.js.map +1 -1
- package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue.d.ts +5 -6
- package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue.js +2 -4
- package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue.js.map +1 -1
- package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue2.js +25 -31
- package/dist/components/PaCheckboxGroup/PaCheckboxGroup.vue2.js.map +1 -1
- package/dist/components/PaDatePicker/PaDatePicker.vue.d.ts +13 -26
- package/dist/components/PaDatePicker/PaDatePicker.vue.js +4 -6
- package/dist/components/PaDatePicker/PaDatePicker.vue.js.map +1 -1
- package/dist/components/PaDatePicker/PaDatePicker.vue2.js +52 -58
- package/dist/components/PaDatePicker/PaDatePicker.vue2.js.map +1 -1
- package/dist/components/PaDrawer/PaDrawer.vue.js +2 -2
- package/dist/components/PaDrawer/PaDrawer.vue2.js +37 -41
- package/dist/components/PaDrawer/PaDrawer.vue2.js.map +1 -1
- package/dist/components/PaFileUpload/PaFileUpload.vue.d.ts +0 -1
- package/dist/components/PaFileUpload/PaFileUpload.vue.js +3 -5
- package/dist/components/PaFileUpload/PaFileUpload.vue.js.map +1 -1
- package/dist/components/PaFileUpload/PaFileUpload.vue2.js +22 -28
- package/dist/components/PaFileUpload/PaFileUpload.vue2.js.map +1 -1
- package/dist/components/PaFooter/PaFooter.vue.js +1 -1
- package/dist/components/PaFooter/PaFooter.vue2.js +43 -48
- package/dist/components/PaFooter/PaFooter.vue2.js.map +1 -1
- package/dist/components/PaHeaderDesktop/PaHeaderDesktop.vue.js +1 -1
- package/dist/components/PaHeaderDesktop/PaHeaderDesktop.vue2.js +61 -66
- package/dist/components/PaHeaderDesktop/PaHeaderDesktop.vue2.js.map +1 -1
- package/dist/components/PaHeaderMobile/PaHeaderMobile.vue.js +2 -2
- package/dist/components/PaHeaderMobile/PaHeaderMobile.vue2.js +69 -74
- package/dist/components/PaHeaderMobile/PaHeaderMobile.vue2.js.map +1 -1
- package/dist/components/PaHero/PaHero.vue.d.ts +15 -12
- package/dist/components/PaHero/PaHero.vue.js +2 -2
- package/dist/components/PaHero/PaHero.vue2.js +36 -41
- package/dist/components/PaHero/PaHero.vue2.js.map +1 -1
- package/dist/components/PaInput/PaInput.vue.d.ts +15 -13
- package/dist/components/PaInput/PaInput.vue.js +4 -6
- package/dist/components/PaInput/PaInput.vue.js.map +1 -1
- package/dist/components/PaInput/PaInput.vue2.js +27 -33
- package/dist/components/PaInput/PaInput.vue2.js.map +1 -1
- package/dist/components/PaModal/PaModal.vue.d.ts +14 -11
- package/dist/components/PaModal/PaModal.vue.js +3 -3
- package/dist/components/PaModal/PaModal.vue2.js +41 -46
- package/dist/components/PaModal/PaModal.vue2.js.map +1 -1
- package/dist/components/PaMonthPicker/PaMonthPicker.vue.d.ts +13 -26
- package/dist/components/PaMonthPicker/PaMonthPicker.vue.js +2 -4
- package/dist/components/PaMonthPicker/PaMonthPicker.vue.js.map +1 -1
- package/dist/components/PaMonthPicker/PaMonthPicker.vue2.js +64 -70
- package/dist/components/PaMonthPicker/PaMonthPicker.vue2.js.map +1 -1
- package/dist/components/PaPagination/PaPagination.vue.js +2 -2
- package/dist/components/PaPagination/PaPagination.vue2.js +41 -46
- package/dist/components/PaPagination/PaPagination.vue2.js.map +1 -1
- package/dist/components/PaRadioGroup/PaRadioGroup.vue.d.ts +5 -6
- package/dist/components/PaRadioGroup/PaRadioGroup.vue.js +2 -4
- package/dist/components/PaRadioGroup/PaRadioGroup.vue.js.map +1 -1
- package/dist/components/PaRadioGroup/PaRadioGroup.vue2.js +22 -28
- package/dist/components/PaRadioGroup/PaRadioGroup.vue2.js.map +1 -1
- package/dist/components/PaRangePicker/PaRangePicker.vue.d.ts +0 -1
- package/dist/components/PaRangePicker/PaRangePicker.vue.js +4 -6
- package/dist/components/PaRangePicker/PaRangePicker.vue.js.map +1 -1
- package/dist/components/PaRangePicker/PaRangePicker.vue2.js +75 -81
- package/dist/components/PaRangePicker/PaRangePicker.vue2.js.map +1 -1
- package/dist/components/PaSearchBar/PaSearchBar.vue.d.ts +0 -1
- package/dist/components/PaSearchBar/PaSearchBar.vue.js +3 -5
- package/dist/components/PaSearchBar/PaSearchBar.vue.js.map +1 -1
- package/dist/components/PaSearchBar/PaSearchBar.vue2.js +55 -61
- package/dist/components/PaSearchBar/PaSearchBar.vue2.js.map +1 -1
- package/dist/components/PaSelect/PaSelect.vue.d.ts +5 -6
- package/dist/components/PaSelect/PaSelect.vue.js +4 -6
- package/dist/components/PaSelect/PaSelect.vue.js.map +1 -1
- package/dist/components/PaSelect/PaSelect.vue2.js +25 -31
- package/dist/components/PaSelect/PaSelect.vue2.js.map +1 -1
- package/dist/components/PaTabs/PaTabs.vue.js +1 -1
- package/dist/components/PaTabs/PaTabs.vue2.js +17 -19
- package/dist/components/PaTabs/PaTabs.vue2.js.map +1 -1
- package/dist/components/PaTextarea/PaTextarea.vue.d.ts +5 -6
- package/dist/components/PaTextarea/PaTextarea.vue.js +4 -6
- package/dist/components/PaTextarea/PaTextarea.vue.js.map +1 -1
- package/dist/components/PaTextarea/PaTextarea.vue2.js +16 -22
- package/dist/components/PaTextarea/PaTextarea.vue2.js.map +1 -1
- package/dist/components/PaTimePicker/PaTimePicker.vue.d.ts +0 -1
- package/dist/components/PaTimePicker/PaTimePicker.vue.js +2 -4
- package/dist/components/PaTimePicker/PaTimePicker.vue.js.map +1 -1
- package/dist/components/PaTimePicker/PaTimePicker.vue2.js +44 -50
- package/dist/components/PaTimePicker/PaTimePicker.vue2.js.map +1 -1
- package/dist/components/PaTitleBar/PaTitleBar.vue.d.ts +12 -9
- package/dist/components/PaTitleBar/PaTitleBar.vue.js +2 -2
- package/dist/components/PaTitleBar/PaTitleBar.vue2.js +34 -39
- package/dist/components/PaTitleBar/PaTitleBar.vue2.js.map +1 -1
- package/dist/components/PaToggle/PaToggle.vue.d.ts +0 -1
- package/dist/components/PaToggle/PaToggle.vue.js +2 -4
- package/dist/components/PaToggle/PaToggle.vue.js.map +1 -1
- package/dist/components/PaToggle/PaToggle.vue2.js +20 -26
- package/dist/components/PaToggle/PaToggle.vue2.js.map +1 -1
- package/dist/components/PaYearPicker/PaYearPicker.vue.d.ts +13 -26
- package/dist/components/PaYearPicker/PaYearPicker.vue.js +4 -6
- package/dist/components/PaYearPicker/PaYearPicker.vue.js.map +1 -1
- package/dist/components/PaYearPicker/PaYearPicker.vue2.js +70 -76
- package/dist/components/PaYearPicker/PaYearPicker.vue2.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaRadioGroup.vue2.js","sources":["../../../src/components/PaRadioGroup/PaRadioGroup.vue"],"sourcesContent":["<script
|
|
1
|
+
{"version":3,"file":"PaRadioGroup.vue2.js","sources":["../../../src/components/PaRadioGroup/PaRadioGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useId } from 'vue'\n\nexport type PaRadioGroupOption = {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface PaRadioGroupProps {\n options: PaRadioGroupOption[]\n label?: string\n id?: string\n helperText?: string\n error?: string | boolean\n valid?: boolean\n required?: boolean\n disabled?: boolean\n name?: string\n}\n\nconst props = withDefaults(defineProps<PaRadioGroupProps>(), {\n error: false,\n valid: false,\n required: false,\n disabled: false,\n})\n\nconst model = defineModel<string>({ default: '' })\n\nconst generatedId = `pa-radio-group-${useId()}`\nconst groupId = computed(() => props.id ?? generatedId)\nconst labelId = computed(() => `${groupId.value}-label`)\nconst messageId = computed(() => `${groupId.value}-msg`)\nconst groupName = computed(() => props.name ?? `${groupId.value}-name`)\n\nfunction optionId(opt: PaRadioGroupOption) {\n return `${groupId.value}-${opt.value}`\n}\n\nconst errorActive = computed(() => Boolean(props.error))\nconst validActive = computed(() => props.valid && !errorActive.value)\n\nconst errorMessage = computed(() =>\n typeof props.error === 'string' && props.error.length > 0 ? props.error : null,\n)\nconst helperMessage = computed(() =>\n !errorActive.value && !validActive.value && props.helperText ? props.helperText : null,\n)\nconst message = computed(() => errorMessage.value ?? helperMessage.value)\n</script>\n\n<template>\n <div\n :class=\"[\n 'pa-radio-group',\n {\n 'pa-radio-group--error': errorActive,\n 'pa-radio-group--valid': validActive,\n 'pa-radio-group--disabled': disabled,\n },\n ]\"\n role=\"radiogroup\"\n :aria-labelledby=\"label ? labelId : undefined\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"errorActive || undefined\"\n :aria-describedby=\"message ? messageId : undefined\"\n >\n <span v-if=\"label\" :id=\"labelId\" class=\"pa-radio-group__label\">\n {{ label }}<span v-if=\"required\" class=\"pa-radio-group__required\" aria-hidden=\"true\">*</span>\n </span>\n <label\n v-for=\"opt in options\"\n :key=\"opt.value\"\n :for=\"optionId(opt)\"\n :class=\"[\n 'pa-radio-group__option',\n { 'pa-radio-group__option--disabled': disabled || opt.disabled },\n ]\"\n >\n <input\n :id=\"optionId(opt)\"\n v-model=\"model\"\n type=\"radio\"\n :name=\"groupName\"\n :value=\"opt.value\"\n :disabled=\"disabled || opt.disabled\"\n class=\"pa-radio-group__input\"\n />\n <span class=\"pa-radio-group__option-label\">{{ opt.label }}</span>\n </label>\n <div\n v-if=\"message\"\n :id=\"messageId\"\n :class=\"['pa-radio-group__message', { 'pa-radio-group__message--error': errorActive }]\"\n >\n {{ message }}\n </div>\n </div>\n</template>\n\n<style scoped>\n.pa-radio-group {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--pa-space-xs);\n font-family: var(--pa-font-family-base);\n direction: ltr;\n text-align: left;\n}\n\n.pa-radio-group__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-radio-group--disabled .pa-radio-group__label {\n color: var(--pa-color-text-disabled-gray);\n}\n\n.pa-radio-group__required {\n margin-left: 2px;\n color: var(--pa-color-error);\n}\n\n.pa-radio-group__option {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n gap: 10px;\n cursor: pointer;\n}\n\n.pa-radio-group__option--disabled {\n cursor: not-allowed;\n}\n\n.pa-radio-group__input {\n position: relative;\n flex: 0 0 auto;\n width: 24px;\n height: 24px;\n margin: 0;\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n background: var(--pa-color-bg-white);\n border: var(--pa-border-xs) solid var(--pa-color-neutral-gray);\n border-radius: 50%;\n cursor: pointer;\n transition: border-color 120ms ease, background-color 120ms ease;\n}\n\n.pa-radio-group__option:hover:not(.pa-radio-group__option--disabled) .pa-radio-group__input:not(:checked) {\n border-color: var(--pa-color-primary-hover);\n}\n\n.pa-radio-group:not(.pa-radio-group--error):not(.pa-radio-group--valid)\n .pa-radio-group__option:hover:not(.pa-radio-group__option--disabled)\n .pa-radio-group__option-label {\n color: var(--pa-color-primary-hover);\n}\n\n.pa-radio-group__input:focus { outline: none; }\n\n.pa-radio-group__input:focus-visible {\n border-color: var(--pa-color-primary);\n outline: var(--pa-border-xs) solid var(--pa-color-primary-focus-border);\n outline-offset: 3px;\n}\n\n.pa-radio-group__input:checked {\n border-color: var(--pa-color-neutral-gray);\n}\n\n.pa-radio-group__input:checked::before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 14px;\n height: 14px;\n background: var(--pa-color-primary);\n border-radius: 50%;\n transform: translate(-50%, -50%);\n}\n\n.pa-radio-group__input:disabled {\n cursor: not-allowed;\n border-color: var(--pa-color-bg-secondary-light-40);\n}\n\n.pa-radio-group__input:disabled:checked {\n background: var(--pa-color-text-disabled-gray);\n border-color: var(--pa-color-bg-secondary-light-40);\n}\n\n.pa-radio-group__input:disabled:checked::before {\n background: var(--pa-color-text-disabled-gray);\n}\n\n.pa-radio-group__option--disabled .pa-radio-group__option-label {\n color: var(--pa-color-text-disabled-gray);\n}\n\n.pa-radio-group__option-label {\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 color: var(--pa-color-text-secondary-gray);\n}\n\n.pa-radio-group--error .pa-radio-group__input:not(:disabled) {\n border-color: var(--pa-color-error);\n}\n.pa-radio-group--error\n .pa-radio-group__option:hover:not(.pa-radio-group__option--disabled)\n .pa-radio-group__input:not(:checked):not(:disabled) {\n border-color: var(--pa-color-error);\n}\n\n.pa-radio-group--valid .pa-radio-group__input:not(:disabled) {\n border-color: var(--pa-color-success);\n}\n.pa-radio-group--valid\n .pa-radio-group__option:hover:not(.pa-radio-group__option--disabled)\n .pa-radio-group__input:not(:checked):not(:disabled) {\n border-color: var(--pa-color-success);\n}\n\n.pa-radio-group__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-radio-group__message--error {\n color: var(--pa-color-error);\n}\n</style>\n"],"names":["props","__props","model","_useModel","generatedId","useId","groupId","computed","labelId","messageId","groupName","optionId","opt","errorActive","validActive","errorMessage","helperMessage","message","_createElementBlock","_normalizeClass","_hoisted_3","_Fragment","_renderList","_createElementVNode","$event","_hoisted_6","_toDisplayString","_hoisted_7"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAqBA,UAAMA,IAAQC,GAORC,IAAQC,EAAmBF,GAAA,YAAgB,GAE3CG,IAAc,kBAAkBC,EAAA,CAAO,IACvCC,IAAUC,EAAS,MAAMP,EAAM,MAAMI,CAAW,GAChDI,IAAUD,EAAS,MAAM,GAAGD,EAAQ,KAAK,QAAQ,GACjDG,IAAYF,EAAS,MAAM,GAAGD,EAAQ,KAAK,MAAM,GACjDI,IAAYH,EAAS,MAAMP,EAAM,QAAQ,GAAGM,EAAQ,KAAK,OAAO;AAEtE,aAASK,EAASC,GAAyB;AACzC,aAAO,GAAGN,EAAQ,KAAK,IAAIM,EAAI,KAAK;AAAA,IACtC;AAEA,UAAMC,IAAcN,EAAS,MAAM,EAAQP,EAAM,KAAM,GACjDc,IAAcP,EAAS,MAAMP,EAAM,SAAS,CAACa,EAAY,KAAK,GAE9DE,IAAeR;AAAA,MAAS,MAC5B,OAAOP,EAAM,SAAU,YAAYA,EAAM,MAAM,SAAS,IAAIA,EAAM,QAAQ;AAAA,IAAA,GAEtEgB,IAAgBT;AAAA,MAAS,MAC7B,CAACM,EAAY,SAAS,CAACC,EAAY,SAASd,EAAM,aAAaA,EAAM,aAAa;AAAA,IAAA,GAE9EiB,IAAUV,EAAS,MAAMQ,EAAa,SAASC,EAAc,KAAK;2BAItEE,EA6CM,OAAA;AAAA,MA5CH,OAAKC,EAAA;AAAA;;mCAAqEN,EAAA;AAAA,mCAA8CC,EAAA;AAAA,sCAAiDb,EAAA;AAAA,QAAA;AAAA;MAQ1K,MAAK;AAAA,MACJ,mBAAiBA,EAAA,QAAQO,EAAA,QAAU;AAAA,MACnC,iBAAeP,EAAA,YAAY;AAAA,MAC3B,gBAAcY,EAAA,SAAe;AAAA,MAC7B,oBAAkBI,EAAA,QAAUR,EAAA,QAAY;AAAA,IAAA;MAE7BR,EAAA,cAAZiB,EAEO,QAAA;AAAA;QAFa,IAAIV,EAAA;AAAA,QAAS,OAAM;AAAA,MAAA;YAClCP,EAAA,KAAK,GAAA,CAAA;AAAA,QAAeA,EAAA,iBAAZiB,EAAkF,QAAlFE,GAA0E,GAAC;;cAExFF,EAmBQG,GAAA,MAAAC,EAlBQrB,EAAA,SAAO,CAAdW,YADTM,EAmBQ,SAAA;AAAA,QAjBL,KAAKN,EAAI;AAAA,QACT,KAAKD,EAASC,CAAG;AAAA,QACjB,OAAKO,EAAA;AAAA;gDAAoFlB,EAAA,YAAYW,EAAI,SAAA;AAAA,QAAQ;;UAKlHW,EAQE,SAAA;AAAA,UAPC,IAAIZ,EAASC,CAAG;AAAA,wDACRV,EAAK,QAAAsB;AAAA,UACd,MAAK;AAAA,UACJ,MAAMd,EAAA;AAAA,UACN,OAAOE,EAAI;AAAA,UACX,UAAUX,EAAA,YAAYW,EAAI;AAAA,UAC3B,OAAM;AAAA,QAAA;cALGV,EAAA,KAAK;AAAA,QAAA;QAOhBqB,EAAiE,QAAjEE,GAAiEC,EAAnBd,EAAI,KAAK,GAAA,CAAA;AAAA,MAAA;MAGjDK,EAAA,cADRC,EAMM,OAAA;AAAA;QAJH,IAAIT,EAAA;AAAA,QACJ,yEAAuEI,EAAA,OAAW,CAAA;AAAA,MAAA,KAEhFI,EAAA,KAAO,GAAA,IAAAU,CAAA;;;;"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { nextPaRangePickerId as p } from "./PaRangePicker.vue2.js";
|
|
1
|
+
import o from "./PaRangePicker.vue2.js";
|
|
3
2
|
/* empty css */
|
|
4
|
-
import
|
|
5
|
-
const f = /* @__PURE__ */ o
|
|
3
|
+
import a from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const f = /* @__PURE__ */ a(o, [["__scopeId", "data-v-116fde8a"]]);
|
|
6
5
|
export {
|
|
7
|
-
f as default
|
|
8
|
-
p as nextPaRangePickerId
|
|
6
|
+
f as default
|
|
9
7
|
};
|
|
10
8
|
//# sourceMappingURL=PaRangePicker.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaRangePicker.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PaRangePicker.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,19 +1,14 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { DatePicker as
|
|
1
|
+
import { defineComponent as re, useModel as le, ref as y, useId as W, computed as o, watch as ie, onBeforeUnmount as oe, openBlock as f, createElementBlock as m, normalizeClass as D, createTextVNode as de, toDisplayString as F, createCommentVNode as k, withKeys as V, withModifiers as _, createElementVNode as w, renderSlot as se, createVNode as T, withDirectives as ue, unref as ce, withCtx as U, vShow as ve, mergeModels as ge } from "vue";
|
|
2
|
+
import { DatePicker as fe } from "v-calendar";
|
|
3
3
|
/* empty css */
|
|
4
4
|
import B from "../PaIcon/PaIcon.vue.js";
|
|
5
|
-
const
|
|
5
|
+
const me = ["for"], pe = {
|
|
6
6
|
key: 0,
|
|
7
7
|
class: "pa-range-picker__required",
|
|
8
8
|
"aria-hidden": "true"
|
|
9
|
-
},
|
|
10
|
-
let we = 0;
|
|
11
|
-
function Me() {
|
|
12
|
-
return `pa-range-picker-${++we}`;
|
|
13
|
-
}
|
|
14
|
-
const Ee = /* @__PURE__ */ ne({
|
|
9
|
+
}, ye = ["id", "disabled", "aria-expanded", "aria-required", "aria-invalid", "aria-readonly", "aria-describedby", "onKeydown"], ke = { class: "pa-range-picker__value" }, be = ["name", "value", "disabled", "readonly", "required"], he = ["onClick"], De = ["onClick"], we = ["id"], Ee = /* @__PURE__ */ re({
|
|
15
10
|
__name: "PaRangePicker",
|
|
16
|
-
props: /* @__PURE__ */
|
|
11
|
+
props: /* @__PURE__ */ ge({
|
|
17
12
|
display: { default: "popover" },
|
|
18
13
|
placeholder: { default: "gg/mm/aaaa – gg/mm/aaaa" },
|
|
19
14
|
label: {},
|
|
@@ -34,56 +29,56 @@ const Ee = /* @__PURE__ */ ne({
|
|
|
34
29
|
}),
|
|
35
30
|
emits: ["update:modelValue"],
|
|
36
31
|
setup(n) {
|
|
37
|
-
const a = n, u =
|
|
38
|
-
let
|
|
32
|
+
const a = n, u = le(n, "modelValue"), M = y(null), I = y(null), s = y(!1), L = `pa-range-picker-pop-${W()}`, j = `pa-range-picker-${W()}`, x = o(() => a.id ?? j), Y = o(() => `${x.value}-msg`), i = y(null), v = y(null);
|
|
33
|
+
let $ = 0;
|
|
39
34
|
function r(e) {
|
|
40
35
|
return e instanceof Date && !isNaN(e.getTime());
|
|
41
36
|
}
|
|
42
37
|
function d(e) {
|
|
43
38
|
return new Date(e.getFullYear(), e.getMonth(), e.getDate(), 0, 0, 0, 0);
|
|
44
39
|
}
|
|
45
|
-
function
|
|
40
|
+
function G(e) {
|
|
46
41
|
return new Date(e.getFullYear(), e.getMonth(), e.getDate(), 23, 59, 59, 999);
|
|
47
42
|
}
|
|
48
|
-
function
|
|
43
|
+
function N(e, t) {
|
|
49
44
|
return new Date(e.getFullYear(), e.getMonth(), e.getDate() + t, 0, 0, 0, 0);
|
|
50
45
|
}
|
|
51
|
-
function
|
|
46
|
+
function P(e) {
|
|
52
47
|
const t = d(e);
|
|
53
48
|
return a.min && t.getTime() < d(a.min).getTime() || a.max && t.getTime() > d(a.max).getTime() ? !0 : a.disabledDates ? a.disabledDates(t) === !0 : !1;
|
|
54
49
|
}
|
|
55
|
-
const
|
|
50
|
+
const H = o(() => {
|
|
56
51
|
const e = [];
|
|
57
|
-
if (a.min && e.push({ start: null, end:
|
|
58
|
-
const t = u.value, l = t && r(t.start) ? t.start.getFullYear() : (/* @__PURE__ */ new Date()).getFullYear(), c = a.min ? d(a.min) : new Date(l - 5, 0, 1, 0, 0, 0, 0), p = a.max ? d(a.max) : new Date(l + 5, 11, 31, 0, 0, 0, 0),
|
|
59
|
-
for (;
|
|
60
|
-
const A = d(
|
|
61
|
-
a.disabledDates(A) && e.push(A),
|
|
52
|
+
if (a.min && e.push({ start: null, end: N(d(a.min), -1) }), a.max && e.push({ start: N(d(a.max), 1), end: null }), a.disabledDates) {
|
|
53
|
+
const t = u.value, l = t && r(t.start) ? t.start.getFullYear() : (/* @__PURE__ */ new Date()).getFullYear(), c = a.min ? d(a.min) : new Date(l - 5, 0, 1, 0, 0, 0, 0), p = a.max ? d(a.max) : new Date(l + 5, 11, 31, 0, 0, 0, 0), h = new Date(c.getTime());
|
|
54
|
+
for (; h.getTime() <= p.getTime(); ) {
|
|
55
|
+
const A = d(h);
|
|
56
|
+
a.disabledDates(A) && e.push(A), h.setDate(h.getDate() + 1);
|
|
62
57
|
}
|
|
63
58
|
}
|
|
64
59
|
return e;
|
|
65
|
-
}),
|
|
60
|
+
}), z = new Intl.DateTimeFormat("it-IT", {
|
|
66
61
|
day: "2-digit",
|
|
67
62
|
month: "2-digit",
|
|
68
63
|
year: "numeric"
|
|
69
|
-
}),
|
|
64
|
+
}), J = o(() => {
|
|
70
65
|
const e = u.value;
|
|
71
|
-
return e && r(e.start) && r(e.end) ? `${
|
|
72
|
-
}),
|
|
66
|
+
return e && r(e.start) && r(e.end) ? `${z.format(e.start)} – ${z.format(e.end)}` : a.placeholder;
|
|
67
|
+
}), Q = o(
|
|
73
68
|
() => !u.value || !r(u.value.start) || !r(u.value.end)
|
|
74
|
-
), g = o(() => !!a.error),
|
|
69
|
+
), g = o(() => !!a.error), R = o(() => a.valid && !g.value), X = o(
|
|
75
70
|
() => typeof a.error == "string" && a.error.length > 0 ? a.error : null
|
|
76
|
-
),
|
|
71
|
+
), Z = o(
|
|
77
72
|
() => !g.value && a.helperText ? a.helperText : null
|
|
78
|
-
),
|
|
73
|
+
), E = o(() => X.value ?? Z.value);
|
|
79
74
|
function K(e) {
|
|
80
75
|
const t = e.getFullYear(), l = String(e.getMonth() + 1).padStart(2, "0"), c = String(e.getDate()).padStart(2, "0");
|
|
81
76
|
return `${t}-${l}-${c}`;
|
|
82
77
|
}
|
|
83
|
-
const
|
|
78
|
+
const ee = o(() => {
|
|
84
79
|
const e = u.value;
|
|
85
80
|
return !e || !r(e.start) || !r(e.end) ? "" : `${K(e.start)}/${K(e.end)}`;
|
|
86
|
-
}),
|
|
81
|
+
}), ae = o(() => {
|
|
87
82
|
if (r(i.value) && r(v.value)) {
|
|
88
83
|
const t = i.value, l = v.value, [c, p] = t.getTime() <= l.getTime() ? [t, l] : [l, t];
|
|
89
84
|
return [{
|
|
@@ -106,49 +101,49 @@ const Ee = /* @__PURE__ */ ne({
|
|
|
106
101
|
}] : [];
|
|
107
102
|
});
|
|
108
103
|
function O() {
|
|
109
|
-
s.value || a.disabled || a.readonly || (
|
|
104
|
+
s.value || a.disabled || a.readonly || ($ = 0, i.value = null, v.value = null, s.value = !0);
|
|
110
105
|
}
|
|
111
|
-
function
|
|
106
|
+
function b(e = !0) {
|
|
112
107
|
var t;
|
|
113
108
|
s.value && (s.value = !1, i.value = null, v.value = null, e && ((t = I.value) == null || t.focus()));
|
|
114
109
|
}
|
|
115
|
-
function
|
|
116
|
-
a.disabled || a.readonly || (s.value ?
|
|
110
|
+
function S() {
|
|
111
|
+
a.disabled || a.readonly || (s.value ? b() : O());
|
|
117
112
|
}
|
|
118
|
-
function
|
|
113
|
+
function te(e) {
|
|
119
114
|
if (a.readonly || !r(e.date)) return;
|
|
120
115
|
const t = d(e.date);
|
|
121
|
-
if (
|
|
122
|
-
if (
|
|
116
|
+
if (P(t)) return;
|
|
117
|
+
if ($ += 1, $ === 1) {
|
|
123
118
|
i.value = t;
|
|
124
119
|
return;
|
|
125
120
|
}
|
|
126
121
|
const l = r(i.value) ? i.value : t, [c, p] = l.getTime() <= t.getTime() ? [l, t] : [t, l];
|
|
127
122
|
u.value = {
|
|
128
123
|
start: d(c),
|
|
129
|
-
end:
|
|
130
|
-
}, i.value = null, v.value = null, a.display === "popover" &&
|
|
124
|
+
end: G(p)
|
|
125
|
+
}, i.value = null, v.value = null, a.display === "popover" && b();
|
|
131
126
|
}
|
|
132
|
-
function
|
|
127
|
+
function ne(e) {
|
|
133
128
|
if (!a.readonly && r(i.value) && r(e.date)) {
|
|
134
129
|
const t = d(e.date);
|
|
135
|
-
if (
|
|
130
|
+
if (P(t)) return;
|
|
136
131
|
v.value = t;
|
|
137
132
|
}
|
|
138
133
|
}
|
|
139
134
|
function C(e) {
|
|
140
|
-
|
|
135
|
+
M.value && (M.value.contains(e.target) || b(!1));
|
|
141
136
|
}
|
|
142
137
|
function q(e) {
|
|
143
|
-
e.key === "Escape" && (e.preventDefault(),
|
|
138
|
+
e.key === "Escape" && (e.preventDefault(), b());
|
|
144
139
|
}
|
|
145
|
-
return
|
|
140
|
+
return ie(s, (e) => {
|
|
146
141
|
e ? (document.addEventListener("mousedown", C), window.addEventListener("keydown", q)) : (document.removeEventListener("mousedown", C), window.removeEventListener("keydown", q));
|
|
147
|
-
}),
|
|
142
|
+
}), oe(() => {
|
|
148
143
|
document.removeEventListener("mousedown", C), window.removeEventListener("keydown", q);
|
|
149
144
|
}), (e, t) => (f(), m("div", {
|
|
150
145
|
ref_key: "rootRef",
|
|
151
|
-
ref:
|
|
146
|
+
ref: M,
|
|
152
147
|
class: D([
|
|
153
148
|
"pa-range-picker",
|
|
154
149
|
`pa-range-picker--${n.display}`,
|
|
@@ -158,7 +153,7 @@ const Ee = /* @__PURE__ */ ne({
|
|
|
158
153
|
"pa-range-picker--disabled": n.disabled,
|
|
159
154
|
"pa-range-picker--readonly": n.readonly,
|
|
160
155
|
"pa-range-picker--error": g.value,
|
|
161
|
-
"pa-range-picker--valid":
|
|
156
|
+
"pa-range-picker--valid": R.value
|
|
162
157
|
}
|
|
163
158
|
])
|
|
164
159
|
}, [
|
|
@@ -167,9 +162,9 @@ const Ee = /* @__PURE__ */ ne({
|
|
|
167
162
|
for: x.value,
|
|
168
163
|
class: "pa-range-picker__label"
|
|
169
164
|
}, [
|
|
170
|
-
|
|
171
|
-
n.required ? (f(), m("span",
|
|
172
|
-
], 8,
|
|
165
|
+
de(F(n.label), 1),
|
|
166
|
+
n.required ? (f(), m("span", pe, "*")) : k("", !0)
|
|
167
|
+
], 8, me)) : k("", !0),
|
|
173
168
|
n.display === "popover" ? (f(), m("button", {
|
|
174
169
|
key: 1,
|
|
175
170
|
id: x.value,
|
|
@@ -179,47 +174,47 @@ const Ee = /* @__PURE__ */ ne({
|
|
|
179
174
|
class: D([
|
|
180
175
|
"pa-range-picker__trigger",
|
|
181
176
|
{
|
|
182
|
-
"pa-range-picker__trigger--placeholder":
|
|
177
|
+
"pa-range-picker__trigger--placeholder": Q.value,
|
|
183
178
|
"pa-range-picker__trigger--disabled": n.disabled,
|
|
184
179
|
"pa-range-picker__trigger--readonly": n.readonly && !n.disabled,
|
|
185
180
|
"pa-range-picker__trigger--error": g.value && !n.disabled,
|
|
186
|
-
"pa-range-picker__trigger--valid":
|
|
181
|
+
"pa-range-picker__trigger--valid": R.value && !n.disabled
|
|
187
182
|
}
|
|
188
183
|
]),
|
|
189
184
|
disabled: n.disabled,
|
|
190
185
|
"aria-expanded": s.value,
|
|
191
186
|
"aria-haspopup": "dialog",
|
|
192
|
-
"aria-controls":
|
|
187
|
+
"aria-controls": L,
|
|
193
188
|
"aria-required": n.required || void 0,
|
|
194
189
|
"aria-invalid": g.value || void 0,
|
|
195
190
|
"aria-readonly": n.readonly || void 0,
|
|
196
|
-
"aria-describedby":
|
|
197
|
-
onClick:
|
|
191
|
+
"aria-describedby": E.value ? Y.value : void 0,
|
|
192
|
+
onClick: S,
|
|
198
193
|
onKeydown: [
|
|
199
|
-
V(_(
|
|
200
|
-
V(_(
|
|
194
|
+
V(_(S, ["prevent"]), ["enter"]),
|
|
195
|
+
V(_(S, ["prevent"]), ["space"]),
|
|
201
196
|
V(_(O, ["prevent"]), ["down"])
|
|
202
197
|
]
|
|
203
198
|
}, [
|
|
204
|
-
w("span",
|
|
205
|
-
|
|
206
|
-
|
|
199
|
+
w("span", ke, F(J.value), 1),
|
|
200
|
+
se(e.$slots, "suffix", {}, () => [
|
|
201
|
+
T(B, {
|
|
207
202
|
name: "calendar-blank",
|
|
208
203
|
size: "md"
|
|
209
204
|
})
|
|
210
205
|
], !0)
|
|
211
|
-
], 42,
|
|
206
|
+
], 42, ye)) : k("", !0),
|
|
212
207
|
n.name ? (f(), m("input", {
|
|
213
208
|
key: 2,
|
|
214
209
|
type: "hidden",
|
|
215
210
|
name: n.name,
|
|
216
|
-
value:
|
|
211
|
+
value: ee.value,
|
|
217
212
|
disabled: n.disabled,
|
|
218
213
|
readonly: n.readonly,
|
|
219
214
|
required: n.required
|
|
220
|
-
}, null, 8,
|
|
221
|
-
|
|
222
|
-
id:
|
|
215
|
+
}, null, 8, be)) : k("", !0),
|
|
216
|
+
ue(w("div", {
|
|
217
|
+
id: L,
|
|
223
218
|
class: D([
|
|
224
219
|
"pa-range-picker__popover",
|
|
225
220
|
{ "pa-range-picker__popover--inline": n.display === "inline" }
|
|
@@ -227,55 +222,54 @@ const Ee = /* @__PURE__ */ ne({
|
|
|
227
222
|
role: "dialog",
|
|
228
223
|
"aria-modal": "false"
|
|
229
224
|
}, [
|
|
230
|
-
|
|
231
|
-
attributes:
|
|
225
|
+
T(ce(fe), {
|
|
226
|
+
attributes: ae.value,
|
|
232
227
|
locale: { id: "it-IT", firstDayOfWeek: 2 },
|
|
233
228
|
"is-required": !1,
|
|
234
|
-
"disabled-dates":
|
|
235
|
-
onDayclick:
|
|
236
|
-
onDaymouseenter:
|
|
229
|
+
"disabled-dates": H.value,
|
|
230
|
+
onDayclick: te,
|
|
231
|
+
onDaymouseenter: ne
|
|
237
232
|
}, {
|
|
238
|
-
"nav-prev-button":
|
|
233
|
+
"nav-prev-button": U(({ click: l }) => [
|
|
239
234
|
w("button", {
|
|
240
235
|
type: "button",
|
|
241
236
|
class: "pa-range-picker__nav-arrow",
|
|
242
237
|
"aria-label": "Mese precedente",
|
|
243
238
|
onClick: l
|
|
244
239
|
}, [
|
|
245
|
-
|
|
240
|
+
T(B, {
|
|
246
241
|
name: "caret-left",
|
|
247
242
|
size: "sm"
|
|
248
243
|
})
|
|
249
244
|
], 8, he)
|
|
250
245
|
]),
|
|
251
|
-
"nav-next-button":
|
|
246
|
+
"nav-next-button": U(({ click: l }) => [
|
|
252
247
|
w("button", {
|
|
253
248
|
type: "button",
|
|
254
249
|
class: "pa-range-picker__nav-arrow",
|
|
255
250
|
"aria-label": "Mese successivo",
|
|
256
251
|
onClick: l
|
|
257
252
|
}, [
|
|
258
|
-
|
|
253
|
+
T(B, {
|
|
259
254
|
name: "caret-right",
|
|
260
255
|
size: "sm"
|
|
261
256
|
})
|
|
262
|
-
], 8,
|
|
257
|
+
], 8, De)
|
|
263
258
|
]),
|
|
264
259
|
_: 1
|
|
265
260
|
}, 8, ["attributes", "disabled-dates"])
|
|
266
261
|
], 2), [
|
|
267
|
-
[
|
|
262
|
+
[ve, n.display === "inline" || s.value]
|
|
268
263
|
]),
|
|
269
|
-
|
|
264
|
+
E.value ? (f(), m("div", {
|
|
270
265
|
key: 3,
|
|
271
|
-
id:
|
|
266
|
+
id: Y.value,
|
|
272
267
|
class: D(["pa-range-picker__message", { "pa-range-picker__message--error": g.value }])
|
|
273
|
-
}, F(
|
|
268
|
+
}, F(E.value), 11, we)) : k("", !0)
|
|
274
269
|
], 2));
|
|
275
270
|
}
|
|
276
271
|
});
|
|
277
272
|
export {
|
|
278
|
-
Ee as default
|
|
279
|
-
Me as nextPaRangePickerId
|
|
273
|
+
Ee as default
|
|
280
274
|
};
|
|
281
275
|
//# sourceMappingURL=PaRangePicker.vue2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaRangePicker.vue2.js","sources":["../../../src/components/PaRangePicker/PaRangePicker.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface PaRangePickerValue {\n start: Date\n end: Date\n}\n\nlet uid = 0\nexport function nextPaRangePickerId() {\n return `pa-range-picker-${++uid}`\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { DatePicker as VDatePicker } from 'v-calendar'\nimport 'v-calendar/style.css'\nimport PaIcon from '../PaIcon/PaIcon.vue'\n\nconst props = withDefaults(\n defineProps<{\n display?: 'popover' | 'inline'\n placeholder?: string\n label?: string\n required?: boolean\n helperText?: string\n error?: string | boolean\n valid?: boolean\n disabled?: boolean\n readonly?: boolean\n id?: string\n name?: string\n min?: Date | null\n max?: Date | null\n disabledDates?: (date: Date) => boolean\n }>(),\n {\n display: 'popover',\n placeholder: 'gg/mm/aaaa – gg/mm/aaaa',\n required: false,\n error: false,\n valid: false,\n disabled: false,\n readonly: false,\n min: null,\n max: null,\n disabledDates: undefined,\n },\n)\n\nconst model = defineModel<PaRangePickerValue | null>({ default: null })\n\nconst rootRef = ref<HTMLElement | null>(null)\nconst triggerRef = ref<HTMLButtonElement | null>(null)\nconst open = ref(false)\nconst popoverId = `pa-range-picker-pop-${Math.random().toString(36).slice(2, 9)}`\nconst generatedId = nextPaRangePickerId()\nconst triggerId = computed(() => props.id ?? generatedId)\nconst messageId = computed(() => `${triggerId.value}-msg`)\n\n// In-progress range state. V-Calendar's `v-model.range` does not emit when\n// the initial model is null, so we drive the range commit ourselves via two\n// `@dayclick` events. V-Calendar provides only the visual grid + the click\n// stream; the value lives entirely in this component.\nconst pendingStart = ref<Date | null>(null)\nconst hoveredDate = ref<Date | null>(null)\nlet clicksSinceOpen = 0\n\nfunction isValidDate(d: unknown): d is Date {\n return d instanceof Date && !isNaN(d.getTime())\n}\n\nfunction localMidnight(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0)\n}\n\nfunction localEndOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59, 59, 999)\n}\n\nfunction addDays(d: Date, n: number): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate() + n, 0, 0, 0, 0)\n}\n\nfunction isDisabledDate(d: Date): boolean {\n const m = localMidnight(d)\n if (props.min && m.getTime() < localMidnight(props.min).getTime()) return true\n if (props.max && m.getTime() > localMidnight(props.max).getTime()) return true\n return props.disabledDates ? props.disabledDates(m) === true : false\n}\n\n// V-Calendar's `disabled-dates` only accepts Date / range entries (no\n// functions). To keep a single source of truth for visual disable + native\n// keyboard skip, predicate-true days within a bounded window are enumerated\n// and pushed as individual Date entries alongside the min/max ranges.\nconst disabledDatesForVCalendar = computed(() => {\n const list: unknown[] = []\n if (props.min) list.push({ start: null, end: addDays(localMidnight(props.min), -1) })\n if (props.max) list.push({ start: addDays(localMidnight(props.max), 1), end: null })\n if (props.disabledDates) {\n const v = model.value\n const anchorYear =\n v && isValidDate(v.start)\n ? v.start.getFullYear()\n : new Date().getFullYear()\n const winStart = props.min\n ? localMidnight(props.min)\n : new Date(anchorYear - 5, 0, 1, 0, 0, 0, 0)\n const winEnd = props.max\n ? localMidnight(props.max)\n : new Date(anchorYear + 5, 11, 31, 0, 0, 0, 0)\n const cursor = new Date(winStart.getTime())\n while (cursor.getTime() <= winEnd.getTime()) {\n const day = localMidnight(cursor)\n if (props.disabledDates(day)) list.push(day)\n cursor.setDate(cursor.getDate() + 1)\n }\n }\n return list\n})\n\nconst dateFormatter = new Intl.DateTimeFormat('it-IT', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n})\n\nconst displayValue = computed(() => {\n const v = model.value\n if (v && isValidDate(v.start) && isValidDate(v.end)) {\n return `${dateFormatter.format(v.start)} – ${dateFormatter.format(v.end)}`\n }\n return props.placeholder\n})\n\nconst placeholderShown = computed(\n () => !model.value || !isValidDate(model.value.start) || !isValidDate(model.value.end),\n)\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// Slash-separated ISO 8601 interval — single hidden input. Built from LOCAL\n// components on both ends; never `.toISOString()` (UTC drift).\nfunction toLocalIsoDay(d: Date): string {\n const y = d.getFullYear()\n const m = String(d.getMonth() + 1).padStart(2, '0')\n const day = String(d.getDate()).padStart(2, '0')\n return `${y}-${m}-${day}`\n}\nconst serialized = computed(() => {\n const v = model.value\n if (!v || !isValidDate(v.start) || !isValidDate(v.end)) return ''\n return `${toLocalIsoDay(v.start)}/${toLocalIsoDay(v.end)}`\n})\n\n// Drives V-Calendar's visual highlights. Three states:\n// - committed range → solid blue pill from model.start → model.end\n// - in-progress with hover → preview pill from pendingStart → hovered\n// - in-progress without hover → single solid cell on pendingStart\nconst attributes = computed(() => {\n if (isValidDate(pendingStart.value) && isValidDate(hoveredDate.value)) {\n const a = pendingStart.value\n const b = hoveredDate.value\n const [start, end] = a.getTime() <= b.getTime() ? [a, b] : [b, a]\n return [{\n key: 'in-progress',\n highlight: { color: 'blue', fillMode: 'light' },\n dates: { start, end },\n }]\n }\n if (isValidDate(pendingStart.value)) {\n return [{\n key: 'in-progress-start',\n highlight: { color: 'blue', fillMode: 'solid' },\n dates: pendingStart.value,\n }]\n }\n const v = model.value\n if (v && isValidDate(v.start) && isValidDate(v.end)) {\n return [{\n key: 'committed',\n highlight: { color: 'blue', fillMode: 'solid' },\n dates: { start: v.start, end: v.end },\n }]\n }\n return []\n})\n\nfunction openPopover() {\n if (open.value || props.disabled || props.readonly) return\n clicksSinceOpen = 0\n pendingStart.value = null\n hoveredDate.value = null\n open.value = true\n}\n\nfunction closePopover(returnFocus = true) {\n if (!open.value) return\n open.value = false\n pendingStart.value = null\n hoveredDate.value = null\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 onDayClick(day: { date: Date }) {\n if (props.readonly) return\n if (!isValidDate(day.date)) return\n const picked = localMidnight(day.date)\n if (isDisabledDate(picked)) return\n clicksSinceOpen += 1\n\n if (clicksSinceOpen === 1) {\n pendingStart.value = picked\n return\n }\n\n // Second click commits. Sort so end >= start, then store start at local\n // midnight + end at local end-of-day for clean day-precision serialization.\n const a = isValidDate(pendingStart.value) ? pendingStart.value : picked\n const [startDay, endDay] = a.getTime() <= picked.getTime()\n ? [a, picked]\n : [picked, a]\n model.value = {\n start: localMidnight(startDay),\n end: localEndOfDay(endDay),\n }\n pendingStart.value = null\n hoveredDate.value = null\n if (props.display === 'popover') closePopover()\n}\n\nfunction onDayMouseEnter(day: { date: Date }) {\n if (props.readonly) return\n if (isValidDate(pendingStart.value) && isValidDate(day.date)) {\n const hovered = localMidnight(day.date)\n if (isDisabledDate(hovered)) return\n hoveredDate.value = hovered\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-range-picker',\n `pa-range-picker--${display}`,\n {\n 'pa-range-picker--open': open,\n 'pa-range-picker--picking': pendingStart,\n 'pa-range-picker--disabled': disabled,\n 'pa-range-picker--readonly': readonly,\n 'pa-range-picker--error': errorActive,\n 'pa-range-picker--valid': validActive,\n },\n ]\"\n >\n <label v-if=\"label\" :for=\"triggerId\" class=\"pa-range-picker__label\">\n {{ label }}<span v-if=\"required\" class=\"pa-range-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-range-picker__trigger',\n {\n 'pa-range-picker__trigger--placeholder': placeholderShown,\n 'pa-range-picker__trigger--disabled': disabled,\n 'pa-range-picker__trigger--readonly': readonly && !disabled,\n 'pa-range-picker__trigger--error': errorActive && !disabled,\n 'pa-range-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-range-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-range-picker__popover',\n { 'pa-range-picker__popover--inline': display === 'inline' },\n ]\"\n role=\"dialog\"\n aria-modal=\"false\"\n >\n <VDatePicker\n :attributes=\"attributes\"\n :locale=\"{ id: 'it-IT', firstDayOfWeek: 2 }\"\n :is-required=\"false\"\n :disabled-dates=\"disabledDatesForVCalendar\"\n @dayclick=\"onDayClick\"\n @daymouseenter=\"onDayMouseEnter\"\n >\n <template #nav-prev-button=\"{ click }\">\n <button\n type=\"button\"\n class=\"pa-range-picker__nav-arrow\"\n aria-label=\"Mese precedente\"\n @click=\"click\"\n >\n <PaIcon name=\"caret-left\" size=\"sm\" />\n </button>\n </template>\n <template #nav-next-button=\"{ click }\">\n <button\n type=\"button\"\n class=\"pa-range-picker__nav-arrow\"\n aria-label=\"Mese successivo\"\n @click=\"click\"\n >\n <PaIcon name=\"caret-right\" size=\"sm\" />\n </button>\n </template>\n </VDatePicker>\n </div>\n\n <div\n v-if=\"message\"\n :id=\"messageId\"\n :class=\"['pa-range-picker__message', { 'pa-range-picker__message--error': errorActive }]\"\n >\n {{ message }}\n </div>\n </div>\n</template>\n\n<style scoped>\n.pa-range-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-range-picker__label {\n font: 600 14px/20px 'Inter', sans-serif;\n color: var(--pa-color-text-dark-blue, #00173d);\n}\n.pa-range-picker__required {\n margin-left: 2px;\n color: var(--pa-color-error, #de2049);\n}\n\n.pa-range-picker__message {\n font: 400 14px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-range-picker__message--error {\n color: var(--pa-color-error, #de2049);\n}\n\n.pa-range-picker__trigger {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n min-width: 280px;\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-range-picker__trigger:hover { border-color: var(--pa-color-primary, #0071ff); }\n.pa-range-picker__trigger:focus-visible {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: 2px;\n}\n.pa-range-picker__trigger--placeholder .pa-range-picker__value {\n color: var(--pa-color-text-disabled, #5b6571);\n}\n.pa-range-picker__trigger--error {\n border-color: var(--pa-color-error, #de2049);\n}\n.pa-range-picker__trigger--error:hover {\n border-color: var(--pa-color-error, #de2049);\n}\n.pa-range-picker__trigger--valid {\n border-color: var(--pa-color-success, #008069);\n}\n.pa-range-picker__trigger--valid:hover {\n border-color: var(--pa-color-success, #008069);\n}\n.pa-range-picker__trigger--disabled,\n.pa-range-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-range-picker__trigger--disabled:hover,\n.pa-range-picker__trigger[disabled]:hover {\n border-color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-range-picker__trigger--readonly:hover {\n border-color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-range-picker__value {\n flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n\n.pa-range-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-range-picker__popover--inline {\n position: static; top: auto; left: auto; display: inline-block;\n}\n\n.pa-range-picker :deep(.pa-range-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-range-picker :deep(.pa-range-picker__nav-arrow:hover) {\n background: var(--pa-color-bg-primary-light-40, #f2f6fc);\n}\n.pa-range-picker :deep(.pa-range-picker__nav-arrow:focus-visible) {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: 0;\n}\n\n.pa-range-picker :deep(.vc-container) {\n --vc-bg: #ffffff; --vc-border: transparent; --vc-rounded: 0;\n --vc-font-family: 'Inter', sans-serif;\n font-family: 'Inter', sans-serif;\n background: #ffffff; border: 0;\n color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-range-picker :deep(.vc-header) { padding: 0 0 16px; }\n.pa-range-picker :deep(.vc-title) {\n font: 600 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-primary, #0071ff);\n pointer-events: none;\n}\n.pa-range-picker :deep(.vc-weeks) { padding: 0; }\n.pa-range-picker :deep(.vc-weekday) {\n font: 600 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n padding: 8px 0; text-transform: capitalize;\n}\n.pa-range-picker :deep(.vc-day) { min-height: 36px; }\n.pa-range-picker :deep(.vc-day-content) {\n font: 400 16px/18px 'Roboto Mono', monospace;\n color: var(--pa-color-neutral-gray, #454d56);\n width: 32px; height: 32px; border-radius: 9999px; transition: none;\n}\n.pa-range-picker :deep(.vc-day-content:hover) {\n background: var(--pa-color-primary-hover, #00368f); color: #ffffff;\n}\n.pa-range-picker :deep(.vc-day-content:focus-visible) {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: -2px; background: transparent;\n color: var(--pa-color-primary, #0071ff);\n}\n.pa-range-picker :deep(.vc-day.is-not-in-month .vc-day-content),\n.pa-range-picker :deep(.vc-day.is-disabled .vc-day-content) {\n color: var(--pa-color-text-disabled, #5b6571);\n pointer-events: none;\n}\n.pa-range-picker :deep(.vc-pane-layout) { gap: 0; }\n.pa-range-picker :deep(.vc-arrow) { display: none; }\n\n.pa-range-picker :deep(.vc-highlight-base-start),\n.pa-range-picker :deep(.vc-highlight-base-middle),\n.pa-range-picker :deep(.vc-highlight-base-end),\n.pa-range-picker :deep(.vc-highlight) {\n background: var(--pa-color-primary, #0071ff) !important;\n}\n.pa-range-picker :deep(.vc-highlight-content-solid),\n.pa-range-picker :deep(.vc-highlight-content-light) {\n color: #ffffff !important;\n font: 400 16px/18px 'Roboto Mono', monospace;\n}\n\n/* In-progress preview shading (between pendingStart and hovered cell) so the\n user can tell a not-yet-committed pick from a committed range at a glance. */\n.pa-range-picker--picking :deep(.vc-highlight-base-start),\n.pa-range-picker--picking :deep(.vc-highlight-base-middle),\n.pa-range-picker--picking :deep(.vc-highlight-base-end) {\n background: var(--pa-color-primary-hover, #00368f) !important;\n}\n</style>\n"],"names":["uid","nextPaRangePickerId","props","__props","model","_useModel","rootRef","ref","triggerRef","open","popoverId","generatedId","triggerId","computed","messageId","pendingStart","hoveredDate","clicksSinceOpen","isValidDate","d","localMidnight","localEndOfDay","addDays","n","isDisabledDate","m","disabledDatesForVCalendar","list","v","anchorYear","winStart","winEnd","cursor","day","dateFormatter","displayValue","placeholderShown","errorActive","validActive","errorMessage","helperMessage","message","toLocalIsoDay","y","serialized","attributes","a","b","start","end","openPopover","closePopover","returnFocus","_a","togglePopover","onDayClick","picked","startDay","endDay","onDayMouseEnter","hovered","onDocumentMousedown","event","onWindowKeydown","watch","isOpen","onBeforeUnmount","_createElementBlock","_normalizeClass","_hoisted_2","_createElementVNode","_hoisted_4","_toDisplayString","_renderSlot","_ctx","_createVNode","PaIcon","_unref","VDatePicker","_withCtx","click","_vShow","_hoisted_8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PaRangePicker.vue2.js","sources":["../../../src/components/PaRangePicker/PaRangePicker.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface PaRangePickerValue {\n start: Date\n end: Date\n}\n\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, useId, watch } from 'vue'\nimport { DatePicker as VDatePicker } from 'v-calendar'\nimport 'v-calendar/style.css'\nimport PaIcon from '../PaIcon/PaIcon.vue'\n\nconst props = withDefaults(\n defineProps<{\n display?: 'popover' | 'inline'\n placeholder?: string\n label?: string\n required?: boolean\n helperText?: string\n error?: string | boolean\n valid?: boolean\n disabled?: boolean\n readonly?: boolean\n id?: string\n name?: string\n min?: Date | null\n max?: Date | null\n disabledDates?: (date: Date) => boolean\n }>(),\n {\n display: 'popover',\n placeholder: 'gg/mm/aaaa – gg/mm/aaaa',\n required: false,\n error: false,\n valid: false,\n disabled: false,\n readonly: false,\n min: null,\n max: null,\n disabledDates: undefined,\n },\n)\n\nconst model = defineModel<PaRangePickerValue | null>({ default: null })\n\nconst rootRef = ref<HTMLElement | null>(null)\nconst triggerRef = ref<HTMLButtonElement | null>(null)\nconst open = ref(false)\nconst popoverId = `pa-range-picker-pop-${useId()}`\nconst generatedId = `pa-range-picker-${useId()}`\nconst triggerId = computed(() => props.id ?? generatedId)\nconst messageId = computed(() => `${triggerId.value}-msg`)\n\n// In-progress range state. V-Calendar's `v-model.range` does not emit when\n// the initial model is null, so we drive the range commit ourselves via two\n// `@dayclick` events. V-Calendar provides only the visual grid + the click\n// stream; the value lives entirely in this component.\nconst pendingStart = ref<Date | null>(null)\nconst hoveredDate = ref<Date | null>(null)\nlet clicksSinceOpen = 0\n\nfunction isValidDate(d: unknown): d is Date {\n return d instanceof Date && !isNaN(d.getTime())\n}\n\nfunction localMidnight(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0)\n}\n\nfunction localEndOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59, 59, 999)\n}\n\nfunction addDays(d: Date, n: number): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate() + n, 0, 0, 0, 0)\n}\n\nfunction isDisabledDate(d: Date): boolean {\n const m = localMidnight(d)\n if (props.min && m.getTime() < localMidnight(props.min).getTime()) return true\n if (props.max && m.getTime() > localMidnight(props.max).getTime()) return true\n return props.disabledDates ? props.disabledDates(m) === true : false\n}\n\n// V-Calendar's `disabled-dates` only accepts Date / range entries (no\n// functions). To keep a single source of truth for visual disable + native\n// keyboard skip, predicate-true days within a bounded window are enumerated\n// and pushed as individual Date entries alongside the min/max ranges.\nconst disabledDatesForVCalendar = computed(() => {\n const list: unknown[] = []\n if (props.min) list.push({ start: null, end: addDays(localMidnight(props.min), -1) })\n if (props.max) list.push({ start: addDays(localMidnight(props.max), 1), end: null })\n if (props.disabledDates) {\n const v = model.value\n const anchorYear =\n v && isValidDate(v.start)\n ? v.start.getFullYear()\n : new Date().getFullYear()\n const winStart = props.min\n ? localMidnight(props.min)\n : new Date(anchorYear - 5, 0, 1, 0, 0, 0, 0)\n const winEnd = props.max\n ? localMidnight(props.max)\n : new Date(anchorYear + 5, 11, 31, 0, 0, 0, 0)\n const cursor = new Date(winStart.getTime())\n while (cursor.getTime() <= winEnd.getTime()) {\n const day = localMidnight(cursor)\n if (props.disabledDates(day)) list.push(day)\n cursor.setDate(cursor.getDate() + 1)\n }\n }\n return list\n})\n\nconst dateFormatter = new Intl.DateTimeFormat('it-IT', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n})\n\nconst displayValue = computed(() => {\n const v = model.value\n if (v && isValidDate(v.start) && isValidDate(v.end)) {\n return `${dateFormatter.format(v.start)} – ${dateFormatter.format(v.end)}`\n }\n return props.placeholder\n})\n\nconst placeholderShown = computed(\n () => !model.value || !isValidDate(model.value.start) || !isValidDate(model.value.end),\n)\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// Slash-separated ISO 8601 interval — single hidden input. Built from LOCAL\n// components on both ends; never `.toISOString()` (UTC drift).\nfunction toLocalIsoDay(d: Date): string {\n const y = d.getFullYear()\n const m = String(d.getMonth() + 1).padStart(2, '0')\n const day = String(d.getDate()).padStart(2, '0')\n return `${y}-${m}-${day}`\n}\nconst serialized = computed(() => {\n const v = model.value\n if (!v || !isValidDate(v.start) || !isValidDate(v.end)) return ''\n return `${toLocalIsoDay(v.start)}/${toLocalIsoDay(v.end)}`\n})\n\n// Drives V-Calendar's visual highlights. Three states:\n// - committed range → solid blue pill from model.start → model.end\n// - in-progress with hover → preview pill from pendingStart → hovered\n// - in-progress without hover → single solid cell on pendingStart\nconst attributes = computed(() => {\n if (isValidDate(pendingStart.value) && isValidDate(hoveredDate.value)) {\n const a = pendingStart.value\n const b = hoveredDate.value\n const [start, end] = a.getTime() <= b.getTime() ? [a, b] : [b, a]\n return [{\n key: 'in-progress',\n highlight: { color: 'blue', fillMode: 'light' },\n dates: { start, end },\n }]\n }\n if (isValidDate(pendingStart.value)) {\n return [{\n key: 'in-progress-start',\n highlight: { color: 'blue', fillMode: 'solid' },\n dates: pendingStart.value,\n }]\n }\n const v = model.value\n if (v && isValidDate(v.start) && isValidDate(v.end)) {\n return [{\n key: 'committed',\n highlight: { color: 'blue', fillMode: 'solid' },\n dates: { start: v.start, end: v.end },\n }]\n }\n return []\n})\n\nfunction openPopover() {\n if (open.value || props.disabled || props.readonly) return\n clicksSinceOpen = 0\n pendingStart.value = null\n hoveredDate.value = null\n open.value = true\n}\n\nfunction closePopover(returnFocus = true) {\n if (!open.value) return\n open.value = false\n pendingStart.value = null\n hoveredDate.value = null\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 onDayClick(day: { date: Date }) {\n if (props.readonly) return\n if (!isValidDate(day.date)) return\n const picked = localMidnight(day.date)\n if (isDisabledDate(picked)) return\n clicksSinceOpen += 1\n\n if (clicksSinceOpen === 1) {\n pendingStart.value = picked\n return\n }\n\n // Second click commits. Sort so end >= start, then store start at local\n // midnight + end at local end-of-day for clean day-precision serialization.\n const a = isValidDate(pendingStart.value) ? pendingStart.value : picked\n const [startDay, endDay] = a.getTime() <= picked.getTime()\n ? [a, picked]\n : [picked, a]\n model.value = {\n start: localMidnight(startDay),\n end: localEndOfDay(endDay),\n }\n pendingStart.value = null\n hoveredDate.value = null\n if (props.display === 'popover') closePopover()\n}\n\nfunction onDayMouseEnter(day: { date: Date }) {\n if (props.readonly) return\n if (isValidDate(pendingStart.value) && isValidDate(day.date)) {\n const hovered = localMidnight(day.date)\n if (isDisabledDate(hovered)) return\n hoveredDate.value = hovered\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-range-picker',\n `pa-range-picker--${display}`,\n {\n 'pa-range-picker--open': open,\n 'pa-range-picker--picking': pendingStart,\n 'pa-range-picker--disabled': disabled,\n 'pa-range-picker--readonly': readonly,\n 'pa-range-picker--error': errorActive,\n 'pa-range-picker--valid': validActive,\n },\n ]\"\n >\n <label v-if=\"label\" :for=\"triggerId\" class=\"pa-range-picker__label\">\n {{ label }}<span v-if=\"required\" class=\"pa-range-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-range-picker__trigger',\n {\n 'pa-range-picker__trigger--placeholder': placeholderShown,\n 'pa-range-picker__trigger--disabled': disabled,\n 'pa-range-picker__trigger--readonly': readonly && !disabled,\n 'pa-range-picker__trigger--error': errorActive && !disabled,\n 'pa-range-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-range-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-range-picker__popover',\n { 'pa-range-picker__popover--inline': display === 'inline' },\n ]\"\n role=\"dialog\"\n aria-modal=\"false\"\n >\n <VDatePicker\n :attributes=\"attributes\"\n :locale=\"{ id: 'it-IT', firstDayOfWeek: 2 }\"\n :is-required=\"false\"\n :disabled-dates=\"disabledDatesForVCalendar\"\n @dayclick=\"onDayClick\"\n @daymouseenter=\"onDayMouseEnter\"\n >\n <template #nav-prev-button=\"{ click }\">\n <button\n type=\"button\"\n class=\"pa-range-picker__nav-arrow\"\n aria-label=\"Mese precedente\"\n @click=\"click\"\n >\n <PaIcon name=\"caret-left\" size=\"sm\" />\n </button>\n </template>\n <template #nav-next-button=\"{ click }\">\n <button\n type=\"button\"\n class=\"pa-range-picker__nav-arrow\"\n aria-label=\"Mese successivo\"\n @click=\"click\"\n >\n <PaIcon name=\"caret-right\" size=\"sm\" />\n </button>\n </template>\n </VDatePicker>\n </div>\n\n <div\n v-if=\"message\"\n :id=\"messageId\"\n :class=\"['pa-range-picker__message', { 'pa-range-picker__message--error': errorActive }]\"\n >\n {{ message }}\n </div>\n </div>\n</template>\n\n<style scoped>\n.pa-range-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-range-picker__label {\n font: 600 14px/20px 'Inter', sans-serif;\n color: var(--pa-color-text-dark-blue, #00173d);\n}\n.pa-range-picker__required {\n margin-left: 2px;\n color: var(--pa-color-error, #de2049);\n}\n\n.pa-range-picker__message {\n font: 400 14px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-range-picker__message--error {\n color: var(--pa-color-error, #de2049);\n}\n\n.pa-range-picker__trigger {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n min-width: 280px;\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-range-picker__trigger:hover { border-color: var(--pa-color-primary, #0071ff); }\n.pa-range-picker__trigger:focus-visible {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: 2px;\n}\n.pa-range-picker__trigger--placeholder .pa-range-picker__value {\n color: var(--pa-color-text-disabled, #5b6571);\n}\n.pa-range-picker__trigger--error {\n border-color: var(--pa-color-error, #de2049);\n}\n.pa-range-picker__trigger--error:hover {\n border-color: var(--pa-color-error, #de2049);\n}\n.pa-range-picker__trigger--valid {\n border-color: var(--pa-color-success, #008069);\n}\n.pa-range-picker__trigger--valid:hover {\n border-color: var(--pa-color-success, #008069);\n}\n.pa-range-picker__trigger--disabled,\n.pa-range-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-range-picker__trigger--disabled:hover,\n.pa-range-picker__trigger[disabled]:hover {\n border-color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-range-picker__trigger--readonly:hover {\n border-color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-range-picker__value {\n flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n\n.pa-range-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-range-picker__popover--inline {\n position: static; top: auto; left: auto; display: inline-block;\n}\n\n.pa-range-picker :deep(.pa-range-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-range-picker :deep(.pa-range-picker__nav-arrow:hover) {\n background: var(--pa-color-bg-primary-light-40, #f2f6fc);\n}\n.pa-range-picker :deep(.pa-range-picker__nav-arrow:focus-visible) {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: 0;\n}\n\n.pa-range-picker :deep(.vc-container) {\n --vc-bg: #ffffff; --vc-border: transparent; --vc-rounded: 0;\n --vc-font-family: 'Inter', sans-serif;\n font-family: 'Inter', sans-serif;\n background: #ffffff; border: 0;\n color: var(--pa-color-neutral-gray, #454d56);\n}\n.pa-range-picker :deep(.vc-header) { padding: 0 0 16px; }\n.pa-range-picker :deep(.vc-title) {\n font: 600 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-primary, #0071ff);\n pointer-events: none;\n}\n.pa-range-picker :deep(.vc-weeks) { padding: 0; }\n.pa-range-picker :deep(.vc-weekday) {\n font: 600 16px/20px 'Inter', sans-serif;\n color: var(--pa-color-neutral-gray, #454d56);\n padding: 8px 0; text-transform: capitalize;\n}\n.pa-range-picker :deep(.vc-day) { min-height: 36px; }\n.pa-range-picker :deep(.vc-day-content) {\n font: 400 16px/18px 'Roboto Mono', monospace;\n color: var(--pa-color-neutral-gray, #454d56);\n width: 32px; height: 32px; border-radius: 9999px; transition: none;\n}\n.pa-range-picker :deep(.vc-day-content:hover) {\n background: var(--pa-color-primary-hover, #00368f); color: #ffffff;\n}\n.pa-range-picker :deep(.vc-day-content:focus-visible) {\n outline: 2px solid var(--pa-color-primary-focus-border, #0065d1);\n outline-offset: -2px; background: transparent;\n color: var(--pa-color-primary, #0071ff);\n}\n.pa-range-picker :deep(.vc-day.is-not-in-month .vc-day-content),\n.pa-range-picker :deep(.vc-day.is-disabled .vc-day-content) {\n color: var(--pa-color-text-disabled, #5b6571);\n pointer-events: none;\n}\n.pa-range-picker :deep(.vc-pane-layout) { gap: 0; }\n.pa-range-picker :deep(.vc-arrow) { display: none; }\n\n.pa-range-picker :deep(.vc-highlight-base-start),\n.pa-range-picker :deep(.vc-highlight-base-middle),\n.pa-range-picker :deep(.vc-highlight-base-end),\n.pa-range-picker :deep(.vc-highlight) {\n background: var(--pa-color-primary, #0071ff) !important;\n}\n.pa-range-picker :deep(.vc-highlight-content-solid),\n.pa-range-picker :deep(.vc-highlight-content-light) {\n color: #ffffff !important;\n font: 400 16px/18px 'Roboto Mono', monospace;\n}\n\n/* In-progress preview shading (between pendingStart and hovered cell) so the\n user can tell a not-yet-committed pick from a committed range at a glance. */\n.pa-range-picker--picking :deep(.vc-highlight-base-start),\n.pa-range-picker--picking :deep(.vc-highlight-base-middle),\n.pa-range-picker--picking :deep(.vc-highlight-base-end) {\n background: var(--pa-color-primary-hover, #00368f) !important;\n}\n</style>\n"],"names":["props","__props","model","_useModel","rootRef","ref","triggerRef","open","popoverId","useId","generatedId","triggerId","computed","messageId","pendingStart","hoveredDate","clicksSinceOpen","isValidDate","d","localMidnight","localEndOfDay","addDays","n","isDisabledDate","m","disabledDatesForVCalendar","list","v","anchorYear","winStart","winEnd","cursor","day","dateFormatter","displayValue","placeholderShown","errorActive","validActive","errorMessage","helperMessage","message","toLocalIsoDay","y","serialized","attributes","a","b","start","end","openPopover","closePopover","returnFocus","_a","togglePopover","onDayClick","picked","startDay","endDay","onDayMouseEnter","hovered","onDocumentMousedown","event","onWindowKeydown","watch","isOpen","onBeforeUnmount","_createElementBlock","_normalizeClass","_hoisted_2","_createElementVNode","_hoisted_4","_toDisplayString","_renderSlot","_ctx","_createVNode","PaIcon","_unref","VDatePicker","_withCtx","click","_vShow","_hoisted_8"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,UAAMA,IAAQC,GA+BRC,IAAQC,GAAsCF,GAAA,YAAkB,GAEhEG,IAAUC,EAAwB,IAAI,GACtCC,IAAaD,EAA8B,IAAI,GAC/CE,IAAOF,EAAI,EAAK,GAChBG,IAAY,uBAAuBC,EAAA,CAAO,IAC1CC,IAAc,mBAAmBD,EAAA,CAAO,IACxCE,IAAYC,EAAS,MAAMZ,EAAM,MAAMU,CAAW,GAClDG,IAAYD,EAAS,MAAM,GAAGD,EAAU,KAAK,MAAM,GAMnDG,IAAeT,EAAiB,IAAI,GACpCU,IAAcV,EAAiB,IAAI;AACzC,QAAIW,IAAkB;AAEtB,aAASC,EAAYC,GAAuB;AAC1C,aAAOA,aAAa,QAAQ,CAAC,MAAMA,EAAE,SAAS;AAAA,IAChD;AAEA,aAASC,EAAcD,GAAe;AACpC,aAAO,IAAI,KAAKA,EAAE,YAAA,GAAeA,EAAE,SAAA,GAAYA,EAAE,QAAA,GAAW,GAAG,GAAG,GAAG,CAAC;AAAA,IACxE;AAEA,aAASE,EAAcF,GAAe;AACpC,aAAO,IAAI,KAAKA,EAAE,YAAA,GAAeA,EAAE,SAAA,GAAYA,EAAE,QAAA,GAAW,IAAI,IAAI,IAAI,GAAG;AAAA,IAC7E;AAEA,aAASG,EAAQH,GAASI,GAAiB;AACzC,aAAO,IAAI,KAAKJ,EAAE,YAAA,GAAeA,EAAE,SAAA,GAAYA,EAAE,YAAYI,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAC5E;AAEA,aAASC,EAAeL,GAAkB;AACxC,YAAMM,IAAIL,EAAcD,CAAC;AAEzB,aADIlB,EAAM,OAAOwB,EAAE,QAAA,IAAYL,EAAcnB,EAAM,GAAG,EAAE,QAAA,KACpDA,EAAM,OAAOwB,EAAE,QAAA,IAAYL,EAAcnB,EAAM,GAAG,EAAE,QAAA,IAAkB,KACnEA,EAAM,gBAAgBA,EAAM,cAAcwB,CAAC,MAAM,KAAO;AAAA,IACjE;AAMA,UAAMC,IAA4Bb,EAAS,MAAM;AAC/C,YAAMc,IAAkB,CAAA;AAGxB,UAFI1B,EAAM,OAAK0B,EAAK,KAAK,EAAE,OAAO,MAAM,KAAKL,EAAQF,EAAcnB,EAAM,GAAG,GAAG,EAAE,GAAG,GAChFA,EAAM,OAAK0B,EAAK,KAAK,EAAE,OAAOL,EAAQF,EAAcnB,EAAM,GAAG,GAAG,CAAC,GAAG,KAAK,MAAM,GAC/EA,EAAM,eAAe;AACvB,cAAM2B,IAAIzB,EAAM,OACV0B,IACJD,KAAKV,EAAYU,EAAE,KAAK,IACpBA,EAAE,MAAM,YAAA,KACR,oBAAI,KAAA,GAAO,YAAA,GACXE,IAAW7B,EAAM,MACnBmB,EAAcnB,EAAM,GAAG,IACvB,IAAI,KAAK4B,IAAa,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GACvCE,IAAS9B,EAAM,MACjBmB,EAAcnB,EAAM,GAAG,IACvB,IAAI,KAAK4B,IAAa,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,GACzCG,IAAS,IAAI,KAAKF,EAAS,SAAS;AAC1C,eAAOE,EAAO,QAAA,KAAaD,EAAO,aAAW;AAC3C,gBAAME,IAAMb,EAAcY,CAAM;AAChC,UAAI/B,EAAM,cAAcgC,CAAG,KAAGN,EAAK,KAAKM,CAAG,GAC3CD,EAAO,QAAQA,EAAO,QAAA,IAAY,CAAC;AAAA,QACrC;AAAA,MACF;AACA,aAAOL;AAAA,IACT,CAAC,GAEKO,IAAgB,IAAI,KAAK,eAAe,SAAS;AAAA,MACrD,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,IAAA,CACP,GAEKC,IAAetB,EAAS,MAAM;AAClC,YAAMe,IAAIzB,EAAM;AAChB,aAAIyB,KAAKV,EAAYU,EAAE,KAAK,KAAKV,EAAYU,EAAE,GAAG,IACzC,GAAGM,EAAc,OAAON,EAAE,KAAK,CAAC,MAAMM,EAAc,OAAON,EAAE,GAAG,CAAC,KAEnE3B,EAAM;AAAA,IACf,CAAC,GAEKmC,IAAmBvB;AAAA,MACvB,MAAM,CAACV,EAAM,SAAS,CAACe,EAAYf,EAAM,MAAM,KAAK,KAAK,CAACe,EAAYf,EAAM,MAAM,GAAG;AAAA,IAAA,GAGjFkC,IAAcxB,EAAS,MAAM,EAAQZ,EAAM,KAAM,GACjDqC,IAAczB,EAAS,MAAMZ,EAAM,SAAS,CAACoC,EAAY,KAAK,GAC9DE,IAAe1B;AAAA,MAAS,MAC5B,OAAOZ,EAAM,SAAU,YAAYA,EAAM,MAAM,SAAS,IAAIA,EAAM,QAAQ;AAAA,IAAA,GAEtEuC,IAAgB3B;AAAA,MAAS,MAC7B,CAACwB,EAAY,SAASpC,EAAM,aAAaA,EAAM,aAAa;AAAA,IAAA,GAExDwC,IAAU5B,EAAS,MAAM0B,EAAa,SAASC,EAAc,KAAK;AAIxE,aAASE,EAAcvB,GAAiB;AACtC,YAAMwB,IAAIxB,EAAE,YAAA,GACNM,IAAI,OAAON,EAAE,SAAA,IAAa,CAAC,EAAE,SAAS,GAAG,GAAG,GAC5Cc,IAAM,OAAOd,EAAE,QAAA,CAAS,EAAE,SAAS,GAAG,GAAG;AAC/C,aAAO,GAAGwB,CAAC,IAAIlB,CAAC,IAAIQ,CAAG;AAAA,IACzB;AACA,UAAMW,KAAa/B,EAAS,MAAM;AAChC,YAAMe,IAAIzB,EAAM;AAChB,aAAI,CAACyB,KAAK,CAACV,EAAYU,EAAE,KAAK,KAAK,CAACV,EAAYU,EAAE,GAAG,IAAU,KACxD,GAAGc,EAAcd,EAAE,KAAK,CAAC,IAAIc,EAAcd,EAAE,GAAG,CAAC;AAAA,IAC1D,CAAC,GAMKiB,KAAahC,EAAS,MAAM;AAChC,UAAIK,EAAYH,EAAa,KAAK,KAAKG,EAAYF,EAAY,KAAK,GAAG;AACrE,cAAM8B,IAAI/B,EAAa,OACjBgC,IAAI/B,EAAY,OAChB,CAACgC,GAAOC,CAAG,IAAIH,EAAE,aAAaC,EAAE,QAAA,IAAY,CAACD,GAAGC,CAAC,IAAI,CAACA,GAAGD,CAAC;AAChE,eAAO,CAAC;AAAA,UACN,KAAK;AAAA,UACL,WAAW,EAAE,OAAO,QAAQ,UAAU,QAAA;AAAA,UACtC,OAAO,EAAE,OAAAE,GAAO,KAAAC,EAAA;AAAA,QAAI,CACrB;AAAA,MACH;AACA,UAAI/B,EAAYH,EAAa,KAAK;AAChC,eAAO,CAAC;AAAA,UACN,KAAK;AAAA,UACL,WAAW,EAAE,OAAO,QAAQ,UAAU,QAAA;AAAA,UACtC,OAAOA,EAAa;AAAA,QAAA,CACrB;AAEH,YAAMa,IAAIzB,EAAM;AAChB,aAAIyB,KAAKV,EAAYU,EAAE,KAAK,KAAKV,EAAYU,EAAE,GAAG,IACzC,CAAC;AAAA,QACN,KAAK;AAAA,QACL,WAAW,EAAE,OAAO,QAAQ,UAAU,QAAA;AAAA,QACtC,OAAO,EAAE,OAAOA,EAAE,OAAO,KAAKA,EAAE,IAAA;AAAA,MAAI,CACrC,IAEI,CAAA;AAAA,IACT,CAAC;AAED,aAASsB,IAAc;AACrB,MAAI1C,EAAK,SAASP,EAAM,YAAYA,EAAM,aAC1CgB,IAAkB,GAClBF,EAAa,QAAQ,MACrBC,EAAY,QAAQ,MACpBR,EAAK,QAAQ;AAAA,IACf;AAEA,aAAS2C,EAAaC,IAAc,IAAM;;AACxC,MAAK5C,EAAK,UACVA,EAAK,QAAQ,IACbO,EAAa,QAAQ,MACrBC,EAAY,QAAQ,MAChBoC,OAAaC,IAAA9C,EAAW,UAAX,QAAA8C,EAAkB;AAAA,IACrC;AAEA,aAASC,IAAgB;AACvB,MAAIrD,EAAM,YAAYA,EAAM,aAC5BO,EAAK,QAAQ2C,EAAA,IAAiBD,EAAA;AAAA,IAChC;AAEA,aAASK,GAAWtB,GAAqB;AAEvC,UADIhC,EAAM,YACN,CAACiB,EAAYe,EAAI,IAAI,EAAG;AAC5B,YAAMuB,IAASpC,EAAca,EAAI,IAAI;AACrC,UAAIT,EAAegC,CAAM,EAAG;AAG5B,UAFAvC,KAAmB,GAEfA,MAAoB,GAAG;AACzB,QAAAF,EAAa,QAAQyC;AACrB;AAAA,MACF;AAIA,YAAMV,IAAI5B,EAAYH,EAAa,KAAK,IAAIA,EAAa,QAAQyC,GAC3D,CAACC,GAAUC,CAAM,IAAIZ,EAAE,aAAaU,EAAO,QAAA,IAC7C,CAACV,GAAGU,CAAM,IACV,CAACA,GAAQV,CAAC;AACd,MAAA3C,EAAM,QAAQ;AAAA,QACZ,OAAOiB,EAAcqC,CAAQ;AAAA,QAC7B,KAAKpC,EAAcqC,CAAM;AAAA,MAAA,GAE3B3C,EAAa,QAAQ,MACrBC,EAAY,QAAQ,MAChBf,EAAM,YAAY,aAAWkD,EAAA;AAAA,IACnC;AAEA,aAASQ,GAAgB1B,GAAqB;AAC5C,UAAI,CAAAhC,EAAM,YACNiB,EAAYH,EAAa,KAAK,KAAKG,EAAYe,EAAI,IAAI,GAAG;AAC5D,cAAM2B,IAAUxC,EAAca,EAAI,IAAI;AACtC,YAAIT,EAAeoC,CAAO,EAAG;AAC7B,QAAA5C,EAAY,QAAQ4C;AAAA,MACtB;AAAA,IACF;AAEA,aAASC,EAAoBC,GAAmB;AAC9C,MAAKzD,EAAQ,UACRA,EAAQ,MAAM,SAASyD,EAAM,MAAc,OAAgB,EAAK;AAAA,IACvE;AAEA,aAASC,EAAgBD,GAAsB;AAC7C,MAAIA,EAAM,QAAQ,aAChBA,EAAM,eAAA,GACNX,EAAA;AAAA,IAEJ;AAEA,WAAAa,GAAMxD,GAAM,CAACyD,MAAW;AACtB,MAAIA,KACF,SAAS,iBAAiB,aAAaJ,CAAmB,GAC1D,OAAO,iBAAiB,WAAWE,CAAe,MAElD,SAAS,oBAAoB,aAAaF,CAAmB,GAC7D,OAAO,oBAAoB,WAAWE,CAAe;AAAA,IAEzD,CAAC,GAEDG,GAAgB,MAAM;AACpB,eAAS,oBAAoB,aAAaL,CAAmB,GAC7D,OAAO,oBAAoB,WAAWE,CAAe;AAAA,IACvD,CAAC,mBAICI,EA+GM,OAAA;AAAA,eA9GA;AAAA,MAAJ,KAAI9D;AAAA,MACH,OAAK+D,EAAA;AAAA;4BAAuDlE,EAAA,OAAO;AAAA;mCAA6CM,EAAA;AAAA,sCAA0CO,EAAA;AAAA,uCAAmDb,EAAA;AAAA,uCAA+CA,EAAA;AAAA,oCAA4CmC,EAAA;AAAA,oCAA+CC,EAAA;AAAA,QAAA;AAAA;;MAa3UpC,EAAA,cAAbiE,EAEQ,SAAA;AAAA;QAFa,KAAKvD,EAAA;AAAA,QAAW,OAAM;AAAA,MAAA;aACtCV,EAAA,KAAK,GAAA,CAAA;AAAA,QAAeA,EAAA,iBAAZiE,EAAmF,QAAnFE,IAA2E,GAAC;;MAIjFnE,EAAA,YAAO,kBADfiE,EAgCS,UAAA;AAAA;QA9BN,IAAIvD,EAAA;AAAA,iBACD;AAAA,QAAJ,KAAIL;AAAA,QACJ,MAAK;AAAA,QACJ,OAAK6D,EAAA;AAAA;;qDAAqGhC,EAAA;AAAA,kDAAkElC,EAAA;AAAA,YAA0D,sCAAAA,EAAA,aAAaA,EAAA;AAAA,YAAuD,mCAAAmC,EAAA,UAAgBnC,EAAA;AAAA,YAAuD,mCAAAoC,EAAA,UAAgBpC,EAAA;AAAA,UAAA;AAAA;QAUjY,UAAUA,EAAA;AAAA,QACV,iBAAeM,EAAA;AAAA,QAChB,iBAAc;AAAA,QACb,iBAAeC;AAAA,QACf,iBAAeP,EAAA,YAAY;AAAA,QAC3B,gBAAcmC,EAAA,SAAe;AAAA,QAC7B,iBAAenC,EAAA,YAAY;AAAA,QAC3B,oBAAkBuC,EAAA,QAAU3B,EAAA,QAAY;AAAA,QACxC,SAAOwC;AAAA,QACP,WAAO;AAAA,cAAgBA,GAAa,CAAA,SAAA,CAAA,GAAA,CAAA,OAAA,CAAA;AAAA,cACbA,GAAa,CAAA,SAAA,CAAA,GAAA,CAAA,OAAA,CAAA;AAAA,cACdJ,GAAW,CAAA,SAAA,CAAA,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;AAAA;QAElCoB,EAA8D,QAA9DC,IAA8DC,EAAtBrC,EAAA,KAAY,GAAA,CAAA;AAAA,QACpDsC,GAEOC,wBAFP,MAEO;AAAA,UADLC,EAA0CC,GAAA;AAAA,YAAlC,MAAK;AAAA,YAAiB,MAAK;AAAA,UAAA;;;MAK/B1E,EAAA,aADRiE,EAQE,SAAA;AAAA;QANA,MAAK;AAAA,QACJ,MAAMjE,EAAA;AAAA,QACN,OAAO0C,GAAA;AAAA,QACP,UAAU1C,EAAA;AAAA,QACV,UAAUA,EAAA;AAAA,QACV,UAAUA,EAAA;AAAA,MAAA;SAGboE,EAuCM,OAAA;AAAA,QArCH,IAAI7D;AAAA,QACJ,OAAK2D,EAAA;AAAA;gDAAsFlE,EAAA,YAAO,SAAA;AAAA,QAAA;QAInG,MAAK;AAAA,QACL,cAAW;AAAA,MAAA;QAEXyE,EA4BcE,GAAAC,EAAA,GAAA;AAAA,UA3BX,YAAYjC,GAAA;AAAA,UACZ,QAAQ,EAAA,IAAA,SAAA,gBAAA,EAAA;AAAA,UACR,eAAa;AAAA,UACb,kBAAgBnB,EAAA;AAAA,UAChB,YAAU6B;AAAA,UACV,iBAAeI;AAAA,QAAA;UAEL,mBAAeoB,EACxB,CAOS,EARmB,OAAAC,QAAK;AAAA,YACjCV,EAOS,UAAA;AAAA,cANP,MAAK;AAAA,cACL,OAAM;AAAA,cACN,cAAW;AAAA,cACV,SAAOU;AAAA,YAAA;cAERL,EAAsCC,GAAA;AAAA,gBAA9B,MAAK;AAAA,gBAAa,MAAK;AAAA,cAAA;;;UAGxB,mBAAeG,EACxB,CAOS,EARmB,OAAAC,QAAK;AAAA,YACjCV,EAOS,UAAA;AAAA,cANP,MAAK;AAAA,cACL,OAAM;AAAA,cACN,cAAW;AAAA,cACV,SAAOU;AAAA,YAAA;cAERL,EAAuCC,GAAA;AAAA,gBAA/B,MAAK;AAAA,gBAAc,MAAK;AAAA,cAAA;;;;;;QAlC9B,CAAAK,IAAA/E,EAAA,wBAAwBM,EAAA,KAAI;AAAA,MAAA;MAyC9BiC,EAAA,cADR0B,EAMM,OAAA;AAAA;QAJH,IAAIrD,EAAA;AAAA,QACJ,2EAAyEuB,EAAA,OAAW,CAAA;AAAA,MAAA,KAElFI,EAAA,KAAO,GAAA,IAAAyC,EAAA;;;;"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import a from "./PaSearchBar.vue2.js";
|
|
2
|
-
import { nextPaSearchBarId as f } from "./PaSearchBar.vue2.js";
|
|
3
2
|
/* empty css */
|
|
4
|
-
import
|
|
5
|
-
const m = /* @__PURE__ */
|
|
3
|
+
import o from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const m = /* @__PURE__ */ o(a, [["__scopeId", "data-v-f1199d6a"]]);
|
|
6
5
|
export {
|
|
7
|
-
m as default
|
|
8
|
-
f as nextPaSearchBarId
|
|
6
|
+
m as default
|
|
9
7
|
};
|
|
10
8
|
//# sourceMappingURL=PaSearchBar.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaSearchBar.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PaSearchBar.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|