@wgalleti/primevue-components 0.14.0 → 0.16.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/WKanbanBoard.vue_vue_type_script_setup_true_lang-Bmqt_P_5.js +6508 -0
- package/dist/WKanbanBoard.vue_vue_type_script_setup_true_lang-Bmqt_P_5.js.map +1 -0
- package/dist/WKanbanBoard.vue_vue_type_script_setup_true_lang-DFRhQIiG.cjs +28 -0
- package/dist/WKanbanBoard.vue_vue_type_script_setup_true_lang-DFRhQIiG.cjs.map +1 -0
- package/dist/components/crud/WCrudView.vue.d.ts +27 -2
- package/dist/components/index.d.ts +2 -0
- package/dist/components/ui/WMapSelect.vue.d.ts +26 -1
- package/dist/components/ui/WTabNav.vue.d.ts +56 -0
- package/dist/components/ui/WTabPane.d.ts +53 -0
- package/dist/components/ui/WTabViewport.vue.d.ts +14 -0
- package/dist/components.cjs +1 -1
- package/dist/components.js +22 -20
- package/dist/composables/index.d.ts +1 -0
- package/dist/composables/useRouteTabs.d.ts +2 -0
- package/dist/composables.cjs +1 -1
- package/dist/composables.cjs.map +1 -1
- package/dist/composables.js +11 -10
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +113 -107
- package/dist/index.js.map +1 -1
- package/dist/labels-B28P8JNB.js +19 -0
- package/dist/labels-B28P8JNB.js.map +1 -0
- package/dist/labels-pNskxXcl.cjs +2 -0
- package/dist/labels-pNskxXcl.cjs.map +1 -0
- package/dist/{plugin-BKa0eSEM.js → plugin-BaBF7c-e.js} +3 -3
- package/dist/{plugin-BKa0eSEM.js.map → plugin-BaBF7c-e.js.map} +1 -1
- package/dist/primevue-components.css +1 -1
- package/dist/routeTabs--y12evp8.cjs +2 -0
- package/dist/routeTabs--y12evp8.cjs.map +1 -0
- package/dist/routeTabs-NnjycX9L.js +10 -0
- package/dist/routeTabs-NnjycX9L.js.map +1 -0
- package/dist/types/index.d.ts +3 -1
- package/dist/types/manager.d.ts +11 -3
- package/dist/types/mapSelect.d.ts +11 -0
- package/dist/types/routeTabs.d.ts +116 -0
- package/dist/types.cjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.js +9 -20
- package/dist/types.js.map +1 -1
- package/dist/{useFormKeyboardNav-D4Irq5RE.js → useFormKeyboardNav-CLCEo_O5.js} +2 -2
- package/dist/{useFormKeyboardNav-D4Irq5RE.js.map → useFormKeyboardNav-CLCEo_O5.js.map} +1 -1
- package/dist/useRouteTabs-63cZtRr3.js +739 -0
- package/dist/useRouteTabs-63cZtRr3.js.map +1 -0
- package/dist/useRouteTabs-Ds2QpP3I.cjs +2 -0
- package/dist/useRouteTabs-Ds2QpP3I.cjs.map +1 -0
- package/package.json +1 -1
- package/skill/references/components.md +28 -0
- package/dist/WKanbanBoard.vue_vue_type_script_setup_true_lang-D30LZLT8.js +0 -6224
- package/dist/WKanbanBoard.vue_vue_type_script_setup_true_lang-D30LZLT8.js.map +0 -1
- package/dist/WKanbanBoard.vue_vue_type_script_setup_true_lang-x3RaoczK.cjs +0 -36
- package/dist/WKanbanBoard.vue_vue_type_script_setup_true_lang-x3RaoczK.cjs.map +0 -1
- package/dist/useApi-BQJ_C2Yt.js +0 -519
- package/dist/useApi-BQJ_C2Yt.js.map +0 -1
- package/dist/useApi-DpkKD_bN.cjs +0 -2
- package/dist/useApi-DpkKD_bN.cjs.map +0 -1
|
@@ -35,6 +35,17 @@ type __VLS_Props = {
|
|
|
35
35
|
* Opt-in: quando definida, exibe o seletor de colunas e persiste o que foi ocultado. */
|
|
36
36
|
persistState?: string;
|
|
37
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* Rola a tabela até a linha cujo pk é `value` — o par do `v-model:selectedRow`
|
|
40
|
+
* para o sentido "de fora para dentro" (selecionou no mapa/gráfico, a linha
|
|
41
|
+
* aparece). Só alcança a página atual: linha em outra página não é buscada — é
|
|
42
|
+
* do consumidor decidir o que fazer nesse caso (a lista é lazy). Com linhas de
|
|
43
|
+
* expansão abertas o índice DOM diverge do índice do item; aí não rola.
|
|
44
|
+
*/
|
|
45
|
+
declare function scrollToRow(value: unknown): void;
|
|
46
|
+
type __VLS_PublicProps = {
|
|
47
|
+
'selectedRow'?: Record<string, unknown> | null;
|
|
48
|
+
} & __VLS_Props;
|
|
38
49
|
declare function __VLS_template(): {
|
|
39
50
|
attrs: Partial<{}>;
|
|
40
51
|
slots: Partial<Record<`column-${string}`, (_: {
|
|
@@ -88,6 +99,11 @@ declare function __VLS_template(): {
|
|
|
88
99
|
}): any;
|
|
89
100
|
};
|
|
90
101
|
refs: {
|
|
102
|
+
tableRef: ({
|
|
103
|
+
$props: import('primevue/datatable').DataTableProps<any> & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
|
|
104
|
+
$slots: import('primevue/datatable').DataTableSlots<any>;
|
|
105
|
+
$emit: ((e: "page", event: import('primevue/datatable').DataTablePageEvent) => void) & ((e: "sort", event: import('primevue/datatable').DataTableSortEvent) => void) & ((e: "filter", event: import('primevue/datatable').DataTableFilterEvent) => void) & ((e: "value-change", value: any[]) => void) & ((e: "update:first", value: number) => void) & ((e: "update:rows", value: number) => void) & ((e: "update:sortField", value: string) => void) & ((e: "update:sortOrder", value: number | undefined) => void) & ((e: "update:multiSortMeta", value: import('primevue/datatable').DataTableSortMeta[] | null | undefined) => void) & ((e: "update:selection", value: any) => void) & ((e: "update:contextMenuSelection", value: any) => void) & ((e: "update:expandedRows", value: any[] | import('primevue/datatable').DataTableExpandedRows) => void) & ((e: "update:expandedRowGroups", value: any[] | import('primevue/datatable').DataTableExpandedRows) => void) & ((e: "update:filters", value: import('primevue/datatable').DataTableFilterMeta) => void) & ((e: "update:editingRows", value: any[] | import('primevue/datatable').DataTableEditingRows) => void) & ((e: "row-click", event: import('primevue/datatable').DataTableRowClickEvent<any>) => void) & ((e: "row-dblclick", event: import('primevue/datatable').DataTableRowDoubleClickEvent) => void) & ((e: "row-contextmenu", event: import('primevue/datatable').DataTableRowContextMenuEvent) => void) & ((e: "row-select", event: import('primevue/datatable').DataTableRowSelectEvent<any>) => void) & ((e: "row-select-all", event: import('primevue/datatable').DataTableRowSelectAllEvent<any>) => void) & ((e: "row-unselect-all", event: import('primevue/datatable').DataTableRowUnselectAllEvent) => void) & ((e: "row-unselect", event: import('primevue/datatable').DataTableRowUnselectEvent) => void) & ((e: "select-all-change", event: import('primevue/datatable').DataTableSelectAllChangeEvent) => void) & ((e: "column-resize-end", event: import('primevue/datatable').DataTableColumnResizeEndEvent) => void) & ((e: "column-reorder", event: import('primevue/datatable').DataTableColumnReorderEvent) => void) & ((e: "row-reorder", event: import('primevue/datatable').DataTableRowReorderEvent) => void) & ((e: "row-expand", event: import('primevue/datatable').DataTableRowExpandEvent<any>) => void) & ((e: "row-collapse", event: import('primevue/datatable').DataTableRowCollapseEvent) => void) & ((e: "rowgroup-expand", event: import('primevue/datatable').DataTableRowExpandEvent<any>) => void) & ((e: "rowgroup-collapse", event: import('primevue/datatable').DataTableRowCollapseEvent) => void) & ((e: "cell-edit-init", event: import('primevue/datatable').DataTableCellEditInitEvent<any>) => void) & ((e: "cell-edit-complete", event: import('primevue/datatable').DataTableCellEditCompleteEvent<any>) => void) & ((e: "cell-edit-cancel", event: import('primevue/datatable').DataTableCellEditCancelEvent) => void) & ((e: "row-edit-init", event: import('primevue/datatable').DataTableRowEditInitEvent<any>) => void) & ((e: "row-edit-save", event: import('primevue/datatable').DataTableRowEditSaveEvent<any>) => void) & ((e: "row-edit-cancel", event: import('primevue/datatable').DataTableRowEditCancelEvent<any>) => void) & ((e: "state-restore", event: import('primevue/datatable').DataTableStateEvent<any>) => void) & ((e: "state-save", event: import('primevue/datatable').DataTableStateEvent<any>) => void);
|
|
106
|
+
} & import('primevue/datatable').DataTableMethods) | null;
|
|
91
107
|
chooser: ({
|
|
92
108
|
$props: import('primevue/popover').PopoverProps & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
|
|
93
109
|
$slots: import('primevue/popover').PopoverSlots;
|
|
@@ -102,14 +118,18 @@ declare function __VLS_template(): {
|
|
|
102
118
|
rootEl: HTMLDivElement;
|
|
103
119
|
};
|
|
104
120
|
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
105
|
-
declare const __VLS_component: import('vue').DefineComponent<
|
|
121
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_PublicProps, {
|
|
122
|
+
scrollToRow: typeof scrollToRow;
|
|
123
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
106
124
|
"row-expand": (data: unknown) => any;
|
|
107
125
|
"row-collapse": (data: unknown) => any;
|
|
108
126
|
print: (data: Record<string, unknown>) => any;
|
|
109
|
-
|
|
127
|
+
"update:selectedRow": (value: Record<string, unknown> | null) => any;
|
|
128
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
110
129
|
"onRow-expand"?: ((data: unknown) => any) | undefined;
|
|
111
130
|
"onRow-collapse"?: ((data: unknown) => any) | undefined;
|
|
112
131
|
onPrint?: ((data: Record<string, unknown>) => any) | undefined;
|
|
132
|
+
"onUpdate:selectedRow"?: ((value: Record<string, unknown> | null) => any) | undefined;
|
|
113
133
|
}>, {
|
|
114
134
|
dialogWidth: string;
|
|
115
135
|
showSearch: boolean;
|
|
@@ -131,6 +151,11 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
|
|
|
131
151
|
csvScope: "all" | "page";
|
|
132
152
|
csvPageSize: number;
|
|
133
153
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
154
|
+
tableRef: ({
|
|
155
|
+
$props: import('primevue/datatable').DataTableProps<any> & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
|
|
156
|
+
$slots: import('primevue/datatable').DataTableSlots<any>;
|
|
157
|
+
$emit: ((e: "page", event: import('primevue/datatable').DataTablePageEvent) => void) & ((e: "sort", event: import('primevue/datatable').DataTableSortEvent) => void) & ((e: "filter", event: import('primevue/datatable').DataTableFilterEvent) => void) & ((e: "value-change", value: any[]) => void) & ((e: "update:first", value: number) => void) & ((e: "update:rows", value: number) => void) & ((e: "update:sortField", value: string) => void) & ((e: "update:sortOrder", value: number | undefined) => void) & ((e: "update:multiSortMeta", value: import('primevue/datatable').DataTableSortMeta[] | null | undefined) => void) & ((e: "update:selection", value: any) => void) & ((e: "update:contextMenuSelection", value: any) => void) & ((e: "update:expandedRows", value: any[] | import('primevue/datatable').DataTableExpandedRows) => void) & ((e: "update:expandedRowGroups", value: any[] | import('primevue/datatable').DataTableExpandedRows) => void) & ((e: "update:filters", value: import('primevue/datatable').DataTableFilterMeta) => void) & ((e: "update:editingRows", value: any[] | import('primevue/datatable').DataTableEditingRows) => void) & ((e: "row-click", event: import('primevue/datatable').DataTableRowClickEvent<any>) => void) & ((e: "row-dblclick", event: import('primevue/datatable').DataTableRowDoubleClickEvent) => void) & ((e: "row-contextmenu", event: import('primevue/datatable').DataTableRowContextMenuEvent) => void) & ((e: "row-select", event: import('primevue/datatable').DataTableRowSelectEvent<any>) => void) & ((e: "row-select-all", event: import('primevue/datatable').DataTableRowSelectAllEvent<any>) => void) & ((e: "row-unselect-all", event: import('primevue/datatable').DataTableRowUnselectAllEvent) => void) & ((e: "row-unselect", event: import('primevue/datatable').DataTableRowUnselectEvent) => void) & ((e: "select-all-change", event: import('primevue/datatable').DataTableSelectAllChangeEvent) => void) & ((e: "column-resize-end", event: import('primevue/datatable').DataTableColumnResizeEndEvent) => void) & ((e: "column-reorder", event: import('primevue/datatable').DataTableColumnReorderEvent) => void) & ((e: "row-reorder", event: import('primevue/datatable').DataTableRowReorderEvent) => void) & ((e: "row-expand", event: import('primevue/datatable').DataTableRowExpandEvent<any>) => void) & ((e: "row-collapse", event: import('primevue/datatable').DataTableRowCollapseEvent) => void) & ((e: "rowgroup-expand", event: import('primevue/datatable').DataTableRowExpandEvent<any>) => void) & ((e: "rowgroup-collapse", event: import('primevue/datatable').DataTableRowCollapseEvent) => void) & ((e: "cell-edit-init", event: import('primevue/datatable').DataTableCellEditInitEvent<any>) => void) & ((e: "cell-edit-complete", event: import('primevue/datatable').DataTableCellEditCompleteEvent<any>) => void) & ((e: "cell-edit-cancel", event: import('primevue/datatable').DataTableCellEditCancelEvent) => void) & ((e: "row-edit-init", event: import('primevue/datatable').DataTableRowEditInitEvent<any>) => void) & ((e: "row-edit-save", event: import('primevue/datatable').DataTableRowEditSaveEvent<any>) => void) & ((e: "row-edit-cancel", event: import('primevue/datatable').DataTableRowEditCancelEvent<any>) => void) & ((e: "state-restore", event: import('primevue/datatable').DataTableStateEvent<any>) => void) & ((e: "state-save", event: import('primevue/datatable').DataTableStateEvent<any>) => void);
|
|
158
|
+
} & import('primevue/datatable').DataTableMethods) | null;
|
|
134
159
|
chooser: ({
|
|
135
160
|
$props: import('primevue/popover').PopoverProps & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
|
|
136
161
|
$slots: import('primevue/popover').PopoverSlots;
|
|
@@ -31,4 +31,6 @@ export { default as WMarkdownView } from './ui/WMarkdownView.vue';
|
|
|
31
31
|
export { default as WMarkdownEditor } from './form/WMarkdownEditor.vue';
|
|
32
32
|
export { default as WMarkdownToc } from './ui/WMarkdownToc.vue';
|
|
33
33
|
export { default as WTabBar } from './ui/WTabBar.vue';
|
|
34
|
+
export { default as WTabNav } from './ui/WTabNav.vue';
|
|
35
|
+
export { default as WTabViewport } from './ui/WTabViewport.vue';
|
|
34
36
|
export { default as WKanbanBoard } from './ui/WKanbanBoard.vue';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MapSelectFeature, MapSelectGeometry, MapSelectId, MapSelectPolygonStyle } from '../../types/mapSelect';
|
|
1
|
+
import { MapSelectFeature, MapSelectGeometry, MapSelectId, MapSelectPolygonStyle, MapSelectSelectionMode, MapSelectTooltips } from '../../types/mapSelect';
|
|
2
2
|
/**
|
|
3
3
|
* Seleção múltipla de polígonos num mapa de satélite, com painel lateral de busca.
|
|
4
4
|
*
|
|
@@ -66,12 +66,30 @@ type __VLS_Props = {
|
|
|
66
66
|
* duplica a busca da própria tela e a área somada não tem o que somar.
|
|
67
67
|
* `modelValue` continua valendo: dá para destacar um polígono de fora. */
|
|
68
68
|
readonly?: boolean;
|
|
69
|
+
/** Tooltip dos polígonos. `'permanent'` (default) mantém o rótulo sempre
|
|
70
|
+
* visível; `'hover'` só o mostra sob o cursor — com muitos polígonos
|
|
71
|
+
* (100+), o permanente vira um nó DOM por talhão reposicionado a cada
|
|
72
|
+
* pan/zoom, e o `'hover'` devolve a fluidez. */
|
|
73
|
+
tooltips?: MapSelectTooltips;
|
|
74
|
+
/** Modo de seleção por clique. Sem valor, o default preserva o comportamento
|
|
75
|
+
* de sempre: interativo → `'multiple'`, `readonly` → `'none'`. Definido
|
|
76
|
+
* explicitamente, vale MESMO com `readonly` (que segue escondendo painel e
|
|
77
|
+
* rodapé): o clique no polígono emite `update:modelValue`. Em `'single'` o
|
|
78
|
+
* clique substitui a seleção (`[id]`) e clicar no selecionado desmarca. */
|
|
79
|
+
selectionMode?: MapSelectSelectionMode;
|
|
69
80
|
/** Estilo do polígono não selecionado. */
|
|
70
81
|
polygonStyle?: MapSelectPolygonStyle;
|
|
71
82
|
/** Estilo do polígono selecionado. */
|
|
72
83
|
polygonSelectedStyle?: MapSelectPolygonStyle;
|
|
73
84
|
};
|
|
74
85
|
declare function setCollapsed(value: boolean): void;
|
|
86
|
+
declare function fitToScope(): void;
|
|
87
|
+
/** Enquadra a layer de um id, com o mesmo padding do escopo. No-op se o id não
|
|
88
|
+
* tem layer (sem geometria, ainda não chegou, mapa fora do ar). */
|
|
89
|
+
declare function fitToFeature(id: MapSelectId, options?: {
|
|
90
|
+
padding?: [number, number];
|
|
91
|
+
maxZoom?: number;
|
|
92
|
+
}): void;
|
|
75
93
|
/** O mapa costuma nascer escondido (dentro de um Dialog): sem isto o Leaflet
|
|
76
94
|
* calcula 0×0 e desenha só um pedaço quando o container aparece. */
|
|
77
95
|
declare function refreshSize(): void;
|
|
@@ -101,6 +119,11 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
|
|
|
101
119
|
/** Painel flutuante recolhido? (só faz sentido no `layout="sobreposto"`.) */
|
|
102
120
|
collapsed: Readonly<import('vue').Ref<boolean, boolean>>;
|
|
103
121
|
setCollapsed: typeof setCollapsed;
|
|
122
|
+
/** Reenquadra no escopo (ou na união das features) — o fit automático só
|
|
123
|
+
* acontece uma vez; páginas novas de `features` não movem o mapa. */
|
|
124
|
+
fitToScope: typeof fitToScope;
|
|
125
|
+
/** Enquadra o polígono de um id (padding igual ao do escopo). No-op sem layer. */
|
|
126
|
+
fitToFeature: typeof fitToFeature;
|
|
104
127
|
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
105
128
|
"update:modelValue": (ids: MapSelectId[]) => any;
|
|
106
129
|
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
@@ -110,6 +133,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
|
|
|
110
133
|
disabled: boolean;
|
|
111
134
|
height: string;
|
|
112
135
|
readonly: boolean;
|
|
136
|
+
selectionMode: MapSelectSelectionMode;
|
|
113
137
|
emptyMessage: string;
|
|
114
138
|
features: MapSelectFeature[];
|
|
115
139
|
scopeGeometry: MapSelectGeometry | null;
|
|
@@ -127,6 +151,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
|
|
|
127
151
|
expandLabel: string;
|
|
128
152
|
badgeLabel: string;
|
|
129
153
|
mapErrorMessage: string;
|
|
154
|
+
tooltips: MapSelectTooltips;
|
|
130
155
|
polygonStyle: MapSelectPolygonStyle;
|
|
131
156
|
polygonSelectedStyle: MapSelectPolygonStyle;
|
|
132
157
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { RouteTab, RouteTabsApi } from '../../types/routeTabs';
|
|
2
|
+
/**
|
|
3
|
+
* Barra da navegação por abas (estilo browser/ERP) — o par do WTabViewport.
|
|
4
|
+
* Não confundir com o WTabBar (abas de seção DENTRO de uma tela): esta barra
|
|
5
|
+
* lista rotas abertas, fecha (X, botão do meio) e oferece menu de contexto
|
|
6
|
+
* com recarregar/fechar outras/fechar todas. Overflow rola na horizontal e a
|
|
7
|
+
* aba ativa se mantém à vista. Todo o estado vem do `useRouteTabs` via prop.
|
|
8
|
+
*/
|
|
9
|
+
type __VLS_Props = {
|
|
10
|
+
/** Instância retornada por `useRouteTabs` — o dono do estado. */
|
|
11
|
+
tabs: RouteTabsApi;
|
|
12
|
+
ariaLabel?: string;
|
|
13
|
+
};
|
|
14
|
+
declare function __VLS_template(): {
|
|
15
|
+
attrs: Partial<{}>;
|
|
16
|
+
slots: {
|
|
17
|
+
tab?(_: {
|
|
18
|
+
tab: RouteTab;
|
|
19
|
+
active: boolean;
|
|
20
|
+
}): any;
|
|
21
|
+
actions?(_: {}): any;
|
|
22
|
+
};
|
|
23
|
+
refs: {
|
|
24
|
+
trilho: HTMLDivElement;
|
|
25
|
+
menu: ({
|
|
26
|
+
$props: import('primevue/contextmenu').ContextMenuProps & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
|
|
27
|
+
$slots: import('primevue/contextmenu').ContextMenuSlots;
|
|
28
|
+
$emit: ((e: "focus", event: Event) => void) & ((e: "blur", event: Event) => void) & ((e: "before-show") => void) & ((e: "before-hide") => void) & ((e: "show") => void) & ((e: "hide") => void);
|
|
29
|
+
} & import('primevue/contextmenu').ContextMenuMethods) | null;
|
|
30
|
+
};
|
|
31
|
+
rootEl: HTMLDivElement;
|
|
32
|
+
};
|
|
33
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
34
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
35
|
+
close: (tab: RouteTab) => any;
|
|
36
|
+
activate: (tab: RouteTab) => any;
|
|
37
|
+
reload: (tab: RouteTab) => any;
|
|
38
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
39
|
+
onClose?: ((tab: RouteTab) => any) | undefined;
|
|
40
|
+
onActivate?: ((tab: RouteTab) => any) | undefined;
|
|
41
|
+
onReload?: ((tab: RouteTab) => any) | undefined;
|
|
42
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
43
|
+
trilho: HTMLDivElement;
|
|
44
|
+
menu: ({
|
|
45
|
+
$props: import('primevue/contextmenu').ContextMenuProps & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
|
|
46
|
+
$slots: import('primevue/contextmenu').ContextMenuSlots;
|
|
47
|
+
$emit: ((e: "focus", event: Event) => void) & ((e: "blur", event: Event) => void) & ((e: "before-show") => void) & ((e: "before-hide") => void) & ((e: "show") => void) & ((e: "hide") => void);
|
|
48
|
+
} & import('primevue/contextmenu').ContextMenuMethods) | null;
|
|
49
|
+
}, HTMLDivElement>;
|
|
50
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
51
|
+
export default _default;
|
|
52
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
53
|
+
new (): {
|
|
54
|
+
$slots: S;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { PropType, Ref } from 'vue';
|
|
2
|
+
import { RouteTab, RouteTabsApi } from '../../types/routeTabs';
|
|
3
|
+
/**
|
|
4
|
+
* Pane de uma aba — interno do WTabViewport, não exportado no barrel.
|
|
5
|
+
*
|
|
6
|
+
* Faz os dois provides que dão à tela a ilusão de viver sozinha:
|
|
7
|
+
* - `routeLocationKey` (a MESMA chave que o vue-router usa): o `useRoute()` da
|
|
8
|
+
* tela passa a injetar o snapshot congelado da aba, então um pane oculto
|
|
9
|
+
* nunca reage à navegação global.
|
|
10
|
+
* - `W_TAB_HOST_KEY`: contexto para a tela pendurar dialogs no container da
|
|
11
|
+
* aba (`hostEl`), definir o título dinâmico e registrar hooks/guards.
|
|
12
|
+
*
|
|
13
|
+
* Os registros (guards/hooks) são desfeitos via `onScopeDispose` no escopo de
|
|
14
|
+
* QUEM registrou — assim um `reload()` (remount) não acumula guard morto.
|
|
15
|
+
*/
|
|
16
|
+
declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
17
|
+
tab: {
|
|
18
|
+
type: PropType<RouteTab>;
|
|
19
|
+
required: true;
|
|
20
|
+
};
|
|
21
|
+
api: {
|
|
22
|
+
type: PropType<RouteTabsApi>;
|
|
23
|
+
required: true;
|
|
24
|
+
};
|
|
25
|
+
active: {
|
|
26
|
+
type: BooleanConstructor;
|
|
27
|
+
required: true;
|
|
28
|
+
};
|
|
29
|
+
hostEl: {
|
|
30
|
+
type: PropType<Ref<HTMLElement | null>>;
|
|
31
|
+
required: true;
|
|
32
|
+
};
|
|
33
|
+
}>, () => import('vue').VNode<import('vue').RendererNode, import('vue').RendererElement, {
|
|
34
|
+
[key: string]: any;
|
|
35
|
+
}> | null, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
36
|
+
tab: {
|
|
37
|
+
type: PropType<RouteTab>;
|
|
38
|
+
required: true;
|
|
39
|
+
};
|
|
40
|
+
api: {
|
|
41
|
+
type: PropType<RouteTabsApi>;
|
|
42
|
+
required: true;
|
|
43
|
+
};
|
|
44
|
+
active: {
|
|
45
|
+
type: BooleanConstructor;
|
|
46
|
+
required: true;
|
|
47
|
+
};
|
|
48
|
+
hostEl: {
|
|
49
|
+
type: PropType<Ref<HTMLElement | null>>;
|
|
50
|
+
required: true;
|
|
51
|
+
};
|
|
52
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
53
|
+
export default _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RouteTabsApi } from '../../types/routeTabs';
|
|
2
|
+
/**
|
|
3
|
+
* Painéis da navegação por abas: mantém TODA aba hidratada montada num
|
|
4
|
+
* wrapper `v-show` (não `<KeepAlive>` — o DOM nunca sai da árvore, então um
|
|
5
|
+
* dialog com `appendTo` no pane sobrevive intacto à troca de aba, e fechar
|
|
6
|
+
* aba é só desmontar o pane). Substitui o `<RouterView>` do layout: o
|
|
7
|
+
* componente da rota vem já resolvido do `useRouteTabs`.
|
|
8
|
+
*/
|
|
9
|
+
type __VLS_Props = {
|
|
10
|
+
/** Instância retornada por `useRouteTabs` — o dono do estado. */
|
|
11
|
+
tabs: RouteTabsApi;
|
|
12
|
+
};
|
|
13
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
14
|
+
export default _default;
|
package/dist/components.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("./WKanbanBoard.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("./WKanbanBoard.vue_vue_type_script_setup_true_lang-DFRhQIiG.cjs");exports.WActionBar=_._sfc_main;exports.WAutoCompleteFK=_._sfc_main$1;exports.WCheckList=_._sfc_main$2;exports.WCrudColumnRenderer=_._sfc_main$3;exports.WCrudFormDialog=_._sfc_main$4;exports.WCrudSubview=_._sfc_main$5;exports.WCrudView=_._sfc_main$6;exports.WDatePicker=_._sfc_main$7;exports.WDateRange=_._sfc_main$8;exports.WDetailHeader=_._sfc_main$9;exports.WEditableTable=_._sfc_main$10;exports.WEmptyState=_._sfc_main$11;exports.WFileUpload=_._sfc_main$12;exports.WFormRenderer=_._sfc_main$13;exports.WFormSection=_._sfc_main$14;exports.WImageCropper=_.WImageCropper;exports.WInfoCard=_._sfc_main$15;exports.WKanbanBoard=_._sfc_main$16;exports.WKpiCard=_._sfc_main$17;exports.WKpiGrid=_._sfc_main$18;exports.WMapSelect=_._sfc_main$19;exports.WMarkdownEditor=_._sfc_main$20;exports.WMarkdownToc=_._sfc_main$21;exports.WMarkdownView=_._sfc_main$22;exports.WMoneyInput=_._sfc_main$23;exports.WPageHeader=_._sfc_main$24;exports.WProgressFlow=_._sfc_main$25;exports.WSectionHeader=_._sfc_main$26;exports.WStatusTag=_._sfc_main$27;exports.WStepFlow=_._sfc_main$28;exports.WStepSection=_._sfc_main$29;exports.WTabBar=_._sfc_main$30;exports.WTabNav=_._sfc_main$31;exports.WTabViewport=_._sfc_main$32;exports.WTransferList=_._sfc_main$33;exports.WTreeSelect=_._sfc_main$34;
|
|
2
2
|
//# sourceMappingURL=components.cjs.map
|
package/dist/components.js
CHANGED
|
@@ -1,38 +1,40 @@
|
|
|
1
|
-
import { _ as s, a as
|
|
1
|
+
import { _ as s, a as W, b as r, c as o, d as t, e as d, f as i, g as n, h as p, i as l, j as C, k as c, l as u, m as w, n as S, W as m, o as b, p as F, q as T, r as g, s as k, t as D, u as M, v as f, w as B, x as E, y as H, z as K, A as v, B as y, C as A, D as I, E as P, F as R, G as V, H as h } from "./WKanbanBoard.vue_vue_type_script_setup_true_lang-Bmqt_P_5.js";
|
|
2
2
|
export {
|
|
3
3
|
s as WActionBar,
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
W as WAutoCompleteFK,
|
|
5
|
+
r as WCheckList,
|
|
6
6
|
o as WCrudColumnRenderer,
|
|
7
7
|
t as WCrudFormDialog,
|
|
8
8
|
d as WCrudSubview,
|
|
9
9
|
i as WCrudView,
|
|
10
10
|
n as WDatePicker,
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
p as WDateRange,
|
|
12
|
+
l as WDetailHeader,
|
|
13
13
|
C as WEditableTable,
|
|
14
14
|
c as WEmptyState,
|
|
15
15
|
u as WFileUpload,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
w as WFormRenderer,
|
|
17
|
+
S as WFormSection,
|
|
18
|
+
m as WImageCropper,
|
|
19
|
+
b as WInfoCard,
|
|
20
|
+
F as WKanbanBoard,
|
|
21
|
+
T as WKpiCard,
|
|
22
|
+
g as WKpiGrid,
|
|
23
|
+
k as WMapSelect,
|
|
24
24
|
D as WMarkdownEditor,
|
|
25
25
|
M as WMarkdownToc,
|
|
26
26
|
f as WMarkdownView,
|
|
27
27
|
B as WMoneyInput,
|
|
28
28
|
E as WPageHeader,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
H as WProgressFlow,
|
|
30
|
+
K as WSectionHeader,
|
|
31
|
+
v as WStatusTag,
|
|
32
|
+
y as WStepFlow,
|
|
33
|
+
A as WStepSection,
|
|
34
|
+
I as WTabBar,
|
|
35
|
+
P as WTabNav,
|
|
36
|
+
R as WTabViewport,
|
|
37
|
+
V as WTransferList,
|
|
36
38
|
h as WTreeSelect
|
|
37
39
|
};
|
|
38
40
|
//# sourceMappingURL=components.js.map
|
package/dist/composables.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./useRouteTabs-Ds2QpP3I.cjs"),e=require("./useFormKeyboardNav-D4Ow3k4Y.cjs");function s(u){return u}exports.useApi=r.useApi;exports.useCrudManager=r.useCrudManager;exports.useRouteTabs=r.useRouteTabs;exports.useSubviewCrud=r.useSubviewCrud;exports.extractApiError=e.extractApiError;exports.useApiError=e.useApiError;exports.useAppConfirm=e.useAppConfirm;exports.useAppToast=e.useAppToast;exports.useDateInput=e.useDateInput;exports.useFormKeyboardNav=e.useFormKeyboardNav;exports.useFormatters=e.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":["../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":"
|
|
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":"8KAkBO,SAASA,EACdC,EACsB,CACtB,OAAOA,CACT"}
|
package/dist/composables.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
import { u, a as o, b as t } from "./
|
|
2
|
-
import { e as
|
|
3
|
-
function e
|
|
4
|
-
return
|
|
1
|
+
import { u, a as o, b as t, c as p } from "./useRouteTabs-63cZtRr3.js";
|
|
2
|
+
import { e as n, u as f, a as d, b, c as m, d as A, f as C } from "./useFormKeyboardNav-CLCEo_O5.js";
|
|
3
|
+
function s(e) {
|
|
4
|
+
return e;
|
|
5
5
|
}
|
|
6
6
|
export {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
s as defineCrudConfig,
|
|
8
|
+
n as extractApiError,
|
|
9
9
|
u as useApi,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
f as useApiError,
|
|
11
|
+
d as useAppConfirm,
|
|
12
|
+
b as useAppToast,
|
|
13
13
|
o as useCrudManager,
|
|
14
14
|
m as useDateInput,
|
|
15
15
|
A as useFormKeyboardNav,
|
|
16
16
|
C as useFormatters,
|
|
17
|
-
t as
|
|
17
|
+
t as useRouteTabs,
|
|
18
|
+
p as useSubviewCrud
|
|
18
19
|
};
|
|
19
20
|
//# sourceMappingURL=composables.js.map
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("./plugin-D1YvyKXX.cjs"),t=require("./WKanbanBoard.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("./plugin-D1YvyKXX.cjs"),t=require("./WKanbanBoard.vue_vue_type_script_setup_true_lang-DFRhQIiG.cjs"),W=require("./useRouteTabs-Ds2QpP3I.cjs"),m=require("./useFormKeyboardNav-D4Ow3k4Y.cjs"),w=require("./labels-pNskxXcl.cjs"),y=require("./routeTabs--y12evp8.cjs");function C(e,a,r){const n=e;return Array.isArray(n.results)?{data:n.results,page:n.page??a,page_size:n.page_size??r,rows:n.count??0,extras:n.extras??{}}:Array.isArray(n.data)?{data:n.data,page:n.page??a,page_size:n.page_size??r,rows:n.rows??0,extras:n.extras??{}}:{data:Array.isArray(e)?e:[],page:a,page_size:r,rows:Array.isArray(e)?e.length:0,extras:{}}}function T(e){return{async list(a,r={}){const n=await e.get(a,{params:r});return C(n.data,Number(r.page??1),Number(r.page_size??20))},async get(a,r,n){return{data:(await e.get(`${a}${r}/`,n)).data}},async create(a,r,n){return{data:(await e.post(a,r,n)).data}},async update(a,r,n,s){return{data:(await e.patch(`${a}${r}/`,n,s)).data}},async delete(a,r){await e.delete(`${a}${r}/`)}}}const S={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 r=a.dataProvider??T(a.axios),n={axios:a.axios,dataProvider:r,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(_.W_AXIOS_KEY,a.axios),e.provide(_.W_DATA_PROVIDER_KEY,r),e.provide(_.W_CONFIG_KEY,n),a.registerComponents!==!1&&(e.component("WCrudView",t._sfc_main$6),e.component("WCrudFormDialog",t._sfc_main$4),e.component("WCrudColumnRenderer",t._sfc_main$3),e.component("WAutoCompleteFK",t._sfc_main$1),e.component("WMoneyInput",t._sfc_main$23),e.component("WTransferList",t._sfc_main$33),e.component("WTreeSelect",t._sfc_main$34))}};function D(e){return e.split("?")[0].replace(/^\/+|\/+$/g,"").replace(/^api\/v\d+\//,"")}function F(e){return typeof e=="string"?{table:e}:e}function b(e,a=400){return{response:{status:a,data:{detail:e}},message:e}}function A(e){if(e instanceof FormData)throw b("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 r=D(e),n=(s=a.resources)==null?void 0:s[r];if(n)return F(n);if((i=a.allowedTables)!=null&&i.includes(r))return{table:r};throw b(`Recurso Supabase nao registrado para o endpoint "${e}".`,404)}function v(e,a,r){const n=new Set(["page","page_size","search","ordering"]),s={...r.defaultFilters,...a};for(const[i,o]of Object.entries(s))n.has(i)||o===null||o===void 0||o===""||(e=e.eq(i,o));return e}function E(e,a,r){if(typeof a!="string"||!a.trim()||!(r!=null&&r.length))return e;const n=a.trim().replace(/,/g,"\\,"),s=r.map(i=>`${i}.ilike.%${n}%`).join(",");return e.or(s)}function P(e,a){const r=typeof e=="string"&&e?e:a;return r?{field:r.startsWith("-")?r.slice(1):r,ascending:!r.startsWith("-")}:null}function R(e,a){return e?a.mapListItem?e.map(r=>{var n;return(n=a.mapListItem)==null?void 0:n.call(a,r)}):e:[]}function K(e){const a=e.defaultSelect??"*";return{async list(r,n={}){var $;const s=g(r,e),i=Math.max(Number(n.page??1),1),o=Math.max(Number(n.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=v(u,n,s),u=E(u,n.search,s.searchFields);const d=P(n.ordering,s.defaultOrdering);d&&(u=u.order(d.field,{ascending:d.ascending}));const f=await u.range(c,l);return f.error&&p(f.error),{data:R(f.data,s),page:i,page_size:o,rows:f.count??(($=f.data)==null?void 0:$.length)??0,extras:{}}},async get(r,n,s){const i=g(r,e),o=i.pk??"id",c=await e.client.from(i.table).select(i.select??a).eq(o,n).single();return c.error&&p(c.error),{data:c.data}},async create(r,n,s){const i=g(r,e),o=A(n),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(r,n,s,i){const o=g(r,e),c=o.pk??"id",l=A(s),u=o.mapPayload?o.mapPayload(l,"update"):l,d=await e.client.from(o.table).update(u).eq(c,n).select(o.select??a).single();return d.error&&p(d.error),{data:d.data}},async delete(r,n){const s=g(r,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,n):await e.client.from(s.table).delete().eq(i,n);c.error&&p(c.error)}}}exports.W_AXIOS_KEY=_.W_AXIOS_KEY;exports.W_CONFIG_KEY=_.W_CONFIG_KEY;exports.W_DATA_PROVIDER_KEY=_.W_DATA_PROVIDER_KEY;exports.WActionBar=t._sfc_main;exports.WAutoCompleteFK=t._sfc_main$1;exports.WCheckList=t._sfc_main$2;exports.WCrudColumnRenderer=t._sfc_main$3;exports.WCrudFormDialog=t._sfc_main$4;exports.WCrudSubview=t._sfc_main$5;exports.WCrudView=t._sfc_main$6;exports.WDatePicker=t._sfc_main$7;exports.WDateRange=t._sfc_main$8;exports.WDetailHeader=t._sfc_main$9;exports.WEditableTable=t._sfc_main$10;exports.WEmptyState=t._sfc_main$11;exports.WFileUpload=t._sfc_main$12;exports.WFormRenderer=t._sfc_main$13;exports.WFormSection=t._sfc_main$14;exports.WImageCropper=t.WImageCropper;exports.WInfoCard=t._sfc_main$15;exports.WKanbanBoard=t._sfc_main$16;exports.WKpiCard=t._sfc_main$17;exports.WKpiGrid=t._sfc_main$18;exports.WMapSelect=t._sfc_main$19;exports.WMarkdownEditor=t._sfc_main$20;exports.WMarkdownToc=t._sfc_main$21;exports.WMarkdownView=t._sfc_main$22;exports.WMoneyInput=t._sfc_main$23;exports.WPageHeader=t._sfc_main$24;exports.WProgressFlow=t._sfc_main$25;exports.WSectionHeader=t._sfc_main$26;exports.WStatusTag=t._sfc_main$27;exports.WStepFlow=t._sfc_main$28;exports.WStepSection=t._sfc_main$29;exports.WTabBar=t._sfc_main$30;exports.WTabNav=t._sfc_main$31;exports.WTabViewport=t._sfc_main$32;exports.WTransferList=t._sfc_main$33;exports.WTreeSelect=t._sfc_main$34;exports.W_STEP_FLOW_KEY=t.W_STEP_FLOW_KEY;exports.downloadCsv=t.downloadCsv;exports.mapApiFieldToColumnDef=t.mapApiFieldToColumnDef;exports.mapApiFieldToFieldDef=t.mapApiFieldToFieldDef;exports.mapApiFieldsToColumnDefs=t.mapApiFieldsToColumnDefs;exports.mapApiFieldsToFieldDefs=t.mapApiFieldsToFieldDefs;exports.toCsv=t.toCsv;exports.useApi=W.useApi;exports.useCrudManager=W.useCrudManager;exports.useRouteTabs=W.useRouteTabs;exports.useSubviewCrud=W.useSubviewCrud;exports.extractApiError=m.extractApiError;exports.useApiError=m.useApiError;exports.useAppConfirm=m.useAppConfirm;exports.useAppToast=m.useAppToast;exports.useDateInput=m.useDateInput;exports.useFormatters=m.useFormatters;exports.DEFAULT_CRUD_LABELS=w.DEFAULT_CRUD_LABELS;exports.W_TAB_HOST_KEY=y.W_TAB_HOST_KEY;exports.useTabHost=y.useTabHost;exports.WPrimeVuePlugin=S;exports.createAxiosDataProvider=T;exports.createSupabaseDataProvider=K;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -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 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":"iTASA,SAASA,EACPC,EACAC,EACAC,EAC6B,CAC7B,MAAMC,EAAOH,EAEb,OAAI,MAAM,QAAQG,EAAK,OAAO,EACrB,CACL,KAAMA,EAAK,QACX,KAAOA,EAAK,MAAmBF,EAC/B,UAAYE,EAAK,WAAwBD,EACzC,KAAOC,EAAK,OAAoB,EAChC,OAASA,EAAK,QAAsC,CAAA,CAAC,EAIrD,MAAM,QAAQA,EAAK,IAAI,EAClB,CACL,KAAMA,EAAK,KACX,KAAOA,EAAK,MAAmBF,EAC/B,UAAYE,EAAK,WAAwBD,EACzC,KAAOC,EAAK,MAAmB,EAC/B,OAASA,EAAK,QAAsC,CAAA,CAAC,EAIlD,CACL,KAAM,MAAM,QAAQH,CAAY,EAAKA,EAAuB,CAAA,EAC5D,KAAMC,EACN,UAAWC,EACX,KAAM,MAAM,QAAQF,CAAY,EAAIA,EAAa,OAAS,EAC1D,OAAQ,CAAA,CAAC,CAEb,CAEO,SAASI,EAAwBC,EAAoC,CAC1E,MAAO,CACL,MAAM,KACJC,EACAC,EAAiC,GACK,CACtC,MAAMC,EAAW,MAAMH,EAAM,IAAIC,EAAU,CAAE,OAAAC,EAAQ,EACrD,OAAOR,EACLS,EAAS,KACT,OAAOD,EAAO,MAAQ,CAAC,EACvB,OAAOA,EAAO,WAAa,EAAE,CAAA,CAEjC,EAEA,MAAM,IACJD,EACAG,EACAC,EACkC,CAElC,MAAO,CAAE,MADQ,MAAML,EAAM,IAAO,GAAGC,CAAQ,GAAGG,CAAE,IAAKC,CAAM,GACvC,IAAA,CAC1B,EAEA,MAAM,OACJJ,EACAK,EACAD,EACkC,CAElC,MAAO,CAAE,MADQ,MAAML,EAAM,KAAQC,EAAUK,EAASD,CAAM,GACtC,IAAA,CAC1B,EAEA,MAAM,OACJJ,EACAG,EACAE,EACAD,EACkC,CAElC,MAAO,CAAE,MADQ,MAAML,EAAM,MAAS,GAAGC,CAAQ,GAAGG,CAAE,IAAKE,EAASD,CAAM,GAClD,IAAA,CAC1B,EAEA,MAAM,OAAOJ,EAAkBG,EAAoC,CACjE,MAAMJ,EAAM,OAAO,GAAGC,CAAQ,GAAGG,CAAE,GAAG,CACxC,CAAA,CAEJ,CC7EO,MAAMG,EAA0B,CACrC,QAAQC,EAAUC,EAAyB,CACzC,GAAI,EAACA,GAAA,MAAAA,EAAS,QAAS,EAACA,GAAA,MAAAA,EAAS,cAC/B,MAAM,IAAI,MACR,yFAAA,EAIJ,MAAMC,EAAeD,EAAQ,cAAgBV,EAAwBU,EAAQ,KAAM,EAE7EJ,EAAwB,CAC5B,MAAOI,EAAQ,MACf,aAAAC,EACA,gBAAiBD,EAAQ,iBAAmB,GAC5C,WAAYA,EAAQ,YAAc,aAClC,eAAgBA,EAAQ,gBAAkB,mBAC1C,OAAQA,EAAQ,QAAU,QAC1B,SAAUA,EAAQ,UAAY,KAAA,EAG5BA,EAAQ,OACVD,EAAI,QAAQG,cAAaF,EAAQ,KAAK,EAExCD,EAAI,QAAQI,EAAAA,oBAAqBF,CAAY,EAC7CF,EAAI,QAAQK,EAAAA,aAAcR,CAAM,EAE5BI,EAAQ,qBAAuB,KACjCD,EAAI,UAAU,YAAaM,aAAS,EACpCN,EAAI,UAAU,kBAAmBO,aAAe,EAChDP,EAAI,UAAU,sBAAuBQ,aAAmB,EACxDR,EAAI,UAAU,kBAAmBS,aAAe,EAChDT,EAAI,UAAU,cAAeU,cAAW,EACxCV,EAAI,UAAU,gBAAiBW,cAAa,EAC5CX,EAAI,UAAU,cAAeY,cAAW,EAE5C,CACF,ECkBA,SAASC,EAAkBpB,EAA0B,CACnD,OAAOA,EACJ,MAAM,GAAG,EAAE,CAAC,EACZ,QAAQ,aAAc,EAAE,EACxB,QAAQ,eAAgB,EAAE,CAC/B,CAEA,SAASqB,EAAiBC,EAAmE,CAC3F,OAAO,OAAOA,GAAa,SAAW,CAAE,MAAOA,GAAaA,CAC9D,CAEA,SAASC,EAAoBC,EAAiBC,EAAS,IAAK,CAC1D,MAAO,CACL,SAAU,CACR,OAAAA,EACA,KAAM,CAAE,OAAQD,CAAA,CAAQ,EAE1B,QAAAA,CAAA,CAEJ,CAEA,SAASE,EAAmBrB,EAAsE,CAChG,GAAIA,aAAmB,SACrB,MAAMkB,EACJ,0HAAA,EAIJ,OAAOlB,CACT,CAEA,SAASsB,EAAuBC,EAAgD,CAC9E,KAAM,CACJ,SAAU,CACR,KAAM,CACJ,QAAQA,GAAA,YAAAA,EAAO,UAAW,6BAC1B,KAAMA,GAAA,YAAAA,EAAO,KACb,QAASA,GAAA,YAAAA,EAAO,QAChB,KAAMA,GAAA,YAAAA,EAAO,IAAA,CACf,EAEF,SAASA,GAAA,YAAAA,EAAO,UAAW,4BAAA,CAE/B,CAEA,SAASC,EACP7B,EACAQ,EACwB,SACxB,MAAMsB,EAAeV,EAAkBpB,CAAQ,EACzC+B,GAAqBC,EAAAxB,EAAQ,YAAR,YAAAwB,EAAoBF,GAE/C,GAAIC,EACF,OAAOV,EAAiBU,CAAkB,EAG5C,IAAIE,EAAAzB,EAAQ,gBAAR,MAAAyB,EAAuB,SAASH,GAClC,MAAO,CAAE,MAAOA,CAAA,EAGlB,MAAMP,EAAoB,oDAAoDvB,CAAQ,KAAM,GAAG,CACjG,CAEA,SAASkC,EACPC,EACAlC,EACAqB,EAC0B,CAC1B,MAAMc,MAAmB,IAAI,CAAC,OAAQ,YAAa,SAAU,UAAU,CAAC,EAClEC,EAAU,CAAE,GAAGf,EAAS,eAAgB,GAAGrB,CAAA,EAEjD,SAAW,CAACqC,EAAKC,CAAK,IAAK,OAAO,QAAQF,CAAO,EAC3CD,EAAa,IAAIE,CAAG,GAAKC,IAAU,MAAQA,IAAU,QAAaA,IAAU,KAGhFJ,EAAQA,EAAM,GAAGG,EAAKC,CAAK,GAG7B,OAAOJ,CACT,CAEA,SAASK,EACPL,EACAM,EACAC,EAC0B,CAC1B,GAAI,OAAOD,GAAW,UAAY,CAACA,EAAO,QAAU,EAACC,GAAA,MAAAA,EAAc,QACjE,OAAOP,EAGT,MAAMQ,EAAgBF,EAAO,KAAA,EAAO,QAAQ,KAAM,KAAK,EACjDG,EAAaF,EAAa,IAAKG,GAAU,GAAGA,CAAK,WAAWF,CAAa,GAAG,EAAE,KAAK,GAAG,EAE5F,OAAOR,EAAM,GAAGS,CAAU,CAC5B,CAEA,SAASE,EAAcC,EAAmBC,EAAmB,CAC3D,MAAMT,EAAQ,OAAOQ,GAAa,UAAYA,EAAWA,EAAWC,EACpE,OAAKT,EAEE,CACL,MAAOA,EAAM,WAAW,GAAG,EAAIA,EAAM,MAAM,CAAC,EAAIA,EAChD,UAAW,CAACA,EAAM,WAAW,GAAG,CAAA,EAJf,IAMrB,CAEA,SAASU,EAAWpD,EAAkByB,EAAuC,CAC3E,OAAKzB,EACAyB,EAAS,YAEPzB,EAAK,IAAKqD,UAAS,OAAAlB,EAAAV,EAAS,cAAT,YAAAU,EAAA,KAAAV,EAAuB4B,GAAgC,EAF/CrD,EADhB,CAAA,CAIpB,CAEO,SAASsD,EACd3C,EACc,CACd,MAAM4C,EAAgB5C,EAAQ,eAAiB,IAE/C,MAAO,CACL,MAAM,KACJR,EACAC,EAAiC,GACK,OACtC,MAAMqB,EAAWO,EAAgB7B,EAAUQ,CAAO,EAC5C6C,EAAO,KAAK,IAAI,OAAOpD,EAAO,MAAQ,CAAC,EAAG,CAAC,EAC3CqD,EAAW,KAAK,IAAI,OAAOrD,EAAO,WAAa,EAAE,EAAG,CAAC,EACrDsD,GAAQF,EAAO,GAAKC,EACpBE,EAAKD,EAAOD,EAAW,EAE7B,IAAInB,EAAQ3B,EAAQ,OACjB,KAAKc,EAAS,KAAK,EACnB,OAAYA,EAAS,QAAU8B,EAAe,CAAE,MAAO,QAAS,EAEnEjB,EAAQD,EAAaC,EAAOlC,EAAQqB,CAAQ,EAC5Ca,EAAQK,EAAYL,EAAOlC,EAAO,OAAQqB,EAAS,YAAY,EAE/D,MAAMyB,EAAWD,EAAc7C,EAAO,SAAUqB,EAAS,eAAe,EACpEyB,IACFZ,EAAQA,EAAM,MAAMY,EAAS,MAAO,CAAE,UAAWA,EAAS,UAAW,GAGvE,MAAMU,EAAS,MAAMtB,EAAM,MAAMoB,EAAMC,CAAE,EACzC,OAAIC,EAAO,OAAO9B,EAAuB8B,EAAO,KAAK,EAE9C,CACL,KAAMR,EAAQQ,EAAO,KAAMnC,CAAQ,EACnC,KAAA+B,EACA,UAAWC,EACX,KAAMG,EAAO,SAASzB,EAAAyB,EAAO,OAAP,YAAAzB,EAAa,SAAU,EAC7C,OAAQ,CAAA,CAAC,CAEb,EAEA,MAAM,IACJhC,EACAG,EACAuD,EACkC,CAClC,MAAMpC,EAAWO,EAAgB7B,EAAUQ,CAAO,EAC5CmD,EAAKrC,EAAS,IAAM,KACpBmC,EAAS,MAAMjD,EAAQ,OAC1B,KAAKc,EAAS,KAAK,EACnB,OAAUA,EAAS,QAAU8B,CAAa,EAC1C,GAAGO,EAAIxD,CAAE,EACT,OAAA,EAEH,OAAIsD,EAAO,OAAO9B,EAAuB8B,EAAO,KAAK,EAC9C,CAAE,KAAMA,EAAO,IAAA,CACxB,EAEA,MAAM,OACJzD,EACAK,EACAqD,EACkC,CAClC,MAAMpC,EAAWO,EAAgB7B,EAAUQ,CAAO,EAC5CoD,EAAelC,EAAmBrB,CAAO,EACzCwD,EAAgBvC,EAAS,WAC3BA,EAAS,WAAWsC,EAAc,QAAQ,EAC1CA,EACEH,EAAS,MAAMjD,EAAQ,OAC1B,KAAKc,EAAS,KAAK,EACnB,OAAUuC,CAAa,EACvB,OAAOvC,EAAS,QAAU8B,CAAa,EACvC,OAAA,EAEH,OAAIK,EAAO,OAAO9B,EAAuB8B,EAAO,KAAK,EAC9C,CAAE,KAAMA,EAAO,IAAA,CACxB,EAEA,MAAM,OACJzD,EACAG,EACAE,EACAqD,EACkC,CAClC,MAAMpC,EAAWO,EAAgB7B,EAAUQ,CAAO,EAC5CmD,EAAKrC,EAAS,IAAM,KACpBsC,EAAelC,EAAmBrB,CAAO,EACzCwD,EAAgBvC,EAAS,WAC3BA,EAAS,WAAWsC,EAAc,QAAQ,EAC1CA,EACEH,EAAS,MAAMjD,EAAQ,OAC1B,KAAKc,EAAS,KAAK,EACnB,OAAUuC,CAAa,EACvB,GAAGF,EAAIxD,CAAE,EACT,OAAOmB,EAAS,QAAU8B,CAAa,EACvC,OAAA,EAEH,OAAIK,EAAO,OAAO9B,EAAuB8B,EAAO,KAAK,EAC9C,CAAE,KAAMA,EAAO,IAAA,CACxB,EAEA,MAAM,OAAOzD,EAAkBG,EAAoC,CACjE,MAAMmB,EAAWO,EAAgB7B,EAAUQ,CAAO,EAC5CmD,EAAKrC,EAAS,IAAM,KACpBwC,EACJxC,EAAS,aAAe,GACpB,CAAE,UAAW,IACb,OAAOA,EAAS,YAAe,SAC7BA,EAAS,WACT,KAEFmC,EAASK,EACX,MAAMtD,EAAQ,OAAO,KAAKc,EAAS,KAAK,EAAE,OAAOwC,CAAiB,EAAE,GAAGH,EAAIxD,CAAE,EAC7E,MAAMK,EAAQ,OAAO,KAAKc,EAAS,KAAK,EAAE,OAAA,EAAS,GAAGqC,EAAIxD,CAAE,EAE5DsD,EAAO,OAAO9B,EAAuB8B,EAAO,KAAK,CACvD,CAAA,CAEJ"}
|
|
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,15 +1,15 @@
|
|
|
1
1
|
export { WPrimeVuePlugin } from './plugin';
|
|
2
|
-
export { WCrudView, WCrudFormDialog, WCrudColumnRenderer, WEditableTable, WCrudSubview, WAutoCompleteFK, WFormRenderer, WDatePicker, WDateRange, WFileUpload, WImageCropper, WMoneyInput, WTransferList, WTreeSelect, WStatusTag, WPageHeader, WDetailHeader, WEmptyState, WInfoCard, WKpiCard, WKpiGrid, WSectionHeader, WFormSection, WActionBar, WProgressFlow, WStepFlow, WStepSection, WCheckList, WMapSelect, WMarkdownView, WMarkdownEditor, WMarkdownToc, WTabBar, WKanbanBoard, } from './components';
|
|
3
|
-
export { useCrudManager, useSubviewCrud, useApi, useAppToast, useAppConfirm, useApiError, extractApiError, useFormatters, useDateInput, } from './composables';
|
|
2
|
+
export { WCrudView, WCrudFormDialog, WCrudColumnRenderer, WEditableTable, WCrudSubview, WAutoCompleteFK, WFormRenderer, WDatePicker, WDateRange, WFileUpload, WImageCropper, WMoneyInput, WTransferList, WTreeSelect, WStatusTag, WPageHeader, WDetailHeader, WEmptyState, WInfoCard, WKpiCard, WKpiGrid, WSectionHeader, WFormSection, WActionBar, WProgressFlow, WStepFlow, WStepSection, WCheckList, WMapSelect, WMarkdownView, WMarkdownEditor, WMarkdownToc, WTabBar, WTabNav, WTabViewport, WKanbanBoard, } from './components';
|
|
3
|
+
export { useCrudManager, useSubviewCrud, useApi, useAppToast, useAppConfirm, useApiError, extractApiError, useFormatters, useDateInput, useRouteTabs, } from './composables';
|
|
4
4
|
export type { DateValueFormat } from './composables';
|
|
5
5
|
export { createAxiosDataProvider, createSupabaseDataProvider } from './data-providers';
|
|
6
|
-
export type { PaginatedResponse, PaginationState, SortState, UseApiOptions, UseApiReturn, ColumnDef, ColumnType, FieldDef, FieldType, SelectOption, EditableColumnDef, EditableColumnEditor, EditableRow, CheckListItem, CheckListLevel, KanbanColumn, KanbanMoveEvent, MapSelectFeature, MapSelectGeometry, MapSelectId, MapSelectPolygonStyle, MapSelectPosition, RowAction, CrudLabels, KpiItem, CrudManagerConfig, CrudManagerReturn, SubviewCrudConfig, SubviewCrudReturn, WPluginOptions, WPluginConfig, DataProvider, DataProviderListParams, DataProviderListResponse, DataProviderRequestConfig, DataProviderResponse, } from './types';
|
|
6
|
+
export type { PaginatedResponse, PaginationState, SortState, UseApiOptions, UseApiReturn, ColumnDef, ColumnType, FieldDef, FieldType, SelectOption, EditableColumnDef, EditableColumnEditor, EditableRow, CheckListItem, CheckListLevel, TabItem, RouteTab, RouteTabMeta, RouteTabRuntime, RouteTabsApi, TabHostContext, UseRouteTabsOptions, KanbanColumn, KanbanMoveEvent, MapSelectFeature, MapSelectGeometry, MapSelectId, MapSelectPolygonStyle, MapSelectPosition, RowAction, CrudLabels, KpiItem, CrudManagerConfig, CrudManagerReturn, SubviewCrudConfig, SubviewCrudReturn, WPluginOptions, WPluginConfig, DataProvider, DataProviderListParams, DataProviderListResponse, DataProviderRequestConfig, DataProviderResponse, } from './types';
|
|
7
7
|
export type { StatusMapping } from './components/ui/WStatusTag.vue';
|
|
8
8
|
export type { InfoField } from './components/ui/WInfoCard.vue';
|
|
9
9
|
export type { StepFlowContext, StepFlowOrientation } from './utils/stepFlow';
|
|
10
10
|
export { W_STEP_FLOW_KEY } from './utils/stepFlow';
|
|
11
11
|
export type { CreateSupabaseDataProviderOptions, SupabaseDataProviderClient, SupabaseResourceConfig, } from './data-providers';
|
|
12
|
-
export { DEFAULT_CRUD_LABELS, W_AXIOS_KEY, W_CONFIG_KEY, W_DATA_PROVIDER_KEY } from './types';
|
|
12
|
+
export { DEFAULT_CRUD_LABELS, W_AXIOS_KEY, W_CONFIG_KEY, W_DATA_PROVIDER_KEY, W_TAB_HOST_KEY, useTabHost, } from './types';
|
|
13
13
|
export type { ApiFieldMeta } from './utils/fieldMapper';
|
|
14
14
|
export { mapApiFieldToFieldDef, mapApiFieldsToFieldDefs, mapApiFieldToColumnDef, mapApiFieldsToColumnDefs, } from './utils/fieldMapper';
|
|
15
15
|
export type { ToCsvOptions } from './utils/csv';
|