@seedgrid/fe-components 2026.3.5 → 2026.3.11

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 (122) hide show
  1. package/dist/buttons/SgFloatActionButton.d.ts +2 -3
  2. package/dist/buttons/SgFloatActionButton.d.ts.map +1 -1
  3. package/dist/buttons/SgFloatActionButton.js +3 -3
  4. package/dist/buttons/SgSplitButton.d.ts +1 -0
  5. package/dist/buttons/SgSplitButton.d.ts.map +1 -1
  6. package/dist/buttons/SgSplitButton.js +2 -2
  7. package/dist/commons/SgBadge.d.ts +2 -1
  8. package/dist/commons/SgBadge.d.ts.map +1 -1
  9. package/dist/commons/SgBadge.js +8 -7
  10. package/dist/commons/SgBadgeOverlay.d.ts +1 -0
  11. package/dist/commons/SgBadgeOverlay.d.ts.map +1 -1
  12. package/dist/commons/SgBadgeOverlay.js +2 -2
  13. package/dist/commons/SgToastHost.d.ts +17 -0
  14. package/dist/commons/SgToastHost.d.ts.map +1 -0
  15. package/dist/commons/SgToastHost.js +45 -0
  16. package/dist/commons/SgToaster.d.ts +3 -1
  17. package/dist/commons/SgToaster.d.ts.map +1 -1
  18. package/dist/commons/SgToaster.js +13 -0
  19. package/dist/commons/sgToastHostRegistry.d.ts +7 -0
  20. package/dist/commons/sgToastHostRegistry.d.ts.map +1 -0
  21. package/dist/commons/sgToastHostRegistry.js +41 -0
  22. package/dist/digits/segment-digit/SgSegmentDigit.d.ts +15 -0
  23. package/dist/digits/segment-digit/SgSegmentDigit.d.ts.map +1 -0
  24. package/dist/digits/segment-digit/SgSegmentDigit.js +96 -0
  25. package/dist/digits/segment-digit/index.d.ts +3 -0
  26. package/dist/digits/segment-digit/index.d.ts.map +1 -0
  27. package/dist/digits/segment-digit/index.js +1 -0
  28. package/dist/digits/seven-segment-digit/SgSevenSegmentDigit.d.ts +36 -0
  29. package/dist/digits/seven-segment-digit/SgSevenSegmentDigit.d.ts.map +1 -0
  30. package/dist/digits/seven-segment-digit/SgSevenSegmentDigit.js +123 -0
  31. package/dist/digits/seven-segment-digit/index.d.ts +3 -0
  32. package/dist/digits/seven-segment-digit/index.d.ts.map +1 -0
  33. package/dist/digits/seven-segment-digit/index.js +1 -0
  34. package/dist/gadgets/calendar/SgCalendar.d.ts +29 -0
  35. package/dist/gadgets/calendar/SgCalendar.d.ts.map +1 -0
  36. package/dist/gadgets/calendar/SgCalendar.js +248 -0
  37. package/dist/gadgets/calendar/index.d.ts +3 -0
  38. package/dist/gadgets/calendar/index.d.ts.map +1 -0
  39. package/dist/gadgets/calendar/index.js +1 -0
  40. package/dist/gadgets/clock/SgClock.d.ts +6 -2
  41. package/dist/gadgets/clock/SgClock.d.ts.map +1 -1
  42. package/dist/gadgets/clock/SgClock.js +84 -125
  43. package/dist/gadgets/string-animator/SgStringAnimator.d.ts +1 -1
  44. package/dist/gadgets/string-animator/SgStringAnimator.d.ts.map +1 -1
  45. package/dist/gadgets/string-animator/SgStringAnimator.js +1 -1
  46. package/dist/i18n/en-US.d.ts.map +1 -1
  47. package/dist/i18n/en-US.js +26 -1
  48. package/dist/i18n/es.d.ts.map +1 -1
  49. package/dist/i18n/es.js +26 -1
  50. package/dist/i18n/pt-BR.d.ts.map +1 -1
  51. package/dist/i18n/pt-BR.js +26 -1
  52. package/dist/i18n/pt-PT.d.ts.map +1 -1
  53. package/dist/i18n/pt-PT.js +26 -1
  54. package/dist/index.d.ts +22 -4
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +10 -1
  57. package/dist/inputs/SgCheckboxGroup.d.ts +46 -0
  58. package/dist/inputs/SgCheckboxGroup.d.ts.map +1 -0
  59. package/dist/inputs/SgCheckboxGroup.js +158 -0
  60. package/dist/inputs/SgDatatable.d.ts +104 -0
  61. package/dist/inputs/SgDatatable.d.ts.map +1 -0
  62. package/dist/inputs/SgDatatable.js +441 -0
  63. package/dist/inputs/{SgCurrencyEdit.d.ts → SgInputCurrency.d.ts} +5 -3
  64. package/dist/inputs/SgInputCurrency.d.ts.map +1 -0
  65. package/dist/inputs/{SgCurrencyEdit.js → SgInputCurrency.js} +7 -5
  66. package/dist/inputs/SgOrderList.d.ts +52 -0
  67. package/dist/inputs/SgOrderList.d.ts.map +1 -0
  68. package/dist/inputs/SgOrderList.js +316 -0
  69. package/dist/inputs/SgPickList.d.ts +71 -0
  70. package/dist/inputs/SgPickList.d.ts.map +1 -0
  71. package/dist/inputs/SgPickList.js +362 -0
  72. package/dist/inputs/SgRadioGroup.d.ts +1 -2
  73. package/dist/inputs/SgRadioGroup.d.ts.map +1 -1
  74. package/dist/inputs/SgRadioGroup.js +5 -49
  75. package/dist/inputs/SgRating.d.ts +2 -0
  76. package/dist/inputs/SgRating.d.ts.map +1 -1
  77. package/dist/inputs/SgRating.js +2 -2
  78. package/dist/inputs/SgTextEditor.d.ts +2 -0
  79. package/dist/inputs/SgTextEditor.d.ts.map +1 -1
  80. package/dist/inputs/SgTextEditor.js +2 -2
  81. package/dist/layout/SgCard.d.ts +13 -1
  82. package/dist/layout/SgCard.d.ts.map +1 -1
  83. package/dist/layout/SgCard.js +231 -15
  84. package/dist/layout/SgCarousel.d.ts +2 -0
  85. package/dist/layout/SgCarousel.d.ts.map +1 -1
  86. package/dist/layout/SgCarousel.js +2 -2
  87. package/dist/layout/SgDockLayout.d.ts +1 -0
  88. package/dist/layout/SgDockLayout.d.ts.map +1 -1
  89. package/dist/layout/SgDockLayout.js +2 -2
  90. package/dist/layout/SgDockZone.d.ts +1 -0
  91. package/dist/layout/SgDockZone.d.ts.map +1 -1
  92. package/dist/layout/SgDockZone.js +2 -2
  93. package/dist/layout/SgGroupBox.d.ts +1 -0
  94. package/dist/layout/SgGroupBox.d.ts.map +1 -1
  95. package/dist/layout/SgGroupBox.js +3 -2
  96. package/dist/layout/SgMenu.d.ts +2 -2
  97. package/dist/layout/SgMenu.d.ts.map +1 -1
  98. package/dist/layout/SgMenu.js +22 -22
  99. package/dist/layout/SgPageControl.d.ts +2 -1
  100. package/dist/layout/SgPageControl.d.ts.map +1 -1
  101. package/dist/layout/SgPageControl.js +4 -4
  102. package/dist/layout/SgToolBar.d.ts +2 -0
  103. package/dist/layout/SgToolBar.d.ts.map +1 -1
  104. package/dist/layout/SgToolBar.js +4 -3
  105. package/dist/layout/SgTreeView.d.ts +1 -0
  106. package/dist/layout/SgTreeView.d.ts.map +1 -1
  107. package/dist/layout/SgTreeView.js +2 -2
  108. package/dist/others/SgPlayground.d.ts +2 -0
  109. package/dist/others/SgPlayground.d.ts.map +1 -1
  110. package/dist/others/SgPlayground.js +4 -4
  111. package/dist/overlay/SgConfirmationDialog.d.ts +34 -0
  112. package/dist/overlay/SgConfirmationDialog.d.ts.map +1 -0
  113. package/dist/overlay/SgConfirmationDialog.js +81 -0
  114. package/dist/overlay/SgDialog.d.ts +6 -0
  115. package/dist/overlay/SgDialog.d.ts.map +1 -1
  116. package/dist/overlay/SgDialog.js +28 -3
  117. package/dist/sandbox.cjs +100 -82
  118. package/dist/wizard/SgWizard.d.ts +2 -0
  119. package/dist/wizard/SgWizard.d.ts.map +1 -1
  120. package/dist/wizard/SgWizard.js +2 -2
  121. package/package.json +1 -1
  122. package/dist/inputs/SgCurrencyEdit.d.ts.map +0 -1
@@ -1,16 +1,152 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
+ import { useHasSgEnvironmentProvider, useSgPersistence } from "../environment/SgEnvironmentProvider";
4
5
  function cn(...parts) {
5
6
  return parts.filter(Boolean).join(" ");
6
7
  }
7
- function DefaultCaret({ open }) {
8
- return (_jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", className: cn("shrink-0 transition-transform duration-200", open ? "rotate-90" : "rotate-0"), "aria-hidden": "true", children: _jsx("path", { fill: "currentColor", d: "M9.29 6.71a1 1 0 0 0 0 1.41L13.17 12l-3.88 3.88a1 1 0 1 0 1.41 1.41l4.59-4.59a1 1 0 0 0 0-1.41L10.7 6.7a1 1 0 0 0-1.41.01Z" }) }));
8
+ function parseStoredCardPosition(raw) {
9
+ const value = typeof raw === "string"
10
+ ? (() => {
11
+ try {
12
+ return JSON.parse(raw);
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ })()
18
+ : raw;
19
+ if (!value ||
20
+ typeof value !== "object" ||
21
+ typeof value.x !== "number" ||
22
+ typeof value.y !== "number" ||
23
+ !Number.isFinite(value.x) ||
24
+ !Number.isFinite(value.y)) {
25
+ return null;
26
+ }
27
+ return {
28
+ x: value.x,
29
+ y: value.y
30
+ };
31
+ }
32
+ function mergeTransforms(baseTransform, extraTransform) {
33
+ if (typeof baseTransform === "string" && baseTransform.trim().length > 0) {
34
+ return `${baseTransform} ${extraTransform}`;
35
+ }
36
+ return extraTransform;
37
+ }
38
+ function DefaultCaret({ open, size }) {
39
+ return (_jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", className: cn("shrink-0 transition-transform duration-200", open ? "rotate-90" : "rotate-0"), "aria-hidden": "true", children: _jsx("path", { fill: "currentColor", d: "M9.29 6.71a1 1 0 0 0 0 1.41L13.17 12l-3.88 3.88a1 1 0 1 0 1.41 1.41l4.59-4.59a1 1 0 0 0 0-1.41L10.7 6.7a1 1 0 0 0-1.41.01Z" }) }));
9
40
  }
10
41
  export function SgCard(props) {
11
- const { className, headerClassName, bodyClassName, footerClassName, variant = "default", size = "md", leading, trailing, trailer, title, description, actions, header, footer, clickable = false, disabled = false, collapsible = false, defaultOpen = true, open: controlledOpen, onOpenChange, collapseIcon, collapseToggleAlign = "left", toggleOnHeaderClick = true, onClick, children, ...rest } = props;
12
- const isInteractive = (clickable || typeof onClick === "function") && !collapsible;
42
+ const { id, className, headerClassName, bodyClassName, footerClassName, bgColor, bgColorTitle, bgColorFooter, cardStyle = "default", size = "md", leading, trailing, trailer, title, description, actions, header, footer, clickable = false, disabled = false, collapsible = false, defaultOpen = true, open: controlledOpen, onOpenChange, collapseIcon, collapseIconSize = 18, collapseToggleAlign = "left", toggleOnHeaderClick = true, draggable = false, defaultPosition, dragPersistKey, onPositionChange, style, onClick, children, ...rest } = props;
43
+ const hasEnvironmentProvider = useHasSgEnvironmentProvider();
44
+ const { load: loadPersistedState, save: savePersistedState, clear: clearPersistedState } = useSgPersistence();
45
+ const isInteractive = (clickable || typeof onClick === "function") && !collapsible && !draggable;
13
46
  const trailingNode = trailing ?? trailer;
47
+ const [dragPosition, setDragPosition] = React.useState({
48
+ x: defaultPosition?.x ?? 0,
49
+ y: defaultPosition?.y ?? 0
50
+ });
51
+ const dragPositionRef = React.useRef(dragPosition);
52
+ const [dragHydrated, setDragHydrated] = React.useState(false);
53
+ const [dragging, setDragging] = React.useState(false);
54
+ const dragStateRef = React.useRef(null);
55
+ const suppressNextToggleRef = React.useRef(false);
56
+ const dragStorageKey = React.useMemo(() => {
57
+ if (typeof dragPersistKey === "string" && dragPersistKey.trim().length > 0) {
58
+ return dragPersistKey.trim();
59
+ }
60
+ if (typeof id === "string" && id.trim().length > 0) {
61
+ return `sg-card-pos:${id.trim()}`;
62
+ }
63
+ return null;
64
+ }, [dragPersistKey, id]);
65
+ React.useEffect(() => {
66
+ dragPositionRef.current = dragPosition;
67
+ onPositionChange?.(dragPosition);
68
+ }, [dragPosition, onPositionChange]);
69
+ React.useEffect(() => {
70
+ if (!draggable) {
71
+ setDragHydrated(false);
72
+ return;
73
+ }
74
+ let alive = true;
75
+ (async () => {
76
+ let loaded = null;
77
+ if (dragStorageKey) {
78
+ if (hasEnvironmentProvider) {
79
+ try {
80
+ const state = await loadPersistedState(dragStorageKey);
81
+ loaded = parseStoredCardPosition(state);
82
+ if (!loaded && state !== null && state !== undefined) {
83
+ await clearPersistedState(dragStorageKey);
84
+ }
85
+ }
86
+ catch {
87
+ loaded = null;
88
+ }
89
+ }
90
+ else {
91
+ try {
92
+ const raw = localStorage.getItem(dragStorageKey);
93
+ loaded = parseStoredCardPosition(raw);
94
+ if (!loaded && raw !== null) {
95
+ localStorage.removeItem(dragStorageKey);
96
+ }
97
+ }
98
+ catch {
99
+ loaded = null;
100
+ }
101
+ }
102
+ }
103
+ if (!alive)
104
+ return;
105
+ if (loaded) {
106
+ setDragPosition(loaded);
107
+ }
108
+ else {
109
+ setDragPosition({
110
+ x: defaultPosition?.x ?? 0,
111
+ y: defaultPosition?.y ?? 0
112
+ });
113
+ }
114
+ setDragHydrated(true);
115
+ })();
116
+ return () => {
117
+ alive = false;
118
+ };
119
+ }, [
120
+ clearPersistedState,
121
+ defaultPosition?.x,
122
+ defaultPosition?.y,
123
+ dragStorageKey,
124
+ draggable,
125
+ hasEnvironmentProvider,
126
+ loadPersistedState
127
+ ]);
128
+ React.useEffect(() => {
129
+ if (!draggable || !dragHydrated || !dragStorageKey || dragging)
130
+ return;
131
+ if (hasEnvironmentProvider) {
132
+ void savePersistedState(dragStorageKey, dragPosition);
133
+ return;
134
+ }
135
+ try {
136
+ localStorage.setItem(dragStorageKey, JSON.stringify(dragPosition));
137
+ }
138
+ catch {
139
+ // ignore
140
+ }
141
+ }, [
142
+ dragHydrated,
143
+ dragPosition,
144
+ dragStorageKey,
145
+ draggable,
146
+ dragging,
147
+ hasEnvironmentProvider,
148
+ savePersistedState
149
+ ]);
14
150
  const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);
15
151
  const isControlled = typeof controlledOpen === "boolean";
16
152
  const isOpen = collapsible ? (isControlled ? controlledOpen : uncontrolledOpen) : true;
@@ -47,20 +183,24 @@ export function SgCard(props) {
47
183
  title: "text-sm",
48
184
  desc: "text-xs"
49
185
  };
50
- const variantClasses = variant === "flat"
186
+ const variantClasses = cardStyle === "flat"
51
187
  ? "bg-background border border-border/60 shadow-none"
52
- : variant === "outlined"
188
+ : cardStyle === "outlined"
53
189
  ? "bg-background border border-border shadow-none"
54
- : variant === "elevated"
190
+ : cardStyle === "elevated"
55
191
  ? "bg-background border border-border shadow-md"
56
192
  : "bg-background border border-border shadow-sm";
57
193
  const interactiveClasses = isInteractive
58
194
  ? cn("transition-[box-shadow,transform] duration-150", "hover:shadow-md", "focus-visible:outline-none focus-visible:ring-4 focus-visible:ring-[hsl(var(--primary)/0.35)]", disabled ? "" : "cursor-pointer", disabled ? "" : "active:translate-y-[0.5px]")
59
195
  : "";
60
196
  const disabledClasses = disabled ? "opacity-60 pointer-events-none select-none" : "";
61
- const rootClasses = cn("w-full", sizeClasses.root, variantClasses, interactiveClasses, disabledClasses, className);
197
+ const rootClasses = cn("w-full", sizeClasses.root, variantClasses, interactiveClasses, disabledClasses, draggable ? "touch-none" : "", className);
62
198
  const toggle = React.useCallback(() => setOpen(!isOpen), [isOpen, setOpen]);
63
199
  const onHeaderClick = () => {
200
+ if (suppressNextToggleRef.current) {
201
+ suppressNextToggleRef.current = false;
202
+ return;
203
+ }
64
204
  if (!collapsible)
65
205
  return;
66
206
  if (!toggleOnHeaderClick)
@@ -69,10 +209,74 @@ export function SgCard(props) {
69
209
  return;
70
210
  toggle();
71
211
  };
72
- const ToggleButton = collapsible ? (_jsx("button", { type: "button", onClick: (e) => {
212
+ const onHeaderPointerDown = React.useCallback((event) => {
213
+ if (!draggable || disabled)
214
+ return;
215
+ if (event.button !== 0)
216
+ return;
217
+ const target = event.target;
218
+ const interactiveAncestor = target?.closest("[data-sg-card-toggle=\"true\"],button,a,input,textarea,select,[role=\"button\"],[data-sg-card-no-drag=\"true\"]");
219
+ if (interactiveAncestor && interactiveAncestor !== event.currentTarget) {
220
+ return;
221
+ }
222
+ dragStateRef.current = {
223
+ pointerId: event.pointerId,
224
+ startX: event.clientX,
225
+ startY: event.clientY,
226
+ originX: dragPositionRef.current.x,
227
+ originY: dragPositionRef.current.y,
228
+ moved: false
229
+ };
230
+ event.currentTarget.setPointerCapture?.(event.pointerId);
231
+ setDragging(true);
232
+ event.preventDefault();
233
+ }, [disabled, draggable]);
234
+ const onHeaderPointerMove = React.useCallback((event) => {
235
+ const state = dragStateRef.current;
236
+ if (!state || state.pointerId !== event.pointerId)
237
+ return;
238
+ const dx = event.clientX - state.startX;
239
+ const dy = event.clientY - state.startY;
240
+ if (!state.moved && (Math.abs(dx) > 2 || Math.abs(dy) > 2)) {
241
+ state.moved = true;
242
+ }
243
+ setDragPosition({
244
+ x: state.originX + dx,
245
+ y: state.originY + dy
246
+ });
247
+ if (state.moved) {
248
+ event.preventDefault();
249
+ }
250
+ }, []);
251
+ const endHeaderDrag = React.useCallback((event) => {
252
+ const state = dragStateRef.current;
253
+ if (!state || state.pointerId !== event.pointerId)
254
+ return;
255
+ if (state.moved) {
256
+ suppressNextToggleRef.current = true;
257
+ }
258
+ dragStateRef.current = null;
259
+ setDragging(false);
260
+ try {
261
+ event.currentTarget.releasePointerCapture?.(event.pointerId);
262
+ }
263
+ catch {
264
+ // ignore
265
+ }
266
+ }, []);
267
+ const headerInteractionClasses = disabled
268
+ ? ""
269
+ : draggable
270
+ ? dragging
271
+ ? "cursor-grabbing"
272
+ : "cursor-grab"
273
+ : collapsible && toggleOnHeaderClick
274
+ ? "cursor-pointer"
275
+ : "";
276
+ const ToggleButton = collapsible ? (_jsx("button", { "data-sg-card-toggle": "true", type: "button", onClick: (e) => {
73
277
  e.stopPropagation();
74
278
  toggle();
75
- }, className: cn("inline-flex h-8 w-8 items-center justify-center rounded-md", "text-muted-foreground hover:text-foreground", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--primary)/0.35)]"), "aria-label": isOpen ? "Recolher" : "Expandir", "aria-expanded": isOpen, disabled: disabled, children: collapseIcon ?? _jsx(DefaultCaret, { open: isOpen }) })) : null;
279
+ }, className: cn("inline-flex h-9 w-9 items-center justify-center rounded-md", "text-muted-foreground hover:text-foreground", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--primary)/0.35)]"), "aria-label": isOpen ? "Recolher" : "Expandir", "aria-expanded": isOpen, disabled: disabled, children: collapseIcon ?? _jsx(DefaultCaret, { open: isOpen, size: collapseIconSize }) })) : null;
76
280
  const headerHasContent = Boolean(header) ||
77
281
  Boolean(leading) ||
78
282
  Boolean(title) ||
@@ -80,7 +284,7 @@ export function SgCard(props) {
80
284
  Boolean(trailingNode) ||
81
285
  Boolean(actions) ||
82
286
  collapsible;
83
- const renderDefaultHeader = headerHasContent ? (_jsxs("div", { className: cn("flex items-start gap-3", "border-b border-border/60", sizeClasses.header, headerClassName, collapsible && toggleOnHeaderClick ? "cursor-pointer" : ""), onClick: onHeaderClick, role: collapsible && toggleOnHeaderClick ? "button" : undefined, tabIndex: collapsible && toggleOnHeaderClick && !disabled ? 0 : undefined, onKeyDown: (e) => {
287
+ const renderDefaultHeader = headerHasContent ? (_jsxs("div", { className: cn("flex items-start gap-3", "border-b border-border/60", sizeClasses.header, headerClassName, headerInteractionClasses), style: bgColorTitle ? { backgroundColor: bgColorTitle } : undefined, onClick: onHeaderClick, onPointerDown: onHeaderPointerDown, onPointerMove: onHeaderPointerMove, onPointerUp: endHeaderDrag, onPointerCancel: endHeaderDrag, role: collapsible && toggleOnHeaderClick ? "button" : undefined, tabIndex: collapsible && toggleOnHeaderClick && !disabled ? 0 : undefined, onKeyDown: (e) => {
84
288
  if (!collapsible || !toggleOnHeaderClick || disabled)
85
289
  return;
86
290
  if (e.key === "Enter" || e.key === " ") {
@@ -88,7 +292,7 @@ export function SgCard(props) {
88
292
  toggle();
89
293
  }
90
294
  }, "aria-expanded": collapsible ? isOpen : undefined, children: [collapseToggleAlign === "left" ? ToggleButton : null, leading ? _jsx("div", { className: "shrink-0 pt-0.5", children: leading }) : null, _jsxs("div", { className: "min-w-0 flex-1", children: [title ? (_jsx("div", { className: cn("font-medium text-foreground", sizeClasses.title), children: title })) : null, description ? (_jsx("div", { className: cn("mt-0.5 text-muted-foreground", sizeClasses.desc), children: description })) : null] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [trailingNode ? _jsx("div", { className: "shrink-0", children: trailingNode }) : null, actions ? _jsx("div", { className: "shrink-0", children: actions }) : null, collapseToggleAlign === "right" ? ToggleButton : null] })] })) : null;
91
- const headerNode = header ? (_jsx("div", { className: cn("border-b border-border/60", sizeClasses.header, headerClassName, collapsible && toggleOnHeaderClick ? "cursor-pointer" : ""), onClick: onHeaderClick, role: collapsible && toggleOnHeaderClick ? "button" : undefined, tabIndex: collapsible && toggleOnHeaderClick && !disabled ? 0 : undefined, onKeyDown: (e) => {
295
+ const headerNode = header ? (_jsx("div", { className: cn("border-b border-border/60", sizeClasses.header, headerClassName, headerInteractionClasses), style: bgColorTitle ? { backgroundColor: bgColorTitle } : undefined, onClick: onHeaderClick, onPointerDown: onHeaderPointerDown, onPointerMove: onHeaderPointerMove, onPointerUp: endHeaderDrag, onPointerCancel: endHeaderDrag, role: collapsible && toggleOnHeaderClick ? "button" : undefined, tabIndex: collapsible && toggleOnHeaderClick && !disabled ? 0 : undefined, onKeyDown: (e) => {
92
296
  if (!collapsible || !toggleOnHeaderClick || disabled)
93
297
  return;
94
298
  if (e.key === "Enter" || e.key === " ") {
@@ -96,11 +300,23 @@ export function SgCard(props) {
96
300
  toggle();
97
301
  }
98
302
  }, "aria-expanded": collapsible ? isOpen : undefined, children: header })) : (renderDefaultHeader);
99
- const collapsibleBodyWrapper = collapsible ? (_jsx("div", { className: cn("grid transition-all duration-200 ease-out motion-reduce:transition-none", isOpen ? "grid-rows-[1fr] opacity-100" : "grid-rows-[0fr] opacity-0"), children: _jsxs("div", { className: "overflow-hidden", children: [_jsx("div", { className: cn(sizeClasses.body, bodyClassName), children: children }), footer ? (_jsx("div", { className: cn("border-t border-border/60", sizeClasses.footer, footerClassName), children: footer })) : null] }) })) : null;
303
+ const collapsibleBodyWrapper = collapsible ? (_jsx("div", { className: cn("grid transition-all duration-200 ease-out motion-reduce:transition-none", isOpen ? "grid-rows-[1fr] opacity-100" : "grid-rows-[0fr] opacity-0"), children: _jsxs("div", { className: isOpen ? "overflow-visible" : "overflow-hidden", children: [_jsx("div", { className: cn(sizeClasses.body, bodyClassName), children: children }), footer ? (_jsx("div", { className: cn("border-t border-border/60", sizeClasses.footer, footerClassName), style: bgColorFooter ? { backgroundColor: bgColorFooter } : undefined, children: footer })) : null] }) })) : null;
100
304
  const bodyNode = !collapsible ? _jsx("div", { className: cn(sizeClasses.body, bodyClassName), children: children }) : null;
101
- const footerNode = !collapsible && footer ? (_jsx("div", { className: cn("border-t border-border/60", sizeClasses.footer, footerClassName), children: footer })) : null;
305
+ const footerNode = !collapsible && footer ? (_jsx("div", { className: cn("border-t border-border/60", sizeClasses.footer, footerClassName), style: bgColorFooter ? { backgroundColor: bgColorFooter } : undefined, children: footer })) : null;
102
306
  const Component = isInteractive ? "button" : "section";
103
307
  const buttonLikeProps = isInteractive ? { type: "button", onClick: disabled ? undefined : onClick, disabled } : {};
104
- return (_jsxs(Component, { className: rootClasses, ...buttonLikeProps, ...rest, children: [headerNode, collapsible ? collapsibleBodyWrapper : null, !collapsible ? bodyNode : null, !collapsible ? footerNode : null] }));
308
+ const passiveOnClickProps = !isInteractive && typeof onClick === "function" ? { onClick: disabled ? undefined : onClick } : {};
309
+ const roundedDragX = Math.round(dragPosition.x);
310
+ const roundedDragY = Math.round(dragPosition.y);
311
+ const shouldApplyDragTransform = draggable && (dragging || roundedDragX !== 0 || roundedDragY !== 0);
312
+ const rootStyle = {
313
+ ...style,
314
+ backgroundColor: bgColor ?? style?.backgroundColor,
315
+ transform: shouldApplyDragTransform
316
+ ? mergeTransforms(style?.transform, `translate3d(${roundedDragX}px, ${roundedDragY}px, 0)`)
317
+ : style?.transform,
318
+ willChange: shouldApplyDragTransform ? "transform" : style?.willChange
319
+ };
320
+ return (_jsxs(Component, { id: id, className: rootClasses, style: rootStyle, ...buttonLikeProps, ...passiveOnClickProps, ...rest, children: [headerNode, collapsible ? collapsibleBodyWrapper : null, !collapsible ? bodyNode : null, !collapsible ? footerNode : null] }));
105
321
  }
106
322
  SgCard.displayName = "SgCard";
@@ -33,6 +33,8 @@ export interface SgCarouselProps {
33
33
  gap?: number;
34
34
  /** Callback when active index changes */
35
35
  onIndexChange?: (index: number) => void;
36
+ /** Custom inline style for container */
37
+ style?: React.CSSProperties;
36
38
  /** Custom render for navigation buttons */
37
39
  customNavigators?: {
38
40
  prev?: React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"SgCarousel.d.ts","sourceRoot":"","sources":["../../src/layout/SgCarousel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IACzB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE;QACjB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QACvB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;KACxB,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CA2RhD"}
1
+ {"version":3,"file":"SgCarousel.d.ts","sourceRoot":"","sources":["../../src/layout/SgCarousel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IACzB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,wCAAwC;IACxC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE;QACjB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QACvB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;KACxB,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CA4RhD"}
@@ -3,7 +3,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
3
3
  import React from "react";
4
4
  import { ChevronLeft, ChevronRight, ChevronUp, ChevronDown } from "lucide-react";
5
5
  export function SgCarousel(props) {
6
- const { id, items, numVisible = 1, numScroll = 1, orientation = "horizontal", circular = true, autoPlay = false, autoPlayInterval = 3000, showNavigators = true, showIndicators = true, className = "", itemClassName = "", width = "100%", height, gap = 16, onIndexChange, customNavigators } = props;
6
+ const { id, items, numVisible = 1, numScroll = 1, orientation = "horizontal", circular = true, autoPlay = false, autoPlayInterval = 3000, showNavigators = true, showIndicators = true, className = "", itemClassName = "", width = "100%", height, gap = 16, onIndexChange, style, customNavigators } = props;
7
7
  const [activeIndex, setActiveIndex] = React.useState(0);
8
8
  const [isHovered, setIsHovered] = React.useState(false);
9
9
  const timerRef = React.useRef(null);
@@ -134,7 +134,7 @@ export function SgCarousel(props) {
134
134
  : `left-1/2 -translate-x-1/2 ${isPrev ? "-top-5" : "-bottom-5"}`}
135
135
  `, children: _jsx(Icon, { className: "h-6 w-6 text-foreground" }) }));
136
136
  };
137
- return (_jsxs("div", { id: id, className: `relative ${className}`, style: { width, height }, onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), children: [showNavigators && (_jsxs(_Fragment, { children: [_jsx(NavButton, { direction: "prev", onClick: handlePrev, disabled: !canGoPrev }), _jsx(NavButton, { direction: "next", onClick: handleNext, disabled: !canGoNext })] })), _jsx("div", { ref: containerRef, className: "h-full w-full overflow-hidden rounded-lg", children: _jsx("div", { className: `
137
+ return (_jsxs("div", { id: id, className: `relative ${className}`, style: { width, height, ...style }, onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), children: [showNavigators && (_jsxs(_Fragment, { children: [_jsx(NavButton, { direction: "prev", onClick: handlePrev, disabled: !canGoPrev }), _jsx(NavButton, { direction: "next", onClick: handleNext, disabled: !canGoNext })] })), _jsx("div", { ref: containerRef, className: "h-full w-full overflow-hidden rounded-lg", children: _jsx("div", { className: `
138
138
  flex transition-transform duration-500 ease-in-out
139
139
  ${isHorizontal ? "flex-row" : "flex-col"}
140
140
  `, style: {
@@ -14,6 +14,7 @@ export type SgDockLayoutState = {
14
14
  export type SgDockLayoutProps = {
15
15
  id: string;
16
16
  className?: string;
17
+ style?: React.CSSProperties;
17
18
  children: React.ReactNode;
18
19
  defaultState?: SgDockLayoutState;
19
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SgDockLayout.d.ts","sourceRoot":"","sources":["../../src/layout/SgDockLayout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SgDockLayout.d.ts","sourceRoot":"","sources":["../../src/layout/SgDockLayout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAExE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC,CAAC;AAIF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,cAAc,GAAG,IAAI,CAAC;IAC9D,YAAY,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IACtE,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC;IAC9D,uBAAuB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,mBAAmB,GAAG,IAAI,CAAC;IACzG,mBAAmB,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,CAAC;IACpD,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oBAAoB,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzD,aAAa,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1C,gBAAgB,EAAE,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7D,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC;IACpD,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACpD,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC;IACxE,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IACzD,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1D,CAAC;AAIF,wBAAgB,eAAe,4BAE9B;AAID,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,2CAwR9D;yBAxRe,YAAY"}
@@ -8,7 +8,7 @@ export function useSgDockLayout() {
8
8
  }
9
9
  const EMPTY_STATE = { version: 1, toolbars: {} };
10
10
  export function SgDockLayout(props) {
11
- const { id, className, children, defaultState } = props;
11
+ const { id, className, style, children, defaultState } = props;
12
12
  const { value: persisted, setValue, hydrated } = useSgPersistentState({
13
13
  baseKey: `dock-layout:${id}`,
14
14
  defaultValue: defaultState ?? EMPTY_STATE
@@ -228,6 +228,6 @@ export function SgDockLayout(props) {
228
228
  getToolbarCollapsed,
229
229
  setToolbarCollapsed
230
230
  };
231
- return (_jsx(DockContext.Provider, { value: ctx, children: _jsx("div", { className: className, children: children }) }));
231
+ return (_jsx(DockContext.Provider, { value: ctx, children: _jsx("div", { className: className, style: style, children: children }) }));
232
232
  }
233
233
  SgDockLayout.displayName = "SgDockLayout";
@@ -3,6 +3,7 @@ import { type SgDockZoneId } from "./SgDockLayout";
3
3
  export type SgDockZoneProps = {
4
4
  zone: SgDockZoneId;
5
5
  className?: string;
6
+ style?: React.CSSProperties;
6
7
  children?: React.ReactNode;
7
8
  };
8
9
  export declare function SgDockZone(props: Readonly<SgDockZoneProps>): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"SgDockZone.d.ts","sourceRoot":"","sources":["../../src/layout/SgDockZone.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGpE,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAeF,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,2CA0E1D;yBA1Ee,UAAU"}
1
+ {"version":3,"file":"SgDockZone.d.ts","sourceRoot":"","sources":["../../src/layout/SgDockZone.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGpE,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAeF,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,2CA2E1D;yBA3Ee,UAAU"}
@@ -15,7 +15,7 @@ const DEFAULT_ZONE_LAYOUT_CLASS = {
15
15
  free: "col-start-2 row-start-2 items-center justify-center"
16
16
  };
17
17
  export function SgDockZone(props) {
18
- const { zone, className, children } = props;
18
+ const { zone, className, style, children } = props;
19
19
  const dock = useSgDockLayout();
20
20
  const i18n = useComponentsI18n();
21
21
  const ref = React.useRef(null);
@@ -40,7 +40,7 @@ export function SgDockZone(props) {
40
40
  dock.registerZone(zone, ref.current);
41
41
  return () => dock.registerZone(zone, null);
42
42
  }, [dock, zone]);
43
- return (_jsxs("div", { ref: ref, "data-sg-dock-zone": zone, className: cn(hasExplicitPositionClass ? "flex min-h-0 min-w-0 gap-3 p-2" : "relative flex min-h-0 min-w-0 gap-3 p-2", isHorizontalZone
43
+ return (_jsxs("div", { ref: ref, "data-sg-dock-zone": zone, style: style, className: cn(hasExplicitPositionClass ? "flex min-h-0 min-w-0 gap-3 p-2" : "relative flex min-h-0 min-w-0 gap-3 p-2", isHorizontalZone
44
44
  ? "flex-row flex-wrap items-start content-start"
45
45
  : isVerticalZone
46
46
  ? "flex-col flex-wrap items-start content-start"
@@ -5,6 +5,7 @@ export type SgGroupBoxProps = {
5
5
  width?: number | string;
6
6
  children: React.ReactNode;
7
7
  className?: string;
8
+ style?: React.CSSProperties;
8
9
  };
9
10
  export declare function SgGroupBox(props: SgGroupBoxProps): import("react/jsx-runtime").JSX.Element;
10
11
  //# sourceMappingURL=SgGroupBox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SgGroupBox.d.ts","sourceRoot":"","sources":["../../src/layout/SgGroupBox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAOF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CAmBhD"}
1
+ {"version":3,"file":"SgGroupBox.d.ts","sourceRoot":"","sources":["../../src/layout/SgGroupBox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAOF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CAoBhD"}
@@ -6,9 +6,10 @@ function toCssSize(value) {
6
6
  return typeof value === "number" ? `${value}px` : value;
7
7
  }
8
8
  export function SgGroupBox(props) {
9
- const { title, height, width, children, className } = props;
9
+ const { title, height, width, children, className, style } = props;
10
10
  return (_jsx("div", { className: className, style: {
11
11
  width: toCssSize(width) ?? "100%",
12
- height: toCssSize(height)
12
+ height: toCssSize(height),
13
+ ...style
13
14
  }, children: _jsxs("fieldset", { className: "relative rounded-lg border border-border bg-white px-4 pb-4 pt-5", children: [_jsx("legend", { className: "px-2 text-xs font-semibold uppercase tracking-wider text-foreground/70", children: title }), _jsx("div", { children: children })] }) }));
14
15
  }
@@ -38,8 +38,8 @@ export type SgMenuProps = {
38
38
  brand?: SgMenuBrand;
39
39
  user?: SgMenuUser;
40
40
  userMenu?: SgMenuNode[];
41
- variant?: "sidebar" | "drawer" | "inline" | "hybrid";
42
- menuStyle?: SgMenuStyle;
41
+ menuStyle?: "sidebar" | "drawer" | "inline" | "hybrid";
42
+ menuVariantStyle?: SgMenuStyle;
43
43
  position?: "left" | "right";
44
44
  density?: "compact" | "comfortable";
45
45
  indent?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"SgMenu.d.ts","sourceRoot":"","sources":["../../src/layout/SgMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAqB,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGpF,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGpE,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB,OAAO,GACP,QAAQ,GACR,iBAAiB,GACjB,eAAe,GACf,WAAW,GACX,QAAQ,GACR,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,0BAA0B,GAClC,iBAAiB,GACjB,kBAAkB,GAClB,aAAa,GACb,cAAc,GACd,eAAe,CAAC;AAEpB,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,eAAe,CAAC;IAE5B,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IAExB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACrD,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oBAAoB,CAAC,EAAE,0BAA0B,CAAC;IAElD,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAE9C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAEzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEpD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAEvC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B,CAAC;AA0QF,wBAAgB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,2CAuiDlD;yBAviDe,MAAM"}
1
+ {"version":3,"file":"SgMenu.d.ts","sourceRoot":"","sources":["../../src/layout/SgMenu.tsx"],"names":[],"mappings":"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"}