@wgalleti/primevue-components 0.9.6 → 0.10.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.
@@ -0,0 +1,124 @@
1
+ import { TreeSelectId, TreeSelectNode, TreeSelectOption } from '../../utils/treeSelect';
2
+ /**
3
+ * Seleção múltipla em árvore com checkbox, alimentada por uma lista PLANA + um
4
+ * campo de agrupamento. O `v-model` é um array de ids de FOLHA — nunca o mapa de
5
+ * chaves do PrimeVue, e nunca com id de grupo dentro (grupo é só visual).
6
+ *
7
+ * ---------------------------------------------------------------------------
8
+ * POR QUE A SELEÇÃO É DERIVADA AQUI E NÃO DELEGADA AO `Tree` — NÃO "SIMPLIFIQUE"
9
+ * ---------------------------------------------------------------------------
10
+ * O `Tree` com `selectionMode="checkbox"` sabe manter sozinho o mapa
11
+ * `{ chave: { checked, partialChecked } }`, propagando para pais e filhos. Trocar
12
+ * o que está aqui por um `v-model:selectionKeys` parece uma simplificação óbvia.
13
+ * Não é: existe um bug ABERTO que quebra exatamente a combinação que usamos
14
+ * (checkbox + filtro).
15
+ *
16
+ * https://github.com/primefaces/primevue/issues/6928 (aberta, "Help Wanted")
17
+ *
18
+ * Com o filtro ativo, o `partialChecked` dos ancestrais passa a se referir à
19
+ * árvore FILTRADA em vez da árvore inteira. O mecanismo está no código do
20
+ * PrimeVue 4.5: `TreeNode.propagateUp()` conta `this.node.children`, e sob filtro
21
+ * `this.node` é uma CÓPIA que o `findFilteredNodes()` produziu contendo só os
22
+ * filhos que casaram com a busca. Um grupo com 12 telas, 3 marcadas e filtro
23
+ * mostrando só essas 3 aparece como totalmente marcado — e ao salvar o usuário
24
+ * marca o que não queria.
25
+ *
26
+ * O repositório do PrimeVue foi arquivado em junho/2026 e está read-only: não vai
27
+ * ser corrigido upstream.
28
+ *
29
+ * Por isso, aqui:
30
+ * 1. a fonte da verdade é o `modelValue` (ids de folha) — sem estado espelhado;
31
+ * 2. o `selectionKeys` é DERIVADO sobre a árvore INTEIRA (`fullTree`), nunca
32
+ * sobre a visão filtrada, então é correto por construção;
33
+ * 3. o `Tree` recebe `:selection-keys` como prop CONTROLADA (não `v-model:`) —
34
+ * o mapa que ele calcularia é simplesmente descartado.
35
+ *
36
+ * Escolha do evento: `node-select` / `node-unselect`, e não `update:selectionKeys`.
37
+ * Os dois saem do mesmo `onCheckboxChange` do `Tree`, mas carregam coisas
38
+ * diferentes: `update:selectionKeys` entrega o mapa JÁ PROPAGADO (o resultado do
39
+ * `propagateUp` bugado), enquanto `node-select`/`node-unselect` entregam só o nó
40
+ * clicado e a direção do clique — a intenção crua do usuário, que nenhuma conta
41
+ * do PrimeVue tocou. É o único ponto estável da API para este caso.
42
+ *
43
+ * Detalhe que fecha o cerco: sob filtro o nó do evento é uma cópia podada, então
44
+ * ler `event.node.children` alternaria só as folhas VISÍVEIS. Resolvemos o nó
45
+ * pela `key` dentro do índice da árvore inteira (`fullIndex`) e alternamos todas
46
+ * as folhas dele — o mesmo resultado com ou sem filtro na tela.
47
+ */
48
+ type __VLS_Props = {
49
+ /** Ids das folhas selecionadas (`v-model`). Nunca contém id de grupo. */
50
+ modelValue?: TreeSelectId[];
51
+ /** Lista PLANA de registros. O agrupamento é feito aqui, por `groupBy`. */
52
+ options?: TreeSelectOption[];
53
+ /** Campo do id da folha (default: `id`). */
54
+ optionValue?: string;
55
+ /** Campo do rótulo visível (default: `nome`). */
56
+ optionLabel?: string;
57
+ /** Campo que agrupa os registros. Sem ele, a lista sai rasa. */
58
+ groupBy?: string;
59
+ /** Rótulo do nó-pai a partir do valor bruto do agrupamento. */
60
+ groupLabel?: (chave: string) => string;
61
+ /** Campo de busca interno. */
62
+ filter?: boolean;
63
+ filterPlaceholder?: string;
64
+ /** Campos extras do registro considerados na busca (além do rótulo). */
65
+ filterFields?: string[];
66
+ loading?: boolean;
67
+ disabled?: boolean;
68
+ /** Texto quando não há nenhuma opção. */
69
+ emptyMessage?: string;
70
+ /** Texto quando a busca não encontrou nada. */
71
+ filterEmptyMessage?: string;
72
+ /** Contador `N de M selecionados` acima da árvore. */
73
+ showCount?: boolean;
74
+ /** Atalhos "Marcar todos" / "Limpar". */
75
+ showToggleAll?: boolean;
76
+ /** Abre todos os grupos na montagem. */
77
+ defaultExpanded?: boolean;
78
+ ariaLabel?: string;
79
+ };
80
+ declare function __VLS_template(): {
81
+ attrs: Partial<{}>;
82
+ slots: {
83
+ header?(_: {
84
+ selectedCount: number;
85
+ total: number;
86
+ }): any;
87
+ node?(_: {
88
+ node: TreeSelectNode;
89
+ }): any;
90
+ empty?(_: {
91
+ filtering: boolean;
92
+ }): any;
93
+ };
94
+ refs: {};
95
+ rootEl: HTMLDivElement;
96
+ };
97
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
98
+ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
99
+ "update:modelValue": (ids: TreeSelectId[]) => any;
100
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
101
+ "onUpdate:modelValue"?: ((ids: TreeSelectId[]) => any) | undefined;
102
+ }>, {
103
+ filter: boolean;
104
+ modelValue: TreeSelectId[];
105
+ optionLabel: string;
106
+ optionValue: string;
107
+ disabled: boolean;
108
+ loading: boolean;
109
+ options: TreeSelectOption[];
110
+ filterPlaceholder: string;
111
+ filterFields: string[];
112
+ emptyMessage: string;
113
+ filterEmptyMessage: string;
114
+ showCount: boolean;
115
+ showToggleAll: boolean;
116
+ defaultExpanded: boolean;
117
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
118
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
119
+ export default _default;
120
+ type __VLS_WithTemplateSlots<T, S> = T & {
121
+ new (): {
122
+ $slots: S;
123
+ };
124
+ };
@@ -9,6 +9,7 @@ export { default as WDateRange } from './form/WDateRange.vue';
9
9
  export { default as WFileUpload } from './form/WFileUpload.vue';
10
10
  export { default as WMoneyInput } from './form/WMoneyInput.vue';
11
11
  export { default as WTransferList } from './form/WTransferList.vue';
12
+ export { default as WTreeSelect } from './form/WTreeSelect.vue';
12
13
  export { default as WStatusTag } from './ui/WStatusTag.vue';
13
14
  export { default as WPageHeader } from './ui/WPageHeader.vue';
14
15
  export { default as WEmptyState } from './ui/WEmptyState.vue';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./WProgressFlow.vue_vue_type_script_setup_true_lang-Cc0DJRIy.cjs"),e=require("vue"),m=require("primevue/button"),g={class:"w-fileupload",style:{display:"flex","flex-direction":"column",gap:"0.5rem"}},W=["accept","multiple"],v={key:0,style:{"list-style":"none",margin:"0",padding:"0",display:"flex","flex-direction":"column",gap:"0.35rem"}},k={style:{flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},B={style:{opacity:"0.6"}},x=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:p}){const o=a,s=p,d=e.ref(null),c=e.computed(()=>{const l=o.modelValue;return l?Array.isArray(l)?l:[l]:[]});function f(){var l;(l=d.value)==null||l.click()}function _(l){const n=l.target,r=Array.from(n.files||[]);n.value="";const i=[];for(const u of r){if(u.size>o.maxSize){s("error",`"${u.name}" acima do limite de ${(o.maxSize/1048576).toFixed(1)}MB.`);continue}i.push(u)}i.length&&s("update:modelValue",o.multiple?[...c.value,...i]:i[0])}function y(l){if(!o.multiple){s("update:modelValue",null);return}const n=c.value.slice();n.splice(l,1),s("update:modelValue",n.length?n:null)}function $(l){return l<1024?`${l} B`:l<1048576?`${(l/1024).toFixed(0)} KB`:`${(l/1048576).toFixed(1)} MB`}return(l,n)=>(e.openBlock(),e.createElementBlock("div",g,[e.createElementVNode("div",null,[e.createVNode(e.unref(m),{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,W),c.value.length?(e.openBlock(),e.createElementBlock("ul",v,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(r,i)=>(e.openBlock(),e.createElementBlock("li",{key:`${r.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",k,e.toDisplayString(r.name),1),e.createElementVNode("span",B,e.toDisplayString($(r.size)),1),e.createVNode(e.unref(m),{type:"button",icon:"pi pi-times",text:"",rounded:"",size:"small",severity:"danger",disabled:a.disabled,onClick:u=>y(i)},null,8,["disabled","onClick"])]))),128))])):e.renderSlot(l.$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=t._sfc_main;exports.WAutoCompleteFK=t._sfc_main$1;exports.WCrudColumnRenderer=t._sfc_main$2;exports.WCrudFormDialog=t._sfc_main$3;exports.WCrudView=t._sfc_main$4;exports.WDatePicker=t._sfc_main$5;exports.WDateRange=t._sfc_main$6;exports.WDetailHeader=t._sfc_main$7;exports.WEmptyState=t._sfc_main$8;exports.WFormRenderer=t._sfc_main$9;exports.WFormSection=t._sfc_main$10;exports.WImageCropper=t.WImageCropper;exports.WInfoCard=t._sfc_main$11;exports.WKpiCard=t._sfc_main$12;exports.WKpiGrid=t._sfc_main$13;exports.WMoneyInput=t._sfc_main$14;exports.WPageHeader=t._sfc_main$15;exports.WProgressFlow=t._sfc_main$16;exports.WSectionHeader=t._sfc_main$17;exports.WStatusTag=t._sfc_main$18;exports.WTransferList=t._sfc_main$19;exports.WFileUpload=x;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./WProgressFlow.vue_vue_type_script_setup_true_lang-C-167GXT.cjs"),e=require("vue"),m=require("primevue/button"),g={class:"w-fileupload",style:{display:"flex","flex-direction":"column",gap:"0.5rem"}},W=["accept","multiple"],v={key:0,style:{"list-style":"none",margin:"0",padding:"0",display:"flex","flex-direction":"column",gap:"0.35rem"}},k={style:{flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},B={style:{opacity:"0.6"}},x=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:p}){const o=a,s=p,d=e.ref(null),c=e.computed(()=>{const l=o.modelValue;return l?Array.isArray(l)?l:[l]:[]});function f(){var l;(l=d.value)==null||l.click()}function _(l){const n=l.target,r=Array.from(n.files||[]);n.value="";const i=[];for(const u of r){if(u.size>o.maxSize){s("error",`"${u.name}" acima do limite de ${(o.maxSize/1048576).toFixed(1)}MB.`);continue}i.push(u)}i.length&&s("update:modelValue",o.multiple?[...c.value,...i]:i[0])}function y(l){if(!o.multiple){s("update:modelValue",null);return}const n=c.value.slice();n.splice(l,1),s("update:modelValue",n.length?n:null)}function $(l){return l<1024?`${l} B`:l<1048576?`${(l/1024).toFixed(0)} KB`:`${(l/1048576).toFixed(1)} MB`}return(l,n)=>(e.openBlock(),e.createElementBlock("div",g,[e.createElementVNode("div",null,[e.createVNode(e.unref(m),{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,W),c.value.length?(e.openBlock(),e.createElementBlock("ul",v,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(r,i)=>(e.openBlock(),e.createElementBlock("li",{key:`${r.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",k,e.toDisplayString(r.name),1),e.createElementVNode("span",B,e.toDisplayString($(r.size)),1),e.createVNode(e.unref(m),{type:"button",icon:"pi pi-times",text:"",rounded:"",size:"small",severity:"danger",disabled:a.disabled,onClick:u=>y(i)},null,8,["disabled","onClick"])]))),128))])):e.renderSlot(l.$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=t._sfc_main;exports.WAutoCompleteFK=t._sfc_main$1;exports.WCrudColumnRenderer=t._sfc_main$2;exports.WCrudFormDialog=t._sfc_main$3;exports.WCrudView=t._sfc_main$4;exports.WDatePicker=t._sfc_main$5;exports.WDateRange=t._sfc_main$6;exports.WDetailHeader=t._sfc_main$7;exports.WEmptyState=t._sfc_main$8;exports.WFormRenderer=t._sfc_main$9;exports.WFormSection=t._sfc_main$10;exports.WImageCropper=t.WImageCropper;exports.WInfoCard=t._sfc_main$11;exports.WKpiCard=t._sfc_main$12;exports.WKpiGrid=t._sfc_main$13;exports.WMoneyInput=t._sfc_main$14;exports.WPageHeader=t._sfc_main$15;exports.WProgressFlow=t._sfc_main$16;exports.WSectionHeader=t._sfc_main$17;exports.WStatusTag=t._sfc_main$18;exports.WTransferList=t._sfc_main$19;exports.WTreeSelect=t._sfc_main$20;exports.WFileUpload=x;
2
2
  //# sourceMappingURL=components.cjs.map
@@ -1,5 +1,5 @@
1
- import { _ as I, a as M, b as N, c as P, d as R, e as _, f as T, g as U, h as j, i as G, j as J, W as O, k as Q, l as X, m as Y, n as Z, o as ee, p as le, q as te, r as ae, s as ie } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-DVjJq8Bs.js";
2
- import { defineComponent as k, ref as F, computed as S, openBlock as u, createElementBlock as p, createElementVNode as i, createVNode as m, unref as f, Fragment as b, renderList as z, toDisplayString as y, renderSlot as B } from "vue";
1
+ import { _ as I, a as M, b as N, c as P, d as R, e as T, f as _, g as U, h as j, i as G, j as J, W as O, k as Q, l as X, m as Y, n as Z, o as ee, p as le, q as te, r as ae, s as ie, t as ne } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-D9HgZsV9.js";
2
+ import { defineComponent as k, ref as S, computed as F, openBlock as u, createElementBlock as p, createElementVNode as i, createVNode as m, unref as f, Fragment as b, renderList as z, toDisplayString as y, renderSlot as B } from "vue";
3
3
  import W from "primevue/button";
4
4
  const V = {
5
5
  class: "w-fileupload",
@@ -19,7 +19,7 @@ const V = {
19
19
  },
20
20
  emits: ["update:modelValue", "error"],
21
21
  setup(a, { emit: g }) {
22
- const n = a, s = g, c = F(null), r = S(() => {
22
+ const n = a, s = g, c = S(null), r = F(() => {
23
23
  const e = n.modelValue;
24
24
  return e ? Array.isArray(e) ? e : [e] : [];
25
25
  });
@@ -106,8 +106,8 @@ export {
106
106
  N as WCrudColumnRenderer,
107
107
  P as WCrudFormDialog,
108
108
  R as WCrudView,
109
- _ as WDatePicker,
110
- T as WDateRange,
109
+ T as WDatePicker,
110
+ _ as WDateRange,
111
111
  U as WDetailHeader,
112
112
  j as WEmptyState,
113
113
  q as WFileUpload,
@@ -122,6 +122,7 @@ export {
122
122
  le as WProgressFlow,
123
123
  te as WSectionHeader,
124
124
  ae as WStatusTag,
125
- ie as WTransferList
125
+ ie as WTransferList,
126
+ ne as WTreeSelect
126
127
  };
127
128
  //# sourceMappingURL=components.js.map
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-Cc0DJRIy.cjs"),W=require("./useApi-237Q1Vdg.cjs"),f=require("./useFormKeyboardNav-D4Ow3k4Y.cjs"),P=require("./types.cjs");function F(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 D(e){return{async list(a,t={}){const r=await e.get(a,{params:t});return F(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 C={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??D(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$14),e.component("WTransferList",n._sfc_main$19))}};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 p(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 g(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=g(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 _=await u.range(c,l);return _.error&&p(_.error),{data:b(_.data,s),page:i,page_size:o,rows:_.count??((A=_.data)==null?void 0:A.length)??0,extras:{}}},async get(t,r,s){const i=g(t,e),o=i.pk??"id",c=await e.client.from(i.table).select(i.select??a).eq(o,r).single();return c.error&&p(c.error),{data:c.data}},async create(t,r,s){const i=g(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&&p(l.error),{data:l.data}},async update(t,r,s,i){const o=g(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&&p(d.error),{data:d.data}},async delete(t,r){const s=g(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&&p(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.WDatePicker=n._sfc_main$5;exports.WDateRange=n._sfc_main$6;exports.WDetailHeader=n._sfc_main$7;exports.WEmptyState=n._sfc_main$8;exports.WFormRenderer=n._sfc_main$9;exports.WFormSection=n._sfc_main$10;exports.WInfoCard=n._sfc_main$11;exports.WKpiCard=n._sfc_main$12;exports.WKpiGrid=n._sfc_main$13;exports.WMoneyInput=n._sfc_main$14;exports.WPageHeader=n._sfc_main$15;exports.WProgressFlow=n._sfc_main$16;exports.WSectionHeader=n._sfc_main$17;exports.WStatusTag=n._sfc_main$18;exports.WTransferList=n._sfc_main$19;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=f.extractApiError;exports.useApiError=f.useApiError;exports.useAppConfirm=f.useAppConfirm;exports.useAppToast=f.useAppToast;exports.useDateInput=f.useDateInput;exports.useFormatters=f.useFormatters;exports.DEFAULT_CRUD_LABELS=P.DEFAULT_CRUD_LABELS;exports.WPrimeVuePlugin=C;exports.createAxiosDataProvider=D;exports.createSupabaseDataProvider=R;
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-C-167GXT.cjs"),W=require("./useApi-237Q1Vdg.cjs"),f=require("./useFormKeyboardNav-D4Ow3k4Y.cjs"),P=require("./types.cjs");function F(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 $(e){return{async list(a,t={}){const r=await e.get(a,{params:t});return F(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 C={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??$(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$14),e.component("WTransferList",n._sfc_main$19),e.component("WTreeSelect",n._sfc_main$20))}};function v(e){return e.split("?")[0].replace(/^\/+|\/+$/g,"").replace(/^api\/v\d+\//,"")}function w(e){return typeof e=="string"?{table:e}:e}function D(e,a=400){return{response:{status:a,data:{detail:e}},message:e}}function y(e){if(e instanceof FormData)throw D("SupabaseDataProvider nao envia FormData diretamente. Faça upload do arquivo no Storage e envie a URL/caminho no payload.");return e}function p(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 g(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 D(`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=g(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 _=await u.range(c,l);return _.error&&p(_.error),{data:b(_.data,s),page:i,page_size:o,rows:_.count??((A=_.data)==null?void 0:A.length)??0,extras:{}}},async get(t,r,s){const i=g(t,e),o=i.pk??"id",c=await e.client.from(i.table).select(i.select??a).eq(o,r).single();return c.error&&p(c.error),{data:c.data}},async create(t,r,s){const i=g(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&&p(l.error),{data:l.data}},async update(t,r,s,i){const o=g(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&&p(d.error),{data:d.data}},async delete(t,r){const s=g(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&&p(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.WDatePicker=n._sfc_main$5;exports.WDateRange=n._sfc_main$6;exports.WDetailHeader=n._sfc_main$7;exports.WEmptyState=n._sfc_main$8;exports.WFormRenderer=n._sfc_main$9;exports.WFormSection=n._sfc_main$10;exports.WInfoCard=n._sfc_main$11;exports.WKpiCard=n._sfc_main$12;exports.WKpiGrid=n._sfc_main$13;exports.WMoneyInput=n._sfc_main$14;exports.WPageHeader=n._sfc_main$15;exports.WProgressFlow=n._sfc_main$16;exports.WSectionHeader=n._sfc_main$17;exports.WStatusTag=n._sfc_main$18;exports.WTransferList=n._sfc_main$19;exports.WTreeSelect=n._sfc_main$20;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=f.extractApiError;exports.useApiError=f.useApiError;exports.useAppConfirm=f.useAppConfirm;exports.useAppToast=f.useAppToast;exports.useDateInput=f.useDateInput;exports.useFormatters=f.useFormatters;exports.DEFAULT_CRUD_LABELS=P.DEFAULT_CRUD_LABELS;exports.WPrimeVuePlugin=C;exports.createAxiosDataProvider=$;exports.createSupabaseDataProvider=R;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/data-providers/axiosDataProvider.ts","../src/plugin.ts","../src/data-providers/supabaseDataProvider.ts"],"sourcesContent":["import type { AxiosInstance } from 'axios'\nimport type {\n DataProvider,\n DataProviderListParams,\n DataProviderListResponse,\n DataProviderRequestConfig,\n DataProviderResponse,\n} from '@/types/dataProvider'\n\nfunction normalizeListResponse<T>(\n responseData: unknown,\n fallbackPage: number,\n fallbackPageSize: number,\n): DataProviderListResponse<T> {\n const data = responseData as Record<string, unknown>\n\n if (Array.isArray(data.results)) {\n return {\n data: data.results as T[],\n page: (data.page as number) ?? fallbackPage,\n page_size: (data.page_size as number) ?? fallbackPageSize,\n rows: (data.count as number) ?? 0,\n extras: (data.extras as Record<string, unknown>) ?? {},\n }\n }\n\n if (Array.isArray(data.data)) {\n return {\n data: data.data as T[],\n page: (data.page as number) ?? fallbackPage,\n page_size: (data.page_size as number) ?? fallbackPageSize,\n rows: (data.rows as number) ?? 0,\n extras: (data.extras as Record<string, unknown>) ?? {},\n }\n }\n\n return {\n data: Array.isArray(responseData) ? (responseData as T[]) : [],\n page: fallbackPage,\n page_size: fallbackPageSize,\n rows: Array.isArray(responseData) ? responseData.length : 0,\n extras: {},\n }\n}\n\nexport function createAxiosDataProvider(axios: AxiosInstance): DataProvider {\n return {\n async list<T = Record<string, unknown>>(\n endpoint: string,\n params: DataProviderListParams = {},\n ): Promise<DataProviderListResponse<T>> {\n const response = await axios.get(endpoint, { params })\n return normalizeListResponse<T>(\n response.data,\n Number(params.page ?? 1),\n Number(params.page_size ?? 20),\n )\n },\n\n async get<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const response = await axios.get<T>(`${endpoint}${id}/`, config)\n return { data: response.data }\n },\n\n async create<T = Record<string, unknown>>(\n endpoint: string,\n payload: Record<string, unknown> | FormData,\n config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const response = await axios.post<T>(endpoint, payload, config)\n return { data: response.data }\n },\n\n async update<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n payload: Record<string, unknown> | FormData,\n config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const response = await axios.patch<T>(`${endpoint}${id}/`, payload, config)\n return { data: response.data }\n },\n\n async delete(endpoint: string, id: string | number): Promise<void> {\n await axios.delete(`${endpoint}${id}/`)\n },\n }\n}\n","import type { App, Plugin } from 'vue'\nimport type { WPluginOptions, WPluginConfig } from './types/plugin'\nimport { W_AXIOS_KEY, W_CONFIG_KEY, W_DATA_PROVIDER_KEY } from './types/plugin'\nimport {\n WCrudView,\n WCrudFormDialog,\n WCrudColumnRenderer,\n WAutoCompleteFK,\n WMoneyInput,\n WTransferList,\n} from './components'\nimport { createAxiosDataProvider } from './data-providers/axiosDataProvider'\n\nexport const WPrimeVuePlugin: Plugin = {\n install(app: App, options: WPluginOptions) {\n if (!options?.axios && !options?.dataProvider) {\n throw new Error(\n '[wPrimeVueComponents] Informe \"axios\" ou \"dataProvider\" ao registrar o WPrimeVuePlugin.',\n )\n }\n\n const dataProvider = options.dataProvider ?? createAxiosDataProvider(options.axios!)\n\n const config: WPluginConfig = {\n axios: options.axios,\n dataProvider,\n defaultPageSize: options.defaultPageSize ?? 20,\n dateFormat: options.dateFormat ?? 'DD/MM/YYYY',\n dateTimeFormat: options.dateTimeFormat ?? 'DD/MM/YYYY HH:mm',\n locale: options.locale ?? 'pt-BR',\n currency: options.currency ?? 'BRL',\n }\n\n if (options.axios) {\n app.provide(W_AXIOS_KEY, options.axios)\n }\n app.provide(W_DATA_PROVIDER_KEY, dataProvider)\n app.provide(W_CONFIG_KEY, config)\n\n if (options.registerComponents !== false) {\n app.component('WCrudView', WCrudView)\n app.component('WCrudFormDialog', WCrudFormDialog)\n app.component('WCrudColumnRenderer', WCrudColumnRenderer)\n app.component('WAutoCompleteFK', WAutoCompleteFK)\n app.component('WMoneyInput', WMoneyInput)\n app.component('WTransferList', WTransferList)\n }\n },\n}\n","import type {\n DataProvider,\n DataProviderListParams,\n DataProviderListResponse,\n DataProviderRequestConfig,\n DataProviderResponse,\n} from '@/types/dataProvider'\n\ntype SupabaseResult<T> = {\n data: T | null\n error: {\n message: string\n code?: string\n details?: string\n hint?: string\n } | null\n count?: number | null\n}\n\ntype SupabaseFilterBuilder<T> = PromiseLike<SupabaseResult<T>> & {\n select(\n columns?: string,\n options?: { count?: 'exact' | 'planned' | 'estimated' },\n ): SupabaseFilterBuilder<T>\n eq(column: string, value: unknown): SupabaseFilterBuilder<T>\n ilike(column: string, pattern: string): SupabaseFilterBuilder<T>\n or(filters: string): SupabaseFilterBuilder<T>\n order(column: string, options?: { ascending?: boolean }): SupabaseFilterBuilder<T>\n range(from: number, to: number): SupabaseFilterBuilder<T>\n single(): Promise<SupabaseResult<T>>\n}\n\ntype SupabaseTable = {\n select<T = unknown>(\n columns?: string,\n options?: { count?: 'exact' | 'planned' | 'estimated' },\n ): SupabaseFilterBuilder<T>\n insert<T = unknown>(payload: unknown): SupabaseFilterBuilder<T>\n update<T = unknown>(payload: unknown): SupabaseFilterBuilder<T>\n delete<T = unknown>(): SupabaseFilterBuilder<T>\n}\n\nexport interface SupabaseDataProviderClient {\n from(table: string): SupabaseTable\n}\n\nexport interface SupabaseResourceConfig {\n table: string\n pk?: string\n select?: string\n searchFields?: string[]\n defaultOrdering?: string\n defaultFilters?: Record<string, unknown>\n softDelete?: boolean | Record<string, unknown>\n mapListItem?: (item: Record<string, unknown>) => Record<string, unknown>\n mapPayload?: (\n payload: Record<string, unknown>,\n operation: 'create' | 'update',\n ) => Record<string, unknown>\n}\n\nexport interface CreateSupabaseDataProviderOptions {\n client: SupabaseDataProviderClient\n resources?: Record<string, SupabaseResourceConfig | string>\n defaultSelect?: string\n allowedTables?: string[]\n}\n\nfunction normalizeEndpoint(endpoint: string): string {\n return endpoint\n .split('?')[0]\n .replace(/^\\/+|\\/+$/g, '')\n .replace(/^api\\/v\\d+\\//, '')\n}\n\nfunction toResourceConfig(resource: SupabaseResourceConfig | string): SupabaseResourceConfig {\n return typeof resource === 'string' ? { table: resource } : resource\n}\n\nfunction createProviderError(message: string, status = 400) {\n return {\n response: {\n status,\n data: { detail: message },\n },\n message,\n }\n}\n\nfunction assertPlainPayload(payload: Record<string, unknown> | FormData): Record<string, unknown> {\n if (payload instanceof FormData) {\n throw createProviderError(\n 'SupabaseDataProvider nao envia FormData diretamente. Faça upload do arquivo no Storage e envie a URL/caminho no payload.',\n )\n }\n\n return payload\n}\n\nfunction normalizeSupabaseError(error: SupabaseResult<unknown>['error']): never {\n throw {\n response: {\n data: {\n detail: error?.message ?? 'Erro ao consultar Supabase',\n code: error?.code,\n details: error?.details,\n hint: error?.hint,\n },\n },\n message: error?.message ?? 'Erro ao consultar Supabase',\n }\n}\n\nfunction resolveResource(\n endpoint: string,\n options: CreateSupabaseDataProviderOptions,\n): SupabaseResourceConfig {\n const resourceName = normalizeEndpoint(endpoint)\n const configuredResource = options.resources?.[resourceName]\n\n if (configuredResource) {\n return toResourceConfig(configuredResource)\n }\n\n if (options.allowedTables?.includes(resourceName)) {\n return { table: resourceName }\n }\n\n throw createProviderError(`Recurso Supabase nao registrado para o endpoint \"${endpoint}\".`, 404)\n}\n\nfunction applyFilters<T>(\n query: SupabaseFilterBuilder<T>,\n params: DataProviderListParams,\n resource: SupabaseResourceConfig,\n): SupabaseFilterBuilder<T> {\n const reservedKeys = new Set(['page', 'page_size', 'search', 'ordering'])\n const filters = { ...resource.defaultFilters, ...params }\n\n for (const [key, value] of Object.entries(filters)) {\n if (reservedKeys.has(key) || value === null || value === undefined || value === '') {\n continue\n }\n query = query.eq(key, value)\n }\n\n return query\n}\n\nfunction applySearch<T>(\n query: SupabaseFilterBuilder<T>,\n search: unknown,\n searchFields?: string[],\n): SupabaseFilterBuilder<T> {\n if (typeof search !== 'string' || !search.trim() || !searchFields?.length) {\n return query\n }\n\n const escapedSearch = search.trim().replace(/,/g, '\\\\,')\n const expression = searchFields.map((field) => `${field}.ilike.%${escapedSearch}%`).join(',')\n\n return query.or(expression)\n}\n\nfunction parseOrdering(ordering: unknown, fallback?: string) {\n const value = typeof ordering === 'string' && ordering ? ordering : fallback\n if (!value) return null\n\n return {\n field: value.startsWith('-') ? value.slice(1) : value,\n ascending: !value.startsWith('-'),\n }\n}\n\nfunction mapList<T>(data: T[] | null, resource: SupabaseResourceConfig): T[] {\n if (!data) return []\n if (!resource.mapListItem) return data\n\n return data.map((item) => resource.mapListItem?.(item as Record<string, unknown>)) as T[]\n}\n\nexport function createSupabaseDataProvider(\n options: CreateSupabaseDataProviderOptions,\n): DataProvider {\n const defaultSelect = options.defaultSelect ?? '*'\n\n return {\n async list<T = Record<string, unknown>>(\n endpoint: string,\n params: DataProviderListParams = {},\n ): Promise<DataProviderListResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const page = Math.max(Number(params.page ?? 1), 1)\n const pageSize = Math.max(Number(params.page_size ?? 20), 1)\n const from = (page - 1) * pageSize\n const to = from + pageSize - 1\n\n let query = options.client\n .from(resource.table)\n .select<T[]>(resource.select ?? defaultSelect, { count: 'exact' })\n\n query = applyFilters(query, params, resource)\n query = applySearch(query, params.search, resource.searchFields)\n\n const ordering = parseOrdering(params.ordering, resource.defaultOrdering)\n if (ordering) {\n query = query.order(ordering.field, { ascending: ordering.ascending })\n }\n\n const result = await query.range(from, to)\n if (result.error) normalizeSupabaseError(result.error)\n\n return {\n data: mapList(result.data, resource),\n page,\n page_size: pageSize,\n rows: result.count ?? result.data?.length ?? 0,\n extras: {},\n }\n },\n\n async get<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n _config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const pk = resource.pk ?? 'id'\n const result = await options.client\n .from(resource.table)\n .select<T>(resource.select ?? defaultSelect)\n .eq(pk, id)\n .single()\n\n if (result.error) normalizeSupabaseError(result.error)\n return { data: result.data as T }\n },\n\n async create<T = Record<string, unknown>>(\n endpoint: string,\n payload: Record<string, unknown> | FormData,\n _config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const plainPayload = assertPlainPayload(payload)\n const mappedPayload = resource.mapPayload\n ? resource.mapPayload(plainPayload, 'create')\n : plainPayload\n const result = await options.client\n .from(resource.table)\n .insert<T>(mappedPayload)\n .select(resource.select ?? defaultSelect)\n .single()\n\n if (result.error) normalizeSupabaseError(result.error)\n return { data: result.data as T }\n },\n\n async update<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n payload: Record<string, unknown> | FormData,\n _config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const pk = resource.pk ?? 'id'\n const plainPayload = assertPlainPayload(payload)\n const mappedPayload = resource.mapPayload\n ? resource.mapPayload(plainPayload, 'update')\n : plainPayload\n const result = await options.client\n .from(resource.table)\n .update<T>(mappedPayload)\n .eq(pk, id)\n .select(resource.select ?? defaultSelect)\n .single()\n\n if (result.error) normalizeSupabaseError(result.error)\n return { data: result.data as T }\n },\n\n async delete(endpoint: string, id: string | number): Promise<void> {\n const resource = resolveResource(endpoint, options)\n const pk = resource.pk ?? 'id'\n const softDeletePayload =\n resource.softDelete === true\n ? { is_active: false }\n : typeof resource.softDelete === 'object'\n ? resource.softDelete\n : null\n\n const result = softDeletePayload\n ? await options.client.from(resource.table).update(softDeletePayload).eq(pk, id)\n : await options.client.from(resource.table).delete().eq(pk, id)\n\n if (result.error) normalizeSupabaseError(result.error)\n },\n }\n}\n"],"names":["normalizeListResponse","responseData","fallbackPage","fallbackPageSize","data","createAxiosDataProvider","axios","endpoint","params","response","id","config","payload","WPrimeVuePlugin","app","options","dataProvider","W_AXIOS_KEY","W_DATA_PROVIDER_KEY","W_CONFIG_KEY","WCrudView","WCrudFormDialog","WCrudColumnRenderer","WAutoCompleteFK","WMoneyInput","WTransferList","normalizeEndpoint","toResourceConfig","resource","createProviderError","message","status","assertPlainPayload","normalizeSupabaseError","error","resolveResource","resourceName","configuredResource","_a","_b","applyFilters","query","reservedKeys","filters","key","value","applySearch","search","searchFields","escapedSearch","expression","field","parseOrdering","ordering","fallback","mapList","item","createSupabaseDataProvider","defaultSelect","page","pageSize","from","to","result","_config","pk","plainPayload","mappedPayload","softDeletePayload"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/data-providers/axiosDataProvider.ts","../src/plugin.ts","../src/data-providers/supabaseDataProvider.ts"],"sourcesContent":["import type { AxiosInstance } from 'axios'\nimport type {\n DataProvider,\n DataProviderListParams,\n DataProviderListResponse,\n DataProviderRequestConfig,\n DataProviderResponse,\n} from '@/types/dataProvider'\n\nfunction normalizeListResponse<T>(\n responseData: unknown,\n fallbackPage: number,\n fallbackPageSize: number,\n): DataProviderListResponse<T> {\n const data = responseData as Record<string, unknown>\n\n if (Array.isArray(data.results)) {\n return {\n data: data.results as T[],\n page: (data.page as number) ?? fallbackPage,\n page_size: (data.page_size as number) ?? fallbackPageSize,\n rows: (data.count as number) ?? 0,\n extras: (data.extras as Record<string, unknown>) ?? {},\n }\n }\n\n if (Array.isArray(data.data)) {\n return {\n data: data.data as T[],\n page: (data.page as number) ?? fallbackPage,\n page_size: (data.page_size as number) ?? fallbackPageSize,\n rows: (data.rows as number) ?? 0,\n extras: (data.extras as Record<string, unknown>) ?? {},\n }\n }\n\n return {\n data: Array.isArray(responseData) ? (responseData as T[]) : [],\n page: fallbackPage,\n page_size: fallbackPageSize,\n rows: Array.isArray(responseData) ? responseData.length : 0,\n extras: {},\n }\n}\n\nexport function createAxiosDataProvider(axios: AxiosInstance): DataProvider {\n return {\n async list<T = Record<string, unknown>>(\n endpoint: string,\n params: DataProviderListParams = {},\n ): Promise<DataProviderListResponse<T>> {\n const response = await axios.get(endpoint, { params })\n return normalizeListResponse<T>(\n response.data,\n Number(params.page ?? 1),\n Number(params.page_size ?? 20),\n )\n },\n\n async get<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const response = await axios.get<T>(`${endpoint}${id}/`, config)\n return { data: response.data }\n },\n\n async create<T = Record<string, unknown>>(\n endpoint: string,\n payload: Record<string, unknown> | FormData,\n config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const response = await axios.post<T>(endpoint, payload, config)\n return { data: response.data }\n },\n\n async update<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n payload: Record<string, unknown> | FormData,\n config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const response = await axios.patch<T>(`${endpoint}${id}/`, payload, config)\n return { data: response.data }\n },\n\n async delete(endpoint: string, id: string | number): Promise<void> {\n await axios.delete(`${endpoint}${id}/`)\n },\n }\n}\n","import type { App, Plugin } from 'vue'\nimport type { WPluginOptions, WPluginConfig } from './types/plugin'\nimport { W_AXIOS_KEY, W_CONFIG_KEY, W_DATA_PROVIDER_KEY } from './types/plugin'\nimport {\n WCrudView,\n WCrudFormDialog,\n WCrudColumnRenderer,\n WAutoCompleteFK,\n WMoneyInput,\n WTransferList,\n WTreeSelect,\n} from './components'\nimport { createAxiosDataProvider } from './data-providers/axiosDataProvider'\n\nexport const WPrimeVuePlugin: Plugin = {\n install(app: App, options: WPluginOptions) {\n if (!options?.axios && !options?.dataProvider) {\n throw new Error(\n '[wPrimeVueComponents] Informe \"axios\" ou \"dataProvider\" ao registrar o WPrimeVuePlugin.',\n )\n }\n\n const dataProvider = options.dataProvider ?? createAxiosDataProvider(options.axios!)\n\n const config: WPluginConfig = {\n axios: options.axios,\n dataProvider,\n defaultPageSize: options.defaultPageSize ?? 20,\n dateFormat: options.dateFormat ?? 'DD/MM/YYYY',\n dateTimeFormat: options.dateTimeFormat ?? 'DD/MM/YYYY HH:mm',\n locale: options.locale ?? 'pt-BR',\n currency: options.currency ?? 'BRL',\n }\n\n if (options.axios) {\n app.provide(W_AXIOS_KEY, options.axios)\n }\n app.provide(W_DATA_PROVIDER_KEY, dataProvider)\n app.provide(W_CONFIG_KEY, config)\n\n if (options.registerComponents !== false) {\n app.component('WCrudView', WCrudView)\n app.component('WCrudFormDialog', WCrudFormDialog)\n app.component('WCrudColumnRenderer', WCrudColumnRenderer)\n app.component('WAutoCompleteFK', WAutoCompleteFK)\n app.component('WMoneyInput', WMoneyInput)\n app.component('WTransferList', WTransferList)\n app.component('WTreeSelect', WTreeSelect)\n }\n },\n}\n","import type {\n DataProvider,\n DataProviderListParams,\n DataProviderListResponse,\n DataProviderRequestConfig,\n DataProviderResponse,\n} from '@/types/dataProvider'\n\ntype SupabaseResult<T> = {\n data: T | null\n error: {\n message: string\n code?: string\n details?: string\n hint?: string\n } | null\n count?: number | null\n}\n\ntype SupabaseFilterBuilder<T> = PromiseLike<SupabaseResult<T>> & {\n select(\n columns?: string,\n options?: { count?: 'exact' | 'planned' | 'estimated' },\n ): SupabaseFilterBuilder<T>\n eq(column: string, value: unknown): SupabaseFilterBuilder<T>\n ilike(column: string, pattern: string): SupabaseFilterBuilder<T>\n or(filters: string): SupabaseFilterBuilder<T>\n order(column: string, options?: { ascending?: boolean }): SupabaseFilterBuilder<T>\n range(from: number, to: number): SupabaseFilterBuilder<T>\n single(): Promise<SupabaseResult<T>>\n}\n\ntype SupabaseTable = {\n select<T = unknown>(\n columns?: string,\n options?: { count?: 'exact' | 'planned' | 'estimated' },\n ): SupabaseFilterBuilder<T>\n insert<T = unknown>(payload: unknown): SupabaseFilterBuilder<T>\n update<T = unknown>(payload: unknown): SupabaseFilterBuilder<T>\n delete<T = unknown>(): SupabaseFilterBuilder<T>\n}\n\nexport interface SupabaseDataProviderClient {\n from(table: string): SupabaseTable\n}\n\nexport interface SupabaseResourceConfig {\n table: string\n pk?: string\n select?: string\n searchFields?: string[]\n defaultOrdering?: string\n defaultFilters?: Record<string, unknown>\n softDelete?: boolean | Record<string, unknown>\n mapListItem?: (item: Record<string, unknown>) => Record<string, unknown>\n mapPayload?: (\n payload: Record<string, unknown>,\n operation: 'create' | 'update',\n ) => Record<string, unknown>\n}\n\nexport interface CreateSupabaseDataProviderOptions {\n client: SupabaseDataProviderClient\n resources?: Record<string, SupabaseResourceConfig | string>\n defaultSelect?: string\n allowedTables?: string[]\n}\n\nfunction normalizeEndpoint(endpoint: string): string {\n return endpoint\n .split('?')[0]\n .replace(/^\\/+|\\/+$/g, '')\n .replace(/^api\\/v\\d+\\//, '')\n}\n\nfunction toResourceConfig(resource: SupabaseResourceConfig | string): SupabaseResourceConfig {\n return typeof resource === 'string' ? { table: resource } : resource\n}\n\nfunction createProviderError(message: string, status = 400) {\n return {\n response: {\n status,\n data: { detail: message },\n },\n message,\n }\n}\n\nfunction assertPlainPayload(payload: Record<string, unknown> | FormData): Record<string, unknown> {\n if (payload instanceof FormData) {\n throw createProviderError(\n 'SupabaseDataProvider nao envia FormData diretamente. Faça upload do arquivo no Storage e envie a URL/caminho no payload.',\n )\n }\n\n return payload\n}\n\nfunction normalizeSupabaseError(error: SupabaseResult<unknown>['error']): never {\n throw {\n response: {\n data: {\n detail: error?.message ?? 'Erro ao consultar Supabase',\n code: error?.code,\n details: error?.details,\n hint: error?.hint,\n },\n },\n message: error?.message ?? 'Erro ao consultar Supabase',\n }\n}\n\nfunction resolveResource(\n endpoint: string,\n options: CreateSupabaseDataProviderOptions,\n): SupabaseResourceConfig {\n const resourceName = normalizeEndpoint(endpoint)\n const configuredResource = options.resources?.[resourceName]\n\n if (configuredResource) {\n return toResourceConfig(configuredResource)\n }\n\n if (options.allowedTables?.includes(resourceName)) {\n return { table: resourceName }\n }\n\n throw createProviderError(`Recurso Supabase nao registrado para o endpoint \"${endpoint}\".`, 404)\n}\n\nfunction applyFilters<T>(\n query: SupabaseFilterBuilder<T>,\n params: DataProviderListParams,\n resource: SupabaseResourceConfig,\n): SupabaseFilterBuilder<T> {\n const reservedKeys = new Set(['page', 'page_size', 'search', 'ordering'])\n const filters = { ...resource.defaultFilters, ...params }\n\n for (const [key, value] of Object.entries(filters)) {\n if (reservedKeys.has(key) || value === null || value === undefined || value === '') {\n continue\n }\n query = query.eq(key, value)\n }\n\n return query\n}\n\nfunction applySearch<T>(\n query: SupabaseFilterBuilder<T>,\n search: unknown,\n searchFields?: string[],\n): SupabaseFilterBuilder<T> {\n if (typeof search !== 'string' || !search.trim() || !searchFields?.length) {\n return query\n }\n\n const escapedSearch = search.trim().replace(/,/g, '\\\\,')\n const expression = searchFields.map((field) => `${field}.ilike.%${escapedSearch}%`).join(',')\n\n return query.or(expression)\n}\n\nfunction parseOrdering(ordering: unknown, fallback?: string) {\n const value = typeof ordering === 'string' && ordering ? ordering : fallback\n if (!value) return null\n\n return {\n field: value.startsWith('-') ? value.slice(1) : value,\n ascending: !value.startsWith('-'),\n }\n}\n\nfunction mapList<T>(data: T[] | null, resource: SupabaseResourceConfig): T[] {\n if (!data) return []\n if (!resource.mapListItem) return data\n\n return data.map((item) => resource.mapListItem?.(item as Record<string, unknown>)) as T[]\n}\n\nexport function createSupabaseDataProvider(\n options: CreateSupabaseDataProviderOptions,\n): DataProvider {\n const defaultSelect = options.defaultSelect ?? '*'\n\n return {\n async list<T = Record<string, unknown>>(\n endpoint: string,\n params: DataProviderListParams = {},\n ): Promise<DataProviderListResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const page = Math.max(Number(params.page ?? 1), 1)\n const pageSize = Math.max(Number(params.page_size ?? 20), 1)\n const from = (page - 1) * pageSize\n const to = from + pageSize - 1\n\n let query = options.client\n .from(resource.table)\n .select<T[]>(resource.select ?? defaultSelect, { count: 'exact' })\n\n query = applyFilters(query, params, resource)\n query = applySearch(query, params.search, resource.searchFields)\n\n const ordering = parseOrdering(params.ordering, resource.defaultOrdering)\n if (ordering) {\n query = query.order(ordering.field, { ascending: ordering.ascending })\n }\n\n const result = await query.range(from, to)\n if (result.error) normalizeSupabaseError(result.error)\n\n return {\n data: mapList(result.data, resource),\n page,\n page_size: pageSize,\n rows: result.count ?? result.data?.length ?? 0,\n extras: {},\n }\n },\n\n async get<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n _config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const pk = resource.pk ?? 'id'\n const result = await options.client\n .from(resource.table)\n .select<T>(resource.select ?? defaultSelect)\n .eq(pk, id)\n .single()\n\n if (result.error) normalizeSupabaseError(result.error)\n return { data: result.data as T }\n },\n\n async create<T = Record<string, unknown>>(\n endpoint: string,\n payload: Record<string, unknown> | FormData,\n _config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const plainPayload = assertPlainPayload(payload)\n const mappedPayload = resource.mapPayload\n ? resource.mapPayload(plainPayload, 'create')\n : plainPayload\n const result = await options.client\n .from(resource.table)\n .insert<T>(mappedPayload)\n .select(resource.select ?? defaultSelect)\n .single()\n\n if (result.error) normalizeSupabaseError(result.error)\n return { data: result.data as T }\n },\n\n async update<T = Record<string, unknown>>(\n endpoint: string,\n id: string | number,\n payload: Record<string, unknown> | FormData,\n _config?: DataProviderRequestConfig,\n ): Promise<DataProviderResponse<T>> {\n const resource = resolveResource(endpoint, options)\n const pk = resource.pk ?? 'id'\n const plainPayload = assertPlainPayload(payload)\n const mappedPayload = resource.mapPayload\n ? resource.mapPayload(plainPayload, 'update')\n : plainPayload\n const result = await options.client\n .from(resource.table)\n .update<T>(mappedPayload)\n .eq(pk, id)\n .select(resource.select ?? defaultSelect)\n .single()\n\n if (result.error) normalizeSupabaseError(result.error)\n return { data: result.data as T }\n },\n\n async delete(endpoint: string, id: string | number): Promise<void> {\n const resource = resolveResource(endpoint, options)\n const pk = resource.pk ?? 'id'\n const softDeletePayload =\n resource.softDelete === true\n ? { is_active: false }\n : typeof resource.softDelete === 'object'\n ? resource.softDelete\n : null\n\n const result = softDeletePayload\n ? await options.client.from(resource.table).update(softDeletePayload).eq(pk, id)\n : await options.client.from(resource.table).delete().eq(pk, id)\n\n if (result.error) normalizeSupabaseError(result.error)\n },\n }\n}\n"],"names":["normalizeListResponse","responseData","fallbackPage","fallbackPageSize","data","createAxiosDataProvider","axios","endpoint","params","response","id","config","payload","WPrimeVuePlugin","app","options","dataProvider","W_AXIOS_KEY","W_DATA_PROVIDER_KEY","W_CONFIG_KEY","WCrudView","WCrudFormDialog","WCrudColumnRenderer","WAutoCompleteFK","WMoneyInput","WTransferList","WTreeSelect","normalizeEndpoint","toResourceConfig","resource","createProviderError","message","status","assertPlainPayload","normalizeSupabaseError","error","resolveResource","resourceName","configuredResource","_a","_b","applyFilters","query","reservedKeys","filters","key","value","applySearch","search","searchFields","escapedSearch","expression","field","parseOrdering","ordering","fallback","mapList","item","createSupabaseDataProvider","defaultSelect","page","pageSize","from","to","result","_config","pk","plainPayload","mappedPayload","softDeletePayload"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { WPrimeVuePlugin } from './plugin';
2
- export { WCrudView, WCrudFormDialog, WCrudColumnRenderer, WAutoCompleteFK, WFormRenderer, WDatePicker, WDateRange, WMoneyInput, WTransferList, WStatusTag, WPageHeader, WDetailHeader, WEmptyState, WInfoCard, WKpiCard, WKpiGrid, WSectionHeader, WFormSection, WActionBar, WProgressFlow, } from './components';
2
+ export { WCrudView, WCrudFormDialog, WCrudColumnRenderer, WAutoCompleteFK, WFormRenderer, WDatePicker, WDateRange, WMoneyInput, WTransferList, WTreeSelect, WStatusTag, WPageHeader, WDetailHeader, WEmptyState, WInfoCard, WKpiCard, WKpiGrid, WSectionHeader, WFormSection, WActionBar, WProgressFlow, } from './components';
3
3
  export { useCrudManager, useApi, useAppToast, useAppConfirm, useApiError, extractApiError, useFormatters, useDateInput, } from './composables';
4
4
  export type { DateValueFormat } from './composables';
5
5
  export { createAxiosDataProvider, createSupabaseDataProvider } from './data-providers';
@@ -12,3 +12,4 @@ export type { ApiFieldMeta } from './utils/fieldMapper';
12
12
  export { mapApiFieldToFieldDef, mapApiFieldsToFieldDefs, mapApiFieldToColumnDef, mapApiFieldsToColumnDefs, } from './utils/fieldMapper';
13
13
  export type { ToCsvOptions } from './utils/csv';
14
14
  export { toCsv, downloadCsv } from './utils/csv';
15
+ export type { TreeSelectId, TreeSelectOption, TreeSelectNode, TreeSelectionKeys, TreeSelectionState, } from './utils/treeSelect';
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
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, n as D, s as x } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-DVjJq8Bs.js";
3
- import { _ as k, e as N, f as O, g as V, h as q, i as H, j, k as B, l as U, m as G, o as X, p as J, q as Q, r as Z, t as ee, u as ae, v as te, w as re, x as se, y as ne } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-DVjJq8Bs.js";
4
- import { u as ie, a as ce } from "./useApi-BsrLTNwE.js";
5
- import { e as le, u as de, a as fe, b as me, c as pe, f as ge } from "./useFormKeyboardNav-D4Irq5RE.js";
6
- import { DEFAULT_CRUD_LABELS as _e } from "./types.js";
7
- function F(e, a, t) {
2
+ import { d as A, c as P, b as v, a as C, n as D, s as x, t as F } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-D9HgZsV9.js";
3
+ import { _ as N, e as O, f as V, g as q, h as H, i as j, j as B, k as U, l as G, m as X, o as J, p as Q, q as Z, r as ee, u as ae, v as te, w as re, x as se, y as ne, z as oe } from "./WProgressFlow.vue_vue_type_script_setup_true_lang-D9HgZsV9.js";
4
+ import { u as ce, a as le } from "./useApi-BsrLTNwE.js";
5
+ import { e as de, u as fe, a as me, b as pe, c as ge, f as ye } from "./useFormKeyboardNav-D4Irq5RE.js";
6
+ import { DEFAULT_CRUD_LABELS as We } from "./types.js";
7
+ function S(e, a, t) {
8
8
  const r = e;
9
9
  return Array.isArray(r.results) ? {
10
10
  data: r.results,
@@ -30,7 +30,7 @@ function b(e) {
30
30
  return {
31
31
  async list(a, t = {}) {
32
32
  const r = await e.get(a, { params: t });
33
- return F(
33
+ return S(
34
34
  r.data,
35
35
  Number(t.page ?? 1),
36
36
  Number(t.page_size ?? 20)
@@ -50,7 +50,7 @@ function b(e) {
50
50
  }
51
51
  };
52
52
  }
53
- const Y = {
53
+ const I = {
54
54
  install(e, a) {
55
55
  if (!(a != null && a.axios) && !(a != null && a.dataProvider))
56
56
  throw new Error(
@@ -65,10 +65,10 @@ const Y = {
65
65
  locale: a.locale ?? "pt-BR",
66
66
  currency: a.currency ?? "BRL"
67
67
  };
68
- a.axios && e.provide(_, a.axios), e.provide(W, t), e.provide(w, r), a.registerComponents !== !1 && (e.component("WCrudView", A), e.component("WCrudFormDialog", P), e.component("WCrudColumnRenderer", v), e.component("WAutoCompleteFK", C), e.component("WMoneyInput", D), e.component("WTransferList", x));
68
+ a.axios && e.provide(_, a.axios), e.provide(W, t), e.provide(w, r), a.registerComponents !== !1 && (e.component("WCrudView", A), e.component("WCrudFormDialog", P), e.component("WCrudColumnRenderer", v), e.component("WAutoCompleteFK", C), e.component("WMoneyInput", D), e.component("WTransferList", x), e.component("WTreeSelect", F));
69
69
  }
70
70
  };
71
- function S(e) {
71
+ function $(e) {
72
72
  return e.split("?")[0].replace(/^\/+|\/+$/g, "").replace(/^api\/v\d+\//, "");
73
73
  }
74
74
  function h(e) {
@@ -105,7 +105,7 @@ function f(e) {
105
105
  }
106
106
  function m(e, a) {
107
107
  var s, n;
108
- const t = S(e), r = (s = a.resources) == null ? void 0 : s[t];
108
+ const t = $(e), r = (s = a.resources) == null ? void 0 : s[t];
109
109
  if (r)
110
110
  return h(r);
111
111
  if ((n = a.allowedTables) != null && n.includes(t))
@@ -124,7 +124,7 @@ function R(e, a, t) {
124
124
  const r = a.trim().replace(/,/g, "\\,"), s = t.map((n) => `${n}.ilike.%${r}%`).join(",");
125
125
  return e.or(s);
126
126
  }
127
- function $(e, a) {
127
+ function T(e, a) {
128
128
  const t = typeof e == "string" && e ? e : a;
129
129
  return t ? {
130
130
  field: t.startsWith("-") ? t.slice(1) : t,
@@ -137,17 +137,17 @@ function z(e, a) {
137
137
  return (r = a.mapListItem) == null ? void 0 : r.call(a, t);
138
138
  }) : e : [];
139
139
  }
140
- function I(e) {
140
+ function M(e) {
141
141
  const a = e.defaultSelect ?? "*";
142
142
  return {
143
143
  async list(t, r = {}) {
144
144
  var p;
145
- const s = m(t, e), n = Math.max(Number(r.page ?? 1), 1), o = Math.max(Number(r.page_size ?? 20), 1), i = (n - 1) * o, u = i + o - 1;
145
+ const s = m(t, e), n = Math.max(Number(r.page ?? 1), 1), o = Math.max(Number(r.page_size ?? 20), 1), i = (n - 1) * o, l = i + o - 1;
146
146
  let c = e.client.from(s.table).select(s.select ?? a, { count: "exact" });
147
147
  c = E(c, r, s), c = R(c, r.search, s.searchFields);
148
- const l = $(r.ordering, s.defaultOrdering);
149
- l && (c = c.order(l.field, { ascending: l.ascending }));
150
- const d = await c.range(i, u);
148
+ const u = T(r.ordering, s.defaultOrdering);
149
+ u && (c = c.order(u.field, { ascending: u.ascending }));
150
+ const d = await c.range(i, l);
151
151
  return d.error && f(d.error), {
152
152
  data: z(d.data, s),
153
153
  page: n,
@@ -161,12 +161,12 @@ function I(e) {
161
161
  return i.error && f(i.error), { data: i.data };
162
162
  },
163
163
  async create(t, r, s) {
164
- const n = m(t, e), o = g(r), i = n.mapPayload ? n.mapPayload(o, "create") : o, u = await e.client.from(n.table).insert(i).select(n.select ?? a).single();
165
- return u.error && f(u.error), { data: u.data };
164
+ const n = m(t, e), o = g(r), i = n.mapPayload ? n.mapPayload(o, "create") : o, l = await e.client.from(n.table).insert(i).select(n.select ?? a).single();
165
+ return l.error && f(l.error), { data: l.data };
166
166
  },
167
167
  async update(t, r, s, n) {
168
- const o = m(t, e), i = o.pk ?? "id", u = g(s), c = o.mapPayload ? o.mapPayload(u, "update") : u, l = await e.client.from(o.table).update(c).eq(i, r).select(o.select ?? a).single();
169
- return l.error && f(l.error), { data: l.data };
168
+ const o = m(t, e), i = o.pk ?? "id", l = g(s), c = o.mapPayload ? o.mapPayload(l, "update") : l, u = await e.client.from(o.table).update(c).eq(i, r).select(o.select ?? a).single();
169
+ return u.error && f(u.error), { data: u.data };
170
170
  },
171
171
  async delete(t, r) {
172
172
  const s = m(t, e), n = s.pk ?? "id", o = s.softDelete === !0 ? { is_active: !1 } : typeof s.softDelete == "object" ? s.softDelete : null, i = o ? await e.client.from(s.table).update(o).eq(n, r) : await e.client.from(s.table).delete().eq(n, r);
@@ -175,46 +175,47 @@ function I(e) {
175
175
  };
176
176
  }
177
177
  export {
178
- _e as DEFAULT_CRUD_LABELS,
179
- k as WActionBar,
178
+ We as DEFAULT_CRUD_LABELS,
179
+ N as WActionBar,
180
180
  C as WAutoCompleteFK,
181
181
  v as WCrudColumnRenderer,
182
182
  P as WCrudFormDialog,
183
183
  A as WCrudView,
184
- N as WDatePicker,
185
- O as WDateRange,
186
- V as WDetailHeader,
187
- q as WEmptyState,
188
- H as WFormRenderer,
189
- j as WFormSection,
190
- B as WInfoCard,
191
- U as WKpiCard,
192
- G as WKpiGrid,
184
+ O as WDatePicker,
185
+ V as WDateRange,
186
+ q as WDetailHeader,
187
+ H as WEmptyState,
188
+ j as WFormRenderer,
189
+ B as WFormSection,
190
+ U as WInfoCard,
191
+ G as WKpiCard,
192
+ X as WKpiGrid,
193
193
  D as WMoneyInput,
194
- X as WPageHeader,
195
- Y as WPrimeVuePlugin,
196
- J as WProgressFlow,
197
- Q as WSectionHeader,
198
- Z as WStatusTag,
194
+ J as WPageHeader,
195
+ I as WPrimeVuePlugin,
196
+ Q as WProgressFlow,
197
+ Z as WSectionHeader,
198
+ ee as WStatusTag,
199
199
  x as WTransferList,
200
+ F as WTreeSelect,
200
201
  _ as W_AXIOS_KEY,
201
202
  w as W_CONFIG_KEY,
202
203
  W as W_DATA_PROVIDER_KEY,
203
204
  b as createAxiosDataProvider,
204
- I as createSupabaseDataProvider,
205
- ee as downloadCsv,
206
- le as extractApiError,
207
- ae as mapApiFieldToColumnDef,
208
- te as mapApiFieldToFieldDef,
209
- re as mapApiFieldsToColumnDefs,
210
- se as mapApiFieldsToFieldDefs,
211
- ne as toCsv,
212
- ie as useApi,
213
- de as useApiError,
214
- fe as useAppConfirm,
215
- me as useAppToast,
216
- ce as useCrudManager,
217
- pe as useDateInput,
218
- ge as useFormatters
205
+ M as createSupabaseDataProvider,
206
+ ae as downloadCsv,
207
+ de as extractApiError,
208
+ te as mapApiFieldToColumnDef,
209
+ re as mapApiFieldToFieldDef,
210
+ se as mapApiFieldsToColumnDefs,
211
+ ne as mapApiFieldsToFieldDefs,
212
+ oe as toCsv,
213
+ ce as useApi,
214
+ fe as useApiError,
215
+ me as useAppConfirm,
216
+ pe as useAppToast,
217
+ le as useCrudManager,
218
+ ge as useDateInput,
219
+ ye as useFormatters
219
220
  };
220
221
  //# sourceMappingURL=index.js.map