@wgalleti/primevue-components 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-BS3zNV1Z.js +3126 -0
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-BS3zNV1Z.js.map +1 -0
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-DlnsDNZ5.cjs +12 -0
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-DlnsDNZ5.cjs.map +1 -0
- package/dist/components/crud/WCrudView.vue.d.ts +15 -1
- package/dist/components/form/WDateRange.vue.d.ts +23 -0
- package/dist/components/form/WFileUpload.vue.d.ts +48 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components.cjs +1 -1
- package/dist/components.cjs.map +1 -1
- package/dist/components.js +153 -20
- package/dist/components.js.map +1 -1
- package/dist/composables/defineCrudConfig.d.ts +18 -0
- package/dist/composables/index.d.ts +1 -0
- package/dist/composables.cjs +1 -1
- package/dist/composables.cjs.map +1 -1
- package/dist/composables.js +13 -9
- package/dist/composables.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +3 -3
- package/dist/types/manager.d.ts +5 -0
- package/dist/useApi-5Pr4nXAa.cjs +2 -0
- package/dist/useApi-5Pr4nXAa.cjs.map +1 -0
- package/dist/useApi-Bxrw3Sia.js +395 -0
- package/dist/useApi-Bxrw3Sia.js.map +1 -0
- package/package.json +2 -2
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-B70Uk-1x.cjs +0 -12
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-B70Uk-1x.cjs.map +0 -1
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-BVlG1in1.js +0 -3024
- package/dist/WProgressFlow.vue_vue_type_script_setup_true_lang-BVlG1in1.js.map +0 -1
- package/dist/useApi-B692TOWz.js +0 -383
- package/dist/useApi-B692TOWz.js.map +0 -1
- package/dist/useApi-BIlKLud-.cjs +0 -2
- package/dist/useApi-BIlKLud-.cjs.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CrudManagerReturn } from '../../types/manager';
|
|
2
|
+
import { FieldDef } from '../../types/field';
|
|
2
3
|
import { KpiItem } from '../../types/kpi';
|
|
3
4
|
type __VLS_Props = {
|
|
4
5
|
crud: CrudManagerReturn<any>;
|
|
@@ -26,6 +27,9 @@ type __VLS_Props = {
|
|
|
26
27
|
csvFilename?: string;
|
|
27
28
|
csvScope?: 'all' | 'page';
|
|
28
29
|
csvPageSize?: number;
|
|
30
|
+
/** Chave de persistência do estado de coluna (visibilidade) em localStorage.
|
|
31
|
+
* Opt-in: quando definida, exibe o seletor de colunas e persiste o que foi ocultado. */
|
|
32
|
+
persistState?: string;
|
|
29
33
|
};
|
|
30
34
|
declare function __VLS_template(): {
|
|
31
35
|
attrs: Partial<{}>;
|
|
@@ -36,7 +40,7 @@ declare function __VLS_template(): {
|
|
|
36
40
|
data: any;
|
|
37
41
|
value: any;
|
|
38
42
|
}) => any>> & Partial<Record<`field-${string}`, (_: {
|
|
39
|
-
field:
|
|
43
|
+
field: FieldDef;
|
|
40
44
|
formData: Record<string, unknown>;
|
|
41
45
|
isEditing: boolean;
|
|
42
46
|
setFormField: (f: string, v: unknown) => void;
|
|
@@ -76,6 +80,11 @@ declare function __VLS_template(): {
|
|
|
76
80
|
}): any;
|
|
77
81
|
};
|
|
78
82
|
refs: {
|
|
83
|
+
chooser: ({
|
|
84
|
+
$props: import('primevue/popover').PopoverProps & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
|
|
85
|
+
$slots: import('primevue/popover').PopoverSlots;
|
|
86
|
+
$emit: ((e: "show") => void) & ((e: "hide") => void);
|
|
87
|
+
} & import('primevue/popover').PopoverMethods) | null;
|
|
79
88
|
cm: ({
|
|
80
89
|
$props: import('primevue/contextmenu').ContextMenuProps & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
|
|
81
90
|
$slots: import('primevue/contextmenu').ContextMenuSlots;
|
|
@@ -114,6 +123,11 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
|
|
|
114
123
|
csvScope: "all" | "page";
|
|
115
124
|
csvPageSize: number;
|
|
116
125
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
126
|
+
chooser: ({
|
|
127
|
+
$props: import('primevue/popover').PopoverProps & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
|
|
128
|
+
$slots: import('primevue/popover').PopoverSlots;
|
|
129
|
+
$emit: ((e: "show") => void) & ((e: "hide") => void);
|
|
130
|
+
} & import('primevue/popover').PopoverMethods) | null;
|
|
117
131
|
cm: ({
|
|
118
132
|
$props: import('primevue/contextmenu').ContextMenuProps & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
|
|
119
133
|
$slots: import('primevue/contextmenu').ContextMenuSlots;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seletor de intervalo de datas (período). Wrapper fino do DatePicker em modo
|
|
3
|
+
* range com padrões pt-BR. O `v-model` guarda `[início, fim]` como `Date[]`.
|
|
4
|
+
*/
|
|
5
|
+
type __VLS_Props = {
|
|
6
|
+
modelValue?: Date[] | null;
|
|
7
|
+
placeholder?: string;
|
|
8
|
+
minDate?: Date;
|
|
9
|
+
maxDate?: Date;
|
|
10
|
+
showButtonBar?: boolean;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
};
|
|
13
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
14
|
+
"update:modelValue": (value: Date[] | null) => any;
|
|
15
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
16
|
+
"onUpdate:modelValue"?: ((value: Date[] | null) => any) | undefined;
|
|
17
|
+
}>, {
|
|
18
|
+
modelValue: Date[] | null;
|
|
19
|
+
placeholder: string;
|
|
20
|
+
disabled: boolean;
|
|
21
|
+
showButtonBar: boolean;
|
|
22
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
23
|
+
export default _default;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upload de arquivo(s) genérico (single ou multiple), sem dependência pesada.
|
|
3
|
+
* O `v-model` guarda `File` (single) ou `File[]` (multiple). Valida tamanho por
|
|
4
|
+
* arquivo e emite `error` para os que excederem.
|
|
5
|
+
*/
|
|
6
|
+
type __VLS_Props = {
|
|
7
|
+
modelValue?: File | File[] | null;
|
|
8
|
+
multiple?: boolean;
|
|
9
|
+
accept?: string;
|
|
10
|
+
/** Tamanho máximo por arquivo em bytes (default 10MB). */
|
|
11
|
+
maxSize?: number;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
chooseLabel?: string;
|
|
14
|
+
};
|
|
15
|
+
declare function __VLS_template(): {
|
|
16
|
+
attrs: Partial<{}>;
|
|
17
|
+
slots: {
|
|
18
|
+
empty?(_: {}): any;
|
|
19
|
+
};
|
|
20
|
+
refs: {
|
|
21
|
+
input: HTMLInputElement;
|
|
22
|
+
};
|
|
23
|
+
rootEl: HTMLDivElement;
|
|
24
|
+
};
|
|
25
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
26
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
27
|
+
error: (message: string) => any;
|
|
28
|
+
"update:modelValue": (value: File | File[] | null) => any;
|
|
29
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
30
|
+
onError?: ((message: string) => any) | undefined;
|
|
31
|
+
"onUpdate:modelValue"?: ((value: File | File[] | null) => any) | undefined;
|
|
32
|
+
}>, {
|
|
33
|
+
modelValue: File | File[] | null;
|
|
34
|
+
disabled: boolean;
|
|
35
|
+
accept: string;
|
|
36
|
+
maxSize: number;
|
|
37
|
+
multiple: boolean;
|
|
38
|
+
chooseLabel: string;
|
|
39
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
40
|
+
input: HTMLInputElement;
|
|
41
|
+
}, HTMLDivElement>;
|
|
42
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
43
|
+
export default _default;
|
|
44
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
45
|
+
new (): {
|
|
46
|
+
$slots: S;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
@@ -4,6 +4,8 @@ export { default as WCrudColumnRenderer } from './crud/WCrudColumnRenderer.vue';
|
|
|
4
4
|
export { default as WAutoCompleteFK } from './form/WAutoCompleteFK.vue';
|
|
5
5
|
export { default as WFormRenderer } from './form/WFormRenderer.vue';
|
|
6
6
|
export { default as WImageCropper } from './form/WImageCropper.vue';
|
|
7
|
+
export { default as WDateRange } from './form/WDateRange.vue';
|
|
8
|
+
export { default as WFileUpload } from './form/WFileUpload.vue';
|
|
7
9
|
export { default as WMoneyInput } from './form/WMoneyInput.vue';
|
|
8
10
|
export { default as WTransferList } from './form/WTransferList.vue';
|
|
9
11
|
export { default as WStatusTag } from './ui/WStatusTag.vue';
|
package/dist/components.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("./WProgressFlow.vue_vue_type_script_setup_true_lang-DlnsDNZ5.cjs"),e=require("vue"),$=require("primevue/datepicker"),p=require("primevue/button"),v=e.defineComponent({__name:"WDateRange",props:{modelValue:{default:null},placeholder:{default:"Selecione o período"},minDate:{},maxDate:{},showButtonBar:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(a,{emit:m}){const o=m;function r(d){o("update:modelValue",d??null)}return(d,u)=>(e.openBlock(),e.createBlock(e.unref($),{"model-value":a.modelValue??void 0,"selection-mode":"range",placeholder:a.placeholder,"min-date":a.minDate,"max-date":a.maxDate,"show-button-bar":a.showButtonBar,disabled:a.disabled,"date-format":"dd/mm/yy",fluid:"","onUpdate:modelValue":r},null,8,["model-value","placeholder","min-date","max-date","show-button-bar","disabled"]))}}),W={class:"w-fileupload",style:{display:"flex","flex-direction":"column",gap:"0.5rem"}},B=["accept","multiple"],h={key:0,style:{"list-style":"none",margin:"0",padding:"0",display:"flex","flex-direction":"column",gap:"0.35rem"}},x={style:{flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},V={style:{opacity:"0.6"}},b=e.defineComponent({__name:"WFileUpload",props:{modelValue:{default:null},multiple:{type:Boolean,default:!1},accept:{default:void 0},maxSize:{default:10485760},disabled:{type:Boolean,default:!1},chooseLabel:{default:"Selecionar arquivo"}},emits:["update:modelValue","error"],setup(a,{emit:m}){const o=a,r=m,d=e.ref(null),u=e.computed(()=>{const t=o.modelValue;return t?Array.isArray(t)?t:[t]:[]});function f(){var t;(t=d.value)==null||t.click()}function _(t){const n=t.target,s=Array.from(n.files||[]);n.value="";const i=[];for(const c of s){if(c.size>o.maxSize){r("error",`"${c.name}" acima do limite de ${(o.maxSize/1048576).toFixed(1)}MB.`);continue}i.push(c)}i.length&&r("update:modelValue",o.multiple?[...u.value,...i]:i[0])}function y(t){if(!o.multiple){r("update:modelValue",null);return}const n=u.value.slice();n.splice(t,1),r("update:modelValue",n.length?n:null)}function g(t){return t<1024?`${t} B`:t<1048576?`${(t/1024).toFixed(0)} KB`:`${(t/1048576).toFixed(1)} MB`}return(t,n)=>(e.openBlock(),e.createElementBlock("div",W,[e.createElementVNode("div",null,[e.createVNode(e.unref(p),{type:"button",label:a.chooseLabel,icon:"pi pi-upload",outlined:"",size:"small",disabled:a.disabled,onClick:f},null,8,["label","disabled"])]),e.createElementVNode("input",{ref_key:"input",ref:d,type:"file",accept:a.accept,multiple:a.multiple,style:{display:"none"},onChange:_},null,40,B),u.value.length?(e.openBlock(),e.createElementBlock("ul",h,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(s,i)=>(e.openBlock(),e.createElementBlock("li",{key:`${s.name}-${i}`,style:{display:"flex","align-items":"center",gap:"0.5rem","font-size":"0.85rem"}},[n[0]||(n[0]=e.createElementVNode("i",{class:"pi pi-file",style:{opacity:"0.6"}},null,-1)),e.createElementVNode("span",x,e.toDisplayString(s.name),1),e.createElementVNode("span",V,e.toDisplayString(g(s.size)),1),e.createVNode(e.unref(p),{type:"button",icon:"pi pi-times",text:"",rounded:"",size:"small",severity:"danger",disabled:a.disabled,onClick:c=>y(i)},null,8,["disabled","onClick"])]))),128))])):e.renderSlot(t.$slots,"empty",{},()=>[n[1]||(n[1]=e.createElementVNode("span",{style:{"font-size":"0.8rem",opacity:"0.6"}},"Nenhum arquivo selecionado",-1))],void 0,1)]))}});exports.WActionBar=l._sfc_main;exports.WAutoCompleteFK=l._sfc_main$1;exports.WCrudColumnRenderer=l._sfc_main$2;exports.WCrudFormDialog=l._sfc_main$3;exports.WCrudView=l._sfc_main$4;exports.WDetailHeader=l._sfc_main$5;exports.WEmptyState=l._sfc_main$6;exports.WFormRenderer=l._sfc_main$7;exports.WFormSection=l._sfc_main$8;exports.WImageCropper=l.WImageCropper;exports.WInfoCard=l._sfc_main$9;exports.WKpiCard=l._sfc_main$10;exports.WKpiGrid=l._sfc_main$11;exports.WMoneyInput=l._sfc_main$12;exports.WPageHeader=l._sfc_main$13;exports.WProgressFlow=l._sfc_main$14;exports.WSectionHeader=l._sfc_main$15;exports.WStatusTag=l._sfc_main$16;exports.WTransferList=l._sfc_main$17;exports.WDateRange=v;exports.WFileUpload=b;
|
|
2
2
|
//# sourceMappingURL=components.cjs.map
|
package/dist/components.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"components.cjs","sources":["../src/components/form/WDateRange.vue","../src/components/form/WFileUpload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport DatePicker from 'primevue/datepicker'\n\n/**\n * Seletor de intervalo de datas (período). Wrapper fino do DatePicker em modo\n * range com padrões pt-BR. O `v-model` guarda `[início, fim]` como `Date[]`.\n */\nwithDefaults(\n defineProps<{\n modelValue?: Date[] | null\n placeholder?: string\n minDate?: Date\n maxDate?: Date\n showButtonBar?: boolean\n disabled?: boolean\n }>(),\n {\n modelValue: null,\n placeholder: 'Selecione o período',\n showButtonBar: true,\n disabled: false,\n },\n)\n\nconst emit = defineEmits<{ 'update:modelValue': [value: Date[] | null] }>()\n\nfunction onUpdate(v: unknown) {\n emit('update:modelValue', (v as Date[] | null) ?? null)\n}\n</script>\n\n<template>\n <DatePicker\n :model-value=\"modelValue ?? undefined\"\n selection-mode=\"range\"\n :placeholder=\"placeholder\"\n :min-date=\"minDate\"\n :max-date=\"maxDate\"\n :show-button-bar=\"showButtonBar\"\n :disabled=\"disabled\"\n date-format=\"dd/mm/yy\"\n fluid\n @update:model-value=\"onUpdate\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport Button from 'primevue/button'\n\n/**\n * Upload de arquivo(s) genérico (single ou multiple), sem dependência pesada.\n * O `v-model` guarda `File` (single) ou `File[]` (multiple). Valida tamanho por\n * arquivo e emite `error` para os que excederem.\n */\nconst props = withDefaults(\n defineProps<{\n modelValue?: File | File[] | null\n multiple?: boolean\n accept?: string\n /** Tamanho máximo por arquivo em bytes (default 10MB). */\n maxSize?: number\n disabled?: boolean\n chooseLabel?: string\n }>(),\n {\n modelValue: null,\n multiple: false,\n accept: undefined,\n maxSize: 10_485_760,\n disabled: false,\n chooseLabel: 'Selecionar arquivo',\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: File | File[] | null]\n error: [message: string]\n}>()\n\nconst input = ref<HTMLInputElement | null>(null)\nconst files = computed<File[]>(() => {\n const v = props.modelValue\n if (!v) return []\n return Array.isArray(v) ? v : [v]\n})\n\nfunction open() {\n input.value?.click()\n}\n\nfunction onChange(e: Event) {\n const el = e.target as HTMLInputElement\n const picked = Array.from(el.files || [])\n el.value = ''\n const valid: File[] = []\n for (const f of picked) {\n if (f.size > props.maxSize) {\n emit('error', `\"${f.name}\" acima do limite de ${(props.maxSize / 1_048_576).toFixed(1)}MB.`)\n continue\n }\n valid.push(f)\n }\n if (!valid.length) return\n emit('update:modelValue', props.multiple ? [...files.value, ...valid] : valid[0])\n}\n\nfunction removeAt(i: number) {\n if (!props.multiple) {\n emit('update:modelValue', null)\n return\n }\n const next = files.value.slice()\n next.splice(i, 1)\n emit('update:modelValue', next.length ? next : null)\n}\n\nfunction fmtSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1_048_576) return `${(bytes / 1024).toFixed(0)} KB`\n return `${(bytes / 1_048_576).toFixed(1)} MB`\n}\n</script>\n\n<template>\n <div class=\"w-fileupload\" style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n <div>\n <Button\n type=\"button\"\n :label=\"chooseLabel\"\n icon=\"pi pi-upload\"\n outlined\n size=\"small\"\n :disabled=\"disabled\"\n @click=\"open\"\n />\n </div>\n <input\n ref=\"input\"\n type=\"file\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n style=\"display: none\"\n @change=\"onChange\"\n />\n <ul\n v-if=\"files.length\"\n style=\"\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 0.35rem;\n \"\n >\n <li\n v-for=\"(f, i) in files\"\n :key=\"`${f.name}-${i}`\"\n style=\"display: flex; align-items: center; gap: 0.5rem; font-size: 0.85rem\"\n >\n <i class=\"pi pi-file\" style=\"opacity: 0.6\" />\n <span style=\"flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap\">\n {{ f.name }}\n </span>\n <span style=\"opacity: 0.6\">{{ fmtSize(f.size) }}</span>\n <Button\n type=\"button\"\n icon=\"pi pi-times\"\n text\n rounded\n size=\"small\"\n severity=\"danger\"\n :disabled=\"disabled\"\n @click=\"removeAt(i)\"\n />\n </li>\n </ul>\n <slot v-else name=\"empty\">\n <span style=\"font-size: 0.8rem; opacity: 0.6\">Nenhum arquivo selecionado</span>\n </slot>\n </div>\n</template>\n"],"names":["emit","__emit","onUpdate","v","_createBlock","_unref","DatePicker","__props","props","input","ref","files","computed","open","_a","onChange","e","el","picked","valid","f","removeAt","i","next","fmtSize","bytes","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_createVNode","Button","_hoisted_3","_Fragment","_renderList","_hoisted_4","_toDisplayString","_hoisted_5","$event","_renderSlot","_ctx","_cache"],"mappings":"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"}
|
package/dist/components.js
CHANGED
|
@@ -1,23 +1,156 @@
|
|
|
1
|
-
import { _ as
|
|
1
|
+
import { _ as N, a as P, b as T, c as j, d as G, e as J, f as O, g as Q, h as X, W as Y, i as Z, j as _, k as ee, l as le, m as te, n as ae, o as oe, p as ne, q as ie } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-BS3zNV1Z.js";
|
|
2
|
+
import { defineComponent as h, openBlock as u, createBlock as V, unref as f, ref as k, computed as C, createElementBlock as c, createElementVNode as i, createVNode as y, Fragment as S, renderList as w, toDisplayString as W, renderSlot as F } from "vue";
|
|
3
|
+
import z from "primevue/datepicker";
|
|
4
|
+
import g from "primevue/button";
|
|
5
|
+
const E = /* @__PURE__ */ h({
|
|
6
|
+
__name: "WDateRange",
|
|
7
|
+
props: {
|
|
8
|
+
modelValue: { default: null },
|
|
9
|
+
placeholder: { default: "Selecione o período" },
|
|
10
|
+
minDate: {},
|
|
11
|
+
maxDate: {},
|
|
12
|
+
showButtonBar: { type: Boolean, default: !0 },
|
|
13
|
+
disabled: { type: Boolean, default: !1 }
|
|
14
|
+
},
|
|
15
|
+
emits: ["update:modelValue"],
|
|
16
|
+
setup(l, { emit: p }) {
|
|
17
|
+
const a = p;
|
|
18
|
+
function n(d) {
|
|
19
|
+
a("update:modelValue", d ?? null);
|
|
20
|
+
}
|
|
21
|
+
return (d, r) => (u(), V(f(z), {
|
|
22
|
+
"model-value": l.modelValue ?? void 0,
|
|
23
|
+
"selection-mode": "range",
|
|
24
|
+
placeholder: l.placeholder,
|
|
25
|
+
"min-date": l.minDate,
|
|
26
|
+
"max-date": l.maxDate,
|
|
27
|
+
"show-button-bar": l.showButtonBar,
|
|
28
|
+
disabled: l.disabled,
|
|
29
|
+
"date-format": "dd/mm/yy",
|
|
30
|
+
fluid: "",
|
|
31
|
+
"onUpdate:modelValue": n
|
|
32
|
+
}, null, 8, ["model-value", "placeholder", "min-date", "max-date", "show-button-bar", "disabled"]));
|
|
33
|
+
}
|
|
34
|
+
}), D = {
|
|
35
|
+
class: "w-fileupload",
|
|
36
|
+
style: { display: "flex", "flex-direction": "column", gap: "0.5rem" }
|
|
37
|
+
}, $ = ["accept", "multiple"], A = {
|
|
38
|
+
key: 0,
|
|
39
|
+
style: { "list-style": "none", margin: "0", padding: "0", display: "flex", "flex-direction": "column", gap: "0.35rem" }
|
|
40
|
+
}, K = { style: { flex: "1", overflow: "hidden", "text-overflow": "ellipsis", "white-space": "nowrap" } }, L = { style: { opacity: "0.6" } }, H = /* @__PURE__ */ h({
|
|
41
|
+
__name: "WFileUpload",
|
|
42
|
+
props: {
|
|
43
|
+
modelValue: { default: null },
|
|
44
|
+
multiple: { type: Boolean, default: !1 },
|
|
45
|
+
accept: { default: void 0 },
|
|
46
|
+
maxSize: { default: 10485760 },
|
|
47
|
+
disabled: { type: Boolean, default: !1 },
|
|
48
|
+
chooseLabel: { default: "Selecionar arquivo" }
|
|
49
|
+
},
|
|
50
|
+
emits: ["update:modelValue", "error"],
|
|
51
|
+
setup(l, { emit: p }) {
|
|
52
|
+
const a = l, n = p, d = k(null), r = C(() => {
|
|
53
|
+
const e = a.modelValue;
|
|
54
|
+
return e ? Array.isArray(e) ? e : [e] : [];
|
|
55
|
+
});
|
|
56
|
+
function v() {
|
|
57
|
+
var e;
|
|
58
|
+
(e = d.value) == null || e.click();
|
|
59
|
+
}
|
|
60
|
+
function x(e) {
|
|
61
|
+
const t = e.target, s = Array.from(t.files || []);
|
|
62
|
+
t.value = "";
|
|
63
|
+
const o = [];
|
|
64
|
+
for (const m of s) {
|
|
65
|
+
if (m.size > a.maxSize) {
|
|
66
|
+
n("error", `"${m.name}" acima do limite de ${(a.maxSize / 1048576).toFixed(1)}MB.`);
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
o.push(m);
|
|
70
|
+
}
|
|
71
|
+
o.length && n("update:modelValue", a.multiple ? [...r.value, ...o] : o[0]);
|
|
72
|
+
}
|
|
73
|
+
function b(e) {
|
|
74
|
+
if (!a.multiple) {
|
|
75
|
+
n("update:modelValue", null);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const t = r.value.slice();
|
|
79
|
+
t.splice(e, 1), n("update:modelValue", t.length ? t : null);
|
|
80
|
+
}
|
|
81
|
+
function B(e) {
|
|
82
|
+
return e < 1024 ? `${e} B` : e < 1048576 ? `${(e / 1024).toFixed(0)} KB` : `${(e / 1048576).toFixed(1)} MB`;
|
|
83
|
+
}
|
|
84
|
+
return (e, t) => (u(), c("div", D, [
|
|
85
|
+
i("div", null, [
|
|
86
|
+
y(f(g), {
|
|
87
|
+
type: "button",
|
|
88
|
+
label: l.chooseLabel,
|
|
89
|
+
icon: "pi pi-upload",
|
|
90
|
+
outlined: "",
|
|
91
|
+
size: "small",
|
|
92
|
+
disabled: l.disabled,
|
|
93
|
+
onClick: v
|
|
94
|
+
}, null, 8, ["label", "disabled"])
|
|
95
|
+
]),
|
|
96
|
+
i("input", {
|
|
97
|
+
ref_key: "input",
|
|
98
|
+
ref: d,
|
|
99
|
+
type: "file",
|
|
100
|
+
accept: l.accept,
|
|
101
|
+
multiple: l.multiple,
|
|
102
|
+
style: { display: "none" },
|
|
103
|
+
onChange: x
|
|
104
|
+
}, null, 40, $),
|
|
105
|
+
r.value.length ? (u(), c("ul", A, [
|
|
106
|
+
(u(!0), c(S, null, w(r.value, (s, o) => (u(), c("li", {
|
|
107
|
+
key: `${s.name}-${o}`,
|
|
108
|
+
style: { display: "flex", "align-items": "center", gap: "0.5rem", "font-size": "0.85rem" }
|
|
109
|
+
}, [
|
|
110
|
+
t[0] || (t[0] = i("i", {
|
|
111
|
+
class: "pi pi-file",
|
|
112
|
+
style: { opacity: "0.6" }
|
|
113
|
+
}, null, -1)),
|
|
114
|
+
i("span", K, W(s.name), 1),
|
|
115
|
+
i("span", L, W(B(s.size)), 1),
|
|
116
|
+
y(f(g), {
|
|
117
|
+
type: "button",
|
|
118
|
+
icon: "pi pi-times",
|
|
119
|
+
text: "",
|
|
120
|
+
rounded: "",
|
|
121
|
+
size: "small",
|
|
122
|
+
severity: "danger",
|
|
123
|
+
disabled: l.disabled,
|
|
124
|
+
onClick: (m) => b(o)
|
|
125
|
+
}, null, 8, ["disabled", "onClick"])
|
|
126
|
+
]))), 128))
|
|
127
|
+
])) : F(e.$slots, "empty", {}, () => [
|
|
128
|
+
t[1] || (t[1] = i("span", { style: { "font-size": "0.8rem", opacity: "0.6" } }, "Nenhum arquivo selecionado", -1))
|
|
129
|
+
], void 0, 1)
|
|
130
|
+
]));
|
|
131
|
+
}
|
|
132
|
+
});
|
|
2
133
|
export {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
134
|
+
N as WActionBar,
|
|
135
|
+
P as WAutoCompleteFK,
|
|
136
|
+
T as WCrudColumnRenderer,
|
|
137
|
+
j as WCrudFormDialog,
|
|
138
|
+
G as WCrudView,
|
|
139
|
+
E as WDateRange,
|
|
140
|
+
J as WDetailHeader,
|
|
141
|
+
O as WEmptyState,
|
|
142
|
+
H as WFileUpload,
|
|
143
|
+
Q as WFormRenderer,
|
|
144
|
+
X as WFormSection,
|
|
145
|
+
Y as WImageCropper,
|
|
146
|
+
Z as WInfoCard,
|
|
147
|
+
_ as WKpiCard,
|
|
148
|
+
ee as WKpiGrid,
|
|
149
|
+
le as WMoneyInput,
|
|
150
|
+
te as WPageHeader,
|
|
151
|
+
ae as WProgressFlow,
|
|
152
|
+
oe as WSectionHeader,
|
|
153
|
+
ne as WStatusTag,
|
|
154
|
+
ie as WTransferList
|
|
22
155
|
};
|
|
23
156
|
//# sourceMappingURL=components.js.map
|
package/dist/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"components.js","sources":["../src/components/form/WDateRange.vue","../src/components/form/WFileUpload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport DatePicker from 'primevue/datepicker'\n\n/**\n * Seletor de intervalo de datas (período). Wrapper fino do DatePicker em modo\n * range com padrões pt-BR. O `v-model` guarda `[início, fim]` como `Date[]`.\n */\nwithDefaults(\n defineProps<{\n modelValue?: Date[] | null\n placeholder?: string\n minDate?: Date\n maxDate?: Date\n showButtonBar?: boolean\n disabled?: boolean\n }>(),\n {\n modelValue: null,\n placeholder: 'Selecione o período',\n showButtonBar: true,\n disabled: false,\n },\n)\n\nconst emit = defineEmits<{ 'update:modelValue': [value: Date[] | null] }>()\n\nfunction onUpdate(v: unknown) {\n emit('update:modelValue', (v as Date[] | null) ?? null)\n}\n</script>\n\n<template>\n <DatePicker\n :model-value=\"modelValue ?? undefined\"\n selection-mode=\"range\"\n :placeholder=\"placeholder\"\n :min-date=\"minDate\"\n :max-date=\"maxDate\"\n :show-button-bar=\"showButtonBar\"\n :disabled=\"disabled\"\n date-format=\"dd/mm/yy\"\n fluid\n @update:model-value=\"onUpdate\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport Button from 'primevue/button'\n\n/**\n * Upload de arquivo(s) genérico (single ou multiple), sem dependência pesada.\n * O `v-model` guarda `File` (single) ou `File[]` (multiple). Valida tamanho por\n * arquivo e emite `error` para os que excederem.\n */\nconst props = withDefaults(\n defineProps<{\n modelValue?: File | File[] | null\n multiple?: boolean\n accept?: string\n /** Tamanho máximo por arquivo em bytes (default 10MB). */\n maxSize?: number\n disabled?: boolean\n chooseLabel?: string\n }>(),\n {\n modelValue: null,\n multiple: false,\n accept: undefined,\n maxSize: 10_485_760,\n disabled: false,\n chooseLabel: 'Selecionar arquivo',\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: File | File[] | null]\n error: [message: string]\n}>()\n\nconst input = ref<HTMLInputElement | null>(null)\nconst files = computed<File[]>(() => {\n const v = props.modelValue\n if (!v) return []\n return Array.isArray(v) ? v : [v]\n})\n\nfunction open() {\n input.value?.click()\n}\n\nfunction onChange(e: Event) {\n const el = e.target as HTMLInputElement\n const picked = Array.from(el.files || [])\n el.value = ''\n const valid: File[] = []\n for (const f of picked) {\n if (f.size > props.maxSize) {\n emit('error', `\"${f.name}\" acima do limite de ${(props.maxSize / 1_048_576).toFixed(1)}MB.`)\n continue\n }\n valid.push(f)\n }\n if (!valid.length) return\n emit('update:modelValue', props.multiple ? [...files.value, ...valid] : valid[0])\n}\n\nfunction removeAt(i: number) {\n if (!props.multiple) {\n emit('update:modelValue', null)\n return\n }\n const next = files.value.slice()\n next.splice(i, 1)\n emit('update:modelValue', next.length ? next : null)\n}\n\nfunction fmtSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1_048_576) return `${(bytes / 1024).toFixed(0)} KB`\n return `${(bytes / 1_048_576).toFixed(1)} MB`\n}\n</script>\n\n<template>\n <div class=\"w-fileupload\" style=\"display: flex; flex-direction: column; gap: 0.5rem\">\n <div>\n <Button\n type=\"button\"\n :label=\"chooseLabel\"\n icon=\"pi pi-upload\"\n outlined\n size=\"small\"\n :disabled=\"disabled\"\n @click=\"open\"\n />\n </div>\n <input\n ref=\"input\"\n type=\"file\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n style=\"display: none\"\n @change=\"onChange\"\n />\n <ul\n v-if=\"files.length\"\n style=\"\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 0.35rem;\n \"\n >\n <li\n v-for=\"(f, i) in files\"\n :key=\"`${f.name}-${i}`\"\n style=\"display: flex; align-items: center; gap: 0.5rem; font-size: 0.85rem\"\n >\n <i class=\"pi pi-file\" style=\"opacity: 0.6\" />\n <span style=\"flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap\">\n {{ f.name }}\n </span>\n <span style=\"opacity: 0.6\">{{ fmtSize(f.size) }}</span>\n <Button\n type=\"button\"\n icon=\"pi pi-times\"\n text\n rounded\n size=\"small\"\n severity=\"danger\"\n :disabled=\"disabled\"\n @click=\"removeAt(i)\"\n />\n </li>\n </ul>\n <slot v-else name=\"empty\">\n <span style=\"font-size: 0.8rem; opacity: 0.6\">Nenhum arquivo selecionado</span>\n </slot>\n </div>\n</template>\n"],"names":["emit","__emit","onUpdate","v","_createBlock","_unref","DatePicker","__props","props","input","ref","files","computed","open","_a","onChange","el","picked","valid","f","removeAt","i","next","fmtSize","bytes","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_createVNode","Button","_hoisted_3","_Fragment","_renderList","_hoisted_4","_toDisplayString","_hoisted_5","$event","_renderSlot","_ctx","_cache"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { CrudManagerConfig } from '../types/manager';
|
|
2
|
+
/**
|
|
3
|
+
* Helper de autoria tipado para o config do `useCrudManager`.
|
|
4
|
+
*
|
|
5
|
+
* Dá inferência do tipo do registro `T` (usado em `rowActions`, `onAfterSave`,
|
|
6
|
+
* `transformPayload`, etc.) e autocomplete/type-check ao montar o config,
|
|
7
|
+
* sem precisar anotar `CrudManagerConfig<T>` na mão.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const config = defineCrudConfig<Produto>({
|
|
11
|
+
* endpoint: '/produtos',
|
|
12
|
+
* columns: [...],
|
|
13
|
+
* form: [...],
|
|
14
|
+
* onAfterSave: (p) => { p.nome }, // p é Produto
|
|
15
|
+
* })
|
|
16
|
+
* const crud = useCrudManager(config)
|
|
17
|
+
*/
|
|
18
|
+
export declare function defineCrudConfig<T extends Record<string, unknown> = Record<string, unknown>>(config: CrudManagerConfig<T>): CrudManagerConfig<T>;
|
package/dist/composables.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./useApi-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./useApi-5Pr4nXAa.cjs"),r=require("./useApiError-BEbEk2Kq.cjs");function s(u){return u}exports.useApi=e.useApi;exports.useCrudManager=e.useCrudManager;exports.extractApiError=r.extractApiError;exports.useApiError=r.useApiError;exports.useAppConfirm=r.useAppConfirm;exports.useAppToast=r.useAppToast;exports.useFormatters=r.useFormatters;exports.defineCrudConfig=s;
|
|
2
2
|
//# sourceMappingURL=composables.cjs.map
|
package/dist/composables.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composables.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"composables.cjs","sources":["../src/composables/defineCrudConfig.ts"],"sourcesContent":["import type { CrudManagerConfig } from '@/types/manager'\n\n/**\n * Helper de autoria tipado para o config do `useCrudManager`.\n *\n * Dá inferência do tipo do registro `T` (usado em `rowActions`, `onAfterSave`,\n * `transformPayload`, etc.) e autocomplete/type-check ao montar o config,\n * sem precisar anotar `CrudManagerConfig<T>` na mão.\n *\n * @example\n * const config = defineCrudConfig<Produto>({\n * endpoint: '/produtos',\n * columns: [...],\n * form: [...],\n * onAfterSave: (p) => { p.nome }, // p é Produto\n * })\n * const crud = useCrudManager(config)\n */\nexport function defineCrudConfig<T extends Record<string, unknown> = Record<string, unknown>>(\n config: CrudManagerConfig<T>,\n): CrudManagerConfig<T> {\n return config\n}\n"],"names":["defineCrudConfig","config"],"mappings":"iKAkBO,SAASA,EACdC,EACsB,CACtB,OAAOA,CACT"}
|
package/dist/composables.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import { u as
|
|
2
|
-
import { e as
|
|
1
|
+
import { u as o, a as u } from "./useApi-Bxrw3Sia.js";
|
|
2
|
+
import { e as t, u as i, a as n, b as f, c as A } from "./useApiError-C7rPzGrF.js";
|
|
3
|
+
function e(r) {
|
|
4
|
+
return r;
|
|
5
|
+
}
|
|
3
6
|
export {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
e as defineCrudConfig,
|
|
8
|
+
t as extractApiError,
|
|
9
|
+
o as useApi,
|
|
10
|
+
i as useApiError,
|
|
11
|
+
n as useAppConfirm,
|
|
12
|
+
f as useAppToast,
|
|
13
|
+
u as useCrudManager,
|
|
14
|
+
A as useFormatters
|
|
11
15
|
};
|
|
12
16
|
//# sourceMappingURL=composables.js.map
|
package/dist/composables.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composables.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
1
|
+
{"version":3,"file":"composables.js","sources":["../src/composables/defineCrudConfig.ts"],"sourcesContent":["import type { CrudManagerConfig } from '@/types/manager'\n\n/**\n * Helper de autoria tipado para o config do `useCrudManager`.\n *\n * Dá inferência do tipo do registro `T` (usado em `rowActions`, `onAfterSave`,\n * `transformPayload`, etc.) e autocomplete/type-check ao montar o config,\n * sem precisar anotar `CrudManagerConfig<T>` na mão.\n *\n * @example\n * const config = defineCrudConfig<Produto>({\n * endpoint: '/produtos',\n * columns: [...],\n * form: [...],\n * onAfterSave: (p) => { p.nome }, // p é Produto\n * })\n * const crud = useCrudManager(config)\n */\nexport function defineCrudConfig<T extends Record<string, unknown> = Record<string, unknown>>(\n config: CrudManagerConfig<T>,\n): CrudManagerConfig<T> {\n return config\n}\n"],"names":["defineCrudConfig","config"],"mappings":";;AAkBO,SAASA,EACdC,GACsB;AACtB,SAAOA;AACT;"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("./plugin-D1YvyKXX.cjs"),n=require("./WProgressFlow.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("./plugin-D1YvyKXX.cjs"),n=require("./WProgressFlow.vue_vue_type_script_setup_true_lang-DlnsDNZ5.cjs"),W=require("./useApi-5Pr4nXAa.cjs"),g=require("./useApiError-BEbEk2Kq.cjs"),C=require("./types.cjs");function D(e,a,t){const r=e;return Array.isArray(r.results)?{data:r.results,page:r.page??a,page_size:r.page_size??t,rows:r.count??0,extras:r.extras??{}}:Array.isArray(r.data)?{data:r.data,page:r.page??a,page_size:r.page_size??t,rows:r.rows??0,extras:r.extras??{}}:{data:Array.isArray(e)?e:[],page:a,page_size:t,rows:Array.isArray(e)?e.length:0,extras:{}}}function P(e){return{async list(a,t={}){const r=await e.get(a,{params:t});return D(r.data,Number(t.page??1),Number(t.page_size??20))},async get(a,t,r){return{data:(await e.get(`${a}${t}/`,r)).data}},async create(a,t,r){return{data:(await e.post(a,t,r)).data}},async update(a,t,r,s){return{data:(await e.patch(`${a}${t}/`,r,s)).data}},async delete(a,t){await e.delete(`${a}${t}/`)}}}const F={install(e,a){if(!(a!=null&&a.axios)&&!(a!=null&&a.dataProvider))throw new Error('[wPrimeVueComponents] Informe "axios" ou "dataProvider" ao registrar o WPrimeVuePlugin.');const t=a.dataProvider??P(a.axios),r={axios:a.axios,dataProvider:t,defaultPageSize:a.defaultPageSize??20,dateFormat:a.dateFormat??"DD/MM/YYYY",dateTimeFormat:a.dateTimeFormat??"DD/MM/YYYY HH:mm",locale:a.locale??"pt-BR",currency:a.currency??"BRL"};a.axios&&e.provide(m.W_AXIOS_KEY,a.axios),e.provide(m.W_DATA_PROVIDER_KEY,t),e.provide(m.W_CONFIG_KEY,r),a.registerComponents!==!1&&(e.component("WCrudView",n._sfc_main$4),e.component("WCrudFormDialog",n._sfc_main$3),e.component("WCrudColumnRenderer",n._sfc_main$2),e.component("WAutoCompleteFK",n._sfc_main$1),e.component("WMoneyInput",n._sfc_main$12),e.component("WTransferList",n._sfc_main$17))}};function v(e){return e.split("?")[0].replace(/^\/+|\/+$/g,"").replace(/^api\/v\d+\//,"")}function w(e){return typeof e=="string"?{table:e}:e}function $(e,a=400){return{response:{status:a,data:{detail:e}},message:e}}function y(e){if(e instanceof FormData)throw $("SupabaseDataProvider nao envia FormData diretamente. Faça upload do arquivo no Storage e envie a URL/caminho no payload.");return e}function _(e){throw{response:{data:{detail:(e==null?void 0:e.message)??"Erro ao consultar Supabase",code:e==null?void 0:e.code,details:e==null?void 0:e.details,hint:e==null?void 0:e.hint}},message:(e==null?void 0:e.message)??"Erro ao consultar Supabase"}}function p(e,a){var s,i;const t=v(e),r=(s=a.resources)==null?void 0:s[t];if(r)return w(r);if((i=a.allowedTables)!=null&&i.includes(t))return{table:t};throw $(`Recurso Supabase nao registrado para o endpoint "${e}".`,404)}function E(e,a,t){const r=new Set(["page","page_size","search","ordering"]),s={...t.defaultFilters,...a};for(const[i,o]of Object.entries(s))r.has(i)||o===null||o===void 0||o===""||(e=e.eq(i,o));return e}function S(e,a,t){if(typeof a!="string"||!a.trim()||!(t!=null&&t.length))return e;const r=a.trim().replace(/,/g,"\\,"),s=t.map(i=>`${i}.ilike.%${r}%`).join(",");return e.or(s)}function T(e,a){const t=typeof e=="string"&&e?e:a;return t?{field:t.startsWith("-")?t.slice(1):t,ascending:!t.startsWith("-")}:null}function b(e,a){return e?a.mapListItem?e.map(t=>{var r;return(r=a.mapListItem)==null?void 0:r.call(a,t)}):e:[]}function R(e){const a=e.defaultSelect??"*";return{async list(t,r={}){var A;const s=p(t,e),i=Math.max(Number(r.page??1),1),o=Math.max(Number(r.page_size??20),1),c=(i-1)*o,l=c+o-1;let u=e.client.from(s.table).select(s.select??a,{count:"exact"});u=E(u,r,s),u=S(u,r.search,s.searchFields);const d=T(r.ordering,s.defaultOrdering);d&&(u=u.order(d.field,{ascending:d.ascending}));const f=await u.range(c,l);return f.error&&_(f.error),{data:b(f.data,s),page:i,page_size:o,rows:f.count??((A=f.data)==null?void 0:A.length)??0,extras:{}}},async get(t,r,s){const i=p(t,e),o=i.pk??"id",c=await e.client.from(i.table).select(i.select??a).eq(o,r).single();return c.error&&_(c.error),{data:c.data}},async create(t,r,s){const i=p(t,e),o=y(r),c=i.mapPayload?i.mapPayload(o,"create"):o,l=await e.client.from(i.table).insert(c).select(i.select??a).single();return l.error&&_(l.error),{data:l.data}},async update(t,r,s,i){const o=p(t,e),c=o.pk??"id",l=y(s),u=o.mapPayload?o.mapPayload(l,"update"):l,d=await e.client.from(o.table).update(u).eq(c,r).select(o.select??a).single();return d.error&&_(d.error),{data:d.data}},async delete(t,r){const s=p(t,e),i=s.pk??"id",o=s.softDelete===!0?{is_active:!1}:typeof s.softDelete=="object"?s.softDelete:null,c=o?await e.client.from(s.table).update(o).eq(i,r):await e.client.from(s.table).delete().eq(i,r);c.error&&_(c.error)}}}exports.W_AXIOS_KEY=m.W_AXIOS_KEY;exports.W_CONFIG_KEY=m.W_CONFIG_KEY;exports.W_DATA_PROVIDER_KEY=m.W_DATA_PROVIDER_KEY;exports.WActionBar=n._sfc_main;exports.WAutoCompleteFK=n._sfc_main$1;exports.WCrudColumnRenderer=n._sfc_main$2;exports.WCrudFormDialog=n._sfc_main$3;exports.WCrudView=n._sfc_main$4;exports.WDetailHeader=n._sfc_main$5;exports.WEmptyState=n._sfc_main$6;exports.WFormRenderer=n._sfc_main$7;exports.WFormSection=n._sfc_main$8;exports.WInfoCard=n._sfc_main$9;exports.WKpiCard=n._sfc_main$10;exports.WKpiGrid=n._sfc_main$11;exports.WMoneyInput=n._sfc_main$12;exports.WPageHeader=n._sfc_main$13;exports.WProgressFlow=n._sfc_main$14;exports.WSectionHeader=n._sfc_main$15;exports.WStatusTag=n._sfc_main$16;exports.WTransferList=n._sfc_main$17;exports.downloadCsv=n.downloadCsv;exports.mapApiFieldToColumnDef=n.mapApiFieldToColumnDef;exports.mapApiFieldToFieldDef=n.mapApiFieldToFieldDef;exports.mapApiFieldsToColumnDefs=n.mapApiFieldsToColumnDefs;exports.mapApiFieldsToFieldDefs=n.mapApiFieldsToFieldDefs;exports.toCsv=n.toCsv;exports.useApi=W.useApi;exports.useCrudManager=W.useCrudManager;exports.extractApiError=g.extractApiError;exports.useApiError=g.useApiError;exports.useAppConfirm=g.useAppConfirm;exports.useAppToast=g.useAppToast;exports.useFormatters=g.useFormatters;exports.DEFAULT_CRUD_LABELS=C.DEFAULT_CRUD_LABELS;exports.WPrimeVuePlugin=F;exports.createAxiosDataProvider=P;exports.createSupabaseDataProvider=R;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { b as _, W, a as w } from "./plugin-BKa0eSEM.js";
|
|
2
|
-
import { d as A, c as P, b as v, a as C, l as F, q as b } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-
|
|
3
|
-
import { _ as N, e as O, f as V, g as k, h as q, i as H, j, k as B, m as U, n as G, o as X, p as J, r as Q, s as Z, t as ee, u as ae, v as te, w as re } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-
|
|
4
|
-
import { u as ne, a as oe } from "./useApi-
|
|
2
|
+
import { d as A, c as P, b as v, a as C, l as F, q as b } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-BS3zNV1Z.js";
|
|
3
|
+
import { _ as N, e as O, f as V, g as k, h as q, i as H, j, k as B, m as U, n as G, o as X, p as J, r as Q, s as Z, t as ee, u as ae, v as te, w as re } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-BS3zNV1Z.js";
|
|
4
|
+
import { u as ne, a as oe } from "./useApi-Bxrw3Sia.js";
|
|
5
5
|
import { e as ce, u as le, a as ue, b as de, c as fe } from "./useApiError-C7rPzGrF.js";
|
|
6
6
|
import { DEFAULT_CRUD_LABELS as pe } from "./types.js";
|
|
7
7
|
function x(e, a, t) {
|
package/dist/types/manager.d.ts
CHANGED
|
@@ -22,6 +22,9 @@ export interface CrudManagerConfig<T> {
|
|
|
22
22
|
* search or filter position. Defaults to `true`. Set `false` to keep the
|
|
23
23
|
* optimistic in-place update instead. */
|
|
24
24
|
refetchOnSave?: boolean;
|
|
25
|
+
/** Modo de edição: 'dialog' (default — abre o form dialog) ou 'cell' (edição
|
|
26
|
+
* inline por célula, com PATCH só do campo alterado). */
|
|
27
|
+
editMode?: 'cell' | 'dialog';
|
|
25
28
|
canCreate?: boolean;
|
|
26
29
|
canEdit?: boolean;
|
|
27
30
|
canDelete?: boolean;
|
|
@@ -77,6 +80,8 @@ export interface CrudManagerReturn<T> {
|
|
|
77
80
|
openViewDialog(item: T): void;
|
|
78
81
|
openDuplicateDialog(item: T): void;
|
|
79
82
|
save(): Promise<T | null>;
|
|
83
|
+
/** Salva um único campo de um item (edição inline por célula) via PATCH. */
|
|
84
|
+
updateField(item: T, field: string, value: unknown): Promise<void>;
|
|
80
85
|
confirmDelete(item: T): void;
|
|
81
86
|
setFormField(field: string, value: unknown): void;
|
|
82
87
|
resetForm(): void;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const o=require("vue"),Y=require("./plugin-D1YvyKXX.cjs"),Oe=require("./types.cjs"),b=require("./useApiError-BEbEk2Kq.cjs");function ze(j,P){const v={};for(const g of Object.keys(P))JSON.stringify(j[g])!==JSON.stringify(P[g])&&(v[g]=P[g]);return v}function Fe(j){const{endpoint:P,form:v,pk:g="id",searchDebounce:L=300,partialUpdate:$=!0,refetchOnSave:E=!0,filterParams:R=void 0,createDefaults:_=void 0,transformPayload:A=void 0,onAfterSave:T=void 0,onAfterDelete:q=void 0}=j,x=o.inject(Y.W_DATA_PROVIDER_KEY);if(!x)throw new Error("[wPrimeVueComponents] dataProvider não encontrado. Registre o WPrimeVuePlugin antes de usar useCrudManager.");const n=x,w=o.inject(Y.W_CONFIG_KEY),M=j.pageSize??(w==null?void 0:w.defaultPageSize)??20,f={...Oe.DEFAULT_CRUD_LABELS,...j.labels},k=b.useAppToast(),{confirmDelete:G}=b.useAppConfirm(),h=o.ref([]),W=o.ref([]),N=o.ref({}),U=o.ref(!1),u=o.ref(!1),y=o.ref(""),p=o.ref(!1),z=o.ref(!1),d=o.ref(null),D=o.reactive({});let C=null;const r=o.reactive({page:1,pageSize:M,rows:0,totalPages:0}),m=o.reactive({field:null,order:0}),V=o.reactive({});function Q(){const e={};for(const t of v)e[t.field]=t.defaultValue!==void 0?typeof t.defaultValue=="function"?t.defaultValue():t.defaultValue:null;return e}const X=Q();for(const e of Object.keys(X))D[e]=X[e];const I=o.computed(()=>d.value!==null&&!z.value),ae=o.computed(()=>z.value),ie=o.computed(()=>z.value?f.viewTitle??"Visualizar Registro":I.value?f.editTitle:f.createTitle),oe=o.computed(()=>r.page<=1),ne=o.computed(()=>r.page>=r.totalPages);let J=null;async function F(e={}){U.value=!0;try{const t={page:r.page,page_size:r.pageSize,...e};y.value&&(t.search=y.value),m.field&&m.order!==0&&(t.ordering=m.order===-1?`-${m.field}`:m.field),R&&Object.assign(t,R());for(const[i,c]of Object.entries(V))c!=null&&c!==""&&(t[i]=c);const a=await n.list(P,t);h.value=a.data,W.value=[],r.rows=a.rows,N.value=a.extras??{},a.page&&(r.page=a.page),a.page_size&&(r.pageSize=a.page_size),r.totalPages=Math.ceil(r.rows/r.pageSize)||0}finally{U.value=!1}}async function re(){await F()}async function se(){await F()}async function le(e=200){const t={};y.value&&(t.search=y.value),m.field&&m.order!==0&&(t.ordering=m.order===-1?`-${m.field}`:m.field),R&&Object.assign(t,R());for(const[l,s]of Object.entries(V))s!=null&&s!==""&&(t[l]=s);const a=[];let i=1;const c=1e4;for(;i<=c;){const l=await n.list(P,{...t,page:i,page_size:e});a.push(...l.data);const s=l.rows??a.length;if(l.data.length===0||a.length>=s)break;i++}return a}function Z(e){y.value=e,J&&clearTimeout(J),J=setTimeout(()=>{r.page=1,F()},L)}function ce(e){const t=e.target;Z(t.value)}function B(e){r.page=e,F()}function fe(){B(1)}function ue(){B(r.totalPages)}function de(e){r.page=e.page+1,r.pageSize=e.rows,F()}function pe(e){m.field=e.sortField??null,m.order=e.sortOrder??0,r.page=1,F()}function H(){const e=Q();for(const t of Object.keys(e))D[t]=e[t]}function ge(e,t){D[e]=t}function ve(){if(z.value=!1,d.value=null,C=null,H(),_){const e=_();for(const[t,a]of Object.entries(e))D[t]=a}p.value=!0}function ee(e){const t={};for(const a of v){let i=e[a.field]!==void 0?e[a.field]:null;i&&(a.type==="date"||a.type==="datetime")&&typeof i=="string"&&(i=b.parseDate(i)),D[a.field]=i,t[a.field]=i}C=t}function ye(e){z.value=!1,d.value=e,ee(e),p.value=!0}function me(e){z.value=!0,d.value=e,ee(e),p.value=!0}function Pe(e){z.value=!1,d.value=null,C=null,H();for(const t of v){if(t.field===g)continue;let a=e[t.field]!==void 0?e[t.field]:D[t.field];a&&(t.type==="date"||t.type==="datetime")&&typeof a=="string"&&(a=b.parseDate(a)),D[t.field]=a}if(_){const t=_();for(const[a,i]of Object.entries(t))D[a]=i}p.value=!0}function te(e){const t={...e};for(const a of v){const i=t[a.field];if(a.type==="date"&&i instanceof Date?t[a.field]=b.toDateString(i):a.type==="datetime"&&i instanceof Date&&(t[a.field]=b.toDateTimeString(i)),a.type==="fk"&&i!==null&&typeof i=="object"){const c=a.optionValue||"id";t[a.field]=i[c]??i}(a.type==="mask"||a.type==="cpf_cnpj")&&typeof i=="string"&&(t[a.field]=b.stripMask(i))}return t}async function we(){for(const e of v){if(e.validate){const t=e.validate(D[e.field]);if(t)return k.error(t),null}if(e.required){const t=D[e.field];if(t==null||t==="")return k.error(`${e.label} é obrigatório`),null}}u.value=!0;try{let e=te(D);if(!I.value&&_&&Object.assign(e,_()),I.value&&$&&C){const s=te(C);if(e=ze(s,e),Object.keys(e).length===0&&!A){p.value=!1;const S=d.value;return d.value=null,C=null,S}}A&&(e=A(e,I.value));const t=v.some(s=>s.type==="image"&&e[s.field]instanceof File);let a=e,i;if(t){const s=new Set(v.filter(O=>O.type==="image").map(O=>O.field)),S=new FormData;for(const[O,K]of Object.entries(e))if(K!=null)if(K instanceof File)S.append(O,K);else{if(s.has(O))continue;S.append(O,String(K))}a=S,i={"Content-Type":"multipart/form-data"}}const c=i?{headers:i}:void 0;let l;if(I.value&&d.value){const s=d.value[g];if(l=await n.update(P,s,a,c),!E){const S=h.value.findIndex(O=>O[g]===s);S!==-1&&(h.value[S]=l.data)}k.success(f.successUpdate)}else l=await n.create(P,a,c),E||(h.value.unshift(l.data),r.rows++),k.success(f.successCreate);return p.value=!1,d.value=null,C=null,E&&await F(),T&&T(l.data,I.value),l.data}catch(e){return k.error(b.extractApiError(e,"Erro ao salvar registro")),null}finally{u.value=!1}}async function he(e,t,a){const i=e[g],c=v.find(s=>s.field===t);let l=a;(c==null?void 0:c.type)==="date"&&l instanceof Date?l=b.toDateString(l):(c==null?void 0:c.type)==="datetime"&&l instanceof Date&&(l=b.toDateTimeString(l));try{const s=await n.update(P,i,{[t]:l}),S=h.value.findIndex(O=>O[g]===i);S!==-1&&(h.value[S]={...h.value[S],...s.data}),k.success(f.successUpdate)}catch(s){k.error(b.extractApiError(s,"Erro ao salvar o campo"))}}function De(e){G(async()=>{try{const t=e[g];await n.delete(P,t);const a=h.value.findIndex(i=>i[g]===t);a!==-1&&(h.value.splice(a,1),r.rows--),k.success(f.successDelete),q&&q(e)}catch(t){k.error(b.extractApiError(t,"Erro ao excluir registro"))}},f.deleteConfirmMessage)}function Se(){W.value=[]}function be(e,t){t==null||t===""?delete V[e]:V[e]=t,r.page=1,F()}function ke(){for(const e of Object.keys(V))delete V[e];r.page=1,F()}return{items:h,selectedItems:W,columnFilters:V,extras:N,loading:U,saving:u,search:y,dialogVisible:p,editingItem:d,formData:D,pagination:r,sort:m,isEditing:I,isViewing:ae,viewMode:z,dialogTitle:ie,isFirstPage:oe,isLastPage:ne,init:re,fetchItems:F,fetchAll:le,refresh:se,setSearch:Z,onSearch:ce,onPage:de,onSort:pe,openCreateDialog:ve,openEditDialog:ye,openViewDialog:me,openDuplicateDialog:Pe,save:we,updateField:he,confirmDelete:De,setFormField:ge,resetForm:H,goToPage:B,firstPage:fe,lastPage:ue,clearSelection:Se,setColumnFilter:be,clearColumnFilters:ke,config:j}}function je(j){const{endpoint:P,searchDebounce:v=300,immediate:g=!1}=j,L=o.inject(Y.W_DATA_PROVIDER_KEY);if(!L)throw new Error("[wPrimeVueComponents] dataProvider não encontrado. Registre o WPrimeVuePlugin antes de usar useApi.");const $=L,E=o.inject(Y.W_CONFIG_KEY),R=j.pageSize??(E==null?void 0:E.defaultPageSize)??20,_=o.ref([]),A=o.ref(!1),T=o.ref(""),q=o.ref({}),x=o.reactive({}),n=o.reactive({page:1,pageSize:R,rows:0,totalPages:0}),w=o.reactive({field:null,order:0});let M=null;async function f(u={}){A.value=!0;try{const y={page:n.page,page_size:n.pageSize,...u};T.value&&(y.search=T.value),w.field&&w.order!==0&&(y.ordering=w.order===-1?`-${w.field}`:w.field);for(const[z,d]of Object.entries(x))d!=null&&d!==""&&(y[z]=d);const p=await $.list(P,y);_.value=p.data,n.rows=p.rows,p.page&&(n.page=p.page),p.page_size&&(n.pageSize=p.page_size),n.totalPages=Math.ceil(n.rows/n.pageSize)||0,q.value=p.extras??{}}finally{A.value=!1}}async function k(){await f()}function G(u){T.value=u,M&&clearTimeout(M),M=setTimeout(()=>{n.page=1,f()},v)}function h(u,y){x[u]=y,n.page=1,f()}function W(){for(const u of Object.keys(x))delete x[u];n.page=1,f()}function N(u){n.page=u.page+1,n.pageSize=u.rows,f()}function U(u){w.field=u.sortField??null,w.order=u.sortOrder??0,n.page=1,f()}return g&&f(),{items:_,loading:A,search:T,pagination:n,sort:w,extras:q,fetchItems:f,refresh:k,setSearch:G,setFilter:h,clearFilters:W,onPage:N,onSort:U}}exports.useApi=je;exports.useCrudManager=Fe;
|
|
2
|
+
//# sourceMappingURL=useApi-5Pr4nXAa.cjs.map
|