@forizi-tecnologia/ui 0.0.2
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/LICENSE +21 -0
- package/README.md +220 -0
- package/dist/chunks/components/buttons-FzIconToolTip-D_cBN1TN.js +53 -0
- package/dist/chunks/components/buttons-FzIconToolTip-D_cBN1TN.js.map +1 -0
- package/dist/chunks/components/inputs-FzEmailField-B07tsUyr.js +86 -0
- package/dist/chunks/components/inputs-FzEmailField-B07tsUyr.js.map +1 -0
- package/dist/chunks/components/inputs-FzFullAddress-e05j6MFg.js +195 -0
- package/dist/chunks/components/inputs-FzFullAddress-e05j6MFg.js.map +1 -0
- package/dist/chunks/components/inputs-FzMoneyField-BxAg9Bd_.js +106 -0
- package/dist/chunks/components/inputs-FzMoneyField-BxAg9Bd_.js.map +1 -0
- package/dist/chunks/components/inputs-FzNumberField-BAPRZpBo.js +107 -0
- package/dist/chunks/components/inputs-FzNumberField-BAPRZpBo.js.map +1 -0
- package/dist/chunks/components/inputs-FzPhoneField-DKMx53pK.js +272 -0
- package/dist/chunks/components/inputs-FzPhoneField-DKMx53pK.js.map +1 -0
- package/dist/chunks/components/inputs-FzZipCodeField-kkCMb3t9.js +102 -0
- package/dist/chunks/components/inputs-FzZipCodeField-kkCMb3t9.js.map +1 -0
- package/dist/chunks/components/layout-FzLoadingOverlay-DbVh5Ncb.js +58 -0
- package/dist/chunks/components/layout-FzLoadingOverlay-DbVh5Ncb.js.map +1 -0
- package/dist/chunks/components/messages-FzConfirmDialog-kcpokBc2.js +18 -0
- package/dist/chunks/components/messages-FzConfirmDialog-kcpokBc2.js.map +1 -0
- package/dist/chunks/components/messages-FzCustomConfirmDialog-CttE2KMh.js +107 -0
- package/dist/chunks/components/messages-FzCustomConfirmDialog-CttE2KMh.js.map +1 -0
- package/dist/chunks/components/messages-FzFloatingNotify-BdlkCu5i.js +96 -0
- package/dist/chunks/components/messages-FzFloatingNotify-BdlkCu5i.js.map +1 -0
- package/dist/chunks/components/modals-FzModalBase-C4wU9yAp.js +131 -0
- package/dist/chunks/components/modals-FzModalBase-C4wU9yAp.js.map +1 -0
- package/dist/chunks/composables/useBreakpoint-DnFIVluv.js +13 -0
- package/dist/chunks/composables/useBreakpoint-DnFIVluv.js.map +1 -0
- package/dist/chunks/composables/useGlobals-AagqYKoP.js +15 -0
- package/dist/chunks/composables/useGlobals-AagqYKoP.js.map +1 -0
- package/dist/chunks/composables/useLoading-Cu1i2QIr.js +20 -0
- package/dist/chunks/composables/useLoading-Cu1i2QIr.js.map +1 -0
- package/dist/chunks/composables/useNumericInput-DGw52-Ds.js +71 -0
- package/dist/chunks/composables/useNumericInput-DGw52-Ds.js.map +1 -0
- package/dist/chunks/index-Bu6SLmX_.js +31 -0
- package/dist/chunks/index-Bu6SLmX_.js.map +1 -0
- package/dist/chunks/utils/api-N1Cju-89.js +26 -0
- package/dist/chunks/utils/api-N1Cju-89.js.map +1 -0
- package/dist/chunks/utils/confirm-DiGEPjua.js +18 -0
- package/dist/chunks/utils/confirm-DiGEPjua.js.map +1 -0
- package/dist/chunks/utils/loading-dXhCGa6R.js +17 -0
- package/dist/chunks/utils/loading-dXhCGa6R.js.map +1 -0
- package/dist/chunks/utils/notify-CE_gbk11.js +65 -0
- package/dist/chunks/utils/notify-CE_gbk11.js.map +1 -0
- package/dist/chunks/utils/types-DV6li0y5.js +6 -0
- package/dist/chunks/utils/types-DV6li0y5.js.map +1 -0
- package/dist/chunks/utils/vuetify-check-DRI6ZYnO.js +21 -0
- package/dist/chunks/utils/vuetify-check-DRI6ZYnO.js.map +1 -0
- package/dist/components/buttons/FzIconToolTip.vue.d.ts +22 -0
- package/dist/components/buttons/FzIconToolTip.vue.d.ts.map +1 -0
- package/dist/components/index.d.ts +13 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +27 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/inputs/FzEmailField.vue.d.ts +49 -0
- package/dist/components/inputs/FzEmailField.vue.d.ts.map +1 -0
- package/dist/components/inputs/FzFullAddress.vue.d.ts +40 -0
- package/dist/components/inputs/FzFullAddress.vue.d.ts.map +1 -0
- package/dist/components/inputs/FzMoneyField.vue.d.ts +47 -0
- package/dist/components/inputs/FzMoneyField.vue.d.ts.map +1 -0
- package/dist/components/inputs/FzNumberField.vue.d.ts +49 -0
- package/dist/components/inputs/FzNumberField.vue.d.ts.map +1 -0
- package/dist/components/inputs/FzPhoneField.vue.d.ts +38 -0
- package/dist/components/inputs/FzPhoneField.vue.d.ts.map +1 -0
- package/dist/components/inputs/FzZipCodeField.vue.d.ts +50 -0
- package/dist/components/inputs/FzZipCodeField.vue.d.ts.map +1 -0
- package/dist/components/layout/FzLoadingOverlay.vue.d.ts +13 -0
- package/dist/components/layout/FzLoadingOverlay.vue.d.ts.map +1 -0
- package/dist/components/messages/FzConfirmDialog.vue.d.ts +7 -0
- package/dist/components/messages/FzConfirmDialog.vue.d.ts.map +1 -0
- package/dist/components/messages/FzCustomConfirmDialog.vue.d.ts +7 -0
- package/dist/components/messages/FzCustomConfirmDialog.vue.d.ts.map +1 -0
- package/dist/components/messages/FzFloatingNotify.vue.d.ts +4 -0
- package/dist/components/messages/FzFloatingNotify.vue.d.ts.map +1 -0
- package/dist/components/modals/FzModalBase.vue.d.ts +45 -0
- package/dist/components/modals/FzModalBase.vue.d.ts.map +1 -0
- package/dist/composables/index.d.ts +5 -0
- package/dist/composables/index.d.ts.map +1 -0
- package/dist/composables/index.js +13 -0
- package/dist/composables/index.js.map +1 -0
- package/dist/composables/useBreakpoint.d.ts +5 -0
- package/dist/composables/useBreakpoint.d.ts.map +1 -0
- package/dist/composables/useGlobals.d.ts +9 -0
- package/dist/composables/useGlobals.d.ts.map +1 -0
- package/dist/composables/useLoading.d.ts +7 -0
- package/dist/composables/useLoading.d.ts.map +1 -0
- package/dist/composables/useNumericInput.d.ts +14 -0
- package/dist/composables/useNumericInput.d.ts.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +94 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/globals.d.ts +16 -0
- package/dist/plugins/globals.d.ts.map +1 -0
- package/dist/plugins/index.d.ts +2 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +12 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/ui.css +1 -0
- package/dist/utils/api.d.ts +8 -0
- package/dist/utils/api.d.ts.map +1 -0
- package/dist/utils/confirm.d.ts +15 -0
- package/dist/utils/confirm.d.ts.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +25 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/loading.d.ts +12 -0
- package/dist/utils/loading.d.ts.map +1 -0
- package/dist/utils/notify.d.ts +40 -0
- package/dist/utils/notify.d.ts.map +1 -0
- package/dist/utils/types.d.ts +21 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/vuetify-check.d.ts +4 -0
- package/dist/utils/vuetify-check.d.ts.map +1 -0
- package/dist/vuetifyComponents.d.ts +22 -0
- package/dist/vuetifyComponents.d.ts.map +1 -0
- package/package.json +111 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { defineComponent as $, toRef as k, resolveComponent as x, createBlock as C, openBlock as B, unref as r, createSlots as I, withCtx as c, renderSlot as m } from "vue";
|
|
2
|
+
import { u as N, c as V } from "../composables/useNumericInput-DGw52-Ds.js";
|
|
3
|
+
const D = (o, u) => {
|
|
4
|
+
const t = o.__vccOpts || o;
|
|
5
|
+
for (const [i, d] of u)
|
|
6
|
+
t[i] = d;
|
|
7
|
+
return t;
|
|
8
|
+
}, S = " ", K = /* @__PURE__ */ $({
|
|
9
|
+
__name: "FzMoneyField",
|
|
10
|
+
props: {
|
|
11
|
+
modelValue: { default: 0 },
|
|
12
|
+
label: { default: "" },
|
|
13
|
+
rules: { default: () => [] },
|
|
14
|
+
disabled: { type: Boolean, default: !1 },
|
|
15
|
+
hint: { default: "" },
|
|
16
|
+
persistentHint: { type: Boolean, default: !1 },
|
|
17
|
+
currency: { default: "BRL" },
|
|
18
|
+
locale: { default: "pt-BR" },
|
|
19
|
+
variant: { default: "underlined" },
|
|
20
|
+
max: { default: 999e6 },
|
|
21
|
+
min: { default: void 0 }
|
|
22
|
+
},
|
|
23
|
+
emits: ["update:modelValue"],
|
|
24
|
+
setup(o, { emit: u }) {
|
|
25
|
+
const t = o, i = u;
|
|
26
|
+
function d(e) {
|
|
27
|
+
const l = Math.abs(e);
|
|
28
|
+
try {
|
|
29
|
+
const a = l.toLocaleString(t.locale, {
|
|
30
|
+
style: "currency",
|
|
31
|
+
currency: t.currency,
|
|
32
|
+
minimumFractionDigits: 2,
|
|
33
|
+
maximumFractionDigits: 2
|
|
34
|
+
}).split(S).join(" ");
|
|
35
|
+
return e < 0 ? `-${a}` : a;
|
|
36
|
+
} catch {
|
|
37
|
+
const n = t.currency, a = l.toLocaleString(t.locale, {
|
|
38
|
+
minimumFractionDigits: 2,
|
|
39
|
+
maximumFractionDigits: 2
|
|
40
|
+
});
|
|
41
|
+
return e < 0 ? `-${n} ${a}` : `${n} ${a}`;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function f(e) {
|
|
45
|
+
const l = e.includes("-"), n = e.replace(/\D/g, "");
|
|
46
|
+
if (!n) return 0;
|
|
47
|
+
const a = parseInt(n) / 100;
|
|
48
|
+
return Number((l ? -a : a).toFixed(2));
|
|
49
|
+
}
|
|
50
|
+
const { formattedValue: s, moveCursorToEnd: p, handleInput: v, handleFocus: y, handleClick: b } = N(
|
|
51
|
+
k(t, "modelValue"),
|
|
52
|
+
(e) => i("update:modelValue", e),
|
|
53
|
+
d,
|
|
54
|
+
f
|
|
55
|
+
);
|
|
56
|
+
function h(e) {
|
|
57
|
+
t.max !== void 0 && e > t.max || t.min !== void 0 && e < t.min || (i("update:modelValue", e), s.value = d(e), p());
|
|
58
|
+
}
|
|
59
|
+
function F(e, l) {
|
|
60
|
+
const n = parseInt(e || "0") / 100;
|
|
61
|
+
return l ? -n : n;
|
|
62
|
+
}
|
|
63
|
+
const g = V(
|
|
64
|
+
s,
|
|
65
|
+
h,
|
|
66
|
+
F
|
|
67
|
+
);
|
|
68
|
+
return (e, l) => {
|
|
69
|
+
const n = x("v-text-field");
|
|
70
|
+
return B(), C(n, {
|
|
71
|
+
"model-value": r(s),
|
|
72
|
+
label: o.label,
|
|
73
|
+
rules: o.rules,
|
|
74
|
+
disabled: o.disabled,
|
|
75
|
+
hint: o.hint,
|
|
76
|
+
"persistent-hint": o.persistentHint,
|
|
77
|
+
variant: o.variant,
|
|
78
|
+
inputmode: "decimal",
|
|
79
|
+
"onUpdate:modelValue": r(v),
|
|
80
|
+
onFocus: r(y),
|
|
81
|
+
onClick: r(b),
|
|
82
|
+
onKeydown: r(g)
|
|
83
|
+
}, I({ _: 2 }, [
|
|
84
|
+
e.$slots.prepend ? {
|
|
85
|
+
name: "prepend",
|
|
86
|
+
fn: c(() => [
|
|
87
|
+
m(e.$slots, "prepend", {}, void 0, !0)
|
|
88
|
+
]),
|
|
89
|
+
key: "0"
|
|
90
|
+
} : void 0,
|
|
91
|
+
e.$slots.append ? {
|
|
92
|
+
name: "append",
|
|
93
|
+
fn: c(() => [
|
|
94
|
+
m(e.$slots, "append", {}, void 0, !0)
|
|
95
|
+
]),
|
|
96
|
+
key: "1"
|
|
97
|
+
} : void 0
|
|
98
|
+
]), 1032, ["model-value", "label", "rules", "disabled", "hint", "persistent-hint", "variant", "onUpdate:modelValue", "onFocus", "onClick", "onKeydown"]);
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}), z = /* @__PURE__ */ D(K, [["__scopeId", "data-v-80e32b79"]]);
|
|
102
|
+
export {
|
|
103
|
+
z as F,
|
|
104
|
+
D as _
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=inputs-FzMoneyField-BxAg9Bd_.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs-FzMoneyField-BxAg9Bd_.js","sources":["../../../src/components/inputs/FzMoneyField.vue"],"sourcesContent":["<template>\n <v-text-field\n :model-value=\"formattedValue\"\n :label=\"label\"\n :rules=\"rules\"\n :disabled=\"disabled\"\n :hint=\"hint\"\n :persistent-hint=\"persistentHint\"\n :variant=\"variant\"\n inputmode=\"decimal\"\n @update:model-value=\"handleInput\"\n @focus=\"handleFocus\"\n @click=\"handleClick\"\n @keydown=\"handleKeydown\"\n >\n <template v-if=\"$slots.prepend\" #prepend>\n <slot name=\"prepend\" />\n </template>\n <template v-if=\"$slots.append\" #append>\n <slot name=\"append\" />\n </template>\n </v-text-field>\n</template>\n\n<script setup lang=\"ts\">\nimport { toRef } from 'vue';\nimport { useNumericInput, createNumericKeydownHandler } from '@/composables/useNumericInput';\nimport type { TextFieldVariant } from '@/utils/types';\n\nconst NON_BREAKING_SPACE = '\\u00a0';\n\ntype ValidationRule = (value: string) => boolean | string;\n\ninterface Props {\n modelValue?: number | null\n label?: string\n rules?: ValidationRule[]\n disabled?: boolean\n hint?: string\n persistentHint?: boolean\n currency?: string\n locale?: string\n variant?: TextFieldVariant\n max?: number\n min?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: 0,\n label: '',\n rules: () => [],\n disabled: false,\n hint: '',\n persistentHint: false,\n currency: 'BRL',\n locale: 'pt-BR',\n variant: 'underlined',\n max: 999000000,\n min: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number]\n}>();\n\nfunction formatMoney(value: number): string {\n const absValue = Math.abs(value);\n\n try {\n const formatted = absValue.toLocaleString(props.locale, {\n style: 'currency',\n currency: props.currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n\n const normalized = formatted.split(NON_BREAKING_SPACE).join(' ');\n\n return value < 0 ? `-${normalized}` : normalized;\n } catch {\n const currencySymbol = props.currency;\n\n const formatted = absValue.toLocaleString(props.locale, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n\n return value < 0 ? `-${currencySymbol} ${formatted}` : `${currencySymbol} ${formatted}`;\n }\n}\n\nfunction parseMoneyInput(input: string): number {\n const isNegative = input.includes('-');\n const numbers = input.replace(/\\D/g, '');\n\n if (!numbers) return 0;\n\n const value = parseInt(numbers) / 100;\n const rounded = Number((isNegative ? -value : value).toFixed(2));\n\n return rounded;\n}\n\nconst { formattedValue, moveCursorToEnd, handleInput, handleFocus, handleClick } = useNumericInput(\n toRef(props, 'modelValue'),\n (val: number) => emit('update:modelValue', val),\n formatMoney,\n parseMoneyInput,\n);\n\nfunction updateValue(newValue: number) {\n if (props.max !== undefined && newValue > props.max) return;\n\n if (props.min !== undefined && newValue < props.min) return;\n\n emit('update:modelValue', newValue);\n formattedValue.value = formatMoney(newValue);\n moveCursorToEnd();\n}\n\nfunction computeFromDigits(digits: string, isNegative: boolean): number {\n const value = parseInt(digits || '0') / 100;\n\n return isNegative ? -value : value;\n}\n\nconst handleKeydown = createNumericKeydownHandler(\n formattedValue,\n updateValue,\n computeFromDigits,\n);\n</script>\n\n<style scoped>\n:deep(input) {\n text-align: right;\n}\n</style>\n"],"names":["NON_BREAKING_SPACE","props","__props","emit","__emit","formatMoney","value","absValue","normalized","currencySymbol","formatted","parseMoneyInput","input","isNegative","numbers","formattedValue","moveCursorToEnd","handleInput","handleFocus","handleClick","useNumericInput","toRef","val","updateValue","newValue","computeFromDigits","digits","handleKeydown","createNumericKeydownHandler","_createBlock","_component_v_text_field","_unref","$slots","_renderSlot","_ctx"],"mappings":";;;;;;;GA6BMA,IAAqB;;;;;;;;;;;;;;;;;AAkB3B,UAAMC,IAAQC,GAcRC,IAAOC;AAIb,aAASC,EAAYC,GAAuB;AAC1C,YAAMC,IAAW,KAAK,IAAID,CAAK;AAE/B,UAAI;AAQF,cAAME,IAPYD,EAAS,eAAeN,EAAM,QAAQ;AAAA,UACtD,OAAO;AAAA,UACP,UAAUA,EAAM;AAAA,UAChB,uBAAuB;AAAA,UACvB,uBAAuB;AAAA,QAAA,CACxB,EAE4B,MAAMD,CAAkB,EAAE,KAAK,GAAG;AAE/D,eAAOM,IAAQ,IAAI,IAAIE,CAAU,KAAKA;AAAA,MACxC,QAAQ;AACN,cAAMC,IAAiBR,EAAM,UAEvBS,IAAYH,EAAS,eAAeN,EAAM,QAAQ;AAAA,UACtD,uBAAuB;AAAA,UACvB,uBAAuB;AAAA,QAAA,CACxB;AAED,eAAOK,IAAQ,IAAI,IAAIG,CAAc,IAAIC,CAAS,KAAK,GAAGD,CAAc,IAAIC,CAAS;AAAA,MACvF;AAAA,IACF;AAEA,aAASC,EAAgBC,GAAuB;AAC9C,YAAMC,IAAaD,EAAM,SAAS,GAAG,GAC/BE,IAAUF,EAAM,QAAQ,OAAO,EAAE;AAEvC,UAAI,CAACE,EAAS,QAAO;AAErB,YAAMR,IAAQ,SAASQ,CAAO,IAAI;AAGlC,aAFgB,QAAQD,IAAa,CAACP,IAAQA,GAAO,QAAQ,CAAC,CAAC;AAAA,IAGjE;AAEA,UAAM,EAAE,gBAAAS,GAAgB,iBAAAC,GAAiB,aAAAC,GAAa,aAAAC,GAAa,aAAAC,MAAgBC;AAAA,MACjFC,EAAMpB,GAAO,YAAY;AAAA,MACzB,CAACqB,MAAgBnB,EAAK,qBAAqBmB,CAAG;AAAA,MAC9CjB;AAAA,MACAM;AAAA,IAAA;AAGF,aAASY,EAAYC,GAAkB;AACrC,MAAIvB,EAAM,QAAQ,UAAauB,IAAWvB,EAAM,OAE5CA,EAAM,QAAQ,UAAauB,IAAWvB,EAAM,QAEhDE,EAAK,qBAAqBqB,CAAQ,GAClCT,EAAe,QAAQV,EAAYmB,CAAQ,GAC3CR,EAAA;AAAA,IACF;AAEA,aAASS,EAAkBC,GAAgBb,GAA6B;AACtE,YAAMP,IAAQ,SAASoB,KAAU,GAAG,IAAI;AAExC,aAAOb,IAAa,CAACP,IAAQA;AAAA,IAC/B;AAEA,UAAMqB,IAAgBC;AAAA,MACpBb;AAAA,MACAQ;AAAA,MACAE;AAAA,IAAA;;;kBAhIAI,EAoBeC,GAAA;AAAA,QAnBZ,eAAaC,EAAAhB,CAAA;AAAA,QACb,OAAOb,EAAA;AAAA,QACP,OAAOA,EAAA;AAAA,QACP,UAAUA,EAAA;AAAA,QACV,MAAMA,EAAA;AAAA,QACN,mBAAiBA,EAAA;AAAA,QACjB,SAASA,EAAA;AAAA,QACV,WAAU;AAAA,QACT,uBAAoB6B,EAAAd,CAAA;AAAA,QACpB,SAAOc,EAAAb,CAAA;AAAA,QACP,SAAOa,EAAAZ,CAAA;AAAA,QACP,WAASY,EAAAJ,CAAA;AAAA,MAAA;QAEMK,EAAAA,OAAO;gBAAU;AAAA,gBAC/B,MAAuB;AAAA,YAAvBC,EAAuBC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,UAAA;;;QAETF,EAAAA,OAAO;gBAAS;AAAA,gBAC9B,MAAsB;AAAA,YAAtBC,EAAsBC,EAAA,QAAA,UAAA,CAAA,GAAA,QAAA,EAAA;AAAA,UAAA;;;;;;;"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { defineComponent as w, toRef as x, resolveComponent as I, createBlock as V, openBlock as k, unref as i, createSlots as C, withCtx as c, renderSlot as m } from "vue";
|
|
2
|
+
import { u as B, c as D } from "../composables/useNumericInput-DGw52-Ds.js";
|
|
3
|
+
import { _ as K } from "./inputs-FzMoneyField-BxAg9Bd_.js";
|
|
4
|
+
const $ = /* @__PURE__ */ w({
|
|
5
|
+
__name: "FzNumberField",
|
|
6
|
+
props: {
|
|
7
|
+
modelValue: { default: 0 },
|
|
8
|
+
label: { default: "" },
|
|
9
|
+
rules: { default: () => [] },
|
|
10
|
+
disabled: { type: Boolean, default: !1 },
|
|
11
|
+
hint: { default: "" },
|
|
12
|
+
persistentHint: { type: Boolean, default: !1 },
|
|
13
|
+
decimalPlaces: { default: 0 },
|
|
14
|
+
locale: { default: "pt-BR" },
|
|
15
|
+
allowNegative: { type: Boolean, default: !0 },
|
|
16
|
+
variant: { default: "underlined" },
|
|
17
|
+
max: { default: 999e6 },
|
|
18
|
+
min: { default: void 0 }
|
|
19
|
+
},
|
|
20
|
+
emits: ["update:modelValue"],
|
|
21
|
+
setup(l, { emit: p }) {
|
|
22
|
+
const t = l, r = p;
|
|
23
|
+
function u(e) {
|
|
24
|
+
const a = Math.abs(e).toLocaleString(t.locale, {
|
|
25
|
+
minimumFractionDigits: t.decimalPlaces,
|
|
26
|
+
maximumFractionDigits: t.decimalPlaces
|
|
27
|
+
});
|
|
28
|
+
return e < 0 ? "-" + a : a;
|
|
29
|
+
}
|
|
30
|
+
function f(e) {
|
|
31
|
+
const o = e.includes("-"), a = e.replace(/\D/g, "");
|
|
32
|
+
if (!a) return 0;
|
|
33
|
+
let n;
|
|
34
|
+
if (t.decimalPlaces === 0)
|
|
35
|
+
n = parseInt(a);
|
|
36
|
+
else {
|
|
37
|
+
const g = Math.pow(10, t.decimalPlaces);
|
|
38
|
+
n = parseInt(a) / g;
|
|
39
|
+
}
|
|
40
|
+
const d = Number(n.toFixed(t.decimalPlaces));
|
|
41
|
+
return o && t.allowNegative ? -d : d;
|
|
42
|
+
}
|
|
43
|
+
const { formattedValue: s, moveCursorToEnd: v, handleInput: b, handleFocus: h, handleClick: F } = B(
|
|
44
|
+
x(t, "modelValue"),
|
|
45
|
+
(e) => r("update:modelValue", e),
|
|
46
|
+
u,
|
|
47
|
+
f
|
|
48
|
+
);
|
|
49
|
+
function N(e) {
|
|
50
|
+
t.max !== void 0 && e > t.max || t.min !== void 0 && e < t.min || (r("update:modelValue", e), s.value = u(e), v());
|
|
51
|
+
}
|
|
52
|
+
function y(e, o) {
|
|
53
|
+
if (!e) return 0;
|
|
54
|
+
let a;
|
|
55
|
+
if (t.decimalPlaces === 0)
|
|
56
|
+
a = parseInt(e);
|
|
57
|
+
else {
|
|
58
|
+
const d = Math.pow(10, t.decimalPlaces);
|
|
59
|
+
a = parseInt(e) / d;
|
|
60
|
+
}
|
|
61
|
+
const n = Number(a.toFixed(t.decimalPlaces));
|
|
62
|
+
return o ? -n : n;
|
|
63
|
+
}
|
|
64
|
+
const P = D(
|
|
65
|
+
s,
|
|
66
|
+
N,
|
|
67
|
+
y,
|
|
68
|
+
() => ({ allowNegative: t.allowNegative })
|
|
69
|
+
);
|
|
70
|
+
return (e, o) => {
|
|
71
|
+
const a = I("v-text-field");
|
|
72
|
+
return k(), V(a, {
|
|
73
|
+
"model-value": i(s),
|
|
74
|
+
label: l.label,
|
|
75
|
+
rules: l.rules,
|
|
76
|
+
disabled: l.disabled,
|
|
77
|
+
hint: l.hint,
|
|
78
|
+
"persistent-hint": l.persistentHint,
|
|
79
|
+
variant: l.variant,
|
|
80
|
+
inputmode: "decimal",
|
|
81
|
+
"onUpdate:modelValue": i(b),
|
|
82
|
+
onFocus: i(h),
|
|
83
|
+
onClick: i(F),
|
|
84
|
+
onKeydown: i(P)
|
|
85
|
+
}, C({ _: 2 }, [
|
|
86
|
+
e.$slots.prepend ? {
|
|
87
|
+
name: "prepend",
|
|
88
|
+
fn: c(() => [
|
|
89
|
+
m(e.$slots, "prepend", {}, void 0, !0)
|
|
90
|
+
]),
|
|
91
|
+
key: "0"
|
|
92
|
+
} : void 0,
|
|
93
|
+
e.$slots.append ? {
|
|
94
|
+
name: "append",
|
|
95
|
+
fn: c(() => [
|
|
96
|
+
m(e.$slots, "append", {}, void 0, !0)
|
|
97
|
+
]),
|
|
98
|
+
key: "1"
|
|
99
|
+
} : void 0
|
|
100
|
+
]), 1032, ["model-value", "label", "rules", "disabled", "hint", "persistent-hint", "variant", "onUpdate:modelValue", "onFocus", "onClick", "onKeydown"]);
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}), z = /* @__PURE__ */ K($, [["__scopeId", "data-v-1b1e7d4e"]]);
|
|
104
|
+
export {
|
|
105
|
+
z as F
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=inputs-FzNumberField-BAPRZpBo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs-FzNumberField-BAPRZpBo.js","sources":["../../../src/components/inputs/FzNumberField.vue"],"sourcesContent":["<template>\n <v-text-field\n :model-value=\"formattedValue\"\n :label=\"label\"\n :rules=\"rules\"\n :disabled=\"disabled\"\n :hint=\"hint\"\n :persistent-hint=\"persistentHint\"\n :variant=\"variant\"\n inputmode=\"decimal\"\n @update:model-value=\"handleInput\"\n @focus=\"handleFocus\"\n @click=\"handleClick\"\n @keydown=\"handleKeydown\"\n >\n <template v-if=\"$slots.prepend\" #prepend>\n <slot name=\"prepend\" />\n </template>\n <template v-if=\"$slots.append\" #append>\n <slot name=\"append\" />\n </template>\n </v-text-field>\n</template>\n\n<script setup lang=\"ts\">\nimport { toRef } from 'vue';\nimport { useNumericInput, createNumericKeydownHandler } from '@/composables/useNumericInput';\nimport type { TextFieldVariant } from '@/utils/types';\n\ntype ValidationRule = (value: string) => boolean | string;\n\ninterface Props {\n modelValue?: number | null\n label?: string\n rules?: ValidationRule[]\n disabled?: boolean\n hint?: string\n persistentHint?: boolean\n decimalPlaces?: number\n locale?: string\n allowNegative?: boolean\n variant?: TextFieldVariant\n max?: number\n min?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: 0,\n label: '',\n rules: () => [],\n disabled: false,\n hint: '',\n persistentHint: false,\n decimalPlaces: 0,\n locale: 'pt-BR',\n allowNegative: true,\n variant: 'underlined',\n max: 999000000,\n min: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number]\n}>();\n\nfunction formatNumber(value: number): string {\n const absValue = Math.abs(value);\n\n const formatted = absValue.toLocaleString(props.locale, {\n minimumFractionDigits: props.decimalPlaces,\n maximumFractionDigits: props.decimalPlaces,\n });\n\n return value < 0 ? '-' + formatted : formatted;\n}\n\nfunction parseNumberInput(input: string): number {\n const isNegative = input.includes('-');\n const numbers = input.replace(/\\D/g, '');\n\n if (!numbers) return 0;\n\n let value: number;\n\n if (props.decimalPlaces === 0) {\n value = parseInt(numbers);\n } else {\n const divisor = Math.pow(10, props.decimalPlaces);\n value = parseInt(numbers) / divisor;\n }\n\n const rounded = Number(value.toFixed(props.decimalPlaces));\n\n return isNegative && props.allowNegative ? -rounded : rounded;\n}\n\nconst { formattedValue, moveCursorToEnd, handleInput, handleFocus, handleClick } = useNumericInput(\n toRef(props, 'modelValue'),\n (val: number) => emit('update:modelValue', val),\n formatNumber,\n parseNumberInput,\n);\n\nfunction updateValue(newValue: number) {\n if (props.max !== undefined && newValue > props.max) return;\n\n if (props.min !== undefined && newValue < props.min) return;\n\n emit('update:modelValue', newValue);\n formattedValue.value = formatNumber(newValue);\n moveCursorToEnd();\n}\n\nfunction computeFromDigits(digits: string, isNegative: boolean): number {\n if (!digits) return 0;\n\n let value: number;\n\n if (props.decimalPlaces === 0) {\n value = parseInt(digits);\n } else {\n const divisor = Math.pow(10, props.decimalPlaces);\n value = parseInt(digits) / divisor;\n }\n\n const result = Number(value.toFixed(props.decimalPlaces));\n\n return isNegative ? -result : result;\n}\n\nconst handleKeydown = createNumericKeydownHandler(\n formattedValue,\n updateValue,\n computeFromDigits,\n () => ({ allowNegative: props.allowNegative }),\n);\n</script>\n\n<style scoped>\n:deep(input) {\n text-align: right;\n}\n\n:deep(input[type='number']::-webkit-inner-spin-button),\n:deep(input[type='number']::-webkit-outer-spin-button) {\n -webkit-appearance: none;\n margin: 0;\n}\n\n:deep(input[type='number']) {\n -moz-appearance: textfield;\n appearance: textfield;\n}\n</style>\n"],"names":["props","__props","emit","__emit","formatNumber","value","formatted","parseNumberInput","input","isNegative","numbers","divisor","rounded","formattedValue","moveCursorToEnd","handleInput","handleFocus","handleClick","useNumericInput","toRef","val","updateValue","newValue","computeFromDigits","digits","result","handleKeydown","createNumericKeydownHandler","_createBlock","_component_v_text_field","_unref","$slots","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA8CA,UAAMA,IAAQC,GAeRC,IAAOC;AAIb,aAASC,EAAaC,GAAuB;AAG3C,YAAMC,IAFW,KAAK,IAAID,CAAK,EAEJ,eAAeL,EAAM,QAAQ;AAAA,QACtD,uBAAuBA,EAAM;AAAA,QAC7B,uBAAuBA,EAAM;AAAA,MAAA,CAC9B;AAED,aAAOK,IAAQ,IAAI,MAAMC,IAAYA;AAAA,IACvC;AAEA,aAASC,EAAiBC,GAAuB;AAC/C,YAAMC,IAAaD,EAAM,SAAS,GAAG,GAC/BE,IAAUF,EAAM,QAAQ,OAAO,EAAE;AAEvC,UAAI,CAACE,EAAS,QAAO;AAErB,UAAIL;AAEJ,UAAIL,EAAM,kBAAkB;AAC1B,QAAAK,IAAQ,SAASK,CAAO;AAAA,WACnB;AACL,cAAMC,IAAU,KAAK,IAAI,IAAIX,EAAM,aAAa;AAChD,QAAAK,IAAQ,SAASK,CAAO,IAAIC;AAAA,MAC9B;AAEA,YAAMC,IAAU,OAAOP,EAAM,QAAQL,EAAM,aAAa,CAAC;AAEzD,aAAOS,KAAcT,EAAM,gBAAgB,CAACY,IAAUA;AAAA,IACxD;AAEA,UAAM,EAAE,gBAAAC,GAAgB,iBAAAC,GAAiB,aAAAC,GAAa,aAAAC,GAAa,aAAAC,MAAgBC;AAAA,MACjFC,EAAMnB,GAAO,YAAY;AAAA,MACzB,CAACoB,MAAgBlB,EAAK,qBAAqBkB,CAAG;AAAA,MAC9ChB;AAAA,MACAG;AAAA,IAAA;AAGF,aAASc,EAAYC,GAAkB;AACrC,MAAItB,EAAM,QAAQ,UAAasB,IAAWtB,EAAM,OAE5CA,EAAM,QAAQ,UAAasB,IAAWtB,EAAM,QAEhDE,EAAK,qBAAqBoB,CAAQ,GAClCT,EAAe,QAAQT,EAAakB,CAAQ,GAC5CR,EAAA;AAAA,IACF;AAEA,aAASS,EAAkBC,GAAgBf,GAA6B;AACtE,UAAI,CAACe,EAAQ,QAAO;AAEpB,UAAInB;AAEJ,UAAIL,EAAM,kBAAkB;AAC1B,QAAAK,IAAQ,SAASmB,CAAM;AAAA,WAClB;AACL,cAAMb,IAAU,KAAK,IAAI,IAAIX,EAAM,aAAa;AAChD,QAAAK,IAAQ,SAASmB,CAAM,IAAIb;AAAA,MAC7B;AAEA,YAAMc,IAAS,OAAOpB,EAAM,QAAQL,EAAM,aAAa,CAAC;AAExD,aAAOS,IAAa,CAACgB,IAASA;AAAA,IAChC;AAEA,UAAMC,IAAgBC;AAAA,MACpBd;AAAA,MACAQ;AAAA,MACAE;AAAA,MACA,OAAO,EAAE,eAAevB,EAAM,cAAA;AAAA,IAAc;;;kBArI5C4B,EAoBeC,GAAA;AAAA,QAnBZ,eAAaC,EAAAjB,CAAA;AAAA,QACb,OAAOZ,EAAA;AAAA,QACP,OAAOA,EAAA;AAAA,QACP,UAAUA,EAAA;AAAA,QACV,MAAMA,EAAA;AAAA,QACN,mBAAiBA,EAAA;AAAA,QACjB,SAASA,EAAA;AAAA,QACV,WAAU;AAAA,QACT,uBAAoB6B,EAAAf,CAAA;AAAA,QACpB,SAAOe,EAAAd,CAAA;AAAA,QACP,SAAOc,EAAAb,CAAA;AAAA,QACP,WAASa,EAAAJ,CAAA;AAAA,MAAA;QAEMK,EAAAA,OAAO;gBAAU;AAAA,gBAC/B,MAAuB;AAAA,YAAvBC,EAAuBC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,UAAA;;;QAETF,EAAAA,OAAO;gBAAS;AAAA,gBAC9B,MAAsB;AAAA,YAAtBC,EAAsBC,EAAA,QAAA,UAAA,CAAA,GAAA,QAAA,EAAA;AAAA,UAAA;;;;;;;"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { defineComponent as P, computed as S, resolveComponent as N, withDirectives as O, createBlock as W, openBlock as $, createSlots as j, withCtx as M, createVNode as L, createTextVNode as D, toDisplayString as q, renderSlot as C, unref as z } from "vue";
|
|
2
|
+
import { Mask as B } from "maska";
|
|
3
|
+
var H = Object.defineProperty, J = (n, e, t) => e in n ? H(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t, y = (n, e, t) => J(n, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
+
const x = {
|
|
5
|
+
"#": { pattern: /[0-9]/ },
|
|
6
|
+
"@": { pattern: /[a-zA-Z]/ },
|
|
7
|
+
"*": { pattern: /[a-zA-Z0-9]/ }
|
|
8
|
+
}, I = (n, e, t) => n.replaceAll(e, "").replace(t, ".").replace("..", ".").replace(/[^.\d]/g, ""), V = (n, e, t) => {
|
|
9
|
+
var s;
|
|
10
|
+
return new Intl.NumberFormat(((s = t.number) == null ? void 0 : s.locale) ?? "en", {
|
|
11
|
+
minimumFractionDigits: n,
|
|
12
|
+
maximumFractionDigits: e,
|
|
13
|
+
roundingMode: "trunc"
|
|
14
|
+
});
|
|
15
|
+
}, U = (n, e = !0, t) => {
|
|
16
|
+
var s, a, r, o;
|
|
17
|
+
const p = ((s = t.number) == null ? void 0 : s.unsigned) !== !0 && n.startsWith("-") ? "-" : "", u = ((a = t.number) == null ? void 0 : a.fraction) ?? 0;
|
|
18
|
+
let l = V(0, u, t);
|
|
19
|
+
const m = l.formatToParts(1000.12), c = ((r = m.find((i) => i.type === "group")) == null ? void 0 : r.value) ?? " ", g = ((o = m.find((i) => i.type === "decimal")) == null ? void 0 : o.value) ?? ".", h = I(n, c, g);
|
|
20
|
+
if (Number.isNaN(parseFloat(h))) return p;
|
|
21
|
+
const v = h.split(".");
|
|
22
|
+
if (v[1] != null && v[1].length >= 1) {
|
|
23
|
+
const i = v[1].length <= u ? v[1].length : u;
|
|
24
|
+
l = V(i, u, t);
|
|
25
|
+
}
|
|
26
|
+
let k = l.format(parseFloat(h));
|
|
27
|
+
return e ? u > 0 && h.endsWith(".") && !h.slice(0, -1).includes(".") && (k += g) : k = I(k, c, g), p + k;
|
|
28
|
+
}, T = (n) => JSON.parse(n.replaceAll("'", '"')), Z = (n, e = {}) => {
|
|
29
|
+
const t = { ...e };
|
|
30
|
+
n.dataset.maska != null && n.dataset.maska !== "" && (t.mask = G(n.dataset.maska)), n.dataset.maskaEager != null && (t.eager = E(n.dataset.maskaEager)), n.dataset.maskaReversed != null && (t.reversed = E(n.dataset.maskaReversed)), n.dataset.maskaTokensReplace != null && (t.tokensReplace = E(n.dataset.maskaTokensReplace)), n.dataset.maskaTokens != null && (t.tokens = K(n.dataset.maskaTokens));
|
|
31
|
+
const s = {};
|
|
32
|
+
return n.dataset.maskaNumberLocale != null && (s.locale = n.dataset.maskaNumberLocale), n.dataset.maskaNumberFraction != null && (s.fraction = parseInt(n.dataset.maskaNumberFraction)), n.dataset.maskaNumberUnsigned != null && (s.unsigned = E(n.dataset.maskaNumberUnsigned)), (n.dataset.maskaNumber != null || Object.values(s).length > 0) && (t.number = s), t;
|
|
33
|
+
}, E = (n) => n !== "" ? !!JSON.parse(n) : !0, G = (n) => n.startsWith("[") && n.endsWith("]") ? T(n) : n, K = (n) => {
|
|
34
|
+
if (n.startsWith("{") && n.endsWith("}"))
|
|
35
|
+
return T(n);
|
|
36
|
+
const e = {};
|
|
37
|
+
return n.split("|").forEach((t) => {
|
|
38
|
+
const s = t.split(":");
|
|
39
|
+
e[s[0]] = {
|
|
40
|
+
pattern: F() ? new RegExp(s[1], "u") : new RegExp(s[1]),
|
|
41
|
+
optional: s[2] === "optional",
|
|
42
|
+
multiple: s[2] === "multiple",
|
|
43
|
+
repeated: s[2] === "repeated"
|
|
44
|
+
};
|
|
45
|
+
}), e;
|
|
46
|
+
}, F = () => {
|
|
47
|
+
try {
|
|
48
|
+
return new RegExp("\\p{L}", "u"), !0;
|
|
49
|
+
} catch {
|
|
50
|
+
return !1;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
class Q {
|
|
54
|
+
constructor(e = {}) {
|
|
55
|
+
y(this, "opts", {}), y(this, "memo", /* @__PURE__ */ new Map());
|
|
56
|
+
const t = { ...e };
|
|
57
|
+
if (t.tokens != null) {
|
|
58
|
+
t.tokens = t.tokensReplace ? { ...t.tokens } : { ...x, ...t.tokens };
|
|
59
|
+
for (const s of Object.values(t.tokens))
|
|
60
|
+
typeof s.pattern == "string" && (s.pattern = F() ? new RegExp(s.pattern, "u") : new RegExp(s.pattern));
|
|
61
|
+
} else
|
|
62
|
+
t.tokens = x;
|
|
63
|
+
Array.isArray(t.mask) && (t.mask.length > 1 ? t.mask = [...t.mask].sort((s, a) => s.length - a.length) : t.mask = t.mask[0] ?? ""), t.mask === "" && (t.mask = null), this.opts = t;
|
|
64
|
+
}
|
|
65
|
+
masked(e) {
|
|
66
|
+
return this.process(String(e), this.findMask(String(e)));
|
|
67
|
+
}
|
|
68
|
+
unmasked(e) {
|
|
69
|
+
return this.process(String(e), this.findMask(String(e)), !1);
|
|
70
|
+
}
|
|
71
|
+
isEager() {
|
|
72
|
+
return this.opts.eager === !0;
|
|
73
|
+
}
|
|
74
|
+
isReversed() {
|
|
75
|
+
return this.opts.reversed === !0;
|
|
76
|
+
}
|
|
77
|
+
completed(e) {
|
|
78
|
+
const t = this.findMask(String(e));
|
|
79
|
+
if (this.opts.mask == null || t == null) return !1;
|
|
80
|
+
const s = this.process(String(e), t).length;
|
|
81
|
+
return typeof this.opts.mask == "string" ? s >= this.opts.mask.length : s >= t.length;
|
|
82
|
+
}
|
|
83
|
+
findMask(e) {
|
|
84
|
+
const t = this.opts.mask;
|
|
85
|
+
if (t == null)
|
|
86
|
+
return null;
|
|
87
|
+
if (typeof t == "string")
|
|
88
|
+
return t;
|
|
89
|
+
if (typeof t == "function")
|
|
90
|
+
return t(e);
|
|
91
|
+
const s = this.process(e, t.slice(-1).pop() ?? "", !1);
|
|
92
|
+
return t.find((a) => this.process(e, a, !1).length >= s.length) ?? "";
|
|
93
|
+
}
|
|
94
|
+
escapeMask(e) {
|
|
95
|
+
const t = [], s = [];
|
|
96
|
+
return e.split("").forEach((a, r) => {
|
|
97
|
+
a === "!" && e[r - 1] !== "!" ? s.push(r - s.length) : t.push(a);
|
|
98
|
+
}), { mask: t.join(""), escaped: s };
|
|
99
|
+
}
|
|
100
|
+
process(e, t, s = !0) {
|
|
101
|
+
if (this.opts.number != null) return U(e, s, this.opts);
|
|
102
|
+
if (t == null) return e;
|
|
103
|
+
const a = `v=${e},mr=${t},m=${s ? 1 : 0}`;
|
|
104
|
+
if (this.memo.has(a)) return this.memo.get(a);
|
|
105
|
+
const { mask: r, escaped: o } = this.escapeMask(t), p = [], u = this.opts.tokens != null ? this.opts.tokens : {}, l = this.isReversed() ? -1 : 1, m = this.isReversed() ? "unshift" : "push", c = this.isReversed() ? 0 : r.length - 1, g = this.isReversed() ? () => i > -1 && d > -1 : () => i < r.length && d < e.length, h = (b) => !this.isReversed() && b <= c || this.isReversed() && b >= c;
|
|
106
|
+
let v, k = -1, i = this.isReversed() ? r.length - 1 : 0, d = this.isReversed() ? e.length - 1 : 0, R = !1;
|
|
107
|
+
for (; g(); ) {
|
|
108
|
+
const b = r.charAt(i), f = u[b], A = f?.transform != null ? f.transform(e.charAt(d)) : e.charAt(d);
|
|
109
|
+
if (!o.includes(i) && f != null ? (A.match(f.pattern) != null ? (p[m](A), f.repeated ? (k === -1 ? k = i : i === c && i !== k && (i = k - l), c === k && (i -= l)) : f.multiple && (R = !0, i -= l), i += l) : f.multiple ? R && (i += l, d -= l, R = !1) : A === v ? v = void 0 : f.optional && (i += l, d -= l), d += l) : (s && !this.isEager() && p[m](b), A === b && !this.isEager() ? d += l : v = b, this.isEager() || (i += l)), this.isEager())
|
|
110
|
+
for (; h(i) && (u[r.charAt(i)] == null || o.includes(i)); ) {
|
|
111
|
+
if (s) {
|
|
112
|
+
if (p[m](r.charAt(i)), e.charAt(d) === r.charAt(i)) {
|
|
113
|
+
i += l, d += l;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
} else r.charAt(i) === e.charAt(d) && (d += l);
|
|
117
|
+
i += l;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return this.memo.set(a, p.join("")), this.memo.get(a);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
class X {
|
|
124
|
+
constructor(e, t = {}) {
|
|
125
|
+
y(this, "items", /* @__PURE__ */ new Map()), y(this, "eventAbortController"), y(this, "onInput", (s) => {
|
|
126
|
+
if (s instanceof CustomEvent && s.type === "input" && !s.isTrusted && !s.bubbles)
|
|
127
|
+
return;
|
|
128
|
+
const a = s.target, r = this.items.get(a);
|
|
129
|
+
if (r === void 0) return;
|
|
130
|
+
const o = "inputType" in s && s.inputType.startsWith("delete"), p = r.isEager(), u = o && p && r.unmasked(a.value) === "" ? "" : a.value;
|
|
131
|
+
this.fixCursor(a, o, () => this.setValue(a, u));
|
|
132
|
+
}), this.options = t, this.eventAbortController = new AbortController(), this.init(this.getInputs(e));
|
|
133
|
+
}
|
|
134
|
+
update(e = {}) {
|
|
135
|
+
this.options = { ...e }, this.init(Array.from(this.items.keys()));
|
|
136
|
+
}
|
|
137
|
+
updateValue(e) {
|
|
138
|
+
var t;
|
|
139
|
+
e.value !== "" && e.value !== ((t = this.processInput(e)) == null ? void 0 : t.masked) && this.setValue(e, e.value);
|
|
140
|
+
}
|
|
141
|
+
destroy() {
|
|
142
|
+
this.eventAbortController.abort(), this.items.clear();
|
|
143
|
+
}
|
|
144
|
+
init(e) {
|
|
145
|
+
const t = this.getOptions(this.options);
|
|
146
|
+
for (const s of e) {
|
|
147
|
+
if (!this.items.has(s)) {
|
|
148
|
+
const { signal: r } = this.eventAbortController;
|
|
149
|
+
s.addEventListener("input", this.onInput, { capture: !0, signal: r });
|
|
150
|
+
}
|
|
151
|
+
const a = new Q(Z(s, t));
|
|
152
|
+
this.items.set(s, a), queueMicrotask(() => this.updateValue(s)), s.selectionStart === null && a.isEager() && console.warn("Maska: input of `%s` type is not supported", s.type);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
getInputs(e) {
|
|
156
|
+
return typeof e == "string" ? Array.from(document.querySelectorAll(e)) : "length" in e ? Array.from(e) : [e];
|
|
157
|
+
}
|
|
158
|
+
getOptions(e) {
|
|
159
|
+
const { onMaska: t, preProcess: s, postProcess: a, ...r } = e;
|
|
160
|
+
return r;
|
|
161
|
+
}
|
|
162
|
+
fixCursor(e, t, s) {
|
|
163
|
+
var a, r;
|
|
164
|
+
const o = e.selectionStart, p = e.value;
|
|
165
|
+
if (s(), o === null || o === p.length && !t) return;
|
|
166
|
+
const u = e.value, l = p.slice(0, o), m = u.slice(0, o), c = (a = this.processInput(e, l)) == null ? void 0 : a.unmasked, g = (r = this.processInput(e, m)) == null ? void 0 : r.unmasked;
|
|
167
|
+
if (c === void 0 || g === void 0) return;
|
|
168
|
+
let h = o;
|
|
169
|
+
l !== m && (h += t ? u.length - p.length : c.length - g.length), e.setSelectionRange(h, h);
|
|
170
|
+
}
|
|
171
|
+
setValue(e, t) {
|
|
172
|
+
const s = this.processInput(e, t);
|
|
173
|
+
s !== void 0 && (e.value = s.masked, this.options.onMaska != null && (Array.isArray(this.options.onMaska) ? this.options.onMaska.forEach((a) => a(s)) : this.options.onMaska(s)), e.dispatchEvent(new CustomEvent("maska", { detail: s })), e.dispatchEvent(new CustomEvent("input", { detail: s.masked })));
|
|
174
|
+
}
|
|
175
|
+
processInput(e, t) {
|
|
176
|
+
const s = this.items.get(e);
|
|
177
|
+
if (s === void 0) return;
|
|
178
|
+
let a = t ?? e.value;
|
|
179
|
+
this.options.preProcess != null && (a = this.options.preProcess(a));
|
|
180
|
+
let r = s.masked(a);
|
|
181
|
+
return this.options.postProcess != null && (r = this.options.postProcess(r)), {
|
|
182
|
+
masked: r,
|
|
183
|
+
unmasked: s.unmasked(a),
|
|
184
|
+
completed: s.completed(a)
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const w = /* @__PURE__ */ new WeakMap(), Y = (n, e) => {
|
|
189
|
+
if (n.arg == null || n.instance == null) return;
|
|
190
|
+
const t = "setup" in n.instance.$.type;
|
|
191
|
+
n.arg in n.instance ? n.instance[n.arg] = e : t && console.warn("Maska: please expose `%s` using defineExpose", n.arg);
|
|
192
|
+
}, _ = (n, e) => {
|
|
193
|
+
var t;
|
|
194
|
+
const s = n instanceof HTMLInputElement ? n : n.querySelector("input");
|
|
195
|
+
if (s == null || s?.type === "file") return;
|
|
196
|
+
let a = {};
|
|
197
|
+
if (e.value != null && (a = typeof e.value == "string" ? { mask: e.value } : { ...e.value }), e.arg != null) {
|
|
198
|
+
const r = (o) => {
|
|
199
|
+
const p = e.modifiers.unmasked ? o.unmasked : e.modifiers.completed ? o.completed : o.masked;
|
|
200
|
+
Y(e, p);
|
|
201
|
+
};
|
|
202
|
+
a.onMaska = a.onMaska == null ? r : Array.isArray(a.onMaska) ? [...a.onMaska, r] : [a.onMaska, r];
|
|
203
|
+
}
|
|
204
|
+
w.has(s) ? (t = w.get(s)) == null || t.update(a) : w.set(s, new X(s, a));
|
|
205
|
+
}, se = /* @__PURE__ */ P({
|
|
206
|
+
__name: "FzPhoneField",
|
|
207
|
+
props: {
|
|
208
|
+
modelValue: { default: "" },
|
|
209
|
+
label: { default: "Telefone" },
|
|
210
|
+
rules: { default: () => [] },
|
|
211
|
+
disabled: { type: Boolean },
|
|
212
|
+
hint: { default: "" },
|
|
213
|
+
icon: { default: "mdi-phone-outline" },
|
|
214
|
+
variant: { default: "underlined" }
|
|
215
|
+
},
|
|
216
|
+
emits: ["update:modelValue"],
|
|
217
|
+
setup(n, { emit: e }) {
|
|
218
|
+
const t = n, s = e, a = new B({ mask: ["(##) ####-####", "(##) #####-####"], eager: !0 }), r = S(() => a.masked(t.modelValue ?? "")), o = S(() => !!t.hint), p = {
|
|
219
|
+
mask: ["(##) ####-####", "(##) #####-####"],
|
|
220
|
+
eager: !0,
|
|
221
|
+
onMaska: (u) => {
|
|
222
|
+
s("update:modelValue", u.unmasked);
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
return (u, l) => {
|
|
226
|
+
const m = N("v-icon"), c = N("v-text-field");
|
|
227
|
+
return O(($(), W(c, {
|
|
228
|
+
"model-value": r.value,
|
|
229
|
+
label: n.label,
|
|
230
|
+
rules: n.rules,
|
|
231
|
+
disabled: n.disabled,
|
|
232
|
+
hint: n.hint,
|
|
233
|
+
"persistent-hint": o.value,
|
|
234
|
+
variant: n.variant,
|
|
235
|
+
inputmode: "tel",
|
|
236
|
+
autocomplete: "tel"
|
|
237
|
+
}, j({
|
|
238
|
+
"prepend-inner": M(() => [
|
|
239
|
+
L(m, null, {
|
|
240
|
+
default: M(() => [
|
|
241
|
+
D(q(n.icon), 1)
|
|
242
|
+
]),
|
|
243
|
+
_: 1
|
|
244
|
+
})
|
|
245
|
+
]),
|
|
246
|
+
_: 2
|
|
247
|
+
}, [
|
|
248
|
+
u.$slots.prepend ? {
|
|
249
|
+
name: "prepend",
|
|
250
|
+
fn: M(() => [
|
|
251
|
+
C(u.$slots, "prepend")
|
|
252
|
+
]),
|
|
253
|
+
key: "0"
|
|
254
|
+
} : void 0,
|
|
255
|
+
u.$slots.append ? {
|
|
256
|
+
name: "append",
|
|
257
|
+
fn: M(() => [
|
|
258
|
+
C(u.$slots, "append")
|
|
259
|
+
]),
|
|
260
|
+
key: "1"
|
|
261
|
+
} : void 0
|
|
262
|
+
]), 1032, ["model-value", "label", "rules", "disabled", "hint", "persistent-hint", "variant"])), [
|
|
263
|
+
[z(_), p]
|
|
264
|
+
]);
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
export {
|
|
269
|
+
se as _,
|
|
270
|
+
_ as k
|
|
271
|
+
};
|
|
272
|
+
//# sourceMappingURL=inputs-FzPhoneField-DKMx53pK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs-FzPhoneField-DKMx53pK.js","sources":["../../../node_modules/.pnpm/maska@3.2.0/node_modules/maska/dist/maska.mjs","../../../node_modules/.pnpm/maska@3.2.0/node_modules/maska/dist/vue.mjs","../../../src/components/inputs/FzPhoneField.vue"],"sourcesContent":["var S = Object.defineProperty;\nvar x = (n, t, e) => t in n ? S(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;\nvar A = (n, t, e) => x(n, typeof t != \"symbol\" ? t + \"\" : t, e);\nconst R = {\n \"#\": { pattern: /[0-9]/ },\n \"@\": { pattern: /[a-zA-Z]/ },\n \"*\": { pattern: /[a-zA-Z0-9]/ }\n}, N = (n, t, e) => n.replaceAll(t, \"\").replace(e, \".\").replace(\"..\", \".\").replace(/[^.\\d]/g, \"\"), w = (n, t, e) => {\n var s;\n return new Intl.NumberFormat(((s = e.number) == null ? void 0 : s.locale) ?? \"en\", {\n minimumFractionDigits: n,\n maximumFractionDigits: t,\n roundingMode: \"trunc\"\n });\n}, P = (n, t = !0, e) => {\n var k, g, b, d;\n const s = ((k = e.number) == null ? void 0 : k.unsigned) !== !0 && n.startsWith(\"-\") ? \"-\" : \"\", r = ((g = e.number) == null ? void 0 : g.fraction) ?? 0;\n let a = w(0, r, e);\n const u = a.formatToParts(1000.12), p = ((b = u.find((o) => o.type === \"group\")) == null ? void 0 : b.value) ?? \" \", f = ((d = u.find((o) => o.type === \"decimal\")) == null ? void 0 : d.value) ?? \".\", i = N(n, p, f);\n if (Number.isNaN(parseFloat(i))) return s;\n const h = i.split(\".\");\n if (h[1] != null && h[1].length >= 1) {\n const o = h[1].length <= r ? h[1].length : r;\n a = w(o, r, e);\n }\n let l = a.format(parseFloat(i));\n return t ? r > 0 && i.endsWith(\".\") && !i.slice(0, -1).includes(\".\") && (l += f) : l = N(l, p, f), s + l;\n}, C = (n) => JSON.parse(n.replaceAll(\"'\", '\"')), F = (n, t = {}) => {\n const e = { ...t };\n n.dataset.maska != null && n.dataset.maska !== \"\" && (e.mask = T(n.dataset.maska)), n.dataset.maskaEager != null && (e.eager = E(n.dataset.maskaEager)), n.dataset.maskaReversed != null && (e.reversed = E(n.dataset.maskaReversed)), n.dataset.maskaTokensReplace != null && (e.tokensReplace = E(n.dataset.maskaTokensReplace)), n.dataset.maskaTokens != null && (e.tokens = W(n.dataset.maskaTokens));\n const s = {};\n return n.dataset.maskaNumberLocale != null && (s.locale = n.dataset.maskaNumberLocale), n.dataset.maskaNumberFraction != null && (s.fraction = parseInt(n.dataset.maskaNumberFraction)), n.dataset.maskaNumberUnsigned != null && (s.unsigned = E(n.dataset.maskaNumberUnsigned)), (n.dataset.maskaNumber != null || Object.values(s).length > 0) && (e.number = s), e;\n}, E = (n) => n !== \"\" ? !!JSON.parse(n) : !0, T = (n) => n.startsWith(\"[\") && n.endsWith(\"]\") ? C(n) : n, W = (n) => {\n if (n.startsWith(\"{\") && n.endsWith(\"}\"))\n return C(n);\n const t = {};\n return n.split(\"|\").forEach((e) => {\n const s = e.split(\":\");\n t[s[0]] = {\n pattern: I() ? new RegExp(s[1], \"u\") : new RegExp(s[1]),\n optional: s[2] === \"optional\",\n multiple: s[2] === \"multiple\",\n repeated: s[2] === \"repeated\"\n };\n }), t;\n}, I = () => {\n try {\n return new RegExp(\"\\\\p{L}\", \"u\"), !0;\n } catch {\n return !1;\n }\n};\nclass O {\n constructor(t = {}) {\n A(this, \"opts\", {});\n A(this, \"memo\", /* @__PURE__ */ new Map());\n const e = { ...t };\n if (e.tokens != null) {\n e.tokens = e.tokensReplace ? { ...e.tokens } : { ...R, ...e.tokens };\n for (const s of Object.values(e.tokens))\n typeof s.pattern == \"string\" && (s.pattern = I() ? new RegExp(s.pattern, \"u\") : new RegExp(s.pattern));\n } else\n e.tokens = R;\n Array.isArray(e.mask) && (e.mask.length > 1 ? e.mask = [...e.mask].sort((s, r) => s.length - r.length) : e.mask = e.mask[0] ?? \"\"), e.mask === \"\" && (e.mask = null), this.opts = e;\n }\n masked(t) {\n return this.process(String(t), this.findMask(String(t)));\n }\n unmasked(t) {\n return this.process(String(t), this.findMask(String(t)), !1);\n }\n isEager() {\n return this.opts.eager === !0;\n }\n isReversed() {\n return this.opts.reversed === !0;\n }\n completed(t) {\n const e = this.findMask(String(t));\n if (this.opts.mask == null || e == null) return !1;\n const s = this.process(String(t), e).length;\n return typeof this.opts.mask == \"string\" ? s >= this.opts.mask.length : s >= e.length;\n }\n findMask(t) {\n const e = this.opts.mask;\n if (e == null)\n return null;\n if (typeof e == \"string\")\n return e;\n if (typeof e == \"function\")\n return e(t);\n const s = this.process(t, e.slice(-1).pop() ?? \"\", !1);\n return e.find((r) => this.process(t, r, !1).length >= s.length) ?? \"\";\n }\n escapeMask(t) {\n const e = [], s = [];\n return t.split(\"\").forEach((r, a) => {\n r === \"!\" && t[a - 1] !== \"!\" ? s.push(a - s.length) : e.push(r);\n }), { mask: e.join(\"\"), escaped: s };\n }\n process(t, e, s = !0) {\n if (this.opts.number != null) return P(t, s, this.opts);\n if (e == null) return t;\n const r = `v=${t},mr=${e},m=${s ? 1 : 0}`;\n if (this.memo.has(r)) return this.memo.get(r);\n const { mask: a, escaped: u } = this.escapeMask(e), p = [], f = this.opts.tokens != null ? this.opts.tokens : {}, i = this.isReversed() ? -1 : 1, h = this.isReversed() ? \"unshift\" : \"push\", l = this.isReversed() ? 0 : a.length - 1, k = this.isReversed() ? () => o > -1 && c > -1 : () => o < a.length && c < t.length, g = (v) => !this.isReversed() && v <= l || this.isReversed() && v >= l;\n let b, d = -1, o = this.isReversed() ? a.length - 1 : 0, c = this.isReversed() ? t.length - 1 : 0, M = !1;\n for (; k(); ) {\n const v = a.charAt(o), m = f[v], y = (m == null ? void 0 : m.transform) != null ? m.transform(t.charAt(c)) : t.charAt(c);\n if (!u.includes(o) && m != null ? (y.match(m.pattern) != null ? (p[h](y), m.repeated ? (d === -1 ? d = o : o === l && o !== d && (o = d - i), l === d && (o -= i)) : m.multiple && (M = !0, o -= i), o += i) : m.multiple ? M && (o += i, c -= i, M = !1) : y === b ? b = void 0 : m.optional && (o += i, c -= i), c += i) : (s && !this.isEager() && p[h](v), y === v && !this.isEager() ? c += i : b = v, this.isEager() || (o += i)), this.isEager())\n for (; g(o) && (f[a.charAt(o)] == null || u.includes(o)); ) {\n if (s) {\n if (p[h](a.charAt(o)), t.charAt(c) === a.charAt(o)) {\n o += i, c += i;\n continue;\n }\n } else a.charAt(o) === t.charAt(c) && (c += i);\n o += i;\n }\n }\n return this.memo.set(r, p.join(\"\")), this.memo.get(r);\n }\n}\nclass V {\n constructor(t, e = {}) {\n A(this, \"items\", /* @__PURE__ */ new Map());\n A(this, \"eventAbortController\");\n A(this, \"onInput\", (t) => {\n if (t instanceof CustomEvent && t.type === \"input\" && !t.isTrusted && !t.bubbles)\n return;\n const e = t.target, s = this.items.get(e);\n if (s === void 0) return;\n const r = \"inputType\" in t && t.inputType.startsWith(\"delete\"), a = s.isEager(), u = r && a && s.unmasked(e.value) === \"\" ? \"\" : e.value;\n this.fixCursor(e, r, () => this.setValue(e, u));\n });\n this.options = e, this.eventAbortController = new AbortController(), this.init(this.getInputs(t));\n }\n update(t = {}) {\n this.options = { ...t }, this.init(Array.from(this.items.keys()));\n }\n updateValue(t) {\n var e;\n t.value !== \"\" && t.value !== ((e = this.processInput(t)) == null ? void 0 : e.masked) && this.setValue(t, t.value);\n }\n destroy() {\n this.eventAbortController.abort(), this.items.clear();\n }\n init(t) {\n const e = this.getOptions(this.options);\n for (const s of t) {\n if (!this.items.has(s)) {\n const { signal: a } = this.eventAbortController;\n s.addEventListener(\"input\", this.onInput, { capture: !0, signal: a });\n }\n const r = new O(F(s, e));\n this.items.set(s, r), queueMicrotask(() => this.updateValue(s)), s.selectionStart === null && r.isEager() && console.warn(\"Maska: input of `%s` type is not supported\", s.type);\n }\n }\n getInputs(t) {\n return typeof t == \"string\" ? Array.from(document.querySelectorAll(t)) : \"length\" in t ? Array.from(t) : [t];\n }\n getOptions(t) {\n const { onMaska: e, preProcess: s, postProcess: r, ...a } = t;\n return a;\n }\n fixCursor(t, e, s) {\n var k, g;\n const r = t.selectionStart, a = t.value;\n if (s(), r === null || r === a.length && !e) return;\n const u = t.value, p = a.slice(0, r), f = u.slice(0, r), i = (k = this.processInput(t, p)) == null ? void 0 : k.unmasked, h = (g = this.processInput(t, f)) == null ? void 0 : g.unmasked;\n if (i === void 0 || h === void 0) return;\n let l = r;\n p !== f && (l += e ? u.length - a.length : i.length - h.length), t.setSelectionRange(l, l);\n }\n setValue(t, e) {\n const s = this.processInput(t, e);\n s !== void 0 && (t.value = s.masked, this.options.onMaska != null && (Array.isArray(this.options.onMaska) ? this.options.onMaska.forEach((r) => r(s)) : this.options.onMaska(s)), t.dispatchEvent(new CustomEvent(\"maska\", { detail: s })), t.dispatchEvent(new CustomEvent(\"input\", { detail: s.masked })));\n }\n processInput(t, e) {\n const s = this.items.get(t);\n if (s === void 0) return;\n let r = e ?? t.value;\n this.options.preProcess != null && (r = this.options.preProcess(r));\n let a = s.masked(r);\n return this.options.postProcess != null && (a = this.options.postProcess(a)), {\n masked: a,\n unmasked: s.unmasked(r),\n completed: s.completed(r)\n };\n }\n}\nexport {\n O as Mask,\n V as MaskInput,\n R as tokens\n};\n","import { MaskInput as n } from \"./maska.mjs\";\nconst l = /* @__PURE__ */ new WeakMap(), c = (e, s) => {\n if (e.arg == null || e.instance == null) return;\n const a = \"setup\" in e.instance.$.type;\n e.arg in e.instance ? e.instance[e.arg] = s : a && console.warn(\"Maska: please expose `%s` using defineExpose\", e.arg);\n}, k = (e, s) => {\n var u;\n const a = e instanceof HTMLInputElement ? e : e.querySelector(\"input\");\n if (a == null || (a == null ? void 0 : a.type) === \"file\") return;\n let t = {};\n if (s.value != null && (t = typeof s.value == \"string\" ? { mask: s.value } : { ...s.value }), s.arg != null) {\n const o = (r) => {\n const p = s.modifiers.unmasked ? r.unmasked : s.modifiers.completed ? r.completed : r.masked;\n c(s, p);\n };\n t.onMaska = t.onMaska == null ? o : Array.isArray(t.onMaska) ? [...t.onMaska, o] : [t.onMaska, o];\n }\n l.has(a) ? (u = l.get(a)) == null || u.update(t) : l.set(a, new n(a, t));\n};\nexport {\n k as vMaska\n};\n","<template>\n <v-text-field\n v-maska=\"maskOptions\"\n :model-value=\"displayValue\"\n :label=\"label\"\n :rules=\"rules\"\n :disabled=\"disabled\"\n :hint=\"hint\"\n :persistent-hint=\"hasHint\"\n :variant=\"variant\"\n inputmode=\"tel\"\n autocomplete=\"tel\"\n >\n <template #prepend-inner>\n <v-icon>{{ icon }}</v-icon>\n </template>\n <template v-if=\"$slots.prepend\" #prepend>\n <slot name=\"prepend\" />\n </template>\n <template v-if=\"$slots.append\" #append>\n <slot name=\"append\" />\n </template>\n </v-text-field>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { vMaska } from 'maska/vue';\nimport { Mask } from 'maska';\nimport type { TextFieldVariant } from '@/utils/types';\n\ntype ValidationRule = (value: string) => boolean | string;\n\ntype MaskaDetail = { masked: string; unmasked: string; completed: boolean };\n\ninterface Props {\n modelValue?: string\n label?: string\n rules?: ValidationRule[]\n disabled?: boolean\n hint?: string\n icon?: string\n variant?: TextFieldVariant\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: '',\n label: 'Telefone',\n rules: () => [],\n hint: '',\n icon: 'mdi-phone-outline',\n variant: 'underlined',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n}>();\n\nconst mask = new Mask({ mask: ['(##) ####-####', '(##) #####-####'], eager: true });\n\nconst displayValue = computed(() => mask.masked(props.modelValue ?? ''));\n\nconst hasHint = computed(() => !!props.hint);\n\nconst maskOptions = {\n mask: ['(##) ####-####', '(##) #####-####'],\n eager: true,\n onMaska: (detail: MaskaDetail) => {\n emit('update:modelValue', detail.unmasked);\n },\n};\n</script>\n"],"names":["S","x","t","e","A","R","N","w","P","k","g","b","d","s","r","a","u","p","o","f","i","h","l","C","F","T","W","I","O","c","v","M","m","y","V","n","props","__props","emit","__emit","mask","Mask","displayValue","computed","hasHint","maskOptions","detail","_createBlock","_component_v_text_field","_createVNode","_component_v_icon","$slots","_renderSlot","_ctx"],"mappings":"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","x_google_ignoreList":[0,1]}
|