@verdnatura/vn-front-lib 0.0.10 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/components-D0b_k2T_.js +3305 -0
  2. package/dist/components-DImdPW9s.cjs +2 -0
  3. package/dist/components.cjs +1 -1
  4. package/dist/components.js +2 -2
  5. package/dist/composables-CAk9XaOa.js +3836 -0
  6. package/dist/composables-CoozYWaG.cjs +6 -0
  7. package/dist/composables.cjs +1 -1
  8. package/dist/composables.js +2 -2
  9. package/dist/filters.cjs +1 -0
  10. package/dist/filters.js +62 -0
  11. package/dist/rolldown-runtime-mLOUI7ql.cjs +1 -0
  12. package/dist/stores.cjs +1 -1
  13. package/dist/stores.js +144 -2
  14. package/dist/utils.cjs +1 -0
  15. package/dist/utils.js +131 -0
  16. package/dist/vn-front-lib.cjs +1 -1
  17. package/dist/vn-front-lib.css +1 -1
  18. package/dist/vn-front-lib.js +6 -7
  19. package/lib/components/dialogs/VnConfirm.vue +142 -0
  20. package/lib/components/feedback/VnSkeletonForm.vue +14 -0
  21. package/lib/components/feedback/VnSpinner.vue +63 -0
  22. package/lib/components/index.js +4 -0
  23. package/lib/components/inputs/VnInput.vue +5 -0
  24. package/lib/components/models/VnForm.vue +492 -0
  25. package/lib/composables/index.js +7 -0
  26. package/lib/composables/tMobile.js +8 -0
  27. package/lib/composables/useArrayData.js +451 -0
  28. package/lib/composables/useForm.js +12 -0
  29. package/lib/composables/useNotify.js +24 -0
  30. package/lib/composables/useObjectComparison.js +67 -0
  31. package/lib/composables/useQueryResolver.js +306 -0
  32. package/lib/composables/useState.js +81 -0
  33. package/lib/filters/filterPanel.js +95 -0
  34. package/lib/filters/getDifferences.js +18 -0
  35. package/lib/filters/getUpdatedValues.js +6 -0
  36. package/lib/filters/index.js +5 -0
  37. package/lib/filters/isDialogOpened.js +3 -0
  38. package/lib/filters/onBeforeSave.js +9 -0
  39. package/lib/stores/index.js +2 -0
  40. package/lib/stores/useArrayDataStore.js +82 -0
  41. package/lib/stores/useStateStore.js +84 -0
  42. package/lib/utils/advancedFilters.js +125 -0
  43. package/lib/utils/index.js +2 -0
  44. package/lib/utils/trackAnalytics.js +18 -0
  45. package/package.json +9 -2
  46. package/dist/components-bhz_GJoK.cjs +0 -1
  47. package/dist/components-vVkogsiW.js +0 -2532
  48. package/dist/useRequired-BviE2qpV.cjs +0 -1
  49. package/dist/useRequired-CTxBp3qy.js +0 -58
  50. package/dist/useValidationsStore-9Fxtj_pd.js +0 -12
  51. package/dist/useValidationsStore-BZZg24ZP.cjs +0 -1
package/dist/utils.js ADDED
@@ -0,0 +1,131 @@
1
+ import e from "axios";
2
+ //#region lib/utils/advancedFilters.js
3
+ var t = "eq", n = {
4
+ eq: {
5
+ icon: "=",
6
+ label: "equal",
7
+ operator: "eq",
8
+ default: !0,
9
+ expr: (e) => e,
10
+ localEval: (e, t) => e == t,
11
+ isBasic: !0
12
+ },
13
+ neq: {
14
+ icon: "≠",
15
+ label: "distinct",
16
+ operator: "neq",
17
+ expr: (e) => ({ neq: e }),
18
+ isNegation: !0,
19
+ localEval: (e, t) => e != t
20
+ },
21
+ inq: {
22
+ icon: "∈",
23
+ label: "include",
24
+ operator: "inq",
25
+ isArray: !0,
26
+ expr: (e) => ({ inq: e }),
27
+ localEval: (e, t) => t.includes(e)
28
+ },
29
+ nin: {
30
+ icon: "∉",
31
+ label: "exclude",
32
+ operator: "nin",
33
+ isArray: !0,
34
+ expr: (e) => ({ nin: e }),
35
+ isNegation: !0,
36
+ localEval: (e, t) => !t.includes(e)
37
+ },
38
+ like: {
39
+ icon: "%",
40
+ label: "contains",
41
+ operator: "like",
42
+ isInput: !0,
43
+ expr: (e) => ({ like: i(e, `%${e}%`) }),
44
+ localEval: (e, t) => a(e, t)
45
+ },
46
+ nlike: {
47
+ icon: "≁",
48
+ label: "notContains",
49
+ operator: "nlike",
50
+ isInput: !0,
51
+ expr: (e) => ({ nlike: i(e, `%${e}%`) }),
52
+ isNegation: !0,
53
+ localEval: (e, t) => !a(e, t)
54
+ },
55
+ lt: {
56
+ icon: "<",
57
+ label: "lessThan",
58
+ operator: "lt",
59
+ expr: (e) => ({ lt: e }),
60
+ localEval: (e, t) => e < t,
61
+ isInput: !0
62
+ },
63
+ gt: {
64
+ icon: ">",
65
+ label: "greaterThan",
66
+ operator: "gt",
67
+ isInput: !0,
68
+ expr: (e) => ({ gt: e }),
69
+ localEval: (e, t) => e > t
70
+ },
71
+ lte: {
72
+ icon: "≤",
73
+ label: "lessThanEqualTo",
74
+ operator: "lte",
75
+ isInput: !0,
76
+ expr: (e) => ({ lte: e }),
77
+ localEval: (e, t) => e <= t
78
+ },
79
+ gte: {
80
+ icon: "≥",
81
+ label: "greaterThanEqualTo",
82
+ operator: "gte",
83
+ isInput: !0,
84
+ expr: (e) => ({ gte: e }),
85
+ localEval: (e, t) => e >= t
86
+ },
87
+ null: {
88
+ icon: "∅",
89
+ label: "null",
90
+ operator: "null",
91
+ expr: () => ({ eq: null }),
92
+ localEval: (e) => e == null,
93
+ isBasic: !0,
94
+ isNullable: !0
95
+ },
96
+ notNull: {
97
+ icon: "≠",
98
+ label: "notNull",
99
+ operator: "notNull",
100
+ expr: () => ({ neq: null }),
101
+ localEval: (e) => e != null,
102
+ isBasic: !0,
103
+ isNullable: !0
104
+ }
105
+ }, r = Object.values(n);
106
+ function i(e, t) {
107
+ return e.includes("%") ? e : t;
108
+ }
109
+ function a(e, t) {
110
+ let n = e == null ? "" : String(e), r = (t == null ? "" : String(t)).replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace(/%/g, ".*").replace(/_/g, ".");
111
+ return RegExp(`^${r}$`, "i").test(n);
112
+ }
113
+ //#endregion
114
+ //#region lib/utils/trackAnalytics.js
115
+ var o = /* @__PURE__ */ new Set();
116
+ async function s() {
117
+ try {
118
+ let { data: t } = await e.get("AnalyticPaths");
119
+ t.forEach((e) => o.add(e.path));
120
+ } catch (e) {
121
+ console.error("Error loading allowed paths:", e);
122
+ }
123
+ }
124
+ async function c(t, n) {
125
+ o.size || await s(), o.has(n) && e.post("AnalyticEvents", {
126
+ name: t,
127
+ path: n
128
+ });
129
+ }
130
+ //#endregion
131
+ export { n as advancedFilters, r as advancedFiltersList, t as defaultOperator, c as trackAnalyticEvent };
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./components-bhz_GJoK.cjs"),t=require("./useRequired-BviE2qpV.cjs");require("./composables.cjs");function n(t){for(let n in e.t)t.component(n,e.t[n])}var r={install:n};exports.VnFetch=e.n,exports.VnInput=e.r,exports.default=r,exports.useRequired=t.t,exports.useValidator=t.n;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./composables-CoozYWaG.cjs"),t=require("./components-DImdPW9s.cjs");function n(e){for(let n in t.t)e.component(n,t.t[n])}var r={install:n};exports.VnConfirm=t.s,exports.VnFetch=t.r,exports.VnForm=t.n,exports.VnInput=t.i,exports.VnSkeletonForm=t.o,exports.VnSpinner=t.a,exports.default=r,exports.fetchLocalData=e.n,exports.focusFirstInput=e.d,exports.getObjectByKeys=e.a,exports.getObjectDifferences=e.o,exports.getRemoteAndLocalParams=e.r,exports.isComparableObject=e.s,exports.isSameValue=e.c,exports.requestData=e.i,exports.tMobile=e.p,exports.useArrayData=e.f,exports.useNotify=e.u,exports.useObjectComparison=e.l,exports.useRequired=e.y,exports.useState=e.t,exports.useValidator=e.b;
@@ -1,2 +1,2 @@
1
- .uppercase-icon{cursor:pointer;transition:color .3s,transform .2s}.uppercase-icon:hover{color:var(--q-color-primary);transform:scale(1.2)}
1
+ .q-card[data-v-f01eb4e4]{white-space:pre-line;min-width:350px}.vn-spinner[data-v-e5edebae]{border:3px solid color-mix(in srgb, var(--vn-label-color) 15%, transparent);border-top-color:var(--q-primary);box-sizing:border-box;border-radius:50%;min-width:16px;min-height:16px;animation:.7s cubic-bezier(.4,.15,.6,.85) infinite vn-spin-e5edebae}@keyframes vn-spin-e5edebae{to{transform:rotate(360deg)}}.vn-spinner-fade-enter-active[data-v-e5edebae],.vn-spinner-fade-leave-active[data-v-e5edebae]{transition:opacity .3s,transform .3s}.vn-spinner-fade-enter-from[data-v-e5edebae],.vn-spinner-fade-leave-to[data-v-e5edebae]{opacity:0;transform:scale(.6)}.uppercase-icon{cursor:pointer;transition:color .3s,transform .2s}.uppercase-icon:hover{color:var(--q-color-primary);transform:scale(1.2)}.q-notifications[data-v-ffc76361]{color:#000}.q-card[data-v-ffc76361]{padding:32px}
2
2
  /*$vite$:1*/
@@ -1,10 +1,9 @@
1
- import { n as e, r as t, t as n } from "./components-vVkogsiW.js";
2
- import { n as r, t as i } from "./useRequired-CTxBp3qy.js";
3
- import "./composables.js";
1
+ import { a as e, b as t, c as n, d as r, f as i, i as a, l as o, n as s, o as c, p as l, r as u, s as d, t as f, u as p, y as m } from "./composables-CAk9XaOa.js";
2
+ import { a as h, i as g, n as _, o as v, r as y, s as b, t as x } from "./components-D0b_k2T_.js";
4
3
  //#region lib/main.js
5
- function a(e) {
6
- for (let t in n) e.component(t, n[t]);
4
+ function S(e) {
5
+ for (let t in x) e.component(t, x[t]);
7
6
  }
8
- var o = { install: a };
7
+ var C = { install: S };
9
8
  //#endregion
10
- export { e as VnFetch, t as VnInput, o as default, i as useRequired, r as useValidator };
9
+ export { b as VnConfirm, y as VnFetch, _ as VnForm, g as VnInput, v as VnSkeletonForm, h as VnSpinner, C as default, s as fetchLocalData, r as focusFirstInput, e as getObjectByKeys, c as getObjectDifferences, u as getRemoteAndLocalParams, d as isComparableObject, n as isSameValue, a as requestData, l as tMobile, i as useArrayData, p as useNotify, o as useObjectComparison, m as useRequired, f as useState, t as useValidator };
@@ -0,0 +1,142 @@
1
+ <script setup>
2
+ import { ref } from 'vue';
3
+ import { useDialogPluginComponent } from 'quasar';
4
+ import { useI18n } from 'vue-i18n';
5
+
6
+ const { t } = useI18n();
7
+
8
+ const props = defineProps({
9
+ icon: {
10
+ type: String,
11
+ default: null,
12
+ },
13
+ title: {
14
+ type: String,
15
+ default: null,
16
+ },
17
+ message: {
18
+ type: [String, Boolean],
19
+ default: null,
20
+ },
21
+ data: {
22
+ type: Object,
23
+ required: false,
24
+ default: null,
25
+ },
26
+ promise: {
27
+ type: Function,
28
+ required: false,
29
+ default: null,
30
+ },
31
+ persistent: {
32
+ type: Boolean,
33
+ default: false,
34
+ },
35
+ closable: {
36
+ type: Boolean,
37
+ default: true,
38
+ },
39
+ cardClass: {
40
+ type: String,
41
+ default: null,
42
+ },
43
+ });
44
+
45
+ const emit = defineEmits(['confirm', 'cancel', ...useDialogPluginComponent.emits]);
46
+ defineExpose({ show: () => dialogRef.value.show(), hide: () => dialogRef.value.hide() });
47
+
48
+ const { dialogRef, onDialogHide, onDialogOK, onDialogCancel } =
49
+ useDialogPluginComponent();
50
+
51
+ const title = props.title || t('Confirm');
52
+ const message =
53
+ props.message ||
54
+ (props.message !== false ? t('Are you sure you want to continue?') : false);
55
+
56
+ const isLoading = ref(false);
57
+
58
+ async function confirm() {
59
+ isLoading.value = true;
60
+ if (props.promise) {
61
+ try {
62
+ await props.promise(props.data);
63
+ } finally {
64
+ isLoading.value = false;
65
+ }
66
+ }
67
+ onDialogOK(props.data);
68
+ }
69
+
70
+ function cancel() {
71
+ emit('cancel');
72
+ onDialogCancel();
73
+ }
74
+ </script>
75
+ <template>
76
+ <QDialog ref="dialogRef" :persistent="persistent" @hide="onDialogHide">
77
+ <QCard class="q-pa-sm" :class="cardClass">
78
+ <QCardSection class="row items-center q-pb-none">
79
+ <QAvatar
80
+ :icon="icon"
81
+ color="primary"
82
+ text-color="white"
83
+ size="xl"
84
+ v-if="icon"
85
+ />
86
+ <span class="text-h6">{{ title }}</span>
87
+ <QSpace />
88
+ <QBtn
89
+ v-if="closable"
90
+ icon="close"
91
+ :disable="isLoading"
92
+ flat
93
+ round
94
+ dense
95
+ @click="cancel()"
96
+ />
97
+ </QCardSection>
98
+ <QCardSection class="q-pb-none" data-cy="VnConfirm_message">
99
+ <span v-if="message !== false" v-html="message" />
100
+ </QCardSection>
101
+ <QCardSection class="row items-center q-pt-none">
102
+ <slot name="custom-html"></slot>
103
+ </QCardSection>
104
+ <QCardActions v-if="$slots.actions" align="right">
105
+ <slot name="actions" :actions="{ confirm, cancel }"></slot>
106
+ </QCardActions>
107
+ <QCardActions v-else align="right">
108
+ <QBtn
109
+ :label="t('globals.cancel')"
110
+ color="primary"
111
+ :disable="isLoading"
112
+ flat
113
+ @click="cancel()"
114
+ data-cy="VnConfirm_cancel"
115
+ />
116
+ <QBtn
117
+ :label="t('globals.confirm')"
118
+ :title="t('globals.confirm')"
119
+ color="primary"
120
+ :loading="isLoading"
121
+ @click="confirm()"
122
+ unelevated
123
+ autofocus
124
+ data-cy="VnConfirm_confirm"
125
+ />
126
+ </QCardActions>
127
+ </QCard>
128
+ </QDialog>
129
+ </template>
130
+
131
+ <style lang="scss" scoped>
132
+ .q-card {
133
+ min-width: 350px;
134
+ white-space: pre-line;
135
+ }
136
+ </style>
137
+
138
+ <i18n>
139
+ es:
140
+ Confirm: Confirmar
141
+ Are you sure you want to continue?: ¿Seguro que quieres continuar?
142
+ </i18n>
@@ -0,0 +1,14 @@
1
+ <template>
2
+ <div class="row q-gutter-md q-mb-md">
3
+ <QSkeleton type="QInput" class="col" square />
4
+ <QSkeleton type="QInput" class="col" square />
5
+ </div>
6
+ <div class="row q-gutter-md q-mb-md">
7
+ <QSkeleton type="QInput" class="col" square />
8
+ <QSkeleton type="QInput" class="col" square />
9
+ </div>
10
+ <div class="row q-gutter-md q-mb-md">
11
+ <QSkeleton type="QInput" class="col" square />
12
+ <QSkeleton type="QInput" class="col" square />
13
+ </div>
14
+ </template>
@@ -0,0 +1,63 @@
1
+ <script setup>
2
+ defineProps({
3
+ size: {
4
+ type: String,
5
+ default: '40px',
6
+ },
7
+ noTransition: {
8
+ type: Boolean,
9
+ default: false,
10
+ },
11
+ });
12
+
13
+ const sizeMap = {
14
+ xs: '16px',
15
+ sm: '24px',
16
+ md: '40px',
17
+ lg: '56px',
18
+ xl: '72px',
19
+ };
20
+ </script>
21
+ <template>
22
+ <Transition v-if="!noTransition" name="vn-spinner-fade" appear>
23
+ <div
24
+ class="vn-spinner"
25
+ :style="{ width: sizeMap[size] || size, height: sizeMap[size] || size }"
26
+ ></div>
27
+ </Transition>
28
+ <div
29
+ v-else
30
+ class="vn-spinner"
31
+ :style="{ width: sizeMap[size] || size, height: sizeMap[size] || size }"
32
+ ></div>
33
+ </template>
34
+ <style scoped>
35
+ .vn-spinner {
36
+ min-width: 16px;
37
+ min-height: 16px;
38
+ border: 3px solid color-mix(in srgb, var(--vn-label-color) 15%, transparent);
39
+ border-top-color: var(--q-primary);
40
+ border-radius: 50%;
41
+ animation: vn-spin 0.7s cubic-bezier(0.4, 0.15, 0.6, 0.85) infinite;
42
+ box-sizing: border-box;
43
+ }
44
+
45
+ @keyframes vn-spin {
46
+ to {
47
+ transform: rotate(360deg);
48
+ }
49
+ }
50
+
51
+ .vn-spinner-fade-enter-active,
52
+ .vn-spinner-fade-leave-active {
53
+ transition:
54
+ opacity 0.3s ease,
55
+ transform 0.3s ease;
56
+ }
57
+
58
+ .vn-spinner-fade-enter-from,
59
+ .vn-spinner-fade-leave-to {
60
+ opacity: 0;
61
+ transform: scale(0.6);
62
+ }
63
+ </style>
@@ -1,2 +1,6 @@
1
+ export { default as VnConfirm } from './dialogs/VnConfirm.vue';
2
+ export { default as VnSkeletonForm } from './feedback/VnSkeletonForm.vue';
3
+ export { default as VnSpinner } from './feedback/VnSpinner.vue';
1
4
  export { default as VnInput } from './inputs/VnInput.vue';
2
5
  export { default as VnFetch } from './models/VnFetch.vue';
6
+ export { default as VnForm } from './models/VnForm.vue';
@@ -37,6 +37,10 @@ const $props = defineProps({
37
37
  type: Boolean,
38
38
  default: false,
39
39
  },
40
+ clearOnHover: {
41
+ type: Boolean,
42
+ default: false,
43
+ },
40
44
  });
41
45
 
42
46
  const model = defineModel({ default: null });
@@ -177,6 +181,7 @@ onMounted(() => {
177
181
  <QIcon
178
182
  name="close"
179
183
  size="xs"
184
+ v-show="!clearOnHover || hover"
180
185
  class="cursor-pointer"
181
186
  :style="{
182
187
  visibility: