@flowtomic/ui 0.1.8 → 0.1.10
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/components/atoms/actions/badge/badge.d.ts +1 -1
- package/dist/components/atoms/actions/button/button.d.ts +2 -2
- package/dist/components/atoms/animation/sliding-number/sliding-number.d.ts.map +1 -1
- package/dist/components/atoms/animation/sliding-number/sliding-number.js +6 -3
- package/dist/components/atoms/data-display/qr-code/qr-code.d.ts +2 -2
- package/dist/components/atoms/data-display/qr-code/qr-code.d.ts.map +1 -1
- package/dist/components/atoms/data-display/qr-code/qr-code.js +4 -3
- package/dist/components/atoms/feedback/alert/alert.d.ts +1 -1
- package/dist/components/atoms/feedback/alert-dialog/alert-dialog.d.ts +2 -2
- package/dist/components/atoms/forms/input/input.d.ts +2 -2
- package/dist/components/atoms/forms/toggle/toggle.d.ts +1 -1
- package/dist/components/atoms/index.d.ts +2 -0
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/atoms/index.js +1 -0
- package/dist/components/atoms/layout/sidebar/sidebar.d.ts +1 -1
- package/dist/components/atoms/navigation/command/command.d.ts +13 -13
- package/dist/components/atoms/widget-resize-handle/index.d.ts +3 -0
- package/dist/components/atoms/widget-resize-handle/index.d.ts.map +1 -0
- package/dist/components/atoms/widget-resize-handle/index.js +1 -0
- package/dist/components/atoms/widget-resize-handle/widget-resize-handle.d.ts +60 -0
- package/dist/components/atoms/widget-resize-handle/widget-resize-handle.d.ts.map +1 -0
- package/dist/components/atoms/widget-resize-handle/widget-resize-handle.js +75 -0
- package/dist/components/molecules/draggable-widget/draggable-widget.d.ts +73 -0
- package/dist/components/molecules/draggable-widget/draggable-widget.d.ts.map +1 -0
- package/dist/components/molecules/draggable-widget/draggable-widget.js +44 -0
- package/dist/components/molecules/draggable-widget/index.d.ts +3 -0
- package/dist/components/molecules/draggable-widget/index.d.ts.map +1 -0
- package/dist/components/molecules/draggable-widget/index.js +1 -0
- package/dist/components/molecules/edit-mode-toggle/edit-mode-toggle.d.ts +41 -0
- package/dist/components/molecules/edit-mode-toggle/edit-mode-toggle.d.ts.map +1 -0
- package/dist/components/molecules/edit-mode-toggle/edit-mode-toggle.js +26 -0
- package/dist/components/molecules/edit-mode-toggle/index.d.ts +3 -0
- package/dist/components/molecules/edit-mode-toggle/index.d.ts.map +1 -0
- package/dist/components/molecules/edit-mode-toggle/index.js +1 -0
- package/dist/components/molecules/forms/autocomplete/autocomplete-context.d.ts.map +1 -1
- package/dist/components/molecules/forms/autocomplete/autocomplete-item.d.ts.map +1 -1
- package/dist/components/molecules/forms/autocomplete/autocomplete-section.d.ts.map +1 -1
- package/dist/components/molecules/forms/autocomplete/autocomplete.d.ts +1 -1
- package/dist/components/molecules/forms/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/components/molecules/forms/autocomplete/autocomplete.js +4 -4
- package/dist/components/molecules/forms/autocomplete/index.d.ts +2 -2
- package/dist/components/molecules/forms/autocomplete/index.d.ts.map +1 -1
- package/dist/components/molecules/forms/autocomplete/index.js +1 -1
- package/dist/components/molecules/forms/text-editor/text-editor.d.ts.map +1 -1
- package/dist/components/molecules/forms/text-editor/text-editor.js +13 -12
- package/dist/components/molecules/index.d.ts +8 -2
- package/dist/components/molecules/index.d.ts.map +1 -1
- package/dist/components/molecules/index.js +4 -1
- package/dist/components/molecules/navigation/menu-dock/menu-dock.d.ts.map +1 -1
- package/dist/components/molecules/navigation/menu-dock/menu-dock.js +1 -1
- package/dist/components/molecules/widget-renderer/index.d.ts +3 -0
- package/dist/components/molecules/widget-renderer/index.d.ts.map +1 -0
- package/dist/components/molecules/widget-renderer/index.js +1 -0
- package/dist/components/molecules/widget-renderer/widget-renderer.d.ts +46 -0
- package/dist/components/molecules/widget-renderer/widget-renderer.d.ts.map +1 -0
- package/dist/components/molecules/widget-renderer/widget-renderer.js +37 -0
- package/dist/components/organisms/document-editor/document-editor.d.ts.map +1 -1
- package/dist/components/organisms/document-editor/document-editor.js +3 -3
- package/dist/components/organisms/document-editor/index.d.ts +1 -1
- package/dist/components/organisms/document-editor/index.d.ts.map +1 -1
- package/dist/components/organisms/draggable-dashboard-grid/draggable-dashboard-grid.d.ts +65 -0
- package/dist/components/organisms/draggable-dashboard-grid/draggable-dashboard-grid.d.ts.map +1 -0
- package/dist/components/organisms/draggable-dashboard-grid/draggable-dashboard-grid.js +124 -0
- package/dist/components/organisms/draggable-dashboard-grid/index.d.ts +3 -0
- package/dist/components/organisms/draggable-dashboard-grid/index.d.ts.map +1 -0
- package/dist/components/organisms/draggable-dashboard-grid/index.js +1 -0
- package/dist/components/organisms/form-layout/form-layout.d.ts +2 -2
- package/dist/components/organisms/form-layout/form-layout.d.ts.map +1 -1
- package/dist/components/organisms/form-layout/form-layout.js +11 -9
- package/dist/components/organisms/form-layout/index.d.ts +1 -1
- package/dist/components/organisms/form-layout/index.d.ts.map +1 -1
- package/dist/components/organisms/index.d.ts +6 -0
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/components/organisms/index.js +3 -0
- package/dist/components/organisms/model-selector/model-selector.d.ts +1 -1
- package/dist/components/organisms/widget-config-modal/index.d.ts +3 -0
- package/dist/components/organisms/widget-config-modal/index.d.ts.map +1 -0
- package/dist/components/organisms/widget-config-modal/index.js +1 -0
- package/dist/components/organisms/widget-config-modal/widget-config-modal.d.ts +57 -0
- package/dist/components/organisms/widget-config-modal/widget-config-modal.d.ts.map +1 -0
- package/dist/components/organisms/widget-config-modal/widget-config-modal.js +35 -0
- package/dist/components/organisms/widget-palette/index.d.ts +3 -0
- package/dist/components/organisms/widget-palette/index.d.ts.map +1 -0
- package/dist/components/organisms/widget-palette/index.js +1 -0
- package/dist/components/organisms/widget-palette/widget-palette.d.ts +71 -0
- package/dist/components/organisms/widget-palette/widget-palette.d.ts.map +1 -0
- package/dist/components/organisms/widget-palette/widget-palette.js +42 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +458 -454
- package/dist/types/dashboard.d.ts +74 -0
- package/dist/types/dashboard.d.ts.map +1 -0
- package/dist/types/dashboard.js +7 -0
- package/package.json +3 -2
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { closestCenter, DndContext, DragOverlay, KeyboardSensor, PointerSensor, useDroppable, useSensor, useSensors, } from "@dnd-kit/core";
|
|
3
|
+
import { useDashboardLayout } from "@flowtomic/logic";
|
|
4
|
+
import { useEffect, useMemo, useState } from "react";
|
|
5
|
+
import { DraggableWidget } from "@/components/molecules/draggable-widget";
|
|
6
|
+
import { cn } from "@/lib/utils";
|
|
7
|
+
/**
|
|
8
|
+
* Grid principal com drag and drop
|
|
9
|
+
*
|
|
10
|
+
* Componente genérico que gerencia um grid de widgets com funcionalidades
|
|
11
|
+
* de drag and drop, redimensionamento e edição.
|
|
12
|
+
*/
|
|
13
|
+
export function DraggableDashboardGrid({ widgets, renderWidget, isEditMode, gridConfig, onConfigureWidget, onRemoveWidget, onResizeWidget, onAddWidget, onMoveWidget, emptyState, className, }) {
|
|
14
|
+
// Normaliza gridConfig com defaults
|
|
15
|
+
const normalizedGridConfig = useMemo(() => ({
|
|
16
|
+
columns: 12,
|
|
17
|
+
cellSize: 50,
|
|
18
|
+
gap: 16,
|
|
19
|
+
...gridConfig,
|
|
20
|
+
}), [gridConfig]);
|
|
21
|
+
// Estado local para gerenciar layout (sincroniza com props)
|
|
22
|
+
const [localWidgets, setLocalWidgets] = useState(widgets);
|
|
23
|
+
// Sincroniza estado local com props externas
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
setLocalWidgets(widgets);
|
|
26
|
+
}, [widgets]);
|
|
27
|
+
// Hook headless para lógica de layout
|
|
28
|
+
const { getWidgetGridPosition, moveWidget: moveWidgetLayout, resizeWidget: resizeWidgetLayout, } = useDashboardLayout({
|
|
29
|
+
widgetsLayout: localWidgets,
|
|
30
|
+
gridConfig: normalizedGridConfig,
|
|
31
|
+
onUpdateLayout: (layout) => {
|
|
32
|
+
setLocalWidgets(layout);
|
|
33
|
+
// Chama callback externo se fornecido
|
|
34
|
+
if (onMoveWidget) {
|
|
35
|
+
layout.forEach((w) => {
|
|
36
|
+
const original = widgets.find((ow) => ow.id === w.id);
|
|
37
|
+
if (original && (original.x !== w.x || original.y !== w.y)) {
|
|
38
|
+
onMoveWidget(w.id, w.x, w.y);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
const [activeId, setActiveId] = useState(null);
|
|
45
|
+
// Configura sensores para drag and drop
|
|
46
|
+
const sensors = useSensors(useSensor(PointerSensor, {
|
|
47
|
+
activationConstraint: {
|
|
48
|
+
distance: 8, // Requer 8px de movimento antes de iniciar drag
|
|
49
|
+
},
|
|
50
|
+
}), useSensor(KeyboardSensor));
|
|
51
|
+
// Widget ativo sendo arrastado
|
|
52
|
+
const activeWidget = useMemo(() => {
|
|
53
|
+
return localWidgets.find((w) => w.id === activeId) || null;
|
|
54
|
+
}, [localWidgets, activeId]);
|
|
55
|
+
const handleDragStart = (event) => {
|
|
56
|
+
setActiveId(event.active.id);
|
|
57
|
+
};
|
|
58
|
+
const handleDragMove = (event) => {
|
|
59
|
+
if (!isEditMode || !activeId)
|
|
60
|
+
return;
|
|
61
|
+
const { delta } = event;
|
|
62
|
+
const activeWidget = localWidgets.find((w) => w.id === activeId);
|
|
63
|
+
if (!activeWidget)
|
|
64
|
+
return;
|
|
65
|
+
// Calcula nova posição baseada no delta do movimento
|
|
66
|
+
// Usa o tamanho da célula do grid para snap to grid
|
|
67
|
+
const cellSize = (normalizedGridConfig.cellSize || 50) + (normalizedGridConfig.gap || 16);
|
|
68
|
+
// Calcula delta em unidades de grid (snap to grid)
|
|
69
|
+
const deltaX = Math.round(delta.x / cellSize);
|
|
70
|
+
const deltaY = Math.round(delta.y / cellSize);
|
|
71
|
+
// Se não houver movimento significativo, não atualiza
|
|
72
|
+
if (deltaX === 0 && deltaY === 0)
|
|
73
|
+
return;
|
|
74
|
+
const newX = Math.max(0, Math.min(normalizedGridConfig.columns - activeWidget.w, activeWidget.x + deltaX));
|
|
75
|
+
const newY = Math.max(0, activeWidget.y + deltaY);
|
|
76
|
+
// Valida limites do grid
|
|
77
|
+
if (newX + activeWidget.w > normalizedGridConfig.columns)
|
|
78
|
+
return;
|
|
79
|
+
// Move widget para nova posição apenas se mudou
|
|
80
|
+
if (newX !== activeWidget.x || newY !== activeWidget.y) {
|
|
81
|
+
moveWidgetLayout(activeWidget.id, newX, newY);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const handleDragEnd = (event) => {
|
|
85
|
+
const { active, over } = event;
|
|
86
|
+
// Se arrastou da paleta para o grid
|
|
87
|
+
if (active.data.current?.type === "palette-widget" && over) {
|
|
88
|
+
const widgetType = active.data.current.widgetType;
|
|
89
|
+
const defaultSize = active.data.current.defaultSize;
|
|
90
|
+
// Adiciona novo widget na próxima posição disponível
|
|
91
|
+
onAddWidget?.(widgetType, defaultSize);
|
|
92
|
+
}
|
|
93
|
+
setActiveId(null);
|
|
94
|
+
};
|
|
95
|
+
const handleDragCancel = () => {
|
|
96
|
+
setActiveId(null);
|
|
97
|
+
};
|
|
98
|
+
const handleResize = (widgetId, w, h) => {
|
|
99
|
+
resizeWidgetLayout(widgetId, w, h);
|
|
100
|
+
onResizeWidget?.(widgetId, w, h);
|
|
101
|
+
};
|
|
102
|
+
// Droppable area para receber widgets da paleta
|
|
103
|
+
const { setNodeRef: setDroppableRef } = useDroppable({
|
|
104
|
+
id: "dashboard-grid",
|
|
105
|
+
data: {
|
|
106
|
+
type: "grid",
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
// Empty state apenas quando está em modo de edição e não há widgets
|
|
110
|
+
if (localWidgets.length === 0 && isEditMode) {
|
|
111
|
+
if (emptyState) {
|
|
112
|
+
return _jsx(_Fragment, { children: emptyState });
|
|
113
|
+
}
|
|
114
|
+
return (_jsxs("div", { className: "flex flex-col items-center justify-center min-h-[400px] p-8 text-center", children: [_jsx("div", { className: "mb-4", children: _jsx("svg", { className: "w-24 h-24 text-muted-foreground mx-auto", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z" }) }) }), _jsx("h3", { className: "text-xl font-semibold text-foreground mb-2", children: "Nenhum widget configurado" }), _jsx("p", { className: "text-muted-foreground mb-6 max-w-md", children: "Arraste widgets da paleta para come\u00E7ar a personalizar seu dashboard." })] }));
|
|
115
|
+
}
|
|
116
|
+
return (_jsxs(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragStart: handleDragStart, onDragMove: handleDragMove, onDragEnd: handleDragEnd, onDragCancel: handleDragCancel, children: [_jsx("div", { ref: setDroppableRef, className: cn(className), style: {
|
|
117
|
+
display: "grid",
|
|
118
|
+
gridTemplateColumns: `repeat(${normalizedGridConfig.columns}, minmax(0, 1fr))`,
|
|
119
|
+
gap: `${normalizedGridConfig.gap}px`,
|
|
120
|
+
}, children: localWidgets.map((widget) => {
|
|
121
|
+
const gridPosition = getWidgetGridPosition(widget);
|
|
122
|
+
return (_jsx(DraggableWidget, { widgetId: widget.id, widgetType: widget.type, isEditMode: isEditMode, gridPosition: gridPosition, currentWidth: widget.w, currentHeight: widget.h, cellSize: normalizedGridConfig.cellSize, gap: normalizedGridConfig.gap, onConfigure: onConfigureWidget, onRemove: onRemoveWidget, onResize: handleResize, children: renderWidget(widget) }, widget.id));
|
|
123
|
+
}) }), _jsx(DragOverlay, { children: activeWidget && _jsx("div", { className: "opacity-50", children: renderWidget(activeWidget) }) })] }));
|
|
124
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/draggable-dashboard-grid/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DraggableDashboardGrid } from "./draggable-dashboard-grid";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as React from "react";
|
|
1
|
+
import type * as React from "react";
|
|
2
2
|
import type { Control, FieldPath, FieldValues, UseFormReturn } from "react-hook-form";
|
|
3
3
|
/**
|
|
4
4
|
* Tipos de campo suportados pelo FormLayout
|
|
@@ -104,7 +104,7 @@ export interface FormLayoutProps<T extends FieldValues> {
|
|
|
104
104
|
* Layout de formulário com seções e campos configuráveis
|
|
105
105
|
* Suporta múltiplos tipos de campo e layout responsivo em grid
|
|
106
106
|
*/
|
|
107
|
-
export declare function FormLayout<T extends FieldValues>({ form, sections, onSubmit, formId, title, description, headerContent }: FormLayoutProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
107
|
+
export declare function FormLayout<T extends FieldValues>({ form, sections, onSubmit, formId, title, description, headerContent, }: FormLayoutProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
108
108
|
export declare namespace FormLayout {
|
|
109
109
|
var displayName: string;
|
|
110
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-layout.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/form-layout/form-layout.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"form-layout.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/form-layout/form-layout.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,16 +3,18 @@ import { format } from "date-fns";
|
|
|
3
3
|
import { ptBR } from "date-fns/locale";
|
|
4
4
|
import { CalendarIcon } from "lucide-react";
|
|
5
5
|
import { NumericFormat } from "react-number-format";
|
|
6
|
-
import { cn } from "@/lib/utils";
|
|
7
|
-
import { Button, Calendar, Checkbox, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Input, Popover, PopoverContent, PopoverTrigger, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Separator, Switch, RadioGroup, RadioGroupItem, Slider, Toggle, InputOTP, InputOTPGroup, InputOTPSlot, } from "../../atoms";
|
|
8
6
|
import { PasswordInput } from "@/components/molecules";
|
|
7
|
+
import { cn } from "@/lib/utils";
|
|
8
|
+
import { Button, Calendar, Checkbox, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Input, InputOTP, InputOTPGroup, InputOTPSlot, Popover, PopoverContent, PopoverTrigger, RadioGroup, RadioGroupItem, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Separator, Slider, Switch, Toggle, } from "../../atoms";
|
|
9
9
|
/**
|
|
10
10
|
* Campo de formulário base que renderiza diferentes tipos de input
|
|
11
11
|
* baseado na configuração fornecida
|
|
12
12
|
*/
|
|
13
13
|
export function BaseFormField({ config, control }) {
|
|
14
|
-
const { name, label, type, placeholder, description, required, options, decimalScale, disabled, prefix, radioOptions, otpLength, sliderRange } = config;
|
|
15
|
-
return (_jsx(FormField, { control: control, name: name, render: ({ field }) => (_jsxs(FormItem, { className: type === "checkbox"
|
|
14
|
+
const { name, label, type, placeholder, description, required, options, decimalScale, disabled, prefix, radioOptions, otpLength, sliderRange, } = config;
|
|
15
|
+
return (_jsx(FormField, { control: control, name: name, render: ({ field }) => (_jsxs(FormItem, { className: type === "checkbox"
|
|
16
|
+
? "flex flex-row items-start space-x-3 space-y-0 rounded-md border p-4"
|
|
17
|
+
: "", children: [type !== "checkbox" && (_jsxs(FormLabel, { children: [label, " ", required && _jsx("span", { className: "text-destructive", children: "*" })] })), _jsx(FormControl, { children: (() => {
|
|
16
18
|
switch (type) {
|
|
17
19
|
case "text":
|
|
18
20
|
return (_jsx(Input, { ...field, placeholder: placeholder, disabled: disabled, value: field.value || "" }));
|
|
@@ -37,12 +39,12 @@ export function BaseFormField({ config, control }) {
|
|
|
37
39
|
return (_jsx(NumericFormat, { customInput: Input, decimalSeparator: ",", thousandSeparator: ".", decimalScale: decimalScale ?? 2, value: field.value ?? "", onValueChange: (values) => field.onChange(values.floatValue), placeholder: placeholder, disabled: disabled, prefix: prefix ?? "R$ " }));
|
|
38
40
|
case "select":
|
|
39
41
|
return (_jsxs(Select, { onValueChange: field.onChange, value: String(field.value || ""), disabled: disabled, children: [_jsx(FormControl, { children: _jsx(SelectTrigger, { children: _jsx(SelectValue, { placeholder: placeholder || "Selecione" }) }) }), _jsx(SelectContent, { children: options?.map((opt) => {
|
|
40
|
-
const val = typeof opt ===
|
|
41
|
-
const lab = typeof opt ===
|
|
42
|
-
return _jsx(SelectItem, { value: val, children: lab }, val);
|
|
42
|
+
const val = typeof opt === "object" ? String(opt.value) : opt;
|
|
43
|
+
const lab = typeof opt === "object" ? opt.label : opt;
|
|
44
|
+
return (_jsx(SelectItem, { value: val, children: lab }, val));
|
|
43
45
|
}) })] }));
|
|
44
46
|
case "date":
|
|
45
|
-
return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", disabled: disabled, className: cn("w-full justify-start text-left font-normal", !field.value && "text-muted-foreground"), children: [_jsx(CalendarIcon, { className: "mr-2 h-4 w-4" }), field.value ? format(new Date(field.value), "dd/MM/yyyy", { locale: ptBR }) : _jsx("span", { children: placeholder || "Selecione" })] }) }), _jsx(PopoverContent, { className: "w-auto p-0", align: "start", children: _jsx(Calendar, { mode: "single", selected: field.value ? new Date(field.value) : undefined, onSelect: field.onChange, locale: ptBR }) })] }));
|
|
47
|
+
return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", disabled: disabled, className: cn("w-full justify-start text-left font-normal", !field.value && "text-muted-foreground"), children: [_jsx(CalendarIcon, { className: "mr-2 h-4 w-4" }), field.value ? (format(new Date(field.value), "dd/MM/yyyy", { locale: ptBR })) : (_jsx("span", { children: placeholder || "Selecione" }))] }) }), _jsx(PopoverContent, { className: "w-auto p-0", align: "start", children: _jsx(Calendar, { mode: "single", selected: field.value ? new Date(field.value) : undefined, onSelect: field.onChange, locale: ptBR }) })] }));
|
|
46
48
|
case "checkbox":
|
|
47
49
|
return (_jsxs(_Fragment, { children: [_jsx(Checkbox, { checked: !!field.value, onCheckedChange: field.onChange, disabled: disabled }), _jsxs("div", { className: "space-y-1 leading-none", children: [_jsx(FormLabel, { children: label }), description && _jsx(FormDescription, { children: description })] })] }));
|
|
48
50
|
case "switch":
|
|
@@ -65,7 +67,7 @@ BaseFormField.displayName = "BaseFormField";
|
|
|
65
67
|
* Layout de formulário com seções e campos configuráveis
|
|
66
68
|
* Suporta múltiplos tipos de campo e layout responsivo em grid
|
|
67
69
|
*/
|
|
68
|
-
export function FormLayout({ form, sections, onSubmit, formId, title, description, headerContent }) {
|
|
70
|
+
export function FormLayout({ form, sections, onSubmit, formId, title, description, headerContent, }) {
|
|
69
71
|
/**
|
|
70
72
|
* Utilitário para classes de grid responsivo
|
|
71
73
|
* @param cols - Número de colunas (1-3)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { BaseFormField,
|
|
1
|
+
export { BaseFormField, type BaseFormFieldProps, type FormFieldConfig, type FormFieldType, FormLayout, type FormLayoutProps, type FormSectionConfig, } from "./form-layout";
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/form-layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/form-layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC"}
|
|
@@ -18,6 +18,8 @@ export type { DashboardMovementsSectionProps, Movement } from "./dashboard-movem
|
|
|
18
18
|
export { DashboardMovementsSection } from "./dashboard-movements-section";
|
|
19
19
|
export type { DocumentEditorProps, DocumentPage } from "./document-editor";
|
|
20
20
|
export { DocumentEditor } from "./document-editor";
|
|
21
|
+
export type { DraggableDashboardGridProps } from "./draggable-dashboard-grid";
|
|
22
|
+
export { DraggableDashboardGrid } from "./draggable-dashboard-grid";
|
|
21
23
|
export { Edge } from "./edge";
|
|
22
24
|
export type { BaseFormFieldProps, FormFieldConfig, FormFieldType, FormLayoutProps, FormSectionConfig, } from "./form-layout";
|
|
23
25
|
export { BaseFormField, FormLayout } from "./form-layout";
|
|
@@ -53,4 +55,8 @@ export type { ToolbarProps } from "./toolbar";
|
|
|
53
55
|
export { Toolbar } from "./toolbar";
|
|
54
56
|
export type { WebPreviewBodyProps, WebPreviewConsoleProps, WebPreviewContextValue, WebPreviewNavigationButtonProps, WebPreviewNavigationProps, WebPreviewProps, WebPreviewUrlProps, } from "./web-preview";
|
|
55
57
|
export { WebPreview, WebPreviewBody, WebPreviewConsole, WebPreviewNavigation, WebPreviewNavigationButton, WebPreviewUrl, } from "./web-preview";
|
|
58
|
+
export type { WidgetConfigModalProps } from "./widget-config-modal";
|
|
59
|
+
export { WidgetConfigModal } from "./widget-config-modal";
|
|
60
|
+
export type { WidgetPaletteItem, WidgetPaletteProps } from "./widget-palette";
|
|
61
|
+
export { WidgetPalette } from "./widget-palette";
|
|
56
62
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/organisms/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/organisms/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export { DashboardHeaderActions } from "./dashboard-header-actions";
|
|
|
10
10
|
export { DashboardLayout } from "./dashboard-layout";
|
|
11
11
|
export { DashboardMovementsSection } from "./dashboard-movements-section";
|
|
12
12
|
export { DocumentEditor } from "./document-editor";
|
|
13
|
+
export { DraggableDashboardGrid } from "./draggable-dashboard-grid";
|
|
13
14
|
export { Edge } from "./edge";
|
|
14
15
|
export { BaseFormField, FormLayout } from "./form-layout";
|
|
15
16
|
export { GenealogyCanvas } from "./genealogy-canvas";
|
|
@@ -28,3 +29,5 @@ export { ScriptEditor } from "./script-editor";
|
|
|
28
29
|
export { StatsGrid } from "./stats-grid";
|
|
29
30
|
export { Toolbar } from "./toolbar";
|
|
30
31
|
export { WebPreview, WebPreviewBody, WebPreviewConsole, WebPreviewNavigation, WebPreviewNavigationButton, WebPreviewUrl, } from "./web-preview";
|
|
32
|
+
export { WidgetConfigModal } from "./widget-config-modal";
|
|
33
|
+
export { WidgetPalette } from "./widget-palette";
|
|
@@ -30,7 +30,7 @@ export declare const ModelSelectorInput: React.ForwardRefExoticComponent<Omit<Om
|
|
|
30
30
|
ref?: React.Ref<HTMLInputElement>;
|
|
31
31
|
} & {
|
|
32
32
|
asChild?: boolean;
|
|
33
|
-
}, "
|
|
33
|
+
}, "key" | "asChild" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "value" | "onChange" | "type"> & {
|
|
34
34
|
value?: string;
|
|
35
35
|
onValueChange?: (search: string) => void;
|
|
36
36
|
} & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/widget-config-modal/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WidgetConfigModal } from "./widget-config-modal";
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WidgetConfigModal - Organism Component
|
|
3
|
+
*
|
|
4
|
+
* Modal de configuração de widgets com render prop pattern.
|
|
5
|
+
* Totalmente extensível e genérico.
|
|
6
|
+
*/
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
export interface WidgetConfigModalProps {
|
|
9
|
+
/**
|
|
10
|
+
* Se o modal está aberto
|
|
11
|
+
*/
|
|
12
|
+
open: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Widget a ser configurado
|
|
15
|
+
*/
|
|
16
|
+
widget: {
|
|
17
|
+
id: string;
|
|
18
|
+
type: string;
|
|
19
|
+
config?: Record<string, unknown>;
|
|
20
|
+
} | null;
|
|
21
|
+
/**
|
|
22
|
+
* Callback quando configuração é salva
|
|
23
|
+
*/
|
|
24
|
+
onSave: (widgetId: string, config: Record<string, unknown>) => void;
|
|
25
|
+
/**
|
|
26
|
+
* Callback quando modal é fechado
|
|
27
|
+
*/
|
|
28
|
+
onClose: () => void;
|
|
29
|
+
/**
|
|
30
|
+
* Render prop para renderizar formulário de configuração customizado
|
|
31
|
+
*/
|
|
32
|
+
renderConfigForm?: (widget: {
|
|
33
|
+
id: string;
|
|
34
|
+
type: string;
|
|
35
|
+
config?: Record<string, unknown>;
|
|
36
|
+
}, config: Record<string, unknown>, onUpdate: (config: Record<string, unknown>) => void) => React.ReactNode;
|
|
37
|
+
/**
|
|
38
|
+
* Título do modal (opcional)
|
|
39
|
+
*/
|
|
40
|
+
title?: string;
|
|
41
|
+
/**
|
|
42
|
+
* Descrição do modal (opcional)
|
|
43
|
+
*/
|
|
44
|
+
description?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Classe CSS adicional
|
|
47
|
+
*/
|
|
48
|
+
className?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Modal de configuração de widget
|
|
52
|
+
*
|
|
53
|
+
* Componente genérico que usa render prop pattern para permitir
|
|
54
|
+
* formulários de configuração totalmente customizados.
|
|
55
|
+
*/
|
|
56
|
+
export declare function WidgetConfigModal({ open, widget, onSave, onClose, renderConfigForm, title, description, className, }: WidgetConfigModalProps): import("react/jsx-runtime").JSX.Element | null;
|
|
57
|
+
//# sourceMappingURL=widget-config-modal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-config-modal.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/widget-config-modal/widget-config-modal.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;OAEG;IACH,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IAE9E;;OAEG;IACH,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAEpE;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,CACjB,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EACtE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,KAChD,KAAK,CAAC,SAAS,CAAC;IAErB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,MAAM,EACN,MAAM,EACN,OAAO,EACP,gBAAgB,EAChB,KAAK,EACL,WAAW,EACX,SAAS,GACV,EAAE,sBAAsB,kDAoDxB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* WidgetConfigModal - Organism Component
|
|
4
|
+
*
|
|
5
|
+
* Modal de configuração de widgets com render prop pattern.
|
|
6
|
+
* Totalmente extensível e genérico.
|
|
7
|
+
*/
|
|
8
|
+
import * as React from "react";
|
|
9
|
+
import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/atoms";
|
|
10
|
+
import { cn } from "@/lib/utils";
|
|
11
|
+
/**
|
|
12
|
+
* Modal de configuração de widget
|
|
13
|
+
*
|
|
14
|
+
* Componente genérico que usa render prop pattern para permitir
|
|
15
|
+
* formulários de configuração totalmente customizados.
|
|
16
|
+
*/
|
|
17
|
+
export function WidgetConfigModal({ open, widget, onSave, onClose, renderConfigForm, title, description, className, }) {
|
|
18
|
+
if (!widget)
|
|
19
|
+
return null;
|
|
20
|
+
const [config, setConfig] = React.useState(widget.config || {});
|
|
21
|
+
// Atualiza config quando widget muda
|
|
22
|
+
React.useEffect(() => {
|
|
23
|
+
if (widget) {
|
|
24
|
+
setConfig(widget.config || {});
|
|
25
|
+
}
|
|
26
|
+
}, [widget]);
|
|
27
|
+
const handleSave = () => {
|
|
28
|
+
onSave(widget.id, config);
|
|
29
|
+
onClose();
|
|
30
|
+
};
|
|
31
|
+
const handleUpdate = (newConfig) => {
|
|
32
|
+
setConfig((prev) => ({ ...prev, ...newConfig }));
|
|
33
|
+
};
|
|
34
|
+
return (_jsx(Dialog, { open: open, onOpenChange: (isOpen) => !isOpen && onClose(), children: _jsxs(DialogContent, { className: cn("max-w-2xl max-h-[90vh] overflow-y-auto", className), children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: title || `Configurar Widget` }), _jsx(DialogDescription, { children: description || `Personalize os dados e configurações do widget "${widget.type}"` })] }), _jsx("div", { className: "space-y-6", children: renderConfigForm ? (renderConfigForm(widget, config, handleUpdate)) : (_jsx("div", { className: "p-4 text-sm text-muted-foreground", children: "Forne\u00E7a uma fun\u00E7\u00E3o renderConfigForm para personalizar o formul\u00E1rio." })) }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "outline", onClick: onClose, children: "Cancelar" }), _jsx(Button, { type: "button", onClick: handleSave, children: "Salvar Configura\u00E7\u00E3o" })] })] }) }));
|
|
35
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/widget-palette/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WidgetPalette } from "./widget-palette";
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WidgetPalette - Organism Component
|
|
3
|
+
*
|
|
4
|
+
* Sidebar com widgets disponíveis para adicionar ao dashboard.
|
|
5
|
+
* Componente genérico e totalmente configurável via props.
|
|
6
|
+
*/
|
|
7
|
+
export interface WidgetPaletteItem {
|
|
8
|
+
/**
|
|
9
|
+
* ID único do widget
|
|
10
|
+
*/
|
|
11
|
+
id: string;
|
|
12
|
+
/**
|
|
13
|
+
* Tipo do widget (string genérico)
|
|
14
|
+
*/
|
|
15
|
+
type: string;
|
|
16
|
+
/**
|
|
17
|
+
* Nome do widget
|
|
18
|
+
*/
|
|
19
|
+
name: string;
|
|
20
|
+
/**
|
|
21
|
+
* Descrição do widget
|
|
22
|
+
*/
|
|
23
|
+
description: string;
|
|
24
|
+
/**
|
|
25
|
+
* Ícone do widget
|
|
26
|
+
*/
|
|
27
|
+
icon: React.ComponentType<{
|
|
28
|
+
className?: string;
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* Tamanho padrão do widget (largura x altura)
|
|
32
|
+
*/
|
|
33
|
+
defaultSize: {
|
|
34
|
+
w: number;
|
|
35
|
+
h: number;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export interface WidgetPaletteProps {
|
|
39
|
+
/**
|
|
40
|
+
* Se a paleta está aberta
|
|
41
|
+
*/
|
|
42
|
+
isOpen: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Lista de widgets disponíveis (obrigatória)
|
|
45
|
+
*/
|
|
46
|
+
widgets: WidgetPaletteItem[];
|
|
47
|
+
/**
|
|
48
|
+
* Callback para fechar a paleta
|
|
49
|
+
*/
|
|
50
|
+
onClose?: () => void;
|
|
51
|
+
/**
|
|
52
|
+
* Título da paleta (opcional)
|
|
53
|
+
*/
|
|
54
|
+
title?: string;
|
|
55
|
+
/**
|
|
56
|
+
* Descrição da paleta (opcional)
|
|
57
|
+
*/
|
|
58
|
+
description?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Classe CSS adicional
|
|
61
|
+
*/
|
|
62
|
+
className?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Paleta de widgets
|
|
66
|
+
*
|
|
67
|
+
* Componente genérico que exibe uma lista de widgets arrastáveis.
|
|
68
|
+
* Totalmente configurável via props, sem widgets hardcoded.
|
|
69
|
+
*/
|
|
70
|
+
export declare function WidgetPalette({ isOpen, widgets, onClose, title, description, className, }: WidgetPaletteProps): import("react/jsx-runtime").JSX.Element | null;
|
|
71
|
+
//# sourceMappingURL=widget-palette.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-palette.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/widget-palette/widget-palette.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAElD;;OAEG;IACH,WAAW,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAE7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsDD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,OAAO,EACP,OAAO,EACP,KAA6B,EAC7B,WAA2D,EAC3D,SAAS,GACV,EAAE,kBAAkB,kDAiDpB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* WidgetPalette - Organism Component
|
|
4
|
+
*
|
|
5
|
+
* Sidebar com widgets disponíveis para adicionar ao dashboard.
|
|
6
|
+
* Componente genérico e totalmente configurável via props.
|
|
7
|
+
*/
|
|
8
|
+
import { useDraggable } from "@dnd-kit/core";
|
|
9
|
+
import { X } from "lucide-react";
|
|
10
|
+
import { cn } from "@/lib/utils";
|
|
11
|
+
/**
|
|
12
|
+
* Item de widget arrastável da paleta
|
|
13
|
+
*/
|
|
14
|
+
function DraggableWidgetItem({ widget }) {
|
|
15
|
+
const { attributes, listeners, setNodeRef, transform, isDragging } = useDraggable({
|
|
16
|
+
id: `palette-${widget.id}`,
|
|
17
|
+
data: {
|
|
18
|
+
type: "palette-widget",
|
|
19
|
+
widgetId: widget.id,
|
|
20
|
+
widgetType: widget.type,
|
|
21
|
+
defaultSize: widget.defaultSize,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
const style = transform
|
|
25
|
+
? {
|
|
26
|
+
transform: `translate3d(${transform.x}px, ${transform.y}px, 0)`,
|
|
27
|
+
}
|
|
28
|
+
: undefined;
|
|
29
|
+
const Icon = widget.icon;
|
|
30
|
+
return (_jsx("div", { ref: setNodeRef, style: style, ...listeners, ...attributes, className: cn("p-4 rounded-lg border-2 border-border bg-card", "cursor-grab active:cursor-grabbing", "hover:border-primary hover:shadow-md", "transition-all duration-200", isDragging && "opacity-50 z-50"), children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: "p-2 rounded-md bg-primary/10", children: _jsx(Icon, { className: "w-5 h-5 text-primary" }) }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("h4", { className: "font-semibold text-sm text-foreground mb-1", children: widget.name }), _jsx("p", { className: "text-xs text-muted-foreground line-clamp-2", children: widget.description }), _jsxs("div", { className: "mt-2 text-xs text-muted-foreground", children: [widget.defaultSize.w, " \u00D7 ", widget.defaultSize.h] })] })] }) }));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Paleta de widgets
|
|
34
|
+
*
|
|
35
|
+
* Componente genérico que exibe uma lista de widgets arrastáveis.
|
|
36
|
+
* Totalmente configurável via props, sem widgets hardcoded.
|
|
37
|
+
*/
|
|
38
|
+
export function WidgetPalette({ isOpen, widgets, onClose, title = "Widgets Disponíveis", description = "Arraste widgets para adicionar ao dashboard", className, }) {
|
|
39
|
+
if (!isOpen)
|
|
40
|
+
return null;
|
|
41
|
+
return (_jsxs("div", { className: cn("fixed right-0 top-0 h-full w-80 bg-background border-l border-border", "shadow-lg z-40 transition-transform duration-300", "flex flex-col", className), children: [_jsxs("div", { className: "p-4 border-b border-border", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("h3", { className: "text-lg font-semibold text-foreground", children: title }), onClose && (_jsx("button", { onClick: onClose, className: "p-1 rounded-md hover:bg-accent transition-colors", "aria-label": "Fechar paleta", children: _jsx(X, { className: "w-5 h-5" }) }))] }), _jsx("p", { className: "text-sm text-muted-foreground mt-1", children: description })] }), _jsx("div", { className: "flex-1 overflow-y-auto p-4 space-y-3", children: widgets.length === 0 ? (_jsx("div", { className: "text-center py-8 text-sm text-muted-foreground", children: "Nenhum widget dispon\u00EDvel" })) : (widgets.map((widget) => _jsx(DraggableWidgetItem, { widget: widget }, widget.id))) }), _jsx("div", { className: "p-4 border-t border-border bg-muted/50", children: _jsxs("p", { className: "text-xs text-muted-foreground text-center", children: [widgets.length, " ", widgets.length === 1 ? "widget" : "widgets", " dispon\u00EDvel", widgets.length !== 1 ? "eis" : ""] }) })] }));
|
|
42
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,4 +13,5 @@ export * from "./components/atoms";
|
|
|
13
13
|
export * from "./components/molecules";
|
|
14
14
|
export * from "./components/organisms";
|
|
15
15
|
export { cn } from "./lib/utils";
|
|
16
|
+
export type { GridConfig, WidgetConfig, WidgetLayout } from "./types/dashboard";
|
|
16
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,cAAc,oBAAoB,CAAC;AAGnC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,cAAc,oBAAoB,CAAC;AAGnC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,wBAAwB,CAAC;AAEvC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|