@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.
- package/README.md +85 -128
- 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 +53 -59
- 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 +76 -82
- 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/docs/design-system.md +590 -0
- package/docs/layouts.md +297 -0
- package/docs/page-composition-examples.md +286 -0
- package/docs/public-surface.md +68 -0
- package/package.json +8 -4
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { defineComponent as D, useSlots as S,
|
|
2
|
-
import
|
|
3
|
-
const
|
|
4
|
-
let Y = 0;
|
|
5
|
-
const ae = /* @__PURE__ */ D({
|
|
1
|
+
import { defineComponent as D, useSlots as S, useId as z, ref as L, computed as r, provide as N, onMounted as V, openBlock as c, createElementBlock as p, createElementVNode as u, normalizeClass as w, Fragment as F, renderList as H, createBlock as M, createCommentVNode as k, toDisplayString as R, renderSlot as P, nextTick as j } from "vue";
|
|
2
|
+
import q from "../PaIcon/PaIcon.vue.js";
|
|
3
|
+
const G = { class: "pa-tabs" }, J = ["aria-label"], O = ["id", "aria-selected", "aria-controls", "aria-disabled", "tabindex", "disabled", "onClick", "onKeydown"], Q = { class: "pa-tabs__tab-content" }, U = { class: "pa-tabs__tab-label" }, W = { class: "pa-tabs__panels" }, X = ["id", "aria-labelledby"], Y = Symbol("PaTabsKey"), ae = /* @__PURE__ */ D({
|
|
6
4
|
__name: "PaTabs",
|
|
7
5
|
props: {
|
|
8
6
|
tabs: { default: () => [] },
|
|
@@ -12,7 +10,7 @@ const ae = /* @__PURE__ */ D({
|
|
|
12
10
|
},
|
|
13
11
|
emits: ["update:activeId"],
|
|
14
12
|
setup(b, { emit: T }) {
|
|
15
|
-
const v = b, I = T, _ = S(), m = `pa-tabs-${
|
|
13
|
+
const v = b, I = T, _ = S(), m = `pa-tabs-${z()}`, s = L([]), f = r(() => (v.tabs ?? []).length > 0), d = r(
|
|
16
14
|
() => f.value ? v.tabs ?? [] : s.value
|
|
17
15
|
), l = r(() => {
|
|
18
16
|
var a;
|
|
@@ -42,7 +40,7 @@ const ae = /* @__PURE__ */ D({
|
|
|
42
40
|
y(e.id);
|
|
43
41
|
}
|
|
44
42
|
function C(e) {
|
|
45
|
-
|
|
43
|
+
j(() => {
|
|
46
44
|
const t = document.getElementById(h(e));
|
|
47
45
|
t == null || t.focus();
|
|
48
46
|
});
|
|
@@ -81,7 +79,7 @@ const ae = /* @__PURE__ */ D({
|
|
|
81
79
|
function B(e) {
|
|
82
80
|
s.value = s.value.filter((t) => t.id !== e);
|
|
83
81
|
}
|
|
84
|
-
return
|
|
82
|
+
return N(Y, {
|
|
85
83
|
variant: r(() => v.variant),
|
|
86
84
|
activeId: l,
|
|
87
85
|
tabsetId: m,
|
|
@@ -89,21 +87,21 @@ const ae = /* @__PURE__ */ D({
|
|
|
89
87
|
unregister: B,
|
|
90
88
|
isActive: x,
|
|
91
89
|
activate: y
|
|
92
|
-
}),
|
|
90
|
+
}), V(() => {
|
|
93
91
|
var t;
|
|
94
92
|
if (!f.value) return;
|
|
95
93
|
const e = (t = _.default) == null ? void 0 : t.call(_);
|
|
96
94
|
e && e.length > 0 && console.warn(
|
|
97
95
|
"[PaTabs] cannot mix array API (`tabs` prop) with composition API (<PaTab> children). Pick one — the array API wins."
|
|
98
96
|
);
|
|
99
|
-
}), (e, t) => (c(), p("div",
|
|
97
|
+
}), (e, t) => (c(), p("div", G, [
|
|
100
98
|
u("div", {
|
|
101
99
|
class: w(["pa-tabs__strip", `pa-tabs__strip--variant-${b.variant}`]),
|
|
102
100
|
role: "tablist",
|
|
103
101
|
"aria-label": b.label,
|
|
104
102
|
"aria-orientation": "horizontal"
|
|
105
103
|
}, [
|
|
106
|
-
(c(!0), p(
|
|
104
|
+
(c(!0), p(F, null, H(d.value, (a) => (c(), p("button", {
|
|
107
105
|
key: a.id,
|
|
108
106
|
type: "button",
|
|
109
107
|
role: "tab",
|
|
@@ -121,17 +119,17 @@ const ae = /* @__PURE__ */ D({
|
|
|
121
119
|
class: "pa-tabs__tab-accent",
|
|
122
120
|
"aria-hidden": "true"
|
|
123
121
|
}, null, -1)),
|
|
124
|
-
u("span",
|
|
125
|
-
a.icon ? (c(),
|
|
122
|
+
u("span", Q, [
|
|
123
|
+
a.icon ? (c(), M(q, {
|
|
126
124
|
key: 0,
|
|
127
125
|
name: a.icon,
|
|
128
126
|
size: "sm"
|
|
129
127
|
}, null, 8, ["name"])) : k("", !0),
|
|
130
|
-
u("span",
|
|
128
|
+
u("span", U, R(a.label), 1)
|
|
131
129
|
])
|
|
132
|
-
], 42,
|
|
133
|
-
], 10,
|
|
134
|
-
u("div",
|
|
130
|
+
], 42, O))), 128))
|
|
131
|
+
], 10, J),
|
|
132
|
+
u("div", W, [
|
|
135
133
|
f.value && o.value ? (c(), p("div", {
|
|
136
134
|
key: 0,
|
|
137
135
|
role: "tabpanel",
|
|
@@ -141,14 +139,14 @@ const ae = /* @__PURE__ */ D({
|
|
|
141
139
|
tabindex: "0"
|
|
142
140
|
}, [
|
|
143
141
|
P(e.$slots, `panel-${o.value.id}`, { tab: o.value }, void 0, !0)
|
|
144
|
-
], 8,
|
|
142
|
+
], 8, X)) : k("", !0),
|
|
145
143
|
f.value ? k("", !0) : P(e.$slots, "default", { key: 1 }, void 0, !0)
|
|
146
144
|
])
|
|
147
145
|
]));
|
|
148
146
|
}
|
|
149
147
|
});
|
|
150
148
|
export {
|
|
151
|
-
|
|
149
|
+
Y as PaTabsKey,
|
|
152
150
|
ae as default
|
|
153
151
|
};
|
|
154
152
|
//# sourceMappingURL=PaTabs.vue2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaTabs.vue2.js","sources":["../../../src/components/PaTabs/PaTabs.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { PaIconName } from '../PaIcon'\n\nexport type PaTabsVariant = 'line' | 'background'\n\nexport interface PaTabsTab {\n id: string\n label: string\n icon?: PaIconName\n disabled?: boolean\n}\n\nexport interface PaTabsProps {\n tabs?: PaTabsTab[]\n activeId?: string\n variant?: PaTabsVariant\n label?: string\n}\n\nexport interface PaTabsContext {\n variant: ComputedRef<PaTabsVariant>\n activeId: ComputedRef<string | undefined>\n tabsetId: string\n register(descriptor: PaTabsTab): void\n unregister(id: string): void\n isActive(id: string): boolean\n activate(id: string): void\n}\n\nexport const PaTabsKey: InjectionKey<PaTabsContext> = Symbol('PaTabsKey')\n\nlet tabsetCounter = 0\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, provide, ref, useSlots } from 'vue'\nimport PaIcon from '../PaIcon/PaIcon.vue'\n\nconst props = withDefaults(defineProps<PaTabsProps>(), {\n tabs: () => [],\n activeId: undefined,\n variant: 'line',\n label: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'update:activeId', id: string): void\n}>()\n\nconst slots = useSlots()\nconst tabsetId = `pa-tabs-${++tabsetCounter}`\n\nconst registry = ref<PaTabsTab[]>([])\n\nconst usingArrayApi = computed(() => (props.tabs ?? []).length > 0)\n\nconst effectiveTabs = computed<PaTabsTab[]>(() =>\n usingArrayApi.value ? props.tabs ?? [] : registry.value,\n)\n\nconst resolvedActiveId = computed<string | undefined>(() => {\n const list = effectiveTabs.value\n const wanted = props.activeId\n if (wanted) {\n const match = list.find((t) => t.id === wanted)\n if (match && !match.disabled) return match.id\n }\n return list.find((t) => !t.disabled)?.id\n})\n\nconst activePanelTab = computed<PaTabsTab | undefined>(() =>\n effectiveTabs.value.find((t) => t.id === resolvedActiveId.value),\n)\n\nfunction tabId(id: string) {\n return `${tabsetId}__tab-${id}`\n}\n\nfunction panelId(id: string) {\n return `${tabsetId}__panel-${id}`\n}\n\nfunction isActive(id: string) {\n return resolvedActiveId.value === id\n}\n\nfunction activate(id: string) {\n const tab = effectiveTabs.value.find((t) => t.id === id)\n if (!tab || tab.disabled) return\n if (tab.id === resolvedActiveId.value) return\n emit('update:activeId', tab.id)\n}\n\nfunction onTabClick(tab: PaTabsTab) {\n activate(tab.id)\n}\n\nfunction focusTab(id: string) {\n nextTick(() => {\n const el = document.getElementById(tabId(id)) as HTMLButtonElement | null\n el?.focus()\n })\n}\n\nfunction onTabKeyDown(event: KeyboardEvent, currentTab: PaTabsTab) {\n const enabled = effectiveTabs.value.filter((t) => !t.disabled)\n if (enabled.length === 0) return\n\n const idx = enabled.findIndex((t) => t.id === currentTab.id)\n let target: PaTabsTab | undefined\n\n switch (event.key) {\n case 'ArrowRight':\n target = enabled[(idx + 1 + enabled.length) % enabled.length]\n break\n case 'ArrowLeft':\n target = enabled[(idx - 1 + enabled.length) % enabled.length]\n break\n case 'Home':\n target = enabled[0]\n break\n case 'End':\n target = enabled[enabled.length - 1]\n break\n case ' ':\n case 'Enter':\n event.preventDefault()\n activate(currentTab.id)\n return\n default:\n return\n }\n\n event.preventDefault()\n if (!target) return\n if (target.id !== resolvedActiveId.value) {\n emit('update:activeId', target.id)\n }\n focusTab(target.id)\n}\n\nfunction register(descriptor: PaTabsTab) {\n const existing = registry.value.findIndex((t) => t.id === descriptor.id)\n if (existing >= 0) {\n registry.value.splice(existing, 1, descriptor)\n } else {\n registry.value.push(descriptor)\n }\n}\n\nfunction unregister(id: string) {\n registry.value = registry.value.filter((t) => t.id !== id)\n}\n\nprovide(PaTabsKey, {\n variant: computed(() => props.variant),\n activeId: resolvedActiveId,\n tabsetId,\n register,\n unregister,\n isActive,\n activate,\n})\n\nonMounted(() => {\n if (!usingArrayApi.value) return\n const def = slots.default?.()\n if (def && def.length > 0) {\n console.warn(\n '[PaTabs] cannot mix array API (`tabs` prop) with composition API (<PaTab> children). Pick one — the array API wins.',\n )\n }\n})\n</script>\n\n<template>\n <div class=\"pa-tabs\">\n <div class=\"pa-tabs__strip\"\n :class=\"`pa-tabs__strip--variant-${variant}`\"\n role=\"tablist\"\n :aria-label=\"label\"\n aria-orientation=\"horizontal\">\n <button v-for=\"tab in effectiveTabs\"\n :key=\"tab.id\"\n type=\"button\"\n role=\"tab\"\n class=\"pa-tabs__tab\"\n :class=\"`pa-tabs__tab--variant-${variant}`\"\n :id=\"tabId(tab.id)\"\n :aria-selected=\"tab.id === resolvedActiveId\"\n :aria-controls=\"panelId(tab.id)\"\n :aria-disabled=\"tab.disabled || undefined\"\n :tabindex=\"tab.id === resolvedActiveId ? 0 : -1\"\n :disabled=\"tab.disabled\"\n @click=\"onTabClick(tab)\"\n @keydown=\"onTabKeyDown($event, tab)\">\n <span class=\"pa-tabs__tab-accent\"\n aria-hidden=\"true\" />\n <span class=\"pa-tabs__tab-content\">\n <PaIcon v-if=\"tab.icon\"\n :name=\"tab.icon\"\n size=\"sm\" />\n <span class=\"pa-tabs__tab-label\">{{ tab.label }}</span>\n </span>\n </button>\n </div>\n <div class=\"pa-tabs__panels\">\n <div v-if=\"usingArrayApi && activePanelTab\"\n role=\"tabpanel\"\n class=\"pa-tabs__panel\"\n :id=\"panelId(activePanelTab.id)\"\n :aria-labelledby=\"tabId(activePanelTab.id)\"\n tabindex=\"0\">\n <slot :name=\"`panel-${activePanelTab.id}`\"\n :tab=\"activePanelTab\" />\n </div>\n <slot v-if=\"!usingArrayApi\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.pa-tabs {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: var(--pa-font-family-base);\n}\n\n.pa-tabs__strip {\n display: flex;\n flex-direction: row;\n justify-content: center;\n}\n\n.pa-tabs__strip--variant-line {\n align-items: stretch;\n}\n\n.pa-tabs__strip--variant-background {\n gap: 2px;\n padding: 0 1px;\n}\n\n.pa-tabs__tab {\n background: transparent;\n border: 0;\n margin: 0;\n padding: 0;\n font-family: inherit;\n font-size: var(--pa-font-label-sm-size);\n line-height: var(--pa-font-label-sm-line-height);\n font-weight: var(--pa-font-label-sm-weight);\n color: var(--pa-color-text-secondary-gray);\n cursor: pointer;\n display: flex;\n flex-direction: column;\n}\n\n.pa-tabs__tab[aria-selected='true'] {\n font-weight: 600;\n}\n\n.pa-tabs__tab:hover:not([aria-disabled='true']) {\n color: var(--pa-color-primary-hover);\n}\n\n.pa-tabs__tab[aria-disabled='true'] {\n cursor: not-allowed;\n color: var(--pa-color-text-disabled-gray);\n}\n\n.pa-tabs__tab:focus-visible {\n outline: var(--pa-border-xs) solid var(--pa-color-primary-focus-border);\n outline-offset: 0;\n}\n\n.pa-tabs__tab-content {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.pa-tabs__tab-content :deep(svg) {\n width: 14px;\n height: 14px;\n}\n\n/* — line variant — */\n\n.pa-tabs__tab--variant-line .pa-tabs__tab-content {\n gap: 8px;\n padding: 14px 32px 9px;\n order: 1;\n}\n\n.pa-tabs__tab--variant-line .pa-tabs__tab-accent {\n height: 3px;\n width: 100%;\n background: var(--pa-color-bg-primary-light-50);\n border-radius: 4px;\n order: 2;\n}\n\n.pa-tabs__tab--variant-line[aria-selected='true'] .pa-tabs__tab-accent {\n background: var(--pa-color-primary);\n}\n\n.pa-tabs__tab--variant-line:hover:not([aria-disabled='true']) .pa-tabs__tab-accent {\n background: var(--pa-color-primary-hover);\n}\n\n.pa-tabs__tab--variant-line[aria-disabled='true'] .pa-tabs__tab-accent {\n background: var(--pa-color-bg-secondary-light-50);\n}\n\n/* — background variant — */\n\n.pa-tabs__tab--variant-background {\n background: var(--pa-color-bg-primary-light-40);\n border-radius: 2px;\n}\n\n.pa-tabs__tab--variant-background .pa-tabs__tab-accent {\n height: 3px;\n width: 100%;\n background: transparent;\n border-radius: 4px;\n order: 1;\n}\n\n.pa-tabs__tab--variant-background .pa-tabs__tab-content {\n gap: 12px;\n padding: 6px 32px;\n order: 2;\n}\n\n.pa-tabs__tab--variant-background[aria-selected='true'] {\n background: var(--pa-color-bg-white);\n}\n\n.pa-tabs__tab--variant-background[aria-selected='true'] .pa-tabs__tab-accent {\n background: var(--pa-color-primary);\n}\n\n.pa-tabs__tab--variant-background:hover:not([aria-disabled='true']):not([aria-selected='true']) .pa-tabs__tab-accent {\n background: var(--pa-color-primary-hover);\n}\n\n.pa-tabs__tab--variant-background[aria-disabled='true'] {\n background: var(--pa-color-bg-disabled-gray);\n}\n\n/* — panel — */\n\n.pa-tabs__panel:focus-visible {\n outline: var(--pa-border-xs) solid var(--pa-color-primary-focus-border);\n outline-offset: 2px;\n}\n</style>\n"],"names":["PaTabsKey","tabsetCounter","props","__props","emit","__emit","slots","useSlots","tabsetId","registry","ref","usingArrayApi","computed","effectiveTabs","resolvedActiveId","list","wanted","match","t","_a","activePanelTab","tabId","id","panelId","isActive","activate","tab","onTabClick","focusTab","nextTick","el","onTabKeyDown","event","currentTab","enabled","idx","target","register","descriptor","existing","unregister","provide","onMounted","def","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_normalizeClass","_Fragment","_renderList","$event","_hoisted_4","_createBlock","PaIcon","_hoisted_5","_toDisplayString","_hoisted_6","_renderSlot","_ctx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PaTabs.vue2.js","sources":["../../../src/components/PaTabs/PaTabs.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { PaIconName } from '../PaIcon'\n\nexport type PaTabsVariant = 'line' | 'background'\n\nexport interface PaTabsTab {\n id: string\n label: string\n icon?: PaIconName\n disabled?: boolean\n}\n\nexport interface PaTabsProps {\n tabs?: PaTabsTab[]\n activeId?: string\n variant?: PaTabsVariant\n label?: string\n}\n\nexport interface PaTabsContext {\n variant: ComputedRef<PaTabsVariant>\n activeId: ComputedRef<string | undefined>\n tabsetId: string\n register(descriptor: PaTabsTab): void\n unregister(id: string): void\n isActive(id: string): boolean\n activate(id: string): void\n}\n\nexport const PaTabsKey: InjectionKey<PaTabsContext> = Symbol('PaTabsKey')\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, provide, ref, useId, useSlots } from 'vue'\nimport PaIcon from '../PaIcon/PaIcon.vue'\n\nconst props = withDefaults(defineProps<PaTabsProps>(), {\n tabs: () => [],\n activeId: undefined,\n variant: 'line',\n label: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'update:activeId', id: string): void\n}>()\n\nconst slots = useSlots()\nconst tabsetId = `pa-tabs-${useId()}`\n\nconst registry = ref<PaTabsTab[]>([])\n\nconst usingArrayApi = computed(() => (props.tabs ?? []).length > 0)\n\nconst effectiveTabs = computed<PaTabsTab[]>(() =>\n usingArrayApi.value ? props.tabs ?? [] : registry.value,\n)\n\nconst resolvedActiveId = computed<string | undefined>(() => {\n const list = effectiveTabs.value\n const wanted = props.activeId\n if (wanted) {\n const match = list.find((t) => t.id === wanted)\n if (match && !match.disabled) return match.id\n }\n return list.find((t) => !t.disabled)?.id\n})\n\nconst activePanelTab = computed<PaTabsTab | undefined>(() =>\n effectiveTabs.value.find((t) => t.id === resolvedActiveId.value),\n)\n\nfunction tabId(id: string) {\n return `${tabsetId}__tab-${id}`\n}\n\nfunction panelId(id: string) {\n return `${tabsetId}__panel-${id}`\n}\n\nfunction isActive(id: string) {\n return resolvedActiveId.value === id\n}\n\nfunction activate(id: string) {\n const tab = effectiveTabs.value.find((t) => t.id === id)\n if (!tab || tab.disabled) return\n if (tab.id === resolvedActiveId.value) return\n emit('update:activeId', tab.id)\n}\n\nfunction onTabClick(tab: PaTabsTab) {\n activate(tab.id)\n}\n\nfunction focusTab(id: string) {\n nextTick(() => {\n const el = document.getElementById(tabId(id)) as HTMLButtonElement | null\n el?.focus()\n })\n}\n\nfunction onTabKeyDown(event: KeyboardEvent, currentTab: PaTabsTab) {\n const enabled = effectiveTabs.value.filter((t) => !t.disabled)\n if (enabled.length === 0) return\n\n const idx = enabled.findIndex((t) => t.id === currentTab.id)\n let target: PaTabsTab | undefined\n\n switch (event.key) {\n case 'ArrowRight':\n target = enabled[(idx + 1 + enabled.length) % enabled.length]\n break\n case 'ArrowLeft':\n target = enabled[(idx - 1 + enabled.length) % enabled.length]\n break\n case 'Home':\n target = enabled[0]\n break\n case 'End':\n target = enabled[enabled.length - 1]\n break\n case ' ':\n case 'Enter':\n event.preventDefault()\n activate(currentTab.id)\n return\n default:\n return\n }\n\n event.preventDefault()\n if (!target) return\n if (target.id !== resolvedActiveId.value) {\n emit('update:activeId', target.id)\n }\n focusTab(target.id)\n}\n\nfunction register(descriptor: PaTabsTab) {\n const existing = registry.value.findIndex((t) => t.id === descriptor.id)\n if (existing >= 0) {\n registry.value.splice(existing, 1, descriptor)\n } else {\n registry.value.push(descriptor)\n }\n}\n\nfunction unregister(id: string) {\n registry.value = registry.value.filter((t) => t.id !== id)\n}\n\nprovide(PaTabsKey, {\n variant: computed(() => props.variant),\n activeId: resolvedActiveId,\n tabsetId,\n register,\n unregister,\n isActive,\n activate,\n})\n\nonMounted(() => {\n if (!usingArrayApi.value) return\n const def = slots.default?.()\n if (def && def.length > 0) {\n console.warn(\n '[PaTabs] cannot mix array API (`tabs` prop) with composition API (<PaTab> children). Pick one — the array API wins.',\n )\n }\n})\n</script>\n\n<template>\n <div class=\"pa-tabs\">\n <div class=\"pa-tabs__strip\"\n :class=\"`pa-tabs__strip--variant-${variant}`\"\n role=\"tablist\"\n :aria-label=\"label\"\n aria-orientation=\"horizontal\">\n <button v-for=\"tab in effectiveTabs\"\n :key=\"tab.id\"\n type=\"button\"\n role=\"tab\"\n class=\"pa-tabs__tab\"\n :class=\"`pa-tabs__tab--variant-${variant}`\"\n :id=\"tabId(tab.id)\"\n :aria-selected=\"tab.id === resolvedActiveId\"\n :aria-controls=\"panelId(tab.id)\"\n :aria-disabled=\"tab.disabled || undefined\"\n :tabindex=\"tab.id === resolvedActiveId ? 0 : -1\"\n :disabled=\"tab.disabled\"\n @click=\"onTabClick(tab)\"\n @keydown=\"onTabKeyDown($event, tab)\">\n <span class=\"pa-tabs__tab-accent\"\n aria-hidden=\"true\" />\n <span class=\"pa-tabs__tab-content\">\n <PaIcon v-if=\"tab.icon\"\n :name=\"tab.icon\"\n size=\"sm\" />\n <span class=\"pa-tabs__tab-label\">{{ tab.label }}</span>\n </span>\n </button>\n </div>\n <div class=\"pa-tabs__panels\">\n <div v-if=\"usingArrayApi && activePanelTab\"\n role=\"tabpanel\"\n class=\"pa-tabs__panel\"\n :id=\"panelId(activePanelTab.id)\"\n :aria-labelledby=\"tabId(activePanelTab.id)\"\n tabindex=\"0\">\n <slot :name=\"`panel-${activePanelTab.id}`\"\n :tab=\"activePanelTab\" />\n </div>\n <slot v-if=\"!usingArrayApi\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.pa-tabs {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: var(--pa-font-family-base);\n}\n\n.pa-tabs__strip {\n display: flex;\n flex-direction: row;\n justify-content: center;\n}\n\n.pa-tabs__strip--variant-line {\n align-items: stretch;\n}\n\n.pa-tabs__strip--variant-background {\n gap: 2px;\n padding: 0 1px;\n}\n\n.pa-tabs__tab {\n background: transparent;\n border: 0;\n margin: 0;\n padding: 0;\n font-family: inherit;\n font-size: var(--pa-font-label-sm-size);\n line-height: var(--pa-font-label-sm-line-height);\n font-weight: var(--pa-font-label-sm-weight);\n color: var(--pa-color-text-secondary-gray);\n cursor: pointer;\n display: flex;\n flex-direction: column;\n}\n\n.pa-tabs__tab[aria-selected='true'] {\n font-weight: 600;\n}\n\n.pa-tabs__tab:hover:not([aria-disabled='true']) {\n color: var(--pa-color-primary-hover);\n}\n\n.pa-tabs__tab[aria-disabled='true'] {\n cursor: not-allowed;\n color: var(--pa-color-text-disabled-gray);\n}\n\n.pa-tabs__tab:focus-visible {\n outline: var(--pa-border-xs) solid var(--pa-color-primary-focus-border);\n outline-offset: 0;\n}\n\n.pa-tabs__tab-content {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.pa-tabs__tab-content :deep(svg) {\n width: 14px;\n height: 14px;\n}\n\n/* — line variant — */\n\n.pa-tabs__tab--variant-line .pa-tabs__tab-content {\n gap: 8px;\n padding: 14px 32px 9px;\n order: 1;\n}\n\n.pa-tabs__tab--variant-line .pa-tabs__tab-accent {\n height: 3px;\n width: 100%;\n background: var(--pa-color-bg-primary-light-50);\n border-radius: 4px;\n order: 2;\n}\n\n.pa-tabs__tab--variant-line[aria-selected='true'] .pa-tabs__tab-accent {\n background: var(--pa-color-primary);\n}\n\n.pa-tabs__tab--variant-line:hover:not([aria-disabled='true']) .pa-tabs__tab-accent {\n background: var(--pa-color-primary-hover);\n}\n\n.pa-tabs__tab--variant-line[aria-disabled='true'] .pa-tabs__tab-accent {\n background: var(--pa-color-bg-secondary-light-50);\n}\n\n/* — background variant — */\n\n.pa-tabs__tab--variant-background {\n background: var(--pa-color-bg-primary-light-40);\n border-radius: 2px;\n}\n\n.pa-tabs__tab--variant-background .pa-tabs__tab-accent {\n height: 3px;\n width: 100%;\n background: transparent;\n border-radius: 4px;\n order: 1;\n}\n\n.pa-tabs__tab--variant-background .pa-tabs__tab-content {\n gap: 12px;\n padding: 6px 32px;\n order: 2;\n}\n\n.pa-tabs__tab--variant-background[aria-selected='true'] {\n background: var(--pa-color-bg-white);\n}\n\n.pa-tabs__tab--variant-background[aria-selected='true'] .pa-tabs__tab-accent {\n background: var(--pa-color-primary);\n}\n\n.pa-tabs__tab--variant-background:hover:not([aria-disabled='true']):not([aria-selected='true']) .pa-tabs__tab-accent {\n background: var(--pa-color-primary-hover);\n}\n\n.pa-tabs__tab--variant-background[aria-disabled='true'] {\n background: var(--pa-color-bg-disabled-gray);\n}\n\n/* — panel — */\n\n.pa-tabs__panel:focus-visible {\n outline: var(--pa-border-xs) solid var(--pa-color-primary-focus-border);\n outline-offset: 2px;\n}\n</style>\n"],"names":["PaTabsKey","props","__props","emit","__emit","slots","useSlots","tabsetId","useId","registry","ref","usingArrayApi","computed","effectiveTabs","resolvedActiveId","list","wanted","match","t","_a","activePanelTab","tabId","id","panelId","isActive","activate","tab","onTabClick","focusTab","nextTick","el","onTabKeyDown","event","currentTab","enabled","idx","target","register","descriptor","existing","unregister","provide","onMounted","def","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_normalizeClass","_Fragment","_renderList","$event","_hoisted_4","_createBlock","PaIcon","_hoisted_5","_toDisplayString","_hoisted_6","_renderSlot","_ctx"],"mappings":"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"}
|
|
@@ -16,14 +16,13 @@ export interface PaTextareaProps {
|
|
|
16
16
|
maxlength?: number;
|
|
17
17
|
minlength?: number;
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
type __VLS_Props = PaTextareaProps;
|
|
20
|
+
type __VLS_PublicProps = __VLS_Props & {
|
|
21
21
|
modelValue?: string;
|
|
22
|
-
}
|
|
22
|
+
};
|
|
23
|
+
declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
23
24
|
"update:modelValue": (value: string) => any;
|
|
24
|
-
}, string, import("vue").PublicProps, Readonly<
|
|
25
|
-
modelValue?: string;
|
|
26
|
-
}> & Readonly<{
|
|
25
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
27
26
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
28
27
|
}>, {
|
|
29
28
|
error: string | boolean;
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { nextPaTextareaId as f } from "./PaTextarea.vue2.js";
|
|
1
|
+
import a from "./PaTextarea.vue2.js";
|
|
3
2
|
/* empty css */
|
|
4
|
-
import
|
|
5
|
-
const m = /* @__PURE__ */ a
|
|
3
|
+
import o from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const m = /* @__PURE__ */ o(a, [["__scopeId", "data-v-4146adc7"]]);
|
|
6
5
|
export {
|
|
7
|
-
m as default
|
|
8
|
-
f as nextPaTextareaId
|
|
6
|
+
m as default
|
|
9
7
|
};
|
|
10
8
|
//# sourceMappingURL=PaTextarea.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaTextarea.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PaTextarea.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,19 +1,14 @@
|
|
|
1
|
-
import { defineComponent as q, useModel as B, computed as t, openBlock as l, createElementBlock as r, normalizeClass as m, createTextVNode as
|
|
2
|
-
const
|
|
1
|
+
import { defineComponent as q, useModel as B, useId as k, computed as t, openBlock as l, createElementBlock as r, normalizeClass as m, createTextVNode as V, toDisplayString as u, createCommentVNode as o, withDirectives as M, createElementVNode as T, vModelText as w, mergeModels as C } from "vue";
|
|
2
|
+
const I = ["for"], z = {
|
|
3
3
|
key: 0,
|
|
4
4
|
class: "pa-textarea__required",
|
|
5
5
|
"aria-hidden": "true"
|
|
6
|
-
},
|
|
6
|
+
}, N = ["id", "rows", "placeholder", "disabled", "readonly", "required", "name", "autocomplete", "maxlength", "minlength", "aria-required", "aria-invalid", "aria-describedby"], $ = {
|
|
7
7
|
key: 1,
|
|
8
8
|
class: "pa-textarea__footer"
|
|
9
|
-
},
|
|
10
|
-
let A = 0;
|
|
11
|
-
function D() {
|
|
12
|
-
return `pa-textarea-${++A}`;
|
|
13
|
-
}
|
|
14
|
-
const S = /* @__PURE__ */ q({
|
|
9
|
+
}, A = ["id"], S = /* @__PURE__ */ q({
|
|
15
10
|
__name: "PaTextarea",
|
|
16
|
-
props: /* @__PURE__ */
|
|
11
|
+
props: /* @__PURE__ */ C({
|
|
17
12
|
size: { default: "sm" },
|
|
18
13
|
rows: { default: 4 },
|
|
19
14
|
label: {},
|
|
@@ -35,7 +30,7 @@ const S = /* @__PURE__ */ q({
|
|
|
35
30
|
}),
|
|
36
31
|
emits: ["update:modelValue"],
|
|
37
32
|
setup(e) {
|
|
38
|
-
const a = e, n = B(e, "modelValue"), g =
|
|
33
|
+
const a = e, n = B(e, "modelValue"), g = `pa-textarea-${k()}`, s = t(() => a.id ?? g), v = t(() => `${s.value}-msg`), d = t(() => !!a.error), x = t(() => a.valid && !d.value), f = t(
|
|
39
34
|
() => typeof a.error == "string" && a.error.length > 0 ? a.error : null
|
|
40
35
|
), y = t(
|
|
41
36
|
() => !d.value && !x.value && a.helperText ? a.helperText : null
|
|
@@ -44,7 +39,7 @@ const S = /* @__PURE__ */ q({
|
|
|
44
39
|
), b = t(
|
|
45
40
|
() => c.value && n.value.length >= a.maxlength
|
|
46
41
|
);
|
|
47
|
-
return (
|
|
42
|
+
return (D, h) => (l(), r("div", {
|
|
48
43
|
class: m([
|
|
49
44
|
"pa-textarea",
|
|
50
45
|
`pa-textarea--${e.size}`,
|
|
@@ -61,10 +56,10 @@ const S = /* @__PURE__ */ q({
|
|
|
61
56
|
for: s.value,
|
|
62
57
|
class: "pa-textarea__label"
|
|
63
58
|
}, [
|
|
64
|
-
|
|
65
|
-
e.required ? (l(), r("span",
|
|
66
|
-
], 8,
|
|
67
|
-
T(
|
|
59
|
+
V(u(e.label), 1),
|
|
60
|
+
e.required ? (l(), r("span", z, "*")) : o("", !0)
|
|
61
|
+
], 8, I)) : o("", !0),
|
|
62
|
+
M(T("textarea", {
|
|
68
63
|
id: s.value,
|
|
69
64
|
"onUpdate:modelValue": h[0] || (h[0] = (p) => n.value = p),
|
|
70
65
|
rows: e.rows,
|
|
@@ -80,15 +75,15 @@ const S = /* @__PURE__ */ q({
|
|
|
80
75
|
"aria-invalid": d.value || void 0,
|
|
81
76
|
"aria-describedby": i.value ? v.value : void 0,
|
|
82
77
|
class: "pa-textarea__control"
|
|
83
|
-
}, null, 8,
|
|
84
|
-
[
|
|
78
|
+
}, null, 8, N), [
|
|
79
|
+
[w, n.value]
|
|
85
80
|
]),
|
|
86
|
-
i.value || c.value ? (l(), r("div",
|
|
81
|
+
i.value || c.value ? (l(), r("div", $, [
|
|
87
82
|
i.value ? (l(), r("div", {
|
|
88
83
|
key: 0,
|
|
89
84
|
id: v.value,
|
|
90
85
|
class: m(["pa-textarea__message", { "pa-textarea__message--error": d.value }])
|
|
91
|
-
}, u(i.value), 11,
|
|
86
|
+
}, u(i.value), 11, A)) : o("", !0),
|
|
92
87
|
c.value ? (l(), r("div", {
|
|
93
88
|
key: 1,
|
|
94
89
|
class: m(["pa-textarea__counter", { "pa-textarea__counter--at-limit": b.value }])
|
|
@@ -98,7 +93,6 @@ const S = /* @__PURE__ */ q({
|
|
|
98
93
|
}
|
|
99
94
|
});
|
|
100
95
|
export {
|
|
101
|
-
S as default
|
|
102
|
-
D as nextPaTextareaId
|
|
96
|
+
S as default
|
|
103
97
|
};
|
|
104
98
|
//# sourceMappingURL=PaTextarea.vue2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaTextarea.vue2.js","sources":["../../../src/components/PaTextarea/PaTextarea.vue"],"sourcesContent":["<script
|
|
1
|
+
{"version":3,"file":"PaTextarea.vue2.js","sources":["../../../src/components/PaTextarea/PaTextarea.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useId } from 'vue'\n\nexport type PaTextareaSize = 'sm' | 'lg'\n\nexport interface PaTextareaProps {\n size?: PaTextareaSize\n rows?: number\n label?: string\n placeholder?: string\n disabled?: boolean\n id?: string\n helperText?: string\n error?: string | boolean\n valid?: boolean\n required?: boolean\n readonly?: boolean\n name?: string\n autocomplete?: string\n maxlength?: number\n minlength?: number\n}\n\nconst props = withDefaults(defineProps<PaTextareaProps>(), {\n size: 'sm',\n rows: 4,\n disabled: false,\n error: false,\n valid: false,\n required: false,\n readonly: false,\n})\n\nconst model = defineModel<string>({ default: '' })\n\nconst generatedId = `pa-textarea-${useId()}`\nconst inputId = computed(() => props.id ?? generatedId)\nconst messageId = computed(() => `${inputId.value}-msg`)\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\nconst hasCounter = computed(\n () => typeof props.maxlength === 'number' && props.maxlength > 0,\n)\nconst atLimit = computed(\n () => hasCounter.value && model.value.length >= (props.maxlength as number),\n)\n</script>\n\n<template>\n <div\n :class=\"[\n 'pa-textarea',\n `pa-textarea--${size}`,\n {\n 'pa-textarea--disabled': disabled,\n 'pa-textarea--readonly': readonly,\n 'pa-textarea--error': errorActive,\n 'pa-textarea--valid': validActive,\n },\n ]\"\n >\n <label v-if=\"label\" :for=\"inputId\" class=\"pa-textarea__label\">\n {{ label }}<span v-if=\"required\" class=\"pa-textarea__required\" aria-hidden=\"true\">*</span>\n </label>\n <textarea\n :id=\"inputId\"\n v-model=\"model\"\n :rows=\"rows\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n :name=\"name\"\n :autocomplete=\"autocomplete\"\n :maxlength=\"maxlength\"\n :minlength=\"minlength\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"errorActive || undefined\"\n :aria-describedby=\"message ? messageId : undefined\"\n class=\"pa-textarea__control\"\n />\n <div v-if=\"message || hasCounter\" class=\"pa-textarea__footer\">\n <div\n v-if=\"message\"\n :id=\"messageId\"\n :class=\"['pa-textarea__message', { 'pa-textarea__message--error': errorActive }]\"\n >\n {{ message }}\n </div>\n <div\n v-if=\"hasCounter\"\n :class=\"['pa-textarea__counter', { 'pa-textarea__counter--at-limit': atLimit }]\"\n >\n {{ model.length }} / {{ maxlength }}\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.pa-textarea {\n display: flex;\n flex-direction: column;\n gap: var(--pa-space-2xs);\n font-family: var(--pa-font-family-base);\n}\n\n.pa-textarea__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-textarea__required {\n margin-left: var(--pa-space-3xs);\n color: var(--pa-color-error);\n}\n\n.pa-textarea__control {\n box-sizing: border-box;\n width: 100%;\n margin: 0;\n padding: var(--pa-space-sm);\n background: var(--pa-color-bg-white);\n border: var(--pa-border-xs) solid var(--pa-color-bg-secondary-light-50);\n border-radius: var(--pa-radius-smooth);\n color: var(--pa-color-text-black);\n font-family: inherit;\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 resize: vertical;\n transition: border-color 120ms ease, background-color 120ms ease;\n}\n\n.pa-textarea__control::placeholder {\n color: var(--pa-color-text-disabled-gray);\n}\n\n.pa-textarea__control:hover {\n border-color: var(--pa-color-neutral-gray);\n}\n\n.pa-textarea__control:focus { outline: none; }\n\n.pa-textarea__control:focus-visible {\n outline: 3px solid var(--pa-color-primary-focus-border);\n outline-offset: 0;\n border-color: var(--pa-color-primary);\n}\n\n.pa-textarea--lg .pa-textarea__label {\n font-size: var(--pa-font-label-md-size);\n line-height: var(--pa-font-label-md-line-height);\n font-weight: var(--pa-font-label-md-weight);\n}\n\n.pa-textarea--disabled .pa-textarea__control {\n background: var(--pa-color-bg-disabled-gray);\n color: var(--pa-color-text-disabled-gray);\n cursor: not-allowed;\n}\n\n.pa-textarea--disabled .pa-textarea__control:hover {\n border-color: var(--pa-color-bg-secondary-light-50);\n}\n\n.pa-textarea--disabled .pa-textarea__label {\n color: var(--pa-color-text-disabled-gray);\n}\n\n.pa-textarea--readonly .pa-textarea__control {\n background: var(--pa-color-bg-primary-light-40);\n}\n\n.pa-textarea--error .pa-textarea__control {\n border-color: var(--pa-color-error);\n border-width: var(--pa-border-sm);\n}\n.pa-textarea--error .pa-textarea__control:hover {\n border-color: var(--pa-color-error);\n}\n\n.pa-textarea--valid .pa-textarea__control {\n border-color: var(--pa-color-success);\n border-width: var(--pa-border-sm);\n}\n.pa-textarea--valid .pa-textarea__control:hover {\n border-color: var(--pa-color-success);\n}\n\n.pa-textarea__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-textarea__message--error {\n color: var(--pa-color-error);\n}\n\n.pa-textarea__footer {\n display: flex;\n align-items: baseline;\n gap: var(--pa-space-sm);\n}\n\n.pa-textarea__counter {\n margin-left: auto;\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 font-variant-numeric: tabular-nums;\n}\n\n.pa-textarea__counter--at-limit {\n color: var(--pa-color-error);\n}\n</style>\n"],"names":["props","__props","model","_useModel","generatedId","useId","inputId","computed","messageId","errorActive","validActive","errorMessage","helperMessage","message","hasCounter","atLimit","_createElementBlock","_normalizeClass","_hoisted_2","_createElementVNode","$event","_openBlock","_hoisted_4","_hoisted_5","_toDisplayString"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,UAAMA,IAAQC,GAURC,IAAQC,EAAmBF,GAAA,YAAgB,GAE3CG,IAAc,eAAeC,EAAA,CAAO,IACpCC,IAAUC,EAAS,MAAMP,EAAM,MAAMI,CAAW,GAChDI,IAAYD,EAAS,MAAM,GAAGD,EAAQ,KAAK,MAAM,GAEjDG,IAAcF,EAAS,MAAM,EAAQP,EAAM,KAAM,GACjDU,IAAcH,EAAS,MAAMP,EAAM,SAAS,CAACS,EAAY,KAAK,GAE9DE,IAAeJ;AAAA,MAAS,MAC5B,OAAOP,EAAM,SAAU,YAAYA,EAAM,MAAM,SAAS,IAAIA,EAAM,QAAQ;AAAA,IAAA,GAEtEY,IAAgBL;AAAA,MAAS,MAC7B,CAACE,EAAY,SAAS,CAACC,EAAY,SAASV,EAAM,aAAaA,EAAM,aAAa;AAAA,IAAA,GAE9Ea,IAAUN,EAAS,MAAMI,EAAa,SAASC,EAAc,KAAK,GAElEE,IAAaP;AAAA,MACjB,MAAM,OAAOP,EAAM,aAAc,YAAYA,EAAM,YAAY;AAAA,IAAA,GAE3De,IAAUR;AAAA,MACd,MAAMO,EAAW,SAASZ,EAAM,MAAM,UAAWF,EAAM;AAAA,IAAA;2BAKvDgB,EA+CM,OAAA;AAAA,MA9CH,OAAKC,EAAA;AAAA;wBAA+ChB,EAAA,IAAI;AAAA;mCAA6CA,EAAA;AAAA,mCAA2CA,EAAA;AAAA,gCAAwCQ,EAAA;AAAA,gCAA2CC,EAAA;AAAA,QAAA;AAAA;;MAWvNT,EAAA,cAAbe,EAEQ,SAAA;AAAA;QAFa,KAAKV,EAAA;AAAA,QAAS,OAAM;AAAA,MAAA;YACpCL,EAAA,KAAK,GAAA,CAAA;AAAA,QAAeA,EAAA,iBAAZe,EAA+E,QAA/EE,GAAuE,GAAC;;QAErFC,EAgBE,YAAA;AAAA,QAfC,IAAIb,EAAA;AAAA,sDACIJ,EAAK,QAAAkB;AAAA,QACb,MAAMnB,EAAA;AAAA,QACN,aAAaA,EAAA;AAAA,QACb,UAAUA,EAAA;AAAA,QACV,UAAUA,EAAA;AAAA,QACV,UAAUA,EAAA;AAAA,QACV,MAAMA,EAAA;AAAA,QACN,cAAcA,EAAA;AAAA,QACd,WAAWA,EAAA;AAAA,QACX,WAAWA,EAAA;AAAA,QACX,iBAAeA,EAAA,YAAY;AAAA,QAC3B,gBAAcQ,EAAA,SAAe;AAAA,QAC7B,oBAAkBI,EAAA,QAAUL,EAAA,QAAY;AAAA,QACzC,OAAM;AAAA,MAAA;YAbGN,EAAA,KAAK;AAAA,MAAA;MAeLW,EAAA,SAAWC,EAAA,SAAtBO,KAAAL,EAcM,OAdNM,GAcM;AAAA,QAZIT,EAAA,cADRG,EAMM,OAAA;AAAA;UAJH,IAAIR,EAAA;AAAA,UACJ,mEAAiEC,EAAA,OAAW,CAAA;AAAA,QAAA,KAE1EI,EAAA,KAAO,GAAA,IAAAU,CAAA;QAGJT,EAAA,cADRE,EAKM,OAAA;AAAA;UAHH,sEAAoED,EAAA,OAAO,CAAA;AAAA,QAAA,GAEzES,EAAAtB,EAAA,MAAM,MAAM,IAAG,UAAMD,EAAA,SAAS,GAAA,CAAA;;;;;"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import o from "./PaTimePicker.vue2.js";
|
|
2
|
-
import { nextPaTimePickerId as p } from "./PaTimePicker.vue2.js";
|
|
3
2
|
/* empty css */
|
|
4
3
|
import r from "../../_virtual/_plugin-vue_export-helper.js";
|
|
5
|
-
const
|
|
4
|
+
const e = /* @__PURE__ */ r(o, [["__scopeId", "data-v-04841443"]]);
|
|
6
5
|
export {
|
|
7
|
-
|
|
8
|
-
p as nextPaTimePickerId
|
|
6
|
+
e as default
|
|
9
7
|
};
|
|
10
8
|
//# sourceMappingURL=PaTimePicker.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaTimePicker.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PaTimePicker.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as de, useModel as ce, ref as S, useId as ne, computed as l, watch as me, onBeforeUnmount as fe, openBlock as _, createElementBlock as D, normalizeClass as h, createTextVNode as ve, toDisplayString as M, createCommentVNode as E, withKeys as H, withModifiers as L, createElementVNode as s, renderSlot as pe, createVNode as x, withDirectives as he, vShow as be, mergeModels as ke } from "vue";
|
|
2
2
|
import z from "../PaIcon/PaIcon.vue.js";
|
|
3
|
-
const
|
|
3
|
+
const ye = ["for"], we = {
|
|
4
4
|
key: 0,
|
|
5
5
|
class: "pa-time-picker__required",
|
|
6
6
|
"aria-hidden": "true"
|
|
7
|
-
},
|
|
8
|
-
let Te = 0;
|
|
9
|
-
function $e() {
|
|
10
|
-
return `pa-time-picker-${++Te}`;
|
|
11
|
-
}
|
|
12
|
-
const Ie = /* @__PURE__ */ se({
|
|
7
|
+
}, ge = ["id", "disabled", "aria-expanded", "aria-required", "aria-invalid", "aria-readonly", "aria-describedby", "onKeydown"], _e = { class: "pa-time-picker__value" }, De = ["name", "value", "disabled", "readonly", "required"], Me = { class: "pa-time-picker__spinner" }, Ee = { class: "pa-time-picker__column" }, xe = ["aria-disabled"], ze = ["aria-disabled"], Ae = { class: "pa-time-picker__column" }, Be = ["aria-disabled"], Te = ["aria-disabled"], $e = ["id"], Ce = /* @__PURE__ */ de({
|
|
13
8
|
__name: "PaTimePicker",
|
|
14
|
-
props: /* @__PURE__ */
|
|
9
|
+
props: /* @__PURE__ */ ke({
|
|
15
10
|
display: { default: "popover" },
|
|
16
11
|
placeholder: { default: "hh:mm" },
|
|
17
12
|
label: {},
|
|
@@ -32,31 +27,31 @@ const Ie = /* @__PURE__ */ se({
|
|
|
32
27
|
}),
|
|
33
28
|
emits: ["update:modelValue"],
|
|
34
29
|
setup(a) {
|
|
35
|
-
const t = a, f =
|
|
30
|
+
const t = a, f = ce(a, "modelValue"), B = S(null), U = S(null), v = S(!1), N = `pa-time-picker-pop-${ne()}`, re = `pa-time-picker-${ne()}`, T = l(() => t.id ?? re), R = l(() => `${T.value}-msg`);
|
|
36
31
|
function w(e) {
|
|
37
32
|
return String(e).padStart(2, "0");
|
|
38
33
|
}
|
|
39
|
-
function
|
|
34
|
+
function $(e) {
|
|
40
35
|
return e.hours * 60 + e.minutes;
|
|
41
36
|
}
|
|
42
37
|
function o(e) {
|
|
43
|
-
const n =
|
|
44
|
-
return t.min && n <
|
|
38
|
+
const n = $(e);
|
|
39
|
+
return t.min && n < $(t.min) || t.max && n > $(t.max) ? !0 : t.disabledTimes ? t.disabledTimes(e) === !0 : !1;
|
|
45
40
|
}
|
|
46
|
-
const
|
|
41
|
+
const q = l(() => {
|
|
47
42
|
for (let e = 0; e < 24 * 60; e++) {
|
|
48
43
|
const n = { hours: Math.floor(e / 60), minutes: e % 60 };
|
|
49
44
|
if (!o(n)) return n;
|
|
50
45
|
}
|
|
51
46
|
return null;
|
|
52
|
-
}),
|
|
47
|
+
}), P = l(() => q.value === null), c = l(() => f.value ? f.value.hours : P.value ? null : o({ hours: 0, minutes: 0 }) ? q.value.hours : 0), m = l(() => f.value ? f.value.minutes : P.value ? null : o({ hours: 0, minutes: 0 }) ? q.value.minutes : 0), te = l(() => {
|
|
53
48
|
const e = f.value;
|
|
54
49
|
return e ? `${w(e.hours)}:${w(e.minutes)}` : t.placeholder;
|
|
55
|
-
}),
|
|
50
|
+
}), ie = l(() => !f.value), p = l(() => P.value), g = l(() => !!t.error), j = l(() => t.valid && !g.value), ae = l(
|
|
56
51
|
() => typeof t.error == "string" && t.error.length > 0 ? t.error : null
|
|
57
|
-
),
|
|
52
|
+
), oe = l(
|
|
58
53
|
() => !g.value && t.helperText ? t.helperText : null
|
|
59
|
-
), C = l(() =>
|
|
54
|
+
), C = l(() => ae.value ?? oe.value), le = l(() => {
|
|
60
55
|
const e = f.value;
|
|
61
56
|
return e ? `${w(e.hours)}:${w(e.minutes)}` : "";
|
|
62
57
|
});
|
|
@@ -191,7 +186,7 @@ const Ie = /* @__PURE__ */ se({
|
|
|
191
186
|
const e = c.value, n = m.value;
|
|
192
187
|
e === null || n === null || o({ hours: e, minutes: n }) || (f.value || u(e, n), t.display === "popover" && A());
|
|
193
188
|
}
|
|
194
|
-
function
|
|
189
|
+
function ue(e) {
|
|
195
190
|
if (!t.readonly)
|
|
196
191
|
switch (e.key) {
|
|
197
192
|
case "ArrowUp":
|
|
@@ -217,7 +212,7 @@ const Ie = /* @__PURE__ */ se({
|
|
|
217
212
|
break;
|
|
218
213
|
}
|
|
219
214
|
}
|
|
220
|
-
function
|
|
215
|
+
function se(e) {
|
|
221
216
|
if (!t.readonly)
|
|
222
217
|
switch (e.key) {
|
|
223
218
|
case "ArrowUp":
|
|
@@ -246,13 +241,13 @@ const Ie = /* @__PURE__ */ se({
|
|
|
246
241
|
function K(e) {
|
|
247
242
|
B.value && (B.value.contains(e.target) || A(!1));
|
|
248
243
|
}
|
|
249
|
-
function
|
|
244
|
+
function V(e) {
|
|
250
245
|
e.key === "Escape" && (e.preventDefault(), A());
|
|
251
246
|
}
|
|
252
|
-
return
|
|
253
|
-
e ? (document.addEventListener("mousedown", K), window.addEventListener("keydown",
|
|
254
|
-
}),
|
|
255
|
-
document.removeEventListener("mousedown", K), window.removeEventListener("keydown",
|
|
247
|
+
return me(v, (e) => {
|
|
248
|
+
e ? (document.addEventListener("mousedown", K), window.addEventListener("keydown", V)) : (document.removeEventListener("mousedown", K), window.removeEventListener("keydown", V));
|
|
249
|
+
}), fe(() => {
|
|
250
|
+
document.removeEventListener("mousedown", K), window.removeEventListener("keydown", V);
|
|
256
251
|
}), (e, n) => (_(), D("div", {
|
|
257
252
|
ref_key: "rootRef",
|
|
258
253
|
ref: B,
|
|
@@ -270,22 +265,22 @@ const Ie = /* @__PURE__ */ se({
|
|
|
270
265
|
}, [
|
|
271
266
|
a.label ? (_(), D("label", {
|
|
272
267
|
key: 0,
|
|
273
|
-
for:
|
|
268
|
+
for: T.value,
|
|
274
269
|
class: "pa-time-picker__label"
|
|
275
270
|
}, [
|
|
276
|
-
|
|
277
|
-
a.required ? (_(), D("span",
|
|
278
|
-
], 8,
|
|
271
|
+
ve(M(a.label), 1),
|
|
272
|
+
a.required ? (_(), D("span", we, "*")) : E("", !0)
|
|
273
|
+
], 8, ye)) : E("", !0),
|
|
279
274
|
a.display === "popover" ? (_(), D("button", {
|
|
280
275
|
key: 1,
|
|
281
|
-
id:
|
|
276
|
+
id: T.value,
|
|
282
277
|
ref_key: "triggerRef",
|
|
283
278
|
ref: U,
|
|
284
279
|
type: "button",
|
|
285
280
|
class: h([
|
|
286
281
|
"pa-time-picker__trigger",
|
|
287
282
|
{
|
|
288
|
-
"pa-time-picker__trigger--placeholder":
|
|
283
|
+
"pa-time-picker__trigger--placeholder": ie.value,
|
|
289
284
|
"pa-time-picker__trigger--disabled": a.disabled,
|
|
290
285
|
"pa-time-picker__trigger--readonly": a.readonly && !a.disabled,
|
|
291
286
|
"pa-time-picker__trigger--error": g.value && !a.disabled,
|
|
@@ -307,24 +302,24 @@ const Ie = /* @__PURE__ */ se({
|
|
|
307
302
|
H(L(J, ["prevent"]), ["down"])
|
|
308
303
|
]
|
|
309
304
|
}, [
|
|
310
|
-
s("span",
|
|
311
|
-
|
|
305
|
+
s("span", _e, M(te.value), 1),
|
|
306
|
+
pe(e.$slots, "suffix", {}, () => [
|
|
312
307
|
x(z, {
|
|
313
308
|
name: "clock",
|
|
314
309
|
size: "md"
|
|
315
310
|
})
|
|
316
311
|
], !0)
|
|
317
|
-
], 42,
|
|
312
|
+
], 42, ge)) : E("", !0),
|
|
318
313
|
a.name ? (_(), D("input", {
|
|
319
314
|
key: 2,
|
|
320
315
|
type: "hidden",
|
|
321
316
|
name: a.name,
|
|
322
|
-
value:
|
|
317
|
+
value: le.value,
|
|
323
318
|
disabled: a.disabled,
|
|
324
319
|
readonly: a.readonly,
|
|
325
320
|
required: a.required
|
|
326
|
-
}, null, 8,
|
|
327
|
-
|
|
321
|
+
}, null, 8, De)) : E("", !0),
|
|
322
|
+
he(s("div", {
|
|
328
323
|
id: N,
|
|
329
324
|
class: h([
|
|
330
325
|
"pa-time-picker__popover",
|
|
@@ -333,8 +328,8 @@ const Ie = /* @__PURE__ */ se({
|
|
|
333
328
|
role: "dialog",
|
|
334
329
|
"aria-modal": "false"
|
|
335
330
|
}, [
|
|
336
|
-
s("div",
|
|
337
|
-
s("div",
|
|
331
|
+
s("div", Me, [
|
|
332
|
+
s("div", Ee, [
|
|
338
333
|
s("button", {
|
|
339
334
|
type: "button",
|
|
340
335
|
class: h(["pa-time-picker__chevron", { "pa-time-picker__chevron--inert": p.value }]),
|
|
@@ -346,12 +341,12 @@ const Ie = /* @__PURE__ */ se({
|
|
|
346
341
|
name: "caret-up",
|
|
347
342
|
size: "sm"
|
|
348
343
|
})
|
|
349
|
-
], 10,
|
|
344
|
+
], 10, xe),
|
|
350
345
|
s("button", {
|
|
351
346
|
type: "button",
|
|
352
347
|
class: "pa-time-picker__cell",
|
|
353
348
|
"aria-label": "Ore",
|
|
354
|
-
onKeydown:
|
|
349
|
+
onKeydown: ue
|
|
355
350
|
}, M(c.value === null ? "--" : w(c.value)), 33),
|
|
356
351
|
s("button", {
|
|
357
352
|
type: "button",
|
|
@@ -364,13 +359,13 @@ const Ie = /* @__PURE__ */ se({
|
|
|
364
359
|
name: "caret-down",
|
|
365
360
|
size: "sm"
|
|
366
361
|
})
|
|
367
|
-
], 10,
|
|
362
|
+
], 10, ze)
|
|
368
363
|
]),
|
|
369
364
|
n[0] || (n[0] = s("span", {
|
|
370
365
|
class: "pa-time-picker__separator",
|
|
371
366
|
"aria-hidden": "true"
|
|
372
367
|
}, ":", -1)),
|
|
373
|
-
s("div",
|
|
368
|
+
s("div", Ae, [
|
|
374
369
|
s("button", {
|
|
375
370
|
type: "button",
|
|
376
371
|
class: h(["pa-time-picker__chevron", { "pa-time-picker__chevron--inert": p.value }]),
|
|
@@ -382,12 +377,12 @@ const Ie = /* @__PURE__ */ se({
|
|
|
382
377
|
name: "caret-up",
|
|
383
378
|
size: "sm"
|
|
384
379
|
})
|
|
385
|
-
], 10,
|
|
380
|
+
], 10, Be),
|
|
386
381
|
s("button", {
|
|
387
382
|
type: "button",
|
|
388
383
|
class: "pa-time-picker__cell",
|
|
389
384
|
"aria-label": "Minuti",
|
|
390
|
-
onKeydown:
|
|
385
|
+
onKeydown: se
|
|
391
386
|
}, M(m.value === null ? "--" : w(m.value)), 33),
|
|
392
387
|
s("button", {
|
|
393
388
|
type: "button",
|
|
@@ -400,22 +395,21 @@ const Ie = /* @__PURE__ */ se({
|
|
|
400
395
|
name: "caret-down",
|
|
401
396
|
size: "sm"
|
|
402
397
|
})
|
|
403
|
-
], 10,
|
|
398
|
+
], 10, Te)
|
|
404
399
|
])
|
|
405
400
|
])
|
|
406
401
|
], 2), [
|
|
407
|
-
[
|
|
402
|
+
[be, a.display === "inline" || v.value]
|
|
408
403
|
]),
|
|
409
404
|
C.value ? (_(), D("div", {
|
|
410
405
|
key: 3,
|
|
411
406
|
id: R.value,
|
|
412
407
|
class: h(["pa-time-picker__message", { "pa-time-picker__message--error": g.value }])
|
|
413
|
-
}, M(C.value), 11,
|
|
408
|
+
}, M(C.value), 11, $e)) : E("", !0)
|
|
414
409
|
], 2));
|
|
415
410
|
}
|
|
416
411
|
});
|
|
417
412
|
export {
|
|
418
|
-
|
|
419
|
-
$e as nextPaTimePickerId
|
|
413
|
+
Ce as default
|
|
420
414
|
};
|
|
421
415
|
//# sourceMappingURL=PaTimePicker.vue2.js.map
|