@seedgrid/fe-components 0.2.9 → 2026.3.1

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 (155) hide show
  1. package/dist/buttons/SgFloatActionButton.d.ts.map +1 -1
  2. package/dist/buttons/SgFloatActionButton.js +168 -38
  3. package/dist/commons/SgAvatar.d.ts +66 -0
  4. package/dist/commons/SgAvatar.d.ts.map +1 -0
  5. package/dist/commons/SgAvatar.js +136 -0
  6. package/dist/commons/SgSkeleton.d.ts +16 -0
  7. package/dist/commons/SgSkeleton.d.ts.map +1 -0
  8. package/dist/commons/SgSkeleton.js +58 -0
  9. package/dist/commons/SgToaster.d.ts +9 -0
  10. package/dist/commons/SgToaster.d.ts.map +1 -1
  11. package/dist/commons/SgToaster.js +86 -17
  12. package/dist/digits/discard-digit/SgDiscardDigit.d.ts +39 -0
  13. package/dist/digits/discard-digit/SgDiscardDigit.d.ts.map +1 -0
  14. package/dist/digits/discard-digit/SgDiscardDigit.js +303 -0
  15. package/dist/digits/discard-digit/index.d.ts +3 -0
  16. package/dist/digits/discard-digit/index.d.ts.map +1 -0
  17. package/dist/digits/discard-digit/index.js +1 -0
  18. package/dist/digits/fade-digit/SgFadeDigit.d.ts +27 -0
  19. package/dist/digits/fade-digit/SgFadeDigit.d.ts.map +1 -0
  20. package/dist/digits/fade-digit/SgFadeDigit.js +85 -0
  21. package/dist/digits/fade-digit/index.d.ts +3 -0
  22. package/dist/digits/fade-digit/index.d.ts.map +1 -0
  23. package/dist/digits/fade-digit/index.js +1 -0
  24. package/dist/digits/flip-digit/SgFlipDigit.d.ts +27 -0
  25. package/dist/digits/flip-digit/SgFlipDigit.d.ts.map +1 -0
  26. package/dist/digits/flip-digit/SgFlipDigit.js +70 -0
  27. package/dist/digits/flip-digit/index.d.ts.map +1 -0
  28. package/dist/digits/matrix-digit/SgMatrixDigit.d.ts +32 -0
  29. package/dist/digits/matrix-digit/SgMatrixDigit.d.ts.map +1 -0
  30. package/dist/digits/matrix-digit/SgMatrixDigit.js +86 -0
  31. package/dist/digits/matrix-digit/index.d.ts +3 -0
  32. package/dist/digits/matrix-digit/index.d.ts.map +1 -0
  33. package/dist/digits/matrix-digit/index.js +1 -0
  34. package/dist/digits/neon-digit/SgNeonDigit.d.ts +37 -0
  35. package/dist/digits/neon-digit/SgNeonDigit.d.ts.map +1 -0
  36. package/dist/digits/neon-digit/SgNeonDigit.js +59 -0
  37. package/dist/digits/neon-digit/index.d.ts +3 -0
  38. package/dist/digits/neon-digit/index.d.ts.map +1 -0
  39. package/dist/digits/neon-digit/index.js +1 -0
  40. package/dist/digits/roller3d-digit/SgRoller3DDigit.d.ts +37 -0
  41. package/dist/digits/roller3d-digit/SgRoller3DDigit.d.ts.map +1 -0
  42. package/dist/digits/roller3d-digit/SgRoller3DDigit.js +47 -0
  43. package/dist/digits/roller3d-digit/index.d.ts +3 -0
  44. package/dist/digits/roller3d-digit/index.d.ts.map +1 -0
  45. package/dist/digits/roller3d-digit/index.js +1 -0
  46. package/dist/environment/SgEnvironmentProvider.d.ts +1 -0
  47. package/dist/environment/SgEnvironmentProvider.d.ts.map +1 -1
  48. package/dist/environment/SgEnvironmentProvider.js +51 -12
  49. package/dist/gadgets/clock/SgClock.d.ts +3 -1
  50. package/dist/gadgets/clock/SgClock.d.ts.map +1 -1
  51. package/dist/gadgets/clock/SgClock.js +111 -180
  52. package/dist/gadgets/clock/SgTimeProvider.d.ts +1 -0
  53. package/dist/gadgets/clock/SgTimeProvider.d.ts.map +1 -1
  54. package/dist/gadgets/clock/SgTimeProvider.js +11 -4
  55. package/dist/gadgets/gauge/SgLinearGauge.d.ts +59 -0
  56. package/dist/gadgets/gauge/SgLinearGauge.d.ts.map +1 -0
  57. package/dist/gadgets/gauge/SgLinearGauge.js +258 -0
  58. package/dist/gadgets/gauge/SgRadialGauge.d.ts +73 -0
  59. package/dist/gadgets/gauge/SgRadialGauge.d.ts.map +1 -0
  60. package/dist/gadgets/gauge/SgRadialGauge.js +311 -0
  61. package/dist/gadgets/gauge/index.d.ts +5 -0
  62. package/dist/gadgets/gauge/index.d.ts.map +1 -0
  63. package/dist/gadgets/gauge/index.js +2 -0
  64. package/dist/gadgets/qr-code/SgQRCode.d.ts +25 -0
  65. package/dist/gadgets/qr-code/SgQRCode.d.ts.map +1 -0
  66. package/dist/gadgets/qr-code/SgQRCode.js +75 -0
  67. package/dist/gadgets/qr-code/index.d.ts +3 -0
  68. package/dist/gadgets/qr-code/index.d.ts.map +1 -0
  69. package/dist/gadgets/qr-code/index.js +1 -0
  70. package/dist/gadgets/string-animator/SgStringAnimator.d.ts +91 -0
  71. package/dist/gadgets/string-animator/SgStringAnimator.d.ts.map +1 -0
  72. package/dist/gadgets/string-animator/SgStringAnimator.js +145 -0
  73. package/dist/gadgets/string-animator/index.d.ts +3 -0
  74. package/dist/gadgets/string-animator/index.d.ts.map +1 -0
  75. package/dist/gadgets/string-animator/index.js +1 -0
  76. package/dist/i18n/en-US.json +9 -1
  77. package/dist/i18n/es.json +55 -47
  78. package/dist/i18n/index.d.ts +32 -0
  79. package/dist/i18n/index.d.ts.map +1 -1
  80. package/dist/i18n/pt-BR.json +9 -1
  81. package/dist/i18n/pt-PT.json +9 -1
  82. package/dist/index.d.ts +53 -5
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +25 -1
  85. package/dist/inputs/SgAutocomplete.js +21 -5
  86. package/dist/inputs/SgCombobox.d.ts +26 -0
  87. package/dist/inputs/SgCombobox.d.ts.map +1 -0
  88. package/dist/inputs/SgCombobox.js +354 -0
  89. package/dist/inputs/SgInputOTP.d.ts.map +1 -1
  90. package/dist/inputs/SgInputOTP.js +9 -2
  91. package/dist/inputs/SgRadioGroup.d.ts +37 -0
  92. package/dist/inputs/SgRadioGroup.d.ts.map +1 -0
  93. package/dist/inputs/SgRadioGroup.js +139 -0
  94. package/dist/inputs/SgRating.d.ts +55 -0
  95. package/dist/inputs/SgRating.d.ts.map +1 -0
  96. package/dist/inputs/SgRating.js +135 -0
  97. package/dist/inputs/SgSlider.d.ts +20 -0
  98. package/dist/inputs/SgSlider.d.ts.map +1 -0
  99. package/dist/inputs/SgSlider.js +40 -0
  100. package/dist/inputs/SgStepperInput.d.ts +22 -0
  101. package/dist/inputs/SgStepperInput.d.ts.map +1 -0
  102. package/dist/inputs/SgStepperInput.js +51 -0
  103. package/dist/inputs/SgTextEditor.d.ts +1 -0
  104. package/dist/inputs/SgTextEditor.d.ts.map +1 -1
  105. package/dist/inputs/SgTextEditor.js +19 -3
  106. package/dist/inputs/SgToggleSwitch.d.ts +36 -0
  107. package/dist/inputs/SgToggleSwitch.d.ts.map +1 -0
  108. package/dist/inputs/SgToggleSwitch.js +174 -0
  109. package/dist/layout/SgAccordion.d.ts +39 -0
  110. package/dist/layout/SgAccordion.d.ts.map +1 -0
  111. package/dist/layout/SgAccordion.js +116 -0
  112. package/dist/layout/SgBreadcrumb.d.ts +33 -0
  113. package/dist/layout/SgBreadcrumb.d.ts.map +1 -0
  114. package/dist/layout/SgBreadcrumb.js +121 -0
  115. package/dist/layout/SgCarousel.d.ts +43 -0
  116. package/dist/layout/SgCarousel.d.ts.map +1 -0
  117. package/dist/layout/SgCarousel.js +166 -0
  118. package/dist/layout/SgDockLayout.d.ts +14 -0
  119. package/dist/layout/SgDockLayout.d.ts.map +1 -1
  120. package/dist/layout/SgDockLayout.js +145 -13
  121. package/dist/layout/SgDockScreen.d.ts +15 -0
  122. package/dist/layout/SgDockScreen.d.ts.map +1 -0
  123. package/dist/layout/SgDockScreen.js +13 -0
  124. package/dist/layout/SgDockZone.d.ts.map +1 -1
  125. package/dist/layout/SgDockZone.js +36 -2
  126. package/dist/layout/SgExpandablePanel.d.ts +50 -0
  127. package/dist/layout/SgExpandablePanel.d.ts.map +1 -0
  128. package/dist/layout/SgExpandablePanel.js +302 -0
  129. package/dist/layout/SgMainPanel.d.ts.map +1 -1
  130. package/dist/layout/SgMainPanel.js +36 -14
  131. package/dist/layout/SgMenu.d.ts +91 -0
  132. package/dist/layout/SgMenu.d.ts.map +1 -0
  133. package/dist/layout/SgMenu.js +939 -0
  134. package/dist/layout/SgPageControl.d.ts +49 -0
  135. package/dist/layout/SgPageControl.d.ts.map +1 -0
  136. package/dist/layout/SgPageControl.js +152 -0
  137. package/dist/layout/SgPanel.d.ts.map +1 -1
  138. package/dist/layout/SgPanel.js +10 -1
  139. package/dist/layout/SgScreen.d.ts +2 -0
  140. package/dist/layout/SgScreen.d.ts.map +1 -1
  141. package/dist/layout/SgScreen.js +4 -2
  142. package/dist/layout/SgToolBar.d.ts +9 -3
  143. package/dist/layout/SgToolBar.d.ts.map +1 -1
  144. package/dist/layout/SgToolBar.js +461 -55
  145. package/dist/menus/SgDockMenu.d.ts +62 -0
  146. package/dist/menus/SgDockMenu.d.ts.map +1 -0
  147. package/dist/menus/SgDockMenu.js +480 -0
  148. package/dist/others/SgPlayground.js +73 -73
  149. package/package.json +72 -57
  150. package/dist/gadgets/flip-digit/SgFlipDigit.d.ts +0 -23
  151. package/dist/gadgets/flip-digit/SgFlipDigit.d.ts.map +0 -1
  152. package/dist/gadgets/flip-digit/SgFlipDigit.js +0 -118
  153. package/dist/gadgets/flip-digit/index.d.ts.map +0 -1
  154. /package/dist/{gadgets → digits}/flip-digit/index.d.ts +0 -0
  155. /package/dist/{gadgets → digits}/flip-digit/index.js +0 -0
@@ -0,0 +1,116 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ function cn(...parts) {
5
+ return parts.filter(Boolean).join(" ");
6
+ }
7
+ function toCssSize(value) {
8
+ if (value === undefined || value === null)
9
+ return undefined;
10
+ return typeof value === "number" ? `${value}px` : value;
11
+ }
12
+ function normalizeIndices(value, max, multiple) {
13
+ if (value === undefined)
14
+ return [];
15
+ const source = Array.isArray(value) ? value : [value];
16
+ const next = source
17
+ .filter((idx) => Number.isInteger(idx))
18
+ .map((idx) => Number(idx))
19
+ .filter((idx) => idx >= 0 && idx < max);
20
+ const unique = Array.from(new Set(next)).sort((a, b) => a - b);
21
+ return multiple ? unique : unique.slice(0, 1);
22
+ }
23
+ function ChevronIcon(props) {
24
+ const base = props.horizontal
25
+ ? props.open
26
+ ? "rotate-180"
27
+ : "rotate-90"
28
+ : props.open
29
+ ? "rotate-180"
30
+ : "rotate-0";
31
+ return (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: cn("transition-transform duration-200", base), "aria-hidden": "true", children: _jsx("polyline", { points: "6 9 12 15 18 9" }) }));
32
+ }
33
+ const DEFAULT_HEADER_BACKGROUND = "var(--sg-accordion-header-bg, rgb(var(--sg-primary-50, 239 246 255)))";
34
+ export function SgAccordion(props) {
35
+ const { id, items, orientation = "vertical", multiple = false, collapsible = true, activeIndex, defaultActiveIndex, defaultOpenFirst = true, onActiveIndexChange, onItemToggle, panelClassName, headerClassName, headerBackgroundColor, contentClassName, animationDuration = 220, horizontalHeaderWidth = 52, horizontalMinHeight = 220, keepMounted = true, className, ...rest } = props;
36
+ const generatedId = React.useId().replace(/[:]/g, "");
37
+ const baseId = (id ?? `sg-accordion-${generatedId}`).replace(/\s+/g, "-");
38
+ const isHorizontal = orientation === "horizontal";
39
+ const headerWidth = toCssSize(horizontalHeaderWidth) ?? "52px";
40
+ const minHeight = toCssSize(horizontalMinHeight) ?? "220px";
41
+ const controlled = activeIndex !== undefined;
42
+ const controlledIndices = React.useMemo(() => normalizeIndices(activeIndex, items.length, multiple), [activeIndex, items.length, multiple]);
43
+ const [internalIndices, setInternalIndices] = React.useState(() => {
44
+ const seed = defaultActiveIndex !== undefined
45
+ ? defaultActiveIndex
46
+ : defaultOpenFirst && items.length > 0
47
+ ? 0
48
+ : [];
49
+ return normalizeIndices(seed, items.length, multiple);
50
+ });
51
+ React.useEffect(() => {
52
+ if (controlled)
53
+ return;
54
+ setInternalIndices((prev) => normalizeIndices(prev, items.length, multiple));
55
+ }, [controlled, items.length, multiple]);
56
+ const openIndices = controlled ? controlledIndices : internalIndices;
57
+ const openSet = React.useMemo(() => new Set(openIndices), [openIndices]);
58
+ const commitIndices = React.useCallback((next) => {
59
+ const normalized = normalizeIndices(next, items.length, multiple);
60
+ if (!controlled)
61
+ setInternalIndices(normalized);
62
+ onActiveIndexChange?.(normalized);
63
+ }, [controlled, items.length, multiple, onActiveIndexChange]);
64
+ const handleToggle = React.useCallback((index) => {
65
+ const item = items[index];
66
+ if (!item || item.disabled)
67
+ return;
68
+ const isOpen = openSet.has(index);
69
+ if (isOpen && !collapsible)
70
+ return;
71
+ let next;
72
+ if (isOpen) {
73
+ next = openIndices.filter((it) => it !== index);
74
+ }
75
+ else {
76
+ next = multiple ? [...openIndices, index] : [index];
77
+ }
78
+ commitIndices(next);
79
+ onItemToggle?.(index, !isOpen);
80
+ }, [items, openSet, collapsible, openIndices, multiple, commitIndices, onItemToggle]);
81
+ return (_jsx("div", { className: cn(isHorizontal ? "flex w-full gap-2 overflow-x-auto" : "space-y-2", className), "data-orientation": orientation, ...rest, children: items.map((item, index) => {
82
+ const isOpen = openSet.has(index);
83
+ const panelId = `${baseId}-panel-${item.id ?? index}`;
84
+ const headerId = `${baseId}-header-${item.id ?? index}`;
85
+ const contentId = `${baseId}-content-${item.id ?? index}`;
86
+ const resolvedHeaderBackground = item.headerBackgroundColor ?? headerBackgroundColor ?? DEFAULT_HEADER_BACKGROUND;
87
+ const sharedButtonClasses = cn("inline-flex items-center gap-2 text-left font-medium transition-[filter,colors] duration-150", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40", item.disabled ? "cursor-not-allowed opacity-55" : "cursor-pointer hover:brightness-95");
88
+ return (_jsxs("div", { id: panelId, className: cn("border border-border bg-background", isHorizontal ? "flex min-w-0 overflow-hidden rounded-lg" : "overflow-hidden rounded-lg", panelClassName, item.className), style: isHorizontal
89
+ ? {
90
+ minHeight,
91
+ flex: isOpen ? "1 1 0%" : "0 0 auto",
92
+ transition: `flex-basis ${animationDuration}ms ease`
93
+ }
94
+ : undefined, children: [_jsx("button", { id: headerId, type: "button", disabled: item.disabled, "aria-controls": contentId, "aria-expanded": isOpen, className: cn(sharedButtonClasses, isHorizontal
95
+ ? "h-full flex-col justify-between border-r border-border px-2 py-3 text-[11px] uppercase tracking-wide"
96
+ : "w-full justify-between px-4 py-3 text-sm", headerClassName, item.headerClassName), style: isHorizontal
97
+ ? {
98
+ width: headerWidth,
99
+ backgroundColor: resolvedHeaderBackground
100
+ }
101
+ : {
102
+ backgroundColor: resolvedHeaderBackground
103
+ }, onClick: () => handleToggle(index), children: isHorizontal ? (_jsxs(_Fragment, { children: [_jsx(ChevronIcon, { open: isOpen, horizontal: true }), _jsx("span", { style: { writingMode: "vertical-rl", transform: "rotate(180deg)" }, className: "line-clamp-1 select-none text-center text-[10px] font-semibold tracking-wide", children: item.title }), item.icon ? _jsx("span", { className: "opacity-80", children: item.icon }) : _jsx("span", { "aria-hidden": "true" })] })) : (_jsxs(_Fragment, { children: [_jsxs("span", { className: "inline-flex items-center gap-2", children: [item.icon ? _jsx("span", { className: "opacity-80", children: item.icon }) : null, _jsx("span", { children: item.title })] }), _jsxs("span", { className: "inline-flex items-center gap-2", children: [item.end ? _jsx("span", { children: item.end }) : null, _jsx(ChevronIcon, { open: isOpen, horizontal: false })] })] })) }), _jsx("div", { id: contentId, role: "region", "aria-labelledby": headerId, className: cn("overflow-hidden", contentClassName, item.contentClassName), style: isHorizontal
104
+ ? {
105
+ width: isOpen ? "100%" : "0px",
106
+ opacity: isOpen ? 1 : 0,
107
+ transition: `width ${animationDuration}ms ease, opacity ${animationDuration}ms ease`
108
+ }
109
+ : {
110
+ maxHeight: isOpen ? "960px" : "0px",
111
+ opacity: isOpen ? 1 : 0,
112
+ transition: `max-height ${animationDuration}ms ease, opacity ${animationDuration}ms ease`
113
+ }, children: keepMounted || isOpen ? (_jsx("div", { className: cn(isHorizontal ? "h-full min-w-[220px] p-4" : "p-4"), children: item.content })) : null })] }, panelId));
114
+ }) }));
115
+ }
116
+ SgAccordion.displayName = "SgAccordion";
@@ -0,0 +1,33 @@
1
+ import * as React from "react";
2
+ export type SgBreadcrumbItem = {
3
+ id: string;
4
+ label: React.ReactNode;
5
+ href?: string;
6
+ icon?: React.ReactNode;
7
+ disabled?: boolean;
8
+ hidden?: boolean;
9
+ onClick?: () => void;
10
+ };
11
+ export type SgBreadcrumbSeparator = "slash" | "chevron" | "dot" | "arrow";
12
+ export type SgBreadcrumbProps = {
13
+ items: SgBreadcrumbItem[];
14
+ separator?: SgBreadcrumbSeparator | React.ReactNode;
15
+ maxItems?: number;
16
+ overflowBehavior?: "collapse" | "scroll";
17
+ showHomeIcon?: boolean;
18
+ homeHref?: string;
19
+ homeLabel?: React.ReactNode;
20
+ size?: "sm" | "md" | "lg";
21
+ variant?: "default" | "subtle" | "primary";
22
+ ariaLabel?: string;
23
+ overflowLabel?: string;
24
+ onNavigate?: (item: SgBreadcrumbItem, index: number) => void;
25
+ className?: string;
26
+ itemClassName?: string;
27
+ style?: React.CSSProperties;
28
+ };
29
+ export declare function SgBreadcrumb(props: Readonly<SgBreadcrumbProps>): import("react/jsx-runtime").JSX.Element;
30
+ export declare namespace SgBreadcrumb {
31
+ var displayName: string;
32
+ }
33
+ //# sourceMappingURL=SgBreadcrumb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SgBreadcrumb.d.ts","sourceRoot":"","sources":["../../src/layout/SgBreadcrumb.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;AAE1E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,qBAAqB,GAAG,KAAK,CAAC,SAAS,CAAC;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAsGF,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,2CA8K9D;yBA9Ke,YAAY"}
@@ -0,0 +1,121 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { ChevronRight, Home, MoreHorizontal } from "lucide-react";
5
+ function cn(...parts) {
6
+ return parts.filter(Boolean).join(" ");
7
+ }
8
+ function separatorNode(separator, iconClassName) {
9
+ if (React.isValidElement(separator))
10
+ return separator;
11
+ if (separator === "slash")
12
+ return _jsx("span", { className: iconClassName, children: "/" });
13
+ if (separator === "dot")
14
+ return _jsx("span", { className: iconClassName, children: "\u2022" });
15
+ if (separator === "arrow")
16
+ return _jsx("span", { className: iconClassName, children: "\u2192" });
17
+ return _jsx(ChevronRight, { className: iconClassName });
18
+ }
19
+ function toDisplayTokens(items, overflowBehavior, maxItems) {
20
+ if (overflowBehavior !== "collapse" ||
21
+ maxItems === undefined ||
22
+ maxItems < 2 ||
23
+ items.length <= maxItems) {
24
+ return items.map((item) => ({ type: "item", value: item }));
25
+ }
26
+ if (maxItems === 2) {
27
+ return [
28
+ { type: "item", value: items[0] },
29
+ { type: "item", value: items[items.length - 1] }
30
+ ];
31
+ }
32
+ const tailCount = maxItems - 2;
33
+ const head = items[0];
34
+ const tail = items.slice(-tailCount);
35
+ const hidden = items.slice(1, items.length - tailCount);
36
+ const out = [{ type: "item", value: head }];
37
+ if (hidden.length > 0)
38
+ out.push({ type: "overflow", value: hidden });
39
+ for (const item of tail)
40
+ out.push({ type: "item", value: item });
41
+ return out;
42
+ }
43
+ function renderActionItem(item, index, className, iconClassName, onNavigate) {
44
+ const content = (_jsxs(_Fragment, { children: [item.icon ? _jsx("span", { className: cn("inline-flex items-center justify-center", iconClassName), children: item.icon }) : null, _jsx("span", { className: "truncate", children: item.label })] }));
45
+ if (item.disabled) {
46
+ return _jsx("span", { className: cn(className, "cursor-not-allowed opacity-45"), children: content });
47
+ }
48
+ if (item.href) {
49
+ return (_jsx("a", { href: item.href, className: className, onClick: () => {
50
+ item.onClick?.();
51
+ onNavigate?.(item, index);
52
+ }, children: content }));
53
+ }
54
+ if (item.onClick) {
55
+ return (_jsx("button", { type: "button", className: className, onClick: () => {
56
+ item.onClick?.();
57
+ onNavigate?.(item, index);
58
+ }, children: content }));
59
+ }
60
+ return _jsx("span", { className: cn(className, "cursor-default"), children: content });
61
+ }
62
+ export function SgBreadcrumb(props) {
63
+ const { items, separator = "chevron", maxItems, overflowBehavior = "collapse", showHomeIcon = false, homeHref = "/", homeLabel = "Home", size = "md", variant = "default", ariaLabel = "Breadcrumb", overflowLabel = "Mais caminhos", onNavigate, className, itemClassName, style } = props;
64
+ const visibleItems = React.useMemo(() => items.filter((item) => !item.hidden), [items]);
65
+ const normalizedItems = React.useMemo(() => {
66
+ const base = visibleItems.map((item, index) => ({ item, index }));
67
+ if (!showHomeIcon)
68
+ return base;
69
+ const homeItem = {
70
+ item: {
71
+ id: "__sg_breadcrumb_home__",
72
+ label: homeLabel,
73
+ href: homeHref,
74
+ icon: _jsx(Home, { className: "size-full" })
75
+ },
76
+ index: -1
77
+ };
78
+ return [homeItem, ...base];
79
+ }, [homeHref, homeLabel, showHomeIcon, visibleItems]);
80
+ const tokens = React.useMemo(() => toDisplayTokens(normalizedItems, overflowBehavior, maxItems), [maxItems, normalizedItems, overflowBehavior]);
81
+ const sizeClasses = size === "sm"
82
+ ? {
83
+ root: "text-xs gap-1.5",
84
+ item: "px-1.5 py-0.5",
85
+ icon: "size-3.5",
86
+ sep: "text-[10px]"
87
+ }
88
+ : size === "lg"
89
+ ? {
90
+ root: "text-base gap-2.5",
91
+ item: "px-2 py-1",
92
+ icon: "size-4.5",
93
+ sep: "text-sm"
94
+ }
95
+ : {
96
+ root: "text-sm gap-2",
97
+ item: "px-1.5 py-0.5",
98
+ icon: "size-4",
99
+ sep: "text-xs"
100
+ };
101
+ const variantClasses = variant === "subtle"
102
+ ? {
103
+ item: "rounded-md text-muted-foreground hover:bg-muted/80 hover:text-foreground",
104
+ current: "rounded-md bg-muted text-foreground"
105
+ }
106
+ : variant === "primary"
107
+ ? {
108
+ item: "rounded-md text-primary hover:bg-primary/10",
109
+ current: "rounded-md bg-primary/10 text-primary font-medium"
110
+ }
111
+ : {
112
+ item: "text-muted-foreground hover:text-foreground",
113
+ current: "text-foreground font-medium"
114
+ };
115
+ const separatorEl = separatorNode(separator, cn("text-muted-foreground", sizeClasses.sep));
116
+ return (_jsx("nav", { "aria-label": ariaLabel, className: cn("min-w-0", className), style: style, children: _jsx("div", { className: cn(overflowBehavior === "scroll" ? "overflow-x-auto" : ""), children: _jsx("ol", { className: cn("flex min-w-0 items-center whitespace-nowrap", sizeClasses.root), children: tokens.map((token, tokenIndex) => {
117
+ const isLast = tokenIndex === tokens.length - 1;
118
+ return (_jsxs(React.Fragment, { children: [tokenIndex > 0 ? (_jsx("li", { "aria-hidden": true, className: "inline-flex shrink-0 items-center", children: separatorEl })) : null, token.type === "item" ? (_jsx("li", { className: "inline-flex min-w-0 items-center", children: isLast ? (_jsxs("span", { "aria-current": "page", className: cn("inline-flex min-w-0 items-center gap-1.5", sizeClasses.item, variantClasses.current, itemClassName), children: [token.value.item.icon ? (_jsx("span", { className: cn("inline-flex items-center justify-center", sizeClasses.icon), children: token.value.item.icon })) : null, _jsx("span", { className: "truncate", children: token.value.item.label })] })) : (renderActionItem(token.value.item, token.value.index, cn("inline-flex min-w-0 items-center gap-1.5 transition-colors", sizeClasses.item, variantClasses.item, itemClassName), sizeClasses.icon, onNavigate)) })) : (_jsx("li", { className: "relative inline-flex items-center", children: _jsxs("details", { className: "group", children: [_jsx("summary", { "aria-label": overflowLabel, className: cn("list-none cursor-pointer rounded-md text-muted-foreground transition-colors", "inline-flex items-center justify-center", sizeClasses.item, "hover:bg-muted hover:text-foreground [&::-webkit-details-marker]:hidden"), children: _jsx(MoreHorizontal, { className: sizeClasses.icon }) }), _jsx("ul", { className: "absolute left-0 top-full z-20 mt-1 min-w-44 rounded-md border border-border bg-popover p-1 shadow-md", children: token.value.map((entry) => (_jsx("li", { children: renderActionItem(entry.item, entry.index, cn("inline-flex w-full min-w-0 items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-sm", "text-popover-foreground hover:bg-muted"), "size-4", onNavigate) }, entry.item.id))) })] }) }))] }, token.type === "item" ? token.value.item.id : `overflow-${tokenIndex}`));
119
+ }) }) }) }));
120
+ }
121
+ SgBreadcrumb.displayName = "SgBreadcrumb";
@@ -0,0 +1,43 @@
1
+ import React from "react";
2
+ export type SgCarouselOrientation = "horizontal" | "vertical";
3
+ export interface SgCarouselProps {
4
+ /** Unique identifier for the carousel */
5
+ id?: string;
6
+ /** Items to display in the carousel */
7
+ items: React.ReactNode[];
8
+ /** Number of items to display at once */
9
+ numVisible?: number;
10
+ /** Number of items to scroll at a time */
11
+ numScroll?: number;
12
+ /** Orientation of the carousel */
13
+ orientation?: SgCarouselOrientation;
14
+ /** Enable circular mode (infinite loop) */
15
+ circular?: boolean;
16
+ /** Enable auto play */
17
+ autoPlay?: boolean;
18
+ /** Auto play interval in milliseconds */
19
+ autoPlayInterval?: number;
20
+ /** Show navigation buttons */
21
+ showNavigators?: boolean;
22
+ /** Show indicators (dots) */
23
+ showIndicators?: boolean;
24
+ /** Custom class name for container */
25
+ className?: string;
26
+ /** Custom class name for items */
27
+ itemClassName?: string;
28
+ /** Width of the carousel container */
29
+ width?: number | string;
30
+ /** Height of the carousel container */
31
+ height?: number | string;
32
+ /** Gap between items in pixels */
33
+ gap?: number;
34
+ /** Callback when active index changes */
35
+ onIndexChange?: (index: number) => void;
36
+ /** Custom render for navigation buttons */
37
+ customNavigators?: {
38
+ prev?: React.ReactNode;
39
+ next?: React.ReactNode;
40
+ };
41
+ }
42
+ export declare function SgCarousel(props: SgCarouselProps): import("react/jsx-runtime").JSX.Element;
43
+ //# sourceMappingURL=SgCarousel.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,166 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React from "react";
4
+ import { ChevronLeft, ChevronRight, ChevronUp, ChevronDown } from "lucide-react";
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;
7
+ const [activeIndex, setActiveIndex] = React.useState(0);
8
+ const [isHovered, setIsHovered] = React.useState(false);
9
+ const timerRef = React.useRef(null);
10
+ const containerRef = React.useRef(null);
11
+ const lastNotifiedIndexRef = React.useRef(activeIndex);
12
+ const [viewportSize, setViewportSize] = React.useState({ width: 0, height: 0 });
13
+ const safeNumVisible = Math.max(1, numVisible);
14
+ const safeNumScroll = Math.max(1, numScroll);
15
+ const itemCount = items.length;
16
+ const maxStartIndex = Math.max(itemCount - safeNumVisible, 0);
17
+ const totalPages = itemCount === 0 ? 0 : Math.floor(maxStartIndex / safeNumScroll) + 1;
18
+ const isHorizontal = orientation === "horizontal";
19
+ // Auto play logic
20
+ React.useEffect(() => {
21
+ if (autoPlay && !isHovered) {
22
+ timerRef.current = setInterval(() => {
23
+ handleNext();
24
+ }, autoPlayInterval);
25
+ }
26
+ return () => {
27
+ if (timerRef.current) {
28
+ clearInterval(timerRef.current);
29
+ }
30
+ };
31
+ }, [autoPlay, autoPlayInterval, isHovered, activeIndex]);
32
+ // Keep active index within bounds when props/items change.
33
+ React.useEffect(() => {
34
+ setActiveIndex((prev) => Math.min(Math.max(prev, 0), maxStartIndex));
35
+ }, [maxStartIndex]);
36
+ // Notify parent after the state is committed, avoiding setState during render warnings.
37
+ React.useEffect(() => {
38
+ if (lastNotifiedIndexRef.current === activeIndex)
39
+ return;
40
+ lastNotifiedIndexRef.current = activeIndex;
41
+ onIndexChange?.(activeIndex);
42
+ }, [activeIndex, onIndexChange]);
43
+ React.useEffect(() => {
44
+ const element = containerRef.current;
45
+ if (!element)
46
+ return;
47
+ const updateSize = () => {
48
+ const rect = element.getBoundingClientRect();
49
+ setViewportSize({ width: rect.width, height: rect.height });
50
+ };
51
+ updateSize();
52
+ if (typeof ResizeObserver === "undefined") {
53
+ window.addEventListener("resize", updateSize);
54
+ return () => {
55
+ window.removeEventListener("resize", updateSize);
56
+ };
57
+ }
58
+ const observer = new ResizeObserver(updateSize);
59
+ observer.observe(element);
60
+ return () => {
61
+ observer.disconnect();
62
+ };
63
+ }, []);
64
+ const handleNext = () => {
65
+ setActiveIndex((prev) => {
66
+ if (itemCount === 0)
67
+ return 0;
68
+ const next = prev + safeNumScroll;
69
+ if (next > maxStartIndex) {
70
+ return circular ? 0 : maxStartIndex;
71
+ }
72
+ return next;
73
+ });
74
+ };
75
+ const handlePrev = () => {
76
+ setActiveIndex((prev) => {
77
+ if (itemCount === 0)
78
+ return 0;
79
+ const next = prev - safeNumScroll;
80
+ if (next < 0) {
81
+ return circular ? maxStartIndex : 0;
82
+ }
83
+ return next;
84
+ });
85
+ };
86
+ const handleIndicatorClick = (index) => {
87
+ const next = Math.min(index * safeNumScroll, maxStartIndex);
88
+ setActiveIndex(next);
89
+ };
90
+ const canGoPrev = circular ? maxStartIndex > 0 : activeIndex > 0;
91
+ const canGoNext = circular ? maxStartIndex > 0 : activeIndex < maxStartIndex;
92
+ const itemPercent = 100 / safeNumVisible;
93
+ const gapPerItem = (gap * (safeNumVisible - 1)) / safeNumVisible;
94
+ const itemExtentCss = `calc(${itemPercent}% - ${gapPerItem}px)`;
95
+ const getTransformValue = () => {
96
+ const viewportExtent = isHorizontal ? viewportSize.width : viewportSize.height;
97
+ if (viewportExtent > 0) {
98
+ const itemExtent = Math.max(0, (viewportExtent - gap * (safeNumVisible - 1)) / safeNumVisible);
99
+ const step = itemExtent + gap;
100
+ const offsetPx = activeIndex * step;
101
+ return isHorizontal
102
+ ? `translate3d(-${offsetPx}px, 0, 0)`
103
+ : `translate3d(0, -${offsetPx}px, 0)`;
104
+ }
105
+ // Fallback before first measure.
106
+ const itemPercent = 100 / safeNumVisible;
107
+ const fallbackGap = (activeIndex * gap) / safeNumVisible;
108
+ const fallbackOffset = activeIndex * itemPercent;
109
+ return isHorizontal
110
+ ? `translateX(calc(-${fallbackOffset}% - ${fallbackGap}px))`
111
+ : `translateY(calc(-${fallbackOffset}% - ${fallbackGap}px))`;
112
+ };
113
+ const NavButton = ({ direction, onClick, disabled }) => {
114
+ const isPrev = direction === "prev";
115
+ const Icon = isHorizontal
116
+ ? isPrev ? ChevronLeft : ChevronRight
117
+ : isPrev ? ChevronUp : ChevronDown;
118
+ const customButton = isPrev ? customNavigators?.prev : customNavigators?.next;
119
+ if (customButton) {
120
+ return (_jsx("button", { type: "button", onClick: onClick, disabled: disabled, className: `
121
+ absolute z-10 flex items-center justify-center transition-all
122
+ ${disabled ? "opacity-30 cursor-not-allowed" : "hover:opacity-100 cursor-pointer"}
123
+ ${isHorizontal
124
+ ? `top-1/2 -translate-y-1/2 ${isPrev ? "left-2" : "right-2"}`
125
+ : `left-1/2 -translate-x-1/2 ${isPrev ? "-top-5" : "-bottom-5"}`}
126
+ `, children: customButton }));
127
+ }
128
+ return (_jsx("button", { type: "button", onClick: onClick, disabled: disabled, className: `
129
+ absolute z-10 flex h-10 w-10 items-center justify-center rounded-full
130
+ bg-white/90 shadow-lg opacity-70 transition-all
131
+ ${disabled ? "opacity-30 cursor-not-allowed" : "hover:opacity-100 hover:bg-white cursor-pointer"}
132
+ ${isHorizontal
133
+ ? `top-1/2 -translate-y-1/2 ${isPrev ? "left-2" : "right-2"}`
134
+ : `left-1/2 -translate-x-1/2 ${isPrev ? "-top-5" : "-bottom-5"}`}
135
+ `, children: _jsx(Icon, { className: "h-6 w-6 text-foreground" }) }));
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: `
138
+ flex transition-transform duration-500 ease-in-out
139
+ ${isHorizontal ? "flex-row" : "flex-col"}
140
+ `, style: {
141
+ transform: getTransformValue(),
142
+ gap: `${gap}px`,
143
+ height: isHorizontal ? undefined : "100%"
144
+ }, children: items.map((item, index) => (_jsx("div", { className: `
145
+ flex-shrink-0
146
+ ${itemClassName}
147
+ `, style: {
148
+ width: isHorizontal ? itemExtentCss : "100%",
149
+ height: isHorizontal ? "100%" : itemExtentCss
150
+ }, children: item }, index))) }) }), showIndicators && (_jsx("div", { className: `
151
+ absolute flex gap-2 z-10
152
+ ${isHorizontal
153
+ ? "bottom-4 left-1/2 -translate-x-1/2 flex-row"
154
+ : "-right-6 top-1/2 -translate-y-1/2 flex-col"}
155
+ `, children: Array.from({ length: totalPages }).map((_, index) => {
156
+ const isActive = Math.floor(activeIndex / safeNumScroll) === index;
157
+ return (_jsx("button", { type: "button", onClick: () => handleIndicatorClick(index), className: `
158
+ transition-all
159
+ ${isHorizontal ? "h-2" : "w-2"}
160
+ ${isActive
161
+ ? `${isHorizontal ? "w-8" : "h-8"} bg-primary`
162
+ : `${isHorizontal ? "w-2" : "h-2"} bg-white/60 hover:bg-white/80`}
163
+ rounded-full
164
+ `, "aria-label": `Go to slide ${index + 1}` }, index));
165
+ }) }))] }));
166
+ }
@@ -17,13 +17,27 @@ export type SgDockLayoutProps = {
17
17
  children: React.ReactNode;
18
18
  defaultState?: SgDockLayoutState;
19
19
  };
20
+ export type SgDockDropIndicator = {
21
+ zone: SgDockZoneId;
22
+ index: number;
23
+ };
20
24
  type DockContextValue = {
21
25
  layoutId: string;
22
26
  getZoneElement: (zone: SgDockZoneId) => HTMLDivElement | null;
23
27
  registerZone: (zone: SgDockZoneId, el: HTMLDivElement | null) => void;
24
28
  getZoneAtPoint: (x: number, y: number) => SgDockZoneId | null;
29
+ getDropPlacementAtPoint: (x: number, y: number, draggingToolbarId: string) => SgDockDropIndicator | null;
30
+ getZoneToolbarCount: (zone: SgDockZoneId) => number;
31
+ isDropPreviewActive: boolean;
32
+ setDropPreviewActive: (next: boolean) => void;
33
+ draggingToolbarId: string | null;
34
+ setDraggingToolbarId: (toolbarId: string | null) => void;
35
+ dropIndicator: SgDockDropIndicator | null;
36
+ setDropIndicator: (next: SgDockDropIndicator | null) => void;
25
37
  getToolbarZone: (id: string) => SgDockZoneId | null;
38
+ getToolbarOrder: (id: string) => number | undefined;
26
39
  moveToolbar: (id: string, zone: SgDockZoneId) => void;
40
+ placeToolbar: (id: string, zone: SgDockZoneId, index: number) => void;
27
41
  ensureToolbar: (id: string, state: Partial<SgDockToolbarState>) => void;
28
42
  getToolbarCollapsed: (id: string) => boolean | undefined;
29
43
  setToolbarCollapsed: (id: string, next: boolean) => void;
@@ -1 +1 @@
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,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC,CAAC;AAIF,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,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC;IACpD,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACtD,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,2CAqH9D;yBArHe,YAAY"}
1
+ {"version":3,"file":"SgDockLayout.d.ts","sourceRoot":"","sources":["../../src/layout/SgDockLayout.tsx"],"names":[],"mappings":"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"}