@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.
Files changed (94) hide show
  1. package/dist/components/atoms/actions/badge/badge.d.ts +1 -1
  2. package/dist/components/atoms/actions/button/button.d.ts +2 -2
  3. package/dist/components/atoms/animation/sliding-number/sliding-number.d.ts.map +1 -1
  4. package/dist/components/atoms/animation/sliding-number/sliding-number.js +6 -3
  5. package/dist/components/atoms/data-display/qr-code/qr-code.d.ts +2 -2
  6. package/dist/components/atoms/data-display/qr-code/qr-code.d.ts.map +1 -1
  7. package/dist/components/atoms/data-display/qr-code/qr-code.js +4 -3
  8. package/dist/components/atoms/feedback/alert/alert.d.ts +1 -1
  9. package/dist/components/atoms/feedback/alert-dialog/alert-dialog.d.ts +2 -2
  10. package/dist/components/atoms/forms/input/input.d.ts +2 -2
  11. package/dist/components/atoms/forms/toggle/toggle.d.ts +1 -1
  12. package/dist/components/atoms/index.d.ts +2 -0
  13. package/dist/components/atoms/index.d.ts.map +1 -1
  14. package/dist/components/atoms/index.js +1 -0
  15. package/dist/components/atoms/layout/sidebar/sidebar.d.ts +1 -1
  16. package/dist/components/atoms/navigation/command/command.d.ts +13 -13
  17. package/dist/components/atoms/widget-resize-handle/index.d.ts +3 -0
  18. package/dist/components/atoms/widget-resize-handle/index.d.ts.map +1 -0
  19. package/dist/components/atoms/widget-resize-handle/index.js +1 -0
  20. package/dist/components/atoms/widget-resize-handle/widget-resize-handle.d.ts +60 -0
  21. package/dist/components/atoms/widget-resize-handle/widget-resize-handle.d.ts.map +1 -0
  22. package/dist/components/atoms/widget-resize-handle/widget-resize-handle.js +75 -0
  23. package/dist/components/molecules/draggable-widget/draggable-widget.d.ts +73 -0
  24. package/dist/components/molecules/draggable-widget/draggable-widget.d.ts.map +1 -0
  25. package/dist/components/molecules/draggable-widget/draggable-widget.js +44 -0
  26. package/dist/components/molecules/draggable-widget/index.d.ts +3 -0
  27. package/dist/components/molecules/draggable-widget/index.d.ts.map +1 -0
  28. package/dist/components/molecules/draggable-widget/index.js +1 -0
  29. package/dist/components/molecules/edit-mode-toggle/edit-mode-toggle.d.ts +41 -0
  30. package/dist/components/molecules/edit-mode-toggle/edit-mode-toggle.d.ts.map +1 -0
  31. package/dist/components/molecules/edit-mode-toggle/edit-mode-toggle.js +26 -0
  32. package/dist/components/molecules/edit-mode-toggle/index.d.ts +3 -0
  33. package/dist/components/molecules/edit-mode-toggle/index.d.ts.map +1 -0
  34. package/dist/components/molecules/edit-mode-toggle/index.js +1 -0
  35. package/dist/components/molecules/forms/autocomplete/autocomplete-context.d.ts.map +1 -1
  36. package/dist/components/molecules/forms/autocomplete/autocomplete-item.d.ts.map +1 -1
  37. package/dist/components/molecules/forms/autocomplete/autocomplete-section.d.ts.map +1 -1
  38. package/dist/components/molecules/forms/autocomplete/autocomplete.d.ts +1 -1
  39. package/dist/components/molecules/forms/autocomplete/autocomplete.d.ts.map +1 -1
  40. package/dist/components/molecules/forms/autocomplete/autocomplete.js +4 -4
  41. package/dist/components/molecules/forms/autocomplete/index.d.ts +2 -2
  42. package/dist/components/molecules/forms/autocomplete/index.d.ts.map +1 -1
  43. package/dist/components/molecules/forms/autocomplete/index.js +1 -1
  44. package/dist/components/molecules/forms/text-editor/text-editor.d.ts.map +1 -1
  45. package/dist/components/molecules/forms/text-editor/text-editor.js +13 -12
  46. package/dist/components/molecules/index.d.ts +8 -2
  47. package/dist/components/molecules/index.d.ts.map +1 -1
  48. package/dist/components/molecules/index.js +4 -1
  49. package/dist/components/molecules/navigation/menu-dock/menu-dock.d.ts.map +1 -1
  50. package/dist/components/molecules/navigation/menu-dock/menu-dock.js +1 -1
  51. package/dist/components/molecules/widget-renderer/index.d.ts +3 -0
  52. package/dist/components/molecules/widget-renderer/index.d.ts.map +1 -0
  53. package/dist/components/molecules/widget-renderer/index.js +1 -0
  54. package/dist/components/molecules/widget-renderer/widget-renderer.d.ts +46 -0
  55. package/dist/components/molecules/widget-renderer/widget-renderer.d.ts.map +1 -0
  56. package/dist/components/molecules/widget-renderer/widget-renderer.js +37 -0
  57. package/dist/components/organisms/document-editor/document-editor.d.ts.map +1 -1
  58. package/dist/components/organisms/document-editor/document-editor.js +3 -3
  59. package/dist/components/organisms/document-editor/index.d.ts +1 -1
  60. package/dist/components/organisms/document-editor/index.d.ts.map +1 -1
  61. package/dist/components/organisms/draggable-dashboard-grid/draggable-dashboard-grid.d.ts +65 -0
  62. package/dist/components/organisms/draggable-dashboard-grid/draggable-dashboard-grid.d.ts.map +1 -0
  63. package/dist/components/organisms/draggable-dashboard-grid/draggable-dashboard-grid.js +124 -0
  64. package/dist/components/organisms/draggable-dashboard-grid/index.d.ts +3 -0
  65. package/dist/components/organisms/draggable-dashboard-grid/index.d.ts.map +1 -0
  66. package/dist/components/organisms/draggable-dashboard-grid/index.js +1 -0
  67. package/dist/components/organisms/form-layout/form-layout.d.ts +2 -2
  68. package/dist/components/organisms/form-layout/form-layout.d.ts.map +1 -1
  69. package/dist/components/organisms/form-layout/form-layout.js +11 -9
  70. package/dist/components/organisms/form-layout/index.d.ts +1 -1
  71. package/dist/components/organisms/form-layout/index.d.ts.map +1 -1
  72. package/dist/components/organisms/index.d.ts +6 -0
  73. package/dist/components/organisms/index.d.ts.map +1 -1
  74. package/dist/components/organisms/index.js +3 -0
  75. package/dist/components/organisms/model-selector/model-selector.d.ts +1 -1
  76. package/dist/components/organisms/widget-config-modal/index.d.ts +3 -0
  77. package/dist/components/organisms/widget-config-modal/index.d.ts.map +1 -0
  78. package/dist/components/organisms/widget-config-modal/index.js +1 -0
  79. package/dist/components/organisms/widget-config-modal/widget-config-modal.d.ts +57 -0
  80. package/dist/components/organisms/widget-config-modal/widget-config-modal.d.ts.map +1 -0
  81. package/dist/components/organisms/widget-config-modal/widget-config-modal.js +35 -0
  82. package/dist/components/organisms/widget-palette/index.d.ts +3 -0
  83. package/dist/components/organisms/widget-palette/index.d.ts.map +1 -0
  84. package/dist/components/organisms/widget-palette/index.js +1 -0
  85. package/dist/components/organisms/widget-palette/widget-palette.d.ts +71 -0
  86. package/dist/components/organisms/widget-palette/widget-palette.d.ts.map +1 -0
  87. package/dist/components/organisms/widget-palette/widget-palette.js +42 -0
  88. package/dist/index.d.ts +1 -0
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +458 -454
  91. package/dist/types/dashboard.d.ts +74 -0
  92. package/dist/types/dashboard.d.ts.map +1 -0
  93. package/dist/types/dashboard.js +7 -0
  94. 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,3 @@
1
+ export type { DraggableDashboardGridProps } from "./draggable-dashboard-grid";
2
+ export { DraggableDashboardGrid } from "./draggable-dashboard-grid";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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":"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"}
1
+ {"version":3,"file":"form-layout.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/form-layout/form-layout.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAmCtF;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,OAAO,GACP,KAAK,GACL,KAAK,GACL,UAAU,GACV,UAAU,GACV,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,MAAM,GACN,UAAU,GACV,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,KAAK,GACL,QAAQ,CAAC;AAEb;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,WAAW;IACpD,kEAAkE;IAClE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACnB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,GAAG,MAAM,EAAE,CAAC;IACjE,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,YAAY,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClD,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,WAAW,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,WAAW;IACtD,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,WAAW;IACvD,4BAA4B;IAC5B,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAC3B,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,2CA0S9F;yBA1Se,aAAa;;;AA8S7B;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,WAAW;IACpD,8CAA8C;IAC9C,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACvB,2CAA2C;IAC3C,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjC,yDAAyD;IACzD,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,EAChD,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,KAAK,EACL,WAAW,EACX,aAAa,GACd,EAAE,eAAe,CAAC,CAAC,CAAC,2CAqDpB;yBA7De,UAAU"}
@@ -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" ? "flex flex-row items-start space-x-3 space-y-0 rounded-md border p-4" : "", children: [type !== "checkbox" && (_jsxs(FormLabel, { children: [label, " ", required && _jsx("span", { className: "text-destructive", children: "*" })] })), _jsx(FormControl, { children: (() => {
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 === 'object' ? String(opt.value) : opt;
41
- const lab = typeof opt === 'object' ? opt.label : 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, FormLayout, type BaseFormFieldProps, type FormFieldConfig, type FormFieldType, type FormLayoutProps, type FormSectionConfig, } from "./form-layout";
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,UAAU,EACV,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC"}
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
- }, "asChild" | "key" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "onChange" | "value" | "type"> & {
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,3 @@
1
+ export type { WidgetConfigModalProps } from "./widget-config-modal";
2
+ export { WidgetConfigModal } from "./widget-config-modal";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export type { WidgetPaletteItem, WidgetPaletteProps } from "./widget-palette";
2
+ export { WidgetPalette } from "./widget-palette";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -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;AAGvC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,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"}